@classytic/labs 0.1.0 → 0.2.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/_virtual/_rolldown/runtime.mjs +18 -0
- package/dist/biology/enzyme-rate/preset.mjs +5 -5
- package/dist/biology/genetic-cross/core.d.mts +7 -7
- package/dist/biology/genetic-cross/core.mjs +4 -4
- package/dist/biology/genetic-cross/grid.mjs +132 -123
- package/dist/biology/genetic-cross/preset.mjs +4 -4
- package/dist/biology/genetic-cross/sex-linked.mjs +7 -7
- package/dist/biology/photosynthesis-factors/preset.mjs +8 -8
- package/dist/biology/respiration/preset.mjs +4 -4
- package/dist/biology/sequence/central-dogma.mjs +5 -5
- package/dist/biology/sequence/core.d.mts +6 -6
- package/dist/biology/sequence/core.mjs +1 -1
- package/dist/biology/sequence/preset.mjs +6 -6
- package/dist/blocks/authoring.mjs +5 -5
- package/dist/blocks/biology.d.mts +2 -2
- package/dist/blocks/biology.mjs +5 -5
- package/dist/blocks/chem.d.mts +2 -2
- package/dist/blocks/chem.mjs +13 -13
- package/dist/blocks/circuits.d.mts +293 -4
- package/dist/blocks/circuits.mjs +874 -9
- package/dist/blocks/discrete.d.mts +30 -2
- package/dist/blocks/discrete.mjs +74 -4
- package/dist/blocks/economics.mjs +1 -1
- package/dist/blocks/geography.mjs +1 -1
- package/dist/blocks/geometry.mjs +3 -3
- package/dist/blocks/ict.d.mts +90 -1
- package/dist/blocks/ict.mjs +217 -7
- package/dist/blocks/index.d.mts +3064 -657
- package/dist/blocks/index.mjs +9 -9
- package/dist/blocks/lab-block.mjs +5 -5
- package/dist/blocks/lab-config.d.mts +1 -1
- package/dist/blocks/lab-config.mjs +4 -4
- package/dist/blocks/lab-gallery.d.mts +1 -1
- package/dist/blocks/lab-gallery.mjs +2 -2
- package/dist/blocks/language.d.mts +6 -6
- package/dist/blocks/language.mjs +12 -12
- package/dist/blocks/lesson.mjs +4 -4
- package/dist/blocks/math.d.mts +577 -11
- package/dist/blocks/math.mjs +1648 -14
- package/dist/blocks/ml.d.mts +45 -1
- package/dist/blocks/ml.mjs +80 -6
- package/dist/blocks/physics.d.mts +9 -4
- package/dist/blocks/physics.mjs +75 -28
- package/dist/blocks/statistics.mjs +1 -1
- package/dist/build/CircuitEditor.d.mts +14 -0
- package/dist/build/CircuitEditor.mjs +787 -0
- package/dist/build/CircuitPlayer.d.mts +19 -0
- package/dist/build/CircuitPlayer.mjs +53 -0
- package/dist/build/CircuitScene.d.mts +61 -0
- package/dist/build/CircuitScene.mjs +383 -0
- package/dist/build/contract.d.mts +116 -0
- package/dist/build/editor-ops.d.mts +65 -0
- package/dist/build/editor-ops.mjs +306 -0
- package/dist/build/editor-ui.mjs +121 -0
- package/dist/build/flow.d.mts +14 -0
- package/dist/build/flow.mjs +119 -0
- package/dist/build/index.d.mts +10 -0
- package/dist/build/index.mjs +10 -0
- package/dist/build/parts/ammeter.d.mts +1 -0
- package/dist/build/parts/ammeter.mjs +32 -0
- package/dist/build/parts/bulb.d.mts +1 -0
- package/dist/build/parts/bulb.mjs +50 -0
- package/dist/build/parts/capacitor.d.mts +1 -0
- package/dist/build/parts/capacitor.mjs +26 -0
- package/dist/build/parts/cell.d.mts +1 -0
- package/dist/build/parts/cell.mjs +40 -0
- package/dist/build/parts/diode.d.mts +1 -0
- package/dist/build/parts/diode.mjs +33 -0
- package/dist/build/parts/index.d.mts +5 -0
- package/dist/build/parts/index.mjs +43 -0
- package/dist/build/parts/mosfet.d.mts +1 -0
- package/dist/build/parts/mosfet.mjs +95 -0
- package/dist/build/parts/node.d.mts +1 -0
- package/dist/build/parts/node.mjs +32 -0
- package/dist/build/parts/resistor.d.mts +1 -0
- package/dist/build/parts/resistor.mjs +49 -0
- package/dist/build/parts/shared.mjs +42 -0
- package/dist/build/parts/switch.d.mts +1 -0
- package/dist/build/parts/switch.mjs +34 -0
- package/dist/build/parts.d.mts +1 -0
- package/dist/build/registry.d.mts +9 -0
- package/dist/build/registry.mjs +15 -0
- package/dist/build/solve.d.mts +8 -0
- package/dist/build/solve.mjs +0 -0
- package/dist/catalog/registry.d.mts +2 -2
- package/dist/catalog/templates.d.mts +1 -1
- package/dist/catalog/templates.mjs +6 -6
- package/dist/chem/battery.mjs +1 -1
- package/dist/chem/bohr-atom.mjs +4 -4
- package/dist/chem/diffusion/preset.mjs +4 -4
- package/dist/chem/electrochem/preset.mjs +5 -5
- package/dist/chem/equilibrium/preset.d.mts +1 -1
- package/dist/chem/equilibrium/preset.mjs +6 -6
- package/dist/chem/gas-box/preset.mjs +6 -6
- package/dist/chem/kinetics/preset.mjs +6 -6
- package/dist/chem/periodic-trends/preset.mjs +7 -7
- package/dist/chem/reaction-lab.mjs +3 -3
- package/dist/chem/reaction-profile.mjs +4 -4
- package/dist/chem/solution/dilution.mjs +6 -6
- package/dist/chem/solution/field.d.mts +2 -2
- package/dist/chem/solution/field.mjs +2 -2
- package/dist/chem/solution/solution-box.mjs +7 -7
- package/dist/chem/stoichiometry/preset.mjs +5 -5
- package/dist/chem/titration/preset.mjs +5 -5
- package/dist/circuits/ac-dc/asset.mjs +1 -1
- package/dist/circuits/ac-dc/preset.mjs +2 -2
- package/dist/circuits/brownout/index.d.mts +1 -0
- package/dist/circuits/brownout/preset.d.mts +22 -0
- package/dist/circuits/brownout/preset.mjs +399 -0
- package/dist/circuits/capacitor-leak/preset.mjs +13 -8
- package/dist/circuits/circuit/asset.mjs +71 -14
- package/dist/circuits/circuit/preset.mjs +23 -5
- package/dist/circuits/circuit-builder.mjs +60 -132
- package/dist/circuits/circuit-lab.mjs +60 -40
- package/dist/circuits/cmos-gate/index.d.mts +1 -0
- package/dist/circuits/cmos-gate/preset.d.mts +75 -0
- package/dist/circuits/cmos-gate/preset.mjs +1491 -0
- package/dist/circuits/diode/index.d.mts +1 -0
- package/dist/circuits/diode/preset.d.mts +25 -0
- package/dist/circuits/diode/preset.mjs +266 -0
- package/dist/circuits/index.d.mts +7 -1
- package/dist/circuits/index.mjs +7 -1
- package/dist/circuits/rc-charging/index.d.mts +1 -0
- package/dist/circuits/rc-charging/preset.d.mts +27 -0
- package/dist/circuits/rc-charging/preset.mjs +329 -0
- package/dist/circuits/semiconductor/index.d.mts +1 -0
- package/dist/circuits/semiconductor/preset.d.mts +102 -0
- package/dist/circuits/semiconductor/preset.mjs +1855 -0
- package/dist/circuits/transistor/index.d.mts +1 -0
- package/dist/circuits/transistor/preset.d.mts +27 -0
- package/dist/circuits/transistor/preset.mjs +329 -0
- package/dist/commerce/accounting/core.d.mts +1 -1
- package/dist/commerce/accounting/equation-balance.mjs +5 -5
- package/dist/commerce/accounting/journal-poster.mjs +8 -8
- package/dist/commerce/accounting/statement-sorter.mjs +4 -4
- package/dist/commerce/economics/core.d.mts +2 -2
- package/dist/commerce/economics/core.mjs +1 -1
- package/dist/commerce/economics/demand-shift-vs-move.mjs +6 -6
- package/dist/commerce/economics/elasticity-revenue.mjs +6 -6
- package/dist/commerce/economics/market-equilibrium.mjs +5 -5
- package/dist/core/easing.d.mts +3 -3
- package/dist/core/easing.mjs +2 -2
- package/dist/core/numeric.d.mts +3 -3
- package/dist/core/numeric.mjs +2 -2
- package/dist/core/reactive.d.mts +1 -1
- package/dist/core/reactive.mjs +1 -1
- package/dist/core/rng.d.mts +2 -2
- package/dist/core/rng.mjs +1 -1
- package/dist/core/tex.mjs +2 -2
- package/dist/core/timeline.d.mts +1 -1
- package/dist/core/timeline.mjs +1 -1
- package/dist/core/util.mjs +11 -1
- package/dist/discrete/arrangements/preset.mjs +6 -14
- package/dist/discrete/bayes/preset.mjs +43 -35
- package/dist/discrete/binomial/preset.mjs +2 -2
- package/dist/discrete/combination-studio/figure.d.mts +6 -0
- package/dist/discrete/combination-studio/figure.mjs +159 -0
- package/dist/discrete/combination-studio/index.d.mts +2 -0
- package/dist/discrete/combination-studio/preset.d.mts +44 -0
- package/dist/discrete/combination-studio/preset.mjs +440 -0
- package/dist/discrete/core/combinatorics.d.mts +23 -3
- package/dist/discrete/core/combinatorics.mjs +38 -3
- package/dist/discrete/core/pigeonhole.d.mts +1 -1
- package/dist/discrete/core/pigeonhole.mjs +1 -1
- package/dist/discrete/core/probability.d.mts +3 -3
- package/dist/discrete/core/probability.mjs +3 -3
- package/dist/discrete/core/sets.d.mts +1 -1
- package/dist/discrete/counting-slots/preset.mjs +8 -8
- package/dist/discrete/counting-tree/preset.mjs +65 -8
- package/dist/discrete/expected-value/preset.mjs +13 -13
- package/dist/discrete/hypergeometric/preset.mjs +48 -15
- package/dist/discrete/index.d.mts +4 -2
- package/dist/discrete/index.mjs +4 -2
- package/dist/discrete/karnaugh/preset.mjs +26 -20
- package/dist/discrete/lln/preset.mjs +44 -3
- package/dist/discrete/logic-circuit/preset.mjs +2 -2
- package/dist/discrete/monte-carlo/preset.d.mts +1 -1
- package/dist/discrete/monte-carlo/preset.mjs +14 -14
- package/dist/discrete/monty-hall/preset.mjs +6 -6
- package/dist/discrete/outcome-builder/preset.mjs +3 -3
- package/dist/discrete/pascal/preset.mjs +37 -7
- package/dist/discrete/rules.d.mts +20 -0
- package/dist/discrete/rules.mjs +264 -0
- package/dist/discrete/sample-space/preset.mjs +4 -4
- package/dist/discrete/selection/preset.mjs +7 -13
- package/dist/discrete/truth-table/preset.mjs +32 -9
- package/dist/discrete/venn/preset.mjs +71 -48
- package/dist/geography/cycle-lab/preset.mjs +17 -10
- package/dist/geography/cycles.d.mts +3 -3
- package/dist/geography/cycles.mjs +3 -3
- package/dist/geometry/board/preset.d.mts +2 -0
- package/dist/geometry/board/preset.mjs +11 -15
- package/dist/geometry/builder.mjs +3 -3
- package/dist/ict/number-systems/base-odometer.mjs +4 -4
- package/dist/ict/number-systems/bit-grouper.d.mts +1 -1
- package/dist/ict/number-systems/bit-grouper.mjs +4 -4
- package/dist/ict/number-systems/place-value-dial.d.mts +1 -1
- package/dist/ict/number-systems/place-value-dial.mjs +3 -3
- package/dist/ict/number-systems/wheel.d.mts +3 -3
- package/dist/ict/number-systems/wheel.mjs +4 -4
- package/dist/kit/annotate.mjs +3 -3
- package/dist/kit/answer-check.d.mts +2 -2
- package/dist/kit/answer-check.mjs +34 -6
- package/dist/kit/ask.d.mts +19 -0
- package/dist/kit/ask.mjs +46 -0
- package/dist/kit/bar-strip.mjs +53 -0
- package/dist/kit/calc.d.mts +33 -0
- package/dist/kit/calc.mjs +27 -0
- package/dist/kit/carrier-engine.mjs +147 -0
- package/dist/kit/clue-scene.d.mts +86 -0
- package/dist/kit/clue-scene.mjs +424 -0
- package/dist/kit/cluster.d.mts +30 -0
- package/dist/kit/cluster.mjs +81 -0
- package/dist/kit/controls.mjs +11 -5
- package/dist/kit/coords.d.mts +88 -0
- package/dist/kit/coords.mjs +192 -0
- package/dist/kit/data-scene.d.mts +27 -0
- package/dist/kit/data-scene.mjs +199 -0
- package/dist/kit/diagram.mjs +111 -50
- package/dist/kit/electronics.mjs +552 -60
- package/dist/kit/expr-analysis.d.mts +18 -6
- package/dist/kit/expr-analysis.mjs +82 -28
- package/dist/kit/frame.d.mts +3 -3
- package/dist/kit/frame.mjs +25 -6
- package/dist/kit/gameshow.mjs +2 -2
- package/dist/kit/index.d.mts +14 -2
- package/dist/kit/index.mjs +13 -1
- package/dist/kit/logic-gates.mjs +246 -47
- package/dist/kit/palette.mjs +26 -0
- package/dist/kit/pedagogy.d.mts +4 -4
- package/dist/kit/pedagogy.mjs +21 -17
- package/dist/kit/play.d.mts +1 -1
- package/dist/kit/play.mjs +3 -3
- package/dist/kit/predict.d.mts +55 -0
- package/dist/kit/predict.mjs +146 -0
- package/dist/kit/receipt.d.mts +29 -0
- package/dist/kit/receipt.mjs +94 -0
- package/dist/kit/rich.mjs +2 -2
- package/dist/kit/rule.d.mts +59 -0
- package/dist/kit/rule.mjs +215 -0
- package/dist/kit/scale.mjs +1 -1
- package/dist/kit/scene-library.d.mts +22 -0
- package/dist/kit/scene-library.mjs +311 -0
- package/dist/kit/scene-studio.d.mts +14 -0
- package/dist/kit/scene-studio.mjs +338 -0
- package/dist/kit/scenes.d.mts +31 -0
- package/dist/kit/scenes.mjs +569 -0
- package/dist/kit/slot-fill.d.mts +61 -0
- package/dist/kit/slot-fill.mjs +207 -0
- package/dist/kit/solve.d.mts +21 -0
- package/dist/kit/solve.mjs +75 -0
- package/dist/kit/space.mjs +5 -5
- package/dist/kit/steps.mjs +2 -2
- package/dist/kit/vessel.d.mts +69 -0
- package/dist/kit/vessel.mjs +191 -0
- package/dist/language/agreement/preset.mjs +2 -2
- package/dist/language/article-lens/preset.d.mts +1 -1
- package/dist/language/article-lens/preset.mjs +8 -8
- package/dist/language/deck.d.mts +3 -3
- package/dist/language/deck.mjs +1 -1
- package/dist/language/preposition-scene/preset.d.mts +2 -2
- package/dist/language/preposition-scene/preset.mjs +5 -5
- package/dist/language/sentence-builder/preset.mjs +5 -5
- package/dist/language/transform/preset.d.mts +2 -2
- package/dist/language/transform/preset.mjs +5 -5
- package/dist/language/ui.d.mts +3 -3
- package/dist/language/ui.mjs +4 -4
- package/dist/language/word-match/preset.mjs +3 -3
- package/dist/logic/LogicBuildLab.d.mts +22 -0
- package/dist/logic/LogicBuildLab.mjs +170 -0
- package/dist/logic/LogicEditScene.d.mts +31 -0
- package/dist/logic/LogicEditScene.mjs +276 -0
- package/dist/logic/LogicEditor.d.mts +14 -0
- package/dist/logic/LogicEditor.mjs +413 -0
- package/dist/logic/LogicScene.d.mts +32 -0
- package/dist/logic/LogicScene.mjs +277 -0
- package/dist/logic/contract.d.mts +72 -0
- package/dist/logic/display.d.mts +24 -0
- package/dist/logic/display.mjs +127 -0
- package/dist/logic/edit-ops.d.mts +44 -0
- package/dist/logic/edit-ops.mjs +177 -0
- package/dist/logic/evaluate.d.mts +11 -0
- package/dist/logic/evaluate.mjs +93 -0
- package/dist/logic/gates.d.mts +10 -0
- package/dist/logic/gates.mjs +73 -0
- package/dist/logic/index.d.mts +14 -0
- package/dist/logic/index.mjs +13 -0
- package/dist/logic/lab.d.mts +32 -0
- package/dist/logic/lab.mjs +160 -0
- package/dist/logic/presets.d.mts +12 -0
- package/dist/logic/presets.mjs +241 -0
- package/dist/logic/registry.d.mts +9 -0
- package/dist/logic/registry.mjs +15 -0
- package/dist/math/area-model/preset.mjs +70 -44
- package/dist/math/balance-algebra/preset.mjs +14 -5
- package/dist/math/broken-tree/index.d.mts +1 -0
- package/dist/math/broken-tree/preset.d.mts +26 -0
- package/dist/math/broken-tree/preset.mjs +435 -0
- package/dist/math/circle/index.d.mts +1 -0
- package/dist/math/circle/preset.d.mts +44 -0
- package/dist/math/circle/preset.mjs +198 -0
- package/dist/math/complex/core.d.mts +93 -0
- package/dist/math/complex/core.mjs +239 -0
- package/dist/math/complex/index.d.mts +3 -0
- package/dist/math/complex/preset.d.mts +31 -0
- package/dist/math/complex/preset.mjs +377 -0
- package/dist/math/complex/rules.d.mts +6 -0
- package/dist/math/complex/rules.mjs +121 -0
- package/dist/math/conic/index.d.mts +1 -0
- package/dist/math/conic/preset.d.mts +30 -0
- package/dist/math/conic/preset.mjs +334 -0
- package/dist/math/derivation.mjs +5 -5
- package/dist/math/derivative-explorer/preset.mjs +5 -5
- package/dist/math/domain-range/index.d.mts +1 -0
- package/dist/math/domain-range/preset.d.mts +33 -0
- package/dist/math/domain-range/preset.mjs +313 -0
- package/dist/math/fraction-bar/index.d.mts +1 -0
- package/dist/math/fraction-bar/preset.d.mts +27 -0
- package/dist/math/fraction-bar/preset.mjs +197 -0
- package/dist/math/function-machine/preset.mjs +2 -2
- package/dist/math/gradient-descent.mjs +6 -6
- package/dist/math/grapher/preset.d.mts +1 -1
- package/dist/math/grapher/preset.mjs +4 -4
- package/dist/math/harmonic-form/preset.mjs +6 -6
- package/dist/math/index.d.mts +27 -2
- package/dist/math/index.mjs +27 -2
- package/dist/math/integral-explorer/preset.mjs +2 -2
- package/dist/math/interactive/preset.mjs +3 -3
- package/dist/math/limit-explorer/preset.mjs +4 -4
- package/dist/math/linear-model/index.d.mts +1 -0
- package/dist/math/linear-model/preset.d.mts +53 -0
- package/dist/math/linear-model/preset.mjs +164 -0
- package/dist/math/linear-system/preset.mjs +4 -4
- package/dist/math/mystery-bucket/preset.mjs +6 -6
- package/dist/math/number-line/preset.mjs +3 -2
- package/dist/math/parabola/preset.mjs +4 -3
- package/dist/math/pattern/preset.mjs +7 -13
- package/dist/math/percent-bar/index.d.mts +1 -0
- package/dist/math/percent-bar/preset.d.mts +37 -0
- package/dist/math/percent-bar/preset.mjs +275 -0
- package/dist/math/poly/core.d.mts +50 -0
- package/dist/math/poly/core.mjs +268 -0
- package/dist/math/poly/index.d.mts +3 -0
- package/dist/math/poly/preset.d.mts +23 -0
- package/dist/math/poly/preset.mjs +141 -0
- package/dist/math/poly/steps.d.mts +10 -0
- package/dist/math/poly/steps.mjs +99 -0
- package/dist/math/rate-machine/index.d.mts +1 -0
- package/dist/math/rate-machine/preset.d.mts +35 -0
- package/dist/math/rate-machine/preset.mjs +281 -0
- package/dist/math/ratio-share/index.d.mts +1 -0
- package/dist/math/ratio-share/preset.d.mts +24 -0
- package/dist/math/ratio-share/preset.mjs +204 -0
- package/dist/math/receipt/index.d.mts +1 -0
- package/dist/math/receipt/preset.d.mts +22 -0
- package/dist/math/receipt/preset.mjs +137 -0
- package/dist/math/sequence-predict/index.d.mts +1 -0
- package/dist/math/sequence-predict/preset.d.mts +34 -0
- package/dist/math/sequence-predict/preset.mjs +130 -0
- package/dist/math/straight-line/index.d.mts +1 -0
- package/dist/math/straight-line/preset.d.mts +37 -0
- package/dist/math/straight-line/preset.mjs +374 -0
- package/dist/math/system-solve/index.d.mts +1 -0
- package/dist/math/system-solve/preset.d.mts +21 -0
- package/dist/math/system-solve/preset.mjs +227 -0
- package/dist/math/transform/index.d.mts +1 -0
- package/dist/math/transform/preset.d.mts +41 -0
- package/dist/math/transform/preset.mjs +343 -0
- package/dist/math/triangle-trig/preset.mjs +12 -9
- package/dist/math/trig/core.d.mts +37 -0
- package/dist/math/trig/core.mjs +150 -0
- package/dist/math/trig/diagrams.d.mts +1 -0
- package/dist/math/trig/diagrams.mjs +321 -0
- package/dist/math/trig/index.d.mts +3 -0
- package/dist/math/trig/preset.d.mts +25 -0
- package/dist/math/trig/preset.mjs +260 -0
- package/dist/math/trig/rules.d.mts +6 -0
- package/dist/math/trig/rules.mjs +159 -0
- package/dist/math/trig-explorer.mjs +4 -4
- package/dist/ml/boundary/preset.mjs +8 -3
- package/dist/ml/classifier/preset.mjs +31 -6
- package/dist/ml/kmeans/preset.mjs +4 -4
- package/dist/ml/knn/preset.mjs +47 -12
- package/dist/ml/regression/preset.mjs +36 -7
- package/dist/physics/atwood/preset.mjs +4 -4
- package/dist/physics/bullet-walls/preset.d.mts +1 -1
- package/dist/physics/bullet-walls/preset.mjs +7 -7
- package/dist/physics/carnot/preset.mjs +6 -6
- package/dist/physics/circular-motion/preset.mjs +36 -5
- package/dist/physics/collision-track/preset.mjs +35 -5
- package/dist/physics/efficiency/preset.d.mts +2 -2
- package/dist/physics/efficiency/preset.mjs +5 -5
- package/dist/physics/electric-field/preset.mjs +32 -23
- package/dist/physics/electric-flux/index.d.mts +1 -0
- package/dist/physics/electric-flux/preset.d.mts +29 -0
- package/dist/physics/electric-flux/preset.mjs +264 -0
- package/dist/physics/energy-skate/preset.mjs +5 -5
- package/dist/physics/entropy/preset.mjs +7 -7
- package/dist/physics/expansion/preset.mjs +13 -13
- package/dist/physics/exponential/asset.mjs +1 -1
- package/dist/physics/exponential/preset.mjs +4 -4
- package/dist/physics/gas-process/preset.mjs +3 -3
- package/dist/physics/gauss-law/index.d.mts +1 -0
- package/dist/physics/gauss-law/preset.d.mts +20 -0
- package/dist/physics/gauss-law/preset.mjs +286 -0
- package/dist/physics/gravitation/preset.mjs +7 -7
- package/dist/physics/gravity-drop.mjs +4 -4
- package/dist/physics/heat-transfer/preset.d.mts +1 -1
- package/dist/physics/heat-transfer/preset.mjs +10 -10
- package/dist/physics/impulse/preset.mjs +5 -5
- package/dist/physics/index.d.mts +4 -1
- package/dist/physics/index.mjs +4 -1
- package/dist/physics/kepler/preset.mjs +4 -4
- package/dist/physics/lever/preset.mjs +3 -3
- package/dist/physics/lorentz/preset.mjs +11 -11
- package/dist/physics/magnetism/preset.mjs +3 -3
- package/dist/physics/optics/preset.mjs +2 -2
- package/dist/physics/orbit-lab.mjs +5 -5
- package/dist/physics/projectile-lab.mjs +4 -4
- package/dist/physics/rain-relative/preset.mjs +5 -5
- package/dist/physics/ramp-forces/preset.mjs +5 -5
- package/dist/physics/river-boat.mjs +6 -6
- package/dist/physics/shm/preset.mjs +9 -9
- package/dist/physics/stopping-distance/preset.mjs +3 -3
- package/dist/physics/temperature-scales/preset.mjs +105 -116
- package/dist/physics/terminal-velocity/preset.mjs +5 -5
- package/dist/physics/thermal/preset.mjs +5 -5
- package/dist/physics/vector-board/preset.mjs +7 -6
- package/dist/physics/vector-scene.mjs +2 -2
- package/dist/physics/vector-types/preset.mjs +37 -3
- package/dist/physics/water-density/preset.mjs +12 -12
- package/dist/physics/waves/doppler.mjs +2 -2
- package/dist/physics/waves/preset.mjs +4 -4
- package/dist/physics/waves/ripple.mjs +6 -6
- package/dist/physics/waves/string.mjs +5 -5
- package/dist/physics/work-energy/preset.mjs +4 -4
- package/dist/physics/work-potential/index.d.mts +1 -0
- package/dist/physics/work-potential/preset.d.mts +20 -0
- package/dist/physics/work-potential/preset.mjs +276 -0
- package/dist/schemas/index.d.mts +6 -6
- package/dist/schemas/index.mjs +3 -3
- package/dist/statistics/center-spread/preset.mjs +3 -3
- package/dist/statistics/core/descriptive.d.mts +2 -2
- package/dist/statistics/core/descriptive.mjs +2 -2
- package/dist/statistics/core/normal.d.mts +3 -3
- package/dist/statistics/core/normal.mjs +3 -3
- package/dist/statistics/core/sequences.d.mts +1 -1
- package/dist/statistics/galton/preset.mjs +2 -2
- package/dist/statistics/histogram/preset.mjs +6 -6
- package/dist/statistics/normal/preset.mjs +2 -2
- package/dist/statistics/sampling/preset.mjs +4 -4
- package/dist/statistics/sequence/preset.mjs +58 -15
- package/dist/statistics/z-table/preset.mjs +17 -4
- package/package.json +11 -3
- package/styles.css +4 -1
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
//#region src/biology/sequence/core.d.ts
|
|
2
2
|
/**
|
|
3
|
-
* Molecular-sequence core
|
|
3
|
+
* Molecular-sequence core, the base-pairing rules that drive SequenceLab. One
|
|
4
4
|
* tool covers three topics by swapping the rule:
|
|
5
|
-
* • replication
|
|
6
|
-
* • transcription
|
|
7
|
-
* • translation
|
|
5
|
+
* • replication , DNA template → new DNA strand (A–T, G–C)
|
|
6
|
+
* • transcription, DNA template → mRNA (A–U, T–A, G–C, C–G)
|
|
7
|
+
* • translation , mRNA codons → amino acids (the genetic code)
|
|
8
8
|
*
|
|
9
9
|
* Pure data + a builder; the UI lives in the preset. The "unit" is a base for
|
|
10
10
|
* replication/transcription and a 3-letter codon for translation, so the same
|
|
@@ -19,7 +19,7 @@ declare const DNA_COMPLEMENT: Record<string, string>;
|
|
|
19
19
|
declare const TRANSCRIBE: Record<string, string>;
|
|
20
20
|
/** classic CPK-ish base colours, tokenized. */
|
|
21
21
|
declare const BASE_COLOR: Record<string, string>;
|
|
22
|
-
/** standard genetic code
|
|
22
|
+
/** standard genetic code, mRNA codon → amino acid (3-letter), Stop for terminators. */
|
|
23
23
|
declare const CODON_TABLE: Record<string, string>;
|
|
24
24
|
interface SequenceModel {
|
|
25
25
|
kind: SequenceKind;
|
|
@@ -28,7 +28,7 @@ interface SequenceModel {
|
|
|
28
28
|
options: string[];
|
|
29
29
|
topLabel: string;
|
|
30
30
|
bottomLabel: string;
|
|
31
|
-
/** true when the partner is itself a base (replication/transcription)
|
|
31
|
+
/** true when the partner is itself a base (replication/transcription), colour it. */
|
|
32
32
|
partnerIsBase: boolean;
|
|
33
33
|
}
|
|
34
34
|
declare function buildSequenceModel(kind: SequenceKind, template: string[]): SequenceModel;
|
|
@@ -33,7 +33,7 @@ const BASE_COLOR = {
|
|
|
33
33
|
G: "var(--stage-accent-2)",
|
|
34
34
|
C: "var(--stage-accent)"
|
|
35
35
|
};
|
|
36
|
-
/** standard genetic code
|
|
36
|
+
/** standard genetic code, mRNA codon → amino acid (3-letter), Stop for terminators. */
|
|
37
37
|
const CODON_TABLE = {
|
|
38
38
|
UUU: "Phe",
|
|
39
39
|
UUC: "Phe",
|
|
@@ -9,9 +9,9 @@ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
|
9
9
|
|
|
10
10
|
//#region src/biology/sequence/preset.tsx
|
|
11
11
|
/**
|
|
12
|
-
* SequenceLab
|
|
12
|
+
* SequenceLab, ONE base-pairing tool for DNA replication, transcription and
|
|
13
13
|
* translation. The template strand is given; the learner BUILDS the partner strand
|
|
14
|
-
* by pairing each unit (base or codon)
|
|
14
|
+
* by pairing each unit (base or codon), that manipulation is the whole point, so
|
|
15
15
|
* it clears the "interactive only when it teaches" bar. Pick a base/amino acid from
|
|
16
16
|
* the palette, tap the slot under its template unit; correct locks green, wrong
|
|
17
17
|
* flags red. Replication shows the semiconservative idea: the old strand stays, you
|
|
@@ -25,9 +25,9 @@ const hash = (s) => {
|
|
|
25
25
|
return h >>> 0;
|
|
26
26
|
};
|
|
27
27
|
const DEFAULT_TITLE = {
|
|
28
|
-
replication: "DNA replication
|
|
29
|
-
transcription: "Transcription
|
|
30
|
-
translation: "Translation
|
|
28
|
+
replication: "DNA replication, build the new strand",
|
|
29
|
+
transcription: "Transcription, read DNA into mRNA",
|
|
30
|
+
translation: "Translation, read codons into protein"
|
|
31
31
|
};
|
|
32
32
|
const DEFAULT_PROMPT = {
|
|
33
33
|
replication: "Each base pairs A–T and G–C. The old strand stays; you build its complement.",
|
|
@@ -205,7 +205,7 @@ function SequenceLab({ kind = "replication", template, title, prompt, objectives
|
|
|
205
205
|
/* @__PURE__ */ jsx("b", { children: "old" }),
|
|
206
206
|
" strand + one ",
|
|
207
207
|
/* @__PURE__ */ jsx("b", { children: "new" }),
|
|
208
|
-
" strand
|
|
208
|
+
" strand, that’s ",
|
|
209
209
|
/* @__PURE__ */ jsx("b", { children: "semiconservative" }),
|
|
210
210
|
" replication."
|
|
211
211
|
]
|
|
@@ -5,7 +5,7 @@ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
|
5
5
|
|
|
6
6
|
//#region src/blocks/authoring.tsx
|
|
7
7
|
/**
|
|
8
|
-
* @classytic/labs/blocks
|
|
8
|
+
* @classytic/labs/blocks, editor UI kit.
|
|
9
9
|
*
|
|
10
10
|
* The creator-facing authoring controls shared by every block's editing panel:
|
|
11
11
|
* a settings panel, caret-stable text/number inputs, chips, a comma↔array tags
|
|
@@ -191,7 +191,7 @@ function JsonArea({ value, onChange, rows = 6 }) {
|
|
|
191
191
|
className: "w-full rounded border border-border bg-background px-2 py-1 font-mono text-[11px] leading-snug"
|
|
192
192
|
}), bad ? /* @__PURE__ */ jsx("span", {
|
|
193
193
|
className: "text-[11px] text-destructive",
|
|
194
|
-
children: "invalid JSON
|
|
194
|
+
children: "invalid JSON, last valid kept"
|
|
195
195
|
}) : null]
|
|
196
196
|
});
|
|
197
197
|
}
|
|
@@ -492,7 +492,7 @@ function IconSwatch({ v, label }) {
|
|
|
492
492
|
children: v
|
|
493
493
|
});
|
|
494
494
|
}
|
|
495
|
-
/** A searchable, categorised icon picker
|
|
495
|
+
/** A searchable, categorised icon picker, teachers click an icon (or a scene
|
|
496
496
|
* backdrop), never type emoji. Falls back to a paste-any-emoji field. */
|
|
497
497
|
function IconPicker({ value, onChange, placeholder = "pick" }) {
|
|
498
498
|
const [open, setOpen] = useState(false);
|
|
@@ -582,7 +582,7 @@ function IconPicker({ value, onChange, placeholder = "pick" }) {
|
|
|
582
582
|
}, it.v)), shown.length === 0 && /* @__PURE__ */ jsx("span", {
|
|
583
583
|
className: "text-[11px] text-muted-foreground",
|
|
584
584
|
style: { gridColumn: "1 / -1" },
|
|
585
|
-
children: "no match
|
|
585
|
+
children: "no match, paste any emoji below"
|
|
586
586
|
})]
|
|
587
587
|
}),
|
|
588
588
|
/* @__PURE__ */ jsx("input", {
|
|
@@ -595,7 +595,7 @@ function IconPicker({ value, onChange, placeholder = "pick" }) {
|
|
|
595
595
|
})] })]
|
|
596
596
|
});
|
|
597
597
|
}
|
|
598
|
-
/** Edit an array of records as add/remove/reorder rows of typed fields
|
|
598
|
+
/** Edit an array of records as add/remove/reorder rows of typed fields, the
|
|
599
599
|
* creator-facing alternative to hand-writing JSON. */
|
|
600
600
|
function RowsEditor({ rows, onChange, columns, newRow, addLabel = "row" }) {
|
|
601
601
|
const list = Array.isArray(rows) ? rows : [];
|
|
@@ -76,9 +76,9 @@ declare const GeneticCrossBlock: import("@classytic/cms-ui/contract").CmsBlock<z
|
|
|
76
76
|
}, z.core.$strip>>;
|
|
77
77
|
declare const SequenceBlock: import("@classytic/cms-ui/contract").CmsBlock<z.ZodObject<{
|
|
78
78
|
kind: z.ZodDefault<z.ZodEnum<{
|
|
79
|
+
translation: "translation";
|
|
79
80
|
replication: "replication";
|
|
80
81
|
transcription: "transcription";
|
|
81
|
-
translation: "translation";
|
|
82
82
|
}>>;
|
|
83
83
|
template: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
84
84
|
title: z.ZodOptional<z.ZodString>;
|
|
@@ -162,9 +162,9 @@ declare const biologyBlocks: readonly [import("@classytic/cms-ui/contract").CmsB
|
|
|
162
162
|
prompt: z.ZodOptional<z.ZodString>;
|
|
163
163
|
}, z.core.$strip>>, import("@classytic/cms-ui/contract").CmsBlock<z.ZodObject<{
|
|
164
164
|
kind: z.ZodDefault<z.ZodEnum<{
|
|
165
|
+
translation: "translation";
|
|
165
166
|
replication: "replication";
|
|
166
167
|
transcription: "transcription";
|
|
167
|
-
translation: "translation";
|
|
168
168
|
}>>;
|
|
169
169
|
template: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
170
170
|
title: z.ZodOptional<z.ZodString>;
|
package/dist/blocks/biology.mjs
CHANGED
|
@@ -15,7 +15,7 @@ import { defineBlock } from "@classytic/cms-ui/contract";
|
|
|
15
15
|
|
|
16
16
|
//#region src/blocks/biology.tsx
|
|
17
17
|
/**
|
|
18
|
-
* @classytic/labs/blocks
|
|
18
|
+
* @classytic/labs/blocks, biology lab block specs.
|
|
19
19
|
*
|
|
20
20
|
* `defineBlock` editor adapters for the biology labs. One domain per file;
|
|
21
21
|
* assembled in `./index.ts` and exported at `@classytic/labs/blocks/biology`.
|
|
@@ -25,7 +25,7 @@ const EnzymeRateBlock = defineBlock({
|
|
|
25
25
|
tag: "EnzymeRate",
|
|
26
26
|
void: true,
|
|
27
27
|
label: "Enzyme rate (optimum & denaturation)",
|
|
28
|
-
description: "Drag temperature (or pH); the rate climbs to an optimum then crashes as the lock-and-key active site is mangled
|
|
28
|
+
description: "Drag temperature (or pH); the rate climbs to an optimum then crashes as the lock-and-key active site is mangled, irreversibly for temperature (cooling won’t fix it), reversibly for pH. The bell is built from plotted points.",
|
|
29
29
|
category: "interactive",
|
|
30
30
|
schema: z.object({
|
|
31
31
|
factor: z.enum(["temperature", "pH"]).default("temperature"),
|
|
@@ -87,7 +87,7 @@ const PhotosynthesisFactorsBlock = defineBlock({
|
|
|
87
87
|
key: "photosynthesis-factors",
|
|
88
88
|
tag: "PhotosynthesisFactors",
|
|
89
89
|
void: true,
|
|
90
|
-
label: "Photosynthesis
|
|
90
|
+
label: "Photosynthesis: limiting factors",
|
|
91
91
|
description: "Sliders for light, CO₂ and temperature; the rate climbs then plateaus at the factor in shortest supply (raise it → higher plateau), while temperature gives a peak (denaturation). Freeze curves to compare.",
|
|
92
92
|
category: "interactive",
|
|
93
93
|
schema: z.object({
|
|
@@ -227,7 +227,7 @@ const GeneticCrossBlock = defineBlock({
|
|
|
227
227
|
tag: "GeneticCross",
|
|
228
228
|
void: true,
|
|
229
229
|
label: "Genetic cross (dominance / codominance / blood groups)",
|
|
230
|
-
description: "The general cross tool: pick a pattern
|
|
230
|
+
description: "The general cross tool: pick a pattern, simple dominance, ABO blood groups (multiple alleles + codominance → AB), or incomplete dominance (red × white → pink), or author your own allele model. Gametes drop onto the 2×2 grid; genotype + phenotype ratios read off as tally bars. Predict-before-reveal.",
|
|
231
231
|
category: "interactive",
|
|
232
232
|
schema: z.object({
|
|
233
233
|
preset: z.enum([
|
|
@@ -324,7 +324,7 @@ const SequenceBlock = defineBlock({
|
|
|
324
324
|
tag: "Sequence",
|
|
325
325
|
void: true,
|
|
326
326
|
label: "DNA/RNA sequence (replication / transcription / translation)",
|
|
327
|
-
description: "A base-pairing builder: the template strand is given and the learner builds the partner by pairing each unit. Pick the process
|
|
327
|
+
description: "A base-pairing builder: the template strand is given and the learner builds the partner by pairing each unit. Pick the process, replication (A–T, G–C, semiconservative), transcription (T→U into mRNA), or translation (codons → amino acids via the genetic code), and the template.",
|
|
328
328
|
category: "interactive",
|
|
329
329
|
schema: z.object({
|
|
330
330
|
kind: z.enum([
|
package/dist/blocks/chem.d.mts
CHANGED
|
@@ -23,9 +23,9 @@ declare const KineticsBlock: LabBlock;
|
|
|
23
23
|
declare const TitrationBlock: LabBlock;
|
|
24
24
|
declare const GasBoxBlock: import("@classytic/cms-ui/contract").CmsBlock<z.ZodObject<{
|
|
25
25
|
holdConstant: z.ZodDefault<z.ZodEnum<{
|
|
26
|
-
temperature: "temperature";
|
|
27
26
|
none: "none";
|
|
28
27
|
volume: "volume";
|
|
28
|
+
temperature: "temperature";
|
|
29
29
|
pressure: "pressure";
|
|
30
30
|
}>>;
|
|
31
31
|
particleCount: z.ZodDefault<z.ZodNumber>;
|
|
@@ -70,9 +70,9 @@ declare const BatteryBlock: import("@classytic/cms-ui/contract").CmsBlock<z.ZodO
|
|
|
70
70
|
}, z.core.$strip>>;
|
|
71
71
|
declare const chemBlocks: readonly [import("@classytic/cms-ui/contract").CmsBlock<z.ZodObject<{
|
|
72
72
|
holdConstant: z.ZodDefault<z.ZodEnum<{
|
|
73
|
-
temperature: "temperature";
|
|
74
73
|
none: "none";
|
|
75
74
|
volume: "volume";
|
|
75
|
+
temperature: "temperature";
|
|
76
76
|
pressure: "pressure";
|
|
77
77
|
}>>;
|
|
78
78
|
particleCount: z.ZodDefault<z.ZodNumber>;
|
package/dist/blocks/chem.mjs
CHANGED
|
@@ -19,7 +19,7 @@ import { defineBlock } from "@classytic/cms-ui/contract";
|
|
|
19
19
|
|
|
20
20
|
//#region src/blocks/chem.tsx
|
|
21
21
|
/**
|
|
22
|
-
* @classytic/labs/blocks
|
|
22
|
+
* @classytic/labs/blocks, chemistry lab block specs.
|
|
23
23
|
*
|
|
24
24
|
* `defineBlock` editor adapters for the chemistry labs (one domain per file; the
|
|
25
25
|
* registry is assembled in `./index.ts`). Each spec pairs a real zod schema with
|
|
@@ -29,8 +29,8 @@ import { defineBlock } from "@classytic/cms-ui/contract";
|
|
|
29
29
|
*/
|
|
30
30
|
const LeChatelierBlock = labBlock({
|
|
31
31
|
key: "le-chatelier",
|
|
32
|
-
label: "Le Chatelier
|
|
33
|
-
description: "A reversible reaction A ⇌ νB at equilibrium (Q = K). Stress it
|
|
32
|
+
label: "Le Chatelier: equilibrium shifts",
|
|
33
|
+
description: "A reversible reaction A ⇌ νB at equilibrium (Q = K). Stress it, add a species, compress, heat, and it shifts to oppose the change (shift direction emerges from the core, never hardcoded). AUTHOR YOUR OWN reaction: set the species names, product coefficient, colours, K, and whether the forward reaction is endothermic. Defaults to N₂O₄ ⇌ 2 NO₂ (colourless ⇌ brown).",
|
|
34
34
|
schema: z.object({
|
|
35
35
|
reactantName: z.string().optional().describe("left species, e.g. N₂O₄"),
|
|
36
36
|
productName: z.string().optional().describe("right species, e.g. NO₂"),
|
|
@@ -46,7 +46,7 @@ const LeChatelierBlock = labBlock({
|
|
|
46
46
|
const ElectrochemBlock = labBlock({
|
|
47
47
|
key: "electrochem",
|
|
48
48
|
label: "Galvanic cell (Nernst EMF)",
|
|
49
|
-
description: "A voltaic cell with two metal half-cells, a salt bridge, and a live voltmeter. The lower-E° metal is the anode (−); electrons flow to the cathode (+). The meter reads the Nernst EMF E = E°cell − (RT/nF)·ln Q, so changing an ion concentration moves the voltage
|
|
49
|
+
description: "A voltaic cell with two metal half-cells, a salt bridge, and a live voltmeter. The lower-E° metal is the anode (−); electrons flow to the cathode (+). The meter reads the Nernst EMF E = E°cell − (RT/nF)·ln Q, so changing an ion concentration moves the voltage, or pick the same metal both sides for a concentration cell. Author the two electrodes + concentrations.",
|
|
50
50
|
schema: z.object({
|
|
51
51
|
metalA: z.enum([
|
|
52
52
|
"Mg",
|
|
@@ -77,7 +77,7 @@ const ElectrochemBlock = labBlock({
|
|
|
77
77
|
const PeriodicTrendsBlock = labBlock({
|
|
78
78
|
key: "periodic-trends",
|
|
79
79
|
label: "Periodic trends (heatmap)",
|
|
80
|
-
description: "The periodic table (H–Xe) coloured by a property
|
|
80
|
+
description: "The periodic table (H–Xe) coloured by a property, atomic radius, ionisation energy or electronegativity, so the trend reads as a gradient: radius grows down/left, ionisation energy & electronegativity grow up/right. Hover an element for its value. Pick the default property and a highlighted element; ships a predict-first question.",
|
|
81
81
|
schema: z.object({
|
|
82
82
|
property: z.enum([
|
|
83
83
|
"radius",
|
|
@@ -108,7 +108,7 @@ const StoichiometryBlock = labBlock({
|
|
|
108
108
|
const KineticsBlock = labBlock({
|
|
109
109
|
key: "kinetics",
|
|
110
110
|
label: "Reaction kinetics (collisions + Arrhenius)",
|
|
111
|
-
description: "A vessel of molecules where only high-energy collisions (≥ Eₐ) succeed and convert A→B, beside the Maxwell–Boltzmann energy spread (shaded reactive tail) and a live A/B bar. Heat it or add a catalyst (lowers Eₐ) and watch the rate jump
|
|
111
|
+
description: "A vessel of molecules where only high-energy collisions (≥ Eₐ) succeed and convert A→B, beside the Maxwell–Boltzmann energy spread (shaded reactive tail) and a live A/B bar. Heat it or add a catalyst (lowers Eₐ) and watch the rate jump, backed by k = A·e^(−Eₐ/RT). Author the activation energy, rate, order, molecule count and temperature; ships a predict-first question.",
|
|
112
112
|
schema: z.object({
|
|
113
113
|
EaKJ: z.number().optional().describe("activation energy, kJ/mol"),
|
|
114
114
|
kRef: z.number().optional().describe("rate constant at 300 K (sets the pace)"),
|
|
@@ -142,7 +142,7 @@ const GasBoxBlock = defineBlock({
|
|
|
142
142
|
tag: "GasBox",
|
|
143
143
|
void: true,
|
|
144
144
|
label: "Gas box (PV = nRT, kinetic theory)",
|
|
145
|
-
description: "Hundreds of molecules bounce in a box; drag the piston (V), heat it (T), add molecules (n)
|
|
145
|
+
description: "Hundreds of molecules bounce in a box; drag the piston (V), heat it (T), add molecules (n), pressure is MEASURED from wall collisions, so PV=nRT emerges. Lock T/V/P for Boyle/Gay-Lussac/Charles.",
|
|
146
146
|
category: "interactive",
|
|
147
147
|
schema: z.object({
|
|
148
148
|
holdConstant: z.enum([
|
|
@@ -200,7 +200,7 @@ const SolutionBoxBlock = defineBlock({
|
|
|
200
200
|
tag: "SolutionBox",
|
|
201
201
|
void: true,
|
|
202
202
|
label: "Solution box (molarity = n/V)",
|
|
203
|
-
description: "Solute as dots in a box: add solute (more dots) or water (same dots, bigger box)
|
|
203
|
+
description: "Solute as dots in a box: add solute (more dots) or water (same dots, bigger box), M=n/V shows as a number AND colour intensity. Draggable probe proves molarity is a local density.",
|
|
204
204
|
category: "interactive",
|
|
205
205
|
schema: z.object({
|
|
206
206
|
moles: z.number().default(.5),
|
|
@@ -249,7 +249,7 @@ const DilutionBlock = defineBlock({
|
|
|
249
249
|
tag: "Dilution",
|
|
250
250
|
void: true,
|
|
251
251
|
label: "Dilution (C₁V₁ = C₂V₂)",
|
|
252
|
-
description: "Two beakers show the SAME solute dots
|
|
252
|
+
description: "Two beakers show the SAME solute dots, concentrated in the aliquot, spread in the final volume, so C₁V₁=C₂V₂ is seen as conservation of moles: same dots, bigger box, lower concentration.",
|
|
253
253
|
category: "interactive",
|
|
254
254
|
schema: z.object({
|
|
255
255
|
stockConcentration: z.number().default(2),
|
|
@@ -297,7 +297,7 @@ const BohrAtomBlock = defineBlock({
|
|
|
297
297
|
key: "bohr-atom",
|
|
298
298
|
void: true,
|
|
299
299
|
label: "Bohr atom",
|
|
300
|
-
description: "Animated shell model
|
|
300
|
+
description: "Animated shell model, drag Z to walk the first 20 elements; shells fill 2, 8, 8.",
|
|
301
301
|
category: "interactive",
|
|
302
302
|
schema: z.object({
|
|
303
303
|
protons: z.number().optional(),
|
|
@@ -331,7 +331,7 @@ const ReactionProfileBlock = defineBlock({
|
|
|
331
331
|
key: "reaction-profile",
|
|
332
332
|
void: true,
|
|
333
333
|
label: "Reaction profile",
|
|
334
|
-
description: "Energy diagram
|
|
334
|
+
description: "Energy diagram, activation energy, ΔH (exo/endothermic), catalyst toggle.",
|
|
335
335
|
category: "interactive",
|
|
336
336
|
schema: z.object({
|
|
337
337
|
deltaH: z.number().optional(),
|
|
@@ -381,7 +381,7 @@ const ReactionLabBlock = defineBlock({
|
|
|
381
381
|
key: "reaction-lab",
|
|
382
382
|
void: true,
|
|
383
383
|
label: "Reaction lab",
|
|
384
|
-
description: "Atoms collide and bond
|
|
384
|
+
description: "Atoms collide and bond, A + B → A–B, with a temperature/kinetics knob.",
|
|
385
385
|
category: "interactive",
|
|
386
386
|
schema: z.object({
|
|
387
387
|
a: z.string().optional(),
|
|
@@ -422,7 +422,7 @@ const BatteryBlock = defineBlock({
|
|
|
422
422
|
key: "battery",
|
|
423
423
|
void: true,
|
|
424
424
|
label: "Battery (galvanic cell)",
|
|
425
|
-
description: "Electrons flow from anode to cathode
|
|
425
|
+
description: "Electrons flow from anode to cathode, half-reactions + EMF.",
|
|
426
426
|
category: "interactive",
|
|
427
427
|
schema: z.object({
|
|
428
428
|
emf: z.number().optional(),
|