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 {