@usace/groundwork 1.0.2 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/dist/groundwork.es.js +5131 -0
  2. package/dist/groundwork.umd.js +30 -0
  3. package/dist/style.css +1 -0
  4. package/package.json +11 -3
  5. package/.eslintrc.cjs +0 -18
  6. package/.github/workflows/deploy-docs.yml +0 -59
  7. package/.github/workflows/publish.yml +0 -19
  8. package/index.html +0 -13
  9. package/lib/catalyst/alert.jsx +0 -110
  10. package/lib/catalyst/avatar.jsx +0 -64
  11. package/lib/catalyst/badge.jsx +0 -72
  12. package/lib/catalyst/checkbox.jsx +0 -160
  13. package/lib/catalyst/dialog.jsx +0 -101
  14. package/lib/catalyst/dropdown.jsx +0 -202
  15. package/lib/catalyst/fieldset.jsx +0 -87
  16. package/lib/catalyst/input.jsx +0 -78
  17. package/lib/catalyst/listbox.jsx +0 -195
  18. package/lib/catalyst/pagination.jsx +0 -75
  19. package/lib/catalyst/radio.jsx +0 -144
  20. package/lib/catalyst/select.jsx +0 -78
  21. package/lib/catalyst/switch.jsx +0 -203
  22. package/lib/catalyst/textarea.jsx +0 -59
  23. package/lib/components/breadcrumbs.jsx +0 -46
  24. package/lib/components/button.jsx +0 -219
  25. package/lib/components/display/headings.jsx +0 -39
  26. package/lib/components/display/text.jsx +0 -48
  27. package/lib/components/hero.jsx +0 -51
  28. package/lib/components/layout/container.jsx +0 -13
  29. package/lib/components/layout/usace-box.jsx +0 -26
  30. package/lib/components/link.jsx +0 -18
  31. package/lib/components/table.jsx +0 -146
  32. package/lib/composite/footer/essayons.jsx +0 -12
  33. package/lib/composite/footer/footer-links.jsx +0 -33
  34. package/lib/composite/footer/index.jsx +0 -148
  35. package/lib/composite/footer/logo-banner.jsx +0 -55
  36. package/lib/composite/footer/social-links.jsx +0 -60
  37. package/lib/composite/header/index.jsx +0 -83
  38. package/lib/composite/header/navbar-links.jsx +0 -113
  39. package/lib/composite/header/usa-banner/USABanner.jsx +0 -114
  40. package/lib/composite/header/usa-banner/usa-banner.css +0 -220
  41. package/lib/composite/site-wrapper/index.jsx +0 -52
  42. package/lib/index.jsx +0 -19
  43. package/postcss.config.js +0 -6
  44. package/public/Magnifying_glass_icon.svg +0 -5
  45. package/public/armystar-logo-rb.svg +0 -4
  46. package/public/cwbi-logo.png +0 -0
  47. package/public/essayonscrest.png +0 -0
  48. package/public/icon-dot-gov.svg +0 -1
  49. package/public/icon-https.svg +0 -1
  50. package/public/nww-lucky-peak-dam.jpg +0 -0
  51. package/public/rsgis-logo.png +0 -0
  52. package/public/us_flag_small.png +0 -0
  53. package/public/usace-logo-color.svg +0 -1
  54. package/src/App.jsx +0 -38
  55. package/src/app-bundles/index.js +0 -4
  56. package/src/app-bundles/route-bundle.js +0 -36
  57. package/src/app-components/code-example.jsx +0 -17
  58. package/src/app-components/copy-button.jsx +0 -32
  59. package/src/app-components/props-table.jsx +0 -43
  60. package/src/app-components/sub-site-banner.jsx +0 -15
  61. package/src/app-pages/documentation/_docs-page.jsx +0 -31
  62. package/src/app-pages/documentation/_docs-sidebar.jsx +0 -111
  63. package/src/app-pages/documentation/_template.jsx +0 -55
  64. package/src/app-pages/documentation/app-shell/index.jsx +0 -39
  65. package/src/app-pages/documentation/app-shell/site-wrapper.jsx +0 -190
  66. package/src/app-pages/documentation/buttons/index.jsx +0 -170
  67. package/src/app-pages/documentation/index.jsx +0 -57
  68. package/src/app-pages/documentation/layout/container.jsx +0 -68
  69. package/src/app-pages/documentation/layout/index.jsx +0 -52
  70. package/src/app-pages/documentation/layout/usace-box.jsx +0 -76
  71. package/src/app-pages/documentation/navigation/breadcrumbs.jsx +0 -119
  72. package/src/app-pages/documentation/navigation/index.jsx +0 -31
  73. package/src/app-pages/documentation/types/index.jsx +0 -31
  74. package/src/app-pages/documentation/types/link.jsx +0 -72
  75. package/src/app-pages/home.jsx +0 -71
  76. package/src/index.css +0 -3
  77. package/src/main.jsx +0 -18
  78. package/tailwind.config.js +0 -31
  79. package/vite.config.js +0 -46
