@torpor/view 0.1.10 → 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.
Files changed (316) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/README.md +1 -1
  3. package/dist/{ServerSlotRender-t1sOutne.d.cts → ServerSlotRender-BMGG0yq3.d.cts} +4 -4
  4. package/dist/{ServerSlotRender-t1sOutne.d.ts → ServerSlotRender-BMGG0yq3.d.ts} +4 -4
  5. package/dist/chunk-XNO4YEJ3.js +64 -0
  6. package/dist/chunk-XNO4YEJ3.js.map +1 -0
  7. package/dist/compile.cjs +69 -60
  8. package/dist/compile.cjs.map +1 -1
  9. package/dist/compile.js +69 -60
  10. package/dist/compile.js.map +1 -1
  11. package/dist/index.cjs +116 -85
  12. package/dist/index.cjs.map +1 -1
  13. package/dist/index.d.cts +9 -6
  14. package/dist/index.d.ts +9 -6
  15. package/dist/index.js +67 -55
  16. package/dist/index.js.map +1 -1
  17. package/dist/metafile-cjs.json +1 -1
  18. package/dist/metafile-esm.json +1 -1
  19. package/dist/ssr.cjs +44 -25
  20. package/dist/ssr.cjs.map +1 -1
  21. package/dist/ssr.d.cts +2 -2
  22. package/dist/ssr.d.ts +2 -2
  23. package/dist/ssr.js +6 -6
  24. package/package.json +5 -5
  25. package/src/compile/build/client/buildComponentNode.ts +13 -11
  26. package/src/compile/build/client/buildElementNode.ts +10 -13
  27. package/src/compile/build/server/buildServerAwaitNode.ts +2 -2
  28. package/src/compile/build/server/buildServerCode.ts +13 -4
  29. package/src/compile/build/server/buildServerComponentNode.ts +21 -16
  30. package/src/compile/build/server/buildServerControlNode.ts +2 -2
  31. package/src/compile/build/server/buildServerElementNode.ts +7 -4
  32. package/src/compile/build/server/buildServerForNode.ts +2 -2
  33. package/src/compile/build/server/buildServerIfNode.ts +2 -2
  34. package/src/compile/build/server/buildServerReplaceNode.ts +2 -2
  35. package/src/compile/build/server/buildServerSlotNode.ts +9 -5
  36. package/src/compile/build/server/buildServerSwitchNode.ts +2 -2
  37. package/src/compile/parse/scopeStyles.ts +1 -0
  38. package/src/debug/printNode.ts +8 -8
  39. package/src/index.ts +4 -4
  40. package/src/render/addFragment.ts +2 -1
  41. package/src/render/{getClasses.ts → buildClasses.ts} +13 -6
  42. package/src/render/buildStyles.ts +19 -0
  43. package/src/render/{runLayoutSlot.ts → fillLayoutSlot.ts} +1 -1
  44. package/src/render/isCommentNode.ts +3 -0
  45. package/src/render/isFragmentNode.ts +3 -0
  46. package/src/render/isTextNode.ts +3 -0
  47. package/src/render/moveRange.ts +9 -0
  48. package/src/render/nodeAnchor.ts +3 -3
  49. package/src/render/nodeCheckHydrationBreak.ts +2 -2
  50. package/src/render/nodeNext.ts +2 -2
  51. package/src/render/nodeRoot.ts +11 -2
  52. package/src/ssr.ts +2 -2
  53. package/src/types/ServerComponent.ts +1 -1
  54. package/test/attributes/components/output/Attributes-server.ts +4 -3
  55. package/test/attributes/components/temp/{Attributes-server-80f9f58fd6cb30df11867386d4f0b15b44401ebe.ts → Attributes-server-f4c59f5e4757ce0113907389902499efc36cfe38.ts} +4 -3
  56. package/test/await/components/Await.torp +10 -12
  57. package/test/await/components/output/Await-client.ts +6 -7
  58. package/test/await/components/output/Await-server.ts +6 -5
  59. package/test/await/components/temp/{Await-client-9c30564ea39457e614e60c0cc0a71c431e8a1e76.ts → Await-client-17b0e7c682fbff8518a440831620c1024b8be23a.ts} +6 -7
  60. package/test/await/components/temp/{Await-server-f02f39af3bb3344ca6b18a1d64d60b21913fba31.ts → Await-server-eb8d79f8abc791dd8e87f9713534cebf0eb2c854.ts} +6 -5
  61. package/test/bench/components/Bench.torp +1 -1
  62. package/test/bench/components/output/Bench-client.ts +238 -32
  63. package/test/bench/components/output/Bench-server.ts +21 -9
  64. package/test/bench/components/temp/Bench-client-4e18421473e97bac7c24b17ba14751ce14dd187e.ts +414 -0
  65. package/test/bench/components/temp/{Bench-server-00cefa588803c01ca4f2741c595e4f045cdd101e.ts → Bench-server-4648921af9bc146718d55a7e9fc288b47a57dfda.ts} +18 -6
  66. package/test/bind/components/BindComponent.torp +3 -18
  67. package/test/bind/components/BindText.torp +8 -10
  68. package/test/bind/components/output/BindComponent-client.ts +19 -30
  69. package/test/bind/components/output/BindComponent-server.ts +14 -20
  70. package/test/bind/components/output/BindText-client.ts +3 -3
  71. package/test/bind/components/output/BindText-server.ts +4 -3
  72. package/test/bind/components/temp/{BindComponent-client-6f650efb818a185ef33e1b071cfd77415a803dd3.ts → BindComponent-client-a59ee6a598341c64c79be633ae7b22cb594dd0bc.ts} +19 -30
  73. package/test/bind/components/temp/{BindComponent-server-2e6caf0cbbb2831eb4bfbd7dcd6cf4d5c422d047.ts → BindComponent-server-96120f1e75c77e02ba11ab719c225005e168d25f.ts} +14 -20
  74. package/test/bind/components/temp/{BindText-client-134676d616abbad6b8a7ec48df0a2e38cbfe3b87.ts → BindText-client-dac614203e672e51675b22a246983168a7c173ea.ts} +3 -3
  75. package/test/bind/components/temp/{BindText-server-807a1ddcb68410b30429cb088d2e204ed6f585b2.ts → BindText-server-c713033ef787587f752fc8e6282e3a8faeee9a08.ts} +4 -3
  76. package/test/build-server/build-server.test.ts +1 -1
  77. package/test/build-server/components/IfNested.torp +11 -13
  78. package/test/buildHtml.ts +1 -1
  79. package/test/buildOutputFiles.ts +4 -4
  80. package/test/child-component/components/ParentChild.torp +1 -3
  81. package/test/child-component/components/output/ParentChild-client.ts +4 -5
  82. package/test/child-component/components/output/ParentChild-server.ts +12 -8
  83. package/test/child-component/components/temp/{ParentChild-client-50ca7e499599209c9d674f2561413ca14a282c22.ts → ParentChild-client-198e4ebc2ef5277ad7147f69d5879946fbe2d6ec.ts} +4 -5
  84. package/test/child-component/components/temp/{ParentChild-server-5e4a7fa5f4cd1c7dbe6866819025d2c03bfc62cb.ts → ParentChild-server-55e809830788ae740608136cf66664fc5434a9cd.ts} +12 -8
  85. package/test/class/components/Class.torp +22 -24
  86. package/test/class/components/output/Class-client.ts +7 -9
  87. package/test/class/components/output/Class-server.ts +13 -10
  88. package/test/class/components/temp/{Class-client-de2491c550647203bea08727fa8c88f30654db0a.ts → Class-client-7defac0b98d9c9f303670c0372e329e31823f163.ts} +7 -9
  89. package/test/class/components/temp/Class-server-46563e9c3bf56b642ac496b60179decfd0b4e952.ts +43 -0
  90. package/test/component/components/output/Component-server.ts +8 -5
  91. package/test/component/components/output/Header-server.ts +4 -3
  92. package/test/component/components/temp/{Component-server-57f59c74599572da6322a67cb97848cfbfcf6968.ts → Component-server-2d4aa317e6c385036e07f4c3946fc18ba848c00d.ts} +8 -5
  93. package/test/component/components/temp/{Header-server-6969d20782edd8f99d4b5c5b7b5563ce26e6dc2d.ts → Header-server-91088d2a5a543287bfdf1a24d92b66db6ccd294d.ts} +4 -3
  94. package/test/console/components/output/Console-server.ts +4 -3
  95. package/test/console/components/temp/{Console-server-cfb2208b130d5f15403df19ae8341aaa1c9ad33a.ts → Console-server-7bc7f568e9c3626dca1bdafcb23186c2dbc59199.ts} +4 -3
  96. package/test/const/components/Const.torp +4 -6
  97. package/test/const/components/output/Const-client.ts +2 -2
  98. package/test/const/components/output/Const-server.ts +5 -4
  99. package/test/const/components/temp/{Const-client-7dff2758c14bfbd208e301a702ae1781e6daba1b.ts → Const-client-b0293a037d9ed7b6ad4591c153723a3c26d46029.ts} +2 -2
  100. package/test/const/components/temp/{Const-server-1cf6ed84f72d3b15b318b80937b8de1f2c0f188c.ts → Const-server-5fd2444a9ae7a676b7c4480e01e28f7f89624fdc.ts} +5 -4
  101. package/test/dummy/components/temp/ProfilePreview-client-e57ca1ac502e0ddcb3ef376dd5ef27add70090d1.ts +327 -0
  102. package/test/dummy/components/temp/ProfilePreview-server-9d3d0f8b4f80f634db6ba97d037ab07de004b4d3.ts +56 -0
  103. package/test/effects/components/For.torp +3 -5
  104. package/test/effects/components/If.torp +5 -7
  105. package/test/effects/components/NestedIf.torp +6 -8
  106. package/test/effects/components/output/For-client.ts +5 -6
  107. package/test/effects/components/output/For-server.ts +6 -5
  108. package/test/effects/components/output/If-client.ts +5 -7
  109. package/test/effects/components/output/If-server.ts +7 -6
  110. package/test/effects/components/output/NestedIf-client.ts +4 -6
  111. package/test/effects/components/output/NestedIf-server.ts +9 -8
  112. package/test/effects/components/temp/{For-client-35bf9bea43f53d6c0cf807f9e31500765fa0b455.ts → For-client-268e69779d5b744377af9b30df256a453adaf183.ts} +5 -6
  113. package/test/effects/components/temp/{For-server-efe60939d185315f4c9b567b6867c6d5af14d9aa.ts → For-server-b15b01b4daaf50fd95de790102089eb930e84e9b.ts} +6 -5
  114. package/test/effects/components/temp/{If-client-efb994796596d9d08f59a0ab5ffdacc74bd04545.ts → If-client-4df0e6fc27a6f7d60ce056fd65df687213f3a2f9.ts} +5 -7
  115. package/test/effects/components/temp/{If-server-2424b7b812d350d7eb8ff9afb1146807217320cd.ts → If-server-0a213ea232e0225d5a8ecb012ad418136b86fbe7.ts} +7 -6
  116. package/test/effects/components/temp/{NestedIf-client-845b3789b8a938439bff758bc9b3731d769c8ff6.ts → NestedIf-client-bfd381672c51febbe2f101f19afd5f6ff570ce7e.ts} +4 -6
  117. package/test/effects/components/temp/{NestedIf-server-ab260586490cb5afed31377d2226bb5a1fc30e2d.ts → NestedIf-server-6089abc72d6208e64d1818ddb624ad5c3f236afa.ts} +9 -8
  118. package/test/events/components/Increment.torp +9 -11
  119. package/test/events/components/output/Increment-client.ts +3 -3
  120. package/test/events/components/output/Increment-server.ts +4 -3
  121. package/test/events/components/temp/{Increment-client-1b5f9e231c5c4fc059d77ca0da632719283e5ac4.ts → Increment-client-db2fd3376f12b186a4276eac470bf10b7bf2da19.ts} +3 -3
  122. package/test/events/components/temp/{Increment-server-b084f43082e2ec31dbe5f9edc1cb6e37e4c8df9d.ts → Increment-server-062b9757192b84e5a6e247aa44e1e7887129293d.ts} +4 -3
  123. package/test/for/components/output/For-server.ts +6 -5
  124. package/test/for/components/output/ForEscape-server.ts +6 -5
  125. package/test/for/components/output/ForIn-server.ts +6 -5
  126. package/test/for/components/output/ForOf-server.ts +6 -5
  127. package/test/for/components/temp/{For-server-3b6ead39728c79206203c519a215390d07d80f7e.ts → For-server-082c156a9f047995bc55f9477295d8e3262614f5.ts} +6 -5
  128. package/test/for/components/temp/{ForEscape-server-ed906c8cd593a0b467073ada415734de31dc38d9.ts → ForEscape-server-2db43ff8397ddbb114b5bff3d88a63728184a811.ts} +6 -5
  129. package/test/for/components/temp/{ForIn-server-c8f13304a2ba235e091685256909fbfa50bdd5fd.ts → ForIn-server-fda7a21cbb8a7ad69c48d2a8533cc13fa98d54b6.ts} +6 -5
  130. package/test/for/components/temp/{ForOf-server-8c2c33ca6595bf0a5e952ca9971e595e18446623.ts → ForOf-server-cd2b01507304e25c34030755b915f56785375de8.ts} +6 -5
  131. package/test/function/components/Function.torp +8 -10
  132. package/test/function/components/output/Function-client.ts +3 -3
  133. package/test/function/components/output/Function-server.ts +5 -4
  134. package/test/function/components/temp/{Function-client-4e2168306756eb927d5ed4b673334b357eecaa74.ts → Function-client-2068eb8ae35b3157b8eda79addde6afd9f4d7006.ts} +3 -3
  135. package/test/function/components/temp/{Function-server-2b19d0cd881c31dc67132107c6e322a18701c318.ts → Function-server-4b66a728f6f1b170d678313238bdc9158356511e.ts} +5 -4
  136. package/test/html/components/output/Html-server.ts +4 -3
  137. package/test/html/components/temp/{Html-server-d159b0ef04b1f65ae4f9e05a7b44b21e7aa14cf9.ts → Html-server-4f73a2b0c5cd9b82666a99ec6a217c758d435008.ts} +4 -3
  138. package/test/hydrateComponent.ts +2 -3
  139. package/test/if/components/output/IfAfterIf-server.ts +8 -7
  140. package/test/if/components/output/IfElse-server.ts +7 -6
  141. package/test/if/components/output/IfElseIf-server.ts +8 -7
  142. package/test/if/components/output/IfFalse-server.ts +6 -5
  143. package/test/if/components/output/IfNested-server.ts +10 -9
  144. package/test/if/components/temp/{IfAfterIf-server-a5005147e7902d1a5a048c9fe07feb9804eb6560.ts → IfAfterIf-server-3e6a3beab27821c3e53290ee72eca811814aad38.ts} +8 -7
  145. package/test/if/components/temp/{IfElse-server-80d93e5fc4ceba7a645f7081fa11b177dbe730d0.ts → IfElse-server-1b5006dfad695f257c7453a79bde3944898fbf6d.ts} +7 -6
  146. package/test/if/components/temp/{IfElseIf-server-ddc7348705d51b02538301e0aa704130748992cf.ts → IfElseIf-server-11c65065e9e5640ad65cd0c37af07f1e57c4f49c.ts} +8 -7
  147. package/test/if/components/temp/{IfFalse-server-e8385013cfdde584b43cc0d71311cbb417859116.ts → IfFalse-server-40d07bc07e5edffd7386fb6016cd025b98175219.ts} +6 -5
  148. package/test/if/components/temp/{IfNested-server-285a5d8e0e0fcc8ccf421df152fdc00811782835.ts → IfNested-server-061ea3d56576a352be8a9db8424fae0f1d74cd36.ts} +10 -9
  149. package/test/mount/components/output/Mount-server.ts +4 -3
  150. package/test/mount/components/temp/{Mount-server-62f94f276c2d6c9048765a77b575cb21146917f1.ts → Mount-server-8564e4e0886ea754dfedf9a4a5fd82f0484c1d83.ts} +4 -3
  151. package/test/on-mount/components/output/OnMount-server.ts +4 -3
  152. package/test/on-mount/components/temp/{OnMount-server-c531f718eb68754ea6c3001d5db9c07c511e434c.ts → OnMount-server-2ff035e067926fadc284030075aa5da69a05cf31.ts} +4 -3
  153. package/test/party/components/AnswerButton.torp +2 -5
  154. package/test/party/components/AnswerButtonApp.torp +3 -5
  155. package/test/party/components/ColorSelect.torp +8 -10
  156. package/test/party/components/Counter.torp +2 -4
  157. package/test/party/components/CssStyle.torp +2 -4
  158. package/test/party/components/FunnyButtonApp.torp +2 -4
  159. package/test/party/components/InputHello.torp +2 -4
  160. package/test/party/components/IsAvailable.torp +3 -5
  161. package/test/party/components/PickPill.torp +5 -7
  162. package/test/party/components/TrafficLight.torp +12 -14
  163. package/test/party/components/UserProfile.torp +4 -6
  164. package/test/party/components/UserProfileContext.torp +6 -8
  165. package/test/party/components/UserProfileContextApp.torp +2 -4
  166. package/test/party/components/output/AnswerButton-client.ts +3 -4
  167. package/test/party/components/output/AnswerButton-server.ts +4 -3
  168. package/test/party/components/output/AnswerButtonApp-client.ts +4 -5
  169. package/test/party/components/output/AnswerButtonApp-server.ts +8 -5
  170. package/test/party/components/output/ColorSelect-client.ts +4 -4
  171. package/test/party/components/output/ColorSelect-server.ts +6 -5
  172. package/test/party/components/output/Colors-server.ts +6 -5
  173. package/test/party/components/output/Counter-client.ts +4 -4
  174. package/test/party/components/output/Counter-server.ts +4 -3
  175. package/test/party/components/output/CssStyle-client.ts +2 -2
  176. package/test/party/components/output/CssStyle-server.ts +4 -3
  177. package/test/party/components/output/DoubleCount-server.ts +4 -3
  178. package/test/party/components/output/FunnyButton-server.ts +7 -6
  179. package/test/party/components/output/FunnyButtonApp-client.ts +5 -8
  180. package/test/party/components/output/FunnyButtonApp-server.ts +15 -10
  181. package/test/party/components/output/HelloWorld-server.ts +4 -3
  182. package/test/party/components/output/InputFocused-server.ts +4 -3
  183. package/test/party/components/output/InputHello-client.ts +4 -4
  184. package/test/party/components/output/InputHello-server.ts +4 -3
  185. package/test/party/components/output/IsAvailable-client.ts +4 -4
  186. package/test/party/components/output/IsAvailable-server.ts +4 -3
  187. package/test/party/components/output/Name-server.ts +4 -3
  188. package/test/party/components/output/NameUpdate-server.ts +4 -3
  189. package/test/party/components/output/PageTitle-server.ts +4 -3
  190. package/test/party/components/output/PickPill-client.ts +4 -4
  191. package/test/party/components/output/PickPill-server.ts +4 -3
  192. package/test/party/components/output/Time-server.ts +4 -3
  193. package/test/party/components/output/TrafficLight-client.ts +3 -3
  194. package/test/party/components/output/TrafficLight-server.ts +8 -7
  195. package/test/party/components/output/UserProfile-client.ts +6 -6
  196. package/test/party/components/output/UserProfile-server.ts +4 -3
  197. package/test/party/components/output/UserProfileApp-server.ts +8 -5
  198. package/test/party/components/output/UserProfileContext-client.ts +5 -5
  199. package/test/party/components/output/UserProfileContext-server.ts +4 -3
  200. package/test/party/components/output/UserProfileContextApp-client.ts +5 -6
  201. package/test/party/components/output/UserProfileContextApp-server.ts +8 -5
  202. package/test/party/components/temp/{AnswerButton-client-ad8f8db36b7aaa68d8de5898a324bacfbe9f20df.ts → AnswerButton-client-890e28879c132eea21260eb82af832afc6a48507.ts} +3 -4
  203. package/test/party/components/temp/{AnswerButton-server-928b5d447afa865fa09e0142c79bb1f2c1b86875.ts → AnswerButton-server-01ffab9f6f92073640df2cf2cb5473407d82b24f.ts} +4 -3
  204. package/test/party/components/temp/{AnswerButtonApp-client-5661f07868550612bcdeee268b82c473af6a2613.ts → AnswerButtonApp-client-295a835cadf7e7ccec608f84ed01865dd8c73954.ts} +4 -5
  205. package/test/party/components/temp/{AnswerButtonApp-server-e4ea88e0f4d65508950594437e5e34424bd28897.ts → AnswerButtonApp-server-b458692868307e6e08ad3deed9c2db542c28dee0.ts} +8 -5
  206. package/test/party/components/temp/{ColorSelect-client-70bf59d6399d63c0eed421b9d370a1e5c97a89ca.ts → ColorSelect-client-5f74d3b38193a0c9b22317598cdbf2f56754ca2b.ts} +4 -4
  207. package/test/party/components/temp/{ColorSelect-server-90f83722bd85155ebb2b8ccdaf053cd28d3152be.ts → ColorSelect-server-cf0b1b533948a558e1705d9a7cca3c0b6ae8d315.ts} +6 -5
  208. package/test/party/components/temp/{Colors-server-e13d49ba57f7b0dc6fb10a333ec872f5207e1ff0.ts → Colors-server-b050714bfe752b88a99f6498f1b5c13abe6b56a5.ts} +6 -5
  209. package/test/party/components/temp/{Counter-client-3b876c148f2b14da1766eff77eb6c494f7be6414.ts → Counter-client-006caeda8766cb17a161da0c6f58f006f8f16e8b.ts} +4 -4
  210. package/test/party/components/temp/{Counter-server-7adf9376b38d97f1fd4b9c14108e6814e81f14ea.ts → Counter-server-931d36d8e4bcd114047bbfec8aa5f2fac0c2ce1e.ts} +4 -3
  211. package/test/party/components/temp/{CssStyle-client-37465dd48d1479db1bae513eb0b92c4e9a15e9ea.ts → CssStyle-client-6ec06cbc4b34344234d289f6c4a9e427efff85a7.ts} +2 -2
  212. package/test/party/components/temp/{CssStyle-server-90a950501a20bfa5feac84ca6d97898c25bce2ed.ts → CssStyle-server-fa4bad3c82930632730e3b6b9f0e9193cab6f777.ts} +4 -3
  213. package/test/party/components/temp/{DoubleCount-server-62c94483ebe9661e5ecc4f489787e32448ddcafa.ts → DoubleCount-server-8c013a97a08562deb6ad0f35e6e337203b0ddde9.ts} +4 -3
  214. package/test/party/components/temp/{FunnyButton-server-e0adab2be2d283acb8a8b580479ade999dc918e9.ts → FunnyButton-server-3fd55a1e1dc71c183a6cea68e4c4693c988b7533.ts} +7 -6
  215. package/test/party/components/temp/{FunnyButtonApp-client-daa929c6d64f67e4a1a387b884317a4bb615b5d4.ts → FunnyButtonApp-client-1f2258b8488469d4704366bc49f5c171d8a854ae.ts} +5 -8
  216. package/test/party/components/temp/{FunnyButtonApp-server-80d85ede7da558154a5aa17cd602d6724bf1c9cb.ts → FunnyButtonApp-server-6463d1c57adf61450d1415f0d76da4561ca3e798.ts} +15 -10
  217. package/test/party/components/temp/{HelloWorld-server-e0ed80e7531f303952a4af30d646263ff2e4ead6.ts → HelloWorld-server-50dd4393d55ecd33d5b7684c4f9ed41dfa0ceb5d.ts} +4 -3
  218. package/test/party/components/temp/{InputFocused-server-ee70758a515227c04788be0e298a79c277994ccd.ts → InputFocused-server-7b062b0dd7686ccc389c3c1a17f37e9a9bb19da9.ts} +4 -3
  219. package/test/party/components/temp/{InputHello-client-2a4cbd980534fde14b9d3e8a2f8e4f59a4f15d64.ts → InputHello-client-496d26bdeb6a168c4242e45f35d22e6ecbd211b9.ts} +4 -4
  220. package/test/party/components/temp/{InputHello-server-1b9dd5442ded022abe92a9075ca5a4bb90486cbe.ts → InputHello-server-a5fb3e0d8766c19d177a1f4d43d421c7da1b92ab.ts} +4 -3
  221. package/test/party/components/temp/{IsAvailable-client-3949f85aea0e935c3b59ab1389baee836eff1866.ts → IsAvailable-client-491b92b5e21ebe1bbab47b2e422c35fb996b55e1.ts} +4 -4
  222. package/test/party/components/temp/{IsAvailable-server-123daa1ae56b77defe6666faddb44ba4252dd0fb.ts → IsAvailable-server-c0da3c019ef13617d2ab51353eb3360ddaae4189.ts} +4 -3
  223. package/test/party/components/temp/{Name-server-a402418f1ca2d8a0e6403596ec03ec47b5ff40ec.ts → Name-server-0306b0c622d71323eb79a6b466d900380a0944f3.ts} +4 -3
  224. package/test/party/components/temp/{NameUpdate-server-b7dcc875e894a5606544fcd78bda575ea07632ca.ts → NameUpdate-server-a54ea11dc6b8f0b55d29ad29163cf27b9aa6ec40.ts} +4 -3
  225. package/test/party/components/temp/{PageTitle-server-12dcb4e437aaef227c704a2ee8bbdee55ca323dc.ts → PageTitle-server-8b34f9af760ab39e20a60e10ee3185e70d92e42b.ts} +4 -3
  226. package/test/party/components/temp/{PickPill-client-0f13aa652cb1bd45f57d5a249f8364e80204441a.ts → PickPill-client-a1f48b5c28db87eb57f0ac1f6b4370e4b2952de7.ts} +4 -4
  227. package/test/party/components/temp/{PickPill-server-f10dae4708e36775a5e1a5ad10c6c0c309335009.ts → PickPill-server-9596fdb8ff254cb4e1b99b714f3c5e8ea8aaa308.ts} +4 -3
  228. package/test/party/components/temp/{Time-server-8e0278a4b16925903f3c4ceedbf1332cde4921fa.ts → Time-server-da1cafe72c0f9a6dbf15a04dfa7282ae5187c101.ts} +4 -3
  229. package/test/party/components/temp/{TrafficLight-client-4a90675ca6157ed7701aefa0d9141575960a1d47.ts → TrafficLight-client-d04c95686ec0ad8a9c54710773945e9904224d5e.ts} +3 -3
  230. package/test/party/components/temp/{TrafficLight-server-04bb3b2f11322ccc97a9a8a8fbb26c3c99843042.ts → TrafficLight-server-6c0f66cdabfc7239b99665c3f7087462ee302e8a.ts} +8 -7
  231. package/test/party/components/temp/{UserProfile-client-11c2a928de5a5ed4cab45186f08ca09f6161afb5.ts → UserProfile-client-a59466813b208664f35e6e394858c3d61e040644.ts} +6 -6
  232. package/test/party/components/temp/{UserProfile-server-a0576b8d9dd15b3fab6c11758984c686ddfe2f66.ts → UserProfile-server-b10ec192e03dc818fe66dbd4aad14200e817e596.ts} +4 -3
  233. package/test/party/components/temp/{UserProfileApp-server-86c204098fd0ffbeded50372354488768b255156.ts → UserProfileApp-server-4b308db466a80bcacd190aa71f86cf4d2b6f2873.ts} +8 -5
  234. package/test/party/components/temp/{UserProfileContext-client-c97c077254210061b3c9ba561f681c0cf4f6167f.ts → UserProfileContext-client-7ef27199bd35b55b3dadd876174a2ef4b602b63f.ts} +5 -5
  235. package/test/party/components/temp/{UserProfileContext-server-2d32476b00448bdec6c1c45aac5087a5152c2471.ts → UserProfileContext-server-df958e4fc2de2242c556ffa61ddb58aa395de50c.ts} +4 -3
  236. package/test/party/components/temp/{UserProfileContextApp-client-05ce216919de6ffde56d1c2c39299173d9b611b3.ts → UserProfileContextApp-client-b3ef357f481dfb940e1c726690d57567fde2dc23.ts} +5 -6
  237. package/test/party/components/temp/{UserProfileContextApp-server-c970abaa8326db9a5efc3a5c64741743ae0dd1ca.ts → UserProfileContextApp-server-f8fe2b88db3d0dfa4dafd300006b25123cb8e3fb.ts} +8 -5
  238. package/test/props/components/Reactive.torp +2 -4
  239. package/test/props/components/output/Reactive-client.ts +4 -5
  240. package/test/props/components/output/Reactive-server.ts +12 -8
  241. package/test/props/components/temp/{Reactive-client-cf6e602b2f74fce8e9451b6c41c6f8ff8eab63a3.ts → Reactive-client-21a24e3b0a76140567db8a01975317c9c0e0ad5a.ts} +4 -5
  242. package/test/props/components/temp/{Reactive-server-206bcc8984bad12c5712661b77d000216cdfe66d.ts → Reactive-server-b6e37b5d3488ea74a260ca972906bfab30dde486.ts} +12 -8
  243. package/test/replace/components/Replace.torp +3 -5
  244. package/test/replace/components/output/Replace-client.ts +4 -5
  245. package/test/replace/components/output/Replace-server.ts +6 -5
  246. package/test/replace/components/temp/{Replace-client-2a9ee3430708b469fa31bbc6989eed5b2f22984d.ts → Replace-client-aee34e2e40c6f4380b61e9c7c8df9af1897f06cc.ts} +4 -5
  247. package/test/replace/components/temp/{Replace-server-9519943d193b681e1d7894a0d7952affdfb0660c.ts → Replace-server-3521251fa687ce42af3128d22b129fe1ec6ed411.ts} +6 -5
  248. package/test/slots/components/output/Article-server.ts +10 -9
  249. package/test/slots/components/output/Basic-server.ts +11 -8
  250. package/test/slots/components/output/Header-server.ts +7 -6
  251. package/test/slots/components/output/Let-server.ts +11 -8
  252. package/test/slots/components/output/List-server.ts +8 -7
  253. package/test/slots/components/output/Named-server.ts +14 -11
  254. package/test/slots/components/output/Unused-server.ts +8 -5
  255. package/test/slots/components/temp/{Article-server-b84141b05064f5ea1e4b535faafe459df0d875fb.ts → Article-server-50fa458663f115c0e80a3a2846de4607d8748ecb.ts} +10 -9
  256. package/test/slots/components/temp/{Basic-server-6b37594c9bf74e0c86a05b20213f69651e2cc937.ts → Basic-server-593e0ecbc8abbc90e8b06198698d244d110d97e2.ts} +11 -8
  257. package/test/slots/components/temp/{Header-server-d8e8ccb129d84478f0c4f8dc8ad1d2091188cc7b.ts → Header-server-d0f27afc4db322e605491e8f508e83f625e8dc38.ts} +7 -6
  258. package/test/slots/components/temp/{Let-server-8cad3b1199bec801bc3a1f2f3dbc20f2ef1e9741.ts → Let-server-f3c026e37c11628914c495083752d8cf285b2e85.ts} +11 -8
  259. package/test/slots/components/temp/{List-server-f4f63df4d19e15311da347284935a1bb530a8df4.ts → List-server-8d9c174fc4b3b232f3a9fd2f59843481f023d913.ts} +8 -7
  260. package/test/slots/components/temp/{Named-server-2aac48bb8c7300d1a8858917fe81edc17c6372fa.ts → Named-server-ac8d47db82d9a387c8baeee59b975bb810bad168.ts} +14 -11
  261. package/test/slots/components/temp/{Unused-server-6e832928d7db6c43c556e7bda8af34ac37c0d4c1.ts → Unused-server-1da99efc50ef70be0d9a0e5499353a17dc666936.ts} +8 -5
  262. package/test/special-component/components/output/BigTitle-server.ts +6 -5
  263. package/test/special-component/components/output/Component-server.ts +13 -10
  264. package/test/special-component/components/output/SmallTitle-server.ts +6 -5
  265. package/test/special-component/components/temp/{BigTitle-server-d8919a4c975e022c936584bd668917cb89aa8e20.ts → BigTitle-server-34af54c15cf575163c1ff8e63978cf5257f2347c.ts} +6 -5
  266. package/test/special-component/components/temp/{Component-server-14cd9beb57d6e833f75ab8c6624eb9841444ef63.ts → Component-server-ca4a2192477db4a32ad12f1a6a14d673717b0f7b.ts} +13 -10
  267. package/test/special-component/components/temp/{SmallTitle-server-0a9b5098e4dda96f8c1da30294d71b39997dd118.ts → SmallTitle-server-6c9aabb9139356397e04612b4dd9d849f871a280.ts} +6 -5
  268. package/test/special-element/components/output/Element-server.ts +4 -3
  269. package/test/special-element/components/temp/{Element-server-166d672256ef4635168de0090e490e48b569c7d6.ts → Element-server-011a942cc147900d8e074c084297d8e81f05aa27.ts} +4 -3
  270. package/test/special-head/components/Head.torp +3 -5
  271. package/test/special-head/components/output/Head-client.ts +2 -6
  272. package/test/special-head/components/output/Head-server.ts +4 -3
  273. package/test/special-head/components/temp/{Head-client-18616689a7d6f83ca076c9d825606b049de9d3ef.ts → Head-client-967d6ea24d46308af586c7553f4658412d94716c.ts} +2 -6
  274. package/test/special-head/components/temp/{Head-server-c0956653b544ff632e36da15d5f7623fa285953a.ts → Head-server-7cf8212c95197ed6320b47483524d8b1b3e5ae68.ts} +4 -3
  275. package/test/special-self/components/Self.torp +4 -6
  276. package/test/special-self/components/output/Self-client.ts +5 -6
  277. package/test/special-self/components/output/Self-server.ts +10 -7
  278. package/test/special-self/components/temp/{Self-client-43a0a90fac58867c88bf32221883e8da342a0295.ts → Self-client-883ca81e0e44df56f2290698e8d6b9955434a2ad.ts} +5 -6
  279. package/test/special-self/components/temp/{Self-server-b857c30c279a16dd81ad29567fb8abb9b2a0c239.ts → Self-server-69dac409fc984db7db97df8a30c5de6794f25655.ts} +10 -7
  280. package/test/style/components/output/Style-client.ts +1 -1
  281. package/test/style/components/output/Style-server.ts +5 -4
  282. package/test/style/components/temp/{Style-client-bc13f8dbb5f754e4eebb2473fc63a139ebf1ba92.ts → Style-client-ea018338497095f270308b2e73cfe6344721c6eb.ts} +1 -1
  283. package/test/style/components/temp/{Style-server-85720cb43e20ab000f98bc632c29454a51ae92d9.ts → Style-server-99ff9867ee067760a463a8282773b2eb09aa14f7.ts} +5 -4
  284. package/test/svg/components/output/Shape-server.ts +7 -6
  285. package/test/svg/components/temp/Shape-server-4ef7e80f09d3d4c930055d0a25184c48507e51de.ts +25 -0
  286. package/test/switch/components/Switch.torp +16 -18
  287. package/test/switch/components/output/Switch-client.ts +6 -8
  288. package/test/switch/components/output/Switch-server.ts +8 -7
  289. package/test/switch/components/temp/{Switch-client-30113fadf131c72e7c24160fa62068b651716896.ts → Switch-client-1482e2da8fe144d3e867dfad4618e0f364b91b49.ts} +6 -8
  290. package/test/switch/components/temp/{Switch-server-c1b5e1c657438ee3d8afdbf2166c5295cafc5604.ts → Switch-server-d709eb7a418752dd4203a8f824b78c5f308c8f47.ts} +8 -7
  291. package/test/text/components/Text.torp +5 -7
  292. package/test/text/components/output/Text-client.ts +4 -4
  293. package/test/text/components/output/Text-server.ts +4 -3
  294. package/test/text/components/temp/{Text-client-e335aae6d8aef389dfdbb5bee14e3dd3d41e86bd.ts → Text-client-ca2d5402358fba0df1db2353eed304b0dedb7971.ts} +4 -4
  295. package/test/text/components/temp/{Text-server-e37d33aa182f36461927d8ce36040bfd05e2f227.ts → Text-server-9df4606b85f044ea2b38660e799988461edacb27.ts} +4 -3
  296. package/test/watch-array/components/output/Array-server.ts +6 -5
  297. package/test/watch-array/components/output/ArrayEntries-server.ts +6 -5
  298. package/test/watch-array/components/output/ArrayIndexes-server.ts +6 -5
  299. package/test/watch-array/components/output/ArrayUnkeyed-server.ts +6 -5
  300. package/test/watch-array/components/temp/{Array-server-c907209008ac6177f614b62931a2bb1f1c3a04e1.ts → Array-server-48864ed3b67cae2bcedb216865776e44cc3a1dc2.ts} +6 -5
  301. package/test/watch-array/components/temp/{ArrayEntries-server-57c1ab0045fa4a02de95f69a65de6f54efe9850c.ts → ArrayEntries-server-401a989fd5f3a093d5d1a8ef1d4fd9d5107a6be3.ts} +6 -5
  302. package/test/watch-array/components/temp/{ArrayIndexes-server-f093878b94a37617e2e697a786caa680f75630a7.ts → ArrayIndexes-server-35c31a8a4597da68d39cf20bd6b90137695514de.ts} +6 -5
  303. package/test/watch-array/components/temp/{ArrayUnkeyed-server-c893fa024be07e5e7fce608c3ae456bdf2279dbe.ts → ArrayUnkeyed-server-19f195f0cf00760c520ac4c55aef474c8eae4c41.ts} +6 -5
  304. package/test/watch-object/components/Watched.torp +5 -7
  305. package/test/watch-object/components/output/Watched-client.ts +2 -2
  306. package/test/watch-object/components/output/Watched-server.ts +4 -3
  307. package/test/watch-object/components/temp/{Watched-client-d26e846bbeb8271ec5dc2a1ceb75b362af44d3bd.ts → Watched-client-ddba353c5a94f5a874e19d6d4cc6271a04e915c0.ts} +2 -2
  308. package/test/watch-object/components/temp/{Watched-server-312fca1e769d7594fc5bb6295ccf55b544dd2f4d.ts → Watched-server-e8e8c15b9fb5dda4051a289e9cd75d71078b9e95.ts} +4 -3
  309. package/dist/chunk-T6JGCJ5T.js +0 -45
  310. package/dist/chunk-T6JGCJ5T.js.map +0 -1
  311. package/src/render/getStyles.ts +0 -7
  312. package/src/render/isComment.ts +0 -3
  313. package/src/render/isText.ts +0 -3
  314. package/test/bench/components/temp/Bench-client-fca94b485c6263778751927240ab3ca4048d7a10.ts +0 -208
  315. package/test/class/components/temp/Class-server-c24c01d0d3a98169172aba453c183c4152705be9.ts +0 -40
  316. package/test/svg/components/temp/Shape-server-9951ff1dcc7aa0827f28d3f8d970813767115ae3.ts +0 -24
