mirror of
https://github.com/enso-org/enso.git
synced 2024-11-30 14:14:12 +03:00
2ec7817068
- Implement https://github.com/enso-org/cloud-v2/issues/924 - Refactor all numbers out to CSS variables - Implement some issues raised in the design meeting - The columns selector now only contains *hidden* columns, rather than all of them. - Unified opacity for active (100%), selectable and hovered (75%), selectable (50%) and disabled (30%) - Easily configurable if we want to change it in the future, so the specific values don't matter too much for now. - Always show asset right panel if it is enabled - display placeholder text if <1 or >1 asset is selected - Hide docs icon that was in the top right assets menubar (next to the gear icon for asset settings) (as backend functionality has yet to be implemented) - Clicking a user in the "Shared with" column now adds them to the search as `owner:<username>` - Add a gap between adjacent rows. This makes each row more visually distinct when many rows are selected - Center the left column (the first column) of the context menu below the mouse, rather than centering the entire context menu. - Fix regressions caused by CSS refactor - Make keyboard selection indicator for asset rows rounded again - Other misc. fixes and improvements - Slightly modified styling of chat reaction bar - Hide the row containing the "New Project" button in the cloud drive, when not in the "Home" drive tab - Animate rotation of column sort arrow when clicking on a column to change the sort order - Consistent duration of arrow rotation animation for folder arrows, column sort arrows, chat thread list arrows - Consistent icon for sort arrow for folders and the chat thread list - Minor adjustment of styles for optional properties in the Data Link input Not included in this PR: - Custom (HTML) scrollbars for consistency across all browsers and all OSes (except perhaps touchscreens) - Potentially time-consuming to look for a library (and not quite trivial to implement ourselves) - Columns sliding left as they expand and right as they collapse - Also non-trivial, especially when taking into account horizontal scrolling. - Fixing styles to closer resemble Figma design - As (kinda) mentioned in the meeting - ideally it should be pixel perfect, *but* value consistency with other spacings, opacities etc. over being 100% pixel-perfect - However, it has *partly* been done - mostly for the home page. It's entirely possible that changes made afterwards broke the spacing again though. # Important Notes None
543 lines
24 KiB
JavaScript
543 lines
24 KiB
JavaScript
/** @file Configuration for Tailwind. */
|
|
import plugin from 'tailwindcss/plugin.js'
|
|
|
|
// The names come from a third-party API and cannot be changed.
|
|
/* eslint-disable no-restricted-syntax, @typescript-eslint/naming-convention, @typescript-eslint/no-magic-numbers */
|
|
export default /** @satisfies {import('tailwindcss').Config} */ ({
|
|
content: ['./src/**/*.tsx', './src/**/*.ts'],
|
|
important: `:is(.enso-dashboard, .enso-chat)`,
|
|
theme: {
|
|
extend: {
|
|
colors: {
|
|
// While these COULD ideally be defined as CSS variables, then their opacity cannot be
|
|
// modified.
|
|
/** The default color of all text. */
|
|
// This should be named "regular".
|
|
primary: 'rgb(0 0 0 / 60%)',
|
|
'hover-bg': 'rgb(0 0 0 / 10%)',
|
|
frame: 'var(--frame-color)',
|
|
'selected-frame': 'var(--selected-frame-color)',
|
|
'not-selected': 'rgb(0 0 0 / 40%)',
|
|
'icon-selected': 'rgb(0 0 0 / 50%)',
|
|
'icon-not-selected': 'rgb(0 0 0 / 30%)',
|
|
'ide-bg': '#ebeef1',
|
|
selected: 'rgb(255 255 255 / 40%)',
|
|
// Should be `#3e515f14`, but `bg-opacity` does not work with RGBA.
|
|
label: '#f0f1f3',
|
|
help: '#3f68ce',
|
|
invite: '#0e81d4',
|
|
cloud: '#0666be',
|
|
share: '#64b526',
|
|
inversed: '#ffffff',
|
|
green: '#3e8b29',
|
|
delete: 'rgba(243 24 10 / 87%)',
|
|
v3: '#252423',
|
|
youtube: '#c62421',
|
|
discord: '#404796',
|
|
danger: '#d33b0b',
|
|
// Equivalent to `lch(70% 0 0 / 0.5)`
|
|
'selection-brush': 'var(--selection-brush-color)',
|
|
dim: 'rgba(0, 0, 0, 0.25)',
|
|
'dim-darker': 'rgba(0, 0, 0, 0.40)',
|
|
'tag-text': 'rgba(255, 255, 255, 0.90)',
|
|
'tag-text-2': 'rgba(0, 0, 0, 0.60)',
|
|
'permission-owner': 'rgba(236, 2, 2, 0.70)',
|
|
'permission-admin': 'rgba(252, 60, 0, 0.70)',
|
|
'permission-edit': 'rgba(255, 138, 0, 0.90)',
|
|
'permission-read': 'rgba(152, 174, 18, 0.80)',
|
|
'permission-docs': 'rgba(91, 8, 226, 0.64)',
|
|
'permission-exec': 'rgba(236, 2, 2, 0.70)',
|
|
'permission-view': 'rgba(0, 0, 0, 0.10)',
|
|
'label-running-project': '#257fd2',
|
|
'label-low-resources': '#ff6b18',
|
|
'call-to-action': '#fa6c08',
|
|
'black-a5': 'rgba(0, 0, 0, 0.05)',
|
|
'black-a10': 'rgba(0, 0, 0, 0.10)',
|
|
'black-a16': 'rgba(0, 0, 0, 0.16)',
|
|
'black-a30': 'rgba(0, 0, 0, 0.30)',
|
|
'black-a50': 'rgba(0, 0, 0, 0.50)',
|
|
'gray-350': '#b7bcc5',
|
|
},
|
|
fontSize: {
|
|
xs: '0.71875rem',
|
|
sm: '0.8125rem',
|
|
xl: '1.1875rem',
|
|
'4xl': '2.375rem',
|
|
'auth-heading': 'var(--auth-heading-font-size)',
|
|
},
|
|
borderRadius: {
|
|
'2.5xl': '1.25rem',
|
|
'4xl': '2rem',
|
|
default: 'var(--default-corner-radius)',
|
|
auth: 'var(--auth-corner-radius)',
|
|
input: 'var(--input-corner-radius)',
|
|
'permission-type-selector': 'var(--permission-type-selector-corner-radius)',
|
|
'menu-entry': 'var(--menu-entry-corner-radius)',
|
|
'selection-brush': 'var(--selection-brush-corner-radius)',
|
|
'chat-input': 'var(--chat-input-corner-radius)',
|
|
},
|
|
spacing: {
|
|
DEFAULT: '0',
|
|
icon: 'var(--icon-size)',
|
|
'project-icon': 'var(--project-icon-size)',
|
|
'profile-picture': 'var(--profile-picture-size)',
|
|
'profile-picture-large': 'var(--profile-picture-large-size)',
|
|
'radio-button': 'var(--radio-button-size)',
|
|
'radio-button-dot': 'var(--radio-button-dot-size)',
|
|
'extended-editor-menu': 'var(--extended-editor-menu-size)',
|
|
'plus-icon': 'var(--plus-icon-size)',
|
|
'chat-profile-picture': 'var(--chat-profile-picture-size)',
|
|
'selection-brush-border': 'var(--selection-brush-border-width)',
|
|
'row-h': 'var(--row-height)',
|
|
'top-bar-margin': 'var(--top-bar-margin)',
|
|
'indent-1': 'var(--indent-1-size)',
|
|
'indent-2': 'var(--indent-2-size)',
|
|
'indent-3': 'var(--indent-3-size)',
|
|
'indent-4': 'var(--indent-4-size)',
|
|
'indent-5': 'var(--indent-5-size)',
|
|
'indent-6': 'var(--indent-6-size)',
|
|
'indent-7': 'var(--indent-7-size)',
|
|
'indent-8': 'var(--indent-8-size)',
|
|
'indent-9': 'var(--indent-9-size)',
|
|
'indent-10': 'var(--indent-10-size)',
|
|
},
|
|
width: {
|
|
container: '100cqw',
|
|
'profile-picture-caption': 'var(--profile-picture-caption-width)',
|
|
'settings-main-section': 'var(--settings-main-section-width)',
|
|
'user-account-settings-label': 'var(--user-account-settings-label-width)',
|
|
'change-password-settings-label': 'var(--change-password-settings-label-width)',
|
|
'organization-settings-label': 'var(--organization-settings-label-width)',
|
|
'backend-switcher-option': 'var(--backend-switcher-option-width)',
|
|
'side-panel': 'var(--side-panel-width)',
|
|
'context-menu': 'var(--context-menu-width)',
|
|
'context-menu-macos': 'var(--context-menu-macos-width)',
|
|
'json-schema-text-input': 'var(--json-schema-text-input-width)',
|
|
'json-schema-object-key': 'var(--json-schema-object-key-width)',
|
|
'json-schema-dropdown-title': 'var(--json-schema-dropdown-title-width)',
|
|
'asset-search-bar': 'var(--asset-search-bar-width)',
|
|
'asset-search-bar-wide': 'var(--asset-search-bar-wide-width)',
|
|
'permission-display': 'var(--permission-display-width)',
|
|
chat: 'var(--chat-width)',
|
|
'chat-indicator': 'var(--chat-indicator-width)',
|
|
'user-menu': 'var(--user-menu-width)',
|
|
'modal-label': 'var(--modal-label-width)',
|
|
'settings-sidebar': 'var(--settings-sidebar-width)',
|
|
'asset-panel': 'var(--asset-panel-width)',
|
|
'permission-type-selector': 'var(--permission-type-selector-width)',
|
|
'drive-sidebar': 'var(--drive-sidebar-width)',
|
|
'permission-type': 'var(--permission-type-width)',
|
|
'auth-icon-container': 'var(--auth-icon-container-width)',
|
|
'side-panel-label': 'var(--side-panel-label-width)',
|
|
|
|
'manage-labels-modal': 'var(--manage-labels-modal-width)',
|
|
'confirm-delete-modal': 'var(--confirm-delete-modal-width)',
|
|
'confirm-delete-user-modal': 'var(--confirm-delete-user-modal-width)',
|
|
'duplicate-assets-modal': 'var(--duplicate-assets-modal-width)',
|
|
'capture-keyboard-shortcut-modal': 'var(--capture-keyboard-shortcut-modal-width)',
|
|
'new-label-modal': 'var(--new-label-modal-width)',
|
|
'invite-users-modal': 'var(--invite-users-modal-width)',
|
|
'manage-permissions-modal': 'var(--manage-permissions-modal-width)',
|
|
'upsert-data-link-modal': 'var(--upsert-data-link-modal-width)',
|
|
'upsert-secret-modal': 'var(--upsert-secret-modal-width)',
|
|
|
|
'members-name-column': 'var(--members-name-column-width)',
|
|
'members-email-column': 'var(--members-email-column-width)',
|
|
'keyboard-shortcuts-icon-column': 'var(--keyboard-shortcuts-icon-column-width)',
|
|
'keyboard-shortcuts-name-column': 'var(--keyboard-shortcuts-name-column-width)',
|
|
'drive-name-column': 'var(--drive-name-column-width)',
|
|
'drive-modified-column': 'var(--drive-modified-column-width)',
|
|
'drive-shared-with-column': 'var(--drive-shared-with-column-width)',
|
|
'drive-labels-column': 'var(--drive-labels-column-width)',
|
|
'drive-accessed-by-projects-column': 'var(--drive-accessed-by-projects-column-width)',
|
|
'drive-accessed-data-column': 'var(--drive-accessed-data-column-width)',
|
|
'drive-docs-column': 'var(--drive-docs-column-width)',
|
|
},
|
|
minWidth: ({ theme }) => ({ .../** @type {{}}*/ (theme('width')) }),
|
|
maxWidth: ({ theme }) => ({ .../** @type {{}}*/ (theme('width')) }),
|
|
height: {
|
|
row: 'var(--row-height)',
|
|
text: 'var(--text-height)',
|
|
heading: 'var(--heading-height)',
|
|
'news-item': 'var(--news-item-height)',
|
|
sample: 'var(--sample-height)',
|
|
'sample-image': 'var(--sample-image-height)',
|
|
'sample-info': 'var(--sample-info-height)',
|
|
'side-panel-heading': 'var(--side-panel-heading-height)',
|
|
'chat-thread-list': 'var(--chat-thread-list-height)',
|
|
'payment-form': 'var(--payment-form-height)',
|
|
'drive-table-heading': 'var(--drive-table-heading-height)',
|
|
'paragraph-input': 'var(--paragraph-input-height)',
|
|
'autocomplete-suggestions': 'var(--autocomplete-suggestions-height)',
|
|
'dropdown-items': 'var(--dropdown-items-height)',
|
|
'manage-permissions-modal-permissions-list':
|
|
'var(--manage-permissions-modal-permissions-list-height)',
|
|
'manage-labels-list': 'var(--manage-labels-list-height)',
|
|
'search-suggestions-list': 'var(--search-suggestions-list-height)',
|
|
},
|
|
minHeight: ({ theme }) => ({ .../** @type {{}}*/ (theme('height')) }),
|
|
maxHeight: ({ theme }) => ({ .../** @type {{}}*/ (theme('height')) }),
|
|
opacity: {
|
|
full: '100%',
|
|
unimportant: 'var(--unimportant-opacity)',
|
|
},
|
|
gap: {
|
|
modal: 'var(--modal-gap)',
|
|
subheading: 'var(--subheading-gap)',
|
|
buttons: 'var(--buttons-gap)',
|
|
icons: 'var(--icons-gap)',
|
|
colors: 'var(--colors-gap)',
|
|
'samples-icon-with-text': 'var(--samples-icon-with-text-gap)',
|
|
'icon-with-text': 'var(--icon-with-text-gap)',
|
|
'input-with-button': 'var(--input-with-button-gap)',
|
|
'user-bar': 'var(--user-bar-gap)',
|
|
'top-level': 'var(--top-level-gap)',
|
|
'top-bar': 'var(--top-bar-gap)',
|
|
'top-bar-right': 'var(--top-bar-right-gap)',
|
|
pages: 'var(--pages-gap)',
|
|
auth: 'var(--auth-gap)',
|
|
'auth-link': 'var(--auth-link-gap)',
|
|
'drive-sidebar': 'var(--drive-sidebar-gap)',
|
|
home: 'var(--home-gap)',
|
|
'drive-heading': 'var(--drive-heading-gap)',
|
|
drive: 'var(--drive-gap)',
|
|
'status-page': 'var(--status-page-gap)',
|
|
'menu-entry': 'var(--menu-entry-gap)',
|
|
'news-items': 'var(--news-items-gap)',
|
|
sample: 'var(--sample-gap)',
|
|
samples: 'var(--samples-gap)',
|
|
settings: 'var(--settings-gap)',
|
|
'settings-header': 'var(--settings-header-gap)',
|
|
'settings-section': 'var(--settings-section-gap)',
|
|
'settings-subsection': 'var(--settings-subsection-gap)',
|
|
'settings-section-header': 'var(--settings-section-header-gap)',
|
|
'settings-entry': 'var(--settings-entry-gap)',
|
|
'settings-sidebar': 'var(--settings-sidebar-gap)',
|
|
banner: 'var(--banner-gap)',
|
|
'new-empty-project': 'var(--new-empty-project-gap)',
|
|
modifiers: 'var(--modifiers-gap)',
|
|
'modifiers-macos': 'var(--modifiers-macos-gap)',
|
|
'side-panel': 'var(--side-panel-gap)',
|
|
'side-panel-section': 'var(--side-panel-section-gap)',
|
|
'json-schema': 'var(--json-schema-gap)',
|
|
'asset-search-bar': 'var(--asset-search-bar-gap)',
|
|
'drive-bar': 'var(--drive-bar-gap)',
|
|
'column-items': 'var(--column-items-gap)',
|
|
labels: 'var(--labels-gap)',
|
|
'label-icons': 'var(--label-icons-gap)',
|
|
'sidebar-section-heading': 'var(--sidebar-section-heading-gap)',
|
|
'user-menu': 'var(--user-menu-gap)',
|
|
'user-permission': 'var(--user-permission-gap)',
|
|
'name-column-icon': 'var(--name-column-icon-gap)',
|
|
'permission-type-button': 'var(--permission-type-button-gap)',
|
|
'modal-tabs': 'var(--modal-tabs-gap)',
|
|
'dropdown-arrow': 'var(--dropdown-arrow-gap)',
|
|
'context-menus': 'var(--context-menus-gap)',
|
|
'asset-panel': 'var(--asset-panel-gap)',
|
|
'search-suggestions': 'var(--search-suggestions-gap)',
|
|
'keyboard-shortcuts-button': 'var(--keyboard-shortcuts-button-gap)',
|
|
'chat-buttons': 'var(--chat-buttons-gap)',
|
|
},
|
|
padding: {
|
|
modal: 'var(--modal-padding)',
|
|
'modal-wide': 'var(--modal-wide-padding)',
|
|
auth: 'var(--auth-padding)',
|
|
'page-x': 'var(--page-padding-x)',
|
|
'heading-x': 'var(--heading-padding-x)',
|
|
'heading-y': 'var(--heading-padding-y)',
|
|
'auth-input-y': 'var(--auth-input-padding-y)',
|
|
'auth-input-r': 'var(--auth-input-padding-right)',
|
|
'drive-sidebar-y': 'var(--drive-sidebar-padding-y)',
|
|
'radio-button-dot': 'var(--radio-button-dot-padding)',
|
|
'chat-y': 'chat-padding-y',
|
|
'cell-x': 'var(--cell-padding-x)',
|
|
'button-x': 'var(--button-padding-x)',
|
|
'icons-x': 'var(--icons-padding-x)',
|
|
'drive-bar-y': 'var(--drive-bar-padding-y)',
|
|
'drive-bar-icons-x': 'var(--drive-bar-icons-padding-x)',
|
|
'selector-x': 'var(--selector-padding-x)',
|
|
'selector-y': 'var(--selector-padding-y)',
|
|
'menu-entry': 'var(--menu-entry-padding)',
|
|
'context-menu-entry-x': 'var(--context-menu-entry-padding-x)',
|
|
'context-menu-separator-y': 'var(--context-menu-separator-padding-y)',
|
|
'profile-picture': 'var(--profile-picture-padding)',
|
|
'banner-x': 'var(--banner-padding-x)',
|
|
'banner-y': 'var(--banner-padding-y)',
|
|
'banner-item': 'var(--banner-item-padding)',
|
|
'profile-picture-caption-y': 'var(--profile-picture-caption-padding-y)',
|
|
'delete-user-account-button-x': 'var(--delete-user-account-button-padding-x)',
|
|
'context-menu': 'var(--context-menu-padding)',
|
|
'input-x': 'var(--input-padding-x)',
|
|
'multiline-input': 'var(--multiline-input-padding)',
|
|
'json-schema-object-input': 'var(--json-schema-object-input-padding)',
|
|
'new-project-button-x': 'var(--new-project-button-padding-x)',
|
|
'name-column-x': 'var(--name-column-padding-x)',
|
|
'name-column-y': 'var(--name-column-padding-y)',
|
|
'home-page-b': 'var(--home-page-padding-b)',
|
|
version: 'var(--version-padding)',
|
|
'label-x': 'var(--label-padding-x)',
|
|
'sidebar-section-heading-x': 'var(--sidebar-section-heading-padding-x)',
|
|
'sidebar-section-heading-y': 'var(--sidebar-section-heading-padding-y)',
|
|
'user-menu': 'var(--user-menu-padding)',
|
|
'extra-columns-panel-x': 'var(--extra-columns-panel-padding-x)',
|
|
'extra-columns-panel-y': 'var(--extra-columns-panel-padding-y)',
|
|
'permission-type-selector': 'var(--permission-type-selector-padding)',
|
|
'permission-type-button': 'var(--permission-type-button-padding)',
|
|
'permission-type-y': 'var(--permission-type-padding-y)',
|
|
'permission-mini-button-x': 'var(--permission-mini-button-padding-x)',
|
|
'permission-mini-button-y': 'var(--permission-mini-button-padding-y)',
|
|
'modal-tab-bar-x': 'var(--modal-tab-bar-padding-x)',
|
|
'manage-permissions-modal-input': 'var(--manage-permissions-modal-input-padding)',
|
|
'modal-invite-button-text-y': 'var(--modal-invite-button-text-padding-y)',
|
|
'home-section-x': 'var(--home-section-padding-x)',
|
|
'sample-description-x': 'var(--sample-description-padding-x)',
|
|
'sample-description-t': 'var(--sample-description-padding-top)',
|
|
'sample-description-b': 'var(--sample-description-padding-bottom)',
|
|
'news-item-description': 'var(--news-item-description-padding)',
|
|
'news-item-subtitle-y': 'var(--news-item-subtitle-padding-y)',
|
|
'font-awesome-icon-x': 'var(--font-awesome-icon-padding-x)',
|
|
'page-switcher-x': 'var(--page-switcher-padding-x)',
|
|
'search-suggestions': 'var(--search-suggestions-padding)',
|
|
'search-suggestion-y': 'var(--search-suggestion-padding-y)',
|
|
'side-panel-heading-y': 'var(--side-panel-heading-padding-y)',
|
|
'keyboard-shortcuts-icon-column-r': 'var(--keyboard-shortcuts-icon-column-padding-right)',
|
|
'asset-panel-l': 'var(--asset-panel-padding-left)',
|
|
'auth-icon-container-w': 'var(--auth-icon-container-width)',
|
|
'side-panel-description-y': 'var(--side-panel-description-padding-y)',
|
|
'chat-thread-button': 'var(--chat-thread-button-padding)',
|
|
'chat-form': 'var(--chat-form-padding)',
|
|
'chat-input': 'var(--chat-input-padding)',
|
|
'chat-button-x': 'var(--chat-button-padding-x)',
|
|
'chat-button-y': 'var(--chat-button-padding-y)',
|
|
'chat-reaction-bar-y': 'var(--chat-reaction-bar-padding-y)',
|
|
'chat-reaction': 'var(--chat-reaction-padding)',
|
|
},
|
|
margin: {
|
|
'top-bar': 'var(--top-bar-margin)',
|
|
'name-column-icon': 'var(--name-column-icon-margin)',
|
|
'button-px': 'var(--button-padding-x)',
|
|
'permission-with-border': 'var(--permission-with-border-margin)',
|
|
'tick-cross-button': 'var(--tick-cross-button-margin)',
|
|
'search-suggestion': 'var(--search-suggestion-margin)',
|
|
'multiline-input-p': 'var(--multiline-input-padding)',
|
|
'close-icon': 'var(--close-icon-margin)',
|
|
'chat-header-x': 'var(--chat-header-margin-x)',
|
|
'chat-header-t': 'var(--chat-header-margin-top)',
|
|
'chat-form-x': 'var(--chat-form-margin-x)',
|
|
'chat-form-y': 'var(--chat-form-margin-y)',
|
|
'chat-message-x': 'var(--chat-message-margin-x)',
|
|
'chat-message-y': 'var(--chat-message-margin-y)',
|
|
'chat-profile-picture-y': 'var(--chat-profile-picture-margin-y)',
|
|
'chat-message-info-x': 'var(--chat-message-info-margin-x)',
|
|
'chat-reaction-bar-py': 'var(--chat-reaction-bar-padding-y)',
|
|
'chat-reaction-bar': 'var(--chat-reaction-bar-margin)',
|
|
'chat-reaction': 'var(--chat-reaction-margin)',
|
|
},
|
|
lineHeight: {
|
|
snug: 'var(--snug-line-height)',
|
|
cozy: 'var(--cozy-line-height)',
|
|
'chat-thread-title': 'var(--chat-thread-title-line-height)',
|
|
},
|
|
zIndex: {
|
|
1: '1',
|
|
3: '3',
|
|
},
|
|
backdropBlur: {
|
|
xs: '2px',
|
|
default: 'var(--default-backdrop-blur)',
|
|
},
|
|
borderWidth: {
|
|
'selection-brush': 'var(--selection-brush-border-width)',
|
|
},
|
|
boxShadow: {
|
|
soft: `0 0.5px 2.2px 0px #00000008, 0 1.2px 5.3px 0px #0000000b, \
|
|
0 2.3px 10px 0 #0000000e, 0 4px 18px 0 #00000011, 0 7.5px 33.4px 0 #00000014, \
|
|
0 18px 80px 0 #0000001c`,
|
|
},
|
|
animation: {
|
|
'spin-ease': 'spin cubic-bezier(0.67, 0.33, 0.33, 0.67) 1.5s infinite',
|
|
},
|
|
transitionProperty: {
|
|
width: 'width',
|
|
'min-width': 'min-width',
|
|
'stroke-dasharray': 'stroke-dasharray',
|
|
'grid-template-rows': 'grid-template-rows',
|
|
'border-margin': 'border, margin',
|
|
},
|
|
transitionDuration: {
|
|
DEFAULT: '100ms',
|
|
auth: 'var(--auth-transition-duration)',
|
|
'side-panel': 'var(--side-panel-transition-duration)',
|
|
arrow: 'var(--arrow-transition-duration)',
|
|
'user-menu': 'var(--user-menu-transition-duration)',
|
|
'spinner-fast': 'var(--spinner-fast-transition-duration)',
|
|
'spinner-medium': 'var(--spinner-medium-transition-duration)',
|
|
'spinner-slow': 'var(--spinner-slow-transition-duration)',
|
|
},
|
|
gridTemplateRows: {
|
|
'0fr': '0fr',
|
|
'1fr': '1fr',
|
|
},
|
|
gridTemplateColumns: {
|
|
'0fr': '0fr',
|
|
'1fr': '1fr',
|
|
'fill-news-items': 'repeat(auto-fill, minmax(var(--news-items-column-width), 1fr))',
|
|
'fill-samples': 'repeat(auto-fill, minmax(var(--samples-column-width), 1fr))',
|
|
},
|
|
translate: {
|
|
'context-menu-half-x': 'var(--context-menu-half-width)',
|
|
'context-menu-macos-half-x': 'var(--context-menu-macos-half-width)',
|
|
},
|
|
dashArray: {
|
|
5: '5-12',
|
|
75: '75-12',
|
|
100: '100-12',
|
|
},
|
|
},
|
|
},
|
|
plugins: [
|
|
plugin(({ addUtilities, matchUtilities, addComponents, theme }) => {
|
|
addUtilities(
|
|
{
|
|
'.container-size': {
|
|
containerType: 'size',
|
|
},
|
|
'.pointer-events-none-recursive': {
|
|
pointerEvents: 'none',
|
|
'*': { pointerEvents: 'none' },
|
|
},
|
|
'.clip-path-top': {
|
|
clipPath: 'polygon(0 0, 100% 0, 100% calc(50% - 1px), 0 calc(50% - 1px))',
|
|
},
|
|
'.clip-path-bottom': {
|
|
clipPath: `polygon(0 calc(50% + 1px), 100% calc(50% + 1px), 100% 100%, 0 100%)`,
|
|
},
|
|
'.clip-path-bottom-shadow': {
|
|
clipPath: `polygon(0 0, 100% 0, 100% calc(100% + 100vh), 0 calc(100% + 100vh))`,
|
|
},
|
|
'.scroll-hidden': {
|
|
MsOverflowStyle: 'none' /* Internet Explorer 10+ */,
|
|
scrollbarWidth: 'none' /* Firefox */,
|
|
'&::-webkit-scrollbar': {
|
|
display: 'none' /* Safari and Chrome */,
|
|
},
|
|
},
|
|
|
|
// === Classes affecting opacity ===
|
|
|
|
'.selectable': {
|
|
'@apply disabled:opacity-30 disabled:cursor-not-allowed opacity-50 hover:opacity-75 transition-all':
|
|
'',
|
|
},
|
|
'.active': {
|
|
'@apply opacity-100 disabled:opacity-100 hover:opacity-100 disabled:cursor-default': '',
|
|
},
|
|
'.placeholder': {
|
|
'@apply opacity-75': '',
|
|
},
|
|
'.read-only': {
|
|
'@apply opacity-75 cursor-not-allowed': '',
|
|
},
|
|
'.transparent': {
|
|
'@apply opacity-0': '',
|
|
},
|
|
|
|
// === Visbility classes ===
|
|
|
|
'.visibility-visible': {},
|
|
'.visibility-hidden': {
|
|
'@apply hidden': '',
|
|
},
|
|
'.visibility-faded': {
|
|
'@apply opacity-50 pointer-events-none-recursive': '',
|
|
},
|
|
|
|
// === Rounded rows ===
|
|
|
|
'.rounded-rows': {
|
|
[`:where(
|
|
& > tbody > tr:nth-child(odd) > td:not(.rounded-rows-skip-level),
|
|
& > tbody > tr:nth-child(odd) > td.rounded-rows-skip-level > *
|
|
)`]: {
|
|
backgroundColor: `rgba(0 0 0 / 3%)`,
|
|
},
|
|
[`:where(
|
|
& > tbody > tr.selected > td:not(.rounded-rows-skip-level),
|
|
& > tbody > tr.selected > td.rounded-rows-skip-level > *
|
|
)`]: {
|
|
backgroundColor: 'rgb(255, 255, 255, 40%)',
|
|
},
|
|
},
|
|
|
|
// === Custom column spans ===
|
|
|
|
'.col-span-2-news-item.col-span-2-news-item': {
|
|
'@media screen and (max-width: 40.5625rem)': {
|
|
gridColumn: 'span 1 / span 1',
|
|
},
|
|
},
|
|
},
|
|
{
|
|
respectPrefix: true,
|
|
respectImportant: true,
|
|
}
|
|
)
|
|
|
|
/** One revolution, in radians. */
|
|
const revolution = Math.PI * 2
|
|
matchUtilities(
|
|
{
|
|
// Values must be pre-computed, because FF does not support `calc()` in `stroke-dasharray`.
|
|
// calc(12 * 0.05 * 6.2832) calc(12 * 6.2832)
|
|
dasharray: value => {
|
|
const [percentage = 0, radius = 0] = value.split('-').map(part => Number(part) || 0)
|
|
return {
|
|
strokeDasharray: `${radius * (percentage / 100) * revolution} ${
|
|
percentage === 1 ? 0 : radius * revolution
|
|
}`,
|
|
}
|
|
},
|
|
},
|
|
{
|
|
respectPrefix: true,
|
|
respectImportant: true,
|
|
values: theme('dashArray', {}),
|
|
}
|
|
)
|
|
|
|
addComponents(
|
|
{
|
|
'.button': {
|
|
'@apply inline-block rounded-full px-4 py-1 selectable': '',
|
|
},
|
|
'.icon-with-text': {
|
|
'@apply flex items-center justify-center gap-icon-with-text': '',
|
|
},
|
|
|
|
// === Text-related classes ===
|
|
|
|
'.text': {
|
|
'@apply leading-cozy h-text py-px': '',
|
|
},
|
|
'.text-header': {
|
|
'@apply leading-snug h-text py-0.5': '',
|
|
},
|
|
'.text-subheading': {
|
|
'@apply text-xl leading-snug py-0.5': '',
|
|
},
|
|
'.settings-subheading': {
|
|
'@apply font-bold text-xl h-[2.375rem] py-0.5': '',
|
|
},
|
|
'.settings-value': {
|
|
'@apply leading-cozy h-text py-px px-2': '',
|
|
},
|
|
},
|
|
{
|
|
respectPrefix: true,
|
|
respectImportant: true,
|
|
}
|
|
)
|
|
}),
|
|
],
|
|
})
|