@usels/core 0.0.1

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 (341) hide show
  1. package/README.md +21 -0
  2. package/dist/browser/useEventListener/index.d.mts +56 -0
  3. package/dist/browser/useEventListener/index.d.ts +56 -0
  4. package/dist/browser/useEventListener/index.js +112 -0
  5. package/dist/browser/useEventListener/index.js.map +1 -0
  6. package/dist/browser/useEventListener/index.mjs +88 -0
  7. package/dist/browser/useEventListener/index.mjs.map +1 -0
  8. package/dist/browser/useMediaQuery/demo.d.mts +5 -0
  9. package/dist/browser/useMediaQuery/demo.d.ts +5 -0
  10. package/dist/browser/useMediaQuery/demo.js +83 -0
  11. package/dist/browser/useMediaQuery/demo.js.map +1 -0
  12. package/dist/browser/useMediaQuery/demo.mjs +63 -0
  13. package/dist/browser/useMediaQuery/demo.mjs.map +1 -0
  14. package/dist/browser/useMediaQuery/index.d.mts +11 -0
  15. package/dist/browser/useMediaQuery/index.d.ts +11 -0
  16. package/dist/browser/useMediaQuery/index.js +89 -0
  17. package/dist/browser/useMediaQuery/index.js.map +1 -0
  18. package/dist/browser/useMediaQuery/index.mjs +64 -0
  19. package/dist/browser/useMediaQuery/index.mjs.map +1 -0
  20. package/dist/components/Auto/index.d.mts +33 -0
  21. package/dist/components/Auto/index.d.ts +33 -0
  22. package/dist/components/Auto/index.js +66 -0
  23. package/dist/components/Auto/index.js.map +1 -0
  24. package/dist/components/Auto/index.mjs +34 -0
  25. package/dist/components/Auto/index.mjs.map +1 -0
  26. package/dist/elements/useDocumentVisibility/demo.d.mts +5 -0
  27. package/dist/elements/useDocumentVisibility/demo.d.ts +5 -0
  28. package/dist/elements/useDocumentVisibility/demo.js +130 -0
  29. package/dist/elements/useDocumentVisibility/demo.js.map +1 -0
  30. package/dist/elements/useDocumentVisibility/demo.mjs +114 -0
  31. package/dist/elements/useDocumentVisibility/demo.mjs.map +1 -0
  32. package/dist/elements/useDocumentVisibility/index.d.mts +5 -0
  33. package/dist/elements/useDocumentVisibility/index.d.ts +5 -0
  34. package/dist/elements/useDocumentVisibility/index.js +45 -0
  35. package/dist/elements/useDocumentVisibility/index.js.map +1 -0
  36. package/dist/elements/useDocumentVisibility/index.mjs +21 -0
  37. package/dist/elements/useDocumentVisibility/index.mjs.map +1 -0
  38. package/dist/elements/useElementBounding/demo.d.mts +5 -0
  39. package/dist/elements/useElementBounding/demo.d.ts +5 -0
  40. package/dist/elements/useElementBounding/demo.js +87 -0
  41. package/dist/elements/useElementBounding/demo.js.map +1 -0
  42. package/dist/elements/useElementBounding/demo.mjs +67 -0
  43. package/dist/elements/useElementBounding/demo.mjs.map +1 -0
  44. package/dist/elements/useElementBounding/index.d.mts +46 -0
  45. package/dist/elements/useElementBounding/index.d.ts +46 -0
  46. package/dist/elements/useElementBounding/index.js +122 -0
  47. package/dist/elements/useElementBounding/index.js.map +1 -0
  48. package/dist/elements/useElementBounding/index.mjs +98 -0
  49. package/dist/elements/useElementBounding/index.mjs.map +1 -0
  50. package/dist/elements/useElementSize/demo.d.mts +5 -0
  51. package/dist/elements/useElementSize/demo.d.ts +5 -0
  52. package/dist/elements/useElementSize/demo.js +83 -0
  53. package/dist/elements/useElementSize/demo.js.map +1 -0
  54. package/dist/elements/useElementSize/demo.mjs +63 -0
  55. package/dist/elements/useElementSize/demo.mjs.map +1 -0
  56. package/dist/elements/useElementSize/index.d.mts +34 -0
  57. package/dist/elements/useElementSize/index.d.ts +34 -0
  58. package/dist/elements/useElementSize/index.js +85 -0
  59. package/dist/elements/useElementSize/index.js.map +1 -0
  60. package/dist/elements/useElementSize/index.mjs +61 -0
  61. package/dist/elements/useElementSize/index.mjs.map +1 -0
  62. package/dist/elements/useElementVisibility/demo.d.mts +5 -0
  63. package/dist/elements/useElementVisibility/demo.d.ts +5 -0
  64. package/dist/elements/useElementVisibility/demo.js +110 -0
  65. package/dist/elements/useElementVisibility/demo.js.map +1 -0
  66. package/dist/elements/useElementVisibility/demo.mjs +90 -0
  67. package/dist/elements/useElementVisibility/demo.mjs.map +1 -0
  68. package/dist/elements/useElementVisibility/index.d.mts +43 -0
  69. package/dist/elements/useElementVisibility/index.d.ts +43 -0
  70. package/dist/elements/useElementVisibility/index.js +58 -0
  71. package/dist/elements/useElementVisibility/index.js.map +1 -0
  72. package/dist/elements/useElementVisibility/index.mjs +34 -0
  73. package/dist/elements/useElementVisibility/index.mjs.map +1 -0
  74. package/dist/elements/useIntersectionObserver/demo.d.mts +5 -0
  75. package/dist/elements/useIntersectionObserver/demo.d.ts +5 -0
  76. package/dist/elements/useIntersectionObserver/demo.js +173 -0
  77. package/dist/elements/useIntersectionObserver/demo.js.map +1 -0
  78. package/dist/elements/useIntersectionObserver/demo.mjs +153 -0
  79. package/dist/elements/useIntersectionObserver/demo.mjs.map +1 -0
  80. package/dist/elements/useIntersectionObserver/index.d.mts +47 -0
  81. package/dist/elements/useIntersectionObserver/index.d.ts +47 -0
  82. package/dist/elements/useIntersectionObserver/index.js +111 -0
  83. package/dist/elements/useIntersectionObserver/index.js.map +1 -0
  84. package/dist/elements/useIntersectionObserver/index.mjs +87 -0
  85. package/dist/elements/useIntersectionObserver/index.mjs.map +1 -0
  86. package/dist/elements/useMouseInElement/demo.d.mts +5 -0
  87. package/dist/elements/useMouseInElement/demo.d.ts +5 -0
  88. package/dist/elements/useMouseInElement/demo.js +104 -0
  89. package/dist/elements/useMouseInElement/demo.js.map +1 -0
  90. package/dist/elements/useMouseInElement/demo.mjs +84 -0
  91. package/dist/elements/useMouseInElement/demo.mjs.map +1 -0
  92. package/dist/elements/useMouseInElement/index.d.mts +56 -0
  93. package/dist/elements/useMouseInElement/index.d.ts +56 -0
  94. package/dist/elements/useMouseInElement/index.js +148 -0
  95. package/dist/elements/useMouseInElement/index.js.map +1 -0
  96. package/dist/elements/useMouseInElement/index.mjs +124 -0
  97. package/dist/elements/useMouseInElement/index.mjs.map +1 -0
  98. package/dist/elements/useMutationObserver/demo.d.mts +5 -0
  99. package/dist/elements/useMutationObserver/demo.d.ts +5 -0
  100. package/dist/elements/useMutationObserver/demo.js +240 -0
  101. package/dist/elements/useMutationObserver/demo.js.map +1 -0
  102. package/dist/elements/useMutationObserver/demo.mjs +220 -0
  103. package/dist/elements/useMutationObserver/demo.mjs.map +1 -0
  104. package/dist/elements/useMutationObserver/index.d.mts +15 -0
  105. package/dist/elements/useMutationObserver/index.d.ts +15 -0
  106. package/dist/elements/useMutationObserver/index.js +69 -0
  107. package/dist/elements/useMutationObserver/index.js.map +1 -0
  108. package/dist/elements/useMutationObserver/index.mjs +45 -0
  109. package/dist/elements/useMutationObserver/index.mjs.map +1 -0
  110. package/dist/elements/useParentElement/demo.d.mts +5 -0
  111. package/dist/elements/useParentElement/demo.d.ts +5 -0
  112. package/dist/elements/useParentElement/demo.js +132 -0
  113. package/dist/elements/useParentElement/demo.js.map +1 -0
  114. package/dist/elements/useParentElement/demo.mjs +112 -0
  115. package/dist/elements/useParentElement/demo.mjs.map +1 -0
  116. package/dist/elements/useParentElement/index.d.mts +7 -0
  117. package/dist/elements/useParentElement/index.d.ts +7 -0
  118. package/dist/elements/useParentElement/index.js +47 -0
  119. package/dist/elements/useParentElement/index.js.map +1 -0
  120. package/dist/elements/useParentElement/index.mjs +23 -0
  121. package/dist/elements/useParentElement/index.mjs.map +1 -0
  122. package/dist/elements/useRef$/index.js +89 -0
  123. package/dist/elements/useRef$/index.js.map +1 -0
  124. package/dist/elements/useRef$/index.mjs +62 -0
  125. package/dist/elements/useRef$/index.mjs.map +1 -0
  126. package/dist/elements/useRef_/index.d.mts +60 -0
  127. package/dist/elements/useRef_/index.d.ts +60 -0
  128. package/dist/elements/useResizeObserver/demo.d.mts +5 -0
  129. package/dist/elements/useResizeObserver/demo.d.ts +5 -0
  130. package/dist/elements/useResizeObserver/demo.js +90 -0
  131. package/dist/elements/useResizeObserver/demo.js.map +1 -0
  132. package/dist/elements/useResizeObserver/demo.mjs +70 -0
  133. package/dist/elements/useResizeObserver/demo.mjs.map +1 -0
  134. package/dist/elements/useResizeObserver/index.d.mts +36 -0
  135. package/dist/elements/useResizeObserver/index.d.ts +36 -0
  136. package/dist/elements/useResizeObserver/index.js +74 -0
  137. package/dist/elements/useResizeObserver/index.js.map +1 -0
  138. package/dist/elements/useResizeObserver/index.mjs +49 -0
  139. package/dist/elements/useResizeObserver/index.mjs.map +1 -0
  140. package/dist/elements/useWindowFocus/demo.d.mts +5 -0
  141. package/dist/elements/useWindowFocus/demo.d.ts +5 -0
  142. package/dist/elements/useWindowFocus/demo.js +104 -0
  143. package/dist/elements/useWindowFocus/demo.js.map +1 -0
  144. package/dist/elements/useWindowFocus/demo.mjs +84 -0
  145. package/dist/elements/useWindowFocus/demo.mjs.map +1 -0
  146. package/dist/elements/useWindowFocus/index.d.mts +5 -0
  147. package/dist/elements/useWindowFocus/index.d.ts +5 -0
  148. package/dist/elements/useWindowFocus/index.js +42 -0
  149. package/dist/elements/useWindowFocus/index.js.map +1 -0
  150. package/dist/elements/useWindowFocus/index.mjs +18 -0
  151. package/dist/elements/useWindowFocus/index.mjs.map +1 -0
  152. package/dist/elements/useWindowSize/demo.d.mts +5 -0
  153. package/dist/elements/useWindowSize/demo.d.ts +5 -0
  154. package/dist/elements/useWindowSize/demo.js +79 -0
  155. package/dist/elements/useWindowSize/demo.js.map +1 -0
  156. package/dist/elements/useWindowSize/demo.mjs +59 -0
  157. package/dist/elements/useWindowSize/demo.mjs.map +1 -0
  158. package/dist/elements/useWindowSize/index.d.mts +17 -0
  159. package/dist/elements/useWindowSize/index.d.ts +17 -0
  160. package/dist/elements/useWindowSize/index.js +96 -0
  161. package/dist/elements/useWindowSize/index.js.map +1 -0
  162. package/dist/elements/useWindowSize/index.mjs +76 -0
  163. package/dist/elements/useWindowSize/index.mjs.map +1 -0
  164. package/dist/function/get/index.d.mts +45 -0
  165. package/dist/function/get/index.d.ts +45 -0
  166. package/dist/function/get/index.js +39 -0
  167. package/dist/function/get/index.js.map +1 -0
  168. package/dist/function/get/index.mjs +15 -0
  169. package/dist/function/get/index.mjs.map +1 -0
  170. package/dist/function/peek/index.d.mts +46 -0
  171. package/dist/function/peek/index.d.ts +46 -0
  172. package/dist/function/peek/index.js +39 -0
  173. package/dist/function/peek/index.js.map +1 -0
  174. package/dist/function/peek/index.mjs +15 -0
  175. package/dist/function/peek/index.mjs.map +1 -0
  176. package/dist/function/useMayObservableOptions/index.d.mts +59 -0
  177. package/dist/function/useMayObservableOptions/index.d.ts +59 -0
  178. package/dist/function/useMayObservableOptions/index.js +109 -0
  179. package/dist/function/useMayObservableOptions/index.js.map +1 -0
  180. package/dist/function/useMayObservableOptions/index.mjs +88 -0
  181. package/dist/function/useMayObservableOptions/index.mjs.map +1 -0
  182. package/dist/function/useSupported/index.d.mts +6 -0
  183. package/dist/function/useSupported/index.d.ts +6 -0
  184. package/dist/function/useSupported/index.js +37 -0
  185. package/dist/function/useSupported/index.js.map +1 -0
  186. package/dist/function/useSupported/index.mjs +13 -0
  187. package/dist/function/useSupported/index.mjs.map +1 -0
  188. package/dist/function/useWhenMounted/index.d.mts +6 -0
  189. package/dist/function/useWhenMounted/index.d.ts +6 -0
  190. package/dist/function/useWhenMounted/index.js +37 -0
  191. package/dist/function/useWhenMounted/index.js.map +1 -0
  192. package/dist/function/useWhenMounted/index.mjs +13 -0
  193. package/dist/function/useWhenMounted/index.mjs.map +1 -0
  194. package/dist/index.d.mts +24 -0
  195. package/dist/index.d.ts +24 -0
  196. package/dist/index.js +63 -0
  197. package/dist/index.js.map +1 -0
  198. package/dist/index.mjs +22 -0
  199. package/dist/index.mjs.map +1 -0
  200. package/dist/sensors/useScroll/demo.d.mts +5 -0
  201. package/dist/sensors/useScroll/demo.d.ts +5 -0
  202. package/dist/sensors/useScroll/demo.js +122 -0
  203. package/dist/sensors/useScroll/demo.js.map +1 -0
  204. package/dist/sensors/useScroll/demo.mjs +102 -0
  205. package/dist/sensors/useScroll/demo.mjs.map +1 -0
  206. package/dist/sensors/useScroll/index.d.mts +42 -0
  207. package/dist/sensors/useScroll/index.d.ts +42 -0
  208. package/dist/sensors/useScroll/index.js +149 -0
  209. package/dist/sensors/useScroll/index.js.map +1 -0
  210. package/dist/sensors/useScroll/index.mjs +125 -0
  211. package/dist/sensors/useScroll/index.mjs.map +1 -0
  212. package/dist/sensors/useWindowScroll/demo.d.mts +5 -0
  213. package/dist/sensors/useWindowScroll/demo.d.ts +5 -0
  214. package/dist/sensors/useWindowScroll/demo.js +85 -0
  215. package/dist/sensors/useWindowScroll/demo.js.map +1 -0
  216. package/dist/sensors/useWindowScroll/demo.mjs +65 -0
  217. package/dist/sensors/useWindowScroll/demo.mjs.map +1 -0
  218. package/dist/sensors/useWindowScroll/index.d.mts +9 -0
  219. package/dist/sensors/useWindowScroll/index.d.ts +9 -0
  220. package/dist/sensors/useWindowScroll/index.js +36 -0
  221. package/dist/sensors/useWindowScroll/index.js.map +1 -0
  222. package/dist/sensors/useWindowScroll/index.mjs +12 -0
  223. package/dist/sensors/useWindowScroll/index.mjs.map +1 -0
  224. package/dist/shared/configurable.d.mts +21 -0
  225. package/dist/shared/configurable.d.ts +21 -0
  226. package/dist/shared/configurable.js +39 -0
  227. package/dist/shared/configurable.js.map +1 -0
  228. package/dist/shared/configurable.mjs +12 -0
  229. package/dist/shared/configurable.mjs.map +1 -0
  230. package/dist/shared/index.d.mts +4 -0
  231. package/dist/shared/index.d.ts +4 -0
  232. package/dist/shared/index.js +31 -0
  233. package/dist/shared/index.js.map +1 -0
  234. package/dist/shared/index.mjs +7 -0
  235. package/dist/shared/index.mjs.map +1 -0
  236. package/dist/shared/normalizeTargets/index.d.mts +21 -0
  237. package/dist/shared/normalizeTargets/index.d.ts +21 -0
  238. package/dist/shared/normalizeTargets/index.js +36 -0
  239. package/dist/shared/normalizeTargets/index.js.map +1 -0
  240. package/dist/shared/normalizeTargets/index.mjs +12 -0
  241. package/dist/shared/normalizeTargets/index.mjs.map +1 -0
  242. package/dist/shared/utils.d.mts +15 -0
  243. package/dist/shared/utils.d.ts +15 -0
  244. package/dist/shared/utils.js +87 -0
  245. package/dist/shared/utils.js.map +1 -0
  246. package/dist/shared/utils.mjs +52 -0
  247. package/dist/shared/utils.mjs.map +1 -0
  248. package/dist/types.d.mts +52 -0
  249. package/dist/types.d.ts +52 -0
  250. package/dist/types.js +17 -0
  251. package/dist/types.js.map +1 -0
  252. package/dist/types.mjs +1 -0
  253. package/dist/types.mjs.map +1 -0
  254. package/package.json +54 -0
  255. package/src/browser/useEventListener/index.md +109 -0
  256. package/src/browser/useEventListener/index.spec.ts +611 -0
  257. package/src/browser/useEventListener/index.ts +242 -0
  258. package/src/browser/useMediaQuery/demo.tsx +63 -0
  259. package/src/browser/useMediaQuery/index.md +43 -0
  260. package/src/browser/useMediaQuery/index.spec.ts +267 -0
  261. package/src/browser/useMediaQuery/index.ts +96 -0
  262. package/src/components/Auto/index.tsx +65 -0
  263. package/src/elements/useDocumentVisibility/demo.tsx +111 -0
  264. package/src/elements/useDocumentVisibility/index.md +54 -0
  265. package/src/elements/useDocumentVisibility/index.spec.ts +114 -0
  266. package/src/elements/useDocumentVisibility/index.ts +26 -0
  267. package/src/elements/useElementBounding/demo.tsx +68 -0
  268. package/src/elements/useElementBounding/index.md +64 -0
  269. package/src/elements/useElementBounding/index.ts +159 -0
  270. package/src/elements/useElementSize/demo.tsx +53 -0
  271. package/src/elements/useElementSize/index.md +65 -0
  272. package/src/elements/useElementSize/index.spec.ts +295 -0
  273. package/src/elements/useElementSize/index.ts +100 -0
  274. package/src/elements/useElementVisibility/deep-observable-pattern.spec.ts +453 -0
  275. package/src/elements/useElementVisibility/demo.tsx +97 -0
  276. package/src/elements/useElementVisibility/index.md +98 -0
  277. package/src/elements/useElementVisibility/index.spec.ts +227 -0
  278. package/src/elements/useElementVisibility/index.ts +78 -0
  279. package/src/elements/useIntersectionObserver/demo.tsx +180 -0
  280. package/src/elements/useIntersectionObserver/index.md +99 -0
  281. package/src/elements/useIntersectionObserver/index.spec.ts +482 -0
  282. package/src/elements/useIntersectionObserver/index.ts +149 -0
  283. package/src/elements/useMouseInElement/demo.tsx +88 -0
  284. package/src/elements/useMouseInElement/index.md +76 -0
  285. package/src/elements/useMouseInElement/index.spec.ts +398 -0
  286. package/src/elements/useMouseInElement/index.ts +209 -0
  287. package/src/elements/useMutationObserver/demo.tsx +270 -0
  288. package/src/elements/useMutationObserver/index.md +99 -0
  289. package/src/elements/useMutationObserver/index.spec.ts +421 -0
  290. package/src/elements/useMutationObserver/index.ts +66 -0
  291. package/src/elements/useParentElement/demo.tsx +120 -0
  292. package/src/elements/useParentElement/index.md +67 -0
  293. package/src/elements/useParentElement/index.spec.ts +208 -0
  294. package/src/elements/useParentElement/index.ts +35 -0
  295. package/src/elements/useRef$/index.md +62 -0
  296. package/src/elements/useRef$/index.spec.ts +205 -0
  297. package/src/elements/useRef$/index.ts +137 -0
  298. package/src/elements/useRef$/useImperativeHandle.spec.ts +339 -0
  299. package/src/elements/useResizeObserver/demo.tsx +62 -0
  300. package/src/elements/useResizeObserver/index.md +51 -0
  301. package/src/elements/useResizeObserver/index.spec.ts +312 -0
  302. package/src/elements/useResizeObserver/index.ts +106 -0
  303. package/src/elements/useWindowFocus/demo.tsx +79 -0
  304. package/src/elements/useWindowFocus/index.md +38 -0
  305. package/src/elements/useWindowFocus/index.spec.ts +103 -0
  306. package/src/elements/useWindowFocus/index.ts +21 -0
  307. package/src/elements/useWindowSize/demo.tsx +51 -0
  308. package/src/elements/useWindowSize/index.md +55 -0
  309. package/src/elements/useWindowSize/index.spec.ts +310 -0
  310. package/src/elements/useWindowSize/index.ts +107 -0
  311. package/src/function/get/index.md +25 -0
  312. package/src/function/get/index.spec.ts +87 -0
  313. package/src/function/get/index.ts +70 -0
  314. package/src/function/peek/index.spec.ts +97 -0
  315. package/src/function/peek/index.ts +69 -0
  316. package/src/function/useMayObservableOptions/index.spec.ts +521 -0
  317. package/src/function/useMayObservableOptions/index.ts +173 -0
  318. package/src/function/useSupported/index.md +43 -0
  319. package/src/function/useSupported/index.spec.ts +116 -0
  320. package/src/function/useSupported/index.ts +14 -0
  321. package/src/function/useWhenMounted/index.md +25 -0
  322. package/src/function/useWhenMounted/index.spec.ts +120 -0
  323. package/src/function/useWhenMounted/index.ts +16 -0
  324. package/src/index.ts +25 -0
  325. package/src/sensors/useScroll/demo.tsx +103 -0
  326. package/src/sensors/useScroll/index.md +117 -0
  327. package/src/sensors/useScroll/index.spec.ts +678 -0
  328. package/src/sensors/useScroll/index.ts +201 -0
  329. package/src/sensors/useWindowScroll/demo.tsx +78 -0
  330. package/src/sensors/useWindowScroll/index.md +98 -0
  331. package/src/sensors/useWindowScroll/index.spec.ts +69 -0
  332. package/src/sensors/useWindowScroll/index.ts +11 -0
  333. package/src/shared/configurable.ts +35 -0
  334. package/src/shared/index.ts +4 -0
  335. package/src/shared/normalizeTargets/index.spec.ts +76 -0
  336. package/src/shared/normalizeTargets/index.ts +27 -0
  337. package/src/shared/utils.ts +67 -0
  338. package/src/types.ts +56 -0
  339. package/tsconfig.json +9 -0
  340. package/tsup.config.ts +10 -0
  341. package/vitest.config.ts +22 -0
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var normalizeTargets_exports = {};
20
+ __export(normalizeTargets_exports, {
21
+ normalizeTargets: () => normalizeTargets
22
+ });
23
+ module.exports = __toCommonJS(normalizeTargets_exports);
24
+ var import_useRef = require("../../elements/useRef$");
25
+ function normalizeTargets(target) {
26
+ if (target == null) return [];
27
+ const arr = Array.isArray(target) ? target : [target];
28
+ return arr.map((t) => {
29
+ return (0, import_useRef.getElement)(t);
30
+ }).filter((el) => el != null);
31
+ }
32
+ // Annotate the CommonJS export names for ESM import in node:
33
+ 0 && (module.exports = {
34
+ normalizeTargets
35
+ });
36
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/shared/normalizeTargets/index.ts"],"sourcesContent":["import { getElement, type MaybeElement } from \"../../elements/useRef$\";\n\n/**\n * Normalizes one or more observable-element targets into a plain Element[].\n *\n * - `Ref$<T>` — calls `.get()` and unwraps the OpaqueObject via `.valueOf()`\n * - `Observable<OpaqueObject<Element> | null>` — calls `.get()` and unwraps via `.valueOf()`\n * - `Document` / `Window` — filtered out (not an Element, handled by callers)\n * - `null` — filtered out\n *\n * When called inside `useObserve`, reading `.get()` registers observable\n * dependencies so the observer re-fires when a tracked target changes.\n *\n * Currently shared by useResizeObserver.\n * useIntersectionObserver, useMutationObserver will use this once implemented.\n */\nexport function normalizeTargets(\n target?: MaybeElement | MaybeElement[],\n): Element[] {\n if (target == null) return [];\n const arr = Array.isArray(target) ? target : [target];\n return arr\n .map((t) => {\n return getElement(t) as any;\n })\n .filter((el): el is Element => el != null);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAA8C;AAgBvC,SAAS,iBACd,QACW;AACX,MAAI,UAAU,KAAM,QAAO,CAAC;AAC5B,QAAM,MAAM,MAAM,QAAQ,MAAM,IAAI,SAAS,CAAC,MAAM;AACpD,SAAO,IACJ,IAAI,CAAC,MAAM;AACV,eAAO,0BAAW,CAAC;AAAA,EACrB,CAAC,EACA,OAAO,CAAC,OAAsB,MAAM,IAAI;AAC7C;","names":[]}
@@ -0,0 +1,12 @@
1
+ import { getElement } from "../../elements/useRef$";
2
+ function normalizeTargets(target) {
3
+ if (target == null) return [];
4
+ const arr = Array.isArray(target) ? target : [target];
5
+ return arr.map((t) => {
6
+ return getElement(t);
7
+ }).filter((el) => el != null);
8
+ }
9
+ export {
10
+ normalizeTargets
11
+ };
12
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/shared/normalizeTargets/index.ts"],"sourcesContent":["import { getElement, type MaybeElement } from \"../../elements/useRef$\";\n\n/**\n * Normalizes one or more observable-element targets into a plain Element[].\n *\n * - `Ref$<T>` — calls `.get()` and unwraps the OpaqueObject via `.valueOf()`\n * - `Observable<OpaqueObject<Element> | null>` — calls `.get()` and unwraps via `.valueOf()`\n * - `Document` / `Window` — filtered out (not an Element, handled by callers)\n * - `null` — filtered out\n *\n * When called inside `useObserve`, reading `.get()` registers observable\n * dependencies so the observer re-fires when a tracked target changes.\n *\n * Currently shared by useResizeObserver.\n * useIntersectionObserver, useMutationObserver will use this once implemented.\n */\nexport function normalizeTargets(\n target?: MaybeElement | MaybeElement[],\n): Element[] {\n if (target == null) return [];\n const arr = Array.isArray(target) ? target : [target];\n return arr\n .map((t) => {\n return getElement(t) as any;\n })\n .filter((el): el is Element => el != null);\n}\n"],"mappings":"AAAA,SAAS,kBAAqC;AAgBvC,SAAS,iBACd,QACW;AACX,MAAI,UAAU,KAAM,QAAO,CAAC;AAC5B,QAAM,MAAM,MAAM,QAAQ,MAAM,IAAI,SAAS,CAAC,MAAM;AACpD,SAAO,IACJ,IAAI,CAAC,MAAM;AACV,WAAO,WAAW,CAAC;AAAA,EACrB,CAAC,EACA,OAAO,CAAC,OAAsB,MAAM,IAAI;AAC7C;","names":[]}
@@ -0,0 +1,15 @@
1
+ declare const isClient: boolean;
2
+ declare const noop: () => void;
3
+ declare const clamp: (n: number, min: number, max: number) => number;
4
+ declare const isDef: <T>(val?: T) => val is T;
5
+ declare const notNullish: <T>(val?: T | null) => val is T;
6
+ declare const isObject: (val: unknown) => val is object;
7
+ declare const isIOS: boolean;
8
+ declare function toArray<T>(v: T | T[]): T[];
9
+ declare function objectPick<O extends object, T extends keyof O>(obj: O, keys: T[]): Pick<O, T>;
10
+ declare function objectOmit<O extends object, T extends keyof O>(obj: O, keys: T[]): Omit<O, T>;
11
+ declare function promiseTimeout(ms: number, throwOnTimeout?: boolean): Promise<void>;
12
+ declare function increaseWithUnit(target: number, delta: number): number;
13
+ declare function increaseWithUnit(target: string, delta: number): string;
14
+
15
+ export { clamp, increaseWithUnit, isClient, isDef, isIOS, isObject, noop, notNullish, objectOmit, objectPick, promiseTimeout, toArray };
@@ -0,0 +1,15 @@
1
+ declare const isClient: boolean;
2
+ declare const noop: () => void;
3
+ declare const clamp: (n: number, min: number, max: number) => number;
4
+ declare const isDef: <T>(val?: T) => val is T;
5
+ declare const notNullish: <T>(val?: T | null) => val is T;
6
+ declare const isObject: (val: unknown) => val is object;
7
+ declare const isIOS: boolean;
8
+ declare function toArray<T>(v: T | T[]): T[];
9
+ declare function objectPick<O extends object, T extends keyof O>(obj: O, keys: T[]): Pick<O, T>;
10
+ declare function objectOmit<O extends object, T extends keyof O>(obj: O, keys: T[]): Omit<O, T>;
11
+ declare function promiseTimeout(ms: number, throwOnTimeout?: boolean): Promise<void>;
12
+ declare function increaseWithUnit(target: number, delta: number): number;
13
+ declare function increaseWithUnit(target: string, delta: number): string;
14
+
15
+ export { clamp, increaseWithUnit, isClient, isDef, isIOS, isObject, noop, notNullish, objectOmit, objectPick, promiseTimeout, toArray };
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var utils_exports = {};
20
+ __export(utils_exports, {
21
+ clamp: () => clamp,
22
+ increaseWithUnit: () => increaseWithUnit,
23
+ isClient: () => isClient,
24
+ isDef: () => isDef,
25
+ isIOS: () => isIOS,
26
+ isObject: () => isObject,
27
+ noop: () => noop,
28
+ notNullish: () => notNullish,
29
+ objectOmit: () => objectOmit,
30
+ objectPick: () => objectPick,
31
+ promiseTimeout: () => promiseTimeout,
32
+ toArray: () => toArray
33
+ });
34
+ module.exports = __toCommonJS(utils_exports);
35
+ const isClient = typeof window !== "undefined" && typeof document !== "undefined";
36
+ const noop = () => {
37
+ };
38
+ const clamp = (n, min, max) => Math.min(max, Math.max(min, n));
39
+ const isDef = (val) => typeof val !== "undefined";
40
+ const notNullish = (val) => val != null;
41
+ const isObject = (val) => Object.prototype.toString.call(val) === "[object Object]";
42
+ const isIOS = isClient && /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;
43
+ function toArray(v) {
44
+ return Array.isArray(v) ? v : [v];
45
+ }
46
+ function objectPick(obj, keys) {
47
+ return keys.reduce(
48
+ (n, k) => {
49
+ if (k in obj) n[k] = obj[k];
50
+ return n;
51
+ },
52
+ {}
53
+ );
54
+ }
55
+ function objectOmit(obj, keys) {
56
+ return Object.fromEntries(
57
+ Object.entries(obj).filter(([k]) => !keys.includes(k))
58
+ );
59
+ }
60
+ function promiseTimeout(ms, throwOnTimeout = false) {
61
+ return new Promise(
62
+ (resolve, reject) => throwOnTimeout ? setTimeout(() => reject(new Error(`Timeout ${ms}ms`)), ms) : setTimeout(resolve, ms)
63
+ );
64
+ }
65
+ function increaseWithUnit(target, delta) {
66
+ if (typeof target === "number") return target + delta;
67
+ const match = target.match(/^(-?\d*\.?\d+)([a-z%]*)$/i);
68
+ if (!match) return target;
69
+ const [, num, unit] = match;
70
+ return `${Number(num) + delta}${unit}`;
71
+ }
72
+ // Annotate the CommonJS export names for ESM import in node:
73
+ 0 && (module.exports = {
74
+ clamp,
75
+ increaseWithUnit,
76
+ isClient,
77
+ isDef,
78
+ isIOS,
79
+ isObject,
80
+ noop,
81
+ notNullish,
82
+ objectOmit,
83
+ objectPick,
84
+ promiseTimeout,
85
+ toArray
86
+ });
87
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/shared/utils.ts"],"sourcesContent":["// ---------------------------------------------------------------------------\n// TIER 0-B: Shared pure utility functions (VueUse equivalents, no dependencies)\n// ---------------------------------------------------------------------------\n\nexport const isClient =\n typeof window !== \"undefined\" && typeof document !== \"undefined\";\n\nexport const noop = () => {};\n\nexport const clamp = (n: number, min: number, max: number) =>\n Math.min(max, Math.max(min, n));\n\nexport const isDef = <T>(val?: T): val is T => typeof val !== \"undefined\";\n\nexport const notNullish = <T>(val?: T | null): val is T => val != null;\n\nexport const isObject = (val: unknown): val is object =>\n Object.prototype.toString.call(val) === \"[object Object]\";\n\nexport const isIOS =\n /* #__PURE__ */ isClient &&\n /iPad|iPhone|iPod/.test(navigator.userAgent) &&\n !(window as any).MSStream;\n\nexport function toArray<T>(v: T | T[]): T[] {\n return Array.isArray(v) ? v : [v];\n}\n\nexport function objectPick<O extends object, T extends keyof O>(\n obj: O,\n keys: T[],\n): Pick<O, T> {\n return keys.reduce(\n (n, k) => {\n if (k in obj) n[k] = obj[k];\n return n;\n },\n {} as Pick<O, T>,\n );\n}\n\nexport function objectOmit<O extends object, T extends keyof O>(\n obj: O,\n keys: T[],\n): Omit<O, T> {\n return Object.fromEntries(\n Object.entries(obj).filter(([k]) => !keys.includes(k as T)),\n ) as Omit<O, T>;\n}\n\nexport function promiseTimeout(ms: number, throwOnTimeout = false): Promise<void> {\n return new Promise((resolve, reject) =>\n throwOnTimeout\n ? setTimeout(() => reject(new Error(`Timeout ${ms}ms`)), ms)\n : setTimeout(resolve, ms),\n );\n}\n\nexport function increaseWithUnit(target: number, delta: number): number;\nexport function increaseWithUnit(target: string, delta: number): string;\nexport function increaseWithUnit(target: number | string, delta: number): number | string {\n if (typeof target === \"number\") return target + delta;\n const match = target.match(/^(-?\\d*\\.?\\d+)([a-z%]*)$/i);\n if (!match) return target;\n const [, num, unit] = match;\n return `${Number(num) + delta}${unit}`;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIO,MAAM,WACX,OAAO,WAAW,eAAe,OAAO,aAAa;AAEhD,MAAM,OAAO,MAAM;AAAC;AAEpB,MAAM,QAAQ,CAAC,GAAW,KAAa,QAC5C,KAAK,IAAI,KAAK,KAAK,IAAI,KAAK,CAAC,CAAC;AAEzB,MAAM,QAAQ,CAAI,QAAsB,OAAO,QAAQ;AAEvD,MAAM,aAAa,CAAI,QAA6B,OAAO;AAE3D,MAAM,WAAW,CAAC,QACvB,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM;AAEnC,MAAM,QACK,YAChB,mBAAmB,KAAK,UAAU,SAAS,KAC3C,CAAE,OAAe;AAEZ,SAAS,QAAW,GAAiB;AAC1C,SAAO,MAAM,QAAQ,CAAC,IAAI,IAAI,CAAC,CAAC;AAClC;AAEO,SAAS,WACd,KACA,MACY;AACZ,SAAO,KAAK;AAAA,IACV,CAAC,GAAG,MAAM;AACR,UAAI,KAAK,IAAK,GAAE,CAAC,IAAI,IAAI,CAAC;AAC1B,aAAO;AAAA,IACT;AAAA,IACA,CAAC;AAAA,EACH;AACF;AAEO,SAAS,WACd,KACA,MACY;AACZ,SAAO,OAAO;AAAA,IACZ,OAAO,QAAQ,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,SAAS,CAAM,CAAC;AAAA,EAC5D;AACF;AAEO,SAAS,eAAe,IAAY,iBAAiB,OAAsB;AAChF,SAAO,IAAI;AAAA,IAAQ,CAAC,SAAS,WAC3B,iBACI,WAAW,MAAM,OAAO,IAAI,MAAM,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,IACzD,WAAW,SAAS,EAAE;AAAA,EAC5B;AACF;AAIO,SAAS,iBAAiB,QAAyB,OAAgC;AACxF,MAAI,OAAO,WAAW,SAAU,QAAO,SAAS;AAChD,QAAM,QAAQ,OAAO,MAAM,2BAA2B;AACtD,MAAI,CAAC,MAAO,QAAO;AACnB,QAAM,CAAC,EAAE,KAAK,IAAI,IAAI;AACtB,SAAO,GAAG,OAAO,GAAG,IAAI,KAAK,GAAG,IAAI;AACtC;","names":[]}
@@ -0,0 +1,52 @@
1
+ const isClient = typeof window !== "undefined" && typeof document !== "undefined";
2
+ const noop = () => {
3
+ };
4
+ const clamp = (n, min, max) => Math.min(max, Math.max(min, n));
5
+ const isDef = (val) => typeof val !== "undefined";
6
+ const notNullish = (val) => val != null;
7
+ const isObject = (val) => Object.prototype.toString.call(val) === "[object Object]";
8
+ const isIOS = isClient && /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;
9
+ function toArray(v) {
10
+ return Array.isArray(v) ? v : [v];
11
+ }
12
+ function objectPick(obj, keys) {
13
+ return keys.reduce(
14
+ (n, k) => {
15
+ if (k in obj) n[k] = obj[k];
16
+ return n;
17
+ },
18
+ {}
19
+ );
20
+ }
21
+ function objectOmit(obj, keys) {
22
+ return Object.fromEntries(
23
+ Object.entries(obj).filter(([k]) => !keys.includes(k))
24
+ );
25
+ }
26
+ function promiseTimeout(ms, throwOnTimeout = false) {
27
+ return new Promise(
28
+ (resolve, reject) => throwOnTimeout ? setTimeout(() => reject(new Error(`Timeout ${ms}ms`)), ms) : setTimeout(resolve, ms)
29
+ );
30
+ }
31
+ function increaseWithUnit(target, delta) {
32
+ if (typeof target === "number") return target + delta;
33
+ const match = target.match(/^(-?\d*\.?\d+)([a-z%]*)$/i);
34
+ if (!match) return target;
35
+ const [, num, unit] = match;
36
+ return `${Number(num) + delta}${unit}`;
37
+ }
38
+ export {
39
+ clamp,
40
+ increaseWithUnit,
41
+ isClient,
42
+ isDef,
43
+ isIOS,
44
+ isObject,
45
+ noop,
46
+ notNullish,
47
+ objectOmit,
48
+ objectPick,
49
+ promiseTimeout,
50
+ toArray
51
+ };
52
+ //# sourceMappingURL=utils.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/shared/utils.ts"],"sourcesContent":["// ---------------------------------------------------------------------------\n// TIER 0-B: Shared pure utility functions (VueUse equivalents, no dependencies)\n// ---------------------------------------------------------------------------\n\nexport const isClient =\n typeof window !== \"undefined\" && typeof document !== \"undefined\";\n\nexport const noop = () => {};\n\nexport const clamp = (n: number, min: number, max: number) =>\n Math.min(max, Math.max(min, n));\n\nexport const isDef = <T>(val?: T): val is T => typeof val !== \"undefined\";\n\nexport const notNullish = <T>(val?: T | null): val is T => val != null;\n\nexport const isObject = (val: unknown): val is object =>\n Object.prototype.toString.call(val) === \"[object Object]\";\n\nexport const isIOS =\n /* #__PURE__ */ isClient &&\n /iPad|iPhone|iPod/.test(navigator.userAgent) &&\n !(window as any).MSStream;\n\nexport function toArray<T>(v: T | T[]): T[] {\n return Array.isArray(v) ? v : [v];\n}\n\nexport function objectPick<O extends object, T extends keyof O>(\n obj: O,\n keys: T[],\n): Pick<O, T> {\n return keys.reduce(\n (n, k) => {\n if (k in obj) n[k] = obj[k];\n return n;\n },\n {} as Pick<O, T>,\n );\n}\n\nexport function objectOmit<O extends object, T extends keyof O>(\n obj: O,\n keys: T[],\n): Omit<O, T> {\n return Object.fromEntries(\n Object.entries(obj).filter(([k]) => !keys.includes(k as T)),\n ) as Omit<O, T>;\n}\n\nexport function promiseTimeout(ms: number, throwOnTimeout = false): Promise<void> {\n return new Promise((resolve, reject) =>\n throwOnTimeout\n ? setTimeout(() => reject(new Error(`Timeout ${ms}ms`)), ms)\n : setTimeout(resolve, ms),\n );\n}\n\nexport function increaseWithUnit(target: number, delta: number): number;\nexport function increaseWithUnit(target: string, delta: number): string;\nexport function increaseWithUnit(target: number | string, delta: number): number | string {\n if (typeof target === \"number\") return target + delta;\n const match = target.match(/^(-?\\d*\\.?\\d+)([a-z%]*)$/i);\n if (!match) return target;\n const [, num, unit] = match;\n return `${Number(num) + delta}${unit}`;\n}\n"],"mappings":"AAIO,MAAM,WACX,OAAO,WAAW,eAAe,OAAO,aAAa;AAEhD,MAAM,OAAO,MAAM;AAAC;AAEpB,MAAM,QAAQ,CAAC,GAAW,KAAa,QAC5C,KAAK,IAAI,KAAK,KAAK,IAAI,KAAK,CAAC,CAAC;AAEzB,MAAM,QAAQ,CAAI,QAAsB,OAAO,QAAQ;AAEvD,MAAM,aAAa,CAAI,QAA6B,OAAO;AAE3D,MAAM,WAAW,CAAC,QACvB,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM;AAEnC,MAAM,QACK,YAChB,mBAAmB,KAAK,UAAU,SAAS,KAC3C,CAAE,OAAe;AAEZ,SAAS,QAAW,GAAiB;AAC1C,SAAO,MAAM,QAAQ,CAAC,IAAI,IAAI,CAAC,CAAC;AAClC;AAEO,SAAS,WACd,KACA,MACY;AACZ,SAAO,KAAK;AAAA,IACV,CAAC,GAAG,MAAM;AACR,UAAI,KAAK,IAAK,GAAE,CAAC,IAAI,IAAI,CAAC;AAC1B,aAAO;AAAA,IACT;AAAA,IACA,CAAC;AAAA,EACH;AACF;AAEO,SAAS,WACd,KACA,MACY;AACZ,SAAO,OAAO;AAAA,IACZ,OAAO,QAAQ,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,SAAS,CAAM,CAAC;AAAA,EAC5D;AACF;AAEO,SAAS,eAAe,IAAY,iBAAiB,OAAsB;AAChF,SAAO,IAAI;AAAA,IAAQ,CAAC,SAAS,WAC3B,iBACI,WAAW,MAAM,OAAO,IAAI,MAAM,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,IACzD,WAAW,SAAS,EAAE;AAAA,EAC5B;AACF;AAIO,SAAS,iBAAiB,QAAyB,OAAgC;AACxF,MAAI,OAAO,WAAW,SAAU,QAAO,SAAS;AAChD,QAAM,QAAQ,OAAO,MAAM,2BAA2B;AACtD,MAAI,CAAC,MAAO,QAAO;AACnB,QAAM,CAAC,EAAE,KAAK,IAAI,IAAI;AACtB,SAAO,GAAG,OAAO,GAAG,IAAI,KAAK,GAAG,IAAI;AACtC;","names":[]}
@@ -0,0 +1,52 @@
1
+ import { Observable } from '@legendapp/state';
2
+
3
+ /**
4
+ * @usels/core - Utility functions for Legend-State
5
+ */
6
+
7
+ /**
8
+ * A value that can be either a raw value or an Observable
9
+ * Similar to VueUse's MaybeRef pattern
10
+ *
11
+ * @example
12
+ * ```ts
13
+ * const value: MaybeObservable<string> = 'hello'
14
+ * const obs: MaybeObservable<string> = observable('hello')
15
+ * ```
16
+ */
17
+ type MaybeObservable<T = any> = T | Observable<T>;
18
+ /**
19
+ * Either the whole `T` can be an Observable, OR each individual property of `T` can be an Observable.
20
+ *
21
+ * Unlike `MaybeObservable<T>` which only wraps the outer object, `DeepMaybeObservable<T>` also
22
+ * allows every field to independently accept `Observable<FieldType>`.
23
+ *
24
+ * @example
25
+ * ```ts
26
+ * type Options = DeepMaybeObservable<{ count: number; label: string }>
27
+ * // All of these are valid:
28
+ * const a: Options = { count: 1, label: 'hi' } // plain object
29
+ * const b: Options = { count: observable(1), label: observable('hi') } // per-field observables
30
+ * const c: Options = observable({ count: 1, label: 'hi' }) // whole object observable
31
+ * ```
32
+ */
33
+ type DeepMaybeObservable<T> = Observable<T> | {
34
+ [K in keyof T]?: MaybeObservable<NonNullable<T[K]>>;
35
+ };
36
+ type Fn = () => void;
37
+ type AnyFn = (...args: any[]) => any;
38
+ type Arrayable<T> = T[] | T;
39
+ type Awaitable<T> = Promise<T> | T;
40
+ type TimerHandle = ReturnType<typeof setTimeout> | undefined;
41
+ interface Pausable {
42
+ readonly isActive: Observable<boolean>;
43
+ pause: Fn;
44
+ resume: Fn;
45
+ }
46
+ interface Stoppable<StartFnArgs extends any[] = any[]> {
47
+ readonly isPending: Observable<boolean>;
48
+ stop: Fn;
49
+ start: (...args: StartFnArgs) => void;
50
+ }
51
+
52
+ export type { AnyFn, Arrayable, Awaitable, DeepMaybeObservable, Fn, MaybeObservable, Pausable, Stoppable, TimerHandle };
@@ -0,0 +1,52 @@
1
+ import { Observable } from '@legendapp/state';
2
+
3
+ /**
4
+ * @usels/core - Utility functions for Legend-State
5
+ */
6
+
7
+ /**
8
+ * A value that can be either a raw value or an Observable
9
+ * Similar to VueUse's MaybeRef pattern
10
+ *
11
+ * @example
12
+ * ```ts
13
+ * const value: MaybeObservable<string> = 'hello'
14
+ * const obs: MaybeObservable<string> = observable('hello')
15
+ * ```
16
+ */
17
+ type MaybeObservable<T = any> = T | Observable<T>;
18
+ /**
19
+ * Either the whole `T` can be an Observable, OR each individual property of `T` can be an Observable.
20
+ *
21
+ * Unlike `MaybeObservable<T>` which only wraps the outer object, `DeepMaybeObservable<T>` also
22
+ * allows every field to independently accept `Observable<FieldType>`.
23
+ *
24
+ * @example
25
+ * ```ts
26
+ * type Options = DeepMaybeObservable<{ count: number; label: string }>
27
+ * // All of these are valid:
28
+ * const a: Options = { count: 1, label: 'hi' } // plain object
29
+ * const b: Options = { count: observable(1), label: observable('hi') } // per-field observables
30
+ * const c: Options = observable({ count: 1, label: 'hi' }) // whole object observable
31
+ * ```
32
+ */
33
+ type DeepMaybeObservable<T> = Observable<T> | {
34
+ [K in keyof T]?: MaybeObservable<NonNullable<T[K]>>;
35
+ };
36
+ type Fn = () => void;
37
+ type AnyFn = (...args: any[]) => any;
38
+ type Arrayable<T> = T[] | T;
39
+ type Awaitable<T> = Promise<T> | T;
40
+ type TimerHandle = ReturnType<typeof setTimeout> | undefined;
41
+ interface Pausable {
42
+ readonly isActive: Observable<boolean>;
43
+ pause: Fn;
44
+ resume: Fn;
45
+ }
46
+ interface Stoppable<StartFnArgs extends any[] = any[]> {
47
+ readonly isPending: Observable<boolean>;
48
+ stop: Fn;
49
+ start: (...args: StartFnArgs) => void;
50
+ }
51
+
52
+ export type { AnyFn, Arrayable, Awaitable, DeepMaybeObservable, Fn, MaybeObservable, Pausable, Stoppable, TimerHandle };
package/dist/types.js ADDED
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __copyProps = (to, from, except, desc) => {
7
+ if (from && typeof from === "object" || typeof from === "function") {
8
+ for (let key of __getOwnPropNames(from))
9
+ if (!__hasOwnProp.call(to, key) && key !== except)
10
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
11
+ }
12
+ return to;
13
+ };
14
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
15
+ var types_exports = {};
16
+ module.exports = __toCommonJS(types_exports);
17
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/types.ts"],"sourcesContent":["/**\n * @usels/core - Utility functions for Legend-State\n */\n\nimport type { Observable } from \"@legendapp/state\";\n\n/**\n * A value that can be either a raw value or an Observable\n * Similar to VueUse's MaybeRef pattern\n *\n * @example\n * ```ts\n * const value: MaybeObservable<string> = 'hello'\n * const obs: MaybeObservable<string> = observable('hello')\n * ```\n */\nexport type MaybeObservable<T = any> = T | Observable<T>;\n\n/**\n * Either the whole `T` can be an Observable, OR each individual property of `T` can be an Observable.\n *\n * Unlike `MaybeObservable<T>` which only wraps the outer object, `DeepMaybeObservable<T>` also\n * allows every field to independently accept `Observable<FieldType>`.\n *\n * @example\n * ```ts\n * type Options = DeepMaybeObservable<{ count: number; label: string }>\n * // All of these are valid:\n * const a: Options = { count: 1, label: 'hi' } // plain object\n * const b: Options = { count: observable(1), label: observable('hi') } // per-field observables\n * const c: Options = observable({ count: 1, label: 'hi' }) // whole object observable\n * ```\n */\nexport type DeepMaybeObservable<T> = Observable<T> | {\n [K in keyof T]?: MaybeObservable<NonNullable<T[K]>>;\n};\n\n// --- TIER 0-A: Base utility types (VueUse equivalents) ---\n\nexport type Fn = () => void\nexport type AnyFn = (...args: any[]) => any\nexport type Arrayable<T> = T[] | T\nexport type Awaitable<T> = Promise<T> | T\nexport type TimerHandle = ReturnType<typeof setTimeout> | undefined\n\nexport interface Pausable {\n readonly isActive: Observable<boolean>\n pause: Fn\n resume: Fn\n}\n\nexport interface Stoppable<StartFnArgs extends any[] = any[]> {\n readonly isPending: Observable<boolean>\n stop: Fn\n start: (...args: StartFnArgs) => void\n}\n"],"mappings":";;;;;;;;;;;;;;AAAA;AAAA;","names":[]}
package/dist/types.mjs ADDED
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=types.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
package/package.json ADDED
@@ -0,0 +1,54 @@
1
+ {
2
+ "name": "@usels/core",
3
+ "version": "0.0.1",
4
+ "description": "Utility functions for Legend-State",
5
+ "main": "./dist/index.js",
6
+ "module": "./dist/index.mjs",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.mjs",
12
+ "require": "./dist/index.js"
13
+ }
14
+ },
15
+ "dependencies": {
16
+ "es-toolkit": "^1.0.0"
17
+ },
18
+ "peerDependencies": {
19
+ "@legendapp/state": "^2.0.0 || ^3.0.0-beta.0",
20
+ "react": "^18.0.0 || ^19.0.0"
21
+ },
22
+ "peerDependenciesMeta": {
23
+ "@legendapp/state": {
24
+ "optional": true
25
+ },
26
+ "react": {
27
+ "optional": true
28
+ }
29
+ },
30
+ "devDependencies": {
31
+ "@testing-library/react": "^16.1.0",
32
+ "@types/react": "^19.2.14",
33
+ "@types/react-dom": "^19.2.3",
34
+ "jsdom": "^25.0.0",
35
+ "tsup": "^8.3.5",
36
+ "typescript": "^5.7.3"
37
+ },
38
+ "keywords": [
39
+ "legendapp",
40
+ "legend-state",
41
+ "utilities",
42
+ "helpers"
43
+ ],
44
+ "license": "MIT",
45
+ "publishConfig": {
46
+ "access": "public"
47
+ },
48
+ "scripts": {
49
+ "build": "tsup",
50
+ "dev": "tsup --watch",
51
+ "test": "vitest",
52
+ "test:watch": "vitest --watch"
53
+ }
54
+ }
@@ -0,0 +1,109 @@
1
+ ---
2
+ title: useEventListener
3
+ category: browser
4
+ ---
5
+
6
+ Registers an event listener with `addEventListener` on mount and automatically removes it with `removeEventListener` on unmount.
7
+ Targets can be `Ref$`, `Observable<Element|null>`, a plain `Element`, `Window`, or `Document`.
8
+ The listener is always called with the latest closure value — state changes never cause stale callbacks.
9
+
10
+ ## Usage
11
+
12
+ ### Window (default target)
13
+
14
+ When no target is provided, the listener is attached to `window`.
15
+
16
+ ```tsx
17
+ import { useEventListener } from '@usels/core'
18
+
19
+ function Component() {
20
+ useEventListener('keydown', (ev) => {
21
+ console.log(ev.key)
22
+ })
23
+
24
+ return null
25
+ }
26
+ ```
27
+
28
+ ### Element target
29
+
30
+ ```tsx
31
+ import { useRef$, useEventListener } from '@usels/core'
32
+
33
+ function Component() {
34
+ const el$ = useRef$<HTMLDivElement>()
35
+
36
+ useEventListener(el$, 'click', (ev) => {
37
+ console.log('clicked', ev.target)
38
+ })
39
+
40
+ return <div ref={el$} />
41
+ }
42
+ ```
43
+
44
+ ### Reactive Ref$ target
45
+
46
+ When an `Ref$` or `Observable<Element>` is passed as the target, the listener is automatically re-registered whenever the element changes.
47
+
48
+ ```tsx
49
+ const el$ = useRef$<HTMLButtonElement>()
50
+
51
+ useEventListener(el$, 'pointerdown', (ev) => {
52
+ ev.preventDefault()
53
+ })
54
+
55
+ return <button ref={el$} />
56
+ ```
57
+
58
+ ### Multiple events
59
+
60
+ ```tsx
61
+ useEventListener(el$, ['mouseenter', 'mouseleave'], (ev) => {
62
+ console.log(ev.type)
63
+ })
64
+ ```
65
+
66
+ ### Multiple listeners
67
+
68
+ ```tsx
69
+ useEventListener(el$, 'click', [onClickA, onClickB])
70
+ ```
71
+
72
+ ### Document / Window target
73
+
74
+ ```tsx
75
+ useEventListener(document, 'visibilitychange', () => {
76
+ console.log(document.visibilityState)
77
+ })
78
+ ```
79
+
80
+ ### AddEventListenerOptions
81
+
82
+ ```tsx
83
+ useEventListener(el$, 'scroll', onScroll, { passive: true })
84
+ ```
85
+
86
+ ### Manual cleanup
87
+
88
+ The hook returns a cleanup function for imperative removal before unmount.
89
+
90
+ ```tsx
91
+ const stop = useEventListener('resize', onResize)
92
+
93
+ // remove the listener early
94
+ stop()
95
+ ```
96
+
97
+ ## Notes
98
+
99
+ **Plain element targets are not reactive.** If you pass a plain `HTMLElement` or `null` value and that reference changes after mount (e.g. via `useState`), the hook does not detect the change. Use `Ref$` or `Observable<Element>` for targets that change over time.
100
+
101
+ ```tsx
102
+ // ❌ listener stays on the original element if el changes via state
103
+ const [el, setEl] = useState<HTMLDivElement | null>(null)
104
+ useEventListener(el, 'click', handler)
105
+
106
+ // ✅ listener is re-registered automatically when el$ changes
107
+ const el$ = useRef$<HTMLDivElement>()
108
+ useEventListener(el$, 'click', handler)
109
+ ```