@omerdlw/base-framework 1.0.6 → 2.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 (231) hide show
  1. package/dist/atoms/index.js +1 -103
  2. package/dist/atoms/index.js.map +1 -1
  3. package/dist/chunk-3BUP64Q6.js +105 -0
  4. package/dist/chunk-3BUP64Q6.js.map +1 -0
  5. package/dist/chunk-3MSK4XGK.js +9888 -0
  6. package/dist/chunk-3MSK4XGK.js.map +1 -0
  7. package/dist/chunk-4GMQKD6F.js +353 -0
  8. package/dist/chunk-4GMQKD6F.js.map +1 -0
  9. package/dist/chunk-65ZB4QTQ.js +888 -0
  10. package/dist/chunk-65ZB4QTQ.js.map +1 -0
  11. package/dist/chunk-6SG7V77J.js +577 -0
  12. package/dist/chunk-6SG7V77J.js.map +1 -0
  13. package/dist/chunk-7HQMXTNP.js +419 -0
  14. package/dist/chunk-7HQMXTNP.js.map +1 -0
  15. package/dist/chunk-7TAVYJ3A.js +371 -0
  16. package/dist/chunk-7TAVYJ3A.js.map +1 -0
  17. package/dist/chunk-AQ4BNXA2.js +349 -0
  18. package/dist/chunk-AQ4BNXA2.js.map +1 -0
  19. package/dist/chunk-CGHZSSFR.js +2166 -0
  20. package/dist/chunk-CGHZSSFR.js.map +1 -0
  21. package/dist/chunk-DGCQWQLZ.js +61 -0
  22. package/dist/chunk-DGCQWQLZ.js.map +1 -0
  23. package/dist/chunk-FIMPHODX.js +67 -0
  24. package/dist/chunk-FIMPHODX.js.map +1 -0
  25. package/dist/chunk-GF7TUX5I.js +1889 -0
  26. package/dist/chunk-GF7TUX5I.js.map +1 -0
  27. package/dist/chunk-JELG4JLT.js +454 -0
  28. package/dist/chunk-JELG4JLT.js.map +1 -0
  29. package/dist/chunk-K676GL7Z.js +51 -0
  30. package/dist/chunk-K676GL7Z.js.map +1 -0
  31. package/dist/chunk-KKQT46TP.js +26 -0
  32. package/dist/chunk-KKQT46TP.js.map +1 -0
  33. package/dist/chunk-QI3ALLIB.js +38 -0
  34. package/dist/chunk-QI3ALLIB.js.map +1 -0
  35. package/dist/chunk-QXR55VVS.js +1139 -0
  36. package/dist/chunk-QXR55VVS.js.map +1 -0
  37. package/dist/chunk-R2YGFJDJ.js +408 -0
  38. package/dist/chunk-R2YGFJDJ.js.map +1 -0
  39. package/dist/chunk-RFZQWLC5.js +27 -0
  40. package/dist/chunk-RFZQWLC5.js.map +1 -0
  41. package/dist/chunk-SYAVGTOX.js +521 -0
  42. package/dist/chunk-SYAVGTOX.js.map +1 -0
  43. package/dist/chunk-TV3WEF5G.js +784 -0
  44. package/dist/chunk-TV3WEF5G.js.map +1 -0
  45. package/dist/chunk-XASQT4CQ.js +280 -0
  46. package/dist/chunk-XASQT4CQ.js.map +1 -0
  47. package/dist/error/index.js +5 -682
  48. package/dist/error/index.js.map +1 -1
  49. package/dist/error/reporter.d.ts.map +1 -1
  50. package/dist/error/theme.d.ts +1 -1
  51. package/dist/error/theme.d.ts.map +1 -1
  52. package/dist/events.js +1 -7
  53. package/dist/events.js.map +1 -1
  54. package/dist/hooks/index.js +1 -358
  55. package/dist/hooks/index.js.map +1 -1
  56. package/dist/hooks/use-global-event.d.ts +1 -1
  57. package/dist/index.js +18 -20029
  58. package/dist/index.js.map +1 -1
  59. package/dist/kernel/index.js +2 -2035
  60. package/dist/kernel/index.js.map +1 -1
  61. package/dist/kernel/types.d.ts +1 -1
  62. package/dist/modules/ambient/analyze.d.ts +46 -0
  63. package/dist/modules/ambient/analyze.d.ts.map +1 -0
  64. package/dist/modules/ambient/constants.d.ts +1 -5
  65. package/dist/modules/ambient/constants.d.ts.map +1 -1
  66. package/dist/modules/ambient/context.d.ts.map +1 -1
  67. package/dist/modules/ambient/dom.d.ts +11 -12
  68. package/dist/modules/ambient/dom.d.ts.map +1 -1
  69. package/dist/modules/ambient/extractor.d.ts +10 -10
  70. package/dist/modules/ambient/extractor.d.ts.map +1 -1
  71. package/dist/modules/ambient/hooks.d.ts +1 -1
  72. package/dist/modules/ambient/hooks.d.ts.map +1 -1
  73. package/dist/modules/ambient/index.d.ts +6 -4
  74. package/dist/modules/ambient/index.d.ts.map +1 -1
  75. package/dist/modules/ambient/index.js +7 -762
  76. package/dist/modules/ambient/index.js.map +1 -1
  77. package/dist/modules/ambient/module.d.ts +1 -1
  78. package/dist/modules/ambient/module.d.ts.map +1 -1
  79. package/dist/modules/ambient/oklab.d.ts +36 -0
  80. package/dist/modules/ambient/oklab.d.ts.map +1 -0
  81. package/dist/modules/ambient/pipeline.d.ts +28 -0
  82. package/dist/modules/ambient/pipeline.d.ts.map +1 -0
  83. package/dist/modules/ambient/quantize.d.ts +22 -0
  84. package/dist/modules/ambient/quantize.d.ts.map +1 -0
  85. package/dist/modules/ambient/server/address.d.ts +8 -0
  86. package/dist/modules/ambient/server/address.d.ts.map +1 -0
  87. package/dist/modules/ambient/server/index.d.ts +53 -0
  88. package/dist/modules/ambient/server/index.d.ts.map +1 -0
  89. package/dist/modules/ambient/server/index.js +221 -0
  90. package/dist/modules/ambient/server/index.js.map +1 -0
  91. package/dist/modules/ambient/settings.d.ts +19 -0
  92. package/dist/modules/ambient/settings.d.ts.map +1 -0
  93. package/dist/modules/ambient/types.d.ts +105 -9
  94. package/dist/modules/ambient/types.d.ts.map +1 -1
  95. package/dist/modules/ambient/worker/index.d.ts +15 -0
  96. package/dist/modules/ambient/worker/index.d.ts.map +1 -0
  97. package/dist/modules/ambient/worker/index.js +114 -0
  98. package/dist/modules/ambient/worker/index.js.map +1 -0
  99. package/dist/modules/background/constants.d.ts +2 -2
  100. package/dist/modules/background/constants.d.ts.map +1 -1
  101. package/dist/modules/background/hooks.d.ts +1 -1
  102. package/dist/modules/background/index.js +6 -3078
  103. package/dist/modules/background/index.js.map +1 -1
  104. package/dist/modules/background/motion.d.ts +9 -7
  105. package/dist/modules/background/motion.d.ts.map +1 -1
  106. package/dist/modules/background/overlay.d.ts +3 -8
  107. package/dist/modules/background/overlay.d.ts.map +1 -1
  108. package/dist/modules/background/types.d.ts +16 -2
  109. package/dist/modules/background/types.d.ts.map +1 -1
  110. package/dist/modules/context-menu/constants.d.ts +2 -2
  111. package/dist/modules/context-menu/constants.d.ts.map +1 -1
  112. package/dist/modules/context-menu/hooks.d.ts +1 -1
  113. package/dist/modules/context-menu/index.js +10 -1896
  114. package/dist/modules/context-menu/index.js.map +1 -1
  115. package/dist/modules/context-menu/motion.d.ts +1 -8
  116. package/dist/modules/context-menu/motion.d.ts.map +1 -1
  117. package/dist/modules/context-menu/overlay.d.ts.map +1 -1
  118. package/dist/modules/context-menu/types.d.ts +16 -2
  119. package/dist/modules/context-menu/types.d.ts.map +1 -1
  120. package/dist/modules/controls/constants.d.ts +1 -1
  121. package/dist/modules/controls/constants.d.ts.map +1 -1
  122. package/dist/modules/controls/entries.d.ts +1 -1
  123. package/dist/modules/controls/hooks.d.ts +1 -1
  124. package/dist/modules/controls/index.js +4 -1110
  125. package/dist/modules/controls/index.js.map +1 -1
  126. package/dist/modules/controls/overlay.d.ts +1 -1
  127. package/dist/modules/controls/types.d.ts +2 -2
  128. package/dist/modules/dock/cards.d.ts +708 -24
  129. package/dist/modules/dock/cards.d.ts.map +1 -1
  130. package/dist/modules/dock/constants.d.ts +2 -2
  131. package/dist/modules/dock/constants.d.ts.map +1 -1
  132. package/dist/modules/dock/helpers.d.ts +2 -2
  133. package/dist/modules/dock/hooks.d.ts +2 -2
  134. package/dist/modules/dock/index.d.ts +1 -1
  135. package/dist/modules/dock/index.d.ts.map +1 -1
  136. package/dist/modules/dock/index.js +9 -12132
  137. package/dist/modules/dock/index.js.map +1 -1
  138. package/dist/modules/dock/module.d.ts +1 -1
  139. package/dist/modules/dock/motion.d.ts +41 -915
  140. package/dist/modules/dock/motion.d.ts.map +1 -1
  141. package/dist/modules/dock/overlay.d.ts.map +1 -1
  142. package/dist/modules/dock/runtime/dock.d.ts +1 -23
  143. package/dist/modules/dock/runtime/dock.d.ts.map +1 -1
  144. package/dist/modules/dock/styles.d.ts +4 -4
  145. package/dist/modules/dock/surface/hooks.d.ts +5 -20
  146. package/dist/modules/dock/surface/hooks.d.ts.map +1 -1
  147. package/dist/modules/dock/surface/machine.d.ts +4 -3
  148. package/dist/modules/dock/surface/machine.d.ts.map +1 -1
  149. package/dist/modules/dock/surface/stack.d.ts.map +1 -1
  150. package/dist/modules/dock/types.d.ts +158 -3
  151. package/dist/modules/dock/types.d.ts.map +1 -1
  152. package/dist/modules/index.js +16 -17883
  153. package/dist/modules/index.js.map +1 -1
  154. package/dist/modules/loading/constants.d.ts +1 -1
  155. package/dist/modules/loading/constants.d.ts.map +1 -1
  156. package/dist/modules/loading/context.d.ts +1 -1
  157. package/dist/modules/loading/hooks.d.ts +1 -1
  158. package/dist/modules/loading/index.js +5 -1153
  159. package/dist/modules/loading/index.js.map +1 -1
  160. package/dist/modules/loading/types.d.ts +2 -2
  161. package/dist/modules/media/context.d.ts +1 -1
  162. package/dist/modules/media/index.js +3 -570
  163. package/dist/modules/media/index.js.map +1 -1
  164. package/dist/modules/media/types.d.ts +2 -2
  165. package/dist/modules/modal/constants.d.ts +2 -2
  166. package/dist/modules/modal/constants.d.ts.map +1 -1
  167. package/dist/modules/modal/context.d.ts +1 -1
  168. package/dist/modules/modal/hooks.d.ts +3 -3
  169. package/dist/modules/modal/index.js +8 -2355
  170. package/dist/modules/modal/index.js.map +1 -1
  171. package/dist/modules/modal/motion.d.ts +3 -8
  172. package/dist/modules/modal/motion.d.ts.map +1 -1
  173. package/dist/modules/modal/overlay.d.ts.map +1 -1
  174. package/dist/modules/modal/types.d.ts +21 -0
  175. package/dist/modules/modal/types.d.ts.map +1 -1
  176. package/dist/modules/notification/constants.d.ts +2 -2
  177. package/dist/modules/notification/constants.d.ts.map +1 -1
  178. package/dist/modules/notification/context.d.ts +1 -1
  179. package/dist/modules/notification/hooks.d.ts +1 -1
  180. package/dist/modules/notification/index.js +4 -828
  181. package/dist/modules/notification/index.js.map +1 -1
  182. package/dist/modules/notification/motion.d.ts +1 -7
  183. package/dist/modules/notification/motion.d.ts.map +1 -1
  184. package/dist/modules/notification/overlay.d.ts.map +1 -1
  185. package/dist/modules/notification/types.d.ts +9 -1
  186. package/dist/modules/notification/types.d.ts.map +1 -1
  187. package/dist/overlay-TZ6L52A5.js +9 -0
  188. package/dist/overlay-TZ6L52A5.js.map +1 -0
  189. package/dist/provider.d.ts +1 -1
  190. package/dist/provider.d.ts.map +1 -1
  191. package/dist/provider.js +6 -1968
  192. package/dist/provider.js.map +1 -1
  193. package/dist/result.js +2 -63
  194. package/dist/result.js.map +1 -1
  195. package/dist/theme.d.ts +45 -8
  196. package/dist/theme.d.ts.map +1 -1
  197. package/dist/theme.js +3 -41
  198. package/dist/theme.js.map +1 -1
  199. package/dist/tokens/index.d.ts +1 -0
  200. package/dist/tokens/index.d.ts.map +1 -1
  201. package/dist/tokens/index.js +126 -155
  202. package/dist/tokens/index.js.map +1 -1
  203. package/dist/tokens/motion-config.d.ts +44 -0
  204. package/dist/tokens/motion-config.d.ts.map +1 -0
  205. package/dist/tokens/motion.d.ts +23 -174
  206. package/dist/tokens/motion.d.ts.map +1 -1
  207. package/dist/utils/index.js +4 -82
  208. package/dist/utils/index.js.map +1 -1
  209. package/dist/utils/report.d.ts.map +1 -1
  210. package/docs/README.md +1 -0
  211. package/docs/architecture-and-rules.md +4 -3
  212. package/docs/core-engine.md +7 -10
  213. package/docs/getting-started.md +4 -2
  214. package/docs/modules/ambient.md +194 -80
  215. package/docs/modules/background.md +3 -3
  216. package/docs/modules/context-menu.md +2 -2
  217. package/docs/modules/dock.md +8 -5
  218. package/docs/modules/modal.md +2 -2
  219. package/docs/modules/notification.md +2 -2
  220. package/docs/theming.md +81 -9
  221. package/package.json +22 -5
  222. package/templates/AGENTS.md +1 -1
  223. package/templates/motion/background.ts +17 -0
  224. package/templates/motion/context-menu.ts +63 -0
  225. package/templates/motion/dock.ts +327 -0
  226. package/templates/motion/modal.ts +79 -0
  227. package/templates/motion/notification.ts +27 -0
  228. package/templates/motion/tokens.ts +47 -0
  229. package/templates/tsconfig.json +7 -0
  230. package/dist/modules/ambient/color.d.ts +0 -21
  231. package/dist/modules/ambient/color.d.ts.map +0 -1
