UNPKG

design-react-kit

Version:

Componenti React per Bootstrap 5

1 lines 21.8 kB
{"version":3,"sources":["../../src/NavScroll/index.ts","../../src/NavScroll/useNavScroll.ts","../../src/NavScroll/debounce.ts","../../src/NavScroll/useSizeDetector.ts","../../node_modules/uuid/dist/esm-node/rng.js","../../node_modules/uuid/dist/esm-node/regex.js","../../node_modules/uuid/dist/esm-node/validate.js","../../node_modules/uuid/dist/esm-node/stringify.js","../../node_modules/uuid/dist/esm-node/v4.js"],"sourcesContent":["/*\n * This work derives from the React Use Navscroll library\n * Released under the MIT license by Marco Liberati\n * Code: https://github.com/dej611/react-use-navscroll\n */\n/* @internal */\nexport type { ChangesType, RegisterOptions, useNavScrollArgs, useNavScrollResult } from './types';\n\nexport { useNavScroll } from './useNavScroll';\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/*--------------------------------------------------------------------------\n * This work derives from the React Use Navscroll library\n * Released under the MIT license by Marco Liberati (@dej611)\n * Code: https://github.com/dej611/react-use-navscroll\n * --------------------------------------------------------------------------\n * Parts of this code has been modified using Bootstrap Italia source code\n * --------------------------------------------------------------------------\n * Bootstrap Italia (https://italia.github.io/bootstrap-italia/)\n * Authors: https://github.com/italia/bootstrap-italia/blob/main/AUTHORS\n * License: BSD-3-Clause (https://github.com/italia/bootstrap-italia/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { createRef, useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { debounce } from './debounce';\nimport type { useNavScrollArgs, useNavScrollResult, TrackedElement } from './types';\nimport { useSizeDetector } from './useSizeDetector';\n\nimport { v4 as uuidv4 } from 'uuid';\n\nlet ticking: boolean = false;\nlet callbacks: any[] = [];\n\nclass ScrollCallback {\n private _callback: any;\n id: string;\n constructor(id: string, callback: any) {\n this.id = id;\n this._callback = callback;\n }\n\n //Public\n dispose() {\n removeCallBack(this.id);\n }\n\n //Private\n _execute(data: any) {\n this._callback(data);\n }\n}\n\nconst removeCallBack = (id: string) => {\n callbacks = callbacks.filter((cb) => cb.id !== id);\n};\n\nconst onDocumentScroll = (callback: any) => {\n if (typeof document === 'undefined') {\n return;\n }\n if (!callbacks.length) {\n if (typeof window !== 'undefined' && typeof document !== 'undefined') {\n document.addEventListener('scroll', (evt) => {\n if (!ticking) {\n window.requestAnimationFrame(() => {\n callbacks.forEach((cbObj) => cbObj.cb._execute(evt));\n ticking = false;\n });\n ticking = true;\n }\n });\n }\n }\n\n if (typeof callback === 'function') {\n const newCb = new ScrollCallback(uuidv4(), callback);\n callbacks.push({\n id: newCb.id,\n cb: newCb\n });\n return newCb;\n }\n\n console.error('[onDocumentScroll] the provided data has to be of type function');\n return null;\n};\n\nconst hasWindow = typeof window !== 'undefined';\nconst REGISTER_DELAY = 50;\n\nfunction resolveHierarchyIds(id: string, lookup: Record<string, string | undefined>) {\n const newActiveIds = [id];\n let lastId: string | undefined = newActiveIds[0];\n while (lastId != null && lookup[lastId] != null) {\n newActiveIds.push(lookup[lastId] as string);\n lastId = lookup[lastId];\n }\n // return a list from parent to current child\n return newActiveIds.reverse();\n}\n/**\n * This is the main hook: use it in a react function component to track\n * the state of the passed ids. The function accepts an initial configuration\n * of type `useNavScrollArgs` to customize the behaviour.\n */\nexport function useNavScroll(args: useNavScrollArgs = {}): useNavScrollResult {\n const { onChange, root, offset = 50, isHorizontal = false } = args;\n const els = useRef<TrackedElement[]>([]);\n const [counter, setCounter] = useState(0);\n const [forceRecompute, setForceRecompute] = useState(false);\n const [activeId, updateActiveId] = useState<string | null>(null);\n const [percentageValue, setPercentageValue] = useState(0);\n\n const { targetSize, useViewport } = useSizeDetector({\n root,\n isHorizontal,\n onChange,\n activeId,\n setForceRecompute,\n updateActiveId,\n hasWindow\n });\n\n const observerMargin = Math.floor((targetSize * offset) / 100) || 1;\n const observerOptions = useMemo(() => {\n const topMargin = observerMargin % 2 === 1 ? observerMargin - 1 : observerMargin;\n const bottomMargin = targetSize - observerMargin;\n return {\n root: useViewport ? null : root,\n rootMargin: isHorizontal\n ? `0px ${-topMargin}px 0px ${-bottomMargin}px`\n : `${-topMargin}px 0px ${-bottomMargin}px 0px`\n };\n }, [root, targetSize, observerMargin, isHorizontal, useViewport]);\n\n const elsLookup = useMemo(() => {\n const lookup: Record<string, string | undefined> = {};\n for (const { id, parent } of els.current) {\n lookup[id] = parent;\n }\n return lookup;\n }, [counter]);\n const activeIds = useMemo(() => (activeId ? resolveHierarchyIds(activeId, elsLookup) : []), [activeId, elsLookup]);\n\n const activeLookups = useMemo(() => new Set(activeIds), [activeIds]);\n useEffect(() => {\n if (!hasWindow) {\n return;\n }\n const _onScroll = () => {\n let intersectionId = null;\n for (let k = 0; k < els.current.length; k++) {\n const entry = els.current[k].ref.current;\n const min = entry?.getBoundingClientRect().top ? entry?.getBoundingClientRect().top : 0;\n if (!min) {\n break;\n }\n if (min > 0 && k > 0) {\n const totEls =\n root?.previousSibling?.firstChild?.parentNode?.querySelectorAll('.it-navscroll-wrapper .nav-link').length ||\n 1;\n setPercentageValue((k / (totEls / 2)) * 100);\n intersectionId = els.current[k - 1].ref.current?.id;\n break;\n }\n }\n if (intersectionId != null) {\n updateActiveId(intersectionId);\n if (onChange) {\n const diffIds = {\n added: intersectionId,\n removed: activeId\n };\n onChange(diffIds);\n }\n }\n };\n\n onDocumentScroll(_onScroll);\n\n setTimeout(() => {\n _onScroll();\n }, 300);\n }, [\n activeIds,\n updateActiveId,\n els,\n elsLookup,\n onChange,\n activeLookups,\n activeId,\n observerOptions,\n isHorizontal,\n root,\n forceRecompute\n ]);\n\n const refresh = useCallback(\n debounce(() => {\n setCounter(counter + 1);\n }, REGISTER_DELAY),\n [counter]\n );\n\n const register = useCallback(\n (id: string, options: any = {}) => {\n if (!hasWindow) {\n return { id, ref: null };\n }\n const alreadyRegistered = id in elsLookup;\n const entry = alreadyRegistered ? els.current.find(({ id: existingId }) => existingId === id) : options;\n const ref = (entry && entry.ref) || createRef();\n\n if (!alreadyRegistered) {\n els.current = [...els.current, { id, ref, parent: options.parent }];\n refresh();\n }\n return { id, ref };\n },\n [counter]\n );\n\n const unregister = useCallback(\n (idToUnregister: string) => {\n els.current = els.current.filter(({ id }) => id !== idToUnregister);\n },\n [counter]\n );\n\n const isActive = useCallback((id: string) => activeLookups.has(id), [activeLookups]);\n const percentage = useMemo(() => percentageValue, [percentageValue]);\n\n const getActiveRef = useCallback(() => {\n const entry = els.current.find(({ id }) => id === activeId);\n return entry ? entry.ref : null;\n }, [activeId]);\n\n return {\n percentage,\n register,\n unregister,\n activeIds,\n isActive,\n getActiveRef\n };\n}\n","/*\n * This work derives from the React Use Navscroll library\n * Released under the MIT license by Marco Liberati\n * Code: https://github.com/dej611/react-use-navscroll\n */\n\nexport const debounce = (callback: CallableFunction, wait: number) => {\n let timeoutId: NodeJS.Timeout;\n return (...args: unknown[]) => {\n clearTimeout(timeoutId);\n timeoutId = setTimeout(() => {\n callback(...args);\n }, wait);\n };\n};\n","/*\n * This work derives from the React Use Navscroll library\n * Released under the MIT license by Marco Liberati\n * Code: https://github.com/dej611/react-use-navscroll\n */\n\nimport { useCallback, useEffect, useState } from 'react';\nimport { debounce } from './debounce';\nimport { useNavScrollArgs } from './types';\n\nconst DEFAULT_DELAY = 150;\n\nexport type useSizeDetectorArgs = Omit<useNavScrollArgs, 'offset'> & {\n activeId: string | null;\n hasWindow: boolean;\n setForceRecompute: (force: boolean) => void;\n updateActiveId: (id: string | null) => void;\n};\n\nexport const useSizeDetector = ({\n root,\n isHorizontal,\n activeId,\n onChange,\n setForceRecompute,\n updateActiveId,\n hasWindow\n}: useSizeDetectorArgs) => {\n const [targetSize, setTargetSize] = useState<number>(1);\n\n const useViewport =\n root == null ||\n (hasWindow && (isHorizontal ? window.innerWidth < root.clientWidth : window.innerHeight < root.clientHeight));\n\n const scrollEnd = useCallback(\n debounce(() => {\n setForceRecompute(true);\n }, DEFAULT_DELAY),\n [setForceRecompute]\n );\n\n useEffect(() => {\n if (!hasWindow) {\n return;\n }\n let observer: IntersectionObserver | null = null;\n\n const resizeWindowHandler = () => {\n setTimeout(() => {\n setTargetSize(isHorizontal ? window.innerWidth : window.innerHeight);\n }, DEFAULT_DELAY);\n };\n\n const resizeElementHandler: IntersectionObserverCallback = (entries) => {\n const [entry] = entries;\n if (!useViewport) {\n setTargetSize(isHorizontal ? entry.boundingClientRect.width : entry.boundingClientRect.height);\n }\n\n if (entry.intersectionRatio === 0) {\n if (activeId != null) {\n updateActiveId(null);\n if (onChange) {\n onChange({\n added: null,\n removed: activeId\n });\n }\n }\n }\n };\n\n addEventListener('scroll', scrollEnd);\n if (useViewport) {\n setTargetSize(isHorizontal ? window.innerWidth : window.innerHeight);\n addEventListener('resize', resizeWindowHandler);\n }\n if (root) {\n observer = new IntersectionObserver(resizeElementHandler);\n observer.observe(root);\n }\n return () => {\n if (observer) {\n observer.disconnect();\n }\n removeEventListener('resize', resizeWindowHandler);\n removeEventListener('scroll', scrollEnd);\n };\n }, [root, isHorizontal, activeId, onChange, useViewport, scrollEnd, hasWindow, updateActiveId]);\n return { targetSize, useViewport };\n};\n","import crypto from 'crypto';\nconst rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate\n\nlet poolPtr = rnds8Pool.length;\nexport default function rng() {\n if (poolPtr > rnds8Pool.length - 16) {\n crypto.randomFillSync(rnds8Pool);\n poolPtr = 0;\n }\n\n return rnds8Pool.slice(poolPtr, poolPtr += 16);\n}","export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;","import REGEX from './regex.js';\n\nfunction validate(uuid) {\n return typeof uuid === 'string' && REGEX.test(uuid);\n}\n\nexport default validate;","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nconst byteToHex = [];\n\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).substr(1));\n}\n\nfunction stringify(arr, offset = 0) {\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","import rng from './rng.js';\nimport stringify from './stringify.js';\n\nfunction v4(options, buf, offset) {\n options = options || {};\n const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return stringify(rnds);\n}\n\nexport default v4;"],"mappings":"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","names":["NavScroll_exports","__export","useNavScroll","__toCommonJS","import_react","debounce","callback","wait","timeoutId","args","import_react","DEFAULT_DELAY","useSizeDetector","root","isHorizontal","activeId","onChange","setForceRecompute","updateActiveId","hasWindow","targetSize","setTargetSize","useViewport","scrollEnd","debounce","observer","resizeWindowHandler","resizeElementHandler","entries","entry","import_crypto","rnds8Pool","poolPtr","rng","crypto","regex_default","validate","uuid","regex_default","validate_default","byteToHex","i","stringify","arr","offset","uuid","validate_default","stringify_default","v4","options","buf","offset","rnds","rng","i","stringify_default","v4_default","ticking","callbacks","ScrollCallback","id","callback","removeCallBack","data","cb","onDocumentScroll","evt","cbObj","newCb","v4_default","hasWindow","REGISTER_DELAY","resolveHierarchyIds","lookup","newActiveIds","lastId","useNavScroll","args","onChange","root","offset","isHorizontal","els","counter","setCounter","forceRecompute","setForceRecompute","activeId","updateActiveId","percentageValue","setPercentageValue","targetSize","useViewport","useSizeDetector","observerMargin","observerOptions","topMargin","bottomMargin","elsLookup","parent","activeIds","activeLookups","_onScroll","intersectionId","k","entry","min","totEls","refresh","debounce","register","options","alreadyRegistered","existingId","ref","unregister","idToUnregister","isActive","percentage","getActiveRef"]}