flexium 0.10.4 → 0.10.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 (150) hide show
  1. package/README.md +5 -5
  2. package/dist/{DrawText-ngwNNh8O.d.ts → DrawText-CVAKQ5wZ.d.cts} +42 -42
  3. package/dist/{DrawText-ccZrs3Xs.d.cts → DrawText-Dlh1L1Ar.d.ts} +42 -42
  4. package/dist/advanced.d.cts +1 -1
  5. package/dist/advanced.d.ts +1 -1
  6. package/dist/advanced.js +1 -1
  7. package/dist/advanced.js.map +1 -1
  8. package/dist/advanced.mjs +1 -1
  9. package/dist/advanced.mjs.map +1 -1
  10. package/dist/canvas.d.cts +5 -6
  11. package/dist/canvas.d.ts +5 -6
  12. package/dist/canvas.js +1 -1
  13. package/dist/canvas.mjs +1 -1
  14. package/dist/chunk-5ICRQIS2.js +3 -0
  15. package/dist/chunk-5ICRQIS2.js.map +1 -0
  16. package/dist/chunk-5K55ASOD.mjs +3 -0
  17. package/dist/chunk-5K55ASOD.mjs.map +1 -0
  18. package/dist/chunk-AZEHBSBG.js +3 -0
  19. package/dist/chunk-AZEHBSBG.js.map +1 -0
  20. package/dist/chunk-BBNYMXE7.mjs +2 -0
  21. package/dist/chunk-BBNYMXE7.mjs.map +1 -0
  22. package/dist/{chunk-WXEHDEIH.js → chunk-DZ7L3SHV.js} +2 -2
  23. package/dist/{chunk-WXEHDEIH.js.map → chunk-DZ7L3SHV.js.map} +1 -1
  24. package/dist/chunk-ECYYIQEX.mjs +3 -0
  25. package/dist/chunk-ECYYIQEX.mjs.map +1 -0
  26. package/dist/chunk-FDMJHFN7.mjs +2 -0
  27. package/dist/chunk-FDMJHFN7.mjs.map +1 -0
  28. package/dist/chunk-GKJQEOP7.mjs +2 -0
  29. package/dist/{chunk-PVPY55Z7.mjs.map → chunk-GKJQEOP7.mjs.map} +1 -1
  30. package/dist/chunk-GYDP6MFV.js +3 -0
  31. package/dist/chunk-GYDP6MFV.js.map +1 -0
  32. package/dist/chunk-HB5VPQTB.mjs +2 -0
  33. package/dist/chunk-HB5VPQTB.mjs.map +1 -0
  34. package/dist/chunk-OPAAGNBO.mjs +2 -0
  35. package/dist/{chunk-HLPVL6EK.mjs.map → chunk-OPAAGNBO.mjs.map} +1 -1
  36. package/dist/chunk-QPCIDSMM.js +2 -0
  37. package/dist/chunk-QPCIDSMM.js.map +1 -0
  38. package/dist/chunk-QZIX4FXS.mjs +2 -0
  39. package/dist/chunk-QZIX4FXS.mjs.map +1 -0
  40. package/dist/{chunk-63AW5ZOC.js → chunk-RMN5IPS5.js} +2 -2
  41. package/dist/{chunk-63AW5ZOC.js.map → chunk-RMN5IPS5.js.map} +1 -1
  42. package/dist/chunk-WWEWRI6S.js +2 -0
  43. package/dist/chunk-WWEWRI6S.js.map +1 -0
  44. package/dist/chunk-XJHWMHKF.js +2 -0
  45. package/dist/chunk-XJHWMHKF.js.map +1 -0
  46. package/dist/chunk-Y6KKAHLS.mjs +3 -0
  47. package/dist/chunk-Y6KKAHLS.mjs.map +1 -0
  48. package/dist/chunk-YPVRQKMW.js +2 -0
  49. package/dist/chunk-YPVRQKMW.js.map +1 -0
  50. package/dist/{components-CxnAnbpI.d.cts → components-BMbqsbMY.d.cts} +5 -5
  51. package/dist/{components-B7KQ8C-i.d.ts → components-C83mBQXW.d.ts} +5 -5
  52. package/dist/{effect-14CxUU8r.d.ts → core-CxHP8991.d.cts} +9 -1
  53. package/dist/{effect-14CxUU8r.d.cts → core-D0ggvjX3.d.ts} +9 -1
  54. package/dist/core.d.cts +2 -80
  55. package/dist/core.d.ts +2 -80
  56. package/dist/core.js +1 -1
  57. package/dist/core.mjs +1 -1
  58. package/dist/dom.d.cts +2 -2
  59. package/dist/dom.d.ts +2 -2
  60. package/dist/dom.js +1 -1
  61. package/dist/dom.js.map +1 -1
  62. package/dist/dom.mjs +1 -1
  63. package/dist/dom.mjs.map +1 -1
  64. package/dist/effect-554ONNZR.js +2 -0
  65. package/dist/{effect-K45UU3N4.js.map → effect-554ONNZR.js.map} +1 -1
  66. package/dist/effect-T2GVIS3T.mjs +2 -0
  67. package/dist/{effect-3LUCHSAZ.mjs.map → effect-T2GVIS3T.mjs.map} +1 -1
  68. package/dist/index.d.cts +1 -1
  69. package/dist/index.d.ts +1 -1
  70. package/dist/index.js +1 -1
  71. package/dist/index.js.map +1 -1
  72. package/dist/index.mjs +1 -1
  73. package/dist/index.mjs.map +1 -1
  74. package/dist/interactive.d.cts +5 -5
  75. package/dist/interactive.d.ts +5 -5
  76. package/dist/interactive.js +1 -1
  77. package/dist/interactive.js.map +1 -1
  78. package/dist/interactive.mjs +1 -1
  79. package/dist/interactive.mjs.map +1 -1
  80. package/dist/metafile-cjs.json +1 -1
  81. package/dist/metafile-esm.json +1 -1
  82. package/dist/{portal-NLlE-fNZ.d.cts → portal-BK_0Z0hE.d.cts} +2 -2
  83. package/dist/{portal-CVqrpmHd.d.ts → portal-CbguxtuQ.d.ts} +2 -2
  84. package/dist/primitives/motion.js +1 -1
  85. package/dist/primitives/motion.mjs +1 -1
  86. package/dist/primitives/ui.d.cts +3 -3
  87. package/dist/primitives/ui.d.ts +3 -3
  88. package/dist/primitives/ui.js +1 -1
  89. package/dist/primitives/ui.js.map +1 -1
  90. package/dist/primitives/ui.mjs +1 -1
  91. package/dist/primitives/ui.mjs.map +1 -1
  92. package/dist/primitives.d.cts +4 -5
  93. package/dist/primitives.d.ts +4 -5
  94. package/dist/primitives.js +1 -1
  95. package/dist/primitives.js.map +1 -1
  96. package/dist/primitives.mjs +1 -1
  97. package/dist/primitives.mjs.map +1 -1
  98. package/dist/router.d.cts +3 -3
  99. package/dist/router.d.ts +3 -3
  100. package/dist/router.js +1 -1
  101. package/dist/router.mjs +1 -1
  102. package/dist/server.js +1 -1
  103. package/dist/server.js.map +1 -1
  104. package/dist/server.mjs +1 -1
  105. package/dist/server.mjs.map +1 -1
  106. package/dist/state-DitsMyev.d.cts +96 -0
  107. package/dist/state-DitsMyev.d.ts +96 -0
  108. package/dist/state-RYKSC35A.mjs +2 -0
  109. package/dist/state-RYKSC35A.mjs.map +1 -0
  110. package/dist/state-XUXPMCFJ.js +2 -0
  111. package/dist/state-XUXPMCFJ.js.map +1 -0
  112. package/dist/test-exports.d.cts +37 -7
  113. package/dist/test-exports.d.ts +37 -7
  114. package/dist/test-exports.js +1 -1
  115. package/dist/test-exports.mjs +1 -1
  116. package/package.json +1 -1
  117. package/dist/chunk-3AWR7IKE.js +0 -2
  118. package/dist/chunk-3AWR7IKE.js.map +0 -1
  119. package/dist/chunk-3BQXIHYI.mjs +0 -3
  120. package/dist/chunk-3BQXIHYI.mjs.map +0 -1
  121. package/dist/chunk-5236IK5I.js +0 -2
  122. package/dist/chunk-5236IK5I.js.map +0 -1
  123. package/dist/chunk-6K44QCMT.mjs +0 -3
  124. package/dist/chunk-6K44QCMT.mjs.map +0 -1
  125. package/dist/chunk-7Q4UE442.mjs +0 -2
  126. package/dist/chunk-7Q4UE442.mjs.map +0 -1
  127. package/dist/chunk-AJT35P3Z.js +0 -3
  128. package/dist/chunk-AJT35P3Z.js.map +0 -1
  129. package/dist/chunk-AYQMU7XC.js +0 -3
  130. package/dist/chunk-AYQMU7XC.js.map +0 -1
  131. package/dist/chunk-B7VP6HBY.mjs +0 -2
  132. package/dist/chunk-B7VP6HBY.mjs.map +0 -1
  133. package/dist/chunk-HLPVL6EK.mjs +0 -2
  134. package/dist/chunk-KJPIJNFH.mjs +0 -2
  135. package/dist/chunk-KJPIJNFH.mjs.map +0 -1
  136. package/dist/chunk-PVPY55Z7.mjs +0 -2
  137. package/dist/chunk-Q7WT5IIF.mjs +0 -3
  138. package/dist/chunk-Q7WT5IIF.mjs.map +0 -1
  139. package/dist/chunk-S3EDPCYT.js +0 -3
  140. package/dist/chunk-S3EDPCYT.js.map +0 -1
  141. package/dist/chunk-WOHSSPKD.js +0 -2
  142. package/dist/chunk-WOHSSPKD.js.map +0 -1
  143. package/dist/effect-3LUCHSAZ.mjs +0 -2
  144. package/dist/effect-K45UU3N4.js +0 -2
  145. package/dist/signal-2QUI7H7B.js +0 -2
  146. package/dist/signal-2QUI7H7B.js.map +0 -1
  147. package/dist/signal-C6936A3J.d.cts +0 -175
  148. package/dist/signal-C6936A3J.d.ts +0 -175
  149. package/dist/signal-L3ZWGOVT.mjs +0 -2
  150. package/dist/signal-L3ZWGOVT.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/primitives/ui/Button.ts"],"names":["Button","props","type","variant","size","disabled","loading","fullWidth","children","leftIcon","rightIcon","loadingText","className","style","id","role","ariaLabel","ariaDescribedby","ariaExpanded","ariaPressed","ariaControls","onPress","onPressStart","onPressEnd","onFocus","onBlur","onKeyDown","classes","buttonProps","button","disabledSignal","SignalNode","loadingSignal","contentWrapper","loadingSpinner","textContent","effect","val","isPressing","handlePointerDown","e","handlePointerUp","handleClick","error","logError","ErrorCodes","handleKeyDown","handleKeyUp","handlePointerCancel","onCleanup","buttonChildren","f","IconButton","icon","logWarning"],"mappings":"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","file":"ui.mjs","sourcesContent":["/**\n * Button Component - Accessible button with unified touch/click handler\n *\n * Provides onPress handler that works consistently across mouse, touch, and keyboard\n * Includes full ARIA support and style props\n */\n\nimport { SignalNode, onCleanup, type Signal } from '../../core/signal'\nimport { effect } from '../../core/effect'\nimport { ErrorCodes, logError, logWarning } from '../../core/errors'\nimport { f } from '../../renderers/dom/f'\nimport type { FNode } from '../../core/renderer'\n\n/**\n * Button variants\n */\nexport type ButtonVariant =\n | 'primary'\n | 'secondary'\n | 'outline'\n | 'ghost'\n | 'danger'\n\n/**\n * Button sizes\n */\nexport type ButtonSize = 'sm' | 'md' | 'lg'\n\n/**\n * Button type attribute\n */\nexport type ButtonType = 'button' | 'submit' | 'reset'\n\n/**\n * Button component props\n */\nexport interface ButtonProps {\n type?: ButtonType\n variant?: ButtonVariant\n size?: ButtonSize\n disabled?: Signal<boolean> | SignalNode<boolean> | boolean\n loading?: Signal<boolean> | SignalNode<boolean> | boolean\n fullWidth?: boolean\n\n // Content\n children?: any\n leftIcon?: any\n rightIcon?: any\n loadingText?: string\n\n // Styling\n className?: string\n style?: Partial<CSSStyleDeclaration>\n\n // Accessibility\n id?: string\n role?: string\n ariaLabel?: string\n ariaDescribedby?: string\n ariaExpanded?: boolean\n ariaPressed?: boolean\n ariaControls?: string\n\n // Event handlers\n onPress?: (event: Event) => void | Promise<void>\n onPressStart?: (event: PointerEvent) => void\n onPressEnd?: (event: PointerEvent) => void\n onFocus?: (event: FocusEvent) => void\n onBlur?: (event: FocusEvent) => void\n onKeyDown?: (event: KeyboardEvent) => void\n}\n\n/**\n * Button component - Accessible button with unified touch/click handler\n *\n * @example\n * ```tsx\n * <Button variant=\"primary\" onPress={() => console.log('clicked')}>\n * Click me\n * </Button>\n *\n * const loading = signal(false)\n * <Button loading={loading} loadingText=\"Saving...\">\n * Save\n * </Button>\n * ```\n */\nexport function Button(props: ButtonProps): FNode {\n const {\n type = 'button',\n variant = 'primary',\n size = 'md',\n disabled = false,\n loading = false,\n fullWidth = false,\n children,\n leftIcon,\n rightIcon,\n loadingText = 'Loading...',\n className = '',\n style,\n id,\n role,\n ariaLabel,\n ariaDescribedby,\n ariaExpanded,\n ariaPressed,\n ariaControls,\n onPress,\n onPressStart,\n onPressEnd,\n onFocus,\n onBlur,\n onKeyDown,\n } = props\n\n // Build class names\n const classes = ['button', `button-${variant}`, `button-${size}`]\n if (fullWidth) classes.push('button-full-width')\n if (className) classes.push(className)\n\n // Build props for the button element\n const buttonProps: Record<string, any> = {\n type,\n class: classes.join(' '),\n style,\n }\n\n if (id) buttonProps.id = id\n if (role) buttonProps.role = role\n if (ariaLabel) buttonProps['aria-label'] = ariaLabel\n if (ariaDescribedby) buttonProps['aria-describedby'] = ariaDescribedby\n if (ariaExpanded !== undefined) buttonProps['aria-expanded'] = ariaExpanded\n if (ariaPressed !== undefined) buttonProps['aria-pressed'] = ariaPressed\n if (ariaControls) buttonProps['aria-controls'] = ariaControls\n\n // Add ref callback to set up reactive behavior\n buttonProps.ref = (button: HTMLButtonElement | null) => {\n if (!button) return\n\n // Convert disabled/loading to signals if needed\n // Safety: we normalize to an object with .value property (both Signal and SignalNode have it now)\n const disabledSignal =\n typeof disabled === 'boolean' ? new SignalNode(disabled) : disabled\n const loadingSignal = typeof loading === 'boolean' ? new SignalNode(loading) : loading\n\n // Find content elements after mount\n const contentWrapper = button.querySelector('.button-content') as HTMLElement\n const loadingSpinner = button.querySelector('.button-spinner') as HTMLElement\n const textContent = button.querySelector('.button-text') as HTMLElement\n\n // Handle disabled state\n effect(() => {\n const val = disabledSignal.value // Works for SignalNode and Signal(Proxy)\n button.disabled = val\n if (val) {\n button.setAttribute('aria-disabled', 'true')\n } else {\n button.removeAttribute('aria-disabled')\n }\n })\n\n // Handle loading state\n effect(() => {\n const isLoading = loadingSignal.value\n\n if (isLoading) {\n // Show spinner\n if (loadingSpinner) loadingSpinner.style.display = 'inline-block'\n if (contentWrapper) contentWrapper.style.visibility = 'hidden'\n\n // Update text for screen readers\n if (loadingText && textContent) {\n textContent.textContent = loadingText\n }\n\n // Disable button during loading\n button.disabled = true\n button.setAttribute('aria-busy', 'true')\n } else {\n // Hide spinner\n if (loadingSpinner) loadingSpinner.style.display = 'none'\n if (contentWrapper) contentWrapper.style.visibility = 'visible'\n\n // Restore original text\n if (typeof children === 'string' && textContent) {\n textContent.textContent = children\n }\n\n button.removeAttribute('aria-busy')\n }\n })\n\n // Unified press handler (works for mouse, touch, and keyboard)\n if (onPress) {\n let isPressing = false\n\n // Pointer down (mouse/touch start)\n const handlePointerDown = (e: PointerEvent) => {\n if (button.disabled) return\n\n isPressing = true\n button.classList.add('button-pressed')\n\n if (onPressStart) {\n onPressStart(e)\n }\n }\n\n // Pointer up (mouse/touch end)\n const handlePointerUp = (e: PointerEvent) => {\n if (!isPressing) return\n\n isPressing = false\n button.classList.remove('button-pressed')\n\n if (onPressEnd) {\n onPressEnd(e)\n }\n }\n\n // Click (fires after pointer up)\n const handleClick = async (e: Event) => {\n if (button.disabled) {\n e.preventDefault()\n return\n }\n\n try {\n await onPress(e)\n } catch (error) {\n logError(ErrorCodes.BUTTON_HANDLER_FAILED, undefined, error)\n }\n }\n\n // Keyboard (Enter/Space)\n const handleKeyDown = (e: KeyboardEvent) => {\n if (button.disabled) return\n\n // Enter or Space triggers press\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n isPressing = true\n button.classList.add('button-pressed')\n\n if (onPressStart) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onPressStart(e as any)\n }\n }\n\n // Custom keydown handler\n if (onKeyDown) {\n onKeyDown(e)\n }\n }\n\n const handleKeyUp = (e: KeyboardEvent) => {\n if (button.disabled) return\n\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n isPressing = false\n button.classList.remove('button-pressed')\n\n if (onPressEnd) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onPressEnd(e as any)\n }\n\n // Trigger press\n handleClick(e)\n }\n }\n\n // Pointer cancel (touch interrupted)\n const handlePointerCancel = () => {\n isPressing = false\n button.classList.remove('button-pressed')\n }\n\n button.addEventListener('pointerdown', handlePointerDown)\n button.addEventListener('pointerup', handlePointerUp)\n button.addEventListener('click', handleClick)\n button.addEventListener('keydown', handleKeyDown)\n button.addEventListener('keyup', handleKeyUp)\n button.addEventListener('pointercancel', handlePointerCancel)\n\n onCleanup(() => {\n button.removeEventListener('pointerdown', handlePointerDown)\n button.removeEventListener('pointerup', handlePointerUp)\n button.removeEventListener('click', handleClick)\n button.removeEventListener('keydown', handleKeyDown)\n button.removeEventListener('keyup', handleKeyUp)\n button.removeEventListener('pointercancel', handlePointerCancel)\n })\n }\n\n // Focus/blur handlers\n if (onFocus) {\n button.addEventListener('focus', onFocus)\n onCleanup(() => button.removeEventListener('focus', onFocus))\n }\n\n if (onBlur) {\n button.addEventListener('blur', onBlur)\n onCleanup(() => button.removeEventListener('blur', onBlur))\n }\n }\n\n // Build button content structure\n const buttonChildren = [\n // Loading spinner\n f('span', {\n class: 'button-spinner',\n 'aria-hidden': 'true',\n style: { display: 'none' },\n }),\n // Content wrapper with icons and text\n f(\n 'span',\n { class: 'button-content' },\n [\n leftIcon && f('span', { class: 'button-icon button-icon-left' }, leftIcon),\n f('span', { class: 'button-text' }, children),\n rightIcon &&\n f('span', { class: 'button-icon button-icon-right' }, rightIcon),\n ].filter(Boolean)\n ),\n ]\n\n return f('button', buttonProps, buttonChildren)\n}\n\n/**\n * IconButton component - Button with only an icon\n *\n * @example\n * ```tsx\n * <IconButton icon={<i class=\"icon-close\" />} ariaLabel=\"Close\" onPress={handleClose} />\n * ```\n */\nexport function IconButton(props: ButtonProps & { icon: any }): FNode {\n const { icon, ariaLabel, className, ...buttonProps } = props\n\n if (!ariaLabel) {\n logWarning(ErrorCodes.BUTTON_MISSING_ARIA_LABEL)\n }\n\n return Button({\n ...buttonProps,\n children: icon,\n ariaLabel,\n className: `icon-button ${className || ''}`,\n })\n}\n"]}
1
+ {"version":3,"sources":["../../src/primitives/ui/Button.ts"],"names":["Button","props","type","variant","size","disabled","loading","fullWidth","children","leftIcon","rightIcon","loadingText","className","style","id","role","ariaLabel","ariaDescribedby","ariaExpanded","ariaPressed","ariaControls","onPress","onPressStart","onPressEnd","onFocus","onBlur","onKeyDown","classes","buttonProps","button","disabledSignal","state","loadingSignal","contentWrapper","loadingSpinner","textContent","effect","val","isPressing","handlePointerDown","e","handlePointerUp","handleClick","error","logError","ErrorCodes","handleKeyDown","handleKeyUp","handlePointerCancel","onCleanup","buttonChildren","f","IconButton","icon","logWarning"],"mappings":"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","file":"ui.mjs","sourcesContent":["/**\n * Button Component - Accessible button with unified touch/click handler\n *\n * Provides onPress handler that works consistently across mouse, touch, and keyboard\n * Includes full ARIA support and style props\n */\n\nimport { state, type StateValue } from '../../core/state'\nimport { onCleanup } from '../../core/effect'\nimport { effect } from '../../core/effect'\nimport { ErrorCodes, logError, logWarning } from '../../core/errors'\nimport { f } from '../../renderers/dom/f'\nimport type { FNode } from '../../core/renderer'\n\n/**\n * Button variants\n */\nexport type ButtonVariant =\n | 'primary'\n | 'secondary'\n | 'outline'\n | 'ghost'\n | 'danger'\n\n/**\n * Button sizes\n */\nexport type ButtonSize = 'sm' | 'md' | 'lg'\n\n/**\n * Button type attribute\n */\nexport type ButtonType = 'button' | 'submit' | 'reset'\n\n/**\n * Button component props\n */\nexport interface ButtonProps {\n type?: ButtonType\n variant?: ButtonVariant\n size?: ButtonSize\n disabled?: StateValue<boolean> | boolean\n loading?: StateValue<boolean> | boolean\n fullWidth?: boolean\n\n // Content\n children?: any\n leftIcon?: any\n rightIcon?: any\n loadingText?: string\n\n // Styling\n className?: string\n style?: Partial<CSSStyleDeclaration>\n\n // Accessibility\n id?: string\n role?: string\n ariaLabel?: string\n ariaDescribedby?: string\n ariaExpanded?: boolean\n ariaPressed?: boolean\n ariaControls?: string\n\n // Event handlers\n onPress?: (event: Event) => void | Promise<void>\n onPressStart?: (event: PointerEvent) => void\n onPressEnd?: (event: PointerEvent) => void\n onFocus?: (event: FocusEvent) => void\n onBlur?: (event: FocusEvent) => void\n onKeyDown?: (event: KeyboardEvent) => void\n}\n\n/**\n * Button component - Accessible button with unified touch/click handler\n *\n * @example\n * ```tsx\n * <Button variant=\"primary\" onPress={() => console.log('clicked')}>\n * Click me\n * </Button>\n *\n * const loading = signal(false)\n * <Button loading={loading} loadingText=\"Saving...\">\n * Save\n * </Button>\n * ```\n */\nexport function Button(props: ButtonProps): FNode {\n const {\n type = 'button',\n variant = 'primary',\n size = 'md',\n disabled = false,\n loading = false,\n fullWidth = false,\n children,\n leftIcon,\n rightIcon,\n loadingText = 'Loading...',\n className = '',\n style,\n id,\n role,\n ariaLabel,\n ariaDescribedby,\n ariaExpanded,\n ariaPressed,\n ariaControls,\n onPress,\n onPressStart,\n onPressEnd,\n onFocus,\n onBlur,\n onKeyDown,\n } = props\n\n // Build class names\n const classes = ['button', `button-${variant}`, `button-${size}`]\n if (fullWidth) classes.push('button-full-width')\n if (className) classes.push(className)\n\n // Build props for the button element\n const buttonProps: Record<string, any> = {\n type,\n class: classes.join(' '),\n style,\n }\n\n if (id) buttonProps.id = id\n if (role) buttonProps.role = role\n if (ariaLabel) buttonProps['aria-label'] = ariaLabel\n if (ariaDescribedby) buttonProps['aria-describedby'] = ariaDescribedby\n if (ariaExpanded !== undefined) buttonProps['aria-expanded'] = ariaExpanded\n if (ariaPressed !== undefined) buttonProps['aria-pressed'] = ariaPressed\n if (ariaControls) buttonProps['aria-controls'] = ariaControls\n\n // Add ref callback to set up reactive behavior\n buttonProps.ref = (button: HTMLButtonElement | null) => {\n if (!button) return\n\n // Convert disabled/loading to signals if needed\n const disabledSignal: StateValue<boolean> | boolean =\n typeof disabled === 'boolean' ? state(disabled)[0] : disabled\n const loadingSignal: StateValue<boolean> | boolean =\n typeof loading === 'boolean' ? state(loading)[0] : loading\n\n // Find content elements after mount\n const contentWrapper = button.querySelector('.button-content') as HTMLElement\n const loadingSpinner = button.querySelector('.button-spinner') as HTMLElement\n const textContent = button.querySelector('.button-text') as HTMLElement\n\n // Handle disabled state\n effect(() => {\n const val = typeof disabledSignal === 'function' ? (disabledSignal as StateValue<boolean>)() : disabledSignal\n button.disabled = val\n if (val) {\n button.setAttribute('aria-disabled', 'true')\n } else {\n button.removeAttribute('aria-disabled')\n }\n })\n\n // Handle loading state\n effect(() => {\n const isLoading = typeof loadingSignal === 'function' ? (loadingSignal as StateValue<boolean>)() : loadingSignal\n\n if (isLoading) {\n // Show spinner\n if (loadingSpinner) loadingSpinner.style.display = 'inline-block'\n if (contentWrapper) contentWrapper.style.visibility = 'hidden'\n\n // Update text for screen readers\n if (loadingText && textContent) {\n textContent.textContent = loadingText\n }\n\n // Disable button during loading\n button.disabled = true\n button.setAttribute('aria-busy', 'true')\n } else {\n // Hide spinner\n if (loadingSpinner) loadingSpinner.style.display = 'none'\n if (contentWrapper) contentWrapper.style.visibility = 'visible'\n\n // Restore original text\n if (typeof children === 'string' && textContent) {\n textContent.textContent = children\n }\n\n button.removeAttribute('aria-busy')\n }\n })\n\n // Unified press handler (works for mouse, touch, and keyboard)\n if (onPress) {\n let isPressing = false\n\n // Pointer down (mouse/touch start)\n const handlePointerDown = (e: PointerEvent) => {\n if (button.disabled) return\n\n isPressing = true\n button.classList.add('button-pressed')\n\n if (onPressStart) {\n onPressStart(e)\n }\n }\n\n // Pointer up (mouse/touch end)\n const handlePointerUp = (e: PointerEvent) => {\n if (!isPressing) return\n\n isPressing = false\n button.classList.remove('button-pressed')\n\n if (onPressEnd) {\n onPressEnd(e)\n }\n }\n\n // Click (fires after pointer up)\n const handleClick = async (e: Event) => {\n if (button.disabled) {\n e.preventDefault()\n return\n }\n\n try {\n await onPress(e)\n } catch (error) {\n logError(ErrorCodes.BUTTON_HANDLER_FAILED, undefined, error)\n }\n }\n\n // Keyboard (Enter/Space)\n const handleKeyDown = (e: KeyboardEvent) => {\n if (button.disabled) return\n\n // Enter or Space triggers press\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n isPressing = true\n button.classList.add('button-pressed')\n\n if (onPressStart) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onPressStart(e as any)\n }\n }\n\n // Custom keydown handler\n if (onKeyDown) {\n onKeyDown(e)\n }\n }\n\n const handleKeyUp = (e: KeyboardEvent) => {\n if (button.disabled) return\n\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n isPressing = false\n button.classList.remove('button-pressed')\n\n if (onPressEnd) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onPressEnd(e as any)\n }\n\n // Trigger press\n handleClick(e)\n }\n }\n\n // Pointer cancel (touch interrupted)\n const handlePointerCancel = () => {\n isPressing = false\n button.classList.remove('button-pressed')\n }\n\n button.addEventListener('pointerdown', handlePointerDown)\n button.addEventListener('pointerup', handlePointerUp)\n button.addEventListener('click', handleClick)\n button.addEventListener('keydown', handleKeyDown)\n button.addEventListener('keyup', handleKeyUp)\n button.addEventListener('pointercancel', handlePointerCancel)\n\n onCleanup(() => {\n button.removeEventListener('pointerdown', handlePointerDown)\n button.removeEventListener('pointerup', handlePointerUp)\n button.removeEventListener('click', handleClick)\n button.removeEventListener('keydown', handleKeyDown)\n button.removeEventListener('keyup', handleKeyUp)\n button.removeEventListener('pointercancel', handlePointerCancel)\n })\n }\n\n // Focus/blur handlers\n if (onFocus) {\n button.addEventListener('focus', onFocus)\n onCleanup(() => button.removeEventListener('focus', onFocus))\n }\n\n if (onBlur) {\n button.addEventListener('blur', onBlur)\n onCleanup(() => button.removeEventListener('blur', onBlur))\n }\n }\n\n // Build button content structure\n const buttonChildren = [\n // Loading spinner\n f('span', {\n class: 'button-spinner',\n 'aria-hidden': 'true',\n style: { display: 'none' },\n }),\n // Content wrapper with icons and text\n f(\n 'span',\n { class: 'button-content' },\n [\n leftIcon && f('span', { class: 'button-icon button-icon-left' }, leftIcon),\n f('span', { class: 'button-text' }, children),\n rightIcon &&\n f('span', { class: 'button-icon button-icon-right' }, rightIcon),\n ].filter(Boolean)\n ),\n ]\n\n return f('button', buttonProps, buttonChildren)\n}\n\n/**\n * IconButton component - Button with only an icon\n *\n * @example\n * ```tsx\n * <IconButton icon={<i class=\"icon-close\" />} ariaLabel=\"Close\" onPress={handleClose} />\n * ```\n */\nexport function IconButton(props: ButtonProps & { icon: any }): FNode {\n const { icon, ariaLabel, className, ...buttonProps } = props\n\n if (!ariaLabel) {\n logWarning(ErrorCodes.BUTTON_MISSING_ARIA_LABEL)\n }\n\n return Button({\n ...buttonProps,\n children: icon,\n ariaLabel,\n className: `icon-button ${className || ''}`,\n })\n}\n"]}
@@ -1,11 +1,10 @@
1
- export { e as effect } from './effect-14CxUU8r.cjs';
1
+ export { e as effect } from './core-CxHP8991.cjs';
2
2
  export { r as root } from './owner-QS9tPwPr.cjs';
3
- export { state } from './core.cjs';
3
+ export { s as state } from './state-DitsMyev.cjs';
4
4
  export { CommonStyle as BaseStyleProps, Column, ColumnProps, CommonStyle, Grid, GridProps, Row, RowProps, Spacer, SpacerProps, Stack, StackProps } from './primitives/layout.cjs';
5
- import { T as TextProps, F as FNode, I as ImageProps, P as PressableProps, S as ScrollViewProps, m as CommonStyle, n as TextStyle } from './DrawText-ccZrs3Xs.cjs';
6
- export { C as Canvas, f as CanvasProps, b as DrawArc, i as DrawArcProps, a as DrawCircle, h as DrawCircleProps, c as DrawLine, j as DrawLineProps, d as DrawPath, k as DrawPathProps, D as DrawRect, g as DrawRectProps, e as DrawText, l as DrawTextProps } from './DrawText-ccZrs3Xs.cjs';
5
+ import { T as TextProps, F as FNode, I as ImageProps, P as PressableProps, S as ScrollViewProps, m as CommonStyle, n as TextStyle } from './DrawText-CVAKQ5wZ.cjs';
6
+ export { C as Canvas, f as CanvasProps, b as DrawArc, i as DrawArcProps, a as DrawCircle, h as DrawCircleProps, c as DrawLine, j as DrawLineProps, d as DrawPath, k as DrawPathProps, D as DrawRect, g as DrawRectProps, e as DrawText, l as DrawTextProps } from './DrawText-CVAKQ5wZ.cjs';
7
7
  import './renderer-DSLb-FGg.cjs';
8
- import './signal-C6936A3J.cjs';
9
8
 
10
9
  /**
11
10
  * Text - Universal text display component
@@ -1,11 +1,10 @@
1
- export { e as effect } from './effect-14CxUU8r.js';
1
+ export { e as effect } from './core-D0ggvjX3.js';
2
2
  export { r as root } from './owner-QS9tPwPr.js';
3
- export { state } from './core.js';
3
+ export { s as state } from './state-DitsMyev.js';
4
4
  export { CommonStyle as BaseStyleProps, Column, ColumnProps, CommonStyle, Grid, GridProps, Row, RowProps, Spacer, SpacerProps, Stack, StackProps } from './primitives/layout.js';
5
- import { T as TextProps, F as FNode, I as ImageProps, P as PressableProps, S as ScrollViewProps, m as CommonStyle, n as TextStyle } from './DrawText-ngwNNh8O.js';
6
- export { C as Canvas, f as CanvasProps, b as DrawArc, i as DrawArcProps, a as DrawCircle, h as DrawCircleProps, c as DrawLine, j as DrawLineProps, d as DrawPath, k as DrawPathProps, D as DrawRect, g as DrawRectProps, e as DrawText, l as DrawTextProps } from './DrawText-ngwNNh8O.js';
5
+ import { T as TextProps, F as FNode, I as ImageProps, P as PressableProps, S as ScrollViewProps, m as CommonStyle, n as TextStyle } from './DrawText-Dlh1L1Ar.js';
6
+ export { C as Canvas, f as CanvasProps, b as DrawArc, i as DrawArcProps, a as DrawCircle, h as DrawCircleProps, c as DrawLine, j as DrawLineProps, d as DrawPath, k as DrawPathProps, D as DrawRect, g as DrawRectProps, e as DrawText, l as DrawTextProps } from './DrawText-Dlh1L1Ar.js';
7
7
  import './renderer-DSLb-FGg.js';
8
- import './signal-C6936A3J.js';
9
8
 
10
9
  /**
11
10
  * Text - Universal text display component
@@ -1,2 +1,2 @@
1
- 'use strict';var chunkYDZ37ZZ4_js=require('./chunk-YDZ37ZZ4.js'),chunk3AWR7IKE_js=require('./chunk-3AWR7IKE.js'),chunkWOHSSPKD_js=require('./chunk-WOHSSPKD.js');require('./chunk-Q7IWDVJ4.js'),require('./chunk-WQFQO5LK.js'),require('./chunk-5236IK5I.js');var chunkAJT35P3Z_js=require('./chunk-AJT35P3Z.js');function A(s){let{children:r,style:a,onPress:e,class:p,...o}=s;return {type:"span",props:{...o,class:p,style:chunkWOHSSPKD_js.a(a),onclick:e},children:Array.isArray(r)?r:r?[r]:[]}}function N(s){let{src:r,alt:a,width:e,height:p,style:o,onLoad:n,onError:i,...l}=s,m={...o,width:e||o?.width,height:p||o?.height};return {type:"img",props:{...l,src:r,alt:a||"",style:chunkWOHSSPKD_js.a(m),onload:n,onerror:i},children:[]}}function T(s){let{children:r,onPress:a,onPressIn:e,onPressOut:p,disabled:o,style:n,activeOpacity:i=.7,...l}=s,m={...n,cursor:o?"not-allowed":"pointer",opacity:o?.5:n?.opacity,border:"none",background:"none",padding:0};return {type:"button",props:{...l,disabled:o,style:chunkWOHSSPKD_js.a(m),onclick:o?void 0:a,onmousedown:e,onmouseup:p,ontouchstart:e,ontouchend:p},children:Array.isArray(r)?r:r?[r]:[]}}function F(s){let{children:r,style:a,horizontal:e=false,showScrollbarX:p=true,showScrollbarY:o=true,...n}=s,i={...a,overflowX:e?"auto":"hidden",overflowY:e?"hidden":"auto",display:"flex",flexDirection:e?"row":"column"};return (!p||!o)&&(i.scrollbarWidth="none"),{type:"div",props:{...n,style:chunkWOHSSPKD_js.a(i)},children:Array.isArray(r)?r:r?[r]:[]}}Object.defineProperty(exports,"Column",{enumerable:true,get:function(){return chunkYDZ37ZZ4_js.h}});Object.defineProperty(exports,"Grid",{enumerable:true,get:function(){return chunkYDZ37ZZ4_js.j}});Object.defineProperty(exports,"Row",{enumerable:true,get:function(){return chunkYDZ37ZZ4_js.g}});Object.defineProperty(exports,"Spacer",{enumerable:true,get:function(){return chunkYDZ37ZZ4_js.i}});Object.defineProperty(exports,"Stack",{enumerable:true,get:function(){return chunkYDZ37ZZ4_js.k}});Object.defineProperty(exports,"state",{enumerable:true,get:function(){return chunk3AWR7IKE_js.h}});Object.defineProperty(exports,"Canvas",{enumerable:true,get:function(){return chunkWOHSSPKD_js.d}});Object.defineProperty(exports,"DrawArc",{enumerable:true,get:function(){return chunkWOHSSPKD_js.g}});Object.defineProperty(exports,"DrawCircle",{enumerable:true,get:function(){return chunkWOHSSPKD_js.f}});Object.defineProperty(exports,"DrawLine",{enumerable:true,get:function(){return chunkWOHSSPKD_js.h}});Object.defineProperty(exports,"DrawPath",{enumerable:true,get:function(){return chunkWOHSSPKD_js.i}});Object.defineProperty(exports,"DrawRect",{enumerable:true,get:function(){return chunkWOHSSPKD_js.e}});Object.defineProperty(exports,"DrawText",{enumerable:true,get:function(){return chunkWOHSSPKD_js.j}});Object.defineProperty(exports,"normalizeStyle",{enumerable:true,get:function(){return chunkWOHSSPKD_js.a}});Object.defineProperty(exports,"effect",{enumerable:true,get:function(){return chunkAJT35P3Z_js.k}});Object.defineProperty(exports,"root",{enumerable:true,get:function(){return chunkAJT35P3Z_js.i}});exports.Image=N;exports.Pressable=T;exports.ScrollView=F;exports.Text=A;//# sourceMappingURL=primitives.js.map
1
+ 'use strict';var chunkYDZ37ZZ4_js=require('./chunk-YDZ37ZZ4.js'),chunkQPCIDSMM_js=require('./chunk-QPCIDSMM.js'),chunkXJHWMHKF_js=require('./chunk-XJHWMHKF.js');require('./chunk-YPVRQKMW.js'),require('./chunk-Q7IWDVJ4.js'),require('./chunk-WQFQO5LK.js');var chunkWWEWRI6S_js=require('./chunk-WWEWRI6S.js'),chunkGYDP6MFV_js=require('./chunk-GYDP6MFV.js');function A(s){let{children:r,style:a,onPress:e,class:p,...o}=s;return {type:"span",props:{...o,class:p,style:chunkQPCIDSMM_js.a(a),onclick:e},children:Array.isArray(r)?r:r?[r]:[]}}function N(s){let{src:r,alt:a,width:e,height:p,style:o,onLoad:n,onError:i,...l}=s,m={...o,width:e||o?.width,height:p||o?.height};return {type:"img",props:{...l,src:r,alt:a||"",style:chunkQPCIDSMM_js.a(m),onload:n,onerror:i},children:[]}}function T(s){let{children:r,onPress:a,onPressIn:e,onPressOut:p,disabled:o,style:n,activeOpacity:i=.7,...l}=s,m={...n,cursor:o?"not-allowed":"pointer",opacity:o?.5:n?.opacity,border:"none",background:"none",padding:0};return {type:"button",props:{...l,disabled:o,style:chunkQPCIDSMM_js.a(m),onclick:o?void 0:a,onmousedown:e,onmouseup:p,ontouchstart:e,ontouchend:p},children:Array.isArray(r)?r:r?[r]:[]}}function F(s){let{children:r,style:a,horizontal:e=false,showScrollbarX:p=true,showScrollbarY:o=true,...n}=s,i={...a,overflowX:e?"auto":"hidden",overflowY:e?"hidden":"auto",display:"flex",flexDirection:e?"row":"column"};return (!p||!o)&&(i.scrollbarWidth="none"),{type:"div",props:{...n,style:chunkQPCIDSMM_js.a(i)},children:Array.isArray(r)?r:r?[r]:[]}}Object.defineProperty(exports,"Column",{enumerable:true,get:function(){return chunkYDZ37ZZ4_js.h}});Object.defineProperty(exports,"Grid",{enumerable:true,get:function(){return chunkYDZ37ZZ4_js.j}});Object.defineProperty(exports,"Row",{enumerable:true,get:function(){return chunkYDZ37ZZ4_js.g}});Object.defineProperty(exports,"Spacer",{enumerable:true,get:function(){return chunkYDZ37ZZ4_js.i}});Object.defineProperty(exports,"Stack",{enumerable:true,get:function(){return chunkYDZ37ZZ4_js.k}});Object.defineProperty(exports,"Canvas",{enumerable:true,get:function(){return chunkQPCIDSMM_js.d}});Object.defineProperty(exports,"DrawArc",{enumerable:true,get:function(){return chunkQPCIDSMM_js.g}});Object.defineProperty(exports,"DrawCircle",{enumerable:true,get:function(){return chunkQPCIDSMM_js.f}});Object.defineProperty(exports,"DrawLine",{enumerable:true,get:function(){return chunkQPCIDSMM_js.h}});Object.defineProperty(exports,"DrawPath",{enumerable:true,get:function(){return chunkQPCIDSMM_js.i}});Object.defineProperty(exports,"DrawRect",{enumerable:true,get:function(){return chunkQPCIDSMM_js.e}});Object.defineProperty(exports,"DrawText",{enumerable:true,get:function(){return chunkQPCIDSMM_js.j}});Object.defineProperty(exports,"normalizeStyle",{enumerable:true,get:function(){return chunkQPCIDSMM_js.a}});Object.defineProperty(exports,"state",{enumerable:true,get:function(){return chunkXJHWMHKF_js.k}});Object.defineProperty(exports,"effect",{enumerable:true,get:function(){return chunkWWEWRI6S_js.c}});Object.defineProperty(exports,"root",{enumerable:true,get:function(){return chunkGYDP6MFV_js.i}});exports.Image=N;exports.Pressable=T;exports.ScrollView=F;exports.Text=A;//# sourceMappingURL=primitives.js.map
2
2
  //# sourceMappingURL=primitives.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/primitives/Text.ts","../src/primitives/Image.ts","../src/primitives/Pressable.ts","../src/primitives/ScrollView.ts"],"names":["Text","props","children","style","onPress","className","rest","normalizeStyle","Image","src","alt","width","height","onLoad","onError","imageStyle","Pressable","onPressIn","onPressOut","disabled","_activeOpacity","buttonStyle","ScrollView","horizontal","showScrollbarX","showScrollbarY","scrollStyle"],"mappings":"kTAmBO,SAASA,CAAAA,CAAKC,CAAAA,CAAyB,CAC5C,GAAM,CAAE,QAAA,CAAAC,CAAAA,CAAU,KAAA,CAAAC,CAAAA,CAAO,OAAA,CAAAC,CAAAA,CAAS,KAAA,CAAOC,EAAW,GAAGC,CAAK,CAAA,CAAIL,CAAAA,CAEhE,OAAO,CACL,IAAA,CAAM,MAAA,CACN,KAAA,CAAO,CACL,GAAGK,CAAAA,CACH,KAAA,CAAOD,CAAAA,CACP,KAAA,CAAOE,kBAAAA,CAAeJ,CAAK,CAAA,CAC3B,OAAA,CAASC,CACX,CAAA,CACA,QAAA,CAAU,KAAA,CAAM,OAAA,CAAQF,CAAQ,CAAA,CAAIA,CAAAA,CAAWA,CAAAA,CAAW,CAACA,CAAQ,CAAA,CAAI,EACzE,CACF,CCVO,SAASM,CAAAA,CAAMP,CAAAA,CAA0B,CAC9C,GAAM,CAAE,GAAA,CAAAQ,EAAK,GAAA,CAAAC,CAAAA,CAAK,KAAA,CAAAC,CAAAA,CAAO,MAAA,CAAAC,CAAAA,CAAQ,KAAA,CAAAT,CAAAA,CAAO,OAAAU,CAAAA,CAAQ,OAAA,CAAAC,CAAAA,CAAS,GAAGR,CAAK,CAAA,CAAIL,CAAAA,CAE/Dc,CAAAA,CAAa,CACjB,GAAGZ,CAAAA,CACH,KAAA,CAAOQ,CAAAA,EAASR,CAAAA,EAAO,KAAA,CACvB,MAAA,CAAQS,GAAUT,CAAAA,EAAO,MAC3B,CAAA,CAEA,OAAO,CACL,IAAA,CAAM,KAAA,CACN,KAAA,CAAO,CACL,GAAGG,CAAAA,CACH,GAAA,CAAAG,CAAAA,CACA,GAAA,CAAKC,CAAAA,EAAO,EAAA,CACZ,MAAOH,kBAAAA,CAAeQ,CAAU,CAAA,CAChC,MAAA,CAAQF,CAAAA,CACR,OAAA,CAASC,CACX,CAAA,CACA,QAAA,CAAU,EACZ,CACF,CCrBO,SAASE,CAAAA,CAAUf,CAAAA,CAA8B,CACtD,GAAM,CACJ,QAAA,CAAAC,CAAAA,CACA,OAAA,CAAAE,CAAAA,CACA,SAAA,CAAAa,CAAAA,CACA,WAAAC,CAAAA,CACA,QAAA,CAAAC,CAAAA,CACA,KAAA,CAAAhB,CAAAA,CACA,aAAA,CAAeiB,CAAAA,CAAiB,EAAA,CAChC,GAAGd,CACL,CAAA,CAAIL,CAAAA,CAEEoB,CAAAA,CAAc,CAClB,GAAGlB,CAAAA,CACH,MAAA,CAAQgB,CAAAA,CAAW,aAAA,CAAgB,SAAA,CACnC,OAAA,CAASA,CAAAA,CAAW,EAAA,CAAMhB,CAAAA,EAAO,OAAA,CACjC,OAAQ,MAAA,CACR,UAAA,CAAY,MAAA,CACZ,OAAA,CAAS,CACX,CAAA,CAEA,OAAO,CACL,IAAA,CAAM,QAAA,CACN,KAAA,CAAO,CACL,GAAGG,CAAAA,CACH,QAAA,CAAAa,CAAAA,CACA,MAAOZ,kBAAAA,CAAec,CAAW,CAAA,CACjC,OAAA,CAASF,CAAAA,CAAW,MAAA,CAAYf,CAAAA,CAChC,WAAA,CAAaa,CAAAA,CACb,SAAA,CAAWC,CAAAA,CACX,YAAA,CAAcD,CAAAA,CACd,UAAA,CAAYC,CACd,CAAA,CACA,SAAU,KAAA,CAAM,OAAA,CAAQhB,CAAQ,CAAA,CAAIA,CAAAA,CAAWA,CAAAA,CAAW,CAACA,CAAQ,EAAI,EACzE,CACF,CCrCO,SAASoB,CAAAA,CAAWrB,CAAAA,CAA+B,CACxD,GAAM,CACJ,QAAA,CAAAC,CAAAA,CACA,KAAA,CAAAC,CAAAA,CACA,UAAA,CAAAoB,CAAAA,CAAa,KAAA,CACb,cAAA,CAAAC,CAAAA,CAAiB,IAAA,CACjB,cAAA,CAAAC,CAAAA,CAAiB,IAAA,CACjB,GAAGnB,CACL,EAAIL,CAAAA,CAEEyB,CAAAA,CAAuC,CAC3C,GAAGvB,CAAAA,CACH,SAAA,CAAWoB,CAAAA,CAAa,MAAA,CAAS,QAAA,CACjC,SAAA,CAAWA,CAAAA,CAAa,QAAA,CAAW,MAAA,CACnC,OAAA,CAAS,MAAA,CACT,aAAA,CAAeA,EAAa,KAAA,CAAQ,QACtC,CAAA,CAGA,OAAA,CAAI,CAACC,CAAAA,EAAkB,CAACC,CAAAA,IACtBC,CAAAA,CAAY,cAAA,CAAiB,MAAA,CAAA,CAGxB,CACL,IAAA,CAAM,KAAA,CACN,KAAA,CAAO,CACL,GAAGpB,CAAAA,CACH,KAAA,CAAOC,kBAAAA,CAAemB,CAAmD,CAC3E,CAAA,CACA,QAAA,CAAU,KAAA,CAAM,QAAQxB,CAAQ,CAAA,CAAIA,CAAAA,CAAWA,CAAAA,CAAW,CAACA,CAAQ,CAAA,CAAI,EACzE,CACF","file":"primitives.js","sourcesContent":["/**\n * Text - Universal text display component\n *\n * Maps to:\n * - Web: <span>\n * - React Native: <Text>\n *\n * @example\n * ```tsx\n * <Text style={{ color: 'blue', fontSize: 16 }}>\n * Hello World\n * </Text>\n * ```\n */\n\nimport type { FNode } from '../types'\nimport type { TextProps } from './types'\nimport { normalizeStyle } from './utils'\n\nexport function Text(props: TextProps): FNode {\n const { children, style, onPress, class: className, ...rest } = props\n\n return {\n type: 'span',\n props: {\n ...rest,\n class: className,\n style: normalizeStyle(style),\n onclick: onPress,\n },\n children: Array.isArray(children) ? children : children ? [children] : [],\n }\n}\n","/**\n * Image - Universal image component\n *\n * Maps to:\n * - Web: <img>\n * - React Native: <Image>\n *\n * @example\n * ```tsx\n * <Image\n * src=\"/logo.png\"\n * alt=\"Logo\"\n * width={100}\n * height={100}\n * />\n * ```\n */\n\nimport type { FNode } from '../types'\nimport type { ImageProps } from './types'\nimport { normalizeStyle } from './utils'\n\nexport function Image(props: ImageProps): FNode {\n const { src, alt, width, height, style, onLoad, onError, ...rest } = props\n\n const imageStyle = {\n ...style,\n width: width || style?.width,\n height: height || style?.height,\n }\n\n return {\n type: 'img',\n props: {\n ...rest,\n src,\n alt: alt || '',\n style: normalizeStyle(imageStyle),\n onload: onLoad,\n onerror: onError,\n },\n children: [],\n }\n}\n","/**\n * Pressable - Universal touchable/clickable component\n *\n * Maps to:\n * - Web: <button>\n * - React Native: <Pressable>\n *\n * @example\n * ```tsx\n * <Pressable\n * onPress={() => console.log('pressed')}\n * style={{ padding: 10 }}\n * >\n * <Text>Click Me</Text>\n * </Pressable>\n * ```\n */\n\nimport type { FNode } from '../types'\nimport type { PressableProps } from './types'\nimport { normalizeStyle } from './utils'\n\nexport function Pressable(props: PressableProps): FNode {\n const {\n children,\n onPress,\n onPressIn,\n onPressOut,\n disabled,\n style,\n activeOpacity: _activeOpacity = 0.7,\n ...rest\n } = props\n\n const buttonStyle = {\n ...style,\n cursor: disabled ? 'not-allowed' : 'pointer',\n opacity: disabled ? 0.5 : style?.opacity,\n border: 'none',\n background: 'none',\n padding: 0,\n }\n\n return {\n type: 'button',\n props: {\n ...rest,\n disabled,\n style: normalizeStyle(buttonStyle),\n onclick: disabled ? undefined : onPress,\n onmousedown: onPressIn,\n onmouseup: onPressOut,\n ontouchstart: onPressIn,\n ontouchend: onPressOut,\n },\n children: Array.isArray(children) ? children : children ? [children] : [],\n }\n}\n","/**\n * ScrollView - Universal scrollable container\n *\n * Maps to:\n * - Web: <div style=\"overflow: scroll\">\n * - React Native: <ScrollView>\n *\n * @example\n * ```tsx\n * <ScrollView style={{ height: 300 }}>\n * <Column>...</Column>\n * <Column>...</Column>\n * </ScrollView>\n * ```\n */\n\nimport type { FNode } from '../types'\nimport type { ScrollViewProps } from './types'\nimport { normalizeStyle } from './utils'\n\nexport function ScrollView(props: ScrollViewProps): FNode {\n const {\n children,\n style,\n horizontal = false,\n showScrollbarX = true,\n showScrollbarY = true,\n ...rest\n } = props\n\n const scrollStyle: Record<string, unknown> = {\n ...style,\n overflowX: horizontal ? 'auto' : 'hidden',\n overflowY: horizontal ? 'hidden' : 'auto',\n display: 'flex',\n flexDirection: horizontal ? 'row' : 'column',\n }\n\n // Hide scrollbars if requested (CSS scrollbar-width for Firefox/modern browsers)\n if (!showScrollbarX || !showScrollbarY) {\n scrollStyle.scrollbarWidth = 'none'\n }\n\n return {\n type: 'div',\n props: {\n ...rest,\n style: normalizeStyle(scrollStyle as Parameters<typeof normalizeStyle>[0]),\n },\n children: Array.isArray(children) ? children : children ? [children] : [],\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/primitives/Text.ts","../src/primitives/Image.ts","../src/primitives/Pressable.ts","../src/primitives/ScrollView.ts"],"names":["Text","props","children","style","onPress","className","rest","normalizeStyle","Image","src","alt","width","height","onLoad","onError","imageStyle","Pressable","onPressIn","onPressOut","disabled","_activeOpacity","buttonStyle","ScrollView","horizontal","showScrollbarX","showScrollbarY","scrollStyle"],"mappings":"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","file":"primitives.js","sourcesContent":["/**\n * Text - Universal text display component\n *\n * Maps to:\n * - Web: <span>\n * - React Native: <Text>\n *\n * @example\n * ```tsx\n * <Text style={{ color: 'blue', fontSize: 16 }}>\n * Hello World\n * </Text>\n * ```\n */\n\nimport type { FNode } from '../types'\nimport type { TextProps } from './types'\nimport { normalizeStyle } from './utils'\n\nexport function Text(props: TextProps): FNode {\n const { children, style, onPress, class: className, ...rest } = props\n\n return {\n type: 'span',\n props: {\n ...rest,\n class: className,\n style: normalizeStyle(style),\n onclick: onPress,\n },\n children: Array.isArray(children) ? children : children ? [children] : [],\n }\n}\n","/**\n * Image - Universal image component\n *\n * Maps to:\n * - Web: <img>\n * - React Native: <Image>\n *\n * @example\n * ```tsx\n * <Image\n * src=\"/logo.png\"\n * alt=\"Logo\"\n * width={100}\n * height={100}\n * />\n * ```\n */\n\nimport type { FNode } from '../types'\nimport type { ImageProps } from './types'\nimport { normalizeStyle } from './utils'\n\nexport function Image(props: ImageProps): FNode {\n const { src, alt, width, height, style, onLoad, onError, ...rest } = props\n\n const imageStyle = {\n ...style,\n width: width || style?.width,\n height: height || style?.height,\n }\n\n return {\n type: 'img',\n props: {\n ...rest,\n src,\n alt: alt || '',\n style: normalizeStyle(imageStyle),\n onload: onLoad,\n onerror: onError,\n },\n children: [],\n }\n}\n","/**\n * Pressable - Universal touchable/clickable component\n *\n * Maps to:\n * - Web: <button>\n * - React Native: <Pressable>\n *\n * @example\n * ```tsx\n * <Pressable\n * onPress={() => console.log('pressed')}\n * style={{ padding: 10 }}\n * >\n * <Text>Click Me</Text>\n * </Pressable>\n * ```\n */\n\nimport type { FNode } from '../types'\nimport type { PressableProps } from './types'\nimport { normalizeStyle } from './utils'\n\nexport function Pressable(props: PressableProps): FNode {\n const {\n children,\n onPress,\n onPressIn,\n onPressOut,\n disabled,\n style,\n activeOpacity: _activeOpacity = 0.7,\n ...rest\n } = props\n\n const buttonStyle = {\n ...style,\n cursor: disabled ? 'not-allowed' : 'pointer',\n opacity: disabled ? 0.5 : style?.opacity,\n border: 'none',\n background: 'none',\n padding: 0,\n }\n\n return {\n type: 'button',\n props: {\n ...rest,\n disabled,\n style: normalizeStyle(buttonStyle),\n onclick: disabled ? undefined : onPress,\n onmousedown: onPressIn,\n onmouseup: onPressOut,\n ontouchstart: onPressIn,\n ontouchend: onPressOut,\n },\n children: Array.isArray(children) ? children : children ? [children] : [],\n }\n}\n","/**\n * ScrollView - Universal scrollable container\n *\n * Maps to:\n * - Web: <div style=\"overflow: scroll\">\n * - React Native: <ScrollView>\n *\n * @example\n * ```tsx\n * <ScrollView style={{ height: 300 }}>\n * <Column>...</Column>\n * <Column>...</Column>\n * </ScrollView>\n * ```\n */\n\nimport type { FNode } from '../types'\nimport type { ScrollViewProps } from './types'\nimport { normalizeStyle } from './utils'\n\nexport function ScrollView(props: ScrollViewProps): FNode {\n const {\n children,\n style,\n horizontal = false,\n showScrollbarX = true,\n showScrollbarY = true,\n ...rest\n } = props\n\n const scrollStyle: Record<string, unknown> = {\n ...style,\n overflowX: horizontal ? 'auto' : 'hidden',\n overflowY: horizontal ? 'hidden' : 'auto',\n display: 'flex',\n flexDirection: horizontal ? 'row' : 'column',\n }\n\n // Hide scrollbars if requested (CSS scrollbar-width for Firefox/modern browsers)\n if (!showScrollbarX || !showScrollbarY) {\n scrollStyle.scrollbarWidth = 'none'\n }\n\n return {\n type: 'div',\n props: {\n ...rest,\n style: normalizeStyle(scrollStyle as Parameters<typeof normalizeStyle>[0]),\n },\n children: Array.isArray(children) ? children : children ? [children] : [],\n }\n}\n"]}
@@ -1,2 +1,2 @@
1
- export{h as Column,j as Grid,g as Row,i as Spacer,k as Stack}from'./chunk-BYHIHYRR.mjs';export{h as state}from'./chunk-7Q4UE442.mjs';import {a}from'./chunk-KJPIJNFH.mjs';export{d as Canvas,g as DrawArc,f as DrawCircle,h as DrawLine,i as DrawPath,e as DrawRect,j as DrawText,a as normalizeStyle}from'./chunk-KJPIJNFH.mjs';import'./chunk-WVEJT7HD.mjs';import'./chunk-KNF5ERPK.mjs';import'./chunk-B7VP6HBY.mjs';export{k as effect,i as root}from'./chunk-Q7WT5IIF.mjs';function A(s){let{children:r,style:a$1,onPress:e,class:p,...o}=s;return {type:"span",props:{...o,class:p,style:a(a$1),onclick:e},children:Array.isArray(r)?r:r?[r]:[]}}function N(s){let{src:r,alt:a$1,width:e,height:p,style:o,onLoad:n,onError:i,...l}=s,m={...o,width:e||o?.width,height:p||o?.height};return {type:"img",props:{...l,src:r,alt:a$1||"",style:a(m),onload:n,onerror:i},children:[]}}function T(s){let{children:r,onPress:a$1,onPressIn:e,onPressOut:p,disabled:o,style:n,activeOpacity:i=.7,...l}=s,m={...n,cursor:o?"not-allowed":"pointer",opacity:o?.5:n?.opacity,border:"none",background:"none",padding:0};return {type:"button",props:{...l,disabled:o,style:a(m),onclick:o?void 0:a$1,onmousedown:e,onmouseup:p,ontouchstart:e,ontouchend:p},children:Array.isArray(r)?r:r?[r]:[]}}function F(s){let{children:r,style:a$1,horizontal:e=false,showScrollbarX:p=true,showScrollbarY:o=true,...n}=s,i={...a$1,overflowX:e?"auto":"hidden",overflowY:e?"hidden":"auto",display:"flex",flexDirection:e?"row":"column"};return (!p||!o)&&(i.scrollbarWidth="none"),{type:"div",props:{...n,style:a(i)},children:Array.isArray(r)?r:r?[r]:[]}}export{N as Image,T as Pressable,F as ScrollView,A as Text};//# sourceMappingURL=primitives.mjs.map
1
+ export{h as Column,j as Grid,g as Row,i as Spacer,k as Stack}from'./chunk-BYHIHYRR.mjs';import {a}from'./chunk-QZIX4FXS.mjs';export{d as Canvas,g as DrawArc,f as DrawCircle,h as DrawLine,i as DrawPath,e as DrawRect,j as DrawText,a as normalizeStyle}from'./chunk-QZIX4FXS.mjs';export{k as state}from'./chunk-BBNYMXE7.mjs';import'./chunk-FDMJHFN7.mjs';import'./chunk-WVEJT7HD.mjs';import'./chunk-KNF5ERPK.mjs';export{c as effect}from'./chunk-HB5VPQTB.mjs';export{i as root}from'./chunk-ECYYIQEX.mjs';function A(s){let{children:r,style:a$1,onPress:e,class:p,...o}=s;return {type:"span",props:{...o,class:p,style:a(a$1),onclick:e},children:Array.isArray(r)?r:r?[r]:[]}}function N(s){let{src:r,alt:a$1,width:e,height:p,style:o,onLoad:n,onError:i,...l}=s,m={...o,width:e||o?.width,height:p||o?.height};return {type:"img",props:{...l,src:r,alt:a$1||"",style:a(m),onload:n,onerror:i},children:[]}}function T(s){let{children:r,onPress:a$1,onPressIn:e,onPressOut:p,disabled:o,style:n,activeOpacity:i=.7,...l}=s,m={...n,cursor:o?"not-allowed":"pointer",opacity:o?.5:n?.opacity,border:"none",background:"none",padding:0};return {type:"button",props:{...l,disabled:o,style:a(m),onclick:o?void 0:a$1,onmousedown:e,onmouseup:p,ontouchstart:e,ontouchend:p},children:Array.isArray(r)?r:r?[r]:[]}}function F(s){let{children:r,style:a$1,horizontal:e=false,showScrollbarX:p=true,showScrollbarY:o=true,...n}=s,i={...a$1,overflowX:e?"auto":"hidden",overflowY:e?"hidden":"auto",display:"flex",flexDirection:e?"row":"column"};return (!p||!o)&&(i.scrollbarWidth="none"),{type:"div",props:{...n,style:a(i)},children:Array.isArray(r)?r:r?[r]:[]}}export{N as Image,T as Pressable,F as ScrollView,A as Text};//# sourceMappingURL=primitives.mjs.map
2
2
  //# sourceMappingURL=primitives.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/primitives/Text.ts","../src/primitives/Image.ts","../src/primitives/Pressable.ts","../src/primitives/ScrollView.ts"],"names":["Text","props","children","style","onPress","className","rest","normalizeStyle","Image","src","alt","width","height","onLoad","onError","imageStyle","Pressable","onPressIn","onPressOut","disabled","_activeOpacity","buttonStyle","ScrollView","horizontal","showScrollbarX","showScrollbarY","scrollStyle"],"mappings":"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","file":"primitives.mjs","sourcesContent":["/**\n * Text - Universal text display component\n *\n * Maps to:\n * - Web: <span>\n * - React Native: <Text>\n *\n * @example\n * ```tsx\n * <Text style={{ color: 'blue', fontSize: 16 }}>\n * Hello World\n * </Text>\n * ```\n */\n\nimport type { FNode } from '../types'\nimport type { TextProps } from './types'\nimport { normalizeStyle } from './utils'\n\nexport function Text(props: TextProps): FNode {\n const { children, style, onPress, class: className, ...rest } = props\n\n return {\n type: 'span',\n props: {\n ...rest,\n class: className,\n style: normalizeStyle(style),\n onclick: onPress,\n },\n children: Array.isArray(children) ? children : children ? [children] : [],\n }\n}\n","/**\n * Image - Universal image component\n *\n * Maps to:\n * - Web: <img>\n * - React Native: <Image>\n *\n * @example\n * ```tsx\n * <Image\n * src=\"/logo.png\"\n * alt=\"Logo\"\n * width={100}\n * height={100}\n * />\n * ```\n */\n\nimport type { FNode } from '../types'\nimport type { ImageProps } from './types'\nimport { normalizeStyle } from './utils'\n\nexport function Image(props: ImageProps): FNode {\n const { src, alt, width, height, style, onLoad, onError, ...rest } = props\n\n const imageStyle = {\n ...style,\n width: width || style?.width,\n height: height || style?.height,\n }\n\n return {\n type: 'img',\n props: {\n ...rest,\n src,\n alt: alt || '',\n style: normalizeStyle(imageStyle),\n onload: onLoad,\n onerror: onError,\n },\n children: [],\n }\n}\n","/**\n * Pressable - Universal touchable/clickable component\n *\n * Maps to:\n * - Web: <button>\n * - React Native: <Pressable>\n *\n * @example\n * ```tsx\n * <Pressable\n * onPress={() => console.log('pressed')}\n * style={{ padding: 10 }}\n * >\n * <Text>Click Me</Text>\n * </Pressable>\n * ```\n */\n\nimport type { FNode } from '../types'\nimport type { PressableProps } from './types'\nimport { normalizeStyle } from './utils'\n\nexport function Pressable(props: PressableProps): FNode {\n const {\n children,\n onPress,\n onPressIn,\n onPressOut,\n disabled,\n style,\n activeOpacity: _activeOpacity = 0.7,\n ...rest\n } = props\n\n const buttonStyle = {\n ...style,\n cursor: disabled ? 'not-allowed' : 'pointer',\n opacity: disabled ? 0.5 : style?.opacity,\n border: 'none',\n background: 'none',\n padding: 0,\n }\n\n return {\n type: 'button',\n props: {\n ...rest,\n disabled,\n style: normalizeStyle(buttonStyle),\n onclick: disabled ? undefined : onPress,\n onmousedown: onPressIn,\n onmouseup: onPressOut,\n ontouchstart: onPressIn,\n ontouchend: onPressOut,\n },\n children: Array.isArray(children) ? children : children ? [children] : [],\n }\n}\n","/**\n * ScrollView - Universal scrollable container\n *\n * Maps to:\n * - Web: <div style=\"overflow: scroll\">\n * - React Native: <ScrollView>\n *\n * @example\n * ```tsx\n * <ScrollView style={{ height: 300 }}>\n * <Column>...</Column>\n * <Column>...</Column>\n * </ScrollView>\n * ```\n */\n\nimport type { FNode } from '../types'\nimport type { ScrollViewProps } from './types'\nimport { normalizeStyle } from './utils'\n\nexport function ScrollView(props: ScrollViewProps): FNode {\n const {\n children,\n style,\n horizontal = false,\n showScrollbarX = true,\n showScrollbarY = true,\n ...rest\n } = props\n\n const scrollStyle: Record<string, unknown> = {\n ...style,\n overflowX: horizontal ? 'auto' : 'hidden',\n overflowY: horizontal ? 'hidden' : 'auto',\n display: 'flex',\n flexDirection: horizontal ? 'row' : 'column',\n }\n\n // Hide scrollbars if requested (CSS scrollbar-width for Firefox/modern browsers)\n if (!showScrollbarX || !showScrollbarY) {\n scrollStyle.scrollbarWidth = 'none'\n }\n\n return {\n type: 'div',\n props: {\n ...rest,\n style: normalizeStyle(scrollStyle as Parameters<typeof normalizeStyle>[0]),\n },\n children: Array.isArray(children) ? children : children ? [children] : [],\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/primitives/Text.ts","../src/primitives/Image.ts","../src/primitives/Pressable.ts","../src/primitives/ScrollView.ts"],"names":["Text","props","children","style","onPress","className","rest","normalizeStyle","Image","src","alt","width","height","onLoad","onError","imageStyle","Pressable","onPressIn","onPressOut","disabled","_activeOpacity","buttonStyle","ScrollView","horizontal","showScrollbarX","showScrollbarY","scrollStyle"],"mappings":"kfAmBO,SAASA,CAAAA,CAAKC,CAAAA,CAAyB,CAC5C,GAAM,CAAE,QAAA,CAAAC,CAAAA,CAAU,KAAA,CAAAC,GAAAA,CAAO,OAAA,CAAAC,CAAAA,CAAS,KAAA,CAAOC,EAAW,GAAGC,CAAK,CAAA,CAAIL,CAAAA,CAEhE,OAAO,CACL,IAAA,CAAM,MAAA,CACN,KAAA,CAAO,CACL,GAAGK,CAAAA,CACH,KAAA,CAAOD,CAAAA,CACP,KAAA,CAAOE,CAAAA,CAAeJ,GAAK,CAAA,CAC3B,OAAA,CAASC,CACX,CAAA,CACA,QAAA,CAAU,KAAA,CAAM,OAAA,CAAQF,CAAQ,CAAA,CAAIA,CAAAA,CAAWA,CAAAA,CAAW,CAACA,CAAQ,CAAA,CAAI,EACzE,CACF,CCVO,SAASM,CAAAA,CAAMP,CAAAA,CAA0B,CAC9C,GAAM,CAAE,GAAA,CAAAQ,EAAK,GAAA,CAAAC,GAAAA,CAAK,KAAA,CAAAC,CAAAA,CAAO,MAAA,CAAAC,CAAAA,CAAQ,KAAA,CAAAT,CAAAA,CAAO,OAAAU,CAAAA,CAAQ,OAAA,CAAAC,CAAAA,CAAS,GAAGR,CAAK,CAAA,CAAIL,CAAAA,CAE/Dc,CAAAA,CAAa,CACjB,GAAGZ,CAAAA,CACH,KAAA,CAAOQ,CAAAA,EAASR,CAAAA,EAAO,KAAA,CACvB,MAAA,CAAQS,GAAUT,CAAAA,EAAO,MAC3B,CAAA,CAEA,OAAO,CACL,IAAA,CAAM,KAAA,CACN,KAAA,CAAO,CACL,GAAGG,CAAAA,CACH,GAAA,CAAAG,CAAAA,CACA,GAAA,CAAKC,GAAAA,EAAO,EAAA,CACZ,MAAOH,CAAAA,CAAeQ,CAAU,CAAA,CAChC,MAAA,CAAQF,CAAAA,CACR,OAAA,CAASC,CACX,CAAA,CACA,QAAA,CAAU,EACZ,CACF,CCrBO,SAASE,CAAAA,CAAUf,CAAAA,CAA8B,CACtD,GAAM,CACJ,QAAA,CAAAC,CAAAA,CACA,OAAA,CAAAE,GAAAA,CACA,SAAA,CAAAa,CAAAA,CACA,WAAAC,CAAAA,CACA,QAAA,CAAAC,CAAAA,CACA,KAAA,CAAAhB,CAAAA,CACA,aAAA,CAAeiB,CAAAA,CAAiB,EAAA,CAChC,GAAGd,CACL,CAAA,CAAIL,CAAAA,CAEEoB,CAAAA,CAAc,CAClB,GAAGlB,CAAAA,CACH,MAAA,CAAQgB,CAAAA,CAAW,aAAA,CAAgB,SAAA,CACnC,OAAA,CAASA,CAAAA,CAAW,EAAA,CAAMhB,CAAAA,EAAO,OAAA,CACjC,OAAQ,MAAA,CACR,UAAA,CAAY,MAAA,CACZ,OAAA,CAAS,CACX,CAAA,CAEA,OAAO,CACL,IAAA,CAAM,QAAA,CACN,KAAA,CAAO,CACL,GAAGG,CAAAA,CACH,QAAA,CAAAa,CAAAA,CACA,MAAOZ,CAAAA,CAAec,CAAW,CAAA,CACjC,OAAA,CAASF,CAAAA,CAAW,MAAA,CAAYf,GAAAA,CAChC,WAAA,CAAaa,CAAAA,CACb,SAAA,CAAWC,CAAAA,CACX,YAAA,CAAcD,CAAAA,CACd,UAAA,CAAYC,CACd,CAAA,CACA,SAAU,KAAA,CAAM,OAAA,CAAQhB,CAAQ,CAAA,CAAIA,CAAAA,CAAWA,CAAAA,CAAW,CAACA,CAAQ,EAAI,EACzE,CACF,CCrCO,SAASoB,CAAAA,CAAWrB,CAAAA,CAA+B,CACxD,GAAM,CACJ,QAAA,CAAAC,CAAAA,CACA,KAAA,CAAAC,GAAAA,CACA,UAAA,CAAAoB,CAAAA,CAAa,KAAA,CACb,cAAA,CAAAC,CAAAA,CAAiB,IAAA,CACjB,cAAA,CAAAC,CAAAA,CAAiB,IAAA,CACjB,GAAGnB,CACL,EAAIL,CAAAA,CAEEyB,CAAAA,CAAuC,CAC3C,GAAGvB,GAAAA,CACH,SAAA,CAAWoB,CAAAA,CAAa,MAAA,CAAS,QAAA,CACjC,SAAA,CAAWA,CAAAA,CAAa,QAAA,CAAW,MAAA,CACnC,OAAA,CAAS,MAAA,CACT,aAAA,CAAeA,EAAa,KAAA,CAAQ,QACtC,CAAA,CAGA,OAAA,CAAI,CAACC,CAAAA,EAAkB,CAACC,CAAAA,IACtBC,CAAAA,CAAY,cAAA,CAAiB,MAAA,CAAA,CAGxB,CACL,IAAA,CAAM,KAAA,CACN,KAAA,CAAO,CACL,GAAGpB,CAAAA,CACH,KAAA,CAAOC,CAAAA,CAAemB,CAAmD,CAC3E,CAAA,CACA,QAAA,CAAU,KAAA,CAAM,QAAQxB,CAAQ,CAAA,CAAIA,CAAAA,CAAWA,CAAAA,CAAW,CAACA,CAAQ,CAAA,CAAI,EACzE,CACF","file":"primitives.mjs","sourcesContent":["/**\n * Text - Universal text display component\n *\n * Maps to:\n * - Web: <span>\n * - React Native: <Text>\n *\n * @example\n * ```tsx\n * <Text style={{ color: 'blue', fontSize: 16 }}>\n * Hello World\n * </Text>\n * ```\n */\n\nimport type { FNode } from '../types'\nimport type { TextProps } from './types'\nimport { normalizeStyle } from './utils'\n\nexport function Text(props: TextProps): FNode {\n const { children, style, onPress, class: className, ...rest } = props\n\n return {\n type: 'span',\n props: {\n ...rest,\n class: className,\n style: normalizeStyle(style),\n onclick: onPress,\n },\n children: Array.isArray(children) ? children : children ? [children] : [],\n }\n}\n","/**\n * Image - Universal image component\n *\n * Maps to:\n * - Web: <img>\n * - React Native: <Image>\n *\n * @example\n * ```tsx\n * <Image\n * src=\"/logo.png\"\n * alt=\"Logo\"\n * width={100}\n * height={100}\n * />\n * ```\n */\n\nimport type { FNode } from '../types'\nimport type { ImageProps } from './types'\nimport { normalizeStyle } from './utils'\n\nexport function Image(props: ImageProps): FNode {\n const { src, alt, width, height, style, onLoad, onError, ...rest } = props\n\n const imageStyle = {\n ...style,\n width: width || style?.width,\n height: height || style?.height,\n }\n\n return {\n type: 'img',\n props: {\n ...rest,\n src,\n alt: alt || '',\n style: normalizeStyle(imageStyle),\n onload: onLoad,\n onerror: onError,\n },\n children: [],\n }\n}\n","/**\n * Pressable - Universal touchable/clickable component\n *\n * Maps to:\n * - Web: <button>\n * - React Native: <Pressable>\n *\n * @example\n * ```tsx\n * <Pressable\n * onPress={() => console.log('pressed')}\n * style={{ padding: 10 }}\n * >\n * <Text>Click Me</Text>\n * </Pressable>\n * ```\n */\n\nimport type { FNode } from '../types'\nimport type { PressableProps } from './types'\nimport { normalizeStyle } from './utils'\n\nexport function Pressable(props: PressableProps): FNode {\n const {\n children,\n onPress,\n onPressIn,\n onPressOut,\n disabled,\n style,\n activeOpacity: _activeOpacity = 0.7,\n ...rest\n } = props\n\n const buttonStyle = {\n ...style,\n cursor: disabled ? 'not-allowed' : 'pointer',\n opacity: disabled ? 0.5 : style?.opacity,\n border: 'none',\n background: 'none',\n padding: 0,\n }\n\n return {\n type: 'button',\n props: {\n ...rest,\n disabled,\n style: normalizeStyle(buttonStyle),\n onclick: disabled ? undefined : onPress,\n onmousedown: onPressIn,\n onmouseup: onPressOut,\n ontouchstart: onPressIn,\n ontouchend: onPressOut,\n },\n children: Array.isArray(children) ? children : children ? [children] : [],\n }\n}\n","/**\n * ScrollView - Universal scrollable container\n *\n * Maps to:\n * - Web: <div style=\"overflow: scroll\">\n * - React Native: <ScrollView>\n *\n * @example\n * ```tsx\n * <ScrollView style={{ height: 300 }}>\n * <Column>...</Column>\n * <Column>...</Column>\n * </ScrollView>\n * ```\n */\n\nimport type { FNode } from '../types'\nimport type { ScrollViewProps } from './types'\nimport { normalizeStyle } from './utils'\n\nexport function ScrollView(props: ScrollViewProps): FNode {\n const {\n children,\n style,\n horizontal = false,\n showScrollbarX = true,\n showScrollbarY = true,\n ...rest\n } = props\n\n const scrollStyle: Record<string, unknown> = {\n ...style,\n overflowX: horizontal ? 'auto' : 'hidden',\n overflowY: horizontal ? 'hidden' : 'auto',\n display: 'flex',\n flexDirection: horizontal ? 'row' : 'column',\n }\n\n // Hide scrollbars if requested (CSS scrollbar-width for Firefox/modern browsers)\n if (!showScrollbarX || !showScrollbarY) {\n scrollStyle.scrollbarWidth = 'none'\n }\n\n return {\n type: 'div',\n props: {\n ...rest,\n style: normalizeStyle(scrollStyle as Parameters<typeof normalizeStyle>[0]),\n },\n children: Array.isArray(children) ? children : children ? [children] : [],\n }\n}\n"]}
package/dist/router.d.cts CHANGED
@@ -1,7 +1,7 @@
1
- import { R as RouteDef, a as RouteMatch } from './components-CxnAnbpI.cjs';
2
- export { h as Link, d as LinkProps, L as Location, O as Outlet, g as Route, c as RouteProps, f as Router, b as RouterContext, e as createLocation, i as isUnsafePath, m as matchPath, r as router, s as sanitizeQueryValue } from './components-CxnAnbpI.cjs';
1
+ import { R as RouteDef, a as RouteMatch } from './components-BMbqsbMY.cjs';
2
+ export { h as Link, d as LinkProps, L as Location, O as Outlet, g as Route, c as RouteProps, f as Router, b as RouterContext, e as createLocation, i as isUnsafePath, m as matchPath, r as router, s as sanitizeQueryValue } from './components-BMbqsbMY.cjs';
3
3
  import { a as FNodeChild } from './renderer-DSLb-FGg.cjs';
4
- import './signal-C6936A3J.cjs';
4
+ import './state-DitsMyev.cjs';
5
5
 
6
6
  /**
7
7
  * Flatten the children of <Router> or <Route> into a route configuration tree.
package/dist/router.d.ts CHANGED
@@ -1,7 +1,7 @@
1
- import { R as RouteDef, a as RouteMatch } from './components-B7KQ8C-i.js';
2
- export { h as Link, d as LinkProps, L as Location, O as Outlet, g as Route, c as RouteProps, f as Router, b as RouterContext, e as createLocation, i as isUnsafePath, m as matchPath, r as router, s as sanitizeQueryValue } from './components-B7KQ8C-i.js';
1
+ import { R as RouteDef, a as RouteMatch } from './components-C83mBQXW.js';
2
+ export { h as Link, d as LinkProps, L as Location, O as Outlet, g as Route, c as RouteProps, f as Router, b as RouterContext, e as createLocation, i as isUnsafePath, m as matchPath, r as router, s as sanitizeQueryValue } from './components-C83mBQXW.js';
3
3
  import { a as FNodeChild } from './renderer-DSLb-FGg.js';
4
- import './signal-C6936A3J.js';
4
+ import './state-DitsMyev.js';
5
5
 
6
6
  /**
7
7
  * Flatten the children of <Router> or <Route> into a route configuration tree.
package/dist/router.js CHANGED
@@ -1,2 +1,2 @@
1
- 'use strict';var chunkAYQMU7XC_js=require('./chunk-AYQMU7XC.js');require('./chunk-WXEHDEIH.js'),require('./chunk-Q7IWDVJ4.js'),require('./chunk-WQFQO5LK.js'),require('./chunk-5236IK5I.js'),require('./chunk-AJT35P3Z.js');Object.defineProperty(exports,"Link",{enumerable:true,get:function(){return chunkAYQMU7XC_js.k}});Object.defineProperty(exports,"Outlet",{enumerable:true,get:function(){return chunkAYQMU7XC_js.j}});Object.defineProperty(exports,"Route",{enumerable:true,get:function(){return chunkAYQMU7XC_js.i}});Object.defineProperty(exports,"Router",{enumerable:true,get:function(){return chunkAYQMU7XC_js.h}});Object.defineProperty(exports,"createLocation",{enumerable:true,get:function(){return chunkAYQMU7XC_js.a}});Object.defineProperty(exports,"createRoutesFromChildren",{enumerable:true,get:function(){return chunkAYQMU7XC_js.e}});Object.defineProperty(exports,"isUnsafePath",{enumerable:true,get:function(){return chunkAYQMU7XC_js.b}});Object.defineProperty(exports,"matchPath",{enumerable:true,get:function(){return chunkAYQMU7XC_js.d}});Object.defineProperty(exports,"matchRoutes",{enumerable:true,get:function(){return chunkAYQMU7XC_js.f}});Object.defineProperty(exports,"router",{enumerable:true,get:function(){return chunkAYQMU7XC_js.g}});Object.defineProperty(exports,"sanitizeQueryValue",{enumerable:true,get:function(){return chunkAYQMU7XC_js.c}});//# sourceMappingURL=router.js.map
1
+ 'use strict';var chunkAZEHBSBG_js=require('./chunk-AZEHBSBG.js');require('./chunk-DZ7L3SHV.js'),require('./chunk-XJHWMHKF.js'),require('./chunk-YPVRQKMW.js'),require('./chunk-Q7IWDVJ4.js'),require('./chunk-WQFQO5LK.js'),require('./chunk-WWEWRI6S.js'),require('./chunk-GYDP6MFV.js');Object.defineProperty(exports,"Link",{enumerable:true,get:function(){return chunkAZEHBSBG_js.k}});Object.defineProperty(exports,"Outlet",{enumerable:true,get:function(){return chunkAZEHBSBG_js.j}});Object.defineProperty(exports,"Route",{enumerable:true,get:function(){return chunkAZEHBSBG_js.i}});Object.defineProperty(exports,"Router",{enumerable:true,get:function(){return chunkAZEHBSBG_js.h}});Object.defineProperty(exports,"createLocation",{enumerable:true,get:function(){return chunkAZEHBSBG_js.a}});Object.defineProperty(exports,"createRoutesFromChildren",{enumerable:true,get:function(){return chunkAZEHBSBG_js.e}});Object.defineProperty(exports,"isUnsafePath",{enumerable:true,get:function(){return chunkAZEHBSBG_js.b}});Object.defineProperty(exports,"matchPath",{enumerable:true,get:function(){return chunkAZEHBSBG_js.d}});Object.defineProperty(exports,"matchRoutes",{enumerable:true,get:function(){return chunkAZEHBSBG_js.f}});Object.defineProperty(exports,"router",{enumerable:true,get:function(){return chunkAZEHBSBG_js.g}});Object.defineProperty(exports,"sanitizeQueryValue",{enumerable:true,get:function(){return chunkAZEHBSBG_js.c}});//# sourceMappingURL=router.js.map
2
2
  //# sourceMappingURL=router.js.map
package/dist/router.mjs CHANGED
@@ -1,2 +1,2 @@
1
- export{k as Link,j as Outlet,i as Route,h as Router,a as createLocation,e as createRoutesFromChildren,b as isUnsafePath,d as matchPath,f as matchRoutes,g as router,c as sanitizeQueryValue}from'./chunk-3BQXIHYI.mjs';import'./chunk-HLPVL6EK.mjs';import'./chunk-WVEJT7HD.mjs';import'./chunk-KNF5ERPK.mjs';import'./chunk-B7VP6HBY.mjs';import'./chunk-Q7WT5IIF.mjs';//# sourceMappingURL=router.mjs.map
1
+ export{k as Link,j as Outlet,i as Route,h as Router,a as createLocation,e as createRoutesFromChildren,b as isUnsafePath,d as matchPath,f as matchRoutes,g as router,c as sanitizeQueryValue}from'./chunk-5K55ASOD.mjs';import'./chunk-OPAAGNBO.mjs';import'./chunk-BBNYMXE7.mjs';import'./chunk-FDMJHFN7.mjs';import'./chunk-WVEJT7HD.mjs';import'./chunk-KNF5ERPK.mjs';import'./chunk-HB5VPQTB.mjs';import'./chunk-ECYYIQEX.mjs';//# sourceMappingURL=router.mjs.map
2
2
  //# sourceMappingURL=router.mjs.map
package/dist/server.js CHANGED
@@ -1,2 +1,2 @@
1
- 'use strict';var chunk5236IK5I_js=require('./chunk-5236IK5I.js');require('./chunk-AJT35P3Z.js');var g=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]);function s(r){if(r==null||r===false)return "";if(typeof r=="string"||typeof r=="number")return l(String(r));if(Array.isArray(r))return r.map(s).join("");if(chunk5236IK5I_js.f(r))return s(r.value);if(r.type===null||r.type==="fragment"){let t=r.children||r.props?.children;return t?Array.isArray(t)?t.map(s).join(""):s(t):""}if(typeof r.type=="function"){let t=r.type({...r.props,children:r.children});return s(t)}if(typeof r.type=="string"){let{type:t,props:c,children:a}=r,e=`<${t}`;if(c)for(let i in c){let n=c[i];if(!(i==="children"||i.startsWith("on")||n===null||n===void 0||n===false)&&/^[a-zA-Z0-9-:]+$/.test(i))if(i==="className"||i==="class")e+=` class="${l(n)}"`;else if(i==="style"&&typeof n=="object"){let f=Object.entries(n).map(([u,y])=>`${u.replace(/([A-Z])/g,"-$1").toLowerCase()}:${y}`).join(";");e+=` style="${l(f)}"`;}else e+=` ${i}="${l(String(n))}"`;}return g.has(t)?e+="/>":(e+=">",a&&(e+=Array.isArray(a)?a.map(s).join(""):s(a)),e+=`</${t}>`),e}return ""}function l(r){return r.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#039;")}exports.renderToString=s;//# sourceMappingURL=server.js.map
1
+ 'use strict';var chunkXJHWMHKF_js=require('./chunk-XJHWMHKF.js');require('./chunk-YPVRQKMW.js'),require('./chunk-WWEWRI6S.js'),require('./chunk-GYDP6MFV.js');var g=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]);function s(r){if(r==null||r===false)return "";if(typeof r=="string"||typeof r=="number")return l(String(r));if(Array.isArray(r))return r.map(s).join("");if(chunkXJHWMHKF_js.g(r))return s(r());if(r.type===null||r.type==="fragment"){let t=r.children||r.props?.children;return t?Array.isArray(t)?t.map(s).join(""):s(t):""}if(typeof r.type=="function"){let t=r.type({...r.props,children:r.children});return s(t)}if(typeof r.type=="string"){let{type:t,props:c,children:a}=r,e=`<${t}`;if(c)for(let i in c){let n=c[i];if(!(i==="children"||i.startsWith("on")||n===null||n===void 0||n===false)&&/^[a-zA-Z0-9-:]+$/.test(i))if(i==="className"||i==="class")e+=` class="${l(n)}"`;else if(i==="style"&&typeof n=="object"){let f=Object.entries(n).map(([u,y])=>`${u.replace(/([A-Z])/g,"-$1").toLowerCase()}:${y}`).join(";");e+=` style="${l(f)}"`;}else e+=` ${i}="${l(String(n))}"`;}return g.has(t)?e+="/>":(e+=">",a&&(e+=Array.isArray(a)?a.map(s).join(""):s(a)),e+=`</${t}>`),e}return ""}function l(r){return r.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#039;")}exports.renderToString=s;//# sourceMappingURL=server.js.map
2
2
  //# sourceMappingURL=server.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/server/index.ts"],"names":["VOID_ELEMENTS","renderToString","node","escapeHtml","isSignal","children","result","type","props","html","key","value","styleStr","k","v","str"],"mappings":"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","file":"server.js","sourcesContent":["import { isSignal } from '../core/signal'\n\nconst VOID_ELEMENTS = new Set([\n 'area',\n 'base',\n 'br',\n 'col',\n 'embed',\n 'hr',\n 'img',\n 'input',\n 'link',\n 'meta',\n 'param',\n 'source',\n 'track',\n 'wbr',\n])\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function renderToString(node: any): string {\n if (node === null || node === undefined || node === false) {\n return ''\n }\n\n if (typeof node === 'string' || typeof node === 'number') {\n return escapeHtml(String(node))\n }\n\n if (Array.isArray(node)) {\n return node.map(renderToString).join('')\n }\n\n if (isSignal(node)) {\n return renderToString(node.value)\n }\n\n // Handle fragments (type === null or type === 'fragment')\n if (node.type === null || node.type === 'fragment') {\n const children = node.children || node.props?.children\n if (children) {\n return Array.isArray(children)\n ? children.map(renderToString).join('')\n : renderToString(children)\n }\n return ''\n }\n\n if (typeof node.type === 'function') {\n const result = node.type({ ...node.props, children: node.children })\n return renderToString(result)\n }\n\n if (typeof node.type === 'string') {\n const { type, props, children } = node\n let html = `<${type}`\n\n if (props) {\n for (const key in props) {\n const value = props[key]\n if (\n key === 'children' ||\n key.startsWith('on') ||\n value === null ||\n value === undefined ||\n value === false\n ) {\n continue\n }\n\n // Security: Validate attribute name to prevent injection\n // Only allow alphanumeric, hyphens, and colons\n if (!/^[a-zA-Z0-9-:]+$/.test(key)) {\n continue\n }\n\n if (key === 'className' || key === 'class') {\n html += ` class=\"${escapeHtml(value)}\"`\n } else if (key === 'style' && typeof value === 'object') {\n const styleStr = Object.entries(value)\n .map(\n ([k, v]) => `${k.replace(/([A-Z])/g, '-$1').toLowerCase()}:${v}`\n )\n .join(';')\n html += ` style=\"${escapeHtml(styleStr)}\"`\n } else {\n html += ` ${key}=\"${escapeHtml(String(value))}\"`\n }\n }\n }\n\n if (VOID_ELEMENTS.has(type)) {\n html += '/>'\n } else {\n html += '>'\n if (children) {\n html += Array.isArray(children)\n ? children.map(renderToString).join('')\n : renderToString(children)\n }\n html += `</${type}>`\n }\n\n return html\n }\n\n return ''\n}\n\nfunction escapeHtml(str: string): string {\n return str\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#039;')\n}\n"]}
1
+ {"version":3,"sources":["../src/server/index.ts"],"names":["VOID_ELEMENTS","renderToString","node","escapeHtml","isSignal","children","result","type","props","html","key","value","styleStr","k","v","str"],"mappings":"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","file":"server.js","sourcesContent":["import { isSignal } from '../core/state'\n\nconst VOID_ELEMENTS = new Set([\n 'area',\n 'base',\n 'br',\n 'col',\n 'embed',\n 'hr',\n 'img',\n 'input',\n 'link',\n 'meta',\n 'param',\n 'source',\n 'track',\n 'wbr',\n])\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function renderToString(node: any): string {\n if (node === null || node === undefined || node === false) {\n return ''\n }\n\n if (typeof node === 'string' || typeof node === 'number') {\n return escapeHtml(String(node))\n }\n\n if (Array.isArray(node)) {\n return node.map(renderToString).join('')\n }\n\n if (isSignal(node)) {\n return renderToString((node as any)())\n }\n\n // Handle fragments (type === null or type === 'fragment')\n if (node.type === null || node.type === 'fragment') {\n const children = node.children || node.props?.children\n if (children) {\n return Array.isArray(children)\n ? children.map(renderToString).join('')\n : renderToString(children)\n }\n return ''\n }\n\n if (typeof node.type === 'function') {\n const result = node.type({ ...node.props, children: node.children })\n return renderToString(result)\n }\n\n if (typeof node.type === 'string') {\n const { type, props, children } = node\n let html = `<${type}`\n\n if (props) {\n for (const key in props) {\n const value = props[key]\n if (\n key === 'children' ||\n key.startsWith('on') ||\n value === null ||\n value === undefined ||\n value === false\n ) {\n continue\n }\n\n // Security: Validate attribute name to prevent injection\n // Only allow alphanumeric, hyphens, and colons\n if (!/^[a-zA-Z0-9-:]+$/.test(key)) {\n continue\n }\n\n if (key === 'className' || key === 'class') {\n html += ` class=\"${escapeHtml(value)}\"`\n } else if (key === 'style' && typeof value === 'object') {\n const styleStr = Object.entries(value)\n .map(\n ([k, v]) => `${k.replace(/([A-Z])/g, '-$1').toLowerCase()}:${v}`\n )\n .join(';')\n html += ` style=\"${escapeHtml(styleStr)}\"`\n } else {\n html += ` ${key}=\"${escapeHtml(String(value))}\"`\n }\n }\n }\n\n if (VOID_ELEMENTS.has(type)) {\n html += '/>'\n } else {\n html += '>'\n if (children) {\n html += Array.isArray(children)\n ? children.map(renderToString).join('')\n : renderToString(children)\n }\n html += `</${type}>`\n }\n\n return html\n }\n\n return ''\n}\n\nfunction escapeHtml(str: string): string {\n return str\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#039;')\n}\n"]}
package/dist/server.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import {f}from'./chunk-B7VP6HBY.mjs';import'./chunk-Q7WT5IIF.mjs';var g=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]);function s(r){if(r==null||r===false)return "";if(typeof r=="string"||typeof r=="number")return l(String(r));if(Array.isArray(r))return r.map(s).join("");if(f(r))return s(r.value);if(r.type===null||r.type==="fragment"){let t=r.children||r.props?.children;return t?Array.isArray(t)?t.map(s).join(""):s(t):""}if(typeof r.type=="function"){let t=r.type({...r.props,children:r.children});return s(t)}if(typeof r.type=="string"){let{type:t,props:c,children:a}=r,e=`<${t}`;if(c)for(let i in c){let n=c[i];if(!(i==="children"||i.startsWith("on")||n===null||n===void 0||n===false)&&/^[a-zA-Z0-9-:]+$/.test(i))if(i==="className"||i==="class")e+=` class="${l(n)}"`;else if(i==="style"&&typeof n=="object"){let f=Object.entries(n).map(([u,y])=>`${u.replace(/([A-Z])/g,"-$1").toLowerCase()}:${y}`).join(";");e+=` style="${l(f)}"`;}else e+=` ${i}="${l(String(n))}"`;}return g.has(t)?e+="/>":(e+=">",a&&(e+=Array.isArray(a)?a.map(s).join(""):s(a)),e+=`</${t}>`),e}return ""}function l(r){return r.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#039;")}export{s as renderToString};//# sourceMappingURL=server.mjs.map
1
+ import {g as g$1}from'./chunk-BBNYMXE7.mjs';import'./chunk-FDMJHFN7.mjs';import'./chunk-HB5VPQTB.mjs';import'./chunk-ECYYIQEX.mjs';var g=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]);function s(r){if(r==null||r===false)return "";if(typeof r=="string"||typeof r=="number")return l(String(r));if(Array.isArray(r))return r.map(s).join("");if(g$1(r))return s(r());if(r.type===null||r.type==="fragment"){let t=r.children||r.props?.children;return t?Array.isArray(t)?t.map(s).join(""):s(t):""}if(typeof r.type=="function"){let t=r.type({...r.props,children:r.children});return s(t)}if(typeof r.type=="string"){let{type:t,props:c,children:a}=r,e=`<${t}`;if(c)for(let i in c){let n=c[i];if(!(i==="children"||i.startsWith("on")||n===null||n===void 0||n===false)&&/^[a-zA-Z0-9-:]+$/.test(i))if(i==="className"||i==="class")e+=` class="${l(n)}"`;else if(i==="style"&&typeof n=="object"){let f=Object.entries(n).map(([u,y])=>`${u.replace(/([A-Z])/g,"-$1").toLowerCase()}:${y}`).join(";");e+=` style="${l(f)}"`;}else e+=` ${i}="${l(String(n))}"`;}return g.has(t)?e+="/>":(e+=">",a&&(e+=Array.isArray(a)?a.map(s).join(""):s(a)),e+=`</${t}>`),e}return ""}function l(r){return r.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#039;")}export{s as renderToString};//# sourceMappingURL=server.mjs.map
2
2
  //# sourceMappingURL=server.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/server/index.ts"],"names":["VOID_ELEMENTS","renderToString","node","escapeHtml","isSignal","children","result","type","props","html","key","value","styleStr","k","v","str"],"mappings":"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","file":"server.mjs","sourcesContent":["import { isSignal } from '../core/signal'\n\nconst VOID_ELEMENTS = new Set([\n 'area',\n 'base',\n 'br',\n 'col',\n 'embed',\n 'hr',\n 'img',\n 'input',\n 'link',\n 'meta',\n 'param',\n 'source',\n 'track',\n 'wbr',\n])\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function renderToString(node: any): string {\n if (node === null || node === undefined || node === false) {\n return ''\n }\n\n if (typeof node === 'string' || typeof node === 'number') {\n return escapeHtml(String(node))\n }\n\n if (Array.isArray(node)) {\n return node.map(renderToString).join('')\n }\n\n if (isSignal(node)) {\n return renderToString(node.value)\n }\n\n // Handle fragments (type === null or type === 'fragment')\n if (node.type === null || node.type === 'fragment') {\n const children = node.children || node.props?.children\n if (children) {\n return Array.isArray(children)\n ? children.map(renderToString).join('')\n : renderToString(children)\n }\n return ''\n }\n\n if (typeof node.type === 'function') {\n const result = node.type({ ...node.props, children: node.children })\n return renderToString(result)\n }\n\n if (typeof node.type === 'string') {\n const { type, props, children } = node\n let html = `<${type}`\n\n if (props) {\n for (const key in props) {\n const value = props[key]\n if (\n key === 'children' ||\n key.startsWith('on') ||\n value === null ||\n value === undefined ||\n value === false\n ) {\n continue\n }\n\n // Security: Validate attribute name to prevent injection\n // Only allow alphanumeric, hyphens, and colons\n if (!/^[a-zA-Z0-9-:]+$/.test(key)) {\n continue\n }\n\n if (key === 'className' || key === 'class') {\n html += ` class=\"${escapeHtml(value)}\"`\n } else if (key === 'style' && typeof value === 'object') {\n const styleStr = Object.entries(value)\n .map(\n ([k, v]) => `${k.replace(/([A-Z])/g, '-$1').toLowerCase()}:${v}`\n )\n .join(';')\n html += ` style=\"${escapeHtml(styleStr)}\"`\n } else {\n html += ` ${key}=\"${escapeHtml(String(value))}\"`\n }\n }\n }\n\n if (VOID_ELEMENTS.has(type)) {\n html += '/>'\n } else {\n html += '>'\n if (children) {\n html += Array.isArray(children)\n ? children.map(renderToString).join('')\n : renderToString(children)\n }\n html += `</${type}>`\n }\n\n return html\n }\n\n return ''\n}\n\nfunction escapeHtml(str: string): string {\n return str\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#039;')\n}\n"]}
1
+ {"version":3,"sources":["../src/server/index.ts"],"names":["VOID_ELEMENTS","renderToString","node","escapeHtml","isSignal","children","result","type","props","html","key","value","styleStr","k","v","str"],"mappings":"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","file":"server.mjs","sourcesContent":["import { isSignal } from '../core/state'\n\nconst VOID_ELEMENTS = new Set([\n 'area',\n 'base',\n 'br',\n 'col',\n 'embed',\n 'hr',\n 'img',\n 'input',\n 'link',\n 'meta',\n 'param',\n 'source',\n 'track',\n 'wbr',\n])\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function renderToString(node: any): string {\n if (node === null || node === undefined || node === false) {\n return ''\n }\n\n if (typeof node === 'string' || typeof node === 'number') {\n return escapeHtml(String(node))\n }\n\n if (Array.isArray(node)) {\n return node.map(renderToString).join('')\n }\n\n if (isSignal(node)) {\n return renderToString((node as any)())\n }\n\n // Handle fragments (type === null or type === 'fragment')\n if (node.type === null || node.type === 'fragment') {\n const children = node.children || node.props?.children\n if (children) {\n return Array.isArray(children)\n ? children.map(renderToString).join('')\n : renderToString(children)\n }\n return ''\n }\n\n if (typeof node.type === 'function') {\n const result = node.type({ ...node.props, children: node.children })\n return renderToString(result)\n }\n\n if (typeof node.type === 'string') {\n const { type, props, children } = node\n let html = `<${type}`\n\n if (props) {\n for (const key in props) {\n const value = props[key]\n if (\n key === 'children' ||\n key.startsWith('on') ||\n value === null ||\n value === undefined ||\n value === false\n ) {\n continue\n }\n\n // Security: Validate attribute name to prevent injection\n // Only allow alphanumeric, hyphens, and colons\n if (!/^[a-zA-Z0-9-:]+$/.test(key)) {\n continue\n }\n\n if (key === 'className' || key === 'class') {\n html += ` class=\"${escapeHtml(value)}\"`\n } else if (key === 'style' && typeof value === 'object') {\n const styleStr = Object.entries(value)\n .map(\n ([k, v]) => `${k.replace(/([A-Z])/g, '-$1').toLowerCase()}:${v}`\n )\n .join(';')\n html += ` style=\"${escapeHtml(styleStr)}\"`\n } else {\n html += ` ${key}=\"${escapeHtml(String(value))}\"`\n }\n }\n }\n\n if (VOID_ELEMENTS.has(type)) {\n html += '/>'\n } else {\n html += '>'\n if (children) {\n html += Array.isArray(children)\n ? children.map(renderToString).join('')\n : renderToString(children)\n }\n html += `</${type}>`\n }\n\n return html\n }\n\n return ''\n}\n\nfunction escapeHtml(str: string): string {\n return str\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#039;')\n}\n"]}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Global State Registry & Metadata
3
+ *
4
+ * Manages global state registry, namespaces, metadata, and auto-cleanup
5
+ */
6
+
7
+ interface AutoCleanupConfig {
8
+ enabled: boolean;
9
+ maxIdleTime: number;
10
+ checkInterval: number;
11
+ minAccessCount: number;
12
+ }
13
+
14
+ /**
15
+ * Main State API
16
+ *
17
+ * Unified state() function that handles all state patterns:
18
+ * - Local state (like useState)
19
+ * - Global state (like Recoil atoms)
20
+ * - Async resources (like React Query)
21
+ * - Computed values (like selectors)
22
+ */
23
+
24
+ /**
25
+ * Main State API Types
26
+ */
27
+ type StateKey = string | readonly (string | number | boolean | null | undefined | object)[];
28
+ type StateAction<T> = (newValue: T | ((prev: T) => T)) => void;
29
+ type StateValue<T> = T & (() => T) & {
30
+ peek(): T;
31
+ };
32
+ type AsyncStatus = 'idle' | 'loading' | 'success' | 'error';
33
+ interface StateOptions<P = unknown> {
34
+ key?: StateKey;
35
+ params?: P;
36
+ }
37
+ /**
38
+ * Check if a value is a state value (Proxy-based)
39
+ */
40
+ declare function isStateValue(value: unknown): value is StateValue<unknown>;
41
+ /**
42
+ * Check if a value is a signal (alias for isStateValue for compatibility)
43
+ * @deprecated Use isStateValue instead
44
+ */
45
+ declare function isSignal(value: unknown): value is StateValue<unknown>;
46
+ declare function equals<T>(stateValue: StateValue<T>, value: T): boolean;
47
+ declare function isTruthy<T>(stateValue: StateValue<T>): boolean;
48
+ interface StateStats {
49
+ total: number;
50
+ byNamespace: Record<string, number>;
51
+ topNamespaces: Array<{
52
+ namespace: string;
53
+ count: number;
54
+ }>;
55
+ averageAccessCount: number;
56
+ }
57
+ interface NamespaceStats {
58
+ namespace: string;
59
+ count: number;
60
+ totalAccessCount: number;
61
+ averageAccessCount: number;
62
+ states: Array<{
63
+ key: string;
64
+ accessCount: number;
65
+ createdAt: number;
66
+ }>;
67
+ }
68
+ interface StateFunction {
69
+ <T>(initialValue: T, options?: StateOptions): [StateValue<T>, StateAction<T>];
70
+ <T, P>(computeFn: (params: P) => T, options: StateOptions<P> & {
71
+ params: P;
72
+ }): [StateValue<T>];
73
+ <T>(computeFn: () => T, options?: StateOptions): [StateValue<T>];
74
+ <T, P>(fetcher: (params: P) => Promise<T>, options: StateOptions<P> & {
75
+ params: P;
76
+ }): [StateValue<T | undefined>, () => void, StateValue<AsyncStatus>, StateValue<unknown>];
77
+ <T>(fetcher: () => Promise<T>, options?: StateOptions): [StateValue<T | undefined>, () => void, StateValue<AsyncStatus>, StateValue<unknown>];
78
+ delete: (key: StateKey) => boolean;
79
+ clear: () => void;
80
+ clearByPrefix: (prefix: StateKey) => number;
81
+ has: (key: StateKey) => boolean;
82
+ readonly size: number;
83
+ getStats: () => StateStats;
84
+ getNamespaceStats: (prefix: StateKey) => NamespaceStats;
85
+ enableAutoCleanup: (config?: Partial<AutoCleanupConfig>) => void;
86
+ disableAutoCleanup: () => void;
87
+ readonly isAutoCleanupEnabled: boolean;
88
+ }
89
+ declare const state: StateFunction;
90
+
91
+ interface RefObject<T> {
92
+ current: T | null;
93
+ }
94
+ declare function ref<T>(initial: T | null): RefObject<T>;
95
+
96
+ export { type AsyncStatus as A, type RefObject as R, type StateValue as S, isTruthy as a, isStateValue as b, type StateAction as c, type StateKey as d, equals as e, type StateOptions as f, isSignal as i, ref as r, state as s };
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Global State Registry & Metadata
3
+ *
4
+ * Manages global state registry, namespaces, metadata, and auto-cleanup
5
+ */
6
+
7
+ interface AutoCleanupConfig {
8
+ enabled: boolean;
9
+ maxIdleTime: number;
10
+ checkInterval: number;
11
+ minAccessCount: number;
12
+ }
13
+
14
+ /**
15
+ * Main State API
16
+ *
17
+ * Unified state() function that handles all state patterns:
18
+ * - Local state (like useState)
19
+ * - Global state (like Recoil atoms)
20
+ * - Async resources (like React Query)
21
+ * - Computed values (like selectors)
22
+ */
23
+
24
+ /**
25
+ * Main State API Types
26
+ */
27
+ type StateKey = string | readonly (string | number | boolean | null | undefined | object)[];
28
+ type StateAction<T> = (newValue: T | ((prev: T) => T)) => void;
29
+ type StateValue<T> = T & (() => T) & {
30
+ peek(): T;
31
+ };
32
+ type AsyncStatus = 'idle' | 'loading' | 'success' | 'error';
33
+ interface StateOptions<P = unknown> {
34
+ key?: StateKey;
35
+ params?: P;
36
+ }
37
+ /**
38
+ * Check if a value is a state value (Proxy-based)
39
+ */
40
+ declare function isStateValue(value: unknown): value is StateValue<unknown>;
41
+ /**
42
+ * Check if a value is a signal (alias for isStateValue for compatibility)
43
+ * @deprecated Use isStateValue instead
44
+ */
45
+ declare function isSignal(value: unknown): value is StateValue<unknown>;
46
+ declare function equals<T>(stateValue: StateValue<T>, value: T): boolean;
47
+ declare function isTruthy<T>(stateValue: StateValue<T>): boolean;
48
+ interface StateStats {
49
+ total: number;
50
+ byNamespace: Record<string, number>;
51
+ topNamespaces: Array<{
52
+ namespace: string;
53
+ count: number;
54
+ }>;
55
+ averageAccessCount: number;
56
+ }
57
+ interface NamespaceStats {
58
+ namespace: string;
59
+ count: number;
60
+ totalAccessCount: number;
61
+ averageAccessCount: number;
62
+ states: Array<{
63
+ key: string;
64
+ accessCount: number;
65
+ createdAt: number;
66
+ }>;
67
+ }
68
+ interface StateFunction {
69
+ <T>(initialValue: T, options?: StateOptions): [StateValue<T>, StateAction<T>];
70
+ <T, P>(computeFn: (params: P) => T, options: StateOptions<P> & {
71
+ params: P;
72
+ }): [StateValue<T>];
73
+ <T>(computeFn: () => T, options?: StateOptions): [StateValue<T>];
74
+ <T, P>(fetcher: (params: P) => Promise<T>, options: StateOptions<P> & {
75
+ params: P;
76
+ }): [StateValue<T | undefined>, () => void, StateValue<AsyncStatus>, StateValue<unknown>];
77
+ <T>(fetcher: () => Promise<T>, options?: StateOptions): [StateValue<T | undefined>, () => void, StateValue<AsyncStatus>, StateValue<unknown>];
78
+ delete: (key: StateKey) => boolean;
79
+ clear: () => void;
80
+ clearByPrefix: (prefix: StateKey) => number;
81
+ has: (key: StateKey) => boolean;
82
+ readonly size: number;
83
+ getStats: () => StateStats;
84
+ getNamespaceStats: (prefix: StateKey) => NamespaceStats;
85
+ enableAutoCleanup: (config?: Partial<AutoCleanupConfig>) => void;
86
+ disableAutoCleanup: () => void;
87
+ readonly isAutoCleanupEnabled: boolean;
88
+ }
89
+ declare const state: StateFunction;
90
+
91
+ interface RefObject<T> {
92
+ current: T | null;
93
+ }
94
+ declare function ref<T>(initial: T | null): RefObject<T>;
95
+
96
+ export { type AsyncStatus as A, type RefObject as R, type StateValue as S, isTruthy as a, isStateValue as b, type StateAction as c, type StateKey as d, equals as e, type StateOptions as f, isSignal as i, ref as r, state as s };
@@ -0,0 +1,2 @@
1
+ export{e as STATE_SIGNAL,i as equals,h as getStateSignal,g as isSignal,f as isStateValue,j as isTruthy,l as ref,k as state}from'./chunk-BBNYMXE7.mjs';import'./chunk-FDMJHFN7.mjs';import'./chunk-HB5VPQTB.mjs';import'./chunk-ECYYIQEX.mjs';//# sourceMappingURL=state-RYKSC35A.mjs.map
2
+ //# sourceMappingURL=state-RYKSC35A.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"state-RYKSC35A.mjs"}
@@ -0,0 +1,2 @@
1
+ 'use strict';var chunkXJHWMHKF_js=require('./chunk-XJHWMHKF.js');require('./chunk-YPVRQKMW.js'),require('./chunk-WWEWRI6S.js'),require('./chunk-GYDP6MFV.js');Object.defineProperty(exports,"STATE_SIGNAL",{enumerable:true,get:function(){return chunkXJHWMHKF_js.e}});Object.defineProperty(exports,"equals",{enumerable:true,get:function(){return chunkXJHWMHKF_js.i}});Object.defineProperty(exports,"getStateSignal",{enumerable:true,get:function(){return chunkXJHWMHKF_js.h}});Object.defineProperty(exports,"isSignal",{enumerable:true,get:function(){return chunkXJHWMHKF_js.g}});Object.defineProperty(exports,"isStateValue",{enumerable:true,get:function(){return chunkXJHWMHKF_js.f}});Object.defineProperty(exports,"isTruthy",{enumerable:true,get:function(){return chunkXJHWMHKF_js.j}});Object.defineProperty(exports,"ref",{enumerable:true,get:function(){return chunkXJHWMHKF_js.l}});Object.defineProperty(exports,"state",{enumerable:true,get:function(){return chunkXJHWMHKF_js.k}});//# sourceMappingURL=state-XUXPMCFJ.js.map
2
+ //# sourceMappingURL=state-XUXPMCFJ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"state-XUXPMCFJ.js"}