flexium 0.10.4 → 0.10.6
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.
- package/dist/{DrawText-ngwNNh8O.d.ts → DrawText-CVAKQ5wZ.d.cts} +42 -42
- package/dist/{DrawText-ccZrs3Xs.d.cts → DrawText-Dlh1L1Ar.d.ts} +42 -42
- package/dist/advanced.d.cts +1 -1
- package/dist/advanced.d.ts +1 -1
- package/dist/advanced.js +1 -1
- package/dist/advanced.js.map +1 -1
- package/dist/advanced.mjs +1 -1
- package/dist/advanced.mjs.map +1 -1
- package/dist/canvas.d.cts +5 -6
- package/dist/canvas.d.ts +5 -6
- package/dist/canvas.js +1 -1
- package/dist/canvas.mjs +1 -1
- package/dist/chunk-2L2QFYBL.mjs +2 -0
- package/dist/chunk-2L2QFYBL.mjs.map +1 -0
- package/dist/chunk-ANJNQW77.js +2 -0
- package/dist/chunk-ANJNQW77.js.map +1 -0
- package/dist/{chunk-WXEHDEIH.js → chunk-DZ7L3SHV.js} +2 -2
- package/dist/{chunk-WXEHDEIH.js.map → chunk-DZ7L3SHV.js.map} +1 -1
- package/dist/chunk-E5WYPGCV.mjs +3 -0
- package/dist/chunk-E5WYPGCV.mjs.map +1 -0
- package/dist/chunk-ECYYIQEX.mjs +3 -0
- package/dist/chunk-ECYYIQEX.mjs.map +1 -0
- package/dist/chunk-ERIXVRJ4.mjs +3 -0
- package/dist/chunk-ERIXVRJ4.mjs.map +1 -0
- package/dist/chunk-F23GIQDE.mjs +2 -0
- package/dist/chunk-F23GIQDE.mjs.map +1 -0
- package/dist/chunk-FDMJHFN7.mjs +2 -0
- package/dist/chunk-FDMJHFN7.mjs.map +1 -0
- package/dist/chunk-GKJQEOP7.mjs +2 -0
- package/dist/{chunk-PVPY55Z7.mjs.map → chunk-GKJQEOP7.mjs.map} +1 -1
- package/dist/chunk-GYDP6MFV.js +3 -0
- package/dist/chunk-GYDP6MFV.js.map +1 -0
- package/dist/chunk-HB5VPQTB.mjs +2 -0
- package/dist/chunk-HB5VPQTB.mjs.map +1 -0
- package/dist/chunk-NF4RPLCK.js +3 -0
- package/dist/chunk-NF4RPLCK.js.map +1 -0
- package/dist/chunk-OPAAGNBO.mjs +2 -0
- package/dist/{chunk-HLPVL6EK.mjs.map → chunk-OPAAGNBO.mjs.map} +1 -1
- package/dist/chunk-RLLO5M6F.js +3 -0
- package/dist/chunk-RLLO5M6F.js.map +1 -0
- package/dist/{chunk-63AW5ZOC.js → chunk-RMN5IPS5.js} +2 -2
- package/dist/{chunk-63AW5ZOC.js.map → chunk-RMN5IPS5.js.map} +1 -1
- package/dist/chunk-WWEWRI6S.js +2 -0
- package/dist/chunk-WWEWRI6S.js.map +1 -0
- package/dist/chunk-YEBBTVHG.js +2 -0
- package/dist/chunk-YEBBTVHG.js.map +1 -0
- package/dist/chunk-YPVRQKMW.js +2 -0
- package/dist/chunk-YPVRQKMW.js.map +1 -0
- package/dist/{components-CxnAnbpI.d.cts → components-BMbqsbMY.d.cts} +5 -5
- package/dist/{components-B7KQ8C-i.d.ts → components-C83mBQXW.d.ts} +5 -5
- package/dist/{effect-14CxUU8r.d.ts → core-CxHP8991.d.cts} +9 -1
- package/dist/{effect-14CxUU8r.d.cts → core-D0ggvjX3.d.ts} +9 -1
- package/dist/core.d.cts +2 -80
- package/dist/core.d.ts +2 -80
- package/dist/core.js +1 -1
- package/dist/core.mjs +1 -1
- package/dist/dom.d.cts +2 -2
- package/dist/dom.d.ts +2 -2
- package/dist/dom.js +1 -1
- package/dist/dom.js.map +1 -1
- package/dist/dom.mjs +1 -1
- package/dist/dom.mjs.map +1 -1
- package/dist/effect-554ONNZR.js +2 -0
- package/dist/{effect-K45UU3N4.js.map → effect-554ONNZR.js.map} +1 -1
- package/dist/effect-T2GVIS3T.mjs +2 -0
- package/dist/{effect-3LUCHSAZ.mjs.map → effect-T2GVIS3T.mjs.map} +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/interactive.d.cts +5 -5
- package/dist/interactive.d.ts +5 -5
- package/dist/interactive.js +1 -1
- package/dist/interactive.js.map +1 -1
- package/dist/interactive.mjs +1 -1
- package/dist/interactive.mjs.map +1 -1
- package/dist/metafile-cjs.json +1 -1
- package/dist/metafile-esm.json +1 -1
- package/dist/{portal-NLlE-fNZ.d.cts → portal-BK_0Z0hE.d.cts} +2 -2
- package/dist/{portal-CVqrpmHd.d.ts → portal-CbguxtuQ.d.ts} +2 -2
- package/dist/primitives/motion.js +1 -1
- package/dist/primitives/motion.mjs +1 -1
- package/dist/primitives/ui.d.cts +3 -3
- package/dist/primitives/ui.d.ts +3 -3
- package/dist/primitives/ui.js +1 -1
- package/dist/primitives/ui.js.map +1 -1
- package/dist/primitives/ui.mjs +1 -1
- package/dist/primitives/ui.mjs.map +1 -1
- package/dist/primitives.d.cts +4 -5
- package/dist/primitives.d.ts +4 -5
- package/dist/primitives.js +1 -1
- package/dist/primitives.js.map +1 -1
- package/dist/primitives.mjs +1 -1
- package/dist/primitives.mjs.map +1 -1
- package/dist/router.d.cts +3 -3
- package/dist/router.d.ts +3 -3
- package/dist/router.js +1 -1
- package/dist/router.mjs +1 -1
- package/dist/server.js +1 -1
- package/dist/server.js.map +1 -1
- package/dist/server.mjs +1 -1
- package/dist/server.mjs.map +1 -1
- package/dist/state-DitsMyev.d.cts +96 -0
- package/dist/state-DitsMyev.d.ts +96 -0
- package/dist/state-S3TSPDMB.js +2 -0
- package/dist/state-S3TSPDMB.js.map +1 -0
- package/dist/state-SUVOJZYY.mjs +2 -0
- package/dist/state-SUVOJZYY.mjs.map +1 -0
- package/dist/test-exports.d.cts +37 -7
- package/dist/test-exports.d.ts +37 -7
- package/dist/test-exports.js +1 -1
- package/dist/test-exports.mjs +1 -1
- package/package.json +1 -1
- package/dist/chunk-3AWR7IKE.js +0 -2
- package/dist/chunk-3AWR7IKE.js.map +0 -1
- package/dist/chunk-3BQXIHYI.mjs +0 -3
- package/dist/chunk-3BQXIHYI.mjs.map +0 -1
- package/dist/chunk-5236IK5I.js +0 -2
- package/dist/chunk-5236IK5I.js.map +0 -1
- package/dist/chunk-6K44QCMT.mjs +0 -3
- package/dist/chunk-6K44QCMT.mjs.map +0 -1
- package/dist/chunk-7Q4UE442.mjs +0 -2
- package/dist/chunk-7Q4UE442.mjs.map +0 -1
- package/dist/chunk-AJT35P3Z.js +0 -3
- package/dist/chunk-AJT35P3Z.js.map +0 -1
- package/dist/chunk-AYQMU7XC.js +0 -3
- package/dist/chunk-AYQMU7XC.js.map +0 -1
- package/dist/chunk-B7VP6HBY.mjs +0 -2
- package/dist/chunk-B7VP6HBY.mjs.map +0 -1
- package/dist/chunk-HLPVL6EK.mjs +0 -2
- package/dist/chunk-KJPIJNFH.mjs +0 -2
- package/dist/chunk-KJPIJNFH.mjs.map +0 -1
- package/dist/chunk-PVPY55Z7.mjs +0 -2
- package/dist/chunk-Q7WT5IIF.mjs +0 -3
- package/dist/chunk-Q7WT5IIF.mjs.map +0 -1
- package/dist/chunk-S3EDPCYT.js +0 -3
- package/dist/chunk-S3EDPCYT.js.map +0 -1
- package/dist/chunk-WOHSSPKD.js +0 -2
- package/dist/chunk-WOHSSPKD.js.map +0 -1
- package/dist/effect-3LUCHSAZ.mjs +0 -2
- package/dist/effect-K45UU3N4.js +0 -2
- package/dist/signal-2QUI7H7B.js +0 -2
- package/dist/signal-2QUI7H7B.js.map +0 -1
- package/dist/signal-C6936A3J.d.cts +0 -175
- package/dist/signal-C6936A3J.d.ts +0 -175
- package/dist/signal-L3ZWGOVT.mjs +0 -2
- 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"]}
|
package/dist/primitives.d.cts
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
export { e as effect } from './
|
|
1
|
+
export { e as effect } from './core-CxHP8991.cjs';
|
|
2
2
|
export { r as root } from './owner-QS9tPwPr.cjs';
|
|
3
|
-
export { state } from './
|
|
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-
|
|
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-
|
|
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
|
package/dist/primitives.d.ts
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
export { e as effect } from './
|
|
1
|
+
export { e as effect } from './core-D0ggvjX3.js';
|
|
2
2
|
export { r as root } from './owner-QS9tPwPr.js';
|
|
3
|
-
export { state } from './
|
|
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-
|
|
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-
|
|
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
|
package/dist/primitives.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
'use strict';var chunkYDZ37ZZ4_js=require('./chunk-YDZ37ZZ4.js'),
|
|
1
|
+
'use strict';var chunkYDZ37ZZ4_js=require('./chunk-YDZ37ZZ4.js'),chunkANJNQW77_js=require('./chunk-ANJNQW77.js'),chunkYEBBTVHG_js=require('./chunk-YEBBTVHG.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:chunkANJNQW77_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:chunkANJNQW77_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:chunkANJNQW77_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:chunkANJNQW77_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 chunkANJNQW77_js.d}});Object.defineProperty(exports,"DrawArc",{enumerable:true,get:function(){return chunkANJNQW77_js.g}});Object.defineProperty(exports,"DrawCircle",{enumerable:true,get:function(){return chunkANJNQW77_js.f}});Object.defineProperty(exports,"DrawLine",{enumerable:true,get:function(){return chunkANJNQW77_js.h}});Object.defineProperty(exports,"DrawPath",{enumerable:true,get:function(){return chunkANJNQW77_js.i}});Object.defineProperty(exports,"DrawRect",{enumerable:true,get:function(){return chunkANJNQW77_js.e}});Object.defineProperty(exports,"DrawText",{enumerable:true,get:function(){return chunkANJNQW77_js.j}});Object.defineProperty(exports,"normalizeStyle",{enumerable:true,get:function(){return chunkANJNQW77_js.a}});Object.defineProperty(exports,"state",{enumerable:true,get:function(){return chunkYEBBTVHG_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
|
package/dist/primitives.js.map
CHANGED
|
@@ -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":"
|
|
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"]}
|
package/dist/primitives.mjs
CHANGED
|
@@ -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';
|
|
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-F23GIQDE.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-F23GIQDE.mjs';export{k as state}from'./chunk-2L2QFYBL.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
|
package/dist/primitives.mjs.map
CHANGED
|
@@ -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":"
|
|
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"]}
|
package/dist/router.d.cts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { R as RouteDef, a as RouteMatch } from './components-
|
|
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-
|
|
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 './
|
|
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-
|
|
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-
|
|
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 './
|
|
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
|
|
1
|
+
'use strict';var chunkNF4RPLCK_js=require('./chunk-NF4RPLCK.js');require('./chunk-DZ7L3SHV.js'),require('./chunk-YEBBTVHG.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 chunkNF4RPLCK_js.k}});Object.defineProperty(exports,"Outlet",{enumerable:true,get:function(){return chunkNF4RPLCK_js.j}});Object.defineProperty(exports,"Route",{enumerable:true,get:function(){return chunkNF4RPLCK_js.i}});Object.defineProperty(exports,"Router",{enumerable:true,get:function(){return chunkNF4RPLCK_js.h}});Object.defineProperty(exports,"createLocation",{enumerable:true,get:function(){return chunkNF4RPLCK_js.a}});Object.defineProperty(exports,"createRoutesFromChildren",{enumerable:true,get:function(){return chunkNF4RPLCK_js.e}});Object.defineProperty(exports,"isUnsafePath",{enumerable:true,get:function(){return chunkNF4RPLCK_js.b}});Object.defineProperty(exports,"matchPath",{enumerable:true,get:function(){return chunkNF4RPLCK_js.d}});Object.defineProperty(exports,"matchRoutes",{enumerable:true,get:function(){return chunkNF4RPLCK_js.f}});Object.defineProperty(exports,"router",{enumerable:true,get:function(){return chunkNF4RPLCK_js.g}});Object.defineProperty(exports,"sanitizeQueryValue",{enumerable:true,get:function(){return chunkNF4RPLCK_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-
|
|
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-ERIXVRJ4.mjs';import'./chunk-OPAAGNBO.mjs';import'./chunk-2L2QFYBL.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
|
|
1
|
+
'use strict';var chunkYEBBTVHG_js=require('./chunk-YEBBTVHG.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(chunkYEBBTVHG_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,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}exports.renderToString=s;//# sourceMappingURL=server.js.map
|
|
2
2
|
//# sourceMappingURL=server.js.map
|
package/dist/server.js.map
CHANGED
|
@@ -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":"
|
|
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":"8JAEA,IAAMA,CAAAA,CAAgB,IAAI,GAAA,CAAI,CAC5B,OACA,MAAA,CACA,IAAA,CACA,KAAA,CACA,OAAA,CACA,IAAA,CACA,KAAA,CACA,OAAA,CACA,MAAA,CACA,OACA,OAAA,CACA,QAAA,CACA,OAAA,CACA,KACF,CAAC,CAAA,CAGM,SAASC,CAAAA,CAAeC,EAAmB,CAChD,GAAIA,CAAAA,EAAS,IAAA,EAA8BA,IAAS,KAAA,CAClD,OAAO,EAAA,CAGT,GAAI,OAAOA,CAAAA,EAAS,QAAA,EAAY,OAAOA,CAAAA,EAAS,QAAA,CAC9C,OAAOC,CAAAA,CAAW,MAAA,CAAOD,CAAI,CAAC,CAAA,CAGhC,GAAI,KAAA,CAAM,OAAA,CAAQA,CAAI,CAAA,CACpB,OAAOA,EAAK,GAAA,CAAID,CAAc,CAAA,CAAE,IAAA,CAAK,EAAE,CAAA,CAGzC,GAAIG,kBAAAA,CAASF,CAAI,CAAA,CACf,OAAOD,CAAAA,CAAgBC,CAAAA,EAAc,CAAA,CAIvC,GAAIA,CAAAA,CAAK,IAAA,GAAS,MAAQA,CAAAA,CAAK,IAAA,GAAS,UAAA,CAAY,CAClD,IAAMG,CAAAA,CAAWH,CAAAA,CAAK,QAAA,EAAYA,EAAK,KAAA,EAAO,QAAA,CAC9C,OAAIG,CAAAA,CACK,KAAA,CAAM,OAAA,CAAQA,CAAQ,CAAA,CACzBA,EAAS,GAAA,CAAIJ,CAAc,CAAA,CAAE,IAAA,CAAK,EAAE,CAAA,CACpCA,CAAAA,CAAeI,CAAQ,EAEtB,EACT,CAEA,GAAI,OAAOH,EAAK,IAAA,EAAS,UAAA,CAAY,CACnC,IAAMI,EAASJ,CAAAA,CAAK,IAAA,CAAK,CAAE,GAAGA,CAAAA,CAAK,KAAA,CAAO,QAAA,CAAUA,CAAAA,CAAK,QAAS,CAAC,CAAA,CACnE,OAAOD,CAAAA,CAAeK,CAAM,CAC9B,CAEA,GAAI,OAAOJ,CAAAA,CAAK,IAAA,EAAS,QAAA,CAAU,CACjC,GAAM,CAAE,IAAA,CAAAK,CAAAA,CAAM,MAAAC,CAAAA,CAAO,QAAA,CAAAH,CAAS,CAAA,CAAIH,EAC9BO,CAAAA,CAAO,CAAA,CAAA,EAAIF,CAAI,CAAA,CAAA,CAEnB,GAAIC,CAAAA,CACF,IAAA,IAAWE,CAAAA,IAAOF,CAAAA,CAAO,CACvB,IAAMG,CAAAA,CAAQH,CAAAA,CAAME,CAAG,CAAA,CACvB,GACE,EAAAA,CAAAA,GAAQ,UAAA,EACRA,CAAAA,CAAI,UAAA,CAAW,IAAI,GACnBC,CAAAA,GAAU,IAAA,EACVA,CAAAA,GAAU,MAAA,EACVA,CAAAA,GAAU,KAAA,CAAA,EAOP,kBAAA,CAAmB,IAAA,CAAKD,CAAG,CAAA,CAIhC,GAAIA,CAAAA,GAAQ,WAAA,EAAeA,IAAQ,OAAA,CACjCD,CAAAA,EAAQ,CAAA,QAAA,EAAWN,CAAAA,CAAWQ,CAAK,CAAC,CAAA,CAAA,CAAA,CAAA,KAAA,GAC3BD,CAAAA,GAAQ,OAAA,EAAW,OAAOC,CAAAA,EAAU,QAAA,CAAU,CACvD,IAAMC,CAAAA,CAAW,MAAA,CAAO,OAAA,CAAQD,CAAK,CAAA,CAClC,GAAA,CACC,CAAC,CAACE,EAAGC,CAAC,CAAA,GAAM,CAAA,EAAGD,CAAAA,CAAE,OAAA,CAAQ,UAAA,CAAY,KAAK,CAAA,CAAE,aAAa,CAAA,CAAA,EAAIC,CAAC,CAAA,CAChE,EACC,IAAA,CAAK,GAAG,CAAA,CACXL,CAAAA,EAAQ,WAAWN,CAAAA,CAAWS,CAAQ,CAAC,CAAA,CAAA,EACzC,CAAA,KACEH,CAAAA,EAAQ,CAAA,CAAA,EAAIC,CAAG,KAAKP,CAAAA,CAAW,MAAA,CAAOQ,CAAK,CAAC,CAAC,CAAA,CAAA,EAEjD,CAGF,OAAIX,EAAc,GAAA,CAAIO,CAAI,CAAA,CACxBE,CAAAA,EAAQ,IAAA,EAERA,CAAAA,EAAQ,GAAA,CACJJ,CAAAA,GACFI,GAAQ,KAAA,CAAM,OAAA,CAAQJ,CAAQ,CAAA,CAC1BA,EAAS,GAAA,CAAIJ,CAAc,CAAA,CAAE,IAAA,CAAK,EAAE,CAAA,CACpCA,CAAAA,CAAeI,CAAQ,CAAA,CAAA,CAE7BI,CAAAA,EAAQ,CAAA,EAAA,EAAKF,CAAI,CAAA,CAAA,CAAA,CAAA,CAGZE,CACT,CAEA,OAAO,EACT,CAEA,SAASN,CAAAA,CAAWY,CAAAA,CAAqB,CACvC,OAAOA,EACJ,OAAA,CAAQ,IAAA,CAAM,OAAO,CAAA,CACrB,OAAA,CAAQ,IAAA,CAAM,MAAM,CAAA,CACpB,QAAQ,IAAA,CAAM,MAAM,CAAA,CACpB,OAAA,CAAQ,KAAM,QAAQ,CAAA,CACtB,OAAA,CAAQ,IAAA,CAAM,QAAQ,CAC3B","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, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''')\n}\n"]}
|
package/dist/server.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {g as g$1}from'./chunk-2L2QFYBL.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,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}export{s as renderToString};//# sourceMappingURL=server.mjs.map
|
|
2
2
|
//# sourceMappingURL=server.mjs.map
|
package/dist/server.mjs.map
CHANGED
|
@@ -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":"
|
|
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, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''')\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
|
+
'use strict';var chunkYEBBTVHG_js=require('./chunk-YEBBTVHG.js');require('./chunk-YPVRQKMW.js'),require('./chunk-WWEWRI6S.js'),require('./chunk-GYDP6MFV.js');Object.defineProperty(exports,"STATE_SIGNAL",{enumerable:true,get:function(){return chunkYEBBTVHG_js.e}});Object.defineProperty(exports,"equals",{enumerable:true,get:function(){return chunkYEBBTVHG_js.i}});Object.defineProperty(exports,"getStateSignal",{enumerable:true,get:function(){return chunkYEBBTVHG_js.h}});Object.defineProperty(exports,"isSignal",{enumerable:true,get:function(){return chunkYEBBTVHG_js.g}});Object.defineProperty(exports,"isStateValue",{enumerable:true,get:function(){return chunkYEBBTVHG_js.f}});Object.defineProperty(exports,"isTruthy",{enumerable:true,get:function(){return chunkYEBBTVHG_js.j}});Object.defineProperty(exports,"ref",{enumerable:true,get:function(){return chunkYEBBTVHG_js.l}});Object.defineProperty(exports,"state",{enumerable:true,get:function(){return chunkYEBBTVHG_js.k}});//# sourceMappingURL=state-S3TSPDMB.js.map
|
|
2
|
+
//# sourceMappingURL=state-S3TSPDMB.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"state-S3TSPDMB.js"}
|
|
@@ -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-2L2QFYBL.mjs';import'./chunk-FDMJHFN7.mjs';import'./chunk-HB5VPQTB.mjs';import'./chunk-ECYYIQEX.mjs';//# sourceMappingURL=state-SUVOJZYY.mjs.map
|
|
2
|
+
//# sourceMappingURL=state-SUVOJZYY.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"state-SUVOJZYY.mjs"}
|