package/dist/theme.d.ts CHANGED
@@ -1,26 +1,63 @@
1
1
  import { type CSSProperties, type ReactNode } from "react";
2
- export interface ThemeSpec<S extends string = string> {
2
+ import { type MotionTokens } from "./tokens";
3
+ /**
4
+ * A module's theme contract: the slots it styles and, for modules that
5
+ * animate, the motion it plays. Both are written by the app.
6
+ */
7
+ export interface ThemeSpec<S extends string = string, M = never> {
3
8
  readonly id: string;
4
9
  readonly _slots?: S;
10
+ readonly _motion?: M;
5
11
  }
6
- export interface ThemeConfig<S extends string> {
12
+ interface ThemeVisuals<S extends string> {
7
13
  slots: Readonly<Record<S, string>>;
8
14
  styles?: Readonly<Partial<Record<S, CSSProperties>>>;
9
15
  }
16
+ export type ThemeConfig<S extends string, M = never> = ThemeVisuals<S> & ([M] extends [never] ? {
17
+ motion?: undefined;
18
+ } : {
19
+ motion: M;
20
+ });
10
21
  export interface ResolvedTheme<S extends string> {
11
22
  readonly slots: Readonly<Record<S, string>>;
12
23
  readonly styles: Readonly<Partial<Record<S, CSSProperties>>>;
13
24
  }
14
25
  export interface ThemeEntry {
15
26
  readonly id: string;
16
- readonly config: ThemeConfig<string>;
27
+ readonly config: ThemeVisuals<string> & {
28
+ motion?: unknown;
29
+ };
17
30
  }
18
- export declare function defineThemeSpec<S extends string>(id: string): ThemeSpec<S>;
19
- export declare function defineTheme<S extends string>(spec: ThemeSpec<S>, config: ThemeConfig<NoInfer<S>>): ThemeEntry;
20
- export declare function ThemeProvider({ children, themes, }: {
31
+ export declare function defineThemeSpec<S extends string, M = never>(id: string): ThemeSpec<S, M>;
32
+ export declare function defineTheme<S extends string, M = never>(spec: ThemeSpec<S, M>, config: ThemeConfig<NoInfer<S>, NoInfer<M>>): ThemeEntry;
33
+ export declare function ThemeProvider({ children, motion, themes, }: {
21
34
  children?: ReactNode;
35
+ /** The app's motion tokens, from `defineMotion` (tempo, reduced-motion policy, vocabulary). */
36
+ motion?: MotionTokens;
22
37
  themes: readonly ThemeEntry[];
23
- }): import("react").FunctionComponentElement<import("react").ProviderProps<ReadonlyMap<string, ThemeConfig<string>>>>;
24
- export declare function useTheme<S extends string>(spec: ThemeSpec<S>): ResolvedTheme<S>;
38
+ }): import("react").FunctionComponentElement<import("react").ProviderProps<ReadonlyMap<string, ThemeVisuals<string> & {
39
+ motion?: unknown;
40
+ }>>>;
41
+ export declare function useTheme<S extends string>(spec: ThemeSpec<S, unknown>): ResolvedTheme<S>;
25
42
  export { useTheme as useModuleTheme };
43
+ /** The app's motion tokens, plus whether reduced motion is in effect. */
44
+ export declare function useMotionTokens<T extends MotionTokens = MotionTokens>(): T & {
45
+ readonly reduced: boolean;
46
+ };
47
+ /**
48
+ * The motion a module plays, as the app wrote it in `defineTheme(spec, { motion })`,
49
+ * retimed by the app's tempo or collapsed for reduced motion. Stable per
50
+ * (tokens, theme) so it can be a dependency.
51
+ */
52
+ export declare function useModuleMotion<M>(spec: ThemeSpec<string, M>): M;
53
+ /** Like useModuleMotion, but null when the app hasn't themed the module. */
54
+ export declare function useOptionalModuleMotion<M>(spec: ThemeSpec<string, M>): M | null;
55
+ /**
56
+ * Applies the app's reduced-motion policy to the motion components inside a
57
+ * module (positional values such as width, height, x and scale jump instead of
58
+ * animating). CoreProvider wraps every module backdrop and overlay in it.
59
+ */
60
+ export declare function ModuleMotionConfig({ children }: {
61
+ children?: ReactNode;
62
+ }): import("react").FunctionComponentElement<import("framer-motion").MotionConfigProps>;
26
63
  //# sourceMappingURL=theme.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../src/theme.tsx"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,aAAa,EAClB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAGf,MAAM,WAAW,SAAS,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM;IAClD,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;CACrB;AAED,MAAM,WAAW,WAAW,CAAC,CAAC,SAAS,MAAM;IAC3C,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACnC,MAAM,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;CACtD;AAED,MAAM,WAAW,aAAa,CAAC,CAAC,SAAS,MAAM;IAC7C,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IAC5C,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;CAC9D;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACtC;AAED,wBAAgB,eAAe,CAAC,CAAC,SAAS,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,CAE1E;AAED,wBAAgB,WAAW,CAAC,CAAC,SAAS,MAAM,EAC1C,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,EAClB,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAC9B,UAAU,CAEZ;AAQD,wBAAgB,aAAa,CAAC,EAC5B,QAAQ,EACR,MAAM,GACP,EAAE;IACD,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,MAAM,EAAE,SAAS,UAAU,EAAE,CAAC;CAC/B,qHAGA;AAED,wBAAgB,QAAQ,CAAC,CAAC,SAAS,MAAM,EACvC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,GACjB,aAAa,CAAC,CAAC,CAAC,CAWlB;AAED,OAAO,EAAE,QAAQ,IAAI,cAAc,EAAE,CAAC"}
1
+ {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../src/theme.tsx"],"names":[],"mappings":"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"}
package/dist/theme.js CHANGED
@@ -1,44 +1,6 @@
1
1
  "use client";
2
- import { createContext, createElement, useContext } from 'react';
3
-
4
- function getOrCreateGlobalContext(name, defaultValue) {
5
- const sym = /* @__PURE__ */ Symbol.for(`@omerdlw/base-framework/context/${name}`);
6
- const store = globalThis;
7
- if (!store[sym]) {
8
- store[sym] = createContext(defaultValue);
9
- }
10
- return store[sym];
11
- }
12
-
13
- // src/theme.tsx
14
- function defineThemeSpec(id) {
15
- return Object.freeze({ id });
16
- }
17
- function defineTheme(spec, config) {
18
- return { id: spec.id, config };
19
- }
20
- var EMPTY = /* @__PURE__ */ new Map();
21
- var ThemeContext = getOrCreateGlobalContext("ThemeContext", EMPTY);
22
- function ThemeProvider({
23
- children,
24
- themes
25
- }) {
26
- const configs = new Map(themes.map((entry) => [entry.id, entry.config]));
27
- return createElement(ThemeContext.Provider, { value: configs }, children);
28
- }
29
- function useTheme(spec) {
30
- const config = useContext(ThemeContext).get(spec.id);
31
- if (!config) {
32
- throw new Error(
33
- `Theme "${spec.id}" is missing. Ensure its theme configuration is provided to <ThemeProvider themes={[...]}> (e.g. in src/config/ or your theme setup).`
34
- );
35
- }
36
- return {
37
- slots: config.slots,
38
- styles: config.styles ?? {}
39
- };
40
- }
41
-
42
- export { ThemeProvider, defineTheme, defineThemeSpec, useTheme as useModuleTheme, useTheme };
2
+ export { ModuleMotionConfig, ThemeProvider, defineTheme, defineThemeSpec, useModuleMotion, useTheme as useModuleTheme, useMotionTokens, useOptionalModuleMotion, useTheme } from './chunk-7TAVYJ3A.js';
3
+ import './chunk-GF7TUX5I.js';
4
+ import './chunk-TV3WEF5G.js';
43
5
  //# sourceMappingURL=theme.js.map
44
6
  //# sourceMappingURL=theme.js.map
package/dist/theme.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/kernel/context-registry.ts","../src/theme.tsx"],"names":[],"mappings":";;AAEO,SAAS,wBAAA,CACd,MACA,YAAA,EACY;AACZ,EAAA,MAAM,GAAA,mBAAM,MAAA,CAAO,GAAA,CAAI,CAAA,gCAAA,EAAmC,IAAI,CAAA,CAAE,CAAA;AAChE,EAAA,MAAM,KAAA,GAAQ,UAAA;AACd,EAAA,IAAI,CAAC,KAAA,CAAM,GAAG,CAAA,EAAG;AACf,IAAA,KAAA,CAAM,GAAG,CAAA,GAAI,aAAA,CAAiB,YAAY,CAAA;AAAA,EAC5C;AACA,EAAA,OAAO,MAAM,GAAG,CAAA;AAClB;;;ACkBO,SAAS,gBAAkC,EAAA,EAA0B;AAC1E,EAAA,OAAO,MAAA,CAAO,MAAA,CAAO,EAAE,EAAA,EAAI,CAAA;AAC7B;AAEO,SAAS,WAAA,CACd,MACA,MAAA,EACY;AACZ,EAAA,OAAO,EAAE,EAAA,EAAI,IAAA,CAAK,EAAA,EAAI,MAAA,EAAuC;AAC/D;AAEA,IAAM,KAAA,uBAAuD,GAAA,EAAI;AACjE,IAAM,YAAA,GAAe,wBAAA,CAEnB,cAAA,EAAgB,KAAK,CAAA;AAGhB,SAAS,aAAA,CAAc;AAAA,EAC5B,QAAA;AAAA,EACA;AACF,CAAA,EAGG;AACD,EAAA,MAAM,OAAA,GAAU,IAAI,GAAA,CAAI,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU,CAAC,KAAA,CAAM,EAAA,EAAI,KAAA,CAAM,MAAM,CAAC,CAAC,CAAA;AACvE,EAAA,OAAO,cAAc,YAAA,CAAa,QAAA,EAAU,EAAE,KAAA,EAAO,OAAA,IAAW,QAAQ,CAAA;AAC1E;AAEO,SAAS,SACd,IAAA,EACkB;AAClB,EAAA,MAAM,SAAS,UAAA,CAAW,YAAY,CAAA,CAAE,GAAA,CAAI,KAAK,EAAE,CAAA;AACnD,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CAAA,OAAA,EAAU,KAAK,EAAE,CAAA,qIAAA;AAAA,KACnB;AAAA,EACF;AACA,EAAA,OAAO;AAAA,IACL,OAAO,MAAA,CAAO,KAAA;AAAA,IACd,MAAA,EAAQ,MAAA,CAAO,MAAA,IAAU;AAAC,GAC5B;AACF","file":"theme.js","sourcesContent":["import { createContext, type Context } from \"react\";\n\nexport function getOrCreateGlobalContext<T>(\n name: string,\n defaultValue: T,\n): Context<T> {\n const sym = Symbol.for(`@omerdlw/base-framework/context/${name}`);\n const store = globalThis as unknown as Record<symbol, Context<T>>;\n if (!store[sym]) {\n store[sym] = createContext<T>(defaultValue);\n }\n return store[sym];\n}\n","\"use client\";\n\nimport {\n createElement,\n useContext,\n type CSSProperties,\n type ReactNode,\n} from \"react\";\nimport { getOrCreateGlobalContext } from \"@/kernel\";\n\nexport interface ThemeSpec<S extends string = string> {\n readonly id: string;\n readonly _slots?: S;\n}\n\nexport interface ThemeConfig<S extends string> {\n slots: Readonly<Record<S, string>>;\n styles?: Readonly<Partial<Record<S, CSSProperties>>>;\n}\n\nexport interface ResolvedTheme<S extends string> {\n readonly slots: Readonly<Record<S, string>>;\n readonly styles: Readonly<Partial<Record<S, CSSProperties>>>;\n}\n\nexport interface ThemeEntry {\n readonly id: string;\n readonly config: ThemeConfig<string>;\n}\n\nexport function defineThemeSpec<S extends string>(id: string): ThemeSpec<S> {\n return Object.freeze({ id });\n}\n\nexport function defineTheme<S extends string>(\n spec: ThemeSpec<S>,\n config: ThemeConfig<NoInfer<S>>,\n): ThemeEntry {\n return { id: spec.id, config: config as ThemeEntry[\"config\"] };\n}\n\nconst EMPTY: ReadonlyMap<string, ThemeEntry[\"config\"]> = new Map();\nconst ThemeContext = getOrCreateGlobalContext<\n ReadonlyMap<string, ThemeEntry[\"config\"]>\n>(\"ThemeContext\", EMPTY);\n\n\nexport function ThemeProvider({\n children,\n themes,\n}: {\n children?: ReactNode;\n themes: readonly ThemeEntry[];\n}) {\n const configs = new Map(themes.map((entry) => [entry.id, entry.config]));\n return createElement(ThemeContext.Provider, { value: configs }, children);\n}\n\nexport function useTheme<S extends string>(\n spec: ThemeSpec<S>,\n): ResolvedTheme<S> {\n const config = useContext(ThemeContext).get(spec.id);\n if (!config) {\n throw new Error(\n `Theme \"${spec.id}\" is missing. Ensure its theme configuration is provided to <ThemeProvider themes={[...]}> (e.g. in src/config/ or your theme setup).`,\n );\n }\n return {\n slots: config.slots,\n styles: config.styles ?? {},\n } as ResolvedTheme<S>;\n}\n\nexport { useTheme as useModuleTheme };\n\n"]}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"theme.js"}
@@ -1,3 +1,4 @@
1
1
  export * from "./tokens";