package/src/index.ts CHANGED
@@ -6,11 +6,12 @@ import t_animate from "./render/addAnimation";
6
6
  import t_event from "./render/addEvent";
7
7
  import t_add_fragment from "./render/addFragment";
8
8
  import t_apply_props from "./render/applyProps";
9
+ import t_class from "./render/buildClasses";
10
+ import t_style from "./render/buildStyles";
9
11
  import clearLayoutSlot from "./render/clearLayoutSlot";
12
+ import fillLayoutSlot from "./render/fillLayoutSlot";
10
13
  import t_fmt from "./render/formatText";
11
- import t_class from "./render/getClasses";
12
14
  import t_fragment from "./render/getFragment";
13
- import t_style from "./render/getStyles";
14
15
  import hydrate from "./render/hydrate";
15
16
  import mount from "./render/mount";
16
17
  import t_list_item from "./render/newListItem";
@@ -24,7 +25,6 @@ import t_pop_range from "./render/popRange";
24
25
  import t_push_range from "./render/pushRange";
25
26
  import t_run_control from "./render/runControl";
26
27
  import t_run_branch from "./render/runControlBranch";
27
- import runLayoutSlot from "./render/runLayoutSlot";
28
28
  import t_run_list from "./render/runList";
29
29
  import t_attribute from "./render/setAttribute";
