atom.io 0.9.8 → 0.9.10
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/index.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- package/internal/dist/index.d.mts +25 -9
- package/internal/dist/index.d.ts +25 -9
- package/internal/dist/index.js +224 -223
- package/internal/dist/index.js.map +1 -1
- package/internal/dist/index.mjs +220 -222
- package/internal/dist/index.mjs.map +1 -1
- package/internal/src/atom/is-default.ts +2 -2
- package/internal/src/caching.ts +6 -4
- package/internal/src/index.ts +1 -0
- package/internal/src/keys.ts +30 -0
- package/internal/src/selector/get-selector-dependency-keys.ts +20 -0
- package/internal/src/selector/index.ts +1 -1
- package/internal/src/selector/trace-selector-atoms.ts +27 -22
- package/internal/src/selector/update-selector-atoms.ts +4 -4
- package/internal/src/store/index.ts +0 -1
- package/internal/src/subscribe/subscribe-to-root-atoms.ts +4 -5
- package/introspection/dist/index.d.mts +1 -1
- package/introspection/dist/index.d.ts +1 -1
- package/json/dist/index.d.mts +2 -6
- package/json/dist/index.d.ts +2 -6
- package/package.json +4 -4
- package/react-devtools/dist/index.css +281 -3
- package/react-devtools/dist/index.css.map +1 -1
- package/react-devtools/dist/index.d.mts +1 -1
- package/react-devtools/dist/index.d.ts +1 -1
- package/realtime-server/dist/index.d.mts +1 -1
- package/realtime-server/dist/index.d.ts +1 -1
- package/realtime-testing/dist/index.d.mts +1 -1
- package/realtime-testing/dist/index.d.ts +1 -1
- package/transceivers/set-rtx/dist/index.d.mts +1 -1
- package/transceivers/set-rtx/dist/index.d.ts +1 -1
- package/internal/src/selector/lookup-selector-sources.ts +0 -20
- package/internal/src/store/lookup.ts +0 -26
|
@@ -32,6 +32,6 @@ export const isSelectorDefault = (
|
|
|
32
32
|
key: string,
|
|
33
33
|
store: Store = IMPLICIT.STORE,
|
|
34
34
|
): boolean => {
|
|
35
|
-
const
|
|
36
|
-
return
|
|
35
|
+
const rootKeys = traceAllSelectorAtoms(key, store)
|
|
36
|
+
return rootKeys.every((rootKey) => isAtomDefault(rootKey, store))
|
|
37
37
|
}
|
package/internal/src/caching.ts
CHANGED
|
@@ -27,10 +27,12 @@ export const cacheValue = (
|
|
|
27
27
|
subject.next({ newValue: value, oldValue: value })
|
|
28
28
|
})
|
|
29
29
|
.catch((error) => {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
30
|
+
if (error !== `canceled`) {
|
|
31
|
+
store.config.logger?.error(
|
|
32
|
+
`Promised value for "${key}" rejected:`,
|
|
33
|
+
error,
|
|
34
|
+
)
|
|
35
|
+
}
|
|
34
36
|
})
|
|
35
37
|
} else {
|
|
36
38
|
target(store).valueMap.set(key, value)
|
package/internal/src/index.ts
CHANGED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { Store } from "./store"
|
|
2
|
+
import { target } from "./transaction"
|
|
3
|
+
|
|
4
|
+
export type AtomKey<T> = string & { __atomKey?: never; __brand?: T }
|
|
5
|
+
export type SelectorKey<T> = string & { __selectorKey?: never; __brand?: T }
|
|
6
|
+
export type ReadonlySelectorKey<T> = string & {
|
|
7
|
+
__readonlySelectorKey?: never
|
|
8
|
+
__brand?: T
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export const isAtomKey = (key: string, store: Store): key is AtomKey<unknown> =>
|
|
12
|
+
target(store).atoms.has(key)
|
|
13
|
+
export const isSelectorKey = (
|
|
14
|
+
key: string,
|
|
15
|
+
store: Store,
|
|
16
|
+
): key is SelectorKey<unknown> => target(store).selectors.has(key)
|
|
17
|
+
export const isReadonlySelectorKey = (
|
|
18
|
+
key: string,
|
|
19
|
+
store: Store,
|
|
20
|
+
): key is ReadonlySelectorKey<unknown> =>
|
|
21
|
+
target(store).readonlySelectors.has(key)
|
|
22
|
+
|
|
23
|
+
export type StateKey<T> = AtomKey<T> | ReadonlySelectorKey<T> | SelectorKey<T>
|
|
24
|
+
export const isStateKey = (
|
|
25
|
+
key: string,
|
|
26
|
+
store: Store,
|
|
27
|
+
): key is StateKey<unknown> =>
|
|
28
|
+
isAtomKey(key, store) ||
|
|
29
|
+
isSelectorKey(key, store) ||
|
|
30
|
+
isReadonlySelectorKey(key, store)
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { AtomKey, ReadonlySelectorKey, SelectorKey } from "../keys"
|
|
2
|
+
import { isStateKey } from "../keys"
|
|
3
|
+
import type { Store } from "../store"
|
|
4
|
+
import { target } from "../transaction"
|
|
5
|
+
|
|
6
|
+
export const getSelectorDependencyKeys = (
|
|
7
|
+
key: string,
|
|
8
|
+
store: Store,
|
|
9
|
+
): (
|
|
10
|
+
| AtomKey<unknown>
|
|
11
|
+
| ReadonlySelectorKey<unknown>
|
|
12
|
+
| SelectorKey<unknown>
|
|
13
|
+
)[] => {
|
|
14
|
+
const sources = target(store)
|
|
15
|
+
.selectorGraph.getRelationEntries({ downstreamSelectorKey: key })
|
|
16
|
+
.filter(([_, { source }]) => source !== key)
|
|
17
|
+
.map(([_, { source }]) => source)
|
|
18
|
+
.filter((source) => isStateKey(source, store))
|
|
19
|
+
return sources
|
|
20
|
+
}
|
|
@@ -1,45 +1,50 @@
|
|
|
1
|
-
import type { AtomToken, ReadonlySelectorToken, StateToken } from "atom.io"
|
|
2
|
-
|
|
3
1
|
import type { Store } from ".."
|
|
4
|
-
import {
|
|
2
|
+
import type { AtomKey, StateKey } from "../keys"
|
|
3
|
+
import { isAtomKey } from "../keys"
|
|
4
|
+
import { getSelectorDependencyKeys } from "./get-selector-dependency-keys"
|
|
5
5
|
|
|
6
6
|
export const traceSelectorAtoms = (
|
|
7
7
|
selectorKey: string,
|
|
8
|
-
|
|
8
|
+
directDependencyKey: StateKey<unknown>,
|
|
9
9
|
store: Store,
|
|
10
|
-
):
|
|
11
|
-
const
|
|
10
|
+
): AtomKey<unknown>[] => {
|
|
11
|
+
const rootKeys: AtomKey<unknown>[] = []
|
|
12
12
|
|
|
13
|
-
const
|
|
13
|
+
const indirectDependencyKeys = getSelectorDependencyKeys(
|
|
14
|
+
directDependencyKey,
|
|
15
|
+
store,
|
|
16
|
+
)
|
|
14
17
|
let depth = 0
|
|
15
|
-
while (
|
|
18
|
+
while (indirectDependencyKeys.length > 0) {
|
|
16
19
|
// biome-ignore lint/style/noNonNullAssertion: just checked length ^^^
|
|
17
|
-
const
|
|
20
|
+
const indirectDependencyKey = indirectDependencyKeys.shift()!
|
|
18
21
|
++depth
|
|
19
|
-
if (depth >
|
|
22
|
+
if (depth > 99999) {
|
|
20
23
|
throw new Error(
|
|
21
|
-
`Maximum selector dependency depth exceeded in selector "${selectorKey}".`,
|
|
24
|
+
`Maximum selector dependency depth exceeded (> 99999) in selector "${selectorKey}". This is likely due to a circular dependency.`,
|
|
22
25
|
)
|
|
23
26
|
}
|
|
24
27
|
|
|
25
|
-
if (
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
28
|
+
if (!isAtomKey(indirectDependencyKey, store)) {
|
|
29
|
+
indirectDependencyKeys.push(
|
|
30
|
+
...getSelectorDependencyKeys(indirectDependencyKey, store),
|
|
31
|
+
)
|
|
32
|
+
} else if (!rootKeys.includes(indirectDependencyKey)) {
|
|
33
|
+
rootKeys.push(indirectDependencyKey)
|
|
29
34
|
}
|
|
30
35
|
}
|
|
31
36
|
|
|
32
|
-
return
|
|
37
|
+
return rootKeys
|
|
33
38
|
}
|
|
34
39
|
|
|
35
40
|
export const traceAllSelectorAtoms = (
|
|
36
41
|
selectorKey: string,
|
|
37
42
|
store: Store,
|
|
38
|
-
):
|
|
39
|
-
const
|
|
40
|
-
return
|
|
41
|
-
|
|
42
|
-
?
|
|
43
|
-
: traceSelectorAtoms(selectorKey,
|
|
43
|
+
): AtomKey<unknown>[] => {
|
|
44
|
+
const directDependencyKeys = getSelectorDependencyKeys(selectorKey, store)
|
|
45
|
+
return directDependencyKeys.flatMap((depKey) =>
|
|
46
|
+
isAtomKey(depKey, store)
|
|
47
|
+
? depKey
|
|
48
|
+
: traceSelectorAtoms(selectorKey, depKey, store),
|
|
44
49
|
)
|
|
45
50
|
}
|
|
@@ -20,15 +20,15 @@ export const updateSelectorAtoms = (
|
|
|
20
20
|
)
|
|
21
21
|
return
|
|
22
22
|
}
|
|
23
|
-
const
|
|
23
|
+
const rootKeys = traceSelectorAtoms(selectorKey, dependency.key, store)
|
|
24
24
|
store.config.logger?.info(
|
|
25
25
|
` || adding roots for "${selectorKey}":`,
|
|
26
|
-
|
|
26
|
+
rootKeys.map((r) => r),
|
|
27
27
|
)
|
|
28
|
-
for (const
|
|
28
|
+
for (const atomKey of rootKeys) {
|
|
29
29
|
core.selectorAtoms = core.selectorAtoms.set({
|
|
30
30
|
selectorKey,
|
|
31
|
-
atomKey
|
|
31
|
+
atomKey,
|
|
32
32
|
})
|
|
33
33
|
}
|
|
34
34
|
}
|
|
@@ -2,7 +2,6 @@ import { getState__INTERNAL } from "../get-state-internal"
|
|
|
2
2
|
import type { ReadonlySelector, Selector } from "../selector"
|
|
3
3
|
import { traceAllSelectorAtoms } from "../selector"
|
|
4
4
|
import type { Store } from "../store"
|
|
5
|
-
import { withdraw } from "../store"
|
|
6
5
|
import { recallState } from "./recall-state"
|
|
7
6
|
|
|
8
7
|
export const subscribeToRootAtoms = <T>(
|
|
@@ -12,18 +11,18 @@ export const subscribeToRootAtoms = <T>(
|
|
|
12
11
|
const dependencySubscriptions =
|
|
13
12
|
`default` in state
|
|
14
13
|
? null
|
|
15
|
-
: traceAllSelectorAtoms(state.key, store).map((
|
|
16
|
-
const atom =
|
|
14
|
+
: traceAllSelectorAtoms(state.key, store).map((atomKey) => {
|
|
15
|
+
const atom = store.atoms.get(atomKey)
|
|
17
16
|
if (atom === undefined) {
|
|
18
17
|
throw new Error(
|
|
19
|
-
`Atom "${
|
|
18
|
+
`Atom "${atomKey}", a dependency of selector "${state.key}", not found in store "${store.config.name}".`,
|
|
20
19
|
)
|
|
21
20
|
}
|
|
22
21
|
return atom.subject.subscribe(
|
|
23
22
|
`${state.type}:${state.key}`,
|
|
24
23
|
(atomChange) => {
|
|
25
24
|
store.config.logger?.info(
|
|
26
|
-
`📢 selector "${state.key}" saw root "${
|
|
25
|
+
`📢 selector "${state.key}" saw root "${atomKey}" go (`,
|
|
27
26
|
atomChange.oldValue,
|
|
28
27
|
`->`,
|
|
29
28
|
atomChange.newValue,
|
|
@@ -21,4 +21,4 @@ type FamilyNode<Token extends AtomToken<unknown> | ReadonlySelectorToken<unknown
|
|
|
21
21
|
};
|
|
22
22
|
type StateTokenIndex<Token extends AtomToken<unknown> | ReadonlySelectorToken<unknown> | SelectorToken<unknown>> = Record<string, FamilyNode<Token> | Token>;
|
|
23
23
|
|
|
24
|
-
export { FamilyNode, StateTokenIndex, attachIntrospectionStates };
|
|
24
|
+
export { type FamilyNode, type StateTokenIndex, attachIntrospectionStates };
|
|
@@ -21,4 +21,4 @@ type FamilyNode<Token extends AtomToken<unknown> | ReadonlySelectorToken<unknown
|
|
|
21
21
|
};
|
|
22
22
|
type StateTokenIndex<Token extends AtomToken<unknown> | ReadonlySelectorToken<unknown> | SelectorToken<unknown>> = Record<string, FamilyNode<Token> | Token>;
|
|
23
23
|
|
|
24
|
-
export { FamilyNode, StateTokenIndex, attachIntrospectionStates };
|
|
24
|
+
export { type FamilyNode, type StateTokenIndex, attachIntrospectionStates };
|
package/json/dist/index.d.mts
CHANGED
|
@@ -23,11 +23,7 @@ type Array<Element extends Serializable = Serializable> = ReadonlyArray<Element>
|
|
|
23
23
|
type json_Array<Element extends Serializable = Serializable> = Array<Element>;
|
|
24
24
|
type json_Serializable = Serializable;
|
|
25
25
|
declare namespace json {
|
|
26
|
-
export {
|
|
27
|
-
json_Array as Array,
|
|
28
|
-
Object$1 as Object,
|
|
29
|
-
json_Serializable as Serializable,
|
|
30
|
-
};
|
|
26
|
+
export type { json_Array as Array, Object$1 as Object, json_Serializable as Serializable };
|
|
31
27
|
}
|
|
32
28
|
|
|
33
29
|
declare const parseJson: <S extends Stringified<Serializable>>(str: string | S) => S extends Stringified<infer J extends Serializable> ? J : Serializable;
|
|
@@ -52,4 +48,4 @@ declare const selectJson: <T, J extends Serializable>(atom: AtomIO.AtomToken<T>,
|
|
|
52
48
|
|
|
53
49
|
declare const selectJsonFamily: <T, J extends Serializable, K extends Serializable>(atomFamily: AtomIO.AtomFamily<T, K>, transform: JsonInterface<T, J>, store?: Store) => AtomIO.SelectorFamily<J, K>;
|
|
54
50
|
|
|
55
|
-
export { Empty, JSON_DEFAULTS, JSON_TYPE_NAMES, json as Json, JsonInterface, JsonTypeName, JsonTypes, Stringified, isBoolean, isNull, isNumber, isPrimitive, isString, parseJson, primitive, selectJson, selectJsonFamily, stringSetJsonInterface, stringifyJson };
|
|
51
|
+
export { type Empty, JSON_DEFAULTS, JSON_TYPE_NAMES, json as Json, type JsonInterface, type JsonTypeName, type JsonTypes, type Stringified, isBoolean, isNull, isNumber, isPrimitive, isString, parseJson, type primitive, selectJson, selectJsonFamily, stringSetJsonInterface, stringifyJson };
|
package/json/dist/index.d.ts
CHANGED
|
@@ -23,11 +23,7 @@ type Array<Element extends Serializable = Serializable> = ReadonlyArray<Element>
|
|
|
23
23
|
type json_Array<Element extends Serializable = Serializable> = Array<Element>;
|
|
24
24
|
type json_Serializable = Serializable;
|
|
25
25
|
declare namespace json {
|
|
26
|
-
export {
|
|
27
|
-
json_Array as Array,
|
|
28
|
-
Object$1 as Object,
|
|
29
|
-
json_Serializable as Serializable,
|
|
30
|
-
};
|
|
26
|
+
export type { json_Array as Array, Object$1 as Object, json_Serializable as Serializable };
|
|
31
27
|
}
|
|
32
28
|
|
|
33
29
|
declare const parseJson: <S extends Stringified<Serializable>>(str: string | S) => S extends Stringified<infer J extends Serializable> ? J : Serializable;
|
|
@@ -52,4 +48,4 @@ declare const selectJson: <T, J extends Serializable>(atom: AtomIO.AtomToken<T>,
|
|
|
52
48
|
|
|
53
49
|
declare const selectJsonFamily: <T, J extends Serializable, K extends Serializable>(atomFamily: AtomIO.AtomFamily<T, K>, transform: JsonInterface<T, J>, store?: Store) => AtomIO.SelectorFamily<J, K>;
|
|
54
50
|
|
|
55
|
-
export { Empty, JSON_DEFAULTS, JSON_TYPE_NAMES, json as Json, JsonInterface, JsonTypeName, JsonTypes, Stringified, isBoolean, isNull, isNumber, isPrimitive, isString, parseJson, primitive, selectJson, selectJsonFamily, stringSetJsonInterface, stringifyJson };
|
|
51
|
+
export { type Empty, JSON_DEFAULTS, JSON_TYPE_NAMES, json as Json, type JsonInterface, type JsonTypeName, type JsonTypes, type Stringified, isBoolean, isNull, isNumber, isPrimitive, isString, parseJson, type primitive, selectJson, selectJsonFamily, stringSetJsonInterface, stringifyJson };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "atom.io",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.10",
|
|
4
4
|
"description": "Composable and testable reactive data library.",
|
|
5
5
|
"homepage": "https://atom.io.fyi",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -49,13 +49,13 @@
|
|
|
49
49
|
},
|
|
50
50
|
"devDependencies": {
|
|
51
51
|
"@emotion/react": "11.11.1",
|
|
52
|
-
"@testing-library/react": "14.1.
|
|
52
|
+
"@testing-library/react": "14.1.2",
|
|
53
53
|
"@types/npmlog": "4.1.6",
|
|
54
54
|
"@types/react": "18.2.37",
|
|
55
55
|
"@types/tmp": "0.2.6",
|
|
56
56
|
"@vitest/coverage-v8": "0.34.6",
|
|
57
57
|
"concurrently": "8.2.2",
|
|
58
|
-
"eslint": "8.
|
|
58
|
+
"eslint": "8.54.0",
|
|
59
59
|
"framer-motion": "10.16.5",
|
|
60
60
|
"happy-dom": "12.10.3",
|
|
61
61
|
"npmlog": "7.0.1",
|
|
@@ -66,7 +66,7 @@
|
|
|
66
66
|
"socket.io": "4.7.2",
|
|
67
67
|
"socket.io-client": "4.7.2",
|
|
68
68
|
"tmp": "0.2.1",
|
|
69
|
-
"tsup": "7.
|
|
69
|
+
"tsup": "7.3.0",
|
|
70
70
|
"typescript": "5.2.2",
|
|
71
71
|
"vite": "4.5.0",
|
|
72
72
|
"vite-tsconfig-paths": "4.2.1",
|
|
@@ -3,7 +3,17 @@
|
|
|
3
3
|
display: flex;
|
|
4
4
|
flex-flow: row wrap;
|
|
5
5
|
gap: 4px;
|
|
6
|
-
section {
|
|
6
|
+
section {
|
|
7
|
+
display: flex;
|
|
8
|
+
flex-flow: row;
|
|
9
|
+
margin-bottom: 1rem;
|
|
10
|
+
border: 1px solid #ccc;
|
|
11
|
+
padding: 2px;
|
|
12
|
+
margin: 0;
|
|
13
|
+
span {
|
|
14
|
+
display: flex;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
7
17
|
}
|
|
8
18
|
|
|
9
19
|
/* src/devtools.scss */
|
|
@@ -41,11 +51,279 @@ main.atom_io_devtools {
|
|
|
41
51
|
padding-bottom: 0;
|
|
42
52
|
display: flex;
|
|
43
53
|
justify-content: space-between;
|
|
44
|
-
h1 {
|
|
54
|
+
h1 {
|
|
55
|
+
font-size: inherit;
|
|
56
|
+
margin: 0;
|
|
57
|
+
font-size: 24px;
|
|
58
|
+
font-family: charter;
|
|
59
|
+
}
|
|
60
|
+
nav {
|
|
61
|
+
display: flex;
|
|
62
|
+
flex-flow: row nowrap;
|
|
63
|
+
button {
|
|
64
|
+
cursor: pointer;
|
|
65
|
+
background: none;
|
|
66
|
+
border: none;
|
|
67
|
+
padding: none;
|
|
68
|
+
margin-bottom: -2px;
|
|
69
|
+
z-index: 1000;
|
|
70
|
+
&:disabled {
|
|
71
|
+
cursor: default;
|
|
72
|
+
background-color: var(--bg-tint1);
|
|
73
|
+
color: var(--fg-color);
|
|
74
|
+
border: var(--fg-border);
|
|
75
|
+
border-bottom: none;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
45
79
|
}
|
|
46
80
|
> main {
|
|
47
81
|
background: var(--bg-tint1);
|
|
48
82
|
}
|
|
49
|
-
main {
|
|
83
|
+
main {
|
|
84
|
+
overflow-y: scroll;
|
|
85
|
+
flex-grow: 1;
|
|
86
|
+
display: flex;
|
|
87
|
+
flex-flow: column;
|
|
88
|
+
gap: 0;
|
|
89
|
+
article.index {
|
|
90
|
+
.node .node {
|
|
91
|
+
border-right: var(--fg-border);
|
|
92
|
+
padding-right: 0;
|
|
93
|
+
background: #fff3;
|
|
94
|
+
}
|
|
95
|
+
.node > .node {
|
|
96
|
+
margin: 5px 0;
|
|
97
|
+
margin-left: 12px;
|
|
98
|
+
border-left: var(--fg-border);
|
|
99
|
+
}
|
|
100
|
+
.node {
|
|
101
|
+
border-top: var(--fg-border);
|
|
102
|
+
overflow-x: scroll;
|
|
103
|
+
padding: 5px;
|
|
104
|
+
&:last-of-type {
|
|
105
|
+
border-bottom: var(--fg-border);
|
|
106
|
+
}
|
|
107
|
+
&.transaction_update {
|
|
108
|
+
padding: 0;
|
|
109
|
+
}
|
|
110
|
+
header {
|
|
111
|
+
display: flex;
|
|
112
|
+
flex-flow: row;
|
|
113
|
+
gap: 5px;
|
|
114
|
+
position: sticky;
|
|
115
|
+
z-index: 999;
|
|
116
|
+
top: 0;
|
|
117
|
+
button.carat {
|
|
118
|
+
cursor: pointer;
|
|
119
|
+
background: none;
|
|
120
|
+
border: none;
|
|
121
|
+
width: 20px;
|
|
122
|
+
&.open {
|
|
123
|
+
transform: rotate(90deg);
|
|
124
|
+
}
|
|
125
|
+
&:disabled {
|
|
126
|
+
cursor: default;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
label {
|
|
130
|
+
display: flex;
|
|
131
|
+
flex-flow: row;
|
|
132
|
+
gap: 5px;
|
|
133
|
+
cursor: help;
|
|
134
|
+
h2 {
|
|
135
|
+
display: inline-block;
|
|
136
|
+
margin: 0;
|
|
137
|
+
}
|
|
138
|
+
.detail {
|
|
139
|
+
color: #777;
|
|
140
|
+
@media (prefers-color-scheme: light) {
|
|
141
|
+
color: #999;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
main {
|
|
147
|
+
margin-left: 15px;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
section.transaction_log {
|
|
151
|
+
margin-top: 0;
|
|
152
|
+
header: {
|
|
153
|
+
padding: 5px;
|
|
154
|
+
}
|
|
155
|
+
main {
|
|
156
|
+
display: flex;
|
|
157
|
+
flex-flow: row wrap;
|
|
158
|
+
gap: 5px;
|
|
159
|
+
.transaction_update {
|
|
160
|
+
width: 100%;
|
|
161
|
+
display: flex;
|
|
162
|
+
flex-flow: row;
|
|
163
|
+
align-items: flex-start;
|
|
164
|
+
justify-content: flex-start;
|
|
165
|
+
justify-items: flex-start;
|
|
166
|
+
align-content: flex-start;
|
|
167
|
+
border-left: var(--fg-border);
|
|
168
|
+
border-top: var(--fg-border);
|
|
169
|
+
header {
|
|
170
|
+
padding: 5px;
|
|
171
|
+
h4 {
|
|
172
|
+
margin: 0;
|
|
173
|
+
padding: 0;
|
|
174
|
+
font-size: inherit;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
main {
|
|
178
|
+
margin-left: 0;
|
|
179
|
+
display: flex;
|
|
180
|
+
flex-flow: column;
|
|
181
|
+
gap: 0px;
|
|
182
|
+
border-left: 1px solid #333;
|
|
183
|
+
section ~ section {
|
|
184
|
+
border-top: 1px solid #333;
|
|
185
|
+
}
|
|
186
|
+
section {
|
|
187
|
+
padding: 5px;
|
|
188
|
+
&.transaction_output {
|
|
189
|
+
border-right: none;
|
|
190
|
+
}
|
|
191
|
+
&.transaction_impact {
|
|
192
|
+
padding: 5px;
|
|
193
|
+
}
|
|
194
|
+
margin: 0;
|
|
195
|
+
article {
|
|
196
|
+
border-left: var(--fg-border);
|
|
197
|
+
border-right: var(--fg-border);
|
|
198
|
+
.summary {
|
|
199
|
+
white-space: nowrap;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
section.timeline_log {
|
|
208
|
+
header {
|
|
209
|
+
display: flex;
|
|
210
|
+
label {
|
|
211
|
+
display: flex;
|
|
212
|
+
width: 100%;
|
|
213
|
+
flex-grow: 1;
|
|
214
|
+
.gap {
|
|
215
|
+
flex-grow: 1;
|
|
216
|
+
}
|
|
217
|
+
nav {
|
|
218
|
+
display: flex;
|
|
219
|
+
flex-flow: row nowrap;
|
|
220
|
+
gap: 5px;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
.timeline_update {
|
|
225
|
+
padding: 5px;
|
|
226
|
+
border-left: var(--fg-border);
|
|
227
|
+
h4 {
|
|
228
|
+
margin: 0;
|
|
229
|
+
padding: 0;
|
|
230
|
+
font-size: inherit;
|
|
231
|
+
}
|
|
232
|
+
main {
|
|
233
|
+
margin: 0;
|
|
234
|
+
.node.atom_update {
|
|
235
|
+
border-left: var(--fg-border);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
.you_are_here {
|
|
240
|
+
background: var(--fg-color);
|
|
241
|
+
color: var(--bg-color);
|
|
242
|
+
text-align: center;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
footer {
|
|
248
|
+
display: flex;
|
|
249
|
+
justify-content: flex-end;
|
|
250
|
+
button {
|
|
251
|
+
cursor: pointer;
|
|
252
|
+
background: none;
|
|
253
|
+
border: none;
|
|
254
|
+
padding: none;
|
|
255
|
+
position: absolute;
|
|
256
|
+
right: 0;
|
|
257
|
+
bottom: 0;
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
.json_editor {
|
|
261
|
+
input {
|
|
262
|
+
font-family: theia;
|
|
263
|
+
border: none;
|
|
264
|
+
border-bottom: 1px solid;
|
|
265
|
+
background: none;
|
|
266
|
+
&:disabled {
|
|
267
|
+
border: none;
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
button {
|
|
271
|
+
background: none;
|
|
272
|
+
margin-left: auto;
|
|
273
|
+
color: #777;
|
|
274
|
+
border: none;
|
|
275
|
+
font-family: theia;
|
|
276
|
+
font-size: 14px;
|
|
277
|
+
margin: none;
|
|
278
|
+
padding: 4px;
|
|
279
|
+
padding-bottom: 6px;
|
|
280
|
+
cursor: pointer;
|
|
281
|
+
&:hover {
|
|
282
|
+
color: #333;
|
|
283
|
+
background-color: #aaa;
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
select {
|
|
287
|
+
font-family: theia;
|
|
288
|
+
font-size: 14px;
|
|
289
|
+
background: none;
|
|
290
|
+
border: none;
|
|
291
|
+
color: #777;
|
|
292
|
+
@media (prefers-color-scheme: light) {
|
|
293
|
+
color: #999;
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
.json_editor_unofficial {
|
|
297
|
+
background-color: #777;
|
|
298
|
+
button {
|
|
299
|
+
color: #333;
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
.json_editor_missing {
|
|
303
|
+
background-color: #f055;
|
|
304
|
+
}
|
|
305
|
+
.json_editor_key {
|
|
306
|
+
padding-right: 10px;
|
|
307
|
+
input {
|
|
308
|
+
color: #999;
|
|
309
|
+
@media (prefers-color-scheme: light) {
|
|
310
|
+
color: #777;
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
.json_editor_object {
|
|
315
|
+
border-left: 2px solid #333;
|
|
316
|
+
padding-left: 20px;
|
|
317
|
+
@media (prefers-color-scheme: light) {
|
|
318
|
+
border-color: #ccc;
|
|
319
|
+
}
|
|
320
|
+
.json_editor_properties {
|
|
321
|
+
> * {
|
|
322
|
+
border-bottom: var(--fg-border);
|
|
323
|
+
margin-bottom: 2px;
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
}
|
|
50
328
|
}
|
|
51
329
|
/*# sourceMappingURL=index.css.map */
|