2
2
  export * from "./motion";
3
+ export * from "./motion-config";
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tokens/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tokens/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,iBAAiB,CAAC"}
@@ -34,90 +34,10 @@ var SURFACE_CLASSES = Object.freeze({
34
34
  var ACTION_TONE_CLASS = "bg-primary/10 text-primary hover:bg-primary hover:text-black";
35
35
 
36
36
  // src/tokens/motion.ts
37
- var DURATION_TOKENS = Object.freeze({
38
- INSTANT: 0.08,
39
- MICRO: 0.18,
40
- FAST: 0.28,
41
- BASE: 0.36,
42
- MODERATE: 0.44,
43
- SLOW: 0.58,
44
- CINEMATIC: 0.86
45
- });
46
- var EASING_CURVES = Object.freeze({
47
- OUT_EXPO: [0.16, 1, 0.3, 1],
48
- OUT_QUART: [0.25, 1, 0.5, 1],
49
- OUT_QUINT: [0.22, 1, 0.36, 1],
50
- IN_OUT_CUBIC: [0.65, 0, 0.35, 1],
51
- IN_CUBIC: [0.5, 0, 1, 1],
52
- OUT_BACK: [0.34, 1.56, 0.64, 1]
53
- });
54
- var MOTION_EASINGS = Object.freeze({
55
- ENTER: EASING_CURVES.OUT_QUART,
56
- ENTER_EMPHASIZED: EASING_CURVES.OUT_EXPO,
57
- EXIT: EASING_CURVES.IN_CUBIC
58
- });
59
- var MOTION_TIERS = Object.freeze({
60
- MICRO: Object.freeze({
61
- distance: 4,
62
- duration: DURATION_TOKENS.MICRO,
63
- ease: MOTION_EASINGS.ENTER_EMPHASIZED,
64
- scaleDelta: 8e-3
65
- }),
66
- FAST: Object.freeze({
67
- distance: 9,
68
- duration: DURATION_TOKENS.FAST,
69
- ease: MOTION_EASINGS.ENTER_EMPHASIZED,
70
- scaleDelta: 0.012
71
- }),
72
- STANDARD: Object.freeze({
73
- distance: 18,
74
- duration: DURATION_TOKENS.MODERATE,
75
- ease: MOTION_EASINGS.ENTER,
76
- scaleDelta: 0.018
77
- }),
78
- SURFACE: Object.freeze({
79
- distance: 28,
80
- duration: DURATION_TOKENS.SLOW,
81
- ease: MOTION_EASINGS.ENTER_EMPHASIZED,
82
- scaleDelta: 0.024
83
- })
84
- });
85
- var SPRING_PRESETS = Object.freeze({
86
- MICRO: Object.freeze({
87
- damping: 32,
88
- mass: 0.6,
89
- stiffness: 520,
90
- type: "spring"
91
- }),
92
- SNAPPY: Object.freeze({
93
- damping: 28,
94
- mass: 0.8,
95
- stiffness: 380,
96
- type: "spring"
97
- }),
98
- GENTLE: Object.freeze({
99
- damping: 30,
100
- mass: 1,
101
- stiffness: 260,
102
- type: "spring"
103
- }),
104
- BOUNCY: Object.freeze({
105
- damping: 20,
106
- mass: 0.85,
107
- stiffness: 340,
108
- type: "spring"
109
- })
110
- });
111
37
  var REDUCED_MOTION_TRANSITION = Object.freeze({
112
- duration: DURATION_TOKENS.INSTANT,
38
+ duration: 0.08,
113
39
  ease: "linear"
114
40
  });
115
- var COMPOSITOR_GPU_STYLE = Object.freeze({
116
- backfaceVisibility: "hidden",
117
- transform: "translate3d(0, 0, 0)",
118
- willChange: "transform, opacity"
119
- });
120
- var TAP_SCALE_SUBTLE = 0.97;
121
41
  function tween(duration, ease) {
122
42
  return Object.freeze({ type: "tween", duration, ease });
123
43
  }
@@ -133,12 +53,12 @@ function gpuTransform(y = 0, scale = 1, x = 0) {
133
53
  return `translate3d(${translateX}px, ${translateY}px, 0) scale(${scaleValue})`;
134
54
  }
135
55
  function durationForDistance(distancePx, {
136
- base = DURATION_TOKENS.FAST,
137
- min = DURATION_TOKENS.MICRO,
138
- max = DURATION_TOKENS.SLOW,
56
+ base,
57
+ min,
58
+ max,
139
59
  reference = 320,
140
60
  gain = 0.22
141
- } = {}) {
61
+ }) {
142
62
  const distance = Math.abs(Number(distancePx) || 0);
143
63
  const safeMin = Math.max(0, min);
144
64
  const safeMax = Math.max(safeMin, max);
@@ -147,24 +67,24 @@ function durationForDistance(distancePx, {
147
67
  return Math.min(safeMax, Math.max(safeMin, duration));
148
68
  }
149
69
  function surfaceResizeTransition(distancePx, {
150
- base = DURATION_TOKENS.FAST,
151
- min = DURATION_TOKENS.MICRO,
152
- max = DURATION_TOKENS.SLOW,
70
+ base,
71
+ min,
72
+ max,
153
73
  reference = 320,
154
74
  gain = 0.22,
155
- ease = EASING_CURVES.IN_OUT_CUBIC
156
- } = {}) {
75
+ ease
76
+ }) {
157
77
  return tween(
158
78
  durationForDistance(distancePx, { base, min, max, reference, gain }),
159
79
  ease
160
80
  );
161
81
  }
162
82
  function contentSwapTransitions({
163
- duration = DURATION_TOKENS.FAST,
164
- exitDuration = DURATION_TOKENS.MICRO,
165
- enterEase = EASING_CURVES.OUT_EXPO,
166
- exitEase = EASING_CURVES.IN_CUBIC
167
- } = {}) {
83
+ duration,
84
+ exitDuration,
85
+ enterEase,
86
+ exitEase
87
+ }) {
168
88
  return Object.freeze({
169
89
  enter: tween(duration, enterEase),
170
90
  exit: tween(exitDuration, exitEase)
@@ -176,7 +96,7 @@ function contentSwap({
176
96
  enterScale = 0.99,
177
97
  exitScale = 0.99,
178
98
  ...transitionOptions
179
- } = {}) {
99
+ }) {
180
100
  const transitions = contentSwapTransitions(transitionOptions);
181
101
  return Object.freeze({
182
102
  hidden: Object.freeze({
@@ -200,16 +120,14 @@ function overlaySurface({
200
120
  exitTravel = travel * 0.5,
201
121
  enterScale = 0.97,
202
122
  exitScale = 0.985,
203
- distance,
204
123
  duration,
205
- exitDuration,
206
- enterEase = EASING_CURVES.OUT_EXPO,
207
- exitEase = EASING_CURVES.IN_CUBIC
208
- } = {}) {
209
- const enterDuration = duration ?? (distance === void 0 ? DURATION_TOKENS.BASE : durationForDistance(distance));
124
+ exitDuration = duration * 0.68,
125
+ enterEase,
126
+ exitEase
127
+ }) {
210
128
  const transitions = contentSwapTransitions({
211
- duration: enterDuration,
212
- exitDuration: exitDuration ?? enterDuration * 0.68,
129
+ duration,
130
+ exitDuration,
213
131
  enterEase,
214
132
  exitEase
215
133
  });
@@ -234,41 +152,12 @@ function staggerDelay(index, { base = 0.028, cap = 0.16, exponent = 0.82 } = {})
234
152
  const safeIndex = Math.max(0, Number(index) || 0);
235
153
  return Math.min(cap, base * Math.pow(safeIndex, exponent));
236
154
  }
237
- function staggerItem({
238
- base = 0.028,
239
- cap = 0.16,
240
- duration = DURATION_TOKENS.BASE,
241
- travel = 10,
242
- enterEase = EASING_CURVES.OUT_EXPO,
243
- exitDuration = DURATION_TOKENS.MICRO,
244
- exitEase = EASING_CURVES.IN_CUBIC
245
- } = {}) {
246
- return Object.freeze({
247
- hidden: Object.freeze({
248
- opacity: 0,
249
- transform: gpuTransform(travel, 0.985)
250
- }),
251
- visible: (index = 0) => ({
252
- opacity: 1,
253
- transform: gpuTransform(0),
254
- transition: Object.freeze({
255
- ...tween(duration, enterEase),
256
- delay: staggerDelay(index, { base, cap })
257
- })
258
- }),
259
- exit: Object.freeze({
260
- opacity: 0,
261
- transform: gpuTransform(-travel * 0.6, 0.99),
262
- transition: tween(exitDuration, exitEase)
263
- })
264
- });
265
- }
266
155
  function chip({
267
- duration = DURATION_TOKENS.FAST,
268
- exitDuration = DURATION_TOKENS.MICRO,
269
- enterEase = EASING_CURVES.IN_OUT_CUBIC,
270
- exitEase = EASING_CURVES.IN_CUBIC
271
- } = {}) {
156
+ duration,
157
+ exitDuration,
158
+ enterEase,
159
+ exitEase
160
+ }) {
272
161
  const transitions = contentSwapTransitions({
273
162
  duration,
274
163
  exitDuration,
@@ -290,9 +179,9 @@ function chip({
290
179
  });
291
180
  }
292
181
  function press({
293
- tapScale = TAP_SCALE_SUBTLE,
294
- spring = SPRING_PRESETS.MICRO
295
- } = {}) {
182
+ tapScale,
183
+ spring
184
+ }) {
296
185
  return Object.freeze({
297
186
  variants: Object.freeze({
298
187
  idle: Object.freeze({ transform: gpuTransform(0, 1) }),
@@ -302,24 +191,106 @@ function press({
302
191
  transition: Object.freeze({ type: "spring", ...spring })
303
192
  });
304
193
  }
305
- function dragDismiss({
306
- constraints = { top: 0, bottom: 0 },
307
- elastic = { top: 0.05, bottom: 0.5 },
308
- thresholds = { offsetY: 65, velocityY: 400 },
309
- interpolation = {
310
- range: [0, 180],
311
- opacity: [1, 0.75],
312
- scale: [1, 0.96]
194
+
195
+ // src/tokens/motion-config.ts
196
+ function defineMotion(tokens) {
197
+ const tempo = tokens.tempo ?? 1;
198
+ if (!Number.isFinite(tempo) || tempo <= 0) {
199
+ throw new Error(`Motion tempo must be a positive number, got ${tempo}.`);
313
200
  }
314
- } = {}) {
315
201
  return Object.freeze({
316
- constraints: Object.freeze(constraints),
317
- elastic: Object.freeze(elastic),
318
- thresholds: Object.freeze(thresholds),
319
- interpolation: Object.freeze(interpolation)
202
+ ...tokens,
203
+ tempo,
204
+ reducedMotion: tokens.reducedMotion ?? "user"
320
205
  });
321
206
  }
207
+ var TIME_KEYS = [
208
+ "duration",
209
+ "delay",
210
+ "delayChildren",
211
+ "staggerChildren",
212
+ "repeatDelay",
213
+ "visualDuration"
214
+ ];
215
+ var REDUCED = Object.freeze({
216
+ type: "tween",
217
+ ...REDUCED_MOTION_TRANSITION
218
+ });
219
+ function isPlainObject(value) {
220
+ if (!value || typeof value !== "object" || Array.isArray(value)) return false;
221
+ const prototype = Object.getPrototypeOf(value);
222
+ return prototype === Object.prototype || prototype === null;
223
+ }
224
+ function isSpring(value) {
225
+ return value.type === "spring" || typeof value.stiffness === "number" || typeof value.damping === "number";
226
+ }
227
+ function isTransition(value) {
228
+ return isSpring(value) || TIME_KEYS.some((key) => typeof value[key] === "number");
229
+ }
230
+ function retimeTransition(value, clock) {
231
+ if (clock.reduced) return { ...REDUCED };
232
+ const { tempo } = clock;
233
+ const next = {};
234
+ for (const [key, entry] of Object.entries(value)) {
235
+ next[key] = isPlainObject(entry) ? retimeNode(entry, clock) : entry;
236
+ }
237
+ for (const key of TIME_KEYS) {
238
+ if (typeof value[key] === "number") next[key] = value[key] * tempo;
239
+ }
240
+ if (typeof value.stiffness === "number") {
241
+ next.stiffness = value.stiffness / (tempo * tempo);
242
+ }
243
+ if (typeof value.damping === "number") next.damping = value.damping / tempo;
244
+ return next;
245
+ }
246
+ function retimeNode(value, clock) {
247
+ if (typeof value === "function") {
248
+ const fn = value;
249
+ return (...args) => retimeNode(fn(...args), clock);
250
+ }
251
+ if (!isPlainObject(value)) return value;
252
+ if (isTransition(value)) return retimeTransition(value, clock);
253
+ const next = {};
254
+ for (const [key, entry] of Object.entries(value)) {
255
+ next[key] = retimeNode(entry, clock);
256
+ }
257
+ return next;
258
+ }
259
+ function retime(value, clock) {
260
+ if (clock.tempo === 1 && !clock.reduced) return value;
261
+ return retimeNode(value, clock);
262
+ }
263
+ function retimeSeconds(value, clock) {
264
+ if (typeof value === "number") {
265
+ return clock.reduced ? Math.min(value, REDUCED.duration) : value * clock.tempo;
266
+ }
267
+ if (!isPlainObject(value)) return value;
268
+ const next = {};
269
+ for (const [key, entry] of Object.entries(value)) {
270
+ next[key] = retimeSeconds(entry, clock);
271
+ }
272
+ return next;
273
+ }
274
+ function retimeModuleMotion(motion, clock) {
275
+ if (clock.tempo === 1 && !clock.reduced) return motion;
276
+ if (!isPlainObject(motion)) return retime(motion, clock);
277
+ const next = {};
278
+ for (const [key, entry] of Object.entries(motion)) {
279
+ next[key] = key === "timings" ? retimeSeconds(entry, clock) : retimeNode(entry, clock);
280
+ }
281
+ return next;
282
+ }
283
+ function cssEasing(ease) {
284
+ if (Array.isArray(ease)) return `cubic-bezier(${ease.join(", ")})`;
285
+ if (typeof ease === "string" && ease.trim()) return ease;
286
+ return "ease";
287
+ }
288
+ function cssTransition(property, transition) {
289
+ const duration = `${Math.round((transition.duration ?? 0) * 1e3)}ms`;
290
+ const delay = transition.delay ? ` ${Math.round(transition.delay * 1e3)}ms` : "";
291
+ return `${property} ${duration} ${cssEasing(transition.ease)}${delay}`;
292
+ }
322
293
 
323
- export { ACTION_TONE_CLASS, COMPOSITOR_GPU_STYLE, DURATION_TOKENS, EASING_CURVES, MOTION_EASINGS, MOTION_TIERS, REDUCED_MOTION_TRANSITION, SPRING_PRESETS, SURFACE_CLASSES, TAP_SCALE_SUBTLE, Z_INDEX, chip, contentSwap, contentSwapTransitions, dragDismiss, durationForDistance, gpuTransform, overlaySurface, press, staggerDelay, staggerItem, surfaceResizeTransition };
294
+ export { ACTION_TONE_CLASS, REDUCED_MOTION_TRANSITION, SURFACE_CLASSES, Z_INDEX, chip, contentSwap, contentSwapTransitions, cssEasing, cssTransition, defineMotion, durationForDistance, gpuTransform, overlaySurface, press, retime, retimeModuleMotion, staggerDelay, surfaceResizeTransition };
324
295
  //# sourceMappingURL=index.js.map
325
296
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/tokens/tokens.ts","../../src/tokens/motion.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["export const Z_INDEX = Object.freeze({\n BACKGROUND: 0,\n DOCK_BACKDROP: 100,\n DOCK: 110,\n NOTIFICATION: 120,\n MODAL_BACKDROP: 130,\n MODAL: 140,\n SELECT: 150,\n LOADING: 160,\n ERROR_OVERLAY: 170,\n CONTEXT_MENU_BACKDROP: 180,\n CONTEXT_MENU: 190,\n TOOLTIP: 200,\n\n UI_ELEMENT: 10,\n DOCK_CARD_BACKGROUND: 0,\n DOCK_CARD_CONTENT: 10,\n DOCK_CARD_STACK_BASE: 10,\n DOCK_CARD_BADGE: 20,\n DOCK_CARD_MEDIA: 30,\n DOCK_BREADCRUMBS: 10,\n DOCK_SURFACE_CONTROL: 10,\n DOCK_SURFACE_POPOVER: 30,\n DOCK_SURFACE_CENTER: 0,\n MODAL_FRAME: 1,\n MODAL_STICKY_HEADER: 10,\n} as const);\n\nexport const SURFACE_CLASSES = Object.freeze({\n description: \"text-white/70\",\n icon: \"bg-white/10 text-white\",\n surface: \"bg-black/60 ring-1 ring-inset ring-white/10\",\n title: \"text-white\",\n} as const);\n\nexport const ACTION_TONE_CLASS =\n \"bg-primary/10 text-primary hover:bg-primary hover:text-black\";\n","export const DURATION_TOKENS = Object.freeze({\n INSTANT: 0.08,\n MICRO: 0.18,\n FAST: 0.28,\n BASE: 0.36,\n MODERATE: 0.44,\n SLOW: 0.58,\n CINEMATIC: 0.86,\n} as const);\n\nexport const EASING_CURVES = Object.freeze({\n OUT_EXPO: [0.16, 1, 0.3, 1] as const,\n OUT_QUART: [0.25, 1, 0.5, 1] as const,\n OUT_QUINT: [0.22, 1, 0.36, 1] as const,\n IN_OUT_CUBIC: [0.65, 0, 0.35, 1] as const,\n IN_CUBIC: [0.5, 0, 1, 1] as const,\n OUT_BACK: [0.34, 1.56, 0.64, 1] as const,\n} as const);\n\nexport const MOTION_EASINGS = Object.freeze({\n ENTER: EASING_CURVES.OUT_QUART,\n ENTER_EMPHASIZED: EASING_CURVES.OUT_EXPO,\n EXIT: EASING_CURVES.IN_CUBIC,\n} as const);\n\nexport const MOTION_TIERS = Object.freeze({\n MICRO: Object.freeze({\n distance: 4,\n duration: DURATION_TOKENS.MICRO,\n ease: MOTION_EASINGS.ENTER_EMPHASIZED,\n scaleDelta: 0.008,\n }),\n FAST: Object.freeze({\n distance: 9,\n duration: DURATION_TOKENS.FAST,\n ease: MOTION_EASINGS.ENTER_EMPHASIZED,\n scaleDelta: 0.012,\n }),\n STANDARD: Object.freeze({\n distance: 18,\n duration: DURATION_TOKENS.MODERATE,\n ease: MOTION_EASINGS.ENTER,\n scaleDelta: 0.018,\n }),\n SURFACE: Object.freeze({\n distance: 28,\n duration: DURATION_TOKENS.SLOW,\n ease: MOTION_EASINGS.ENTER_EMPHASIZED,\n scaleDelta: 0.024,\n }),\n} as const);\n\nexport const SPRING_PRESETS = Object.freeze({\n MICRO: Object.freeze({\n damping: 32,\n mass: 0.6,\n stiffness: 520,\n type: \"spring\",\n } as const),\n SNAPPY: Object.freeze({\n damping: 28,\n mass: 0.8,\n stiffness: 380,\n type: \"spring\",\n } as const),\n GENTLE: Object.freeze({\n damping: 30,\n mass: 1,\n stiffness: 260,\n type: \"spring\",\n } as const),\n BOUNCY: Object.freeze({\n damping: 20,\n mass: 0.85,\n stiffness: 340,\n type: \"spring\",\n } as const),\n} as const);\n\nexport const REDUCED_MOTION_TRANSITION = Object.freeze({\n duration: DURATION_TOKENS.INSTANT,\n ease: \"linear\",\n} as const);\n\nexport const COMPOSITOR_GPU_STYLE = Object.freeze({\n backfaceVisibility: \"hidden\",\n transform: \"translate3d(0, 0, 0)\",\n willChange: \"transform, opacity\",\n} as const);\n\nexport const TAP_SCALE_SUBTLE = 0.97;\n\ntype Ease = readonly [number, number, number, number];\n\ntype TweenOptions = {\n duration?: number;\n exitDuration?: number;\n enterEase?: Ease;\n exitEase?: Ease;\n};\n\ntype Spring = {\n type?: \"spring\";\n stiffness: number;\n damping: number;\n mass: number;\n};\n\nfunction tween(duration: number, ease: Ease) {\n return Object.freeze({ type: \"tween\" as const, duration, ease });\n}\n\nfunction safeNumber(value: unknown, fallback: number): number {\n const source =\n value &&\n typeof value === \"object\" &&\n \"get\" in value &&\n typeof value.get === \"function\"\n ? value.get()\n : value;\n const number = Number.parseFloat(String(source));\n return Number.isFinite(number) ? number : fallback;\n}\n\nexport function gpuTransform(\n y: unknown = 0,\n scale: unknown = 1,\n x: unknown = 0,\n): string {\n const translateY = Math.round(safeNumber(y, 0));\n const translateX = Math.round(safeNumber(x, 0));\n const scaleValue = Math.round(safeNumber(scale, 1) * 1000) / 1000;\n return `translate3d(${translateX}px, ${translateY}px, 0) scale(${scaleValue})`;\n}\n\nexport function durationForDistance(\n distancePx: number,\n {\n base = DURATION_TOKENS.FAST,\n min = DURATION_TOKENS.MICRO,\n max = DURATION_TOKENS.SLOW,\n reference = 320,\n gain = 0.22,\n }: {\n base?: number;\n min?: number;\n max?: number;\n reference?: number;\n gain?: number;\n } = {},\n): number {\n const distance = Math.abs(Number(distancePx) || 0);\n const safeMin = Math.max(0, min);\n const safeMax = Math.max(safeMin, max);\n const safeReference = Math.max(1, reference);\n const duration = base + Math.sqrt(distance / safeReference) * gain;\n return Math.min(safeMax, Math.max(safeMin, duration));\n}\n\nexport function surfaceResizeTransition(\n distancePx: number,\n {\n base = DURATION_TOKENS.FAST,\n min = DURATION_TOKENS.MICRO,\n max = DURATION_TOKENS.SLOW,\n reference = 320,\n gain = 0.22,\n ease = EASING_CURVES.IN_OUT_CUBIC,\n }: {\n base?: number;\n min?: number;\n max?: number;\n reference?: number;\n gain?: number;\n ease?: Ease;\n } = {},\n) {\n return tween(\n durationForDistance(distancePx, { base, min, max, reference, gain }),\n ease,\n );\n}\n\nexport function contentSwapTransitions({\n duration = DURATION_TOKENS.FAST,\n exitDuration = DURATION_TOKENS.MICRO,\n enterEase = EASING_CURVES.OUT_EXPO,\n exitEase = EASING_CURVES.IN_CUBIC,\n}: TweenOptions = {}) {\n return Object.freeze({\n enter: tween(duration, enterEase),\n exit: tween(exitDuration, exitEase),\n });\n}\n\nexport function contentSwap({\n travel = 6,\n exitTravel = travel * 0.7,\n enterScale = 0.99,\n exitScale = 0.99,\n ...transitionOptions\n}: TweenOptions & {\n travel?: number;\n exitTravel?: number;\n enterScale?: number;\n exitScale?: number;\n} = {}) {\n const transitions = contentSwapTransitions(transitionOptions);\n return Object.freeze({\n hidden: Object.freeze({\n opacity: 0,\n transform: gpuTransform(travel, enterScale),\n }),\n visible: Object.freeze({\n opacity: 1,\n transform: gpuTransform(0),\n transition: transitions.enter,\n }),\n exit: Object.freeze({\n opacity: 0,\n transform: gpuTransform(-exitTravel, exitScale),\n transition: transitions.exit,\n }),\n });\n}\n\nexport function overlaySurface({\n travel = 16,\n exitTravel = travel * 0.5,\n enterScale = 0.97,\n exitScale = 0.985,\n distance,\n duration,\n exitDuration,\n enterEase = EASING_CURVES.OUT_EXPO,\n exitEase = EASING_CURVES.IN_CUBIC,\n}: {\n travel?: number;\n exitTravel?: number;\n enterScale?: number;\n exitScale?: number;\n distance?: number;\n duration?: number;\n exitDuration?: number;\n enterEase?: Ease;\n exitEase?: Ease;\n} = {}) {\n const enterDuration =\n duration ??\n (distance === undefined\n ? DURATION_TOKENS.BASE\n : durationForDistance(distance));\n const transitions = contentSwapTransitions({\n duration: enterDuration,\n exitDuration: exitDuration ?? enterDuration * 0.68,\n enterEase,\n exitEase,\n });\n\n return Object.freeze({\n hidden: Object.freeze({\n opacity: 0,\n transform: gpuTransform(travel, enterScale),\n }),\n visible: Object.freeze({\n opacity: 1,\n transform: gpuTransform(0),\n transition: transitions.enter,\n }),\n exit: Object.freeze({\n opacity: 0,\n transform: gpuTransform(exitTravel, exitScale),\n transition: transitions.exit,\n }),\n });\n}\n\nexport function staggerDelay(\n index: number,\n { base = 0.028, cap = 0.16, exponent = 0.82 } = {},\n): number {\n const safeIndex = Math.max(0, Number(index) || 0);\n return Math.min(cap, base * Math.pow(safeIndex, exponent));\n}\n\nexport function staggerItem({\n base = 0.028,\n cap = 0.16,\n duration = DURATION_TOKENS.BASE,\n travel = 10,\n enterEase = EASING_CURVES.OUT_EXPO,\n exitDuration = DURATION_TOKENS.MICRO,\n exitEase = EASING_CURVES.IN_CUBIC,\n}: {\n base?: number;\n cap?: number;\n duration?: number;\n travel?: number;\n enterEase?: Ease;\n exitDuration?: number;\n exitEase?: Ease;\n} = {}) {\n return Object.freeze({\n hidden: Object.freeze({\n opacity: 0,\n transform: gpuTransform(travel, 0.985),\n }),\n visible: (index: number = 0) => ({\n opacity: 1,\n transform: gpuTransform(0),\n transition: Object.freeze({\n ...tween(duration, enterEase),\n delay: staggerDelay(index, { base, cap }),\n }),\n }),\n exit: Object.freeze({\n opacity: 0,\n transform: gpuTransform(-travel * 0.6, 0.99),\n transition: tween(exitDuration, exitEase),\n }),\n });\n}\n\nexport function chip({\n duration = DURATION_TOKENS.FAST,\n exitDuration = DURATION_TOKENS.MICRO,\n enterEase = EASING_CURVES.IN_OUT_CUBIC,\n exitEase = EASING_CURVES.IN_CUBIC,\n}: TweenOptions = {}) {\n const transitions = contentSwapTransitions({\n duration,\n exitDuration,\n enterEase,\n exitEase,\n });\n return Object.freeze({\n hidden: Object.freeze({ opacity: 0, transform: gpuTransform(0, 0.96) }),\n visible: Object.freeze({\n opacity: 1,\n transform: gpuTransform(0),\n transition: transitions.enter,\n }),\n exit: Object.freeze({\n opacity: 0,\n transform: gpuTransform(0, 0.96),\n transition: transitions.exit,\n }),\n });\n}\n\nexport function press({\n tapScale = TAP_SCALE_SUBTLE,\n spring = SPRING_PRESETS.MICRO,\n}: { tapScale?: number; spring?: Spring } = {}) {\n return Object.freeze({\n variants: Object.freeze({\n idle: Object.freeze({ transform: gpuTransform(0, 1) }),\n hover: Object.freeze({ transform: gpuTransform(0, 1) }),\n tap: Object.freeze({ transform: gpuTransform(0, tapScale) }),\n }),\n transition: Object.freeze({ type: \"spring\" as const, ...spring }),\n });\n}\n\nexport function dragDismiss({\n constraints = { top: 0, bottom: 0 },\n elastic = { top: 0.05, bottom: 0.5 },\n thresholds = { offsetY: 65, velocityY: 400 },\n interpolation = {\n range: [0, 180] as const,\n opacity: [1, 0.75] as const,\n scale: [1, 0.96] as const,\n },\n} = {}) {\n return Object.freeze({\n constraints: Object.freeze(constraints),\n elastic: Object.freeze(elastic),\n thresholds: Object.freeze(thresholds),\n interpolation: Object.freeze(interpolation),\n });\n}\n"]}
1
+ {"version":3,"sources":["../../src/tokens/tokens.ts","../../src/tokens/motion.ts","../../src/tokens/motion-config.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["export const Z_INDEX = Object.freeze({\n BACKGROUND: 0,\n DOCK_BACKDROP: 100,\n DOCK: 110,\n NOTIFICATION: 120,\n MODAL_BACKDROP: 130,\n MODAL: 140,\n SELECT: 150,\n LOADING: 160,\n ERROR_OVERLAY: 170,\n CONTEXT_MENU_BACKDROP: 180,\n CONTEXT_MENU: 190,\n TOOLTIP: 200,\n\n UI_ELEMENT: 10,\n DOCK_CARD_BACKGROUND: 0,\n DOCK_CARD_CONTENT: 10,\n DOCK_CARD_STACK_BASE: 10,\n DOCK_CARD_BADGE: 20,\n DOCK_CARD_MEDIA: 30,\n DOCK_BREADCRUMBS: 10,\n DOCK_SURFACE_CONTROL: 10,\n DOCK_SURFACE_POPOVER: 30,\n DOCK_SURFACE_CENTER: 0,\n MODAL_FRAME: 1,\n MODAL_STICKY_HEADER: 10,\n} as const);\n\nexport const SURFACE_CLASSES = Object.freeze({\n description: \"text-white/70\",\n icon: \"bg-white/10 text-white\",\n surface: \"bg-black/60 ring-1 ring-inset ring-white/10\",\n title: \"text-white\",\n} as const);\n\nexport const ACTION_TONE_CLASS =\n \"bg-primary/10 text-primary hover:bg-primary hover:text-black\";\n","// Builders for the motion an app writes in its theme files. They hold shapes\n// (travel, scale, how a duration grows with distance), never the app's timing:\n// every duration, easing and spring is passed in.\n\nexport const REDUCED_MOTION_TRANSITION = Object.freeze({\n duration: 0.08,\n ease: \"linear\",\n} as const);\n\ntype Ease = readonly [number, number, number, number];\n\ntype TweenOptions = {\n duration: number;\n exitDuration: number;\n enterEase: Ease;\n exitEase: Ease;\n};\n\ntype Spring = {\n type?: \"spring\";\n stiffness: number;\n damping: number;\n mass: number;\n};\n\nfunction tween(duration: number, ease: Ease) {\n return Object.freeze({ type: \"tween\" as const, duration, ease });\n}\n\nfunction safeNumber(value: unknown, fallback: number): number {\n const source =\n value &&\n typeof value === \"object\" &&\n \"get\" in value &&\n typeof value.get === \"function\"\n ? value.get()\n : value;\n const number = Number.parseFloat(String(source));\n return Number.isFinite(number) ? number : fallback;\n}\n\nexport function gpuTransform(\n y: unknown = 0,\n scale: unknown = 1,\n x: unknown = 0,\n): string {\n const translateY = Math.round(safeNumber(y, 0));\n const translateX = Math.round(safeNumber(x, 0));\n const scaleValue = Math.round(safeNumber(scale, 1) * 1000) / 1000;\n return `translate3d(${translateX}px, ${translateY}px, 0) scale(${scaleValue})`;\n}\n\nexport function durationForDistance(\n distancePx: number,\n {\n base,\n min,\n max,\n reference = 320,\n gain = 0.22,\n }: {\n base: number;\n min: number;\n max: number;\n reference?: number;\n gain?: number;\n },\n): number {\n const distance = Math.abs(Number(distancePx) || 0);\n const safeMin = Math.max(0, min);\n const safeMax = Math.max(safeMin, max);\n const safeReference = Math.max(1, reference);\n const duration = base + Math.sqrt(distance / safeReference) * gain;\n return Math.min(safeMax, Math.max(safeMin, duration));\n}\n\nexport function surfaceResizeTransition(\n distancePx: number,\n {\n base,\n min,\n max,\n reference = 320,\n gain = 0.22,\n ease,\n }: {\n base: number;\n min: number;\n max: number;\n reference?: number;\n gain?: number;\n ease: Ease;\n },\n) {\n return tween(\n durationForDistance(distancePx, { base, min, max, reference, gain }),\n ease,\n );\n}\n\nexport function contentSwapTransitions({\n duration,\n exitDuration,\n enterEase,\n exitEase,\n}: TweenOptions) {\n return Object.freeze({\n enter: tween(duration, enterEase),\n exit: tween(exitDuration, exitEase),\n });\n}\n\nexport function contentSwap({\n travel = 6,\n exitTravel = travel * 0.7,\n enterScale = 0.99,\n exitScale = 0.99,\n ...transitionOptions\n}: TweenOptions & {\n travel?: number;\n exitTravel?: number;\n enterScale?: number;\n exitScale?: number;\n}) {\n const transitions = contentSwapTransitions(transitionOptions);\n return Object.freeze({\n hidden: Object.freeze({\n opacity: 0,\n transform: gpuTransform(travel, enterScale),\n }),\n visible: Object.freeze({\n opacity: 1,\n transform: gpuTransform(0),\n transition: transitions.enter,\n }),\n exit: Object.freeze({\n opacity: 0,\n transform: gpuTransform(-exitTravel, exitScale),\n transition: transitions.exit,\n }),\n });\n}\n\nexport function overlaySurface({\n travel = 16,\n exitTravel = travel * 0.5,\n enterScale = 0.97,\n exitScale = 0.985,\n duration,\n exitDuration = duration * 0.68,\n enterEase,\n exitEase,\n}: {\n travel?: number;\n exitTravel?: number;\n enterScale?: number;\n exitScale?: number;\n duration: number;\n exitDuration?: number;\n enterEase: Ease;\n exitEase: Ease;\n}) {\n const transitions = contentSwapTransitions({\n duration,\n exitDuration,\n enterEase,\n exitEase,\n });\n\n return Object.freeze({\n hidden: Object.freeze({\n opacity: 0,\n transform: gpuTransform(travel, enterScale),\n }),\n visible: Object.freeze({\n opacity: 1,\n transform: gpuTransform(0),\n transition: transitions.enter,\n }),\n exit: Object.freeze({\n opacity: 0,\n transform: gpuTransform(exitTravel, exitScale),\n transition: transitions.exit,\n }),\n });\n}\n\nexport function staggerDelay(\n index: number,\n { base = 0.028, cap = 0.16, exponent = 0.82 } = {},\n): number {\n const safeIndex = Math.max(0, Number(index) || 0);\n return Math.min(cap, base * Math.pow(safeIndex, exponent));\n}\n\nexport function chip({\n duration,\n exitDuration,\n enterEase,\n exitEase,\n}: TweenOptions) {\n const transitions = contentSwapTransitions({\n duration,\n exitDuration,\n enterEase,\n exitEase,\n });\n return Object.freeze({\n hidden: Object.freeze({ opacity: 0, transform: gpuTransform(0, 0.96) }),\n visible: Object.freeze({\n opacity: 1,\n transform: gpuTransform(0),\n transition: transitions.enter,\n }),\n exit: Object.freeze({\n opacity: 0,\n transform: gpuTransform(0, 0.96),\n transition: transitions.exit,\n }),\n });\n}\n\nexport function press({\n tapScale,\n spring,\n}: {\n tapScale: number;\n spring: Spring;\n}) {\n return Object.freeze({\n variants: Object.freeze({\n idle: Object.freeze({ transform: gpuTransform(0, 1) }),\n hover: Object.freeze({ transform: gpuTransform(0, 1) }),\n tap: Object.freeze({ transform: gpuTransform(0, tapScale) }),\n }),\n transition: Object.freeze({ type: \"spring\" as const, ...spring }),\n });\n}\n","import { REDUCED_MOTION_TRANSITION } from \"./motion\";\n\n// Motion is owned by the app, like its styles. The app names its own\n// durations, easings and springs and writes every module's motion with them;\n// the framework only reads the tempo and the reduced-motion policy, and applies\n// both to whatever the app wrote.\n\nexport type MotionEase = readonly [number, number, number, number];\n\nexport type ReducedMotionPolicy = \"user\" | \"always\" | \"never\";\n\nexport interface MotionSpring {\n readonly type?: \"spring\";\n readonly stiffness?: number;\n readonly damping?: number;\n readonly mass?: number;\n readonly bounce?: number;\n readonly visualDuration?: number;\n}\n\nexport interface MotionTokensInput {\n /** Stretches every module duration, delay, stagger, timer and spring. */\n readonly tempo?: number;\n /** \"user\" follows the OS setting. */\n readonly reducedMotion?: ReducedMotionPolicy;\n readonly durations?: Readonly<Record<string, number>>;\n readonly easings?: Readonly<Record<string, MotionEase>>;\n readonly springs?: Readonly<Record<string, MotionSpring>>;\n}\n\nexport type MotionTokens<T extends MotionTokensInput = MotionTokensInput> =\n Readonly<\n Omit<T, \"tempo\" | \"reducedMotion\"> & {\n tempo: number;\n reducedMotion: ReducedMotionPolicy;\n }\n >;\n\nexport function defineMotion<T extends MotionTokensInput>(\n tokens: T,\n): MotionTokens<T> {\n const tempo = tokens.tempo ?? 1;\n if (!Number.isFinite(tempo) || tempo <= 0) {\n throw new Error(`Motion tempo must be a positive number, got ${tempo}.`);\n }\n return Object.freeze({\n ...tokens,\n tempo,\n reducedMotion: tokens.reducedMotion ?? \"user\",\n }) as MotionTokens<T>;\n}\n\nexport interface MotionClock {\n readonly tempo: number;\n readonly reduced: boolean;\n}\n\nconst TIME_KEYS = [\n \"duration\",\n \"delay\",\n \"delayChildren\",\n \"staggerChildren\",\n \"repeatDelay\",\n \"visualDuration\",\n] as const;\n\nconst REDUCED = Object.freeze({\n type: \"tween\" as const,\n ...REDUCED_MOTION_TRANSITION,\n});\n\ntype Plain = Record<string, unknown>;\n\nfunction isPlainObject(value: unknown): value is Plain {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return false;\n const prototype = Object.getPrototypeOf(value);\n return prototype === Object.prototype || prototype === null;\n}\n\nfunction isSpring(value: Plain): boolean {\n return (\n value.type === \"spring\" ||\n typeof value.stiffness === \"number\" ||\n typeof value.damping === \"number\"\n );\n}\n\nfunction isTransition(value: Plain): boolean {\n return (\n isSpring(value) ||\n TIME_KEYS.some((key) => typeof value[key] === \"number\")\n );\n}\n\nfunction retimeTransition(value: Plain, clock: MotionClock): Plain {\n if (clock.reduced) return { ...REDUCED };\n const { tempo } = clock;\n const next: Plain = {};\n for (const [key, entry] of Object.entries(value)) {\n next[key] = isPlainObject(entry) ? retimeNode(entry, clock) : entry;\n }\n for (const key of TIME_KEYS) {\n if (typeof value[key] === \"number\") next[key] = (value[key] as number) * tempo;\n }\n // A spring takes tempo× as long at the same damping ratio when its\n // stiffness falls by tempo² and its damping by tempo.\n if (typeof value.stiffness === \"number\") {\n next.stiffness = value.stiffness / (tempo * tempo);\n }\n if (typeof value.damping === \"number\") next.damping = value.damping / tempo;\n return next;\n}\n\nfunction retimeNode(value: unknown, clock: MotionClock): unknown {\n if (typeof value === \"function\") {\n const fn = value as (...args: unknown[]) => unknown;\n return (...args: unknown[]) => retimeNode(fn(...args), clock);\n }\n if (!isPlainObject(value)) return value;\n if (isTransition(value)) return retimeTransition(value, clock);\n const next: Plain = {};\n for (const [key, entry] of Object.entries(value)) {\n next[key] = retimeNode(entry, clock);\n }\n return next;\n}\n\n/** Applies tempo, or the reduced-motion collapse, to transitions anywhere in a motion tree. */\nexport function retime<T>(value: T, clock: MotionClock): T {\n if (clock.tempo === 1 && !clock.reduced) return value;\n return retimeNode(value, clock) as T;\n}\n\nfunction retimeSeconds(value: unknown, clock: MotionClock): unknown {\n if (typeof value === \"number\") {\n return clock.reduced\n ? Math.min(value, REDUCED.duration)\n : value * clock.tempo;\n }\n if (!isPlainObject(value)) return value;\n const next: Plain = {};\n for (const [key, entry] of Object.entries(value)) {\n next[key] = retimeSeconds(entry, clock);\n }\n return next;\n}\n\n/**\n * Retimes a module's resolved motion. Every number under its `timings` key is\n * seconds (choreography timers, staggers); everything else is walked for\n * transitions.\n */\nexport function retimeModuleMotion<M>(motion: M, clock: MotionClock): M {\n if (clock.tempo === 1 && !clock.reduced) return motion;\n if (!isPlainObject(motion)) return retime(motion, clock);\n const next: Plain = {};\n for (const [key, entry] of Object.entries(motion)) {\n next[key] =\n key === \"timings\" ? retimeSeconds(entry, clock) : retimeNode(entry, clock);\n }\n return next as M;\n}\n\nexport function cssEasing(ease: unknown): string {\n if (Array.isArray(ease)) return `cubic-bezier(${ease.join(\", \")})`;\n if (typeof ease === \"string\" && ease.trim()) return ease;\n return \"ease\";\n}\n\n/** A CSS `transition` value for one property, from a motion tween. */\nexport function cssTransition(\n property: string,\n transition: { duration?: number; delay?: number; ease?: unknown },\n): string {\n const duration = `${Math.round((transition.duration ?? 0) * 1000)}ms`;\n const delay = transition.delay\n ? ` ${Math.round(transition.delay * 1000)}ms`\n : \"\";\n return `${property} ${duration} ${cssEasing(transition.ease)}${delay}`;\n}\n"]}
@@ -0,0 +1,44 @@
1
+ export type MotionEase = readonly [number, number, number, number];
2
+ export type ReducedMotionPolicy = "user" | "always" | "never";
3
+ export interface MotionSpring {
4
+ readonly type?: "spring";
5
+ readonly stiffness?: number;
6
+ readonly damping?: number;
7
+ readonly mass?: number;
8
+ readonly bounce?: number;
9
+ readonly visualDuration?: number;
10
+ }
11
+ export interface MotionTokensInput {
12
+ /** Stretches every module duration, delay, stagger, timer and spring. */
13
+ readonly tempo?: number;
14
+ /** "user" follows the OS setting. */
15
+ readonly reducedMotion?: ReducedMotionPolicy;
16
+ readonly durations?: Readonly<Record<string, number>>;
17
+ readonly easings?: Readonly<Record<string, MotionEase>>;
18
+ readonly springs?: Readonly<Record<string, MotionSpring>>;
19
+ }
20
+ export type MotionTokens<T extends MotionTokensInput = MotionTokensInput> = Readonly<Omit<T, "tempo" | "reducedMotion"> & {
21
+ tempo: number;
22
+ reducedMotion: ReducedMotionPolicy;
23
+ }>;
24
+ export declare function defineMotion<T extends MotionTokensInput>(tokens: T): MotionTokens<T>;
25
+ export interface MotionClock {
26
+ readonly tempo: number;
27
+ readonly reduced: boolean;
28
+ }
29
+ /** Applies tempo, or the reduced-motion collapse, to transitions anywhere in a motion tree. */
30
+ export declare function retime<T>(value: T, clock: MotionClock): T;
31
+ /**
32
+ * Retimes a module's resolved motion. Every number under its `timings` key is
33
+ * seconds (choreography timers, staggers); everything else is walked for
34
+ * transitions.
35
+ */
36
+ export declare function retimeModuleMotion<M>(motion: M, clock: MotionClock): M;
37
+ export declare function cssEasing(ease: unknown): string;
38
+ /** A CSS `transition` value for one property, from a motion tween. */
39
+ export declare function cssTransition(property: string, transition: {
40
+ duration?: number;
41
+ delay?: number;
42
+ ease?: unknown;
43
+ }): string;
44
+ //# sourceMappingURL=motion-config.d.ts.map