From 23ebef90158a128707940159df91e5a58ac5437c Mon Sep 17 00:00:00 2001 From: Armano Date: Wed, 22 Mar 2023 10:42:22 +0100 Subject: [PATCH] chore(website): update options selector in playground --- .../src/components/OptionsSelector.module.css | 75 ---------------- .../src/components/OptionsSelector.tsx | 87 +++++++------------ .../components/config/ConfigEditor.module.css | 4 - .../src/components/config/ConfigEditor.tsx | 3 +- .../src/components/inputs/Dropdown.module.css | 20 +++++ .../src/components/inputs/Dropdown.tsx | 4 +- .../src/components/inputs/Text.module.css | 5 +- .../website/src/components/inputs/Text.tsx | 1 + .../src/components/layout/ActionLabel.tsx | 20 +++++ .../components/layout/InputLabel.module.css | 25 ++++++ .../src/components/layout/InputLabel.tsx | 19 ++++ packages/website/src/hooks/useClipboard.ts | 17 ++++ .../hooks/useDebouncedToggle.ts | 2 +- packages/website/src/icons/copy.svg | 2 +- 14 files changed, 139 insertions(+), 145 deletions(-) delete mode 100644 packages/website/src/components/OptionsSelector.module.css create mode 100644 packages/website/src/components/inputs/Dropdown.module.css create mode 100644 packages/website/src/components/layout/ActionLabel.tsx create mode 100644 packages/website/src/components/layout/InputLabel.module.css create mode 100644 packages/website/src/components/layout/InputLabel.tsx create mode 100644 packages/website/src/hooks/useClipboard.ts rename packages/website/src/{components => }/hooks/useDebouncedToggle.ts (92%) diff --git a/packages/website/src/components/OptionsSelector.module.css b/packages/website/src/components/OptionsSelector.module.css deleted file mode 100644 index a990748be47f..000000000000 --- a/packages/website/src/components/OptionsSelector.module.css +++ /dev/null @@ -1,75 +0,0 @@ -.optionLabel { - cursor: pointer; -} - -.optionItem, -.optionLabel { - align-items: center; - display: flex; - flex: 0 0 1.5rem; - flex-direction: row; - font-size: 0.75rem; - margin: 0 0; - padding: 0.4rem 0.8rem; - transition: background-color var(--ifm-transition-fast) - var(--ifm-transition-timing-default), - color var(--ifm-transition-fast) var(--ifm-transition-timing-default); - color: var(--ifm-font-color-secondary); - justify-content: space-between; - border: none; - background: transparent; - font-family: var(--ifm-font-family-base); - box-sizing: border-box; - line-height: var(--ifm-line-height-base); -} - -.optionLabel:hover { - background-color: var(--ifm-color-emphasis-100); - color: var(--ifm-font-color-primary); -} - -.optionInput { - display: block; - width: 90%; - padding: 0.4rem 0.6rem; - line-height: 1; - font-size: 0.8rem; - font-weight: 500; - font-family: inherit; - border-radius: 6px; - appearance: none; - color: var(--ifm-font-color-secondary); - border: 1px solid var(--ifm-color-emphasis-100); - background: var(--ifm-color-emphasis-200); - transition: border 0.3s ease; -} - -.optionInput::placeholder { - color: var(--ifm-color-emphasis-700); -} - -.optionInput:focus { - outline: none; - border-color: var(--ifm-color-primary); -} - -.optionSelect { - line-height: 1; - font-size: 0.8rem; - font-weight: 500; - border-radius: 6px; - font-family: inherit; - width: 50%; - box-shadow: none; - background-image: none; - padding: 0.4rem 0.6rem; - appearance: none; - color: var(--ifm-font-color-secondary); - border: 1px solid var(--ifm-color-emphasis-100); - background: var(--ifm-color-emphasis-200); - transition: border 0.3s ease; -} -.optionSelect:focus { - outline: none; - border-color: var(--ifm-color-primary); -} diff --git a/packages/website/src/components/OptionsSelector.tsx b/packages/website/src/components/OptionsSelector.tsx index fe573ef86ab1..770ebbbfdb99 100644 --- a/packages/website/src/components/OptionsSelector.tsx +++ b/packages/website/src/components/OptionsSelector.tsx @@ -1,18 +1,19 @@ -/* eslint-disable jsx-a11y/label-has-associated-control */ import { NavbarSecondaryMenuFiller, useWindowSize, } from '@docusaurus/theme-common'; import CopyIcon from '@site/src/icons/copy.svg'; +import IconExternalLink from '@theme/Icon/ExternalLink'; import React, { useCallback } from 'react'; -import useDebouncedToggle from './hooks/useDebouncedToggle'; +import { useClipboard } from '../hooks/useClipboard'; import Checkbox from './inputs/Checkbox'; import Dropdown from './inputs/Dropdown'; import Tooltip from './inputs/Tooltip'; +import ActionLabel from './layout/ActionLabel'; import Expander from './layout/Expander'; +import InputLabel from './layout/InputLabel'; import { createMarkdown, createMarkdownParams } from './lib/markdown'; -import styles from './OptionsSelector.module.css'; import type { ConfigModel } from './types'; export interface OptionsSelectorParams { @@ -35,8 +36,12 @@ function OptionsSelectorContent({ tsVersions, isLoading, }: OptionsSelectorParams): JSX.Element { - const [copyLink, setCopyLink] = useDebouncedToggle(false); - const [copyMarkdown, setCopyMarkdown] = useDebouncedToggle(false); + const [copyLink, copyLinkToClipboard] = useClipboard(() => + document.location.toString(), + ); + const [copyMarkdown, copyMarkdownToClipboard] = useClipboard(() => + createMarkdown(state), + ); const updateTS = useCallback( (version: string) => { @@ -45,23 +50,6 @@ function OptionsSelectorContent({ [setState], ); - const copyLinkToClipboard = useCallback(() => { - void navigator.clipboard - .writeText(document.location.toString()) - .then(() => { - setCopyLink(true); - }); - }, [setCopyLink]); - - const copyMarkdownToClipboard = useCallback(() => { - if (isLoading) { - return; - } - void navigator.clipboard.writeText(createMarkdown(state)).then(() => { - setCopyMarkdown(true); - }); - }, [isLoading, state, setCopyMarkdown]); - const openIssue = useCallback(() => { if (isLoading) { return; @@ -79,8 +67,7 @@ function OptionsSelectorContent({ return ( <> - - - + + {process.env.ESLINT_VERSION} + {process.env.TS_ESLINT_VERSION} - - - + - - - + + + + ); diff --git a/packages/website/src/components/config/ConfigEditor.module.css b/packages/website/src/components/config/ConfigEditor.module.css index 93d34e5c3086..c25633dcaab7 100644 --- a/packages/website/src/components/config/ConfigEditor.module.css +++ b/packages/website/src/components/config/ConfigEditor.module.css @@ -1,7 +1,3 @@ -.search { - border-radius: 0.2rem; -} - .searchResult, .searchResultGroup { align-items: center; diff --git a/packages/website/src/components/config/ConfigEditor.tsx b/packages/website/src/components/config/ConfigEditor.tsx index 361ac95b667a..8c371a58a74a 100644 --- a/packages/website/src/components/config/ConfigEditor.tsx +++ b/packages/website/src/components/config/ConfigEditor.tsx @@ -113,10 +113,9 @@ function ConfigEditor(props: ConfigEditorProps): JSX.Element {
diff --git a/packages/website/src/components/inputs/Dropdown.module.css b/packages/website/src/components/inputs/Dropdown.module.css new file mode 100644 index 000000000000..ae9233b69367 --- /dev/null +++ b/packages/website/src/components/inputs/Dropdown.module.css @@ -0,0 +1,20 @@ +.dropdown { + line-height: 1; + font-size: 0.8rem; + font-weight: 500; + border-radius: 6px; + font-family: inherit; + width: 50%; + box-shadow: none; + padding: 0.4rem 0.6rem; + appearance: none; + color: var(--ifm-font-color-secondary); + border: 1px solid var(--ifm-color-emphasis-100); + background: var(--ifm-color-emphasis-200); + transition: border 0.3s ease; +} + +.dropdown:focus { + outline: none; + border-color: var(--ifm-color-primary); +} diff --git a/packages/website/src/components/inputs/Dropdown.tsx b/packages/website/src/components/inputs/Dropdown.tsx index b0236c4d56e8..cb3f78cd0d9a 100644 --- a/packages/website/src/components/inputs/Dropdown.tsx +++ b/packages/website/src/components/inputs/Dropdown.tsx @@ -1,7 +1,7 @@ import clsx from 'clsx'; import React from 'react'; -import styles from '../OptionsSelector.module.css'; +import styles from './Dropdown.module.css'; export interface DropdownOption { readonly value: T; @@ -28,10 +28,10 @@ function Dropdown( return (