@hypen-space/web 0.2.6 → 0.2.7

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 (129) hide show
  1. package/dist/src/canvas/accessibility.js +29 -4
  2. package/dist/src/canvas/accessibility.js.map +2 -2
  3. package/dist/src/canvas/events.js +152 -8
  4. package/dist/src/canvas/events.js.map +4 -3
  5. package/dist/src/canvas/index.js +2116 -20
  6. package/dist/src/canvas/index.js.map +11 -3
  7. package/dist/src/canvas/input.js +152 -7
  8. package/dist/src/canvas/input.js.map +4 -3
  9. package/dist/src/canvas/layout.js +256 -11
  10. package/dist/src/canvas/layout.js.map +5 -3
  11. package/dist/src/canvas/paint.js +256 -8
  12. package/dist/src/canvas/paint.js.map +5 -3
  13. package/dist/src/canvas/renderer.js +1866 -22
  14. package/dist/src/canvas/renderer.js.map +10 -3
  15. package/dist/src/canvas/text.js +152 -7
  16. package/dist/src/canvas/text.js.map +4 -3
  17. package/dist/src/canvas/utils.js +29 -4
  18. package/dist/src/canvas/utils.js.map +2 -2
  19. package/dist/src/dom/applicators/advanced-layout.js +29 -7
  20. package/dist/src/dom/applicators/advanced-layout.js.map +2 -2
  21. package/dist/src/dom/applicators/background.js +29 -7
  22. package/dist/src/dom/applicators/background.js.map +2 -2
  23. package/dist/src/dom/applicators/border.js +29 -7
  24. package/dist/src/dom/applicators/border.js.map +2 -2
  25. package/dist/src/dom/applicators/color.js +29 -7
  26. package/dist/src/dom/applicators/color.js.map +2 -2
  27. package/dist/src/dom/applicators/display.js +29 -7
  28. package/dist/src/dom/applicators/display.js.map +2 -2
  29. package/dist/src/dom/applicators/effects.js +29 -7
  30. package/dist/src/dom/applicators/effects.js.map +2 -2
  31. package/dist/src/dom/applicators/events.js +29 -7
  32. package/dist/src/dom/applicators/events.js.map +2 -2
  33. package/dist/src/dom/applicators/font.js +29 -7
  34. package/dist/src/dom/applicators/font.js.map +2 -2
  35. package/dist/src/dom/applicators/index.js +1244 -94
  36. package/dist/src/dom/applicators/index.js.map +18 -3
  37. package/dist/src/dom/applicators/layout.js +29 -7
  38. package/dist/src/dom/applicators/layout.js.map +2 -2
  39. package/dist/src/dom/applicators/margin.js +29 -6
  40. package/dist/src/dom/applicators/margin.js.map +2 -2
  41. package/dist/src/dom/applicators/padding.js +29 -9
  42. package/dist/src/dom/applicators/padding.js.map +2 -2
  43. package/dist/src/dom/applicators/size.js +29 -7
  44. package/dist/src/dom/applicators/size.js.map +2 -2
  45. package/dist/src/dom/applicators/transform.js +29 -7
  46. package/dist/src/dom/applicators/transform.js.map +2 -2
  47. package/dist/src/dom/applicators/transition.js +29 -7
  48. package/dist/src/dom/applicators/transition.js.map +2 -2
  49. package/dist/src/dom/applicators/typography.js +29 -7
  50. package/dist/src/dom/applicators/typography.js.map +2 -2
  51. package/dist/src/dom/canvas/index.js +29 -4
  52. package/dist/src/dom/canvas/index.js.map +2 -2
  53. package/dist/src/dom/components/audio.js +29 -7
  54. package/dist/src/dom/components/audio.js.map +2 -2
  55. package/dist/src/dom/components/avatar.js +29 -7
  56. package/dist/src/dom/components/avatar.js.map +2 -2
  57. package/dist/src/dom/components/badge.js +29 -7
  58. package/dist/src/dom/components/badge.js.map +2 -2
  59. package/dist/src/dom/components/button.js +29 -7
  60. package/dist/src/dom/components/button.js.map +2 -2
  61. package/dist/src/dom/components/card.js +29 -7
  62. package/dist/src/dom/components/card.js.map +2 -2
  63. package/dist/src/dom/components/center.js +29 -7
  64. package/dist/src/dom/components/center.js.map +2 -2
  65. package/dist/src/dom/components/checkbox.js +29 -7
  66. package/dist/src/dom/components/checkbox.js.map +2 -2
  67. package/dist/src/dom/components/column.js +29 -7
  68. package/dist/src/dom/components/column.js.map +2 -2
  69. package/dist/src/dom/components/container.js +29 -7
  70. package/dist/src/dom/components/container.js.map +2 -2
  71. package/dist/src/dom/components/divider.js +29 -7
  72. package/dist/src/dom/components/divider.js.map +2 -2
  73. package/dist/src/dom/components/grid.js +29 -7
  74. package/dist/src/dom/components/grid.js.map +2 -2
  75. package/dist/src/dom/components/heading.js +29 -7
  76. package/dist/src/dom/components/heading.js.map +2 -2
  77. package/dist/src/dom/components/image.js +29 -7
  78. package/dist/src/dom/components/image.js.map +2 -2
  79. package/dist/src/dom/components/index.js +1036 -187
  80. package/dist/src/dom/components/index.js.map +33 -3
  81. package/dist/src/dom/components/input.js +29 -7
  82. package/dist/src/dom/components/input.js.map +2 -2
  83. package/dist/src/dom/components/link.js +29 -7
  84. package/dist/src/dom/components/link.js.map +2 -2
  85. package/dist/src/dom/components/list.js +29 -7
  86. package/dist/src/dom/components/list.js.map +2 -2
  87. package/dist/src/dom/components/paragraph.js +29 -7
  88. package/dist/src/dom/components/paragraph.js.map +2 -2
  89. package/dist/src/dom/components/progressbar.js +29 -7
  90. package/dist/src/dom/components/progressbar.js.map +2 -2
  91. package/dist/src/dom/components/route.js +29 -7
  92. package/dist/src/dom/components/route.js.map +2 -2
  93. package/dist/src/dom/components/router.js +29 -7
  94. package/dist/src/dom/components/router.js.map +2 -2
  95. package/dist/src/dom/components/row.js +29 -7
  96. package/dist/src/dom/components/row.js.map +2 -2
  97. package/dist/src/dom/components/select.js +29 -7
  98. package/dist/src/dom/components/select.js.map +2 -2
  99. package/dist/src/dom/components/slider.js +29 -7
  100. package/dist/src/dom/components/slider.js.map +2 -2
  101. package/dist/src/dom/components/spacer.js +29 -7
  102. package/dist/src/dom/components/spacer.js.map +2 -2
  103. package/dist/src/dom/components/spinner.js +29 -7
  104. package/dist/src/dom/components/spinner.js.map +2 -2
  105. package/dist/src/dom/components/stack.js +29 -7
  106. package/dist/src/dom/components/stack.js.map +2 -2
  107. package/dist/src/dom/components/switch.js +29 -7
  108. package/dist/src/dom/components/switch.js.map +2 -2
  109. package/dist/src/dom/components/text.js +29 -7
  110. package/dist/src/dom/components/text.js.map +2 -2
  111. package/dist/src/dom/components/textarea.js +29 -7
  112. package/dist/src/dom/components/textarea.js.map +2 -2
  113. package/dist/src/dom/components/video.js +29 -7
  114. package/dist/src/dom/components/video.js.map +2 -2
  115. package/dist/src/dom/debug.js +29 -4
  116. package/dist/src/dom/debug.js.map +2 -2
  117. package/dist/src/dom/events.js +29 -4
  118. package/dist/src/dom/events.js.map +2 -2
  119. package/dist/src/dom/index.js +2999 -64
  120. package/dist/src/dom/index.js.map +54 -3
  121. package/dist/src/dom/renderer.js +2677 -63
  122. package/dist/src/dom/renderer.js.map +52 -3
  123. package/dist/src/hypen.js +2895 -56
  124. package/dist/src/hypen.js.map +53 -3
  125. package/dist/src/index.js +5419 -81
  126. package/dist/src/index.js.map +63 -3
  127. package/package.json +2 -2
  128. package/dist/chunk-2s02mkzs.js +0 -32
  129. package/dist/chunk-2s02mkzs.js.map +0 -9
