flexium 0.8.15 → 0.9.0
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-CeXBL8Ev.d.ts → DrawText-Bvzl40Vi.d.ts} +1 -1
- package/dist/{DrawText-JB58mpQT.d.cts → DrawText-CJikXQjL.d.cts} +1 -1
- package/dist/advanced.d.cts +3 -1
- package/dist/advanced.d.ts +3 -1
- package/dist/advanced.js +1 -1
- package/dist/advanced.mjs +1 -1
- package/dist/advanced.mjs.map +1 -1
- package/dist/canvas.d.cts +5 -3
- package/dist/canvas.d.ts +5 -3
- package/dist/canvas.js +1 -1
- package/dist/canvas.mjs +1 -1
- package/dist/chunk-6RV7ARJT.mjs +3 -0
- package/dist/chunk-6RV7ARJT.mjs.map +1 -0
- package/dist/{chunk-CNY6FPKJ.js → chunk-CBO2X74Q.js} +2 -2
- package/dist/{chunk-CZYIK6FD.mjs.map → chunk-CBO2X74Q.js.map} +1 -1
- package/dist/chunk-GFL4VRAO.mjs +3 -0
- package/dist/chunk-GFL4VRAO.mjs.map +1 -0
- package/dist/{chunk-MLZTCKTH.mjs → chunk-GQKN4NPW.mjs} +2 -2
- package/dist/{chunk-MLZTCKTH.mjs.map → chunk-GQKN4NPW.mjs.map} +1 -1
- package/dist/{chunk-CZYIK6FD.mjs → chunk-JDTJFAXO.mjs} +2 -2
- package/dist/chunk-JDTJFAXO.mjs.map +1 -0
- package/dist/{chunk-ZNPYN2TZ.mjs → chunk-LXXN76HJ.mjs} +2 -2
- package/dist/{chunk-ZNPYN2TZ.mjs.map → chunk-LXXN76HJ.mjs.map} +1 -1
- package/dist/chunk-MKE3KA43.js +3 -0
- package/dist/chunk-MKE3KA43.js.map +1 -0
- package/dist/{chunk-DOGIWSDA.js → chunk-PDOEMOWN.js} +2 -2
- package/dist/{chunk-DOGIWSDA.js.map → chunk-PDOEMOWN.js.map} +1 -1
- package/dist/{chunk-GDBJ322I.js → chunk-RIVNKTUR.js} +2 -2
- package/dist/{chunk-GDBJ322I.js.map → chunk-RIVNKTUR.js.map} +1 -1
- package/dist/chunk-TQLZ7UZX.js +2 -0
- package/dist/chunk-TQLZ7UZX.js.map +1 -0
- package/dist/chunk-WEYAKKNF.js +3 -0
- package/dist/chunk-WEYAKKNF.js.map +1 -0
- package/dist/chunk-WO6NQ3KR.mjs +3 -0
- package/dist/chunk-WO6NQ3KR.mjs.map +1 -0
- package/dist/chunk-Y4DUMNIW.mjs +2 -0
- package/dist/chunk-Y4DUMNIW.mjs.map +1 -0
- package/dist/chunk-ZG3LULLU.js +3 -0
- package/dist/chunk-ZG3LULLU.js.map +1 -0
- package/dist/components-D4WeooPi.d.ts +126 -0
- package/dist/components-DZy2r6m5.d.cts +126 -0
- package/dist/core.d.cts +159 -15
- package/dist/core.d.ts +159 -15
- package/dist/core.js +1 -1
- package/dist/core.mjs +1 -1
- package/dist/dom.d.cts +2 -3
- package/dist/dom.d.ts +2 -3
- 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-BlnnM1t5.d.cts +20 -0
- package/dist/effect-BlnnM1t5.d.ts +20 -0
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- 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 +1 -1
- package/dist/interactive.d.ts +1 -1
- package/dist/interactive.js +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/owner-Ce7KCWzi.d.cts +34 -0
- package/dist/owner-Ce7KCWzi.d.ts +34 -0
- package/dist/{portal-DBwz7gD0.d.ts → portal-C3ESJhlv.d.ts} +1 -1
- package/dist/{portal-BpcIlK9y.d.cts → portal-CAEbiMUZ.d.cts} +1 -1
- package/dist/primitives/motion.js +1 -1
- package/dist/primitives/motion.mjs +1 -1
- package/dist/primitives/ui.d.cts +1 -1
- package/dist/primitives/ui.d.ts +1 -1
- package/dist/primitives/ui.js +1 -1
- package/dist/primitives/ui.mjs +1 -1
- package/dist/primitives/ui.mjs.map +1 -1
- package/dist/primitives.d.cts +6 -4
- package/dist/primitives.d.ts +6 -4
- package/dist/primitives.js +1 -1
- package/dist/primitives.mjs +1 -1
- package/dist/router.d.cts +11 -120
- package/dist/router.d.ts +11 -120
- package/dist/router.js +1 -1
- package/dist/router.mjs +1 -1
- package/dist/scheduler-Z4QqUDjF.d.cts +25 -0
- package/dist/scheduler-Z4QqUDjF.d.ts +25 -0
- package/dist/server.js +1 -1
- package/dist/server.mjs +1 -1
- package/dist/signal-AXKUQJVA.js +2 -0
- package/dist/{signal-XZXQ4VYQ.js.map → signal-AXKUQJVA.js.map} +1 -1
- package/dist/signal-Dxh9PsKr.d.cts +69 -0
- package/dist/signal-Dxh9PsKr.d.ts +69 -0
- package/dist/signal-HM2LG5YL.mjs +2 -0
- package/dist/{signal-PWBIM6JV.mjs.map → signal-HM2LG5YL.mjs.map} +1 -1
- package/dist/test-exports.d.cts +29 -8
- package/dist/test-exports.d.ts +29 -8
- package/dist/test-exports.js +1 -1
- package/dist/test-exports.mjs +1 -1
- package/package.json +1 -1
- package/dist/chunk-2MVKTSFR.mjs +0 -3
- package/dist/chunk-2MVKTSFR.mjs.map +0 -1
- package/dist/chunk-2U4DW375.mjs +0 -2
- package/dist/chunk-2U4DW375.mjs.map +0 -1
- package/dist/chunk-5S3ZQ2LB.mjs +0 -3
- package/dist/chunk-5S3ZQ2LB.mjs.map +0 -1
- package/dist/chunk-CNY6FPKJ.js.map +0 -1
- package/dist/chunk-EX2GURH5.mjs +0 -3
- package/dist/chunk-EX2GURH5.mjs.map +0 -1
- package/dist/chunk-I7UCVARB.js +0 -2
- package/dist/chunk-I7UCVARB.js.map +0 -1
- package/dist/chunk-REETNY2Z.js +0 -3
- package/dist/chunk-REETNY2Z.js.map +0 -1
- package/dist/chunk-ROYFUJN5.js +0 -3
- package/dist/chunk-ROYFUJN5.js.map +0 -1
- package/dist/chunk-V4K6WOXN.js +0 -3
- package/dist/chunk-V4K6WOXN.js.map +0 -1
- package/dist/signal-PWBIM6JV.mjs +0 -2
- package/dist/signal-XZXQ4VYQ.js +0 -2
- package/dist/signal-mNtlF8-v.d.cts +0 -158
- package/dist/signal-mNtlF8-v.d.ts +0 -158
- package/dist/state-kK9sQh9s.d.cts +0 -73
- package/dist/state-kK9sQh9s.d.ts +0 -73
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
'use strict';var chunkQ7IWDVJ4_js=require('./chunk-Q7IWDVJ4.js'),
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
'use strict';var chunkQ7IWDVJ4_js=require('./chunk-Q7IWDVJ4.js'),chunkMKE3KA43_js=require('./chunk-MKE3KA43.js');function m(e){let t={},i=[];return e.x!==void 0&&i.push(`translateX(${e.x}px)`),e.y!==void 0&&i.push(`translateY(${e.y}px)`),e.scale!==void 0?i.push(`scale(${e.scale})`):(e.scaleX!==void 0&&i.push(`scaleX(${e.scaleX})`),e.scaleY!==void 0&&i.push(`scaleY(${e.scaleY})`)),e.rotate!==void 0&&i.push(`rotate(${e.rotate}deg)`),i.length>0&&(t.transform=i.join(" ")),e.opacity!==void 0&&(t.opacity=e.opacity.toString()),e.width!==void 0&&(t.width=typeof e.width=="number"?`${e.width}px`:e.width),e.height!==void 0&&(t.height=typeof e.height=="number"?`${e.height}px`:e.height),t}function L(e){let t=e.tension??170,i=e.friction??26,o=e.mass??1,r=t,n=i,s=o,l=Math.sqrt(r/s),c=n/(2*Math.sqrt(r*s)),u=4.6/(c*l)*1e3;return c<1?{duration:u,easing:"cubic-bezier(0.34, 1.56, 0.64, 1)"}:{duration:u,easing:"cubic-bezier(0.22, 1, 0.36, 1)"}}var d=null,x=null;function A(){if(d===null)if(typeof window<"u"&&window.matchMedia){let e=window.matchMedia("(prefers-reduced-motion: reduce)");d=e.matches;let t=i=>{d=i.matches;};e.addEventListener("change",t),x=()=>{e.removeEventListener("change",t),d=null,x=null;};}else d=false;return d}function O(){x&&x();}var f=class{constructor(t){this.animation=null;this.resizeObserver=null;this.previousSize=null;this.element=t;}animate(t){let{initial:i,animate:o,duration:r=300,spring:n,easing:s="ease-out",delay:l=0}=t;if(!o)return;if(this.cancel(),A()){let a=m(o);Object.assign(this.element.style,{transform:a.transform||"",opacity:a.opacity||"",width:a.width||"",height:a.height||""}),t.onAnimationStart&&t.onAnimationStart(),t.onAnimationComplete&&t.onAnimationComplete();return}if(i){let a=m(i);Object.assign(this.element.style,{transform:a.transform||"",opacity:a.opacity||"",width:a.width||"",height:a.height||""});}let c=i?m(i):{},u=m(o),h=r,g=s;if(n){let a=L(n);h=a.duration,g=a.easing;}this.animation=this.element.animate([c,u],{duration:h,easing:g,delay:l,fill:"forwards"}),t.onAnimationStart&&t.onAnimationStart(),this.animation.onfinish=()=>{t.onAnimationComplete&&t.onAnimationComplete();};}async animateExit(t,i=300,o="ease-in"){if(this.cancel(),A()){let n=m(t);Object.assign(this.element.style,{transform:n.transform||"",opacity:n.opacity||"",width:n.width||"",height:n.height||""});return}let r=m(t);this.animation=this.element.animate([{},r],{duration:i,easing:o,fill:"forwards"}),await this.animation.finished;}enableLayoutAnimation(t=300,i="ease-out"){let o=this.element.getBoundingClientRect();this.previousSize={width:o.width,height:o.height},this.resizeObserver=new ResizeObserver(r=>{for(let n of r){if(!this.previousSize){this.previousSize={width:n.contentRect.width,height:n.contentRect.height};return}let s=n.contentRect.width,l=n.contentRect.height;(s!==this.previousSize.width||l!==this.previousSize.height)&&(this.cancel(),this.animation=this.element.animate([{width:`${this.previousSize.width}px`,height:`${this.previousSize.height}px`},{width:`${s}px`,height:`${l}px`}],{duration:t,easing:i,fill:"forwards"}),this.previousSize={width:s,height:l});}}),this.resizeObserver.observe(this.element);}disableLayoutAnimation(){this.resizeObserver&&(this.resizeObserver.disconnect(),this.resizeObserver=null,this.previousSize=null);}cancel(){this.animation&&(this.animation.cancel(),this.animation=null);}dispose(){this.cancel(),this.disableLayoutAnimation();}};function R(e){switch(e){case "fade":return {enter:{opacity:0},enterTo:{opacity:1},exit:{opacity:0}};case "slide-up":return {enter:{opacity:0,y:20},enterTo:{opacity:1,y:0},exit:{opacity:0,y:-20}};case "slide-down":return {enter:{opacity:0,y:-20},enterTo:{opacity:1,y:0},exit:{opacity:0,y:20}};case "slide-left":return {enter:{opacity:0,x:20},enterTo:{opacity:1,x:0},exit:{opacity:0,x:-20}};case "slide-right":return {enter:{opacity:0,x:-20},enterTo:{opacity:1,x:0},exit:{opacity:0,x:20}};case "scale":return {enter:{scale:.9},enterTo:{scale:1},exit:{scale:.9}};case "scale-fade":return {enter:{opacity:0,scale:.95},enterTo:{opacity:1,scale:1},exit:{opacity:0,scale:.95}};default:return {enter:{},enterTo:{},exit:{}}}}var y=null;function $(e){let{preset:t,enter:i,enterTo:o,exit:r,enterTiming:n={duration:300,easing:"ease-out"},exitTiming:s={duration:200,easing:"ease-in"},onEnterStart:l,onEnterComplete:c,onExitStart:u,onExitComplete:h,children:g}=e,a=t?R(t):null,P=i??a?.enter??{},C=o??a?.enterTo??{},S=r??a?.exit??{},b=null,p=null,M=y?.registerChild()??0,z=y?.staggerDelay??0,E=M*z;return chunkMKE3KA43_js.n(async()=>{b&&p&&(u?.(),await p.animateExit(S,s.duration,s.easing),h?.());}),chunkQ7IWDVJ4_js.a("div",{style:{display:"contents"},ref:T=>{T&&(b=T,p=new f(T),queueMicrotask(()=>{p&&(l?.(),p.animate({initial:P,animate:C,duration:n.duration,easing:n.easing,delay:(n.delay??0)+E,onAnimationComplete:c}));}));}},g)}function G(e){let{stagger:t=50,children:i}=e,o=0,r={registerChild:()=>o++,staggerDelay:t};return ()=>{o=0;let n=y;y=r;try{return i}finally{y=n;}}}var D={fade:{preset:"fade"},slideUp:{preset:"slide-up"},slideDown:{preset:"slide-down"},slideLeft:{preset:"slide-left"},slideRight:{preset:"slide-right"},scale:{preset:"scale"},scaleFade:{preset:"scale-fade"},modal:{enter:{opacity:0,scale:.95,y:-10},enterTo:{opacity:1,scale:1,y:0},exit:{opacity:0,scale:.95,y:10},enterTiming:{duration:200,easing:"cubic-bezier(0.16, 1, 0.3, 1)"},exitTiming:{duration:150,easing:"ease-in"}},dropdown:{enter:{opacity:0,y:-8,scale:.95},enterTo:{opacity:1,y:0,scale:1},exit:{opacity:0,y:-8,scale:.95},enterTiming:{duration:150,easing:"ease-out"},exitTiming:{duration:100,easing:"ease-in"}},tooltip:{enter:{opacity:0,scale:.9},enterTo:{opacity:1,scale:1},exit:{opacity:0,scale:.9},enterTiming:{duration:100,easing:"ease-out"},exitTiming:{duration:75,easing:"ease-in"}},notification:{enter:{opacity:0,x:100},enterTo:{opacity:1,x:0},exit:{opacity:0,x:100},enterTiming:{duration:300,easing:"cubic-bezier(0.16, 1, 0.3, 1)"},exitTiming:{duration:200,easing:"ease-in"}},page:{enter:{opacity:0},enterTo:{opacity:1},exit:{opacity:0},enterTiming:{duration:200,easing:"ease-out"},exitTiming:{duration:150,easing:"ease-in"}}};exports.a=O;exports.b=f;exports.c=$;exports.d=G;exports.e=D;//# sourceMappingURL=chunk-PDOEMOWN.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-PDOEMOWN.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/primitives/motion/Motion.ts","../src/primitives/motion/Transition.ts"],"names":["propsToKeyframe","props","keyframe","transforms","springToTiming","spring","tension","friction","mass","k","c","m","naturalFreq","dampingRatio","duration","prefersReducedMotion","mediaQueryCleanup","checkReducedMotion","mediaQuery","handler","e","cleanupMotionState","MotionController","element","initial","animate","easing","delay","finalKeyframe","initialKeyframe","from","to","animDuration","animEasing","timing","exitProps","rect","entries","entry","newWidth","newHeight","getPresetKeyframes","preset","currentTransitionGroup","Transition","customEnter","customEnterTo","customExit","enterTiming","exitTiming","onEnterStart","onEnterComplete","onExitStart","onExitComplete","children","presetFrames","enter","enterTo","exit","controller","staggerIndex","staggerDelay","additionalDelay","onCleanup","f","el","TransitionGroup","stagger","childIndex","context","previousGroup","transitions"],"mappings":"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","file":"chunk-DOGIWSDA.js","sourcesContent":["/**\n * Motion Component - Declarative animations using Web Animations API\n *\n * Provides smooth, performant animations without JavaScript RAF\n * Supports transforms, opacity, spring physics, and layout animations\n */\n\n/**\n * Animation properties that can be animated\n */\nexport interface AnimatableProps {\n x?: number\n y?: number\n scale?: number\n scaleX?: number\n scaleY?: number\n rotate?: number // in degrees\n opacity?: number\n width?: number | string\n height?: number | string\n}\n\n/**\n * Spring physics configuration\n */\nexport interface SpringConfig {\n tension?: number // Default: 170\n friction?: number // Default: 26\n mass?: number // Default: 1\n}\n\n/**\n * Motion component props\n */\nexport interface MotionProps {\n element?: HTMLElement | null\n initial?: AnimatableProps\n animate?: AnimatableProps\n exit?: AnimatableProps\n duration?: number // in milliseconds\n spring?: SpringConfig\n easing?: string // CSS easing function\n delay?: number\n onAnimationStart?: () => void\n onAnimationComplete?: () => void\n}\n\n/**\n * Convert animatable props to Web Animations API keyframe\n */\nfunction propsToKeyframe(props: AnimatableProps): Keyframe {\n const keyframe: Keyframe = {}\n\n const transforms: string[] = []\n\n if (props.x !== undefined) {\n transforms.push(`translateX(${props.x}px)`)\n }\n\n if (props.y !== undefined) {\n transforms.push(`translateY(${props.y}px)`)\n }\n\n if (props.scale !== undefined) {\n transforms.push(`scale(${props.scale})`)\n } else {\n if (props.scaleX !== undefined) {\n transforms.push(`scaleX(${props.scaleX})`)\n }\n if (props.scaleY !== undefined) {\n transforms.push(`scaleY(${props.scaleY})`)\n }\n }\n\n if (props.rotate !== undefined) {\n transforms.push(`rotate(${props.rotate}deg)`)\n }\n\n if (transforms.length > 0) {\n keyframe.transform = transforms.join(' ')\n }\n\n if (props.opacity !== undefined) {\n keyframe.opacity = props.opacity.toString()\n }\n\n if (props.width !== undefined) {\n keyframe.width =\n typeof props.width === 'number' ? `${props.width}px` : props.width\n }\n\n if (props.height !== undefined) {\n keyframe.height =\n typeof props.height === 'number' ? `${props.height}px` : props.height\n }\n\n return keyframe\n}\n\n/**\n * Calculate spring-based duration and easing\n * Based on spring physics formula\n */\nfunction springToTiming(spring: SpringConfig): {\n duration: number\n easing: string\n} {\n const tension = spring.tension ?? 170\n const friction = spring.friction ?? 26\n const mass = spring.mass ?? 1\n\n // Calculate damping ratio and natural frequency\n const k = tension\n const c = friction\n const m = mass\n\n const naturalFreq = Math.sqrt(k / m)\n const dampingRatio = c / (2 * Math.sqrt(k * m))\n\n // Calculate duration (time to settle within 1% of final value)\n const duration = (4.6 / (dampingRatio * naturalFreq)) * 1000\n\n // Create spring easing curve\n // For underdamped (bouncy) springs\n if (dampingRatio < 1) {\n // Use cubic-bezier that approximates spring behavior\n // Values tuned for natural spring feel\n const easing = `cubic-bezier(0.34, 1.56, 0.64, 1)`\n return { duration, easing }\n }\n\n // For critically damped or overdamped springs\n const easing = `cubic-bezier(0.22, 1, 0.36, 1)`\n return { duration, easing }\n}\n\n/**\n * Check if user prefers reduced motion\n * Cached at module level for performance\n */\nlet prefersReducedMotion: boolean | null = null\nlet mediaQueryCleanup: (() => void) | null = null\n\nfunction checkReducedMotion(): boolean {\n if (prefersReducedMotion === null) {\n if (typeof window !== 'undefined' && window.matchMedia) {\n const mediaQuery = window.matchMedia('(prefers-reduced-motion: reduce)')\n prefersReducedMotion = mediaQuery.matches\n // Listen for changes with proper cleanup support\n const handler = (e: MediaQueryListEvent) => {\n prefersReducedMotion = e.matches\n }\n mediaQuery.addEventListener('change', handler)\n mediaQueryCleanup = () => {\n mediaQuery.removeEventListener('change', handler)\n prefersReducedMotion = null\n mediaQueryCleanup = null\n }\n } else {\n prefersReducedMotion = false\n }\n }\n return prefersReducedMotion\n}\n\n/**\n * Cleanup motion module state (useful for testing and SSR)\n */\nexport function cleanupMotionState(): void {\n if (mediaQueryCleanup) {\n mediaQueryCleanup()\n }\n}\n\n/**\n * Motion controller class\n * Manages animations for a single element using Web Animations API\n * Respects prefers-reduced-motion accessibility setting\n */\nexport class MotionController {\n private element: HTMLElement\n private animation: Animation | null = null\n private resizeObserver: ResizeObserver | null = null\n private previousSize: { width: number; height: number } | null = null\n\n constructor(element: HTMLElement) {\n this.element = element\n }\n\n /**\n * Animate from initial to animate props\n * Respects prefers-reduced-motion: applies end state instantly if enabled\n */\n animate(props: MotionProps): void {\n const {\n initial,\n animate,\n duration = 300,\n spring,\n easing = 'ease-out',\n delay = 0,\n } = props\n\n if (!animate) return\n\n // Cancel any running animation\n this.cancel()\n\n // Respect prefers-reduced-motion: skip animation and apply final state instantly\n if (checkReducedMotion()) {\n const finalKeyframe = propsToKeyframe(animate)\n Object.assign(this.element.style, {\n transform: finalKeyframe.transform || '',\n opacity: finalKeyframe.opacity || '',\n width: finalKeyframe.width || '',\n height: finalKeyframe.height || '',\n })\n if (props.onAnimationStart) props.onAnimationStart()\n if (props.onAnimationComplete) props.onAnimationComplete()\n return\n }\n\n // Apply initial state immediately if provided\n if (initial) {\n const initialKeyframe = propsToKeyframe(initial)\n Object.assign(this.element.style, {\n transform: initialKeyframe.transform || '',\n opacity: initialKeyframe.opacity || '',\n width: initialKeyframe.width || '',\n height: initialKeyframe.height || '',\n })\n }\n\n // Create keyframes\n const from = initial ? propsToKeyframe(initial) : {}\n const to = propsToKeyframe(animate)\n\n // Calculate timing\n let animDuration = duration\n let animEasing = easing\n\n if (spring) {\n const timing = springToTiming(spring)\n animDuration = timing.duration\n animEasing = timing.easing\n }\n\n // Create animation\n this.animation = this.element.animate([from, to], {\n duration: animDuration,\n easing: animEasing,\n delay,\n fill: 'forwards',\n })\n\n // Handle callbacks\n if (props.onAnimationStart) {\n props.onAnimationStart()\n }\n\n this.animation.onfinish = () => {\n if (props.onAnimationComplete) {\n props.onAnimationComplete()\n }\n }\n }\n\n /**\n * Animate exit (used when element is being removed)\n * Respects prefers-reduced-motion: applies end state instantly if enabled\n */\n async animateExit(\n exitProps: AnimatableProps,\n duration = 300,\n easing = 'ease-in'\n ): Promise<void> {\n this.cancel()\n\n // Respect prefers-reduced-motion: skip animation\n if (checkReducedMotion()) {\n const finalKeyframe = propsToKeyframe(exitProps)\n Object.assign(this.element.style, {\n transform: finalKeyframe.transform || '',\n opacity: finalKeyframe.opacity || '',\n width: finalKeyframe.width || '',\n height: finalKeyframe.height || '',\n })\n return\n }\n\n const to = propsToKeyframe(exitProps)\n\n this.animation = this.element.animate([{}, to], {\n duration,\n easing,\n fill: 'forwards',\n })\n\n await this.animation.finished\n }\n\n /**\n * Enable layout animations (animate size changes automatically)\n */\n enableLayoutAnimation(duration = 300, easing = 'ease-out'): void {\n // Store initial size\n const rect = this.element.getBoundingClientRect()\n this.previousSize = { width: rect.width, height: rect.height }\n\n // Watch for size changes\n this.resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n if (!this.previousSize) {\n this.previousSize = {\n width: entry.contentRect.width,\n height: entry.contentRect.height,\n }\n return\n }\n\n const newWidth = entry.contentRect.width\n const newHeight = entry.contentRect.height\n\n // Only animate if size actually changed\n if (\n newWidth !== this.previousSize.width ||\n newHeight !== this.previousSize.height\n ) {\n // Animate from previous size to new size\n this.cancel()\n\n this.animation = this.element.animate(\n [\n {\n width: `${this.previousSize.width}px`,\n height: `${this.previousSize.height}px`,\n },\n {\n width: `${newWidth}px`,\n height: `${newHeight}px`,\n },\n ],\n {\n duration,\n easing,\n fill: 'forwards',\n }\n )\n\n this.previousSize = { width: newWidth, height: newHeight }\n }\n }\n })\n\n this.resizeObserver.observe(this.element)\n }\n\n /**\n * Disable layout animations\n */\n disableLayoutAnimation(): void {\n if (this.resizeObserver) {\n this.resizeObserver.disconnect()\n this.resizeObserver = null\n this.previousSize = null\n }\n }\n\n /**\n * Cancel current animation\n */\n cancel(): void {\n if (this.animation) {\n this.animation.cancel()\n this.animation = null\n }\n }\n\n /**\n * Cleanup all animations and observers\n */\n dispose(): void {\n this.cancel()\n this.disableLayoutAnimation()\n }\n}\n\n\n","/**\n * Transition Component - Coordinated Enter/Exit Animations\n *\n * Provides declarative transitions for elements entering and leaving the DOM.\n * Works seamlessly with For and conditional rendering (ternary, &&).\n */\n\nimport { onCleanup } from '../../core/signal'\nimport type { AnimatableProps, MotionController } from './Motion'\nimport { MotionController as MC } from './Motion'\nimport { f } from '../../renderers/dom/f'\n\n/**\n * Preset animation types\n */\nexport type TransitionPreset =\n | 'fade'\n | 'slide-up'\n | 'slide-down'\n | 'slide-left'\n | 'slide-right'\n | 'scale'\n | 'scale-fade'\n\n/**\n * Transition timing configuration\n */\nexport interface TransitionTiming {\n duration?: number\n delay?: number\n easing?: string\n}\n\n/**\n * Transition component props\n */\nexport interface TransitionProps {\n /** Use a preset animation */\n preset?: TransitionPreset\n /** Custom enter animation (from state) */\n enter?: AnimatableProps\n /** Custom enter animation (to state) */\n enterTo?: AnimatableProps\n /** Custom exit animation (to state) */\n exit?: AnimatableProps\n /** Enter timing */\n enterTiming?: TransitionTiming\n /** Exit timing */\n exitTiming?: TransitionTiming\n /** Callback when enter animation starts */\n onEnterStart?: () => void\n /** Callback when enter animation completes */\n onEnterComplete?: () => void\n /** Callback when exit animation starts */\n onExitStart?: () => void\n /** Callback when exit animation completes */\n onExitComplete?: () => void\n /** Children to animate */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n children: any\n}\n\n/**\n * Get animation keyframes for a preset\n */\nfunction getPresetKeyframes(preset: TransitionPreset): {\n enter: AnimatableProps\n enterTo: AnimatableProps\n exit: AnimatableProps\n} {\n switch (preset) {\n case 'fade':\n return {\n enter: { opacity: 0 },\n enterTo: { opacity: 1 },\n exit: { opacity: 0 },\n }\n case 'slide-up':\n return {\n enter: { opacity: 0, y: 20 },\n enterTo: { opacity: 1, y: 0 },\n exit: { opacity: 0, y: -20 },\n }\n case 'slide-down':\n return {\n enter: { opacity: 0, y: -20 },\n enterTo: { opacity: 1, y: 0 },\n exit: { opacity: 0, y: 20 },\n }\n case 'slide-left':\n return {\n enter: { opacity: 0, x: 20 },\n enterTo: { opacity: 1, x: 0 },\n exit: { opacity: 0, x: -20 },\n }\n case 'slide-right':\n return {\n enter: { opacity: 0, x: -20 },\n enterTo: { opacity: 1, x: 0 },\n exit: { opacity: 0, x: 20 },\n }\n case 'scale':\n return {\n enter: { scale: 0.9 },\n enterTo: { scale: 1 },\n exit: { scale: 0.9 },\n }\n case 'scale-fade':\n return {\n enter: { opacity: 0, scale: 0.95 },\n enterTo: { opacity: 1, scale: 1 },\n exit: { opacity: 0, scale: 0.95 },\n }\n default:\n return {\n enter: {},\n enterTo: {},\n exit: {},\n }\n }\n}\n\n/**\n * TransitionGroup context for staggered animations\n */\ninterface TransitionGroupContext {\n registerChild: () => number\n staggerDelay: number\n}\n\nlet currentTransitionGroup: TransitionGroupContext | null = null\n\n/**\n * Transition component for animated enter/exit\n *\n * @example\n * {() => visible() && (\n * <Transition preset=\"fade\">\n * <div>Content appears with fade</div>\n * </Transition>\n * )}\n *\n * @example\n * <Transition\n * enter={{ opacity: 0, y: 50 }}\n * enterTo={{ opacity: 1, y: 0 }}\n * exit={{ opacity: 0, y: -50 }}\n * enterTiming={{ duration: 300, easing: 'ease-out' }}\n * exitTiming={{ duration: 200, easing: 'ease-in' }}\n * >\n * <div>Custom animated content</div>\n * </Transition>\n */\nexport function Transition(props: TransitionProps) {\n const {\n preset,\n enter: customEnter,\n enterTo: customEnterTo,\n exit: customExit,\n enterTiming = { duration: 300, easing: 'ease-out' },\n exitTiming = { duration: 200, easing: 'ease-in' },\n onEnterStart,\n onEnterComplete,\n onExitStart,\n onExitComplete,\n children,\n } = props\n\n // Get keyframes from preset or custom props\n const presetFrames = preset ? getPresetKeyframes(preset) : null\n const enter = customEnter ?? presetFrames?.enter ?? {}\n const enterTo = customEnterTo ?? presetFrames?.enterTo ?? {}\n const exit = customExit ?? presetFrames?.exit ?? {}\n\n // Track the mounted element and controller\n let element: HTMLElement | null = null\n let controller: MotionController | null = null\n\n // Get stagger delay from group if present\n const staggerIndex = currentTransitionGroup?.registerChild() ?? 0\n const staggerDelay = currentTransitionGroup?.staggerDelay ?? 0\n const additionalDelay = staggerIndex * staggerDelay\n\n // Setup cleanup for exit animation\n onCleanup(async () => {\n if (element && controller) {\n onExitStart?.()\n\n await controller.animateExit(exit, exitTiming.duration, exitTiming.easing)\n\n onExitComplete?.()\n }\n })\n\n // Return wrapper div with ref to capture element\n return f(\n 'div',\n {\n style: { display: 'contents' },\n ref: (el: HTMLElement | null) => {\n if (!el) return\n\n element = el\n controller = new MC(el)\n\n // Schedule enter animation after DOM update\n queueMicrotask(() => {\n if (controller) {\n onEnterStart?.()\n\n controller.animate({\n initial: enter,\n animate: enterTo,\n duration: enterTiming.duration,\n easing: enterTiming.easing,\n delay: (enterTiming.delay ?? 0) + additionalDelay,\n onAnimationComplete: onEnterComplete,\n })\n }\n })\n },\n },\n children\n )\n}\n\n/**\n * TransitionGroup props\n */\nexport interface TransitionGroupProps {\n /** Delay between each child animation (stagger effect) */\n stagger?: number\n /** Children (should contain Transition components) */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n children: any\n}\n\n/**\n * TransitionGroup component for staggered animations\n *\n * @example\n * <TransitionGroup stagger={50}>\n * <For each={items}>\n * {(item) => (\n * <Transition preset=\"slide-up\">\n * <div>{item.name}</div>\n * </Transition>\n * )}\n * </For>\n * </TransitionGroup>\n */\nexport function TransitionGroup(props: TransitionGroupProps) {\n const { stagger = 50, children } = props\n\n let childIndex = 0\n\n const context: TransitionGroupContext = {\n registerChild: () => childIndex++,\n staggerDelay: stagger,\n }\n\n return () => {\n // Reset child index for each render\n childIndex = 0\n\n // Set context for child Transitions\n const previousGroup = currentTransitionGroup\n currentTransitionGroup = context\n\n try {\n return children\n } finally {\n currentTransitionGroup = previousGroup\n }\n }\n}\n\n/**\n * Preset transition configurations\n */\nexport const transitions = {\n fade: { preset: 'fade' },\n slideUp: { preset: 'slide-up' },\n slideDown: { preset: 'slide-down' },\n slideLeft: { preset: 'slide-left' },\n slideRight: { preset: 'slide-right' },\n scale: { preset: 'scale' },\n scaleFade: { preset: 'scale-fade' },\n\n // Common UI patterns\n modal: {\n enter: { opacity: 0, scale: 0.95, y: -10 },\n enterTo: { opacity: 1, scale: 1, y: 0 },\n exit: { opacity: 0, scale: 0.95, y: 10 },\n enterTiming: { duration: 200, easing: 'cubic-bezier(0.16, 1, 0.3, 1)' },\n exitTiming: { duration: 150, easing: 'ease-in' },\n },\n\n dropdown: {\n enter: { opacity: 0, y: -8, scale: 0.95 },\n enterTo: { opacity: 1, y: 0, scale: 1 },\n exit: { opacity: 0, y: -8, scale: 0.95 },\n enterTiming: { duration: 150, easing: 'ease-out' },\n exitTiming: { duration: 100, easing: 'ease-in' },\n },\n\n tooltip: {\n enter: { opacity: 0, scale: 0.9 },\n enterTo: { opacity: 1, scale: 1 },\n exit: { opacity: 0, scale: 0.9 },\n enterTiming: { duration: 100, easing: 'ease-out' },\n exitTiming: { duration: 75, easing: 'ease-in' },\n },\n\n notification: {\n enter: { opacity: 0, x: 100 },\n enterTo: { opacity: 1, x: 0 },\n exit: { opacity: 0, x: 100 },\n enterTiming: { duration: 300, easing: 'cubic-bezier(0.16, 1, 0.3, 1)' },\n exitTiming: { duration: 200, easing: 'ease-in' },\n },\n\n page: {\n enter: { opacity: 0 },\n enterTo: { opacity: 1 },\n exit: { opacity: 0 },\n enterTiming: { duration: 200, easing: 'ease-out' },\n exitTiming: { duration: 150, easing: 'ease-in' },\n },\n} satisfies Record<string, Omit<TransitionProps, 'children'>>\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/primitives/motion/Motion.ts","../src/primitives/motion/Transition.ts"],"names":["propsToKeyframe","props","keyframe","transforms","springToTiming","spring","tension","friction","mass","k","c","m","naturalFreq","dampingRatio","duration","prefersReducedMotion","mediaQueryCleanup","checkReducedMotion","mediaQuery","handler","e","cleanupMotionState","MotionController","element","initial","animate","easing","delay","finalKeyframe","initialKeyframe","from","to","animDuration","animEasing","timing","exitProps","rect","entries","entry","newWidth","newHeight","getPresetKeyframes","preset","currentTransitionGroup","Transition","customEnter","customEnterTo","customExit","enterTiming","exitTiming","onEnterStart","onEnterComplete","onExitStart","onExitComplete","children","presetFrames","enter","enterTo","exit","controller","staggerIndex","staggerDelay","additionalDelay","onCleanup","f","el","TransitionGroup","stagger","childIndex","context","previousGroup","transitions"],"mappings":"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","file":"chunk-PDOEMOWN.js","sourcesContent":["/**\n * Motion Component - Declarative animations using Web Animations API\n *\n * Provides smooth, performant animations without JavaScript RAF\n * Supports transforms, opacity, spring physics, and layout animations\n */\n\n/**\n * Animation properties that can be animated\n */\nexport interface AnimatableProps {\n x?: number\n y?: number\n scale?: number\n scaleX?: number\n scaleY?: number\n rotate?: number // in degrees\n opacity?: number\n width?: number | string\n height?: number | string\n}\n\n/**\n * Spring physics configuration\n */\nexport interface SpringConfig {\n tension?: number // Default: 170\n friction?: number // Default: 26\n mass?: number // Default: 1\n}\n\n/**\n * Motion component props\n */\nexport interface MotionProps {\n element?: HTMLElement | null\n initial?: AnimatableProps\n animate?: AnimatableProps\n exit?: AnimatableProps\n duration?: number // in milliseconds\n spring?: SpringConfig\n easing?: string // CSS easing function\n delay?: number\n onAnimationStart?: () => void\n onAnimationComplete?: () => void\n}\n\n/**\n * Convert animatable props to Web Animations API keyframe\n */\nfunction propsToKeyframe(props: AnimatableProps): Keyframe {\n const keyframe: Keyframe = {}\n\n const transforms: string[] = []\n\n if (props.x !== undefined) {\n transforms.push(`translateX(${props.x}px)`)\n }\n\n if (props.y !== undefined) {\n transforms.push(`translateY(${props.y}px)`)\n }\n\n if (props.scale !== undefined) {\n transforms.push(`scale(${props.scale})`)\n } else {\n if (props.scaleX !== undefined) {\n transforms.push(`scaleX(${props.scaleX})`)\n }\n if (props.scaleY !== undefined) {\n transforms.push(`scaleY(${props.scaleY})`)\n }\n }\n\n if (props.rotate !== undefined) {\n transforms.push(`rotate(${props.rotate}deg)`)\n }\n\n if (transforms.length > 0) {\n keyframe.transform = transforms.join(' ')\n }\n\n if (props.opacity !== undefined) {\n keyframe.opacity = props.opacity.toString()\n }\n\n if (props.width !== undefined) {\n keyframe.width =\n typeof props.width === 'number' ? `${props.width}px` : props.width\n }\n\n if (props.height !== undefined) {\n keyframe.height =\n typeof props.height === 'number' ? `${props.height}px` : props.height\n }\n\n return keyframe\n}\n\n/**\n * Calculate spring-based duration and easing\n * Based on spring physics formula\n */\nfunction springToTiming(spring: SpringConfig): {\n duration: number\n easing: string\n} {\n const tension = spring.tension ?? 170\n const friction = spring.friction ?? 26\n const mass = spring.mass ?? 1\n\n // Calculate damping ratio and natural frequency\n const k = tension\n const c = friction\n const m = mass\n\n const naturalFreq = Math.sqrt(k / m)\n const dampingRatio = c / (2 * Math.sqrt(k * m))\n\n // Calculate duration (time to settle within 1% of final value)\n const duration = (4.6 / (dampingRatio * naturalFreq)) * 1000\n\n // Create spring easing curve\n // For underdamped (bouncy) springs\n if (dampingRatio < 1) {\n // Use cubic-bezier that approximates spring behavior\n // Values tuned for natural spring feel\n const easing = `cubic-bezier(0.34, 1.56, 0.64, 1)`\n return { duration, easing }\n }\n\n // For critically damped or overdamped springs\n const easing = `cubic-bezier(0.22, 1, 0.36, 1)`\n return { duration, easing }\n}\n\n/**\n * Check if user prefers reduced motion\n * Cached at module level for performance\n */\nlet prefersReducedMotion: boolean | null = null\nlet mediaQueryCleanup: (() => void) | null = null\n\nfunction checkReducedMotion(): boolean {\n if (prefersReducedMotion === null) {\n if (typeof window !== 'undefined' && window.matchMedia) {\n const mediaQuery = window.matchMedia('(prefers-reduced-motion: reduce)')\n prefersReducedMotion = mediaQuery.matches\n // Listen for changes with proper cleanup support\n const handler = (e: MediaQueryListEvent) => {\n prefersReducedMotion = e.matches\n }\n mediaQuery.addEventListener('change', handler)\n mediaQueryCleanup = () => {\n mediaQuery.removeEventListener('change', handler)\n prefersReducedMotion = null\n mediaQueryCleanup = null\n }\n } else {\n prefersReducedMotion = false\n }\n }\n return prefersReducedMotion\n}\n\n/**\n * Cleanup motion module state (useful for testing and SSR)\n */\nexport function cleanupMotionState(): void {\n if (mediaQueryCleanup) {\n mediaQueryCleanup()\n }\n}\n\n/**\n * Motion controller class\n * Manages animations for a single element using Web Animations API\n * Respects prefers-reduced-motion accessibility setting\n */\nexport class MotionController {\n private element: HTMLElement\n private animation: Animation | null = null\n private resizeObserver: ResizeObserver | null = null\n private previousSize: { width: number; height: number } | null = null\n\n constructor(element: HTMLElement) {\n this.element = element\n }\n\n /**\n * Animate from initial to animate props\n * Respects prefers-reduced-motion: applies end state instantly if enabled\n */\n animate(props: MotionProps): void {\n const {\n initial,\n animate,\n duration = 300,\n spring,\n easing = 'ease-out',\n delay = 0,\n } = props\n\n if (!animate) return\n\n // Cancel any running animation\n this.cancel()\n\n // Respect prefers-reduced-motion: skip animation and apply final state instantly\n if (checkReducedMotion()) {\n const finalKeyframe = propsToKeyframe(animate)\n Object.assign(this.element.style, {\n transform: finalKeyframe.transform || '',\n opacity: finalKeyframe.opacity || '',\n width: finalKeyframe.width || '',\n height: finalKeyframe.height || '',\n })\n if (props.onAnimationStart) props.onAnimationStart()\n if (props.onAnimationComplete) props.onAnimationComplete()\n return\n }\n\n // Apply initial state immediately if provided\n if (initial) {\n const initialKeyframe = propsToKeyframe(initial)\n Object.assign(this.element.style, {\n transform: initialKeyframe.transform || '',\n opacity: initialKeyframe.opacity || '',\n width: initialKeyframe.width || '',\n height: initialKeyframe.height || '',\n })\n }\n\n // Create keyframes\n const from = initial ? propsToKeyframe(initial) : {}\n const to = propsToKeyframe(animate)\n\n // Calculate timing\n let animDuration = duration\n let animEasing = easing\n\n if (spring) {\n const timing = springToTiming(spring)\n animDuration = timing.duration\n animEasing = timing.easing\n }\n\n // Create animation\n this.animation = this.element.animate([from, to], {\n duration: animDuration,\n easing: animEasing,\n delay,\n fill: 'forwards',\n })\n\n // Handle callbacks\n if (props.onAnimationStart) {\n props.onAnimationStart()\n }\n\n this.animation.onfinish = () => {\n if (props.onAnimationComplete) {\n props.onAnimationComplete()\n }\n }\n }\n\n /**\n * Animate exit (used when element is being removed)\n * Respects prefers-reduced-motion: applies end state instantly if enabled\n */\n async animateExit(\n exitProps: AnimatableProps,\n duration = 300,\n easing = 'ease-in'\n ): Promise<void> {\n this.cancel()\n\n // Respect prefers-reduced-motion: skip animation\n if (checkReducedMotion()) {\n const finalKeyframe = propsToKeyframe(exitProps)\n Object.assign(this.element.style, {\n transform: finalKeyframe.transform || '',\n opacity: finalKeyframe.opacity || '',\n width: finalKeyframe.width || '',\n height: finalKeyframe.height || '',\n })\n return\n }\n\n const to = propsToKeyframe(exitProps)\n\n this.animation = this.element.animate([{}, to], {\n duration,\n easing,\n fill: 'forwards',\n })\n\n await this.animation.finished\n }\n\n /**\n * Enable layout animations (animate size changes automatically)\n */\n enableLayoutAnimation(duration = 300, easing = 'ease-out'): void {\n // Store initial size\n const rect = this.element.getBoundingClientRect()\n this.previousSize = { width: rect.width, height: rect.height }\n\n // Watch for size changes\n this.resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n if (!this.previousSize) {\n this.previousSize = {\n width: entry.contentRect.width,\n height: entry.contentRect.height,\n }\n return\n }\n\n const newWidth = entry.contentRect.width\n const newHeight = entry.contentRect.height\n\n // Only animate if size actually changed\n if (\n newWidth !== this.previousSize.width ||\n newHeight !== this.previousSize.height\n ) {\n // Animate from previous size to new size\n this.cancel()\n\n this.animation = this.element.animate(\n [\n {\n width: `${this.previousSize.width}px`,\n height: `${this.previousSize.height}px`,\n },\n {\n width: `${newWidth}px`,\n height: `${newHeight}px`,\n },\n ],\n {\n duration,\n easing,\n fill: 'forwards',\n }\n )\n\n this.previousSize = { width: newWidth, height: newHeight }\n }\n }\n })\n\n this.resizeObserver.observe(this.element)\n }\n\n /**\n * Disable layout animations\n */\n disableLayoutAnimation(): void {\n if (this.resizeObserver) {\n this.resizeObserver.disconnect()\n this.resizeObserver = null\n this.previousSize = null\n }\n }\n\n /**\n * Cancel current animation\n */\n cancel(): void {\n if (this.animation) {\n this.animation.cancel()\n this.animation = null\n }\n }\n\n /**\n * Cleanup all animations and observers\n */\n dispose(): void {\n this.cancel()\n this.disableLayoutAnimation()\n }\n}\n\n\n","/**\n * Transition Component - Coordinated Enter/Exit Animations\n *\n * Provides declarative transitions for elements entering and leaving the DOM.\n * Works seamlessly with For and conditional rendering (ternary, &&).\n */\n\nimport { onCleanup } from '../../core/signal'\nimport type { AnimatableProps, MotionController } from './Motion'\nimport { MotionController as MC } from './Motion'\nimport { f } from '../../renderers/dom/f'\n\n/**\n * Preset animation types\n */\nexport type TransitionPreset =\n | 'fade'\n | 'slide-up'\n | 'slide-down'\n | 'slide-left'\n | 'slide-right'\n | 'scale'\n | 'scale-fade'\n\n/**\n * Transition timing configuration\n */\nexport interface TransitionTiming {\n duration?: number\n delay?: number\n easing?: string\n}\n\n/**\n * Transition component props\n */\nexport interface TransitionProps {\n /** Use a preset animation */\n preset?: TransitionPreset\n /** Custom enter animation (from state) */\n enter?: AnimatableProps\n /** Custom enter animation (to state) */\n enterTo?: AnimatableProps\n /** Custom exit animation (to state) */\n exit?: AnimatableProps\n /** Enter timing */\n enterTiming?: TransitionTiming\n /** Exit timing */\n exitTiming?: TransitionTiming\n /** Callback when enter animation starts */\n onEnterStart?: () => void\n /** Callback when enter animation completes */\n onEnterComplete?: () => void\n /** Callback when exit animation starts */\n onExitStart?: () => void\n /** Callback when exit animation completes */\n onExitComplete?: () => void\n /** Children to animate */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n children: any\n}\n\n/**\n * Get animation keyframes for a preset\n */\nfunction getPresetKeyframes(preset: TransitionPreset): {\n enter: AnimatableProps\n enterTo: AnimatableProps\n exit: AnimatableProps\n} {\n switch (preset) {\n case 'fade':\n return {\n enter: { opacity: 0 },\n enterTo: { opacity: 1 },\n exit: { opacity: 0 },\n }\n case 'slide-up':\n return {\n enter: { opacity: 0, y: 20 },\n enterTo: { opacity: 1, y: 0 },\n exit: { opacity: 0, y: -20 },\n }\n case 'slide-down':\n return {\n enter: { opacity: 0, y: -20 },\n enterTo: { opacity: 1, y: 0 },\n exit: { opacity: 0, y: 20 },\n }\n case 'slide-left':\n return {\n enter: { opacity: 0, x: 20 },\n enterTo: { opacity: 1, x: 0 },\n exit: { opacity: 0, x: -20 },\n }\n case 'slide-right':\n return {\n enter: { opacity: 0, x: -20 },\n enterTo: { opacity: 1, x: 0 },\n exit: { opacity: 0, x: 20 },\n }\n case 'scale':\n return {\n enter: { scale: 0.9 },\n enterTo: { scale: 1 },\n exit: { scale: 0.9 },\n }\n case 'scale-fade':\n return {\n enter: { opacity: 0, scale: 0.95 },\n enterTo: { opacity: 1, scale: 1 },\n exit: { opacity: 0, scale: 0.95 },\n }\n default:\n return {\n enter: {},\n enterTo: {},\n exit: {},\n }\n }\n}\n\n/**\n * TransitionGroup context for staggered animations\n */\ninterface TransitionGroupContext {\n registerChild: () => number\n staggerDelay: number\n}\n\nlet currentTransitionGroup: TransitionGroupContext | null = null\n\n/**\n * Transition component for animated enter/exit\n *\n * @example\n * {() => visible() && (\n * <Transition preset=\"fade\">\n * <div>Content appears with fade</div>\n * </Transition>\n * )}\n *\n * @example\n * <Transition\n * enter={{ opacity: 0, y: 50 }}\n * enterTo={{ opacity: 1, y: 0 }}\n * exit={{ opacity: 0, y: -50 }}\n * enterTiming={{ duration: 300, easing: 'ease-out' }}\n * exitTiming={{ duration: 200, easing: 'ease-in' }}\n * >\n * <div>Custom animated content</div>\n * </Transition>\n */\nexport function Transition(props: TransitionProps) {\n const {\n preset,\n enter: customEnter,\n enterTo: customEnterTo,\n exit: customExit,\n enterTiming = { duration: 300, easing: 'ease-out' },\n exitTiming = { duration: 200, easing: 'ease-in' },\n onEnterStart,\n onEnterComplete,\n onExitStart,\n onExitComplete,\n children,\n } = props\n\n // Get keyframes from preset or custom props\n const presetFrames = preset ? getPresetKeyframes(preset) : null\n const enter = customEnter ?? presetFrames?.enter ?? {}\n const enterTo = customEnterTo ?? presetFrames?.enterTo ?? {}\n const exit = customExit ?? presetFrames?.exit ?? {}\n\n // Track the mounted element and controller\n let element: HTMLElement | null = null\n let controller: MotionController | null = null\n\n // Get stagger delay from group if present\n const staggerIndex = currentTransitionGroup?.registerChild() ?? 0\n const staggerDelay = currentTransitionGroup?.staggerDelay ?? 0\n const additionalDelay = staggerIndex * staggerDelay\n\n // Setup cleanup for exit animation\n onCleanup(async () => {\n if (element && controller) {\n onExitStart?.()\n\n await controller.animateExit(exit, exitTiming.duration, exitTiming.easing)\n\n onExitComplete?.()\n }\n })\n\n // Return wrapper div with ref to capture element\n return f(\n 'div',\n {\n style: { display: 'contents' },\n ref: (el: HTMLElement | null) => {\n if (!el) return\n\n element = el\n controller = new MC(el)\n\n // Schedule enter animation after DOM update\n queueMicrotask(() => {\n if (controller) {\n onEnterStart?.()\n\n controller.animate({\n initial: enter,\n animate: enterTo,\n duration: enterTiming.duration,\n easing: enterTiming.easing,\n delay: (enterTiming.delay ?? 0) + additionalDelay,\n onAnimationComplete: onEnterComplete,\n })\n }\n })\n },\n },\n children\n )\n}\n\n/**\n * TransitionGroup props\n */\nexport interface TransitionGroupProps {\n /** Delay between each child animation (stagger effect) */\n stagger?: number\n /** Children (should contain Transition components) */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n children: any\n}\n\n/**\n * TransitionGroup component for staggered animations\n *\n * @example\n * <TransitionGroup stagger={50}>\n * <For each={items}>\n * {(item) => (\n * <Transition preset=\"slide-up\">\n * <div>{item.name}</div>\n * </Transition>\n * )}\n * </For>\n * </TransitionGroup>\n */\nexport function TransitionGroup(props: TransitionGroupProps) {\n const { stagger = 50, children } = props\n\n let childIndex = 0\n\n const context: TransitionGroupContext = {\n registerChild: () => childIndex++,\n staggerDelay: stagger,\n }\n\n return () => {\n // Reset child index for each render\n childIndex = 0\n\n // Set context for child Transitions\n const previousGroup = currentTransitionGroup\n currentTransitionGroup = context\n\n try {\n return children\n } finally {\n currentTransitionGroup = previousGroup\n }\n }\n}\n\n/**\n * Preset transition configurations\n */\nexport const transitions = {\n fade: { preset: 'fade' },\n slideUp: { preset: 'slide-up' },\n slideDown: { preset: 'slide-down' },\n slideLeft: { preset: 'slide-left' },\n slideRight: { preset: 'slide-right' },\n scale: { preset: 'scale' },\n scaleFade: { preset: 'scale-fade' },\n\n // Common UI patterns\n modal: {\n enter: { opacity: 0, scale: 0.95, y: -10 },\n enterTo: { opacity: 1, scale: 1, y: 0 },\n exit: { opacity: 0, scale: 0.95, y: 10 },\n enterTiming: { duration: 200, easing: 'cubic-bezier(0.16, 1, 0.3, 1)' },\n exitTiming: { duration: 150, easing: 'ease-in' },\n },\n\n dropdown: {\n enter: { opacity: 0, y: -8, scale: 0.95 },\n enterTo: { opacity: 1, y: 0, scale: 1 },\n exit: { opacity: 0, y: -8, scale: 0.95 },\n enterTiming: { duration: 150, easing: 'ease-out' },\n exitTiming: { duration: 100, easing: 'ease-in' },\n },\n\n tooltip: {\n enter: { opacity: 0, scale: 0.9 },\n enterTo: { opacity: 1, scale: 1 },\n exit: { opacity: 0, scale: 0.9 },\n enterTiming: { duration: 100, easing: 'ease-out' },\n exitTiming: { duration: 75, easing: 'ease-in' },\n },\n\n notification: {\n enter: { opacity: 0, x: 100 },\n enterTo: { opacity: 1, x: 0 },\n exit: { opacity: 0, x: 100 },\n enterTiming: { duration: 300, easing: 'cubic-bezier(0.16, 1, 0.3, 1)' },\n exitTiming: { duration: 200, easing: 'ease-in' },\n },\n\n page: {\n enter: { opacity: 0 },\n enterTo: { opacity: 1 },\n exit: { opacity: 0 },\n enterTiming: { duration: 200, easing: 'ease-out' },\n exitTiming: { duration: 150, easing: 'ease-in' },\n },\n} satisfies Record<string, Omit<TransitionProps, 'children'>>\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
'use strict';var
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
'use strict';var chunkMKE3KA43_js=require('./chunk-MKE3KA43.js');function x(i){if(!i)return {};let n={};i.display&&(n.display=i.display),i.flex!==void 0&&(n.flex=i.flex),i.flexDirection&&(n.flexDirection=i.flexDirection),i.flexWrap&&(n.flexWrap=i.flexWrap),i.justifyContent&&(n.justifyContent=i.justifyContent),i.alignItems&&(n.alignItems=i.alignItems),i.alignSelf&&(n.alignSelf=i.alignSelf),i.gap!==void 0&&(n.gap=`${i.gap}px`),i.padding!==void 0&&(n.padding=`${i.padding}px`),i.paddingTop!==void 0&&(n.paddingTop=`${i.paddingTop}px`),i.paddingRight!==void 0&&(n.paddingRight=`${i.paddingRight}px`),i.paddingBottom!==void 0&&(n.paddingBottom=`${i.paddingBottom}px`),i.paddingLeft!==void 0&&(n.paddingLeft=`${i.paddingLeft}px`),i.paddingHorizontal!==void 0&&(n.paddingLeft=`${i.paddingHorizontal}px`,n.paddingRight=`${i.paddingHorizontal}px`),i.paddingVertical!==void 0&&(n.paddingTop=`${i.paddingVertical}px`,n.paddingBottom=`${i.paddingVertical}px`),i.margin!==void 0&&(n.margin=`${i.margin}px`),i.marginTop!==void 0&&(n.marginTop=`${i.marginTop}px`),i.marginRight!==void 0&&(n.marginRight=`${i.marginRight}px`),i.marginBottom!==void 0&&(n.marginBottom=`${i.marginBottom}px`),i.marginLeft!==void 0&&(n.marginLeft=`${i.marginLeft}px`),i.marginHorizontal!==void 0&&(n.marginLeft=`${i.marginHorizontal}px`,n.marginRight=`${i.marginHorizontal}px`),i.marginVertical!==void 0&&(n.marginTop=`${i.marginVertical}px`,n.marginBottom=`${i.marginVertical}px`),i.width!==void 0&&(n.width=typeof i.width=="number"?`${i.width}px`:i.width),i.height!==void 0&&(n.height=typeof i.height=="number"?`${i.height}px`:i.height),i.minWidth!==void 0&&(n.minWidth=`${i.minWidth}px`),i.maxWidth!==void 0&&(n.maxWidth=`${i.maxWidth}px`),i.minHeight!==void 0&&(n.minHeight=`${i.minHeight}px`),i.maxHeight!==void 0&&(n.maxHeight=`${i.maxHeight}px`),i.backgroundColor&&(n.backgroundColor=i.backgroundColor),i.borderRadius!==void 0&&(n.borderRadius=`${i.borderRadius}px`),i.borderTopLeftRadius!==void 0&&(n.borderTopLeftRadius=`${i.borderTopLeftRadius}px`),i.borderTopRightRadius!==void 0&&(n.borderTopRightRadius=`${i.borderTopRightRadius}px`),i.borderBottomLeftRadius!==void 0&&(n.borderBottomLeftRadius=`${i.borderBottomLeftRadius}px`),i.borderBottomRightRadius!==void 0&&(n.borderBottomRightRadius=`${i.borderBottomRightRadius}px`),i.opacity!==void 0&&(n.opacity=i.opacity),i.borderWidth!==void 0&&(n.borderWidth=`${i.borderWidth}px`),i.borderColor&&(n.borderColor=i.borderColor),i.borderTopWidth!==void 0&&(n.borderTopWidth=`${i.borderTopWidth}px`),i.borderRightWidth!==void 0&&(n.borderRightWidth=`${i.borderRightWidth}px`),i.borderBottomWidth!==void 0&&(n.borderBottomWidth=`${i.borderBottomWidth}px`),i.borderLeftWidth!==void 0&&(n.borderLeftWidth=`${i.borderLeftWidth}px`),i.position&&(n.position=i.position),i.top!==void 0&&(n.top=`${i.top}px`),i.right!==void 0&&(n.right=`${i.right}px`),i.bottom!==void 0&&(n.bottom=`${i.bottom}px`),i.left!==void 0&&(n.left=`${i.left}px`),i.zIndex!==void 0&&(n.zIndex=i.zIndex),i.transform&&(n.transform=i.transform);let o=i;return o.color&&(n.color=o.color),o.fontSize!==void 0&&(n.fontSize=`${o.fontSize}px`),o.fontWeight&&(n.fontWeight=o.fontWeight),o.fontFamily&&(n.fontFamily=o.fontFamily),o.fontStyle&&(n.fontStyle=o.fontStyle),o.textAlign&&(n.textAlign=o.textAlign),o.textDecoration&&(n.textDecoration=o.textDecoration),o.lineHeight!==void 0&&(n.lineHeight=`${o.lineHeight}px`),o.letterSpacing!==void 0&&(n.letterSpacing=`${o.letterSpacing}px`),n}function k(i){return chunkMKE3KA43_js.m(i)}function e(i){return k(i)||i!==null&&typeof i=="object"&&"value"in i&&"peek"in i?i.value:i}function b(i,n,o,r){if(!n)return;let d=Array.isArray(n)?n:[n];for(let t of d)if(!(!t||!t.type))switch(t.type){case "canvas-rect":D(i,t.props);break;case "canvas-circle":W(i,t.props);break;case "canvas-path":C(i,t.props);break;case "canvas-text":S(i,t.props);break;case "canvas-line":v(i,t.props);break;case "canvas-arc":T(i,t.props);break}}function D(i,n){let o=e(n.x),r=e(n.y),d=e(n.width),t=e(n.height),a=e(n.fill),f=e(n.stroke),p=e(n.strokeWidth),g=e(n.opacity);i.save(),g!==void 0&&(i.globalAlpha=g),a&&(i.fillStyle=a,i.fillRect(o,r,d,t)),f&&(i.strokeStyle=f,i.lineWidth=p||1,i.strokeRect(o,r,d,t)),i.restore();}function W(i,n){let o=e(n.x),r=e(n.y),d=e(n.radius),t=e(n.fill),a=e(n.stroke),f=e(n.strokeWidth),p=e(n.opacity);i.save(),p!==void 0&&(i.globalAlpha=p),i.beginPath(),i.arc(o,r,d,0,2*Math.PI),t&&(i.fillStyle=t,i.fill()),a&&(i.strokeStyle=a,i.lineWidth=f||1,i.stroke()),i.restore();}function C(i,n){let o=e(n.d),r=e(n.fill),d=e(n.stroke),t=e(n.strokeWidth),a=e(n.opacity);i.save(),a!==void 0&&(i.globalAlpha=a);let f=new Path2D(o);r&&(i.fillStyle=r,i.fill(f)),d&&(i.strokeStyle=d,i.lineWidth=t||1,i.stroke(f)),i.restore();}function S(i,n){let o=e(n.x),r=e(n.y),d=e(n.text),t=e(n.fill),a=e(n.fontSize)||12,f=e(n.fontFamily)||"sans-serif",p=e(n.fontWeight)||"normal",g=e(n.textAlign)||"left",m=e(n.textBaseline)||"alphabetic";i.save(),i.font=`${p} ${a}px ${f}`,i.textAlign=g,i.textBaseline=m,t&&(i.fillStyle=t,i.fillText(d,o,r)),i.restore();}function v(i,n){let o=e(n.x1),r=e(n.y1),d=e(n.x2),t=e(n.y2),a=e(n.stroke)||"black",f=e(n.strokeWidth)||1,p=e(n.opacity);i.save(),p!==void 0&&(i.globalAlpha=p),i.beginPath(),i.moveTo(o,r),i.lineTo(d,t),i.strokeStyle=a,i.lineWidth=f,i.stroke(),i.restore();}function T(i,n){let o=e(n.x),r=e(n.y),d=e(n.radius),t=e(n.startAngle),a=e(n.endAngle),f=e(n.counterclockwise)||false,p=e(n.fill),g=e(n.stroke),m=e(n.strokeWidth),h=e(n.opacity);i.save(),h!==void 0&&(i.globalAlpha=h),i.beginPath(),i.arc(o,r,d,t,a,f),p&&(i.fillStyle=p,i.fill()),g&&(i.strokeStyle=g,i.lineWidth=m||1,i.stroke()),i.restore();}function N(i){let{width:n,height:o,children:r,style:d,id:t,...a}=i;return {type:"canvas",props:{...a,id:t,width:n,height:o,style:x(d),ref:f=>{if(!f||typeof requestAnimationFrame>"u")return;let p=f.getContext("2d");p&&import('./signal-AXKUQJVA.js').then(({effect:g,onCleanup:m,isSignal:h})=>{let c,R=()=>{c!==void 0&&cancelAnimationFrame(c),c=requestAnimationFrame(()=>{p.clearRect(0,0,n,o),b(p,r),c=void 0;});};g(()=>{let w=Array.isArray(r)?r:[r];for(let u of w)if(u&&u.props)for(let $ in u.props){let s=u.props[$];h(s)&&s.value;}R(),m(()=>{c!==void 0&&(cancelAnimationFrame(c),c=void 0);});});}).catch(g=>{console.error("[Flexium Canvas] Failed to load signal module:",g);});}},children:[]}}function I(i){return {type:"canvas-rect",props:i,children:[]}}function j(i){return {type:"canvas-circle",props:i,children:[]}}function M(i){return {type:"canvas-arc",props:i,children:[]}}function E(i){return {type:"canvas-line",props:i,children:[]}}function J(i){return {type:"canvas-path",props:i,children:[]}}function O(i){return {type:"canvas-text",props:i,children:[]}}exports.a=x;exports.b=e;exports.c=b;exports.d=N;exports.e=I;exports.f=j;exports.g=M;exports.h=E;exports.i=J;exports.j=O;//# sourceMappingURL=chunk-RIVNKTUR.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-RIVNKTUR.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/primitives/utils.ts","../src/primitives/canvas/utils.ts","../src/primitives/canvas/renderer.ts","../src/primitives/canvas/Canvas.ts","../src/primitives/canvas/DrawRect.ts","../src/primitives/canvas/DrawCircle.ts","../src/primitives/canvas/DrawArc.ts","../src/primitives/canvas/DrawLine.ts","../src/primitives/canvas/DrawPath.ts","../src/primitives/canvas/DrawText.ts"],"names":["normalizeStyle","style","css","textStyle","isSignal","value","unwrapSignal","renderCanvasChildren","ctx","children","_width","_height","childArray","child","renderRect","renderCircle","renderPath","renderText","renderLine","renderArc","props","x","y","width","height","fill","stroke","strokeWidth","opacity","radius","d","path","text","fontSize","fontFamily","fontWeight","textAlign","textBaseline","x1","y1","x2","y2","startAngle","endAngle","counterclockwise","Canvas","id","rest","canvas","effect","onCleanup","rafId","scheduleRender","key","err","DrawRect","DrawCircle","DrawArc","DrawLine","DrawPath","DrawText"],"mappings":"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","file":"chunk-GDBJ322I.js","sourcesContent":["/**\n * Primitive utilities\n */\n\nimport type { CommonStyle, TextStyle } from './types'\n\n/**\n * Normalize CommonStyle to CSS properties\n */\nexport function normalizeStyle(\n style?: CommonStyle | TextStyle\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): Record<string, any> {\n if (!style) return {}\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const css: Record<string, any> = {}\n\n // Layout\n if (style.display) css.display = style.display\n if (style.flex !== undefined) css.flex = style.flex\n if (style.flexDirection) css.flexDirection = style.flexDirection\n if (style.flexWrap) css.flexWrap = style.flexWrap\n if (style.justifyContent) css.justifyContent = style.justifyContent\n if (style.alignItems) css.alignItems = style.alignItems\n if (style.alignSelf) css.alignSelf = style.alignSelf\n if (style.gap !== undefined) css.gap = `${style.gap}px`\n\n // Spacing - padding\n if (style.padding !== undefined) css.padding = `${style.padding}px`\n if (style.paddingTop !== undefined) css.paddingTop = `${style.paddingTop}px`\n if (style.paddingRight !== undefined)\n css.paddingRight = `${style.paddingRight}px`\n if (style.paddingBottom !== undefined)\n css.paddingBottom = `${style.paddingBottom}px`\n if (style.paddingLeft !== undefined)\n css.paddingLeft = `${style.paddingLeft}px`\n if (style.paddingHorizontal !== undefined) {\n css.paddingLeft = `${style.paddingHorizontal}px`\n css.paddingRight = `${style.paddingHorizontal}px`\n }\n if (style.paddingVertical !== undefined) {\n css.paddingTop = `${style.paddingVertical}px`\n css.paddingBottom = `${style.paddingVertical}px`\n }\n\n // Spacing - margin\n if (style.margin !== undefined) css.margin = `${style.margin}px`\n if (style.marginTop !== undefined) css.marginTop = `${style.marginTop}px`\n if (style.marginRight !== undefined)\n css.marginRight = `${style.marginRight}px`\n if (style.marginBottom !== undefined)\n css.marginBottom = `${style.marginBottom}px`\n if (style.marginLeft !== undefined) css.marginLeft = `${style.marginLeft}px`\n if (style.marginHorizontal !== undefined) {\n css.marginLeft = `${style.marginHorizontal}px`\n css.marginRight = `${style.marginHorizontal}px`\n }\n if (style.marginVertical !== undefined) {\n css.marginTop = `${style.marginVertical}px`\n css.marginBottom = `${style.marginVertical}px`\n }\n\n // Sizing\n if (style.width !== undefined)\n css.width =\n typeof style.width === 'number' ? `${style.width}px` : style.width\n if (style.height !== undefined)\n css.height =\n typeof style.height === 'number' ? `${style.height}px` : style.height\n if (style.minWidth !== undefined) css.minWidth = `${style.minWidth}px`\n if (style.maxWidth !== undefined) css.maxWidth = `${style.maxWidth}px`\n if (style.minHeight !== undefined) css.minHeight = `${style.minHeight}px`\n if (style.maxHeight !== undefined) css.maxHeight = `${style.maxHeight}px`\n\n // Visual\n if (style.backgroundColor) css.backgroundColor = style.backgroundColor\n if (style.borderRadius !== undefined)\n css.borderRadius = `${style.borderRadius}px`\n if (style.borderTopLeftRadius !== undefined)\n css.borderTopLeftRadius = `${style.borderTopLeftRadius}px`\n if (style.borderTopRightRadius !== undefined)\n css.borderTopRightRadius = `${style.borderTopRightRadius}px`\n if (style.borderBottomLeftRadius !== undefined)\n css.borderBottomLeftRadius = `${style.borderBottomLeftRadius}px`\n if (style.borderBottomRightRadius !== undefined)\n css.borderBottomRightRadius = `${style.borderBottomRightRadius}px`\n if (style.opacity !== undefined) css.opacity = style.opacity\n\n // Border\n if (style.borderWidth !== undefined)\n css.borderWidth = `${style.borderWidth}px`\n if (style.borderColor) css.borderColor = style.borderColor\n if (style.borderTopWidth !== undefined)\n css.borderTopWidth = `${style.borderTopWidth}px`\n if (style.borderRightWidth !== undefined)\n css.borderRightWidth = `${style.borderRightWidth}px`\n if (style.borderBottomWidth !== undefined)\n css.borderBottomWidth = `${style.borderBottomWidth}px`\n if (style.borderLeftWidth !== undefined)\n css.borderLeftWidth = `${style.borderLeftWidth}px`\n\n // Position\n if (style.position) css.position = style.position\n if (style.top !== undefined) css.top = `${style.top}px`\n if (style.right !== undefined) css.right = `${style.right}px`\n if (style.bottom !== undefined) css.bottom = `${style.bottom}px`\n if (style.left !== undefined) css.left = `${style.left}px`\n if (style.zIndex !== undefined) css.zIndex = style.zIndex\n\n // Transform\n if (style.transform) css.transform = style.transform\n\n // Text-specific (if TextStyle)\n const textStyle = style as TextStyle\n if (textStyle.color) css.color = textStyle.color\n if (textStyle.fontSize !== undefined) css.fontSize = `${textStyle.fontSize}px`\n if (textStyle.fontWeight) css.fontWeight = textStyle.fontWeight\n if (textStyle.fontFamily) css.fontFamily = textStyle.fontFamily\n if (textStyle.fontStyle) css.fontStyle = textStyle.fontStyle\n if (textStyle.textAlign) css.textAlign = textStyle.textAlign\n if (textStyle.textDecoration) css.textDecoration = textStyle.textDecoration\n if (textStyle.lineHeight !== undefined)\n css.lineHeight = `${textStyle.lineHeight}px`\n if (textStyle.letterSpacing !== undefined)\n css.letterSpacing = `${textStyle.letterSpacing}px`\n\n return css\n}\n","/**\n * Canvas utilities\n */\n\nimport { isSignal as coreIsSignal } from '../../core/signal'\nimport type { Signal } from '../../core/signal'\n\n/**\n * Check if a value is a Signal\n */\nexport function isSignal<T>(value: T | Signal<T>): value is Signal<T> {\n // Use core isSignal which checks for SIGNAL_MARKER symbol\n // Signals are functions with properties, not plain objects\n return coreIsSignal(value)\n}\n\n/**\n * Unwrap a value that might be a Signal\n */\nexport function unwrapSignal<T>(value: T | Signal<T>): T {\n // Check for real signals first (have SIGNAL_MARKER)\n if (isSignal(value)) {\n return value.value\n }\n // Handle signal-like objects (for testing) - duck typing\n // Check if it's an object with a 'value' property\n if (\n value !== null &&\n typeof value === 'object' &&\n 'value' in value &&\n 'peek' in value\n ) {\n return (value as any).value\n }\n return value\n}\n","/**\n * Canvas renderer - renders canvas primitives to canvas context\n */\n\nimport type {\n DrawRectProps,\n DrawCircleProps,\n DrawPathProps,\n DrawTextProps,\n DrawLineProps,\n DrawArcProps,\n} from '../types'\nimport { unwrapSignal } from './utils'\n\n/**\n * Render canvas children to context\n */\nexport function renderCanvasChildren(\n ctx: CanvasRenderingContext2D,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n children: any,\n _width: number,\n _height: number\n): void {\n if (!children) return\n\n const childArray = Array.isArray(children) ? children : [children]\n\n for (const child of childArray) {\n if (!child || !child.type) continue\n\n switch (child.type) {\n case 'canvas-rect':\n renderRect(ctx, child.props)\n break\n case 'canvas-circle':\n renderCircle(ctx, child.props)\n break\n case 'canvas-path':\n renderPath(ctx, child.props)\n break\n case 'canvas-text':\n renderText(ctx, child.props)\n break\n case 'canvas-line':\n renderLine(ctx, child.props)\n break\n case 'canvas-arc':\n renderArc(ctx, child.props)\n break\n }\n }\n}\n\n/**\n * Render rectangle\n */\nfunction renderRect(ctx: CanvasRenderingContext2D, props: DrawRectProps): void {\n const x = unwrapSignal(props.x)\n const y = unwrapSignal(props.y)\n const width = unwrapSignal(props.width)\n const height = unwrapSignal(props.height)\n const fill = unwrapSignal(props.fill)\n const stroke = unwrapSignal(props.stroke)\n const strokeWidth = unwrapSignal(props.strokeWidth)\n const opacity = unwrapSignal(props.opacity)\n\n ctx.save()\n\n if (opacity !== undefined) {\n ctx.globalAlpha = opacity\n }\n\n if (fill) {\n ctx.fillStyle = fill\n ctx.fillRect(x, y, width, height)\n }\n\n if (stroke) {\n ctx.strokeStyle = stroke\n ctx.lineWidth = strokeWidth || 1\n ctx.strokeRect(x, y, width, height)\n }\n\n ctx.restore()\n}\n\n/**\n * Render circle\n */\nfunction renderCircle(\n ctx: CanvasRenderingContext2D,\n props: DrawCircleProps\n): void {\n const x = unwrapSignal(props.x)\n const y = unwrapSignal(props.y)\n const radius = unwrapSignal(props.radius)\n const fill = unwrapSignal(props.fill)\n const stroke = unwrapSignal(props.stroke)\n const strokeWidth = unwrapSignal(props.strokeWidth)\n const opacity = unwrapSignal(props.opacity)\n\n ctx.save()\n\n if (opacity !== undefined) {\n ctx.globalAlpha = opacity\n }\n\n ctx.beginPath()\n ctx.arc(x, y, radius, 0, 2 * Math.PI)\n\n if (fill) {\n ctx.fillStyle = fill\n ctx.fill()\n }\n\n if (stroke) {\n ctx.strokeStyle = stroke\n ctx.lineWidth = strokeWidth || 1\n ctx.stroke()\n }\n\n ctx.restore()\n}\n\n/**\n * Render path\n */\nfunction renderPath(ctx: CanvasRenderingContext2D, props: DrawPathProps): void {\n const d = unwrapSignal(props.d)\n const fill = unwrapSignal(props.fill)\n const stroke = unwrapSignal(props.stroke)\n const strokeWidth = unwrapSignal(props.strokeWidth)\n const opacity = unwrapSignal(props.opacity)\n\n ctx.save()\n\n if (opacity !== undefined) {\n ctx.globalAlpha = opacity\n }\n\n // Parse SVG path (simplified - only supports basic commands)\n const path = new Path2D(d)\n\n if (fill) {\n ctx.fillStyle = fill\n ctx.fill(path)\n }\n\n if (stroke) {\n ctx.strokeStyle = stroke\n ctx.lineWidth = strokeWidth || 1\n ctx.stroke(path)\n }\n\n ctx.restore()\n}\n\n/**\n * Render text\n */\nfunction renderText(ctx: CanvasRenderingContext2D, props: DrawTextProps): void {\n const x = unwrapSignal(props.x)\n const y = unwrapSignal(props.y)\n const text = unwrapSignal(props.text)\n const fill = unwrapSignal(props.fill)\n const fontSize = unwrapSignal(props.fontSize) || 12\n const fontFamily = unwrapSignal(props.fontFamily) || 'sans-serif'\n const fontWeight = unwrapSignal(props.fontWeight) || 'normal'\n const textAlign = unwrapSignal(props.textAlign) || 'left'\n const textBaseline = unwrapSignal(props.textBaseline) || 'alphabetic'\n\n ctx.save()\n\n ctx.font = `${fontWeight} ${fontSize}px ${fontFamily}`\n ctx.textAlign = textAlign\n ctx.textBaseline = textBaseline\n\n if (fill) {\n ctx.fillStyle = fill\n ctx.fillText(text, x, y)\n }\n\n ctx.restore()\n}\n\n/**\n * Render line\n */\nfunction renderLine(ctx: CanvasRenderingContext2D, props: DrawLineProps): void {\n const x1 = unwrapSignal(props.x1)\n const y1 = unwrapSignal(props.y1)\n const x2 = unwrapSignal(props.x2)\n const y2 = unwrapSignal(props.y2)\n const stroke = unwrapSignal(props.stroke) || 'black'\n const strokeWidth = unwrapSignal(props.strokeWidth) || 1\n const opacity = unwrapSignal(props.opacity)\n\n ctx.save()\n\n if (opacity !== undefined) {\n ctx.globalAlpha = opacity\n }\n\n ctx.beginPath()\n ctx.moveTo(x1, y1)\n ctx.lineTo(x2, y2)\n\n ctx.strokeStyle = stroke\n ctx.lineWidth = strokeWidth\n ctx.stroke()\n\n ctx.restore()\n}\n\n/**\n * Render arc\n */\nfunction renderArc(ctx: CanvasRenderingContext2D, props: DrawArcProps): void {\n const x = unwrapSignal(props.x)\n const y = unwrapSignal(props.y)\n const radius = unwrapSignal(props.radius)\n const startAngle = unwrapSignal(props.startAngle)\n const endAngle = unwrapSignal(props.endAngle)\n const counterclockwise = unwrapSignal(props.counterclockwise) || false\n const fill = unwrapSignal(props.fill)\n const stroke = unwrapSignal(props.stroke)\n const strokeWidth = unwrapSignal(props.strokeWidth)\n const opacity = unwrapSignal(props.opacity)\n\n ctx.save()\n\n if (opacity !== undefined) {\n ctx.globalAlpha = opacity\n }\n\n ctx.beginPath()\n ctx.arc(x, y, radius, startAngle, endAngle, counterclockwise)\n\n if (fill) {\n ctx.fillStyle = fill\n ctx.fill()\n }\n\n if (stroke) {\n ctx.strokeStyle = stroke\n ctx.lineWidth = strokeWidth || 1\n ctx.stroke()\n }\n\n ctx.restore()\n}\n","/**\n * Canvas - Declarative canvas container with JSX drawing\n *\n * Supports Signal-based reactive rendering\n *\n * @example\n * ```tsx\n * const x = signal(50)\n *\n * <Canvas width={300} height={200}>\n * <Rect x={x} y={50} width={100} height={50} fill=\"blue\" />\n * <Circle x={150} y={100} radius={30} fill=\"red\" />\n * </Canvas>\n * ```\n */\n\nimport type { FNode } from '../../types'\nimport type { CanvasProps } from '../types'\nimport { normalizeStyle } from '../utils'\nimport { renderCanvasChildren } from './renderer'\n\nexport function Canvas(props: CanvasProps): FNode {\n const { width, height, children, style, id, ...rest } = props\n\n return {\n type: 'canvas',\n props: {\n ...rest,\n id,\n width,\n height,\n style: normalizeStyle(style),\n // Attach canvas renderer when element is mounted\n ref: (canvas: HTMLCanvasElement | null) => {\n if (!canvas) return\n\n // SSR guard: skip canvas rendering on server\n if (typeof requestAnimationFrame === 'undefined') return\n\n const ctx = canvas.getContext('2d')\n if (!ctx) return\n\n // Render canvas children with effect for reactivity\n // Import effect and onCleanup dynamically to avoid circular deps\n import('../../core/signal')\n .then(({ effect, onCleanup, isSignal }) => {\n let rafId: number | undefined\n\n const scheduleRender = () => {\n if (rafId !== undefined) {\n cancelAnimationFrame(rafId)\n }\n\n rafId = requestAnimationFrame(() => {\n // Clear canvas\n ctx.clearRect(0, 0, width, height)\n\n // Render all children\n renderCanvasChildren(ctx, children, width, height)\n\n rafId = undefined\n })\n }\n\n effect(() => {\n // To track signal dependencies, we need to access them in the effect\n // Walk through children and touch any signals to track dependencies\n const childArray = Array.isArray(children) ? children : [children]\n for (const child of childArray) {\n if (child && child.props) {\n // Touch each prop to track signal dependencies\n for (const key in child.props) {\n const value = child.props[key]\n // If it's a signal, access its value to track it\n if (isSignal(value)) {\n void value.value // Touch the signal to track dependency\n }\n }\n }\n }\n\n // Now schedule the actual render\n scheduleRender()\n\n // Cleanup RAF when effect is disposed\n onCleanup(() => {\n if (rafId !== undefined) {\n cancelAnimationFrame(rafId)\n rafId = undefined\n }\n })\n })\n })\n .catch((err) => {\n console.error('[Flexium Canvas] Failed to load signal module:', err)\n })\n },\n },\n children: [],\n }\n}\n","/**\n * DrawRect - Canvas rectangle primitive\n *\n * @example\n * ```tsx\n * <DrawRect x={10} y={10} width={100} height={50} fill=\"blue\" />\n * ```\n */\n\nimport type { FNode } from '../../types'\nimport type { DrawRectProps } from '../types'\n\nexport function DrawRect(props: DrawRectProps): FNode {\n return {\n type: 'canvas-rect',\n props,\n children: [],\n }\n}\n","/**\n * DrawCircle - Canvas circle primitive\n *\n * @example\n * ```tsx\n * <DrawCircle x={100} y={100} radius={50} fill=\"red\" />\n * ```\n */\n\nimport type { FNode } from '../../types'\nimport type { DrawCircleProps } from '../types'\n\nexport function DrawCircle(props: DrawCircleProps): FNode {\n return {\n type: 'canvas-circle',\n props,\n children: [],\n }\n}\n","/**\n * DrawArc - Canvas arc primitive\n *\n * @example\n * ```tsx\n * <DrawArc x={100} y={100} radius={50} startAngle={0} endAngle={Math.PI} fill=\"green\" />\n * ```\n */\n\nimport type { FNode } from '../../types'\nimport type { DrawArcProps } from '../types'\n\nexport function DrawArc(props: DrawArcProps): FNode {\n return {\n type: 'canvas-arc',\n props,\n children: [],\n }\n}\n","/**\n * DrawLine - Canvas line primitive\n *\n * @example\n * ```tsx\n * <DrawLine x1={10} y1={10} x2={100} y2={100} stroke=\"black\" strokeWidth={2} />\n * ```\n */\n\nimport type { FNode } from '../../types'\nimport type { DrawLineProps } from '../types'\n\nexport function DrawLine(props: DrawLineProps): FNode {\n return {\n type: 'canvas-line',\n props,\n children: [],\n }\n}\n","/**\n * DrawPath - Canvas path primitive\n *\n * @example\n * ```tsx\n * <DrawPath d=\"M 10 10 L 100 100\" stroke=\"black\" strokeWidth={2} />\n * ```\n */\n\nimport type { FNode } from '../../types'\nimport type { DrawPathProps } from '../types'\n\nexport function DrawPath(props: DrawPathProps): FNode {\n return {\n type: 'canvas-path',\n props,\n children: [],\n }\n}\n","/**\n * DrawText - Canvas text primitive\n *\n * @example\n * ```tsx\n * <DrawText x={50} y={50} text=\"Hello Canvas\" fontSize={20} fill=\"black\" />\n * ```\n */\n\nimport type { FNode } from '../../types'\nimport type { DrawTextProps } from '../types'\n\nexport function DrawText(props: DrawTextProps): FNode {\n return {\n type: 'canvas-text',\n props,\n children: [],\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/primitives/utils.ts","../src/primitives/canvas/utils.ts","../src/primitives/canvas/renderer.ts","../src/primitives/canvas/Canvas.ts","../src/primitives/canvas/DrawRect.ts","../src/primitives/canvas/DrawCircle.ts","../src/primitives/canvas/DrawArc.ts","../src/primitives/canvas/DrawLine.ts","../src/primitives/canvas/DrawPath.ts","../src/primitives/canvas/DrawText.ts"],"names":["normalizeStyle","style","css","textStyle","isSignal","value","unwrapSignal","renderCanvasChildren","ctx","children","_width","_height","childArray","child","renderRect","renderCircle","renderPath","renderText","renderLine","renderArc","props","x","y","width","height","fill","stroke","strokeWidth","opacity","radius","d","path","text","fontSize","fontFamily","fontWeight","textAlign","textBaseline","x1","y1","x2","y2","startAngle","endAngle","counterclockwise","Canvas","id","rest","canvas","effect","onCleanup","rafId","scheduleRender","key","err","DrawRect","DrawCircle","DrawArc","DrawLine","DrawPath","DrawText"],"mappings":"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","file":"chunk-RIVNKTUR.js","sourcesContent":["/**\n * Primitive utilities\n */\n\nimport type { CommonStyle, TextStyle } from './types'\n\n/**\n * Normalize CommonStyle to CSS properties\n */\nexport function normalizeStyle(\n style?: CommonStyle | TextStyle\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): Record<string, any> {\n if (!style) return {}\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const css: Record<string, any> = {}\n\n // Layout\n if (style.display) css.display = style.display\n if (style.flex !== undefined) css.flex = style.flex\n if (style.flexDirection) css.flexDirection = style.flexDirection\n if (style.flexWrap) css.flexWrap = style.flexWrap\n if (style.justifyContent) css.justifyContent = style.justifyContent\n if (style.alignItems) css.alignItems = style.alignItems\n if (style.alignSelf) css.alignSelf = style.alignSelf\n if (style.gap !== undefined) css.gap = `${style.gap}px`\n\n // Spacing - padding\n if (style.padding !== undefined) css.padding = `${style.padding}px`\n if (style.paddingTop !== undefined) css.paddingTop = `${style.paddingTop}px`\n if (style.paddingRight !== undefined)\n css.paddingRight = `${style.paddingRight}px`\n if (style.paddingBottom !== undefined)\n css.paddingBottom = `${style.paddingBottom}px`\n if (style.paddingLeft !== undefined)\n css.paddingLeft = `${style.paddingLeft}px`\n if (style.paddingHorizontal !== undefined) {\n css.paddingLeft = `${style.paddingHorizontal}px`\n css.paddingRight = `${style.paddingHorizontal}px`\n }\n if (style.paddingVertical !== undefined) {\n css.paddingTop = `${style.paddingVertical}px`\n css.paddingBottom = `${style.paddingVertical}px`\n }\n\n // Spacing - margin\n if (style.margin !== undefined) css.margin = `${style.margin}px`\n if (style.marginTop !== undefined) css.marginTop = `${style.marginTop}px`\n if (style.marginRight !== undefined)\n css.marginRight = `${style.marginRight}px`\n if (style.marginBottom !== undefined)\n css.marginBottom = `${style.marginBottom}px`\n if (style.marginLeft !== undefined) css.marginLeft = `${style.marginLeft}px`\n if (style.marginHorizontal !== undefined) {\n css.marginLeft = `${style.marginHorizontal}px`\n css.marginRight = `${style.marginHorizontal}px`\n }\n if (style.marginVertical !== undefined) {\n css.marginTop = `${style.marginVertical}px`\n css.marginBottom = `${style.marginVertical}px`\n }\n\n // Sizing\n if (style.width !== undefined)\n css.width =\n typeof style.width === 'number' ? `${style.width}px` : style.width\n if (style.height !== undefined)\n css.height =\n typeof style.height === 'number' ? `${style.height}px` : style.height\n if (style.minWidth !== undefined) css.minWidth = `${style.minWidth}px`\n if (style.maxWidth !== undefined) css.maxWidth = `${style.maxWidth}px`\n if (style.minHeight !== undefined) css.minHeight = `${style.minHeight}px`\n if (style.maxHeight !== undefined) css.maxHeight = `${style.maxHeight}px`\n\n // Visual\n if (style.backgroundColor) css.backgroundColor = style.backgroundColor\n if (style.borderRadius !== undefined)\n css.borderRadius = `${style.borderRadius}px`\n if (style.borderTopLeftRadius !== undefined)\n css.borderTopLeftRadius = `${style.borderTopLeftRadius}px`\n if (style.borderTopRightRadius !== undefined)\n css.borderTopRightRadius = `${style.borderTopRightRadius}px`\n if (style.borderBottomLeftRadius !== undefined)\n css.borderBottomLeftRadius = `${style.borderBottomLeftRadius}px`\n if (style.borderBottomRightRadius !== undefined)\n css.borderBottomRightRadius = `${style.borderBottomRightRadius}px`\n if (style.opacity !== undefined) css.opacity = style.opacity\n\n // Border\n if (style.borderWidth !== undefined)\n css.borderWidth = `${style.borderWidth}px`\n if (style.borderColor) css.borderColor = style.borderColor\n if (style.borderTopWidth !== undefined)\n css.borderTopWidth = `${style.borderTopWidth}px`\n if (style.borderRightWidth !== undefined)\n css.borderRightWidth = `${style.borderRightWidth}px`\n if (style.borderBottomWidth !== undefined)\n css.borderBottomWidth = `${style.borderBottomWidth}px`\n if (style.borderLeftWidth !== undefined)\n css.borderLeftWidth = `${style.borderLeftWidth}px`\n\n // Position\n if (style.position) css.position = style.position\n if (style.top !== undefined) css.top = `${style.top}px`\n if (style.right !== undefined) css.right = `${style.right}px`\n if (style.bottom !== undefined) css.bottom = `${style.bottom}px`\n if (style.left !== undefined) css.left = `${style.left}px`\n if (style.zIndex !== undefined) css.zIndex = style.zIndex\n\n // Transform\n if (style.transform) css.transform = style.transform\n\n // Text-specific (if TextStyle)\n const textStyle = style as TextStyle\n if (textStyle.color) css.color = textStyle.color\n if (textStyle.fontSize !== undefined) css.fontSize = `${textStyle.fontSize}px`\n if (textStyle.fontWeight) css.fontWeight = textStyle.fontWeight\n if (textStyle.fontFamily) css.fontFamily = textStyle.fontFamily\n if (textStyle.fontStyle) css.fontStyle = textStyle.fontStyle\n if (textStyle.textAlign) css.textAlign = textStyle.textAlign\n if (textStyle.textDecoration) css.textDecoration = textStyle.textDecoration\n if (textStyle.lineHeight !== undefined)\n css.lineHeight = `${textStyle.lineHeight}px`\n if (textStyle.letterSpacing !== undefined)\n css.letterSpacing = `${textStyle.letterSpacing}px`\n\n return css\n}\n","/**\n * Canvas utilities\n */\n\nimport { isSignal as coreIsSignal } from '../../core/signal'\nimport type { Signal } from '../../core/signal'\n\n/**\n * Check if a value is a Signal\n */\nexport function isSignal<T>(value: T | Signal<T>): value is Signal<T> {\n // Use core isSignal which checks for SIGNAL_MARKER symbol\n // Signals are functions with properties, not plain objects\n return coreIsSignal(value)\n}\n\n/**\n * Unwrap a value that might be a Signal\n */\nexport function unwrapSignal<T>(value: T | Signal<T>): T {\n // Check for real signals first (have SIGNAL_MARKER)\n if (isSignal(value)) {\n return value.value\n }\n // Handle signal-like objects (for testing) - duck typing\n // Check if it's an object with a 'value' property\n if (\n value !== null &&\n typeof value === 'object' &&\n 'value' in value &&\n 'peek' in value\n ) {\n return (value as any).value\n }\n return value\n}\n","/**\n * Canvas renderer - renders canvas primitives to canvas context\n */\n\nimport type {\n DrawRectProps,\n DrawCircleProps,\n DrawPathProps,\n DrawTextProps,\n DrawLineProps,\n DrawArcProps,\n} from '../types'\nimport { unwrapSignal } from './utils'\n\n/**\n * Render canvas children to context\n */\nexport function renderCanvasChildren(\n ctx: CanvasRenderingContext2D,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n children: any,\n _width: number,\n _height: number\n): void {\n if (!children) return\n\n const childArray = Array.isArray(children) ? children : [children]\n\n for (const child of childArray) {\n if (!child || !child.type) continue\n\n switch (child.type) {\n case 'canvas-rect':\n renderRect(ctx, child.props)\n break\n case 'canvas-circle':\n renderCircle(ctx, child.props)\n break\n case 'canvas-path':\n renderPath(ctx, child.props)\n break\n case 'canvas-text':\n renderText(ctx, child.props)\n break\n case 'canvas-line':\n renderLine(ctx, child.props)\n break\n case 'canvas-arc':\n renderArc(ctx, child.props)\n break\n }\n }\n}\n\n/**\n * Render rectangle\n */\nfunction renderRect(ctx: CanvasRenderingContext2D, props: DrawRectProps): void {\n const x = unwrapSignal(props.x)\n const y = unwrapSignal(props.y)\n const width = unwrapSignal(props.width)\n const height = unwrapSignal(props.height)\n const fill = unwrapSignal(props.fill)\n const stroke = unwrapSignal(props.stroke)\n const strokeWidth = unwrapSignal(props.strokeWidth)\n const opacity = unwrapSignal(props.opacity)\n\n ctx.save()\n\n if (opacity !== undefined) {\n ctx.globalAlpha = opacity\n }\n\n if (fill) {\n ctx.fillStyle = fill\n ctx.fillRect(x, y, width, height)\n }\n\n if (stroke) {\n ctx.strokeStyle = stroke\n ctx.lineWidth = strokeWidth || 1\n ctx.strokeRect(x, y, width, height)\n }\n\n ctx.restore()\n}\n\n/**\n * Render circle\n */\nfunction renderCircle(\n ctx: CanvasRenderingContext2D,\n props: DrawCircleProps\n): void {\n const x = unwrapSignal(props.x)\n const y = unwrapSignal(props.y)\n const radius = unwrapSignal(props.radius)\n const fill = unwrapSignal(props.fill)\n const stroke = unwrapSignal(props.stroke)\n const strokeWidth = unwrapSignal(props.strokeWidth)\n const opacity = unwrapSignal(props.opacity)\n\n ctx.save()\n\n if (opacity !== undefined) {\n ctx.globalAlpha = opacity\n }\n\n ctx.beginPath()\n ctx.arc(x, y, radius, 0, 2 * Math.PI)\n\n if (fill) {\n ctx.fillStyle = fill\n ctx.fill()\n }\n\n if (stroke) {\n ctx.strokeStyle = stroke\n ctx.lineWidth = strokeWidth || 1\n ctx.stroke()\n }\n\n ctx.restore()\n}\n\n/**\n * Render path\n */\nfunction renderPath(ctx: CanvasRenderingContext2D, props: DrawPathProps): void {\n const d = unwrapSignal(props.d)\n const fill = unwrapSignal(props.fill)\n const stroke = unwrapSignal(props.stroke)\n const strokeWidth = unwrapSignal(props.strokeWidth)\n const opacity = unwrapSignal(props.opacity)\n\n ctx.save()\n\n if (opacity !== undefined) {\n ctx.globalAlpha = opacity\n }\n\n // Parse SVG path (simplified - only supports basic commands)\n const path = new Path2D(d)\n\n if (fill) {\n ctx.fillStyle = fill\n ctx.fill(path)\n }\n\n if (stroke) {\n ctx.strokeStyle = stroke\n ctx.lineWidth = strokeWidth || 1\n ctx.stroke(path)\n }\n\n ctx.restore()\n}\n\n/**\n * Render text\n */\nfunction renderText(ctx: CanvasRenderingContext2D, props: DrawTextProps): void {\n const x = unwrapSignal(props.x)\n const y = unwrapSignal(props.y)\n const text = unwrapSignal(props.text)\n const fill = unwrapSignal(props.fill)\n const fontSize = unwrapSignal(props.fontSize) || 12\n const fontFamily = unwrapSignal(props.fontFamily) || 'sans-serif'\n const fontWeight = unwrapSignal(props.fontWeight) || 'normal'\n const textAlign = unwrapSignal(props.textAlign) || 'left'\n const textBaseline = unwrapSignal(props.textBaseline) || 'alphabetic'\n\n ctx.save()\n\n ctx.font = `${fontWeight} ${fontSize}px ${fontFamily}`\n ctx.textAlign = textAlign\n ctx.textBaseline = textBaseline\n\n if (fill) {\n ctx.fillStyle = fill\n ctx.fillText(text, x, y)\n }\n\n ctx.restore()\n}\n\n/**\n * Render line\n */\nfunction renderLine(ctx: CanvasRenderingContext2D, props: DrawLineProps): void {\n const x1 = unwrapSignal(props.x1)\n const y1 = unwrapSignal(props.y1)\n const x2 = unwrapSignal(props.x2)\n const y2 = unwrapSignal(props.y2)\n const stroke = unwrapSignal(props.stroke) || 'black'\n const strokeWidth = unwrapSignal(props.strokeWidth) || 1\n const opacity = unwrapSignal(props.opacity)\n\n ctx.save()\n\n if (opacity !== undefined) {\n ctx.globalAlpha = opacity\n }\n\n ctx.beginPath()\n ctx.moveTo(x1, y1)\n ctx.lineTo(x2, y2)\n\n ctx.strokeStyle = stroke\n ctx.lineWidth = strokeWidth\n ctx.stroke()\n\n ctx.restore()\n}\n\n/**\n * Render arc\n */\nfunction renderArc(ctx: CanvasRenderingContext2D, props: DrawArcProps): void {\n const x = unwrapSignal(props.x)\n const y = unwrapSignal(props.y)\n const radius = unwrapSignal(props.radius)\n const startAngle = unwrapSignal(props.startAngle)\n const endAngle = unwrapSignal(props.endAngle)\n const counterclockwise = unwrapSignal(props.counterclockwise) || false\n const fill = unwrapSignal(props.fill)\n const stroke = unwrapSignal(props.stroke)\n const strokeWidth = unwrapSignal(props.strokeWidth)\n const opacity = unwrapSignal(props.opacity)\n\n ctx.save()\n\n if (opacity !== undefined) {\n ctx.globalAlpha = opacity\n }\n\n ctx.beginPath()\n ctx.arc(x, y, radius, startAngle, endAngle, counterclockwise)\n\n if (fill) {\n ctx.fillStyle = fill\n ctx.fill()\n }\n\n if (stroke) {\n ctx.strokeStyle = stroke\n ctx.lineWidth = strokeWidth || 1\n ctx.stroke()\n }\n\n ctx.restore()\n}\n","/**\n * Canvas - Declarative canvas container with JSX drawing\n *\n * Supports Signal-based reactive rendering\n *\n * @example\n * ```tsx\n * const x = signal(50)\n *\n * <Canvas width={300} height={200}>\n * <Rect x={x} y={50} width={100} height={50} fill=\"blue\" />\n * <Circle x={150} y={100} radius={30} fill=\"red\" />\n * </Canvas>\n * ```\n */\n\nimport type { FNode } from '../../types'\nimport type { CanvasProps } from '../types'\nimport { normalizeStyle } from '../utils'\nimport { renderCanvasChildren } from './renderer'\n\nexport function Canvas(props: CanvasProps): FNode {\n const { width, height, children, style, id, ...rest } = props\n\n return {\n type: 'canvas',\n props: {\n ...rest,\n id,\n width,\n height,\n style: normalizeStyle(style),\n // Attach canvas renderer when element is mounted\n ref: (canvas: HTMLCanvasElement | null) => {\n if (!canvas) return\n\n // SSR guard: skip canvas rendering on server\n if (typeof requestAnimationFrame === 'undefined') return\n\n const ctx = canvas.getContext('2d')\n if (!ctx) return\n\n // Render canvas children with effect for reactivity\n // Import effect and onCleanup dynamically to avoid circular deps\n import('../../core/signal')\n .then(({ effect, onCleanup, isSignal }) => {\n let rafId: number | undefined\n\n const scheduleRender = () => {\n if (rafId !== undefined) {\n cancelAnimationFrame(rafId)\n }\n\n rafId = requestAnimationFrame(() => {\n // Clear canvas\n ctx.clearRect(0, 0, width, height)\n\n // Render all children\n renderCanvasChildren(ctx, children, width, height)\n\n rafId = undefined\n })\n }\n\n effect(() => {\n // To track signal dependencies, we need to access them in the effect\n // Walk through children and touch any signals to track dependencies\n const childArray = Array.isArray(children) ? children : [children]\n for (const child of childArray) {\n if (child && child.props) {\n // Touch each prop to track signal dependencies\n for (const key in child.props) {\n const value = child.props[key]\n // If it's a signal, access its value to track it\n if (isSignal(value)) {\n void value.value // Touch the signal to track dependency\n }\n }\n }\n }\n\n // Now schedule the actual render\n scheduleRender()\n\n // Cleanup RAF when effect is disposed\n onCleanup(() => {\n if (rafId !== undefined) {\n cancelAnimationFrame(rafId)\n rafId = undefined\n }\n })\n })\n })\n .catch((err) => {\n console.error('[Flexium Canvas] Failed to load signal module:', err)\n })\n },\n },\n children: [],\n }\n}\n","/**\n * DrawRect - Canvas rectangle primitive\n *\n * @example\n * ```tsx\n * <DrawRect x={10} y={10} width={100} height={50} fill=\"blue\" />\n * ```\n */\n\nimport type { FNode } from '../../types'\nimport type { DrawRectProps } from '../types'\n\nexport function DrawRect(props: DrawRectProps): FNode {\n return {\n type: 'canvas-rect',\n props,\n children: [],\n }\n}\n","/**\n * DrawCircle - Canvas circle primitive\n *\n * @example\n * ```tsx\n * <DrawCircle x={100} y={100} radius={50} fill=\"red\" />\n * ```\n */\n\nimport type { FNode } from '../../types'\nimport type { DrawCircleProps } from '../types'\n\nexport function DrawCircle(props: DrawCircleProps): FNode {\n return {\n type: 'canvas-circle',\n props,\n children: [],\n }\n}\n","/**\n * DrawArc - Canvas arc primitive\n *\n * @example\n * ```tsx\n * <DrawArc x={100} y={100} radius={50} startAngle={0} endAngle={Math.PI} fill=\"green\" />\n * ```\n */\n\nimport type { FNode } from '../../types'\nimport type { DrawArcProps } from '../types'\n\nexport function DrawArc(props: DrawArcProps): FNode {\n return {\n type: 'canvas-arc',\n props,\n children: [],\n }\n}\n","/**\n * DrawLine - Canvas line primitive\n *\n * @example\n * ```tsx\n * <DrawLine x1={10} y1={10} x2={100} y2={100} stroke=\"black\" strokeWidth={2} />\n * ```\n */\n\nimport type { FNode } from '../../types'\nimport type { DrawLineProps } from '../types'\n\nexport function DrawLine(props: DrawLineProps): FNode {\n return {\n type: 'canvas-line',\n props,\n children: [],\n }\n}\n","/**\n * DrawPath - Canvas path primitive\n *\n * @example\n * ```tsx\n * <DrawPath d=\"M 10 10 L 100 100\" stroke=\"black\" strokeWidth={2} />\n * ```\n */\n\nimport type { FNode } from '../../types'\nimport type { DrawPathProps } from '../types'\n\nexport function DrawPath(props: DrawPathProps): FNode {\n return {\n type: 'canvas-path',\n props,\n children: [],\n }\n}\n","/**\n * DrawText - Canvas text primitive\n *\n * @example\n * ```tsx\n * <DrawText x={50} y={50} text=\"Hello Canvas\" fontSize={20} fill=\"black\" />\n * ```\n */\n\nimport type { FNode } from '../../types'\nimport type { DrawTextProps } from '../types'\n\nexport function DrawText(props: DrawTextProps): FNode {\n return {\n type: 'canvas-text',\n props,\n children: [],\n }\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';var chunkMKE3KA43_js=require('./chunk-MKE3KA43.js');var g=Symbol.for("flexium.stateSignal");function K(e,a){let o=e;return o._signal=e,o._stateActions=a,o}function N(e){return {value:void 0,peek:e.peek,_signal:e,_isComputed:true}}function F(e){let a=e;return a._signal=e,a}var i=new Map,D=1e4,_=false,y=null;function L(e){y=e;}function G(){return {id:Symbol("component"),hookIndex:0,hooks:[]}}function W(e){e.hookIndex=0;}var z=new WeakMap;function C(e){if(typeof e=="string")return e;let a=z.get(e);if(a!==void 0)return a;try{let o=JSON.stringify(e);return z.set(e,o),o}catch(o){return console.warn("[Flexium] Failed to serialize state key, using fallback:",o),String(e)}}function V(){typeof process<"u"&&process.env?.NODE_ENV!=="production"&&!_&&i.size>=D&&(_=true,console.warn(`[Flexium] Global state registry has ${i.size} entries. Consider using state.delete(key) to clean up unused states, or state.clear() to reset all global states.`));}function j(e){return (typeof e=="object"||typeof e=="function")&&e!==null&&g in e}function H(e){return j(e)?e[g]:null}function J(e,a){return j(e)?e.peek()===a:false}function B(e){return j(e)?!!e.peek():false}function c(e){let a=()=>e.value,o="peek",k="valueOf",S="toString",v="toJSON",R=Symbol.toPrimitive;return new Proxy(a,{apply(){return e.value},get(t,n){if(n===g)return e;if(n===o)return e.peek;if(n===R)return T=>e.value;if(n===k)return ()=>(typeof process<"u"&&process.env?.NODE_ENV!=="production"&&typeof process<"u"&&process.env?.FLEXIUM_WARN_COMPARISON,e.value);if(n===S)return ()=>String(e.value);if(n===v)return ()=>e.value;let r=e.value;if(r===null)return;if(typeof r=="object"){let l=r[n];return typeof l=="function"?l.bind(r):l}},has(t,n){if(n===g)return true;let r=e.value;return r===null?false:typeof r=="object"&&n in r},ownKeys(t){let n=e.value;return n===null?[]:typeof n=="object"?Reflect.ownKeys(n):[]},getOwnPropertyDescriptor(t,n){if(n===g)return {configurable:true,enumerable:false,value:e};let r=e.value;if(r!==null&&typeof r=="object"){let u=Object.getOwnPropertyDescriptor(r,n);if(u)return {...u,configurable:true}}}})}function m(e,a){let o=a?.key?C(a.key):void 0,k=a?.params;if(y&&!o){let t=y,n=t.hookIndex++;if(n<t.hooks.length)return t.hooks[n];let r=y;y=null;let u=m(e,a);return y=r,t.hooks.push(u),u}if(o&&i.has(o)){let t=i.get(o),n="loading"in t&&t._stateActions?.refetch!==void 0,r=t._isComputed,u=c(t._signal);if(r)return [u];if(n){let l=t._stateActions?.refetch||(()=>{}),d=chunkMKE3KA43_js.l(()=>t.error?"error":t.loading?"loading":t.value!==void 0?"success":"idle"),f=chunkMKE3KA43_js.l(()=>t.error),s=c(d),b=c(f);return [u,l,s,b]}return [u,l=>{typeof l=="function"?t.value=l(t.peek()):t.value=l;}]}if(typeof e=="function"){let t=e,n=k!==void 0?()=>t(k):t;if(t.constructor.name==="AsyncFunction"){let[d,f]=chunkMKE3KA43_js.o(n,async x=>x),s=K(d,f);o&&(i.set(o,s),V());let b=c(s._signal),P=chunkMKE3KA43_js.l(()=>s.error?"error":s.loading?"loading":s.value!==void 0?"success":"idle"),O=chunkMKE3KA43_js.l(()=>s.error),A=c(P),w=c(O);return [b,f.refetch,A,w]}let u;try{u=n();}catch{let d=chunkMKE3KA43_js.l(n),f=N(d);return o&&(i.set(o,f),V()),[c(d)]}if(u instanceof Promise){let[d,f]=chunkMKE3KA43_js.o(n,async x=>x),s=K(d,f);o&&(i.set(o,s),V());let b=c(s._signal),P=chunkMKE3KA43_js.l(()=>s.error?"error":s.loading?"loading":s.value!==void 0?"success":"idle"),O=chunkMKE3KA43_js.l(()=>s.error),A=c(P),w=c(O);return [b,f.refetch,A,w]}let T=chunkMKE3KA43_js.l(n),l=N(T);return o&&(i.set(o,l),V()),[c(T)]}let S=chunkMKE3KA43_js.k(e),v=F(S);return o&&(i.set(o,v),V()),[c(S),t=>{typeof t=="function"?S.value=t(S.peek()):S.value=t;}]}m.delete=function(e){let a=C(e);return i.delete(a)};m.clear=function(){i.clear(),_=false;};m.has=function(e){let a=C(e);return i.has(a)};Object.defineProperty(m,"size",{get:()=>i.size,enumerable:true});var U=m;function q(e){return {current:e}}exports.a=L;exports.b=G;exports.c=W;exports.d=j;exports.e=H;exports.f=J;exports.g=B;exports.h=U;exports.i=q;//# sourceMappingURL=chunk-TQLZ7UZX.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-TQLZ7UZX.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/core/state.ts"],"names":["STATE_SIGNAL","toStateObject","res","actions","s","toComputedStateObject","comp","toSignalStateObject","sig","globalStateRegistry","DEV_WARNING_THRESHOLD","hasWarnedAboutSize","currentComponent","setCurrentComponent","instance","createComponentInstance","resetHookIndex","keyCache","serializeKey","key","cached","serialized","error","checkRegistrySize","isStateValue","value","getStateSignal","stateValue","equals","isTruthy","createStateProxy","target","PEEK_PROP","VALUE_OF_PROP","TO_STRING_PROP","TO_JSON_PROP","TO_PRIMITIVE_SYMBOL","_target","prop","_hint","currentValue","propValue","desc","state","initialValueOrFetcher","options","params","hookIndex","savedComponent","result","isAsync","isComputed","proxy","refetch","statusComputed","computed","errorComputed","statusValue","errorValue","newValue","originalFn","fn","resActions","createResource","val","testResult","signal","serializedKey","_state","ref","initialValue"],"mappings":"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","file":"chunk-TQLZ7UZX.js","sourcesContent":["import { signal, computed, createResource } from './signal'\nimport type { Signal, Computed, Resource } from './signal'\n\n/** Symbol to identify StateProxy and access underlying signal */\n// Use Symbol.for() to ensure the symbol is shared across module boundaries\n// This is important for Vite dev mode where modules may be loaded separately\nexport const STATE_SIGNAL = Symbol.for('flexium.stateSignal')\n\n/** Internal state object that may be a Signal, Computed, or Resource */\ninterface StateObject {\n value: unknown\n peek: () => unknown\n loading?: boolean\n error?: unknown\n state?: 'unresolved' | 'pending' | 'ready' | 'refreshing' | 'errored'\n latest?: unknown\n\n _stateActions?: StateActions\n _signal?: Signal<unknown> | Computed<unknown> | Resource<unknown>\n _isComputed?: boolean\n}\n\n/** Actions available for state mutation */\ninterface StateActions {\n mutate?: (value: unknown) => void\n refetch?: () => void\n}\n\n/**\n * Type-safe helper to wrap Resource as StateObject.\n * Consolidates unsafe type assertions in one place.\n * @internal\n */\nfunction toStateObject<T>(\n res: Resource<T>,\n actions: { mutate: (v: T | undefined) => void; refetch: () => void }\n): StateObject {\n const s = res as unknown as StateObject\n s._signal = res as Resource<unknown>\n s._stateActions = actions as StateActions\n return s\n}\n\n/**\n * Type-safe helper to create a computed StateObject.\n * @internal\n */\nfunction toComputedStateObject<T>(comp: Computed<T>): StateObject {\n return {\n value: undefined,\n peek: comp.peek,\n _signal: comp as Computed<unknown>,\n _isComputed: true,\n }\n}\n\n/**\n * Type-safe helper to wrap Signal as StateObject.\n * @internal\n */\nfunction toSignalStateObject<T>(sig: Signal<T>): StateObject {\n const s = sig as unknown as StateObject\n s._signal = sig as Signal<unknown>\n return s\n}\n\n// Global registry for keyed states\nconst globalStateRegistry = new Map<string, StateObject>()\n\n// Dev mode warning thresholds\nconst DEV_WARNING_THRESHOLD = 10000\nlet hasWarnedAboutSize = false\n\n// ============================================================================\n// Component Hook System - enables state() inside components\n// ============================================================================\n\ninterface ComponentInstance {\n id: symbol\n hookIndex: number\n hooks: unknown[]\n}\n\nlet currentComponent: ComponentInstance | null = null\n\n/**\n * Set the current component context for hook tracking.\n * Called by the renderer before executing a component function.\n * @internal\n */\nexport function setCurrentComponent(instance: ComponentInstance | null): void {\n currentComponent = instance\n}\n\n/**\n * Get the current component context.\n * @internal\n */\nexport function getCurrentComponent(): ComponentInstance | null {\n return currentComponent\n}\n\n/**\n * Create a new component instance for hook tracking.\n * @internal\n */\nexport function createComponentInstance(): ComponentInstance {\n return {\n id: Symbol('component'),\n hookIndex: 0,\n hooks: [],\n }\n}\n\n/**\n * Reset hook index for re-renders.\n * @internal\n */\nexport function resetHookIndex(instance: ComponentInstance): void {\n instance.hookIndex = 0\n}\n\n/** Key type - string or array of serializable values */\nexport type StateKey = string | readonly (string | number | boolean | null | undefined | object)[]\n\n// Cache for array key serialization to avoid repeated JSON.stringify calls\nconst keyCache = new WeakMap<readonly unknown[], string>()\n\n/**\n * Serialize a key to a string for registry lookup.\n * Arrays are JSON-stringified for consistent comparison.\n * Uses WeakMap cache to avoid repeated serialization of array keys.\n */\nfunction serializeKey(key: StateKey): string {\n if (typeof key === 'string') {\n return key\n }\n\n // Check cache first for array keys\n const cached = keyCache.get(key)\n if (cached !== undefined) {\n return cached\n }\n\n try {\n const serialized = JSON.stringify(key)\n keyCache.set(key, serialized)\n return serialized\n } catch (error) {\n // Handle circular references or other serialization errors\n console.warn('[Flexium] Failed to serialize state key, using fallback:', error)\n const fallback = String(key)\n return fallback\n }\n}\n\n/**\n * Check global state registry size and warn in development mode.\n * Does not enforce hard limits - use state.delete() or state.clear() for cleanup.\n * @internal\n */\nfunction checkRegistrySize(): void {\n const isDev = typeof process !== 'undefined' && process.env?.NODE_ENV !== 'production'\n if (\n isDev &&\n !hasWarnedAboutSize &&\n globalStateRegistry.size >= DEV_WARNING_THRESHOLD\n ) {\n hasWarnedAboutSize = true\n console.warn(\n `[Flexium] Global state registry has ${globalStateRegistry.size} entries. ` +\n `Consider using state.delete(key) to clean up unused states, ` +\n `or state.clear() to reset all global states.`\n )\n }\n}\n\n/** Action function type for state mutation */\nexport type StateAction<T> = (newValue: T | ((prev: T) => T)) => void\n\n/**\n * StateValue type - a value-like proxy that behaves like T.\n * Can be used directly in expressions and JSX.\n */\nexport type StateValue<T> = T & (() => T) & { peek(): T }\n\n/**\n * Check if a value is a StateValue (created by the state() API).\n * Useful for type guards and runtime detection of reactive state.\n * @internal\n * @param value - The value to check\n * @returns true if the value is a StateValue proxy, false otherwise\n *\n * @example\n * ```tsx\n * const count = state(0)\n * isStateValue(count) // true\n * isStateValue(5) // false\n * ```\n */\nexport function isStateValue(value: unknown): boolean {\n return (\n (typeof value === 'object' || typeof value === 'function') &&\n value !== null &&\n STATE_SIGNAL in value\n )\n}\n\n/**\n * Get the underlying signal from a StateValue proxy.\n * Used internally for reactive binding detection and DOM updates.\n * @internal\n * @param stateValue - The StateValue proxy to extract the signal from\n * @returns The underlying Signal if stateValue is a StateValue, null otherwise\n *\n * @example\n * ```tsx\n * const count = state(0)\n * const signal = getStateSignal(count) // Returns the internal Signal<number>\n * ```\n */\nexport function getStateSignal(stateValue: unknown): Signal<unknown> | null {\n if (isStateValue(stateValue)) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (stateValue as any)[STATE_SIGNAL]\n }\n return null\n}\n\n/**\n * Compare a StateValue with a primitive value safely.\n * Handles Proxy comparison automatically by extracting the underlying value.\n * \n * @param stateValue - The StateValue to compare\n * @param value - The value to compare against\n * @returns true if the StateValue's underlying value equals the comparison value\n * \n * @example\n * ```tsx\n * const [count, setCount] = state(0)\n * \n * // ✅ Safe comparison using helper\n * if (equals(count, 5)) {\n * console.log('Count is 5')\n * }\n * \n * // ❌ Direct comparison (always false)\n * if (count === 5) { ... }\n * ```\n */\nexport function equals<T>(stateValue: StateValue<T>, value: T): boolean {\n if (!isStateValue(stateValue)) {\n return false\n }\n const actualValue = stateValue.peek()\n return actualValue === value\n}\n\n/**\n * Check if a StateValue is truthy.\n * Useful for boolean checks without explicit conversion.\n * \n * @param stateValue - The StateValue to check\n * @returns true if the underlying value is truthy\n * \n * @example\n * ```tsx\n * const [user, setUser] = state<User | null>(null)\n * \n * // ✅ Safe boolean check\n * if (isTruthy(user)) {\n * console.log('User exists:', user.name)\n * }\n * \n * // ❌ Direct check (always true for Proxy)\n * if (user) { ... }\n * ```\n */\nexport function isTruthy<T>(stateValue: StateValue<T>): boolean {\n if (!isStateValue(stateValue)) {\n return false\n }\n return Boolean(stateValue.peek())\n}\n\n/**\n * Create a reactive proxy that behaves like a value but stays reactive.\n * The proxy is also callable - calling it returns the current value.\n * This ensures compatibility with code expecting getter functions.\n * \n * Performance optimization: Cache value and type checks to avoid repeated sig.value calls.\n */\nfunction createStateProxy<T>(sig: Signal<T> | Computed<T>): StateValue<T> {\n // Use an arrow function as the target so the proxy is callable but has no prototype\n // This prevents invariant violations in ownKeys trap\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const target = () => sig.value\n\n // Performance: Cache common property accessors to avoid repeated lookups\n const PEEK_PROP = 'peek'\n const VALUE_OF_PROP = 'valueOf'\n const TO_STRING_PROP = 'toString'\n const TO_JSON_PROP = 'toJSON'\n const TO_PRIMITIVE_SYMBOL = Symbol.toPrimitive\n\n const proxy = new Proxy(target, {\n // Make the proxy callable - returns current value\n apply() {\n return sig.value\n },\n\n get(_target, prop) {\n // Return underlying signal for reactive binding detection\n if (prop === STATE_SIGNAL) {\n return sig\n }\n\n // Allow direct access to peek() without tracking\n if (prop === PEEK_PROP) {\n return sig.peek\n }\n\n // Symbol.toPrimitive - called for +, -, ==, template literals, etc.\n if (prop === TO_PRIMITIVE_SYMBOL) {\n return (_hint: string) => sig.value\n }\n\n // valueOf - called for numeric operations\n if (prop === VALUE_OF_PROP) {\n return () => {\n // Optional dev mode warning for comparison operations\n // Note: This is intentionally minimal to avoid performance overhead\n // Full comparison detection would require stack trace analysis\n const isDev = typeof process !== 'undefined' && process.env?.NODE_ENV !== 'production'\n if (isDev && \n typeof process !== 'undefined' && process.env?.FLEXIUM_WARN_COMPARISON === 'true') {\n // Only warn if explicitly enabled via environment variable\n // Most users should rely on ESLint rules instead\n }\n return sig.value\n }\n }\n\n // toString - called for string concatenation\n if (prop === TO_STRING_PROP) {\n return () => String(sig.value)\n }\n\n // toJSON - called for JSON.stringify\n if (prop === TO_JSON_PROP) {\n return () => sig.value\n }\n\n // Performance: Read value once and cache type check result\n // For object/array values, access properties on current value\n // Note: accessing sig.value here tracks the signal in any enclosing effect\n const currentValue = sig.value\n\n // Performance: Early return for null (most common non-object case)\n if (currentValue === null) {\n return undefined\n }\n\n // Performance: Type check once\n const isObject = typeof currentValue === 'object'\n if (isObject) {\n const obj = currentValue as Record<string | symbol, unknown>\n const propValue = obj[prop]\n // If it's a function (like array methods), bind it to the current value\n if (typeof propValue === 'function') {\n return propValue.bind(currentValue)\n }\n return propValue\n }\n\n return undefined\n },\n\n // For property checks (like 'length' in array)\n has(_target, prop) {\n if (prop === STATE_SIGNAL) return true\n // Performance: Read value once\n const currentValue = sig.value\n // Performance: Early return for null\n if (currentValue === null) return false\n // Performance: Type check once\n return typeof currentValue === 'object' && prop in (currentValue as object)\n },\n\n // For Object.keys, for...in loops\n ownKeys(_target) {\n // Performance: Read value once\n const currentValue = sig.value\n // Performance: Early return for null\n if (currentValue === null) return []\n // Performance: Type check once\n if (typeof currentValue === 'object') {\n return Reflect.ownKeys(currentValue as object)\n }\n return []\n },\n\n getOwnPropertyDescriptor(_target, prop) {\n if (prop === STATE_SIGNAL) {\n return { configurable: true, enumerable: false, value: sig }\n }\n // Performance: Read value once\n const currentValue = sig.value\n // Performance: Early return for null\n if (currentValue === null) return undefined\n // Performance: Type check once\n if (typeof currentValue === 'object') {\n const desc = Object.getOwnPropertyDescriptor(currentValue as object, prop)\n if (desc) {\n // Make it configurable to satisfy Proxy invariants\n return { ...desc, configurable: true }\n }\n }\n return undefined\n },\n })\n\n return proxy as StateValue<T>\n}\n\n/** Async state status */\nexport type AsyncStatus = 'idle' | 'loading' | 'success' | 'error'\n\n/** Options for state() */\nexport interface StateOptions<P = unknown> {\n /**\n * Key for global state sharing. Can be a string or array.\n * Array keys are useful for hierarchical namespacing.\n * @example\n * state('light', { key: 'theme' })\n * state(null, { key: ['user', 'profile', userId] })\n */\n key?: StateKey\n /**\n * Parameters to pass to the function (for computed/async state).\n * Improves DX by making dependencies explicit.\n * @example\n * state(\n * async ({ userId }) => fetch(`/api/users/${userId}`),\n * { key: ['user', userId], params: { userId } }\n * )\n */\n params?: P\n}\n\n/**\n * Unified State API\n *\n * One function for all reactive state needs - always returns an array for consistency:\n * 1. Simple state: const [count, setCount] = state(0)\n * 2. Derived state: const [doubled] = state(() => count * 2)\n * 3. Async state: const [data, refetch, status, error] = state(async () => fetch(...))\n * 4. Global state: const [theme, setTheme] = state('light', { key: 'theme' })\n * 5. With params: const [user] = state(async (p) => fetch(`/api/${p.id}`), { params: { id } })\n *\n * @example\n * ```tsx\n * function Counter() {\n * const [count, setCount] = state(0)\n * const [doubled] = state(() => count * 2)\n * return <Button onPress={() => setCount(count + 1)}>{doubled}</Button>\n * }\n * ```\n */\n// Static methods interface for the state function\ninterface StateFunction {\n // Overloads\n <T>(initialValue: T, options?: StateOptions): [StateValue<T>, StateAction<T>]\n <T, P>(computeFn: (params: P) => T, options: StateOptions<P> & { params: P }): [StateValue<T>]\n <T>(computeFn: () => T, options?: StateOptions): [StateValue<T>]\n <T, P>(fetcher: (params: P) => Promise<T>, options: StateOptions<P> & { params: P }): [StateValue<T | undefined>, () => void, StateValue<AsyncStatus>, StateValue<unknown>]\n <T>(fetcher: () => Promise<T>, options?: StateOptions): [StateValue<T | undefined>, () => void, StateValue<AsyncStatus>, StateValue<unknown>]\n\n /** Delete a specific global state by key */\n delete: (key: StateKey) => boolean\n /** Clear all global states */\n clear: () => void\n /** Check if a global state exists */\n has: (key: StateKey) => boolean\n /** Current number of global states */\n readonly size: number\n}\n\n// Overload 1: Value → [StateValue, Setter]\nfunction state<T>(\n initialValue: T,\n options?: StateOptions\n): [StateValue<T>, StateAction<T>]\n\n// Overload 2: Sync function with params → [StateValue] (derived, no setter)\nfunction state<T, P>(\n computeFn: (params: P) => T,\n options: StateOptions<P> & { params: P }\n): [StateValue<T>]\n\n// Overload 3: Sync function without params → [StateValue] (derived, no setter)\nfunction state<T>(\n computeFn: () => T,\n options?: StateOptions\n): [StateValue<T>]\n\n// Overload 4: Async function with params → [StateValue, refetch, status, error]\nfunction state<T, P>(\n fetcher: (params: P) => Promise<T>,\n options: StateOptions<P> & { params: P }\n): [StateValue<T | undefined>, () => void, StateValue<AsyncStatus>, StateValue<unknown>]\n\n// Overload 5: Async function without params → [StateValue, refetch, status, error]\nfunction state<T>(\n fetcher: () => Promise<T>,\n options?: StateOptions\n): [StateValue<T | undefined>, () => void, StateValue<AsyncStatus>, StateValue<unknown>]\n\nfunction state<T, P = unknown>(\n initialValueOrFetcher: T | ((params?: P) => T) | ((params?: P) => Promise<T>),\n options?: StateOptions<P>\n): [StateValue<T>] | [StateValue<T>, StateAction<T>] | [StateValue<T | undefined>, () => void, StateValue<AsyncStatus>, StateValue<unknown>] {\n const key = options?.key ? serializeKey(options.key) : undefined\n const params = options?.params\n\n // 0. Hook System - reuse state from previous render if inside a component\n if (currentComponent && !key) {\n const comp = currentComponent\n const hookIndex = comp.hookIndex++\n\n // Return existing hook if available\n if (hookIndex < comp.hooks.length) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return comp.hooks[hookIndex] as any\n }\n\n // Create new state and store in hooks array\n // Temporarily clear currentComponent to avoid infinite recursion\n const savedComponent = currentComponent\n currentComponent = null\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const result = state(initialValueOrFetcher as any, options as any)\n currentComponent = savedComponent\n\n comp.hooks.push(result)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return result as any\n }\n\n // 1. Check Global Registry for keyed state\n if (key && globalStateRegistry.has(key)) {\n const cached = globalStateRegistry.get(key)!\n const isAsync = 'loading' in cached && cached._stateActions?.refetch !== undefined\n const isComputed = cached._isComputed\n\n const proxy = createStateProxy(cached._signal as Signal<T>)\n\n if (isComputed) {\n return [proxy] as [StateValue<T>]\n }\n\n if (isAsync) {\n const refetch = cached._stateActions?.refetch || (() => { })\n // Performance: Use computed directly instead of state() to avoid recursion\n const statusComputed = computed<AsyncStatus>(() => {\n if (cached.error) return 'error'\n if (cached.loading) return 'loading'\n if (cached.value !== undefined) return 'success'\n return 'idle'\n })\n const errorComputed = computed<unknown>(() => cached.error)\n const statusValue = createStateProxy(statusComputed)\n const errorValue = createStateProxy(errorComputed)\n return [proxy, refetch, statusValue, errorValue] as [StateValue<T | undefined>, () => void, StateValue<AsyncStatus>, StateValue<unknown>]\n }\n\n const setter: StateAction<T> = (newValue) => {\n if (typeof newValue === 'function') {\n cached.value = (newValue as (prev: T) => T)(cached.peek() as T)\n } else {\n cached.value = newValue\n }\n }\n return [proxy, setter] as [StateValue<T>, StateAction<T>]\n }\n\n // 2. Handle function input (computed or async)\n if (typeof initialValueOrFetcher === 'function') {\n const originalFn = initialValueOrFetcher as (params?: P) => T | Promise<T>\n // Wrap function to inject params if provided\n const fn = params !== undefined\n ? () => originalFn(params)\n : originalFn as () => T | Promise<T>\n\n // Try to detect if it's async by checking constructor name\n // This handles `async () => ...` functions\n const isAsyncFn = originalFn.constructor.name === 'AsyncFunction'\n\n if (isAsyncFn) {\n // Async function → Resource\n const [res, resActions] = createResource(fn, async (val) => val)\n const s = toStateObject(res, resActions)\n\n if (key) {\n globalStateRegistry.set(key, s)\n checkRegistrySize()\n }\n\n const proxy = createStateProxy(s._signal as Signal<T>)\n // Performance: Use computed directly instead of state() to avoid recursion\n const statusComputed = computed<AsyncStatus>(() => {\n if (s.error) return 'error'\n if (s.loading) return 'loading'\n if (s.value !== undefined) return 'success'\n return 'idle'\n })\n const errorComputed = computed<unknown>(() => s.error)\n const statusValue = createStateProxy(statusComputed)\n const errorValue = createStateProxy(errorComputed)\n\n return [proxy, resActions.refetch, statusValue, errorValue] as [StateValue<T | undefined>, () => void, StateValue<AsyncStatus>, StateValue<unknown>]\n }\n\n // Sync function → Computed\n // First, try running to check if it returns a Promise (for non-async functions that return Promise)\n let testResult: T | Promise<T>\n try {\n testResult = fn()\n } catch {\n // If it throws during initial call, treat as computed (will throw on access)\n const comp = computed(fn as () => T)\n const s = toComputedStateObject(comp)\n if (key) {\n globalStateRegistry.set(key, s)\n checkRegistrySize()\n }\n return [createStateProxy(comp)] as [StateValue<T>]\n }\n\n if (testResult instanceof Promise) {\n // It's a Promise-returning function → Resource\n const [res, resActions] = createResource(fn, async (val) => val)\n const s = toStateObject(res, resActions)\n\n if (key) {\n globalStateRegistry.set(key, s)\n checkRegistrySize()\n }\n\n const proxy = createStateProxy(s._signal as Signal<T>)\n // Performance: Use computed directly instead of state() to avoid recursion\n const statusComputed = computed<AsyncStatus>(() => {\n if (s.error) return 'error'\n if (s.loading) return 'loading'\n if (s.value !== undefined) return 'success'\n return 'idle'\n })\n const errorComputed = computed<unknown>(() => s.error)\n const statusValue = createStateProxy(statusComputed)\n const errorValue = createStateProxy(errorComputed)\n\n return [proxy, resActions.refetch, statusValue, errorValue] as [StateValue<T | undefined>, () => void, StateValue<AsyncStatus>, StateValue<unknown>]\n }\n\n // Sync function → Computed (memoized derived value)\n const comp = computed(fn as () => T)\n const s = toComputedStateObject(comp)\n if (key) {\n globalStateRegistry.set(key, s)\n checkRegistrySize()\n }\n return [createStateProxy(comp)] as [StateValue<T>]\n }\n\n // 3. Plain value → Signal with setter\n const sig = signal<T>(initialValueOrFetcher)\n const s = toSignalStateObject(sig)\n\n if (key) {\n globalStateRegistry.set(key, s)\n checkRegistrySize()\n }\n\n const proxy = createStateProxy(sig)\n const setter: StateAction<T> = (newValue) => {\n if (typeof newValue === 'function') {\n sig.value = (newValue as (prev: T) => T)(sig.peek())\n } else {\n sig.value = newValue\n }\n }\n\n return [proxy, setter] as [StateValue<T>, StateAction<T>]\n}\n\n/**\n * Delete a specific global state by key\n * @param key - The key of the state to delete\n * @returns true if the state was deleted, false if it didn't exist\n *\n * @example\n * ```ts\n * state.delete('theme')\n * state.delete(['user', 'profile', userId])\n * ```\n */\nstate.delete = function (key: StateKey): boolean {\n const serializedKey = serializeKey(key)\n return globalStateRegistry.delete(serializedKey)\n}\n\n/**\n * Clear all global states (useful for testing or resetting app)\n *\n * @example\n * ```ts\n * state.clear()\n * ```\n */\nstate.clear = function (): void {\n globalStateRegistry.clear()\n hasWarnedAboutSize = false\n}\n\n/**\n * Check if a global state exists\n * @param key - The key to check\n * @returns true if the state exists\n *\n * @example\n * ```ts\n * if (state.has('theme')) { ... }\n * ```\n */\nstate.has = function (key: StateKey): boolean {\n const serializedKey = serializeKey(key)\n return globalStateRegistry.has(serializedKey)\n}\n\n/**\n * Get the current number of global states\n */\nObject.defineProperty(state, 'size', {\n get: () => globalStateRegistry.size,\n enumerable: true,\n})\n\n// Export with proper typing (cast to include static methods)\nconst _state = state as StateFunction\nexport { _state as state }\n\n/**\n * Ref object type for DOM element references\n */\nexport interface RefObject<T> {\n current: T | null\n}\n\n/**\n * Create a ref object to hold a reference to a DOM element.\n * Use with the `ref` prop on JSX elements.\n *\n * @param initialValue - Initial value (typically null)\n * @returns A ref object with a `current` property\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * const inputRef = ref<HTMLInputElement>(null)\n *\n * const focusInput = () => {\n * inputRef.current?.focus()\n * }\n *\n * return (\n * <div>\n * <input ref={inputRef} type=\"text\" />\n * <button onclick={focusInput}>Focus</button>\n * </div>\n * )\n * }\n * ```\n */\nexport function ref<T>(initialValue: T | null): RefObject<T> {\n return { current: initialValue }\n}\n\n/**\n * Type helper for creating state with explicit type inference.\n * Useful when TypeScript inference fails or you want clearer types.\n * \n * @param initial - Initial value\n * @returns Tuple of [StateValue, StateAction]\n * \n * @example\n * ```tsx\n * // Better type inference in some cases\n * const [user, setUser] = createState<User | null>(null)\n * ```\n */\nexport function createState<T>(initial: T): [StateValue<T>, StateAction<T>] {\n return state(initial)\n}\n\n/**\n * Type helper for creating computed state with explicit type inference.\n * Useful when TypeScript inference fails or you want clearer types.\n * \n * @param fn - Computed function\n * @returns Tuple of [StateValue]\n * \n * @example\n * ```tsx\n * // Better type inference in some cases\n * const [total] = createComputed(() => items.reduce((sum, item) => sum + item.price, 0))\n * ```\n */\nexport function createComputed<T>(fn: () => T): [StateValue<T>] {\n // Use the imported computed from signal.ts, not state() to avoid recursion\n const comp = computed(fn)\n const s = toComputedStateObject(comp)\n return [createStateProxy(comp)] as [StateValue<T>]\n}\n"]}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
'use strict';var chunkCBO2X74Q_js=require('./chunk-CBO2X74Q.js'),chunkTQLZ7UZX_js=require('./chunk-TQLZ7UZX.js'),chunkQ7IWDVJ4_js=require('./chunk-Q7IWDVJ4.js'),chunkMKE3KA43_js=require('./chunk-MKE3KA43.js');var fe=new Set,pe=new Set(["focus","blur","mouseenter","mouseleave","load","unload","scroll"]),K=new WeakMap;function Ee(e){e.target;let t=e.type.toLowerCase(),o=!pe.has(t),i=e.composedPath?.()||[],r=e.target;if(i.length===0&&r)for(;r;)i.push(r),r=r.parentNode;for(let d of i){let a=d;if(a===document||!a)break;let l=K.get(a);if(l?.has(t)){let s=l.get(t);if(s){try{s(e);}catch(c){chunkMKE3KA43_js.b(chunkMKE3KA43_js.a.EVENT_HANDLER_FAILED,{eventType:t},c);}if(e.cancelBubble)return}}if(!o)break}}function Se(e){if(!(typeof document>"u")&&!fe.has(e)){let n=pe.has(e);document.addEventListener(e,Ee,{capture:n}),fe.add(e);}}var Q={on(e,n,t){let o=n.toLowerCase(),i=K.get(e);i||(i=new Map,K.set(e,i)),i.set(o,t),Se(o);},off(e,n){let t=n.toLowerCase(),o=K.get(e);o&&o.delete(t);}};var U={width:{cssProp:"width",transform:"px"},height:{cssProp:"height",transform:"px"},flexDirection:{cssProp:"flexDirection",transform:"none"},justifyContent:{cssProp:"justifyContent",transform:"none"},alignItems:{cssProp:"alignItems",transform:"none"},alignSelf:{cssProp:"alignSelf",transform:"none"},flexWrap:{cssProp:"flexWrap",transform:"none"},flex:{cssProp:"flex",transform:"string"},gap:{cssProp:"gap",transform:"px"},justify:{cssProp:"justifyContent",transform:"none"},align:{cssProp:"alignItems",transform:"none"},bg:{cssProp:"backgroundColor",transform:"none"},color:{cssProp:"color",transform:"none"},borderRadius:{cssProp:"borderRadius",transform:"px"},borderWidth:{cssProp:"borderWidth",transform:"px",sideEffect:(e,n)=>{n!==void 0&&e.borderStyle!=="solid"&&(e.borderStyle="solid");}},borderColor:{cssProp:"borderColor",transform:"none"},opacity:{cssProp:"opacity",transform:"string"},fontSize:{cssProp:"fontSize",transform:"px"},fontWeight:{cssProp:"fontWeight",transform:"string"},fontFamily:{cssProp:"fontFamily",transform:"none"},lineHeight:{cssProp:"lineHeight",transform:"string"},textAlign:{cssProp:"textAlign",transform:"none"},padding:{cssProp:"padding",transform:"px"},paddingTop:{cssProp:"paddingTop",transform:"px"},paddingRight:{cssProp:"paddingRight",transform:"px"},paddingBottom:{cssProp:"paddingBottom",transform:"px"},paddingLeft:{cssProp:"paddingLeft",transform:"px"},margin:{cssProp:"margin",transform:"px"},marginTop:{cssProp:"marginTop",transform:"px"},marginRight:{cssProp:"marginRight",transform:"px"},marginBottom:{cssProp:"marginBottom",transform:"px"},marginLeft:{cssProp:"marginLeft",transform:"px"}},ue={Row:"div",Column:"div",Stack:"div",Text:"span",Button:"button",Input:"input",Container:"div"},X={onPress:"click",onHover:"mouseenter",onChange:"input",onFocus:"focus",onBlur:"blur"},me=new Set(["children","key","ref","className","style","width","height","padding","paddingTop","paddingRight","paddingBottom","paddingLeft","margin","marginTop","marginRight","marginBottom","marginLeft","gap","flex","flexDirection","flexWrap","justifyContent","alignItems","alignSelf","align","justify","bg","color","borderRadius","borderWidth","borderColor","opacity","fontSize","fontWeight","fontFamily","lineHeight","textAlign"]),Te="http://www.w3.org/2000/svg",Le=new Set(["svg","path","circle","rect","line","polyline","polygon","ellipse","g","text","tspan","defs","use","symbol","marker","linearGradient","radialGradient","stop","clipPath","pattern","mask","filter"]),ke={viewBox:"viewBox",preserveAspectRatio:"preserveAspectRatio",strokeWidth:"stroke-width",strokeLinecap:"stroke-linecap",strokeLinejoin:"stroke-linejoin",strokeDasharray:"stroke-dasharray",strokeDashoffset:"stroke-dashoffset",fillOpacity:"fill-opacity",strokeOpacity:"stroke-opacity",stopColor:"stop-color",stopOpacity:"stop-opacity",clipPath:"clip-path",markerEnd:"marker-end",markerStart:"marker-start",markerMid:"marker-mid"};function Ae(e){return typeof e=="number"?`${e}px`:e}var ge=new Map;function he(e){let n=ge.get(e);return n===void 0&&(n=e.replace(/[A-Z]/g,t=>`-${t.toLowerCase()}`),ge.set(e,n)),n}function Re(e){return e.replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(/</g,"<").replace(/>/g,">")}function we(e,n){if(e!=null)switch(n){case "px":return Ae(e);case "string":return String(e);case "none":default:return e}}function Fe(e,n,t){let o=e.style,i=n.style,r=t.style;if(i!==r){if(i&&typeof i=="object")for(let l in i)(!r||!(l in r))&&o.setProperty(he(l),"");if(r&&typeof r=="object")for(let l in r){let s=r[l];(!i||i[l]!==s)&&o.setProperty(he(l),s);}}let d=e.getAttribute("data-flexium-type");(t.flexDirection||t.justifyContent||t.alignItems||t.flexWrap||t.gap!==void 0||t.justify||t.align||d==="Row"||d==="Column"||d==="Stack")&&(o.display!=="flex"&&(o.display="flex"),d==="Row"&&o.flexDirection!=="row"&&(o.flexDirection="row"),d==="Column"&&o.flexDirection!=="column"&&(o.flexDirection="column"));for(let l in n)if(l in U&&!(l in t)){let s=U[l],c=s.cssProp;o[c]!==""&&(o[c]=""),s.sideEffect&&s.sideEffect(o,void 0);}for(let l in t)if(l in U){let s=n[l],c=t[l];if(s===c)continue;let p=U[l],m=we(c,p.transform),f=p.cssProp;m===void 0?o[f]!==""&&(o[f]=""):o[f]!==m&&(o[f]=m),p.sideEffect&&p.sideEffect(o,m);}}function ye(e){if(typeof e=="string")return e;if(Array.isArray(e)){let n="";for(let t=0;t<e.length;t++){let o=e[t];if(!o)continue;let i=typeof o=="string"?o:ye(o);i&&(n=n?`${n} ${i}`:i);}return n}if(typeof e=="object"&&e!==null){let n="";for(let t in e)e[t]&&(n=n?`${n} ${t}`:t);return n}return ""}var ee=class{createNode(n,t){let o=ue[n]??n,i;return Le.has(o)?i=document.createElementNS(Te,o):i=document.createElement(o),ue[n]&&i.setAttribute("data-flexium-type",n),this.updateNode(i,{},t),i}updateNode(n,t,o){if(o.className!==t.className){let r=ye(o.className);n instanceof SVGElement?n.setAttribute("class",r):n.className=r;}Fe(n,t,o);for(let r in t)if(!(r in o)){if(typeof r=="symbol")continue;if(r.startsWith("on")){let d=X[r]||r.slice(2).toLowerCase();this.removeEventListener(n,d,t[r]);}else me.has(r)||n.removeAttribute(r);}let i=Reflect.ownKeys(o);for(let r of i){if(typeof r=="symbol")continue;let d=r,a=o[d],l=t[d];if(a!==l){if(d.startsWith("on")){let s=X[d]||d.slice(2).toLowerCase();l&&this.removeEventListener(n,s,l),a&&this.addEventListener(n,s,a);}else if(!me.has(d))if(a==null||a===false)n.removeAttribute(d);else if(a===true)n.setAttribute(d,"");else {let s=ke[d]||d;n.setAttribute(s,Re(String(a)));}}}}appendChild(n,t){n.appendChild(t);}insertBefore(n,t,o){n.insertBefore(t,o);}nextSibling(n){return n.nextSibling}removeChild(n,t){n.removeChild(t);}createTextNode(n){return document.createTextNode(n)}updateTextNode(n,t){n.textContent=t;}addEventListener(n,t,o){let i=X[t]||t;Q.on(n,i,o);}removeEventListener(n,t,o){let i=X[t]||t;Q.off(n,i);}},g=new ee;var te=Symbol("flexium.list");function ne(e){return e!==null&&typeof e=="object"&&te in e&&e[te]===true}function Pe(e,n){return typeof e=="number"?e:e.mode==="fixed"?e.itemHeight:e.estimatedItemHeight}function De(e,n,t,o,i){let r=o*t;if(o===0)return {startIndex:0,endIndex:-1,totalHeight:0};let d=Math.floor(e/t),a=Math.ceil(n/t),l=d+a;return {startIndex:Math.max(0,d-i),endIndex:Math.min(o-1,l+i),totalHeight:r}}function oe(e,n,t,o){return e.virtual?Ie(e,n,t,o):Me(e,n,t,o)}function Me(e,n,t,o){let{each:i,renderItem:r,getKey:d,class:a,style:l}=e,s=document.createElement("div");s.setAttribute("role","list"),a&&(s.className=a),l&&Object.entries(l).forEach(([f,u])=>{s.style[f]=typeof u=="number"?`${u}px`:u;}),n.appendChild(s);let c=new Map,p=(f,u)=>d?d(f,u):u,m=chunkMKE3KA43_js.i(()=>{let f=i()||[],u=new Set;f.forEach((T,N)=>{let E=p(T,N);if(u.add(E),!c.has(E)){let A=chunkMKE3KA43_js.k(N),x=r(T,()=>A()),C=t(x);C&&C instanceof HTMLElement&&(C.setAttribute("role","listitem"),s.appendChild(C),c.set(E,{node:C,dispose:()=>{try{o(C);}catch{}}}));}});for(let[T,N]of c)u.has(T)||(N.dispose(),N.node.parentNode===s&&s.removeChild(N.node),c.delete(T));});return ()=>{m();for(let f of c.values())f.dispose();c.clear(),s.parentNode===n&&n.removeChild(s);}}function Ie(e,n,t,o){let{each:i,renderItem:r,height:d,width:a,itemSize:l,overscan:s,getKey:c,onScroll:p,onVisibleRangeChange:m}=e;if(!d||!l)return console.warn("List: height and itemSize are required when virtual is true"),()=>{};let f=document.createElement("div");f.style.height=typeof d=="number"?`${d}px`:d,f.style.width=a?typeof a=="number"?`${a}px`:a:"100%",f.style.overflow="auto",f.style.position="relative",f.setAttribute("role","list"),f.setAttribute("tabindex","0");let u=document.createElement("div");u.style.position="relative",u.style.width="100%",u.style.willChange="transform",f.appendChild(u),n.appendChild(f);let T=chunkMKE3KA43_js.k(0),N=new Map,E=-1,A=-1,x=()=>{T.set(f.scrollTop),p?.(f.scrollTop);};f.addEventListener("scroll",x,{passive:true});let C=(R,B)=>c?c(R,B):B,I=chunkMKE3KA43_js.i(()=>{let R=i()||[],B=T(),Ce=f.clientHeight||parseFloat(String(d)),V=Pe(l),{startIndex:G,endIndex:O,totalHeight:be}=De(B,Ce,V,R.length,s);u.style.height=`${be}px`,f.setAttribute("aria-rowcount",String(R.length)),(G!==E||O!==A)&&(m?.(G,O),E=G,A=O);let re=new Set;for(let y=G;y<=O&&y<R.length;y++){let F=R[y],W=C(F,y);re.add(W);let P=N.get(W);if(P){P.indexSig.peek()!==y&&P.indexSig.set(y);let _=P.node;_.style.transform=`translateY(${y*V}px)`,_.setAttribute("aria-rowindex",String(y+1));}else {let _=chunkMKE3KA43_js.k(y),ve=r(F,()=>_()),b=t(ve);b&&b instanceof HTMLElement&&(b.style.position="absolute",b.style.top="0",b.style.left="0",b.style.right="0",b.style.transform=`translateY(${y*V}px)`,b.style.height=`${V}px`,b.style.boxSizing="border-box",b.setAttribute("role","listitem"),b.setAttribute("aria-rowindex",String(y+1)),u.appendChild(b),P={item:F,key:W,node:b,indexSig:_,dispose:()=>{try{o(b);}catch{}}},N.set(W,P));}}for(let[y,F]of N)re.has(y)||(F.dispose(),F.node.parentNode===u&&u.removeChild(F.node),N.delete(y));});return ()=>{I(),f.removeEventListener("scroll",x);for(let R of N.values())R.dispose();N.clear(),f.parentNode===n&&n.removeChild(f);}}var Ne=new WeakMap;function w(e){return Ne.get(e)}function D(e,n){Ne.set(e,n);}function Y(e,n,t,o){let i=n&&n.length>0,r=t&&t.length>0;if(!i&&!r)return;if(!r){for(let s of n){let c=s&&w(s);c&&(v(c),g.removeChild(e,c));}return}if(!i){let s=document.createDocumentFragment();for(let c of t){let p=h(c,void 0);p&&(D(c,p),s.appendChild(p));}o?e.insertBefore(s,o):e.appendChild(s);return}let d=new Map;for(let s=0;s<n.length;s++){let c=n[s],p=c.key??`__idx_${s}_${c.type}`;d.set(p,c);}let a=new Set,l=e.firstChild;for(let s=0;s<t.length;s++){let c=t[s],p=c.key??`__idx_${s}_${c.type}`;a.add(p);let m=d.get(p),f=l;if(!m||m.type!==c.type){let u=h(c,void 0);u&&(D(c,u),e.insertBefore(u,f));}else {_e(m,c);let u=w(c);u&&(l!==u?e.insertBefore(u,f):l=l?.nextSibling||null);}}for(let[s,c]of d){let p=w(c);!a.has(s)&&p&&(v(p),p.parentNode===e&&g.removeChild(e,p));}}function _e(e,n){let t=w(e);if(!t||(D(n,t),typeof n.type!="string"))return;g.updateNode(t,e.props,n.props);let o=e.children||[],i=n.children||[];if(!(o.length===0&&i.length===0)){if(i.length===1&&(typeof i[0]=="string"||typeof i[0]=="number")&&t.firstChild?.nodeType===Node.TEXT_NODE&&t.childNodes.length===1){let r=String(i[0]);String(o[0])!==r&&g.updateTextNode(t.firstChild,r);return}Y(t,o,i,null);}}var H=new WeakMap;function M(e,n){let t=H.get(e);t||(t=new Set,H.set(e,t)),t.add(n);}function h(e,n){if(e==null||typeof e=="boolean")return null;if(ne(e)){let t=n||document.createDocumentFragment(),o=oe(e,t,r=>h(r),v),i=document.createTextNode("");return M(i,o),n?t.firstChild:t}if(chunkTQLZ7UZX_js.d(e)){let t=chunkTQLZ7UZX_js.e(e);if(t){let o=document.createTextNode(""),i=n||document.createDocumentFragment();g.appendChild(i,o);let r=o,d=chunkMKE3KA43_js.i(()=>{let a=t.value,l=o.parentNode;if(l)if((typeof a=="string"||typeof a=="number")&&r&&r.nodeType===Node.TEXT_NODE&&r!==o)g.updateTextNode(r,String(a));else {let s=h(a);if(s)r&&r!==o&&r.parentNode===l?r.nodeType===Node.TEXT_NODE&&s.nodeType===Node.TEXT_NODE?g.updateTextNode(r,s.textContent||""):(l.replaceChild(s,r),r=s):(l.insertBefore(s,o.nextSibling),r=s);else {if(r&&r!==o&&r.parentNode===l)try{l.removeChild(r);}catch(c){chunkMKE3KA43_js.b(chunkMKE3KA43_js.a.DOM_CLEANUP_FAILED,{operation:"removeChild"},c);}r=o;}}});return M(o,d),n?o:i}}if(chunkMKE3KA43_js.m(e)||typeof e=="function"){let t=document.createTextNode(""),o=n||document.createDocumentFragment();g.appendChild(o,t);let i=[],r=null,d=[],a=chunkMKE3KA43_js.i(()=>{let l=chunkMKE3KA43_js.m(e)?e.value:e(),s=t.parentNode;if(s){if(Array.isArray(l)){let c=l.filter(p=>p!=null);if(d.length>0){let p=t.nextSibling;Y(s,d,c,p);}else {for(let m of i)if(v(m),m.parentNode===s)try{s.removeChild(m);}catch(f){chunkMKE3KA43_js.b(chunkMKE3KA43_js.a.DOM_CLEANUP_FAILED,{operation:"removeChild"},f);}i=[];let p=document.createDocumentFragment();for(let m of c){let f=h(m,p);f&&typeof m=="object"&&D(m,f);}i=Array.from(p.childNodes),s.insertBefore(p,t.nextSibling);}d=c,r=l;return}if(d.length>0){for(let c of d){let p=w(c);if(p&&p.parentNode===s){v(p);try{s.removeChild(p);}catch(m){chunkMKE3KA43_js.b(chunkMKE3KA43_js.a.DOM_CLEANUP_FAILED,{operation:"removeChild"},m);}}}d=[];}if(l!==r){for(let c of i)if(v(c),c.parentNode===s)try{s.removeChild(c);}catch(p){chunkMKE3KA43_js.b(chunkMKE3KA43_js.a.DOM_CLEANUP_FAILED,{operation:"removeChild"},p);}if(i=[],typeof l=="string"||typeof l=="number"){let c=g.createTextNode(String(l));s.insertBefore(c,t.nextSibling),i=[c];}else {let c=h(l);c&&(c.nodeType===Node.DOCUMENT_FRAGMENT_NODE?(i=Array.from(c.childNodes),s.insertBefore(c,t.nextSibling)):(s.insertBefore(c,t.nextSibling),i=[c]));}r=l;}}});return M(t,a),n?t:o}if(Array.isArray(e)){let t=document.createDocumentFragment();for(let o of e)h(o,t);return n&&g.appendChild(n,t),t}if(typeof e=="string"||typeof e=="number"){let t=g.createTextNode(String(e));return n&&g.appendChild(n,t),t}if(chunkQ7IWDVJ4_js.c(e)){if(typeof e.type=="function"){let r=e.type,d=document.createTextNode(""),a=n||document.createDocumentFragment();g.appendChild(a,d);let l=[],s=[],c=chunkTQLZ7UZX_js.b(),p=chunkMKE3KA43_js.i(()=>{chunkTQLZ7UZX_js.c(c),chunkMKE3KA43_js.f(m=>{chunkMKE3KA43_js.n(m);let f=r._contextId;f&&chunkCBO2X74Q_js.c(f,e.props.value);let u;try{chunkTQLZ7UZX_js.a(c),u=r({...e.props,children:e.children});}finally{chunkTQLZ7UZX_js.a(null);}if(Array.isArray(u)&&u.every(x=>chunkQ7IWDVJ4_js.c(x)&&x.type!=="fragment")){let x=d.parentNode;if(x){let C=u;Y(x,s,C,d.nextSibling),s=C,l=C.map(I=>w(I)).filter(I=>I!=null);return}}let E=d.parentNode;if(E){for(let x of l)if(v(x),x.parentNode===E)try{E.removeChild(x);}catch(C){chunkMKE3KA43_js.b(chunkMKE3KA43_js.a.DOM_CLEANUP_FAILED,{operation:"removeChild"},C);}}l=[],s=[];let A=document.createDocumentFragment();h(u,A),E&&(l=Array.from(A.childNodes),E.insertBefore(A,d.nextSibling));});});return M(d,p),n?d:a}if(e.type==="fragment"){let r=document.createDocumentFragment();for(let d of e.children)h(d,r);return n&&g.appendChild(n,r),r}let t=g.createNode(e.type,e.props),o=He(t,e.props);o.length>0&&H.set(t,new Set(o));for(let r of e.children)h(r,t);n&&g.appendChild(n,t);let i=e.props.ref;return i&&(typeof i=="function"?(i(t),M(t,()=>{i(null);})):typeof i=="object"&&"current"in i&&(i.current=t,M(t,()=>{i.current=null;}))),t}return null}var q=Symbol("uninitialized");function He(e,n){let t=[];for(let o in n){let i=n[o];if(!o.startsWith("on")){if(chunkMKE3KA43_js.m(i)){let r=q,d=chunkMKE3KA43_js.i(()=>{let a=i.value;a!==r&&(g.updateNode(e,{[o]:r===q?void 0:r},{[o]:a}),r=a);});t.push(d);continue}if(typeof i=="function"){let r=q,d=chunkMKE3KA43_js.i(()=>{try{let a=i();a!==r&&(g.updateNode(e,{[o]:r===q?void 0:r},{[o]:a}),r=a);}catch(a){chunkMKE3KA43_js.b(chunkMKE3KA43_js.a.DOM_CLEANUP_FAILED,{operation:"updateNode",prop:o},a);}});t.push(d);}}}return t}function v(e){let n=H.get(e);if(n&&(n.forEach(t=>t()),H.delete(e)),e.childNodes&&e.childNodes.length>0){let t=Array.from(e.childNodes);for(let o of t)v(o);}}function xe(e){let n=null,t=null;return {render(o){t&&(v(t),e.innerHTML="",t=null),n&&(n(),n=null),n=chunkMKE3KA43_js.i(()=>{e.innerHTML="",t=h(o,e);});},unmount(){n&&(n(),n=null),v(e),e.innerHTML="";}}}function at(e,n){return n.innerHTML="",h(e,n)}function ft(e){return xe(e)}function gt(e){if(typeof document>"u")return null;let n=e.mount||document.body,t=document.createComment("portal"),o=null;return o=h(e.children,n),chunkMKE3KA43_js.n(()=>{o&&(v(o),o.parentNode===n&&n.removeChild(o));}),t}
|
|
2
|
+
exports.a=ee;exports.b=g;exports.c=te;exports.d=ne;exports.e=h;exports.f=xe;exports.g=at;exports.h=ft;exports.i=gt;//# sourceMappingURL=chunk-WEYAKKNF.js.map
|
|
3
|
+
//# sourceMappingURL=chunk-WEYAKKNF.js.map
|