minimal-shared 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (120) hide show
  1. package/README.md +3 -0
  2. package/dist/hooks/index.d.ts +20 -0
  3. package/dist/hooks/index.js +19 -0
  4. package/dist/hooks/use-back-to-top/index.d.ts +2 -0
  5. package/dist/hooks/use-back-to-top/index.js +1 -0
  6. package/dist/hooks/use-back-to-top/use-back-to-top.d.ts +33 -0
  7. package/dist/hooks/use-back-to-top/use-back-to-top.js +64 -0
  8. package/dist/hooks/use-boolean/index.d.ts +2 -0
  9. package/dist/hooks/use-boolean/index.js +1 -0
  10. package/dist/hooks/use-boolean/use-boolean.d.ts +29 -0
  11. package/dist/hooks/use-boolean/use-boolean.js +24 -0
  12. package/dist/hooks/use-client-rect/index.d.ts +2 -0
  13. package/dist/hooks/use-client-rect/index.js +1 -0
  14. package/dist/hooks/use-client-rect/use-client-rect.d.ts +29 -0
  15. package/dist/hooks/use-client-rect/use-client-rect.js +47 -0
  16. package/dist/hooks/use-cookies/index.d.ts +1 -0
  17. package/dist/hooks/use-cookies/index.js +1 -0
  18. package/dist/hooks/use-cookies/use-cookies.d.ts +39 -0
  19. package/dist/hooks/use-cookies/use-cookies.js +110 -0
  20. package/dist/hooks/use-copy-to-clipboard/index.d.ts +1 -0
  21. package/dist/hooks/use-copy-to-clipboard/index.js +1 -0
  22. package/dist/hooks/use-copy-to-clipboard/use-copy-to-clipboard.d.ts +26 -0
  23. package/dist/hooks/use-copy-to-clipboard/use-copy-to-clipboard.js +27 -0
  24. package/dist/hooks/use-countdown-date/index.d.ts +1 -0
  25. package/dist/hooks/use-countdown-date/index.js +1 -0
  26. package/dist/hooks/use-countdown-date/use-countdown-date.d.ts +29 -0
  27. package/dist/hooks/use-countdown-date/use-countdown-date.js +41 -0
  28. package/dist/hooks/use-countdown-seconds/index.d.ts +2 -0
  29. package/dist/hooks/use-countdown-seconds/index.js +1 -0
  30. package/dist/hooks/use-countdown-seconds/use-countdown-seconds.d.ts +35 -0
  31. package/dist/hooks/use-countdown-seconds/use-countdown-seconds.js +36 -0
  32. package/dist/hooks/use-debounce/index.d.ts +1 -0
  33. package/dist/hooks/use-debounce/index.js +1 -0
  34. package/dist/hooks/use-debounce/use-debounce.d.ts +21 -0
  35. package/dist/hooks/use-debounce/use-debounce.js +17 -0
  36. package/dist/hooks/use-double-click/index.d.ts +2 -0
  37. package/dist/hooks/use-double-click/index.js +1 -0
  38. package/dist/hooks/use-double-click/use-double-click.d.ts +28 -0
  39. package/dist/hooks/use-double-click/use-double-click.js +33 -0
  40. package/dist/hooks/use-event-listener/index.d.ts +2 -0
  41. package/dist/hooks/use-event-listener/index.js +1 -0
  42. package/dist/hooks/use-event-listener/use-event-listener.d.ts +7 -0
  43. package/dist/hooks/use-event-listener/use-event-listener.js +23 -0
  44. package/dist/hooks/use-is-client/index.d.ts +1 -0
  45. package/dist/hooks/use-is-client/index.js +1 -0
  46. package/dist/hooks/use-is-client/use-is-client.d.ts +18 -0
  47. package/dist/hooks/use-is-client/use-is-client.js +12 -0
  48. package/dist/hooks/use-local-storage/index.d.ts +1 -0
  49. package/dist/hooks/use-local-storage/index.js +1 -0
  50. package/dist/hooks/use-local-storage/use-local-storage.d.ts +37 -0
  51. package/dist/hooks/use-local-storage/use-local-storage.js +113 -0
  52. package/dist/hooks/use-multi-select/index.d.ts +2 -0
  53. package/dist/hooks/use-multi-select/index.js +1 -0
  54. package/dist/hooks/use-multi-select/use-multi-select.d.ts +55 -0
  55. package/dist/hooks/use-multi-select/use-multi-select.js +36 -0
  56. package/dist/hooks/use-popover/index.d.ts +2 -0
  57. package/dist/hooks/use-popover/index.js +1 -0
  58. package/dist/hooks/use-popover/use-popover.d.ts +35 -0
  59. package/dist/hooks/use-popover/use-popover.js +21 -0
  60. package/dist/hooks/use-popover-hover/index.d.ts +2 -0
  61. package/dist/hooks/use-popover-hover/index.js +1 -0
  62. package/dist/hooks/use-popover-hover/use-popover-hover.d.ts +41 -0
  63. package/dist/hooks/use-popover-hover/use-popover-hover.js +24 -0
  64. package/dist/hooks/use-scroll-offset-top/index.d.ts +2 -0
  65. package/dist/hooks/use-scroll-offset-top/index.js +1 -0
  66. package/dist/hooks/use-scroll-offset-top/use-scroll-offset-top.d.ts +28 -0
  67. package/dist/hooks/use-scroll-offset-top/use-scroll-offset-top.js +29 -0
  68. package/dist/hooks/use-set-state/index.d.ts +1 -0
  69. package/dist/hooks/use-set-state/index.js +1 -0
  70. package/dist/hooks/use-set-state/use-set-state.d.ts +32 -0
  71. package/dist/hooks/use-set-state/use-set-state.js +26 -0
  72. package/dist/hooks/use-tabs/index.d.ts +2 -0
  73. package/dist/hooks/use-tabs/index.js +1 -0
  74. package/dist/hooks/use-tabs/use-tabs.d.ts +30 -0
  75. package/dist/hooks/use-tabs/use-tabs.js +16 -0
  76. package/dist/hooks/use-text-input/index.d.ts +2 -0
  77. package/dist/hooks/use-text-input/index.js +1 -0
  78. package/dist/hooks/use-text-input/use-text-input.d.ts +16 -0
  79. package/dist/hooks/use-text-input/use-text-input.js +16 -0
  80. package/dist/index.d.ts +29 -0
  81. package/dist/index.js +2 -0
  82. package/dist/utils/active-link/active-link.d.ts +16 -0
  83. package/dist/utils/active-link/active-link.js +43 -0
  84. package/dist/utils/active-link/index.d.ts +1 -0
  85. package/dist/utils/active-link/index.js +1 -0
  86. package/dist/utils/classes/classes.d.ts +25 -0
  87. package/dist/utils/classes/classes.js +14 -0
  88. package/dist/utils/classes/index.d.ts +1 -0
  89. package/dist/utils/classes/index.js +1 -0
  90. package/dist/utils/color/color.d.ts +67 -0
  91. package/dist/utils/color/color.js +47 -0
  92. package/dist/utils/color/index.d.ts +1 -0
  93. package/dist/utils/color/index.js +1 -0
  94. package/dist/utils/cookies/cookies.d.ts +34 -0
  95. package/dist/utils/cookies/cookies.js +46 -0
  96. package/dist/utils/cookies/index.d.ts +1 -0
  97. package/dist/utils/cookies/index.js +1 -0
  98. package/dist/utils/font/font.d.ts +37 -0
  99. package/dist/utils/font/font.js +20 -0
  100. package/dist/utils/font/index.d.ts +1 -0
  101. package/dist/utils/font/index.js +1 -0
  102. package/dist/utils/index.d.ts +9 -0
  103. package/dist/utils/index.js +17 -0
  104. package/dist/utils/local-storage/index.d.ts +1 -0
  105. package/dist/utils/local-storage/index.js +1 -0
  106. package/dist/utils/local-storage/local-storage.d.ts +55 -0
  107. package/dist/utils/local-storage/local-storage.js +51 -0
  108. package/dist/utils/object/index.d.ts +1 -0
  109. package/dist/utils/object/index.js +1 -0
  110. package/dist/utils/object/object.d.ts +26 -0
  111. package/dist/utils/object/object.js +10 -0
  112. package/dist/utils/url/index.d.ts +1 -0
  113. package/dist/utils/url/index.js +1 -0
  114. package/dist/utils/url/url.d.ts +46 -0
  115. package/dist/utils/url/url.js +28 -0
  116. package/dist/utils/uuidv4/index.d.ts +1 -0
  117. package/dist/utils/uuidv4/index.js +1 -0
  118. package/dist/utils/uuidv4/uuidv4.d.ts +12 -0
  119. package/dist/utils/uuidv4/uuidv4.js +11 -0
  120. package/package.json +87 -0
