@number10/jsx-core 5.0.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.
Files changed (340) hide show
  1. package/LICENSE +667 -0
  2. package/README.md +38 -0
  3. package/dist/animation/animated-signal.cjs +19 -0
  4. package/dist/animation/animated-signal.cjs.map +1 -0
  5. package/dist/animation/animated-signal.d.ts +35 -0
  6. package/dist/animation/animated-signal.d.ts.map +1 -0
  7. package/dist/animation/animated-signal.js +19 -0
  8. package/dist/animation/animated-signal.js.map +1 -0
  9. package/dist/animation/create-spring.cjs +80 -0
  10. package/dist/animation/create-spring.cjs.map +1 -0
  11. package/dist/animation/create-spring.d.ts +56 -0
  12. package/dist/animation/create-spring.d.ts.map +1 -0
  13. package/dist/animation/create-spring.js +80 -0
  14. package/dist/animation/create-spring.js.map +1 -0
  15. package/dist/animation/easing.cjs +76 -0
  16. package/dist/animation/easing.cjs.map +1 -0
  17. package/dist/animation/easing.d.ts +45 -0
  18. package/dist/animation/easing.d.ts.map +1 -0
  19. package/dist/animation/easing.js +76 -0
  20. package/dist/animation/easing.js.map +1 -0
  21. package/dist/animation/effect-definitions.cjs +441 -0
  22. package/dist/animation/effect-definitions.cjs.map +1 -0
  23. package/dist/animation/effect-definitions.d.ts +60 -0
  24. package/dist/animation/effect-definitions.d.ts.map +1 -0
  25. package/dist/animation/effect-definitions.js +441 -0
  26. package/dist/animation/effect-definitions.js.map +1 -0
  27. package/dist/animation/effect-engine.cjs +189 -0
  28. package/dist/animation/effect-engine.cjs.map +1 -0
  29. package/dist/animation/effect-engine.d.ts +70 -0
  30. package/dist/animation/effect-engine.d.ts.map +1 -0
  31. package/dist/animation/effect-engine.js +189 -0
  32. package/dist/animation/effect-engine.js.map +1 -0
  33. package/dist/animation/index.d.ts +24 -0
  34. package/dist/animation/index.d.ts.map +1 -0
  35. package/dist/animation/spring-physics.cjs +94 -0
  36. package/dist/animation/spring-physics.cjs.map +1 -0
  37. package/dist/animation/spring-physics.d.ts +145 -0
  38. package/dist/animation/spring-physics.d.ts.map +1 -0
  39. package/dist/animation/spring-physics.js +94 -0
  40. package/dist/animation/spring-physics.js.map +1 -0
  41. package/dist/animation/tween.cjs +67 -0
  42. package/dist/animation/tween.cjs.map +1 -0
  43. package/dist/animation/tween.d.ts +60 -0
  44. package/dist/animation/tween.d.ts.map +1 -0
  45. package/dist/animation/tween.js +67 -0
  46. package/dist/animation/tween.js.map +1 -0
  47. package/dist/animation/types.d.ts +31 -0
  48. package/dist/animation/types.d.ts.map +1 -0
  49. package/dist/animation/useSpring.cjs +152 -0
  50. package/dist/animation/useSpring.cjs.map +1 -0
  51. package/dist/animation/useSpring.d.ts +55 -0
  52. package/dist/animation/useSpring.d.ts.map +1 -0
  53. package/dist/animation/useSpring.js +149 -0
  54. package/dist/animation/useSpring.js.map +1 -0
  55. package/dist/animation/useTween.cjs +208 -0
  56. package/dist/animation/useTween.cjs.map +1 -0
  57. package/dist/animation/useTween.d.ts +116 -0
  58. package/dist/animation/useTween.d.ts.map +1 -0
  59. package/dist/animation/useTween.js +208 -0
  60. package/dist/animation/useTween.js.map +1 -0
  61. package/dist/border-geometry.cjs +447 -0
  62. package/dist/border-geometry.cjs.map +1 -0
  63. package/dist/border-geometry.d.ts +114 -0
  64. package/dist/border-geometry.d.ts.map +1 -0
  65. package/dist/border-geometry.js +447 -0
  66. package/dist/border-geometry.js.map +1 -0
  67. package/dist/colors/color-presets.cjs +236 -0
  68. package/dist/colors/color-presets.cjs.map +1 -0
  69. package/dist/colors/color-presets.d.ts +89 -0
  70. package/dist/colors/color-presets.d.ts.map +1 -0
  71. package/dist/colors/color-presets.js +236 -0
  72. package/dist/colors/color-presets.js.map +1 -0
  73. package/dist/colors/color-theme-helpers.cjs +32 -0
  74. package/dist/colors/color-theme-helpers.cjs.map +1 -0
  75. package/dist/colors/color-theme-helpers.d.ts +65 -0
  76. package/dist/colors/color-theme-helpers.d.ts.map +1 -0
  77. package/dist/colors/color-theme-helpers.js +32 -0
  78. package/dist/colors/color-theme-helpers.js.map +1 -0
  79. package/dist/colors/color-types.cjs +38 -0
  80. package/dist/colors/color-types.cjs.map +1 -0
  81. package/dist/colors/color-types.d.ts +112 -0
  82. package/dist/colors/color-types.d.ts.map +1 -0
  83. package/dist/colors/color-types.js +38 -0
  84. package/dist/colors/color-types.js.map +1 -0
  85. package/dist/colors/color-utils.cjs +197 -0
  86. package/dist/colors/color-utils.cjs.map +1 -0
  87. package/dist/colors/color-utils.d.ts +216 -0
  88. package/dist/colors/color-utils.d.ts.map +1 -0
  89. package/dist/colors/color-utils.js +197 -0
  90. package/dist/colors/color-utils.js.map +1 -0
  91. package/dist/colors/contrast-contracts.cjs +265 -0
  92. package/dist/colors/contrast-contracts.cjs.map +1 -0
  93. package/dist/colors/contrast-contracts.d.ts +289 -0
  94. package/dist/colors/contrast-contracts.d.ts.map +1 -0
  95. package/dist/colors/contrast-contracts.js +265 -0
  96. package/dist/colors/contrast-contracts.js.map +1 -0
  97. package/dist/colors/index.cjs +55 -0
  98. package/dist/colors/index.cjs.map +1 -0
  99. package/dist/colors/index.d.ts +16 -0
  100. package/dist/colors/index.d.ts.map +1 -0
  101. package/dist/colors/index.js +55 -0
  102. package/dist/colors/index.js.map +1 -0
  103. package/dist/core-props.cjs +66 -0
  104. package/dist/core-props.cjs.map +1 -0
  105. package/dist/core-props.d.ts +395 -0
  106. package/dist/core-props.d.ts.map +1 -0
  107. package/dist/core-props.js +66 -0
  108. package/dist/core-props.js.map +1 -0
  109. package/dist/design-tokens/design-token-presets.cjs +91 -0
  110. package/dist/design-tokens/design-token-presets.cjs.map +1 -0
  111. package/dist/design-tokens/design-token-presets.d.ts +34 -0
  112. package/dist/design-tokens/design-token-presets.d.ts.map +1 -0
  113. package/dist/design-tokens/design-token-presets.js +91 -0
  114. package/dist/design-tokens/design-token-presets.js.map +1 -0
  115. package/dist/design-tokens/design-token-types.d.ts +97 -0
  116. package/dist/design-tokens/design-token-types.d.ts.map +1 -0
  117. package/dist/design-tokens/index.cjs +10 -0
  118. package/dist/design-tokens/index.cjs.map +1 -0
  119. package/dist/design-tokens/index.d.ts +9 -0
  120. package/dist/design-tokens/index.d.ts.map +1 -0
  121. package/dist/design-tokens/index.js +10 -0
  122. package/dist/design-tokens/index.js.map +1 -0
  123. package/dist/dev-config.cjs +296 -0
  124. package/dist/dev-config.cjs.map +1 -0
  125. package/dist/dev-config.d.ts +238 -0
  126. package/dist/dev-config.d.ts.map +1 -0
  127. package/dist/dev-config.js +296 -0
  128. package/dist/dev-config.js.map +1 -0
  129. package/dist/effects.cjs +69 -0
  130. package/dist/effects.cjs.map +1 -0
  131. package/dist/effects.d.ts +152 -0
  132. package/dist/effects.d.ts.map +1 -0
  133. package/dist/effects.js +69 -0
  134. package/dist/effects.js.map +1 -0
  135. package/dist/global-registry.cjs +25 -0
  136. package/dist/global-registry.cjs.map +1 -0
  137. package/dist/global-registry.d.ts +19 -0
  138. package/dist/global-registry.d.ts.map +1 -0
  139. package/dist/global-registry.js +25 -0
  140. package/dist/global-registry.js.map +1 -0
  141. package/dist/hooks.cjs +378 -0
  142. package/dist/hooks.cjs.map +1 -0
  143. package/dist/hooks.d.ts +322 -0
  144. package/dist/hooks.d.ts.map +1 -0
  145. package/dist/hooks.js +378 -0
  146. package/dist/hooks.js.map +1 -0
  147. package/dist/host-adapter.d.ts +414 -0
  148. package/dist/host-adapter.d.ts.map +1 -0
  149. package/dist/index.cjs +229 -0
  150. package/dist/index.cjs.map +1 -0
  151. package/dist/index.d.ts +32 -0
  152. package/dist/index.d.ts.map +1 -0
  153. package/dist/index.js +226 -0
  154. package/dist/index.js.map +1 -0
  155. package/dist/jsx-dev-runtime.cjs +10 -0
  156. package/dist/jsx-dev-runtime.cjs.map +1 -0
  157. package/dist/jsx-dev-runtime.d.ts +5 -0
  158. package/dist/jsx-dev-runtime.d.ts.map +1 -0
  159. package/dist/jsx-dev-runtime.js +11 -0
  160. package/dist/jsx-dev-runtime.js.map +1 -0
  161. package/dist/jsx-runtime.cjs +44 -0
  162. package/dist/jsx-runtime.cjs.map +1 -0
  163. package/dist/jsx-runtime.d.ts +24 -0
  164. package/dist/jsx-runtime.d.ts.map +1 -0
  165. package/dist/jsx-runtime.js +44 -0
  166. package/dist/jsx-runtime.js.map +1 -0
  167. package/dist/jsx-types.d.ts +25 -0
  168. package/dist/jsx-types.d.ts.map +1 -0
  169. package/dist/layout/appliers/container-applier.cjs +20 -0
  170. package/dist/layout/appliers/container-applier.cjs.map +1 -0
  171. package/dist/layout/appliers/container-applier.d.ts +9 -0
  172. package/dist/layout/appliers/container-applier.d.ts.map +1 -0
  173. package/dist/layout/appliers/container-applier.js +20 -0
  174. package/dist/layout/appliers/container-applier.js.map +1 -0
  175. package/dist/layout/appliers/position-applier.cjs +31 -0
  176. package/dist/layout/appliers/position-applier.cjs.map +1 -0
  177. package/dist/layout/appliers/position-applier.d.ts +8 -0
  178. package/dist/layout/appliers/position-applier.d.ts.map +1 -0
  179. package/dist/layout/appliers/position-applier.js +31 -0
  180. package/dist/layout/appliers/position-applier.js.map +1 -0
  181. package/dist/layout/layout-engine-test-utils.d.ts +26 -0
  182. package/dist/layout/layout-engine-test-utils.d.ts.map +1 -0
  183. package/dist/layout/layout-engine.cjs +628 -0
  184. package/dist/layout/layout-engine.cjs.map +1 -0
  185. package/dist/layout/layout-engine.d.ts +140 -0
  186. package/dist/layout/layout-engine.d.ts.map +1 -0
  187. package/dist/layout/layout-engine.js +628 -0
  188. package/dist/layout/layout-engine.js.map +1 -0
  189. package/dist/layout/strategies/base-strategy.cjs +31 -0
  190. package/dist/layout/strategies/base-strategy.cjs.map +1 -0
  191. package/dist/layout/strategies/base-strategy.d.ts +59 -0
  192. package/dist/layout/strategies/base-strategy.d.ts.map +1 -0
  193. package/dist/layout/strategies/base-strategy.js +31 -0
  194. package/dist/layout/strategies/base-strategy.js.map +1 -0
  195. package/dist/layout/strategies/column-layout.cjs +145 -0
  196. package/dist/layout/strategies/column-layout.cjs.map +1 -0
  197. package/dist/layout/strategies/column-layout.d.ts +38 -0
  198. package/dist/layout/strategies/column-layout.d.ts.map +1 -0
  199. package/dist/layout/strategies/column-layout.js +145 -0
  200. package/dist/layout/strategies/column-layout.js.map +1 -0
  201. package/dist/layout/strategies/row-layout.cjs +145 -0
  202. package/dist/layout/strategies/row-layout.cjs.map +1 -0
  203. package/dist/layout/strategies/row-layout.d.ts +38 -0
  204. package/dist/layout/strategies/row-layout.d.ts.map +1 -0
  205. package/dist/layout/strategies/row-layout.js +145 -0
  206. package/dist/layout/strategies/row-layout.js.map +1 -0
  207. package/dist/layout/strategies/stack-layout.cjs +94 -0
  208. package/dist/layout/strategies/stack-layout.cjs.map +1 -0
  209. package/dist/layout/strategies/stack-layout.d.ts +30 -0
  210. package/dist/layout/strategies/stack-layout.d.ts.map +1 -0
  211. package/dist/layout/strategies/stack-layout.js +94 -0
  212. package/dist/layout/strategies/stack-layout.js.map +1 -0
  213. package/dist/layout/types.d.ts +134 -0
  214. package/dist/layout/types.d.ts.map +1 -0
  215. package/dist/layout/utils/child-utils.cjs +129 -0
  216. package/dist/layout/utils/child-utils.cjs.map +1 -0
  217. package/dist/layout/utils/child-utils.d.ts +54 -0
  218. package/dist/layout/utils/child-utils.d.ts.map +1 -0
  219. package/dist/layout/utils/child-utils.js +129 -0
  220. package/dist/layout/utils/child-utils.js.map +1 -0
  221. package/dist/layout/utils/dimension-calculator.cjs +109 -0
  222. package/dist/layout/utils/dimension-calculator.cjs.map +1 -0
  223. package/dist/layout/utils/dimension-calculator.d.ts +59 -0
  224. package/dist/layout/utils/dimension-calculator.d.ts.map +1 -0
  225. package/dist/layout/utils/dimension-calculator.js +109 -0
  226. package/dist/layout/utils/dimension-calculator.js.map +1 -0
  227. package/dist/layout/utils/flex-distributor.cjs +173 -0
  228. package/dist/layout/utils/flex-distributor.cjs.map +1 -0
  229. package/dist/layout/utils/flex-distributor.d.ts +18 -0
  230. package/dist/layout/utils/flex-distributor.d.ts.map +1 -0
  231. package/dist/layout/utils/flex-distributor.js +173 -0
  232. package/dist/layout/utils/flex-distributor.js.map +1 -0
  233. package/dist/layout/utils/size-resolver.cjs +280 -0
  234. package/dist/layout/utils/size-resolver.cjs.map +1 -0
  235. package/dist/layout/utils/size-resolver.d.ts +84 -0
  236. package/dist/layout/utils/size-resolver.d.ts.map +1 -0
  237. package/dist/layout/utils/size-resolver.js +280 -0
  238. package/dist/layout/utils/size-resolver.js.map +1 -0
  239. package/dist/layout/utils/spacing-calculator.cjs +50 -0
  240. package/dist/layout/utils/spacing-calculator.cjs.map +1 -0
  241. package/dist/layout/utils/spacing-calculator.d.ts +27 -0
  242. package/dist/layout/utils/spacing-calculator.d.ts.map +1 -0
  243. package/dist/layout/utils/spacing-calculator.js +50 -0
  244. package/dist/layout/utils/spacing-calculator.js.map +1 -0
  245. package/dist/memo.cjs +18 -0
  246. package/dist/memo.cjs.map +1 -0
  247. package/dist/memo.d.ts +29 -0
  248. package/dist/memo.d.ts.map +1 -0
  249. package/dist/memo.js +18 -0
  250. package/dist/memo.js.map +1 -0
  251. package/dist/nineslice-contract.cjs +60 -0
  252. package/dist/nineslice-contract.cjs.map +1 -0
  253. package/dist/nineslice-contract.d.ts +107 -0
  254. package/dist/nineslice-contract.d.ts.map +1 -0
  255. package/dist/nineslice-contract.js +60 -0
  256. package/dist/nineslice-contract.js.map +1 -0
  257. package/dist/placeholder.cjs +12 -0
  258. package/dist/placeholder.cjs.map +1 -0
  259. package/dist/placeholder.d.ts +44 -0
  260. package/dist/placeholder.d.ts.map +1 -0
  261. package/dist/placeholder.js +12 -0
  262. package/dist/placeholder.js.map +1 -0
  263. package/dist/portal.cjs +89 -0
  264. package/dist/portal.cjs.map +1 -0
  265. package/dist/portal.d.ts +62 -0
  266. package/dist/portal.d.ts.map +1 -0
  267. package/dist/portal.js +89 -0
  268. package/dist/portal.js.map +1 -0
  269. package/dist/primitive-contracts.cjs +12 -0
  270. package/dist/primitive-contracts.cjs.map +1 -0
  271. package/dist/primitive-contracts.d.ts +186 -0
  272. package/dist/primitive-contracts.d.ts.map +1 -0
  273. package/dist/primitive-contracts.js +12 -0
  274. package/dist/primitive-contracts.js.map +1 -0
  275. package/dist/theme.cjs +332 -0
  276. package/dist/theme.cjs.map +1 -0
  277. package/dist/theme.d.ts +204 -0
  278. package/dist/theme.d.ts.map +1 -0
  279. package/dist/theme.js +332 -0
  280. package/dist/theme.js.map +1 -0
  281. package/dist/types.d.ts +86 -0
  282. package/dist/types.d.ts.map +1 -0
  283. package/dist/vdom/create-runtime.cjs +79 -0
  284. package/dist/vdom/create-runtime.cjs.map +1 -0
  285. package/dist/vdom/create-runtime.d.ts +7 -0
  286. package/dist/vdom/create-runtime.d.ts.map +1 -0
  287. package/dist/vdom/create-runtime.js +79 -0
  288. package/dist/vdom/create-runtime.js.map +1 -0
  289. package/dist/vdom/index.cjs +8 -0
  290. package/dist/vdom/index.cjs.map +1 -0
  291. package/dist/vdom/index.d.ts +4 -0
  292. package/dist/vdom/index.d.ts.map +1 -0
  293. package/dist/vdom/index.js +8 -0
  294. package/dist/vdom/index.js.map +1 -0
  295. package/dist/vdom/mount.cjs +161 -0
  296. package/dist/vdom/mount.cjs.map +1 -0
  297. package/dist/vdom/mount.d.ts +6 -0
  298. package/dist/vdom/mount.d.ts.map +1 -0
  299. package/dist/vdom/mount.js +161 -0
  300. package/dist/vdom/mount.js.map +1 -0
  301. package/dist/vdom/patch.cjs +163 -0
  302. package/dist/vdom/patch.cjs.map +1 -0
  303. package/dist/vdom/patch.d.ts +3 -0
  304. package/dist/vdom/patch.d.ts.map +1 -0
  305. package/dist/vdom/patch.js +163 -0
  306. package/dist/vdom/patch.js.map +1 -0
  307. package/dist/vdom/registry.cjs +85 -0
  308. package/dist/vdom/registry.cjs.map +1 -0
  309. package/dist/vdom/registry.d.ts +28 -0
  310. package/dist/vdom/registry.d.ts.map +1 -0
  311. package/dist/vdom/registry.js +85 -0
  312. package/dist/vdom/registry.js.map +1 -0
  313. package/dist/vdom/runtime-helpers.cjs +23 -0
  314. package/dist/vdom/runtime-helpers.cjs.map +1 -0
  315. package/dist/vdom/runtime-helpers.d.ts +8 -0
  316. package/dist/vdom/runtime-helpers.d.ts.map +1 -0
  317. package/dist/vdom/runtime-helpers.js +23 -0
  318. package/dist/vdom/runtime-helpers.js.map +1 -0
  319. package/dist/vdom/surface.cjs +107 -0
  320. package/dist/vdom/surface.cjs.map +1 -0
  321. package/dist/vdom/surface.d.ts +9 -0
  322. package/dist/vdom/surface.d.ts.map +1 -0
  323. package/dist/vdom/surface.js +107 -0
  324. package/dist/vdom/surface.js.map +1 -0
  325. package/dist/vdom/types.d.ts +104 -0
  326. package/dist/vdom/types.d.ts.map +1 -0
  327. package/dist/vdom/utils.cjs +146 -0
  328. package/dist/vdom/utils.cjs.map +1 -0
  329. package/dist/vdom/utils.d.ts +24 -0
  330. package/dist/vdom/utils.d.ts.map +1 -0
  331. package/dist/vdom/utils.js +146 -0
  332. package/dist/vdom/utils.js.map +1 -0
  333. package/dist/vdom.d.ts +4 -0
  334. package/dist/vdom.d.ts.map +1 -0
  335. package/dist/vector-draw-context.d.ts +63 -0
  336. package/dist/vector-draw-context.d.ts.map +1 -0
  337. package/package.json +161 -0
  338. package/vdom/index.cjs +1 -0
  339. package/vdom/index.d.ts +1 -0
  340. package/vdom/index.js +1 -0
