foldkit 0.32.0 → 0.33.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.
package/README.md CHANGED
@@ -10,7 +10,7 @@
10
10
  <a href="https://www.npmjs.com/package/foldkit"><img src="https://img.shields.io/npm/v/foldkit" alt="npm version"></a>
11
11
  </p>
12
12
 
13
- <h3 align="center">Beautifully boring frontend applications.</h3>
13
+ <h3 align="center">The frontend framework for correctness.</h3>
14
14
 
15
15
  <p align="center">
16
16
  <a href="https://foldkit.dev"><strong>Documentation</strong></a> · <a href="https://github.com/devinjameson/foldkit#examples"><strong>Examples</strong></a> · <a href="https://foldkit.dev/getting-started"><strong>Getting Started</strong></a>
@@ -20,8 +20,8 @@
20
20
 
21
21
  Foldkit is an [Elm Architecture](https://guide.elm-lang.org/architecture/) framework for TypeScript, powered by [Effect](https://effect.website/). One Model, one update function, one way to do things. No hooks, no local state, no hidden mutations.
22
22
 
23
- > [!WARNING]
24
- > Foldkit is pre-1.0. APIs may change between minor versions.
23
+ > [!NOTE]
24
+ > Foldkit is pre-1.0. The core API is stable, but breaking changes may occur in minor releases. See the [changelog](./CHANGELOG.md) for details.
25
25
 
26
26
  ## Who It's For
27
27
 
@@ -0,0 +1,3 @@
1
+ declare const overlayStyles = ":host {\n --dt-bg: #1e1e2e;\n --dt-surface-selected: #282839;\n --dt-border: #585b70;\n --dt-text: #cdd6f4;\n --dt-text-muted: #9399b2;\n --dt-accent: #cba6f7;\n --dt-live: #a6e3a1;\n --dt-paused: #fab387;\n --dt-json-string: #a6e3a1;\n --dt-json-number: #89b4fa;\n --dt-json-boolean: #fab387;\n --dt-json-null: #9399b2;\n --dt-json-key: #89dceb;\n --dt-json-tag: #cba6f7;\n --dt-json-preview: #9399b2;\n --dt-json-arrow: #9399b2;\n --dt-tree-hover: #313244;\n --dt-diff-changed: #74c7ec;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n}\nbutton {\n font: inherit;\n color: inherit;\n}\nul {\n list-style: none;\n}\n\n.fixed {\n position: fixed;\n}\n.flex {\n display: flex;\n}\n.flex-col {\n flex-direction: column;\n}\n.flex-1 {\n flex: 1 1 0%;\n}\n.items-center {\n align-items: center;\n}\n.justify-center {\n justify-content: center;\n}\n.justify-between {\n justify-content: space-between;\n}\n.shrink-0 {\n flex-shrink: 0;\n}\n.inline-block {\n display: inline-block;\n}\n.gap-0\\.5 {\n gap: 2px;\n}\n.gap-1\\.5 {\n gap: 6px;\n}\n.gap-2 {\n gap: 8px;\n}\n.gap-px {\n gap: 1px;\n}\n.px-1 {\n padding-left: 4px;\n padding-right: 4px;\n}\n.px-2 {\n padding-left: 8px;\n padding-right: 8px;\n}\n.px-2\\.5 {\n padding-left: 10px;\n padding-right: 10px;\n}\n.p-3 {\n padding: 12px;\n}\n.px-3 {\n padding-left: 12px;\n padding-right: 12px;\n}\n.py-0\\.5 {\n padding-top: 2px;\n padding-bottom: 2px;\n}\n.pt-1 {\n padding-top: 4px;\n}\n.pl-1 {\n padding-left: 4px;\n}\n.py-1 {\n padding-top: 4px;\n padding-bottom: 4px;\n}\n.py-1\\.5 {\n padding-top: 6px;\n padding-bottom: 6px;\n}\n.py-2 {\n padding-top: 8px;\n padding-bottom: 8px;\n}\n.py-px {\n padding-top: 1px;\n padding-bottom: 1px;\n}\n.w-1\\.5 {\n width: 6px;\n}\n.h-1\\.5 {\n height: 6px;\n}\n.w-3 {\n width: 12px;\n}\n.w-5 {\n width: 20px;\n}\n.h-5 {\n height: 20px;\n}\n.w-14 {\n width: 56px;\n}\n.h-14 {\n height: 56px;\n}\n.min-w-0 {\n min-width: 0;\n}\n.min-w-5 {\n min-width: 20px;\n}\n.min-h-0 {\n min-height: 0;\n}\n/* Badge positions \u2014 flush against side edge */\n.dt-pos-br {\n bottom: 16px;\n right: 0;\n border-radius: 6px 0 0 6px;\n}\n.dt-pos-bl {\n bottom: 16px;\n left: 0;\n border-radius: 0 6px 6px 0;\n}\n.dt-pos-tr {\n top: 16px;\n right: 0;\n border-radius: 6px 0 0 6px;\n}\n.dt-pos-tl {\n top: 16px;\n left: 0;\n border-radius: 0 6px 6px 0;\n}\n.overflow-hidden {\n overflow: hidden;\n}\n.overflow-auto {\n overflow: auto;\n}\n.overflow-y-auto {\n overflow-y: auto;\n}\n.overscroll-contain {\n overscroll-behavior: contain;\n}\n.truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.rounded {\n border-radius: 4px;\n}\n.rounded-lg {\n border-radius: 8px;\n}\n.rounded-full {\n border-radius: 9999px;\n}\n.border {\n border-width: 1px;\n border-style: solid;\n border-color: var(--dt-border);\n}\n.border-b {\n border-bottom: 1px solid var(--dt-border);\n}\n.border-t {\n border-top: 1px solid var(--dt-border);\n}\n.border-r {\n border-right: 1px solid var(--dt-border);\n}\n.border-l {\n border-left: 1px solid var(--dt-border);\n}\n.border-none {\n border: none;\n}\n.border-l-3 {\n border-left: 3px solid transparent;\n}\n.border-dt-live {\n border-color: var(--dt-live);\n}\n.selected {\n background-color: var(--dt-surface-selected);\n}\n.dt-row:hover:not(.selected) {\n background-color: var(--dt-tree-hover);\n}\n.dt-header-button:hover {\n color: var(--dt-text);\n}\n.dt-resume-button:hover {\n opacity: 0.7;\n}\n.dt-tab-button {\n position: relative;\n background: transparent;\n border: none;\n border-right: 1px solid var(--dt-border);\n outline: none;\n flex: 1;\n}\n.dt-tab-active {\n background-color: var(--dt-surface-selected);\n}\n.dt-tab-button:not(.dt-tab-active):hover {\n color: var(--dt-text);\n background-color: rgba(49, 50, 68, 0.3);\n}\n.font-sans {\n font-family:\n system-ui,\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n Roboto,\n sans-serif;\n}\n.font-mono {\n font-family:\n ui-monospace, SFMono-Regular, 'SF Mono', Menlo, Consolas, monospace;\n}\n.font-medium {\n font-weight: 500;\n}\n.font-semibold {\n font-weight: 600;\n}\n.text-xs {\n font-size: 12px;\n}\n.text-2xs {\n font-size: 10px;\n}\n.text-sm {\n font-size: 11px;\n}\n.text-base {\n font-size: 13px;\n}\n.text-md {\n font-size: 15px;\n}\n.text-lg {\n font-size: 20px;\n}\n.text-xl {\n font-size: 26px;\n}\n.italic {\n font-style: italic;\n}\n.text-right {\n text-align: right;\n}\n.tracking-wide {\n letter-spacing: 0.025em;\n}\n.tracking-wider {\n letter-spacing: 0.05em;\n}\n.leading-none {\n line-height: 1;\n}\n.leading-snug {\n line-height: 1.35;\n}\n.bg-dt-bg {\n background-color: var(--dt-bg);\n}\n.bg-dt-live {\n background-color: var(--dt-live);\n}\n.bg-transparent {\n background-color: transparent;\n}\n.text-dt {\n color: var(--dt-text);\n}\n.text-dt-muted {\n color: var(--dt-text-muted);\n}\n.text-dt-accent {\n color: var(--dt-accent);\n}\n.text-dt-live {\n color: var(--dt-live);\n}\n.text-dt-paused {\n color: var(--dt-paused);\n}\n.cursor-pointer {\n cursor: pointer;\n}\n.outline-none {\n outline: none;\n}\n.transition-colors {\n transition-property: color, background-color, border-color;\n transition-duration: 100ms;\n transition-timing-function: ease;\n}\n\n/* Panel */\n.dt-panel {\n width: 360px;\n height: 480px;\n box-shadow: 0 8px 32px rgba(0, 0, 0, 0.5);\n z-index: 99998;\n}\n/* Panel positions */\n.dt-panel-br {\n bottom: 16px;\n right: 28px;\n}\n.dt-panel-bl {\n bottom: 16px;\n left: 28px;\n}\n.dt-panel-tr {\n top: 16px;\n right: 28px;\n}\n.dt-panel-tl {\n top: 16px;\n left: 28px;\n}\n.dt-panel-wide {\n width: 720px;\n}\n.dt-message-pane {\n width: 320px;\n flex-shrink: 0;\n}\n.dt-badge {\n z-index: 99999;\n box-shadow: -2px 0 8px rgba(0, 0, 0, 0.3);\n transition: background-color 150ms ease;\n}\n.dt-badge-accent {\n border: none;\n}\n.dt-badge-accent:hover {\n background-color: #252538;\n}\n.dt-badge-paused {\n background-color: var(--dt-paused);\n color: var(--dt-bg);\n border: none;\n}\n.dt-badge-paused:hover {\n background-color: #e0a070;\n}\n.message-list > :last-child {\n border-bottom: none;\n}\n\n/* JSON tree */\n.tree-row {\n position: relative;\n white-space: nowrap;\n line-height: 18px;\n padding-right: 8px;\n}\n.tree-row-expandable:hover {\n background-color: var(--dt-tree-hover);\n}\n.inspector-tree {\n font-family:\n ui-monospace, SFMono-Regular, 'SF Mono', Menlo, Consolas, monospace;\n}\n.json-key {\n color: var(--dt-json-key);\n}\n.json-string {\n color: var(--dt-json-string);\n}\n.json-number {\n color: var(--dt-json-number);\n}\n.json-boolean {\n color: var(--dt-json-boolean);\n}\n.json-null {\n color: var(--dt-json-null);\n}\n.json-tag {\n color: var(--dt-json-tag);\n margin-right: 4px;\n}\n.json-preview {\n color: var(--dt-json-preview);\n}\n.json-arrow {\n color: var(--dt-json-arrow);\n width: 10px;\n height: 10px;\n user-select: none;\n}\n\n/* Diff */\n.diff-changed {\n background-color: rgba(116, 199, 236, 0.06);\n}\n.diff-dot {\n position: absolute;\n left: 3px;\n width: 5px;\n height: 5px;\n border-radius: 9999px;\n background-color: var(--dt-diff-changed);\n}\n.diff-dot-inline {\n width: 5px;\n height: 5px;\n border-radius: 9999px;\n background-color: var(--dt-diff-changed);\n flex-shrink: 0;\n}\n.dot-column {\n width: 5px;\n flex-shrink: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.pause-column {\n width: 8px;\n flex-shrink: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.dt-pause-icon {\n width: 8px;\n height: 8px;\n color: var(--dt-paused);\n}\n\n/* Interaction blocker \u2014 covers the app while time-travelling */\n.dt-interaction-blocker {\n position: fixed;\n inset: 0;\n z-index: 99997;\n cursor: not-allowed;\n}\n\n/* Mobile */\n@media (max-width: 767px) {\n .dt-panel {\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n width: 100%;\n height: 100%;\n border-radius: 0;\n border: none;\n }\n .dt-panel-wide {\n width: 100%;\n }\n .dt-content {\n flex-direction: column;\n }\n .dt-message-pane {\n width: 100%;\n max-height: 40%;\n border-bottom: 1px solid var(--dt-border);\n }\n .dt-inspector-pane {\n border-left: none;\n }\n}\n";
2
+ export { overlayStyles };
3
+ //# sourceMappingURL=overlay-styles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overlay-styles.d.ts","sourceRoot":"","sources":["../../src/devtools/overlay-styles.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,aAAa,mwQAmgBlB,CAAA;AAED,OAAO,EAAE,aAAa,EAAE,CAAA"}
@@ -0,0 +1,517 @@
1
+ const overlayStyles = `:host {
2
+ --dt-bg: #1e1e2e;
3
+ --dt-surface-selected: #282839;
4
+ --dt-border: #585b70;
5
+ --dt-text: #cdd6f4;
6
+ --dt-text-muted: #9399b2;
7
+ --dt-accent: #cba6f7;
8
+ --dt-live: #a6e3a1;
9
+ --dt-paused: #fab387;
10
+ --dt-json-string: #a6e3a1;
11
+ --dt-json-number: #89b4fa;
12
+ --dt-json-boolean: #fab387;
13
+ --dt-json-null: #9399b2;
14
+ --dt-json-key: #89dceb;
15
+ --dt-json-tag: #cba6f7;
16
+ --dt-json-preview: #9399b2;
17
+ --dt-json-arrow: #9399b2;
18
+ --dt-tree-hover: #313244;
19
+ --dt-diff-changed: #74c7ec;
20
+ }
21
+
22
+ *,
23
+ *::before,
24
+ *::after {
25
+ box-sizing: border-box;
26
+ margin: 0;
27
+ padding: 0;
28
+ }
29
+ button {
30
+ font: inherit;
31
+ color: inherit;
32
+ }
33
+ ul {
34
+ list-style: none;
35
+ }
36
+
37
+ .fixed {
38
+ position: fixed;
39
+ }
40
+ .flex {
41
+ display: flex;
42
+ }
43
+ .flex-col {
44
+ flex-direction: column;
45
+ }
46
+ .flex-1 {
47
+ flex: 1 1 0%;
48
+ }
49
+ .items-center {
50
+ align-items: center;
51
+ }
52
+ .justify-center {
53
+ justify-content: center;
54
+ }
55
+ .justify-between {
56
+ justify-content: space-between;
57
+ }
58
+ .shrink-0 {
59
+ flex-shrink: 0;
60
+ }
61
+ .inline-block {
62
+ display: inline-block;
63
+ }
64
+ .gap-0\\.5 {
65
+ gap: 2px;
66
+ }
67
+ .gap-1\\.5 {
68
+ gap: 6px;
69
+ }
70
+ .gap-2 {
71
+ gap: 8px;
72
+ }
73
+ .gap-px {
74
+ gap: 1px;
75
+ }
76
+ .px-1 {
77
+ padding-left: 4px;
78
+ padding-right: 4px;
79
+ }
80
+ .px-2 {
81
+ padding-left: 8px;
82
+ padding-right: 8px;
83
+ }
84
+ .px-2\\.5 {
85
+ padding-left: 10px;
86
+ padding-right: 10px;
87
+ }
88
+ .p-3 {
89
+ padding: 12px;
90
+ }
91
+ .px-3 {
92
+ padding-left: 12px;
93
+ padding-right: 12px;
94
+ }
95
+ .py-0\\.5 {
96
+ padding-top: 2px;
97
+ padding-bottom: 2px;
98
+ }
99
+ .pt-1 {
100
+ padding-top: 4px;
101
+ }
102
+ .pl-1 {
103
+ padding-left: 4px;
104
+ }
105
+ .py-1 {
106
+ padding-top: 4px;
107
+ padding-bottom: 4px;
108
+ }
109
+ .py-1\\.5 {
110
+ padding-top: 6px;
111
+ padding-bottom: 6px;
112
+ }
113
+ .py-2 {
114
+ padding-top: 8px;
115
+ padding-bottom: 8px;
116
+ }
117
+ .py-px {
118
+ padding-top: 1px;
119
+ padding-bottom: 1px;
120
+ }
121
+ .w-1\\.5 {
122
+ width: 6px;
123
+ }
124
+ .h-1\\.5 {
125
+ height: 6px;
126
+ }
127
+ .w-3 {
128
+ width: 12px;
129
+ }
130
+ .w-5 {
131
+ width: 20px;
132
+ }
133
+ .h-5 {
134
+ height: 20px;
135
+ }
136
+ .w-14 {
137
+ width: 56px;
138
+ }
139
+ .h-14 {
140
+ height: 56px;
141
+ }
142
+ .min-w-0 {
143
+ min-width: 0;
144
+ }
145
+ .min-w-5 {
146
+ min-width: 20px;
147
+ }
148
+ .min-h-0 {
149
+ min-height: 0;
150
+ }
151
+ /* Badge positions — flush against side edge */
152
+ .dt-pos-br {
153
+ bottom: 16px;
154
+ right: 0;
155
+ border-radius: 6px 0 0 6px;
156
+ }
157
+ .dt-pos-bl {
158
+ bottom: 16px;
159
+ left: 0;
160
+ border-radius: 0 6px 6px 0;
161
+ }
162
+ .dt-pos-tr {
163
+ top: 16px;
164
+ right: 0;
165
+ border-radius: 6px 0 0 6px;
166
+ }
167
+ .dt-pos-tl {
168
+ top: 16px;
169
+ left: 0;
170
+ border-radius: 0 6px 6px 0;
171
+ }
172
+ .overflow-hidden {
173
+ overflow: hidden;
174
+ }
175
+ .overflow-auto {
176
+ overflow: auto;
177
+ }
178
+ .overflow-y-auto {
179
+ overflow-y: auto;
180
+ }
181
+ .overscroll-contain {
182
+ overscroll-behavior: contain;
183
+ }
184
+ .truncate {
185
+ overflow: hidden;
186
+ text-overflow: ellipsis;
187
+ white-space: nowrap;
188
+ }
189
+ .rounded {
190
+ border-radius: 4px;
191
+ }
192
+ .rounded-lg {
193
+ border-radius: 8px;
194
+ }
195
+ .rounded-full {
196
+ border-radius: 9999px;
197
+ }
198
+ .border {
199
+ border-width: 1px;
200
+ border-style: solid;
201
+ border-color: var(--dt-border);
202
+ }
203
+ .border-b {
204
+ border-bottom: 1px solid var(--dt-border);
205
+ }
206
+ .border-t {
207
+ border-top: 1px solid var(--dt-border);
208
+ }
209
+ .border-r {
210
+ border-right: 1px solid var(--dt-border);
211
+ }
212
+ .border-l {
213
+ border-left: 1px solid var(--dt-border);
214
+ }
215
+ .border-none {
216
+ border: none;
217
+ }
218
+ .border-l-3 {
219
+ border-left: 3px solid transparent;
220
+ }
221
+ .border-dt-live {
222
+ border-color: var(--dt-live);
223
+ }
224
+ .selected {
225
+ background-color: var(--dt-surface-selected);
226
+ }
227
+ .dt-row:hover:not(.selected) {
228
+ background-color: var(--dt-tree-hover);
229
+ }
230
+ .dt-header-button:hover {
231
+ color: var(--dt-text);
232
+ }
233
+ .dt-resume-button:hover {
234
+ opacity: 0.7;
235
+ }
236
+ .dt-tab-button {
237
+ position: relative;
238
+ background: transparent;
239
+ border: none;
240
+ border-right: 1px solid var(--dt-border);
241
+ outline: none;
242
+ flex: 1;
243
+ }
244
+ .dt-tab-active {
245
+ background-color: var(--dt-surface-selected);
246
+ }
247
+ .dt-tab-button:not(.dt-tab-active):hover {
248
+ color: var(--dt-text);
249
+ background-color: rgba(49, 50, 68, 0.3);
250
+ }
251
+ .font-sans {
252
+ font-family:
253
+ system-ui,
254
+ -apple-system,
255
+ BlinkMacSystemFont,
256
+ 'Segoe UI',
257
+ Roboto,
258
+ sans-serif;
259
+ }
260
+ .font-mono {
261
+ font-family:
262
+ ui-monospace, SFMono-Regular, 'SF Mono', Menlo, Consolas, monospace;
263
+ }
264
+ .font-medium {
265
+ font-weight: 500;
266
+ }
267
+ .font-semibold {
268
+ font-weight: 600;
269
+ }
270
+ .text-xs {
271
+ font-size: 12px;
272
+ }
273
+ .text-2xs {
274
+ font-size: 10px;
275
+ }
276
+ .text-sm {
277
+ font-size: 11px;
278
+ }
279
+ .text-base {
280
+ font-size: 13px;
281
+ }
282
+ .text-md {
283
+ font-size: 15px;
284
+ }
285
+ .text-lg {
286
+ font-size: 20px;
287
+ }
288
+ .text-xl {
289
+ font-size: 26px;
290
+ }
291
+ .italic {
292
+ font-style: italic;
293
+ }
294
+ .text-right {
295
+ text-align: right;
296
+ }
297
+ .tracking-wide {
298
+ letter-spacing: 0.025em;
299
+ }
300
+ .tracking-wider {
301
+ letter-spacing: 0.05em;
302
+ }
303
+ .leading-none {
304
+ line-height: 1;
305
+ }
306
+ .leading-snug {
307
+ line-height: 1.35;
308
+ }
309
+ .bg-dt-bg {
310
+ background-color: var(--dt-bg);
311
+ }
312
+ .bg-dt-live {
313
+ background-color: var(--dt-live);
314
+ }
315
+ .bg-transparent {
316
+ background-color: transparent;
317
+ }
318
+ .text-dt {
319
+ color: var(--dt-text);
320
+ }
321
+ .text-dt-muted {
322
+ color: var(--dt-text-muted);
323
+ }
324
+ .text-dt-accent {
325
+ color: var(--dt-accent);
326
+ }
327
+ .text-dt-live {
328
+ color: var(--dt-live);
329
+ }
330
+ .text-dt-paused {
331
+ color: var(--dt-paused);
332
+ }
333
+ .cursor-pointer {
334
+ cursor: pointer;
335
+ }
336
+ .outline-none {
337
+ outline: none;
338
+ }
339
+ .transition-colors {
340
+ transition-property: color, background-color, border-color;
341
+ transition-duration: 100ms;
342
+ transition-timing-function: ease;
343
+ }
344
+
345
+ /* Panel */
346
+ .dt-panel {
347
+ width: 360px;
348
+ height: 480px;
349
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.5);
350
+ z-index: 99998;
351
+ }
352
+ /* Panel positions */
353
+ .dt-panel-br {
354
+ bottom: 16px;
355
+ right: 28px;
356
+ }
357
+ .dt-panel-bl {
358
+ bottom: 16px;
359
+ left: 28px;
360
+ }
361
+ .dt-panel-tr {
362
+ top: 16px;
363
+ right: 28px;
364
+ }
365
+ .dt-panel-tl {
366
+ top: 16px;
367
+ left: 28px;
368
+ }
369
+ .dt-panel-wide {
370
+ width: 720px;
371
+ }
372
+ .dt-message-pane {
373
+ width: 320px;
374
+ flex-shrink: 0;
375
+ }
376
+ .dt-badge {
377
+ z-index: 99999;
378
+ box-shadow: -2px 0 8px rgba(0, 0, 0, 0.3);
379
+ transition: background-color 150ms ease;
380
+ }
381
+ .dt-badge-accent {
382
+ border: none;
383
+ }
384
+ .dt-badge-accent:hover {
385
+ background-color: #252538;
386
+ }
387
+ .dt-badge-paused {
388
+ background-color: var(--dt-paused);
389
+ color: var(--dt-bg);
390
+ border: none;
391
+ }
392
+ .dt-badge-paused:hover {
393
+ background-color: #e0a070;
394
+ }
395
+ .message-list > :last-child {
396
+ border-bottom: none;
397
+ }
398
+
399
+ /* JSON tree */
400
+ .tree-row {
401
+ position: relative;
402
+ white-space: nowrap;
403
+ line-height: 18px;
404
+ padding-right: 8px;
405
+ }
406
+ .tree-row-expandable:hover {
407
+ background-color: var(--dt-tree-hover);
408
+ }
409
+ .inspector-tree {
410
+ font-family:
411
+ ui-monospace, SFMono-Regular, 'SF Mono', Menlo, Consolas, monospace;
412
+ }
413
+ .json-key {
414
+ color: var(--dt-json-key);
415
+ }
416
+ .json-string {
417
+ color: var(--dt-json-string);
418
+ }
419
+ .json-number {
420
+ color: var(--dt-json-number);
421
+ }
422
+ .json-boolean {
423
+ color: var(--dt-json-boolean);
424
+ }
425
+ .json-null {
426
+ color: var(--dt-json-null);
427
+ }
428
+ .json-tag {
429
+ color: var(--dt-json-tag);
430
+ margin-right: 4px;
431
+ }
432
+ .json-preview {
433
+ color: var(--dt-json-preview);
434
+ }
435
+ .json-arrow {
436
+ color: var(--dt-json-arrow);
437
+ width: 10px;
438
+ height: 10px;
439
+ user-select: none;
440
+ }
441
+
442
+ /* Diff */
443
+ .diff-changed {
444
+ background-color: rgba(116, 199, 236, 0.06);
445
+ }
446
+ .diff-dot {
447
+ position: absolute;
448
+ left: 3px;
449
+ width: 5px;
450
+ height: 5px;
451
+ border-radius: 9999px;
452
+ background-color: var(--dt-diff-changed);
453
+ }
454
+ .diff-dot-inline {
455
+ width: 5px;
456
+ height: 5px;
457
+ border-radius: 9999px;
458
+ background-color: var(--dt-diff-changed);
459
+ flex-shrink: 0;
460
+ }
461
+ .dot-column {
462
+ width: 5px;
463
+ flex-shrink: 0;
464
+ display: flex;
465
+ align-items: center;
466
+ justify-content: center;
467
+ }
468
+ .pause-column {
469
+ width: 8px;
470
+ flex-shrink: 0;
471
+ display: flex;
472
+ align-items: center;
473
+ justify-content: center;
474
+ }
475
+ .dt-pause-icon {
476
+ width: 8px;
477
+ height: 8px;
478
+ color: var(--dt-paused);
479
+ }
480
+
481
+ /* Interaction blocker — covers the app while time-travelling */
482
+ .dt-interaction-blocker {
483
+ position: fixed;
484
+ inset: 0;
485
+ z-index: 99997;
486
+ cursor: not-allowed;
487
+ }
488
+
489
+ /* Mobile */
490
+ @media (max-width: 767px) {
491
+ .dt-panel {
492
+ top: 0;
493
+ left: 0;
494
+ right: 0;
495
+ bottom: 0;
496
+ width: 100%;
497
+ height: 100%;
498
+ border-radius: 0;
499
+ border: none;
500
+ }
501
+ .dt-panel-wide {
502
+ width: 100%;
503
+ }
504
+ .dt-content {
505
+ flex-direction: column;
506
+ }
507
+ .dt-message-pane {
508
+ width: 100%;
509
+ max-height: 40%;
510
+ border-bottom: 1px solid var(--dt-border);
511
+ }
512
+ .dt-inspector-pane {
513
+ border-left: none;
514
+ }
515
+ }
516
+ `;
517
+ export { overlayStyles };
@@ -0,0 +1,5 @@
1
+ import { Effect, Option } from 'effect';
2
+ import type { DevtoolsMode, DevtoolsPosition } from '../runtime/runtime';
3
+ import { type DevtoolsStore } from './store';
4
+ export declare const createOverlay: (store: DevtoolsStore, position: DevtoolsPosition, mode: DevtoolsMode, maybeBanner: Option.Option<string>) => Effect.Effect<void, never, never>;
5
+ //# sourceMappingURL=overlay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overlay.d.ts","sourceRoot":"","sources":["../../src/devtools/overlay.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,MAAM,EAIN,MAAM,EAQP,MAAM,QAAQ,CAAA;AAOf,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAMxE,OAAO,EAAE,KAAK,aAAa,EAA+B,MAAM,SAAS,CAAA;AA8vCzE,eAAO,MAAM,aAAa,GACxB,OAAO,aAAa,EACpB,UAAU,gBAAgB,EAC1B,MAAM,YAAY,EAClB,aAAa,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,sCA2ChC,CAAA"}