@rlabs-inc/signals 1.3.0 → 1.4.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.
Files changed (48) hide show
  1. package/README.md +114 -0
  2. package/dist/core/constants.d.ts +6 -0
  3. package/dist/core/constants.d.ts.map +1 -1
  4. package/dist/deep/proxy.d.ts.map +1 -1
  5. package/dist/index.d.ts +7 -1
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +430 -56
  8. package/dist/index.mjs +430 -56
  9. package/dist/primitives/bind.d.ts.map +1 -1
  10. package/dist/primitives/effect.d.ts.map +1 -1
  11. package/dist/primitives/linked.d.ts +73 -0
  12. package/dist/primitives/linked.d.ts.map +1 -0
  13. package/dist/primitives/scope.d.ts +96 -0
  14. package/dist/primitives/scope.d.ts.map +1 -0
  15. package/dist/primitives/selector.d.ts +46 -0
  16. package/dist/primitives/selector.d.ts.map +1 -0
  17. package/dist/reactivity/scheduling.d.ts.map +1 -1
  18. package/dist/reactivity/tracking.d.ts +5 -0
  19. package/dist/reactivity/tracking.d.ts.map +1 -1
  20. package/dist/v2/bench-compare.d.ts +2 -0
  21. package/dist/v2/bench-compare.d.ts.map +1 -0
  22. package/dist/v2/bench.d.ts +5 -0
  23. package/dist/v2/bench.d.ts.map +1 -0
  24. package/dist/v2/bind.d.ts +94 -0
  25. package/dist/v2/bind.d.ts.map +1 -0
  26. package/dist/v2/collections.d.ts +133 -0
  27. package/dist/v2/collections.d.ts.map +1 -0
  28. package/dist/v2/compat-test.d.ts +2 -0
  29. package/dist/v2/compat-test.d.ts.map +1 -0
  30. package/dist/v2/debug-array.d.ts +2 -0
  31. package/dist/v2/debug-array.d.ts.map +1 -0
  32. package/dist/v2/debug-diamond.d.ts +2 -0
  33. package/dist/v2/debug-diamond.d.ts.map +1 -0
  34. package/dist/v2/index.d.ts +7 -0
  35. package/dist/v2/index.d.ts.map +1 -0
  36. package/dist/v2/primitives.d.ts +120 -0
  37. package/dist/v2/primitives.d.ts.map +1 -0
  38. package/dist/v2/proxy.d.ts +10 -0
  39. package/dist/v2/proxy.d.ts.map +1 -0
  40. package/dist/v2/registry.d.ts +35 -0
  41. package/dist/v2/registry.d.ts.map +1 -0
  42. package/dist/v2/stress.d.ts +7 -0
  43. package/dist/v2/stress.d.ts.map +1 -0
  44. package/dist/v2/test-suite.d.ts +2 -0
  45. package/dist/v2/test-suite.d.ts.map +1 -0
  46. package/dist/v2/test-v1.d.ts +2 -0
  47. package/dist/v2/test-v1.d.ts.map +1 -0
  48. package/package.json +7 -1
package/README.md CHANGED
@@ -9,6 +9,9 @@ A complete standalone mirror of Svelte 5's reactivity system. No compiler needed
9
9
  - **True Fine-Grained Reactivity** - Changes to deeply nested properties only trigger effects that read that exact path
10
10
  - **Per-Property Tracking** - Proxy-based deep reactivity with lazy signal creation per property
11
11
  - **Reactive Bindings** - Two-way data binding with `bind()` for connecting reactive values
12
+ - **linkedSignal** - Angular's killer feature: writable computed that resets when source changes
13
+ - **createSelector** - Solid's O(n)→O(2) optimization for list selection
14
+ - **effectScope** - Vue's lifecycle management with pause/resume support
12
15
  - **Three-State Dirty Tracking** - Efficient CLEAN/MAYBE_DIRTY/DIRTY propagation
13
16
  - **Automatic Cleanup** - Effects clean up when disposed, no memory leaks
14
17
  - **Batching** - Group updates to prevent redundant effect runs
@@ -211,6 +214,117 @@ effect.pre(() => {
211
214
  })
