diff --git a/packages/frontend/rollup.config.mjs b/packages/frontend/rollup.config.mjs
index 125c85d6..559270cb 100644
--- a/packages/frontend/rollup.config.mjs
+++ b/packages/frontend/rollup.config.mjs
@@ -61,6 +61,8 @@ const globals = {
'tailwind-merge': 'tailwind-merge',
util: 'util',
swc: 'swc',
+ 'redux-persist': 'reduxPersist',
+ '@hello-pangea': 'pangea',
};
const config = [
diff --git a/packages/frontend/src/components/Content/TextContent.tsx b/packages/frontend/src/components/Content/TextContent.tsx
index a8c3e980..e4918ee8 100644
--- a/packages/frontend/src/components/Content/TextContent.tsx
+++ b/packages/frontend/src/components/Content/TextContent.tsx
@@ -3,12 +3,17 @@ import Markdown from 'react-markdown';
import remarkGfm from 'remark-gfm';
import { hashCode } from '../../utils/hash';
+import { twMerge } from 'tailwind-merge';
+import { Anchor } from '@mantine/core';
export enum ContentType {
Text = 'text',
TextArray = 'textArray',
Html = 'html',
Markdown = 'markdown',
+ TextWithEmail = 'textWithEmail',
+ TextWithLink = 'textWithLink',
+ Link = 'link',
}
export interface TextContentProps {
@@ -16,11 +21,14 @@ export interface TextContentProps {
readonly className?: string;
readonly type?: ContentType;
readonly email?: string;
+ readonly link?: string;
}
const TextContent = ({
text,
className = 'inline text-base-contrast color-red-500 font-medium margin-block-start-1 margin-block-end-1',
type = ContentType.Text,
+ email = undefined,
+ link = undefined,
}: TextContentProps) => {
switch (type) {
case ContentType.Html: {
@@ -32,62 +40,93 @@ const TextContent = ({
/>
);
}
- case ContentType.TextArray: {
- const textArray = !Array.isArray(text) ? [text] : text;
- return (
-
- {textArray.map((item) => (
-
{item}
- ))}
-
- );
- }
- case ContentType.Markdown: {
- const textString = Array.isArray(text) ? text.join('') : text;
- return (
-
+ case ContentType.TextArray: {
+ const textArray = !Array.isArray(text) ? [text] : text;
+ return (
+
+ {textArray.map((item) => (
+
+ {item}
+
+ ))}
+
+ );
+ }
+ case ContentType.Markdown: {
+ const textString = Array.isArray(text) ? text.join('') : text;
+ return (
+
+
);
},
- ol(props:any) {
+ ol(props: any) {
const { node, ...rest } = props;
- return (
-
- );
+ return
;
},
- ul(props:any) {
+ ul(props: any) {
const { node, ...rest } = props;
- return (
-
- );
+ return
;
},
- li(props:any) {
+ li(props: any) {
const { node, ...rest } = props;
return
;
},
}}
- >
+ >
{textString}
-
- );
- }
+
+ );
+ }
+ case ContentType.TextWithEmail: {
+ const DEFAULT_STYLE =
+ 'inline color-ink font-medium margin-block-start-1 margin-block-end-1';
+ const mergedClassname = className
+ ? twMerge(DEFAULT_STYLE, className)
+ : DEFAULT_STYLE;
+ const textString = Array.isArray(text) ? text.join('') : text;
+ return (
+
+
+ {textString}
+ {email && (
+ {` ${email}.`}
+ )}
+
+
+ );
+ }
+ case ContentType.TextWithLink: {
+ const DEFAULT_STYLE =
+ 'inline color-ink font-medium margin-block-start-1 margin-block-end-1';
+ const mergedClassname = className
+ ? twMerge(DEFAULT_STYLE, className)
+ : DEFAULT_STYLE;
+ const textString = Array.isArray(text) ? text.join('') : text;
+ return (
+
+
+ {textString}
+ {link && (
+ {` ${email}.`}
+ )}
+
+
+ );
+ }
case ContentType.Text:
default:
return (
diff --git a/packages/frontend/src/components/Login/LoginAccountButton.tsx b/packages/frontend/src/components/Login/LoginAccountButton.tsx
index 7483e198..13d5ba85 100644
--- a/packages/frontend/src/components/Login/LoginAccountButton.tsx
+++ b/packages/frontend/src/components/Login/LoginAccountButton.tsx
@@ -8,8 +8,15 @@ import {
isAuthenticated,
type CoreState,
} from '@gen3/core';
+import { mergeTailwindClassnameWithDefault } from '../../utils/mergeDefaultTailwindClassnames';
-const LoginAccountButton = () => {
+interface LoginAccountButtonProps {
+ className?: string;
+}
+
+const LoginAccountButton = ({
+ className = undefined,
+}: LoginAccountButtonProps) => {
const router = useRouter();
const handleSelected = async () => {
@@ -23,12 +30,15 @@ const LoginAccountButton = () => {
selectUserDetails(state),
);
+ const mergedClassname = mergeTailwindClassnameWithDefault(
+ className,
+ 'flex flex-nowrap items-center align-middle border-b-2 hover:border-accent border-transparent',
+ );
+
if (userStatus && isAuthenticated(userStatus)) {
return (
handleSelected()}>
-
- {userInfo?.username}
-
+ {userInfo?.username}
);
}
diff --git a/packages/frontend/src/components/Login/LoginButton.tsx b/packages/frontend/src/components/Login/LoginButton.tsx
index 9cb66280..dfc972ab 100644
--- a/packages/frontend/src/components/Login/LoginButton.tsx
+++ b/packages/frontend/src/components/Login/LoginButton.tsx
@@ -12,6 +12,7 @@ import {
} from '@gen3/core';
import { TooltipStyle } from '../../features/Navigation/style';
import { LoginButtonVisibility } from './types';
+import { mergeTailwindClassnameWithDefault } from '../../utils/mergeDefaultTailwindClassnames';
const handleSelected = async (
isAuthenticated: boolean,
@@ -36,7 +37,7 @@ interface LoginButtonProps {
const LoginButton = ({
icon = ,
hideText = false,
- className = 'flex flex-nowrap items-center font-content text-secondary-contrast-lighter align-middle border-b-2 hover:border-accent border-transparent mx-2',
+ className = undefined,
tooltip,
visibility,
}: LoginButtonProps) => {
@@ -56,6 +57,11 @@ const LoginButton = ({
if (visibility === LoginButtonVisibility.LogoutOnly && !authenticated)
return null;
+ const mergedClassname = mergeTailwindClassnameWithDefault(
+ className,
+ 'flex flex-nowrap items-center font-content text-secondary-contrast-lighter align-middle border-b-2 hover:border-accent border-transparent mx-2',
+ );
+
return (
-
+
{!hideText ? (authenticated ? 'Logout' : 'Login') : null}
{icon}
diff --git a/packages/frontend/src/components/Login/LoginPanel.tsx b/packages/frontend/src/components/Login/LoginPanel.tsx
index 0260f9b3..daf85c35 100644
--- a/packages/frontend/src/components/Login/LoginPanel.tsx
+++ b/packages/frontend/src/components/Login/LoginPanel.tsx
@@ -69,16 +69,9 @@ const LoginPanel = (loginConfig: LoginConfig) => {
)}
- {bottomContent?.map((content, index) =>
- content?.email ? (
-
- ) : (
-
- ),
- )}
+ {bottomContent?.map((content, index) => (
+
+ ))}
diff --git a/packages/frontend/src/features/Navigation/Footer/FooterColumn.tsx b/packages/frontend/src/features/Navigation/Footer/FooterColumn.tsx
index 52928c74..1dd05c11 100644
--- a/packages/frontend/src/features/Navigation/Footer/FooterColumn.tsx
+++ b/packages/frontend/src/features/Navigation/Footer/FooterColumn.tsx
@@ -9,7 +9,10 @@ import {
FooterLinks,
FooterSectionProps,
} from './types';
-import { mergeDefaultTailwindClassnames } from '../../../utils/mergeDefaultTailwindClassnames';
+import {
+ mergeDefaultTailwindClassnames,
+ mergeTailwindClassnameWithDefault,
+} from '../../../utils/mergeDefaultTailwindClassnames';
import { extractClassName } from '../utils';
import { extractObjectKey } from '../../../utils/values';
@@ -53,8 +56,13 @@ const FooterRowComponent: React.FC = ({
case 'Links': {
const links = item[itemType] as FooterLinks;
+ const mergedClassname = mergeTailwindClassnameWithDefault(
+ className,
+ 'flex space-x-1',
+ );
+
return (
-
+
{links?.links.map((link, i) => {
return (
diff --git a/packages/frontend/src/features/Navigation/Header.tsx b/packages/frontend/src/features/Navigation/Header.tsx
index e2c13fa2..567b62eb 100644
--- a/packages/frontend/src/features/Navigation/Header.tsx
+++ b/packages/frontend/src/features/Navigation/Header.tsx
@@ -20,6 +20,7 @@ const Header = ({
banners,
type = 'original',
}: HeaderProps) => {
+ console.log('top', top);
return type === 'horizontal' ? (
{banners?.map((banner) => )}
diff --git a/packages/frontend/src/features/Navigation/NavigationBar.tsx b/packages/frontend/src/features/Navigation/NavigationBar.tsx
index d2e25799..5048a470 100644
--- a/packages/frontend/src/features/Navigation/NavigationBar.tsx
+++ b/packages/frontend/src/features/Navigation/NavigationBar.tsx
@@ -71,6 +71,7 @@ const NavigationBar = ({
href={x.href}
name={x.name}
classNames={x.classNames}
+ noBasePath={x?.noBasePath}
/>
);
diff --git a/packages/frontend/src/features/Navigation/NavigationBarButton.tsx b/packages/frontend/src/features/Navigation/NavigationBarButton.tsx
index f20bc54a..d923b11a 100644
--- a/packages/frontend/src/features/Navigation/NavigationBarButton.tsx
+++ b/packages/frontend/src/features/Navigation/NavigationBarButton.tsx
@@ -15,6 +15,7 @@ import { TooltipStyle } from './style';
* @param name - the name of the button
* @param iconHeight - the height of the icon
* @param classNames - the class names to use for root, label, icon/tooltip and arrow'
+ * @param noBasePath - set to true to avoid prepending a basePath to the link
*/
const NavigationBarButton = ({
tooltip,
@@ -23,9 +24,10 @@ const NavigationBarButton = ({
name,
iconHeight = '27px',
classNames = {},
+ noBasePath = false,
}: NavigationButtonProps) => {
const classNamesDefaults = {
- root: `flex flex-col flex-nowrap px-3 py-2 pt-4 items-center align-center text-primary hover:text-accent opacity-80 hover:opacity-100`,
+ root: 'flex flex-col flex-nowrap px-3 py-2 pt-4 items-center align-center text-primary hover:text-accent opacity-80 hover:opacity-100',
label: 'pt-1.5 body-typo font-heading text-sm text-nowrap',
icon: 'mt-0.5 ml-1',
...TooltipStyle,
@@ -39,6 +41,7 @@ const NavigationBarButton = ({
-
-
+
+
+ ) : (
+
-
-
- {name}
-
-
-
+
+
+ )}
);
diff --git a/packages/frontend/src/features/Navigation/NavigationLogo.tsx b/packages/frontend/src/features/Navigation/NavigationLogo.tsx
index 20924698..b67b0e17 100644
--- a/packages/frontend/src/features/Navigation/NavigationLogo.tsx
+++ b/packages/frontend/src/features/Navigation/NavigationLogo.tsx
@@ -16,7 +16,7 @@ const NavigationLogo = ({
classNames = {},
}: NavigationBarLogo) => {
const classNamesDefaults = {
- root: 'relative flex py-2 justify-start items-center align-middle font-heading font-bold tracking-wide text-xl ml-[5px] mr-[20px]',
+ root: 'relative flex py-0 justify-start items-center align-middle font-heading font-bold tracking-wide text-xl ml-[5px] mr-[20px]',
link: 'relative object-contain',
logo: 'px-3',
title: 'border-solid border-base-darker ml-1 mr-3',
diff --git a/packages/frontend/src/features/Navigation/TopBar.tsx b/packages/frontend/src/features/Navigation/TopBar.tsx
index b1467724..317af0c7 100644
--- a/packages/frontend/src/features/Navigation/TopBar.tsx
+++ b/packages/frontend/src/features/Navigation/TopBar.tsx
@@ -107,12 +107,14 @@ const TopBar = ({
}: TopBarProps) => {
const classNamesDefaults = {
root: 'flex justify-end items-center align-middle w-100 bg-secondary-lighter',
+ login: 'font-content hover:border-accent',
};
const mergedClassnames = mergeDefaultTailwindClassnames(
classNamesDefaults,
classNames,
);
+
return (
@@ -126,10 +128,15 @@ const TopBar = ({
loginButtonVisibility === LoginButtonVisibility.Visible,
)}
{loginButtonVisibility != LoginButtonVisibility.Hidden ? (
-
+
) : null}
{loginButtonVisibility != LoginButtonVisibility.Hidden ? (
-
+
) : null}
diff --git a/packages/frontend/src/features/Navigation/types.ts b/packages/frontend/src/features/Navigation/types.ts
index b67b165b..6a8787a7 100644
--- a/packages/frontend/src/features/Navigation/types.ts
+++ b/packages/frontend/src/features/Navigation/types.ts
@@ -4,12 +4,13 @@ import { BannerProps } from './Banner';
import { StylingOverrideWithMergeControl } from '../../types';
export interface NavigationButtonProps {
- readonly icon: string;
- readonly tooltip: string;
- readonly href: string;
- readonly name: string;
- readonly iconHeight?: string;
- readonly classNames?: StylingOverrideWithMergeControl;
+ icon: string;
+ tooltip: string;
+ href: string;
+ noBasePath?: boolean;
+ name: string;
+ iconHeight?: string;
+ classNames?: StylingOverrideWithMergeControl;
}
export interface NavigationBarLogo {
diff --git a/packages/frontend/src/utils/mergeDefaultTailwindClassnames.ts b/packages/frontend/src/utils/mergeDefaultTailwindClassnames.ts
index 189c2690..c14033b4 100644
--- a/packages/frontend/src/utils/mergeDefaultTailwindClassnames.ts
+++ b/packages/frontend/src/utils/mergeDefaultTailwindClassnames.ts
@@ -36,3 +36,8 @@ export const mergeDefaultTailwindClassnames = (
return mergedValues;
};
+
+export const mergeTailwindClassnameWithDefault = (
+ userValues: string | undefined,
+ defaultValues: string,
+): string => (userValues ? twMerge(defaultValues, userValues) : defaultValues);
diff --git a/packages/sampleCommons/config/gen3/footer.json b/packages/sampleCommons/config/gen3/footer.json
index 4dd0f190..4e6a9a32 100644
--- a/packages/sampleCommons/config/gen3/footer.json
+++ b/packages/sampleCommons/config/gen3/footer.json
@@ -1,6 +1,6 @@
{
"classNames": {
- "root": "bg-base-darker",
+ "root": "bg-base-min",
"layout": "flex items-center justify-end"
},
"rightSection": {
diff --git a/packages/sampleCommons/config/gen3/navigation.json b/packages/sampleCommons/config/gen3/navigation.json
index 777ed058..99678c45 100644
--- a/packages/sampleCommons/config/gen3/navigation.json
+++ b/packages/sampleCommons/config/gen3/navigation.json
@@ -21,6 +21,7 @@
{
"icon": "gen3:dictionary",
"href": "/DataDictionary",
+ "noBasePath": true,
"name": "Dictionary",
"tooltip": "The Data Dictionary serves to inform the data model and is updated as new data is ingested."
},
diff --git a/packages/sampleCommons/config/gen3/themeColors.json b/packages/sampleCommons/config/gen3/themeColors.json
index 8d965295..895b107e 100644
--- a/packages/sampleCommons/config/gen3/themeColors.json
+++ b/packages/sampleCommons/config/gen3/themeColors.json
@@ -216,7 +216,7 @@
"min": "#fefefe"
},
"navigation": {
- "footer": "#373A3C",
+ "footer": "#000000",
"topbar_hover": "#FFFFFF",
"light": "#111111",
"DEFAULT": "#111111",
diff --git a/packages/sampleCommons/config/icons/color.json b/packages/sampleCommons/config/icons/color.json
index 52bbde6e..7549a001 100644
--- a/packages/sampleCommons/config/icons/color.json
+++ b/packages/sampleCommons/config/icons/color.json
@@ -1,6 +1,6 @@
{
"prefix": "color",
- "lastModified": 1732849568,
+ "lastModified": 1733715829,
"icons": {
"analysis": {
"body": "",
diff --git a/packages/sampleCommons/config/icons/dataDictionary.json b/packages/sampleCommons/config/icons/dataDictionary.json
index d15973aa..bc92c9e4 100644
--- a/packages/sampleCommons/config/icons/dataDictionary.json
+++ b/packages/sampleCommons/config/icons/dataDictionary.json
@@ -1,6 +1,6 @@
{
"prefix": "dataDictionary",
- "lastModified": 1732849568,
+ "lastModified": 1733715829,
"icons": {
"dictionary-icon-administrative": {
"body": ""
diff --git a/packages/sampleCommons/config/icons/gen3.json b/packages/sampleCommons/config/icons/gen3.json
index 161f98ed..86d25a8b 100644
--- a/packages/sampleCommons/config/icons/gen3.json
+++ b/packages/sampleCommons/config/icons/gen3.json
@@ -1,6 +1,6 @@
{
"prefix": "gen3",
- "lastModified": 1732849568,
+ "lastModified": 1733715829,
"icons": {
"aisearch": {
"body": "",
@@ -107,6 +107,11 @@
"width": 44,
"height": 51
},
+ "list": {
+ "body": "",
+ "width": 512.18,
+ "height": 512.18
+ },
"loginarrowcircle": {
"body": "",
"width": 30,
diff --git a/packages/sampleCommons/config/icons/gen3/list.svg b/packages/sampleCommons/config/icons/gen3/list.svg
new file mode 100644
index 00000000..0147005c
--- /dev/null
+++ b/packages/sampleCommons/config/icons/gen3/list.svg
@@ -0,0 +1,84 @@
+
+
+
diff --git a/packages/sampleCommons/config/icons/workspace.json b/packages/sampleCommons/config/icons/workspace.json
index c19f95ac..4353a28b 100644
--- a/packages/sampleCommons/config/icons/workspace.json
+++ b/packages/sampleCommons/config/icons/workspace.json
@@ -1,6 +1,6 @@
{
"prefix": "workspace",
- "lastModified": 1732849568,
+ "lastModified": 1733715829,
"icons": {
"galaxy": {
"body": "",
diff --git a/packages/sampleCommons/tailwind.config.js b/packages/sampleCommons/tailwind.config.js
index 30574118..03118a59 100644
--- a/packages/sampleCommons/tailwind.config.js
+++ b/packages/sampleCommons/tailwind.config.js
@@ -63,6 +63,8 @@ module.exports = {
content: themeFonts.content,
},
fontSize: {
+ xxxs: '0.4rem',
+ xxs: '0.5rem',
tiny: '0.625rem',
},
borderWidth: {
@@ -168,6 +170,6 @@ module.exports = {
});
}),
],
- // Add any colors used in a json config file here
- safelist: [],
+ // Add any colors. fontSize, height used in a json config file here
+ safelist: ['text-tiny', 'text-xxs', 'text-xxxs', 'h-20'],
};