@tachui/core 0.7.0-alpha1 → 0.8.0-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 (1172) hide show
  1. package/README.md +195 -0
  2. package/dist/bundles/common.d.ts +1 -1
  3. package/dist/bundles/common.d.ts.map +1 -1
  4. package/dist/bundles/minimal.d.ts +17 -5
  5. package/dist/bundles/minimal.d.ts.map +1 -1
  6. package/dist/bundles/production-minimal.d.ts +2 -16
  7. package/dist/bundles/production-minimal.d.ts.map +1 -1
  8. package/dist/common.js +402 -955
  9. package/dist/compiler/advanced-parser.d.ts.map +1 -1
  10. package/dist/compiler/index.js +1392 -10
  11. package/dist/component-XAzF1xqs.js +487 -0
  12. package/dist/component-base-x2XmHFjy.js +255 -0
  13. package/dist/components/index.d.ts +4 -38
  14. package/dist/components/index.d.ts.map +1 -1
  15. package/dist/components/index.js +7 -102
  16. package/dist/components/wrapper.d.ts +5 -152
  17. package/dist/components/wrapper.d.ts.map +1 -1
  18. package/dist/concatenated-component-ByPl3_FF.js +2933 -0
  19. package/dist/constants/index.d.ts +1 -1
  20. package/dist/constants/layout.d.ts +47 -4
  21. package/dist/constants/layout.d.ts.map +1 -1
  22. package/dist/constants/layout.js +52 -14
  23. package/dist/css-classes/index.js +176 -0
  24. package/dist/dom-bridge-CAa1N2zX.js +406 -0
  25. package/dist/effect-B9Knft0b.js +66 -0
  26. package/dist/essential.js +394 -953
  27. package/dist/index-DCPJFUm9.js +1407 -0
  28. package/dist/index-DIvMCJQO.js +268 -0
  29. package/dist/index-vdsiw6gQ.js +777 -0
  30. package/dist/index.d.ts +9 -9
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +394 -953
  33. package/dist/minimal-prod.js +107 -190
  34. package/dist/minimal.js +115 -955
  35. package/dist/modifiers/background.d.ts +41 -11
  36. package/dist/modifiers/background.d.ts.map +1 -1
  37. package/dist/modifiers/base.d.ts +6 -33
  38. package/dist/modifiers/base.d.ts.map +1 -1
  39. package/dist/modifiers/base.js +275 -533
  40. package/dist/modifiers/builder.d.ts +103 -195
  41. package/dist/modifiers/builder.d.ts.map +1 -1
  42. package/dist/modifiers/builder.js +7 -928
  43. package/dist/modifiers/core.d.ts +9 -401
  44. package/dist/modifiers/core.d.ts.map +1 -1
  45. package/dist/modifiers/{utils.d.ts → factories.d.ts} +18 -5
  46. package/dist/modifiers/factories.d.ts.map +1 -0
  47. package/dist/modifiers/index.d.ts +8 -52
  48. package/dist/modifiers/index.d.ts.map +1 -1
  49. package/dist/modifiers/index.js +38 -0
  50. package/dist/modifiers/presets.d.ts +368 -0
  51. package/dist/modifiers/presets.d.ts.map +1 -0
  52. package/dist/modifiers/registry.js +8 -161
  53. package/dist/modifiers/types.d.ts +39 -211
  54. package/dist/modifiers/types.d.ts.map +1 -1
  55. package/dist/modifiers/types.js +0 -1
  56. package/dist/performance-optimizer-stub-CtfXUwl4.js +38 -0
  57. package/dist/plugins/index.d.ts +5 -6
  58. package/dist/plugins/index.d.ts.map +1 -1
  59. package/dist/plugins/index.js +393 -32
  60. package/dist/plugins/simplified-index.d.ts +5 -6
  61. package/dist/plugins/simplified-index.d.ts.map +1 -1
  62. package/dist/production-minimal-BY_gMc-l.js +2532 -0
  63. package/dist/reactive/index.js +489 -91
  64. package/dist/reactive/types.js +0 -1
  65. package/dist/runtime/dom-bridge.js +12 -239
  66. package/dist/runtime/element-override.d.ts.map +1 -1
  67. package/dist/runtime/index.d.ts +0 -7
  68. package/dist/runtime/index.d.ts.map +1 -1
  69. package/dist/runtime/renderer.d.ts.map +1 -1
  70. package/dist/runtime/renderer.js +7 -388
  71. package/dist/runtime/semantic-role-manager.d.ts.map +1 -1
  72. package/dist/runtime/types.js +1 -0
  73. package/dist/scheduler-BKeqwrYE.js +814 -0
  74. package/dist/validation/build-time-stub.d.ts +33 -0
  75. package/dist/validation/build-time-stub.d.ts.map +1 -0
  76. package/dist/validation/debug-tools-stub.d.ts +67 -0
  77. package/dist/validation/debug-tools-stub.d.ts.map +1 -0
  78. package/dist/validation/index.d.ts +23 -78
  79. package/dist/validation/index.d.ts.map +1 -1
  80. package/dist/validation/index.js +788 -233
  81. package/dist/validation/lifecycle-validation.d.ts.map +1 -1
  82. package/dist/validation/performance-optimizer-stub.d.ts +50 -0
  83. package/dist/validation/performance-optimizer-stub.d.ts.map +1 -0
  84. package/dist/validation/plugin-registration.d.ts +5 -1
  85. package/dist/validation/plugin-registration.d.ts.map +1 -1
  86. package/dist/validation/production-bypass-core.d.ts +69 -0
  87. package/dist/validation/production-bypass-core.d.ts.map +1 -0
  88. package/package.json +43 -8
  89. package/dist/assets/Asset.cjs +0 -2
  90. package/dist/assets/Asset.cjs.map +0 -1
  91. package/dist/assets/Asset.js +0 -9
  92. package/dist/assets/Asset.js.map +0 -1
  93. package/dist/assets/AssetCollection.cjs +0 -2
  94. package/dist/assets/AssetCollection.cjs.map +0 -1
  95. package/dist/assets/AssetCollection.js +0 -44
  96. package/dist/assets/AssetCollection.js.map +0 -1
  97. package/dist/assets/ColorAsset.cjs +0 -2
  98. package/dist/assets/ColorAsset.cjs.map +0 -1
  99. package/dist/assets/ColorAsset.js +0 -114
  100. package/dist/assets/ColorAsset.js.map +0 -1
  101. package/dist/assets/FontAsset.cjs +0 -9
  102. package/dist/assets/FontAsset.cjs.map +0 -1
  103. package/dist/assets/FontAsset.js +0 -173
  104. package/dist/assets/FontAsset.js.map +0 -1
  105. package/dist/assets/ImageAsset.cjs +0 -2
  106. package/dist/assets/ImageAsset.cjs.map +0 -1
  107. package/dist/assets/ImageAsset.js +0 -39
  108. package/dist/assets/ImageAsset.js.map +0 -1
  109. package/dist/assets/index.cjs +0 -2
  110. package/dist/assets/index.cjs.map +0 -1
  111. package/dist/assets/index.js +0 -119
  112. package/dist/assets/index.js.map +0 -1
  113. package/dist/common.cjs +0 -2
  114. package/dist/common.cjs.map +0 -1
  115. package/dist/common.js.map +0 -1
  116. package/dist/compiler/advanced-parser.cjs +0 -5
  117. package/dist/compiler/advanced-parser.cjs.map +0 -1
  118. package/dist/compiler/advanced-parser.js +0 -440
  119. package/dist/compiler/advanced-parser.js.map +0 -1
  120. package/dist/compiler/codegen.cjs +0 -6
  121. package/dist/compiler/codegen.cjs.map +0 -1
  122. package/dist/compiler/codegen.js +0 -241
  123. package/dist/compiler/codegen.js.map +0 -1
  124. package/dist/compiler/enhanced-codegen.cjs +0 -6
  125. package/dist/compiler/enhanced-codegen.cjs.map +0 -1
  126. package/dist/compiler/enhanced-codegen.js +0 -347
  127. package/dist/compiler/enhanced-codegen.js.map +0 -1
  128. package/dist/compiler/index.cjs +0 -2
  129. package/dist/compiler/index.cjs.map +0 -1
  130. package/dist/compiler/index.js.map +0 -1
  131. package/dist/compiler/parser.cjs +0 -5
  132. package/dist/compiler/parser.cjs.map +0 -1
  133. package/dist/compiler/parser.js +0 -275
  134. package/dist/compiler/parser.js.map +0 -1
  135. package/dist/compiler/plugin.cjs +0 -33
  136. package/dist/compiler/plugin.cjs.map +0 -1
  137. package/dist/compiler/plugin.js +0 -103
  138. package/dist/compiler/plugin.js.map +0 -1
  139. package/dist/components/BasicInput.cjs +0 -2
  140. package/dist/components/BasicInput.cjs.map +0 -1
  141. package/dist/components/BasicInput.d.ts +0 -116
  142. package/dist/components/BasicInput.d.ts.map +0 -1
  143. package/dist/components/BasicInput.js +0 -182
  144. package/dist/components/BasicInput.js.map +0 -1
  145. package/dist/components/Button.cjs +0 -7
  146. package/dist/components/Button.cjs.map +0 -1
  147. package/dist/components/Button.d.ts +0 -252
  148. package/dist/components/Button.d.ts.map +0 -1
  149. package/dist/components/Button.js +0 -408
  150. package/dist/components/Button.js.map +0 -1
  151. package/dist/components/Divider.cjs +0 -2
  152. package/dist/components/Divider.cjs.map +0 -1
  153. package/dist/components/Divider.d.ts +0 -141
  154. package/dist/components/Divider.d.ts.map +0 -1
  155. package/dist/components/Divider.js +0 -187
  156. package/dist/components/Divider.js.map +0 -1
  157. package/dist/components/EnhancedLink.cjs +0 -2
  158. package/dist/components/EnhancedLink.cjs.map +0 -1
  159. package/dist/components/EnhancedLink.d.ts +0 -365
  160. package/dist/components/EnhancedLink.d.ts.map +0 -1
  161. package/dist/components/EnhancedLink.js +0 -345
  162. package/dist/components/EnhancedLink.js.map +0 -1
  163. package/dist/components/Form.cjs +0 -2
  164. package/dist/components/Form.cjs.map +0 -1
  165. package/dist/components/Form.d.ts +0 -141
  166. package/dist/components/Form.d.ts.map +0 -1
  167. package/dist/components/Form.js +0 -244
  168. package/dist/components/Form.js.map +0 -1
  169. package/dist/components/Grid.cjs +0 -2
  170. package/dist/components/Grid.cjs.map +0 -1
  171. package/dist/components/Grid.d.ts +0 -698
  172. package/dist/components/Grid.d.ts.map +0 -1
  173. package/dist/components/Grid.js +0 -1045
  174. package/dist/components/Grid.js.map +0 -1
  175. package/dist/components/GridResponsive.cjs +0 -2
  176. package/dist/components/GridResponsive.cjs.map +0 -1
  177. package/dist/components/GridResponsive.d.ts +0 -214
  178. package/dist/components/GridResponsive.d.ts.map +0 -1
  179. package/dist/components/GridResponsive.js +0 -382
  180. package/dist/components/GridResponsive.js.map +0 -1
  181. package/dist/components/Image.cjs +0 -2
  182. package/dist/components/Image.cjs.map +0 -1
  183. package/dist/components/Image.d.ts +0 -162
  184. package/dist/components/Image.d.ts.map +0 -1
  185. package/dist/components/Image.js +0 -212
  186. package/dist/components/Image.js.map +0 -1
  187. package/dist/components/List.cjs +0 -2
  188. package/dist/components/List.cjs.map +0 -1
  189. package/dist/components/List.d.ts +0 -287
  190. package/dist/components/List.d.ts.map +0 -1
  191. package/dist/components/List.js +0 -561
  192. package/dist/components/List.js.map +0 -1
  193. package/dist/components/Menu.cjs +0 -2
  194. package/dist/components/Menu.cjs.map +0 -1
  195. package/dist/components/Menu.d.ts +0 -159
  196. package/dist/components/Menu.d.ts.map +0 -1
  197. package/dist/components/Menu.js +0 -443
  198. package/dist/components/Menu.js.map +0 -1
  199. package/dist/components/Picker.cjs +0 -2
  200. package/dist/components/Picker.cjs.map +0 -1
  201. package/dist/components/Picker.d.ts +0 -153
  202. package/dist/components/Picker.d.ts.map +0 -1
  203. package/dist/components/Picker.js +0 -478
  204. package/dist/components/Picker.js.map +0 -1
  205. package/dist/components/ScrollView.cjs +0 -6
  206. package/dist/components/ScrollView.cjs.map +0 -1
  207. package/dist/components/ScrollView.d.ts +0 -222
  208. package/dist/components/ScrollView.d.ts.map +0 -1
  209. package/dist/components/ScrollView.js +0 -363
  210. package/dist/components/ScrollView.js.map +0 -1
  211. package/dist/components/Section.cjs +0 -2
  212. package/dist/components/Section.cjs.map +0 -1
  213. package/dist/components/Section.d.ts +0 -153
  214. package/dist/components/Section.d.ts.map +0 -1
  215. package/dist/components/Section.js +0 -323
  216. package/dist/components/Section.js.map +0 -1
  217. package/dist/components/Show.cjs +0 -2
  218. package/dist/components/Show.cjs.map +0 -1
  219. package/dist/components/Show.d.ts +0 -64
  220. package/dist/components/Show.d.ts.map +0 -1
  221. package/dist/components/Show.js +0 -112
  222. package/dist/components/Show.js.map +0 -1
  223. package/dist/components/Spacer.cjs +0 -2
  224. package/dist/components/Spacer.cjs.map +0 -1
  225. package/dist/components/Spacer.d.ts +0 -35
  226. package/dist/components/Spacer.d.ts.map +0 -1
  227. package/dist/components/Spacer.js +0 -53
  228. package/dist/components/Spacer.js.map +0 -1
  229. package/dist/components/Text.cjs +0 -2
  230. package/dist/components/Text.cjs.map +0 -1
  231. package/dist/components/Text.d.ts +0 -242
  232. package/dist/components/Text.d.ts.map +0 -1
  233. package/dist/components/Text.js +0 -193
  234. package/dist/components/Text.js.map +0 -1
  235. package/dist/components/Toggle.cjs +0 -2
  236. package/dist/components/Toggle.cjs.map +0 -1
  237. package/dist/components/Toggle.d.ts +0 -207
  238. package/dist/components/Toggle.d.ts.map +0 -1
  239. package/dist/components/Toggle.js +0 -477
  240. package/dist/components/Toggle.js.map +0 -1
  241. package/dist/components/index.cjs +0 -2
  242. package/dist/components/index.cjs.map +0 -1
  243. package/dist/components/index.js.map +0 -1
  244. package/dist/components/wrapper.cjs +0 -2
  245. package/dist/components/wrapper.cjs.map +0 -1
  246. package/dist/components/wrapper.js +0 -484
  247. package/dist/components/wrapper.js.map +0 -1
  248. package/dist/concatenation/concatenatable.cjs +0 -2
  249. package/dist/concatenation/concatenatable.cjs.map +0 -1
  250. package/dist/concatenation/concatenatable.js +0 -118
  251. package/dist/concatenation/concatenatable.js.map +0 -1
  252. package/dist/concatenation/concatenated-component.cjs +0 -2
  253. package/dist/concatenation/concatenated-component.cjs.map +0 -1
  254. package/dist/concatenation/concatenated-component.js +0 -276
  255. package/dist/concatenation/concatenated-component.js.map +0 -1
  256. package/dist/concatenation/text-optimizer.cjs +0 -2
  257. package/dist/concatenation/text-optimizer.cjs.map +0 -1
  258. package/dist/concatenation/text-optimizer.js +0 -236
  259. package/dist/concatenation/text-optimizer.js.map +0 -1
  260. package/dist/concatenation/types.cjs +0 -2
  261. package/dist/concatenation/types.cjs.map +0 -1
  262. package/dist/concatenation/types.js +0 -13
  263. package/dist/concatenation/types.js.map +0 -1
  264. package/dist/constants/frame-utils.cjs +0 -2
  265. package/dist/constants/frame-utils.cjs.map +0 -1
  266. package/dist/constants/frame-utils.js +0 -116
  267. package/dist/constants/frame-utils.js.map +0 -1
  268. package/dist/constants/layout.cjs +0 -2
  269. package/dist/constants/layout.cjs.map +0 -1
  270. package/dist/constants/layout.js.map +0 -1
  271. package/dist/css-classes/component-base.cjs +0 -2
  272. package/dist/css-classes/component-base.cjs.map +0 -1
  273. package/dist/css-classes/component-base.js +0 -62
  274. package/dist/css-classes/component-base.js.map +0 -1
  275. package/dist/css-classes/css-class-manager.cjs +0 -2
  276. package/dist/css-classes/css-class-manager.cjs.map +0 -1
  277. package/dist/css-classes/css-class-manager.js +0 -209
  278. package/dist/css-classes/css-class-manager.js.map +0 -1
  279. package/dist/css-classes/dom-integration.cjs +0 -2
  280. package/dist/css-classes/dom-integration.cjs.map +0 -1
  281. package/dist/css-classes/dom-integration.js +0 -67
  282. package/dist/css-classes/dom-integration.js.map +0 -1
  283. package/dist/css-classes/enhanced-renderer.cjs +0 -2
  284. package/dist/css-classes/enhanced-renderer.cjs.map +0 -1
  285. package/dist/css-classes/enhanced-renderer.js +0 -73
  286. package/dist/css-classes/enhanced-renderer.js.map +0 -1
  287. package/dist/css-classes/utilities.cjs +0 -2
  288. package/dist/css-classes/utilities.cjs.map +0 -1
  289. package/dist/css-classes/utilities.js +0 -41
  290. package/dist/css-classes/utilities.js.map +0 -1
  291. package/dist/debug/index.d.ts +0 -61
  292. package/dist/debug/index.d.ts.map +0 -1
  293. package/dist/debug.cjs +0 -52
  294. package/dist/debug.cjs.map +0 -1
  295. package/dist/debug.js +0 -179
  296. package/dist/debug.js.map +0 -1
  297. package/dist/developer-experience/enhanced-errors.d.ts +0 -128
  298. package/dist/developer-experience/enhanced-errors.d.ts.map +0 -1
  299. package/dist/developer-experience/enhanced-types.d.ts +0 -281
  300. package/dist/developer-experience/enhanced-types.d.ts.map +0 -1
  301. package/dist/developer-experience/index.d.ts +0 -44
  302. package/dist/developer-experience/index.d.ts.map +0 -1
  303. package/dist/essential.cjs +0 -2
  304. package/dist/essential.cjs.map +0 -1
  305. package/dist/essential.js.map +0 -1
  306. package/dist/gradients/css-generator.cjs +0 -2
  307. package/dist/gradients/css-generator.cjs.map +0 -1
  308. package/dist/gradients/css-generator.js +0 -100
  309. package/dist/gradients/css-generator.js.map +0 -1
  310. package/dist/gradients/examples.cjs +0 -2
  311. package/dist/gradients/examples.cjs.map +0 -1
  312. package/dist/gradients/examples.js +0 -555
  313. package/dist/gradients/examples.js.map +0 -1
  314. package/dist/gradients/gradient-asset.cjs +0 -2
  315. package/dist/gradients/gradient-asset.cjs.map +0 -1
  316. package/dist/gradients/gradient-asset.js +0 -22
  317. package/dist/gradients/gradient-asset.js.map +0 -1
  318. package/dist/gradients/index.cjs +0 -2
  319. package/dist/gradients/index.cjs.map +0 -1
  320. package/dist/gradients/index.js +0 -78
  321. package/dist/gradients/index.js.map +0 -1
  322. package/dist/gradients/performance.cjs +0 -2
  323. package/dist/gradients/performance.cjs.map +0 -1
  324. package/dist/gradients/performance.js +0 -237
  325. package/dist/gradients/performance.js.map +0 -1
  326. package/dist/gradients/presets.cjs +0 -2
  327. package/dist/gradients/presets.cjs.map +0 -1
  328. package/dist/gradients/presets.js +0 -254
  329. package/dist/gradients/presets.js.map +0 -1
  330. package/dist/gradients/reactive.cjs +0 -2
  331. package/dist/gradients/reactive.cjs.map +0 -1
  332. package/dist/gradients/reactive.js +0 -239
  333. package/dist/gradients/reactive.js.map +0 -1
  334. package/dist/gradients/state-gradient-asset.cjs +0 -2
  335. package/dist/gradients/state-gradient-asset.cjs.map +0 -1
  336. package/dist/gradients/state-gradient-asset.js +0 -111
  337. package/dist/gradients/state-gradient-asset.js.map +0 -1
  338. package/dist/gradients/utils.cjs +0 -2
  339. package/dist/gradients/utils.cjs.map +0 -1
  340. package/dist/gradients/utils.js +0 -385
  341. package/dist/gradients/utils.js.map +0 -1
  342. package/dist/gradients/validation.cjs +0 -2
  343. package/dist/gradients/validation.cjs.map +0 -1
  344. package/dist/gradients/validation.js +0 -209
  345. package/dist/gradients/validation.js.map +0 -1
  346. package/dist/index.cjs +0 -2
  347. package/dist/index.cjs.map +0 -1
  348. package/dist/index.js.map +0 -1
  349. package/dist/index2.cjs +0 -2
  350. package/dist/index2.cjs.map +0 -1
  351. package/dist/index2.js +0 -293
  352. package/dist/index2.js.map +0 -1
  353. package/dist/lifecycle/hooks.cjs +0 -2
  354. package/dist/lifecycle/hooks.cjs.map +0 -1
  355. package/dist/lifecycle/hooks.js +0 -159
  356. package/dist/lifecycle/hooks.js.map +0 -1
  357. package/dist/minimal-prod.cjs +0 -2
  358. package/dist/minimal-prod.cjs.map +0 -1
  359. package/dist/minimal-prod.js.map +0 -1
  360. package/dist/minimal.cjs +0 -2
  361. package/dist/minimal.cjs.map +0 -1
  362. package/dist/minimal.js.map +0 -1
  363. package/dist/modifiers/as-html-validator.cjs +0 -2
  364. package/dist/modifiers/as-html-validator.cjs.map +0 -1
  365. package/dist/modifiers/as-html-validator.js +0 -47
  366. package/dist/modifiers/as-html-validator.js.map +0 -1
  367. package/dist/modifiers/as-html.cjs +0 -2
  368. package/dist/modifiers/as-html.cjs.map +0 -1
  369. package/dist/modifiers/as-html.js +0 -71
  370. package/dist/modifiers/as-html.js.map +0 -1
  371. package/dist/modifiers/attributes.cjs +0 -2
  372. package/dist/modifiers/attributes.cjs.map +0 -1
  373. package/dist/modifiers/attributes.d.ts +0 -203
  374. package/dist/modifiers/attributes.d.ts.map +0 -1
  375. package/dist/modifiers/attributes.js +0 -272
  376. package/dist/modifiers/attributes.js.map +0 -1
  377. package/dist/modifiers/backdrop.cjs +0 -2
  378. package/dist/modifiers/backdrop.cjs.map +0 -1
  379. package/dist/modifiers/backdrop.d.ts +0 -59
  380. package/dist/modifiers/backdrop.d.ts.map +0 -1
  381. package/dist/modifiers/backdrop.js +0 -109
  382. package/dist/modifiers/backdrop.js.map +0 -1
  383. package/dist/modifiers/background.cjs +0 -2
  384. package/dist/modifiers/background.cjs.map +0 -1
  385. package/dist/modifiers/background.js +0 -67
  386. package/dist/modifiers/background.js.map +0 -1
  387. package/dist/modifiers/base.cjs +0 -25
  388. package/dist/modifiers/base.cjs.map +0 -1
  389. package/dist/modifiers/base.js.map +0 -1
  390. package/dist/modifiers/basic-sanitizer.cjs +0 -2
  391. package/dist/modifiers/basic-sanitizer.cjs.map +0 -1
  392. package/dist/modifiers/basic-sanitizer.js +0 -162
  393. package/dist/modifiers/basic-sanitizer.js.map +0 -1
  394. package/dist/modifiers/border.cjs +0 -2
  395. package/dist/modifiers/border.cjs.map +0 -1
  396. package/dist/modifiers/border.d.ts +0 -217
  397. package/dist/modifiers/border.d.ts.map +0 -1
  398. package/dist/modifiers/border.js +0 -160
  399. package/dist/modifiers/border.js.map +0 -1
  400. package/dist/modifiers/builder.cjs +0 -2
  401. package/dist/modifiers/builder.cjs.map +0 -1
  402. package/dist/modifiers/builder.js.map +0 -1
  403. package/dist/modifiers/core.cjs +0 -2
  404. package/dist/modifiers/core.cjs.map +0 -1
  405. package/dist/modifiers/core.js +0 -398
  406. package/dist/modifiers/core.js.map +0 -1
  407. package/dist/modifiers/css.cjs +0 -2
  408. package/dist/modifiers/css.cjs.map +0 -1
  409. package/dist/modifiers/css.js +0 -50
  410. package/dist/modifiers/css.js.map +0 -1
  411. package/dist/modifiers/effects.cjs +0 -2
  412. package/dist/modifiers/effects.cjs.map +0 -1
  413. package/dist/modifiers/effects.d.ts +0 -159
  414. package/dist/modifiers/effects.d.ts.map +0 -1
  415. package/dist/modifiers/effects.js +0 -178
  416. package/dist/modifiers/effects.js.map +0 -1
  417. package/dist/modifiers/elements.cjs +0 -2
  418. package/dist/modifiers/elements.cjs.map +0 -1
  419. package/dist/modifiers/elements.d.ts +0 -240
  420. package/dist/modifiers/elements.d.ts.map +0 -1
  421. package/dist/modifiers/elements.js +0 -216
  422. package/dist/modifiers/elements.js.map +0 -1
  423. package/dist/modifiers/filters.cjs +0 -2
  424. package/dist/modifiers/filters.cjs.map +0 -1
  425. package/dist/modifiers/filters.d.ts +0 -275
  426. package/dist/modifiers/filters.d.ts.map +0 -1
  427. package/dist/modifiers/filters.js +0 -223
  428. package/dist/modifiers/filters.js.map +0 -1
  429. package/dist/modifiers/flexbox.cjs +0 -2
  430. package/dist/modifiers/flexbox.cjs.map +0 -1
  431. package/dist/modifiers/flexbox.d.ts +0 -82
  432. package/dist/modifiers/flexbox.d.ts.map +0 -1
  433. package/dist/modifiers/flexbox.js +0 -56
  434. package/dist/modifiers/flexbox.js.map +0 -1
  435. package/dist/modifiers/font.cjs +0 -2
  436. package/dist/modifiers/font.cjs.map +0 -1
  437. package/dist/modifiers/font.d.ts +0 -71
  438. package/dist/modifiers/font.d.ts.map +0 -1
  439. package/dist/modifiers/font.js +0 -60
  440. package/dist/modifiers/font.js.map +0 -1
  441. package/dist/modifiers/grid.cjs +0 -2
  442. package/dist/modifiers/grid.cjs.map +0 -1
  443. package/dist/modifiers/grid.d.ts +0 -92
  444. package/dist/modifiers/grid.d.ts.map +0 -1
  445. package/dist/modifiers/grid.js +0 -92
  446. package/dist/modifiers/grid.js.map +0 -1
  447. package/dist/modifiers/margin.cjs +0 -2
  448. package/dist/modifiers/margin.cjs.map +0 -1
  449. package/dist/modifiers/margin.d.ts +0 -128
  450. package/dist/modifiers/margin.d.ts.map +0 -1
  451. package/dist/modifiers/margin.js +0 -65
  452. package/dist/modifiers/margin.js.map +0 -1
  453. package/dist/modifiers/padding.cjs +0 -2
  454. package/dist/modifiers/padding.cjs.map +0 -1
  455. package/dist/modifiers/padding.d.ts +0 -204
  456. package/dist/modifiers/padding.d.ts.map +0 -1
  457. package/dist/modifiers/padding.js +0 -109
  458. package/dist/modifiers/padding.js.map +0 -1
  459. package/dist/modifiers/registry.cjs +0 -2
  460. package/dist/modifiers/registry.cjs.map +0 -1
  461. package/dist/modifiers/registry.js.map +0 -1
  462. package/dist/modifiers/responsive/advanced-utilities.cjs +0 -2
  463. package/dist/modifiers/responsive/advanced-utilities.cjs.map +0 -1
  464. package/dist/modifiers/responsive/advanced-utilities.d.ts +0 -118
  465. package/dist/modifiers/responsive/advanced-utilities.d.ts.map +0 -1
  466. package/dist/modifiers/responsive/advanced-utilities.js +0 -291
  467. package/dist/modifiers/responsive/advanced-utilities.js.map +0 -1
  468. package/dist/modifiers/responsive/breakpoints.cjs +0 -2
  469. package/dist/modifiers/responsive/breakpoints.cjs.map +0 -1
  470. package/dist/modifiers/responsive/breakpoints.d.ts +0 -81
  471. package/dist/modifiers/responsive/breakpoints.d.ts.map +0 -1
  472. package/dist/modifiers/responsive/breakpoints.js +0 -168
  473. package/dist/modifiers/responsive/breakpoints.js.map +0 -1
  474. package/dist/modifiers/responsive/css-generator.cjs +0 -5
  475. package/dist/modifiers/responsive/css-generator.cjs.map +0 -1
  476. package/dist/modifiers/responsive/css-generator.d.ts +0 -100
  477. package/dist/modifiers/responsive/css-generator.d.ts.map +0 -1
  478. package/dist/modifiers/responsive/css-generator.js +0 -261
  479. package/dist/modifiers/responsive/css-generator.js.map +0 -1
  480. package/dist/modifiers/responsive/dev-tools.cjs +0 -77
  481. package/dist/modifiers/responsive/dev-tools.cjs.map +0 -1
  482. package/dist/modifiers/responsive/dev-tools.d.ts +0 -107
  483. package/dist/modifiers/responsive/dev-tools.d.ts.map +0 -1
  484. package/dist/modifiers/responsive/dev-tools.js +0 -380
  485. package/dist/modifiers/responsive/dev-tools.js.map +0 -1
  486. package/dist/modifiers/responsive/index.d.ts +0 -28
  487. package/dist/modifiers/responsive/index.d.ts.map +0 -1
  488. package/dist/modifiers/responsive/layout-patterns.cjs +0 -2
  489. package/dist/modifiers/responsive/layout-patterns.cjs.map +0 -1
  490. package/dist/modifiers/responsive/layout-patterns.d.ts +0 -230
  491. package/dist/modifiers/responsive/layout-patterns.d.ts.map +0 -1
  492. package/dist/modifiers/responsive/layout-patterns.js +0 -254
  493. package/dist/modifiers/responsive/layout-patterns.js.map +0 -1
  494. package/dist/modifiers/responsive/performance.cjs +0 -3
  495. package/dist/modifiers/responsive/performance.cjs.map +0 -1
  496. package/dist/modifiers/responsive/performance.d.ts +0 -130
  497. package/dist/modifiers/responsive/performance.d.ts.map +0 -1
  498. package/dist/modifiers/responsive/performance.js +0 -212
  499. package/dist/modifiers/responsive/performance.js.map +0 -1
  500. package/dist/modifiers/responsive/responsive-builder.cjs +0 -2
  501. package/dist/modifiers/responsive/responsive-builder.cjs.map +0 -1
  502. package/dist/modifiers/responsive/responsive-builder.d.ts +0 -133
  503. package/dist/modifiers/responsive/responsive-builder.d.ts.map +0 -1
  504. package/dist/modifiers/responsive/responsive-builder.js +0 -272
  505. package/dist/modifiers/responsive/responsive-builder.js.map +0 -1
  506. package/dist/modifiers/responsive/responsive-modifier.cjs +0 -3
  507. package/dist/modifiers/responsive/responsive-modifier.cjs.map +0 -1
  508. package/dist/modifiers/responsive/responsive-modifier.d.ts +0 -123
  509. package/dist/modifiers/responsive/responsive-modifier.d.ts.map +0 -1
  510. package/dist/modifiers/responsive/responsive-modifier.js +0 -204
  511. package/dist/modifiers/responsive/responsive-modifier.js.map +0 -1
  512. package/dist/modifiers/responsive/types.cjs +0 -2
  513. package/dist/modifiers/responsive/types.cjs.map +0 -1
  514. package/dist/modifiers/responsive/types.d.ts +0 -183
  515. package/dist/modifiers/responsive/types.d.ts.map +0 -1
  516. package/dist/modifiers/responsive/types.js +0 -26
  517. package/dist/modifiers/responsive/types.js.map +0 -1
  518. package/dist/modifiers/responsive/utilities.cjs +0 -16
  519. package/dist/modifiers/responsive/utilities.cjs.map +0 -1
  520. package/dist/modifiers/responsive/utilities.d.ts +0 -149
  521. package/dist/modifiers/responsive/utilities.d.ts.map +0 -1
  522. package/dist/modifiers/responsive/utilities.js +0 -273
  523. package/dist/modifiers/responsive/utilities.js.map +0 -1
  524. package/dist/modifiers/scroll.cjs +0 -2
  525. package/dist/modifiers/scroll.cjs.map +0 -1
  526. package/dist/modifiers/scroll.d.ts +0 -143
  527. package/dist/modifiers/scroll.d.ts.map +0 -1
  528. package/dist/modifiers/scroll.js +0 -82
  529. package/dist/modifiers/scroll.js.map +0 -1
  530. package/dist/modifiers/shadows.cjs +0 -2
  531. package/dist/modifiers/shadows.cjs.map +0 -1
  532. package/dist/modifiers/shadows.d.ts +0 -114
  533. package/dist/modifiers/shadows.d.ts.map +0 -1
  534. package/dist/modifiers/shadows.js +0 -147
  535. package/dist/modifiers/shadows.js.map +0 -1
  536. package/dist/modifiers/size.cjs +0 -2
  537. package/dist/modifiers/size.cjs.map +0 -1
  538. package/dist/modifiers/size.d.ts +0 -113
  539. package/dist/modifiers/size.d.ts.map +0 -1
  540. package/dist/modifiers/size.js +0 -74
  541. package/dist/modifiers/size.js.map +0 -1
  542. package/dist/modifiers/text.cjs +0 -2
  543. package/dist/modifiers/text.cjs.map +0 -1
  544. package/dist/modifiers/text.d.ts +0 -147
  545. package/dist/modifiers/text.d.ts.map +0 -1
  546. package/dist/modifiers/text.js +0 -166
  547. package/dist/modifiers/text.js.map +0 -1
  548. package/dist/modifiers/transformations.cjs +0 -2
  549. package/dist/modifiers/transformations.cjs.map +0 -1
  550. package/dist/modifiers/transformations.d.ts +0 -329
  551. package/dist/modifiers/transformations.d.ts.map +0 -1
  552. package/dist/modifiers/transformations.js +0 -216
  553. package/dist/modifiers/transformations.js.map +0 -1
  554. package/dist/modifiers/transitions.cjs +0 -2
  555. package/dist/modifiers/transitions.cjs.map +0 -1
  556. package/dist/modifiers/transitions.d.ts +0 -98
  557. package/dist/modifiers/transitions.d.ts.map +0 -1
  558. package/dist/modifiers/transitions.js +0 -102
  559. package/dist/modifiers/transitions.js.map +0 -1
  560. package/dist/modifiers/types.cjs +0 -2
  561. package/dist/modifiers/types.cjs.map +0 -1
  562. package/dist/modifiers/types.js.map +0 -1
  563. package/dist/modifiers/typography.cjs +0 -2
  564. package/dist/modifiers/typography.cjs.map +0 -1
  565. package/dist/modifiers/typography.d.ts +0 -192
  566. package/dist/modifiers/typography.d.ts.map +0 -1
  567. package/dist/modifiers/typography.js +0 -76
  568. package/dist/modifiers/typography.js.map +0 -1
  569. package/dist/modifiers/utility.cjs +0 -2
  570. package/dist/modifiers/utility.cjs.map +0 -1
  571. package/dist/modifiers/utility.d.ts +0 -69
  572. package/dist/modifiers/utility.d.ts.map +0 -1
  573. package/dist/modifiers/utility.js +0 -71
  574. package/dist/modifiers/utility.js.map +0 -1
  575. package/dist/modifiers/utils.cjs +0 -2
  576. package/dist/modifiers/utils.cjs.map +0 -1
  577. package/dist/modifiers/utils.d.ts.map +0 -1
  578. package/dist/modifiers/utils.js +0 -250
  579. package/dist/modifiers/utils.js.map +0 -1
  580. package/dist/plugins/index.cjs +0 -2
  581. package/dist/plugins/index.cjs.map +0 -1
  582. package/dist/plugins/index.js.map +0 -1
  583. package/dist/plugins/legacy-adapter.cjs +0 -2
  584. package/dist/plugins/legacy-adapter.cjs.map +0 -1
  585. package/dist/plugins/legacy-adapter.js +0 -30
  586. package/dist/plugins/legacy-adapter.js.map +0 -1
  587. package/dist/plugins/simplified-component-registry.cjs +0 -2
  588. package/dist/plugins/simplified-component-registry.cjs.map +0 -1
  589. package/dist/plugins/simplified-component-registry.js +0 -71
  590. package/dist/plugins/simplified-component-registry.js.map +0 -1
  591. package/dist/plugins/simplified-error-handler.cjs +0 -2
  592. package/dist/plugins/simplified-error-handler.cjs.map +0 -1
  593. package/dist/plugins/simplified-error-handler.d.ts +0 -83
  594. package/dist/plugins/simplified-error-handler.d.ts.map +0 -1
  595. package/dist/plugins/simplified-error-handler.js +0 -154
  596. package/dist/plugins/simplified-error-handler.js.map +0 -1
  597. package/dist/plugins/simplified-lazy-loader.cjs +0 -2
  598. package/dist/plugins/simplified-lazy-loader.cjs.map +0 -1
  599. package/dist/plugins/simplified-lazy-loader.js +0 -129
  600. package/dist/plugins/simplified-lazy-loader.js.map +0 -1
  601. package/dist/plugins/simplified-plugin-manager.cjs +0 -2
  602. package/dist/plugins/simplified-plugin-manager.cjs.map +0 -1
  603. package/dist/plugins/simplified-plugin-manager.js +0 -51
  604. package/dist/plugins/simplified-plugin-manager.js.map +0 -1
  605. package/dist/plugins/simplified-tachui-instance.cjs +0 -2
  606. package/dist/plugins/simplified-tachui-instance.cjs.map +0 -1
  607. package/dist/plugins/simplified-tachui-instance.js +0 -88
  608. package/dist/plugins/simplified-tachui-instance.js.map +0 -1
  609. package/dist/plugins/simplified-types.cjs +0 -2
  610. package/dist/plugins/simplified-types.cjs.map +0 -1
  611. package/dist/plugins/simplified-types.js +0 -9
  612. package/dist/plugins/simplified-types.js.map +0 -1
  613. package/dist/plugins/simplified-utils.cjs +0 -2
  614. package/dist/plugins/simplified-utils.cjs.map +0 -1
  615. package/dist/plugins/simplified-utils.js +0 -40
  616. package/dist/plugins/simplified-utils.js.map +0 -1
  617. package/dist/reactive/cleanup.cjs +0 -2
  618. package/dist/reactive/cleanup.cjs.map +0 -1
  619. package/dist/reactive/cleanup.js +0 -62
  620. package/dist/reactive/cleanup.js.map +0 -1
  621. package/dist/reactive/computed.cjs +0 -2
  622. package/dist/reactive/computed.cjs.map +0 -1
  623. package/dist/reactive/computed.js +0 -121
  624. package/dist/reactive/computed.js.map +0 -1
  625. package/dist/reactive/context.cjs +0 -2
  626. package/dist/reactive/context.cjs.map +0 -1
  627. package/dist/reactive/context.js +0 -143
  628. package/dist/reactive/context.js.map +0 -1
  629. package/dist/reactive/effect.cjs +0 -2
  630. package/dist/reactive/effect.cjs.map +0 -1
  631. package/dist/reactive/effect.js +0 -67
  632. package/dist/reactive/effect.js.map +0 -1
  633. package/dist/reactive/enhanced-effect.cjs +0 -2
  634. package/dist/reactive/enhanced-effect.cjs.map +0 -1
  635. package/dist/reactive/enhanced-effect.js +0 -153
  636. package/dist/reactive/enhanced-effect.js.map +0 -1
  637. package/dist/reactive/enhanced-signal.cjs +0 -2
  638. package/dist/reactive/enhanced-signal.cjs.map +0 -1
  639. package/dist/reactive/enhanced-signal.js +0 -117
  640. package/dist/reactive/enhanced-signal.js.map +0 -1
  641. package/dist/reactive/equality.cjs +0 -2
  642. package/dist/reactive/equality.cjs.map +0 -1
  643. package/dist/reactive/equality.js +0 -66
  644. package/dist/reactive/equality.js.map +0 -1
  645. package/dist/reactive/index.cjs +0 -2
  646. package/dist/reactive/index.cjs.map +0 -1
  647. package/dist/reactive/index.js.map +0 -1
  648. package/dist/reactive/migration.cjs +0 -18
  649. package/dist/reactive/migration.cjs.map +0 -1
  650. package/dist/reactive/migration.js +0 -164
  651. package/dist/reactive/migration.js.map +0 -1
  652. package/dist/reactive/ownership.cjs +0 -2
  653. package/dist/reactive/ownership.cjs.map +0 -1
  654. package/dist/reactive/ownership.js +0 -34
  655. package/dist/reactive/ownership.js.map +0 -1
  656. package/dist/reactive/scheduler.cjs +0 -2
  657. package/dist/reactive/scheduler.cjs.map +0 -1
  658. package/dist/reactive/scheduler.js +0 -111
  659. package/dist/reactive/scheduler.js.map +0 -1
  660. package/dist/reactive/signal.cjs +0 -2
  661. package/dist/reactive/signal.cjs.map +0 -1
  662. package/dist/reactive/signal.js +0 -96
  663. package/dist/reactive/signal.js.map +0 -1
  664. package/dist/reactive/theme.cjs +0 -2
  665. package/dist/reactive/theme.cjs.map +0 -1
  666. package/dist/reactive/theme.js +0 -27
  667. package/dist/reactive/theme.js.map +0 -1
  668. package/dist/reactive/types.cjs +0 -2
  669. package/dist/reactive/types.cjs.map +0 -1
  670. package/dist/reactive/types.js.map +0 -1
  671. package/dist/reactive/unified-scheduler.cjs +0 -2
  672. package/dist/reactive/unified-scheduler.cjs.map +0 -1
  673. package/dist/reactive/unified-scheduler.js +0 -219
  674. package/dist/reactive/unified-scheduler.js.map +0 -1
  675. package/dist/runtime/component-context.cjs +0 -2
  676. package/dist/runtime/component-context.cjs.map +0 -1
  677. package/dist/runtime/component-context.js +0 -177
  678. package/dist/runtime/component-context.js.map +0 -1
  679. package/dist/runtime/component.cjs +0 -2
  680. package/dist/runtime/component.cjs.map +0 -1
  681. package/dist/runtime/component.js +0 -238
  682. package/dist/runtime/component.js.map +0 -1
  683. package/dist/runtime/context.cjs +0 -2
  684. package/dist/runtime/context.cjs.map +0 -1
  685. package/dist/runtime/context.js +0 -289
  686. package/dist/runtime/context.js.map +0 -1
  687. package/dist/runtime/dev-tools.cjs +0 -2
  688. package/dist/runtime/dev-tools.cjs.map +0 -1
  689. package/dist/runtime/dev-tools.d.ts +0 -240
  690. package/dist/runtime/dev-tools.d.ts.map +0 -1
  691. package/dist/runtime/dev-tools.js +0 -391
  692. package/dist/runtime/dev-tools.js.map +0 -1
  693. package/dist/runtime/development-warnings.cjs +0 -2
  694. package/dist/runtime/development-warnings.cjs.map +0 -1
  695. package/dist/runtime/development-warnings.d.ts +0 -42
  696. package/dist/runtime/development-warnings.d.ts.map +0 -1
  697. package/dist/runtime/development-warnings.js +0 -69
  698. package/dist/runtime/development-warnings.js.map +0 -1
  699. package/dist/runtime/dom-bridge.cjs +0 -2
  700. package/dist/runtime/dom-bridge.cjs.map +0 -1
  701. package/dist/runtime/dom-bridge.js.map +0 -1
  702. package/dist/runtime/element-override.cjs +0 -2
  703. package/dist/runtime/element-override.cjs.map +0 -1
  704. package/dist/runtime/element-override.js +0 -214
  705. package/dist/runtime/element-override.js.map +0 -1
  706. package/dist/runtime/error-boundary.cjs +0 -2
  707. package/dist/runtime/error-boundary.cjs.map +0 -1
  708. package/dist/runtime/error-boundary.d.ts +0 -302
  709. package/dist/runtime/error-boundary.d.ts.map +0 -1
  710. package/dist/runtime/error-boundary.js +0 -559
  711. package/dist/runtime/error-boundary.js.map +0 -1
  712. package/dist/runtime/error-recovery.cjs +0 -2
  713. package/dist/runtime/error-recovery.cjs.map +0 -1
  714. package/dist/runtime/error-recovery.d.ts +0 -267
  715. package/dist/runtime/error-recovery.d.ts.map +0 -1
  716. package/dist/runtime/error-recovery.js +0 -385
  717. package/dist/runtime/error-recovery.js.map +0 -1
  718. package/dist/runtime/error-reporting.cjs +0 -3
  719. package/dist/runtime/error-reporting.cjs.map +0 -1
  720. package/dist/runtime/error-reporting.d.ts +0 -287
  721. package/dist/runtime/error-reporting.d.ts.map +0 -1
  722. package/dist/runtime/error-reporting.js +0 -479
  723. package/dist/runtime/error-reporting.js.map +0 -1
  724. package/dist/runtime/error-utils.cjs +0 -3
  725. package/dist/runtime/error-utils.cjs.map +0 -1
  726. package/dist/runtime/error-utils.d.ts +0 -204
  727. package/dist/runtime/error-utils.d.ts.map +0 -1
  728. package/dist/runtime/error-utils.js +0 -352
  729. package/dist/runtime/error-utils.js.map +0 -1
  730. package/dist/runtime/lazy-component.cjs +0 -2
  731. package/dist/runtime/lazy-component.cjs.map +0 -1
  732. package/dist/runtime/lazy-component.js +0 -129
  733. package/dist/runtime/lazy-component.js.map +0 -1
  734. package/dist/runtime/lifecycle.cjs +0 -2
  735. package/dist/runtime/lifecycle.cjs.map +0 -1
  736. package/dist/runtime/lifecycle.js +0 -7
  737. package/dist/runtime/lifecycle.js.map +0 -1
  738. package/dist/runtime/mounting.cjs +0 -2
  739. package/dist/runtime/mounting.cjs.map +0 -1
  740. package/dist/runtime/mounting.js +0 -12
  741. package/dist/runtime/mounting.js.map +0 -1
  742. package/dist/runtime/optimization.cjs +0 -2
  743. package/dist/runtime/optimization.cjs.map +0 -1
  744. package/dist/runtime/optimization.js +0 -6
  745. package/dist/runtime/optimization.js.map +0 -1
  746. package/dist/runtime/performance.cjs +0 -2
  747. package/dist/runtime/performance.cjs.map +0 -1
  748. package/dist/runtime/performance.d.ts +0 -217
  749. package/dist/runtime/performance.d.ts.map +0 -1
  750. package/dist/runtime/performance.js +0 -399
  751. package/dist/runtime/performance.js.map +0 -1
  752. package/dist/runtime/props.cjs +0 -2
  753. package/dist/runtime/props.cjs.map +0 -1
  754. package/dist/runtime/props.js +0 -265
  755. package/dist/runtime/props.js.map +0 -1
  756. package/dist/runtime/renderer.cjs +0 -2
  757. package/dist/runtime/renderer.cjs.map +0 -1
  758. package/dist/runtime/renderer.js.map +0 -1
  759. package/dist/runtime/semantic-role-manager.cjs +0 -2
  760. package/dist/runtime/semantic-role-manager.cjs.map +0 -1
  761. package/dist/runtime/semantic-role-manager.js +0 -82
  762. package/dist/runtime/semantic-role-manager.js.map +0 -1
  763. package/dist/state/binding.cjs +0 -2
  764. package/dist/state/binding.cjs.map +0 -1
  765. package/dist/state/binding.js +0 -155
  766. package/dist/state/binding.js.map +0 -1
  767. package/dist/state/environment.cjs +0 -2
  768. package/dist/state/environment.cjs.map +0 -1
  769. package/dist/state/environment.js +0 -115
  770. package/dist/state/environment.js.map +0 -1
  771. package/dist/state/index.cjs +0 -2
  772. package/dist/state/index.cjs.map +0 -1
  773. package/dist/state/index.js +0 -63
  774. package/dist/state/index.js.map +0 -1
  775. package/dist/state/observed-object.cjs +0 -2
  776. package/dist/state/observed-object.cjs.map +0 -1
  777. package/dist/state/observed-object.js +0 -163
  778. package/dist/state/observed-object.js.map +0 -1
  779. package/dist/state/state-manager.cjs +0 -2
  780. package/dist/state/state-manager.cjs.map +0 -1
  781. package/dist/state/state-manager.js +0 -233
  782. package/dist/state/state-manager.js.map +0 -1
  783. package/dist/state/state.cjs +0 -2
  784. package/dist/state/state.cjs.map +0 -1
  785. package/dist/state/state.js +0 -159
  786. package/dist/state/state.js.map +0 -1
  787. package/dist/sui-compat.cjs +0 -2
  788. package/dist/sui-compat.cjs.map +0 -1
  789. package/dist/sui-compat.d.ts +0 -110
  790. package/dist/sui-compat.d.ts.map +0 -1
  791. package/dist/sui-compat.js +0 -88
  792. package/dist/sui-compat.js.map +0 -1
  793. package/dist/validation/advanced-debugging.cjs +0 -44
  794. package/dist/validation/advanced-debugging.cjs.map +0 -1
  795. package/dist/validation/advanced-debugging.d.ts +0 -319
  796. package/dist/validation/advanced-debugging.d.ts.map +0 -1
  797. package/dist/validation/advanced-debugging.js +0 -455
  798. package/dist/validation/advanced-debugging.js.map +0 -1
  799. package/dist/validation/build-time/detection.cjs +0 -2
  800. package/dist/validation/build-time/detection.cjs.map +0 -1
  801. package/dist/validation/build-time/detection.d.ts +0 -32
  802. package/dist/validation/build-time/detection.d.ts.map +0 -1
  803. package/dist/validation/build-time/detection.js +0 -199
  804. package/dist/validation/build-time/detection.js.map +0 -1
  805. package/dist/validation/build-time/index.cjs +0 -2
  806. package/dist/validation/build-time/index.cjs.map +0 -1
  807. package/dist/validation/build-time/index.d.ts +0 -84
  808. package/dist/validation/build-time/index.d.ts.map +0 -1
  809. package/dist/validation/build-time/index.js +0 -122
  810. package/dist/validation/build-time/index.js.map +0 -1
  811. package/dist/validation/build-time/plugins.cjs +0 -3
  812. package/dist/validation/build-time/plugins.cjs.map +0 -1
  813. package/dist/validation/build-time/plugins.d.ts +0 -75
  814. package/dist/validation/build-time/plugins.d.ts.map +0 -1
  815. package/dist/validation/build-time/plugins.js +0 -282
  816. package/dist/validation/build-time/plugins.js.map +0 -1
  817. package/dist/validation/build-time/rules.cjs +0 -2
  818. package/dist/validation/build-time/rules.cjs.map +0 -1
  819. package/dist/validation/build-time/rules.d.ts +0 -73
  820. package/dist/validation/build-time/rules.d.ts.map +0 -1
  821. package/dist/validation/build-time/rules.js +0 -576
  822. package/dist/validation/build-time/rules.js.map +0 -1
  823. package/dist/validation/build-time/transformer.cjs +0 -3
  824. package/dist/validation/build-time/transformer.cjs.map +0 -1
  825. package/dist/validation/build-time/transformer.d.ts +0 -23
  826. package/dist/validation/build-time/transformer.d.ts.map +0 -1
  827. package/dist/validation/build-time/transformer.js +0 -177
  828. package/dist/validation/build-time/transformer.js.map +0 -1
  829. package/dist/validation/build-time/types.d.ts +0 -212
  830. package/dist/validation/build-time/types.d.ts.map +0 -1
  831. package/dist/validation/comprehensive.cjs +0 -9
  832. package/dist/validation/comprehensive.cjs.map +0 -1
  833. package/dist/validation/comprehensive.d.ts +0 -160
  834. package/dist/validation/comprehensive.d.ts.map +0 -1
  835. package/dist/validation/comprehensive.js +0 -916
  836. package/dist/validation/comprehensive.js.map +0 -1
  837. package/dist/validation/debug-tools.cjs +0 -16
  838. package/dist/validation/debug-tools.cjs.map +0 -1
  839. package/dist/validation/debug-tools.d.ts +0 -251
  840. package/dist/validation/debug-tools.d.ts.map +0 -1
  841. package/dist/validation/debug-tools.js +0 -405
  842. package/dist/validation/debug-tools.js.map +0 -1
  843. package/dist/validation/developer-experience.cjs +0 -17
  844. package/dist/validation/developer-experience.cjs.map +0 -1
  845. package/dist/validation/developer-experience.d.ts +0 -243
  846. package/dist/validation/developer-experience.d.ts.map +0 -1
  847. package/dist/validation/developer-experience.js +0 -433
  848. package/dist/validation/developer-experience.js.map +0 -1
  849. package/dist/validation/documentation-integration.cjs +0 -7
  850. package/dist/validation/documentation-integration.cjs.map +0 -1
  851. package/dist/validation/documentation-integration.d.ts +0 -269
  852. package/dist/validation/documentation-integration.d.ts.map +0 -1
  853. package/dist/validation/documentation-integration.js +0 -440
  854. package/dist/validation/documentation-integration.js.map +0 -1
  855. package/dist/validation/enhanced-runtime.cjs +0 -6
  856. package/dist/validation/enhanced-runtime.cjs.map +0 -1
  857. package/dist/validation/enhanced-runtime.d.ts +0 -279
  858. package/dist/validation/enhanced-runtime.d.ts.map +0 -1
  859. package/dist/validation/enhanced-runtime.js +0 -465
  860. package/dist/validation/enhanced-runtime.js.map +0 -1
  861. package/dist/validation/error-reporting.cjs +0 -32
  862. package/dist/validation/error-reporting.cjs.map +0 -1
  863. package/dist/validation/error-reporting.d.ts +0 -186
  864. package/dist/validation/error-reporting.d.ts.map +0 -1
  865. package/dist/validation/error-reporting.js +0 -370
  866. package/dist/validation/error-reporting.js.map +0 -1
  867. package/dist/validation/ide-integration.cjs +0 -85
  868. package/dist/validation/ide-integration.cjs.map +0 -1
  869. package/dist/validation/ide-integration.d.ts +0 -328
  870. package/dist/validation/ide-integration.d.ts.map +0 -1
  871. package/dist/validation/ide-integration.js +0 -557
  872. package/dist/validation/ide-integration.js.map +0 -1
  873. package/dist/validation/index.cjs +0 -6
  874. package/dist/validation/index.cjs.map +0 -1
  875. package/dist/validation/index.js.map +0 -1
  876. package/dist/validation/lifecycle-validation.cjs +0 -2
  877. package/dist/validation/lifecycle-validation.cjs.map +0 -1
  878. package/dist/validation/lifecycle-validation.js +0 -314
  879. package/dist/validation/lifecycle-validation.js.map +0 -1
  880. package/dist/validation/performance-optimizer.cjs +0 -2
  881. package/dist/validation/performance-optimizer.cjs.map +0 -1
  882. package/dist/validation/performance-optimizer.d.ts +0 -218
  883. package/dist/validation/performance-optimizer.d.ts.map +0 -1
  884. package/dist/validation/performance-optimizer.js +0 -338
  885. package/dist/validation/performance-optimizer.js.map +0 -1
  886. package/dist/validation/plugin-registration.cjs +0 -2
  887. package/dist/validation/plugin-registration.cjs.map +0 -1
  888. package/dist/validation/plugin-registration.js +0 -126
  889. package/dist/validation/plugin-registration.js.map +0 -1
  890. package/dist/validation/production-bypass.cjs +0 -2
  891. package/dist/validation/production-bypass.cjs.map +0 -1
  892. package/dist/validation/production-bypass.d.ts +0 -175
  893. package/dist/validation/production-bypass.d.ts.map +0 -1
  894. package/dist/validation/production-bypass.js +0 -218
  895. package/dist/validation/production-bypass.js.map +0 -1
  896. package/dist/validation/simple.cjs +0 -9
  897. package/dist/validation/simple.cjs.map +0 -1
  898. package/dist/validation/simple.d.ts +0 -111
  899. package/dist/validation/simple.d.ts.map +0 -1
  900. package/dist/validation/simple.js +0 -146
  901. package/dist/validation/simple.js.map +0 -1
  902. package/dist/viewport/adapters/web-adapter.cjs +0 -70
  903. package/dist/viewport/adapters/web-adapter.cjs.map +0 -1
  904. package/dist/viewport/adapters/web-adapter.d.ts +0 -227
  905. package/dist/viewport/adapters/web-adapter.d.ts.map +0 -1
  906. package/dist/viewport/adapters/web-adapter.js +0 -823
  907. package/dist/viewport/adapters/web-adapter.js.map +0 -1
  908. package/dist/viewport/components.cjs +0 -2
  909. package/dist/viewport/components.cjs.map +0 -1
  910. package/dist/viewport/components.d.ts +0 -131
  911. package/dist/viewport/components.d.ts.map +0 -1
  912. package/dist/viewport/components.js +0 -298
  913. package/dist/viewport/components.js.map +0 -1
  914. package/dist/viewport/environment.cjs +0 -2
  915. package/dist/viewport/environment.cjs.map +0 -1
  916. package/dist/viewport/environment.d.ts +0 -75
  917. package/dist/viewport/environment.d.ts.map +0 -1
  918. package/dist/viewport/environment.js +0 -86
  919. package/dist/viewport/environment.js.map +0 -1
  920. package/dist/viewport/index.cjs +0 -2
  921. package/dist/viewport/index.cjs.map +0 -1
  922. package/dist/viewport/index.d.ts +0 -138
  923. package/dist/viewport/index.d.ts.map +0 -1
  924. package/dist/viewport/index.js +0 -166
  925. package/dist/viewport/index.js.map +0 -1
  926. package/dist/viewport/platform-detection.cjs +0 -2
  927. package/dist/viewport/platform-detection.cjs.map +0 -1
  928. package/dist/viewport/platform-detection.d.ts +0 -59
  929. package/dist/viewport/platform-detection.d.ts.map +0 -1
  930. package/dist/viewport/platform-detection.js +0 -205
  931. package/dist/viewport/platform-detection.js.map +0 -1
  932. package/dist/viewport/types.cjs +0 -2
  933. package/dist/viewport/types.cjs.map +0 -1
  934. package/dist/viewport/types.d.ts +0 -301
  935. package/dist/viewport/types.d.ts.map +0 -1
  936. package/dist/viewport/types.js +0 -13
  937. package/dist/viewport/types.js.map +0 -1
  938. package/dist/viewport/viewport-manager.cjs +0 -2
  939. package/dist/viewport/viewport-manager.cjs.map +0 -1
  940. package/dist/viewport/viewport-manager.d.ts +0 -118
  941. package/dist/viewport/viewport-manager.d.ts.map +0 -1
  942. package/dist/viewport/viewport-manager.js +0 -524
  943. package/dist/viewport/viewport-manager.js.map +0 -1
  944. package/src/assets/Asset.ts +0 -11
  945. package/src/assets/AssetCollection.ts +0 -99
  946. package/src/assets/ColorAsset.ts +0 -210
  947. package/src/assets/FontAsset.ts +0 -380
  948. package/src/assets/ImageAsset.ts +0 -91
  949. package/src/assets/README.md +0 -190
  950. package/src/assets/index.ts +0 -175
  951. package/src/assets/test-assets.ts +0 -69
  952. package/src/assets/test-integration.ts +0 -46
  953. package/src/assets/test-simple.ts +0 -28
  954. package/src/assets/types.ts +0 -79
  955. package/src/bundles/common.ts +0 -30
  956. package/src/bundles/complete.ts +0 -29
  957. package/src/bundles/essential.ts +0 -26
  958. package/src/bundles/minimal.ts +0 -26
  959. package/src/bundles/production-minimal.ts +0 -67
  960. package/src/compiler/advanced-parser.ts +0 -871
  961. package/src/compiler/codegen.ts +0 -450
  962. package/src/compiler/enhanced-codegen.ts +0 -729
  963. package/src/compiler/index.ts +0 -25
  964. package/src/compiler/parser.ts +0 -461
  965. package/src/compiler/plugin.ts +0 -181
  966. package/src/compiler/types.ts +0 -177
  967. package/src/components/BasicInput.ts +0 -352
  968. package/src/components/Button.ts +0 -963
  969. package/src/components/Divider.ts +0 -341
  970. package/src/components/EnhancedLink.ts +0 -676
  971. package/src/components/Form.ts +0 -414
  972. package/src/components/Grid.ts +0 -2507
  973. package/src/components/GridResponsive.ts +0 -637
  974. package/src/components/Image.ts +0 -426
  975. package/src/components/List.ts +0 -1084
  976. package/src/components/Menu.ts +0 -807
  977. package/src/components/Picker.ts +0 -678
  978. package/src/components/ScrollView.ts +0 -725
  979. package/src/components/Section.ts +0 -472
  980. package/src/components/Show.ts +0 -205
  981. package/src/components/Spacer.ts +0 -93
  982. package/src/components/Text.ts +0 -447
  983. package/src/components/Toggle.ts +0 -700
  984. package/src/components/index.ts +0 -231
  985. package/src/components/wrapper.ts +0 -828
  986. package/src/concatenation/concatenatable.ts +0 -211
  987. package/src/concatenation/concatenated-component.ts +0 -471
  988. package/src/concatenation/index.ts +0 -41
  989. package/src/concatenation/styles.css +0 -120
  990. package/src/concatenation/text-optimizer.ts +0 -440
  991. package/src/concatenation/types.ts +0 -116
  992. package/src/constants/README.md +0 -339
  993. package/src/constants/__tests__/frame-utils.test.ts +0 -276
  994. package/src/constants/__tests__/layout.test.ts +0 -215
  995. package/src/constants/frame-utils.ts +0 -174
  996. package/src/constants/index.ts +0 -8
  997. package/src/constants/layout.ts +0 -120
  998. package/src/css-classes/component-base.ts +0 -117
  999. package/src/css-classes/css-class-manager.ts +0 -372
  1000. package/src/css-classes/dom-integration.ts +0 -162
  1001. package/src/css-classes/enhanced-renderer.ts +0 -166
  1002. package/src/css-classes/index.ts +0 -45
  1003. package/src/css-classes/types.ts +0 -73
  1004. package/src/css-classes/utilities.ts +0 -175
  1005. package/src/debug/index.ts +0 -267
  1006. package/src/developer-experience/enhanced-errors.ts +0 -556
  1007. package/src/developer-experience/enhanced-types.ts +0 -427
  1008. package/src/developer-experience/index.ts +0 -220
  1009. package/src/globals.d.ts +0 -43
  1010. package/src/gradients/__tests__/angular-gradient.test.ts +0 -111
  1011. package/src/gradients/__tests__/background-modifier.test.ts +0 -81
  1012. package/src/gradients/__tests__/comprehensive-gradients.test.ts +0 -296
  1013. package/src/gradients/__tests__/gradient-asset.test.ts +0 -144
  1014. package/src/gradients/__tests__/linear-gradient.test.ts +0 -92
  1015. package/src/gradients/__tests__/phase4-features.test.ts +0 -386
  1016. package/src/gradients/__tests__/radial-gradient.test.ts +0 -110
  1017. package/src/gradients/__tests__/repeating-gradients.test.ts +0 -125
  1018. package/src/gradients/__tests__/state-background-modifier.test.ts +0 -340
  1019. package/src/gradients/__tests__/state-gradient-asset.test.ts +0 -262
  1020. package/src/gradients/__tests__/state-gradient-integration.test.ts +0 -277
  1021. package/src/gradients/css-generator.ts +0 -158
  1022. package/src/gradients/examples.ts +0 -632
  1023. package/src/gradients/gradient-asset.ts +0 -30
  1024. package/src/gradients/index.ts +0 -85
  1025. package/src/gradients/performance.ts +0 -521
  1026. package/src/gradients/presets.ts +0 -422
  1027. package/src/gradients/reactive.ts +0 -470
  1028. package/src/gradients/state-gradient-asset.ts +0 -179
  1029. package/src/gradients/types.ts +0 -148
  1030. package/src/gradients/utils.ts +0 -579
  1031. package/src/gradients/validation.ts +0 -489
  1032. package/src/index.ts +0 -168
  1033. package/src/lifecycle/hooks.ts +0 -332
  1034. package/src/modifiers/__tests__/as-html-integration.test.ts +0 -204
  1035. package/src/modifiers/__tests__/as-html.test.ts +0 -437
  1036. package/src/modifiers/__tests__/basic-sanitizer-security.test.ts +0 -294
  1037. package/src/modifiers/__tests__/border.test.ts +0 -371
  1038. package/src/modifiers/__tests__/margin-string-support.test.ts +0 -41
  1039. package/src/modifiers/__tests__/padding-string-support.test.ts +0 -41
  1040. package/src/modifiers/as-html-validator.ts +0 -68
  1041. package/src/modifiers/as-html.ts +0 -216
  1042. package/src/modifiers/attributes.ts +0 -574
  1043. package/src/modifiers/backdrop.ts +0 -290
  1044. package/src/modifiers/background.ts +0 -165
  1045. package/src/modifiers/base.ts +0 -1815
  1046. package/src/modifiers/basic-sanitizer.ts +0 -227
  1047. package/src/modifiers/border.ts +0 -574
  1048. package/src/modifiers/builder.ts +0 -1747
  1049. package/src/modifiers/core.ts +0 -521
  1050. package/src/modifiers/css.ts +0 -148
  1051. package/src/modifiers/effects.ts +0 -412
  1052. package/src/modifiers/elements.ts +0 -541
  1053. package/src/modifiers/filters.ts +0 -501
  1054. package/src/modifiers/flexbox.ts +0 -180
  1055. package/src/modifiers/font.ts +0 -149
  1056. package/src/modifiers/grid.ts +0 -238
  1057. package/src/modifiers/index.ts +0 -481
  1058. package/src/modifiers/margin.ts +0 -218
  1059. package/src/modifiers/padding.ts +0 -318
  1060. package/src/modifiers/registry.ts +0 -444
  1061. package/src/modifiers/responsive/__tests__/advanced-media-queries.test.ts +0 -392
  1062. package/src/modifiers/responsive/__tests__/advanced-utilities.test.ts +0 -368
  1063. package/src/modifiers/responsive/__tests__/comprehensive-browser-tests.test.ts +0 -556
  1064. package/src/modifiers/responsive/__tests__/layout-patterns.test.ts +0 -558
  1065. package/src/modifiers/responsive/advanced-utilities.ts +0 -562
  1066. package/src/modifiers/responsive/breakpoints.ts +0 -330
  1067. package/src/modifiers/responsive/css-generator.ts +0 -432
  1068. package/src/modifiers/responsive/dev-tools.ts +0 -650
  1069. package/src/modifiers/responsive/index.ts +0 -119
  1070. package/src/modifiers/responsive/layout-patterns.ts +0 -592
  1071. package/src/modifiers/responsive/performance.ts +0 -385
  1072. package/src/modifiers/responsive/responsive-builder.ts +0 -620
  1073. package/src/modifiers/responsive/responsive-modifier.ts +0 -410
  1074. package/src/modifiers/responsive/types.ts +0 -226
  1075. package/src/modifiers/responsive/utilities.ts +0 -478
  1076. package/src/modifiers/scroll.ts +0 -297
  1077. package/src/modifiers/shadows.ts +0 -321
  1078. package/src/modifiers/size.ts +0 -208
  1079. package/src/modifiers/text.ts +0 -416
  1080. package/src/modifiers/transformations.ts +0 -640
  1081. package/src/modifiers/transitions.ts +0 -218
  1082. package/src/modifiers/types.ts +0 -889
  1083. package/src/modifiers/typography.ts +0 -341
  1084. package/src/modifiers/utility.ts +0 -209
  1085. package/src/modifiers/utils.ts +0 -413
  1086. package/src/plugins/__tests__/simplified-plugin-system.test.ts +0 -190
  1087. package/src/plugins/component-loader-registry.ts +0 -371
  1088. package/src/plugins/index.ts +0 -61
  1089. package/src/plugins/legacy-adapter.ts +0 -84
  1090. package/src/plugins/simplified-component-registry.ts +0 -130
  1091. package/src/plugins/simplified-error-handler.ts +0 -372
  1092. package/src/plugins/simplified-index.ts +0 -61
  1093. package/src/plugins/simplified-lazy-loader.ts +0 -242
  1094. package/src/plugins/simplified-plugin-manager.ts +0 -93
  1095. package/src/plugins/simplified-tachui-instance.ts +0 -142
  1096. package/src/plugins/simplified-types.ts +0 -79
  1097. package/src/plugins/simplified-utils.ts +0 -118
  1098. package/src/reactive/cleanup.ts +0 -241
  1099. package/src/reactive/computed.ts +0 -281
  1100. package/src/reactive/context.ts +0 -287
  1101. package/src/reactive/effect.ts +0 -194
  1102. package/src/reactive/enhanced-effect.ts +0 -318
  1103. package/src/reactive/enhanced-signal.ts +0 -227
  1104. package/src/reactive/equality.ts +0 -188
  1105. package/src/reactive/globals.d.ts +0 -5
  1106. package/src/reactive/index.ts +0 -150
  1107. package/src/reactive/migration.ts +0 -335
  1108. package/src/reactive/ownership.ts +0 -182
  1109. package/src/reactive/scheduler.ts +0 -300
  1110. package/src/reactive/signal.ts +0 -201
  1111. package/src/reactive/theme.ts +0 -49
  1112. package/src/reactive/types.ts +0 -103
  1113. package/src/reactive/unified-scheduler.ts +0 -357
  1114. package/src/runtime/component-context.ts +0 -343
  1115. package/src/runtime/component.ts +0 -499
  1116. package/src/runtime/context.ts +0 -527
  1117. package/src/runtime/dev-tools.ts +0 -752
  1118. package/src/runtime/development-warnings.ts +0 -114
  1119. package/src/runtime/dom-bridge.ts +0 -570
  1120. package/src/runtime/element-override.ts +0 -282
  1121. package/src/runtime/error-boundary.ts +0 -955
  1122. package/src/runtime/error-recovery.ts +0 -638
  1123. package/src/runtime/error-reporting.ts +0 -808
  1124. package/src/runtime/error-utils.ts +0 -698
  1125. package/src/runtime/index.ts +0 -202
  1126. package/src/runtime/lazy-component.ts +0 -268
  1127. package/src/runtime/lifecycle.ts +0 -10
  1128. package/src/runtime/mounting.ts +0 -17
  1129. package/src/runtime/optimization.ts +0 -13
  1130. package/src/runtime/performance.ts +0 -693
  1131. package/src/runtime/props.ts +0 -434
  1132. package/src/runtime/refs.ts +0 -13
  1133. package/src/runtime/renderer.ts +0 -674
  1134. package/src/runtime/semantic-role-manager.ts +0 -140
  1135. package/src/runtime/types.ts +0 -282
  1136. package/src/state/binding.ts +0 -381
  1137. package/src/state/environment-object.ts +0 -444
  1138. package/src/state/environment.ts +0 -351
  1139. package/src/state/index.ts +0 -179
  1140. package/src/state/observed-object.ts +0 -405
  1141. package/src/state/state-manager.ts +0 -366
  1142. package/src/state/state.ts +0 -339
  1143. package/src/state/types.ts +0 -192
  1144. package/src/sui-compat.ts +0 -163
  1145. package/src/validation/__tests__/phase-1d-integration.test.ts +0 -558
  1146. package/src/validation/advanced-debugging.ts +0 -860
  1147. package/src/validation/build-time/detection.ts +0 -373
  1148. package/src/validation/build-time/index.ts +0 -222
  1149. package/src/validation/build-time/plugins.ts +0 -515
  1150. package/src/validation/build-time/rules.ts +0 -624
  1151. package/src/validation/build-time/transformer.ts +0 -372
  1152. package/src/validation/build-time/types.ts +0 -232
  1153. package/src/validation/comprehensive.ts +0 -1272
  1154. package/src/validation/debug-tools.ts +0 -724
  1155. package/src/validation/developer-experience.ts +0 -712
  1156. package/src/validation/documentation-integration.ts +0 -835
  1157. package/src/validation/enhanced-runtime.ts +0 -765
  1158. package/src/validation/error-reporting.ts +0 -587
  1159. package/src/validation/ide-integration.ts +0 -845
  1160. package/src/validation/index.ts +0 -353
  1161. package/src/validation/lifecycle-validation.ts +0 -636
  1162. package/src/validation/performance-optimizer.ts +0 -599
  1163. package/src/validation/plugin-registration.ts +0 -249
  1164. package/src/validation/production-bypass.ts +0 -466
  1165. package/src/validation/simple.ts +0 -465
  1166. package/src/viewport/adapters/web-adapter.ts +0 -1385
  1167. package/src/viewport/components.ts +0 -505
  1168. package/src/viewport/environment.ts +0 -173
  1169. package/src/viewport/index.ts +0 -290
  1170. package/src/viewport/platform-detection.ts +0 -431
  1171. package/src/viewport/types.ts +0 -371
  1172. package/src/viewport/viewport-manager.ts +0 -979
