Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
1b7bef6
fix(sdk): repoint dangling --wb-* custom properties at existing tokens
librowski Aug 18, 2026
75d6005
fix(ui): resolve undefined custom properties in icon-switch and text-…
librowski Aug 18, 2026
05be0d7
fix(ai-studio): correct --ax-txt-secondary token name in log panel
librowski Aug 18, 2026
9cefb74
style: drop dead fallbacks on system design tokens
librowski Aug 18, 2026
9db1929
chore(tokens): add token-usage lint guard
librowski Aug 18, 2026
5a85b65
ci: run the token-usage lint in pr-check and lint-staged
librowski Aug 18, 2026
5a42d52
docs(sdk): document the --wb-* prefix ownership convention
librowski Aug 18, 2026
35e4ea5
refactor(tokens): replace the custom token-usage lint with stylelint
librowski Aug 20, 2026
52ccbb2
fix(sdk): use the primary text token for the neutral message variant
librowski Aug 20, 2026
e33300d
refactor(sdk): drop unconsumed edge color variables
librowski Aug 20, 2026
bc18fc6
fix(repo): resolve stylelint importFrom from the config file, name th…
librowski Aug 20, 2026
8671006
docs: drop a brittle cross-rule remark from the stylelint plugin
librowski Aug 20, 2026
0871bce
ci: drop the migration meter from pr-check
librowski Aug 20, 2026
a5eeb45
docs: explain the stylelint definition source in plain terms
librowski Aug 20, 2026
1f31ed8
refactor(repo): replace the runtime-variable allowlist with in-place …
librowski Aug 20, 2026
86ffeb4
chore: drop the migration meter from the repo
librowski Aug 20, 2026
9db6e31
chore: shield the DS 2.0 migration changelog from prettier
librowski Aug 20, 2026
9b2fe9f
fix: restore the full .prettierignore and anchor it for lint-staged
librowski Aug 20, 2026
fc43b9a
chore: drop tracker ids from changeset filenames
librowski Aug 20, 2026
890d8bf
ci: run PR checks for the DS 2.0 stack branches
librowski Aug 20, 2026
28cddff
ci: run PR checks for every base branch
librowski Aug 20, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/dangling-token-names.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@workflowbuilder/sdk': patch
---

Fix CSS variable names that pointed at non-existent tokens: the variables-settings modal picks up its token-defined colors, spacing, and radii, and diagram edge labels use their intended hover/selection colors.
5 changes: 5 additions & 0 deletions .changeset/textarea-disabled-background.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@workflowbuilder/ui': minor
---

TextArea exposes `--ax-public-textarea-root-background-color-disabled` (defaults to `transparent`); a never-applied icon-switch thumb background declaration was removed.
4 changes: 2 additions & 2 deletions .github/workflows/pr-check-docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,10 @@ name: PR Check (docs)
# Typecheck is deliberately absent: apps/docs tolerates known starlight
# virtual-module type errors.

# Every PR gets checks regardless of its base branch — this keeps stacked
# PRs and integration branches covered without a base allowlist to maintain.
on:
pull_request:
branches:
- main
paths:
- 'apps/docs/**'
- 'packages/ui/**'
Expand Down
12 changes: 8 additions & 4 deletions .github/workflows/pr-check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,14 @@ name: PR Check
# is safe to merge. Focus on the published packages @workflowbuilder/sdk and
# @workflowbuilder/ui (plus its private @workflowbuilder/ui-tokens build) +
# global format consistency. apps/docs has its own path-filtered workflow
# (pr-check-docs.yml); demo and ai-studio are not checked here — they're
# internal and have their own broken-state tolerances.
# (pr-check-docs.yml); demo and ai-studio are not built here — they're
# internal and have their own broken-state tolerances — but their CSS goes
# through the style lint below like every other workspace's.

