@tachui/core 0.7.1-alpha → 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 (265) hide show
  1. package/README.md +2 -2
  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 +2 -16
  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 +403 -827
  9. package/dist/compiler/advanced-parser.d.ts.map +1 -1
  10. package/dist/compiler/index.js +14 -8
  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 -4167
  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 +84 -0
  23. package/dist/css-classes/index.js +176 -0
  24. package/dist/{dom-bridge-Cx-s6Ihx.js → dom-bridge-CAa1N2zX.js} +28 -28
  25. package/dist/{effect-CytAc9em.js → effect-B9Knft0b.js} +3 -3
  26. package/dist/essential.js +395 -825
  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 +395 -825
  33. package/dist/minimal-prod.js +101 -155
  34. package/dist/minimal.js +104 -170
  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 +487 -0
  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 +9 -0
  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 +10 -0
  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 +4 -0
  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 +147 -297
  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 +96 -95
  64. package/dist/reactive/types.js +4 -0
  65. package/dist/runtime/dom-bridge.js +5 -5
  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 -8
  71. package/dist/runtime/semantic-role-manager.d.ts.map +1 -1
  72. package/dist/runtime/types.js +1 -0
  73. package/dist/{scheduler-7SvC3a21.js → scheduler-BKeqwrYE.js} +130 -130
  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 +609 -6470
  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 +41 -5
  89. package/dist/ScrollView-h-6wYMAm.js +0 -515
  90. package/dist/Spacer-BbteDQ9I.js +0 -5337
  91. package/dist/binding-CmdpowkI.js +0 -2276
  92. package/dist/components/BasicInput.d.ts +0 -116
  93. package/dist/components/BasicInput.d.ts.map +0 -1
  94. package/dist/components/Button.d.ts +0 -252
  95. package/dist/components/Button.d.ts.map +0 -1
  96. package/dist/components/Divider.d.ts +0 -141
  97. package/dist/components/Divider.d.ts.map +0 -1
  98. package/dist/components/EnhancedLink.d.ts +0 -365
  99. package/dist/components/EnhancedLink.d.ts.map +0 -1
  100. package/dist/components/Form.d.ts +0 -141
  101. package/dist/components/Form.d.ts.map +0 -1
  102. package/dist/components/Grid.d.ts +0 -698
  103. package/dist/components/Grid.d.ts.map +0 -1
  104. package/dist/components/GridResponsive.d.ts +0 -214
  105. package/dist/components/GridResponsive.d.ts.map +0 -1
  106. package/dist/components/Image.d.ts +0 -162
  107. package/dist/components/Image.d.ts.map +0 -1
  108. package/dist/components/List.d.ts +0 -287
  109. package/dist/components/List.d.ts.map +0 -1
  110. package/dist/components/Menu.d.ts +0 -159
  111. package/dist/components/Menu.d.ts.map +0 -1
  112. package/dist/components/Picker.d.ts +0 -153
  113. package/dist/components/Picker.d.ts.map +0 -1
  114. package/dist/components/ScrollView.d.ts +0 -222
  115. package/dist/components/ScrollView.d.ts.map +0 -1
  116. package/dist/components/Section.d.ts +0 -153
  117. package/dist/components/Section.d.ts.map +0 -1
  118. package/dist/components/Show.d.ts +0 -64
  119. package/dist/components/Show.d.ts.map +0 -1
  120. package/dist/components/Spacer.d.ts +0 -35
  121. package/dist/components/Spacer.d.ts.map +0 -1
  122. package/dist/components/Text.d.ts +0 -242
  123. package/dist/components/Text.d.ts.map +0 -1
  124. package/dist/components/Toggle.d.ts +0 -207
  125. package/dist/components/Toggle.d.ts.map +0 -1
  126. package/dist/concatenated-component-DPcl2TEO.js +0 -6779
  127. package/dist/context--zQFIImS.js +0 -283
  128. package/dist/debug/index.d.ts +0 -61
  129. package/dist/debug/index.d.ts.map +0 -1
  130. package/dist/debug.js +0 -178
  131. package/dist/developer-experience/enhanced-errors.d.ts +0 -128
  132. package/dist/developer-experience/enhanced-errors.d.ts.map +0 -1
  133. package/dist/developer-experience/enhanced-types.d.ts +0 -281
  134. package/dist/developer-experience/enhanced-types.d.ts.map +0 -1
  135. package/dist/developer-experience/index.d.ts +0 -44
  136. package/dist/developer-experience/index.d.ts.map +0 -1
  137. package/dist/index-Nfi2SBQh.js +0 -3268
  138. package/dist/modifiers/attributes.d.ts +0 -203
  139. package/dist/modifiers/attributes.d.ts.map +0 -1
  140. package/dist/modifiers/backdrop.d.ts +0 -59
  141. package/dist/modifiers/backdrop.d.ts.map +0 -1
  142. package/dist/modifiers/border.d.ts +0 -217
  143. package/dist/modifiers/border.d.ts.map +0 -1
  144. package/dist/modifiers/effects.d.ts +0 -159
  145. package/dist/modifiers/effects.d.ts.map +0 -1
  146. package/dist/modifiers/elements.d.ts +0 -240
  147. package/dist/modifiers/elements.d.ts.map +0 -1
  148. package/dist/modifiers/filters.d.ts +0 -275
  149. package/dist/modifiers/filters.d.ts.map +0 -1
  150. package/dist/modifiers/flexbox.d.ts +0 -82
  151. package/dist/modifiers/flexbox.d.ts.map +0 -1
  152. package/dist/modifiers/font.d.ts +0 -71
  153. package/dist/modifiers/font.d.ts.map +0 -1
  154. package/dist/modifiers/grid.d.ts +0 -92
  155. package/dist/modifiers/grid.d.ts.map +0 -1
  156. package/dist/modifiers/margin.d.ts +0 -128
  157. package/dist/modifiers/margin.d.ts.map +0 -1
  158. package/dist/modifiers/padding.d.ts +0 -204
  159. package/dist/modifiers/padding.d.ts.map +0 -1
  160. package/dist/modifiers/responsive/advanced-utilities.d.ts +0 -118
  161. package/dist/modifiers/responsive/advanced-utilities.d.ts.map +0 -1
  162. package/dist/modifiers/responsive/breakpoints.d.ts +0 -81
  163. package/dist/modifiers/responsive/breakpoints.d.ts.map +0 -1
  164. package/dist/modifiers/responsive/css-generator.d.ts +0 -100
  165. package/dist/modifiers/responsive/css-generator.d.ts.map +0 -1
  166. package/dist/modifiers/responsive/dev-tools.d.ts +0 -107
  167. package/dist/modifiers/responsive/dev-tools.d.ts.map +0 -1
  168. package/dist/modifiers/responsive/index.d.ts +0 -29
  169. package/dist/modifiers/responsive/index.d.ts.map +0 -1
  170. package/dist/modifiers/responsive/layout-patterns.d.ts +0 -230
  171. package/dist/modifiers/responsive/layout-patterns.d.ts.map +0 -1
  172. package/dist/modifiers/responsive/performance.d.ts +0 -130
  173. package/dist/modifiers/responsive/performance.d.ts.map +0 -1
  174. package/dist/modifiers/responsive/responsive-builder.d.ts +0 -133
  175. package/dist/modifiers/responsive/responsive-builder.d.ts.map +0 -1
  176. package/dist/modifiers/responsive/responsive-modifier.d.ts +0 -123
  177. package/dist/modifiers/responsive/responsive-modifier.d.ts.map +0 -1
  178. package/dist/modifiers/responsive/types.d.ts +0 -183
  179. package/dist/modifiers/responsive/types.d.ts.map +0 -1
  180. package/dist/modifiers/responsive/utilities.d.ts +0 -149
  181. package/dist/modifiers/responsive/utilities.d.ts.map +0 -1
  182. package/dist/modifiers/scroll.d.ts +0 -143
  183. package/dist/modifiers/scroll.d.ts.map +0 -1
  184. package/dist/modifiers/shadows.d.ts +0 -114
  185. package/dist/modifiers/shadows.d.ts.map +0 -1
  186. package/dist/modifiers/size.d.ts +0 -113
  187. package/dist/modifiers/size.d.ts.map +0 -1
  188. package/dist/modifiers/text.d.ts +0 -147
  189. package/dist/modifiers/text.d.ts.map +0 -1
  190. package/dist/modifiers/transformations.d.ts +0 -329
  191. package/dist/modifiers/transformations.d.ts.map +0 -1
  192. package/dist/modifiers/transitions.d.ts +0 -98
  193. package/dist/modifiers/transitions.d.ts.map +0 -1
  194. package/dist/modifiers/typography.d.ts +0 -192
  195. package/dist/modifiers/typography.d.ts.map +0 -1
  196. package/dist/modifiers/utility.d.ts +0 -69
  197. package/dist/modifiers/utility.d.ts.map +0 -1
  198. package/dist/modifiers/utils.d.ts.map +0 -1
  199. package/dist/plugins/simplified-error-handler.d.ts +0 -83
  200. package/dist/plugins/simplified-error-handler.d.ts.map +0 -1
  201. package/dist/runtime/dev-tools.d.ts +0 -240
  202. package/dist/runtime/dev-tools.d.ts.map +0 -1
  203. package/dist/runtime/development-warnings.d.ts +0 -42
  204. package/dist/runtime/development-warnings.d.ts.map +0 -1
  205. package/dist/runtime/error-boundary.d.ts +0 -302
  206. package/dist/runtime/error-boundary.d.ts.map +0 -1
  207. package/dist/runtime/error-recovery.d.ts +0 -267
  208. package/dist/runtime/error-recovery.d.ts.map +0 -1
  209. package/dist/runtime/error-reporting.d.ts +0 -287
  210. package/dist/runtime/error-reporting.d.ts.map +0 -1
  211. package/dist/runtime/error-utils.d.ts +0 -204
  212. package/dist/runtime/error-utils.d.ts.map +0 -1
  213. package/dist/runtime/performance.d.ts +0 -217
  214. package/dist/runtime/performance.d.ts.map +0 -1
  215. package/dist/sui-compat.d.ts +0 -110
  216. package/dist/sui-compat.d.ts.map +0 -1
  217. package/dist/validation/advanced-debugging.d.ts +0 -319
  218. package/dist/validation/advanced-debugging.d.ts.map +0 -1
  219. package/dist/validation/build-time/detection.d.ts +0 -32
  220. package/dist/validation/build-time/detection.d.ts.map +0 -1
  221. package/dist/validation/build-time/index.d.ts +0 -84
  222. package/dist/validation/build-time/index.d.ts.map +0 -1
  223. package/dist/validation/build-time/plugins.d.ts +0 -75
  224. package/dist/validation/build-time/plugins.d.ts.map +0 -1
  225. package/dist/validation/build-time/rules.d.ts +0 -73
  226. package/dist/validation/build-time/rules.d.ts.map +0 -1
  227. package/dist/validation/build-time/transformer.d.ts +0 -23
  228. package/dist/validation/build-time/transformer.d.ts.map +0 -1
  229. package/dist/validation/build-time/types.d.ts +0 -212
  230. package/dist/validation/build-time/types.d.ts.map +0 -1
  231. package/dist/validation/comprehensive.d.ts +0 -160
  232. package/dist/validation/comprehensive.d.ts.map +0 -1
  233. package/dist/validation/debug-tools.d.ts +0 -251
  234. package/dist/validation/debug-tools.d.ts.map +0 -1
  235. package/dist/validation/developer-experience.d.ts +0 -243
  236. package/dist/validation/developer-experience.d.ts.map +0 -1
  237. package/dist/validation/documentation-integration.d.ts +0 -269
  238. package/dist/validation/documentation-integration.d.ts.map +0 -1
  239. package/dist/validation/enhanced-runtime.d.ts +0 -279
  240. package/dist/validation/enhanced-runtime.d.ts.map +0 -1
  241. package/dist/validation/error-reporting.d.ts +0 -186
  242. package/dist/validation/error-reporting.d.ts.map +0 -1
  243. package/dist/validation/ide-integration.d.ts +0 -328
  244. package/dist/validation/ide-integration.d.ts.map +0 -1
  245. package/dist/validation/performance-optimizer.d.ts +0 -218
  246. package/dist/validation/performance-optimizer.d.ts.map +0 -1
  247. package/dist/validation/production-bypass.d.ts +0 -175
  248. package/dist/validation/production-bypass.d.ts.map +0 -1
  249. package/dist/validation/simple.d.ts +0 -111
  250. package/dist/validation/simple.d.ts.map +0 -1
  251. package/dist/viewport/adapters/web-adapter.d.ts +0 -227
  252. package/dist/viewport/adapters/web-adapter.d.ts.map +0 -1
  253. package/dist/viewport/components.d.ts +0 -131
  254. package/dist/viewport/components.d.ts.map +0 -1
  255. package/dist/viewport/environment.d.ts +0 -75
  256. package/dist/viewport/environment.d.ts.map +0 -1
  257. package/dist/viewport/index.d.ts +0 -138
  258. package/dist/viewport/index.d.ts.map +0 -1
  259. package/dist/viewport/index.js +0 -2085
  260. package/dist/viewport/platform-detection.d.ts +0 -59
  261. package/dist/viewport/platform-detection.d.ts.map +0 -1
  262. package/dist/viewport/types.d.ts +0 -301
  263. package/dist/viewport/types.d.ts.map +0 -1
  264. package/dist/viewport/viewport-manager.d.ts +0 -118
  265. package/dist/viewport/viewport-manager.d.ts.map +0 -1