@@ -1 +0,0 @@
1
- {"version":3,"file":"base.js","sources":["../../src/modifiers/base.ts"],"sourcesContent":["/**\n * Base Modifier System Implementation\n *\n * Core modifier classes and utilities for the SwiftUI-inspired modifier system.\n */\n\nimport { createEffect, isComputed, isSignal, getThemeSignal } from '../reactive'\nimport type { Signal } from '../reactive/types'\nimport type { DOMNode } from '../runtime/types'\nimport type {\n CSSStyleProperties,\n LifecycleModifierProps,\n Modifier,\n ModifierContext,\n ReactiveModifierProps,\n StyleComputationContext,\n} from './types'\nimport { ModifierPriority } from './types'\nimport { isInfinity, dimensionToCSS, shouldExpandForInfinity } from '../constants/layout'\n\n/**\n * Abstract base modifier class\n */\nexport abstract class BaseModifier<TProps = {}> implements Modifier<TProps> {\n abstract readonly type: string\n abstract readonly priority: number\n\n constructor(public readonly properties: TProps) {}\n\n /**\n * Apply the modifier to a DOM node\n */\n abstract apply(node: DOMNode, context: ModifierContext): DOMNode | undefined\n\n /**\n * Helper to resolve reactive properties\n */\n protected resolveReactiveProps<T extends Record<string, any>>(\n props: ReactiveModifierProps<T>,\n context: StyleComputationContext\n ): T {\n const resolved = {} as T\n\n for (const [key, value] of Object.entries(props)) {\n if (isSignal(value) || isComputed(value)) {\n // Preserve the signal/computed - let applyStyles handle reactivity\n resolved[key as keyof T] = value as T[keyof T]\n } else {\n // Static value\n resolved[key as keyof T] = value\n }\n }\n\n // Context parameter is kept for compatibility but not used in new approach\n void context\n\n return resolved\n }\n\n /**\n * Apply a single style change to an element with reactive support\n */\n protected applyStyleChange(element: Element, property: string, value: any): void {\n if (element instanceof HTMLElement) {\n const cssProperty = this.toCSSProperty(property)\n\n // Handle reactive values (signals and computed)\n if (isSignal(value) || isComputed(value)) {\n // Create reactive effect for this style property\n createEffect(() => {\n const currentValue = value()\n const cssValue = String(currentValue)\n\n // Check if value contains !important and handle it properly\n if (cssValue.includes('!important')) {\n const actualValue = cssValue.replace(/\\s*!important\\s*$/, '').trim()\n element.style.setProperty(cssProperty, actualValue, 'important')\n } else {\n element.style.setProperty(cssProperty, cssValue)\n }\n })\n } else {\n // Handle static values\n const cssValue = String(value)\n\n // Check if value contains !important and handle it properly\n if (cssValue.includes('!important')) {\n const actualValue = cssValue.replace(/\\s*!important\\s*$/, '').trim()\n element.style.setProperty(cssProperty, actualValue, 'important')\n } else {\n element.style.setProperty(cssProperty, cssValue)\n }\n }\n }\n }\n\n /**\n * Convert camelCase property to CSS kebab-case\n */\n protected toCSSProperty(property: string): string {\n return property.replace(/([A-Z])/g, '-$1').toLowerCase()\n }\n\n /**\n * Convert value to CSS value string\n */\n protected toCSSValue(value: any): string {\n if (typeof value === 'number') {\n return `${value}px`\n }\n return String(value)\n }\n\n /**\n * Convert value to CSS value string with property-specific handling\n */\n protected toCSSValueForProperty(property: string, value: any): string {\n if (typeof value === 'number') {\n // Properties that should be unitless\n const unitlessProperties = [\n 'opacity',\n 'z-index',\n 'line-height',\n 'flex-grow',\n 'flex-shrink',\n 'order',\n 'column-count',\n 'font-weight',\n ]\n\n if (unitlessProperties.includes(property)) {\n return String(value)\n }\n\n return `${value}px`\n }\n\n // Properties that should be passed through as-is (no processing)\n const passthroughProperties = [\n 'filter', // CSS filter strings should not be processed\n 'transform', // CSS transform strings\n 'clip-path' // CSS clip-path strings\n ]\n\n if (passthroughProperties.includes(property)) {\n return String(value)\n }\n\n return String(value)\n }\n\n /**\n * Apply multiple CSS properties to an element with reactive support\n */\n protected applyStyles(element: Element, styles: CSSStyleProperties): void {\n // Check if element has a style property (for testing and real elements)\n if (element instanceof HTMLElement || (element as any).style) {\n const styleTarget = element instanceof HTMLElement ? element.style : (element as any).style\n\n for (const [property, value] of Object.entries(styles)) {\n if (value !== undefined) {\n const cssProperty = this.toCSSProperty(property)\n\n // Handle reactive values (signals and computed)\n if (isSignal(value) || isComputed(value)) {\n // Create reactive effect for this style property\n createEffect(() => {\n const currentValue = value()\n const cssValue = this.toCSSValueForProperty(cssProperty, currentValue)\n\n if (styleTarget.setProperty) {\n // Check if value contains !important and handle it properly\n if (typeof cssValue === 'string' && cssValue.includes('!important')) {\n const actualValue = cssValue.replace(/\\s*!important\\s*$/, '').trim()\n styleTarget.setProperty(cssProperty, actualValue, 'important')\n } else {\n styleTarget.setProperty(cssProperty, cssValue)\n }\n } else {\n ;(styleTarget as any)[cssProperty] = cssValue\n }\n })\n } else {\n // Handle static values\n const cssValue = this.toCSSValueForProperty(cssProperty, value)\n\n if (styleTarget.setProperty) {\n // Check if value contains !important and handle it properly\n if (typeof cssValue === 'string' && cssValue.includes('!important')) {\n const actualValue = cssValue.replace(/\\s*!important\\s*$/, '').trim()\n styleTarget.setProperty(cssProperty, actualValue, 'important')\n } else {\n styleTarget.setProperty(cssProperty, cssValue)\n }\n } else {\n ;(styleTarget as any)[cssProperty] = cssValue\n }\n }\n }\n }\n }\n }\n\n /**\n * Add CSS classes to an element\n */\n protected addClasses(element: Element, classes: string[]): void {\n if (element instanceof HTMLElement) {\n element.classList.add(...classes)\n }\n }\n\n /**\n * Remove CSS classes from an element\n */\n protected removeClasses(element: Element, classes: string[]): void {\n if (element instanceof HTMLElement) {\n element.classList.remove(...classes)\n }\n }\n\n /**\n * Create a style computation context\n */\n protected createStyleContext(\n componentId: string,\n element: Element,\n modifiers: Modifier[]\n ): StyleComputationContext {\n return {\n componentId,\n element,\n modifiers,\n signals: new Set(),\n cleanup: [],\n }\n }\n}\n\n/**\n * Layout modifier for frame, padding, margin\n */\nexport class LayoutModifier extends BaseModifier {\n readonly type = 'layout'\n readonly priority = ModifierPriority.LAYOUT\n\n apply(node: DOMNode, context: ModifierContext): DOMNode | undefined {\n if (!node.element || !context.element) return\n\n const styleContext = this.createStyleContext(context.componentId, context.element, [])\n\n const styles = this.computeLayoutStyles(this.properties as any, styleContext)\n\n this.applyStyles(context.element, styles)\n\n // Handle offset separately for proper transform combining\n const props = this.properties as any\n if (props.offset && context.element instanceof HTMLElement) {\n this.applyOffsetTransform(context.element, props.offset)\n }\n\n // Handle aspectRatio separately for reactive support\n if (props.aspectRatio && context.element instanceof HTMLElement) {\n this.applyAspectRatio(context.element, props.aspectRatio)\n }\n\n // Handle scaleEffect separately for proper transform combining (Phase 3 - Epic: Butternut)\n if (props.scaleEffect && context.element instanceof HTMLElement) {\n this.applyScaleTransform(context.element, props.scaleEffect)\n }\n\n // Handle absolutePosition separately for proper positioning (Phase 3 - Epic: Butternut)\n if (props.position && context.element instanceof HTMLElement) {\n this.applyAbsolutePosition(context.element, props.position)\n }\n\n // Handle zIndex separately for proper layering (Phase 3 - Epic: Butternut)\n if (props.zIndex !== undefined && context.element instanceof HTMLElement) {\n this.applyZIndex(context.element, props.zIndex)\n }\n\n return undefined\n }\n\n private applyOffsetTransform(element: HTMLElement, offset: { x?: any; y?: any }): void {\n const { x, y } = offset\n\n // Handle reactive values\n if (isSignal(x) || isComputed(x) || isSignal(y) || isComputed(y)) {\n createEffect(() => {\n const currentX = isSignal(x) || isComputed(x) ? x() : (x ?? 0)\n const currentY = isSignal(y) || isComputed(y) ? y() : (y ?? 0)\n\n const offsetX = this.toCSSValue(currentX)\n const offsetY = this.toCSSValue(currentY)\n const translateValue = `translate(${offsetX}, ${offsetY})`\n\n // Preserve existing transforms but replace any existing translate\n const existingTransform = element.style.transform || ''\n const existingTransforms = existingTransform\n .split(' ')\n .filter((t) => t && !t.startsWith('translate('))\n .join(' ')\n\n const newTransform = existingTransforms\n ? `${existingTransforms} ${translateValue}`\n : translateValue\n\n element.style.transform = newTransform\n })\n } else {\n // Handle static values\n const currentX = x ?? 0\n const currentY = y ?? 0\n\n const offsetX = this.toCSSValue(currentX)\n const offsetY = this.toCSSValue(currentY)\n const translateValue = `translate(${offsetX}, ${offsetY})`\n\n // Preserve existing transforms but replace any existing translate\n const existingTransform = element.style.transform || ''\n const existingTransforms = existingTransform\n .split(' ')\n .filter((t) => t && !t.startsWith('translate('))\n .join(' ')\n\n const newTransform = existingTransforms\n ? `${existingTransforms} ${translateValue}`\n : translateValue\n\n element.style.transform = newTransform\n }\n }\n\n private applyAspectRatio(\n element: HTMLElement,\n aspectRatio: { ratio?: any; contentMode?: 'fit' | 'fill' }\n ): void {\n const { ratio, contentMode } = aspectRatio\n\n if (ratio !== undefined) {\n // Handle reactive aspect ratio\n if (isSignal(ratio) || isComputed(ratio)) {\n createEffect(() => {\n const currentRatio = typeof ratio === 'function' ? ratio() : ratio\n element.style.aspectRatio = String(currentRatio)\n })\n } else {\n element.style.aspectRatio = String(ratio)\n }\n\n // Set content mode\n if (contentMode === 'fill') {\n element.style.objectFit = 'cover'\n } else {\n element.style.objectFit = 'contain'\n }\n }\n }\n\n // Phase 3 - Epic: Butternut Transform Methods\n\n private applyScaleTransform(\n element: HTMLElement,\n scaleEffect: { x?: any; y?: any; anchor?: string }\n ): void {\n const { x, y, anchor } = scaleEffect\n const scaleX = x ?? 1\n const scaleY = y ?? scaleX // Default to uniform scaling if y not provided\n\n // Handle reactive values\n if (isSignal(scaleX) || isComputed(scaleX) || isSignal(scaleY) || isComputed(scaleY)) {\n createEffect(() => {\n const currentX = isSignal(scaleX) || isComputed(scaleX) ? scaleX() : scaleX\n const currentY = isSignal(scaleY) || isComputed(scaleY) ? scaleY() : scaleY\n\n const scaleValue = `scale(${currentX}, ${currentY})`\n\n // Set transform-origin based on anchor\n element.style.transformOrigin = this.getTransformOrigin(anchor || 'center')\n\n // Preserve existing transforms but replace any existing scale\n const existingTransform = element.style.transform || ''\n const existingTransforms = existingTransform\n .replace(/\\s*scale\\([^)]*\\)\\s*/g, ' ')\n .replace(/\\s+/g, ' ')\n .trim()\n\n const newTransform = existingTransforms\n ? `${existingTransforms} ${scaleValue}`\n : scaleValue\n\n element.style.transform = newTransform\n })\n } else {\n // Handle static values\n const scaleValue = `scale(${scaleX}, ${scaleY})`\n\n // Set transform-origin based on anchor\n element.style.transformOrigin = this.getTransformOrigin(anchor || 'center')\n\n // Preserve existing transforms but replace any existing scale\n const existingTransform = element.style.transform || ''\n const existingTransforms = existingTransform\n .replace(/\\s*scale\\([^)]*\\)\\s*/g, ' ')\n .replace(/\\s+/g, ' ')\n .trim()\n\n const newTransform = existingTransforms\n ? `${existingTransforms} ${scaleValue}`\n : scaleValue\n\n element.style.transform = newTransform\n }\n }\n\n private applyAbsolutePosition(element: HTMLElement, position: { x?: any; y?: any }): void {\n const { x, y } = position\n\n // Set position to absolute for SwiftUI-style absolute positioning\n element.style.position = 'absolute'\n\n // Handle reactive values\n if (isSignal(x) || isComputed(x) || isSignal(y) || isComputed(y)) {\n createEffect(() => {\n const currentX = isSignal(x) || isComputed(x) ? x() : (x ?? 0)\n const currentY = isSignal(y) || isComputed(y) ? y() : (y ?? 0)\n\n element.style.left = this.toCSSValue(currentX)\n element.style.top = this.toCSSValue(currentY)\n })\n } else {\n // Handle static values\n const currentX = x ?? 0\n const currentY = y ?? 0\n\n element.style.left = this.toCSSValue(currentX)\n element.style.top = this.toCSSValue(currentY)\n }\n }\n\n private applyZIndex(element: HTMLElement, zIndex: any): void {\n // Handle reactive values\n if (isSignal(zIndex) || isComputed(zIndex)) {\n createEffect(() => {\n const currentZIndex = zIndex()\n element.style.zIndex = String(currentZIndex)\n })\n } else {\n // Handle static values\n element.style.zIndex = String(zIndex)\n }\n }\n\n private getTransformOrigin(anchor: string): string {\n const anchorMap: Record<string, string> = {\n center: 'center center',\n top: 'center top',\n topLeading: 'left top',\n topTrailing: 'right top',\n bottom: 'center bottom',\n bottomLeading: 'left bottom',\n bottomTrailing: 'right bottom',\n leading: 'left center',\n trailing: 'right center',\n }\n\n return anchorMap[anchor] || 'center center'\n }\n\n private computeLayoutStyles(props: any, _context: StyleComputationContext): CSSStyleProperties {\n const styles: CSSStyleProperties = {}\n\n // Frame properties - handle infinity values properly\n if (props.frame) {\n const frame = props.frame\n\n // Check for infinity constraints and apply appropriate flex/size styles\n const infinityResult = shouldExpandForInfinity(frame)\n Object.assign(styles, infinityResult.cssProps)\n\n // Convert dimensions to CSS, handling infinity appropriately\n // Don't apply explicit width/height if infinity expansion is happening\n if (frame.width !== undefined) {\n const cssValue = dimensionToCSS(frame.width)\n if (cssValue !== undefined && !isInfinity(frame.width) && !infinityResult.expandWidth) {\n styles.width = cssValue\n }\n }\n\n if (frame.height !== undefined) {\n const cssValue = dimensionToCSS(frame.height)\n if (cssValue !== undefined && !isInfinity(frame.height) && !infinityResult.expandHeight) {\n styles.height = cssValue\n }\n }\n\n if (frame.minWidth !== undefined) {\n const cssValue = dimensionToCSS(frame.minWidth)\n if (cssValue !== undefined) {\n styles.minWidth = cssValue\n }\n }\n\n if (frame.maxWidth !== undefined && !isInfinity(frame.maxWidth)) {\n const cssValue = dimensionToCSS(frame.maxWidth)\n if (cssValue !== undefined) {\n styles.maxWidth = cssValue\n }\n } else if (isInfinity(frame.maxWidth)) {\n // SwiftUI compatibility: maxWidth infinity means expand to fill available width\n // Remove maxWidth constraint and use flex properties for expansion\n styles.maxWidth = 'none'\n styles.flexGrow = '1 !important'\n styles.flexShrink = '1 !important'\n styles.flexBasis = '0% !important'\n styles.alignSelf = 'stretch !important'\n }\n\n if (frame.minHeight !== undefined) {\n const cssValue = dimensionToCSS(frame.minHeight)\n if (cssValue !== undefined) {\n styles.minHeight = cssValue\n }\n }\n\n if (frame.maxHeight !== undefined && !isInfinity(frame.maxHeight)) {\n const cssValue = dimensionToCSS(frame.maxHeight)\n if (cssValue !== undefined) {\n styles.maxHeight = cssValue\n }\n } else if (isInfinity(frame.maxHeight)) {\n // SwiftUI compatibility: maxHeight infinity means expand to fill available height\n // Remove maxHeight constraint and use flex properties for expansion\n styles.maxHeight = 'none'\n styles.flexGrow = '1 !important'\n styles.flexShrink = '1 !important'\n styles.flexBasis = '0% !important'\n styles.alignSelf = 'stretch !important'\n }\n }\n\n // Padding\n if (props.padding !== undefined) {\n if (typeof props.padding === 'number') {\n styles.padding = this.toCSSValue(props.padding)\n } else {\n const p = props.padding\n if (p.top !== undefined) styles.paddingTop = this.toCSSValue(p.top)\n if (p.right !== undefined) styles.paddingRight = this.toCSSValue(p.right)\n if (p.bottom !== undefined) styles.paddingBottom = this.toCSSValue(p.bottom)\n if (p.left !== undefined) styles.paddingLeft = this.toCSSValue(p.left)\n }\n }\n\n // Margin\n if (props.margin !== undefined) {\n if (typeof props.margin === 'number') {\n styles.margin = this.toCSSValue(props.margin)\n } else {\n const m = props.margin\n if (m.top !== undefined) styles.marginTop = this.toCSSValue(m.top)\n if (m.right !== undefined) styles.marginRight = this.toCSSValue(m.right)\n if (m.bottom !== undefined) styles.marginBottom = this.toCSSValue(m.bottom)\n if (m.left !== undefined) styles.marginLeft = this.toCSSValue(m.left)\n }\n }\n\n // Alignment\n if (props.alignment) {\n switch (props.alignment) {\n case 'leading':\n styles.textAlign = 'left'\n styles.alignItems = 'flex-start'\n break\n case 'center':\n styles.textAlign = 'center'\n styles.alignItems = 'center'\n break\n case 'trailing':\n styles.textAlign = 'right'\n styles.alignItems = 'flex-end'\n break\n case 'top':\n styles.alignItems = 'flex-start'\n break\n case 'bottom':\n styles.alignItems = 'flex-end'\n break\n }\n }\n\n // Layout Priority\n // In SwiftUI, layoutPriority determines which views get priority in sizing\n // Higher priority views determine container size in ZStack\n // We implement this using CSS flexbox properties for flexible layouts\n if (props.layoutPriority !== undefined) {\n const priority = Number(props.layoutPriority)\n\n // Set flex properties based on priority\n // Higher priority = less flex shrink, more flex grow\n if (priority > 0) {\n // High priority: Don't shrink, allow growth\n styles.flexShrink = '0'\n styles.flexGrow = String(Math.max(1, priority / 10))\n\n // For ZStack containers, higher priority elements determine size\n // We use z-index for layering and flex properties for sizing behavior\n styles.zIndex = String(priority)\n\n // In grid layouts, higher priority gets more space\n styles.gridRowEnd = `span ${String(Math.min(10, Math.max(1, Math.ceil(priority / 10))))}`\n styles.gridColumnEnd = `span ${String(Math.min(10, Math.max(1, Math.ceil(priority / 10))))}`\n } else if (priority === 0) {\n // Default priority: Normal flex behavior\n styles.flexShrink = '1'\n styles.flexGrow = '1'\n } else {\n // Low priority: Shrink more, grow less\n styles.flexShrink = String(Math.abs(priority))\n styles.flexGrow = '0'\n styles.zIndex = String(priority)\n }\n\n // For containers that need to size based on highest priority child\n // We use CSS custom properties that can be read by parent containers\n if (styles && typeof styles === 'object' && 'setProperty' in styles) {\n ;(styles as any).setProperty('--layout-priority', String(priority))\n }\n }\n\n // Offset modifier (SwiftUI .offset(x, y))\n // Note: Offset handling is done in the apply method with proper reactive support\n // This is just for setting up the basic structure\n if (props.offset) {\n // The actual transform application happens in apply() method\n // to handle both reactive and static values properly\n }\n\n // Aspect Ratio modifier (SwiftUI .aspectRatio(ratio, contentMode))\n if (props.aspectRatio) {\n const { ratio, contentMode } = props.aspectRatio\n\n if (ratio !== undefined) {\n // Apply CSS aspect-ratio property\n styles.aspectRatio = typeof ratio === 'number' ? String(ratio) : ratio\n\n // Handle content mode\n if (contentMode === 'fill') {\n styles.objectFit = 'cover'\n } else {\n styles.objectFit = 'contain'\n }\n }\n }\n\n // Fixed Size modifier (SwiftUI .fixedSize())\n if (props.fixedSize) {\n const { horizontal, vertical } = props.fixedSize\n\n if (horizontal) {\n styles.flexShrink = '0'\n styles.width = 'max-content'\n }\n if (vertical) {\n styles.flexShrink = '0'\n styles.height = 'max-content'\n }\n }\n\n return styles\n }\n}\n\n/**\n * Appearance modifier for colors, fonts, borders, shadows\n */\nexport class AppearanceModifier extends BaseModifier {\n readonly type = 'appearance'\n readonly priority = ModifierPriority.APPEARANCE\n\n apply(node: DOMNode, context: ModifierContext): DOMNode | undefined {\n if (!node.element || !context.element) {\n return\n }\n\n const styleContext = this.createStyleContext(context.componentId, context.element, [])\n\n const resolved = this.resolveReactiveProps(this.properties as any, styleContext)\n\n // Handle Assets separately with theme reactivity\n this.applyAssetBasedStyles(context.element, resolved)\n\n // Handle non-Asset styles normally\n const styles = this.computeAppearanceStyles(resolved)\n this.applyStyles(context.element, styles)\n\n return undefined\n }\n\n /**\n * Apply Asset-based styles with theme reactivity\n */\n private applyAssetBasedStyles(element: Element, props: any): void {\n // Get the shared theme signal\n const themeSignal = getThemeSignal()\n\n // Handle foregroundColor Asset\n if (props.foregroundColor && this.isAsset(props.foregroundColor)) {\n createEffect(() => {\n // Watch theme changes to trigger re-resolution\n themeSignal()\n // Re-resolve Asset when theme changes\n const resolvedColor = props.foregroundColor.resolve()\n this.applyStyleChange(element, 'color', resolvedColor)\n })\n }\n\n // Handle backgroundColor Asset\n if (props.backgroundColor && this.isAsset(props.backgroundColor)) {\n createEffect(() => {\n // Watch theme changes to trigger re-resolution\n themeSignal()\n // Re-resolve Asset when theme changes\n const resolvedColor = props.backgroundColor.resolve()\n this.applyStyleChange(element, 'backgroundColor', resolvedColor)\n })\n }\n\n // Handle border color Asset\n if (props.border?.color && this.isAsset(props.border.color)) {\n createEffect(() => {\n // Watch theme changes\n themeSignal()\n // Re-resolve Asset when theme changes\n const resolvedColor = props.border.color.resolve()\n this.applyStyleChange(element, 'borderColor', resolvedColor)\n })\n }\n }\n\n /**\n * Check if a value is an Asset object (including Asset proxies)\n */\n private isAsset(value: any): boolean {\n return (\n value !== null &&\n value !== undefined &&\n typeof value === 'object' &&\n 'resolve' in value &&\n typeof value.resolve === 'function'\n )\n }\n\n private computeAppearanceStyles(props: any): CSSStyleProperties {\n const styles: CSSStyleProperties = {}\n\n // Colors (skip Assets - they're handled reactively in applyAssetBasedStyles)\n if (props.foregroundColor && !this.isAsset(props.foregroundColor)) {\n styles.color = props.foregroundColor\n }\n if (props.backgroundColor && !this.isAsset(props.backgroundColor)) {\n styles.backgroundColor = props.backgroundColor\n }\n if (props.opacity !== undefined) styles.opacity = props.opacity\n\n // Font\n if (props.font) {\n const font = props.font\n if (font.family) {\n // Handle FontAsset objects that need to be resolved\n if (typeof font.family === 'object' && font.family !== null && 'resolve' in font.family) {\n styles.fontFamily = (font.family as any).resolve()\n } else {\n styles.fontFamily = font.family as string\n }\n }\n if (font.size) styles.fontSize = this.toCSSValue(font.size)\n if (font.weight) styles.fontWeight = String(font.weight)\n if (font.style) styles.fontStyle = font.style\n }\n\n // Corner radius\n if (props.cornerRadius !== undefined) {\n styles.borderRadius = this.toCSSValue(props.cornerRadius)\n }\n\n // Border\n if (props.border) {\n const border = props.border\n if (border.width !== undefined) styles.borderWidth = this.toCSSValue(border.width)\n if (border.color && !this.isAsset(border.color)) {\n styles.borderColor = border.color as string\n }\n if (border.style) styles.borderStyle = border.style\n }\n\n // Shadow\n if (props.shadow) {\n const shadow = props.shadow\n const x = shadow.x || 0\n const y = shadow.y || 0\n const radius = shadow.radius || 0\n const color = shadow.color || 'rgba(0,0,0,0.25)'\n styles.boxShadow = `${x}px ${y}px ${radius}px ${color}`\n }\n\n // Clipped modifier (SwiftUI .clipped())\n if (props.clipped) {\n styles.overflow = 'hidden'\n }\n\n // Clip Shape modifier (SwiftUI .clipShape())\n if (props.clipShape) {\n const { shape, parameters } = props.clipShape\n\n switch (shape) {\n case 'circle':\n styles.clipPath = 'circle(50%)'\n break\n case 'ellipse': {\n const radiusX = parameters?.radiusX || '50%'\n const radiusY = parameters?.radiusY || '50%'\n styles.clipPath = `ellipse(${radiusX} ${radiusY} at center)`\n break\n }\n case 'rect': {\n const inset = parameters?.inset || 0\n styles.clipPath = `inset(${inset}px)`\n break\n }\n case 'polygon': {\n const points = parameters?.points || '0% 0%, 100% 0%, 100% 100%, 0% 100%'\n styles.clipPath = `polygon(${points})`\n break\n }\n }\n }\n\n // Visual Effects (Phase 2 - Epic: Butternut)\n const filters: string[] = []\n\n if (props.blur !== undefined) {\n filters.push(`blur(${props.blur}px)`)\n }\n if (props.brightness !== undefined) {\n filters.push(`brightness(${props.brightness})`)\n }\n if (props.contrast !== undefined) {\n filters.push(`contrast(${props.contrast})`)\n }\n if (props.saturation !== undefined) {\n filters.push(`saturate(${props.saturation})`)\n }\n if (props.hueRotation !== undefined) {\n filters.push(`hue-rotate(${props.hueRotation}deg)`)\n }\n if (props.grayscale !== undefined) {\n filters.push(`grayscale(${props.grayscale})`)\n }\n if (props.colorInvert !== undefined) {\n filters.push(`invert(${props.colorInvert})`)\n }\n\n if (filters.length > 0) {\n styles.filter = filters.join(' ')\n }\n\n return styles\n }\n}\n\n/**\n * Interaction modifier for events and accessibility\n */\nexport class InteractionModifier extends BaseModifier {\n readonly type = 'interaction'\n readonly priority = ModifierPriority.INTERACTION\n\n apply(_node: DOMNode, context: ModifierContext): DOMNode | undefined {\n if (!context.element) return\n\n const props = this.properties as any\n\n // Event handlers\n if (props.onTap) {\n context.element.addEventListener('click', props.onTap)\n }\n\n if (props.onHover) {\n context.element.addEventListener('mouseenter', () => props.onHover(true))\n context.element.addEventListener('mouseleave', () => props.onHover(false))\n }\n\n if (props.onMouseEnter) {\n context.element.addEventListener('mouseenter', props.onMouseEnter)\n }\n\n if (props.onMouseLeave) {\n context.element.addEventListener('mouseleave', props.onMouseLeave)\n }\n\n if (props.onMouseDown) {\n context.element.addEventListener('mousedown', props.onMouseDown)\n }\n\n if (props.onMouseUp) {\n context.element.addEventListener('mouseup', props.onMouseUp)\n }\n\n if (props.onDragStart) {\n context.element.addEventListener('dragstart', props.onDragStart)\n }\n\n if (props.onDragOver) {\n context.element.addEventListener('dragover', props.onDragOver)\n }\n\n if (props.onDragLeave) {\n context.element.addEventListener('dragleave', props.onDragLeave)\n }\n\n if (props.onDrop) {\n context.element.addEventListener('drop', props.onDrop)\n }\n\n // Additional mouse events\n if (props.onDoubleClick) {\n context.element.addEventListener('dblclick', props.onDoubleClick)\n }\n\n if (props.onContextMenu) {\n context.element.addEventListener('contextmenu', props.onContextMenu)\n }\n\n // Focus events\n if (props.onFocus) {\n context.element.addEventListener('focus', () => props.onFocus(true))\n context.element.addEventListener('blur', () => props.onFocus(false))\n }\n\n if (props.onBlur) {\n context.element.addEventListener('blur', () => props.onBlur(false))\n }\n\n // Keyboard events\n if (props.onKeyPress) {\n context.element.addEventListener('keypress', props.onKeyPress)\n }\n\n if (props.onKeyDown) {\n context.element.addEventListener('keydown', props.onKeyDown)\n }\n\n if (props.onKeyUp) {\n context.element.addEventListener('keyup', props.onKeyUp)\n }\n\n // Scroll and wheel events\n if (props.onScroll) {\n context.element.addEventListener('scroll', props.onScroll, { passive: true })\n }\n\n if (props.onWheel) {\n context.element.addEventListener('wheel', props.onWheel, { passive: false })\n }\n\n // Input events\n if (props.onInput) {\n context.element.addEventListener('input', props.onInput)\n }\n\n if (props.onChange) {\n context.element.addEventListener('change', (event) => {\n const target = event.target as HTMLInputElement\n const value = target.value || target.textContent || ''\n props.onChange(value, event)\n })\n }\n\n // Clipboard events\n if (props.onCopy) {\n context.element.addEventListener('copy', props.onCopy)\n }\n\n if (props.onCut) {\n context.element.addEventListener('cut', props.onCut)\n }\n\n if (props.onPaste) {\n context.element.addEventListener('paste', props.onPaste)\n }\n\n // Selection events\n if (props.onSelect) {\n context.element.addEventListener('select', props.onSelect)\n }\n\n // Disabled state\n if (props.disabled !== undefined) {\n if (context.element instanceof HTMLElement) {\n if (props.disabled) {\n context.element.setAttribute('disabled', 'true')\n context.element.style.pointerEvents = 'none'\n context.element.style.opacity = '0.6'\n } else {\n context.element.removeAttribute('disabled')\n context.element.style.pointerEvents = ''\n context.element.style.opacity = ''\n }\n }\n }\n\n // Draggable state\n if (props.draggable !== undefined) {\n if (context.element instanceof HTMLElement) {\n context.element.draggable = props.draggable\n }\n }\n\n // Accessibility\n if (props.accessibilityLabel) {\n context.element.setAttribute('aria-label', props.accessibilityLabel)\n }\n\n if (props.accessibilityHint) {\n context.element.setAttribute('aria-describedby', props.accessibilityHint)\n }\n\n // Advanced Gesture Modifiers (Phase 4 - Epic: Butternut)\n if (props.onLongPressGesture) {\n this.setupLongPressGesture(context.element, props.onLongPressGesture)\n }\n\n if (props.keyboardShortcut) {\n this.setupKeyboardShortcut(context.element, props.keyboardShortcut)\n }\n\n if (props.focused !== undefined) {\n this.setupFocusManagement(context.element, props.focused)\n }\n\n if (props.focusable) {\n this.setupFocusable(context.element, props.focusable)\n }\n\n if (props.onContinuousHover) {\n this.setupContinuousHover(context.element, props.onContinuousHover)\n }\n\n if (props.allowsHitTesting !== undefined) {\n this.setupHitTesting(context.element, props.allowsHitTesting)\n }\n\n return undefined\n }\n\n // Phase 4 Advanced Gesture Methods\n\n /**\n * Setup long press gesture with timing and distance constraints\n */\n private setupLongPressGesture(\n element: Element,\n options: {\n minimumDuration?: number\n maximumDistance?: number\n perform: () => void\n onPressingChanged?: (isPressing: boolean) => void\n }\n ): void {\n const minimumDuration = options.minimumDuration ?? 500 // ms\n const maximumDistance = options.maximumDistance ?? 10 // px\n\n let timeoutId: number | undefined\n let startPoint: { x: number; y: number } | null = null\n let isPressing = false\n\n const cleanup = () => {\n if (timeoutId) {\n clearTimeout(timeoutId)\n timeoutId = undefined\n }\n if (isPressing && options.onPressingChanged) {\n options.onPressingChanged(false)\n }\n isPressing = false\n startPoint = null\n }\n\n const handlePointerDown = (event: Event) => {\n const pointerEvent = event as PointerEvent\n startPoint = { x: pointerEvent.clientX, y: pointerEvent.clientY }\n isPressing = true\n\n if (options.onPressingChanged) {\n options.onPressingChanged(true)\n }\n\n timeoutId = window.setTimeout(() => {\n if (isPressing && startPoint) {\n options.perform()\n cleanup()\n }\n }, minimumDuration)\n }\n\n const handlePointerMove = (event: Event) => {\n const pointerEvent = event as PointerEvent\n if (!startPoint || !isPressing) return\n\n const distance = Math.sqrt(\n Math.pow(pointerEvent.clientX - startPoint.x, 2) +\n Math.pow(pointerEvent.clientY - startPoint.y, 2)\n )\n\n if (distance > maximumDistance) {\n cleanup()\n }\n }\n\n const handlePointerUp = () => {\n cleanup()\n }\n\n const handlePointerCancel = () => {\n cleanup()\n }\n\n // Use pointer events for better touch/mouse compatibility\n element.addEventListener('pointerdown', handlePointerDown as EventListener)\n element.addEventListener('pointermove', handlePointerMove as EventListener)\n element.addEventListener('pointerup', handlePointerUp as EventListener)\n element.addEventListener('pointercancel', handlePointerCancel as EventListener)\n\n // Store cleanup function for later removal\n ;(element as any)._longPressCleanup = cleanup\n }\n\n /**\n * Setup keyboard shortcut handling\n */\n private setupKeyboardShortcut(\n element: Element,\n shortcut: {\n key: string\n modifiers?: ('cmd' | 'ctrl' | 'shift' | 'alt' | 'meta')[]\n action: () => void\n }\n ): void {\n const modifiers = shortcut.modifiers ?? []\n\n const handleKeyDown = (event: KeyboardEvent) => {\n // Check if all required modifiers are pressed\n const requiredModifiers = {\n cmd: modifiers.includes('cmd') || modifiers.includes('meta'),\n ctrl: modifiers.includes('ctrl'),\n shift: modifiers.includes('shift'),\n alt: modifiers.includes('alt')\n }\n\n const actualModifiers = {\n cmd: event.metaKey || event.ctrlKey, // Handle both Mac (meta) and PC (ctrl)\n ctrl: event.ctrlKey,\n shift: event.shiftKey,\n alt: event.altKey\n }\n\n // Check key match (case insensitive)\n const keyMatches = event.key.toLowerCase() === shortcut.key.toLowerCase()\n\n // Check modifier requirements\n const modifiersMatch = Object.entries(requiredModifiers).every(\n ([mod, required]) => required === actualModifiers[mod as keyof typeof actualModifiers]\n )\n\n if (keyMatches && modifiersMatch) {\n event.preventDefault()\n shortcut.action()\n }\n }\n\n // Add keyboard event listener to document for global shortcuts\n document.addEventListener('keydown', handleKeyDown)\n\n // Store cleanup function\n ;(element as any)._keyboardShortcutCleanup = () => {\n document.removeEventListener('keydown', handleKeyDown)\n }\n }\n\n /**\n * Setup focus management with reactive binding\n */\n private setupFocusManagement(element: Element, focused: boolean | Signal<boolean>): void {\n if (!(element instanceof HTMLElement)) return\n\n const htmlElement = element as HTMLElement\n\n // Make element focusable if it's not naturally focusable\n if (!htmlElement.hasAttribute('tabindex')) {\n htmlElement.setAttribute('tabindex', '0')\n }\n\n if (isSignal(focused) || isComputed(focused)) {\n // Reactive focus management\n createEffect(() => {\n const shouldFocus = focused()\n if (shouldFocus) {\n htmlElement.focus()\n } else {\n htmlElement.blur()\n }\n })\n } else {\n // Static focus management\n if (focused) {\n htmlElement.focus()\n }\n }\n }\n\n /**\n * Setup focusable behavior\n */\n private setupFocusable(\n element: Element,\n options: {\n isFocusable?: boolean\n interactions?: ('activate' | 'edit')[]\n }\n ): void {\n if (!(element instanceof HTMLElement)) return\n\n const htmlElement = element as HTMLElement\n\n if (options.isFocusable === false) {\n htmlElement.setAttribute('tabindex', '-1')\n } else {\n if (!htmlElement.hasAttribute('tabindex')) {\n htmlElement.setAttribute('tabindex', '0')\n }\n }\n\n // Setup interaction behaviors\n if (options.interactions?.includes('activate')) {\n htmlElement.addEventListener('keydown', (event) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault()\n htmlElement.click()\n }\n })\n }\n\n if (options.interactions?.includes('edit')) {\n htmlElement.setAttribute('role', 'textbox')\n htmlElement.setAttribute('contenteditable', 'true')\n }\n }\n\n /**\n * Setup continuous hover tracking with coordinates\n */\n private setupContinuousHover(\n element: Element,\n options: {\n coordinateSpace?: 'local' | 'global'\n perform: (location: { x: number; y: number } | null) => void\n }\n ): void {\n const coordinateSpace = options.coordinateSpace ?? 'local'\n\n const handleMouseMove = (event: Event) => {\n const mouseEvent = event as MouseEvent\n let x: number, y: number\n\n if (coordinateSpace === 'local') {\n const rect = element.getBoundingClientRect()\n x = mouseEvent.clientX - rect.left\n y = mouseEvent.clientY - rect.top\n } else {\n x = mouseEvent.clientX\n y = mouseEvent.clientY\n }\n\n options.perform({ x, y })\n }\n\n const handleMouseLeave = () => {\n options.perform(null)\n }\n\n element.addEventListener('mousemove', handleMouseMove as EventListener)\n element.addEventListener('mouseleave', handleMouseLeave as EventListener)\n\n // Store cleanup\n ;(element as any)._continuousHoverCleanup = () => {\n element.removeEventListener('mousemove', handleMouseMove as EventListener)\n element.removeEventListener('mouseleave', handleMouseLeave as EventListener)\n }\n }\n\n /**\n * Setup hit testing control\n */\n private setupHitTesting(element: Element, enabled: boolean): void {\n if (element instanceof HTMLElement) {\n element.style.pointerEvents = enabled ? '' : 'none'\n }\n }\n}\n\n/**\n * Animation modifier for transitions and animations\n */\nexport class AnimationModifier extends BaseModifier {\n readonly type = 'animation'\n readonly priority = ModifierPriority.ANIMATION\n\n apply(_node: DOMNode, context: ModifierContext): DOMNode | undefined {\n if (!context.element) return\n\n const props = this.properties as any\n\n // Transition\n if (props.transition) {\n const t = props.transition\n const property = t.property || 'all'\n const duration = t.duration || 300\n const easing = t.easing || 'ease'\n const delay = t.delay || 0\n\n if (context.element instanceof HTMLElement) {\n context.element.style.transition = `${property} ${duration}ms ${easing} ${delay}ms`\n }\n }\n\n // Animation\n if (props.animation && context.element instanceof HTMLElement) {\n const anim = props.animation\n\n if (anim.keyframes) {\n // Create keyframes\n const keyframeName = `tachui-animation-${context.componentId}-${Date.now()}`\n const keyframeRule = this.createKeyframeRule(keyframeName, anim.keyframes)\n\n // Add keyframes to stylesheet\n this.addKeyframesToStylesheet(keyframeRule)\n\n // Apply animation\n const duration = anim.duration || 1000\n const easing = anim.easing || 'ease'\n const iterations = anim.iterations || 1\n const direction = anim.direction || 'normal'\n\n context.element.style.animation = `${keyframeName} ${duration}ms ${easing} ${iterations} ${direction}`\n }\n }\n\n // Transform\n if (props.transform && context.element instanceof HTMLElement) {\n if (isSignal(props.transform) || isComputed(props.transform)) {\n // Create reactive effect for transform\n createEffect(() => {\n const transformValue = props.transform()\n if (context.element instanceof HTMLElement) {\n context.element.style.transform = transformValue\n }\n })\n } else {\n context.element.style.transform = props.transform\n }\n }\n\n // Rotation Effect (SwiftUI .rotationEffect(angle))\n if (props.rotationEffect && context.element instanceof HTMLElement) {\n const { angle, anchor } = props.rotationEffect\n\n // Convert anchor to CSS transform-origin\n const anchorOrigins: Record<string, string> = {\n center: '50% 50%',\n top: '50% 0%',\n topLeading: '0% 0%',\n topTrailing: '100% 0%',\n bottom: '50% 100%',\n bottomLeading: '0% 100%',\n bottomTrailing: '100% 100%',\n leading: '0% 50%',\n trailing: '100% 50%',\n }\n\n const transformOrigin = anchorOrigins[anchor || 'center'] || '50% 50%'\n\n // Create rotation transform\n const rotationTransform = `rotate(${angle}deg)`\n\n if (isSignal(angle) || isComputed(angle)) {\n // Reactive rotation\n createEffect(() => {\n const currentAngle = typeof angle === 'function' ? angle() : angle\n const currentRotation = `rotate(${currentAngle}deg)`\n\n if (context.element instanceof HTMLElement) {\n context.element.style.transformOrigin = transformOrigin\n\n // Combine with existing transforms if any\n const existingTransform = context.element.style.transform || ''\n const existingTransforms = existingTransform\n .split(' ')\n .filter((t) => t && !t.startsWith('rotate('))\n .join(' ')\n\n const newTransform = existingTransforms\n ? `${existingTransforms} ${currentRotation}`\n : currentRotation\n\n context.element.style.transform = newTransform\n }\n })\n } else {\n // Static rotation\n if (context.element instanceof HTMLElement) {\n context.element.style.transformOrigin = transformOrigin\n\n // Combine with existing transforms if any\n const existingTransform = context.element.style.transform || ''\n const existingTransforms = existingTransform\n .split(' ')\n .filter((t) => t && !t.startsWith('rotate('))\n .join(' ')\n\n const newTransform = existingTransforms\n ? `${existingTransforms} ${rotationTransform}`\n : rotationTransform\n\n context.element.style.transform = newTransform\n }\n }\n }\n\n // Overlay modifier (SwiftUI .overlay())\n if (props.overlay && context.element instanceof HTMLElement) {\n this.applyOverlay(context.element, props.overlay, context)\n }\n\n return undefined\n }\n\n private applyOverlay(\n element: HTMLElement,\n overlay: { content: any; alignment?: string },\n _context: ModifierContext\n ): void {\n const { content, alignment = 'center' } = overlay\n\n // Make the element a positioned container\n if (element.style.position === '' || element.style.position === 'static') {\n element.style.position = 'relative'\n }\n\n // Create overlay container\n const overlayContainer = document.createElement('div')\n overlayContainer.style.position = 'absolute'\n overlayContainer.style.pointerEvents = 'none' // Allow clicks to pass through by default\n\n // Apply alignment positioning\n const alignmentStyles = this.getOverlayAlignment(alignment)\n Object.assign(overlayContainer.style, alignmentStyles)\n\n // Render content\n if (typeof content === 'function') {\n // If content is a function, call it to get component\n const contentComponent = content()\n if (contentComponent && typeof contentComponent.render === 'function') {\n const contentNode = contentComponent.render()\n if (contentNode.element) {\n overlayContainer.appendChild(contentNode.element)\n }\n }\n } else if (content && typeof content.render === 'function') {\n // If content is a component instance\n const contentNode = content.render()\n if (contentNode.element) {\n overlayContainer.appendChild(contentNode.element)\n }\n } else if (content instanceof HTMLElement) {\n // If content is already a DOM element\n overlayContainer.appendChild(content)\n }\n\n // Add overlay to the element\n element.appendChild(overlayContainer)\n }\n\n private getOverlayAlignment(alignment: string): Record<string, string> {\n const alignments: Record<string, Record<string, string>> = {\n center: {\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n },\n top: {\n top: '0',\n left: '50%',\n transform: 'translateX(-50%)',\n },\n bottom: {\n bottom: '0',\n left: '50%',\n transform: 'translateX(-50%)',\n },\n leading: {\n top: '50%',\n left: '0',\n transform: 'translateY(-50%)',\n },\n trailing: {\n top: '50%',\n right: '0',\n transform: 'translateY(-50%)',\n },\n topLeading: {\n top: '0',\n left: '0',\n },\n topTrailing: {\n top: '0',\n right: '0',\n },\n bottomLeading: {\n bottom: '0',\n left: '0',\n },\n bottomTrailing: {\n bottom: '0',\n right: '0',\n },\n }\n\n return alignments[alignment] || alignments.center\n }\n\n private createKeyframeRule(\n name: string,\n keyframes: Record<string, Record<string, string>>\n ): string {\n let rule = `@keyframes ${name} {\\n`\n\n for (const [percentage, styles] of Object.entries(keyframes)) {\n rule += ` ${percentage} {\\n`\n for (const [property, value] of Object.entries(styles)) {\n const cssProperty = this.toCSSProperty(property)\n rule += ` ${cssProperty}: ${value};\\n`\n }\n rule += ` }\\n`\n }\n\n rule += '}'\n return rule\n }\n\n private addKeyframesToStylesheet(rule: string): void {\n let stylesheet = document.querySelector('#tachui-animations') as HTMLStyleElement\n\n if (!stylesheet) {\n stylesheet = document.createElement('style')\n stylesheet.id = 'tachui-animations'\n document.head.appendChild(stylesheet)\n }\n\n stylesheet.appendChild(document.createTextNode(rule))\n }\n}\n\n/**\n * Lifecycle modifier for component lifecycle events\n */\nexport class LifecycleModifier extends BaseModifier {\n readonly type = 'lifecycle'\n readonly priority = ModifierPriority.CUSTOM\n\n private activeAbortController?: AbortController\n\n apply(_node: DOMNode, context: ModifierContext): DOMNode | undefined {\n if (!context.element) return\n\n const props = this.properties as LifecycleModifierProps\n\n // Clean up any existing tasks on re-application\n if (this.activeAbortController) {\n this.activeAbortController.abort()\n }\n\n // Set up intersection observer for onAppear/onDisappear\n if (props.onAppear || props.onDisappear) {\n this.setupLifecycleObserver(context.element, props)\n }\n\n // Set up async task with cancellation\n if (props.task) {\n this.setupTask(context, props.task)\n }\n\n // Set up refreshable behavior\n if (props.refreshable) {\n this.setupRefreshable(context.element, props.refreshable)\n }\n\n return undefined\n }\n\n private setupLifecycleObserver(element: Element, props: LifecycleModifierProps): void {\n const observer = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting && props.onAppear) {\n // Element has appeared in viewport\n props.onAppear()\n } else if (!entry.isIntersecting && props.onDisappear) {\n // Element has disappeared from viewport\n props.onDisappear()\n }\n })\n },\n {\n threshold: 0.1, // Trigger when 10% of element is visible\n rootMargin: '10px', // Add some margin for better UX\n }\n )\n\n observer.observe(element)\n\n // Store cleanup function\n this.addCleanup(() => {\n observer.disconnect()\n })\n }\n\n private setupTask(_context: ModifierContext, task: LifecycleModifierProps['task']): void {\n if (!task) return\n\n // Create abort controller for task cancellation\n this.activeAbortController = new AbortController()\n const { signal } = this.activeAbortController\n\n // Execute the task operation\n const executeTask = async () => {\n try {\n if (signal.aborted) return\n\n const result = task.operation()\n\n // Handle both sync and async operations\n if (result instanceof Promise) {\n await result\n }\n } catch (error) {\n if (signal.aborted) return\n console.error('TachUI Task Error:', error)\n }\n }\n\n // Start task execution\n executeTask()\n\n // Add cleanup to cancel task on component unmount\n this.addCleanup(() => {\n if (this.activeAbortController) {\n this.activeAbortController.abort()\n }\n })\n }\n\n private setupRefreshable(\n element: Element,\n refreshable: LifecycleModifierProps['refreshable']\n ): void {\n if (!refreshable) return\n\n let isRefreshing = false\n let pullDistance = 0\n let startY = 0\n\n const threshold = 70 // Pull threshold in pixels\n\n // Create refresh indicator element\n const refreshIndicator = document.createElement('div')\n refreshIndicator.style.cssText = `\n position: absolute;\n top: -50px;\n left: 50%;\n transform: translateX(-50%);\n width: 30px;\n height: 30px;\n border: 2px solid #ccc;\n border-top: 2px solid #007AFF;\n border-radius: 50%;\n animation: tachui-spin 1s linear infinite;\n opacity: 0;\n transition: opacity 0.3s ease;\n z-index: 1000;\n `\n\n // Add spinner animation\n if (!document.querySelector('#tachui-refresh-styles')) {\n const style = document.createElement('style')\n style.id = 'tachui-refresh-styles'\n style.textContent = `\n @keyframes tachui-spin {\n 0% { transform: translateX(-50%) rotate(0deg); }\n 100% { transform: translateX(-50%) rotate(360deg); }\n }\n `\n document.head.appendChild(style)\n }\n\n const container = element.parentElement || element\n if (container instanceof HTMLElement) {\n container.style.position = 'relative'\n container.appendChild(refreshIndicator)\n }\n\n // Touch event handlers\n const handleTouchStart = (e: TouchEvent) => {\n if (isRefreshing) return\n startY = e.touches[0].clientY\n }\n\n const handleTouchMove = (e: TouchEvent) => {\n if (isRefreshing) return\n\n const currentY = e.touches[0].clientY\n pullDistance = Math.max(0, currentY - startY)\n\n if (pullDistance > 20) {\n e.preventDefault() // Prevent default scrolling\n\n const progress = Math.min(pullDistance / threshold, 1)\n refreshIndicator.style.opacity = String(progress * 0.8)\n refreshIndicator.style.top = `${-50 + progress * 20}px`\n }\n }\n\n const handleTouchEnd = async () => {\n if (isRefreshing || pullDistance < threshold) {\n // Reset if threshold not met\n refreshIndicator.style.opacity = '0'\n refreshIndicator.style.top = '-50px'\n pullDistance = 0\n return\n }\n\n // Trigger refresh\n isRefreshing = true\n refreshIndicator.style.opacity = '1'\n refreshIndicator.style.top = '10px'\n\n try {\n await refreshable.onRefresh()\n } catch (error) {\n console.error('TachUI Refresh Error:', error)\n } finally {\n isRefreshing = false\n refreshIndicator.style.opacity = '0'\n refreshIndicator.style.top = '-50px'\n pullDistance = 0\n }\n }\n\n // Add event listeners with proper typing\n element.addEventListener('touchstart', handleTouchStart as EventListener, { passive: false })\n element.addEventListener('touchmove', handleTouchMove as EventListener, { passive: false })\n element.addEventListener('touchend', handleTouchEnd as EventListener)\n\n // Cleanup\n this.addCleanup(() => {\n element.removeEventListener('touchstart', handleTouchStart as EventListener)\n element.removeEventListener('touchmove', handleTouchMove as EventListener)\n element.removeEventListener('touchend', handleTouchEnd as EventListener)\n\n if (refreshIndicator.parentElement) {\n refreshIndicator.parentElement.removeChild(refreshIndicator)\n }\n })\n }\n\n private addCleanup(cleanup: () => void): void {\n // Store cleanup functions for proper disposal\n if (!(this.properties as any)._cleanupFunctions) {\n ;(this.properties as any)._cleanupFunctions = []\n }\n ;(this.properties as any)._cleanupFunctions.push(cleanup)\n }\n}\n\n/**\n * Resizable modifier for making images resizable\n * In SwiftUI, .resizable() allows images to be scaled to fit their container\n */\nexport class ResizableModifier extends BaseModifier {\n readonly type = 'resizable'\n readonly priority = ModifierPriority.APPEARANCE\n\n apply(_node: DOMNode, context: ModifierContext): DOMNode | undefined {\n if (!context.element) return\n\n // For images, resizable means they can be scaled to fit their container\n // This is typically achieved with object-fit: fill in CSS\n if (context.element instanceof HTMLImageElement) {\n context.element.style.objectFit = 'fill'\n }\n\n return undefined\n }\n}\n"],"names":["BaseModifier","properties","props","context","resolved","key","value","isSignal","isComputed","element","property","cssProperty","createEffect","currentValue","cssValue","actualValue","styles","styleTarget","classes","componentId","modifiers","LayoutModifier","__publicField","ModifierPriority","node","styleContext","offset","x","y","currentX","currentY","offsetX","offsetY","translateValue","existingTransforms","t","newTransform","aspectRatio","ratio","contentMode","currentRatio","scaleEffect","anchor","scaleX","scaleY","scaleValue","position","zIndex","currentZIndex","_context","frame","infinityResult","shouldExpandForInfinity","dimensionToCSS","isInfinity","p","m","priority","horizontal","vertical","AppearanceModifier","themeSignal","getThemeSignal","resolvedColor","font","border","shadow","radius","color","shape","parameters","radiusX","radiusY","inset","points","filters","InteractionModifier","_node","event","target","options","minimumDuration","maximumDistance","timeoutId","startPoint","isPressing","cleanup","handlePointerDown","pointerEvent","handlePointerMove","handlePointerUp","handlePointerCancel","shortcut","handleKeyDown","requiredModifiers","actualModifiers","keyMatches","modifiersMatch","mod","required","focused","htmlElement","coordinateSpace","handleMouseMove","mouseEvent","rect","handleMouseLeave","enabled","AnimationModifier","duration","easing","delay","anim","keyframeName","keyframeRule","iterations","direction","transformValue","angle","transformOrigin","rotationTransform","currentRotation","overlay","content","alignment","overlayContainer","alignmentStyles","contentComponent","contentNode","alignments","name","keyframes","rule","percentage","stylesheet","LifecycleModifier","observer","entries","entry","task","signal","result","error","refreshable","isRefreshing","pullDistance","startY","threshold","refreshIndicator","style","container","handleTouchStart","e","handleTouchMove","progress","handleTouchEnd","ResizableModifier"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});var u=Object.defineProperty,f=(c,t,r)=>t in c?u(c,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):c[t]=r,d=(c,t,r)=>f(c,typeof t!="symbol"?t+"":t,r);class n{static sanitize(t,r={}){if(!t||typeof t!="string")return"";let e=t;for(const i of this.DANGEROUS_PATTERNS)e=e.replace(i,"");if(r.validateDOM!==!1&&(e=this.validateDOMStructure(e,r)),r.customPatterns)for(const i of r.customPatterns)e=e.replace(i,"");return e.trim()}static validateDOMStructure(t,r){try{const a=new DOMParser().parseFromString(`<div>${t}</div>`,"text/html").body.firstChild;return a?(this.cleanElement(a,r),a.innerHTML):""}catch(e){return console.warn("BasicSanitizer: DOM validation failed, using pattern-based sanitization only",e),t}}static cleanElement(t,r){const e=t.tagName.toLowerCase();if(!(r.allowedTags||this.ALLOWED_TAGS).includes(e)){const s=t.textContent||"";if(s.trim()&&t.parentNode){const o=t.ownerDocument.createTextNode(s);t.parentNode.insertBefore(o,t)}t.remove();return}const a=this.getAllowedAttributesForTag(e,r),l=[];for(let s=0;s<t.attributes.length;s++){const o=t.attributes[s];a.includes(o.name)&&this.isAttributeValueSafe(o.name,o.value)||l.push(o.name)}l.forEach(s=>t.removeAttribute(s)),Array.from(t.children).forEach(s=>this.cleanElement(s,r))}static getAllowedAttributesForTag(t,r){const e=r.allowedAttributes||this.ALLOWED_ATTRIBUTES,i=e["*"]||[],a=e[t]||[];return[...i,...a]}static isAttributeValueSafe(t,r){return["href","src","action"].includes(t)?this.isUrlSafe(r):!/javascript:/i.test(r)}static isUrlSafe(t){if(!t||t.startsWith("/")||t.startsWith("./")||t.startsWith("#"))return!0;try{const r=new URL(t);return["http:","https:","mailto:","tel:","ftp:"].includes(r.protocol)}catch{return!1}}}d(n,"DANGEROUS_PATTERNS",[/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,/<[^>]*<script[^>]*>/gi,/script>/gi,/\s*on\w+\s*=\s*(?:"[^"]*"|'[^']*'|[^\s>]*)/gi,/(?:href|src)\s*=\s*["']?javascript:[^"'\s>]*/gi,/(?:href|src)\s*=\s*["']?data:[^"'\s>]*(?:script|javascript)[^"'\s>]*/gi,/<(?:iframe|object|embed|form|input|meta|link)\b[^>]*>/gi,/<style\b[^<]*(?:(?!<\/style>)<[^<]*)*<\/style>/gi,/@import\s+[^;]+;?/gi,/expression\s*\([^)]*\)/gi,/alert\s*\([^)]*\)/gi,/javascript:/gi,/vbscript:/gi]);d(n,"ALLOWED_TAGS",["p","br","strong","em","u","i","b","s","sup","sub","h1","h2","h3","h4","h5","h6","ul","ol","li","dl","dt","dd","blockquote","pre","code","kbd","samp","a","img","table","thead","tbody","tr","td","th","div","span","section","article","aside","header","footer","hr"]);d(n,"ALLOWED_ATTRIBUTES",{"*":["class","id","title","lang","dir"],a:["href","target","rel"],img:["src","alt","width","height"],table:["cellpadding","cellspacing","border"],td:["colspan","rowspan"],th:["colspan","rowspan","scope"]});exports.BasicSanitizer=n;
2
- //# sourceMappingURL=basic-sanitizer.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"basic-sanitizer.cjs","sources":["../../src/modifiers/basic-sanitizer.ts"],"sourcesContent":["/**\n * Lightweight HTML sanitizer that removes common XSS vectors\n * This is NOT a comprehensive solution - use DOMPurify for full protection\n * \n * Provides basic sanitization by:\n * - Removing dangerous patterns (script tags, event handlers, etc.)\n * - Validating DOM structure and attributes\n * - Allowing only safe elements and attributes\n */\n\nexport class BasicSanitizer {\n private static readonly DANGEROUS_PATTERNS = [\n // Script tags (including nested/malformed ones)\n /<script\\b[^<]*(?:(?!<\\/script>)<[^<]*)*<\\/script>/gi,\n /<[^>]*<script[^>]*>/gi, // Nested script tags\n /script>/gi, // Catch any remaining script closings\n \n // Event handlers (onclick, onload, etc.)\n /\\s*on\\w+\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s>]*)/gi,\n \n // JavaScript URLs\n /(?:href|src)\\s*=\\s*[\"']?javascript:[^\"'\\s>]*/gi,\n \n // Data URLs with scripts (basic detection)\n /(?:href|src)\\s*=\\s*[\"']?data:[^\"'\\s>]*(?:script|javascript)[^\"'\\s>]*/gi,\n \n // Dangerous elements\n /<(?:iframe|object|embed|form|input|meta|link)\\b[^>]*>/gi,\n \n // Style tags with JavaScript\n /<style\\b[^<]*(?:(?!<\\/style>)<[^<]*)*<\\/style>/gi,\n \n // Import statements in CSS\n /@import\\s+[^;]+;?/gi,\n \n // Expression() in CSS (IE specific, but good to block)\n /expression\\s*\\([^)]*\\)/gi,\n \n // Additional dangerous patterns\n /alert\\s*\\([^)]*\\)/gi, // Alert calls\n /javascript:/gi, // Any javascript: protocol\n /vbscript:/gi, // VBScript protocol\n ]\n\n private static readonly ALLOWED_TAGS = [\n 'p', 'br', 'strong', 'em', 'u', 'i', 'b', 's', 'sup', 'sub',\n 'h1', 'h2', 'h3', 'h4', 'h5', 'h6',\n 'ul', 'ol', 'li', 'dl', 'dt', 'dd',\n 'blockquote', 'pre', 'code', 'kbd', 'samp',\n 'a', 'img', 'table', 'thead', 'tbody', 'tr', 'td', 'th',\n 'div', 'span', 'section', 'article', 'aside', 'header', 'footer',\n 'hr'\n ]\n\n private static readonly ALLOWED_ATTRIBUTES = {\n '*': ['class', 'id', 'title', 'lang', 'dir'],\n 'a': ['href', 'target', 'rel'],\n 'img': ['src', 'alt', 'width', 'height'],\n 'table': ['cellpadding', 'cellspacing', 'border'],\n 'td': ['colspan', 'rowspan'],\n 'th': ['colspan', 'rowspan', 'scope']\n }\n\n /**\n * Apply basic sanitization to HTML content\n * Removes dangerous patterns and restricts to allowed elements/attributes\n */\n static sanitize(html: string, options: BasicSanitizerOptions = {}): string {\n if (!html || typeof html !== 'string') {\n return ''\n }\n\n let sanitized = html\n\n // 1. Remove dangerous patterns\n for (const pattern of this.DANGEROUS_PATTERNS) {\n sanitized = sanitized.replace(pattern, '')\n }\n\n // 2. Parse and validate DOM structure if requested\n if (options.validateDOM !== false) {\n sanitized = this.validateDOMStructure(sanitized, options)\n }\n\n // 3. Apply custom rules\n if (options.customPatterns) {\n for (const pattern of options.customPatterns) {\n sanitized = sanitized.replace(pattern, '')\n }\n }\n\n return sanitized.trim()\n }\n\n /**\n * Validate DOM structure and attributes using DOMParser\n */\n private static validateDOMStructure(html: string, options: BasicSanitizerOptions): string {\n try {\n const parser = new DOMParser()\n const doc = parser.parseFromString(`<div>${html}</div>`, 'text/html')\n const container = doc.body.firstChild as Element\n\n if (!container) return ''\n\n // Remove disallowed elements and attributes\n this.cleanElement(container, options)\n\n return container.innerHTML\n } catch (error) {\n // Fallback to pattern-based sanitization only\n console.warn('BasicSanitizer: DOM validation failed, using pattern-based sanitization only', error)\n return html\n }\n }\n\n /**\n * Recursively clean element and its children\n */\n private static cleanElement(element: Element, options: BasicSanitizerOptions): void {\n const tagName = element.tagName.toLowerCase()\n const allowedTags = options.allowedTags || this.ALLOWED_TAGS\n\n // Remove element if tag not allowed, but preserve text content\n if (!allowedTags.includes(tagName)) {\n // Move text content to parent before removing element\n const textContent = element.textContent || ''\n if (textContent.trim() && element.parentNode) {\n const textNode = element.ownerDocument.createTextNode(textContent)\n element.parentNode.insertBefore(textNode, element)\n }\n element.remove()\n return\n }\n\n // Clean attributes\n const allowedAttrs = this.getAllowedAttributesForTag(tagName, options)\n const attributesToRemove: string[] = []\n\n for (let i = 0; i < element.attributes.length; i++) {\n const attr = element.attributes[i]\n if (!allowedAttrs.includes(attr.name)) {\n attributesToRemove.push(attr.name)\n } else {\n // Validate attribute values\n if (!this.isAttributeValueSafe(attr.name, attr.value)) {\n attributesToRemove.push(attr.name)\n }\n }\n }\n\n attributesToRemove.forEach(attrName => element.removeAttribute(attrName))\n\n // Recursively clean children\n const children = Array.from(element.children)\n children.forEach(child => this.cleanElement(child, options))\n }\n\n /**\n * Get allowed attributes for a specific tag\n */\n private static getAllowedAttributesForTag(tagName: string, options: BasicSanitizerOptions): string[] {\n const allowedAttrs = options.allowedAttributes || this.ALLOWED_ATTRIBUTES\n const globalAttrs = (allowedAttrs as Record<string, string[]>)['*'] || []\n const tagSpecificAttrs = (allowedAttrs as Record<string, string[]>)[tagName] || []\n \n return [...globalAttrs, ...tagSpecificAttrs]\n }\n\n /**\n * Check if attribute value is safe\n */\n private static isAttributeValueSafe(attrName: string, attrValue: string): boolean {\n // Check for dangerous URLs\n if (['href', 'src', 'action'].includes(attrName)) {\n return this.isUrlSafe(attrValue)\n }\n\n // Check for JavaScript in any attribute\n if (/javascript:/i.test(attrValue)) {\n return false\n }\n\n return true\n }\n\n /**\n * Validate URL safety\n */\n private static isUrlSafe(url: string): boolean {\n if (!url) return true\n\n // Allow relative URLs\n if (url.startsWith('/') || url.startsWith('./') || url.startsWith('#')) {\n return true\n }\n\n try {\n const parsed = new URL(url)\n \n // Allow only safe protocols\n const safeProtocols = ['http:', 'https:', 'mailto:', 'tel:', 'ftp:']\n return safeProtocols.includes(parsed.protocol)\n } catch {\n // Invalid URL, block it\n return false\n }\n }\n}\n\nexport interface BasicSanitizerOptions {\n /** Custom dangerous patterns to remove */\n customPatterns?: RegExp[]\n /** Override allowed tags */\n allowedTags?: string[]\n /** Override allowed attributes */\n allowedAttributes?: Record<string, string[]>\n /** Whether to validate DOM structure (default: true) */\n validateDOM?: boolean\n}\n\n/**\n * Convenience function for basic HTML sanitization\n */\nexport function basicSanitize(html: string, options?: BasicSanitizerOptions): string {\n return BasicSanitizer.sanitize(html, options)\n}"],"names":["BasicSanitizer","html","options","sanitized","pattern","container","error","element","tagName","textContent","textNode","allowedAttrs","attributesToRemove","i","attr","attrName","child","globalAttrs","tagSpecificAttrs","attrValue","url","parsed","__publicField"],"mappings":"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"}
@@ -1,162 +0,0 @@
1
- var u = Object.defineProperty, f = (c, t, r) => t in c ? u(c, t, { enumerable: !0, configurable: !0, writable: !0, value: r }) : c[t] = r, l = (c, t, r) => f(c, typeof t != "symbol" ? t + "" : t, r);
2
- class d {
3
- /**
4
- * Apply basic sanitization to HTML content
5
- * Removes dangerous patterns and restricts to allowed elements/attributes
6
- */
7
- static sanitize(t, r = {}) {
8
- if (!t || typeof t != "string")
9
- return "";
10
- let e = t;
11
- for (const i of this.DANGEROUS_PATTERNS)
12
- e = e.replace(i, "");
13
- if (r.validateDOM !== !1 && (e = this.validateDOMStructure(e, r)), r.customPatterns)
14
- for (const i of r.customPatterns)
15
- e = e.replace(i, "");
16
- return e.trim();
17
- }
18
- /**
19
- * Validate DOM structure and attributes using DOMParser
20
- */
21
- static validateDOMStructure(t, r) {
22
- try {
23
- const a = new DOMParser().parseFromString(`<div>${t}</div>`, "text/html").body.firstChild;
24
- return a ? (this.cleanElement(a, r), a.innerHTML) : "";
25
- } catch (e) {
26
- return console.warn("BasicSanitizer: DOM validation failed, using pattern-based sanitization only", e), t;
27
- }
28
- }
29
- /**
30
- * Recursively clean element and its children
31
- */
32
- static cleanElement(t, r) {
33
- const e = t.tagName.toLowerCase();
34
- if (!(r.allowedTags || this.ALLOWED_TAGS).includes(e)) {
35
- const s = t.textContent || "";
36
- if (s.trim() && t.parentNode) {
37
- const o = t.ownerDocument.createTextNode(s);
38
- t.parentNode.insertBefore(o, t);
39
- }
40
- t.remove();
41
- return;
42
- }
43
- const a = this.getAllowedAttributesForTag(e, r), n = [];
44
- for (let s = 0; s < t.attributes.length; s++) {
45
- const o = t.attributes[s];
46
- a.includes(o.name) && this.isAttributeValueSafe(o.name, o.value) || n.push(o.name);
47
- }
48
- n.forEach((s) => t.removeAttribute(s)), Array.from(t.children).forEach((s) => this.cleanElement(s, r));
49
- }
50
- /**
51
- * Get allowed attributes for a specific tag
52
- */
53
- static getAllowedAttributesForTag(t, r) {
54
- const e = r.allowedAttributes || this.ALLOWED_ATTRIBUTES, i = e["*"] || [], a = e[t] || [];
55
- return [...i, ...a];
56
- }
57
- /**
58
- * Check if attribute value is safe
59
- */
60
- static isAttributeValueSafe(t, r) {
61
- return ["href", "src", "action"].includes(t) ? this.isUrlSafe(r) : !/javascript:/i.test(r);
62
- }
63
- /**
64
- * Validate URL safety
65
- */
66
- static isUrlSafe(t) {
67
- if (!t || t.startsWith("/") || t.startsWith("./") || t.startsWith("#"))
68
- return !0;
69
- try {
70
- const r = new URL(t);
71
- return ["http:", "https:", "mailto:", "tel:", "ftp:"].includes(r.protocol);
72
- } catch {
73
- return !1;
74
- }
75
- }
76
- }
77
- l(d, "DANGEROUS_PATTERNS", [
78
- // Script tags (including nested/malformed ones)
79
- /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
80
- /<[^>]*<script[^>]*>/gi,
81
- // Nested script tags
82
- /script>/gi,
83
- // Catch any remaining script closings
84
- // Event handlers (onclick, onload, etc.)
85
- /\s*on\w+\s*=\s*(?:"[^"]*"|'[^']*'|[^\s>]*)/gi,
86
- // JavaScript URLs
87
- /(?:href|src)\s*=\s*["']?javascript:[^"'\s>]*/gi,
88
- // Data URLs with scripts (basic detection)
89
- /(?:href|src)\s*=\s*["']?data:[^"'\s>]*(?:script|javascript)[^"'\s>]*/gi,
90
- // Dangerous elements
91
- /<(?:iframe|object|embed|form|input|meta|link)\b[^>]*>/gi,
92
- // Style tags with JavaScript
93
- /<style\b[^<]*(?:(?!<\/style>)<[^<]*)*<\/style>/gi,
94
- // Import statements in CSS
95
- /@import\s+[^;]+;?/gi,
96
- // Expression() in CSS (IE specific, but good to block)
97
- /expression\s*\([^)]*\)/gi,
98
- // Additional dangerous patterns
99
- /alert\s*\([^)]*\)/gi,
100
- // Alert calls
101
- /javascript:/gi,
102
- // Any javascript: protocol
103
- /vbscript:/gi
104
- // VBScript protocol
105
- ]);
106
- l(d, "ALLOWED_TAGS", [
107
- "p",
108
- "br",
109
- "strong",
110
- "em",
111
- "u",
112
- "i",
113
- "b",
114
- "s",
115
- "sup",
116
- "sub",
117
- "h1",
118
- "h2",
119
- "h3",
120
- "h4",
121
- "h5",
122
- "h6",
123
- "ul",
124
- "ol",
125
- "li",
126
- "dl",
127
- "dt",
128
- "dd",
129
- "blockquote",
130
- "pre",
131
- "code",
132
- "kbd",
133
- "samp",
134
- "a",
135
- "img",
136
- "table",
137
- "thead",
138
- "tbody",
139
- "tr",
140
- "td",
141
- "th",
142
- "div",
143
- "span",
144
- "section",
145
- "article",
146
- "aside",
147
- "header",
148
- "footer",
149
- "hr"
150
- ]);
151
- l(d, "ALLOWED_ATTRIBUTES", {
152
- "*": ["class", "id", "title", "lang", "dir"],
153
- a: ["href", "target", "rel"],
154
- img: ["src", "alt", "width", "height"],
155
- table: ["cellpadding", "cellspacing", "border"],
156
- td: ["colspan", "rowspan"],
157
- th: ["colspan", "rowspan", "scope"]
158
- });
159
- export {
160
- d as BasicSanitizer
161
- };
162
- //# sourceMappingURL=basic-sanitizer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"basic-sanitizer.js","sources":["../../src/modifiers/basic-sanitizer.ts"],"sourcesContent":["/**\n * Lightweight HTML sanitizer that removes common XSS vectors\n * This is NOT a comprehensive solution - use DOMPurify for full protection\n * \n * Provides basic sanitization by:\n * - Removing dangerous patterns (script tags, event handlers, etc.)\n * - Validating DOM structure and attributes\n * - Allowing only safe elements and attributes\n */\n\nexport class BasicSanitizer {\n private static readonly DANGEROUS_PATTERNS = [\n // Script tags (including nested/malformed ones)\n /<script\\b[^<]*(?:(?!<\\/script>)<[^<]*)*<\\/script>/gi,\n /<[^>]*<script[^>]*>/gi, // Nested script tags\n /script>/gi, // Catch any remaining script closings\n \n // Event handlers (onclick, onload, etc.)\n /\\s*on\\w+\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s>]*)/gi,\n \n // JavaScript URLs\n /(?:href|src)\\s*=\\s*[\"']?javascript:[^\"'\\s>]*/gi,\n \n // Data URLs with scripts (basic detection)\n /(?:href|src)\\s*=\\s*[\"']?data:[^\"'\\s>]*(?:script|javascript)[^\"'\\s>]*/gi,\n \n // Dangerous elements\n /<(?:iframe|object|embed|form|input|meta|link)\\b[^>]*>/gi,\n \n // Style tags with JavaScript\n /<style\\b[^<]*(?:(?!<\\/style>)<[^<]*)*<\\/style>/gi,\n \n // Import statements in CSS\n /@import\\s+[^;]+;?/gi,\n \n // Expression() in CSS (IE specific, but good to block)\n /expression\\s*\\([^)]*\\)/gi,\n \n // Additional dangerous patterns\n /alert\\s*\\([^)]*\\)/gi, // Alert calls\n /javascript:/gi, // Any javascript: protocol\n /vbscript:/gi, // VBScript protocol\n ]\n\n private static readonly ALLOWED_TAGS = [\n 'p', 'br', 'strong', 'em', 'u', 'i', 'b', 's', 'sup', 'sub',\n 'h1', 'h2', 'h3', 'h4', 'h5', 'h6',\n 'ul', 'ol', 'li', 'dl', 'dt', 'dd',\n 'blockquote', 'pre', 'code', 'kbd', 'samp',\n 'a', 'img', 'table', 'thead', 'tbody', 'tr', 'td', 'th',\n 'div', 'span', 'section', 'article', 'aside', 'header', 'footer',\n 'hr'\n ]\n\n private static readonly ALLOWED_ATTRIBUTES = {\n '*': ['class', 'id', 'title', 'lang', 'dir'],\n 'a': ['href', 'target', 'rel'],\n 'img': ['src', 'alt', 'width', 'height'],\n 'table': ['cellpadding', 'cellspacing', 'border'],\n 'td': ['colspan', 'rowspan'],\n 'th': ['colspan', 'rowspan', 'scope']\n }\n\n /**\n * Apply basic sanitization to HTML content\n * Removes dangerous patterns and restricts to allowed elements/attributes\n */\n static sanitize(html: string, options: BasicSanitizerOptions = {}): string {\n if (!html || typeof html !== 'string') {\n return ''\n }\n\n let sanitized = html\n\n // 1. Remove dangerous patterns\n for (const pattern of this.DANGEROUS_PATTERNS) {\n sanitized = sanitized.replace(pattern, '')\n }\n\n // 2. Parse and validate DOM structure if requested\n if (options.validateDOM !== false) {\n sanitized = this.validateDOMStructure(sanitized, options)\n }\n\n // 3. Apply custom rules\n if (options.customPatterns) {\n for (const pattern of options.customPatterns) {\n sanitized = sanitized.replace(pattern, '')\n }\n }\n\n return sanitized.trim()\n }\n\n /**\n * Validate DOM structure and attributes using DOMParser\n */\n private static validateDOMStructure(html: string, options: BasicSanitizerOptions): string {\n try {\n const parser = new DOMParser()\n const doc = parser.parseFromString(`<div>${html}</div>`, 'text/html')\n const container = doc.body.firstChild as Element\n\n if (!container) return ''\n\n // Remove disallowed elements and attributes\n this.cleanElement(container, options)\n\n return container.innerHTML\n } catch (error) {\n // Fallback to pattern-based sanitization only\n console.warn('BasicSanitizer: DOM validation failed, using pattern-based sanitization only', error)\n return html\n }\n }\n\n /**\n * Recursively clean element and its children\n */\n private static cleanElement(element: Element, options: BasicSanitizerOptions): void {\n const tagName = element.tagName.toLowerCase()\n const allowedTags = options.allowedTags || this.ALLOWED_TAGS\n\n // Remove element if tag not allowed, but preserve text content\n if (!allowedTags.includes(tagName)) {\n // Move text content to parent before removing element\n const textContent = element.textContent || ''\n if (textContent.trim() && element.parentNode) {\n const textNode = element.ownerDocument.createTextNode(textContent)\n element.parentNode.insertBefore(textNode, element)\n }\n element.remove()\n return\n }\n\n // Clean attributes\n const allowedAttrs = this.getAllowedAttributesForTag(tagName, options)\n const attributesToRemove: string[] = []\n\n for (let i = 0; i < element.attributes.length; i++) {\n const attr = element.attributes[i]\n if (!allowedAttrs.includes(attr.name)) {\n attributesToRemove.push(attr.name)\n } else {\n // Validate attribute values\n if (!this.isAttributeValueSafe(attr.name, attr.value)) {\n attributesToRemove.push(attr.name)\n }\n }\n }\n\n attributesToRemove.forEach(attrName => element.removeAttribute(attrName))\n\n // Recursively clean children\n const children = Array.from(element.children)\n children.forEach(child => this.cleanElement(child, options))\n }\n\n /**\n * Get allowed attributes for a specific tag\n */\n private static getAllowedAttributesForTag(tagName: string, options: BasicSanitizerOptions): string[] {\n const allowedAttrs = options.allowedAttributes || this.ALLOWED_ATTRIBUTES\n const globalAttrs = (allowedAttrs as Record<string, string[]>)['*'] || []\n const tagSpecificAttrs = (allowedAttrs as Record<string, string[]>)[tagName] || []\n \n return [...globalAttrs, ...tagSpecificAttrs]\n }\n\n /**\n * Check if attribute value is safe\n */\n private static isAttributeValueSafe(attrName: string, attrValue: string): boolean {\n // Check for dangerous URLs\n if (['href', 'src', 'action'].includes(attrName)) {\n return this.isUrlSafe(attrValue)\n }\n\n // Check for JavaScript in any attribute\n if (/javascript:/i.test(attrValue)) {\n return false\n }\n\n return true\n }\n\n /**\n * Validate URL safety\n */\n private static isUrlSafe(url: string): boolean {\n if (!url) return true\n\n // Allow relative URLs\n if (url.startsWith('/') || url.startsWith('./') || url.startsWith('#')) {\n return true\n }\n\n try {\n const parsed = new URL(url)\n \n // Allow only safe protocols\n const safeProtocols = ['http:', 'https:', 'mailto:', 'tel:', 'ftp:']\n return safeProtocols.includes(parsed.protocol)\n } catch {\n // Invalid URL, block it\n return false\n }\n }\n}\n\nexport interface BasicSanitizerOptions {\n /** Custom dangerous patterns to remove */\n customPatterns?: RegExp[]\n /** Override allowed tags */\n allowedTags?: string[]\n /** Override allowed attributes */\n allowedAttributes?: Record<string, string[]>\n /** Whether to validate DOM structure (default: true) */\n validateDOM?: boolean\n}\n\n/**\n * Convenience function for basic HTML sanitization\n */\nexport function basicSanitize(html: string, options?: BasicSanitizerOptions): string {\n return BasicSanitizer.sanitize(html, options)\n}"],"names":["BasicSanitizer","html","options","sanitized","pattern","container","error","element","tagName","textContent","textNode","allowedAttrs","attributesToRemove","i","attr","attrName","child","globalAttrs","tagSpecificAttrs","attrValue","url","parsed","__publicField"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("../reactive/computed.cjs"),s=require("./base.cjs");var m=Object.defineProperty,y=(r,t,e)=>t in r?m(r,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):r[t]=e,u=(r,t,e)=>y(r,typeof t!="symbol"?t+"":t,e);class l extends s.BaseModifier{constructor(t){const e={};for(const[o,i]of Object.entries(t))typeof i=="function"&&"peek"in i?e[o]=i.peek():e[o]=i;super(e),u(this,"type","border"),u(this,"priority",40)}apply(t,e){if(!e.element)return;const o=this.computeBorderStyles(this.properties);this.applyStyles(e.element,o)}computeBorderStyles(t){const e={},o=d=>typeof d=="function"?a.createComputed(()=>`${d()}px`):typeof d=="number"?`${d}px`:d,i=d=>typeof d=="function"?a.createComputed(()=>{const c=d();return this.resolveColorValue(c)}):this.resolveColorValue(d),n=this.resolveBorderSides(t);if(!(n.top||n.right||n.bottom||n.left||t.all)&&(t.width!==void 0||t.color!==void 0||t.style!==void 0)&&(t.width!==void 0&&(e.borderWidth=o(t.width)),t.color!==void 0&&(e.borderColor=i(t.color)),t.style!==void 0&&(e.borderStyle=t.style)),t.all!==void 0&&(t.all.width!==void 0&&(e.borderWidth=o(t.all.width)),t.all.color!==void 0&&(e.borderColor=i(t.all.color)),t.all.style!==void 0&&(e.borderStyle=t.all.style)),n.top!==void 0&&this.applySideBorder(e,n.top,"Top",o,i),n.right!==void 0&&this.applySideBorder(e,n.right,"Right",o,i),n.bottom!==void 0&&this.applySideBorder(e,n.bottom,"Bottom",o,i),n.left!==void 0&&this.applySideBorder(e,n.left,"Left",o,i),t.image!==void 0&&(typeof t.image=="function"?e.borderImage=a.createComputed(()=>t.image()):e.borderImage=t.image),t.radius!==void 0){const d=typeof t.radius=="function"?t.radius():t.radius;Object.assign(e,this.generateCornerRadiusStyles(d))}return e}resolveBorderSides(t){return{top:t.top||t.vertical,right:t.right||t.trailing||t.horizontal,bottom:t.bottom||t.vertical,left:t.left||t.leading||t.horizontal}}applySideBorder(t,e,o,i,n){e.width!==void 0&&(t[`border${o}Width`]=i(e.width)),e.color!==void 0&&(t[`border${o}Color`]=n(e.color)),e.style!==void 0&&(t[`border${o}Style`]=e.style)}resolveColorValue(t){return typeof t=="object"&&t!==null&&"resolve"in t?t.resolve():typeof t=="object"&&t!==null&&"value"in t?t.value:typeof t=="object"&&t!==null&&typeof t.toString=="function"?t.toString():String(t)}generateCornerRadiusStyles(t){const e={};if(typeof t=="number"||typeof t=="string")return e.borderRadius=typeof t=="number"?`${t}px`:t,e;const o={topLeft:t.topLeft??t.topLeading??t.top??t.left,topRight:t.topRight??t.topTrailing??t.top??t.right,bottomLeft:t.bottomLeft??t.bottomLeading??t.bottom??t.left,bottomRight:t.bottomRight??t.bottomTrailing??t.bottom??t.right};return Object.entries(o).forEach(([i,n])=>{if(n!==void 0){const f=this.cornerToCSSProperty(i);e[f]=typeof n=="number"?`${n}px`:n}}),e}cornerToCSSProperty(t){return{topLeft:"borderTopLeftRadius",topRight:"borderTopRightRadius",bottomLeft:"borderBottomLeftRadius",bottomRight:"borderBottomRightRadius"}[t]}}function h(r,t,e){return typeof r=="number"||typeof r=="string"||typeof r=="function"?new l({width:r,color:t||"currentColor",style:e||"solid"}):new l(r)}function g(r,t,e){return new l({top:{width:r,color:t,style:e}})}function p(r,t,e){return new l({right:{width:r,color:t,style:e}})}function R(r,t,e){return new l({bottom:{width:r,color:t,style:e}})}function v(r,t,e){return new l({left:{width:r,color:t,style:e}})}function S(r,t,e){return new l({leading:{width:r,color:t,style:e}})}function C(r,t,e){return new l({trailing:{width:r,color:t,style:e}})}function L(r,t,e){return new l({horizontal:{width:r,color:t,style:e}})}function B(r,t,e){return new l({vertical:{width:r,color:t,style:e}})}class b extends s.BaseModifier{constructor(t){const e={radius:0};for(const[o,i]of Object.entries(t))typeof i=="function"&&"peek"in i?e[o]=i.peek():e[o]=i;super(e),u(this,"type","cornerRadius"),u(this,"priority",35)}apply(t,e){if(!e.element)return;const o=this.computeCornerRadiusStyles(this.properties.radius);this.applyStyles(e.element,o)}computeCornerRadiusStyles(t){return typeof t=="number"||typeof t=="string"?{borderRadius:this.formatRadius(t)}:this.generateCornerRadiusCSS(t)}generateCornerRadiusCSS(t){const e=this.resolveCornerValues(t),o={};return Object.entries(e).forEach(([i,n])=>{if(n!==void 0){const f=this.cornerToCSSProperty(i);o[f]=this.formatRadius(n)}}),o}cornerToCSSProperty(t){return{topLeft:"borderTopLeftRadius",topRight:"borderTopRightRadius",bottomLeft:"borderBottomLeftRadius",bottomRight:"borderBottomRightRadius"}[t]}resolveCornerValues(t){return{topLeft:t.topLeft??t.topLeading??t.top??t.left,topRight:t.topRight??t.topTrailing??t.top??t.right,bottomLeft:t.bottomLeft??t.bottomLeading??t.bottom??t.left,bottomRight:t.bottomRight??t.bottomTrailing??t.bottom??t.right}}formatRadius(t){return typeof t=="number"?`${t}px`:t}}function T(r){return new b({radius:r})}exports.BorderModifier=l;exports.CornerRadiusModifier=b;exports.border=h;exports.borderBottom=R;exports.borderHorizontal=L;exports.borderLeading=S;exports.borderLeft=v;exports.borderRight=p;exports.borderTop=g;exports.borderTrailing=C;exports.borderVertical=B;exports.cornerRadius=T;
2
- //# sourceMappingURL=border.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"border.cjs","sources":["../../src/modifiers/border.ts"],"sourcesContent":["/**\n * Border Modifier - comprehensive border styling\n *\n * Provides a unified interface for border properties\n * with support for directional borders and shorthand.\n */\n\nimport { createComputed } from '../reactive/computed'\nimport type { Signal } from '../reactive/types'\nimport type { DOMNode } from '../runtime/types'\nimport { BaseModifier } from './base'\nimport type { ModifierContext, ReactiveModifierProps, ColorValue } from './types'\n// Corner radius types (extracted from enhanced.ts)\nexport type CornerRadiusValue = number | string\n\nexport interface CornerRadiusConfig {\n // Individual corners (CSS terminology)\n topLeft?: CornerRadiusValue\n topRight?: CornerRadiusValue\n bottomLeft?: CornerRadiusValue\n bottomRight?: CornerRadiusValue\n \n // SwiftUI terminology (aliases)\n topLeading?: CornerRadiusValue\n topTrailing?: CornerRadiusValue\n bottomLeading?: CornerRadiusValue\n bottomTrailing?: CornerRadiusValue\n \n // Shorthand properties\n top?: CornerRadiusValue // topLeft and topRight\n bottom?: CornerRadiusValue // bottomLeft and bottomRight\n left?: CornerRadiusValue // topLeft and bottomLeft\n right?: CornerRadiusValue // topRight and bottomRight\n}\n\nexport interface BorderSide {\n width?: number | string | Signal<number>\n color?: ColorValue\n style?: BorderStyle\n}\n\nexport interface BorderOptions {\n // Individual sides (CSS terminology)\n top?: BorderSide\n right?: BorderSide\n bottom?: BorderSide\n left?: BorderSide\n all?: BorderSide\n \n // SwiftUI terminology (aliases)\n leading?: BorderSide\n trailing?: BorderSide\n \n // Shorthand properties\n horizontal?: BorderSide // left and right\n vertical?: BorderSide // top and bottom\n\n // Convenience properties (applied to all sides if no specific sides are set)\n width?: number | string | Signal<number>\n color?: ColorValue\n style?: BorderStyle\n \n // Advanced features\n image?: string | Signal<string> // CSS border-image\n radius?: CornerRadiusConfig | Signal<CornerRadiusConfig> // Integrated corner radius\n}\n\nexport type BorderStyle =\n | 'none'\n | 'solid'\n | 'dashed'\n | 'dotted'\n | 'double'\n | 'groove'\n | 'ridge'\n | 'inset'\n | 'outset'\n\nexport type ReactiveBorderOptions = ReactiveModifierProps<BorderOptions>\n\n\nexport class BorderModifier extends BaseModifier<BorderOptions> {\n readonly type = 'border'\n readonly priority = 40 // Priority 40 for borders\n\n constructor(options: ReactiveBorderOptions) {\n // Convert reactive options to regular options for immediate use\n const resolvedOptions: BorderOptions = {}\n for (const [key, value] of Object.entries(options)) {\n if (typeof value === 'function' && 'peek' in value) {\n ;(resolvedOptions as any)[key] = (value as any).peek()\n } else {\n ;(resolvedOptions as any)[key] = value\n }\n }\n super(resolvedOptions)\n }\n\n apply(_node: DOMNode, context: ModifierContext): DOMNode | undefined {\n if (!context.element) return\n\n const styles = this.computeBorderStyles(this.properties)\n this.applyStyles(context.element, styles)\n \n return undefined\n }\n\n private computeBorderStyles(props: BorderOptions) {\n const styles: Record<string, any> = {}\n\n // Helper to format border width\n const formatBorderWidth = (width: number | string | Signal<number>) => {\n if (typeof width === 'function') {\n // For Signal values, create a computed that returns the px value\n return createComputed(() => `${width()}px`)\n }\n if (typeof width === 'number') {\n return `${width}px`\n }\n return width\n }\n\n // Helper to resolve color value (including Assets)\n const resolveColor = (color: ColorValue) => {\n if (typeof color === 'function') {\n // Handle Signal\n return createComputed(() => {\n const value = color()\n return this.resolveColorValue(value)\n })\n }\n return this.resolveColorValue(color)\n }\n\n // Resolve shorthand and SwiftUI terminology\n const resolvedSides = this.resolveBorderSides(props)\n\n // Apply convenience properties to all sides (if no specific sides are defined)\n const hasSpecificSides = resolvedSides.top || resolvedSides.right || resolvedSides.bottom || resolvedSides.left || props.all\n if (\n !hasSpecificSides &&\n (props.width !== undefined || props.color !== undefined || props.style !== undefined)\n ) {\n if (props.width !== undefined) styles.borderWidth = formatBorderWidth(props.width)\n if (props.color !== undefined) styles.borderColor = resolveColor(props.color)\n if (props.style !== undefined) styles.borderStyle = props.style\n }\n\n // Apply 'all' border (overrides convenience properties)\n if (props.all !== undefined) {\n if (props.all.width !== undefined) styles.borderWidth = formatBorderWidth(props.all.width)\n if (props.all.color !== undefined) styles.borderColor = resolveColor(props.all.color)\n if (props.all.style !== undefined) styles.borderStyle = props.all.style\n }\n\n // Apply specific sides (highest priority)\n if (resolvedSides.top !== undefined) {\n this.applySideBorder(styles, resolvedSides.top, 'Top', formatBorderWidth, resolveColor)\n }\n if (resolvedSides.right !== undefined) {\n this.applySideBorder(styles, resolvedSides.right, 'Right', formatBorderWidth, resolveColor)\n }\n if (resolvedSides.bottom !== undefined) {\n this.applySideBorder(styles, resolvedSides.bottom, 'Bottom', formatBorderWidth, resolveColor)\n }\n if (resolvedSides.left !== undefined) {\n this.applySideBorder(styles, resolvedSides.left, 'Left', formatBorderWidth, resolveColor)\n }\n\n // Advanced features\n if (props.image !== undefined) {\n if (typeof props.image === 'function') {\n styles.borderImage = createComputed(() => (props.image as Signal<string>)())\n } else {\n styles.borderImage = props.image\n }\n }\n\n // Integrated corner radius\n if (props.radius !== undefined) {\n const radiusValue = typeof props.radius === 'function' ? (props.radius as Signal<CornerRadiusConfig>)() : props.radius\n Object.assign(styles, this.generateCornerRadiusStyles(radiusValue))\n }\n\n return styles\n }\n\n private resolveBorderSides(props: BorderOptions) {\n return {\n top: props.top || props.vertical,\n right: props.right || props.trailing || props.horizontal,\n bottom: props.bottom || props.vertical,\n left: props.left || props.leading || props.horizontal\n }\n }\n\n private applySideBorder(\n styles: Record<string, any>,\n side: BorderSide,\n sideName: string,\n formatBorderWidth: (width: number | string | Signal<number>) => any,\n resolveColor: (color: ColorValue) => any\n ) {\n if (side.width !== undefined) {\n styles[`border${sideName}Width`] = formatBorderWidth(side.width)\n }\n if (side.color !== undefined) {\n styles[`border${sideName}Color`] = resolveColor(side.color)\n }\n if (side.style !== undefined) {\n styles[`border${sideName}Style`] = side.style\n }\n }\n\n private resolveColorValue(color: string | any): string {\n // Handle Asset objects with resolve method\n if (typeof color === 'object' && color !== null && 'resolve' in color) {\n return (color as any).resolve()\n }\n // Handle Asset objects with value property\n if (typeof color === 'object' && color !== null && 'value' in color) {\n return (color as any).value\n }\n // Handle ColorAssetProxy objects with toString method\n if (typeof color === 'object' && color !== null && typeof color.toString === 'function') {\n return color.toString()\n }\n // Handle string colors\n return String(color)\n }\n\n private generateCornerRadiusStyles(radius: CornerRadiusConfig): Record<string, string> {\n const styles: Record<string, string> = {}\n \n if (typeof radius === 'number' || typeof radius === 'string') {\n styles.borderRadius = typeof radius === 'number' ? `${radius}px` : radius\n return styles\n }\n \n // Handle CornerRadiusConfig object\n const corners = {\n topLeft: radius.topLeft ?? radius.topLeading ?? radius.top ?? radius.left,\n topRight: radius.topRight ?? radius.topTrailing ?? radius.top ?? radius.right,\n bottomLeft: radius.bottomLeft ?? radius.bottomLeading ?? radius.bottom ?? radius.left,\n bottomRight: radius.bottomRight ?? radius.bottomTrailing ?? radius.bottom ?? radius.right\n }\n \n Object.entries(corners).forEach(([corner, value]) => {\n if (value !== undefined) {\n const cssProperty = this.cornerToCSSProperty(corner as keyof typeof corners)\n styles[cssProperty] = typeof value === 'number' ? `${value}px` : value\n }\n })\n \n return styles\n }\n\n private cornerToCSSProperty(corner: 'topLeft' | 'topRight' | 'bottomLeft' | 'bottomRight'): string {\n const map = {\n topLeft: 'borderTopLeftRadius',\n topRight: 'borderTopRightRadius',\n bottomLeft: 'borderBottomLeftRadius',\n bottomRight: 'borderBottomRightRadius'\n }\n return map[corner]\n }\n}\n\n/**\n * Create a border modifier with flexible options and advanced features\n *\n * @example\n * ```typescript\n * // Simple border - all sides\n * .border({ width: 1, color: '#e0e0e0' })\n * .border(1, '#e0e0e0', 'solid') // Shorthand\n *\n * // Specific sides\n * .border({\n * top: { width: 2, color: '#007AFF' },\n * bottom: { width: 1, color: '#ddd' }\n * })\n *\n * // SwiftUI terminology\n * .border({\n * leading: { width: 2, color: '#007AFF' },\n * trailing: { width: 1, color: '#ddd' }\n * })\n *\n * // Shorthand properties\n * .border({\n * horizontal: { width: 2, color: '#007AFF' },\n * vertical: { width: 1, color: '#ddd' }\n * })\n *\n * // Advanced features\n * .border({\n * width: 1,\n * color: '#007AFF',\n * image: 'url(border-pattern.png)',\n * radius: { topLeft: 8, topRight: 8 }\n * })\n *\n * // Reactive values with Signals\n * .border({\n * width: () => isActive() ? 2 : 1,\n * color: () => theme().borderColor,\n * style: 'dashed'\n * })\n * ```\n */\nexport function border(options: ReactiveBorderOptions): BorderModifier\nexport function border(\n width: number | string | Signal<number>,\n color?: ColorValue,\n style?: BorderStyle\n): BorderModifier\nexport function border(\n optionsOrWidth: ReactiveBorderOptions | number | string | Signal<number>,\n color?: ColorValue,\n style?: BorderStyle\n): BorderModifier {\n if (typeof optionsOrWidth === 'number' || typeof optionsOrWidth === 'string' || typeof optionsOrWidth === 'function') {\n return new BorderModifier({ \n width: optionsOrWidth, \n color: color || 'currentColor', \n style: style || 'solid'\n })\n }\n return new BorderModifier(optionsOrWidth)\n}\n\n/**\n * Convenience function for top border only with enhanced support\n *\n * @example\n * ```typescript\n * .borderTop(1, '#e0e0e0')\n * .borderTop('2px', signalColor(), 'dashed')\n * .borderTop(() => isActive() ? 2 : 1, '#007AFF')\n * ```\n */\nexport function borderTop(\n width: number | string | Signal<number>,\n color: ColorValue,\n style?: BorderStyle\n): BorderModifier {\n return new BorderModifier({ top: { width, color, style } })\n}\n\n/**\n * Convenience function for right border only with enhanced support\n *\n * @example\n * ```typescript\n * .borderRight(1, '#ddd')\n * .borderRight('1px', () => theme().borderColor, 'dotted')\n * ```\n */\nexport function borderRight(\n width: number | string | Signal<number>,\n color: ColorValue,\n style?: BorderStyle\n): BorderModifier {\n return new BorderModifier({ right: { width, color, style } })\n}\n\n/**\n * Convenience function for bottom border only with enhanced support\n *\n * @example\n * ```typescript\n * .borderBottom(2, '#007AFF')\n * .borderBottom('1px', '#e0e0e0', 'solid')\n * .borderBottom(() => isHovered() ? 3 : 1, Assets.accent)\n * ```\n */\nexport function borderBottom(\n width: number | string | Signal<number>,\n color: ColorValue,\n style?: BorderStyle\n): BorderModifier {\n return new BorderModifier({ bottom: { width, color, style } })\n}\n\n/**\n * Convenience function for left border only with enhanced support\n *\n * @example\n * ```typescript\n * .borderLeft(3, '#34C759')\n * .borderLeft('2px', () => statusColor(), 'dashed')\n * ```\n */\nexport function borderLeft(\n width: number | string | Signal<number>,\n color: ColorValue,\n style?: BorderStyle\n): BorderModifier {\n return new BorderModifier({ left: { width, color, style } })\n}\n\n/**\n * SwiftUI-style leading border (LTR-aware)\n *\n * @example\n * ```typescript\n * .borderLeading(2, '#007AFF', 'solid')\n * ```\n */\nexport function borderLeading(\n width: number | string | Signal<number>,\n color: ColorValue,\n style?: BorderStyle\n): BorderModifier {\n return new BorderModifier({ leading: { width, color, style } })\n}\n\n/**\n * SwiftUI-style trailing border (LTR-aware)\n *\n * @example\n * ```typescript\n * .borderTrailing(1, '#ddd', 'dotted')\n * ```\n */\nexport function borderTrailing(\n width: number | string | Signal<number>,\n color: ColorValue,\n style?: BorderStyle\n): BorderModifier {\n return new BorderModifier({ trailing: { width, color, style } })\n}\n\n/**\n * Horizontal borders (left + right)\n *\n * @example\n * ```typescript\n * .borderHorizontal(1, '#e0e0e0')\n * ```\n */\nexport function borderHorizontal(\n width: number | string | Signal<number>,\n color: ColorValue,\n style?: BorderStyle\n): BorderModifier {\n return new BorderModifier({ horizontal: { width, color, style } })\n}\n\n/**\n * Vertical borders (top + bottom)\n *\n * @example\n * ```typescript\n * .borderVertical(2, '#007AFF', 'dashed')\n * ```\n */\nexport function borderVertical(\n width: number | string | Signal<number>,\n color: ColorValue,\n style?: BorderStyle\n): BorderModifier {\n return new BorderModifier({ vertical: { width, color, style } })\n}\n\n// ============================================================================\n// Corner Radius Functions (Moved from enhanced.ts)\n// ============================================================================\n\nexport interface CornerRadiusOptions {\n radius: number | string | CornerRadiusConfig\n}\n\nexport type ReactiveCornerRadiusOptions = ReactiveModifierProps<CornerRadiusOptions>\n\nexport class CornerRadiusModifier extends BaseModifier<CornerRadiusOptions> {\n readonly type = 'cornerRadius'\n readonly priority = 35\n\n constructor(options: ReactiveCornerRadiusOptions) {\n const resolvedOptions: CornerRadiusOptions = { radius: 0 }\n for (const [key, value] of Object.entries(options)) {\n if (typeof value === 'function' && 'peek' in value) {\n ;(resolvedOptions as any)[key] = (value as any).peek()\n } else {\n ;(resolvedOptions as any)[key] = value\n }\n }\n super(resolvedOptions)\n }\n\n apply(_node: DOMNode, context: ModifierContext): DOMNode | undefined {\n if (!context.element) return\n\n const styles = this.computeCornerRadiusStyles(this.properties.radius)\n this.applyStyles(context.element, styles)\n \n return undefined\n }\n\n private computeCornerRadiusStyles(radius: number | string | CornerRadiusConfig) {\n if (typeof radius === 'number' || typeof radius === 'string') {\n // Existing API - single value for all corners\n return { borderRadius: this.formatRadius(radius) }\n }\n \n // New object-based API\n return this.generateCornerRadiusCSS(radius)\n }\n\n private generateCornerRadiusCSS(config: CornerRadiusConfig): Record<string, string> {\n const corners = this.resolveCornerValues(config)\n const styles: Record<string, string> = {}\n \n // Only apply styles for corners that have actual values\n Object.entries(corners).forEach(([corner, value]) => {\n if (value !== undefined) {\n const cssProperty = this.cornerToCSSProperty(corner as keyof typeof corners)\n styles[cssProperty] = this.formatRadius(value)\n }\n })\n \n return styles\n }\n\n private cornerToCSSProperty(corner: 'topLeft' | 'topRight' | 'bottomLeft' | 'bottomRight'): string {\n const map = {\n topLeft: 'borderTopLeftRadius',\n topRight: 'borderTopRightRadius',\n bottomLeft: 'borderBottomLeftRadius',\n bottomRight: 'borderBottomRightRadius'\n }\n return map[corner]\n }\n\n private resolveCornerValues(config: CornerRadiusConfig) {\n return {\n topLeft: config.topLeft ?? config.topLeading ?? config.top ?? config.left,\n topRight: config.topRight ?? config.topTrailing ?? config.top ?? config.right,\n bottomLeft: config.bottomLeft ?? config.bottomLeading ?? config.bottom ?? config.left,\n bottomRight: config.bottomRight ?? config.bottomTrailing ?? config.bottom ?? config.right\n }\n }\n\n private formatRadius(value: CornerRadiusValue): string {\n if (typeof value === 'number') {\n return `${value}px`\n }\n return value\n }\n}\n\n/**\n * Enhanced cornerRadius modifier with backward compatibility\n *\n * @example\n * ```typescript\n * .cornerRadius(8) // All corners\n * .cornerRadius('50%') // Circular/oval shape\n * .cornerRadius({ topLeft: 8, topRight: 8}) // Top corners only\n * .cornerRadius({ \n * topLeading: 12, \n * topTrailing: 12,\n * bottomLeading: 4,\n * bottomTrailing: 4\n * })\n * ```\n */\nexport function cornerRadius(value: number | string): CornerRadiusModifier\nexport function cornerRadius(config: CornerRadiusConfig): CornerRadiusModifier\nexport function cornerRadius(value: number | string | CornerRadiusConfig): CornerRadiusModifier {\n return new CornerRadiusModifier({ radius: value })\n}\n"],"names":["BorderModifier","BaseModifier","options","resolvedOptions","key","value","__publicField","_node","context","styles","props","formatBorderWidth","width","createComputed","resolveColor","color","resolvedSides","radiusValue","side","sideName","radius","corners","corner","cssProperty","border","optionsOrWidth","style","borderTop","borderRight","borderBottom","borderLeft","borderLeading","borderTrailing","borderHorizontal","borderVertical","CornerRadiusModifier","config","cornerRadius"],"mappings":"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"}