@tachui/cli 0.8.1-alpha → 0.8.5-alpha

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 (638) hide show
  1. package/README.md +15 -0
  2. package/bin/tacho.js +57 -7
  3. package/dist/cli/src/commands/analyze-imports.d.ts +18 -0
  4. package/dist/cli/src/commands/analyze-imports.d.ts.map +1 -0
  5. package/dist/cli/src/commands/analyze-imports.js +152 -0
  6. package/dist/cli/src/commands/analyze-imports.js.map +1 -0
  7. package/dist/cli/src/commands/analyze.d.ts.map +1 -0
  8. package/dist/{commands → cli/src/commands}/analyze.js +1 -1
  9. package/dist/cli/src/commands/analyze.js.map +1 -0
  10. package/dist/cli/src/commands/dev.d.ts.map +1 -0
  11. package/dist/cli/src/commands/dev.js.map +1 -0
  12. package/dist/cli/src/commands/generate.d.ts.map +1 -0
  13. package/dist/{commands → cli/src/commands}/generate.js +0 -21
  14. package/dist/cli/src/commands/generate.js.map +1 -0
  15. package/dist/cli/src/commands/init.d.ts.map +1 -0
  16. package/dist/{commands → cli/src/commands}/init.js +1 -28
  17. package/dist/cli/src/commands/init.js.map +1 -0
  18. package/dist/cli/src/commands/migrate/remove-modifier-trigger.d.ts +3 -0
  19. package/dist/cli/src/commands/migrate/remove-modifier-trigger.d.ts.map +1 -0
  20. package/dist/cli/src/commands/migrate/remove-modifier-trigger.js +103 -0
  21. package/dist/cli/src/commands/migrate/remove-modifier-trigger.js.map +1 -0
  22. package/dist/cli/src/commands/migrate.d.ts.map +1 -0
  23. package/dist/{commands → cli/src/commands}/migrate.js +5 -3
  24. package/dist/cli/src/commands/migrate.js.map +1 -0
  25. package/dist/cli/src/commands/modifier-docs.d.ts +24 -0
  26. package/dist/cli/src/commands/modifier-docs.d.ts.map +1 -0
  27. package/dist/cli/src/commands/modifier-docs.js +375 -0
  28. package/dist/cli/src/commands/modifier-docs.js.map +1 -0
  29. package/dist/cli/src/commands/optimize.d.ts.map +1 -0
  30. package/dist/cli/src/commands/optimize.js.map +1 -0
  31. package/dist/cli/src/import-optimizer.d.ts +50 -0
  32. package/dist/cli/src/import-optimizer.d.ts.map +1 -0
  33. package/dist/cli/src/import-optimizer.js +227 -0
  34. package/dist/cli/src/import-optimizer.js.map +1 -0
  35. package/dist/cli/src/index.d.ts.map +1 -0
  36. package/dist/{index.js → cli/src/index.js} +14 -3
  37. package/dist/cli/src/index.js.map +1 -0
  38. package/dist/cli/src/migrations/remove-modifier-trigger.d.ts +7 -0
  39. package/dist/cli/src/migrations/remove-modifier-trigger.d.ts.map +1 -0
  40. package/dist/cli/src/migrations/remove-modifier-trigger.js +99 -0
  41. package/dist/cli/src/migrations/remove-modifier-trigger.js.map +1 -0
  42. package/dist/core/package.json +223 -0
  43. package/dist/core/src/assets/Asset.d.ts +11 -0
  44. package/dist/core/src/assets/Asset.d.ts.map +1 -0
  45. package/dist/core/src/assets/Asset.js +12 -0
  46. package/dist/core/src/assets/Asset.js.map +1 -0
  47. package/dist/core/src/assets/AssetCollection.d.ts +14 -0
  48. package/dist/core/src/assets/AssetCollection.d.ts.map +1 -0
  49. package/dist/core/src/assets/AssetCollection.js +133 -0
  50. package/dist/core/src/assets/AssetCollection.js.map +1 -0
  51. package/dist/core/src/assets/ColorAsset.d.ts +31 -0
  52. package/dist/core/src/assets/ColorAsset.d.ts.map +1 -0
  53. package/dist/core/src/assets/ColorAsset.js +182 -0
  54. package/dist/core/src/assets/ColorAsset.js.map +1 -0
  55. package/dist/core/src/assets/FontAsset.d.ts +114 -0
  56. package/dist/core/src/assets/FontAsset.d.ts.map +1 -0
  57. package/dist/core/src/assets/FontAsset.js +289 -0
  58. package/dist/core/src/assets/FontAsset.js.map +1 -0
  59. package/dist/core/src/assets/ImageAsset.d.ts +35 -0
  60. package/dist/core/src/assets/ImageAsset.d.ts.map +1 -0
  61. package/dist/core/src/assets/ImageAsset.js +69 -0
  62. package/dist/core/src/assets/ImageAsset.js.map +1 -0
  63. package/dist/core/src/assets/index.d.ts +27 -0
  64. package/dist/core/src/assets/index.d.ts.map +1 -0
  65. package/dist/core/src/assets/index.js +137 -0
  66. package/dist/core/src/assets/index.js.map +1 -0
  67. package/dist/core/src/assets/types.d.ts +10 -0
  68. package/dist/core/src/assets/types.d.ts.map +1 -0
  69. package/dist/core/src/assets/types.js +6 -0
  70. package/dist/core/src/assets/types.js.map +1 -0
  71. package/dist/core/src/compiler/advanced-parser.d.ts +113 -0
  72. package/dist/core/src/compiler/advanced-parser.d.ts.map +1 -0
  73. package/dist/core/src/compiler/advanced-parser.js +702 -0
  74. package/dist/core/src/compiler/advanced-parser.js.map +1 -0
  75. package/dist/core/src/compiler/codegen.d.ts +20 -0
  76. package/dist/core/src/compiler/codegen.d.ts.map +1 -0
  77. package/dist/core/src/compiler/codegen.js +509 -0
  78. package/dist/core/src/compiler/codegen.js.map +1 -0
  79. package/dist/core/src/compiler/enhanced-codegen.d.ts +121 -0
  80. package/dist/core/src/compiler/enhanced-codegen.d.ts.map +1 -0
  81. package/dist/core/src/compiler/enhanced-codegen.js +607 -0
  82. package/dist/core/src/compiler/enhanced-codegen.js.map +1 -0
  83. package/dist/core/src/compiler/index.d.ts +14 -0
  84. package/dist/core/src/compiler/index.d.ts.map +1 -0
  85. package/dist/core/src/compiler/index.js +12 -0
  86. package/dist/core/src/compiler/index.js.map +1 -0
  87. package/dist/core/src/compiler/parser.d.ts +12 -0
  88. package/dist/core/src/compiler/parser.d.ts.map +1 -0
  89. package/dist/core/src/compiler/parser.js +407 -0
  90. package/dist/core/src/compiler/parser.js.map +1 -0
  91. package/dist/core/src/compiler/plugin.d.ts +13 -0
  92. package/dist/core/src/compiler/plugin.d.ts.map +1 -0
  93. package/dist/core/src/compiler/plugin.js +456 -0
  94. package/dist/core/src/compiler/plugin.js.map +1 -0
  95. package/dist/core/src/compiler/types.d.ts +177 -0
  96. package/dist/core/src/compiler/types.d.ts.map +1 -0
  97. package/dist/core/src/compiler/types.js +5 -0
  98. package/dist/core/src/compiler/types.js.map +1 -0
  99. package/dist/core/src/components/factory.d.ts +24 -0
  100. package/dist/core/src/components/factory.d.ts.map +1 -0
  101. package/dist/core/src/components/factory.js +19 -0
  102. package/dist/core/src/components/factory.js.map +1 -0
  103. package/dist/core/src/components/index.d.ts +12 -0
  104. package/dist/core/src/components/index.d.ts.map +1 -0
  105. package/dist/core/src/components/index.js +9 -0
  106. package/dist/core/src/components/index.js.map +1 -0
  107. package/dist/core/src/components/wrapper.d.ts +142 -0
  108. package/dist/core/src/components/wrapper.d.ts.map +1 -0
  109. package/dist/core/src/components/wrapper.js +628 -0
  110. package/dist/core/src/components/wrapper.js.map +1 -0
  111. package/dist/core/src/concatenation/concatenatable.d.ts +63 -0
  112. package/dist/core/src/concatenation/concatenatable.d.ts.map +1 -0
  113. package/dist/core/src/concatenation/concatenatable.js +158 -0
  114. package/dist/core/src/concatenation/concatenatable.js.map +1 -0
  115. package/dist/core/src/concatenation/concatenated-component.d.ts +124 -0
  116. package/dist/core/src/concatenation/concatenated-component.d.ts.map +1 -0
  117. package/dist/core/src/concatenation/concatenated-component.js +447 -0
  118. package/dist/core/src/concatenation/concatenated-component.js.map +1 -0
  119. package/dist/core/src/concatenation/index.d.ts +13 -0
  120. package/dist/core/src/concatenation/index.d.ts.map +1 -0
  121. package/dist/core/src/concatenation/index.js +16 -0
  122. package/dist/core/src/concatenation/index.js.map +1 -0
  123. package/dist/core/src/concatenation/text-optimizer.d.ts +104 -0
  124. package/dist/core/src/concatenation/text-optimizer.d.ts.map +1 -0
  125. package/dist/core/src/concatenation/text-optimizer.js +349 -0
  126. package/dist/core/src/concatenation/text-optimizer.js.map +1 -0
  127. package/dist/core/src/concatenation/types.d.ts +88 -0
  128. package/dist/core/src/concatenation/types.d.ts.map +1 -0
  129. package/dist/core/src/concatenation/types.js +23 -0
  130. package/dist/core/src/concatenation/types.js.map +1 -0
  131. package/dist/core/src/config.d.ts +7 -0
  132. package/dist/core/src/config.d.ts.map +1 -0
  133. package/dist/core/src/config.js +17 -0
  134. package/dist/core/src/config.js.map +1 -0
  135. package/dist/core/src/constants/frame-utils.d.ts +68 -0
  136. package/dist/core/src/constants/frame-utils.d.ts.map +1 -0
  137. package/dist/core/src/constants/frame-utils.js +156 -0
  138. package/dist/core/src/constants/frame-utils.js.map +1 -0
  139. package/dist/core/src/constants/index.d.ts +8 -0
  140. package/dist/core/src/constants/index.d.ts.map +1 -0
  141. package/dist/core/src/constants/index.js +8 -0
  142. package/dist/core/src/constants/index.js.map +1 -0
  143. package/dist/core/src/constants/layout.d.ts +96 -0
  144. package/dist/core/src/constants/layout.d.ts.map +1 -0
  145. package/dist/core/src/constants/layout.js +124 -0
  146. package/dist/core/src/constants/layout.js.map +1 -0
  147. package/dist/core/src/css-classes/component-base.d.ts +40 -0
  148. package/dist/core/src/css-classes/component-base.d.ts.map +1 -0
  149. package/dist/core/src/css-classes/component-base.js +90 -0
  150. package/dist/core/src/css-classes/component-base.js.map +1 -0
  151. package/dist/core/src/css-classes/css-class-manager.d.ts +89 -0
  152. package/dist/core/src/css-classes/css-class-manager.d.ts.map +1 -0
  153. package/dist/core/src/css-classes/css-class-manager.js +328 -0
  154. package/dist/core/src/css-classes/css-class-manager.js.map +1 -0
  155. package/dist/core/src/css-classes/dom-integration.d.ts +76 -0
  156. package/dist/core/src/css-classes/dom-integration.d.ts.map +1 -0
  157. package/dist/core/src/css-classes/dom-integration.js +104 -0
  158. package/dist/core/src/css-classes/dom-integration.js.map +1 -0
  159. package/dist/core/src/css-classes/enhanced-renderer.d.ts +42 -0
  160. package/dist/core/src/css-classes/enhanced-renderer.d.ts.map +1 -0
  161. package/dist/core/src/css-classes/enhanced-renderer.js +121 -0
  162. package/dist/core/src/css-classes/enhanced-renderer.js.map +1 -0
  163. package/dist/core/src/css-classes/index.d.ts +14 -0
  164. package/dist/core/src/css-classes/index.d.ts.map +1 -0
  165. package/dist/core/src/css-classes/index.js +14 -0
  166. package/dist/core/src/css-classes/index.js.map +1 -0
  167. package/dist/core/src/css-classes/types.d.ts +59 -0
  168. package/dist/core/src/css-classes/types.d.ts.map +1 -0
  169. package/dist/core/src/css-classes/types.js +8 -0
  170. package/dist/core/src/css-classes/types.js.map +1 -0
  171. package/dist/core/src/css-classes/utilities.d.ts +104 -0
  172. package/dist/core/src/css-classes/utilities.d.ts.map +1 -0
  173. package/dist/core/src/css-classes/utilities.js +126 -0
  174. package/dist/core/src/css-classes/utilities.js.map +1 -0
  175. package/dist/core/src/gradients/css-generator.d.ts +10 -0
  176. package/dist/core/src/gradients/css-generator.d.ts.map +1 -0
  177. package/dist/core/src/gradients/css-generator.js +123 -0
  178. package/dist/core/src/gradients/css-generator.js.map +1 -0
  179. package/dist/core/src/gradients/examples.d.ts +432 -0
  180. package/dist/core/src/gradients/examples.d.ts.map +1 -0
  181. package/dist/core/src/gradients/examples.js +588 -0
  182. package/dist/core/src/gradients/examples.js.map +1 -0
  183. package/dist/core/src/gradients/gradient-asset.d.ts +10 -0
  184. package/dist/core/src/gradients/gradient-asset.d.ts.map +1 -0
  185. package/dist/core/src/gradients/gradient-asset.js +25 -0
  186. package/dist/core/src/gradients/gradient-asset.js.map +1 -0
  187. package/dist/core/src/gradients/index.d.ts +19 -0
  188. package/dist/core/src/gradients/index.d.ts.map +1 -0
  189. package/dist/core/src/gradients/index.js +56 -0
  190. package/dist/core/src/gradients/index.js.map +1 -0
  191. package/dist/core/src/gradients/performance.d.ts +146 -0
  192. package/dist/core/src/gradients/performance.d.ts.map +1 -0
  193. package/dist/core/src/gradients/performance.js +413 -0
  194. package/dist/core/src/gradients/performance.js.map +1 -0
  195. package/dist/core/src/gradients/presets.d.ts +165 -0
  196. package/dist/core/src/gradients/presets.d.ts.map +1 -0
  197. package/dist/core/src/gradients/presets.js +371 -0
  198. package/dist/core/src/gradients/presets.js.map +1 -0
  199. package/dist/core/src/gradients/reactive.d.ts +167 -0
  200. package/dist/core/src/gradients/reactive.d.ts.map +1 -0
  201. package/dist/core/src/gradients/reactive.js +329 -0
  202. package/dist/core/src/gradients/reactive.js.map +1 -0
  203. package/dist/core/src/gradients/state-gradient-asset.d.ts +67 -0
  204. package/dist/core/src/gradients/state-gradient-asset.d.ts.map +1 -0
  205. package/dist/core/src/gradients/state-gradient-asset.js +145 -0
  206. package/dist/core/src/gradients/state-gradient-asset.js.map +1 -0
  207. package/dist/core/src/gradients/types.d.ts +6 -0
  208. package/dist/core/src/gradients/types.d.ts.map +1 -0
  209. package/dist/core/src/gradients/types.js +6 -0
  210. package/dist/core/src/gradients/types.js.map +1 -0
  211. package/dist/core/src/gradients/utils.d.ts +313 -0
  212. package/dist/core/src/gradients/utils.d.ts.map +1 -0
  213. package/dist/core/src/gradients/utils.js +513 -0
  214. package/dist/core/src/gradients/utils.js.map +1 -0
  215. package/dist/core/src/gradients/validation.d.ts +156 -0
  216. package/dist/core/src/gradients/validation.d.ts.map +1 -0
  217. package/dist/core/src/gradients/validation.js +392 -0
  218. package/dist/core/src/gradients/validation.js.map +1 -0
  219. package/dist/core/src/index.d.ts +33 -0
  220. package/dist/core/src/index.d.ts.map +1 -0
  221. package/dist/core/src/index.js +57 -0
  222. package/dist/core/src/index.js.map +1 -0
  223. package/dist/core/src/lifecycle/hooks.d.ts +101 -0
  224. package/dist/core/src/lifecycle/hooks.d.ts.map +1 -0
  225. package/dist/core/src/lifecycle/hooks.js +241 -0
  226. package/dist/core/src/lifecycle/hooks.js.map +1 -0
  227. package/dist/core/src/modifiers/alignment.d.ts +5 -0
  228. package/dist/core/src/modifiers/alignment.d.ts.map +1 -0
  229. package/dist/core/src/modifiers/alignment.js +19 -0
  230. package/dist/core/src/modifiers/alignment.js.map +1 -0
  231. package/dist/core/src/modifiers/base.d.ts +128 -0
  232. package/dist/core/src/modifiers/base.d.ts.map +1 -0
  233. package/dist/core/src/modifiers/base.js +1062 -0
  234. package/dist/core/src/modifiers/base.js.map +1 -0
  235. package/dist/core/src/modifiers/builder.d.ts +148 -0
  236. package/dist/core/src/modifiers/builder.d.ts.map +1 -0
  237. package/dist/core/src/modifiers/builder.js +903 -0
  238. package/dist/core/src/modifiers/builder.js.map +1 -0
  239. package/dist/core/src/modifiers/core.d.ts +14 -0
  240. package/dist/core/src/modifiers/core.d.ts.map +1 -0
  241. package/dist/core/src/modifiers/core.js +16 -0
  242. package/dist/core/src/modifiers/core.js.map +1 -0
  243. package/dist/core/src/modifiers/corner-radius.d.ts +8 -0
  244. package/dist/core/src/modifiers/corner-radius.d.ts.map +1 -0
  245. package/dist/core/src/modifiers/corner-radius.js +19 -0
  246. package/dist/core/src/modifiers/corner-radius.js.map +1 -0
  247. package/dist/core/src/modifiers/factories.d.ts +88 -0
  248. package/dist/core/src/modifiers/factories.d.ts.map +1 -0
  249. package/dist/core/src/modifiers/factories.js +376 -0
  250. package/dist/core/src/modifiers/factories.js.map +1 -0
  251. package/dist/core/src/modifiers/index.d.ts +17 -0
  252. package/dist/core/src/modifiers/index.d.ts.map +1 -0
  253. package/dist/core/src/modifiers/index.js +16 -0
  254. package/dist/core/src/modifiers/index.js.map +1 -0
  255. package/dist/core/src/modifiers/layout-priority.d.ts +8 -0
  256. package/dist/core/src/modifiers/layout-priority.d.ts.map +1 -0
  257. package/dist/core/src/modifiers/layout-priority.js +19 -0
  258. package/dist/core/src/modifiers/layout-priority.js.map +1 -0
  259. package/dist/core/src/modifiers/opacity.d.ts +8 -0
  260. package/dist/core/src/modifiers/opacity.d.ts.map +1 -0
  261. package/dist/core/src/modifiers/opacity.js +19 -0
  262. package/dist/core/src/modifiers/opacity.js.map +1 -0
  263. package/dist/core/src/modifiers/presets.d.ts +368 -0
  264. package/dist/core/src/modifiers/presets.d.ts.map +1 -0
  265. package/dist/core/src/modifiers/presets.js +394 -0
  266. package/dist/core/src/modifiers/presets.js.map +1 -0
  267. package/dist/core/src/modifiers/proxy.d.ts +4 -0
  268. package/dist/core/src/modifiers/proxy.d.ts.map +1 -0
  269. package/dist/core/src/modifiers/proxy.js +212 -0
  270. package/dist/core/src/modifiers/proxy.js.map +1 -0
  271. package/dist/core/src/modifiers/registration-utils.d.ts +7 -0
  272. package/dist/core/src/modifiers/registration-utils.d.ts.map +1 -0
  273. package/dist/core/src/modifiers/registration-utils.js +46 -0
  274. package/dist/core/src/modifiers/registration-utils.js.map +1 -0
  275. package/dist/core/src/modifiers/registry.d.ts +78 -0
  276. package/dist/core/src/modifiers/registry.d.ts.map +1 -0
  277. package/dist/core/src/modifiers/registry.js +397 -0
  278. package/dist/core/src/modifiers/registry.js.map +1 -0
  279. package/dist/core/src/modifiers/types.d.ts +6 -0
  280. package/dist/core/src/modifiers/types.d.ts.map +1 -0
  281. package/dist/core/src/modifiers/types.js +6 -0
  282. package/dist/core/src/modifiers/types.js.map +1 -0
  283. package/dist/core/src/plugins/index.d.ts +16 -0
  284. package/dist/core/src/plugins/index.d.ts.map +1 -0
  285. package/dist/core/src/plugins/index.js +21 -0
  286. package/dist/core/src/plugins/index.js.map +1 -0
  287. package/dist/core/src/plugins/legacy-adapter.d.ts +35 -0
  288. package/dist/core/src/plugins/legacy-adapter.d.ts.map +1 -0
  289. package/dist/core/src/plugins/legacy-adapter.js +57 -0
  290. package/dist/core/src/plugins/legacy-adapter.js.map +1 -0
  291. package/dist/core/src/plugins/simplified-component-registry.d.ts +40 -0
  292. package/dist/core/src/plugins/simplified-component-registry.d.ts.map +1 -0
  293. package/dist/core/src/plugins/simplified-component-registry.js +97 -0
  294. package/dist/core/src/plugins/simplified-component-registry.js.map +1 -0
  295. package/dist/core/src/plugins/simplified-lazy-loader.d.ts +65 -0
  296. package/dist/core/src/plugins/simplified-lazy-loader.d.ts.map +1 -0
  297. package/dist/core/src/plugins/simplified-lazy-loader.js +205 -0
  298. package/dist/core/src/plugins/simplified-lazy-loader.js.map +1 -0
  299. package/dist/core/src/plugins/simplified-plugin-manager.d.ts +24 -0
  300. package/dist/core/src/plugins/simplified-plugin-manager.d.ts.map +1 -0
  301. package/dist/core/src/plugins/simplified-plugin-manager.js +77 -0
  302. package/dist/core/src/plugins/simplified-plugin-manager.js.map +1 -0
  303. package/dist/core/src/plugins/simplified-tachui-instance.d.ts +54 -0
  304. package/dist/core/src/plugins/simplified-tachui-instance.d.ts.map +1 -0
  305. package/dist/core/src/plugins/simplified-tachui-instance.js +114 -0
  306. package/dist/core/src/plugins/simplified-tachui-instance.js.map +1 -0
  307. package/dist/core/src/plugins/simplified-types.d.ts +63 -0
  308. package/dist/core/src/plugins/simplified-types.d.ts.map +1 -0
  309. package/dist/core/src/plugins/simplified-types.js +18 -0
  310. package/dist/core/src/plugins/simplified-types.js.map +1 -0
  311. package/dist/core/src/plugins/simplified-utils.d.ts +39 -0
  312. package/dist/core/src/plugins/simplified-utils.d.ts.map +1 -0
  313. package/dist/core/src/plugins/simplified-utils.js +104 -0
  314. package/dist/core/src/plugins/simplified-utils.js.map +1 -0
  315. package/dist/core/src/reactive/cleanup.d.ts +115 -0
  316. package/dist/core/src/reactive/cleanup.d.ts.map +1 -0
  317. package/dist/core/src/reactive/cleanup.js +187 -0
  318. package/dist/core/src/reactive/cleanup.js.map +1 -0
  319. package/dist/core/src/reactive/computed.d.ts +115 -0
  320. package/dist/core/src/reactive/computed.d.ts.map +1 -0
  321. package/dist/core/src/reactive/computed.js +237 -0
  322. package/dist/core/src/reactive/computed.js.map +1 -0
  323. package/dist/core/src/reactive/context.d.ts +83 -0
  324. package/dist/core/src/reactive/context.d.ts.map +1 -0
  325. package/dist/core/src/reactive/context.js +286 -0
  326. package/dist/core/src/reactive/context.js.map +1 -0
  327. package/dist/core/src/reactive/effect.d.ts +79 -0
  328. package/dist/core/src/reactive/effect.d.ts.map +1 -0
  329. package/dist/core/src/reactive/effect.js +159 -0
  330. package/dist/core/src/reactive/effect.js.map +1 -0
  331. package/dist/core/src/reactive/enhanced-effect.d.ts +108 -0
  332. package/dist/core/src/reactive/enhanced-effect.d.ts.map +1 -0
  333. package/dist/core/src/reactive/enhanced-effect.js +265 -0
  334. package/dist/core/src/reactive/enhanced-effect.js.map +1 -0
  335. package/dist/core/src/reactive/enhanced-signal.d.ts +91 -0
  336. package/dist/core/src/reactive/enhanced-signal.d.ts.map +1 -0
  337. package/dist/core/src/reactive/enhanced-signal.js +175 -0
  338. package/dist/core/src/reactive/enhanced-signal.js.map +1 -0
  339. package/dist/core/src/reactive/equality.d.ts +51 -0
  340. package/dist/core/src/reactive/equality.d.ts.map +1 -0
  341. package/dist/core/src/reactive/equality.js +169 -0
  342. package/dist/core/src/reactive/equality.js.map +1 -0
  343. package/dist/core/src/reactive/index.d.ts +22 -0
  344. package/dist/core/src/reactive/index.d.ts.map +1 -0
  345. package/dist/core/src/reactive/index.js +33 -0
  346. package/dist/core/src/reactive/index.js.map +1 -0
  347. package/dist/core/src/reactive/migration.d.ts +104 -0
  348. package/dist/core/src/reactive/migration.d.ts.map +1 -0
  349. package/dist/core/src/reactive/migration.js +257 -0
  350. package/dist/core/src/reactive/migration.js.map +1 -0
  351. package/dist/core/src/reactive/ownership.d.ts +75 -0
  352. package/dist/core/src/reactive/ownership.d.ts.map +1 -0
  353. package/dist/core/src/reactive/ownership.js +155 -0
  354. package/dist/core/src/reactive/ownership.js.map +1 -0
  355. package/dist/core/src/reactive/scheduler.d.ts +56 -0
  356. package/dist/core/src/reactive/scheduler.d.ts.map +1 -0
  357. package/dist/core/src/reactive/scheduler.js +263 -0
  358. package/dist/core/src/reactive/scheduler.js.map +1 -0
  359. package/dist/core/src/reactive/signal-list.d.ts +100 -0
  360. package/dist/core/src/reactive/signal-list.d.ts.map +1 -0
  361. package/dist/core/src/reactive/signal-list.js +240 -0
  362. package/dist/core/src/reactive/signal-list.js.map +1 -0
  363. package/dist/core/src/reactive/signal.d.ts +82 -0
  364. package/dist/core/src/reactive/signal.d.ts.map +1 -0
  365. package/dist/core/src/reactive/signal.js +172 -0
  366. package/dist/core/src/reactive/signal.js.map +1 -0
  367. package/dist/core/src/reactive/theme.d.ts +12 -0
  368. package/dist/core/src/reactive/theme.d.ts.map +1 -0
  369. package/dist/core/src/reactive/theme.js +41 -0
  370. package/dist/core/src/reactive/theme.js.map +1 -0
  371. package/dist/core/src/reactive/types.d.ts +6 -0
  372. package/dist/core/src/reactive/types.d.ts.map +1 -0
  373. package/dist/core/src/reactive/types.js +6 -0
  374. package/dist/core/src/reactive/types.js.map +1 -0
  375. package/dist/core/src/reactive/unified-scheduler.d.ts +112 -0
  376. package/dist/core/src/reactive/unified-scheduler.d.ts.map +1 -0
  377. package/dist/core/src/reactive/unified-scheduler.js +315 -0
  378. package/dist/core/src/reactive/unified-scheduler.js.map +1 -0
  379. package/dist/core/src/runtime/component-context.d.ts +73 -0
  380. package/dist/core/src/runtime/component-context.d.ts.map +1 -0
  381. package/dist/core/src/runtime/component-context.js +278 -0
  382. package/dist/core/src/runtime/component-context.js.map +1 -0
  383. package/dist/core/src/runtime/component.d.ts +112 -0
  384. package/dist/core/src/runtime/component.d.ts.map +1 -0
  385. package/dist/core/src/runtime/component.js +394 -0
  386. package/dist/core/src/runtime/component.js.map +1 -0
  387. package/dist/core/src/runtime/context.d.ts +138 -0
  388. package/dist/core/src/runtime/context.d.ts.map +1 -0
  389. package/dist/core/src/runtime/context.js +411 -0
  390. package/dist/core/src/runtime/context.js.map +1 -0
  391. package/dist/core/src/runtime/dom-bridge.d.ts +70 -0
  392. package/dist/core/src/runtime/dom-bridge.d.ts.map +1 -0
  393. package/dist/core/src/runtime/dom-bridge.js +481 -0
  394. package/dist/core/src/runtime/dom-bridge.js.map +1 -0
  395. package/dist/core/src/runtime/element-override.d.ts +82 -0
  396. package/dist/core/src/runtime/element-override.d.ts.map +1 -0
  397. package/dist/core/src/runtime/element-override.js +360 -0
  398. package/dist/core/src/runtime/element-override.js.map +1 -0
  399. package/dist/core/src/runtime/event-delegation.d.ts +59 -0
  400. package/dist/core/src/runtime/event-delegation.d.ts.map +1 -0
  401. package/dist/core/src/runtime/event-delegation.js +220 -0
  402. package/dist/core/src/runtime/event-delegation.js.map +1 -0
  403. package/dist/core/src/runtime/index.d.ts +24 -0
  404. package/dist/core/src/runtime/index.d.ts.map +1 -0
  405. package/dist/core/src/runtime/index.js +36 -0
  406. package/dist/core/src/runtime/index.js.map +1 -0
  407. package/dist/core/src/runtime/lazy-component.d.ts +58 -0
  408. package/dist/core/src/runtime/lazy-component.d.ts.map +1 -0
  409. package/dist/core/src/runtime/lazy-component.js +206 -0
  410. package/dist/core/src/runtime/lazy-component.js.map +1 -0
  411. package/dist/core/src/runtime/lifecycle.d.ts +8 -0
  412. package/dist/core/src/runtime/lifecycle.d.ts.map +1 -0
  413. package/dist/core/src/runtime/lifecycle.js +9 -0
  414. package/dist/core/src/runtime/lifecycle.js.map +1 -0
  415. package/dist/core/src/runtime/mounting.d.ts +9 -0
  416. package/dist/core/src/runtime/mounting.d.ts.map +1 -0
  417. package/dist/core/src/runtime/mounting.js +15 -0
  418. package/dist/core/src/runtime/mounting.js.map +1 -0
  419. package/dist/core/src/runtime/optimization.d.ts +8 -0
  420. package/dist/core/src/runtime/optimization.d.ts.map +1 -0
  421. package/dist/core/src/runtime/optimization.js +12 -0
  422. package/dist/core/src/runtime/optimization.js.map +1 -0
  423. package/dist/core/src/runtime/props.d.ts +154 -0
  424. package/dist/core/src/runtime/props.d.ts.map +1 -0
  425. package/dist/core/src/runtime/props.js +389 -0
  426. package/dist/core/src/runtime/props.js.map +1 -0
  427. package/dist/core/src/runtime/renderer.d.ts +168 -0
  428. package/dist/core/src/runtime/renderer.d.ts.map +1 -0
  429. package/dist/core/src/runtime/renderer.js +1181 -0
  430. package/dist/core/src/runtime/renderer.js.map +1 -0
  431. package/dist/core/src/runtime/semantic-role-manager.d.ts +37 -0
  432. package/dist/core/src/runtime/semantic-role-manager.d.ts.map +1 -0
  433. package/dist/core/src/runtime/semantic-role-manager.js +102 -0
  434. package/dist/core/src/runtime/semantic-role-manager.js.map +1 -0
  435. package/dist/core/src/runtime/types.d.ts +6 -0
  436. package/dist/core/src/runtime/types.d.ts.map +1 -0
  437. package/dist/core/src/runtime/types.js +6 -0
  438. package/dist/core/src/runtime/types.js.map +1 -0
  439. package/dist/core/src/state/binding.d.ts +96 -0
  440. package/dist/core/src/state/binding.d.ts.map +1 -0
  441. package/dist/core/src/state/binding.js +264 -0
  442. package/dist/core/src/state/binding.js.map +1 -0
  443. package/dist/core/src/state/environment.d.ts +178 -0
  444. package/dist/core/src/state/environment.d.ts.map +1 -0
  445. package/dist/core/src/state/environment.js +272 -0
  446. package/dist/core/src/state/environment.js.map +1 -0
  447. package/dist/core/src/state/index.d.ts +108 -0
  448. package/dist/core/src/state/index.d.ts.map +1 -0
  449. package/dist/core/src/state/index.js +102 -0
  450. package/dist/core/src/state/index.js.map +1 -0
  451. package/dist/core/src/state/observed-object.d.ts +126 -0
  452. package/dist/core/src/state/observed-object.d.ts.map +1 -0
  453. package/dist/core/src/state/observed-object.js +330 -0
  454. package/dist/core/src/state/observed-object.js.map +1 -0
  455. package/dist/core/src/state/state-manager.d.ts +97 -0
  456. package/dist/core/src/state/state-manager.d.ts.map +1 -0
  457. package/dist/core/src/state/state-manager.js +297 -0
  458. package/dist/core/src/state/state-manager.js.map +1 -0
  459. package/dist/core/src/state/state.d.ts +78 -0
  460. package/dist/core/src/state/state.d.ts.map +1 -0
  461. package/dist/core/src/state/state.js +283 -0
  462. package/dist/core/src/state/state.js.map +1 -0
  463. package/dist/core/src/state/types.d.ts +159 -0
  464. package/dist/core/src/state/types.d.ts.map +1 -0
  465. package/dist/core/src/state/types.js +8 -0
  466. package/dist/core/src/state/types.js.map +1 -0
  467. package/dist/core/src/utils/clone-helpers.d.ts +11 -0
  468. package/dist/core/src/utils/clone-helpers.d.ts.map +1 -0
  469. package/dist/core/src/utils/clone-helpers.js +69 -0
  470. package/dist/core/src/utils/clone-helpers.js.map +1 -0
  471. package/dist/core/src/validation/build-time-stub.d.ts +33 -0
  472. package/dist/core/src/validation/build-time-stub.d.ts.map +1 -0
  473. package/dist/core/src/validation/build-time-stub.js +53 -0
  474. package/dist/core/src/validation/build-time-stub.js.map +1 -0
  475. package/dist/core/src/validation/debug-tools-stub.d.ts +67 -0
  476. package/dist/core/src/validation/debug-tools-stub.d.ts.map +1 -0
  477. package/dist/core/src/validation/debug-tools-stub.js +94 -0
  478. package/dist/core/src/validation/debug-tools-stub.js.map +1 -0
  479. package/dist/core/src/validation/index.d.ts +116 -0
  480. package/dist/core/src/validation/index.d.ts.map +1 -0
  481. package/dist/core/src/validation/index.js +306 -0
  482. package/dist/core/src/validation/index.js.map +1 -0
  483. package/dist/core/src/validation/lifecycle-validation.d.ts +165 -0
  484. package/dist/core/src/validation/lifecycle-validation.d.ts.map +1 -0
  485. package/dist/core/src/validation/lifecycle-validation.js +501 -0
  486. package/dist/core/src/validation/lifecycle-validation.js.map +1 -0
  487. package/dist/core/src/validation/performance-optimizer-stub.d.ts +50 -0
  488. package/dist/core/src/validation/performance-optimizer-stub.d.ts.map +1 -0
  489. package/dist/core/src/validation/performance-optimizer-stub.js +50 -0
  490. package/dist/core/src/validation/performance-optimizer-stub.js.map +1 -0
  491. package/dist/core/src/validation/plugin-registration.d.ts +92 -0
  492. package/dist/core/src/validation/plugin-registration.d.ts.map +1 -0
  493. package/dist/core/src/validation/plugin-registration.js +199 -0
  494. package/dist/core/src/validation/plugin-registration.js.map +1 -0
  495. package/dist/core/src/validation/production-bypass-core.d.ts +69 -0
  496. package/dist/core/src/validation/production-bypass-core.d.ts.map +1 -0
  497. package/dist/core/src/validation/production-bypass-core.js +115 -0
  498. package/dist/core/src/validation/production-bypass-core.js.map +1 -0
  499. package/dist/core/src/version.d.ts +19 -0
  500. package/dist/core/src/version.d.ts.map +1 -0
  501. package/dist/core/src/version.js +20 -0
  502. package/dist/core/src/version.js.map +1 -0
  503. package/dist/devtools/src/build-time/detection.d.ts +32 -0
  504. package/dist/devtools/src/build-time/detection.d.ts.map +1 -0
  505. package/dist/devtools/src/build-time/detection.js +327 -0
  506. package/dist/devtools/src/build-time/detection.js.map +1 -0
  507. package/dist/devtools/src/build-time/index.d.ts +84 -0
  508. package/dist/devtools/src/build-time/index.d.ts.map +1 -0
  509. package/dist/devtools/src/build-time/index.js +157 -0
  510. package/dist/devtools/src/build-time/index.js.map +1 -0
  511. package/dist/devtools/src/build-time/plugins.d.ts +75 -0
  512. package/dist/devtools/src/build-time/plugins.d.ts.map +1 -0
  513. package/dist/devtools/src/build-time/plugins.js +429 -0
  514. package/dist/devtools/src/build-time/plugins.js.map +1 -0
  515. package/dist/devtools/src/build-time/rules.d.ts +73 -0
  516. package/dist/devtools/src/build-time/rules.d.ts.map +1 -0
  517. package/dist/devtools/src/build-time/rules.js +622 -0
  518. package/dist/devtools/src/build-time/rules.js.map +1 -0
  519. package/dist/devtools/src/build-time/transformer.d.ts +23 -0
  520. package/dist/devtools/src/build-time/transformer.d.ts.map +1 -0
  521. package/dist/devtools/src/build-time/transformer.js +294 -0
  522. package/dist/devtools/src/build-time/transformer.js.map +1 -0
  523. package/dist/devtools/src/build-time/types.d.ts +212 -0
  524. package/dist/devtools/src/build-time/types.d.ts.map +1 -0
  525. package/dist/devtools/src/build-time/types.js +8 -0
  526. package/dist/devtools/src/build-time/types.js.map +1 -0
  527. package/dist/devtools/src/debug/debug.d.ts +61 -0
  528. package/dist/devtools/src/debug/debug.d.ts.map +1 -0
  529. package/dist/devtools/src/debug/debug.js +239 -0
  530. package/dist/devtools/src/debug/debug.js.map +1 -0
  531. package/dist/devtools/src/debug/development-warnings.d.ts +42 -0
  532. package/dist/devtools/src/debug/development-warnings.d.ts.map +1 -0
  533. package/dist/devtools/src/debug/development-warnings.js +84 -0
  534. package/dist/devtools/src/debug/development-warnings.js.map +1 -0
  535. package/dist/devtools/src/debug/enhanced-errors.d.ts +176 -0
  536. package/dist/devtools/src/debug/enhanced-errors.d.ts.map +1 -0
  537. package/dist/devtools/src/debug/enhanced-errors.js +481 -0
  538. package/dist/devtools/src/debug/enhanced-errors.js.map +1 -0
  539. package/dist/devtools/src/debug/enhanced-types.d.ts +284 -0
  540. package/dist/devtools/src/debug/enhanced-types.d.ts.map +1 -0
  541. package/dist/devtools/src/debug/enhanced-types.js +8 -0
  542. package/dist/devtools/src/debug/enhanced-types.js.map +1 -0
  543. package/dist/devtools/src/debug/index.d.ts +13 -0
  544. package/dist/devtools/src/debug/index.d.ts.map +1 -0
  545. package/dist/devtools/src/debug/index.js +17 -0
  546. package/dist/devtools/src/debug/index.js.map +1 -0
  547. package/dist/devtools/src/debug/validation-debug-tools.d.ts +228 -0
  548. package/dist/devtools/src/debug/validation-debug-tools.d.ts.map +1 -0
  549. package/dist/devtools/src/debug/validation-debug-tools.js +472 -0
  550. package/dist/devtools/src/debug/validation-debug-tools.js.map +1 -0
  551. package/dist/devtools/src/import-guide.d.ts +50 -0
  552. package/dist/devtools/src/import-guide.d.ts.map +1 -0
  553. package/dist/devtools/src/import-guide.js +257 -0
  554. package/dist/devtools/src/import-guide.js.map +1 -0
  555. package/dist/devtools/src/index.d.ts +24 -0
  556. package/dist/devtools/src/index.d.ts.map +1 -0
  557. package/dist/devtools/src/index.js +32 -0
  558. package/dist/devtools/src/index.js.map +1 -0
  559. package/dist/devtools/src/inspector/index.d.ts +232 -0
  560. package/dist/devtools/src/inspector/index.d.ts.map +1 -0
  561. package/dist/devtools/src/inspector/index.js +551 -0
  562. package/dist/devtools/src/inspector/index.js.map +1 -0
  563. package/dist/devtools/src/modifier-parameter-system.d.ts +69 -0
  564. package/dist/devtools/src/modifier-parameter-system.d.ts.map +1 -0
  565. package/dist/devtools/src/modifier-parameter-system.js +462 -0
  566. package/dist/devtools/src/modifier-parameter-system.js.map +1 -0
  567. package/dist/devtools/src/plugins/simplified-error-handler.d.ts +83 -0
  568. package/dist/devtools/src/plugins/simplified-error-handler.d.ts.map +1 -0
  569. package/dist/devtools/src/plugins/simplified-error-handler.js +335 -0
  570. package/dist/devtools/src/plugins/simplified-error-handler.js.map +1 -0
  571. package/dist/devtools/src/profiler/index.d.ts +21 -0
  572. package/dist/devtools/src/profiler/index.d.ts.map +1 -0
  573. package/dist/devtools/src/profiler/index.js +30 -0
  574. package/dist/devtools/src/profiler/index.js.map +1 -0
  575. package/dist/devtools/src/profiler/performance-optimizer.d.ts +115 -0
  576. package/dist/devtools/src/profiler/performance-optimizer.d.ts.map +1 -0
  577. package/dist/devtools/src/profiler/performance-optimizer.js +273 -0
  578. package/dist/devtools/src/profiler/performance-optimizer.js.map +1 -0
  579. package/dist/devtools/src/profiler/production-monitoring.d.ts +150 -0
  580. package/dist/devtools/src/profiler/production-monitoring.d.ts.map +1 -0
  581. package/dist/devtools/src/profiler/production-monitoring.js +274 -0
  582. package/dist/devtools/src/profiler/production-monitoring.js.map +1 -0
  583. package/dist/devtools/src/runtime/error-boundary.d.ts +302 -0
  584. package/dist/devtools/src/runtime/error-boundary.d.ts.map +1 -0
  585. package/dist/devtools/src/runtime/error-boundary.js +717 -0
  586. package/dist/devtools/src/runtime/error-boundary.js.map +1 -0
  587. package/dist/devtools/src/runtime/error-recovery.d.ts +267 -0
  588. package/dist/devtools/src/runtime/error-recovery.d.ts.map +1 -0
  589. package/dist/devtools/src/runtime/error-recovery.js +499 -0
  590. package/dist/devtools/src/runtime/error-recovery.js.map +1 -0
  591. package/dist/devtools/src/runtime/error-reporting.d.ts +287 -0
  592. package/dist/devtools/src/runtime/error-reporting.d.ts.map +1 -0
  593. package/dist/devtools/src/runtime/error-reporting.js +626 -0
  594. package/dist/devtools/src/runtime/error-reporting.js.map +1 -0
  595. package/dist/devtools/src/runtime/error-utils.d.ts +204 -0
  596. package/dist/devtools/src/runtime/error-utils.d.ts.map +1 -0
  597. package/dist/devtools/src/runtime/error-utils.js +519 -0
  598. package/dist/devtools/src/runtime/error-utils.js.map +1 -0
  599. package/dist/devtools/src/runtime/performance.d.ts +217 -0
  600. package/dist/devtools/src/runtime/performance.d.ts.map +1 -0
  601. package/dist/devtools/src/runtime/performance.js +538 -0
  602. package/dist/devtools/src/runtime/performance.js.map +1 -0
  603. package/dist/devtools/src/testing/index.d.ts +29 -0
  604. package/dist/devtools/src/testing/index.d.ts.map +1 -0
  605. package/dist/devtools/src/testing/index.js +48 -0
  606. package/dist/devtools/src/testing/index.js.map +1 -0
  607. package/dist/devtools/src/validation/enhanced-runtime.d.ts +310 -0
  608. package/dist/devtools/src/validation/enhanced-runtime.d.ts.map +1 -0
  609. package/dist/devtools/src/validation/enhanced-runtime.js +603 -0
  610. package/dist/devtools/src/validation/enhanced-runtime.js.map +1 -0
  611. package/dist/devtools/src/validation/error-reporting.d.ts +186 -0
  612. package/dist/devtools/src/validation/error-reporting.d.ts.map +1 -0
  613. package/dist/devtools/src/validation/error-reporting.js +439 -0
  614. package/dist/devtools/src/validation/error-reporting.js.map +1 -0
  615. package/package.json +6 -2
  616. package/dist/commands/analyze.d.ts.map +0 -1
  617. package/dist/commands/analyze.js.map +0 -1
  618. package/dist/commands/dev.d.ts.map +0 -1
  619. package/dist/commands/dev.js.map +0 -1
  620. package/dist/commands/generate.d.ts.map +0 -1
  621. package/dist/commands/generate.js.map +0 -1
  622. package/dist/commands/init.d.ts.map +0 -1
  623. package/dist/commands/init.js.map +0 -1
  624. package/dist/commands/migrate.d.ts.map +0 -1
  625. package/dist/commands/migrate.js.map +0 -1
  626. package/dist/commands/optimize.d.ts.map +0 -1
  627. package/dist/commands/optimize.js.map +0 -1
  628. package/dist/index.d.ts.map +0 -1
  629. package/dist/index.js.map +0 -1
  630. /package/dist/{commands → cli/src/commands}/analyze.d.ts +0 -0
  631. /package/dist/{commands → cli/src/commands}/dev.d.ts +0 -0
  632. /package/dist/{commands → cli/src/commands}/dev.js +0 -0
  633. /package/dist/{commands → cli/src/commands}/generate.d.ts +0 -0
  634. /package/dist/{commands → cli/src/commands}/init.d.ts +0 -0
  635. /package/dist/{commands → cli/src/commands}/migrate.d.ts +0 -0
  636. /package/dist/{commands → cli/src/commands}/optimize.d.ts +0 -0
  637. /package/dist/{commands → cli/src/commands}/optimize.js +0 -0
  638. /package/dist/{index.d.ts → cli/src/index.d.ts} +0 -0