@@ -0,0 +1,152 @@
1
+ import { EffectDefinition as EngineEffectDefinition } from './animation/effect-definitions';
2
+ import { EffectHandle, EffectTarget } from './animation/effect-engine';
3
+ import { EffectConfig as EngineEffectConfig } from './animation/types';
4
+ /**
5
+ * Built-in effect names available in all renderers.
6
+ */
7
+ export type BuiltInEffectName = 'none' | 'pulse' | 'shake' | 'bounce' | 'press' | 'flash' | 'jello' | 'fade' | 'fadeIn' | 'fadeOut' | 'wobble' | 'tada' | 'swing' | 'wiggle' | 'slideIn' | 'slideOut' | 'zoomIn' | 'zoomOut' | 'flipIn' | 'flipOut' | 'float' | 'breathe' | 'spin';
8
+ /**
9
+ * Extension point for custom effect names.
10
+ * Use declaration merging to add custom effects:
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * declare module '@number10/jsx-core' {
15
+ * interface EffectNameExtensions {
16
+ * squash: 'squash'
17
+ * }
18
+ * }
19
+ * ```
20
+ */
21
+ export interface EffectNameExtensions {
22
+ }
23
+ /**
24
+ * Known effect names (built-in + custom extensions).
25
+ */
26
+ export type EffectName = BuiltInEffectName | (keyof EffectNameExtensions extends never ? never : keyof EffectNameExtensions);
27
+ /** Configuration for an effect (duration, intensity, direction, etc.). */
28
+ export type EffectConfig = EngineEffectConfig;
29
+ /** Canonical transform origin used by built-in effects across renderers. */
30
+ export type EffectTransformOrigin = import('./animation/effect-definitions').EffectTransformOrigin;
31
+ /**
32
+ * Props that any component can extend to declare effects.
33
+ */
34
+ export interface EffectDefinition {
35
+ /** Effect to apply on interaction (e.g., 'press', 'pulse') */
36
+ effect?: EffectName | undefined;
37
+ /** Configuration for the effect */
38
+ effectConfig?: EffectConfig | undefined;
39
+ }
40
+ /**
41
+ * Resolve which effect to use from props vs theme.
42
+ * @param props - Explicit component props
43
+ * @param theme - Resolved theme (with effect/effectConfig)
44
+ * @returns The resolved effect name and config
45
+ */
46
+ export declare function resolveEffect(props: EffectDefinition, theme: Record<string, unknown>): {
47
+ effect?: EffectName | undefined;
48
+ effectConfig?: EffectConfig | undefined;
49
+ };
50
+ /**
51
+ * Default effect configuration used as fallback when no effect is specified.
52
+ */
53
+ export declare const DEFAULT_EFFECT: {
54
+ effect: EffectName;
55
+ effectConfig: EffectConfig;
56
+ };
57
+ /**
58
+ * Apply an effect by name with automatic DEFAULT_EFFECT fallback.
59
+ *
60
+ * Convenience wrapper around a renderer's applyEffect function that fills in
61
+ * defaults when effect name or config are omitted.
62
+ *
63
+ * @param applyFn - Renderer-specific applyEffect function
64
+ * @param effectName - Name of the effect to apply (defaults to 'pulse')
65
+ * @param effectConfig - Optional configuration for the effect
66
+ * @returns true if effect was applied, false otherwise
67
+ */
68
+ export declare function applyEffectByName(applyFn: (name: EffectName, config?: EffectConfig) => void, effectName?: EffectName, effectConfig?: EffectConfig): boolean;
69
+ /**
70
+ * Resolve the canonical transform origin for a built-in effect.
71
+ * Delegates to the central effect-definitions registry.
72
+ */
73
+ export declare function resolveEffectTransformOrigin(effect: EffectName | undefined): EffectTransformOrigin;
74
+ /**
75
+ * Register a custom effect definition so it becomes available via
76
+ * `applyEffect()` and `effect="customName"` in components.
77
+ *
78
+ * Combine with declaration merging on `EffectNameExtensions` to maintain
79
+ * type safety:
80
+ *
81
+ * @example
82
+ * ```typescript
83
+ * declare module '@number10/jsx-core' {
84
+ * interface EffectNameExtensions { squash: 'squash' }
85
+ * }
86
+ * registerEffect('squash', {
87
+ * name: 'squash',
88
+ * steps: (base, config) => [
89
+ * { type: 'tween', to: { scaleX: base.scaleX * 1.5, scaleY: base.scaleY / 1.5 },
90
+ * duration: config.time ?? 200, ease: 'Sine.easeInOut' },
91
+ * { type: 'tween', to: { scaleX: base.scaleX, scaleY: base.scaleY },
92
+ * duration: config.time ?? 200 },
93
+ * ],
94
+ * loop: false,
95
+ * origin: 'center',
96
+ * })
97
+ * ```
98
+ *
99
+ * @param name - Unique effect name
100
+ * @param definition - Effect definition (steps, loop, origin)
101
+ */
102
+ export declare function registerEffect(name: string, definition: EngineEffectDefinition): void;
103
+ /** Legacy runner signature — receives a renderer node, effect name, and config */
104
+ export type EffectRunner = (node: unknown, effect: EffectName, config?: EffectConfig) => void;
105
+ export type EffectStopRunner = (node: unknown) => void;
106
+ /**
107
+ * Register a renderer-specific effect runner (transitional).
108
+ *
109
+ * During migration, Pixi/Phaser bridges register runners that create
110
+ * an EffectTarget internally and delegate to the central engine.
111
+ * After full migration, this pattern is replaced by direct EffectTarget usage.
112
+ */
113
+ export declare function registerEffectRunner(runner: EffectRunner): void;
114
+ /**
115
+ * Register a renderer-specific effect stop runner (transitional).
116
+ */
117
+ export declare function registerEffectStopRunner(runner: EffectStopRunner): void;
118
+ /**
119
+ * Apply an effect using the legacy runner-registry dispatch.
120
+ *
121
+ * Renderer bridges (Pixi, Phaser) register runners that create an EffectTarget
122
+ * and delegate to the central engine internally.
123
+ *
124
+ * @param node - Renderer-native node (PIXI.Container, Phaser.GameObjects.Container, ...)
125
+ * @param effect - Effect name to apply
126
+ * @param config - Effect configuration
127
+ */
128
+ export declare function applyEffect(node: unknown, effect: EffectName | undefined, config?: EffectConfig): void;
129
+ /**
130
+ * Apply an effect directly using the central engine.
131
+ *
132
+ * Portable components that have an EffectTarget can use this overload
133
+ * to skip the runner-registry dispatch.
134
+ *
135
+ * @param targetKey - Object used as animation state key (typically the renderer node)
136
+ * @param target - EffectTarget implementation for this renderer
137
+ * @param effect - Effect name to apply
138
+ * @param config - Effect configuration
139
+ * @returns EffectHandle or null if effect is unknown
140
+ */
141
+ export declare function applyEffect(targetKey: object, target: EffectTarget, effect: EffectName | undefined, config?: EffectConfig): EffectHandle | null;
142
+ /**
143
+ * Stop effects using the legacy runner-registry dispatch.
144
+ * @param node - Renderer-native node
145
+ */
146
+ export declare function stopEffect(node: unknown): void;
147
+ /**
148
+ * Stop effects directly via the central engine.
149
+ * @param targetKey - Object used as animation state key
150
+ */
151
+ export declare function stopEffect(targetKey: object): void;
152
+ //# sourceMappingURL=effects.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effects.d.ts","sourceRoot":"","sources":["../src/effects.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ import { EFFECT_DEFINITIONS, resolveEffectTransformOrigin as resolveEffectTransformOrigin$1 } from "./animation/effect-definitions.js";
2
+ import { runEffect, stopEffect as stopEffect$1 } from "./animation/effect-engine.js";
3
+ function resolveEffect(props, theme) {
4
+ return {
5
+ effect: props.effect ?? theme.effect,
6
+ effectConfig: props.effectConfig ?? theme.effectConfig
7
+ };
8
+ }
9
+ const DEFAULT_EFFECT = {
10
+ effect: "pulse",
11
+ effectConfig: { intensity: 1.1, time: 100 }
12
+ };
13
+ function applyEffectByName(applyFn, effectName, effectConfig) {
14
+ const name = effectName ?? DEFAULT_EFFECT.effect;
15
+ const config = effectConfig ?? DEFAULT_EFFECT.effectConfig;
16
+ applyFn(name, config);
17
+ return true;
18
+ }
19
+ function resolveEffectTransformOrigin(effect) {
20
+ return resolveEffectTransformOrigin$1(effect);
21
+ }
22
+ function registerEffect(name, definition) {
23
+ EFFECT_DEFINITIONS[name] = definition;
24
+ }
25
+ const _effectRunners = [];
26
+ const _effectStopRunners = [];
27
+ function registerEffectRunner(runner) {
28
+ _effectRunners.push(runner);
29
+ }
30
+ function registerEffectStopRunner(runner) {
31
+ _effectStopRunners.push(runner);
32
+ }
33
+ function applyEffect(a, b, c, d) {
34
+ if (arguments.length === 4 && b && typeof b === "object" && "onUpdate" in b) {
35
+ const targetKey = a;
36
+ const target = b;
37
+ const effect2 = c;
38
+ const config2 = d ?? {};
39
+ if (!effect2 || effect2 === "none") return null;
40
+ const def = EFFECT_DEFINITIONS[effect2];
41
+ if (!def) return null;
42
+ return runEffect(targetKey, target, def, config2);
43
+ }
44
+ const node = a;
45
+ const effect = b;
46
+ const config = c ?? {};
47
+ if (!effect || effect === "none") return;
48
+ for (const runner of _effectRunners) {
49
+ runner(node, effect, config);
50
+ }
51
+ }
52
+ function stopEffect(key) {
53
+ stopEffect$1(key);
54
+ for (const runner of _effectStopRunners) {
55
+ runner(key);
56
+ }
57
+ }
58
+ export {
59
+ DEFAULT_EFFECT,
60
+ applyEffect,
61
+ applyEffectByName,
62
+ registerEffect,
63
+ registerEffectRunner,
64
+ registerEffectStopRunner,
65
+ resolveEffect,
66
+ resolveEffectTransformOrigin,
67
+ stopEffect
68
+ };
69
+ //# sourceMappingURL=effects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effects.js","sources":["../src/effects.ts"],"sourcesContent":["/**\n * Portable effect system — renderer-agnostic effect contracts.\n *\n * Components declare their effect intent via props/theme. The central\n * effect engine (animation/effect-engine.ts) handles all effect execution.\n *\n * ## Portable usage (recommended for new components)\n *\n * Portable components implement `EffectTarget` to connect their node to\n * the central engine. Use the 4-arg `applyEffect()` overload directly:\n *\n * ```typescript\n * import { applyEffect, type EffectTarget } from '@number10/jsx-core'\n *\n * // Inside a portable component:\n * const target: EffectTarget = {\n * onUpdate: (values) => {\n * // Apply animated values to the renderer node\n * node.setPosition(values.x ?? node.x, values.y ?? node.y)\n * node.alpha = values.alpha ?? node.alpha\n * },\n * getSnapshot: () => ({\n * x: node.x, y: node.y, alpha: node.alpha,\n * scaleX: node.scaleX, scaleY: node.scaleY,\n * rotation: node.rotation,\n * }),\n * getScheduler: () => surface.scheduler,\n * getSize: () => ({ width: node.width, height: node.height }),\n * }\n *\n * applyEffect(node, target, 'pulse', { duration: 300 })\n * ```\n *\n * ## Legacy API (transitional)\n *\n * Renderer bridges (Pixi/Phaser) use the 3-arg `applyEffect(node, effect, config)`\n * which dispatches via a runner registry. New components should prefer the\n * direct 4-arg overload above.\n *\n * @migration Transitional architecture — two paths coexist:\n * 1. Legacy: `applyEffect(node, effect, config)` — dispatches via runner registry\n * (Pixi/Phaser bridges register runners that internally create EffectTargets)\n * 2. Direct: `applyEffect(targetKey, target, effect, config)` — skips runners,\n * calls the engine directly. Used by portable components that have an EffectTarget.\n */\n\nimport {\n EFFECT_DEFINITIONS,\n resolveEffectTransformOrigin as resolveOrigin,\n type EffectDefinition as EngineEffectDefinition,\n} from './animation/effect-definitions'\nimport {\n runEffect,\n stopEffect as stopEngineEffect,\n type EffectHandle,\n type EffectTarget,\n} from './animation/effect-engine'\nimport type { EffectConfig as EngineEffectConfig } from './animation/types'\n\n// ---------------------------------------------------------------------------\n// Effect name types — extensible via declaration merging\n// ---------------------------------------------------------------------------\n\n/**\n * Built-in effect names available in all renderers.\n */\nexport type BuiltInEffectName =\n | 'none'\n | 'pulse'\n | 'shake'\n | 'bounce'\n | 'press'\n | 'flash'\n | 'jello'\n | 'fade'\n | 'fadeIn'\n | 'fadeOut'\n | 'wobble'\n | 'tada'\n | 'swing'\n | 'wiggle'\n | 'slideIn'\n | 'slideOut'\n | 'zoomIn'\n | 'zoomOut'\n | 'flipIn'\n | 'flipOut'\n | 'float'\n | 'breathe'\n | 'spin'\n\n/**\n * Extension point for custom effect names.\n * Use declaration merging to add custom effects:\n *\n * @example\n * ```typescript\n * declare module '@number10/jsx-core' {\n * interface EffectNameExtensions {\n * squash: 'squash'\n * }\n * }\n * ```\n */\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport interface EffectNameExtensions {}\n\n/**\n * Known effect names (built-in + custom extensions).\n */\nexport type EffectName =\n | BuiltInEffectName\n | (keyof EffectNameExtensions extends never ? never : keyof EffectNameExtensions)\n\n/** Configuration for an effect (duration, intensity, direction, etc.). */\nexport type EffectConfig = EngineEffectConfig\n\n/** Canonical transform origin used by built-in effects across renderers. */\nexport type EffectTransformOrigin = import('./animation/effect-definitions').EffectTransformOrigin\n\n/**\n * Props that any component can extend to declare effects.\n */\nexport interface EffectDefinition {\n /** Effect to apply on interaction (e.g., 'press', 'pulse') */\n effect?: EffectName | undefined\n /** Configuration for the effect */\n effectConfig?: EffectConfig | undefined\n}\n\n/**\n * Resolve which effect to use from props vs theme.\n * @param props - Explicit component props\n * @param theme - Resolved theme (with effect/effectConfig)\n * @returns The resolved effect name and config\n */\nexport function resolveEffect(\n props: EffectDefinition,\n theme: Record<string, unknown>\n): { effect?: EffectName | undefined; effectConfig?: EffectConfig | undefined } {\n return {\n effect: props.effect ?? (theme.effect as EffectName | undefined),\n effectConfig: props.effectConfig ?? (theme.effectConfig as EffectConfig | undefined),\n }\n}\n\n// ---------------------------------------------------------------------------\n// Default effect + convenience helper\n// ---------------------------------------------------------------------------\n\n/**\n * Default effect configuration used as fallback when no effect is specified.\n */\nexport const DEFAULT_EFFECT = {\n effect: 'pulse' as EffectName,\n effectConfig: { intensity: 1.1, time: 100 } as EffectConfig,\n}\n\n/**\n * Apply an effect by name with automatic DEFAULT_EFFECT fallback.\n *\n * Convenience wrapper around a renderer's applyEffect function that fills in\n * defaults when effect name or config are omitted.\n *\n * @param applyFn - Renderer-specific applyEffect function\n * @param effectName - Name of the effect to apply (defaults to 'pulse')\n * @param effectConfig - Optional configuration for the effect\n * @returns true if effect was applied, false otherwise\n */\nexport function applyEffectByName(\n applyFn: (name: EffectName, config?: EffectConfig) => void,\n effectName?: EffectName,\n effectConfig?: EffectConfig\n): boolean {\n const name = effectName ?? DEFAULT_EFFECT.effect\n const config = effectConfig ?? DEFAULT_EFFECT.effectConfig\n\n applyFn(name, config)\n return true\n}\n\n/**\n * Resolve the canonical transform origin for a built-in effect.\n * Delegates to the central effect-definitions registry.\n */\nexport function resolveEffectTransformOrigin(\n effect: EffectName | undefined\n): EffectTransformOrigin {\n return resolveOrigin(effect)\n}\n\n// ---------------------------------------------------------------------------\n// Custom effect registration\n// ---------------------------------------------------------------------------\n\n/**\n * Register a custom effect definition so it becomes available via\n * `applyEffect()` and `effect=\"customName\"` in components.\n *\n * Combine with declaration merging on `EffectNameExtensions` to maintain\n * type safety:\n *\n * @example\n * ```typescript\n * declare module '@number10/jsx-core' {\n * interface EffectNameExtensions { squash: 'squash' }\n * }\n * registerEffect('squash', {\n * name: 'squash',\n * steps: (base, config) => [\n * { type: 'tween', to: { scaleX: base.scaleX * 1.5, scaleY: base.scaleY / 1.5 },\n * duration: config.time ?? 200, ease: 'Sine.easeInOut' },\n * { type: 'tween', to: { scaleX: base.scaleX, scaleY: base.scaleY },\n * duration: config.time ?? 200 },\n * ],\n * loop: false,\n * origin: 'center',\n * })\n * ```\n *\n * @param name - Unique effect name\n * @param definition - Effect definition (steps, loop, origin)\n */\nexport function registerEffect(name: string, definition: EngineEffectDefinition): void {\n EFFECT_DEFINITIONS[name] = definition\n}\n\n// ---------------------------------------------------------------------------\n// Transitional: Runner registry (used by Pixi/Phaser bridges)\n// ---------------------------------------------------------------------------\n\n/** Legacy runner signature — receives a renderer node, effect name, and config */\nexport type EffectRunner = (node: unknown, effect: EffectName, config?: EffectConfig) => void\nexport type EffectStopRunner = (node: unknown) => void\n\nconst _effectRunners: EffectRunner[] = []\nconst _effectStopRunners: EffectStopRunner[] = []\n\n/**\n * Register a renderer-specific effect runner (transitional).\n *\n * During migration, Pixi/Phaser bridges register runners that create\n * an EffectTarget internally and delegate to the central engine.\n * After full migration, this pattern is replaced by direct EffectTarget usage.\n */\nexport function registerEffectRunner(runner: EffectRunner): void {\n _effectRunners.push(runner)\n}\n\n/**\n * Register a renderer-specific effect stop runner (transitional).\n */\nexport function registerEffectStopRunner(runner: EffectStopRunner): void {\n _effectStopRunners.push(runner)\n}\n\n// ---------------------------------------------------------------------------\n// Legacy API: applyEffect(node, effect, config) — dispatches via runners\n// ---------------------------------------------------------------------------\n\n/**\n * Apply an effect using the legacy runner-registry dispatch.\n *\n * Renderer bridges (Pixi, Phaser) register runners that create an EffectTarget\n * and delegate to the central engine internally.\n *\n * @param node - Renderer-native node (PIXI.Container, Phaser.GameObjects.Container, ...)\n * @param effect - Effect name to apply\n * @param config - Effect configuration\n */\nexport function applyEffect(\n node: unknown,\n effect: EffectName | undefined,\n config?: EffectConfig\n): void\n\n/**\n * Apply an effect directly using the central engine.\n *\n * Portable components that have an EffectTarget can use this overload\n * to skip the runner-registry dispatch.\n *\n * @param targetKey - Object used as animation state key (typically the renderer node)\n * @param target - EffectTarget implementation for this renderer\n * @param effect - Effect name to apply\n * @param config - Effect configuration\n * @returns EffectHandle or null if effect is unknown\n */\nexport function applyEffect(\n targetKey: object,\n target: EffectTarget,\n effect: EffectName | undefined,\n config?: EffectConfig\n): EffectHandle | null\n\n/** Implementation — supports both 3-arg (legacy) and 4-arg (direct) signatures */\nexport function applyEffect(\n a: unknown | object,\n b: EffectTarget | EffectName | undefined,\n c?: EffectName | EffectConfig | undefined,\n d?: EffectConfig\n): void | EffectHandle | null {\n // 4-arg overload: applyEffect(targetKey, target, effect, config)\n if (arguments.length === 4 && b && typeof b === 'object' && 'onUpdate' in b) {\n const targetKey = a as object\n const target = b as EffectTarget\n const effect = c as EffectName | undefined\n const config = (d ?? {}) as EffectConfig\n if (!effect || effect === 'none') return null\n const def = EFFECT_DEFINITIONS[effect]\n if (!def) return null\n return runEffect(targetKey, target, def, config)\n }\n\n // 3-arg overload: applyEffect(node, effect, config) — dispatches via runners\n const node = a\n const effect = b as EffectName | undefined\n const config = (c ?? {}) as EffectConfig\n if (!effect || effect === 'none') return\n for (const runner of _effectRunners) {\n runner(node, effect, config)\n }\n}\n\n// ---------------------------------------------------------------------------\n// Legacy API: stopEffect(node) — dispatches via runners\n// ---------------------------------------------------------------------------\n\n/**\n * Stop effects using the legacy runner-registry dispatch.\n * @param node - Renderer-native node\n */\nexport function stopEffect(node: unknown): void\n\n/**\n * Stop effects directly via the central engine.\n * @param targetKey - Object used as animation state key\n */\nexport function stopEffect(targetKey: object): void\n\n/** Implementation */\nexport function stopEffect(key: unknown | object): void {\n // Check if we should use the engine directly (only if it's likely an engine-tracked key)\n // The engine tracks via WeakMap, so calling with any object is safe\n stopEngineEffect(key as object)\n\n // Also dispatch via legacy stop runners for backward compatibility\n for (const runner of _effectStopRunners) {\n runner(key)\n }\n}\n"],"names":["resolveOrigin","effect","config","stopEngineEffect"],"mappings":";;AAwIO,SAAS,cACd,OACA,OAC8E;AAC9E,SAAO;AAAA,IACL,QAAQ,MAAM,UAAW,MAAM;AAAA,IAC/B,cAAc,MAAM,gBAAiB,MAAM;AAAA,EAAA;AAE/C;AASO,MAAM,iBAAiB;AAAA,EAC5B,QAAQ;AAAA,EACR,cAAc,EAAE,WAAW,KAAK,MAAM,IAAA;AACxC;AAaO,SAAS,kBACd,SACA,YACA,cACS;AACT,QAAM,OAAO,cAAc,eAAe;AAC1C,QAAM,SAAS,gBAAgB,eAAe;AAE9C,UAAQ,MAAM,MAAM;AACpB,SAAO;AACT;AAMO,SAAS,6BACd,QACuB;AACvB,SAAOA,+BAAc,MAAM;AAC7B;AAkCO,SAAS,eAAe,MAAc,YAA0C;AACrF,qBAAmB,IAAI,IAAI;AAC7B;AAUA,MAAM,iBAAiC,CAAA;AACvC,MAAM,qBAAyC,CAAA;AASxC,SAAS,qBAAqB,QAA4B;AAC/D,iBAAe,KAAK,MAAM;AAC5B;AAKO,SAAS,yBAAyB,QAAgC;AACvE,qBAAmB,KAAK,MAAM;AAChC;AA0CO,SAAS,YACd,GACA,GACA,GACA,GAC4B;AAE5B,MAAI,UAAU,WAAW,KAAK,KAAK,OAAO,MAAM,YAAY,cAAc,GAAG;AAC3E,UAAM,YAAY;AAClB,UAAM,SAAS;AACf,UAAMC,UAAS;AACf,UAAMC,UAAU,KAAK,CAAA;AACrB,QAAI,CAACD,WAAUA,YAAW,OAAQ,QAAO;AACzC,UAAM,MAAM,mBAAmBA,OAAM;AACrC,QAAI,CAAC,IAAK,QAAO;AACjB,WAAO,UAAU,WAAW,QAAQ,KAAKC,OAAM;AAAA,EACjD;AAGA,QAAM,OAAO;AACb,QAAM,SAAS;AACf,QAAM,SAAU,KAAK,CAAA;AACrB,MAAI,CAAC,UAAU,WAAW,OAAQ;AAClC,aAAW,UAAU,gBAAgB;AACnC,WAAO,MAAM,QAAQ,MAAM;AAAA,EAC7B;AACF;AAmBO,SAAS,WAAW,KAA6B;AAGtDC,eAAiB,GAAa;AAG9B,aAAW,UAAU,oBAAoB;AACvC,WAAO,GAAG;AAAA,EACZ;AACF;"}
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ function getGlobalObject() {
4
+ if (typeof globalThis !== "undefined") return globalThis;
5
+ if (typeof window !== "undefined") return window;
6
+ if (typeof global !== "undefined") return global;
7
+ return {};
8
+ }
9
+ function getGlobalValue(key) {
10
+ return getGlobalObject()[key];
11
+ }
12
+ function setGlobalValue(key, value) {
13
+ getGlobalObject()[key] = value;
14
+ }
15
+ function getOrCreateGlobalValue(key, create) {
16
+ const existing = getGlobalValue(key);
17
+ if (existing !== void 0) return existing;
18
+ const next = create();
19
+ setGlobalValue(key, next);
20
+ return next;
21
+ }
22
+ exports.getGlobalValue = getGlobalValue;
23
+ exports.getOrCreateGlobalValue = getOrCreateGlobalValue;
24
+ exports.setGlobalValue = setGlobalValue;
25
+ //# sourceMappingURL=global-registry.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global-registry.cjs","sources":["../src/global-registry.ts"],"sourcesContent":["type GlobalRegistry = Record<string | symbol, unknown>\n\n/**\n * Resolve the process-wide global object for the current JavaScript realm.\n *\n * Core uses this registry to share state across duplicated module instances\n * produced by some bundlers (e.g. Parcel in workspace/symlink scenarios).\n */\nfunction getGlobalObject(): GlobalRegistry {\n if (typeof globalThis !== 'undefined') return globalThis as GlobalRegistry\n if (typeof window !== 'undefined') return window as unknown as GlobalRegistry\n if (typeof global !== 'undefined') return global as unknown as GlobalRegistry\n return {}\n}\n\n/**\n * Read a value from the shared global registry.\n *\n * Returns `undefined` when no value has been registered for the given key.\n */\nexport function getGlobalValue<T>(key: symbol): T | undefined {\n return getGlobalObject()[key] as T | undefined\n}\n\n/**\n * Store a value in the shared global registry.\n *\n * Callers should use stable `Symbol.for(...)` keys so independently bundled\n * module copies address the same slot.\n */\nexport function setGlobalValue<T>(key: symbol, value: T): void {\n getGlobalObject()[key] = value\n}\n\n/**\n * Read a value from the shared global registry, creating and storing it on\n * first access when it does not exist yet.\n */\nexport function getOrCreateGlobalValue<T>(key: symbol, create: () => T): T {\n const existing = getGlobalValue<T>(key)\n if (existing !== undefined) return existing\n\n const next = create()\n setGlobalValue(key, next)\n return next\n}\n"],"names":[],"mappings":";;AAQA,SAAS,kBAAkC;AACzC,MAAI,OAAO,eAAe,YAAa,QAAO;AAC9C,MAAI,OAAO,WAAW,YAAa,QAAO;AAC1C,MAAI,OAAO,WAAW,YAAa,QAAO;AAC1C,SAAO,CAAA;AACT;AAOO,SAAS,eAAkB,KAA4B;AAC5D,SAAO,gBAAA,EAAkB,GAAG;AAC9B;AAQO,SAAS,eAAkB,KAAa,OAAgB;AAC7D,kBAAA,EAAkB,GAAG,IAAI;AAC3B;AAMO,SAAS,uBAA0B,KAAa,QAAoB;AACzE,QAAM,WAAW,eAAkB,GAAG;AACtC,MAAI,aAAa,OAAW,QAAO;AAEnC,QAAM,OAAO,OAAA;AACb,iBAAe,KAAK,IAAI;AACxB,SAAO;AACT;;;;"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Read a value from the shared global registry.
3
+ *
4
+ * Returns `undefined` when no value has been registered for the given key.
5
+ */
6
+ export declare function getGlobalValue<T>(key: symbol): T | undefined;
7
+ /**
8
+ * Store a value in the shared global registry.
9
+ *
10
+ * Callers should use stable `Symbol.for(...)` keys so independently bundled
11
+ * module copies address the same slot.
12
+ */
13
+ export declare function setGlobalValue<T>(key: symbol, value: T): void;
14
+ /**
15
+ * Read a value from the shared global registry, creating and storing it on
16
+ * first access when it does not exist yet.
17
+ */
18
+ export declare function getOrCreateGlobalValue<T>(key: symbol, create: () => T): T;
19
+ //# sourceMappingURL=global-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global-registry.d.ts","sourceRoot":"","sources":["../src/global-registry.ts"],"names":[],"mappings":"AAeA;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAE5D;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAE7D;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAOzE"}
@@ -0,0 +1,25 @@
1
+ function getGlobalObject() {
2
+ if (typeof globalThis !== "undefined") return globalThis;
3
+ if (typeof window !== "undefined") return window;
4
+ if (typeof global !== "undefined") return global;
5
+ return {};
6
+ }
7
+ function getGlobalValue(key) {
8
+ return getGlobalObject()[key];
9
+ }
10
+ function setGlobalValue(key, value) {
11
+ getGlobalObject()[key] = value;
12
+ }
13
+ function getOrCreateGlobalValue(key, create) {
14
+ const existing = getGlobalValue(key);
15
+ if (existing !== void 0) return existing;
16
+ const next = create();
17
+ setGlobalValue(key, next);
18
+ return next;
19
+ }
20
+ export {
21
+ getGlobalValue,
22
+ getOrCreateGlobalValue,
23
+ setGlobalValue
24
+ };
25
+ //# sourceMappingURL=global-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global-registry.js","sources":["../src/global-registry.ts"],"sourcesContent":["type GlobalRegistry = Record<string | symbol, unknown>\n\n/**\n * Resolve the process-wide global object for the current JavaScript realm.\n *\n * Core uses this registry to share state across duplicated module instances\n * produced by some bundlers (e.g. Parcel in workspace/symlink scenarios).\n */\nfunction getGlobalObject(): GlobalRegistry {\n if (typeof globalThis !== 'undefined') return globalThis as GlobalRegistry\n if (typeof window !== 'undefined') return window as unknown as GlobalRegistry\n if (typeof global !== 'undefined') return global as unknown as GlobalRegistry\n return {}\n}\n\n/**\n * Read a value from the shared global registry.\n *\n * Returns `undefined` when no value has been registered for the given key.\n */\nexport function getGlobalValue<T>(key: symbol): T | undefined {\n return getGlobalObject()[key] as T | undefined\n}\n\n/**\n * Store a value in the shared global registry.\n *\n * Callers should use stable `Symbol.for(...)` keys so independently bundled\n * module copies address the same slot.\n */\nexport function setGlobalValue<T>(key: symbol, value: T): void {\n getGlobalObject()[key] = value\n}\n\n/**\n * Read a value from the shared global registry, creating and storing it on\n * first access when it does not exist yet.\n */\nexport function getOrCreateGlobalValue<T>(key: symbol, create: () => T): T {\n const existing = getGlobalValue<T>(key)\n if (existing !== undefined) return existing\n\n const next = create()\n setGlobalValue(key, next)\n return next\n}\n"],"names":[],"mappings":"AAQA,SAAS,kBAAkC;AACzC,MAAI,OAAO,eAAe,YAAa,QAAO;AAC9C,MAAI,OAAO,WAAW,YAAa,QAAO;AAC1C,MAAI,OAAO,WAAW,YAAa,QAAO;AAC1C,SAAO,CAAA;AACT;AAOO,SAAS,eAAkB,KAA4B;AAC5D,SAAO,gBAAA,EAAkB,GAAG;AAC9B;AAQO,SAAS,eAAkB,KAAa,OAAgB;AAC7D,kBAAA,EAAkB,GAAG,IAAI;AAC3B;AAMO,SAAS,uBAA0B,KAAa,QAAoB;AACzE,QAAM,WAAW,eAAkB,GAAG;AACtC,MAAI,aAAa,OAAW,QAAO;AAEnC,QAAM,OAAO,OAAA;AACb,iBAAe,KAAK,IAAI;AACxB,SAAO;AACT;"}