@omerdlw/base-framework 1.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 (383) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +117 -0
  3. package/dist/atoms/button.d.ts +11 -0
  4. package/dist/atoms/button.d.ts.map +1 -0
  5. package/dist/atoms/icon.d.ts +15 -0
  6. package/dist/atoms/icon.d.ts.map +1 -0
  7. package/dist/atoms/index.d.ts +6 -0
  8. package/dist/atoms/index.d.ts.map +1 -0
  9. package/dist/atoms/index.js +169 -0
  10. package/dist/atoms/index.js.map +1 -0
  11. package/dist/atoms/spinner.d.ts +9 -0
  12. package/dist/atoms/spinner.d.ts.map +1 -0
  13. package/dist/atoms/tooltip.d.ts +18 -0
  14. package/dist/atoms/tooltip.d.ts.map +1 -0
  15. package/dist/error/boundary.d.ts +14 -0
  16. package/dist/error/boundary.d.ts.map +1 -0
  17. package/dist/error/constants.d.ts +18 -0
  18. package/dist/error/constants.d.ts.map +1 -0
  19. package/dist/error/index.d.ts +9 -0
  20. package/dist/error/index.d.ts.map +1 -0
  21. package/dist/error/index.js +688 -0
  22. package/dist/error/index.js.map +1 -0
  23. package/dist/error/listener.d.ts +2 -0
  24. package/dist/error/listener.d.ts.map +1 -0
  25. package/dist/error/reporter.d.ts +32 -0
  26. package/dist/error/reporter.d.ts.map +1 -0
  27. package/dist/error/theme.d.ts +3 -0
  28. package/dist/error/theme.d.ts.map +1 -0
  29. package/dist/error/types.d.ts +91 -0
  30. package/dist/error/types.d.ts.map +1 -0
  31. package/dist/error/utils.d.ts +21 -0
  32. package/dist/error/utils.d.ts.map +1 -0
  33. package/dist/events.d.ts +51 -0
  34. package/dist/events.d.ts.map +1 -0
  35. package/dist/events.js +88 -0
  36. package/dist/events.js.map +1 -0
  37. package/dist/hooks/index.d.ts +17 -0
  38. package/dist/hooks/index.d.ts.map +1 -0
  39. package/dist/hooks/index.js +804 -0
  40. package/dist/hooks/index.js.map +1 -0
  41. package/dist/hooks/types.d.ts +58 -0
  42. package/dist/hooks/types.d.ts.map +1 -0
  43. package/dist/hooks/use-async-action.d.ts +3 -0
  44. package/dist/hooks/use-async-action.d.ts.map +1 -0
  45. package/dist/hooks/use-click-outside.d.ts +3 -0
  46. package/dist/hooks/use-click-outside.d.ts.map +1 -0
  47. package/dist/hooks/use-controllable-state.d.ts +3 -0
  48. package/dist/hooks/use-controllable-state.d.ts.map +1 -0
  49. package/dist/hooks/use-debounce.d.ts +2 -0
  50. package/dist/hooks/use-debounce.d.ts.map +1 -0
  51. package/dist/hooks/use-fullscreen-state.d.ts +4 -0
  52. package/dist/hooks/use-fullscreen-state.d.ts.map +1 -0
  53. package/dist/hooks/use-global-event.d.ts +7 -0
  54. package/dist/hooks/use-global-event.d.ts.map +1 -0
  55. package/dist/hooks/use-hotkey.d.ts +4 -0
  56. package/dist/hooks/use-hotkey.d.ts.map +1 -0
  57. package/dist/hooks/use-intersection-observer.d.ts +4 -0
  58. package/dist/hooks/use-intersection-observer.d.ts.map +1 -0
  59. package/dist/hooks/use-isomorphic-layout-effect.d.ts +3 -0
  60. package/dist/hooks/use-isomorphic-layout-effect.d.ts.map +1 -0
  61. package/dist/hooks/use-media-query.d.ts +2 -0
  62. package/dist/hooks/use-media-query.d.ts.map +1 -0
  63. package/dist/hooks/use-mounted.d.ts +2 -0
  64. package/dist/hooks/use-mounted.d.ts.map +1 -0
  65. package/dist/hooks/use-required-context.d.ts +3 -0
  66. package/dist/hooks/use-required-context.d.ts.map +1 -0
  67. package/dist/hooks/use-server-action.d.ts +4 -0
  68. package/dist/hooks/use-server-action.d.ts.map +1 -0
  69. package/dist/hooks/use-storage-state.d.ts +5 -0
  70. package/dist/hooks/use-storage-state.d.ts.map +1 -0
  71. package/dist/hooks/use-store.d.ts +3 -0
  72. package/dist/hooks/use-store.d.ts.map +1 -0
  73. package/dist/index.d.ts +12 -0
  74. package/dist/index.d.ts.map +1 -0
  75. package/dist/index.js +20415 -0
  76. package/dist/index.js.map +1 -0
  77. package/dist/kernel/adapters.d.ts +5 -0
  78. package/dist/kernel/adapters.d.ts.map +1 -0
  79. package/dist/kernel/compose.d.ts +15 -0
  80. package/dist/kernel/compose.d.ts.map +1 -0
  81. package/dist/kernel/constants.d.ts +12 -0
  82. package/dist/kernel/constants.d.ts.map +1 -0
  83. package/dist/kernel/context-registry.d.ts +3 -0
  84. package/dist/kernel/context-registry.d.ts.map +1 -0
  85. package/dist/kernel/handlers.d.ts +3 -0
  86. package/dist/kernel/handlers.d.ts.map +1 -0
  87. package/dist/kernel/hooks.d.ts +7 -0
  88. package/dist/kernel/hooks.d.ts.map +1 -0
  89. package/dist/kernel/index.d.ts +14 -0
  90. package/dist/kernel/index.d.ts.map +1 -0
  91. package/dist/kernel/index.js +2109 -0
  92. package/dist/kernel/index.js.map +1 -0
  93. package/dist/kernel/installed.d.ts +21 -0
  94. package/dist/kernel/installed.d.ts.map +1 -0
  95. package/dist/kernel/module.d.ts +32 -0
  96. package/dist/kernel/module.d.ts.map +1 -0
  97. package/dist/kernel/operations.d.ts +21 -0
  98. package/dist/kernel/operations.d.ts.map +1 -0
  99. package/dist/kernel/page-controller.d.ts +8 -0
  100. package/dist/kernel/page-controller.d.ts.map +1 -0
  101. package/dist/kernel/provider.d.ts +18 -0
  102. package/dist/kernel/provider.d.ts.map +1 -0
  103. package/dist/kernel/runtime.d.ts +30 -0
  104. package/dist/kernel/runtime.d.ts.map +1 -0
  105. package/dist/kernel/schema.d.ts +13 -0
  106. package/dist/kernel/schema.d.ts.map +1 -0
  107. package/dist/kernel/store.d.ts +4 -0
  108. package/dist/kernel/store.d.ts.map +1 -0
  109. package/dist/kernel/types.d.ts +233 -0
  110. package/dist/kernel/types.d.ts.map +1 -0
  111. package/dist/kernel/utils.d.ts +20 -0
  112. package/dist/kernel/utils.d.ts.map +1 -0
  113. package/dist/modules/ambient/constants.d.ts +23 -0
  114. package/dist/modules/ambient/constants.d.ts.map +1 -0
  115. package/dist/modules/ambient/context.d.ts +10 -0
  116. package/dist/modules/ambient/context.d.ts.map +1 -0
  117. package/dist/modules/ambient/index.d.ts +6 -0
  118. package/dist/modules/ambient/index.d.ts.map +1 -0
  119. package/dist/modules/ambient/index.js +896 -0
  120. package/dist/modules/ambient/index.js.map +1 -0
  121. package/dist/modules/ambient/module.d.ts +12 -0
  122. package/dist/modules/ambient/module.d.ts.map +1 -0
  123. package/dist/modules/ambient/types.d.ts +84 -0
  124. package/dist/modules/ambient/types.d.ts.map +1 -0
  125. package/dist/modules/ambient/utils.d.ts +18 -0
  126. package/dist/modules/ambient/utils.d.ts.map +1 -0
  127. package/dist/modules/background/constants.d.ts +12 -0
  128. package/dist/modules/background/constants.d.ts.map +1 -0
  129. package/dist/modules/background/context.d.ts +13 -0
  130. package/dist/modules/background/context.d.ts.map +1 -0
  131. package/dist/modules/background/hooks.d.ts +119 -0
  132. package/dist/modules/background/hooks.d.ts.map +1 -0
  133. package/dist/modules/background/index.d.ts +7 -0
  134. package/dist/modules/background/index.d.ts.map +1 -0
  135. package/dist/modules/background/index.js +3195 -0
  136. package/dist/modules/background/index.js.map +1 -0
  137. package/dist/modules/background/module.d.ts +14 -0
  138. package/dist/modules/background/module.d.ts.map +1 -0
  139. package/dist/modules/background/motion.d.ts +13 -0
  140. package/dist/modules/background/motion.d.ts.map +1 -0
  141. package/dist/modules/background/overlay.d.ts +49 -0
  142. package/dist/modules/background/overlay.d.ts.map +1 -0
  143. package/dist/modules/background/types.d.ts +153 -0
  144. package/dist/modules/background/types.d.ts.map +1 -0
  145. package/dist/modules/background/utils.d.ts +56 -0
  146. package/dist/modules/background/utils.d.ts.map +1 -0
  147. package/dist/modules/background/youtube/iframe.d.ts +52 -0
  148. package/dist/modules/background/youtube/iframe.d.ts.map +1 -0
  149. package/dist/modules/background/youtube/parse.d.ts +17 -0
  150. package/dist/modules/background/youtube/parse.d.ts.map +1 -0
  151. package/dist/modules/context-menu/constants.d.ts +8 -0
  152. package/dist/modules/context-menu/constants.d.ts.map +1 -0
  153. package/dist/modules/context-menu/context.d.ts +16 -0
  154. package/dist/modules/context-menu/context.d.ts.map +1 -0
  155. package/dist/modules/context-menu/hooks.d.ts +31 -0
  156. package/dist/modules/context-menu/hooks.d.ts.map +1 -0
  157. package/dist/modules/context-menu/index.d.ts +6 -0
  158. package/dist/modules/context-menu/index.d.ts.map +1 -0
  159. package/dist/modules/context-menu/index.js +2008 -0
  160. package/dist/modules/context-menu/index.js.map +1 -0
  161. package/dist/modules/context-menu/module.d.ts +12 -0
  162. package/dist/modules/context-menu/module.d.ts.map +1 -0
  163. package/dist/modules/context-menu/motion.d.ts +9 -0
  164. package/dist/modules/context-menu/motion.d.ts.map +1 -0
  165. package/dist/modules/context-menu/overlay.d.ts +15 -0
  166. package/dist/modules/context-menu/overlay.d.ts.map +1 -0
  167. package/dist/modules/context-menu/resolver.d.ts +7 -0
  168. package/dist/modules/context-menu/resolver.d.ts.map +1 -0
  169. package/dist/modules/context-menu/state.d.ts +4 -0
  170. package/dist/modules/context-menu/state.d.ts.map +1 -0
  171. package/dist/modules/context-menu/types.d.ts +171 -0
  172. package/dist/modules/context-menu/types.d.ts.map +1 -0
  173. package/dist/modules/context-menu/utils.d.ts +16 -0
  174. package/dist/modules/context-menu/utils.d.ts.map +1 -0
  175. package/dist/modules/controls/constants.d.ts +7 -0
  176. package/dist/modules/controls/constants.d.ts.map +1 -0
  177. package/dist/modules/controls/hooks.d.ts +15 -0
  178. package/dist/modules/controls/hooks.d.ts.map +1 -0
  179. package/dist/modules/controls/index.d.ts +6 -0
  180. package/dist/modules/controls/index.d.ts.map +1 -0
  181. package/dist/modules/controls/index.js +1242 -0
  182. package/dist/modules/controls/index.js.map +1 -0
  183. package/dist/modules/controls/module.d.ts +12 -0
  184. package/dist/modules/controls/module.d.ts.map +1 -0
  185. package/dist/modules/controls/overlay.d.ts +2 -0
  186. package/dist/modules/controls/overlay.d.ts.map +1 -0
  187. package/dist/modules/controls/types.d.ts +86 -0
  188. package/dist/modules/controls/types.d.ts.map +1 -0
  189. package/dist/modules/controls/utils.d.ts +9 -0
  190. package/dist/modules/controls/utils.d.ts.map +1 -0
  191. package/dist/modules/dock/cards.d.ts +1035 -0
  192. package/dist/modules/dock/cards.d.ts.map +1 -0
  193. package/dist/modules/dock/constants.d.ts +157 -0
  194. package/dist/modules/dock/constants.d.ts.map +1 -0
  195. package/dist/modules/dock/context.d.ts +26 -0
  196. package/dist/modules/dock/context.d.ts.map +1 -0
  197. package/dist/modules/dock/hooks.d.ts +957 -0
  198. package/dist/modules/dock/hooks.d.ts.map +1 -0
  199. package/dist/modules/dock/hud.d.ts +43 -0
  200. package/dist/modules/dock/hud.d.ts.map +1 -0
  201. package/dist/modules/dock/index.d.ts +27 -0
  202. package/dist/modules/dock/index.d.ts.map +1 -0
  203. package/dist/modules/dock/index.js +12111 -0
  204. package/dist/modules/dock/index.js.map +1 -0
  205. package/dist/modules/dock/module.d.ts +71 -0
  206. package/dist/modules/dock/module.d.ts.map +1 -0
  207. package/dist/modules/dock/motion.d.ts +986 -0
  208. package/dist/modules/dock/motion.d.ts.map +1 -0
  209. package/dist/modules/dock/overlay.d.ts +79 -0
  210. package/dist/modules/dock/overlay.d.ts.map +1 -0
  211. package/dist/modules/dock/provider.d.ts +3 -0
  212. package/dist/modules/dock/provider.d.ts.map +1 -0
  213. package/dist/modules/dock/routing/breadcrumbs.d.ts +43 -0
  214. package/dist/modules/dock/routing/breadcrumbs.d.ts.map +1 -0
  215. package/dist/modules/dock/routing/continuity.d.ts +19 -0
  216. package/dist/modules/dock/routing/continuity.d.ts.map +1 -0
  217. package/dist/modules/dock/routing/guards.d.ts +21 -0
  218. package/dist/modules/dock/routing/guards.d.ts.map +1 -0
  219. package/dist/modules/dock/routing/navigation.d.ts +37 -0
  220. package/dist/modules/dock/routing/navigation.d.ts.map +1 -0
  221. package/dist/modules/dock/routing/transactions.d.ts +21 -0
  222. package/dist/modules/dock/routing/transactions.d.ts.map +1 -0
  223. package/dist/modules/dock/runtime/commands.d.ts +18 -0
  224. package/dist/modules/dock/runtime/commands.d.ts.map +1 -0
  225. package/dist/modules/dock/runtime/display.d.ts +36 -0
  226. package/dist/modules/dock/runtime/display.d.ts.map +1 -0
  227. package/dist/modules/dock/runtime/dock.d.ts +123 -0
  228. package/dist/modules/dock/runtime/dock.d.ts.map +1 -0
  229. package/dist/modules/dock/state.d.ts +22 -0
  230. package/dist/modules/dock/state.d.ts.map +1 -0
  231. package/dist/modules/dock/status/events.d.ts +37 -0
  232. package/dist/modules/dock/status/events.d.ts.map +1 -0
  233. package/dist/modules/dock/status/hooks.d.ts +6 -0
  234. package/dist/modules/dock/status/hooks.d.ts.map +1 -0
  235. package/dist/modules/dock/status/model.d.ts +65 -0
  236. package/dist/modules/dock/status/model.d.ts.map +1 -0
  237. package/dist/modules/dock/surface/context.d.ts +43 -0
  238. package/dist/modules/dock/surface/context.d.ts.map +1 -0
  239. package/dist/modules/dock/surface/definition.d.ts +38 -0
  240. package/dist/modules/dock/surface/definition.d.ts.map +1 -0
  241. package/dist/modules/dock/surface/hooks.d.ts +123 -0
  242. package/dist/modules/dock/surface/hooks.d.ts.map +1 -0
  243. package/dist/modules/dock/surface/machine.d.ts +75 -0
  244. package/dist/modules/dock/surface/machine.d.ts.map +1 -0
  245. package/dist/modules/dock/surface/stack.d.ts +38 -0
  246. package/dist/modules/dock/surface/stack.d.ts.map +1 -0
  247. package/dist/modules/dock/surface/view-model.d.ts +3 -0
  248. package/dist/modules/dock/surface/view-model.d.ts.map +1 -0
  249. package/dist/modules/dock/types.d.ts +1158 -0
  250. package/dist/modules/dock/types.d.ts.map +1 -0
  251. package/dist/modules/dock/utils.d.ts +93 -0
  252. package/dist/modules/dock/utils.d.ts.map +1 -0
  253. package/dist/modules/index.d.ts +12 -0
  254. package/dist/modules/index.d.ts.map +1 -0
  255. package/dist/modules/index.js +18020 -0
  256. package/dist/modules/index.js.map +1 -0
  257. package/dist/modules/loading/constants.d.ts +5 -0
  258. package/dist/modules/loading/constants.d.ts.map +1 -0
  259. package/dist/modules/loading/context.d.ts +13 -0
  260. package/dist/modules/loading/context.d.ts.map +1 -0
  261. package/dist/modules/loading/hooks.d.ts +6 -0
  262. package/dist/modules/loading/hooks.d.ts.map +1 -0
  263. package/dist/modules/loading/index.d.ts +7 -0
  264. package/dist/modules/loading/index.d.ts.map +1 -0
  265. package/dist/modules/loading/index.js +1256 -0
  266. package/dist/modules/loading/index.js.map +1 -0
  267. package/dist/modules/loading/module.d.ts +14 -0
  268. package/dist/modules/loading/module.d.ts.map +1 -0
  269. package/dist/modules/loading/overlay.d.ts +2 -0
  270. package/dist/modules/loading/overlay.d.ts.map +1 -0
  271. package/dist/modules/loading/types.d.ts +47 -0
  272. package/dist/modules/loading/types.d.ts.map +1 -0
  273. package/dist/modules/loading/utils.d.ts +4 -0
  274. package/dist/modules/loading/utils.d.ts.map +1 -0
  275. package/dist/modules/media/constants.d.ts +7 -0
  276. package/dist/modules/media/constants.d.ts.map +1 -0
  277. package/dist/modules/media/context.d.ts +6 -0
  278. package/dist/modules/media/context.d.ts.map +1 -0
  279. package/dist/modules/media/hooks.d.ts +3 -0
  280. package/dist/modules/media/hooks.d.ts.map +1 -0
  281. package/dist/modules/media/index.d.ts +8 -0
  282. package/dist/modules/media/index.d.ts.map +1 -0
  283. package/dist/modules/media/index.js +728 -0
  284. package/dist/modules/media/index.js.map +1 -0
  285. package/dist/modules/media/module.d.ts +11 -0
  286. package/dist/modules/media/module.d.ts.map +1 -0
  287. package/dist/modules/media/overlay.d.ts +9 -0
  288. package/dist/modules/media/overlay.d.ts.map +1 -0
  289. package/dist/modules/media/types.d.ts +77 -0
  290. package/dist/modules/media/types.d.ts.map +1 -0
  291. package/dist/modules/media/utils.d.ts +17 -0
  292. package/dist/modules/media/utils.d.ts.map +1 -0
  293. package/dist/modules/modal/constants.d.ts +20 -0
  294. package/dist/modules/modal/constants.d.ts.map +1 -0
  295. package/dist/modules/modal/context.d.ts +20 -0
  296. package/dist/modules/modal/context.d.ts.map +1 -0
  297. package/dist/modules/modal/hooks.d.ts +41 -0
  298. package/dist/modules/modal/hooks.d.ts.map +1 -0
  299. package/dist/modules/modal/index.d.ts +7 -0
  300. package/dist/modules/modal/index.d.ts.map +1 -0
  301. package/dist/modules/modal/index.js +2672 -0
  302. package/dist/modules/modal/index.js.map +1 -0
  303. package/dist/modules/modal/module.d.ts +12 -0
  304. package/dist/modules/modal/module.d.ts.map +1 -0
  305. package/dist/modules/modal/motion.d.ts +16 -0
  306. package/dist/modules/modal/motion.d.ts.map +1 -0
  307. package/dist/modules/modal/overlay.d.ts +4 -0
  308. package/dist/modules/modal/overlay.d.ts.map +1 -0
  309. package/dist/modules/modal/state.d.ts +4 -0
  310. package/dist/modules/modal/state.d.ts.map +1 -0
  311. package/dist/modules/modal/types.d.ts +109 -0
  312. package/dist/modules/modal/types.d.ts.map +1 -0
  313. package/dist/modules/modal/utils.d.ts +31 -0
  314. package/dist/modules/modal/utils.d.ts.map +1 -0
  315. package/dist/modules/notification/constants.d.ts +9 -0
  316. package/dist/modules/notification/constants.d.ts.map +1 -0
  317. package/dist/modules/notification/context.d.ts +7 -0
  318. package/dist/modules/notification/context.d.ts.map +1 -0
  319. package/dist/modules/notification/hooks.d.ts +10 -0
  320. package/dist/modules/notification/hooks.d.ts.map +1 -0
  321. package/dist/modules/notification/index.d.ts +7 -0
  322. package/dist/modules/notification/index.d.ts.map +1 -0
  323. package/dist/modules/notification/index.js +905 -0
  324. package/dist/modules/notification/index.js.map +1 -0
  325. package/dist/modules/notification/module.d.ts +11 -0
  326. package/dist/modules/notification/module.d.ts.map +1 -0
  327. package/dist/modules/notification/motion.d.ts +15 -0
  328. package/dist/modules/notification/motion.d.ts.map +1 -0
  329. package/dist/modules/notification/overlay.d.ts +3 -0
  330. package/dist/modules/notification/overlay.d.ts.map +1 -0
  331. package/dist/modules/notification/types.d.ts +57 -0
  332. package/dist/modules/notification/types.d.ts.map +1 -0
  333. package/dist/modules/notification/utils.d.ts +9 -0
  334. package/dist/modules/notification/utils.d.ts.map +1 -0
  335. package/dist/modules/theme.d.ts +3 -0
  336. package/dist/modules/theme.d.ts.map +1 -0
  337. package/dist/provider.d.ts +23 -0
  338. package/dist/provider.d.ts.map +1 -0
  339. package/dist/provider.js +1973 -0
  340. package/dist/provider.js.map +1 -0
  341. package/dist/result.d.ts +50 -0
  342. package/dist/result.d.ts.map +1 -0
  343. package/dist/result.js +163 -0
  344. package/dist/result.js.map +1 -0
  345. package/dist/theme.d.ts +25 -0
  346. package/dist/theme.d.ts.map +1 -0
  347. package/dist/theme.js +44 -0
  348. package/dist/theme.js.map +1 -0
  349. package/dist/tokens/index.d.ts +3 -0
  350. package/dist/tokens/index.d.ts.map +1 -0
  351. package/dist/tokens/index.js +325 -0
  352. package/dist/tokens/index.js.map +1 -0
  353. package/dist/tokens/motion.d.ts +315 -0
  354. package/dist/tokens/motion.d.ts.map +1 -0
  355. package/dist/tokens/tokens.d.ts +34 -0
  356. package/dist/tokens/tokens.d.ts.map +1 -0
  357. package/dist/utils/cn.d.ts +3 -0
  358. package/dist/utils/cn.d.ts.map +1 -0
  359. package/dist/utils/dom.d.ts +5 -0
  360. package/dist/utils/dom.d.ts.map +1 -0
  361. package/dist/utils/index.d.ts +16 -0
  362. package/dist/utils/index.d.ts.map +1 -0
  363. package/dist/utils/index.js +485 -0
  364. package/dist/utils/index.js.map +1 -0
  365. package/dist/utils/json.d.ts +3 -0
  366. package/dist/utils/json.d.ts.map +1 -0
  367. package/dist/utils/number.d.ts +4 -0
  368. package/dist/utils/number.d.ts.map +1 -0
  369. package/dist/utils/object.d.ts +7 -0
  370. package/dist/utils/object.d.ts.map +1 -0
  371. package/dist/utils/report.d.ts +5 -0
  372. package/dist/utils/report.d.ts.map +1 -0
  373. package/dist/utils/scheduler.d.ts +34 -0
  374. package/dist/utils/scheduler.d.ts.map +1 -0
  375. package/dist/utils/store.d.ts +11 -0
  376. package/dist/utils/store.d.ts.map +1 -0
  377. package/dist/utils/string.d.ts +8 -0
  378. package/dist/utils/string.d.ts.map +1 -0
  379. package/dist/utils/timing.d.ts +8 -0
  380. package/dist/utils/timing.d.ts.map +1 -0
  381. package/dist/utils/user-message.d.ts +20 -0
  382. package/dist/utils/user-message.d.ts.map +1 -0
  383. package/package.json +113 -0
