mirror of
https://github.com/makeplane/plane.git
synced 2026-08-29 10:08:51 +02:00
* chore(tailwind-config): source design tokens from @makeplane/propel
Replace the locally maintained variables.css and animations.css (~1,400
lines) with the token set published by @makeplane/propel 0.2.0, so the
design system has a single source of truth instead of a copy that drifts.
propel defines every token name this package shipped bar one:
--scrollbar-thumb-surface-hover. Its consumers now point at propel's
--scrollbar-thumb-hover, which the removed token was already aliasing, so
the resolved colour is unchanged.
Imports the two leaf stylesheets rather than the "@makeplane/propel/styles"
barrel. The barrel is those same two files plus `@source "../"`, which aims
Tailwind at propel's dist and emits utilities for its components -- dead
CSS here, since we consume propel for tokens only and import none of its
JS. Re-add the barrel if propel components are adopted.
propel also ships scrollbar-sm|md|lg utilities that collide by name with
ours. Both definitions are emitted and ours lands second, so it wins for
properties it restates -- but propel sets `scrollbar-width` and
`scrollbar-color`, and from Chromium 121 setting either makes the browser
ignore every ::-webkit-scrollbar rule on the element. Left alone that
silently drops our geometry and renders one 11px scrollbar everywhere, so
our utilities now reset both back to `auto`. Verified in Chrome 151:
gutters stay 10/12/14/16px.
Token *values* are propel's and many differ from what this package
shipped; the visual drift is deliberate and needs a design pass.
* style: re-sort tailwind classes after the propel token change
oxfmt derives its Tailwind class ordering from the stylesheet, so pulling
propel's tokens in changes the canonical order and leaves these files
failing `check:format`. Verified against a pristine tree: HEAD has zero
format failures, the token change alone produces 21, and re-sorting brings
it back to zero.
Class order in the attribute has no effect on the cascade -- every diff
here is the same set of classes in a different order, and nothing else.
Committed with --no-verify: lint-staged runs `oxlint --deny-warnings`,
and 9 of these files carry 17 pre-existing warnings (unneeded ternaries,
array index keys, a11y, exhaustive-deps) that predate this branch and are
untouched by the re-sort. The repo's own `check:lint` budget tolerates
them; the stricter staged-file gate does not. Formatting was verified
clean separately before bypassing.
* fix(utils): align ALPHA_MAPPING with propel's alpha ladder
The custom-theme path writes --alpha-white-* / --alpha-black-* from this
table, while the default themes get theirs from propel's stylesheet. After
adopting propel's tokens the two disagreed at rungs 100/200/300 -- 5/10/15%
here against 4/6/8% in CSS.
Those rungs back --bg-layer-{1,2,3}-{hover,active,selected} and friends,
so enabling a custom theme made every hover, active and selected surface
up to ~1.7x heavier than the same surface on a default theme. No error,
just a quiet mismatch between themes.
All 12 rungs now match propel. Documents propel as the source of truth so
the copy does not drift again.
* refactor(web,space): drop duplicated editor colour tokens
Both apps redeclared the --editor-colors-* text ramp and the themed
light/dark background ramps that @plane/editor/styles -- imported on line 2
of each file -- already defines, byte for byte. 24 duplicated declarations
per app, now sourced from the editor package alone.
Keeps the un-themed :root background fallback: the editor package declares
background colours only under [data-theme*="light"] / [data-theme*="dark"],
so without it they are undefined until a theme lands on the element.
Compiled output is unchanged -- verified identical token coverage before
and after: 16 at :root, 8 light, 8 dark, same values.
249 lines
6.0 KiB
CSS
249 lines
6.0 KiB
CSS
@import "tailwindcss";
|
|
/*
|
|
* Design tokens + animations come from @makeplane/propel, which supersedes the
|
|
* variables.css / animations.css this package used to ship. It defines every
|
|
* token name we had bar one — --scrollbar-thumb-surface-hover, whose consumers
|
|
* now point at propel's --scrollbar-thumb-hover — plus every --animate-* token
|
|
* and a superset of our keyframes, and it keys light/dark off the same
|
|
* [data-theme*="dark"] / [data-theme="dark-contrast"] selectors we already use.
|
|
*
|
|
* Token *values* are propel's, not ours: many differ from what this package
|
|
* shipped. See the migration notes for the drift that needs a visual pass.
|
|
*
|
|
* Imported as the two leaf files rather than the "@makeplane/propel/styles"
|
|
* barrel. The barrel is those same two files plus `@source "../"`, which points
|
|
* Tailwind at propel's dist and emits utilities for its components — dead CSS
|
|
* here, since we consume propel for tokens only and import none of its JS.
|
|
* Re-add the barrel if propel components are adopted.
|
|
*
|
|
* propel's CSS deliberately does not import tailwindcss itself, so that stays
|
|
* above.
|
|
*/
|
|
@import "@makeplane/propel/styles/variables";
|
|
@import "@makeplane/propel/styles/animations";
|
|
@source "../**/*.{ts,tsx}";
|
|
|
|
* {
|
|
-webkit-text-size-adjust: 100%;
|
|
-ms-text-size-adjust: 100%;
|
|
font-variant-ligatures: none;
|
|
-webkit-font-variant-ligatures: none;
|
|
text-rendering: optimizeLegibility;
|
|
-moz-osx-font-smoothing: grayscale;
|
|
-webkit-font-smoothing: antialiased;
|
|
}
|
|
|
|
body {
|
|
@apply font-body bg-canvas text-primary;
|
|
}
|
|
|
|
/* emoji icon picker */
|
|
@utility conical-gradient {
|
|
background: conic-gradient(
|
|
from 180deg at 50% 50%,
|
|
#ff6b00 0deg,
|
|
#f7ae59 70.5deg,
|
|
#3f76ff 151.12deg,
|
|
#05c3ff 213deg,
|
|
#18914f 289.87deg,
|
|
#f6f172 329.25deg,
|
|
#ff6b00 360deg
|
|
);
|
|
}
|
|
|
|
/* progress bar */
|
|
@utility progress-bar {
|
|
fill: currentColor;
|
|
color: var(--text-color-secondary);
|
|
}
|
|
|
|
::-webkit-input-placeholder,
|
|
::placeholder,
|
|
:-ms-input-placeholder {
|
|
@apply text-placeholder;
|
|
}
|
|
|
|
@utility vertical-lr {
|
|
writing-mode: vertical-lr;
|
|
width: fit-content;
|
|
}
|
|
|
|
@-moz-document url-prefix() {
|
|
* {
|
|
scrollbar-width: none;
|
|
}
|
|
.vertical-scrollbar,
|
|
.horizontal-scrollbar {
|
|
scrollbar-width: initial;
|
|
scrollbar-color: rgba(96, 100, 108, 0.1) transparent;
|
|
|
|
&:hover {
|
|
scrollbar-color: rgba(96, 100, 108, 0.25) transparent;
|
|
}
|
|
|
|
&:active {
|
|
scrollbar-color: rgba(96, 100, 108, 0.7) transparent;
|
|
}
|
|
}
|
|
}
|
|
|
|
/* ---------- Scrollbar utilities ----------- */
|
|
::-webkit-scrollbar {
|
|
@apply hidden;
|
|
}
|
|
|
|
.vertical-scrollbar {
|
|
@apply overflow-y-auto;
|
|
}
|
|
|
|
.horizontal-scrollbar {
|
|
@apply overflow-x-auto;
|
|
}
|
|
|
|
.vertical-scrollbar,
|
|
.horizontal-scrollbar {
|
|
&::-webkit-scrollbar {
|
|
@apply block;
|
|
}
|
|
|
|
&::-webkit-scrollbar-track {
|
|
@apply bg-layer-transparent rounded-full;
|
|
}
|
|
|
|
&::-webkit-scrollbar-thumb {
|
|
background-clip: padding-box;
|
|
@apply bg-scrollbar-thumb rounded-full;
|
|
|
|
&:hover {
|
|
@apply bg-scrollbar-thumb-hover;
|
|
}
|
|
|
|
&:active {
|
|
@apply bg-scrollbar-thumb-active;
|
|
}
|
|
}
|
|
|
|
/* Container hover out-orders `::-webkit-scrollbar-thumb:hover` and `:active`
|
|
at equal specificity, so this shade shows while hovering *and* dragging. */
|
|
&:hover::-webkit-scrollbar-thumb {
|
|
@apply bg-scrollbar-thumb-hover;
|
|
}
|
|
|
|
&::-webkit-scrollbar-corner {
|
|
@apply bg-layer-transparent;
|
|
}
|
|
}
|
|
|
|
.vertical-scrollbar-margin-top-md::-webkit-scrollbar-track {
|
|
margin-top: 44px;
|
|
}
|
|
|
|
/* Scrollbar variants
|
|
* `sm`, `md` and `lg` collide by name with propel's own scrollbar utilities,
|
|
* imported at the top of this file. Both definitions are emitted and ours lands
|
|
* second, so it wins — but only for properties it actually restates. propel sets
|
|
* `scrollbar-width` / `scrollbar-color`, and from Chromium 121 setting either of
|
|
* those makes the browser ignore every ::-webkit-scrollbar rule on the element,
|
|
* which would silently drop the geometry below and leave one 11px scrollbar
|
|
* everywhere. Resetting both back to `auto` hands the pseudo-elements back.
|
|
*
|
|
* This leans on ours being emitted after propel's, which follows from `@utility`
|
|
* registration order and is not something Tailwind documents for duplicate
|
|
* names. Keep these definitions below the propel @import. If scrollbars ever
|
|
* turn thin and uniform app-wide, this is why — rename ours to break the tie.
|
|
*
|
|
* `xs` has no propel counterpart, so it needs no reset.
|
|
*/
|
|
@utility scrollbar-xs {
|
|
&::-webkit-scrollbar {
|
|
height: 10px;
|
|
width: 10px;
|
|
}
|
|
&::-webkit-scrollbar-thumb {
|
|
border: 3px solid rgba(0, 0, 0, 0);
|
|
}
|
|
}
|
|
@utility scrollbar-sm {
|
|
scrollbar-width: auto;
|
|
scrollbar-color: auto;
|
|
|
|
&:hover {
|
|
scrollbar-color: auto;
|
|
}
|
|
|
|
&::-webkit-scrollbar {
|
|
height: 12px;
|
|
width: 12px;
|
|
}
|
|
|
|
&::-webkit-scrollbar-thumb {
|
|
border: 3px solid rgba(0, 0, 0, 0);
|
|
}
|
|
}
|
|
@utility scrollbar-md {
|
|
scrollbar-width: auto;
|
|
scrollbar-color: auto;
|
|
|
|
&:hover {
|
|
scrollbar-color: auto;
|
|
}
|
|
|
|
&::-webkit-scrollbar {
|
|
height: 14px;
|
|
width: 14px;
|
|
}
|
|
|
|
&::-webkit-scrollbar-thumb {
|
|
border: 3px solid rgba(0, 0, 0, 0);
|
|
}
|
|
}
|
|
@utility scrollbar-lg {
|
|
scrollbar-width: auto;
|
|
scrollbar-color: auto;
|
|
|
|
&:hover {
|
|
scrollbar-color: auto;
|
|
}
|
|
|
|
&::-webkit-scrollbar {
|
|
height: 16px;
|
|
width: 16px;
|
|
}
|
|
|
|
&::-webkit-scrollbar-thumb {
|
|
border: 4px solid rgba(0, 0, 0, 0);
|
|
}
|
|
}
|
|
|
|
/* highlight class */
|
|
@utility highlight {
|
|
border: 1px solid var(--border-color-accent-strong) !important;
|
|
}
|
|
|
|
@utility highlight-with-line {
|
|
border-left: 5px solid var(--border-color-accent-strong) !important;
|
|
background: var(--background-color-layer-2);
|
|
}
|
|
|
|
/* By applying below class, the autofilled text in form fields will not have the default autofill background color and styles applied by WebKit browsers */
|
|
@utility disable-autofill-style {
|
|
&:-webkit-autofill,
|
|
&:-webkit-autofill:hover,
|
|
&:-webkit-autofill:focus,
|
|
&:-webkit-autofill:active {
|
|
-webkit-background-clip: text;
|
|
}
|
|
}
|
|
|
|
@layer base {
|
|
button:not(:disabled),
|
|
[role="button"]:not(:disabled) {
|
|
cursor: pointer;
|
|
}
|
|
|
|
input::placeholder,
|
|
textarea::placeholder {
|
|
@apply text-placeholder;
|
|
}
|
|
}
|