breakpointer
Version:
a lightweight React library for real-time breakpoint detection. supports custom and default tailwind breakpoints.
1 lines • 33.2 kB
Source Map (JSON)
{"version":3,"sources":["../src/index.ts","../node_modules/goober/dist/goober.modern.js","../src/components/index.ts","../src/components/breakpointer.provider.tsx","../src/core/utils.ts","../src/contexts/breakPoint.context.tsx","../src/core/constants/breakpoints.ts","../src/core/unit.parser.ts","../src/components/breakpointer.indicator.tsx","../src/hooks/useBreakpointer.ts","../node_modules/shared/src/utils.ts","../node_modules/lucide-react/src/defaultAttributes.ts","../node_modules/lucide-react/src/Icon.ts","../node_modules/lucide-react/src/createLucideIcon.ts","../node_modules/lucide-react/src/icons/laptop.ts","../node_modules/lucide-react/src/icons/monitor.ts","../node_modules/lucide-react/src/icons/smartphone.ts","../node_modules/lucide-react/src/icons/tablet-smartphone.ts","../node_modules/lucide-react/src/icons/tablet.ts","../node_modules/lucide-react/src/icons/tv.ts"],"sourcesContent":["export * from \"./components/index\"\r\nexport { useBreakpointer } from \"./hooks/useBreakpointer\"","let e={data:\"\"},t=t=>\"object\"==typeof window?((t?t.querySelector(\"#_goober\"):window._goober)||Object.assign((t||document.head).appendChild(document.createElement(\"style\")),{innerHTML:\" \",id:\"_goober\"})).firstChild:t||e,r=e=>{let r=t(e),l=r.data;return r.data=\"\",l},l=/(?:([\\u0080-\\uFFFF\\w-%@]+) *:? *([^{;]+?);|([^;}{]*?) *{)|(}\\s*)/g,a=/\\/\\*[^]*?\\*\\/| +/g,n=/\\n+/g,o=(e,t)=>{let r=\"\",l=\"\",a=\"\";for(let n in e){let c=e[n];\"@\"==n[0]?\"i\"==n[1]?r=n+\" \"+c+\";\":l+=\"f\"==n[1]?o(c,n):n+\"{\"+o(c,\"k\"==n[1]?\"\":t)+\"}\":\"object\"==typeof c?l+=o(c,t?t.replace(/([^,])+/g,e=>n.replace(/([^,]*:\\S+\\([^)]*\\))|([^,])+/g,t=>/&/.test(t)?t.replace(/&/g,e):e?e+\" \"+t:t)):n):null!=c&&(n=/^--/.test(n)?n:n.replace(/[A-Z]/g,\"-$&\").toLowerCase(),a+=o.p?o.p(n,c):n+\":\"+c+\";\")}return r+(t&&a?t+\"{\"+a+\"}\":a)+l},c={},s=e=>{if(\"object\"==typeof e){let t=\"\";for(let r in e)t+=r+s(e[r]);return t}return e},i=(e,t,r,i,p)=>{let u=s(e),d=c[u]||(c[u]=(e=>{let t=0,r=11;for(;t<e.length;)r=101*r+e.charCodeAt(t++)>>>0;return\"go\"+r})(u));if(!c[d]){let t=u!==e?e:(e=>{let t,r,o=[{}];for(;t=l.exec(e.replace(a,\"\"));)t[4]?o.shift():t[3]?(r=t[3].replace(n,\" \").trim(),o.unshift(o[0][r]=o[0][r]||{})):o[0][t[1]]=t[2].replace(n,\" \").trim();return o[0]})(e);c[d]=o(p?{[\"@keyframes \"+d]:t}:t,r?\"\":\".\"+d)}let f=r&&c.g?c.g:null;return r&&(c.g=c[d]),((e,t,r,l)=>{l?t.data=t.data.replace(l,e):-1===t.data.indexOf(e)&&(t.data=r?e+t.data:t.data+e)})(c[d],t,i,f),d},p=(e,t,r)=>e.reduce((e,l,a)=>{let n=t[a];if(n&&n.call){let e=n(r),t=e&&e.props&&e.props.className||/^go/.test(e)&&e;n=t?\".\"+t:e&&\"object\"==typeof e?e.props?\"\":o(e,\"\"):!1===e?\"\":e}return e+l+(null==n?\"\":n)},\"\");function u(e){let r=this||{},l=e.call?e(r.p):e;return i(l.unshift?l.raw?p(l,[].slice.call(arguments,1),r.p):l.reduce((e,t)=>Object.assign(e,t&&t.call?t(r.p):t),{}):l,t(r.target),r.g,r.o,r.k)}let d,f,g,b=u.bind({g:1}),h=u.bind({k:1});function m(e,t,r,l){o.p=t,d=e,f=r,g=l}function j(e,t){let r=this||{};return function(){let l=arguments;function a(n,o){let c=Object.assign({},n),s=c.className||a.className;r.p=Object.assign({theme:f&&f()},c),r.o=/ *go\\d+/.test(s),c.className=u.apply(r,l)+(s?\" \"+s:\"\"),t&&(c.ref=o);let i=e;return e[0]&&(i=c.as||e,delete c.as),g&&i[0]&&g(c),d(i,c)}return t?t(a):a}}export{u as css,r as extractCss,b as glob,h as keyframes,m as setup,j as styled};\n","import { setup } from \"goober\"\r\nimport { createElement } from \"react\"\r\n\r\nsetup(createElement);\r\n\r\nexport { BreakpointerProvider } from \"./breakpointer.provider\"","import React, { useCallback, useEffect, useState } from \"react\";\r\nimport { debounce } from \"../core/utils\";\r\nimport BreakpointerContext from \"../contexts/breakPoint.context\";\r\nimport { breakpointsConstants } from \"../core/constants/breakpoints\";\r\nimport { parseUnit } from \"../core/unit.parser\";\r\nimport { BreakpointerIndicator, BreakpointerIndicatorProps } from \"./breakpointer.indicator\";\r\n\r\ntype BreakpointProviderProps = {\r\n children: React.ReactNode,\r\n breakpointsObj?: Record<string, string | number>,\r\n classNames?: BreakpointerIndicatorProps[\"classNames\"],\r\n mode: string\r\n};\r\n\r\n\r\nexport const BreakpointerProvider = ({\r\n children,\r\n breakpointsObj = {},\r\n mode,\r\n classNames,\r\n}: BreakpointProviderProps) => {\r\n const breakpoints = {\r\n ...breakpointsConstants,\r\n ...parseUnit(breakpointsObj),\r\n }\r\n const [innerWidth, setInnerWidth] = useState(window.innerWidth);\r\n const [currentScreen, setCurrentScreen] = useState<keyof typeof breakpoints | null>(null);\r\n\r\n const debouncedResizeHandler = useCallback(\r\n debounce(() => {\r\n setInnerWidth(window.innerWidth);\r\n }, 50),\r\n []\r\n );\r\n\r\n const detectScreen = useCallback((width: number) => {\r\n let curr = -Infinity;\r\n let screen: keyof typeof breakpoints | null = null;\r\n\r\n for (let key in breakpoints) {\r\n const typedKey = key as keyof typeof breakpoints;\r\n\r\n if (breakpoints[typedKey] <= width && breakpoints[typedKey] > curr) {\r\n curr = breakpoints[typedKey];\r\n screen = typedKey;\r\n }\r\n }\r\n\r\n console.log(curr, screen)\r\n\r\n return screen;\r\n }, [breakpoints]);\r\n\r\n useEffect(() => {\r\n setCurrentScreen(detectScreen(innerWidth));\r\n }, [innerWidth, detectScreen]);\r\n\r\n useEffect(() => {\r\n window.addEventListener(\"resize\", debouncedResizeHandler);\r\n\r\n setCurrentScreen(detectScreen(window.innerWidth));\r\n\r\n return () => {\r\n window.removeEventListener(\"resize\", debouncedResizeHandler);\r\n };\r\n }, []);\r\n\r\n return (\r\n <BreakpointerContext.Provider value={{\r\n currentWidth: innerWidth,\r\n currentScreen: currentScreen,\r\n }}>\r\n {\r\n mode === \"development\" ?\r\n <BreakpointerIndicator classNames={classNames} /> :\r\n null\r\n }\r\n {children}\r\n </BreakpointerContext.Provider>\r\n );\r\n};","export function debounce(func: Function, delay: number) {\r\n let timer: null | ReturnType<typeof setTimeout> = null;\r\n\r\n return function (...args: any[]) {\r\n if (timer) {\r\n clearTimeout(timer)\r\n }\r\n\r\n timer = setTimeout(() => {\r\n func(args)\r\n }, delay);\r\n }\r\n}","import { createContext } from \"react\"\r\n\r\ninterface IBreakPointState {\r\n currentWidth: number,\r\n currentScreen: string | null,\r\n}\r\n\r\ninterface IBreakPointContext extends IBreakPointState {\r\n}\r\n\r\nconst BreakpointerContext = createContext<IBreakPointContext>({\r\n currentWidth: window.innerWidth,\r\n currentScreen: \"\"\r\n})\r\n\r\nexport default BreakpointerContext","\r\nexport const breakpointsConstants = {\r\n sm: 640, // large phones & small tablets\r\n md: 768, // Tablets\r\n lg: 1024, // Laptops & large tablets\r\n xl: 1280, // Desktop & large laptops\r\n \"2xl\": 1536 // Wide screen & large desktops\r\n} as const;\r\n","export const parseUnit = (obj: Record<string, string | number>) => {\r\n let parsedObj: Record<string, number> = {};\r\n\r\n for (let key in obj) {\r\n switch (typeof obj[key]) {\r\n case \"number\":\r\n parsedObj[key] = obj[key];\r\n break;\r\n case \"string\":\r\n parsedObj[key] = parseInt(obj[key]);\r\n break;\r\n }\r\n }\r\n\r\n return parsedObj\r\n}\r\n\r\n// TODO - test cases","import { FC, HTMLAttributes, useMemo, useState } from \"react\";\r\nimport { useBreakpointer } from \"../hooks/useBreakpointer\";\r\nimport { styled } from \"goober\";\r\nimport { Laptop, LucideIcon, Monitor, Smartphone, Tablet, TabletSmartphone, Tv } from \"lucide-react\";\r\nimport { breakpointsConstants } from \"../core/constants/breakpoints\";\r\n\r\n\r\nconst Wrapper = styled(\"div\") <{ position: \"left\" | \"right\" }>`\r\n display: grid;\r\n grid-template-columns: 1fr 1fr;\r\n grid-template-rows: auto auto;\r\n background-color: rgb(15, 15, 15);\r\n border-radius: 5%;\r\n min-width: 60px;\r\n color: white;\r\n position: fixed;\r\n bottom: 30px;\r\n min-height: 60px;\r\n z-index: 10000;\r\n ${({ position }) => position === \"right\" ? \"right: 30px;\" : \"left: 30px;\"}\r\n`;\r\n\r\nconst Col1 = styled(\"div\")`\r\n align-content: center;\r\n justify-items: center;\r\n padding-inline: 3px;\r\n &:nth-child(odd){\r\n align-content: center;\r\n border-right: 1px solid gray;\r\n }\r\n\r\n`;\r\n\r\nconst Col2 = styled(\"div\")`\r\n border-top: 1px solid gray;\r\n grid-column: 1/3; \r\n align-content: center;\r\n justify-items: center;\r\n`;\r\n\r\n\r\nconst breakpointIcons: {\r\n [key in keyof typeof breakpointsConstants | string]: LucideIcon\r\n} = {\r\n \"sm\": TabletSmartphone,\r\n \"md\": Tablet,\r\n \"lg\": Laptop,\r\n \"xl\": Monitor,\r\n \"2xl\": Tv,\r\n}\r\n\r\ntype InternalElements = \"wrapper\" | \"iconWrapper\" | \"screen\" | \"currentWidth\";\r\n\r\nexport interface BreakpointerIndicatorProps extends HTMLAttributes<HTMLDivElement> {\r\n classNames?: Partial<Record<InternalElements, string[]>>\r\n};\r\n\r\nexport const BreakpointerIndicator: FC<BreakpointerIndicatorProps> = ({ className, ...props }) => {\r\n const { currentWidth, screen } = useBreakpointer();\r\n\r\n const [right, setRight] = useState(false);\r\n\r\n const Icon: LucideIcon = useMemo(() => {\r\n if (screen in breakpointsConstants) {\r\n return breakpointIcons[screen]\r\n } else {\r\n return Smartphone;\r\n }\r\n }, [screen]);\r\n\r\n return (\r\n <Wrapper\r\n position={right ? \"right\" : \"left\"}\r\n onMouseEnter={() => {\r\n setRight(prev => !prev)\r\n }}\r\n className={[className, props.classNames?.wrapper?.join(\" \")].join(\" \")}\r\n >\r\n <Col1 className={props.classNames?.iconWrapper?.join(\" \")}>\r\n <Icon size={20} />\r\n </Col1>\r\n <Col1 className={props.classNames?.screen?.join(\" \")}>\r\n <b\r\n style={{\r\n textOverflow: \"ellipsis\",\r\n overflow: \"hidden\",\r\n whiteSpace: \"nowrap\",\r\n }}\r\n >{screen}</b>\r\n </Col1>\r\n <Col2 className={props.classNames?.currentWidth?.join(\" \")}>\r\n <p style={{ margin: 0 }}>{currentWidth}<small>px</small></p>\r\n </Col2>\r\n\r\n </Wrapper >\r\n )\r\n}","import { useContext } from \"react\";\r\nimport BreakpointerContext from \"../contexts/breakPoint.context\";\r\n\r\ninterface IBreakpointerContext {\r\n screen: string;\r\n currentWidth: number;\r\n}\r\n\r\nexport const useBreakpointer = (): IBreakpointerContext => {\r\n const { currentWidth, currentScreen } = useContext(BreakpointerContext);\r\n\r\n return {\r\n screen: currentScreen!,\r\n currentWidth: currentWidth,\r\n }\r\n}","import { CamelToPascal } from './utility-types';\n\n/**\n * Converts string to kebab case\n *\n * @param {string} string\n * @returns {string} A kebabized string\n */\nexport const toKebabCase = (string: string) =>\n string.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();\n\n/**\n * Converts string to camel case\n *\n * @param {string} string\n * @returns {string} A camelized string\n */\nexport const toCamelCase = <T extends string>(string: T) =>\n string.replace(/^([A-Z])|[\\s-_]+(\\w)/g, (match, p1, p2) =>\n p2 ? p2.toUpperCase() : p1.toLowerCase(),\n );\n\n/**\n * Converts string to pascal case\n *\n * @param {string} string\n * @returns {string} A pascalized string\n */\nexport const toPascalCase = <T extends string>(string: T): CamelToPascal<T> => {\n const camelCase = toCamelCase(string);\n\n return (camelCase.charAt(0).toUpperCase() + camelCase.slice(1)) as CamelToPascal<T>;\n};\n\n/**\n * Merges classes into a single string\n *\n * @param {array} classes\n * @returns {string} A string of classes\n */\nexport const mergeClasses = <ClassType = string | undefined | null>(...classes: ClassType[]) =>\n classes\n .filter((className, index, array) => {\n return (\n Boolean(className) &&\n (className as string).trim() !== '' &&\n array.indexOf(className) === index\n );\n })\n .join(' ')\n .trim();\n","export default {\n xmlns: 'http://www.w3.org/2000/svg',\n width: 24,\n height: 24,\n viewBox: '0 0 24 24',\n fill: 'none',\n stroke: 'currentColor',\n strokeWidth: 2,\n strokeLinecap: 'round',\n strokeLinejoin: 'round',\n};\n","import { createElement, forwardRef } from 'react';\nimport defaultAttributes from './defaultAttributes';\nimport { IconNode, LucideProps } from './types';\nimport { mergeClasses } from '@lucide/shared';\n\ninterface IconComponentProps extends LucideProps {\n iconNode: IconNode;\n}\n\n/**\n * Lucide icon component\n *\n * @component Icon\n * @param {object} props\n * @param {string} props.color - The color of the icon\n * @param {number} props.size - The size of the icon\n * @param {number} props.strokeWidth - The stroke width of the icon\n * @param {boolean} props.absoluteStrokeWidth - Whether to use absolute stroke width\n * @param {string} props.className - The class name of the icon\n * @param {IconNode} props.children - The children of the icon\n * @param {IconNode} props.iconNode - The icon node of the icon\n *\n * @returns {ForwardRefExoticComponent} LucideIcon\n */\nconst Icon = forwardRef<SVGSVGElement, IconComponentProps>(\n (\n {\n color = 'currentColor',\n size = 24,\n strokeWidth = 2,\n absoluteStrokeWidth,\n className = '',\n children,\n iconNode,\n ...rest\n },\n ref,\n ) => {\n return createElement(\n 'svg',\n {\n ref,\n ...defaultAttributes,\n width: size,\n height: size,\n stroke: color,\n strokeWidth: absoluteStrokeWidth ? (Number(strokeWidth) * 24) / Number(size) : strokeWidth,\n className: mergeClasses('lucide', className),\n ...rest,\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...(Array.isArray(children) ? children : [children]),\n ],\n );\n },\n);\n\nexport default Icon;\n","import { createElement, forwardRef } from 'react';\nimport { mergeClasses, toKebabCase } from '@lucide/shared';\nimport { IconNode, LucideProps } from './types';\nimport Icon from './Icon';\n\n/**\n * Create a Lucide icon component\n * @param {string} iconName\n * @param {array} iconNode\n * @returns {ForwardRefExoticComponent} LucideIcon\n */\nconst createLucideIcon = (iconName: string, iconNode: IconNode) => {\n const Component = forwardRef<SVGSVGElement, LucideProps>(({ className, ...props }, ref) =>\n createElement(Icon, {\n ref,\n iconNode,\n className: mergeClasses(`lucide-${toKebabCase(iconName)}`, className),\n ...props,\n }),\n );\n\n Component.displayName = `${iconName}`;\n\n return Component;\n};\n\nexport default createLucideIcon;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M20 16V7a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v9m16 0H4m16 0 1.28 2.55a1 1 0 0 1-.9 1.45H3.62a1 1 0 0 1-.9-1.45L4 16',\n key: 'tarvll',\n },\n ],\n];\n\n/**\n * @component @name Laptop\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/laptop\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Laptop = createLucideIcon('Laptop', __iconNode);\n\nexport default Laptop;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['rect', { width: '20', height: '14', x: '2', y: '3', rx: '2', key: '48i651' }],\n ['line', { x1: '8', x2: '16', y1: '21', y2: '21', key: '1svkeh' }],\n ['line', { x1: '12', x2: '12', y1: '17', y2: '21', key: 'vw1qmm' }],\n];\n\n/**\n * @component @name Monitor\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/monitor\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Monitor = createLucideIcon('Monitor', __iconNode);\n\nexport default Monitor;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['rect', { width: '14', height: '20', x: '5', y: '2', rx: '2', ry: '2', key: '1yt0o3' }],\n ['path', { d: 'M12 18h.01', key: 'mhygvu' }],\n];\n\n/**\n * @component @name Smartphone\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/smartphone\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Smartphone = createLucideIcon('Smartphone', __iconNode);\n\nexport default Smartphone;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['rect', { width: '10', height: '14', x: '3', y: '8', rx: '2', key: '1vrsiq' }],\n ['path', { d: 'M5 4a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v16a2 2 0 0 1-2 2h-2.4', key: '1j4zmg' }],\n ['path', { d: 'M8 18h.01', key: 'lrp35t' }],\n];\n\n/**\n * @component @name TabletSmartphone\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/tablet-smartphone\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst TabletSmartphone = createLucideIcon('TabletSmartphone', __iconNode);\n\nexport default TabletSmartphone;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['rect', { width: '16', height: '20', x: '4', y: '2', rx: '2', ry: '2', key: '76otgf' }],\n ['line', { x1: '12', x2: '12.01', y1: '18', y2: '18', key: '1dp563' }],\n];\n\n/**\n * @component @name Tablet\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/tablet\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Tablet = createLucideIcon('Tablet', __iconNode);\n\nexport default Tablet;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['rect', { width: '20', height: '15', x: '2', y: '7', rx: '2', ry: '2', key: '10ag99' }],\n ['polyline', { points: '17 2 12 7 7 2', key: '11pgbg' }],\n];\n\n/**\n * @component @name Tv\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/tv\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Tv = createLucideIcon('Tv', __iconNode);\n\nexport default Tv;\n"],"mappings":"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","names":["t","e","t","l","a","n","c","i","p","u","d","r","o","f","s","import_react","import_react","import_react","import_react","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","_a","_b","Icon","import_jsx_runtime"]}