package/dist/result.js ADDED
@@ -0,0 +1,163 @@
1
+ // src/utils/user-message.ts
2
+ var USER_MESSAGES = Object.freeze({
3
+ generic: "Something went wrong. Please try again",
4
+ network: "You appear to be offline. Check your connection and try again",
5
+ timeout: "That took too long. Please try again",
6
+ unauthorized: "Your session has expired. Please sign in again",
7
+ forbidden: "You don't have permission to do that",
8
+ notFound: "We couldn't find what you were looking for",
9
+ rateLimited: "Too many attempts. Please wait a moment and try again",
10
+ server: "We're having trouble on our end. Please try again in a moment"
11
+ });
12
+ var UserError = class extends Error {
13
+ status;
14
+ constructor(message, status) {
15
+ super(message);
16
+ this.name = "UserError";
17
+ this.status = status;
18
+ }
19
+ };
20
+ var NETWORK_FAILURE = /failed to fetch|network|load failed|fetch failed/i;
21
+ function readField(source, field, type) {
22
+ const value = source?.[field];
23
+ return typeof value === type ? value : void 0;
24
+ }
25
+ function readPayloadMessage(error) {
26
+ const payload = error?.payload;
27
+ const message = readField(payload, "error", "string")?.trim();
28
+ return message || void 0;
29
+ }
30
+ function toUserMessage(error, { codes, fallback = USER_MESSAGES.generic } = {}) {
31
+ if (typeof error === "string") return error.trim() || fallback;
32
+ if (!error || typeof error !== "object") return fallback;
33
+ if (error instanceof UserError) {
34
+ if (error.status === 401) return USER_MESSAGES.unauthorized;
35
+ return error.message || fallback;
36
+ }
37
+ if (error.name === "AbortError") return fallback;
38
+ const code = readField(error, "code", "string");
39
+ if (code && codes?.[code]) return codes[code];
40
+ const status = readField(error, "status", "number");
41
+ if (status === 401) return USER_MESSAGES.unauthorized;
42
+ if (status === 429) return USER_MESSAGES.rateLimited;
43
+ if (status === 408 || status === 504) return USER_MESSAGES.timeout;
44
+ if (status !== void 0 && status >= 500) return USER_MESSAGES.server;
45
+ if (status !== void 0 && status >= 400) {
46
+ const authored = readPayloadMessage(error);
47
+ if (authored) return authored;
48
+ if (status === 403) return USER_MESSAGES.forbidden;
49
+ if (status === 404) return USER_MESSAGES.notFound;
50
+ return fallback;
51
+ }
52
+ const isOffline = typeof navigator !== "undefined" && navigator.onLine === false;
53
+ if (isOffline || NETWORK_FAILURE.test(error.message ?? "") && (error instanceof TypeError || /fetch/i.test(error.name))) {
54
+ return USER_MESSAGES.network;
55
+ }
56
+ return fallback;
57
+ }
58
+ function report(scope, error, level = "error") {
59
+ if (process.env.NODE_ENV === "production" && typeof window !== "undefined") {
60
+ return;
61
+ }
62
+ console[level](`[${scope}]`, error);
63
+ }
64
+
65
+ // src/result.ts
66
+ function ok(data, code) {
67
+ return { data, success: true, ...code ? { code } : {} };
68
+ }
69
+ function err(error, code) {
70
+ return { error, success: false, ...code ? { code } : {} };
71
+ }
72
+ function isResult(value) {
73
+ return typeof value === "object" && value !== null && "success" in value && typeof value.success === "boolean" && ("data" in value && value.success === true || "error" in value && value.success === false);
74
+ }
75
+ function isOk(result) {
76
+ return result.success === true;
77
+ }
78
+ function isErr(result) {
79
+ return result.success === false;
80
+ }
81
+ function unwrap(result) {
82
+ if (result.success) {
83
+ return result.data;
84
+ }
85
+ if (result.error instanceof Error) {
86
+ throw result.error;
87
+ }
88
+ throw new Error(
89
+ typeof result.error === "string" ? result.error : String(result.error)
90
+ );
91
+ }
92
+ function unwrapOr(result, fallback) {
93
+ return result.success ? result.data : fallback;
94
+ }
95
+ function map(result, fn) {
96
+ return result.success ? ok(fn(result.data), result.code) : result;
97
+ }
98
+ function mapErr(result, fn) {
99
+ return result.success ? result : err(fn(result.error), result.code);
100
+ }
101
+ function match(result, branches) {
102
+ return result.success ? branches.ok(result.data) : branches.err(result.error);
103
+ }
104
+ function mapCaught(error, mapError) {
105
+ if (!(error instanceof UserError)) report("Result", error);
106
+ return mapError ? mapError(error) : toUserMessage(error);
107
+ }
108
+ async function tryCatch(promiseOrFn, mapError) {
109
+ try {
110
+ const data = typeof promiseOrFn === "function" ? await promiseOrFn() : await promiseOrFn;
111
+ return ok(data);
112
+ } catch (error) {
113
+ return err(mapCaught(error, mapError));
114
+ }
115
+ }
116
+ function createSafeAction(handler, options = {}) {
117
+ const { errorCode, mapError, schema, validate } = options;
118
+ return async (...args) => {
119
+ try {
120
+ let effectiveArgs = args;
121
+ if (schema) {
122
+ const parsed = schema.safeParse(args[0]);
123
+ if (!parsed.success) {
124
+ const issueMessage = parsed.error?.issues?.[0]?.message || parsed.error?.message || "Invalid input";
125
+ return err(
126
+ mapError ? mapError(issueMessage) : issueMessage,
127
+ errorCode ?? "VALIDATION_ERROR"
128
+ );
129
+ }
130
+ effectiveArgs = [parsed.data, ...args.slice(1)];
131
+ }
132
+ if (validate) {
133
+ const validationResult = validate(...effectiveArgs);
134
+ if (isResult(validationResult)) {
135
+ if (isErr(validationResult)) {
136
+ return validationResult;
137
+ }
138
+ } else if (validationResult === false) {
139
+ return err(
140
+ mapError ? mapError("Validation failed") : "Validation failed",
141
+ errorCode ?? "VALIDATION_ERROR"
142
+ );
143
+ } else if (typeof validationResult === "string" && validationResult.length > 0) {
144
+ return err(
145
+ mapError ? mapError(validationResult) : validationResult,
146
+ errorCode ?? "VALIDATION_ERROR"
147
+ );
148
+ }
149
+ }
150
+ const output = await handler(...effectiveArgs);
151
+ if (isResult(output)) {
152
+ return output;
153
+ }
154
+ return ok(output);
155
+ } catch (error) {
156
+ return err(mapCaught(error, mapError), errorCode);
157
+ }
158
+ };
159
+ }
160
+
161
+ export { createSafeAction, err, isErr, isOk, isResult, map, mapErr, match, ok, tryCatch, unwrap, unwrapOr };
162
+ //# sourceMappingURL=result.js.map
163
+ //# sourceMappingURL=result.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/user-message.ts","../src/utils/report.ts","../src/result.ts"],"names":[],"mappings":"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","file":"result.js","sourcesContent":["export const USER_MESSAGES = Object.freeze({\n generic: \"Something went wrong. Please try again\",\n network: \"You appear to be offline. Check your connection and try again\",\n timeout: \"That took too long. Please try again\",\n unauthorized: \"Your session has expired. Please sign in again\",\n forbidden: \"You don't have permission to do that\",\n notFound: \"We couldn't find what you were looking for\",\n rateLimited: \"Too many attempts. Please wait a moment and try again\",\n server: \"We're having trouble on our end. Please try again in a moment\",\n} as const);\n\nexport class UserError extends Error {\n readonly status?: number;\n\n constructor(message: string, status?: number) {\n super(message);\n this.name = \"UserError\";\n this.status = status;\n }\n}\n\nexport interface UserMessageOptions {\n fallback?: string;\n codes?: Readonly<Record<string, string>>;\n}\n\nconst NETWORK_FAILURE = /failed to fetch|network|load failed|fetch failed/i;\n\nfunction readField<T>(\n source: unknown,\n field: string,\n type: \"string\" | \"number\",\n): T | undefined {\n const value = (source as Record<string, unknown> | null)?.[field];\n return typeof value === type ? (value as T) : undefined;\n}\n\nfunction readPayloadMessage(error: unknown): string | undefined {\n const payload = (error as { payload?: unknown } | null)?.payload;\n const message = readField<string>(payload, \"error\", \"string\")?.trim();\n return message || undefined;\n}\n\nexport function toUserMessage(\n error: unknown,\n { codes, fallback = USER_MESSAGES.generic }: UserMessageOptions = {},\n): string {\n if (typeof error === \"string\") return error.trim() || fallback;\n if (!error || typeof error !== \"object\") return fallback;\n\n if (error instanceof UserError) {\n if (error.status === 401) return USER_MESSAGES.unauthorized;\n return error.message || fallback;\n }\n if ((error as { name?: string }).name === \"AbortError\") return fallback;\n\n const code = readField<string>(error, \"code\", \"string\");\n if (code && codes?.[code]) return codes[code];\n\n const status = readField<number>(error, \"status\", \"number\");\n\n if (status === 401) return USER_MESSAGES.unauthorized;\n if (status === 429) return USER_MESSAGES.rateLimited;\n if (status === 408 || status === 504) return USER_MESSAGES.timeout;\n if (status !== undefined && status >= 500) return USER_MESSAGES.server;\n\n if (status !== undefined && status >= 400) {\n const authored = readPayloadMessage(error);\n if (authored) return authored;\n if (status === 403) return USER_MESSAGES.forbidden;\n if (status === 404) return USER_MESSAGES.notFound;\n return fallback;\n }\n\n const isOffline =\n typeof navigator !== \"undefined\" && navigator.onLine === false;\n if (\n isOffline ||\n (NETWORK_FAILURE.test((error as Error).message ?? \"\") &&\n (error instanceof TypeError || /fetch/i.test((error as Error).name)))\n ) {\n return USER_MESSAGES.network;\n }\n\n return fallback;\n}\n","export type ReportLevel = \"error\" | \"warn\";\n\nexport type ReportSink = (\n scope: string,\n error: unknown,\n level: ReportLevel,\n) => void;\n\nlet sink: ReportSink | null = null;\n\nexport function report(\n scope: string,\n error: unknown,\n level: ReportLevel = \"error\",\n): void {\n if (sink) {\n try {\n sink(scope, error, level);\n return;\n } catch {}\n }\n\n if (process.env.NODE_ENV === \"production\" && typeof window !== \"undefined\") {\n return;\n }\n console[level](`[${scope}]`, error);\n}\n\nexport function setReportSink(next: ReportSink): () => void {\n sink = next;\n return () => {\n if (sink === next) sink = null;\n };\n}\n","import { UserError, toUserMessage } from \"./utils/user-message\";\nimport { report } from \"./utils/report\";\n\nexport interface SuccessResult<T> {\n readonly code?: string;\n readonly data: T;\n readonly error?: never;\n readonly success: true;\n}\n\nexport interface ErrorResult<E = string> {\n readonly code?: string;\n readonly data?: never;\n readonly error: E;\n readonly success: false;\n}\n\nexport type Result<T, E = string> = SuccessResult<T> | ErrorResult<E>;\n\nexport function ok<T>(data: T, code?: string): SuccessResult<T> {\n return { data, success: true, ...(code ? { code } : {}) };\n}\n\nexport function err<E = string>(error: E, code?: string): ErrorResult<E> {\n return { error, success: false, ...(code ? { code } : {}) };\n}\n\nexport function isResult(value: unknown): value is Result<unknown, unknown> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"success\" in value &&\n typeof (value as { success: unknown }).success === \"boolean\" &&\n ((\"data\" in value && (value as { success: boolean }).success === true) ||\n (\"error\" in value && (value as { success: boolean }).success === false))\n );\n}\n\nexport function isOk<T, E = string>(\n result: Result<T, E>,\n): result is SuccessResult<T> {\n return result.success === true;\n}\n\nexport function isErr<T, E = string>(\n result: Result<T, E>,\n): result is ErrorResult<E> {\n return result.success === false;\n}\n\nexport function unwrap<T, E = string>(result: Result<T, E>): T {\n if (result.success) {\n return result.data;\n }\n if (result.error instanceof Error) {\n throw result.error;\n }\n throw new Error(\n typeof result.error === \"string\" ? result.error : String(result.error),\n );\n}\n\nexport function unwrapOr<T, E = string>(result: Result<T, E>, fallback: T): T {\n return result.success ? result.data : fallback;\n}\n\nexport function map<T, U, E = string>(\n result: Result<T, E>,\n fn: (data: T) => U,\n): Result<U, E> {\n return result.success ? ok(fn(result.data), result.code) : result;\n}\n\nexport function mapErr<T, E, F>(\n result: Result<T, E>,\n fn: (error: E) => F,\n): Result<T, F> {\n return result.success ? result : err(fn(result.error), result.code);\n}\n\nexport function match<T, E, R>(\n result: Result<T, E>,\n branches: { ok: (data: T) => R; err: (error: E) => R },\n): R {\n return result.success ? branches.ok(result.data) : branches.err(result.error);\n}\n\nfunction mapCaught<E>(error: unknown, mapError?: (error: unknown) => E): E {\n if (!(error instanceof UserError)) report(\"Result\", error);\n return mapError ? mapError(error) : (toUserMessage(error) as unknown as E);\n}\n\nexport async function tryCatch<T, E = string>(\n promiseOrFn: Promise<T> | (() => Promise<T>),\n mapError?: (error: unknown) => E,\n): Promise<Result<T, E>> {\n try {\n const data =\n typeof promiseOrFn === \"function\"\n ? await promiseOrFn()\n : await promiseOrFn;\n return ok(data);\n } catch (error) {\n return err(mapCaught(error, mapError));\n }\n}\n\ninterface SafeActionSchema<TParsed> {\n safeParse: (input: unknown) =>\n | { data: TParsed; success: true }\n | {\n error?: {\n issues?: Array<{ message?: string }>;\n message?: string;\n };\n success: false;\n };\n}\n\nexport interface SafeActionOptions<TArgs extends unknown[], E = string> {\n errorCode?: string;\n mapError?: (error: unknown) => E;\n schema?: SafeActionSchema<TArgs[0]>;\n validate?: (\n ...args: TArgs\n ) => Result<unknown, E> | string | boolean | null | undefined;\n}\n\nexport function createSafeAction<TArgs extends unknown[], TOutput, E = string>(\n handler: (\n ...args: TArgs\n ) => Promise<Result<TOutput, E> | TOutput> | Result<TOutput, E> | TOutput,\n options: SafeActionOptions<TArgs, E> = {},\n): (...args: TArgs) => Promise<Result<TOutput, E>> {\n const { errorCode, mapError, schema, validate } = options;\n\n return async (...args: TArgs): Promise<Result<TOutput, E>> => {\n try {\n let effectiveArgs = args;\n\n if (schema) {\n const parsed = schema.safeParse(args[0]);\n if (!parsed.success) {\n const issueMessage =\n parsed.error?.issues?.[0]?.message ||\n parsed.error?.message ||\n \"Invalid input\";\n return err(\n mapError ? mapError(issueMessage) : (issueMessage as unknown as E),\n errorCode ?? \"VALIDATION_ERROR\",\n );\n }\n effectiveArgs = [parsed.data, ...args.slice(1)] as TArgs;\n }\n\n if (validate) {\n const validationResult = validate(...effectiveArgs);\n if (isResult(validationResult)) {\n if (isErr(validationResult)) {\n return validationResult as ErrorResult<E>;\n }\n } else if (validationResult === false) {\n return err(\n mapError\n ? mapError(\"Validation failed\")\n : (\"Validation failed\" as unknown as E),\n errorCode ?? \"VALIDATION_ERROR\",\n );\n } else if (\n typeof validationResult === \"string\" &&\n validationResult.length > 0\n ) {\n return err(\n mapError\n ? mapError(validationResult)\n : (validationResult as unknown as E),\n errorCode ?? \"VALIDATION_ERROR\",\n );\n }\n }\n\n const output = await handler(...effectiveArgs);\n if (isResult(output)) {\n return output as Result<TOutput, E>;\n }\n return ok(output as TOutput);\n } catch (error) {\n return err(mapCaught(error, mapError), errorCode);\n }\n };\n}\n"]}
@@ -0,0 +1,25 @@
1
+ import { type CSSProperties, type ReactNode } from "react";
2
+ export interface ThemeSpec<S extends string = string> {
3
+ readonly id: string;
4
+ readonly _slots?: S;
5
+ }
6
+ export interface ThemeConfig<S extends string> {
7
+ slots: Readonly<Record<S, string>>;
8
+ styles?: Readonly<Partial<Record<S, CSSProperties>>>;
9
+ }
10
+ export interface ResolvedTheme<S extends string> {
11
+ readonly slots: Readonly<Record<S, string>>;
12
+ readonly styles: Readonly<Partial<Record<S, CSSProperties>>>;
13
+ }
14
+ export interface ThemeEntry {
15
+ readonly id: string;
16
+ readonly config: ThemeConfig<string>;
17
+ }
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, }: {
21
+ children?: ReactNode;
22
+ 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>;
25
+ //# sourceMappingURL=theme.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../src/theme.tsx"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,aAAa,EAClB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAEf,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;AASD,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"}
package/dist/theme.js ADDED
@@ -0,0 +1,44 @@
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. Add its theme file to src/config/ and list it in src/config/index.ts.`
34
+ );
35
+ }
36
+ return {
37
+ slots: config.slots,
38
+ styles: config.styles ?? {}
39
+ };
40
+ }
41
+
42
+ export { ThemeProvider, defineTheme, defineThemeSpec, useTheme };
43
+ //# sourceMappingURL=theme.js.map
44
+ //# sourceMappingURL=theme.js.map
@@ -0,0 +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;AAIA,IAAM,KAAA,uBAAuD,GAAA,EAAI;AACjE,IAAM,YAAA,GAAe,wBAAA,CAEnB,cAAA,EAAgB,KAAK,CAAA;AAEhB,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,mFAAA;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 createContext,\n createElement,\n useContext,\n type CSSProperties,\n type ReactNode,\n} from \"react\";\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\nimport { getOrCreateGlobalContext } from \"@/kernel/context-registry\";\n\nconst EMPTY: ReadonlyMap<string, ThemeEntry[\"config\"]> = new Map();\nconst ThemeContext = getOrCreateGlobalContext<\n ReadonlyMap<string, ThemeEntry[\"config\"]>\n>(\"ThemeContext\", EMPTY);\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. Add its theme file to src/config/ and list it in src/config/index.ts.`,\n );\n }\n return {\n slots: config.slots,\n styles: config.styles ?? {},\n } as ResolvedTheme<S>;\n}\n"]}
@@ -0,0 +1,3 @@
1
+ export * from "./tokens";
2
+ export * from "./motion";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tokens/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC"}
@@ -0,0 +1,325 @@
1
+ // src/tokens/tokens.ts
2
+ var Z_INDEX = Object.freeze({
3
+ BACKGROUND: 0,
4
+ DOCK_BACKDROP: 100,
5
+ DOCK: 110,
6
+ NOTIFICATION: 120,
7
+ MODAL_BACKDROP: 130,
8
+ MODAL: 140,
9
+ SELECT: 150,
10
+ LOADING: 160,
11
+ ERROR_OVERLAY: 170,
12
+ CONTEXT_MENU_BACKDROP: 180,
13
+ CONTEXT_MENU: 190,
14
+ TOOLTIP: 200,
15
+ UI_ELEMENT: 10,
16
+ DOCK_CARD_BACKGROUND: 0,
17
+ DOCK_CARD_CONTENT: 10,
18
+ DOCK_CARD_STACK_BASE: 10,
19
+ DOCK_CARD_BADGE: 20,
20
+ DOCK_CARD_MEDIA: 30,
21
+ DOCK_BREADCRUMBS: 10,
22
+ DOCK_SURFACE_CONTROL: 10,
23
+ DOCK_SURFACE_POPOVER: 30,
24
+ DOCK_SURFACE_CENTER: 0,
25
+ MODAL_FRAME: 1,
26
+ MODAL_STICKY_HEADER: 10
27
+ });
28
+ var SURFACE_CLASSES = Object.freeze({
29
+ description: "text-white/70",
30
+ icon: "bg-white/10 text-white",
31
+ surface: "bg-black/60 ring-1 ring-inset ring-white/10",
32
+ title: "text-white"
33
+ });
34
+ var ACTION_TONE_CLASS = "bg-primary/10 text-primary hover:bg-primary hover:text-black";
35
+
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
+ var REDUCED_MOTION_TRANSITION = Object.freeze({
112
+ duration: DURATION_TOKENS.INSTANT,
113
+ ease: "linear"
114
+ });
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
+ function tween(duration, ease) {
122
+ return Object.freeze({ type: "tween", duration, ease });
123
+ }
124
+ function safeNumber(value, fallback) {
125
+ const source = value && typeof value === "object" && "get" in value && typeof value.get === "function" ? value.get() : value;
126
+ const number = Number.parseFloat(String(source));
127
+ return Number.isFinite(number) ? number : fallback;
128
+ }
129
+ function gpuTransform(y = 0, scale = 1, x = 0) {
130
+ const translateY = Math.round(safeNumber(y, 0));
131
+ const translateX = Math.round(safeNumber(x, 0));
132
+ const scaleValue = Math.round(safeNumber(scale, 1) * 1e3) / 1e3;
133
+ return `translate3d(${translateX}px, ${translateY}px, 0) scale(${scaleValue})`;
134
+ }
135
+ function durationForDistance(distancePx, {
136
+ base = DURATION_TOKENS.FAST,
137
+ min = DURATION_TOKENS.MICRO,
138
+ max = DURATION_TOKENS.SLOW,
139
+ reference = 320,
140
+ gain = 0.22
141
+ } = {}) {
142
+ const distance = Math.abs(Number(distancePx) || 0);
143
+ const safeMin = Math.max(0, min);
144
+ const safeMax = Math.max(safeMin, max);
145
+ const safeReference = Math.max(1, reference);
146
+ const duration = base + Math.sqrt(distance / safeReference) * gain;
147
+ return Math.min(safeMax, Math.max(safeMin, duration));
148
+ }
149
+ function surfaceResizeTransition(distancePx, {
150
+ base = DURATION_TOKENS.FAST,
151
+ min = DURATION_TOKENS.MICRO,
152
+ max = DURATION_TOKENS.SLOW,
153
+ reference = 320,
154
+ gain = 0.22,
155
+ ease = EASING_CURVES.IN_OUT_CUBIC
156
+ } = {}) {
157
+ return tween(
158
+ durationForDistance(distancePx, { base, min, max, reference, gain }),
159
+ ease
160
+ );
161
+ }
162
+ 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
+ } = {}) {
168
+ return Object.freeze({
169
+ enter: tween(duration, enterEase),
170
+ exit: tween(exitDuration, exitEase)
171
+ });
172
+ }
173
+ function contentSwap({
174
+ travel = 6,
175
+ exitTravel = travel * 0.7,
176
+ enterScale = 0.99,
177
+ exitScale = 0.99,
178
+ ...transitionOptions
179
+ } = {}) {
180
+ const transitions = contentSwapTransitions(transitionOptions);
181
+ return Object.freeze({
182
+ hidden: Object.freeze({
183
+ opacity: 0,
184
+ transform: gpuTransform(travel, enterScale)
185
+ }),
186
+ visible: Object.freeze({
187
+ opacity: 1,
188
+ transform: gpuTransform(0),
189
+ transition: transitions.enter
190
+ }),
191
+ exit: Object.freeze({
192
+ opacity: 0,
193
+ transform: gpuTransform(-exitTravel, exitScale),
194
+ transition: transitions.exit
195
+ })
196
+ });
197
+ }
198
+ function overlaySurface({
199
+ travel = 16,
200
+ exitTravel = travel * 0.5,
201
+ enterScale = 0.97,
202
+ exitScale = 0.985,
203
+ distance,
204
+ 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));
210
+ const transitions = contentSwapTransitions({
211
+ duration: enterDuration,
212
+ exitDuration: exitDuration ?? enterDuration * 0.68,
213
+ enterEase,
214
+ exitEase
215
+ });
216
+ return Object.freeze({
217
+ hidden: Object.freeze({
218
+ opacity: 0,
219
+ transform: gpuTransform(travel, enterScale)
220
+ }),
221
+ visible: Object.freeze({
222
+ opacity: 1,
223
+ transform: gpuTransform(0),
224
+ transition: transitions.enter
225
+ }),
226
+ exit: Object.freeze({
227
+ opacity: 0,
228
+ transform: gpuTransform(exitTravel, exitScale),
229
+ transition: transitions.exit
230
+ })
231
+ });
232
+ }
233
+ function staggerDelay(index, { base = 0.028, cap = 0.16, exponent = 0.82 } = {}) {
234
+ const safeIndex = Math.max(0, Number(index) || 0);
235
+ return Math.min(cap, base * Math.pow(safeIndex, exponent));
236
+ }
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
+ 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
+ } = {}) {
272
+ const transitions = contentSwapTransitions({
273
+ duration,
274
+ exitDuration,
275
+ enterEase,
276
+ exitEase
277
+ });
278
+ return Object.freeze({
279
+ hidden: Object.freeze({ opacity: 0, transform: gpuTransform(0, 0.96) }),
280
+ visible: Object.freeze({
281
+ opacity: 1,
282
+ transform: gpuTransform(0),
283
+ transition: transitions.enter
284
+ }),
285
+ exit: Object.freeze({
286
+ opacity: 0,
287
+ transform: gpuTransform(0, 0.96),
288
+ transition: transitions.exit
289
+ })
290
+ });
291
+ }
292
+ function press({
293
+ tapScale = TAP_SCALE_SUBTLE,
294
+ spring = SPRING_PRESETS.MICRO
295
+ } = {}) {
296
+ return Object.freeze({
297
+ variants: Object.freeze({
298
+ idle: Object.freeze({ transform: gpuTransform(0, 1) }),
299
+ hover: Object.freeze({ transform: gpuTransform(0, 1) }),
300
+ tap: Object.freeze({ transform: gpuTransform(0, tapScale) })
301
+ }),
302
+ transition: Object.freeze({ type: "spring", ...spring })
303
+ });
304
+ }
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]
313
+ }
314
+ } = {}) {
315
+ return Object.freeze({
316
+ constraints: Object.freeze(constraints),
317
+ elastic: Object.freeze(elastic),
318
+ thresholds: Object.freeze(thresholds),
319
+ interpolation: Object.freeze(interpolation)
320
+ });
321
+ }
322
+
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 };
324
+ //# sourceMappingURL=index.js.map
325
+ //# sourceMappingURL=index.js.map
@@ -0,0 +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"]}