@@ -1,9 +1,60 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": [],
3
+ "sources": ["../src/dom/components/column.ts", "../src/dom/components/row.ts", "../src/dom/components/text.ts", "../src/dom/components/image.ts", "../src/dom/components/button.ts", "../src/dom/components/container.ts", "../src/dom/components/center.ts", "../src/dom/components/list.ts", "../src/dom/components/input.ts", "../src/dom/components/link.ts", "../src/dom/components/textarea.ts", "../src/dom/components/checkbox.ts", "../src/dom/components/select.ts", "../src/dom/components/spacer.ts", "../src/dom/components/stack.ts", "../src/dom/components/divider.ts", "../src/dom/components/grid.ts", "../src/dom/components/card.ts", "../src/dom/components/heading.ts", "../src/dom/components/switch.ts", "../src/dom/components/slider.ts", "../src/dom/components/spinner.ts", "../src/dom/components/badge.ts", "../src/dom/components/avatar.ts", "../src/dom/components/progressbar.ts", "../src/dom/components/video.ts", "../src/dom/components/audio.ts", "../src/dom/components/paragraph.ts", "../src/dom/components/router.ts", "../src/dom/components/route.ts", "../src/dom/applicators/padding.ts", "../src/dom/applicators/margin.ts", "../src/dom/applicators/color.ts", "../src/dom/applicators/border.ts", "../src/dom/applicators/size.ts", "../src/dom/applicators/font.ts", "../src/dom/applicators/layout.ts", "../src/dom/applicators/events.ts", "../src/dom/applicators/typography.ts", "../src/dom/applicators/transform.ts", "../src/dom/applicators/effects.ts", "../src/dom/applicators/advanced-layout.ts", "../src/dom/applicators/background.ts", "../src/dom/applicators/display.ts", "../src/dom/applicators/transition.ts", "../src/dom/components/index.ts", "../src/dom/applicators/index.ts", "../src/dom/canvas/index.ts", "../src/dom/debug.ts", "../src/dom/renderer.ts", "../src/dom/events.ts"],
4
4
  "sourcesContent": [
5
+ "/**\n * Column Component - Vertical Stack\n */\n\nimport type { ComponentHandler } from \"./index.js\";\n\nexport const columnHandler: ComponentHandler = {\n create(): HTMLElement {\n const el = document.createElement(\"div\");\n el.style.display = \"flex\";\n el.style.flexDirection = \"column\";\n el.dataset.hypenType = \"column\";\n return el;\n },\n};\n",
6
+ "/**\n * Row Component - Horizontal Stack\n */\n\nimport type { ComponentHandler } from \"./index.js\";\n\nexport const rowHandler: ComponentHandler = {\n create(): HTMLElement {\n const el = document.createElement(\"div\");\n el.style.display = \"flex\";\n el.style.flexDirection = \"row\";\n el.dataset.hypenType = \"row\";\n return el;\n },\n};\n",
7
+ "/**\n * Text Component\n */\n\nimport type { ComponentHandler } from \"./index.js\";\n\nexport const textHandler: ComponentHandler = {\n create(): HTMLElement {\n const el = document.createElement(\"span\");\n el.style.display = \"inline-block\";\n el.dataset.hypenType = \"text\";\n return el;\n },\n\n applyProps(el: HTMLElement, props: Record<string, any>): void {\n // Text content from first positional arg or \"text\" prop\n const text = props[\"0\"] || props.text;\n if (text !== undefined) {\n // Store the original text template for state interpolation\n el.dataset.textTemplate = String(text);\n el.textContent = String(text);\n }\n },\n};\n",
8
+ "/**\n * Image Component\n */\n\nimport type { ComponentHandler } from \"./index.js\";\n\nexport const imageHandler: ComponentHandler = {\n create(): HTMLElement {\n const el = document.createElement(\"img\");\n el.dataset.hypenType = \"image\";\n return el as any as HTMLElement;\n },\n\n applyProps(el: HTMLElement, props: Record<string, any>): void {\n const img = el as HTMLImageElement;\n\n // Support url, src, or first positional argument\n const src = props[\"0\"] || props.url || props.src;\n if (src !== undefined) {\n img.src = String(src);\n }\n\n if (props.alt !== undefined) {\n img.alt = String(props.alt);\n }\n },\n};\n",
9
+ "/**\n * Button Component\n */\n\nimport type { ComponentHandler } from \"./index.js\";\n\nexport const buttonHandler: ComponentHandler = {\n create(): HTMLElement {\n const el = document.createElement(\"button\");\n el.dataset.hypenType = \"button\";\n return el;\n },\n};\n",
10
+ "/**\n * Container/Box Component\n */\n\nimport type { ComponentHandler } from \"./index.js\";\n\nexport const containerHandler: ComponentHandler = {\n create(): HTMLElement {\n const el = document.createElement(\"div\");\n el.dataset.hypenType = \"container\";\n return el;\n },\n};\n",
11
+ "/**\n * Center Component - Centers content\n */\n\nimport type { ComponentHandler } from \"./index.js\";\n\nexport const centerHandler: ComponentHandler = {\n create(): HTMLElement {\n const el = document.createElement(\"div\");\n el.style.display = \"flex\";\n el.style.alignItems = \"center\";\n el.style.justifyContent = \"center\";\n el.dataset.hypenType = \"center\";\n return el;\n },\n};\n",
12
+ "/**\n * List Component - Scrollable stack\n */\n\nimport type { ComponentHandler } from \"./index.js\";\n\nexport const listHandler: ComponentHandler = {\n create(): HTMLElement {\n const el = document.createElement(\"div\");\n el.style.display = \"flex\";\n el.style.overflow = \"auto\";\n el.dataset.hypenType = \"list\";\n return el;\n },\n\n applyProps(el: HTMLElement, props: Record<string, any>): void {\n // Direction: vertical or horizontal\n const direction = props.direction || props[\"1\"] || \"vertical\";\n if (direction === \"vertical\") {\n el.style.flexDirection = \"column\";\n } else {\n el.style.flexDirection = \"row\";\n }\n\n // Gap between items\n if (props.gap !== undefined) {\n el.style.gap = typeof props.gap === \"number\" ? `${props.gap}px` : String(props.gap);\n }\n },\n};\n",
13
+ "/**\n * Input Component\n */\n\nimport type { ComponentHandler } from \"./index.js\";\n\nexport const inputHandler: ComponentHandler = {\n create(): HTMLElement {\n const el = document.createElement(\"input\");\n el.dataset.hypenType = \"input\";\n return el as any as HTMLElement;\n },\n\n applyProps(el: HTMLElement, props: Record<string, any>): void {\n const input = el as HTMLInputElement;\n\n if (props.type !== undefined) {\n input.type = String(props.type);\n }\n\n if (props.placeholder !== undefined) {\n input.placeholder = String(props.placeholder);\n }\n\n if (props.value !== undefined) {\n input.value = String(props.value);\n }\n },\n};\n",
14
+ "/**\n * Link Component\n */\n\nimport type { ComponentHandler } from \"./index.js\";\n\nexport const linkHandler: ComponentHandler = {\n create(): HTMLElement {\n const el = document.createElement(\"a\");\n el.dataset.hypenType = \"link\";\n return el;\n },\n\n applyProps(el: HTMLElement, props: Record<string, any>): void {\n const anchor = el as HTMLAnchorElement;\n\n // Support href or first positional argument\n const href = props[\"0\"] || props.href;\n if (href !== undefined) {\n anchor.href = String(href);\n }\n\n // Target property\n if (props.target !== undefined) {\n anchor.target = String(props.target);\n }\n\n // Rel property\n if (props.rel !== undefined) {\n anchor.rel = String(props.rel);\n }\n },\n};\n\n\n",
15
+ "/**\n * Textarea Component\n */\n\nimport type { ComponentHandler } from \"./index.js\";\n\nexport const textareaHandler: ComponentHandler = {\n create(): HTMLElement {\n const el = document.createElement(\"textarea\");\n el.dataset.hypenType = \"textarea\";\n return el as any as HTMLElement;\n },\n\n applyProps(el: HTMLElement, props: Record<string, any>): void {\n const textarea = el as HTMLTextAreaElement;\n\n // Value property\n const value = props[\"0\"] || props.value;\n if (value !== undefined) {\n textarea.value = String(value);\n }\n\n // Placeholder\n if (props.placeholder !== undefined) {\n textarea.placeholder = String(props.placeholder);\n }\n\n // Rows\n if (props.rows !== undefined) {\n textarea.rows = Number(props.rows);\n }\n\n // Cols\n if (props.cols !== undefined) {\n textarea.cols = Number(props.cols);\n }\n\n // Disabled\n if (props.disabled !== undefined) {\n textarea.disabled = Boolean(props.disabled);\n }\n\n // Readonly\n if (props.readonly !== undefined) {\n textarea.readOnly = Boolean(props.readonly);\n }\n },\n};\n\n\n",
16
+ "/**\n * Checkbox Component\n */\n\nimport type { ComponentHandler } from \"./index.js\";\n\nexport const checkboxHandler: ComponentHandler = {\n create(): HTMLElement {\n const wrapper = document.createElement(\"label\");\n wrapper.dataset.hypenType = \"checkbox\";\n wrapper.style.display = \"inline-flex\";\n wrapper.style.alignItems = \"center\";\n wrapper.style.gap = \"8px\";\n wrapper.style.cursor = \"pointer\";\n\n const input = document.createElement(\"input\");\n input.type = \"checkbox\";\n input.dataset.hypenCheckbox = \"true\";\n \n wrapper.appendChild(input);\n \n return wrapper;\n },\n\n applyProps(el: HTMLElement, props: Record<string, any>): void {\n const input = el.querySelector('input[type=\"checkbox\"]') as HTMLInputElement;\n if (!input) return;\n\n // Checked state\n if (props.checked !== undefined) {\n input.checked = Boolean(props.checked);\n }\n\n // Disabled\n if (props.disabled !== undefined) {\n input.disabled = Boolean(props.disabled);\n }\n\n // Label text\n const label = props[\"0\"] || props.label;\n if (label !== undefined) {\n // Remove existing text node if any\n const textNodes = Array.from(el.childNodes).filter(\n node => node.nodeType === Node.TEXT_NODE\n );\n textNodes.forEach(node => node.remove());\n \n // Add new label text\n el.appendChild(document.createTextNode(String(label)));\n }\n },\n};\n\n\n",
17
+ "/**\n * Select Component\n */\n\nimport type { ComponentHandler } from \"./index.js\";\n\nexport const selectHandler: ComponentHandler = {\n create(): HTMLElement {\n const el = document.createElement(\"select\");\n el.dataset.hypenType = \"select\";\n return el as any as HTMLElement;\n },\n\n applyProps(el: HTMLElement, props: Record<string, any>): void {\n const select = el as HTMLSelectElement;\n\n // Value property\n if (props.value !== undefined) {\n select.value = String(props.value);\n }\n\n // Disabled\n if (props.disabled !== undefined) {\n select.disabled = Boolean(props.disabled);\n }\n\n // Multiple\n if (props.multiple !== undefined) {\n select.multiple = Boolean(props.multiple);\n }\n\n // Options array\n if (props.options && Array.isArray(props.options)) {\n // Clear existing options\n select.innerHTML = \"\";\n \n // Add new options\n props.options.forEach((opt: any) => {\n const option = document.createElement(\"option\");\n \n if (typeof opt === \"string\") {\n option.value = opt;\n option.textContent = opt;\n } else if (typeof opt === \"object\") {\n option.value = String(opt.value ?? opt.label ?? \"\");\n option.textContent = String(opt.label ?? opt.value ?? \"\");\n if (opt.disabled) option.disabled = true;\n }\n \n select.appendChild(option);\n });\n }\n },\n};\n\n\n",
18
+ "/**\n * Spacer Component - Flexible space in flex layouts\n */\n\nimport type { ComponentHandler } from \"./index.js\";\n\nexport const spacerHandler: ComponentHandler = {\n create(): HTMLElement {\n const el = document.createElement(\"div\");\n el.style.flex = \"1\";\n el.dataset.hypenType = \"spacer\";\n return el;\n },\n};\n\n\n",
19
+ "/**\n * Stack Component - Overlaying elements with absolute positioning\n */\n\nimport type { ComponentHandler } from \"./index.js\";\n\nexport const stackHandler: ComponentHandler = {\n create(): HTMLElement {\n const el = document.createElement(\"div\");\n el.style.position = \"relative\";\n el.style.display = \"flex\";\n el.dataset.hypenType = \"stack\";\n \n // Children will be absolutely positioned\n const style = document.createElement(\"style\");\n style.textContent = `\n [data-hypen-type=\"stack\"] > * {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n [data-hypen-type=\"stack\"] > *:first-child {\n position: relative;\n }\n `;\n el.appendChild(style);\n \n return el;\n },\n};\n\n\n",
20
+ "/**\n * Divider Component - Visual separator\n */\n\nimport type { ComponentHandler } from \"./index.js\";\n\nexport const dividerHandler: ComponentHandler = {\n create(): HTMLElement {\n const el = document.createElement(\"hr\");\n el.dataset.hypenType = \"divider\";\n el.style.border = \"none\";\n el.style.borderTop = \"1px solid #e0e0e0\";\n el.style.margin = \"0\";\n return el;\n },\n\n applyProps(el: HTMLElement, props: Record<string, any>): void {\n // Thickness\n if (props.thickness !== undefined) {\n const thickness = typeof props.thickness === \"number\" \n ? `${props.thickness}px` \n : String(props.thickness);\n el.style.borderTopWidth = thickness;\n }\n\n // Orientation\n if (props.orientation === \"vertical\") {\n el.style.borderTop = \"none\";\n el.style.borderLeft = \"1px solid #e0e0e0\";\n el.style.height = \"100%\";\n el.style.width = \"0\";\n el.style.display = \"inline-block\";\n }\n },\n};\n\n\n",
21
+ "/**\n * Grid Component - CSS Grid Layout\n */\n\nimport type { ComponentHandler } from \"./index.js\";\n\nexport const gridHandler: ComponentHandler = {\n create(): HTMLElement {\n const el = document.createElement(\"div\");\n el.style.display = \"grid\";\n el.dataset.hypenType = \"grid\";\n return el;\n },\n\n applyProps(el: HTMLElement, props: Record<string, any>): void {\n // Columns\n if (props.columns !== undefined) {\n const columns = typeof props.columns === \"number\"\n ? `repeat(${props.columns}, 1fr)`\n : String(props.columns);\n el.style.gridTemplateColumns = columns;\n }\n\n // Rows\n if (props.rows !== undefined) {\n const rows = typeof props.rows === \"number\"\n ? `repeat(${props.rows}, 1fr)`\n : String(props.rows);\n el.style.gridTemplateRows = rows;\n }\n\n // Gap\n if (props.gap !== undefined) {\n const gap = typeof props.gap === \"number\" ? `${props.gap}px` : String(props.gap);\n el.style.gap = gap;\n }\n },\n};\n\n\n",
22
+ "/**\n * Card Component - Container with default styling\n */\n\nimport type { ComponentHandler } from \"./index.js\";\n\nexport const cardHandler: ComponentHandler = {\n create(): HTMLElement {\n const el = document.createElement(\"div\");\n el.dataset.hypenType = \"card\";\n el.style.backgroundColor = \"#ffffff\";\n el.style.borderRadius = \"8px\";\n el.style.boxShadow = \"0 2px 4px rgba(0, 0, 0, 0.1)\";\n el.style.padding = \"16px\";\n return el;\n },\n};\n\n\n",
23
+ "/**\n * Heading Component - Semantic headings (h1-h6)\n */\n\nimport type { ComponentHandler } from \"./index.js\";\n\nexport const headingHandler: ComponentHandler = {\n create(): HTMLElement {\n const el = document.createElement(\"h2\");\n el.dataset.hypenType = \"heading\";\n return el;\n },\n\n applyProps(el: HTMLElement, props: Record<string, any>): void {\n // Level property (1-6)\n if (props.level !== undefined) {\n const level = Math.max(1, Math.min(6, Number(props.level)));\n const newEl = document.createElement(`h${level}`);\n newEl.dataset.hypenType = \"heading\";\n \n // Copy content and attributes\n newEl.innerHTML = el.innerHTML;\n Array.from(el.attributes).forEach(attr => {\n newEl.setAttribute(attr.name, attr.value);\n });\n \n // Replace the element\n if (el.parentNode) {\n el.parentNode.replaceChild(newEl, el);\n }\n }\n\n // Text content\n const text = props[\"0\"] || props.text;\n if (text !== undefined) {\n el.textContent = String(text);\n }\n },\n};\n\n\n",
24
+ "/**\n * Switch Component (Toggle)\n */\n\nimport type { ComponentHandler } from \"./index.js\";\n\nexport const switchHandler: ComponentHandler = {\n create(): HTMLElement {\n const wrapper = document.createElement(\"label\");\n wrapper.dataset.hypenType = \"switch\";\n wrapper.style.display = \"inline-flex\";\n wrapper.style.alignItems = \"center\";\n wrapper.style.gap = \"8px\";\n wrapper.style.cursor = \"pointer\";\n\n const input = document.createElement(\"input\");\n input.type = \"checkbox\";\n input.dataset.hypenSwitch = \"true\";\n \n // Style the switch\n input.style.appearance = \"none\";\n input.style.width = \"44px\";\n input.style.height = \"24px\";\n input.style.backgroundColor = \"#ccc\";\n input.style.borderRadius = \"12px\";\n input.style.position = \"relative\";\n input.style.cursor = \"pointer\";\n input.style.transition = \"background-color 0.2s\";\n \n // Add pseudo-element styling via CSS\n const style = document.createElement(\"style\");\n style.textContent = `\n input[data-hypen-switch=\"true\"]::before {\n content: \"\";\n position: absolute;\n width: 20px;\n height: 20px;\n background-color: white;\n border-radius: 50%;\n top: 2px;\n left: 2px;\n transition: transform 0.2s;\n }\n input[data-hypen-switch=\"true\"]:checked {\n background-color: #4CAF50;\n }\n input[data-hypen-switch=\"true\"]:checked::before {\n transform: translateX(20px);\n }\n `;\n wrapper.appendChild(style);\n wrapper.appendChild(input);\n \n return wrapper;\n },\n\n applyProps(el: HTMLElement, props: Record<string, any>): void {\n const input = el.querySelector('input[type=\"checkbox\"]') as HTMLInputElement;\n if (!input) return;\n\n // On state (checked)\n if (props.on !== undefined) {\n input.checked = Boolean(props.on);\n }\n\n // Disabled\n if (props.disabled !== undefined) {\n input.disabled = Boolean(props.disabled);\n }\n\n // Label text\n const label = props[\"0\"] || props.label;\n if (label !== undefined) {\n // Remove existing text node if any\n const textNodes = Array.from(el.childNodes).filter(\n node => node.nodeType === Node.TEXT_NODE\n );\n textNodes.forEach(node => node.remove());\n \n // Add new label text\n el.appendChild(document.createTextNode(String(label)));\n }\n },\n};\n\n\n",
25
+ "/**\n * Slider Component (Range Input)\n */\n\nimport type { ComponentHandler } from \"./index.js\";\n\nexport const sliderHandler: ComponentHandler = {\n create(): HTMLElement {\n const el = document.createElement(\"input\");\n el.type = \"range\";\n el.dataset.hypenType = \"slider\";\n return el as any as HTMLElement;\n },\n\n applyProps(el: HTMLElement, props: Record<string, any>): void {\n const input = el as HTMLInputElement;\n\n // Value\n if (props.value !== undefined) {\n input.value = String(props.value);\n }\n\n // Min\n if (props.min !== undefined) {\n input.min = String(props.min);\n }\n\n // Max\n if (props.max !== undefined) {\n input.max = String(props.max);\n }\n\n // Step\n if (props.step !== undefined) {\n input.step = String(props.step);\n }\n\n // Disabled\n if (props.disabled !== undefined) {\n input.disabled = Boolean(props.disabled);\n }\n },\n};\n\n\n",
26
+ "/**\n * Spinner Component (Loading Indicator)\n */\n\nimport type { ComponentHandler } from \"./index.js\";\n\nexport const spinnerHandler: ComponentHandler = {\n create(): HTMLElement {\n const wrapper = document.createElement(\"div\");\n wrapper.dataset.hypenType = \"spinner\";\n wrapper.style.display = \"inline-block\";\n\n const spinner = document.createElement(\"div\");\n spinner.style.width = \"40px\";\n spinner.style.height = \"40px\";\n spinner.style.border = \"4px solid #f3f3f3\";\n spinner.style.borderTop = \"4px solid #3498db\";\n spinner.style.borderRadius = \"50%\";\n spinner.style.animation = \"spin 1s linear infinite\";\n\n // Add keyframe animation\n const style = document.createElement(\"style\");\n style.textContent = `\n @keyframes spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n }\n `;\n \n wrapper.appendChild(style);\n wrapper.appendChild(spinner);\n \n return wrapper;\n },\n\n applyProps(el: HTMLElement, props: Record<string, any>): void {\n const spinner = el.querySelector(\"div:not(style)\") as HTMLElement;\n if (!spinner) return;\n\n // Size\n if (props.size !== undefined) {\n const size = String(props.size);\n const sizeMap: Record<string, string> = {\n small: \"24px\",\n medium: \"40px\",\n large: \"60px\",\n };\n const actualSize = sizeMap[size] || size;\n spinner.style.width = actualSize;\n spinner.style.height = actualSize;\n }\n\n // Color\n if (props.color !== undefined) {\n spinner.style.borderTopColor = String(props.color);\n }\n },\n};\n\n\n",
27
+ "/**\n * Badge Component\n */\n\nimport type { ComponentHandler } from \"./index.js\";\n\nexport const badgeHandler: ComponentHandler = {\n create(): HTMLElement {\n const el = document.createElement(\"span\");\n el.dataset.hypenType = \"badge\";\n el.style.display = \"inline-block\";\n el.style.padding = \"4px 8px\";\n el.style.borderRadius = \"4px\";\n el.style.fontSize = \"12px\";\n el.style.fontWeight = \"600\";\n el.style.backgroundColor = \"#e0e0e0\";\n el.style.color = \"#333\";\n return el;\n },\n\n applyProps(el: HTMLElement, props: Record<string, any>): void {\n // Theme\n if (props.theme !== undefined) {\n const theme = String(props.theme);\n const themeColors: Record<string, { bg: string; color: string }> = {\n success: { bg: \"#4CAF50\", color: \"#fff\" },\n error: { bg: \"#f44336\", color: \"#fff\" },\n warning: { bg: \"#ff9800\", color: \"#fff\" },\n info: { bg: \"#2196F3\", color: \"#fff\" },\n default: { bg: \"#e0e0e0\", color: \"#333\" },\n };\n const colors = themeColors[theme] || themeColors.default;\n el.style.backgroundColor = colors.bg;\n el.style.color = colors.color;\n }\n\n // Text content\n const text = props[\"0\"] || props.text;\n if (text !== undefined) {\n el.textContent = String(text);\n }\n },\n};\n\n\n",
28
+ "/**\n * Avatar Component\n */\n\nimport type { ComponentHandler } from \"./index.js\";\n\nexport const avatarHandler: ComponentHandler = {\n create(): HTMLElement {\n const el = document.createElement(\"div\");\n el.dataset.hypenType = \"avatar\";\n el.style.display = \"inline-flex\";\n el.style.alignItems = \"center\";\n el.style.justifyContent = \"center\";\n el.style.width = \"40px\";\n el.style.height = \"40px\";\n el.style.borderRadius = \"50%\";\n el.style.backgroundColor = \"#9e9e9e\";\n el.style.color = \"#fff\";\n el.style.fontSize = \"16px\";\n el.style.fontWeight = \"600\";\n el.style.overflow = \"hidden\";\n return el;\n },\n\n applyProps(el: HTMLElement, props: Record<string, any>): void {\n // Image source\n if (props.src !== undefined) {\n const img = document.createElement(\"img\");\n img.src = String(props.src);\n img.style.width = \"100%\";\n img.style.height = \"100%\";\n img.style.objectFit = \"cover\";\n el.innerHTML = \"\";\n el.appendChild(img);\n } else if (props.initials !== undefined) {\n // Show initials\n el.textContent = String(props.initials).toUpperCase();\n }\n\n // Size\n if (props.size !== undefined) {\n const size = typeof props.size === \"number\" ? `${props.size}px` : String(props.size);\n el.style.width = size;\n el.style.height = size;\n }\n },\n};\n\n\n",
29
+ "/**\n * ProgressBar Component\n */\n\nimport type { ComponentHandler } from \"./index.js\";\n\nexport const progressBarHandler: ComponentHandler = {\n create(): HTMLElement {\n const wrapper = document.createElement(\"div\");\n wrapper.dataset.hypenType = \"progressbar\";\n wrapper.style.width = \"100%\";\n wrapper.style.height = \"8px\";\n wrapper.style.backgroundColor = \"#e0e0e0\";\n wrapper.style.borderRadius = \"4px\";\n wrapper.style.overflow = \"hidden\";\n\n const bar = document.createElement(\"div\");\n bar.dataset.hypenBar = \"true\";\n bar.style.height = \"100%\";\n bar.style.backgroundColor = \"#2196F3\";\n bar.style.transition = \"width 0.3s ease\";\n bar.style.width = \"0%\";\n\n wrapper.appendChild(bar);\n return wrapper;\n },\n\n applyProps(el: HTMLElement, props: Record<string, any>): void {\n const bar = el.querySelector('[data-hypen-bar=\"true\"]') as HTMLElement;\n if (!bar) return;\n\n // Value and max\n const value = Number(props.value || 0);\n const max = Number(props.max || 100);\n const percentage = Math.min(100, Math.max(0, (value / max) * 100));\n bar.style.width = `${percentage}%`;\n\n // Color\n if (props.color !== undefined) {\n bar.style.backgroundColor = String(props.color);\n }\n\n // Height\n if (props.height !== undefined) {\n const height = typeof props.height === \"number\" ? `${props.height}px` : String(props.height);\n el.style.height = height;\n }\n },\n};\n\n\n",
30
+ "/**\n * Video Component\n */\n\nimport type { ComponentHandler } from \"./index.js\";\n\nexport const videoHandler: ComponentHandler = {\n create(): HTMLElement {\n const el = document.createElement(\"video\");\n el.dataset.hypenType = \"video\";\n return el as any as HTMLElement;\n },\n\n applyProps(el: HTMLElement, props: Record<string, any>): void {\n const video = el as HTMLVideoElement;\n\n // Source\n const src = props[\"0\"] || props.src;\n if (src !== undefined) {\n video.src = String(src);\n }\n\n // Controls\n if (props.controls !== undefined) {\n video.controls = Boolean(props.controls);\n }\n\n // Autoplay\n if (props.autoplay !== undefined) {\n video.autoplay = Boolean(props.autoplay);\n }\n\n // Loop\n if (props.loop !== undefined) {\n video.loop = Boolean(props.loop);\n }\n\n // Muted\n if (props.muted !== undefined) {\n video.muted = Boolean(props.muted);\n }\n\n // Poster\n if (props.poster !== undefined) {\n video.poster = String(props.poster);\n }\n },\n};\n\n\n",
31
+ "/**\n * Audio Component\n */\n\nimport type { ComponentHandler } from \"./index.js\";\n\nexport const audioHandler: ComponentHandler = {\n create(): HTMLElement {\n const el = document.createElement(\"audio\");\n el.dataset.hypenType = \"audio\";\n return el as any as HTMLElement;\n },\n\n applyProps(el: HTMLElement, props: Record<string, any>): void {\n const audio = el as HTMLAudioElement;\n\n // Source\n const src = props[\"0\"] || props.src;\n if (src !== undefined) {\n audio.src = String(src);\n }\n\n // Controls\n if (props.controls !== undefined) {\n audio.controls = Boolean(props.controls);\n }\n\n // Autoplay\n if (props.autoplay !== undefined) {\n audio.autoplay = Boolean(props.autoplay);\n }\n\n // Loop\n if (props.loop !== undefined) {\n audio.loop = Boolean(props.loop);\n }\n\n // Muted\n if (props.muted !== undefined) {\n audio.muted = Boolean(props.muted);\n }\n },\n};\n\n\n",
32
+ "/**\n * Paragraph Component\n */\n\nimport type { ComponentHandler } from \"./index.js\";\n\nexport const paragraphHandler: ComponentHandler = {\n create(): HTMLElement {\n const el = document.createElement(\"p\");\n el.dataset.hypenType = \"paragraph\";\n return el;\n },\n\n applyProps(el: HTMLElement, props: Record<string, any>): void {\n // Text content\n const text = props[\"0\"] || props.text;\n if (text !== undefined) {\n el.textContent = String(text);\n }\n },\n};\n\n\n",
33
+ "/**\n * Router Component - Container for routes\n */\n\nimport type { ComponentHandler } from \"./index.js\";\n\nexport const routerHandler: ComponentHandler = {\n create(): HTMLElement {\n const el = document.createElement(\"div\");\n el.style.display = \"flex\";\n el.style.flexDirection = \"column\";\n el.style.width = \"100%\";\n el.dataset.hypenType = \"router\";\n return el;\n },\n\n applyProps(el: HTMLElement, props: Record<string, any>): void {\n // Router doesn't need special prop handling\n // The routing logic is handled by the Router module\n },\n};\n\n",
34
+ "/**\n * Route Component - Lazy rendering container for route content\n * Stores component name as metadata, Router handles actual rendering\n */\n\nimport type { ComponentHandler } from \"./index.js\";\n\nexport const routeHandler: ComponentHandler = {\n create(): HTMLElement {\n const el = document.createElement(\"div\");\n el.style.display = \"flex\";\n el.style.flexDirection = \"column\";\n el.style.width = \"100%\";\n el.dataset.hypenType = \"route\";\n el.dataset.routeRendered = \"false\"; // Track if component has been rendered\n return el;\n },\n\n applyProps(el: HTMLElement, props: Record<string, any>): void {\n // Extract route path from props\n const path = props.path || props[\"0\"] || \"/\";\n el.dataset.routePath = String(path);\n \n // Check if this is a lazy route (has __lazy flag)\n const isLazy = props.__lazy === true;\n el.dataset.routeLazy = String(isLazy);\n \n // Store component name - either from explicit prop or from lazy child\n const componentName = props.component || props.__lazy_child;\n if (componentName) {\n el.dataset.routeComponent = String(componentName);\n }\n \n console.log(`🛣️ Route created: path=\"${path}\", lazy=${isLazy}, component=\"${el.dataset.routeComponent || 'none'}\"`);\n },\n};\n\n",
35
+ "/**\n * Padding Applicator\n */\n\nimport type { ApplicatorHandler } from \"./index.js\";\n\nexport const paddingHandler: ApplicatorHandler = (el, value) => {\n if (typeof value === \"number\") {\n el.style.padding = `${value}px`;\n } else if (typeof value === \"object\") {\n if (value.left !== undefined) el.style.paddingLeft = `${value.left}px`;\n if (value.right !== undefined) el.style.paddingRight = `${value.right}px`;\n if (value.top !== undefined) el.style.paddingTop = `${value.top}px`;\n if (value.bottom !== undefined) el.style.paddingBottom = `${value.bottom}px`;\n } else {\n el.style.padding = String(value);\n }\n};\n",
36
+ "/**\n * Margin Applicator\n */\n\nimport type { ApplicatorHandler } from \"./index.js\";\n\nexport const marginHandler: ApplicatorHandler = (el, value) => {\n if (typeof value === \"number\") {\n el.style.margin = `${value}px`;\n } else if (typeof value === \"object\") {\n if (value.left !== undefined) el.style.marginLeft = `${value.left}px`;\n if (value.right !== undefined) el.style.marginRight = `${value.right}px`;\n if (value.top !== undefined) el.style.marginTop = `${value.top}px`;\n if (value.bottom !== undefined) el.style.marginBottom = `${value.bottom}px`;\n } else {\n el.style.margin = String(value);\n }\n};\n",
37
+ "/**\n * Color Applicators\n */\n\nimport type { ApplicatorHandler } from \"./index.js\";\n\nexport const colorHandlers: Record<string, ApplicatorHandler> = {\n color: (el, value) => {\n el.style.color = String(value);\n },\n\n backgroundColor: (el, value) => {\n el.style.backgroundColor = String(value);\n },\n\n borderColor: (el, value) => {\n el.style.borderColor = String(value);\n },\n\n opacity: (el, value) => {\n el.style.opacity = String(value);\n },\n};\n",
38
+ "/**\n * Border Applicators\n */\n\nimport type { ApplicatorHandler } from \"./index.js\";\n\nexport const borderHandlers: Record<string, ApplicatorHandler> = {\n borderWidth: (el, value) => {\n el.style.borderWidth = typeof value === \"number\" ? `${value}px` : String(value);\n },\n\n borderStyle: (el, value) => {\n el.style.borderStyle = String(value);\n },\n\n borderRadius: (el, value) => {\n el.style.borderRadius = typeof value === \"number\" ? `${value}px` : String(value);\n },\n};\n",
39
+ "/**\n * Size Applicators\n */\n\nimport type { ApplicatorHandler } from \"./index.js\";\n\nexport const sizeHandlers: Record<string, ApplicatorHandler> = {\n width: (el, value) => {\n el.style.width = typeof value === \"number\" ? `${value}px` : String(value);\n },\n\n height: (el, value) => {\n el.style.height = typeof value === \"number\" ? `${value}px` : String(value);\n },\n\n minWidth: (el, value) => {\n el.style.minWidth = typeof value === \"number\" ? `${value}px` : String(value);\n },\n\n minHeight: (el, value) => {\n el.style.minHeight = typeof value === \"number\" ? `${value}px` : String(value);\n },\n\n maxWidth: (el, value) => {\n el.style.maxWidth = typeof value === \"number\" ? `${value}px` : String(value);\n },\n\n maxHeight: (el, value) => {\n el.style.maxHeight = typeof value === \"number\" ? `${value}px` : String(value);\n },\n};\n",
40
+ "/**\n * Font Applicators\n */\n\nimport type { ApplicatorHandler } from \"./index.js\";\n\nexport const fontHandlers: Record<string, ApplicatorHandler> = {\n fontSize: (el, value) => {\n el.style.fontSize = typeof value === \"number\" ? `${value}px` : String(value);\n },\n\n fontWeight: (el, value) => {\n el.style.fontWeight = String(value);\n },\n\n fontFamily: (el, value) => {\n el.style.fontFamily = String(value);\n },\n\n textAlign: (el, value) => {\n el.style.textAlign = String(value);\n },\n\n lineHeight: (el, value) => {\n el.style.lineHeight = String(value);\n },\n};\n",
41
+ "/**\n * Layout Applicators (Flexbox/Grid)\n */\n\nimport type { ApplicatorHandler } from \"./index.js\";\n\nexport const layoutHandlers: Record<string, ApplicatorHandler> = {\n // Unified alignment API - works for both Column and Row\n verticalAlignment: (el, value) => {\n const val = String(value);\n // Check flex-direction to determine which CSS property to set\n const flexDirection = getComputedStyle(el).flexDirection;\n if (flexDirection === \"column\" || flexDirection === \"column-reverse\") {\n // For column: vertical is the main axis (justify-content)\n el.style.justifyContent = val;\n } else {\n // For row: vertical is the cross axis (align-items)\n el.style.alignItems = val;\n }\n },\n\n horizontalAlignment: (el, value) => {\n const val = String(value);\n // Check flex-direction to determine which CSS property to set\n const flexDirection = getComputedStyle(el).flexDirection;\n if (flexDirection === \"column\" || flexDirection === \"column-reverse\") {\n // For column: horizontal is the cross axis (align-items)\n el.style.alignItems = val;\n } else {\n // For row: horizontal is the main axis (justify-content)\n el.style.justifyContent = val;\n }\n },\n\n // Legacy aliases (kept for backward compatibility)\n horizontalAlign: (el, value) => {\n el.style.justifyContent = String(value);\n },\n\n verticalAlign: (el, value) => {\n el.style.alignItems = String(value);\n },\n\n gap: (el, value) => {\n el.style.gap = typeof value === \"number\" ? `${value}px` : String(value);\n },\n\n // weight: unified cross-platform API (same as flex)\n // Use .weight(1) to make element take remaining space in Row/Column\n weight: (el, value) => {\n el.style.flex = String(value);\n },\n\n // flex: CSS flex shorthand (kept for CSS compatibility)\n flex: (el, value) => {\n el.style.flex = String(value);\n },\n\n flexGrow: (el, value) => {\n el.style.flexGrow = String(value);\n },\n\n flexShrink: (el, value) => {\n el.style.flexShrink = String(value);\n },\n\n cursor: (el, value) => {\n el.style.cursor = String(value);\n },\n\n overflow: (el, value) => {\n el.style.overflow = String(value);\n },\n\n scrollable: (el, value) => {\n if (value === true || value === \"true\") {\n el.style.overflow = \"auto\";\n } else if (value === false || value === \"false\") {\n el.style.overflow = \"hidden\";\n } else if (value === \"vertical\") {\n el.style.overflowX = \"hidden\";\n el.style.overflowY = \"auto\";\n } else if (value === \"horizontal\") {\n el.style.overflowX = \"auto\";\n el.style.overflowY = \"hidden\";\n } else if (value === \"both\") {\n el.style.overflow = \"auto\";\n } else {\n el.style.overflow = String(value);\n }\n },\n};\n",
42
+ "/**\n * Event Applicators\n * \n * Handles event applicators like onClick, onPress, etc.\n */\n\nimport type { ApplicatorHandler } from \"./index.js\";\n\nfunction toPlainObject(value: any): any {\n if (value instanceof Map) {\n const obj: Record<string, any> = {};\n for (const [key, val] of value.entries()) {\n obj[key] = toPlainObject(val);\n }\n return obj;\n }\n\n if (Array.isArray(value)) {\n return value.map((item) => toPlainObject(item));\n }\n\n if (value && typeof value === \"object\") {\n const obj: Record<string, any> = {};\n for (const [key, val] of Object.entries(value)) {\n obj[key] = toPlainObject(val);\n }\n return obj;\n }\n\n return value;\n}\n\nfunction extractActionDetails(value: any): { actionName: string | null; payload: Record<string, any> } {\n if (typeof value === \"string\") {\n if (!value.startsWith(\"@\")) {\n return { actionName: null, payload: {} };\n }\n\n let actionName = value.substring(1);\n if (actionName.startsWith(\"actions.\")) {\n actionName = actionName.substring(8);\n }\n return { actionName, payload: {} };\n }\n\n if (value && typeof value === \"object\") {\n const plain = toPlainObject(value);\n const payload: Record<string, any> = {};\n let actionName: string | null = null;\n\n if (plain && typeof plain === \"object\") {\n const actionValue = plain[\"0\"];\n if (typeof actionValue === \"string\" && actionValue.startsWith(\"@\")) {\n actionName = actionValue.substring(1);\n if (actionName.startsWith(\"actions.\")) {\n actionName = actionName.substring(8);\n }\n }\n\n for (const [key, val] of Object.entries(plain)) {\n if (key !== \"0\") {\n payload[key] = val;\n }\n }\n }\n\n return { actionName, payload };\n }\n\n return { actionName: null, payload: {} };\n}\n\nexport const eventHandlers: Record<string, ApplicatorHandler> = {\n onClick: (element, value) => {\n console.log(`[EventApplicator] onClick called with value:`, value);\n\n const { actionName, payload: customPayload } = extractActionDetails(value);\n\n if (!actionName) {\n console.warn(`[EventApplicator] onClick value must be an action reference, got:`, value);\n return;\n }\n\n // Remove existing click listener if any\n const existingListener = (element as any).__hypenClickListener;\n if (existingListener) {\n element.removeEventListener(\"click\", existingListener);\n }\n\n // Create new click listener\n const listener = (event: Event) => {\n console.log(`🔥 [EventApplicator] onClick fired, dispatching action: ${actionName}`);\n\n // Use custom payload if provided, otherwise extract event data\n const payload = Object.keys(customPayload).length > 0\n ? { ...customPayload }\n : extractEventData(event, element);\n\n console.log(`[EventApplicator] onClick payload:`, payload);\n\n // Dispatch action to engine\n const engine = (element as any).__hypenEngine;\n if (engine) {\n engine.dispatchAction(actionName, payload);\n } else {\n console.warn(`[EventApplicator] No engine attached to element for onClick`);\n }\n };\n\n // Store listener reference and attach to DOM\n (element as any).__hypenClickListener = listener;\n element.addEventListener(\"click\", listener);\n\n console.log(`[EventApplicator] onClick handler attached for action: ${actionName}`);\n },\n\n onPress: (element, value) => {\n // For now, treat onPress same as onClick\n // In the future, this could handle touch events differently\n eventHandlers.onClick(element, value);\n },\n\n onChange: (element, value) => {\n const { actionName } = extractActionDetails(value);\n\n if (!actionName) {\n console.warn(`[EventApplicator] onChange value must be an action reference starting with @, got:`, value);\n return;\n }\n\n const existingListener = (element as any).__hypenChangeListener;\n if (existingListener) {\n element.removeEventListener(\"change\", existingListener);\n }\n\n const listener = (event: Event) => {\n console.log(`🔥 [EventApplicator] onChange fired, dispatching action: ${actionName}`);\n\n const payload = extractEventData(event, element);\n\n const engine = (element as any).__hypenEngine;\n if (engine) {\n engine.dispatchAction(actionName, payload);\n } else {\n console.warn(`[EventApplicator] No engine attached to element for onChange`);\n }\n };\n\n (element as any).__hypenChangeListener = listener;\n element.addEventListener(\"change\", listener);\n\n console.log(`[EventApplicator] onChange handler attached for action: ${actionName}`);\n },\n\n onSubmit: (element, value) => {\n const { actionName } = extractActionDetails(value);\n\n if (!actionName) {\n console.warn(`[EventApplicator] onSubmit value must be an action reference starting with @, got:`, value);\n return;\n }\n\n const existingListener = (element as any).__hypenSubmitListener;\n if (existingListener) {\n element.removeEventListener(\"submit\", existingListener);\n }\n\n const listener = (event: Event) => {\n console.log(`🔥 [EventApplicator] onSubmit fired, dispatching action: ${actionName}`);\n\n event.preventDefault();\n\n const payload = extractEventData(event, element);\n\n const engine = (element as any).__hypenEngine;\n if (engine) {\n engine.dispatchAction(actionName, payload);\n } else {\n console.warn(`[EventApplicator] No engine attached to element for onSubmit`);\n }\n };\n\n (element as any).__hypenSubmitListener = listener;\n element.addEventListener(\"submit\", listener);\n\n console.log(`[EventApplicator] onSubmit handler attached for action: ${actionName}`);\n },\n\n onInput: (element, value) => {\n console.log(`[EventApplicator] onInput called with value:`, value);\n \n const { actionName } = extractActionDetails(value);\n\n if (!actionName) {\n console.warn(`[EventApplicator] onInput value must be an action reference starting with @, got:`, value);\n return;\n }\n\n const existingListener = (element as any).__hypenInputListener;\n if (existingListener) {\n element.removeEventListener(\"input\", existingListener);\n }\n\n const listener = (event: Event) => {\n console.log(`🔥 [EventApplicator] onInput fired, dispatching action: ${actionName}`);\n\n const target = event.target as HTMLInputElement | HTMLTextAreaElement;\n const payload = {\n type: event.type,\n timestamp: Date.now(),\n value: target.value,\n input: target.value,\n };\n\n console.log(`[EventApplicator] onInput payload:`, payload);\n\n const engine = (element as any).__hypenEngine;\n if (engine) {\n engine.dispatchAction(actionName, payload);\n } else {\n console.warn(`[EventApplicator] No engine attached to element for onInput`);\n }\n };\n\n (element as any).__hypenInputListener = listener;\n element.addEventListener(\"input\", listener);\n\n console.log(`[EventApplicator] onInput handler attached for action: ${actionName}`);\n },\n\n onKey: (element, value) => {\n console.log(`[EventApplicator] onKey called with value:`, value);\n \n // onKey can receive either:\n // 1. Just an action: \"@action.submit\"\n // 2. Key-specific format from props like onKey.key = \"return\", onKey.action = \"@action.submit\"\n \n // For now, we'll handle the simple case where onKey receives the action directly\n // and triggers on Enter key by default\n const { actionName } = extractActionDetails(value);\n\n if (actionName) {\n \n const existingListener = (element as any).__hypenKeyListener;\n if (existingListener) {\n element.removeEventListener(\"keydown\", existingListener);\n }\n \n const listener = (event: KeyboardEvent) => {\n // Default to Enter key\n if (event.key === \"Enter\") {\n console.log(`🔥 [EventApplicator] onKey fired (Enter), dispatching action: ${actionName}`);\n \n event.preventDefault();\n \n const target = event.target as HTMLInputElement | HTMLTextAreaElement;\n const payload = {\n type: event.type,\n timestamp: Date.now(),\n key: event.key,\n code: event.code,\n value: target.value,\n input: target.value,\n ctrlKey: event.ctrlKey,\n shiftKey: event.shiftKey,\n altKey: event.altKey,\n metaKey: event.metaKey,\n };\n \n const engine = (element as any).__hypenEngine;\n if (engine) {\n engine.dispatchAction(actionName, payload);\n } else {\n console.warn(`[EventApplicator] No engine attached to element for onKey`);\n }\n }\n };\n \n (element as any).__hypenKeyListener = listener;\n element.addEventListener(\"keydown\", listener);\n \n console.log(`[EventApplicator] onKey handler attached for action: ${actionName} (triggers on Enter)`);\n } else {\n console.warn(`[EventApplicator] onKey value must be an action reference starting with @, got: ${value}`);\n }\n },\n\n // Handle key-specific applicator: onKey.key for specifying which key\n \"onKey.key\": (element, keyValue) => {\n console.log(`[EventApplicator] onKey.key called with value:`, keyValue);\n // Store the key to check in the listener\n (element as any).__hypenKeyTarget = keyValue;\n },\n\n // Handle action for specific key: onKey.action\n \"onKey.action\": (element, value) => {\n console.log(`[EventApplicator] onKey.action called with value:`, value);\n \n const { actionName } = extractActionDetails(value);\n\n if (actionName) {\n \n const targetKey = (element as any).__hypenKeyTarget || \"Enter\";\n \n const existingListener = (element as any).__hypenKeyListener;\n if (existingListener) {\n element.removeEventListener(\"keydown\", existingListener);\n }\n \n const listener = (event: KeyboardEvent) => {\n const keyToMatch = targetKey.toLowerCase() === \"return\" ? \"Enter\" : targetKey;\n \n if (event.key === keyToMatch) {\n console.log(`🔥 [EventApplicator] onKey fired (${keyToMatch}), dispatching action: ${actionName}`);\n \n event.preventDefault();\n \n const target = event.target as HTMLInputElement | HTMLTextAreaElement;\n const payload = {\n type: event.type,\n timestamp: Date.now(),\n key: event.key,\n code: event.code,\n value: target.value,\n input: target.value,\n ctrlKey: event.ctrlKey,\n shiftKey: event.shiftKey,\n altKey: event.altKey,\n metaKey: event.metaKey,\n };\n \n const engine = (element as any).__hypenEngine;\n if (engine) {\n engine.dispatchAction(actionName, payload);\n }\n }\n };\n \n (element as any).__hypenKeyListener = listener;\n element.addEventListener(\"keydown\", listener);\n \n console.log(`[EventApplicator] onKey handler attached for action: ${actionName} on key: ${targetKey}`);\n }\n },\n\n onScroll: (element, value) => {\n console.log(`[EventApplicator] onScroll called with value:`, value);\n\n const { actionName } = extractActionDetails(value);\n\n if (actionName) {\n\n // Remove existing scroll listener if any\n const existingListener = (element as any).__hypenScrollListener;\n if (existingListener) {\n element.removeEventListener(\"scroll\", existingListener);\n }\n\n // Create new scroll listener with throttling to avoid too many events\n let throttleTimer: number | null = null;\n const listener = (event: Event) => {\n if (throttleTimer) return;\n\n throttleTimer = setTimeout(() => {\n throttleTimer = null;\n }, 100) as unknown as number; // Throttle to max 10 events/second\n\n const target = event.target as HTMLElement;\n const scrollTop = target.scrollTop;\n const scrollHeight = target.scrollHeight;\n const clientHeight = target.clientHeight;\n const scrollPercentage = (scrollTop / (scrollHeight - clientHeight)) * 100;\n\n // Calculate if near bottom (within 100px or 90% scrolled)\n const nearBottom = scrollHeight - scrollTop - clientHeight < 100 || scrollPercentage > 90;\n\n console.log(`🔥 [EventApplicator] onScroll fired, scrollTop: ${scrollTop}, nearBottom: ${nearBottom}`);\n\n const payload = {\n type: \"scroll\",\n timestamp: Date.now(),\n scrollTop,\n scrollLeft: target.scrollLeft,\n scrollHeight,\n scrollWidth: target.scrollWidth,\n clientHeight,\n clientWidth: target.clientWidth,\n scrollPercentage: Math.round(scrollPercentage),\n nearBottom,\n atBottom: scrollHeight - scrollTop === clientHeight,\n atTop: scrollTop === 0,\n };\n\n const engine = (element as any).__hypenEngine;\n if (engine) {\n engine.dispatchAction(actionName, payload);\n } else {\n console.warn(`[EventApplicator] No engine attached to element for onScroll`);\n }\n };\n\n (element as any).__hypenScrollListener = listener;\n element.addEventListener(\"scroll\", listener, { passive: true });\n\n console.log(`[EventApplicator] onScroll handler attached for action: ${actionName}`);\n } else {\n console.warn(`[EventApplicator] onScroll value must be an action reference starting with @, got: ${value}`);\n }\n },\n\n onLongClick: (element, value) => {\n console.log(`[EventApplicator] onLongClick called with value:`, value);\n\n const { actionName, payload: customPayload } = extractActionDetails(value);\n\n if (!actionName) {\n console.warn(`[EventApplicator] onLongClick value must be an action reference, got:`, value);\n return;\n }\n\n // Remove existing long click listeners if any\n const existingDownListener = (element as any).__hypenLongClickDownListener;\n const existingUpListener = (element as any).__hypenLongClickUpListener;\n if (existingDownListener) {\n element.removeEventListener(\"pointerdown\", existingDownListener);\n }\n if (existingUpListener) {\n element.removeEventListener(\"pointerup\", existingUpListener);\n element.removeEventListener(\"pointerleave\", existingUpListener);\n }\n\n // Long click implementation using pointer events with 500ms threshold\n let longClickTimer: ReturnType<typeof setTimeout> | null = null;\n const LONG_CLICK_THRESHOLD = 500; // 500ms\n\n const downListener = (event: PointerEvent) => {\n longClickTimer = setTimeout(() => {\n console.log(`🔥 [EventApplicator] onLongClick fired, dispatching action: ${actionName}`);\n\n const payload = Object.keys(customPayload).length > 0\n ? { ...customPayload }\n : {\n type: \"longclick\",\n timestamp: Date.now(),\n clientX: event.clientX,\n clientY: event.clientY,\n };\n\n const engine = (element as any).__hypenEngine;\n if (engine) {\n engine.dispatchAction(actionName, payload);\n } else {\n console.warn(`[EventApplicator] No engine attached to element for onLongClick`);\n }\n\n longClickTimer = null;\n }, LONG_CLICK_THRESHOLD);\n };\n\n const upListener = () => {\n if (longClickTimer) {\n clearTimeout(longClickTimer);\n longClickTimer = null;\n }\n };\n\n (element as any).__hypenLongClickDownListener = downListener;\n (element as any).__hypenLongClickUpListener = upListener;\n element.addEventListener(\"pointerdown\", downListener);\n element.addEventListener(\"pointerup\", upListener);\n element.addEventListener(\"pointerleave\", upListener);\n\n console.log(`[EventApplicator] onLongClick handler attached for action: ${actionName}`);\n },\n\n onFocus: (element, value) => {\n console.log(`[EventApplicator] onFocus called with value:`, value);\n\n const { actionName, payload: customPayload } = extractActionDetails(value);\n\n if (!actionName) {\n console.warn(`[EventApplicator] onFocus value must be an action reference, got:`, value);\n return;\n }\n\n // Remove existing focus listener if any\n const existingListener = (element as any).__hypenFocusListener;\n if (existingListener) {\n element.removeEventListener(\"focus\", existingListener);\n }\n\n const listener = (event: FocusEvent) => {\n console.log(`🔥 [EventApplicator] onFocus fired, dispatching action: ${actionName}`);\n\n const target = event.target as HTMLElement;\n const payload = Object.keys(customPayload).length > 0\n ? { ...customPayload }\n : {\n type: \"focus\",\n timestamp: Date.now(),\n value: (target as HTMLInputElement).value ?? undefined,\n };\n\n const engine = (element as any).__hypenEngine;\n if (engine) {\n engine.dispatchAction(actionName, payload);\n } else {\n console.warn(`[EventApplicator] No engine attached to element for onFocus`);\n }\n };\n\n (element as any).__hypenFocusListener = listener;\n element.addEventListener(\"focus\", listener);\n\n console.log(`[EventApplicator] onFocus handler attached for action: ${actionName}`);\n },\n\n onBlur: (element, value) => {\n console.log(`[EventApplicator] onBlur called with value:`, value);\n\n const { actionName, payload: customPayload } = extractActionDetails(value);\n\n if (!actionName) {\n console.warn(`[EventApplicator] onBlur value must be an action reference, got:`, value);\n return;\n }\n\n // Remove existing blur listener if any\n const existingListener = (element as any).__hypenBlurListener;\n if (existingListener) {\n element.removeEventListener(\"blur\", existingListener);\n }\n\n const listener = (event: FocusEvent) => {\n console.log(`🔥 [EventApplicator] onBlur fired, dispatching action: ${actionName}`);\n\n const target = event.target as HTMLElement;\n const payload = Object.keys(customPayload).length > 0\n ? { ...customPayload }\n : {\n type: \"blur\",\n timestamp: Date.now(),\n value: (target as HTMLInputElement).value ?? undefined,\n };\n\n const engine = (element as any).__hypenEngine;\n if (engine) {\n engine.dispatchAction(actionName, payload);\n } else {\n console.warn(`[EventApplicator] No engine attached to element for onBlur`);\n }\n };\n\n (element as any).__hypenBlurListener = listener;\n element.addEventListener(\"blur\", listener);\n\n console.log(`[EventApplicator] onBlur handler attached for action: ${actionName}`);\n },\n\n onMouseEnter: (element, value) => {\n console.log(`[EventApplicator] onMouseEnter called with value:`, value);\n\n const { actionName, payload: customPayload } = extractActionDetails(value);\n\n if (!actionName) {\n console.warn(`[EventApplicator] onMouseEnter value must be an action reference, got:`, value);\n return;\n }\n\n // Remove existing listener if any\n const existingListener = (element as any).__hypenMouseEnterListener;\n if (existingListener) {\n element.removeEventListener(\"mouseenter\", existingListener);\n }\n\n const listener = (event: MouseEvent) => {\n console.log(`🔥 [EventApplicator] onMouseEnter fired, dispatching action: ${actionName}`);\n\n const payload = Object.keys(customPayload).length > 0\n ? { ...customPayload }\n : {\n type: \"mouseenter\",\n timestamp: Date.now(),\n clientX: event.clientX,\n clientY: event.clientY,\n };\n\n const engine = (element as any).__hypenEngine;\n if (engine) {\n engine.dispatchAction(actionName, payload);\n } else {\n console.warn(`[EventApplicator] No engine attached to element for onMouseEnter`);\n }\n };\n\n (element as any).__hypenMouseEnterListener = listener;\n element.addEventListener(\"mouseenter\", listener);\n\n console.log(`[EventApplicator] onMouseEnter handler attached for action: ${actionName}`);\n },\n\n onMouseLeave: (element, value) => {\n console.log(`[EventApplicator] onMouseLeave called with value:`, value);\n\n const { actionName, payload: customPayload } = extractActionDetails(value);\n\n if (!actionName) {\n console.warn(`[EventApplicator] onMouseLeave value must be an action reference, got:`, value);\n return;\n }\n\n // Remove existing listener if any\n const existingListener = (element as any).__hypenMouseLeaveListener;\n if (existingListener) {\n element.removeEventListener(\"mouseleave\", existingListener);\n }\n\n const listener = (event: MouseEvent) => {\n console.log(`🔥 [EventApplicator] onMouseLeave fired, dispatching action: ${actionName}`);\n\n const payload = Object.keys(customPayload).length > 0\n ? { ...customPayload }\n : {\n type: \"mouseleave\",\n timestamp: Date.now(),\n clientX: event.clientX,\n clientY: event.clientY,\n };\n\n const engine = (element as any).__hypenEngine;\n if (engine) {\n engine.dispatchAction(actionName, payload);\n } else {\n console.warn(`[EventApplicator] No engine attached to element for onMouseLeave`);\n }\n };\n\n (element as any).__hypenMouseLeaveListener = listener;\n element.addEventListener(\"mouseleave\", listener);\n\n console.log(`[EventApplicator] onMouseLeave handler attached for action: ${actionName}`);\n },\n\n};\n\n/**\n * Extract relevant data from an event\n */\nfunction extractEventData(event: Event, element: HTMLElement): any {\n const data: any = {\n type: event.type,\n timestamp: Date.now(),\n };\n\n // Mouse events\n if (event instanceof MouseEvent) {\n data.clientX = event.clientX;\n data.clientY = event.clientY;\n data.button = event.button;\n }\n\n // Keyboard events\n if (event instanceof KeyboardEvent) {\n data.key = event.key;\n data.code = event.code;\n data.ctrlKey = event.ctrlKey;\n data.shiftKey = event.shiftKey;\n data.altKey = event.altKey;\n data.metaKey = event.metaKey;\n }\n\n // Input events (for form elements)\n if (element instanceof HTMLInputElement || element instanceof HTMLTextAreaElement) {\n data.value = element.value;\n }\n\n // Select events\n if (element instanceof HTMLSelectElement) {\n data.value = element.value;\n data.selectedIndex = element.selectedIndex;\n }\n\n // Form events\n if (event.type === \"submit\" && element instanceof HTMLFormElement) {\n data.formData = new FormData(element);\n }\n\n return data;\n}\n",
43
+ "/**\n * Typography Applicators\n */\n\nimport type { ApplicatorHandler } from \"./index.js\";\n\nexport const typographyHandlers: Record<string, ApplicatorHandler> = {\n textAlign: (el, value) => {\n el.style.textAlign = String(value);\n },\n\n textTransform: (el, value) => {\n el.style.textTransform = String(value);\n },\n\n textDecoration: (el, value) => {\n el.style.textDecoration = String(value);\n },\n\n textDecorationColor: (el, value) => {\n el.style.textDecorationColor = String(value);\n },\n\n textDecorationStyle: (el, value) => {\n el.style.textDecorationStyle = String(value);\n },\n\n textDecorationThickness: (el, value) => {\n el.style.textDecorationThickness = typeof value === \"number\" ? `${value}px` : String(value);\n },\n\n letterSpacing: (el, value) => {\n el.style.letterSpacing = typeof value === \"number\" ? `${value}px` : String(value);\n },\n\n wordSpacing: (el, value) => {\n el.style.wordSpacing = typeof value === \"number\" ? `${value}px` : String(value);\n },\n\n lineHeight: (el, value) => {\n el.style.lineHeight = String(value);\n },\n\n textIndent: (el, value) => {\n el.style.textIndent = typeof value === \"number\" ? `${value}px` : String(value);\n },\n\n textOverflow: (el, value) => {\n el.style.textOverflow = String(value);\n },\n\n whiteSpace: (el, value) => {\n el.style.whiteSpace = String(value);\n },\n\n wordBreak: (el, value) => {\n el.style.wordBreak = String(value);\n },\n\n verticalAlign: (el, value) => {\n el.style.verticalAlign = String(value);\n },\n\n fontVariant: (el, value) => {\n el.style.fontVariant = String(value);\n },\n\n fontStretch: (el, value) => {\n el.style.fontStretch = String(value);\n },\n\n fontStyle: (el, value) => {\n el.style.fontStyle = String(value);\n },\n\n writingMode: (el, value) => {\n el.style.writingMode = String(value);\n },\n\n maxLines: (el, value) => {\n const lines = typeof value === \"number\" ? value : parseInt(String(value), 10);\n if (!isNaN(lines) && lines > 0) {\n el.style.display = \"-webkit-box\";\n el.style.setProperty(\"-webkit-line-clamp\", String(lines));\n el.style.setProperty(\"-webkit-box-orient\", \"vertical\");\n el.style.overflow = \"hidden\";\n }\n },\n};\n\n\n",
44
+ "/**\n * Transform Applicators\n */\n\nimport type { ApplicatorHandler } from \"./index.js\";\n\nexport const transformHandlers: Record<string, ApplicatorHandler> = {\n transform: (el, value) => {\n el.style.transform = String(value);\n },\n\n transformOrigin: (el, value) => {\n el.style.transformOrigin = String(value);\n },\n\n translateX: (el, value) => {\n const current = el.style.transform || \"\";\n const val = typeof value === \"number\" ? `${value}px` : String(value);\n el.style.transform = current ? `${current} translateX(${val})` : `translateX(${val})`;\n },\n\n translateY: (el, value) => {\n const current = el.style.transform || \"\";\n const val = typeof value === \"number\" ? `${value}px` : String(value);\n el.style.transform = current ? `${current} translateY(${val})` : `translateY(${val})`;\n },\n\n translateZ: (el, value) => {\n const current = el.style.transform || \"\";\n const val = typeof value === \"number\" ? `${value}px` : String(value);\n el.style.transform = current ? `${current} translateZ(${val})` : `translateZ(${val})`;\n },\n\n rotate: (el, value) => {\n const current = el.style.transform || \"\";\n const val = String(value);\n el.style.transform = current ? `${current} rotate(${val})` : `rotate(${val})`;\n },\n\n rotateX: (el, value) => {\n const current = el.style.transform || \"\";\n const val = String(value);\n el.style.transform = current ? `${current} rotateX(${val})` : `rotateX(${val})`;\n },\n\n rotateY: (el, value) => {\n const current = el.style.transform || \"\";\n const val = String(value);\n el.style.transform = current ? `${current} rotateY(${val})` : `rotateY(${val})`;\n },\n\n rotateZ: (el, value) => {\n const current = el.style.transform || \"\";\n const val = String(value);\n el.style.transform = current ? `${current} rotateZ(${val})` : `rotateZ(${val})`;\n },\n\n scale: (el, value) => {\n const current = el.style.transform || \"\";\n el.style.transform = current ? `${current} scale(${value})` : `scale(${value})`;\n },\n\n scaleX: (el, value) => {\n const current = el.style.transform || \"\";\n el.style.transform = current ? `${current} scaleX(${value})` : `scaleX(${value})`;\n },\n\n scaleY: (el, value) => {\n const current = el.style.transform || \"\";\n el.style.transform = current ? `${current} scaleY(${value})` : `scaleY(${value})`;\n },\n\n skew: (el, value) => {\n const current = el.style.transform || \"\";\n el.style.transform = current ? `${current} skew(${value})` : `skew(${value})`;\n },\n\n skewX: (el, value) => {\n const current = el.style.transform || \"\";\n el.style.transform = current ? `${current} skewX(${value})` : `skewX(${value})`;\n },\n\n skewY: (el, value) => {\n const current = el.style.transform || \"\";\n el.style.transform = current ? `${current} skewY(${value})` : `skewY(${value})`;\n },\n\n perspective: (el, value) => {\n el.style.perspective = typeof value === \"number\" ? `${value}px` : String(value);\n },\n};\n\n\n",
45
+ "/**\n * Visual Effects Applicators (Shadows, Filters, Blend Modes)\n */\n\nimport type { ApplicatorHandler } from \"./index.js\";\n\nexport const effectsHandlers: Record<string, ApplicatorHandler> = {\n // Shadow effects\n boxShadow: (el, value) => {\n el.style.boxShadow = String(value);\n },\n\n textShadow: (el, value) => {\n el.style.textShadow = String(value);\n },\n\n // Filter effects\n filter: (el, value) => {\n el.style.filter = String(value);\n },\n\n backdropFilter: (el, value) => {\n el.style.backdropFilter = String(value);\n },\n\n // Individual filter functions\n blur: (el, value) => {\n const val = typeof value === \"number\" ? `${value}px` : String(value);\n const current = el.style.filter || \"\";\n el.style.filter = current ? `${current} blur(${val})` : `blur(${val})`;\n },\n\n brightness: (el, value) => {\n const current = el.style.filter || \"\";\n el.style.filter = current ? `${current} brightness(${value})` : `brightness(${value})`;\n },\n\n contrast: (el, value) => {\n const current = el.style.filter || \"\";\n el.style.filter = current ? `${current} contrast(${value})` : `contrast(${value})`;\n },\n\n grayscale: (el, value) => {\n const current = el.style.filter || \"\";\n el.style.filter = current ? `${current} grayscale(${value})` : `grayscale(${value})`;\n },\n\n hueRotate: (el, value) => {\n const val = String(value);\n const current = el.style.filter || \"\";\n el.style.filter = current ? `${current} hue-rotate(${val})` : `hue-rotate(${val})`;\n },\n\n invert: (el, value) => {\n const current = el.style.filter || \"\";\n el.style.filter = current ? `${current} invert(${value})` : `invert(${value})`;\n },\n\n saturate: (el, value) => {\n const current = el.style.filter || \"\";\n el.style.filter = current ? `${current} saturate(${value})` : `saturate(${value})`;\n },\n\n sepia: (el, value) => {\n const current = el.style.filter || \"\";\n el.style.filter = current ? `${current} sepia(${value})` : `sepia(${value})`;\n },\n\n dropShadow: (el, value) => {\n const current = el.style.filter || \"\";\n el.style.filter = current ? `${current} drop-shadow(${value})` : `drop-shadow(${value})`;\n },\n\n // Blend modes\n mixBlendMode: (el, value) => {\n el.style.mixBlendMode = String(value);\n },\n\n backgroundBlendMode: (el, value) => {\n el.style.backgroundBlendMode = String(value);\n },\n\n // Clip and mask\n clipPath: (el, value) => {\n el.style.clipPath = String(value);\n },\n\n mask: (el, value) => {\n el.style.mask = String(value);\n },\n\n maskImage: (el, value) => {\n el.style.maskImage = String(value);\n },\n};\n\n\n",
46
+ "/**\n * Advanced Layout Applicators (Flexbox, Grid, Positioning)\n */\n\nimport type { ApplicatorHandler } from \"./index.js\";\n\nexport const advancedLayoutHandlers: Record<string, ApplicatorHandler> = {\n // Flexbox properties\n flexDirection: (el, value) => {\n el.style.flexDirection = String(value);\n },\n\n flexWrap: (el, value) => {\n el.style.flexWrap = String(value);\n },\n\n flexBasis: (el, value) => {\n el.style.flexBasis = typeof value === \"number\" ? `${value}px` : String(value);\n },\n\n justifyContent: (el, value) => {\n el.style.justifyContent = String(value);\n },\n\n alignItems: (el, value) => {\n el.style.alignItems = String(value);\n },\n\n alignContent: (el, value) => {\n el.style.alignContent = String(value);\n },\n\n alignSelf: (el, value) => {\n el.style.alignSelf = String(value);\n },\n\n order: (el, value) => {\n el.style.order = String(value);\n },\n\n // Grid properties\n gridTemplateColumns: (el, value) => {\n el.style.gridTemplateColumns = String(value);\n },\n\n gridTemplateRows: (el, value) => {\n el.style.gridTemplateRows = String(value);\n },\n\n gridTemplateAreas: (el, value) => {\n el.style.gridTemplateAreas = String(value);\n },\n\n gridColumn: (el, value) => {\n el.style.gridColumn = String(value);\n },\n\n gridRow: (el, value) => {\n el.style.gridRow = String(value);\n },\n\n gridArea: (el, value) => {\n el.style.gridArea = String(value);\n },\n\n gridAutoFlow: (el, value) => {\n el.style.gridAutoFlow = String(value);\n },\n\n gridAutoColumns: (el, value) => {\n el.style.gridAutoColumns = String(value);\n },\n\n gridAutoRows: (el, value) => {\n el.style.gridAutoRows = String(value);\n },\n\n rowGap: (el, value) => {\n el.style.rowGap = typeof value === \"number\" ? `${value}px` : String(value);\n },\n\n columnGap: (el, value) => {\n el.style.columnGap = typeof value === \"number\" ? `${value}px` : String(value);\n },\n\n placeItems: (el, value) => {\n el.style.placeItems = String(value);\n },\n\n placeContent: (el, value) => {\n el.style.placeContent = String(value);\n },\n\n placeSelf: (el, value) => {\n el.style.placeSelf = String(value);\n },\n\n // Positioning\n position: (el, value) => {\n el.style.position = String(value);\n },\n\n top: (el, value) => {\n el.style.top = typeof value === \"number\" ? `${value}px` : String(value);\n },\n\n right: (el, value) => {\n el.style.right = typeof value === \"number\" ? `${value}px` : String(value);\n },\n\n bottom: (el, value) => {\n el.style.bottom = typeof value === \"number\" ? `${value}px` : String(value);\n },\n\n left: (el, value) => {\n el.style.left = typeof value === \"number\" ? `${value}px` : String(value);\n },\n\n inset: (el, value) => {\n el.style.inset = typeof value === \"number\" ? `${value}px` : String(value);\n },\n\n zIndex: (el, value) => {\n el.style.zIndex = String(value);\n },\n};\n\n\n",
47
+ "/**\n * Background Applicators\n */\n\nimport type { ApplicatorHandler } from \"./index.js\";\n\nexport const backgroundHandlers: Record<string, ApplicatorHandler> = {\n backgroundImage: (el, value) => {\n el.style.backgroundImage = String(value);\n },\n\n backgroundSize: (el, value) => {\n el.style.backgroundSize = String(value);\n },\n\n backgroundPosition: (el, value) => {\n el.style.backgroundPosition = String(value);\n },\n\n backgroundRepeat: (el, value) => {\n el.style.backgroundRepeat = String(value);\n },\n\n backgroundAttachment: (el, value) => {\n el.style.backgroundAttachment = String(value);\n },\n\n backgroundClip: (el, value) => {\n el.style.backgroundClip = String(value);\n },\n\n backgroundOrigin: (el, value) => {\n el.style.backgroundOrigin = String(value);\n },\n\n // Gradient helpers\n linearGradient: (el, value) => {\n el.style.backgroundImage = `linear-gradient(${value})`;\n },\n\n radialGradient: (el, value) => {\n el.style.backgroundImage = `radial-gradient(${value})`;\n },\n\n conicGradient: (el, value) => {\n el.style.backgroundImage = `conic-gradient(${value})`;\n },\n};\n\n\n",
48
+ "/**\n * Display and Visibility Applicators\n */\n\nimport type { ApplicatorHandler } from \"./index.js\";\n\nexport const displayHandlers: Record<string, ApplicatorHandler> = {\n display: (el, value) => {\n el.style.display = String(value);\n },\n\n visibility: (el, value) => {\n el.style.visibility = String(value);\n },\n\n overflowX: (el, value) => {\n el.style.overflowX = String(value);\n },\n\n overflowY: (el, value) => {\n el.style.overflowY = String(value);\n },\n\n pointerEvents: (el, value) => {\n el.style.pointerEvents = String(value);\n },\n\n userSelect: (el, value) => {\n el.style.userSelect = String(value);\n },\n\n resize: (el, value) => {\n el.style.resize = String(value);\n },\n\n boxSizing: (el, value) => {\n el.style.boxSizing = String(value);\n },\n\n // Sizing helpers\n aspectRatio: (el, value) => {\n el.style.aspectRatio = String(value);\n },\n\n objectFit: (el, value) => {\n el.style.objectFit = String(value);\n },\n\n objectPosition: (el, value) => {\n el.style.objectPosition = String(value);\n },\n};\n\n\n",
49
+ "/**\n * Transition and Animation Applicators\n */\n\nimport type { ApplicatorHandler } from \"./index.js\";\n\nexport const transitionHandlers: Record<string, ApplicatorHandler> = {\n transition: (el, value) => {\n el.style.transition = String(value);\n },\n\n transitionProperty: (el, value) => {\n el.style.transitionProperty = String(value);\n },\n\n transitionDuration: (el, value) => {\n el.style.transitionDuration = String(value);\n },\n\n transitionTimingFunction: (el, value) => {\n el.style.transitionTimingFunction = String(value);\n },\n\n transitionDelay: (el, value) => {\n el.style.transitionDelay = String(value);\n },\n\n animation: (el, value) => {\n el.style.animation = String(value);\n },\n\n animationName: (el, value) => {\n el.style.animationName = String(value);\n },\n\n animationDuration: (el, value) => {\n el.style.animationDuration = String(value);\n },\n\n animationTimingFunction: (el, value) => {\n el.style.animationTimingFunction = String(value);\n },\n\n animationDelay: (el, value) => {\n el.style.animationDelay = String(value);\n },\n\n animationIterationCount: (el, value) => {\n el.style.animationIterationCount = String(value);\n },\n\n animationDirection: (el, value) => {\n el.style.animationDirection = String(value);\n },\n\n animationFillMode: (el, value) => {\n el.style.animationFillMode = String(value);\n },\n\n animationPlayState: (el, value) => {\n el.style.animationPlayState = String(value);\n },\n};\n\n\n",
50
+ "/**\n * Component Registry\n *\n * Manages mappings from Hypen component types to DOM elements\n */\n\nexport interface ComponentHandler {\n create(): HTMLElement;\n applyProps?(element: HTMLElement, props: Record<string, any>): void;\n}\n\nexport class ComponentRegistry {\n private handlers: Map<string, ComponentHandler> = new Map();\n\n constructor() {\n this.registerDefaults();\n }\n\n /**\n * Register a component handler\n */\n register(type: string, handler: ComponentHandler): void {\n this.handlers.set(type.toLowerCase(), handler);\n }\n\n /**\n * Get handler for a component type\n */\n get(type: string): ComponentHandler | undefined {\n return this.handlers.get(type.toLowerCase());\n }\n\n /**\n * Create element for a component type\n */\n createElement(type: string, props: Record<string, any> = {}): HTMLElement | null {\n const handler = this.get(type);\n if (!handler) return null;\n\n const element = handler.create();\n if (handler.applyProps) {\n handler.applyProps(element, props);\n }\n return element;\n }\n\n /**\n * Register all default Hypen components\n */\n private registerDefaults(): void {\n // Import and register all component handlers\n const { columnHandler } = require(\"./column.js\");\n const { rowHandler } = require(\"./row.js\");\n const { textHandler } = require(\"./text.js\");\n const { imageHandler } = require(\"./image.js\");\n const { buttonHandler } = require(\"./button.js\");\n const { containerHandler } = require(\"./container.js\");\n const { centerHandler } = require(\"./center.js\");\n const { listHandler } = require(\"./list.js\");\n const { inputHandler } = require(\"./input.js\");\n const { linkHandler } = require(\"./link.js\");\n const { textareaHandler } = require(\"./textarea.js\");\n const { checkboxHandler } = require(\"./checkbox.js\");\n const { selectHandler } = require(\"./select.js\");\n const { spacerHandler } = require(\"./spacer.js\");\n const { stackHandler } = require(\"./stack.js\");\n const { dividerHandler } = require(\"./divider.js\");\n const { gridHandler } = require(\"./grid.js\");\n const { cardHandler } = require(\"./card.js\");\n const { headingHandler } = require(\"./heading.js\");\n const { switchHandler } = require(\"./switch.js\");\n const { sliderHandler } = require(\"./slider.js\");\n const { spinnerHandler } = require(\"./spinner.js\");\n const { badgeHandler } = require(\"./badge.js\");\n const { avatarHandler } = require(\"./avatar.js\");\n const { progressBarHandler } = require(\"./progressbar.js\");\n const { videoHandler } = require(\"./video.js\");\n const { audioHandler } = require(\"./audio.js\");\n const { paragraphHandler } = require(\"./paragraph.js\");\n const { routerHandler } = require(\"./router.js\");\n const { routeHandler } = require(\"./route.js\");\n\n this.register(\"column\", columnHandler);\n this.register(\"row\", rowHandler);\n this.register(\"text\", textHandler);\n this.register(\"image\", imageHandler);\n this.register(\"button\", buttonHandler);\n this.register(\"container\", containerHandler);\n this.register(\"box\", containerHandler);\n this.register(\"center\", centerHandler);\n this.register(\"list\", listHandler);\n this.register(\"input\", inputHandler);\n this.register(\"link\", linkHandler);\n this.register(\"textarea\", textareaHandler);\n this.register(\"checkbox\", checkboxHandler);\n this.register(\"select\", selectHandler);\n this.register(\"spacer\", spacerHandler);\n this.register(\"stack\", stackHandler);\n this.register(\"divider\", dividerHandler);\n this.register(\"grid\", gridHandler);\n this.register(\"card\", cardHandler);\n this.register(\"heading\", headingHandler);\n this.register(\"switch\", switchHandler);\n this.register(\"slider\", sliderHandler);\n this.register(\"spinner\", spinnerHandler);\n this.register(\"badge\", badgeHandler);\n this.register(\"avatar\", avatarHandler);\n this.register(\"progressbar\", progressBarHandler);\n this.register(\"video\", videoHandler);\n this.register(\"audio\", audioHandler);\n this.register(\"paragraph\", paragraphHandler);\n this.register(\"router\", routerHandler);\n this.register(\"route\", routeHandler);\n }\n}\n",
51
+ "/**\n * Applicator Registry\n *\n * Handles style applicators (modifiers) for Hypen components\n */\n\nexport type ApplicatorHandler = (element: HTMLElement, value: any) => void;\n\nexport class ApplicatorRegistry {\n private handlers: Map<string, ApplicatorHandler> = new Map();\n private elementState: WeakMap<HTMLElement, Map<string, any>> = new WeakMap();\n\n constructor() {\n this.registerDefaults();\n }\n\n /**\n * Register an applicator handler\n */\n register(name: string, handler: ApplicatorHandler): void {\n this.handlers.set(name, handler);\n }\n\n /**\n * Apply an applicator to an element\n */\n apply(element: HTMLElement, name: string, value: any): void {\n // Parse applicator metadata so we can normalize event arguments and retain legacy behavior\n const { handlerName, argKey, aggregate, fallbackName } = this.parseApplicatorName(name);\n\n const handler = this.handlers.get(handlerName);\n const state = this.getElementState(element);\n const previous = state.get(handlerName);\n\n if (aggregate && argKey !== null) {\n // Merge event payload updates with the previously applied arguments so handlers\n // always receive the full payload object (prevents stale dispatch data)\n const merged = this.mergeAggregateState(previous, argKey, this.normalizeValue(value));\n\n state.set(handlerName, merged);\n\n if (handler) {\n handler(element, merged);\n } else {\n // Fallback: set as CSS property using the original name if no handler exists\n this.setStyleProperty(element, fallbackName, value);\n }\n return;\n }\n\n if (handler) {\n if (this.isEventApplicator(handlerName)) {\n const normalizedValue = this.normalizeEventValue(previous, value);\n state.set(handlerName, normalizedValue);\n handler(element, normalizedValue);\n } else {\n state.set(handlerName, value);\n handler(element, value);\n }\n } else {\n // Fallback: set as CSS property\n this.setStyleProperty(element, handlerName, value);\n }\n }\n\n /**\n * Parse applicator name to handle indexed and event argument formats\n * e.g., \"fontSize.0\" -> { handlerName: \"fontSize\" }\n * \"onClick.id\" -> { handlerName: \"onClick\", aggregate: true, argKey: \"id\" }\n * Keeps compound names like \"padding.top\" as-is so they can fall back to CSS.\n */\n private parseApplicatorName(name: string): {\n handlerName: string;\n argKey: string | null;\n aggregate: boolean;\n fallbackName: string;\n } {\n const dotIndex = name.indexOf('.');\n if (dotIndex === -1) {\n return { handlerName: name, argKey: null, aggregate: false, fallbackName: name };\n }\n\n const baseName = name.substring(0, dotIndex);\n const argKey = name.substring(dotIndex + 1);\n\n if (this.handlers.has(baseName) && this.isEventApplicator(baseName)) {\n return { handlerName: baseName, argKey, aggregate: true, fallbackName: name };\n }\n\n if (/^\\d+$/.test(argKey)) {\n return { handlerName: baseName, argKey: null, aggregate: false, fallbackName: baseName };\n }\n\n return { handlerName: name, argKey: null, aggregate: false, fallbackName: name };\n }\n\n /**\n * Get or initialize per-element applicator state used for merging event payloads\n */\n private getElementState(element: HTMLElement): Map<string, any> {\n let state = this.elementState.get(element);\n if (!state) {\n state = new Map();\n this.elementState.set(element, state);\n }\n return state;\n }\n\n /**\n * Merge updated event argument into previously stored payload snapshot\n */\n private mergeAggregateState(previous: any, argKey: string, value: any): Record<string, any> {\n const base: Record<string, any> = this.cloneAggregateState(previous);\n\n if (value === undefined) {\n delete base[argKey];\n } else {\n base[argKey] = value;\n }\n\n return base;\n }\n\n /**\n * Convert stored state into a mutable payload object we can merge into\n */\n private cloneAggregateState(previous: any): Record<string, any> {\n if (previous && typeof previous === \"object\" && !Array.isArray(previous)) {\n return { ...previous };\n }\n\n if (typeof previous === \"string\") {\n return { \"0\": previous };\n }\n\n return {};\n }\n\n /**\n * Normalize event value updates so action payload arguments persist across SetProp orderings\n */\n private normalizeEventValue(previous: any, value: any): Record<string, any> {\n const normalizedInput = this.normalizeValue(value);\n const base = this.cloneAggregateState(previous);\n\n if (normalizedInput && typeof normalizedInput === \"object\" && !Array.isArray(normalizedInput)) {\n const next = { ...base, ...normalizedInput } as Record<string, any>;\n\n if (!Object.prototype.hasOwnProperty.call(next, \"0\") && base[\"0\"] !== undefined) {\n next[\"0\"] = base[\"0\"];\n }\n\n return next;\n }\n\n if (normalizedInput !== undefined) {\n base[\"0\"] = normalizedInput;\n }\n\n return base;\n }\n\n /**\n * Convert Maps (from WASM) and nested structures into plain JS values we can merge safely\n */\n private normalizeValue(value: any): any {\n if (value instanceof Map) {\n const obj: Record<string, any> = {};\n for (const [key, val] of value.entries()) {\n obj[key] = this.normalizeValue(val);\n }\n return obj;\n }\n\n if (Array.isArray(value)) {\n return value.map((item) => this.normalizeValue(item));\n }\n\n if (value && typeof value === \"object\") {\n const obj: Record<string, any> = {};\n for (const [key, val] of Object.entries(value)) {\n obj[key] = this.normalizeValue(val);\n }\n return obj;\n }\n\n return value;\n }\n\n /**\n * Determine if a handler name follows the event applicator naming convention\n */\n private isEventApplicator(name: string): boolean {\n return /^on[A-Z]/.test(name);\n }\n\n /**\n * Apply multiple applicators\n */\n applyAll(element: HTMLElement, applicators: Record<string, any>): void {\n //console.log(`[ApplicatorRegistry] Applying applicators:`, applicators);\n\n // Group applicators by their base name (treat applicators like components with arguments)\n // e.g., \"onClick.0\", \"onClick.id\", \"onClick.title\" -> onClick: {0: ..., id: ..., title: ...}\n const grouped = new Map<string, Record<string, any>>();\n\n for (const [name, value] of Object.entries(applicators)) {\n // Extract base name and argument key\n const dotIndex = name.indexOf('.');\n const baseName = dotIndex !== -1 ? name.substring(0, dotIndex) : name;\n const argKey = dotIndex !== -1 ? name.substring(dotIndex + 1) : null;\n\n if (!grouped.has(baseName)) {\n grouped.set(baseName, {});\n }\n\n const args = grouped.get(baseName)!;\n if (argKey !== null) {\n // This is an argument (e.g., \"onClick.0\" or \"onClick.id\")\n args[argKey] = value;\n } else {\n // This is a single-value applicator (e.g., \"padding\")\n args['__value'] = value;\n }\n }\n\n // Apply each applicator with its arguments\n for (const [baseName, args] of grouped.entries()) {\n // If it's a single value (either __value or just \"0\"), pass just the value\n if (Object.keys(args).length === 1) {\n if ('__value' in args) {\n this.apply(element, baseName, args['__value']);\n } else if ('0' in args) {\n // Single positional argument (e.g., padding.0 -> just pass the value)\n this.apply(element, baseName, args['0']);\n } else {\n // Single named argument? Pass the whole object\n this.apply(element, baseName, args);\n }\n } else {\n // Multiple arguments - pass the entire args object\n this.apply(element, baseName, args);\n }\n }\n }\n\n /**\n * Set a CSS property with automatic unit handling\n */\n private setStyleProperty(element: HTMLElement, name: string, value: any): void {\n // Convert camelCase to kebab-case\n const cssName = name.replace(/([A-Z])/g, \"-$1\").toLowerCase();\n\n // Add units for numeric values on size properties\n if (typeof value === \"number\" && this.needsUnit(cssName)) {\n element.style.setProperty(cssName, `${value}px`);\n } else {\n element.style.setProperty(cssName, String(value));\n }\n }\n\n /**\n * Check if a property needs a unit\n */\n private needsUnit(prop: string): boolean {\n const unitless = [\n \"opacity\",\n \"z-index\",\n \"font-weight\",\n \"line-height\",\n \"flex\",\n \"flex-grow\",\n \"flex-shrink\",\n \"order\",\n ];\n return !unitless.includes(prop);\n }\n\n /**\n * Register default applicator handlers\n */\n private registerDefaults(): void {\n const { paddingHandler } = require(\"./padding.js\");\n const { marginHandler } = require(\"./margin.js\");\n const { colorHandlers } = require(\"./color.js\");\n const { borderHandlers } = require(\"./border.js\");\n const { sizeHandlers } = require(\"./size.js\");\n const { fontHandlers } = require(\"./font.js\");\n const { layoutHandlers } = require(\"./layout.js\");\n const { eventHandlers } = require(\"./events.js\");\n const { typographyHandlers } = require(\"./typography.js\");\n const { transformHandlers } = require(\"./transform.js\");\n const { effectsHandlers } = require(\"./effects.js\");\n const { advancedLayoutHandlers } = require(\"./advanced-layout.js\");\n const { backgroundHandlers } = require(\"./background.js\");\n const { displayHandlers } = require(\"./display.js\");\n const { transitionHandlers } = require(\"./transition.js\");\n\n this.register(\"padding\", paddingHandler);\n this.register(\"margin\", marginHandler);\n\n for (const [name, handler] of Object.entries(colorHandlers)) {\n this.register(name, handler as ApplicatorHandler);\n }\n\n for (const [name, handler] of Object.entries(borderHandlers)) {\n this.register(name, handler as ApplicatorHandler);\n }\n\n for (const [name, handler] of Object.entries(sizeHandlers)) {\n this.register(name, handler as ApplicatorHandler);\n }\n\n for (const [name, handler] of Object.entries(fontHandlers)) {\n this.register(name, handler as ApplicatorHandler);\n }\n\n for (const [name, handler] of Object.entries(layoutHandlers)) {\n this.register(name, handler as ApplicatorHandler);\n }\n\n for (const [name, handler] of Object.entries(eventHandlers)) {\n this.register(name, handler as ApplicatorHandler);\n }\n\n for (const [name, handler] of Object.entries(typographyHandlers)) {\n this.register(name, handler as ApplicatorHandler);\n }\n\n for (const [name, handler] of Object.entries(transformHandlers)) {\n this.register(name, handler as ApplicatorHandler);\n }\n\n for (const [name, handler] of Object.entries(effectsHandlers)) {\n this.register(name, handler as ApplicatorHandler);\n }\n\n for (const [name, handler] of Object.entries(advancedLayoutHandlers)) {\n this.register(name, handler as ApplicatorHandler);\n }\n\n for (const [name, handler] of Object.entries(backgroundHandlers)) {\n this.register(name, handler as ApplicatorHandler);\n }\n\n for (const [name, handler] of Object.entries(displayHandlers)) {\n this.register(name, handler as ApplicatorHandler);\n }\n\n for (const [name, handler] of Object.entries(transitionHandlers)) {\n this.register(name, handler as ApplicatorHandler);\n }\n }\n}\n",
52
+ "/**\n * Canvas Component with Applicators\n *\n * Special handling for canvas rendering\n */\n\nimport type { ComponentHandler } from \"../components/index.js\";\nimport type { ApplicatorHandler } from \"../applicators/index.js\";\n\nexport const canvasHandler: ComponentHandler = {\n create(): HTMLElement {\n const el = document.createElement(\"canvas\");\n el.dataset.hypenType = \"canvas\";\n return el as any as HTMLElement;\n },\n\n applyProps(el: HTMLElement, props: Record<string, any>): void {\n const canvas = el as HTMLCanvasElement;\n\n if (props.width !== undefined) {\n canvas.width = Number(props.width);\n }\n\n if (props.height !== undefined) {\n canvas.height = Number(props.height);\n }\n },\n};\n\n/**\n * Canvas applicators - special drawing commands\n */\nexport const canvasApplicators: Record<string, ApplicatorHandler> = {\n // Fill style\n fillStyle: (el, value) => {\n const canvas = el as HTMLCanvasElement;\n const ctx = canvas.getContext(\"2d\");\n if (ctx) {\n ctx.fillStyle = String(value);\n }\n },\n\n // Stroke style\n strokeStyle: (el, value) => {\n const canvas = el as HTMLCanvasElement;\n const ctx = canvas.getContext(\"2d\");\n if (ctx) {\n ctx.strokeStyle = String(value);\n }\n },\n\n // Line width\n lineWidth: (el, value) => {\n const canvas = el as HTMLCanvasElement;\n const ctx = canvas.getContext(\"2d\");\n if (ctx) {\n ctx.lineWidth = Number(value);\n }\n },\n};\n",
53
+ "/**\n * Debug utilities for DOM rendering visualization\n *\n * Provides heatmap overlays to visualize re-renders\n */\n\nexport interface DebugConfig {\n /** Enable debug mode */\n enabled: boolean;\n /** Show heatmap overlays on re-renders */\n showHeatmap: boolean;\n /** Increment per re-render (default: 5%) */\n heatmapIncrement: number;\n /** Maximum opacity for heatmap (default: 0.8) */\n maxOpacity: number;\n /** Fade out duration in ms (0 to disable) */\n fadeOutDuration: number;\n}\n\nexport const defaultDebugConfig: DebugConfig = {\n enabled: false,\n showHeatmap: true,\n heatmapIncrement: 5,\n maxOpacity: 0.8,\n fadeOutDuration: 2000,\n};\n\n/**\n * Tracks re-render counts for each element\n */\nexport class RerenderTracker {\n private renderCounts = new Map<string, number>();\n private overlays = new Map<string, HTMLDivElement>();\n private config: DebugConfig;\n\n constructor(config: DebugConfig = defaultDebugConfig) {\n this.config = config;\n }\n\n /**\n * Update the configuration\n */\n setConfig(config: Partial<DebugConfig>): void {\n this.config = { ...this.config, ...config };\n\n // If debug mode is disabled, clean up all overlays\n if (!this.config.enabled) {\n this.cleanup();\n }\n }\n\n /**\n * Track a re-render for an element\n */\n trackRerender(id: string, element: HTMLElement, patchType: string): void {\n if (!this.config.enabled || !this.config.showHeatmap) {\n return;\n }\n\n console.log(`🔥 [Debug] Tracking re-render: ${id} - ${patchType}`);\n\n // Increment render count\n const currentCount = this.renderCounts.get(id) || 0;\n const newCount = currentCount + 1;\n this.renderCounts.set(id, newCount);\n\n // Create or update heatmap overlay\n this.updateHeatmap(id, element, newCount, patchType);\n }\n\n /**\n * Create or update the heatmap overlay for an element\n */\n private updateHeatmap(id: string, element: HTMLElement, renderCount: number, patchType: string): void {\n // Calculate opacity based on render count (increment by heatmapIncrement% each time)\n const opacity = Math.min(\n (renderCount * this.config.heatmapIncrement) / 100,\n this.config.maxOpacity\n );\n\n console.log(`🔥 [Debug] Updating heatmap for ${id}, count: ${renderCount}, opacity: ${opacity}`);\n\n // For inline elements or text, use a simpler approach: background color + outline\n const isInline = window.getComputedStyle(element).display.includes('inline');\n\n if (isInline || element.tagName === 'SPAN') {\n // Store original styles if not already stored\n if (!element.dataset.hypenDebugOriginalBg) {\n element.dataset.hypenDebugOriginalBg = element.style.backgroundColor || '';\n element.dataset.hypenDebugOriginalOutline = element.style.outline || '';\n element.dataset.hypenDebugOriginalPosition = element.style.position || '';\n }\n\n // Apply red background and outline directly to the element\n element.style.backgroundColor = `rgba(255, 0, 0, ${Math.max(opacity, 0.15)})`;\n element.style.outline = `2px solid rgba(255, 0, 0, ${Math.max(opacity + 0.2, 0.3)})`;\n element.style.outlineOffset = '2px';\n element.style.position = 'relative';\n\n // Add count badge as ::before pseudo-element or data attribute\n element.setAttribute('data-hypen-renders', `${renderCount}× ${patchType}`);\n\n // Add CSS for the badge if not already added\n if (!document.getElementById('hypen-debug-styles')) {\n const style = document.createElement('style');\n style.id = 'hypen-debug-styles';\n style.textContent = `\n [data-hypen-renders]::before {\n content: attr(data-hypen-renders);\n position: absolute;\n top: -18px;\n left: 0;\n background: rgba(255, 0, 0, 0.9);\n color: white;\n padding: 2px 6px;\n font-size: 10px;\n font-family: 'Courier New', monospace;\n font-weight: bold;\n border-radius: 3px;\n z-index: 999999;\n pointer-events: none;\n white-space: nowrap;\n text-shadow: none;\n }\n `;\n document.head.appendChild(style);\n }\n\n // Store in overlays map for cleanup\n this.overlays.set(id, element as any);\n\n // Fade out after duration if enabled\n if (this.config.fadeOutDuration > 0) {\n setTimeout(() => {\n const originalBg = element.dataset.hypenDebugOriginalBg || '';\n const originalOutline = element.dataset.hypenDebugOriginalOutline || '';\n element.style.backgroundColor = originalBg;\n element.style.outline = originalOutline;\n element.style.opacity = '1';\n }, this.config.fadeOutDuration);\n }\n } else {\n // For block elements, use overlay approach\n let overlay = this.overlays.get(id);\n\n if (!overlay) {\n overlay = document.createElement(\"div\");\n overlay.className = \"hypen-debug-overlay\";\n overlay.style.cssText = `\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n pointer-events: none;\n z-index: 999999 !important;\n transition: opacity ${this.config.fadeOutDuration}ms ease-out;\n border: 2px solid rgba(255, 0, 0, 0.7) !important;\n box-sizing: border-box;\n font-size: 11px;\n color: white;\n text-shadow: 0 0 3px black, 0 0 5px black;\n padding: 4px;\n font-family: 'Courier New', monospace;\n font-weight: bold;\n display: block !important;\n visibility: visible !important;\n `;\n\n const currentPosition = window.getComputedStyle(element).position;\n if (currentPosition === 'static') {\n element.style.position = 'relative';\n }\n\n element.appendChild(overlay);\n this.overlays.set(id, overlay);\n }\n\n overlay.style.backgroundColor = `rgba(255, 0, 0, ${Math.max(opacity, 0.15)})`;\n overlay.style.opacity = '1';\n overlay.textContent = `${renderCount}× ${patchType}`;\n\n if (this.config.fadeOutDuration > 0) {\n setTimeout(() => {\n if (overlay) {\n overlay.style.opacity = '0.2';\n }\n }, this.config.fadeOutDuration);\n }\n }\n }\n\n /**\n * Reset tracking for a specific element\n */\n reset(id: string): void {\n this.renderCounts.delete(id);\n const overlay = this.overlays.get(id);\n if (overlay) {\n overlay.remove();\n this.overlays.delete(id);\n }\n }\n\n /**\n * Reset tracking for all elements\n */\n resetAll(): void {\n this.renderCounts.clear();\n for (const overlay of this.overlays.values()) {\n overlay.remove();\n }\n this.overlays.clear();\n }\n\n /**\n * Get render count for an element\n */\n getRenderCount(id: string): number {\n return this.renderCounts.get(id) || 0;\n }\n\n /**\n * Clean up all overlays (called when debug mode is disabled)\n */\n private cleanup(): void {\n for (const overlay of this.overlays.values()) {\n overlay.remove();\n }\n this.overlays.clear();\n }\n\n /**\n * Get statistics about re-renders\n */\n getStats(): { totalRerenders: number; elementCount: number; avgRerenders: number } {\n const totalRerenders = Array.from(this.renderCounts.values()).reduce((sum, count) => sum + count, 0);\n const elementCount = this.renderCounts.size;\n const avgRerenders = elementCount > 0 ? totalRerenders / elementCount : 0;\n\n return {\n totalRerenders,\n elementCount,\n avgRerenders: Math.round(avgRerenders * 100) / 100,\n };\n }\n}\n",
54
+ "/**\n * DOM Renderer\n *\n * Renders Hypen patches to the DOM\n */\n\nimport type { Patch } from \"@hypen/core\";\nimport type { HypenModuleInstance, RouterContext } from \"@hypen/core\";\nimport type { HypenRouter } from \"@hypen/core\";\nimport type { HypenGlobalContext } from \"@hypen/core\";\nimport { ComponentRegistry } from \"./components/index.js\";\nimport { ApplicatorRegistry } from \"./applicators/index.js\";\nimport { canvasHandler, canvasApplicators } from \"./canvas/index.js\";\nimport { RerenderTracker, type DebugConfig, defaultDebugConfig } from \"./debug.js\";\n\n// Interface for the engine that renderer needs\ninterface IEngine {\n dispatchAction(name: string, payload?: any): void;\n}\n\nexport class DOMRenderer {\n private container: HTMLElement;\n private nodes: Map<string, HTMLElement> = new Map();\n private rootId: string | null = null;\n private components: ComponentRegistry;\n private applicators: ApplicatorRegistry;\n private engine: IEngine;\n private currentState: Record<string, any> = {};\n private routerContext: RouterContext | null = null;\n private globalContext: HypenGlobalContext | null = null;\n private componentInstances = new Map<string, HypenModuleInstance>();\n private debugTracker: RerenderTracker;\n\n constructor(container: HTMLElement, engine: IEngine, debugConfig?: Partial<DebugConfig>) {\n this.container = container;\n this.engine = engine;\n this.components = new ComponentRegistry();\n this.applicators = new ApplicatorRegistry();\n this.debugTracker = new RerenderTracker({ ...defaultDebugConfig, ...debugConfig });\n\n // Register canvas component and applicators\n this.components.register(\"canvas\", canvasHandler);\n for (const [name, handler] of Object.entries(canvasApplicators)) {\n this.applicators.register(name, handler);\n }\n }\n\n /**\n * Set router and global context for component composition\n */\n setContext(routerContext: RouterContext, globalContext: HypenGlobalContext): void {\n this.routerContext = routerContext;\n this.globalContext = globalContext;\n }\n\n /**\n * Apply a batch of patches to the DOM\n */\n applyPatches(patches: Patch[]): void {\n for (const patch of patches) {\n this.applyPatch(patch);\n }\n }\n\n /**\n * Update state and interpolate text content\n */\n updateState(state: Record<string, any>): void {\n console.log(`[Renderer] Updating state:`, state);\n this.currentState = state;\n this.interpolateAllText();\n }\n\n /**\n * Merge component state into current state and re-interpolate\n */\n private mergeComponentState(componentState: Record<string, any>): void {\n this.currentState = { ...this.currentState, ...componentState };\n console.log(`[Renderer] Merged state:`, this.currentState);\n this.interpolateAllText();\n }\n\n /**\n * Interpolate state values in all text elements\n */\n private interpolateAllText(): void {\n for (const [id, element] of this.nodes.entries()) {\n if (element.dataset.hypenType === \"text\" && element.dataset.textTemplate) {\n const template = element.dataset.textTemplate;\n const interpolated = this.interpolateText(template, this.currentState);\n\n // Track re-render if text actually changed\n const currentText = element.textContent;\n if (currentText !== interpolated) {\n this.debugTracker.trackRerender(id, element, \"interpolate\");\n }\n\n element.textContent = interpolated;\n }\n }\n }\n\n /**\n * Interpolate state values in text template\n */\n private interpolateText(template: string, state: Record<string, any>): string {\n return template.replace(/\\$\\{([^}]+)\\}/g, (match, path) => {\n try {\n const value = path.split('.').reduce((obj: any, key: string) => {\n if (key === 'state') return state;\n return obj?.[key];\n }, state);\n return value !== undefined ? String(value) : match;\n } catch {\n return match;\n }\n });\n }\n\n /**\n * Apply a single patch\n */\n private applyPatch(patch: Patch): void {\n switch (patch.type) {\n case \"create\":\n this.onCreate(patch.id!, (patch as any).element_type!, patch.props || {});\n break;\n case \"setProp\":\n this.onSetProp(patch.id!, patch.name!, patch.value);\n break;\n case \"setText\":\n this.onSetText(patch.id!, patch.text!);\n break;\n case \"insert\":\n this.onInsert((patch as any).parent_id!, patch.id!, (patch as any).before_id);\n break;\n case \"move\":\n this.onMove((patch as any).parent_id!, patch.id!, (patch as any).before_id);\n break;\n case \"remove\":\n this.onRemove(patch.id!);\n break;\n }\n }\n\n /**\n * Create a new element\n */\n private onCreate(id: string, elementType: string, props: Record<string, any> | Map<string, any>): void {\n const propsObj = props instanceof Map ? Object.fromEntries(props) : props;\n\n const element = this.components.createElement(elementType, propsObj);\n\n if (!element) {\n const fallback = document.createElement(\"div\");\n fallback.dataset.hypenType = elementType;\n fallback.textContent = `Unknown component: ${elementType}`;\n this.nodes.set(id, fallback);\n return;\n }\n\n element.dataset.hypenType = elementType.toLowerCase();\n element.dataset.hypenId = id;\n (element as any).__hypenEngine = this.engine;\n\n this.applicators.applyAll(element, propsObj);\n this.nodes.set(id, element);\n this.debugTracker.trackRerender(id, element, `create:${elementType}`);\n\n if (!this.rootId) {\n this.rootId = id;\n if (!this.container.contains(element)) {\n this.container.appendChild(element);\n }\n }\n }\n\n /**\n * Set a property on an element\n */\n private onSetProp(id: string, name: string, value: any): void {\n const element = this.nodes.get(id);\n if (!element) return;\n\n this.debugTracker.trackRerender(id, element, `setProp:${name}`);\n\n if (name === \"0\" || name === \"text\") {\n const elementType = element.dataset.hypenType;\n\n if (elementType === \"input\") {\n const inputEl = element as HTMLInputElement;\n inputEl.value = String(value);\n console.log(`[Renderer] Updated input value: \"${value}\"`);\n return;\n }\n\n const nextText = String(value);\n element.textContent = nextText;\n\n // Preserve the original template when it contains state interpolation.\n // Engine patches may send interpolated strings; if we overwrite the template,\n // future state updates won't be able to re-interpolate.\n const currentTemplate = element.dataset.textTemplate;\n const nextLooksLikeTemplate = nextText.includes(\"${\");\n const currentLooksLikeTemplate = typeof currentTemplate === \"string\" && currentTemplate.includes(\"${\");\n\n if (nextLooksLikeTemplate) {\n element.dataset.textTemplate = nextText;\n } else if (currentTemplate === undefined) {\n // No template stored yet; treat this as the template.\n element.dataset.textTemplate = nextText;\n } else if (!currentLooksLikeTemplate) {\n // If current template isn't a template, keep it in sync.\n element.dataset.textTemplate = nextText;\n }\n console.log(`[Renderer] Updated text content: \"${value}\"`);\n return;\n }\n\n this.applicators.apply(element, name, value);\n }\n\n /**\n * Set text content\n */\n private onSetText(id: string, text: string): void {\n const element = this.nodes.get(id);\n if (!element) return;\n\n this.debugTracker.trackRerender(id, element, \"setText\");\n element.textContent = text;\n }\n\n /**\n * Insert an element into the tree\n */\n private onInsert(parentId: string, id: string, beforeId?: string): void {\n const parent = parentId === \"root\" ? this.container : this.nodes.get(parentId);\n const child = this.nodes.get(id);\n\n console.log(`[Renderer] Inserting ${id} into ${parentId}`, {\n parent: parent ? `${parent.tagName}#${parent.id || 'no-id'}` : 'null',\n child: child ? `${child.tagName}#${child.id || 'no-id'}` : 'null',\n childText: child?.textContent?.substring(0, 20)\n });\n\n if (!parent || !child) return;\n\n if (parentId === \"root\") {\n this.rootId = id;\n }\n\n if (beforeId) {\n const before = this.nodes.get(beforeId);\n if (before && before.parentNode === parent) {\n parent.insertBefore(child, before);\n } else if (!parent.contains(child)) {\n parent.appendChild(child);\n }\n } else {\n if (!parent.contains(child)) {\n parent.appendChild(child);\n }\n }\n }\n\n /**\n * Move an element within the tree\n */\n private onMove(parentId: string, id: string, beforeId?: string): void {\n this.onInsert(parentId, id, beforeId);\n }\n\n /**\n * Remove an element from the tree\n */\n private onRemove(id: string): void {\n const element = this.nodes.get(id);\n if (!element) return;\n\n if (element.parentNode) {\n element.parentNode.removeChild(element);\n }\n\n this.nodes.delete(id);\n\n if (this.rootId === id) {\n this.rootId = null;\n }\n }\n\n /**\n * Get an element by ID\n */\n getNode(id: string): HTMLElement | undefined {\n return this.nodes.get(id);\n }\n\n /**\n * Clear all nodes\n */\n clear(): void {\n this.container.innerHTML = \"\";\n this.nodes.clear();\n this.rootId = null;\n }\n\n /**\n * Get the component registry (for registering custom components)\n */\n getComponentRegistry(): ComponentRegistry {\n return this.components;\n }\n\n /**\n * Get the applicator registry (for registering custom applicators)\n */\n getApplicatorRegistry(): ApplicatorRegistry {\n return this.applicators;\n }\n\n /**\n * Enable or configure debug mode\n */\n setDebugConfig(config: Partial<DebugConfig>): void {\n this.debugTracker.setConfig(config);\n }\n\n /**\n * Reset debug tracking for all elements\n */\n resetDebugTracking(): void {\n this.debugTracker.resetAll();\n }\n\n /**\n * Get debug statistics\n */\n getDebugStats(): { totalRerenders: number; elementCount: number; avgRerenders: number } {\n return this.debugTracker.getStats();\n }\n}\n",
55
+ "/**\n * Event Management System\n *\n * Handles DOM event binding and action dispatching\n */\n\n// Interface for the engine that EventManager needs\ninterface IEngine {\n dispatchAction(name: string, payload?: any): void;\n}\n\nexport interface EventBinding {\n elementId: string;\n eventName: string;\n actionName: string;\n}\n\nexport class EventManager {\n private engine: IEngine;\n private bindings: Map<string, Map<string, EventListener>> = new Map();\n\n constructor(engine: IEngine) {\n this.engine = engine;\n }\n\n /**\n * Attach an event listener to an element\n */\n attach(elementId: string, element: HTMLElement, eventName: string, actionName: string): void {\n // Convert onClick to click for DOM events\n const domEventName = eventName === \"onClick\" ? \"click\" : eventName;\n console.log(`[EventManager] Attaching ${eventName} (DOM: ${domEventName}) to element ${elementId}, action: ${actionName}`);\n\n // Create event listener that dispatches action\n const listener = (event: Event) => {\n console.log(`🔥 [EventManager] Event fired: ${eventName} on ${elementId}, dispatching action: ${actionName}`);\n console.log(`🔥 [EventManager] Event object:`, event);\n console.log(`🔥 [EventManager] Element:`, element);\n\n // Prevent default for certain events\n if (eventName === \"submit\" || (eventName === \"click\" && element.tagName === \"A\")) {\n event.preventDefault();\n }\n\n // Extract event data\n const payload = this.extractEventData(event, element);\n console.log(`🔥 [EventManager] Event payload:`, payload);\n\n // Dispatch action to engine\n console.log(`🔥 [EventManager] Calling engine.dispatchAction(${actionName})`);\n try {\n this.engine.dispatchAction(actionName, payload);\n console.log(`🔥 [EventManager] ✅ dispatchAction succeeded`);\n } catch (error) {\n console.error(`🔥 [EventManager] ❌ dispatchAction failed:`, error);\n }\n };\n\n // Store listener reference\n let elementBindings = this.bindings.get(elementId);\n if (!elementBindings) {\n elementBindings = new Map();\n this.bindings.set(elementId, elementBindings);\n }\n elementBindings.set(eventName, listener);\n\n // Attach to DOM\n element.addEventListener(domEventName, listener);\n console.log(`[EventManager] Listener attached to DOM for ${domEventName}`);\n console.log(`[EventManager] Element details:`, {\n tagName: element.tagName,\n id: element.id,\n dataset: element.dataset,\n textContent: element.textContent?.substring(0, 50)\n });\n \n // Test: Add a simple click listener to verify DOM events work\n if (domEventName === \"click\") {\n element.addEventListener(\"click\", (e) => {\n console.log(`🧪 [TEST] Raw DOM click detected on ${element.tagName}`, e);\n });\n }\n }\n\n /**\n * Detach an event listener from an element\n */\n detach(elementId: string, element: HTMLElement, eventName: string): void {\n const elementBindings = this.bindings.get(elementId);\n if (!elementBindings) return;\n\n const listener = elementBindings.get(eventName);\n if (listener) {\n element.removeEventListener(eventName, listener);\n elementBindings.delete(eventName);\n }\n\n if (elementBindings.size === 0) {\n this.bindings.delete(elementId);\n }\n }\n\n /**\n * Extract relevant data from an event\n */\n private extractEventData(event: Event, element: HTMLElement): any {\n const data: any = {\n type: event.type,\n timestamp: Date.now(),\n };\n\n // Mouse events\n if (event instanceof MouseEvent) {\n data.clientX = event.clientX;\n data.clientY = event.clientY;\n data.button = event.button;\n }\n\n // Keyboard events\n if (event instanceof KeyboardEvent) {\n data.key = event.key;\n data.code = event.code;\n data.ctrlKey = event.ctrlKey;\n data.shiftKey = event.shiftKey;\n data.altKey = event.altKey;\n data.metaKey = event.metaKey;\n }\n\n // Input events (for form elements)\n if (element instanceof HTMLInputElement || element instanceof HTMLTextAreaElement) {\n data.value = element.value;\n }\n\n // Select events\n if (element instanceof HTMLSelectElement) {\n data.value = element.value;\n data.selectedIndex = element.selectedIndex;\n }\n\n // Form events\n if (event.type === \"submit\" && element instanceof HTMLFormElement) {\n data.formData = new FormData(element);\n }\n\n return data;\n }\n\n /**\n * Clear all event bindings for an element\n */\n clearElement(elementId: string, element: HTMLElement): void {\n const elementBindings = this.bindings.get(elementId);\n if (!elementBindings) return;\n\n for (const [eventName, listener] of elementBindings) {\n element.removeEventListener(eventName, listener);\n }\n\n this.bindings.delete(elementId);\n }\n\n /**\n * Clear all event bindings\n */\n clearAll(): void {\n this.bindings.clear();\n }\n}\n"
5
56
  ],
6
- "mappings": "",
7
- "debugId": "F2160B44162FF9D064756E2164756E21",
57
+ "mappings": "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",
58
+ "debugId": "A24FF426EED3C58664756E2164756E21",
8
59
  "names": []
9
60
  }