@foldkit/devtools 0.124.0 → 0.125.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.
- package/dist/overlay.d.ts +3 -2
- package/dist/overlay.d.ts.map +1 -1
- package/dist/overlay.js +43 -21
- package/package.json +3 -3
package/dist/overlay.d.ts
CHANGED
|
@@ -31,10 +31,11 @@ export declare const LockScroll: Command.CommandDefinitionNoArgs<"LockScroll", E
|
|
|
31
31
|
export declare const UnlockScroll: Command.CommandDefinitionNoArgs<"UnlockScroll", Effect.Effect<{
|
|
32
32
|
readonly _tag: "UnlockedScroll";
|
|
33
33
|
}, never, never>>;
|
|
34
|
-
export declare const
|
|
34
|
+
export declare const PersistDevToolsState: Command.CommandDefinitionWithArgs<"PersistDevToolsState", {
|
|
35
|
+
isOpen: S.Boolean;
|
|
35
36
|
isFlattened: S.Boolean;
|
|
36
37
|
}, Effect.Effect<{
|
|
37
|
-
readonly _tag: "
|
|
38
|
+
readonly _tag: "CompletedPersistDevToolsState";
|
|
38
39
|
}, never, never>>;
|
|
39
40
|
export declare const JumpToAndInspect: Command.CommandDefinitionWithArgs<"JumpToAndInspect", {
|
|
40
41
|
index: S.Number;
|
package/dist/overlay.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"overlay.d.ts","sourceRoot":"","sources":["../src/overlay.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,OAAO,EACP,MAAM,EAEN,OAAO,EAGP,MAAM,EAKN,MAAM,IAAI,CAAC,EAGX,eAAe,EAEhB,MAAM,QAAQ,CAAA;AAEf,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAA;AAC1C,OAAO,EACL,KAAK,aAAa,EAElB,KAAK,aAAa,EAGlB,KAAK,WAAW,EAChB,KAAK,UAAU,EAKhB,MAAM,uBAAuB,CAAA;AAW9B,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;;oFAyDnC,CAAC;;;;;;;;;;;;;;;;;AAyQnC,cAAM,YAAa,SAAQ,iBAE1B;CAAG;;AAEJ,cAAM,iBAAkB,SAAQ,sBAGC;CAAG;AAEpC,eAAO,MAAM,UAAU;;iBAGsB,CAAA;AAE7C,eAAO,MAAM,YAAY;;iBAGwB,CAAA;
|
|
1
|
+
{"version":3,"file":"overlay.d.ts","sourceRoot":"","sources":["../src/overlay.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,OAAO,EACP,MAAM,EAEN,OAAO,EAGP,MAAM,EAKN,MAAM,IAAI,CAAC,EAGX,eAAe,EAEhB,MAAM,QAAQ,CAAA;AAEf,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAA;AAC1C,OAAO,EACL,KAAK,aAAa,EAElB,KAAK,aAAa,EAGlB,KAAK,WAAW,EAChB,KAAK,UAAU,EAKhB,MAAM,uBAAuB,CAAA;AAW9B,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;;oFAyDnC,CAAC;;;;;;;;;;;;;;;;;AAyQnC,cAAM,YAAa,SAAQ,iBAE1B;CAAG;;AAEJ,cAAM,iBAAkB,SAAQ,sBAGC;CAAG;AAEpC,eAAO,MAAM,UAAU;;iBAGsB,CAAA;AAE7C,eAAO,MAAM,YAAY;;iBAGwB,CAAA;AAgCjD,eAAO,MAAM,oBAAoB;;;;;iBAiBhC,CAAA;AAuBD,eAAO,MAAM,gBAAgB;;;;;;;;wBAU5B,CAAA;AAED,eAAO,MAAM,YAAY;;;;;;;;wBAIqB,CAAA;AAE9C,eAAO,MAAM,aAAa;;;;;;wBASzB,CAAA;AAED,eAAO,MAAM,MAAM;;wBASlB,CAAA;AAED,eAAO,MAAM,KAAK;;wBASjB,CAAA;AAED,eAAO,MAAM,WAAW;;6BAYvB,CAAA;AA66DD,eAAO,MAAM,aAAa,GACxB,OAAO,aAAa,EACpB,UAAU,gBAAgB,EAC1B,MAAM,YAAY,EAClB,aAAa,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,6DAgFhC,CAAA"}
|
package/dist/overlay.js
CHANGED
|
@@ -101,6 +101,7 @@ const Model = S.Struct({
|
|
|
101
101
|
scrubberSlider: S.suspend(() => Slider.Model),
|
|
102
102
|
});
|
|
103
103
|
const Flags = S.Struct({
|
|
104
|
+
isOpen: S.Boolean,
|
|
104
105
|
isMobile: S.Boolean,
|
|
105
106
|
isFlattened: S.Boolean,
|
|
106
107
|
entries: S.Array(DisplayEntry),
|
|
@@ -116,7 +117,7 @@ const ClickedSettingsToggle = m('ClickedSettingsToggle');
|
|
|
116
117
|
const GotFlattenSwitchMessage = m('GotFlattenSwitchMessage', {
|
|
117
118
|
message: Switch.Message,
|
|
118
119
|
});
|
|
119
|
-
const
|
|
120
|
+
const CompletedPersistDevToolsState = m('CompletedPersistDevToolsState');
|
|
120
121
|
const ClickedRow = m('ClickedRow', { index: S.Number });
|
|
121
122
|
const ClickedResume = m('ClickedResume');
|
|
122
123
|
const ClickedClear = m('ClickedClear');
|
|
@@ -161,7 +162,7 @@ const Message = S.Union([
|
|
|
161
162
|
ClickedToggle,
|
|
162
163
|
ClickedSettingsToggle,
|
|
163
164
|
GotFlattenSwitchMessage,
|
|
164
|
-
|
|
165
|
+
CompletedPersistDevToolsState,
|
|
165
166
|
ClickedRow,
|
|
166
167
|
ClickedResume,
|
|
167
168
|
ClickedClear,
|
|
@@ -189,8 +190,7 @@ const MOBILE_BREAKPOINT_QUERY = `(max-width: ${MOBILE_BREAKPOINT}px)`;
|
|
|
189
190
|
const TREE_INDENT_PX = 12;
|
|
190
191
|
const MAX_PREVIEW_KEYS = 3;
|
|
191
192
|
const ALL_MESSAGES_VALUE = '';
|
|
192
|
-
const
|
|
193
|
-
const BooleanJsonString = S.fromJsonString(S.Boolean);
|
|
193
|
+
const DEVTOOLS_STORAGE_KEY = 'foldkit-devtools';
|
|
194
194
|
const NO_COMMANDS = [];
|
|
195
195
|
const NO_MOUNTS = [];
|
|
196
196
|
const formatTimeDelta = (deltaMs) => M.value(deltaMs).pipe(M.when(0, () => '0ms'), M.when(Number_.isLessThan(MILLIS_PER_SECOND), ms => `+${Math.round(ms)}ms`), M.orElse(ms => `+${(ms / MILLIS_PER_SECOND).toFixed(1)}s`));
|
|
@@ -251,17 +251,31 @@ class ShadowRootService extends Context.Service()('foldkit/DevToolsShadowRoot')
|
|
|
251
251
|
}
|
|
252
252
|
export const LockScroll = Command.define('LockScroll', LockedScroll)(lockScroll.pipe(Effect.as(LockedScroll())));
|
|
253
253
|
export const UnlockScroll = Command.define('UnlockScroll', UnlockedScroll)(unlockScroll.pipe(Effect.as(UnlockedScroll())));
|
|
254
|
-
const
|
|
254
|
+
const maybeToggleScrollLock = (isEnabled, shouldLock) => OptionExt.when(isEnabled, shouldLock ? LockScroll() : UnlockScroll());
|
|
255
|
+
const maybeLockScroll = (isOpen, isMobile) => OptionExt.when(isOpen && isMobile, LockScroll());
|
|
256
|
+
const DevToolsPersistedState = S.Struct({
|
|
257
|
+
isOpen: S.Boolean.pipe(S.withDecodingDefault(Effect.succeed(false))),
|
|
258
|
+
isFlattened: S.Boolean.pipe(S.withDecodingDefault(Effect.succeed(false))),
|
|
259
|
+
});
|
|
260
|
+
const DevToolsPersistedStateJson = S.fromJsonString(DevToolsPersistedState);
|
|
261
|
+
const DEFAULT_PERSISTED_STATE = {
|
|
262
|
+
isOpen: false,
|
|
263
|
+
isFlattened: false,
|
|
264
|
+
};
|
|
265
|
+
const readPersistedState = Effect.gen(function* () {
|
|
255
266
|
const store = yield* KeyValueStore.KeyValueStore;
|
|
256
|
-
const json = yield* Effect.fromOption(Option.fromNullishOr(yield* store.get(
|
|
257
|
-
return yield* S.decodeEffect(
|
|
258
|
-
}).pipe(Effect.catch(() => Effect.succeed(
|
|
259
|
-
export const
|
|
267
|
+
const json = yield* Effect.fromOption(Option.fromNullishOr(yield* store.get(DEVTOOLS_STORAGE_KEY)));
|
|
268
|
+
return yield* S.decodeEffect(DevToolsPersistedStateJson)(json);
|
|
269
|
+
}).pipe(Effect.catch(() => Effect.succeed(DEFAULT_PERSISTED_STATE)), Effect.provide(BrowserKeyValueStore.layerLocalStorage));
|
|
270
|
+
export const PersistDevToolsState = Command.define('PersistDevToolsState', { isOpen: S.Boolean, isFlattened: S.Boolean }, CompletedPersistDevToolsState)(({ isOpen, isFlattened }) => Effect.gen(function* () {
|
|
260
271
|
const store = yield* KeyValueStore.KeyValueStore;
|
|
261
|
-
const json = yield* S.encodeEffect(
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
})
|
|
272
|
+
const json = yield* S.encodeEffect(DevToolsPersistedStateJson)({
|
|
273
|
+
isOpen,
|
|
274
|
+
isFlattened,
|
|
275
|
+
});
|
|
276
|
+
yield* store.set(DEVTOOLS_STORAGE_KEY, json);
|
|
277
|
+
return CompletedPersistDevToolsState();
|
|
278
|
+
}).pipe(Effect.catch(() => Effect.succeed(CompletedPersistDevToolsState())), Effect.provide(BrowserKeyValueStore.layerLocalStorage)));
|
|
265
279
|
const buildInspectionFromModel = (index, model) => Effect.gen(function* () {
|
|
266
280
|
const store = yield* StoreService;
|
|
267
281
|
const maybeMessage = yield* store.getMessageAtIndex(index);
|
|
@@ -316,13 +330,18 @@ const makeUpdate = (store, shadow, mode) => {
|
|
|
316
330
|
const scrollToTop = Command.mapEffect(ScrollToTop(), provideContext);
|
|
317
331
|
const jumpToAndInspect = (index) => Command.mapEffect(JumpToAndInspect({ index }), provideContext);
|
|
318
332
|
const inspectState = (index) => Command.mapEffect(InspectState({ index }), provideContext);
|
|
319
|
-
const toggleScrollLock = (shouldLock) => shouldLock ? LockScroll() : UnlockScroll();
|
|
320
333
|
return (model, message) => M.value(message).pipe(M.withReturnType(), M.tags({
|
|
321
334
|
ClickedToggle: () => {
|
|
322
335
|
const nextIsOpen = !model.isOpen;
|
|
323
336
|
return [
|
|
324
337
|
evo(model, { isOpen: () => nextIsOpen }),
|
|
325
|
-
|
|
338
|
+
[
|
|
339
|
+
...Option.toArray(maybeToggleScrollLock(model.isMobile, nextIsOpen)),
|
|
340
|
+
PersistDevToolsState({
|
|
341
|
+
isOpen: nextIsOpen,
|
|
342
|
+
isFlattened: model.flattenSwitch.isChecked,
|
|
343
|
+
}),
|
|
344
|
+
],
|
|
326
345
|
];
|
|
327
346
|
},
|
|
328
347
|
ClickedSettingsToggle: () => [
|
|
@@ -344,7 +363,10 @@ const makeUpdate = (store, shadow, mode) => {
|
|
|
344
363
|
evo(model, { flattenSwitch: () => nextFlattenSwitch }),
|
|
345
364
|
[
|
|
346
365
|
...mappedCommands,
|
|
347
|
-
|
|
366
|
+
PersistDevToolsState({
|
|
367
|
+
isOpen: model.isOpen,
|
|
368
|
+
isFlattened: isChecked,
|
|
369
|
+
}),
|
|
348
370
|
],
|
|
349
371
|
],
|
|
350
372
|
})),
|
|
@@ -352,7 +374,7 @@ const makeUpdate = (store, shadow, mode) => {
|
|
|
352
374
|
},
|
|
353
375
|
CrossedMobileBreakpoint: ({ isMobile }) => [
|
|
354
376
|
evo(model, { isMobile: () => isMobile }),
|
|
355
|
-
|
|
377
|
+
Option.toArray(maybeToggleScrollLock(model.isOpen, isMobile)),
|
|
356
378
|
],
|
|
357
379
|
ClickedRow: ({ index }) => M.value(mode).pipe(M.withReturnType(), M.when('TimeTravel', () => [model, [jumpToAndInspect(index)]]), M.when('Inspect', () => [
|
|
358
380
|
evo(model, {
|
|
@@ -525,7 +547,7 @@ const makeUpdate = (store, shadow, mode) => {
|
|
|
525
547
|
[jumpToAndInspect(hostIndex)],
|
|
526
548
|
],
|
|
527
549
|
}),
|
|
528
|
-
}), M.tag('CompletedResume', 'CompletedClear', '
|
|
550
|
+
}), M.tag('CompletedResume', 'CompletedClear', 'CompletedPersistDevToolsState', 'LockedScroll', 'UnlockedScroll', 'ScrolledToTop', () => [model, []]), M.exhaustive);
|
|
529
551
|
};
|
|
530
552
|
// SUBSCRIPTION
|
|
531
553
|
const makeOverlaySubscriptions = (store, shadow) => {
|
|
@@ -1360,8 +1382,9 @@ export const createOverlay = (store, position, mode, maybeBanner) => Effect.gen(
|
|
|
1360
1382
|
container.id = '__foldkit_devtools_overlay__';
|
|
1361
1383
|
const flags = Effect.gen(function* () {
|
|
1362
1384
|
const storeState = yield* SubscriptionRef.get(store.stateRef);
|
|
1363
|
-
const isFlattened = yield*
|
|
1385
|
+
const { isOpen, isFlattened } = yield* readPersistedState;
|
|
1364
1386
|
return {
|
|
1387
|
+
isOpen,
|
|
1365
1388
|
isMobile: window.matchMedia(MOBILE_BREAKPOINT_QUERY).matches,
|
|
1366
1389
|
isFlattened,
|
|
1367
1390
|
...toDisplayState(storeState),
|
|
@@ -1375,7 +1398,6 @@ export const createOverlay = (store, position, mode, maybeBanner) => Effect.gen(
|
|
|
1375
1398
|
: sliderMax;
|
|
1376
1399
|
return [
|
|
1377
1400
|
{
|
|
1378
|
-
isOpen: false,
|
|
1379
1401
|
screen: 'Messages',
|
|
1380
1402
|
...displayFlags,
|
|
1381
1403
|
flattenSwitch: Switch.init({
|
|
@@ -1406,7 +1428,7 @@ export const createOverlay = (store, position, mode, maybeBanner) => Effect.gen(
|
|
|
1406
1428
|
initialValue: initialSliderValue,
|
|
1407
1429
|
}),
|
|
1408
1430
|
},
|
|
1409
|
-
|
|
1431
|
+
Option.toArray(maybeLockScroll(flags.isOpen, flags.isMobile)),
|
|
1410
1432
|
];
|
|
1411
1433
|
};
|
|
1412
1434
|
const overlayRuntime = makeElement({
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@foldkit/devtools",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.125.0",
|
|
4
4
|
"description": "In-browser DevTools overlay for Foldkit applications",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -30,8 +30,8 @@
|
|
|
30
30
|
"effect": "4.0.0-beta.88",
|
|
31
31
|
"rimraf": "^6.1.3",
|
|
32
32
|
"typescript": "^6.0.3",
|
|
33
|
-
"@foldkit/ui": "0.
|
|
34
|
-
"foldkit": "0.
|
|
33
|
+
"@foldkit/ui": "0.125.0",
|
|
34
|
+
"foldkit": "0.125.0"
|
|
35
35
|
},
|
|
36
36
|
"keywords": [
|
|
37
37
|
"foldkit",
|