@@ -1,13 +0,0 @@
1
- import clsx from "clsx";
2
-
3
- function Container({ className, children, fluid }) {
4
- const containerClass = clsx(
5
- "w-full mx-auto px-4 box-border",
6
- fluid ? "max-w-full" : "max-w-[1140px]",
7
- className
8
- );
9
- return <div className={containerClass}>{children}</div>;
10
- }
11
-
12
- export default Container;
13
- export { Container };
@@ -1,26 +0,0 @@
1
- import clsx from "clsx";
2
-
3
- function UsaceBox({ children, className, title, customTitle }) {
4
- const CustomTitle = customTitle;
5
- const boxClass = "mb-10 relative";
6
- const beforeClass =
7
- "before:block before:bg-usace-box-light-gray before:h-8 before:mb-[-12px] before:w-full";
8
- const afterClass =
9
- "after:block after:absolute after:top-0 after:left-0 after:bg-usace-box-red after:h-[5px] after:w-[50px] after:z-[2]";
10
-
11
- return (
12
- <div className={clsx(className, boxClass, beforeClass, afterClass)}>
13
- <h2
14
- style={{ fontSize: "1.3rem", lineHeight: "1.4rem" }}
15
- className="font-bold mb-6"
16
- >
17
- {title}
18
- {CustomTitle && <CustomTitle />}
19
- </h2>
20
- {children}
21
- </div>
22
- );
23
- }
24
-
25
- export default UsaceBox;
26
- export { UsaceBox };
@@ -1,18 +0,0 @@
1
- /*
2
- TODO: Update this component to use your client-side framework's link
3
- component. We've provided examples of how to do this for Next.js,
4
- Remix, and Inertia.js in the Catalyst documentation:
5
-
6
- https://catalyst.tailwindui.com/docs#client-side-router-integration
7
- */
8
-
9
- import { DataInteractive as HeadlessDataInteractive } from '@headlessui/react'
10
- import React from 'react'
11
-
12
- export const Link = React.forwardRef(function Link(props, ref) {
13
- return (
14
- <HeadlessDataInteractive>
15
- <a {...props} ref={ref} />
16
- </HeadlessDataInteractive>
17
- )
18
- })
@@ -1,146 +0,0 @@
1
- "use client";
2
-
3
- import { clsx } from "clsx";
4
- import { createContext, useContext, useState } from "react";
5
- import { Link } from "./link";
6
-
7
- const TableContext = createContext({
8
- bleed: false,
9
- dense: false,
10
- grid: false,
11
- striped: false,
12
- });
13
-
14
- export function Table({
15
- bleed = false,
16
- dense = false,
17
- grid = false,
18
- striped = false,
19
- className,
20
- children,
21
- ...props
22
- }) {
23
- return (
24
- <TableContext.Provider value={{ bleed, dense, grid, striped }}>
25
- <div className="flow-root">
26
- <div
27
- {...props}
28
- className={clsx(
29
- className,
30
- "-mx-[--gutter] overflow-x-auto whitespace-nowrap"
31
- )}
32
- >
33
- <div
34
- className={clsx(
35
- "inline-block min-w-full align-middle",
36
- !bleed && "sm:px-[--gutter]"
37
- )}
38
- >
39
- <table className="min-w-full text-left text-sm/6">{children}</table>
40
- </div>
41
- </div>
42
- </div>
43
- </TableContext.Provider>
44
- );
45
- }
46
-
47
- export function TableHead({ className, ...props }) {
48
- return (
49
- <thead
50
- className={clsx(className, "text-zinc-500 dark:text-zinc-400")}
51
- {...props}
52
- />
53
- );
54
- }
55
-
56
- export function TableBody(props) {
57
- return <tbody {...props} />;
58
- }
59
-
60
- const TableRowContext = createContext({
61
- href: undefined,
62
- target: undefined,
63
- title: undefined,
64
- });
65
-
66
- export function TableRow({
67
- href,
68
- target,
69
- title,
70
- className,
71
- children,
72
- ...props
73
- }) {
74
- let { striped } = useContext(TableContext);
75
-
76
- return (
77
- <TableRowContext.Provider value={{ href, target, title }}>
78
- <tr
79
- {...props}
80
- className={clsx(
81
- className,
82
- href &&
83
- "has-[[data-row-link][data-focus]]:outline has-[[data-row-link][data-focus]]:outline-2 has-[[data-row-link][data-focus]]:-outline-offset-2 has-[[data-row-link][data-focus]]:outline-blue-500 dark:focus-within:bg-white/[2.5%]",
84
- striped && "even:bg-zinc-950/[2.5%] dark:even:bg-white/[2.5%]",
85
- href && striped && "hover:bg-zinc-950/5 dark:hover:bg-white/5",
86
- href &&
87
- !striped &&
88
- "hover:bg-zinc-950/[2.5%] dark:hover:bg-white/[2.5%]"
89
- )}
90
- >
91
- {children}
92
- </tr>
93
- </TableRowContext.Provider>
94
- );
95
- }
96
-
97
- export function TableHeader({ className, ...props }) {
98
- let { bleed, grid } = useContext(TableContext);
99
-
100
- return (
101
- <th
102
- {...props}
103
- className={clsx(
104
- className,
105
- "border-b border-b-zinc-950/10 px-4 py-2 font-medium first:pl-[var(--gutter,theme(spacing.2))] last:pr-[var(--gutter,theme(spacing.2))] dark:border-b-white/10",
106
- grid &&
107
- "border-l border-l-zinc-950/5 first:border-l-0 dark:border-l-white/5",
108
- !bleed && "sm:first:pl-2 sm:last:pr-2"
109
- )}
110
- />
111
- );
112
- }
113
-
114
- export function TableCell({ className, children, ...props }) {
115
- let { bleed, dense, grid, striped } = useContext(TableContext);
116
- let { href, target, title } = useContext(TableRowContext);
117
- let [cellRef, setCellRef] = useState(null);
118
-
119
- return (
120
- <td
121
- ref={href ? setCellRef : undefined}
122
- {...props}
123
- className={clsx(
124
- className,
125
- "relative px-4 first:pl-[var(--gutter,theme(spacing.2))] last:pr-[var(--gutter,theme(spacing.2))]",
126
- !striped && "border-b border-zinc-950/5 dark:border-white/5",
127
- grid &&
128
- "border-l border-l-zinc-950/5 first:border-l-0 dark:border-l-white/5",
129
- dense ? "py-2.5" : "py-4",
130
- !bleed && "sm:first:pl-2 sm:last:pr-2"
131
- )}
132
- >
133
- {href && (
134
- <Link
135
- data-row-link
136
- href={href}
137
- target={target}
138
- aria-label={title}
139
- tabIndex={cellRef?.previousElementSibling === null ? 0 : -1}
140
- className="absolute inset-0 focus:outline-none"
141
- />
142
- )}
143
- {children}
144
- </td>
145
- );
146
- }
@@ -1,12 +0,0 @@
1
- const base = import.meta.env.BASE_URL;
2
-
3
- function Essayons() {
4
- return (
5
- <div
6
- className={`absolute bottom-[56px] left-[50%] h-[125px] w-[112px] ml-[-56px] bg-[url(${base}essayonscrest.png)]`}
7
- />
8
- );
9
- }
10
-
11
- export default Essayons;
12
- export { Essayons };
@@ -1,33 +0,0 @@
1
- function FooterLinks({ links = [], columnCount = 2 }) {
2
- return (
3
- <ul
4
- className="list-none"
5
- style={{
6
- columnCount: columnCount,
7
- columnGap: "40px",
8
- margin: 0,
9
- padding: "0 0 0 2px",
10
- }}
11
- >
12
- {links.map((link, i) => {
13
- const target = link.href.startsWith("http") ? "_blank" : "";
14
- const rel = link.href.startsWith("http") ? "noopener noreferrer" : "";
15
- return (
16
- <li key={link.text + i} className="mb-2">
17
- <a
18
- href={link.href}
19
- target={target}
20
- rel={rel}
21
- className="hover:underline"
22
- >
23
- {link.text}
24
- </a>
25
- </li>
26
- );
27
- })}
28
- </ul>
29
- );
30
- }
31
-
32
- export default FooterLinks;
33
- export { FooterLinks };
@@ -1,148 +0,0 @@
1
- import Container from "../../components/layout/container";
2
- import { Text } from "../../components/display/text";
3
- import Essayons from "./essayons";
4
- import LogoBanner from "./logo-banner";
5
- import SocialLinks from "./social-links";
6
- import FooterLinks from "./footer-links";
7
-
8
- const defaultLinks = [
9
- {
10
- href: "https://www.lrd.usace.army.mil/about/connect-with-us/",
11
- text: "Contact",
12
- },
13
- {
14
- href: "https://www.lrd.usace.army.mil/Careers/",
15
- text: "Join Our Team",
16
- },
17
- {
18
- href: "https://www.lrd.usace.army.mil/Wetlands-Permits/",
19
- text: "Request a Permit (Regulatory)",
20
- },
21
- {
22
- href: "https://www.lrd.usace.army.mil/FOIA/",
23
- text: "Records Request (FOIA)",
24
- },
25
- {
26
- href: "https://www.usace.army.mil/About/Offices-and-Units/Engineer-Inspector-General/",
27
- text: "File a Complaint (IG)",
28
- },
29
- {
30
- href: "https://www.lrd.usace.army.mil/Business-With-Us/",
31
- text: "Business With Us",
32
- },
33
- {
34
- href: "https://www.lrd.usace.army.mil/Equal-Employment-Opportunity/",
35
- text: "Equal Employment Opportunity (EEO)",
36
- },
37
- {
38
- href: "https://www.usace.army.mil/LinkDisclaimer.aspx",
39
- text: "Link Disclaimer",
40
- },
41
- {
42
- href: "https://www.usace.army.mil/PrivacyandSecurity.aspx",
43
- text: "Privacy and Security",
44
- },
45
- {
46
- href: "https://www.lrd.usace.army.mil/SiteMap.aspx",
47
- text: "Site Map",
48
- },
49
- ];
50
-
51
- const defaultOffsiteLinks = [
52
- {
53
- href: "https://dodcio.defense.gov/DoDSection508/Std_Stmt.aspx",
54
- text: "Accessibility (Section 508)",
55
- },
56
- {
57
- href: "http://www.esd.whs.mil/DD/plainlanguage",
58
- text: "Plain Writing Act",
59
- },
60
- {
61
- href: "https://prhome.defense.gov/nofear",
62
- text: "No FEAR Act",
63
- },
64
- {
65
- href: "https://open.defense.gov/",
66
- text: "Open Government",
67
- },
68
- {
69
- href: "https://business.defense.gov/",
70
- text: "Small Business Act",
71
- },
72
- {
73
- href: "https://www.inscom.army.mil/isalute/",
74
- text: "Report Suspicious Activity",
75
- },
76
- {
77
- href: "https://www.usa.gov",
78
- text: "Find Government Services (USA.gov)",
79
- },
80
- ];
81
-
82
- function Footer({
83
- missionText,
84
- aboutText,
85
- facebookUrl,
86
- twitterUrl,
87
- youtubeUrl,
88
- flickrUrl,
89
- usaceLinks,
90
- externalLinks,
91
- armyLogo,
92
- usaceLogo,
93
- rsgisLogo,
94
- cwbiLogo,
95
- }) {
96
- return (
97
- <footer className="relative text-footer-light-gray text-sm bg-footer-black border-t-gray-600 border-t-4 pb-[128px]">
98
- <Essayons />
99
- <div className="bg-footer-gray pt-8 pb-16">
100
- <Container fluid>
101
- <div className="grid grid-cols-12 gap-2">
102
- <div className="col-span-12 lg:col-span-6">
103
- <div className="grid grid-cols-12 gap-2">
104
- <div className="col-span-6 lg:col-span-12">
105
- {missionText && (
106
- <>
107
- <h2 className="text-lg">Our Mission</h2>
108
- <Text>{missionText}</Text>
109
- </>
110
- )}
111
- </div>
112
- <div className="col-span-6 lg:col-span-12">
113
- {aboutText && (
114
- <>
115
- <h2 className="text-lg">About this Website</h2>
116
- <Text>{aboutText}</Text>
117
- </>
118
- )}
119
- </div>
120
- </div>
121
- </div>
122
- <div className="col-span-8 mt-8 lg:mt-2 lg:col-span-4">
123
- <SocialLinks
124
- facebook={facebookUrl}
125
- twitter={twitterUrl}
126
- youtube={youtubeUrl}
127
- flickr={flickrUrl}
128
- />
129
- <FooterLinks links={usaceLinks} />
130
- </div>
131
- <div className="col-span-4 mt-[66px] lg:mt-2 lg:col-span-2">
132
- <FooterLinks links={externalLinks} columnCount={1} />
133
- </div>
134
- </div>
135
- </Container>
136
- <LogoBanner
137
- army={armyLogo}
138
- usace={usaceLogo}
139
- rsgis={rsgisLogo}
140
- cwbi={cwbiLogo}
141
- />
142
- </div>
143
- </footer>
144
- );
145
- }
146
-
147
- export default Footer;
148
- export { Footer };
@@ -1,55 +0,0 @@
1
- const base = import.meta.env.BASE_URL;
2
-
3
- function LogoBanner({ army, usace, rsgis, cwbi }) {
4
- return (
5
- <div className="flex flex-row justify-center align-middle gap-6 mb-4">
6
- {army && (
7
- <a href="https://www.army.mil" target="_blank" rel="noopener">
8
- <img
9
- src={`${base}armystar-logo-rb.svg`}
10
- alt="U.S. Army"
11
- className="max-h-[75px]"
12
- />
13
- </a>
14
- )}
15
- {usace && (
16
- <a href="https://www.usace.army.mil" target="_blank" rel="noopener">
17
- <img
18
- src={`${base}usace-logo-color.svg`}
19
- alt="U.S. Army Corps of Engineers"
20
- className="max-h-[75px] h-[75px] w-auto"
21
- />
22
- </a>
23
- )}
24
- {rsgis && (
25
- <a
26
- href="https://www.erdc.usace.army.mil/Media/Fact-Sheets/Fact-Sheet-Article-View/article/476649/remote-sensinggeographic-information-systems-center/"
27
- target="_blank"
28
- rel="noopener"
29
- >
30
- <img
31
- src={`${base}rsgis-logo.png`}
32
- alt="Remote Sensing - GIS Center of Expertise"
33
- className="max-h-[75px]"
34
- />
35
- </a>
36
- )}
37
- {cwbi && (
38
- <a
39
- href="https://cwbi.sec.usace.army.mil"
40
- target="_blank"
41
- rel="noopener"
42
- >
43
- <img
44
- src={`${base}cwbi-logo.png`}
45
- alt="Civil Works Business Intelligence"
46
- className="max-h-[75px]"
47
- />
48
- </a>
49
- )}
50
- </div>
51
- );
52
- }
53
-
54
- export default LogoBanner;
55
- export { LogoBanner };
@@ -1,60 +0,0 @@
1
- import { FaFacebook, FaYoutube, FaFlickr } from "react-icons/fa";
2
- import { FaXTwitter } from "react-icons/fa6";
3
-
4
- function SocialLinks({ facebook, twitter, youtube, flickr }) {
5
- return (
6
- <ul className="text-2xl flex flex-row flex-wrap gap-2 list-none mb-3">
7
- {facebook && (
8
- <li>
9
- <a
10
- href={facebook}
11
- target="_blank"
12
- rel="noopener noreferrer"
13
- title="Facebook"
14
- >
15
- <FaFacebook />
16
- </a>
17
- </li>
18
- )}
19
- {twitter && (
20
- <li>
21
- <a
22
- href={twitter}
23
- target="_blank"
24
- rel="noopener noreferrer"
25
- title="Twitter"
26
- >
27
- <FaXTwitter />
28
- </a>
29
- </li>
30
- )}
31
- {youtube && (
32
- <li>
33
- <a
34
- href={youtube}
35
- target="_blank"
36
- rel="noopener noreferrer"
37
- title="YouTube"
38
- >
39
- <FaYoutube />
40
- </a>
41
- </li>
42
- )}
43
- {flickr && (
44
- <li>
45
- <a
46
- href={flickr}
47
- target="_blank"
48
- rel="noopener noreferrer"
49
- title="Flickr"
50
- >
51
- <FaFlickr />
52
- </a>
53
- </li>
54
- )}
55
- </ul>
56
- );
57
- }
58
-
59
- export default SocialLinks;
60
- export { SocialLinks };
@@ -1,83 +0,0 @@
1
- import { NavbarLinks } from "./navbar-links";
2
-
3
- const base = import.meta.env.BASE_URL;
4
-
5
- function classNames(...classes) {
6
- return classes.filter(Boolean).join(" ");
7
- }
8
-
9
- function Title({ title = "Title", subtitle = "Subtitle" }) {
10
- return (
11
- <div
12
- style={{ order: 2 }}
13
- className="font-usace w-full pl-[100px] bg-nav-gray"
14
- >
15
- <span className="text-sm font-bold mr-1">{title}</span>
16
- <span className="text-sm">{subtitle}</span>
17
- </div>
18
- );
19
- }
20
-
21
- function Nav({ children }) {
22
- return (
23
- <nav
24
- style={{ order: 1 }}
25
- className="flex flex-row relative justify-between content-center bg-nav-black text-white h-12 pl-[91px] z-80"
26
- >
27
- {children}
28
- </nav>
29
- );
30
- }
31
-
32
- function Logo() {
33
- return (
34
- <div className="absolute left-[15px] bottom-[-15px] w-[82px] z-10">
35
- <a href="/">
36
- <img className="h-[50px] w-auto" src={`${base}usace-logo-color.svg`} />
37
- </a>
38
- <div className="absolute left-[65px] bottom-[-9px] text-sm text-black">
39
- ®
40
- </div>
41
- </div>
42
- );
43
- }
44
-
45
- function Search() {
46
- return (
47
- <input
48
- style={{
49
- order: 2,
50
- backgroundImage: `url("${base}Magnifying_glass_icon.svg")`,
51
- backgroundSize: "13px",
52
- backgroundRepeat: "no-repeat",
53
- backgroundPosition: "10px center",
54
- }}
55
- className="bg-white border-gray-200 border-2 rounded h-8 m-2 text-sm text-black w-full max-w-[300px] pl-8"
56
- />
57
- );
58
- }
59
-
60
- function Header({ links, title, subtitle }) {
61
- const headerClass = classNames(
62
- "flex",
63
- "flex-col",
64
- "w-full",
65
- "sticky",
66
- "top-0",
67
- "z-20"
68
- );
69
-
70
- return (
71
- <header className={headerClass}>
72
- <Title title={title} subtitle={subtitle} />
73
- <Nav>
74
- <Logo />
75
- <NavbarLinks links={links} />
76
- <Search />
77
- </Nav>
78
- </header>
79
- );
80
- }
81
-
82
- export default Header;
83
- export { Header };