@@ -0,0 +1,2933 @@
1
+ import { BaseModifier as O, AnimationModifier as m, AppearanceModifier as d, LifecycleModifier as w, InteractionModifier as l, LayoutModifier as g, ResizableModifier as Q } from "./modifiers/base.js";
2
+ import { ModifierPriority as ee } from "./modifiers/types.js";
3
+ import { J as S, i as E, k as q } from "./scheduler-BKeqwrYE.js";
4
+ import { c as y } from "./effect-B9Knft0b.js";
5
+ const te = {
6
+ center: "center",
7
+ top: "top",
8
+ bottom: "bottom",
9
+ leading: "left",
10
+ trailing: "right"
11
+ };
12
+ function F(i) {
13
+ return typeof i == "string" ? i : i.resolve();
14
+ }
15
+ function C(i, e) {
16
+ return i.map((t, r) => {
17
+ const n = F(t);
18
+ return e && e[r] !== void 0 ? `${n} ${e[r]}%` : n;
19
+ }).join(", ");
20
+ }
21
+ function M(i) {
22
+ return Array.isArray(i) ? `${i[0]}% ${i[1]}%` : te[i] || i;
23
+ }
24
+ function ie(i, e, t) {
25
+ if (t !== void 0)
26
+ return `${t}deg`;
27
+ const r = `${i}-${e}`;
28
+ return {
29
+ "top-bottom": "to bottom",
30
+ "bottom-top": "to top",
31
+ "leading-trailing": "to right",
32
+ "trailing-leading": "to left",
33
+ "topLeading-bottomTrailing": "to bottom right",
34
+ "topTrailing-bottomLeading": "to bottom left",
35
+ "bottomLeading-topTrailing": "to top right",
36
+ "bottomTrailing-topLeading": "to top left"
37
+ }[r] || "to bottom";
38
+ }
39
+ function re(i) {
40
+ const e = ie(i.startPoint, i.endPoint, i.angle), t = C(i.colors, i.stops);
41
+ return `linear-gradient(${e}, ${t})`;
42
+ }
43
+ function se(i) {
44
+ const e = i.shape || "circle", t = M(i.center), r = C(i.colors, i.stops);
45
+ let n;
46
+ return e === "circle" ? n = `${i.endRadius}px` : n = `${i.endRadius}px ${i.endRadius}px`, `radial-gradient(${e} ${n} at ${t}, ${r})`;
47
+ }
48
+ function ne(i) {
49
+ const e = M(i.center), t = `from ${i.startAngle}deg`, r = C(i.colors, i.stops);
50
+ return `conic-gradient(${t} at ${e}, ${r})`;
51
+ }
52
+ function oe(i) {
53
+ const e = M(i.center), t = `from ${i.startAngle}deg`, r = C(i.colors, i.stops);
54
+ return `conic-gradient(${t} at ${e}, ${r})`;
55
+ }
56
+ function ae(i) {
57
+ const e = i.colors.map((t, r) => {
58
+ const n = F(t), s = i.colorStops[r] || `${r * 10}px`;
59
+ return `${n} ${s}`;
60
+ }).join(", ");
61
+ return `repeating-linear-gradient(${i.direction}, ${e})`;
62
+ }
63
+ function ce(i) {
64
+ const e = i.shape || "circle", t = M(i.center), r = i.colors.map((n, s) => {
65
+ const o = F(n), c = i.colorStops[s] || `${s * 10}px`;
66
+ return `${o} ${c}`;
67
+ }).join(", ");
68
+ return `repeating-radial-gradient(${e} at ${t}, ${r})`;
69
+ }
70
+ function de(i) {
71
+ const e = M(i.center), t = C(i.colors, i.stops);
72
+ return `radial-gradient(ellipse ${i.radiusX}px ${i.radiusY}px at ${e}, ${t})`;
73
+ }
74
+ function ue(i) {
75
+ switch (i.type) {
76
+ case "linear":
77
+ return re(i.options);
78
+ case "radial":
79
+ return se(i.options);
80
+ case "angular":
81
+ return ne(i.options);
82
+ case "conic":
83
+ return oe(i.options);
84
+ case "repeating-linear":
85
+ return ae(i.options);
86
+ case "repeating-radial":
87
+ return ce(i.options);
88
+ case "elliptical":
89
+ return de(i.options);
90
+ default:
91
+ throw new Error(`Unknown gradient type: ${i.type}`);
92
+ }
93
+ }
94
+ var le = Object.defineProperty, pe = (i, e, t) => e in i ? le(i, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : i[e] = t, R = (i, e, t) => pe(i, typeof e != "symbol" ? e + "" : e, t);
95
+ class G extends O {
96
+ constructor(e) {
97
+ super(e), R(this, "type", "background"), R(this, "priority", ee.APPEARANCE), R(this, "cleanupFunctions", []);
98
+ }
99
+ apply(e, t) {
100
+ if (!t.element) return;
101
+ this.cleanupFunctions.forEach((n) => n()), this.cleanupFunctions = [];
102
+ const r = this.properties.background;
103
+ if (this.isStateGradient(r) && t.element instanceof HTMLElement)
104
+ this.setupStateGradient(
105
+ t.element,
106
+ r
107
+ );
108
+ else if (this.isStateGradient(r)) {
109
+ const n = this.computeBackgroundStyles(this.properties);
110
+ this.applyStyles(t.element, n);
111
+ } else {
112
+ const n = this.computeBackgroundStyles(this.properties);
113
+ this.applyStyles(t.element, n);
114
+ }
115
+ }
116
+ isStateGradient(e) {
117
+ return e && typeof e == "object" && "default" in e && !("type" in e) && !("resolve" in e);
118
+ }
119
+ setupStateGradient(e, t) {
120
+ const r = this.resolveBackground(t.default);
121
+ if (e.style.background = r, t.animation) {
122
+ const {
123
+ duration: n = 200,
124
+ easing: s = "ease-out",
125
+ delay: o = 0
126
+ } = t.animation;
127
+ e.style.cssText += `transition: background ${n}ms ${s} ${o}ms`;
128
+ }
129
+ t.hover && this.addHoverListeners(e, t), t.active && this.addActiveListeners(e, t), t.focus && this.addFocusListeners(e, t), t.disabled && this.addDisabledObserver(e, t);
130
+ }
131
+ addHoverListeners(e, t) {
132
+ const r = () => {
133
+ this.isDisabled(e) || (e.style.background = this.resolveBackground(t.hover));
134
+ }, n = () => {
135
+ const s = this.getHighestPriorityState(e, t);
136
+ e.style.background = this.resolveBackground(s);
137
+ };
138
+ e.addEventListener("mouseenter", r), e.addEventListener("mouseleave", n), this.cleanupFunctions.push(() => {
139
+ e.removeEventListener("mouseenter", r), e.removeEventListener("mouseleave", n);
140
+ });
141
+ }
142
+ addActiveListeners(e, t) {
143
+ const r = () => {
144
+ this.isDisabled(e) || (e.style.background = this.resolveBackground(t.active));
145
+ }, n = () => {
146
+ const s = this.getMouseInteractionState(e, t);
147
+ e.style.background = this.resolveBackground(s);
148
+ };
149
+ e.addEventListener("mousedown", r), e.addEventListener("mouseup", n), this.cleanupFunctions.push(() => {
150
+ e.removeEventListener("mousedown", r), e.removeEventListener("mouseup", n);
151
+ });
152
+ }
153
+ addFocusListeners(e, t) {
154
+ const r = () => {
155
+ this.isDisabled(e) || (e.style.background = this.resolveBackground(t.focus));
156
+ }, n = () => {
157
+ if (!this.isDisabled(e)) {
158
+ const s = this.getHighestPriorityState(e, t);
159
+ e.style.background = this.resolveBackground(s);
160
+ }
161
+ };
162
+ e.addEventListener("focus", r), e.addEventListener("blur", n), this.cleanupFunctions.push(() => {
163
+ e.removeEventListener("focus", r), e.removeEventListener("blur", n);
164
+ });
165
+ }
166
+ addDisabledObserver(e, t) {
167
+ const r = new MutationObserver(() => {
168
+ if (this.isDisabled(e))
169
+ e.style.background = this.resolveBackground(
170
+ t.disabled
171
+ );
172
+ else {
173
+ const n = this.getHighestPriorityState(e, t);
174
+ e.style.background = this.resolveBackground(n);
175
+ }
176
+ });
177
+ r.observe(e, {
178
+ attributes: !0,
179
+ attributeFilter: ["disabled"]
180
+ }), this.cleanupFunctions.push(() => {
181
+ r.disconnect();
182
+ });
183
+ }
184
+ getMouseInteractionState(e, t) {
185
+ const r = this.isDisabled(e), n = e.matches(":focus"), s = e.matches(":hover");
186
+ return r && t.disabled ? t.disabled : s && t.hover ? t.hover : n && t.focus ? t.focus : t.default;
187
+ }
188
+ getHighestPriorityState(e, t) {
189
+ const r = this.isDisabled(e), n = e.matches(":focus"), s = e.matches(":hover");
190
+ return r && t.disabled ? t.disabled : n && t.focus ? t.focus : s && t.hover ? t.hover : t.default;
191
+ }
192
+ isDisabled(e) {
193
+ const t = e.hasAttribute("disabled");
194
+ return t === !1 ? !1 : t || e.matches && e.matches(":disabled");
195
+ }
196
+ resolveBackground(e) {
197
+ return e == null ? "transparent" : typeof e == "object" && e !== null && "type" in e && "options" in e ? ue(e) : typeof e == "object" && e !== null && "resolve" in e ? e.resolve() : String(e);
198
+ }
199
+ computeBackgroundStyles(e) {
200
+ const t = {};
201
+ if (e.background !== void 0)
202
+ if (this.isStateGradient(e.background)) {
203
+ const r = e.background;
204
+ t.background = this.resolveBackground(r.default);
205
+ } else
206
+ t.background = this.resolveBackground(
207
+ e.background
208
+ );
209
+ return t;
210
+ }
211
+ }
212
+ var he = Object.defineProperty, fe = (i, e, t) => e in i ? he(i, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : i[e] = t, W = (i, e, t) => fe(i, typeof e != "symbol" ? e + "" : e, t);
213
+ class L extends O {
214
+ // Very low priority so raw CSS doesn't override specific modifiers
215
+ constructor(e) {
216
+ const t = {};
217
+ for (const [r, n] of Object.entries(e))
218
+ typeof n == "function" && "peek" in n ? t[r] = n.peek() : t[r] = n;
219
+ super(t), W(this, "type", "css"), W(this, "priority", 5);
220
+ }
221
+ apply(e, t) {
222
+ if (!t.element) return;
223
+ const r = this.computeCSSStyles(this.properties);
224
+ this.applyStyles(t.element, r);
225
+ }
226
+ computeCSSStyles(e) {
227
+ const t = {};
228
+ for (const [r, n] of Object.entries(e))
229
+ if (n !== void 0) {
230
+ const s = this.toCSSProperty(r);
231
+ t[s] = this.toCSSValue(n);
232
+ }
233
+ return t;
234
+ }
235
+ }
236
+ function me(i) {
237
+ return new L(i);
238
+ }
239
+ function ge(i, e) {
240
+ return new L({ [i]: e });
241
+ }
242
+ function ye(i, e) {
243
+ const t = i.startsWith("--") ? i : `--${i}`;
244
+ return new L({ [t]: e });
245
+ }
246
+ function be(i, e, t) {
247
+ const r = i.charAt(0).toUpperCase() + i.slice(1), n = `-${i.toLowerCase()}-${e}`, s = r + e.charAt(0).toUpperCase() + e.slice(1);
248
+ return new L({
249
+ [n]: t,
250
+ [s]: t
251
+ });
252
+ }
253
+ var ve = Object.defineProperty, we = (i, e, t) => e in i ? ve(i, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : i[e] = t, V = (i, e, t) => we(i, typeof e != "symbol" ? e + "" : e, t);
254
+ class $ {
255
+ /**
256
+ * Apply basic sanitization to HTML content
257
+ * Removes dangerous patterns and restricts to allowed elements/attributes
258
+ */
259
+ static sanitize(e, t = {}) {
260
+ if (!e || typeof e != "string")
261
+ return "";
262
+ let r = e;
263
+ for (const n of this.DANGEROUS_PATTERNS)
264
+ r = r.replace(n, "");
265
+ if (t.validateDOM !== !1 && (r = this.validateDOMStructure(r, t)), t.customPatterns)
266
+ for (const n of t.customPatterns)
267
+ r = r.replace(n, "");
268
+ return r.trim();
269
+ }
270
+ /**
271
+ * Validate DOM structure and attributes using DOMParser
272
+ */
273
+ static validateDOMStructure(e, t) {
274
+ try {
275
+ const s = new DOMParser().parseFromString(`<div>${e}</div>`, "text/html").body.firstChild;
276
+ return s ? (this.cleanElement(s, t), s.innerHTML) : "";
277
+ } catch (r) {
278
+ return console.warn("BasicSanitizer: DOM validation failed, using pattern-based sanitization only", r), e;
279
+ }
280
+ }
281
+ /**
282
+ * Recursively clean element and its children
283
+ */
284
+ static cleanElement(e, t) {
285
+ const r = e.tagName.toLowerCase();
286
+ if (!(t.allowedTags || this.ALLOWED_TAGS).includes(r)) {
287
+ const u = e.textContent || "";
288
+ if (u.trim() && e.parentNode) {
289
+ const h = e.ownerDocument.createTextNode(u);
290
+ e.parentNode.insertBefore(h, e);
291
+ }
292
+ e.remove();
293
+ return;
294
+ }
295
+ const s = this.getAllowedAttributesForTag(r, t), o = [];
296
+ for (let u = 0; u < e.attributes.length; u++) {
297
+ const h = e.attributes[u];
298
+ s.includes(h.name) && this.isAttributeValueSafe(h.name, h.value) || o.push(h.name);
299
+ }
300
+ o.forEach((u) => e.removeAttribute(u)), Array.from(e.children).forEach((u) => this.cleanElement(u, t));
301
+ }
302
+ /**
303
+ * Get allowed attributes for a specific tag
304
+ */
305
+ static getAllowedAttributesForTag(e, t) {
306
+ const r = t.allowedAttributes || this.ALLOWED_ATTRIBUTES, n = r["*"] || [], s = r[e] || [];
307
+ return [...n, ...s];
308
+ }
309
+ /**
310
+ * Check if attribute value is safe
311
+ */
312
+ static isAttributeValueSafe(e, t) {
313
+ return ["href", "src", "action"].includes(e) ? this.isUrlSafe(t) : !/javascript:/i.test(t);
314
+ }
315
+ /**
316
+ * Validate URL safety
317
+ */
318
+ static isUrlSafe(e) {
319
+ if (!e || e.startsWith("/") || e.startsWith("./") || e.startsWith("#"))
320
+ return !0;
321
+ try {
322
+ const t = new URL(e);
323
+ return ["http:", "https:", "mailto:", "tel:", "ftp:"].includes(t.protocol);
324
+ } catch {
325
+ return !1;
326
+ }
327
+ }
328
+ }
329
+ V($, "DANGEROUS_PATTERNS", [
330
+ // Script tags (including nested/malformed ones)
331
+ /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
332
+ /<[^>]*<script[^>]*>/gi,
333
+ // Nested script tags
334
+ /script>/gi,
335
+ // Catch any remaining script closings
336
+ // Event handlers (onclick, onload, etc.)
337
+ /\s*on\w+\s*=\s*(?:"[^"]*"|'[^']*'|[^\s>]*)/gi,
338
+ // JavaScript URLs
339
+ /(?:href|src)\s*=\s*["']?javascript:[^"'\s>]*/gi,
340
+ // Data URLs with scripts (basic detection)
341
+ /(?:href|src)\s*=\s*["']?data:[^"'\s>]*(?:script|javascript)[^"'\s>]*/gi,
342
+ // Dangerous elements
343
+ /<(?:iframe|object|embed|form|input|meta|link)\b[^>]*>/gi,
344
+ // Style tags with JavaScript
345
+ /<style\b[^<]*(?:(?!<\/style>)<[^<]*)*<\/style>/gi,
346
+ // Import statements in CSS
347
+ /@import\s+[^;]+;?/gi,
348
+ // Expression() in CSS (IE specific, but good to block)
349
+ /expression\s*\([^)]*\)/gi,
350
+ // Additional dangerous patterns
351
+ /alert\s*\([^)]*\)/gi,
352
+ // Alert calls
353
+ /javascript:/gi,
354
+ // Any javascript: protocol
355
+ /vbscript:/gi
356
+ // VBScript protocol
357
+ ]);
358
+ V($, "ALLOWED_TAGS", [
359
+ "p",
360
+ "br",
361
+ "strong",
362
+ "em",
363
+ "u",
364
+ "i",
365
+ "b",
366
+ "s",
367
+ "sup",
368
+ "sub",
369
+ "h1",
370
+ "h2",
371
+ "h3",
372
+ "h4",
373
+ "h5",
374
+ "h6",
375
+ "ul",
376
+ "ol",
377
+ "li",
378
+ "dl",
379
+ "dt",
380
+ "dd",
381
+ "blockquote",
382
+ "pre",
383
+ "code",
384
+ "kbd",
385
+ "samp",
386
+ "a",
387
+ "img",
388
+ "table",
389
+ "thead",
390
+ "tbody",
391
+ "tr",
392
+ "td",
393
+ "th",
394
+ "div",
395
+ "span",
396
+ "section",
397
+ "article",
398
+ "aside",
399
+ "header",
400
+ "footer",
401
+ "hr"
402
+ ]);
403
+ V($, "ALLOWED_ATTRIBUTES", {
404
+ "*": ["class", "id", "title", "lang", "dir"],
405
+ a: ["href", "target", "rel"],
406
+ img: ["src", "alt", "width", "height"],
407
+ table: ["cellpadding", "cellspacing", "border"],
408
+ td: ["colspan", "rowspan"],
409
+ th: ["colspan", "rowspan", "scope"]
410
+ });
411
+ var Se = Object.defineProperty, Ee = (i, e, t) => e in i ? Se(i, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : i[e] = t, Te = (i, e, t) => Ee(i, e + "", t);
412
+ class Y {
413
+ /**
414
+ * Validate HTML content in development mode
415
+ */
416
+ static validate(e, t = {}) {
417
+ if (t.suppressWarnings)
418
+ return { isValid: !0, warnings: [] };
419
+ const r = [];
420
+ for (const { pattern: n, message: s } of this.SUSPICIOUS_PATTERNS)
421
+ n.test(e) && r.push(s);
422
+ return this.looksLikeUserInput(e) && r.push("Content appears to contain user input - ensure it's properly sanitized"), {
423
+ isValid: r.length === 0,
424
+ warnings: r
425
+ };
426
+ }
427
+ static looksLikeUserInput(e) {
428
+ return [
429
+ /&lt;script/i,
430
+ // HTML-encoded script tags
431
+ /&amp;#/,
432
+ // HTML entities that might be user input
433
+ /%3Cscript/i,
434
+ // URL-encoded script tags
435
+ /\{\{.*\}\}/,
436
+ // Template syntax
437
+ /\$\{.*\}/
438
+ // ES6 template literals
439
+ ].some((r) => r.test(e));
440
+ }
441
+ }
442
+ Te(Y, "SUSPICIOUS_PATTERNS", [
443
+ { pattern: /<script/i, message: "Script tags detected" },
444
+ { pattern: /javascript:/i, message: "JavaScript URLs detected" },
445
+ { pattern: /on\w+\s*=/i, message: "Event handlers detected" },
446
+ { pattern: /<iframe/i, message: "Iframe elements detected" },
447
+ { pattern: /<object/i, message: "Object elements detected" },
448
+ { pattern: /<embed/i, message: "Embed elements detected" },
449
+ { pattern: /<form/i, message: "Form elements detected" },
450
+ { pattern: /data:.*script/i, message: "Data URLs with scripts detected" },
451
+ { pattern: /@import/i, message: "CSS import statements detected" },
452
+ { pattern: /expression\s*\(/i, message: "CSS expressions detected" }
453
+ ]);
454
+ var _e = Object.defineProperty, Ae = (i, e, t) => e in i ? _e(i, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : i[e] = t, z = (i, e, t) => Ae(i, typeof e != "symbol" ? e + "" : e, t);
455
+ class Ce extends O {
456
+ // After layout, before styling
457
+ constructor(e = {}) {
458
+ super(e), z(this, "type", "asHTML"), z(this, "priority", 25);
459
+ }
460
+ apply(e, t) {
461
+ if (!t.element || !t.componentInstance) return;
462
+ const r = t.componentInstance;
463
+ if (!this.isTextComponent(r))
464
+ throw new Error(
465
+ `AsHTML modifier can only be applied to Text components. Found: ${r.type || "unknown"} component. Use Text('<your-html>').modifier.asHTML() instead.`
466
+ );
467
+ const n = this.getTextComponentContent(r);
468
+ if (!n) {
469
+ process.env.NODE_ENV === "development" && console.warn("asHTML: No content found in Text component");
470
+ return;
471
+ }
472
+ const s = this.sanitizeHTML(n);
473
+ for (; t.element.firstChild; )
474
+ t.element.removeChild(t.element.firstChild);
475
+ t.element.innerHTML = s, t.element.__tachui_asHTML = !0, process.env.NODE_ENV === "development" && this.validateContent(n);
476
+ }
477
+ isTextComponent(e) {
478
+ return e.type === "Text" || e.constructor?.name === "TextComponent" || e.__tachui_component_type === "Text" || e.props && e.props.__componentType === "Text" || // Check componentMetadata for enhanced Text components
479
+ e.componentMetadata && e.componentMetadata.type === "Text" || e.componentMetadata && e.componentMetadata.originalType === "Text";
480
+ }
481
+ getTextComponentContent(e) {
482
+ if (typeof e.content == "string")
483
+ return e.content;
484
+ if (e.props && typeof e.props.content == "string")
485
+ return e.props.content;
486
+ if (e.children && Array.isArray(e.children) && e.children.length > 0) {
487
+ const t = e.children[0];
488
+ if (t && t.type === "text" && typeof t.text == "string")
489
+ return t.text;
490
+ }
491
+ if (typeof e.text == "string")
492
+ return e.text;
493
+ if (e.props) {
494
+ if (typeof e.props.text == "string")
495
+ return e.props.text;
496
+ if (typeof e.props.children == "string")
497
+ return e.props.children;
498
+ }
499
+ return typeof e == "string" ? e : "";
500
+ }
501
+ sanitizeHTML(e) {
502
+ return !e || typeof e != "string" ? "" : this.properties.skipSanitizer ? e : this.properties.customSanitizer ? this.properties.customSanitizer(e) : $.sanitize(e, this.properties);
503
+ }
504
+ validateContent(e) {
505
+ if (this.properties.__suppressWarnings) return;
506
+ const t = Y.validate(e, {
507
+ suppressWarnings: this.properties.__suppressWarnings
508
+ });
509
+ !t.isValid && t.warnings.length > 0 && (console.group("🔒 AsHTML Security Warnings"), console.warn("Potentially dangerous content detected in asHTML:"), t.warnings.forEach((r) => {
510
+ console.warn(` • ${r}`);
511
+ }), console.warn("Consider using a more comprehensive sanitization solution like DOMPurify"), console.warn("To suppress these warnings, use { __suppressWarnings: true }"), console.groupEnd()), this.properties.skipSanitizer && console.warn("🚨 AsHTML: Sanitization is DISABLED. Ensure content is safe!");
512
+ }
513
+ }
514
+ function Me(i = {}) {
515
+ return new Ce(i);
516
+ }
517
+ const x = {
518
+ /**
519
+ * Set foreground (text) color
520
+ */
521
+ foregroundColor(i) {
522
+ return new d({ foregroundColor: i });
523
+ },
524
+ /**
525
+ * Set frame dimensions with support for infinity
526
+ */
527
+ frame(i, e, t) {
528
+ return new g({
529
+ frame: {
530
+ width: i,
531
+ height: e,
532
+ ...t
533
+ }
534
+ });
535
+ },
536
+ /**
537
+ * Set padding on all sides
538
+ */
539
+ padding(i) {
540
+ return new g({ padding: i });
541
+ },
542
+ /**
543
+ * Set margin on all sides
544
+ */
545
+ margin(i) {
546
+ return new g({ margin: i });
547
+ },
548
+ /**
549
+ * Set content alignment
550
+ */
551
+ alignment(i) {
552
+ return new g({ alignment: i });
553
+ },
554
+ /**
555
+ * Set layout priority for ZStack container sizing and flexible layout
556
+ * Higher priority views determine container size in ZStack
557
+ */
558
+ layoutPriority(i) {
559
+ return new g({ layoutPriority: i });
560
+ }
561
+ }, f = {
562
+ /**
563
+ * Set foreground (text) color
564
+ */
565
+ foregroundColor(i) {
566
+ return new d({ foregroundColor: i });
567
+ },
568
+ /**
569
+ * Set background color
570
+ */
571
+ backgroundColor(i) {
572
+ return new d({ backgroundColor: i });
573
+ },
574
+ /**
575
+ * Set background (supports gradients)
576
+ */
577
+ background(i) {
578
+ return new G({ background: i });
579
+ },
580
+ /**
581
+ * Set font properties
582
+ */
583
+ font(i) {
584
+ return new d({ font: i });
585
+ },
586
+ /**
587
+ * Set font size
588
+ */
589
+ fontSize(i) {
590
+ return new d({ font: { size: i } });
591
+ },
592
+ /**
593
+ * Set font weight
594
+ */
595
+ fontWeight(i) {
596
+ return new d({ font: { weight: i } });
597
+ },
598
+ /**
599
+ * Set font family
600
+ */
601
+ fontFamily(i) {
602
+ return new d({ font: { family: i } });
603
+ },
604
+ /**
605
+ * Set opacity
606
+ */
607
+ opacity(i) {
608
+ return new d({ opacity: i });
609
+ },
610
+ /**
611
+ * Set corner radius (enhanced)
612
+ */
613
+ cornerRadius(i) {
614
+ return new d({ cornerRadius: i });
615
+ },
616
+ /**
617
+ * Set border
618
+ */
619
+ border(i, e = "#000000", t = "solid") {
620
+ return new d({
621
+ border: { width: i, color: e, style: t }
622
+ });
623
+ },
624
+ /**
625
+ * Set detailed border properties
626
+ */
627
+ borderDetailed(i) {
628
+ return new d({ border: i });
629
+ }
630
+ // Shadow functionality moved to @tachui/effects package
631
+ }, A = {
632
+ /**
633
+ * Add tap handler
634
+ */
635
+ onTap(i) {
636
+ return new l({ onTap: i });
637
+ },
638
+ /**
639
+ * Add hover handler
640
+ */
641
+ onHover(i) {
642
+ return new l({ onHover: i });
643
+ },
644
+ /**
645
+ * Add focus handler
646
+ */
647
+ onFocus(i) {
648
+ return new l({ onFocus: i });
649
+ },
650
+ /**
651
+ * Set disabled state
652
+ */
653
+ disabled(i = !0) {
654
+ return new l({ disabled: i });
655
+ },
656
+ /**
657
+ * Set accessibility label
658
+ */
659
+ accessibilityLabel(i) {
660
+ return new l({ accessibilityLabel: i });
661
+ },
662
+ /**
663
+ * Set accessibility hint
664
+ */
665
+ accessibilityHint(i) {
666
+ return new l({ accessibilityHint: i });
667
+ }
668
+ }, D = {
669
+ /**
670
+ * Add transition
671
+ */
672
+ transition(i = "all", e = 300, t = "ease", r = 0) {
673
+ return new m({
674
+ transition: { property: i, duration: e, easing: t, delay: r }
675
+ });
676
+ },
677
+ /**
678
+ * Add detailed transition
679
+ */
680
+ transitionDetailed(i) {
681
+ return new m({ transition: i });
682
+ },
683
+ /**
684
+ * Add animation
685
+ */
686
+ animation(i) {
687
+ return new m({ animation: i });
688
+ },
689
+ /**
690
+ * Add fade in animation
691
+ */
692
+ fadeIn(i = 300) {
693
+ return new m({
694
+ animation: {
695
+ keyframes: {
696
+ "0%": { opacity: "0" },
697
+ "100%": { opacity: "1" }
698
+ },
699
+ duration: i,
700
+ easing: "ease-out"
701
+ }
702
+ });
703
+ },
704
+ /**
705
+ * Add fade out animation
706
+ */
707
+ fadeOut(i = 300) {
708
+ return new m({
709
+ animation: {
710
+ keyframes: {
711
+ "0%": { opacity: "1" },
712
+ "100%": { opacity: "0" }
713
+ },
714
+ duration: i,
715
+ easing: "ease-in"
716
+ }
717
+ });
718
+ },
719
+ /**
720
+ * Add slide in animation
721
+ */
722
+ slideIn(i = "up", e = 300, t = 20) {
723
+ const r = {
724
+ up: [`translateY(${t}px)`, "translateY(0)"],
725
+ down: [`translateY(-${t}px)`, "translateY(0)"],
726
+ left: [`translateX(${t}px)`, "translateX(0)"],
727
+ right: [`translateX(-${t}px)`, "translateX(0)"]
728
+ }, [n, s] = r[i];
729
+ return new m({
730
+ animation: {
731
+ keyframes: {
732
+ "0%": { transform: n, opacity: "0" },
733
+ "100%": { transform: s, opacity: "1" }
734
+ },
735
+ duration: e,
736
+ easing: "ease-out"
737
+ }
738
+ });
739
+ },
740
+ /**
741
+ * Add scale animation
742
+ */
743
+ scaleAnimation(i = 0.8, e = 1, t = 300) {
744
+ return new m({
745
+ animation: {
746
+ keyframes: {
747
+ "0%": { transform: `scale(${i})`, opacity: "0" },
748
+ "100%": { transform: `scale(${e})`, opacity: "1" }
749
+ },
750
+ duration: t,
751
+ easing: "ease-out"
752
+ }
753
+ });
754
+ }
755
+ }, xe = {
756
+ /**
757
+ * Execute handler when component appears in viewport
758
+ */
759
+ onAppear(i) {
760
+ return new w({ onAppear: i });
761
+ },
762
+ /**
763
+ * Execute handler when component disappears from viewport
764
+ */
765
+ onDisappear(i) {
766
+ return new w({ onDisappear: i });
767
+ },
768
+ /**
769
+ * Execute async task with automatic cancellation on component unmount
770
+ */
771
+ task(i, e) {
772
+ return new w({
773
+ task: {
774
+ operation: i,
775
+ id: e?.id,
776
+ priority: e?.priority || "default"
777
+ }
778
+ });
779
+ },
780
+ /**
781
+ * Add pull-to-refresh functionality
782
+ */
783
+ refreshable(i, e) {
784
+ return new w({
785
+ refreshable: {
786
+ onRefresh: i,
787
+ isRefreshing: e
788
+ }
789
+ });
790
+ }
791
+ }, Le = {
792
+ /**
793
+ * Card-like appearance
794
+ */
795
+ card(i = 16) {
796
+ return [
797
+ f.backgroundColor("#ffffff"),
798
+ f.cornerRadius(8),
799
+ // shadow moved to @tachui/effects package
800
+ x.padding(i)
801
+ ];
802
+ },
803
+ /**
804
+ * Button-like appearance
805
+ */
806
+ button(i = "#007AFF", e = "#ffffff") {
807
+ return [
808
+ f.backgroundColor(i),
809
+ f.foregroundColor(e),
810
+ f.cornerRadius(6),
811
+ x.padding(12),
812
+ // Simplified to single value for now
813
+ A.onHover((t) => {
814
+ }),
815
+ D.transition("all", 150)
816
+ ];
817
+ },
818
+ /**
819
+ * Input field appearance
820
+ */
821
+ input() {
822
+ return [
823
+ f.border(1, "#d1d5db"),
824
+ f.cornerRadius(4),
825
+ x.padding(8),
826
+ D.transition("border-color", 150),
827
+ A.onFocus((i) => {
828
+ })
829
+ ];
830
+ },
831
+ /**
832
+ * Typography presets
833
+ */
834
+ typography: {
835
+ title: () => [
836
+ f.fontSize(24),
837
+ f.fontWeight("bold")
838
+ ],
839
+ heading: () => [
840
+ f.fontSize(20),
841
+ f.fontWeight("600")
842
+ ],
843
+ body: () => [
844
+ f.fontSize(16),
845
+ f.fontWeight("normal")
846
+ ],
847
+ caption: () => [
848
+ f.fontSize(12),
849
+ f.fontWeight("normal"),
850
+ f.opacity(0.7)
851
+ ]
852
+ }
853
+ }, Ci = {
854
+ ...x,
855
+ ...f,
856
+ ...A,
857
+ ...D,
858
+ ...xe,
859
+ presets: Le
860
+ };
861
+ var $e = Object.defineProperty, Pe = (i, e, t) => e in i ? $e(i, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : i[e] = t, Ie = (i, e, t) => Pe(i, e + "", t);
862
+ const a = (i) => ({
863
+ type: i,
864
+ priority: 50,
865
+ properties: {},
866
+ apply: () => {
867
+ }
868
+ }), Re = (...i) => a("borderBottom"), Ne = (...i) => a("borderLeft"), ke = (...i) => a("borderRight"), Be = (...i) => a("borderTop"), De = (...i) => a("alignItems"), He = (...i) => a("flexDirection"), Oe = (...i) => a("flexGrow"), Fe = (...i) => a("flexShrink"), Ve = (...i) => a("flexWrap"), We = (...i) => a("gap"), ze = (...i) => a("justifyContent"), N = (...i) => p("margin", ...i), je = (...i) => p("marginBottom", ...i), Ue = (...i) => p("marginHorizontal", ...i), qe = (...i) => p("marginLeft", ...i), Ge = (...i) => p("marginRight", ...i), Ye = (...i) => p("marginTop", ...i), Xe = (...i) => p("marginVertical", ...i), j = (...i) => p("padding", ...i), Je = (...i) => p("paddingBottom", ...i), Ke = (...i) => p("paddingHorizontal", ...i), Ze = (...i) => p("paddingLeading", ...i), Qe = (...i) => p("paddingLeft", ...i), et = (...i) => p("paddingRight", ...i), tt = (...i) => p("paddingTop", ...i), it = (...i) => p("paddingTrailing", ...i), rt = (...i) => p("paddingVertical", ...i), st = (...i) => p("height", ...i), nt = (...i) => p("maxHeight", ...i), ot = (...i) => p("maxWidth", ...i), at = (...i) => p("minHeight", ...i), ct = (...i) => p("minWidth", ...i), dt = (...i) => p("size", ...i), ut = (...i) => p("width", ...i), lt = (...i) => a("letterSpacing"), pt = (...i) => a("lineHeight"), ht = (...i) => a("overflow"), ft = (...i) => a("textAlign"), mt = (...i) => a("textDecoration"), gt = (...i) => a("textOverflow"), U = (i) => ({
869
+ type: "typography",
870
+ priority: 50,
871
+ properties: { transform: i },
872
+ apply: () => {
873
+ }
874
+ }), yt = (...i) => a("typography"), bt = (...i) => a("whiteSpace"), vt = (i) => ({
875
+ type: "backgroundClip",
876
+ priority: 50,
877
+ properties: {
878
+ backgroundImage: i,
879
+ backgroundClip: "text",
880
+ webkitBackgroundClip: "text",
881
+ color: "transparent",
882
+ webkitTextFillColor: "transparent"
883
+ },
884
+ apply: () => {
885
+ }
886
+ }), wt = (...i) => a("lineClamp"), St = (...i) => a("wordBreak"), Et = (...i) => a("overflowWrap"), Tt = (...i) => a("hyphens"), _t = (...i) => a("cursor"), At = (...i) => a("display"), Ct = (...i) => a("overflowX"), Mt = (...i) => a("overflowY"), xt = (...i) => a("outline"), Lt = (...i) => a("outlineOffset");
887
+ function p(i, ...e) {
888
+ const t = Qt.get(i);
889
+ if (t)
890
+ try {
891
+ return t.apply(null, e);
892
+ } catch (r) {
893
+ console.warn(`Error creating modifier '${i}':`, r);
894
+ }
895
+ return console.warn(`Modifier '${i}' not found in registry, using stub`), a(i);
896
+ }
897
+ const $t = (i = "all", e = 300, t = "ease", r = 0) => {
898
+ let n;
899
+ return i === "none" ? n = "none" : n = `${i} ${e}ms ${t} ${r}ms`, {
900
+ type: "transition",
901
+ priority: 60,
902
+ properties: { transition: n },
903
+ apply: () => {
904
+ }
905
+ };
906
+ }, Pt = (...i) => a("fadeTransition"), It = (...i) => a("transformTransition"), Rt = (...i) => a("colorTransition"), Nt = (...i) => a("layoutTransition"), kt = (...i) => a("buttonTransition"), Bt = (...i) => a("cardTransition"), Dt = (...i) => a("modalTransition"), Ht = (...i) => a("smoothTransition"), Ot = (...i) => a("quickTransition"), Ft = (...i) => a("slowTransition"), Vt = (...i) => a("scrollModifier"), Wt = (...i) => a("scrollBehavior"), zt = (...i) => a("overscrollBehavior"), jt = (...i) => a("overscrollBehaviorX"), Ut = (...i) => a("overscrollBehaviorY"), qt = (...i) => a("scrollMargin"), Gt = (...i) => a("scrollPadding"), Yt = (...i) => a("scrollSnap");
907
+ class Xt {
908
+ constructor(e) {
909
+ this.component = e, Ie(this, "modifiers", []);
910
+ }
911
+ frame(e, t) {
912
+ let r;
913
+ return typeof e == "object" ? r = e : (r = {}, e !== void 0 && (r.width = e), t !== void 0 && (r.height = t)), this.modifiers.push(new g({ frame: r })), this;
914
+ }
915
+ margin(e) {
916
+ if (typeof e == "number" || typeof e == "string")
917
+ this.modifiers.push(N(e));
918
+ else {
919
+ const t = e;
920
+ t.vertical !== void 0 || t.horizontal !== void 0 ? this.modifiers.push(
921
+ N({
922
+ vertical: t.vertical,
923
+ horizontal: t.horizontal
924
+ })
925
+ ) : (t.top !== void 0 || t.right !== void 0 || t.bottom !== void 0 || t.left !== void 0) && this.modifiers.push(
926
+ N({
927
+ top: t.top,
928
+ right: t.right,
929
+ bottom: t.bottom,
930
+ left: t.left
931
+ })
932
+ );
933
+ }
934
+ return this;
935
+ }
936
+ layoutPriority(e) {
937
+ return this.modifiers.push(new g({ layoutPriority: e })), this;
938
+ }
939
+ // New multi-property modifiers
940
+ size(e) {
941
+ return this.modifiers.push(dt(e)), this;
942
+ }
943
+ width(e) {
944
+ return this.modifiers.push(ut(e)), this;
945
+ }
946
+ height(e) {
947
+ return this.modifiers.push(st(e)), this;
948
+ }
949
+ maxWidth(e) {
950
+ return this.modifiers.push(ot(e)), this;
951
+ }
952
+ minWidth(e) {
953
+ return this.modifiers.push(ct(e)), this;
954
+ }
955
+ maxHeight(e) {
956
+ return this.modifiers.push(nt(e)), this;
957
+ }
958
+ minHeight(e) {
959
+ return this.modifiers.push(at(e)), this;
960
+ }
961
+ marginTop(e) {
962
+ return this.modifiers.push(Ye(e)), this;
963
+ }
964
+ marginBottom(e) {
965
+ return this.modifiers.push(je(e)), this;
966
+ }
967
+ marginHorizontal(e) {
968
+ return this.modifiers.push(Ue(e)), this;
969
+ }
970
+ marginVertical(e) {
971
+ return this.modifiers.push(Xe(e)), this;
972
+ }
973
+ marginLeft(e) {
974
+ return this.modifiers.push(qe(e)), this;
975
+ }
976
+ marginRight(e) {
977
+ return this.modifiers.push(Ge(e)), this;
978
+ }
979
+ padding(e) {
980
+ return typeof e == "number" ? this.modifiers.push(j(e)) : this.modifiers.push(j(e)), this;
981
+ }
982
+ paddingTop(e) {
983
+ return this.modifiers.push(tt(e)), this;
984
+ }
985
+ paddingBottom(e) {
986
+ return this.modifiers.push(Je(e)), this;
987
+ }
988
+ paddingLeft(e) {
989
+ return this.modifiers.push(Qe(e)), this;
990
+ }
991
+ paddingRight(e) {
992
+ return this.modifiers.push(et(e)), this;
993
+ }
994
+ paddingLeading(e) {
995
+ return this.modifiers.push(Ze(e)), this;
996
+ }
997
+ paddingTrailing(e) {
998
+ return this.modifiers.push(it(e)), this;
999
+ }
1000
+ paddingHorizontal(e) {
1001
+ return this.modifiers.push(Ke(e)), this;
1002
+ }
1003
+ paddingVertical(e) {
1004
+ return this.modifiers.push(rt(e)), this;
1005
+ }
1006
+ // Typography modifiers
1007
+ typography(e) {
1008
+ return this.modifiers.push(yt(e)), this;
1009
+ }
1010
+ textAlign(e) {
1011
+ return this.modifiers.push(ft(e)), this;
1012
+ }
1013
+ textTransform(e) {
1014
+ return this.modifiers.push(U(e)), this;
1015
+ }
1016
+ gradientText(e) {
1017
+ return this.modifiers.push(vt(e)), this;
1018
+ }
1019
+ // Text Modifiers
1020
+ lineClamp(e) {
1021
+ return this.modifiers.push(wt(e)), this;
1022
+ }
1023
+ wordBreak(e) {
1024
+ return this.modifiers.push(St(e)), this;
1025
+ }
1026
+ overflowWrap(e) {
1027
+ return this.modifiers.push(Et(e)), this;
1028
+ }
1029
+ hyphens(e) {
1030
+ return this.modifiers.push(Tt(e)), this;
1031
+ }
1032
+ // position() and zIndex() methods have been migrated to @tachui/modifiers/layout
1033
+ // for enhanced SwiftUI-compatible functionality
1034
+ // Backdrop filter modifiers - moved to @tachui/effects but keeping stubs for compatibility
1035
+ backdropFilter() {
1036
+ throw process.env.NODE_ENV === "development" && console.warn(
1037
+ "backdropFilter has been moved to @tachui/effects. Install @tachui/effects and use .apply(backdropFilter(...)) instead."
1038
+ ), new Error(
1039
+ "backdropFilter is no longer available in @tachui/core. Please install @tachui/effects."
1040
+ );
1041
+ }
1042
+ glassmorphism() {
1043
+ throw process.env.NODE_ENV === "development" && console.warn(
1044
+ "glassmorphism has been moved to @tachui/effects. Install @tachui/effects and use .apply(glassmorphism(...)) instead."
1045
+ ), new Error(
1046
+ "glassmorphism is no longer available in @tachui/core. Please install @tachui/effects."
1047
+ );
1048
+ }
1049
+ letterSpacing(e) {
1050
+ return this.modifiers.push(lt(e)), this;
1051
+ }
1052
+ lineHeight(e) {
1053
+ return this.modifiers.push(pt(e)), this;
1054
+ }
1055
+ textOverflow(e) {
1056
+ return this.modifiers.push(gt(e)), this;
1057
+ }
1058
+ whiteSpace(e) {
1059
+ return this.modifiers.push(bt(e)), this;
1060
+ }
1061
+ overflow(e) {
1062
+ return this.modifiers.push(ht(e)), this;
1063
+ }
1064
+ // Border modifiers
1065
+ borderTop(e, t, r) {
1066
+ return this.modifiers.push(Be(e, t, r)), this;
1067
+ }
1068
+ borderRight(e, t, r) {
1069
+ return this.modifiers.push(ke(e, t, r)), this;
1070
+ }
1071
+ borderBottom(e, t, r) {
1072
+ return this.modifiers.push(Re(e, t, r)), this;
1073
+ }
1074
+ borderLeft(e, t, r) {
1075
+ return this.modifiers.push(Ne(e, t, r)), this;
1076
+ }
1077
+ // Flexbox modifiers
1078
+ flexGrow(e) {
1079
+ return this.modifiers.push(Oe(e)), this;
1080
+ }
1081
+ flexShrink(e) {
1082
+ return this.modifiers.push(Fe(e)), this;
1083
+ }
1084
+ justifyContent(e) {
1085
+ return this.modifiers.push(ze(e)), this;
1086
+ }
1087
+ alignItems(e) {
1088
+ return this.modifiers.push(De(e)), this;
1089
+ }
1090
+ gap(e) {
1091
+ return this.modifiers.push(We(e)), this;
1092
+ }
1093
+ flexDirection(e) {
1094
+ return this.modifiers.push(He(e)), this;
1095
+ }
1096
+ flexWrap(e) {
1097
+ return this.modifiers.push(Ve(e)), this;
1098
+ }
1099
+ // Utility modifiers
1100
+ cursor(e) {
1101
+ return this.modifiers.push(_t(e)), this;
1102
+ }
1103
+ overflowY(e) {
1104
+ return this.modifiers.push(Mt(e)), this;
1105
+ }
1106
+ overflowX(e) {
1107
+ return this.modifiers.push(Ct(e)), this;
1108
+ }
1109
+ outline(e) {
1110
+ return this.modifiers.push(xt(e)), this;
1111
+ }
1112
+ outlineOffset(e) {
1113
+ return this.modifiers.push(Lt(e)), this;
1114
+ }
1115
+ display(e) {
1116
+ return this.modifiers.push(At(e)), this;
1117
+ }
1118
+ // Raw CSS modifiers - using imported functions from ./css
1119
+ css(e) {
1120
+ return this.modifiers.push(me(e)), this;
1121
+ }
1122
+ cssProperty(e, t) {
1123
+ return this.modifiers.push(ge(e, t)), this;
1124
+ }
1125
+ cssVariable(e, t) {
1126
+ return this.modifiers.push(ye(e, t)), this;
1127
+ }
1128
+ cssVendor(e, t, r) {
1129
+ return this.modifiers.push(be(e, t, r)), this;
1130
+ }
1131
+ textCase(e) {
1132
+ return this.modifiers.push(U(e)), this;
1133
+ }
1134
+ aspectRatio(e, t = "fit") {
1135
+ throw new Error(
1136
+ 'Layout modifiers have been moved to @tachui/modifiers. Please import { aspectRatio } from "@tachui/modifiers" and use it directly instead of chaining it on components.'
1137
+ );
1138
+ }
1139
+ textDecoration(e) {
1140
+ return this.modifiers.push(mt(e)), this;
1141
+ }
1142
+ // Phase 1 SwiftUI modifiers
1143
+ // Note: clipped() has been moved to @tachui/modifiers
1144
+ // Phase 2 SwiftUI modifiers
1145
+ // Note: clipShape() and overlay() have been moved to @tachui/modifiers
1146
+ // Phase 3 SwiftUI modifiers - Critical Transform Modifiers
1147
+ absolutePosition(e, t) {
1148
+ return this.modifiers.push(
1149
+ new g({
1150
+ position: {
1151
+ x: e,
1152
+ y: t
1153
+ }
1154
+ })
1155
+ ), this;
1156
+ }
1157
+ // Appearance modifiers
1158
+ foregroundColor(e) {
1159
+ return this.modifiers.push(new d({ foregroundColor: e })), this;
1160
+ }
1161
+ backgroundColor(e) {
1162
+ return this.modifiers.push(new d({ backgroundColor: e })), this;
1163
+ }
1164
+ background(e) {
1165
+ return this.modifiers.push(new G({ background: e })), this;
1166
+ }
1167
+ font(e) {
1168
+ let t;
1169
+ return typeof e == "object" ? t = e : t = e !== void 0 ? { size: e } : {}, this.modifiers.push(new d({ font: t })), this;
1170
+ }
1171
+ fontWeight(e) {
1172
+ return this.modifiers.push(new d({ font: { weight: e } })), this;
1173
+ }
1174
+ fontSize(e) {
1175
+ return this.modifiers.push(new d({ font: { size: e } })), this;
1176
+ }
1177
+ fontFamily(e) {
1178
+ return this.modifiers.push(new d({ font: { family: e } })), this;
1179
+ }
1180
+ opacity(e) {
1181
+ return this.modifiers.push(new d({ opacity: e })), this;
1182
+ }
1183
+ cornerRadius(e) {
1184
+ return this.modifiers.push(new d({ cornerRadius: e })), this;
1185
+ }
1186
+ border(e, t) {
1187
+ let r;
1188
+ return typeof e == "object" ? r = e : r = {
1189
+ style: "solid",
1190
+ ...e !== void 0 && { width: e },
1191
+ ...t !== void 0 && { color: t }
1192
+ }, this.modifiers.push(new d({ border: r })), this;
1193
+ }
1194
+ borderWidth(e) {
1195
+ return this.modifiers.push(new d({ border: { width: e } })), this;
1196
+ }
1197
+ // Shadow functionality moved to @tachui/effects package
1198
+ // Visual Effects Modifiers (Phase 2 - Epic: Butternut)
1199
+ blur(e) {
1200
+ return this.modifiers.push(new d({ blur: e })), this;
1201
+ }
1202
+ brightness(e) {
1203
+ return this.modifiers.push(new d({ brightness: e })), this;
1204
+ }
1205
+ contrast(e) {
1206
+ return this.modifiers.push(new d({ contrast: e })), this;
1207
+ }
1208
+ saturation(e) {
1209
+ return this.modifiers.push(new d({ saturation: e })), this;
1210
+ }
1211
+ hueRotation(e) {
1212
+ return this.modifiers.push(new d({ hueRotation: e })), this;
1213
+ }
1214
+ grayscale(e) {
1215
+ return this.modifiers.push(new d({ grayscale: e })), this;
1216
+ }
1217
+ colorInvert(e = 1) {
1218
+ return this.modifiers.push(new d({ colorInvert: e })), this;
1219
+ }
1220
+ // ============================================================================
1221
+ // VISUAL EFFECTS MOVED TO @tachui/effects PACKAGE
1222
+ // ============================================================================
1223
+ //
1224
+ // Visual effects have been extracted to @tachui/effects for better tree-shaking
1225
+ // Visual effects methods removed - use @tachui/effects package
1226
+ // Phase 4 Advanced Gesture Modifiers moved to @tachui/modifiers
1227
+ // Use: import { onLongPressGesture } from '@tachui/modifiers'
1228
+ onLongPressGesture(e) {
1229
+ throw new Error(
1230
+ 'onLongPressGesture has been moved to @tachui/modifiers. Please import { onLongPressGesture } from "@tachui/modifiers" and use .apply(onLongPressGesture(...)) instead.'
1231
+ );
1232
+ }
1233
+ keyboardShortcut(e, t, r) {
1234
+ throw new Error(
1235
+ 'keyboardShortcut has been moved to @tachui/modifiers. Please import { keyboardShortcut } from "@tachui/modifiers" and use .apply(keyboardShortcut(...)) instead.'
1236
+ );
1237
+ }
1238
+ focused(e) {
1239
+ throw new Error(
1240
+ 'focused has been moved to @tachui/modifiers. Please import { focused } from "@tachui/modifiers" and use .apply(focused(...)) instead.'
1241
+ );
1242
+ }
1243
+ focusable(e = !0, t) {
1244
+ throw new Error(
1245
+ 'focusable has been moved to @tachui/modifiers. Please import { focusable } from "@tachui/modifiers" and use .apply(focusable(...)) instead.'
1246
+ );
1247
+ }
1248
+ onContinuousHover(e, t) {
1249
+ throw new Error(
1250
+ 'onContinuousHover has been moved to @tachui/modifiers. Please import { onContinuousHover } from "@tachui/modifiers" and use .apply(onContinuousHover(...)) instead.'
1251
+ );
1252
+ }
1253
+ highPriorityGesture(e, t) {
1254
+ return this.modifiers.push(
1255
+ new l({
1256
+ highPriorityGesture: { gesture: e, including: t }
1257
+ })
1258
+ ), this;
1259
+ }
1260
+ simultaneousGesture(e, t) {
1261
+ return this.modifiers.push(
1262
+ new l({
1263
+ simultaneousGesture: { gesture: e, including: t }
1264
+ })
1265
+ ), this;
1266
+ }
1267
+ allowsHitTesting(e) {
1268
+ throw new Error(
1269
+ 'allowsHitTesting has been moved to @tachui/modifiers. Please import { allowsHitTesting } from "@tachui/modifiers" and use .apply(allowsHitTesting(...)) instead.'
1270
+ );
1271
+ }
1272
+ // Animation modifiers
1273
+ transform(e) {
1274
+ return this.modifiers.push(new m({ transform: e })), this;
1275
+ }
1276
+ animation(e) {
1277
+ return this.modifiers.push(new m({ animation: e })), this;
1278
+ }
1279
+ // Lifecycle modifiers
1280
+ task(e, t) {
1281
+ return this.modifiers.push(
1282
+ new w({
1283
+ task: {
1284
+ operation: e,
1285
+ id: t?.id,
1286
+ priority: t?.priority || "default"
1287
+ }
1288
+ })
1289
+ ), this;
1290
+ }
1291
+ // Custom modifier application
1292
+ modifier(e) {
1293
+ return this.modifiers.push(e), this;
1294
+ }
1295
+ // Resizable modifier for images
1296
+ resizable() {
1297
+ return this.modifiers.push(new Q({})), this;
1298
+ }
1299
+ // Responsive Design Methods
1300
+ /**
1301
+ * Add modifier to internal list (used by responsive builder)
1302
+ */
1303
+ addModifier(e) {
1304
+ if (this.modifiers.push(e), "modifiers" in this.component && Array.isArray(this.component.modifiers)) {
1305
+ const t = this.component;
1306
+ t.modifiers = [
1307
+ ...t.modifiers,
1308
+ e
1309
+ ];
1310
+ }
1311
+ }
1312
+ // Responsive functionality moved to @tachui/responsive package
1313
+ // Interaction modifiers
1314
+ onTap(e) {
1315
+ return this.modifiers.push(A.onTap(e)), this;
1316
+ }
1317
+ onFocus(e) {
1318
+ return this.modifiers.push(A.onFocus(e)), this;
1319
+ }
1320
+ onBlur(e) {
1321
+ return this.modifiers.push(new l({ onBlur: e })), this;
1322
+ }
1323
+ onKeyDown(e) {
1324
+ return this.modifiers.push(new l({ onKeyDown: e })), this;
1325
+ }
1326
+ onScroll(e) {
1327
+ return this.modifiers.push(new l({ onScroll: e })), this;
1328
+ }
1329
+ onKeyPress(e) {
1330
+ return this.modifiers.push(new l({ onKeyPress: e })), this;
1331
+ }
1332
+ onKeyUp(e) {
1333
+ return this.modifiers.push(new l({ onKeyUp: e })), this;
1334
+ }
1335
+ onDoubleClick(e) {
1336
+ return this.modifiers.push(new l({ onDoubleClick: e })), this;
1337
+ }
1338
+ onContextMenu(e) {
1339
+ return this.modifiers.push(new l({ onContextMenu: e })), this;
1340
+ }
1341
+ onWheel(e) {
1342
+ return this.modifiers.push(new l({ onWheel: e })), this;
1343
+ }
1344
+ onInput(e) {
1345
+ return this.modifiers.push(new l({ onInput: e })), this;
1346
+ }
1347
+ onChange(e) {
1348
+ return this.modifiers.push(new l({ onChange: e })), this;
1349
+ }
1350
+ onCopy(e) {
1351
+ return this.modifiers.push(new l({ onCopy: e })), this;
1352
+ }
1353
+ onCut(e) {
1354
+ return this.modifiers.push(new l({ onCut: e })), this;
1355
+ }
1356
+ onPaste(e) {
1357
+ return this.modifiers.push(new l({ onPaste: e })), this;
1358
+ }
1359
+ onSelect(e) {
1360
+ return this.modifiers.push(new l({ onSelect: e })), this;
1361
+ }
1362
+ // Transition modifiers
1363
+ transition(e = "all", t = 300, r = "ease", n = 0) {
1364
+ return this.modifiers.push($t(e, t, r, n)), this;
1365
+ }
1366
+ // HTML and ARIA Attributes - MIGRATED TO @tachui/modifiers
1367
+ id(e) {
1368
+ throw new Error(
1369
+ 'Attribute modifiers have been moved to @tachui/modifiers. Please import { id } from "@tachui/modifiers" and use it directly instead of chaining it on components.'
1370
+ );
1371
+ }
1372
+ data(e) {
1373
+ throw new Error(
1374
+ 'Attribute modifiers have been moved to @tachui/modifiers. Please import { data } from "@tachui/modifiers" and use it directly instead of chaining it on components.'
1375
+ );
1376
+ }
1377
+ aria(e) {
1378
+ throw new Error(
1379
+ 'Attribute modifiers have been moved to @tachui/modifiers. Please import { aria } from "@tachui/modifiers" and use it directly instead of chaining it on components.'
1380
+ );
1381
+ }
1382
+ tabIndex(e) {
1383
+ throw new Error(
1384
+ 'Attribute modifiers have been moved to @tachui/modifiers. Please import { tabIndex } from "@tachui/modifiers" and use it directly instead of chaining it on components.'
1385
+ );
1386
+ }
1387
+ customProperties(e) {
1388
+ throw new Error(
1389
+ 'CSS property modifiers have been moved to @tachui/modifiers. Please import { customProperties } from "@tachui/modifiers" and use it directly instead of chaining it on components.'
1390
+ );
1391
+ }
1392
+ customProperty(e, t) {
1393
+ throw new Error(
1394
+ 'CSS property modifiers have been moved to @tachui/modifiers. Please import { customProperty } from "@tachui/modifiers" and use it directly instead of chaining it on components.'
1395
+ );
1396
+ }
1397
+ cssVariables(e) {
1398
+ throw new Error(
1399
+ 'CSS property modifiers have been moved to @tachui/modifiers. Please import { cssVariables } from "@tachui/modifiers" and use it directly instead of chaining it on components.'
1400
+ );
1401
+ }
1402
+ themeColors(e) {
1403
+ throw new Error(
1404
+ 'Theme modifiers have been moved to @tachui/modifiers. Please import { themeColors } from "@tachui/modifiers" and use it directly instead of chaining it on components.'
1405
+ );
1406
+ }
1407
+ designTokens(e) {
1408
+ throw new Error(
1409
+ 'Design token modifiers have been moved to @tachui/modifiers. Please import { designTokens } from "@tachui/modifiers" and use it directly instead of chaining it on components.'
1410
+ );
1411
+ }
1412
+ // State modifiers
1413
+ disabled(e = !0) {
1414
+ return this.modifiers.push(new l({ disabled: e })), this;
1415
+ }
1416
+ // HTML Content Rendering (Text components only)
1417
+ asHTML(e) {
1418
+ return this.modifiers.push(Me(e)), this;
1419
+ }
1420
+ // Build the final component with all modifiers applied
1421
+ build() {
1422
+ if ("modifiers" in this.component) {
1423
+ const e = this.component, t = this.modifiers.filter(
1424
+ (r) => !e.modifiers.some(
1425
+ (n) => n === r
1426
+ // Reference equality check
1427
+ )
1428
+ );
1429
+ return e.modifiers = [
1430
+ ...e.modifiers,
1431
+ ...t
1432
+ ], process.env.NODE_ENV === "test" && this.applyModifiersToPropsForTesting(e, [
1433
+ ...e.modifiers
1434
+ ]), this.component;
1435
+ } else {
1436
+ const e = oi(
1437
+ this.component,
1438
+ this.modifiers
1439
+ );
1440
+ return process.env.NODE_ENV === "test" && this.applyModifiersToPropsForTesting(
1441
+ e,
1442
+ this.modifiers
1443
+ ), e;
1444
+ }
1445
+ }
1446
+ applyModifiersToPropsForTesting(e, t) {
1447
+ e.props || (e.props = {}), t.forEach((r) => {
1448
+ if (r.type === "aria") {
1449
+ const s = r.properties?.aria || {};
1450
+ Object.entries(s).forEach(([o, c]) => {
1451
+ if (c != null)
1452
+ if (o === "role")
1453
+ e.props.role = c;
1454
+ else {
1455
+ const u = o.startsWith("aria-") ? o : `aria-${o}`;
1456
+ e.props[u] = typeof c == "boolean" ? c : String(c);
1457
+ }
1458
+ });
1459
+ } else if (r.type === "interaction") {
1460
+ const s = r.properties;
1461
+ Object.entries(s).forEach(([o, c]) => {
1462
+ typeof c == "function" && (e.props[o] = c);
1463
+ }), (s.onSwipeLeft || s.onSwipeRight) && (e.props.onTouchStart = () => {
1464
+ });
1465
+ } else if (r.type === "utility") {
1466
+ const s = r.properties;
1467
+ e.props.style || (e.props.style = {}), Object.entries(s).forEach(([o, c]) => {
1468
+ c != null && (e.props.style[o] = c);
1469
+ });
1470
+ } else if (r.type === "tabIndex") {
1471
+ const n = r;
1472
+ e.props.tabIndex = n.properties?.tabIndex;
1473
+ } else if (r.type === "appearance") {
1474
+ const s = r.properties;
1475
+ e.props.style || (e.props.style = {}), s.backgroundColor && (e.props.style.backgroundColor = s.backgroundColor), s.foregroundColor && (e.props.style.color = s.foregroundColor), s.opacity !== void 0 && (e.props.style.opacity = s.opacity), s.role !== void 0 && (e.props.role = String(s.role)), s["aria-label"] !== void 0 && (e.props["aria-label"] = String(s["aria-label"])), s["aria-live"] !== void 0 && (e.props["aria-live"] = String(s["aria-live"])), s["aria-describedby"] !== void 0 && (e.props["aria-describedby"] = String(
1476
+ s["aria-describedby"]
1477
+ )), s["aria-modal"] !== void 0 && (e.props["aria-modal"] = s["aria-modal"] === "true" || s["aria-modal"] === !0), s["aria-hidden"] !== void 0 && (e.props["aria-hidden"] = String(s["aria-hidden"])), s.navigationTitle !== void 0 && (e.props.navigationTitle = String(s.navigationTitle)), s.navigationBarHidden !== void 0 && (e.props.navigationBarHidden = s.navigationBarHidden, s.navigationBarHidden && (e.props["aria-hidden"] = "true")), s.navigationBarItems !== void 0 && (e.props.navigationBarItems = s.navigationBarItems);
1478
+ } else if (r.type === "transition") {
1479
+ const s = r.properties;
1480
+ e.props.style || (e.props.style = {}), s.transition && (e.props.style.transition = s.transition);
1481
+ } else if (r.type === "size") {
1482
+ const s = r.properties;
1483
+ e.props.style || (e.props.style = {}), s.minHeight !== void 0 && (e.props.style.minHeight = s.minHeight), s.minWidth !== void 0 && (e.props.style.minWidth = s.minWidth), s.maxHeight !== void 0 && (e.props.style.maxHeight = s.maxHeight), s.maxWidth !== void 0 && (e.props.style.maxWidth = s.maxWidth), s.width !== void 0 && (e.props.style.width = s.width), s.height !== void 0 && (e.props.style.height = s.height);
1484
+ } else if (r.type === "css") {
1485
+ const s = r.properties;
1486
+ e.props.style || (e.props.style = {}), Object.entries(s).forEach(([o, c]) => {
1487
+ c != null && (e.props.style[o] = c);
1488
+ });
1489
+ }
1490
+ });
1491
+ }
1492
+ // ============================================================================
1493
+ // MISSING MODIFIER METHODS - ACCESSIBILITY & NAVIGATION
1494
+ // ============================================================================
1495
+ // Individual ARIA methods for better developer experience
1496
+ role(e) {
1497
+ return this.modifiers.push(new d({ role: e })), this;
1498
+ }
1499
+ ariaLabel(e) {
1500
+ return this.modifiers.push(new d({ "aria-label": e })), this;
1501
+ }
1502
+ ariaLive(e) {
1503
+ return this.modifiers.push(new d({ "aria-live": e })), this;
1504
+ }
1505
+ ariaDescribedBy(e) {
1506
+ return this.modifiers.push(new d({ "aria-describedby": e })), this;
1507
+ }
1508
+ ariaModal(e) {
1509
+ return this.modifiers.push(
1510
+ new d({ "aria-modal": e.toString() })
1511
+ ), this;
1512
+ }
1513
+ // Touch and gesture events
1514
+ onTouchStart(e) {
1515
+ return this.modifiers.push(new l({ onTouchStart: e })), this;
1516
+ }
1517
+ onTouchMove(e) {
1518
+ return this.modifiers.push(new l({ onTouchMove: e })), this;
1519
+ }
1520
+ onTouchEnd(e) {
1521
+ return this.modifiers.push(new l({ onTouchEnd: e })), this;
1522
+ }
1523
+ // Swipe gestures (simplified implementations)
1524
+ onSwipeLeft(e) {
1525
+ return this.modifiers.push(new l({ onSwipeLeft: e })), this;
1526
+ }
1527
+ onSwipeRight(e) {
1528
+ return this.modifiers.push(new l({ onSwipeRight: e })), this;
1529
+ }
1530
+ // Navigation methods - these delegate to the navigation package functions
1531
+ navigationTitle(e) {
1532
+ return this.modifiers.push(
1533
+ new d({
1534
+ navigationTitle: e,
1535
+ role: "heading"
1536
+ })
1537
+ ), this;
1538
+ }
1539
+ navigationBarHidden(e = !0) {
1540
+ return this.modifiers.push(
1541
+ new d({
1542
+ navigationBarHidden: e,
1543
+ "aria-hidden": e.toString()
1544
+ })
1545
+ ), this;
1546
+ }
1547
+ navigationBarItems(e) {
1548
+ return this.modifiers.push(new d({ navigationBarItems: e })), this;
1549
+ }
1550
+ // ============================================================================
1551
+ // MISSING TRANSITION METHODS
1552
+ // ============================================================================
1553
+ transitions(e) {
1554
+ return this.modifiers.push(new m({ transitions: e })), this;
1555
+ }
1556
+ fadeTransition(e = 300) {
1557
+ return this.modifiers.push(Pt(e)), this;
1558
+ }
1559
+ transformTransition(e = 300) {
1560
+ return this.modifiers.push(It(e)), this;
1561
+ }
1562
+ colorTransition(e = 300) {
1563
+ return this.modifiers.push(Rt(e)), this;
1564
+ }
1565
+ layoutTransition(e = 300) {
1566
+ return this.modifiers.push(Nt(e)), this;
1567
+ }
1568
+ buttonTransition() {
1569
+ return this.modifiers.push(kt()), this;
1570
+ }
1571
+ cardTransition() {
1572
+ return this.modifiers.push(Bt()), this;
1573
+ }
1574
+ modalTransition() {
1575
+ return this.modifiers.push(Dt()), this;
1576
+ }
1577
+ smoothTransition(e = 300) {
1578
+ return this.modifiers.push(Ht(e)), this;
1579
+ }
1580
+ quickTransition(e = 150) {
1581
+ return this.modifiers.push(Ot(e)), this;
1582
+ }
1583
+ slowTransition(e = 500) {
1584
+ return this.modifiers.push(Ft(e)), this;
1585
+ }
1586
+ // ============================================================================
1587
+ // SCROLL METHODS
1588
+ // ============================================================================
1589
+ scroll(e) {
1590
+ return this.modifiers.push(Vt(e)), this;
1591
+ }
1592
+ scrollBehavior(e) {
1593
+ return this.modifiers.push(Wt(e)), this;
1594
+ }
1595
+ overscrollBehavior(e) {
1596
+ return this.modifiers.push(zt(e)), this;
1597
+ }
1598
+ overscrollBehaviorX(e) {
1599
+ return this.modifiers.push(jt(e)), this;
1600
+ }
1601
+ overscrollBehaviorY(e) {
1602
+ return this.modifiers.push(Ut(e)), this;
1603
+ }
1604
+ scrollMargin(e) {
1605
+ return this.modifiers.push(qt(e)), this;
1606
+ }
1607
+ scrollPadding(e) {
1608
+ return this.modifiers.push(Gt(e)), this;
1609
+ }
1610
+ scrollSnap(e) {
1611
+ return this.modifiers.push(Yt(e)), this;
1612
+ }
1613
+ // ============================================================================
1614
+ // MIGRATED MODIFIERS - NOW IN SPECIALIZED PACKAGES
1615
+ // ============================================================================
1616
+ // Viewport lifecycle modifiers - moved to @tachui/viewport
1617
+ onAppear(e) {
1618
+ throw new Error(
1619
+ 'onAppear modifier has been moved to @tachui/viewport. Please import { onAppear } from "@tachui/viewport/modifiers" and use it directly instead of chaining it on components.'
1620
+ );
1621
+ }
1622
+ onDisappear(e) {
1623
+ throw new Error(
1624
+ 'onDisappear modifier has been moved to @tachui/viewport. Please import { onDisappear } from "@tachui/viewport/modifiers" and use it directly instead of chaining it on components.'
1625
+ );
1626
+ }
1627
+ // Mobile gesture modifiers - moved to @tachui/mobile
1628
+ refreshable(e, t) {
1629
+ throw new Error(
1630
+ 'refreshable modifier has been moved to @tachui/mobile. Please import { refreshable } from "@tachui/mobile/modifiers" and use it directly instead of chaining it on components.'
1631
+ );
1632
+ }
1633
+ // onAppear and onDisappear have been moved to @tachui/viewport/modifiers
1634
+ // to maintain proper architectural boundaries
1635
+ // Transform modifiers
1636
+ scaleEffect(e, t, r) {
1637
+ return this.modifiers.push(
1638
+ new m({
1639
+ scaleEffect: {
1640
+ x: e,
1641
+ y: t ?? e,
1642
+ // Default to uniform scaling
1643
+ anchor: r ?? "center"
1644
+ }
1645
+ })
1646
+ ), this;
1647
+ }
1648
+ // Shadow modifiers - registry-based lookup
1649
+ shadow(e) {
1650
+ return this.modifiers.push(p("shadow", e)), this;
1651
+ }
1652
+ textShadow(e) {
1653
+ return this.modifiers.push(p("textShadow", e)), this;
1654
+ }
1655
+ shadows(e) {
1656
+ return this.modifiers.push(p("shadows", e)), this;
1657
+ }
1658
+ shadowPreset(e) {
1659
+ return this.modifiers.push(p("shadowPreset", e)), this;
1660
+ }
1661
+ }
1662
+ function X(i) {
1663
+ return new Xt(i);
1664
+ }
1665
+ function Mi(i, e) {
1666
+ return {
1667
+ ...i,
1668
+ modifiers: e,
1669
+ modifierBuilder: X(i)
1670
+ };
1671
+ }
1672
+ const xi = {
1673
+ /**
1674
+ * Create a padding modifier with all sides
1675
+ */
1676
+ paddingAll(i) {
1677
+ return new g({ padding: i });
1678
+ },
1679
+ /**
1680
+ * Create a margin modifier with all sides
1681
+ */
1682
+ marginAll(i) {
1683
+ return new g({ margin: i });
1684
+ },
1685
+ /**
1686
+ * Create a font modifier with common presets
1687
+ */
1688
+ fontPreset(i) {
1689
+ const e = {
1690
+ title: { size: 32, weight: "bold" },
1691
+ heading: { size: 24, weight: "600" },
1692
+ body: { size: 16, weight: "normal" },
1693
+ caption: { size: 12, weight: "normal" }
1694
+ };
1695
+ return new d({ font: e[i] });
1696
+ },
1697
+ // shadowPreset moved to @tachui/effects package
1698
+ /**
1699
+ * Create a transition modifier with common presets
1700
+ */
1701
+ transitionPreset(i) {
1702
+ const e = {
1703
+ fast: { duration: 150, easing: "ease-out" },
1704
+ normal: { duration: 300, easing: "ease" },
1705
+ slow: { duration: 500, easing: "ease-in-out" }
1706
+ };
1707
+ return new m({ transition: e[i] });
1708
+ }
1709
+ };
1710
+ var Jt = Object.defineProperty, Kt = (i, e, t) => e in i ? Jt(i, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : i[e] = t, Zt = (i, e, t) => Kt(i, e + "", t);
1711
+ class J {
1712
+ constructor() {
1713
+ Zt(this, "modifiers", /* @__PURE__ */ new Map());
1714
+ }
1715
+ register(e, t) {
1716
+ this.modifiers.set(e, t);
1717
+ }
1718
+ get(e) {
1719
+ return this.modifiers.get(e);
1720
+ }
1721
+ has(e) {
1722
+ return this.modifiers.has(e);
1723
+ }
1724
+ list() {
1725
+ return Array.from(this.modifiers.keys());
1726
+ }
1727
+ clear() {
1728
+ this.modifiers.clear();
1729
+ }
1730
+ }
1731
+ const Qt = new J();
1732
+ function Li() {
1733
+ return new J();
1734
+ }
1735
+ function ei(i, e, t = {}, r = {}) {
1736
+ if (!e.length) return i;
1737
+ const n = {
1738
+ componentId: t.componentId || "unknown",
1739
+ phase: t.phase || "creation",
1740
+ ...t.element && { element: t.element },
1741
+ ...t.parentElement && { parentElement: t.parentElement },
1742
+ ...t.componentInstance && { componentInstance: t.componentInstance },
1743
+ ...t.previousModifiers && { previousModifiers: t.previousModifiers }
1744
+ };
1745
+ switch (r.batch ? "batch" : "sequential") {
1746
+ case "batch":
1747
+ return ii(i, e, n, r);
1748
+ default:
1749
+ return ti(i, e, n, r);
1750
+ }
1751
+ }
1752
+ function ti(i, e, t, r) {
1753
+ const n = [...e].sort((u, h) => u.priority - h.priority);
1754
+ let s = i;
1755
+ const o = [], c = [];
1756
+ for (const u of n)
1757
+ try {
1758
+ const h = u.apply(s, t);
1759
+ h && typeof h == "object" && "type" in h && (s = h), r.immediate && !r.suppressEffects && (o.forEach((I) => I()), o.length = 0);
1760
+ } catch (h) {
1761
+ console.error(`Failed to apply modifier ${u.type}:`, h);
1762
+ }
1763
+ if (c.length > 0) {
1764
+ const u = s.dispose;
1765
+ s.dispose = () => {
1766
+ c.forEach((h) => h()), u && u();
1767
+ };
1768
+ }
1769
+ return s;
1770
+ }
1771
+ function ii(i, e, t, r) {
1772
+ const n = ri(e);
1773
+ let s = i;
1774
+ const o = [], c = [];
1775
+ for (const [u, h] of n)
1776
+ try {
1777
+ s = si(s, h, t);
1778
+ } catch (I) {
1779
+ (typeof process > "u" || process.env.NODE_ENV !== "test") && console.error(`Failed to apply modifier group ${u}:`, I);
1780
+ }
1781
+ if (r.suppressEffects || o.forEach((u) => u()), c.length > 0) {
1782
+ const u = s.dispose;
1783
+ s.dispose = () => {
1784
+ c.forEach((h) => h()), u && u();
1785
+ };
1786
+ }
1787
+ return s;
1788
+ }
1789
+ function ri(i) {
1790
+ const e = /* @__PURE__ */ new Map();
1791
+ for (const t of i) {
1792
+ const r = e.get(t.type) || [];
1793
+ r.push(t), e.set(t.type, r);
1794
+ }
1795
+ return e;
1796
+ }
1797
+ function si(i, e, t) {
1798
+ const r = [...e].sort((s, o) => s.priority - o.priority);
1799
+ let n = i;
1800
+ for (const s of r)
1801
+ try {
1802
+ const o = s.apply(n, t);
1803
+ o && typeof o == "object" && "type" in o && (n = o);
1804
+ } catch (o) {
1805
+ (typeof process > "u" || process.env.NODE_ENV !== "test") && console.error(`Failed to apply modifier ${s.type}:`, o);
1806
+ }
1807
+ return n;
1808
+ }
1809
+ function ni(i) {
1810
+ return i && typeof i.concat == "function" && typeof i.toSegment == "function" && typeof i.isConcatenatable == "function";
1811
+ }
1812
+ function oi(i, e = []) {
1813
+ const t = {
1814
+ type: i.type,
1815
+ id: i.id,
1816
+ props: { ...i.props },
1817
+ mounted: i.mounted,
1818
+ cleanup: i.cleanup ? [...i.cleanup] : [],
1819
+ modifiers: [...e],
1820
+ modifierBuilder: null,
1821
+ // Will be set after component is created
1822
+ render: i.render ? i.render.bind(i) : () => []
1823
+ // Bind to original component or provide default
1824
+ };
1825
+ t.modifierBuilder = X(t), i.modifiableComponent = t;
1826
+ const r = i._enhancedLifecycle;
1827
+ r && (t._enhancedLifecycle = r, "domElements" in i && (t.domElements = i.domElements), "primaryElement" in i && (t.primaryElement = i.primaryElement), "domReady" in i && (t.domReady = i.domReady), "children" in i && (t.children = i.children));
1828
+ const n = i.render ? i.render.bind(i) : () => [];
1829
+ return t.render = () => {
1830
+ const s = n();
1831
+ return (Array.isArray(s) ? s : [s]).map((c) => (c && typeof c == "object" && (c.modifiers = t.modifiers, c.componentId = i.id), c));
1832
+ }, ni(i) && (t.concat = function(s) {
1833
+ const o = {
1834
+ id: t.id,
1835
+ component: t,
1836
+ modifiers: t.modifiers,
1837
+ render: () => {
1838
+ const h = t.render();
1839
+ return Array.isArray(h) ? h[0] : h;
1840
+ }
1841
+ }, c = s.toSegment(), u = {
1842
+ totalSegments: s instanceof b ? s.segments.length + 1 : 2,
1843
+ accessibilityRole: "text",
1844
+ // Simplified for now
1845
+ semanticStructure: "inline"
1846
+ // Simplified for now
1847
+ };
1848
+ return s instanceof b ? new b([o, ...s.segments], u) : new b([o, c], u);
1849
+ }, t.toSegment = function() {
1850
+ return {
1851
+ id: t.id,
1852
+ component: t,
1853
+ modifiers: t.modifiers,
1854
+ render: () => {
1855
+ const s = t.render();
1856
+ return Array.isArray(s) ? s[0] : s;
1857
+ }
1858
+ };
1859
+ }, t.isConcatenatable = function() {
1860
+ return !0;
1861
+ }), t;
1862
+ }
1863
+ function $i(i, e, t = {}) {
1864
+ i.modifiers = [...e], i.mounted && i.context && console.log("Updating modifiers on mounted component", i.id);
1865
+ }
1866
+ const Pi = {
1867
+ /**
1868
+ * Check if a component has specific modifier types
1869
+ */
1870
+ hasModifierOfType(i, e) {
1871
+ return i.modifiers.some((t) => t.type === e);
1872
+ },
1873
+ /**
1874
+ * Get modifiers of a specific type from a component
1875
+ */
1876
+ getModifiersOfType(i, e) {
1877
+ return i.modifiers.filter((t) => t.type === e);
1878
+ },
1879
+ /**
1880
+ * Remove modifiers of a specific type from a component
1881
+ */
1882
+ removeModifiersOfType(i, e) {
1883
+ i.modifiers = i.modifiers.filter((t) => t.type !== e);
1884
+ },
1885
+ /**
1886
+ * Replace modifiers of a specific type
1887
+ */
1888
+ replaceModifiersOfType(i, e, t) {
1889
+ i.modifiers = i.modifiers.filter((r) => r.type !== e), i.modifiers.push(...t);
1890
+ },
1891
+ /**
1892
+ * Get the total number of modifiers on a component
1893
+ */
1894
+ getModifierCount(i) {
1895
+ return i.modifiers.length;
1896
+ },
1897
+ /**
1898
+ * Check if two modifier arrays are equivalent
1899
+ */
1900
+ areModifiersEqual(i, e) {
1901
+ if (i.length !== e.length) return !1;
1902
+ for (let t = 0; t < i.length; t++) {
1903
+ const r = i[t], n = e[t];
1904
+ if (r.type !== n.type || r.priority !== n.priority || JSON.stringify(r.properties) !== JSON.stringify(n.properties))
1905
+ return !1;
1906
+ }
1907
+ return !0;
1908
+ }
1909
+ }, ai = /* @__PURE__ */ new Set([
1910
+ // Container tags
1911
+ "div",
1912
+ "section",
1913
+ "article",
1914
+ "aside",
1915
+ "nav",
1916
+ "main",
1917
+ "header",
1918
+ "footer",
1919
+ // Heading tags
1920
+ "h1",
1921
+ "h2",
1922
+ "h3",
1923
+ "h4",
1924
+ "h5",
1925
+ "h6",
1926
+ // Content tags
1927
+ "p",
1928
+ "span",
1929
+ "strong",
1930
+ "em",
1931
+ "code",
1932
+ "pre",
1933
+ "blockquote",
1934
+ "address",
1935
+ // List tags
1936
+ "ul",
1937
+ "ol",
1938
+ "li",
1939
+ "dl",
1940
+ "dt",
1941
+ "dd",
1942
+ // Interactive tags (with warnings)
1943
+ "button",
1944
+ "a",
1945
+ "input",
1946
+ "textarea",
1947
+ "select",
1948
+ "form",
1949
+ "label",
1950
+ // Media tags
1951
+ "img",
1952
+ "video",
1953
+ "audio",
1954
+ "canvas",
1955
+ "svg",
1956
+ "picture",
1957
+ "source",
1958
+ // Table tags
1959
+ "table",
1960
+ "thead",
1961
+ "tbody",
1962
+ "tfoot",
1963
+ "tr",
1964
+ "th",
1965
+ "td",
1966
+ "caption",
1967
+ "colgroup",
1968
+ "col",
1969
+ // Form tags
1970
+ "fieldset",
1971
+ "legend",
1972
+ "optgroup",
1973
+ "option",
1974
+ "datalist",
1975
+ "output",
1976
+ "progress",
1977
+ "meter",
1978
+ // Interactive content
1979
+ "details",
1980
+ "summary",
1981
+ "dialog",
1982
+ // Text semantics
1983
+ "abbr",
1984
+ "cite",
1985
+ "dfn",
1986
+ "kbd",
1987
+ "mark",
1988
+ "q",
1989
+ "s",
1990
+ "samp",
1991
+ "small",
1992
+ "sub",
1993
+ "sup",
1994
+ "time",
1995
+ "u",
1996
+ "var",
1997
+ // Document sections
1998
+ "body",
1999
+ "head",
2000
+ "title",
2001
+ "base",
2002
+ "link",
2003
+ "meta",
2004
+ "style",
2005
+ "script",
2006
+ "noscript",
2007
+ // Embedded content
2008
+ "embed",
2009
+ "iframe",
2010
+ "object",
2011
+ "param",
2012
+ "track",
2013
+ "map",
2014
+ "area",
2015
+ // Interactive elements
2016
+ "menu",
2017
+ "menuitem"
2018
+ ]), T = /* @__PURE__ */ new Map([
2019
+ ["nav", { role: "navigation", applyARIA: !0 }],
2020
+ ["main", { role: "main", applyARIA: !0 }],
2021
+ ["article", { role: "article", applyARIA: !0 }],
2022
+ ["section", { role: "region", applyARIA: !0 }],
2023
+ ["aside", { role: "complementary", applyARIA: !0 }],
2024
+ ["header", { role: "banner", applyARIA: !1 }],
2025
+ // Context dependent - may not always be page banner
2026
+ ["footer", { role: "contentinfo", applyARIA: !1 }],
2027
+ // Context dependent - may not always be page footer
2028
+ ["form", { role: "form", applyARIA: !0 }],
2029
+ ["search", { role: "search", applyARIA: !0 }],
2030
+ ["dialog", { role: "dialog", applyARIA: !0 }],
2031
+ ["button", { role: "button", applyARIA: !1 }],
2032
+ // Usually implicit
2033
+ ["a", { role: "link", applyARIA: !1 }]
2034
+ // Usually implicit
2035
+ ]), ci = /* @__PURE__ */ new Map([
2036
+ // Layout Components - Ideal for semantic containers (Warning Level: None)
2037
+ [
2038
+ "HStack",
2039
+ {
2040
+ warningLevel: "none",
2041
+ idealTags: [
2042
+ "nav",
2043
+ "header",
2044
+ "footer",
2045
+ "section",
2046
+ "article",
2047
+ "aside",
2048
+ "main",
2049
+ "div"
2050
+ ]
2051
+ }
2052
+ ],
2053
+ [
2054
+ "VStack",
2055
+ {
2056
+ warningLevel: "none",
2057
+ idealTags: [
2058
+ "main",
2059
+ "section",
2060
+ "article",
2061
+ "aside",
2062
+ "header",
2063
+ "footer",
2064
+ "div"
2065
+ ]
2066
+ }
2067
+ ],
2068
+ [
2069
+ "ZStack",
2070
+ { warningLevel: "none", idealTags: ["article", "aside", "section", "div"] }
2071
+ ],
2072
+ // Content Components - Common for specific overrides (Warning Level: None for appropriate tags)
2073
+ [
2074
+ "Text",
2075
+ {
2076
+ warningLevel: "none",
2077
+ idealTags: [
2078
+ "h1",
2079
+ "h2",
2080
+ "h3",
2081
+ "h4",
2082
+ "h5",
2083
+ "h6",
2084
+ "p",
2085
+ "span",
2086
+ "strong",
2087
+ "em"
2088
+ ]
2089
+ }
2090
+ ],
2091
+ [
2092
+ "Image",
2093
+ { warningLevel: "warning", problematicTags: ["figure", "picture"] }
2094
+ ],
2095
+ // May break functionality
2096
+ ["Spacer", { warningLevel: "none" }],
2097
+ // Interactive Components - Use with warnings
2098
+ [
2099
+ "Button",
2100
+ { warningLevel: "warning", problematicTags: ["div", "span", "a"] }
2101
+ ],
2102
+ // May break accessibility
2103
+ [
2104
+ "Link",
2105
+ { warningLevel: "warning", problematicTags: ["div", "span", "button"] }
2106
+ ]
2107
+ // May break navigation
2108
+ ]);
2109
+ function di(i, e) {
2110
+ const t = ci.get(i);
2111
+ return t ? t.warningLevel === "none" ? !1 : t.warningLevel === "warning" && t.problematicTags ? t.problematicTags.includes(e) : !(t.idealTags && t.idealTags.includes(e)) : !0;
2112
+ }
2113
+ class ui {
2114
+ static validate(e, t) {
2115
+ return ai.has(e) ? {
2116
+ valid: !0,
2117
+ warnings: this.checkSemanticWarnings(e, t),
2118
+ semanticRole: T.get(e)
2119
+ } : (process.env.NODE_ENV !== "production" && console.error(
2120
+ `Invalid tag '${e}' for component type '${t}'`
2121
+ ), {
2122
+ valid: !1,
2123
+ warning: `Invalid HTML tag '${e}' specified for ${t}. Tag will be used as-is.`,
2124
+ severity: "error"
2125
+ });
2126
+ }
2127
+ static checkSemanticWarnings(e, t) {
2128
+ const r = [];
2129
+ if (["button", "a", "input", "select", "textarea"].includes(e) && ["HStack", "VStack", "ZStack"].includes(t)) {
2130
+ const n = `Using interactive tag '${e}' on layout component ${t} may cause accessibility issues.`;
2131
+ r.push({ message: n, severity: "warning" }), process.env.NODE_ENV !== "production" && console.warn(
2132
+ `Interactive tag '${e}' on layout component '${t}' may cause unexpected behavior`
2133
+ );
2134
+ }
2135
+ if (e === "li" && !["VStack", "HStack"].includes(t) && (r.push({ message: "<li> tags should typically be used within list structures.", severity: "info" }), process.env.NODE_ENV !== "production" && console.info(
2136
+ `Consider using '${e}' within <ul> or <ol> structure for component '${t}'`
2137
+ )), ["h1", "h2", "h3", "h4", "h5", "h6"].includes(e) && ["HStack", "VStack", "ZStack"].includes(t)) {
2138
+ const n = `Using heading tag '${e}' on layout component ${t}. Consider using Text component instead.`;
2139
+ r.push({ message: n, severity: "info" }), process.env.NODE_ENV !== "production" && console.info(
2140
+ `Heading tag '${e}' is better suited for Text components than '${t}'`
2141
+ );
2142
+ }
2143
+ if (["form", "fieldset", "legend"].includes(e) && !["VStack", "HStack", "Form"].includes(t)) {
2144
+ const n = `Form tag '${e}' used on ${t}. Ensure proper form semantics.`;
2145
+ r.push({ message: n, severity: "info" }), process.env.NODE_ENV !== "production" && console.info(
2146
+ `Form tag '${e}' requires proper semantic context for component '${t}'`
2147
+ );
2148
+ }
2149
+ return r;
2150
+ }
2151
+ }
2152
+ let H = {
2153
+ autoApplySemanticRoles: !0,
2154
+ warnOnOverrides: process.env.NODE_ENV !== "production",
2155
+ warnOnSemanticIssues: process.env.NODE_ENV !== "production",
2156
+ validateTags: !0,
2157
+ allowInvalidTags: !0
2158
+ };
2159
+ function Ii(i) {
2160
+ H = { ...H, ...i };
2161
+ }
2162
+ function K() {
2163
+ return { ...H };
2164
+ }
2165
+ function li(i, e, t) {
2166
+ const r = t || e, n = K();
2167
+ let s = { valid: !0 };
2168
+ return t && (n.warnOnOverrides && di(i, t) && process.env.NODE_ENV !== "production" && console.warn(
2169
+ `Element override: ${i} changed from '${e}' to '${t}'`
2170
+ ), n.validateTags && (s = ui.validate(t, i), !s.valid && !n.allowInvalidTags)) ? (process.env.NODE_ENV !== "production" && console.warn(
2171
+ `Invalid tag '${t}' rejected for '${i}', using default '${e}' instead`
2172
+ ), { tag: e, validation: s }) : { tag: r, validation: s };
2173
+ }
2174
+ function Ri(i, e) {
2175
+ return (t) => li(i, e, t);
2176
+ }
2177
+ var pi = Object.defineProperty, hi = (i, e, t) => e in i ? pi(i, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : i[e] = t, fi = (i, e, t) => hi(i, e + "", t);
2178
+ const Z = class _ {
2179
+ static getInstance() {
2180
+ return _.instance || (_.instance = new _()), _.instance;
2181
+ }
2182
+ /**
2183
+ * Apply semantic ARIA attributes to an element based on its tag
2184
+ */
2185
+ applySemanticAttributes(e, t, r) {
2186
+ const n = K();
2187
+ if (!n.autoApplySemanticRoles) return;
2188
+ const s = T.get(t);
2189
+ if (!(!s || !s.applyARIA)) {
2190
+ if (r?.role) {
2191
+ n.warnOnSemanticIssues && process.env.NODE_ENV !== "production" && console.warn(
2192
+ `ARIA role '${r.role}' overrides semantic role '${s.role}' for tag '${t}'`
2193
+ );
2194
+ return;
2195
+ }
2196
+ if (e.hasAttribute("role")) {
2197
+ n.warnOnSemanticIssues && process.env.NODE_ENV !== "production" && console.warn(
2198
+ `Existing role attribute overrides semantic role '${s.role}' for tag '${t}'`
2199
+ );
2200
+ return;
2201
+ }
2202
+ e.setAttribute("role", s.role), n.warnOnSemanticIssues && process.env.NODE_ENV !== "production" && console.info(
2203
+ `Applied semantic role '${s.role}' to tag '${t}'`
2204
+ );
2205
+ }
2206
+ }
2207
+ /**
2208
+ * Get semantic role information for a tag
2209
+ */
2210
+ getSemanticRole(e) {
2211
+ return T.get(e);
2212
+ }
2213
+ /**
2214
+ * Check if a tag has automatic ARIA role application enabled
2215
+ */
2216
+ hasAutoARIA(e) {
2217
+ const t = T.get(e);
2218
+ return t ? t.applyARIA : !1;
2219
+ }
2220
+ /**
2221
+ * Get all tags that support automatic ARIA roles
2222
+ */
2223
+ getAutoARIATags() {
2224
+ return Array.from(T.entries()).filter(([, e]) => e.applyARIA).map(([e]) => e);
2225
+ }
2226
+ /**
2227
+ * Apply semantic attributes during DOM node creation
2228
+ * This is called by the renderer when creating elements
2229
+ */
2230
+ processElementNode(e, t, r, n) {
2231
+ if (this.applySemanticAttributes(e, t, n), r && process.env.NODE_ENV !== "production") {
2232
+ const s = this.getSemanticRole(t);
2233
+ s && e.setAttribute(
2234
+ "data-tachui-semantic",
2235
+ JSON.stringify({
2236
+ originalComponent: r.originalType,
2237
+ overriddenTo: t,
2238
+ semanticRole: s.role,
2239
+ autoApplied: s.applyARIA
2240
+ })
2241
+ );
2242
+ }
2243
+ }
2244
+ };
2245
+ fi(Z, "instance");
2246
+ let mi = Z;
2247
+ const P = mi.getInstance(), Ni = (i, e, t) => P.applySemanticAttributes(i, e, t), ki = (i) => P.getSemanticRole(i), Bi = (i) => P.hasAutoARIA(i);
2248
+ var gi = Object.defineProperty, yi = (i, e, t) => e in i ? gi(i, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : i[e] = t, k = (i, e, t) => yi(i, typeof e != "symbol" ? e + "" : e, t);
2249
+ class bi {
2250
+ constructor() {
2251
+ k(this, "nodeMap", /* @__PURE__ */ new WeakMap()), k(this, "cleanupMap", /* @__PURE__ */ new WeakMap()), k(this, "renderedNodes", /* @__PURE__ */ new Set());
2252
+ }
2253
+ /**
2254
+ * Render a DOM node to an actual DOM element
2255
+ */
2256
+ render(e, t) {
2257
+ return Array.isArray(e) ? this.renderFragment(e, t) : this.renderSingle(e, t);
2258
+ }
2259
+ /**
2260
+ * Render a single DOM node
2261
+ */
2262
+ renderSingle(e, t) {
2263
+ this.renderedNodes.add(e);
2264
+ let r;
2265
+ switch (e.type) {
2266
+ case "element":
2267
+ r = this.createElement(e);
2268
+ break;
2269
+ case "text":
2270
+ r = this.createTextNode(e);
2271
+ break;
2272
+ case "comment":
2273
+ r = this.createComment(e);
2274
+ break;
2275
+ default:
2276
+ throw new Error(`Unknown node type: ${e.type}`);
2277
+ }
2278
+ if (this.nodeMap.set(e, r), e.element = r, r instanceof Element) {
2279
+ let n = [];
2280
+ "modifiers" in e && Array.isArray(e.modifiers) && e.modifiers.length > 0 && (n = e.modifiers), "componentMetadata" in e && e.componentMetadata?.modifiers && Array.isArray(e.componentMetadata.modifiers) && e.componentMetadata.modifiers.length > 0 && (n = e.componentMetadata.modifiers), n.length > 0 && this.applyModifiersToElement(r, n, e);
2281
+ }
2282
+ return e.dispose && this.addCleanup(r, e.dispose), t && t.appendChild(r), r;
2283
+ }
2284
+ /**
2285
+ * Render multiple nodes as a document fragment
2286
+ */
2287
+ renderFragment(e, t) {
2288
+ const r = document.createDocumentFragment();
2289
+ return e.forEach((n) => {
2290
+ const s = this.renderSingle(n);
2291
+ r.appendChild(s);
2292
+ }), t && t.appendChild(r), r;
2293
+ }
2294
+ /**
2295
+ * Create a DOM element with props and children
2296
+ */
2297
+ createElement(e) {
2298
+ if (!e.tag)
2299
+ throw new Error("Element node must have a tag");
2300
+ const t = document.createElement(e.tag);
2301
+ if (this.applyDebugAttributes(t, e), e.props && this.applyProps(t, e.props), "componentMetadata" in e && e.componentMetadata) {
2302
+ const r = e.componentMetadata;
2303
+ if (r.overriddenTo && r.originalType)
2304
+ try {
2305
+ P.processElementNode(
2306
+ t,
2307
+ e.tag,
2308
+ r,
2309
+ e.props?.aria || void 0
2310
+ );
2311
+ } catch (n) {
2312
+ console.warn("[tachUI] Could not process semantic attributes:", n);
2313
+ }
2314
+ }
2315
+ return e.children && e.children.length > 0 && e.children.forEach((r) => {
2316
+ const n = this.renderSingle(r);
2317
+ t.appendChild(n);
2318
+ }), t;
2319
+ }
2320
+ /**
2321
+ * Apply debug attributes to DOM element if debug mode is enabled
2322
+ */
2323
+ applyDebugAttributes(e, t) {
2324
+ }
2325
+ /**
2326
+ * Create a text node
2327
+ */
2328
+ createTextNode(e) {
2329
+ return document.createTextNode(e.text || "");
2330
+ }
2331
+ /**
2332
+ * Create a comment node
2333
+ */
2334
+ createComment(e) {
2335
+ return document.createComment(e.text || "");
2336
+ }
2337
+ /**
2338
+ * Apply props to a DOM element with reactive updates
2339
+ */
2340
+ applyProps(e, t) {
2341
+ Object.entries(t).forEach(([r, n]) => {
2342
+ this.applyProp(e, r, n);
2343
+ });
2344
+ }
2345
+ /**
2346
+ * Apply a single prop to an element
2347
+ */
2348
+ applyProp(e, t, r) {
2349
+ if (t === "className" || t === "class") {
2350
+ this.applyClassName(e, r);
2351
+ return;
2352
+ }
2353
+ if (t === "style") {
2354
+ this.applyStyle(e, r);
2355
+ return;
2356
+ }
2357
+ if (t.startsWith("on") && typeof r == "function") {
2358
+ this.applyEventListener(e, t, r);
2359
+ return;
2360
+ }
2361
+ if (S(r) || E(r)) {
2362
+ const n = y(() => {
2363
+ const s = r();
2364
+ this.setElementProp(e, t, s);
2365
+ });
2366
+ this.addCleanup(e, () => {
2367
+ n.dispose();
2368
+ });
2369
+ return;
2370
+ }
2371
+ this.setElementProp(e, t, r);
2372
+ }
2373
+ /**
2374
+ * Set a property on an element
2375
+ */
2376
+ setElementProp(e, t, r) {
2377
+ if (r == null) {
2378
+ e.removeAttribute(t);
2379
+ return;
2380
+ }
2381
+ if (typeof r == "boolean") {
2382
+ r ? e.setAttribute(t, "") : e.removeAttribute(t);
2383
+ return;
2384
+ }
2385
+ e.setAttribute(t, String(r));
2386
+ }
2387
+ /**
2388
+ * Apply className with reactive updates
2389
+ */
2390
+ applyClassName(e, t) {
2391
+ if (S(t) || E(t)) {
2392
+ const r = y(() => {
2393
+ const n = t();
2394
+ e.className = this.normalizeClassName(n);
2395
+ });
2396
+ this.addCleanup(e, () => {
2397
+ r.dispose();
2398
+ });
2399
+ } else
2400
+ e.className = this.normalizeClassName(t);
2401
+ }
2402
+ /**
2403
+ * Normalize className value
2404
+ */
2405
+ normalizeClassName(e) {
2406
+ return Array.isArray(e) ? e.filter(Boolean).join(" ") : typeof e == "object" && e !== null ? Object.entries(e).filter(([, t]) => !!t).map(([t]) => t).join(" ") : String(e || "");
2407
+ }
2408
+ /**
2409
+ * Apply styles with reactive updates
2410
+ */
2411
+ applyStyle(e, t) {
2412
+ const r = e;
2413
+ if (S(t) || E(t)) {
2414
+ const n = y(() => {
2415
+ const s = t();
2416
+ this.setElementStyles(r, s);
2417
+ });
2418
+ this.addCleanup(e, () => {
2419
+ n.dispose();
2420
+ });
2421
+ } else
2422
+ this.setElementStyles(r, t);
2423
+ }
2424
+ /**
2425
+ * Set styles on an element
2426
+ */
2427
+ setElementStyles(e, t) {
2428
+ if (typeof t == "string") {
2429
+ e.style.cssText = t;
2430
+ return;
2431
+ }
2432
+ typeof t == "object" && t !== null && Object.entries(t).forEach(([r, n]) => {
2433
+ if (S(n) || E(n)) {
2434
+ const s = y(() => {
2435
+ const o = n();
2436
+ o == null ? e.style.removeProperty(r) : e.style.setProperty(
2437
+ r.replace(/[A-Z]/g, (c) => `-${c.toLowerCase()}`),
2438
+ String(o)
2439
+ );
2440
+ });
2441
+ this.addCleanup(e, () => {
2442
+ s.dispose();
2443
+ });
2444
+ } else
2445
+ n == null ? e.style.removeProperty(r) : e.style.setProperty(
2446
+ r.replace(/[A-Z]/g, (s) => `-${s.toLowerCase()}`),
2447
+ String(n)
2448
+ );
2449
+ });
2450
+ }
2451
+ /**
2452
+ * Apply event listener
2453
+ */
2454
+ applyEventListener(e, t, r) {
2455
+ const n = t.slice(2).toLowerCase(), s = (o) => {
2456
+ try {
2457
+ r(o);
2458
+ } catch (c) {
2459
+ console.error(`Event handler error for ${t}:`, c);
2460
+ }
2461
+ };
2462
+ e.addEventListener(n, s), this.addCleanup(e, () => {
2463
+ e.removeEventListener(n, s);
2464
+ });
2465
+ }
2466
+ /**
2467
+ * Add cleanup function for an element
2468
+ */
2469
+ addCleanup(e, t) {
2470
+ const r = this.cleanupMap.get(e) || [];
2471
+ r.push(t), this.cleanupMap.set(e, r);
2472
+ }
2473
+ /**
2474
+ * Update an existing DOM node
2475
+ */
2476
+ updateNode(e, t) {
2477
+ const r = this.nodeMap.get(e);
2478
+ !r || typeof r.setAttribute != "function" || t && this.applyProps(r, t);
2479
+ }
2480
+ /**
2481
+ * Remove a DOM node and run cleanup
2482
+ */
2483
+ removeNode(e) {
2484
+ const t = this.nodeMap.get(e);
2485
+ if (!t) return;
2486
+ const r = this.cleanupMap.get(t);
2487
+ r && (r.forEach((n) => {
2488
+ try {
2489
+ n();
2490
+ } catch (s) {
2491
+ console.error("Cleanup error:", s);
2492
+ }
2493
+ }), this.cleanupMap.delete(t)), t.parentNode && t.parentNode.removeChild(t), this.nodeMap.delete(e), e.element !== void 0 && (e.element = void 0);
2494
+ }
2495
+ /**
2496
+ * Create reactive text content
2497
+ */
2498
+ createReactiveText(e) {
2499
+ const t = document.createTextNode("");
2500
+ return y(() => {
2501
+ t.textContent = e();
2502
+ }), t;
2503
+ }
2504
+ /**
2505
+ * Create reactive element with dynamic props
2506
+ */
2507
+ createReactiveElement(e, t, r) {
2508
+ const n = document.createElement(e);
2509
+ return y(() => {
2510
+ const s = t();
2511
+ this.applyProps(n, s);
2512
+ }), r && r.forEach((s) => {
2513
+ const o = this.renderSingle(s);
2514
+ n.appendChild(o);
2515
+ }), n;
2516
+ }
2517
+ /**
2518
+ * Apply modifiers to a DOM element
2519
+ */
2520
+ applyModifiersToElement(e, t, r) {
2521
+ try {
2522
+ const n = r.componentInstance || r.componentMetadata && r.componentMetadata.componentInstance || r;
2523
+ ei(
2524
+ r,
2525
+ t,
2526
+ {
2527
+ element: e,
2528
+ componentId: r.componentId || "unknown",
2529
+ phase: "creation",
2530
+ componentInstance: n
2531
+ // Pass the component instance
2532
+ },
2533
+ {
2534
+ batch: !0
2535
+ // Enable batched modifier application
2536
+ }
2537
+ );
2538
+ } catch (n) {
2539
+ console.error("Failed to apply modifiers to element:", n);
2540
+ }
2541
+ }
2542
+ /**
2543
+ * Cleanup all tracked elements
2544
+ */
2545
+ cleanup() {
2546
+ for (const e of this.renderedNodes)
2547
+ if (e.dispose && typeof e.dispose == "function")
2548
+ try {
2549
+ e.dispose();
2550
+ } catch (t) {
2551
+ console.error("Cleanup error:", t);
2552
+ }
2553
+ this.renderedNodes.clear(), this.nodeMap = /* @__PURE__ */ new WeakMap(), this.cleanupMap = /* @__PURE__ */ new WeakMap();
2554
+ }
2555
+ }
2556
+ const B = new bi();
2557
+ function Di(i, e) {
2558
+ return q(() => {
2559
+ let t = [];
2560
+ const r = y(() => {
2561
+ t.forEach((o) => {
2562
+ B.removeNode(o);
2563
+ });
2564
+ const n = i.render(), s = Array.isArray(n) ? n : [n];
2565
+ t = s, s.forEach((o) => {
2566
+ B.render(o, e);
2567
+ });
2568
+ });
2569
+ return () => {
2570
+ r.dispose(), t.forEach((n) => {
2571
+ B.removeNode(n);
2572
+ });
2573
+ };
2574
+ });
2575
+ }
2576
+ function vi(i, e, ...t) {
2577
+ const r = t.flat().filter((s) => s != null).map((s) => typeof s == "string" || typeof s == "number" ? { type: "text", text: String(s) } : s);
2578
+ return {
2579
+ type: "element",
2580
+ tag: i,
2581
+ props: e || {},
2582
+ children: r
2583
+ };
2584
+ }
2585
+ function Hi(i) {
2586
+ if (S(i) || E(i) || typeof i == "function") {
2587
+ const e = {
2588
+ type: "text",
2589
+ text: "",
2590
+ dispose: void 0
2591
+ }, t = q(() => {
2592
+ const r = y(() => {
2593
+ const n = i();
2594
+ if (e.text = String(n), e.element && e.element instanceof Text) {
2595
+ const s = e.element.parentElement;
2596
+ if (s && s.__tachui_asHTML)
2597
+ return;
2598
+ e.element.textContent = e.text;
2599
+ }
2600
+ });
2601
+ return () => {
2602
+ r.dispose();
2603
+ };
2604
+ });
2605
+ return e.dispose = t, e;
2606
+ }
2607
+ return {
2608
+ type: "text",
2609
+ text: i
2610
+ };
2611
+ }
2612
+ var wi = Object.defineProperty, Si = (i, e, t) => e in i ? wi(i, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : i[e] = t, v = (i, e, t) => Si(i, typeof e != "symbol" ? e + "" : e, t);
2613
+ class b {
2614
+ // Make segments public
2615
+ constructor(e, t, r = !0) {
2616
+ this.metadata = t, v(this, "type", "component"), v(this, "id"), v(this, "mounted", !1), v(this, "cleanup", []), v(this, "props", {}), v(this, "segments"), this.id = `concat-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`, this.segments = e;
2617
+ }
2618
+ /**
2619
+ * Render the concatenated component to DOM nodes (Enhanced - Phase 4.2)
2620
+ */
2621
+ render() {
2622
+ const e = this.determineContainerClass(), t = this.buildAccessibilityLabel(), r = this.buildAccessibilityAttributes(), n = this.segments.map((o) => o.render()).flat();
2623
+ return [vi("span", {
2624
+ class: `tachui-concatenated ${e}`,
2625
+ ...r,
2626
+ "aria-label": t || void 0,
2627
+ // Enhanced live region support for dynamic content
2628
+ ...this.hasInteractiveContent() && {
2629
+ "aria-live": "polite",
2630
+ "aria-atomic": "true"
2631
+ },
2632
+ // Add debug information in development
2633
+ ...process.env.NODE_ENV === "development" && {
2634
+ "data-concatenated-segments": this.segments.length,
2635
+ "data-semantic-structure": this.metadata.semanticStructure,
2636
+ "data-accessibility-role": this.metadata.accessibilityRole
2637
+ }
2638
+ }, ...n)];
2639
+ }
2640
+ /**
2641
+ * Build comprehensive accessibility attributes
2642
+ */
2643
+ buildAccessibilityAttributes() {
2644
+ const e = {};
2645
+ switch (this.metadata.accessibilityRole) {
2646
+ case "text":
2647
+ break;
2648
+ case "group":
2649
+ e.role = "group", e["aria-describedby"] = this.generateGroupDescription();
2650
+ break;
2651
+ case "composite":
2652
+ e.role = "group", e["aria-roledescription"] = "interactive content group";
2653
+ break;
2654
+ }
2655
+ return this.metadata.semanticStructure === "mixed" && this.segments.length > 2 && (e["aria-flowto"] = this.generateFlowTargets()), this.hasInteractiveContent() && (e.tabindex = "0", e["aria-description"] = "Contains interactive elements. Use Tab to navigate."), e;
2656
+ }
2657
+ /**
2658
+ * Generate description for grouped content
2659
+ */
2660
+ generateGroupDescription() {
2661
+ const e = this.getUniqueComponentTypes();
2662
+ return e.length === 1 ? `Group of ${this.segments.length} ${e[0]} elements` : `Group containing ${e.join(", ")} elements`;
2663
+ }
2664
+ /**
2665
+ * Generate flow targets for reading order
2666
+ */
2667
+ generateFlowTargets() {
2668
+ return "";
2669
+ }
2670
+ /**
2671
+ * Check if concatenated content contains interactive elements
2672
+ */
2673
+ hasInteractiveContent() {
2674
+ return this.segments.some((e) => {
2675
+ const t = e.component.constructor.name;
2676
+ return t === "EnhancedButton" || t === "EnhancedLinkComponent";
2677
+ });
2678
+ }
2679
+ /**
2680
+ * Get unique component types in this concatenation
2681
+ */
2682
+ getUniqueComponentTypes() {
2683
+ const e = new Set(this.segments.map((t) => {
2684
+ switch (t.component.constructor.name) {
2685
+ case "EnhancedText":
2686
+ return "text";
2687
+ case "EnhancedImage":
2688
+ return "image";
2689
+ case "EnhancedButton":
2690
+ return "button";
2691
+ case "EnhancedLinkComponent":
2692
+ return "link";
2693
+ default:
2694
+ return "component";
2695
+ }
2696
+ }));
2697
+ return Array.from(e);
2698
+ }
2699
+ /**
2700
+ * Concatenate this component with another concatenatable component
2701
+ */
2702
+ concat(e) {
2703
+ let t, r;
2704
+ return e instanceof b ? (t = [...this.segments, ...e.segments], r = this.mergeMetadata(this.metadata, e.metadata, t.length)) : (t = [...this.segments, e.toSegment()], r = this.mergeMetadata(
2705
+ this.metadata,
2706
+ {
2707
+ totalSegments: 1,
2708
+ accessibilityRole: this.determineComponentAccessibilityRole(e),
2709
+ semanticStructure: this.determineComponentSemanticStructure(e)
2710
+ },
2711
+ t.length
2712
+ )), new b(t, r);
2713
+ }
2714
+ /**
2715
+ * Convert this concatenated component to a segment (for further concatenation)
2716
+ */
2717
+ toSegment() {
2718
+ return {
2719
+ id: this.id,
2720
+ component: this,
2721
+ // Cast to satisfy interface requirements
2722
+ modifiers: [],
2723
+ // Concatenated components don't have their own modifiers
2724
+ render: () => this.render()[0]
2725
+ };
2726
+ }
2727
+ /**
2728
+ * Check if this component supports concatenation
2729
+ */
2730
+ isConcatenatable() {
2731
+ return !0;
2732
+ }
2733
+ /**
2734
+ * Determine the appropriate CSS class for the container
2735
+ */
2736
+ determineContainerClass() {
2737
+ const e = this.segments.map((o) => o.component.constructor.name), t = e.some((o) => o === "EnhancedImage"), r = e.some((o) => o === "EnhancedText"), n = e.some((o) => o === "EnhancedButton"), s = e.some((o) => o === "EnhancedLink");
2738
+ return t && r && (n || s) ? "mixed-content" : t && r ? "image-text-composition" : t && !r ? "image-composition" : r && !t ? "text-composition" : "generic-composition";
2739
+ }
2740
+ /**
2741
+ * Build comprehensive accessibility label for screen readers (Enhanced - Phase 4.2)
2742
+ */
2743
+ buildAccessibilityLabel() {
2744
+ const t = this.segments.map((r) => this.extractAccessibilityText(r)).filter(Boolean);
2745
+ return t.length === 0 ? "" : this.joinAccessibilityLabels(t);
2746
+ }
2747
+ /**
2748
+ * Intelligently join accessibility labels based on content and structure
2749
+ */
2750
+ joinAccessibilityLabels(e) {
2751
+ if (e.length === 1) return e[0];
2752
+ switch (this.metadata.semanticStructure) {
2753
+ case "inline":
2754
+ return e.join(" ");
2755
+ case "block":
2756
+ return e.join(". ");
2757
+ case "mixed":
2758
+ return this.smartJoinLabels(e);
2759
+ default:
2760
+ return e.join(" ");
2761
+ }
2762
+ }
2763
+ /**
2764
+ * Context-aware label joining for mixed content
2765
+ */
2766
+ smartJoinLabels(e) {
2767
+ const t = [];
2768
+ for (let r = 0; r < e.length; r++) {
2769
+ const n = e[r], s = e[r + 1];
2770
+ t.push(n), s && (this.needsExplicitSeparator(n, s) ? t.push(". ") : t.push(" "));
2771
+ }
2772
+ return t.join("");
2773
+ }
2774
+ /**
2775
+ * Determine if two accessibility labels need explicit separation
2776
+ */
2777
+ needsExplicitSeparator(e, t) {
2778
+ const r = /[.!?:;]$/.test(e.trim()), n = /^[A-Z]/.test(t.trim());
2779
+ return !r && n;
2780
+ }
2781
+ /**
2782
+ * Extract accessibility text from a component segment
2783
+ */
2784
+ extractAccessibilityText(e) {
2785
+ const t = e.component;
2786
+ switch (t.constructor.name) {
2787
+ case "EnhancedText":
2788
+ return t.content || t.title || "";
2789
+ case "EnhancedImage":
2790
+ return t.alt || t.accessibilityLabel || "Image";
2791
+ case "EnhancedButton":
2792
+ return t.title || t.accessibilityLabel || "Button";
2793
+ case "EnhancedLink":
2794
+ return t.title || t.accessibilityLabel || "Link";
2795
+ case "ConcatenatedComponent":
2796
+ return t.buildAccessibilityLabel();
2797
+ default:
2798
+ return t.accessibilityLabel || "";
2799
+ }
2800
+ }
2801
+ /**
2802
+ * Merge metadata from two concatenation operations
2803
+ */
2804
+ mergeMetadata(e, t, r) {
2805
+ return {
2806
+ totalSegments: r,
2807
+ accessibilityRole: this.mergeAccessibilityRoles(
2808
+ e.accessibilityRole,
2809
+ t.accessibilityRole
2810
+ ),
2811
+ semanticStructure: this.mergeSemanticStructures(
2812
+ e.semanticStructure,
2813
+ t.semanticStructure
2814
+ )
2815
+ };
2816
+ }
2817
+ /**
2818
+ * Merge accessibility roles from two components
2819
+ */
2820
+ mergeAccessibilityRoles(e, t) {
2821
+ return e === "text" && t === "text" ? "text" : e === "composite" || t === "composite" ? "composite" : "group";
2822
+ }
2823
+ /**
2824
+ * Merge semantic structures from two components
2825
+ */
2826
+ mergeSemanticStructures(e, t) {
2827
+ return e === "inline" && t === "inline" ? "inline" : e === "block" && t === "block" ? "block" : "mixed";
2828
+ }
2829
+ /**
2830
+ * Determine accessibility role for a single component
2831
+ */
2832
+ determineComponentAccessibilityRole(e) {
2833
+ switch (e.constructor.name) {
2834
+ case "EnhancedText":
2835
+ return "text";
2836
+ case "EnhancedImage":
2837
+ return "group";
2838
+ case "EnhancedButton":
2839
+ case "EnhancedLink":
2840
+ return "group";
2841
+ default:
2842
+ return "composite";
2843
+ }
2844
+ }
2845
+ /**
2846
+ * Determine semantic structure for a single component
2847
+ */
2848
+ determineComponentSemanticStructure(e) {
2849
+ switch (e.constructor.name) {
2850
+ case "EnhancedText":
2851
+ case "EnhancedImage":
2852
+ return "inline";
2853
+ case "EnhancedButton":
2854
+ case "EnhancedLink":
2855
+ return "inline";
2856
+ // Buttons and links are typically inline in concatenation
2857
+ default:
2858
+ return "mixed";
2859
+ }
2860
+ }
2861
+ /**
2862
+ * Generate comprehensive accessibility tree for this concatenated component
2863
+ */
2864
+ generateAccessibilityTree() {
2865
+ return {
2866
+ role: this.metadata.accessibilityRole,
2867
+ label: this.buildAccessibilityLabel(),
2868
+ children: this.segments.map((e) => this.segmentToAccessibilityNode(e))
2869
+ };
2870
+ }
2871
+ /**
2872
+ * Convert a component segment to an accessibility node
2873
+ */
2874
+ segmentToAccessibilityNode(e) {
2875
+ const t = e.component;
2876
+ return {
2877
+ role: this.determineComponentAccessibilityRole(t),
2878
+ label: this.extractAccessibilityText(e),
2879
+ children: t instanceof b ? t.generateAccessibilityTree().children : void 0
2880
+ };
2881
+ }
2882
+ }
2883
+ export {
2884
+ Ii as A,
2885
+ K as B,
2886
+ b as C,
2887
+ bi as D,
2888
+ ui as E,
2889
+ li as F,
2890
+ Ri as G,
2891
+ mi as H,
2892
+ P as I,
2893
+ Ni as J,
2894
+ ki as K,
2895
+ Bi as L,
2896
+ Xt as M,
2897
+ xe as N,
2898
+ me as O,
2899
+ ge as P,
2900
+ ye as Q,
2901
+ be as R,
2902
+ T as S,
2903
+ J as T,
2904
+ $i as U,
2905
+ ai as V,
2906
+ Pi as W,
2907
+ Mi as a,
2908
+ ei as b,
2909
+ X as c,
2910
+ oi as d,
2911
+ Li as e,
2912
+ D as f,
2913
+ Qt as g,
2914
+ f as h,
2915
+ Ci as i,
2916
+ A as j,
2917
+ re as k,
2918
+ x as l,
2919
+ xi as m,
2920
+ se as n,
2921
+ ne as o,
2922
+ Le as p,
2923
+ oe as q,
2924
+ ae as r,
2925
+ ce as s,
2926
+ de as t,
2927
+ ue as u,
2928
+ vi as v,
2929
+ Di as w,
2930
+ Hi as x,
2931
+ ci as y,
2932
+ di as z
2933
+ };