@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/CHANGELOG.md CHANGED
@@ -1,5 +1,23 @@
1
1
  # @torpor/view
2
2
 
3
+ ## 0.2.0
4
+
5
+ ### Minor Changes
6
+
7
+ - b716d5c: Feat: inline styles during SSR
8
+
9
+ ### Patch Changes
10
+
11
+ - c38f914: Fix: moving a range that was in a fragment
12
+ - 995d950: Fix: merge :class and class (making :class obsolete)
13
+ - 014bda0: Fix: skip hydration start when getting the root
14
+
15
+ ## 0.1.11
16
+
17
+ ### Patch Changes
18
+
19
+ - 741a289: !Refactor: rename runLayoutSlot to fillLayoutSlot
20
+
3
21
  ## 0.1.10
4
22
 
5
23
  ### Patch Changes
package/README.md CHANGED
@@ -210,7 +210,7 @@ export default function Component($props: { name: string }) {
210
210
 
211
211
  function TaskItem() {
212
212
  @render {
213
- <li :class={{ done: $props.task.done }}>
213
+ <li class={{ done: $props.task.done }}>
214
214
  <input type="checkbox" &checked={$props.task.done} />
215
215
  {$props.task.text}
216
216
  </li>
@@ -4,12 +4,12 @@
4
4
  */
5
5
  type Cleanup = () => void;
6
6
 
7
- declare function formatText(value: any): string;
7
+ declare function buildClasses(value: unknown, styleHash?: string): string;
8
8
 
9
- declare function getClasses(value: unknown, styleHash?: string): string;
9
+ declare function buildStyles(value: unknown): string;
10
10
 
11
- declare function getStyles(value: Record<string, any>): string;
11
+ declare function formatText(value: any): string;
12
12
 
13
13
  type ServerSlotRender = ($props?: Record<PropertyKey, any>, $context?: Record<PropertyKey, any>) => void;
14
14
 
15
- export { type Cleanup as C, type ServerSlotRender as S, getStyles as a, formatText as f, getClasses as g };
15
+ export { type Cleanup as C, type ServerSlotRender as S, buildStyles as a, buildClasses as b, formatText as f };
@@ -4,12 +4,12 @@
4
4
  */
5
5
  type Cleanup = () => void;
6
6
 
7
- declare function formatText(value: any): string;
7
+ declare function buildClasses(value: unknown, styleHash?: string): string;
8
8
 
9
- declare function getClasses(value: unknown, styleHash?: string): string;
9
+ declare function buildStyles(value: unknown): string;
10
10
 
11
- declare function getStyles(value: Record<string, any>): string;
11
+ declare function formatText(value: any): string;
12
12
 
13
13
  type ServerSlotRender = ($props?: Record<PropertyKey, any>, $context?: Record<PropertyKey, any>) => void;
14
14
 
15
- export { type Cleanup as C, type ServerSlotRender as S, getStyles as a, formatText as f, getClasses as g };
15
+ export { type Cleanup as C, type ServerSlotRender as S, buildStyles as a, buildClasses as b, formatText as f };
@@ -0,0 +1,64 @@
1
+ // src/render/buildClasses.ts
2
+ function buildClasses(value, styleHash) {
3
+ if (typeof value === "string") {
4
+ if (styleHash) {
5
+ value += " " + styleHash;
6
+ }
7
+ return value;
8
+ } else {
9
+ let classes = [];
10
+ gatherNames("", value, classes);
11
+ if (styleHash) {
12
+ classes.push(styleHash);
13
+ }
14
+ return classes.join(" ");
15
+ }
16
+ }
17
+ function gatherNames(name, value, classes) {
18
+ if (value) {
19
+ if (Array.isArray(value)) {
20
+ for (let v of value) {
21
+ gatherNames(v, v, classes);
22
+ }
23
+ } else if (typeof value === "object") {
24
+ for (let [n, v] of Object.entries(value)) {
25
+ gatherNames(n, v, classes);
26
+ }
27
+ } else {
28
+ classes.push(name);
29
+ }
30
+ }
31
+ }
32
+
33
+ // src/render/buildStyles.ts
34
+ function buildStyles(value) {
35
+ if (typeof value === "string") {
36
+ return value;
37
+ } else {
38
+ let styles = [];
39
+ if (value) {
40
+ if (Array.isArray(value)) {
41
+ for (let v of value) {
42
+ styles.push(v);
43
+ }
44
+ } else if (typeof value === "object") {
45
+ for (let [n, v] of Object.entries(value)) {
46
+ styles.push(`${n}: ${v}`);
47
+ }
48
+ }
49
+ }
50
+ return styles.join("; ");
51
+ }
52
+ }
53
+
54
+ // src/render/formatText.ts
55
+ function formatText(value) {
56
+ return value ?? "";
57
+ }
58
+
59
+ export {
60
+ buildClasses,
61
+ buildStyles,
62
+ formatText
63
+ };
64
+ //# sourceMappingURL=chunk-XNO4YEJ3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/render/buildClasses.ts","../src/render/buildStyles.ts","../src/render/formatText.ts"],"sourcesContent":["export default function buildClasses(value: unknown, styleHash?: string): string {\n\tif (typeof value === \"string\") {\n\t\tif (styleHash) {\n\t\t\tvalue += \" \" + styleHash;\n\t\t}\n\t\treturn value;\n\t} else {\n\t\tlet classes: string[] = [];\n\t\tgatherNames(\"\", value, classes);\n\t\tif (styleHash) {\n\t\t\tclasses.push(styleHash);\n\t\t}\n\t\treturn classes.join(\" \");\n\t}\n}\n\nfunction gatherNames(name: unknown, value: unknown, classes: string[]) {\n\tif (value) {\n\t\tif (Array.isArray(value)) {\n\t\t\tfor (let v of value) {\n\t\t\t\tgatherNames(v, v, classes);\n\t\t\t}\n\t\t} else if (typeof value === \"object\") {\n\t\t\tfor (let [n, v] of Object.entries(value)) {\n\t\t\t\tgatherNames(n, v, classes);\n\t\t\t}\n\t\t} else {\n\t\t\tclasses.push(name as string);\n\t\t}\n\t}\n}\n","export default function buildStyles(value: unknown): string {\n\tif (typeof value === \"string\") {\n\t\treturn value;\n\t} else {\n\t\tlet styles: string[] = [];\n\t\tif (value) {\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\tfor (let v of value) {\n\t\t\t\t\tstyles.push(v);\n\t\t\t\t}\n\t\t\t} else if (typeof value === \"object\") {\n\t\t\t\tfor (let [n, v] of Object.entries(value)) {\n\t\t\t\t\tstyles.push(`${n}: ${v}`);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn styles.join(\"; \");\n\t}\n}\n","export default function formatText(value: any): string {\n\treturn value ?? \"\";\n}\n"],"mappings":";AAAe,SAAR,aAA8B,OAAgB,WAA4B;AAChF,MAAI,OAAO,UAAU,UAAU;AAC9B,QAAI,WAAW;AACd,eAAS,MAAM;AAAA,IAChB;AACA,WAAO;AAAA,EACR,OAAO;AACN,QAAI,UAAoB,CAAC;AACzB,gBAAY,IAAI,OAAO,OAAO;AAC9B,QAAI,WAAW;AACd,cAAQ,KAAK,SAAS;AAAA,IACvB;AACA,WAAO,QAAQ,KAAK,GAAG;AAAA,EACxB;AACD;AAEA,SAAS,YAAY,MAAe,OAAgB,SAAmB;AACtE,MAAI,OAAO;AACV,QAAI,MAAM,QAAQ,KAAK,GAAG;AACzB,eAAS,KAAK,OAAO;AACpB,oBAAY,GAAG,GAAG,OAAO;AAAA,MAC1B;AAAA,IACD,WAAW,OAAO,UAAU,UAAU;AACrC,eAAS,CAAC,GAAG,CAAC,KAAK,OAAO,QAAQ,KAAK,GAAG;AACzC,oBAAY,GAAG,GAAG,OAAO;AAAA,MAC1B;AAAA,IACD,OAAO;AACN,cAAQ,KAAK,IAAc;AAAA,IAC5B;AAAA,EACD;AACD;;;AC9Be,SAAR,YAA6B,OAAwB;AAC3D,MAAI,OAAO,UAAU,UAAU;AAC9B,WAAO;AAAA,EACR,OAAO;AACN,QAAI,SAAmB,CAAC;AACxB,QAAI,OAAO;AACV,UAAI,MAAM,QAAQ,KAAK,GAAG;AACzB,iBAAS,KAAK,OAAO;AACpB,iBAAO,KAAK,CAAC;AAAA,QACd;AAAA,MACD,WAAW,OAAO,UAAU,UAAU;AACrC,iBAAS,CAAC,GAAG,CAAC,KAAK,OAAO,QAAQ,KAAK,GAAG;AACzC,iBAAO,KAAK,GAAG,CAAC,KAAK,CAAC,EAAE;AAAA,QACzB;AAAA,MACD;AAAA,IACD;AACA,WAAO,OAAO,KAAK,IAAI;AAAA,EACxB;AACD;;;AClBe,SAAR,WAA4B,OAAoB;AACtD,SAAO,SAAS;AACjB;","names":[]}
package/dist/compile.cjs CHANGED
@@ -956,16 +956,21 @@ function buildComponentNode(node, status, b, root = false) {
956
956
  value = value.substring(1, value.length - 1);
957
957
  buildRun("setProp", `${propsName}["${name}"] = ${value};`, status, b);
958
958
  buildRun("setBinding", `${value} = ${propsName}["${name}"];`, status, b);
959
- } else if (name === ":class" && value != null && isFullyReactive(value)) {
959
+ } else if ((name === "class" || name === ":class") && value != null) {
960
960
  status.imports.add("t_class");
961
- value = value.substring(1, value.length - 1);
961
+ if (isFullyReactive(value)) {
962
+ value = value.substring(1, value.length - 1);
963
+ }
964
+ const params = [value];
962
965
  if (node.scopeStyles) {
963
- value += `, "torp-${status.styleHash}"`;
966
+ params.push(`"torp-${status.styleHash}"`);
964
967
  }
965
- buildRun("setClasses", `${propsName}["class"] = t_class(${value});`, status, b);
966
- } else if (name === ":style" && value != null && isFullyReactive(value)) {
968
+ buildRun("setClasses", `${propsName}["class"] = t_class(${params.join(", ")});`, status, b);
969
+ } else if ((name === "style" || name === ":style") && value != null) {
967
970
  status.imports.add("t_style");
968
- value = value.substring(1, value.length - 1);
971
+ if (isFullyReactive(value)) {
972
+ value = value.substring(1, value.length - 1);
973
+ }
969
974
  buildRun("setStyles", `${propsName}["style"] = t_style(${value});`, status, b);
970
975
  } else if (value != null) {
971
976
  let fullyReactive = isFullyReactive(value);
@@ -975,9 +980,6 @@ function buildComponentNode(node, status, b, root = false) {
975
980
  } else if (partlyReactive) {
976
981
  value = `\`${trimQuotes(value).replaceAll("{", "${")}\``;
977
982
  }
978
- if (name === "class") {
979
- value = `"${trimQuotes(value)} torp-${status.styleHash}"`;
980
- }
981
983
  const setProp = `${propsName}["${name}"] = ${value};`;
982
984
  if (fullyReactive || partlyReactive) {
983
985
  buildRun("setProp", setProp, status, b);
@@ -1564,13 +1566,13 @@ function buildHeadNode(node, status, b) {
1564
1566
  status.imports.add("$run");
1565
1567
  b.append(`
1566
1568
  $run(function runHead() {
1567
- const t_head_el = document.createElement("${node.tagName}");
1568
- document.getElementsByTagName("head")[0].appendChild(t_head_el);`);
1569
+ const t_headel = document.createElement("${node.tagName}");
1570
+ document.getElementsByTagName("head")[0].appendChild(t_headel);`);
1569
1571
  for (let { name, value } of node.attributes) {
1570
1572
  if (name.startsWith("{") && name.endsWith("}")) {
1571
1573
  name = name.substring(1, name.length - 1);
1572
1574
  const propName = name.split(".").at(-1);
1573
- buildRun("setAttribute", `t_head_el.setAttribute("${propName}", ${name});`, status, b);
1575
+ buildRun("setAttribute", `t_headel.setAttribute("${propName}", ${name});`, status, b);
1574
1576
  } else if (value != null && isReactive(value)) {
1575
1577
  if (isFullyReactive(value)) {
1576
1578
  value = value.substring(1, value.length - 1);
@@ -1578,10 +1580,10 @@ function buildHeadNode(node, status, b) {
1578
1580
  value = `\`${trimQuotes(value).replaceAll("{", "${")}\``;
1579
1581
  }
1580
1582
  status.imports.add("t_attribute");
1581
- buildRun("setAttribute", `t_attribute(t_head_el, "${name}", ${value});`, status, b);
1583
+ buildRun("setAttribute", `t_attribute(t_headel, "${name}", ${value});`, status, b);
1582
1584
  } else if (value != null) {
1583
1585
  status.imports.add("t_attribute");
1584
- b.append(`t_attribute(t_head_el, "${name}", ${value});`);
1586
+ b.append(`t_attribute(t_headel, "${name}", ${value});`);
1585
1587
  }
1586
1588
  }
1587
1589
  b.append(`
@@ -1619,17 +1621,13 @@ function buildElementAttributes(node, varName, status, b) {
1619
1621
  buildEventAttribute(varName, name, value, status, b);
1620
1622
  } else if (name.startsWith(":transition")) {
1621
1623
  buildTransitionAttribute(node, varName, name, value, status, b);
1622
- } else if (name === "class") {
1623
- if (node.scopeStyles) {
1624
- value += `+ "torp-${status.styleHash}"`;
1625
- }
1626
- buildRun("setClassName", `${varName}.className = ${value};`, status, b);
1627
- } else if (name === ":class") {
1624
+ } else if (name === "class" || name === ":class") {
1628
1625
  status.imports.add("t_class");
1626
+ const params = [value];
1629
1627
  if (node.scopeStyles) {
1630
- value += `, "torp-${status.styleHash}"`;
1628
+ params.push(`"torp-${status.styleHash}"`);
1631
1629
  }
1632
- buildRun("setClasses", `${varName}.className = t_class(${value});`, status, b);
1630
+ buildRun("setClasses", `${varName}.className = t_class(${params.join(", ")});`, status, b);
1633
1631
  } else if (name === ":style") {
1634
1632
  status.imports.add("t_style");
1635
1633
  buildRun("setStyles", `${varName}.setAttribute("style", t_style(${value}));`, status, b);
@@ -2144,7 +2142,7 @@ function buildStyleAttribute(attribute, b) {
2144
2142
  function buildServerComponentNode(node, status, b) {
2145
2143
  status.output += HYDRATION_START_COMMENT;
2146
2144
  if (status.output) {
2147
- b.append(`$output += \`${status.output}\`;`);
2145
+ b.append(`t_body += \`${status.output}\`;`);
2148
2146
  status.output = "";
2149
2147
  }
2150
2148
  const componentHasProps = node.attributes.length;
@@ -2156,16 +2154,21 @@ function buildServerComponentNode(node, status, b) {
2156
2154
  name = name.substring(1, name.length - 1);
2157
2155
  const propName = name.split(".").at(-1);
2158
2156
  b.append(`${propsName}["${propName}"] = ${name};`);
2159
- } else if (name === ":class" && value != null && isFullyReactive(value)) {
2157
+ } else if ((name === "class" || name === ":class") && value != null) {
2160
2158
  status.imports.add("t_class");
2161
- value = value.substring(1, value.length - 1);
2159
+ if (isFullyReactive(value)) {
2160
+ value = value.substring(1, value.length - 1);
2161
+ }
2162
+ const params = [value];
2162
2163
  if (node.scopeStyles) {
2163
- value += `, "torp-${status.styleHash}"`;
2164
+ params.push(`"torp-${status.styleHash}"`);
2164
2165
  }
2165
- b.append(`${propsName}["class"] = t_class(${value});`);
2166
- } else if (name === ":style" && value != null && isFullyReactive(value)) {
2166
+ b.append(`${propsName}["class"] = t_class(${params.join(", ")});`);
2167
+ } else if ((name === "style" || name === ":style") && value != null) {
2167
2168
  status.imports.add("t_style");
2168
- value = value.substring(1, value.length - 1);
2169
+ if (isFullyReactive(value)) {
2170
+ value = value.substring(1, value.length - 1);
2171
+ }
2169
2172
  b.append(`${propsName}["style"] = t_style(${value});`);
2170
2173
  } else if (value != null) {
2171
2174
  let fullyReactive = isFullyReactive(value);
@@ -2175,9 +2178,6 @@ function buildServerComponentNode(node, status, b) {
2175
2178
  } else if (partlyReactive) {
2176
2179
  value = `\`${trimQuotes(value).replaceAll("{", "${")}\``;
2177
2180
  }
2178
- if (name === "class") {
2179
- b.append(`"${trimQuotes(value)} torp-${status.styleHash}"`);
2180
- }
2181
2181
  b.append(`${propsName}["${name}"] = ${value};`);
2182
2182
  } else {
2183
2183
  b.append(`${propsName}["${name}"] = true;`);
@@ -2199,15 +2199,15 @@ function buildServerComponentNode(node, status, b) {
2199
2199
  b.append(`${slotsName}["${slotName}"] = (
2200
2200
  ${slotParams.join(",\n")}
2201
2201
  ) => {`);
2202
- b.append(`let $output = "";`);
2202
+ b.append(`let t_body = "";`);
2203
2203
  for (let child of slot.children) {
2204
2204
  buildServerNode(child, status, b);
2205
2205
  }
2206
2206
  if (status.output) {
2207
- b.append(`$output += \`${status.output}\`;`);
2207
+ b.append(`t_body += \`${status.output}\`;`);
2208
2208
  status.output = "";
2209
2209
  }
2210
- b.append("return $output;");
2210
+ b.append("return t_body;");
2211
2211
  b.append(`}`);
2212
2212
  }
2213
2213
  }
@@ -2224,7 +2224,10 @@ ${slotParams.join(",\n")}
2224
2224
  renderParams += `, ${slotsName}`;
2225
2225
  }
2226
2226
  b.append("");
2227
- b.append(`$output += ${componentName}(${renderParams})`);
2227
+ const componentResult = nextVarName("comp", status);
2228
+ b.append(`const ${componentResult} = ${componentName}(${renderParams});`);
2229
+ b.append(`t_body += ${componentResult}.body;`);
2230
+ b.append(`t_head += ${componentResult}.head;`);
2228
2231
  status.output += HYDRATION_END_COMMENT;
2229
2232
  status.output += ANCHOR_COMMENT;
2230
2233
  }
