@med_ghoul/forge-shared 1.2.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 (254) hide show
  1. package/README.md +158 -0
  2. package/dist/hooks/index.cjs +1 -0
  3. package/dist/hooks/index.d.cts +19 -0
  4. package/dist/hooks/index.d.ts +19 -0
  5. package/dist/hooks/index.js +1 -0
  6. package/dist/hooks/use-back-to-top/index.cjs +1 -0
  7. package/dist/hooks/use-back-to-top/index.d.cts +2 -0
  8. package/dist/hooks/use-back-to-top/index.d.ts +2 -0
  9. package/dist/hooks/use-back-to-top/index.js +1 -0
  10. package/dist/hooks/use-back-to-top/use-back-to-top.cjs +1 -0
  11. package/dist/hooks/use-back-to-top/use-back-to-top.d.cts +33 -0
  12. package/dist/hooks/use-back-to-top/use-back-to-top.d.ts +33 -0
  13. package/dist/hooks/use-back-to-top/use-back-to-top.js +1 -0
  14. package/dist/hooks/use-boolean/index.cjs +1 -0
  15. package/dist/hooks/use-boolean/index.d.cts +2 -0
  16. package/dist/hooks/use-boolean/index.d.ts +2 -0
  17. package/dist/hooks/use-boolean/index.js +1 -0
  18. package/dist/hooks/use-boolean/use-boolean.cjs +1 -0
  19. package/dist/hooks/use-boolean/use-boolean.d.cts +29 -0
  20. package/dist/hooks/use-boolean/use-boolean.d.ts +29 -0
  21. package/dist/hooks/use-boolean/use-boolean.js +1 -0
  22. package/dist/hooks/use-client-rect/index.cjs +1 -0
  23. package/dist/hooks/use-client-rect/index.d.cts +2 -0
  24. package/dist/hooks/use-client-rect/index.d.ts +2 -0
  25. package/dist/hooks/use-client-rect/index.js +1 -0
  26. package/dist/hooks/use-client-rect/use-client-rect.cjs +1 -0
  27. package/dist/hooks/use-client-rect/use-client-rect.d.cts +29 -0
  28. package/dist/hooks/use-client-rect/use-client-rect.d.ts +29 -0
  29. package/dist/hooks/use-client-rect/use-client-rect.js +1 -0
  30. package/dist/hooks/use-cookies/index.cjs +1 -0
  31. package/dist/hooks/use-cookies/index.d.cts +2 -0
  32. package/dist/hooks/use-cookies/index.d.ts +2 -0
  33. package/dist/hooks/use-cookies/index.js +1 -0
  34. package/dist/hooks/use-cookies/use-cookies.cjs +1 -0
  35. package/dist/hooks/use-cookies/use-cookies.d.cts +40 -0
  36. package/dist/hooks/use-cookies/use-cookies.d.ts +40 -0
  37. package/dist/hooks/use-cookies/use-cookies.js +1 -0
  38. package/dist/hooks/use-copy-to-clipboard/index.cjs +1 -0
  39. package/dist/hooks/use-copy-to-clipboard/index.d.cts +1 -0
  40. package/dist/hooks/use-copy-to-clipboard/index.d.ts +1 -0
  41. package/dist/hooks/use-copy-to-clipboard/index.js +1 -0
  42. package/dist/hooks/use-copy-to-clipboard/use-copy-to-clipboard.cjs +1 -0
  43. package/dist/hooks/use-copy-to-clipboard/use-copy-to-clipboard.d.cts +26 -0
  44. package/dist/hooks/use-copy-to-clipboard/use-copy-to-clipboard.d.ts +26 -0
  45. package/dist/hooks/use-copy-to-clipboard/use-copy-to-clipboard.js +1 -0
  46. package/dist/hooks/use-countdown-date/index.cjs +1 -0
  47. package/dist/hooks/use-countdown-date/index.d.cts +1 -0
  48. package/dist/hooks/use-countdown-date/index.d.ts +1 -0
  49. package/dist/hooks/use-countdown-date/index.js +1 -0
  50. package/dist/hooks/use-countdown-date/use-countdown-date.cjs +1 -0
  51. package/dist/hooks/use-countdown-date/use-countdown-date.d.cts +29 -0
  52. package/dist/hooks/use-countdown-date/use-countdown-date.d.ts +29 -0
  53. package/dist/hooks/use-countdown-date/use-countdown-date.js +1 -0
  54. package/dist/hooks/use-countdown-seconds/index.cjs +1 -0
  55. package/dist/hooks/use-countdown-seconds/index.d.cts +2 -0
  56. package/dist/hooks/use-countdown-seconds/index.d.ts +2 -0
  57. package/dist/hooks/use-countdown-seconds/index.js +1 -0
  58. package/dist/hooks/use-countdown-seconds/use-countdown-seconds.cjs +1 -0
  59. package/dist/hooks/use-countdown-seconds/use-countdown-seconds.d.cts +35 -0
  60. package/dist/hooks/use-countdown-seconds/use-countdown-seconds.d.ts +35 -0
  61. package/dist/hooks/use-countdown-seconds/use-countdown-seconds.js +1 -0
  62. package/dist/hooks/use-debounce/index.cjs +1 -0
  63. package/dist/hooks/use-debounce/index.d.cts +1 -0
  64. package/dist/hooks/use-debounce/index.d.ts +1 -0
  65. package/dist/hooks/use-debounce/index.js +1 -0
  66. package/dist/hooks/use-debounce/use-debounce.cjs +1 -0
  67. package/dist/hooks/use-debounce/use-debounce.d.cts +21 -0
  68. package/dist/hooks/use-debounce/use-debounce.d.ts +21 -0
  69. package/dist/hooks/use-debounce/use-debounce.js +1 -0
  70. package/dist/hooks/use-double-click/index.cjs +1 -0
  71. package/dist/hooks/use-double-click/index.d.cts +2 -0
  72. package/dist/hooks/use-double-click/index.d.ts +2 -0
  73. package/dist/hooks/use-double-click/index.js +1 -0
  74. package/dist/hooks/use-double-click/use-double-click.cjs +1 -0
  75. package/dist/hooks/use-double-click/use-double-click.d.cts +28 -0
  76. package/dist/hooks/use-double-click/use-double-click.d.ts +28 -0
  77. package/dist/hooks/use-double-click/use-double-click.js +1 -0
  78. package/dist/hooks/use-is-client/index.cjs +1 -0
  79. package/dist/hooks/use-is-client/index.d.cts +1 -0
  80. package/dist/hooks/use-is-client/index.d.ts +1 -0
  81. package/dist/hooks/use-is-client/index.js +1 -0
  82. package/dist/hooks/use-is-client/use-is-client.cjs +1 -0
  83. package/dist/hooks/use-is-client/use-is-client.d.cts +18 -0
  84. package/dist/hooks/use-is-client/use-is-client.d.ts +18 -0
  85. package/dist/hooks/use-is-client/use-is-client.js +1 -0
  86. package/dist/hooks/use-local-storage/index.cjs +1 -0
  87. package/dist/hooks/use-local-storage/index.d.cts +1 -0
  88. package/dist/hooks/use-local-storage/index.d.ts +1 -0
  89. package/dist/hooks/use-local-storage/index.js +1 -0
  90. package/dist/hooks/use-local-storage/use-local-storage.cjs +1 -0
  91. package/dist/hooks/use-local-storage/use-local-storage.d.cts +38 -0
  92. package/dist/hooks/use-local-storage/use-local-storage.d.ts +38 -0
  93. package/dist/hooks/use-local-storage/use-local-storage.js +1 -0
  94. package/dist/hooks/use-multi-select/index.cjs +1 -0
  95. package/dist/hooks/use-multi-select/index.d.cts +2 -0
  96. package/dist/hooks/use-multi-select/index.d.ts +2 -0
  97. package/dist/hooks/use-multi-select/index.js +1 -0
  98. package/dist/hooks/use-multi-select/use-multi-select.cjs +1 -0
  99. package/dist/hooks/use-multi-select/use-multi-select.d.cts +55 -0
  100. package/dist/hooks/use-multi-select/use-multi-select.d.ts +55 -0
  101. package/dist/hooks/use-multi-select/use-multi-select.js +1 -0
  102. package/dist/hooks/use-popover/index.cjs +1 -0
  103. package/dist/hooks/use-popover/index.d.cts +2 -0
  104. package/dist/hooks/use-popover/index.d.ts +2 -0
  105. package/dist/hooks/use-popover/index.js +1 -0
  106. package/dist/hooks/use-popover/use-popover.cjs +1 -0
  107. package/dist/hooks/use-popover/use-popover.d.cts +35 -0
  108. package/dist/hooks/use-popover/use-popover.d.ts +35 -0
  109. package/dist/hooks/use-popover/use-popover.js +1 -0
  110. package/dist/hooks/use-popover-hover/index.cjs +1 -0
  111. package/dist/hooks/use-popover-hover/index.d.cts +2 -0
  112. package/dist/hooks/use-popover-hover/index.d.ts +2 -0
  113. package/dist/hooks/use-popover-hover/index.js +1 -0
  114. package/dist/hooks/use-popover-hover/use-popover-hover.cjs +1 -0
  115. package/dist/hooks/use-popover-hover/use-popover-hover.d.cts +41 -0
  116. package/dist/hooks/use-popover-hover/use-popover-hover.d.ts +41 -0
  117. package/dist/hooks/use-popover-hover/use-popover-hover.js +1 -0
  118. package/dist/hooks/use-scroll-offset-top/index.cjs +1 -0
  119. package/dist/hooks/use-scroll-offset-top/index.d.cts +2 -0
  120. package/dist/hooks/use-scroll-offset-top/index.d.ts +2 -0
  121. package/dist/hooks/use-scroll-offset-top/index.js +1 -0
  122. package/dist/hooks/use-scroll-offset-top/use-scroll-offset-top.cjs +1 -0
  123. package/dist/hooks/use-scroll-offset-top/use-scroll-offset-top.d.cts +28 -0
  124. package/dist/hooks/use-scroll-offset-top/use-scroll-offset-top.d.ts +28 -0
  125. package/dist/hooks/use-scroll-offset-top/use-scroll-offset-top.js +1 -0
  126. package/dist/hooks/use-set-state/index.cjs +1 -0
  127. package/dist/hooks/use-set-state/index.d.cts +1 -0
  128. package/dist/hooks/use-set-state/index.d.ts +1 -0
  129. package/dist/hooks/use-set-state/index.js +1 -0
  130. package/dist/hooks/use-set-state/use-set-state.cjs +1 -0
  131. package/dist/hooks/use-set-state/use-set-state.d.cts +32 -0
  132. package/dist/hooks/use-set-state/use-set-state.d.ts +32 -0
  133. package/dist/hooks/use-set-state/use-set-state.js +1 -0
  134. package/dist/hooks/use-tabs/index.cjs +1 -0
  135. package/dist/hooks/use-tabs/index.d.cts +2 -0
  136. package/dist/hooks/use-tabs/index.d.ts +2 -0
  137. package/dist/hooks/use-tabs/index.js +1 -0
  138. package/dist/hooks/use-tabs/use-tabs.cjs +1 -0
  139. package/dist/hooks/use-tabs/use-tabs.d.cts +58 -0
  140. package/dist/hooks/use-tabs/use-tabs.d.ts +58 -0
  141. package/dist/hooks/use-tabs/use-tabs.js +1 -0
  142. package/dist/index.cjs +2 -0
  143. package/dist/index.d.cts +31 -0
  144. package/dist/index.d.ts +31 -0
  145. package/dist/index.js +2 -0
  146. package/dist/utils/active-link/active-link.cjs +1 -0
  147. package/dist/utils/active-link/active-link.d.cts +27 -0
  148. package/dist/utils/active-link/active-link.d.ts +27 -0
  149. package/dist/utils/active-link/active-link.js +1 -0
  150. package/dist/utils/active-link/index.cjs +1 -0
  151. package/dist/utils/active-link/index.d.cts +1 -0
  152. package/dist/utils/active-link/index.d.ts +1 -0
  153. package/dist/utils/active-link/index.js +1 -0
  154. package/dist/utils/classes/classes.cjs +1 -0
  155. package/dist/utils/classes/classes.d.cts +25 -0
  156. package/dist/utils/classes/classes.d.ts +25 -0
  157. package/dist/utils/classes/classes.js +1 -0
  158. package/dist/utils/classes/index.cjs +1 -0
  159. package/dist/utils/classes/index.d.cts +1 -0
  160. package/dist/utils/classes/index.d.ts +1 -0
  161. package/dist/utils/classes/index.js +1 -0
  162. package/dist/utils/color/color.cjs +2 -0
  163. package/dist/utils/color/color.d.cts +52 -0
  164. package/dist/utils/color/color.d.ts +52 -0
  165. package/dist/utils/color/color.js +2 -0
  166. package/dist/utils/color/index.cjs +2 -0
  167. package/dist/utils/color/index.d.cts +1 -0
  168. package/dist/utils/color/index.d.ts +1 -0
  169. package/dist/utils/color/index.js +2 -0
  170. package/dist/utils/cookies/cookies.cjs +1 -0
  171. package/dist/utils/cookies/cookies.d.cts +42 -0
  172. package/dist/utils/cookies/cookies.d.ts +42 -0
  173. package/dist/utils/cookies/cookies.js +1 -0
  174. package/dist/utils/cookies/index.cjs +1 -0
  175. package/dist/utils/cookies/index.d.cts +1 -0
  176. package/dist/utils/cookies/index.d.ts +1 -0
  177. package/dist/utils/cookies/index.js +1 -0
  178. package/dist/utils/css-variables/css-variables.cjs +1 -0
  179. package/dist/utils/css-variables/css-variables.d.cts +14 -0
  180. package/dist/utils/css-variables/css-variables.d.ts +14 -0
  181. package/dist/utils/css-variables/css-variables.js +1 -0
  182. package/dist/utils/css-variables/index.cjs +1 -0
  183. package/dist/utils/css-variables/index.d.cts +1 -0
  184. package/dist/utils/css-variables/index.d.ts +1 -0
  185. package/dist/utils/css-variables/index.js +1 -0
  186. package/dist/utils/font/font.cjs +1 -0
  187. package/dist/utils/font/font.d.cts +37 -0
  188. package/dist/utils/font/font.d.ts +37 -0
  189. package/dist/utils/font/font.js +1 -0
  190. package/dist/utils/font/index.cjs +1 -0
  191. package/dist/utils/font/index.d.cts +1 -0
  192. package/dist/utils/font/index.d.ts +1 -0
  193. package/dist/utils/font/index.js +1 -0
  194. package/dist/utils/index.cjs +2 -0
  195. package/dist/utils/index.d.cts +13 -0
  196. package/dist/utils/index.d.ts +13 -0
  197. package/dist/utils/index.js +2 -0
  198. package/dist/utils/local-storage/index.cjs +1 -0
  199. package/dist/utils/local-storage/index.d.cts +1 -0
  200. package/dist/utils/local-storage/index.d.ts +1 -0
  201. package/dist/utils/local-storage/index.js +1 -0
  202. package/dist/utils/local-storage/local-storage.cjs +1 -0
  203. package/dist/utils/local-storage/local-storage.d.cts +43 -0
  204. package/dist/utils/local-storage/local-storage.d.ts +43 -0
  205. package/dist/utils/local-storage/local-storage.js +1 -0
  206. package/dist/utils/object/index.cjs +1 -0
  207. package/dist/utils/object/index.d.cts +1 -0
  208. package/dist/utils/object/index.d.ts +1 -0
  209. package/dist/utils/object/index.js +1 -0
  210. package/dist/utils/object/object.cjs +1 -0
  211. package/dist/utils/object/object.d.cts +26 -0
  212. package/dist/utils/object/object.d.ts +26 -0
  213. package/dist/utils/object/object.js +1 -0
  214. package/dist/utils/refs/index.cjs +1 -0
  215. package/dist/utils/refs/index.d.cts +1 -0
  216. package/dist/utils/refs/index.d.ts +1 -0
  217. package/dist/utils/refs/index.js +1 -0
  218. package/dist/utils/refs/refs.cjs +1 -0
  219. package/dist/utils/refs/refs.d.cts +3 -0
  220. package/dist/utils/refs/refs.d.ts +3 -0
  221. package/dist/utils/refs/refs.js +1 -0
  222. package/dist/utils/right-to-left/index.cjs +1 -0
  223. package/dist/utils/right-to-left/index.d.cts +1 -0
  224. package/dist/utils/right-to-left/index.d.ts +1 -0
  225. package/dist/utils/right-to-left/index.js +1 -0
  226. package/dist/utils/right-to-left/right-to-left.cjs +1 -0
  227. package/dist/utils/right-to-left/right-to-left.d.cts +13 -0
  228. package/dist/utils/right-to-left/right-to-left.d.ts +13 -0
  229. package/dist/utils/right-to-left/right-to-left.js +1 -0
  230. package/dist/utils/transform-number/index.cjs +1 -0
  231. package/dist/utils/transform-number/index.d.cts +1 -0
  232. package/dist/utils/transform-number/index.d.ts +1 -0
  233. package/dist/utils/transform-number/index.js +1 -0
  234. package/dist/utils/transform-number/transform-number.cjs +1 -0
  235. package/dist/utils/transform-number/transform-number.d.cts +31 -0
  236. package/dist/utils/transform-number/transform-number.d.ts +31 -0
  237. package/dist/utils/transform-number/transform-number.js +1 -0
  238. package/dist/utils/url/index.cjs +1 -0
  239. package/dist/utils/url/index.d.cts +1 -0
  240. package/dist/utils/url/index.d.ts +1 -0
  241. package/dist/utils/url/index.js +1 -0
  242. package/dist/utils/url/url.cjs +1 -0
  243. package/dist/utils/url/url.d.cts +74 -0
  244. package/dist/utils/url/url.d.ts +74 -0
  245. package/dist/utils/url/url.js +1 -0
  246. package/dist/utils/uuidv4/index.cjs +1 -0
  247. package/dist/utils/uuidv4/index.d.cts +1 -0
  248. package/dist/utils/uuidv4/index.d.ts +1 -0
  249. package/dist/utils/uuidv4/index.js +1 -0
  250. package/dist/utils/uuidv4/uuidv4.cjs +1 -0
  251. package/dist/utils/uuidv4/uuidv4.d.cts +12 -0
  252. package/dist/utils/uuidv4/uuidv4.d.ts +12 -0
  253. package/dist/utils/uuidv4/uuidv4.js +1 -0
  254. package/package.json +113 -0
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Checks if a URL has query parameters.
3
+ *
4
+ * @param url - The URL to check.
5
+ * @returns True if the URL has query parameters, false otherwise.
6
+ *
7
+ * @example
8
+ * hasParams('https://example.com?page=1'); // true
9
+ * hasParams('https://example.com'); // false
10
+ */
11
+ declare function hasParams(url: string): boolean;
12
+ /**
13
+ * Removes the trailing slash from a pathname if present.
14
+ *
15
+ * @param pathname - The pathname to process.
16
+ * @returns The pathname without the trailing slash.
17
+ *
18
+ * @example
19
+ * removeLastSlash('/dashboard/'); // '/dashboard'
20
+ * removeLastSlash('/dashboard'); // '/dashboard'
21
+ */
22
+ declare function removeLastSlash(pathname: string): string;
23
+ /**
24
+ * Checks if two paths are equal after removing trailing slashes.
25
+ *
26
+ * @param targetUrl - The target URL to compare.
27
+ * @param currentUrl - The pathname to compare.
28
+ * @param options.deep - Options for deep comparison.
29
+ * @returns True if the paths are equal, false otherwise.
30
+ *
31
+ * @example
32
+ * isEqualPath('/dashboard/', '/dashboard'); // true
33
+ * isEqualPath('/home', '/dashboard'); // false
34
+ */
35
+ type EqualPathOptions = {
36
+ deep?: boolean;
37
+ };
38
+ declare function isEqualPath(targetUrl: string, currentUrl: string, options?: EqualPathOptions): boolean;
39
+ /**
40
+ * Removes query parameters from a URL and returns only the cleaned pathname.
41
+ *
42
+ * @param url - The URL to process.
43
+ * @returns The pathname without query parameters.
44
+ *
45
+ * @example
46
+ * removeParams('https://example.com/dashboard/user?id=123'); // '/dashboard/user'
47
+ * removeParams('/dashboard/user?id=123'); // '/dashboard/user'
48
+ */
49
+ declare function removeParams(url: string): string;
50
+ /**
51
+ * Determines whether a given URL is external (i.e., starts with "http").
52
+ *
53
+ * @param url - The URL to check.
54
+ * @returns True if the URL is external, false otherwise.
55
+ *
56
+ * @example
57
+ * isExternalLink('https://example.com'); // true
58
+ * isExternalLink('/internal'); // false
59
+ */
60
+ declare function isExternalLink(url: string): boolean;
61
+ /**
62
+ * Safely returns a URL or a fallback if the URL is invalid or not same-origin.
63
+ *
64
+ * @param value - The URL to validate.
65
+ * @param fallback - The fallback URL to return if the value is invalid.
66
+ * @returns A safe URL or the fallback.
67
+ *
68
+ * @example
69
+ * safeReturnUrl('/dashboard', '/home'); // '/dashboard'
70
+ * safeReturnUrl('https://example.com', '/home'); // '/'
71
+ */
72
+ declare function safeReturnUrl(value: string | null, fallback?: string | null): string;
73
+
74
+ export { type EqualPathOptions, hasParams, isEqualPath, isExternalLink, removeLastSlash, removeParams, safeReturnUrl };
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Checks if a URL has query parameters.
3
+ *
4
+ * @param url - The URL to check.
5
+ * @returns True if the URL has query parameters, false otherwise.
6
+ *
7
+ * @example
8
+ * hasParams('https://example.com?page=1'); // true
9
+ * hasParams('https://example.com'); // false
10
+ */
11
+ declare function hasParams(url: string): boolean;
12
+ /**
13
+ * Removes the trailing slash from a pathname if present.
14
+ *
15
+ * @param pathname - The pathname to process.
16
+ * @returns The pathname without the trailing slash.
17
+ *
18
+ * @example
19
+ * removeLastSlash('/dashboard/'); // '/dashboard'
20
+ * removeLastSlash('/dashboard'); // '/dashboard'
21
+ */
22
+ declare function removeLastSlash(pathname: string): string;
23
+ /**
24
+ * Checks if two paths are equal after removing trailing slashes.
25
+ *
26
+ * @param targetUrl - The target URL to compare.
27
+ * @param currentUrl - The pathname to compare.
28
+ * @param options.deep - Options for deep comparison.
29
+ * @returns True if the paths are equal, false otherwise.
30
+ *
31
+ * @example
32
+ * isEqualPath('/dashboard/', '/dashboard'); // true
33
+ * isEqualPath('/home', '/dashboard'); // false
34
+ */
35
+ type EqualPathOptions = {
36
+ deep?: boolean;
37
+ };
38
+ declare function isEqualPath(targetUrl: string, currentUrl: string, options?: EqualPathOptions): boolean;
39
+ /**
40
+ * Removes query parameters from a URL and returns only the cleaned pathname.
41
+ *
42
+ * @param url - The URL to process.
43
+ * @returns The pathname without query parameters.
44
+ *
45
+ * @example
46
+ * removeParams('https://example.com/dashboard/user?id=123'); // '/dashboard/user'
47
+ * removeParams('/dashboard/user?id=123'); // '/dashboard/user'
48
+ */
49
+ declare function removeParams(url: string): string;
50
+ /**
51
+ * Determines whether a given URL is external (i.e., starts with "http").
52
+ *
53
+ * @param url - The URL to check.
54
+ * @returns True if the URL is external, false otherwise.
55
+ *
56
+ * @example
57
+ * isExternalLink('https://example.com'); // true
58
+ * isExternalLink('/internal'); // false
59
+ */
60
+ declare function isExternalLink(url: string): boolean;
61
+ /**
62
+ * Safely returns a URL or a fallback if the URL is invalid or not same-origin.
63
+ *
64
+ * @param value - The URL to validate.
65
+ * @param fallback - The fallback URL to return if the value is invalid.
66
+ * @returns A safe URL or the fallback.
67
+ *
68
+ * @example
69
+ * safeReturnUrl('/dashboard', '/home'); // '/dashboard'
70
+ * safeReturnUrl('https://example.com', '/home'); // '/'
71
+ */
72
+ declare function safeReturnUrl(value: string | null, fallback?: string | null): string;
73
+
74
+ export { type EqualPathOptions, hasParams, isEqualPath, isExternalLink, removeLastSlash, removeParams, safeReturnUrl };
@@ -0,0 +1 @@
1
+ import{isEqual as h}from"es-toolkit";function u(t){try{let r=new URL(t,window.location.origin);return Array.from(r.searchParams.keys()).length>0}catch{return!1}}function o(t){return t!=="/"&&t.endsWith("/")?t.slice(0,-1):t}function p(t,r,i={deep:!0}){let n=s=>{try{let{pathname:a,searchParams:e}=new URL(s.trim(),"http://dummy");return i.deep?{pathname:o(a),params:Object.fromEntries(e)}:{pathname:o(a)}}catch{return{pathname:""}}};return h(n(r),n(t))}function m(t){try{let r=new URL(t,window.location.origin);return o(r.pathname)}catch{return t}}function g(t){return/^https?:\/\//i.test(t)}function f(t,r){let i=r??"/";if(!t||typeof window>"u"||!window.location?.origin)return i;try{let n=new URL(t,window.location.origin),s=n.origin===window.location.origin,a=n.pathname.startsWith("/")&&!n.pathname.startsWith("//"),e=/^\/:+$/.test(n.pathname),c=n.pathname==="/"&&!n.search&&n.hash;return s&&a&&!e&&!c?`${n.pathname}${n.search}${n.hash}`:i}catch{return t.startsWith("/")&&!t.startsWith("//")?t:i}}export{u as hasParams,p as isEqualPath,g as isExternalLink,o as removeLastSlash,m as removeParams,f as safeReturnUrl};
@@ -0,0 +1 @@
1
+ "use strict";var o=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var c=Object.getOwnPropertyNames;var i=Object.prototype.hasOwnProperty;var a=(r,x)=>{for(var t in x)o(r,t,{get:x[t],enumerable:!0})},g=(r,x,t,e)=>{if(x&&typeof x=="object"||typeof x=="function")for(let n of c(x))!i.call(r,n)&&n!==t&&o(r,n,{get:()=>x[n],enumerable:!(e=u(x,n))||e.enumerable});return r};var p=r=>g(o({},"__esModule",{value:!0}),r);var v={};a(v,{uuidv4:()=>s});module.exports=p(v);function s(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,r=>{let x=Math.random()*16|0;return(r==="x"?x:x&3|8).toString(16)})}0&&(module.exports={uuidv4});
@@ -0,0 +1 @@
1
+ export { uuidv4 } from './uuidv4.cjs';
@@ -0,0 +1 @@
1
+ export { uuidv4 } from './uuidv4.js';
@@ -0,0 +1 @@
1
+ function n(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,r=>{let x=Math.random()*16|0;return(r==="x"?x:x&3|8).toString(16)})}export{n as uuidv4};
@@ -0,0 +1 @@
1
+ "use strict";var o=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var c=Object.getOwnPropertyNames;var i=Object.prototype.hasOwnProperty;var a=(r,x)=>{for(var t in x)o(r,t,{get:x[t],enumerable:!0})},g=(r,x,t,e)=>{if(x&&typeof x=="object"||typeof x=="function")for(let n of c(x))!i.call(r,n)&&n!==t&&o(r,n,{get:()=>x[n],enumerable:!(e=u(x,n))||e.enumerable});return r};var s=r=>g(o({},"__esModule",{value:!0}),r);var d={};a(d,{uuidv4:()=>v});module.exports=s(d);function v(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,r=>{let x=Math.random()*16|0;return(r==="x"?x:x&3|8).toString(16)})}0&&(module.exports={uuidv4});
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Generates a UUID (version 4).
3
+ *
4
+ * @returns {string} - A randomly generated UUID.
5
+ *
6
+ * @example
7
+ * const id = uuidv4();
8
+ * console.log(id); // '3b12f1df-1c3a-4f3b-8f3d-3f3b1c3a4f3b'
9
+ */
10
+ declare function uuidv4(): string;
11
+
12
+ export { uuidv4 };
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Generates a UUID (version 4).
3
+ *
4
+ * @returns {string} - A randomly generated UUID.
5
+ *
6
+ * @example
7
+ * const id = uuidv4();
8
+ * console.log(id); // '3b12f1df-1c3a-4f3b-8f3d-3f3b1c3a4f3b'
9
+ */
10
+ declare function uuidv4(): string;
11
+
12
+ export { uuidv4 };
@@ -0,0 +1 @@
1
+ function n(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,r=>{let x=Math.random()*16|0;return(r==="x"?x:x&3|8).toString(16)})}export{n as uuidv4};
package/package.json ADDED
@@ -0,0 +1,113 @@
1
+ {
2
+ "name": "@med_ghoul/forge-shared",
3
+ "author": "MedOx",
4
+ "version": "1.2.0",
5
+ "description": "A collection of reusable React hooks and utility functions for modern web development",
6
+ "keywords": [
7
+ "typescript",
8
+ "react",
9
+ "hooks",
10
+ "utils",
11
+ "react-hooks",
12
+ "utilities",
13
+ "tree-shakeable"
14
+ ],
15
+ "license": "MIT",
16
+ "repository": {
17
+ "type": "git",
18
+ "url": "git+https://github.com/medghoul/forge-shared.git"
19
+ },
20
+ "homepage": "https://github.com/medghoul/forge-shared#readme",
21
+ "bugs": {
22
+ "url": "https://github.com/medghoul/forge-shared/issues"
23
+ },
24
+ "sideEffects": false,
25
+ "type": "module",
26
+ "packageManager": "bun@1.1.38",
27
+ "types": "./dist/index.d.ts",
28
+ "main": "./dist/index.js",
29
+ "files": [
30
+ "dist"
31
+ ],
32
+ "typesVersions": {
33
+ "*": {
34
+ "*": [
35
+ "./dist/*",
36
+ "./dist/*/index"
37
+ ]
38
+ }
39
+ },
40
+ "exports": {
41
+ "./package.json": "./package.json",
42
+ ".": {
43
+ "types": "./dist/index.d.ts",
44
+ "default": "./dist/index.js"
45
+ },
46
+ "./hooks": {
47
+ "types": "./dist/hooks/index.d.ts",
48
+ "default": "./dist/hooks/index.js"
49
+ },
50
+ "./hooks/*": {
51
+ "types": "./dist/hooks/*/index.d.ts",
52
+ "default": "./dist/hooks/*/index.js"
53
+ },
54
+ "./utils": {
55
+ "types": "./dist/utils/index.d.ts",
56
+ "default": "./dist/utils/index.js"
57
+ },
58
+ "./utils/*": {
59
+ "types": "./dist/utils/*/index.d.ts",
60
+ "default": "./dist/utils/*/index.js"
61
+ }
62
+ },
63
+ "scripts": {
64
+ "prepublishOnly": "bun run build",
65
+ "dev": "NODE_OPTIONS='--max-old-space-size=16384' tsup --watch",
66
+ "build": "bun run test && NODE_OPTIONS='--max-old-space-size=16384' tsup",
67
+ "test": "vitest run",
68
+ "test:watch": "vitest",
69
+ "lint": "eslint \"**/*.{js,jsx,ts,tsx}\"",
70
+ "lint:fix": "eslint --fix \"**/*.{js,jsx,ts,tsx}\"",
71
+ "lint:print": "bunx eslint --print-config eslint.config.mjs > eslint-show-config.json",
72
+ "clean": "rm -rf node_modules .next out dist build bun.lockb",
73
+ "re:dev": "bun run clean && bun install && bun dev",
74
+ "re:build": "bun run clean && bun install && bun test && bun build",
75
+ "fm:check": "prettier --check \"**/*.{js,jsx,ts,tsx}\"",
76
+ "fm:fix": "prettier --write \"**/*.{js,jsx,ts,tsx}\"",
77
+ "check:update": "bun update --interactive --latest",
78
+ "tsc:print": "bunx tsc --showConfig",
79
+ "check-types": "bunx tsc --noEmit"
80
+ },
81
+ "dependencies": {
82
+ "es-toolkit": "^1.43.0"
83
+ },
84
+ "devDependencies": {
85
+ "@eslint/js": "^9.39.2",
86
+ "@testing-library/jest-dom": "^6.9.1",
87
+ "@testing-library/react": "^16.3.0",
88
+ "@types/bun": "^1.3.5",
89
+ "@types/node": "^25.0.1",
90
+ "@types/react": "19.2.7",
91
+ "eslint": "^9.39.2",
92
+ "eslint-import-resolver-typescript": "^4.4.4",
93
+ "eslint-plugin-import": "^2.32.0",
94
+ "eslint-plugin-perfectionist": "^4.15.1",
95
+ "eslint-plugin-react": "^7.37.5",
96
+ "eslint-plugin-react-hooks": "7.0.1",
97
+ "eslint-plugin-unused-imports": "^4.3.0",
98
+ "globals": "^16.5.0",
99
+ "jsdom": "^27.3.0",
100
+ "prettier": "^3.7.4",
101
+ "react": "^19.2.4",
102
+ "react-dom": "^19.2.4",
103
+ "tsup": "^8.5.1",
104
+ "typescript": "^5.9.3",
105
+ "typescript-eslint": "^8.49.0",
106
+ "vitest": "^4.0.15"
107
+ },
108
+ "peerDependencies": {
109
+ "react": "^18.0.0 || ^19.0.0",
110
+ "react-dom": "^18.0.0 || ^19.0.0",
111
+ "typescript": "^5.0.0"
112
+ }
113
+ }