212
215
  ```
213
216
 
217
+ ### Linked Signals (Angular's killer feature)
218
+
219
+ #### `linkedSignal<D>(fn: () => D): WritableSignal<D>`
220
+ #### `linkedSignal<S, D>(options: LinkedSignalOptions<S, D>): WritableSignal<D>`
221
+
222
+ Create a writable signal that derives from a source but can be manually overridden.
223
+ When the source changes, the linked signal resets to the computed value.
224
+
225
+ ```typescript
226
+ // Simple form - derives directly from source
227
+ const options = signal(['a', 'b', 'c'])
228
+ const selected = linkedSignal(() => options.value[0])
229
+
230
+ console.log(selected.value) // 'a'
231
+ selected.value = 'b' // Manual override
232
+ console.log(selected.value) // 'b'
233
+
234
+ options.value = ['x', 'y'] // Source changes
235
+ flushSync()
236
+ console.log(selected.value) // 'x' (reset to computed value)
237
+ ```
238
+
239
+ ```typescript
240
+ // Advanced form - with previous value tracking
241
+ const items = signal([1, 2, 3])
242
+ const selectedItem = linkedSignal({
243
+ source: () => items.value,
244
+ computation: (newItems, prev) => {
245
+ // Keep selection if still valid
246
+ if (prev && newItems.includes(prev.value)) {
247
+ return prev.value
248
+ }
249
+ return newItems[0]
250
+ }
251
+ })
252
+ ```
253
+
254
+ **Use cases:**
255
+ - Form inputs that reset when parent data changes
256
+ - Selection state that persists within valid options
257
+ - Derived values that can be temporarily overridden
258
+
259
+ ### Selectors (Solid's O(n)→O(2) optimization)
260
+
261
+ #### `createSelector<T, U = T>(source: () => T, fn?: (key: U, value: T) => boolean): SelectorFn<T, U>`
262
+
263
+ Create a selector function for efficient list selection tracking.
264
+ Instead of O(n) effects re-running, only affected items run = O(2).
265
+
266
+ ```typescript
267
+ const selectedId = signal(1)
268
+ const isSelected = createSelector(() => selectedId.value)
269
+
270
+ // In a list of 1000 items:
271
+ items.forEach(item => {
272
+ effect(() => {
273
+ // Only runs when THIS item's selection state changes!
274
+ // When selectedId changes from 1 to 2:
275
+ // - Only item 1's effect runs (was selected, now not)
276
+ // - Only item 2's effect runs (was not selected, now is)
277
+ // - Other 998 items' effects DON'T run
278
+ if (isSelected(item.id)) {
279
+ highlight(item)
280
+ } else {
281
+ unhighlight(item)
282
+ }
283
+ })
284
+ })
285
+ ```
286
+
287
+ ### Effect Scope (Vue's lifecycle management)
288
+
289
+ #### `effectScope(detached?: boolean): EffectScope`
290
+
291
+ Create an effect scope to group effects for batch disposal with pause/resume support.
292
+
293
+ ```typescript
294
+ const scope = effectScope()
295
+
296
+ scope.run(() => {
297
+ // Effects created here are tracked by the scope
298
+ effect(() => console.log(count.value))
299
+ effect(() => console.log(name.value))
300
+
301
+ onScopeDispose(() => {
302
+ console.log('Cleaning up...')
303
+ })
304
+ })
305
+
306
+ // Later, dispose all effects at once
307
+ scope.stop()
308
+ ```
309
+
310
+ #### Pause and Resume
311
+
312
+ ```typescript
313
+ scope.pause() // Effects won't run while paused
314
+
315
+ count.value = 5 // Effect doesn't run
316
+
317
+ scope.resume() // Pending updates run
318
+ ```
319
+
320
+ #### `getCurrentScope(): EffectScope | null`
321
+
322
+ Get the currently active effect scope.
323
+
324
+ #### `onScopeDispose(fn: () => void): void`
325
+
326
+ Register a cleanup function on the current scope.
327
+
214
328
  ### Batching & Scheduling
215
329
 
216
330
  #### `batch(fn: () => T): T`
@@ -42,6 +42,12 @@ export declare const STALE_REACTION: unique symbol;
42
42
  export declare const STATE_SYMBOL: unique symbol;
43
43
  /** Symbol to mark reactive proxies */
44
44
  export declare const REACTIVE_MARKER: unique symbol;
45
+ /** Symbol to identify Binding objects (must not be proxied) */
46
+ export declare const BINDING_SYMBOL: unique symbol;
47
+ /** Symbol to identify LinkedSignal objects */
48
+ export declare const LINKED_SYMBOL: unique symbol;
49
+ /** Flag to identify Source objects */
50
+ export declare const SOURCE: number;
45
51
  /** Mask to clear all status bits (CLEAN, DIRTY, MAYBE_DIRTY) */
46
52
  export declare const STATUS_MASK: number;
47
53
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/core/constants.ts"],"names":[],"mappings":"AASA,2CAA2C;AAC3C,eAAO,MAAM,OAAO,QAAS,CAAA;AAE7B,0BAA0B;AAC1B,eAAO,MAAM,MAAM,QAAS,CAAA;AAE5B,wEAAwE;AACxE,eAAO,MAAM,aAAa,QAAS,CAAA;AAEnC,0DAA0D;AAC1D,eAAO,MAAM,WAAW,QAAS,CAAA;AAEjC,iDAAiD;AACjD,eAAO,MAAM,aAAa,QAAS,CAAA;AAEnC,wCAAwC;AACxC,eAAO,MAAM,WAAW,QAAS,CAAA;AAEjC,+BAA+B;AAC/B,eAAO,MAAM,YAAY,QAAS,CAAA;AAMlC,4CAA4C;AAC5C,eAAO,MAAM,KAAK,QAAU,CAAA;AAE5B,yDAAyD;AACzD,eAAO,MAAM,KAAK,QAAU,CAAA;AAE5B,mEAAmE;AACnE,eAAO,MAAM,WAAW,QAAU,CAAA;AAElC,0CAA0C;AAC1C,eAAO,MAAM,oBAAoB,QAAU,CAAA;AAE3C,gCAAgC;AAChC,eAAO,MAAM,SAAS,QAAU,CAAA;AAEhC,+BAA+B;AAC/B,eAAO,MAAM,KAAK,QAAU,CAAA;AAE5B,mCAAmC;AACnC,eAAO,MAAM,UAAU,QAAU,CAAA;AAEjC,sDAAsD;AACtD,eAAO,MAAM,gBAAgB,QAAU,CAAA;AAMvC,oDAAoD;AACpD,eAAO,MAAM,OAAO,QAAS,CAAA;AAE7B,0DAA0D;AAC1D,eAAO,MAAM,YAAY,QAAS,CAAA;AAMlC,iDAAiD;AACjD,eAAO,MAAM,cAAc,QAAU,CAAA;AAMrC,2EAA2E;AAC3E,eAAO,MAAM,aAAa,EAAE,OAAO,MAAkD,CAAA;AAErF,wDAAwD;AACxD,eAAO,MAAM,cAAc,EAAE,OAAO,MAAmD,CAAA;AAEvF,0CAA0C;AAC1C,eAAO,MAAM,YAAY,EAAE,OAAO,MAA0C,CAAA;AAE5E,sCAAsC;AACtC,eAAO,MAAM,eAAe,EAAE,OAAO,MAA6C,CAAA;AAMlF,gEAAgE;AAChE,eAAO,MAAM,WAAW,QAAiC,CAAA"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/core/constants.ts"],"names":[],"mappings":"AASA,2CAA2C;AAC3C,eAAO,MAAM,OAAO,QAAS,CAAA;AAE7B,0BAA0B;AAC1B,eAAO,MAAM,MAAM,QAAS,CAAA;AAE5B,wEAAwE;AACxE,eAAO,MAAM,aAAa,QAAS,CAAA;AAEnC,0DAA0D;AAC1D,eAAO,MAAM,WAAW,QAAS,CAAA;AAEjC,iDAAiD;AACjD,eAAO,MAAM,aAAa,QAAS,CAAA;AAEnC,wCAAwC;AACxC,eAAO,MAAM,WAAW,QAAS,CAAA;AAEjC,+BAA+B;AAC/B,eAAO,MAAM,YAAY,QAAS,CAAA;AAMlC,4CAA4C;AAC5C,eAAO,MAAM,KAAK,QAAU,CAAA;AAE5B,yDAAyD;AACzD,eAAO,MAAM,KAAK,QAAU,CAAA;AAE5B,mEAAmE;AACnE,eAAO,MAAM,WAAW,QAAU,CAAA;AAElC,0CAA0C;AAC1C,eAAO,MAAM,oBAAoB,QAAU,CAAA;AAE3C,gCAAgC;AAChC,eAAO,MAAM,SAAS,QAAU,CAAA;AAEhC,+BAA+B;AAC/B,eAAO,MAAM,KAAK,QAAU,CAAA;AAE5B,mCAAmC;AACnC,eAAO,MAAM,UAAU,QAAU,CAAA;AAEjC,sDAAsD;AACtD,eAAO,MAAM,gBAAgB,QAAU,CAAA;AAMvC,oDAAoD;AACpD,eAAO,MAAM,OAAO,QAAS,CAAA;AAE7B,0DAA0D;AAC1D,eAAO,MAAM,YAAY,QAAS,CAAA;AAMlC,iDAAiD;AACjD,eAAO,MAAM,cAAc,QAAU,CAAA;AAMrC,2EAA2E;AAC3E,eAAO,MAAM,aAAa,EAAE,OAAO,MAAkD,CAAA;AAErF,wDAAwD;AACxD,eAAO,MAAM,cAAc,EAAE,OAAO,MAAmD,CAAA;AAEvF,0CAA0C;AAC1C,eAAO,MAAM,YAAY,EAAE,OAAO,MAA0C,CAAA;AAE5E,sCAAsC;AACtC,eAAO,MAAM,eAAe,EAAE,OAAO,MAA6C,CAAA;AAElF,+DAA+D;AAC/D,eAAO,MAAM,cAAc,EAAE,OAAO,MAA4C,CAAA;AAEhF,8CAA8C;AAC9C,eAAO,MAAM,aAAa,EAAE,OAAO,MAA2C,CAAA;AAM9E,sCAAsC;AACtC,eAAO,MAAM,MAAM,QAAS,CAAA;AAM5B,gEAAgE;AAChE,eAAO,MAAM,WAAW,QAAiC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../../src/deep/proxy.ts"],"names":[],"mappings":"AA8EA;;;;;;;;GAQG;AACH,wBAAgB,KAAK,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CA8PnD;AAMD;;GAEG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAKpC;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAElD"}
1
+ {"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../../src/deep/proxy.ts"],"names":[],"mappings":"AA6FA;;;;;;;;GAQG;AACH,wBAAgB,KAAK,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CA6QnD;AAMD;;GAEG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAKpC;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAElD"}
package/dist/index.d.ts CHANGED
@@ -2,6 +2,9 @@ export { signal, source, mutableSource, state, stateRaw } from './primitives/sig
2
2
  export { derived, createDerived, disconnectDerived } from './primitives/derived.js';
3
3
  export { effect, createEffect, updateEffect, destroyEffect } from './primitives/effect.js';
4
4
  export { bind, bindReadonly, isBinding, unwrap, signals } from './primitives/bind.js';
5
+ export { linkedSignal, isLinkedSignal } from './primitives/linked.js';
6
+ export { createSelector } from './primitives/selector.js';
7
+ export { effectScope, getCurrentScope, onScopeDispose } from './primitives/scope.js';
5
8
  export { proxy, toRaw, isReactive } from './deep/proxy.js';
6
9
  export { batch, untrack, peek } from './reactivity/batching.js';
7
10
  export { flushSync, tick } from './reactivity/scheduling.js';
@@ -10,8 +13,11 @@ export { ReactiveMap } from './collections/map.js';
10
13
  export { ReactiveSet } from './collections/set.js';
11
14
  export { ReactiveDate } from './collections/date.js';
12
15
  export { get, set, isDirty, setSignalStatus, markReactions, updateReaction, removeReactions, } from './reactivity/tracking.js';
13
- export { DERIVED, EFFECT, RENDER_EFFECT, ROOT_EFFECT, BRANCH_EFFECT, USER_EFFECT, BLOCK_EFFECT, CLEAN, DIRTY, MAYBE_DIRTY, REACTION_IS_UPDATING, DESTROYED, INERT, EFFECT_RAN, EFFECT_PRESERVED, UNOWNED, DISCONNECTED, UNINITIALIZED, STALE_REACTION, STATE_SYMBOL, REACTIVE_MARKER, } from './core/constants.js';
16
+ export { DERIVED, EFFECT, RENDER_EFFECT, ROOT_EFFECT, BRANCH_EFFECT, USER_EFFECT, BLOCK_EFFECT, CLEAN, DIRTY, MAYBE_DIRTY, REACTION_IS_UPDATING, DESTROYED, INERT, EFFECT_RAN, EFFECT_PRESERVED, UNOWNED, DISCONNECTED, UNINITIALIZED, STALE_REACTION, STATE_SYMBOL, REACTIVE_MARKER, BINDING_SYMBOL, LINKED_SYMBOL, } from './core/constants.js';
14
17
  export { activeReaction, activeEffect, untracking, writeVersion, readVersion, batchDepth, setActiveReaction, setActiveEffect, setUntracking, incrementWriteVersion, incrementReadVersion, incrementBatchDepth, decrementBatchDepth, getReadVersion, getWriteVersion, getBatchDepth, } from './core/globals.js';
15
18
  export type { Signal, Source, Reaction, Derived, Effect, Value, ReadableSignal, WritableSignal, DerivedSignal, DisposeFn, CleanupFn, EffectFn, Equals, Uninitialized, } from './core/types.js';
16
19
  export type { Binding, ReadonlyBinding } from './primitives/bind.js';
20
+ export type { LinkedSignalOptions, LinkedSignalConfig } from './primitives/linked.js';
21
+ export type { SelectorFn } from './primitives/selector.js';
22
+ export type { EffectScope } from './primitives/scope.js';
17
23
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AACvF,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AACnF,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAC1F,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAMrF,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAM1D,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAA;AAC/D,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,4BAA4B,CAAA;AAM5D,OAAO,EACL,MAAM,EACN,UAAU,EACV,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,WAAW,EACX,YAAY,GACb,MAAM,0BAA0B,CAAA;AAMjC,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAMpD,OAAO,EACL,GAAG,EACH,GAAG,EACH,OAAO,EACP,eAAe,EACf,aAAa,EACb,cAAc,EACd,eAAe,GAChB,MAAM,0BAA0B,CAAA;AAMjC,OAAO,EAEL,OAAO,EACP,MAAM,EACN,aAAa,EACb,WAAW,EACX,aAAa,EACb,WAAW,EACX,YAAY,EAGZ,KAAK,EACL,KAAK,EACL,WAAW,EACX,oBAAoB,EACpB,SAAS,EACT,KAAK,EACL,UAAU,EACV,gBAAgB,EAGhB,OAAO,EACP,YAAY,EAGZ,aAAa,EACb,cAAc,EACd,YAAY,EACZ,eAAe,GAChB,MAAM,qBAAqB,CAAA;AAM5B,OAAO,EACL,cAAc,EACd,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,WAAW,EACX,UAAU,EAGV,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EAGnB,cAAc,EACd,eAAe,EACf,aAAa,GACd,MAAM,mBAAmB,CAAA;AAM1B,YAAY,EAEV,MAAM,EACN,MAAM,EACN,QAAQ,EACR,OAAO,EACP,MAAM,EACN,KAAK,EAGL,cAAc,EACd,cAAc,EACd,aAAa,EACb,SAAS,EACT,SAAS,EACT,QAAQ,EAGR,MAAM,EACN,aAAa,GACd,MAAM,iBAAiB,CAAA;AAExB,YAAY,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AACvF,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AACnF,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAC1F,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AACrF,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AACzD,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAMpF,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAM1D,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAA;AAC/D,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,4BAA4B,CAAA;AAM5D,OAAO,EACL,MAAM,EACN,UAAU,EACV,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,WAAW,EACX,YAAY,GACb,MAAM,0BAA0B,CAAA;AAMjC,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAMpD,OAAO,EACL,GAAG,EACH,GAAG,EACH,OAAO,EACP,eAAe,EACf,aAAa,EACb,cAAc,EACd,eAAe,GAChB,MAAM,0BAA0B,CAAA;AAMjC,OAAO,EAEL,OAAO,EACP,MAAM,EACN,aAAa,EACb,WAAW,EACX,aAAa,EACb,WAAW,EACX,YAAY,EAGZ,KAAK,EACL,KAAK,EACL,WAAW,EACX,oBAAoB,EACpB,SAAS,EACT,KAAK,EACL,UAAU,EACV,gBAAgB,EAGhB,OAAO,EACP,YAAY,EAGZ,aAAa,EACb,cAAc,EACd,YAAY,EACZ,eAAe,EACf,cAAc,EACd,aAAa,GACd,MAAM,qBAAqB,CAAA;AAM5B,OAAO,EACL,cAAc,EACd,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,WAAW,EACX,UAAU,EAGV,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EAGnB,cAAc,EACd,eAAe,EACf,aAAa,GACd,MAAM,mBAAmB,CAAA;AAM1B,YAAY,EAEV,MAAM,EACN,MAAM,EACN,QAAQ,EACR,OAAO,EACP,MAAM,EACN,KAAK,EAGL,cAAc,EACd,cAAc,EACd,aAAa,EACb,SAAS,EACT,SAAS,EACT,QAAQ,EAGR,MAAM,EACN,aAAa,GACd,MAAM,iBAAiB,CAAA;AAExB,YAAY,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACpE,YAAY,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AACrF,YAAY,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAC1D,YAAY,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA"}