UNPKG

react-native-uikit-colors

Version:

react native ui kit colors

369 lines (364 loc) 11.9 kB
import { __commonJS, __toESM, colorVariants, palette } from "./chunk-RAMTF5KH.mjs"; // ../../node_modules/.pnpm/lodash.debounce@4.0.8/node_modules/lodash.debounce/index.js var require_lodash = __commonJS({ "../../node_modules/.pnpm/lodash.debounce@4.0.8/node_modules/lodash.debounce/index.js"(exports, module) { "use strict"; var FUNC_ERROR_TEXT = "Expected a function"; var NAN = 0 / 0; var symbolTag = "[object Symbol]"; var reTrim = /^\s+|\s+$/g; var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; var reIsBinary = /^0b[01]+$/i; var reIsOctal = /^0o[0-7]+$/i; var freeParseInt = parseInt; var freeGlobal = typeof global == "object" && global && global.Object === Object && global; var freeSelf = typeof self == "object" && self && self.Object === Object && self; var root = freeGlobal || freeSelf || Function("return this")(); var objectProto = Object.prototype; var objectToString = objectProto.toString; var nativeMax = Math.max; var nativeMin = Math.min; var now = function() { return root.Date.now(); }; function debounce2(func, wait, options) { var lastArgs, lastThis, maxWait, result, timerId, lastCallTime, lastInvokeTime = 0, leading = false, maxing = false, trailing = true; if (typeof func != "function") { throw new TypeError(FUNC_ERROR_TEXT); } wait = toNumber(wait) || 0; if (isObject(options)) { leading = !!options.leading; maxing = "maxWait" in options; maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait; trailing = "trailing" in options ? !!options.trailing : trailing; } function invokeFunc(time) { var args = lastArgs, thisArg = lastThis; lastArgs = lastThis = void 0; lastInvokeTime = time; result = func.apply(thisArg, args); return result; } function leadingEdge(time) { lastInvokeTime = time; timerId = setTimeout(timerExpired, wait); return leading ? invokeFunc(time) : result; } function remainingWait(time) { var timeSinceLastCall = time - lastCallTime, timeSinceLastInvoke = time - lastInvokeTime, result2 = wait - timeSinceLastCall; return maxing ? nativeMin(result2, maxWait - timeSinceLastInvoke) : result2; } function shouldInvoke(time) { var timeSinceLastCall = time - lastCallTime, timeSinceLastInvoke = time - lastInvokeTime; return lastCallTime === void 0 || timeSinceLastCall >= wait || timeSinceLastCall < 0 || maxing && timeSinceLastInvoke >= maxWait; } function timerExpired() { var time = now(); if (shouldInvoke(time)) { return trailingEdge(time); } timerId = setTimeout(timerExpired, remainingWait(time)); } function trailingEdge(time) { timerId = void 0; if (trailing && lastArgs) { return invokeFunc(time); } lastArgs = lastThis = void 0; return result; } function cancel() { if (timerId !== void 0) { clearTimeout(timerId); } lastInvokeTime = 0; lastArgs = lastCallTime = lastThis = timerId = void 0; } function flush() { return timerId === void 0 ? result : trailingEdge(now()); } function debounced() { var time = now(), isInvoking = shouldInvoke(time); lastArgs = arguments; lastThis = this; lastCallTime = time; if (isInvoking) { if (timerId === void 0) { return leadingEdge(lastCallTime); } if (maxing) { timerId = setTimeout(timerExpired, wait); return invokeFunc(lastCallTime); } } if (timerId === void 0) { timerId = setTimeout(timerExpired, wait); } return result; } debounced.cancel = cancel; debounced.flush = flush; return debounced; } function isObject(value) { var type = typeof value; return !!value && (type == "object" || type == "function"); } function isObjectLike(value) { return !!value && typeof value == "object"; } function isSymbol(value) { return typeof value == "symbol" || isObjectLike(value) && objectToString.call(value) == symbolTag; } function toNumber(value) { if (typeof value == "number") { return value; } if (isSymbol(value)) { return NAN; } if (isObject(value)) { var other = typeof value.valueOf == "function" ? value.valueOf() : value; value = isObject(other) ? other + "" : other; } if (typeof value != "string") { return value === 0 ? value : +value; } value = value.replace(reTrim, ""); var isBinary = reIsBinary.test(value); return isBinary || reIsOctal.test(value) ? freeParseInt(value.slice(2), isBinary ? 2 : 8) : reIsBadHex.test(value) ? NAN : +value; } module.exports = debounce2; } }); // src/web.ts import { useInsertionEffect } from "react"; // ../../node_modules/.pnpm/usehooks-ts@3.1.0_react@19.0.0/node_modules/usehooks-ts/dist/index.js var import_lodash = __toESM(require_lodash(), 1); import { useState, useCallback, useLayoutEffect, useEffect, useRef, useMemo } from "react"; var useIsomorphicLayoutEffect = typeof window !== "undefined" ? useLayoutEffect : useEffect; function useEventListener(eventName, handler, element, options) { const savedHandler = useRef(handler); useIsomorphicLayoutEffect(() => { savedHandler.current = handler; }, [handler]); useEffect(() => { const targetElement = (element == null ? void 0 : element.current) ?? window; if (!(targetElement && targetElement.addEventListener)) return; const listener = (event) => { savedHandler.current(event); }; targetElement.addEventListener(eventName, listener, options); return () => { targetElement.removeEventListener(eventName, listener, options); }; }, [eventName, element, options]); } function useEventCallback(fn) { const ref = useRef(() => { throw new Error("Cannot call an event handler while rendering."); }); useIsomorphicLayoutEffect(() => { ref.current = fn; }, [fn]); return useCallback((...args) => { var _a; return (_a = ref.current) == null ? void 0 : _a.call(ref, ...args); }, [ref]); } var IS_SERVER = typeof window === "undefined"; function useLocalStorage(key, initialValue, options = {}) { const { initializeWithValue = true } = options; const serializer = useCallback( (value) => { if (options.serializer) { return options.serializer(value); } return JSON.stringify(value); }, [options] ); const deserializer = useCallback( (value) => { if (options.deserializer) { return options.deserializer(value); } if (value === "undefined") { return void 0; } const defaultValue = initialValue instanceof Function ? initialValue() : initialValue; let parsed; try { parsed = JSON.parse(value); } catch (error) { console.error("Error parsing JSON:", error); return defaultValue; } return parsed; }, [options, initialValue] ); const readValue = useCallback(() => { const initialValueToUse = initialValue instanceof Function ? initialValue() : initialValue; if (IS_SERVER) { return initialValueToUse; } try { const raw = window.localStorage.getItem(key); return raw ? deserializer(raw) : initialValueToUse; } catch (error) { console.warn(`Error reading localStorage key \u201C${key}\u201D:`, error); return initialValueToUse; } }, [initialValue, key, deserializer]); const [storedValue, setStoredValue] = useState(() => { if (initializeWithValue) { return readValue(); } return initialValue instanceof Function ? initialValue() : initialValue; }); const setValue = useEventCallback((value) => { if (IS_SERVER) { console.warn( `Tried setting localStorage key \u201C${key}\u201D even though environment is not a client` ); } try { const newValue = value instanceof Function ? value(readValue()) : value; window.localStorage.setItem(key, serializer(newValue)); setStoredValue(newValue); window.dispatchEvent(new StorageEvent("local-storage", { key })); } catch (error) { console.warn(`Error setting localStorage key \u201C${key}\u201D:`, error); } }); const removeValue = useEventCallback(() => { if (IS_SERVER) { console.warn( `Tried removing localStorage key \u201C${key}\u201D even though environment is not a client` ); } const defaultValue = initialValue instanceof Function ? initialValue() : initialValue; window.localStorage.removeItem(key); setStoredValue(defaultValue); window.dispatchEvent(new StorageEvent("local-storage", { key })); }); useEffect(() => { setStoredValue(readValue()); }, [key]); const handleStorageChange = useCallback( (event) => { if (event.key && event.key !== key) { return; } setStoredValue(readValue()); }, [key, readValue] ); useEventListener("storage", handleStorageChange); useEventListener("local-storage", handleStorageChange); return [storedValue, setValue, removeValue]; } var IS_SERVER2 = typeof window === "undefined"; function useMediaQuery(query, { defaultValue = false, initializeWithValue = true } = {}) { const getMatches = (query2) => { if (IS_SERVER2) { return defaultValue; } return window.matchMedia(query2).matches; }; const [matches, setMatches] = useState(() => { if (initializeWithValue) { return getMatches(query); } return defaultValue; }); function handleChange() { setMatches(getMatches(query)); } useIsomorphicLayoutEffect(() => { const matchMedia = window.matchMedia(query); handleChange(); if (matchMedia.addListener) { matchMedia.addListener(handleChange); } else { matchMedia.addEventListener("change", handleChange); } return () => { if (matchMedia.removeListener) { matchMedia.removeListener(handleChange); } else { matchMedia.removeEventListener("change", handleChange); } }; }, [query]); return matches; } var COLOR_SCHEME_QUERY = "(prefers-color-scheme: dark)"; var LOCAL_STORAGE_KEY = "usehooks-ts-dark-mode"; function useDarkMode(options = {}) { const { defaultValue, localStorageKey = LOCAL_STORAGE_KEY, initializeWithValue = true } = options; const isDarkOS = useMediaQuery(COLOR_SCHEME_QUERY, { initializeWithValue, defaultValue }); const [isDarkMode, setDarkMode] = useLocalStorage( localStorageKey, defaultValue ?? isDarkOS ?? false, { initializeWithValue } ); useIsomorphicLayoutEffect(() => { if (isDarkOS !== isDarkMode) { setDarkMode(isDarkOS); } }, [isDarkOS]); return { isDarkMode, toggle: () => { setDarkMode((prev) => !prev); }, enable: () => { setDarkMode(true); }, disable: () => { setDarkMode(false); }, set: (value) => { setDarkMode(value); } }; } // src/web.ts var useCSSInjection = () => { const isDark = useDarkMode().isDarkMode; useInsertionEffect(() => { const style = document.createElement("style"); const vars1 = colorVariants[isDark ? "dark" : "light"]; const vars2 = palette[isDark ? "dark" : "light"]; style.innerHTML = `:root {${[ ...Object.entries(vars1), ...Object.entries(vars2) ].map(([key, value]) => `${key}: ${value};`).join("\n")}}`; document.head.append(style); return () => { style.remove(); }; }, [isDark]); }; export { useCSSInjection };