diff --git a/src/stories/components/calendar/CalendarHeader.stories.tsx b/src/stories/components/calendar/CalendarHeader.stories.tsx
index b2d2cf26..dba73695 100644
--- a/src/stories/components/calendar/CalendarHeader.stories.tsx
+++ b/src/stories/components/calendar/CalendarHeader.stories.tsx
@@ -1,5 +1,5 @@
import type { Meta, StoryObj } from '@storybook/react';
-import CalendarHeader from '@views/components/calendar/CalendarHeader';
+import CalendarHeader from '@views/components/calendar/CalendarHeader/CalendarHeader';
const meta = {
title: 'Components/Calendar/CalendarHeader',
diff --git a/src/views/components/calendar/Calendar.tsx b/src/views/components/calendar/Calendar.tsx
index edd8b009..9f20ead0 100644
--- a/src/views/components/calendar/Calendar.tsx
+++ b/src/views/components/calendar/Calendar.tsx
@@ -5,7 +5,7 @@ import { CRX_PAGES } from '@shared/types/CRXPages';
import { openReportWindow } from '@shared/util/openReportWindow';
import CalendarBottomBar from '@views/components/calendar/CalendarBottomBar';
import CalendarGrid from '@views/components/calendar/CalendarGrid';
-import CalendarHeader from '@views/components/calendar/CalendarHeader';
+import CalendarHeader from '@views/components/calendar/CalendarHeader/CalendarHeader';
import { CalendarSchedules } from '@views/components/calendar/CalendarSchedules';
import ResourceLinks from '@views/components/calendar/ResourceLinks';
import Divider from '@views/components/common/Divider';
@@ -23,6 +23,7 @@ import { Button } from '../common/Button';
import { LargeLogo } from '../common/LogoIcon';
import Text from '../common/Text/Text';
import CalendarFooter from './CalendarFooter';
+
/**
* Calendar page component
*/
@@ -64,7 +65,7 @@ export default function Calendar(): JSX.Element {
@@ -116,14 +117,21 @@ export default function Calendar(): JSX.Element {
-
+
{
setShowSidebar(!showSidebar);
}}
/>
-
+
diff --git a/src/views/components/calendar/CalendarBottomBar.tsx b/src/views/components/calendar/CalendarBottomBar.tsx
index ec3099a1..d7c1449a 100644
--- a/src/views/components/calendar/CalendarBottomBar.tsx
+++ b/src/views/components/calendar/CalendarBottomBar.tsx
@@ -1,8 +1,4 @@
-import { CalendarDots, ImageSquare } from '@phosphor-icons/react';
import type { Course } from '@shared/types/Course';
-import { saveAsCal, saveCalAsPng } from '@views/components/calendar/utils';
-import { Button } from '@views/components/common/Button';
-import Divider from '@views/components/common/Divider';
import Text from '@views/components/common/Text/Text';
import { ColorPickerProvider } from '@views/contexts/ColorPickerContext';
import type { CalendarGridCourse } from '@views/hooks/useFlattenedCourseSchedule';
@@ -61,21 +57,6 @@ export default function CalendarBottomBar({ courseCells, setCourse }: CalendarBo
>
)}
-
- {displayCourses &&
}
-
-
-
-
);
}
diff --git a/src/views/components/calendar/CalendarHeader.tsx b/src/views/components/calendar/CalendarHeader.tsx
deleted file mode 100644
index de184449..00000000
--- a/src/views/components/calendar/CalendarHeader.tsx
+++ /dev/null
@@ -1,83 +0,0 @@
-import { Sidebar } from '@phosphor-icons/react';
-import { initSettings, OptionsStore } from '@shared/storage/OptionsStore';
-import { Button } from '@views/components/common/Button';
-import CourseStatus from '@views/components/common/CourseStatus';
-import Divider from '@views/components/common/Divider';
-import ScheduleTotalHoursAndCourses from '@views/components/common/ScheduleTotalHoursAndCourses';
-import useSchedules from '@views/hooks/useSchedules';
-import React, { useEffect, useState } from 'react';
-
-interface CalendarHeaderProps {
- sidebarOpen?: boolean;
- onSidebarToggle?: () => void;
-}
-
-/**
- * Renders the header component for the calendar.
- * @returns The JSX element representing the calendar header.
- */
-export default function CalendarHeader({ sidebarOpen, onSidebarToggle }: CalendarHeaderProps): JSX.Element {
- const [enableCourseStatusChips, setEnableCourseStatusChips] = useState
(false);
- const [_enableDataRefreshing, setEnableDataRefreshing] = useState(false);
-
- const [activeSchedule] = useSchedules();
-
- useEffect(() => {
- initSettings().then(({ enableCourseStatusChips, enableDataRefreshing }) => {
- setEnableCourseStatusChips(enableCourseStatusChips);
- setEnableDataRefreshing(enableDataRefreshing);
- });
-
- const l1 = OptionsStore.listen('enableCourseStatusChips', async ({ newValue }) => {
- setEnableCourseStatusChips(newValue);
- // console.log('enableCourseStatusChips', newValue);
- });
-
- const l2 = OptionsStore.listen('enableDataRefreshing', async ({ newValue }) => {
- setEnableDataRefreshing(newValue);
- // console.log('enableDataRefreshing', newValue);
- });
-
- return () => {
- OptionsStore.removeListener(l1);
- OptionsStore.removeListener(l2);
- };
- }, []);
-
- return (
-
- {!sidebarOpen && (
-
- )}
-
-
-
-
-
-
-
-
- {enableCourseStatusChips && (
- <>
-
-
-
- >
- )}
-
- {/*
- */}
-
-
- );
-}
diff --git a/src/views/components/calendar/CalendarHeader/CalendarHeader.module.scss b/src/views/components/calendar/CalendarHeader/CalendarHeader.module.scss
new file mode 100644
index 00000000..9bbaef38
--- /dev/null
+++ b/src/views/components/calendar/CalendarHeader/CalendarHeader.module.scss
@@ -0,0 +1,28 @@
+.cqInline {
+ container-type: inline-size;
+
+ @mixin visually-hidden {
+ border: 0;
+ clip: rect(0 0 0 0);
+ height: auto;
+ margin: 0;
+ overflow: hidden;
+ padding: 0;
+ position: absolute;
+ width: 1px;
+ white-space: nowrap;
+ }
+
+ // value with all buttons is 610px
+ @container (width < 90px) {
+ .primaryActions span {
+ @include visually-hidden;
+ }
+ }
+
+ // @container (width < 445px) {
+ // .secondaryActions span {
+ // @include visually-hidden;
+ // }
+ // }
+}
diff --git a/src/views/components/calendar/CalendarHeader/CalendarHeader.tsx b/src/views/components/calendar/CalendarHeader/CalendarHeader.tsx
new file mode 100644
index 00000000..828f48d5
--- /dev/null
+++ b/src/views/components/calendar/CalendarHeader/CalendarHeader.tsx
@@ -0,0 +1,124 @@
+import { Menu, MenuButton, MenuItem, MenuItems } from '@headlessui/react';
+import { CalendarDots, Export, FilePng, Sidebar } from '@phosphor-icons/react';
+import styles from '@views/components/calendar/CalendarHeader/CalendarHeader.module.scss';
+import { Button } from '@views/components/common/Button';
+import DialogProvider from '@views/components/common/DialogProvider/DialogProvider';
+import Divider from '@views/components/common/Divider';
+import { ExtensionRootWrapper, styleResetClass } from '@views/components/common/ExtensionRoot/ExtensionRoot';
+import ScheduleTotalHoursAndCourses from '@views/components/common/ScheduleTotalHoursAndCourses';
+import useSchedules from '@views/hooks/useSchedules';
+import clsx from 'clsx';
+import React from 'react';
+
+import { saveAsCal, saveCalAsPng } from '../utils';
+
+interface CalendarHeaderProps {
+ sidebarOpen?: boolean;
+ onSidebarToggle?: () => void;
+}
+
+/**
+ * Renders the header component for the calendar.
+ * @returns The JSX element representing the calendar header.
+ */
+export default function CalendarHeader({ sidebarOpen, onSidebarToggle }: CalendarHeaderProps): JSX.Element {
+ const [activeSchedule] = useSchedules();
+
+ return (
+
+ {!sidebarOpen && (
+
+ )}
+
+
+
+
+
+ {/* min-w-[310px] is the value with all the buttons */}
+
+
+
+
+
+ {/*
+ */}
+
+ {/*
+
+
+
+
*/}
+
+
+ );
+}
diff --git a/src/views/components/common/Button.tsx b/src/views/components/common/Button.tsx
index 722dbb49..832a562d 100644
--- a/src/views/components/common/Button.tsx
+++ b/src/views/components/common/Button.tsx
@@ -7,6 +7,7 @@ import React from 'react';
interface Props {
className?: string;
+ ref?: React.ForwardedRef;
style?: React.CSSProperties;
variant?: 'filled' | 'outline' | 'minimal';
size?: 'regular' | 'small' | 'mini';
@@ -24,6 +25,7 @@ interface Props {
*/
export function Button({
className,
+ ref,
style,
variant = 'filled',
size = 'regular',
@@ -42,6 +44,7 @@ export function Button({
return (