@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,2507 +0,0 @@
1
- /**
2
- * Grid Layout Components (Phase 1)
3
- *
4
- * SwiftUI-inspired Grid components with CSS Grid integration.
5
- * Provides Grid, GridRow, LazyVGrid, and LazyHGrid components
6
- * that mirror SwiftUI's grid system while leveraging modern CSS Grid capabilities.
7
- */
8
-
9
- import type { ModifiableComponent, ModifierBuilder } from '../modifiers/types'
10
- import type { ComponentInstance, ComponentProps } from '../runtime/types'
11
- import { withModifiers } from './wrapper'
12
- import {
13
- processElementOverride,
14
- type ElementOverrideProps
15
- } from '../runtime/element-override'
16
- import {
17
- ComponentWithCSSClasses,
18
- type CSSClassesProps
19
- } from '../css-classes'
20
- import { useLifecycle } from '../lifecycle/hooks'
21
- import { registerComponentWithLifecycleHooks } from '../runtime/dom-bridge'
22
- import type { ResponsiveValue } from '../modifiers/responsive/types'
23
- import {
24
- GridResponsiveUtils,
25
- createResponsiveGridModifier,
26
- GridDebugger,
27
- GridPerformanceMonitor,
28
- type EnhancedResponsiveGridConfig
29
- } from './GridResponsive'
30
- import {
31
- transition
32
- } from '../modifiers/transitions'
33
-
34
- // Lazy import debug manager to avoid circular dependencies
35
- let debugManager: any = null
36
- const getDebugManager = () => {
37
- if (!debugManager) {
38
- try {
39
- const debugModule = require('../debug')
40
- debugManager = debugModule.debugManager
41
- } catch {
42
- // Debug module not available, create a mock
43
- debugManager = {
44
- isEnabled: () => false,
45
- logComponent: () => {},
46
- }
47
- }
48
- }
49
- return debugManager
50
- }
51
-
52
- /**
53
- * GridItem sizing configuration (SwiftUI-equivalent)
54
- */
55
- export interface GridItemConfig {
56
- type: 'fixed' | 'flexible' | 'adaptive'
57
- size?: number
58
- minimum?: number
59
- maximum?: number
60
- spacing?: number
61
- }
62
-
63
- /**
64
- * Grid item spanning configuration (Phase 3)
65
- */
66
- export interface GridSpanConfig {
67
- columnSpan?: number
68
- rowSpan?: number
69
- columnStart?: number
70
- rowStart?: number
71
- area?: string
72
- alignment?: 'start' | 'center' | 'end' | 'stretch'
73
- }
74
-
75
- /**
76
- * Enhanced grid item with spanning support (Phase 3)
77
- */
78
- export interface EnhancedGridItemConfig extends GridItemConfig {
79
- span?: GridSpanConfig
80
- }
81
-
82
- /**
83
- * GridItem factory class - matches SwiftUI GridItem exactly
84
- */
85
- export class GridItem {
86
- /**
87
- * Fixed-size grid column/row
88
- */
89
- static fixed(size: number, spacing?: number): GridItemConfig {
90
- return {
91
- type: 'fixed',
92
- size,
93
- spacing
94
- }
95
- }
96
-
97
- /**
98
- * Flexible grid column/row with optional constraints
99
- */
100
- static flexible(minimum: number = 0, maximum?: number): GridItemConfig {
101
- return {
102
- type: 'flexible',
103
- minimum,
104
- maximum
105
- }
106
- }
107
-
108
- /**
109
- * Adaptive grid column/row with minimum size
110
- */
111
- static adaptive(minimum: number, maximum?: number): GridItemConfig {
112
- return {
113
- type: 'adaptive',
114
- minimum,
115
- maximum
116
- }
117
- }
118
-
119
- /**
120
- * Create spanning configuration for grid items (Phase 3)
121
- */
122
- static spanning(config: GridSpanConfig): GridSpanConfig {
123
- return config
124
- }
125
-
126
- /**
127
- * Create enhanced grid item with spanning support (Phase 3)
128
- */
129
- static withSpan(baseConfig: GridItemConfig, spanConfig: GridSpanConfig): EnhancedGridItemConfig {
130
- return {
131
- ...baseConfig,
132
- span: spanConfig
133
- }
134
- }
135
- }
136
-
137
- /**
138
- * Responsive grid configuration for breakpoint-aware layouts
139
- */
140
- export type ResponsiveGridItemConfig = {
141
- base?: GridItemConfig[]
142
- sm?: GridItemConfig[]
143
- md?: GridItemConfig[]
144
- lg?: GridItemConfig[]
145
- xl?: GridItemConfig[]
146
- xxl?: GridItemConfig[]
147
- }
148
-
149
- /**
150
- * Grid alignment options (SwiftUI-equivalent)
151
- */
152
- export type GridAlignment =
153
- | 'topLeading' | 'top' | 'topTrailing'
154
- | 'leading' | 'center' | 'trailing'
155
- | 'bottomLeading' | 'bottom' | 'bottomTrailing'
156
-
157
- /**
158
- * Base Grid component properties
159
- */
160
- export interface BaseGridProps extends ComponentProps, ElementOverrideProps, CSSClassesProps {
161
- children?: ComponentInstance[]
162
- alignment?: GridAlignment
163
- spacing?: number | { horizontal?: number; vertical?: number }
164
- debugLabel?: string
165
- /** Animation configuration for grid layout changes (Phase 3) */
166
- animations?: GridAnimationConfig
167
- /** Accessibility configuration for grid components (Phase 3) */
168
- accessibility?: GridAccessibilityConfig
169
- /** Advanced styling configuration for grid components (Phase 3) */
170
- styling?: GridStylingConfig
171
- }
172
-
173
- /**
174
- * Grid component properties (explicit row/column control)
175
- */
176
- export interface GridProps extends BaseGridProps {
177
- // Grid uses explicit rows defined by GridRow children
178
- }
179
-
180
- /**
181
- * LazyVGrid component properties (vertical scrolling with flexible columns)
182
- */
183
- export interface LazyVGridProps extends BaseGridProps {
184
- columns: GridItemConfig[] | ResponsiveGridItemConfig | ResponsiveValue<GridItemConfig[]>
185
- pinnedViews?: ('sectionHeaders' | 'sectionFooters')[]
186
- /** Enhanced responsive configuration (Phase 2) */
187
- responsive?: EnhancedResponsiveGridConfig
188
- /** Sectioned data with headers/footers (Phase 3) */
189
- sections?: GridSection[]
190
- }
191
-
192
- /**
193
- * LazyHGrid component properties (horizontal scrolling with flexible rows)
194
- */
195
- export interface LazyHGridProps extends BaseGridProps {
196
- rows: GridItemConfig[] | ResponsiveGridItemConfig | ResponsiveValue<GridItemConfig[]>
197
- pinnedViews?: ('sectionHeaders' | 'sectionFooters')[]
198
- /** Enhanced responsive configuration (Phase 2) */
199
- responsive?: EnhancedResponsiveGridConfig
200
- /** Sectioned data with headers/footers (Phase 3) */
201
- sections?: GridSection[]
202
- }
203
-
204
- /**
205
- * Grid animation configuration (Phase 3)
206
- */
207
- export interface GridAnimationConfig {
208
- /** Enable layout animations when grid structure changes */
209
- layoutChanges?: boolean | {
210
- duration?: number
211
- easing?: string
212
- delay?: number
213
- }
214
- /** Enable animations when items are added/removed */
215
- itemChanges?: boolean | {
216
- enter?: {
217
- duration?: number
218
- easing?: string
219
- delay?: number
220
- from?: 'fade' | 'scale' | 'slide-up' | 'slide-down' | 'slide-left' | 'slide-right'
221
- }
222
- exit?: {
223
- duration?: number
224
- easing?: string
225
- delay?: number
226
- to?: 'fade' | 'scale' | 'slide-up' | 'slide-down' | 'slide-left' | 'slide-right'
227
- }
228
- }
229
- /** Enable animations for responsive breakpoint changes */
230
- responsive?: boolean | {
231
- duration?: number
232
- easing?: string
233
- delay?: number
234
- }
235
- /** Enable animations for section header/footer changes */
236
- sections?: boolean | {
237
- duration?: number
238
- easing?: string
239
- delay?: number
240
- }
241
- }
242
-
243
- /**
244
- * Grid accessibility configuration (Phase 3)
245
- */
246
- export interface GridAccessibilityConfig {
247
- /** Main accessibility label for the grid */
248
- label?: string
249
- /** Description of the grid's purpose */
250
- description?: string
251
- /** ARIA role override (defaults to 'grid' for data grids, 'group' for layout grids) */
252
- role?: 'grid' | 'group' | 'list' | 'region'
253
- /** Enable keyboard navigation between grid items */
254
- keyboardNavigation?: boolean | {
255
- enabled?: boolean
256
- /** Arrow key behavior: 'grid' for 2D navigation, 'list' for linear navigation */
257
- mode?: 'grid' | 'list'
258
- /** Enable page up/down navigation */
259
- pageNavigation?: boolean
260
- /** Enable home/end navigation */
261
- homeEndNavigation?: boolean
262
- }
263
- /** Enable focus management */
264
- focusManagement?: boolean | {
265
- enabled?: boolean
266
- /** Focus trap within grid */
267
- trapFocus?: boolean
268
- /** Restore focus when grid is unmounted */
269
- restoreFocus?: boolean
270
- /** Skip links for screen readers */
271
- skipLinks?: boolean
272
- }
273
- /** Screen reader optimizations */
274
- screenReader?: boolean | {
275
- enabled?: boolean
276
- /** Announce grid structure changes */
277
- announceChanges?: boolean
278
- /** Provide row/column count information */
279
- announceStructure?: boolean
280
- /** Announce item positions */
281
- announcePositions?: boolean
282
- }
283
- /** Reduced motion support */
284
- reducedMotion?: boolean | {
285
- respectPreference?: boolean
286
- fallbackBehavior?: 'disable' | 'reduce' | 'instant'
287
- }
288
- }
289
-
290
- /**
291
- * Advanced grid styling configuration (Phase 3)
292
- */
293
- export interface GridStylingConfig {
294
- /** Custom grid template areas for named grid positioning */
295
- templateAreas?: string[]
296
- /** Advanced gap configuration with different spacing for different breakpoints */
297
- advancedGap?: {
298
- row?: number | string | { [breakpoint: string]: number | string }
299
- column?: number | string | { [breakpoint: string]: number | string }
300
- }
301
- /** Grid debugging and overlay styles */
302
- debug?: boolean | {
303
- enabled?: boolean
304
- /** Show grid lines */
305
- showLines?: boolean
306
- /** Show grid areas */
307
- showAreas?: boolean
308
- /** Grid line color */
309
- lineColor?: string
310
- /** Grid line style */
311
- lineStyle?: 'solid' | 'dashed' | 'dotted'
312
- /** Show item numbers */
313
- showItemNumbers?: boolean
314
- }
315
- /** Theme integration */
316
- theme?: {
317
- /** Use theme-based grid colors */
318
- useThemeColors?: boolean
319
- /** Custom theme variant */
320
- variant?: string
321
- /** Grid-specific theme overrides */
322
- overrides?: Record<string, string | number>
323
- }
324
- /** Advanced hover and focus states */
325
- itemStates?: {
326
- /** Grid item hover effects */
327
- hover?: {
328
- enabled?: boolean
329
- transform?: 'scale' | 'lift' | 'glow' | 'highlight'
330
- transition?: string
331
- customCSS?: Record<string, string>
332
- }
333
- /** Grid item focus effects */
334
- focus?: {
335
- enabled?: boolean
336
- style?: 'ring' | 'outline' | 'background' | 'border'
337
- color?: string
338
- customCSS?: Record<string, string>
339
- }
340
- /** Grid item active/pressed effects */
341
- active?: {
342
- enabled?: boolean
343
- transform?: 'scale' | 'inset' | 'darken'
344
- customCSS?: Record<string, string>
345
- }
346
- }
347
- /** Grid container styling */
348
- container?: {
349
- /** Background patterns or overlays */
350
- background?: string | {
351
- pattern?: 'dots' | 'lines' | 'grid' | 'none'
352
- color?: string
353
- opacity?: number
354
- }
355
- /** Container border and shadow */
356
- border?: string
357
- borderRadius?: number | string
358
- boxShadow?: string
359
- /** Container padding */
360
- padding?: number | string | {
361
- top?: number | string
362
- right?: number | string
363
- bottom?: number | string
364
- left?: number | string
365
- }
366
- }
367
- }
368
-
369
- /**
370
- * Grid section configuration (Phase 3)
371
- */
372
- export interface GridSection {
373
- id: string
374
- header?: ComponentInstance | string
375
- footer?: ComponentInstance | string
376
- items: ComponentInstance[]
377
- headerStyle?: 'automatic' | 'grouped' | 'plain' | 'sticky'
378
- footerStyle?: 'automatic' | 'grouped' | 'plain' | 'sticky'
379
- }
380
-
381
- /**
382
- * Grid section header/footer properties (Phase 3)
383
- */
384
- export interface GridSectionHeaderProps extends ComponentProps, ElementOverrideProps, CSSClassesProps {
385
- content: ComponentInstance | string
386
- sectionId: string
387
- type: 'header' | 'footer'
388
- style: 'automatic' | 'grouped' | 'plain' | 'sticky'
389
- debugLabel?: string
390
- }
391
-
392
- /**
393
- * GridRow component properties
394
- */
395
- export interface GridRowProps extends ComponentProps, ElementOverrideProps, CSSClassesProps {
396
- children?: ComponentInstance[]
397
- alignment?: 'leading' | 'center' | 'trailing'
398
- debugLabel?: string
399
- }
400
-
401
- /**
402
- * CSS Grid generation utilities
403
- */
404
- class GridCSSGenerator {
405
- /**
406
- * Generate CSS grid-template-columns from GridItem configurations
407
- */
408
- static generateColumns(items: GridItemConfig[]): string {
409
- return items.map(item => {
410
- switch (item.type) {
411
- case 'fixed':
412
- return `${item.size}px`
413
- case 'flexible':
414
- const minSize = item.minimum || 0
415
- const maxSize = item.maximum ? `${item.maximum}px` : '1fr'
416
- return minSize > 0 ? `minmax(${minSize}px, ${maxSize})` : '1fr'
417
- case 'adaptive':
418
- const adaptiveMin = item.minimum
419
- const adaptiveMax = item.maximum ? `${item.maximum}px` : '1fr'
420
- return `minmax(${adaptiveMin}px, ${adaptiveMax})`
421
- default:
422
- return '1fr'
423
- }
424
- }).join(' ')
425
- }
426
-
427
- /**
428
- * Generate CSS grid-template-rows from GridItem configurations
429
- */
430
- static generateRows(items: GridItemConfig[]): string {
431
- return this.generateColumns(items) // Same logic applies
432
- }
433
-
434
- /**
435
- * Generate responsive CSS for grid layouts
436
- */
437
- static generateResponsiveGridCSS(config: ResponsiveGridItemConfig, property: 'grid-template-columns' | 'grid-template-rows'): Record<string, string | Record<string, string>> {
438
- const responsiveCSS: Record<string, string | Record<string, string>> = {}
439
-
440
- if (config.base) {
441
- responsiveCSS[property] = property === 'grid-template-columns'
442
- ? this.generateColumns(config.base)
443
- : this.generateRows(config.base)
444
- }
445
-
446
- // Generate media queries for other breakpoints
447
- const breakpoints = {
448
- sm: '640px',
449
- md: '768px',
450
- lg: '1024px',
451
- xl: '1280px',
452
- xxl: '1536px'
453
- }
454
-
455
- Object.entries(breakpoints).forEach(([breakpoint, minWidth]) => {
456
- const breakpointConfig = config[breakpoint as keyof ResponsiveGridItemConfig]
457
- if (breakpointConfig) {
458
- const mediaQuery = `@media (min-width: ${minWidth})`
459
- const gridValue = property === 'grid-template-columns'
460
- ? this.generateColumns(breakpointConfig)
461
- : this.generateRows(breakpointConfig)
462
-
463
- if (!responsiveCSS[mediaQuery]) {
464
- responsiveCSS[mediaQuery] = {}
465
- }
466
- const existing = responsiveCSS[mediaQuery] as Record<string, string>
467
- responsiveCSS[mediaQuery] = {
468
- ...existing,
469
- [property]: gridValue
470
- }
471
- }
472
- })
473
-
474
- return responsiveCSS
475
- }
476
-
477
- /**
478
- * Convert spacing configuration to CSS gap values
479
- */
480
- static generateSpacing(spacing?: number | { horizontal?: number; vertical?: number }): string {
481
- if (typeof spacing === 'number') {
482
- return `${spacing}px`
483
- }
484
- if (spacing && typeof spacing === 'object') {
485
- const horizontal = spacing.horizontal ?? 0
486
- const vertical = spacing.vertical ?? 0
487
- return `${vertical}px ${horizontal}px`
488
- }
489
- return '0'
490
- }
491
-
492
- /**
493
- * Convert GridAlignment to CSS grid alignment properties
494
- */
495
- static generateAlignment(alignment: GridAlignment): { justifyItems?: string; alignItems?: string } {
496
- const alignmentMap: Record<GridAlignment, { justifyItems: string; alignItems: string }> = {
497
- 'topLeading': { justifyItems: 'start', alignItems: 'start' },
498
- 'top': { justifyItems: 'center', alignItems: 'start' },
499
- 'topTrailing': { justifyItems: 'end', alignItems: 'start' },
500
- 'leading': { justifyItems: 'start', alignItems: 'center' },
501
- 'center': { justifyItems: 'center', alignItems: 'center' },
502
- 'trailing': { justifyItems: 'end', alignItems: 'center' },
503
- 'bottomLeading': { justifyItems: 'start', alignItems: 'end' },
504
- 'bottom': { justifyItems: 'center', alignItems: 'end' },
505
- 'bottomTrailing': { justifyItems: 'end', alignItems: 'end' }
506
- }
507
-
508
- return alignmentMap[alignment] || alignmentMap.center
509
- }
510
-
511
- /**
512
- * Generate CSS for section header/footer styling (Phase 3)
513
- */
514
- static generateSectionHeaderCSS(style: 'automatic' | 'grouped' | 'plain' | 'sticky', type: 'header' | 'footer', columnSpan: number): Record<string, string> {
515
- const baseStyles: Record<string, string> = {
516
- gridColumn: `1 / span ${columnSpan}`,
517
- display: 'flex',
518
- alignItems: 'center'
519
- }
520
-
521
- switch (style) {
522
- case 'sticky':
523
- baseStyles.position = 'sticky'
524
- baseStyles.top = type === 'header' ? '0' : 'auto'
525
- baseStyles.bottom = type === 'footer' ? '0' : 'auto'
526
- baseStyles.zIndex = '10'
527
- baseStyles.backgroundColor = 'var(--background-color, white)'
528
- break
529
- case 'grouped':
530
- baseStyles.padding = '12px 16px'
531
- baseStyles.backgroundColor = 'var(--section-bg, #f8f9fa)'
532
- baseStyles.borderRadius = type === 'header' ? '8px 8px 0 0' : '0 0 8px 8px'
533
- break
534
- case 'plain':
535
- baseStyles.padding = '8px 0'
536
- break
537
- case 'automatic':
538
- default:
539
- baseStyles.padding = '12px 0'
540
- baseStyles.fontWeight = '600'
541
- baseStyles.fontSize = '1.1em'
542
- if (type === 'footer') {
543
- baseStyles.fontSize = '0.9em'
544
- baseStyles.fontWeight = '400'
545
- baseStyles.color = 'var(--text-secondary, #6b7280)'
546
- }
547
- break
548
- }
549
-
550
- return baseStyles
551
- }
552
-
553
- /**
554
- * Generate CSS animations for grid layout changes (Phase 3)
555
- */
556
- static generateGridAnimationCSS(animations: GridAnimationConfig): Record<string, string> {
557
- const animationStyles: Record<string, string> = {}
558
-
559
- // Layout change animations
560
- if (animations.layoutChanges) {
561
- const config = typeof animations.layoutChanges === 'boolean' ? {} : animations.layoutChanges
562
- const duration = config.duration || 300
563
- const easing = config.easing || 'ease-out'
564
- const delay = config.delay || 0
565
-
566
- animationStyles.transition = `grid-template-columns ${duration}ms ${easing}${delay > 0 ? ` ${delay}ms` : ''}, grid-template-rows ${duration}ms ${easing}${delay > 0 ? ` ${delay}ms` : ''}`
567
- }
568
-
569
- // Responsive breakpoint change animations
570
- if (animations.responsive) {
571
- const config = typeof animations.responsive === 'boolean' ? {} : animations.responsive
572
- const duration = config.duration || 250
573
- const easing = config.easing || 'ease-out'
574
- const delay = config.delay || 0
575
-
576
- const responsiveTransition = `grid-template-columns ${duration}ms ${easing}${delay > 0 ? ` ${delay}ms` : ''}, grid-template-rows ${duration}ms ${easing}${delay > 0 ? ` ${delay}ms` : ''}, gap ${duration}ms ${easing}${delay > 0 ? ` ${delay}ms` : ''}`
577
-
578
- if (animationStyles.transition) {
579
- animationStyles.transition += `, ${responsiveTransition}`
580
- } else {
581
- animationStyles.transition = responsiveTransition
582
- }
583
- }
584
-
585
- return animationStyles
586
- }
587
-
588
- /**
589
- * Generate item entrance/exit animation keyframes (Phase 3)
590
- */
591
- static generateItemAnimationKeyframes(type: 'enter' | 'exit', animation: 'fade' | 'scale' | 'slide-up' | 'slide-down' | 'slide-left' | 'slide-right'): Record<string, string> {
592
- const keyframeName = `grid-item-${type}-${animation}`
593
-
594
- let keyframeContent = ''
595
- switch (animation) {
596
- case 'fade':
597
- keyframeContent = type === 'enter'
598
- ? 'from { opacity: 0; } to { opacity: 1; }'
599
- : 'from { opacity: 1; } to { opacity: 0; }'
600
- break
601
- case 'scale':
602
- keyframeContent = type === 'enter'
603
- ? 'from { opacity: 0; transform: scale(0.8); } to { opacity: 1; transform: scale(1); }'
604
- : 'from { opacity: 1; transform: scale(1); } to { opacity: 0; transform: scale(0.8); }'
605
- break
606
- case 'slide-up':
607
- keyframeContent = type === 'enter'
608
- ? 'from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); }'
609
- : 'from { opacity: 1; transform: translateY(0); } to { opacity: 0; transform: translateY(-20px); }'
610
- break
611
- case 'slide-down':
612
- keyframeContent = type === 'enter'
613
- ? 'from { opacity: 0; transform: translateY(-20px); } to { opacity: 1; transform: translateY(0); }'
614
- : 'from { opacity: 1; transform: translateY(0); } to { opacity: 0; transform: translateY(20px); }'
615
- break
616
- case 'slide-left':
617
- keyframeContent = type === 'enter'
618
- ? 'from { opacity: 0; transform: translateX(20px); } to { opacity: 1; transform: translateX(0); }'
619
- : 'from { opacity: 1; transform: translateX(0); } to { opacity: 0; transform: translateX(-20px); }'
620
- break
621
- case 'slide-right':
622
- keyframeContent = type === 'enter'
623
- ? 'from { opacity: 0; transform: translateX(-20px); } to { opacity: 1; transform: translateX(0); }'
624
- : 'from { opacity: 1; transform: translateX(0); } to { opacity: 0; transform: translateX(20px); }'
625
- break
626
- }
627
-
628
- return {
629
- [`@keyframes ${keyframeName}`]: `{ ${keyframeContent} }`,
630
- [`--${keyframeName}-keyframes`]: keyframeName
631
- }
632
- }
633
-
634
- /**
635
- * Generate accessibility attributes for grid elements (Phase 3)
636
- */
637
- static generateAccessibilityAttributes(
638
- accessibility: GridAccessibilityConfig,
639
- gridType: 'grid' | 'lazy-vgrid' | 'lazy-hgrid',
640
- columnCount?: number,
641
- rowCount?: number
642
- ): Record<string, string | number | boolean> {
643
- const attributes: Record<string, string | number | boolean> = {}
644
-
645
- // Determine appropriate ARIA role
646
- const defaultRole = gridType === 'grid' ? 'grid' : 'group'
647
- const role = accessibility.role || defaultRole
648
- attributes.role = role
649
-
650
- // Add accessibility labels
651
- if (accessibility.label) {
652
- attributes['aria-label'] = accessibility.label
653
- }
654
- if (accessibility.description) {
655
- attributes['aria-describedby'] = accessibility.description
656
- }
657
-
658
- // Grid structure information for screen readers
659
- if (accessibility.screenReader !== false) {
660
- const screenReaderConfig = typeof accessibility.screenReader === 'boolean' ? {} : accessibility.screenReader || {}
661
-
662
- if (screenReaderConfig.announceStructure !== false && columnCount !== undefined) {
663
- attributes['aria-colcount'] = columnCount
664
- }
665
- if (screenReaderConfig.announceStructure !== false && rowCount !== undefined) {
666
- attributes['aria-rowcount'] = rowCount
667
- }
668
- }
669
-
670
- // Keyboard navigation attributes
671
- if (accessibility.keyboardNavigation !== false) {
672
- const keyboardConfig = typeof accessibility.keyboardNavigation === 'boolean' ? {} : accessibility.keyboardNavigation || {}
673
-
674
- if (keyboardConfig.enabled !== false) {
675
- attributes.tabIndex = 0
676
- attributes['data-keyboard-navigation'] = keyboardConfig.mode || 'grid'
677
-
678
- if (keyboardConfig.pageNavigation) {
679
- attributes['data-page-navigation'] = true
680
- }
681
- if (keyboardConfig.homeEndNavigation) {
682
- attributes['data-home-end-navigation'] = true
683
- }
684
- }
685
- }
686
-
687
- // Focus management attributes
688
- if (accessibility.focusManagement !== false) {
689
- const focusConfig = typeof accessibility.focusManagement === 'boolean' ? {} : accessibility.focusManagement || {}
690
-
691
- if (focusConfig.trapFocus) {
692
- attributes['data-focus-trap'] = true
693
- }
694
- if (focusConfig.skipLinks) {
695
- attributes['data-skip-links'] = true
696
- }
697
- }
698
-
699
- // Reduced motion attributes
700
- if (accessibility.reducedMotion !== false) {
701
- const motionConfig = typeof accessibility.reducedMotion === 'boolean' ? {} : accessibility.reducedMotion || {}
702
-
703
- if (motionConfig.respectPreference !== false) {
704
- attributes['data-respect-reduced-motion'] = true
705
- attributes['data-reduced-motion-fallback'] = motionConfig.fallbackBehavior || 'disable'
706
- }
707
- }
708
-
709
- return attributes
710
- }
711
-
712
- /**
713
- * Generate reduced motion CSS based on user preferences (Phase 3)
714
- */
715
- static generateReducedMotionCSS(accessibility?: GridAccessibilityConfig): Record<string, string> {
716
- if (!accessibility?.reducedMotion) return {}
717
-
718
- const motionConfig = typeof accessibility.reducedMotion === 'boolean' ? {} : accessibility.reducedMotion
719
- const fallback = motionConfig.fallbackBehavior || 'disable'
720
-
721
- const reducedMotionCSS: Record<string, string> = {}
722
-
723
- switch (fallback) {
724
- case 'disable':
725
- reducedMotionCSS['@media (prefers-reduced-motion: reduce)'] = '{ transition: none !important; animation: none !important; }'
726
- break
727
- case 'reduce':
728
- reducedMotionCSS['@media (prefers-reduced-motion: reduce)'] = '{ transition-duration: 0.1s !important; animation-duration: 0.1s !important; }'
729
- break
730
- case 'instant':
731
- reducedMotionCSS['@media (prefers-reduced-motion: reduce)'] = '{ transition-duration: 0s !important; animation-duration: 0s !important; }'
732
- break
733
- }
734
-
735
- return reducedMotionCSS
736
- }
737
-
738
- /**
739
- * Generate advanced styling CSS for grid components (Phase 3)
740
- */
741
- static generateAdvancedStylingCSS(styling: GridStylingConfig): Record<string, string> {
742
- const styles: Record<string, string> = {}
743
-
744
- // Grid template areas
745
- if (styling.templateAreas && styling.templateAreas.length > 0) {
746
- const areas = styling.templateAreas.map(area => `"${area}"`).join(' ')
747
- styles.gridTemplateAreas = areas
748
- }
749
-
750
- // Advanced gap configuration
751
- if (styling.advancedGap) {
752
- if (styling.advancedGap.row) {
753
- if (typeof styling.advancedGap.row === 'object') {
754
- // Responsive row gap - would need media queries
755
- Object.entries(styling.advancedGap.row).forEach(([breakpoint, value]) => {
756
- const mediaQuery = this.getMediaQueryForBreakpoint(breakpoint)
757
- if (mediaQuery) {
758
- styles[mediaQuery] = styles[mediaQuery] || '{}'
759
- styles[mediaQuery] = styles[mediaQuery].replace('}', ` row-gap: ${value}px; }`)
760
- }
761
- })
762
- } else {
763
- styles.rowGap = typeof styling.advancedGap.row === 'number'
764
- ? `${styling.advancedGap.row}px`
765
- : styling.advancedGap.row
766
- }
767
- }
768
-
769
- if (styling.advancedGap.column) {
770
- if (typeof styling.advancedGap.column === 'object') {
771
- // Responsive column gap
772
- Object.entries(styling.advancedGap.column).forEach(([breakpoint, value]) => {
773
- const mediaQuery = this.getMediaQueryForBreakpoint(breakpoint)
774
- if (mediaQuery) {
775
- styles[mediaQuery] = styles[mediaQuery] || '{}'
776
- styles[mediaQuery] = styles[mediaQuery].replace('}', ` column-gap: ${value}px; }`)
777
- }
778
- })
779
- } else {
780
- styles.columnGap = typeof styling.advancedGap.column === 'number'
781
- ? `${styling.advancedGap.column}px`
782
- : styling.advancedGap.column
783
- }
784
- }
785
- }
786
-
787
- // Container styling (handle first to allow debug to override/combine)
788
- if (styling.container) {
789
- if (styling.container.background) {
790
- if (typeof styling.container.background === 'string') {
791
- styles.background = styling.container.background
792
- } else {
793
- const bgConfig = styling.container.background
794
- switch (bgConfig.pattern) {
795
- case 'dots':
796
- styles.background = `radial-gradient(circle, ${bgConfig.color || '#e0e0e0'} 1px, transparent 1px)`
797
- styles.backgroundSize = '20px 20px'
798
- if (bgConfig.opacity) {
799
- styles.opacity = bgConfig.opacity.toString()
800
- }
801
- break
802
- case 'lines':
803
- styles.background = `linear-gradient(90deg, ${bgConfig.color || '#e0e0e0'} 1px, transparent 1px), linear-gradient(${bgConfig.color || '#e0e0e0'} 1px, transparent 1px)`
804
- styles.backgroundSize = '20px 20px'
805
- break
806
- case 'grid':
807
- styles.background = `linear-gradient(to right, ${bgConfig.color || '#e0e0e0'} 1px, transparent 1px), linear-gradient(to bottom, ${bgConfig.color || '#e0e0e0'} 1px, transparent 1px)`
808
- styles.backgroundSize = '20px 20px'
809
- break
810
- }
811
- }
812
- }
813
-
814
- if (styling.container.border) {
815
- styles.border = styling.container.border
816
- }
817
- if (styling.container.borderRadius) {
818
- styles.borderRadius = typeof styling.container.borderRadius === 'number'
819
- ? `${styling.container.borderRadius}px`
820
- : styling.container.borderRadius
821
- }
822
- if (styling.container.boxShadow) {
823
- styles.boxShadow = styling.container.boxShadow
824
- }
825
- if (styling.container.padding) {
826
- if (typeof styling.container.padding === 'object') {
827
- const p = styling.container.padding
828
- styles.padding = `${p.top || 0} ${p.right || 0} ${p.bottom || 0} ${p.left || 0}`
829
- } else {
830
- styles.padding = typeof styling.container.padding === 'number'
831
- ? `${styling.container.padding}px`
832
- : styling.container.padding
833
- }
834
- }
835
- }
836
-
837
- // Debug visualization (applies after container background to combine properly)
838
- if (styling.debug && (styling.debug === true || styling.debug.enabled)) {
839
- const debugConfig = typeof styling.debug === 'boolean' ? {} : styling.debug
840
- const lineColor = debugConfig.lineColor || '#ff0000'
841
-
842
- if (debugConfig.showLines !== false) {
843
- const debugGradient = `linear-gradient(to right, ${lineColor} 1px, transparent 1px), linear-gradient(to bottom, ${lineColor} 1px, transparent 1px)`
844
-
845
- // Combine with existing background if present
846
- if (styles.background && !styles.background.includes('linear-gradient')) {
847
- styles.background = `${debugGradient}, ${styles.background}`
848
- } else {
849
- styles.background = debugGradient
850
- }
851
- styles.backgroundSize = 'var(--grid-debug-size, 20px) var(--grid-debug-size, 20px)'
852
- }
853
-
854
- if (debugConfig.showAreas) {
855
- styles.position = 'relative'
856
- styles['&::after'] = `{ content: ""; position: absolute; top: 0; left: 0; right: 0; bottom: 0; background: repeating-linear-gradient(45deg, transparent, transparent 10px, ${lineColor}22 10px, ${lineColor}22 20px); pointer-events: none; }`
857
- }
858
- }
859
-
860
- return styles
861
- }
862
-
863
- /**
864
- * Generate item state CSS (hover, focus, active) (Phase 3)
865
- */
866
- static generateItemStateCSS(itemStates: NonNullable<GridStylingConfig['itemStates']>): Record<string, string> {
867
- const styles: Record<string, string> = {}
868
-
869
- // Hover effects
870
- if (itemStates.hover && itemStates.hover.enabled !== false) {
871
- const hoverConfig = itemStates.hover
872
- const hoverStyles: string[] = []
873
-
874
- switch (hoverConfig.transform) {
875
- case 'scale':
876
- hoverStyles.push('transform: scale(1.05)')
877
- break
878
- case 'lift':
879
- hoverStyles.push('transform: translateY(-2px)', 'box-shadow: 0 4px 8px rgba(0,0,0,0.12)')
880
- break
881
- case 'glow':
882
- hoverStyles.push('box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.4)')
883
- break
884
- case 'highlight':
885
- hoverStyles.push('background-color: rgba(59, 130, 246, 0.1)')
886
- break
887
- }
888
-
889
- if (hoverConfig.transition) {
890
- hoverStyles.push(`transition: ${hoverConfig.transition}`)
891
- } else {
892
- hoverStyles.push('transition: all 0.2s ease')
893
- }
894
-
895
- if (hoverConfig.customCSS) {
896
- Object.entries(hoverConfig.customCSS).forEach(([prop, value]) => {
897
- hoverStyles.push(`${prop}: ${value}`)
898
- })
899
- }
900
-
901
- styles['& > *:hover'] = `{ ${hoverStyles.join('; ')} }`
902
- }
903
-
904
- // Focus effects
905
- if (itemStates.focus && itemStates.focus.enabled !== false) {
906
- const focusConfig = itemStates.focus
907
- const focusStyles: string[] = []
908
-
909
- switch (focusConfig.style) {
910
- case 'ring':
911
- focusStyles.push(`box-shadow: 0 0 0 2px ${focusConfig.color || '#3b82f6'}`)
912
- break
913
- case 'outline':
914
- focusStyles.push(`outline: 2px solid ${focusConfig.color || '#3b82f6'}`, 'outline-offset: 2px')
915
- break
916
- case 'background':
917
- focusStyles.push(`background-color: ${focusConfig.color || 'rgba(59, 130, 246, 0.1)'}`)
918
- break
919
- case 'border':
920
- focusStyles.push(`border: 2px solid ${focusConfig.color || '#3b82f6'}`)
921
- break
922
- }
923
-
924
- if (focusConfig.customCSS) {
925
- Object.entries(focusConfig.customCSS).forEach(([prop, value]) => {
926
- focusStyles.push(`${prop}: ${value}`)
927
- })
928
- }
929
-
930
- styles['& > *:focus'] = `{ ${focusStyles.join('; ')} }`
931
- }
932
-
933
- // Active effects
934
- if (itemStates.active && itemStates.active.enabled !== false) {
935
- const activeConfig = itemStates.active
936
- const activeStyles: string[] = []
937
-
938
- switch (activeConfig.transform) {
939
- case 'scale':
940
- activeStyles.push('transform: scale(0.95)')
941
- break
942
- case 'inset':
943
- activeStyles.push('box-shadow: inset 0 2px 4px rgba(0,0,0,0.1)')
944
- break
945
- case 'darken':
946
- activeStyles.push('filter: brightness(0.9)')
947
- break
948
- }
949
-
950
- if (activeConfig.customCSS) {
951
- Object.entries(activeConfig.customCSS).forEach(([prop, value]) => {
952
- activeStyles.push(`${prop}: ${value}`)
953
- })
954
- }
955
-
956
- styles['& > *:active'] = `{ ${activeStyles.join('; ')} }`
957
- }
958
-
959
- return styles
960
- }
961
-
962
- /**
963
- * Get media query for breakpoint (helper function)
964
- */
965
- private static getMediaQueryForBreakpoint(breakpoint: string): string | null {
966
- const breakpoints: Record<string, string> = {
967
- sm: '@media (min-width: 640px)',
968
- md: '@media (min-width: 768px)',
969
- lg: '@media (min-width: 1024px)',
970
- xl: '@media (min-width: 1280px)',
971
- xxl: '@media (min-width: 1536px)'
972
- }
973
- return breakpoints[breakpoint] || null
974
- }
975
- }
976
-
977
- /**
978
- * Grid Section Header/Footer component (Phase 3)
979
- */
980
- class GridSectionHeaderComponent extends ComponentWithCSSClasses implements ComponentInstance<GridSectionHeaderProps> {
981
- public readonly type = 'component' as const
982
- public readonly id: string
983
- public mounted = false
984
- public cleanup: (() => void)[] = []
985
- private effectiveTag: string
986
- private validationResult: any
987
-
988
- constructor(public props: GridSectionHeaderProps) {
989
- super()
990
- this.id = `grid-section-${props.type}-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`
991
-
992
- // Process element override
993
- const componentType = `GridSection${props.type === 'header' ? 'Header' : 'Footer'}`
994
- const override = processElementOverride(componentType, 'div', this.props.element)
995
- this.effectiveTag = override.tag
996
- this.validationResult = override.validation
997
- }
998
-
999
- render() {
1000
- const { content, sectionId, type, style, debugLabel } = this.props
1001
-
1002
- // Log component for debugging
1003
- const debug = getDebugManager()
1004
- debug.logComponent(`GRID_SECTION_${type.toUpperCase()}`, debugLabel)
1005
-
1006
- // Process CSS classes for this component
1007
- const baseClasses = [`tachui-grid-section-${type}`, ...(debug.isEnabled() ? ['tachui-debug'] : [])]
1008
- const classString = this.createClassString(this.props, baseClasses)
1009
-
1010
- // Determine column span (will be set by parent grid)
1011
- const columnSpan = 12 // Default, should be overridden by parent
1012
-
1013
- // Generate section header styles
1014
- const sectionStyles = GridCSSGenerator.generateSectionHeaderCSS(style, type, columnSpan)
1015
-
1016
- // Render content
1017
- let renderedContent: any
1018
- if (typeof content === 'string') {
1019
- renderedContent = [{
1020
- type: 'element' as const,
1021
- tag: 'span',
1022
- props: {
1023
- className: `tachui-grid-section-${type}-text`,
1024
- children: [{ type: 'text' as const, text: content }]
1025
- }
1026
- }]
1027
- } else {
1028
- const contentResult = content.render()
1029
- renderedContent = Array.isArray(contentResult) ? contentResult : [contentResult]
1030
- }
1031
-
1032
- const element = {
1033
- type: 'element' as const,
1034
- tag: this.effectiveTag,
1035
- props: {
1036
- className: classString,
1037
- style: sectionStyles,
1038
- 'data-section-id': sectionId,
1039
- 'data-section-type': type,
1040
- // Add debug attributes
1041
- ...(debug.isEnabled() && {
1042
- 'data-tachui-component': `GridSection${type === 'header' ? 'Header' : 'Footer'}`,
1043
- ...(debugLabel && { 'data-tachui-label': debugLabel })
1044
- })
1045
- },
1046
- children: renderedContent,
1047
- // Add component metadata
1048
- componentMetadata: {
1049
- originalType: `GridSection${type === 'header' ? 'Header' : 'Footer'}`,
1050
- overriddenTo: this.effectiveTag !== 'div' ? this.effectiveTag : undefined,
1051
- validationResult: this.validationResult
1052
- }
1053
- }
1054
-
1055
- return [element]
1056
- }
1057
- }
1058
-
1059
- /**
1060
- * Base Grid component class with CSS Grid layout
1061
- */
1062
- class BaseGridComponent extends ComponentWithCSSClasses implements ComponentInstance<BaseGridProps> {
1063
- public readonly type = 'component' as const
1064
- public readonly id: string
1065
- public mounted = false
1066
- public cleanup: (() => void)[] = []
1067
- protected effectiveTag: string
1068
- protected validationResult: any
1069
-
1070
- constructor(
1071
- public props: BaseGridProps,
1072
- protected gridType: 'grid' | 'lazy-vgrid' | 'lazy-hgrid',
1073
- public children: ComponentInstance[] = []
1074
- ) {
1075
- super()
1076
- this.id = `${gridType}-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`
1077
-
1078
- // Process element override for tag specification enhancement
1079
- const componentType = gridType === 'grid' ? 'Grid' :
1080
- gridType === 'lazy-vgrid' ? 'LazyVGrid' : 'LazyHGrid'
1081
- const override = processElementOverride(componentType, 'div', this.props.element)
1082
- this.effectiveTag = override.tag
1083
- this.validationResult = override.validation
1084
-
1085
- // Set up lifecycle hooks for child components
1086
- this.setupLifecycleHooks()
1087
-
1088
- // Register this component for lifecycle processing
1089
- registerComponentWithLifecycleHooks(this)
1090
- }
1091
-
1092
- /**
1093
- * Generate animation styles for grid layout (Phase 3)
1094
- */
1095
- protected generateAnimationStyles(animations?: GridAnimationConfig): Record<string, string> {
1096
- if (!animations) return {}
1097
-
1098
- return GridCSSGenerator.generateGridAnimationCSS(animations)
1099
- }
1100
-
1101
- /**
1102
- * Apply item animations to child elements (Phase 3)
1103
- */
1104
- protected applyItemAnimations(children: ComponentInstance[], animations?: GridAnimationConfig): ComponentInstance[] {
1105
- if (!animations?.itemChanges) return children
1106
-
1107
- const itemConfig = typeof animations.itemChanges === 'boolean' ? {} : animations.itemChanges
1108
-
1109
- // Apply enter animations to new items
1110
- if (itemConfig.enter) {
1111
- const enterConfig = itemConfig.enter
1112
- const duration = enterConfig.duration || 250
1113
- const easing = enterConfig.easing || 'ease-out'
1114
- const delay = enterConfig.delay || 0
1115
-
1116
- // Apply animation styles to children
1117
- return children.map((child, index) => {
1118
- // Add animation modifier to child (if child supports modifiers)
1119
- if ('modifiers' in child && Array.isArray((child as any).modifiers)) {
1120
- const animationDelay = delay + (index * 50) // Stagger animations
1121
- const animationModifier = transition('all', duration, easing, animationDelay)
1122
- ;(child as any).modifiers.push(animationModifier)
1123
- }
1124
- return child
1125
- })
1126
- }
1127
-
1128
- return children
1129
- }
1130
-
1131
- /**
1132
- * Generate accessibility attributes for grid (Phase 3)
1133
- */
1134
- protected generateAccessibilityAttributes(accessibility?: GridAccessibilityConfig, columnCount?: number, rowCount?: number): Record<string, any> {
1135
- if (!accessibility) return {}
1136
-
1137
- return GridCSSGenerator.generateAccessibilityAttributes(accessibility, this.gridType, columnCount, rowCount)
1138
- }
1139
-
1140
- /**
1141
- * Generate advanced styling CSS for grid (Phase 3)
1142
- */
1143
- protected generateStylingCSS(styling?: GridStylingConfig): Record<string, string> {
1144
- if (!styling) return {}
1145
-
1146
- const stylingCSS = GridCSSGenerator.generateAdvancedStylingCSS(styling)
1147
-
1148
- // Add item state CSS if configured
1149
- if (styling.itemStates) {
1150
- const itemStateCSS = GridCSSGenerator.generateItemStateCSS(styling.itemStates)
1151
- Object.assign(stylingCSS, itemStateCSS)
1152
- }
1153
-
1154
- return stylingCSS
1155
- }
1156
-
1157
- /**
1158
- * Handle keyboard navigation events (Phase 3)
1159
- */
1160
- protected setupKeyboardNavigation(element: HTMLElement, accessibility?: GridAccessibilityConfig) {
1161
- if (!accessibility?.keyboardNavigation) return
1162
-
1163
- const keyboardConfig = typeof accessibility.keyboardNavigation === 'boolean' ? {} : accessibility.keyboardNavigation
1164
- if (keyboardConfig.enabled === false) return
1165
-
1166
- const mode = keyboardConfig.mode || 'grid'
1167
-
1168
- const handleKeyDown = (event: KeyboardEvent) => {
1169
- const target = event.target as HTMLElement
1170
- if (!element.contains(target)) return
1171
-
1172
- let handled = false
1173
-
1174
- switch (event.key) {
1175
- case 'ArrowUp':
1176
- if (mode === 'grid') {
1177
- this.navigateGrid(element, 'up')
1178
- handled = true
1179
- }
1180
- break
1181
- case 'ArrowDown':
1182
- if (mode === 'grid') {
1183
- this.navigateGrid(element, 'down')
1184
- handled = true
1185
- } else if (mode === 'list') {
1186
- this.navigateList(element, 'next')
1187
- handled = true
1188
- }
1189
- break
1190
- case 'ArrowLeft':
1191
- this.navigateGrid(element, 'left')
1192
- handled = true
1193
- break
1194
- case 'ArrowRight':
1195
- this.navigateGrid(element, 'right')
1196
- handled = true
1197
- break
1198
- case 'Home':
1199
- if (keyboardConfig.homeEndNavigation) {
1200
- this.navigateToFirst(element)
1201
- handled = true
1202
- }
1203
- break
1204
- case 'End':
1205
- if (keyboardConfig.homeEndNavigation) {
1206
- this.navigateToLast(element)
1207
- handled = true
1208
- }
1209
- break
1210
- case 'PageUp':
1211
- if (keyboardConfig.pageNavigation) {
1212
- this.navigatePage(element, 'up')
1213
- handled = true
1214
- }
1215
- break
1216
- case 'PageDown':
1217
- if (keyboardConfig.pageNavigation) {
1218
- this.navigatePage(element, 'down')
1219
- handled = true
1220
- }
1221
- break
1222
- }
1223
-
1224
- if (handled) {
1225
- event.preventDefault()
1226
- event.stopPropagation()
1227
- }
1228
- }
1229
-
1230
- element.addEventListener('keydown', handleKeyDown)
1231
-
1232
- // Store cleanup function
1233
- this.cleanup.push(() => {
1234
- element.removeEventListener('keydown', handleKeyDown)
1235
- })
1236
- }
1237
-
1238
- /**
1239
- * Navigate within grid structure (Phase 3)
1240
- */
1241
- private navigateGrid(container: HTMLElement, direction: 'up' | 'down' | 'left' | 'right') {
1242
- const focusableElements = container.querySelectorAll('[tabindex="0"], button, input, select, textarea, [contenteditable]')
1243
- const currentIndex = Array.from(focusableElements).indexOf(document.activeElement as HTMLElement)
1244
-
1245
- if (currentIndex === -1) return
1246
-
1247
- // Get grid dimensions (simplified - assumes regular grid)
1248
- const computedStyle = getComputedStyle(container)
1249
- const columns = computedStyle.gridTemplateColumns.split(' ').length
1250
-
1251
- let targetIndex = currentIndex
1252
-
1253
- switch (direction) {
1254
- case 'up':
1255
- targetIndex = Math.max(0, currentIndex - columns)
1256
- break
1257
- case 'down':
1258
- targetIndex = Math.min(focusableElements.length - 1, currentIndex + columns)
1259
- break
1260
- case 'left':
1261
- targetIndex = Math.max(0, currentIndex - 1)
1262
- break
1263
- case 'right':
1264
- targetIndex = Math.min(focusableElements.length - 1, currentIndex + 1)
1265
- break
1266
- }
1267
-
1268
- if (targetIndex !== currentIndex) {
1269
- (focusableElements[targetIndex] as HTMLElement).focus()
1270
- }
1271
- }
1272
-
1273
- /**
1274
- * Navigate in list mode (Phase 3)
1275
- */
1276
- private navigateList(container: HTMLElement, direction: 'previous' | 'next') {
1277
- const focusableElements = container.querySelectorAll('[tabindex="0"], button, input, select, textarea, [contenteditable]')
1278
- const currentIndex = Array.from(focusableElements).indexOf(document.activeElement as HTMLElement)
1279
-
1280
- if (currentIndex === -1) return
1281
-
1282
- const targetIndex = direction === 'next'
1283
- ? Math.min(focusableElements.length - 1, currentIndex + 1)
1284
- : Math.max(0, currentIndex - 1)
1285
-
1286
- if (targetIndex !== currentIndex) {
1287
- (focusableElements[targetIndex] as HTMLElement).focus()
1288
- }
1289
- }
1290
-
1291
- /**
1292
- * Navigate to first/last elements (Phase 3)
1293
- */
1294
- private navigateToFirst(container: HTMLElement) {
1295
- const focusableElements = container.querySelectorAll('[tabindex="0"], button, input, select, textarea, [contenteditable]')
1296
- if (focusableElements.length > 0) {
1297
- (focusableElements[0] as HTMLElement).focus()
1298
- }
1299
- }
1300
-
1301
- private navigateToLast(container: HTMLElement) {
1302
- const focusableElements = container.querySelectorAll('[tabindex="0"], button, input, select, textarea, [contenteditable]')
1303
- if (focusableElements.length > 0) {
1304
- (focusableElements[focusableElements.length - 1] as HTMLElement).focus()
1305
- }
1306
- }
1307
-
1308
- /**
1309
- * Navigate by page (Phase 3)
1310
- */
1311
- private navigatePage(container: HTMLElement, direction: 'up' | 'down') {
1312
- const focusableElements = container.querySelectorAll('[tabindex="0"], button, input, select, textarea, [contenteditable]')
1313
- const currentIndex = Array.from(focusableElements).indexOf(document.activeElement as HTMLElement)
1314
-
1315
- if (currentIndex === -1) return
1316
-
1317
- // Page navigation jumps by ~10 items or to start/end
1318
- const pageSize = 10
1319
- const targetIndex = direction === 'down'
1320
- ? Math.min(focusableElements.length - 1, currentIndex + pageSize)
1321
- : Math.max(0, currentIndex - pageSize)
1322
-
1323
- if (targetIndex !== currentIndex) {
1324
- (focusableElements[targetIndex] as HTMLElement).focus()
1325
- }
1326
- }
1327
-
1328
- private setupLifecycleHooks() {
1329
- useLifecycle(this, {
1330
- onDOMReady: (_elements, primaryElement) => {
1331
- // Process lifecycle hooks for child components that have them
1332
- this.children.forEach((child, index) => {
1333
- const enhancedLifecycle = (child as any)._enhancedLifecycle
1334
-
1335
- if (enhancedLifecycle && enhancedLifecycle.onDOMReady && !child.domReady) {
1336
- try {
1337
- if (primaryElement) {
1338
- const childElements = this.findChildDOMElements(child, primaryElement, index)
1339
-
1340
- if (childElements.length > 0) {
1341
- child.domElements = new Map()
1342
- childElements.forEach((element, idx) => {
1343
- const key = element.id || `element-${idx}`
1344
- child.domElements!.set(key, element)
1345
- if (!child.primaryElement) {
1346
- child.primaryElement = element
1347
- }
1348
- })
1349
-
1350
- child.domReady = true
1351
-
1352
- // Call the child's onDOMReady hook
1353
- const cleanup = enhancedLifecycle.onDOMReady(
1354
- child.domElements,
1355
- child.primaryElement
1356
- )
1357
- if (typeof cleanup === 'function') {
1358
- child.cleanup = child.cleanup || []
1359
- child.cleanup.push(cleanup)
1360
- }
1361
-
1362
- // Also call onMount if it exists
1363
- if (enhancedLifecycle.onMount) {
1364
- const mountCleanup = enhancedLifecycle.onMount()
1365
- if (typeof mountCleanup === 'function') {
1366
- child.cleanup = child.cleanup || []
1367
- child.cleanup.push(mountCleanup)
1368
- }
1369
- }
1370
- }
1371
- }
1372
- } catch (error) {
1373
- console.error(`Error processing lifecycle hooks for child ${child.id}:`, error)
1374
- }
1375
- }
1376
- })
1377
- }
1378
- })
1379
- }
1380
-
1381
- /**
1382
- * Find DOM elements for child components (reusing pattern from LayoutComponent)
1383
- */
1384
- private findChildDOMElements(child: ComponentInstance, container: Element, childIndex: number): Element[] {
1385
- // For Image components, look for img elements with the tachui-image class
1386
- if (child.id.startsWith('image-')) {
1387
- const images = container.querySelectorAll('img.tachui-image')
1388
- if (images[childIndex]) {
1389
- return [images[childIndex]]
1390
- }
1391
- return Array.from(images)
1392
- }
1393
-
1394
- // For Button components, look for button elements with the tachui-button class
1395
- if (child.id.startsWith('button-')) {
1396
- const buttons = container.querySelectorAll('button.tachui-button')
1397
- if (buttons[childIndex]) {
1398
- return [buttons[childIndex]]
1399
- }
1400
- return Array.from(buttons)
1401
- }
1402
-
1403
- // For Text components, look for span elements with the tachui-text class
1404
- if (child.id.startsWith('text-')) {
1405
- const textElements = container.querySelectorAll('span.tachui-text, .tachui-text')
1406
- if (textElements[childIndex]) {
1407
- return [textElements[childIndex]]
1408
- }
1409
- return Array.from(textElements)
1410
- }
1411
-
1412
- // For other components, try to find any direct children elements
1413
- const allChildren = Array.from(container.children)
1414
- if (allChildren[childIndex]) {
1415
- return [allChildren[childIndex]]
1416
- }
1417
-
1418
- return allChildren
1419
- }
1420
-
1421
- render(): any[] {
1422
- // To be implemented by specific grid component subclasses
1423
- throw new Error('BaseGridComponent.render() must be implemented by subclass')
1424
- }
1425
- }
1426
-
1427
- /**
1428
- * Grid component class (explicit row/column control)
1429
- */
1430
- class GridComponent extends BaseGridComponent {
1431
- constructor(public props: GridProps, children: ComponentInstance[] = []) {
1432
- super(props, 'grid', children)
1433
- }
1434
-
1435
- render() {
1436
- const { alignment = 'center', spacing, debugLabel, animations, accessibility, styling } = this.props
1437
-
1438
- // Log component for debugging
1439
- const debug = getDebugManager()
1440
- debug.logComponent('GRID', debugLabel)
1441
-
1442
- // Process CSS classes for this component
1443
- const baseClasses = ['tachui-grid', ...(debug.isEnabled() ? ['tachui-debug'] : [])]
1444
- const classString = this.createClassString(this.props, baseClasses)
1445
-
1446
- // Apply item animations to children before rendering (Phase 3)
1447
- const animatedChildren = this.applyItemAnimations(this.children, animations)
1448
-
1449
- // Render children - Grid expects GridRow children for explicit layout
1450
- const renderedChildren = animatedChildren.map((child) => {
1451
- const childResult = child.render()
1452
- return Array.isArray(childResult) ? childResult : [childResult]
1453
- }).flat()
1454
-
1455
- // Generate base CSS Grid styles
1456
- const alignmentStyles = GridCSSGenerator.generateAlignment(alignment)
1457
- const gapValue = GridCSSGenerator.generateSpacing(spacing)
1458
-
1459
- // Phase 3: Generate animation styles
1460
- const animationStyles = this.generateAnimationStyles(animations)
1461
-
1462
- // Phase 3: Generate accessibility attributes
1463
- const accessibilityAttrs = this.generateAccessibilityAttributes(accessibility)
1464
-
1465
- // Phase 3: Generate reduced motion CSS
1466
- const reducedMotionCSS = GridCSSGenerator.generateReducedMotionCSS(accessibility)
1467
-
1468
- // Phase 3: Generate advanced styling CSS
1469
- const advancedStylingCSS = this.generateStylingCSS(styling)
1470
-
1471
- const finalStyles = {
1472
- display: 'grid',
1473
- gap: gapValue,
1474
- ...alignmentStyles,
1475
- ...animationStyles,
1476
- ...reducedMotionCSS,
1477
- ...advancedStylingCSS
1478
- }
1479
-
1480
- const element = {
1481
- type: 'element' as const,
1482
- tag: this.effectiveTag,
1483
- props: {
1484
- className: classString,
1485
- style: finalStyles,
1486
- ...accessibilityAttrs,
1487
- // Add debug attributes
1488
- ...(debug.isEnabled() && {
1489
- 'data-tachui-component': 'Grid',
1490
- ...(debugLabel && { 'data-tachui-label': debugLabel })
1491
- })
1492
- },
1493
- children: renderedChildren,
1494
- // Add component metadata for semantic role processing
1495
- componentMetadata: {
1496
- originalType: 'Grid',
1497
- overriddenTo: this.effectiveTag !== 'div' ? this.effectiveTag : undefined,
1498
- validationResult: this.validationResult
1499
- }
1500
- }
1501
-
1502
- return [element]
1503
- }
1504
- }
1505
-
1506
- /**
1507
- * GridRow component class
1508
- */
1509
- class GridRowComponent extends ComponentWithCSSClasses implements ComponentInstance<GridRowProps> {
1510
- public readonly type = 'component' as const
1511
- public readonly id: string
1512
- public mounted = false
1513
- public cleanup: (() => void)[] = []
1514
- private effectiveTag: string
1515
- private validationResult: any
1516
-
1517
- constructor(public props: GridRowProps, public children: ComponentInstance[] = []) {
1518
- super()
1519
- this.id = `gridrow-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`
1520
-
1521
- // Process element override for tag specification enhancement
1522
- const override = processElementOverride('GridRow', 'div', this.props.element)
1523
- this.effectiveTag = override.tag
1524
- this.validationResult = override.validation
1525
- }
1526
-
1527
- render() {
1528
- const { debugLabel } = this.props
1529
-
1530
- // Log component for debugging
1531
- const debug = getDebugManager()
1532
- debug.logComponent('GRIDROW', debugLabel)
1533
-
1534
- // Process CSS classes for this component
1535
- const baseClasses = ['tachui-gridrow', ...(debug.isEnabled() ? ['tachui-debug'] : [])]
1536
- const classString = this.createClassString(this.props, baseClasses)
1537
-
1538
- // Render children
1539
- const renderedChildren = this.children.map((child) => {
1540
- const childResult = child.render()
1541
- return Array.isArray(childResult) ? childResult : [childResult]
1542
- }).flat()
1543
-
1544
- // GridRow creates a row within the parent Grid - contents are positioned within the grid row
1545
- const element = {
1546
- type: 'element' as const,
1547
- tag: this.effectiveTag,
1548
- props: {
1549
- className: classString,
1550
- style: {
1551
- display: 'contents', // GridRow acts as a transparent container within CSS Grid
1552
- },
1553
- // Add debug attributes
1554
- ...(debug.isEnabled() && {
1555
- 'data-tachui-component': 'GridRow',
1556
- ...(debugLabel && { 'data-tachui-label': debugLabel })
1557
- })
1558
- },
1559
- children: renderedChildren,
1560
- // Add component metadata
1561
- componentMetadata: {
1562
- originalType: 'GridRow',
1563
- overriddenTo: this.effectiveTag !== 'div' ? this.effectiveTag : undefined,
1564
- validationResult: this.validationResult
1565
- }
1566
- }
1567
-
1568
- return [element]
1569
- }
1570
- }
1571
-
1572
- /**
1573
- * LazyVGrid component class (vertical scrolling with flexible columns)
1574
- */
1575
- class LazyVGridComponent extends BaseGridComponent {
1576
- constructor(public props: LazyVGridProps, children: ComponentInstance[] = []) {
1577
- super(props, 'lazy-vgrid', children)
1578
- }
1579
-
1580
- render() {
1581
- const { columns, alignment = 'center', spacing, debugLabel, responsive, sections, pinnedViews, animations, accessibility, styling } = this.props
1582
-
1583
- // Log component for debugging
1584
- const debug = getDebugManager()
1585
- debug.logComponent('LAZYVGRID', debugLabel)
1586
-
1587
- // Process CSS classes for this component
1588
- const baseClasses = ['tachui-lazy-vgrid', ...(debug.isEnabled() ? ['tachui-debug'] : [])]
1589
- const classString = this.createClassString(this.props, baseClasses)
1590
-
1591
- // Phase 3: Handle sectioned data with headers and footers
1592
- let renderedChildren: any[]
1593
- if (sections && sections.length > 0) {
1594
- renderedChildren = this.renderSections(sections, pinnedViews)
1595
- } else {
1596
- // Apply item animations to children before rendering (Phase 3)
1597
- const animatedChildren = this.applyItemAnimations(this.children, animations)
1598
-
1599
- // Render regular children (backward compatibility)
1600
- renderedChildren = animatedChildren.map((child) => {
1601
- const childResult = child.render()
1602
- return Array.isArray(childResult) ? childResult : [childResult]
1603
- }).flat()
1604
- }
1605
-
1606
- // Generate CSS Grid styles
1607
- let gridTemplateColumns: string
1608
- let baseStyles: Record<string, any> = {
1609
- display: 'grid',
1610
- }
1611
-
1612
- // Phase 2: Enhanced responsive integration
1613
- if (responsive) {
1614
- // Performance monitoring for responsive CSS generation
1615
- const endMeasurement = GridPerformanceMonitor.startMeasurement('responsive-css-generation')
1616
-
1617
- try {
1618
- // Use enhanced responsive configuration
1619
- const responsiveConfig = GridResponsiveUtils.createResponsiveGridConfig({
1620
- columns: columns as any,
1621
- spacing,
1622
- alignment
1623
- })
1624
-
1625
- // Merge with provided responsive config
1626
- const finalConfig = { ...responsiveConfig, ...responsive }
1627
-
1628
- // Debug: Register grid instance and visualize breakpoints
1629
- GridDebugger.registerGrid(this.id, finalConfig, `#${this.id}`)
1630
- GridDebugger.visualizeBreakpoints(finalConfig)
1631
-
1632
- // Generate responsive modifier (would be applied by modifier system)
1633
- const responsiveModifier = createResponsiveGridModifier(finalConfig)
1634
-
1635
- // For Phase 2, we'll apply base styles and let the modifier system handle responsive styles
1636
- if (finalConfig.columns && typeof finalConfig.columns === 'object' && 'base' in finalConfig.columns && finalConfig.columns.base) {
1637
- gridTemplateColumns = this.generateColumnsFromConfig(finalConfig.columns.base)
1638
- } else if (Array.isArray(columns)) {
1639
- gridTemplateColumns = GridCSSGenerator.generateColumns(columns)
1640
- } else {
1641
- gridTemplateColumns = '1fr'
1642
- }
1643
-
1644
- // Add responsive modifier to component metadata for processing
1645
- baseStyles._responsiveModifier = responsiveModifier
1646
- } finally {
1647
- endMeasurement()
1648
- }
1649
- } else {
1650
- // Phase 1: Basic responsive support (backward compatibility)
1651
- const alignmentStyles = GridCSSGenerator.generateAlignment(alignment)
1652
- const gapValue = GridCSSGenerator.generateSpacing(spacing)
1653
-
1654
- if (Array.isArray(columns)) {
1655
- // Simple column configuration
1656
- gridTemplateColumns = GridCSSGenerator.generateColumns(columns)
1657
- } else {
1658
- // Responsive column configuration (legacy)
1659
- const responsiveCSS = GridCSSGenerator.generateResponsiveGridCSS(columns, 'grid-template-columns')
1660
- const templateValue = responsiveCSS['grid-template-columns']
1661
- gridTemplateColumns = (typeof templateValue === 'string' ? templateValue : '1fr')
1662
- }
1663
-
1664
- baseStyles = {
1665
- ...baseStyles,
1666
- gap: gapValue,
1667
- ...alignmentStyles,
1668
- }
1669
- }
1670
-
1671
- baseStyles.gridTemplateColumns = gridTemplateColumns
1672
-
1673
- // Phase 3: Apply animation styles
1674
- const animationStyles = this.generateAnimationStyles(animations)
1675
- Object.assign(baseStyles, animationStyles)
1676
-
1677
- // Phase 3: Generate accessibility attributes
1678
- const columnCount = this.getColumnCount()
1679
- const accessibilityAttrs = this.generateAccessibilityAttributes(accessibility, columnCount)
1680
-
1681
- // Phase 3: Generate reduced motion CSS
1682
- const reducedMotionCSS = GridCSSGenerator.generateReducedMotionCSS(accessibility)
1683
- Object.assign(baseStyles, reducedMotionCSS)
1684
-
1685
- // Phase 3: Generate advanced styling CSS
1686
- const advancedStylingCSS = this.generateStylingCSS(styling)
1687
- Object.assign(baseStyles, advancedStylingCSS)
1688
-
1689
- const element = {
1690
- type: 'element' as const,
1691
- tag: this.effectiveTag,
1692
- props: {
1693
- className: classString,
1694
- style: baseStyles,
1695
- ...accessibilityAttrs,
1696
- // Add debug attributes
1697
- ...(debug.isEnabled() && {
1698
- 'data-tachui-component': 'LazyVGrid',
1699
- ...(debugLabel && { 'data-tachui-label': debugLabel })
1700
- })
1701
- },
1702
- children: renderedChildren,
1703
- // Add component metadata
1704
- componentMetadata: {
1705
- originalType: 'LazyVGrid',
1706
- overriddenTo: this.effectiveTag !== 'div' ? this.effectiveTag : undefined,
1707
- validationResult: this.validationResult,
1708
- // Phase 2: Include responsive modifier for processing
1709
- ...(responsive && baseStyles._responsiveModifier && {
1710
- responsiveModifier: baseStyles._responsiveModifier
1711
- })
1712
- }
1713
- }
1714
-
1715
- // Clean up internal responsive modifier from styles
1716
- if (baseStyles._responsiveModifier) {
1717
- delete baseStyles._responsiveModifier
1718
- }
1719
-
1720
- return [element]
1721
- }
1722
-
1723
- /**
1724
- * Render sectioned data with headers and footers (Phase 3)
1725
- */
1726
- private renderSections(sections: GridSection[], pinnedViews?: ('sectionHeaders' | 'sectionFooters')[]): any[] {
1727
- const renderedElements: any[] = []
1728
- const columnCount = this.getColumnCount()
1729
- const isPinnedHeaders = pinnedViews?.includes('sectionHeaders')
1730
- const isPinnedFooters = pinnedViews?.includes('sectionFooters')
1731
-
1732
- sections.forEach((section) => {
1733
- // Render section header
1734
- if (section.header) {
1735
- const headerStyle = section.headerStyle || (isPinnedHeaders ? 'sticky' : 'automatic')
1736
- const headerComponent = new GridSectionHeaderComponent({
1737
- content: section.header,
1738
- sectionId: section.id,
1739
- type: 'header',
1740
- style: headerStyle
1741
- })
1742
-
1743
- const headerResult = headerComponent.render()
1744
- if (Array.isArray(headerResult)) {
1745
- // Update grid-column style to span all columns
1746
- headerResult.forEach(element => {
1747
- if (element.props && element.props.style) {
1748
- element.props.style.gridColumn = `1 / span ${columnCount}`
1749
- }
1750
- })
1751
- renderedElements.push(...headerResult)
1752
- }
1753
- }
1754
-
1755
- // Render section items
1756
- section.items.forEach((item) => {
1757
- const itemResult = item.render()
1758
- const flatResult = Array.isArray(itemResult) ? itemResult : [itemResult]
1759
- renderedElements.push(...flatResult)
1760
- })
1761
-
1762
- // Render section footer
1763
- if (section.footer) {
1764
- const footerStyle = section.footerStyle || (isPinnedFooters ? 'sticky' : 'automatic')
1765
- const footerComponent = new GridSectionHeaderComponent({
1766
- content: section.footer,
1767
- sectionId: section.id,
1768
- type: 'footer',
1769
- style: footerStyle
1770
- })
1771
-
1772
- const footerResult = footerComponent.render()
1773
- if (Array.isArray(footerResult)) {
1774
- // Update grid-column style to span all columns
1775
- footerResult.forEach(element => {
1776
- if (element.props && element.props.style) {
1777
- element.props.style.gridColumn = `1 / span ${columnCount}`
1778
- }
1779
- })
1780
- renderedElements.push(...footerResult)
1781
- }
1782
- }
1783
- })
1784
-
1785
- return renderedElements
1786
- }
1787
-
1788
- /**
1789
- * Get the number of columns in the grid (Phase 3 helper)
1790
- */
1791
- private getColumnCount(): number {
1792
- const { columns } = this.props
1793
-
1794
- if (Array.isArray(columns)) {
1795
- return columns.length
1796
- }
1797
-
1798
- // For responsive configurations, use the base or first available
1799
- if (typeof columns === 'object' && columns !== null) {
1800
- const responsiveConfig = columns as any
1801
- const baseColumns = responsiveConfig.base || responsiveConfig.sm || responsiveConfig.md || responsiveConfig.lg || responsiveConfig.xl || responsiveConfig.xxl
1802
- return Array.isArray(baseColumns) ? baseColumns.length : 1
1803
- }
1804
-
1805
- return 1
1806
- }
1807
-
1808
- /**
1809
- * Generate columns from GridItemConfig array (Phase 2 helper)
1810
- */
1811
- private generateColumnsFromConfig(items: GridItemConfig[]): string {
1812
- return items.map(item => {
1813
- switch (item.type) {
1814
- case 'fixed':
1815
- return `${item.size}px`
1816
- case 'flexible':
1817
- const minSize = item.minimum || 0
1818
- const maxSize = item.maximum ? `${item.maximum}px` : '1fr'
1819
- return minSize > 0 ? `minmax(${minSize}px, ${maxSize})` : '1fr'
1820
- case 'adaptive':
1821
- const adaptiveMin = item.minimum
1822
- const adaptiveMax = item.maximum ? `${item.maximum}px` : '1fr'
1823
- return `minmax(${adaptiveMin}px, ${adaptiveMax})`
1824
- default:
1825
- return '1fr'
1826
- }
1827
- }).join(' ')
1828
- }
1829
- }
1830
-
1831
- /**
1832
- * LazyHGrid component class (horizontal scrolling with flexible rows)
1833
- */
1834
- class LazyHGridComponent extends BaseGridComponent {
1835
- constructor(public props: LazyHGridProps, children: ComponentInstance[] = []) {
1836
- super(props, 'lazy-hgrid', children)
1837
- }
1838
-
1839
- render() {
1840
- const { rows, alignment = 'center', spacing, debugLabel, responsive, sections, pinnedViews, animations, accessibility, styling } = this.props
1841
-
1842
- // Log component for debugging
1843
- const debug = getDebugManager()
1844
- debug.logComponent('LAZYHGRID', debugLabel)
1845
-
1846
- // Process CSS classes for this component
1847
- const baseClasses = ['tachui-lazy-hgrid', ...(debug.isEnabled() ? ['tachui-debug'] : [])]
1848
- const classString = this.createClassString(this.props, baseClasses)
1849
-
1850
- // Phase 3: Handle sectioned data with headers and footers
1851
- let renderedChildren: any[]
1852
- if (sections && sections.length > 0) {
1853
- renderedChildren = this.renderSections(sections, pinnedViews)
1854
- } else {
1855
- // Apply item animations to children before rendering (Phase 3)
1856
- const animatedChildren = this.applyItemAnimations(this.children, animations)
1857
-
1858
- // Render regular children (backward compatibility)
1859
- renderedChildren = animatedChildren.map((child) => {
1860
- const childResult = child.render()
1861
- return Array.isArray(childResult) ? childResult : [childResult]
1862
- }).flat()
1863
- }
1864
-
1865
- // Generate CSS Grid styles
1866
- let gridTemplateRows: string
1867
- let baseStyles: Record<string, any> = {
1868
- display: 'grid',
1869
- gridAutoFlow: 'column', // Horizontal flow for LazyHGrid
1870
- overflowX: 'auto', // Enable horizontal scrolling
1871
- }
1872
-
1873
- // Phase 2: Enhanced responsive integration
1874
- if (responsive) {
1875
- // Performance monitoring for responsive CSS generation
1876
- const endMeasurement = GridPerformanceMonitor.startMeasurement('responsive-css-generation')
1877
-
1878
- try {
1879
- // Use enhanced responsive configuration
1880
- const responsiveConfig = GridResponsiveUtils.createResponsiveGridConfig({
1881
- rows: rows as any,
1882
- spacing,
1883
- alignment
1884
- })
1885
-
1886
- // Merge with provided responsive config
1887
- const finalConfig = { ...responsiveConfig, ...responsive }
1888
-
1889
- // Debug: Register grid instance and visualize breakpoints
1890
- GridDebugger.registerGrid(this.id, finalConfig, `#${this.id}`)
1891
- GridDebugger.visualizeBreakpoints(finalConfig)
1892
-
1893
- // Generate responsive modifier (would be applied by modifier system)
1894
- const responsiveModifier = createResponsiveGridModifier(finalConfig)
1895
-
1896
- // For Phase 2, we'll apply base styles and let the modifier system handle responsive styles
1897
- if (finalConfig.rows && typeof finalConfig.rows === 'object' && 'base' in finalConfig.rows && finalConfig.rows.base) {
1898
- gridTemplateRows = this.generateRowsFromConfig(finalConfig.rows.base)
1899
- } else if (Array.isArray(rows)) {
1900
- gridTemplateRows = GridCSSGenerator.generateRows(rows)
1901
- } else {
1902
- gridTemplateRows = 'auto'
1903
- }
1904
-
1905
- // Add responsive modifier to component metadata for processing
1906
- baseStyles._responsiveModifier = responsiveModifier
1907
- } finally {
1908
- endMeasurement()
1909
- }
1910
- } else {
1911
- // Phase 1: Basic responsive support (backward compatibility)
1912
- const alignmentStyles = GridCSSGenerator.generateAlignment(alignment)
1913
- const gapValue = GridCSSGenerator.generateSpacing(spacing)
1914
-
1915
- if (Array.isArray(rows)) {
1916
- // Simple row configuration
1917
- gridTemplateRows = GridCSSGenerator.generateRows(rows)
1918
- } else {
1919
- // Responsive row configuration (legacy)
1920
- const responsiveCSS = GridCSSGenerator.generateResponsiveGridCSS(rows, 'grid-template-rows')
1921
- const templateValue = responsiveCSS['grid-template-rows']
1922
- gridTemplateRows = (typeof templateValue === 'string' ? templateValue : 'auto')
1923
- }
1924
-
1925
- baseStyles = {
1926
- ...baseStyles,
1927
- gap: gapValue,
1928
- ...alignmentStyles,
1929
- }
1930
- }
1931
-
1932
- baseStyles.gridTemplateRows = gridTemplateRows
1933
-
1934
- // Phase 3: Apply animation styles
1935
- const animationStyles = this.generateAnimationStyles(animations)
1936
- Object.assign(baseStyles, animationStyles)
1937
-
1938
- // Phase 3: Generate accessibility attributes
1939
- const rowCount = this.getRowCount()
1940
- const accessibilityAttrs = this.generateAccessibilityAttributes(accessibility, undefined, rowCount)
1941
-
1942
- // Phase 3: Generate reduced motion CSS
1943
- const reducedMotionCSS = GridCSSGenerator.generateReducedMotionCSS(accessibility)
1944
- Object.assign(baseStyles, reducedMotionCSS)
1945
-
1946
- // Phase 3: Generate advanced styling CSS
1947
- const advancedStylingCSS = this.generateStylingCSS(styling)
1948
- Object.assign(baseStyles, advancedStylingCSS)
1949
-
1950
- const element = {
1951
- type: 'element' as const,
1952
- tag: this.effectiveTag,
1953
- props: {
1954
- className: classString,
1955
- style: baseStyles,
1956
- ...accessibilityAttrs,
1957
- // Add debug attributes
1958
- ...(debug.isEnabled() && {
1959
- 'data-tachui-component': 'LazyHGrid',
1960
- ...(debugLabel && { 'data-tachui-label': debugLabel })
1961
- })
1962
- },
1963
- children: renderedChildren,
1964
- // Add component metadata
1965
- componentMetadata: {
1966
- originalType: 'LazyHGrid',
1967
- overriddenTo: this.effectiveTag !== 'div' ? this.effectiveTag : undefined,
1968
- validationResult: this.validationResult,
1969
- // Phase 2: Include responsive modifier for processing
1970
- ...(responsive && baseStyles._responsiveModifier && {
1971
- responsiveModifier: baseStyles._responsiveModifier
1972
- })
1973
- }
1974
- }
1975
-
1976
- // Clean up internal responsive modifier from styles
1977
- if (baseStyles._responsiveModifier) {
1978
- delete baseStyles._responsiveModifier
1979
- }
1980
-
1981
- return [element]
1982
- }
1983
-
1984
- /**
1985
- * Render sectioned data with headers and footers (Phase 3)
1986
- */
1987
- private renderSections(sections: GridSection[], pinnedViews?: ('sectionHeaders' | 'sectionFooters')[]): any[] {
1988
- const renderedElements: any[] = []
1989
- const rowCount = this.getRowCount()
1990
- const isPinnedHeaders = pinnedViews?.includes('sectionHeaders')
1991
- const isPinnedFooters = pinnedViews?.includes('sectionFooters')
1992
-
1993
- sections.forEach((section) => {
1994
- // Render section header
1995
- if (section.header) {
1996
- const headerStyle = section.headerStyle || (isPinnedHeaders ? 'sticky' : 'automatic')
1997
- const headerComponent = new GridSectionHeaderComponent({
1998
- content: section.header,
1999
- sectionId: section.id,
2000
- type: 'header',
2001
- style: headerStyle
2002
- })
2003
-
2004
- const headerResult = headerComponent.render()
2005
- if (Array.isArray(headerResult)) {
2006
- // Update grid-row style to span all rows for horizontal grid
2007
- headerResult.forEach(element => {
2008
- if (element.props && element.props.style) {
2009
- element.props.style.gridRow = `1 / span ${rowCount}`
2010
- element.props.style.gridColumn = 'auto'
2011
- }
2012
- })
2013
- renderedElements.push(...headerResult)
2014
- }
2015
- }
2016
-
2017
- // Render section items
2018
- section.items.forEach((item) => {
2019
- const itemResult = item.render()
2020
- const flatResult = Array.isArray(itemResult) ? itemResult : [itemResult]
2021
- renderedElements.push(...flatResult)
2022
- })
2023
-
2024
- // Render section footer
2025
- if (section.footer) {
2026
- const footerStyle = section.footerStyle || (isPinnedFooters ? 'sticky' : 'automatic')
2027
- const footerComponent = new GridSectionHeaderComponent({
2028
- content: section.footer,
2029
- sectionId: section.id,
2030
- type: 'footer',
2031
- style: footerStyle
2032
- })
2033
-
2034
- const footerResult = footerComponent.render()
2035
- if (Array.isArray(footerResult)) {
2036
- // Update grid-row style to span all rows for horizontal grid
2037
- footerResult.forEach(element => {
2038
- if (element.props && element.props.style) {
2039
- element.props.style.gridRow = `1 / span ${rowCount}`
2040
- element.props.style.gridColumn = 'auto'
2041
- }
2042
- })
2043
- renderedElements.push(...footerResult)
2044
- }
2045
- }
2046
- })
2047
-
2048
- return renderedElements
2049
- }
2050
-
2051
- /**
2052
- * Get the number of rows in the grid (Phase 3 helper)
2053
- */
2054
- private getRowCount(): number {
2055
- const { rows } = this.props
2056
-
2057
- if (Array.isArray(rows)) {
2058
- return rows.length
2059
- }
2060
-
2061
- // For responsive configurations, use the base or first available
2062
- if (typeof rows === 'object' && rows !== null) {
2063
- const responsiveConfig = rows as any
2064
- const baseRows = responsiveConfig.base || responsiveConfig.sm || responsiveConfig.md || responsiveConfig.lg || responsiveConfig.xl || responsiveConfig.xxl
2065
- return Array.isArray(baseRows) ? baseRows.length : 1
2066
- }
2067
-
2068
- return 1
2069
- }
2070
-
2071
- /**
2072
- * Generate rows from GridItemConfig array (Phase 2 helper)
2073
- */
2074
- private generateRowsFromConfig(items: GridItemConfig[]): string {
2075
- return items.map(item => {
2076
- switch (item.type) {
2077
- case 'fixed':
2078
- return `${item.size}px`
2079
- case 'flexible':
2080
- const minSize = item.minimum || 0
2081
- const maxSize = item.maximum ? `${item.maximum}px` : '1fr'
2082
- return minSize > 0 ? `minmax(${minSize}px, ${maxSize})` : '1fr'
2083
- case 'adaptive':
2084
- const adaptiveMin = item.minimum
2085
- const adaptiveMax = item.maximum ? `${item.maximum}px` : '1fr'
2086
- return `minmax(${adaptiveMin}px, ${adaptiveMax})`
2087
- default:
2088
- return 'auto'
2089
- }
2090
- }).join(' ')
2091
- }
2092
- }
2093
-
2094
- /**
2095
- * Grid component factory function with modifier support
2096
- */
2097
- export function Grid(props: GridProps = {}): ModifiableComponent<GridProps> & { modifier: ModifierBuilder<ModifiableComponent<GridProps>> } {
2098
- const { children = [], ...gridProps } = props
2099
- const component = new GridComponent(gridProps, children)
2100
- return withModifiers(component)
2101
- }
2102
-
2103
- /**
2104
- * GridRow component factory function with modifier support
2105
- */
2106
- export function GridRow(children: ComponentInstance[] = [], props: Omit<GridRowProps, 'children'> = {}): ModifiableComponent<GridRowProps> & { modifier: ModifierBuilder<ModifiableComponent<GridRowProps>> } {
2107
- const gridRowProps: GridRowProps = { ...props, children }
2108
- const component = new GridRowComponent(gridRowProps, children)
2109
- return withModifiers(component)
2110
- }
2111
-
2112
- /**
2113
- * LazyVGrid component factory function with modifier support
2114
- */
2115
- export function LazyVGrid(props: LazyVGridProps): ModifiableComponent<LazyVGridProps> & { modifier: ModifierBuilder<ModifiableComponent<LazyVGridProps>> } {
2116
- const { children = [], ...vgridProps } = props
2117
- const component = new LazyVGridComponent({ ...vgridProps, children }, children)
2118
- return withModifiers(component)
2119
- }
2120
-
2121
- /**
2122
- * LazyHGrid component factory function with modifier support
2123
- */
2124
- export function LazyHGrid(props: LazyHGridProps): ModifiableComponent<LazyHGridProps> & { modifier: ModifierBuilder<ModifiableComponent<LazyHGridProps>> } {
2125
- const { children = [], ...hgridProps } = props
2126
- const component = new LazyHGridComponent({ ...hgridProps, children }, children)
2127
- return withModifiers(component)
2128
- }
2129
-
2130
- /**
2131
- * Create a grid section with header, footer, and items (Phase 3)
2132
- */
2133
- export function createGridSection(config: {
2134
- id: string
2135
- header?: ComponentInstance | string
2136
- footer?: ComponentInstance | string
2137
- items: ComponentInstance[]
2138
- headerStyle?: 'automatic' | 'grouped' | 'plain' | 'sticky'
2139
- footerStyle?: 'automatic' | 'grouped' | 'plain' | 'sticky'
2140
- }): GridSection {
2141
- return {
2142
- id: config.id,
2143
- header: config.header,
2144
- footer: config.footer,
2145
- items: config.items,
2146
- headerStyle: config.headerStyle || 'automatic',
2147
- footerStyle: config.footerStyle || 'automatic'
2148
- }
2149
- }
2150
-
2151
- /**
2152
- * Grid section header factory (Phase 3)
2153
- */
2154
- export function GridSectionHeader(props: GridSectionHeaderProps): ModifiableComponent<GridSectionHeaderProps> & { modifier: ModifierBuilder<ModifiableComponent<GridSectionHeaderProps>> } {
2155
- const component = new GridSectionHeaderComponent(props)
2156
- return withModifiers(component)
2157
- }
2158
-
2159
- /**
2160
- * Grid animation preset functions (Phase 3)
2161
- */
2162
- export const GridAnimations = {
2163
- /**
2164
- * Basic fade-in animation for new items
2165
- */
2166
- fadeIn(duration: number = 250, delay: number = 0): GridAnimationConfig {
2167
- return {
2168
- itemChanges: {
2169
- enter: {
2170
- duration,
2171
- delay,
2172
- easing: 'ease-out',
2173
- from: 'fade'
2174
- }
2175
- }
2176
- }
2177
- },
2178
-
2179
- /**
2180
- * Scale animation for new items
2181
- */
2182
- scaleIn(duration: number = 300, delay: number = 0): GridAnimationConfig {
2183
- return {
2184
- itemChanges: {
2185
- enter: {
2186
- duration,
2187
- delay,
2188
- easing: 'cubic-bezier(0.34, 1.56, 0.64, 1)',
2189
- from: 'scale'
2190
- }
2191
- }
2192
- }
2193
- },
2194
-
2195
- /**
2196
- * Slide animation for new items
2197
- */
2198
- slideIn(direction: 'up' | 'down' | 'left' | 'right' = 'up', duration: number = 250): GridAnimationConfig {
2199
- return {
2200
- itemChanges: {
2201
- enter: {
2202
- duration,
2203
- easing: 'ease-out',
2204
- from: `slide-${direction}` as any
2205
- }
2206
- }
2207
- }
2208
- },
2209
-
2210
- /**
2211
- * Smooth layout changes when grid structure changes
2212
- */
2213
- smoothLayout(duration: number = 300): GridAnimationConfig {
2214
- return {
2215
- layoutChanges: {
2216
- duration,
2217
- easing: 'ease-out'
2218
- }
2219
- }
2220
- },
2221
-
2222
- /**
2223
- * Responsive breakpoint animations
2224
- */
2225
- smoothResponsive(duration: number = 250): GridAnimationConfig {
2226
- return {
2227
- responsive: {
2228
- duration,
2229
- easing: 'ease-out'
2230
- }
2231
- }
2232
- },
2233
-
2234
- /**
2235
- * Comprehensive animation configuration
2236
- */
2237
- comprehensive(itemDuration: number = 250, layoutDuration: number = 300): GridAnimationConfig {
2238
- return {
2239
- itemChanges: {
2240
- enter: {
2241
- duration: itemDuration,
2242
- easing: 'ease-out',
2243
- from: 'fade'
2244
- }
2245
- },
2246
- layoutChanges: {
2247
- duration: layoutDuration,
2248
- easing: 'ease-out'
2249
- },
2250
- responsive: {
2251
- duration: layoutDuration,
2252
- easing: 'ease-out'
2253
- },
2254
- sections: {
2255
- duration: itemDuration,
2256
- easing: 'ease-out'
2257
- }
2258
- }
2259
- },
2260
-
2261
- /**
2262
- * Staggered entrance animation for multiple items
2263
- */
2264
- staggered(itemDuration: number = 250): GridAnimationConfig {
2265
- return {
2266
- itemChanges: {
2267
- enter: {
2268
- duration: itemDuration,
2269
- delay: 0, // Stagger delay is calculated per-item in applyItemAnimations
2270
- easing: 'ease-out',
2271
- from: 'fade'
2272
- }
2273
- }
2274
- }
2275
- }
2276
- }
2277
-
2278
- /**
2279
- * Grid accessibility preset functions (Phase 3)
2280
- */
2281
- export const GridAccessibility = {
2282
- /**
2283
- * Full accessibility support with keyboard navigation and screen reader optimizations
2284
- */
2285
- full(label: string, description?: string): GridAccessibilityConfig {
2286
- return {
2287
- label,
2288
- description,
2289
- keyboardNavigation: {
2290
- enabled: true,
2291
- mode: 'grid',
2292
- pageNavigation: true,
2293
- homeEndNavigation: true
2294
- },
2295
- focusManagement: {
2296
- enabled: true,
2297
- skipLinks: true
2298
- },
2299
- screenReader: {
2300
- enabled: true,
2301
- announceChanges: true,
2302
- announceStructure: true,
2303
- announcePositions: true
2304
- },
2305
- reducedMotion: {
2306
- respectPreference: true,
2307
- fallbackBehavior: 'disable'
2308
- }
2309
- }
2310
- },
2311
-
2312
- /**
2313
- * Basic accessibility support for simple grids
2314
- */
2315
- basic(label: string): GridAccessibilityConfig {
2316
- return {
2317
- label,
2318
- keyboardNavigation: true,
2319
- reducedMotion: true
2320
- }
2321
- },
2322
-
2323
- /**
2324
- * Screen reader focused accessibility
2325
- */
2326
- screenReader(label: string, description?: string): GridAccessibilityConfig {
2327
- return {
2328
- label,
2329
- description,
2330
- role: 'grid',
2331
- screenReader: {
2332
- enabled: true,
2333
- announceStructure: true,
2334
- announceChanges: true
2335
- },
2336
- reducedMotion: true
2337
- }
2338
- },
2339
-
2340
- /**
2341
- * Keyboard navigation focused accessibility
2342
- */
2343
- keyboardOnly(label: string): GridAccessibilityConfig {
2344
- return {
2345
- label,
2346
- keyboardNavigation: {
2347
- enabled: true,
2348
- mode: 'grid',
2349
- pageNavigation: true,
2350
- homeEndNavigation: true
2351
- },
2352
- focusManagement: {
2353
- enabled: true
2354
- }
2355
- }
2356
- }
2357
- }
2358
-
2359
- /**
2360
- * Grid styling preset functions (Phase 3)
2361
- */
2362
- export const GridStyling = {
2363
- /**
2364
- * Debug grid with visible lines and areas
2365
- */
2366
- debug(options?: { lineColor?: string; showAreas?: boolean }): GridStylingConfig {
2367
- return {
2368
- debug: {
2369
- enabled: true,
2370
- showLines: true,
2371
- showAreas: options?.showAreas || false,
2372
- lineColor: options?.lineColor || '#ff0000',
2373
- lineStyle: 'dashed'
2374
- }
2375
- }
2376
- },
2377
-
2378
- /**
2379
- * Interactive grid with hover and focus effects
2380
- */
2381
- interactive(hoverTransform: 'scale' | 'lift' | 'glow' | 'highlight' = 'scale'): GridStylingConfig {
2382
- return {
2383
- itemStates: {
2384
- hover: {
2385
- enabled: true,
2386
- transform: hoverTransform,
2387
- transition: 'all 0.2s ease'
2388
- },
2389
- focus: {
2390
- enabled: true,
2391
- style: 'ring',
2392
- color: '#3b82f6'
2393
- },
2394
- active: {
2395
- enabled: true,
2396
- transform: 'scale'
2397
- }
2398
- }
2399
- }
2400
- },
2401
-
2402
- /**
2403
- * Card-style grid with background and borders
2404
- */
2405
- card(options?: { shadow?: string; borderRadius?: number; padding?: number }): GridStylingConfig {
2406
- return {
2407
- container: {
2408
- background: '#ffffff',
2409
- border: '1px solid #e0e0e0',
2410
- borderRadius: options?.borderRadius || 8,
2411
- boxShadow: options?.shadow || '0 2px 4px rgba(0,0,0,0.1)',
2412
- padding: options?.padding || 16
2413
- },
2414
- itemStates: {
2415
- hover: {
2416
- enabled: true,
2417
- transform: 'lift'
2418
- }
2419
- }
2420
- }
2421
- },
2422
-
2423
- /**
2424
- * Custom template areas grid
2425
- */
2426
- templateAreas(areas: string[]): GridStylingConfig {
2427
- return {
2428
- templateAreas: areas
2429
- }
2430
- },
2431
-
2432
- /**
2433
- * Grid with background pattern
2434
- */
2435
- backgroundPattern(pattern: 'dots' | 'lines' | 'grid', color?: string, opacity?: number): GridStylingConfig {
2436
- return {
2437
- container: {
2438
- background: {
2439
- pattern,
2440
- color: color || '#e0e0e0',
2441
- opacity: opacity || 0.5
2442
- }
2443
- }
2444
- }
2445
- },
2446
-
2447
- /**
2448
- * Comprehensive styling with multiple features
2449
- */
2450
- comprehensive(options?: {
2451
- debug?: boolean
2452
- interactive?: boolean
2453
- card?: boolean
2454
- pattern?: 'dots' | 'lines' | 'grid'
2455
- }): GridStylingConfig {
2456
- const config: GridStylingConfig = {}
2457
-
2458
- if (options?.debug) {
2459
- config.debug = { enabled: true, showLines: true }
2460
- }
2461
-
2462
- if (options?.interactive) {
2463
- config.itemStates = {
2464
- hover: { enabled: true, transform: 'scale' },
2465
- focus: { enabled: true, style: 'ring' },
2466
- active: { enabled: true, transform: 'scale' }
2467
- }
2468
- }
2469
-
2470
- if (options?.card) {
2471
- config.container = {
2472
- background: '#ffffff',
2473
- border: '1px solid #e0e0e0',
2474
- borderRadius: 8,
2475
- boxShadow: '0 2px 4px rgba(0,0,0,0.1)',
2476
- padding: 16
2477
- }
2478
- }
2479
-
2480
- if (options?.pattern) {
2481
- config.container = {
2482
- ...config.container,
2483
- background: {
2484
- pattern: options.pattern,
2485
- color: '#e0e0e0',
2486
- opacity: 0.3
2487
- }
2488
- }
2489
- }
2490
-
2491
- return config
2492
- }
2493
- }
2494
-
2495
- // Export all the types and components (including component classes for testing)
2496
- export {
2497
- BaseGridComponent,
2498
- GridComponent as EnhancedGrid,
2499
- GridRowComponent as EnhancedGridRow,
2500
- LazyVGridComponent as EnhancedLazyVGrid,
2501
- LazyHGridComponent as EnhancedLazyHGrid,
2502
- GridCSSGenerator,
2503
- GridSectionHeaderComponent,
2504
- // Phase 2: Enhanced debugging and performance utilities
2505
- GridDebugger,
2506
- GridPerformanceMonitor
2507
- }