From e919e96c53bc9bec7db3d09693d1ff0684b56e87 Mon Sep 17 00:00:00 2001
From: Razboy20
Date: Thu, 14 Mar 2024 00:10:41 -0500
Subject: [PATCH] feat: proper injected styles (#164)
---
src/pages/popup/index.tsx | 2 +
src/views/components/CourseCatalogMain.tsx | 9 +-
.../CalendarCourseCell/CalendarCourseCell.tsx | 2 +-
.../CalendarGrid/CalendarGrid.module.scss | 1 -
.../CalendarHeader/CalenderHeader.tsx | 6 +-
src/views/components/common/Dialog/Dialog.tsx | 70 ++--
.../ExtensionRoot/ExtensionRoot.module.scss | 10 +
.../common/ExtensionRoot/ExtensionRoot.tsx | 2 +-
.../common/ExtensionRoot/_tailwind-compat.css | 388 ++++++++++++++++++
.../ScheduleDropdown/ScheduleDropdown.tsx | 2 +-
.../components/common/Text/Text.module.scss | 103 +++--
.../Description.tsx | 2 +-
.../GradeDistribution.tsx | 2 +-
.../components/injected/TableRow/TableRow.tsx | 31 +-
src/views/styles/fonts.module.scss | 4 +-
15 files changed, 517 insertions(+), 117 deletions(-)
create mode 100644 src/views/components/common/ExtensionRoot/_tailwind-compat.css
diff --git a/src/pages/popup/index.tsx b/src/pages/popup/index.tsx
index 2ce351ac1..40c6aae67 100644
--- a/src/pages/popup/index.tsx
+++ b/src/pages/popup/index.tsx
@@ -1,3 +1,5 @@
+import 'uno.css';
+
import PopupMain from '@views/components/PopupMain';
import React from 'react';
import { createRoot } from 'react-dom/client';
diff --git a/src/views/components/CourseCatalogMain.tsx b/src/views/components/CourseCatalogMain.tsx
index ff40c5682..0de205d41 100644
--- a/src/views/components/CourseCatalogMain.tsx
+++ b/src/views/components/CourseCatalogMain.tsx
@@ -6,7 +6,6 @@ import RecruitmentBanner from '@views/components/injected/RecruitmentBanner/Recr
import TableHead from '@views/components/injected/TableHead';
import TableRow from '@views/components/injected/TableRow/TableRow';
// import TableSubheading from '@views/components/injected/TableSubheading/TableSubheading';
-import { useKeyPress } from '@views/hooks/useKeyPress';
import useSchedules from '@views/hooks/useSchedules';
import { CourseCatalogScraper } from '@views/lib/CourseCatalogScraper';
import getCourseTableRows from '@views/lib/getCourseTableRows';
@@ -54,11 +53,7 @@ export default function CourseCatalogMain({ support }: Props): JSX.Element {
setSelectedCourse(course);
};
- const handleClearSelectedCourse = () => {
- setSelectedCourse(null);
- };
-
- useKeyPress('Escape', handleClearSelectedCourse);
+ // useKeyPress('Escape', handleClearSelectedCourse);
const [activeSchedule] = useSchedules();
@@ -87,7 +82,7 @@ export default function CourseCatalogMain({ support }: Props): JSX.Element {
activeSchedule={activeSchedule}
show={showPopup}
onClose={() => setShowPopup(false)}
- afterLeave={handleClearSelectedCourse}
+ afterLeave={() => setSelectedCourse(null)}
/>
diff --git a/src/views/components/calendar/CalendarCourseCell/CalendarCourseCell.tsx b/src/views/components/calendar/CalendarCourseCell/CalendarCourseCell.tsx
index 3509b4d6b..fa70ec5b7 100644
--- a/src/views/components/calendar/CalendarCourseCell/CalendarCourseCell.tsx
+++ b/src/views/components/calendar/CalendarCourseCell/CalendarCourseCell.tsx
@@ -69,7 +69,7 @@ export default function CalendarCourseCell({
>
- UT Registration
- Plus
+ UT Registration
+ Plus
@@ -52,7 +52,7 @@ export default function CalendarHeader(): JSX.Element {
totalHours={activeSchedule.hours}
totalCourses={activeSchedule.courses.length}
/>
-
+
LAST UPDATED: {getUpdatedAtDateTimeString(activeSchedule.updatedAt)}
diff --git a/src/views/components/common/Dialog/Dialog.tsx b/src/views/components/common/Dialog/Dialog.tsx
index a3ed57bc2..2f0991c5c 100644
--- a/src/views/components/common/Dialog/Dialog.tsx
+++ b/src/views/components/common/Dialog/Dialog.tsx
@@ -4,6 +4,8 @@ import clsx from 'clsx';
import type { PropsWithChildren } from 'react';
import React, { Fragment } from 'react';
+import ExtensionRoot from '../ExtensionRoot/ExtensionRoot';
+
export interface _DialogProps {
className?: string;
title?: JSX.Element;
@@ -20,39 +22,41 @@ export default function Dialog(props: PropsWithChildren): JSX.Eleme
return (
-
-
-
-
-
-
- {props.title && {props.title}}
- {props.description && {props.description}}
- {children}
-
-
-
+
+
+
+
+
+
+
+ {props.title && {props.title}}
+ {props.description && {props.description}}
+ {children}
+
+
+
+
);
}
diff --git a/src/views/components/common/ExtensionRoot/ExtensionRoot.module.scss b/src/views/components/common/ExtensionRoot/ExtensionRoot.module.scss
index 43ce2c9ca..118063725 100644
--- a/src/views/components/common/ExtensionRoot/ExtensionRoot.module.scss
+++ b/src/views/components/common/ExtensionRoot/ExtensionRoot.module.scss
@@ -1,5 +1,15 @@
@import 'src/views/styles/base.module.scss';
+@layer base {
+ .extensionRoot {
+ @import 'tailwind-compat';
+ }
+
+ span {
+ font-family: inherit;
+ }
+}
+
.extensionRoot {
@apply font-sans h-full;
color: #303030;
diff --git a/src/views/components/common/ExtensionRoot/ExtensionRoot.tsx b/src/views/components/common/ExtensionRoot/ExtensionRoot.tsx
index 6f9105700..fe93f5597 100644
--- a/src/views/components/common/ExtensionRoot/ExtensionRoot.tsx
+++ b/src/views/components/common/ExtensionRoot/ExtensionRoot.tsx
@@ -1,4 +1,4 @@
-import '@unocss/reset/tailwind-compat.css';
+// import '@unocss/reset/tailwind-compat.css';
import 'uno.css';
import React from 'react';
diff --git a/src/views/components/common/ExtensionRoot/_tailwind-compat.css b/src/views/components/common/ExtensionRoot/_tailwind-compat.css
new file mode 100644
index 000000000..a77b80497
--- /dev/null
+++ b/src/views/components/common/ExtensionRoot/_tailwind-compat.css
@@ -0,0 +1,388 @@
+/*
+Please read: https://github.com/unocss/unocss/blob/main/packages/reset/tailwind-compat.md
+*/
+
+/*
+1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)
+2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)
+2. [UnoCSS]: allow to override the default border color with css var `--un-default-border-color`
+*/
+
+*,
+::before,
+::after {
+ box-sizing: border-box; /* 1 */
+ border-width: 0; /* 2 */
+ border-style: solid; /* 2 */
+ border-color: var(--un-default-border-color, #e5e7eb); /* 2 */
+}
+
+/*
+1. Use a consistent sensible line-height in all browsers.
+2. Prevent adjustments of font size after orientation changes in iOS.
+3. Use a more readable tab size.
+4. Use the user's configured `sans` font-family by default.
+5. Use the user's configured `sans` font-feature-settings by default.
+6. Use the user's configured `sans` font-variation-settings by default.
+7. Disable tap highlights on iOS.
+*/
+
+html,
+:host {
+ line-height: 1.5; /* 1 */
+ -webkit-text-size-adjust: 100%; /* 2 */
+ -moz-tab-size: 4; /* 3 */
+ tab-size: 4; /* 3 */
+ font-family: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; /* 4 */
+ font-feature-settings: normal; /* 5 */
+ font-variation-settings: normal; /* 6 */
+ -webkit-tap-highlight-color: transparent; /* 7 */
+}
+
+/*
+1. Remove the margin in all browsers.
+2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.
+*/
+
+body {
+ margin: 0; /* 1 */
+ line-height: inherit; /* 2 */
+}
+
+/*
+1. Add the correct height in Firefox.
+2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)
+3. Ensure horizontal rules are visible by default.
+*/
+
+hr {
+ height: 0; /* 1 */
+ color: inherit; /* 2 */
+ border-top-width: 1px; /* 3 */
+}
+
+/*
+Add the correct text decoration in Chrome, Edge, and Safari.
+*/
+
+abbr:where([title]) {
+ text-decoration: underline dotted;
+}
+
+/*
+Remove the default font size and weight for headings.
+*/
+
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+ font-size: inherit;
+ font-weight: inherit;
+}
+
+/*
+Reset links to optimize for opt-in styling instead of opt-out.
+*/
+
+a {
+ color: inherit;
+ text-decoration: inherit;
+}
+
+/*
+Add the correct font weight in Edge and Safari.
+*/
+
+b,
+strong {
+ font-weight: bolder;
+}
+
+/*
+1. Use the user's configured `mono` font-family by default.
+2. Use the user's configured `mono` font-feature-settings by default.
+3. Use the user's configured `mono` font-variation-settings by default.
+4. Correct the odd `em` font sizing in all browsers.
+*/
+
+code,
+kbd,
+samp,
+pre {
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; /* 1 */
+ font-feature-settings: normal; /* 2 */
+ font-variation-settings: normal; /* 3 */
+ font-size: 1em; /* 4 */
+}
+
+/*
+Add the correct font size in all browsers.
+*/
+
+small {
+ font-size: 80%;
+}
+
+/*
+Prevent `sub` and `sup` elements from affecting the line height in all browsers.
+*/
+
+sub,
+sup {
+ font-size: 75%;
+ line-height: 0;
+ position: relative;
+ vertical-align: baseline;
+}
+
+sub {
+ bottom: -0.25em;
+}
+
+sup {
+ top: -0.5em;
+}
+
+/*
+1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)
+2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)
+3. Remove gaps between table borders by default.
+*/
+
+table {
+ text-indent: 0; /* 1 */
+ border-color: inherit; /* 2 */
+ border-collapse: collapse; /* 3 */
+}
+
+/*
+1. Change the font styles in all browsers.
+2. Remove the margin in Firefox and Safari.
+3. Remove default padding in all browsers.
+*/
+
+button,
+input,
+optgroup,
+select,
+textarea {
+ font-family: inherit; /* 1 */
+ font-feature-settings: inherit; /* 1 */
+ font-variation-settings: inherit; /* 1 */
+ font-size: 100%; /* 1 */
+ font-weight: inherit; /* 1 */
+ line-height: inherit; /* 1 */
+ color: inherit; /* 1 */
+ margin: 0; /* 2 */
+ padding: 0; /* 3 */
+}
+
+/*
+Remove the inheritance of text transform in Edge and Firefox.
+*/
+
+button,
+select {
+ text-transform: none;
+}
+
+/*
+1. Correct the inability to style clickable types in iOS and Safari.
+2. Remove default button styles.
+*/
+
+button,
+[type='button'],
+[type='reset'],
+[type='submit'] {
+ -webkit-appearance: button; /* 1 */
+ /* Will affect the button style of most component libraries, so disable it */
+ /* https://github.com/unocss/unocss/issues/2127 */
+ /* background-color: transparent; !* 2 *! */
+ background-image: none; /* 2 */
+}
+
+/*
+Use the modern Firefox focus style for all focusable elements.
+*/
+
+:-moz-focusring {
+ outline: auto;
+}
+
+/*
+Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)
+*/
+
+:-moz-ui-invalid {
+ box-shadow: none;
+}
+
+/*
+Add the correct vertical alignment in Chrome and Firefox.
+*/
+
+progress {
+ vertical-align: baseline;
+}
+
+/*
+Correct the cursor style of increment and decrement buttons in Safari.
+*/
+
+::-webkit-inner-spin-button,
+::-webkit-outer-spin-button {
+ height: auto;
+}
+
+/*
+1. Correct the odd appearance in Chrome and Safari.
+2. Correct the outline style in Safari.
+*/
+
+[type='search'] {
+ -webkit-appearance: textfield; /* 1 */
+ outline-offset: -2px; /* 2 */
+}
+
+/*
+Remove the inner padding in Chrome and Safari on macOS.
+*/
+
+::-webkit-search-decoration {
+ -webkit-appearance: none;
+}
+
+/*
+1. Correct the inability to style clickable types in iOS and Safari.
+2. Change font properties to `inherit` in Safari.
+*/
+
+::-webkit-file-upload-button {
+ -webkit-appearance: button; /* 1 */
+ font: inherit; /* 2 */
+}
+
+/*
+Add the correct display in Chrome and Safari.
+*/
+
+summary {
+ display: list-item;
+}
+
+/*
+Removes the default spacing for appropriate elements.
+*/
+
+blockquote,
+dl,
+dd,
+h1,
+h2,
+h3,
+h4,
+h5,
+h6,
+hr,
+figure,
+p,
+pre {
+ margin: 0;
+}
+
+fieldset {
+ margin: 0;
+ padding: 0;
+}
+
+legend {
+ padding: 0;
+}
+
+ol,
+ul,
+menu {
+ list-style: none;
+ margin: 0;
+ padding: 0;
+}
+
+dialog {
+ padding: 0;
+}
+
+/*
+Prevent resizing textareas horizontally by default.
+*/
+
+textarea {
+ resize: vertical;
+}
+
+/*
+1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)
+2. Set the default placeholder color to the user's configured gray 400 color.
+*/
+
+input::placeholder,
+textarea::placeholder {
+ opacity: 1; /* 1 */
+ color: #9ca3af; /* 2 */
+}
+
+/*
+Set the default cursor for buttons.
+*/
+
+button,
+[role="button"] {
+ cursor: pointer;
+}
+
+/*
+Make sure disabled buttons don't get the pointer cursor.
+*/
+
+:disabled {
+ cursor: default;
+}
+
+/*
+1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)
+2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)
+ This can trigger a poorly considered lint error in some tools but is included by design.
+*/
+
+img,
+svg,
+video,
+canvas,
+audio,
+iframe,
+embed,
+object {
+ display: block; /* 1 */
+ vertical-align: middle; /* 2 */
+}
+
+/*
+Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)
+*/
+
+img,
+video {
+ max-width: 100%;
+ height: auto;
+}
+
+/*
+Make elements with the HTML hidden attribute stay hidden by default.
+*/
+
+[hidden] {
+ display: none;
+}
diff --git a/src/views/components/common/ScheduleDropdown/ScheduleDropdown.tsx b/src/views/components/common/ScheduleDropdown/ScheduleDropdown.tsx
index f3384021f..d1f496b15 100644
--- a/src/views/components/common/ScheduleDropdown/ScheduleDropdown.tsx
+++ b/src/views/components/common/ScheduleDropdown/ScheduleDropdown.tsx
@@ -39,7 +39,7 @@ export default function ScheduleDropdown(props: Props) {
-
+
{open ? : }
diff --git a/src/views/components/common/Text/Text.module.scss b/src/views/components/common/Text/Text.module.scss
index 16f52b29c..7b0aab646 100644
--- a/src/views/components/common/Text/Text.module.scss
+++ b/src/views/components/common/Text/Text.module.scss
@@ -1,67 +1,64 @@
@use 'src/views/styles/colors.module.scss';
@use 'src/views/styles/fonts.module.scss';
-@layer theme {
- .text {
- font-family: 'Roboto Flex', sans-serif;
- line-height: normal;
- font-style: normal;
- }
+.text {
+ line-height: normal;
+ font-style: normal;
+}
- .mini {
- font-size: 0.79rem;
- font-weight: 500;
- }
+.mini {
+ font-size: 0.79rem;
+ font-weight: 500;
+}
- .small {
- font-size: 0.88875rem;
- font-weight: 500;
- }
+.small {
+ font-size: 0.88875rem;
+ font-weight: 500;
+}
- .p {
- font-size: 1rem;
- font-weight: 400;
- letter-spacing: 0.025rem;
- }
+.p {
+ font-size: 1rem;
+ font-weight: 400;
+ letter-spacing: 0.025rem;
+}
- .h4 {
- font-size: 1.125rem;
- font-weight: 500;
- }
+.h4 {
+ font-size: 1.125rem;
+ font-weight: 500;
+}
- .h3-course {
- font-size: 0.6875rem;
- font-weight: 400;
- line-height: 100%; /* 0.6875rem */
- }
+.h3-course {
+ font-size: 0.6875rem;
+ font-weight: 400;
+ line-height: 100%; /* 0.6875rem */
+}
- .h3 {
- font-size: 1.26563rem;
- font-weight: 600;
- text-transform: uppercase;
- }
+.h3 {
+ font-size: 1.26563rem;
+ font-weight: 600;
+ text-transform: uppercase;
+}
- .h2-course {
- font-size: 1rem;
- font-weight: 500;
- letter-spacing: 0.03125rem;
- text-transform: capitalize;
- }
+.h2-course {
+ font-size: 1rem;
+ font-weight: 500;
+ letter-spacing: 0.03125rem;
+ text-transform: capitalize;
+}
- .h2 {
- font-size: 1.42375rem;
- font-weight: 500;
- }
+.h2 {
+ font-size: 1.42375rem;
+ font-weight: 500;
+}
- .h1-course {
- font-size: 1rem;
- font-weight: 600;
- text-transform: capitalize;
- }
+.h1-course {
+ font-size: 1rem;
+ font-weight: 600;
+ text-transform: capitalize;
+}
- .h1 {
- font-size: 1.60188rem;
- font-weight: 700;
- text-transform: uppercase;
- }
+.h1 {
+ font-size: 1.60188rem;
+ font-weight: 700;
+ text-transform: uppercase;
}
diff --git a/src/views/components/injected/CourseCatalogInjectedPopup/Description.tsx b/src/views/components/injected/CourseCatalogInjectedPopup/Description.tsx
index 314a310bf..2443c6164 100644
--- a/src/views/components/injected/CourseCatalogInjectedPopup/Description.tsx
+++ b/src/views/components/injected/CourseCatalogInjectedPopup/Description.tsx
@@ -70,7 +70,7 @@ export default function Description({ course }: DescriptionProps): JSX.Element {
{line}
diff --git a/src/views/components/injected/CourseCatalogInjectedPopup/GradeDistribution.tsx b/src/views/components/injected/CourseCatalogInjectedPopup/GradeDistribution.tsx
index 7f2060dc0..7a27bb131 100644
--- a/src/views/components/injected/CourseCatalogInjectedPopup/GradeDistribution.tsx
+++ b/src/views/components/injected/CourseCatalogInjectedPopup/GradeDistribution.tsx
@@ -106,7 +106,7 @@ export default function GradeDistribution({ course }: GradeDistributionProps): J
title: { text: 'Number of Students' },
},
chart: {
- style: { fontFamily: 'Roboto Flex', fontWeight: '600' },
+ style: { fontFamily: 'Roboto Flex, Roboto Flex Local', fontWeight: '600' },
spacingBottom: 25,
spacingTop: 25,
height: 250,
diff --git a/src/views/components/injected/TableRow/TableRow.tsx b/src/views/components/injected/TableRow/TableRow.tsx
index 934ba99a3..e0540df91 100644
--- a/src/views/components/injected/TableRow/TableRow.tsx
+++ b/src/views/components/injected/TableRow/TableRow.tsx
@@ -1,6 +1,7 @@
import type { Course, ScrapedRow } from '@shared/types/Course';
import type { UserSchedule } from '@shared/types/UserSchedule';
import ConflictsWithWarning from '@views/components/common/ConflictsWithWarning/ConflictsWithWarning';
+import ExtensionRoot from '@views/components/common/ExtensionRoot/ExtensionRoot';
import React, { useEffect, useState } from 'react';
import ReactDOM from 'react-dom';
@@ -85,20 +86,22 @@ export default function TableRow({ row, isSelected, activeSchedule, onClick }: P
}
return ReactDOM.createPortal(
-
-
- {conflicts.length > 0 && (
-
- )}
-
,
+
+
+
+ {conflicts.length > 0 && (
+
+ )}
+
+ ,
container
);
}
diff --git a/src/views/styles/fonts.module.scss b/src/views/styles/fonts.module.scss
index f27586da1..0c0f140f1 100644
--- a/src/views/styles/fonts.module.scss
+++ b/src/views/styles/fonts.module.scss
@@ -9,12 +9,14 @@
}
@font-face {
- font-family: 'Roboto Flex';
+ font-family: 'Roboto Flex Local';
src: url('@public/fonts/roboto-flex.woff2') format('woff2');
font-display: swap;
font-style: normal;
}
+@import url('https://fonts.googleapis.com/css2?family=Roboto+Flex:wght@100..1000&display=swap');
+
$medium_size: 16px;
:export {