@@ -0,0 +1,29 @@
1
+ // src/hooks/use-scroll-offset-top/use-scroll-offset-top.ts
2
+ import { useRef, useState, useEffect, useCallback } from "react";
3
+ function useScrollOffsetTop(defaultValue = 0) {
4
+ const elementRef = useRef(null);
5
+ const [offsetTop, setOffsetTop] = useState(false);
6
+ const handleScroll = useCallback(() => {
7
+ const windowScrollY = window.scrollY;
8
+ if (elementRef.current) {
9
+ const elementOffsetTop = elementRef.current.offsetTop;
10
+ setOffsetTop(windowScrollY > elementOffsetTop - defaultValue);
11
+ } else {
12
+ setOffsetTop(windowScrollY > defaultValue);
13
+ }
14
+ }, [defaultValue]);
15
+ useEffect(() => {
16
+ handleScroll();
17
+ window.addEventListener("scroll", handleScroll);
18
+ return () => {
19
+ window.removeEventListener("scroll", handleScroll);
20
+ };
21
+ }, [handleScroll]);
22
+ return {
23
+ elementRef,
24
+ offsetTop
25
+ };
26
+ }
27
+ export {
28
+ useScrollOffsetTop
29
+ };
@@ -0,0 +1 @@
1
+ export { UseSetStateReturn, useSetState } from './use-set-state.js';
@@ -0,0 +1 @@
1
+ export * from './use-set-state';
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Custom hook to manage state with utility functions to set state, set a specific field, and reset state.
3
+ *
4
+ * @param {T} initialState - The initial state value.
5
+ *
6
+ * @returns {UseSetStateReturn<T>} - An object containing:
7
+ * - `state`: The current state.
8
+ * - `onReset`: A function to reset the state to the initial value.
9
+ * - `setState`: A function to update the state.
10
+ * - `setField`: A function to update a specific field in the state.
11
+ *
12
+ * @example
13
+ * const { state, setState, setField, onReset } = useSetState({ name: '', age: 0 });
14
+ *
15
+ * return (
16
+ * <div>
17
+ * <p>Name: {state.name}</p>
18
+ * <p>Age: {state.age}</p>
19
+ * <button onClick={() => setField('name', 'John')}>Set Name</button>
20
+ * <button onClick={onReset}>Reset</button>
21
+ * </div>
22
+ * );
23
+ */
24
+ type UseSetStateReturn<T> = {
25
+ state: T;
26
+ onReset: () => void;
27
+ setState: (updateState: T | Partial<T>) => void;
28
+ setField: (name: keyof T, updateValue: T[keyof T]) => void;
29
+ };
30
+ declare function useSetState<T>(initialState: T): UseSetStateReturn<T>;
31
+
32
+ export { type UseSetStateReturn, useSetState };
@@ -0,0 +1,26 @@
1
+ // src/hooks/use-set-state/use-set-state.ts
2
+ import { useState, useCallback } from "react";
3
+ function useSetState(initialState) {
4
+ const [state, set] = useState(initialState);
5
+ const setState = useCallback((updateState) => {
6
+ set((prevValue) => ({ ...prevValue, ...updateState }));
7
+ }, []);
8
+ const setField = useCallback(
9
+ (name, updateValue) => {
10
+ setState({ [name]: updateValue });
11
+ },
12
+ [setState]
13
+ );
14
+ const onReset = useCallback(() => {
15
+ set(initialState);
16
+ }, [initialState]);
17
+ return {
18
+ state,
19
+ setState,
20
+ setField,
21
+ onReset
22
+ };
23
+ }
24
+ export {
25
+ useSetState
26
+ };
@@ -0,0 +1,2 @@
1
+ export { UseTabsReturn, useTabs } from './use-tabs.js';
2
+ import 'react';
@@ -0,0 +1 @@
1
+ export * from './use-tabs';
@@ -0,0 +1,30 @@
1
+ import { Dispatch, SetStateAction, SyntheticEvent } from 'react';
2
+
3
+ /**
4
+ * Custom hook to manage the state of tabs.
5
+ *
6
+ * @param {string} defaultValue - The initial value of the tab.
7
+ *
8
+ * @returns {UseTabsReturn} - An object containing:
9
+ * - `value`: The current value of the tab.
10
+ * - `setValue`: A function to manually set the value of the tab.
11
+ * - `onChange`: A function to handle the change event when a new tab is selected.
12
+ *
13
+ * @example
14
+ * const { value, onChange } = useTabs('tab1');
15
+ *
16
+ * return (
17
+ * <Tabs value={value} onChange={onChange}>
18
+ * <Tab label="Tab 1" value="tab1" />
19
+ * <Tab label="Tab 2" value="tab2" />
20
+ * </Tabs>
21
+ * );
22
+ */
23
+ type UseTabsReturn = {
24
+ value: string;
25
+ setValue: Dispatch<SetStateAction<string>>;
26
+ onChange: (event: SyntheticEvent, newValue: string) => void;
27
+ };
28
+ declare function useTabs(defaultValue: string): UseTabsReturn;
29
+
30
+ export { type UseTabsReturn, useTabs };
@@ -0,0 +1,16 @@
1
+ // src/hooks/use-tabs/use-tabs.ts
2
+ import { useState, useCallback } from "react";
3
+ function useTabs(defaultValue) {
4
+ const [value, setValue] = useState(defaultValue);
5
+ const onChange = useCallback((event, newValue) => {
6
+ setValue(newValue);
7
+ }, []);
8
+ return {
9
+ value,
10
+ setValue,
11
+ onChange
12
+ };
13
+ }
14
+ export {
15
+ useTabs
16
+ };
@@ -0,0 +1,2 @@
1
+ export { UseTextInputReturn, useTextInput } from './use-text-input.js';
2
+ import 'react';
@@ -0,0 +1 @@
1
+ export * from './use-text-input';
@@ -0,0 +1,16 @@
1
+ import { Dispatch, SetStateAction } from 'react';
2
+
3
+ /**
4
+ * Custom hook to manage text input state.
5
+ *
6
+ * @param {string} [defaultValue=''] - The default value for the input.
7
+ * @returns {UseTextInputReturn} The current value, change handler, and setValue function.
8
+ */
9
+ type UseTextInputReturn = {
10
+ value: string;
11
+ setValue: Dispatch<SetStateAction<string>>;
12
+ onChange: (event: React.ChangeEvent<HTMLInputElement>) => void;
13
+ };
14
+ declare function useTextInput(defaultValue?: string): UseTextInputReturn;
15
+
16
+ export { type UseTextInputReturn, useTextInput };
@@ -0,0 +1,16 @@
1
+ // src/hooks/use-text-input/use-text-input.ts
2
+ import { useState, useCallback } from "react";
3
+ function useTextInput(defaultValue = "") {
4
+ const [value, setValue] = useState(defaultValue);
5
+ const onChange = useCallback((event) => {
6
+ setValue(event.target.value);
7
+ }, []);
8
+ return {
9
+ value,
10
+ setValue,
11
+ onChange
12
+ };
13
+ }
14
+ export {
15
+ useTextInput
16
+ };
@@ -0,0 +1,29 @@
1
+ export { hasParams, isExternalLink, removeLastSlash, removeParams } from './utils/url/url.js';
2
+ export { pxToRem, remToPx, setFont } from './utils/font/font.js';
3
+ export { ChannelPalette, InputPalette, createPaletteChannel, hexToRgbChannel, varAlpha } from './utils/color/color.js';
4
+ export { hasKeys } from './utils/object/object.js';
5
+ export { uuidv4 } from './utils/uuidv4/uuidv4.js';
6
+ export { StateProps, mergeClasses } from './utils/classes/classes.js';
7
+ export { getCookie, removeCookie, setCookie } from './utils/cookies/cookies.js';
8
+ export { isActiveLink } from './utils/active-link/active-link.js';
9
+ export { getStorage, localStorageAvailable, localStorageGetItem, removeStorage, setStorage } from './utils/local-storage/local-storage.js';
10
+ export { UseTabsReturn, useTabs } from './hooks/use-tabs/use-tabs.js';
11
+ export { UseBooleanReturn, useBoolean } from './hooks/use-boolean/use-boolean.js';
12
+ export { UsePopoverReturn, usePopover } from './hooks/use-popover/use-popover.js';
13
+ export { UseCookiesReturn, useCookies } from './hooks/use-cookies/use-cookies.js';
14
+ export { UseDebounceReturn, useDebounce } from './hooks/use-debounce/use-debounce.js';
15
+ export { UseSetStateReturn, useSetState } from './hooks/use-set-state/use-set-state.js';
16
+ export { UseIsClientReturn, useIsClient } from './hooks/use-is-client/use-is-client.js';
17
+ export { UseTextInputReturn, useTextInput } from './hooks/use-text-input/use-text-input.js';
18
+ export { UseBackToTopReturn, useBackToTop } from './hooks/use-back-to-top/use-back-to-top.js';
19
+ export { UseClientRectReturn, useClientRect } from './hooks/use-client-rect/use-client-rect.js';
20
+ export { UseMultiSelectReturn, updateSelectedItems, useMultiSelect } from './hooks/use-multi-select/use-multi-select.js';
21
+ export { UseDoubleClickReturn, useDoubleClick } from './hooks/use-double-click/use-double-click.js';
22
+ export { UseLocalStorageReturn, useLocalStorage } from './hooks/use-local-storage/use-local-storage.js';
23
+ export { usePopoverHover } from './hooks/use-popover-hover/use-popover-hover.js';
24
+ export { UseCountdownDateReturn, useCountdownDate } from './hooks/use-countdown-date/use-countdown-date.js';
25
+ export { useEventListener } from './hooks/use-event-listener/use-event-listener.js';
26
+ export { UseScrollOffsetTopReturn, useScrollOffsetTop } from './hooks/use-scroll-offset-top/use-scroll-offset-top.js';
27
+ export { UseCountdownSecondsReturn, useCountdownSeconds } from './hooks/use-countdown-seconds/use-countdown-seconds.js';
28
+ export { CopiedValue, CopyFn, UseCopyToClipboardReturn, useCopyToClipboard } from './hooks/use-copy-to-clipboard/use-copy-to-clipboard.js';
29
+ import 'react';
package/dist/index.js ADDED
@@ -0,0 +1,2 @@
1
+ export * from './utils';
2
+ export * from './hooks';
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Determines if a given link is active based on the current pathname.
3
+ *
4
+ * @param {string} pathnameProps - The current pathname.
5
+ * @param {string} itemPath - The path of the item to check.
6
+ * @param {boolean} [deep=true] - Whether to perform a deep check, including child paths and parameters.
7
+ *
8
+ * @returns {boolean} - True if the link is active, false otherwise.
9
+ *
10
+ * @example
11
+ * const isActive = isActiveLink('/dashboard/user', '/dashboard/user', true);
12
+ * console.log(isActive); // true
13
+ */
14
+ declare function isActiveLink(pathnameProps: string, itemPath: string, deep?: boolean): boolean;
15
+
16
+ export { isActiveLink };
@@ -0,0 +1,43 @@
1
+ // src/utils/url/url.ts
2
+ var hasParams = (url) => {
3
+ const queryString = url.split("?")[1];
4
+ return queryString ? new URLSearchParams(queryString).toString().length > 0 : false;
5
+ };
6
+ function removeLastSlash(pathname) {
7
+ if (pathname !== "/" && pathname.endsWith("/")) {
8
+ return pathname.slice(0, -1);
9
+ }
10
+ return pathname;
11
+ }
12
+ function removeParams(url) {
13
+ try {
14
+ const urlObj = new URL(url, window.location.origin);
15
+ return removeLastSlash(urlObj.pathname);
16
+ } catch {
17
+ return url;
18
+ }
19
+ }
20
+ function isExternalLink(url) {
21
+ return url.startsWith("http");
22
+ }
23
+
24
+ // src/utils/active-link/active-link.ts
25
+ function isActiveLink(pathnameProps, itemPath, deep = true) {
26
+ const pathname = removeLastSlash(pathnameProps);
27
+ const pathHasParams = hasParams(itemPath);
28
+ const notValid = itemPath.startsWith("#") || isExternalLink(itemPath);
29
+ if (notValid) {
30
+ return false;
31
+ }
32
+ const isDeep = deep || pathHasParams;
33
+ if (isDeep) {
34
+ const defaultActive = pathname.includes(itemPath);
35
+ const originItemPath = removeParams(itemPath);
36
+ const hasParamsActive = pathHasParams && originItemPath === pathname;
37
+ return defaultActive || hasParamsActive;
38
+ }
39
+ return pathname === itemPath;
40
+ }
41
+ export {
42
+ isActiveLink
43
+ };
@@ -0,0 +1 @@
1
+ export { isActiveLink } from './active-link.js';
@@ -0,0 +1 @@
1
+ export * from './active-link';
@@ -0,0 +1,25 @@
1
+ type StateProps = {
2
+ [key: string]: boolean | undefined | [boolean, string];
3
+ };
4
+ /**
5
+ * Merges class names with state-based class names.
6
+ *
7
+ * @param {string | string[] | null} className - The base class name(s).
8
+ * @param {StateProps} state - The state object containing boolean or [boolean, string] pairs.
9
+ * @returns {string} - The merged class names.
10
+ *
11
+ * @example
12
+ *
13
+ * const classNames = mergeClasses('item__base', {
14
+ * ['active__class']: true,
15
+ * ['open__class']: true,
16
+ * ['disabled__class']: false,
17
+ * ['hover__class']: undefined,
18
+ * });
19
+ *
20
+ * console.log(classNames);
21
+ * Output: 'item__base active__class open__class'
22
+ */
23
+ declare function mergeClasses(className?: string | (string | undefined)[] | null, state?: StateProps): string;
24
+
25
+ export { type StateProps, mergeClasses };
@@ -0,0 +1,14 @@
1
+ // src/utils/classes/classes.ts
2
+ function mergeClasses(className, state) {
3
+ const classList = className ? Array.isArray(className) ? className : [className] : [];
4
+ const dynamicStateClassesArray = Object.entries(state || {}).filter(([key, value]) => value !== void 0 && value !== false).map(([key, value]) => {
5
+ if (Array.isArray(value)) {
6
+ return value[0] ? value[1] : "";
7
+ }
8
+ return value ? key : "";
9
+ }).filter(Boolean);
10
+ return [...classList.filter(Boolean), ...dynamicStateClassesArray].join(" ");
11
+ }
12
+ export {
13
+ mergeClasses
14
+ };
@@ -0,0 +1 @@
1
+ export { StateProps, mergeClasses } from './classes.js';
@@ -0,0 +1 @@
1
+ export * from './classes';
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Converts a hex color to RGB channels.
3
+ *
4
+ * @param {string} hexColor - The hex color string.
5
+ * @returns {string} - The RGB channels string.
6
+ * @throws {Error} - Throws an error if the hex color is invalid.
7
+ *
8
+ * @example
9
+ * const rgbChannel = hexToRgbChannel("#C8FAD6");
10
+ * console.log(rgbChannel); // "200 250 214"
11
+ */
12
+ declare function hexToRgbChannel(hexColor: string): string;
13
+ /**
14
+ * Converts a hex palette color to RGB channels palette.
15
+ *
16
+ * @typedef {Object} InputPalette - The input palette object with hex color strings.
17
+ * @property {string} lighter - The lighter hex color.
18
+ * @property {string} light - The light hex color.
19
+ * @property {string} main - The main hex color.
20
+ *
21
+ * @typedef {Object} ChannelPalette - The output palette object with RGB channels.
22
+ * @property {string} lighterChannel - The lighter RGB channels.
23
+ * @property {string} lightChannel - The light RGB channels.
24
+ * @property {string} mainChannel - The main RGB channels.
25
+ *
26
+ * @param {InputPalette} hexPalette - The input palette object.
27
+ * @returns {ChannelPalette} - The output palette object with RGB channels.
28
+ *
29
+ * @example
30
+ * const palette = createPaletteChannel({
31
+ * lighter: "#C8FAD6",
32
+ * light: "#5BE49B",
33
+ * main: "#00A76F",
34
+ * });
35
+ * console.log(palette);
36
+ * // {
37
+ * // lighter: "#C8FAD6",
38
+ * // light: "#5BE49B",
39
+ * // main: "#00A76F",
40
+ * // lighterChannel: "200 250 214",
41
+ * // lightChannel: "91 228 155",
42
+ * // mainChannel: "0 167 111",
43
+ * // }
44
+ */
45
+ type InputPalette = Record<string, string | undefined>;
46
+ type ChannelPalette<T extends InputPalette> = T & {
47
+ [K in keyof T as `${string & K}Channel`]: string;
48
+ };
49
+ declare function createPaletteChannel<T extends InputPalette>(hexPalette: T): ChannelPalette<T>;
50
+ /**
51
+ * Adds an alpha channel to a color.
52
+ *
53
+ * @param {string} color - The color string in RGB channels or CSS variable format.
54
+ * @param {number} [opacity=1] - The opacity value.
55
+ * @returns {string} - The color string with alpha channel.
56
+ * @throws {Error} - Throws an error if the color format is unsupported.
57
+ *
58
+ * @example
59
+ * const rgbaColor = varAlpha('200 250 214', 0.8);
60
+ * console.log(rgbaColor); // "rgba(200 250 214 / 0.8)"
61
+ *
62
+ * const rgbaVarColor = varAlpha('var(--palette-primary-lighterChannel)', 0.8);
63
+ * console.log(rgbaVarColor); // "rgba(var(--palette-primary-lighterChannel) / 0.8)"
64
+ */
65
+ declare function varAlpha(color: string, opacity?: number): string;
66
+
67
+ export { type ChannelPalette, type InputPalette, createPaletteChannel, hexToRgbChannel, varAlpha };
@@ -0,0 +1,47 @@
1
+ // src/utils/color/color.ts
2
+ function hexToRgbChannel(hexColor) {
3
+ if (!hexColor) {
4
+ throw new Error("Hex color is undefined!");
5
+ }
6
+ if (!/^#[0-9A-F]{6}$/i.test(hexColor)) {
7
+ throw new Error(`Invalid hex color: ${hexColor}`);
8
+ }
9
+ const r = parseInt(hexColor.substring(1, 3), 16);
10
+ const g = parseInt(hexColor.substring(3, 5), 16);
11
+ const b = parseInt(hexColor.substring(5, 7), 16);
12
+ return `${r} ${g} ${b}`;
13
+ }
14
+ function createPaletteChannel(hexPalette) {
15
+ const channelPalette = {};
16
+ Object.entries(hexPalette).forEach(([key, value]) => {
17
+ if (value) {
18
+ channelPalette[`${key}Channel`] = hexToRgbChannel(value);
19
+ }
20
+ });
21
+ return { ...hexPalette, ...channelPalette };
22
+ }
23
+ function varAlpha(color, opacity = 1) {
24
+ if (!color) {
25
+ throw new Error("[Alpha]: Color is undefined!");
26
+ }
27
+ const unsupported = color.startsWith("#") || color.startsWith("rgb") || color.startsWith("rgba") || !color.includes("var") && color.includes("Channel");
28
+ if (unsupported) {
29
+ throw new Error(
30
+ `[Alpha]: Unsupported color format "${color}".
31
+ Supported formats are:
32
+ - RGB channels: "0 184 217".
33
+ - CSS variables with "Channel" prefix: "var(--palette-common-blackChannel, #000000)".
34
+ Unsupported formats are:
35
+ - Hex: "#00B8D9".
36
+ - RGB: "rgb(0, 184, 217)".
37
+ - RGBA: "rgba(0, 184, 217, 1)".
38
+ `
39
+ );
40
+ }
41
+ return `rgba(${color} / ${opacity})`;
42
+ }
43
+ export {
44
+ createPaletteChannel,
45
+ hexToRgbChannel,
46
+ varAlpha
47
+ };
@@ -0,0 +1 @@
1
+ export { ChannelPalette, InputPalette, createPaletteChannel, hexToRgbChannel, varAlpha } from './color.js';
@@ -0,0 +1 @@
1
+ export * from './color';
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Retrieves a cookie value by key.
3
+ *
4
+ * @param {string} key - The key of the cookie to retrieve.
5
+ * @returns {any | null} - The parsed value of the cookie, or null if not found or an error occurs.
6
+ *
7
+ * @example
8
+ * const user = getCookie('user');
9
+ * console.log(user); // { name: 'John', age: 30 }
10
+ */
11
+ declare function getCookie(key: string): any | null;
12
+ /**
13
+ * Sets a cookie with a specified key, value, and expiration time.
14
+ *
15
+ * @template T
16
+ * @param {string} key - The key of the cookie to set.
17
+ * @param {T} value - The value of the cookie to set.
18
+ * @param {number} [daysUntilExpiration=0] - The number of days until the cookie expires. Defaults to session cookie if not set.
19
+ *
20
+ * @example
21
+ * setCookie('user', { name: 'John', age: 30 }, 7);
22
+ */
23
+ declare function setCookie<T>(key: string, value: T, daysUntilExpiration?: number): void;
24
+ /**
25
+ * Removes a cookie by key.
26
+ *
27
+ * @param {string} key - The key of the cookie to remove.
28
+ *
29
+ * @example
30
+ * removeCookie('user');
31
+ */
32
+ declare function removeCookie(key: string): void;
33
+
34
+ export { getCookie, removeCookie, setCookie };
@@ -0,0 +1,46 @@
1
+ // src/utils/cookies/cookies.ts
2
+ function getCookie(key) {
3
+ try {
4
+ const keyName = `${key}=`;
5
+ const cDecoded = decodeURIComponent(document.cookie);
6
+ const cArr = cDecoded.split("; ");
7
+ for (const val of cArr) {
8
+ if (val.startsWith(keyName)) {
9
+ const cookieValue = val.substring(keyName.length);
10
+ try {
11
+ return JSON.parse(cookieValue);
12
+ } catch {
13
+ return cookieValue;
14
+ }
15
+ }
16
+ }
17
+ } catch {
18
+ return null;
19
+ }
20
+ return null;
21
+ }
22
+ function setCookie(key, value, daysUntilExpiration = 0) {
23
+ try {
24
+ const serializedValue = encodeURIComponent(JSON.stringify(value));
25
+ let cookieOptions = `${key}=${serializedValue}; path=/`;
26
+ if (daysUntilExpiration > 0) {
27
+ const expirationDate = new Date(Date.now() + daysUntilExpiration * 24 * 60 * 60 * 1e3);
28
+ cookieOptions += `; expires=${expirationDate.toUTCString()}`;
29
+ }
30
+ document.cookie = cookieOptions;
31
+ } catch (error) {
32
+ console.error("Error while setting cookie:", error);
33
+ }
34
+ }
35
+ function removeCookie(key) {
36
+ try {
37
+ document.cookie = `${key}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;`;
38
+ } catch (error) {
39
+ console.error("Error while removing cookie:", error);
40
+ }
41
+ }
42
+ export {
43
+ getCookie,
44
+ removeCookie,
45
+ setCookie
46
+ };
@@ -0,0 +1 @@
1
+ export { getCookie, removeCookie, setCookie } from './cookies.js';
@@ -0,0 +1 @@
1
+ export * from './cookies';
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Sets the font family.
3
+ *
4
+ * @param {string} [fontName] - The name of the font to set.
5
+ * @returns {string} - The complete font family string.
6
+ *
7
+ * @example
8
+ * const fontFamily = setFont('CustomFont');
9
+ * console.log(fontFamily); // "CustomFont, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol""
10
+ */
11
+ declare function setFont(fontName?: string): string;
12
+ /**
13
+ * Converts rem to px.
14
+ *
15
+ * @param {string} value - The rem value to convert.
16
+ * @returns {number} - The equivalent value in pixels.
17
+ * @throws {Error} - Throws an error if the rem value is invalid.
18
+ *
19
+ * @example
20
+ * const pixels = remToPx('1.5rem');
21
+ * console.log(pixels); // 24
22
+ */
23
+ declare function remToPx(value: string): number;
24
+ /**
25
+ * Converts px to rem.
26
+ *
27
+ * @param {number} value - The pixel value to convert.
28
+ * @returns {string} - The equivalent value in rem.
29
+ * @throws {Error} - Throws an error if the pixel value is invalid.
30
+ *
31
+ * @example
32
+ * const remValue = pxToRem(24);
33
+ * console.log(remValue); // "1.5rem"
34
+ */
35
+ declare function pxToRem(value: number): string;
36
+
37
+ export { pxToRem, remToPx, setFont };
@@ -0,0 +1,20 @@
1
+ // src/utils/font/font.ts
2
+ var DEFAULT_FONT_FAMILY = `-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"`;
3
+ function setFont(fontName) {
4
+ return fontName ? `"${fontName}", ${DEFAULT_FONT_FAMILY}` : DEFAULT_FONT_FAMILY;
5
+ }
6
+ function remToPx(value) {
7
+ const remValue = parseFloat(value);
8
+ return Math.round(remValue * 16);
9
+ }
10
+ function pxToRem(value) {
11
+ if (typeof value !== "number" || isNaN(value)) {
12
+ throw new Error(`Invalid pixel value: ${value}`);
13
+ }
14
+ return `${value / 16}rem`;
15
+ }
16
+ export {
17
+ pxToRem,
18
+ remToPx,
19
+ setFont
20
+ };
@@ -0,0 +1 @@
1
+ export { pxToRem, remToPx, setFont } from './font.js';
@@ -0,0 +1 @@
1
+ export * from './font';
@@ -0,0 +1,9 @@
1
+ export { hasParams, isExternalLink, removeLastSlash, removeParams } from './url/url.js';
2
+ export { pxToRem, remToPx, setFont } from './font/font.js';
3
+ export { ChannelPalette, InputPalette, createPaletteChannel, hexToRgbChannel, varAlpha } from './color/color.js';
4
+ export { hasKeys } from './object/object.js';
5
+ export { uuidv4 } from './uuidv4/uuidv4.js';
6
+ export { StateProps, mergeClasses } from './classes/classes.js';
7
+ export { getCookie, removeCookie, setCookie } from './cookies/cookies.js';
8
+ export { isActiveLink } from './active-link/active-link.js';
9
+ export { getStorage, localStorageAvailable, localStorageGetItem, removeStorage, setStorage } from './local-storage/local-storage.js';
@@ -0,0 +1,17 @@
1
+ export * from './url';
2
+
3
+ export * from './font';
4
+
5
+ export * from './color';
6
+
7
+ export * from './object';
8
+
9
+ export * from './uuidv4';
10
+
11
+ export * from './classes';
12
+
13
+ export * from './cookies';
14
+
15
+ export * from './active-link';
16
+
17
+ export * from './local-storage';
@@ -0,0 +1 @@
1
+ export { getStorage, localStorageAvailable, localStorageGetItem, removeStorage, setStorage } from './local-storage.js';
@@ -0,0 +1 @@
1
+ export * from './local-storage';