diff --git a/.github/workflows/pr-checks.yml b/.github/workflows/pr-checks.yml new file mode 100644 index 00000000..4120863b --- /dev/null +++ b/.github/workflows/pr-checks.yml @@ -0,0 +1,29 @@ +name: PR Checks + +on: + pull_request: + branches: + - main + +jobs: + lint-and-test: + name: Lint and Test + runs-on: ubuntu-latest + steps: + - name: Checkout repo + uses: actions/checkout@v4 + + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version: 20 + cache: npm + + - name: Install dependencies + run: npm ci + + - name: Lint + run: npm run lint + + - name: Test + run: npm test -- --run diff --git a/lib/catalyst/avatar.jsx b/lib/catalyst/avatar.jsx index 1204c983..163763be 100644 --- a/lib/catalyst/avatar.jsx +++ b/lib/catalyst/avatar.jsx @@ -51,7 +51,7 @@ export function Avatar({ {/* Add an inset border that sits on top of the image */} ); diff --git a/lib/catalyst/fieldset.jsx b/lib/catalyst/fieldset.jsx index 0111b6ab..ac362313 100644 --- a/lib/catalyst/fieldset.jsx +++ b/lib/catalyst/fieldset.jsx @@ -72,7 +72,7 @@ export function Label({ className, ...props }) { ); } -export function Description({ className, disabled, ...props }) { +export function Description({ className, ...props }) { return (
{children} diff --git a/lib/components/form/fieldset.jsx b/lib/components/form/fieldset.jsx index 87bc13bc..d3aae92c 100644 --- a/lib/components/form/fieldset.jsx +++ b/lib/components/form/fieldset.jsx @@ -62,7 +62,7 @@ export function Label({ className, ...props }) { return ; } -export function Description({ className, disabled, ...props }) { +export function Description({ className, ...props }) { const descriptionClass = useMemo(() => { return gwMerge( "gw-text-base/6 gw-text-zinc-500 data-[disabled]:gw-opacity-50 sm:gw-text-sm/6 dark:gw-text-zinc-400", @@ -78,7 +78,7 @@ export function Description({ className, disabled, ...props }) { ); } -export function ErrorMessage({ className, disabled, ...props }) { +export function ErrorMessage({ className, ...props }) { const errorMessageClass = useMemo(() => { return gwMerge( "gw-text-base/6 gw-text-red-600 data-[disabled]:gw-opacity-50 sm:gw-text-sm/6 dark:gw-text-red-500", diff --git a/lib/components/layout/container.jsx b/lib/components/layout/container.jsx index 364f5cac..7ef08425 100644 --- a/lib/components/layout/container.jsx +++ b/lib/components/layout/container.jsx @@ -8,7 +8,7 @@ function Container({ className, children, fluid }) { fluid ? "gw-max-w-screen" : "gw-max-w-screen-2xl", className, ); - }, [className]); + }, [className, fluid]); return
{children}
; } diff --git a/lib/components/search.jsx b/lib/components/search.jsx index b5595dd6..c5ca18e0 100644 --- a/lib/components/search.jsx +++ b/lib/components/search.jsx @@ -40,6 +40,7 @@ function SearchDotGov({ accessKey, affiliate, placeholder, ...props }) { setSearchString(e.target.value); }} onKeyUp={handleKeyUp} + placeholder={placeholder} {...props} /> ); diff --git a/lib/composite/footer/index.jsx b/lib/composite/footer/index.jsx index 482e0179..991bd146 100644 --- a/lib/composite/footer/index.jsx +++ b/lib/composite/footer/index.jsx @@ -89,8 +89,8 @@ function Footer({ flickrUrl, instagramUrl, linkedInUrl, - usaceLinks, - externalLinks, + usaceLinks = defaultLinks, + externalLinks = defaultOffsiteLinks, armyLogo, army250Logo, usaceLogo, diff --git a/src/app-pages/documentation/buttons/login-button.jsx b/src/app-pages/documentation/buttons/login-button.jsx index 8507e3cb..129dd29c 100644 --- a/src/app-pages/documentation/buttons/login-button.jsx +++ b/src/app-pages/documentation/buttons/login-button.jsx @@ -71,7 +71,7 @@ const componentProps_ProfileDropdown = [ ]; function validateEmail(email) { - const re = /^[A-Za-z0-9_!#$%&'*+\/=?`{|}~^.-]+@[A-Za-z0-9.-]+$/gm; + const re = /^[A-Za-z0-9_!#$%&'*+/=?`{|}~^.-]+@[A-Za-z0-9.-]+$/gm; return re.test(email); } diff --git a/src/app-pages/documentation/forms/radio-group.jsx b/src/app-pages/documentation/forms/radio-group.jsx index 6d44dcde..5d35427e 100644 --- a/src/app-pages/documentation/forms/radio-group.jsx +++ b/src/app-pages/documentation/forms/radio-group.jsx @@ -1,4 +1,4 @@ -import { useMemo, useState } from "react"; +import { useEffect, useState } from "react"; import { UsaceBox, Code, Text, H3, RadioGroup } from "../../../../lib"; import { CodeExample } from "../../../app-components/code-example"; import PropsTable from "../../../app-components/props-table"; @@ -59,11 +59,15 @@ const FT_TO_METERS_SCALAR = 0.3048; function RadioGroupDocs() { const [units, setUnits] = useState(null); const [value, setValue] = useState(200); - useMemo(() => { + useEffect(() => { if (units?.toLowerCase() == "en") - setValue((value / FT_TO_METERS_SCALAR).toFixed(2)); + setValue((currentValue) => + (currentValue / FT_TO_METERS_SCALAR).toFixed(2), + ); else if (units?.toLowerCase() == "si") - setValue((value * FT_TO_METERS_SCALAR).toFixed(2)); + setValue((currentValue) => + (currentValue * FT_TO_METERS_SCALAR).toFixed(2), + ); }, [units]); return ( diff --git a/src/app-pages/documentation/getting-started/adding-tailwind.jsx b/src/app-pages/documentation/getting-started/adding-tailwind.jsx index 43dbb51a..8bf84a6e 100644 --- a/src/app-pages/documentation/getting-started/adding-tailwind.jsx +++ b/src/app-pages/documentation/getting-started/adding-tailwind.jsx @@ -1,5 +1,4 @@ -import { UsaceBox, Code, Text, H3, H4, Divider, Badge } from "../../../../lib"; -import { CodeBlock } from "../../../app-components/code-block"; +import { UsaceBox, Code, Text, H3, Divider, Badge } from "../../../../lib"; import { CodeExample } from "../../../app-components/code-example"; import DocsPage from "../_docs-page"; import { TbPlayerTrackNext } from "react-icons/tb"; diff --git a/tailwind.config.js b/tailwind.config.js index 205ef05b..0f441e8c 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -1,3 +1,5 @@ +import forms from "@tailwindcss/forms"; + /** @type {import('tailwindcss').Config} */ export default { prefix: "gw-", @@ -32,5 +34,5 @@ export default { }, }, darkMode: "class", - plugins: [require("@tailwindcss/forms")], + plugins: [forms], };