From 1125c2b5ac9b76d2596460c94f02eae884842c57 Mon Sep 17 00:00:00 2001 From: Rob Snow Date: Wed, 22 Nov 2023 07:14:39 +1100 Subject: [PATCH 001/203] Initial commit From 31c8beb0700ac5bdad30916e0c05ee2605c9a987 Mon Sep 17 00:00:00 2001 From: Rob Snow Date: Wed, 22 Nov 2023 15:04:48 +1100 Subject: [PATCH 002/203] RAC storybook From 86ea03948ccce89e6f291068496ece2530dfc86b Mon Sep 17 00:00:00 2001 From: Rob Snow Date: Wed, 22 Nov 2023 15:20:16 +1100 Subject: [PATCH 003/203] RAC Storybook --- .babelrc.json | 8 + .storybook-s2/main.js | 58 ++++ .storybook-s2/preview.js | 18 ++ packages/@react-spectrum/s2/package.json | 30 ++ .../@react-spectrum/s2/src/Breadcrumbs.css | 53 ++++ .../@react-spectrum/s2/src/Breadcrumbs.tsx | 6 + packages/@react-spectrum/s2/src/Button.css | 32 +++ packages/@react-spectrum/s2/src/Button.tsx | 6 + packages/@react-spectrum/s2/src/Calendar.css | 81 ++++++ packages/@react-spectrum/s2/src/Calendar.tsx | 35 +++ packages/@react-spectrum/s2/src/Checkbox.css | 99 +++++++ packages/@react-spectrum/s2/src/Checkbox.tsx | 22 ++ .../@react-spectrum/s2/src/CheckboxGroup.css | 20 ++ .../@react-spectrum/s2/src/CheckboxGroup.tsx | 37 +++ packages/@react-spectrum/s2/src/ComboBox.css | 124 ++++++++ packages/@react-spectrum/s2/src/ComboBox.tsx | 49 ++++ packages/@react-spectrum/s2/src/DateField.css | 68 +++++ packages/@react-spectrum/s2/src/DateField.tsx | 35 +++ .../@react-spectrum/s2/src/DatePicker.css | 71 +++++ .../@react-spectrum/s2/src/DatePicker.tsx | 60 ++++ .../s2/src/DateRangePicker.css | 104 +++++++ .../s2/src/DateRangePicker.tsx | 64 +++++ packages/@react-spectrum/s2/src/Dialog.css | 14 + packages/@react-spectrum/s2/src/Dialog.tsx | 6 + packages/@react-spectrum/s2/src/Form.css | 32 +++ packages/@react-spectrum/s2/src/Form.tsx | 6 + packages/@react-spectrum/s2/src/GridList.css | 184 ++++++++++++ packages/@react-spectrum/s2/src/GridList.tsx | 38 +++ packages/@react-spectrum/s2/src/Link.css | 32 +++ packages/@react-spectrum/s2/src/Link.tsx | 6 + packages/@react-spectrum/s2/src/ListBox.css | 223 ++++++++++++++ packages/@react-spectrum/s2/src/ListBox.tsx | 22 ++ packages/@react-spectrum/s2/src/Menu.css | 107 +++++++ packages/@react-spectrum/s2/src/Menu.tsx | 36 +++ packages/@react-spectrum/s2/src/Meter.css | 37 +++ packages/@react-spectrum/s2/src/Meter.tsx | 27 ++ packages/@react-spectrum/s2/src/Modal.css | 83 ++++++ packages/@react-spectrum/s2/src/Modal.tsx | 6 + .../@react-spectrum/s2/src/NumberField.css | 89 ++++++ .../@react-spectrum/s2/src/NumberField.tsx | 36 +++ packages/@react-spectrum/s2/src/Popover.css | 88 ++++++ packages/@react-spectrum/s2/src/Popover.tsx | 27 ++ .../@react-spectrum/s2/src/ProgressBar.css | 49 ++++ .../@react-spectrum/s2/src/ProgressBar.tsx | 27 ++ .../@react-spectrum/s2/src/RadioGroup.css | 87 ++++++ .../@react-spectrum/s2/src/RadioGroup.tsx | 36 +++ .../@react-spectrum/s2/src/RangeCalendar.css | 103 +++++++ .../@react-spectrum/s2/src/RangeCalendar.tsx | 35 +++ .../@react-spectrum/s2/src/SearchField.css | 83 ++++++ .../@react-spectrum/s2/src/SearchField.tsx | 32 +++ packages/@react-spectrum/s2/src/Select.css | 139 +++++++++ packages/@react-spectrum/s2/src/Select.tsx | 52 ++++ packages/@react-spectrum/s2/src/Slider.css | 106 +++++++ packages/@react-spectrum/s2/src/Slider.tsx | 35 +++ packages/@react-spectrum/s2/src/Switch.css | 74 +++++ packages/@react-spectrum/s2/src/Switch.tsx | 19 ++ packages/@react-spectrum/s2/src/Table.css | 272 ++++++++++++++++++ packages/@react-spectrum/s2/src/Table.tsx | 83 ++++++ packages/@react-spectrum/s2/src/Tabs.css | 102 +++++++ packages/@react-spectrum/s2/src/Tabs.tsx | 6 + packages/@react-spectrum/s2/src/TagGroup.css | 91 ++++++ packages/@react-spectrum/s2/src/TagGroup.tsx | 59 ++++ packages/@react-spectrum/s2/src/TextField.css | 49 ++++ packages/@react-spectrum/s2/src/TextField.tsx | 30 ++ packages/@react-spectrum/s2/src/TimeField.css | 68 +++++ packages/@react-spectrum/s2/src/TimeField.tsx | 35 +++ .../@react-spectrum/s2/src/ToggleButton.css | 44 +++ .../@react-spectrum/s2/src/ToggleButton.tsx | 6 + packages/@react-spectrum/s2/src/Toolbar.css | 50 ++++ packages/@react-spectrum/s2/src/Toolbar.tsx | 6 + packages/@react-spectrum/s2/src/Tooltip.css | 69 +++++ packages/@react-spectrum/s2/src/Tooltip.tsx | 24 ++ packages/@react-spectrum/s2/src/theme.css | 127 ++++++++ .../s2/stories/Breadcrumbs.stories.tsx | 28 ++ .../s2/stories/Button.stories.tsx | 19 ++ .../s2/stories/Calendar.stories.tsx | 17 ++ .../s2/stories/Checkbox.stories.tsx | 16 ++ .../s2/stories/CheckboxGroup.stories.tsx | 26 ++ .../s2/stories/ComboBox.stories.tsx | 26 ++ .../s2/stories/DateField.stories.tsx | 19 ++ .../s2/stories/DatePicker.stories.tsx | 19 ++ .../s2/stories/DateRangePicker.stories.tsx | 19 ++ .../s2/stories/Dialog.stories.tsx | 48 ++++ .../s2/stories/Form.stories.tsx | 31 ++ .../s2/stories/GridList.stories.tsx | 27 ++ .../s2/stories/Link.stories.tsx | 24 ++ .../s2/stories/ListBox.stories.tsx | 27 ++ .../s2/stories/Menu.stories.tsx | 22 ++ .../s2/stories/Meter.stories.tsx | 20 ++ .../s2/stories/Modal.stories.tsx | 48 ++++ .../s2/stories/NumberField.stories.tsx | 19 ++ .../s2/stories/Popover.stories.tsx | 24 ++ .../s2/stories/ProgressBar.stories.tsx | 20 ++ .../s2/stories/RadioGroup.stories.tsx | 26 ++ .../s2/stories/RangeCalendar.stories.tsx | 17 ++ .../s2/stories/SearchField.stories.tsx | 19 ++ .../s2/stories/Select.stories.tsx | 26 ++ .../s2/stories/Slider.stories.tsx | 21 ++ .../s2/stories/Switch.stories.tsx | 15 + .../s2/stories/Table.stories.tsx | 47 +++ .../s2/stories/Tabs.stories.tsx | 33 +++ .../s2/stories/TagGroup.stories.tsx | 27 ++ .../s2/stories/TextField.stories.tsx | 19 ++ .../s2/stories/TimeField.stories.tsx | 19 ++ .../s2/stories/ToggleButton.stories.tsx | 16 ++ .../s2/stories/Toolbar.stories.tsx | 51 ++++ .../s2/stories/Tooltip.stories.tsx | 21 ++ 107 files changed, 5033 insertions(+) create mode 100644 .babelrc.json create mode 100644 .storybook-s2/main.js create mode 100644 .storybook-s2/preview.js create mode 100644 packages/@react-spectrum/s2/package.json create mode 100644 packages/@react-spectrum/s2/src/Breadcrumbs.css create mode 100644 packages/@react-spectrum/s2/src/Breadcrumbs.tsx create mode 100644 packages/@react-spectrum/s2/src/Button.css create mode 100644 packages/@react-spectrum/s2/src/Button.tsx create mode 100644 packages/@react-spectrum/s2/src/Calendar.css create mode 100644 packages/@react-spectrum/s2/src/Calendar.tsx create mode 100644 packages/@react-spectrum/s2/src/Checkbox.css create mode 100644 packages/@react-spectrum/s2/src/Checkbox.tsx create mode 100644 packages/@react-spectrum/s2/src/CheckboxGroup.css create mode 100644 packages/@react-spectrum/s2/src/CheckboxGroup.tsx create mode 100644 packages/@react-spectrum/s2/src/ComboBox.css create mode 100644 packages/@react-spectrum/s2/src/ComboBox.tsx create mode 100644 packages/@react-spectrum/s2/src/DateField.css create mode 100644 packages/@react-spectrum/s2/src/DateField.tsx create mode 100644 packages/@react-spectrum/s2/src/DatePicker.css create mode 100644 packages/@react-spectrum/s2/src/DatePicker.tsx create mode 100644 packages/@react-spectrum/s2/src/DateRangePicker.css create mode 100644 packages/@react-spectrum/s2/src/DateRangePicker.tsx create mode 100644 packages/@react-spectrum/s2/src/Dialog.css create mode 100644 packages/@react-spectrum/s2/src/Dialog.tsx create mode 100644 packages/@react-spectrum/s2/src/Form.css create mode 100644 packages/@react-spectrum/s2/src/Form.tsx create mode 100644 packages/@react-spectrum/s2/src/GridList.css create mode 100644 packages/@react-spectrum/s2/src/GridList.tsx create mode 100644 packages/@react-spectrum/s2/src/Link.css create mode 100644 packages/@react-spectrum/s2/src/Link.tsx create mode 100644 packages/@react-spectrum/s2/src/ListBox.css create mode 100644 packages/@react-spectrum/s2/src/ListBox.tsx create mode 100644 packages/@react-spectrum/s2/src/Menu.css create mode 100644 packages/@react-spectrum/s2/src/Menu.tsx create mode 100644 packages/@react-spectrum/s2/src/Meter.css create mode 100644 packages/@react-spectrum/s2/src/Meter.tsx create mode 100644 packages/@react-spectrum/s2/src/Modal.css create mode 100644 packages/@react-spectrum/s2/src/Modal.tsx create mode 100644 packages/@react-spectrum/s2/src/NumberField.css create mode 100644 packages/@react-spectrum/s2/src/NumberField.tsx create mode 100644 packages/@react-spectrum/s2/src/Popover.css create mode 100644 packages/@react-spectrum/s2/src/Popover.tsx create mode 100644 packages/@react-spectrum/s2/src/ProgressBar.css create mode 100644 packages/@react-spectrum/s2/src/ProgressBar.tsx create mode 100644 packages/@react-spectrum/s2/src/RadioGroup.css create mode 100644 packages/@react-spectrum/s2/src/RadioGroup.tsx create mode 100644 packages/@react-spectrum/s2/src/RangeCalendar.css create mode 100644 packages/@react-spectrum/s2/src/RangeCalendar.tsx create mode 100644 packages/@react-spectrum/s2/src/SearchField.css create mode 100644 packages/@react-spectrum/s2/src/SearchField.tsx create mode 100644 packages/@react-spectrum/s2/src/Select.css create mode 100644 packages/@react-spectrum/s2/src/Select.tsx create mode 100644 packages/@react-spectrum/s2/src/Slider.css create mode 100644 packages/@react-spectrum/s2/src/Slider.tsx create mode 100644 packages/@react-spectrum/s2/src/Switch.css create mode 100644 packages/@react-spectrum/s2/src/Switch.tsx create mode 100644 packages/@react-spectrum/s2/src/Table.css create mode 100644 packages/@react-spectrum/s2/src/Table.tsx create mode 100644 packages/@react-spectrum/s2/src/Tabs.css create mode 100644 packages/@react-spectrum/s2/src/Tabs.tsx create mode 100644 packages/@react-spectrum/s2/src/TagGroup.css create mode 100644 packages/@react-spectrum/s2/src/TagGroup.tsx create mode 100644 packages/@react-spectrum/s2/src/TextField.css create mode 100644 packages/@react-spectrum/s2/src/TextField.tsx create mode 100644 packages/@react-spectrum/s2/src/TimeField.css create mode 100644 packages/@react-spectrum/s2/src/TimeField.tsx create mode 100644 packages/@react-spectrum/s2/src/ToggleButton.css create mode 100644 packages/@react-spectrum/s2/src/ToggleButton.tsx create mode 100644 packages/@react-spectrum/s2/src/Toolbar.css create mode 100644 packages/@react-spectrum/s2/src/Toolbar.tsx create mode 100644 packages/@react-spectrum/s2/src/Tooltip.css create mode 100644 packages/@react-spectrum/s2/src/Tooltip.tsx create mode 100644 packages/@react-spectrum/s2/src/theme.css create mode 100644 packages/@react-spectrum/s2/stories/Breadcrumbs.stories.tsx create mode 100644 packages/@react-spectrum/s2/stories/Button.stories.tsx create mode 100644 packages/@react-spectrum/s2/stories/Calendar.stories.tsx create mode 100644 packages/@react-spectrum/s2/stories/Checkbox.stories.tsx create mode 100644 packages/@react-spectrum/s2/stories/CheckboxGroup.stories.tsx create mode 100644 packages/@react-spectrum/s2/stories/ComboBox.stories.tsx create mode 100644 packages/@react-spectrum/s2/stories/DateField.stories.tsx create mode 100644 packages/@react-spectrum/s2/stories/DatePicker.stories.tsx create mode 100644 packages/@react-spectrum/s2/stories/DateRangePicker.stories.tsx create mode 100644 packages/@react-spectrum/s2/stories/Dialog.stories.tsx create mode 100644 packages/@react-spectrum/s2/stories/Form.stories.tsx create mode 100644 packages/@react-spectrum/s2/stories/GridList.stories.tsx create mode 100644 packages/@react-spectrum/s2/stories/Link.stories.tsx create mode 100644 packages/@react-spectrum/s2/stories/ListBox.stories.tsx create mode 100644 packages/@react-spectrum/s2/stories/Menu.stories.tsx create mode 100644 packages/@react-spectrum/s2/stories/Meter.stories.tsx create mode 100644 packages/@react-spectrum/s2/stories/Modal.stories.tsx create mode 100644 packages/@react-spectrum/s2/stories/NumberField.stories.tsx create mode 100644 packages/@react-spectrum/s2/stories/Popover.stories.tsx create mode 100644 packages/@react-spectrum/s2/stories/ProgressBar.stories.tsx create mode 100644 packages/@react-spectrum/s2/stories/RadioGroup.stories.tsx create mode 100644 packages/@react-spectrum/s2/stories/RangeCalendar.stories.tsx create mode 100644 packages/@react-spectrum/s2/stories/SearchField.stories.tsx create mode 100644 packages/@react-spectrum/s2/stories/Select.stories.tsx create mode 100644 packages/@react-spectrum/s2/stories/Slider.stories.tsx create mode 100644 packages/@react-spectrum/s2/stories/Switch.stories.tsx create mode 100644 packages/@react-spectrum/s2/stories/Table.stories.tsx create mode 100644 packages/@react-spectrum/s2/stories/Tabs.stories.tsx create mode 100644 packages/@react-spectrum/s2/stories/TagGroup.stories.tsx create mode 100644 packages/@react-spectrum/s2/stories/TextField.stories.tsx create mode 100644 packages/@react-spectrum/s2/stories/TimeField.stories.tsx create mode 100644 packages/@react-spectrum/s2/stories/ToggleButton.stories.tsx create mode 100644 packages/@react-spectrum/s2/stories/Toolbar.stories.tsx create mode 100644 packages/@react-spectrum/s2/stories/Tooltip.stories.tsx diff --git a/.babelrc.json b/.babelrc.json new file mode 100644 index 00000000000..5f2aa6e1dba --- /dev/null +++ b/.babelrc.json @@ -0,0 +1,8 @@ +{ + "sourceType": "unambiguous", + "presets": [ + "@babel/preset-react", + "@babel/preset-typescript" + ], + "plugins": [] +} diff --git a/.storybook-s2/main.js b/.storybook-s2/main.js new file mode 100644 index 00000000000..3a0458324e6 --- /dev/null +++ b/.storybook-s2/main.js @@ -0,0 +1,58 @@ +import { join, dirname } from "path"; + +/** + * This function is used to resolve the absolute path of a package. + * It is needed in projects that use Yarn PnP or are set up within a monorepo. + */ +function getAbsolutePath(value) { + return dirname(require.resolve(join(value, "package.json"))); +} + +const excludedProps = new Set([ + 'id', + 'slot', + 'onCopy', + 'onCut', + 'onPaste', + 'onCompositionStart', + 'onCompositionEnd', + 'onCompositionUpdate', + 'onSelect', + 'onBeforeInput', + 'onInput' +]); + +/** @type { import('@storybook/react-webpack5').StorybookConfig } */ +const config = { + stories: ["../stories/*.stories.@(js|jsx|mjs|ts|tsx)"], + addons: [ + getAbsolutePath("@storybook/addon-links"), + getAbsolutePath("@storybook/addon-essentials"), + getAbsolutePath("@storybook/addon-onboarding"), + getAbsolutePath("@storybook/addon-interactions"), + ], + framework: { + name: getAbsolutePath("@storybook/react-webpack5"), + options: {}, + }, + docs: { + autodocs: "tag", + }, + typescript: { + reactDocgen: 'react-docgen-typescript', + reactDocgenTypescriptOptions: { + shouldExtractLiteralValuesFromEnum: true, + compilerOptions: { + allowSyntheticDefaultImports: false, + esModuleInterop: false, + }, + propFilter: (prop) => !prop.name.startsWith('aria-') && !excludedProps.has(prop.name), + }, + }, + async webpackFinal(config) { + let rule = config.module.rules.find(rule => String(rule.test).includes('.css')); + rule.use.push('lightningcss-loader'); + return config; + } +}; +export default config; diff --git a/.storybook-s2/preview.js b/.storybook-s2/preview.js new file mode 100644 index 00000000000..fbb845d6eb4 --- /dev/null +++ b/.storybook-s2/preview.js @@ -0,0 +1,18 @@ +import { themes } from "@storybook/theming"; + +/** @type { import('@storybook/react').Preview } */ +const preview = { + parameters: { + actions: { argTypesRegex: "^on[A-Z].*" }, + controls: { + matchers: { + color: /(background|color)$/i, + }, + }, + docs: { + theme: window.matchMedia('(prefers-color-scheme: dark)').matches ? themes.dark : themes.light + } + }, +}; + +export default preview; diff --git a/packages/@react-spectrum/s2/package.json b/packages/@react-spectrum/s2/package.json new file mode 100644 index 00000000000..b74ecf19a2f --- /dev/null +++ b/packages/@react-spectrum/s2/package.json @@ -0,0 +1,30 @@ +{ + "devDependencies": { + "@babel/preset-react": "^7.23.3", + "@storybook/addon-essentials": "^7.5.3", + "@storybook/addon-interactions": "^7.5.3", + "@storybook/addon-links": "^7.5.3", + "@storybook/addon-onboarding": "^1.0.8", + "@storybook/blocks": "^7.5.3", + "@storybook/react": "^7.5.3", + "@storybook/react-webpack5": "^7.5.3", + "@storybook/testing-library": "^0.2.2", + "@types/react": "^18.2.37", + "@types/react-dom": "^18.2.15", + "lightningcss-loader": "^2.1.0", + "prop-types": "^15.8.1", + "react": "^18.2.0", + "react-aria-components": "latest", + "react-dom": "^18.2.0", + "storybook": "^7.5.3", + "storybook-dark-mode": "^3.0.1", + "typescript": "^5.3.2" + }, + "resolutions": { + "jackspeak": "2.1.1" + }, + "scripts": { + "start": "storybook dev -p 6006", + "build-storybook": "storybook build" + } +} diff --git a/packages/@react-spectrum/s2/src/Breadcrumbs.css b/packages/@react-spectrum/s2/src/Breadcrumbs.css new file mode 100644 index 00000000000..0964ebba054 --- /dev/null +++ b/packages/@react-spectrum/s2/src/Breadcrumbs.css @@ -0,0 +1,53 @@ +@import "./theme.css"; + +.react-aria-Breadcrumbs { + display: flex; + align-items: center; + list-style: none; + margin: 0; + padding: 0; + font-size: 18px; + color: var(--text-color); + + .react-aria-Breadcrumb:not(:last-child)::after { + content: '›'; + content: '›' / ''; + alt: ' '; + padding: 0 5px; + } + + .react-aria-Link { + color: var(--link-color-secondary); + outline: none; + position: relative; + text-decoration: none; + cursor: pointer; + + &[data-hovered] { + text-decoration: underline; + } + + &[data-current] { + color: var(--text-color); + font-weight: bold; + } + + &[data-focus-visible]:after { + content: ''; + position: absolute; + inset: -2px -4px; + border-radius: 6px; + border: 2px solid var(--focus-ring-color); + } + } + + .react-aria-Link { + &[data-disabled] { + cursor: default; + + &:not([data-current]) { + color: var(--text-color-disabled); + } + } + } +} diff --git a/packages/@react-spectrum/s2/src/Breadcrumbs.tsx b/packages/@react-spectrum/s2/src/Breadcrumbs.tsx new file mode 100644 index 00000000000..092b6405b78 --- /dev/null +++ b/packages/@react-spectrum/s2/src/Breadcrumbs.tsx @@ -0,0 +1,6 @@ +import {Breadcrumbs as RACBreadcrumbs, BreadcrumbsProps} from 'react-aria-components'; +import './Breadcrumbs.css'; + +export function Breadcrumbs(props: BreadcrumbsProps) { + return ; +} diff --git a/packages/@react-spectrum/s2/src/Button.css b/packages/@react-spectrum/s2/src/Button.css new file mode 100644 index 00000000000..3dbc7d5d088 --- /dev/null +++ b/packages/@react-spectrum/s2/src/Button.css @@ -0,0 +1,32 @@ +@import "./theme.css"; + +.react-aria-Button { + color: var(--text-color); + background: var(--button-background); + border: 1px solid var(--border-color); + border-radius: 4px; + appearance: none; + vertical-align: middle; + font-size: 1rem; + text-align: center; + margin: 0; + outline: none; + padding: 6px 10px; + text-decoration: none; + + &[data-pressed] { + box-shadow: inset 0 1px 2px rgb(0 0 0 / 0.1); + background: var(--button-background-pressed); + border-color: var(--border-color-pressed); + } + + &[data-focus-visible] { + outline: 2px solid var(--focus-ring-color); + outline-offset: -1px; + } + + &[data-disabled]{ + border-color: var(--border-color-disabled); + color: var(--text-color-disabled); + } +} diff --git a/packages/@react-spectrum/s2/src/Button.tsx b/packages/@react-spectrum/s2/src/Button.tsx new file mode 100644 index 00000000000..f5e27166f29 --- /dev/null +++ b/packages/@react-spectrum/s2/src/Button.tsx @@ -0,0 +1,6 @@ +import {Button as RACButton, ButtonProps} from 'react-aria-components'; +import './Button.css'; + +export function Button(props: ButtonProps) { + return ; +} diff --git a/packages/@react-spectrum/s2/src/Calendar.css b/packages/@react-spectrum/s2/src/Calendar.css new file mode 100644 index 00000000000..0b91bf747ce --- /dev/null +++ b/packages/@react-spectrum/s2/src/Calendar.css @@ -0,0 +1,81 @@ +@import './Button.css'; +@import "./theme.css"; + +.react-aria-Calendar { + width: fit-content; + max-width: 100%; + color: var(--text-color); + + header { + display: flex; + align-items: center; + margin: 0 4px .5rem 4px; + + .react-aria-Heading { + flex: 1; + margin: 0; + text-align: center; + font-size: 1.375rem; + } + } + + .react-aria-Button { + width: 2rem; + height: 2rem; + padding: 0; + } + + .react-aria-CalendarCell { + width: 2rem; + line-height: 2rem; + text-align: center; + border-radius: 6px; + cursor: default; + outline: none; + margin: 1px; + forced-color-adjust: none; + + &[data-outside-month] { + display: none; + } + + &[data-pressed] { + background: var(--gray-100); + } + + &[data-focus-visible] { + outline: 2px solid var(--focus-ring-color); + outline-offset: 2px; + } + + &[data-selected] { + background: var(--highlight-background); + color: var(--highlight-foreground); + } + } + + .react-aria-CalendarCell { + &[data-disabled] { + color: var(--text-color-disabled); + } + } + + .react-aria-CalendarCell { + &[data-unavailable] { + text-decoration: line-through; + color: var(--invalid-color); + } + } + + .react-aria-CalendarCell { + &[data-invalid] { + background: var(--invalid-color); + color: var(--highlight-foreground); + } + } + + [slot=errorMessage] { + font-size: 12px; + color: var(--invalid-color); + } +} diff --git a/packages/@react-spectrum/s2/src/Calendar.tsx b/packages/@react-spectrum/s2/src/Calendar.tsx new file mode 100644 index 00000000000..2ad5b19d566 --- /dev/null +++ b/packages/@react-spectrum/s2/src/Calendar.tsx @@ -0,0 +1,35 @@ +import { + Button, + Calendar as AriaCalendar, + CalendarCell, + CalendarGrid, + CalendarProps as AriaCalendarProps, + DateValue, + Heading, + Text +} from 'react-aria-components'; + +import './Calendar.css'; + +export interface CalendarProps + extends AriaCalendarProps { + errorMessage?: string; +} + +export function Calendar( + { errorMessage, ...props }: CalendarProps +) { + return ( + +
+ + + +
+ + {(date) => } + + {errorMessage && {errorMessage}} +
+ ); +} diff --git a/packages/@react-spectrum/s2/src/Checkbox.css b/packages/@react-spectrum/s2/src/Checkbox.css new file mode 100644 index 00000000000..47226a65e6a --- /dev/null +++ b/packages/@react-spectrum/s2/src/Checkbox.css @@ -0,0 +1,99 @@ +@import "./theme.css"; + +.react-aria-Checkbox { + --selected-color: var(--highlight-background); + --selected-color-pressed: var(--highlight-background-pressed); + --checkmark-color: var(--highlight-foreground); + + display: flex; + align-items: center; + gap: 0.571rem; + font-size: 1.143rem; + color: var(--text-color); + forced-color-adjust: none; + + .checkbox { + width: 1.143rem; + height: 1.143rem; + border: 2px solid var(--border-color); + border-radius: 4px; + transition: all 200ms; + display: flex; + align-items: center; + justify-content: center; + } + + svg { + width: 1rem; + height: 1rem; + fill: none; + stroke: var(--checkmark-color); + stroke-width: 3px; + stroke-dasharray: 22px; + stroke-dashoffset: 66; + transition: all 200ms; + } + + &[data-pressed] .checkbox { + border-color: var(--border-color-pressed); + } + + &[data-focus-visible] .checkbox { + outline: 2px solid var(--focus-ring-color); + outline-offset: 2px; + } + + &[data-selected], + &[data-indeterminate] { + .checkbox { + border-color: var(--selected-color); + background: var(--selected-color); + } + + &[data-pressed] .checkbox { + border-color: var(--selected-color-pressed); + background: var(--selected-color-pressed); + } + + svg { + stroke-dashoffset: 44; + } + } + + &[data-indeterminate] { + & svg { + stroke: none; + fill: var(--checkmark-color); + } + } + + &[data-invalid] { + .checkbox { + --checkmark-color: var(--gray-50); + border-color: var(--invalid-color); + } + + &[data-pressed] .checkbox { + border-color: var(--invalid-color-pressed); + } + + &[data-selected], + &[data-indeterminate] { + .checkbox { + background: var(--invalid-color); + } + + &[data-pressed] .checkbox { + background: var(--invalid-color-pressed); + } + } + } + + &[data-disabled] { + color: var(--text-color-disabled); + + .checkbox { + border-color: var(--border-color-disabled); + } + } +} diff --git a/packages/@react-spectrum/s2/src/Checkbox.tsx b/packages/@react-spectrum/s2/src/Checkbox.tsx new file mode 100644 index 00000000000..1df3facf39a --- /dev/null +++ b/packages/@react-spectrum/s2/src/Checkbox.tsx @@ -0,0 +1,22 @@ +import {Checkbox as AriaCheckbox, CheckboxProps} from 'react-aria-components'; + +import './Checkbox.css'; + +export function Checkbox({ children, ...props }: CheckboxProps) { + return ( + + {({ isIndeterminate }) => ( + <> +
+ +
+ {children} + + )} +
+ ); +} diff --git a/packages/@react-spectrum/s2/src/CheckboxGroup.css b/packages/@react-spectrum/s2/src/CheckboxGroup.css new file mode 100644 index 00000000000..3711f3b3616 --- /dev/null +++ b/packages/@react-spectrum/s2/src/CheckboxGroup.css @@ -0,0 +1,20 @@ +@import './Checkbox.css'; +@import './Form.css'; +@import './Button.css'; +@import "./theme.css"; + +.react-aria-CheckboxGroup { + display: flex; + flex-direction: column; + gap: 0.571rem; + color: var(--text-color); + + .react-aria-FieldError { + font-size: 12px; + color: var(--invalid-color); + } + + [slot=description] { + font-size: 12px; + } +} diff --git a/packages/@react-spectrum/s2/src/CheckboxGroup.tsx b/packages/@react-spectrum/s2/src/CheckboxGroup.tsx new file mode 100644 index 00000000000..866bddda1de --- /dev/null +++ b/packages/@react-spectrum/s2/src/CheckboxGroup.tsx @@ -0,0 +1,37 @@ +import { + CheckboxGroup as AriaCheckboxGroup, + CheckboxGroupProps as AriaCheckboxGroupProps, + CheckboxProps as AriaCheckboxProps, + FieldError, + Text, + ValidationResult +} from 'react-aria-components'; + +import './CheckboxGroup.css'; + +export interface CheckboxGroupProps + extends Omit { + children?: React.ReactNode; + label?: string; + description?: string; + errorMessage?: string | ((validation: ValidationResult) => string); +} + +export function CheckboxGroup( + { + label, + description, + errorMessage, + children, + ...props + }: CheckboxGroupProps +) { + return ( + + {label} + {children} + {description && {description}} + {errorMessage} + + ); +} diff --git a/packages/@react-spectrum/s2/src/ComboBox.css b/packages/@react-spectrum/s2/src/ComboBox.css new file mode 100644 index 00000000000..9c4756d5207 --- /dev/null +++ b/packages/@react-spectrum/s2/src/ComboBox.css @@ -0,0 +1,124 @@ +@import './Checkbox.css'; +@import './ListBox.css'; +@import './Popover.css'; +@import './Form.css'; +@import './Button.css'; +@import "./theme.css"; + +.react-aria-ComboBox { + color: var(--text-color); + + .react-aria-Input { + margin: 0; + font-size: 1.072rem; + background: var(--field-background); + color: var(--field-text-color); + border: 1px solid var(--border-color); + border-radius: 6px; + padding: 0.286rem 2rem 0.286rem 0.571rem; + vertical-align: middle; + + &[data-focused] { + outline: none; + outline: 2px solid var(--focus-ring-color); + outline-offset: -1px; + } + } + + .react-aria-Button { + background: var(--highlight-background); + color: var(--highlight-foreground); + forced-color-adjust: none; + border-radius: 4px; + border: none; + margin-left: -1.714rem; + width: 1.429rem; + height: 1.429rem; + padding: 0; + font-size: 0.857rem; + + &[data-pressed] { + box-shadow: none; + background: var(--highlight-background); + } + } +} + +.react-aria-Popover[data-trigger=ComboBox] { + width: var(--trigger-width); + + .react-aria-ListBox { + display: block; + width: unset; + max-height: inherit; + min-height: unset; + border: none; + + .react-aria-Header { + padding-left: 1.571rem; + } + } + + .react-aria-ListBoxItem { + padding: 0.286rem 0.571rem 0.286rem 1.571rem; + + &[data-focus-visible] { + outline: none; + } + + &[data-selected] { + font-weight: 600; + background: unset; + color: var(--text-color); + + &::before { + content: '✓'; + content: '✓' / ''; + alt: ' '; + position: absolute; + top: 4px; + left: 4px; + } + } + + &[data-focused], + &[data-pressed] { + background: var(--highlight-background); + color: var(--highlight-foreground); + } + } +} + +.react-aria-ListBoxItem[href] { + text-decoration: none; + cursor: pointer; +} + +.react-aria-ComboBox { + .react-aria-Input { + &[data-disabled] { + border-color: var(--border-color-disabled); + } + } + + .react-aria-Button { + &[data-disabled] { + background: var(--border-color-disabled); + } + } + + .react-aria-Input { + &[data-invalid]:not([data-focused]) { + border-color: var(--invalid-color); + } + } + + .react-aria-FieldError { + font-size: 12px; + color: var(--invalid-color); + } + + [slot=description] { + font-size: 12px; + } +} diff --git a/packages/@react-spectrum/s2/src/ComboBox.tsx b/packages/@react-spectrum/s2/src/ComboBox.tsx new file mode 100644 index 00000000000..b1c8bb0412b --- /dev/null +++ b/packages/@react-spectrum/s2/src/ComboBox.tsx @@ -0,0 +1,49 @@ +import { + Button, + ComboBox as AriaComboBox, + ComboBoxProps as AriaComboBoxProps, + FieldError, + Input, + Label, + ListBox, + ListBoxItem, + ListBoxItemProps, + Popover, + Text, + ValidationResult +} from 'react-aria-components'; + +import './ComboBox.css'; + +export interface ComboBoxProps + extends Omit, 'children'> { + label?: string; + description?: string | null; + errorMessage?: string | ((validation: ValidationResult) => string); + children: React.ReactNode | ((item: T) => React.ReactNode); +} + +export function ComboBox( + { label, description, errorMessage, children, ...props }: ComboBoxProps +) { + return ( + + +
+ + +
+ {description && {description}} + {errorMessage} + + + {children} + + +
+ ); +} + +export function ComboBoxItem(props: ListBoxItemProps) { + return ; +} diff --git a/packages/@react-spectrum/s2/src/DateField.css b/packages/@react-spectrum/s2/src/DateField.css new file mode 100644 index 00000000000..e1b795c7ce6 --- /dev/null +++ b/packages/@react-spectrum/s2/src/DateField.css @@ -0,0 +1,68 @@ +@import './Form.css'; +@import './Button.css'; +@import "./theme.css"; + +.react-aria-DateField { + color: var(--text-color); +} + +.react-aria-DateInput { + display: flex; + padding: 4px; + border: 1px solid var(--border-color); + border-radius: 6px; + background: var(--field-background); + width: fit-content; + min-width: 150px; + white-space: nowrap; + forced-color-adjust: none; + + &[data-focus-within] { + outline: 2px solid var(--focus-ring-color); + outline-offset: -1px; + } +} + +.react-aria-DateSegment { + padding: 0 2px; + font-variant-numeric: tabular-nums; + text-align: end; + color: var(--text-color); + + &[data-type=literal] { + padding: 0; + } + + &[data-placeholder] { + color: var(--text-color-placeholder); + font-style: italic; + } + + &:focus { + color: var(--highlight-foreground); + background: var(--highlight-background); + outline: none; + border-radius: 4px; + caret-color: transparent; + } + + &[data-invalid] { + color: var(--invalid-color); + + &:focus { + background: var(--highlight-background-invalid); + color: var(--highlight-foreground); + } + } +} + +.react-aria-DateField { + .react-aria-FieldError { + font-size: 12px; + color: var(--invalid-color); + } + + [slot=description] { + font-size: 12px; + } +} diff --git a/packages/@react-spectrum/s2/src/DateField.tsx b/packages/@react-spectrum/s2/src/DateField.tsx new file mode 100644 index 00000000000..90567759a4b --- /dev/null +++ b/packages/@react-spectrum/s2/src/DateField.tsx @@ -0,0 +1,35 @@ +import { + DateField as AriaDateField, + DateFieldProps as AriaDateFieldProps, + DateInput, + DateSegment, + DateValue, + FieldError, + Label, + Text, + ValidationResult +} from 'react-aria-components'; + +import './DateField.css'; + +export interface DateFieldProps + extends AriaDateFieldProps { + label?: string; + description?: string; + errorMessage?: string | ((validation: ValidationResult) => string); +} + +export function DateField( + { label, description, errorMessage, ...props }: DateFieldProps +) { + return ( + + + + {(segment) => } + + {description && {description}} + {errorMessage} + + ); +} diff --git a/packages/@react-spectrum/s2/src/DatePicker.css b/packages/@react-spectrum/s2/src/DatePicker.css new file mode 100644 index 00000000000..8b5c81937ba --- /dev/null +++ b/packages/@react-spectrum/s2/src/DatePicker.css @@ -0,0 +1,71 @@ +@import './Button.css'; +@import './Popover.css'; +@import './Dialog.css'; +@import './DateField.css'; +@import './Calendar.css'; +@import './Form.css'; +@import "./theme.css"; + +.react-aria-DatePicker { + color: var(--text-color); + + .react-aria-Group { + display: flex; + width: fit-content; + align-items: center; + } + + .react-aria-Button { + background: var(--highlight-background); + color: var(--highlight-foreground); + border: 2px solid var(--field-background); + forced-color-adjust: none; + border-radius: 4px; + border: none; + margin-left: -1.929rem; + width: 1.429rem; + height: 1.429rem; + padding: 0; + font-size: 0.857rem; + box-sizing: content-box; + + &[data-pressed] { + box-shadow: none; + background: var(--highlight-background); + } + + &[data-focus-visible] { + outline: 2px solid var(--focus-ring-color); + outline-offset: 2px; + } + } + + .react-aria-DateInput { + padding: 4px 2.5rem 4px 8px; + } +} + +.react-aria-Popover[data-trigger=DatePicker] { + max-width: unset; +} + +.react-aria-DatePicker { + &[data-invalid] { + .react-aria-DateInput:after { + content: '🚫' / ''; + content: '🚫'; + alt: ' '; + flex: 1; + text-align: end; + } + } + + .react-aria-FieldError { + font-size: 12px; + color: var(--invalid-color); + } + + [slot=description] { + font-size: 12px; + } +} diff --git a/packages/@react-spectrum/s2/src/DatePicker.tsx b/packages/@react-spectrum/s2/src/DatePicker.tsx new file mode 100644 index 00000000000..98f9faac7b2 --- /dev/null +++ b/packages/@react-spectrum/s2/src/DatePicker.tsx @@ -0,0 +1,60 @@ +import { + Button, + Calendar, + CalendarCell, + CalendarGrid, + DateInput, + DatePicker as AriaDatePicker, + DatePickerProps as AriaDatePickerProps, + DateSegment, + DateValue, + Dialog, + FieldError, + Group, + Heading, + Label, + Popover, + Text, + ValidationResult +} from 'react-aria-components'; + +import './DatePicker.css'; + +export interface DatePickerProps + extends AriaDatePickerProps { + label?: string; + description?: string; + errorMessage?: string | ((validation: ValidationResult) => string); +} + +export function DatePicker( + { label, description, errorMessage, ...props }: DatePickerProps +) { + return ( + + + + + {(segment) => } + + + + {description && {description}} + {errorMessage} + + + +
+ + + +
+ + {(date) => } + +
+
+
+
+ ); +} diff --git a/packages/@react-spectrum/s2/src/DateRangePicker.css b/packages/@react-spectrum/s2/src/DateRangePicker.css new file mode 100644 index 00000000000..54780961ff1 --- /dev/null +++ b/packages/@react-spectrum/s2/src/DateRangePicker.css @@ -0,0 +1,104 @@ +@import './Button.css'; +@import './Popover.css'; +@import './Dialog.css'; +@import './DateField.css'; +@import './RangeCalendar.css'; +@import './Form.css'; +@import "./theme.css"; + +.react-aria-DateRangePicker { + color: var(--text-color); + + .react-aria-Group { + display: flex; + align-items: center; + width: fit-content; + min-width: 220px; + max-width: 100%; + box-sizing: border-box; + overflow: auto; + position: relative; + padding: 4px 4px 4px 8px; + border: 1px solid var(--border-color); + border-radius: 6px; + background: var(--field-background); + white-space: nowrap; + + &[data-pressed] { + box-shadow: none; + background: var(--highlight-background); + } + + &[data-focus-within] { + outline: 2px solid var(--focus-ring-color); + outline-offset: -1px; + } + } + + [slot=start] + span { + padding: 0 4px; + } + + [slot=end] { + margin-right: 2rem; + flex: 1; + } + + .react-aria-Button { + background: var(--highlight-background); + color: var(--highlight-foreground); + border: 2px solid var(--field-background); + forced-color-adjust: none; + border-radius: 4px; + border: none; + margin-left: auto; + width: 1.429rem; + height: 1.429rem; + padding: 0; + font-size: 0.857rem; + box-sizing: content-box; + flex-shrink: 0; + position: sticky; + right: 0; + + &[data-focus-visible] { + outline: 2px solid var(--focus-ring-color); + outline-offset: 2px; + } + } + + .react-aria-DateInput { + width: unset; + min-width: unset; + padding: unset; + border: unset; + outline: unset; + } +} + +.react-aria-Popover[data-trigger=DateRangePicker] { + max-width: unset; +} + +.react-aria-DateRangePicker { + &[data-invalid] { + [slot=end]:after { + content: '🚫' / ''; + content: '🚫'; + alt: ' '; + flex: 1; + text-align: end; + margin-left: 1.5rem; + margin-right: -1.5rem; + } + } + + .react-aria-FieldError { + font-size: 12px; + color: var(--invalid-color); + } + + [slot=description] { + font-size: 12px; + } +} diff --git a/packages/@react-spectrum/s2/src/DateRangePicker.tsx b/packages/@react-spectrum/s2/src/DateRangePicker.tsx new file mode 100644 index 00000000000..1ab735f606a --- /dev/null +++ b/packages/@react-spectrum/s2/src/DateRangePicker.tsx @@ -0,0 +1,64 @@ +import { + Button, + CalendarCell, + CalendarGrid, + DateInput, + DateRangePicker as AriaDateRangePicker, + DateRangePickerProps as AriaDateRangePickerProps, + DateSegment, + DateValue, + Dialog, + FieldError, + Group, + Heading, + Label, + Popover, + RangeCalendar, + Text, + ValidationResult +} from 'react-aria-components'; + +import './DateRangePicker.css'; + +export interface DateRangePickerProps + extends AriaDateRangePickerProps { + label?: string; + description?: string; + errorMessage?: string | ((validation: ValidationResult) => string); +} + +export function DateRangePicker( + { label, description, errorMessage, ...props }: DateRangePickerProps +) { + return ( + + + + + {(segment) => } + + + + {(segment) => } + + + + {description && {description}} + {errorMessage} + + + +
+ + + +
+ + {(date) => } + +
+
+
+
+ ); +} diff --git a/packages/@react-spectrum/s2/src/Dialog.css b/packages/@react-spectrum/s2/src/Dialog.css new file mode 100644 index 00000000000..2ab800ca26c --- /dev/null +++ b/packages/@react-spectrum/s2/src/Dialog.css @@ -0,0 +1,14 @@ +@import "./theme.css"; +@import './Button.css'; +@import './TextField.css'; +@import './Modal.css'; + +.react-aria-Dialog { + outline: none; + padding: 30px; + + .react-aria-Heading[slot=title] { + line-height: 1em; + margin-top: 0; + } +} diff --git a/packages/@react-spectrum/s2/src/Dialog.tsx b/packages/@react-spectrum/s2/src/Dialog.tsx new file mode 100644 index 00000000000..8748e3a4d54 --- /dev/null +++ b/packages/@react-spectrum/s2/src/Dialog.tsx @@ -0,0 +1,6 @@ +import {Dialog as RACDialog, DialogProps} from 'react-aria-components'; +import './Dialog.css'; + +export function Dialog(props: DialogProps) { + return ; +} diff --git a/packages/@react-spectrum/s2/src/Form.css b/packages/@react-spectrum/s2/src/Form.css new file mode 100644 index 00000000000..37c01bfd6fa --- /dev/null +++ b/packages/@react-spectrum/s2/src/Form.css @@ -0,0 +1,32 @@ +@import "./theme.css"; +@import './TextField.css'; +@import './Button.css'; + +.react-aria-Form { + display: flex; + flex-direction: column; + align-items: start; + gap: 8px; +} + +.react-aria-Form [role=alert] { + border: 2px solid var(--invalid-color); + background: var(--overlay-background); + border-radius: 6px; + padding: 12px; + max-width: 250px; + outline: none; + + &:focus-visible { + outline: 2px solid var(--focus-ring-color); + outline-offset: 2px; + } + + h3 { + margin-top: 0; + } + + p { + margin-bottom: 0; + } +} diff --git a/packages/@react-spectrum/s2/src/Form.tsx b/packages/@react-spectrum/s2/src/Form.tsx new file mode 100644 index 00000000000..2a7ad16bee3 --- /dev/null +++ b/packages/@react-spectrum/s2/src/Form.tsx @@ -0,0 +1,6 @@ +import {Form as RACForm, FormProps} from 'react-aria-components'; +import './Form.css'; + +export function Form(props: FormProps) { + return ; +} diff --git a/packages/@react-spectrum/s2/src/GridList.css b/packages/@react-spectrum/s2/src/GridList.css new file mode 100644 index 00000000000..0ec823d91cf --- /dev/null +++ b/packages/@react-spectrum/s2/src/GridList.css @@ -0,0 +1,184 @@ +@import './Button.css'; +@import './Checkbox.css'; +@import './ToggleButton.css'; +@import "./theme.css"; + +.react-aria-GridList { + display: flex; + flex-direction: column; + gap: 2px; + max-height: inherit; + overflow: auto; + padding: 4px; + border: 1px solid var(--border-color); + border-radius: 6px; + background: var(--overlay-background); + forced-color-adjust: none; + outline: none; + width: 250px; + max-height: 300px; + min-height: 100px; + box-sizing: border-box; + + &[data-focus-visible] { + outline: 2px solid var(--focus-ring-color); + outline-offset: -1px; + } + + .react-aria-GridListItem { + display: flex; + align-items: center; + gap: 0.571rem; + min-height: 28px; + padding: 0.286rem 0.286rem 0.286rem 0.571rem; + border-radius: 6px; + outline: none; + cursor: default; + color: var(--text-color); + font-size: 1.072rem; + position: relative; + transform: translateZ(0); + + &[data-focus-visible] { + outline: 2px solid var(--focus-ring-color); + outline-offset: -2px; + } + + &[data-pressed] { + background: var(--gray-100); + } + + &[data-selected] { + background: var(--highlight-background); + color: var(--highlight-foreground); + --focus-ring-color: var(--highlight-foreground); + + &[data-focus-visible] { + outline-color: var(--highlight-foreground); + outline-offset: -4px; + } + + .react-aria-Button { + color: var(--highlight-foreground); + --highlight-hover: rgb(255 255 255 / 0.1); + --highlight-pressed: rgb(255 255 255 / 0.2); + } + } + + &[data-disabled] { + color: var(--text-color-disabled); + } + + .react-aria-Button:not([slot]) { + margin-left: auto; + } + + .react-aria-Button { + background: transparent; + border: none; + font-size: 1.2rem; + line-height: 1.2em; + padding: 0.286rem 0.429rem; + transition: background 200ms; + + &[data-hovered] { + background: var(--highlight-hover); + } + + &[data-pressed] { + background: var(--highlight-pressed); + box-shadow: none; + } + } + } + + /* join selected items if :has selector is supported */ + @supports selector(:has(.foo)) { + gap: 0; + + .react-aria-GridListItem[data-selected]:has(+ [data-selected]), + .react-aria-GridListItem[data-selected]:has(+ .react-aria-DropIndicator + [data-selected]) { + border-end-start-radius: 0; + border-end-end-radius: 0; + } + + .react-aria-GridListItem[data-selected] + [data-selected], + .react-aria-GridListItem[data-selected] + .react-aria-DropIndicator + [data-selected] { + border-start-start-radius: 0; + border-start-end-radius: 0; + } + } + + :where(.react-aria-GridListItem) .react-aria-Checkbox { + --selected-color: var(--highlight-foreground); + --selected-color-pressed: var(--highlight-foreground-pressed); + --checkmark-color: var(--highlight-background); + --background-color: var(--highlight-background); + } +} + +.react-aria-GridListItem[data-href] { + cursor: pointer; +} + +.react-aria-GridList { + &[data-empty] { + align-items: center; + justify-content: center; + font-style: italic; + } +} + +.react-aria-GridListItem { + &[data-allows-dragging] { + padding-left: 4px; + } + + &[data-dragging] { + opacity: 0.6; + } + + [slot=drag] { + all: unset; + width: 15px; + text-align: center; + + &[data-focus-visible] { + border-radius: 4px; + outline: 2px solid var(--focus-ring-color); + } + } +} + +.react-aria-DropIndicator { + &[data-drop-target] { + outline: 1px solid var(--highlight-background); + } + + @supports not selector(:has(.foo)) { + /* Undo gap in browsers that don't support :has */ + margin-bottom: -2px; + } +} + +.react-aria-GridList[data-drop-target] { + outline: 2px solid var(--highlight-background); + outline-offset: -1px; + background: var(--highlight-overlay); +} + +.react-aria-GridListItem[data-drop-target] { + outline: 2px solid var(--highlight-background); + background:var(--highlight-overlay); +} + +.react-aria-DropIndicator { + &[data-drop-target] { + outline: 1px solid var(--highlight-background); + } + + @supports not selector(:has(.foo)) { + /* Undo gap in browsers that don't support :has */ + margin-bottom: -2px; + } +} diff --git a/packages/@react-spectrum/s2/src/GridList.tsx b/packages/@react-spectrum/s2/src/GridList.tsx new file mode 100644 index 00000000000..4b2704780f9 --- /dev/null +++ b/packages/@react-spectrum/s2/src/GridList.tsx @@ -0,0 +1,38 @@ +import { + Button, + GridList as AriaGridList, + GridListItem as AriaGridListItem, + GridListItemProps, + GridListProps +} from 'react-aria-components'; + +import {Checkbox} from './Checkbox'; +import './GridList.css'; + +export function GridList( + { children, ...props }: GridListProps +) { + return ( + + {children} + + ); +} + +export function GridListItem({ children, ...props }: GridListItemProps) { + let textValue = typeof children === 'string' ? children : undefined; + return ( + + {({ selectionMode, selectionBehavior, allowsDragging }) => ( + <> + {/* Add elements for drag and drop and selection. */} + {allowsDragging && } + {selectionMode === 'multiple' && selectionBehavior === 'toggle' && ( + + )} + {children} + + )} + + ); +} diff --git a/packages/@react-spectrum/s2/src/Link.css b/packages/@react-spectrum/s2/src/Link.css new file mode 100644 index 00000000000..6e582149850 --- /dev/null +++ b/packages/@react-spectrum/s2/src/Link.css @@ -0,0 +1,32 @@ +@import "./theme.css"; + +.react-aria-Link { + color: var(--link-color); + font-size: 18px; + transition: all 200ms; + text-decoration: underline; + cursor: pointer; + outline: none; + position: relative; + + &[data-hovered] { + text-decoration-style: wavy; + } + + &[data-pressed] { + color: var(--link-color-pressed); + } + + &[data-focus-visible]:after { + content: ''; + position: absolute; + inset: -3px -6px; + border-radius: 6px; + border: 2px solid var(--focus-ring-color); + } + + &[data-disabled] { + cursor: default; + color: var(--text-color-disabled); + } +} diff --git a/packages/@react-spectrum/s2/src/Link.tsx b/packages/@react-spectrum/s2/src/Link.tsx new file mode 100644 index 00000000000..757ebcb1a58 --- /dev/null +++ b/packages/@react-spectrum/s2/src/Link.tsx @@ -0,0 +1,6 @@ +import {Link as RACLink, LinkProps} from 'react-aria-components'; +import './Link.css'; + +export function Link(props: LinkProps) { + return ; +} diff --git a/packages/@react-spectrum/s2/src/ListBox.css b/packages/@react-spectrum/s2/src/ListBox.css new file mode 100644 index 00000000000..61add0020a1 --- /dev/null +++ b/packages/@react-spectrum/s2/src/ListBox.css @@ -0,0 +1,223 @@ +@import './Checkbox.css'; +@import "./theme.css"; + +.react-aria-ListBox { + display: flex; + flex-direction: column; + max-height: inherit; + overflow: auto; + padding: 2px; + border: 1px solid var(--border-color); + border-radius: 6px; + background: var(--overlay-background); + forced-color-adjust: none; + outline: none; + width: 250px; + max-height: 300px; + min-height: 100px; + box-sizing: border-box; + + &[data-focus-visible] { + outline: 2px solid var(--focus-ring-color); + outline-offset: -1px; + } +} + +.react-aria-ListBoxItem { + margin: 2px; + padding: 0.286rem 0.571rem; + border-radius: 6px; + outline: none; + cursor: default; + color: var(--text-color); + font-size: 1.072rem; + position: relative; + display: flex; + flex-direction: column; + + &[data-focus-visible] { + outline: 2px solid var(--focus-ring-color); + outline-offset: -2px; + } + + &[data-selected] { + background: var(--highlight-background); + color: var(--highlight-foreground); + + &[data-focus-visible] { + outline-color: var(--highlight-foreground); + outline-offset: -4px; + } + } +} + +.react-aria-ListBoxItem[href] { + text-decoration: none; + cursor: pointer; + -webkit-touch-callout: none; +} + +.react-aria-ListBox { + .react-aria-Section:not(:first-child) { + margin-top: 12px; + } + + .react-aria-Header { + font-size: 1.143rem; + font-weight: bold; + padding: 0 0.714rem; + } +} + +.react-aria-ListBoxItem { + [slot=label] { + font-weight: bold; + } + + [slot=description] { + font-size: small; + } +} + +.react-aria-ListBox[data-orientation=horizontal], +.react-aria-ListBox[data-layout=grid] { + flex-direction: row; + width: fit-content; + max-width: 100%; + padding: 4px; + + .react-aria-ListBoxItem { + position: relative; + margin: 0; + padding: 4px; + + & img { + object-fit: cover; + aspect-ratio: 1/1; + max-width: 150px; + margin-bottom: 4px; + border-radius: 4px; + transition: box-shadow 200ms; + } + + &[data-hovered] { + & img { + box-shadow: 0 0 8px rgb(from slateblue r g b / 0.5); + } + } + + &[data-selected] { + background: none; + color: inherit; + + & img { + box-shadow: 0 0 12px rgb(from slateblue r g b / 0.8); + } + + &:after { + content: '✓'; + content: '✓' / ''; + alt: ' '; + position: absolute; + top: 8px; + right: 8px; + background: var(--highlight-background); + border: 2px solid var(--highlight-foreground); + color: var(--highlight-foreground); + width: 22px; + height: 22px; + border-radius: 22px; + box-sizing: border-box; + font-size: 14px; + line-height: 1em; + display: flex; + align-items: center; + justify-content: center; + box-shadow: 0 0 8px rgb(0 0 0 / .5); + } + } + } +} + +.react-aria-ListBox[data-layout=grid] { + display: grid; + grid-template-columns: 1fr 1fr; + scrollbar-gutter: stable; +} + +.react-aria-ListBox[data-layout=grid][data-orientation=horizontal] { + width: 100%; + max-width: none; + display: grid; + grid-auto-flow: column; + grid-template-rows: 58px 58px; + grid-template-columns: none; + grid-auto-columns: 250px; + max-height: 200px; + gap: 8px; + + .react-aria-ListBoxItem { + display: grid; + grid-template-areas: "image ." + "image title" + "image description" + "image ."; + grid-template-columns: auto 1fr; + grid-template-rows: 1fr auto auto 1fr; + column-gap: 8px; + + & img { + width: 50px; + height: 50px; + grid-area: image; + margin-bottom: 0; + } + + [slot=label] { + grid-area: title; + } + + [slot=description] { + grid-area: description; + } + } +} + +.react-aria-ListBoxItem { + &[data-disabled] { + color: var(--text-color-disabled); + } +} + +.react-aria-ListBox { + &[data-empty] { + align-items: center; + justify-content: center; + font-style: italic; + } +} + +.react-aria-ListBoxItem { + &[data-dragging] { + opacity: 0.6; + } +} + +.react-aria-DropIndicator[data-drop-target] { + outline: 1px solid var(--highlight-background); +} + +.react-aria-ListBox[data-drop-target] { + outline: 2px solid var(--highlight-background); + outline-offset: -1px; + background: var(--highlight-overlay) +} + +.react-aria-ListBoxItem[data-drop-target] { + outline: 2px solid var(--highlight-background); + background: var(--highlight-overlay) +} + +.react-aria-DropIndicator[data-drop-target] { + outline: 1px solid var(--highlight-background); +} diff --git a/packages/@react-spectrum/s2/src/ListBox.tsx b/packages/@react-spectrum/s2/src/ListBox.tsx new file mode 100644 index 00000000000..6a0c1b4d755 --- /dev/null +++ b/packages/@react-spectrum/s2/src/ListBox.tsx @@ -0,0 +1,22 @@ +import { + ListBox as AriaListBox, + ListBoxItem as AriaListBoxItem, + ListBoxItemProps, + ListBoxProps +} from 'react-aria-components'; + +import './ListBox.css'; + +export function ListBox( + { children, ...props }: ListBoxProps +) { + return ( + + {children} + + ); +} + +export function ListBoxItem(props: ListBoxItemProps) { + return ; +} diff --git a/packages/@react-spectrum/s2/src/Menu.css b/packages/@react-spectrum/s2/src/Menu.css new file mode 100644 index 00000000000..a526538916f --- /dev/null +++ b/packages/@react-spectrum/s2/src/Menu.css @@ -0,0 +1,107 @@ +@import './Button.css'; +@import './Popover.css'; +@import "./theme.css"; + +.react-aria-Menu { + max-height: inherit; + box-sizing: border-box; + overflow: auto; + padding: 2px; + min-width: 150px; + box-sizing: border-box; + outline: none; +} + +.react-aria-MenuItem { + margin: 2px; + padding: 0.286rem 0.571rem; + border-radius: 6px; + outline: none; + cursor: default; + color: var(--text-color); + font-size: 1.072rem; + position: relative; + display: grid; + grid-template-areas: "label kbd" + "desc kbd"; + align-items: center; + column-gap: 20px; + forced-color-adjust: none; + + &[data-focused] { + background: var(--highlight-background); + color: var(--highlight-foreground); + } +} + +.react-aria-MenuItem { + &[data-selection-mode] { + padding-left: 24px; + + &::before { + position: absolute; + left: 4px; + font-weight: 600; + } + + &[data-selection-mode=multiple][data-selected]::before { + content: '✓'; + content: '✓' / ''; + alt: ' '; + position: absolute; + left: 4px; + font-weight: 600; + } + + &[data-selection-mode=single][data-selected]::before { + content: '●'; + content: '●' / ''; + transform: scale(0.7) + } + } +} + +.react-aria-MenuItem[href] { + text-decoration: none; + cursor: pointer; +} + +.react-aria-Menu { + .react-aria-Section:not(:first-child) { + margin-top: 12px; + } + + .react-aria-Header { + font-size: 1.143rem; + font-weight: bold; + padding: 0 0.714rem; + } + + .react-aria-Separator { + height: 1px; + background: var(--border-color); + margin: 2px 4px; + } +} + +.react-aria-MenuItem { + [slot=label] { + font-weight: bold; + grid-area: label; + } + + [slot=description] { + font-size: small; + grid-area: desc; + } + + kbd { + grid-area: kbd; + font-family: monospace; + text-align: end; + } + + &[data-disabled] { + color: var(--text-color-disabled); + } +} diff --git a/packages/@react-spectrum/s2/src/Menu.tsx b/packages/@react-spectrum/s2/src/Menu.tsx new file mode 100644 index 00000000000..de50f01b8ae --- /dev/null +++ b/packages/@react-spectrum/s2/src/Menu.tsx @@ -0,0 +1,36 @@ +import { + Button, + Menu, + MenuItem as AriaMenuItem, + MenuItemProps, + MenuProps, + MenuTrigger, + MenuTriggerProps, + Popover +} from 'react-aria-components'; + +import './Menu.css'; + +export interface MenuButtonProps + extends MenuProps, Omit { + label?: string; +} + +export function MenuButton( + { label, children, ...props }: MenuButtonProps +) { + return ( + + + + + {children} + + + + ); +} + +export function MenuItem(props: MenuItemProps) { + return ; +} diff --git a/packages/@react-spectrum/s2/src/Meter.css b/packages/@react-spectrum/s2/src/Meter.css new file mode 100644 index 00000000000..6fe0833fe62 --- /dev/null +++ b/packages/@react-spectrum/s2/src/Meter.css @@ -0,0 +1,37 @@ +@import "./theme.css"; + +.react-aria-Meter { + --fill-color: forestgreen; + + display: grid; + grid-template-areas: "label value" + "bar bar"; + grid-template-columns: 1fr auto; + gap: 4px; + width: 250px; + color: var(--text-color); + + .value { + grid-area: value; + } + + .bar { + grid-area: bar; + box-shadow: inset 0px 0px 0px 1px var(--border-color); + forced-color-adjust: none; + height: 10px; + border-radius: 5px; + overflow: hidden; + } + + .fill { + background: var(--fill-color); + height: 100%; + } +} + +@media (forced-colors: active) { + .react-aria-Meter { + --fill-color: Highlight; + } +} diff --git a/packages/@react-spectrum/s2/src/Meter.tsx b/packages/@react-spectrum/s2/src/Meter.tsx new file mode 100644 index 00000000000..6566ce5d717 --- /dev/null +++ b/packages/@react-spectrum/s2/src/Meter.tsx @@ -0,0 +1,27 @@ +import { + Label, + Meter as AriaMeter, + MeterProps as AriaMeterProps +} from 'react-aria-components'; + +import './Meter.css'; + +export interface MeterProps extends AriaMeterProps { + label?: string; +} + +export function Meter({ label, ...props }: MeterProps) { + return ( + + {({ percentage, valueText }) => ( + <> + + {valueText} +
+
+
+ + )} + + ); +} diff --git a/packages/@react-spectrum/s2/src/Modal.css b/packages/@react-spectrum/s2/src/Modal.css new file mode 100644 index 00000000000..ade2c99e3d3 --- /dev/null +++ b/packages/@react-spectrum/s2/src/Modal.css @@ -0,0 +1,83 @@ +@import './Button.css'; +@import './TextField.css'; +@import "./theme.css"; + +.react-aria-ModalOverlay { + position: fixed; + top: 0; + left: 0; + width: 100vw; + height: var(--visual-viewport-height); + background: rgba(0 0 0 / .5); + display: flex; + align-items: center; + justify-content: center; + + &[data-entering] { + animation: modal-fade 200ms; + } + + &[data-exiting] { + animation: modal-fade 150ms reverse ease-in; + } +} + +.react-aria-Modal { + box-shadow: 0 8px 20px rgba(0 0 0 / 0.1); + border-radius: 6px; + background: var(--overlay-background); + color: var(--text-color); + border: 1px solid var(--gray-400); + outline: none; + max-width: 300px; + + &[data-entering] { + animation: modal-zoom 300ms cubic-bezier(0.175, 0.885, 0.32, 1.275); + } + + .react-aria-TextField { + margin-bottom: 8px; + } +} + +@keyframes modal-fade { + from { + opacity: 0; + } + + to { + opacity: 1; + } +} + +@keyframes modal-zoom { + from { + transform: scale(0.8); + } + + to { + transform: scale(1); + } +} + +@keyframes mymodal-blur { + from { + background: rgba(45 0 0 / 0); + backdrop-filter: blur(0); + } + + to { + background: rgba(45 0 0 / .3); + backdrop-filter: blur(10px); + } +} + +@keyframes mymodal-slide { + from { + transform: translateX(100%); + } + + to { + transform: translateX(0); + } +} diff --git a/packages/@react-spectrum/s2/src/Modal.tsx b/packages/@react-spectrum/s2/src/Modal.tsx new file mode 100644 index 00000000000..8482e84a375 --- /dev/null +++ b/packages/@react-spectrum/s2/src/Modal.tsx @@ -0,0 +1,6 @@ +import {Modal as RACModal, ModalOverlayProps} from 'react-aria-components'; +import './Modal.css'; + +export function Modal(props: ModalOverlayProps) { + return ; +} diff --git a/packages/@react-spectrum/s2/src/NumberField.css b/packages/@react-spectrum/s2/src/NumberField.css new file mode 100644 index 00000000000..25806bc1cc1 --- /dev/null +++ b/packages/@react-spectrum/s2/src/NumberField.css @@ -0,0 +1,89 @@ +@import './Button.css'; +@import './Form.css'; +@import "./theme.css"; + +.react-aria-NumberField { + margin-bottom: 8px; + color: var(--text-color); + + .react-aria-Group { + display: flex; + width: fit-content; + border-radius: 4px; + + &[data-focus-within] { + outline: 1px solid var(--focus-ring-color); + .react-aria-Input, + .react-aria-Button { + border-color: var(--focus-ring-color); + } + } + } + + .react-aria-Button { + font-size: 1.4rem; + width: 2.3rem; + padding: 0; + + &[slot=decrement] { + border-start-end-radius: 0; + border-end-end-radius: 0; + } + + &[slot=increment] { + border-start-start-radius: 0; + border-end-start-radius: 0; + } + } + + .react-aria-Input { + background: var(--field-background); + border: 1px solid var(--border-color); + border-radius: 0; + color: var(--field-text-color); + margin: 0 -1px; + z-index: 1; + font-size: 1rem; + padding: 0.429rem 0.571rem; + outline: none; + width: 6rem; + flex: 1; + } + + &[data-invalid] { + .react-aria-Input, + .react-aria-Button { + border-color: var(--invalid-color); + } + + &:focus-within { + .react-aria-Input, + .react-aria-Button { + border-color: var(--focus-ring-color); + } + } + } + + .react-aria-FieldError { + font-size: 12px; + color: var(--invalid-color); + } + + [slot=description] { + font-size: 12px; + } + + .react-aria-Button { + &[data-disabled] { + border-color: var(--border-color-disabled); + color: var(--text-color-disabled); + } + } + + .react-aria-Input { + &[data-disabled] { + border-color: var(--border-color-disabled); + color: var(--text-color-disabled); + } + } +} diff --git a/packages/@react-spectrum/s2/src/NumberField.tsx b/packages/@react-spectrum/s2/src/NumberField.tsx new file mode 100644 index 00000000000..67d553660c9 --- /dev/null +++ b/packages/@react-spectrum/s2/src/NumberField.tsx @@ -0,0 +1,36 @@ +import { + Button, + FieldError, + Group, + Input, + Label, + NumberField as AriaNumberField, + NumberFieldProps as AriaNumberFieldProps, + Text, + ValidationResult +} from 'react-aria-components'; + +import './NumberField.css'; + +export interface NumberFieldProps extends AriaNumberFieldProps { + label?: string; + description?: string; + errorMessage?: string | ((validation: ValidationResult) => string); +} + +export function NumberField( + { label, description, errorMessage, ...props }: NumberFieldProps +) { + return ( + + + + + + + + {description && {description}} + {errorMessage} + + ); +} diff --git a/packages/@react-spectrum/s2/src/Popover.css b/packages/@react-spectrum/s2/src/Popover.css new file mode 100644 index 00000000000..0ada2052871 --- /dev/null +++ b/packages/@react-spectrum/s2/src/Popover.css @@ -0,0 +1,88 @@ +@import './Button.css'; +@import './Dialog.css'; +@import './Switch.css'; +@import "./theme.css"; + +.react-aria-Popover { + --background-color: var(--overlay-background); + + border: 1px solid var(--border-color); + box-shadow: 0 8px 20px rgba(0 0 0 / 0.1); + border-radius: 6px; + background: var(--background-color); + color: var(--text-color); + outline: none; + max-width: 250px; + box-sizing: border-box; + + .react-aria-OverlayArrow svg { + display: block; + fill: var(--background-color); + stroke: var(--border-color); + stroke-width: 1px; + } + + &[data-placement=top] { + --origin: translateY(8px); + + &:has(.react-aria-OverlayArrow) { + margin-bottom: 6px; + } + } + + &[data-placement=bottom] { + --origin: translateY(-8px); + + &:has(.react-aria-OverlayArrow) { + margin-top: 6px; + } + + .react-aria-OverlayArrow svg { + transform: rotate(180deg); + } + } + + &[data-placement=right] { + --origin: translateX(-8px); + + &:has(.react-aria-OverlayArrow) { + margin-left: 6px; + } + + .react-aria-OverlayArrow svg { + transform: rotate(90deg); + } + } + + &[data-placement=left] { + --origin: translateX(8px); + + &:has(.react-aria-OverlayArrow) { + margin-right: 6px; + } + + .react-aria-OverlayArrow svg { + transform: rotate(-90deg); + } + } + + &[data-entering] { + animation: popover-slide 200ms; + } + + &[data-exiting] { + animation: popover-slide 200ms reverse ease-in; + } +} + +@keyframes popover-slide { + from { + transform: var(--origin); + opacity: 0; + } + + to { + transform: translateY(0); + opacity: 1; + } +} diff --git a/packages/@react-spectrum/s2/src/Popover.tsx b/packages/@react-spectrum/s2/src/Popover.tsx new file mode 100644 index 00000000000..df09f070916 --- /dev/null +++ b/packages/@react-spectrum/s2/src/Popover.tsx @@ -0,0 +1,27 @@ +import { + Dialog, + OverlayArrow, + Popover as AriaPopover, + PopoverProps as AriaPopoverProps +} from 'react-aria-components'; + +import './Popover.css'; + +export interface PopoverProps extends Omit { + children: React.ReactNode; +} + +export function Popover({ children, ...props }: PopoverProps) { + return ( + + + + + + + + {children} + + + ); +} diff --git a/packages/@react-spectrum/s2/src/ProgressBar.css b/packages/@react-spectrum/s2/src/ProgressBar.css new file mode 100644 index 00000000000..de35556b806 --- /dev/null +++ b/packages/@react-spectrum/s2/src/ProgressBar.css @@ -0,0 +1,49 @@ +@import "./theme.css"; + +.react-aria-ProgressBar { + display: grid; + grid-template-areas: "label value" + "bar bar"; + grid-template-columns: 1fr auto; + gap: 4px; + width: 250px; + color: var(--text-color); + + .value { + grid-area: value; + } + + .bar { + grid-area: bar; + box-shadow: inset 0px 0px 0px 1px var(--border-color); + forced-color-adjust: none; + height: 10px; + border-radius: 5px; + overflow: hidden; + will-change: transform; + } + + .fill { + background: var(--highlight-background); + height: 100%; + } + + &:not([aria-valuenow]) { + .fill { + width: 120px; + border-radius: inherit; + animation: indeterminate 1.5s infinite ease-in-out; + will-change: transform; + } + } +} + +@keyframes indeterminate { + from { + transform: translateX(-100%); + } + + to { + transform: translateX(250px); + } +} diff --git a/packages/@react-spectrum/s2/src/ProgressBar.tsx b/packages/@react-spectrum/s2/src/ProgressBar.tsx new file mode 100644 index 00000000000..3aa50a41908 --- /dev/null +++ b/packages/@react-spectrum/s2/src/ProgressBar.tsx @@ -0,0 +1,27 @@ +import { + Label, + ProgressBar as AriaProgressBar, + ProgressBarProps as AriaProgressBarProps +} from 'react-aria-components'; + +import './ProgressBar.css'; + +export interface ProgressBarProps extends AriaProgressBarProps { + label?: string; +} + +export function ProgressBar({ label, ...props }: ProgressBarProps) { + return ( + + {({ percentage, valueText }) => ( + <> + + {valueText} +
+
+
+ + )} + + ); +} diff --git a/packages/@react-spectrum/s2/src/RadioGroup.css b/packages/@react-spectrum/s2/src/RadioGroup.css new file mode 100644 index 00000000000..883ce0322ae --- /dev/null +++ b/packages/@react-spectrum/s2/src/RadioGroup.css @@ -0,0 +1,87 @@ +@import './Button.css'; +@import './Form.css'; +@import "./theme.css"; + +.react-aria-RadioGroup { + display: flex; + flex-direction: column; + gap: 8px; + color: var(--text-color); +} + +.react-aria-Radio { + display: flex; + align-items: center; + gap: 0.571rem; + font-size: 1.143rem; + color: var(--text-color); + forced-color-adjust: none; + + &:before { + content: ''; + display: block; + width: 1.286rem; + height: 1.286rem; + box-sizing: border-box; + border: 0.143rem solid var(--border-color); + background: var(--field-background); + border-radius: 1.286rem; + transition: all 200ms; + } + + &[data-pressed]:before { + border-color: var(--border-color-pressed); + } + + &[data-selected] { + &:before { + border-color: var(--highlight-background); + border-width: 0.429rem; + } + + &[data-pressed]:before { + border-color: var(--highlight-background-pressed); + } + } + + &[data-focus-visible]:before { + outline: 2px solid var(--focus-ring-color); + outline-offset: 2px; + } + + &[data-invalid] { + &:before { + border-color: var(--invalid-color); + } + + &[data-pressed]:before { + border-color: var(--invalid-color-pressed); + } + } +} + +.react-aria-RadioGroup { + .react-aria-FieldError { + font-size: 12px; + color: var(--invalid-color); + } + + [slot=description] { + font-size: 12px; + } + + &[data-orientation=horizontal] { + flex-direction: row; + align-items: center; + } +} + +.react-aria-Radio { + &[data-disabled] { + color: var(--text-color-disabled); + + &:before { + border-color: var(--border-color-disabled); + } + } +} diff --git a/packages/@react-spectrum/s2/src/RadioGroup.tsx b/packages/@react-spectrum/s2/src/RadioGroup.tsx new file mode 100644 index 00000000000..a7e52ddf255 --- /dev/null +++ b/packages/@react-spectrum/s2/src/RadioGroup.tsx @@ -0,0 +1,36 @@ +import { + FieldError, + Label, + RadioGroup as AriaRadioGroup, + RadioGroupProps as AriaRadioGroupProps, + Text, + ValidationResult +} from 'react-aria-components'; + +import './RadioGroup.css'; + +export interface RadioGroupProps extends Omit { + children?: React.ReactNode; + label?: string; + description?: string; + errorMessage?: string | ((validation: ValidationResult) => string); +} + +export function RadioGroup( + { + label, + description, + errorMessage, + children, + ...props + }: RadioGroupProps +) { + return ( + + + {children} + {description && {description}} + {errorMessage} + + ); +} diff --git a/packages/@react-spectrum/s2/src/RangeCalendar.css b/packages/@react-spectrum/s2/src/RangeCalendar.css new file mode 100644 index 00000000000..aaa56e392c5 --- /dev/null +++ b/packages/@react-spectrum/s2/src/RangeCalendar.css @@ -0,0 +1,103 @@ +@import './Button.css'; +@import "./theme.css"; + +.react-aria-RangeCalendar { + width: fit-content; + max-width: 100%; + color: var(--text-color); + + & header { + display: flex; + align-items: center; + margin: 0 4px .5rem 4px; + + .react-aria-Heading { + flex: 1; + margin: 0; + text-align: center; + font-size: 1.375rem; + } + } + + .react-aria-Button { + width: 2rem; + height: 2rem; + padding: 0; + } + + & table { + border-collapse: collapse; + + & td { + padding: 2px 0; + } + } + + .react-aria-CalendarCell { + width: 2.286rem; + line-height: 2.286rem; + text-align: center; + border-radius: 6px; + cursor: default; + outline: none; + forced-color-adjust: none; + + &[data-outside-month] { + display: none; + } + + &[data-pressed] { + background: var(--gray-100); + } + + &[data-focus-visible] { + outline: 2px solid var(--highlight-background); + outline-offset: -2px; + } + + &[data-selected] { + background: var(--highlight-background); + color: var(--highlight-foreground); + border-radius: 0; + + &[data-focus-visible] { + outline-color: var(--highlight-foreground); + outline-offset: -3px; + } + } + + &[data-selection-start] { + border-start-start-radius: 6px; + border-end-start-radius: 6px; + } + + &[data-selection-end] { + border-start-end-radius: 6px; + border-end-end-radius: 6px; + } + } + + .react-aria-CalendarCell { + &[data-disabled] { + color: var(--text-color-disabled); + } + } + + .react-aria-CalendarCell { + + &[data-unavailable] { + text-decoration: line-through; + color: var(--invalid-color); + } + + &[data-invalid] { + background: var(--invalid-color); + color: var(--highlight-foreground); + } + } + + [slot=errorMessage] { + font-size: 12px; + color: var(--invalid-color); + } +} diff --git a/packages/@react-spectrum/s2/src/RangeCalendar.tsx b/packages/@react-spectrum/s2/src/RangeCalendar.tsx new file mode 100644 index 00000000000..2ce2aca757c --- /dev/null +++ b/packages/@react-spectrum/s2/src/RangeCalendar.tsx @@ -0,0 +1,35 @@ +import { + Button, + CalendarCell, + CalendarGrid, + DateValue, + Heading, + RangeCalendar as AriaRangeCalendar, + RangeCalendarProps as AriaRangeCalendarProps, + Text +} from 'react-aria-components'; + +import './RangeCalendar.css'; + +export interface RangeCalendarProps + extends AriaRangeCalendarProps { + errorMessage?: string; +} + +export function RangeCalendar( + { errorMessage, ...props }: RangeCalendarProps +) { + return ( + +
+ + + +
+ + {(date) => } + + {errorMessage && {errorMessage}} +
+ ); +} diff --git a/packages/@react-spectrum/s2/src/SearchField.css b/packages/@react-spectrum/s2/src/SearchField.css new file mode 100644 index 00000000000..3045861c1e8 --- /dev/null +++ b/packages/@react-spectrum/s2/src/SearchField.css @@ -0,0 +1,83 @@ +@import './Button.css'; +@import './Form.css'; +@import "./theme.css"; + +.react-aria-SearchField { + display: grid; + grid-template-areas: "label label" + "input button" + "help help"; + grid-template-columns: 1fr auto; + align-items: center; + width: fit-content; + color: var(--text-color); + + .react-aria-Input { + grid-area: input; + padding: 0.286rem 1.714rem 0.286rem 0.286rem; + margin: 0; + border: 1px solid var(--border-color); + border-radius: 6px; + background: var(--field-background); + font-size: 1.143rem; + color: var(--field-text-color); + + &::-webkit-search-cancel-button, + &::-webkit-search-decoration { + -webkit-appearance: none; + } + + &[data-focused] { + outline: 2px solid var(--focus-ring-color); + outline-offset: -1px; + } + } + + .react-aria-Button { + grid-area: button; + width: 1.143rem; + height: 1.143rem; + border-radius: 1.143rem; + margin-left: -1.429rem; + font-size: 0.857rem; + line-height: 0.857rem; + vertical-align: middle; + text-align: center; + background: var(--gray-500); + color: var(--gray-50); + border: none; + padding: 0; + + &[data-pressed] { + background: var(--gray-600); + } + } + + &[data-empty] button { + display: none; + } + + .react-aria-Input{ + &[data-invalid] { + border-color: var(--invalid-color); + } + } + + .react-aria-FieldError { + grid-area: help; + font-size: 12px; + color: var(--invalid-color); + } + + [slot=description] { + grid-area: help; + font-size: 12px; + } + + .react-aria-Input { + &[data-disabled] { + border-color: var(--border-color-disabled); + color: var(--text-color-disabled); + } + } +} diff --git a/packages/@react-spectrum/s2/src/SearchField.tsx b/packages/@react-spectrum/s2/src/SearchField.tsx new file mode 100644 index 00000000000..f7782021673 --- /dev/null +++ b/packages/@react-spectrum/s2/src/SearchField.tsx @@ -0,0 +1,32 @@ +import { + Button, + FieldError, + Input, + Label, + SearchField as AriaSearchField, + SearchFieldProps as AriaSearchFieldProps, + Text, + ValidationResult +} from 'react-aria-components'; + +import './SearchField.css'; + +export interface SearchFieldProps extends AriaSearchFieldProps { + label?: string; + description?: string; + errorMessage?: string | ((validation: ValidationResult) => string); +} + +export function SearchField( + { label, description, errorMessage, ...props }: SearchFieldProps +) { + return ( + + + + + {description && {description}} + {errorMessage} + + ); +} diff --git a/packages/@react-spectrum/s2/src/Select.css b/packages/@react-spectrum/s2/src/Select.css new file mode 100644 index 00000000000..ec6765e2b0b --- /dev/null +++ b/packages/@react-spectrum/s2/src/Select.css @@ -0,0 +1,139 @@ +@import './ListBox.css'; +@import './Popover.css'; +@import './Button.css'; +@import './Form.css'; +@import "./theme.css"; + +.react-aria-Select { + color: var(--text-color); + + .react-aria-Button { + box-shadow: 0 1px 2px rgba(0 0 0 / 0.1); + border-radius: 6px; + font-size: 1.072rem; + padding: 0.286rem 0.286rem 0.286rem 0.571rem; + display: flex; + align-items: center; + max-width: 250px; + + &[data-focus-visible] { + outline: 2px solid var(--focus-ring-color); + outline-offset: -1px; + } + } + + .react-aria-SelectValue { + &[data-placeholder] { + font-style: italic; + color: var(--text-color-placeholder); + } + } + + span[aria-hidden] { + width: 1.5rem; + line-height: 1.375rem; + margin-left: 1rem; + padding: 1px; + background: var(--highlight-background); + color: var(--highlight-foreground); + forced-color-adjust: none; + border-radius: 4px; + font-size: 0.857rem; + } +} + +.react-aria-Popover[data-trigger=Select] { + min-width: var(--trigger-width); + + .react-aria-ListBox { + display: block; + width: unset; + max-height: inherit; + min-height: unset; + border: none; + + .react-aria-Header { + padding-left: 1.571rem; + } + } + + .react-aria-ListBoxItem { + padding: 0.286rem 0.571rem 0.286rem 1.571rem; + + &[data-focus-visible] { + outline: none; + } + + &[data-selected] { + font-weight: 600; + background: unset; + color: var(--text-color); + + &::before { + content: '✓'; + content: '✓' / ''; + alt: ' '; + position: absolute; + top: 4px; + left: 4px; + } + } + + &[data-focused], + &[data-pressed] { + background: var(--highlight-background); + color: var(--highlight-foreground); + } + } +} + +.react-aria-ListBoxItem[href] { + text-decoration: none; + cursor: pointer; +} + +.react-aria-Select { + .react-aria-SelectValue { + [slot=description] { + display: none; + } + } + + .react-aria-Button { + &[data-disabled] { + border-color: var(--border-color-disabled); + color: var(--text-color-disabled); + span[aria-hidden] { + background: var(--border-color-disabled); + color: var(--text-color-disabled); + } + + .react-aria-SelectValue { + &[data-placeholder] { + color: var(--text-color-disabled); + } + } + } + } +} + +@media (forced-colors: active) { + .react-aria-Select { + .react-aria-Button { + &[data-disabled] span[aria-hidden] { + background: 0 0; + } + } + } +} + +.react-aria-Select { + .react-aria-FieldError { + font-size: 12px; + color: var(--invalid-color); + } + + [slot=description] { + font-size: 12px; + } +} diff --git a/packages/@react-spectrum/s2/src/Select.tsx b/packages/@react-spectrum/s2/src/Select.tsx new file mode 100644 index 00000000000..ef43c3c5f39 --- /dev/null +++ b/packages/@react-spectrum/s2/src/Select.tsx @@ -0,0 +1,52 @@ +import { + Button, + FieldError, + Label, + ListBox, + ListBoxItem, + ListBoxItemProps, + Popover, + Select as AriaSelect, + SelectProps as AriaSelectProps, + SelectValue, + Text, + ValidationResult +} from 'react-aria-components'; + +import './Select.css'; + +export interface SelectProps + extends Omit, 'children'> { + label?: string; + description?: string; + errorMessage?: string | ((validation: ValidationResult) => string); + items?: Iterable; + children: React.ReactNode | ((item: T) => React.ReactNode); +} + +export function Select( + { label, description, errorMessage, children, items, ...props }: SelectProps< + T + > +) { + return ( + + + + {description && {description}} + {errorMessage} + + + {children} + + + + ); +} + +export function SelectItem(props: ListBoxItemProps) { + return ; +} diff --git a/packages/@react-spectrum/s2/src/Slider.css b/packages/@react-spectrum/s2/src/Slider.css new file mode 100644 index 00000000000..b1ad753606f --- /dev/null +++ b/packages/@react-spectrum/s2/src/Slider.css @@ -0,0 +1,106 @@ +@import './NumberField.css'; +@import "./theme.css"; + +.react-aria-Slider { + display: grid; + grid-template-areas: "label output" + "track track"; + grid-template-columns: 1fr auto; + max-width: 300px; + color: var(--text-color); + + .react-aria-Label { + grid-area: label; + } + + .react-aria-SliderOutput { + grid-area: output; + } + + .react-aria-SliderTrack { + grid-area: track; + position: relative; + + /* track line */ + &:before { + content: ''; + display: block; + position: absolute; + background: var(--border-color); + } + } + + .react-aria-SliderThumb { + width: 1.429rem; + height: 1.429rem; + border-radius: 50%; + background: var(--highlight-background); + border: 2px solid var(--background-color); + forced-color-adjust: none; + + &[data-dragging] { + background: var(--highlight-background-pressed); + } + + &[data-focus-visible] { + outline: 2px solid var(--focus-ring-color); + } + } + + &[data-orientation=horizontal] { + flex-direction: column; + width: 300px; + + .react-aria-SliderTrack { + height: 30px; + width: 100%; + + &:before { + height: 3px; + width: 100%; + top: 50%; + transform: translateY(-50%); + } + } + + .react-aria-SliderThumb { + top: 50%; + } + } + + &[data-orientation=vertical] { + height: 150px; + display: block; + + .react-aria-Label, + .react-aria-SliderOutput { + display: none; + } + + .react-aria-SliderTrack { + width: 30px; + height: 100%; + + &:before { + width: 3px; + height: 100%; + left: 50%; + transform: translateX(-50%); + } + } + + .react-aria-SliderThumb { + left: 50%; + } + } + + &[data-disabled] { + .react-aria-SliderTrack:before { + background: var(--border-color-disabled); + } + + .react-aria-SliderThumb { + background: var(--border-color-disabled); + } + } +} diff --git a/packages/@react-spectrum/s2/src/Slider.tsx b/packages/@react-spectrum/s2/src/Slider.tsx new file mode 100644 index 00000000000..11b7617fc26 --- /dev/null +++ b/packages/@react-spectrum/s2/src/Slider.tsx @@ -0,0 +1,35 @@ +import { + Label, + Slider as AriaSlider, + SliderOutput, + SliderProps as AriaSliderProps, + SliderThumb, + SliderTrack +} from 'react-aria-components'; + +import './Slider.css'; + +export interface SliderProps extends AriaSliderProps { + label?: string; + thumbLabels?: string[]; +} + +export function Slider( + { label, thumbLabels, ...props }: SliderProps +) { + return ( + + + + {({ state }) => + state.values.map((_, i) => state.getThumbValueLabel(i)).join(' – ')} + + + {({ state }) => + state.values.map((_, i) => ( + + ))} + + + ); +} diff --git a/packages/@react-spectrum/s2/src/Switch.css b/packages/@react-spectrum/s2/src/Switch.css new file mode 100644 index 00000000000..adf5fcbcfc1 --- /dev/null +++ b/packages/@react-spectrum/s2/src/Switch.css @@ -0,0 +1,74 @@ +@import "./theme.css"; + +.react-aria-Switch { + display: flex; + align-items: center; + gap: 0.571rem; + font-size: 1.143rem; + color: var(--text-color); + forced-color-adjust: none; + + .indicator { + width: 2rem; + height: 1.143rem; + border: 2px solid var(--border-color); + background: var(--background-color); + border-radius: 1.143rem; + transition: all 200ms; + + &:before { + content: ''; + display: block; + margin: 0.143rem; + width: 0.857rem; + height: 0.857rem; + background: var(--highlight-background); + border-radius: 16px; + transition: all 200ms; + } + } + + &[data-pressed] .indicator { + border-color: var(--border-color-pressed); + + &:before { + background: var(--highlight-background-pressed); + } + } + + &[data-selected] { + .indicator { + border-color: var(--highlight-background); + background: var(--highlight-background); + + &:before { + background: var(--field-background); + transform: translateX(100%); + } + } + + &[data-pressed] { + .indicator { + border-color: var(--highlight-background-pressed); + background: var(--highlight-background-pressed); + } + } + } + + &[data-focus-visible] .indicator { + outline: 2px solid var(--focus-ring-color); + outline-offset: 2px; + } + + &[data-disabled] { + color: var(--text-color-disabled); + + .indicator { + border-color: var(--border-color-disabled); + + &:before { + background: var(--border-color-disabled); + } + } + } +} diff --git a/packages/@react-spectrum/s2/src/Switch.tsx b/packages/@react-spectrum/s2/src/Switch.tsx new file mode 100644 index 00000000000..929ccc8f998 --- /dev/null +++ b/packages/@react-spectrum/s2/src/Switch.tsx @@ -0,0 +1,19 @@ +import { + Switch as AriaSwitch, + SwitchProps as AriaSwitchProps +} from 'react-aria-components'; + +import './Switch.css'; + +export interface SwitchProps extends Omit { + children: React.ReactNode; +} + +export function Switch({ children, ...props }: SwitchProps) { + return ( + +
+ {children} + + ); +} diff --git a/packages/@react-spectrum/s2/src/Table.css b/packages/@react-spectrum/s2/src/Table.css new file mode 100644 index 00000000000..039d9815360 --- /dev/null +++ b/packages/@react-spectrum/s2/src/Table.css @@ -0,0 +1,272 @@ +@import './Button.css'; +@import './ToggleButton.css'; +@import './Checkbox.css'; +@import './Popover.css'; +@import './Menu.css'; +@import "./theme.css"; + +.react-aria-Table { + padding: 0.286rem; + border: 1px solid var(--border-color); + border-radius: 6px; + background: var(--overlay-background); + outline: none; + border-spacing: 0; + min-height: 100px; + align-self: start; + max-width: 100%; + word-break: break-word; + forced-color-adjust: none; + + &[data-focus-visible] { + outline: 2px solid var(--focus-ring-color); + outline-offset: -1px; + } + + .react-aria-TableHeader { + color: var(--text-color); + + &:after { + content: ''; + display: table-row; + height: 2px; + } + + & tr:last-child .react-aria-Column { + border-bottom: 1px solid var(--border-color); + cursor: default; + } + } + + .react-aria-Row { + --radius-top: 6px; + --radius-bottom: 6px; + --radius: var(--radius-top) var(--radius-top) var(--radius-bottom) var(--radius-bottom); + border-radius: var(--radius); + clip-path: inset(0 round var(--radius)); /* firefox */ + outline: none; + cursor: default; + color: var(--text-color); + font-size: 1.072rem; + position: relative; + transform: scale(1); + + &[data-focus-visible] { + outline: 2px solid var(--focus-ring-color); + outline-offset: -2px; + } + + &[data-pressed] { + background: var(--gray-100); + } + + &[data-selected] { + background: var(--highlight-background); + color: var(--highlight-foreground); + --focus-ring-color: var(--highlight-foreground); + + &[data-focus-visible], + .react-aria-Cell[data-focus-visible] { + outline-offset: -4px; + } + } + + &[data-disabled] { + color: var(--text-color-disabled); + } + } + + .react-aria-Cell, + .react-aria-Column { + padding: 4px 8px; + text-align: left; + outline: none; + + &[data-focus-visible] { + outline: 2px solid var(--focus-ring-color); + outline-offset: -2px; + } + } + + .react-aria-Cell { + transform: translateZ(0); + + &:first-child { + border-radius: var(--radius-top) 0 0 var(--radius-bottom); + } + + &:last-child { + border-radius: 0 var(--radius-top) var(--radius-bottom) 0; + } + } + + /* join selected items if :has selector is supported */ + @supports selector(:has(.foo)) { + .react-aria-Row[data-selected]:has(+ [data-selected]), + .react-aria-Row[data-selected]:has(+ .react-aria-DropIndicator + [data-selected]) { + --radius-bottom: 0px; + } + + .react-aria-Row[data-selected] + [data-selected], + .react-aria-Row[data-selected] + .react-aria-DropIndicator + [data-selected]{ + --radius-top: 0px; + } + } +} + +:where(.react-aria-Row) .react-aria-Checkbox { + --selected-color: var(--highlight-foreground); + --selected-color-pressed: var(--highlight-foreground-pressed); + --checkmark-color: var(--highlight-background); + --background-color: var(--highlight-background); +} + +.react-aria-Row[data-href] { + cursor: pointer; +} + +.react-aria-Column { + .sort-indicator { + padding: 0 2px; + } + + &:not([data-sort-direction]) .sort-indicator { + visibility: hidden; + } + + &[colspan] { + text-align: center; + } +} + +.react-aria-TableBody { + &[data-empty] { + text-align: center; + font-style: italic; + } +} + +.react-aria-ResizableTableContainer { + max-width: 400px; + overflow: auto; + position: relative; + border: 1px solid var(--border-color); + border-radius: 6px; + background: var(--background-color); + + .react-aria-Table { + border: none; + } + + .column-name, + .react-aria-Button { + --background-color: var(--overlay-background); + flex: 1; + font: inherit; + text-align: start; + color: inherit; + overflow: hidden; + text-overflow: ellipsis; + border-color: transparent; + transition: background 200ms; + &[data-hovered] { + background: var(--highlight-hover); + } + + &[data-pressed] { + background: var(--highlight-pressed); + box-shadow: none; + } + + &:focus-visible { + outline: 2px solid var(--focus-ring-color); + } + } + + .react-aria-ColumnResizer { + width: 15px; + background-color: grey; + height: 25px; + flex: 0 0 auto; + touch-action: none; + box-sizing: border-box; + border: 5px; + border-style: none solid; + border-color: transparent; + background-clip: content-box; + + &[data-resizable-direction=both] { + cursor: ew-resize; + } + + &[data-resizable-direction=left] { + cursor: e-resize; + } + + &[data-resizable-direction=right] { + cursor: w-resize; + } + + &[data-focus-visible] { + background-color: var(--focus-ring-color); + } + + &[data-resizing] { + border-color: var(--focus-ring-color); + background-color: transparent; + } + } + + .react-aria-Column, + .react-aria-Cell { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } +} + +.react-aria-Row { + &[data-dragging] { + opacity: 0.6; + transform: translateZ(0); + } + + [slot=drag] { + all: unset; + width: 15px; + text-align: center; + + &[data-focus-visible] { + border-radius: 4px; + outline: 2px solid var(--focus-ring-color); + } + } +} + +.react-aria-DropIndicator[data-drop-target] { + outline: 1px solid var(--highlight-background); + transform: translateZ(0); +} + +.react-aria-Table[data-drop-target] { + outline: 2px solid var(--highlight-background); + outline-offset: -1px; + background: var(--highlight-overlay) +} + +.react-aria-Row[data-drop-target] { + outline: 2px solid var(--highlight-background); + background: var(--highlight-overlay) +} + +.react-aria-DropIndicator[data-drop-target] { + outline: 1px solid var(--highlight-background); + transform: translateZ(0); +} + +.react-aria-Cell img { + height: 30px; + width: 30px; + object-fit: cover; + display: block; +} diff --git a/packages/@react-spectrum/s2/src/Table.tsx b/packages/@react-spectrum/s2/src/Table.tsx new file mode 100644 index 00000000000..e32619b18de --- /dev/null +++ b/packages/@react-spectrum/s2/src/Table.tsx @@ -0,0 +1,83 @@ +import { + Button, + Cell, + Collection, + Column as AriaColumn, + ColumnProps, + Row as AriaRow, + RowProps, + Table as AriaTable, + TableHeader as AriaTableHeader, + TableHeaderProps, + TableProps, + useTableOptions +} from 'react-aria-components'; + +import {Checkbox} from './Checkbox'; +import './Table.css'; + +export function Table(props: TableProps) { + return ; +} + +export function Column(props: ColumnProps) { + return ( + + {({ allowsSorting, sortDirection }) => ( + <> + {props.children} + {allowsSorting && ( + + )} + + )} + + ); +} + +export function TableHeader( + { columns, children }: TableHeaderProps +) { + let { selectionBehavior, selectionMode, allowsDragging } = useTableOptions(); + + return ( + + {/* Add extra columns for drag and drop and selection. */} + {allowsDragging && } + {selectionBehavior === 'toggle' && ( + + {selectionMode === 'multiple' && } + + )} + + {children} + + + ); +} + +export function Row( + { id, columns, children, ...otherProps }: RowProps +) { + let { selectionBehavior, allowsDragging } = useTableOptions(); + + return ( + + {allowsDragging && ( + + + + )} + {selectionBehavior === 'toggle' && ( + + + + )} + + {children} + + + ); +} diff --git a/packages/@react-spectrum/s2/src/Tabs.css b/packages/@react-spectrum/s2/src/Tabs.css new file mode 100644 index 00000000000..c18b5f8f792 --- /dev/null +++ b/packages/@react-spectrum/s2/src/Tabs.css @@ -0,0 +1,102 @@ +@import './Button.css'; +@import './Link.css'; +@import "./theme.css"; + +.react-aria-Tabs { + display: flex; + color: var(--text-color); + + &[data-orientation=horizontal] { + flex-direction: column; + } +} + +.react-aria-TabList { + display: flex; + + &[data-orientation=horizontal] { + border-bottom: 1px solid var(--border-color); + + .react-aria-Tab { + border-bottom: 3px solid var(--border-color); + } + } +} + +.react-aria-Tab { + padding: 10px; + cursor: default; + outline: none; + position: relative; + color: var(--text-color-base); + transition: color 200ms; + --border-color: transparent; + forced-color-adjust: none; + + &[data-hovered], + &[data-focused] { + color: var(--text-color-hover); + } + + &[data-selected] { + --border-color: var(--highlight-background); + color: var(--text-color); + } + + &[data-disabled] { + color: var(--text-color-disabled); + &[data-selected] { + --border-color: var(--text-color-disabled); + } + } + + &[data-focus-visible]:after { + content: ''; + position: absolute; + inset: 4px; + border-radius: 4px; + border: 2px solid var(--focus-ring-color); + } +} + +.react-aria-TabPanel { + margin-top: 4px; + padding: 10px; + border-radius: 4px; + outline: none; + + &[data-focus-visible] { + outline: 2px solid var(--focus-ring-color); + } +} + +.react-aria-Tabs { + &[data-orientation=vertical] { + flex-direction: row; + } +} + +.react-aria-TabList { + &[data-orientation=vertical] { + flex-direction: column; + border-inline-end: 1px solid gray; + + .react-aria-Tab { + border-inline-end: 3px solid var(--border-color, transparent); + } + } +} + +.react-aria-Tab { + &[data-disabled] { + color: var(--text-color-disabled); + &[data-selected] { + --border-color: var(--border-color-disabled); + } + } +} + +.react-aria-Tab[href] { + text-decoration: none; + cursor: pointer; +} diff --git a/packages/@react-spectrum/s2/src/Tabs.tsx b/packages/@react-spectrum/s2/src/Tabs.tsx new file mode 100644 index 00000000000..30476ffd145 --- /dev/null +++ b/packages/@react-spectrum/s2/src/Tabs.tsx @@ -0,0 +1,6 @@ +import {Tabs as RACTabs, TabsProps} from 'react-aria-components'; +import './Tabs.css'; + +export function Tabs(props: TabsProps) { + return ; +} diff --git a/packages/@react-spectrum/s2/src/TagGroup.css b/packages/@react-spectrum/s2/src/TagGroup.css new file mode 100644 index 00000000000..62f84b23ea2 --- /dev/null +++ b/packages/@react-spectrum/s2/src/TagGroup.css @@ -0,0 +1,91 @@ +@import './ToggleButton.css'; +@import "./theme.css"; + +.react-aria-TagGroup { + display: flex; + flex-direction: column; + gap: 2px; + font-size: small; + color: var(--text-color); +} + +.react-aria-TagList { + display: flex; + flex-wrap: wrap; + gap: 4px; +} + +.react-aria-Tag { + color: var(--text-color); + border: 1px solid var(--border-color); + forced-color-adjust: none; + border-radius: 4px; + padding: 2px 8px; + font-size: 0.929rem; + outline: none; + cursor: default; + display: flex; + align-items: center; + transition: border-color 200ms; + + &[data-hovered] { + border-color: var(--border-color-hover); + } + + &[data-focus-visible] { + outline: 2px solid var(--focus-ring-color); + outline-offset: 2px; + } + + &[data-selected] { + border-color: var(--highlight-background); + background: var(--highlight-background); + color: var(--highlight-foreground); + } + + [slot=remove] { + background: none; + border: none; + padding: 0; + margin-left: 8px; + color: var(--text-color-base); + transition: color 200ms; + outline: none; + font-size: 0.95em; + + &[data-hovered] { + color: var(--text-color-hover); + } + } + + &[data-selected] { + [slot=remove] { + color: inherit; + } + } +} + +.react-aria-Tag[data-href] { + text-decoration: none; + cursor: pointer; +} + +.react-aria-TagList { + .react-aria-Tag { + &[data-disabled] { + border-color: var(--border-color-disabled); + color: var(--text-color-disabled); + } + } +} + +.react-aria-TagGroup { + [slot=description] { + font-size: 12px; + } + + [slot=errorMessage] { + font-size: 12px; + color: var(--invalid-color); + } +} diff --git a/packages/@react-spectrum/s2/src/TagGroup.tsx b/packages/@react-spectrum/s2/src/TagGroup.tsx new file mode 100644 index 00000000000..6e5f159867e --- /dev/null +++ b/packages/@react-spectrum/s2/src/TagGroup.tsx @@ -0,0 +1,59 @@ +import { + Button, + Label, + Tag as AriaTag, + TagGroup as AriaTagGroup, + TagGroupProps as AriaTagGroupProps, + TagList, + TagListProps, + TagProps, + Text +} from 'react-aria-components'; + +import './TagGroup.css'; + +export interface TagGroupProps + extends + Omit, + Pick, 'items' | 'children' | 'renderEmptyState'> { + label?: string; + description?: string; + errorMessage?: string; +} + +export function TagGroup( + { + label, + description, + errorMessage, + items, + children, + renderEmptyState, + ...props + }: TagGroupProps +) { + return ( + + + + {children} + + {description && {description}} + {errorMessage && {errorMessage}} + + ); +} + +export function Tag({ children, ...props }: TagProps) { + let textValue = typeof children === 'string' ? children : undefined; + return ( + + {({ allowsRemoving }) => ( + <> + {children} + {allowsRemoving && } + + )} + + ); +} diff --git a/packages/@react-spectrum/s2/src/TextField.css b/packages/@react-spectrum/s2/src/TextField.css new file mode 100644 index 00000000000..1a84e2d89bb --- /dev/null +++ b/packages/@react-spectrum/s2/src/TextField.css @@ -0,0 +1,49 @@ +@import './Button.css'; +@import "./theme.css"; + +.react-aria-TextField { + display: flex; + flex-direction: column; + width: fit-content; + color: var(--text-color); + + .react-aria-Input, + .react-aria-TextArea { + padding: 0.286rem; + margin: 0; + border: 1px solid var(--border-color); + border-radius: 6px; + background: var(--field-background); + font-size: 1.143rem; + color: var(--field-text-color); + + &[data-focused] { + outline: 2px solid var(--focus-ring-color); + outline-offset: -1px; + } + } + + .react-aria-Input, + .react-aria-TextArea { + &[data-invalid] { + border-color: var(--invalid-color); + } + } + + .react-aria-FieldError { + font-size: 12px; + color: var(--invalid-color); + } + + [slot=description] { + font-size: 12px; + } + + .react-aria-Input, + .react-aria-TextArea { + &[data-disabled] { + border-color: var(--border-color-disabled); + color: var(--text-color-disabled); + } + } +} diff --git a/packages/@react-spectrum/s2/src/TextField.tsx b/packages/@react-spectrum/s2/src/TextField.tsx new file mode 100644 index 00000000000..a5141455831 --- /dev/null +++ b/packages/@react-spectrum/s2/src/TextField.tsx @@ -0,0 +1,30 @@ +import { + FieldError, + Input, + Label, + Text, + TextField as AriaTextField, + TextFieldProps as AriaTextFieldProps, + ValidationResult +} from 'react-aria-components'; + +import './TextField.css'; + +export interface TextFieldProps extends AriaTextFieldProps { + label?: string; + description?: string; + errorMessage?: string | ((validation: ValidationResult) => string); +} + +export function TextField( + { label, description, errorMessage, ...props }: TextFieldProps +) { + return ( + + + + {description && {description}} + {errorMessage} + + ); +} diff --git a/packages/@react-spectrum/s2/src/TimeField.css b/packages/@react-spectrum/s2/src/TimeField.css new file mode 100644 index 00000000000..4d75dc392d6 --- /dev/null +++ b/packages/@react-spectrum/s2/src/TimeField.css @@ -0,0 +1,68 @@ +@import './Form.css'; +@import './Button.css'; +@import "./theme.css"; + +.react-aria-TimeField { + color: var(--text-color); +} + +.react-aria-DateInput { + display: flex; + padding: 4px; + border: 1px solid var(--border-color); + border-radius: 6px; + background: var(--field-background); + width: fit-content; + min-width: 150px; + white-space: nowrap; + forced-color-adjust: none; + + &[data-focus-within] { + outline: 2px solid var(--focus-ring-color); + outline-offset: -1px; + } +} + +.react-aria-DateSegment { + padding: 0 2px; + font-variant-numeric: tabular-nums; + text-align: end; + color: var(--text-color); + + &[data-type=literal] { + padding: 0; + } + + &[data-placeholder] { + color: var(--text-color-placeholder); + font-style: italic; + } + + &:focus { + color: var(--highlight-foreground); + background: var(--highlight-background); + outline: none; + border-radius: 4px; + caret-color: transparent; + } + + &[data-invalid] { + color: var(--invalid-color); + + &:focus { + background: var(--highlight-background-invalid); + color: var(--highlight-foreground); + } + } +} + +.react-aria-TimeField { + .react-aria-FieldError { + font-size: 12px; + color: var(--invalid-color); + } + + [slot=description] { + font-size: 12px; + } +} diff --git a/packages/@react-spectrum/s2/src/TimeField.tsx b/packages/@react-spectrum/s2/src/TimeField.tsx new file mode 100644 index 00000000000..2b3e7dfe447 --- /dev/null +++ b/packages/@react-spectrum/s2/src/TimeField.tsx @@ -0,0 +1,35 @@ +import { + DateInput, + DateSegment, + FieldError, + Label, + Text, + TimeField as AriaTimeField, + TimeFieldProps as AriaTimeFieldProps, + TimeValue, + ValidationResult +} from 'react-aria-components'; + +import './TimeField.css'; + +export interface TimeFieldProps + extends AriaTimeFieldProps { + label?: string; + description?: string; + errorMessage?: string | ((validation: ValidationResult) => string); +} + +export function TimeField( + { label, description, errorMessage, ...props }: TimeFieldProps +) { + return ( + + + + {(segment) => } + + {description && {description}} + {errorMessage} + + ); +} diff --git a/packages/@react-spectrum/s2/src/ToggleButton.css b/packages/@react-spectrum/s2/src/ToggleButton.css new file mode 100644 index 00000000000..00a88ea2607 --- /dev/null +++ b/packages/@react-spectrum/s2/src/ToggleButton.css @@ -0,0 +1,44 @@ +@import "./theme.css"; + +.react-aria-ToggleButton { + color: var(--text-color); + background: var(--button-background); + border: 1px solid var(--border-color); + forced-color-adjust: none; + border-radius: 4px; + appearance: none; + vertical-align: middle; + font-size: 1rem; + text-align: center; + margin: 0; + outline: none; + padding: 6px 10px; + + &[data-pressed] { + box-shadow: inset 0 1px 2px rgb(0 0 0 / 0.1); + background: var(--button-background-pressed); + border-color: var(--border-color-pressed); + } + + &[data-selected] { + background: var(--highlight-background); + border-color: var(--highlight-background); + color: var(--highlight-foreground); + + &[data-pressed] { + background: var(--highlight-background-pressed); + border-color: var(--highlight-background-pressed); + } + } + + &[data-focus-visible] { + outline: 2px solid var(--focus-ring-color); + outline-offset: 2px; + } + + &[data-disabled] { + border-color: var(--border-color-disabled); + background: var(--button-background); + color: var(--text-color-disabled); + } +} diff --git a/packages/@react-spectrum/s2/src/ToggleButton.tsx b/packages/@react-spectrum/s2/src/ToggleButton.tsx new file mode 100644 index 00000000000..d1caaafc76e --- /dev/null +++ b/packages/@react-spectrum/s2/src/ToggleButton.tsx @@ -0,0 +1,6 @@ +import {ToggleButton as RACToggleButton, ToggleButtonProps} from 'react-aria-components'; +import './ToggleButton.css'; + +export function ToggleButton(props: ToggleButtonProps) { + return ; +} diff --git a/packages/@react-spectrum/s2/src/Toolbar.css b/packages/@react-spectrum/s2/src/Toolbar.css new file mode 100644 index 00000000000..7b8ea5bb7d6 --- /dev/null +++ b/packages/@react-spectrum/s2/src/Toolbar.css @@ -0,0 +1,50 @@ +@import './Checkbox.css'; +@import './Button.css'; +@import './ToggleButton.css'; +@import "./theme.css"; + +.react-aria-Toolbar { + display: flex; + flex-wrap: wrap; + gap: 5px; + + &[data-orientation=horizontal] { + flex-direction: row; + } + + .react-aria-Group { + display: contents; + } + + .react-aria-ToggleButton { + width: 32px; + } +} + +.react-aria-Separator { + align-self: stretch; + background-color: var(--border-color); + + &[aria-orientation=vertical] { + width: 1px; + margin: 0px 10px; + } +} + +.react-aria-Toolbar { + width: fit-content; + + &[data-orientation=vertical] { + flex-direction: column; + align-items: start; + } +} + +.react-aria-Separator { + &:not([aria-orientation=vertical]) { + border: none; + height: 1px; + width: 100%; + margin: 10px 0; + } +} diff --git a/packages/@react-spectrum/s2/src/Toolbar.tsx b/packages/@react-spectrum/s2/src/Toolbar.tsx new file mode 100644 index 00000000000..6d15483a716 --- /dev/null +++ b/packages/@react-spectrum/s2/src/Toolbar.tsx @@ -0,0 +1,6 @@ +import {Toolbar as RACToolbar, ToolbarProps} from 'react-aria-components'; +import './Toolbar.css'; + +export function Toolbar(props: ToolbarProps) { + return ; +} diff --git a/packages/@react-spectrum/s2/src/Tooltip.css b/packages/@react-spectrum/s2/src/Tooltip.css new file mode 100644 index 00000000000..2b6d385342f --- /dev/null +++ b/packages/@react-spectrum/s2/src/Tooltip.css @@ -0,0 +1,69 @@ +@import './Button.css'; +@import "./theme.css"; + +.react-aria-Tooltip { + box-shadow: 0 8px 20px rgba(0 0 0 / 0.1); + border-radius: 4px; + background: var(--highlight-background); + color: var(--highlight-foreground); + forced-color-adjust: none; + outline: none; + padding: 2px 8px; + max-width: 150px; + /* fixes FF gap */ + transform: translate3d(0, 0, 0); + + &[data-placement=top] { + margin-bottom: 8px; + --origin: translateY(4px); + } + + &[data-placement=bottom] { + margin-top: 8px; + --origin: translateY(-4px); + & .react-aria-OverlayArrow svg { + transform: rotate(180deg); + } + } + + &[data-placement=right] { + margin-left: 8px; + --origin: translateX(-4px); + & .react-aria-OverlayArrow svg { + transform: rotate(90deg); + } + } + + &[data-placement=left] { + margin-right: 8px; + --origin: translateX(4px); + & .react-aria-OverlayArrow svg { + transform: rotate(-90deg); + } + } + + & .react-aria-OverlayArrow svg { + display: block; + fill: var(--highlight-background); + } + + &[data-entering] { + animation: slide 200ms; + } + + &[data-exiting] { + animation: slide 200ms reverse ease-in; + } +} + +@keyframes slide { + from { + transform: var(--origin); + opacity: 0; + } + + to { + transform: translateY(0); + opacity: 1; + } +} diff --git a/packages/@react-spectrum/s2/src/Tooltip.tsx b/packages/@react-spectrum/s2/src/Tooltip.tsx new file mode 100644 index 00000000000..8e7f5eb7cd8 --- /dev/null +++ b/packages/@react-spectrum/s2/src/Tooltip.tsx @@ -0,0 +1,24 @@ +import { + OverlayArrow, + Tooltip as AriaTooltip, + TooltipProps as AriaTooltipProps +} from 'react-aria-components'; + +import './Tooltip.css'; + +export interface TooltipProps extends Omit { + children: React.ReactNode; +} + +export function Tooltip({ children, ...props }: TooltipProps) { + return ( + + + + + + + {children} + + ); +} diff --git a/packages/@react-spectrum/s2/src/theme.css b/packages/@react-spectrum/s2/src/theme.css new file mode 100644 index 00000000000..23dab3f8eff --- /dev/null +++ b/packages/@react-spectrum/s2/src/theme.css @@ -0,0 +1,127 @@ +/* Base styles */ +:root { + font-family: system-ui; + font-size: 14px; + line-height: 1.5; + background: var(--background-color); +} + +/* color themes for dark and light modes, generated with Leonardo. + * Light: https://leonardocolor.io/theme.html?name=Light&config=%7B%22baseScale%22%3A%22Gray%22%2C%22colorScales%22%3A%5B%7B%22name%22%3A%22Gray%22%2C%22colorKeys%22%3A%5B%22%23000000%22%5D%2C%22colorspace%22%3A%22RGB%22%2C%22ratios%22%3A%5B%22-1.12%22%2C%221.45%22%2C%222.05%22%2C%223.02%22%2C%224.54%22%2C%227%22%2C%2210.86%22%5D%2C%22smooth%22%3Afalse%7D%2C%7B%22name%22%3A%22Purple%22%2C%22colorKeys%22%3A%5B%22%235e30eb%22%5D%2C%22colorspace%22%3A%22RGB%22%2C%22ratios%22%3A%5B%22-1.12%22%2C%221.45%22%2C%222.05%22%2C%223.02%22%2C%224.54%22%2C%227%22%2C%2210.86%22%5D%2C%22smooth%22%3Afalse%7D%2C%7B%22name%22%3A%22Red%22%2C%22colorKeys%22%3A%5B%22%23e32400%22%5D%2C%22colorspace%22%3A%22RGB%22%2C%22ratios%22%3A%5B%22-1.12%22%2C%221.45%22%2C%222.05%22%2C%223.02%22%2C%224.54%22%2C%227%22%2C%2210.86%22%5D%2C%22smooth%22%3Afalse%7D%5D%2C%22lightness%22%3A98%2C%22contrast%22%3A1%2C%22saturation%22%3A100%2C%22formula%22%3A%22wcag2%22%7D */ +:root { + --background-color: #f8f8f8; + --gray-50: #ffffff; + --gray-100: #d0d0d0; + --gray-200: #afafaf; + --gray-300: #8f8f8f; + --gray-400: #717171; + --gray-500: #555555; + --gray-600: #393939; + --purple-100: #d5c9fa; + --purple-200: #b8a3f6; + --purple-300: #997cf2; + --purple-400: #7a54ef; + --purple-500: #582ddc; + --purple-600: #3c1e95; + --red-100: #f7c4ba; + --red-200: #f29887; + --red-300: #eb664d; + --red-400: #de2300; + --red-500: #a81b00; + --red-600: #731200; + --highlight-hover: rgb(0 0 0 / 0.07); + --highlight-pressed: rgb(0 0 0 / 0.15); +} + +/* Dark: https://leonardocolor.io/theme.html?name=Dark&config=%7B%22baseScale%22%3A%22Gray%22%2C%22colorScales%22%3A%5B%7B%22name%22%3A%22Gray%22%2C%22colorKeys%22%3A%5B%22%23000000%22%5D%2C%22colorspace%22%3A%22RGB%22%2C%22ratios%22%3A%5B%22-1.12%22%2C%221.45%22%2C%222.05%22%2C%223.02%22%2C%224.54%22%2C%227%22%2C%2210.86%22%5D%2C%22smooth%22%3Afalse%7D%2C%7B%22name%22%3A%22Purple%22%2C%22colorKeys%22%3A%5B%22%235e30eb%22%5D%2C%22colorspace%22%3A%22RGB%22%2C%22ratios%22%3A%5B%22-1.12%22%2C%221.45%22%2C%222.05%22%2C%223.02%22%2C%224.54%22%2C%227%22%2C%2210.86%22%5D%2C%22smooth%22%3Afalse%7D%2C%7B%22name%22%3A%22Red%22%2C%22colorKeys%22%3A%5B%22%23e32400%22%5D%2C%22colorspace%22%3A%22RGB%22%2C%22ratios%22%3A%5B%22-1.12%22%2C%221.45%22%2C%222.05%22%2C%223.02%22%2C%224.54%22%2C%227%22%2C%2210.86%22%5D%2C%22smooth%22%3Afalse%7D%5D%2C%22lightness%22%3A11%2C%22contrast%22%3A1%2C%22saturation%22%3A100%2C%22formula%22%3A%22wcag2%22%7D */ +@media (prefers-color-scheme: dark) { + :root { + --background-color: #1d1d1d; + --gray-50: #101010; + --gray-100: #393939; + --gray-200: #4f4f4f; + --gray-300: #686868; + --gray-400: #848484; + --gray-500: #a7a7a7; + --gray-600: #cfcfcf; + --purple-100: #3c1e95; + --purple-200: #522acd; + --purple-300: #6f46ed; + --purple-400: #8e6ef1; + --purple-500: #b099f5; + --purple-600: #d5c8fa; + --red-100: #721200; + --red-200: #9c1900; + --red-300: #cc2000; + --red-400: #e95034; + --red-500: #f08c79; + --red-600: #f7c3ba; + --highlight-hover: rgb(255 255 255 / 0.1); + --highlight-pressed: rgb(255 255 255 / 0.2); + } +} + +/* Semantic colors */ +:root { + --focus-ring-color: var(--purple-400); + --text-color: var(--gray-600); + --text-color-base: var(--gray-500); + --text-color-hover: var(--gray-600); + --text-color-disabled: var(--gray-200); + --text-color-placeholder: var(--gray-400); + --link-color: var(--purple-500); + --link-color-secondary: var(--gray-500); + --link-color-pressed: var(--purple-600); + --border-color: var(--gray-300); + --border-color-hover: var(--gray-400); + --border-color-pressed: var(--gray-400); + --border-color-disabled: var(--gray-100); + --field-background: var(--gray-50); + --field-text-color: var(--gray-600); + --overlay-background: var(--gray-50); + --button-background: var(--gray-50); + --button-background-pressed: var(--background-color); + /* these colors are the same between light and dark themes + * to ensure contrast with the foreground color */ + --highlight-background: #6f46ed; /* purple-300 from dark theme, 3.03:1 against background-color */ + --highlight-background-pressed: #522acd; /* purple-200 from dark theme */ + --highlight-background-invalid: #cc2000; /* red-300 from dark theme */ + --highlight-foreground: white; /* 5.56:1 against highlight-background */ + --highlight-foreground-pressed: #ddd; + --highlight-overlay: rgb(from #6f46ed r g b / 15%); + --invalid-color: var(--red-400); + --invalid-color-pressed: var(--red-500); +} + +/* Windows high contrast mode overrides */ +@media (forced-colors: active) { + :root { + --background-color: Canvas; + --focus-ring-color: Highlight; + --text-color: ButtonText; + --text-color-base: ButtonText; + --text-color-hover: ButtonText; + --text-color-disabled: GrayText; + --text-color-placeholder: ButtonText; + --link-color: LinkText; + --link-color-secondary: LinkText; + --link-color-pressed: LinkText; + --border-color: ButtonBorder; + --border-color-hover: ButtonBorder; + --border-color-pressed: ButtonBorder; + --border-color-disabled: GrayText; + --field-background: Field; + --field-text-color: FieldText; + --overlay-background: Canvas; + --button-background: ButtonFace; + --button-background-pressed: ButtonFace; + --highlight-background: Highlight; + --highlight-background-pressed: Highlight; + --highlight-background-invalid: LinkText; + --highlight-foreground: HighlightText; + --highlight-foreground-pressed: HighlightText; + --invalid-color: LinkText; + --invalid-color-pressed: LinkText; + } +} + diff --git a/packages/@react-spectrum/s2/stories/Breadcrumbs.stories.tsx b/packages/@react-spectrum/s2/stories/Breadcrumbs.stories.tsx new file mode 100644 index 00000000000..a64d2bf7aef --- /dev/null +++ b/packages/@react-spectrum/s2/stories/Breadcrumbs.stories.tsx @@ -0,0 +1,28 @@ +import {Breadcrumbs} from '../src/Breadcrumbs'; +import {Breadcrumb, Link} from 'react-aria-components'; + +import type {Meta} from '@storybook/react'; + +const meta: Meta = { + component: Breadcrumbs, + parameters: { + layout: 'centered' + }, + tags: ['autodocs'] +}; + +export default meta; + +export const Example = (args: any) => ( + + + Home + + + React Aria + + + Breadcrumbs + + +); diff --git a/packages/@react-spectrum/s2/stories/Button.stories.tsx b/packages/@react-spectrum/s2/stories/Button.stories.tsx new file mode 100644 index 00000000000..ae493195070 --- /dev/null +++ b/packages/@react-spectrum/s2/stories/Button.stories.tsx @@ -0,0 +1,19 @@ +import {Button} from '../src/Button'; + +import type {Meta} from '@storybook/react'; + +const meta: Meta = { + component: Button, + parameters: { + layout: 'centered' + }, + tags: ['autodocs'] +}; + +export default meta; + +export const Example = (args: any) => ; + +Example.args = { + onPress: () => alert('Hello world!') +}; diff --git a/packages/@react-spectrum/s2/stories/Calendar.stories.tsx b/packages/@react-spectrum/s2/stories/Calendar.stories.tsx new file mode 100644 index 00000000000..c8ff950cd22 --- /dev/null +++ b/packages/@react-spectrum/s2/stories/Calendar.stories.tsx @@ -0,0 +1,17 @@ +import {Calendar} from '../src/Calendar'; + +import type {Meta} from '@storybook/react'; + +const meta: Meta = { + component: Calendar, + parameters: { + layout: 'centered' + }, + tags: ['autodocs'] +}; + +export default meta; + +export const Example = (args: any) => ( + +); diff --git a/packages/@react-spectrum/s2/stories/Checkbox.stories.tsx b/packages/@react-spectrum/s2/stories/Checkbox.stories.tsx new file mode 100644 index 00000000000..626d27b0baa --- /dev/null +++ b/packages/@react-spectrum/s2/stories/Checkbox.stories.tsx @@ -0,0 +1,16 @@ +import {Checkbox} from '../src/Checkbox'; + +import type {Meta} from '@storybook/react'; + +const meta: Meta = { + component: Checkbox, + parameters: { + layout: 'centered' + }, + tags: ['autodocs'] +}; + +export default meta; + +export const Example = (args: any) => Unsubscribe +; diff --git a/packages/@react-spectrum/s2/stories/CheckboxGroup.stories.tsx b/packages/@react-spectrum/s2/stories/CheckboxGroup.stories.tsx new file mode 100644 index 00000000000..d0fc3b4ff4a --- /dev/null +++ b/packages/@react-spectrum/s2/stories/CheckboxGroup.stories.tsx @@ -0,0 +1,26 @@ +import {Checkbox} from '../src/Checkbox'; +import {CheckboxGroup} from '../src/CheckboxGroup'; + +import type {Meta} from '@storybook/react'; + +const meta: Meta = { + component: CheckboxGroup, + parameters: { + layout: 'centered' + }, + tags: ['autodocs'] +}; + +export default meta; + +export const Example = (args: any) => ( + + Soccer + Baseball + Basketball + +); + +Example.args = { + label: 'Favorite sports' +}; diff --git a/packages/@react-spectrum/s2/stories/ComboBox.stories.tsx b/packages/@react-spectrum/s2/stories/ComboBox.stories.tsx new file mode 100644 index 00000000000..52ef8fdc72e --- /dev/null +++ b/packages/@react-spectrum/s2/stories/ComboBox.stories.tsx @@ -0,0 +1,26 @@ +import {ComboBox, ComboBoxItem} from '../src/ComboBox'; + +import type {Meta} from '@storybook/react'; + +const meta: Meta = { + component: ComboBox, + parameters: { + layout: 'centered' + }, + tags: ['autodocs'] +}; + +export default meta; + +export const Example = (args: any) => ( + + Chocolate + Mint + Strawberry + Vanilla + +); + +Example.args = { + label: 'Ice cream flavor' +}; diff --git a/packages/@react-spectrum/s2/stories/DateField.stories.tsx b/packages/@react-spectrum/s2/stories/DateField.stories.tsx new file mode 100644 index 00000000000..d6515c798d8 --- /dev/null +++ b/packages/@react-spectrum/s2/stories/DateField.stories.tsx @@ -0,0 +1,19 @@ +import {DateField} from '../src/DateField'; + +import type {Meta} from '@storybook/react'; + +const meta: Meta = { + component: DateField, + parameters: { + layout: 'centered' + }, + tags: ['autodocs'] +}; + +export default meta; + +export const Example = (args: any) => ; + +Example.args = { + label: 'Event date' +}; diff --git a/packages/@react-spectrum/s2/stories/DatePicker.stories.tsx b/packages/@react-spectrum/s2/stories/DatePicker.stories.tsx new file mode 100644 index 00000000000..445bff49949 --- /dev/null +++ b/packages/@react-spectrum/s2/stories/DatePicker.stories.tsx @@ -0,0 +1,19 @@ +import {DatePicker} from '../src/DatePicker'; + +import type {Meta} from '@storybook/react'; + +const meta: Meta = { + component: DatePicker, + parameters: { + layout: 'centered' + }, + tags: ['autodocs'] +}; + +export default meta; + +export const Example = (args: any) => ; + +Example.args = { + label: 'Event date' +}; diff --git a/packages/@react-spectrum/s2/stories/DateRangePicker.stories.tsx b/packages/@react-spectrum/s2/stories/DateRangePicker.stories.tsx new file mode 100644 index 00000000000..4b19bc7bf92 --- /dev/null +++ b/packages/@react-spectrum/s2/stories/DateRangePicker.stories.tsx @@ -0,0 +1,19 @@ +import {DateRangePicker} from '../src/DateRangePicker'; + +import type {Meta} from '@storybook/react'; + +const meta: Meta = { + component: DateRangePicker, + parameters: { + layout: 'centered' + }, + tags: ['autodocs'] +}; + +export default meta; + +export const Example = (args: any) => ; + +Example.args = { + label: 'Event date' +}; diff --git a/packages/@react-spectrum/s2/stories/Dialog.stories.tsx b/packages/@react-spectrum/s2/stories/Dialog.stories.tsx new file mode 100644 index 00000000000..5478ef2a2db --- /dev/null +++ b/packages/@react-spectrum/s2/stories/Dialog.stories.tsx @@ -0,0 +1,48 @@ +import {Dialog} from '../src/Dialog'; +import { + Button, + DialogTrigger, + Heading, + Input, + Label, + Modal, + TextField +} from 'react-aria-components'; + +import type {Meta} from '@storybook/react'; + +const meta: Meta = { + component: Dialog, + parameters: { + layout: 'centered' + }, + tags: ['autodocs'] +}; + +export default meta; + +export const Example = (args: any) => ( + + + + + {({ close }) => ( +
+ Sign up + + + + + + + + + +
+ )} +
+
+
+); diff --git a/packages/@react-spectrum/s2/stories/Form.stories.tsx b/packages/@react-spectrum/s2/stories/Form.stories.tsx new file mode 100644 index 00000000000..c823e9d841b --- /dev/null +++ b/packages/@react-spectrum/s2/stories/Form.stories.tsx @@ -0,0 +1,31 @@ +import {Form} from '../src/Form'; +import { + Button, + FieldError, + Input, + Label, + TextField +} from 'react-aria-components'; + +import type {Meta} from '@storybook/react'; + +const meta: Meta = { + component: Form, + parameters: { + layout: 'centered' + }, + tags: ['autodocs'] +}; + +export default meta; + +export const Example = (args: any) => ( +
+ + + + + + +
+); diff --git a/packages/@react-spectrum/s2/stories/GridList.stories.tsx b/packages/@react-spectrum/s2/stories/GridList.stories.tsx new file mode 100644 index 00000000000..98782ab66fd --- /dev/null +++ b/packages/@react-spectrum/s2/stories/GridList.stories.tsx @@ -0,0 +1,27 @@ +import {GridList, GridListItem} from '../src/GridList'; + +import type {Meta} from '@storybook/react'; + +const meta: Meta = { + component: GridList, + parameters: { + layout: 'centered' + }, + tags: ['autodocs'] +}; + +export default meta; + +export const Example = (args: any) => ( + + Chocolate + Mint + Strawberry + Vanilla + +); + +Example.args = { + onAction: null, + selectionMode: 'multiple' +}; diff --git a/packages/@react-spectrum/s2/stories/Link.stories.tsx b/packages/@react-spectrum/s2/stories/Link.stories.tsx new file mode 100644 index 00000000000..2a702d2564d --- /dev/null +++ b/packages/@react-spectrum/s2/stories/Link.stories.tsx @@ -0,0 +1,24 @@ +import {Link} from '../src/Link'; + +import type {Meta} from '@storybook/react'; + +const meta: Meta = { + component: Link, + parameters: { + layout: 'centered' + }, + tags: ['autodocs'] +}; + +export default meta; + +export const Example = (args: any) => ( + + The missing link + +); + +Example.args = { + href: 'https://www.imdb.com/title/tt6348138/', + target: '_blank' +}; diff --git a/packages/@react-spectrum/s2/stories/ListBox.stories.tsx b/packages/@react-spectrum/s2/stories/ListBox.stories.tsx new file mode 100644 index 00000000000..c9debc410ad --- /dev/null +++ b/packages/@react-spectrum/s2/stories/ListBox.stories.tsx @@ -0,0 +1,27 @@ +import {ListBox, ListBoxItem} from '../src/ListBox'; + +import type {Meta} from '@storybook/react'; + +const meta: Meta = { + component: ListBox, + parameters: { + layout: 'centered' + }, + tags: ['autodocs'] +}; + +export default meta; + +export const Example = (args: any) => ( + + Chocolate + Mint + Strawberry + Vanilla + +); + +Example.args = { + onAction: null, + selectionMode: 'single' +}; diff --git a/packages/@react-spectrum/s2/stories/Menu.stories.tsx b/packages/@react-spectrum/s2/stories/Menu.stories.tsx new file mode 100644 index 00000000000..d7b4d7940ec --- /dev/null +++ b/packages/@react-spectrum/s2/stories/Menu.stories.tsx @@ -0,0 +1,22 @@ +import {MenuButton, MenuItem} from '../src/Menu'; +import {Menu} from 'react-aria-components'; + +import type {Meta} from '@storybook/react'; + +const meta: Meta = { + component: Menu, + parameters: { + layout: 'centered' + }, + tags: ['autodocs'] +}; + +export default meta; + +export const Example = (args: any) => ( + + Cut + Copy + Paste + +); diff --git a/packages/@react-spectrum/s2/stories/Meter.stories.tsx b/packages/@react-spectrum/s2/stories/Meter.stories.tsx new file mode 100644 index 00000000000..d6f2475b904 --- /dev/null +++ b/packages/@react-spectrum/s2/stories/Meter.stories.tsx @@ -0,0 +1,20 @@ +import {Meter} from '../src/Meter'; + +import type {Meta} from '@storybook/react'; + +const meta: Meta = { + component: Meter, + parameters: { + layout: 'centered' + }, + tags: ['autodocs'] +}; + +export default meta; + +export const Example = (args: any) => ; + +Example.args = { + label: 'Storage space', + value: 80 +}; diff --git a/packages/@react-spectrum/s2/stories/Modal.stories.tsx b/packages/@react-spectrum/s2/stories/Modal.stories.tsx new file mode 100644 index 00000000000..0310f20dac2 --- /dev/null +++ b/packages/@react-spectrum/s2/stories/Modal.stories.tsx @@ -0,0 +1,48 @@ +import {Modal} from '../src/Modal'; +import { + Button, + Dialog, + DialogTrigger, + Heading, + Input, + Label, + TextField +} from 'react-aria-components'; + +import type {Meta} from '@storybook/react'; + +const meta: Meta = { + component: Modal, + parameters: { + layout: 'centered' + }, + tags: ['autodocs'] +}; + +export default meta; + +export const Example = (args: any) => ( + + + + + {({ close }) => ( +
+ Sign up + + + + + + + + + +
+ )} +
+
+
+); diff --git a/packages/@react-spectrum/s2/stories/NumberField.stories.tsx b/packages/@react-spectrum/s2/stories/NumberField.stories.tsx new file mode 100644 index 00000000000..759dcc1129d --- /dev/null +++ b/packages/@react-spectrum/s2/stories/NumberField.stories.tsx @@ -0,0 +1,19 @@ +import {NumberField} from '../src/NumberField'; + +import type {Meta} from '@storybook/react'; + +const meta: Meta = { + component: NumberField, + parameters: { + layout: 'centered' + }, + tags: ['autodocs'] +}; + +export default meta; + +export const Example = (args: any) => ; + +Example.args = { + label: 'Cookies' +}; diff --git a/packages/@react-spectrum/s2/stories/Popover.stories.tsx b/packages/@react-spectrum/s2/stories/Popover.stories.tsx new file mode 100644 index 00000000000..9c5633334a2 --- /dev/null +++ b/packages/@react-spectrum/s2/stories/Popover.stories.tsx @@ -0,0 +1,24 @@ +import {Popover} from '../src/Popover'; +import {Button, DialogTrigger, Heading} from 'react-aria-components'; + +import type {Meta} from '@storybook/react'; + +const meta: Meta = { + component: Popover, + parameters: { + layout: 'centered' + }, + tags: ['autodocs'] +}; + +export default meta; + +export const Example = (args: any) => ( + + + + Help +

For help accessing your account, please contact support.

+
+
+); diff --git a/packages/@react-spectrum/s2/stories/ProgressBar.stories.tsx b/packages/@react-spectrum/s2/stories/ProgressBar.stories.tsx new file mode 100644 index 00000000000..740970334f6 --- /dev/null +++ b/packages/@react-spectrum/s2/stories/ProgressBar.stories.tsx @@ -0,0 +1,20 @@ +import {ProgressBar} from '../src/ProgressBar'; + +import type {Meta} from '@storybook/react'; + +const meta: Meta = { + component: ProgressBar, + parameters: { + layout: 'centered' + }, + tags: ['autodocs'] +}; + +export default meta; + +export const Example = (args: any) => ; + +Example.args = { + label: 'Loading…', + value: 80 +}; diff --git a/packages/@react-spectrum/s2/stories/RadioGroup.stories.tsx b/packages/@react-spectrum/s2/stories/RadioGroup.stories.tsx new file mode 100644 index 00000000000..175d9c09852 --- /dev/null +++ b/packages/@react-spectrum/s2/stories/RadioGroup.stories.tsx @@ -0,0 +1,26 @@ +import {RadioGroup} from '../src/RadioGroup'; +import {Radio} from 'react-aria-components'; + +import type {Meta} from '@storybook/react'; + +const meta: Meta = { + component: RadioGroup, + parameters: { + layout: 'centered' + }, + tags: ['autodocs'] +}; + +export default meta; + +export const Example = (args: any) => ( + + Soccer + Baseball + Basketball + +); + +Example.args = { + label: 'Favorite sport' +}; diff --git a/packages/@react-spectrum/s2/stories/RangeCalendar.stories.tsx b/packages/@react-spectrum/s2/stories/RangeCalendar.stories.tsx new file mode 100644 index 00000000000..ea4fb9b1ba0 --- /dev/null +++ b/packages/@react-spectrum/s2/stories/RangeCalendar.stories.tsx @@ -0,0 +1,17 @@ +import {RangeCalendar} from '../src/RangeCalendar'; + +import type {Meta} from '@storybook/react'; + +const meta: Meta = { + component: RangeCalendar, + parameters: { + layout: 'centered' + }, + tags: ['autodocs'] +}; + +export default meta; + +export const Example = (args: any) => ( + +); diff --git a/packages/@react-spectrum/s2/stories/SearchField.stories.tsx b/packages/@react-spectrum/s2/stories/SearchField.stories.tsx new file mode 100644 index 00000000000..38a507a79e4 --- /dev/null +++ b/packages/@react-spectrum/s2/stories/SearchField.stories.tsx @@ -0,0 +1,19 @@ +import {SearchField} from '../src/SearchField'; + +import type {Meta} from '@storybook/react'; + +const meta: Meta = { + component: SearchField, + parameters: { + layout: 'centered' + }, + tags: ['autodocs'] +}; + +export default meta; + +export const Example = (args: any) => ; + +Example.args = { + label: 'Search' +}; diff --git a/packages/@react-spectrum/s2/stories/Select.stories.tsx b/packages/@react-spectrum/s2/stories/Select.stories.tsx new file mode 100644 index 00000000000..357a5c1f989 --- /dev/null +++ b/packages/@react-spectrum/s2/stories/Select.stories.tsx @@ -0,0 +1,26 @@ +import {Select, SelectItem} from '../src/Select'; + +import type {Meta} from '@storybook/react'; + +const meta: Meta = { + component: Select, + parameters: { + layout: 'centered' + }, + tags: ['autodocs'] +}; + +export default meta; + +export const Example = (args: any) => ( + +); + +Example.args = { + label: 'Ice cream flavor' +}; diff --git a/packages/@react-spectrum/s2/stories/Slider.stories.tsx b/packages/@react-spectrum/s2/stories/Slider.stories.tsx new file mode 100644 index 00000000000..b2819763590 --- /dev/null +++ b/packages/@react-spectrum/s2/stories/Slider.stories.tsx @@ -0,0 +1,21 @@ +import {Slider} from '../src/Slider'; + +import type {Meta} from '@storybook/react'; + +const meta: Meta = { + component: Slider, + parameters: { + layout: 'centered' + }, + tags: ['autodocs'] +}; + +export default meta; + +export const Example = (args: any) => ; + +Example.args = { + label: 'Range', + defaultValue: [30, 60], + thumbLabels: ['start', 'end'] +}; diff --git a/packages/@react-spectrum/s2/stories/Switch.stories.tsx b/packages/@react-spectrum/s2/stories/Switch.stories.tsx new file mode 100644 index 00000000000..46bdabab4e5 --- /dev/null +++ b/packages/@react-spectrum/s2/stories/Switch.stories.tsx @@ -0,0 +1,15 @@ +import {Switch} from '../src/Switch'; + +import type {Meta} from '@storybook/react'; + +const meta: Meta = { + component: Switch, + parameters: { + layout: 'centered' + }, + tags: ['autodocs'] +}; + +export default meta; + +export const Example = (args: any) => Wi-Fi; diff --git a/packages/@react-spectrum/s2/stories/Table.stories.tsx b/packages/@react-spectrum/s2/stories/Table.stories.tsx new file mode 100644 index 00000000000..be6a3d34a1f --- /dev/null +++ b/packages/@react-spectrum/s2/stories/Table.stories.tsx @@ -0,0 +1,47 @@ +import {Column, Row, Table, TableHeader} from '../src/Table'; +import {Cell, TableBody} from 'react-aria-components'; + +import type {Meta} from '@storybook/react'; + +const meta: Meta = { + component: Table, + parameters: { + layout: 'centered' + }, + tags: ['autodocs'] +}; + +export default meta; + +export const Example = (args: any) => ( + + + Name + Type + Date Modified + + + + Games + File folder + 6/7/2020 + + + Program Files + File folder + 4/7/2021 + + + bootmgr + System file + 11/20/2010 + + +
+); + +Example.args = { + onRowAction: null, + onCellAction: null, + selectionMode: 'multiple' +}; diff --git a/packages/@react-spectrum/s2/stories/Tabs.stories.tsx b/packages/@react-spectrum/s2/stories/Tabs.stories.tsx new file mode 100644 index 00000000000..3de1c1f00f1 --- /dev/null +++ b/packages/@react-spectrum/s2/stories/Tabs.stories.tsx @@ -0,0 +1,33 @@ +import {Tabs} from '../src/Tabs'; +import {Tab, TabList, TabPanel} from 'react-aria-components'; + +import type {Meta} from '@storybook/react'; + +const meta: Meta = { + component: Tabs, + parameters: { + layout: 'centered' + }, + tags: ['autodocs'] +}; + +export default meta; + +export const Example = (args: any) => ( + + + Founding of Rome + Monarchy and Republic + Empire + + + Arma virumque cano, Troiae qui primus ab oris. + + + Senatus Populusque Romanus. + + + Alea jacta est. + + +); diff --git a/packages/@react-spectrum/s2/stories/TagGroup.stories.tsx b/packages/@react-spectrum/s2/stories/TagGroup.stories.tsx new file mode 100644 index 00000000000..6fd93418f02 --- /dev/null +++ b/packages/@react-spectrum/s2/stories/TagGroup.stories.tsx @@ -0,0 +1,27 @@ +import {Tag, TagGroup} from '../src/TagGroup'; + +import type {Meta} from '@storybook/react'; + +const meta: Meta = { + component: TagGroup, + parameters: { + layout: 'centered' + }, + tags: ['autodocs'] +}; + +export default meta; + +export const Example = (args: any) => ( + + Chocolate + Mint + Strawberry + Vanilla + +); + +Example.args = { + label: 'Ice cream flavor', + selectionMode: 'single' +}; diff --git a/packages/@react-spectrum/s2/stories/TextField.stories.tsx b/packages/@react-spectrum/s2/stories/TextField.stories.tsx new file mode 100644 index 00000000000..630a78d1c1c --- /dev/null +++ b/packages/@react-spectrum/s2/stories/TextField.stories.tsx @@ -0,0 +1,19 @@ +import {TextField} from '../src/TextField'; + +import type {Meta} from '@storybook/react'; + +const meta: Meta = { + component: TextField, + parameters: { + layout: 'centered' + }, + tags: ['autodocs'] +}; + +export default meta; + +export const Example = (args: any) => ; + +Example.args = { + label: 'Name' +}; diff --git a/packages/@react-spectrum/s2/stories/TimeField.stories.tsx b/packages/@react-spectrum/s2/stories/TimeField.stories.tsx new file mode 100644 index 00000000000..d32d80af230 --- /dev/null +++ b/packages/@react-spectrum/s2/stories/TimeField.stories.tsx @@ -0,0 +1,19 @@ +import {TimeField} from '../src/TimeField'; + +import type {Meta} from '@storybook/react'; + +const meta: Meta = { + component: TimeField, + parameters: { + layout: 'centered' + }, + tags: ['autodocs'] +}; + +export default meta; + +export const Example = (args: any) => ; + +Example.args = { + label: 'Event time' +}; diff --git a/packages/@react-spectrum/s2/stories/ToggleButton.stories.tsx b/packages/@react-spectrum/s2/stories/ToggleButton.stories.tsx new file mode 100644 index 00000000000..5c95df9e8d3 --- /dev/null +++ b/packages/@react-spectrum/s2/stories/ToggleButton.stories.tsx @@ -0,0 +1,16 @@ +import {ToggleButton} from '../src/ToggleButton'; + +import type {Meta} from '@storybook/react'; + +const meta: Meta = { + component: ToggleButton, + parameters: { + layout: 'centered' + }, + tags: ['autodocs'] +}; + +export default meta; + +export const Example = (args: any) => Pin +; diff --git a/packages/@react-spectrum/s2/stories/Toolbar.stories.tsx b/packages/@react-spectrum/s2/stories/Toolbar.stories.tsx new file mode 100644 index 00000000000..8ab7a179a7e --- /dev/null +++ b/packages/@react-spectrum/s2/stories/Toolbar.stories.tsx @@ -0,0 +1,51 @@ +import {Toolbar} from '../src/Toolbar'; +import { + Button, + Checkbox, + Group, + Separator, + ToggleButton +} from 'react-aria-components'; + +import type {Meta} from '@storybook/react'; + +const meta: Meta = { + component: Toolbar, + parameters: { + layout: 'centered' + }, + tags: ['autodocs'] +}; + +export default meta; + +export const Example = (args: any) => ( + + + + B + + + I + + + U + + + + + + + + + + +
+ +
+ Night Mode +
+
+); diff --git a/packages/@react-spectrum/s2/stories/Tooltip.stories.tsx b/packages/@react-spectrum/s2/stories/Tooltip.stories.tsx new file mode 100644 index 00000000000..49e04319395 --- /dev/null +++ b/packages/@react-spectrum/s2/stories/Tooltip.stories.tsx @@ -0,0 +1,21 @@ +import {Tooltip} from '../src/Tooltip'; +import {Button, TooltipTrigger} from 'react-aria-components'; + +import type {Meta} from '@storybook/react'; + +const meta: Meta = { + component: Tooltip, + parameters: { + layout: 'centered' + }, + tags: ['autodocs'] +}; + +export default meta; + +export const Example = (args: any) => ( + + + Save + +); From d02a63b7ffdf2bc8c3aadef72cfecd6f2fbb0546 Mon Sep 17 00:00:00 2001 From: Rob Snow Date: Thu, 23 Nov 2023 17:15:09 +1100 Subject: [PATCH 004/203] Got tailwind working! --- .storybook-s2/main.js | 58 - .storybook-s2/main.ts | 77 ++ .storybook-s2/{preview.js => preview.ts} | 1 + packages/@react-spectrum/s2/package.json | 13 +- .../@react-spectrum/s2/src/Breadcrumbs.css | 53 - .../@react-spectrum/s2/src/Breadcrumbs.tsx | 2 +- packages/@react-spectrum/s2/src/Button.css | 32 - packages/@react-spectrum/s2/src/Button.tsx | 8 +- packages/@react-spectrum/s2/src/Calendar.css | 81 -- packages/@react-spectrum/s2/src/Calendar.tsx | 2 +- packages/@react-spectrum/s2/src/Checkbox.css | 99 -- packages/@react-spectrum/s2/src/Checkbox.tsx | 2 +- .../@react-spectrum/s2/src/CheckboxGroup.css | 20 - .../@react-spectrum/s2/src/CheckboxGroup.tsx | 2 +- packages/@react-spectrum/s2/src/ComboBox.css | 124 -- packages/@react-spectrum/s2/src/ComboBox.tsx | 2 +- packages/@react-spectrum/s2/src/DateField.css | 68 -- packages/@react-spectrum/s2/src/DateField.tsx | 2 +- .../@react-spectrum/s2/src/DatePicker.css | 71 -- .../@react-spectrum/s2/src/DatePicker.tsx | 2 +- .../s2/src/DateRangePicker.css | 104 -- .../s2/src/DateRangePicker.tsx | 2 +- packages/@react-spectrum/s2/src/Dialog.css | 14 - packages/@react-spectrum/s2/src/Dialog.tsx | 2 +- packages/@react-spectrum/s2/src/Form.css | 32 - packages/@react-spectrum/s2/src/Form.tsx | 2 +- packages/@react-spectrum/s2/src/GridList.css | 184 --- packages/@react-spectrum/s2/src/GridList.tsx | 2 +- packages/@react-spectrum/s2/src/Link.css | 32 - packages/@react-spectrum/s2/src/Link.tsx | 2 +- packages/@react-spectrum/s2/src/ListBox.css | 223 ---- packages/@react-spectrum/s2/src/ListBox.tsx | 2 +- packages/@react-spectrum/s2/src/Menu.css | 107 -- packages/@react-spectrum/s2/src/Menu.tsx | 2 +- packages/@react-spectrum/s2/src/Meter.css | 37 - packages/@react-spectrum/s2/src/Meter.tsx | 2 +- packages/@react-spectrum/s2/src/Modal.css | 83 -- packages/@react-spectrum/s2/src/Modal.tsx | 2 +- .../@react-spectrum/s2/src/NumberField.css | 89 -- .../@react-spectrum/s2/src/NumberField.tsx | 2 +- packages/@react-spectrum/s2/src/Popover.css | 88 -- packages/@react-spectrum/s2/src/Popover.tsx | 2 +- .../@react-spectrum/s2/src/ProgressBar.css | 49 - .../@react-spectrum/s2/src/ProgressBar.tsx | 2 +- .../@react-spectrum/s2/src/RadioGroup.css | 87 -- .../@react-spectrum/s2/src/RadioGroup.tsx | 2 +- .../@react-spectrum/s2/src/RangeCalendar.css | 103 -- .../@react-spectrum/s2/src/RangeCalendar.tsx | 2 +- .../@react-spectrum/s2/src/SearchField.css | 83 -- .../@react-spectrum/s2/src/SearchField.tsx | 2 +- packages/@react-spectrum/s2/src/Select.css | 139 --- packages/@react-spectrum/s2/src/Select.tsx | 2 +- packages/@react-spectrum/s2/src/Slider.css | 106 -- packages/@react-spectrum/s2/src/Slider.tsx | 2 +- packages/@react-spectrum/s2/src/Switch.css | 74 -- packages/@react-spectrum/s2/src/Switch.tsx | 2 +- packages/@react-spectrum/s2/src/Table.css | 272 ----- packages/@react-spectrum/s2/src/Table.tsx | 2 +- packages/@react-spectrum/s2/src/Tabs.css | 102 -- packages/@react-spectrum/s2/src/Tabs.tsx | 2 +- packages/@react-spectrum/s2/src/TagGroup.css | 91 -- packages/@react-spectrum/s2/src/TagGroup.tsx | 2 +- packages/@react-spectrum/s2/src/TextField.css | 49 - packages/@react-spectrum/s2/src/TextField.tsx | 2 +- packages/@react-spectrum/s2/src/TimeField.css | 68 -- packages/@react-spectrum/s2/src/TimeField.tsx | 2 +- .../@react-spectrum/s2/src/ToggleButton.css | 44 - .../@react-spectrum/s2/src/ToggleButton.tsx | 2 +- packages/@react-spectrum/s2/src/Toolbar.css | 50 - packages/@react-spectrum/s2/src/Toolbar.tsx | 2 +- packages/@react-spectrum/s2/src/Tooltip.css | 69 -- packages/@react-spectrum/s2/src/Tooltip.tsx | 2 +- packages/@react-spectrum/s2/src/tailwind.css | 4 + packages/@react-spectrum/s2/src/theme.css | 127 -- postcss.config.js | 6 + tailwind-spectrum.js | 1068 +++++++++++++++++ tailwind.config.js | 2 + 77 files changed, 1209 insertions(+), 3148 deletions(-) delete mode 100644 .storybook-s2/main.js create mode 100644 .storybook-s2/main.ts rename .storybook-s2/{preview.js => preview.ts} (93%) delete mode 100644 packages/@react-spectrum/s2/src/Breadcrumbs.css delete mode 100644 packages/@react-spectrum/s2/src/Button.css delete mode 100644 packages/@react-spectrum/s2/src/Calendar.css delete mode 100644 packages/@react-spectrum/s2/src/Checkbox.css delete mode 100644 packages/@react-spectrum/s2/src/CheckboxGroup.css delete mode 100644 packages/@react-spectrum/s2/src/ComboBox.css delete mode 100644 packages/@react-spectrum/s2/src/DateField.css delete mode 100644 packages/@react-spectrum/s2/src/DatePicker.css delete mode 100644 packages/@react-spectrum/s2/src/DateRangePicker.css delete mode 100644 packages/@react-spectrum/s2/src/Dialog.css delete mode 100644 packages/@react-spectrum/s2/src/Form.css delete mode 100644 packages/@react-spectrum/s2/src/GridList.css delete mode 100644 packages/@react-spectrum/s2/src/Link.css delete mode 100644 packages/@react-spectrum/s2/src/ListBox.css delete mode 100644 packages/@react-spectrum/s2/src/Menu.css delete mode 100644 packages/@react-spectrum/s2/src/Meter.css delete mode 100644 packages/@react-spectrum/s2/src/Modal.css delete mode 100644 packages/@react-spectrum/s2/src/NumberField.css delete mode 100644 packages/@react-spectrum/s2/src/Popover.css delete mode 100644 packages/@react-spectrum/s2/src/ProgressBar.css delete mode 100644 packages/@react-spectrum/s2/src/RadioGroup.css delete mode 100644 packages/@react-spectrum/s2/src/RangeCalendar.css delete mode 100644 packages/@react-spectrum/s2/src/SearchField.css delete mode 100644 packages/@react-spectrum/s2/src/Select.css delete mode 100644 packages/@react-spectrum/s2/src/Slider.css delete mode 100644 packages/@react-spectrum/s2/src/Switch.css delete mode 100644 packages/@react-spectrum/s2/src/Table.css delete mode 100644 packages/@react-spectrum/s2/src/Tabs.css delete mode 100644 packages/@react-spectrum/s2/src/TagGroup.css delete mode 100644 packages/@react-spectrum/s2/src/TextField.css delete mode 100644 packages/@react-spectrum/s2/src/TimeField.css delete mode 100644 packages/@react-spectrum/s2/src/ToggleButton.css delete mode 100644 packages/@react-spectrum/s2/src/Toolbar.css delete mode 100644 packages/@react-spectrum/s2/src/Tooltip.css create mode 100644 packages/@react-spectrum/s2/src/tailwind.css delete mode 100644 packages/@react-spectrum/s2/src/theme.css create mode 100644 postcss.config.js create mode 100644 tailwind-spectrum.js create mode 100644 tailwind.config.js diff --git a/.storybook-s2/main.js b/.storybook-s2/main.js deleted file mode 100644 index 3a0458324e6..00000000000 --- a/.storybook-s2/main.js +++ /dev/null @@ -1,58 +0,0 @@ -import { join, dirname } from "path"; - -/** - * This function is used to resolve the absolute path of a package. - * It is needed in projects that use Yarn PnP or are set up within a monorepo. - */ -function getAbsolutePath(value) { - return dirname(require.resolve(join(value, "package.json"))); -} - -const excludedProps = new Set([ - 'id', - 'slot', - 'onCopy', - 'onCut', - 'onPaste', - 'onCompositionStart', - 'onCompositionEnd', - 'onCompositionUpdate', - 'onSelect', - 'onBeforeInput', - 'onInput' -]); - -/** @type { import('@storybook/react-webpack5').StorybookConfig } */ -const config = { - stories: ["../stories/*.stories.@(js|jsx|mjs|ts|tsx)"], - addons: [ - getAbsolutePath("@storybook/addon-links"), - getAbsolutePath("@storybook/addon-essentials"), - getAbsolutePath("@storybook/addon-onboarding"), - getAbsolutePath("@storybook/addon-interactions"), - ], - framework: { - name: getAbsolutePath("@storybook/react-webpack5"), - options: {}, - }, - docs: { - autodocs: "tag", - }, - typescript: { - reactDocgen: 'react-docgen-typescript', - reactDocgenTypescriptOptions: { - shouldExtractLiteralValuesFromEnum: true, - compilerOptions: { - allowSyntheticDefaultImports: false, - esModuleInterop: false, - }, - propFilter: (prop) => !prop.name.startsWith('aria-') && !excludedProps.has(prop.name), - }, - }, - async webpackFinal(config) { - let rule = config.module.rules.find(rule => String(rule.test).includes('.css')); - rule.use.push('lightningcss-loader'); - return config; - } -}; -export default config; diff --git a/.storybook-s2/main.ts b/.storybook-s2/main.ts new file mode 100644 index 00000000000..e210bfb061f --- /dev/null +++ b/.storybook-s2/main.ts @@ -0,0 +1,77 @@ +import type { StorybookConfig } from "@storybook/react-webpack5"; + +const excludedProps = new Set([ + 'id', + 'slot', + 'onCopy', + 'onCut', + 'onPaste', + 'onCompositionStart', + 'onCompositionEnd', + 'onCompositionUpdate', + 'onSelect', + 'onBeforeInput', + 'onInput' +]); + +const config: StorybookConfig = { + stories: ["../stories/**/*.stories.@(js|jsx|mjs|ts|tsx)"], + addons: [ + "@storybook/addon-links", + "@storybook/addon-essentials", + "@storybook/addon-onboarding", + "@storybook/addon-interactions", + "@storybook/addon-styling-webpack", + "storybook-dark-mode", + ({ + name: "@storybook/addon-styling-webpack", + + options: { + rules: [{ + test: /\.css$/, + sideEffects: true, + use: [ + require.resolve("style-loader"), + { + loader: require.resolve("css-loader"), + options: { + importLoaders: 1, + }, + },{ + loader: require.resolve("postcss-loader"), + options: { + implementation: require.resolve("postcss"), + postcssOptions: { + ident: 'postcss', + plugins: [ + require('tailwindcss'), + require('autoprefixer') + ] + } + } + }, + ], + }], + } + }) + ], + framework: { + name: "@storybook/react-webpack5", + options: {}, + }, + docs: { + autodocs: "tag", + }, + typescript: { + reactDocgen: 'react-docgen-typescript', + reactDocgenTypescriptOptions: { + shouldExtractLiteralValuesFromEnum: true, + compilerOptions: { + allowSyntheticDefaultImports: false, + esModuleInterop: false, + }, + propFilter: (prop) => !prop.name.startsWith('aria-') && !excludedProps.has(prop.name), + }, + }, +}; +export default config; diff --git a/.storybook-s2/preview.js b/.storybook-s2/preview.ts similarity index 93% rename from .storybook-s2/preview.js rename to .storybook-s2/preview.ts index fbb845d6eb4..eb228b6131e 100644 --- a/.storybook-s2/preview.js +++ b/.storybook-s2/preview.ts @@ -1,4 +1,5 @@ import { themes } from "@storybook/theming"; +import '../src/tailwind.css'; /** @type { import('@storybook/react').Preview } */ const preview = { diff --git a/packages/@react-spectrum/s2/package.json b/packages/@react-spectrum/s2/package.json index b74ecf19a2f..e1c6ecc9c65 100644 --- a/packages/@react-spectrum/s2/package.json +++ b/packages/@react-spectrum/s2/package.json @@ -5,19 +5,29 @@ "@storybook/addon-interactions": "^7.5.3", "@storybook/addon-links": "^7.5.3", "@storybook/addon-onboarding": "^1.0.8", + "@storybook/addon-styling-webpack": "^0.0.5", + "@storybook/addon-themes": "^7.5.3", "@storybook/blocks": "^7.5.3", "@storybook/react": "^7.5.3", "@storybook/react-webpack5": "^7.5.3", "@storybook/testing-library": "^0.2.2", "@types/react": "^18.2.37", "@types/react-dom": "^18.2.15", + "autoprefixer": "^10.4.16", + "css-loader": "^6.8.1", "lightningcss-loader": "^2.1.0", + "postcss": "^8.4.31", + "postcss-loader": "^7.3.3", "prop-types": "^15.8.1", "react": "^18.2.0", "react-aria-components": "latest", "react-dom": "^18.2.0", "storybook": "^7.5.3", "storybook-dark-mode": "^3.0.1", + "style-loader": "^3.3.3", + "tailwindcss": "^3.3.5", + "tailwindcss-animate": "^1.0.7", + "tailwindcss-react-aria-components": "latest", "typescript": "^5.3.2" }, "resolutions": { @@ -25,6 +35,7 @@ }, "scripts": { "start": "storybook dev -p 6006", - "build-storybook": "storybook build" + "build-storybook": "storybook build", + "storybook": "storybook dev -p 6006" } } diff --git a/packages/@react-spectrum/s2/src/Breadcrumbs.css b/packages/@react-spectrum/s2/src/Breadcrumbs.css deleted file mode 100644 index 0964ebba054..00000000000 --- a/packages/@react-spectrum/s2/src/Breadcrumbs.css +++ /dev/null @@ -1,53 +0,0 @@ -@import "./theme.css"; - -.react-aria-Breadcrumbs { - display: flex; - align-items: center; - list-style: none; - margin: 0; - padding: 0; - font-size: 18px; - color: var(--text-color); - - .react-aria-Breadcrumb:not(:last-child)::after { - content: '›'; - content: '›' / ''; - alt: ' '; - padding: 0 5px; - } - - .react-aria-Link { - color: var(--link-color-secondary); - outline: none; - position: relative; - text-decoration: none; - cursor: pointer; - - &[data-hovered] { - text-decoration: underline; - } - - &[data-current] { - color: var(--text-color); - font-weight: bold; - } - - &[data-focus-visible]:after { - content: ''; - position: absolute; - inset: -2px -4px; - border-radius: 6px; - border: 2px solid var(--focus-ring-color); - } - } - - .react-aria-Link { - &[data-disabled] { - cursor: default; - - &:not([data-current]) { - color: var(--text-color-disabled); - } - } - } -} diff --git a/packages/@react-spectrum/s2/src/Breadcrumbs.tsx b/packages/@react-spectrum/s2/src/Breadcrumbs.tsx index 092b6405b78..4934102f5b8 100644 --- a/packages/@react-spectrum/s2/src/Breadcrumbs.tsx +++ b/packages/@react-spectrum/s2/src/Breadcrumbs.tsx @@ -1,5 +1,5 @@ import {Breadcrumbs as RACBreadcrumbs, BreadcrumbsProps} from 'react-aria-components'; -import './Breadcrumbs.css'; + export function Breadcrumbs(props: BreadcrumbsProps) { return ; diff --git a/packages/@react-spectrum/s2/src/Button.css b/packages/@react-spectrum/s2/src/Button.css deleted file mode 100644 index 3dbc7d5d088..00000000000 --- a/packages/@react-spectrum/s2/src/Button.css +++ /dev/null @@ -1,32 +0,0 @@ -@import "./theme.css"; - -.react-aria-Button { - color: var(--text-color); - background: var(--button-background); - border: 1px solid var(--border-color); - border-radius: 4px; - appearance: none; - vertical-align: middle; - font-size: 1rem; - text-align: center; - margin: 0; - outline: none; - padding: 6px 10px; - text-decoration: none; - - &[data-pressed] { - box-shadow: inset 0 1px 2px rgb(0 0 0 / 0.1); - background: var(--button-background-pressed); - border-color: var(--border-color-pressed); - } - - &[data-focus-visible] { - outline: 2px solid var(--focus-ring-color); - outline-offset: -1px; - } - - &[data-disabled]{ - border-color: var(--border-color-disabled); - color: var(--text-color-disabled); - } -} diff --git a/packages/@react-spectrum/s2/src/Button.tsx b/packages/@react-spectrum/s2/src/Button.tsx index f5e27166f29..f9090ae285d 100644 --- a/packages/@react-spectrum/s2/src/Button.tsx +++ b/packages/@react-spectrum/s2/src/Button.tsx @@ -1,6 +1,10 @@ import {Button as RACButton, ButtonProps} from 'react-aria-components'; -import './Button.css'; export function Button(props: ButtonProps) { - return ; + return ( + <> +
Button
+ + + ); } diff --git a/packages/@react-spectrum/s2/src/Calendar.css b/packages/@react-spectrum/s2/src/Calendar.css deleted file mode 100644 index 0b91bf747ce..00000000000 --- a/packages/@react-spectrum/s2/src/Calendar.css +++ /dev/null @@ -1,81 +0,0 @@ -@import './Button.css'; -@import "./theme.css"; - -.react-aria-Calendar { - width: fit-content; - max-width: 100%; - color: var(--text-color); - - header { - display: flex; - align-items: center; - margin: 0 4px .5rem 4px; - - .react-aria-Heading { - flex: 1; - margin: 0; - text-align: center; - font-size: 1.375rem; - } - } - - .react-aria-Button { - width: 2rem; - height: 2rem; - padding: 0; - } - - .react-aria-CalendarCell { - width: 2rem; - line-height: 2rem; - text-align: center; - border-radius: 6px; - cursor: default; - outline: none; - margin: 1px; - forced-color-adjust: none; - - &[data-outside-month] { - display: none; - } - - &[data-pressed] { - background: var(--gray-100); - } - - &[data-focus-visible] { - outline: 2px solid var(--focus-ring-color); - outline-offset: 2px; - } - - &[data-selected] { - background: var(--highlight-background); - color: var(--highlight-foreground); - } - } - - .react-aria-CalendarCell { - &[data-disabled] { - color: var(--text-color-disabled); - } - } - - .react-aria-CalendarCell { - &[data-unavailable] { - text-decoration: line-through; - color: var(--invalid-color); - } - } - - .react-aria-CalendarCell { - &[data-invalid] { - background: var(--invalid-color); - color: var(--highlight-foreground); - } - } - - [slot=errorMessage] { - font-size: 12px; - color: var(--invalid-color); - } -} diff --git a/packages/@react-spectrum/s2/src/Calendar.tsx b/packages/@react-spectrum/s2/src/Calendar.tsx index 2ad5b19d566..23c8fde7ade 100644 --- a/packages/@react-spectrum/s2/src/Calendar.tsx +++ b/packages/@react-spectrum/s2/src/Calendar.tsx @@ -9,7 +9,7 @@ import { Text } from 'react-aria-components'; -import './Calendar.css'; + export interface CalendarProps extends AriaCalendarProps { diff --git a/packages/@react-spectrum/s2/src/Checkbox.css b/packages/@react-spectrum/s2/src/Checkbox.css deleted file mode 100644 index 47226a65e6a..00000000000 --- a/packages/@react-spectrum/s2/src/Checkbox.css +++ /dev/null @@ -1,99 +0,0 @@ -@import "./theme.css"; - -.react-aria-Checkbox { - --selected-color: var(--highlight-background); - --selected-color-pressed: var(--highlight-background-pressed); - --checkmark-color: var(--highlight-foreground); - - display: flex; - align-items: center; - gap: 0.571rem; - font-size: 1.143rem; - color: var(--text-color); - forced-color-adjust: none; - - .checkbox { - width: 1.143rem; - height: 1.143rem; - border: 2px solid var(--border-color); - border-radius: 4px; - transition: all 200ms; - display: flex; - align-items: center; - justify-content: center; - } - - svg { - width: 1rem; - height: 1rem; - fill: none; - stroke: var(--checkmark-color); - stroke-width: 3px; - stroke-dasharray: 22px; - stroke-dashoffset: 66; - transition: all 200ms; - } - - &[data-pressed] .checkbox { - border-color: var(--border-color-pressed); - } - - &[data-focus-visible] .checkbox { - outline: 2px solid var(--focus-ring-color); - outline-offset: 2px; - } - - &[data-selected], - &[data-indeterminate] { - .checkbox { - border-color: var(--selected-color); - background: var(--selected-color); - } - - &[data-pressed] .checkbox { - border-color: var(--selected-color-pressed); - background: var(--selected-color-pressed); - } - - svg { - stroke-dashoffset: 44; - } - } - - &[data-indeterminate] { - & svg { - stroke: none; - fill: var(--checkmark-color); - } - } - - &[data-invalid] { - .checkbox { - --checkmark-color: var(--gray-50); - border-color: var(--invalid-color); - } - - &[data-pressed] .checkbox { - border-color: var(--invalid-color-pressed); - } - - &[data-selected], - &[data-indeterminate] { - .checkbox { - background: var(--invalid-color); - } - - &[data-pressed] .checkbox { - background: var(--invalid-color-pressed); - } - } - } - - &[data-disabled] { - color: var(--text-color-disabled); - - .checkbox { - border-color: var(--border-color-disabled); - } - } -} diff --git a/packages/@react-spectrum/s2/src/Checkbox.tsx b/packages/@react-spectrum/s2/src/Checkbox.tsx index 1df3facf39a..72ab89250bd 100644 --- a/packages/@react-spectrum/s2/src/Checkbox.tsx +++ b/packages/@react-spectrum/s2/src/Checkbox.tsx @@ -1,6 +1,6 @@ import {Checkbox as AriaCheckbox, CheckboxProps} from 'react-aria-components'; -import './Checkbox.css'; + export function Checkbox({ children, ...props }: CheckboxProps) { return ( diff --git a/packages/@react-spectrum/s2/src/CheckboxGroup.css b/packages/@react-spectrum/s2/src/CheckboxGroup.css deleted file mode 100644 index 3711f3b3616..00000000000 --- a/packages/@react-spectrum/s2/src/CheckboxGroup.css +++ /dev/null @@ -1,20 +0,0 @@ -@import './Checkbox.css'; -@import './Form.css'; -@import './Button.css'; -@import "./theme.css"; - -.react-aria-CheckboxGroup { - display: flex; - flex-direction: column; - gap: 0.571rem; - color: var(--text-color); - - .react-aria-FieldError { - font-size: 12px; - color: var(--invalid-color); - } - - [slot=description] { - font-size: 12px; - } -} diff --git a/packages/@react-spectrum/s2/src/CheckboxGroup.tsx b/packages/@react-spectrum/s2/src/CheckboxGroup.tsx index 866bddda1de..a9f355c08b0 100644 --- a/packages/@react-spectrum/s2/src/CheckboxGroup.tsx +++ b/packages/@react-spectrum/s2/src/CheckboxGroup.tsx @@ -7,7 +7,7 @@ import { ValidationResult } from 'react-aria-components'; -import './CheckboxGroup.css'; + export interface CheckboxGroupProps extends Omit { diff --git a/packages/@react-spectrum/s2/src/ComboBox.css b/packages/@react-spectrum/s2/src/ComboBox.css deleted file mode 100644 index 9c4756d5207..00000000000 --- a/packages/@react-spectrum/s2/src/ComboBox.css +++ /dev/null @@ -1,124 +0,0 @@ -@import './Checkbox.css'; -@import './ListBox.css'; -@import './Popover.css'; -@import './Form.css'; -@import './Button.css'; -@import "./theme.css"; - -.react-aria-ComboBox { - color: var(--text-color); - - .react-aria-Input { - margin: 0; - font-size: 1.072rem; - background: var(--field-background); - color: var(--field-text-color); - border: 1px solid var(--border-color); - border-radius: 6px; - padding: 0.286rem 2rem 0.286rem 0.571rem; - vertical-align: middle; - - &[data-focused] { - outline: none; - outline: 2px solid var(--focus-ring-color); - outline-offset: -1px; - } - } - - .react-aria-Button { - background: var(--highlight-background); - color: var(--highlight-foreground); - forced-color-adjust: none; - border-radius: 4px; - border: none; - margin-left: -1.714rem; - width: 1.429rem; - height: 1.429rem; - padding: 0; - font-size: 0.857rem; - - &[data-pressed] { - box-shadow: none; - background: var(--highlight-background); - } - } -} - -.react-aria-Popover[data-trigger=ComboBox] { - width: var(--trigger-width); - - .react-aria-ListBox { - display: block; - width: unset; - max-height: inherit; - min-height: unset; - border: none; - - .react-aria-Header { - padding-left: 1.571rem; - } - } - - .react-aria-ListBoxItem { - padding: 0.286rem 0.571rem 0.286rem 1.571rem; - - &[data-focus-visible] { - outline: none; - } - - &[data-selected] { - font-weight: 600; - background: unset; - color: var(--text-color); - - &::before { - content: '✓'; - content: '✓' / ''; - alt: ' '; - position: absolute; - top: 4px; - left: 4px; - } - } - - &[data-focused], - &[data-pressed] { - background: var(--highlight-background); - color: var(--highlight-foreground); - } - } -} - -.react-aria-ListBoxItem[href] { - text-decoration: none; - cursor: pointer; -} - -.react-aria-ComboBox { - .react-aria-Input { - &[data-disabled] { - border-color: var(--border-color-disabled); - } - } - - .react-aria-Button { - &[data-disabled] { - background: var(--border-color-disabled); - } - } - - .react-aria-Input { - &[data-invalid]:not([data-focused]) { - border-color: var(--invalid-color); - } - } - - .react-aria-FieldError { - font-size: 12px; - color: var(--invalid-color); - } - - [slot=description] { - font-size: 12px; - } -} diff --git a/packages/@react-spectrum/s2/src/ComboBox.tsx b/packages/@react-spectrum/s2/src/ComboBox.tsx index b1c8bb0412b..60d6f51995e 100644 --- a/packages/@react-spectrum/s2/src/ComboBox.tsx +++ b/packages/@react-spectrum/s2/src/ComboBox.tsx @@ -13,7 +13,7 @@ import { ValidationResult } from 'react-aria-components'; -import './ComboBox.css'; + export interface ComboBoxProps extends Omit, 'children'> { diff --git a/packages/@react-spectrum/s2/src/DateField.css b/packages/@react-spectrum/s2/src/DateField.css deleted file mode 100644 index e1b795c7ce6..00000000000 --- a/packages/@react-spectrum/s2/src/DateField.css +++ /dev/null @@ -1,68 +0,0 @@ -@import './Form.css'; -@import './Button.css'; -@import "./theme.css"; - -.react-aria-DateField { - color: var(--text-color); -} - -.react-aria-DateInput { - display: flex; - padding: 4px; - border: 1px solid var(--border-color); - border-radius: 6px; - background: var(--field-background); - width: fit-content; - min-width: 150px; - white-space: nowrap; - forced-color-adjust: none; - - &[data-focus-within] { - outline: 2px solid var(--focus-ring-color); - outline-offset: -1px; - } -} - -.react-aria-DateSegment { - padding: 0 2px; - font-variant-numeric: tabular-nums; - text-align: end; - color: var(--text-color); - - &[data-type=literal] { - padding: 0; - } - - &[data-placeholder] { - color: var(--text-color-placeholder); - font-style: italic; - } - - &:focus { - color: var(--highlight-foreground); - background: var(--highlight-background); - outline: none; - border-radius: 4px; - caret-color: transparent; - } - - &[data-invalid] { - color: var(--invalid-color); - - &:focus { - background: var(--highlight-background-invalid); - color: var(--highlight-foreground); - } - } -} - -.react-aria-DateField { - .react-aria-FieldError { - font-size: 12px; - color: var(--invalid-color); - } - - [slot=description] { - font-size: 12px; - } -} diff --git a/packages/@react-spectrum/s2/src/DateField.tsx b/packages/@react-spectrum/s2/src/DateField.tsx index 90567759a4b..171a33468ef 100644 --- a/packages/@react-spectrum/s2/src/DateField.tsx +++ b/packages/@react-spectrum/s2/src/DateField.tsx @@ -10,7 +10,7 @@ import { ValidationResult } from 'react-aria-components'; -import './DateField.css'; + export interface DateFieldProps extends AriaDateFieldProps { diff --git a/packages/@react-spectrum/s2/src/DatePicker.css b/packages/@react-spectrum/s2/src/DatePicker.css deleted file mode 100644 index 8b5c81937ba..00000000000 --- a/packages/@react-spectrum/s2/src/DatePicker.css +++ /dev/null @@ -1,71 +0,0 @@ -@import './Button.css'; -@import './Popover.css'; -@import './Dialog.css'; -@import './DateField.css'; -@import './Calendar.css'; -@import './Form.css'; -@import "./theme.css"; - -.react-aria-DatePicker { - color: var(--text-color); - - .react-aria-Group { - display: flex; - width: fit-content; - align-items: center; - } - - .react-aria-Button { - background: var(--highlight-background); - color: var(--highlight-foreground); - border: 2px solid var(--field-background); - forced-color-adjust: none; - border-radius: 4px; - border: none; - margin-left: -1.929rem; - width: 1.429rem; - height: 1.429rem; - padding: 0; - font-size: 0.857rem; - box-sizing: content-box; - - &[data-pressed] { - box-shadow: none; - background: var(--highlight-background); - } - - &[data-focus-visible] { - outline: 2px solid var(--focus-ring-color); - outline-offset: 2px; - } - } - - .react-aria-DateInput { - padding: 4px 2.5rem 4px 8px; - } -} - -.react-aria-Popover[data-trigger=DatePicker] { - max-width: unset; -} - -.react-aria-DatePicker { - &[data-invalid] { - .react-aria-DateInput:after { - content: '🚫' / ''; - content: '🚫'; - alt: ' '; - flex: 1; - text-align: end; - } - } - - .react-aria-FieldError { - font-size: 12px; - color: var(--invalid-color); - } - - [slot=description] { - font-size: 12px; - } -} diff --git a/packages/@react-spectrum/s2/src/DatePicker.tsx b/packages/@react-spectrum/s2/src/DatePicker.tsx index 98f9faac7b2..38842244190 100644 --- a/packages/@react-spectrum/s2/src/DatePicker.tsx +++ b/packages/@react-spectrum/s2/src/DatePicker.tsx @@ -18,7 +18,7 @@ import { ValidationResult } from 'react-aria-components'; -import './DatePicker.css'; + export interface DatePickerProps extends AriaDatePickerProps { diff --git a/packages/@react-spectrum/s2/src/DateRangePicker.css b/packages/@react-spectrum/s2/src/DateRangePicker.css deleted file mode 100644 index 54780961ff1..00000000000 --- a/packages/@react-spectrum/s2/src/DateRangePicker.css +++ /dev/null @@ -1,104 +0,0 @@ -@import './Button.css'; -@import './Popover.css'; -@import './Dialog.css'; -@import './DateField.css'; -@import './RangeCalendar.css'; -@import './Form.css'; -@import "./theme.css"; - -.react-aria-DateRangePicker { - color: var(--text-color); - - .react-aria-Group { - display: flex; - align-items: center; - width: fit-content; - min-width: 220px; - max-width: 100%; - box-sizing: border-box; - overflow: auto; - position: relative; - padding: 4px 4px 4px 8px; - border: 1px solid var(--border-color); - border-radius: 6px; - background: var(--field-background); - white-space: nowrap; - - &[data-pressed] { - box-shadow: none; - background: var(--highlight-background); - } - - &[data-focus-within] { - outline: 2px solid var(--focus-ring-color); - outline-offset: -1px; - } - } - - [slot=start] + span { - padding: 0 4px; - } - - [slot=end] { - margin-right: 2rem; - flex: 1; - } - - .react-aria-Button { - background: var(--highlight-background); - color: var(--highlight-foreground); - border: 2px solid var(--field-background); - forced-color-adjust: none; - border-radius: 4px; - border: none; - margin-left: auto; - width: 1.429rem; - height: 1.429rem; - padding: 0; - font-size: 0.857rem; - box-sizing: content-box; - flex-shrink: 0; - position: sticky; - right: 0; - - &[data-focus-visible] { - outline: 2px solid var(--focus-ring-color); - outline-offset: 2px; - } - } - - .react-aria-DateInput { - width: unset; - min-width: unset; - padding: unset; - border: unset; - outline: unset; - } -} - -.react-aria-Popover[data-trigger=DateRangePicker] { - max-width: unset; -} - -.react-aria-DateRangePicker { - &[data-invalid] { - [slot=end]:after { - content: '🚫' / ''; - content: '🚫'; - alt: ' '; - flex: 1; - text-align: end; - margin-left: 1.5rem; - margin-right: -1.5rem; - } - } - - .react-aria-FieldError { - font-size: 12px; - color: var(--invalid-color); - } - - [slot=description] { - font-size: 12px; - } -} diff --git a/packages/@react-spectrum/s2/src/DateRangePicker.tsx b/packages/@react-spectrum/s2/src/DateRangePicker.tsx index 1ab735f606a..b2ed5f764fb 100644 --- a/packages/@react-spectrum/s2/src/DateRangePicker.tsx +++ b/packages/@react-spectrum/s2/src/DateRangePicker.tsx @@ -18,7 +18,7 @@ import { ValidationResult } from 'react-aria-components'; -import './DateRangePicker.css'; + export interface DateRangePickerProps extends AriaDateRangePickerProps { diff --git a/packages/@react-spectrum/s2/src/Dialog.css b/packages/@react-spectrum/s2/src/Dialog.css deleted file mode 100644 index 2ab800ca26c..00000000000 --- a/packages/@react-spectrum/s2/src/Dialog.css +++ /dev/null @@ -1,14 +0,0 @@ -@import "./theme.css"; -@import './Button.css'; -@import './TextField.css'; -@import './Modal.css'; - -.react-aria-Dialog { - outline: none; - padding: 30px; - - .react-aria-Heading[slot=title] { - line-height: 1em; - margin-top: 0; - } -} diff --git a/packages/@react-spectrum/s2/src/Dialog.tsx b/packages/@react-spectrum/s2/src/Dialog.tsx index 8748e3a4d54..c6d3cc92469 100644 --- a/packages/@react-spectrum/s2/src/Dialog.tsx +++ b/packages/@react-spectrum/s2/src/Dialog.tsx @@ -1,5 +1,5 @@ import {Dialog as RACDialog, DialogProps} from 'react-aria-components'; -import './Dialog.css'; + export function Dialog(props: DialogProps) { return ; diff --git a/packages/@react-spectrum/s2/src/Form.css b/packages/@react-spectrum/s2/src/Form.css deleted file mode 100644 index 37c01bfd6fa..00000000000 --- a/packages/@react-spectrum/s2/src/Form.css +++ /dev/null @@ -1,32 +0,0 @@ -@import "./theme.css"; -@import './TextField.css'; -@import './Button.css'; - -.react-aria-Form { - display: flex; - flex-direction: column; - align-items: start; - gap: 8px; -} - -.react-aria-Form [role=alert] { - border: 2px solid var(--invalid-color); - background: var(--overlay-background); - border-radius: 6px; - padding: 12px; - max-width: 250px; - outline: none; - - &:focus-visible { - outline: 2px solid var(--focus-ring-color); - outline-offset: 2px; - } - - h3 { - margin-top: 0; - } - - p { - margin-bottom: 0; - } -} diff --git a/packages/@react-spectrum/s2/src/Form.tsx b/packages/@react-spectrum/s2/src/Form.tsx index 2a7ad16bee3..789c3ee9b39 100644 --- a/packages/@react-spectrum/s2/src/Form.tsx +++ b/packages/@react-spectrum/s2/src/Form.tsx @@ -1,5 +1,5 @@ import {Form as RACForm, FormProps} from 'react-aria-components'; -import './Form.css'; + export function Form(props: FormProps) { return ; diff --git a/packages/@react-spectrum/s2/src/GridList.css b/packages/@react-spectrum/s2/src/GridList.css deleted file mode 100644 index 0ec823d91cf..00000000000 --- a/packages/@react-spectrum/s2/src/GridList.css +++ /dev/null @@ -1,184 +0,0 @@ -@import './Button.css'; -@import './Checkbox.css'; -@import './ToggleButton.css'; -@import "./theme.css"; - -.react-aria-GridList { - display: flex; - flex-direction: column; - gap: 2px; - max-height: inherit; - overflow: auto; - padding: 4px; - border: 1px solid var(--border-color); - border-radius: 6px; - background: var(--overlay-background); - forced-color-adjust: none; - outline: none; - width: 250px; - max-height: 300px; - min-height: 100px; - box-sizing: border-box; - - &[data-focus-visible] { - outline: 2px solid var(--focus-ring-color); - outline-offset: -1px; - } - - .react-aria-GridListItem { - display: flex; - align-items: center; - gap: 0.571rem; - min-height: 28px; - padding: 0.286rem 0.286rem 0.286rem 0.571rem; - border-radius: 6px; - outline: none; - cursor: default; - color: var(--text-color); - font-size: 1.072rem; - position: relative; - transform: translateZ(0); - - &[data-focus-visible] { - outline: 2px solid var(--focus-ring-color); - outline-offset: -2px; - } - - &[data-pressed] { - background: var(--gray-100); - } - - &[data-selected] { - background: var(--highlight-background); - color: var(--highlight-foreground); - --focus-ring-color: var(--highlight-foreground); - - &[data-focus-visible] { - outline-color: var(--highlight-foreground); - outline-offset: -4px; - } - - .react-aria-Button { - color: var(--highlight-foreground); - --highlight-hover: rgb(255 255 255 / 0.1); - --highlight-pressed: rgb(255 255 255 / 0.2); - } - } - - &[data-disabled] { - color: var(--text-color-disabled); - } - - .react-aria-Button:not([slot]) { - margin-left: auto; - } - - .react-aria-Button { - background: transparent; - border: none; - font-size: 1.2rem; - line-height: 1.2em; - padding: 0.286rem 0.429rem; - transition: background 200ms; - - &[data-hovered] { - background: var(--highlight-hover); - } - - &[data-pressed] { - background: var(--highlight-pressed); - box-shadow: none; - } - } - } - - /* join selected items if :has selector is supported */ - @supports selector(:has(.foo)) { - gap: 0; - - .react-aria-GridListItem[data-selected]:has(+ [data-selected]), - .react-aria-GridListItem[data-selected]:has(+ .react-aria-DropIndicator + [data-selected]) { - border-end-start-radius: 0; - border-end-end-radius: 0; - } - - .react-aria-GridListItem[data-selected] + [data-selected], - .react-aria-GridListItem[data-selected] + .react-aria-DropIndicator + [data-selected] { - border-start-start-radius: 0; - border-start-end-radius: 0; - } - } - - :where(.react-aria-GridListItem) .react-aria-Checkbox { - --selected-color: var(--highlight-foreground); - --selected-color-pressed: var(--highlight-foreground-pressed); - --checkmark-color: var(--highlight-background); - --background-color: var(--highlight-background); - } -} - -.react-aria-GridListItem[data-href] { - cursor: pointer; -} - -.react-aria-GridList { - &[data-empty] { - align-items: center; - justify-content: center; - font-style: italic; - } -} - -.react-aria-GridListItem { - &[data-allows-dragging] { - padding-left: 4px; - } - - &[data-dragging] { - opacity: 0.6; - } - - [slot=drag] { - all: unset; - width: 15px; - text-align: center; - - &[data-focus-visible] { - border-radius: 4px; - outline: 2px solid var(--focus-ring-color); - } - } -} - -.react-aria-DropIndicator { - &[data-drop-target] { - outline: 1px solid var(--highlight-background); - } - - @supports not selector(:has(.foo)) { - /* Undo gap in browsers that don't support :has */ - margin-bottom: -2px; - } -} - -.react-aria-GridList[data-drop-target] { - outline: 2px solid var(--highlight-background); - outline-offset: -1px; - background: var(--highlight-overlay); -} - -.react-aria-GridListItem[data-drop-target] { - outline: 2px solid var(--highlight-background); - background:var(--highlight-overlay); -} - -.react-aria-DropIndicator { - &[data-drop-target] { - outline: 1px solid var(--highlight-background); - } - - @supports not selector(:has(.foo)) { - /* Undo gap in browsers that don't support :has */ - margin-bottom: -2px; - } -} diff --git a/packages/@react-spectrum/s2/src/GridList.tsx b/packages/@react-spectrum/s2/src/GridList.tsx index 4b2704780f9..2d82be451b0 100644 --- a/packages/@react-spectrum/s2/src/GridList.tsx +++ b/packages/@react-spectrum/s2/src/GridList.tsx @@ -7,7 +7,7 @@ import { } from 'react-aria-components'; import {Checkbox} from './Checkbox'; -import './GridList.css'; + export function GridList( { children, ...props }: GridListProps diff --git a/packages/@react-spectrum/s2/src/Link.css b/packages/@react-spectrum/s2/src/Link.css deleted file mode 100644 index 6e582149850..00000000000 --- a/packages/@react-spectrum/s2/src/Link.css +++ /dev/null @@ -1,32 +0,0 @@ -@import "./theme.css"; - -.react-aria-Link { - color: var(--link-color); - font-size: 18px; - transition: all 200ms; - text-decoration: underline; - cursor: pointer; - outline: none; - position: relative; - - &[data-hovered] { - text-decoration-style: wavy; - } - - &[data-pressed] { - color: var(--link-color-pressed); - } - - &[data-focus-visible]:after { - content: ''; - position: absolute; - inset: -3px -6px; - border-radius: 6px; - border: 2px solid var(--focus-ring-color); - } - - &[data-disabled] { - cursor: default; - color: var(--text-color-disabled); - } -} diff --git a/packages/@react-spectrum/s2/src/Link.tsx b/packages/@react-spectrum/s2/src/Link.tsx index 757ebcb1a58..d683748b067 100644 --- a/packages/@react-spectrum/s2/src/Link.tsx +++ b/packages/@react-spectrum/s2/src/Link.tsx @@ -1,5 +1,5 @@ import {Link as RACLink, LinkProps} from 'react-aria-components'; -import './Link.css'; + export function Link(props: LinkProps) { return ; diff --git a/packages/@react-spectrum/s2/src/ListBox.css b/packages/@react-spectrum/s2/src/ListBox.css deleted file mode 100644 index 61add0020a1..00000000000 --- a/packages/@react-spectrum/s2/src/ListBox.css +++ /dev/null @@ -1,223 +0,0 @@ -@import './Checkbox.css'; -@import "./theme.css"; - -.react-aria-ListBox { - display: flex; - flex-direction: column; - max-height: inherit; - overflow: auto; - padding: 2px; - border: 1px solid var(--border-color); - border-radius: 6px; - background: var(--overlay-background); - forced-color-adjust: none; - outline: none; - width: 250px; - max-height: 300px; - min-height: 100px; - box-sizing: border-box; - - &[data-focus-visible] { - outline: 2px solid var(--focus-ring-color); - outline-offset: -1px; - } -} - -.react-aria-ListBoxItem { - margin: 2px; - padding: 0.286rem 0.571rem; - border-radius: 6px; - outline: none; - cursor: default; - color: var(--text-color); - font-size: 1.072rem; - position: relative; - display: flex; - flex-direction: column; - - &[data-focus-visible] { - outline: 2px solid var(--focus-ring-color); - outline-offset: -2px; - } - - &[data-selected] { - background: var(--highlight-background); - color: var(--highlight-foreground); - - &[data-focus-visible] { - outline-color: var(--highlight-foreground); - outline-offset: -4px; - } - } -} - -.react-aria-ListBoxItem[href] { - text-decoration: none; - cursor: pointer; - -webkit-touch-callout: none; -} - -.react-aria-ListBox { - .react-aria-Section:not(:first-child) { - margin-top: 12px; - } - - .react-aria-Header { - font-size: 1.143rem; - font-weight: bold; - padding: 0 0.714rem; - } -} - -.react-aria-ListBoxItem { - [slot=label] { - font-weight: bold; - } - - [slot=description] { - font-size: small; - } -} - -.react-aria-ListBox[data-orientation=horizontal], -.react-aria-ListBox[data-layout=grid] { - flex-direction: row; - width: fit-content; - max-width: 100%; - padding: 4px; - - .react-aria-ListBoxItem { - position: relative; - margin: 0; - padding: 4px; - - & img { - object-fit: cover; - aspect-ratio: 1/1; - max-width: 150px; - margin-bottom: 4px; - border-radius: 4px; - transition: box-shadow 200ms; - } - - &[data-hovered] { - & img { - box-shadow: 0 0 8px rgb(from slateblue r g b / 0.5); - } - } - - &[data-selected] { - background: none; - color: inherit; - - & img { - box-shadow: 0 0 12px rgb(from slateblue r g b / 0.8); - } - - &:after { - content: '✓'; - content: '✓' / ''; - alt: ' '; - position: absolute; - top: 8px; - right: 8px; - background: var(--highlight-background); - border: 2px solid var(--highlight-foreground); - color: var(--highlight-foreground); - width: 22px; - height: 22px; - border-radius: 22px; - box-sizing: border-box; - font-size: 14px; - line-height: 1em; - display: flex; - align-items: center; - justify-content: center; - box-shadow: 0 0 8px rgb(0 0 0 / .5); - } - } - } -} - -.react-aria-ListBox[data-layout=grid] { - display: grid; - grid-template-columns: 1fr 1fr; - scrollbar-gutter: stable; -} - -.react-aria-ListBox[data-layout=grid][data-orientation=horizontal] { - width: 100%; - max-width: none; - display: grid; - grid-auto-flow: column; - grid-template-rows: 58px 58px; - grid-template-columns: none; - grid-auto-columns: 250px; - max-height: 200px; - gap: 8px; - - .react-aria-ListBoxItem { - display: grid; - grid-template-areas: "image ." - "image title" - "image description" - "image ."; - grid-template-columns: auto 1fr; - grid-template-rows: 1fr auto auto 1fr; - column-gap: 8px; - - & img { - width: 50px; - height: 50px; - grid-area: image; - margin-bottom: 0; - } - - [slot=label] { - grid-area: title; - } - - [slot=description] { - grid-area: description; - } - } -} - -.react-aria-ListBoxItem { - &[data-disabled] { - color: var(--text-color-disabled); - } -} - -.react-aria-ListBox { - &[data-empty] { - align-items: center; - justify-content: center; - font-style: italic; - } -} - -.react-aria-ListBoxItem { - &[data-dragging] { - opacity: 0.6; - } -} - -.react-aria-DropIndicator[data-drop-target] { - outline: 1px solid var(--highlight-background); -} - -.react-aria-ListBox[data-drop-target] { - outline: 2px solid var(--highlight-background); - outline-offset: -1px; - background: var(--highlight-overlay) -} - -.react-aria-ListBoxItem[data-drop-target] { - outline: 2px solid var(--highlight-background); - background: var(--highlight-overlay) -} - -.react-aria-DropIndicator[data-drop-target] { - outline: 1px solid var(--highlight-background); -} diff --git a/packages/@react-spectrum/s2/src/ListBox.tsx b/packages/@react-spectrum/s2/src/ListBox.tsx index 6a0c1b4d755..73ef2786bdb 100644 --- a/packages/@react-spectrum/s2/src/ListBox.tsx +++ b/packages/@react-spectrum/s2/src/ListBox.tsx @@ -5,7 +5,7 @@ import { ListBoxProps } from 'react-aria-components'; -import './ListBox.css'; + export function ListBox( { children, ...props }: ListBoxProps diff --git a/packages/@react-spectrum/s2/src/Menu.css b/packages/@react-spectrum/s2/src/Menu.css deleted file mode 100644 index a526538916f..00000000000 --- a/packages/@react-spectrum/s2/src/Menu.css +++ /dev/null @@ -1,107 +0,0 @@ -@import './Button.css'; -@import './Popover.css'; -@import "./theme.css"; - -.react-aria-Menu { - max-height: inherit; - box-sizing: border-box; - overflow: auto; - padding: 2px; - min-width: 150px; - box-sizing: border-box; - outline: none; -} - -.react-aria-MenuItem { - margin: 2px; - padding: 0.286rem 0.571rem; - border-radius: 6px; - outline: none; - cursor: default; - color: var(--text-color); - font-size: 1.072rem; - position: relative; - display: grid; - grid-template-areas: "label kbd" - "desc kbd"; - align-items: center; - column-gap: 20px; - forced-color-adjust: none; - - &[data-focused] { - background: var(--highlight-background); - color: var(--highlight-foreground); - } -} - -.react-aria-MenuItem { - &[data-selection-mode] { - padding-left: 24px; - - &::before { - position: absolute; - left: 4px; - font-weight: 600; - } - - &[data-selection-mode=multiple][data-selected]::before { - content: '✓'; - content: '✓' / ''; - alt: ' '; - position: absolute; - left: 4px; - font-weight: 600; - } - - &[data-selection-mode=single][data-selected]::before { - content: '●'; - content: '●' / ''; - transform: scale(0.7) - } - } -} - -.react-aria-MenuItem[href] { - text-decoration: none; - cursor: pointer; -} - -.react-aria-Menu { - .react-aria-Section:not(:first-child) { - margin-top: 12px; - } - - .react-aria-Header { - font-size: 1.143rem; - font-weight: bold; - padding: 0 0.714rem; - } - - .react-aria-Separator { - height: 1px; - background: var(--border-color); - margin: 2px 4px; - } -} - -.react-aria-MenuItem { - [slot=label] { - font-weight: bold; - grid-area: label; - } - - [slot=description] { - font-size: small; - grid-area: desc; - } - - kbd { - grid-area: kbd; - font-family: monospace; - text-align: end; - } - - &[data-disabled] { - color: var(--text-color-disabled); - } -} diff --git a/packages/@react-spectrum/s2/src/Menu.tsx b/packages/@react-spectrum/s2/src/Menu.tsx index de50f01b8ae..0563cd19527 100644 --- a/packages/@react-spectrum/s2/src/Menu.tsx +++ b/packages/@react-spectrum/s2/src/Menu.tsx @@ -9,7 +9,7 @@ import { Popover } from 'react-aria-components'; -import './Menu.css'; + export interface MenuButtonProps extends MenuProps, Omit { diff --git a/packages/@react-spectrum/s2/src/Meter.css b/packages/@react-spectrum/s2/src/Meter.css deleted file mode 100644 index 6fe0833fe62..00000000000 --- a/packages/@react-spectrum/s2/src/Meter.css +++ /dev/null @@ -1,37 +0,0 @@ -@import "./theme.css"; - -.react-aria-Meter { - --fill-color: forestgreen; - - display: grid; - grid-template-areas: "label value" - "bar bar"; - grid-template-columns: 1fr auto; - gap: 4px; - width: 250px; - color: var(--text-color); - - .value { - grid-area: value; - } - - .bar { - grid-area: bar; - box-shadow: inset 0px 0px 0px 1px var(--border-color); - forced-color-adjust: none; - height: 10px; - border-radius: 5px; - overflow: hidden; - } - - .fill { - background: var(--fill-color); - height: 100%; - } -} - -@media (forced-colors: active) { - .react-aria-Meter { - --fill-color: Highlight; - } -} diff --git a/packages/@react-spectrum/s2/src/Meter.tsx b/packages/@react-spectrum/s2/src/Meter.tsx index 6566ce5d717..4bd102d8e5d 100644 --- a/packages/@react-spectrum/s2/src/Meter.tsx +++ b/packages/@react-spectrum/s2/src/Meter.tsx @@ -4,7 +4,7 @@ import { MeterProps as AriaMeterProps } from 'react-aria-components'; -import './Meter.css'; + export interface MeterProps extends AriaMeterProps { label?: string; diff --git a/packages/@react-spectrum/s2/src/Modal.css b/packages/@react-spectrum/s2/src/Modal.css deleted file mode 100644 index ade2c99e3d3..00000000000 --- a/packages/@react-spectrum/s2/src/Modal.css +++ /dev/null @@ -1,83 +0,0 @@ -@import './Button.css'; -@import './TextField.css'; -@import "./theme.css"; - -.react-aria-ModalOverlay { - position: fixed; - top: 0; - left: 0; - width: 100vw; - height: var(--visual-viewport-height); - background: rgba(0 0 0 / .5); - display: flex; - align-items: center; - justify-content: center; - - &[data-entering] { - animation: modal-fade 200ms; - } - - &[data-exiting] { - animation: modal-fade 150ms reverse ease-in; - } -} - -.react-aria-Modal { - box-shadow: 0 8px 20px rgba(0 0 0 / 0.1); - border-radius: 6px; - background: var(--overlay-background); - color: var(--text-color); - border: 1px solid var(--gray-400); - outline: none; - max-width: 300px; - - &[data-entering] { - animation: modal-zoom 300ms cubic-bezier(0.175, 0.885, 0.32, 1.275); - } - - .react-aria-TextField { - margin-bottom: 8px; - } -} - -@keyframes modal-fade { - from { - opacity: 0; - } - - to { - opacity: 1; - } -} - -@keyframes modal-zoom { - from { - transform: scale(0.8); - } - - to { - transform: scale(1); - } -} - -@keyframes mymodal-blur { - from { - background: rgba(45 0 0 / 0); - backdrop-filter: blur(0); - } - - to { - background: rgba(45 0 0 / .3); - backdrop-filter: blur(10px); - } -} - -@keyframes mymodal-slide { - from { - transform: translateX(100%); - } - - to { - transform: translateX(0); - } -} diff --git a/packages/@react-spectrum/s2/src/Modal.tsx b/packages/@react-spectrum/s2/src/Modal.tsx index 8482e84a375..d0d97da8eaf 100644 --- a/packages/@react-spectrum/s2/src/Modal.tsx +++ b/packages/@react-spectrum/s2/src/Modal.tsx @@ -1,5 +1,5 @@ import {Modal as RACModal, ModalOverlayProps} from 'react-aria-components'; -import './Modal.css'; + export function Modal(props: ModalOverlayProps) { return ; diff --git a/packages/@react-spectrum/s2/src/NumberField.css b/packages/@react-spectrum/s2/src/NumberField.css deleted file mode 100644 index 25806bc1cc1..00000000000 --- a/packages/@react-spectrum/s2/src/NumberField.css +++ /dev/null @@ -1,89 +0,0 @@ -@import './Button.css'; -@import './Form.css'; -@import "./theme.css"; - -.react-aria-NumberField { - margin-bottom: 8px; - color: var(--text-color); - - .react-aria-Group { - display: flex; - width: fit-content; - border-radius: 4px; - - &[data-focus-within] { - outline: 1px solid var(--focus-ring-color); - .react-aria-Input, - .react-aria-Button { - border-color: var(--focus-ring-color); - } - } - } - - .react-aria-Button { - font-size: 1.4rem; - width: 2.3rem; - padding: 0; - - &[slot=decrement] { - border-start-end-radius: 0; - border-end-end-radius: 0; - } - - &[slot=increment] { - border-start-start-radius: 0; - border-end-start-radius: 0; - } - } - - .react-aria-Input { - background: var(--field-background); - border: 1px solid var(--border-color); - border-radius: 0; - color: var(--field-text-color); - margin: 0 -1px; - z-index: 1; - font-size: 1rem; - padding: 0.429rem 0.571rem; - outline: none; - width: 6rem; - flex: 1; - } - - &[data-invalid] { - .react-aria-Input, - .react-aria-Button { - border-color: var(--invalid-color); - } - - &:focus-within { - .react-aria-Input, - .react-aria-Button { - border-color: var(--focus-ring-color); - } - } - } - - .react-aria-FieldError { - font-size: 12px; - color: var(--invalid-color); - } - - [slot=description] { - font-size: 12px; - } - - .react-aria-Button { - &[data-disabled] { - border-color: var(--border-color-disabled); - color: var(--text-color-disabled); - } - } - - .react-aria-Input { - &[data-disabled] { - border-color: var(--border-color-disabled); - color: var(--text-color-disabled); - } - } -} diff --git a/packages/@react-spectrum/s2/src/NumberField.tsx b/packages/@react-spectrum/s2/src/NumberField.tsx index 67d553660c9..54a28a0f9f1 100644 --- a/packages/@react-spectrum/s2/src/NumberField.tsx +++ b/packages/@react-spectrum/s2/src/NumberField.tsx @@ -10,7 +10,7 @@ import { ValidationResult } from 'react-aria-components'; -import './NumberField.css'; + export interface NumberFieldProps extends AriaNumberFieldProps { label?: string; diff --git a/packages/@react-spectrum/s2/src/Popover.css b/packages/@react-spectrum/s2/src/Popover.css deleted file mode 100644 index 0ada2052871..00000000000 --- a/packages/@react-spectrum/s2/src/Popover.css +++ /dev/null @@ -1,88 +0,0 @@ -@import './Button.css'; -@import './Dialog.css'; -@import './Switch.css'; -@import "./theme.css"; - -.react-aria-Popover { - --background-color: var(--overlay-background); - - border: 1px solid var(--border-color); - box-shadow: 0 8px 20px rgba(0 0 0 / 0.1); - border-radius: 6px; - background: var(--background-color); - color: var(--text-color); - outline: none; - max-width: 250px; - box-sizing: border-box; - - .react-aria-OverlayArrow svg { - display: block; - fill: var(--background-color); - stroke: var(--border-color); - stroke-width: 1px; - } - - &[data-placement=top] { - --origin: translateY(8px); - - &:has(.react-aria-OverlayArrow) { - margin-bottom: 6px; - } - } - - &[data-placement=bottom] { - --origin: translateY(-8px); - - &:has(.react-aria-OverlayArrow) { - margin-top: 6px; - } - - .react-aria-OverlayArrow svg { - transform: rotate(180deg); - } - } - - &[data-placement=right] { - --origin: translateX(-8px); - - &:has(.react-aria-OverlayArrow) { - margin-left: 6px; - } - - .react-aria-OverlayArrow svg { - transform: rotate(90deg); - } - } - - &[data-placement=left] { - --origin: translateX(8px); - - &:has(.react-aria-OverlayArrow) { - margin-right: 6px; - } - - .react-aria-OverlayArrow svg { - transform: rotate(-90deg); - } - } - - &[data-entering] { - animation: popover-slide 200ms; - } - - &[data-exiting] { - animation: popover-slide 200ms reverse ease-in; - } -} - -@keyframes popover-slide { - from { - transform: var(--origin); - opacity: 0; - } - - to { - transform: translateY(0); - opacity: 1; - } -} diff --git a/packages/@react-spectrum/s2/src/Popover.tsx b/packages/@react-spectrum/s2/src/Popover.tsx index df09f070916..22895feb3ca 100644 --- a/packages/@react-spectrum/s2/src/Popover.tsx +++ b/packages/@react-spectrum/s2/src/Popover.tsx @@ -5,7 +5,7 @@ import { PopoverProps as AriaPopoverProps } from 'react-aria-components'; -import './Popover.css'; + export interface PopoverProps extends Omit { children: React.ReactNode; diff --git a/packages/@react-spectrum/s2/src/ProgressBar.css b/packages/@react-spectrum/s2/src/ProgressBar.css deleted file mode 100644 index de35556b806..00000000000 --- a/packages/@react-spectrum/s2/src/ProgressBar.css +++ /dev/null @@ -1,49 +0,0 @@ -@import "./theme.css"; - -.react-aria-ProgressBar { - display: grid; - grid-template-areas: "label value" - "bar bar"; - grid-template-columns: 1fr auto; - gap: 4px; - width: 250px; - color: var(--text-color); - - .value { - grid-area: value; - } - - .bar { - grid-area: bar; - box-shadow: inset 0px 0px 0px 1px var(--border-color); - forced-color-adjust: none; - height: 10px; - border-radius: 5px; - overflow: hidden; - will-change: transform; - } - - .fill { - background: var(--highlight-background); - height: 100%; - } - - &:not([aria-valuenow]) { - .fill { - width: 120px; - border-radius: inherit; - animation: indeterminate 1.5s infinite ease-in-out; - will-change: transform; - } - } -} - -@keyframes indeterminate { - from { - transform: translateX(-100%); - } - - to { - transform: translateX(250px); - } -} diff --git a/packages/@react-spectrum/s2/src/ProgressBar.tsx b/packages/@react-spectrum/s2/src/ProgressBar.tsx index 3aa50a41908..bb31da8fda4 100644 --- a/packages/@react-spectrum/s2/src/ProgressBar.tsx +++ b/packages/@react-spectrum/s2/src/ProgressBar.tsx @@ -4,7 +4,7 @@ import { ProgressBarProps as AriaProgressBarProps } from 'react-aria-components'; -import './ProgressBar.css'; + export interface ProgressBarProps extends AriaProgressBarProps { label?: string; diff --git a/packages/@react-spectrum/s2/src/RadioGroup.css b/packages/@react-spectrum/s2/src/RadioGroup.css deleted file mode 100644 index 883ce0322ae..00000000000 --- a/packages/@react-spectrum/s2/src/RadioGroup.css +++ /dev/null @@ -1,87 +0,0 @@ -@import './Button.css'; -@import './Form.css'; -@import "./theme.css"; - -.react-aria-RadioGroup { - display: flex; - flex-direction: column; - gap: 8px; - color: var(--text-color); -} - -.react-aria-Radio { - display: flex; - align-items: center; - gap: 0.571rem; - font-size: 1.143rem; - color: var(--text-color); - forced-color-adjust: none; - - &:before { - content: ''; - display: block; - width: 1.286rem; - height: 1.286rem; - box-sizing: border-box; - border: 0.143rem solid var(--border-color); - background: var(--field-background); - border-radius: 1.286rem; - transition: all 200ms; - } - - &[data-pressed]:before { - border-color: var(--border-color-pressed); - } - - &[data-selected] { - &:before { - border-color: var(--highlight-background); - border-width: 0.429rem; - } - - &[data-pressed]:before { - border-color: var(--highlight-background-pressed); - } - } - - &[data-focus-visible]:before { - outline: 2px solid var(--focus-ring-color); - outline-offset: 2px; - } - - &[data-invalid] { - &:before { - border-color: var(--invalid-color); - } - - &[data-pressed]:before { - border-color: var(--invalid-color-pressed); - } - } -} - -.react-aria-RadioGroup { - .react-aria-FieldError { - font-size: 12px; - color: var(--invalid-color); - } - - [slot=description] { - font-size: 12px; - } - - &[data-orientation=horizontal] { - flex-direction: row; - align-items: center; - } -} - -.react-aria-Radio { - &[data-disabled] { - color: var(--text-color-disabled); - - &:before { - border-color: var(--border-color-disabled); - } - } -} diff --git a/packages/@react-spectrum/s2/src/RadioGroup.tsx b/packages/@react-spectrum/s2/src/RadioGroup.tsx index a7e52ddf255..308fbba6e84 100644 --- a/packages/@react-spectrum/s2/src/RadioGroup.tsx +++ b/packages/@react-spectrum/s2/src/RadioGroup.tsx @@ -7,7 +7,7 @@ import { ValidationResult } from 'react-aria-components'; -import './RadioGroup.css'; + export interface RadioGroupProps extends Omit { children?: React.ReactNode; diff --git a/packages/@react-spectrum/s2/src/RangeCalendar.css b/packages/@react-spectrum/s2/src/RangeCalendar.css deleted file mode 100644 index aaa56e392c5..00000000000 --- a/packages/@react-spectrum/s2/src/RangeCalendar.css +++ /dev/null @@ -1,103 +0,0 @@ -@import './Button.css'; -@import "./theme.css"; - -.react-aria-RangeCalendar { - width: fit-content; - max-width: 100%; - color: var(--text-color); - - & header { - display: flex; - align-items: center; - margin: 0 4px .5rem 4px; - - .react-aria-Heading { - flex: 1; - margin: 0; - text-align: center; - font-size: 1.375rem; - } - } - - .react-aria-Button { - width: 2rem; - height: 2rem; - padding: 0; - } - - & table { - border-collapse: collapse; - - & td { - padding: 2px 0; - } - } - - .react-aria-CalendarCell { - width: 2.286rem; - line-height: 2.286rem; - text-align: center; - border-radius: 6px; - cursor: default; - outline: none; - forced-color-adjust: none; - - &[data-outside-month] { - display: none; - } - - &[data-pressed] { - background: var(--gray-100); - } - - &[data-focus-visible] { - outline: 2px solid var(--highlight-background); - outline-offset: -2px; - } - - &[data-selected] { - background: var(--highlight-background); - color: var(--highlight-foreground); - border-radius: 0; - - &[data-focus-visible] { - outline-color: var(--highlight-foreground); - outline-offset: -3px; - } - } - - &[data-selection-start] { - border-start-start-radius: 6px; - border-end-start-radius: 6px; - } - - &[data-selection-end] { - border-start-end-radius: 6px; - border-end-end-radius: 6px; - } - } - - .react-aria-CalendarCell { - &[data-disabled] { - color: var(--text-color-disabled); - } - } - - .react-aria-CalendarCell { - - &[data-unavailable] { - text-decoration: line-through; - color: var(--invalid-color); - } - - &[data-invalid] { - background: var(--invalid-color); - color: var(--highlight-foreground); - } - } - - [slot=errorMessage] { - font-size: 12px; - color: var(--invalid-color); - } -} diff --git a/packages/@react-spectrum/s2/src/RangeCalendar.tsx b/packages/@react-spectrum/s2/src/RangeCalendar.tsx index 2ce2aca757c..05ebb88f4a8 100644 --- a/packages/@react-spectrum/s2/src/RangeCalendar.tsx +++ b/packages/@react-spectrum/s2/src/RangeCalendar.tsx @@ -9,7 +9,7 @@ import { Text } from 'react-aria-components'; -import './RangeCalendar.css'; + export interface RangeCalendarProps extends AriaRangeCalendarProps { diff --git a/packages/@react-spectrum/s2/src/SearchField.css b/packages/@react-spectrum/s2/src/SearchField.css deleted file mode 100644 index 3045861c1e8..00000000000 --- a/packages/@react-spectrum/s2/src/SearchField.css +++ /dev/null @@ -1,83 +0,0 @@ -@import './Button.css'; -@import './Form.css'; -@import "./theme.css"; - -.react-aria-SearchField { - display: grid; - grid-template-areas: "label label" - "input button" - "help help"; - grid-template-columns: 1fr auto; - align-items: center; - width: fit-content; - color: var(--text-color); - - .react-aria-Input { - grid-area: input; - padding: 0.286rem 1.714rem 0.286rem 0.286rem; - margin: 0; - border: 1px solid var(--border-color); - border-radius: 6px; - background: var(--field-background); - font-size: 1.143rem; - color: var(--field-text-color); - - &::-webkit-search-cancel-button, - &::-webkit-search-decoration { - -webkit-appearance: none; - } - - &[data-focused] { - outline: 2px solid var(--focus-ring-color); - outline-offset: -1px; - } - } - - .react-aria-Button { - grid-area: button; - width: 1.143rem; - height: 1.143rem; - border-radius: 1.143rem; - margin-left: -1.429rem; - font-size: 0.857rem; - line-height: 0.857rem; - vertical-align: middle; - text-align: center; - background: var(--gray-500); - color: var(--gray-50); - border: none; - padding: 0; - - &[data-pressed] { - background: var(--gray-600); - } - } - - &[data-empty] button { - display: none; - } - - .react-aria-Input{ - &[data-invalid] { - border-color: var(--invalid-color); - } - } - - .react-aria-FieldError { - grid-area: help; - font-size: 12px; - color: var(--invalid-color); - } - - [slot=description] { - grid-area: help; - font-size: 12px; - } - - .react-aria-Input { - &[data-disabled] { - border-color: var(--border-color-disabled); - color: var(--text-color-disabled); - } - } -} diff --git a/packages/@react-spectrum/s2/src/SearchField.tsx b/packages/@react-spectrum/s2/src/SearchField.tsx index f7782021673..e48ec3a6dfa 100644 --- a/packages/@react-spectrum/s2/src/SearchField.tsx +++ b/packages/@react-spectrum/s2/src/SearchField.tsx @@ -9,7 +9,7 @@ import { ValidationResult } from 'react-aria-components'; -import './SearchField.css'; + export interface SearchFieldProps extends AriaSearchFieldProps { label?: string; diff --git a/packages/@react-spectrum/s2/src/Select.css b/packages/@react-spectrum/s2/src/Select.css deleted file mode 100644 index ec6765e2b0b..00000000000 --- a/packages/@react-spectrum/s2/src/Select.css +++ /dev/null @@ -1,139 +0,0 @@ -@import './ListBox.css'; -@import './Popover.css'; -@import './Button.css'; -@import './Form.css'; -@import "./theme.css"; - -.react-aria-Select { - color: var(--text-color); - - .react-aria-Button { - box-shadow: 0 1px 2px rgba(0 0 0 / 0.1); - border-radius: 6px; - font-size: 1.072rem; - padding: 0.286rem 0.286rem 0.286rem 0.571rem; - display: flex; - align-items: center; - max-width: 250px; - - &[data-focus-visible] { - outline: 2px solid var(--focus-ring-color); - outline-offset: -1px; - } - } - - .react-aria-SelectValue { - &[data-placeholder] { - font-style: italic; - color: var(--text-color-placeholder); - } - } - - span[aria-hidden] { - width: 1.5rem; - line-height: 1.375rem; - margin-left: 1rem; - padding: 1px; - background: var(--highlight-background); - color: var(--highlight-foreground); - forced-color-adjust: none; - border-radius: 4px; - font-size: 0.857rem; - } -} - -.react-aria-Popover[data-trigger=Select] { - min-width: var(--trigger-width); - - .react-aria-ListBox { - display: block; - width: unset; - max-height: inherit; - min-height: unset; - border: none; - - .react-aria-Header { - padding-left: 1.571rem; - } - } - - .react-aria-ListBoxItem { - padding: 0.286rem 0.571rem 0.286rem 1.571rem; - - &[data-focus-visible] { - outline: none; - } - - &[data-selected] { - font-weight: 600; - background: unset; - color: var(--text-color); - - &::before { - content: '✓'; - content: '✓' / ''; - alt: ' '; - position: absolute; - top: 4px; - left: 4px; - } - } - - &[data-focused], - &[data-pressed] { - background: var(--highlight-background); - color: var(--highlight-foreground); - } - } -} - -.react-aria-ListBoxItem[href] { - text-decoration: none; - cursor: pointer; -} - -.react-aria-Select { - .react-aria-SelectValue { - [slot=description] { - display: none; - } - } - - .react-aria-Button { - &[data-disabled] { - border-color: var(--border-color-disabled); - color: var(--text-color-disabled); - span[aria-hidden] { - background: var(--border-color-disabled); - color: var(--text-color-disabled); - } - - .react-aria-SelectValue { - &[data-placeholder] { - color: var(--text-color-disabled); - } - } - } - } -} - -@media (forced-colors: active) { - .react-aria-Select { - .react-aria-Button { - &[data-disabled] span[aria-hidden] { - background: 0 0; - } - } - } -} - -.react-aria-Select { - .react-aria-FieldError { - font-size: 12px; - color: var(--invalid-color); - } - - [slot=description] { - font-size: 12px; - } -} diff --git a/packages/@react-spectrum/s2/src/Select.tsx b/packages/@react-spectrum/s2/src/Select.tsx index ef43c3c5f39..964b5c91407 100644 --- a/packages/@react-spectrum/s2/src/Select.tsx +++ b/packages/@react-spectrum/s2/src/Select.tsx @@ -13,7 +13,7 @@ import { ValidationResult } from 'react-aria-components'; -import './Select.css'; + export interface SelectProps extends Omit, 'children'> { diff --git a/packages/@react-spectrum/s2/src/Slider.css b/packages/@react-spectrum/s2/src/Slider.css deleted file mode 100644 index b1ad753606f..00000000000 --- a/packages/@react-spectrum/s2/src/Slider.css +++ /dev/null @@ -1,106 +0,0 @@ -@import './NumberField.css'; -@import "./theme.css"; - -.react-aria-Slider { - display: grid; - grid-template-areas: "label output" - "track track"; - grid-template-columns: 1fr auto; - max-width: 300px; - color: var(--text-color); - - .react-aria-Label { - grid-area: label; - } - - .react-aria-SliderOutput { - grid-area: output; - } - - .react-aria-SliderTrack { - grid-area: track; - position: relative; - - /* track line */ - &:before { - content: ''; - display: block; - position: absolute; - background: var(--border-color); - } - } - - .react-aria-SliderThumb { - width: 1.429rem; - height: 1.429rem; - border-radius: 50%; - background: var(--highlight-background); - border: 2px solid var(--background-color); - forced-color-adjust: none; - - &[data-dragging] { - background: var(--highlight-background-pressed); - } - - &[data-focus-visible] { - outline: 2px solid var(--focus-ring-color); - } - } - - &[data-orientation=horizontal] { - flex-direction: column; - width: 300px; - - .react-aria-SliderTrack { - height: 30px; - width: 100%; - - &:before { - height: 3px; - width: 100%; - top: 50%; - transform: translateY(-50%); - } - } - - .react-aria-SliderThumb { - top: 50%; - } - } - - &[data-orientation=vertical] { - height: 150px; - display: block; - - .react-aria-Label, - .react-aria-SliderOutput { - display: none; - } - - .react-aria-SliderTrack { - width: 30px; - height: 100%; - - &:before { - width: 3px; - height: 100%; - left: 50%; - transform: translateX(-50%); - } - } - - .react-aria-SliderThumb { - left: 50%; - } - } - - &[data-disabled] { - .react-aria-SliderTrack:before { - background: var(--border-color-disabled); - } - - .react-aria-SliderThumb { - background: var(--border-color-disabled); - } - } -} diff --git a/packages/@react-spectrum/s2/src/Slider.tsx b/packages/@react-spectrum/s2/src/Slider.tsx index 11b7617fc26..844327cec82 100644 --- a/packages/@react-spectrum/s2/src/Slider.tsx +++ b/packages/@react-spectrum/s2/src/Slider.tsx @@ -7,7 +7,7 @@ import { SliderTrack } from 'react-aria-components'; -import './Slider.css'; + export interface SliderProps extends AriaSliderProps { label?: string; diff --git a/packages/@react-spectrum/s2/src/Switch.css b/packages/@react-spectrum/s2/src/Switch.css deleted file mode 100644 index adf5fcbcfc1..00000000000 --- a/packages/@react-spectrum/s2/src/Switch.css +++ /dev/null @@ -1,74 +0,0 @@ -@import "./theme.css"; - -.react-aria-Switch { - display: flex; - align-items: center; - gap: 0.571rem; - font-size: 1.143rem; - color: var(--text-color); - forced-color-adjust: none; - - .indicator { - width: 2rem; - height: 1.143rem; - border: 2px solid var(--border-color); - background: var(--background-color); - border-radius: 1.143rem; - transition: all 200ms; - - &:before { - content: ''; - display: block; - margin: 0.143rem; - width: 0.857rem; - height: 0.857rem; - background: var(--highlight-background); - border-radius: 16px; - transition: all 200ms; - } - } - - &[data-pressed] .indicator { - border-color: var(--border-color-pressed); - - &:before { - background: var(--highlight-background-pressed); - } - } - - &[data-selected] { - .indicator { - border-color: var(--highlight-background); - background: var(--highlight-background); - - &:before { - background: var(--field-background); - transform: translateX(100%); - } - } - - &[data-pressed] { - .indicator { - border-color: var(--highlight-background-pressed); - background: var(--highlight-background-pressed); - } - } - } - - &[data-focus-visible] .indicator { - outline: 2px solid var(--focus-ring-color); - outline-offset: 2px; - } - - &[data-disabled] { - color: var(--text-color-disabled); - - .indicator { - border-color: var(--border-color-disabled); - - &:before { - background: var(--border-color-disabled); - } - } - } -} diff --git a/packages/@react-spectrum/s2/src/Switch.tsx b/packages/@react-spectrum/s2/src/Switch.tsx index 929ccc8f998..f089571f5e2 100644 --- a/packages/@react-spectrum/s2/src/Switch.tsx +++ b/packages/@react-spectrum/s2/src/Switch.tsx @@ -3,7 +3,7 @@ import { SwitchProps as AriaSwitchProps } from 'react-aria-components'; -import './Switch.css'; + export interface SwitchProps extends Omit { children: React.ReactNode; diff --git a/packages/@react-spectrum/s2/src/Table.css b/packages/@react-spectrum/s2/src/Table.css deleted file mode 100644 index 039d9815360..00000000000 --- a/packages/@react-spectrum/s2/src/Table.css +++ /dev/null @@ -1,272 +0,0 @@ -@import './Button.css'; -@import './ToggleButton.css'; -@import './Checkbox.css'; -@import './Popover.css'; -@import './Menu.css'; -@import "./theme.css"; - -.react-aria-Table { - padding: 0.286rem; - border: 1px solid var(--border-color); - border-radius: 6px; - background: var(--overlay-background); - outline: none; - border-spacing: 0; - min-height: 100px; - align-self: start; - max-width: 100%; - word-break: break-word; - forced-color-adjust: none; - - &[data-focus-visible] { - outline: 2px solid var(--focus-ring-color); - outline-offset: -1px; - } - - .react-aria-TableHeader { - color: var(--text-color); - - &:after { - content: ''; - display: table-row; - height: 2px; - } - - & tr:last-child .react-aria-Column { - border-bottom: 1px solid var(--border-color); - cursor: default; - } - } - - .react-aria-Row { - --radius-top: 6px; - --radius-bottom: 6px; - --radius: var(--radius-top) var(--radius-top) var(--radius-bottom) var(--radius-bottom); - border-radius: var(--radius); - clip-path: inset(0 round var(--radius)); /* firefox */ - outline: none; - cursor: default; - color: var(--text-color); - font-size: 1.072rem; - position: relative; - transform: scale(1); - - &[data-focus-visible] { - outline: 2px solid var(--focus-ring-color); - outline-offset: -2px; - } - - &[data-pressed] { - background: var(--gray-100); - } - - &[data-selected] { - background: var(--highlight-background); - color: var(--highlight-foreground); - --focus-ring-color: var(--highlight-foreground); - - &[data-focus-visible], - .react-aria-Cell[data-focus-visible] { - outline-offset: -4px; - } - } - - &[data-disabled] { - color: var(--text-color-disabled); - } - } - - .react-aria-Cell, - .react-aria-Column { - padding: 4px 8px; - text-align: left; - outline: none; - - &[data-focus-visible] { - outline: 2px solid var(--focus-ring-color); - outline-offset: -2px; - } - } - - .react-aria-Cell { - transform: translateZ(0); - - &:first-child { - border-radius: var(--radius-top) 0 0 var(--radius-bottom); - } - - &:last-child { - border-radius: 0 var(--radius-top) var(--radius-bottom) 0; - } - } - - /* join selected items if :has selector is supported */ - @supports selector(:has(.foo)) { - .react-aria-Row[data-selected]:has(+ [data-selected]), - .react-aria-Row[data-selected]:has(+ .react-aria-DropIndicator + [data-selected]) { - --radius-bottom: 0px; - } - - .react-aria-Row[data-selected] + [data-selected], - .react-aria-Row[data-selected] + .react-aria-DropIndicator + [data-selected]{ - --radius-top: 0px; - } - } -} - -:where(.react-aria-Row) .react-aria-Checkbox { - --selected-color: var(--highlight-foreground); - --selected-color-pressed: var(--highlight-foreground-pressed); - --checkmark-color: var(--highlight-background); - --background-color: var(--highlight-background); -} - -.react-aria-Row[data-href] { - cursor: pointer; -} - -.react-aria-Column { - .sort-indicator { - padding: 0 2px; - } - - &:not([data-sort-direction]) .sort-indicator { - visibility: hidden; - } - - &[colspan] { - text-align: center; - } -} - -.react-aria-TableBody { - &[data-empty] { - text-align: center; - font-style: italic; - } -} - -.react-aria-ResizableTableContainer { - max-width: 400px; - overflow: auto; - position: relative; - border: 1px solid var(--border-color); - border-radius: 6px; - background: var(--background-color); - - .react-aria-Table { - border: none; - } - - .column-name, - .react-aria-Button { - --background-color: var(--overlay-background); - flex: 1; - font: inherit; - text-align: start; - color: inherit; - overflow: hidden; - text-overflow: ellipsis; - border-color: transparent; - transition: background 200ms; - &[data-hovered] { - background: var(--highlight-hover); - } - - &[data-pressed] { - background: var(--highlight-pressed); - box-shadow: none; - } - - &:focus-visible { - outline: 2px solid var(--focus-ring-color); - } - } - - .react-aria-ColumnResizer { - width: 15px; - background-color: grey; - height: 25px; - flex: 0 0 auto; - touch-action: none; - box-sizing: border-box; - border: 5px; - border-style: none solid; - border-color: transparent; - background-clip: content-box; - - &[data-resizable-direction=both] { - cursor: ew-resize; - } - - &[data-resizable-direction=left] { - cursor: e-resize; - } - - &[data-resizable-direction=right] { - cursor: w-resize; - } - - &[data-focus-visible] { - background-color: var(--focus-ring-color); - } - - &[data-resizing] { - border-color: var(--focus-ring-color); - background-color: transparent; - } - } - - .react-aria-Column, - .react-aria-Cell { - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - } -} - -.react-aria-Row { - &[data-dragging] { - opacity: 0.6; - transform: translateZ(0); - } - - [slot=drag] { - all: unset; - width: 15px; - text-align: center; - - &[data-focus-visible] { - border-radius: 4px; - outline: 2px solid var(--focus-ring-color); - } - } -} - -.react-aria-DropIndicator[data-drop-target] { - outline: 1px solid var(--highlight-background); - transform: translateZ(0); -} - -.react-aria-Table[data-drop-target] { - outline: 2px solid var(--highlight-background); - outline-offset: -1px; - background: var(--highlight-overlay) -} - -.react-aria-Row[data-drop-target] { - outline: 2px solid var(--highlight-background); - background: var(--highlight-overlay) -} - -.react-aria-DropIndicator[data-drop-target] { - outline: 1px solid var(--highlight-background); - transform: translateZ(0); -} - -.react-aria-Cell img { - height: 30px; - width: 30px; - object-fit: cover; - display: block; -} diff --git a/packages/@react-spectrum/s2/src/Table.tsx b/packages/@react-spectrum/s2/src/Table.tsx index e32619b18de..0f66521e281 100644 --- a/packages/@react-spectrum/s2/src/Table.tsx +++ b/packages/@react-spectrum/s2/src/Table.tsx @@ -14,7 +14,7 @@ import { } from 'react-aria-components'; import {Checkbox} from './Checkbox'; -import './Table.css'; + export function Table(props: TableProps) { return ; diff --git a/packages/@react-spectrum/s2/src/Tabs.css b/packages/@react-spectrum/s2/src/Tabs.css deleted file mode 100644 index c18b5f8f792..00000000000 --- a/packages/@react-spectrum/s2/src/Tabs.css +++ /dev/null @@ -1,102 +0,0 @@ -@import './Button.css'; -@import './Link.css'; -@import "./theme.css"; - -.react-aria-Tabs { - display: flex; - color: var(--text-color); - - &[data-orientation=horizontal] { - flex-direction: column; - } -} - -.react-aria-TabList { - display: flex; - - &[data-orientation=horizontal] { - border-bottom: 1px solid var(--border-color); - - .react-aria-Tab { - border-bottom: 3px solid var(--border-color); - } - } -} - -.react-aria-Tab { - padding: 10px; - cursor: default; - outline: none; - position: relative; - color: var(--text-color-base); - transition: color 200ms; - --border-color: transparent; - forced-color-adjust: none; - - &[data-hovered], - &[data-focused] { - color: var(--text-color-hover); - } - - &[data-selected] { - --border-color: var(--highlight-background); - color: var(--text-color); - } - - &[data-disabled] { - color: var(--text-color-disabled); - &[data-selected] { - --border-color: var(--text-color-disabled); - } - } - - &[data-focus-visible]:after { - content: ''; - position: absolute; - inset: 4px; - border-radius: 4px; - border: 2px solid var(--focus-ring-color); - } -} - -.react-aria-TabPanel { - margin-top: 4px; - padding: 10px; - border-radius: 4px; - outline: none; - - &[data-focus-visible] { - outline: 2px solid var(--focus-ring-color); - } -} - -.react-aria-Tabs { - &[data-orientation=vertical] { - flex-direction: row; - } -} - -.react-aria-TabList { - &[data-orientation=vertical] { - flex-direction: column; - border-inline-end: 1px solid gray; - - .react-aria-Tab { - border-inline-end: 3px solid var(--border-color, transparent); - } - } -} - -.react-aria-Tab { - &[data-disabled] { - color: var(--text-color-disabled); - &[data-selected] { - --border-color: var(--border-color-disabled); - } - } -} - -.react-aria-Tab[href] { - text-decoration: none; - cursor: pointer; -} diff --git a/packages/@react-spectrum/s2/src/Tabs.tsx b/packages/@react-spectrum/s2/src/Tabs.tsx index 30476ffd145..860e4de6fff 100644 --- a/packages/@react-spectrum/s2/src/Tabs.tsx +++ b/packages/@react-spectrum/s2/src/Tabs.tsx @@ -1,5 +1,5 @@ import {Tabs as RACTabs, TabsProps} from 'react-aria-components'; -import './Tabs.css'; + export function Tabs(props: TabsProps) { return ; diff --git a/packages/@react-spectrum/s2/src/TagGroup.css b/packages/@react-spectrum/s2/src/TagGroup.css deleted file mode 100644 index 62f84b23ea2..00000000000 --- a/packages/@react-spectrum/s2/src/TagGroup.css +++ /dev/null @@ -1,91 +0,0 @@ -@import './ToggleButton.css'; -@import "./theme.css"; - -.react-aria-TagGroup { - display: flex; - flex-direction: column; - gap: 2px; - font-size: small; - color: var(--text-color); -} - -.react-aria-TagList { - display: flex; - flex-wrap: wrap; - gap: 4px; -} - -.react-aria-Tag { - color: var(--text-color); - border: 1px solid var(--border-color); - forced-color-adjust: none; - border-radius: 4px; - padding: 2px 8px; - font-size: 0.929rem; - outline: none; - cursor: default; - display: flex; - align-items: center; - transition: border-color 200ms; - - &[data-hovered] { - border-color: var(--border-color-hover); - } - - &[data-focus-visible] { - outline: 2px solid var(--focus-ring-color); - outline-offset: 2px; - } - - &[data-selected] { - border-color: var(--highlight-background); - background: var(--highlight-background); - color: var(--highlight-foreground); - } - - [slot=remove] { - background: none; - border: none; - padding: 0; - margin-left: 8px; - color: var(--text-color-base); - transition: color 200ms; - outline: none; - font-size: 0.95em; - - &[data-hovered] { - color: var(--text-color-hover); - } - } - - &[data-selected] { - [slot=remove] { - color: inherit; - } - } -} - -.react-aria-Tag[data-href] { - text-decoration: none; - cursor: pointer; -} - -.react-aria-TagList { - .react-aria-Tag { - &[data-disabled] { - border-color: var(--border-color-disabled); - color: var(--text-color-disabled); - } - } -} - -.react-aria-TagGroup { - [slot=description] { - font-size: 12px; - } - - [slot=errorMessage] { - font-size: 12px; - color: var(--invalid-color); - } -} diff --git a/packages/@react-spectrum/s2/src/TagGroup.tsx b/packages/@react-spectrum/s2/src/TagGroup.tsx index 6e5f159867e..2f08b39daa3 100644 --- a/packages/@react-spectrum/s2/src/TagGroup.tsx +++ b/packages/@react-spectrum/s2/src/TagGroup.tsx @@ -10,7 +10,7 @@ import { Text } from 'react-aria-components'; -import './TagGroup.css'; + export interface TagGroupProps extends diff --git a/packages/@react-spectrum/s2/src/TextField.css b/packages/@react-spectrum/s2/src/TextField.css deleted file mode 100644 index 1a84e2d89bb..00000000000 --- a/packages/@react-spectrum/s2/src/TextField.css +++ /dev/null @@ -1,49 +0,0 @@ -@import './Button.css'; -@import "./theme.css"; - -.react-aria-TextField { - display: flex; - flex-direction: column; - width: fit-content; - color: var(--text-color); - - .react-aria-Input, - .react-aria-TextArea { - padding: 0.286rem; - margin: 0; - border: 1px solid var(--border-color); - border-radius: 6px; - background: var(--field-background); - font-size: 1.143rem; - color: var(--field-text-color); - - &[data-focused] { - outline: 2px solid var(--focus-ring-color); - outline-offset: -1px; - } - } - - .react-aria-Input, - .react-aria-TextArea { - &[data-invalid] { - border-color: var(--invalid-color); - } - } - - .react-aria-FieldError { - font-size: 12px; - color: var(--invalid-color); - } - - [slot=description] { - font-size: 12px; - } - - .react-aria-Input, - .react-aria-TextArea { - &[data-disabled] { - border-color: var(--border-color-disabled); - color: var(--text-color-disabled); - } - } -} diff --git a/packages/@react-spectrum/s2/src/TextField.tsx b/packages/@react-spectrum/s2/src/TextField.tsx index a5141455831..e4135f8e99d 100644 --- a/packages/@react-spectrum/s2/src/TextField.tsx +++ b/packages/@react-spectrum/s2/src/TextField.tsx @@ -8,7 +8,7 @@ import { ValidationResult } from 'react-aria-components'; -import './TextField.css'; + export interface TextFieldProps extends AriaTextFieldProps { label?: string; diff --git a/packages/@react-spectrum/s2/src/TimeField.css b/packages/@react-spectrum/s2/src/TimeField.css deleted file mode 100644 index 4d75dc392d6..00000000000 --- a/packages/@react-spectrum/s2/src/TimeField.css +++ /dev/null @@ -1,68 +0,0 @@ -@import './Form.css'; -@import './Button.css'; -@import "./theme.css"; - -.react-aria-TimeField { - color: var(--text-color); -} - -.react-aria-DateInput { - display: flex; - padding: 4px; - border: 1px solid var(--border-color); - border-radius: 6px; - background: var(--field-background); - width: fit-content; - min-width: 150px; - white-space: nowrap; - forced-color-adjust: none; - - &[data-focus-within] { - outline: 2px solid var(--focus-ring-color); - outline-offset: -1px; - } -} - -.react-aria-DateSegment { - padding: 0 2px; - font-variant-numeric: tabular-nums; - text-align: end; - color: var(--text-color); - - &[data-type=literal] { - padding: 0; - } - - &[data-placeholder] { - color: var(--text-color-placeholder); - font-style: italic; - } - - &:focus { - color: var(--highlight-foreground); - background: var(--highlight-background); - outline: none; - border-radius: 4px; - caret-color: transparent; - } - - &[data-invalid] { - color: var(--invalid-color); - - &:focus { - background: var(--highlight-background-invalid); - color: var(--highlight-foreground); - } - } -} - -.react-aria-TimeField { - .react-aria-FieldError { - font-size: 12px; - color: var(--invalid-color); - } - - [slot=description] { - font-size: 12px; - } -} diff --git a/packages/@react-spectrum/s2/src/TimeField.tsx b/packages/@react-spectrum/s2/src/TimeField.tsx index 2b3e7dfe447..84f220a4aa5 100644 --- a/packages/@react-spectrum/s2/src/TimeField.tsx +++ b/packages/@react-spectrum/s2/src/TimeField.tsx @@ -10,7 +10,7 @@ import { ValidationResult } from 'react-aria-components'; -import './TimeField.css'; + export interface TimeFieldProps extends AriaTimeFieldProps { diff --git a/packages/@react-spectrum/s2/src/ToggleButton.css b/packages/@react-spectrum/s2/src/ToggleButton.css deleted file mode 100644 index 00a88ea2607..00000000000 --- a/packages/@react-spectrum/s2/src/ToggleButton.css +++ /dev/null @@ -1,44 +0,0 @@ -@import "./theme.css"; - -.react-aria-ToggleButton { - color: var(--text-color); - background: var(--button-background); - border: 1px solid var(--border-color); - forced-color-adjust: none; - border-radius: 4px; - appearance: none; - vertical-align: middle; - font-size: 1rem; - text-align: center; - margin: 0; - outline: none; - padding: 6px 10px; - - &[data-pressed] { - box-shadow: inset 0 1px 2px rgb(0 0 0 / 0.1); - background: var(--button-background-pressed); - border-color: var(--border-color-pressed); - } - - &[data-selected] { - background: var(--highlight-background); - border-color: var(--highlight-background); - color: var(--highlight-foreground); - - &[data-pressed] { - background: var(--highlight-background-pressed); - border-color: var(--highlight-background-pressed); - } - } - - &[data-focus-visible] { - outline: 2px solid var(--focus-ring-color); - outline-offset: 2px; - } - - &[data-disabled] { - border-color: var(--border-color-disabled); - background: var(--button-background); - color: var(--text-color-disabled); - } -} diff --git a/packages/@react-spectrum/s2/src/ToggleButton.tsx b/packages/@react-spectrum/s2/src/ToggleButton.tsx index d1caaafc76e..b6a5edf2d9b 100644 --- a/packages/@react-spectrum/s2/src/ToggleButton.tsx +++ b/packages/@react-spectrum/s2/src/ToggleButton.tsx @@ -1,5 +1,5 @@ import {ToggleButton as RACToggleButton, ToggleButtonProps} from 'react-aria-components'; -import './ToggleButton.css'; + export function ToggleButton(props: ToggleButtonProps) { return ; diff --git a/packages/@react-spectrum/s2/src/Toolbar.css b/packages/@react-spectrum/s2/src/Toolbar.css deleted file mode 100644 index 7b8ea5bb7d6..00000000000 --- a/packages/@react-spectrum/s2/src/Toolbar.css +++ /dev/null @@ -1,50 +0,0 @@ -@import './Checkbox.css'; -@import './Button.css'; -@import './ToggleButton.css'; -@import "./theme.css"; - -.react-aria-Toolbar { - display: flex; - flex-wrap: wrap; - gap: 5px; - - &[data-orientation=horizontal] { - flex-direction: row; - } - - .react-aria-Group { - display: contents; - } - - .react-aria-ToggleButton { - width: 32px; - } -} - -.react-aria-Separator { - align-self: stretch; - background-color: var(--border-color); - - &[aria-orientation=vertical] { - width: 1px; - margin: 0px 10px; - } -} - -.react-aria-Toolbar { - width: fit-content; - - &[data-orientation=vertical] { - flex-direction: column; - align-items: start; - } -} - -.react-aria-Separator { - &:not([aria-orientation=vertical]) { - border: none; - height: 1px; - width: 100%; - margin: 10px 0; - } -} diff --git a/packages/@react-spectrum/s2/src/Toolbar.tsx b/packages/@react-spectrum/s2/src/Toolbar.tsx index 6d15483a716..09cc9c70eea 100644 --- a/packages/@react-spectrum/s2/src/Toolbar.tsx +++ b/packages/@react-spectrum/s2/src/Toolbar.tsx @@ -1,5 +1,5 @@ import {Toolbar as RACToolbar, ToolbarProps} from 'react-aria-components'; -import './Toolbar.css'; + export function Toolbar(props: ToolbarProps) { return ; diff --git a/packages/@react-spectrum/s2/src/Tooltip.css b/packages/@react-spectrum/s2/src/Tooltip.css deleted file mode 100644 index 2b6d385342f..00000000000 --- a/packages/@react-spectrum/s2/src/Tooltip.css +++ /dev/null @@ -1,69 +0,0 @@ -@import './Button.css'; -@import "./theme.css"; - -.react-aria-Tooltip { - box-shadow: 0 8px 20px rgba(0 0 0 / 0.1); - border-radius: 4px; - background: var(--highlight-background); - color: var(--highlight-foreground); - forced-color-adjust: none; - outline: none; - padding: 2px 8px; - max-width: 150px; - /* fixes FF gap */ - transform: translate3d(0, 0, 0); - - &[data-placement=top] { - margin-bottom: 8px; - --origin: translateY(4px); - } - - &[data-placement=bottom] { - margin-top: 8px; - --origin: translateY(-4px); - & .react-aria-OverlayArrow svg { - transform: rotate(180deg); - } - } - - &[data-placement=right] { - margin-left: 8px; - --origin: translateX(-4px); - & .react-aria-OverlayArrow svg { - transform: rotate(90deg); - } - } - - &[data-placement=left] { - margin-right: 8px; - --origin: translateX(4px); - & .react-aria-OverlayArrow svg { - transform: rotate(-90deg); - } - } - - & .react-aria-OverlayArrow svg { - display: block; - fill: var(--highlight-background); - } - - &[data-entering] { - animation: slide 200ms; - } - - &[data-exiting] { - animation: slide 200ms reverse ease-in; - } -} - -@keyframes slide { - from { - transform: var(--origin); - opacity: 0; - } - - to { - transform: translateY(0); - opacity: 1; - } -} diff --git a/packages/@react-spectrum/s2/src/Tooltip.tsx b/packages/@react-spectrum/s2/src/Tooltip.tsx index 8e7f5eb7cd8..2dce90dacaf 100644 --- a/packages/@react-spectrum/s2/src/Tooltip.tsx +++ b/packages/@react-spectrum/s2/src/Tooltip.tsx @@ -4,7 +4,7 @@ import { TooltipProps as AriaTooltipProps } from 'react-aria-components'; -import './Tooltip.css'; + export interface TooltipProps extends Omit { children: React.ReactNode; diff --git a/packages/@react-spectrum/s2/src/tailwind.css b/packages/@react-spectrum/s2/src/tailwind.css new file mode 100644 index 00000000000..420adb072b1 --- /dev/null +++ b/packages/@react-spectrum/s2/src/tailwind.css @@ -0,0 +1,4 @@ +@config "../tailwind-spectrum.js"; +@tailwind base; +@tailwind components; +@tailwind utilities; diff --git a/packages/@react-spectrum/s2/src/theme.css b/packages/@react-spectrum/s2/src/theme.css deleted file mode 100644 index 23dab3f8eff..00000000000 --- a/packages/@react-spectrum/s2/src/theme.css +++ /dev/null @@ -1,127 +0,0 @@ -/* Base styles */ -:root { - font-family: system-ui; - font-size: 14px; - line-height: 1.5; - background: var(--background-color); -} - -/* color themes for dark and light modes, generated with Leonardo. - * Light: https://leonardocolor.io/theme.html?name=Light&config=%7B%22baseScale%22%3A%22Gray%22%2C%22colorScales%22%3A%5B%7B%22name%22%3A%22Gray%22%2C%22colorKeys%22%3A%5B%22%23000000%22%5D%2C%22colorspace%22%3A%22RGB%22%2C%22ratios%22%3A%5B%22-1.12%22%2C%221.45%22%2C%222.05%22%2C%223.02%22%2C%224.54%22%2C%227%22%2C%2210.86%22%5D%2C%22smooth%22%3Afalse%7D%2C%7B%22name%22%3A%22Purple%22%2C%22colorKeys%22%3A%5B%22%235e30eb%22%5D%2C%22colorspace%22%3A%22RGB%22%2C%22ratios%22%3A%5B%22-1.12%22%2C%221.45%22%2C%222.05%22%2C%223.02%22%2C%224.54%22%2C%227%22%2C%2210.86%22%5D%2C%22smooth%22%3Afalse%7D%2C%7B%22name%22%3A%22Red%22%2C%22colorKeys%22%3A%5B%22%23e32400%22%5D%2C%22colorspace%22%3A%22RGB%22%2C%22ratios%22%3A%5B%22-1.12%22%2C%221.45%22%2C%222.05%22%2C%223.02%22%2C%224.54%22%2C%227%22%2C%2210.86%22%5D%2C%22smooth%22%3Afalse%7D%5D%2C%22lightness%22%3A98%2C%22contrast%22%3A1%2C%22saturation%22%3A100%2C%22formula%22%3A%22wcag2%22%7D */ -:root { - --background-color: #f8f8f8; - --gray-50: #ffffff; - --gray-100: #d0d0d0; - --gray-200: #afafaf; - --gray-300: #8f8f8f; - --gray-400: #717171; - --gray-500: #555555; - --gray-600: #393939; - --purple-100: #d5c9fa; - --purple-200: #b8a3f6; - --purple-300: #997cf2; - --purple-400: #7a54ef; - --purple-500: #582ddc; - --purple-600: #3c1e95; - --red-100: #f7c4ba; - --red-200: #f29887; - --red-300: #eb664d; - --red-400: #de2300; - --red-500: #a81b00; - --red-600: #731200; - --highlight-hover: rgb(0 0 0 / 0.07); - --highlight-pressed: rgb(0 0 0 / 0.15); -} - -/* Dark: https://leonardocolor.io/theme.html?name=Dark&config=%7B%22baseScale%22%3A%22Gray%22%2C%22colorScales%22%3A%5B%7B%22name%22%3A%22Gray%22%2C%22colorKeys%22%3A%5B%22%23000000%22%5D%2C%22colorspace%22%3A%22RGB%22%2C%22ratios%22%3A%5B%22-1.12%22%2C%221.45%22%2C%222.05%22%2C%223.02%22%2C%224.54%22%2C%227%22%2C%2210.86%22%5D%2C%22smooth%22%3Afalse%7D%2C%7B%22name%22%3A%22Purple%22%2C%22colorKeys%22%3A%5B%22%235e30eb%22%5D%2C%22colorspace%22%3A%22RGB%22%2C%22ratios%22%3A%5B%22-1.12%22%2C%221.45%22%2C%222.05%22%2C%223.02%22%2C%224.54%22%2C%227%22%2C%2210.86%22%5D%2C%22smooth%22%3Afalse%7D%2C%7B%22name%22%3A%22Red%22%2C%22colorKeys%22%3A%5B%22%23e32400%22%5D%2C%22colorspace%22%3A%22RGB%22%2C%22ratios%22%3A%5B%22-1.12%22%2C%221.45%22%2C%222.05%22%2C%223.02%22%2C%224.54%22%2C%227%22%2C%2210.86%22%5D%2C%22smooth%22%3Afalse%7D%5D%2C%22lightness%22%3A11%2C%22contrast%22%3A1%2C%22saturation%22%3A100%2C%22formula%22%3A%22wcag2%22%7D */ -@media (prefers-color-scheme: dark) { - :root { - --background-color: #1d1d1d; - --gray-50: #101010; - --gray-100: #393939; - --gray-200: #4f4f4f; - --gray-300: #686868; - --gray-400: #848484; - --gray-500: #a7a7a7; - --gray-600: #cfcfcf; - --purple-100: #3c1e95; - --purple-200: #522acd; - --purple-300: #6f46ed; - --purple-400: #8e6ef1; - --purple-500: #b099f5; - --purple-600: #d5c8fa; - --red-100: #721200; - --red-200: #9c1900; - --red-300: #cc2000; - --red-400: #e95034; - --red-500: #f08c79; - --red-600: #f7c3ba; - --highlight-hover: rgb(255 255 255 / 0.1); - --highlight-pressed: rgb(255 255 255 / 0.2); - } -} - -/* Semantic colors */ -:root { - --focus-ring-color: var(--purple-400); - --text-color: var(--gray-600); - --text-color-base: var(--gray-500); - --text-color-hover: var(--gray-600); - --text-color-disabled: var(--gray-200); - --text-color-placeholder: var(--gray-400); - --link-color: var(--purple-500); - --link-color-secondary: var(--gray-500); - --link-color-pressed: var(--purple-600); - --border-color: var(--gray-300); - --border-color-hover: var(--gray-400); - --border-color-pressed: var(--gray-400); - --border-color-disabled: var(--gray-100); - --field-background: var(--gray-50); - --field-text-color: var(--gray-600); - --overlay-background: var(--gray-50); - --button-background: var(--gray-50); - --button-background-pressed: var(--background-color); - /* these colors are the same between light and dark themes - * to ensure contrast with the foreground color */ - --highlight-background: #6f46ed; /* purple-300 from dark theme, 3.03:1 against background-color */ - --highlight-background-pressed: #522acd; /* purple-200 from dark theme */ - --highlight-background-invalid: #cc2000; /* red-300 from dark theme */ - --highlight-foreground: white; /* 5.56:1 against highlight-background */ - --highlight-foreground-pressed: #ddd; - --highlight-overlay: rgb(from #6f46ed r g b / 15%); - --invalid-color: var(--red-400); - --invalid-color-pressed: var(--red-500); -} - -/* Windows high contrast mode overrides */ -@media (forced-colors: active) { - :root { - --background-color: Canvas; - --focus-ring-color: Highlight; - --text-color: ButtonText; - --text-color-base: ButtonText; - --text-color-hover: ButtonText; - --text-color-disabled: GrayText; - --text-color-placeholder: ButtonText; - --link-color: LinkText; - --link-color-secondary: LinkText; - --link-color-pressed: LinkText; - --border-color: ButtonBorder; - --border-color-hover: ButtonBorder; - --border-color-pressed: ButtonBorder; - --border-color-disabled: GrayText; - --field-background: Field; - --field-text-color: FieldText; - --overlay-background: Canvas; - --button-background: ButtonFace; - --button-background-pressed: ButtonFace; - --highlight-background: Highlight; - --highlight-background-pressed: Highlight; - --highlight-background-invalid: LinkText; - --highlight-foreground: HighlightText; - --highlight-foreground-pressed: HighlightText; - --invalid-color: LinkText; - --invalid-color-pressed: LinkText; - } -} - diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 00000000000..67cdf1a55fc --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,6 @@ +module.exports = { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +}; diff --git a/tailwind-spectrum.js b/tailwind-spectrum.js new file mode 100644 index 00000000000..0e145a9c646 --- /dev/null +++ b/tailwind-spectrum.js @@ -0,0 +1,1068 @@ +let plugin = require('tailwindcss/plugin'); +let flattenColorPalette = require('tailwindcss/lib/util/flattenColorPalette.js').default; + +let colors = { + white: 'white', + black: 'black', + transparent: 'transparent', + gray: { + background: 'var(--spectrum-gray-background-color-default)', + visual: 'var(--spectrum-gray-visual-color)', + 25: 'var(--spectrum-gray-25)', + 50: 'var(--spectrum-gray-50)', + 75: 'var(--spectrum-gray-75)', + 100: 'var(--spectrum-gray-100)', + 200: 'var(--spectrum-gray-200)', + 300: 'var(--spectrum-gray-300)', + 400: 'var(--spectrum-gray-400)', + 500: 'var(--spectrum-gray-500)', + 600: 'var(--spectrum-gray-600)', + 700: 'var(--spectrum-gray-700)', + 800: 'var(--spectrum-gray-800)', + 900: 'var(--spectrum-gray-900)', + 1000: 'var(--spectrum-gray-1000)' + }, + blue: { + background: 'var(--spectrum-blue-background-color-default)', + visual: 'var(--spectrum-blue-visual-color)', + 100: 'var(--spectrum-blue-100)', + 200: 'var(--spectrum-blue-200)', + 300: 'var(--spectrum-blue-300)', + 400: 'var(--spectrum-blue-400)', + 500: 'var(--spectrum-blue-500)', + 600: 'var(--spectrum-blue-600)', + 700: 'var(--spectrum-blue-700)', + 800: 'var(--spectrum-blue-800)', + 900: 'var(--spectrum-blue-900)', + 1000: 'var(--spectrum-blue-1000)', + 1100: 'var(--spectrum-blue-1100)', + 1200: 'var(--spectrum-blue-1200)', + 1300: 'var(--spectrum-blue-1300)', + 1400: 'var(--spectrum-blue-1400)', + 1500: 'var(--spectrum-blue-1500)', + 1600: 'var(--spectrum-blue-1600)' + }, + green: { + background: 'var(--spectrum-green-background-color-default)', + visual: 'var(--spectrum-green-visual-color)', + 100: 'var(--spectrum-green-100)', + 200: 'var(--spectrum-green-200)', + 300: 'var(--spectrum-green-300)', + 400: 'var(--spectrum-green-400)', + 500: 'var(--spectrum-green-500)', + 600: 'var(--spectrum-green-600)', + 700: 'var(--spectrum-green-700)', + 800: 'var(--spectrum-green-800)', + 900: 'var(--spectrum-green-900)', + 1000: 'var(--spectrum-green-1000)', + 1100: 'var(--spectrum-green-1100)', + 1200: 'var(--spectrum-green-1200)', + 1300: 'var(--spectrum-green-1300)', + 1400: 'var(--spectrum-green-1400)', + 1500: 'var(--spectrum-green-1500)', + 1600: 'var(--spectrum-green-1600)' + }, + orange: { + background: 'var(--spectrum-orange-background-color-default)', + visual: 'var(--spectrum-orange-visual-color)', + 100: 'var(--spectrum-orange-100)', + 200: 'var(--spectrum-orange-200)', + 300: 'var(--spectrum-orange-300)', + 400: 'var(--spectrum-orange-400)', + 500: 'var(--spectrum-orange-500)', + 600: 'var(--spectrum-orange-600)', + 700: 'var(--spectrum-orange-700)', + 800: 'var(--spectrum-orange-800)', + 900: 'var(--spectrum-orange-900)', + 1000: 'var(--spectrum-orange-1000)', + 1100: 'var(--spectrum-orange-1100)', + 1200: 'var(--spectrum-orange-1200)', + 1300: 'var(--spectrum-orange-1300)', + 1400: 'var(--spectrum-orange-1400)', + 1500: 'var(--spectrum-orange-1500)', + 1600: 'var(--spectrum-orange-1600)' + }, + red: { + background: 'var(--spectrum-red-background-color-default)', + visual: 'var(--spectrum-red-visual-color)', + 100: 'var(--spectrum-red-100)', + 200: 'var(--spectrum-red-200)', + 300: 'var(--spectrum-red-300)', + 400: 'var(--spectrum-red-400)', + 500: 'var(--spectrum-red-500)', + 600: 'var(--spectrum-red-600)', + 700: 'var(--spectrum-red-700)', + 800: 'var(--spectrum-red-800)', + 900: 'var(--spectrum-red-900)', + 1000: 'var(--spectrum-red-1000)', + 1100: 'var(--spectrum-red-1100)', + 1200: 'var(--spectrum-red-1200)', + 1300: 'var(--spectrum-red-1300)', + 1400: 'var(--spectrum-red-1400)', + 1500: 'var(--spectrum-red-1500)', + 1600: 'var(--spectrum-red-1600)' + }, + celery: { + background: 'var(--spectrum-celery-background-color-default)', + visual: 'var(--spectrum-celery-visual-color)', + 100: 'var(--spectrum-celery-100)', + 200: 'var(--spectrum-celery-200)', + 300: 'var(--spectrum-celery-300)', + 400: 'var(--spectrum-celery-400)', + 500: 'var(--spectrum-celery-500)', + 600: 'var(--spectrum-celery-600)', + 700: 'var(--spectrum-celery-700)', + 800: 'var(--spectrum-celery-800)', + 900: 'var(--spectrum-celery-900)', + 1000: 'var(--spectrum-celery-1000)', + 1100: 'var(--spectrum-celery-1100)', + 1200: 'var(--spectrum-celery-1200)', + 1300: 'var(--spectrum-celery-1300)', + 1400: 'var(--spectrum-celery-1400)', + 1500: 'var(--spectrum-celery-1500)', + 1600: 'var(--spectrum-celery-1600)' + }, + chartreuse: { + background: 'var(--spectrum-chartreuse-background-color-default)', + visual: 'var(--spectrum-chartreuse-visual-color)', + 100: 'var(--spectrum-chartreuse-100)', + 200: 'var(--spectrum-chartreuse-200)', + 300: 'var(--spectrum-chartreuse-300)', + 400: 'var(--spectrum-chartreuse-400)', + 500: 'var(--spectrum-chartreuse-500)', + 600: 'var(--spectrum-chartreuse-600)', + 700: 'var(--spectrum-chartreuse-700)', + 800: 'var(--spectrum-chartreuse-800)', + 900: 'var(--spectrum-chartreuse-900)', + 1000: 'var(--spectrum-chartreuse-1000)', + 1100: 'var(--spectrum-chartreuse-1100)', + 1200: 'var(--spectrum-chartreuse-1200)', + 1300: 'var(--spectrum-chartreuse-1300)', + 1400: 'var(--spectrum-chartreuse-1400)', + 1500: 'var(--spectrum-chartreuse-1500)', + 1600: 'var(--spectrum-chartreuse-1600)' + }, + cyan: { + background: 'var(--spectrum-cyan-background-color-default)', + visual: 'var(--spectrum-cyan-visual-color)', + 100: 'var(--spectrum-cyan-100)', + 200: 'var(--spectrum-cyan-200)', + 300: 'var(--spectrum-cyan-300)', + 400: 'var(--spectrum-cyan-400)', + 500: 'var(--spectrum-cyan-500)', + 600: 'var(--spectrum-cyan-600)', + 700: 'var(--spectrum-cyan-700)', + 800: 'var(--spectrum-cyan-800)', + 900: 'var(--spectrum-cyan-900)', + 1000: 'var(--spectrum-cyan-1000)', + 1100: 'var(--spectrum-cyan-1100)', + 1200: 'var(--spectrum-cyan-1200)', + 1300: 'var(--spectrum-cyan-1300)', + 1400: 'var(--spectrum-cyan-1400)', + 1500: 'var(--spectrum-cyan-1500)', + 1600: 'var(--spectrum-cyan-1600)' + }, + fuchsia: { + background: 'var(--spectrum-fuchsia-background-color-default)', + visual: 'var(--spectrum-fuchsia-visual-color)', + 100: 'var(--spectrum-fuchsia-100)', + 200: 'var(--spectrum-fuchsia-200)', + 300: 'var(--spectrum-fuchsia-300)', + 400: 'var(--spectrum-fuchsia-400)', + 500: 'var(--spectrum-fuchsia-500)', + 600: 'var(--spectrum-fuchsia-600)', + 700: 'var(--spectrum-fuchsia-700)', + 800: 'var(--spectrum-fuchsia-800)', + 900: 'var(--spectrum-fuchsia-900)', + 1000: 'var(--spectrum-fuchsia-1000)', + 1100: 'var(--spectrum-fuchsia-1100)', + 1200: 'var(--spectrum-fuchsia-1200)', + 1300: 'var(--spectrum-fuchsia-1300)', + 1400: 'var(--spectrum-fuchsia-1400)', + 1500: 'var(--spectrum-fuchsia-1500)', + 1600: 'var(--spectrum-fuchsia-1600)' + }, + indigo: { + background: 'var(--spectrum-indigo-background-color-default)', + visual: 'var(--spectrum-indigo-visual-color)', + 100: 'var(--spectrum-indigo-100)', + 200: 'var(--spectrum-indigo-200)', + 300: 'var(--spectrum-indigo-300)', + 400: 'var(--spectrum-indigo-400)', + 500: 'var(--spectrum-indigo-500)', + 600: 'var(--spectrum-indigo-600)', + 700: 'var(--spectrum-indigo-700)', + 800: 'var(--spectrum-indigo-800)', + 900: 'var(--spectrum-indigo-900)', + 1000: 'var(--spectrum-indigo-1000)', + 1100: 'var(--spectrum-indigo-1100)', + 1200: 'var(--spectrum-indigo-1200)', + 1300: 'var(--spectrum-indigo-1300)', + 1400: 'var(--spectrum-indigo-1400)', + 1500: 'var(--spectrum-indigo-1500)', + 1600: 'var(--spectrum-indigo-1600)' + }, + magenta: { + background: 'var(--spectrum-magenta-background-color-default)', + visual: 'var(--spectrum-magenta-visual-color)', + 100: 'var(--spectrum-magenta-100)', + 200: 'var(--spectrum-magenta-200)', + 300: 'var(--spectrum-magenta-300)', + 400: 'var(--spectrum-magenta-400)', + 500: 'var(--spectrum-magenta-500)', + 600: 'var(--spectrum-magenta-600)', + 700: 'var(--spectrum-magenta-700)', + 800: 'var(--spectrum-magenta-800)', + 900: 'var(--spectrum-magenta-900)', + 1000: 'var(--spectrum-magenta-1000)', + 1100: 'var(--spectrum-magenta-1100)', + 1200: 'var(--spectrum-magenta-1200)', + 1300: 'var(--spectrum-magenta-1300)', + 1400: 'var(--spectrum-magenta-1400)', + 1500: 'var(--spectrum-magenta-1500)', + 1600: 'var(--spectrum-magenta-1600)' + }, + purple: { + background: 'var(--spectrum-purple-background-color-default)', + visual: 'var(--spectrum-purple-visual-color)', + 100: 'var(--spectrum-purple-100)', + 200: 'var(--spectrum-purple-200)', + 300: 'var(--spectrum-purple-300)', + 400: 'var(--spectrum-purple-400)', + 500: 'var(--spectrum-purple-500)', + 600: 'var(--spectrum-purple-600)', + 700: 'var(--spectrum-purple-700)', + 800: 'var(--spectrum-purple-800)', + 900: 'var(--spectrum-purple-900)', + 1000: 'var(--spectrum-purple-1000)', + 1100: 'var(--spectrum-purple-1100)', + 1200: 'var(--spectrum-purple-1200)', + 1300: 'var(--spectrum-purple-1300)', + 1400: 'var(--spectrum-purple-1400)', + 1500: 'var(--spectrum-purple-1500)', + 1600: 'var(--spectrum-purple-1600)' + }, + seafoam: { + background: 'var(--spectrum-seafoam-background-color-default)', + visual: 'var(--spectrum-seafoam-visual-color)', + 100: 'var(--spectrum-seafoam-100)', + 200: 'var(--spectrum-seafoam-200)', + 300: 'var(--spectrum-seafoam-300)', + 400: 'var(--spectrum-seafoam-400)', + 500: 'var(--spectrum-seafoam-500)', + 600: 'var(--spectrum-seafoam-600)', + 700: 'var(--spectrum-seafoam-700)', + 800: 'var(--spectrum-seafoam-800)', + 900: 'var(--spectrum-seafoam-900)', + 1000: 'var(--spectrum-seafoam-1000)', + 1100: 'var(--spectrum-seafoam-1100)', + 1200: 'var(--spectrum-seafoam-1200)', + 1300: 'var(--spectrum-seafoam-1300)', + 1400: 'var(--spectrum-seafoam-1400)', + 1500: 'var(--spectrum-seafoam-1500)', + 1600: 'var(--spectrum-seafoam-1600)' + }, + yellow: { + background: 'var(--spectrum-yellow-background-color-default)', + visual: 'var(--spectrum-yellow-visual-color)', + 100: 'var(--spectrum-yellow-100)', + 200: 'var(--spectrum-yellow-200)', + 300: 'var(--spectrum-yellow-300)', + 400: 'var(--spectrum-yellow-400)', + 500: 'var(--spectrum-yellow-500)', + 600: 'var(--spectrum-yellow-600)', + 700: 'var(--spectrum-yellow-700)', + 800: 'var(--spectrum-yellow-800)', + 900: 'var(--spectrum-yellow-900)', + 1000: 'var(--spectrum-yellow-1000)', + 1100: 'var(--spectrum-yellow-1100)', + 1200: 'var(--spectrum-yellow-1200)', + 1300: 'var(--spectrum-yellow-1300)', + 1400: 'var(--spectrum-yellow-1400)', + 1500: 'var(--spectrum-yellow-1500)', + 1600: 'var(--spectrum-yellow-1600)' + }, + negative: { + visual: 'var(--spectrum-negative-visual-color)', + 100: 'var(--spectrum-negative-color-100)', + 200: 'var(--spectrum-negative-color-200)', + 300: 'var(--spectrum-negative-color-300)', + 400: 'var(--spectrum-negative-color-400)', + 500: 'var(--spectrum-negative-color-500)', + 600: 'var(--spectrum-negative-color-600)', + 700: 'var(--spectrum-negative-color-700)', + 800: 'var(--spectrum-negative-color-800)', + 900: 'var(--spectrum-negative-color-900)', + 1000: 'var(--spectrum-negative-color-1000)', + 1100: 'var(--spectrum-negative-color-1100)', + 1200: 'var(--spectrum-negative-color-1200)', + 1300: 'var(--spectrum-negative-color-1300)', + 1400: 'var(--spectrum-negative-color-1400)', + 1500: 'var(--spectrum-negative-color-1500)', + 1600: 'var(--spectrum-negative-color-1600)' + }, + notice: { + background: 'var(--spectrum-notice-background-color-default)', + visual: 'var(--spectrum-notice-visual-color)', + 100: 'var(--spectrum-notice-color-100)', + 200: 'var(--spectrum-notice-color-200)', + 300: 'var(--spectrum-notice-color-300)', + 400: 'var(--spectrum-notice-color-400)', + 500: 'var(--spectrum-notice-color-500)', + 600: 'var(--spectrum-notice-color-600)', + 700: 'var(--spectrum-notice-color-700)', + 800: 'var(--spectrum-notice-color-800)', + 900: 'var(--spectrum-notice-color-900)', + 1000: 'var(--spectrum-notice-color-1000)', + 1100: 'var(--spectrum-notice-color-1100)', + 1200: 'var(--spectrum-notice-color-1200)', + 1300: 'var(--spectrum-notice-color-1300)', + 1400: 'var(--spectrum-notice-color-1400)', + 1500: 'var(--spectrum-notice-color-1500)', + 1600: 'var(--spectrum-notice-color-1600)' + }, + positive: { + visual: 'var(--spectrum-positive-visual-color)', + 100: 'var(--spectrum-positive-color-100)', + 200: 'var(--spectrum-positive-color-200)', + 300: 'var(--spectrum-positive-color-300)', + 400: 'var(--spectrum-positive-color-400)', + 500: 'var(--spectrum-positive-color-500)', + 600: 'var(--spectrum-positive-color-600)', + 700: 'var(--spectrum-positive-color-700)', + 800: 'var(--spectrum-positive-color-800)', + 900: 'var(--spectrum-positive-color-900)', + 1000: 'var(--spectrum-positive-color-1000)', + 1100: 'var(--spectrum-positive-color-1100)', + 1200: 'var(--spectrum-positive-color-1200)', + 1300: 'var(--spectrum-positive-color-1300)', + 1400: 'var(--spectrum-positive-color-1400)', + 1500: 'var(--spectrum-positive-color-1500)', + 1600: 'var(--spectrum-positive-color-1600)' + }, + informative: { + visual: 'var(--spectrum-informative-visual-color)', + 100: 'var(--spectrum-informative-color-100)', + 200: 'var(--spectrum-informative-color-200)', + 300: 'var(--spectrum-informative-color-300)', + 400: 'var(--spectrum-informative-color-400)', + 500: 'var(--spectrum-informative-color-500)', + 600: 'var(--spectrum-informative-color-600)', + 700: 'var(--spectrum-informative-color-700)', + 800: 'var(--spectrum-informative-color-800)', + 900: 'var(--spectrum-informative-color-900)', + 1000: 'var(--spectrum-informative-color-1000)', + 1100: 'var(--spectrum-informative-color-1100)', + 1200: 'var(--spectrum-informative-color-1200)', + 1300: 'var(--spectrum-informative-color-1300)', + 1400: 'var(--spectrum-informative-color-1400)', + 1500: 'var(--spectrum-informative-color-1500)', + 1600: 'var(--spectrum-informative-color-1600)' + }, + accent: { + visual: 'var(--spectrum-accent-visual-color)', + 100: 'var(--spectrum-accent-color-100)', + 200: 'var(--spectrum-accent-color-200)', + 300: 'var(--spectrum-accent-color-300)', + 400: 'var(--spectrum-accent-color-400)', + 500: 'var(--spectrum-accent-color-500)', + 600: 'var(--spectrum-accent-color-600)', + 700: 'var(--spectrum-accent-color-700)', + 800: 'var(--spectrum-accent-color-800)', + 900: 'var(--spectrum-accent-color-900)', + 1000: 'var(--spectrum-accent-color-1000)', + 1100: 'var(--spectrum-accent-color-1100)', + 1200: 'var(--spectrum-accent-color-1200)', + 1300: 'var(--spectrum-accent-color-1300)', + 1400: 'var(--spectrum-accent-color-1400)', + 1500: 'var(--spectrum-accent-color-1500)', + 1600: 'var(--spectrum-accent-color-1600)' + }, + neutral: { + 100: 'var(--spectrum-gray-100)', + 200: 'var(--spectrum-gray-200)', + 300: 'var(--spectrum-gray-300)', + 400: 'var(--spectrum-gray-400)', + 500: 'var(--spectrum-gray-500)', + 600: 'var(--spectrum-gray-600)', + 700: 'var(--spectrum-gray-700)', + 800: 'var(--spectrum-gray-800)', + 900: 'var(--spectrum-gray-900)', + 1000: 'var(--spectrum-gray-1000)', + 1100: 'var(--spectrum-gray-1100)', + 1200: 'var(--spectrum-gray-1200)', + 1300: 'var(--spectrum-gray-1300)', + 1400: 'var(--spectrum-gray-1400)' + + }, + 'transparent-white': { + 25: 'var(--spectrum-transparent-white-25)', + 50: 'var(--spectrum-transparent-white-50)', + 75: 'var(--spectrum-transparent-white-75)', + 100: 'var(--spectrum-transparent-white-100)', + 200: 'var(--spectrum-transparent-white-200)', + 300: 'var(--spectrum-transparent-white-300)', + 400: 'var(--spectrum-transparent-white-400)', + 500: 'var(--spectrum-transparent-white-500)', + 600: 'var(--spectrum-transparent-white-600)', + 700: 'var(--spectrum-transparent-white-700)', + 800: 'var(--spectrum-transparent-white-800)', + 900: 'var(--spectrum-transparent-white-900)', + 1000: 'var(--spectrum-transparent-white-1000)' + }, + 'transparent-black': { + 25: 'var(--spectrum-transparent-black-25)', + 50: 'var(--spectrum-transparent-black-50)', + 75: 'var(--spectrum-transparent-black-75)', + 100: 'var(--spectrum-transparent-black-100)', + 200: 'var(--spectrum-transparent-black-200)', + 300: 'var(--spectrum-transparent-black-300)', + 400: 'var(--spectrum-transparent-black-400)', + 500: 'var(--spectrum-transparent-black-500)', + 600: 'var(--spectrum-transparent-black-600)', + 700: 'var(--spectrum-transparent-black-700)', + 800: 'var(--spectrum-transparent-black-800)', + 900: 'var(--spectrum-transparent-black-900)', + 1000: 'var(--spectrum-transparent-black-1000)' + }, + // text: { + // DEFAULT: 'var(--spectrum-alias-text-color)', + // hover: 'var(--spectrum-alias-text-color-hover)', + // down: 'var(--spectrum-alias-text-color-down)', + // 'key-focus': 'var(--spectrum-alias-text-color-key-focus)', + // 'mouse-focus': 'var(--spectrum-alias-text-color-mouse-focus)', + // disabled: 'var(--spectrum-alias-text-color-disabled)', + // invalid: 'var(--spectrum-alias-text-color-invalid)', + // selected: 'var(--spectrum-alias-text-color-selected)', + // 'selected-neutral': 'var(--spectrum-alias-text-color-selected-neutral)' + // }, + // border: { + // DEFAULT: 'var(--spectrum-alias-border-color)', + // hover: 'var(--spectrum-alias-border-color-hover)', + // down: 'var(--spectrum-alias-border-color-down)', + // focus: 'var(--spectrum-alias-border-color-focus)', + // 'mouse-focus': 'var(--spectrum-alias-border-color-mouse-focus)', + // disabled: 'var(--spectrum-alias-border-color-disabled)', + // extralight: 'var(--spectrum-alias-border-color-extralight)', + // light: 'var(--spectrum-alias-border-color-light)', + // mid: 'var(--spectrum-alias-border-color-mid)', + // dark: 'var(--spectrum-alias-border-color-dark)', + // transparent: 'var(--spectrum-alias-border-color-transparent)', + // 'translucent-dark': + // 'var(--spectrum-alias-border-color-translucent-dark)', + // 'translucent-darker': + // 'var(--spectrum-alias-border-color-transparent-darker)' + // }, + // focus: { + // DEFAULT: 'var(--spectrum-alias-focus-color)' + // }, + // 'focus-ring': { + // DEFAULT: 'var(--spectrum-alias-focus-ring-color)' + // }, + // icon: { + // DEFAULT: 'var(--spectrum-alias-icon-color)', + // 'over-background': 'var(--spectrum-alias-icon-color-over-background)', + // hover: 'var(--spectrum-alias-icon-color-hover)', + // down: 'var(--spectrum-alias-icon-color-down)', + // focus: 'var(--spectrum-alias-icon-color-focus)', + // disabled: 'var(--spectrum-alias-icon-color-disabled)', + // 'selected-neutral': 'var(--spectrum-alias-icon-color-selected-neutral)', + // selected: 'var(--spectrum-alias-icon-color-selected)', + // 'selected-hover': 'var(--spectrum-alias-icon-color-selected-hover)', + // 'selected-down': 'var(--spectrum-alias-icon-color-selected-down)', + // 'selected-focus': 'var(--spectrum-alias-icon-color-selected-focus)', + // error: 'var(--spectrum-alias-icon-color-error)' + // } +}; + +let dimensions = { + 0: 'var(--spectrum-global-dimension-size-0)', + 10: 'var(--spectrum-global-dimension-size-10)', + 25: 'var(--spectrum-global-dimension-size-25)', + 40: 'var(--spectrum-global-dimension-size-40)', + 50: 'var(--spectrum-global-dimension-size-50)', + 65: 'var(--spectrum-global-dimension-size-65)', + 75: 'var(--spectrum-global-dimension-size-75)', + 85: 'var(--spectrum-global-dimension-size-85)', + 100: 'var(--spectrum-global-dimension-size-100)', + 115: 'var(--spectrum-global-dimension-size-115)', + 125: 'var(--spectrum-global-dimension-size-125)', + 130: 'var(--spectrum-global-dimension-size-130)', + 150: 'var(--spectrum-global-dimension-size-150)', + 160: 'var(--spectrum-global-dimension-size-160)', + 175: 'var(--spectrum-global-dimension-size-175)', + 200: 'var(--spectrum-global-dimension-size-200)', + 225: 'var(--spectrum-global-dimension-size-225)', + 250: 'var(--spectrum-global-dimension-size-250)', + 275: 'var(--spectrum-global-dimension-size-275)', + 300: 'var(--spectrum-global-dimension-size-300)', + 325: 'var(--spectrum-global-dimension-size-325)', + 350: 'var(--spectrum-global-dimension-size-350)', + 400: 'var(--spectrum-global-dimension-size-400)', + 450: 'var(--spectrum-global-dimension-size-450)', + 500: 'var(--spectrum-global-dimension-size-500)', + 550: 'var(--spectrum-global-dimension-size-550)', + 600: 'var(--spectrum-global-dimension-size-600)', + 675: 'var(--spectrum-global-dimension-size-675)', + 700: 'var(--spectrum-global-dimension-size-700)', + 800: 'var(--spectrum-global-dimension-size-800)', + 900: 'var(--spectrum-global-dimension-size-900)', + 1000: 'var(--spectrum-global-dimension-size-1000)', + 1200: 'var(--spectrum-global-dimension-size-1200)', + 1250: 'var(--spectrum-global-dimension-size-1250)', + 1600: 'var(--spectrum-global-dimension-size-1600)', + 1700: 'var(--spectrum-global-dimension-size-1700)', + 2000: 'var(--spectrum-global-dimension-size-2000)', + 2400: 'var(--spectrum-global-dimension-size-2400)', + 3000: 'var(--spectrum-global-dimension-size-3000)', + 3400: 'var(--spectrum-global-dimension-size-3400)', + 3600: 'var( --spectrum-global-dimension-size-3600)', + 4600: 'var(--spectrum-global-dimension-size-4600)', + 5000: 'var(--spectrum-global-dimension-size-5000)', + 6000: 'var(--spectrum-global-dimension-size-6000)' +}; + +let height = { + ...dimensions, + + 'c-50': 'var(--spectrum-component-height-50)', + 'c-75': 'var(--spectrum-component-height-75)', + 'c-100': 'var(--spectrum-component-height-100)', + 'c-200': 'var(--spectrum-component-height-200)', + 'c-300': 'var(--spectrum-component-height-300)', + 'c-400': 'var(--spectrum-component-height-400)', + 'c-500': 'var(--spectrum-component-height-500)', + + full: '100%' +}; + +/** @type {import('tailwindcss').Config} */ +module.exports = { + corePlugins: { + preflight: false + }, + content: [ + 'src/**/*.tsx' + ], + future: { + respectDefaultRingColorOpacity: true + }, + darkMode: ['class', '[style*="color-scheme: dark;"]'], + theme: { + extend: { + ringOffsetWidth: { + DEFAULT: 'var(--spectrum-focus-indicator-gap)' + }, + textColor: { + DEFAULT: 'var(--spectrum-alias-text-color)' + }, + ringOffsetColor: { + DEFAULT: 'var(--spectrum-alias-background-color-default)' + } + }, + screens: { + xs: '304px', + sm: '768px', + md: '1280px', + lg: '1768px', + xl: '2160px' + }, + /** https://spectrum.adobe.com/page/color-system/ */ + colors, + backgroundColor: { + ...colors, + DEFAULT: 'var(--spectrum-background-layer-2-color)', + base: 'var(--spectrum-background-base-color)', + 'layer-1': 'var(--spectrum-background-layer-1-color)', + 'layer-2': 'var(--spectrum-background-layer-2-color)', + disabled: 'var(--spectrum-disabled-background-color)', + 'disabled-content': 'var(--spectrum-disabled-content-color)', + accent: { + ...colors.accent, + DEFAULT: 'var(--spectrum-accent-background-color-default)', + hover: 'var(--spectrum-accent-background-color-hover)', + down: 'var(--spectrum-accent-background-color-down)', + focus: 'var(--spectrum-accent-background-color-key-focus)' + }, + negative: { + ...colors.negative, + DEFAULT: 'var(--spectrum-negative-background-color-default)', + hover: 'var(--spectrum-negative-background-color-hover)', + down: 'var(--spectrum-negative-background-color-down)', + focus: 'var(--spectrum-negative-background-color-key-focus)' + }, + positive: { + ...colors.positive, + DEFAULT: 'var(--spectrum-positive-background-color-default)', + hover: 'var(--spectrum-positive-background-color-hover)', + down: 'var(--spectrum-positive-background-color-down)', + focus: 'var(--spectrum-positive-background-color-key-focus)' + }, + informative: { + ...colors.informative, + DEFAULT: 'var(--spectrum-informative-background-color-default)', + hover: 'var(--spectrum-informative-background-color-hover)', + down: 'var(--spectrum-informative-background-color-down)', + focus: 'var(--spectrum-informative-background-color-key-focus)' + }, + neutral: { + ...colors.neutral, + DEFAULT: 'var(--spectrum-neutral-background-color-default)', + hover: 'var(--spectrum-neutral-background-color-hover)', + down: 'var(--spectrum-neutral-background-color-down)', + focus: 'var(--spectrum-neutral-background-color-key-focus)' + }, + 'neutral-subdued': { + DEFAULT: 'var(--spectrum-neutral-subdued-background-color-default)', + hover: 'var(--spectrum-neutral-subdued-background-color-hover)', + down: 'var(--spectrum-neutral-subdued-background-color-down)', + focus: 'var(--spectrum-neutral-subdued-background-color-key-focus)' + }, + 'transparent-white': { + ...colors['transparent-white'], + disabled: 'var(--spectrum-disabled-static-white-background-color)' + }, + 'transparent-black': { + ...colors['transparent-black'], + disabled: 'var(--spectrum-disabled-static-black-background-color)' + } + }, + /** https://spectrum.adobe.com/page/states/#Keyboard-focus */ + ringColor: { + DEFAULT: 'var(--spectrum-focus-indicator-color)', + black: 'black', + white: 'white' + }, + ringOpacity: { + DEFAULT: '1' + }, + ringWidth: { + DEFAULT: 'var(--spectrum-focus-indicator-thickness)', + /** For use when next to existing blue border. */ + half: 'calc(var(--spectrum-focus-indicator-thickness) / 2)' + }, + /** https://spectrum.adobe.com/page/object-styles/#Drop-shadow */ + dropShadow: { + DEFAULT: + 'var(--spectrum-drop-shadow-x) var(--spectrum-drop-shadow-y) var(--spectrum-drop-shadow-blur) var(--spectrum-drop-shadow-color)' + }, + borderColor: { + ...colors, + disabled: 'var(--spectrum-disabled-border-color)', + 'disabled-content': 'var(--spectrum-disabled-content-color)', + accent: { + ...colors.accent, + DEFAULT: 'var(--spectrum-accent-background-color-default)', + hover: 'var(--spectrum-accent-background-color-hover)', + down: 'var(--spectrum-accent-background-color-down)', + focus: 'var(--spectrum-accent-background-color-key-focus)' + }, + negative: { + ...colors.negative, + DEFAULT: 'var(--spectrum-negative-border-color-default)', + hover: 'var(--spectrum-negative-border-color-hover)', + down: 'var(--spectrum-negative-border-color-down)', + focus: 'var(--spectrum-negative-border-color-key-focus)' + }, + 'transparent-white': { + ...colors['transparent-white'], + disabled: 'var(--spectrum-disabled-static-white-border-color)' + }, + 'transparent-black': { + ...colors['transparent-black'], + disabled: 'var(--spectrum-disabled-static-black-border-color)' + } + }, + /** https://spectrum.adobe.com/page/object-styles/#Border-width */ + borderWidth: { + DEFAULT: 'var(--spectrum-border-width-100)', + none: '0', + 100: 'var(--spectrum-border-width-100)', + 200: 'var(--spectrum-border-width-200)', + 400: 'var(--spectrum-border-width-400)' + }, + /** https://spectrum.adobe.com/page/object-styles/#Rounding */ + borderRadius: { + DEFAULT: 'var(--spectrum-corner-radius-200)', + 75: 'var(--spectrum-corner-radius-75)', + 100: 'var(--spectrum-corner-radius-100)', + 200: 'var(--spectrum-corner-radius-200)', + full: '9999px' + }, + textColor: { + ...colors, + disabled: 'var(--spectrum-disabled-content-color)', + accent: { + ...colors.accent, + DEFAULT: 'var(--spectrum-accent-content-color-default)', + hover: 'var(--spectrum-accent-content-color-hover)', + down: 'var(--spectrum-accent-content-color-down)', + focus: 'var(--spectrum-accent-content-color-key-focus)', + selected: 'var(--spectrum-accent-content-color-selected)' + }, + negative: { + ...colors.negative, + DEFAULT: 'var(--spectrum-negative-content-color-default)', + hover: 'var(--spectrum-negative-content-color-hover)', + down: 'var(--spectrum-negative-content-color-down)', + focus: 'var(--spectrum-negative-content-color-key-focus)' + }, + neutral: { + ...colors.neutral, + DEFAULT: 'var(--spectrum-neutral-content-color-default)', + hover: 'var(--spectrum-neutral-content-color-hover)', + down: 'var(--spectrum-neutral-content-color-down)', + focus: 'var(--spectrum-neutral-content-color-key-focus)' + }, + 'neutral-subdued': { + DEFAULT: 'var(--spectrum-neutral-subdued-content-color-default)', + hover: 'var(--spectrum-neutral-subdued-content-color-hover)', + down: 'var(--spectrum-neutral-subdued-content-color-down)', + focus: 'var(--spectrum-neutral-subdued-content-color-key-focus)' + }, + 'transparent-white': { + ...colors['transparent-white'], + content: 'black', + disabled: 'var(--spectrum-disabled-static-white-content-color)' + }, + 'transparent-black': { + ...colors['transparent-black'], + content: 'white', + disabled: 'var(--spectrum-disabled-static-black-content-color)' + } + }, + /** https://spectrum.adobe.com/page/typography/#Font-sizes */ + fontSize: { + DEFAULT: 'var(--spectrum-body-size-m)', + /// ??? + 50: 'var(--spectrum-font-size-50)', + 75: 'var(--spectrum-font-size-75)', + 100: 'var(--spectrum-font-size-100)', + 200: 'var(--spectrum-font-size-200)', + 300: 'var(--spectrum-font-size-300)', + 400: 'var(--spectrum-font-size-400)', + 500: 'var(--spectrum-font-size-500)', + 600: 'var(--spectrum-font-size-600)', + 700: 'var(--spectrum-font-size-700)', + 800: 'var(--spectrum-font-size-800)', + 900: 'var(--spectrum-font-size-900)', + 1000: 'var(--spectrum-font-size-1000)', + 1100: 'var(--spectrum-font-size-1100)', + 1200: 'var(--spectrum-font-size-1200)', + 1300: 'var(--spectrum-font-size-1300)', + + // base: 'var(--spectrum-body-size-s)', + + // 'body-xxxl': 'var(--spectrum-body-size-xxxl)', + // 'body-xxl': 'var(--spectrum-body-size-xxl)', + // 'body-xl': 'var(--spectrum-body-size-xl)', + // 'body-l': 'var(--spectrum-body-size-l)', + // 'body-m': 'var(--spectrum-body-size-m)', + // 'body-s': 'var(--spectrum-body-size-s)', + // 'body-xs': 'var(--spectrum-body-size-xs)', + + // 'heading-xxxl': 'var(--spectrum-heading-size-xxxl)', + // 'heading-xxl': 'var(--spectrum-heading-size-xxl)', + // 'heading-xl': 'var(--spectrum-heading-size-xl)', + // 'heading-l': 'var(--spectrum-heading-size-l)', + // 'heading-m': 'var(--spectrum-heading-size-m)', + // 'heading-s': 'var(--spectrum-heading-size-s)', + // 'heading-xs': 'var(--spectrum-heading-size-xs)', + // 'heading-xxs': 'var(--spectrum-heading-size-xxs)', + }, + fontWeight: { + DEFAULT: 'var(--spectrum-regular-font-weight)', + light: 'var(--spectrum-light-font-weight)', + regular: 'var(--spectrum-regular-font-weight)', + medium: 'var(--spectrum-medium-font-weight)', + bold: 'var(--spectrum-bold-font-weight)', + black: 'var(--spectrum-black-font-weight)' + }, + letterSpacing: { + // DEFAULT: 'var(--spectrum-global-font-letter-spacing-medium)', + // none: 'var(--spectrum-global-font-letter-spacing-none)', + // small: 'var(--spectrum-global-font-letter-spacing-small)', + // hand: 'var(--spectrum-global-font-letter-spacing-han)', + // medium: 'var(--spectrum-global-font-letter-spacing-medium)' + }, + lineHeight: { + DEFAULT: 'var(--spectrum-line-height-100)', // ?? + 100: 'var(--spectrum-line-height-100)', + 200: 'var(--spectrum-line-height-200)' + }, + /** https://spectrum.adobe.com/page/motion/ */ + transitionTimingFunction: { + // ?? + 'ease-in-out': 'cubic-bezier(.45, 0, .40, 1)', + 'ease-in': 'cubic-bezier(.50, 0, 1, 1)', + 'ease-out': 'cubic-bezier(0, 0, 0.40, 1)', + linear: 'cubic-bezier(0, 0, 1, 1)' + }, + transitionDuration: { + DEFAULT: '130ms', + none: '0ms', + // These don't exist anymore? + 0: '0ms', + 100: '130ms', + 200: '160ms', + 300: '190ms', + 400: '220ms', + 500: '250ms', + 600: '300ms', + 700: '350ms', + 800: '400ms', + 900: '450ms', + 1000: '500ms', + 2000: '1000ms', + 4000: '2000ms' + }, + spacing: { + ...dimensions, + + // These are static. + // 0: '0px', + 'static-50': 'var(--spectrum-spacing-50)', + 'static-75': 'var(--spectrum-spacing-75)', + 'static-100': 'var(--spectrum-spacing-100)', + // 200: 'var(--spectrum-spacing-200)', + // 300: 'var(--spectrum-spacing-300)', + // 400: 'var(--spectrum-spacing-400)', + // 500: 'var(--spectrum-spacing-500)', + // 600: 'var(--spectrum-spacing-600)', + // 700: 'var(--spectrum-spacing-700)', + // 800: 'var(--spectrum-spacing-800)', + // 900: 'var(--spectrum-spacing-900)', + // 1000: 'var(--spectrum-spacing-1000)', + + // These scale. + 'ttv-50': 'var(--spectrum-text-to-visual-50)', + 'ttv-75': 'var(--spectrum-text-to-visual-75)', + 'ttv-100': 'var(--spectrum-text-to-visual-100)', + 'ttv-200': 'var(--spectrum-text-to-visual-200)', + 'ttv-300': 'var(--spectrum-text-to-visual-300)', + + 'ptv-75': 'var(--spectrum-component-pill-edge-to-visual-75)', + 'ptv-100': 'var(--spectrum-component-pill-edge-to-visual-100)', + 'ptv-200': 'var(--spectrum-component-pill-edge-to-visual-200)', + 'ptv-300': 'var(--spectrum-component-pill-edge-to-visual-300)', + + 'ptvo-75': 'var(--spectrum-component-pill-edge-to-visual-only-75)', + 'ptvo-100': 'var(--spectrum-component-pill-edge-to-visual-only-100)', + 'ptvo-200': 'var(--spectrum-component-pill-edge-to-visual-only-200)', + 'ptvo-300': 'var(--spectrum-component-pill-edge-to-visual-only-300)', + + 'ptt-75': 'var(--spectrum-component-pill-edge-to-text-75)', + 'ptt-100': 'var(--spectrum-component-pill-edge-to-text-100)', + 'ptt-200': 'var(--spectrum-component-pill-edge-to-text-200)', + 'ptt-300': 'var(--spectrum-component-pill-edge-to-text-300)', + + 'ttc-75': 'var(--spectrum-text-to-control-75)', + 'ttc-100': 'var(--spectrum-text-to-control-100)', + 'ttc-200': 'var(--spectrum-text-to-control-200)', + 'ttc-300': 'var(--spectrum-text-to-control-300)', + + 'ett-75': 'var(--spectrum-component-edge-to-text-75)', + 'ett-100': 'var(--spectrum-component-edge-to-text-100)', + 'ett-200': 'var(--spectrum-component-edge-to-text-200)', + 'ett-300': 'var(--spectrum-component-edge-to-text-300)', + }, + opacity: { + 100: '1', + 90: '0.9', + 80: '0.8', + 60: '0.6', + 50: '0.5', + 42: '0.42', + 40: '0.4', + 30: '0.3', + 25: '0.25', + 20: '0.2', + 15: '0.15', + 10: '0.1', + 8: '0.08', + 7: '0.07', + 6: '0.06', + 5: '0.05', + 4: '0.04' + }, + height: height, + minHeight: height, + width: { + ...dimensions, + 'field': 'var(--spectrum-field-width)' + } + }, + plugins: [ + require('tailwindcss-react-aria-components'), + require('tailwindcss-animate'), + plugin(({addUtilities, matchUtilities, theme, addBase}) => { + // colors.tint = tint; + let tintValues = {}; + for (let [prefix, property, themeProperty] of [['bg', 'backgroundColor'], ['border', 'borderColor'], ['outline', 'outlineColor'], ['text', 'color', 'textColor']]) { + let colors = theme(themeProperty || property) ?? theme('colors'); + let tint = {}; + for (let key of [...Object.keys(colors.gray), ...Object.keys(colors.red)]) { + if (key > 900) { + tint[key] = `var(--tint-${key}, var(--tint-900))`; + } else { + tint[key] = `var(--tint-${key})`; + } + } + tint.DEFAULT = `var(--default-tint-DEFAULT, var(--tint-${prefix}-DEFAULT))`; + tint.hover = `var(--default-tint-hover, var(--tint-${prefix}-hover))`; + tint.focus = `var(--default-tint-focus, var(--tint-${prefix}-focus))`; + tint.down = `var(--default-tint-down, var(--tint-${prefix}-down))`; + tint.disabled = `var(--default-tint-disabled, var(--tint-${prefix}-disabled))`; + tint.content = `var(--tint-${prefix}-disabled)`; + colors.tint = tint; + + let colorValues = {}; + let hoverColorValues = {}; + for (let color in colors) { + if (colors[color].hover) { + colorValues[color] = colors[color]; + hoverColorValues[color] = colors[color]; + } + + if (colors[color][100]) { + let keys = Object.keys(colors[color]).filter(k => !isNaN(k)).map(k => Number(k)).sort((a, b) => a - b); + keys.forEach((index, i) => { + colorValues[`${color}-${index}`] = { + DEFAULT: colors[color][index], + hover: colors[color][keys[i + 1]] || colors[color][index], + focus: colors[color][keys[i + 1]] || colors[color][index], + down: colors[color][keys[i + 1]] || colors[color][index], + // down: colors[color][keys[i + 2]] || colors[color][keys[i + 1]] || colors[color][index] + }; + + hoverColorValues[`${color}-${index}`] = { + DEFAULT: 'transparent', + hover: colors[color][index], + focus: colors[color][index], + down: colors[color][index] + }; + }); + } + + tintValues[color] ??= {}; + for (let key of ['DEFAULT', 'hover', 'focus', 'down', 'disabled', 'content']) { + if (colors[color][key]) { + tintValues[color][`${prefix}-${key}`] = colors[color][key]; + } + } + } + + matchUtilities({ + [`${prefix}-base`]: (value) => ({ + [property]: value.DEFAULT, + '&[data-hovered]': { + [property]: value.hover + }, + '&[data-focus-visible]': { + [property]: value.focus + }, + '&[data-pressed]': { + [property]: value.down + } + }), + [`group-${prefix}-base`]: (value) => ({ + [property]: value.DEFAULT, + '&:is(.group[data-hovered] *)': { + [property]: value.hover + }, + '&:is(.group[data-focus-visible] *)': { + [property]: value.focus + }, + '&:is(.group[data-pressed] *)': { + [property]: value.down + } + }) + }, {type: 'color', values: colorValues}); + matchUtilities({ + [`${prefix}-hover`]: (value) => ({ + [property]: 'transparent', + '&[data-hovered]': { + [property]: value.hover + }, + '&[data-focus-visible]': { + [property]: value.focus + }, + '&[data-pressed]': { + [property]: value.down + } + }), + [`group-${prefix}-hover`]: (value) => ({ + [property]: 'transparent', + '&:is(.group[data-hovered] *)': { + [property]: value.hover + }, + '&:is(.group[data-focus-visible] *)': { + [property]: value.focus + }, + '&:is(.group[data-pressed] *)': { + [property]: value.down + } + }) + }, {type: 'color', values: hoverColorValues}); + matchUtilities({ + [`${prefix}-tint`]: (value) => ({ + [property]: value + }) + }, {type: 'color', values: tint}); + } + + for (let color in colors) { + tintValues[color] ??= {}; + Object.assign(tintValues[color], colors[color]); + if (colors[color][100]) { + let keys = Object.keys(colors[color]); + keys.forEach((index, i) => { + if (isNaN(index)) return + tintValues[`${color}-${index}`] = colors[color]; + }); + } + } + + matchUtilities({ + tint: (value, {modifier}) => { + let res = {}; + for (let key in value) { + res[`--tint-${key}`] = value[key]; + } + if (modifier) { + let keys = Object.keys(value); + let i = keys.indexOf(modifier); + res['--default-tint-DEFAULT'] = `var(--tint-${modifier})`; + res['--default-tint-hover'] = res['--default-tint-focus'] = res['--default-tint-down'] = `var(--tint-${keys[i + 1] || modifier})`; + } + return res; + } + }, {type: 'color', values: tintValues, modifiers: 'any'}); + + addUtilities({ + '.center-baseline': { + display: 'flex', + alignItems: 'center', + '&::before': { + content: '"x"', + width: 0, + visibility: 'hidden' + } + }, + '.dir': { + '--dir': '1', + '&:dir(rtl)': { + '--dir': '-1' + } + } + }); + + addBase({ + '.reset-border': { + borderWidth: 0, + borderStyle: 'solid' + } + }); + }) + ] +}; diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 00000000000..526f416a230 --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,2 @@ +/** @type {import('tailwindcss').Config} */ +module.exports = require('./tailwind-spectrum'); From 3db097811092437e8688398b99c14c3221aa5c6a Mon Sep 17 00:00:00 2001 From: Rob Snow Date: Thu, 23 Nov 2023 17:33:43 +1100 Subject: [PATCH 005/203] Start work on button --- packages/@react-spectrum/s2/package.json | 3 + .../s2/src/AdobeClownVF-Roman_crop.ttf | Bin 0 -> 807124 bytes packages/@react-spectrum/s2/src/Button.tsx | 234 +++++++++++++++++- packages/@react-spectrum/s2/src/tailwind.css | 6 + 4 files changed, 238 insertions(+), 5 deletions(-) create mode 100644 packages/@react-spectrum/s2/src/AdobeClownVF-Roman_crop.ttf diff --git a/packages/@react-spectrum/s2/package.json b/packages/@react-spectrum/s2/package.json index e1c6ecc9c65..4dcd9433a28 100644 --- a/packages/@react-spectrum/s2/package.json +++ b/packages/@react-spectrum/s2/package.json @@ -1,6 +1,7 @@ { "devDependencies": { "@babel/preset-react": "^7.23.3", + "@react-spectrum/utils": "latest", "@storybook/addon-essentials": "^7.5.3", "@storybook/addon-interactions": "^7.5.3", "@storybook/addon-links": "^7.5.3", @@ -20,6 +21,7 @@ "postcss-loader": "^7.3.3", "prop-types": "^15.8.1", "react": "^18.2.0", + "react-aria": "latest", "react-aria-components": "latest", "react-dom": "^18.2.0", "storybook": "^7.5.3", @@ -28,6 +30,7 @@ "tailwindcss": "^3.3.5", "tailwindcss-animate": "^1.0.7", "tailwindcss-react-aria-components": "latest", + "tailwind-variants": "^0.1.18", "typescript": "^5.3.2" }, "resolutions": { diff --git a/packages/@react-spectrum/s2/src/AdobeClownVF-Roman_crop.ttf b/packages/@react-spectrum/s2/src/AdobeClownVF-Roman_crop.ttf new file mode 100644 index 0000000000000000000000000000000000000000..50a28156e79166dc0554d82d94bba5ae9b977aa8 GIT binary patch literal 807124 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

vcL%nPzDtSzw`$8r|4R1-g^@oE;6PRznF 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 !4sI0(wb!U(`BQcw6eb6r*x0Yc}Mne)VCwnsmn$ zLaU0X@O?Z<|NhHfM!I)4qN?BB!jmE@HagB|>Pv*y6@-TAgr?skD!?^n%_rz0~5WG>WkMTSzXy#Y
  • Sr|RMeidgAtL2wm?GsyVFhWlSZ-G>=fD5~^?+ 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%0Ac6n%m}V`6El%N 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�!c3ta~0{>rLk7L3SE9^&&@aQr3eFU&wA@8 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

    satY1`HK(WXf`!x+#ogZ1@Or~*g`6>FI)nmhb5 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 true]}], + // 'default-tint': [{'default-tint': [() => true]}], + // 'font-size': [{text: []}] + // } + // } + twMerge: false +}); + +let staticColorButton = tv({ + extend: baseButton, + base: 'disabled:text-tint-disabled', + variants: { + variant: { + primary: '', + secondary: '' + }, + style: { + fill: 'disabled:bg-tint-disabled', + outline: 'bg-hover-tint-300 text-tint-900 disabled:border-tint-disabled' + }, + staticColor: { + black: 'ring-black', + white: 'ring-white' + } + }, + compoundVariants: [ + { + staticColor: 'black', + variant: 'primary', + style: 'fill', + class: 'text-white' + }, + { + staticColor: 'white', + variant: 'primary', + style: 'fill', + class: 'text-black' + }, + { + staticColor: 'black', + variant: 'primary', + class: 'tint-transparent-black/800' + }, + { + staticColor: 'white', + variant: 'primary', + class: 'tint-transparent-white/800' + }, + { + staticColor: 'black', + variant: 'secondary', + class: 'tint-transparent-black/200 text-black' + }, + { + staticColor: 'white', + variant: 'secondary', + class: 'tint-transparent-white/200 text-white' + }, + { + variant: 'primary', + style: 'outline', + class: 'border-base-tint-800' + }, + { + variant: 'secondary', + style: 'outline', + class: 'border-base-tint-300' + } + ] +}, {twMerge: false}); + +function Button(props: ButtonProps, ref) { + props = useSlotProps(props, 'button'); + let { + elementType: ElementType = 'button', + children, + variant, + style = variant === 'accent' || variant === 'cta' ? 'fill' : 'outline', + staticColor, + isDisabled, + isPending, + autoFocus, + ...otherProps + } = props; + let domRef = useFocusableRef(ref); + let {buttonProps, isPressed} = useButton(props, domRef); + let {hoverProps, isHovered} = useHover({isDisabled}); + let {styleProps} = useStyleProps(otherProps as any); + // let hasLabel = useHasChild(`.${styles['spectrum-Button-label']}`, domRef); + // let hasIcon = useHasChild(`.${styles['spectrum-Icon']}`, domRef); + let hasLabel = useHasChild('[data-label]', domRef); + let hasIcon = useHasChild('[data-icon]', domRef); + let [isProgressVisible, setIsProgressVisible] = useState(false); + + useEffect(() => { + let timeout: ReturnType; + + if (isPending) { + // Start timer when isPending is set to true. + timeout = setTimeout(() => { + setIsProgressVisible(true); + }, 1000); + } else { + // Exit loading state when isPending is set to false. */ + setIsProgressVisible(false); + } + return () => { + // Clean up on unmount or when user removes isPending prop before entering loading state. + clearTimeout(timeout); + }; + }, [isPending]); + + if (variant === 'cta') { + variant = 'accent'; + } else if (variant === 'overBackground') { + variant = 'primary'; + staticColor = 'white'; + } + + // let styles = hasIcon && !hasLabel ? iconOnlyButton : buttonStyles; + let styles= staticColor ? staticColorButton : buttonStyles; + if (staticColor && variant !== 'secondary') { + variant = 'primary'; + } -export function Button(props: ButtonProps) { return ( - <> -

    Button
    - - + + {props.children} + ); } + +let _Button = React.forwardRef(Button); +export {_Button as Button}; diff --git a/packages/@react-spectrum/s2/src/tailwind.css b/packages/@react-spectrum/s2/src/tailwind.css index 420adb072b1..a814d722311 100644 --- a/packages/@react-spectrum/s2/src/tailwind.css +++ b/packages/@react-spectrum/s2/src/tailwind.css @@ -2,3 +2,9 @@ @tailwind base; @tailwind components; @tailwind utilities; + +@font-face { + font-family: "adobe-clown"; + src: url("./AdobeClownVF-Roman_crop.ttf"); + font-display: swap; +} From 12f3a9e37adb7d391068fd2bbce81f4f21899e56 Mon Sep 17 00:00:00 2001 From: Rob Snow Date: Mon, 27 Nov 2023 14:51:24 +1100 Subject: [PATCH 006/203] Get Spectrum styles working --- .storybook-s2/custom-addons/provider/index.js | 71 + .../custom-addons/provider/register.js | 127 + .storybook-s2/main.ts | 4 + .storybook-s2/preview-body.html | 25 + .storybook-s2/preview.ts | 30 + dist/css/dark-vars.css | 287 ++ dist/css/global-vars.css | 583 ++++ dist/css/large-vars.css | 505 +++ dist/css/light-vars.css | 287 ++ dist/css/medium-vars.css | 505 +++ dist/css/spectrum/global-vars.css | 4 + packages/@react-spectrum/s2/package.json | 11 +- packages/@react-spectrum/s2/src/tailwind.css | 2 +- .../s2/stories/Button.stories.tsx | 2 +- .../components/accordion/index.css | 143 + .../components/accordion/skin.css | 67 + .../components/accordion/vars.css | 14 + .../components/actiongroup/index.css | 206 ++ .../components/actiongroup/vars.css | 13 + .../components/actionmenu/index.css | 11 + .../components/actionmenu/vars.css | 13 + spectrum-css-temp/components/alert/index.css | 88 + spectrum-css-temp/components/alert/skin.css | 65 + spectrum-css-temp/components/alert/vars.css | 14 + spectrum-css-temp/components/asset/index.css | 32 + spectrum-css-temp/components/asset/skin.css | 24 + spectrum-css-temp/components/asset/vars.css | 14 + .../components/assetlist/index.css | 111 + .../components/assetlist/skin.css | 45 + .../components/assetlist/vars.css | 14 + spectrum-css-temp/components/avatar/index.css | 22 + spectrum-css-temp/components/avatar/skin.css | 29 + spectrum-css-temp/components/avatar/vars.css | 14 + spectrum-css-temp/components/badge/index.css | 74 + spectrum-css-temp/components/badge/skin.css | 61 + spectrum-css-temp/components/badge/vars.css | 14 + spectrum-css-temp/components/banner/index.css | 31 + spectrum-css-temp/components/banner/skin.css | 27 + spectrum-css-temp/components/banner/vars.css | 14 + .../components/barloader/index.css | 139 + .../components/barloader/skin.css | 98 + .../components/barloader/vars.css | 14 + .../components/breadcrumb/index.css | 184 + .../components/breadcrumb/skin.css | 108 + .../components/breadcrumb/vars.css | 14 + spectrum-css-temp/components/button/index.css | 382 ++ spectrum-css-temp/components/button/skin.css | 1057 ++++++ spectrum-css-temp/components/button/vars.css | 14 + .../components/buttongroup/index.css | 56 + .../components/buttongroup/vars.css | 13 + .../components/calendar/index.css | 324 ++ .../components/calendar/skin.css | 209 ++ .../components/calendar/vars.css | 14 + spectrum-css-temp/components/card/index.css | 1139 ++++++ spectrum-css-temp/components/card/skin.css | 350 ++ spectrum-css-temp/components/card/vars.css | 14 + .../components/checkbox/index.css | 191 + .../components/checkbox/skin.css | 321 ++ .../components/checkbox/vars.css | 14 + .../components/circleloader/animation.css | 501 +++ .../components/circleloader/index.css | 126 + .../components/circleloader/skin.css | 56 + .../components/circleloader/vars.css | 14 + .../components/coachmark/animation.css | 41 + .../components/coachmark/index.css | 136 + .../components/coachmark/skin.css | 41 + .../components/coachmark/vars.css | 14 + .../components/colorarea/index.css | 71 + .../components/colorarea/skin.css | 37 + .../components/colorarea/vars.css | 14 + .../components/colorhandle/index.css | 81 + .../components/colorhandle/skin.css | 46 + .../components/colorhandle/vars.css | 14 + .../components/colorloupe/index.css | 46 + .../components/colorloupe/skin.css | 19 + .../components/colorloupe/vars.css | 14 + .../components/colorslider/index.css | 120 + .../components/colorslider/skin.css | 33 + .../components/colorslider/vars.css | 14 + .../components/colorwheel/index.css | 86 + .../components/colorwheel/skin.css | 39 + .../components/colorwheel/vars.css | 14 + .../components/commons/focus-ring.css | 47 + .../components/commons/fonts.css | 84 + .../components/commons/index.css | 15 + .../components/commons/layout.css | 20 + .../components/contextualhelp/index.css | 44 + .../components/contextualhelp/skin.css | 11 + .../components/contextualhelp/vars.css | 14 + .../components/cyclebutton/index.css | 22 + .../components/cyclebutton/skin.css | 11 + .../components/cyclebutton/vars.css | 14 + spectrum-css-temp/components/dialog/index.css | 534 +++ spectrum-css-temp/components/dialog/skin.css | 38 + spectrum-css-temp/components/dialog/vars.css | 14 + spectrum-css-temp/components/dnd/index.css | 33 + spectrum-css-temp/components/dnd/skin.css | 58 + spectrum-css-temp/components/dnd/vars.css | 14 + .../components/dropdown/index.css | 172 + .../components/dropdown/skin.css | 98 + .../components/dropdown/vars.css | 14 + .../components/dropindicator/index.css | 62 + .../components/dropindicator/skin.css | 28 + .../components/dropindicator/vars.css | 14 + .../components/dropzone/index.css | 88 + .../components/dropzone/skin.css | 55 + .../components/dropzone/vars.css | 14 + .../components/fieldgroup/index.css | 30 + .../components/fieldgroup/vars.css | 13 + .../components/fieldlabel/index.css | 248 ++ .../components/fieldlabel/skin.css | 20 + .../components/fieldlabel/vars.css | 14 + .../components/helptext/index.css | 51 + .../components/helptext/skin.css | 41 + .../components/helptext/vars.css | 14 + spectrum-css-temp/components/icon/icons.css | 37 + spectrum-css-temp/components/icon/index.css | 15 + .../components/icon/ui-icons.css | 194 ++ spectrum-css-temp/components/icon/vars.css | 13 + .../components/icon/workflow-icons.css | 84 + .../components/illustratedmessage/index.css | 72 + .../components/illustratedmessage/skin.css | 33 + .../components/illustratedmessage/vars.css | 14 + spectrum-css-temp/components/image/index.css | 22 + spectrum-css-temp/components/image/vars.css | 13 + .../components/inlinealert/index.css | 128 + .../components/inlinealert/skin.css | 65 + .../components/inlinealert/vars.css | 14 + .../components/inputgroup/index.css | 250 ++ .../components/inputgroup/skin.css | 367 ++ .../components/inputgroup/vars.css | 14 + spectrum-css-temp/components/link/index.css | 59 + spectrum-css-temp/components/link/skin.css | 90 + spectrum-css-temp/components/link/vars.css | 14 + spectrum-css-temp/components/menu/index.css | 234 ++ spectrum-css-temp/components/menu/skin.css | 131 + spectrum-css-temp/components/menu/vars.css | 14 + spectrum-css-temp/components/miller/index.css | 40 + spectrum-css-temp/components/miller/vars.css | 13 + spectrum-css-temp/components/modal/index.css | 154 + spectrum-css-temp/components/modal/skin.css | 21 + spectrum-css-temp/components/modal/vars.css | 14 + .../components/overlay/index.css | 56 + spectrum-css-temp/components/page/index.css | 13 + spectrum-css-temp/components/page/skin.css | 18 + spectrum-css-temp/components/page/vars.css | 14 + .../components/pagination/index.css | 37 + .../components/pagination/skin.css | 26 + .../components/pagination/vars.css | 14 + .../components/popover/index.css | 155 + spectrum-css-temp/components/popover/skin.css | 46 + spectrum-css-temp/components/popover/vars.css | 14 + .../components/quickaction/index.css | 57 + .../components/quickaction/skin.css | 19 + .../components/quickaction/vars.css | 14 + spectrum-css-temp/components/radio/index.css | 179 + spectrum-css-temp/components/radio/skin.css | 233 ++ spectrum-css-temp/components/radio/vars.css | 14 + spectrum-css-temp/components/rating/index.css | 107 + spectrum-css-temp/components/rating/skin.css | 96 + spectrum-css-temp/components/rating/vars.css | 14 + spectrum-css-temp/components/rule/index.css | 72 + spectrum-css-temp/components/rule/skin.css | 32 + spectrum-css-temp/components/rule/vars.css | 14 + spectrum-css-temp/components/search/index.css | 101 + spectrum-css-temp/components/search/vars.css | 13 + .../components/searchwithin/index.css | 75 + .../components/searchwithin/vars.css | 13 + .../components/sidenav/index.css | 122 + spectrum-css-temp/components/sidenav/skin.css | 84 + spectrum-css-temp/components/sidenav/vars.css | 14 + spectrum-css-temp/components/slider/index.css | 641 ++++ spectrum-css-temp/components/slider/skin.css | 374 ++ spectrum-css-temp/components/slider/vars.css | 14 + .../components/splitbutton/index.css | 118 + .../components/splitbutton/vars.css | 13 + .../components/splitview/index.css | 146 + .../components/splitview/skin.css | 70 + .../components/splitview/vars.css | 14 + .../components/statuslight/index.css | 54 + .../components/statuslight/skin.css | 93 + .../components/statuslight/vars.css | 14 + .../components/steplist/index.css | 333 ++ .../components/steplist/skin.css | 232 ++ .../components/steplist/vars.css | 14 + .../components/stepper/index.css | 252 ++ spectrum-css-temp/components/stepper/skin.css | 326 ++ spectrum-css-temp/components/stepper/vars.css | 14 + spectrum-css-temp/components/table/index.css | 540 +++ spectrum-css-temp/components/table/skin.css | 393 +++ spectrum-css-temp/components/table/vars.css | 14 + spectrum-css-temp/components/tabs/index.css | 287 ++ spectrum-css-temp/components/tabs/skin.css | 233 ++ spectrum-css-temp/components/tabs/vars.css | 14 + spectrum-css-temp/components/tags/index.css | 150 + spectrum-css-temp/components/tags/skin.css | 94 + spectrum-css-temp/components/tags/vars.css | 14 + .../textfield/embed/AlertMedium.svg | 1 + .../textfield/embed/CheckmarkMedium.svg | 1 + .../components/textfield/index.css | 301 ++ .../components/textfield/skin.css | 201 ++ .../components/textfield/vars.css | 14 + spectrum-css-temp/components/toast/index.css | 89 + spectrum-css-temp/components/toast/skin.css | 46 + spectrum-css-temp/components/toast/vars.css | 14 + spectrum-css-temp/components/toggle/index.css | 160 + spectrum-css-temp/components/toggle/skin.css | 306 ++ spectrum-css-temp/components/toggle/vars.css | 14 + .../components/tooltip/index.css | 242 ++ spectrum-css-temp/components/tooltip/skin.css | 71 + spectrum-css-temp/components/tooltip/vars.css | 14 + spectrum-css-temp/components/tray/index.css | 106 + spectrum-css-temp/components/tray/skin.css | 15 + spectrum-css-temp/components/tray/vars.css | 14 + .../components/treeview/index.css | 160 + .../components/treeview/skin.css | 54 + .../components/treeview/vars.css | 14 + .../components/typography/font.css | 18 + .../components/typography/index.css | 182 + .../components/typography/skin.css | 128 + .../components/typography/vars.css | 2878 +++++++++++++++ .../components/underlay/index.css | 52 + .../components/underlay/skin.css | 15 + .../components/underlay/vars.css | 14 + spectrum-css-temp/components/well/index.css | 31 + spectrum-css-temp/components/well/skin.css | 16 + spectrum-css-temp/components/well/vars.css | 14 + spectrum-css-temp/package.json | 5 + spectrum-css-temp/vars/express.css | 180 + spectrum-css-temp/vars/s2-dark.css | 531 +++ spectrum-css-temp/vars/s2-light.css | 480 +++ spectrum-css-temp/vars/s2.css | 159 + spectrum-css-temp/vars/spectrum-dark.css | 365 ++ spectrum-css-temp/vars/spectrum-darkest.css | 367 ++ spectrum-css-temp/vars/spectrum-global.css | 660 ++++ spectrum-css-temp/vars/spectrum-large.css | 413 +++ spectrum-css-temp/vars/spectrum-light.css | 319 ++ spectrum-css-temp/vars/spectrum-lightest.css | 322 ++ spectrum-css-temp/vars/spectrum-medium.css | 414 +++ spectrum-css-temp/vars/spectrum-metadata.json | 3092 +++++++++++++++++ spectrum.js | 30 + style-dictionary.config.js | 159 + 242 files changed, 32708 insertions(+), 3 deletions(-) create mode 100644 .storybook-s2/custom-addons/provider/index.js create mode 100644 .storybook-s2/custom-addons/provider/register.js create mode 100644 .storybook-s2/preview-body.html create mode 100644 dist/css/dark-vars.css create mode 100644 dist/css/global-vars.css create mode 100644 dist/css/large-vars.css create mode 100644 dist/css/light-vars.css create mode 100644 dist/css/medium-vars.css create mode 100644 dist/css/spectrum/global-vars.css create mode 100644 spectrum-css-temp/components/accordion/index.css create mode 100644 spectrum-css-temp/components/accordion/skin.css create mode 100644 spectrum-css-temp/components/accordion/vars.css create mode 100644 spectrum-css-temp/components/actiongroup/index.css create mode 100644 spectrum-css-temp/components/actiongroup/vars.css create mode 100644 spectrum-css-temp/components/actionmenu/index.css create mode 100644 spectrum-css-temp/components/actionmenu/vars.css create mode 100644 spectrum-css-temp/components/alert/index.css create mode 100644 spectrum-css-temp/components/alert/skin.css create mode 100644 spectrum-css-temp/components/alert/vars.css create mode 100644 spectrum-css-temp/components/asset/index.css create mode 100644 spectrum-css-temp/components/asset/skin.css create mode 100644 spectrum-css-temp/components/asset/vars.css create mode 100644 spectrum-css-temp/components/assetlist/index.css create mode 100644 spectrum-css-temp/components/assetlist/skin.css create mode 100644 spectrum-css-temp/components/assetlist/vars.css create mode 100644 spectrum-css-temp/components/avatar/index.css create mode 100644 spectrum-css-temp/components/avatar/skin.css create mode 100644 spectrum-css-temp/components/avatar/vars.css create mode 100644 spectrum-css-temp/components/badge/index.css create mode 100644 spectrum-css-temp/components/badge/skin.css create mode 100644 spectrum-css-temp/components/badge/vars.css create mode 100644 spectrum-css-temp/components/banner/index.css create mode 100644 spectrum-css-temp/components/banner/skin.css create mode 100644 spectrum-css-temp/components/banner/vars.css create mode 100644 spectrum-css-temp/components/barloader/index.css create mode 100644 spectrum-css-temp/components/barloader/skin.css create mode 100644 spectrum-css-temp/components/barloader/vars.css create mode 100644 spectrum-css-temp/components/breadcrumb/index.css create mode 100644 spectrum-css-temp/components/breadcrumb/skin.css create mode 100644 spectrum-css-temp/components/breadcrumb/vars.css create mode 100644 spectrum-css-temp/components/button/index.css create mode 100644 spectrum-css-temp/components/button/skin.css create mode 100644 spectrum-css-temp/components/button/vars.css create mode 100644 spectrum-css-temp/components/buttongroup/index.css create mode 100644 spectrum-css-temp/components/buttongroup/vars.css create mode 100644 spectrum-css-temp/components/calendar/index.css create mode 100644 spectrum-css-temp/components/calendar/skin.css create mode 100644 spectrum-css-temp/components/calendar/vars.css create mode 100644 spectrum-css-temp/components/card/index.css create mode 100644 spectrum-css-temp/components/card/skin.css create mode 100644 spectrum-css-temp/components/card/vars.css create mode 100644 spectrum-css-temp/components/checkbox/index.css create mode 100644 spectrum-css-temp/components/checkbox/skin.css create mode 100644 spectrum-css-temp/components/checkbox/vars.css create mode 100644 spectrum-css-temp/components/circleloader/animation.css create mode 100644 spectrum-css-temp/components/circleloader/index.css create mode 100644 spectrum-css-temp/components/circleloader/skin.css create mode 100644 spectrum-css-temp/components/circleloader/vars.css create mode 100644 spectrum-css-temp/components/coachmark/animation.css create mode 100644 spectrum-css-temp/components/coachmark/index.css create mode 100644 spectrum-css-temp/components/coachmark/skin.css create mode 100644 spectrum-css-temp/components/coachmark/vars.css create mode 100644 spectrum-css-temp/components/colorarea/index.css create mode 100644 spectrum-css-temp/components/colorarea/skin.css create mode 100644 spectrum-css-temp/components/colorarea/vars.css create mode 100644 spectrum-css-temp/components/colorhandle/index.css create mode 100644 spectrum-css-temp/components/colorhandle/skin.css create mode 100644 spectrum-css-temp/components/colorhandle/vars.css create mode 100644 spectrum-css-temp/components/colorloupe/index.css create mode 100644 spectrum-css-temp/components/colorloupe/skin.css create mode 100644 spectrum-css-temp/components/colorloupe/vars.css create mode 100644 spectrum-css-temp/components/colorslider/index.css create mode 100644 spectrum-css-temp/components/colorslider/skin.css create mode 100644 spectrum-css-temp/components/colorslider/vars.css create mode 100644 spectrum-css-temp/components/colorwheel/index.css create mode 100644 spectrum-css-temp/components/colorwheel/skin.css create mode 100644 spectrum-css-temp/components/colorwheel/vars.css create mode 100644 spectrum-css-temp/components/commons/focus-ring.css create mode 100644 spectrum-css-temp/components/commons/fonts.css create mode 100644 spectrum-css-temp/components/commons/index.css create mode 100644 spectrum-css-temp/components/commons/layout.css create mode 100644 spectrum-css-temp/components/contextualhelp/index.css create mode 100644 spectrum-css-temp/components/contextualhelp/skin.css create mode 100644 spectrum-css-temp/components/contextualhelp/vars.css create mode 100644 spectrum-css-temp/components/cyclebutton/index.css create mode 100644 spectrum-css-temp/components/cyclebutton/skin.css create mode 100644 spectrum-css-temp/components/cyclebutton/vars.css create mode 100644 spectrum-css-temp/components/dialog/index.css create mode 100644 spectrum-css-temp/components/dialog/skin.css create mode 100644 spectrum-css-temp/components/dialog/vars.css create mode 100644 spectrum-css-temp/components/dnd/index.css create mode 100644 spectrum-css-temp/components/dnd/skin.css create mode 100644 spectrum-css-temp/components/dnd/vars.css create mode 100644 spectrum-css-temp/components/dropdown/index.css create mode 100644 spectrum-css-temp/components/dropdown/skin.css create mode 100644 spectrum-css-temp/components/dropdown/vars.css create mode 100644 spectrum-css-temp/components/dropindicator/index.css create mode 100644 spectrum-css-temp/components/dropindicator/skin.css create mode 100644 spectrum-css-temp/components/dropindicator/vars.css create mode 100644 spectrum-css-temp/components/dropzone/index.css create mode 100644 spectrum-css-temp/components/dropzone/skin.css create mode 100644 spectrum-css-temp/components/dropzone/vars.css create mode 100644 spectrum-css-temp/components/fieldgroup/index.css create mode 100644 spectrum-css-temp/components/fieldgroup/vars.css create mode 100644 spectrum-css-temp/components/fieldlabel/index.css create mode 100644 spectrum-css-temp/components/fieldlabel/skin.css create mode 100644 spectrum-css-temp/components/fieldlabel/vars.css create mode 100644 spectrum-css-temp/components/helptext/index.css create mode 100644 spectrum-css-temp/components/helptext/skin.css create mode 100644 spectrum-css-temp/components/helptext/vars.css create mode 100644 spectrum-css-temp/components/icon/icons.css create mode 100644 spectrum-css-temp/components/icon/index.css create mode 100644 spectrum-css-temp/components/icon/ui-icons.css create mode 100644 spectrum-css-temp/components/icon/vars.css create mode 100644 spectrum-css-temp/components/icon/workflow-icons.css create mode 100644 spectrum-css-temp/components/illustratedmessage/index.css create mode 100644 spectrum-css-temp/components/illustratedmessage/skin.css create mode 100644 spectrum-css-temp/components/illustratedmessage/vars.css create mode 100644 spectrum-css-temp/components/image/index.css create mode 100644 spectrum-css-temp/components/image/vars.css create mode 100644 spectrum-css-temp/components/inlinealert/index.css create mode 100644 spectrum-css-temp/components/inlinealert/skin.css create mode 100644 spectrum-css-temp/components/inlinealert/vars.css create mode 100644 spectrum-css-temp/components/inputgroup/index.css create mode 100644 spectrum-css-temp/components/inputgroup/skin.css create mode 100644 spectrum-css-temp/components/inputgroup/vars.css create mode 100644 spectrum-css-temp/components/link/index.css create mode 100644 spectrum-css-temp/components/link/skin.css create mode 100644 spectrum-css-temp/components/link/vars.css create mode 100644 spectrum-css-temp/components/menu/index.css create mode 100644 spectrum-css-temp/components/menu/skin.css create mode 100644 spectrum-css-temp/components/menu/vars.css create mode 100644 spectrum-css-temp/components/miller/index.css create mode 100644 spectrum-css-temp/components/miller/vars.css create mode 100644 spectrum-css-temp/components/modal/index.css create mode 100644 spectrum-css-temp/components/modal/skin.css create mode 100644 spectrum-css-temp/components/modal/vars.css create mode 100644 spectrum-css-temp/components/overlay/index.css create mode 100644 spectrum-css-temp/components/page/index.css create mode 100644 spectrum-css-temp/components/page/skin.css create mode 100644 spectrum-css-temp/components/page/vars.css create mode 100644 spectrum-css-temp/components/pagination/index.css create mode 100644 spectrum-css-temp/components/pagination/skin.css create mode 100644 spectrum-css-temp/components/pagination/vars.css create mode 100644 spectrum-css-temp/components/popover/index.css create mode 100644 spectrum-css-temp/components/popover/skin.css create mode 100644 spectrum-css-temp/components/popover/vars.css create mode 100644 spectrum-css-temp/components/quickaction/index.css create mode 100644 spectrum-css-temp/components/quickaction/skin.css create mode 100644 spectrum-css-temp/components/quickaction/vars.css create mode 100644 spectrum-css-temp/components/radio/index.css create mode 100644 spectrum-css-temp/components/radio/skin.css create mode 100644 spectrum-css-temp/components/radio/vars.css create mode 100644 spectrum-css-temp/components/rating/index.css create mode 100644 spectrum-css-temp/components/rating/skin.css create mode 100644 spectrum-css-temp/components/rating/vars.css create mode 100644 spectrum-css-temp/components/rule/index.css create mode 100644 spectrum-css-temp/components/rule/skin.css create mode 100644 spectrum-css-temp/components/rule/vars.css create mode 100644 spectrum-css-temp/components/search/index.css create mode 100644 spectrum-css-temp/components/search/vars.css create mode 100644 spectrum-css-temp/components/searchwithin/index.css create mode 100644 spectrum-css-temp/components/searchwithin/vars.css create mode 100644 spectrum-css-temp/components/sidenav/index.css create mode 100644 spectrum-css-temp/components/sidenav/skin.css create mode 100644 spectrum-css-temp/components/sidenav/vars.css create mode 100644 spectrum-css-temp/components/slider/index.css create mode 100644 spectrum-css-temp/components/slider/skin.css create mode 100644 spectrum-css-temp/components/slider/vars.css create mode 100644 spectrum-css-temp/components/splitbutton/index.css create mode 100644 spectrum-css-temp/components/splitbutton/vars.css create mode 100644 spectrum-css-temp/components/splitview/index.css create mode 100644 spectrum-css-temp/components/splitview/skin.css create mode 100644 spectrum-css-temp/components/splitview/vars.css create mode 100644 spectrum-css-temp/components/statuslight/index.css create mode 100644 spectrum-css-temp/components/statuslight/skin.css create mode 100644 spectrum-css-temp/components/statuslight/vars.css create mode 100644 spectrum-css-temp/components/steplist/index.css create mode 100644 spectrum-css-temp/components/steplist/skin.css create mode 100644 spectrum-css-temp/components/steplist/vars.css create mode 100644 spectrum-css-temp/components/stepper/index.css create mode 100644 spectrum-css-temp/components/stepper/skin.css create mode 100644 spectrum-css-temp/components/stepper/vars.css create mode 100644 spectrum-css-temp/components/table/index.css create mode 100644 spectrum-css-temp/components/table/skin.css create mode 100644 spectrum-css-temp/components/table/vars.css create mode 100644 spectrum-css-temp/components/tabs/index.css create mode 100644 spectrum-css-temp/components/tabs/skin.css create mode 100644 spectrum-css-temp/components/tabs/vars.css create mode 100644 spectrum-css-temp/components/tags/index.css create mode 100644 spectrum-css-temp/components/tags/skin.css create mode 100644 spectrum-css-temp/components/tags/vars.css create mode 100644 spectrum-css-temp/components/textfield/embed/AlertMedium.svg create mode 100644 spectrum-css-temp/components/textfield/embed/CheckmarkMedium.svg create mode 100644 spectrum-css-temp/components/textfield/index.css create mode 100644 spectrum-css-temp/components/textfield/skin.css create mode 100644 spectrum-css-temp/components/textfield/vars.css create mode 100644 spectrum-css-temp/components/toast/index.css create mode 100644 spectrum-css-temp/components/toast/skin.css create mode 100644 spectrum-css-temp/components/toast/vars.css create mode 100644 spectrum-css-temp/components/toggle/index.css create mode 100644 spectrum-css-temp/components/toggle/skin.css create mode 100644 spectrum-css-temp/components/toggle/vars.css create mode 100644 spectrum-css-temp/components/tooltip/index.css create mode 100644 spectrum-css-temp/components/tooltip/skin.css create mode 100644 spectrum-css-temp/components/tooltip/vars.css create mode 100644 spectrum-css-temp/components/tray/index.css create mode 100644 spectrum-css-temp/components/tray/skin.css create mode 100644 spectrum-css-temp/components/tray/vars.css create mode 100644 spectrum-css-temp/components/treeview/index.css create mode 100644 spectrum-css-temp/components/treeview/skin.css create mode 100644 spectrum-css-temp/components/treeview/vars.css create mode 100644 spectrum-css-temp/components/typography/font.css create mode 100644 spectrum-css-temp/components/typography/index.css create mode 100644 spectrum-css-temp/components/typography/skin.css create mode 100644 spectrum-css-temp/components/typography/vars.css create mode 100644 spectrum-css-temp/components/underlay/index.css create mode 100644 spectrum-css-temp/components/underlay/skin.css create mode 100644 spectrum-css-temp/components/underlay/vars.css create mode 100644 spectrum-css-temp/components/well/index.css create mode 100644 spectrum-css-temp/components/well/skin.css create mode 100644 spectrum-css-temp/components/well/vars.css create mode 100644 spectrum-css-temp/package.json create mode 100644 spectrum-css-temp/vars/express.css create mode 100644 spectrum-css-temp/vars/s2-dark.css create mode 100644 spectrum-css-temp/vars/s2-light.css create mode 100644 spectrum-css-temp/vars/s2.css create mode 100644 spectrum-css-temp/vars/spectrum-dark.css create mode 100644 spectrum-css-temp/vars/spectrum-darkest.css create mode 100644 spectrum-css-temp/vars/spectrum-global.css create mode 100644 spectrum-css-temp/vars/spectrum-large.css create mode 100644 spectrum-css-temp/vars/spectrum-light.css create mode 100644 spectrum-css-temp/vars/spectrum-lightest.css create mode 100644 spectrum-css-temp/vars/spectrum-medium.css create mode 100644 spectrum-css-temp/vars/spectrum-metadata.json create mode 100644 spectrum.js create mode 100644 style-dictionary.config.js diff --git a/.storybook-s2/custom-addons/provider/index.js b/.storybook-s2/custom-addons/provider/index.js new file mode 100644 index 00000000000..07654b0d17d --- /dev/null +++ b/.storybook-s2/custom-addons/provider/index.js @@ -0,0 +1,71 @@ +import React, {useEffect, useState} from 'react'; +import { addons, makeDecorator } from '@storybook/preview-api'; +import {getQueryParams} from '@storybook/client-api'; +import {Provider} from '@react-spectrum/provider'; +import {theme} from '../../../spectrum.js'; + +document.body.style.margin = '0'; + +const providerValuesFromUrl = Object.entries(getQueryParams()).reduce((acc, [k, v]) => { + if (k.includes('providerSwitcher-')) { + return { ...acc, [k.replace('providerSwitcher-', '')]: v }; + } + return acc; +}, {}); + +function ProviderUpdater(props) { + let [localeValue, setLocale] = useState(providerValuesFromUrl.locale || 'en-US'); + let [themeValue, setTheme] = useState(providerValuesFromUrl.theme || 'dark'); + let [scaleValue, setScale] = useState(providerValuesFromUrl.scale || 'medium'); + let [expressValue, setExpress] = useState(providerValuesFromUrl.express === 'true'); + let [storyReady, setStoryReady] = useState(window.parent === window || window.parent !== window.top); // reduce content flash because it takes a moment to get the provider details + // Typically themes are provided with both light + dark, and both scales. + // To build our selector to see all themes, we need to hack it a bit. + + let colorScheme = themeValue && themeValue.replace(/est$/, ''); + useEffect(() => { + let channel = addons.getChannel(); + let providerUpdate = (event) => { + setLocale(event.locale); + setTheme(event.theme === 'Auto' ? undefined : event.theme); + setScale(event.scale === 'Auto' ? undefined : event.scale); + setExpress(event.express); + setStoryReady(true); + }; + + channel.on('provider/updated', providerUpdate); + channel.emit('rsp/ready-for-update'); + return () => { + channel.removeListener('provider/updated', providerUpdate); + }; + }, []); + + if (props.options.mainElement == null) { + return ( + +
    + {props.children} +
    +
    + ); + } else { + return ( + + {props.children} + + ); + } +} + +export const withProviderSwitcher = makeDecorator({ + name: 'withProviderSwitcher', + parameterName: 'providerSwitcher', + wrapper: (getStory, context, {options, parameters}) => { + options = {...options, ...parameters}; + return ( + + {getStory(context)} + + ); + } +}); diff --git a/.storybook-s2/custom-addons/provider/register.js b/.storybook-s2/custom-addons/provider/register.js new file mode 100644 index 00000000000..ef39da3b6f5 --- /dev/null +++ b/.storybook-s2/custom-addons/provider/register.js @@ -0,0 +1,127 @@ +import {getQueryParams} from '@storybook/client-api'; +import { addons, types } from '@storybook/manager-api'; +import {locales} from '../../constants'; +import React, {useEffect, useState} from 'react'; + +const providerValuesFromUrl = Object.entries(getQueryParams()).reduce((acc, [k, v]) => { + if (k.includes('providerSwitcher-')) { + return { ...acc, [k.replace('providerSwitcher-', '')]: v }; + } + return acc; +}, {}); + +let THEMES = [ + {label: 'Auto', value: ''}, + {label: "Light", value: "light"}, + {label: "Lightest", value: "lightest"}, + {label: "Dark", value: "dark"}, + {label: "Darkest", value: "darkest"} +]; + +let SCALES = [ + {label: 'Auto', value: ''}, + {label: "Medium", value: "medium"}, + {label: "Large", value: "large"} +]; + +let TOAST_POSITIONS = [ + {label: 'top', value: 'top'}, + {label: 'top left', value: 'top left'}, + {label: 'top center', value: 'top center'}, + {label: 'top right', value: 'top right'}, + {label: 'bottom', value: 'bottom'}, + {label: 'bottom left', value: 'bottom left'}, + {label: 'bottom center', value: 'bottom center'}, + {label: 'bottom right', value: 'bottom right'} +]; + +function ProviderFieldSetter({api}) { + let [values, setValues] = useState({locale: providerValuesFromUrl.locale || undefined, theme: providerValuesFromUrl.theme || undefined, scale: providerValuesFromUrl.scale || undefined, express: providerValuesFromUrl.express === 'true'}); + let channel = addons.getChannel(); + let onLocaleChange = (e) => { + let newValue = e.target.value || undefined; + setValues((old) => { + let next = {...old, locale: newValue}; + channel.emit('provider/updated', next); + return next; + }); + }; + let onThemeChange = (e) => { + let newValue = e.target.value || undefined; + setValues((old) => { + let next = {...old, theme: newValue}; + channel.emit('provider/updated', next); + return next; + }); + }; + let onScaleChange = (e) => { + let newValue = e.target.value || undefined; + setValues((old) => { + let next = {...old, scale: newValue}; + channel.emit('provider/updated', next); + return next; + }); + }; + let onExpressChange = (e) => { + let newValue = e.target.checked; + setValues((old) => { + let next = {...old, express: newValue}; + channel.emit('provider/updated', next); + return next; + }); + }; + useEffect(() => { + let storySwapped = () => { + channel.emit('provider/updated', values); + }; + channel.on('rsp/ready-for-update', storySwapped); + return () => { + channel.removeListener('rsp/ready-for-update', storySwapped); + }; + }); + + useEffect(() => { + api.setQueryParams({ + 'providerSwitcher-locale': values.locale || '', + 'providerSwitcher-theme': values.theme || '', + 'providerSwitcher-scale': values.scale || '', + 'providerSwitcher-express': String(values.express), + }); + }); + + return ( +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + ) +} + +addons.register('ProviderSwitcher', (api) => { + addons.add('ProviderSwitcher', { + title: 'viewport', + type: types.TOOL, + match: ({ viewMode }) => viewMode === 'story', + render: () => , + }); +}); diff --git a/.storybook-s2/main.ts b/.storybook-s2/main.ts index e210bfb061f..ac867acddc0 100644 --- a/.storybook-s2/main.ts +++ b/.storybook-s2/main.ts @@ -36,6 +36,10 @@ const config: StorybookConfig = { loader: require.resolve("css-loader"), options: { importLoaders: 1, + modules: { + // css modules but the name is unmodified so we can import it for the theme + localIdentName:'[local]', + }, }, },{ loader: require.resolve("postcss-loader"), diff --git a/.storybook-s2/preview-body.html b/.storybook-s2/preview-body.html new file mode 100644 index 00000000000..e28fb3a8112 --- /dev/null +++ b/.storybook-s2/preview-body.html @@ -0,0 +1,25 @@ + diff --git a/.storybook-s2/preview.ts b/.storybook-s2/preview.ts index eb228b6131e..cd0fd53b40b 100644 --- a/.storybook-s2/preview.ts +++ b/.storybook-s2/preview.ts @@ -1,5 +1,6 @@ import { themes } from "@storybook/theming"; import '../src/tailwind.css'; +import {withProviderSwitcher} from './custom-addons/provider'; /** @type { import('@storybook/react').Preview } */ const preview = { @@ -16,4 +17,33 @@ const preview = { }, }; + +export const parameters = { + options: { + storySort: (a, b) => a[1].kind === b[1].kind ? 0 : a[1].id.localeCompare(b[1].id, undefined, { numeric: true }), + }, + a11y: { + config: { + rules: [ + { + id: 'aria-hidden-focus', + selector: 'body *:not([data-a11y-ignore="aria-hidden-focus"])', + } + ] + } + }, + layout: 'fullscreen', + // Stops infinite loop memory crash when saving CSF stories https://github.com/storybookjs/storybook/issues/12747#issuecomment-1151803506 + docs: { + source: { + type: 'code' + } + } +}; + + +export const decorators = [ + withProviderSwitcher +]; + export default preview; diff --git a/dist/css/dark-vars.css b/dist/css/dark-vars.css new file mode 100644 index 00000000000..b5a8a50fbdb --- /dev/null +++ b/dist/css/dark-vars.css @@ -0,0 +1,287 @@ +.spectrum--dark { + --spectrum-overlay-opacity: 0.6; + --spectrum-drop-shadow-color: rgba(0, 0, 0, 0.8); + --spectrum-background-base-color: var(--spectrum-gray-25); + --spectrum-background-layer-1-color: var(--spectrum-gray-50); + --spectrum-background-layer-2-color: var(--spectrum-gray-75); + --spectrum-neutral-subdued-background-color-default: var(--spectrum-gray-400); + --spectrum-neutral-subdued-background-color-hover: var(--spectrum-gray-300); + --spectrum-neutral-subdued-background-color-down: var(--spectrum-gray-300); + --spectrum-neutral-subdued-background-color-key-focus: var(--spectrum-gray-300); + --spectrum-accent-background-color-default: var(--spectrum-accent-color-600); + --spectrum-accent-background-color-hover: var(--spectrum-accent-color-500); + --spectrum-accent-background-color-down: var(--spectrum-accent-color-500); + --spectrum-accent-background-color-key-focus: var(--spectrum-accent-color-500); + --spectrum-informative-background-color-default: var(--spectrum-informative-color-600); + --spectrum-informative-background-color-hover: var(--spectrum-informative-color-500); + --spectrum-informative-background-color-down: var(--spectrum-informative-color-500); + --spectrum-informative-background-color-key-focus: var(--spectrum-informative-color-500); + --spectrum-negative-background-color-default: var(--spectrum-negative-color-600); + --spectrum-negative-background-color-hover: var(--spectrum-negative-color-500); + --spectrum-negative-background-color-down: var(--spectrum-negative-color-500); + --spectrum-negative-background-color-key-focus: var(--spectrum-negative-color-500); + --spectrum-positive-background-color-default: var(--spectrum-positive-color-600); + --spectrum-positive-background-color-hover: var(--spectrum-positive-color-500); + --spectrum-positive-background-color-down: var(--spectrum-positive-color-500); + --spectrum-positive-background-color-key-focus: var(--spectrum-positive-color-500); + --spectrum-gray-background-color-default: var(--spectrum-gray-700); + --spectrum-red-background-color-default: var(--spectrum-red-700); + --spectrum-orange-background-color-default: var(--spectrum-orange-800); + --spectrum-yellow-background-color-default: var(--spectrum-yellow-1000); + --spectrum-chartreuse-background-color-default: var(--spectrum-chartreuse-900); + --spectrum-celery-background-color-default: var(--spectrum-celery-800); + --spectrum-green-background-color-default: var(--spectrum-green-700); + --spectrum-seafoam-background-color-default: var(--spectrum-seafoam-700); + --spectrum-cyan-background-color-default: var(--spectrum-cyan-700); + --spectrum-blue-background-color-default: var(--spectrum-blue-700); + --spectrum-indigo-background-color-default: var(--spectrum-indigo-700); + --spectrum-purple-background-color-default: var(--spectrum-purple-700); + --spectrum-fuchsia-background-color-default: var(--spectrum-fuchsia-700); + --spectrum-magenta-background-color-default: var(--spectrum-magenta-700); + --spectrum-neutral-visual-color: var(--spectrum-gray-600); + --spectrum-accent-visual-color: var(--spectrum-accent-color-900); + --spectrum-informative-visual-color: var(--spectrum-informative-color-900); + --spectrum-negative-visual-color: var(--spectrum-negative-color-700); + --spectrum-notice-visual-color: var(--spectrum-notice-color-900); + --spectrum-positive-visual-color: var(--spectrum-positive-color-800); + --spectrum-gray-visual-color: var(--spectrum-gray-600); + --spectrum-red-visual-color: var(--spectrum-red-700); + --spectrum-orange-visual-color: var(--spectrum-orange-900); + --spectrum-yellow-visual-color: var(--spectrum-yellow-1100); + --spectrum-chartreuse-visual-color: var(--spectrum-chartreuse-900); + --spectrum-celery-visual-color: var(--spectrum-celery-800); + --spectrum-green-visual-color: var(--spectrum-green-800); + --spectrum-seafoam-visual-color: var(--spectrum-seafoam-800); + --spectrum-cyan-visual-color: var(--spectrum-cyan-900); + --spectrum-blue-visual-color: var(--spectrum-blue-900); + --spectrum-indigo-visual-color: var(--spectrum-indigo-900); + --spectrum-purple-visual-color: var(--spectrum-purple-900); + --spectrum-fuchsia-visual-color: var(--spectrum-fuchsia-900); + --spectrum-magenta-visual-color: var(--spectrum-magenta-900); + --spectrum-opacity-checkerboard-square-dark: var(--spectrum-gray-800); + --spectrum-gray-25: rgb(17, 17, 17); + --spectrum-gray-50: rgb(27, 27, 27); + --spectrum-gray-75: rgb(34, 34, 34); + --spectrum-gray-100: rgb(44, 44, 44); + --spectrum-gray-200: rgb(50, 50, 50); + --spectrum-gray-300: rgb(57, 57, 57); + --spectrum-gray-400: rgb(68, 68, 68); + --spectrum-gray-500: rgb(109, 109, 109); + --spectrum-gray-600: rgb(138, 138, 138); + --spectrum-gray-700: rgb(175, 175, 175); + --spectrum-gray-800: rgb(219, 219, 219); + --spectrum-gray-900: rgb(242, 242, 242); + --spectrum-gray-1000: rgb(255, 255, 255); + --spectrum-blue-100: rgb(14, 23, 63); + --spectrum-blue-200: rgb(15, 27, 77); + --spectrum-blue-300: rgb(13, 34, 119); + --spectrum-blue-400: rgb(17, 42, 144); + --spectrum-blue-500: rgb(22, 52, 179); + --spectrum-blue-600: rgb(29, 63, 209); + --spectrum-blue-700: rgb(40, 78, 236); + --spectrum-blue-800: rgb(56, 96, 250); + --spectrum-blue-900: rgb(77, 120, 255); + --spectrum-blue-1000: rgb(102, 146, 254); + --spectrum-blue-1100: rgb(124, 169, 252); + --spectrum-blue-1200: rgb(152, 192, 252); + --spectrum-blue-1300: rgb(181, 213, 253); + --spectrum-blue-1400: rgb(213, 231, 254); + --spectrum-blue-1500: rgb(238, 245, 255); + --spectrum-blue-1600: rgb(255, 255, 255); + --spectrum-red-100: rgb(54, 10, 3); + --spectrum-red-200: rgb(67, 13, 5); + --spectrum-red-300: rgb(89, 18, 7); + --spectrum-red-400: rgb(109, 22, 10); + --spectrum-red-500: rgb(134, 28, 15); + --spectrum-red-600: rgb(158, 34, 19); + --spectrum-red-700: rgb(185, 41, 24); + --spectrum-red-800: rgb(212, 48, 31); + --spectrum-red-900: rgb(243, 57, 36); + --spectrum-red-1000: rgb(255, 98, 79); + --spectrum-red-1100: rgb(255, 134, 120); + --spectrum-red-1200: rgb(255, 167, 157); + --spectrum-red-1300: rgb(255, 196, 189); + --spectrum-red-1400: rgb(255, 222, 219); + --spectrum-red-1500: rgb(255, 242, 240); + --spectrum-red-1600: rgb(255, 255, 255); + --spectrum-orange-100: rgb(49, 16, 0); + --spectrum-orange-200: rgb(59, 20, 0); + --spectrum-orange-300: rgb(80, 27, 0); + --spectrum-orange-400: rgb(99, 34, 0); + --spectrum-orange-500: rgb(122, 42, 0); + --spectrum-orange-600: rgb(145, 52, 0); + --spectrum-orange-700: rgb(169, 63, 0); + --spectrum-orange-800: rgb(190, 76, 0); + --spectrum-orange-900: rgb(214, 93, 0); + --spectrum-orange-1000: rgb(240, 114, 0); + --spectrum-orange-1100: rgb(255, 137, 0); + --spectrum-orange-1200: rgb(255, 173, 45); + --spectrum-orange-1300: rgb(255, 201, 116); + --spectrum-orange-1400: rgb(255, 225, 178); + --spectrum-orange-1500: rgb(255, 243, 225); + --spectrum-orange-1600: rgb(255, 255, 255); + --spectrum-yellow-100: rgb(37, 23, 0); + --spectrum-yellow-200: rgb(47, 29, 0); + --spectrum-yellow-300: rgb(63, 40, 0); + --spectrum-yellow-400: rgb(78, 49, 0); + --spectrum-yellow-500: rgb(97, 61, 0); + --spectrum-yellow-600: rgb(116, 73, 0); + --spectrum-yellow-700: rgb(135, 86, 0); + --spectrum-yellow-800: rgb(155, 100, 0); + --spectrum-yellow-900: rgb(178, 117, 0); + --spectrum-yellow-1000: rgb(200, 138, 0); + --spectrum-yellow-1100: rgb(218, 159, 0); + --spectrum-yellow-1200: rgb(235, 183, 0); + --spectrum-yellow-1300: rgb(249, 206, 0); + --spectrum-yellow-1400: rgb(255, 230, 86); + --spectrum-yellow-1500: rgb(255, 246, 195); + --spectrum-yellow-1600: rgb(255, 255, 255); + --spectrum-chartreuse-100: rgb(23, 28, 0); + --spectrum-chartreuse-200: rgb(29, 35, 0); + --spectrum-chartreuse-300: rgb(40, 48, 0); + --spectrum-chartreuse-400: rgb(50, 59, 0); + --spectrum-chartreuse-500: rgb(62, 74, 0); + --spectrum-chartreuse-600: rgb(74, 88, 0); + --spectrum-chartreuse-700: rgb(87, 104, 0); + --spectrum-chartreuse-800: rgb(100, 120, 0); + --spectrum-chartreuse-900: rgb(116, 139, 0); + --spectrum-chartreuse-1000: rgb(134, 161, 0); + --spectrum-chartreuse-1100: rgb(151, 181, 0); + --spectrum-chartreuse-1200: rgb(169, 203, 0); + --spectrum-chartreuse-1300: rgb(187, 225, 0); + --spectrum-chartreuse-1400: rgb(219, 240, 117); + --spectrum-chartreuse-1500: rgb(242, 249, 206); + --spectrum-chartreuse-1600: rgb(255, 255, 255); + --spectrum-celery-100: rgb(11, 31, 0); + --spectrum-celery-200: rgb(14, 37, 0); + --spectrum-celery-300: rgb(21, 51, 1); + --spectrum-celery-400: rgb(28, 63, 3); + --spectrum-celery-500: rgb(36, 78, 6); + --spectrum-celery-600: rgb(44, 93, 9); + --spectrum-celery-700: rgb(53, 110, 12); + --spectrum-celery-800: rgb(62, 126, 16); + --spectrum-celery-900: rgb(73, 146, 21); + --spectrum-celery-1000: rgb(87, 169, 27); + --spectrum-celery-1100: rgb(100, 190, 35); + --spectrum-celery-1200: rgb(116, 213, 46); + --spectrum-celery-1300: rgb(136, 234, 65); + --spectrum-celery-1400: rgb(170, 251, 112); + --spectrum-celery-1500: rgb(222, 255, 198); + --spectrum-celery-1600: rgb(255, 255, 255); + --spectrum-green-100: rgb(0, 31, 23); + --spectrum-green-200: rgb(0, 38, 28); + --spectrum-green-300: rgb(0, 52, 38); + --spectrum-green-400: rgb(0, 64, 45); + --spectrum-green-500: rgb(1, 79, 53); + --spectrum-green-600: rgb(2, 95, 61); + --spectrum-green-700: rgb(3, 112, 69); + --spectrum-green-800: rgb(5, 128, 76); + --spectrum-green-900: rgb(8, 149, 85); + --spectrum-green-1000: rgb(13, 172, 97); + --spectrum-green-1100: rgb(24, 193, 110); + --spectrum-green-1200: rgb(57, 215, 134); + --spectrum-green-1300: rgb(126, 231, 172); + --spectrum-green-1400: rgb(189, 241, 208); + --spectrum-green-1500: rgb(229, 250, 236); + --spectrum-green-1600: rgb(255, 255, 255); + --spectrum-seafoam-100: rgb(0, 29, 32); + --spectrum-seafoam-200: rgb(0, 37, 40); + --spectrum-seafoam-300: rgb(0, 50, 53); + --spectrum-seafoam-400: rgb(0, 62, 66); + --spectrum-seafoam-500: rgb(4, 77, 81); + --spectrum-seafoam-600: rgb(8, 91, 96); + --spectrum-seafoam-700: rgb(13, 108, 113); + --spectrum-seafoam-800: rgb(19, 124, 129); + --spectrum-seafoam-900: rgb(26, 143, 148); + --spectrum-seafoam-1000: rgb(36, 166, 171); + --spectrum-seafoam-1100: rgb(46, 186, 192); + --spectrum-seafoam-1200: rgb(62, 209, 214); + --spectrum-seafoam-1300: rgb(94, 229, 234); + --spectrum-seafoam-1400: rgb(170, 242, 245); + --spectrum-seafoam-1500: rgb(219, 251, 252); + --spectrum-seafoam-1600: rgb(255, 255, 255); + --spectrum-cyan-100: rgb(0, 29, 39); + --spectrum-cyan-200: rgb(0, 36, 49); + --spectrum-cyan-300: rgb(0, 48, 65); + --spectrum-cyan-400: rgb(0, 60, 82); + --spectrum-cyan-500: rgb(0, 74, 101); + --spectrum-cyan-600: rgb(0, 88, 123); + --spectrum-cyan-700: rgb(4, 104, 147); + --spectrum-cyan-800: rgb(10, 118, 175); + --spectrum-cyan-900: rgb(19, 136, 207); + --spectrum-cyan-1000: rgb(36, 156, 242); + --spectrum-cyan-1100: rgb(63, 177, 255); + --spectrum-cyan-1200: rgb(107, 199, 255); + --spectrum-cyan-1300: rgb(152, 219, 255); + --spectrum-cyan-1400: rgb(195, 236, 252); + --spectrum-cyan-1500: rgb(230, 248, 253); + --spectrum-cyan-1600: rgb(255, 255, 255); + --spectrum-indigo-100: rgb(30, 0, 93); + --spectrum-indigo-200: rgb(35, 0, 110); + --spectrum-indigo-300: rgb(47, 1, 141); + --spectrum-indigo-400: rgb(58, 8, 165); + --spectrum-indigo-500: rgb(72, 21, 195); + --spectrum-indigo-600: rgb(85, 38, 220); + --spectrum-indigo-700: rgb(100, 58, 240); + --spectrum-indigo-800: rgb(112, 81, 249); + --spectrum-indigo-900: rgb(123, 109, 253); + --spectrum-indigo-1000: rgb(137, 137, 254); + --spectrum-indigo-1100: rgb(153, 161, 255); + --spectrum-indigo-1200: rgb(176, 186, 255); + --spectrum-indigo-1300: rgb(199, 208, 255); + --spectrum-indigo-1400: rgb(223, 228, 255); + --spectrum-indigo-1500: rgb(243, 244, 255); + --spectrum-indigo-1600: rgb(255, 255, 255); + --spectrum-purple-100: rgb(41, 0, 79); + --spectrum-purple-200: rgb(50, 0, 96); + --spectrum-purple-300: rgb(64, 0, 122); + --spectrum-purple-400: rgb(78, 0, 151); + --spectrum-purple-500: rgb(96, 0, 182); + --spectrum-purple-600: rgb(116, 15, 205); + --spectrum-purple-700: rgb(136, 42, 218); + --spectrum-purple-800: rgb(151, 68, 225); + --spectrum-purple-900: rgb(167, 95, 231); + --spectrum-purple-1000: rgb(183, 123, 236); + --spectrum-purple-1100: rgb(197, 149, 240); + --spectrum-purple-1200: rgb(212, 176, 244); + --spectrum-purple-1300: rgb(225, 201, 247); + --spectrum-purple-1400: rgb(238, 224, 250); + --spectrum-purple-1500: rgb(248, 243, 253); + --spectrum-purple-1600: rgb(255, 255, 255); + --spectrum-fuchsia-100: rgb(54, 0, 53); + --spectrum-fuchsia-200: rgb(65, 0, 64); + --spectrum-fuchsia-300: rgb(84, 0, 82); + --spectrum-fuchsia-400: rgb(103, 2, 99); + --spectrum-fuchsia-500: rgb(124, 11, 119); + --spectrum-fuchsia-600: rgb(145, 22, 138); + --spectrum-fuchsia-700: rgb(168, 35, 158); + --spectrum-fuchsia-800: rgb(189, 48, 177); + --spectrum-fuchsia-900: rgb(214, 64, 201); + --spectrum-fuchsia-1000: rgb(245, 76, 234); + --spectrum-fuchsia-1100: rgb(255, 112, 249); + --spectrum-fuchsia-1200: rgb(255, 154, 253); + --spectrum-fuchsia-1300: rgb(255, 188, 254); + --spectrum-fuchsia-1400: rgb(255, 218, 254); + --spectrum-fuchsia-1500: rgb(255, 240, 255); + --spectrum-fuchsia-1600: rgb(255, 255, 255); + --spectrum-magenta-100: rgb(61, 0, 21); + --spectrum-magenta-200: rgb(73, 0, 25); + --spectrum-magenta-300: rgb(94, 0, 33); + --spectrum-magenta-400: rgb(115, 0, 41); + --spectrum-magenta-500: rgb(141, 1, 52); + --spectrum-magenta-600: rgb(165, 5, 63); + --spectrum-magenta-700: rgb(192, 10, 74); + --spectrum-magenta-800: rgb(219, 18, 87); + --spectrum-magenta-900: rgb(247, 38, 108); + --spectrum-magenta-1000: rgb(255, 89, 147); + --spectrum-magenta-1100: rgb(255, 128, 173); + --spectrum-magenta-1200: rgb(255, 163, 196); + --spectrum-magenta-1300: rgb(255, 193, 215); + --spectrum-magenta-1400: rgb(255, 220, 233); + --spectrum-magenta-1500: rgb(255, 241, 246); + --spectrum-magenta-1600: rgb(255, 255, 255); + --spectrum-icon-color-blue-primary-default: var(--spectrum-blue-800); + --spectrum-icon-color-green-primary-default: var(--spectrum-green-800); + --spectrum-icon-color-red-primary-default: var(--spectrum-red-700); + --spectrum-icon-color-yellow-primary-default: var(--spectrum-yellow-1000); +} diff --git a/dist/css/global-vars.css b/dist/css/global-vars.css new file mode 100644 index 00000000000..58a27f55949 --- /dev/null +++ b/dist/css/global-vars.css @@ -0,0 +1,583 @@ +.spectrum { + --spectrum-focus-indicator-color: var(--spectrum-blue-800); + --spectrum-static-white-focus-indicator-color: var(--spectrum-white); + --spectrum-static-black-focus-indicator-color: var(--spectrum-black); + --spectrum-overlay-color: var(--spectrum-black); + --spectrum-opacity-disabled: 0.3; + --spectrum-neutral-background-color-default: var(--spectrum-gray-800); + --spectrum-neutral-background-color-hover: var(--spectrum-gray-900); + --spectrum-neutral-background-color-down: var(--spectrum-gray-900); + --spectrum-neutral-background-color-key-focus: var(--spectrum-gray-900); + --spectrum-neutral-background-color-selected-default: var(--spectrum-gray-800); + --spectrum-neutral-background-color-selected-hover: var(--spectrum-gray-900); + --spectrum-neutral-background-color-selected-down: var(--spectrum-gray-900); + --spectrum-neutral-background-color-selected-key-focus: var(--spectrum-gray-900); + --spectrum-neutral-subdued-content-color-selected: var(--spectrum-neutral-subdued-content-color-down); + --spectrum-accent-content-color-selected: var(--spectrum-accent-content-color-down); + --spectrum-notice-background-color-default: var(--spectrum-notice-color-800); + --spectrum-disabled-background-color: var(--spectrum-gray-100); + --spectrum-disabled-static-white-background-color: var(--spectrum-transparent-white-100); + --spectrum-disabled-static-black-background-color: var(--spectrum-transparent-black-100); + --spectrum-background-opacity-default: 0; + --spectrum-background-opacity-hover: 0.1; + --spectrum-background-opacity-down: 0.1; + --spectrum-background-opacity-key-focus: 0.1; + --spectrum-neutral-content-color-default: var(--spectrum-gray-800); + --spectrum-neutral-content-color-hover: var(--spectrum-gray-900); + --spectrum-neutral-content-color-down: var(--spectrum-gray-900); + --spectrum-neutral-content-color-focus-hover: var(--spectrum-neutral-content-color-down); + --spectrum-neutral-content-color-focus: var(--spectrum-neutral-content-color-down); + --spectrum-neutral-content-color-key-focus: var(--spectrum-gray-900); + --spectrum-neutral-subdued-content-color-default: var(--spectrum-gray-700); + --spectrum-neutral-subdued-content-color-hover: var(--spectrum-gray-800); + --spectrum-neutral-subdued-content-color-down: var(--spectrum-gray-800); + --spectrum-neutral-subdued-content-color-key-focus: var(--spectrum-gray-800); + --spectrum-accent-content-color-default: var(--spectrum-accent-color-900); + --spectrum-accent-content-color-hover: var(--spectrum-accent-color-1000); + --spectrum-accent-content-color-down: var(--spectrum-accent-color-1000); + --spectrum-accent-content-color-key-focus: var(--spectrum-accent-color-1000); + --spectrum-negative-content-color-default: var(--spectrum-negative-color-900); + --spectrum-negative-content-color-hover: var(--spectrum-negative-color-1000); + --spectrum-negative-content-color-down: var(--spectrum-negative-color-1000); + --spectrum-negative-content-color-key-focus: var(--spectrum-negative-color-1000); + --spectrum-disabled-content-color: var(--spectrum-gray-400); + --spectrum-disabled-static-white-content-color: var(--spectrum-transparent-white-400); + --spectrum-disabled-static-black-content-color: var(--spectrum-transparent-black-400); + --spectrum-disabled-border-color: var(--spectrum-gray-300); + --spectrum-disabled-static-white-border-color: var(--spectrum-transparent-white-300); + --spectrum-disabled-static-black-border-color: var(--spectrum-transparent-black-300); + --spectrum-negative-border-color-default: var(--spectrum-negative-color-900); + --spectrum-negative-border-color-hover: var(--spectrum-negative-color-1000); + --spectrum-negative-border-color-down: var(--spectrum-negative-color-1100); + --spectrum-negative-border-color-focus-hover: var(--spectrum-negative-border-color-down); + --spectrum-negative-border-color-focus: var(--spectrum-negative-color-1000); + --spectrum-negative-border-color-key-focus: var(--spectrum-negative-color-1000); + --spectrum-swatch-border-color: var(--spectrum-gray-900); + --spectrum-swatch-border-opacity: 0.51; + --spectrum-swatch-disabled-icon-border-color: var(--spectrum-black); + --spectrum-swatch-disabled-icon-border-opacity: 0.51; + --spectrum-thumbnail-border-color: var(--spectrum-gray-800); + --spectrum-thumbnail-border-opacity: 0.1; + --spectrum-thumbnail-opacity-disabled: var(--spectrum-opacity-disabled); + --spectrum-opacity-checkerboard-square-light: var(--spectrum-white); + --spectrum-avatar-opacity-disabled: var(--spectrum-opacity-disabled); + --spectrum-color-area-border-color: var(--spectrum-gray-900); + --spectrum-color-area-border-opacity: 0.1; + --spectrum-color-slider-border-color: var(--spectrum-gray-900); + --spectrum-color-slider-border-opacity: 0.1; + --spectrum-color-loupe-drop-shadow-color: var(--spectrum-transparent-black-300); + --spectrum-color-loupe-drop-shadow-y: 2px; + --spectrum-color-loupe-drop-shadow-blur: 8px; + --spectrum-color-loupe-inner-border: var(--spectrum-transparent-black-200); + --spectrum-color-loupe-outer-border: var(--spectrum-white); + --spectrum-card-selection-background-color: var(--spectrum-gray-100); + --spectrum-card-selection-background-color-opacity: 0.95; + --spectrum-drop-zone-background-color: var(--spectrum-accent-visual-color); + --spectrum-drop-zone-background-color-opacity: 0.1; + --spectrum-drop-zone-background-color-opacity-filled: 0.3; + --spectrum-coach-mark-pagination-color: var(--spectrum-gray-600); + --spectrum-color-handle-inner-border-color: var(--spectrum-black); + --spectrum-color-handle-inner-border-opacity: 0.42; + --spectrum-color-handle-outer-border-opacity: var(--spectrum-color-handle-inner-border-opacity); + --spectrum-color-handle-drop-shadow-color: var(--spectrum-drop-shadow-color); + --spectrum-floating-action-button-drop-shadow-color: var(--spectrum-transparent-black-300); + --spectrum-floating-action-button-shadow-color: var(--spectrum-floating-action-button-drop-shadow-color); + --spectrum-table-row-hover-color: var(--spectrum-gray-900); + --spectrum-table-row-hover-opacity: 0.07; + --spectrum-table-selected-row-background-color: var(--spectrum-informative-background-color-default); + --spectrum-table-selected-row-background-opacity: 0.1; + --spectrum-table-selected-row-background-color-non-emphasized: var(--spectrum-neutral-background-color-selected-default); + --spectrum-table-selected-row-background-opacity-non-emphasized: 0.1; + --spectrum-table-row-down-opacity: 0.1; + --spectrum-table-selected-row-background-opacity-hover: 0.15; + --spectrum-table-selected-row-background-opacity-non-emphasized-hover: 0.15; + --spectrum-white: rgb(255, 255, 255); + --spectrum-transparent-white-25: rgba(255, 255, 255, 0); + --spectrum-transparent-white-50: rgba(255, 255, 255, 0.04); + --spectrum-transparent-white-75: rgba(255, 255, 255, 0.07); + --spectrum-transparent-white-100: rgba(255, 255, 255, 0.11); + --spectrum-transparent-white-200: rgba(255, 255, 255, 0.14); + --spectrum-transparent-white-300: rgba(255, 255, 255, 0.17); + --spectrum-transparent-white-400: rgba(255, 255, 255, 0.21); + --spectrum-transparent-white-500: rgba(255, 255, 255, 0.39); + --spectrum-transparent-white-600: rgba(255, 255, 255, 0.51); + --spectrum-transparent-white-700: rgba(255, 255, 255, 0.66); + --spectrum-transparent-white-800: rgba(255, 255, 255, 0.85); + --spectrum-transparent-white-900: rgba(255, 255, 255, 0.94); + --spectrum-transparent-white-1000: rgb(255, 255, 255); + --spectrum-black: rgb(0, 0, 0); + --spectrum-transparent-black-25: rgba(0, 0, 0, 0); + --spectrum-transparent-black-50: rgba(0, 0, 0, 0.03); + --spectrum-transparent-black-75: rgba(0, 0, 0, 0.05); + --spectrum-transparent-black-100: rgba(0, 0, 0, 0.09); + --spectrum-transparent-black-200: rgba(0, 0, 0, 0.12); + --spectrum-transparent-black-300: rgba(0, 0, 0, 0.15); + --spectrum-transparent-black-400: rgba(0, 0, 0, 0.22); + --spectrum-transparent-black-500: rgba(0, 0, 0, 0.44); + --spectrum-transparent-black-600: rgba(0, 0, 0, 0.56); + --spectrum-transparent-black-700: rgba(0, 0, 0, 0.69); + --spectrum-transparent-black-800: rgba(0, 0, 0, 0.84); + --spectrum-transparent-black-900: rgba(0, 0, 0, 0.93); + --spectrum-transparent-black-1000: rgb(0, 0, 0); + --spectrum-icon-color-inverse: var(--spectrum-gray-50); + --spectrum-icon-color-primary-default: var(--spectrum-neutral-content-color-default); + --spectrum-radio-button-selection-indicator: 4px; + --spectrum-field-label-to-component: 0px; + --spectrum-help-text-to-component: 0px; + --spectrum-button-minimum-width-multiplier: 2.25; + --spectrum-divider-thickness-small: 1px; + --spectrum-divider-thickness-medium: 2px; + --spectrum-divider-thickness-large: 4px; + --spectrum-swatch-rectangle-width-multiplier: 2; + --spectrum-swatch-slash-thickness-extra-small: 2px; + --spectrum-swatch-slash-thickness-small: 3px; + --spectrum-swatch-slash-thickness-medium: 4px; + --spectrum-swatch-slash-thickness-large: 5px; + --spectrum-progress-bar-minimum-width: 48px; + --spectrum-progress-bar-maximum-width: 768px; + --spectrum-meter-minimum-width: 48px; + --spectrum-meter-maximum-width: 768px; + --spectrum-meter-default-width: var(--spectrum-meter-width); + --spectrum-in-line-alert-minimum-width: 240px; + --spectrum-popover-tip-width: 16px; + --spectrum-popover-tip-height: 8px; + --spectrum-menu-item-label-to-description: 1px; + --spectrum-menu-item-section-divider-height: 8px; + --spectrum-slider-track-thickness: 2px; + --spectrum-slider-handle-gap: 4px; + --spectrum-picker-minimum-width-multiplier: 2; + --spectrum-picker-end-edge-to-disclousure-icon-quiet: var(--spectrum-picker-end-edge-to-disclosure-icon-quiet); + --spectrum-picker-end-edge-to-disclosure-icon-quiet: 0px; + --spectrum-text-field-minimum-width-multiplier: 1.5; + --spectrum-combo-box-minimum-width-multiplier: 2.5; + --spectrum-combo-box-quiet-minimum-width-multiplier: 2; + --spectrum-combo-box-visual-to-field-button-quiet: 0px; + --spectrum-alert-dialog-minimum-width: 288px; + --spectrum-alert-dialog-maximum-width: 480px; + --spectrum-contextual-help-minimum-width: 268px; + --spectrum-breadcrumbs-height: var(--spectrum-component-height-300); + --spectrum-breadcrumbs-height-compact: var(--spectrum-component-height-200); + --spectrum-breadcrumbs-end-edge-to-text: 0px; + --spectrum-breadcrumbs-truncated-menu-to-separator-icon: 0px; + --spectrum-breadcrumbs-start-edge-to-truncated-menu: 0px; + --spectrum-breadcrumbs-truncated-menu-to-bottom-text: 0px; + --spectrum-alert-banner-to-top-workflow-icon: var(--spectrum-alert-banner-top-to-workflow-icon); + --spectrum-alert-banner-to-top-text: var(--spectrum-alert-banner-top-to-text); + --spectrum-alert-banner-to-bottom-text: var(--spectrum-alert-banner-bottom-to-text); + --spectrum-color-area-border-width: var(--spectrum-border-width-100); + --spectrum-color-area-border-rounding: var(--spectrum-corner-radius-100); + --spectrum-color-wheel-color-area-margin: 12px; + --spectrum-color-slider-border-width: 1px; + --spectrum-color-slider-border-rounding: 4px; + --spectrum-floating-action-button-drop-shadow-blur: 12px; + --spectrum-floating-action-button-drop-shadow-y: 4px; + --spectrum-illustrated-message-maximum-width: 380px; + --spectrum-search-field-minimum-width-multiplier: 3; + --spectrum-color-loupe-height: 64px; + --spectrum-color-loupe-width: 48px; + --spectrum-color-loupe-bottom-to-color-handle: 12px; + --spectrum-color-loupe-outer-border-width: var(--spectrum-border-width-200); + --spectrum-color-loupe-inner-border-width: 1px; + --spectrum-card-minimum-width: 100px; + --spectrum-card-preview-minimum-height: 130px; + --spectrum-card-selection-background-size: 40px; + --spectrum-drop-zone-width: 428px; + --spectrum-drop-zone-content-maximum-width: var(--spectrum-illustrated-message-maximum-width); + --spectrum-drop-zone-border-dash-length: 8px; + --spectrum-drop-zone-border-dash-gap: 4px; + --spectrum-drop-zone-title-size: var(--spectrum-illustrated-message-title-size); + --spectrum-drop-zone-cjk-title-size: var(--spectrum-illustrated-message-cjk-title-size); + --spectrum-drop-zone-body-size: var(--spectrum-illustrated-message-body-size); + --spectrum-color-handle-border-width: var(--spectrum-border-width-200); + --spectrum-color-handle-inner-border-width: 1px; + --spectrum-color-handle-outer-border-width: 1px; + --spectrum-color-handle-drop-shadow-x: 0; + --spectrum-color-handle-drop-shadow-y: 0; + --spectrum-color-handle-drop-shadow-blur: 0; + --spectrum-table-row-height-small-compact: var(--spectrum-component-height-75); + --spectrum-table-row-height-medium-compact: var(--spectrum-component-height-100); + --spectrum-table-row-height-large-compact: var(--spectrum-component-height-200); + --spectrum-table-row-height-extra-large-compact: var(--spectrum-component-height-300); + --spectrum-table-row-top-to-text-small-compact: var(--spectrum-component-top-to-text-75); + --spectrum-table-row-top-to-text-medium-compact: var(--spectrum-component-top-to-text-100); + --spectrum-table-row-top-to-text-large-compact: var(--spectrum-component-top-to-text-200); + --spectrum-table-row-top-to-text-extra-large-compact: var(--spectrum-component-top-to-text-300); + --spectrum-table-row-bottom-to-text-small-compact: var(--spectrum-component-bottom-to-text-75); + --spectrum-table-row-bottom-to-text-medium-compact: var(--spectrum-component-bottom-to-text-100); + --spectrum-table-row-bottom-to-text-large-compact: var(--spectrum-component-bottom-to-text-200); + --spectrum-table-row-bottom-to-text-extra-large-compact: var(--spectrum-component-bottom-to-text-300); + --spectrum-table-border-divider-width: 1px; + --spectrum-tab-item-height-small: var(--spectrum-component-height-200); + --spectrum-tab-item-height-medium: var(--spectrum-component-height-300); + --spectrum-tab-item-height-large: var(--spectrum-component-height-400); + --spectrum-tab-item-height-extra-large: var(--spectrum-component-height-500); + --spectrum-tab-item-compact-height-small: var(--spectrum-component-height-75); + --spectrum-tab-item-compact-height-medium: var(--spectrum-component-height-100); + --spectrum-tab-item-compact-height-large: var(--spectrum-component-height-200); + --spectrum-tab-item-compact-height-extra-large: var(--spectrum-component-height-300); + --spectrum-tab-item-start-to-edge-quiet: 0px; + --spectrum-in-field-button-width-stacked-small: 20px; + --spectrum-in-field-button-width-stacked-medium: 28px; + --spectrum-in-field-button-width-stacked-large: 36px; + --spectrum-in-field-button-width-stacked-extra-large: 44px; + --spectrum-in-field-button-fill-stacked-inner-border-rounding: 0px; + --spectrum-in-field-button-edge-to-fill: 0px; + --spectrum-in-field-button-stacked-inner-edge-to-fill: 0px; + --spectrum-in-field-button-edge-to-disclosure-icon-stacked-small: 7px; + --spectrum-in-field-button-edge-to-disclosure-icon-stacked-medium: 9px; + --spectrum-in-field-button-edge-to-disclosure-icon-stacked-large: 13px; + --spectrum-in-field-button-edge-to-disclosure-icon-stacked-extra-large: 16px; + --spectrum-in-field-button-outer-edge-to-disclosure-icon-stacked-small: 3px; + --spectrum-in-field-button-outer-edge-to-disclosure-icon-stacked-medium: 3px; + --spectrum-in-field-button-outer-edge-to-disclosure-icon-stacked-large: 4px; + --spectrum-in-field-button-outer-edge-to-disclosure-icon-stacked-extra-large: 5px; + --spectrum-in-field-button-inner-edge-to-disclosure-icon-stacked-small: var(--spectrum-in-field-button-outer-edge-to-disclosure-icon-stacked-small); + --spectrum-in-field-button-inner-edge-to-disclosure-icon-stacked-medium: var(--spectrum-in-field-button-outer-edge-to-disclosure-icon-stacked-medium); + --spectrum-in-field-button-inner-edge-to-disclosure-icon-stacked-large: var(--spectrum-in-field-button-outer-edge-to-disclosure-icon-stacked-large); + --spectrum-in-field-button-inner-edge-to-disclosure-icon-stacked-extra-large: var(--spectrum-in-field-button-outer-edge-to-disclosure-icon-stacked-extra-large); + --spectrum-android-elevation: 2dp; + --spectrum-spacing-50: 2px; + --spectrum-spacing-75: 4px; + --spectrum-spacing-100: 8px; + --spectrum-spacing-200: 12px; + --spectrum-spacing-300: 16px; + --spectrum-spacing-400: 24px; + --spectrum-spacing-500: 32px; + --spectrum-spacing-600: 40px; + --spectrum-spacing-700: 48px; + --spectrum-spacing-800: 64px; + --spectrum-spacing-900: 80px; + --spectrum-spacing-1000: 96px; + --spectrum-focus-indicator-thickness: 2px; + --spectrum-focus-indicator-gap: 2px; + --spectrum-border-width-100: 1px; + --spectrum-border-width-200: 2px; + --spectrum-border-width-400: 4px; + --spectrum-field-edge-to-text-quiet: 0px; + --spectrum-field-edge-to-visual-quiet: 0px; + --spectrum-field-edge-to-border-quiet: 0px; + --spectrum-field-edge-to-alert-icon-quiet: 0px; + --spectrum-field-edge-to-validation-icon-quiet: 0px; + --spectrum-text-underline-thickness: 1px; + --spectrum-text-underline-gap: 1px; + --spectrum-accent-color-100: var(--spectrum-blue-100); + --spectrum-accent-color-200: var(--spectrum-blue-200); + --spectrum-accent-color-300: var(--spectrum-blue-300); + --spectrum-accent-color-400: var(--spectrum-blue-400); + --spectrum-accent-color-500: var(--spectrum-blue-500); + --spectrum-accent-color-600: var(--spectrum-blue-600); + --spectrum-accent-color-700: var(--spectrum-blue-700); + --spectrum-accent-color-800: var(--spectrum-blue-800); + --spectrum-accent-color-900: var(--spectrum-blue-900); + --spectrum-accent-color-1000: var(--spectrum-blue-1000); + --spectrum-accent-color-1100: var(--spectrum-blue-1100); + --spectrum-accent-color-1200: var(--spectrum-blue-1200); + --spectrum-accent-color-1300: var(--spectrum-blue-1300); + --spectrum-accent-color-1400: var(--spectrum-blue-1400); + --spectrum-accent-color-1500: var(--spectrum-blue-1500); + --spectrum-accent-color-1600: var(--spectrum-blue-1600); + --spectrum-informative-color-100: var(--spectrum-blue-100); + --spectrum-informative-color-200: var(--spectrum-blue-200); + --spectrum-informative-color-300: var(--spectrum-blue-300); + --spectrum-informative-color-400: var(--spectrum-blue-400); + --spectrum-informative-color-500: var(--spectrum-blue-500); + --spectrum-informative-color-600: var(--spectrum-blue-600); + --spectrum-informative-color-700: var(--spectrum-blue-700); + --spectrum-informative-color-800: var(--spectrum-blue-800); + --spectrum-informative-color-900: var(--spectrum-blue-900); + --spectrum-informative-color-1000: var(--spectrum-blue-1000); + --spectrum-informative-color-1100: var(--spectrum-blue-1100); + --spectrum-informative-color-1200: var(--spectrum-blue-1200); + --spectrum-informative-color-1300: var(--spectrum-blue-1300); + --spectrum-informative-color-1400: var(--spectrum-blue-1400); + --spectrum-informative-color-1500: var(--spectrum-blue-1500); + --spectrum-informative-color-1600: var(--spectrum-blue-1600); + --spectrum-negative-color-100: var(--spectrum-red-100); + --spectrum-negative-color-200: var(--spectrum-red-200); + --spectrum-negative-color-300: var(--spectrum-red-300); + --spectrum-negative-color-400: var(--spectrum-red-400); + --spectrum-negative-color-500: var(--spectrum-red-500); + --spectrum-negative-color-600: var(--spectrum-red-600); + --spectrum-negative-color-700: var(--spectrum-red-700); + --spectrum-negative-color-800: var(--spectrum-red-800); + --spectrum-negative-color-900: var(--spectrum-red-900); + --spectrum-negative-color-1000: var(--spectrum-red-1000); + --spectrum-negative-color-1100: var(--spectrum-red-1100); + --spectrum-negative-color-1200: var(--spectrum-red-1200); + --spectrum-negative-color-1300: var(--spectrum-red-1300); + --spectrum-negative-color-1400: var(--spectrum-red-1400); + --spectrum-negative-color-1500: var(--spectrum-red-1500); + --spectrum-negative-color-1600: var(--spectrum-red-1600); + --spectrum-notice-color-100: var(--spectrum-orange-100); + --spectrum-notice-color-200: var(--spectrum-orange-200); + --spectrum-notice-color-300: var(--spectrum-orange-300); + --spectrum-notice-color-400: var(--spectrum-orange-400); + --spectrum-notice-color-500: var(--spectrum-orange-500); + --spectrum-notice-color-600: var(--spectrum-orange-600); + --spectrum-notice-color-700: var(--spectrum-orange-700); + --spectrum-notice-color-800: var(--spectrum-orange-800); + --spectrum-notice-color-900: var(--spectrum-orange-900); + --spectrum-notice-color-1000: var(--spectrum-orange-1000); + --spectrum-notice-color-1100: var(--spectrum-orange-1100); + --spectrum-notice-color-1200: var(--spectrum-orange-1200); + --spectrum-notice-color-1300: var(--spectrum-orange-1300); + --spectrum-notice-color-1400: var(--spectrum-orange-1400); + --spectrum-notice-color-1500: var(--spectrum-orange-1500); + --spectrum-notice-color-1600: var(--spectrum-orange-1600); + --spectrum-positive-color-100: var(--spectrum-green-100); + --spectrum-positive-color-200: var(--spectrum-green-200); + --spectrum-positive-color-300: var(--spectrum-green-300); + --spectrum-positive-color-400: var(--spectrum-green-400); + --spectrum-positive-color-500: var(--spectrum-green-500); + --spectrum-positive-color-600: var(--spectrum-green-600); + --spectrum-positive-color-700: var(--spectrum-green-700); + --spectrum-positive-color-800: var(--spectrum-green-800); + --spectrum-positive-color-900: var(--spectrum-green-900); + --spectrum-positive-color-1000: var(--spectrum-green-1000); + --spectrum-positive-color-1100: var(--spectrum-green-1100); + --spectrum-positive-color-1200: var(--spectrum-green-1200); + --spectrum-positive-color-1300: var(--spectrum-green-1300); + --spectrum-positive-color-1400: var(--spectrum-green-1400); + --spectrum-positive-color-1500: var(--spectrum-green-1500); + --spectrum-positive-color-1600: var(--spectrum-green-1600); + --spectrum-default-font-family: var(--spectrum-sans-serif-font-family); + --spectrum-sans-serif-font-family: Adobe Clean; + --spectrum-serif-font-family: Adobe Clean Serif; + --spectrum-cjk-font-family: Adobe Clean Han; + --spectrum-light-font-weight: 300; + --spectrum-regular-font-weight: 400; + --spectrum-medium-font-weight: 500; + --spectrum-bold-font-weight: 700; + --spectrum-extra-bold-font-weight: 800; + --spectrum-black-font-weight: 900; + --spectrum-italic-font-style: italic; + --spectrum-default-font-style: normal; + --spectrum-line-height-100: 1.3; + --spectrum-line-height-200: 1.5; + --spectrum-cjk-line-height-100: 1.5; + --spectrum-cjk-line-height-200: 1.7; + --spectrum-cjk-letter-spacing: 0.05em; + --spectrum-heading-sans-serif-font-family: var(--spectrum-sans-serif-font-family); + --spectrum-heading-serif-font-family: var(--spectrum-serif-font-family); + --spectrum-heading-cjk-font-family: var(--spectrum-cjk-font-family); + --spectrum-heading-sans-serif-light-font-weight: var(--spectrum-light-font-weight); + --spectrum-heading-sans-serif-light-font-style: var(--spectrum-default-font-style); + --spectrum-heading-serif-light-font-weight: var(--spectrum-regular-font-weight); + --spectrum-heading-serif-light-font-style: var(--spectrum-default-font-style); + --spectrum-heading-cjk-light-font-weight: var(--spectrum-light-font-weight); + --spectrum-heading-cjk-light-font-style: var(--spectrum-default-font-style); + --spectrum-heading-sans-serif-font-weight: var(--spectrum-bold-font-weight); + --spectrum-heading-sans-serif-font-style: var(--spectrum-default-font-style); + --spectrum-heading-serif-font-weight: var(--spectrum-bold-font-weight); + --spectrum-heading-serif-font-style: var(--spectrum-default-font-style); + --spectrum-heading-cjk-font-weight: var(--spectrum-extra-bold-font-weight); + --spectrum-heading-cjk-font-style: var(--spectrum-default-font-style); + --spectrum-heading-sans-serif-heavy-font-weight: var(--spectrum-black-font-weight); + --spectrum-heading-sans-serif-heavy-font-style: var(--spectrum-default-font-style); + --spectrum-heading-serif-heavy-font-weight: var(--spectrum-black-font-weight); + --spectrum-heading-serif-heavy-font-style: var(--spectrum-default-font-style); + --spectrum-heading-cjk-heavy-font-weight: var(--spectrum-black-font-weight); + --spectrum-heading-cjk-heavy-font-style: var(--spectrum-default-font-style); + --spectrum-heading-sans-serif-light-strong-font-weight: var(--spectrum-bold-font-weight); + --spectrum-heading-sans-serif-light-strong-font-style: var(--spectrum-default-font-style); + --spectrum-heading-serif-light-strong-font-weight: var(--spectrum-bold-font-weight); + --spectrum-heading-serif-light-strong-font-style: var(--spectrum-default-font-style); + --spectrum-heading-cjk-light-strong-font-weight: var(--spectrum-extra-bold-font-weight); + --spectrum-heading-cjk-light-strong-font-style: var(--spectrum-default-font-style); + --spectrum-heading-sans-serif-strong-font-weight: var(--spectrum-black-font-weight); + --spectrum-heading-sans-serif-strong-font-style: var(--spectrum-default-font-style); + --spectrum-heading-serif-strong-font-weight: var(--spectrum-black-font-weight); + --spectrum-heading-serif-strong-font-style: var(--spectrum-default-font-style); + --spectrum-heading-cjk-strong-font-weight: var(--spectrum-black-font-weight); + --spectrum-heading-cjk-strong-font-style: var(--spectrum-default-font-style); + --spectrum-heading-sans-serif-heavy-strong-font-weight: var(--spectrum-black-font-weight); + --spectrum-heading-sans-serif-heavy-strong-font-style: var(--spectrum-default-font-style); + --spectrum-heading-serif-heavy-strong-font-weight: var(--spectrum-black-font-weight); + --spectrum-heading-serif-heavy-strong-font-style: var(--spectrum-default-font-style); + --spectrum-heading-cjk-heavy-strong-font-weight: var(--spectrum-black-font-weight); + --spectrum-heading-cjk-heavy-strong-font-style: var(--spectrum-default-font-style); + --spectrum-heading-sans-serif-light-emphasized-font-weight: var(--spectrum-light-font-weight); + --spectrum-heading-sans-serif-light-emphasized-font-style: var(--spectrum-italic-font-style); + --spectrum-heading-serif-light-emphasized-font-weight: var(--spectrum-regular-font-weight); + --spectrum-heading-serif-light-emphasized-font-style: var(--spectrum-italic-font-style); + --spectrum-heading-cjk-light-emphasized-font-weight: var(--spectrum-regular-font-weight); + --spectrum-heading-cjk-light-emphasized-font-style: var(--spectrum-default-font-style); + --spectrum-heading-sans-serif-emphasized-font-weight: var(--spectrum-bold-font-weight); + --spectrum-heading-sans-serif-emphasized-font-style: var(--spectrum-italic-font-style); + --spectrum-heading-serif-emphasized-font-weight: var(--spectrum-bold-font-weight); + --spectrum-heading-serif-emphasized-font-style: var(--spectrum-italic-font-style); + --spectrum-heading-cjk-emphasized-font-weight: var(--spectrum-black-font-weight); + --spectrum-heading-cjk-emphasized-font-style: var(--spectrum-default-font-style); + --spectrum-heading-sans-serif-heavy-emphasized-font-weight: var(--spectrum-black-font-weight); + --spectrum-heading-sans-serif-heavy-emphasized-font-style: var(--spectrum-italic-font-style); + --spectrum-heading-serif-heavy-emphasized-font-weight: var(--spectrum-black-font-weight); + --spectrum-heading-serif-heavy-emphasized-font-style: var(--spectrum-italic-font-style); + --spectrum-heading-cjk-heavy-emphasized-font-weight: var(--spectrum-black-font-weight); + --spectrum-heading-cjk-heavy-emphasized-font-style: var(--spectrum-default-font-style); + --spectrum-heading-sans-serif-light-strong-emphasized-font-weight: var(--spectrum-bold-font-weight); + --spectrum-heading-sans-serif-light-strong-emphasized-font-style: var(--spectrum-italic-font-style); + --spectrum-heading-serif-light-strong-emphasized-font-weight: var(--spectrum-bold-font-weight); + --spectrum-heading-serif-light-strong-emphasized-font-style: var(--spectrum-italic-font-style); + --spectrum-heading-cjk-light-strong-emphasized-font-weight: var(--spectrum-extra-bold-font-weight); + --spectrum-heading-cjk-light-strong-emphasized-font-style: var(--spectrum-default-font-style); + --spectrum-heading-sans-serif-strong-emphasized-font-weight: var(--spectrum-black-font-weight); + --spectrum-heading-sans-serif-strong-emphasized-font-style: var(--spectrum-italic-font-style); + --spectrum-heading-serif-strong-emphasized-font-weight: var(--spectrum-black-font-weight); + --spectrum-heading-serif-strong-emphasized-font-style: var(--spectrum-italic-font-style); + --spectrum-heading-cjk-strong-emphasized-font-weight: var(--spectrum-black-font-weight); + --spectrum-heading-cjk-strong-emphasized-font-style: var(--spectrum-default-font-style); + --spectrum-heading-sans-serif-heavy-strong-emphasized-font-weight: var(--spectrum-black-font-weight); + --spectrum-heading-sans-serif-heavy-strong-emphasized-font-style: var(--spectrum-italic-font-style); + --spectrum-heading-serif-heavy-strong-emphasized-font-weight: var(--spectrum-black-font-weight); + --spectrum-heading-serif-heavy-strong-emphasized-font-style: var(--spectrum-italic-font-style); + --spectrum-heading-cjk-heavy-strong-emphasized-font-weight: var(--spectrum-black-font-weight); + --spectrum-heading-cjk-heavy-strong-emphasized-font-style: var(--spectrum-default-font-style); + --spectrum-heading-size-xxxl: var(--spectrum-font-size-1300); + --spectrum-heading-size-xxl: var(--spectrum-font-size-1100); + --spectrum-heading-size-xl: var(--spectrum-font-size-900); + --spectrum-heading-size-l: var(--spectrum-font-size-700); + --spectrum-heading-size-m: var(--spectrum-font-size-500); + --spectrum-heading-size-s: var(--spectrum-font-size-300); + --spectrum-heading-size-xs: var(--spectrum-font-size-200); + --spectrum-heading-size-xxs: var(--spectrum-font-size-100); + --spectrum-heading-cjk-size-xxxl: var(--spectrum-font-size-1300); + --spectrum-heading-cjk-size-xxl: var(--spectrum-font-size-900); + --spectrum-heading-cjk-size-xl: var(--spectrum-font-size-800); + --spectrum-heading-cjk-size-l: var(--spectrum-font-size-600); + --spectrum-heading-cjk-size-m: var(--spectrum-font-size-400); + --spectrum-heading-cjk-size-s: var(--spectrum-font-size-300); + --spectrum-heading-cjk-size-xs: var(--spectrum-font-size-200); + --spectrum-heading-cjk-size-xxs: var(--spectrum-font-size-100); + --spectrum-heading-line-height: var(--spectrum-line-height-100); + --spectrum-heading-cjk-line-height: var(--spectrum-cjk-line-height-100); + --spectrum-heading-margin-top-multiplier: 0.88888889; + --spectrum-heading-margin-bottom-multiplier: 0.25; + --spectrum-heading-color: var(--spectrum-gray-900); + --spectrum-body-sans-serif-font-family: var(--spectrum-sans-serif-font-family); + --spectrum-body-serif-font-family: var(--spectrum-serif-font-family); + --spectrum-body-cjk-font-family: var(--spectrum-cjk-font-family); + --spectrum-body-sans-serif-font-weight: var(--spectrum-regular-font-weight); + --spectrum-body-sans-serif-font-style: var(--spectrum-default-font-style); + --spectrum-body-serif-font-weight: var(--spectrum-regular-font-weight); + --spectrum-body-serif-font-style: var(--spectrum-default-font-style); + --spectrum-body-cjk-font-weight: var(--spectrum-regular-font-weight); + --spectrum-body-cjk-font-style: var(--spectrum-default-font-style); + --spectrum-body-sans-serif-strong-font-weight: var(--spectrum-bold-font-weight); + --spectrum-body-sans-serif-strong-font-style: var(--spectrum-default-font-style); + --spectrum-body-serif-strong-font-weight: var(--spectrum-bold-font-weight); + --spectrum-body-serif-strong-font-style: var(--spectrum-default-font-style); + --spectrum-body-cjk-strong-font-weight: var(--spectrum-black-font-weight); + --spectrum-body-cjk-strong-font-style: var(--spectrum-default-font-style); + --spectrum-body-sans-serif-emphasized-font-weight: var(--spectrum-regular-font-weight); + --spectrum-body-sans-serif-emphasized-font-style: var(--spectrum-italic-font-style); + --spectrum-body-serif-emphasized-font-weight: var(--spectrum-regular-font-weight); + --spectrum-body-serif-emphasized-font-style: var(--spectrum-italic-font-style); + --spectrum-body-cjk-emphasized-font-weight: var(--spectrum-extra-bold-font-weight); + --spectrum-body-cjk-emphasized-font-style: var(--spectrum-default-font-style); + --spectrum-body-sans-serif-strong-emphasized-font-weight: var(--spectrum-bold-font-weight); + --spectrum-body-sans-serif-strong-emphasized-font-style: var(--spectrum-italic-font-style); + --spectrum-body-serif-strong-emphasized-font-weight: var(--spectrum-bold-font-weight); + --spectrum-body-serif-strong-emphasized-font-style: var(--spectrum-italic-font-style); + --spectrum-body-cjk-strong-emphasized-font-weight: var(--spectrum-black-font-weight); + --spectrum-body-cjk-strong-emphasized-font-style: var(--spectrum-default-font-style); + --spectrum-body-size-xxxl: var(--spectrum-font-size-600); + --spectrum-body-size-xxl: var(--spectrum-font-size-500); + --spectrum-body-size-xl: var(--spectrum-font-size-400); + --spectrum-body-size-l: var(--spectrum-font-size-300); + --spectrum-body-size-m: var(--spectrum-font-size-200); + --spectrum-body-size-s: var(--spectrum-font-size-100); + --spectrum-body-size-xs: var(--spectrum-font-size-75); + --spectrum-body-line-height: var(--spectrum-line-height-200); + --spectrum-body-cjk-line-height: var(--spectrum-cjk-line-height-200); + --spectrum-body-margin-multiplier: 0.75; + --spectrum-body-color: var(--spectrum-gray-800); + --spectrum-detail-sans-serif-font-family: var(--spectrum-sans-serif-font-family); + --spectrum-detail-serif-font-family: var(--spectrum-serif-font-family); + --spectrum-detail-cjk-font-family: var(--spectrum-cjk-font-family); + --spectrum-detail-sans-serif-font-weight: var(--spectrum-bold-font-weight); + --spectrum-detail-sans-serif-font-style: var(--spectrum-default-font-style); + --spectrum-detail-serif-font-weight: var(--spectrum-bold-font-weight); + --spectrum-detail-serif-font-style: var(--spectrum-default-font-style); + --spectrum-detail-cjk-font-weight: var(--spectrum-extra-bold-font-weight); + --spectrum-detail-cjk-font-style: var(--spectrum-default-font-style); + --spectrum-detail-sans-serif-light-font-weight: var(--spectrum-regular-font-weight); + --spectrum-detail-sans-serif-light-font-style: var(--spectrum-default-font-style); + --spectrum-detail-serif-light-font-weight: var(--spectrum-regular-font-weight); + --spectrum-detail-serif-light-font-style: var(--spectrum-default-font-style); + --spectrum-detail-cjk-light-font-weight: var(--spectrum-light-font-weight); + --spectrum-detail-cjk-light-font-style: var(--spectrum-default-font-style); + --spectrum-detail-sans-serif-strong-font-weight: var(--spectrum-bold-font-weight); + --spectrum-detail-sans-serif-strong-font-style: var(--spectrum-default-font-style); + --spectrum-detail-serif-strong-font-weight: var(--spectrum-bold-font-weight); + --spectrum-detail-serif-strong-font-style: var(--spectrum-default-font-style); + --spectrum-detail-cjk-strong-font-weight: var(--spectrum-black-font-weight); + --spectrum-detail-cjk-strong-font-style: var(--spectrum-default-font-style); + --spectrum-detail-sans-serif-light-strong-font-weight: var(--spectrum-regular-font-weight); + --spectrum-detail-sans-serif-light-strong-font-style: var(--spectrum-default-font-style); + --spectrum-detail-serif-light-strong-font-weight: var(--spectrum-regular-font-weight); + --spectrum-detail-serif-light-strong-font-style: var(--spectrum-default-font-style); + --spectrum-detail-cjk-light-strong-font-weight: var(--spectrum-extra-bold-font-weight); + --spectrum-detail-cjk-light-strong-font-style: var(--spectrum-default-font-style); + --spectrum-detail-sans-serif-emphasized-font-weight: var(--spectrum-bold-font-weight); + --spectrum-detail-sans-serif-emphasized-font-style: var(--spectrum-italic-font-style); + --spectrum-detail-serif-emphasized-font-weight: var(--spectrum-bold-font-weight); + --spectrum-detail-serif-emphasized-font-style: var(--spectrum-italic-font-style); + --spectrum-detail-cjk-emphasized-font-weight: var(--spectrum-black-font-weight); + --spectrum-detail-cjk-emphasized-font-style: var(--spectrum-default-font-style); + --spectrum-detail-sans-serif-light-emphasized-font-weight: var(--spectrum-regular-font-weight); + --spectrum-detail-sans-serif-light-emphasized-font-style: var(--spectrum-italic-font-style); + --spectrum-detail-serif-light-emphasized-font-weight: var(--spectrum-regular-font-weight); + --spectrum-detail-serif-light-emphasized-font-style: var(--spectrum-italic-font-style); + --spectrum-detail-cjk-light-emphasized-font-weight: var(--spectrum-regular-font-weight); + --spectrum-detail-cjk-light-emphasized-font-style: var(--spectrum-default-font-style); + --spectrum-detail-sans-serif-strong-emphasized-font-weight: var(--spectrum-bold-font-weight); + --spectrum-detail-sans-serif-strong-emphasized-font-style: var(--spectrum-italic-font-style); + --spectrum-detail-serif-strong-emphasized-font-weight: var(--spectrum-bold-font-weight); + --spectrum-detail-serif-strong-emphasized-font-style: var(--spectrum-italic-font-style); + --spectrum-detail-cjk-strong-emphasized-font-weight: var(--spectrum-black-font-weight); + --spectrum-detail-cjk-strong-emphasized-font-style: var(--spectrum-default-font-style); + --spectrum-detail-sans-serif-light-strong-emphasized-font-weight: var(--spectrum-regular-font-weight); + --spectrum-detail-sans-serif-light-strong-emphasized-font-style: var(--spectrum-italic-font-style); + --spectrum-detail-serif-light-strong-emphasized-font-weight: var(--spectrum-regular-font-weight); + --spectrum-detail-serif-light-strong-emphasized-font-style: var(--spectrum-italic-font-style); + --spectrum-detail-cjk-light-strong-emphasized-font-weight: var(--spectrum-extra-bold-font-weight); + --spectrum-detail-cjk-light-strong-emphasized-font-style: var(--spectrum-default-font-style); + --spectrum-detail-size-xl: var(--spectrum-font-size-200); + --spectrum-detail-size-l: var(--spectrum-font-size-100); + --spectrum-detail-size-m: var(--spectrum-font-size-75); + --spectrum-detail-size-s: var(--spectrum-font-size-50); + --spectrum-detail-line-height: var(--spectrum-line-height-100); + --spectrum-detail-cjk-line-height: var(--spectrum-cjk-line-height-100); + --spectrum-detail-margin-top-multiplier: 0.88888889; + --spectrum-detail-margin-bottom-multiplier: 0.25; + --spectrum-detail-letter-spacing: 0.06em; + --spectrum-detail-sans-serif-text-transform: uppercase; + --spectrum-detail-serif-text-transform: uppercase; + --spectrum-detail-color: var(--spectrum-gray-900); + --spectrum-code-font-family: Source Code Pro; + --spectrum-code-cjk-font-family: var(--spectrum-code-font-family); + --spectrum-code-font-weight: var(--spectrum-regular-font-weight); + --spectrum-code-font-style: var(--spectrum-default-font-style); + --spectrum-code-cjk-font-weight: var(--spectrum-regular-font-weight); + --spectrum-code-cjk-font-style: var(--spectrum-default-font-style); + --spectrum-code-strong-font-weight: var(--spectrum-bold-font-weight); + --spectrum-code-strong-font-style: var(--spectrum-default-font-style); + --spectrum-code-cjk-strong-font-weight: var(--spectrum-black-font-weight); + --spectrum-code-cjk-strong-font-style: var(--spectrum-default-font-style); + --spectrum-code-emphasized-font-weight: var(--spectrum-regular-font-weight); + --spectrum-code-emphasized-font-style: var(--spectrum-italic-font-style); + --spectrum-code-cjk-emphasized-font-weight: var(--spectrum-bold-font-weight); + --spectrum-code-cjk-emphasized-font-style: var(--spectrum-default-font-style); + --spectrum-code-strong-emphasized-font-weight: var(--spectrum-bold-font-weight); + --spectrum-code-strong-emphasized-font-style: var(--spectrum-italic-font-style); + --spectrum-code-cjk-strong-emphasized-font-weight: var(--spectrum-black-font-weight); + --spectrum-code-cjk-strong-emphasized-font-style: var(--spectrum-default-font-style); + --spectrum-code-size-xl: var(--spectrum-font-size-400); + --spectrum-code-size-l: var(--spectrum-font-size-300); + --spectrum-code-size-m: var(--spectrum-font-size-200); + --spectrum-code-size-s: var(--spectrum-font-size-100); + --spectrum-code-size-xs: var(--spectrum-font-size-75); + --spectrum-code-line-height: var(--spectrum-line-height-200); + --spectrum-code-cjk-line-height: var(--spectrum-cjk-line-height-200); + --spectrum-code-color: var(--spectrum-gray-800); +} diff --git a/dist/css/large-vars.css b/dist/css/large-vars.css new file mode 100644 index 00000000000..203f28d792e --- /dev/null +++ b/dist/css/large-vars.css @@ -0,0 +1,505 @@ +.spectrum--large { + --spectrum-checkbox-control-size-small: 16px; + --spectrum-checkbox-control-size-medium: 18px; + --spectrum-checkbox-control-size-large: 20px; + --spectrum-checkbox-control-size-extra-large: 22px; + --spectrum-checkbox-top-to-control-small: 7px; + --spectrum-checkbox-top-to-control-medium: 11px; + --spectrum-checkbox-top-to-control-large: 15px; + --spectrum-checkbox-top-to-control-extra-large: 19px; + --spectrum-switch-control-width-small: 32px; + --spectrum-switch-control-width-medium: 36px; + --spectrum-switch-control-width-large: 41px; + --spectrum-switch-control-width-extra-large: 46px; + --spectrum-switch-control-height-small: 16px; + --spectrum-switch-control-height-medium: 18px; + --spectrum-switch-control-height-large: 20px; + --spectrum-switch-control-height-extra-large: 22px; + --spectrum-switch-top-to-control-small: 7px; + --spectrum-switch-top-to-control-medium: 11px; + --spectrum-switch-top-to-control-large: 15px; + --spectrum-switch-top-to-control-extra-large: 19px; + --spectrum-radio-button-control-size-small: 16px; + --spectrum-radio-button-control-size-medium: 18px; + --spectrum-radio-button-control-size-large: 20px; + --spectrum-radio-button-control-size-extra-large: 22px; + --spectrum-radio-button-top-to-control-small: 7px; + --spectrum-radio-button-top-to-control-medium: 11px; + --spectrum-radio-button-top-to-control-large: 15px; + --spectrum-radio-button-top-to-control-extra-large: 19px; + --spectrum-field-label-text-to-asterisk-small: 5px; + --spectrum-field-label-text-to-asterisk-medium: 5px; + --spectrum-field-label-text-to-asterisk-large: 6px; + --spectrum-field-label-text-to-asterisk-extra-large: 6px; + --spectrum-field-label-top-to-asterisk-small: 11px; + --spectrum-field-label-top-to-asterisk-medium: 15px; + --spectrum-field-label-top-to-asterisk-large: 19px; + --spectrum-field-label-top-to-asterisk-extra-large: 24px; + --spectrum-field-label-top-margin-small: 0px; + --spectrum-field-label-top-margin-medium: 5px; + --spectrum-field-label-top-margin-large: 6px; + --spectrum-field-label-top-margin-extra-large: 6px; + --spectrum-field-label-to-component-quiet-small: -10px; + --spectrum-field-label-to-component-quiet-medium: -10px; + --spectrum-field-label-to-component-quiet-large: -15px; + --spectrum-field-label-to-component-quiet-extra-large: -19px; + --spectrum-help-text-top-to-workflow-icon-small: 5px; + --spectrum-help-text-top-to-workflow-icon-medium: 4px; + --spectrum-help-text-top-to-workflow-icon-large: 8px; + --spectrum-help-text-top-to-workflow-icon-extra-large: 11px; + --spectrum-status-light-dot-size-small: 8px; + --spectrum-status-light-dot-size-medium: 10px; + --spectrum-status-light-dot-size-large: 12px; + --spectrum-status-light-dot-size-extra-large: 12px; + --spectrum-status-light-top-to-dot-small: 11px; + --spectrum-status-light-top-to-dot-medium: 15px; + --spectrum-status-light-top-to-dot-large: 19px; + --spectrum-status-light-top-to-dot-extra-large: 24px; + --spectrum-action-button-edge-to-hold-icon-extra-small: 3px; + --spectrum-action-button-edge-to-hold-icon-small: 3px; + --spectrum-action-button-edge-to-hold-icon-medium: 5px; + --spectrum-action-button-edge-to-hold-icon-large: 6px; + --spectrum-action-button-edge-to-hold-icon-extra-large: 7px; + --spectrum-tooltip-tip-width: 10px; + --spectrum-tooltip-tip-height: 5px; + --spectrum-tooltip-maximum-width: 200px; + --spectrum-progress-circle-size-small: 20px; + --spectrum-progress-circle-size-medium: 40px; + --spectrum-progress-circle-size-large: 80px; + --spectrum-progress-circle-thickness-small: 3px; + --spectrum-progress-circle-thickness-medium: 4px; + --spectrum-progress-circle-thickness-large: 5px; + --spectrum-toast-height: 56px; + --spectrum-toast-maximum-width: 420px; + --spectrum-toast-top-to-workflow-icon: 17px; + --spectrum-toast-top-to-text: 16px; + --spectrum-toast-bottom-to-text: 19px; + --spectrum-action-bar-height: 56px; + --spectrum-action-bar-top-to-item-counter: 16px; + --spectrum-swatch-size-extra-small: 20px; + --spectrum-swatch-size-small: 30px; + --spectrum-swatch-size-medium: 40px; + --spectrum-swatch-size-large: 50px; + --spectrum-progress-bar-thickness-small: 5px; + --spectrum-progress-bar-thickness-medium: 8px; + --spectrum-progress-bar-thickness-large: 10px; + --spectrum-progress-bar-thickness-extra-large: 13px; + --spectrum-meter-width: 240px; + --spectrum-meter-thickness-small: 5px; + --spectrum-meter-thickness-large: 8px; + --spectrum-tag-top-to-avatar-small: 5px; + --spectrum-tag-top-to-avatar-medium: 7px; + --spectrum-tag-top-to-avatar-large: 11px; + --spectrum-tag-top-to-cross-icon-small: 10px; + --spectrum-tag-top-to-cross-icon-medium: 15px; + --spectrum-tag-top-to-cross-icon-large: 19px; + --spectrum-popover-top-to-content-area: 5px; + --spectrum-menu-item-edge-to-content-not-selected-small: 24px; + --spectrum-menu-item-edge-to-content-not-selected-medium: 42px; + --spectrum-menu-item-edge-to-content-not-selected-large: 47px; + --spectrum-menu-item-edge-to-content-not-selected-extra-large: 54px; + --spectrum-menu-item-top-to-disclosure-icon-small: 9px; + --spectrum-menu-item-top-to-disclosure-icon-medium: 13px; + --spectrum-menu-item-top-to-disclosure-icon-large: 17px; + --spectrum-menu-item-top-to-disclosure-icon-extra-large: 22px; + --spectrum-menu-item-top-to-selected-icon-small: 9px; + --spectrum-menu-item-top-to-selected-icon-medium: 13px; + --spectrum-menu-item-top-to-selected-icon-large: 17px; + --spectrum-menu-item-top-to-selected-icon-extra-large: 22px; + --spectrum-slider-control-height-small: 18px; + --spectrum-slider-control-height-medium: 20px; + --spectrum-slider-control-height-large: 22px; + --spectrum-slider-control-height-extra-large: 26px; + --spectrum-slider-handle-size-small: 18px; + --spectrum-slider-handle-size-medium: 20px; + --spectrum-slider-handle-size-large: 22px; + --spectrum-slider-handle-size-extra-large: 26px; + --spectrum-slider-handle-border-width-down-small: 7px; + --spectrum-slider-handle-border-width-down-medium: 8px; + --spectrum-slider-handle-border-width-down-large: 9px; + --spectrum-slider-handle-border-width-down-extra-large: 11px; + --spectrum-slider-bottom-to-handle-small: 6px; + --spectrum-slider-bottom-to-handle-medium: 10px; + --spectrum-slider-bottom-to-handle-large: 14px; + --spectrum-slider-bottom-to-handle-extra-large: 17px; + --spectrum-slider-control-to-field-label-small: 6px; + --spectrum-slider-control-to-field-label-medium: 10px; + --spectrum-slider-control-to-field-label-large: 14px; + --spectrum-slider-control-to-field-label-extra-large: 17px; + --spectrum-picker-visual-to-disclosure-icon-small: 9px; + --spectrum-picker-visual-to-disclosure-icon-medium: 10px; + --spectrum-picker-visual-to-disclosure-icon-large: 11px; + --spectrum-picker-visual-to-disclosure-icon-extra-large: 13px; + --spectrum-text-area-minimum-width: 140px; + --spectrum-text-area-minimum-height: 70px; + --spectrum-combo-box-visual-to-field-button-small: 9px; + --spectrum-combo-box-visual-to-field-button-medium: 10px; + --spectrum-combo-box-visual-to-field-button-large: 11px; + --spectrum-combo-box-visual-to-field-button-extra-large: 13px; + --spectrum-thumbnail-size-50: 20px; + --spectrum-thumbnail-size-75: 22px; + --spectrum-thumbnail-size-100: 26px; + --spectrum-thumbnail-size-200: 28px; + --spectrum-thumbnail-size-300: 32px; + --spectrum-thumbnail-size-400: 36px; + --spectrum-thumbnail-size-500: 40px; + --spectrum-thumbnail-size-600: 46px; + --spectrum-thumbnail-size-700: 50px; + --spectrum-thumbnail-size-800: 55px; + --spectrum-thumbnail-size-900: 62px; + --spectrum-thumbnail-size-1000: 70px; + --spectrum-alert-dialog-title-size: var(--spectrum-heading-size-xs); + --spectrum-alert-dialog-description-size: var(--spectrum-body-size-xs); + --spectrum-opacity-checkerboard-square-size: 10px; + --spectrum-contextual-help-title-size: var(--spectrum-heading-size-xxs); + --spectrum-contextual-help-body-size: var(--spectrum-heading-size-xs); + --spectrum-breadcrumbs-height-multiline: 84px; + --spectrum-breadcrumbs-top-to-text: 17px; + --spectrum-breadcrumbs-top-to-text-compact: 16px; + --spectrum-breadcrumbs-top-to-text-multiline: 15px; + --spectrum-breadcrumbs-bottom-to-text: 19px; + --spectrum-breadcrumbs-bottom-to-text-compact: 19px; + --spectrum-breadcrumbs-bottom-to-text-multiline: 10px; + --spectrum-breadcrumbs-start-edge-to-text: 9px; + --spectrum-breadcrumbs-top-text-to-bottom-text: 11px; + --spectrum-breadcrumbs-top-to-separator-icon: 25px; + --spectrum-breadcrumbs-top-to-separator-icon-compact: 23px; + --spectrum-breadcrumbs-top-to-separator-icon-multiline: 20px; + --spectrum-breadcrumbs-separator-icon-to-bottom-text-multiline: 15px; + --spectrum-breadcrumbs-top-to-truncated-menu: 10px; + --spectrum-breadcrumbs-top-to-truncated-menu-compact: 5px; + --spectrum-avatar-size-50: 20px; + --spectrum-avatar-size-75: 22px; + --spectrum-avatar-size-100: 26px; + --spectrum-avatar-size-200: 28px; + --spectrum-avatar-size-300: 32px; + --spectrum-avatar-size-400: 36px; + --spectrum-avatar-size-500: 40px; + --spectrum-avatar-size-600: 46px; + --spectrum-avatar-size-700: 50px; + --spectrum-alert-banner-minimum-height: 64px; + --spectrum-alert-banner-width: 680px; + --spectrum-alert-banner-top-to-workflow-icon: 21px; + --spectrum-alert-banner-top-to-text: 21px; + --spectrum-alert-banner-bottom-to-text: 22px; + --spectrum-rating-indicator-width: 22px; + --spectrum-rating-indicator-to-icon: 5px; + --spectrum-color-area-width: 240px; + --spectrum-color-area-minimum-width: 80px; + --spectrum-color-area-height: 240px; + --spectrum-color-area-minimum-height: 80px; + --spectrum-color-wheel-width: 240px; + --spectrum-color-wheel-minimum-width: 219px; + --spectrum-color-slider-length: 240px; + --spectrum-color-slider-minimum-length: 100px; + --spectrum-illustrated-message-title-size: var(--spectrum-heading-size-s); + --spectrum-illustrated-message-cjk-title-size: var(--spectrum-heading-cjk-size-s); + --spectrum-illustrated-message-body-size: var(--spectrum-body-size-xs); + --spectrum-coach-mark-width: 216px; + --spectrum-coach-mark-minimum-width: 216px; + --spectrum-coach-mark-maximum-width: 248px; + --spectrum-coach-mark-edge-to-content: var(--spectrum-spacing-300); + --spectrum-coach-mark-pagination-text-to-bottom-edge: 22px; + --spectrum-coach-mark-media-height: 162px; + --spectrum-coach-mark-media-minimum-height: 121px; + --spectrum-coach-mark-title-size: var(--spectrum-heading-size-xxs); + --spectrum-coach-mark-body-size: var(--spectrum-body-size-xs); + --spectrum-coach-mark-pagination-body-size: var(--spectrum-body-size-xs); + --spectrum-accordion-top-to-text-compact-small: 2px; + --spectrum-accordion-top-to-text-regular-small: 7px; + --spectrum-accordion-small-top-to-text-spacious: 12px; + --spectrum-accordion-top-to-text-compact-medium: 4px; + --spectrum-accordion-top-to-text-regular-medium: 9px; + --spectrum-accordion-top-to-text-spacious-medium: 14px; + --spectrum-accordion-top-to-text-compact-large: 7px; + --spectrum-accordion-top-to-text-regular-large: 12px; + --spectrum-accordion-top-to-text-spacious-large: 14px; + --spectrum-accordion-top-to-text-compact-extra-large: 7px; + --spectrum-accordion-top-to-text-regular-extra-large: 12px; + --spectrum-accordion-top-to-text-spacious-extra-large: 14px; + --spectrum-accordion-bottom-to-text-compact-small: 4px; + --spectrum-accordion-bottom-to-text-regular-small: 9px; + --spectrum-accordion-bottom-to-text-spacious-small: 14px; + --spectrum-accordion-bottom-to-text-compact-medium: 8px; + --spectrum-accordion-bottom-to-text-regular-medium: 13px; + --spectrum-accordion-bottom-to-text-spacious-medium: 18px; + --spectrum-accordion-bottom-to-text-compact-large: 9px; + --spectrum-accordion-bottom-to-text-regular-large: 14px; + --spectrum-accordion-bottom-to-text-spacious-large: 19px; + --spectrum-accordion-bottom-to-text-compact-extra-large: 10px; + --spectrum-accordion-bottom-to-text-regular-extra-large: 15px; + --spectrum-accordion-bottom-to-text-spacious-extra-large: 21px; + --spectrum-accordion-minimum-width: 250px; + --spectrum-accordion-disclosure-indicator-to-text: 0px; + --spectrum-accordion-edge-to-disclosure-indicator: 0px; + --spectrum-accordion-edge-to-text: 0px; + --spectrum-accordion-focus-indicator-gap: 0px; + --spectrum-accordion-content-area-top-to-content: 10px; + --spectrum-accordion-content-area-bottom-to-content: 20px; + --spectrum-color-handle-size: 20px; + --spectrum-color-handle-size-key-focus: 40px; + --spectrum-table-column-header-row-top-to-text-small: 10px; + --spectrum-table-column-header-row-top-to-text-medium: 9px; + --spectrum-table-column-header-row-top-to-text-large: 13px; + --spectrum-table-column-header-row-top-to-text-extra-large: 16px; + --spectrum-table-column-header-row-bottom-to-text-small: 11px; + --spectrum-table-column-header-row-bottom-to-text-medium: 10px; + --spectrum-table-column-header-row-bottom-to-text-large: 13px; + --spectrum-table-column-header-row-bottom-to-text-extra-large: 17px; + --spectrum-table-row-height-small-regular: 40px; + --spectrum-table-row-height-medium-regular: 50px; + --spectrum-table-row-height-large-regular: 60px; + --spectrum-table-row-height-extra-large-regular: 70px; + --spectrum-table-row-height-small-spacious: 50px; + --spectrum-table-row-height-medium-spacious: 60px; + --spectrum-table-row-height-large-spacious: 70px; + --spectrum-table-row-height-extra-large-spacious: 80px; + --spectrum-table-row-top-to-text-small-regular: 10px; + --spectrum-table-row-top-to-text-medium-regular: 14px; + --spectrum-table-row-top-to-text-large-regular: 18px; + --spectrum-table-row-top-to-text-extra-large-regular: 21px; + --spectrum-table-row-bottom-to-text-small-regular: 11px; + --spectrum-table-row-bottom-to-text-medium-regular: 15px; + --spectrum-table-row-bottom-to-text-large-regular: 18px; + --spectrum-table-row-bottom-to-text-extra-large-regular: 22px; + --spectrum-table-row-top-to-text-small-spacious: 15px; + --spectrum-table-row-top-to-text-medium-spacious: 18px; + --spectrum-table-row-top-to-text-large-spacious: 23px; + --spectrum-table-row-top-to-text-extra-large-spacious: 26px; + --spectrum-table-row-bottom-to-text-small-spacious: 16px; + --spectrum-table-row-bottom-to-text-medium-spacious: 18px; + --spectrum-table-row-bottom-to-text-large-spacious: 23px; + --spectrum-table-row-bottom-to-text-extra-large-spacious: 27px; + --spectrum-table-edge-to-content: 16px; + --spectrum-table-checkbox-to-text: 30px; + --spectrum-table-header-row-checkbox-to-top-small: 14px; + --spectrum-table-header-row-checkbox-to-top-medium: 13px; + --spectrum-table-header-row-checkbox-to-top-large: 17px; + --spectrum-table-header-row-checkbox-to-top-extra-large: 21px; + --spectrum-table-row-checkbox-to-top-small-compact: 9px; + --spectrum-table-row-checkbox-to-top-small-regular: 14px; + --spectrum-table-row-checkbox-to-top-small-spacious: 19px; + --spectrum-table-row-checkbox-to-top-medium-compact: 13px; + --spectrum-table-row-checkbox-to-top-medium-regular: 18px; + --spectrum-table-row-checkbox-to-top-medium-spacious: 23px; + --spectrum-table-row-checkbox-to-top-large-compact: 17px; + --spectrum-table-row-checkbox-to-top-large-regular: 22px; + --spectrum-table-row-checkbox-to-top-large-spacious: 27px; + --spectrum-table-row-checkbox-to-top-extra-large-compact: 21px; + --spectrum-table-row-checkbox-to-top-extra-large-regular: 26px; + --spectrum-table-row-checkbox-to-top-extra-large-spacious: 31px; + --spectrum-table-section-header-row-height-small: 30px; + --spectrum-table-section-header-row-height-medium: 40px; + --spectrum-table-section-header-row-height-large: 50px; + --spectrum-table-section-header-row-height-extra-large: 60px; + --spectrum-table-thumbnail-to-top-minimum-small-compact: 5px; + --spectrum-table-thumbnail-to-top-minimum-medium-compact: 6px; + --spectrum-table-thumbnail-to-top-minimum-large-compact: 9px; + --spectrum-table-thumbnail-to-top-minimum-extra-large-compact: 10px; + --spectrum-table-thumbnail-to-top-minimum-small-regular: 6px; + --spectrum-table-thumbnail-to-top-minimum-medium-regular: 9px; + --spectrum-table-thumbnail-to-top-minimum-large-regular: 10px; + --spectrum-table-thumbnail-to-top-minimum-extra-large-regular: 10px; + --spectrum-table-thumbnail-to-top-minimum-small-spacious: 9px; + --spectrum-table-thumbnail-to-top-minimum-medium-spacious: 10px; + --spectrum-table-thumbnail-to-top-minimum-large-spacious: 10px; + --spectrum-table-thumbnail-to-top-minimum-extra-large-spacious: 12px; + --spectrum-tab-item-to-tab-item-horizontal-small: 27px; + --spectrum-tab-item-to-tab-item-horizontal-medium: 30px; + --spectrum-tab-item-to-tab-item-horizontal-large: 33px; + --spectrum-tab-item-to-tab-item-horizontal-extra-large: 36px; + --spectrum-tab-item-to-tab-item-vertical-small: 5px; + --spectrum-tab-item-to-tab-item-vertical-medium: 5px; + --spectrum-tab-item-to-tab-item-vertical-large: 6px; + --spectrum-tab-item-to-tab-item-vertical-extra-large: 6px; + --spectrum-tab-item-start-to-edge-small: 13px; + --spectrum-tab-item-start-to-edge-medium: 15px; + --spectrum-tab-item-start-to-edge-large: 17px; + --spectrum-tab-item-start-to-edge-extra-large: 19px; + --spectrum-tab-item-top-to-text-small: 14px; + --spectrum-tab-item-bottom-to-text-small: 15px; + --spectrum-tab-item-top-to-text-medium: 18px; + --spectrum-tab-item-bottom-to-text-medium: 19px; + --spectrum-tab-item-top-to-text-large: 22px; + --spectrum-tab-item-bottom-to-text-large: 22px; + --spectrum-tab-item-top-to-text-extra-large: 25px; + --spectrum-tab-item-bottom-to-text-extra-large: 25px; + --spectrum-tab-item-top-to-text-compact-small: 5px; + --spectrum-tab-item-bottom-to-text-compact-small: 6px; + --spectrum-tab-item-top-to-text-compact-medium: 9px; + --spectrum-tab-item-bottom-to-text-compact-medium: 10px; + --spectrum-tab-item-top-to-text-compact-large: 12px; + --spectrum-tab-item-bottom-to-text-compact-large: 14px; + --spectrum-tab-item-top-to-text-compact-extra-large: 15px; + --spectrum-tab-item-bottom-to-text-compact-extra-large: 17px; + --spectrum-tab-item-top-to-workflow-icon-small: 15px; + --spectrum-tab-item-top-to-workflow-icon-medium: 19px; + --spectrum-tab-item-top-to-workflow-icon-large: 23px; + --spectrum-tab-item-top-to-workflow-icon-extra-large: 26px; + --spectrum-tab-item-top-to-workflow-icon-compact-small: 5px; + --spectrum-tab-item-top-to-workflow-icon-compact-medium: 9px; + --spectrum-tab-item-top-to-workflow-icon-compact-large: 13px; + --spectrum-tab-item-top-to-workflow-icon-compact-extra-large: 16px; + --spectrum-tab-item-focus-indicator-gap-small: 9px; + --spectrum-tab-item-focus-indicator-gap-medium: 10px; + --spectrum-tab-item-focus-indicator-gap-large: 11px; + --spectrum-tab-item-focus-indicator-gap-extra-large: 12px; + --spectrum-side-navigation-width: 240px; + --spectrum-side-navigation-minimum-width: 200px; + --spectrum-side-navigation-maximum-width: 300px; + --spectrum-side-navigation-second-level-edge-to-text: 30px; + --spectrum-side-navigation-third-level-edge-to-text: 45px; + --spectrum-side-navigation-with-icon-second-level-edge-to-text: 62px; + --spectrum-side-navigation-with-icon-third-level-edge-to-text: 77px; + --spectrum-side-navigation-item-to-item: 5px; + --spectrum-side-navigation-item-to-header: 20px; + --spectrum-side-navigation-bottom-to-text: 10px; + --spectrum-tray-top-to-content-area: 5px; + --spectrum-corner-radius-75: 2px; + --spectrum-corner-radius-100: 5px; + --spectrum-corner-radius-200: 10px; + --spectrum-drop-shadow-x: 0px; + --spectrum-drop-shadow-y: 2px; + --spectrum-drop-shadow-blur: 6px; + --spectrum-workflow-icon-size-50: 18px; + --spectrum-workflow-icon-size-75: 20px; + --spectrum-workflow-icon-size-100: 22px; + --spectrum-workflow-icon-size-200: 24px; + --spectrum-workflow-icon-size-300: 28px; + --spectrum-text-to-visual-50: 8px; + --spectrum-text-to-visual-75: 9px; + --spectrum-text-to-visual-100: 10px; + --spectrum-text-to-visual-200: 11px; + --spectrum-text-to-visual-300: 13px; + --spectrum-text-to-control-75: 11px; + --spectrum-text-to-control-100: 13px; + --spectrum-text-to-control-200: 14px; + --spectrum-text-to-control-300: 16px; + --spectrum-component-height-50: 26px; + --spectrum-component-height-75: 30px; + --spectrum-component-height-100: 40px; + --spectrum-component-height-200: 50px; + --spectrum-component-height-300: 60px; + --spectrum-component-height-400: 70px; + --spectrum-component-height-500: 80px; + --spectrum-component-pill-edge-to-visual-75: 13px; + --spectrum-component-pill-edge-to-visual-100: 17px; + --spectrum-component-pill-edge-to-visual-200: 22px; + --spectrum-component-pill-edge-to-visual-300: 27px; + --spectrum-component-pill-edge-to-visual-only-75: 5px; + --spectrum-component-pill-edge-to-visual-only-100: 9px; + --spectrum-component-pill-edge-to-visual-only-200: 13px; + --spectrum-component-pill-edge-to-visual-only-300: 16px; + --spectrum-component-pill-edge-to-text-75: 15px; + --spectrum-component-pill-edge-to-text-100: 20px; + --spectrum-component-pill-edge-to-text-200: 25px; + --spectrum-component-pill-edge-to-text-300: 30px; + --spectrum-component-edge-to-visual-50: 7px; + --spectrum-component-edge-to-visual-75: 9px; + --spectrum-component-edge-to-visual-100: 12px; + --spectrum-component-edge-to-visual-200: 16px; + --spectrum-component-edge-to-visual-300: 19px; + --spectrum-component-edge-to-visual-only-50: 4px; + --spectrum-component-edge-to-visual-only-75: 5px; + --spectrum-component-edge-to-visual-only-100: 9px; + --spectrum-component-edge-to-visual-only-200: 13px; + --spectrum-component-edge-to-visual-only-300: 16px; + --spectrum-component-edge-to-text-50: 10px; + --spectrum-component-edge-to-text-75: 11px; + --spectrum-component-edge-to-text-100: 15px; + --spectrum-component-edge-to-text-200: 19px; + --spectrum-component-edge-to-text-300: 22px; + --spectrum-component-top-to-workflow-icon-50: 4px; + --spectrum-component-top-to-workflow-icon-75: 5px; + --spectrum-component-top-to-workflow-icon-100: 9px; + --spectrum-component-top-to-workflow-icon-200: 13px; + --spectrum-component-top-to-workflow-icon-300: 16px; + --spectrum-component-top-to-text-50: 4px; + --spectrum-component-top-to-text-75: 5px; + --spectrum-component-top-to-text-100: 8px; + --spectrum-component-top-to-text-200: 12px; + --spectrum-component-top-to-text-300: 15px; + --spectrum-component-bottom-to-text-50: 6px; + --spectrum-component-bottom-to-text-75: 6px; + --spectrum-component-bottom-to-text-100: 11px; + --spectrum-component-bottom-to-text-200: 14px; + --spectrum-component-bottom-to-text-300: 18px; + --spectrum-component-to-menu-small: 7px; + --spectrum-component-to-menu-medium: 8px; + --spectrum-component-to-menu-large: 9px; + --spectrum-component-to-menu-extra-large: 10px; + --spectrum-field-edge-to-disclosure-icon-75: 9px; + --spectrum-field-edge-to-disclosure-icon-100: 13px; + --spectrum-field-edge-to-disclosure-icon-200: 17px; + --spectrum-field-edge-to-disclosure-icon-300: 22px; + --spectrum-field-end-edge-to-disclosure-icon-75: 9px; + --spectrum-field-end-edge-to-disclosure-icon-100: 13px; + --spectrum-field-end-edge-to-disclosure-icon-200: 17px; + --spectrum-field-end-edge-to-disclosure-icon-300: 22px; + --spectrum-field-top-to-disclosure-icon-75: 9px; + --spectrum-field-top-to-disclosure-icon-100: 13px; + --spectrum-field-top-to-disclosure-icon-200: 17px; + --spectrum-field-top-to-disclosure-icon-300: 22px; + --spectrum-field-top-to-alert-icon-small: 5px; + --spectrum-field-top-to-alert-icon-medium: 9px; + --spectrum-field-top-to-alert-icon-large: 13px; + --spectrum-field-top-to-alert-icon-extra-large: 16px; + --spectrum-field-top-to-validation-icon-small: 9px; + --spectrum-field-top-to-validation-icon-medium: 13px; + --spectrum-field-top-to-validation-icon-large: 17px; + --spectrum-field-top-to-validation-icon-extra-large: 22px; + --spectrum-field-top-to-progress-circle-small: 7px; + --spectrum-field-top-to-progress-circle-medium: 12px; + --spectrum-field-top-to-progress-circle-large: 17px; + --spectrum-field-top-to-progress-circle-extra-large: 22px; + --spectrum-field-edge-to-alert-icon-small: 11px; + --spectrum-field-edge-to-alert-icon-medium: 15px; + --spectrum-field-edge-to-alert-icon-large: 19px; + --spectrum-field-edge-to-alert-icon-extra-large: 22px; + --spectrum-field-edge-to-validation-icon-small: 11px; + --spectrum-field-edge-to-validation-icon-medium: 15px; + --spectrum-field-edge-to-validation-icon-large: 19px; + --spectrum-field-edge-to-validation-icon-extra-large: 22px; + --spectrum-field-text-to-alert-icon-small: 10px; + --spectrum-field-text-to-alert-icon-medium: 15px; + --spectrum-field-text-to-alert-icon-large: 19px; + --spectrum-field-text-to-alert-icon-extra-large: 22px; + --spectrum-field-text-to-validation-icon-small: 10px; + --spectrum-field-text-to-validation-icon-medium: 15px; + --spectrum-field-text-to-validation-icon-large: 19px; + --spectrum-field-text-to-validation-icon-extra-large: 22px; + --spectrum-field-width: 240px; + --spectrum-character-count-to-field-quiet-small: -4px; + --spectrum-character-count-to-field-quiet-medium: -4px; + --spectrum-character-count-to-field-quiet-large: -4px; + --spectrum-character-count-to-field-quiet-extra-large: -5px; + --spectrum-side-label-character-count-to-field: 15px; + --spectrum-side-label-character-count-top-margin-small: 5px; + --spectrum-side-label-character-count-top-margin-medium: 10px; + --spectrum-side-label-character-count-top-margin-large: 14px; + --spectrum-side-label-character-count-top-margin-extra-large: 18px; + --spectrum-disclosure-indicator-top-to-disclosure-icon-small: 9px; + --spectrum-disclosure-indicator-top-to-disclosure-icon-medium: 13px; + --spectrum-disclosure-indicator-top-to-disclosure-icon-large: 17px; + --spectrum-disclosure-indicator-top-to-disclosure-icon-extra-large: 22px; + --spectrum-navigational-indicator-top-to-back-icon-small: 9px; + --spectrum-navigational-indicator-top-to-back-icon-medium: 13px; + --spectrum-navigational-indicator-top-to-back-icon-large: 17px; + --spectrum-navigational-indicator-top-to-back-icon-extra-large: 22px; + --spectrum-color-control-track-width: 30px; + --spectrum-font-size-50: 13px; + --spectrum-font-size-75: 15px; + --spectrum-font-size-100: 17px; + --spectrum-font-size-200: 19px; + --spectrum-font-size-300: 22px; + --spectrum-font-size-400: 24px; + --spectrum-font-size-500: 27px; + --spectrum-font-size-600: 31px; + --spectrum-font-size-700: 34px; + --spectrum-font-size-800: 39px; + --spectrum-font-size-900: 44px; + --spectrum-font-size-1000: 49px; + --spectrum-font-size-1100: 55px; + --spectrum-font-size-1200: 62px; + --spectrum-font-size-1300: 70px; +} diff --git a/dist/css/light-vars.css b/dist/css/light-vars.css new file mode 100644 index 00000000000..b22e300e25c --- /dev/null +++ b/dist/css/light-vars.css @@ -0,0 +1,287 @@ +.spectrum--light, .spectrum--lightest { + --spectrum-overlay-opacity: 0.4; + --spectrum-drop-shadow-color: rgba(0, 0, 0, 0.15); + --spectrum-background-base-color: var(--spectrum-gray-100); + --spectrum-background-layer-1-color: var(--spectrum-gray-50); + --spectrum-background-layer-2-color: var(--spectrum-gray-25); + --spectrum-neutral-subdued-background-color-default: var(--spectrum-gray-700); + --spectrum-neutral-subdued-background-color-hover: var(--spectrum-gray-800); + --spectrum-neutral-subdued-background-color-down: var(--spectrum-gray-800); + --spectrum-neutral-subdued-background-color-key-focus: var(--spectrum-gray-800); + --spectrum-accent-background-color-default: var(--spectrum-accent-color-900); + --spectrum-accent-background-color-hover: var(--spectrum-accent-color-1000); + --spectrum-accent-background-color-down: var(--spectrum-accent-color-1000); + --spectrum-accent-background-color-key-focus: var(--spectrum-accent-color-1000); + --spectrum-informative-background-color-default: var(--spectrum-informative-color-900); + --spectrum-informative-background-color-hover: var(--spectrum-informative-color-1000); + --spectrum-informative-background-color-down: var(--spectrum-informative-color-1000); + --spectrum-informative-background-color-key-focus: var(--spectrum-informative-color-1000); + --spectrum-negative-background-color-default: var(--spectrum-negative-color-900); + --spectrum-negative-background-color-hover: var(--spectrum-negative-color-1000); + --spectrum-negative-background-color-down: var(--spectrum-negative-color-1000); + --spectrum-negative-background-color-key-focus: var(--spectrum-negative-color-1000); + --spectrum-positive-background-color-default: var(--spectrum-positive-color-900); + --spectrum-positive-background-color-hover: var(--spectrum-positive-color-1000); + --spectrum-positive-background-color-down: var(--spectrum-positive-color-1000); + --spectrum-positive-background-color-key-focus: var(--spectrum-positive-color-1000); + --spectrum-gray-background-color-default: var(--spectrum-gray-700); + --spectrum-red-background-color-default: var(--spectrum-red-900); + --spectrum-orange-background-color-default: var(--spectrum-orange-600); + --spectrum-yellow-background-color-default: var(--spectrum-yellow-400); + --spectrum-chartreuse-background-color-default: var(--spectrum-chartreuse-500); + --spectrum-celery-background-color-default: var(--spectrum-celery-600); + --spectrum-green-background-color-default: var(--spectrum-green-900); + --spectrum-seafoam-background-color-default: var(--spectrum-seafoam-900); + --spectrum-cyan-background-color-default: var(--spectrum-cyan-900); + --spectrum-blue-background-color-default: var(--spectrum-blue-900); + --spectrum-indigo-background-color-default: var(--spectrum-indigo-900); + --spectrum-purple-background-color-default: var(--spectrum-purple-900); + --spectrum-fuchsia-background-color-default: var(--spectrum-fuchsia-900); + --spectrum-magenta-background-color-default: var(--spectrum-magenta-900); + --spectrum-neutral-visual-color: var(--spectrum-gray-500); + --spectrum-accent-visual-color: var(--spectrum-accent-color-800); + --spectrum-informative-visual-color: var(--spectrum-informative-color-800); + --spectrum-negative-visual-color: var(--spectrum-negative-color-800); + --spectrum-notice-visual-color: var(--spectrum-notice-color-700); + --spectrum-positive-visual-color: var(--spectrum-positive-color-700); + --spectrum-gray-visual-color: var(--spectrum-gray-500); + --spectrum-red-visual-color: var(--spectrum-red-800); + --spectrum-orange-visual-color: var(--spectrum-orange-700); + --spectrum-yellow-visual-color: var(--spectrum-yellow-600); + --spectrum-chartreuse-visual-color: var(--spectrum-chartreuse-600); + --spectrum-celery-visual-color: var(--spectrum-celery-700); + --spectrum-green-visual-color: var(--spectrum-green-700); + --spectrum-seafoam-visual-color: var(--spectrum-seafoam-700); + --spectrum-cyan-visual-color: var(--spectrum-cyan-600); + --spectrum-blue-visual-color: var(--spectrum-blue-800); + --spectrum-indigo-visual-color: var(--spectrum-indigo-800); + --spectrum-purple-visual-color: var(--spectrum-purple-800); + --spectrum-fuchsia-visual-color: var(--spectrum-fuchsia-800); + --spectrum-magenta-visual-color: var(--spectrum-magenta-800); + --spectrum-opacity-checkerboard-square-dark: var(--spectrum-gray-200); + --spectrum-gray-25: rgb(255, 255, 255); + --spectrum-gray-50: rgb(248, 248, 248); + --spectrum-gray-75: rgb(243, 243, 243); + --spectrum-gray-100: rgb(233, 233, 233); + --spectrum-gray-200: rgb(225, 225, 225); + --spectrum-gray-300: rgb(218, 218, 218); + --spectrum-gray-400: rgb(198, 198, 198); + --spectrum-gray-500: rgb(143, 143, 143); + --spectrum-gray-600: rgb(113, 113, 113); + --spectrum-gray-700: rgb(80, 80, 80); + --spectrum-gray-800: rgb(41, 41, 41); + --spectrum-gray-900: rgb(19, 19, 19); + --spectrum-gray-1000: rgb(0, 0, 0); + --spectrum-blue-100: rgb(245, 249, 255); + --spectrum-blue-200: rgb(229, 240, 254); + --spectrum-blue-300: rgb(203, 226, 254); + --spectrum-blue-400: rgb(176, 209, 253); + --spectrum-blue-500: rgb(147, 189, 252); + --spectrum-blue-600: rgb(122, 167, 253); + --spectrum-blue-700: rgb(100, 144, 255); + --spectrum-blue-800: rgb(80, 123, 255); + --spectrum-blue-900: rgb(59, 99, 251); + --spectrum-blue-1000: rgb(39, 77, 234); + --spectrum-blue-1100: rgb(29, 62, 207); + --spectrum-blue-1200: rgb(21, 50, 173); + --spectrum-blue-1300: rgb(16, 40, 140); + --spectrum-blue-1400: rgb(12, 31, 105); + --spectrum-blue-1500: rgb(14, 24, 67); + --spectrum-blue-1600: rgb(7, 11, 30); + --spectrum-red-100: rgb(255, 246, 245); + --spectrum-red-200: rgb(255, 235, 232); + --spectrum-red-300: rgb(255, 214, 209); + --spectrum-red-400: rgb(255, 192, 184); + --spectrum-red-500: rgb(255, 163, 152); + --spectrum-red-600: rgb(255, 132, 118); + --spectrum-red-700: rgb(255, 95, 76); + --spectrum-red-800: rgb(247, 59, 38); + --spectrum-red-900: rgb(215, 50, 32); + --spectrum-red-1000: rgb(183, 40, 24); + --spectrum-red-1100: rgb(156, 33, 19); + --spectrum-red-1200: rgb(129, 27, 14); + --spectrum-red-1300: rgb(104, 21, 10); + --spectrum-red-1400: rgb(80, 16, 6); + --spectrum-red-1500: rgb(59, 11, 4); + --spectrum-red-1600: rgb(29, 5, 2); + --spectrum-orange-100: rgb(255, 246, 231); + --spectrum-orange-200: rgb(255, 238, 210); + --spectrum-orange-300: rgb(255, 218, 158); + --spectrum-orange-400: rgb(255, 197, 103); + --spectrum-orange-500: rgb(255, 169, 33); + --spectrum-orange-600: rgb(255, 137, 0); + --spectrum-orange-700: rgb(239, 112, 0); + --spectrum-orange-800: rgb(218, 95, 0); + --spectrum-orange-900: rgb(193, 78, 0); + --spectrum-orange-1000: rgb(167, 62, 0); + --spectrum-orange-1100: rgb(144, 51, 0); + --spectrum-orange-1200: rgb(118, 41, 0); + --spectrum-orange-1300: rgb(95, 32, 0); + --spectrum-orange-1400: rgb(73, 24, 0); + --spectrum-orange-1500: rgb(52, 18, 0); + --spectrum-orange-1600: rgb(25, 8, 0); + --spectrum-yellow-100: rgb(255, 248, 204); + --spectrum-yellow-200: rgb(255, 241, 151); + --spectrum-yellow-300: rgb(255, 222, 44); + --spectrum-yellow-400: rgb(247, 203, 0); + --spectrum-yellow-500: rgb(233, 179, 0); + --spectrum-yellow-600: rgb(217, 158, 0); + --spectrum-yellow-700: rgb(199, 137, 0); + --spectrum-yellow-800: rgb(180, 119, 0); + --spectrum-yellow-900: rgb(158, 102, 0); + --spectrum-yellow-1000: rgb(134, 85, 0); + --spectrum-yellow-1100: rgb(114, 72, 0); + --spectrum-yellow-1200: rgb(93, 59, 0); + --spectrum-yellow-1300: rgb(75, 47, 0); + --spectrum-yellow-1400: rgb(56, 35, 0); + --spectrum-yellow-1500: rgb(40, 25, 0); + --spectrum-yellow-1600: rgb(18, 11, 0); + --spectrum-chartreuse-100: rgb(246, 251, 222); + --spectrum-chartreuse-200: rgb(234, 246, 173); + --spectrum-chartreuse-300: rgb(208, 236, 70); + --spectrum-chartreuse-400: rgb(184, 221, 0); + --spectrum-chartreuse-500: rgb(166, 200, 0); + --spectrum-chartreuse-600: rgb(149, 180, 0); + --spectrum-chartreuse-700: rgb(133, 159, 0); + --spectrum-chartreuse-800: rgb(118, 141, 0); + --spectrum-chartreuse-900: rgb(102, 122, 0); + --spectrum-chartreuse-1000: rgb(86, 103, 0); + --spectrum-chartreuse-1100: rgb(73, 87, 0); + --spectrum-chartreuse-1200: rgb(60, 71, 0); + --spectrum-chartreuse-1300: rgb(47, 57, 0); + --spectrum-chartreuse-1400: rgb(35, 43, 0); + --spectrum-chartreuse-1500: rgb(25, 30, 0); + --spectrum-chartreuse-1600: rgb(11, 14, 0); + --spectrum-celery-100: rgb(235, 255, 220); + --spectrum-celery-200: rgb(202, 255, 164); + --spectrum-celery-300: rgb(155, 246, 90); + --spectrum-celery-400: rgb(131, 230, 60); + --spectrum-celery-500: rgb(113, 210, 44); + --spectrum-celery-600: rgb(99, 189, 34); + --spectrum-celery-700: rgb(85, 168, 27); + --spectrum-celery-800: rgb(75, 149, 21); + --spectrum-celery-900: rgb(64, 129, 17); + --spectrum-celery-1000: rgb(52, 109, 12); + --spectrum-celery-1100: rgb(44, 92, 9); + --spectrum-celery-1200: rgb(35, 75, 6); + --spectrum-celery-1300: rgb(27, 60, 3); + --spectrum-celery-1400: rgb(19, 46, 0); + --spectrum-celery-1500: rgb(12, 33, 0); + --spectrum-celery-1600: rgb(4, 15, 0); + --spectrum-green-100: rgb(237, 252, 241); + --spectrum-green-200: rgb(215, 247, 225); + --spectrum-green-300: rgb(173, 238, 197); + --spectrum-green-400: rgb(113, 229, 165); + --spectrum-green-500: rgb(48, 212, 128); + --spectrum-green-600: rgb(23, 192, 108); + --spectrum-green-700: rgb(13, 171, 96); + --spectrum-green-800: rgb(8, 151, 86); + --spectrum-green-900: rgb(5, 131, 77); + --spectrum-green-1000: rgb(3, 110, 68); + --spectrum-green-1100: rgb(2, 93, 60); + --spectrum-green-1200: rgb(1, 76, 52); + --spectrum-green-1300: rgb(0, 61, 44); + --spectrum-green-1400: rgb(0, 46, 34); + --spectrum-green-1500: rgb(0, 33, 25); + --spectrum-green-1600: rgb(0, 15, 12); + --spectrum-seafoam-100: rgb(226, 252, 253); + --spectrum-seafoam-200: rgb(202, 248, 250); + --spectrum-seafoam-300: rgb(138, 239, 242); + --spectrum-seafoam-400: rgb(86, 226, 231); + --spectrum-seafoam-500: rgb(60, 206, 211); + --spectrum-seafoam-600: rgb(45, 185, 190); + --spectrum-seafoam-700: rgb(35, 164, 169); + --spectrum-seafoam-800: rgb(27, 146, 151); + --spectrum-seafoam-900: rgb(20, 126, 131); + --spectrum-seafoam-1000: rgb(13, 106, 111); + --spectrum-seafoam-1100: rgb(8, 90, 95); + --spectrum-seafoam-1200: rgb(3, 74, 79); + --spectrum-seafoam-1300: rgb(0, 59, 63); + --spectrum-seafoam-1400: rgb(0, 45, 48); + --spectrum-seafoam-1500: rgb(0, 32, 35); + --spectrum-seafoam-1600: rgb(0, 15, 17); + --spectrum-cyan-100: rgb(238, 250, 254); + --spectrum-cyan-200: rgb(217, 244, 253); + --spectrum-cyan-300: rgb(181, 230, 252); + --spectrum-cyan-400: rgb(146, 216, 255); + --spectrum-cyan-500: rgb(99, 196, 255); + --spectrum-cyan-600: rgb(60, 175, 255); + --spectrum-cyan-700: rgb(34, 155, 239); + --spectrum-cyan-800: rgb(21, 138, 212); + --spectrum-cyan-900: rgb(11, 120, 179); + --spectrum-cyan-1000: rgb(4, 102, 145); + --spectrum-cyan-1100: rgb(0, 87, 121); + --spectrum-cyan-1200: rgb(0, 71, 98); + --spectrum-cyan-1300: rgb(0, 57, 78); + --spectrum-cyan-1400: rgb(0, 43, 59); + --spectrum-cyan-1500: rgb(0, 31, 43); + --spectrum-cyan-1600: rgb(0, 14, 20); + --spectrum-indigo-100: rgb(247, 248, 255); + --spectrum-indigo-200: rgb(235, 238, 255); + --spectrum-indigo-300: rgb(214, 221, 255); + --spectrum-indigo-400: rgb(195, 204, 255); + --spectrum-indigo-500: rgb(171, 182, 255); + --spectrum-indigo-600: rgb(152, 160, 255); + --spectrum-indigo-700: rgb(136, 136, 254); + --spectrum-indigo-800: rgb(125, 112, 254); + --spectrum-indigo-900: rgb(113, 84, 250); + --spectrum-indigo-1000: rgb(99, 56, 238); + --spectrum-indigo-1100: rgb(84, 36, 219); + --spectrum-indigo-1200: rgb(69, 19, 191); + --spectrum-indigo-1300: rgb(55, 6, 160); + --spectrum-indigo-1400: rgb(42, 0, 129); + --spectrum-indigo-1500: rgb(31, 0, 98); + --spectrum-indigo-1600: rgb(17, 0, 54); + --spectrum-purple-100: rgb(251, 247, 254); + --spectrum-purple-200: rgb(245, 237, 252); + --spectrum-purple-300: rgb(234, 216, 249); + --spectrum-purple-400: rgb(223, 196, 247); + --spectrum-purple-500: rgb(210, 171, 243); + --spectrum-purple-600: rgb(196, 147, 240); + --spectrum-purple-700: rgb(183, 122, 236); + --spectrum-purple-800: rgb(169, 98, 232); + --spectrum-purple-900: rgb(153, 71, 226); + --spectrum-purple-1000: rgb(134, 40, 217); + --spectrum-purple-1100: rgb(115, 13, 204); + --spectrum-purple-1200: rgb(93, 0, 177); + --spectrum-purple-1300: rgb(75, 0, 144); + --spectrum-purple-1400: rgb(59, 0, 111); + --spectrum-purple-1500: rgb(44, 0, 84); + --spectrum-purple-1600: rgb(23, 0, 45); + --spectrum-fuchsia-100: rgb(255, 245, 255); + --spectrum-fuchsia-200: rgb(255, 232, 254); + --spectrum-fuchsia-300: rgb(255, 208, 254); + --spectrum-fuchsia-400: rgb(255, 182, 254); + --spectrum-fuchsia-500: rgb(255, 149, 252); + --spectrum-fuchsia-600: rgb(255, 109, 249); + --spectrum-fuchsia-700: rgb(243, 75, 231); + --spectrum-fuchsia-800: rgb(217, 66, 204); + --spectrum-fuchsia-900: rgb(192, 50, 180); + --spectrum-fuchsia-1000: rgb(166, 34, 157); + --spectrum-fuchsia-1100: rgb(144, 21, 137); + --spectrum-fuchsia-1200: rgb(120, 9, 116); + --spectrum-fuchsia-1300: rgb(99, 1, 96); + --spectrum-fuchsia-1400: rgb(77, 0, 75); + --spectrum-fuchsia-1500: rgb(57, 0, 56); + --spectrum-fuchsia-1600: rgb(31, 0, 30); + --spectrum-magenta-100: rgb(255, 245, 248); + --spectrum-magenta-200: rgb(255, 235, 242); + --spectrum-magenta-300: rgb(255, 211, 226); + --spectrum-magenta-400: rgb(255, 189, 212); + --spectrum-magenta-500: rgb(255, 158, 192); + --spectrum-magenta-600: rgb(255, 126, 172); + --spectrum-magenta-700: rgb(255, 86, 145); + --spectrum-magenta-800: rgb(249, 41, 111); + --spectrum-magenta-900: rgb(222, 20, 89); + --spectrum-magenta-1000: rgb(190, 9, 73); + --spectrum-magenta-1100: rgb(163, 5, 62); + --spectrum-magenta-1200: rgb(136, 0, 51); + --spectrum-magenta-1300: rgb(111, 0, 40); + --spectrum-magenta-1400: rgb(86, 0, 30); + --spectrum-magenta-1500: rgb(64, 0, 22); + --spectrum-magenta-1600: rgb(35, 0, 12); + --spectrum-icon-color-blue-primary-default: var(--spectrum-blue-900); + --spectrum-icon-color-green-primary-default: var(--spectrum-green-900); + --spectrum-icon-color-red-primary-default: var(--spectrum-red-900); + --spectrum-icon-color-yellow-primary-default: var(--spectrum-yellow-400); +} diff --git a/dist/css/medium-vars.css b/dist/css/medium-vars.css new file mode 100644 index 00000000000..cda5debd474 --- /dev/null +++ b/dist/css/medium-vars.css @@ -0,0 +1,505 @@ +.spectrum--medium { + --spectrum-checkbox-control-size-small: 12px; + --spectrum-checkbox-control-size-medium: 14px; + --spectrum-checkbox-control-size-large: 16px; + --spectrum-checkbox-control-size-extra-large: 18px; + --spectrum-checkbox-top-to-control-small: 6px; + --spectrum-checkbox-top-to-control-medium: 9px; + --spectrum-checkbox-top-to-control-large: 12px; + --spectrum-checkbox-top-to-control-extra-large: 15px; + --spectrum-switch-control-width-small: 23px; + --spectrum-switch-control-width-medium: 26px; + --spectrum-switch-control-width-large: 29px; + --spectrum-switch-control-width-extra-large: 33px; + --spectrum-switch-control-height-small: 12px; + --spectrum-switch-control-height-medium: 14px; + --spectrum-switch-control-height-large: 16px; + --spectrum-switch-control-height-extra-large: 18px; + --spectrum-switch-top-to-control-small: 6px; + --spectrum-switch-top-to-control-medium: 9px; + --spectrum-switch-top-to-control-large: 12px; + --spectrum-switch-top-to-control-extra-large: 15px; + --spectrum-radio-button-control-size-small: 12px; + --spectrum-radio-button-control-size-medium: 14px; + --spectrum-radio-button-control-size-large: 16px; + --spectrum-radio-button-control-size-extra-large: 18px; + --spectrum-radio-button-top-to-control-small: 6px; + --spectrum-radio-button-top-to-control-medium: 9px; + --spectrum-radio-button-top-to-control-large: 12px; + --spectrum-radio-button-top-to-control-extra-large: 15px; + --spectrum-field-label-text-to-asterisk-small: 4px; + --spectrum-field-label-text-to-asterisk-medium: 4px; + --spectrum-field-label-text-to-asterisk-large: 5px; + --spectrum-field-label-text-to-asterisk-extra-large: 5px; + --spectrum-field-label-top-to-asterisk-small: 8px; + --spectrum-field-label-top-to-asterisk-medium: 12px; + --spectrum-field-label-top-to-asterisk-large: 15px; + --spectrum-field-label-top-to-asterisk-extra-large: 19px; + --spectrum-field-label-top-margin-small: 0px; + --spectrum-field-label-top-margin-medium: 4px; + --spectrum-field-label-top-margin-large: 5px; + --spectrum-field-label-top-margin-extra-large: 5px; + --spectrum-field-label-to-component-quiet-small: -8px; + --spectrum-field-label-to-component-quiet-medium: -8px; + --spectrum-field-label-to-component-quiet-large: -12px; + --spectrum-field-label-to-component-quiet-extra-large: -15px; + --spectrum-help-text-top-to-workflow-icon-small: 4px; + --spectrum-help-text-top-to-workflow-icon-medium: 3px; + --spectrum-help-text-top-to-workflow-icon-large: 6px; + --spectrum-help-text-top-to-workflow-icon-extra-large: 9px; + --spectrum-status-light-dot-size-small: 8px; + --spectrum-status-light-dot-size-medium: 8px; + --spectrum-status-light-dot-size-large: 10px; + --spectrum-status-light-dot-size-extra-large: 10px; + --spectrum-status-light-top-to-dot-small: 8px; + --spectrum-status-light-top-to-dot-medium: 12px; + --spectrum-status-light-top-to-dot-large: 15px; + --spectrum-status-light-top-to-dot-extra-large: 19px; + --spectrum-action-button-edge-to-hold-icon-extra-small: 3px; + --spectrum-action-button-edge-to-hold-icon-small: 3px; + --spectrum-action-button-edge-to-hold-icon-medium: 4px; + --spectrum-action-button-edge-to-hold-icon-large: 5px; + --spectrum-action-button-edge-to-hold-icon-extra-large: 6px; + --spectrum-tooltip-tip-width: 8px; + --spectrum-tooltip-tip-height: 4px; + --spectrum-tooltip-maximum-width: 160px; + --spectrum-progress-circle-size-small: 16px; + --spectrum-progress-circle-size-medium: 32px; + --spectrum-progress-circle-size-large: 64px; + --spectrum-progress-circle-thickness-small: 2px; + --spectrum-progress-circle-thickness-medium: 3px; + --spectrum-progress-circle-thickness-large: 4px; + --spectrum-toast-height: 48px; + --spectrum-toast-maximum-width: 336px; + --spectrum-toast-top-to-workflow-icon: 15px; + --spectrum-toast-top-to-text: 14px; + --spectrum-toast-bottom-to-text: 17px; + --spectrum-action-bar-height: 48px; + --spectrum-action-bar-top-to-item-counter: 14px; + --spectrum-swatch-size-extra-small: 16px; + --spectrum-swatch-size-small: 24px; + --spectrum-swatch-size-medium: 32px; + --spectrum-swatch-size-large: 40px; + --spectrum-progress-bar-thickness-small: 4px; + --spectrum-progress-bar-thickness-medium: 6px; + --spectrum-progress-bar-thickness-large: 8px; + --spectrum-progress-bar-thickness-extra-large: 10px; + --spectrum-meter-width: 192px; + --spectrum-meter-thickness-small: 4px; + --spectrum-meter-thickness-large: 6px; + --spectrum-tag-top-to-avatar-small: 4px; + --spectrum-tag-top-to-avatar-medium: 6px; + --spectrum-tag-top-to-avatar-large: 9px; + --spectrum-tag-top-to-cross-icon-small: 8px; + --spectrum-tag-top-to-cross-icon-medium: 12px; + --spectrum-tag-top-to-cross-icon-large: 15px; + --spectrum-popover-top-to-content-area: 4px; + --spectrum-menu-item-edge-to-content-not-selected-small: 28px; + --spectrum-menu-item-edge-to-content-not-selected-medium: 32px; + --spectrum-menu-item-edge-to-content-not-selected-large: 38px; + --spectrum-menu-item-edge-to-content-not-selected-extra-large: 45px; + --spectrum-menu-item-top-to-disclosure-icon-small: 7px; + --spectrum-menu-item-top-to-disclosure-icon-medium: 11px; + --spectrum-menu-item-top-to-disclosure-icon-large: 14px; + --spectrum-menu-item-top-to-disclosure-icon-extra-large: 17px; + --spectrum-menu-item-top-to-selected-icon-small: 7px; + --spectrum-menu-item-top-to-selected-icon-medium: 11px; + --spectrum-menu-item-top-to-selected-icon-large: 14px; + --spectrum-menu-item-top-to-selected-icon-extra-large: 17px; + --spectrum-slider-control-height-small: 14px; + --spectrum-slider-control-height-medium: 16px; + --spectrum-slider-control-height-large: 18px; + --spectrum-slider-control-height-extra-large: 20px; + --spectrum-slider-handle-size-small: 14px; + --spectrum-slider-handle-size-medium: 16px; + --spectrum-slider-handle-size-large: 18px; + --spectrum-slider-handle-size-extra-large: 20px; + --spectrum-slider-handle-border-width-down-small: 5px; + --spectrum-slider-handle-border-width-down-medium: 6px; + --spectrum-slider-handle-border-width-down-large: 7px; + --spectrum-slider-handle-border-width-down-extra-large: 8px; + --spectrum-slider-bottom-to-handle-small: 5px; + --spectrum-slider-bottom-to-handle-medium: 8px; + --spectrum-slider-bottom-to-handle-large: 11px; + --spectrum-slider-bottom-to-handle-extra-large: 14px; + --spectrum-slider-control-to-field-label-small: 5px; + --spectrum-slider-control-to-field-label-medium: 8px; + --spectrum-slider-control-to-field-label-large: 11px; + --spectrum-slider-control-to-field-label-extra-large: 14px; + --spectrum-picker-visual-to-disclosure-icon-small: 7px; + --spectrum-picker-visual-to-disclosure-icon-medium: 8px; + --spectrum-picker-visual-to-disclosure-icon-large: 9px; + --spectrum-picker-visual-to-disclosure-icon-extra-large: 10px; + --spectrum-text-area-minimum-width: 112px; + --spectrum-text-area-minimum-height: 56px; + --spectrum-combo-box-visual-to-field-button-small: 7px; + --spectrum-combo-box-visual-to-field-button-medium: 8px; + --spectrum-combo-box-visual-to-field-button-large: 9px; + --spectrum-combo-box-visual-to-field-button-extra-large: 10px; + --spectrum-thumbnail-size-50: 16px; + --spectrum-thumbnail-size-75: 18px; + --spectrum-thumbnail-size-100: 20px; + --spectrum-thumbnail-size-200: 22px; + --spectrum-thumbnail-size-300: 26px; + --spectrum-thumbnail-size-400: 28px; + --spectrum-thumbnail-size-500: 32px; + --spectrum-thumbnail-size-600: 36px; + --spectrum-thumbnail-size-700: 40px; + --spectrum-thumbnail-size-800: 44px; + --spectrum-thumbnail-size-900: 50px; + --spectrum-thumbnail-size-1000: 56px; + --spectrum-alert-dialog-title-size: var(--spectrum-heading-size-s); + --spectrum-alert-dialog-description-size: var(--spectrum-body-size-s); + --spectrum-opacity-checkerboard-square-size: 8px; + --spectrum-contextual-help-title-size: var(--spectrum-heading-size-xs); + --spectrum-contextual-help-body-size: var(--spectrum-heading-size-s); + --spectrum-breadcrumbs-height-multiline: 72px; + --spectrum-breadcrumbs-top-to-text: 13px; + --spectrum-breadcrumbs-top-to-text-compact: 11px; + --spectrum-breadcrumbs-top-to-text-multiline: 12px; + --spectrum-breadcrumbs-bottom-to-text: 15px; + --spectrum-breadcrumbs-bottom-to-text-compact: 12px; + --spectrum-breadcrumbs-bottom-to-text-multiline: 9px; + --spectrum-breadcrumbs-start-edge-to-text: 8px; + --spectrum-breadcrumbs-top-text-to-bottom-text: 9px; + --spectrum-breadcrumbs-top-to-separator-icon: 19px; + --spectrum-breadcrumbs-top-to-separator-icon-compact: 15px; + --spectrum-breadcrumbs-top-to-separator-icon-multiline: 15px; + --spectrum-breadcrumbs-separator-icon-to-bottom-text-multiline: 11px; + --spectrum-breadcrumbs-top-to-truncated-menu: 8px; + --spectrum-breadcrumbs-top-to-truncated-menu-compact: 4px; + --spectrum-avatar-size-50: 16px; + --spectrum-avatar-size-75: 18px; + --spectrum-avatar-size-100: 20px; + --spectrum-avatar-size-200: 22px; + --spectrum-avatar-size-300: 26px; + --spectrum-avatar-size-400: 28px; + --spectrum-avatar-size-500: 32px; + --spectrum-avatar-size-600: 36px; + --spectrum-avatar-size-700: 40px; + --spectrum-alert-banner-minimum-height: 48px; + --spectrum-alert-banner-width: 832px; + --spectrum-alert-banner-top-to-workflow-icon: 15px; + --spectrum-alert-banner-top-to-text: 14px; + --spectrum-alert-banner-bottom-to-text: 17px; + --spectrum-rating-indicator-width: 18px; + --spectrum-rating-indicator-to-icon: 4px; + --spectrum-color-area-width: 192px; + --spectrum-color-area-minimum-width: 64px; + --spectrum-color-area-height: 192px; + --spectrum-color-area-minimum-height: 64px; + --spectrum-color-wheel-width: 192px; + --spectrum-color-wheel-minimum-width: 175px; + --spectrum-color-slider-length: 192px; + --spectrum-color-slider-minimum-length: 80px; + --spectrum-illustrated-message-title-size: var(--spectrum-heading-size-m); + --spectrum-illustrated-message-cjk-title-size: var(--spectrum-heading-cjk-size-m); + --spectrum-illustrated-message-body-size: var(--spectrum-body-size-s); + --spectrum-coach-mark-width: 296px; + --spectrum-coach-mark-minimum-width: 296px; + --spectrum-coach-mark-maximum-width: 380px; + --spectrum-coach-mark-edge-to-content: var(--spectrum-spacing-400); + --spectrum-coach-mark-pagination-text-to-bottom-edge: 33px; + --spectrum-coach-mark-media-height: 222px; + --spectrum-coach-mark-media-minimum-height: 166px; + --spectrum-coach-mark-title-size: var(--spectrum-heading-size-xs); + --spectrum-coach-mark-body-size: var(--spectrum-body-size-s); + --spectrum-coach-mark-pagination-body-size: var(--spectrum-body-size-s); + --spectrum-accordion-top-to-text-compact-small: 2px; + --spectrum-accordion-top-to-text-regular-small: 5px; + --spectrum-accordion-small-top-to-text-spacious: 9px; + --spectrum-accordion-top-to-text-compact-medium: 4px; + --spectrum-accordion-top-to-text-regular-medium: 8px; + --spectrum-accordion-top-to-text-spacious-medium: 12px; + --spectrum-accordion-top-to-text-compact-large: 4px; + --spectrum-accordion-top-to-text-regular-large: 9px; + --spectrum-accordion-top-to-text-spacious-large: 12px; + --spectrum-accordion-top-to-text-compact-extra-large: 5px; + --spectrum-accordion-top-to-text-regular-extra-large: 9px; + --spectrum-accordion-top-to-text-spacious-extra-large: 13px; + --spectrum-accordion-bottom-to-text-compact-small: 2px; + --spectrum-accordion-bottom-to-text-regular-small: 7px; + --spectrum-accordion-bottom-to-text-spacious-small: 11px; + --spectrum-accordion-bottom-to-text-compact-medium: 5px; + --spectrum-accordion-bottom-to-text-regular-medium: 9px; + --spectrum-accordion-bottom-to-text-spacious-medium: 13px; + --spectrum-accordion-bottom-to-text-compact-large: 8px; + --spectrum-accordion-bottom-to-text-regular-large: 11px; + --spectrum-accordion-bottom-to-text-spacious-large: 16px; + --spectrum-accordion-bottom-to-text-compact-extra-large: 8px; + --spectrum-accordion-bottom-to-text-regular-extra-large: 12px; + --spectrum-accordion-bottom-to-text-spacious-extra-large: 16px; + --spectrum-accordion-minimum-width: 200px; + --spectrum-accordion-disclosure-indicator-to-text: 0px; + --spectrum-accordion-edge-to-disclosure-indicator: 0px; + --spectrum-accordion-edge-to-text: 0px; + --spectrum-accordion-focus-indicator-gap: 0px; + --spectrum-accordion-content-area-top-to-content: 8px; + --spectrum-accordion-content-area-bottom-to-content: 16px; + --spectrum-color-handle-size: 16px; + --spectrum-color-handle-size-key-focus: 32px; + --spectrum-table-column-header-row-top-to-text-small: 8px; + --spectrum-table-column-header-row-top-to-text-medium: 7px; + --spectrum-table-column-header-row-top-to-text-large: 10px; + --spectrum-table-column-header-row-top-to-text-extra-large: 13px; + --spectrum-table-column-header-row-bottom-to-text-small: 9px; + --spectrum-table-column-header-row-bottom-to-text-medium: 8px; + --spectrum-table-column-header-row-bottom-to-text-large: 10px; + --spectrum-table-column-header-row-bottom-to-text-extra-large: 13px; + --spectrum-table-row-height-small-regular: 32px; + --spectrum-table-row-height-medium-regular: 40px; + --spectrum-table-row-height-large-regular: 48px; + --spectrum-table-row-height-extra-large-regular: 56px; + --spectrum-table-row-height-small-spacious: 40px; + --spectrum-table-row-height-medium-spacious: 48px; + --spectrum-table-row-height-large-spacious: 56px; + --spectrum-table-row-height-extra-large-spacious: 64px; + --spectrum-table-row-top-to-text-small-regular: 8px; + --spectrum-table-row-top-to-text-medium-regular: 11px; + --spectrum-table-row-top-to-text-large-regular: 14px; + --spectrum-table-row-top-to-text-extra-large-regular: 17px; + --spectrum-table-row-bottom-to-text-small-regular: 9px; + --spectrum-table-row-bottom-to-text-medium-regular: 12px; + --spectrum-table-row-bottom-to-text-large-regular: 14px; + --spectrum-table-row-bottom-to-text-extra-large-regular: 17px; + --spectrum-table-row-top-to-text-small-spacious: 12px; + --spectrum-table-row-top-to-text-medium-spacious: 15px; + --spectrum-table-row-top-to-text-large-spacious: 18px; + --spectrum-table-row-top-to-text-extra-large-spacious: 21px; + --spectrum-table-row-bottom-to-text-small-spacious: 13px; + --spectrum-table-row-bottom-to-text-medium-spacious: 16px; + --spectrum-table-row-bottom-to-text-large-spacious: 18px; + --spectrum-table-row-bottom-to-text-extra-large-spacious: 21px; + --spectrum-table-edge-to-content: 16px; + --spectrum-table-checkbox-to-text: 24px; + --spectrum-table-header-row-checkbox-to-top-small: 10px; + --spectrum-table-header-row-checkbox-to-top-medium: 9px; + --spectrum-table-header-row-checkbox-to-top-large: 12px; + --spectrum-table-header-row-checkbox-to-top-extra-large: 15px; + --spectrum-table-row-checkbox-to-top-small-compact: 6px; + --spectrum-table-row-checkbox-to-top-small-regular: 10px; + --spectrum-table-row-checkbox-to-top-small-spacious: 14px; + --spectrum-table-row-checkbox-to-top-medium-compact: 9px; + --spectrum-table-row-checkbox-to-top-medium-regular: 13px; + --spectrum-table-row-checkbox-to-top-medium-spacious: 17px; + --spectrum-table-row-checkbox-to-top-large-compact: 12px; + --spectrum-table-row-checkbox-to-top-large-regular: 16px; + --spectrum-table-row-checkbox-to-top-large-spacious: 20px; + --spectrum-table-row-checkbox-to-top-extra-large-compact: 15px; + --spectrum-table-row-checkbox-to-top-extra-large-regular: 19px; + --spectrum-table-row-checkbox-to-top-extra-large-spacious: 23px; + --spectrum-table-section-header-row-height-small: 24px; + --spectrum-table-section-header-row-height-medium: 32px; + --spectrum-table-section-header-row-height-large: 40px; + --spectrum-table-section-header-row-height-extra-large: 48px; + --spectrum-table-thumbnail-to-top-minimum-small-compact: 4px; + --spectrum-table-thumbnail-to-top-minimum-medium-compact: 5px; + --spectrum-table-thumbnail-to-top-minimum-large-compact: 7px; + --spectrum-table-thumbnail-to-top-minimum-extra-large-compact: 8px; + --spectrum-table-thumbnail-to-top-minimum-small-regular: 5px; + --spectrum-table-thumbnail-to-top-minimum-medium-regular: 7px; + --spectrum-table-thumbnail-to-top-minimum-large-regular: 8px; + --spectrum-table-thumbnail-to-top-minimum-extra-large-regular: 8px; + --spectrum-table-thumbnail-to-top-minimum-small-spacious: 7px; + --spectrum-table-thumbnail-to-top-minimum-medium-spacious: 8px; + --spectrum-table-thumbnail-to-top-minimum-large-spacious: 8px; + --spectrum-table-thumbnail-to-top-minimum-extra-large-spacious: 10px; + --spectrum-tab-item-to-tab-item-horizontal-small: 21px; + --spectrum-tab-item-to-tab-item-horizontal-medium: 24px; + --spectrum-tab-item-to-tab-item-horizontal-large: 27px; + --spectrum-tab-item-to-tab-item-horizontal-extra-large: 30px; + --spectrum-tab-item-to-tab-item-vertical-small: 4px; + --spectrum-tab-item-to-tab-item-vertical-medium: 4px; + --spectrum-tab-item-to-tab-item-vertical-large: 5px; + --spectrum-tab-item-to-tab-item-vertical-extra-large: 5px; + --spectrum-tab-item-start-to-edge-small: 12px; + --spectrum-tab-item-start-to-edge-medium: 12px; + --spectrum-tab-item-start-to-edge-large: 13px; + --spectrum-tab-item-start-to-edge-extra-large: 13px; + --spectrum-tab-item-top-to-text-small: 11px; + --spectrum-tab-item-bottom-to-text-small: 12px; + --spectrum-tab-item-top-to-text-medium: 14px; + --spectrum-tab-item-bottom-to-text-medium: 14px; + --spectrum-tab-item-top-to-text-large: 16px; + --spectrum-tab-item-bottom-to-text-large: 18px; + --spectrum-tab-item-top-to-text-extra-large: 19px; + --spectrum-tab-item-bottom-to-text-extra-large: 20px; + --spectrum-tab-item-top-to-text-compact-small: 4px; + --spectrum-tab-item-bottom-to-text-compact-small: 5px; + --spectrum-tab-item-top-to-text-compact-medium: 6px; + --spectrum-tab-item-bottom-to-text-compact-medium: 8px; + --spectrum-tab-item-top-to-text-compact-large: 10px; + --spectrum-tab-item-bottom-to-text-compact-large: 12px; + --spectrum-tab-item-top-to-text-compact-extra-large: 12px; + --spectrum-tab-item-bottom-to-text-compact-extra-large: 13px; + --spectrum-tab-item-top-to-workflow-icon-small: 13px; + --spectrum-tab-item-top-to-workflow-icon-medium: 15px; + --spectrum-tab-item-top-to-workflow-icon-large: 17px; + --spectrum-tab-item-top-to-workflow-icon-extra-large: 19px; + --spectrum-tab-item-top-to-workflow-icon-compact-small: 3px; + --spectrum-tab-item-top-to-workflow-icon-compact-medium: 7px; + --spectrum-tab-item-top-to-workflow-icon-compact-large: 9px; + --spectrum-tab-item-top-to-workflow-icon-compact-extra-large: 11px; + --spectrum-tab-item-focus-indicator-gap-small: 7px; + --spectrum-tab-item-focus-indicator-gap-medium: 8px; + --spectrum-tab-item-focus-indicator-gap-large: 9px; + --spectrum-tab-item-focus-indicator-gap-extra-large: 10px; + --spectrum-side-navigation-width: 192px; + --spectrum-side-navigation-minimum-width: 160px; + --spectrum-side-navigation-maximum-width: 240px; + --spectrum-side-navigation-second-level-edge-to-text: 24px; + --spectrum-side-navigation-third-level-edge-to-text: 36px; + --spectrum-side-navigation-with-icon-second-level-edge-to-text: 50px; + --spectrum-side-navigation-with-icon-third-level-edge-to-text: 62px; + --spectrum-side-navigation-item-to-item: 4px; + --spectrum-side-navigation-item-to-header: 16px; + --spectrum-side-navigation-bottom-to-text: 8px; + --spectrum-tray-top-to-content-area: 4px; + --spectrum-corner-radius-75: 2px; + --spectrum-corner-radius-100: 4px; + --spectrum-corner-radius-200: 8px; + --spectrum-drop-shadow-x: 0px; + --spectrum-drop-shadow-y: 1px; + --spectrum-drop-shadow-blur: 4px; + --spectrum-workflow-icon-size-50: 14px; + --spectrum-workflow-icon-size-75: 16px; + --spectrum-workflow-icon-size-100: 18px; + --spectrum-workflow-icon-size-200: 20px; + --spectrum-workflow-icon-size-300: 22px; + --spectrum-text-to-visual-50: 6px; + --spectrum-text-to-visual-75: 7px; + --spectrum-text-to-visual-100: 8px; + --spectrum-text-to-visual-200: 9px; + --spectrum-text-to-visual-300: 10px; + --spectrum-text-to-control-75: 9px; + --spectrum-text-to-control-100: 10px; + --spectrum-text-to-control-200: 11px; + --spectrum-text-to-control-300: 13px; + --spectrum-component-height-50: 20px; + --spectrum-component-height-75: 24px; + --spectrum-component-height-100: 32px; + --spectrum-component-height-200: 40px; + --spectrum-component-height-300: 48px; + --spectrum-component-height-400: 56px; + --spectrum-component-height-500: 64px; + --spectrum-component-pill-edge-to-visual-75: 10px; + --spectrum-component-pill-edge-to-visual-100: 14px; + --spectrum-component-pill-edge-to-visual-200: 18px; + --spectrum-component-pill-edge-to-visual-300: 21px; + --spectrum-component-pill-edge-to-visual-only-75: 4px; + --spectrum-component-pill-edge-to-visual-only-100: 7px; + --spectrum-component-pill-edge-to-visual-only-200: 10px; + --spectrum-component-pill-edge-to-visual-only-300: 13px; + --spectrum-component-pill-edge-to-text-75: 12px; + --spectrum-component-pill-edge-to-text-100: 16px; + --spectrum-component-pill-edge-to-text-200: 20px; + --spectrum-component-pill-edge-to-text-300: 24px; + --spectrum-component-edge-to-visual-50: 6px; + --spectrum-component-edge-to-visual-75: 7px; + --spectrum-component-edge-to-visual-100: 10px; + --spectrum-component-edge-to-visual-200: 13px; + --spectrum-component-edge-to-visual-300: 15px; + --spectrum-component-edge-to-visual-only-50: 3px; + --spectrum-component-edge-to-visual-only-75: 4px; + --spectrum-component-edge-to-visual-only-100: 7px; + --spectrum-component-edge-to-visual-only-200: 10px; + --spectrum-component-edge-to-visual-only-300: 13px; + --spectrum-component-edge-to-text-50: 8px; + --spectrum-component-edge-to-text-75: 9px; + --spectrum-component-edge-to-text-100: 12px; + --spectrum-component-edge-to-text-200: 15px; + --spectrum-component-edge-to-text-300: 18px; + --spectrum-component-top-to-workflow-icon-50: 3px; + --spectrum-component-top-to-workflow-icon-75: 4px; + --spectrum-component-top-to-workflow-icon-100: 7px; + --spectrum-component-top-to-workflow-icon-200: 10px; + --spectrum-component-top-to-workflow-icon-300: 13px; + --spectrum-component-top-to-text-50: 3px; + --spectrum-component-top-to-text-75: 4px; + --spectrum-component-top-to-text-100: 6px; + --spectrum-component-top-to-text-200: 9px; + --spectrum-component-top-to-text-300: 12px; + --spectrum-component-bottom-to-text-50: 3px; + --spectrum-component-bottom-to-text-75: 5px; + --spectrum-component-bottom-to-text-100: 9px; + --spectrum-component-bottom-to-text-200: 11px; + --spectrum-component-bottom-to-text-300: 14px; + --spectrum-component-to-menu-small: 6px; + --spectrum-component-to-menu-medium: 6px; + --spectrum-component-to-menu-large: 7px; + --spectrum-component-to-menu-extra-large: 8px; + --spectrum-field-edge-to-disclosure-icon-75: 7px; + --spectrum-field-edge-to-disclosure-icon-100: 11px; + --spectrum-field-edge-to-disclosure-icon-200: 14px; + --spectrum-field-edge-to-disclosure-icon-300: 17px; + --spectrum-field-end-edge-to-disclosure-icon-75: 7px; + --spectrum-field-end-edge-to-disclosure-icon-100: 11px; + --spectrum-field-end-edge-to-disclosure-icon-200: 14px; + --spectrum-field-end-edge-to-disclosure-icon-300: 17px; + --spectrum-field-top-to-disclosure-icon-75: 7px; + --spectrum-field-top-to-disclosure-icon-100: 11px; + --spectrum-field-top-to-disclosure-icon-200: 14px; + --spectrum-field-top-to-disclosure-icon-300: 17px; + --spectrum-field-top-to-alert-icon-small: 4px; + --spectrum-field-top-to-alert-icon-medium: 7px; + --spectrum-field-top-to-alert-icon-large: 10px; + --spectrum-field-top-to-alert-icon-extra-large: 13px; + --spectrum-field-top-to-validation-icon-small: 7px; + --spectrum-field-top-to-validation-icon-medium: 11px; + --spectrum-field-top-to-validation-icon-large: 14px; + --spectrum-field-top-to-validation-icon-extra-large: 17px; + --spectrum-field-top-to-progress-circle-small: 4px; + --spectrum-field-top-to-progress-circle-medium: 8px; + --spectrum-field-top-to-progress-circle-large: 12px; + --spectrum-field-top-to-progress-circle-extra-large: 16px; + --spectrum-field-edge-to-alert-icon-small: 9px; + --spectrum-field-edge-to-alert-icon-medium: 12px; + --spectrum-field-edge-to-alert-icon-large: 15px; + --spectrum-field-edge-to-alert-icon-extra-large: 18px; + --spectrum-field-edge-to-validation-icon-small: 9px; + --spectrum-field-edge-to-validation-icon-medium: 12px; + --spectrum-field-edge-to-validation-icon-large: 15px; + --spectrum-field-edge-to-validation-icon-extra-large: 18px; + --spectrum-field-text-to-alert-icon-small: 8px; + --spectrum-field-text-to-alert-icon-medium: 12px; + --spectrum-field-text-to-alert-icon-large: 15px; + --spectrum-field-text-to-alert-icon-extra-large: 18px; + --spectrum-field-text-to-validation-icon-small: 8px; + --spectrum-field-text-to-validation-icon-medium: 12px; + --spectrum-field-text-to-validation-icon-large: 15px; + --spectrum-field-text-to-validation-icon-extra-large: 18px; + --spectrum-field-width: 192px; + --spectrum-character-count-to-field-quiet-small: -3px; + --spectrum-character-count-to-field-quiet-medium: -3px; + --spectrum-character-count-to-field-quiet-large: -3px; + --spectrum-character-count-to-field-quiet-extra-large: -4px; + --spectrum-side-label-character-count-to-field: 12px; + --spectrum-side-label-character-count-top-margin-small: 4px; + --spectrum-side-label-character-count-top-margin-medium: 8px; + --spectrum-side-label-character-count-top-margin-large: 11px; + --spectrum-side-label-character-count-top-margin-extra-large: 14px; + --spectrum-disclosure-indicator-top-to-disclosure-icon-small: 7px; + --spectrum-disclosure-indicator-top-to-disclosure-icon-medium: 11px; + --spectrum-disclosure-indicator-top-to-disclosure-icon-large: 14px; + --spectrum-disclosure-indicator-top-to-disclosure-icon-extra-large: 17px; + --spectrum-navigational-indicator-top-to-back-icon-small: 7px; + --spectrum-navigational-indicator-top-to-back-icon-medium: 11px; + --spectrum-navigational-indicator-top-to-back-icon-large: 14px; + --spectrum-navigational-indicator-top-to-back-icon-extra-large: 17px; + --spectrum-color-control-track-width: 24px; + --spectrum-font-size-50: 11px; + --spectrum-font-size-75: 12px; + --spectrum-font-size-100: 14px; + --spectrum-font-size-200: 16px; + --spectrum-font-size-300: 18px; + --spectrum-font-size-400: 20px; + --spectrum-font-size-500: 22px; + --spectrum-font-size-600: 25px; + --spectrum-font-size-700: 28px; + --spectrum-font-size-800: 32px; + --spectrum-font-size-900: 36px; + --spectrum-font-size-1000: 40px; + --spectrum-font-size-1100: 45px; + --spectrum-font-size-1200: 50px; + --spectrum-font-size-1300: 60px; +} diff --git a/dist/css/spectrum/global-vars.css b/dist/css/spectrum/global-vars.css new file mode 100644 index 00000000000..98b2e70c0f7 --- /dev/null +++ b/dist/css/spectrum/global-vars.css @@ -0,0 +1,4 @@ +.spectrum { + --spectrum-color-handle-outer-border-color: var(--spectrum-black); + --spectrum-picker-border-width: var(--spectrum-border-width-100); +} diff --git a/packages/@react-spectrum/s2/package.json b/packages/@react-spectrum/s2/package.json index 4dcd9433a28..f5fd2393015 100644 --- a/packages/@react-spectrum/s2/package.json +++ b/packages/@react-spectrum/s2/package.json @@ -1,7 +1,10 @@ { "devDependencies": { + "@adobe/spectrum-tokens": "^13.0.0-beta.3", "@babel/preset-react": "^7.23.3", "@react-spectrum/utils": "latest", + "@react-spectrum/provider": "latest", + "@storybook/addons": "^7.5.3", "@storybook/addon-essentials": "^7.5.3", "@storybook/addon-interactions": "^7.5.3", "@storybook/addon-links": "^7.5.3", @@ -9,6 +12,9 @@ "@storybook/addon-styling-webpack": "^0.0.5", "@storybook/addon-themes": "^7.5.3", "@storybook/blocks": "^7.5.3", + "@storybook/client-api": "^7.5.3", + "@storybook/manager-api": "^7.5.3", + "@storybook/preview-api": "^7.5.3", "@storybook/react": "^7.5.3", "@storybook/react-webpack5": "^7.5.3", "@storybook/testing-library": "^0.2.2", @@ -26,6 +32,8 @@ "react-dom": "^18.2.0", "storybook": "^7.5.3", "storybook-dark-mode": "^3.0.1", + "style-dictionary": "^3.8.0", + "style-dictionary-sets": "^2.3.0", "style-loader": "^3.3.3", "tailwindcss": "^3.3.5", "tailwindcss-animate": "^1.0.7", @@ -39,6 +47,7 @@ "scripts": { "start": "storybook dev -p 6006", "build-storybook": "storybook build", - "storybook": "storybook dev -p 6006" + "storybook": "storybook dev -p 6006", + "build:tokens": "style-dictionary build --config style-dictionary.config.js" } } diff --git a/packages/@react-spectrum/s2/src/tailwind.css b/packages/@react-spectrum/s2/src/tailwind.css index a814d722311..749b16a8d9f 100644 --- a/packages/@react-spectrum/s2/src/tailwind.css +++ b/packages/@react-spectrum/s2/src/tailwind.css @@ -1,4 +1,4 @@ -@config "../tailwind-spectrum.js"; +@config "../tailwind.config.js"; @tailwind base; @tailwind components; @tailwind utilities; diff --git a/packages/@react-spectrum/s2/stories/Button.stories.tsx b/packages/@react-spectrum/s2/stories/Button.stories.tsx index ae493195070..6760290e9b6 100644 --- a/packages/@react-spectrum/s2/stories/Button.stories.tsx +++ b/packages/@react-spectrum/s2/stories/Button.stories.tsx @@ -12,7 +12,7 @@ const meta: Meta = { export default meta; -export const Example = (args: any) => ; +export const Example = (args: any) => ; Example.args = { onPress: () => alert('Hello world!') diff --git a/spectrum-css-temp/components/accordion/index.css b/spectrum-css-temp/components/accordion/index.css new file mode 100644 index 00000000000..74ddd3b695d --- /dev/null +++ b/spectrum-css-temp/components/accordion/index.css @@ -0,0 +1,143 @@ +/* +Copyright 2019 Adobe. All rights reserved. +This file is licensed to you under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. You may obtain a copy +of the License at http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under +the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS +OF ANY KIND, either express or implied. See the License for the specific language +governing permissions and limitations under the License. +*/ + +:root { + --spectrum-accordion-icon-width: 6px; + --spectrum-accordion-icon-height: 10px; + + /* Subtract the size of the border since it's on the item itself */ + --spectrum-accordion-item-height-actual: calc(var(--spectrum-accordion-item-height) - var(--spectrum-accordion-item-border-size)); + --spectrum-accordion-item-title-tracking-actual: calc(var(--spectrum-accordion-item-title-tracking) / 100); + + --spectrum-accordion-item-title-padding-y: var(--spectrum-global-dimension-size-150); + --spectrum-accordion-item-line-height: 1.3; +} + +.spectrum-Accordion { + display: block; + list-style: none; + padding: 0; + margin: 0; +} + +.spectrum-Accordion-itemIndicator { + display: block; + + padding-inline-start: var(--spectrum-accordion-icon-spacing); + padding-inline-end: var(--spectrum-accordion-icon-gap); + + transition: transform ease var(--spectrum-global-animation-duration-100); +} + +.spectrum-Accordion-item { + z-index: inherit; + position: relative; + + display: list-item; + margin: 0; + + border-bottom: var(--spectrum-accordion-item-border-size) solid transparent; + + &:first-of-type { + border-top: var(--spectrum-accordion-item-border-size) solid transparent; + } +} + +.spectrum-Accordion-itemHeading { + margin: 0; +} + +.spectrum-Accordion-itemHeader { + position: relative; + + display: flex; + align-items: center; + justify-content: flex-start; + + box-sizing: border-box; + /* left padding takes into account the icon's size as well as the focus state's left border */ + padding-block: var(--spectrum-accordion-item-title-padding-y); + padding-inline-start: 2px; + padding-inline-end: var(--spectrum-accordion-item-padding); + margin: 0; + + min-height: var(--spectrum-accordion-item-height-actual); + + font-size: var(--spectrum-global-dimension-font-size-300); + line-height: var(--spectrum-accordion-item-line-height); + + text-overflow: ellipsis; + cursor: default; + font-weight: var(--spectrum-global-font-weight-bold); + + /* reset styling if button element is used */ + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + background-color: inherit; + border: 0; + font-family: inherit; + text-align: start; + width: 100%; + + &:focus { + outline: none; + + &::after { + content: ''; + + position: absolute; + inset-inline-start: 0; + top: calc(var(--spectrum-accordion-item-border-size) * -1); + bottom: calc(var(--spectrum-accordion-item-border-size) * -1); + + width: var(--spectrum-accordion-item-border-size-key-focus); + } + } +} + +.spectrum-Accordion-itemContent { + padding: 0 var(--spectrum-accordion-item-content-padding) var(--spectrum-accordion-item-content-padding) var(--spectrum-accordion-item-content-padding); + display: none; +} + +.spectrum-Accordion-item { + &.is-open { + > .spectrum-Accordion-itemHeading { + > .spectrum-Accordion-itemHeader { + > .spectrum-Accordion-itemIndicator { + [dir='ltr'] & { + transform: rotate(90deg); + } + [dir='rtl'] & { + transform: rotate(-90deg); + } + } + } + } + + > .spectrum-Accordion-itemHeader::after { + /* No bottom border when open, so be less tall */ + height: var(--spectrum-accordion-item-height-actual); + } + + > .spectrum-Accordion-itemContent { + display: block; + } + } + + &.is-disabled { + .spectrum-Accordion-itemHeader { + cursor: default; + } + } +} diff --git a/spectrum-css-temp/components/accordion/skin.css b/spectrum-css-temp/components/accordion/skin.css new file mode 100644 index 00000000000..c58b1b08fa4 --- /dev/null +++ b/spectrum-css-temp/components/accordion/skin.css @@ -0,0 +1,67 @@ +/* +Copyright 2019 Adobe. All rights reserved. +This file is licensed to you under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. You may obtain a copy +of the License at http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under +the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS +OF ANY KIND, either express or implied. See the License for the specific language +governing permissions and limitations under the License. +*/ + +:root { + --spectrum-accordion-text-color-disabled: var(--spectrum-alias-text-color-disabled); +} + +.spectrum-Accordion-item { + border-color: var(--spectrum-accordion-border-color); + + &:first-of-type { + border-top-color: var(--spectrum-accordion-border-color); + } +} + +.spectrum-Accordion-itemHeader { + color: var(--spectrum-alias-text-color); + + &:hover { + color: var(--spectrum-alias-text-color-hover); + + background-color: var(--spectrum-accordion-background-color-hover); + } + + &:focus-visible { + &:after { + background-color: var(--spectrum-accordion-border-left-color-key-focus); + } + } +} + +.spectrum-Accordion-item { + &.is-open { + .spectrum-Accordion-itemHeader { + &:hover { + background-color: transparent; + } + } + } +} + +.spectrum-Accordion-item.is-disabled { + .spectrum-Accordion-itemHeader { + &, + &:hover, + &:focus-visible { + color: var(--spectrum-accordion-text-color-disabled); + background-color: transparent; + } + } +} +@media (forced-colors: active) { + .spectrum-Accordion-itemHeader { + &:focus-visible { + outline: 3px solid CanvasText; + } + } +} diff --git a/spectrum-css-temp/components/accordion/vars.css b/spectrum-css-temp/components/accordion/vars.css new file mode 100644 index 00000000000..ca1e08522d8 --- /dev/null +++ b/spectrum-css-temp/components/accordion/vars.css @@ -0,0 +1,14 @@ +/* + * Copyright 2020 Adobe. All rights reserved. + * This file is licensed to you under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. You may obtain a copy + * of the License at http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS + * OF ANY KIND, either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + */ + +@import './index.css'; +@import './skin.css'; diff --git a/spectrum-css-temp/components/actiongroup/index.css b/spectrum-css-temp/components/actiongroup/index.css new file mode 100644 index 00000000000..390fd36c5c0 --- /dev/null +++ b/spectrum-css-temp/components/actiongroup/index.css @@ -0,0 +1,206 @@ +/* +Copyright 2019 Adobe. All rights reserved. +This file is licensed to you under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. You may obtain a copy +of the License at http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under +the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS +OF ANY KIND, either express or implied. See the License for the specific language +governing permissions and limitations under the License. +*/ + +:root { + --spectrum-actiongroup-button-gap-reset: 0px; + --spectrum-actiongroup-quiet-compact-button-gap: var(--spectrum-global-dimension-size-25); +} + +/* This is copied from our Flex component for now. */ +.flex-container { + /* this is necessary so that the inner margins don't affect anything outside */ + display: flex; +} + +.flex-gap { + /* apply a negative margin to counteract the margin on each item at the edges */ + margin: calc(var(--row-gap) / -2) calc(var(--column-gap) / -2); + + /* increase the width and height to account for this margin */ + /* Add 1px to fix rounding error in Safari (╯°□°)╯︵ ┻━┻ */ + width: calc(100% + calc(var(--column-gap) + 1px)); + height: calc(100% + var(--row-gap)); +} + +/* If the selector was .flex-gap > *, it wouldn't override when components have a margin 0 specified by a single + * class selector, specificity is equal. Both are one class. Neither > nor * contribute to specificity. + * We need to make it more specific, so we raise it by 1 class. + */ +.flex-container .flex-gap > * { + /* apply half of the gap to each side of every item */ + margin: calc(var(--row-gap) / 2) calc(var(--column-gap) / 2); +} + + +.spectrum-ActionGroup { + display: flex; + flex-wrap: wrap; + --column-gap: var(--spectrum-actionbuttongroup-text-button-gap-x); + --row-gap: var(--spectrum-actionbuttongroup-text-button-gap-y); + + .spectrum-ActionGroup-item { + flex-shrink: 0; + } + + &:focus { + outline: none; + } +} + +.spectrum-ActionGroup--vertical { + display: flex; + flex-direction: column; + align-items: flex-start; + --column-gap: var(--spectrum-actiongroup-button-gap-reset); + --row-gap: var(--spectrum-actionbuttongroup-text-button-gap-y); + + .spectrum-ActionGroup-item { + > :not(svg) { + inline-size: auto; + } + } + + &.spectrum-ActionGroup--quiet { + .spectrum-ActionGroup-item { + justify-content: flex-start; + } + } + + &.spectrum-ActionGroup--justified, + &.spectrum-ActionGroup--compact:not(.spectrum-ActionGroup--quiet) { + align-items: stretch; + } +} + +.spectrum-ActionGroup--compact { + --column-gap: var(--spectrum-actiongroup-compact-button-gap); + --row-gap: var(--spectrum-actiongroup-button-gap-reset); + + &.spectrum-ActionGroup--quiet { + --column-gap: var(--spectrum-actiongroup-quiet-compact-button-gap); + + &.spectrum-ActionGroup--vertical { + --column-gap: var(--spectrum-actiongroup-button-gap-reset); + --row-gap: var(--spectrum-actiongroup-quiet-compact-button-gap); + } + } + + &:not(.spectrum-ActionGroup--quiet) { + flex-wrap: nowrap; + + .spectrum-ActionGroup-item { + position: relative; + --spectrum-button-border-radius: 0px; + z-index: 1; + + &:first-child { + border-start-start-radius: var(--spectrum-actionbutton-border-radius); + border-end-start-radius: var(--spectrum-actionbutton-border-radius); + + /* focus ring */ + &:after { + border-start-start-radius: calc(var(--spectrum-actionbutton-border-radius) + var(--spectrum-alias-focus-ring-gap)); + border-end-start-radius: calc(var(--spectrum-actionbutton-border-radius) + var(--spectrum-alias-focus-ring-gap)); + } + } + + &:last-child { + border-start-end-radius: var(--spectrum-actionbutton-border-radius); + border-end-end-radius: var(--spectrum-actionbutton-border-radius); + + /* focus ring */ + &:after { + border-start-end-radius: calc(var(--spectrum-actionbutton-border-radius) + var(--spectrum-alias-focus-ring-gap)); + border-end-end-radius: calc(var(--spectrum-actionbutton-border-radius) + var(--spectrum-alias-focus-ring-gap)); + } + } + + &.spectrum-ActionGroup-item--isDisabled { + z-index: 0; + } + + &.is-selected { + z-index: 2; + } + + &:hover { + z-index: 3; + } + + &:focus { + z-index: 4; + } + } + + &.spectrum-ActionGroup--vertical { + --column-gap: var(--spectrum-actiongroup-button-gap-reset); + --row-gap: var(--spectrum-actiongroup-compact-button-gap); + + .spectrum-ActionGroup-item { + border-radius: 0; + + &:first-child { + border-radius: 0; + border-start-start-radius: var(--spectrum-actionbutton-border-radius); + border-start-end-radius: var(--spectrum-actionbutton-border-radius); + } + + &:last-child { + border-radius: 0; + border-end-start-radius: var(--spectrum-actionbutton-border-radius); + border-end-end-radius: var(--spectrum-actionbutton-border-radius); + } + } + } + } +} + +.spectrum-ActionGroup--justified { + .spectrum-ActionGroup-item { + flex: 1; + + > :not(svg) { + inline-size: auto; + } + } + + &.spectrum-ActionGroup--vertical { + .spectrum-ActionGroup-item { + flex: 1 0 auto; + } + } +} + +.spectrum-ActionGroup--overflowCollapse { + flex-wrap: nowrap; +} + +.spectrum-ActionGroup-menu { + /* specificity must be higher than `.spectrum-ActionButton .spectrum-Icon` */ + svg.spectrum-ActionGroup-menu-chevron { + order: 2; + padding-inline-start: 0; + padding-inline-end: var(--spectrum-actionbutton-icon-padding-x); + } + + .spectrum-ActionGroup-menu-contents { + /* This wrapper is needed to keep the :only-child/sibling selectors + * in button CSS working with the additional chevron element. */ + display: inline-flex; + align-items: center; + justify-content: center; + } +} + +.spectrum-ActionGroup-item--iconOnly { + padding-inline-end: var(--spectrum-actionbutton-icon-padding-x); +} diff --git a/spectrum-css-temp/components/actiongroup/vars.css b/spectrum-css-temp/components/actiongroup/vars.css new file mode 100644 index 00000000000..3df0b027c58 --- /dev/null +++ b/spectrum-css-temp/components/actiongroup/vars.css @@ -0,0 +1,13 @@ +/* + * Copyright 2020 Adobe. All rights reserved. + * This file is licensed to you under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. You may obtain a copy + * of the License at http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS + * OF ANY KIND, either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + */ + +@import './index.css'; diff --git a/spectrum-css-temp/components/actionmenu/index.css b/spectrum-css-temp/components/actionmenu/index.css new file mode 100644 index 00000000000..55fa2f5caf8 --- /dev/null +++ b/spectrum-css-temp/components/actionmenu/index.css @@ -0,0 +1,11 @@ +/* +Copyright 2019 Adobe. All rights reserved. +This file is licensed to you under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. You may obtain a copy +of the License at http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under +the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS +OF ANY KIND, either express or implied. See the License for the specific language +governing permissions and limitations under the License. +*/ diff --git a/spectrum-css-temp/components/actionmenu/vars.css b/spectrum-css-temp/components/actionmenu/vars.css new file mode 100644 index 00000000000..3df0b027c58 --- /dev/null +++ b/spectrum-css-temp/components/actionmenu/vars.css @@ -0,0 +1,13 @@ +/* + * Copyright 2020 Adobe. All rights reserved. + * This file is licensed to you under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. You may obtain a copy + * of the License at http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS + * OF ANY KIND, either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + */ + +@import './index.css'; diff --git a/spectrum-css-temp/components/alert/index.css b/spectrum-css-temp/components/alert/index.css new file mode 100644 index 00000000000..108ffebf701 --- /dev/null +++ b/spectrum-css-temp/components/alert/index.css @@ -0,0 +1,88 @@ +/* +Copyright 2019 Adobe. All rights reserved. +This file is licensed to you under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. You may obtain a copy +of the License at http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under +the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS +OF ANY KIND, either express or implied. See the License for the specific language +governing permissions and limitations under the License. +*/ + +@import '../commons/index.css'; + +:root { + --spectrum-alert-header-height: 38px; + --spectrum-alert-corner-radius: 4px; + + /* DNA */ + --spectrum-alert-border-width: 2px; +} + +.spectrum-Alert { + position: relative; + + display: inline-block; + box-sizing: border-box; + min-width: var(--spectrum-alert-min-width); + min-height: var(--spectrum-alert-header-height); + margin: 8px 0; + padding: var(--spectrum-alert-padding-y) var(--spectrum-alert-padding-x); + + border-width: var(--spectrum-alert-border-width); + border-style: solid; + border-radius: var(--spectrum-alert-corner-radius); +} + +.spectrum-Alert-icon { + position: absolute; + display: block; + top: 20px; + right: 20px; +} + +.spectrum-Alert-header { + display: inline-block; + height: auto; + min-height: 0; + margin: 0; + padding: 0; + + /* Leave room for the icon */ + padding-right: 30px; + + font-size: 14px; + font-weight: 700; + font-style: normal; + line-height: 14px; + text-transform: none; +} + +.spectrum-Alert-content { + display: block; + margin: var(--spectrum-alert-content-margin-top) 0 0 0; + padding: 0; + + font-size: 14px; + word-wrap: break-word; +} + +.spectrum-Alert-footer { + display: block; + + text-align: right; + + padding-top: 0.5rem; + + &:empty { + display: none; + } + + .spectrum-Button { + margin-right: 0; + + /* Spacing between buttons */ + margin-left: 0.75rem; + } +} diff --git a/spectrum-css-temp/components/alert/skin.css b/spectrum-css-temp/components/alert/skin.css new file mode 100644 index 00000000000..1126d1e815d --- /dev/null +++ b/spectrum-css-temp/components/alert/skin.css @@ -0,0 +1,65 @@ +/* +Copyright 2019 Adobe. All rights reserved. +This file is licensed to you under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. You may obtain a copy +of the License at http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under +the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS +OF ANY KIND, either express or implied. See the License for the specific language +governing permissions and limitations under the License. +*/ + +.spectrum-Alert { + background-color: var(--spectrum-alert-background-color); + /* default color set to body color, header element overwrites this */ + color: var(--spectrum-alert-text-color); +} + +.spectrum-Alert-header { + color: var(--spectrum-alert-title-text-color); +} + +.spectrum-Alert-content { + color: var(--spectrum-alert-text-color); +} + +.spectrum-Alert--info { + border-color: var(--spectrum-alert-info-border-color); + + .spectrum-Alert-icon { + color: var(--spectrum-alert-info-icon-color); + } +} + +.spectrum-Alert--help { + border-color: var(--spectrum-alert-info-border-color); + + .spectrum-Alert-icon { + color: var(--spectrum-alert-info-icon-color); + } +} + +.spectrum-Alert--error { + border-color: var(--spectrum-alert-error-border-color); + + .spectrum-Alert-icon { + color: var(--spectrum-alert-error-icon-color); + } +} + +.spectrum-Alert--success { + border-color: var(--spectrum-alert-success-border-color); + + .spectrum-Alert-icon { + color: var(--spectrum-alert-success-icon-color); + } +} + +.spectrum-Alert--warning { + border-color: var(--spectrum-alert-warning-border-color); + + .spectrum-Alert-icon { + color: var(--spectrum-alert-warning-icon-color); + } +} diff --git a/spectrum-css-temp/components/alert/vars.css b/spectrum-css-temp/components/alert/vars.css new file mode 100644 index 00000000000..ca1e08522d8 --- /dev/null +++ b/spectrum-css-temp/components/alert/vars.css @@ -0,0 +1,14 @@ +/* + * Copyright 2020 Adobe. All rights reserved. + * This file is licensed to you under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. You may obtain a copy + * of the License at http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS + * OF ANY KIND, either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + */ + +@import './index.css'; +@import './skin.css'; diff --git a/spectrum-css-temp/components/asset/index.css b/spectrum-css-temp/components/asset/index.css new file mode 100644 index 00000000000..06562de47de --- /dev/null +++ b/spectrum-css-temp/components/asset/index.css @@ -0,0 +1,32 @@ +/* +Copyright 2019 Adobe. All rights reserved. +This file is licensed to you under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. You may obtain a copy +of the License at http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under +the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS +OF ANY KIND, either express or implied. See the License for the specific language +governing permissions and limitations under the License. +*/ + +@import '../commons/index.css'; + +.spectrum-Asset { + display: flex; + align-items: center; + justify-content: center; +} + +.spectrum-Asset-image { + max-width: 100%; + max-height: 100%; + object-fit: contain; + transition: opacity var(--spectrum-global-animation-duration-100); +} + +.spectrum-Asset-folder, +.spectrum-Asset-file { + min-width: var(--spectrum-asset-icon-min-width); + max-width: var(--spectrum-asset-icon-max-width); +} diff --git a/spectrum-css-temp/components/asset/skin.css b/spectrum-css-temp/components/asset/skin.css new file mode 100644 index 00000000000..9be92d01918 --- /dev/null +++ b/spectrum-css-temp/components/asset/skin.css @@ -0,0 +1,24 @@ +/* +Copyright 2019 Adobe. All rights reserved. +This file is licensed to you under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. You may obtain a copy +of the License at http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under +the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS +OF ANY KIND, either express or implied. See the License for the specific language +governing permissions and limitations under the License. +*/ + +.spectrum-Asset-folderBackground { + fill: var(--spectrum-asset-folder-background-color); +} + +.spectrum-Asset-fileBackground { + fill: var(--spectrum-asset-file-background-color); +} + +.spectrum-Asset-folderOutline, +.spectrum-Asset-fileOutline { + fill: var(--spectrum-asset-icon-outline-color); +} diff --git a/spectrum-css-temp/components/asset/vars.css b/spectrum-css-temp/components/asset/vars.css new file mode 100644 index 00000000000..ca1e08522d8 --- /dev/null +++ b/spectrum-css-temp/components/asset/vars.css @@ -0,0 +1,14 @@ +/* + * Copyright 2020 Adobe. All rights reserved. + * This file is licensed to you under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. You may obtain a copy + * of the License at http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS + * OF ANY KIND, either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + */ + +@import './index.css'; +@import './skin.css'; diff --git a/spectrum-css-temp/components/assetlist/index.css b/spectrum-css-temp/components/assetlist/index.css new file mode 100644 index 00000000000..08561d1a09f --- /dev/null +++ b/spectrum-css-temp/components/assetlist/index.css @@ -0,0 +1,111 @@ +/* +Copyright 2019 Adobe. All rights reserved. +This file is licensed to you under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. You may obtain a copy +of the License at http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under +the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS +OF ANY KIND, either express or implied. See the License for the specific language +governing permissions and limitations under the License. +*/ + +@import '../commons/index.css'; + +:root { + --spectrum-miller-column-chevron-height: 10px; + --spectrum-miller-column-chevron-width: 6px; + --spectrum-miller-column-checkbox-margin: 0; +} + +.spectrum-AssetList { + margin-top: 0; + margin-bottom: 0; + padding: 0; +} + +.spectrum-AssetList-item { + position: relative; + + display: flex; + box-sizing: border-box; + align-items: center; + + width: var(--spectrum-miller-column-width); + height: var(--spectrum-miller-column-item-height); + + padding: 0 var(--spectrum-miller-column-item-padding-right) 0 var(--spectrum-miller-column-item-padding-left); + margin: 0 0 var(--spectrum-miller-column-item-margin-bottom) 0; + + border-radius: var(--spectrum-miller-column-item-border-radius); + + transition: background-color var(--spectrum-global-animation-duration-100) ease-in-out; + + font-size: var(--spectrum-selectlist-option-text-size); + font-weight: var(--spectrum-selectlist-option-text-font-weight); + font-style: normal; + + cursor: default; + + outline: none; + + &::before { + content: ''; + + position: absolute; + left: 0; + right: 0; + + height: var(--spectrum-miller-column-item-height); + + background-color: transparent; + + border-radius: var(--spectrum-miller-column-item-border-radius); + } + + &.is-selectable, + &.is-selected, + &:hover, + &:focus { + /* checkbox on the left, shows up always */ + .spectrum-Checkbox { + display: inline-flex; + } + } + + &.is-branch { + /* show chevron */ + .spectrum-AssetList-itemChildIndicator { + display: block; + } + } + + .spectrum-AssetList-itemThumbnail { + /* Remove the border on images inside links in IE 10-. */ + border-style: none; + + width: var(--spectrum-miller-column-thumbnail-width); + height: var(--spectrum-miller-column-thumbnail-height); + margin-left: var(--spectrum-miller-column-thumbnail-margin-left); + vertical-align: middle; + } +} + +.spectrum-AssetList-itemSelector { + display: none; + margin: var(--spectrum-miller-column-checkbox-margin); +} + +.spectrum-AssetList-itemChildIndicator { + display: none; + transition: transform ease var(--spectrum-global-animation-duration-100); +} + +.spectrum-AssetList-itemLabel { + flex: 1; + padding-left: var(--spectrum-miller-column-item-label-padding-left); + + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; +} diff --git a/spectrum-css-temp/components/assetlist/skin.css b/spectrum-css-temp/components/assetlist/skin.css new file mode 100644 index 00000000000..c44a30e6811 --- /dev/null +++ b/spectrum-css-temp/components/assetlist/skin.css @@ -0,0 +1,45 @@ +/* +Copyright 2019 Adobe. All rights reserved. +This file is licensed to you under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. You may obtain a copy +of the License at http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under +the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS +OF ANY KIND, either express or implied. See the License for the specific language +governing permissions and limitations under the License. +*/ + +.spectrum-AssetList-item { + &:hover { + background-color: var(--spectrum-miller-column-item-background-color-hover); + } + + &:focus { + &:focus-visible, + &.is-focused { + background-color: var(--spectrum-miller-column-item-background-color-hover); + &::before { + /* we cannot achieve rounded corners with outline so we use box-shadow instead */ + box-shadow: 0px 0px 0px 2px var(--spectrum-alias-border-color-focus) inset; + } + } + } + + &.is-navigated { + /* gray background */ + background-color: var(--spectrum-miller-column-item-background-color-down); + &:hover, + &:focus { + background-color: var(--spectrum-miller-column-item-background-color-down); + } + } + + &.is-selected { + background-color: var(--spectrum-miller-column-item-background-color-selected); + &:hover, + &:focus { + background-color: var(--spectrum-miller-column-item-background-color-selected-hover); + } + } +} diff --git a/spectrum-css-temp/components/assetlist/vars.css b/spectrum-css-temp/components/assetlist/vars.css new file mode 100644 index 00000000000..ca1e08522d8 --- /dev/null +++ b/spectrum-css-temp/components/assetlist/vars.css @@ -0,0 +1,14 @@ +/* + * Copyright 2020 Adobe. All rights reserved. + * This file is licensed to you under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. You may obtain a copy + * of the License at http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS + * OF ANY KIND, either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + */ + +@import './index.css'; +@import './skin.css'; diff --git a/spectrum-css-temp/components/avatar/index.css b/spectrum-css-temp/components/avatar/index.css new file mode 100644 index 00000000000..e800e3a1109 --- /dev/null +++ b/spectrum-css-temp/components/avatar/index.css @@ -0,0 +1,22 @@ +/* +Copyright 2019 Adobe. All rights reserved. +This file is licensed to you under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. You may obtain a copy +of the License at http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under +the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS +OF ANY KIND, either express or implied. See the License for the specific language +governing permissions and limitations under the License. +*/ + +.spectrum-Avatar { + width: var(--spectrum-avatar-small-width); + height: var(--spectrum-avatar-small-height); + + border-radius: var(--spectrum-avatar-small-border-radius); + border-style: none; + + -webkit-user-drag: none; + user-select: none; +} diff --git a/spectrum-css-temp/components/avatar/skin.css b/spectrum-css-temp/components/avatar/skin.css new file mode 100644 index 00000000000..ffb69b9ee98 --- /dev/null +++ b/spectrum-css-temp/components/avatar/skin.css @@ -0,0 +1,29 @@ +/* +Copyright 2019 Adobe. All rights reserved. +This file is licensed to you under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. You may obtain a copy +of the License at http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under +the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS +OF ANY KIND, either express or implied. See the License for the specific language +governing permissions and limitations under the License. +*/ + +.spectrum-Avatar { + opacity: var(--spectrum-avatar-small-opacity); + outline: none; + transition: box-shadow var(--spectrum-global-animation-duration-100) ease-out; + + &.is-disabled { + opacity: var(--spectrum-avatar-small-opacity-disabled); + } +} +@media (forced-colors: active) { + .spectrum-Avatar { + &.is-disabled { + opacity: 1; + border: 2px solid GrayText; + } + } +} \ No newline at end of file diff --git a/spectrum-css-temp/components/avatar/vars.css b/spectrum-css-temp/components/avatar/vars.css new file mode 100644 index 00000000000..ca1e08522d8 --- /dev/null +++ b/spectrum-css-temp/components/avatar/vars.css @@ -0,0 +1,14 @@ +/* + * Copyright 2020 Adobe. All rights reserved. + * This file is licensed to you under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. You may obtain a copy + * of the License at http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS + * OF ANY KIND, either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + */ + +@import './index.css'; +@import './skin.css'; diff --git a/spectrum-css-temp/components/badge/index.css b/spectrum-css-temp/components/badge/index.css new file mode 100644 index 00000000000..118851ea87c --- /dev/null +++ b/spectrum-css-temp/components/badge/index.css @@ -0,0 +1,74 @@ +/* +Copyright 2019 Adobe. All rights reserved. +This file is licensed to you under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. You may obtain a copy +of the License at http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under +the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS +OF ANY KIND, either express or implied. See the License for the specific language +governing permissions and limitations under the License. +*/ + +@import '../commons/index.css'; + +.spectrum-Badge { + display: inline-flex; + position: relative; + + width: fit-content; + + padding: var(--spectrum-global-dimension-size-50) 0; + + border-radius: var(--spectrum-border-radius); + + font-size: var(--spectrum-global-dimension-size-150); + line-height: var(--spectrum-global-font-line-height-medium); + + cursor: default; + + -webkit-font-smoothing: subpixel-antialiased; + -moz-osx-font-smoothing: auto; + font-smoothing: subpixel-antialiased; + + /* label should always have padding at the end */ + .spectrum-Badge-label { + order: 1; /* always be after the icon, regardless of DOM order */ + padding-inline-end: var(--spectrum-global-dimension-size-115); + } + + .spectrum-Badge-icon { + flex-shrink: 0; + order: 0; /* always be before the label, regardless of DOM order */ + padding-inline-start: var(--spectrum-global-dimension-size-115); + } + /* icon + text buttons should have padding between the text and icon no matter the order */ + .spectrum-Badge-icon + .spectrum-Badge-label { + padding-inline-start: var(--spectrum-global-dimension-size-100); + } + + .spectrum-Badge-label:not([hidden]) + .spectrum-Badge-icon { + padding-inline-end: var(--spectrum-global-dimension-size-100); + } + + /* text only buttons should have padding at the start */ + .spectrum-Badge-label:only-child { + padding-inline-start: var(--spectrum-global-dimension-size-115); + } + + /* icon only buttons should have padding at the end */ + .spectrum-Badge-icon:only-child { + padding-inline-start: var(--spectrum-global-dimension-size-50); + padding-inline-end: var(--spectrum-global-dimension-size-50); + } +} + +.spectrum-Badge--large { + font-size: var(--spectrum-global-dimension-size-175); + padding: var(--spectrum-global-dimension-size-100) var(--spectrum-global-dimension-size-150); +} + +.spectrum-Badge--small { + font-size: var(--spectrum-global-dimension-font-size-50); + padding: var(--spectrum-global-dimension-size-40) var(--spectrum-global-dimension-size-85); +} diff --git a/spectrum-css-temp/components/badge/skin.css b/spectrum-css-temp/components/badge/skin.css new file mode 100644 index 00000000000..5b02a57c2d9 --- /dev/null +++ b/spectrum-css-temp/components/badge/skin.css @@ -0,0 +1,61 @@ +/* +Copyright 2019 Adobe. All rights reserved. +This file is licensed to you under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. You may obtain a copy +of the License at http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under +the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS +OF ANY KIND, either express or implied. See the License for the specific language +governing permissions and limitations under the License. +*/ + +.spectrum-Badge { + color: var(--spectrum-label-colored-text-color); +} + +.spectrum-Badge--neutral { + background-color: var(--spectrum-semantic-neutral-color-background); +} + +.spectrum-Badge--negative { + background-color: var(--spectrum-semantic-negative-color-background); +} + +.spectrum-Badge--yellow { + color: var(--spectrum-global-color-static-black); + background-color: var(--spectrum-yellow-background-color-default); +} + +.spectrum-Badge--seafoam { + color: var(--spectrum-gray-50); + background-color: var(--spectrum-seafoam-background-color-default); +} + +.spectrum-Badge--positive { + background-color: var(--spectrum-semantic-positive-color-background); +} + +.spectrum-Badge--info { + background-color: var(--spectrum-semantic-informative-color-background); +} + +.spectrum-Badge--fuchsia { + color: var(--spectrum-gray-50); + background-color: var(--spectrum-fuchsia-background-color-default); +} + +.spectrum-Badge--indigo { + color: var(--spectrum-gray-50); + background-color: var(--spectrum-indigo-background-color-default); +} + +.spectrum-Badge--magenta { + color: var(--spectrum-gray-50); + background-color: var(--spectrum-magenta-background-color-default); +} + +.spectrum-Badge--purple { + color: var(--spectrum-gray-50); + background-color: var(--spectrum-purple-background-color-default); +} diff --git a/spectrum-css-temp/components/badge/vars.css b/spectrum-css-temp/components/badge/vars.css new file mode 100644 index 00000000000..ca1e08522d8 --- /dev/null +++ b/spectrum-css-temp/components/badge/vars.css @@ -0,0 +1,14 @@ +/* + * Copyright 2020 Adobe. All rights reserved. + * This file is licensed to you under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. You may obtain a copy + * of the License at http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS + * OF ANY KIND, either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + */ + +@import './index.css'; +@import './skin.css'; diff --git a/spectrum-css-temp/components/banner/index.css b/spectrum-css-temp/components/banner/index.css new file mode 100644 index 00000000000..67918153b1d --- /dev/null +++ b/spectrum-css-temp/components/banner/index.css @@ -0,0 +1,31 @@ +/* +Copyright 2019 Adobe. All rights reserved. +This file is licensed to you under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. You may obtain a copy +of the License at http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under +the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS +OF ANY KIND, either express or implied. See the License for the specific language +governing permissions and limitations under the License. +*/ + +@import '../commons/index.css'; + +.spectrum-Banner { + display: inline-block; + border-radius: var(--spectrum-banner-border-radius); + padding: var(--spectrum-banner-padding-y) var(--spectrum-banner-padding-x); + font-size: var(--spectrum-banner-text-size); + line-height: var(--spectrum-banner-text-line-height); +} + +.spectrum-Banner-header { + font-weight: bold; +} + +.spectrum-Banner--corner { + position: absolute; + top: -10px; + right: -10px; +} diff --git a/spectrum-css-temp/components/banner/skin.css b/spectrum-css-temp/components/banner/skin.css new file mode 100644 index 00000000000..588e6887e56 --- /dev/null +++ b/spectrum-css-temp/components/banner/skin.css @@ -0,0 +1,27 @@ +/* +Copyright 2019 Adobe. All rights reserved. +This file is licensed to you under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. You may obtain a copy +of the License at http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under +the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS +OF ANY KIND, either express or implied. See the License for the specific language +governing permissions and limitations under the License. +*/ + +.spectrum-Banner { + color: var(--spectrum-banner-text-color); +} + +.spectrum-Banner--info { + background-color: var(--spectrum-banner-info-background-color); +} + +.spectrum-Banner--warning { + background-color: var(--spectrum-banner-warning-background-color); +} + +.spectrum-Banner--error { + background-color: var(--spectrum-banner-error-background-color); +} diff --git a/spectrum-css-temp/components/banner/vars.css b/spectrum-css-temp/components/banner/vars.css new file mode 100644 index 00000000000..ca1e08522d8 --- /dev/null +++ b/spectrum-css-temp/components/banner/vars.css @@ -0,0 +1,14 @@ +/* + * Copyright 2020 Adobe. All rights reserved. + * This file is licensed to you under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. You may obtain a copy + * of the License at http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS + * OF ANY KIND, either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + */ + +@import './index.css'; +@import './skin.css'; diff --git a/spectrum-css-temp/components/barloader/index.css b/spectrum-css-temp/components/barloader/index.css new file mode 100644 index 00000000000..54eb8752e13 --- /dev/null +++ b/spectrum-css-temp/components/barloader/index.css @@ -0,0 +1,139 @@ +/* +Copyright 2019 Adobe. All rights reserved. +This file is licensed to you under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. You may obtain a copy +of the License at http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under +the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS +OF ANY KIND, either express or implied. See the License for the specific language +governing permissions and limitations under the License. +*/ + +@import '../commons/index.css'; + +.spectrum-BarLoader { + position: relative; + display: inline-flex; + flex-flow: row wrap; + justify-content: space-between; + align-items: center; + min-inline-size: var(--spectrum-global-dimension-static-size-600); + inline-size: var(--spectrum-barloader-large-width); + vertical-align: top; + isolation: isolate; + + &.spectrum-BarLoader--indeterminate { + max-inline-size: var(--spectrum-barloader-large-width); + } + + &.spectrum-BarLoader--indeterminate.spectrum-BarLoader--sideLabel { + .spectrum-BarLoader-track { + max-inline-size: var(--spectrum-barloader-large-width); + inline-size: 100%; + } + } +} + +.spectrum-BarLoader-track { + /* Visually apply border radius to child elements */ + overflow: hidden; + min-inline-size: var(--spectrum-global-dimension-static-size-600); + inline-size: 100%; + height: var(--spectrum-barloader-large-height); + border-radius: var(--spectrum-barloader-large-border-radius); + z-index: 1; /* to fix a weird webkit bug with rounded corners and masking */ +} + +.spectrum-BarLoader-fill { + border: none; + height: var(--spectrum-barloader-large-height); + + transition: width 1s; +} + +.spectrum-BarLoader-label, +.spectrum-BarLoader-percentage { + font-size: var(--spectrum-fieldlabel-text-size); + font-weight: var(--spectrum-fieldlabel-text-font-weight); + line-height: var(--spectrum-fieldlabel-text-line-height); + text-align: start; + margin-bottom: var(--spectrum-barloader-large-label-gap-y); +} + +.spectrum-BarLoader-label { + flex: 1 1 0%; +} + +.spectrum-BarLoader-percentage { + align-self: flex-start; + margin-inline-start: var(--spectrum-barloader-small-label-gap-x); +} + +.spectrum-BarLoader--sideLabel { + display: inline-flex; + flex-flow: row; + justify-content: space-between; + min-inline-size: fit-content; + + .spectrum-BarLoader-track { + inline-size: inherit; + } + + .spectrum-BarLoader-label { + margin-inline-end: var(--spectrum-barloader-large-label-gap-x); + margin-bottom: 0; + } + .spectrum-BarLoader-percentage { + order: 3; + text-align: end; + margin-inline-start: var(--spectrum-barloader-large-label-gap-x); + margin-bottom: 0; + } +} + +.spectrum-BarLoader--small { + min-inline-size: var(--spectrum-global-dimension-static-size-600); + + .spectrum-BarLoader-fill { + height: var(--spectrum-barloader-small-height); + } + + .spectrum-BarLoader-track { + height: var(--spectrum-barloader-small-height); + border-radius: var(--spectrum-barloader-small-border-radius); + } +} +.spectrum-BarLoader--indeterminate .spectrum-BarLoader-fill { + inline-size: var(--spectrum-barloader-large-indeterminate-fill-width); + position: relative; + animation-duration: var(--spectrum-barloader-large-indeterminate-duration); + animation-iteration-count: infinite; + animation-timing-function: var(--spectrum-barloader-large-indeterminate-animation-ease); + will-change: transform; + + [dir='ltr'] & { + animation-name: indeterminate-loop-ltr; + } + [dir='rtl'] & { + animation-name: indeterminate-loop-rtl; + } +} + +@keyframes indeterminate-loop-ltr { + from { + transform: translate(calc(var(--spectrum-barloader-large-indeterminate-fill-width) * -1)); + } + to { + transform: translate(var(--spectrum-barloader-large-width)); + } +} + +@keyframes indeterminate-loop-rtl { + from { + transform: translate(var(--spectrum-barloader-large-width)); + } + to { + transform: translate(calc(var(--spectrum-barloader-large-width) * -1)); + } +} diff --git a/spectrum-css-temp/components/barloader/skin.css b/spectrum-css-temp/components/barloader/skin.css new file mode 100644 index 00000000000..3954872cc52 --- /dev/null +++ b/spectrum-css-temp/components/barloader/skin.css @@ -0,0 +1,98 @@ +/* +Copyright 2019 Adobe. All rights reserved. +This file is licensed to you under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. You may obtain a copy +of the License at http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under +the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS +OF ANY KIND, either express or implied. See the License for the specific language +governing permissions and limitations under the License. +*/ + +.spectrum-BarLoader { + --spectrum-barloader-large-track-fill-color: var(--spectrum-accent-color-900); + --spectrum-barloader-static-black-track-color: rgba(0, 0, 0, 0.25); + --spectrum-barloader-static-black-fill-color: var(--spectrum-global-color-static-black); + + .spectrum-BarLoader-fill { + background: var(--spectrum-barloader-large-track-fill-color); + } + + .spectrum-BarLoader-track { + background-color: var(--spectrum-barloader-large-track-color); + } + + &.spectrum-BarLoader--overBackground, + &.spectrum-BarLoader--staticWhite { + .spectrum-BarLoader-fill { + background: var(--spectrum-barloader-large-over-background-track-fill-color); + } + + .spectrum-BarLoader-label, + .spectrum-BarLoader-percentage { + color: var(--spectrum-barloader-large-over-background-track-fill-color); + } + + .spectrum-BarLoader-track { + background-color: var(--spectrum-barloader-large-over-background-track-color); + } + } + /* TODO: use semantic tokens or spectrum variables when available */ + &.spectrum-BarLoader--staticBlack { + .spectrum-BarLoader-track { + background-color: var(--spectrum-barloader-static-black-track-color); + } + + .spectrum-BarLoader-label, + .spectrum-BarLoader-percentage { + color: var(--spectrum-barloader-static-black-fill-color); + } + + .spectrum-BarLoader-fill { + background: var(--spectrum-barloader-static-black-fill-color); + } + } + &.is-positive { + .spectrum-BarLoader-fill { + background: var(--spectrum-meter-large-track-color-positive); + } + } + &.is-warning { + .spectrum-BarLoader-fill { + background: var(--spectrum-meter-large-track-color-warning); + } + } + &.is-critical { + .spectrum-BarLoader-fill { + background: var(--spectrum-meter-large-track-color-critical); + } + } +} +.spectrum-BarLoader-label, +.spectrum-BarLoader-percentage { + color: var(--spectrum-fieldlabel-text-color); +} +.spectrum-BarLoader-label, +.spectrum-BarLoader-percentage { + color: var(--spectrum-fieldlabel-text-color); +} +.spectrum-BarLoader-label, +.spectrum-BarLoader-percentage { + color: var(--spectrum-fieldlabel-text-color); +} +@media (forced-colors: active) { + .spectrum-BarLoader-track { + forced-color-adjust: none; + --spectrum-barloader-large-track-fill-color: ButtonText; + --spectrum-barloader-large-over-background-track-fill-color: ButtonText; + --spectrum-barloader-large-over-background-track-color: ButtonFace; + --spectrum-barloader-static-black-track-color: ButtonFace; + --spectrum-barloader-static-black-fill-color: ButtonText; + --spectrum-meter-large-track-color-positive: ButtonText; + --spectrum-meter-large-track-color-warning: ButtonText; + --spectrum-meter-large-track-color-critical: ButtonText; + --spectrum-barloader-large-track-color: ButtonFace; + border: 1px solid ButtonText; + } +} diff --git a/spectrum-css-temp/components/barloader/vars.css b/spectrum-css-temp/components/barloader/vars.css new file mode 100644 index 00000000000..ca1e08522d8 --- /dev/null +++ b/spectrum-css-temp/components/barloader/vars.css @@ -0,0 +1,14 @@ +/* + * Copyright 2020 Adobe. All rights reserved. + * This file is licensed to you under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. You may obtain a copy + * of the License at http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS + * OF ANY KIND, either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + */ + +@import './index.css'; +@import './skin.css'; diff --git a/spectrum-css-temp/components/breadcrumb/index.css b/spectrum-css-temp/components/breadcrumb/index.css new file mode 100644 index 00000000000..c0869f7b586 --- /dev/null +++ b/spectrum-css-temp/components/breadcrumb/index.css @@ -0,0 +1,184 @@ +/* +Copyright 2019 Adobe. All rights reserved. +This file is licensed to you under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. You may obtain a copy +of the License at http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under +the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS +OF ANY KIND, either express or implied. See the License for the specific language +governing permissions and limitations under the License. +*/ + +@import '../commons/index.css'; + +:root { + --spectrum-breadcrumb-separator-icon-position-adjustment: var(--spectrum-global-dimension-size-10); +} + +.spectrum-Breadcrumbs { + display: flex; + justify-content: flex-start; + list-style-type: none; + flex-wrap: nowrap; + flex-grow: 1; + flex-shrink: 0; + flex-basis: 0%; + + margin: 0; + padding: 0; +} + +.spectrum-Breadcrumbs-itemSeparator { + position: relative; + + /* Fix alignment, it's not quite centered */ + top: xvar(--spectrum-breadcrumb-separator-icon-position-adjustment); + + width: var(--spectrum-breadcrumb-ui-icon-width); + height: var(--spectrum-breadcrumb-ui-icon-height); + + transform: scale(1); + + opacity: 1; + + &.is-reversed { + transform: scale(-1); + } +} + +.spectrum-Breadcrumbs-item { + display: inline-flex; + align-items: center; + justify-content: flex-start; + + box-sizing: border-box; + height: var(--spectrum-breadcrumb-list-height); + + position: relative; + + white-space: nowrap; + font-size: var(--spectrum-breadcrumb-item-text-size); + font-weight: var(--spectrum-breadcrumb-item-text-font-weight); + line-height: var(--spectrum-breadcrumb-item-text-line-height); + + &:last-of-type { + font-weight: var(--spectrum-breadcrumb-title-text-font-weight); + + .spectrum-Breadcrumbs-itemSeparator { + display: none; + } + } + + &:not(:first-child) { + > .spectrum-Breadcrumbs-actionButton { + margin-inline-start: var(--spectrum-breadcrumb-button-gap); + } + } + > .spectrum-Breadcrumbs-actionButton { + margin-inline-end: var(--spectrum-breadcrumb-button-gap); + } + + /* last breadcrumb should truncate with an ellipsis */ + &:last-child { + overflow: hidden; + .spectrum-Breadcrumbs-itemLink { + overflow: hidden; + text-overflow: ellipsis; + } + } +} + +.spectrum-Breadcrumbs-itemLink { + cursor: default; + position: relative; + + line-height: var(--spectrum-breadcrumb-list-height); + vertical-align: middle; + + padding: 0 var(--spectrum-breadcrumb-item-padding-x); + height: var(--spectrum-breadcrumb-list-height); + + margin-inline-end: var(--spectrum-breadcrumb-item-margin-right); + + border-radius: var(--spectrum-breadcrumb-item-border-radius); + + outline: none; + + text-decoration: none; + /* override webkit and user agent h1 */ + margin-block-start: 0; + margin-block-end: 0; + font-size: inherit; + + &:not([aria-disabled]) { + cursor: pointer; + + &:hover, + &:focus-visible { + text-decoration: underline; + } + } +} + + +.spectrum-Breadcrumbs-item.is-dragged .spectrum-Breadcrumbs-itemLink:before, +.spectrum-Breadcrumbs-itemLink:focus-visible:before { + position: absolute; + top: 0; + inset-inline-start: 0; + + box-sizing: border-box; + display: block; + width: 100%; + height: 100%; + + border-width: var(--spectrum-breadcrumb-item-border-size-key-focus); + border-style: solid; + border-radius: var(--spectrum-breadcrumb-item-border-radius); + + content: ''; + pointer-events: none; +} + +.spectrum-Breadcrumbs--small { + .spectrum-Breadcrumbs-item { + font-size: var(--spectrum-breadcrumb-multiline-item-text-size); + } +} + +.spectrum-Breadcrumbs--medium { + .spectrum-Breadcrumbs-item { + font-size: var(--spectrum-breadcrumb-compact-item-text-size); + } +} + +.spectrum-Breadcrumbs--multiline { + flex-wrap: wrap; + + .spectrum-Breadcrumbs-item { + &:last-of-type { + height: auto; + + flex: 0 1 100%; + + margin-top: var(--spectrum-breadcrumb-multiline-title-margin-top); + + font-size: var(--spectrum-breadcrumb-multiline-title-text-size); + font-weight: var(--spectrum-breadcrumb-multiline-title-text-font-weight); + line-height: var(--spectrum-breadcrumb-multiline-title-text-line-height); + + .spectrum-Breadcrumbs-itemLink { + height: auto; + text-decoration: none; + } + } + + .spectrum-Heading--pageTitle { + margin: 0; + + font-size: inherit; + font-weight: inherit; + } + } +} diff --git a/spectrum-css-temp/components/breadcrumb/skin.css b/spectrum-css-temp/components/breadcrumb/skin.css new file mode 100644 index 00000000000..e37172c93b0 --- /dev/null +++ b/spectrum-css-temp/components/breadcrumb/skin.css @@ -0,0 +1,108 @@ +/* +Copyright 2019 Adobe. All rights reserved. +This file is licensed to you under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. You may obtain a copy +of the License at http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under +the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS +OF ANY KIND, either express or implied. See the License for the specific language +governing permissions and limitations under the License. +*/ + +.spectrum-Breadcrumbs-item { + color: var(--spectrum-breadcrumb-text-color); + + &.is-dragged { + .spectrum-Breadcrumbs-itemLink { + color: var(--spectrum-breadcrumb-item-text-color-drop); + background-color: var(--spectrum-breadcrumb-item-background-color-drop); + + &:before { + border-color: var(--spectrum-breadcrumb-item-border-color-drop); + } + } + } + + .spectrum-Breadcrumbs-itemSeparator { + color: var(--spectrum-breadcrumb-ui-icon-color); + } + + .spectrum-Breadcrumbs-itemLink { + color: inherit; + + &:hover { + color: var(--spectrum-breadcrumb-text-color-hover); + } + + &:focus-visible { + color: var(--spectrum-breadcrumb-text-color-key-focus); + + &:before { + border-color: var(--spectrum-breadcrumb-item-border-color-key-focus); + } + } + + &:active { + color: var(--spectrum-breadcrumb-text-color-down); + border-bottom: 0; + } + + &.is-disabled { + color: var(--spectrum-label-text-color-disabled); + } + } + + &.is-selected, + &:last-of-type { + color: var(--spectrum-breadcrumb-text-color-down); + } + + &.is-selected { + ~ .spectrum-Breadcrumb { + &:last-of-type { + color: var(--spectrum-breadcrumb-text-color); + } + } + .spectrum-Breadcrumbs-itemLink { + &:focus-visible { + color: var(--spectrum-breadcrumb-text-color-down); + border-bottom: 0; + } + } + } +} +@media (forced-colors: active) { + .spectrum-Breadcrumbs-item { + --spectrum-breadcrumb-item-border-color-drop: LinkText; + --spectrum-breadcrumb-item-border-color-key-focus: CanvasText; + --spectrum-breadcrumb-item-text-color-drop: LinkText; + --spectrum-breadcrumb-text-color: LinkText; + --spectrum-breadcrumb-text-color-down: CanvasText; + --spectrum-breadcrumb-text-color-hover: LinkText; + --spectrum-breadcrumb-text-color-key-focus: LinkText; + --spectrum-breadcrumb-ui-icon-color: CanvasText; + --spectrum-label-text-color-disabled: GrayText; + /* Override the selected to be the Standard Text color */ + &.is-selected, + &:last-of-type { + color: var(--spectrum-breadcrumb-text-color-down); + .spectrum-Breadcrumbs-itemLink { + &:hover { + color: var(--spectrum-breadcrumb-text-color-down); + } + } + } + /* Make links stay link color when clicked and disabled links remain disabled color */ + .spectrum-Breadcrumbs-itemLink { + &:active { + color: var(--spectrum-breadcrumb-text-color); + } + &.is-disabled { + &:active { + color: var(--spectrum-label-text-color-disabled); + } + } + } + } +} diff --git a/spectrum-css-temp/components/breadcrumb/vars.css b/spectrum-css-temp/components/breadcrumb/vars.css new file mode 100644 index 00000000000..ca1e08522d8 --- /dev/null +++ b/spectrum-css-temp/components/breadcrumb/vars.css @@ -0,0 +1,14 @@ +/* + * Copyright 2020 Adobe. All rights reserved. + * This file is licensed to you under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. You may obtain a copy + * of the License at http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS + * OF ANY KIND, either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + */ + +@import './index.css'; +@import './skin.css'; diff --git a/spectrum-css-temp/components/button/index.css b/spectrum-css-temp/components/button/index.css new file mode 100644 index 00000000000..5c7210a8d75 --- /dev/null +++ b/spectrum-css-temp/components/button/index.css @@ -0,0 +1,382 @@ +/* +Copyright 2019 Adobe. All rights reserved. +This file is licensed to you under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. You may obtain a copy +of the License at http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under +the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS +OF ANY KIND, either express or implied. See the License for the specific language +governing permissions and limitations under the License. +*/ + +@import '../commons/index.css'; + +:root { + /* Todo: fix in DNA, should have been zero */ + --spectrum-fieldbutton-quiet-border-size: 0; + --spectrum-fieldbutton-disabled-border-size: 0; + --spectrum-fieldbutton-quiet-margin: 0; + --spectrum-fieldbutton-quiet-padding: 0; + + /* Hardcoded for wrapping study, needs to be in DNA */ + --spectrum-button-padding-y: var(--spectrum-global-dimension-size-50); + --spectrum-button-line-height: 1.3; +} + +.spectrum-BaseButton { + /* Contain halo */ + position: relative; + + display: inline-flex; + box-sizing: border-box; + + align-items: center; + justify-content: center; + + /* Show the button overflow in Edge. */ + overflow: visible; + + /* Remove button the margin in Firefox and Safari. */ + margin: 0; + + border-style: solid; + border-radius: var(--spectrum-button-border-radius); + border-width: var(--spectrum-button-border-width); + --spectrum-focus-ring-border-radius: var(--spectrum-button-border-radius); + --spectrum-focus-ring-border-size: var(--spectrum-button-border-width); + --spectrum-focus-ring-gap: var(--spectrum-alias-focus-ring-gap); + --spectrum-focus-ring-size: var(--spectrum-button-primary-focus-ring-size-key-focus); + + /* Remove the inheritance of text transform on button in Edge, Firefox, and IE. */ + text-transform: none; + -webkit-font-smoothing: antialiased; + /* Font smoothing for Firefox */ + -moz-osx-font-smoothing: grayscale; + + &button { + /* Correct the inability to style clickable types in iOS and Safari. */ + -webkit-appearance: button; + } + + /* Adjacent buttons should be aligned correctly */ + vertical-align: top; + + transition: background var(--spectrum-global-animation-duration-100) ease-out, + border-color var(--spectrum-global-animation-duration-100) ease-out, + color var(--spectrum-global-animation-duration-100) ease-out, + box-shadow var(--spectrum-global-animation-duration-100) ease-out; + + text-decoration: none; + + composes: i18nFontFamily; + + line-height: var(--spectrum-button-line-height); + + user-select: none; + -webkit-user-select: none; + touch-action: none; /* prevent touch scrolling on buttons */ + + cursor: default; + + isolation: isolate; + + &:focus { + outline: none; + } + &:focus-visible { + z-index: 3; + } + + /* Fix Firefox */ + &::-moz-focus-inner { + border: 0; + + /* Remove the inner border and padding for button in Firefox. */ + border-style: none; + padding: 0; + + /* Use uppercase PX so values don't get converted to rem */ + margin-block-start: -2PX; + margin-block-end: -2PX; + } + + &:disabled, + &.is-disabled { + cursor: default; + } + + .spectrum-Icon { + max-block-size: 100%; + flex-shrink: 0; + order: 0; /* always be before the label, regardless of DOM order */ + + transition: background var(--spectrum-global-animation-duration-100) ease-out, + fill var(--spectrum-global-animation-duration-100) ease-out; + box-sizing: initial; + } +} + +.spectrum-Button { + composes: spectrum-BaseButton spectrum-FocusRing; + + border-style: solid; + --spectrum-button-border-radius: var(--spectrum-button-primary-border-radius); + --spectrum-button-border-width: var(--spectrum-button-primary-border-size); + + min-block-size: var(--spectrum-button-primary-height); + block-size: 0%; + min-inline-size: var(--spectrum-button-primary-min-width); + + padding: var(--spectrum-button-padding-y) calc(var(--spectrum-button-primary-padding-x) - var(--spectrum-button-primary-border-size)); + + /* @hack: fix button text vertical alignment at 14px */ + padding-block-end: calc(var(--spectrum-button-padding-y) + 1px); + padding-block-start: calc(var(--spectrum-button-padding-y) - 1px); + + font-size: var(--spectrum-button-primary-text-size); + font-weight: var(--spectrum-button-primary-text-font-weight); + + &:hover, + &:active { + box-shadow: none; + } + + /* there should be space between the icon and text no matter the DOM order */ + .spectrum-Icon + .spectrum-Button-label { + margin-inline-start: var(--spectrum-button-primary-text-gap); + } + + .spectrum-Button-label + .spectrum-Icon { + margin-inline-end: var(--spectrum-button-primary-text-gap); + } + + &.spectrum-Button--iconOnly { + min-inline-size: unset; + padding: var(--spectrum-global-dimension-size-65); + } + + &.spectrum-Button--pending { + .spectrum-Button-circleLoader { + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%, -50%); + } + + .spectrum-Button-label, + .spectrum-Icon { + visibility: hidden; + } + } +} + +a.spectrum-Button, +a.spectrum-ActionButton { + /* Remove appearance for clickable types in iOS and Safari. */ + -webkit-appearance: none; + /* Make link text not selectable */ + user-select: none; + cursor: pointer; +} + +.spectrum-ActionButton { + composes: spectrum-BaseButton spectrum-FocusRing; + position: relative; + + block-size: var(--spectrum-actionbutton-height); + min-inline-size: var(--spectrum-actionbutton-min-width); + + /* Use icon padding by default as it's smaller */ + padding: 0; + + --spectrum-button-border-radius: var(--spectrum-actionbutton-border-radius); + --spectrum-button-border-width: var(--spectrum-actionbutton-border-size); + + font-size: var(--spectrum-actionbutton-text-size); + font-weight: var(--spectrum-actionbutton-text-font-weight); + + /* icon should always have padding at the start */ + .spectrum-Icon { + padding-inline-start: var(--spectrum-actionbutton-icon-padding-x); + } + + /* label should always have padding at the end */ + .spectrum-ActionButton-label { + padding-inline-end: var(--spectrum-actionbutton-text-padding-x); + } + + /* icon + text buttons should have padding between the text and icon no matter the order */ + .spectrum-Icon + .spectrum-ActionButton-label { + padding-inline-start: var(--spectrum-actionbutton-icon-padding-x); + } + + .spectrum-ActionButton-label:not([hidden]) + .spectrum-Icon { + padding-inline-end: var(--spectrum-actionbutton-icon-padding-x); + } + + /* text only buttons should have padding at the start */ + .spectrum-ActionButton-label:only-child, + .spectrum-ActionButton-hold + .spectrum-ActionButton-label:last-child { + padding-inline-start: var(--spectrum-actionbutton-text-padding-x); + } + + /* icon only buttons should have padding at the end */ + .spectrum-Icon:only-child, + .spectrum-ActionButton-hold + .spectrum-Icon:last-child { + padding-inline-end: var(--spectrum-actionbutton-icon-padding-x); + } +} + +.spectrum-ActionButton-hold { + position: absolute; + inset-inline-end: var(--spectrum-actionbutton-hold-icon-padding-right); + inset-block-end: var(--spectrum-actionbutton-hold-icon-padding-bottom); +} + +[dir='rtl'] .spectrum-ActionButton-hold { + transform: rotate(90deg); +} + +.spectrum-ActionButton-label, +.spectrum-Button-label { + align-self: center; + justify-self: center; + order: 1; /* always be after the icon, regardless of DOM order */ + + /* Fixes horizontal alignment of text in anchor buttons */ + text-align: center; + + /* @safari10 Workaround for https://bugs.webkit.org/show_bug.cgi?id=169700 */ + inline-size: 100%; + + &:empty { + display: none; + } +} + + +.spectrum-ActionButton-label { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.spectrum-ActionButton--quiet { + border-width: var(--spectrum-actionbutton-quiet-border-size); + border-radius: var(--spectrum-actionbutton-quiet-border-radius); + + font-size: var(--spectrum-actionbutton-quiet-text-size); + font-weight: var(--spectrum-actionbutton-quiet-text-font-weight); +} + +.spectrum-LogicButton { + composes: spectrum-BaseButton spectrum-FocusRing; + + block-size: var(--spectrum-logicbutton-and-height); + padding: var(--spectrum-logicbutton-and-padding-x); + + --spectrum-button-border-width: var(--spectrum-logicbutton-and-border-size); + --spectrum-button-border-radius: var(--spectrum-logicbutton-and-border-radius); + + font-size: var(--spectrum-logicbutton-and-text-size); + font-weight: var(--spectrum-logicbutton-and-text-font-weight); + line-height: 0; +} + +.spectrum-FieldButton { + composes: spectrum-BaseButton spectrum-FocusRing; + + position: relative; + block-size: var(--spectrum-dropdown-height); + + padding: 0 var(--spectrum-dropdown-padding-x); + + font-family: inherit; + font-weight: normal; + font-size: var(--spectrum-dropdown-text-size); + line-height: normal; + -webkit-font-smoothing: initial; + + cursor: default; + outline: none; + + --spectrum-focus-ring-gap: var(--spectrum-alias-input-focusring-gap); + --spectrum-focus-ring-size: var(--spectrum-alias-input-focusring-size); +} + +.spectrum-FieldButton { + margin: 0; + padding-block: 0; + padding-inline: var(--spectrum-dropdown-padding-x); + + --spectrum-button-border-width: var(--spectrum-dropdown-border-size); + --spectrum-button-border-radius: var(--spectrum-border-radius); + border-style: solid; + + transition: background-color var(--spectrum-global-animation-duration-100), + box-shadow var(--spectrum-global-animation-duration-100), + border-color var(--spectrum-global-animation-duration-100); + + &:disabled, + &.is-disabled { + border-width: var(--spectrum-fieldbutton-disabled-border-size); + cursor: default; + } + + &.is-open { + border-width: var(--spectrum-dropdown-border-size); + } +} + +.spectrum-FieldButton--quiet { + composes: spectrum-FocusRing--quiet; + + margin: var(--spectrum-fieldbutton-quiet-margin); + padding: var(--spectrum-fieldbutton-quiet-padding); + + --spectrum-button-border-width: var(--spectrum-fieldbutton-quiet-border-size); + --spectrum-button-border-radius: var(--spectrum-fieldbutton-quiet-border-radius); + --spectrum-focus-ring-size: var(--spectrum-alias-focus-ring-size); + &:disabled, + &.is-disabled { + &:focus-visible { + box-shadow: none; + } + } +} + +.spectrum-ClearButton { + composes: spectrum-BaseButton spectrum-FocusRing; + + inline-size: var(--spectrum-clearbutton-medium-width); + block-size: var(--spectrum-clearbutton-medium-height); + + --spectrum-button-border-radius: 100%; + --spectrum-button-border-width: 0px; + + padding: 0; + margin: 0; + + border: none; + + > .spectrum-Icon { + /* @safari10 Workaround for https://bugs.webkit.org/show_bug.cgi?id=169700 */ + margin-block: 0; + margin-inline: auto; + } +} + +@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) { + .spectrum-ClearButton { + > .spectrum-Icon { + /* @ie11 Workaround for regression caused by fix for https://bugs.webkit.org/show_bug.cgi?id=169700 */ + margin: 0; + } + } +} + +.spectrum-ClearButton--small { + inline-size: var(--spectrum-clearbutton-small-width); + block-size: var(--spectrum-clearbutton-small-height); +} diff --git a/spectrum-css-temp/components/button/skin.css b/spectrum-css-temp/components/button/skin.css new file mode 100644 index 00000000000..8d7ed14f1d8 --- /dev/null +++ b/spectrum-css-temp/components/button/skin.css @@ -0,0 +1,1057 @@ +/* +Copyright 2019 Adobe. All rights reserved. +This file is licensed to you under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. You may obtain a copy +of the License at http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under +the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS +OF ANY KIND, either express or implied. See the License for the specific language +governing permissions and limitations under the License. +*/ + +:root { + /* Overridden because of the way we draw focus rings */ + --spectrum-actionbutton-quiet-border-size-key-focus: 1px; + /* Interactions with overbackground button should match background. Not a DNA token, overridden in WHCM. */ + --spectrum-button-over-background-color: inherit; + + --spectrum-actionbutton-background-color-selected: var(--spectrum-alias-toggle-color-selected); + --spectrum-actionbutton-background-color-selected-hover: var(--spectrum-alias-toggle-color-selected-hover); + --spectrum-actionbutton-background-color-selected-key-focus: var(--spectrum-alias-toggle-color-selected-key-focus); + --spectrum-actionbutton-background-color-selected-down: var(--spectrum-alias-toggle-color-selected-down); + --spectrum-actionbutton-border-color-selected: var(--spectrum-actionbutton-background-color-selected); + --spectrum-actionbutton-border-color-selected-hover: var(--spectrum-actionbutton-background-color-selected-hover); + --spectrum-actionbutton-border-color-selected-key-focus: var(--spectrum-actionbutton-background-color-selected-key-focus); + --spectrum-actionbutton-border-color-selected-down: var(--spectrum-actionbutton-background-color-selected-down); + --spectrum-actionbutton-text-color-selected: var(--spectrum-gray-50); + --spectrum-actionbutton-text-color-selected-hover: var(--spectrum-gray-50); + --spectrum-actionbutton-text-color-selected-key-focus: var(--spectrum-gray-50); + --spectrum-actionbutton-text-color-selected-down: var(--spectrum-gray-50); + --spectrum-actionbutton-icon-color-selected: var(--spectrum-gray-50); + --spectrum-actionbutton-icon-color-selected-hover: var(--spectrum-gray-50); + --spectrum-actionbutton-icon-color-selected-key-focus: var(--spectrum-gray-50); + --spectrum-actionbutton-icon-color-selected-down: var(--spectrum-gray-50); + + --spectrum-actionbutton-emphasized-background-color-selected: var(--spectrum-accent-background-color-default); + --spectrum-actionbutton-emphasized-background-color-selected-hover: var(--spectrum-accent-background-color-hover); + --spectrum-actionbutton-emphasized-background-color-selected-key-focus: var(--spectrum-accent-background-color-key-focus); + --spectrum-actionbutton-emphasized-background-color-selected-down: var(--spectrum-accent-background-color-down); + --spectrum-actionbutton-emphasized-border-color-selected: var(--spectrum-actionbutton-emphasized-background-color-selected); + --spectrum-actionbutton-emphasized-border-color-selected-hover: var(--spectrum-actionbutton-emphasized-background-color-selected-hover); + --spectrum-actionbutton-emphasized-border-color-selected-key-focus: var(--spectrum-actionbutton-emphasized-background-color-selected-key-focus); + --spectrum-actionbutton-emphasized-border-color-selected-down: var(--spectrum-actionbutton-emphasized-background-color-selected-down); + + /* TBD on new tokens. This passes contrast for now. */ + --spectrum-logicbutton-and-background-color: var(--spectrum-global-color-static-blue-600); + --spectrum-logicbutton-and-background-color-hover: var(--spectrum-global-color-static-blue-700); + --spectrum-logicbutton-and-border-color: var(--spectrum-logicbutton-and-background-color); + --spectrum-logicbutton-and-border-color-hover: var(--spectrum-logicbutton-and-background-color-hover); + --spectrum-logicbutton-or-background-color: var(--spectrum-global-color-static-magenta-500); + --spectrum-logicbutton-or-background-color-hover: var(--spectrum-global-color-static-magenta-600); + --spectrum-logicbutton-or-border-color: var(--spectrum-logicbutton-or-background-color); + --spectrum-logicbutton-or-border-color-hover: var(--spectrum-logicbutton-or-background-color-hover); +} + +.spectrum-ClearButton { + background-color: var(--spectrum-clearbutton-medium-background-color); + color: var(--spectrum-clearbutton-medium-icon-color); + + .spectrum-Icon { + fill: var(--spectrum-clearbutton-medium-icon-color); + } + + &:hover { + background-color: var(--spectrum-clearbutton-medium-background-color-hover); + color: var(--spectrum-clearbutton-medium-icon-color-hover); + + .spectrum-Icon { + fill: var(--spectrum-clearbutton-medium-icon-color-hover); + } + } + + &.is-active { + background-color: var(--spectrum-clearbutton-medium-background-color-down); + color: var(--spectrum-clearbutton-medium-icon-color-down); + + .spectrum-Icon { + fill: var(--spectrum-clearbutton-medium-icon-color-down); + } + } + + &:focus-visible { + background-color: var(--spectrum-clearbutton-medium-background-color-key-focus); + color: var(--spectrum-clearbutton-medium-icon-color-key-focus); + + .spectrum-Icon { + fill: var(--spectrum-clearbutton-medium-icon-color-key-focus); + } + } + + &:disabled, + &.is-disabled { + background-color: var(--spectrum-clearbutton-medium-background-color-disabled); + color: var(--spectrum-clearbutton-medium-icon-color-disabled); + + .spectrum-Icon { + fill: var(--spectrum-clearbutton-medium-icon-color-disabled); + } + } +} + +.spectrum-ClearButton--overBackground { + --spectrum-clearbutton-medium-background-color: transparent; + --spectrum-clearbutton-medium-background-color-hover: rgba(255, 255, 255, 0.1); + --spectrum-clearbutton-medium-background-color-key-focus: rgba(255, 255, 255, 0.1); + --spectrum-clearbutton-medium-background-color-down: rgba(255, 255, 255, 0.15); + --spectrum-clearbutton-medium-background-color-disabled: transparent; + --spectrum-clearbutton-medium-icon-color: white; + --spectrum-clearbutton-medium-icon-color-hover: white; + --spectrum-clearbutton-medium-icon-color-down: white; + --spectrum-clearbutton-medium-icon-color-key-focus: white; + --spectrum-clearbutton-medium-icon-color-disabled: rgba(255, 255, 255, 0.55); + --spectrum-focus-ring-color: white; +} + +.spectrum-Button { + &[data-style=fill] { + --spectrum-button-text-color: white; + --spectrum-button-text-color-hover: var(--spectrum-button-text-color); + --spectrum-button-text-color-down: var(--spectrum-button-text-color); + --spectrum-button-text-color-key-focus: var(--spectrum-button-text-color); + --spectrum-button-text-color-disabled: var(--spectrum-alias-text-color-disabled); + --spectrum-button-color-disabled: var(--spectrum-alias-background-color-disabled); + + /* high contrast overrides all colors */ + /* xvar is passed through. without it, some postcss plugin breaks variable fallback... */ + background-color: xvar(--spectrum-high-contrast-button-text, var(--spectrum-button-color)); + border-color: transparent; + color: xvar(--spectrum-high-contrast-button-face, var(--spectrum-button-text-color)); + + &:hover { + background-color: xvar(--spectrum-high-contrast-highlight, var(--spectrum-button-color-hover)); + color: xvar(--spectrum-high-contrast-button-face, var(--spectrum-button-text-color-hover)); + } + + &:focus-visible { + background-color: xvar(--spectrum-high-contrast-highlight, var(--spectrum-button-color-key-focus)); + color: xvar(--spectrum-high-contrast-button-face, var(--spectrum-button-text-color-key-focus)); + } + + &.is-active { + background-color: xvar(--spectrum-high-contrast-highlight, var(--spectrum-button-color-down)); + color: xvar(--spectrum-high-contrast-button-face, var(--spectrum-button-text-color-down)); + } + + &:disabled, + &.is-disabled { + background-color: xvar(--spectrum-high-contrast-button-face, var(--spectrum-button-color-disabled)); + color: xvar(--spectrum-high-contrast-gray-text, var(--spectrum-button-text-color-disabled)); + } + } + + &[data-style=outline] { + --spectrum-button-text-color: var(--spectrum-button-color); + --spectrum-button-text-color-hover: var(--spectrum-button-color-hover); + --spectrum-button-text-color-down: var(--spectrum-button-color-down); + --spectrum-button-text-color-key-focus: var(--spectrum-button-color-key-focus); + --spectrum-button-text-color-disabled: var(--spectrum-alias-text-color-disabled); + --spectrum-button-color-disabled: var(--spectrum-alias-background-color-disabled); + + background-color: transparent; + border-color: xvar(--spectrum-high-contrast-button-text, var(--spectrum-button-color)); + color: xvar(--spectrum-high-contrast-button-text, var(--spectrum-button-text-color)); + + &:hover { + background-color: xvar(--spectrum-high-contrast-transparent, var(--spectrum-button-background-color-hover)); + border-color: xvar(--spectrum-high-contrast-highlight, var(--spectrum-button-color-hover)); + color: xvar(--spectrum-high-contrast-button-text, var(--spectrum-button-text-color-hover)); + } + + &:focus-visible { + background-color: xvar(--spectrum-high-contrast-transparent, var(--spectrum-button-background-color-key-focus)); + border-color: xvar(--spectrum-high-contrast-highlight, var(--spectrum-button-color-key-focus)); + color: xvar(--spectrum-high-contrast-button-text, var(--spectrum-button-text-color-key-focus)); + } + + &.is-active { + background-color: xvar(--spectrum-high-contrast-transparent, var(--spectrum-button-background-color-down)); + border-color: xvar(--spectrum-high-contrast-highlight, var(--spectrum-button-color-down)); + color: xvar(--spectrum-high-contrast-button-text, var(--spectrum-button-text-color-down)); + } + + &:disabled, + &.is-disabled { + background-color: transparent; + border-color: xvar(--spectrum-high-contrast-gray-text, var(--spectrum-button-color-disabled)); + color: xvar(--spectrum-high-contrast-gray-text, var(--spectrum-button-text-color-disabled)); + } + } + + &[data-static-color=white] { + --spectrum-focus-ring-color: white; + + &[data-variant=accent], + &[data-variant=negative], + &[data-variant=primary] { + &[data-style=fill] { + --spectrum-button-color: rgba(255, 255, 255, 0.9); + --spectrum-button-color-hover: white; + --spectrum-button-color-down: white; + --spectrum-button-color-key-focus: white; + --spectrum-button-color-disabled: rgba(255, 255, 255, 0.1); + --spectrum-button-text-color: black; + --spectrum-button-text-color-disabled: rgba(255, 255, 255, 0.55); + } + + &[data-style=outline] { + --spectrum-button-color: rgba(255, 255, 255, 0.9); + --spectrum-button-color-hover: white; + --spectrum-button-color-down: white; + --spectrum-button-color-key-focus: white; + --spectrum-button-color-disabled: rgba(255, 255, 255, 0.25); + --spectrum-button-text-color: white; + --spectrum-button-text-color-hover: white; + --spectrum-button-text-color-down: white; + --spectrum-button-text-color-key-focus: white; + --spectrum-button-text-color-disabled: rgba(255, 255, 255, 0.55); + --spectrum-button-background-color-hover: rgba(255, 255, 255, 0.1); + --spectrum-button-background-color-down: rgba(255, 255, 255, 0.15); + --spectrum-button-background-color-key-focus: rgba(255, 255, 255, 0.1); + } + } + + &[data-variant=secondary] { + &[data-style=fill] { + --spectrum-button-color: rgba(255, 255, 255, 0.07); + --spectrum-button-color-hover: rgba(255, 255, 255, 0.1); + --spectrum-button-color-down: rgba(255, 255, 255, 0.15); + --spectrum-button-color-key-focus: rgba(255, 255, 255, 0.1); + --spectrum-button-color-disabled: rgba(255, 255, 255, 0.1); + --spectrum-button-text-color: white; + --spectrum-button-text-color-disabled: rgba(255, 255, 255, 0.55); + } + + &[data-style=outline] { + --spectrum-button-color: rgba(255, 255, 255, 0.25); + --spectrum-button-color-hover: rgba(255, 255, 255, 0.4); + --spectrum-button-color-down: rgba(255, 255, 255, 0.55); + --spectrum-button-color-key-focus: rgba(255, 255, 255, 0.4); + --spectrum-button-color-disabled: rgba(255, 255, 255, 0.25); + --spectrum-button-text-color: white; + --spectrum-button-text-color-hover: white; + --spectrum-button-text-color-down: white; + --spectrum-button-text-color-key-focus: white; + --spectrum-button-text-color-disabled: rgba(255, 255, 255, 0.55); + --spectrum-button-background-color-hover: rgba(255, 255, 255, 0.1); + --spectrum-button-background-color-down: rgba(255, 255, 255, 0.15); + --spectrum-button-background-color-key-focus: rgba(255, 255, 255, 0.1); + } + } + } + + &[data-static-color=black] { + --spectrum-focus-ring-color: black; + + &[data-variant=accent], + &[data-variant=negative], + &[data-variant=primary] { + &[data-style=fill] { + --spectrum-button-color: rgba(0, 0, 0, 0.9); + --spectrum-button-color-hover: black; + --spectrum-button-color-down: black; + --spectrum-button-color-key-focus: black; + --spectrum-button-color-disabled: rgba(0, 0, 0, 0.1); + --spectrum-button-text-color: white; + --spectrum-button-text-color-disabled: rgba(0, 0, 0, 0.55); + } + + &[data-style=outline] { + --spectrum-button-color: rgba(0, 0, 0, 0.9); + --spectrum-button-color-hover: black; + --spectrum-button-color-down: black; + --spectrum-button-color-key-focus: black; + --spectrum-button-color-disabled: rgba(0, 0, 0, 0.25); + --spectrum-button-text-color: black; + --spectrum-button-text-color-hover: black; + --spectrum-button-text-color-down: black; + --spectrum-button-text-color-key-focus: black; + --spectrum-button-text-color-disabled: rgba(0, 0, 0, 0.55); + --spectrum-button-background-color-hover: rgba(0, 0, 0, 0.1); + --spectrum-button-background-color-down: rgba(0, 0, 0, 0.15); + --spectrum-button-background-color-key-focus: rgba(0, 0, 0, 0.1); + } + } + + &[data-variant=secondary] { + &[data-style=fill] { + --spectrum-button-color: rgba(0, 0, 0, 0.07); + --spectrum-button-color-hover: rgba(0, 0, 0, 0.1); + --spectrum-button-color-down: rgba(0, 0, 0, 0.15); + --spectrum-button-color-key-focus: rgba(0, 0, 0, 0.1); + --spectrum-button-color-disabled: rgba(0, 0, 0, 0.1); + --spectrum-button-text-color: black; + --spectrum-button-text-color-disabled: rgba(0, 0, 0, 0.55); + } + + &[data-style=outline] { + --spectrum-button-color: rgba(0, 0, 0, 0.25); + --spectrum-button-color-hover: rgba(0, 0, 0, 0.4); + --spectrum-button-color-down: rgba(0, 0, 0, 0.55); + --spectrum-button-color-key-focus: rgba(0, 0, 0, 0.4); + --spectrum-button-color-disabled: rgba(0, 0, 0, 0.25); + --spectrum-button-text-color: black; + --spectrum-button-text-color-hover: black; + --spectrum-button-text-color-down: black; + --spectrum-button-text-color-key-focus: black; + --spectrum-button-text-color-disabled: rgba(0, 0, 0, 0.55); + --spectrum-button-background-color-hover: rgba(0, 0, 0, 0.1); + --spectrum-button-background-color-down: rgba(0, 0, 0, 0.15); + --spectrum-button-background-color-key-focus: rgba(0, 0, 0, 0.1); + } + } + } + + &:not([data-static-color]) { + &[data-variant=accent] { + &[data-style=fill] { + --spectrum-button-color: var(--spectrum-accent-background-color-default); + --spectrum-button-color-hover: var(--spectrum-accent-background-color-hover); + --spectrum-button-color-down: var(--spectrum-accent-background-color-down); + --spectrum-button-color-key-focus: var(--spectrum-accent-background-color-key-focus); + } + + &[data-style=outline] { + --spectrum-button-color: var(--spectrum-accent-color-900); + --spectrum-button-color-hover: var(--spectrum-accent-color-1000); + --spectrum-button-color-down: var(--spectrum-accent-color-1100); + --spectrum-button-color-key-focus: var(--spectrum-accent-color-1000); + --spectrum-button-background-color-hover: var(--spectrum-accent-color-200); + --spectrum-button-background-color-down: var(--spectrum-accent-color-300); + --spectrum-button-background-color-key-focus: var(--spectrum-accent-color-200); + } + } + + &[data-variant=negative] { + &[data-style=fill] { + --spectrum-button-color: var(--spectrum-negative-background-color-default); + --spectrum-button-color-hover: var(--spectrum-negative-background-color-hover); + --spectrum-button-color-down: var(--spectrum-negative-background-color-down); + --spectrum-button-color-key-focus: var(--spectrum-negative-background-color-key-focus); + } + + &[data-style=outline] { + --spectrum-button-color: var(--spectrum-red-900); + --spectrum-button-color-hover: var(--spectrum-red-1000); + --spectrum-button-color-down: var(--spectrum-red-1100); + --spectrum-button-color-key-focus: var(--spectrum-red-1000); + --spectrum-button-background-color-hover: var(--spectrum-red-200); + --spectrum-button-background-color-down: var(--spectrum-red-300); + --spectrum-button-background-color-key-focus: var(--spectrum-red-200); + } + } + + &[data-variant=primary] { + &[data-style=fill] { + --spectrum-button-color: var(--spectrum-neutral-background-color-default); + --spectrum-button-color-hover: var(--spectrum-neutral-background-color-hover); + --spectrum-button-color-down: var(--spectrum-neutral-background-color-down); + --spectrum-button-color-key-focus: var(--spectrum-neutral-background-color-key-focus); + } + + &[data-style=outline] { + --spectrum-button-color: var(--spectrum-gray-800); + --spectrum-button-color-hover: var(--spectrum-gray-900); + --spectrum-button-color-down: var(--spectrum-gray-900); + --spectrum-button-color-key-focus: var(--spectrum-gray-900); + --spectrum-button-background-color-hover: var(--spectrum-gray-300); + --spectrum-button-background-color-down: var(--spectrum-gray-400); + --spectrum-button-background-color-key-focus: var(--spectrum-gray-300); + } + } + + &[data-variant=secondary] { + --spectrum-button-text-color: var(--spectrum-gray-800); + --spectrum-button-text-color-hover: var(--spectrum-gray-900); + --spectrum-button-text-color-down: var(--spectrum-gray-900); + --spectrum-button-text-color-key-focus: var(--spectrum-gray-900); + + &[data-style=fill] { + --spectrum-button-color: var(--spectrum-gray-200); + --spectrum-button-color-hover: var(--spectrum-gray-300); + --spectrum-button-color-down: var(--spectrum-gray-400); + --spectrum-button-color-key-focus: var(--spectrum-gray-300); + } + + &[data-style=outline] { + --spectrum-button-color: var(--spectrum-gray-300); + --spectrum-button-color-hover: var(--spectrum-gray-400); + --spectrum-button-color-down: var(--spectrum-gray-500); + --spectrum-button-color-key-focus: var(--spectrum-gray-400); + --spectrum-button-background-color-hover: var(--spectrum-gray-300); + --spectrum-button-background-color-down: var(--spectrum-gray-400); + --spectrum-button-background-color-key-focus: var(--spectrum-gray-300); + } + } + } +} + +@media (forced-colors: active) { + .spectrum-Button, + .spectrum-ActionButton, + .spectrum-FieldButton { + forced-color-adjust: none; + + --spectrum-high-contrast-transparent: transparent; + --spectrum-high-contrast-button-face: ButtonFace; + --spectrum-high-contrast-button-text: ButtonText; + --spectrum-high-contrast-highlight: Highlight; + --spectrum-high-contrast-highlight-text: HighlightText; + --spectrum-high-contrast-gray-text: GrayText; + } + + .spectrum-Button, + .spectrum-ActionButton { + --spectrum-high-contrast-focus-ring-color: ButtonText; + } + + .spectrum-FieldButton { + --spectrum-high-contrast-focus-ring-color: Highlight; + } +} + +@media (forced-colors: active) { + .spectrum-Button--pending.is-disabled { + /* Force the border for WHCM */ + border-color: var(--spectrum-high-contrast-gray-text); + } +} + +.spectrum-ActionButton { + background-color: xvar(--spectrum-high-contrast-button-face, var(--spectrum-actionbutton-background-color)); + border-color: xvar(--spectrum-high-contrast-button-text, var(--spectrum-actionbutton-border-color)); + color: xvar(--spectrum-high-contrast-button-text, var(--spectrum-actionbutton-text-color)); + + .spectrum-Icon { + fill: xvar(--spectrum-high-contrast-button-text, var(--spectrum-actionbutton-icon-color)); + } + + .spectrum-ActionButton-hold { + fill: xvar(--spectrum-high-contrast-button-text, var(--spectrum-actionbutton-hold-icon-color)); + } + + &:hover { + background-color: xvar(--spectrum-high-contrast-button-face, var(--spectrum-actionbutton-background-color-hover)); + border-color: xvar(--spectrum-high-contrast-highlight, var(--spectrum-actionbutton-border-color-hover)); + color: xvar(--spectrum-high-contrast-button-text, var(--spectrum-actionbutton-text-color-hover)); + + .spectrum-Icon { + fill: xvar(--spectrum-high-contrast-button-text, var(--spectrum-actionbutton-icon-color-hover)); + } + + .spectrum-ActionButton-hold { + fill: var(--spectrum-actionbutton-hold-icon-color-hover); + } + } + + &:focus-visible { + background-color: xvar(--spectrum-high-contrast-button-face, var(--spectrum-actionbutton-background-color-key-focus)); + border-color: xvar(--spectrum-high-contrast-highlight, var(--spectrum-actionbutton-border-color-hover)); + color: xvar(--spectrum-high-contrast-button-text, var(--spectrum-actionbutton-text-color-key-focus)); + + .spectrum-Icon { + fill: xvar(--spectrum-high-contrast-button-text, var(--spectrum-actionbutton-icon-color-key-focus)); + } + + .spectrum-ActionButton-hold { + fill: xvar(--spectrum-high-contrast-button-text, var(--spectrum-actionbutton-hold-icon-color-key-focus)); + } + } + + &.is-active { + background-color: xvar(--spectrum-high-contrast-button-face, var(--spectrum-actionbutton-background-color-down)); + border-color: xvar(--spectrum-high-contrast-highlight, var(--spectrum-actionbutton-border-color-down)); + color: xvar(--spectrum-high-contrast-button-text, var(--spectrum-actionbutton-text-color-down)); + + .spectrum-ActionButton-hold { + fill: xvar(--spectrum-high-contrast-button-text, var(--spectrum-actionbutton-hold-icon-color-down)); + } + } + + &:disabled, + &.is-disabled { + background-color: xvar(--spectrum-high-contrast-button-face, var(--spectrum-actionbutton-background-color-disabled)); + border-color: xvar(--spectrum-high-contrast-gray-text, var(--spectrum-actionbutton-border-color-disabled)); + color: xvar(--spectrum-high-contrast-gray-text, var(--spectrum-actionbutton-text-color-disabled)); + + .spectrum-Icon { + fill: xvar(--spectrum-high-contrast-gray-text, var(--spectrum-actionbutton-icon-color-disabled)); + } + + .spectrum-ActionButton-hold { + fill: xvar(--spectrum-high-contrast-gray-text, var(--spectrum-actionbutton-hold-icon-color-disabled)); + } + } + + &.is-selected { + background-color: xvar(--spectrum-high-contrast-highlight, var(--spectrum-actionbutton-background-color-selected)); + border-color: xvar(--spectrum-high-contrast-highlight-text, var(--spectrum-actionbutton-border-color-selected)); + color: xvar(--spectrum-high-contrast-highlight-text, var(--spectrum-actionbutton-text-color-selected)); + + .spectrum-Icon { + fill: xvar(--spectrum-high-contrast-highlight-text, var(--spectrum-actionbutton-icon-color-selected)); + } + + &:hover { + background-color: xvar(--spectrum-high-contrast-highlight, var(--spectrum-actionbutton-background-color-selected-hover)); + border-color: xvar(--spectrum-high-contrast-highlight-text, var(--spectrum-actionbutton-border-color-selected-hover)); + color: xvar(--spectrum-high-contrast-highlight-text, var(--spectrum-actionbutton-text-color-selected-hover)); + + .spectrum-Icon { + fill: xvar(--spectrum-high-contrast-highlight-text, var(--spectrum-actionbutton-icon-color-selected-hover)); + } + } + + &:focus-visible { + background-color: xvar(--spectrum-high-contrast-highlight, var(--spectrum-actionbutton-background-color-selected-key-focus)); + border-color: xvar(--spectrum-high-contrast-highlight-text, var(--spectrum-actionbutton-border-color-selected-key-focus)); + color: xvar(--spectrum-high-contrast-highlight-text, var(--spectrum-actionbutton-text-color-selected-key-focus)); + + .spectrum-Icon { + fill: xvar(--spectrum-high-contrast-highlight-text, var(--spectrum-actionbutton-icon-color-selected-key-focus)); + } + } + + &.is-active { + background-color: xvar(--spectrum-high-contrast-highlight, var(--spectrum-actionbutton-background-color-selected-down)); + border-color: xvar(--spectrum-high-contrast-highlight-text, var(--spectrum-actionbutton-border-color-selected-down)); + color: xvar(--spectrum-high-contrast-highlight-text, var(--spectrum-actionbutton-text-color-selected-down)); + + .spectrum-Icon { + fill: xvar(--spectrum-high-contrast-highlight-text, var(--spectrum-actionbutton-icon-color-selected-down)); + } + } + + &:disabled, + &.is-disabled { + background-color: xvar(--spectrum-high-contrast-button-face, var(--spectrum-actionbutton-background-color-selected-disabled)); + border-color: xvar(--spectrum-high-contrast-gray-text, var(--spectrum-actionbutton-border-color-selected-disabled)); + color: xvar(--spectrum-high-contrast-gray-text, var(--spectrum-actionbutton-text-color-selected-disabled)); + + .spectrum-Icon { + fill: xvar(--spectrum-high-contrast-gray-text, var(--spectrum-actionbutton-icon-color-selected-disabled)); + } + } + } +} + +.spectrum-ActionButton--emphasized { + &.spectrum-ActionButton--quiet.is-selected, + &.is-selected { + background-color: xvar(--spectrum-high-contrast-highlight, var(--spectrum-actionbutton-emphasized-background-color-selected)); + border-color: xvar(--spectrum-high-contrast-highlight-text, var(--spectrum-actionbutton-emphasized-border-color-selected)); + color: xvar(--spectrum-high-contrast-highlight-text, var(--spectrum-actionbutton-emphasized-text-color-selected)); + + .spectrum-Icon { + fill: xvar(--spectrum-high-contrast-highlight-text, var(--spectrum-actionbutton-emphasized-icon-color-selected)); + } + + &:focus-visible { + background-color: xvar(--spectrum-high-contrast-highlight, var(--spectrum-actionbutton-emphasized-background-color-selected-key-focus)); + border-color: xvar(--spectrum-high-contrast-highlight-text, var(--spectrum-actionbutton-emphasized-border-color-selected-hover)); + color: xvar(--spectrum-high-contrast-highlight-text, var(--spectrum-actionbutton-emphasized-text-color-selected-key-focus)); + + .spectrum-Icon { + fill: xvar(--spectrum-high-contrast-highlight-text, var(--spectrum-actionbutton-emphasized-icon-color-selected-key-focus)); + } + } + + &:hover { + background-color: xvar(--spectrum-high-contrast-highlight, var(--spectrum-actionbutton-emphasized-background-color-selected-hover)); + border-color: xvar(--spectrum-high-contrast-highlight-text, var(--spectrum-actionbutton-emphasized-border-color-selected-hover)); + color: xvar(--spectrum-high-contrast-highlight-text, var(--spectrum-actionbutton-emphasized-text-color-selected-hover)); + + .spectrum-Icon { + fill: xvar(--spectrum-high-contrast-highlight-text, var(--spectrum-actionbutton-emphasized-icon-color-selected-hover)); + } + } + + &.is-active { + background-color: xvar(--spectrum-high-contrast-highlight, var(--spectrum-actionbutton-emphasized-background-color-selected-down)); + border-color: xvar(--spectrum-high-contrast-highlight-text, var(--spectrum-actionbutton-emphasized-border-color-selected-down)); + color: xvar(--spectrum-high-contrast-highlight-text, var(--spectrum-actionbutton-emphasized-text-color-selected-down)); + + .spectrum-Icon { + fill: xvar(--spectrum-high-contrast-highlight-text, var(--spectrum-actionbutton-emphasized-icon-color-selected-down)); + } + } + + &:disabled, + &.is-disabled { + background-color: xvar(--spectrum-high-contrast-button-face, var(--spectrum-actionbutton-emphasized-background-color-selected-disabled)); + border-color: xvar(--spectrum-high-contrast-gray-text, var(--spectrum-actionbutton-emphasized-border-color-selected-disabled)); + color: xvar(--spectrum-high-contrast-gray-text, var(--spectrum-actionbutton-emphasized-text-color-selected-disabled)); + + .spectrum-Icon { + fill: xvar(--spectrum-high-contrast-gray-text, var(--spectrum-actionbutton-emphasized-icon-color-selected-disabled)); + } + } + } +} + +.spectrum-ActionButton--quiet { + background-color: xvar(--spectrum-high-contrast-button-face, var(--spectrum-actionbutton-quiet-background-color)); + border-color: xvar(--spectrum-high-contrast-button-face, var(--spectrum-actionbutton-quiet-border-color)); + color: xvar(--spectrum-high-contrast-button-text, var(--spectrum-actionbutton-quiet-text-color)); + + &:hover { + background-color: xvar(--spectrum-high-contrast-button-face, var(--spectrum-actionbutton-quiet-background-color-hover)); + border-color: xvar(--spectrum-high-contrast-highlight, var(--spectrum-actionbutton-quiet-border-color-hover)); + color: xvar(--spectrum-high-contrast-button-text, var(--spectrum-actionbutton-quiet-text-color-hover)); + } + + &:focus-visible { + background-color: xvar(--spectrum-high-contrast-button-face, var(--spectrum-actionbutton-quiet-background-color-key-focus)); + border-color: xvar(--spectrum-high-contrast-highlight, var(--spectrum-actionbutton-quiet-border-color-hover)); + color: xvar(--spectrum-high-contrast-button-text, var(--spectrum-actionbutton-quiet-text-color-key-focus)); + } + + &.is-active { + background-color: xvar(--spectrum-high-contrast-button-face, var(--spectrum-actionbutton-quiet-background-color-down)); + border-color: xvar(--spectrum-high-contrast-highlight, var(--spectrum-actionbutton-quiet-border-color-down)); + color: xvar(--spectrum-high-contrast-button-text, var(--spectrum-actionbutton-quiet-text-color-down)); + } + + &:disabled, + &.is-disabled { + background-color: xvar(--spectrum-high-contrast-button-face, var(--spectrum-actionbutton-quiet-background-color-disabled)); + border-color: xvar(--spectrum-high-contrast-gray-text, var(--spectrum-actionbutton-quiet-border-color-disabled)); + color: xvar(--spectrum-high-contrast-gray-text, var(--spectrum-actionbutton-quiet-text-color-disabled)); + } +} + +.spectrum-ActionButton--staticWhite { + mix-blend-mode: screen; + --spectrum-actionbutton-static-background-color: var(--spectrum-actionbutton-static-white-background-color); + --spectrum-actionbutton-static-background-color-hover: rgba(255, 255, 255, 0.1); + --spectrum-actionbutton-static-background-color-focus: rgba(255, 255, 255, 0.1); + --spectrum-actionbutton-static-background-color-active: rgba(255, 255, 255, 0.15); + --spectrum-actionbutton-static-background-color-disabled: var(--spectrum-actionbutton-static-white-background-color-disabled); + --spectrum-actionbutton-static-background-color-selected: rgba(255, 255, 255, 0.9); + --spectrum-actionbutton-static-background-color-selected-hover: white; + --spectrum-actionbutton-static-background-color-selected-focus: white; + --spectrum-actionbutton-static-background-color-selected-active: white; + --spectrum-actionbutton-static-background-color-selected-disabled: rgba(255, 255, 255, 0.1); + --spectrum-actionbutton-static-border-color: var(--spectrum-actionbutton-static-white-border-color); + --spectrum-actionbutton-static-border-color-hover: var(--spectrum-actionbutton-static-white-border-color-hover); + --spectrum-actionbutton-static-border-color-active: var(--spectrum-actionbutton-static-white-border-color-down); + --spectrum-actionbutton-static-border-color-focus: var(--spectrum-actionbutton-static-white-border-color-key-focus); + --spectrum-actionbutton-static-border-disabled: var(--spectrum-actionbutton-static-white-border-color-disabled); + --spectrum-actionbutton-static-border-color-selected-disabled: var(--spectrum-actionbutton-static-white-border-color-selected-disabled); + --spectrum-actionbutton-static-color: white; + --spectrum-actionbutton-static-color-selected: black; /* becomes the background of the parent element due to mix-blend-mode */ + --spectrum-actionbutton-static-color-disabled: rgba(255, 255, 255, 0.55); +} + +.spectrum-ActionButton--staticWhite.spectrum-ActionButton--quiet { + --spectrum-actionbutton-static-border-color: transparent; + --spectrum-actionbutton-static-border-color-hover: transparent; + --spectrum-actionbutton-static-border-color-active: transparent; +} + +.spectrum-ActionButton--staticBlack { + mix-blend-mode: multiply; + --spectrum-actionbutton-static-background-color: var(--spectrum-actionbutton-static-black-background-color); + --spectrum-actionbutton-static-background-color-hover: rgba(0, 0, 0, 0.1); + --spectrum-actionbutton-static-background-color-focus: rgba(0, 0, 0, 0.1); + --spectrum-actionbutton-static-background-color-active: rgba(0, 0, 0, 0.15); + --spectrum-actionbutton-static-background-color-selected: rgba(0, 0, 0, 0.9); + --spectrum-actionbutton-static-background-color-disabled: var(--spectrum-actionbutton-static-black-background-color-disabled); + --spectrum-actionbutton-static-background-color-selected-hover: black; + --spectrum-actionbutton-static-background-color-selected-focus: black; + --spectrum-actionbutton-static-background-color-selected-active: black; + --spectrum-actionbutton-static-background-color-selected-disabled: rgba(0, 0, 0, 0.1); + --spectrum-actionbutton-static-border-color: var(--spectrum-actionbutton-static-black-border-color); + --spectrum-actionbutton-static-border-color-hover: var(--spectrum-actionbutton-static-black-border-color-hover); + --spectrum-actionbutton-static-border-color-active: var(--spectrum-actionbutton-static-black-border-color-down); + --spectrum-actionbutton-static-border-color-focus: var(--spectrum-actionbutton-static-black-border-color-key-focus); + --spectrum-actionbutton-static-border-disabled: var(--spectrum-actionbutton-static-black-border-color-disabled); + --spectrum-actionbutton-static-border-color-selected-disabled: var(--spectrum-actionbutton-static-black-border-color-selected-disabled); + --spectrum-actionbutton-static-color: black; + --spectrum-actionbutton-static-color-selected: white; /* becomes the background of the parent element due to mix-blend-mode */ + --spectrum-actionbutton-static-color-disabled: rgba(0, 0, 0, 0.55); +} + +.spectrum-ActionButton--staticBlack.spectrum-ActionButton--quiet { + --spectrum-actionbutton-static-border-color: transparent; + --spectrum-actionbutton-static-border-color-hover: transparent; + --spectrum-actionbutton-static-border-color-active: transparent; +} + +.spectrum-ActionButton--staticColor { + background-color: var(--spectrum-actionbutton-static-background-color); + border-color: var(--spectrum-actionbutton-static-border-color); + color: var(--spectrum-actionbutton-static-color); + --spectrum-focus-ring-color: var(--spectrum-actionbutton-static-color); + + .spectrum-Icon { + fill: var(--spectrum-actionbutton-static-color); + } + + &:hover { + background-color: var(--spectrum-actionbutton-static-background-color-hover); + border-color: var(--spectrum-actionbutton-static-border-color-hover); + color: var(--spectrum-actionbutton-static-color); + + .spectrum-Icon { + fill: var(--spectrum-actionbutton-static-color); + } + + .spectrum-ActionButton-hold { + fill: var(--spectrum-actionbutton-static-color); + } + } + + &:focus-visible { + background-color: var(--spectrum-actionbutton-static-background-color-focus); + border-color: var(--spectrum-actionbutton-static-border-color-focus); + box-shadow: none; + color: var(--spectrum-actionbutton-static-color); + + &:hover { + border-color: var(--spectrum-actionbutton-static-border-color-focus); + } + + &.is-active { + border-color: var(--spectrum-actionbutton-static-border-color-focus); + } + + .spectrum-Icon { + fill: var(--spectrum-actionbutton-static-color); + } + + .spectrum-ActionButton-hold { + fill: var(--spectrum-actionbutton-static-color); + } + } + + &.is-active { + background-color: var(--spectrum-actionbutton-static-background-color-active); + border-color: var(--spectrum-actionbutton-static-border-color-active); + color: var(--spectrum-actionbutton-static-color); + + .spectrum-ActionButton-hold { + fill: var(--spectrum-actionbutton-static-color); + } + } + + &:disabled, + &.is-disabled { + background-color: var(--spectrum-actionbutton-static-background-color-disabled); + border-color: var(--spectrum-actionbutton-static-border-disabled); + color: var(--spectrum-actionbutton-static-color-disabled); + + .spectrum-Icon { + fill: var(--spectrum-actionbutton-static-color-disabled); + } + + .spectrum-ActionButton-hold { + fill: var(--spectrum-actionbutton-static-color-disabled); + } + } + + &.spectrum-ActionButton--quiet.is-selected, + &.is-selected { + background-color: var(--spectrum-actionbutton-static-background-color-selected); + border-color: var(--spectrum-actionbutton-static-background-color-selected); + color: var(--spectrum-actionbutton-static-color-selected); + + .spectrum-Icon { + fill: var(--spectrum-actionbutton-static-color-selected); + } + + &:focus-visible { + background-color: var(--spectrum-actionbutton-static-background-color-selected-focus); + border-color: var(--spectrum-actionbutton-static-background-color-selected-focus); + color: var(--spectrum-actionbutton-static-color-selected); + box-shadow: none; + + .spectrum-Icon { + fill: var(--spectrum-actionbutton-static-color-selected); + } + } + + &:hover, + &.is-active { + background-color: var(--spectrum-actionbutton-static-background-color-selected-hover); + border-color: var(--spectrum-actionbutton-static-background-color-selected-hover); + color: var(--spectrum-actionbutton-static-color-selected); + + .spectrum-Icon { + fill: var(--spectrum-actionbutton-static-color-selected); + } + } + + &:disabled, + &.is-disabled { + background-color: var(--spectrum-actionbutton-static-background-color-selected-disabled); + border-color: var(--spectrum-actionbutton-static-border-color-selected-disabled); + color: var(--spectrum-actionbutton-static-color-disabled); + + .spectrum-Icon { + fill: var(--spectrum-actionbutton-static-color-disabled); + } + + .spectrum-ActionButton-hold { + fill: var(--spectrum-actionbutton-static-color-disabled); + } + } + } + + &.spectrum-ActionButton--quiet { + /* Quiet action buttons always have transparent backgrounds, in both Spectrum and Express */ + --spectrum-actionbutton-static-background-color: transparent; + --spectrum-actionbutton-static-background-color-disabled: transparent; + + &, + &:hover, + &.is-active, + &:disabled, + &.is-disabled { + &, + &.is-selected { + border-color: transparent; + } + } + } +} + +.spectrum-LogicButton--and { + background-color: var(--spectrum-logicbutton-and-background-color); + border-color: var(--spectrum-logicbutton-and-border-color); + color: var(--spectrum-logicbutton-and-text-color); + + &:hover { + background-color: var(--spectrum-logicbutton-and-background-color-hover); + border-color: var(--spectrum-logicbutton-and-border-color-hover); + color: var(--spectrum-logicbutton-and-text-color); + } + + &:disabled, + &.is-disabled { + background-color: var(--spectrum-logicbutton-and-background-color-disabled); + border-color: var(--spectrum-logicbutton-and-border-color-disabled); + color: var(--spectrum-logicbutton-and-text-color-disabled); + } +} + +.spectrum-LogicButton--or { + background-color: var(--spectrum-logicbutton-or-background-color); + border-color: var(--spectrum-logicbutton-or-border-color); + color: var(--spectrum-logicbutton-or-text-color); + + &:hover { + background-color: var(--spectrum-logicbutton-or-background-color-hover); + border-color: var(--spectrum-logicbutton-or-border-color-hover); + color: var(--spectrum-logicbutton-or-text-color); + } + + &:disabled, + &.is-disabled { + background-color: var(--spectrum-logicbutton-and-background-color-disabled); + border-color: var(--spectrum-logicbutton-and-border-color-disabled); + color: var(--spectrum-logicbutton-and-text-color-disabled); + } +} + +.spectrum-FieldButton { + color: var(--spectrum-fieldbutton-text-color); + background-color: var(--spectrum-fieldbutton-background-color); + border-color: var(--spectrum-fieldbutton-border-color); + + .spectrum-Icon { + fill: var(--spectrum-fieldbutton-icon-color); + } + + &:hover { + color: var(--spectrum-fieldbutton-text-color-hover); + background-color: var(--spectrum-fieldbutton-background-color-hover); + border-color: var(--spectrum-fieldbutton-border-color-hover); + + .spectrum-Icon { + fill: var(--spectrum-fieldbutton-icon-color-hover); + } + } + + &.is-active, + &.is-selected { + background-color: var(--spectrum-fieldbutton-background-color-down); + border-color: var(--spectrum-fieldbutton-border-color-down); + + .spectrum-Icon { + fill: var(--spectrum-fieldbutton-icon-color-down); + } + } + + &:focus-visible, + &.is-focused { + background-color: var(--spectrum-fieldbutton-background-color-key-focus); + border-color: var(--spectrum-fieldbutton-border-color-key-focus); + color: var(--spectrum-fieldbutton-text-color-key-focus); + + .spectrum-Icon { + fill: var(--spectrum-fieldbutton-icon-color-key-focus); + } + + &.is-placeholder { + fill: var(--spectrum-fieldbutton-placeholder-text-color-key-focus); + } + } + + &.spectrum-FieldButton--invalid { + border-color: var(--spectrum-fieldbutton-border-color-error); + + &:hover { + border-color: var(--spectrum-fieldbutton-border-color-error-hover); + } + + &.is-active, + &.is-selected { + border-color: var(--spectrum-fieldbutton-border-color-error-down); + } + + &:focus-visible, + &.is-focused { + border-color: var(--spectrum-fieldbutton-border-color-error-key-focus); + } + } + + &:disabled, + &.is-disabled { + background-color: var(--spectrum-fieldbutton-background-color-disabled); + color: var(--spectrum-fieldbutton-text-color-disabled); + + & .spectrum-Icon { + fill: var(--spectrum-fieldbutton-icon-color-disabled); + } + } +} + +.spectrum-FieldButton--quiet { + color: var(--spectrum-fieldbutton-text-color); + border-color: var(--spectrum-fieldbutton-quiet-border-color); + background-color: var(--spectrum-fieldbutton-quiet-background-color); + + &:hover { + background-color: var(--spectrum-fieldbutton-quiet-background-color-hover); + color: var(--spectrum-fieldbutton-text-color-hover); + } + + &:focus-visible, + &.is-focused { + background-color: var(--spectrum-fieldbutton-quiet-background-color-key-focus); + + &.is-placeholder { + color: var(--spectrum-fieldbutton-quiet-placeholder-text-color-key-focus); + } + } + + &.is-active, + &.is-selected { + background-color: var(--spectrum-fieldbutton-quiet-background-color-down); + border-color: var(--spectrum-fieldbutton-quiet-border-color-down); + + &:focus-visible, + &.is-focused { + background-color: var(--spectrum-fieldbutton-quiet-background-color-key-focus); + } + } + + &:disabled, + &.is-disabled { + background-color: var(--spectrum-fieldbutton-quiet-background-color-disabled); + color: var(--spectrum-fieldbutton-text-color-disabled); + } +} + +@media (forced-colors: active) { + .spectrum-ActionButton, + .spectrum-ClearButton, + .spectrum-LogicButton, + .spectrum-FieldButton { + forced-color-adjust: none; + --spectrum-clearbutton-medium-icon-color: ButtonText; + --spectrum-clearbutton-medium-icon-color-disabled: GrayText; + --spectrum-clearbutton-medium-icon-color-down: Highlight; + --spectrum-clearbutton-medium-icon-color-hover: Highlight; + --spectrum-clearbutton-medium-icon-color-key-focus: Highlight; + --spectrum-fieldbutton-background-color: ButtonFace; + --spectrum-fieldbutton-background-color-disabled: ButtonFace; + --spectrum-fieldbutton-background-color-down: ButtonFace; + --spectrum-fieldbutton-background-color-hover: ButtonFace; + --spectrum-fieldbutton-background-color-key-focus: ButtonFace; + --spectrum-fieldbutton-border-color: ButtonText; + --spectrum-fieldbutton-border-color-down: Highlight; + --spectrum-fieldbutton-border-color-error: ButtonText; + --spectrum-fieldbutton-border-color-error-down: Highlight; + --spectrum-fieldbutton-border-color-error-hover: Highlight; + --spectrum-fieldbutton-border-color-error-key-focus: Highlight; + --spectrum-fieldbutton-border-color-hover: Highlight; + --spectrum-fieldbutton-border-color-key-focus: Highlight; + --spectrum-fieldbutton-icon-color-disabled: GrayText; + --spectrum-fieldbutton-placeholder-text-color-key-focus: ButtonText; + --spectrum-fieldbutton-quiet-background-color: ButtonFace; + --spectrum-fieldbutton-quiet-background-color-disabled: ButtonFace; + --spectrum-fieldbutton-quiet-background-color-down: ButtonFace; + --spectrum-fieldbutton-quiet-background-color-hover: ButtonFace; + --spectrum-fieldbutton-quiet-background-color-key-focus: ButtonFace; + --spectrum-fieldbutton-quiet-border-color: ButtonFace; + --spectrum-fieldbutton-quiet-border-color-down: Highlight; + --spectrum-fieldbutton-quiet-placeholder-text-color-key-focus: ButtonText; + --spectrum-fieldbutton-text-color: ButtonText; + --spectrum-fieldbutton-text-color-disabled: GrayText; + --spectrum-fieldbutton-text-color-hover: ButtonText; + --spectrum-fieldbutton-text-color-key-focus: ButtonText; + --spectrum-logicbutton-and-background-color: ButtonFace; + --spectrum-logicbutton-and-background-color-disabled: ButtonFace; + --spectrum-logicbutton-and-background-color-hover: ButtonFace; + --spectrum-logicbutton-and-border-color: ButtonText; + --spectrum-logicbutton-and-border-color-disabled: GrayText; + --spectrum-logicbutton-and-border-color-hover: Highlight; + --spectrum-logicbutton-and-text-color: ButtonText; + --spectrum-logicbutton-and-text-color-disabled: GrayText; + --spectrum-logicbutton-or-background-color: ButtonFace; + --spectrum-logicbutton-or-background-color-hover: ButtonFace; + --spectrum-logicbutton-or-border-color: ButtonText; + --spectrum-logicbutton-or-border-color-hover: Highlight; + --spectrum-logicbutton-or-text-color: ButtonText; + --spectrum-button-primary-focus-ring-color-key-focus: CanvasText; + --spectrum-button-primary-focus-ring-size-key-focus: 3px; + --spectrum-dropdown-border-color-key-focus: Highlight; + } + + .spectrum-Button--overBackground { + --spectrum-button-over-background-color: ButtonText; + } + + .spectrum-ActionButton--staticWhite, + .spectrum-ActionButton--staticBlack { + /* For some reason, making this a var doesn't work, the value is inlined in the css */ + mix-blend-mode: normal; + --spectrum-actionbutton-static-background-color-hover: ButtonFace; + --spectrum-actionbutton-static-background-color-focus: ButtonFace; + --spectrum-actionbutton-static-background-color-active: ButtonFace; + --spectrum-actionbutton-static-background-color-selected: Highlight; + --spectrum-actionbutton-static-background-color-selected-hover: Highlight; + --spectrum-actionbutton-static-background-color-selected-focus: Highlight; + --spectrum-actionbutton-static-background-color-selected-active: Highlight; + --spectrum-actionbutton-static-border-color: ButtonText; + --spectrum-actionbutton-static-border-color-hover: Highlight; + --spectrum-actionbutton-static-border-color-active: ButtonText; + --spectrum-actionbutton-static-border-color-focus: CanvasText; + --spectrum-actionbutton-static-border-disabled: GrayText; + --spectrum-actionbutton-static-color: ButtonText; + --spectrum-actionbutton-static-color-selected: HighlightText; /* becomes the background of the parent element due to mix-blend-mode */ + --spectrum-actionbutton-static-color-disabled: GrayText; + } +} diff --git a/spectrum-css-temp/components/button/vars.css b/spectrum-css-temp/components/button/vars.css new file mode 100644 index 00000000000..ca1e08522d8 --- /dev/null +++ b/spectrum-css-temp/components/button/vars.css @@ -0,0 +1,14 @@ +/* + * Copyright 2020 Adobe. All rights reserved. + * This file is licensed to you under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. You may obtain a copy + * of the License at http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS + * OF ANY KIND, either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + */ + +@import './index.css'; +@import './skin.css'; diff --git a/spectrum-css-temp/components/buttongroup/index.css b/spectrum-css-temp/components/buttongroup/index.css new file mode 100644 index 00000000000..29ddd0104d7 --- /dev/null +++ b/spectrum-css-temp/components/buttongroup/index.css @@ -0,0 +1,56 @@ +/* +Copyright 2019 Adobe. All rights reserved. +This file is licensed to you under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. You may obtain a copy +of the License at http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under +the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS +OF ANY KIND, either express or implied. See the License for the specific language +governing permissions and limitations under the License. +*/ + +:root { + --spectrum-buttongroup-button-gap-reset: 0; +} + +.spectrum-ButtonGroup { + display: inline-flex; + align-items: flex-start; + /* necessary so that offsetLeft on button children is correct */ + position: relative; + + .spectrum-ButtonGroup-Button { + flex-shrink: 0; + } + + .spectrum-ButtonGroup-Button + .spectrum-ButtonGroup-Button { + margin-inline-start: var(--spectrum-buttongroup-button-gap-x); + } + + &.spectrum-ButtonGroup--alignEnd { + justify-content: flex-end; + } + + &.spectrum-ButtonGroup--alignCenter { + justify-content: center; + } +} + +.spectrum-ButtonGroup--vertical { + display: inline-flex; + flex-direction: column; + + .spectrum-ButtonGroup-Button + .spectrum-ButtonGroup-Button { + margin-block-start: var(--spectrum-buttongroup-button-gap-y); + margin-inline-start: var(--spectrum-buttongroup-button-gap-reset); + } + + &.spectrum-ButtonGroup--alignEnd { + align-items: flex-end; + } + + &.spectrum-ButtonGroup--alignCenter { + align-items: center; + } +} diff --git a/spectrum-css-temp/components/buttongroup/vars.css b/spectrum-css-temp/components/buttongroup/vars.css new file mode 100644 index 00000000000..3df0b027c58 --- /dev/null +++ b/spectrum-css-temp/components/buttongroup/vars.css @@ -0,0 +1,13 @@ +/* + * Copyright 2020 Adobe. All rights reserved. + * This file is licensed to you under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. You may obtain a copy + * of the License at http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS + * OF ANY KIND, either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + */ + +@import './index.css'; diff --git a/spectrum-css-temp/components/calendar/index.css b/spectrum-css-temp/components/calendar/index.css new file mode 100644 index 00000000000..d904da546e3 --- /dev/null +++ b/spectrum-css-temp/components/calendar/index.css @@ -0,0 +1,324 @@ +/* +Copyright 2019 Adobe. All rights reserved. +This file is licensed to you under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. You may obtain a copy +of the License at http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under +the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS +OF ANY KIND, either express or implied. See the License for the specific language +governing permissions and limitations under the License. +*/ + +@import '../commons/index.css'; + +:root { + --spectrum-calendar-border-radius-reset: 0; + --spectrum-calendar-border-width-reset: 0; + --spectrum-calendar-margin-y: 24px; + --spectrum-calendar-margin-x: 32px; + --spectrum-calendar-max-width: calc((var(--spectrum-calendar-day-width) * 7) + (var(--spectrum-calendar-day-padding) * 12)); + --spectrum-calendar-min-width: calc(var(--spectrum-calendar-day-width) * 7); + --spectrum-calendar-button-gap: var(--spectrum-global-dimension-size-40); + --spectrum-calendar-title-margin-x: var(--spectrum-global-dimension-size-75); +} + +.spectrum-Calendar { + display: block; + isolation: isolate; +} + +.spectrum-Calendar--padded { + margin: var(--spectrum-calendar-margin-x) var(--spectrum-calendar-margin-y); +} + +.spectrum-Calendar-header { + display: grid; + grid-auto-flow: column; + grid-auto-columns: 1fr; + width: 100%; + gap: var(--spectrum-global-dimension-size-300); +} + +.spectrum-Calendar-monthHeader { + display: grid; + grid-template-areas: 'prev title next'; + grid-template-columns: minmax(auto, 1fr) auto minmax(auto, 1fr); + align-content: start; + width: 100%; + min-width: var(--spectrum-calendar-min-width); + max-width: var(--spectrum-calendar-max-width); + padding: 0 var(--spectrum-calendar-button-gap); + box-sizing: border-box; +} + +.spectrum-Calendar-title { + font-size: var(--spectrum-calendar-title-text-size); + font-weight: bold; + + line-height: var(--spectrum-calendar-title-height); + margin: 0 var(--spectrum-calendar-title-margin-x); + grid-area: title; + + text-align: center; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.spectrum-Calendar-prevMonth { + grid-area: prev; + justify-self: start; +} + +.spectrum-Calendar-nextMonth { + grid-area: next; + justify-self: end; +} + +.spectrum-Calendar-months { + display: grid; + grid-auto-flow: column; + grid-auto-columns: 1fr; + gap: var(--spectrum-global-dimension-size-300); + align-items: start; +} + +.spectrum-Calendar-dayOfWeek { + display: flex; + flex-direction: column; + justify-content: flex-end; + height: 100%; + + width: 100%; + + border-bottom: none !important; /* override abbr styling from normalize.css */ + + font-size: var(--spectrum-calendar-day-title-text-size); + font-weight: var(--spectrum-calendar-day-title-text-font-weight); + text-transform: uppercase; + text-decoration: none !important; /* override abbr styling from normalize.css */ + + cursor: default; + + &[title] { + /* Normalize abbr[title] */ + /* Remove the bottom border in Chrome 57- and Firefox 39-. */ + border-bottom: none; + + /* Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. */ + text-decoration: underline; + text-decoration: underline dotted; + } +} + +.spectrum-Calendar-body { + outline: none; +} + +.spectrum-Calendar-table { + table-layout: fixed; + width: 100%; + min-width: var(--spectrum-calendar-min-width); + max-width: var(--spectrum-calendar-max-width); + + border-collapse: collapse; + border-spacing: 0; + + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.spectrum-Calendar-tableCell { + text-align: center; + padding: 0; + position: relative; + box-sizing: content-box; + height: var(--spectrum-calendar-day-height); + width: var(--spectrum-calendar-day-width); + padding: var(--spectrum-calendar-day-padding) 0; + + &:focus { + outline: 0; + } +} + +.spectrum-Calendar-date { + /* This is fun, but we need to trick the table so it doesn't size itself in a weird way */ + position: absolute; + display: block; + top: 0; + left: 0; + + box-sizing: border-box; + + height: var(--spectrum-calendar-day-height); + width: 100%; + margin: var(--spectrum-calendar-day-padding) 0; + + border-radius: var(--spectrum-calendar-day-width); + + font-size: var(--spectrum-calendar-day-text-size); + line-height: var(--spectrum-calendar-day-height); + white-space: nowrap; + + cursor: default; + + /* compute the "auto" margin to center the date text manually rather than using the keyword to ensure consistent rounding. */ + --margin: calc((100% - var(--spectrum-calendar-day-width)) / 2); + + .spectrum-Calendar-dateText { + display: block; + width: var(--spectrum-calendar-day-width); + margin: 0 auto; + margin-inline-start: auto; + margin-inline-end: var(--margin); + } + + &:focus { + outline: 0; + } + + &:lang(ja), &:lang(zh), &:lang(ko) { + font-size: var(--spectrum-calendar-day-text-size-han); + } + + &.is-disabled { + cursor: default; + pointer-events: none; + } + + &.is-unavailable { + .spectrum-Calendar-dateText span { + position: relative; + + &:after { + content: ''; + position: absolute; + top: 50%; + left: -4px; + right: -4px; + height: 2px; + transform: rotate(-16deg); + border-radius: 1px; + background: currentColor; + } + } + } + + &.is-outsideMonth { + visibility: hidden; + } + + /* focus ring */ + &:before { + border-radius: calc(var(--spectrum-calendar-day-width) + var(--spectrum-alias-focus-ring-gap)); + content: ''; + display: block; + position: absolute; + top: calc(50% - calc(var(--spectrum-calendar-day-width) / 2)); + left: calc(50% - calc(var(--spectrum-calendar-day-width) / 2)); + width: calc(var(--spectrum-calendar-day-width) + var(--spectrum-alias-focus-ring-gap) * 2); + height: calc(var(--spectrum-calendar-day-height) + var(--spectrum-alias-focus-ring-gap) * 2); + margin: 0; + transform: translateX(0); /* Forces FF to render on the pixel grid */ + + transition: box-shadow var(--spectrum-global-animation-duration-100) ease-out, + margin var(--spectrum-global-animation-duration-100) ease-out; + } + + &.is-focused { + &:before { + margin: calc(var(--spectrum-alias-focus-ring-gap) * -1); + } + } + + /* hover and selected states */ + &:after { + position: absolute; + top: calc(50% - calc(var(--spectrum-calendar-day-width) / 2)); + left: calc(50% - calc(var(--spectrum-calendar-day-width) / 2)); + + display: block; + + height: var(--spectrum-calendar-day-height); + width: var(--spectrum-calendar-day-width); + + border-radius: var(--spectrum-calendar-day-width); + + content: ''; + z-index: -1; + } + + &.is-range-selection { + /* overrides to make the cells appear connected */ + margin: var(--spectrum-calendar-day-padding) 0; + border-width: var(--spectrum-calendar-border-width-reset); + line-height: var(--spectrum-calendar-day-height); + border-radius: var(--spectrum-calendar-border-radius-reset); + + &.is-range-start, + &.is-selection-start { + border-start-start-radius: var(--spectrum-calendar-day-width); + border-end-start-radius: var(--spectrum-calendar-day-width); + /* reduce the width by the "auto" margin and end align so the background doesn't extend to the left */ + inset-inline-start: auto; + inset-inline-end: 0; + width: calc(100% - var(--margin)); + + &:before, + &:after, + .spectrum-Calendar-dateText { + inset-inline-start: 0; + } + + &:after, + .spectrum-Calendar-dateText { + margin-inline-start: 0; + } + } + + &.is-range-end, + &.is-selection-end { + border-start-end-radius: var(--spectrum-calendar-day-width); + border-end-end-radius: var(--spectrum-calendar-day-width); + /* reduce the width by the "auto" margin and start align so the background doesn't extend to the right */ + /* this must be measured from the right rather than using width to avoid rounding errors in Safari */ + width: auto; + inset-inline-start: 0; + inset-inline-end: var(--margin); + + &:before, + &:after, + .spectrum-Calendar-dateText { + inset-inline-start: auto; + inset-inline-end: 0; + } + + &:after, + .spectrum-Calendar-dateText { + margin-inline-end: 0; + } + } + + &.is-selection-start.is-selection-end, + &.is-selection-start.is-range-end, + &.is-selection-end.is-range-start, + &.is-range-start.is-range-end { + width: var(--spectrum-calendar-day-width); + inset-inline-start: 0; + inset-inline-end: 0; + margin-inline-start: auto; + margin-inline-end: var(--margin); + border-radius: var(--spectrum-calendar-day-width); + + &:after, + .spectrum-Calendar-dateText { + margin-inline-start: auto; + margin-inline-end: var(--margin); + } + } + } +} diff --git a/spectrum-css-temp/components/calendar/skin.css b/spectrum-css-temp/components/calendar/skin.css new file mode 100644 index 00000000000..f161c5385c9 --- /dev/null +++ b/spectrum-css-temp/components/calendar/skin.css @@ -0,0 +1,209 @@ +/* +Copyright 2019 Adobe. All rights reserved. +This file is licensed to you under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. You may obtain a copy +of the License at http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under +the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS +OF ANY KIND, either express or implied. See the License for the specific language +governing permissions and limitations under the License. +*/ + +.spectrum-Calendar-prevMonth { + color: var(--spectrum-calendar-button-icon-color); +} + +.spectrum-Calendar-nextMonth { + color: var(--spectrum-calendar-button-icon-color); +} + +.spectrum-Calendar-dayOfWeek { + color: var(--spectrum-calendar-day-title-text-color); +} + +.spectrum-Calendar-date { + --spectrum-calendar-day-background-color-cap-selected: var(--spectrum-accent-background-color-default); + --spectrum-calendar-day-background-color-cap-selected-hover: var(--spectrum-accent-background-color-hover); + --spectrum-calendar-day-background-color-cap-selected-down: var(--spectrum-accent-background-color-down); + --spectrum-calendar-day-background-color-cap-invalid-selected: var(--spectrum-negative-background-color-default); + --spectrum-calendar-day-background-color-cap-invalid-selected-hover: var(--spectrum-negative-background-color-hover); + --spectrum-calendar-day-background-color-cap-invalid-selected-down: var(--spectrum-negative-background-color-down); + --spectrum-calendar-day-background-color-selected-hover: var(--spectrum-alias-highlight-selected); + --spectrum-calendar-day-background-color-invalid-selected: var(--spectrum-alias-highlight-invalid); + --spectrum-calendar-day-text-color-disabled: var(--spectrum-alias-text-color-disabled); + --spectrum-calendar-day-text-color-cap-selected: white; + --spectrum-calendar-day-text-color-cap-selected-hover: white; + --spectrum-calendar-day-today-background-color: var(--spectrum-global-color-gray-300); + --spectrum-calendar-day-today-background-color-hover: var(--spectrum-global-color-gray-400); + --spectrum-calendar-day-today-background-color-down: var(--spectrum-global-color-gray-500); + + --background: transparent; + &:after { + background: var(--background); + } + + &.is-range-selection { + background: var(--spectrum-calendar-day-background-color-selected); + + &.is-invalid { + background: var(--spectrum-calendar-day-background-color-invalid-selected); + } + } + + &.is-today { + color: var(--spectrum-calendar-day-today-text-color); + border-color: var(--spectrum-calendar-day-today-background-color); + --background: var(--spectrum-calendar-day-today-background-color); + } + + &.is-selected:not(.is-range-selection), + &.is-selection-start, + &.is-selection-end { + color: var(--spectrum-calendar-day-text-color-cap-selected); + --background: var(--spectrum-calendar-day-background-color-cap-selected); + + &.is-invalid { + --background: var(--spectrum-calendar-day-background-color-cap-invalid-selected); + } + } + + &:hover { + color: var(--spectrum-calendar-day-text-color-hover); + --background: var(--spectrum-calendar-day-background-color-hover); + + &.is-range-selection { + color: var(--spectrum-calendar-day-text-color-selected-hover); + --background: var(--spectrum-calendar-day-background-color-selected-hover); + + &.is-invalid { + --background: var(--spectrum-calendar-day-background-color-invalid-selected); + } + } + + &.is-today { + --background: var(--spectrum-calendar-day-today-background-color-hover); + } + + &.is-selected:not(.is-range-selection), + &.is-selection-start, + &.is-selection-end { + color: var(--spectrum-calendar-day-text-color-cap-selected-hover); + --background: var(--spectrum-calendar-day-background-color-cap-selected-hover); + + &.is-invalid { + --background: var(--spectrum-calendar-day-background-color-cap-invalid-selected-hover); + } + } + } + + &.is-pressed { + color: var(--spectrum-calendar-day-text-color-hover); + --background: var(--spectrum-calendar-day-background-color-down); + + &.is-range-selection { + color: var(--spectrum-calendar-day-text-color-selected-hover); + --background: var(--spectrum-calendar-day-background-color-selected-hover); + + &.is-invalid { + --background: var(--spectrum-calendar-day-background-color-invalid-selected); + } + } + + &.is-today { + --background: var(--spectrum-calendar-day-today-background-color-down); + } + + &.is-selected:not(.is-range-selection), + &.is-selection-start, + &.is-selection-end { + color: var(--spectrum-calendar-day-text-color-cap-selected-hover); + --background: var(--spectrum-calendar-day-background-color-cap-selected-down); + + &.is-invalid { + --background: var(--spectrum-calendar-day-background-color-cap-invalid-selected-down); + } + } + } + + &.is-focused { + &:before { + box-shadow: 0 0 0 var(--spectrum-calendar-day-border-size-key-focus) var(--spectrum-calendar-day-border-color-key-focus); + } + } + + &.is-disabled { + &, + &.is-today { + --background: var(--spectrum-calendar-day-background-color-disabled); + } + + &, + &.is-today, + &.is-selected { + color: var(--spectrum-calendar-day-text-color-disabled); + } + } + + &.is-unavailable:not(.is-selected) { + &, + &.is-today { + --background: transparent; + } + } +} + +@media (forced-colors: active) { + .spectrum-Calendar-date { + color: CanvasText; + forced-color-adjust: none; + --spectrum-calendar-button-icon-color: ButtonText; + --spectrum-calendar-day-background-color-cap-selected: Highlight; + --spectrum-calendar-day-background-color-cap-invalid-selected: Highlight; + --spectrum-calendar-day-background-color-cap-invalid-selected-down: Highlight; + --spectrum-calendar-day-background-color-cap-invalid-selected-hover: Highlight; + --spectrum-calendar-day-background-color-cap-selected-down: Highlight; + --spectrum-calendar-day-background-color-cap-selected-hover: Highlight; + --spectrum-calendar-day-background-color-disabled: ButtonFace; + --spectrum-calendar-day-background-color-down: ButtonFace; + --spectrum-calendar-day-background-color-hover: ButtonFace; + --spectrum-calendar-day-background-color-invalid-selected: Highlight; + --spectrum-calendar-day-background-color-selected-hover: Highlight; + --spectrum-calendar-day-background-color-selected: Highlight; + --spectrum-calendar-day-border-color-key-focus: ButtonText; + --spectrum-calendar-day-text-color-cap-selected: HighlightText; + --spectrum-calendar-day-text-color-cap-selected-hover: HighlightText; + --spectrum-calendar-day-text-color-disabled: GrayText; + --spectrum-calendar-day-text-color-hover: ButtonText; + --spectrum-calendar-day-text-color-selected-hover: HighlightText; + --spectrum-calendar-day-title-text-color: CanvasText; + --spectrum-calendar-day-today-background-color: ButtonText; + --spectrum-calendar-day-today-background-color-down: ButtonText; + --spectrum-calendar-day-today-background-color-hover: ButtonText; + --spectrum-calendar-day-today-text-color: ButtonFace; + &.is-range-selection { + color: HighlightText; + } + &.is-disabled { + &.is-range-selection { + background: Highlight; + color: HighlightText; + } + + &.is-selected { + background: Highlight; + color: HighlightText; + } + } + &.is-unavailable { + &.is-today { + color: var(--spectrum-calendar-day-text-color-hover); + } + } + &:hover { + &.is-today { + color: var(--spectrum-calendar-day-today-text-color); + } + } + } +} diff --git a/spectrum-css-temp/components/calendar/vars.css b/spectrum-css-temp/components/calendar/vars.css new file mode 100644 index 00000000000..ca1e08522d8 --- /dev/null +++ b/spectrum-css-temp/components/calendar/vars.css @@ -0,0 +1,14 @@ +/* + * Copyright 2020 Adobe. All rights reserved. + * This file is licensed to you under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. You may obtain a copy + * of the License at http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS + * OF ANY KIND, either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + */ + +@import './index.css'; +@import './skin.css'; diff --git a/spectrum-css-temp/components/card/index.css b/spectrum-css-temp/components/card/index.css new file mode 100644 index 00000000000..c5023d7d208 --- /dev/null +++ b/spectrum-css-temp/components/card/index.css @@ -0,0 +1,1139 @@ +/* +Copyright 2019 Adobe. All rights reserved. +This file is licensed to you under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. You may obtain a copy +of the License at http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under +the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS +OF ANY KIND, either express or implied. See the License for the specific language +governing permissions and limitations under the License. +*/ + +@import '../commons/index.css'; + +/** +LAYERS: There are 5 layers to quiet cards +layer -1: + card back color, seen mostly in quiet cards in a grid + +layer default: + all content provided by the user + +layer 1: + avatar + +layer 2: + color covering + +layer 3: + checkbox +*/ +/** +LAYERS: There are 4 layers to standard/horizontal cards +no -1 layer because standard cards have a background already +layer default: + all content provided by the user + +layer 1: + avatar + +layer 2: + color covering + +layer 3: + checkbox +*/ + +/** +LAYOUTS + standard-vertical standard-horizontal quiet-vertical +vertical-masonry x no x +horizontal-masonry no no x +tiles x x x +standalone x x x + +Standard Vertical +.spectrum-Card--waterfall +.spectrum-Card--tile +.spectrum-Card--noLayout + +Standard Horizontal +.spectrum-Card--tile +.spectrum-Card--noLayout + +Quiet Vertical +.spectrum-Card--waterfall +.spectrum-Card--gallery +.spectrum-Card--tile +.spectrum-Card--noLayout +*/ + +/** +ELEMENTS +.spectrum-Card +.spectrum-Card:before element in standard cards for border/focus +.spectrum-Card:after element in standard cards for selection overlay +.spectrum-Card-grid element defining the css grid that everything is laid out on +.spectrum-Card-grid:before element in the grid used to enforce aspect ratio in quiet cards +.spectrum-Card-grid:after element in the grid used to decorate with focus ring (required on just the image part in quiet cards) +.spectrum-Card-grid .spectrum-Card-decoration extra element in the grid used to decorative features like the blue overlay just over the image in quiet cards +.spectrum-Card-grid .spectrum-Card-sizeHelper extra element in the grid used to enforce aspect ratio in horizontal cards (can't use the before for this, see FF) +.spectrum-Card-checkboxWrapper +.spectrum-Card-checkbox + +user-provided +.spectrum-Card-image +.spectrum-Card-illustration +.spectrum-Card-avatar +.spectrum-Card-heading +.spectrum-Card-detail +.spectrum-Card-content + */ + + +/** Shared **/ +.spectrum-Card { + box-sizing: border-box; + min-inline-size: var(--spectrum-card-body-header-height);; + block-size: 100%; + border-radius: var(--spectrum-card-border-radius); + + user-select: none; + text-decoration: none; + + &:focus { + outline: none; + } + + .spectrum-Card-heading { + margin: 0; + } + .spectrum-Card-checkboxWrapper { + position: absolute; + inset-inline-start: var(--spectrum-card-checkbox-margin); + inset-block-start: var(--spectrum-card-checkbox-margin); + display: grid; + inline-size: var(--spectrum-quickactions-height); + block-size: var(--spectrum-quickactions-height); + border-radius: var(--spectrum-card-quiet-border-radius); + visibility: hidden; + } + .spectrum-Card-checkbox { + /* make hitbox of checkbox same as the floating background it sits on, top and bottom are computing 0 right now though + using calc(50% - var(--spectrum-checkbox-height) - calc(var(--spectrum-checkbox-box-size) / 2)) + */ + padding: 4px + calc(50% - calc(var(--spectrum-checkbox-box-size) / 2)) + 4px + calc(50% - calc(var(--spectrum-checkbox-box-size) / 2)); + } + + &.is-selected, + &.focus-ring, /* only for visible focus */ + &.is-hovered { + .spectrum-Card-checkboxWrapper { + /* Ideally, this would simply apply is-open to the QuickActions component */ + visibility: visible; + opacity: 1; + pointer-events: all; + } + } +} + +.spectrum-Card-grid { + position: relative; + &:before { + + } + &:after, + .spectrum-Card-decoration{ + pointer-events: none; + } +} + +.spectrum-Card-image { + grid-area: preview; + img { + -webkit-user-drag: none; + user-drag: none; + } +} +.spectrum-Card-illustration { + grid-area: preview; + svg { + -webkit-user-drag: none; + user-drag: none; + } +} +.spectrum-Card-avatar { + grid-area: avatar; + z-index: 1; +} +.spectrum-Card-heading { + grid-area: title; + word-break: break-word; +} +.spectrum-Card-detail { + grid-area: detail; + word-break: break-word; +} +.spectrum-Card-content { + grid-area: content; + word-break: break-word; + overflow: hidden; +} +.spectrum-Card-decoration { + display: none; +} + +/** Standard Vertical **/ +/** Waterfall **/ +.spectrum-Card--waterfall.spectrum-Card--default { + .spectrum-Card-checkboxWrapper { + z-index: 3; + } + &:after { + z-index: 2; + pointer-events: none; + } + position: relative; + border-width: var(--spectrum-card-border-size); + border-style: solid; + border-radius: var(--spectrum-card-border-radius); + + &:before { + content: ' '; + inline-size: 100%; + block-size: 100%; + position: absolute; + inset-inline-start: 0; + inset-block-start: 0; + border-radius: var(--spectrum-card-border-radius); + } + + &:after { + content: ' '; + inline-size: 100%; + block-size: 100%; + position: absolute; + inset-inline-start: 0; + inset-block-start: 0; + border-radius: var(--spectrum-card-border-radius); + } + + .spectrum-Card-grid { + block-size: 100%; + display: grid; + grid-template-columns: var(--spectrum-card-body-padding-left) minmax(0, auto) minmax(var(--spectrum-global-dimension-size-500), 1fr) minmax(0, auto) var(--spectrum-card-body-padding-right); + grid-template-rows: minmax(var(--spectrum-card-coverphoto-height), 1fr) var(--spectrum-global-dimension-size-300) minmax(var(--spectrum-actionbutton-height), auto) auto var(--spectrum-card-body-padding-bottom); + /* absolutely position avatar relative to the preview */ + grid-template-areas: + "preview preview preview preview preview" + ". . . . ." + ". title detail . ." + ". content content content ." + ". . . . ."; + + &:before { + content: ' '; + grid-area: preview; + inline-size: 100%; + block-size: 100%; + border-start-start-radius: var(--spectrum-card-border-radius); + border-start-end-radius: var(--spectrum-card-border-radius); + } + } + + &.spectrum-Card--noPreview .spectrum-Card-grid { + display: grid; + grid-template-columns: var(--spectrum-card-body-padding-left) minmax(0, auto) 1fr minmax(0, auto) var(--spectrum-card-body-padding-right); + grid-template-rows: var(--spectrum-global-dimension-size-300) auto 1fr var(--spectrum-card-body-padding-bottom); + /* absolutely position avatar relative to the preview */ + grid-template-areas: + ". . . . ." + ". title detail . ." + ". content content content ." + ". . . . ."; + + .spectrum-Card-avatar { + display: none; + } + } + + .spectrum-Card-image, + .spectrum-Card-illustration { + inline-size: 100%; + block-size: 100%; + + align-self: center; + justify-self: center; + + border-block-end-width: var(--spectrum-card-border-size); + border-block-end-style: solid; + border-start-start-radius: var(--spectrum-card-border-radius); + border-start-end-radius: var(--spectrum-card-border-radius); + } + .spectrum-Card-image { + } + .spectrum-Card-illustration { + display: grid; /* not sure why flex doesn't work here */ + align-items: center; + justify-items: center; + } + .spectrum-Card-avatar { + grid-area: preview; + position: absolute; + inset-block-end: -10px; + inset-inline-start: var(--spectrum-card-body-padding-left); + } + .spectrum-Card-heading { + align-self: baseline; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + margin-inline-end: var(--spectrum-card-title-padding-right); + } + .spectrum-Card-detail { + align-self: baseline; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } + .spectrum-Card-content { + margin-block-end: 5px; + } +} + +/** Tile **/ +.spectrum-Card--grid.spectrum-Card--default { + .spectrum-Card-checkboxWrapper { + z-index: 3; + } + &:after { + z-index: 2; + pointer-events: none; + } + position: relative; + border-width: var(--spectrum-card-border-size); + border-style: solid; + border-radius: var(--spectrum-card-border-radius); + + &:before { + content: ' '; + inline-size: 100%; + block-size: 100%; + position: absolute; + inset-inline-start: 0; + inset-block-start: 0; + border-radius: var(--spectrum-card-border-radius); + } + + &:after { + content: ' '; + inline-size: 100%; + block-size: 100%; + position: absolute; + inset-inline-start: 0; + inset-block-start: 0; + border-radius: var(--spectrum-card-border-radius); + } + + &:not(.spectrum-Card--noPreview) .spectrum-Card-grid { + display: grid; + block-size: 100%; + grid-template-columns: var(--spectrum-card-body-padding-left) minmax(0, auto) minmax(var(--spectrum-global-dimension-size-500), 1fr) minmax(0, auto) var(--spectrum-card-body-padding-right); + grid-template-rows: minmax(var(--spectrum-card-coverphoto-height), 1fr) var(--spectrum-global-dimension-size-200) minmax(var(--spectrum-actionbutton-height), auto) auto var(--spectrum-card-body-padding-bottom); + /* absolutely position avatar relative to the preview */ + grid-template-areas: + "preview preview preview preview preview" + ". . . . ." + ". title detail . ." + ". content content content ." + ". . . . ."; + + &:before { + content: ' '; + grid-area: preview; + inline-size: 100%; + block-size: 100%; + border-start-start-radius: var(--spectrum-card-border-radius); + border-start-end-radius: var(--spectrum-card-border-radius); + } + } + + &.spectrum-Card--noPreview .spectrum-Card-grid { + display: grid; + block-size: 100%; + grid-template-columns: var(--spectrum-card-body-padding-left) minmax(0, auto) minmax(var(--spectrum-global-dimension-size-500), 1fr) minmax(0, auto) var(--spectrum-card-body-padding-right); + grid-template-rows: var(--spectrum-global-dimension-size-300) auto 1fr var(--spectrum-card-body-padding-bottom); + /* absolutely position avatar relative to the preview */ + grid-template-areas: + ". . . . ." + ". title detail . ." + ". content content content ." + ". . . . ."; + + .spectrum-Card-avatar { + display: none; + } + } + .spectrum-Card-image, + .spectrum-Card-illustration { + inline-size: 100%; + block-size: 100%; + /*min-inline-size: var(--spectrum-card-min-width); causes to obscure border */ + + align-self: center; + justify-self: center; + + border-block-end-width: var(--spectrum-card-border-size); + border-block-end-style: solid; + border-start-start-radius: var(--spectrum-card-border-radius); + border-start-end-radius: var(--spectrum-card-border-radius); + } + .spectrum-Card-image { + } + .spectrum-Card-illustration { + display: grid; /* not sure why flex doesn't work here */ + align-items: center; + justify-items: center; + } + .spectrum-Card-avatar { + grid-area: preview; + position: absolute; + inset-block-end: -10px; + inset-inline-start: var(--spectrum-card-body-padding-left); + } + .spectrum-Card-heading { + align-self: baseline; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + margin-inline-end: var(--spectrum-card-title-padding-right); + } + .spectrum-Card-detail { + align-self: baseline; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } + .spectrum-Card-content { + margin-block-end: 5px; + white-space: nowrap; + text-overflow: ellipsis; + } +} + +/** Standalone **/ +.spectrum-Card--noLayout.spectrum-Card--default { + .spectrum-Card-checkboxWrapper { + z-index: 3; + } + &:after { + z-index: 2; + pointer-events: none; + } + position: relative; + border-width: var(--spectrum-card-border-size); + border-style: solid; + border-radius: var(--spectrum-card-border-radius); + + &:before { + content: ' '; + inline-size: 100%; + block-size: 100%; + position: absolute; + inset-inline-start: 0; + inset-block-start: 0; + border-radius: var(--spectrum-card-border-radius); + } + + &:after { + content: ' '; + inline-size: 100%; + block-size: 100%; + position: absolute; + inset-inline-start: 0; + inset-block-start: 0; + border-radius: var(--spectrum-card-border-radius); + } + + &:not(.spectrum-Card--noPreview) .spectrum-Card-grid { + display: grid; + grid-template-columns: var(--spectrum-card-body-padding-left) minmax(0, auto) minmax(var(--spectrum-global-dimension-size-500), 1fr) minmax(0, auto) var(--spectrum-card-body-padding-right); + grid-template-rows: minmax(var(--spectrum-card-coverphoto-height), auto) var(--spectrum-global-dimension-size-300) minmax(var(--spectrum-actionbutton-height), auto) 1fr var(--spectrum-card-body-padding-bottom); + /* absolutely position avatar relative to the preview */ + grid-template-areas: + "preview preview preview preview preview" + ". . . . ." + ". title detail . ." + ". content content content ." + ". . . . ."; + + &:before { + content: ' '; + grid-area: preview; + inline-size: 100%; + block-size: 100%; + border-start-start-radius: var(--spectrum-card-border-radius); + border-start-end-radius: var(--spectrum-card-border-radius); + } + } + + &.spectrum-Card--noPreview .spectrum-Card-grid { + display: grid; + grid-template-columns: var(--spectrum-card-body-padding-left) minmax(0, auto) minmax(var(--spectrum-global-dimension-size-500), 1fr) minmax(0, auto) var(--spectrum-card-body-padding-right); + grid-template-rows: var(--spectrum-global-dimension-size-300) auto 1fr var(--spectrum-card-body-padding-bottom); + /* absolutely position avatar relative to the preview */ + grid-template-areas: + ". . . . ." + ". title detail . ." + ". content content content ." + ". . . . ."; + + /* TODO: is this accurate? if we don't want to enforce it, then we can + give min-height to spectrum-Card-image/illustration + and it would no longer be a card state, we could simplify */ + .spectrum-Card-avatar { + display: none; + } + } + .spectrum-Card-image, + .spectrum-Card-illustration { + inline-size: 100%; + block-size: 100%; + /*min-inline-size: var(--spectrum-card-min-width); causes to obscure border */ + + align-self: center; + justify-self: center; + + border-block-end-width: var(--spectrum-card-border-size); + border-block-end-style: solid; + border-start-start-radius: var(--spectrum-card-border-radius); + border-start-end-radius: var(--spectrum-card-border-radius); + } + .spectrum-Card-image { + } + .spectrum-Card-illustration { + display: grid; /* not sure why flex doesn't work here */ + align-items: center; + justify-items: center; + inline-size: 100%; + block-size: var(--spectrum-card-coverphoto-height); /* this may be an incorrect assumption */ + } + .spectrum-Card-avatar { + grid-area: preview; + position: absolute; + inset-block-end: -10px; + inset-inline-start: var(--spectrum-card-body-padding-left); + } + .spectrum-Card-heading { + align-self: baseline; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + margin-inline-end: var(--spectrum-card-title-padding-right); + } + .spectrum-Card-detail { + align-self: baseline; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } + .spectrum-Card-content { + margin-block-end: 5px; + } +} +/** END Standard Vertical **/ + + +/** Quiet Vertical **/ +/** Waterfall **/ +.spectrum-Card--waterfall.spectrum-Card--isQuiet { + .spectrum-Card-checkboxWrapper { + z-index: 3; + } + .spectrum-Card-grid:before { + z-index: -1; + } + .spectrum-Card-grid:after { + z-index: 2; + } + min-inline-size: var(--spectrum-card-quiet-min-size); + + .spectrum-Card-grid { + block-size: 100%; + display: grid; + grid-template-columns: minmax(0, auto) minmax(var(--spectrum-global-dimension-size-500), 1fr) minmax(0, auto); + grid-template-rows: minmax(var(--spectrum-card-coverphoto-height), 1fr) var(--spectrum-card-quiet-body-header-margin-top) minmax(var(--spectrum-actionbutton-height), auto) auto; + grid-template-areas: + "preview preview preview" + ". . . " + "title detail . " + "content content content"; + + &:before { + content: ' '; + grid-area: preview; + + border-radius: var(--spectrum-card-quiet-border-radius); + } + + &:after { + content: ' '; + grid-area: preview; + position: absolute; + inset-inline-start: 0; + inset-inline-end: 0; + inset-block-start: 0; + inset-block-end: 0; + margin: calc(var(--spectrum-alias-focus-ring-gap) * -2); + + border-radius: calc(var(--spectrum-card-quiet-border-radius) + var(--spectrum-alias-focus-ring-gap)); + } + .spectrum-Card-decoration { + display: block; + grid-area: preview; + inline-size: 100%; + block-size: 100%; + + border-radius: var(--spectrum-card-quiet-border-radius); + } + } + .spectrum-Card-image, + .spectrum-Card-illustration { + block-size: 100%; + inline-size: 100%; + min-inline-size: 100%; /* I do not know why setting a min-width causes the image to shrink */ + + align-self: center; + justify-self: center; + border-radius: var(--spectrum-card-quiet-border-radius); + } + .spectrum-Card-illustration { + display: grid; /* not sure why flex doesn't work here */ + align-items: center; + justify-items: center; + } + .spectrum-Card-avatar { + display: none; + } + .spectrum-Card-heading { + align-self: baseline; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + margin-inline-end: var(--spectrum-card-title-padding-right); + } + .spectrum-Card-detail { + align-self: baseline; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + margin-inline-end: var(--spectrum-card-title-padding-right); + } + .spectrum-Card-content { + margin-block-end: 5px; + } +} + +/** Gallery **/ +/** Non-collection version doesn't work in FF, but should work in a collection which determines the size **/ +.spectrum-Card--gallery.spectrum-Card--isQuiet { + .spectrum-Card-checkboxWrapper { + z-index: 3; + } + .spectrum-Card-grid:before { + z-index: -1; + } + .spectrum-Card-grid:after { + z-index: 2; + } + min-inline-size: 0; + + .spectrum-Card-grid { + block-size: 100%; + display: grid; + grid-template-columns: minmax(0, auto) minmax(var(--spectrum-global-dimension-size-500), 1fr) minmax(0, auto); + grid-template-rows: 1fr var(--spectrum-card-quiet-body-header-margin-top) var(--spectrum-actionbutton-height) var(--spectrum-alias-single-line-height); + grid-template-areas: + "preview preview preview" + ". . . " + "title detail . " + "content content content"; + + &:before { + content: ' '; + grid-area: preview; + + border-radius: var(--spectrum-card-quiet-border-radius); + } + + &:after { + content: ' '; + grid-area: preview; + position: absolute; + inset-inline-start: 0; + inset-inline-end: 0; + inset-block-start: 0; + inset-block-end: 0; + margin: calc(var(--spectrum-alias-focus-ring-gap) * -2); + + border-radius: calc(var(--spectrum-card-quiet-border-radius) + var(--spectrum-alias-focus-ring-gap)); + } + .spectrum-Card-decoration { + display: block; + grid-area: preview; + inline-size: 100%; + block-size: 100%; + + border-radius: var(--spectrum-card-quiet-border-radius); + } + } + .spectrum-Card-image, + .spectrum-Card-illustration { + block-size: 100%; + inline-size: 100%; + min-inline-size: 100%; /* I do not know why setting a min-width causes the image to shrink */ + + align-self: center; + justify-self: center; + border-radius: var(--spectrum-card-quiet-border-radius); + > img { + width: unset; + margin: auto; + } + } + + .spectrum-Card-illustration { + display: grid; /* not sure why flex doesn't work here */ + align-items: center; + justify-items: center; + } + .spectrum-Card-avatar { + display: none; + } + .spectrum-Card-heading { + align-self: baseline; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + margin-inline-end: var(--spectrum-card-title-padding-right); + } + .spectrum-Card-detail { + align-self: baseline; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + margin-inline-end: var(--spectrum-card-title-padding-right); + } + .spectrum-Card-content { + margin-block-end: 5px; + white-space: nowrap; + text-overflow: ellipsis; + } +} + +/** Tile **/ +.spectrum-Card--grid.spectrum-Card--isQuiet { + .spectrum-Card-checkboxWrapper { + z-index: 3; + } + .spectrum-Card-grid:before { + z-index: -1; + } + .spectrum-Card-grid:after { + z-index: 2; + } + min-inline-size: var(--spectrum-card-quiet-min-size); + + .spectrum-Card-grid { + block-size: 100%; + display: grid; + grid-template-columns: minmax(0, auto) minmax(var(--spectrum-global-dimension-size-500), 1fr) minmax(0, auto); + grid-template-rows: auto var(--spectrum-card-quiet-body-header-margin-top) minmax(var(--spectrum-actionbutton-height), auto) var(--spectrum-alias-single-line-height) 1fr; + grid-template-areas: + "preview preview preview" + ". . . " + "title detail . " + "content content content" + ". . . "; + + &:before { + content: ' '; + grid-area: preview; + + /* aspect ratio 1:1 because padding-top is calculated from width */ + inline-size: 0; + block-size: 0; + padding-top: 100%; + padding-left: 100%; + + border-radius: var(--spectrum-card-quiet-border-radius); + } + + &:after { + content: ' '; + grid-area: preview; + position: absolute; + inset-inline-start: 0; + inset-inline-end: 0; + inset-block-start: 0; + inset-block-end: 0; + margin: calc(var(--spectrum-alias-focus-ring-gap) * -2); + + border-radius: calc(var(--spectrum-card-quiet-border-radius) + var(--spectrum-alias-focus-ring-gap)); + } + .spectrum-Card-decoration { + display: block; + grid-area: preview; + inline-size: 100%; + block-size: 100%; + + border-radius: var(--spectrum-card-quiet-border-radius); + } + } + .spectrum-Card-image, + .spectrum-Card-illustration { + box-sizing: border-box; /* so that 100% counts padding as well */ + block-size: 100%; + inline-size: 100%; + min-inline-size: 100%; /* I do not know why setting a min-width causes the image to shrink */ + + align-self: center; + justify-self: center; + } + .spectrum-Card-image { + clip-path: inset(0% 0% 0% 0% round var(--spectrum-card-quiet-border-radius)); + /* remove from flow so it doesn't affect grid area size, this way the aspect ratio is maintained + todo: figure out why or how it's already in the correct centered spot */ + position: absolute; + } + .spectrum-Card-illustration { + display: grid; /* not sure why flex doesn't work here */ + align-items: center; + justify-items: center; + } + .spectrum-Card-avatar { + display: none; + } + .spectrum-Card-heading { + align-self: baseline; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + margin-inline-end: var(--spectrum-card-title-padding-right); + } + .spectrum-Card-detail { + align-self: baseline; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + margin-inline-end: var(--spectrum-card-title-padding-right); + } + .spectrum-Card-content { + margin-block-end: 5px; + white-space: nowrap; + text-overflow: ellipsis; + } +} + +/** Standalone **/ +.spectrum-Card--noLayout.spectrum-Card--isQuiet { + .spectrum-Card-checkboxWrapper { + z-index: 3; + } + .spectrum-Card-grid:before { + z-index: -1; + } + .spectrum-Card-grid:after { + z-index: 2; + } + min-inline-size: var(--spectrum-card-quiet-min-size); + + .spectrum-Card-grid { + block-size: 100%; + display: grid; + grid-template-columns: minmax(0, auto) minmax(var(--spectrum-global-dimension-size-500), 1fr) minmax(0, auto); + grid-template-rows: auto var(--spectrum-card-quiet-body-header-margin-top) minmax(var(--spectrum-actionbutton-height), auto) auto var(--spectrum-card-body-padding-bottom); + grid-template-areas: + "preview preview preview" + ". . . " + "title detail . " + "content content content" + ". . . "; + + &:before { + content: ' '; + grid-area: preview; + + border-radius: var(--spectrum-card-quiet-border-radius); + } + + &:after { + content: ' '; + grid-area: preview; + position: absolute; + inset-inline-start: 0; + inset-inline-end: 0; + inset-block-start: 0; + inset-block-end: 0; + margin: calc(var(--spectrum-alias-focus-ring-gap) * -2); + padding: calc(var(--spectrum-alias-focus-ring-gap) * 2); + background-clip: content-box; + + border-radius: calc(var(--spectrum-card-quiet-border-radius) + var(--spectrum-alias-focus-ring-gap)); + } + .spectrum-Card-decoration { + display: block; + grid-area: preview; + inline-size: 100%; + block-size: 100%; + + border-radius: var(--spectrum-card-quiet-border-radius); + } + } + .spectrum-Card-image, + .spectrum-Card-illustration { + display: flex; + + align-self: center; + justify-self: center; + + border-radius: var(--spectrum-card-quiet-border-radius); + } + .spectrum-Card-image { + } + .spectrum-Card-illustration { + display: grid; /* not sure why flex doesn't work here */ + align-items: center; + justify-items: center; + inline-size: 100%; + block-size: var(--spectrum-card-coverphoto-height); + } + .spectrum-Card-avatar { + display: none; + } + .spectrum-Card-heading { + align-self: baseline; + margin-inline-end: var(--spectrum-card-title-padding-right); + } + .spectrum-Card-detail { + align-self: baseline; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + margin-inline-end: var(--spectrum-card-title-padding-right); + } + .spectrum-Card-content { + margin-block-end: 5px; + } +} +/** END Quiet Vertical **/ + +/** Standard Horizontal **/ +/** +Broken as a CSS only solution in Safari until aspect-ratio is supported https://caniuse.com/?search=aspect-ratio +For now working around it with a useLayoutEffect in CardBase. +**/ +/** Tile **/ +.spectrum-Card--grid.spectrum-Card--horizontal { + .spectrum-Card-grid:after { + z-index: 2; + } + border-width: var(--spectrum-card-border-size); + border-style: solid; + border-radius: var(--spectrum-card-border-radius); + .spectrum-Card-checkboxWrapper { + display: none; + } + &.is-focused, + &.is-selected, + &.is-hovered { + .spectrum-Card-checkboxWrapper { + display: none; + } + } + + .spectrum-Card-grid { + display: grid; + block-size: 100%; + grid-template-columns: auto var(--spectrum-global-dimension-size-200) 1fr auto var(--spectrum-global-dimension-size-200); + grid-template-rows: var(--spectrum-global-dimension-size-400) 1fr var(--spectrum-global-dimension-size-200); + grid-template-areas: + "preview . title . ." + "preview . content content ." + "preview . . . ."; + + &:before { + content: ' '; + position: absolute; + + inline-size: 100%; + block-size: 100%; + border-radius: var(--spectrum-card-border-radius); + } + } + .spectrum-Card-image, + .spectrum-Card-illustration { + grid-area: preview; + block-size: 100%; + /*aspect-ratio: 1/1;*/ /* can't use in safari or FF :( */ + + align-self: center; + justify-self: center; + + border-start-start-radius: var(--spectrum-card-border-radius); + border-end-start-radius: var(--spectrum-card-border-radius); + border-inline-end-width: var(--spectrum-card-border-size); + border-inline-end-style: solid; + } + + .spectrum-Card-image { + } + + .spectrum-Card-illustration { + display: grid; + align-items: center; + justify-items: center; + } + + .spectrum-Card-avatar { + display: none; + } + .spectrum-Card-heading { + align-self: center; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + margin-inline-end: var(--spectrum-card-title-padding-right); + } + .spectrum-Card-detail { + display: none; + } + /* how to handle long description?? */ + .spectrum-Card-content { + width: 100%; + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 2; + /* not working because this line is removed in css preprocessing */ + -webkit-box-orient: vertical; + visibility: visible; + } +} + +/** Standalone **/ +.spectrum-Card--noLayout.spectrum-Card--horizontal { + .spectrum-Card-grid:after { + z-index: 2; + } + border-width: var(--spectrum-card-border-size); + border-style: solid; + border-radius: var(--spectrum-card-border-radius); + .spectrum-Card-checkboxWrapper { + display: none; + } + &.is-focused, + &.is-selected, + &.is-hovered { + .spectrum-Card-checkboxWrapper { + display: none; + } + } + + .spectrum-Card-grid { + position: relative; + display: grid; + block-size: 100%; + max-block-size: 100%; + grid-template-columns: auto var(--spectrum-global-dimension-size-200) 1fr auto var(--spectrum-global-dimension-size-200); + grid-template-rows: var(--spectrum-global-dimension-size-400) 1fr var(--spectrum-global-dimension-size-200); + grid-template-areas: + "preview . title . ." + "preview . content content ." + "preview . . . ."; + + &:before { + content: ' '; + inline-size: 100%; + block-size: 100%; + position: absolute; + border-radius: var(--spectrum-card-border-radius); + } + + &:after { + content: ' '; + inline-size: 100%; + block-size: 100%; + position: absolute; + border-radius: var(--spectrum-card-border-radius); + } + } + .spectrum-Card-image, + .spectrum-Card-illustration { + grid-area: preview; + block-size: 100%; + /*aspect-ratio: 1/1;*/ /* can't use in safari or FF :( */ + + align-self: center; + justify-self: center; + + border-start-start-radius: var(--spectrum-card-border-radius); + border-end-start-radius: var(--spectrum-card-border-radius); + border-inline-end-width: var(--spectrum-card-border-size); + border-inline-end-style: solid; + } + + .spectrum-Card-image { + } + + .spectrum-Card-illustration { + display: grid; + align-items: center; + justify-items: center; + } + + .spectrum-Card-avatar { + display: none; + } + .spectrum-Card-heading { + align-self: center; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + margin-inline-end: var(--spectrum-card-title-padding-right); + } + .spectrum-Card-detail { + display: none; + } + /* how to handle long description?? */ + .spectrum-Card-content { + width: 100%; + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 2; + /* not working because this line is removed in css preprocessing */ + -webkit-box-orient: vertical; + visibility: visible; + } +} +/** END Standard Horizontal **/ + +/* CardView styles */ +.spectrum-CardView { + outline: none; + + .spectrum-CardView-centeredWrapper { + display: flex; + align-items: center; + justify-content: center; + width: 100%; + height: 100%; + } + .spectrum-CardView-row { + outline: none; + height: 100% + } +} diff --git a/spectrum-css-temp/components/card/skin.css b/spectrum-css-temp/components/card/skin.css new file mode 100644 index 00000000000..509b4325599 --- /dev/null +++ b/spectrum-css-temp/components/card/skin.css @@ -0,0 +1,350 @@ +/* +Copyright 2019 Adobe. All rights reserved. +This file is licensed to you under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. You may obtain a copy +of the License at http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under +the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS +OF ANY KIND, either express or implied. See the License for the specific language +governing permissions and limitations under the License. +*/ + +.spectrum-Card { + + &.is-drop-target { + border-color: var(--spectrum-card-border-color-key-focus); + box-shadow: 0 0 0 1px var(--spectrum-card-border-color-key-focus); + background-color: var(--spectrum-alias-highlight-selected); + } + + .spectrum-Card-checkboxWrapper { + background-color: var(--spectrum-quickactions-background-color); + } + + .spectrum-Card-detail { + color: var(--spectrum-card-description-text-color); + } +} + +.spectrum-Card-illustration { +} +.spectrum-Card-image { +} +.spectrum-Card-avatar { +} +.spectrum-Card-heading { + color: var(--spectrum-global-color-gray-900); +} +.spectrum-Card-detail { + color: var(--spectrum-global-color-gray-700); +} +.spectrum-Card-actions { +} +.spectrum-Card-content { + color: var(--spectrum-global-color-gray-700); +} +.spectrum-Card-divider { +} +.spectrum-Card-footer { +} + +.spectrum-Card--default { + border-color: var(--spectrum-card-border-color); + background-color: var(--spectrum-card-background-color); + + &:hover { + border-color: var(--spectrum-card-border-color-hover); + &:before { + box-shadow: 0 0 0 1px var(--spectrum-card-border-color-hover); + } + } + + &.is-selected { + border-color: var(--spectrum-card-border-color-key-focus); + &:before { + /* Image needs to go right to the edge, so no border. Adding border on focus causes + * a jump in the text and image. So focus ring is only box-shadow + */ + box-shadow: 0 0 0 1px var(--spectrum-card-border-color-key-focus); + } + } + + &:hover.is-selected { + border-color: var(--spectrum-card-border-color-key-focus); + &:before { + /* Image needs to go right to the edge, so no border. Adding border on focus causes + * a jump in the text and image. So focus ring is only box-shadow + */ + box-shadow: 0 0 0 1px var(--spectrum-card-border-color-key-focus); + } + } + + &:focus-visible { + border-color: var(--spectrum-card-border-color-key-focus); + &:before { + box-shadow: 0 0 0 2px var(--spectrum-card-border-color-key-focus); + } + } + + &:focus-visible:hover.is-selected { + border-color: var(--spectrum-card-border-color-key-focus); + &:before { + box-shadow: 0 0 0 2px var(--spectrum-card-border-color-key-focus); + } + } + + &.is-selected { + border-color: var(--spectrum-card-border-color-key-focus); + &:after { + background-color: var(--spectrum-global-color-blue-400); + opacity: 0.15; + } + &:hover { + border-color: var(--spectrum-card-border-color-key-focus); + &:after { + background-color: var(--spectrum-global-color-blue-400); + opacity: 0.25; + } + } + } + &:before { + transition: background-color var(--spectrum-global-animation-duration-100); + } + &:after { + transition: background-color var(--spectrum-global-animation-duration-100), + opacity var(--spectrum-global-animation-duration-100); + opacity: 0; + } + .spectrum-Card-grid { + &:before { + transition: background-color var(--spectrum-global-animation-duration-100); + background-color: var(--spectrum-card-quiet-preview-background-color); + } + } + + .spectrum-Card-image, + .spectrum-Card-illustration { + border-block-end-color: var(--spectrum-card-coverphoto-border-color); + } + .spectrum-Card-image { + } + .spectrum-Card-avatar { + } + .spectrum-Card-heading { + } + .spectrum-Card-detail { + } + .spectrum-Card-actions { + } + .spectrum-Card-content { + color: var(--spectrum-card-description-text-color); + } + .spectrum-Card-divider { + } + .spectrum-Card-footer { + } +} + +.spectrum-Card--isQuiet { + border-color: transparent; + background-color: transparent; + &:hover { + .spectrum-Card-grid { + &:before { + background-color: var(--spectrum-card-quiet-preview-background-color-hover); + /* TODO do we still want this border on the image itself? */ + box-shadow: 0 0 0 1px var(--spectrum-card-border-color-hover); + } + } + } + + &.is-selected { + .spectrum-Card-grid { + &:after { + /* Image needs to go right to the edge, so no border. Adding border on focus causes + * a jump in the text and image. So focus ring is only box-shadow + */ + box-shadow: 0 0 0 1px var(--spectrum-card-border-color-key-focus); + } + } + } + + &:hover.is-selected { + .spectrum-Card-grid { + &:after { + /* Image needs to go right to the edge, so no border. Adding border on focus causes + * a jump in the text and image. So focus ring is only box-shadow + */ + box-shadow: 0 0 0 1px var(--spectrum-card-border-color-key-focus); + } + } + } + + &:focus-visible { + .spectrum-Card-grid { + &:after { + box-shadow: 0 0 0 2px var(--spectrum-card-border-color-key-focus); + } + } + } + + &:focus-visible:hover.is-selected { + .spectrum-Card-grid { + &:after { + box-shadow: 0 0 0 2px var(--spectrum-card-border-color-key-focus); + } + } + } + + &.is-selected { + .spectrum-Card-grid { + .spectrum-Card-decoration { + opacity: 0.15; + } + } + &:hover { + .spectrum-Card-grid { + .spectrum-Card-decoration { + opacity: 0.25; + } + } + } + } + + .spectrum-Card-grid { + &:before { + transition: background-color var(--spectrum-global-animation-duration-100); + background-color: var(--spectrum-card-quiet-preview-background-color); + } + } + .spectrum-Card-image, + .spectrum-Card-illustration { + } + .spectrum-Card-image { + } + .spectrum-Card-avatar { + } + .spectrum-Card-heading { + } + .spectrum-Card-detail { + } + .spectrum-Card-actions { + } + .spectrum-Card-content { + } + .spectrum-Card-divider { + } + .spectrum-Card-footer { + } + .spectrum-Card-decoration { + transition: background-color var(--spectrum-global-animation-duration-100), + opacity var(--spectrum-global-animation-duration-100); + background-color: var(--spectrum-global-color-blue-400); + opacity: 0; + } +} + +.spectrum-Card--horizontal { + border-color: var(--spectrum-card-border-color); + background-color: var(--spectrum-card-background-color); + &:hover { + border-color: var(--spectrum-card-border-color-hover); + .spectrum-Card-grid { + &:before { + box-shadow: 0 0 0 1px var(--spectrum-card-border-color-hover); + } + } + } + + &.is-selected { + border-color: var(--spectrum-card-border-color-key-focus); + .spectrum-Card-grid { + &:before { + /* Image needs to go right to the edge, so no border. Adding border on focus causes + * a jump in the text and image. So focus ring is only box-shadow + */ + box-shadow: 0 0 0 1px var(--spectrum-card-border-color-key-focus); + } + } + } + + &:hover.is-selected { + border-color: var(--spectrum-card-border-color-key-focus); + .spectrum-Card-grid { + &:before { + /* Image needs to go right to the edge, so no border. Adding border on focus causes + * a jump in the text and image. So focus ring is only box-shadow + */ + box-shadow: 0 0 0 1px var(--spectrum-card-border-color-key-focus); + } + } + } + + &:focus-visible { + border-color: var(--spectrum-card-border-color-key-focus); + .spectrum-Card-grid { + &:before { + box-shadow: 0 0 0 2px var(--spectrum-card-border-color-key-focus); + } + } + } + + &:focus-visible:hover.is-selected { + border-color: var(--spectrum-card-border-color-key-focus); + .spectrum-Card-grid { + &:before { + box-shadow: 0 0 0 2px var(--spectrum-card-border-color-key-focus); + } + } + } + + &.is-selected { + border-color: var(--spectrum-card-border-color-key-focus); + .spectrum-Card-grid { + &:after { + background-color: var(--spectrum-global-color-blue-400); + opacity: 0.15; + } + } + &:hover { + border-color: var(--spectrum-card-border-color-key-focus); + .spectrum-Card-grid { + &:after { + background-color: var(--spectrum-global-color-blue-400); + opacity: 0.25; + } + } + } + } + + .spectrum-Card-grid { + &:after { + transition: background-color var(--spectrum-global-animation-duration-100), + opacity var(--spectrum-global-animation-duration-100); + opacity: 0; + } + } + .spectrum-Card-image, + .spectrum-Card-illustration { + border-inline-end-color: var(--spectrum-card-coverphoto-border-color); + } + .spectrum-Card-image { + } + .spectrum-Card-illustration { + } + .spectrum-Card-avatar { + } + .spectrum-Card-heading { + } + .spectrum-Card-detail { + } + .spectrum-Card-actions { + } + .spectrum-Card-content { + } + .spectrum-Card-divider { + } + .spectrum-Card-footer { + } +} diff --git a/spectrum-css-temp/components/card/vars.css b/spectrum-css-temp/components/card/vars.css new file mode 100644 index 00000000000..ca1e08522d8 --- /dev/null +++ b/spectrum-css-temp/components/card/vars.css @@ -0,0 +1,14 @@ +/* + * Copyright 2020 Adobe. All rights reserved. + * This file is licensed to you under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. You may obtain a copy + * of the License at http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS + * OF ANY KIND, either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + */ + +@import './index.css'; +@import './skin.css'; diff --git a/spectrum-css-temp/components/checkbox/index.css b/spectrum-css-temp/components/checkbox/index.css new file mode 100644 index 00000000000..02c42cf2d51 --- /dev/null +++ b/spectrum-css-temp/components/checkbox/index.css @@ -0,0 +1,191 @@ +/* +Copyright 2019 Adobe. All rights reserved. +This file is licensed to you under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. You may obtain a copy +of the License at http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under +the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS +OF ANY KIND, either express or implied. See the License for the specific language +governing permissions and limitations under the License. +*/ + +@import '../commons/index.css'; + +:root { + /* Hardcoded for wrapping study. + Will be a DNA token in https://jira.corp.adobe.com/browse/SDS-4466 */ + --spectrum-checkbox-label-margin-top: var(--spectrum-global-dimension-size-65); + + /* Fix for inconsistent line-height between browsers that would push the label 1px below the intended baseline */ + /* more info: https://stackoverflow.com/questions/47700568/css-fonts-render-differently-in-firefox-and-chrome */ + --spectrum-checkbox-label-line-height: 1.49; +} + +.spectrum-Checkbox { + display: inline-flex; + box-sizing: border-box; + align-items: flex-start; + + position: relative; + + min-block-size: var(--spectrum-checkbox-height); + max-inline-size: 100%; + + padding-inline-end: calc(var(--spectrum-checkbox-cursor-hit-x) * 2); + + vertical-align: top; + + isolation: isolate; +} + +.spectrum-Checkbox-input { + /* Change the font styles in all browsers for input. */ + font-family: inherit; + font-size: 100%; + line-height: 1.15; + + /* Remove the margin for input in Firefox and Safari. */ + margin: 0; + + /* Show the overflow for input in Edge. */ + overflow: visible; + + /* Add the correct box sizing for [type="checkbox"] in IE 10-. */ + box-sizing: border-box; + + /* Remove the padding for [type="checkbox"] in IE 10-. */ + padding: 0; + + /* Hit area */ + position: absolute; + inset-block-start: 0; + inset-inline-start: calc(var(--spectrum-checkbox-cursor-hit-x) * -1); + inline-size: calc(100% + var(--spectrum-checkbox-cursor-hit-x)); + block-size: 100%; + + opacity: .0001; + z-index: 1; + + cursor: default; + + &:disabled { + cursor: default; + } + + &:focus-visible { + + .spectrum-Checkbox-box { + &:after { + margin: calc(var(--spectrum-alias-focus-ring-gap) * -1); + } + } + } +} + +.spectrum-Checkbox.is-indeterminate { + .spectrum-Checkbox-box { + &:before { + border-width: calc(var(--spectrum-checkbox-box-size) / 2); + } + + .spectrum-Checkbox-checkmark { + display: none; + } + + .spectrum-Checkbox-partialCheckmark { + display: block; + + transform: scale(1); + opacity: 1; + } + } +} + +.spectrum-Checkbox.is-checked { + .spectrum-Checkbox-box { + &:before { + border-width: calc(var(--spectrum-checkbox-box-size) / 2); + } + + + .spectrum-Checkbox-checkmark { + transform: scale(1); + opacity: 1; + } + } +} + +.spectrum-Checkbox-label { + text-align: start; + margin-inline-start: var(--spectrum-checkbox-text-gap); + margin-block-start: var(--spectrum-checkbox-label-margin-top); + font-size: var(--spectrum-checkbox-text-size); + font-weight: var(--spectrum-checkbox-text-font-weight); + line-height: var(--spectrum-checkbox-label-line-height); +} + +.spectrum-Checkbox-box { + position: relative; + box-sizing: border-box; + inline-size: var(--spectrum-checkbox-box-size); + block-size: var(--spectrum-checkbox-box-size); + + /* Fix vertical alignment when not wrapping since we're flex-start */ + margin: calc((var(--spectrum-checkbox-height) - var(--spectrum-checkbox-box-size)) / 2) 0; + + flex-grow: 0; + flex-shrink: 0; + + /* :before is used to draw the box fill */ + &:before { + display: block; + z-index: 0; + content: ''; + box-sizing: border-box; + position: absolute; + + width: var(--spectrum-checkbox-box-size); + height: var(--spectrum-checkbox-box-size); + + border-radius: var(--spectrum-checkbox-box-border-radius); + border-width: var(--spectrum-checkbox-box-border-size); + border-style: solid; + + transition: border var(--spectrum-global-animation-duration-100) ease-in-out, box-shadow var(--spectrum-global-animation-duration-100) ease-in-out; + } + + &:after { + border-radius: calc(var(--spectrum-checkbox-box-border-radius) + var(--spectrum-alias-focus-ring-gap)); + content: ''; + display: block; + position: absolute; + left: 0; + right: 0; + bottom: 0; + top: 0; + margin: var(--spectrum-alias-focus-ring-gap); + transform: translateX(0); /* Forces FF to render on the pixel grid */ + + transition: opacity var(--spectrum-global-animation-duration-100) ease-out, + margin var(--spectrum-global-animation-duration-100) ease-out; + } +} + +.spectrum-Checkbox-checkmark, +.spectrum-Checkbox-partialCheckmark { + position: absolute; + inset-block-start: 50%; + inset-inline-start: 50%; + + margin-block-start: calc(var(--spectrum-icon-checkmark-small-height) / -2); + margin-inline-start: calc(var(--spectrum-icon-checkmark-small-width) / -2); + + opacity: 0; + transform: scale(0); + + transition: opacity var(--spectrum-global-animation-duration-100) ease-in-out, transform var(--spectrum-global-animation-duration-100) ease-in-out; +} + +.spectrum-Checkbox-partialCheckmark { + display: none; +} diff --git a/spectrum-css-temp/components/checkbox/skin.css b/spectrum-css-temp/components/checkbox/skin.css new file mode 100644 index 00000000000..cba0440058a --- /dev/null +++ b/spectrum-css-temp/components/checkbox/skin.css @@ -0,0 +1,321 @@ +/* +Copyright 2019 Adobe. All rights reserved. +This file is licensed to you under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. You may obtain a copy +of the License at http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under +the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS +OF ANY KIND, either express or implied. See the License for the specific language +governing permissions and limitations under the License. +*/ + +.spectrum-Checkbox { + /* todo: fix in DNA */ + --spectrum-checkbox-emphasized-text-color-key-focus: var(--spectrum-checkbox-emphasized-text-color-hover); + + --spectrum-checkbox-box-border-color: var(--spectrum-alias-toggle-color-default); + --spectrum-checkbox-box-border-color-hover: var(--spectrum-alias-toggle-color-hover); + --spectrum-checkbox-box-border-color-key-focus: var(--spectrum-alias-toggle-color-key-focus); + --spectrum-checkbox-quiet-box-border-color-selected: var(--spectrum-alias-toggle-color-selected); + --spectrum-checkbox-quiet-box-border-color-selected-hover: var(--spectrum-alias-toggle-color-selected-hover); + --spectrum-checkbox-quiet-box-border-color-selected-key-focus: var(--spectrum-alias-toggle-color-selected-key-focus); + + --spectrum-checkbox-emphasized-box-background-color-selected: var(--spectrum-accent-color-900); + --spectrum-checkbox-emphasized-box-background-color-selected-hover: var(--spectrum-accent-color-1000); + --spectrum-checkbox-emphasized-box-background-color-selected-key-focus: var(--spectrum-accent-color-1000); + --spectrum-checkbox-emphasized-box-background-color-selected-down: var(--spectrum-accent-color-1100); + --spectrum-checkbox-emphasized-box-border-color-selected: var(--spectrum-accent-color-900); + --spectrum-checkbox-emphasized-box-border-color-selected-hover: var(--spectrum-accent-color-1000); + --spectrum-checkbox-emphasized-box-border-color-selected-key-focus: var(--spectrum-accent-color-1000); + --spectrum-checkbox-emphasized-box-border-color-selected-down: var(--spectrum-accent-color-1100); +} + +.spectrum-Checkbox { + color: var(--spectrum-checkbox-text-color); + border-color: var(--spectrum-checkbox-emphasized-box-border-color); + + .spectrum-Checkbox-checkmark, + .spectrum-Checkbox-partialCheckmark { + color: var(--spectrum-checkbox-checkmark-color); + } + + .spectrum-Checkbox-box { + &:before { + border-color: var(--spectrum-checkbox-emphasized-box-border-color); + background-color: var(--spectrum-checkbox-emphasized-box-background-color); + } + } + + .spectrum-Checkbox-label { + color: var(--spectrum-checkbox-emphasized-text-color); + } + + /* Indeterminate is basically a checked state, so handle colors for checked state here */ + &.is-indeterminate, + &.is-checked { + .spectrum-Checkbox-box { + &:before { + border-color: var(--spectrum-checkbox-emphasized-box-border-color-selected); + } + } + } + + &:hover { + .spectrum-Checkbox-box { + &:before { + border-color: var(--spectrum-checkbox-emphasized-box-border-color-hover); + } + } + .spectrum-Checkbox-label { + color: var(--spectrum-checkbox-emphasized-text-color-hover); + } + &.is-indeterminate .spectrum-Checkbox-box, + .spectrum-Checkbox-input:checked + .spectrum-Checkbox-box { + &:before { + border-color: var(--spectrum-checkbox-emphasized-box-border-color-selected-hover); + } + } + } + + &:active { + .spectrum-Checkbox-box { + &:before { + border-color: var(--spectrum-checkbox-emphasized-box-border-color-down); + } + } + .spectrum-Checkbox-label { + color: var(--spectrum-checkbox-emphasized-text-color-down); + } + &.is-indeterminate .spectrum-Checkbox-box, + .spectrum-Checkbox-input:checked + .spectrum-Checkbox-box { + &:before { + border-color: var(--spectrum-checkbox-emphasized-box-border-color-selected-down); + } + } + } + + .spectrum-Checkbox-input, + .spectrum-Checkbox-input:checked { + &:disabled + .spectrum-Checkbox-box, + &:disabled:active + .spectrum-Checkbox-box { + &:before { + border-color: var(--spectrum-checkbox-emphasized-box-border-color-disabled); + background-color: var(--spectrum-checkbox-emphasized-box-background-color-disabled); + } + } + + &:disabled ~ .spectrum-Checkbox-label, + &:disabled:active ~ .spectrum-Checkbox-label { + color: var(--spectrum-checkbox-text-color-disabled); + } + } + + &.is-disabled { + .spectrum-Checkbox-input, + .spectrum-Checkbox-input:checked { + &:disabled + .spectrum-Checkbox-box, + &:disabled:active + .spectrum-Checkbox-box { + &:before { + border-color: var(--spectrum-checkbox-emphasized-box-border-color-disabled); + background-color: var(--spectrum-checkbox-emphasized-box-background-color-disabled); + } + } + + &:disabled ~ .spectrum-Checkbox-label, + &:disabled:active ~ .spectrum-Checkbox-label { + color: var(--spectrum-checkbox-text-color-disabled); + } + } + + &:hover, + &:active { + .spectrum-Checkbox-box { + &:before { + border-color: var(--spectrum-checkbox-emphasized-box-border-color-disabled); + background-color: var(--spectrum-checkbox-emphasized-box-background-color-disabled); + } + } + .spectrum-Checkbox-label { + color: var(--spectrum-checkbox-text-color-disabled); + } + } + } + + + + /* Focus */ + .spectrum-Checkbox-input { + & + .spectrum-Checkbox-box { + &:after { + box-shadow: 0 0 0 var(--spectrum-checkbox-focus-ring-size-key-focus) var(--spectrum-checkbox-focus-ring-color-key-focus); + opacity: 0; + } + } + &:focus-visible + .spectrum-Checkbox-box { + &:before { + border-color: var(--spectrum-checkbox-box-border-color-key-focus); + } + &:after { + opacity: 1; + } + } + &:checked { + &:focus-visible + .spectrum-Checkbox-box { + &:before { + border-color: var(--spectrum-checkbox-emphasized-box-border-color-selected-key-focus); + } + } + } + &:focus-visible ~ .spectrum-Checkbox-label { + color: var(--spectrum-checkbox-emphasized-text-color-key-focus); + } + } + + &.is-indeterminate { + .spectrum-Checkbox-input { + &:focus-visible + .spectrum-Checkbox-box { + &:before { + border-color: var(--spectrum-checkbox-emphasized-box-border-color-selected-key-focus); + } + } + } + } + + &.spectrum-Checkbox--quiet { + .spectrum-Checkbox-input:checked + .spectrum-Checkbox-box, + &.is-indeterminate .spectrum-Checkbox-box, + &.is-indeterminate .spectrum-Checkbox-input:focus-visible + .spectrum-Checkbox-box { + &:before { + border-color: var(--spectrum-checkbox-quiet-box-border-color-selected); + } + } + + &:hover { + &.is-indeterminate .spectrum-Checkbox-box, + .spectrum-Checkbox-input:checked + .spectrum-Checkbox-box { + &:before { + border-color: var(--spectrum-checkbox-quiet-box-border-color-selected-hover); + } + } + } + + &:active { + &.is-indeterminate .spectrum-Checkbox-box, + .spectrum-Checkbox-input:checked + .spectrum-Checkbox-box { + &:before { + border-color: var(--spectrum-checkbox-quiet-box-border-color-selected-down); + } + } + } + } + + &.is-invalid { + /* Extra-specific selectors added here to handle checked state */ + .spectrum-Checkbox-input:checked + .spectrum-Checkbox-box, + .spectrum-Checkbox-box, + &.is-indeterminate .spectrum-Checkbox-box, + &.is-indeterminate .spectrum-Checkbox-input:focus-visible + .spectrum-Checkbox-box, + .spectrum-Checkbox-input:checked + .spectrum-Checkbox-box { + &:before { + border-color: var(--spectrum-checkbox-box-border-color-error); + } + } + + .spectrum-Checkbox-label { + color: var(--spectrum-checkbox-text-color-error); + } + + &.is-indeterminate .spectrum-Checkbox-input:focus-visible, + .spectrum-Checkbox-input:focus-visible { + & + .spectrum-Checkbox-box { + &:before { + border-color: var(--spectrum-checkbox-box-border-color-error-hover); + } + } + + & ~ .spectrum-Checkbox-label { + color: var(--spectrum-checkbox-text-color-error-hover); + } + } + + &:hover { + .spectrum-Checkbox-input:checked + .spectrum-Checkbox-box, + .spectrum-Checkbox-box, + &.is-indeterminate .spectrum-Checkbox-box { + &:before { + border-color: var(--spectrum-checkbox-box-border-color-error-hover); + } + } + + .spectrum-Checkbox-label { + color: var(--spectrum-checkbox-text-color-error-hover); + } + } + + &:active { + .spectrum-Checkbox-input:checked + .spectrum-Checkbox-box, + .spectrum-Checkbox-box { + &:before { + border-color: var(--spectrum-checkbox-box-border-color-error-down); + } + } + + .spectrum-Checkbox-label { + color: var(--spectrum-checkbox-text-color-error-down); + } + } + } +} + +@media (forced-colors: active) { + .spectrum-Checkbox { + forced-color-adjust: none; + --spectrum-alias-toggle-color-default: ButtonText; + --spectrum-alias-toggle-color-hover: Highlight; + --spectrum-alias-toggle-color-key-focus: Highlight; + --spectrum-alias-toggle-color-selected: Highlight; + --spectrum-alias-toggle-color-selected-hover: Highlight; + --spectrum-alias-toggle-color-selected-key-focus: Highlight; + --spectrum-alias-toggle-color-selected-down: Highlight; + + --spectrum-checkbox-box-border-color-error: Highlight; + --spectrum-checkbox-box-border-color-error-down: Highlight; + --spectrum-checkbox-box-border-color-error-hover: Highlight; + --spectrum-checkbox-checkmark-color: HighlightText; + --spectrum-checkbox-emphasized-box-background-color: ButtonFace; + --spectrum-checkbox-emphasized-box-background-color-disabled: ButtonFace; + --spectrum-checkbox-emphasized-box-border-color: ButtonText; + --spectrum-checkbox-emphasized-box-border-color-disabled: GrayText; + --spectrum-checkbox-emphasized-box-border-color-down: Highlight; + --spectrum-checkbox-emphasized-box-border-color-hover: Highlight; + --spectrum-checkbox-emphasized-text-color: FieldText; + --spectrum-checkbox-emphasized-text-color-down: FieldText; + --spectrum-checkbox-emphasized-text-color-hover: FieldText; + --spectrum-checkbox-emphasized-text-color-key-focus: FieldText; + --spectrum-checkbox-focus-ring-color-key-focus: ButtonText; + --spectrum-checkbox-quiet-box-border-color-selected: Highlight; + --spectrum-checkbox-quiet-box-border-color-selected-down: Highlight; + --spectrum-checkbox-quiet-box-border-color-selected-hover: Highlight; + --spectrum-checkbox-text-color: FieldText; + --spectrum-checkbox-text-color-disabled: GrayText; + --spectrum-checkbox-text-color-error: FieldText; + --spectrum-checkbox-text-color-error-down: FieldText; + --spectrum-checkbox-text-color-error-hover: FieldText; + + --spectrum-checkbox-emphasized-box-background-color-selected: Highlight; + --spectrum-checkbox-emphasized-box-background-color-selected-hover: Highlight; + --spectrum-checkbox-emphasized-box-background-color-selected-key-focus: Highlight; + --spectrum-checkbox-emphasized-box-background-color-selected-down: Highlight; + --spectrum-checkbox-emphasized-box-border-color-selected: Highlight; + --spectrum-checkbox-emphasized-box-border-color-selected-hover: Highlight; + --spectrum-checkbox-emphasized-box-border-color-selected-key-focus: Highlight; + --spectrum-checkbox-emphasized-box-border-color-selected-down: Highlight; + + &.spectrum-Checkbox--quiet, + &.is-indeterminate { + --spectrum-alias-toggle-color-default: ButtonText; + --spectrum-alias-toggle-color-selected: ButtonText; + } + } +} diff --git a/spectrum-css-temp/components/checkbox/vars.css b/spectrum-css-temp/components/checkbox/vars.css new file mode 100644 index 00000000000..ca1e08522d8 --- /dev/null +++ b/spectrum-css-temp/components/checkbox/vars.css @@ -0,0 +1,14 @@ +/* + * Copyright 2020 Adobe. All rights reserved. + * This file is licensed to you under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. You may obtain a copy + * of the License at http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS + * OF ANY KIND, either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + */ + +@import './index.css'; +@import './skin.css'; diff --git a/spectrum-css-temp/components/circleloader/animation.css b/spectrum-css-temp/components/circleloader/animation.css new file mode 100644 index 00000000000..8dd301e7a86 --- /dev/null +++ b/spectrum-css-temp/components/circleloader/animation.css @@ -0,0 +1,501 @@ +/* +Copyright 2019 Adobe. All rights reserved. +This file is licensed to you under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. You may obtain a copy +of the License at http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under +the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS +OF ANY KIND, either express or implied. See the License for the specific language +governing permissions and limitations under the License. +*/ + +.spectrum-CircleLoader--indeterminate-fill-submask-2 { + animation: spectrum-fill-mask-2 1s infinite linear; +} +@keyframes spectrum-fill-mask-1 { + 0% { + transform: rotate(90deg); + } + + 1.69% { + transform: rotate(72.3deg); + } + + 3.39% { + transform: rotate(55.5deg); + } + + 5.08% { + transform: rotate(40.3deg); + } + + 6.78% { + transform: rotate(25deg); + } + + 8.47% { + transform: rotate(10.6deg); + } + + 10.17% { + transform: rotate(0deg); + } + + 11.86% { + transform: rotate(0deg); + } + + 13.56% { + transform: rotate(0deg); + } + + 15.25% { + transform: rotate(0deg); + } + + 16.95% { + transform: rotate(0deg); + } + + 18.64% { + transform: rotate(0deg); + } + + 20.34% { + transform: rotate(0deg); + } + + 22.03% { + transform: rotate(0deg); + } + + 23.73% { + transform: rotate(0deg); + } + + 25.42% { + transform: rotate(0deg); + } + + 27.12% { + transform: rotate(0deg); + } + + 28.81% { + transform: rotate(0deg); + } + + 30.51% { + transform: rotate(0deg); + } + + 32.2% { + transform: rotate(0deg); + } + + 33.9% { + transform: rotate(0deg); + } + + 35.59% { + transform: rotate(0deg); + } + + 37.29% { + transform: rotate(0deg); + } + + 38.98% { + transform: rotate(0deg); + } + + 40.68% { + transform: rotate(0deg); + } + + 42.37% { + transform: rotate(5.3deg); + } + + 44.07% { + transform: rotate(13.4deg); + } + + 45.76% { + transform: rotate(20.6deg); + } + + 47.46% { + transform: rotate(29deg); + } + + 49.15% { + transform: rotate(36.5deg); + } + + 50.85% { + transform: rotate(42.6deg); + } + + 52.54% { + transform: rotate(48.8deg); + } + + 54.24% { + transform: rotate(54.2deg); + } + + 55.93% { + transform: rotate(59.4deg); + } + + 57.63% { + transform: rotate(63.2deg); + } + + 59.32% { + transform: rotate(67.2deg); + } + + 61.02% { + transform: rotate(70.8deg); + } + + 62.71% { + transform: rotate(73.8deg); + } + + 64.41% { + transform: rotate(76.2deg); + } + + 66.1% { + transform: rotate(78.7deg); + } + + 67.8% { + transform: rotate(80.6deg); + } + + 69.49% { + transform: rotate(82.6deg); + } + + 71.19% { + transform: rotate(83.7deg); + } + + 72.88% { + transform: rotate(85deg); + } + + 74.58% { + transform: rotate(86.3deg); + } + + 76.27% { + transform: rotate(87deg); + } + + 77.97% { + transform: rotate(87.7deg); + } + + 79.66% { + transform: rotate(88.3deg); + } + + 81.36% { + transform: rotate(88.6deg); + } + + 83.05% { + transform: rotate(89.2deg); + } + + 84.75% { + transform: rotate(89.2deg); + } + + 86.44% { + transform: rotate(89.5deg); + } + + 88.14% { + transform: rotate(89.9deg); + } + + 89.83% { + transform: rotate(89.7deg); + } + + 91.53% { + transform: rotate(90.1deg); + } + + 93.22% { + transform: rotate(90.2deg); + } + + 94.92% { + transform: rotate(90.1deg); + } + + 96.61% { + transform: rotate(90deg); + } + + 98.31% { + transform: rotate(89.8deg); + } + + 100% { + transform: rotate(90deg); + } +} +@keyframes spectrum-fill-mask-2 { + 0% { + transform: rotate(180deg); + } + + 1.69% { + transform: rotate(180deg); + } + + 3.39% { + transform: rotate(180deg); + } + + 5.08% { + transform: rotate(180deg); + } + + 6.78% { + transform: rotate(180deg); + } + + 8.47% { + transform: rotate(180deg); + } + + 10.17% { + transform: rotate(179.2deg); + } + + 11.86% { + transform: rotate(164deg); + } + + 13.56% { + transform: rotate(151.8deg); + } + + 15.25% { + transform: rotate(140.8deg); + } + + 16.95% { + transform: rotate(130.3deg); + } + + 18.64% { + transform: rotate(120.4deg); + } + + 20.34% { + transform: rotate(110.8deg); + } + + 22.03% { + transform: rotate(101.6deg); + } + + 23.73% { + transform: rotate(93.5deg); + } + + 25.42% { + transform: rotate(85.4deg); + } + + 27.12% { + transform: rotate(78.1deg); + } + + 28.81% { + transform: rotate(71.2deg); + } + + 30.51% { + transform: rotate(89.1deg); + } + + 32.2% { + transform: rotate(105.5deg); + } + + 33.9% { + transform: rotate(121.3deg); + } + + 35.59% { + transform: rotate(135.5deg); + } + + 37.29% { + transform: rotate(148.4deg); + } + + 38.98% { + transform: rotate(161deg); + } + + 40.68% { + transform: rotate(173.5deg); + } + + 42.37% { + transform: rotate(180deg); + } + + 44.07% { + transform: rotate(180deg); + } + + 45.76% { + transform: rotate(180deg); + } + + 47.46% { + transform: rotate(180deg); + } + + 49.15% { + transform: rotate(180deg); + } + + 50.85% { + transform: rotate(180deg); + } + + 52.54% { + transform: rotate(180deg); + } + + 54.24% { + transform: rotate(180deg); + } + + 55.93% { + transform: rotate(180deg); + } + + 57.63% { + transform: rotate(180deg); + } + + 59.32% { + transform: rotate(180deg); + } + + 61.02% { + transform: rotate(180deg); + } + + 62.71% { + transform: rotate(180deg); + } + + 64.41% { + transform: rotate(180deg); + } + + 66.1% { + transform: rotate(180deg); + } + + 67.8% { + transform: rotate(180deg); + } + + 69.49% { + transform: rotate(180deg); + } + + 71.19% { + transform: rotate(180deg); + } + + 72.88% { + transform: rotate(180deg); + } + + 74.58% { + transform: rotate(180deg); + } + + 76.27% { + transform: rotate(180deg); + } + + 77.97% { + transform: rotate(180deg); + } + + 79.66% { + transform: rotate(180deg); + } + + 81.36% { + transform: rotate(180deg); + } + + 83.05% { + transform: rotate(180deg); + } + + 84.75% { + transform: rotate(180deg); + } + + 86.44% { + transform: rotate(180deg); + } + + 88.14% { + transform: rotate(180deg); + } + + 89.83% { + transform: rotate(180deg); + } + + 91.53% { + transform: rotate(180deg); + } + + 93.22% { + transform: rotate(180deg); + } + + 94.92% { + transform: rotate(180deg); + } + + 96.61% { + transform: rotate(180deg); + } + + 98.31% { + transform: rotate(180deg); + } + + 100% { + transform: rotate(180deg); + } +} +@keyframes spectrum-fills-rotate { + 0% {transform: rotate(-90deg)} + 100% {transform: rotate(270deg)} +} diff --git a/spectrum-css-temp/components/circleloader/index.css b/spectrum-css-temp/components/circleloader/index.css new file mode 100644 index 00000000000..5b5e03eb9ec --- /dev/null +++ b/spectrum-css-temp/components/circleloader/index.css @@ -0,0 +1,126 @@ +/* +Copyright 2019 Adobe. All rights reserved. +This file is licensed to you under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. You may obtain a copy +of the License at http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under +the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS +OF ANY KIND, either express or implied. See the License for the specific language +governing permissions and limitations under the License. +*/ + +@import '../commons/index.css'; +@import 'animation.css'; + +.spectrum-CircleLoader { + display: inline-block; + width: var(--spectrum-loader-circle-medium-width); + height: var(--spectrum-loader-circle-medium-height); + position: relative; + direction: ltr; +} +.spectrum-CircleLoader-track { + box-sizing: border-box; + width: calc(var(--spectrum-loader-circle-medium-width)); + height: calc(var(--spectrum-loader-circle-medium-height)); + border-style: solid; + border-width: var(--spectrum-loader-circle-medium-border-size); + border-radius: var(--spectrum-loader-circle-medium-width); +} +.spectrum-CircleLoader-fills { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} +.spectrum-CircleLoader-fill { + box-sizing: border-box; + width: calc(var(--spectrum-loader-circle-medium-width)); + height: calc(var(--spectrum-loader-circle-medium-height)); + border-style: solid; + border-width: var(--spectrum-loader-circle-medium-border-size); + border-radius: var(--spectrum-loader-circle-medium-width); +} +.spectrum-CircleLoader-fillMask1, +.spectrum-CircleLoader-fillMask2 { + width: 50%; + height: 100%; + transform-origin: 100% center; + transform: rotate(180deg); + overflow: hidden; + position: absolute; +} +.spectrum-CircleLoader-fillSubMask1, +.spectrum-CircleLoader-fillSubMask2 { + width: 100%; + height: 100%; + transform-origin: 100% center; + overflow: hidden; + transform: rotate(-180deg); +} +.spectrum-CircleLoader-fillMask2 { + transform: rotate(0deg); +} + +.spectrum-CircleLoader--small { + width: var(--spectrum-loader-circle-small-width); + height: var(--spectrum-loader-circle-small-height); + + .spectrum-CircleLoader-track { + width: calc(var(--spectrum-loader-circle-small-width)); + height: calc(var(--spectrum-loader-circle-small-height)); + border-style: solid; + border-width: var(--spectrum-loader-circle-small-border-size); + border-radius: var(--spectrum-loader-circle-small-width); + } + .spectrum-CircleLoader-fill { + width: calc(var(--spectrum-loader-circle-small-width)); + height: calc(var(--spectrum-loader-circle-small-height)); + border-style: solid; + border-width: var(--spectrum-loader-circle-small-border-size); + border-radius: var(--spectrum-loader-circle-small-width); + } +} + +.spectrum-CircleLoader--large { + width: var(--spectrum-loader-circle-large-width); + height: var(--spectrum-loader-circle-large-height); + + .spectrum-CircleLoader-track { + width: calc(var(--spectrum-loader-circle-large-width)); + height: calc(var(--spectrum-loader-circle-large-height)); + border-style: solid; + border-width: var(--spectrum-loader-circle-large-border-size); + border-radius: var(--spectrum-loader-circle-large-width); + } + + .spectrum-CircleLoader-fill { + width: calc(var(--spectrum-loader-circle-large-width)); + height: calc(var(--spectrum-loader-circle-large-height)); + border-style: solid; + border-width: var(--spectrum-loader-circle-large-border-size); + border-radius: var(--spectrum-loader-circle-large-width); + } +} + +.spectrum-CircleLoader--indeterminate { + .spectrum-CircleLoader-fills { + will-change: transform; + transform: translateZ(0); + animation: spectrum-fills-rotate 1s infinite cubic-bezier(.25,.78,.48,.89); + transform-origin: center; + } + .spectrum-CircleLoader-fillSubMask1 { + will-change: transform; + transform: translateZ(0); + animation: spectrum-fill-mask-1 1s infinite linear; + } + + .spectrum-CircleLoader-fillSubMask2 { + will-change: transform; + transform: translateZ(0); + animation: spectrum-fill-mask-2 1s infinite linear; + } +} diff --git a/spectrum-css-temp/components/circleloader/skin.css b/spectrum-css-temp/components/circleloader/skin.css new file mode 100644 index 00000000000..8d031dc7cec --- /dev/null +++ b/spectrum-css-temp/components/circleloader/skin.css @@ -0,0 +1,56 @@ +/* +Copyright 2019 Adobe. All rights reserved. +This file is licensed to you under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. You may obtain a copy +of the License at http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under +the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS +OF ANY KIND, either express or implied. See the License for the specific language +governing permissions and limitations under the License. +*/ + +.spectrum-CircleLoader { + /* TODO: Update to use semantic tokens when available */ + --spectrum-loader-circle-medium-track-fill-color: var(--spectrum-accent-color-900); + --spectrum-loader-circle-static-black-track-color: rgba(0, 0, 0, 0.25); + --spectrum-loader-circle-static-black-fill-color: var(--spectrum-global-color-static-black); +} + +.spectrum-CircleLoader-track { + border-color: var(--spectrum-loader-circle-medium-track-color); +} + +.spectrum-CircleLoader-fill { + border-color: var(--spectrum-loader-circle-medium-track-fill-color); +} + +.spectrum-CircleLoader--overBackground, +.spectrum-CircleLoader--staticWhite { + .spectrum-CircleLoader-track { + border-color: var(--spectrum-loader-circle-medium-over-background-track-color); + } + .spectrum-CircleLoader-fill { + border-color: var(--spectrum-loader-circle-medium-over-background-track-fill-color); + } +} + +.spectrum-CircleLoader--staticBlack { + .spectrum-CircleLoader-track { + border-color: var(--spectrum-loader-circle-static-black-track-color); + } + .spectrum-CircleLoader-fill { + border-color: var(--spectrum-loader-circle-static-black-fill-color); + } +} + +@media (forced-colors: active) { + .spectrum-CircleLoader { + --spectrum-loader-circle-medium-track-fill-color: Highlight; + --spectrum-loader-circle-medium-over-background-track-fill-color: Highlight; + --spectrum-loader-circle-static-black-fill-color: Highlight; + --spectrum-loader-circle-medium-track-color: Background; + --spectrum-loader-circle-medium-over-background-track-color: Background; + --spectrum-loader-circle-static-black-track-color: Background; + } +} diff --git a/spectrum-css-temp/components/circleloader/vars.css b/spectrum-css-temp/components/circleloader/vars.css new file mode 100644 index 00000000000..ca1e08522d8 --- /dev/null +++ b/spectrum-css-temp/components/circleloader/vars.css @@ -0,0 +1,14 @@ +/* + * Copyright 2020 Adobe. All rights reserved. + * This file is licensed to you under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. You may obtain a copy + * of the License at http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS + * OF ANY KIND, either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + */ + +@import './index.css'; +@import './skin.css'; diff --git a/spectrum-css-temp/components/coachmark/animation.css b/spectrum-css-temp/components/coachmark/animation.css new file mode 100644 index 00000000000..0291f18e52a --- /dev/null +++ b/spectrum-css-temp/components/coachmark/animation.css @@ -0,0 +1,41 @@ +/* +Copyright 2019 Adobe. All rights reserved. +This file is licensed to you under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. You may obtain a copy +of the License at http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under +the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS +OF ANY KIND, either express or implied. See the License for the specific language +governing permissions and limitations under the License. +*/ + +@keyframes pulse { + 0% { + -webkit-transform: scale(var(--spectrum-coachmark-animation-indicator-keyframe-0-scale)); + opacity: var(--spectrum-coachmark-animation-indicator-keyframe-0-opacity); + } + 50% { + -webkit-transform: scale(var(--spectrum-coachmark-animation-indicator-keyframe-50-scale)); + opacity: var(--spectrum-coachmark-animation-indicator-keyframe-50-opacity); + } + 100% { + -webkit-transform: scale(var(--spectrum-coachmark-animation-indicator-keyframe-100-scale)); + opacity: var(--spectrum-coachmark-animation-indicator-keyframe-100-opacity); + } +} + +@keyframes pulse--quiet { + 0% { + -webkit-transform: scale(var(--spectrum-coachmark-quiet-animation-indicator-keyframe-0-scale)); + opacity: var(--spectrum-coachmark-animation-indicator-keyframe-0-opacity); + } + 50% { + -webkit-transform: scale(var(--spectrum-coachmark-animation-indicator-keyframe-50-scale)); + opacity: var(--spectrum-coachmark-animation-indicator-keyframe-50-opacity); + } + 100% { + -webkit-transform: scale(var(--spectrum-coachmark-animation-indicator-keyframe-100-scale)); + opacity: var(--spectrum-coachmark-animation-indicator-keyframe-100-opacity); + } +} diff --git a/spectrum-css-temp/components/coachmark/index.css b/spectrum-css-temp/components/coachmark/index.css new file mode 100644 index 00000000000..a22928617f8 --- /dev/null +++ b/spectrum-css-temp/components/coachmark/index.css @@ -0,0 +1,136 @@ +/* +Copyright 2019 Adobe. All rights reserved. +This file is licensed to you under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. You may obtain a copy +of the License at http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under +the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS +OF ANY KIND, either express or implied. See the License for the specific language +governing permissions and limitations under the License. +*/ + +@import '../commons/index.css'; +@import 'animation.css'; + +.spectrum-CoachMarkPopover { + position: relative; + + min-width: var(--spectrum-coachmark-min-width); + max-width: var(--spectrum-coachmark-max-width); + + border-radius: var(--spectrum-coachmark-border-radius); + border-width: var(--spectrum-coachmark-border-size); + border-style: solid; + +} +.spectrum-CoachMarkPopover-image { + border-radius: var(--spectrum-coachmark-border-radius) var(--spectrum-coachmark-border-radius) 0 0; + + width: 100%; +} + +.spectrum-CoachMarkPopover-header, +.spectrum-CoachMarkPopover-content, +.spectrum-CoachMarkPopover-footer { + padding: 0 var(--spectrum-coachmark-padding-x); +} + +.spectrum-CoachMarkPopover-header { + padding-top: var(--spectrum-coachmark-padding-y); +} + +.spectrum-CoachMarkPopover-footer { + padding-bottom: var(--spectrum-coachmark-padding-y); +} + +.spectrum-CoachMarkPopover-header { + display: flex; + justify-content: space-between; + align-items: flex-end; + margin-bottom: var(--spectrum-coachmark-title-margin-bottom); +} + +.spectrum-CoachMarkPopover-title { + font-size: var(--spectrum-coachmark-title-text-size); + font-weight: var(--spectrum-coachmark-title-text-font-weight); + line-height: var(--spectrum-coachmark-title-text-line-height); + margin-bottom: 0; +} + +.spectrum-CoachMarkPopover-step { + align-self: flex-start; + + font-size: var(--spectrum-coachmark-step-text-size); + font-weight: var(--spectrum-coachmark-step-text-font-weight); + line-height: var(--spectrum-coachmark-step-text-line-height); + white-space: nowrap; +} + +.spectrum-CoachMarkPopover-content { + margin-bottom: var(--spectrum-coachmark-content-margin-bottom); +} + +.spectrum-CoachMarkPopover-footer { + margin-top: 0; + text-align: right; +} + +.spectrum-CoachMarkIndicator { + position: relative; + + margin: var(--spectrum-coachmark-indicator-gap); +} + +.spectrum-CoachMarkIndicator-ring { + display: block; + position: absolute; + + border-style: solid; + border-width: var(--spectrum-coachmark-indicator-ring-border-size); + border-radius: 50%; + + &:nth-child(2) { + animation-delay: calc(var(--spectrum-coachmark-animation-indicator-ring-duration) * var(--spectrum-coachmark-animation-inticator-ring-center-delay-multiple)); + } + + &:nth-child(3) { + animation-delay: calc(var(--spectrum-coachmark-animation-indicator-ring-duration) * var(--spectrum-coachmark-animation-inticator-ring-outer-delay-multiple)) + } +} + +.spectrum-CoachMarkIndicator { + min-width: calc(var(--spectrum-coachmark-indicator-ring-diameter) * 3); + min-height: calc(var(--spectrum-coachmark-indicator-ring-diameter) * 3); +} + +.spectrum-CoachMarkIndicator-ring { + top: calc(var(--spectrum-coachmark-indicator-ring-diameter) * 0.75); + left: calc(var(--spectrum-coachmark-indicator-ring-diameter) * 0.75); + + width: var(--spectrum-coachmark-indicator-ring-diameter); + height: var(--spectrum-coachmark-indicator-ring-diameter); + animation: pulse var(--spectrum-coachmark-animation-indicator-ring-duration) linear infinite; + + &:nth-child(1) { + animation-delay: calc(var(--spectrum-coachmark-animation-indicator-ring-duration) * var(--spectrum-coachmark-animation-inticator-ring-inner-delay-multiple)); + } +} + +.spectrum-CoachMarkIndicator--quiet { + min-width: calc(var(--spectrum-coachmark-quiet-indicator-ring-diameter) * 2.75); + min-height: calc(var(--spectrum-coachmark-quiet-indicator-ring-diameter) * 2.75); + + .spectrum-CoachMarkIndicator-ring { + top: calc(var(--spectrum-coachmark-quiet-indicator-ring-diameter) * 0.75); + left: calc(var(--spectrum-coachmark-quiet-indicator-ring-diameter) * 0.75); + + width: var(--spectrum-coachmark-quiet-indicator-ring-diameter); + height: var(--spectrum-coachmark-quiet-indicator-ring-diameter); + animation: pulse--quiet var(--spectrum-coachmark-animation-indicator-ring-duration) linear infinite; + + &:nth-child(1) { + animation-delay: calc(var(--spectrum-coachmark-animation-indicator-ring-duration) * var(--spectrum-coachmark-quiet-animation-inticator-ring-inner-delay-multiple)); + } + } +} diff --git a/spectrum-css-temp/components/coachmark/skin.css b/spectrum-css-temp/components/coachmark/skin.css new file mode 100644 index 00000000000..4c8275d5197 --- /dev/null +++ b/spectrum-css-temp/components/coachmark/skin.css @@ -0,0 +1,41 @@ +/* +Copyright 2019 Adobe. All rights reserved. +This file is licensed to you under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. You may obtain a copy +of the License at http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under +the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS +OF ANY KIND, either express or implied. See the License for the specific language +governing permissions and limitations under the License. +*/ + +.spectrum-CoachMarkPopover { + background-color: var(--spectrum-coachmark-background-color); + border-color: var(--spectrum-coachmark-border-color); + box-shadow: 0 1px 4px var(--spectrum-coachmark-shadow-color); +} + +.spectrum-CoachMarkPopover-title { + color: var(--spectrum-coachmark-title-text-color); +} + +.spectrum-CoachMarkPopover-step { + color: var(--spectrum-coachmark-step-text-color); +} + +.spectrum-CoachMarkPopover-content { + color: var(--spectrum-coachmark-content-text-color); +} + +.spectrum-CoachMarkIndicator-ring { + border-color: var(--spectrum-coachmark-indicator-ring-default-color); +} + +.spectrum-CoachMarkIndicator--light .spectrum-CoachMarkIndicator-ring { + border-color: var(--spectrum-coachmark-indicator-ring-low-contrast-color); +} + +.spectrum-CoachMarkIndicator--dark .spectrum-CoachMarkIndicator-ring { + border-color: var(--spectrum-coachmark-indicator-ring-high-contrast-color); +} diff --git a/spectrum-css-temp/components/coachmark/vars.css b/spectrum-css-temp/components/coachmark/vars.css new file mode 100644 index 00000000000..ca1e08522d8 --- /dev/null +++ b/spectrum-css-temp/components/coachmark/vars.css @@ -0,0 +1,14 @@ +/* + * Copyright 2020 Adobe. All rights reserved. + * This file is licensed to you under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. You may obtain a copy + * of the License at http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS + * OF ANY KIND, either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + */ + +@import './index.css'; +@import './skin.css'; diff --git a/spectrum-css-temp/components/colorarea/index.css b/spectrum-css-temp/components/colorarea/index.css new file mode 100644 index 00000000000..cf86d5d3151 --- /dev/null +++ b/spectrum-css-temp/components/colorarea/index.css @@ -0,0 +1,71 @@ +.spectrum-ColorArea { + position: relative; + display: inline-block; + inline-size: var(--spectrum-colorarea-default-width); + block-size: var(--spectrum-colorarea-default-height); + min-inline-size: var(--spectrum-colorarea-min-width); + min-block-size: var(--spectrum-colorarea-min-height); + + border-radius: var(--spectrum-colorarea-border-radius); + + cursor: default; + + user-select: none; + + &.is-focused, + &.focus-ring { + z-index: 2; + + .spectrum-ColorArea-handle { + /* Bigger handle when focused */ + width: calc(var(--spectrum-colorhandle-size) * 2); + height: calc(var(--spectrum-colorhandle-size) * 2); + + margin-left: calc(-1 * var(--spectrum-colorhandle-size)); + margin-top: calc(-1 * var(--spectrum-colorhandle-size)); + } + } + + &.is-disabled { + pointer-events: none; + } + + /* the floating inset box shadow must be a separate element since won't take it */ + &:before { + content: ''; + z-index: 1; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + border-radius: var(--spectrum-colorarea-border-radius); + } +} + +.spectrum-ColorArea-handle { + left: 0; + top: 0; + + &:focus-within { + z-index: 2; + } +} + +.spectrum-ColorArea-gradient { + width: 100%; + height: 100%; + border-radius: var(--spectrum-colorarea-border-radius); +} + +.spectrum-ColorArea-slider { + opacity: 0.0001; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 0; + margin: 0; + pointer-events: none; +} diff --git a/spectrum-css-temp/components/colorarea/skin.css b/spectrum-css-temp/components/colorarea/skin.css new file mode 100644 index 00000000000..3f6a2b20b97 --- /dev/null +++ b/spectrum-css-temp/components/colorarea/skin.css @@ -0,0 +1,37 @@ +.spectrum-ColorArea { + &:before { + box-shadow: inset 0 0 0 var(--spectrum-colorarea-border-size) var(--spectrum-colorarea-border-color); + } + } + .spectrum-ColorArea-gradient { + forced-color-adjust: none; + } + .spectrum-ColorHandle-color { + forced-color-adjust: none; + } + + .spectrum-ColorArea { + &.is-disabled { + background: var(--spectrum-colorarea-fill-color-disabled); + + &:before { + box-shadow: inset 0 0 0 var(--spectrum-colorarea-border-size) var(--spectrum-colorarea-border-color-disabled); + } + + .spectrum-ColorArea-gradient { + display: none; + } + } + } + + @media (forced-colors: active) { + .spectrum-ColorArea { + --spectrum-colorarea-fill-color-disabled : GrayText; + } + .spectrum-ColorArea { + forced-color-adjust: none; + &.is-disabled { + forced-color-adjust: none; + } + } + } diff --git a/spectrum-css-temp/components/colorarea/vars.css b/spectrum-css-temp/components/colorarea/vars.css new file mode 100644 index 00000000000..f0681ac2aaf --- /dev/null +++ b/spectrum-css-temp/components/colorarea/vars.css @@ -0,0 +1,14 @@ +/* + * Copyright 2021 Adobe. All rights reserved. + * This file is licensed to you under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. You may obtain a copy + * of the License at http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS + * OF ANY KIND, either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + */ + +@import './index.css'; +@import './skin.css'; diff --git a/spectrum-css-temp/components/colorhandle/index.css b/spectrum-css-temp/components/colorhandle/index.css new file mode 100644 index 00000000000..0840a013643 --- /dev/null +++ b/spectrum-css-temp/components/colorhandle/index.css @@ -0,0 +1,81 @@ +:root { + /* redefine this var so it can be used in skin.css */ + --spectrum-colorhandle-background-offset: calc(-1 * var(--spectrum-global-dimension-static-size-25)); + --spectrum-colorhandle-checkerboard-size: var(--spectrum-global-dimension-static-size-100); + + --spectrum-colorhandle-animation-duration: var(--spectrum-global-animation-duration-100); + --spectrum-colorhandle-animation-easing: ease-in-out; + + --spectrum-colorhandle-hitarea-size: var(--spectrum-global-dimension-size-300); + --spectrum-colorhandle-hitarea-radius: 100%; +} + +.spectrum-ColorHandle { + display: block; + position: absolute; + z-index: 1; /* Be above */ + box-sizing: border-box; + width: var(--spectrum-colorhandle-size); + height: var(--spectrum-colorhandle-size); + + margin-left: calc(-1 * calc(var(--spectrum-colorhandle-size) / 2)); + margin-top: calc(-1 * calc(var(--spectrum-colorhandle-size) / 2)); + + border-width: var(--spectrum-colorhandle-inner-border-size); + border-style: solid; + + background-size: + var(--spectrum-global-dimension-static-size-200) + var(--spectrum-global-dimension-static-size-200); + background-position: + var(--spectrum-colorhandle-background-offset) var(--spectrum-colorhandle-background-offset), + var(--spectrum-colorhandle-background-offset) calc(var(--spectrum-colorhandle-checkerboard-size) + var(--spectrum-colorhandle-background-offset)), + calc(var(--spectrum-colorhandle-checkerboard-size) + var(--spectrum-colorhandle-background-offset)) calc(-1 * var(--spectrum-colorhandle-checkerboard-size) + var(--spectrum-colorhandle-background-offset)), + calc(-1 * var(--spectrum-colorhandle-checkerboard-size) + var(--spectrum-colorhandle-background-offset)) var(--spectrum-colorhandle-background-offset); + + transition: + width var(--spectrum-colorhandle-animation-duration) var(--spectrum-colorhandle-animation-easing), + height var(--spectrum-colorhandle-animation-duration) var(--spectrum-colorhandle-animation-easing), + border-width var(--spectrum-colorhandle-animation-duration) var(--spectrum-colorhandle-animation-easing), + margin-left var(--spectrum-colorhandle-animation-duration) var(--spectrum-colorhandle-animation-easing), + margin-top var(--spectrum-colorhandle-animation-duration) var(--spectrum-colorhandle-animation-easing); + + &, + &:after { + border-radius: 100%; + } + + &:after { + content: ''; + left: calc(50% - calc(var(--spectrum-colorhandle-hitarea-size) / 2)); + top: calc(50% - calc(var(--spectrum-colorhandle-hitarea-size) / 2)); + position: absolute; + display: block; + width: var(--spectrum-colorhandle-hitarea-size); + height: var(--spectrum-colorhandle-hitarea-size); + } + + &.is-disabled { + pointer-events: none; + } +} + +.spectrum-ColorControl-handle--focused { + /* Bigger handle when focused */ + width: calc(var(--spectrum-colorhandle-size) * 2); + height: calc(var(--spectrum-colorhandle-size) * 2); + + margin-left: calc(-1 * var(--spectrum-colorhandle-size)); + margin-top: calc(-1 * var(--spectrum-colorhandle-size)); +} + +.is-focused, +.focus-ring { + composes: spectrum-ColorControl-handle--focused; +} + +.spectrum-ColorHandle-color { + border-radius: 100%; + width: 100%; + height: 100%; +} diff --git a/spectrum-css-temp/components/colorhandle/skin.css b/spectrum-css-temp/components/colorhandle/skin.css new file mode 100644 index 00000000000..6a0ca1347f6 --- /dev/null +++ b/spectrum-css-temp/components/colorhandle/skin.css @@ -0,0 +1,46 @@ +:root { + /* redefine this var so it can be used in skin.css */ + --spectrum-colorhandle-background-offset: calc(-1 * var(--spectrum-global-dimension-static-size-25)); + --spectrum-colorhandle-checkerboard-size: var(--spectrum-global-dimension-static-size-100); + + /* todo: update DNA so this is no longer required */ + --spectrum-colorhandle-outer-border-color: rgba(0, 0, 0, 0.42); +} + +.spectrum-ColorHandle { + border-color: var(--spectrum-colorhandle-inner-border-color); + box-shadow: 0 0 0 var(--spectrum-colorhandle-outer-border-size) var(--spectrum-colorhandle-outer-border-color); + + background-color: var(--spectrum-global-color-static-white); + + /* Add a half-percent to fix diagonal line issue in Chrome on non-retina displays */ + background-image: + linear-gradient(-45deg, transparent 75.5%, var(--spectrum-global-color-static-gray-500) 75.5%), + linear-gradient(45deg, transparent 75.5%, var(--spectrum-global-color-static-gray-500) 75.5%), + linear-gradient(-45deg, var(--spectrum-global-color-static-gray-500) 25.5%, transparent 25.5%), + linear-gradient(45deg, var(--spectrum-global-color-static-gray-500) 25.5%, transparent 25.5%); + + &.is-disabled { + border-color: var(--spectrum-colorhandle-inner-border-color-disabled); + background: var(--spectrum-colorhandle-fill-color-disabled); + box-shadow: none; + + .spectrum-ColorHandle-color { + display: none; + } + } +} + +.spectrum-ColorHandle-color { + box-shadow: inset 0 0 0 var(--spectrum-colorhandle-outer-border-size) var(--spectrum-colorhandle-outer-border-color); +} + +@media (forced-colors: active) { + .spectrum-ColorHandle { + forced-color-adjust: none; + --spectrum-colorhandle-inner-border-color-disabled: GrayText; + --spectrum-colorhandle-fill-color-disabled: GrayText; + --spectrum-colorhandle-inner-border-color: ButtonText; + --spectrum-colorhandle-outer-border-color: ButtonFace; + } +} \ No newline at end of file diff --git a/spectrum-css-temp/components/colorhandle/vars.css b/spectrum-css-temp/components/colorhandle/vars.css new file mode 100644 index 00000000000..ca1e08522d8 --- /dev/null +++ b/spectrum-css-temp/components/colorhandle/vars.css @@ -0,0 +1,14 @@ +/* + * Copyright 2020 Adobe. All rights reserved. + * This file is licensed to you under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. You may obtain a copy + * of the License at http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS + * OF ANY KIND, either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + */ + +@import './index.css'; +@import './skin.css'; diff --git a/spectrum-css-temp/components/colorloupe/index.css b/spectrum-css-temp/components/colorloupe/index.css new file mode 100644 index 00000000000..f3ab7bf84be --- /dev/null +++ b/spectrum-css-temp/components/colorloupe/index.css @@ -0,0 +1,46 @@ +:root { + /* size is the same on desktop and mobile */ + --spectrum-colorloupe-width-adjusted: calc( + var(--spectrum-colorloupe-width) + + var(--spectrum-colorhandle-inner-border-size) * 2 + ); + --spectrum-colorloupe-height-adjusted: calc( + var(--spectrum-colorloupe-height) + + var(--spectrum-colorhandle-inner-border-size) * 2 + ); + + /* Distance between the loupe and the handle */ + --spectrum-colorloupe-offset: var( + --spectrum-global-dimension-static-size-200 + ); + + /* How much to animate up to the offset distance */ + --spectrum-colorloupe-animation-distance: var( + --spectrum-global-dimension-static-size-100 + ); +} + +.spectrum-ColorLoupe { + width: var(--spectrum-colorloupe-width-adjusted); + height: var(--spectrum-colorloupe-height-adjusted); + + position: absolute; + transform: translate(0, var(--spectrum-colorloupe-animation-distance)); + opacity: 0; + transform-origin: bottom center; + bottom: calc(50% + var(--spectrum-colorloupe-offset)); + left: calc(50% - calc(var(--spectrum-colorloupe-width-adjusted) / 2)); + transition: transform 100ms ease-in-out, opacity 125ms ease-in-out; + + pointer-events: none; + + &.is-open { + transform: translate(0, 0); + opacity: 1; + z-index: 2; + } +} + +.spectrum-ColorLoupe-outer { + stroke-width: var(--spectrum-colorloupe-outer-border-size); +} diff --git a/spectrum-css-temp/components/colorloupe/skin.css b/spectrum-css-temp/components/colorloupe/skin.css new file mode 100644 index 00000000000..9efd1222765 --- /dev/null +++ b/spectrum-css-temp/components/colorloupe/skin.css @@ -0,0 +1,19 @@ +.spectrum-ColorLoupe-outer { + fill: var(--spectrum-colorloupe-inner-border-color); + stroke: var(--spectrum-colorloupe-outer-border-color); +} + +.spectrum-ColorLoupe-inner-background { + fill: var(--spectrum-global-color-static-white); +} +.spectrum-ColorLoupe-inner-checker { + fill: var(--spectrum-global-color-static-gray-500); +} + +@media (forced-colors: active) { + .spectrum-ColorLoupe { + forced-color-adjust: none; + --spectrum-colorloupe-inner-border-color: ButtonText; + --spectrum-colorloupe-outer-border-color: ButtonFace; + } +} \ No newline at end of file diff --git a/spectrum-css-temp/components/colorloupe/vars.css b/spectrum-css-temp/components/colorloupe/vars.css new file mode 100644 index 00000000000..ca1e08522d8 --- /dev/null +++ b/spectrum-css-temp/components/colorloupe/vars.css @@ -0,0 +1,14 @@ +/* + * Copyright 2020 Adobe. All rights reserved. + * This file is licensed to you under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. You may obtain a copy + * of the License at http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS + * OF ANY KIND, either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + */ + +@import './index.css'; +@import './skin.css'; diff --git a/spectrum-css-temp/components/colorslider/index.css b/spectrum-css-temp/components/colorslider/index.css new file mode 100644 index 00000000000..3850a6b008b --- /dev/null +++ b/spectrum-css-temp/components/colorslider/index.css @@ -0,0 +1,120 @@ +:root { + --spectrum-colorslider-handle-hitarea-border-radius: 0%; + --spectrum-colorslider-handle-hitarea-width: var( + --spectrum-global-dimension-size-300 + ); + --spectrum-colorslider-handle-hitarea-height: var( + --spectrum-global-dimension-size-300 + ); +} + +.spectrum-ColorControl-hiddenField { + opacity: 0.0001; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 0; + margin: 0; + pointer-events: none; +} + +.spectrum-ColorSlider-container--horizontal { + width: var(--spectrum-colorslider-default-length); +} + +.spectrum-ColorSlider-container--vertical { + display: flex; + flex-direction: column; + height: var(--spectrum-colorslider-default-length); +} + +.spectrum-ColorSlider { + position: relative; + display: block; + width: 100%; + height: var(--spectrum-colorslider-height); + border-radius: var(--spectrum-colorslider-border-radius); + + /* Otherwise we randomly drag a file icon */ + user-select: none; + touch-action: none; + + cursor: default; + + .spectrum-ColorSlider-handle.spectrum-ColorSlider-handle { + margin: 0; + } + + /* The checkerboard is a separate element so that the gradient is overlaid on top. */ + &:before { + content: ""; + z-index: -1; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + border-radius: var(--spectrum-colorslider-border-radius); + background-size: var(--spectrum-global-dimension-static-size-200) + var(--spectrum-global-dimension-static-size-200); + background-position: 0 0, 0 var(--spectrum-global-dimension-static-size-100), + var(--spectrum-global-dimension-static-size-100) + calc(-1 * var(--spectrum-global-dimension-static-size-100)), + calc(-1 * var(--spectrum-global-dimension-static-size-100)) 0; + } + + &.is-focused { + z-index: 2; + } + + &.is-disabled { + pointer-events: none; + } +} + +.spectrum-ColorSlider--vertical { + display: inline-block; + + width: var(--spectrum-colorslider-vertical-width); + flex: 1; + + .spectrum-ColorSlider-handle { + left: 50%; + top: 0; + } +} + +.spectrum-ColorSlider-handle { + left: 0; + top: 50%; + + &:after { + border-radius: var(--spectrum-colorslider-handle-hitarea-border-radius); + width: var(--spectrum-colorslider-handle-hitarea-width); + height: var(--spectrum-colorslider-handle-hitarea-height); + } +} + +.spectrum-ColorSlider-slider { + composes: spectrum-ColorControl-hiddenField; +} + +.spectrum-ColorSlider-labelContainer { + display: grid; + grid-template-areas: "label contextualHelp value"; + grid-template-columns: auto 1fr auto; + justify-items: start; +} + +.spectrum-ColorSlider-contextualHelp.spectrum-ColorSlider-contextualHelp { + grid-area: contextualHelp; + margin-inline-start: var(--spectrum-global-dimension-size-50); + margin-top: var(--spectrum-global-dimension-size-25); +} + +.spectrum-ColorSlider-valueLabel { + grid-area: value; + margin-inline-start: var(--spectrum-global-dimension-size-50); +} diff --git a/spectrum-css-temp/components/colorslider/skin.css b/spectrum-css-temp/components/colorslider/skin.css new file mode 100644 index 00000000000..187777a3c52 --- /dev/null +++ b/spectrum-css-temp/components/colorslider/skin.css @@ -0,0 +1,33 @@ +:root { + /* todo: fix this in DNA */ + --spectrum-colorslider-border-color: var(--spectrum-colorarea-border-color); +} + +.spectrum-ColorSlider { + background-color: var(--spectrum-global-color-static-white); + box-shadow: inset 0 0 0 var(--spectrum-colorslider-border-size) var(--spectrum-colorslider-border-color); + + &:before { + /* Add a half-percent to fix diagonal line issue in Chrome on non-retina displays */ + background-image: + linear-gradient(-45deg, transparent 75.5%, var(--spectrum-global-color-static-gray-500) 75.5%), + linear-gradient(45deg, transparent 75.5%, var(--spectrum-global-color-static-gray-500) 75.5%), + linear-gradient(-45deg, var(--spectrum-global-color-static-gray-500) 25.5%, transparent 25.5%), + linear-gradient(45deg, var(--spectrum-global-color-static-gray-500) 25.5%, transparent 25.5%); + } + + &.is-disabled { + background: var(--spectrum-colorslider-fill-color-disabled) !important; + box-shadow: inset 0 0 0 var(--spectrum-colorslider-border-size) var(--spectrum-colorslider-border-color-disabled); + } +} + +@media (forced-colors: active) { + .spectrum-ColorSlider { + forced-color-adjust: none; + --spectrum-colorslider-fill-color-disabled: GrayText; + --spectrum-colorslider-border-color-disabled: GrayText; + --spectrum-colorslider-border-color: ButtonText; + --spectrum-colorarea-border-color: ButtonText; + } +} diff --git a/spectrum-css-temp/components/colorslider/vars.css b/spectrum-css-temp/components/colorslider/vars.css new file mode 100644 index 00000000000..ca1e08522d8 --- /dev/null +++ b/spectrum-css-temp/components/colorslider/vars.css @@ -0,0 +1,14 @@ +/* + * Copyright 2020 Adobe. All rights reserved. + * This file is licensed to you under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. You may obtain a copy + * of the License at http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS + * OF ANY KIND, either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + */ + +@import './index.css'; +@import './skin.css'; diff --git a/spectrum-css-temp/components/colorwheel/index.css b/spectrum-css-temp/components/colorwheel/index.css new file mode 100644 index 00000000000..741d5c6acdc --- /dev/null +++ b/spectrum-css-temp/components/colorwheel/index.css @@ -0,0 +1,86 @@ +:root { + /* todo: fix this in DNA */ + --spectrum-colorwheel-focus-ring-size: var(--spectrum-global-dimension-static-size-25); + --spectrum-colorwheel-border-radius: 100%; + --spectrum-colorwheel-width: calc(var(--spectrum-global-dimension-size-125) * 16); + --spectrum-colorwheel-height: var(--spectrum-colorwheel-width); +} + +/** index.css (scale dependent) */ + +.spectrum-ColorControl-hiddenField { + opacity: 0.0001; + position: absolute; + top: 0; left: 0; + width: 100%; height: 100%; + z-index: 0; + margin: 0; + pointer-events: none; +} + +/* Use two class selectors as a workaround for the issue: https://github.com/adobe/react-spectrum/issues/1605 */ +.spectrum-ColorWheel.spectrum-ColorWheel { + position: relative; + display: block; + width: var(--spectrum-colorwheel-width); + height: var(--spectrum-colorwheel-height); + /* expose to JS */ + --spectrum-colorwheel-track-thickness: var(--spectrum-colorwheel-track-width); + + border-radius: var(--spectrum-colorwheel-border-radius); + + user-select: none; + touch-action: none; + cursor: default; + + .spectrum-ColorWheel-handle { + margin: 0; + } + + &.is-focused { + z-index: 2; + } + + &.is-disabled { + pointer-events: none; + } + + &.is-dragged { + /* Be on top when dragging so loupe can overlap */ + z-index: 2; + } +} + +.spectrum-ColorWheel-gradient { + position: relative; + z-index: 0; + width: var(--spectrum-colorwheel-width); + height: var(--spectrum-colorwheel-height); + + &:before, + &:after { + content: ""; + position: absolute; + border-radius: 100%; + border-width: var(--spectrum-colorwheel-border-size); + border-style: solid; + } + + &:before { + top: 0; + left: 0; + bottom: 0; + right: 0; + } + + &:after { + top: calc(var(--spectrum-colorwheel-track-width) - var(--spectrum-colorwheel-border-size)); + left: calc(var(--spectrum-colorwheel-track-width) - var(--spectrum-colorwheel-border-size)); + bottom: calc(var(--spectrum-colorwheel-track-width) - var(--spectrum-colorwheel-border-size)); + right: calc(var(--spectrum-colorwheel-track-width) - var(--spectrum-colorwheel-border-size)); + } +} + +.spectrum-ColorWheel-slider { + composes: spectrum-ColorControl-hiddenField; +} diff --git a/spectrum-css-temp/components/colorwheel/skin.css b/spectrum-css-temp/components/colorwheel/skin.css new file mode 100644 index 00000000000..317f67258af --- /dev/null +++ b/spectrum-css-temp/components/colorwheel/skin.css @@ -0,0 +1,39 @@ +:root { + /* todo: fix this in DNA */ + --spectrum-colorwheel-border-color: var(--spectrum-colorarea-border-color); +} + +.spectrum-ColorWheel { + &.is-disabled { + .spectrum-ColorWheel-gradient { + background: var(--spectrum-colorwheel-fill-color-disabled) !important; + + &:before, + &:after { + border-color: var(--spectrum-colorwheel-border-color-disabled); + } + } + + /* hide all the little colored bits */ + .spectrum-ColorWheel-segment { + display: none; + } + } +} + +.spectrum-ColorWheel-gradient { + &:before, + &:after { + border-color: var(--spectrum-colorwheel-border-color); + } +} + +@media (forced-colors: active) { + .spectrum-ColorWheel { + forced-color-adjust: none; + --spectrum-colorwheel-fill-color-disabled: GrayText; + --spectrum-colorwheel-border-color-disabled: GrayText; + --spectrum-colorwheel-border-color: ButtonText; + --spectrum-colorarea-border-color: ButtonText; + } +} \ No newline at end of file diff --git a/spectrum-css-temp/components/colorwheel/vars.css b/spectrum-css-temp/components/colorwheel/vars.css new file mode 100644 index 00000000000..ca1e08522d8 --- /dev/null +++ b/spectrum-css-temp/components/colorwheel/vars.css @@ -0,0 +1,14 @@ +/* + * Copyright 2020 Adobe. All rights reserved. + * This file is licensed to you under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. You may obtain a copy + * of the License at http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS + * OF ANY KIND, either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + */ + +@import './index.css'; +@import './skin.css'; diff --git a/spectrum-css-temp/components/commons/focus-ring.css b/spectrum-css-temp/components/commons/focus-ring.css new file mode 100644 index 00000000000..a06a8c8c149 --- /dev/null +++ b/spectrum-css-temp/components/commons/focus-ring.css @@ -0,0 +1,47 @@ +.spectrum-FocusRing-ring { + --spectrum-focus-ring-border-radius: var(--spectrum-textfield-border-radius); + --spectrum-focus-ring-gap: var(--spectrum-alias-input-focusring-gap); + --spectrum-focus-ring-size: var(--spectrum-alias-input-focusring-size); + --spectrum-focus-ring-border-size: 0px; + --spectrum-focus-ring-color: xvar(--spectrum-high-contrast-focus-ring-color, var(--spectrum-alias-focus-ring-color)); + + &:after { + border-radius: calc(var(--spectrum-focus-ring-border-radius) + var(--spectrum-focus-ring-gap)); + content: ''; + display: block; + position: absolute; + left: 0; + right: 0; + bottom: 0; + top: 0; + margin: calc(-1 * var(--spectrum-focus-ring-border-size)); + pointer-events: none; + + transition: box-shadow var(--spectrum-global-animation-duration-100) ease-out, + margin var(--spectrum-global-animation-duration-100) ease-out; + } +} + +.spectrum-FocusRing { + composes: spectrum-FocusRing-ring; + + &:focus-visible { + &:after { + margin: calc(var(--spectrum-focus-ring-gap) * -1 - var(--spectrum-focus-ring-border-size)); + box-shadow: 0 0 0 var(--spectrum-focus-ring-size) var(--spectrum-focus-ring-color); + } + } +} + +.spectrum-FocusRing--quiet { + &:after { + border-radius: 0; + } + + &:focus-visible { + &:after { + margin: 0 0 calc(var(--spectrum-focus-ring-gap) * -1 - var(--spectrum-focus-ring-border-size)) 0; + box-shadow: 0 var(--spectrum-focus-ring-size) 0 var(--spectrum-focus-ring-color); + } + } +} diff --git a/spectrum-css-temp/components/commons/fonts.css b/spectrum-css-temp/components/commons/fonts.css new file mode 100644 index 00000000000..ab671b3a8dd --- /dev/null +++ b/spectrum-css-temp/components/commons/fonts.css @@ -0,0 +1,84 @@ +/* +Copyright 2019 Adobe. All rights reserved. +This file is licensed to you under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. You may obtain a copy +of the License at http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under +the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS +OF ANY KIND, either express or implied. See the License for the specific language +governing permissions and limitations under the License. +*/ + +:root { + --spectrum-font-fallbacks-sans: adobe-clean, 'Source Sans Pro', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Ubuntu, 'Trebuchet MS', 'Lucida Grande', sans-serif; + + /* Not used + --spectrum-font-fallbacks-serif: serif; + --spectrum-font-fallbacks-mono: monospace; + --spectrum-font-family-article: adobe-clean-serif, 'Source Serif', var(--spectrum-font-fallbacks-serif); + --spectrum-font-family-article-ar: adobe-arabic, var(--spectrum-font-fallbacks-serif); + --spectrum-font-family-article-he: adobe-hebrew, var(--spectrum-font-fallbacks-serif); + --spectrum-font-family-article-ja: source-han-serif-japanese, var(--spectrum-font-fallbacks-serif); + --spectrum-font-family-article-ko: source-han-serif-korean, var(--spectrum-font-fallbacks-serif); + --spectrum-font-family-article-zh-hans: source-han-serif-sc, var(--spectrum-font-fallbacks-serif); + --spectrum-font-family-article-zh-hant: source-han-serif-tc, 'MingLiu', var(--spectrum-font-fallbacks-serif); + --spectrum-font-family-code: source-code-pro, 'Source Code Pro', var(--spectrum-font-fallbacks-mono); + --spectrum-font-family-condensed: adobe-clean-condensed, var(--spectrum-font-family-base); + */ + + --spectrum-font-family-base: var(--spectrum-font-fallbacks-sans); + --spectrum-font-family-han: 'adobe-clean-han-japanese', var(--spectrum-font-fallbacks-sans); + --spectrum-font-family-ar: 'myriad-arabic', var(--spectrum-font-fallbacks-sans); + --spectrum-font-family-he: 'myriad-hebrew', var(--spectrum-font-fallbacks-sans); + --spectrum-font-family-zhhans: adobe-clean-han-simplified-c, source-han-simplified-c, 'SimSun', 'Heiti SC Light', sans-serif; + --spectrum-font-family-zh: adobe-clean-han-traditional, source-han-traditional, 'MingLiu', 'Heiti TC Light', sans-serif; + --spectrum-font-family-zhhant: adobe-clean-han-traditional, source-han-traditional, 'MingLiu', 'Microsoft JhengHei UI', 'Microsoft JhengHei', 'Heiti TC Light', sans-serif; + --spectrum-font-family-ko: adobe-clean-han-korean, source-han-korean, 'Malgun Gothic', 'Apple Gothic', sans-serif; + --spectrum-font-family-ja: adobe-clean-han-japanese, 'Hiragino Kaku Gothic ProN', 'ヒラギノ角ゴ ProN W3', Osaka, YuGothic, 'Yu Gothic', 'メイリオ', Meiryo, 'MS Pゴシック', 'MS PGothic', sans-serif; + --spectrum-text-size: var(--spectrum-alias-font-size-default); + --spectrum-text-body-line-height: var(--spectrum-alias-line-height-medium); + --spectrum-text-size-text-label: var(--spectrum-label-text-size); + --spectrum-line-height-text-label: var(--spectrum-label-text-line-height); +} + +.i18nFontFamily { + font-family: var(--spectrum-font-family-base); + font-synthesis: weight; + + &:lang(ar) { + font-family: var(--spectrum-font-family-ar); + } + + &:lang(he) { + font-family: var(--spectrum-font-family-he); + } + + &:lang(zh) { + font-family: var(--spectrum-font-family-zh); + } + + &:lang(zh-Hans) { + font-family: var(--spectrum-font-family-zhhans); + } + + &:lang(zh-Hant) { + font-family: var(--spectrum-font-family-zhhant); + } + + &:lang(zh-SG) { + font-family: var(--spectrum-font-family-zhhans); + } + + &:lang(zh-CN) { + font-family: var(--spectrum-font-family-zhhans); + } + + &:lang(ko) { + font-family: var(--spectrum-font-family-ko); + } + + &:lang(ja) { + font-family: var(--spectrum-font-family-ja); + } +} diff --git a/spectrum-css-temp/components/commons/index.css b/spectrum-css-temp/components/commons/index.css new file mode 100644 index 00000000000..4463690328a --- /dev/null +++ b/spectrum-css-temp/components/commons/index.css @@ -0,0 +1,15 @@ +/* +Copyright 2019 Adobe. All rights reserved. +This file is licensed to you under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. You may obtain a copy +of the License at http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under +the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS +OF ANY KIND, either express or implied. See the License for the specific language +governing permissions and limitations under the License. +*/ + +@import './layout.css'; +@import './fonts.css'; +@import './focus-ring.css'; diff --git a/spectrum-css-temp/components/commons/layout.css b/spectrum-css-temp/components/commons/layout.css new file mode 100644 index 00000000000..9c296efa4db --- /dev/null +++ b/spectrum-css-temp/components/commons/layout.css @@ -0,0 +1,20 @@ +/* +Copyright 2019 Adobe. All rights reserved. +This file is licensed to you under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. You may obtain a copy +of the License at http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under +the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS +OF ANY KIND, either express or implied. See the License for the specific language +governing permissions and limitations under the License. +*/ + +:root { + --spectrum-padding: var(--spectrum-global-dimension-size-150); + --spectrum-margin: var(--spectrum-padding); + --spectrum-border-radius: var(--spectrum-alias-border-radius-regular); + + --spectrum-component-single-line-height: var(--spectrum-alias-single-line-height); + --spectrum-component-single-line-width: var(--spectrum-alias-single-line-width); +} diff --git a/spectrum-css-temp/components/contextualhelp/index.css b/spectrum-css-temp/components/contextualhelp/index.css new file mode 100644 index 00000000000..04db902504a --- /dev/null +++ b/spectrum-css-temp/components/contextualhelp/index.css @@ -0,0 +1,44 @@ +/* + * Copyright 2020 Adobe. All rights reserved. + * This file is licensed to you under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. You may obtain a copy + * of the License at http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS + * OF ANY KIND, either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + */ + +:root { + --spectrum-contextualhelp-button-size: var(--spectrum-global-dimension-size-250); + --spectrum-contextualhelp-icon-size: var(--spectrum-global-dimension-size-175); + --spectrum-contexualhelp-dialog-width: 250px; + --spectrum-contextualhelp-dialog-padding: var(--spectrum-global-dimension-static-size-300); +} + +.react-spectrum-ContextualHelp-button { + --spectrum-button-primary-height: var(--spectrum-contextualhelp-button-size); + --spectrum-actionbutton-height: var(--spectrum-contextualhelp-button-size); + --spectrum-actionbutton-min-width: var(--spectrum-contextualhelp-button-size); + --spectrum-actionbutton-icon-padding-x: var(--spectrum-global-dimension-size-40); + + svg { + block-size: var(--spectrum-contextualhelp-icon-size); + inline-size: var(--spectrum-contextualhelp-icon-size); + } +} + +.react-spectrum-ContextualHelp-dialog.react-spectrum-ContextualHelp-dialog { + width: var(--spectrum-contexualhelp-dialog-width); + --spectrum-dialog-padding-x: var(--spectrum-contextualhelp-dialog-padding); + --spectrum-dialog-padding-y: var(--spectrum-contextualhelp-dialog-padding); + + .react-spectrum-ContextualHelp-content { + margin-top: var(--spectrum-global-dimension-static-size-100); + } + + .react-spectrum-ContextualHelp-footer { + padding-top: var(--spectrum-global-dimension-static-size-100); + } +} diff --git a/spectrum-css-temp/components/contextualhelp/skin.css b/spectrum-css-temp/components/contextualhelp/skin.css new file mode 100644 index 00000000000..ff0df4a4045 --- /dev/null +++ b/spectrum-css-temp/components/contextualhelp/skin.css @@ -0,0 +1,11 @@ +/* + * Copyright 2020 Adobe. All rights reserved. + * This file is licensed to you under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. You may obtain a copy + * of the License at http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS + * OF ANY KIND, either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + */ diff --git a/spectrum-css-temp/components/contextualhelp/vars.css b/spectrum-css-temp/components/contextualhelp/vars.css new file mode 100644 index 00000000000..ca1e08522d8 --- /dev/null +++ b/spectrum-css-temp/components/contextualhelp/vars.css @@ -0,0 +1,14 @@ +/* + * Copyright 2020 Adobe. All rights reserved. + * This file is licensed to you under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. You may obtain a copy + * of the License at http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS + * OF ANY KIND, either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + */ + +@import './index.css'; +@import './skin.css'; diff --git a/spectrum-css-temp/components/cyclebutton/index.css b/spectrum-css-temp/components/cyclebutton/index.css new file mode 100644 index 00000000000..ea7d146894c --- /dev/null +++ b/spectrum-css-temp/components/cyclebutton/index.css @@ -0,0 +1,22 @@ +/* +Copyright 2019 Adobe. All rights reserved. +This file is licensed to you under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. You may obtain a copy +of the License at http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under +the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS +OF ANY KIND, either express or implied. See the License for the specific language +governing permissions and limitations under the License. +*/ + +@import '../commons/index.css'; + +.spectrum-CycleButton { + /* Be square */ + padding: 0 var(--spectrum-actionbutton-icon-padding-x); + + .spectrum-CycleButton-item:not(.is-selected) { + display: none + } +} diff --git a/spectrum-css-temp/components/cyclebutton/skin.css b/spectrum-css-temp/components/cyclebutton/skin.css new file mode 100644 index 00000000000..55fa2f5caf8 --- /dev/null +++ b/spectrum-css-temp/components/cyclebutton/skin.css @@ -0,0 +1,11 @@ +/* +Copyright 2019 Adobe. All rights reserved. +This file is licensed to you under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. You may obtain a copy +of the License at http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under +the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS +OF ANY KIND, either express or implied. See the License for the specific language +governing permissions and limitations under the License. +*/ diff --git a/spectrum-css-temp/components/cyclebutton/vars.css b/spectrum-css-temp/components/cyclebutton/vars.css new file mode 100644 index 00000000000..ca1e08522d8 --- /dev/null +++ b/spectrum-css-temp/components/cyclebutton/vars.css @@ -0,0 +1,14 @@ +/* + * Copyright 2020 Adobe. All rights reserved. + * This file is licensed to you under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. You may obtain a copy + * of the License at http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS + * OF ANY KIND, either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + */ + +@import './index.css'; +@import './skin.css'; diff --git a/spectrum-css-temp/components/dialog/index.css b/spectrum-css-temp/components/dialog/index.css new file mode 100644 index 00000000000..ab1695cb420 --- /dev/null +++ b/spectrum-css-temp/components/dialog/index.css @@ -0,0 +1,534 @@ +/* +Copyright 2019 Adobe. All rights reserved. +This file is licensed to you under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. You may obtain a copy +of the License at http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under +the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS +OF ANY KIND, either express or implied. See the License for the specific language +governing permissions and limitations under the License. +*/ + +@import '../commons/index.css'; +@import '../overlay/index.css'; + +:root { + /* Distance between the edge of the fullscreen dialog and header */ + --spectrum-dialog-fullscreen-padding-top: calc(var(--spectrum-dialog-padding) - 10px); + + /* The font-size of the fullscreen dialog header */ + --spectrum-dialog-fullscreen-header-text-size: 28px; + + /* The font-weight of the fullscreen dialog header */ + --spectrum-dialog-fullscreen-header-text-font-weight: 100; + + /* Distance between top and bottom of dialog and edge of window for fullscreen dialog */ + --spectrum-dialog-fullscreen-margin: 40px; + + --spectrum-dialog-small-width: 400px; + --spectrum-dialog-medium-width: 480px; + --spectrum-dialog-large-width: 640px; + --spectrum-dialog-max-width: 90vw; + --spectrum-dialog-max-height: 90%; + --spectrum-dialog-hero-height: var(--spectrum-global-dimension-size-1600); + --spectrum-dialog-alert-width: var(--spectrum-dialog-medium-width); + + --spectrum-dialog-button-margin: var(--spectrum-global-dimension-size-200); + --spectrum-dialog-content-margin-bottom: var(--spectrum-global-dimension-size-450); + --spectrum-dialog-content-min-height: var(--spectrum-component-single-line-height); + + /* 12px desktop (medium scale) and 8px mobile (large scale) */ + --spectrum-dialog-close-button-padding: calc(26px - var(--spectrum-global-dimension-size-175)); + --spectrum-dialog-close-button-size: var(--spectrum-global-dimension-size-400); + + --spectrum-dialog-gap-size: var(--spectrum-global-dimension-size-200); +} + + +.spectrum-Dialog { + /* Be a flexbox to allow a full sized content area that scrolls */ + display: flex; + + /* Allow 100% width, taking into account padding */ + box-sizing: border-box; + + /* Be no bigger than max-width, but also be 90% if the viewport is smaller than max-width */ + width: fit-content; + min-width: var(--spectrum-dialog-min-width); + max-width: 100%; + + max-height: inherit; + overflow: hidden; + outline: none; + + --spectrum-dialog-padding-x: var(--spectrum-dialog-padding); + --spectrum-dialog-padding-y: var(--spectrum-dialog-padding); + --spectrum-dialog-border-radius: var(--spectrum-border-radius); + + border-radius: var(--spectrum-dialog-border-radius); +} + +.spectrum-Dialog--small { + width: var(--spectrum-dialog-small-width); +} + +.spectrum-Dialog--medium { + width: var(--spectrum-dialog-medium-width); +} + +.spectrum-Dialog--large { + width: var(--spectrum-dialog-large-width); +} + +.spectrum-Dialog-hero { + grid-area: hero; + height: var(--spectrum-dialog-hero-height); + + border-top-left-radius: var(--spectrum-dialog-border-radius); + border-top-right-radius: var(--spectrum-dialog-border-radius); + + background-size: cover; + background-position: center center; + overflow: hidden; +} + +.spectrum-Dialog .spectrum-Dialog-grid { + display: grid; + grid-template-columns: var(--spectrum-dialog-padding-x) auto 1fr auto minmax(0, auto) var(--spectrum-dialog-padding-x); + grid-template-rows: auto var(--spectrum-dialog-padding-y) auto auto 1fr auto var(--spectrum-dialog-padding-y); + grid-template-areas: + "hero hero hero hero hero hero" + ". . . . . ." + ". heading header header typeIcon ." + ". divider divider divider divider ." + ". content content content content ." + ". footer footer buttonGroup buttonGroup ." + ". . . . . ."; + width: 100%; +} + +.spectrum-Dialog-heading { + grid-area: heading; + + margin: 0; + + font-size: var(--spectrum-dialog-title-text-size); + font-weight: var(--spectrum-dialog-title-text-font-weight); + line-height: var(--spectrum-dialog-title-text-line-height); + + outline: none; /* Hide focus outline */ + + padding-inline-end: var(--spectrum-dialog-gap-size); + + &.spectrum-Dialog-heading--noHeader { + grid-area: heading-start / heading-start / header-end / header-end; + padding-inline-end: 0; + } + + &.spectrum-Dialog-heading--noHeader.spectrum-Dialog-heading--noTypeIcon { + grid-area: heading-start / heading-start / typeIcon-end / typeIcon-end; + padding-inline-end: 0; + } +} + +.spectrum-Dialog-header { + grid-area: header; + display: flex; + /* Without this, buttons will be stretched */ + align-items: center; + justify-content: flex-end; + + box-sizing: border-box; + + outline: none; /* Hide focus outline around header */ + min-width: fit-content; /* prevents header with width 0px */ + + &.spectrum-Dialog-header--noTypeIcon { + grid-area: header-start / header-start / typeIcon-end / typeIcon-end; + padding-inline-end: 0; + } +} + +.spectrum-Dialog-typeIcon { + grid-area: typeIcon; +} + +.spectrum-Dialog .spectrum-Dialog-divider { + grid-area: divider; + width: 100%; + margin-top: var(--spectrum-dialog-rule-margin-top); + margin-bottom: var(--spectrum-dialog-rule-margin-bottom); +} + +.spectrum-Dialog--noDivider { + .spectrum-Dialog-divider { + display: none; + } +} + +.spectrum-Dialog-content { + grid-area: content; + box-sizing: border-box; + + /* + v2 is currently worse, inputs that get focus rings get a slight clipping unless overflow: visible replaces this line + we should think of a better way to handle this, see padding/margin below for fix + */ + overflow-y: auto; + -webkit-overflow-scrolling: touch; + + outline: none; /* Hide focus outline */ + + font-size: var(--spectrum-dialog-content-text-size); + font-weight: var(--spectrum-dialog-content-text-font-weight); + line-height: var(--spectrum-dialog-content-text-line-height); + + /* + this is kinda dumb, but needed for the keyboard focus rings so they don't get clipped. + is there a better way to treat this + it's needed in every instance of overflow being set to anything other than visible + */ + padding: calc(var(--spectrum-global-dimension-size-25) * 2); + margin: calc(var(--spectrum-global-dimension-size-25) * -2); + + /* for zoom (a11y) and short windows */ + min-height: var(--spectrum-dialog-content-min-height); +} + + +.spectrum-Dialog-footer { + grid-area: footer; + /* this padding isn't built into the grid because it disappears with this footer */ + padding-block-start: var(--spectrum-global-dimension-static-size-500); + + display: flex; + flex-wrap: wrap; + + outline: none; /* Hide focus outline */ + + /* Both selectors are required to override the button + button rule */ + > *, + > .spectrum-Button + .spectrum-Button { + margin-bottom: 0; + } +} + +.spectrum-Dialog-buttonGroup { + grid-area: buttonGroup; + /* this padding isn't built into the grid because it disappears with this buttonGroup */ + padding-block-start: var(--spectrum-global-dimension-static-size-500); + display: flex; + justify-content: flex-end; + /* this padding should be safe as button group is always end aligned */ + padding-inline-start: var(--spectrum-dialog-gap-size); + /* Fixes Firefox buttongroup overflow (switch from horizontal buttongroup to vertical buttongroup) */ + max-width: 100%; + + &.spectrum-Dialog-buttonGroup--noFooter { + grid-area: footer-start / footer-start / buttonGroup-end / buttonGroup-end; + } +} + +.spectrum-Dialog.spectrum-Dialog--dismissable .spectrum-Dialog-grid { + grid-template-columns: var(--spectrum-dialog-padding-x) auto 1fr auto minmax(0, auto) minmax(0, var(--spectrum-dialog-close-button-size)) var(--spectrum-dialog-padding-x); + grid-template-rows: auto var(--spectrum-dialog-padding-y) auto auto 1fr auto var(--spectrum-dialog-padding-y); + grid-template-areas: + "hero hero hero hero hero hero hero" + ". . . . . closeButton closeButton" + ". heading header header typeIcon closeButton closeButton" + ". divider divider divider divider divider ." + ". content content content content content ." + ". footer footer buttonGroup buttonGroup buttonGroup ." + ". . . . . . ."; + + .spectrum-Dialog-buttonGroup { + display: none; + } + .spectrum-Dialog-footer { + grid-area: footer / footer/ buttonGroup / buttonGroup; + } +} + +.spectrum-Dialog.spectrum-Dialog--dismissable .spectrum-Dialog-closeButton { + grid-area: closeButton; + /* align and justify so it doesn't do the default 'stretch' and end up with forced height/width */ + align-self: flex-start; + justify-self: end; + + margin-inline-end: var(--spectrum-dialog-close-button-padding); + margin-block-start: var(--spectrum-dialog-close-button-padding); +} + +/* Alert Dialog is a specific type of Dialog */ +.spectrum-Dialog--error { + width: var(--spectrum-dialog-alert-width); +} + +.spectrum-Dialog--fullscreen { + width: 100%; + height: 100%; +} +.spectrum-Dialog--fullscreenTakeover { + width: 100%; + height: 100%; + + border-style: none; + border-radius: 0; +} +/** @unofficial */ +.spectrum-Dialog--fullscreen, +.spectrum-Dialog--fullscreenTakeover { + max-height: none; + max-width: none; + + &.spectrum-Dialog .spectrum-Dialog-grid { + display: grid; + grid-template-columns: var(--spectrum-dialog-padding-x) 1fr auto auto var(--spectrum-dialog-padding-x); + grid-template-rows: var(--spectrum-dialog-padding-y) auto auto 1fr var(--spectrum-dialog-padding-y); + grid-template-areas: + ". . . . ." + ". heading header buttonGroup ." + ". divider divider divider ." + ". content content content ." + ". . . . ."; + } + + .spectrum-Dialog-heading { + font-size: var(--spectrum-dialog-fullscreen-header-text-size); + + &.spectrum-Dialog-heading--noHeader { + grid-area: heading-start / heading-start / header-end / header-end; + padding-inline-end: 0; + } + + /* there will never be a typeIcon here */ + &.spectrum-Dialog-heading--noHeader.spectrum-Dialog-heading--noTypeIcon { + grid-area: heading-start / heading-start / header-end / header-end; + padding-inline-end: 0; + } + } + .spectrum-Dialog-header { + &.spectrum-Dialog-header--noTypeIcon { + grid-area: header; + padding-inline-end: 0; + } + } + + .spectrum-Dialog-content { + max-height: none; + } + + .spectrum-Dialog-footer, + .spectrum-Dialog-buttonGroup { + padding-block-start: 0px; + } + + .spectrum-Dialog-footer, .spectrum-Dialog-typeIcon, .spectrum-Dialog-closeButton { + display: none; + } + + .spectrum-Dialog-buttonGroup { + grid-area: buttonGroup; + } +} + +@media screen and (max-width: 700px) { + /* for zoom (a11y) */ + .spectrum-Dialog { + --spectrum-dialog-padding: var(--spectrum-global-dimension-static-size-300); + } + + .spectrum-Dialog .spectrum-Dialog-grid { + grid-template-columns: var(--spectrum-dialog-padding-x) auto 1fr auto minmax(0, auto) var(--spectrum-dialog-padding-x); + grid-template-rows: auto var(--spectrum-dialog-padding-y) auto auto auto 1fr auto var(--spectrum-dialog-padding-y); + grid-template-areas: + "hero hero hero hero hero hero" + ". . . . . ." + ". heading heading heading typeIcon ." + ". header header header header ." + ". divider divider divider divider ." + ". content content content content ." + ". footer footer buttonGroup buttonGroup ." + ". . . . . ."; + } + .spectrum-Dialog-heading { + &.spectrum-Dialog-heading--noHeader { + grid-area: heading; + } + + /* match specificity from above where it had noHeader, but here header won't prevent heading from expanding */ + &.spectrum-Dialog-heading--noTypeIcon.spectrum-Dialog-heading--noTypeIcon { + grid-area: heading-start / heading-start / typeIcon-end / typeIcon-end; + } + } + .spectrum-Dialog-header { + &.spectrum-Dialog-header--noTypeIcon { + grid-area: header; + } + } + + .spectrum-Dialog.spectrum-Dialog--dismissable .spectrum-Dialog-grid { + grid-template-columns: var(--spectrum-dialog-padding-x) auto 1fr auto minmax(0, auto) minmax(0, var(--spectrum-dialog-close-button-size)) var(--spectrum-dialog-padding-x); + grid-template-rows: auto var(--spectrum-dialog-padding-y) auto auto auto 1fr auto var(--spectrum-dialog-padding-y); + grid-template-areas: + "hero hero hero hero hero hero hero" + ". . . . . closeButton closeButton" + ". heading heading heading typeIcon closeButton closeButton" + ". header header header header header ." + ". divider divider divider divider divider ." + ". content content content content content ." + ". footer footer buttonGroup buttonGroup buttonGroup ." + ". . . . . . ."; + } + + .spectrum-Dialog .spectrum-Dialog-header { + justify-content: flex-start; + } + + .spectrum-Dialog-footer { + min-width: fit-content; + } + + .spectrum-Dialog-buttonGroup { + min-width: 0; + } + + .spectrum-Dialog--fullscreen, + .spectrum-Dialog--fullscreenTakeover { + + &.spectrum-Dialog .spectrum-Dialog-grid { + display: grid; + grid-template-columns: var(--spectrum-dialog-padding-x) 1fr var(--spectrum-dialog-padding-x); + grid-template-rows: var(--spectrum-dialog-padding-y) auto auto auto 1fr auto var(--spectrum-dialog-padding-y); + grid-template-areas: + ". . ." + ". heading ." + ". header ." + ". divider ." + ". content ." + ". buttonGroup ." + ". . ."; + } + .spectrum-Dialog-heading { + &.spectrum-Dialog-heading--noHeader, + &.spectrum-Dialog-heading--noTypeIcon { + grid-area: heading; + } + + /* there will never be a typeIcon here */ + &.spectrum-Dialog-heading--noHeader.spectrum-Dialog-heading--noTypeIcon { + grid-area: heading; + } + } + .spectrum-Dialog-header { + &.spectrum-Dialog-header--noTypeIcon { + grid-area: header; + } + } + + .spectrum-Dialog-buttonGroup { + padding-block-start: var(--spectrum-global-dimension-static-size-500); + } + + .spectrum-Dialog-heading { + font-size: var(--spectrum-dialog-title-text-size); + } + } +} + +/* additional a11y support by moving scrolling from content to dialog */ +@media screen and (max-height: 400px) { + .spectrum-Dialog .spectrum-Dialog-grid { + border-top-left-radius: var(--spectrum-dialog-border-radius); + border-top-right-radius: var(--spectrum-dialog-border-radius); + overflow-y: auto; + + grid-template-columns: var(--spectrum-dialog-padding-x) auto 1fr auto minmax(0, auto) var(--spectrum-dialog-padding-x); + grid-template-rows: auto var(--spectrum-dialog-padding-y) auto auto auto 1fr auto auto var(--spectrum-dialog-padding-y); + grid-template-areas: + "hero hero hero hero hero hero" + ". . . . . ." + ". heading heading heading typeIcon ." + ". header header header header ." + ". divider divider divider divider ." + ". content content content content ." + ". footer footer footer footer ." + ". buttonGroup buttonGroup buttonGroup buttonGroup ." + ". . . . . ."; + } + + .spectrum-Dialog-heading { + &.spectrum-Dialog-heading--noHeader { + grid-area: heading; + padding-inline-end: 0; + } + + /* match specificity from above where it had noHeader, but here header won't prevent heading from expanding */ + + &.spectrum-Dialog-heading--noTypeIcon.spectrum-Dialog-heading--noTypeIcon { + grid-area: heading-start / heading-start / typeIcon-end / typeIcon-end; + padding-inline-end: 0; + } + } + + .spectrum-Dialog-header { + &.spectrum-Dialog-header--noTypeIcon { + grid-area: header; + padding-inline-end: 0; + } + } + + .spectrum-Dialog-content { + overflow-y: visible; + height: min-content; + display: inline-table; + } + + .spectrum-Dialog-footer + .spectrum-Dialog-buttonGroup { + padding-block-start: calc(var(--spectrum-global-dimension-size-25) * 2); + } +} +@media screen and (max-height: 400px) and (max-width: 700px) { + .spectrum-Dialog--fullscreen, + .spectrum-Dialog--fullscreenTakeover { + + &.spectrum-Dialog .spectrum-Dialog-grid { + display: grid; + grid-template-columns: var(--spectrum-dialog-padding-x) 1fr var(--spectrum-dialog-padding-x); + grid-template-rows: var(--spectrum-dialog-padding-y) auto auto auto 1fr auto var(--spectrum-dialog-padding-y); + grid-template-areas: + ". . ." + ". heading ." + ". header ." + ". divider ." + ". content ." + ". buttonGroup ." + ". . ."; + } + .spectrum-Dialog-heading { + &.spectrum-Dialog-heading--noHeader, + &.spectrum-Dialog-heading--noTypeIcon { + grid-area: heading; + } + + /* there will never be a typeIcon here */ + &.spectrum-Dialog-heading--noHeader.spectrum-Dialog-heading--noTypeIcon { + grid-area: heading; + } + } + .spectrum-Dialog-header { + &.spectrum-Dialog-header--noTypeIcon { + grid-area: header; + } + } + + .spectrum-Dialog-buttonGroup { + padding-block-start: var(--spectrum-global-dimension-static-size-500); + } + + .spectrum-Dialog-heading { + font-size: var(--spectrum-dialog-title-text-size); + } + } +} diff --git a/spectrum-css-temp/components/dialog/skin.css b/spectrum-css-temp/components/dialog/skin.css new file mode 100644 index 00000000000..f38f3b8737c --- /dev/null +++ b/spectrum-css-temp/components/dialog/skin.css @@ -0,0 +1,38 @@ +/* +Copyright 2019 Adobe. All rights reserved. +This file is licensed to you under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. You may obtain a copy +of the License at http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under +the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS +OF ANY KIND, either express or implied. See the License for the specific language +governing permissions and limitations under the License. +*/ +:root { + --spectrum-dialog-warning-icon-color: var(--spectrum-semantic-notice-color-icon); +} + +.spectrum-Dialog-heading { + color: var(--spectrum-dialog-title-text-color); +} + +.spectrum-Dialog-content { + color: var(--spectrum-dialog-content-text-color); +} + +.spectrum-Dialog-typeIcon { + color: var(--spectrum-dialog-icon-color); +} + +.spectrum-Dialog--error { + .spectrum-Dialog-typeIcon { + color: var(--spectrum-dialog-error-icon-color); + } +} + +.spectrum-Dialog--warning { + .spectrum-Dialog-typeIcon { + color: var(--spectrum-dialog-warning-icon-color); + } +} diff --git a/spectrum-css-temp/components/dialog/vars.css b/spectrum-css-temp/components/dialog/vars.css new file mode 100644 index 00000000000..ca1e08522d8 --- /dev/null +++ b/spectrum-css-temp/components/dialog/vars.css @@ -0,0 +1,14 @@ +/* + * Copyright 2020 Adobe. All rights reserved. + * This file is licensed to you under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. You may obtain a copy + * of the License at http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS + * OF ANY KIND, either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + */ + +@import './index.css'; +@import './skin.css'; diff --git a/spectrum-css-temp/components/dnd/index.css b/spectrum-css-temp/components/dnd/index.css new file mode 100644 index 00000000000..3557a22d946 --- /dev/null +++ b/spectrum-css-temp/components/dnd/index.css @@ -0,0 +1,33 @@ +/* +Copyright 2023 Adobe. All rights reserved. +This file is licensed to you under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. You may obtain a copy +of the License at http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under +the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS +OF ANY KIND, either express or implied. See the License for the specific language +governing permissions and limitations under the License. +*/ + +@import '../commons/index.css'; + +.spectrum-Dropzone { + text-align: center; + border-width: var(--spectrum-dropzone-border-width); + border-radius: var(--spectrum-dropzone-border-radius); + padding: var(--spectrum-dropzone-padding); + border-style: dashed; + + &:focus { + outline: 0; + border-style: dashed; + &.focus-ring { + border-style: solid; + } + } + + &.is-dragged { + border-style: solid; + } +} diff --git a/spectrum-css-temp/components/dnd/skin.css b/spectrum-css-temp/components/dnd/skin.css new file mode 100644 index 00000000000..9711e388770 --- /dev/null +++ b/spectrum-css-temp/components/dnd/skin.css @@ -0,0 +1,58 @@ +/* +Copyright 2023 Adobe. All rights reserved. +This file is licensed to you under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. You may obtain a copy +of the License at http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under +the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS +OF ANY KIND, either express or implied. See the License for the specific language +governing permissions and limitations under the License. +*/ + +.spectrum-Dropzone { + --spectrum-dropzone-illustratedmessage-illustration-color-selected: var(--spectrum-global-color-blue-400); + --spectrum-dropzone-illustratedmessage-illustration-color-key-focus: var(--spectrum-global-color-blue-500); +} + +.spectrum-Dropzone { + border-color: var(--spectrum-dropzone-border-color); + + &.is-dragged { + border-color: var(--spectrum-dropzone-border-color-selected-hover); + background-color: var(--spectrum-dropzone-background-color-selected-hover); + + .spectrum-IllustratedMessage-illustration { + color: var(--spectrum-dropzone-illustratedmessage-illustration-color-selected); + } + } + + &:focus:not(.is-dragged) { + border-color: var(--spectrum-dropzone-border-color); + .spectrum-IllustratedMessage-illustration { + color: var(--spectrum-dropzone-illustratedmessage-illustration-color-key-focus); + } + &.focus-ring { + border-color: var(--spectrum-dropzone-border-color-selected-hover); + } + &.is-dragged.focus-ring { + .spectrum-IllustratedMessage-illustration { + color: var(--spectrum-dropzone-illustratedmessage-illustration-color-selected); + } + } + } +} + +@media (forced-colors: active) { + .spectrum-Dropzone { + --spectrum-dropzone-border-color: CanvasText; + --spectrum-dropzone-illustratedmessage-illustration-color-selected: Highlight; + --spectrum-dropzone-border-color-selected-hover: Highlight; + --spectrum-dropzone-background-color-selected-hover: Canvas; + + &.is-dragged { + forced-color-adjust: none; + } + } +} + \ No newline at end of file diff --git a/spectrum-css-temp/components/dnd/vars.css b/spectrum-css-temp/components/dnd/vars.css new file mode 100644 index 00000000000..0f7b30b57ac --- /dev/null +++ b/spectrum-css-temp/components/dnd/vars.css @@ -0,0 +1,14 @@ +/* + * Copyright 2023 Adobe. All rights reserved. + * This file is licensed to you under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. You may obtain a copy + * of the License at http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS + * OF ANY KIND, either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + */ + +@import './index.css'; +@import './skin.css'; diff --git a/spectrum-css-temp/components/dropdown/index.css b/spectrum-css-temp/components/dropdown/index.css new file mode 100644 index 00000000000..18a4b40b485 --- /dev/null +++ b/spectrum-css-temp/components/dropdown/index.css @@ -0,0 +1,172 @@ +/* +Copyright 2019 Adobe. All rights reserved. +This file is licensed to you under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. You may obtain a copy +of the License at http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under +the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS +OF ANY KIND, either express or implied. See the License for the specific language +governing permissions and limitations under the License. +*/ + +@import '../commons/index.css'; + +:root { + --spectrum-dropdown-popover-max-width: var(--spectrum-global-dimension-size-3000); + --spectrum-dropdown-width: var(--spectrum-global-dimension-size-2400); +} + +.spectrum-Dropdown { + position: relative; + display: inline-block; + user-select: none; + + /* Truncate if menu options make us too wide */ + max-inline-size: 100%; + inline-size: var(--spectrum-dropdown-width); + min-inline-size: var(--spectrum-dropdown-min-width); + + /* Hack to enable select-powered Dropdowns */ + select { + appearance: none; + -ms-appearance: none; /* Edge */ + + &::-ms-expand { + display: none; + } + + &::-ms-value { + background-color: transparent; + } + + & + .spectrum-Dropdown-chevron { + position: absolute; + inset-inline-end: var(--spectrum-dropdown-padding-x); + inset-block-start: 50%; + margin-block-start: calc(var(--spectrum-icon-chevron-down-medium-height) / -2); + } + } +} + +.spectrum-Dropdown-trigger { + position: relative; + inline-size: 100%; + display: flex; + justify-content: space-between; + align-items: center; + + /* Ensure that changing the selected item doesn't affect the size of the dropdown and its parents */ + contain: size; +} + +.spectrum-Dropdown-label { + /* Be the biggest, but also shrink! */ + flex: 1 1 auto; + + white-space: nowrap; + overflow: hidden; + + block-size: calc(var(--spectrum-dropdown-height) - calc(var(--spectrum-dropdown-border-size) * 2)); + line-height: calc(var(--spectrum-dropdown-height) - calc(var(--spectrum-dropdown-border-size) * 2)); + + font-size: var(--spectrum-dropdown-text-size); + + text-overflow: ellipsis; + text-align: start; + + &.is-placeholder { + font-weight: var(--spectrum-dropdown-placeholder-text-font-weight); + font-style: var(--spectrum-dropdown-placeholder-text-font-style); + transition: color var(--spectrum-global-animation-duration-100) ease-in-out; + } +} + +/* Only apply margin to the icon if there's a label */ +.spectrum-Dropdown-label + .spectrum-Dropdown-chevron { + margin-inline-start: var(--spectrum-dropdown-icon-margin-left); +} + +.spectrum-Icon + .spectrum-Dropdown-label { + margin-inline-start: var(--spectrum-selectlist-thumbnail-image-padding-x); +} + +/* Only apply margin if there's a label */ +.spectrum-Dropdown-label ~ .spectrum-Dropdown-chevron { + margin-inline-start: var(--spectrum-dropdown-icon-margin-left); +} + +.spectrum-Dropdown-chevron { + display: inline-block; + position: relative; + vertical-align: top; + transition: color var(--spectrum-global-animation-duration-100) ease-out; + flex-shrink: 0; + + /* Fix Safari 10 bug where align-items is ignored inside of buttons */ + margin-top: calc(calc(var(--spectrum-dropdown-height) - calc(var(--spectrum-dropdown-border-size) * 2) - var(--spectrum-icon-chevron-down-medium-height)) / 2); + margin-bottom: calc(calc(var(--spectrum-dropdown-height) - calc(var(--spectrum-dropdown-border-size) * 2) - var(--spectrum-icon-chevron-down-medium-height)) / 2); + + opacity: 1; +} + +/* Error icons */ +.spectrum-Dropdown-trigger { + .spectrum-Dropdown-invalidIcon { + /* Fix Safari 10 bug where align-items is ignored inside of buttons */ + margin-block-start: calc(calc(var(--spectrum-dropdown-height) - calc(var(--spectrum-dropdown-border-size) * 2) - var(--spectrum-dropdown-icon-size)) / 2); + margin-block-end: calc(calc(var(--spectrum-dropdown-height) - calc(var(--spectrum-dropdown-border-size) * 2) - var(--spectrum-dropdown-icon-size)) / 2); + } + + .spectrum-Dropdown-label + .spectrum-Dropdown-invalidIcon { + margin-inline-start: var(--spectrum-dropdown-icon-margin-left); + } +} + +.spectrum-Dropdown-trigger { + .spectrum-Dropdown-progressCircle { + margin-inline-start: var(--spectrum-dropdown-icon-margin-left); + } +} + +.spectrum-Icon + .spectrum-Dropdown-chevron { + margin-inline-start: var(--spectrum-dropdown-icon-gap); +} + +.spectrum-Dropdown--quiet { + inline-size: auto; + min-inline-size: var(--spectrum-dropdown-quiet-min-width); + + .spectrum-Dropdown-trigger { + contain: none; + } +} + +.spectrum-Dropdown-popover--quiet { + inline-size: var(--spectrum-dropdown-width); + + /* Define this var so it can be read from JS */ + --spectrum-dropdown-quiet-offset: calc(var(--spectrum-dropdown-quiet-popover-offset-x) + var(--spectrum-popover-border-size)); + margin-inline-start: calc(var(--spectrum-dropdown-quiet-offset) * -1); +} + +/* When used with a label or inside a Form, we need to override some things from .spectrum-Field + * so quiet dropdowns still collapse properly. */ +.spectrum-Field.spectrum-Dropdown-fieldWrapper--quiet { + display: inline-flex; + flex-direction: column; + inline-size: auto; + + .spectrum-Dropdown--quiet { + inline-size: auto; + min-inline-size: var(--spectrum-dropdown-quiet-min-width); + + .spectrum-Dropdown-trigger { + inline-size: auto; + } + } + + &.spectrum-Dropdown-fieldWrapper--positionSide { + flex-direction: row; + } +} diff --git a/spectrum-css-temp/components/dropdown/skin.css b/spectrum-css-temp/components/dropdown/skin.css new file mode 100644 index 00000000000..b8946bc8f71 --- /dev/null +++ b/spectrum-css-temp/components/dropdown/skin.css @@ -0,0 +1,98 @@ +/* +Copyright 2019 Adobe. All rights reserved. +This file is licensed to you under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. You may obtain a copy +of the License at http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under +the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS +OF ANY KIND, either express or implied. See the License for the specific language +governing permissions and limitations under the License. +*/ + +.spectrum-Dropdown { + /* Override to gray-800 to meet WCAG */ + --spectrum-dropdown-placeholder-text-color: var(--spectrum-global-color-gray-800); + + + .spectrum-Dropdown-trigger { + &.is-selected { + .is-placeholder { + color: var(--spectrum-dropdown-placeholder-text-color-down); + } + } + } + + &.is-invalid { + /* override all states (e.g. active) */ + .spectrum-Dropdown-invalidIcon.spectrum-Dropdown-invalidIcon { + fill: var(--spectrum-dropdown-validation-icon-color-error); + } + + &.is-disabled { + .spectrum-Icon, + .spectrum-Dropdown-invalidIcon { + fill: var(--spectrum-dropdown-icon-color-disabled); + } + } + } + + &.is-disabled { + &:active .spectrum-Dropdown-label { + color: var(--spectrum-dropdown-text-color-disabled); + } + .spectrum-Dropdown-label { + &.is-placeholder { + color: var(--spectrum-dropdown-placeholder-text-color-disabled); + } + } + } +} + +.spectrum-Dropdown-label { + &.is-placeholder { + color: var(--spectrum-dropdown-placeholder-text-color); + } +} + +.spectrum-Dropdown-trigger { + &:hover .spectrum-Dropdown-label { + color: var(--spectrum-dropdown-placeholder-text-color-hover); + } + + &:active .spectrum-Dropdown-label { + color: var(--spectrum-dropdown-placeholder-text-color-mouse-focus); + } +} + +.spectrum-Dropdown-trigger.focus-ring { + .spectrum-Dropdown-label.is-placeholder { + color: var(--spectrum-dropdown-placeholder-text-color-key-focus); + } +} + +@media (forced-colors: active) { + .spectrum-Dropdown { + --spectrum-dropdown-icon-color: ButtonText; + --spectrum-dropdown-icon-color-disabled: GrayText; + --spectrum-dropdown-icon-color-hover: ButtonText; + --spectrum-dropdown-icon-color-key-focus: ButtonText; + --spectrum-dropdown-placeholder-text-color: GrayText; + --spectrum-dropdown-placeholder-text-color-disabled: GrayText; + --spectrum-dropdown-placeholder-text-color-down: GrayText; + --spectrum-dropdown-placeholder-text-color-hover: GrayText; + --spectrum-dropdown-placeholder-text-color-key-focus: GrayText; + --spectrum-dropdown-placeholder-text-color-mouse-focus: GrayText; + --spectrum-dropdown-text-color-disabled: GrayText; + --spectrum-dropdown-validation-icon-color-error: ButtonText; + } + /*Override the label behaviour when NOT a placeholder*/ + .spectrum-Dropdown-trigger { + &:hover .spectrum-Dropdown-label { + color: ButtonText; + &.is-placeholder { + color: GrayText; + } + } + } +} diff --git a/spectrum-css-temp/components/dropdown/vars.css b/spectrum-css-temp/components/dropdown/vars.css new file mode 100644 index 00000000000..ca1e08522d8 --- /dev/null +++ b/spectrum-css-temp/components/dropdown/vars.css @@ -0,0 +1,14 @@ +/* + * Copyright 2020 Adobe. All rights reserved. + * This file is licensed to you under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. You may obtain a copy + * of the License at http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS + * OF ANY KIND, either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + */ + +@import './index.css'; +@import './skin.css'; diff --git a/spectrum-css-temp/components/dropindicator/index.css b/spectrum-css-temp/components/dropindicator/index.css new file mode 100644 index 00000000000..a109f0aae31 --- /dev/null +++ b/spectrum-css-temp/components/dropindicator/index.css @@ -0,0 +1,62 @@ +/* +Copyright 2019 Adobe. All rights reserved. +This file is licensed to you under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. You may obtain a copy +of the License at http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under +the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS +OF ANY KIND, either express or implied. See the License for the specific language +governing permissions and limitations under the License. +*/ + +.spectrum-DropIndicator { + position: relative; + + &:before, + &:after { + content: ''; + position: absolute; + width: var(--spectrum-dropindicator-circle-size); + height: var(--spectrum-dropindicator-circle-size); + border-radius: 50%; + border: var(--spectrum-dropindicator-border-size) solid; + box-sizing: border-box; + } +} + +.spectrum-DropIndicator--horizontal { + height: var(--spectrum-dropindicator-border-size); + margin: 0 var(--spectrum-dropindicator-circle-size); + + &:before, + &:after { + top: calc(var(--spectrum-dropindicator-circle-size) * -1 / 2 + var(--spectrum-dropindicator-border-size) / 2); + } + + &:before { + left: calc(var(--spectrum-dropindicator-circle-size) * -1); + } + + &:after { + right: calc(var(--spectrum-dropindicator-circle-size) * -1); + } +} + +.spectrum-DropIndicator--vertical { + width: var(--spectrum-dropindicator-border-size); + margin: var(--spectrum-dropindicator-circle-size) 0; + + &:before, + &:after { + left: calc(var(--spectrum-dropindicator-circle-size) * -1 / 2 + var(--spectrum-dropindicator-border-size) / 2); + } + + &:before { + top: calc(var(--spectrum-dropindicator-circle-size) * -1); + } + + &:after { + bottom: calc(var(--spectrum-dropindicator-circle-size) * -1); + } +} diff --git a/spectrum-css-temp/components/dropindicator/skin.css b/spectrum-css-temp/components/dropindicator/skin.css new file mode 100644 index 00000000000..870008e33fc --- /dev/null +++ b/spectrum-css-temp/components/dropindicator/skin.css @@ -0,0 +1,28 @@ +/* +Copyright 2019 Adobe. All rights reserved. +This file is licensed to you under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. You may obtain a copy +of the License at http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under +the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS +OF ANY KIND, either express or implied. See the License for the specific language +governing permissions and limitations under the License. +*/ + +.spectrum-DropIndicator { + background: var(--spectrum-dropindicator-border-color); + + &:before, + &:after { + border-color: var(--spectrum-dropindicator-circle-border-color); + } +} + +@media (forced-colors: active) { + .spectrum-DropIndicator { + --spectrum-dropindicator-border-color: Highlight; + --spectrum-dropindicator-circle-border-color: Highlight; + forced-color-adjust: none; + } +} diff --git a/spectrum-css-temp/components/dropindicator/vars.css b/spectrum-css-temp/components/dropindicator/vars.css new file mode 100644 index 00000000000..ca1e08522d8 --- /dev/null +++ b/spectrum-css-temp/components/dropindicator/vars.css @@ -0,0 +1,14 @@ +/* + * Copyright 2020 Adobe. All rights reserved. + * This file is licensed to you under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. You may obtain a copy + * of the License at http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS + * OF ANY KIND, either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + */ + +@import './index.css'; +@import './skin.css'; diff --git a/spectrum-css-temp/components/dropzone/index.css b/spectrum-css-temp/components/dropzone/index.css new file mode 100644 index 00000000000..8f820e20d40 --- /dev/null +++ b/spectrum-css-temp/components/dropzone/index.css @@ -0,0 +1,88 @@ +/* +Copyright 2023 Adobe. All rights reserved. +This file is licensed to you under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. You may obtain a copy +of the License at http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under +the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS +OF ANY KIND, either express or implied. See the License for the specific language +governing permissions and limitations under the License. +*/ + +@import '../commons/index.css'; + +:root { + --spectrum-dropzone-padding-x: var(--spectrum-global-dimension-size-150); + --spectrum-dropzone-padding-y: var(--spectrum-global-dimension-size-115); + --spectrum-dropzone-banner-text-color: var(--spectrum-gray-50); + --spectrum-dropzone-banner-background-color: var(--spectrum-global-color-blue-500); + --spectrum-dropzone-banner-border-color: var(--spectrum-dropzone-banner-background-color); +} + +.spectrum-Dropzone { + position: relative; + text-align: center; + border-width: var(--spectrum-dropzone-border-width); + border-radius: var(--spectrum-dropzone-border-radius); + padding: var(--spectrum-dropzone-padding); + border-style: dashed; + + .spectrum-Dropzone-backdrop { + display: none; + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + } + + &:focus { + outline: 0; + border-style: dashed; + &.focus-ring { + border-style: solid; + } + } + + &[data-drop-target].spectrum-Dropzone--filled { + .spectrum-Dropzone-banner { + display: block; + } + } + + &[data-drop-target] { + .spectrum-Dropzone-backdrop { + display: block; + } + } +} + +.spectrum-Dropzone-banner { + display: none; + position: absolute; + color: var(--spectrum-dropzone-banner-text-color); + background-color: var(--spectrum-dropzone-banner-background-color); + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + padding: var(--spectrum-dropzone-padding-y) var(--spectrum-dropzone-padding-x); + border-radius: var(--spectrum-dropzone-border-radius); + border: 1px solid var(--spectrum-dropzone-banner-border-color); +} + +@media (forced-colors: active) { + .spectrum-Dropzone { + &[data-drop-target] { + .spectrum-Dropzone-backdrop { + display: none; + } + } + &[data-drop-target].spectrum-Dropzone--filled { + .spectrum-Dropzone-backdrop { + display: block; + } + } + } +} diff --git a/spectrum-css-temp/components/dropzone/skin.css b/spectrum-css-temp/components/dropzone/skin.css new file mode 100644 index 00000000000..85a840e23b5 --- /dev/null +++ b/spectrum-css-temp/components/dropzone/skin.css @@ -0,0 +1,55 @@ +/* +Copyright 2019 Adobe. All rights reserved. +This file is licensed to you under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. You may obtain a copy +of the License at http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under +the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS +OF ANY KIND, either express or implied. See the License for the specific language +governing permissions and limitations under the License. +*/ + +.spectrum-Dropzone { + --spectrum-dropzone-illustratedmessage-illustration-color-key-focus: var(--spectrum-global-color-blue-500); +} + +.spectrum-Dropzone { + border-color: var(--spectrum-dropzone-border-color); + + &[data-focus-visible]{ + border-color: var(--spectrum-dropzone-border-color-selected-hover); + } + + &[data-drop-target] { + border-style: solid; + border-color: var(--spectrum-dropzone-border-color-selected-hover); + background-color: var(--spectrum-dropzone-background-color-selected-hover); + + .spectrum-Dropzone-illustratedMessage { + svg { + color: var(--spectrum-dropzone-illustratedmessage-illustration-color-key-focus); + } + } + + &.focus-ring { + border-color: var(--spectrum-dropzone-border-color-selected-hover); + } + } + + &[data-drop-target] { + .spectrum-Dropzone-backdrop { + background-color: var(--spectrum-dropzone-background-color-selected-hover); + } + } +} + +@media (forced-colors: active) { + .spectrum-Dropzone { + --spectrum-dropzone-border-color: CanvasText; + --spectrum-dropzone-border-color-selected-hover: Highlight; + --spectrum-dropzone-background-color-selected-hover: Canvas; + --spectrum-dropzone-banner-border-color: CanvasText; + --spectrum-dropzone-illustratedmessage-illustration-color-key-focus: Highlight; + } +} diff --git a/spectrum-css-temp/components/dropzone/vars.css b/spectrum-css-temp/components/dropzone/vars.css new file mode 100644 index 00000000000..ca1e08522d8 --- /dev/null +++ b/spectrum-css-temp/components/dropzone/vars.css @@ -0,0 +1,14 @@ +/* + * Copyright 2020 Adobe. All rights reserved. + * This file is licensed to you under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. You may obtain a copy + * of the License at http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS + * OF ANY KIND, either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + */ + +@import './index.css'; +@import './skin.css'; diff --git a/spectrum-css-temp/components/fieldgroup/index.css b/spectrum-css-temp/components/fieldgroup/index.css new file mode 100644 index 00000000000..297eff8fdaf --- /dev/null +++ b/spectrum-css-temp/components/fieldgroup/index.css @@ -0,0 +1,30 @@ +/* +Copyright 2019 Adobe. All rights reserved. +This file is licensed to you under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. You may obtain a copy +of the License at http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under +the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS +OF ANY KIND, either express or implied. See the License for the specific language +governing permissions and limitations under the License. +*/ + +@import '../commons/index.css'; + +/* override .spectrum-Field */ +.spectrum-FieldGroup.spectrum-FieldGroup { + width: auto; + --spectrum-field-default-width: auto; +} + +.spectrum-FieldGroup-group { + display: flex; + flex-direction: column; +} + +.spectrum-FieldGroup-group--horizontal { + /* horizontal radio groups should wrap if there isn't enough space */ + flex-direction: row; + flex-wrap: wrap; +} diff --git a/spectrum-css-temp/components/fieldgroup/vars.css b/spectrum-css-temp/components/fieldgroup/vars.css new file mode 100644 index 00000000000..3df0b027c58 --- /dev/null +++ b/spectrum-css-temp/components/fieldgroup/vars.css @@ -0,0 +1,13 @@ +/* + * Copyright 2020 Adobe. All rights reserved. + * This file is licensed to you under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. You may obtain a copy + * of the License at http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS + * OF ANY KIND, either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + */ + +@import './index.css'; diff --git a/spectrum-css-temp/components/fieldlabel/index.css b/spectrum-css-temp/components/fieldlabel/index.css new file mode 100644 index 00000000000..7e457744887 --- /dev/null +++ b/spectrum-css-temp/components/fieldlabel/index.css @@ -0,0 +1,248 @@ +/* +Copyright 2019 Adobe. All rights reserved. +This file is licensed to you under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. You may obtain a copy +of the License at http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under +the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS +OF ANY KIND, either express or implied. See the License for the specific language +governing permissions and limitations under the License. +*/ + +@import '../commons/index.css'; + +:root { + --spectrum-tableform-border-spacing: 0 var(--spectrum-global-dimension-size-300); + --spectrum-tableform-margin: calc(var(--spectrum-global-dimension-size-250) * -1) 0; + --spectrum-fieldlabel-margin: var(--spectrum-global-dimension-size-100); +} + +.spectrum-FieldLabel { + display: flex; + flex: 0 0 auto; + + box-sizing: border-box; + + padding: var(--spectrum-fieldlabel-padding-top) 0 var(--spectrum-fieldlabel-padding-bottom); + + font-size: var(--spectrum-fieldlabel-text-size); + font-weight: var(--spectrum-fieldlabel-text-font-weight); + line-height: var(--spectrum-fieldlabel-text-line-height); + + vertical-align: top; + + -webkit-font-smoothing: subpixel-antialiased; + -moz-osx-font-smoothing: auto; + font-smoothing: subpixel-antialiased; + text-align: start; + + cursor: default; /* match native labels even if not using a