@torpor/view 0.0.14 → 0.1.1
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/CHANGELOG.md +24 -0
- package/README.md +5 -5
- package/dist/compile.cjs +77 -32
- package/dist/compile.cjs.map +1 -1
- package/dist/compile.js +77 -32
- package/dist/compile.js.map +1 -1
- package/dist/index.cjs +31 -15
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -4
- package/dist/index.d.ts +2 -4
- package/dist/index.js +31 -14
- package/dist/index.js.map +1 -1
- package/dist/metafile-cjs.json +1 -1
- package/dist/metafile-esm.json +1 -1
- package/package.json +4 -4
- package/scripts/copyToRepl.ts +1 -1
- package/src/compile/build/client/buildCode.ts +2 -11
- package/src/compile/build/client/buildComponentNode.ts +21 -5
- package/src/compile/build/client/buildElementNode.ts +27 -10
- package/src/compile/build/client/buildFragment.ts +37 -1
- package/src/compile/build/client/buildHtmlNode.ts +1 -0
- package/src/compile/build/client/buildSlotNode.ts +4 -1
- package/src/compile/build/server/buildServerComponentNode.ts +4 -1
- package/src/compile/build/server/buildServerElementNode.ts +5 -2
- package/src/compile/build/server/buildServerSlotNode.ts +4 -1
- package/src/compile/parse/parseCode.ts +20 -12
- package/src/index.ts +0 -2
- package/src/motion/animate.ts +10 -6
- package/src/render/$unwrap.ts +1 -1
- package/src/render/addFragment.ts +14 -4
- package/src/render/hydrate.ts +7 -0
- package/src/render/nodeNext.ts +14 -7
- package/src/render/runControlBranch.ts +11 -1
- package/src/render/runList.ts +8 -2
- package/test/attributes/attributes.test.ts +3 -0
- package/test/attributes/components/Attributes.torp +6 -1
- package/test/attributes/components/output/Attributes-client.ts +6 -2
- package/test/attributes/components/output/Attributes-server.ts +2 -1
- package/test/attributes/components/temp/{Attributes-client-c4812cb9307eac6ff44f90f3358a1811b52c7390.ts → Attributes-client-7b8f7b9996208e8d2d0a12d4f4a40a73df63d9d8.ts} +6 -2
- package/test/attributes/components/temp/{Attributes-server-a7ebed503f2169f7c900d4613531082f1023b086.ts → Attributes-server-a1289434a5a801be1d63bfc85b621579e06452f0.ts} +2 -1
- package/test/await/await.test.ts +2 -4
- package/test/await/components/output/Await-client.ts +4 -4
- package/test/await/components/temp/{Await-client-6ce3ac610ce79ae3b474c81964b715e6f3d966da.ts → Await-client-a7bf000bf2b59a3d5251a0fa18ec79890a52a547.ts} +4 -4
- package/test/bench/bench.bench.ts +5 -7
- package/test/bench/components/output/Bench-client.ts +208 -0
- package/test/bench/components/output/Bench-server.ts +130 -0
- package/test/bench/components/temp/{Bench-client-5fee290225ae4771aa847360006123671e8f17f1.ts → Bench-client-fca94b485c6263778751927240ab3ca4048d7a10.ts} +10 -10
- package/test/bind/bind.test.ts +3 -5
- package/test/bind/component.test.ts +45 -0
- package/test/bind/components/BindComponent.torp +29 -0
- package/test/bind/components/BindText.torp +2 -2
- package/test/bind/components/output/BindComponent-client.ts +87 -0
- package/test/bind/components/output/BindComponent-server.ts +52 -0
- package/test/bind/components/output/BindText-client.ts +3 -3
- package/test/bind/components/temp/BindComponent-client-a645474748485a878871c062ad69e6bcf35e6550.ts +87 -0
- package/test/bind/components/temp/BindComponent-server-c557e7aa944517ab87415b8bb35b41b0034254e7.ts +52 -0
- package/test/bind/components/temp/{BindText-client-9e2f542e13bcbf9a44eab2c5a79d67ddb128f928.ts → BindText-client-d5f7d721df55020ef337f660e5d278eb80fcc330.ts} +3 -3
- package/test/build-server/build-server-element-node.test.ts +1 -1
- package/test/buildOutputFiles.ts +6 -3
- package/test/child-component/components/output/ParentChild-client.ts +3 -2
- package/test/child-component/components/output/ParentChild-server.ts +1 -0
- package/test/child-component/components/temp/{ParentChild-client-8f00a3a31a7f666990765fc4755b62a39c855226.ts → ParentChild-client-eaefb0cbfd251badab3c57ae2037d973f785a1b8.ts} +3 -2
- package/test/child-component/components/temp/{ParentChild-server-9c791bdfa521c3f6549857a34a6cd414fa3c9e80.ts → ParentChild-server-8f2fc556f87867e6e3393e2e9e6d696cda107b69.ts} +1 -0
- package/test/class/components/output/Class-client.ts +7 -6
- package/test/class/components/output/Class-server.ts +1 -0
- package/test/class/components/temp/{Class-client-8bf02b6a0c85674d341617dfb755b285b1af89cf.ts → Class-client-dc885e1e391f38973bd9ea25b7475b07f7c23960.ts} +7 -6
- package/test/class/components/temp/{Class-server-dd71b6ec62f40231917a912819520fc614f017ae.ts → Class-server-d1a2463ba432e10c6f68bd59d1d31949c5a2044f.ts} +1 -0
- package/test/component/components/output/Component-client.ts +3 -2
- package/test/component/components/output/Component-server.ts +1 -1
- package/test/component/components/output/Header-client.ts +2 -1
- package/test/component/components/output/Header-server.ts +1 -0
- package/test/component/components/temp/{Component-client-32cd481f03e25d10b8e93947a2ff8773135b4975.ts → Component-client-a2fb6f30fc340bac909b64cb4f5ac68cde376de3.ts} +3 -2
- package/test/component/components/temp/{Component-server-11542f55405218c0b471172cac1d6a1a4edb5c09.ts → Component-server-40be12cd528ccf768f1ad40ef2a435ad2b2a2d71.ts} +1 -1
- package/test/component/components/temp/{Header-client-ac151eea86e3f6b058fab101661e13ae73864968.ts → Header-client-75cb4aa868295ac168c16ba7b275fbb5ab9256f9.ts} +2 -1
- package/test/component/components/temp/{Header-server-4f10f2332f3ca7a097517cfb938ab1e6f31d68ac.ts → Header-server-f73307874bec34a95dcd152d7f83a3ad13a0f4ac.ts} +1 -0
- package/test/effects/components/output/For-client.ts +3 -2
- package/test/effects/components/output/For-server.ts +1 -0
- package/test/effects/components/output/If-client.ts +4 -3
- package/test/effects/components/output/If-server.ts +1 -0
- package/test/effects/components/output/NestedIf-client.ts +4 -3
- package/test/effects/components/output/NestedIf-server.ts +1 -0
- package/test/effects/components/temp/{For-client-887b1758cf5c80f64708a47369e0e6ce44ffa20f.ts → For-client-d8d4e4424ec3238fe9f79cc907d673612b63bcdf.ts} +3 -2
- package/test/effects/components/temp/{For-server-8e1c7393b102c870167dd086cbee45c47e614dfa.ts → For-server-1f853c161bea31a1a5b11b00d7a021b70c778066.ts} +1 -0
- package/test/effects/components/temp/{If-client-bfc548ef699b91f33e604f066211ce6269cc9506.ts → If-client-bb06988422395321bf298a75bf5563c6f750f776.ts} +4 -3
- package/test/effects/components/temp/{If-server-8c213b1a82cd0a5c2bccfeb90ba8bf01fa4672d2.ts → If-server-97e3cbe059306fc607985dcd1b187df3a278d979.ts} +1 -0
- package/test/effects/components/temp/{NestedIf-client-9e9155398f240345af392194063adc6e42dda80c.ts → NestedIf-client-dc880c1ec92e716ec730dfa0bac0e3d9265bdf27.ts} +4 -3
- package/test/effects/components/temp/{NestedIf-server-5f11d075c2ff224ee5feb7f61aa41aea8af44313.ts → NestedIf-server-9f199a33bae5d5fe34920d6a419937537a2b18dc.ts} +1 -0
- package/test/events/components/output/Increment-client.ts +2 -2
- package/test/events/components/temp/{Increment-client-35c275d15e94e4aa7625af12c45210521995ead5.ts → Increment-client-41bd7bc91aac8c7a9bf73527c8f7ba1794b09ab3.ts} +2 -2
- package/test/events/events.test.ts +2 -3
- package/test/for/components/ForEscape.torp +1 -1
- package/test/for/components/output/For-client.ts +1 -1
- package/test/for/components/output/ForEscape-client.ts +4 -4
- package/test/for/components/output/ForIn-client.ts +3 -2
- package/test/for/components/output/ForIn-server.ts +1 -0
- package/test/for/components/output/ForOf-client.ts +3 -2
- package/test/for/components/output/ForOf-server.ts +1 -0
- package/test/for/components/temp/{For-client-1f6e475347f0474375f12a7c24b0b293e3942aa7.ts → For-client-0be5994e98c07a3455cd8a18a2b1b8ef3605aba6.ts} +1 -1
- package/test/for/components/temp/{ForEscape-client-80d3078cf15001f2ab37b0ec63cfce7267a8a166.ts → ForEscape-client-a973a145e28b32ca55fe3dca53d885fcf5e11c37.ts} +4 -4
- package/test/for/components/temp/{ForIn-client-c8a1ec4473d05475e11928d06d081ab671fd9f28.ts → ForIn-client-5cc25a98e10826e8477fe6f931d5d2bbd0b13c9f.ts} +3 -2
- package/test/for/components/temp/{ForIn-server-d92cf8d3c3e300b562308607caca2c9cab3cb30b.ts → ForIn-server-d68e82c048f7e0f1525f74724b91e5cd01cdc6a6.ts} +1 -0
- package/test/for/components/temp/{ForOf-client-069881d4d9e52bc091e7213154924f3e1626174a.ts → ForOf-client-70b0d59ff72f1cffe2e0ac8523dd7ccdca4ffe39.ts} +3 -2
- package/test/for/components/temp/{ForOf-server-3bfbb33bd589890d272bbcbea53d9598f53bfd70.ts → ForOf-server-ac08d98dd249a3e64a366b8488450e6ce0d18def.ts} +1 -0
- package/test/for/for-escape.test.ts +2 -3
- package/test/function/components/output/Function-client.ts +1 -1
- package/test/function/components/temp/{Function-client-b8931e51769f3f1e84d1491c6474f8551acf9f8d.ts → Function-client-b3ff029a821d47e1a2249a52dfb681f4b2e96232.ts} +1 -1
- package/test/function/function.test.ts +1 -2
- package/test/html/components/output/Html-client.ts +3 -1
- package/test/html/components/output/Html-server.ts +1 -0
- package/test/html/components/temp/{Html-client-5fc745d9980a42a70dcb3473b0fd976e69882c9e.ts → Html-client-766ba4a63f28f929ca16cd7d1640fe92f9b30792.ts} +3 -1
- package/test/html/components/temp/{Html-server-437ea390e58947213ede74755a012cdacceeebe7.ts → Html-server-0a41da8b81bf833f331f3becdbac14be7ddc6c8c.ts} +1 -0
- package/test/if/components/output/IfAfterIf-client.ts +5 -4
- package/test/if/components/output/IfAfterIf-server.ts +1 -0
- package/test/if/components/output/IfElse-client.ts +4 -3
- package/test/if/components/output/IfElse-server.ts +1 -0
- package/test/if/components/output/IfElseIf-client.ts +5 -4
- package/test/if/components/output/IfElseIf-server.ts +1 -0
- package/test/if/components/output/IfNested-client.ts +5 -4
- package/test/if/components/output/IfNested-server.ts +1 -0
- package/test/if/components/temp/{IfAfterIf-client-a489daa5b961ed9da71418fdbb1665b6ba39f1b7.ts → IfAfterIf-client-49b6b8c42b0a351561f9f5f22c2ae2e844bf3b58.ts} +5 -4
- package/test/if/components/temp/{IfAfterIf-server-243736e666e7d77d3f8553a1682734555f5ffd22.ts → IfAfterIf-server-eb67cf1fcf6711882266219940a47bd4a66497f3.ts} +1 -0
- package/test/if/components/temp/{IfElse-client-4c71642f412d5dd2f45729eafb7e974781dbe011.ts → IfElse-client-e236d4a2e99262ff09675bc519c07e2826c0d70b.ts} +4 -3
- package/test/if/components/temp/{IfElse-server-64c055182b327504ee71d1f1d44cfccf48be350d.ts → IfElse-server-c077e0e30f4d2adec41ab779198362d21542d055.ts} +1 -0
- package/test/if/components/temp/{IfElseIf-client-98d50d6f40c2385c4ef4fc02329f9d2e182c76c4.ts → IfElseIf-client-b92106861f0c7ec3d09e3a42bb93d8f5bd4e3bdf.ts} +5 -4
- package/test/if/components/temp/{IfElseIf-server-79788b13af905175f50bfa8658f2ff2af73db232.ts → IfElseIf-server-67991eee3f56dc687cda600511c31396438e0a77.ts} +1 -0
- package/test/{build-server/components/temp/IfNested-client-979db97eea5b4595550b9b46f297f3fbc31796d2.ts → if/components/temp/IfNested-client-f563ac1b16a2280e457557281c4925ed447a9cd7.ts} +5 -4
- package/test/{build-server/components/temp/IfNested-server-3c4e4b6f2162c0906cef685830219b9ea9ee985c.ts → if/components/temp/IfNested-server-0a2a9643324ab73b02b310cad61ba87dab146ab2.ts} +1 -0
- package/test/mount/components/Mount.torp +1 -1
- package/test/mount/components/output/Mount-client.ts +0 -2
- package/test/mount/components/output/Mount-server.ts +1 -1
- package/test/mount/components/temp/{Mount-client-49d8d6475336b5749fe8a17be847fd2b6cda5ccc.ts → Mount-client-36dbc95a61345a1b7dcf07e6b0c998af2afca691.ts} +0 -2
- package/test/mount/components/temp/{Mount-server-e3d689cf52a4477da9aa00e2c7604110710db991.ts → Mount-server-8bef1924a731f3db63cb827be3938fec685e53af.ts} +1 -1
- package/test/on-mount/components/output/OnMount-client.ts +0 -2
- package/test/on-mount/components/temp/{OnMount-client-b2dfd41a0aaeafb3b7af14793a03e0fc3bc43aaa.ts → OnMount-client-21708a638d2939ee8b017f5dc819cee4748bde87.ts} +0 -2
- package/test/party/13-emit-to-parent.test.ts +2 -3
- package/test/party/16-context.test.ts +1 -2
- package/test/party/17-input-text.test.ts +2 -3
- package/test/party/18-input-checkbox.test.ts +1 -2
- package/test/party/19-input-radio.test.ts +2 -3
- package/test/party/20-input-select.test.ts +3 -4
- package/test/party/7-event-click.test.ts +1 -3
- package/test/party/9-conditional.test.ts +2 -4
- package/test/party/components/ColorSelect.torp +1 -1
- package/test/party/components/InputFocused.torp +1 -1
- package/test/party/components/InputHello.torp +1 -1
- package/test/party/components/IsAvailable.torp +1 -1
- package/test/party/components/PickPill.torp +2 -2
- package/test/party/components/output/AnswerButton-client.ts +3 -2
- package/test/party/components/output/AnswerButton-server.ts +1 -0
- package/test/party/components/output/AnswerButtonApp-client.ts +4 -4
- package/test/party/components/output/AnswerButtonApp-server.ts +1 -1
- package/test/party/components/output/ColorSelect-client.ts +1 -1
- package/test/party/components/output/Colors-client.ts +1 -1
- package/test/party/components/output/Counter-client.ts +1 -1
- package/test/party/components/output/FunnyButton-client.ts +1 -1
- package/test/party/components/output/FunnyButtonApp-client.ts +2 -2
- package/test/party/components/output/FunnyButtonApp-server.ts +1 -1
- package/test/party/components/output/InputFocused-client.ts +0 -2
- package/test/party/components/output/InputFocused-server.ts +1 -1
- package/test/party/components/output/InputHello-client.ts +1 -1
- package/test/party/components/output/IsAvailable-client.ts +1 -1
- package/test/party/components/output/PickPill-client.ts +2 -2
- package/test/party/components/output/TrafficLight-client.ts +6 -6
- package/test/party/components/output/UserProfile-client.ts +5 -4
- package/test/party/components/output/UserProfile-server.ts +1 -0
- package/test/party/components/output/UserProfileApp-client.ts +3 -2
- package/test/party/components/output/UserProfileApp-server.ts +1 -1
- package/test/party/components/output/UserProfileContext-client.ts +3 -3
- package/test/party/components/output/UserProfileContextApp-client.ts +2 -2
- package/test/party/components/output/UserProfileContextApp-server.ts +1 -1
- package/test/party/components/temp/{AnswerButton-client-243454cd7bf84c648f244b3587e60d01a0401039.ts → AnswerButton-client-c3dc7edbfff2db1ea111086002147d771ee12193.ts} +3 -2
- package/test/party/components/temp/{AnswerButton-server-938e46c1d2510ea37454854ef527e4aa64eb8e52.ts → AnswerButton-server-427442fa8cfc0a18817c2d37f9cb5cbcb3a88a05.ts} +1 -0
- package/test/party/components/temp/{AnswerButtonApp-client-34311c2e7412807867fb6267af31a341f092bf31.ts → AnswerButtonApp-client-3e0b63a6bbc1dee3e6cb715c0297cc2ce58d3e4e.ts} +4 -4
- package/test/party/components/temp/{AnswerButtonApp-server-3f5071775abea24ee8830830072c6fe465fc4e56.ts → AnswerButtonApp-server-bbc8bb739d2060ccda77ce406aa6b15d8f90b91c.ts} +1 -1
- package/test/party/components/temp/{ColorSelect-client-f9fb9fa09f4729da3226d5aaf30e84cd3cd705b5.ts → ColorSelect-client-5ffa6f9d77de967993088c9a01b9f976f3333176.ts} +1 -1
- package/test/party/components/temp/{Colors-client-f124162d1dd8f0c3d37bf96c8e5f18599ae3a682.ts → Colors-client-3dafffc5c2a72037f4419fc45d08963872a29958.ts} +1 -1
- package/test/party/components/temp/{Counter-client-c349710110b4afbf9593f20cfc40c162ed836079.ts → Counter-client-4d553521fcfc6c9a4e05dce89e70b2ecf8785c4e.ts} +1 -1
- package/test/party/components/temp/{FunnyButton-client-2e6bec8259065b5bc9ae16d1ca93dd1bd0c56b7c.ts → FunnyButton-client-45f2c5dd56f2cdb80102193a978df6b0cec822ab.ts} +1 -1
- package/test/party/components/temp/{FunnyButtonApp-client-4ed0ebf5be13ddb62d9942bac7f4b8a885ec6c50.ts → FunnyButtonApp-client-ac7101af922dc6ba472b75a428f340caca6be74a.ts} +2 -2
- package/test/party/components/temp/{FunnyButtonApp-server-9748c9096848e643c91237c46ea09d23f1b3fa7c.ts → FunnyButtonApp-server-f1a98a946e0bb9d1bb76b01e26d6ead8f55d32bb.ts} +1 -1
- package/test/party/components/temp/{InputFocused-client-a543f82c8db205fb3e33c62de699cff43c668a68.ts → InputFocused-client-11a9cb08909b26945bbc2451ab4c1dac09e6d113.ts} +0 -2
- package/test/party/components/temp/{InputFocused-server-222f2fa7029d1cd6941a3777293a9b2d37b7295e.ts → InputFocused-server-82be1a63c80d1dd3f06efaf0bef349d58cf1d9af.ts} +1 -1
- package/test/party/components/temp/{InputHello-client-9953499de5778bb1d8aac7691129210a6098db07.ts → InputHello-client-b0453caeae0d43dc1878039c6b49318d12624d48.ts} +1 -1
- package/test/party/components/temp/{IsAvailable-client-929ed6c872e72b6c5243b882c6a9a0d13f6a7c47.ts → IsAvailable-client-d789346a68b26fd3f5d9f7aebc4c7bd181c47cad.ts} +1 -1
- package/test/party/components/temp/{PickPill-client-f9a50a75ce63ec2ee3ac34e378e20602b93629f7.ts → PickPill-client-b47d371ae5f41d87c96b3cdeed0a8bc06fbfa9c7.ts} +2 -2
- package/test/party/components/temp/{TrafficLight-client-81dd9bd9f3332533e01f6c9b271c15e5f76e1fdb.ts → TrafficLight-client-549f9fe3418c113fb240cfa17e09c42e1e7f346a.ts} +6 -6
- package/test/party/components/temp/{UserProfile-client-938bcef20a2555de22aca939022a32742ac5e729.ts → UserProfile-client-2c13aac1ad915e51dc557f9af765669e636c0fea.ts} +5 -4
- package/test/party/components/temp/{UserProfile-server-9df5c59b8797fa67c479bc76450104d45e6076f9.ts → UserProfile-server-cc1162a4297f6163bfb86e7a8aeea08e8c0625c6.ts} +1 -0
- package/test/party/components/temp/{UserProfileApp-client-af27173415d65647cab0f30a9a4967cef0307e25.ts → UserProfileApp-client-2be7a11319cca4d7bfa0f3d2205c441d7e203780.ts} +3 -2
- package/test/party/components/temp/{UserProfileApp-server-6a7dbe68ee8041785cef50fb15a9e5ba475e120f.ts → UserProfileApp-server-ab9ff66f787f775aa8571314fee8bcbef85489ef.ts} +1 -1
- package/test/party/components/temp/{UserProfileContext-client-93211cdba795b8baf926f60f5b17da90701743b3.ts → UserProfileContext-client-2aa36f436a5f20614d77f48963ec5ca442eebd90.ts} +3 -3
- package/test/party/components/temp/{UserProfileContextApp-client-7ea7d90a35894408757aef3e935d3a8badf93aea.ts → UserProfileContextApp-client-5099052fdcd8fb4c368c45090390947424a4e9b0.ts} +2 -2
- package/test/party/components/temp/{UserProfileContextApp-server-90290c770529d7211eabf29e7d0fe868aa856b52.ts → UserProfileContextApp-server-6be8dab2ed4f8911f26bef137e7dea164f2b894d.ts} +1 -1
- package/test/props/components/Reactive.torp +18 -0
- package/test/props/components/output/Reactive-client.ts +70 -0
- package/test/props/components/output/Reactive-server.ts +40 -0
- package/test/props/components/temp/Reactive-client-e3e5f6ee2f22c46337c6ab1df2f241133c7e2646.ts +70 -0
- package/test/props/components/temp/Reactive-server-0914d91287a1bc6d32d7cc56d086624762dbfc04.ts +40 -0
- package/test/props/reactive.test.ts +40 -0
- package/test/replace/components/output/Replace-client.ts +3 -2
- package/test/replace/components/output/Replace-server.ts +1 -0
- package/test/replace/components/temp/{Replace-client-ea4ddc73c71181fb6ef3c6f5bf61b0b9e017f00a.ts → Replace-client-3fdab63871fa4bb792317caefd3539b1888325b1.ts} +3 -2
- package/test/replace/components/temp/{Replace-server-30eb1ad796516fa4d310798a9c8a6811ec13cbd9.ts → Replace-server-857aca7a58deffc3a1c95ab9d31628b4051ca203.ts} +1 -0
- package/test/slots/components/output/Article-client.ts +2 -2
- package/test/slots/components/output/Basic-client.ts +1 -1
- package/test/slots/components/output/Basic-server.ts +1 -1
- package/test/slots/components/output/Let-client.ts +4 -3
- package/test/slots/components/output/Let-server.ts +2 -1
- package/test/slots/components/output/List-client.ts +1 -1
- package/test/slots/components/output/List-server.ts +1 -0
- package/test/slots/components/output/Named-client.ts +2 -2
- package/test/slots/components/output/Named-server.ts +1 -1
- package/test/slots/components/output/Unused-client.ts +1 -1
- package/test/slots/components/output/Unused-server.ts +1 -1
- package/test/slots/components/temp/{Article-client-741f94eab2e96655f4c9d69ccd7d9c7cc998f4ce.ts → Article-client-80848d6cadd8abac61865d14ddd35685844797e0.ts} +2 -2
- package/test/slots/components/temp/{Basic-client-c82bc3c5e10f2f2c1869347435262c8f3039e32f.ts → Basic-client-97b18686412869e8c814fd4542dfe826b1f7669f.ts} +1 -1
- package/test/slots/components/temp/{Basic-server-21fb4f8caa3bbcae219aaef388af8c26c46fa5ce.ts → Basic-server-248392e2cd147b537cd44e9a5a71885ef20102e4.ts} +1 -1
- package/test/slots/components/temp/{Let-client-c54696fd1b5b859a693744722957fa960f72fad6.ts → Let-client-be69c1f5aa32faf16239050d7836db46cfdcba2f.ts} +4 -3
- package/test/slots/components/temp/{Let-server-4d78ffc8741fa737f2cd915b36c0e6ec88a9146f.ts → Let-server-c3293219ed27aec61a6af36d451ddf6609c40027.ts} +2 -1
- package/test/slots/components/temp/{List-client-0659d999cfb48b865fe5b8aaaf2a4ddac3a8a8b6.ts → List-client-a829b33214de829de689a72d2e8703b2266ad7a4.ts} +1 -1
- package/test/slots/components/temp/{List-server-4b76485a259d054187edad8aa691d80ac918ad86.ts → List-server-06503834c9bfae9b8c2b61742568b020a3de961c.ts} +1 -0
- package/test/slots/components/temp/{Named-client-0626b2f0911f77f5edcfda82f9751bcbc37b7641.ts → Named-client-2d9d88f5fdf74d81c3ed1d769a476f4ac36c8b99.ts} +2 -2
- package/test/slots/components/temp/{Named-server-e802f901223d697c7fd0a1a234ce1930af1b4b3f.ts → Named-server-65a7bbf038111475c8f07dccb34040ab8c1392c4.ts} +1 -1
- package/test/slots/components/temp/{Unused-client-aa05465731e0d00e18189498f49c94f991e76f10.ts → Unused-client-1b16491cb800bbbbd871d9fbf5966c7275244019.ts} +1 -1
- package/test/slots/components/temp/{Unused-server-00b92d14665a565f0042b1f56231f28bc38a1252.ts → Unused-server-e5d1e85116bebc7e1a2882cb8f2c9ae7975a1de7.ts} +1 -1
- package/test/special-component/components/output/Component-client.ts +5 -4
- package/test/special-component/components/output/Component-server.ts +3 -2
- package/test/special-component/components/temp/{Component-client-3cc84b23def8830b8ef441bde0f03b3e9718196a.ts → Component-client-22f7e1d0955fb3d90939e956a1f0f77118c259b6.ts} +5 -4
- package/test/special-component/components/temp/{Component-server-5dc597784ea1fe45ac2cfb21305cf2187a3868e8.ts → Component-server-ce596cd84dc11f67c9f0588060a5b672eddf9715.ts} +3 -2
- package/test/special-element/components/output/Element-client.ts +2 -1
- package/test/special-element/components/output/Element-server.ts +1 -0
- package/test/special-element/components/temp/{Element-client-0ab8992a8e914c7e190cddac790585fef9be1c9f.ts → Element-client-21c92c04579b1d29e8813265a10897d069aad5c5.ts} +2 -1
- package/test/special-element/components/temp/{Element-server-ddb0170df4a3f369577ca7e9768e5fe799f14dfb.ts → Element-server-4bed9653529f39e72754126147fe8618f328853a.ts} +1 -0
- package/test/special-self/components/output/Self-client.ts +3 -2
- package/test/special-self/components/output/Self-server.ts +1 -0
- package/test/special-self/components/temp/{Self-client-3982f174954034643c4d17cfc66d7f10bf1d4df6.ts → Self-client-911c67194be1fdd997537310bcafe712161e8251.ts} +3 -2
- package/test/special-self/components/temp/{Self-server-97ffbdaae47f4463034e1d318a8073d078ff138f.ts → Self-server-49ba9be1f6255dd4daf490c640f5222a85960218.ts} +1 -0
- package/test/style/components/output/Style-client.ts +2 -1
- package/test/style/components/output/Style-server.ts +1 -0
- package/test/style/components/temp/{Style-client-085517e82bdd015c86f4c2577447c6a2791cf656.ts → Style-client-cbfac1e255c33a867ccbd5f9d1484a855d91a2d7.ts} +2 -1
- package/test/style/components/temp/{Style-server-b2615163fbafdcb2a5d4155120edf2f66ef3bba6.ts → Style-server-763d82ee2296be3f7620814aed950b505329c04c.ts} +1 -0
- package/test/svg/components/output/Shape-client.ts +4 -3
- package/test/svg/components/output/Shape-server.ts +1 -0
- package/test/svg/components/temp/{Shape-client-ea698ed1b7d0c3615adff35fa4956f22840f5fda.ts → Shape-client-cb98b36ab2a0d9f06b484a3c988fb43c3a71a4a0.ts} +4 -3
- package/test/svg/components/temp/{Shape-server-eb32049cfb7c058b2c4079c5f86ef00651ff6d69.ts → Shape-server-500d7fe4556026234ce5379b8e90595ddd094edc.ts} +1 -0
- package/test/switch/components/output/Switch-client.ts +5 -4
- package/test/switch/components/output/Switch-server.ts +1 -0
- package/test/switch/components/temp/{Switch-client-4c4adac7308795807517e66bc268a38f87df6bda.ts → Switch-client-9980de45e3346b79525c445edec7cbc3b375e8a4.ts} +5 -4
- package/test/switch/components/temp/{Switch-server-21fcac2b02c6071136bb0dc394babd27e454d2c9.ts → Switch-server-1c5690726f28008bb565966af69b6e4e019dea82.ts} +1 -0
- package/test/text/components/output/Text-client.ts +3 -2
- package/test/text/components/output/Text-server.ts +1 -0
- package/test/text/components/temp/{Text-client-9840092be1b4552ddce6e5efc2f1b395637a0a3d.ts → Text-client-63f1d3bf9b3bd145c7ce7058716640e27144055e.ts} +3 -2
- package/test/text/components/temp/{Text-server-6774aa9d4ccce941224ba0a8fb1d3e42eb31807e.ts → Text-server-9d3dd6f51e893e63c1999ceafce19ca1697d76ea.ts} +1 -0
- package/test/watch-array/components/output/Array-client.ts +4 -3
- package/test/watch-array/components/output/Array-server.ts +1 -0
- package/test/watch-array/components/output/ArrayEntries-client.ts +4 -3
- package/test/watch-array/components/output/ArrayEntries-server.ts +1 -0
- package/test/watch-array/components/output/ArrayIndexes-client.ts +4 -3
- package/test/watch-array/components/output/ArrayIndexes-server.ts +1 -0
- package/test/watch-array/components/output/ArrayUnkeyed-client.ts +4 -3
- package/test/watch-array/components/output/ArrayUnkeyed-server.ts +1 -0
- package/test/watch-array/components/temp/{Array-client-b29a42f88c2a2f37b3a86bdb9535e20a487887e1.ts → Array-client-ffd82188a45877d74053c82fb3616e4aed0fc2ad.ts} +4 -3
- package/test/watch-array/components/temp/{Array-server-ced54fc7e63196f9c24c2e55b27bfe6cf7821dcb.ts → Array-server-3715e815af887e8487b214e7de324850fe99e312.ts} +1 -0
- package/test/watch-array/components/temp/{ArrayEntries-client-6289890758b1f6b462a74417e0b9e2e46d946ccd.ts → ArrayEntries-client-b6e982660628576061dbb44539e970b9549bdcfa.ts} +4 -3
- package/test/watch-array/components/temp/{ArrayEntries-server-0429a18ffbe39afe87612889a3010c3fcaa601dc.ts → ArrayEntries-server-85cbe80fbb7f6885287825e2cc0dfc1cb9835d79.ts} +1 -0
- package/test/watch-array/components/temp/{ArrayIndexes-client-fe4b1c49f442b3e5411f331c52ae6c5ab38f2b2d.ts → ArrayIndexes-client-39337aa43bd8c10a53db836c3be233d48dd39b91.ts} +4 -3
- package/test/watch-array/components/temp/{ArrayIndexes-server-20c01f10832f035b007f85a423778934d51a703a.ts → ArrayIndexes-server-ec623c724af0c7212675d61ea68e9dee87f96caa.ts} +1 -0
- package/test/watch-array/components/temp/{ArrayUnkeyed-client-3fffe2ce749ee84e0730130bfd730d432e3c4e12.ts → ArrayUnkeyed-client-7606f9a6a221c8cf6a8b51e4895d10a3d7bccc11.ts} +4 -3
- package/test/watch-array/components/temp/{ArrayUnkeyed-server-0ab804a5e7bf5b47594d85adab79735e89a3939d.ts → ArrayUnkeyed-server-db21cd576a4c70973abe10f6c8ef5cecb3ead86c.ts} +1 -0
- package/test/watch-object/components/output/Watched-client.ts +2 -1
- package/test/watch-object/components/output/Watched-server.ts +1 -0
- package/test/watch-object/components/temp/{Watched-client-cb293038cd0a39043d05639c624a17d512419c25.ts → Watched-client-bbffbf2cede1a5c071b770670eb39c0f0be725af.ts} +2 -1
- package/test/watch-object/components/temp/{Watched-server-4884585cf4f50493a70631909f2230153531208e.ts → Watched-server-0252addaf92fb0f0c1e2937f42918a1c9f31d196.ts} +1 -0
- package/src/render/flushMountEffects.ts +0 -8
- package/test/if/components/temp/IfNested-client-979db97eea5b4595550b9b46f297f3fbc31796d2.ts +0 -90
- package/test/if/components/temp/IfNested-server-3c4e4b6f2162c0906cef685830219b9ea9ee985c.ts +0 -30
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import $run from "../../../../src/render/$run";
|
|
2
|
+
import $watch from "../../../../src/render/$watch";
|
|
2
3
|
import { type SlotRender } from "../../../../src/types/SlotRender";
|
|
3
4
|
import t_add_fragment from "../../../../src/render/addFragment";
|
|
4
5
|
import t_attribute from "../../../../src/render/setAttribute";
|
|
@@ -15,12 +16,12 @@ export default function Attributes(
|
|
|
15
16
|
// @ts-ignore
|
|
16
17
|
$slots?: Record<string, SlotRender>
|
|
17
18
|
) {
|
|
18
|
-
$props ??= {};
|
|
19
|
+
$props ??= $watch({});
|
|
19
20
|
|
|
20
21
|
/* User interface */
|
|
21
22
|
const t_fragments: DocumentFragment[] = [];
|
|
22
23
|
|
|
23
|
-
const t_fragment_0 = t_fragment($parent.ownerDocument!, t_fragments, 0, `<div data-thing=""> Hello! </div>`);
|
|
24
|
+
const t_fragment_0 = t_fragment($parent.ownerDocument!, t_fragments, 0, `<div data-thing="" {$props.attr}> Hello! </div>`);
|
|
24
25
|
// @ts-ignore
|
|
25
26
|
const t_div_1 = t_root(t_fragment_0) as HTMLDivElement;
|
|
26
27
|
$run(function setAttribute() {
|
|
@@ -32,6 +33,9 @@ export default function Attributes(
|
|
|
32
33
|
$run(function setAttribute() {
|
|
33
34
|
t_attribute(t_div_1, "caption", `this attribute is for ${$props.description}`);
|
|
34
35
|
});
|
|
36
|
+
$run(function setAttribute() {
|
|
37
|
+
t_div_1.setAttribute("attr", $props.attr);
|
|
38
|
+
});
|
|
35
39
|
t_add_fragment(t_fragment_0, $parent, $anchor);
|
|
36
40
|
t_next(t_div_1);
|
|
37
41
|
|
|
@@ -8,10 +8,11 @@ export default function Attributes(
|
|
|
8
8
|
// @ts-ignore
|
|
9
9
|
$slots?: Record<string, ServerSlotRender>
|
|
10
10
|
) {
|
|
11
|
+
$props ??= {};
|
|
11
12
|
|
|
12
13
|
/* User interface */
|
|
13
14
|
let $output = "";
|
|
14
|
-
$output += `<div ${$props.thing ? `thing="${t_attr($props.thing)}"` : ''} ${$props.dataThing ? `data-thing="${t_attr($props.dataThing)}"` : ''} caption="this attribute is for ${t_attr($props.description)}"> Hello! </div>`;
|
|
15
|
+
$output += `<div ${$props.thing ? `thing="${t_attr($props.thing)}"` : ''} ${$props.dataThing ? `data-thing="${t_attr($props.dataThing)}"` : ''} caption="this attribute is for ${t_attr($props.description)}" attr="${t_attr($props.attr)}"> Hello! </div>`;
|
|
15
16
|
|
|
16
17
|
return $output;
|
|
17
18
|
}
|
package/test/await/await.test.ts
CHANGED
|
@@ -31,8 +31,6 @@ test("await -- hydrated", async () => {
|
|
|
31
31
|
});
|
|
32
32
|
|
|
33
33
|
async function check(container: HTMLElement) {
|
|
34
|
-
const user = userEvent.setup();
|
|
35
|
-
|
|
36
34
|
expect(queryByText(container, "Hmm...")).not.toBeNull();
|
|
37
35
|
expect(queryByText(container, "Is it a number?")).toBeNull();
|
|
38
36
|
|
|
@@ -40,7 +38,7 @@ async function check(container: HTMLElement) {
|
|
|
40
38
|
|
|
41
39
|
expect(queryByText(container, "Is it a number?")).not.toBeNull();
|
|
42
40
|
|
|
43
|
-
await
|
|
41
|
+
await userEvent.click(getByText(container, "Guess again"));
|
|
44
42
|
|
|
45
43
|
expect(queryByText(container, "Hmm...")).not.toBeNull();
|
|
46
44
|
expect(queryByText(container, "Is it a number?")).toBeNull();
|
|
@@ -49,7 +47,7 @@ async function check(container: HTMLElement) {
|
|
|
49
47
|
|
|
50
48
|
expect(queryByText(container, "Is it a number?")).not.toBeNull();
|
|
51
49
|
|
|
52
|
-
await
|
|
50
|
+
await userEvent.click(getByText(container, "Guess again"));
|
|
53
51
|
|
|
54
52
|
expect(queryByText(container, "Hmm...")).not.toBeNull();
|
|
55
53
|
expect(queryByText(container, "Is it a number?")).toBeNull();
|
|
@@ -62,7 +62,7 @@ export default function Await(
|
|
|
62
62
|
// @ts-ignore
|
|
63
63
|
const t_root_1 = t_root(t_fragment_1);
|
|
64
64
|
// @ts-ignore
|
|
65
|
-
const t_text_1 = t_next(
|
|
65
|
+
const t_text_1 = t_next(t_root_1, 2);
|
|
66
66
|
t_add_fragment(t_fragment_1, t_div_1, t_before);
|
|
67
67
|
t_next(t_text_1);
|
|
68
68
|
});
|
|
@@ -76,7 +76,7 @@ export default function Await(
|
|
|
76
76
|
// @ts-ignore
|
|
77
77
|
const t_root_2 = t_root(t_fragment_2);
|
|
78
78
|
// @ts-ignore
|
|
79
|
-
const t_text_2 = t_next(
|
|
79
|
+
const t_text_2 = t_next(t_root_2, 2);
|
|
80
80
|
t_add_fragment(t_fragment_2, t_div_1, t_before);
|
|
81
81
|
t_next(t_text_2);
|
|
82
82
|
});
|
|
@@ -92,7 +92,7 @@ export default function Await(
|
|
|
92
92
|
const t_root_3 = t_root(t_fragment_3);
|
|
93
93
|
const t_text_3 = t_child(t_next(t_root_3));
|
|
94
94
|
// @ts-ignore
|
|
95
|
-
const t_text_4 = t_next(
|
|
95
|
+
const t_text_4 = t_next(t_root_3, 2);
|
|
96
96
|
$run(function setTextContent() {
|
|
97
97
|
t_text_3.textContent = `Something went wrong: ${t_fmt(ex)}!`;
|
|
98
98
|
});
|
|
@@ -105,7 +105,7 @@ export default function Await(
|
|
|
105
105
|
})(t_await_token_1);
|
|
106
106
|
});
|
|
107
107
|
|
|
108
|
-
const t_button_1 = t_next(
|
|
108
|
+
const t_button_1 = t_next(t_await_anchor_1, 2) as HTMLElement;
|
|
109
109
|
t_event(t_button_1, "click", () => $state.guesser = guessNumber(100));
|
|
110
110
|
t_add_fragment(t_fragment_0, $parent, $anchor);
|
|
111
111
|
t_next(t_div_1);
|
|
@@ -62,7 +62,7 @@ export default function Await(
|
|
|
62
62
|
// @ts-ignore
|
|
63
63
|
const t_root_1 = t_root(t_fragment_1);
|
|
64
64
|
// @ts-ignore
|
|
65
|
-
const t_text_1 = t_next(
|
|
65
|
+
const t_text_1 = t_next(t_root_1, 2);
|
|
66
66
|
t_add_fragment(t_fragment_1, t_div_1, t_before);
|
|
67
67
|
t_next(t_text_1);
|
|
68
68
|
});
|
|
@@ -76,7 +76,7 @@ export default function Await(
|
|
|
76
76
|
// @ts-ignore
|
|
77
77
|
const t_root_2 = t_root(t_fragment_2);
|
|
78
78
|
// @ts-ignore
|
|
79
|
-
const t_text_2 = t_next(
|
|
79
|
+
const t_text_2 = t_next(t_root_2, 2);
|
|
80
80
|
t_add_fragment(t_fragment_2, t_div_1, t_before);
|
|
81
81
|
t_next(t_text_2);
|
|
82
82
|
});
|
|
@@ -92,7 +92,7 @@ export default function Await(
|
|
|
92
92
|
const t_root_3 = t_root(t_fragment_3);
|
|
93
93
|
const t_text_3 = t_child(t_next(t_root_3));
|
|
94
94
|
// @ts-ignore
|
|
95
|
-
const t_text_4 = t_next(
|
|
95
|
+
const t_text_4 = t_next(t_root_3, 2);
|
|
96
96
|
$run(function setTextContent() {
|
|
97
97
|
t_text_3.textContent = `Something went wrong: ${t_fmt(ex)}!`;
|
|
98
98
|
});
|
|
@@ -105,7 +105,7 @@ export default function Await(
|
|
|
105
105
|
})(t_await_token_1);
|
|
106
106
|
});
|
|
107
107
|
|
|
108
|
-
const t_button_1 = t_next(
|
|
108
|
+
const t_button_1 = t_next(t_await_anchor_1, 2) as HTMLElement;
|
|
109
109
|
t_event(t_button_1, "click", () => $state.guesser = guessNumber(100));
|
|
110
110
|
t_add_fragment(t_fragment_0, $parent, $anchor);
|
|
111
111
|
t_next(t_div_1);
|
|
@@ -6,8 +6,6 @@ import mountComponent from "../mountComponent";
|
|
|
6
6
|
|
|
7
7
|
const componentPath = "./test/bench/components/Bench";
|
|
8
8
|
|
|
9
|
-
const user = userEvent.setup();
|
|
10
|
-
|
|
11
9
|
beforeAll(async () => {
|
|
12
10
|
const container = document.createElement("div");
|
|
13
11
|
const component = await importComponent(componentPath, "client");
|
|
@@ -24,11 +22,11 @@ bench("bench", async () => {
|
|
|
24
22
|
|
|
25
23
|
try {
|
|
26
24
|
// Press a bunch of buttons
|
|
27
|
-
await
|
|
28
|
-
await
|
|
29
|
-
await
|
|
30
|
-
await
|
|
31
|
-
await
|
|
25
|
+
await userEvent.click(createButton);
|
|
26
|
+
await userEvent.click(appendButton);
|
|
27
|
+
await userEvent.click(updateButton);
|
|
28
|
+
await userEvent.click(swapButton);
|
|
29
|
+
await userEvent.click(clearButton);
|
|
32
30
|
} catch {
|
|
33
31
|
console.log("ERROR");
|
|
34
32
|
}
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
import $run from "../../../../src/render/$run";
|
|
2
|
+
import $watch from "../../../../src/render/$watch";
|
|
3
|
+
import { type ListItem } from "../../../../src/types/ListItem";
|
|
4
|
+
import { type SlotRender } from "../../../../src/types/SlotRender";
|
|
5
|
+
import t_add_fragment from "../../../../src/render/addFragment";
|
|
6
|
+
import t_anchor from "../../../../src/render/nodeAnchor";
|
|
7
|
+
import t_child from "../../../../src/render/nodeChild";
|
|
8
|
+
import t_class from "../../../../src/render/getClasses";
|
|
9
|
+
import t_event from "../../../../src/render/addEvent";
|
|
10
|
+
import t_fmt from "../../../../src/render/formatText";
|
|
11
|
+
import t_fragment from "../../../../src/render/getFragment";
|
|
12
|
+
import t_list_item from "../../../../src/render/newListItem";
|
|
13
|
+
import t_next from "../../../../src/render/nodeNext";
|
|
14
|
+
import t_pop_range from "../../../../src/render/popRange";
|
|
15
|
+
import t_push_range from "../../../../src/render/pushRange";
|
|
16
|
+
import t_range from "../../../../src/render/newRange";
|
|
17
|
+
import t_root from "../../../../src/render/nodeRoot";
|
|
18
|
+
import t_run_list from "../../../../src/render/runList";
|
|
19
|
+
|
|
20
|
+
export default function Bench(
|
|
21
|
+
$parent: ParentNode,
|
|
22
|
+
$anchor: Node | null,
|
|
23
|
+
// @ts-ignore
|
|
24
|
+
$props?: Record<PropertyKey, any>,
|
|
25
|
+
// @ts-ignore
|
|
26
|
+
$context?: Record<PropertyKey, any>,
|
|
27
|
+
// @ts-ignore
|
|
28
|
+
$slots?: Record<string, SlotRender>
|
|
29
|
+
) {
|
|
30
|
+
|
|
31
|
+
let rowId = 1;
|
|
32
|
+
let $state = $watch({
|
|
33
|
+
data: [],
|
|
34
|
+
selected: null,
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
const adjectives = [
|
|
38
|
+
"pretty",
|
|
39
|
+
"large",
|
|
40
|
+
"big",
|
|
41
|
+
"small",
|
|
42
|
+
"tall",
|
|
43
|
+
"short",
|
|
44
|
+
"long",
|
|
45
|
+
"handsome",
|
|
46
|
+
"plain",
|
|
47
|
+
"quaint",
|
|
48
|
+
"clean",
|
|
49
|
+
"elegant",
|
|
50
|
+
"easy",
|
|
51
|
+
"angry",
|
|
52
|
+
"crazy",
|
|
53
|
+
"helpful",
|
|
54
|
+
"mushy",
|
|
55
|
+
"odd",
|
|
56
|
+
"unsightly",
|
|
57
|
+
"adorable",
|
|
58
|
+
"important",
|
|
59
|
+
"inexpensive",
|
|
60
|
+
"cheap",
|
|
61
|
+
"expensive",
|
|
62
|
+
"fancy",
|
|
63
|
+
];
|
|
64
|
+
const colours = ["red", "yellow", "blue", "green", "pink", "brown", "purple", "brown", "white", "black", "orange"];
|
|
65
|
+
const nouns = [
|
|
66
|
+
"table",
|
|
67
|
+
"chair",
|
|
68
|
+
"house",
|
|
69
|
+
"bbq",
|
|
70
|
+
"desk",
|
|
71
|
+
"car",
|
|
72
|
+
"pony",
|
|
73
|
+
"cookie",
|
|
74
|
+
"sandwich",
|
|
75
|
+
"burger",
|
|
76
|
+
"pizza",
|
|
77
|
+
"mouse",
|
|
78
|
+
"keyboard",
|
|
79
|
+
];
|
|
80
|
+
|
|
81
|
+
function append() {
|
|
82
|
+
$state.data = [...$state.data, ...buildData(1000)];
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
function clear() {
|
|
86
|
+
$state.data = [];
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
function partialUpdate() {
|
|
90
|
+
for (let i = 0; i < $state.data.length; i += 10) {
|
|
91
|
+
const row = $state.data[i];
|
|
92
|
+
row.label = row.label + " !!!";
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
function remove(row) {
|
|
97
|
+
const clone = $state.data.slice();
|
|
98
|
+
clone.splice(clone.indexOf(row), 1);
|
|
99
|
+
$state.data = clone;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
function create() {
|
|
103
|
+
// TODO: Build this up to 1000:
|
|
104
|
+
$state.data = buildData(10);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
function createLots() {
|
|
108
|
+
$state.data = buildData(10000);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
function swapRows() {
|
|
112
|
+
if ($state.data.length > 998) {
|
|
113
|
+
const clone = $state.data.slice();
|
|
114
|
+
const tmp = clone[1];
|
|
115
|
+
clone[1] = clone[998];
|
|
116
|
+
clone[998] = tmp;
|
|
117
|
+
$state.data = clone;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
function _random(max) {
|
|
122
|
+
return Math.round(Math.random() * 1000) % max;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
class Item {
|
|
126
|
+
id = rowId++;
|
|
127
|
+
label = `${adjectives[_random(adjectives.length)]} ${colours[_random(colours.length)]} ${nouns[_random(nouns.length)]}`;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
function buildData(count = 1000) {
|
|
131
|
+
const data = new Array(count);
|
|
132
|
+
for (let i = 0; i < count; i++) {
|
|
133
|
+
data[i] = $watch(new Item());
|
|
134
|
+
}
|
|
135
|
+
return data;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/* User interface */
|
|
139
|
+
const t_fragments: DocumentFragment[] = [];
|
|
140
|
+
|
|
141
|
+
const t_fragment_0 = t_fragment($parent.ownerDocument!, t_fragments, 0, `<div id="main" class="container"> <div class="jumbotron"> <div class="row"> <div class="col-md-6"> <h1>Torpor (keyed)</h1> </div> <div class="col-md-6"> <div class="row"> <div class="col-sm-6 smallpad"> <button type="button" class="btn btn-primary btn-block" id="create">Create 1,000 rows</button> </div> <div class="col-sm-6 smallpad"> <button type="button" class="btn btn-primary btn-block" id="createlots"> Create 10,000 rows </button> </div> <div class="col-sm-6 smallpad"> <button type="button" class="btn btn-primary btn-block" id="append"> Append 1,000 rows </button> </div> <div class="col-sm-6 smallpad"> <button type="button" class="btn btn-primary btn-block" id="update"> Update every 10th row </button> </div> <div class="col-sm-6 smallpad"> <button type="button" class="btn btn-primary btn-block" id="clear">Clear</button> </div> <div class="col-sm-6 smallpad"> <button type="button" class="btn btn-primary btn-block" id="swaprows">Swap Rows</button> </div> </div> </div> </div> </div> <table class="table table-hover table-striped test-data"> <tbody> <!> </tbody> </table> <span class="preloadicon glyphicon glyphicon-remove" aria-hidden="true"></span> </div>`);
|
|
142
|
+
// @ts-ignore
|
|
143
|
+
const t_div_1 = t_root(t_fragment_0) as HTMLDivElement;
|
|
144
|
+
const t_button_1 = t_next(t_child(t_next(t_child(t_next(t_child(t_next(t_child(t_next(t_child(t_next(t_child(t_div_1))))), 3))))))) as HTMLElement;
|
|
145
|
+
const t_button_2 = t_next(t_child(t_next(t_child(t_next(t_child(t_next(t_child(t_next(t_child(t_next(t_child(t_div_1))))), 3)))), 3))) as HTMLElement;
|
|
146
|
+
const t_button_3 = t_next(t_child(t_next(t_child(t_next(t_child(t_next(t_child(t_next(t_child(t_next(t_child(t_div_1))))), 3)))), 5))) as HTMLElement;
|
|
147
|
+
const t_button_4 = t_next(t_child(t_next(t_child(t_next(t_child(t_next(t_child(t_next(t_child(t_next(t_child(t_div_1))))), 3)))), 7))) as HTMLElement;
|
|
148
|
+
const t_button_5 = t_next(t_child(t_next(t_child(t_next(t_child(t_next(t_child(t_next(t_child(t_next(t_child(t_div_1))))), 3)))), 9))) as HTMLElement;
|
|
149
|
+
const t_button_6 = t_next(t_child(t_next(t_child(t_next(t_child(t_next(t_child(t_next(t_child(t_next(t_child(t_div_1))))), 3)))), 11))) as HTMLElement;
|
|
150
|
+
const t_for_parent_1 = t_next(t_child(t_next(t_child(t_div_1), 3))) as HTMLElement;
|
|
151
|
+
const t_for_anchor_1 = t_anchor(t_next(t_child(t_next(t_child(t_next(t_child(t_div_1), 3)))))) as HTMLElement;
|
|
152
|
+
|
|
153
|
+
/* @for */
|
|
154
|
+
let t_for_range_1 = t_range();
|
|
155
|
+
t_run_list(
|
|
156
|
+
t_for_range_1,
|
|
157
|
+
t_for_parent_1,
|
|
158
|
+
t_for_anchor_1,
|
|
159
|
+
function createNewItems() {
|
|
160
|
+
let t_new_items: ListItem[] = [];
|
|
161
|
+
for (let row of $state.data) {
|
|
162
|
+
t_new_items.push(t_list_item({ row }, row.id));
|
|
163
|
+
/*t_new_items.push({
|
|
164
|
+
key: row.id,
|
|
165
|
+
data: { row }
|
|
166
|
+
});*/
|
|
167
|
+
}
|
|
168
|
+
return t_new_items;
|
|
169
|
+
},
|
|
170
|
+
function createListItem(t_item, t_before) {
|
|
171
|
+
let t_old_range_1 = t_push_range(t_item, true);
|
|
172
|
+
const t_fragment_1 = t_fragment($parent.ownerDocument!, t_fragments, 1, ` <tr> <td class="col-md-1">#</td> <td class="col-md-4"> <a>#</a> </td> <td class="col-md-1"> <a> <span class="glyphicon glyphicon-remove" aria-hidden="true"></span> </a> </td> <td class="col-md-6"></td> </tr> `);
|
|
173
|
+
// @ts-ignore
|
|
174
|
+
const t_root_1 = t_root(t_fragment_1);
|
|
175
|
+
const t_tr_1 = t_next(t_root_1) as HTMLElement;
|
|
176
|
+
const t_text_1 = t_child(t_next(t_child(t_tr_1)));
|
|
177
|
+
const t_a_1 = t_next(t_child(t_next(t_child(t_tr_1), 3))) as HTMLElement;
|
|
178
|
+
const t_text_2 = t_child(t_a_1);
|
|
179
|
+
const t_a_2 = t_next(t_child(t_next(t_child(t_tr_1), 5))) as HTMLElement;
|
|
180
|
+
// @ts-ignore
|
|
181
|
+
const t_text_3 = t_next(t_tr_1);
|
|
182
|
+
$run(function setClasses() {
|
|
183
|
+
t_tr_1.className = t_class({ danger: $state.selected === t_item.data.row.id });
|
|
184
|
+
});
|
|
185
|
+
$run(function setTextContent() {
|
|
186
|
+
t_text_1.textContent = t_fmt(t_item.data.row.id);
|
|
187
|
+
});
|
|
188
|
+
t_event(t_a_1, "click", () => $state.selected = t_item.data.row.id);
|
|
189
|
+
$run(function setTextContent() {
|
|
190
|
+
t_text_2.textContent = ` ${t_fmt(t_item.data.row.label)} `;
|
|
191
|
+
});
|
|
192
|
+
t_event(t_a_2, "click", () => remove(t_item.data.row));
|
|
193
|
+
t_add_fragment(t_fragment_1, t_for_parent_1, t_before);
|
|
194
|
+
t_next(t_text_3);
|
|
195
|
+
t_pop_range(t_old_range_1);
|
|
196
|
+
}
|
|
197
|
+
);
|
|
198
|
+
|
|
199
|
+
t_event(t_button_1, "click", create);
|
|
200
|
+
t_event(t_button_2, "click", createLots);
|
|
201
|
+
t_event(t_button_3, "click", append);
|
|
202
|
+
t_event(t_button_4, "click", partialUpdate);
|
|
203
|
+
t_event(t_button_5, "click", clear);
|
|
204
|
+
t_event(t_button_6, "click", swapRows);
|
|
205
|
+
t_add_fragment(t_fragment_0, $parent, $anchor);
|
|
206
|
+
t_next(t_div_1);
|
|
207
|
+
|
|
208
|
+
}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import $watch from "../../../../src/render/$serverWatch";
|
|
2
|
+
import { type ServerSlotRender } from "../../../../src/types/ServerSlotRender";
|
|
3
|
+
import t_class from "../../../../src/render/getClasses";
|
|
4
|
+
import t_fmt from "../../../../src/render/formatText";
|
|
5
|
+
|
|
6
|
+
export default function Bench(
|
|
7
|
+
// @ts-ignore
|
|
8
|
+
$props?: Record<PropertyKey, any>,
|
|
9
|
+
// @ts-ignore
|
|
10
|
+
$context?: Record<PropertyKey, any>,
|
|
11
|
+
// @ts-ignore
|
|
12
|
+
$slots?: Record<string, ServerSlotRender>
|
|
13
|
+
) {
|
|
14
|
+
let rowId = 1;
|
|
15
|
+
let $state = $watch({
|
|
16
|
+
data: [],
|
|
17
|
+
selected: null,
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
const adjectives = [
|
|
21
|
+
"pretty",
|
|
22
|
+
"large",
|
|
23
|
+
"big",
|
|
24
|
+
"small",
|
|
25
|
+
"tall",
|
|
26
|
+
"short",
|
|
27
|
+
"long",
|
|
28
|
+
"handsome",
|
|
29
|
+
"plain",
|
|
30
|
+
"quaint",
|
|
31
|
+
"clean",
|
|
32
|
+
"elegant",
|
|
33
|
+
"easy",
|
|
34
|
+
"angry",
|
|
35
|
+
"crazy",
|
|
36
|
+
"helpful",
|
|
37
|
+
"mushy",
|
|
38
|
+
"odd",
|
|
39
|
+
"unsightly",
|
|
40
|
+
"adorable",
|
|
41
|
+
"important",
|
|
42
|
+
"inexpensive",
|
|
43
|
+
"cheap",
|
|
44
|
+
"expensive",
|
|
45
|
+
"fancy",
|
|
46
|
+
];
|
|
47
|
+
const colours = ["red", "yellow", "blue", "green", "pink", "brown", "purple", "brown", "white", "black", "orange"];
|
|
48
|
+
const nouns = [
|
|
49
|
+
"table",
|
|
50
|
+
"chair",
|
|
51
|
+
"house",
|
|
52
|
+
"bbq",
|
|
53
|
+
"desk",
|
|
54
|
+
"car",
|
|
55
|
+
"pony",
|
|
56
|
+
"cookie",
|
|
57
|
+
"sandwich",
|
|
58
|
+
"burger",
|
|
59
|
+
"pizza",
|
|
60
|
+
"mouse",
|
|
61
|
+
"keyboard",
|
|
62
|
+
];
|
|
63
|
+
|
|
64
|
+
function append() {
|
|
65
|
+
$state.data = [...$state.data, ...buildData(1000)];
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
function clear() {
|
|
69
|
+
$state.data = [];
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
function partialUpdate() {
|
|
73
|
+
for (let i = 0; i < $state.data.length; i += 10) {
|
|
74
|
+
const row = $state.data[i];
|
|
75
|
+
row.label = row.label + " !!!";
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
function remove(row) {
|
|
80
|
+
const clone = $state.data.slice();
|
|
81
|
+
clone.splice(clone.indexOf(row), 1);
|
|
82
|
+
$state.data = clone;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
function create() {
|
|
86
|
+
// TODO: Build this up to 1000:
|
|
87
|
+
$state.data = buildData(10);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
function createLots() {
|
|
91
|
+
$state.data = buildData(10000);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
function swapRows() {
|
|
95
|
+
if ($state.data.length > 998) {
|
|
96
|
+
const clone = $state.data.slice();
|
|
97
|
+
const tmp = clone[1];
|
|
98
|
+
clone[1] = clone[998];
|
|
99
|
+
clone[998] = tmp;
|
|
100
|
+
$state.data = clone;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
function _random(max) {
|
|
105
|
+
return Math.round(Math.random() * 1000) % max;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
class Item {
|
|
109
|
+
id = rowId++;
|
|
110
|
+
label = `${adjectives[_random(adjectives.length)]} ${colours[_random(colours.length)]} ${nouns[_random(nouns.length)]}`;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
function buildData(count = 1000) {
|
|
114
|
+
const data = new Array(count);
|
|
115
|
+
for (let i = 0; i < count; i++) {
|
|
116
|
+
data[i] = $watch(new Item());
|
|
117
|
+
}
|
|
118
|
+
return data;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/* User interface */
|
|
122
|
+
let $output = "";
|
|
123
|
+
$output += `<div id="main" class="container"> <div class="jumbotron"> <div class="row"> <div class="col-md-6"> <h1>Torpor (keyed)</h1> </div> <div class="col-md-6"> <div class="row"> <div class="col-sm-6 smallpad"> <button type="button" class="btn btn-primary btn-block" id="create">Create 1,000 rows</button> </div> <div class="col-sm-6 smallpad"> <button type="button" class="btn btn-primary btn-block" id="createlots"> Create 10,000 rows </button> </div> <div class="col-sm-6 smallpad"> <button type="button" class="btn btn-primary btn-block" id="append"> Append 1,000 rows </button> </div> <div class="col-sm-6 smallpad"> <button type="button" class="btn btn-primary btn-block" id="update"> Update every 10th row </button> </div> <div class="col-sm-6 smallpad"> <button type="button" class="btn btn-primary btn-block" id="clear">Clear</button> </div> <div class="col-sm-6 smallpad"> <button type="button" class="btn btn-primary btn-block" id="swaprows">Swap Rows</button> </div> </div> </div> </div> </div> <table class="table table-hover table-striped test-data"> <tbody> <![>`;
|
|
124
|
+
for (let row of $state.data) {
|
|
125
|
+
$output += `<!^> <tr class="${t_class({ danger: $state.selected === row.id })}"> <td class="col-md-1">${t_fmt(row.id)}</td> <td class="col-md-4"> <a> ${t_fmt(row.label)} </a> </td> <td class="col-md-1"> <a> <span class="glyphicon glyphicon-remove" aria-hidden="true"></span> </a> </td> <td class="col-md-6"></td> </tr> `;
|
|
126
|
+
}
|
|
127
|
+
$output += `<!]><!> </tbody> </table> <span class="preloadicon glyphicon glyphicon-remove" aria-hidden="true"></span> </div>`;
|
|
128
|
+
|
|
129
|
+
return $output;
|
|
130
|
+
}
|
|
@@ -141,14 +141,14 @@ export default function Bench(
|
|
|
141
141
|
const t_fragment_0 = t_fragment($parent.ownerDocument!, t_fragments, 0, `<div id="main" class="container"> <div class="jumbotron"> <div class="row"> <div class="col-md-6"> <h1>Torpor (keyed)</h1> </div> <div class="col-md-6"> <div class="row"> <div class="col-sm-6 smallpad"> <button type="button" class="btn btn-primary btn-block" id="create">Create 1,000 rows</button> </div> <div class="col-sm-6 smallpad"> <button type="button" class="btn btn-primary btn-block" id="createlots"> Create 10,000 rows </button> </div> <div class="col-sm-6 smallpad"> <button type="button" class="btn btn-primary btn-block" id="append"> Append 1,000 rows </button> </div> <div class="col-sm-6 smallpad"> <button type="button" class="btn btn-primary btn-block" id="update"> Update every 10th row </button> </div> <div class="col-sm-6 smallpad"> <button type="button" class="btn btn-primary btn-block" id="clear">Clear</button> </div> <div class="col-sm-6 smallpad"> <button type="button" class="btn btn-primary btn-block" id="swaprows">Swap Rows</button> </div> </div> </div> </div> </div> <table class="table table-hover table-striped test-data"> <tbody> <!> </tbody> </table> <span class="preloadicon glyphicon glyphicon-remove" aria-hidden="true"></span> </div>`);
|
|
142
142
|
// @ts-ignore
|
|
143
143
|
const t_div_1 = t_root(t_fragment_0) as HTMLDivElement;
|
|
144
|
-
const t_button_1 = t_next(t_child(t_next(t_child(t_next(t_child(t_next(
|
|
145
|
-
const t_button_2 = t_next(t_child(t_next(
|
|
146
|
-
const t_button_3 = t_next(t_child(t_next(
|
|
147
|
-
const t_button_4 = t_next(t_child(t_next(
|
|
148
|
-
const t_button_5 = t_next(t_child(t_next(
|
|
149
|
-
const t_button_6 = t_next(t_child(t_next(
|
|
150
|
-
const t_for_parent_1 = t_next(t_child(t_next(
|
|
151
|
-
const t_for_anchor_1 = t_anchor(t_next(t_child(
|
|
144
|
+
const t_button_1 = t_next(t_child(t_next(t_child(t_next(t_child(t_next(t_child(t_next(t_child(t_next(t_child(t_div_1))))), 3))))))) as HTMLElement;
|
|
145
|
+
const t_button_2 = t_next(t_child(t_next(t_child(t_next(t_child(t_next(t_child(t_next(t_child(t_next(t_child(t_div_1))))), 3)))), 3))) as HTMLElement;
|
|
146
|
+
const t_button_3 = t_next(t_child(t_next(t_child(t_next(t_child(t_next(t_child(t_next(t_child(t_next(t_child(t_div_1))))), 3)))), 5))) as HTMLElement;
|
|
147
|
+
const t_button_4 = t_next(t_child(t_next(t_child(t_next(t_child(t_next(t_child(t_next(t_child(t_next(t_child(t_div_1))))), 3)))), 7))) as HTMLElement;
|
|
148
|
+
const t_button_5 = t_next(t_child(t_next(t_child(t_next(t_child(t_next(t_child(t_next(t_child(t_next(t_child(t_div_1))))), 3)))), 9))) as HTMLElement;
|
|
149
|
+
const t_button_6 = t_next(t_child(t_next(t_child(t_next(t_child(t_next(t_child(t_next(t_child(t_next(t_child(t_div_1))))), 3)))), 11))) as HTMLElement;
|
|
150
|
+
const t_for_parent_1 = t_next(t_child(t_next(t_child(t_div_1), 3))) as HTMLElement;
|
|
151
|
+
const t_for_anchor_1 = t_anchor(t_next(t_child(t_next(t_child(t_next(t_child(t_div_1), 3)))))) as HTMLElement;
|
|
152
152
|
|
|
153
153
|
/* @for */
|
|
154
154
|
let t_for_range_1 = t_range();
|
|
@@ -174,9 +174,9 @@ export default function Bench(
|
|
|
174
174
|
const t_root_1 = t_root(t_fragment_1);
|
|
175
175
|
const t_tr_1 = t_next(t_root_1) as HTMLElement;
|
|
176
176
|
const t_text_1 = t_child(t_next(t_child(t_tr_1)));
|
|
177
|
-
const t_a_1 = t_next(t_child(t_next(
|
|
177
|
+
const t_a_1 = t_next(t_child(t_next(t_child(t_tr_1), 3))) as HTMLElement;
|
|
178
178
|
const t_text_2 = t_child(t_a_1);
|
|
179
|
-
const t_a_2 = t_next(t_child(t_next(
|
|
179
|
+
const t_a_2 = t_next(t_child(t_next(t_child(t_tr_1), 5))) as HTMLElement;
|
|
180
180
|
// @ts-ignore
|
|
181
181
|
const t_text_3 = t_next(t_tr_1);
|
|
182
182
|
$run(function setClasses() {
|
package/test/bind/bind.test.ts
CHANGED
|
@@ -30,8 +30,6 @@ test("bind text value -- hydrated", async () => {
|
|
|
30
30
|
});
|
|
31
31
|
|
|
32
32
|
async function check(container: HTMLElement) {
|
|
33
|
-
const user = userEvent.setup();
|
|
34
|
-
|
|
35
33
|
const input = container.getElementsByTagName("input")[0];
|
|
36
34
|
const select = container.getElementsByTagName("select")[0];
|
|
37
35
|
const para = container.getElementsByTagName("p")[0];
|
|
@@ -45,9 +43,9 @@ async function check(container: HTMLElement) {
|
|
|
45
43
|
expect(para2).toHaveTextContent("You have selected, 1");
|
|
46
44
|
|
|
47
45
|
// Update the input value
|
|
48
|
-
await
|
|
49
|
-
await
|
|
50
|
-
await
|
|
46
|
+
await userEvent.clear(input);
|
|
47
|
+
await userEvent.type(input, "Bob");
|
|
48
|
+
await userEvent.selectOptions(select, "2");
|
|
51
49
|
|
|
52
50
|
expect(input).toHaveValue("Bob");
|
|
53
51
|
expect(para).toHaveTextContent("Hello, Bob");
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import "@testing-library/jest-dom/vitest";
|
|
2
|
+
import userEvent from "@testing-library/user-event";
|
|
3
|
+
import { beforeAll, expect, test } from "vitest";
|
|
4
|
+
import buildOutputFiles from "../buildOutputFiles";
|
|
5
|
+
import hydrateComponent from "../hydrateComponent";
|
|
6
|
+
import importComponent from "../importComponent";
|
|
7
|
+
import mountComponent from "../mountComponent";
|
|
8
|
+
|
|
9
|
+
const componentPath = "./test/bind/components/BindComponent";
|
|
10
|
+
|
|
11
|
+
beforeAll(() => {
|
|
12
|
+
buildOutputFiles(componentPath);
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
test("bind component value -- mounted", async () => {
|
|
16
|
+
const container = document.createElement("div");
|
|
17
|
+
const component = await importComponent(componentPath, "client");
|
|
18
|
+
mountComponent(container, component);
|
|
19
|
+
|
|
20
|
+
await check(container);
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
test("bind component value -- hydrated", async () => {
|
|
24
|
+
const container = document.createElement("div");
|
|
25
|
+
const clientComponent = await importComponent(componentPath, "client");
|
|
26
|
+
const serverComponent = await importComponent(componentPath, "server");
|
|
27
|
+
hydrateComponent(container, clientComponent, serverComponent);
|
|
28
|
+
|
|
29
|
+
await check(container);
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
async function check(container: HTMLElement) {
|
|
33
|
+
const input = container.getElementsByTagName("input")[0];
|
|
34
|
+
const para = container.getElementsByTagName("p")[0];
|
|
35
|
+
|
|
36
|
+
expect(input).toHaveValue("Alice");
|
|
37
|
+
expect(para).toHaveTextContent("Hello, Alice");
|
|
38
|
+
|
|
39
|
+
// Update the input value
|
|
40
|
+
await userEvent.clear(input);
|
|
41
|
+
await userEvent.type(input, "Bob");
|
|
42
|
+
|
|
43
|
+
expect(input).toHaveValue("Bob");
|
|
44
|
+
expect(para).toHaveTextContent("Hello, Bob");
|
|
45
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export default function BindComponent() {
|
|
2
|
+
let $state = $watch({ name: "Alice", selected: 1 });
|
|
3
|
+
|
|
4
|
+
@render {
|
|
5
|
+
<div>
|
|
6
|
+
@// t_name_changed = (value) => $state.name = value;
|
|
7
|
+
<BindText &name={$state.name} />
|
|
8
|
+
<p>Hello, {$state.name}</p>
|
|
9
|
+
</div>
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
function BindText($props: any) {
|
|
14
|
+
//let $state = $watch({
|
|
15
|
+
// text: $props.name
|
|
16
|
+
//})
|
|
17
|
+
|
|
18
|
+
// $run(() => t_name_changed($props.name))
|
|
19
|
+
|
|
20
|
+
//$run(() => {
|
|
21
|
+
// $props.name = $state.text
|
|
22
|
+
//});
|
|
23
|
+
|
|
24
|
+
@render {
|
|
25
|
+
<div>
|
|
26
|
+
<input &value={$props.name} />
|
|
27
|
+
</div>
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -3,8 +3,8 @@ export default function BindText() {
|
|
|
3
3
|
|
|
4
4
|
@render {
|
|
5
5
|
<div>
|
|
6
|
-
<input
|
|
7
|
-
<select
|
|
6
|
+
<input &value={$state.name} />
|
|
7
|
+
<select &value={$state.selected}>
|
|
8
8
|
<option value=0>First</option>
|
|
9
9
|
<option value=1>Second</option>
|
|
10
10
|
<option value=2>Third</option>
|