atom.io 0.9.7 → 0.9.9

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.
@@ -17,6 +17,11 @@ export const traceSelectorAtoms = (
17
17
  const source = sources.shift()!
18
18
  ++depth
19
19
  if (depth > 999) {
20
+ store.config.logger?.warn(
21
+ `Maximum selector dependency depth exceeded 999 in selector "${selectorKey}".`,
22
+ )
23
+ }
24
+ if (depth > 99999) {
20
25
  throw new Error(
21
26
  `Maximum selector dependency depth exceeded in selector "${selectorKey}".`,
22
27
  )
@@ -109,9 +109,13 @@ export const addAtomToTimeline = (
109
109
  ...update,
110
110
  atomUpdates,
111
111
  }
112
- tl.history.push(timelineTransactionUpdate)
113
- tl.at = tl.history.length
114
- tl.subject.next(timelineTransactionUpdate)
112
+ const willCapture =
113
+ tl.shouldCapture?.(timelineTransactionUpdate, tl) ?? true
114
+ if (willCapture) {
115
+ tl.history.push(timelineTransactionUpdate)
116
+ tl.at = tl.history.length
117
+ tl.subject.next(timelineTransactionUpdate)
118
+ }
115
119
  }
116
120
  tl.transactionKey = null
117
121
  store.config.logger?.info(
@@ -138,6 +142,7 @@ export const addAtomToTimeline = (
138
142
  if (tl.at !== tl.history.length) {
139
143
  tl.history.splice(tl.at)
140
144
  }
145
+
141
146
  tl.history.push(latestUpdate)
142
147
 
143
148
  store.config.logger?.info(
@@ -160,7 +165,16 @@ export const addAtomToTimeline = (
160
165
  )
161
166
  }
162
167
  }
163
- if (latestUpdate) tl.subject.next(latestUpdate)
168
+ if (latestUpdate) {
169
+ const willCaptureSelectorUpdate =
170
+ tl.shouldCapture?.(latestUpdate, tl) ?? true
171
+ if (willCaptureSelectorUpdate) {
172
+ tl.subject.next(latestUpdate)
173
+ } else {
174
+ tl.history.pop()
175
+ tl.at = tl.history.length
176
+ }
177
+ }
164
178
  } else {
165
179
  const timestamp = Date.now()
166
180
  tl.selectorTime = null
@@ -177,12 +191,15 @@ export const addAtomToTimeline = (
177
191
  if (atom.family) {
178
192
  atomUpdate.family = atom.family
179
193
  }
180
- tl.history.push(atomUpdate)
181
- tl.subject.next(atomUpdate)
194
+ const willCapture = tl.shouldCapture?.(atomUpdate, tl) ?? true
182
195
  store.config.logger?.info(
183
196
  `⌛ timeline "${tl.key}" got an atom_update to "${atom.key}"`,
184
197
  )
185
- tl.at = tl.history.length
198
+ if (willCapture) {
199
+ tl.history.push(atomUpdate)
200
+ tl.at = tl.history.length
201
+ tl.subject.next(atomUpdate)
202
+ }
186
203
  }
187
204
  }
188
205
  })
