UNPKG

@nuxt/ui

Version:

A UI Library for Modern Web Apps, powered by Vue & Tailwind CSS.

64 lines (63 loc) 1.49 kB
import { reactivePick } from "@vueuse/core"; import { isEqual, diff } from "ohash/utils"; export const linkKeys = [ "active", "activeClass", "ariaCurrentValue", "as", "disabled", "download", "exact", "exactActiveClass", "exactHash", "exactQuery", "external", "form", "formaction", "formenctype", "formmethod", "formnovalidate", "formtarget", "href", "hreflang", "inactiveClass", "media", "noPrefetch", "noRel", "onClick", "ping", "prefetch", "prefetchOn", "prefetchedClass", "referrerpolicy", "rel", "replace", "target", "title", "to", "trailingSlash", "type", "viewTransition" ]; export function pickLinkProps(link) { const keys = Object.keys(link); const ariaKeys = keys.filter((key) => key.startsWith("aria-")); const dataKeys = keys.filter((key) => key.startsWith("data-")); const propsToInclude = [ ...linkKeys, ...ariaKeys, ...dataKeys ]; return reactivePick(link, ...propsToInclude); } export function isPartiallyEqual(item1, item2) { const diffedKeys = diff(item1, item2).reduce((filtered, q) => { if (q.type === "added") { filtered.add(q.key); } return filtered; }, /* @__PURE__ */ new Set()); const item1Filtered = Object.fromEntries(Object.entries(item1).filter(([key]) => !diffedKeys.has(key))); const item2Filtered = Object.fromEntries(Object.entries(item2).filter(([key]) => !diffedKeys.has(key))); return isEqual(item1Filtered, item2Filtered); }