- finish directives
- better list diffing
- ordered directives init (:each + :if vs :if + :each) -> find out if really needed and which is faster -> yes, needed and solve many init issues.
- [?] autoinit -> too much maintenance burden
- node tests
- better deps updating -> cumulative signal
- combinations: :else :if
- :each :if, :if :each
- :each :each
- :with must be able to write state value as well
- docs: give example to each directive
- initialize per-element: - tree-dependent (:each comes first).
- generalize common attributes :prop="xyz"
- spread props
- optimization: arrays with multiple elements can be slow on creation. Maybe signal-struct must ignore arrays.
-> yep: arrays are rarely changed as
a[i]=newItem
and regularly they're mapped. - expand to any subscribables: both as state vars
- :ref
- :ref + :each
- event chains :ona-onb
- bulk events :ona:onb
- multiprop setter
🅰️ b="c" - make
this
in expression an element[x] replace :ref with :with="this as x"
- :ref creates instance in current state, not creates a new state
- to avoid extending signal-struct, we must collect state data before, and call updates after for extended state
- optimization: replace element-props with direct (better) setters
- Make sure
false
gets serialized, not removes attr
- Make sure
- Sandbox expressions: no global, no "scope" object name, no "arguments"
[x] report usignal problemauthor is not really interested-
this
doesn't refer to element/scope in event handlers - :text="" empty values shouldn't throw
- implement :with
- update :value without losing focus / position
[x] run tiredown if element got removed from condition or loop (free memory)no need just make sure no refs to elements stored-
sprae(el, newState)
can update element's state directly (as batch!?) -> must be tested against repeats in directives - :if :ref, :if :with -> context setters must come first always
- :style="{'--x':value}"
- :onkeydown.ctrl-alt-D
- examples
- todomvc
- waveplay
- evt modifiers
- once, capture, passive
- ...rest
- parallel chains
- Sandbox
- Autorun
- There's some bug with prostogreen not triggering effect. (caused by special array.length case)
- Getters must become evaluable
-
<li :each="item in items" :with="{collapsed:true}"><button :onclick='e=>collapsed=false'></li>
-
nah, it's fine:with="{likes:[], like(){ /* likes should not be undefined here */ }}"
- Reduce memory leak - via jsbenchmark example
- make disposers
- make sure internals are disposed as well
- frameworks benchmark -> contrib to krausest
- fix swapping rows error
- make use of actual swapdom
- fix removing last row issue
- optimization:
- faster create rows
- faster replace all rows
- fix remove row perf issue
- Make signals-proxy state actually lazy-init (now it's not)
- Fix multiple
.push
cycle problem -
Make regular proxy state not causing infinite recursionwe don't hold to own proxy now - All FIXMEs
-
Avoid creating signals for static values-> v9 avoids that -
Figure outarr.push()
- do we need to ever have calls as signals?
- subscript-based eval
- make
a in b
via subscript
- make
- no store
- switching signals
- get rid of
@
events - plugins: extensible directives
- comparison table: CSP, plugins, no-deps, size, performance, event/modifiers,
- [~] add :html directive as replacement for :render, with tests
- rename :with to :scope
- :fx=fx
- make signals tests (nested effects)
- try direct directives without primary/secondary
- split directives
- switchable compiler
- clear exports (no parse, err) - make sense of
compile
function as exported - template test (:text, :html, :if, :each)
- fx teardown
- flatten API, API to docs:
./core
(custom build),./sprae
(default entry)- make CSP a docs config, not entry
- customizable swapper
-
sprae.*
instead of.use
, extending docs: directive, compile, swap, signals.use
is more compact-
no-signals (signals are pluggable): better teardown flow; returns dispose fn, not state; pluggable ulive; signals from original source, not spraecan't avoid effect, the codebase is tiny
-
-
0-code sandbox (stub props)- unnecessaryObject.create
- interpolatable strings
- :each that keeps elements
- Plugins
- :aria
- :data
-
:item
- move effect out of directives, make signal-less state (ideally).
- fix ToDo
- all FIXMEs
-
make cross-version testing: sprae, csp, signals variationsjustin default is enough - avoid triggering unchanged effects
-
since we use justin - make templates reactivenah, too much friction -
replace class="∴" with just "∴" attribute (less interference/friction)invalid attribute - collapse dirs into details
- make item itself a key also
-
move proxy state into own project / part of signal struct (with tests from here)part of sprae is better - some bug with keys identity in todo
- v9 issues:
- creating/releasing rows doesn't clear up memory
- because weakmap stores by key, only if key is disposed it clears up
- replacing/swapping rows is slow
- the reason of slowdown is key - sometimes it's better to keep index as key, not id
- creating/releasing rows doesn't clear up memory
-
state as signal: test updates itselfsprae(el, signal({x:1}))
- needed for :each loop - switchable compiler
-
try getting rid of compile() calls in subscriptnot sprae's concern - try getting rid of compile() calls in sprae ? how to parse each, ref expression? -> via redefining .parse
- signals based on signals proposal
- proxy state is back
- try out store without
values
holder - flatten
store
to avoid passing parent (only needed byscope
) - bring
effect
back to all directives - make array push updates batched
- try out store without
- remove valueOf()s in directives
- separate store to object / array
-
finish all .todo teststhey're not relevant - make :with create static state
-
make :ref recognize strings/evaluablesno need, wait until needed, simpler the better, even effect is not needed - with must not create inherited root scope, it's enough to overwrite signals
- this also allows removing signals argument from store
- run benchmarks
- :each is too slow for appending 1000 items
- make each scope flat computed, not inheritance
- fix todo mvc
-
todos.filter(xxx).length
- should be subscribable - test
item = {...item}
-
-
try debouncing / batching array.length writes-> doesn't seem possible - lodash for untracked values
- fix wavearea
- fix :if within :each
- make functional ref
- add hint about :html
- make v11 release
- :onvisible..oninvisible
-
:onmount..onunmount- see :ref - :animate?
- js-framework-bench push + example