@tachui/modifiers 0.8.0-alpha → 0.8.5-alpha

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (197) hide show
  1. package/README.md +19 -9
  2. package/dist/animation/index.d.ts +11 -0
  3. package/dist/animation/index.d.ts.map +1 -0
  4. package/dist/appearance/background.d.ts +23 -6
  5. package/dist/appearance/background.d.ts.map +1 -1
  6. package/dist/appearance/border.d.ts +2 -2
  7. package/dist/appearance/border.d.ts.map +1 -1
  8. package/dist/appearance/clip-shape.d.ts +2 -2
  9. package/dist/appearance/clip-shape.d.ts.map +1 -1
  10. package/dist/appearance/clipped.d.ts +2 -2
  11. package/dist/appearance/clipped.d.ts.map +1 -1
  12. package/dist/appearance/foreground.d.ts +14 -5
  13. package/dist/appearance/foreground.d.ts.map +1 -1
  14. package/dist/appearance/index.js +11 -12
  15. package/dist/appearance/reactive-factories.d.ts +20 -0
  16. package/dist/appearance/reactive-factories.d.ts.map +1 -0
  17. package/dist/attributes/accessibility.d.ts +10 -0
  18. package/dist/attributes/accessibility.d.ts.map +1 -0
  19. package/dist/attributes/aria.d.ts +2 -2
  20. package/dist/attributes/aria.d.ts.map +1 -1
  21. package/dist/attributes/css-properties.d.ts +2 -2
  22. package/dist/attributes/css-properties.d.ts.map +1 -1
  23. package/dist/attributes/html.d.ts +2 -2
  24. package/dist/attributes/html.d.ts.map +1 -1
  25. package/dist/attributes/index.d.ts +1 -0
  26. package/dist/attributes/index.d.ts.map +1 -1
  27. package/dist/base.d.ts +6 -7
  28. package/dist/base.d.ts.map +1 -1
  29. package/dist/base.js +9 -840
  30. package/dist/basic/animation.d.ts +41 -0
  31. package/dist/basic/animation.d.ts.map +1 -0
  32. package/dist/basic/base.d.ts +7 -8
  33. package/dist/basic/base.d.ts.map +1 -1
  34. package/dist/basic/index.d.ts +19 -2
  35. package/dist/basic/index.d.ts.map +1 -1
  36. package/dist/basic/index.js +252 -0
  37. package/dist/basic/margin.d.ts +2 -2
  38. package/dist/basic/margin.d.ts.map +1 -1
  39. package/dist/basic/margin.js +13 -158
  40. package/dist/basic/padding.d.ts +2 -2
  41. package/dist/basic/padding.d.ts.map +1 -1
  42. package/dist/basic/padding.js +13 -153
  43. package/dist/basic/size.d.ts +2 -2
  44. package/dist/basic/size.d.ts.map +1 -1
  45. package/dist/basic/size.js +10 -76
  46. package/dist/effects/backdrop/index.d.ts +60 -0
  47. package/dist/effects/backdrop/index.d.ts.map +1 -0
  48. package/dist/effects/backdrop/index.js +118 -0
  49. package/dist/effects/effects/index.d.ts +190 -0
  50. package/dist/effects/effects/index.d.ts.map +1 -0
  51. package/dist/effects/filters/index.d.ts +297 -0
  52. package/dist/effects/filters/index.d.ts.map +1 -0
  53. package/dist/effects/filters/index.js +234 -0
  54. package/dist/effects/index.d.ts +14 -0
  55. package/dist/effects/index.d.ts.map +1 -0
  56. package/dist/effects/index.js +373 -0
  57. package/dist/effects/internal-exports.d.ts +9 -0
  58. package/dist/effects/internal-exports.d.ts.map +1 -0
  59. package/dist/effects/shadows/index.d.ts +316 -0
  60. package/dist/effects/shadows/index.d.ts.map +1 -0
  61. package/dist/effects/shadows/index.js +405 -0
  62. package/dist/effects/transforms/index.d.ts +316 -0
  63. package/dist/effects/transforms/index.d.ts.map +1 -0
  64. package/dist/effects/transforms/index.js +193 -0
  65. package/dist/elements/pseudo-elements.d.ts +2 -2
  66. package/dist/elements/pseudo-elements.d.ts.map +1 -1
  67. package/dist/essential-manifest.d.ts +5 -0
  68. package/dist/essential-manifest.d.ts.map +1 -0
  69. package/dist/index.d.ts +10 -3
  70. package/dist/index.d.ts.map +1 -1
  71. package/dist/index.js +273 -881
  72. package/dist/interaction/allows-hit-testing.d.ts +1 -1
  73. package/dist/interaction/allows-hit-testing.d.ts.map +1 -1
  74. package/dist/interaction/dom-events.d.ts +35 -0
  75. package/dist/interaction/dom-events.d.ts.map +1 -0
  76. package/dist/interaction/focus-events.d.ts +54 -0
  77. package/dist/interaction/focus-events.d.ts.map +1 -0
  78. package/dist/interaction/focusable.d.ts +1 -1
  79. package/dist/interaction/focusable.d.ts.map +1 -1
  80. package/dist/interaction/focused.d.ts +1 -1
  81. package/dist/interaction/focused.d.ts.map +1 -1
  82. package/dist/interaction/index.d.ts +5 -0
  83. package/dist/interaction/index.d.ts.map +1 -1
  84. package/dist/interaction/index.js +75 -28
  85. package/dist/interaction/keyboard-events.d.ts +69 -0
  86. package/dist/interaction/keyboard-events.d.ts.map +1 -0
  87. package/dist/interaction/keyboard-shortcut.d.ts +1 -1
  88. package/dist/interaction/keyboard-shortcut.d.ts.map +1 -1
  89. package/dist/interaction/mouse-events.d.ts +125 -0
  90. package/dist/interaction/mouse-events.d.ts.map +1 -0
  91. package/dist/interaction/on-continuous-hover.d.ts +1 -1
  92. package/dist/interaction/on-continuous-hover.d.ts.map +1 -1
  93. package/dist/interaction/on-hover.d.ts +30 -0
  94. package/dist/interaction/on-hover.d.ts.map +1 -0
  95. package/dist/interaction/on-long-press-gesture.d.ts +1 -1
  96. package/dist/interaction/on-long-press-gesture.d.ts.map +1 -1
  97. package/dist/interaction/scroll.d.ts +2 -2
  98. package/dist/interaction/scroll.d.ts.map +1 -1
  99. package/dist/layout/aspect-ratio.d.ts +2 -2
  100. package/dist/layout/aspect-ratio.d.ts.map +1 -1
  101. package/dist/layout/fixed-size.d.ts +2 -2
  102. package/dist/layout/fixed-size.d.ts.map +1 -1
  103. package/dist/layout/flexbox.d.ts +2 -2
  104. package/dist/layout/flexbox.d.ts.map +1 -1
  105. package/dist/layout/frame.d.ts +13 -0
  106. package/dist/layout/frame.d.ts.map +1 -0
  107. package/dist/layout/index.d.ts +2 -0
  108. package/dist/layout/index.d.ts.map +1 -1
  109. package/dist/layout/index.js +25 -22
  110. package/dist/layout/offset.d.ts +2 -2
  111. package/dist/layout/offset.d.ts.map +1 -1
  112. package/dist/layout/overlay.d.ts +1 -1
  113. package/dist/layout/overlay.d.ts.map +1 -1
  114. package/dist/layout/position.d.ts +2 -2
  115. package/dist/layout/position.d.ts.map +1 -1
  116. package/dist/layout/resizable.d.ts +6 -0
  117. package/dist/layout/resizable.d.ts.map +1 -0
  118. package/dist/layout/scale-effect.d.ts +6 -5
  119. package/dist/layout/scale-effect.d.ts.map +1 -1
  120. package/dist/layout/z-index.d.ts +2 -2
  121. package/dist/layout/z-index.d.ts.map +1 -1
  122. package/dist/lifecycle/index.d.ts +6 -0
  123. package/dist/lifecycle/index.d.ts.map +1 -0
  124. package/dist/modifiers-basic-DLmE749_.js +5604 -0
  125. package/dist/navigation/index.d.ts +12 -0
  126. package/dist/navigation/index.d.ts.map +1 -0
  127. package/dist/preload/backdrop.d.ts +5 -0
  128. package/dist/preload/backdrop.d.ts.map +1 -0
  129. package/dist/preload/backdrop.js +7 -0
  130. package/dist/preload/basic.d.ts +7 -0
  131. package/dist/preload/basic.d.ts.map +1 -0
  132. package/dist/preload/basic.js +251 -0
  133. package/dist/preload/effects.d.ts +6 -0
  134. package/dist/preload/effects.d.ts.map +1 -0
  135. package/dist/preload/effects.js +95 -0
  136. package/dist/preload/filters.d.ts +6 -0
  137. package/dist/preload/filters.d.ts.map +1 -0
  138. package/dist/preload/filters.js +31 -0
  139. package/dist/preload/shadows.d.ts +5 -0
  140. package/dist/preload/shadows.d.ts.map +1 -0
  141. package/dist/preload/shadows.js +27 -0
  142. package/dist/preload/transforms.d.ts +5 -0
  143. package/dist/preload/transforms.d.ts.map +1 -0
  144. package/dist/preload/transforms.js +30 -0
  145. package/dist/types.d.ts +7 -6
  146. package/dist/types.d.ts.map +1 -1
  147. package/dist/types.js +0 -1
  148. package/dist/typography/font.d.ts +5 -2
  149. package/dist/typography/font.d.ts.map +1 -1
  150. package/dist/typography/index.d.ts +1 -0
  151. package/dist/typography/index.d.ts.map +1 -1
  152. package/dist/typography/index.js +26 -28
  153. package/dist/typography/text.d.ts +2 -2
  154. package/dist/typography/text.d.ts.map +1 -1
  155. package/dist/typography/text.js +9 -127
  156. package/dist/typography/typography.d.ts +6 -4
  157. package/dist/typography/typography.d.ts.map +1 -1
  158. package/dist/utility/as-html-validator.d.ts +20 -0
  159. package/dist/utility/as-html-validator.d.ts.map +1 -0
  160. package/dist/utility/as-html.d.ts +65 -0
  161. package/dist/utility/as-html.d.ts.map +1 -0
  162. package/dist/utility/basic-sanitizer.d.ts +54 -0
  163. package/dist/utility/basic-sanitizer.d.ts.map +1 -0
  164. package/dist/utility/css.d.ts +2 -2
  165. package/dist/utility/css.d.ts.map +1 -1
  166. package/dist/utility/index.d.ts +3 -0
  167. package/dist/utility/index.d.ts.map +1 -1
  168. package/dist/utility/index.js +19 -15
  169. package/dist/utility/utility.d.ts +2 -2
  170. package/dist/utility/utility.d.ts.map +1 -1
  171. package/dist/version.d.ts +14 -0
  172. package/dist/version.d.ts.map +1 -0
  173. package/package.json +59 -4
  174. package/dist/allows-hit-testing-DscPrcOw.js +0 -464
  175. package/dist/allows-hit-testing-DscPrcOw.js.map +0 -1
  176. package/dist/appearance/index.js.map +0 -1
  177. package/dist/base-CkGf4b9G.js +0 -786
  178. package/dist/base-CkGf4b9G.js.map +0 -1
  179. package/dist/base.js.map +0 -1
  180. package/dist/basic/margin.js.map +0 -1
  181. package/dist/basic/padding.js.map +0 -1
  182. package/dist/basic/size.js.map +0 -1
  183. package/dist/clipped-CCW8gJqJ.js +0 -282
  184. package/dist/clipped-CCW8gJqJ.js.map +0 -1
  185. package/dist/css-CJEXRr6H.js +0 -124
  186. package/dist/css-CJEXRr6H.js.map +0 -1
  187. package/dist/font-3qM2Z97N.js +0 -135
  188. package/dist/font-3qM2Z97N.js.map +0 -1
  189. package/dist/index.js.map +0 -1
  190. package/dist/interaction/index.js.map +0 -1
  191. package/dist/layout/index.js.map +0 -1
  192. package/dist/overlay-DDiSLprp.js +0 -774
  193. package/dist/overlay-DDiSLprp.js.map +0 -1
  194. package/dist/types.js.map +0 -1
  195. package/dist/typography/index.js.map +0 -1
  196. package/dist/typography/text.js.map +0 -1
  197. package/dist/utility/index.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"allows-hit-testing-DscPrcOw.js","sources":["../src/interaction/scroll.ts","../src/interaction/on-long-press-gesture.ts","../src/interaction/keyboard-shortcut.ts","../src/interaction/focused.ts","../src/interaction/focusable.ts","../src/interaction/on-continuous-hover.ts","../src/interaction/allows-hit-testing.ts"],"sourcesContent":["/**\n * Scroll Modifiers - Modern scroll behaviors\n *\n * Provides scroll snap, smooth scrolling, overscroll control,\n * scroll margin, and scroll padding capabilities.\n */\n\nimport type { DOMNode } from '@tachui/core/runtime/types'\nimport { BaseModifier } from '../basic/base'\nimport type {\n ModifierContext,\n ReactiveModifierProps,\n} from '@tachui/core/modifiers/types'\n\nexport interface ScrollConfig {\n // Scroll behavior\n behavior?: 'auto' | 'smooth'\n\n // Scroll margin (spacing around scroll targets)\n margin?:\n | number\n | string\n | {\n top?: number | string\n right?: number | string\n bottom?: number | string\n left?: number | string\n }\n\n // Scroll padding (inner spacing for scroll containers)\n padding?:\n | number\n | string\n | {\n top?: number | string\n right?: number | string\n bottom?: number | string\n left?: number | string\n }\n\n // Scroll snap behavior\n snap?: {\n type?:\n | 'none'\n | 'x mandatory'\n | 'y mandatory'\n | 'x proximity'\n | 'y proximity'\n | 'both mandatory'\n | 'both proximity'\n align?: 'start' | 'end' | 'center'\n stop?: 'normal' | 'always'\n }\n}\n\nexport type OverscrollBehaviorValue = 'auto' | 'contain' | 'none'\n\nexport interface ScrollOptions {\n scroll?: ScrollConfig\n scrollBehavior?: 'auto' | 'smooth'\n overscrollBehavior?: OverscrollBehaviorValue\n overscrollBehaviorX?: OverscrollBehaviorValue\n overscrollBehaviorY?: OverscrollBehaviorValue\n}\n\nexport type ReactiveScrollOptions = ReactiveModifierProps<ScrollOptions>\n\nexport class ScrollModifier extends BaseModifier<ScrollOptions> {\n readonly type = 'scroll'\n readonly priority = 20\n\n constructor(options: ReactiveScrollOptions) {\n const resolvedOptions: ScrollOptions = {}\n for (const [key, value] of Object.entries(options)) {\n if (typeof value === 'function' && 'peek' in value) {\n ;(resolvedOptions as any)[key] = (value as any).peek()\n } else {\n ;(resolvedOptions as any)[key] = value\n }\n }\n super(resolvedOptions)\n }\n\n apply(_node: DOMNode, context: ModifierContext): DOMNode | undefined {\n if (!context.element) return\n\n const styles = this.computeScrollStyles(this.properties)\n this.applyStyles(context.element, styles)\n\n return undefined\n }\n\n private computeScrollStyles(props: ScrollOptions) {\n const styles: Record<string, string> = {}\n\n // Handle scroll configuration\n if (props.scroll) {\n Object.assign(styles, this.generateScrollCSS(props.scroll))\n }\n\n // Individual scroll properties\n if (props.scrollBehavior) {\n styles.scrollBehavior = props.scrollBehavior\n }\n\n if (props.overscrollBehavior) {\n styles.overscrollBehavior = props.overscrollBehavior\n }\n\n if (props.overscrollBehaviorX) {\n styles.overscrollBehaviorX = props.overscrollBehaviorX\n }\n\n if (props.overscrollBehaviorY) {\n styles.overscrollBehaviorY = props.overscrollBehaviorY\n }\n\n return styles\n }\n\n private generateScrollCSS(config: ScrollConfig): Record<string, string> {\n const styles: Record<string, string> = {}\n\n // Scroll behavior\n if (config.behavior) {\n styles.scrollBehavior = config.behavior\n }\n\n // Scroll margin\n if (config.margin) {\n Object.assign(styles, this.generateScrollMarginCSS(config.margin))\n }\n\n // Scroll padding\n if (config.padding) {\n Object.assign(styles, this.generateScrollPaddingCSS(config.padding))\n }\n\n // Scroll snap\n if (config.snap) {\n Object.assign(styles, this.generateScrollSnapCSS(config.snap))\n }\n\n return styles\n }\n\n private generateScrollMarginCSS(\n margin: number | string | Record<string, number | string>\n ): Record<string, string> {\n if (typeof margin === 'number' || typeof margin === 'string') {\n return { scrollMargin: this.formatSpacing(margin) }\n }\n\n const styles: Record<string, string> = {}\n if (margin.top !== undefined)\n styles.scrollMarginTop = this.formatSpacing(margin.top)\n if (margin.right !== undefined)\n styles.scrollMarginRight = this.formatSpacing(margin.right)\n if (margin.bottom !== undefined)\n styles.scrollMarginBottom = this.formatSpacing(margin.bottom)\n if (margin.left !== undefined)\n styles.scrollMarginLeft = this.formatSpacing(margin.left)\n\n return styles\n }\n\n private generateScrollPaddingCSS(\n padding: number | string | Record<string, number | string>\n ): Record<string, string> {\n if (typeof padding === 'number' || typeof padding === 'string') {\n return { scrollPadding: this.formatSpacing(padding) }\n }\n\n const styles: Record<string, string> = {}\n if (padding.top !== undefined)\n styles.scrollPaddingTop = this.formatSpacing(padding.top)\n if (padding.right !== undefined)\n styles.scrollPaddingRight = this.formatSpacing(padding.right)\n if (padding.bottom !== undefined)\n styles.scrollPaddingBottom = this.formatSpacing(padding.bottom)\n if (padding.left !== undefined)\n styles.scrollPaddingLeft = this.formatSpacing(padding.left)\n\n return styles\n }\n\n private generateScrollSnapCSS(\n snap: ScrollConfig['snap']\n ): Record<string, string> {\n const styles: Record<string, string> = {}\n\n if (snap?.type) {\n styles.scrollSnapType = snap.type\n }\n\n if (snap?.align) {\n styles.scrollSnapAlign = snap.align\n }\n\n if (snap?.stop) {\n styles.scrollSnapStop = snap.stop\n }\n\n return styles\n }\n\n private formatSpacing(value: number | string): string {\n if (typeof value === 'number') {\n return `${value}px`\n }\n return value\n }\n}\n\n/**\n * Enhanced scroll modifier with scroll snap and smooth scrolling\n *\n * @example\n * ```typescript\n * .scroll({\n * behavior: 'smooth',\n * margin: { top: 20, bottom: 20 },\n * snap: { type: 'y mandatory', align: 'start' }\n * })\n * ```\n */\nexport function scroll(config: ScrollConfig): ScrollModifier {\n return new ScrollModifier({ scroll: config })\n}\n\n/**\n * Scroll behavior modifier\n *\n * @example\n * ```typescript\n * .scrollBehavior('smooth') // Smooth scrolling\n * .scrollBehavior('auto') // Default browser scrolling\n * ```\n */\nexport function scrollBehavior(value: 'auto' | 'smooth'): ScrollModifier {\n return new ScrollModifier({ scrollBehavior: value })\n}\n\n/**\n * Overscroll behavior modifier - controls bounce/rubber band effects\n *\n * @example\n * ```typescript\n * .overscrollBehavior('contain') // Prevent scroll chaining\n * .overscrollBehavior('none') // Disable overscroll effects\n * .overscrollBehavior('auto') // Default behavior\n * ```\n */\nexport function overscrollBehavior(\n value: OverscrollBehaviorValue\n): ScrollModifier {\n return new ScrollModifier({ overscrollBehavior: value })\n}\n\n/**\n * Overscroll behavior X modifier - horizontal overscroll control\n *\n * @example\n * ```typescript\n * .overscrollBehaviorX('contain') // Prevent horizontal overscroll\n * ```\n */\nexport function overscrollBehaviorX(\n value: OverscrollBehaviorValue\n): ScrollModifier {\n return new ScrollModifier({ overscrollBehaviorX: value })\n}\n\n/**\n * Overscroll behavior Y modifier - vertical overscroll control\n *\n * @example\n * ```typescript\n * .overscrollBehaviorY('none') // Disable vertical rubber band effect\n * ```\n */\nexport function overscrollBehaviorY(\n value: OverscrollBehaviorValue\n): ScrollModifier {\n return new ScrollModifier({ overscrollBehaviorY: value })\n}\n\n/**\n * Scroll margin shorthand - sets spacing around scroll targets\n *\n * @example\n * ```typescript\n * .scrollMargin(20) // All sides\n * .scrollMargin({ top: 80, bottom: 20 }) // Navigation offset\n * ```\n */\nexport function scrollMargin(\n margin:\n | number\n | string\n | {\n top?: number | string\n right?: number | string\n bottom?: number | string\n left?: number | string\n }\n): ScrollModifier {\n return new ScrollModifier({ scroll: { margin } })\n}\n\n/**\n * Scroll padding shorthand - sets inner spacing for scroll containers\n *\n * @example\n * ```typescript\n * .scrollPadding(16) // All sides\n * .scrollPadding({ top: 60, bottom: 20 }) // Header/footer padding\n * ```\n */\nexport function scrollPadding(\n padding:\n | number\n | string\n | {\n top?: number | string\n right?: number | string\n bottom?: number | string\n left?: number | string\n }\n): ScrollModifier {\n return new ScrollModifier({ scroll: { padding } })\n}\n\n/**\n * Scroll snap shorthand - quick scroll snap configuration\n *\n * @example\n * ```typescript\n * .scrollSnap('y mandatory', 'start') // Vertical mandatory snapping to start\n * .scrollSnap('x proximity', 'center') // Horizontal proximity snapping to center\n * ```\n */\nexport function scrollSnap(\n type:\n | 'none'\n | 'x mandatory'\n | 'y mandatory'\n | 'x proximity'\n | 'y proximity'\n | 'both mandatory'\n | 'both proximity',\n align?: 'start' | 'end' | 'center',\n stop?: 'normal' | 'always'\n): ScrollModifier {\n return new ScrollModifier({\n scroll: {\n snap: { type, align, stop },\n },\n })\n}\n","/**\n * OnLongPressGesture Modifier\n *\n * Implements long press gesture detection with customizable timing and distance constraints.\n * Supports both pointer and touch events for cross-platform compatibility.\n */\n\nimport { BaseModifier } from '../base'\nimport type { DOMNode } from '@tachui/core/runtime/types'\nimport type { ModifierContext } from '../types'\n\nexport interface OnLongPressGestureOptions {\n minimumDuration?: number // ms, default 500\n maximumDistance?: number // px, default 10\n perform: () => void\n onPressingChanged?: (isPressing: boolean) => void\n}\n\nexport class OnLongPressGestureModifier extends BaseModifier<OnLongPressGestureOptions> {\n readonly type = 'onLongPressGesture'\n readonly priority = 85\n\n apply(_node: DOMNode, context: ModifierContext): DOMNode | undefined {\n if (!context.element) return\n\n this.setupLongPressGesture(context.element, this.properties)\n return undefined\n }\n\n private setupLongPressGesture(\n element: Element,\n options: OnLongPressGestureOptions\n ): void {\n const minimumDuration = options.minimumDuration ?? 500 // ms\n const maximumDistance = options.maximumDistance ?? 10 // px\n\n let startPosition: { x: number; y: number } | null = null\n let pressTimer: number | null = null\n let isPressed = false\n let longPressTriggered = false\n\n const startLongPress = (x: number, y: number) => {\n if (isPressed) return // Prevent duplicate starts\n\n startPosition = { x, y }\n isPressed = true\n longPressTriggered = false\n\n options.onPressingChanged?.(true)\n\n pressTimer = window.setTimeout(() => {\n if (isPressed && !longPressTriggered) {\n longPressTriggered = true\n options.perform()\n }\n }, minimumDuration)\n }\n\n const checkDistance = (x: number, y: number): boolean => {\n if (!startPosition) return false\n const distance = Math.sqrt(\n Math.pow(x - startPosition.x, 2) + Math.pow(y - startPosition.y, 2)\n )\n return distance <= maximumDistance\n }\n\n const endLongPress = () => {\n if (pressTimer) {\n clearTimeout(pressTimer)\n pressTimer = null\n }\n\n if (isPressed) {\n isPressed = false\n options.onPressingChanged?.(false)\n }\n\n startPosition = null\n longPressTriggered = false\n }\n\n // Pointer Events (preferred for modern browsers)\n const handlePointerDown = (event: Event) => {\n const pointerEvent = event as PointerEvent\n event.preventDefault()\n startLongPress(pointerEvent.clientX, pointerEvent.clientY)\n }\n\n const handlePointerMove = (event: Event) => {\n if (!isPressed) return\n\n const pointerEvent = event as PointerEvent\n if (!checkDistance(pointerEvent.clientX, pointerEvent.clientY)) {\n endLongPress()\n }\n }\n\n const handlePointerUp = () => {\n endLongPress()\n }\n\n const handlePointerCancel = () => {\n endLongPress()\n }\n\n // Touch Events (fallback for devices without pointer events)\n const handleTouchStart = (event: Event) => {\n const touchEvent = event as TouchEvent\n if (touchEvent.touches.length === 1) {\n const touch = touchEvent.touches[0]\n event.preventDefault()\n startLongPress(touch.clientX, touch.clientY)\n }\n }\n\n const handleTouchMove = (event: Event) => {\n if (!isPressed) return\n\n const touchEvent = event as TouchEvent\n if (touchEvent.touches.length === 1) {\n const touch = touchEvent.touches[0]\n if (!checkDistance(touch.clientX, touch.clientY)) {\n endLongPress()\n }\n } else {\n endLongPress()\n }\n }\n\n const handleTouchEnd = () => {\n endLongPress()\n }\n\n const handleTouchCancel = () => {\n endLongPress()\n }\n\n // Mouse Events (additional fallback)\n const handleMouseDown = (event: Event) => {\n const mouseEvent = event as MouseEvent\n // Only handle primary button\n if (mouseEvent.button === 0) {\n event.preventDefault()\n startLongPress(mouseEvent.clientX, mouseEvent.clientY)\n }\n }\n\n const handleMouseMove = (event: Event) => {\n if (!isPressed) return\n\n const mouseEvent = event as MouseEvent\n if (!checkDistance(mouseEvent.clientX, mouseEvent.clientY)) {\n endLongPress()\n }\n }\n\n const handleMouseUp = () => {\n endLongPress()\n }\n\n const handleMouseLeave = () => {\n endLongPress()\n }\n\n // Add event listeners with appropriate fallbacks\n if ('onpointerdown' in element) {\n // Use Pointer Events if supported\n element.addEventListener(\n 'pointerdown',\n handlePointerDown as EventListener\n )\n element.addEventListener(\n 'pointermove',\n handlePointerMove as EventListener\n )\n element.addEventListener('pointerup', handlePointerUp as EventListener)\n element.addEventListener(\n 'pointercancel',\n handlePointerCancel as EventListener\n )\n } else if ('ontouchstart' in element) {\n // Fall back to Touch Events\n element.addEventListener(\n 'touchstart',\n handleTouchStart as EventListener,\n { passive: false }\n )\n element.addEventListener('touchmove', handleTouchMove as EventListener)\n element.addEventListener('touchend', handleTouchEnd as EventListener)\n element.addEventListener(\n 'touchcancel',\n handleTouchCancel as EventListener\n )\n } else {\n // Fall back to Mouse Events\n element.addEventListener('mousedown', handleMouseDown as EventListener)\n element.addEventListener('mousemove', handleMouseMove as EventListener)\n element.addEventListener('mouseup', handleMouseUp as EventListener)\n element.addEventListener('mouseleave', handleMouseLeave as EventListener)\n }\n\n // Store cleanup function for potential later removal\n const cleanup = () => {\n endLongPress()\n\n if ('onpointerdown' in element) {\n element.removeEventListener(\n 'pointerdown',\n handlePointerDown as EventListener\n )\n element.removeEventListener(\n 'pointermove',\n handlePointerMove as EventListener\n )\n element.removeEventListener(\n 'pointerup',\n handlePointerUp as EventListener\n )\n element.removeEventListener(\n 'pointercancel',\n handlePointerCancel as EventListener\n )\n } else if ('ontouchstart' in element) {\n element.removeEventListener(\n 'touchstart',\n handleTouchStart as EventListener\n )\n element.removeEventListener(\n 'touchmove',\n handleTouchMove as EventListener\n )\n element.removeEventListener('touchend', handleTouchEnd as EventListener)\n element.removeEventListener(\n 'touchcancel',\n handleTouchCancel as EventListener\n )\n } else {\n element.removeEventListener(\n 'mousedown',\n handleMouseDown as EventListener\n )\n element.removeEventListener(\n 'mousemove',\n handleMouseMove as EventListener\n )\n element.removeEventListener('mouseup', handleMouseUp as EventListener)\n element.removeEventListener(\n 'mouseleave',\n handleMouseLeave as EventListener\n )\n }\n }\n\n // Store cleanup function for later removal\n ;(element as any)._longPressCleanup = cleanup\n }\n}\n\n/**\n * Factory function for onLongPressGesture modifier\n */\nexport function onLongPressGesture(\n options: OnLongPressGestureOptions\n): OnLongPressGestureModifier {\n return new OnLongPressGestureModifier(options)\n}\n","/**\n * KeyboardShortcut Modifier\n *\n * Implements keyboard shortcut handling with support for modifier keys.\n * Supports cross-platform key combinations including cmd/ctrl normalization.\n */\n\nimport { BaseModifier } from '../base'\nimport type { DOMNode } from '@tachui/core/runtime/types'\nimport type { ModifierContext } from '../types'\n\nexport interface KeyboardShortcutOptions {\n key: string\n modifiers?: ('cmd' | 'ctrl' | 'shift' | 'alt' | 'meta')[]\n action: () => void\n}\n\nexport class KeyboardShortcutModifier extends BaseModifier<KeyboardShortcutOptions> {\n readonly type = 'keyboardShortcut'\n readonly priority = 80\n\n constructor(options: KeyboardShortcutOptions) {\n // Ensure modifiers defaults to empty array\n const normalizedOptions = {\n ...options,\n modifiers: options.modifiers || [],\n }\n super(normalizedOptions)\n }\n\n apply(_node: DOMNode, context: ModifierContext): DOMNode | undefined {\n if (!context.element) return\n\n this.setupKeyboardShortcut(context.element, this.properties)\n return undefined\n }\n\n private setupKeyboardShortcut(\n element: Element,\n shortcut: KeyboardShortcutOptions\n ): void {\n const modifiers = shortcut.modifiers || []\n\n const handleKeyDown = (event: Event) => {\n const keyboardEvent = event as KeyboardEvent\n\n // Check if the pressed key matches\n if (keyboardEvent.key.toLowerCase() !== shortcut.key.toLowerCase()) {\n return\n }\n\n // Check modifier keys\n const requiredModifiers = new Set(modifiers)\n const activeModifiers = new Set<string>()\n\n // Normalize platform differences (cmd vs ctrl)\n if (keyboardEvent.ctrlKey || keyboardEvent.metaKey) {\n if (navigator.platform.includes('Mac')) {\n if (keyboardEvent.metaKey) {\n activeModifiers.add('cmd')\n activeModifiers.add('meta')\n }\n if (keyboardEvent.ctrlKey) {\n activeModifiers.add('ctrl')\n }\n } else {\n if (keyboardEvent.ctrlKey) {\n activeModifiers.add('ctrl')\n activeModifiers.add('cmd') // Allow 'cmd' to work on non-Mac platforms as 'ctrl'\n }\n if (keyboardEvent.metaKey) {\n activeModifiers.add('meta')\n }\n }\n }\n\n if (keyboardEvent.shiftKey) {\n activeModifiers.add('shift')\n }\n\n if (keyboardEvent.altKey) {\n activeModifiers.add('alt')\n }\n\n // Check if all required modifiers are active\n const hasRequiredModifiers = Array.from(requiredModifiers).every(\n modifier => activeModifiers.has(modifier)\n )\n\n // Check if there are extra modifiers that shouldn't be there\n const allowedModifiers = new Set([...requiredModifiers])\n if (requiredModifiers.has('cmd')) {\n allowedModifiers.add('meta') // cmd and meta are equivalent\n allowedModifiers.add('ctrl') // ctrl can act as cmd on non-Mac platforms\n }\n if (requiredModifiers.has('meta')) {\n allowedModifiers.add('cmd') // cmd and meta are equivalent\n }\n if (requiredModifiers.has('ctrl')) {\n allowedModifiers.add('cmd') // cmd can map to ctrl on non-Mac platforms\n }\n\n const hasExtraModifiers = Array.from(activeModifiers).some(\n modifier =>\n !allowedModifiers.has(\n modifier as 'cmd' | 'ctrl' | 'shift' | 'alt' | 'meta'\n )\n )\n\n // Execute action if key combination matches exactly\n if (hasRequiredModifiers && !hasExtraModifiers) {\n event.preventDefault()\n event.stopPropagation()\n shortcut.action()\n }\n }\n\n // Add keydown listener\n // For keyboard shortcuts, we usually want global scope, so add to document\n // But also support element-scoped shortcuts\n const targetElement =\n element instanceof HTMLElement && element.tabIndex >= 0\n ? element\n : document\n\n targetElement.addEventListener('keydown', handleKeyDown as EventListener)\n\n // Store cleanup function for later removal\n const cleanup = () => {\n targetElement.removeEventListener(\n 'keydown',\n handleKeyDown as EventListener\n )\n }\n\n ;(element as any)._keyboardShortcutCleanup = cleanup\n }\n}\n\n/**\n * Factory function for keyboardShortcut modifier\n */\nexport function keyboardShortcut(\n options: KeyboardShortcutOptions\n): KeyboardShortcutModifier {\n return new KeyboardShortcutModifier(options)\n}\n\n/**\n * Convenience factory for common shortcut patterns\n */\nexport function keyboardShortcutBuilder(\n key: string,\n modifiers: ('cmd' | 'ctrl' | 'shift' | 'alt' | 'meta')[],\n action: () => void\n): KeyboardShortcutModifier {\n return keyboardShortcut({ key, modifiers, action })\n}\n","/**\n * Focused Modifier\n *\n * Manages focus state for elements with reactive binding support.\n * Supports both static boolean and reactive Signal<boolean> values.\n */\n\nimport { BaseModifier } from '../base'\nimport type { DOMNode } from '@tachui/core/runtime/types'\nimport type { ModifierContext } from '../types'\n\n// Simple signal-like interface for reactive values\ninterface Signal<T> {\n (): T\n subscribe?: (callback: (value: T) => void) => () => void\n}\n\nexport interface FocusedOptions {\n focused: boolean | Signal<boolean>\n}\n\nexport class FocusedModifier extends BaseModifier<FocusedOptions> {\n readonly type = 'focused'\n readonly priority = 75\n\n apply(_node: DOMNode, context: ModifierContext): DOMNode | undefined {\n if (!context.element) return\n\n this.setupFocusManagement(context.element, this.properties.focused)\n return undefined\n }\n\n private setupFocusManagement(\n element: Element,\n focused: boolean | Signal<boolean>\n ): void {\n // Check if element has HTMLElement-like properties (for test compatibility)\n if (!element || typeof (element as any).focus !== 'function') return\n\n const htmlElement = element as HTMLElement\n\n // Ensure the element can receive focus\n if (htmlElement.tabIndex < 0) {\n htmlElement.tabIndex = 0\n }\n\n let unsubscribe: (() => void) | undefined\n\n const applyFocusState = (shouldFocus: boolean) => {\n if (shouldFocus) {\n // Use requestAnimationFrame to ensure DOM is ready\n requestAnimationFrame(() => {\n if (document.activeElement !== htmlElement) {\n htmlElement.focus()\n }\n })\n } else {\n // Only blur if this element currently has focus\n if (document.activeElement === htmlElement) {\n htmlElement.blur()\n }\n }\n }\n\n if (typeof focused === 'function') {\n // Reactive focus management\n const signal = focused as Signal<boolean>\n\n // Apply initial state\n applyFocusState(signal())\n\n // Subscribe to changes if signal supports subscription\n if (signal.subscribe) {\n unsubscribe = signal.subscribe((newValue: boolean) => {\n applyFocusState(newValue)\n })\n } else {\n // Fallback: poll for changes (disabled in test environment to prevent recursion)\n if (process.env.NODE_ENV !== 'test') {\n let lastValue = signal()\n let pollActive = true\n const poll = () => {\n if (!pollActive) return\n const currentValue = signal()\n if (currentValue !== lastValue) {\n lastValue = currentValue\n applyFocusState(currentValue)\n }\n if (pollActive) {\n requestAnimationFrame(poll)\n }\n }\n\n unsubscribe = () => {\n pollActive = false\n }\n\n // Start polling\n requestAnimationFrame(poll)\n } else {\n // In test environment, just capture initial value\n unsubscribe = () => {\n // No-op in test environment\n }\n }\n }\n } else {\n // Static focus management\n applyFocusState(focused)\n }\n\n // Store cleanup function for later removal\n const cleanup = () => {\n if (unsubscribe) {\n unsubscribe()\n }\n }\n\n ;(element as any)._focusedCleanup = cleanup\n }\n}\n\n/**\n * Factory function for focused modifier\n */\nexport function focused(\n focusedValue: boolean | Signal<boolean>\n): FocusedModifier {\n return new FocusedModifier({ focused: focusedValue })\n}\n","/**\n * Focusable Modifier\n *\n * Controls whether an element can receive focus and defines interaction behaviors.\n * Supports accessibility attributes and role management.\n */\n\nimport { BaseModifier } from '../base'\nimport type { DOMNode } from '@tachui/core/runtime/types'\nimport type { ModifierContext } from '../types'\n\nexport interface FocusableOptions {\n isFocusable?: boolean\n interactions?: ('activate' | 'edit')[]\n}\n\nexport class FocusableModifier extends BaseModifier<FocusableOptions> {\n readonly type = 'focusable'\n readonly priority = 75\n\n constructor(options: FocusableOptions = {}) {\n // Ensure interactions defaults to empty array\n const normalizedOptions = {\n ...options,\n interactions: options.interactions || [],\n }\n super(normalizedOptions)\n }\n\n apply(_node: DOMNode, context: ModifierContext): DOMNode | undefined {\n if (!context.element) return\n\n this.setupFocusable(context.element, this.properties)\n return undefined\n }\n\n private setupFocusable(element: Element, options: FocusableOptions): void {\n // Check if element has HTMLElement-like properties (for test compatibility)\n if (!element || typeof (element as any).focus !== 'function') return\n\n const htmlElement = element as HTMLElement\n const isFocusable = options.isFocusable ?? true\n const interactions = options.interactions ?? []\n\n if (isFocusable) {\n // Make element focusable\n if (htmlElement.tabIndex < 0) {\n htmlElement.tabIndex = 0\n }\n\n // Handle role assignment - edit takes precedence over activate, but don't override existing roles\n const existingRole = htmlElement.getAttribute('role')\n\n if (interactions.includes('edit')) {\n // Element can be edited - this takes precedence (but only if no existing role)\n if (!existingRole) {\n htmlElement.setAttribute('role', 'textbox')\n }\n htmlElement.setAttribute('contenteditable', 'true')\n htmlElement.setAttribute(\n 'aria-label',\n htmlElement.getAttribute('aria-label') || 'Editable content'\n )\n } else if (interactions.includes('activate')) {\n // Element can be activated (like a button) - only if no role set\n if (!existingRole) {\n htmlElement.setAttribute('role', 'button')\n }\n htmlElement.setAttribute(\n 'aria-label',\n htmlElement.getAttribute('aria-label') || 'Activatable element'\n )\n }\n\n // Add keyboard activation support if activate interaction is present\n if (interactions.includes('activate')) {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === ' ' || event.key === 'Enter') {\n event.preventDefault()\n // Trigger a click event to activate\n htmlElement.click()\n }\n }\n\n htmlElement.addEventListener('keydown', handleKeyDown)\n\n // Store cleanup function\n const existingCleanup =\n (htmlElement as any)._focusableCleanup || (() => {})\n ;(htmlElement as any)._focusableCleanup = () => {\n existingCleanup()\n htmlElement.removeEventListener('keydown', handleKeyDown)\n }\n }\n\n // Ensure element appears focusable to screen readers\n if (\n !htmlElement.getAttribute('aria-label') &&\n !htmlElement.getAttribute('aria-labelledby')\n ) {\n htmlElement.setAttribute('aria-label', 'Focusable element')\n }\n\n // Ensure we always have a cleanup function, even if it's just a no-op\n if (!(htmlElement as any)._focusableCleanup) {\n ;(htmlElement as any)._focusableCleanup = () => {\n // Default cleanup - no specific actions needed for basic focusable\n }\n }\n } else {\n // Make element non-focusable\n htmlElement.tabIndex = -1\n htmlElement.removeAttribute('role')\n htmlElement.removeAttribute('aria-label')\n htmlElement.removeAttribute('contenteditable')\n\n // Clean up any existing event listeners\n const existingCleanup = (htmlElement as any)._focusableCleanup\n if (existingCleanup) {\n existingCleanup()\n delete (htmlElement as any)._focusableCleanup\n }\n }\n }\n}\n\n/**\n * Factory function for focusable modifier\n */\nexport function focusable(\n isFocusable?: boolean,\n interactions?: ('activate' | 'edit')[]\n): FocusableModifier {\n return new FocusableModifier({\n isFocusable: isFocusable ?? true,\n interactions: interactions ?? [],\n })\n}\n\n/**\n * Convenience factory for activatable elements\n */\nexport function activatable(): FocusableModifier {\n return focusable(true, ['activate'])\n}\n\n/**\n * Convenience factory for editable elements\n */\nexport function editable(): FocusableModifier {\n return focusable(true, ['edit'])\n}\n","/**\n * OnContinuousHover Modifier\n *\n * Tracks continuous hover with real-time coordinate updates.\n * Supports both local and global coordinate spaces.\n */\n\nimport { BaseModifier } from '../base'\nimport type { DOMNode } from '@tachui/core/runtime/types'\nimport type { ModifierContext } from '../types'\n\nexport interface OnContinuousHoverOptions {\n coordinateSpace?: 'local' | 'global'\n perform: (location: { x: number; y: number } | null) => void\n}\n\nexport class OnContinuousHoverModifier extends BaseModifier<OnContinuousHoverOptions> {\n readonly type = 'onContinuousHover'\n readonly priority = 70\n\n apply(_node: DOMNode, context: ModifierContext): DOMNode | undefined {\n if (!context.element) return\n\n this.setupContinuousHover(context.element, this.properties)\n return undefined\n }\n\n private setupContinuousHover(\n element: Element,\n options: OnContinuousHoverOptions\n ): void {\n const coordinateSpace = options.coordinateSpace ?? 'local'\n let isHovering = false\n\n const calculateCoordinates = (\n event: MouseEvent\n ): { x: number; y: number } => {\n if (coordinateSpace === 'global') {\n // Global coordinates relative to viewport\n return {\n x: event.clientX,\n y: event.clientY,\n }\n } else {\n // Local coordinates relative to the element\n const rect = element.getBoundingClientRect()\n return {\n x: event.clientX - rect.left,\n y: event.clientY - rect.top,\n }\n }\n }\n\n const handleMouseEnter = (event: Event) => {\n isHovering = true\n const mouseEvent = event as MouseEvent\n const coordinates = calculateCoordinates(mouseEvent)\n options.perform(coordinates)\n }\n\n const handleMouseMove = (event: Event) => {\n if (!isHovering) return\n\n const mouseEvent = event as MouseEvent\n const coordinates = calculateCoordinates(mouseEvent)\n options.perform(coordinates)\n }\n\n const handleMouseLeave = () => {\n isHovering = false\n options.perform(null) // null indicates hover ended\n }\n\n // Add mouse event listeners\n element.addEventListener('mouseenter', handleMouseEnter as EventListener)\n element.addEventListener('mousemove', handleMouseMove as EventListener)\n element.addEventListener('mouseleave', handleMouseLeave as EventListener)\n\n // Store cleanup function for later removal\n const cleanup = () => {\n // Reset hover state\n if (isHovering) {\n isHovering = false\n options.perform(null)\n }\n\n element.removeEventListener(\n 'mouseenter',\n handleMouseEnter as EventListener\n )\n element.removeEventListener('mousemove', handleMouseMove as EventListener)\n element.removeEventListener(\n 'mouseleave',\n handleMouseLeave as EventListener\n )\n }\n\n ;(element as any)._continuousHoverCleanup = cleanup\n }\n}\n\n/**\n * Factory function for onContinuousHover modifier\n */\nexport function onContinuousHover(\n options: OnContinuousHoverOptions\n): OnContinuousHoverModifier {\n return new OnContinuousHoverModifier(options)\n}\n\n/**\n * Convenience factory for local coordinate tracking\n */\nexport function onContinuousHoverLocal(\n perform: (location: { x: number; y: number } | null) => void\n): OnContinuousHoverModifier {\n return onContinuousHover({\n coordinateSpace: 'local',\n perform,\n })\n}\n\n/**\n * Convenience factory for global coordinate tracking\n */\nexport function onContinuousHoverGlobal(\n perform: (location: { x: number; y: number } | null) => void\n): OnContinuousHoverModifier {\n return onContinuousHover({\n coordinateSpace: 'global',\n perform,\n })\n}\n","/**\n * AllowsHitTesting Modifier\n *\n * Controls whether an element can receive pointer events.\n * When disabled, pointer events pass through to elements behind.\n */\n\nimport { BaseModifier } from '../base'\nimport type { DOMNode } from '@tachui/core/runtime/types'\nimport type { ModifierContext } from '../types'\n\nexport interface AllowsHitTestingOptions {\n enabled: boolean\n}\n\nexport class AllowsHitTestingModifier extends BaseModifier<AllowsHitTestingOptions> {\n readonly type = 'allowsHitTesting'\n readonly priority = 95\n\n apply(_node: DOMNode, context: ModifierContext): DOMNode | undefined {\n if (!context.element) return\n\n this.setupHitTesting(context.element, this.properties.enabled)\n return undefined\n }\n\n private setupHitTesting(element: Element, enabled: boolean): void {\n // Check if element has style property (for test compatibility)\n if (!element || typeof (element as any).style !== 'object') return\n\n const htmlElement = element as HTMLElement\n\n if (enabled) {\n // Enable hit testing - remove pointer-events restriction\n if (htmlElement.style.pointerEvents === 'none') {\n htmlElement.style.pointerEvents = ''\n }\n } else {\n // Disable hit testing - pointer events pass through\n htmlElement.style.pointerEvents = 'none'\n }\n\n // Store the current state for potential cleanup or toggling\n ;(element as any)._hitTestingEnabled = enabled\n }\n}\n\n/**\n * Factory function for allowsHitTesting modifier\n */\nexport function allowsHitTesting(enabled: boolean): AllowsHitTestingModifier {\n return new AllowsHitTestingModifier({ enabled })\n}\n\n/**\n * Convenience factory for enabling hit testing\n */\nexport function enableHitTesting(): AllowsHitTestingModifier {\n return allowsHitTesting(true)\n}\n\n/**\n * Convenience factory for disabling hit testing\n */\nexport function disableHitTesting(): AllowsHitTestingModifier {\n return allowsHitTesting(false)\n}\n"],"names":["ScrollModifier","BaseModifier","options","resolvedOptions","key","value","__publicField","_node","context","styles","props","config","margin","padding","snap","scroll","scrollBehavior","overscrollBehavior","overscrollBehaviorX","overscrollBehaviorY","scrollMargin","scrollPadding","scrollSnap","type","align","stop","OnLongPressGestureModifier","element","minimumDuration","maximumDistance","startPosition","pressTimer","isPressed","longPressTriggered","startLongPress","x","y","checkDistance","endLongPress","handlePointerDown","event","pointerEvent","handlePointerMove","handlePointerUp","handlePointerCancel","handleTouchStart","touchEvent","touch","handleTouchMove","handleTouchEnd","handleTouchCancel","handleMouseDown","mouseEvent","handleMouseMove","handleMouseUp","handleMouseLeave","cleanup","onLongPressGesture","KeyboardShortcutModifier","normalizedOptions","shortcut","modifiers","handleKeyDown","keyboardEvent","requiredModifiers","activeModifiers","hasRequiredModifiers","modifier","allowedModifiers","hasExtraModifiers","targetElement","keyboardShortcut","keyboardShortcutBuilder","action","FocusedModifier","focused","htmlElement","unsubscribe","applyFocusState","shouldFocus","signal","newValue","lastValue","pollActive","poll","currentValue","focusedValue","FocusableModifier","isFocusable","interactions","existingRole","existingCleanup","focusable","activatable","editable","OnContinuousHoverModifier","coordinateSpace","isHovering","calculateCoordinates","rect","handleMouseEnter","coordinates","onContinuousHover","onContinuousHoverLocal","perform","onContinuousHoverGlobal","AllowsHitTestingModifier","enabled","allowsHitTesting","enableHitTesting","disableHitTesting"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}