@@ -2233,7 +2236,7 @@ ${slotParams.join(",\n")}
2233
2236
  function buildServerAwaitNode(node, status, b) {
2234
2237
  status.output += HYDRATION_START_COMMENT;
2235
2238
  if (status.output) {
2236
- b.append(`$output += \`${status.output}\`;`);
2239
+ b.append(`t_body += \`${status.output}\`;`);
2237
2240
  status.output = "";
2238
2241
  }
2239
2242
  for (let branch of node.children) {
@@ -2249,7 +2252,7 @@ function buildServerAwaitBranch(node, status, b) {
2249
2252
  buildServerNode(child, status, b);
2250
2253
  }
2251
2254
  if (status.output) {
2252
- b.append(`$output += \`${status.output}\`;`);
2255
+ b.append(`t_body += \`${status.output}\`;`);
2253
2256
  status.output = "";
2254
2257
  }
2255
2258
  }
@@ -2258,7 +2261,7 @@ function buildServerAwaitBranch(node, status, b) {
2258
2261
  function buildServerForNode(node, status, b) {
2259
2262
  status.output += HYDRATION_START_COMMENT;
2260
2263
  if (status.output) {
2261
- b.append(`$output += \`${status.output}\`;`);
2264
+ b.append(`t_body += \`${status.output}\`;`);
2262
2265
  status.output = "";
2263
2266
  }
2264
2267
  for (let branch of node.children) {
@@ -2276,7 +2279,7 @@ function buildServerForBranch(node, status, b) {
2276
2279
  buildServerNode(child, status, b);
2277
2280
  }
2278
2281
  if (status.output) {
2279
- b.append(`$output += \`${status.output}\`;`);
2282
+ b.append(`t_body += \`${status.output}\`;`);
2280
2283
  status.output = "";
2281
2284
  }
2282
2285
  b.append("}");
@@ -2298,7 +2301,7 @@ function buildServerHtmlNode(node, status) {
2298
2301
  function buildServerIfNode(node, status, b) {
2299
2302
  status.output += HYDRATION_START_COMMENT;
2300
2303
  if (status.output) {
2301
- b.append(`$output += \`${status.output}\`;`);
2304
+ b.append(`t_body += \`${status.output}\`;`);
2302
2305
  status.output = "";
2303
2306
  }
2304
2307
  for (let branch of node.children) {
@@ -2316,7 +2319,7 @@ function buildServerIfBranch(node, status, b) {
2316
2319
  buildServerNode(child, status, b);
2317
2320
  }
2318
2321
  if (status.output) {
2319
- b.append(`$output += \`${status.output}\`;`);
2322
+ b.append(`t_body += \`${status.output}\`;`);
2320
2323
  status.output = "";
2321
2324
  }
2322
2325
  b.append("}");
@@ -2326,7 +2329,7 @@ function buildServerIfBranch(node, status, b) {
2326
2329
  function buildServerReplaceNode(node, status, b) {
2327
2330
  status.output += HYDRATION_START_COMMENT;
2328
2331
  if (status.output) {
2329
- b.append(`$output += \`${status.output}\`;`);
2332
+ b.append(`t_body += \`${status.output}\`;`);
2330
2333
  status.output = "";
2331
2334
  }
2332
2335
  for (let branch of node.children) {
@@ -2343,7 +2346,7 @@ function buildServerReplaceBranch(node, status, b) {
2343
2346
  buildServerNode(child, status, b);
2344
2347
  }
2345
2348
  if (status.output) {
2346
- b.append(`$output += \`${status.output}\`;`);
2349
+ b.append(`t_body += \`${status.output}\`;`);
2347
2350
  status.output = "";
2348
2351
  }
2349
2352
  }
@@ -2363,7 +2366,7 @@ function maybeAppend2(text, end) {
2363
2366
  function buildServerSwitchNode(node, status, b) {
2364
2367
  status.output += HYDRATION_START_COMMENT;
2365
2368
  if (status.output) {
2366
- b.append(`$output += \`${status.output}\`;`);
2369
+ b.append(`t_body += \`${status.output}\`;`);
2367
2370
  status.output = "";
2368
2371
  }
2369
2372
  b.append(`${node.statement} {`);
@@ -2383,7 +2386,7 @@ function buildServerSwitchBranch(node, status, b) {
2383
2386
  buildServerNode(child, status, b);
2384
2387
  }
2385
2388
  if (status.output) {
2386
- b.append(`$output += \`${status.output}\`;`);
2389
+ b.append(`t_body += \`${status.output}\`;`);
2387
2390
  status.output = "";
2388
2391
  }
2389
2392
  b.append("break;");
@@ -2443,7 +2446,7 @@ function buildServerControlNode(node, status, b) {
2443
2446
  }
2444
2447
  case "@const": {
2445
2448
  if (status.output) {
2446
- b.append(`$output += \`${status.output}\`;`);
2449
+ b.append(`t_body += \`${status.output}\`;`);
2447
2450
  status.output = "";
2448
2451
  }
2449
2452
  buildServerScriptNode(node, b);
@@ -2452,7 +2455,7 @@ function buildServerControlNode(node, status, b) {
2452
2455
  case "@function":
2453
2456
  case "@async function": {
2454
2457
  if (status.output) {
2455
- b.append(`$output += \`${status.output}\`;`);
2458
+ b.append(`t_body += \`${status.output}\`;`);
2456
2459
  status.output = "";
2457
2460
  }
2458
2461
  b.append("");
@@ -2560,14 +2563,15 @@ function buildElementAttributes2(node, status) {
2560
2563
  let valueOrDefault = `${value} || ${defaultValue}`;
2561
2564
  const propName = name.substring(1);
2562
2565
  attributes.push(`${propName}="\${${valueOrDefault}}"`);
2563
- } else if (name === ":class") {
2566
+ } else if (name === "class" || name === ":class") {
2564
2567
  status.imports.add("t_class");
2568
+ let params = [value];
2565
2569
  if (node.scopeStyles) {
2566
- value += `, "torp-${status.styleHash}"`;
2570
+ params.push(`"torp-${status.styleHash}"`);
2567
2571
  needsClass = false;
2568
2572
  }
2569
- attributes.push(`class="\${t_class(${value})}"`);
2570
- } else if (name === ":style") {
2573
+ attributes.push(`class="\${t_class(${params.join(", ")})}"`);
2574
+ } else if (name === "style" || name === ":style") {
2571
2575
  status.imports.add("t_style");
2572
2576
  attributes.push(`style="\${t_style(${value})}"`);
2573
2577
  } else {
@@ -2606,7 +2610,7 @@ function buildServerRootNode(node, status, b) {
2606
2610
  function buildServerSlotNode(node, status, b) {
2607
2611
  status.output += HYDRATION_START_COMMENT;
2608
2612
  if (status.output) {
2609
- b.append(`$output += \`${status.output}\`;`);
2613
+ b.append(`t_body += \`${status.output}\`;`);
2610
2614
  status.output = "";
2611
2615
  }
2612
2616
  let slotName = node.attributes.find((a) => a.name === "name")?.value;
@@ -2636,9 +2640,7 @@ function buildServerSlotNode(node, status, b) {
2636
2640
  }
2637
2641
  }
2638
2642
  b.append(`if ($slots && $slots["${slotName}"]) {`);
2639
- b.append(
2640
- `$output += $slots["${slotName}"](${slotHasProps ? propsName : "undefined"}, $context);`
2641
- );
2643
+ b.append(`t_body += $slots["${slotName}"](${slotHasProps ? propsName : "undefined"}, $context);`);
2642
2644
  const fill = node.children.find((c) => isSpecialNode(c) && c.tagName === ":fill");
2643
2645
  if (fill && isSpecialNode(fill) && fill.children.length) {
2644
2646
  b.append(`} else {`);
@@ -2646,7 +2648,7 @@ function buildServerSlotNode(node, status, b) {
2646
2648
  buildServerNode(child, status, b);
2647
2649
  }
2648
2650
  if (status.output) {
2649
- b.append(`$output += \`${status.output}\`;`);
2651
+ b.append(`t_body += \`${status.output}\`;`);
2650
2652
  status.output = "";
2651
2653
  }
2652
2654
  }
@@ -2851,17 +2853,24 @@ function buildServerTemplate(template, imports, b, options) {
2851
2853
  };
2852
2854
  b.append("");
2853
2855
  b.append("/* User interface */");
2854
- b.append(`let $output = "";`);
2856
+ b.append(`let t_body = "";`);
2857
+ if (current.style) {
2858
+ const styles = buildStyles(current.style, current.style.hash).replaceAll('"', '\\"').replaceAll(/\s+/g, " ");
2859
+ b.append(`let t_head = "<style id='${current.style.hash}'>${styles}</style>";
2860
+ `);
2861
+ } else {
2862
+ b.append(`let t_head = "";`);
2863
+ }
2855
2864
  buildServerNode(current.markup, status, b);
2856
2865
  if (status.output) {
2857
- b.append(`$output += \`${status.output}\`;`);
2866
+ b.append(`t_body += \`${status.output}\`;`);
2858
2867
  status.output = "";
2859
2868
  }
2860
2869
  }
2861
2870
  marker = i + "/* @render */".length;
2862
2871
  } else if (script.substring(i, i + "/* @end */".length) === "/* @end */") {
2863
2872
  b.append(script.substring(marker, i));
2864
- b.append("return $output;");
2873
+ b.append(`return { body: t_body, head: t_head };`);
2865
2874
  currentIndex += 1;
2866
2875
  current = template.components[currentIndex];
2867
2876
  marker = i + "/* @end */".length;