@@ -36,6 +36,7 @@ export type Timeline = {
36
36
  type: `timeline`
37
37
  key: string
38
38
  at: number
39
+ shouldCapture?: (update: TimelineUpdate, timeline: Timeline) => boolean
39
40
  timeTraveling: `into_future` | `into_past` | null
40
41
  history: TimelineUpdate[]
41
42
  selectorTime: number | null
@@ -67,6 +68,9 @@ export function timeline__INTERNAL(
67
68
  install: (store) => timeline__INTERNAL(options, store, tl),
68
69
  subject: new Subject(),
69
70
  }
71
+ if (options.shouldCapture) {
72
+ tl.shouldCapture = options.shouldCapture
73
+ }
70
74
 
71
75
  const core = target(store)
72
76
  for (const tokenOrFamily of options.atoms) {
@@ -80,9 +84,9 @@ export function timeline__INTERNAL(
80
84
  if (tokenOrFamily.type === `atom_family`) {
81
85
  const family = tokenOrFamily
82
86
  family.subject.subscribe(`timeline:${options.key}`, (token) => {
83
- if (!core.atoms.has(token.key)) {
84
- addAtomToTimeline(token, tl, store)
85
- }
87
+ // if (!core.atoms.has(token.key)) {
88
+ addAtomToTimeline(token, tl, store)
89
+ // }
86
90
  })
87
91
  for (const atom of core.atoms.values()) {
88
92
  if (atom.family?.key === family.key) {
@@ -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 };
@@ -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 };
@@ -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.7",
3
+ "version": "0.9.9",
4
4
  "description": "Composable and testable reactive data library.",
5
5
  "homepage": "https://atom.io.fyi",
6
6
  "sideEffects": false,
@@ -49,7 +49,7 @@
49
49
  },
50
50
  "devDependencies": {
51
51
  "@emotion/react": "11.11.1",
52
- "@testing-library/react": "14.1.0",
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",
@@ -62,11 +62,11 @@
62
62
  "preact": "10.19.2",
63
63
  "react": "18.2.0",
64
64
  "react-dom": "18.2.0",
65
- "react-router-dom": "6.18.0",
65
+ "react-router-dom": "6.19.0",
66
66
  "socket.io": "4.7.2",
67
67
  "socket.io-client": "4.7.2",
68
68
  "tmp": "0.2.1",
69
- "tsup": "7.2.0",
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 { display: flex; flex-flow: row; margin-bottom: 1rem; border: 1px solid #ccc; padding: 2px; margin: 0; span { display: flex; } };
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 { font-size: inherit; margin: 0; font-size: 24px; font-family: charter; } nav { display: flex; flex-flow: row nowrap; button { cursor: pointer; background: none; border: none; padding: none; margin-bottom: -2px; z-index: 1000; &:disabled { cursor: default; background-color: var(--bg-tint1); color: var(--fg-color); border: var(--fg-border); border-bottom: none; } } };
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 { overflow-y: scroll; flex-grow: 1; display: flex; flex-flow: column; gap: 0; article.index { .node .node { border-right: var(--fg-border); padding-right: 0; background: #fff3; } .node > .node { margin: 5px 0; margin-left: 12px; border-left: var(--fg-border); } .node { border-top: var(--fg-border); overflow-x: scroll; padding: 5px; &:last-of-type { border-bottom: var(--fg-border); } &.transaction_update { padding: 0; } header { display: flex; flex-flow: row; gap: 5px; position: sticky; z-index: 999; top: 0; button.carat { cursor: pointer; background: none; border: none; width: 20px; &.open { transform: rotate(90deg); } &:disabled { cursor: default; } } label { display: flex; flex-flow: row; gap: 5px; cursor: help; h2 { display: inline-block; margin: 0; } .detail { color: #777; @media (prefers-color-scheme: light) { color: #999; } } } } main { margin-left: 15px; } } section.transaction_log { margin-top: 0; header: { padding: 5px; } main { display: flex; flex-flow: row wrap; gap: 5px; .transaction_update { width: 100%; display: flex; flex-flow: row; align-items: flex-start; justify-content: flex-start; justify-items: flex-start; align-content: flex-start; border-left: var(--fg-border); border-top: var(--fg-border); header { padding: 5px; h4 { margin: 0; padding: 0; font-size: inherit; } } main { margin-left: 0; display: flex; flex-flow: column; gap: 0px; border-left: 1px solid #333; section ~ section { border-top: 1px solid #333; } section { padding: 5px; &.transaction_output { border-right: none; } &.transaction_impact { padding: 5px; } margin: 0; article { border-left: var(--fg-border); border-right: var(--fg-border); .summary { white-space: nowrap; } } } } } } } section.timeline_log { header { display: flex; label { display: flex; width: 100%; flex-grow: 1; .gap { flex-grow: 1; } nav { display: flex; flex-flow: row nowrap; gap: 5px; } } } .timeline_update { padding: 5px; border-left: var(--fg-border); h4 { margin: 0; padding: 0; font-size: inherit; } main { margin: 0; .node.atom_update { border-left: var(--fg-border); } } } .you_are_here { background: var(--fg-color); color: var(--bg-color); text-align: center; } } } } footer { display: flex; justify-content: flex-end; button { cursor: pointer; background: none; border: none; padding: none; position: absolute; right: 0; bottom: 0; } } .json_editor { input { font-family: theia; border: none; border-bottom: 1px solid; background: none; &:disabled { border: none; } } button { background: none; margin-left: auto; color: #777; border: none; font-family: theia; font-size: 14px; margin: none; padding: 4px; padding-bottom: 6px; cursor: pointer; &:hover { color: #333; background-color: #aaa; } } select { font-family: theia; font-size: 14px; background: none; border: none; color: #777; @media (prefers-color-scheme: light) { color: #999; } } .json_editor_unofficial { background-color: #777; button { color: #333; } } .json_editor_missing { background-color: #f055; } .json_editor_key { padding-right: 10px; input { color: #999; @media (prefers-color-scheme: light) { color: #777; } } } .json_editor_object { border-left: 2px solid #333; padding-left: 20px; @media (prefers-color-scheme: light) { border-color: #ccc; } .json_editor_properties { > * { border-bottom: var(--fg-border); margin-bottom: 2px; } } } };
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 */
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../hamr/src/react-data-designer/RelationEditor.module.scss","../src/devtools.scss"],"sourcesContent":[".class {\n display: flex;\n flex-flow: row wrap;\n gap: 4px;\n section {\n display: flex;\n flex-flow: row;\n margin-bottom: 1rem;\n border: 1px solid #ccc;\n padding: 2px;\n margin: 0;\n span {\n display: flex;\n }\n }\n}\n","main.atom_io_devtools {\n --fg-color: #eee;\n --bg-color: #111;\n --bg-tint1: #222;\n --fg-border: 1px solid var(--fg-color);\n @media (prefers-color-scheme: light) {\n --fg-color: #444;\n --bg-color: #ddd;\n --bg-tint1: #e3e3e3;\n }\n box-sizing: border-box;\n color: var(--fg-color);\n background-color: var(--bg-color);\n border: 2px solid var(--fg-color);\n position: fixed;\n right: 0;\n bottom: 0;\n height: 100%;\n display: flex;\n flex-flow: column;\n max-height: 800px;\n width: 100%;\n max-width: 500px;\n overflow-y: scroll;\n * {\n font-size: 16px;\n font-family: theia, monospace;\n }\n > header {\n padding: 5px;\n padding-left: 10px;\n padding-bottom: 0;\n display: flex;\n justify-content: space-between;\n h1 {\n font-size: inherit;\n margin: 0;\n font-size: 24px;\n font-family: charter;\n }\n nav {\n display: flex;\n flex-flow: row nowrap;\n button {\n cursor: pointer;\n background: none;\n border: none;\n padding: none;\n margin-bottom: -2px;\n z-index: 1000;\n &:disabled {\n cursor: default;\n background-color: var(--bg-tint1);\n color: var(--fg-color);\n border: var(--fg-border);\n border-bottom: none;\n }\n }\n }\n }\n > main {\n background: var(--bg-tint1);\n }\n main {\n overflow-y: scroll;\n flex-grow: 1;\n display: flex;\n flex-flow: column;\n gap: 0;\n article.index {\n .node .node {\n border-right: var(--fg-border);\n padding-right: 0;\n background: #fff3;\n }\n .node > .node {\n margin: 5px 0;\n margin-left: 12px;\n border-left: var(--fg-border);\n }\n .node {\n border-top: var(--fg-border);\n overflow-x: scroll;\n padding: 5px;\n &:last-of-type {\n border-bottom: var(--fg-border);\n }\n &.transaction_update {\n padding: 0;\n }\n header {\n display: flex;\n flex-flow: row;\n gap: 5px;\n position: sticky;\n z-index: 999;\n top: 0;\n button.carat {\n cursor: pointer;\n background: none;\n border: none;\n width: 20px;\n &.open {\n transform: rotate(90deg);\n }\n &:disabled {\n cursor: default;\n }\n }\n label {\n display: flex;\n flex-flow: row;\n gap: 5px;\n cursor: help;\n h2 {\n display: inline-block;\n margin: 0;\n }\n .detail {\n color: #777;\n @media (prefers-color-scheme: light) {\n color: #999;\n }\n }\n }\n }\n main {\n margin-left: 15px;\n }\n }\n section.transaction_log {\n margin-top: 0;\n header: {\n padding: 5px;\n }\n main {\n display: flex;\n flex-flow: row wrap;\n gap: 5px;\n .transaction_update {\n width: 100%;\n display: flex;\n flex-flow: row;\n align-items: flex-start;\n justify-content: flex-start;\n justify-items: flex-start;\n align-content: flex-start;\n border-left: var(--fg-border);\n border-top: var(--fg-border);\n header {\n padding: 5px;\n h4 {\n margin: 0;\n padding: 0;\n font-size: inherit;\n }\n }\n main {\n margin-left: 0;\n display: flex;\n flex-flow: column;\n gap: 0px;\n border-left: 1px solid #333;\n section ~ section {\n border-top: 1px solid #333;\n }\n section {\n padding: 5px;\n &.transaction_output {\n border-right: none;\n }\n &.transaction_impact {\n padding: 5px;\n }\n margin: 0;\n article {\n border-left: var(--fg-border);\n border-right: var(--fg-border);\n .summary {\n white-space: nowrap;\n }\n }\n }\n }\n }\n }\n }\n section.timeline_log {\n header {\n display: flex;\n label {\n display: flex;\n width: 100%;\n flex-grow: 1;\n .gap {\n flex-grow: 1;\n }\n nav {\n display: flex;\n flex-flow: row nowrap;\n gap: 5px;\n }\n }\n }\n .timeline_update {\n padding: 5px;\n border-left: var(--fg-border);\n h4 {\n margin: 0;\n padding: 0;\n font-size: inherit;\n }\n main {\n margin: 0;\n .node.atom_update {\n border-left: var(--fg-border);\n }\n }\n }\n .you_are_here {\n background: var(--fg-color);\n color: var(--bg-color);\n text-align: center;\n }\n }\n }\n }\n footer {\n display: flex;\n justify-content: flex-end;\n button {\n cursor: pointer;\n background: none;\n border: none;\n padding: none;\n position: absolute;\n right: 0;\n bottom: 0;\n }\n }\n\n .json_editor {\n input {\n font-family: theia;\n border: none;\n border-bottom: 1px solid;\n background: none;\n &:disabled {\n border: none;\n }\n }\n button {\n background: none;\n margin-left: auto;\n color: #777;\n border: none;\n font-family: theia;\n font-size: 14px;\n margin: none;\n padding: 4px;\n padding-bottom: 6px;\n cursor: pointer;\n &:hover {\n color: #333;\n background-color: #aaa;\n }\n }\n select {\n font-family: theia;\n font-size: 14px;\n background: none;\n border: none;\n color: #777;\n @media (prefers-color-scheme: light) {\n color: #999;\n }\n }\n .json_editor_unofficial {\n background-color: #777;\n button {\n color: #333;\n }\n }\n .json_editor_missing {\n background-color: #f055;\n }\n .json_editor_key {\n padding-right: 10px;\n input {\n color: #999;\n @media (prefers-color-scheme: light) {\n color: #777;\n }\n }\n }\n .json_editor_object {\n border-left: 2px solid #333;\n padding-left: 20px;\n @media (prefers-color-scheme: light) {\n border-color: #ccc;\n }\n .json_editor_properties {\n > * {\n border-bottom: var(--fg-border);\n margin-bottom: 2px;\n }\n }\n }\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../hamr/src/react-data-designer/RelationEditor.module.scss","../src/devtools.scss"],"sourcesContent":[".class {\n display: flex;\n flex-flow: row wrap;\n gap: 4px;\n section {\n display: flex;\n flex-flow: row;\n margin-bottom: 1rem;\n border: 1px solid #ccc;\n padding: 2px;\n margin: 0;\n span {\n display: flex;\n }\n }\n}\n","main.atom_io_devtools {\n --fg-color: #eee;\n --bg-color: #111;\n --bg-tint1: #222;\n --fg-border: 1px solid var(--fg-color);\n @media (prefers-color-scheme: light) {\n --fg-color: #444;\n --bg-color: #ddd;\n --bg-tint1: #e3e3e3;\n }\n box-sizing: border-box;\n color: var(--fg-color);\n background-color: var(--bg-color);\n border: 2px solid var(--fg-color);\n position: fixed;\n right: 0;\n bottom: 0;\n height: 100%;\n display: flex;\n flex-flow: column;\n max-height: 800px;\n width: 100%;\n max-width: 500px;\n overflow-y: scroll;\n * {\n font-size: 16px;\n font-family: theia, monospace;\n }\n > header {\n padding: 5px;\n padding-left: 10px;\n padding-bottom: 0;\n display: flex;\n justify-content: space-between;\n h1 {\n font-size: inherit;\n margin: 0;\n font-size: 24px;\n font-family: charter;\n }\n nav {\n display: flex;\n flex-flow: row nowrap;\n button {\n cursor: pointer;\n background: none;\n border: none;\n padding: none;\n margin-bottom: -2px;\n z-index: 1000;\n &:disabled {\n cursor: default;\n background-color: var(--bg-tint1);\n color: var(--fg-color);\n border: var(--fg-border);\n border-bottom: none;\n }\n }\n }\n }\n > main {\n background: var(--bg-tint1);\n }\n main {\n overflow-y: scroll;\n flex-grow: 1;\n display: flex;\n flex-flow: column;\n gap: 0;\n article.index {\n .node .node {\n border-right: var(--fg-border);\n padding-right: 0;\n background: #fff3;\n }\n .node > .node {\n margin: 5px 0;\n margin-left: 12px;\n border-left: var(--fg-border);\n }\n .node {\n border-top: var(--fg-border);\n overflow-x: scroll;\n padding: 5px;\n &:last-of-type {\n border-bottom: var(--fg-border);\n }\n &.transaction_update {\n padding: 0;\n }\n header {\n display: flex;\n flex-flow: row;\n gap: 5px;\n position: sticky;\n z-index: 999;\n top: 0;\n button.carat {\n cursor: pointer;\n background: none;\n border: none;\n width: 20px;\n &.open {\n transform: rotate(90deg);\n }\n &:disabled {\n cursor: default;\n }\n }\n label {\n display: flex;\n flex-flow: row;\n gap: 5px;\n cursor: help;\n h2 {\n display: inline-block;\n margin: 0;\n }\n .detail {\n color: #777;\n @media (prefers-color-scheme: light) {\n color: #999;\n }\n }\n }\n }\n main {\n margin-left: 15px;\n }\n }\n section.transaction_log {\n margin-top: 0;\n header: {\n padding: 5px;\n }\n main {\n display: flex;\n flex-flow: row wrap;\n gap: 5px;\n .transaction_update {\n width: 100%;\n display: flex;\n flex-flow: row;\n align-items: flex-start;\n justify-content: flex-start;\n justify-items: flex-start;\n align-content: flex-start;\n border-left: var(--fg-border);\n border-top: var(--fg-border);\n header {\n padding: 5px;\n h4 {\n margin: 0;\n padding: 0;\n font-size: inherit;\n }\n }\n main {\n margin-left: 0;\n display: flex;\n flex-flow: column;\n gap: 0px;\n border-left: 1px solid #333;\n section ~ section {\n border-top: 1px solid #333;\n }\n section {\n padding: 5px;\n &.transaction_output {\n border-right: none;\n }\n &.transaction_impact {\n padding: 5px;\n }\n margin: 0;\n article {\n border-left: var(--fg-border);\n border-right: var(--fg-border);\n .summary {\n white-space: nowrap;\n }\n }\n }\n }\n }\n }\n }\n section.timeline_log {\n header {\n display: flex;\n label {\n display: flex;\n width: 100%;\n flex-grow: 1;\n .gap {\n flex-grow: 1;\n }\n nav {\n display: flex;\n flex-flow: row nowrap;\n gap: 5px;\n }\n }\n }\n .timeline_update {\n padding: 5px;\n border-left: var(--fg-border);\n h4 {\n margin: 0;\n padding: 0;\n font-size: inherit;\n }\n main {\n margin: 0;\n .node.atom_update {\n border-left: var(--fg-border);\n }\n }\n }\n .you_are_here {\n background: var(--fg-color);\n color: var(--bg-color);\n text-align: center;\n }\n }\n }\n }\n footer {\n display: flex;\n justify-content: flex-end;\n button {\n cursor: pointer;\n background: none;\n border: none;\n padding: none;\n position: absolute;\n right: 0;\n bottom: 0;\n }\n }\n\n .json_editor {\n input {\n font-family: theia;\n border: none;\n border-bottom: 1px solid;\n background: none;\n &:disabled {\n border: none;\n }\n }\n button {\n background: none;\n margin-left: auto;\n color: #777;\n border: none;\n font-family: theia;\n font-size: 14px;\n margin: none;\n padding: 4px;\n padding-bottom: 6px;\n cursor: pointer;\n &:hover {\n color: #333;\n background-color: #aaa;\n }\n }\n select {\n font-family: theia;\n font-size: 14px;\n background: none;\n border: none;\n color: #777;\n @media (prefers-color-scheme: light) {\n color: #999;\n }\n }\n .json_editor_unofficial {\n background-color: #777;\n button {\n color: #333;\n }\n }\n .json_editor_missing {\n background-color: #f055;\n }\n .json_editor_key {\n padding-right: 10px;\n input {\n color: #999;\n @media (prefers-color-scheme: light) {\n color: #777;\n }\n }\n }\n .json_editor_object {\n border-left: 2px solid #333;\n padding-left: 20px;\n @media (prefers-color-scheme: light) {\n border-color: #ccc;\n }\n .json_editor_properties {\n > * {\n border-bottom: var(--fg-border);\n margin-bottom: 2px;\n }\n }\n }\n }\n}\n"],"mappings":"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","names":[]}
@@ -157,7 +157,7 @@ declare class Tracker<Mutable extends Transceiver<any>> {
157
157
  private observeCore;
158
158
  private updateCore;
159
159
  mutableState: MutableAtomToken<Mutable, Json.Serializable>;
160
- latestUpdateState: AtomToken<typeof this$1.Update | null>;
160
+ latestUpdateState: AtomToken<typeof this.Update | null>;
161
161
  constructor(mutableState: MutableAtomToken<Mutable, Json.Serializable>, store?: Store);
162
162
  }
163
163
 
@@ -196,6 +196,7 @@ type Timeline = {
196
196
  type: `timeline`;
197
197
  key: string;
198
198
  at: number;
199
+ shouldCapture?: (update: TimelineUpdate, timeline: Timeline) => boolean;
199
200
  timeTraveling: `into_future` | `into_past` | null;
200
201
  history: TimelineUpdate[];
201
202
  selectorTime: number | null;
@@ -157,7 +157,7 @@ declare class Tracker<Mutable extends Transceiver<any>> {
157
157
  private observeCore;
158
158
  private updateCore;
159
159
  mutableState: MutableAtomToken<Mutable, Json.Serializable>;
160
- latestUpdateState: AtomToken<typeof this$1.Update | null>;
160
+ latestUpdateState: AtomToken<typeof this.Update | null>;
161
161
  constructor(mutableState: MutableAtomToken<Mutable, Json.Serializable>, store?: Store);
162
162
  }
163
163
 
@@ -196,6 +196,7 @@ type Timeline = {
196
196
  type: `timeline`;
197
197
  key: string;
198
198
  at: number;
199
+ shouldCapture?: (update: TimelineUpdate, timeline: Timeline) => boolean;
199
200
  timeTraveling: `into_future` | `into_past` | null;
200
201
  history: TimelineUpdate[];
201
202
  selectorTime: number | null;
@@ -22,4 +22,4 @@ type ServerConfig = {
22
22
  store?: Store;
23
23
  };
24
24
 
25
- export { ServerConfig, useExposeFamily, useExposeMutable, useExposeMutableFamily, useExposeSingle, useReceiveState, useReceiveTransaction, useSyncTransaction };
25
+ export { type ServerConfig, useExposeFamily, useExposeMutable, useExposeMutableFamily, useExposeSingle, useReceiveState, useReceiveTransaction, useSyncTransaction };
@@ -22,4 +22,4 @@ type ServerConfig = {
22
22
  store?: Store;
23
23
  };
24
24
 
25
- export { ServerConfig, useExposeFamily, useExposeMutable, useExposeMutableFamily, useExposeSingle, useReceiveState, useReceiveTransaction, useSyncTransaction };
25
+ export { type ServerConfig, useExposeFamily, useExposeMutable, useExposeMutableFamily, useExposeSingle, useReceiveState, useReceiveTransaction, useSyncTransaction };
@@ -46,4 +46,4 @@ declare const setupRealtimeTestClient: (options: TestSetupOptions__SingleClient,
46
46
  declare const singleClient: (options: TestSetupOptions__SingleClient) => RealtimeTestAPI__SingleClient;
47
47
  declare const multiClient: <ClientNames extends string>(options: TestSetupOptions__MultiClient<ClientNames>) => RealtimeTestAPI__MultiClient<ClientNames>;
48
48
 
49
- export { RealtimeTestAPI, RealtimeTestAPI__MultiClient, RealtimeTestAPI__SingleClient, RealtimeTestClient, RealtimeTestServer, RealtimeTestTools, TestSetupOptions, TestSetupOptions__MultiClient, TestSetupOptions__SingleClient, multiClient, setupRealtimeTestClient, setupRealtimeTestServer, singleClient };
49
+ export { type RealtimeTestAPI, type RealtimeTestAPI__MultiClient, type RealtimeTestAPI__SingleClient, type RealtimeTestClient, type RealtimeTestServer, type RealtimeTestTools, type TestSetupOptions, type TestSetupOptions__MultiClient, type TestSetupOptions__SingleClient, multiClient, setupRealtimeTestClient, setupRealtimeTestServer, singleClient };
@@ -46,4 +46,4 @@ declare const setupRealtimeTestClient: (options: TestSetupOptions__SingleClient,
46
46
  declare const singleClient: (options: TestSetupOptions__SingleClient) => RealtimeTestAPI__SingleClient;
47
47
  declare const multiClient: <ClientNames extends string>(options: TestSetupOptions__MultiClient<ClientNames>) => RealtimeTestAPI__MultiClient<ClientNames>;
48
48
 
49
- export { RealtimeTestAPI, RealtimeTestAPI__MultiClient, RealtimeTestAPI__SingleClient, RealtimeTestClient, RealtimeTestServer, RealtimeTestTools, TestSetupOptions, TestSetupOptions__MultiClient, TestSetupOptions__SingleClient, multiClient, setupRealtimeTestClient, setupRealtimeTestServer, singleClient };
49
+ export { type RealtimeTestAPI, type RealtimeTestAPI__MultiClient, type RealtimeTestAPI__SingleClient, type RealtimeTestClient, type RealtimeTestServer, type RealtimeTestTools, type TestSetupOptions, type TestSetupOptions__MultiClient, type TestSetupOptions__SingleClient, multiClient, setupRealtimeTestClient, setupRealtimeTestServer, singleClient };
package/src/timeline.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import type {
2
+ Timeline,
2
3
  TimelineAtomUpdate,
3
4
  TimelineSelectorUpdate,
4
5
  TimelineTransactionUpdate,
@@ -20,6 +21,7 @@ export type TimelineToken = {
20
21
  export type TimelineOptions = {
21
22
  key: string
22
23
  atoms: (AtomFamily<any, any> | AtomToken<any>)[]
24
+ shouldCapture?: (update: TimelineUpdate, timeline: Timeline) => boolean
23
25
  }
24
26
 
25
27
  export type TimelineUpdate =
@@ -36,4 +36,4 @@ declare class SetRTX<P extends primitive> extends Set<P> implements Transceiver<
36
36
  undo(update: NumberedSetUpdate): number | null;
37
37
  }
38
38
 
39
- export { NumberedSetUpdate, SetRTX, SetRTXJson, SetUpdate };
39
+ export { type NumberedSetUpdate, SetRTX, type SetRTXJson, type SetUpdate };
@@ -36,4 +36,4 @@ declare class SetRTX<P extends primitive> extends Set<P> implements Transceiver<
36
36
  undo(update: NumberedSetUpdate): number | null;
37
37
  }
38
38
 
39
- export { NumberedSetUpdate, SetRTX, SetRTXJson, SetUpdate };
39
+ export { type NumberedSetUpdate, SetRTX, type SetRTXJson, type SetUpdate };