1
mirror of https://github.com/jakejarvis/jarv.is.git synced 2025-06-30 22:26:38 -04:00

make sticky header optional via prop

This commit is contained in:
2022-02-16 10:30:18 -05:00
parent b6c018875f
commit 17104d765b
14 changed files with 116 additions and 120 deletions

View File

@ -1,8 +1,7 @@
import classNames from "classnames/bind";
import classNames from "classnames";
import CopyButton from "../CopyButton/CopyButton";
import styles from "./CodeBlock.module.css";
const cx = classNames.bind(styles);
type CodeBlockProps = JSX.IntrinsicElements["code"] & {
forceBlock?: boolean;
@ -19,7 +18,11 @@ const CodeBlock = ({ forceBlock, className, children, ...rest }: CodeBlockProps)
<div className={styles.block}>
<CopyButton source={children} className={styles.copy_btn} />
<code
className={cx(styles.code, { highlight: prismEnabled }, className?.replace("code-highlight", "").trim())}
className={classNames(
styles.code,
prismEnabled && styles.highlight,
className?.replace("code-highlight", "").trim()
)}
{...rest}
>
{children}

View File

@ -1,5 +1,5 @@
import { useState } from "react";
import classNames from "classnames/bind";
import classNames from "classnames";
import { Formik, Form, Field } from "formik";
import TextareaAutosize from "react-textarea-autosize";
import Link from "../Link/Link";
@ -8,7 +8,6 @@ import { SendIcon, CheckOcticon, XOcticon } from "../Icons";
import type { FormikHelpers } from "formik";
import styles from "./ContactForm.module.css";
const cx = classNames.bind(styles);
type Values = {
name: string;
@ -103,7 +102,7 @@ const ContactForm = ({ className }: ContactFormProps) => {
{({ field, meta }) => (
<input
type="text"
className={cx(styles.input, { missing: meta.error && meta.touched })}
className={classNames(styles.input, meta.error && meta.touched && styles.missing)}
placeholder="Name"
disabled={success}
{...field}
@ -116,7 +115,7 @@ const ContactForm = ({ className }: ContactFormProps) => {
<input
type="email"
inputMode="email"
className={cx(styles.input, { missing: meta.error && meta.touched })}
className={classNames(styles.input, meta.error && meta.touched && styles.missing)}
placeholder="Email"
disabled={success}
{...field}
@ -127,7 +126,7 @@ const ContactForm = ({ className }: ContactFormProps) => {
<Field name="message">
{({ field, meta }) => (
<TextareaAutosize
className={cx(styles.input, styles.textarea, { missing: meta.error && meta.touched })}
className={classNames(styles.input, styles.textarea, meta.error && meta.touched && styles.missing)}
placeholder="Write something..."
minRows={5}
disabled={success}
@ -154,7 +153,7 @@ const ContactForm = ({ className }: ContactFormProps) => {
<div className={styles.action_row}>
<button
className={cx(styles.btn_submit, { hidden: success })}
className={classNames(styles.btn_submit, success && styles.hidden)}
type="submit"
title="Send Message"
aria-label="Send Message"
@ -171,11 +170,11 @@ const ContactForm = ({ className }: ContactFormProps) => {
</button>
<span
className={cx({
result_success: success,
result_error: !success,
hidden: !submitted || !feedback || isSubmitting,
})}
className={classNames(
success && styles.result_success,
!success && styles.result_error,
(!submitted || !feedback || isSubmitting) && styles.hidden
)}
>
{success ? (
<CheckOcticon className={styles.result_icon} fill="CurrentColor" />

View File

@ -1,12 +1,11 @@
import { forwardRef, useState, useEffect } from "react";
import classNames from "classnames/bind";
import classNames from "classnames";
import copy from "copy-to-clipboard";
import innerText from "react-innertext";
import { ClipboardOcticon, CheckOcticon } from "../Icons";
import type { ReactNode, Ref } from "react";
import styles from "./CopyButton.module.css";
const cx = classNames.bind(styles);
type CopyButtonProps = {
source: ReactNode;
@ -47,7 +46,7 @@ const CopyButton = forwardRef(function CopyButton(
return (
<button
className={cx(styles.button, { success: !!copied }, className)}
className={classNames(styles.button, copied && styles.success, className)}
title="Copy to clipboard"
aria-label="Copy to clipboard"
onClick={handleCopy}

View File

@ -6,7 +6,7 @@ import * as config from "../../lib/config";
import styles from "./Footer.module.css";
type FooterProps = JSX.IntrinsicElements["div"];
type FooterProps = JSX.IntrinsicElements["footer"];
const Footer = ({ className, ...rest }: FooterProps) => (
<footer className={classNames(styles.footer, className)} {...rest}>

View File

@ -1,18 +1,21 @@
.header {
position: sticky;
top: 0;
width: 100%;
height: 4.5em;
padding: 0.7em 1.5em;
border-bottom: 1px solid var(--kinda-light);
background-color: var(--background-header);
backdrop-filter: saturate(180%) blur(5px);
z-index: 1000;
/* light-dark theme switch fading */
transition: color 0.25s ease, background 0.25s ease, border 0.25s ease;
}
.sticky {
position: sticky;
top: 0;
backdrop-filter: saturate(180%) blur(5px);
z-index: 1000;
}
.nav {
display: flex;
align-items: center;

View File

@ -5,10 +5,12 @@ import Menu from "../Menu/Menu";
import styles from "./Header.module.css";
type HeaderProps = JSX.IntrinsicElements["div"];
type HeaderProps = JSX.IntrinsicElements["header"] & {
sticky?: boolean;
};
const Header = ({ className }: HeaderProps) => (
<header className={classNames(styles.header, className)}>
const Header = ({ sticky, className, ...rest }: HeaderProps) => (
<header className={classNames(styles.header, sticky && styles.sticky, className)} {...rest}>
<nav className={styles.nav}>
<Selfie className={styles.selfie} />
<Menu className={styles.menu} />

View File

@ -9,10 +9,11 @@ import themes, { toCSS } from "../../lib/config/themes";
import styles from "./Layout.module.css";
type LayoutProps = JSX.IntrinsicElements["div"] & {
noContainer?: boolean; // pass true to disable default `<main>` container styles with padding, etc.
container?: boolean; // pass false to disable default `<main>` container styles with padding, etc.
stickyHeader?: boolean; // pass false to override default stickiness of header when scrolling
};
const Layout = ({ noContainer, className, children, ...rest }: LayoutProps) => {
const Layout = ({ container = true, stickyHeader = true, className, children, ...rest }: LayoutProps) => {
const { resolvedTheme } = useTheme();
return (
@ -38,15 +39,15 @@ const Layout = ({ noContainer, className, children, ...rest }: LayoutProps) => {
</Script>
<div className={classNames(styles.flex, className)} {...rest}>
<Header />
<Header sticky={stickyHeader} />
{/* passing `noContainer={true}` to Layout allows 100% control of the content area on a per-page basis */}
{noContainer ? (
<>{children}</>
) : (
{/* passing `container={false}` to Layout allows 100% control of the content area on a per-page basis */}
{container ? (
<main className={styles.default}>
<div className={styles.container}>{children}</div>
</main>
) : (
<>{children}</>
)}
<Footer className={styles.footer} />

View File

@ -1,8 +1,7 @@
import Link from "next/link";
import classNames from "classnames/bind";
import classNames from "classnames";
import styles from "./MenuLink.module.css";
const cx = classNames.bind(styles);
export type MenuLinkProps = {
href?: string;
@ -20,7 +19,7 @@ const MenuLink = ({ icon: Icon, href, text, current, className }: MenuLinkProps)
if (href) {
return (
<Link href={href} prefetch={false}>
<a className={cx(styles.link, { current: !!current }, className)}>
<a className={classNames(styles.link, current && styles.current, className)}>
<Icon className={styles.icon} /> <span className={styles.label}>{text}</span>
</a>
</Link>

View File

@ -4,17 +4,17 @@ import type { NoteMetaType } from "../../types";
import styles from "./NoteTitle.module.css";
type NoteTitleProps = Pick<NoteMetaType, "slug" | "htmlTitle"> & JSX.IntrinsicElements["a"];
type NoteTitleProps = Pick<NoteMetaType, "slug" | "htmlTitle"> & JSX.IntrinsicElements["h1"];
const NoteTitle = ({ slug, htmlTitle, className, ...rest }: NoteTitleProps) => (
<h1 className={classNames(styles.title, className)}>
<h1 className={classNames(styles.title, className)} {...rest}>
<Link
href={{
pathname: "/notes/[slug]/",
query: { slug: slug },
}}
>
<a className={styles.link} dangerouslySetInnerHTML={{ __html: htmlTitle }} {...rest} />
<a className={styles.link} dangerouslySetInnerHTML={{ __html: htmlTitle }} />
</Link>
</h1>
);

View File

@ -1,10 +1,9 @@
import { useEffect, useRef } from "react";
import classNames from "classnames/bind";
import classNames from "classnames";
import styles from "./Wallpaper.module.css";
const cx = classNames.bind(styles);
type WallpaperProps = JSX.IntrinsicElements["div"] & {
type WallpaperProps = JSX.IntrinsicElements["main"] & {
image: string;
tile?: boolean;
};
@ -16,7 +15,7 @@ const Wallpaper = ({ image, tile, className, ...rest }: WallpaperProps) => {
bgRef.current.style.backgroundImage = `url(${image})`;
}, []); // eslint-disable-line react-hooks/exhaustive-deps
return <main ref={bgRef} className={cx(styles.wallpaper, { tile: !!tile }, className)} {...rest} />;
return <main ref={bgRef} className={classNames(styles.wallpaper, tile && styles.tile, className)} {...rest} />;
};
export default Wallpaper;

View File

@ -32,8 +32,8 @@
"@novnc/novnc": "github:novnc/noVNC#679b45fa3b453c7cf32f4b4455f4814818ecf161",
"@octokit/graphql": "^4.8.0",
"@primer/octicons": "^16.3.1",
"@sentry/node": "^6.17.8",
"@sentry/tracing": "^6.17.8",
"@sentry/node": "^6.17.9",
"@sentry/tracing": "^6.17.9",
"classnames": "^2.3.1",
"copy-to-clipboard": "^3.3.1",
"critters": "^0.0.16",
@ -52,7 +52,7 @@
"next-compose-plugins": "^2.2.1",
"next-mdx-remote": "4.0.0-rc.2",
"next-seo": "^5.1.0",
"next-sitemap": "^2.1.15",
"next-sitemap": "^2.4.2",
"next-themes": "^0.0.15",
"next-transpile-modules": "^9.0.0",
"node-fetch": "^3.2.0",
@ -102,7 +102,7 @@
"npm-run-all": "^4.1.5",
"prettier": "^2.5.1",
"simple-git-hooks": "^2.7.0",
"stylelint": "~14.5.0",
"stylelint": "~14.5.1",
"stylelint-config-prettier": "~9.0.3",
"stylelint-prettier": "~2.0.0",
"typescript": "^4.5.5"

View File

@ -1,3 +1,5 @@
/* eslint-disable camelcase */
import { NextSeo } from "next-seo";
import Content from "../components/Content/Content";
import PageTitle from "../components/PageTitle/PageTitle";
@ -6,7 +8,6 @@ import Figure from "../components/Figure/Figure";
import IFrame from "../components/IFrame/IFrame";
import HorizontalRule from "../components/HorizontalRule/HorizontalRule";
/* eslint-disable camelcase */
import img_wayback from "../public/static/images/previously/wayback.png";
import img_2002_02 from "../public/static/images/previously/2002_02.png";
import img_2002_10 from "../public/static/images/previously/2002_10.png";
@ -55,7 +56,7 @@ const Previously = () => (
<p>
🚨 <strong>Trigger warning:</strong> marquees, Comic Sans MS, popups,{" "}
<code>
color: <span className="limegreen">limegreen</span>
color: <span style={{ color: "#32cd32" }}>limegreen</span>
</code>
...{" "}
<Link href="/y2k/" prefetch={false}>
@ -206,9 +207,6 @@ const Previously = () => (
iframe {
margin-bottom: 0.6em !important;
}
.limegreen {
color: #32cd32;
}
`}</style>
</>
);

View File

@ -50,7 +50,7 @@ Y2K.getLayout = (page: ReactElement) => {
const randomTile = `/static/images/y2k/tiles/tile_${Math.floor(20 * Math.random())}.png`;
return (
<Layout noContainer>
<Layout container={false} stickyHeader={false}>
<Wallpaper
image={randomTile}
tile
@ -63,13 +63,6 @@ Y2K.getLayout = (page: ReactElement) => {
>
{page}
</Wallpaper>
{/* also make the viewport a bit larger by un-sticking the nav bar */}
<style jsx global>{`
header {
position: relative !important;
}
`}</style>
</Layout>
);
};

122
yarn.lock
View File

@ -3,9 +3,9 @@
"@ampproject/remapping@^2.1.0":
version "2.1.1"
resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.1.1.tgz#7922fb0817bf3166d8d9e258c57477e3fd1c3610"
integrity sha512-Aolwjd7HSC2PyY0fDj/wA/EimQT4HfEnFYNp5s9CQlrdhyvWTtvZ5YzrUPu6R6/1jKiUlxu8bUhkdSnKHNAHMA==
version "2.1.2"
resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.1.2.tgz#4edca94973ded9630d20101cd8559cedb8d8bd34"
integrity sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==
dependencies:
"@jridgewell/trace-mapping" "^0.3.0"
@ -1314,72 +1314,72 @@
resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.1.0.tgz#7f698254aadf921e48dda8c0a6b304026b8a9323"
integrity sha512-JLo+Y592QzIE+q7Dl2pMUtt4q8SKYI5jDrZxrozEQxnGVOyYE+GWK9eLkwTaeN9DDctlaRAQ3TBmzZ1qdLE30A==
"@sentry/core@6.17.8":
version "6.17.8"
resolved "https://registry.yarnpkg.com/@sentry/core/-/core-6.17.8.tgz#7dbdf394b47ed46048cbad6a8519cb3c4b84d6c4"
integrity sha512-4WTjgQom75Rvgn6XYy6e7vMIbWlj8utau1wWvr7kjqFKuuuuycRvPgVzAdVr4B3WDHHCInAZpUchsOLs2qwIEA==
"@sentry/core@6.17.9":
version "6.17.9"
resolved "https://registry.yarnpkg.com/@sentry/core/-/core-6.17.9.tgz#1c09f1f101207952566349a1921d46db670c8f62"
integrity sha512-14KalmTholGUtgdh9TklO+jUpyQ/D3OGkhlH1rnGQGoJgFy2eYm+s+MnUEMxFdGIUCz5kOteuNqYZxaDmFagpQ==
dependencies:
"@sentry/hub" "6.17.8"
"@sentry/minimal" "6.17.8"
"@sentry/types" "6.17.8"
"@sentry/utils" "6.17.8"
"@sentry/hub" "6.17.9"
"@sentry/minimal" "6.17.9"
"@sentry/types" "6.17.9"
"@sentry/utils" "6.17.9"
tslib "^1.9.3"
"@sentry/hub@6.17.8":
version "6.17.8"
resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-6.17.8.tgz#d8b04647d12f80807f721c0e4e8133d3f78e4566"
integrity sha512-GW0XYpkoQu/kSJaTLfsF4extHDOBPNRnT0qKr/YO20Z5wGxYp8LsdnAuU3njcFHcAV2F/QDTj2BPq1U385/4+A==
"@sentry/hub@6.17.9":
version "6.17.9"
resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-6.17.9.tgz#f2c355088a49045e49feafb5356ca5d6e1e31d3c"
integrity sha512-34EdrweWDbBV9EzEFIXcO+JeoyQmKzQVJxpTKZoJA6PUwf2NrndaUdjlkDEtBEzjuLUTxhLxtOzEsYs1O6RVcg==
dependencies:
"@sentry/types" "6.17.8"
"@sentry/utils" "6.17.8"
"@sentry/types" "6.17.9"
"@sentry/utils" "6.17.9"
tslib "^1.9.3"
"@sentry/minimal@6.17.8":
version "6.17.8"
resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-6.17.8.tgz#237ed91d8da00ecedc97ce7c1c3bd87a9b1ff1b7"
integrity sha512-VJXFZBO/O8SViK0fdzodxpNr+pbpgczNgLpz/MNuSooV6EBesgCMVjXtxDUp1Ie1odc0GUprN/ZMLYBmYdIrKQ==
"@sentry/minimal@6.17.9":
version "6.17.9"
resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-6.17.9.tgz#0edca978097b3f56463ede028395d40adbf2ae84"
integrity sha512-T3PMCHcKk6lkZq6zKgANrYJJxXBXKOe+ousV1Fas1rVBMv7dtKfsa4itqQHszcW9shusPDiaQKIJ4zRLE5LKmg==
dependencies:
"@sentry/hub" "6.17.8"
"@sentry/types" "6.17.8"
"@sentry/hub" "6.17.9"
"@sentry/types" "6.17.9"
tslib "^1.9.3"
"@sentry/node@^6.17.8":
version "6.17.8"
resolved "https://registry.yarnpkg.com/@sentry/node/-/node-6.17.8.tgz#6debd3cdb60e51b227b90b2fae10a4ee745a6433"
integrity sha512-b3zg1XjKtxp7o821ENORO1CCzMM4QzKP01rzztMwyMcj28dmUq36QXoQAnwdKn7jEYkJdLnMeniIBR6U6NUJrQ==
"@sentry/node@^6.17.9":
version "6.17.9"
resolved "https://registry.yarnpkg.com/@sentry/node/-/node-6.17.9.tgz#9a13e2fa1739a6b334eb6aa9e1e022d2c4083cb3"
integrity sha512-jbn+q7qPGOh6D7nYoYGaAlmuvMDpQmyMwBtUVYybuZp2AALe43O3Z4LtoJ+1+F31XowpsIPZx1mwNs4ZrILskA==
dependencies:
"@sentry/core" "6.17.8"
"@sentry/hub" "6.17.8"
"@sentry/tracing" "6.17.8"
"@sentry/types" "6.17.8"
"@sentry/utils" "6.17.8"
"@sentry/core" "6.17.9"
"@sentry/hub" "6.17.9"
"@sentry/tracing" "6.17.9"
"@sentry/types" "6.17.9"
"@sentry/utils" "6.17.9"
cookie "^0.4.1"
https-proxy-agent "^5.0.0"
lru_map "^0.3.3"
tslib "^1.9.3"
"@sentry/tracing@6.17.8", "@sentry/tracing@^6.17.8":
version "6.17.8"
resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-6.17.8.tgz#a7a45aac3a1808afe946c1404538a8a1ab85a11b"
integrity sha512-WJ3W8O6iPI3w7MrzTnYcw3s5PGBNFqT4b9oBCl5Ndjexs8DsGlQOxjrsipo36z6TpnRHpAE4FEbOETb2R8JRJQ==
"@sentry/tracing@6.17.9", "@sentry/tracing@^6.17.9":
version "6.17.9"
resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-6.17.9.tgz#d4a6d96d88f10c9cd496e5b32f44d6e67d4c5dc7"
integrity sha512-5Rb/OS4ryNJLvz2nv6wyjwhifjy6veqaF9ffLrwFYij/WDy7m62ASBblxgeiI3fbPLX0aBRFWIJAq1vko26+AQ==
dependencies:
"@sentry/hub" "6.17.8"
"@sentry/minimal" "6.17.8"
"@sentry/types" "6.17.8"
"@sentry/utils" "6.17.8"
"@sentry/hub" "6.17.9"
"@sentry/minimal" "6.17.9"
"@sentry/types" "6.17.9"
"@sentry/utils" "6.17.9"
tslib "^1.9.3"
"@sentry/types@6.17.8":
version "6.17.8"
resolved "https://registry.yarnpkg.com/@sentry/types/-/types-6.17.8.tgz#f1f9fbf2f87f0374b6e122ae065da5ca679bc5ea"
integrity sha512-0i0f+dpvV62Pm5QMVBHNfEsTGIXoXRGQbeN2LGL4XbhzrzUmIrBPzrnZHv9c/JYtSJnI6A0B9OG7Bdlh3aku+Q==
"@sentry/types@6.17.9":
version "6.17.9"
resolved "https://registry.yarnpkg.com/@sentry/types/-/types-6.17.9.tgz#d579c33cde0301adaf8ff4762479ad017bf0dffa"
integrity sha512-xuulX6qUCL14ayEOh/h6FUIvZtsi1Bx34dSOaWDrjXUOJHJAM7214uiqW1GZxPJ13YuaUIubjTSfDmSQ9CBzTw==
"@sentry/utils@6.17.8":
version "6.17.8"
resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-6.17.8.tgz#a223f5184cbba8c4ad5ebd57800b6f368b274e48"
integrity sha512-cAOM53A5FHv95hpDuXKJU8rI4B1XdZ6qe3Yo+/nDS9QDpOgzvyjcItgXPvKW1wUjdHCcnwu7VBfBxB7teYOW9g==
"@sentry/utils@6.17.9":
version "6.17.9"
resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-6.17.9.tgz#425fe9af4e2d6114c2e9aaede75ccb6ddf91fbda"
integrity sha512-4eo9Z3JlJCGlGrQRbtZWL+L9NnlUXgTbfK3Lk7oO8D1ev8R5b5+iE6tZHTvU5rQRcq6zu+POT+tK5u9oxc/rnQ==
dependencies:
"@sentry/types" "6.17.8"
"@sentry/types" "6.17.9"
tslib "^1.9.3"
"@svgr/babel-plugin-add-jsx-attribute@^6.0.0":
@ -2336,7 +2336,7 @@ cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3:
shebang-command "^2.0.0"
which "^2.0.1"
css-functions-list@^3.0.0:
css-functions-list@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/css-functions-list/-/css-functions-list-3.0.1.tgz#1460df7fb584d1692c30b105151dbb988c8094f9"
integrity sha512-PriDuifDt4u4rkDgnqRCLnjfMatufLmWNfQnGCq34xZwpY3oabwhB9SqRBmuvWUgndbemCFlKqg+nO7C2q0SBw==
@ -4778,10 +4778,10 @@ next-seo@^5.1.0:
resolved "https://registry.yarnpkg.com/next-seo/-/next-seo-5.1.0.tgz#aa9fd6249a11bf93e6da06fa2a6bc89268936edf"
integrity sha512-ampuQfNTOi1x+xtRIb6CZGunIo6rQXtMo2Tyu861d5GjJFIwfOXsA4lzCa4+e2rLkyXDyVpavNNUZWa3US9ELw==
next-sitemap@^2.1.15:
version "2.1.15"
resolved "https://registry.yarnpkg.com/next-sitemap/-/next-sitemap-2.1.15.tgz#a1ce4e28e3d502f7bfece2b9d9290b2ac1cdefba"
integrity sha512-otfE6+6HNElca/CojaqDkZOxNoQDL9Z2TIULh+PCxBbt2eGvyqvaQyv+By5dSeWktVPiAomGxYCnIfy+eSOxKg==
next-sitemap@^2.4.2:
version "2.4.2"
resolved "https://registry.yarnpkg.com/next-sitemap/-/next-sitemap-2.4.2.tgz#f5b9c344ee8c4757ca72467084621b6158e628a2"
integrity sha512-cvcK2oXNpVcxizPN4dSkOwA5/KIOUXrJVaWYuk17YQvbBqQzufhhr2JgqgB4QoG0U7sMlB1RB1VPDAZ78kK0Qw==
dependencies:
"@corex/deepmerge" "^2.6.148"
minimist "^1.2.5"
@ -6118,15 +6118,15 @@ stylelint-prettier@~2.0.0:
dependencies:
prettier-linter-helpers "^1.0.0"
stylelint@~14.5.0:
version "14.5.0"
resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-14.5.0.tgz#d94252027164bc918303a6b782652931421d8871"
integrity sha512-4dvQjrhAz2njLoE1OvUEZpryNWcmx2w5Lq5jlibxFv6b5W6O8/vob12M2ZzhX3Ndzs5f67F+BEYmhnQXOwfVYQ==
stylelint@~14.5.1:
version "14.5.1"
resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-14.5.1.tgz#2b2575ccaf14bb057209d48fc87c17d5b684f8db"
integrity sha512-8Hf4HtnhxlWlf7iXF9zFfhSc3X0teRnVzl6PqPs2JEFx+dy/mhMhghZfiTDW4QG0ihDw9+WP7GZw5Nzx7cQF5A==
dependencies:
balanced-match "^2.0.0"
colord "^2.9.2"
cosmiconfig "^7.0.1"
css-functions-list "^3.0.0"
css-functions-list "^3.0.1"
debug "^4.3.3"
execall "^2.0.0"
fast-glob "^3.2.11"
@ -6163,7 +6163,7 @@ stylelint@~14.5.0:
svg-tags "^1.0.0"
table "^6.8.0"
v8-compile-cache "^2.3.0"
write-file-atomic "^4.0.0"
write-file-atomic "^4.0.1"
supports-color@^5.3.0:
version "5.5.0"
@ -6834,7 +6834,7 @@ wrappy@1:
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
write-file-atomic@^4.0.0:
write-file-atomic@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.1.tgz#9faa33a964c1c85ff6f849b80b42a88c2c537c8f"
integrity sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==