30
30
  import t_dynamic from "./render/setDynamicElement";
@@ -35,7 +35,7 @@ import { type ServerSlotRender } from "./types/ServerSlotRender";
35
35
  import { type SlotRender } from "./types/SlotRender";
36
36
 
37
37
  // Mount and hydrate
38
- export { mount, hydrate, runLayoutSlot, clearLayoutSlot };
38
+ export { mount, hydrate, fillLayoutSlot, clearLayoutSlot };
39
39
 
40
40
  // Functions for the user that can be called from components
41
41
  export { $watch, $unwrap, $run, $mount };
@@ -1,6 +1,7 @@
1
1
  import animate from "../motion/animate";
2
2
  import $run from "./$run";
3
3
  import context from "./context";
4
+ import isFragmentNode from "./isFragmentNode";
4
5
 
5
6
  export default function addFragment(
6
7
  fragment: DocumentFragment,
@@ -24,7 +25,7 @@ export default function addFragment(
24
25
  }
25
26
  }
26
27
 
27
- let parentIsFragment = parent.nodeType === 11;
28
+ let parentIsFragment = isFragmentNode(parent);
28
29
 
29
30
  if (!hydrationNode) {
30
31
  // HACK: We need to be able to add fragments to new fragments as well as
@@ -1,10 +1,17 @@
1
- export default function getClasses(value: unknown, styleHash?: string): string {
2
- let classes: string[] = [];
3
- gatherNames("", value, classes);
4
- if (styleHash) {
5
- classes.push(styleHash);
1
+ export default function buildClasses(value: unknown, styleHash?: string): string {
2
+ if (typeof value === "string") {
3
+ if (styleHash) {
4
+ value += " " + styleHash;
5
+ }
6
+ return value;
7
+ } else {
8
+ let classes: string[] = [];
9
+ gatherNames("", value, classes);
10
+ if (styleHash) {
11
+ classes.push(styleHash);
12
+ }
13
+ return classes.join(" ");
6
14
  }
7
- return classes.join(" ");
8
15
  }
9
16
 
10
17
  function gatherNames(name: unknown, value: unknown, classes: string[]) {
@@ -0,0 +1,19 @@
1
+ export default function buildStyles(value: unknown): string {
2
+ if (typeof value === "string") {
3
+ return value;
4
+ } else {
5
+ let styles: string[] = [];
6
+ if (value) {
7
+ if (Array.isArray(value)) {
8
+ for (let v of value) {
9
+ styles.push(v);
10
+ }
11
+ } else if (typeof value === "object") {
12
+ for (let [n, v] of Object.entries(value)) {
13
+ styles.push(`${n}: ${v}`);
14
+ }
15
+ }
16
+ }
17
+ return styles.join("; ");
18
+ }
19
+ }
@@ -5,7 +5,7 @@ import newRange from "./newRange";
5
5
  import popRange from "./popRange";
6
6
  import pushRange from "./pushRange";
7
7
 
8
- export default function runLayoutSlot(
8
+ export default function fillLayoutSlot(
9
9
  component: Component,
10
10
  slot: SlotRender,
11
11
  parent: ParentNode,
@@ -0,0 +1,3 @@
1
+ export default function isCommentNode(node: Node | null | undefined): node is Comment {
2
+ return node?.nodeType === 8;
3
+ }
@@ -0,0 +1,3 @@
1
+ export default function isFragmentNode(node: Node | null | undefined): node is DocumentFragment {
2
+ return node?.nodeType === 11;
3
+ }
@@ -0,0 +1,3 @@
1
+ export default function isTextNode(node: Node | null | undefined): node is Text {
2
+ return node?.nodeType === 3;
3
+ }
@@ -1,8 +1,17 @@
1
1
  import { type Range } from "../types/Range";
2
+ import isFragmentNode from "./isFragmentNode";
2
3
 
3
4
  export default function moveRange(parent: Node, range: Range, before: ChildNode | null): void {
4
5
  const endNode = range.endNode || range.startNode;
5
6
  let currentNode = range.startNode;
7
+
8
+ // HACK: The parent may have once been a document fragment, but will now be
9
+ // in the document, so we will have to use the before element's parent,
10
+ // which should work as long as we are always passing a before element...
11
+ if (isFragmentNode(parent)) {
12
+ parent = before!.parentNode!;
13
+ }
14
+
6
15
  while (currentNode) {
7
16
  const nextNode = currentNode.nextSibling;
8
17
  parent.insertBefore(currentNode, before);
@@ -1,6 +1,6 @@
1
1
  import context from "./context";
2
2
  import { HYDRATION_END, HYDRATION_START } from "./hydrationMarkers";
3
- import isComment from "./isComment";
3
+ import isCommentNode from "./isCommentNode";
4
4
  import nodeNext from "./nodeNext";
5
5
 
6
6
  /**
@@ -19,7 +19,7 @@ import nodeNext from "./nodeNext";
19
19
  */
20
20
  export default function nodeAnchor(node: ChildNode): ChildNode {
21
21
  if (context.hydrationNode) {
22
- if (isComment(node) && node.data === HYDRATION_START) {
22
+ if (isCommentNode(node) && node.data === HYDRATION_START) {
23
23
  // Skip and remove the start node, setting the hydration node in
24
24
  // nodeNext
25
25
  let currentNode = nodeNext(node);
@@ -28,7 +28,7 @@ export default function nodeAnchor(node: ChildNode): ChildNode {
28
28
  // Go through siblings until we get to the end
29
29
  let level = 1;
30
30
  while (currentNode) {
31
- if (isComment(currentNode)) {
31
+ if (isCommentNode(currentNode)) {
32
32
  if (currentNode.data === HYDRATION_START) {
33
33
  level += 1;
34
34
  } else if (currentNode.data === HYDRATION_END) {
@@ -1,6 +1,6 @@
1
1
  import context from "./context";
2
2
  import { HYDRATION_BREAK } from "./hydrationMarkers";
3
- import isComment from "./isComment";
3
+ import isCommentNode from "./isCommentNode";
4
4
 
5
5
  // TODO: It would be good to remove this, if possible
6
6
 
@@ -14,7 +14,7 @@ import isComment from "./isComment";
14
14
  */
15
15
  export default function nodeCheckHydrationBreak(node: ChildNode | null): ChildNode | null {
16
16
  if (context.hydrationNode) {
17
- if (node && isComment(node) && node.data === HYDRATION_BREAK) {
17
+ if (node && isCommentNode(node) && node.data === HYDRATION_BREAK) {
18
18
  let comment = node;
19
19
  node = node.nextSibling;
20
20
  comment.remove();
@@ -1,5 +1,5 @@
1
1
  import context from "./context";
2
- import isText from "./isText";
2
+ import isTextNode from "./isTextNode";
3
3
  import nodeCheckHydrationBreak from "./nodeCheckHydrationBreak";
4
4
 
5
5
  /**
@@ -13,7 +13,7 @@ import nodeCheckHydrationBreak from "./nodeCheckHydrationBreak";
13
13
  export default function nodeNext(node: ChildNode, text = false): ChildNode {
14
14
  // If the required node is a text node, and we already have one, just use
15
15
  // it. This is caused by text nodes being merged in HTML
16
- if (context.hydrationNode && text && isText(node)) {
16
+ if (context.hydrationNode && text && isTextNode(node)) {
17
17
  return node;
18
18
  }
19
19
 
@@ -1,5 +1,7 @@
1
1
  import context from "./context";
2
- import isText from "./isText";
2
+ import { HYDRATION_START } from "./hydrationMarkers";
3
+ import isCommentNode from "./isCommentNode";
4
+ import isTextNode from "./isTextNode";
3
5
 
4
6
  /**
5
7
  * Gets the first child in a fragment.
@@ -16,11 +18,18 @@ export default function nodeRoot(parent: Node, text = false): ChildNode {
16
18
  // If the root node we need is a text node, and the hydration node is
17
19
  // not a text node but the previous node is, use the previous node. This
18
20
  // is caused by text nodes being merged in HTML
19
- if (text && !isText(rootNode) && isText(rootNode.previousSibling)) {
21
+ if (text && !isTextNode(rootNode) && isTextNode(rootNode.previousSibling)) {
20
22
  rootNode = rootNode.previousSibling;
21
23
  context.hydrationNode = rootNode;
22
24
  }
23
25
 
26
+ // HACK: If the root node is a hydration start comment node, get the
27
+ // next one instead
28
+ if (isCommentNode(rootNode) && rootNode.data === HYDRATION_START) {
29
+ rootNode = rootNode.nextSibling!;
30
+ context.hydrationNode = rootNode;
31
+ }
32
+
24
33
  // If hydrating, set the active range's start node
25
34
  const range = context.activeRange;
26
35
  if (range && !range.startNode) {
package/src/ssr.ts CHANGED
@@ -2,10 +2,10 @@ import $mount from "./render/$serverMount";
2
2
  import $run from "./render/$serverRun";
3
3
  import $unwrap from "./render/$serverUnwrap";
4
4
  import $watch from "./render/$serverWatch";
5
+ import t_class from "./render/buildClasses";
6
+ import t_style from "./render/buildStyles";
5
7
  import t_attr from "./render/formatAttributeText";
6
8
  import t_fmt from "./render/formatText";
7
- import t_class from "./render/getClasses";
8
- import t_style from "./render/getStyles";
9
9
  import { type ServerSlotRender } from "./types/ServerSlotRender";
10
10
 
11
11
  export { $watch, $unwrap, $run, $mount, t_fmt, t_attr, t_class, t_style };
@@ -7,4 +7,4 @@ export type ServerComponent = (
7
7
  $props?: Record<string, any>,
8
8
  $context?: Record<string, any>,
9
9
  $slots?: Record<string, ServerSlotRender>,
10
- ) => string;
10
+ ) => { body: string; head: string };
@@ -11,8 +11,9 @@ export default function Attributes(
11
11
  $props ??= {};
12
12
 
13
13
  /* User interface */
14
- let $output = "";
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> `;
14
+ let t_body = "";
15
+ let t_head = "";
16
+ t_body += ` <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> `;
16
17
 
17
- return $output;
18
+ return { body: t_body, head: t_head };
18
19
  }
@@ -11,8 +11,9 @@ export default function Attributes(
11
11
  $props ??= {};
12
12
 
13
13
  /* User interface */
14
- let $output = "";
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> `;
14
+ let t_body = "";
15
+ let t_head = "";
16
+ t_body += ` <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> `;
16
17
 
17
- return $output;
18
+ return { body: t_body, head: t_head };
18
19
  }
@@ -17,17 +17,15 @@ export default function Await() {
17
17
  }
18
18
 
19
19
  @render {
20
- <div>
21
- @await ($state.guesser) {
22
- <p>Hmm...</p>
23
- } then (number) {
24
- <p>Is it a number?</p>
25
- } catch (ex) {
26
- <p class="error">Something went wrong: {ex}!</p>
27
- }
28
- <button onclick={() => $state.guesser = guessNumber(100)}>
29
- Guess again
30
- </button>
31
- </div>
20
+ @await ($state.guesser) {
21
+ <p>Hmm...</p>
22
+ } then (number) {
23
+ <p>Is it a number?</p>
24
+ } catch (ex) {
25
+ <p class="error">Something went wrong: {ex}!</p>
26
+ }
27
+ <button onclick={() => $state.guesser = guessNumber(100)}>
28
+ Guess again
29
+ </button>
32
30
  }
33
31
  }
@@ -46,11 +46,10 @@ export default function Await(
46
46
  /* User interface */
47
47
  const t_fragments: DocumentFragment[] = [];
48
48
 
49
- const t_fragment_0 = t_fragment($parent.ownerDocument!, t_fragments, 0, ` <div> <!> <button> Guess again </button> </div> `);
49
+ const t_fragment_0 = t_fragment($parent.ownerDocument!, t_fragments, 0, ` <!> <button> Guess again </button> `);
50
50
  // @ts-ignore
51
51
  const t_root_0 = t_root(t_fragment_0, true);
52
- const t_await_parent_1 = t_next(t_root_0) as HTMLElement;
53
- let t_await_anchor_1 = t_anchor(t_next(t_child(t_await_parent_1))) as HTMLElement;
52
+ let t_await_anchor_1 = t_anchor(t_next(t_root_0)) as HTMLElement;
54
53
 
55
54
  /* @await */
56
55
  const t_await_range_1 = t_range();
@@ -64,7 +63,7 @@ export default function Await(
64
63
  const t_root_1 = t_root(t_fragment_1, true);
65
64
  // @ts-ignore
66
65
  const t_text_1 = t_next(t_next(t_root_1), true);
67
- t_add_fragment(t_fragment_1, t_await_parent_1, t_before, t_text_1);
66
+ t_add_fragment(t_fragment_1, t_fragment_0, t_before, t_text_1);
68
67
  t_next(t_text_1);
69
68
  });
70
69
  ((token) => {
@@ -78,7 +77,7 @@ export default function Await(
78
77
  const t_root_2 = t_root(t_fragment_2, true);
79
78
  // @ts-ignore
80
79
  const t_text_2 = t_next(t_next(t_root_2), true);
81
- t_add_fragment(t_fragment_2, t_await_parent_1, t_before, t_text_2);
80
+ t_add_fragment(t_fragment_2, t_fragment_0, t_before, t_text_2);
82
81
  t_next(t_text_2);
83
82
  });
84
83
  t_pop_range(t_old_range_1);
@@ -97,7 +96,7 @@ export default function Await(
97
96
  $run(function setTextContent() {
98
97
  t_text_3.textContent = `Something went wrong: ${t_fmt(ex)}!`;
99
98
  });
100
- t_add_fragment(t_fragment_3, t_await_parent_1, t_before, t_text_4);
99
+ t_add_fragment(t_fragment_3, t_fragment_0, t_before, t_text_4);
101
100
  t_next(t_text_4);
102
101
  });
103
102
  t_pop_range(t_old_range_1);
@@ -108,7 +107,7 @@ export default function Await(
108
107
 
109
108
  const t_button_1 = t_next(t_next(t_await_anchor_1, true)) as HTMLElement;
110
109
  // @ts-ignore
111
- const t_text_5 = t_next(t_await_parent_1, true);
110
+ const t_text_5 = t_next(t_button_1, true);
112
111
  t_event(t_button_1, "click", () => $state.guesser = guessNumber(100));
113
112
  t_add_fragment(t_fragment_0, $parent, $anchor, t_text_5);
114
113
  t_next(t_text_5);
@@ -27,10 +27,11 @@ export default function Await(
27
27
  }
28
28
 
29
29
  /* User interface */
30
- let $output = "";
31
- $output += ` <div> <![>`;
32
- $output += ` <p>Hmm...</p> `;
33
- $output += `<!]><!> <button> Guess again </button> </div> `;
30
+ let t_body = "";
31
+ let t_head = "";
32
+ t_body += ` <![>`;
33
+ t_body += ` <p>Hmm...</p> `;
34
+ t_body += `<!]><!> <button> Guess again </button> `;
34
35
 
35
- return $output;
36
+ return { body: t_body, head: t_head };
36
37
  }
@@ -46,11 +46,10 @@ export default function Await(
46
46
  /* User interface */
47
47
  const t_fragments: DocumentFragment[] = [];
48
48
 
49
- const t_fragment_0 = t_fragment($parent.ownerDocument!, t_fragments, 0, ` <div> <!> <button> Guess again </button> </div> `);
49
+ const t_fragment_0 = t_fragment($parent.ownerDocument!, t_fragments, 0, ` <!> <button> Guess again </button> `);
50
50
  // @ts-ignore
51
51
  const t_root_0 = t_root(t_fragment_0, true);
52
- const t_await_parent_1 = t_next(t_root_0) as HTMLElement;
53
- let t_await_anchor_1 = t_anchor(t_next(t_child(t_await_parent_1))) as HTMLElement;
52
+ let t_await_anchor_1 = t_anchor(t_next(t_root_0)) as HTMLElement;
54
53
 
55
54
  /* @await */
56
55
  const t_await_range_1 = t_range();
@@ -64,7 +63,7 @@ export default function Await(
64
63
  const t_root_1 = t_root(t_fragment_1, true);
65
64
  // @ts-ignore
66
65
  const t_text_1 = t_next(t_next(t_root_1), true);
67
- t_add_fragment(t_fragment_1, t_await_parent_1, t_before, t_text_1);
66
+ t_add_fragment(t_fragment_1, t_fragment_0, t_before, t_text_1);
68
67
  t_next(t_text_1);
69
68
  });
70
69
  ((token) => {
@@ -78,7 +77,7 @@ export default function Await(
78
77
  const t_root_2 = t_root(t_fragment_2, true);
79
78
  // @ts-ignore
80
79
  const t_text_2 = t_next(t_next(t_root_2), true);
81
- t_add_fragment(t_fragment_2, t_await_parent_1, t_before, t_text_2);
80
+ t_add_fragment(t_fragment_2, t_fragment_0, t_before, t_text_2);
82
81
  t_next(t_text_2);
83
82
  });
84
83
  t_pop_range(t_old_range_1);
@@ -97,7 +96,7 @@ export default function Await(
97
96
  $run(function setTextContent() {
98
97
  t_text_3.textContent = `Something went wrong: ${t_fmt(ex)}!`;
99
98
  });
100
- t_add_fragment(t_fragment_3, t_await_parent_1, t_before, t_text_4);
99
+ t_add_fragment(t_fragment_3, t_fragment_0, t_before, t_text_4);
101
100
  t_next(t_text_4);
102
101
  });
103
102
  t_pop_range(t_old_range_1);
@@ -108,7 +107,7 @@ export default function Await(
108
107
 
109
108
  const t_button_1 = t_next(t_next(t_await_anchor_1, true)) as HTMLElement;
110
109
  // @ts-ignore
111
- const t_text_5 = t_next(t_await_parent_1, true);
110
+ const t_text_5 = t_next(t_button_1, true);
112
111
  t_event(t_button_1, "click", () => $state.guesser = guessNumber(100));
113
112
  t_add_fragment(t_fragment_0, $parent, $anchor, t_text_5);
114
113
  t_next(t_text_5);
@@ -27,10 +27,11 @@ export default function Await(
27
27
  }
28
28
 
29
29
  /* User interface */
30
- let $output = "";
31
- $output += ` <div> <![>`;
32
- $output += ` <p>Hmm...</p> `;
33
- $output += `<!]><!> <button> Guess again </button> </div> `;
30
+ let t_body = "";
31
+ let t_head = "";
32
+ t_body += ` <![>`;
33
+ t_body += ` <p>Hmm...</p> `;
34
+ t_body += `<!]><!> <button> Guess again </button> `;
34
35
 
35
- return $output;
36
+ return { body: t_body, head: t_head };
36
37
  }
@@ -147,7 +147,7 @@ export default function Bench() {
147
147
  <tbody>
148
148
  @for (let row of $state.data) {
149
149
  @key = row.id
150
- <tr :class={{ danger: $state.selected === row.id }}>
150
+ <tr class={{ danger: $state.selected === row.id }}>
151
151
  <td class="col-md-1">{row.id}</td>
152
152
  <td class="col-md-4">
153
153
  <a onclick={() => $state.selected = row.id}>