@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.
- package/dist/groundwork.es.js +5131 -0
- package/dist/groundwork.umd.js +30 -0
- package/dist/style.css +1 -0
- package/package.json +11 -3
- package/.eslintrc.cjs +0 -18
- package/.github/workflows/deploy-docs.yml +0 -59
- package/.github/workflows/publish.yml +0 -19
- package/index.html +0 -13
- package/lib/catalyst/alert.jsx +0 -110
- package/lib/catalyst/avatar.jsx +0 -64
- package/lib/catalyst/badge.jsx +0 -72
- package/lib/catalyst/checkbox.jsx +0 -160
- package/lib/catalyst/dialog.jsx +0 -101
- package/lib/catalyst/dropdown.jsx +0 -202
- package/lib/catalyst/fieldset.jsx +0 -87
- package/lib/catalyst/input.jsx +0 -78
- package/lib/catalyst/listbox.jsx +0 -195
- package/lib/catalyst/pagination.jsx +0 -75
- package/lib/catalyst/radio.jsx +0 -144
- package/lib/catalyst/select.jsx +0 -78
- package/lib/catalyst/switch.jsx +0 -203
- package/lib/catalyst/textarea.jsx +0 -59
- package/lib/components/breadcrumbs.jsx +0 -46
- package/lib/components/button.jsx +0 -219
- package/lib/components/display/headings.jsx +0 -39
- package/lib/components/display/text.jsx +0 -48
- package/lib/components/hero.jsx +0 -51
- package/lib/components/layout/container.jsx +0 -13
- package/lib/components/layout/usace-box.jsx +0 -26
- package/lib/components/link.jsx +0 -18
- package/lib/components/table.jsx +0 -146
- package/lib/composite/footer/essayons.jsx +0 -12
- package/lib/composite/footer/footer-links.jsx +0 -33
- package/lib/composite/footer/index.jsx +0 -148
- package/lib/composite/footer/logo-banner.jsx +0 -55
- package/lib/composite/footer/social-links.jsx +0 -60
- package/lib/composite/header/index.jsx +0 -83
- package/lib/composite/header/navbar-links.jsx +0 -113
- package/lib/composite/header/usa-banner/USABanner.jsx +0 -114
- package/lib/composite/header/usa-banner/usa-banner.css +0 -220
- package/lib/composite/site-wrapper/index.jsx +0 -52
- package/lib/index.jsx +0 -19
- package/postcss.config.js +0 -6
- package/public/Magnifying_glass_icon.svg +0 -5
- package/public/armystar-logo-rb.svg +0 -4
- package/public/cwbi-logo.png +0 -0
- package/public/essayonscrest.png +0 -0
- package/public/icon-dot-gov.svg +0 -1
- package/public/icon-https.svg +0 -1
- package/public/nww-lucky-peak-dam.jpg +0 -0
- package/public/rsgis-logo.png +0 -0
- package/public/us_flag_small.png +0 -0
- package/public/usace-logo-color.svg +0 -1
- package/src/App.jsx +0 -38
- package/src/app-bundles/index.js +0 -4
- package/src/app-bundles/route-bundle.js +0 -36
- package/src/app-components/code-example.jsx +0 -17
- package/src/app-components/copy-button.jsx +0 -32
- package/src/app-components/props-table.jsx +0 -43
- package/src/app-components/sub-site-banner.jsx +0 -15
- package/src/app-pages/documentation/_docs-page.jsx +0 -31
- package/src/app-pages/documentation/_docs-sidebar.jsx +0 -111
- package/src/app-pages/documentation/_template.jsx +0 -55
- package/src/app-pages/documentation/app-shell/index.jsx +0 -39
- package/src/app-pages/documentation/app-shell/site-wrapper.jsx +0 -190
- package/src/app-pages/documentation/buttons/index.jsx +0 -170
- package/src/app-pages/documentation/index.jsx +0 -57
- package/src/app-pages/documentation/layout/container.jsx +0 -68
- package/src/app-pages/documentation/layout/index.jsx +0 -52
- package/src/app-pages/documentation/layout/usace-box.jsx +0 -76
- package/src/app-pages/documentation/navigation/breadcrumbs.jsx +0 -119
- package/src/app-pages/documentation/navigation/index.jsx +0 -31
- package/src/app-pages/documentation/types/index.jsx +0 -31
- package/src/app-pages/documentation/types/link.jsx +0 -72
- package/src/app-pages/home.jsx +0 -71
- package/src/index.css +0 -3
- package/src/main.jsx +0 -18
- package/tailwind.config.js +0 -31
- 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 };
|
package/lib/components/link.jsx
DELETED
|
@@ -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
|
-
})
|
package/lib/components/table.jsx
DELETED
|
@@ -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 };
|