mirror of
https://github.com/makeplane/plane.git
synced 2026-08-29 10:08:51 +02:00
[WEB-8789] Adopt @makeplane/propel as the design token source (#9682)
* 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.
This commit is contained in:
committed by
GitHub
parent
1d0ee2482a
commit
d0a30f497b
@@ -149,7 +149,7 @@ export const ExtendedProjectSidebar = observer(function ExtendedProjectSidebar()
|
||||
/>
|
||||
</div>
|
||||
) : (
|
||||
<div className="vertical-scrollbar mt-4 flex scrollbar-sm flex-grow flex-col gap-0.5 overflow-x-hidden overflow-y-auto pr-2 pl-9">
|
||||
<div className="vertical-scrollbar mt-4 scrollbar-sm flex flex-grow flex-col gap-0.5 overflow-x-hidden overflow-y-auto pr-2 pl-9">
|
||||
{filteredProjects.map((projectId, index) => (
|
||||
<SidebarProjectsListItem
|
||||
key={projectId}
|
||||
|
||||
@@ -60,7 +60,7 @@ function ProfileActivityPage() {
|
||||
<h3 className="text-16 font-medium">{t("profile.stats.recent_activity.title")}</h3>
|
||||
{canDownloadActivity && <DownloadActivityButton />}
|
||||
</div>
|
||||
<div className="vertical-scrollbar flex scrollbar-md h-full flex-col overflow-y-auto px-5 md:px-9">
|
||||
<div className="vertical-scrollbar scrollbar-md flex h-full flex-col overflow-y-auto px-5 md:px-9">
|
||||
{activityPages}
|
||||
{pageCount < totalPages && resultsCount !== 0 && (
|
||||
<div className="flex w-full items-center justify-center text-11">
|
||||
|
||||
@@ -72,7 +72,7 @@ function CycleDetailPage({ params }: Route.ComponentProps) {
|
||||
{!isSidebarCollapsed && (
|
||||
<div
|
||||
className={cn(
|
||||
"vertical-scrollbar absolute right-0 z-13 flex scrollbar-sm h-full w-[21.5rem] flex-shrink-0 flex-col gap-3.5 overflow-y-auto border-l border-subtle bg-surface-1 px-4 shadow-raised-200 duration-300"
|
||||
"vertical-scrollbar absolute right-0 z-13 scrollbar-sm flex h-full w-[21.5rem] flex-shrink-0 flex-col gap-3.5 overflow-y-auto border-l border-subtle bg-surface-1 px-4 shadow-raised-200 duration-300"
|
||||
)}
|
||||
>
|
||||
<CycleDetailsSidebar
|
||||
|
||||
@@ -68,7 +68,7 @@ function ModuleIssuesPage({ params }: Route.ComponentProps) {
|
||||
{!isSidebarCollapsed && (
|
||||
<div
|
||||
className={cn(
|
||||
"vertical-scrollbar absolute right-0 z-13 flex scrollbar-sm h-full w-[24rem] flex-shrink-0 flex-col gap-3.5 overflow-y-auto border-l border-subtle bg-surface-1 px-6 shadow-raised-200 duration-300"
|
||||
"vertical-scrollbar absolute right-0 z-13 scrollbar-sm flex h-full w-[24rem] flex-shrink-0 flex-col gap-3.5 overflow-y-auto border-l border-subtle bg-surface-1 px-6 shadow-raised-200 duration-300"
|
||||
)}
|
||||
>
|
||||
<ModuleAnalyticsSidebar moduleId={moduleId} handleClose={toggleSidebar} />
|
||||
|
||||
@@ -40,7 +40,7 @@ function WorkspaceViewsPage() {
|
||||
mode="true-transparent"
|
||||
/>
|
||||
</div>
|
||||
<div className="vertical-scrollbar flex scrollbar-lg h-full w-full flex-col">
|
||||
<div className="vertical-scrollbar scrollbar-lg flex h-full w-full flex-col">
|
||||
{DEFAULT_GLOBAL_VIEWS_LIST.filter((v) => t(v.i18n_label).toLowerCase().includes(query.toLowerCase())).map(
|
||||
(option) => (
|
||||
<GlobalDefaultViewListItem key={option.key} view={option} />
|
||||
|
||||
@@ -16,7 +16,7 @@ export function ListLayout(props: IListContainer) {
|
||||
return (
|
||||
<Row
|
||||
variant={ERowVariant.HUGGING}
|
||||
className="vertical-scrollbar flex scrollbar-lg h-full w-full flex-col overflow-y-auto"
|
||||
className="vertical-scrollbar scrollbar-lg flex h-full w-full flex-col overflow-y-auto"
|
||||
>
|
||||
{children}
|
||||
</Row>
|
||||
|
||||
@@ -173,11 +173,11 @@ export const ActiveCycleStats = observer(function ActiveCycleStats(props: Active
|
||||
<Tab.Panels as={Fragment}>
|
||||
<Tab.Panel
|
||||
as="div"
|
||||
className="vertical-scrollbar flex scrollbar-sm h-52 w-full flex-col gap-1 overflow-y-auto text-secondary"
|
||||
className="vertical-scrollbar scrollbar-sm flex h-52 w-full flex-col gap-1 overflow-y-auto text-secondary"
|
||||
>
|
||||
<div
|
||||
ref={issuesContainerRef}
|
||||
className="vertical-scrollbar flex scrollbar-sm h-full w-full flex-col gap-1 overflow-y-auto"
|
||||
className="vertical-scrollbar scrollbar-sm flex h-full w-full flex-col gap-1 overflow-y-auto"
|
||||
>
|
||||
{cycleIssueDetails && "issueIds" in cycleIssueDetails ? (
|
||||
cycleIssueDetails.issueCount > 0 ? (
|
||||
@@ -264,7 +264,7 @@ export const ActiveCycleStats = observer(function ActiveCycleStats(props: Active
|
||||
|
||||
<Tab.Panel
|
||||
as="div"
|
||||
className="vertical-scrollbar flex scrollbar-sm h-52 w-full flex-col gap-1 overflow-y-auto text-secondary"
|
||||
className="vertical-scrollbar scrollbar-sm flex h-52 w-full flex-col gap-1 overflow-y-auto text-secondary"
|
||||
>
|
||||
{cycle && !isEmpty(cycle.distribution) ? (
|
||||
cycle?.distribution?.assignees && cycle.distribution.assignees.length > 0 ? (
|
||||
@@ -326,7 +326,7 @@ export const ActiveCycleStats = observer(function ActiveCycleStats(props: Active
|
||||
|
||||
<Tab.Panel
|
||||
as="div"
|
||||
className="vertical-scrollbar flex scrollbar-sm h-52 w-full flex-col gap-1 overflow-y-auto text-secondary"
|
||||
className="vertical-scrollbar scrollbar-sm flex h-52 w-full flex-col gap-1 overflow-y-auto text-secondary"
|
||||
>
|
||||
{cycle && !isEmpty(cycle.distribution) ? (
|
||||
cycle?.distribution?.labels && cycle.distribution.labels.length > 0 ? (
|
||||
|
||||
@@ -72,7 +72,7 @@ export const ArchivedCyclesHeader = observer(function ArchivedCyclesHeader() {
|
||||
|
||||
return (
|
||||
<div className="group relative flex border-b border-subtle">
|
||||
<div className="horizontal-scrollbar flex scrollbar-sm w-full items-center gap-2 overflow-x-auto px-4">
|
||||
<div className="horizontal-scrollbar scrollbar-sm flex w-full items-center gap-2 overflow-x-auto px-4">
|
||||
<ArchiveTabsList />
|
||||
</div>
|
||||
{/* filter options */}
|
||||
|
||||
@@ -171,7 +171,7 @@ export const GanttChartMainContent = observer(function GanttChartMainContent(pro
|
||||
// DO NOT REMOVE THE ID
|
||||
id="gantt-container"
|
||||
className={cn(
|
||||
"vertical-scrollbar horizontal-scrollbar flex scrollbar-lg h-full w-full overflow-auto border-t-[0.5px] border-subtle",
|
||||
"vertical-scrollbar horizontal-scrollbar scrollbar-lg flex h-full w-full overflow-auto border-t-[0.5px] border-subtle",
|
||||
{
|
||||
"mb-8": bottomSpacing,
|
||||
}
|
||||
|
||||
@@ -261,7 +261,7 @@ export const BaseKanBanRoot = observer(function BaseKanBanRoot(props: IBaseKanBa
|
||||
</div>
|
||||
<IssueLayoutHOC layout={EIssueLayoutTypes.KANBAN}>
|
||||
<div
|
||||
className={`horizontal-scrollbar relative flex scrollbar-lg h-full w-full bg-surface-2 ${sub_group_by ? "vertical-scrollbar overflow-y-auto" : "overflow-x-auto overflow-y-hidden"}`}
|
||||
className={`horizontal-scrollbar relative scrollbar-lg flex h-full w-full bg-surface-2 ${sub_group_by ? "vertical-scrollbar overflow-y-auto" : "overflow-x-auto overflow-y-hidden"}`}
|
||||
ref={scrollableContainerRef}
|
||||
>
|
||||
<div className="relative h-full w-max min-w-full bg-surface-2">
|
||||
|
||||
@@ -82,7 +82,7 @@ export const ArchivedModulesHeader = observer(function ArchivedModulesHeader() {
|
||||
|
||||
return (
|
||||
<div className="group relative flex border-b border-subtle">
|
||||
<div className="horizontal-scrollbar flex scrollbar-sm w-full items-center gap-2 overflow-x-auto px-4">
|
||||
<div className="horizontal-scrollbar scrollbar-sm flex w-full items-center gap-2 overflow-x-auto px-4">
|
||||
<ArchiveTabsList />
|
||||
</div>
|
||||
{/* filter options */}
|
||||
|
||||
@@ -53,7 +53,7 @@ export const ArchivedModulesView = observer(function ArchivedModulesView(props:
|
||||
return (
|
||||
<div className="h-full overflow-y-auto">
|
||||
<div className="flex h-full w-full justify-between">
|
||||
<div className="vertical-scrollbar flex scrollbar-lg h-full w-full flex-col overflow-y-auto">
|
||||
<div className="vertical-scrollbar scrollbar-lg flex h-full w-full flex-col overflow-y-auto">
|
||||
{filteredArchivedModuleIds.map((moduleId) => (
|
||||
<ModuleListItem key={moduleId} moduleId={moduleId} />
|
||||
))}
|
||||
|
||||
@@ -240,7 +240,7 @@ export const PageEditorBody = observer(function PageEditorBody(props: Props) {
|
||||
|
||||
return (
|
||||
<Row
|
||||
className="vertical-scrollbar relative flex scrollbar-md size-full flex-col overflow-x-hidden overflow-y-auto duration-200"
|
||||
className="vertical-scrollbar relative scrollbar-md flex size-full flex-col overflow-x-hidden overflow-y-auto duration-200"
|
||||
variant={ERowVariant.HUGGING}
|
||||
>
|
||||
<div id="page-content-container" className="relative w-full flex-shrink-0">
|
||||
|
||||
@@ -22,7 +22,7 @@ export function ProfileSettingContentWrapper(props: Props) {
|
||||
|
||||
<div
|
||||
className={cn(
|
||||
"vertical-scrollbar mx-auto flex scrollbar-md h-full w-full flex-col px-8 py-10 md:px-20 md:py-16 lg:px-36 xl:px-56",
|
||||
"vertical-scrollbar mx-auto scrollbar-md flex h-full w-full flex-col px-8 py-10 md:px-20 md:py-16 lg:px-36 xl:px-56",
|
||||
className
|
||||
)}
|
||||
>
|
||||
|
||||
@@ -154,7 +154,7 @@ export const WorkspaceMenuRoot = observer(function WorkspaceMenuRoot(props: Work
|
||||
}
|
||||
)}
|
||||
>
|
||||
<div className="vertical-scrollbar flex scrollbar-sm max-h-96 flex-col items-start justify-start overflow-x-hidden overflow-y-scroll">
|
||||
<div className="vertical-scrollbar scrollbar-sm flex max-h-96 flex-col items-start justify-start overflow-x-hidden overflow-y-scroll">
|
||||
<span className="sticky top-0 z-21 h-full w-full flex-shrink-0 truncate rounded-md bg-surface-1 px-4 pt-3 pb-1 text-left text-13 font-medium text-placeholder">
|
||||
{currentUser?.email}
|
||||
</span>
|
||||
|
||||
@@ -94,7 +94,7 @@ export const GlobalViewsHeader = observer(function GlobalViewsHeader() {
|
||||
<CreateUpdateWorkspaceViewModal isOpen={createViewModal} onClose={() => setCreateViewModal(false)} />
|
||||
<div
|
||||
ref={containerRef}
|
||||
className="horizontal-scrollbar flex scrollbar-sm h-full w-full items-center overflow-x-auto overflow-y-hidden"
|
||||
className="horizontal-scrollbar scrollbar-sm flex h-full w-full items-center overflow-x-auto overflow-y-hidden"
|
||||
>
|
||||
{DEFAULT_GLOBAL_VIEWS_LIST.map((tab, index) => (
|
||||
<DefaultViewTab key={`${tab.key}-${index}`} tab={tab} />
|
||||
|
||||
@@ -5,32 +5,13 @@
|
||||
@import "./emoji.css";
|
||||
@plugin "@tailwindcss/typography";
|
||||
|
||||
/* stickies and editor colors */
|
||||
/* stickies and editor colors
|
||||
* Text colors and the themed light/dark background ramps come from
|
||||
* @plane/editor/styles (imported above), which is their single source of truth.
|
||||
* Only the un-themed :root fallback below is kept: the editor package declares
|
||||
* background colors solely under [data-theme*="light"] / [data-theme*="dark"],
|
||||
* so without this they are undefined until a theme lands on the element. */
|
||||
:root {
|
||||
/* text colors */
|
||||
--editor-colors-gray-text: #5c5e63;
|
||||
--editor-colors-peach-text: #ff5b59;
|
||||
--editor-colors-pink-text: #f65385;
|
||||
--editor-colors-orange-text: #fd9038;
|
||||
--editor-colors-green-text: #0fc27b;
|
||||
--editor-colors-light-blue-text: #17bee9;
|
||||
--editor-colors-dark-blue-text: #266df0;
|
||||
--editor-colors-purple-text: #9162f9;
|
||||
/* end text colors */
|
||||
|
||||
/* background colors */
|
||||
--editor-colors-gray-background: #d6d6d8;
|
||||
--editor-colors-peach-background: #ffd5d7;
|
||||
--editor-colors-pink-background: #fdd4e3;
|
||||
--editor-colors-orange-background: #ffe3cd;
|
||||
--editor-colors-green-background: #c3f0de;
|
||||
--editor-colors-light-blue-background: #c5eff9;
|
||||
--editor-colors-dark-blue-background: #c9dafb;
|
||||
--editor-colors-purple-background: #e3d8fd;
|
||||
/* end background colors */
|
||||
}
|
||||
/* background colors */
|
||||
[data-theme*="light"] {
|
||||
--editor-colors-gray-background: #d6d6d8;
|
||||
--editor-colors-peach-background: #ffd5d7;
|
||||
--editor-colors-pink-background: #fdd4e3;
|
||||
@@ -40,17 +21,6 @@
|
||||
--editor-colors-dark-blue-background: #c9dafb;
|
||||
--editor-colors-purple-background: #e3d8fd;
|
||||
}
|
||||
[data-theme*="dark"] {
|
||||
--editor-colors-gray-background: #404144;
|
||||
--editor-colors-peach-background: #593032;
|
||||
--editor-colors-pink-background: #562e3d;
|
||||
--editor-colors-orange-background: #583e2a;
|
||||
--editor-colors-green-background: #1d4a3b;
|
||||
--editor-colors-light-blue-background: #1f495c;
|
||||
--editor-colors-dark-blue-background: #223558;
|
||||
--editor-colors-purple-background: #3d325a;
|
||||
}
|
||||
/* end background colors */
|
||||
|
||||
.shadow-custom {
|
||||
box-shadow: 2px 2px 8px 2px rgba(234, 231, 250, 0.3); /* Convert #EAE7FA4D to rgba */
|
||||
|
||||
Reference in New Issue
Block a user