# Every PR gets checks regardless of its base branch — this keeps stacked
# PRs and integration branches covered without a base allowlist to maintain.
on:
pull_request:
branches:
- main

permissions:
contents: read
Expand Down Expand Up @@ -145,3 +146,6 @@ jobs:
# build:ui builds @workflowbuilder/ui-tokens first, then ui, then runs
# the check:built-css guard.
run: pnpm build:ui

- name: Style lint (token usage + fallbacks)
run: pnpm lint:styles
2 changes: 2 additions & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,5 @@
apps/icons/src/utils/icons.gen.ts
# Astro auto-generated content collections + types (gitignored, regenerated on build/dev)
**/.astro/
# Designer changelog checked in verbatim — reformatting corrupted token paths in emphasis markers
packages/tokens/migration/
15 changes: 15 additions & 0 deletions .stylelintrc.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import { fileURLToPath } from 'node:url';

// The csstools rule resolves importFrom paths against process.cwd(), and
// lint-staged runs commands from workspace directories — anchor to this file.
const customProperties = fileURLToPath(new URL('./tools/stylelint/custom-properties.mjs', import.meta.url));

/** @type {import('stylelint').Config} */
export default {
plugins: ['stylelint-value-no-unknown-custom-properties', './tools/stylelint/no-system-token-fallbacks.mjs'],
ignoreFiles: ['**/node_modules/**', '**/dist/**', 'apps/docs/**'],
rules: {
'csstools/value-no-unknown-custom-properties': [true, { importFrom: [customProperties] }],
'wb/no-system-token-fallbacks': true,
},
};
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,11 @@
max-width: 460px;
padding: 2rem;
font-family: var(--wb-font-family);
background: var(--ax-ui-bg-primary-default, #ffffff);
border: 0.0625rem solid var(--ax-ui-stroke-primary-default, #edeff3);
border-radius: var(--wb-app-bar-border-radius, 0.75rem);
background: var(--ax-ui-bg-primary-default);
border: 0.0625rem solid var(--ax-ui-stroke-primary-default);
border-radius: var(--wb-app-bar-border-radius);
box-shadow: 0 1.25rem 3.75rem rgba(0, 0, 0, 0.25);
color: var(--ax-txt-primary-default, #151516);
color: var(--ax-txt-primary-default);
}

.close {
Expand All @@ -35,13 +35,13 @@
border: none;
border-radius: 0.5rem;
background: transparent;
color: var(--ax-txt-tertiary-default, #6f7480);
color: var(--ax-txt-tertiary-default);
cursor: pointer;
}

.close:hover {
background: var(--ax-ui-bg-secondary-default, #f5f5f7);
color: var(--ax-txt-primary-default, #151516);
background: var(--ax-ui-bg-secondary-default);
color: var(--ax-txt-primary-default);
}

.heading {
Expand All @@ -59,22 +59,22 @@
height: 2.25rem;
flex-shrink: 0;
border-radius: 0.6rem;
background: var(--ax-ui-bg-secondary-default, #f5f5f7);
color: var(--ax-colors-acc1-500, #1096e7);
background: var(--ax-ui-bg-secondary-default);
color: var(--ax-colors-acc1-500);
}

.title {
margin: 0;
font-size: 1.25rem;
font-weight: 600;
color: var(--ax-txt-primary-default, #151516);
color: var(--ax-txt-primary-default);
}

.body {
margin: 0 0 1.5rem;
font-size: 0.92rem;
line-height: 1.6;
color: var(--ax-txt-secondary-default, #4d5059);
color: var(--ax-txt-secondary-default);
}

.body p {
Expand All @@ -86,7 +86,7 @@
}

.body strong {
color: var(--ax-txt-primary-default, #151516);
color: var(--ax-txt-primary-default);
font-weight: 600;
}

Expand All @@ -98,7 +98,7 @@
padding: 0.7rem 1rem;
border: none;
border-radius: 0.625rem;
background: var(--ax-colors-acc1-500, #1096e7);
background: var(--ax-colors-acc1-500);
color: #ffffff;
font-size: 0.95rem;
font-weight: 600;
Expand All @@ -107,7 +107,7 @@
}

.cta:hover {
background: var(--ax-colors-acc1-600, #0477c5);
background: var(--ax-colors-acc1-600);
}

.reopen {
Expand All @@ -123,11 +123,11 @@
border: 0.0625rem solid var(--wb-app-bar-border-color);
border-radius: 50%;
background: var(--wb-app-bar-background);
color: var(--ax-txt-secondary-default, #4d5059);
color: var(--ax-txt-secondary-default);
cursor: pointer;
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);
}

.reopen:hover {
color: var(--ax-colors-acc1-500, #1096e7);
color: var(--ax-colors-acc1-500);
}
11 changes: 6 additions & 5 deletions apps/ai-studio/src/components/execution/log-panel.module.css
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
.panel {
position: fixed;
bottom: 1rem;
/* stylelint-disable-next-line csstools/value-no-unknown-custom-properties -- set from log-panel.tsx inline style */
right: var(--log-panel-right, 1rem);
width: 30rem;
max-width: calc(100vw - 3rem);
max-height: 26.875rem;
background: var(--wb-app-bar-background);
border: 0.0625rem solid var(--wb-app-bar-border-color);
border-radius: var(--wb-app-bar-border-radius);
color: var(--ax-txt-primary-default, #151516);
color: var(--ax-txt-primary-default);
display: flex;
flex-direction: column;
z-index: 10;
Expand Down Expand Up @@ -90,7 +91,7 @@
}

.badge--node_started {
color: var(--ax-txt-secondary, #888);
color: var(--ax-txt-secondary-default);
}

.badge--node_failed,
Expand All @@ -99,7 +100,7 @@
}

.badge--execution_cancelled {
color: var(--ax-txt-secondary, #888);
color: var(--ax-txt-secondary-default);
}

.node-id {
Expand Down Expand Up @@ -159,6 +160,6 @@
}

.event--highlighted {
background: color-mix(in srgb, var(--ax-colors-acc1-500, #1096e7), transparent 88%);
box-shadow: inset 0.1875rem 0 0 var(--ax-colors-acc1-500, #1096e7);
background: color-mix(in srgb, var(--ax-colors-acc1-500), transparent 88%);
box-shadow: inset 0.1875rem 0 0 var(--ax-colors-acc1-500);
}
42 changes: 21 additions & 21 deletions apps/ai-studio/src/components/visualize/renderers.module.css
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
.markdown {
font-size: 0.85rem;
line-height: 1.6;
color: var(--ax-txt-primary-default, #151516);
color: var(--ax-txt-primary-default);
overflow-wrap: anywhere;
}

Expand Down Expand Up @@ -40,7 +40,7 @@
}

.markdown a {
color: var(--ax-colors-acc1-500, #1096e7);
color: var(--ax-colors-acc1-500);
text-decoration: underline;
}

Expand All @@ -51,15 +51,15 @@
.markdown code {
font-family: 'IBM Plex Mono', ui-monospace, monospace;
font-size: 0.82em;
background: var(--ax-ui-bg-secondary-default, #f5f5f7);
background: var(--ax-ui-bg-secondary-default);
padding: 0.1em 0.35em;
border-radius: 0.25rem;
}

.markdown pre {
margin: 0.6em 0;
padding: 0.7em 0.85em;
background: var(--ax-ui-bg-secondary-default, #f5f5f7);
background: var(--ax-ui-bg-secondary-default);
border-radius: 0.5rem;
overflow-x: auto;
}
Expand All @@ -72,8 +72,8 @@
.markdown blockquote {
margin: 0.6em 0;
padding-left: 0.85em;
border-left: 0.1875rem solid var(--ax-ui-stroke-primary-default, #edeff3);
color: var(--ax-txt-secondary-default, #4d5059);
border-left: 0.1875rem solid var(--ax-ui-stroke-primary-default);
color: var(--ax-txt-secondary-default);
}

.rich p {
Expand All @@ -89,13 +89,13 @@
.rich code {
font-family: 'IBM Plex Mono', ui-monospace, monospace;
font-size: 0.85em;
background: var(--ax-ui-bg-secondary-default, #f5f5f7);
background: var(--ax-ui-bg-secondary-default);
padding: 0.05em 0.3em;
border-radius: 0.2rem;
}

.rich a {
color: var(--ax-colors-acc1-500, #1096e7);
color: var(--ax-colors-acc1-500);
text-decoration: underline;
}

Expand All @@ -108,7 +108,7 @@
font-family: 'IBM Plex Mono', ui-monospace, monospace;
font-size: 0.8rem;
line-height: 1.55;
color: var(--ax-txt-primary-default, #151516);
color: var(--ax-txt-primary-default);
white-space: pre-wrap;
overflow-wrap: anywhere;
}
Expand All @@ -117,7 +117,7 @@
font-family: 'IBM Plex Mono', ui-monospace, monospace;
font-size: 0.78rem;
line-height: 1.5;
color: var(--ax-txt-primary-default, #151516);
color: var(--ax-txt-primary-default);
}

.json-row {
Expand All @@ -132,18 +132,18 @@

.json-children {
padding-left: 0.9rem;
border-left: 0.0625rem solid var(--ax-ui-stroke-primary-default, #edeff3);
border-left: 0.0625rem solid var(--ax-ui-stroke-primary-default);
margin-left: 0.25rem;
}

.json-toggle {
width: 0.7rem;
flex-shrink: 0;
color: var(--ax-txt-tertiary-default, #6f7480);
color: var(--ax-txt-tertiary-default);
}

.json-key {
color: var(--ax-colors-acc1-600, #0477c5);
color: var(--ax-colors-acc1-600);
}

.json-string {
Expand All @@ -160,7 +160,7 @@
}

.json-bracket {
color: var(--ax-txt-tertiary-default, #6f7480);
color: var(--ax-txt-tertiary-default);
}

.table {
Expand All @@ -171,14 +171,14 @@

.table th,
.table td {
border: 0.0625rem solid var(--ax-ui-stroke-primary-default, #edeff3);
border: 0.0625rem solid var(--ax-ui-stroke-primary-default);
padding: 0.3em 0.5em;
text-align: left;
vertical-align: top;
}

.table th {
background: var(--ax-ui-bg-secondary-default, #f5f5f7);
background: var(--ax-ui-bg-secondary-default);
font-weight: 600;
position: sticky;
top: 0;
Expand All @@ -192,15 +192,15 @@

.stat-card {
padding: 0.6rem 0.7rem;
border: 0.0625rem solid var(--ax-ui-stroke-primary-default, #edeff3);
border: 0.0625rem solid var(--ax-ui-stroke-primary-default);
border-radius: 0.5rem;
background: var(--ax-ui-bg-secondary-default, #f5f5f7);
background: var(--ax-ui-bg-secondary-default);
}

.stat-value {
font-size: 1.05rem;
font-weight: 600;
color: var(--ax-txt-primary-default, #151516);
color: var(--ax-txt-primary-default);
overflow-wrap: anywhere;
}

Expand All @@ -209,13 +209,13 @@
font-size: 0.7rem;
text-transform: uppercase;
letter-spacing: 0.03em;
color: var(--ax-txt-tertiary-default, #6f7480);
color: var(--ax-txt-tertiary-default);
}

.fallback-note {
margin-bottom: 0.4rem;
font-size: 0.72rem;
color: var(--ax-txt-tertiary-default, #6f7480);
color: var(--ax-txt-tertiary-default);
}

.chart {
Expand Down
Loading
Loading