@@ -0,0 +1,1062 @@
1
+ /**
2
+ * Base Modifier System Implementation
3
+ *
4
+ * Core modifier classes and utilities for the SwiftUI-inspired modifier system.
5
+ */
6
+ import { createEffect, isComputed, isSignal, getThemeSignal } from '../reactive';
7
+ import { ModifierPriority } from './types';
8
+ import { isInfinity, dimensionToCSS, shouldExpandForInfinity, } from '../constants/layout';
9
+ /**
10
+ * Abstract base modifier class
11
+ */
12
+ export class BaseModifier {
13
+ properties;
14
+ constructor(properties) {
15
+ this.properties = properties;
16
+ }
17
+ /**
18
+ * Helper to resolve reactive properties
19
+ */
20
+ resolveReactiveProps(props, context) {
21
+ const resolved = {};
22
+ for (const [key, value] of Object.entries(props)) {
23
+ if (isSignal(value) || isComputed(value)) {
24
+ // Preserve the signal/computed - let applyStyles handle reactivity
25
+ resolved[key] = value;
26
+ }
27
+ else {
28
+ // Static value
29
+ resolved[key] = value;
30
+ }
31
+ }
32
+ // Context parameter is kept for compatibility but not used in new approach
33
+ void context;
34
+ return resolved;
35
+ }
36
+ /**
37
+ * Apply a single style change to an element with reactive support
38
+ */
39
+ applyStyleChange(element, property, value) {
40
+ if (element instanceof HTMLElement) {
41
+ const cssProperty = this.toCSSProperty(property);
42
+ // Handle reactive values (signals and computed)
43
+ if (isSignal(value) || isComputed(value)) {
44
+ // Create reactive effect for this style property
45
+ createEffect(() => {
46
+ const currentValue = value();
47
+ const cssValue = String(currentValue);
48
+ // Check if value contains !important and handle it properly
49
+ if (cssValue.includes('!important')) {
50
+ const actualValue = cssValue.replace(/\s*!important\s*$/, '').trim();
51
+ element.style.setProperty(cssProperty, actualValue, 'important');
52
+ }
53
+ else {
54
+ element.style.setProperty(cssProperty, cssValue);
55
+ }
56
+ });
57
+ }
58
+ else {
59
+ // Handle static values
60
+ const cssValue = String(value);
61
+ // Check if value contains !important and handle it properly
62
+ if (cssValue.includes('!important')) {
63
+ const actualValue = cssValue.replace(/\s*!important\s*$/, '').trim();
64
+ element.style.setProperty(cssProperty, actualValue, 'important');
65
+ }
66
+ else {
67
+ element.style.setProperty(cssProperty, cssValue);
68
+ }
69
+ }
70
+ }
71
+ }
72
+ /**
73
+ * Convert camelCase property to CSS kebab-case
74
+ */
75
+ toCSSProperty(property) {
76
+ return property.replace(/([A-Z])/g, '-$1').toLowerCase();
77
+ }
78
+ /**
79
+ * Convert value to CSS value string
80
+ */
81
+ toCSSValue(value) {
82
+ if (typeof value === 'number') {
83
+ return `${value}px`;
84
+ }
85
+ return String(value);
86
+ }
87
+ /**
88
+ * Convert value to CSS value string with property-specific handling
89
+ */
90
+ toCSSValueForProperty(property, value) {
91
+ if (typeof value === 'number') {
92
+ // Properties that should be unitless
93
+ const unitlessProperties = [
94
+ 'opacity',
95
+ 'z-index',
96
+ 'line-height',
97
+ 'flex-grow',
98
+ 'flex-shrink',
99
+ 'order',
100
+ 'column-count',
101
+ 'font-weight',
102
+ ];
103
+ if (unitlessProperties.includes(property)) {
104
+ return String(value);
105
+ }
106
+ return `${value}px`;
107
+ }
108
+ // Properties that should be passed through as-is (no processing)
109
+ const passthroughProperties = [
110
+ 'filter', // CSS filter strings should not be processed
111
+ 'transform', // CSS transform strings
112
+ 'clip-path', // CSS clip-path strings
113
+ ];
114
+ if (passthroughProperties.includes(property)) {
115
+ return String(value);
116
+ }
117
+ return String(value);
118
+ }
119
+ /**
120
+ * Apply multiple CSS properties to an element with reactive support
121
+ */
122
+ applyStyles(element, styles) {
123
+ // Check if element has a style property (for testing and real elements)
124
+ if (element instanceof HTMLElement || element.style) {
125
+ const styleTarget = element instanceof HTMLElement ? element.style : element.style;
126
+ for (const [property, value] of Object.entries(styles)) {
127
+ if (value !== undefined) {
128
+ const cssProperty = this.toCSSProperty(property);
129
+ // Handle reactive values (signals and computed)
130
+ if (isSignal(value) || isComputed(value)) {
131
+ // Create reactive effect for this style property
132
+ createEffect(() => {
133
+ const currentValue = value();
134
+ const cssValue = this.toCSSValueForProperty(cssProperty, currentValue);
135
+ if (styleTarget.setProperty) {
136
+ // Check if value contains !important and handle it properly
137
+ if (typeof cssValue === 'string' &&
138
+ cssValue.includes('!important')) {
139
+ const actualValue = cssValue
140
+ .replace(/\s*!important\s*$/, '')
141
+ .trim();
142
+ styleTarget.setProperty(cssProperty, actualValue, 'important');
143
+ }
144
+ else {
145
+ styleTarget.setProperty(cssProperty, cssValue);
146
+ }
147
+ }
148
+ else {
149
+ ;
150
+ styleTarget[cssProperty] = cssValue;
151
+ }
152
+ });
153
+ }
154
+ else {
155
+ // Handle static values
156
+ const cssValue = this.toCSSValueForProperty(cssProperty, value);
157
+ if (styleTarget.setProperty) {
158
+ // Check if value contains !important and handle it properly
159
+ if (typeof cssValue === 'string' &&
160
+ cssValue.includes('!important')) {
161
+ const actualValue = cssValue
162
+ .replace(/\s*!important\s*$/, '')
163
+ .trim();
164
+ styleTarget.setProperty(cssProperty, actualValue, 'important');
165
+ }
166
+ else {
167
+ styleTarget.setProperty(cssProperty, cssValue);
168
+ }
169
+ }
170
+ else {
171
+ ;
172
+ styleTarget[cssProperty] = cssValue;
173
+ }
174
+ }
175
+ }
176
+ }
177
+ }
178
+ }
179
+ /**
180
+ * Add CSS classes to an element
181
+ */
182
+ addClasses(element, classes) {
183
+ if (element instanceof HTMLElement) {
184
+ element.classList.add(...classes);
185
+ }
186
+ }
187
+ /**
188
+ * Remove CSS classes from an element
189
+ */
190
+ removeClasses(element, classes) {
191
+ if (element instanceof HTMLElement) {
192
+ element.classList.remove(...classes);
193
+ }
194
+ }
195
+ /**
196
+ * Create a style computation context
197
+ */
198
+ createStyleContext(componentId, element, modifiers) {
199
+ return {
200
+ componentId,
201
+ element,
202
+ modifiers,
203
+ signals: new Set(),
204
+ cleanup: [],
205
+ };
206
+ }
207
+ }
208
+ /**
209
+ * Layout modifier for frame, padding, margin
210
+ */
211
+ export class LayoutModifier extends BaseModifier {
212
+ type = 'layout';
213
+ priority = ModifierPriority.LAYOUT;
214
+ apply(node, context) {
215
+ if (!node.element || !context.element)
216
+ return;
217
+ const styleContext = this.createStyleContext(context.componentId, context.element, []);
218
+ const styles = this.computeLayoutStyles(this.properties, styleContext);
219
+ this.applyStyles(context.element, styles);
220
+ // Layout modifiers (offset, aspectRatio, scaleEffect, zIndex) have been
221
+ // migrated to @tachui/modifiers/layout for enhanced functionality
222
+ // Handle absolutePosition separately for proper positioning (Phase 3 - Epic: Butternut)
223
+ const props = this.properties;
224
+ if (props.position && context.element instanceof HTMLElement) {
225
+ this.applyAbsolutePosition(context.element, props.position);
226
+ }
227
+ return undefined;
228
+ }
229
+ // Layout modifier implementations have been migrated to @tachui/modifiers/layout
230
+ applyAbsolutePosition(element, position) {
231
+ const { x, y } = position;
232
+ const currentX = x ?? 'auto';
233
+ const currentY = y ?? 'auto';
234
+ // Position-based transform (not a scale or offset, but absolute positioning)
235
+ element.style.left = this.toCSSValue(currentX);
236
+ element.style.top = this.toCSSValue(currentY);
237
+ }
238
+ computeLayoutStyles(props, _context) {
239
+ const styles = {};
240
+ // Frame properties - handle infinity values properly
241
+ if (props.frame) {
242
+ const frame = props.frame;
243
+ // Check for infinity constraints and apply appropriate flex/size styles
244
+ const infinityResult = shouldExpandForInfinity(frame);
245
+ Object.assign(styles, infinityResult.cssProps);
246
+ // Convert dimensions to CSS, handling infinity appropriately
247
+ // Don't apply explicit width/height if infinity expansion is happening
248
+ if (frame.width !== undefined) {
249
+ const cssValue = dimensionToCSS(frame.width);
250
+ if (cssValue !== undefined &&
251
+ !isInfinity(frame.width) &&
252
+ !infinityResult.expandWidth) {
253
+ styles.width = cssValue;
254
+ }
255
+ }
256
+ if (frame.height !== undefined) {
257
+ const cssValue = dimensionToCSS(frame.height);
258
+ if (cssValue !== undefined &&
259
+ !isInfinity(frame.height) &&
260
+ !infinityResult.expandHeight) {
261
+ styles.height = cssValue;
262
+ }
263
+ }
264
+ if (frame.minWidth !== undefined) {
265
+ const cssValue = dimensionToCSS(frame.minWidth);
266
+ if (cssValue !== undefined) {
267
+ styles.minWidth = cssValue;
268
+ }
269
+ }
270
+ if (frame.maxWidth !== undefined && !isInfinity(frame.maxWidth)) {
271
+ const cssValue = dimensionToCSS(frame.maxWidth);
272
+ if (cssValue !== undefined) {
273
+ styles.maxWidth = cssValue;
274
+ }
275
+ }
276
+ else if (isInfinity(frame.maxWidth)) {
277
+ // SwiftUI compatibility: maxWidth infinity means expand to fill available width
278
+ // Remove maxWidth constraint and use flex properties for expansion
279
+ styles.maxWidth = 'none';
280
+ styles.flexGrow = '1 !important';
281
+ styles.flexShrink = '1 !important';
282
+ styles.flexBasis = '0% !important';
283
+ styles.alignSelf = 'stretch !important';
284
+ }
285
+ if (frame.minHeight !== undefined) {
286
+ const cssValue = dimensionToCSS(frame.minHeight);
287
+ if (cssValue !== undefined) {
288
+ styles.minHeight = cssValue;
289
+ }
290
+ }
291
+ if (frame.maxHeight !== undefined && !isInfinity(frame.maxHeight)) {
292
+ const cssValue = dimensionToCSS(frame.maxHeight);
293
+ if (cssValue !== undefined) {
294
+ styles.maxHeight = cssValue;
295
+ }
296
+ }
297
+ else if (isInfinity(frame.maxHeight)) {
298
+ // SwiftUI compatibility: maxHeight infinity means expand to fill available height
299
+ // Remove maxHeight constraint and use flex properties for expansion
300
+ styles.maxHeight = 'none';
301
+ styles.flexGrow = '1 !important';
302
+ styles.flexShrink = '1 !important';
303
+ styles.flexBasis = '0% !important';
304
+ styles.alignSelf = 'stretch !important';
305
+ }
306
+ }
307
+ // Padding
308
+ if (props.padding !== undefined) {
309
+ if (typeof props.padding === 'number') {
310
+ styles.padding = this.toCSSValue(props.padding);
311
+ }
312
+ else {
313
+ const p = props.padding;
314
+ if (p.top !== undefined)
315
+ styles.paddingTop = this.toCSSValue(p.top);
316
+ if (p.right !== undefined)
317
+ styles.paddingRight = this.toCSSValue(p.right);
318
+ if (p.bottom !== undefined)
319
+ styles.paddingBottom = this.toCSSValue(p.bottom);
320
+ if (p.left !== undefined)
321
+ styles.paddingLeft = this.toCSSValue(p.left);
322
+ }
323
+ }
324
+ // Margin
325
+ if (props.margin !== undefined) {
326
+ if (typeof props.margin === 'number') {
327
+ styles.margin = this.toCSSValue(props.margin);
328
+ }
329
+ else {
330
+ const m = props.margin;
331
+ if (m.top !== undefined)
332
+ styles.marginTop = this.toCSSValue(m.top);
333
+ if (m.right !== undefined)
334
+ styles.marginRight = this.toCSSValue(m.right);
335
+ if (m.bottom !== undefined)
336
+ styles.marginBottom = this.toCSSValue(m.bottom);
337
+ if (m.left !== undefined)
338
+ styles.marginLeft = this.toCSSValue(m.left);
339
+ }
340
+ }
341
+ // Alignment
342
+ if (props.alignment) {
343
+ switch (props.alignment) {
344
+ case 'leading':
345
+ styles.textAlign = 'left';
346
+ styles.alignItems = 'flex-start';
347
+ break;
348
+ case 'center':
349
+ styles.textAlign = 'center';
350
+ styles.alignItems = 'center';
351
+ break;
352
+ case 'trailing':
353
+ styles.textAlign = 'right';
354
+ styles.alignItems = 'flex-end';
355
+ break;
356
+ case 'top':
357
+ styles.alignItems = 'flex-start';
358
+ break;
359
+ case 'bottom':
360
+ styles.alignItems = 'flex-end';
361
+ break;
362
+ }
363
+ }
364
+ // Layout Priority
365
+ // In SwiftUI, layoutPriority determines which views get priority in sizing
366
+ // Higher priority views determine container size in ZStack
367
+ // We implement this using CSS flexbox properties for flexible layouts
368
+ if (props.layoutPriority !== undefined) {
369
+ const priority = Number(props.layoutPriority);
370
+ // Set flex properties based on priority
371
+ // Higher priority = less flex shrink, more flex grow
372
+ if (priority > 0) {
373
+ // High priority: Don't shrink, allow growth
374
+ styles.flexShrink = '0';
375
+ styles.flexGrow = String(Math.max(1, priority / 10));
376
+ // For ZStack containers, higher priority elements determine size
377
+ // We use z-index for layering and flex properties for sizing behavior
378
+ styles.zIndex = String(priority);
379
+ // In grid layouts, higher priority gets more space
380
+ styles.gridRowEnd = `span ${String(Math.min(10, Math.max(1, Math.ceil(priority / 10))))}`;
381
+ styles.gridColumnEnd = `span ${String(Math.min(10, Math.max(1, Math.ceil(priority / 10))))}`;
382
+ }
383
+ else if (priority === 0) {
384
+ // Default priority: Normal flex behavior
385
+ styles.flexShrink = '1';
386
+ styles.flexGrow = '1';
387
+ }
388
+ else {
389
+ // Low priority: Shrink more, grow less
390
+ styles.flexShrink = String(Math.abs(priority));
391
+ styles.flexGrow = '0';
392
+ styles.zIndex = String(priority);
393
+ }
394
+ // For containers that need to size based on highest priority child
395
+ // We use CSS custom properties that can be read by parent containers
396
+ if (styles && typeof styles === 'object' && 'setProperty' in styles) {
397
+ ;
398
+ styles.setProperty('--layout-priority', String(priority));
399
+ }
400
+ }
401
+ // Offset modifier (SwiftUI .offset(x, y))
402
+ // Note: Offset handling is done in the apply method with proper reactive support
403
+ // This is just for setting up the basic structure
404
+ if (props.offset) {
405
+ // The actual transform application happens in apply() method
406
+ // to handle both reactive and static values properly
407
+ }
408
+ // Aspect Ratio modifier (SwiftUI .aspectRatio(ratio, contentMode))
409
+ if (props.aspectRatio) {
410
+ const { ratio, contentMode } = props.aspectRatio;
411
+ if (ratio !== undefined) {
412
+ // Apply CSS aspect-ratio property
413
+ styles.aspectRatio = typeof ratio === 'number' ? String(ratio) : ratio;
414
+ // Handle content mode
415
+ if (contentMode === 'fill') {
416
+ styles.objectFit = 'cover';
417
+ }
418
+ else {
419
+ styles.objectFit = 'contain';
420
+ }
421
+ }
422
+ }
423
+ // Fixed Size modifier (SwiftUI .fixedSize())
424
+ if (props.fixedSize) {
425
+ const { horizontal, vertical } = props.fixedSize;
426
+ if (horizontal) {
427
+ styles.flexShrink = '0';
428
+ styles.width = 'max-content';
429
+ }
430
+ if (vertical) {
431
+ styles.flexShrink = '0';
432
+ styles.height = 'max-content';
433
+ }
434
+ }
435
+ return styles;
436
+ }
437
+ }
438
+ /**
439
+ * Appearance modifier for colors, fonts, borders, shadows
440
+ */
441
+ export class AppearanceModifier extends BaseModifier {
442
+ type = 'appearance';
443
+ priority = ModifierPriority.APPEARANCE;
444
+ apply(node, context) {
445
+ if (!node.element || !context.element) {
446
+ return;
447
+ }
448
+ const styleContext = this.createStyleContext(context.componentId, context.element, []);
449
+ const resolved = this.resolveReactiveProps(this.properties, styleContext);
450
+ // Handle Assets separately with theme reactivity
451
+ this.applyAssetBasedStyles(context.element, resolved);
452
+ // Handle non-Asset styles normally
453
+ const styles = this.computeAppearanceStyles(resolved);
454
+ this.applyStyles(context.element, styles);
455
+ // Handle HTML attributes (ARIA, role, navigation, etc.)
456
+ this.applyAttributes(context.element, resolved);
457
+ return undefined;
458
+ }
459
+ /**
460
+ * Apply Asset-based styles with theme reactivity
461
+ */
462
+ applyAssetBasedStyles(element, props) {
463
+ // Get the shared theme signal
464
+ const themeSignal = getThemeSignal();
465
+ // Handle foregroundColor Asset
466
+ if (props.foregroundColor && this.isAsset(props.foregroundColor)) {
467
+ createEffect(() => {
468
+ // Watch theme changes to trigger re-resolution
469
+ themeSignal();
470
+ // Re-resolve Asset when theme changes
471
+ const resolvedColor = props.foregroundColor.resolve();
472
+ this.applyStyleChange(element, 'color', resolvedColor);
473
+ });
474
+ }
475
+ // Handle backgroundColor Asset
476
+ if (props.backgroundColor && this.isAsset(props.backgroundColor)) {
477
+ createEffect(() => {
478
+ // Watch theme changes to trigger re-resolution
479
+ themeSignal();
480
+ // Re-resolve Asset when theme changes
481
+ const resolvedColor = props.backgroundColor.resolve();
482
+ this.applyStyleChange(element, 'backgroundColor', resolvedColor);
483
+ });
484
+ }
485
+ // Handle border color Asset
486
+ if (props.border?.color && this.isAsset(props.border.color)) {
487
+ createEffect(() => {
488
+ // Watch theme changes
489
+ themeSignal();
490
+ // Re-resolve Asset when theme changes
491
+ const resolvedColor = props.border.color.resolve();
492
+ this.applyStyleChange(element, 'borderColor', resolvedColor);
493
+ });
494
+ }
495
+ }
496
+ /**
497
+ * Check if a value is an Asset object (including Asset proxies)
498
+ */
499
+ isAsset(value) {
500
+ return (value !== null &&
501
+ value !== undefined &&
502
+ typeof value === 'object' &&
503
+ 'resolve' in value &&
504
+ typeof value.resolve === 'function');
505
+ }
506
+ computeAppearanceStyles(props) {
507
+ const styles = {};
508
+ // Colors (skip Assets - they're handled reactively in applyAssetBasedStyles)
509
+ if (props.foregroundColor && !this.isAsset(props.foregroundColor)) {
510
+ styles.color = props.foregroundColor;
511
+ }
512
+ if (props.backgroundColor && !this.isAsset(props.backgroundColor)) {
513
+ styles.backgroundColor = props.backgroundColor;
514
+ }
515
+ if (props.opacity !== undefined)
516
+ styles.opacity = props.opacity;
517
+ // Font
518
+ if (props.font) {
519
+ const font = props.font;
520
+ if (font.family) {
521
+ // Handle FontAsset objects that need to be resolved
522
+ if (typeof font.family === 'object' &&
523
+ font.family !== null &&
524
+ typeof font.family.resolve === 'function') {
525
+ const resolved = font.family.resolve();
526
+ styles.fontFamily = resolved;
527
+ }
528
+ else {
529
+ styles.fontFamily = font.family;
530
+ }
531
+ }
532
+ if (font.size)
533
+ styles.fontSize = this.toCSSValue(font.size);
534
+ if (font.weight)
535
+ styles.fontWeight = String(font.weight);
536
+ if (font.style)
537
+ styles.fontStyle = font.style;
538
+ }
539
+ // Corner radius
540
+ if (props.cornerRadius !== undefined) {
541
+ styles.borderRadius = this.toCSSValue(props.cornerRadius);
542
+ }
543
+ // Border
544
+ if (props.border) {
545
+ const border = props.border;
546
+ if (border.width !== undefined)
547
+ styles.borderWidth = this.toCSSValue(border.width);
548
+ if (border.color && !this.isAsset(border.color)) {
549
+ styles.borderColor = border.color;
550
+ }
551
+ if (border.style)
552
+ styles.borderStyle = border.style;
553
+ }
554
+ // Shadow functionality moved to @tachui/modifiers/effects entry point
555
+ // Clipped and Clip Shape modifiers moved to @tachui/modifiers package
556
+ // Visual Effects (Phase 2 - Epic: Butternut)
557
+ const filters = [];
558
+ if (props.blur !== undefined) {
559
+ filters.push(`blur(${props.blur}px)`);
560
+ }
561
+ if (props.brightness !== undefined) {
562
+ filters.push(`brightness(${props.brightness})`);
563
+ }
564
+ if (props.contrast !== undefined) {
565
+ filters.push(`contrast(${props.contrast})`);
566
+ }
567
+ if (props.saturation !== undefined) {
568
+ filters.push(`saturate(${props.saturation})`);
569
+ }
570
+ if (props.hueRotation !== undefined) {
571
+ filters.push(`hue-rotate(${props.hueRotation}deg)`);
572
+ }
573
+ if (props.grayscale !== undefined) {
574
+ filters.push(`grayscale(${props.grayscale})`);
575
+ }
576
+ if (props.colorInvert !== undefined) {
577
+ filters.push(`invert(${props.colorInvert})`);
578
+ }
579
+ if (filters.length > 0) {
580
+ styles.filter = filters.join(' ');
581
+ }
582
+ return styles;
583
+ }
584
+ /**
585
+ * Apply HTML attributes (ARIA, role, data attributes, etc.)
586
+ */
587
+ applyAttributes(element, props) {
588
+ if (!element)
589
+ return;
590
+ // Also need to get the component from the context to update props
591
+ // This is a hack, but needed for tests that expect attributes on component.props
592
+ const component = this.findComponentFromElement(element);
593
+ // Common HTML attributes
594
+ if (props.role !== undefined) {
595
+ element.setAttribute('role', String(props.role));
596
+ if (component?.props) {
597
+ component.props.role = String(props.role);
598
+ }
599
+ }
600
+ // ARIA attributes
601
+ if (props['aria-label'] !== undefined) {
602
+ element.setAttribute('aria-label', String(props['aria-label']));
603
+ if (component?.props) {
604
+ component.props['aria-label'] = String(props['aria-label']);
605
+ }
606
+ }
607
+ if (props['aria-live'] !== undefined) {
608
+ element.setAttribute('aria-live', String(props['aria-live']));
609
+ if (component?.props) {
610
+ component.props['aria-live'] = String(props['aria-live']);
611
+ }
612
+ }
613
+ if (props['aria-describedby'] !== undefined) {
614
+ element.setAttribute('aria-describedby', String(props['aria-describedby']));
615
+ if (component?.props) {
616
+ component.props['aria-describedby'] = String(props['aria-describedby']);
617
+ }
618
+ }
619
+ if (props['aria-modal'] !== undefined) {
620
+ element.setAttribute('aria-modal', String(props['aria-modal']));
621
+ if (component?.props) {
622
+ component.props['aria-modal'] = String(props['aria-modal']);
623
+ }
624
+ }
625
+ if (props['aria-hidden'] !== undefined) {
626
+ element.setAttribute('aria-hidden', String(props['aria-hidden']));
627
+ if (component?.props) {
628
+ component.props['aria-hidden'] = String(props['aria-hidden']);
629
+ }
630
+ }
631
+ // Navigation attributes (for custom processing by navigation system)
632
+ if (props.navigationTitle !== undefined) {
633
+ element.setAttribute('data-navigation-title', String(props.navigationTitle));
634
+ if (component?.props) {
635
+ component.props.navigationTitle = String(props.navigationTitle);
636
+ }
637
+ }
638
+ if (props.navigationBarHidden !== undefined) {
639
+ element.setAttribute('data-navigation-bar-hidden', String(props.navigationBarHidden));
640
+ if (component?.props) {
641
+ component.props.navigationBarHidden = props.navigationBarHidden;
642
+ }
643
+ // Also apply aria-hidden for accessibility
644
+ if (props.navigationBarHidden) {
645
+ element.setAttribute('aria-hidden', 'true');
646
+ if (component?.props) {
647
+ component.props['aria-hidden'] = 'true';
648
+ }
649
+ }
650
+ }
651
+ if (props.navigationBarItems !== undefined) {
652
+ // Store as JSON in data attribute for navigation system to process
653
+ element.setAttribute('data-navigation-bar-items', JSON.stringify(props.navigationBarItems));
654
+ if (component?.props) {
655
+ component.props.navigationBarItems = props.navigationBarItems;
656
+ }
657
+ }
658
+ }
659
+ findComponentFromElement(element) {
660
+ // Try to find the component instance associated with this element
661
+ // This is a simplified approach - in a real implementation, we'd have a proper mapping
662
+ return element._tachui_component || null;
663
+ }
664
+ }
665
+ /**
666
+ * Interaction modifier for events and accessibility
667
+ */
668
+ export class InteractionModifier extends BaseModifier {
669
+ type = 'interaction';
670
+ priority = ModifierPriority.INTERACTION;
671
+ apply(_node, context) {
672
+ if (!context.element)
673
+ return;
674
+ const props = this.properties;
675
+ // Event handlers
676
+ if (props.onTap) {
677
+ context.element.addEventListener('click', props.onTap);
678
+ }
679
+ if (props.onHover) {
680
+ context.element.addEventListener('mouseenter', () => props.onHover(true));
681
+ context.element.addEventListener('mouseleave', () => props.onHover(false));
682
+ }
683
+ if (props.onMouseEnter) {
684
+ context.element.addEventListener('mouseenter', props.onMouseEnter);
685
+ }
686
+ if (props.onMouseLeave) {
687
+ context.element.addEventListener('mouseleave', props.onMouseLeave);
688
+ }
689
+ if (props.onMouseDown) {
690
+ context.element.addEventListener('mousedown', props.onMouseDown);
691
+ }
692
+ if (props.onMouseUp) {
693
+ context.element.addEventListener('mouseup', props.onMouseUp);
694
+ }
695
+ if (props.onDragStart) {
696
+ context.element.addEventListener('dragstart', props.onDragStart);
697
+ }
698
+ if (props.onDragOver) {
699
+ context.element.addEventListener('dragover', props.onDragOver);
700
+ }
701
+ if (props.onDragLeave) {
702
+ context.element.addEventListener('dragleave', props.onDragLeave);
703
+ }
704
+ if (props.onDrop) {
705
+ context.element.addEventListener('drop', props.onDrop);
706
+ }
707
+ // Additional mouse events
708
+ if (props.onDoubleClick) {
709
+ context.element.addEventListener('dblclick', props.onDoubleClick);
710
+ }
711
+ if (props.onContextMenu) {
712
+ context.element.addEventListener('contextmenu', props.onContextMenu);
713
+ }
714
+ // Focus events
715
+ if (props.onFocus) {
716
+ context.element.addEventListener('focus', () => props.onFocus(true));
717
+ context.element.addEventListener('blur', () => props.onFocus(false));
718
+ }
719
+ if (props.onBlur) {
720
+ context.element.addEventListener('blur', () => props.onBlur(false));
721
+ }
722
+ // Keyboard events
723
+ if (props.onKeyPress) {
724
+ context.element.addEventListener('keypress', props.onKeyPress);
725
+ }
726
+ if (props.onKeyDown) {
727
+ context.element.addEventListener('keydown', props.onKeyDown);
728
+ }
729
+ if (props.onKeyUp) {
730
+ context.element.addEventListener('keyup', props.onKeyUp);
731
+ }
732
+ // Touch events
733
+ if (props.onTouchStart) {
734
+ context.element.addEventListener('touchstart', props.onTouchStart, {
735
+ passive: true,
736
+ });
737
+ }
738
+ if (props.onTouchMove) {
739
+ context.element.addEventListener('touchmove', props.onTouchMove, {
740
+ passive: true,
741
+ });
742
+ }
743
+ if (props.onTouchEnd) {
744
+ context.element.addEventListener('touchend', props.onTouchEnd, {
745
+ passive: true,
746
+ });
747
+ }
748
+ if (props.onTouchCancel) {
749
+ context.element.addEventListener('touchcancel', props.onTouchCancel, {
750
+ passive: true,
751
+ });
752
+ }
753
+ // Swipe gestures (simplified implementation)
754
+ if (props.onSwipeLeft || props.onSwipeRight) {
755
+ let startX = 0;
756
+ let startY = 0;
757
+ context.element.addEventListener('touchstart', (e) => {
758
+ const touchEvent = e;
759
+ const touch = touchEvent.touches[0];
760
+ startX = touch.clientX;
761
+ startY = touch.clientY;
762
+ }, { passive: true });
763
+ context.element.addEventListener('touchend', (e) => {
764
+ const touchEvent = e;
765
+ const touch = touchEvent.changedTouches[0];
766
+ const deltaX = touch.clientX - startX;
767
+ const deltaY = touch.clientY - startY;
768
+ const minSwipeDistance = 50;
769
+ // Only register as swipe if horizontal movement is greater than vertical
770
+ if (Math.abs(deltaX) > Math.abs(deltaY) &&
771
+ Math.abs(deltaX) > minSwipeDistance) {
772
+ if (deltaX < 0 && props.onSwipeLeft) {
773
+ props.onSwipeLeft();
774
+ }
775
+ else if (deltaX > 0 && props.onSwipeRight) {
776
+ props.onSwipeRight();
777
+ }
778
+ }
779
+ }, { passive: true });
780
+ }
781
+ // Scroll and wheel events
782
+ if (props.onScroll) {
783
+ context.element.addEventListener('scroll', props.onScroll, {
784
+ passive: true,
785
+ });
786
+ }
787
+ if (props.onWheel) {
788
+ context.element.addEventListener('wheel', props.onWheel, {
789
+ passive: false,
790
+ });
791
+ }
792
+ // Input events
793
+ if (props.onInput) {
794
+ context.element.addEventListener('input', props.onInput);
795
+ }
796
+ if (props.onChange) {
797
+ context.element.addEventListener('change', event => {
798
+ const target = event.target;
799
+ const value = target.value || target.textContent || '';
800
+ props.onChange(value, event);
801
+ });
802
+ }
803
+ // Clipboard events
804
+ if (props.onCopy) {
805
+ context.element.addEventListener('copy', props.onCopy);
806
+ }
807
+ if (props.onCut) {
808
+ context.element.addEventListener('cut', props.onCut);
809
+ }
810
+ if (props.onPaste) {
811
+ context.element.addEventListener('paste', props.onPaste);
812
+ }
813
+ // Selection events
814
+ if (props.onSelect) {
815
+ context.element.addEventListener('select', props.onSelect);
816
+ }
817
+ // Disabled state
818
+ if (props.disabled !== undefined) {
819
+ if (context.element instanceof HTMLElement) {
820
+ if (props.disabled) {
821
+ context.element.setAttribute('disabled', 'true');
822
+ context.element.style.pointerEvents = 'none';
823
+ context.element.style.opacity = '0.6';
824
+ }
825
+ else {
826
+ context.element.removeAttribute('disabled');
827
+ context.element.style.pointerEvents = '';
828
+ context.element.style.opacity = '';
829
+ }
830
+ }
831
+ }
832
+ // Draggable state
833
+ if (props.draggable !== undefined) {
834
+ if (context.element instanceof HTMLElement) {
835
+ context.element.draggable = props.draggable;
836
+ }
837
+ }
838
+ // Accessibility
839
+ if (props.accessibilityLabel) {
840
+ context.element.setAttribute('aria-label', props.accessibilityLabel);
841
+ }
842
+ if (props.accessibilityHint) {
843
+ context.element.setAttribute('aria-describedby', props.accessibilityHint);
844
+ }
845
+ return undefined;
846
+ }
847
+ }
848
+ /**
849
+ * Animation modifier for transitions and animations
850
+ */
851
+ export class AnimationModifier extends BaseModifier {
852
+ type = 'animation';
853
+ priority = ModifierPriority.ANIMATION;
854
+ apply(_node, context) {
855
+ if (!context.element)
856
+ return;
857
+ const props = this.properties;
858
+ // Transition
859
+ if (props.transition) {
860
+ const t = props.transition;
861
+ const property = t.property || 'all';
862
+ const duration = t.duration || 300;
863
+ const easing = t.easing || 'ease';
864
+ const delay = t.delay || 0;
865
+ if (context.element instanceof HTMLElement) {
866
+ context.element.style.transition = `${property} ${duration}ms ${easing} ${delay}ms`;
867
+ }
868
+ }
869
+ // Animation
870
+ if (props.animation && context.element instanceof HTMLElement) {
871
+ const anim = props.animation;
872
+ if (anim.keyframes) {
873
+ // Create keyframes
874
+ const keyframeName = `tachui-animation-${context.componentId}-${Date.now()}`;
875
+ const keyframeRule = this.createKeyframeRule(keyframeName, anim.keyframes);
876
+ // Add keyframes to stylesheet
877
+ this.addKeyframesToStylesheet(keyframeRule);
878
+ // Apply animation
879
+ const duration = anim.duration || 1000;
880
+ const easing = anim.easing || 'ease';
881
+ const iterations = anim.iterations || 1;
882
+ const direction = anim.direction || 'normal';
883
+ context.element.style.animation = `${keyframeName} ${duration}ms ${easing} ${iterations} ${direction}`;
884
+ }
885
+ }
886
+ // Transform
887
+ if (props.transform && context.element instanceof HTMLElement) {
888
+ if (isSignal(props.transform) || isComputed(props.transform)) {
889
+ // Create reactive effect for transform
890
+ createEffect(() => {
891
+ const transformValue = props.transform();
892
+ if (context.element instanceof HTMLElement) {
893
+ context.element.style.transform = transformValue;
894
+ }
895
+ });
896
+ }
897
+ else {
898
+ context.element.style.transform = props.transform;
899
+ }
900
+ }
901
+ // Scale Effect (SwiftUI .scaleEffect(x, y, anchor))
902
+ if (props.scaleEffect && context.element instanceof HTMLElement) {
903
+ const { x, y, anchor } = props.scaleEffect;
904
+ const scaleY = y ?? x; // Default to uniform scaling if y not provided
905
+ // Convert anchor to CSS transform-origin
906
+ const anchorOrigins = {
907
+ center: '50% 50%',
908
+ top: '50% 0%',
909
+ topLeading: '0% 0%',
910
+ topTrailing: '100% 0%',
911
+ bottom: '50% 100%',
912
+ bottomLeading: '0% 100%',
913
+ bottomTrailing: '100% 100%',
914
+ leading: '0% 50%',
915
+ trailing: '100% 50%',
916
+ };
917
+ const transformOrigin = anchorOrigins[anchor || 'center'] || '50% 50%';
918
+ context.element.style.transformOrigin = transformOrigin;
919
+ // Create scale transform
920
+ const scaleTransform = `scale(${x}, ${scaleY})`;
921
+ // Preserve existing transforms but replace any existing scale functions
922
+ const existingTransform = context.element.style.transform || '';
923
+ const existingTransforms = existingTransform
924
+ .replace(/\s*scale[XYZ3d]*\([^)]*\)\s*/g, ' ')
925
+ .replace(/\s+/g, ' ')
926
+ .trim();
927
+ const newTransform = existingTransforms
928
+ ? `${existingTransforms} ${scaleTransform}`.trim()
929
+ : scaleTransform;
930
+ context.element.style.transform = newTransform;
931
+ }
932
+ // Overlay modifier moved to @tachui/modifiers package
933
+ return undefined;
934
+ }
935
+ createKeyframeRule(name, keyframes) {
936
+ let rule = `@keyframes ${name} {\n`;
937
+ for (const [percentage, styles] of Object.entries(keyframes)) {
938
+ rule += ` ${percentage} {\n`;
939
+ for (const [property, value] of Object.entries(styles)) {
940
+ const cssProperty = this.toCSSProperty(property);
941
+ rule += ` ${cssProperty}: ${value};\n`;
942
+ }
943
+ rule += ` }\n`;
944
+ }
945
+ rule += '}';
946
+ return rule;
947
+ }
948
+ addKeyframesToStylesheet(rule) {
949
+ let stylesheet = document.querySelector('#tachui-animations');
950
+ if (!stylesheet) {
951
+ stylesheet = document.createElement('style');
952
+ stylesheet.id = 'tachui-animations';
953
+ document.head.appendChild(stylesheet);
954
+ }
955
+ stylesheet.appendChild(document.createTextNode(rule));
956
+ }
957
+ }
958
+ /**
959
+ * Lifecycle modifier for component lifecycle events
960
+ */
961
+ export class LifecycleModifier extends BaseModifier {
962
+ type = 'lifecycle';
963
+ priority = ModifierPriority.CUSTOM;
964
+ activeAbortController;
965
+ apply(_node, context) {
966
+ if (!context.element)
967
+ return;
968
+ const props = this.properties;
969
+ // Clean up any existing tasks on re-application
970
+ if (this.activeAbortController) {
971
+ this.activeAbortController.abort();
972
+ }
973
+ // Set up async task with cancellation
974
+ if (props.task) {
975
+ this.setupTask(context, props.task);
976
+ }
977
+ // Set up onAppear/onDisappear with IntersectionObserver
978
+ if (props.onAppear || props.onDisappear) {
979
+ this.setupViewportObserver(context, props);
980
+ }
981
+ return undefined;
982
+ }
983
+ setupTask(_context, task) {
984
+ if (!task)
985
+ return;
986
+ // Create abort controller for task cancellation
987
+ this.activeAbortController = new AbortController();
988
+ const { signal } = this.activeAbortController;
989
+ // Execute the task operation
990
+ const executeTask = async () => {
991
+ try {
992
+ if (signal.aborted)
993
+ return;
994
+ const result = task.operation();
995
+ // Handle both sync and async operations
996
+ if (result instanceof Promise) {
997
+ await result;
998
+ }
999
+ }
1000
+ catch (error) {
1001
+ if (signal.aborted)
1002
+ return;
1003
+ console.error('TachUI Task Error:', error);
1004
+ }
1005
+ };
1006
+ // Start task execution
1007
+ executeTask();
1008
+ // Add cleanup to cancel task on component unmount
1009
+ this.addCleanup(() => {
1010
+ if (this.activeAbortController) {
1011
+ this.activeAbortController.abort();
1012
+ }
1013
+ });
1014
+ }
1015
+ setupViewportObserver(context, props) {
1016
+ if (!context.element)
1017
+ return;
1018
+ const observer = new IntersectionObserver(entries => {
1019
+ entries.forEach(entry => {
1020
+ if (entry.isIntersecting && props.onAppear) {
1021
+ props.onAppear();
1022
+ }
1023
+ else if (!entry.isIntersecting && props.onDisappear) {
1024
+ props.onDisappear();
1025
+ }
1026
+ });
1027
+ });
1028
+ observer.observe(context.element);
1029
+ // Add cleanup to disconnect observer
1030
+ this.addCleanup(() => {
1031
+ observer.disconnect();
1032
+ });
1033
+ }
1034
+ addCleanup(cleanup) {
1035
+ // Store cleanup functions for proper disposal
1036
+ if (!this.properties._cleanupFunctions) {
1037
+ ;
1038
+ this.properties._cleanupFunctions = [];
1039
+ }
1040
+ ;
1041
+ this.properties._cleanupFunctions.push(cleanup);
1042
+ }
1043
+ }
1044
+ /**
1045
+ * Resizable modifier for making images resizable
1046
+ * In SwiftUI, .resizable() allows images to be scaled to fit their container
1047
+ */
1048
+ export class ResizableModifier extends BaseModifier {
1049
+ type = 'resizable';
1050
+ priority = ModifierPriority.APPEARANCE;
1051
+ apply(_node, context) {
1052
+ if (!context.element)
1053
+ return;
1054
+ // For images, resizable means they can be scaled to fit their container
1055
+ // This is typically achieved with object-fit: fill in CSS
1056
+ if (context.element instanceof HTMLImageElement) {
1057
+ context.element.style.objectFit = 'fill';
1058
+ }
1059
+ return undefined;
1060
+ }
1061
+ }
1062
+ //# sourceMappingURL=base.js.map