Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
15 changes: 15 additions & 0 deletions .github/workflows/codeql.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,21 @@ jobs:
with:
languages: ${{ matrix.language }}
queries: security-extended
# Compiled/minified bundles committed for distribution, not hand-written
# source. Scanning them is both unhelpful (GitHub can't even render a
# code preview for minified JS) and unstable: their line numbers shift
# on every rebuild, so CodeQL's alert fingerprinting can't match an
# alert here across commits — every push reports the same handful of
# flagged patterns as "new", even after the underlying source (already
# scanned separately, since these directories are 100% build output) is
# fixed. The real source lives in admin-app/src/ and
# integrations/bricks/editor-app/src/, both still fully scanned.
# `paths-ignore` is not a direct action input on this codeql-action
# version — it must go inside the inline `config` YAML.
config: |
paths-ignore:
- SLASHED-for-WP/assets/admin-app/**
- SLASHED-for-WP/integrations/bricks/assets/editor-app/**

- uses: github/codeql-action/analyze@8aad20d150bbac5944a9f9d289da16a4b0d87c1e # v4
with:
Expand Down
30 changes: 26 additions & 4 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -68,9 +68,15 @@ jobs:
git config user.email "github-actions[bot]@users.noreply.github.com"
git fetch origin "$DEFAULT_BRANCH"

# Preserve the files updated by update-framework before we switch
# branches -- git checkout resets tracked files to the branch state.
mkdir -p /tmp/fw-dist /tmp/fw-data /tmp/fw-bricks-data
# Preserve the files updated by update-framework and build:admin-app
# before we switch branches -- git checkout resets tracked files to
# the branch state. This must include everything npm run sync (run
# as build:admin-app's prebuild hook) vendors from the configurator
# -- admin-app/src/, its manifest, and framework-css/ -- otherwise
# the configurator changes synced for this release are built into
# the zip but never committed back to the default branch.
mkdir -p /tmp/fw-dist /tmp/fw-data /tmp/fw-bricks-data \
/tmp/fw-admin-app-src /tmp/fw-admin-app-framework-css /tmp/fw-assets-admin-app
cp -a SLASHED-for-WP/dist/. /tmp/fw-dist/
cp -a SLASHED-for-WP/data/. /tmp/fw-data/
cp -a SLASHED-for-WP/integrations/bricks/data/. /tmp/fw-bricks-data/
Expand All @@ -80,6 +86,10 @@ jobs:
cp scripts/registry-sources.js /tmp/fw-registry-sources.js
cp package.json /tmp/fw-package.json
cp package-lock.json /tmp/fw-package-lock.json
cp -a SLASHED-for-WP/admin-app/src/. /tmp/fw-admin-app-src/
cp SLASHED-for-WP/admin-app/.vendored-manifest.json /tmp/fw-admin-app-manifest.json
cp -a SLASHED-for-WP/admin-app/framework-css/. /tmp/fw-admin-app-framework-css/
cp -a SLASHED-for-WP/assets/admin-app/. /tmp/fw-assets-admin-app/

git checkout "$DEFAULT_BRANCH"

Expand All @@ -93,6 +103,14 @@ jobs:
cp /tmp/fw-registry-sources.js scripts/registry-sources.js
cp /tmp/fw-package.json package.json
cp /tmp/fw-package-lock.json package-lock.json
rm -rf SLASHED-for-WP/admin-app/src
mkdir -p SLASHED-for-WP/admin-app/src
cp -a /tmp/fw-admin-app-src/. SLASHED-for-WP/admin-app/src/
cp /tmp/fw-admin-app-manifest.json SLASHED-for-WP/admin-app/.vendored-manifest.json
rm -rf SLASHED-for-WP/admin-app/framework-css SLASHED-for-WP/assets/admin-app
mkdir -p SLASHED-for-WP/admin-app/framework-css SLASHED-for-WP/assets/admin-app
cp -a /tmp/fw-admin-app-framework-css/. SLASHED-for-WP/admin-app/framework-css/
cp -a /tmp/fw-assets-admin-app/. SLASHED-for-WP/assets/admin-app/
Comment thread
qodo-code-review[bot] marked this conversation as resolved.
Comment thread
coderabbitai[bot] marked this conversation as resolved.

# Re-run changelog-release on the default branch so it picks up the
# committed tag (the release workflow checks out the tag ref above).
Expand All @@ -107,7 +125,11 @@ jobs:
SLASHED-for-WP/integrations/gutenberg/slashed-gutenberg.php \
scripts/registry-sources.js \
package.json \
package-lock.json
package-lock.json \
SLASHED-for-WP/admin-app/src/ \
SLASHED-for-WP/admin-app/.vendored-manifest.json \
SLASHED-for-WP/admin-app/framework-css/ \
SLASHED-for-WP/assets/admin-app/
git diff --staged --quiet && echo "nothing to commit" && exit 0
git commit -m "chore: sync framework + update docs for $TAG"
git push origin "$DEFAULT_BRANCH"
Expand Down
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,12 @@ framework version is tracked separately via the `SLASHED_*_CSS_REF` constants.

## [Unreleased]

### Fixed

- Sync vendored configurator (`admin-app/src/`) with framework PRs #460/#461 — saved themes, motion panel overhaul, base color palette and live semantic preview — which had silently failed to land.
- `release.yml` now commits the configurator sync (`admin-app/src/`, `.vendored-manifest.json`, `framework-css/`, `assets/admin-app/`) back to the default branch instead of discarding it after each release build.
- Remove `.syncignore` entries for files no longer divergent from upstream `SLASHED#443`.

## [0.4.16] - 2026-06-30
## [0.4.16] - 2026-06-30
## [0.4.16] - 2026-06-30
Expand Down
22 changes: 4 additions & 18 deletions SLASHED-for-WP/admin-app/.syncignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,25 +3,11 @@
# Plugin-specific build wiring lives OUTSIDE src/ (vite.config.js, package.json,
# svelte.config.js, tsconfig.json) and is never touched by the sync.

# The following files are part of codeslash-dev/slashed#443 (the companion
# upstream PR that adds @framework-css aliases + the WP persistence seam).
# Those changes live on the feature branch and have not yet merged to main.
#
# Modified files: the CI prebuild sync fetches from main and would overwrite
# these with pre-alias / pre-persistence versions, breaking the build and runtime.
# New files: the sync now wipes src/ before fetching, so any file that doesn't
# exist on main would be deleted unless listed here.
# Remove all five lines once slashed#443 merges to main.
src/main.ts
src/App.svelte
src/components/shell/PreviewPanel.svelte
src/vite-env.d.ts
src/lib/persistence.ts
# codeslash-dev/slashed#443 (the companion upstream PR that added @framework-css
# aliases + the WP persistence seam) merged to main on 2026-06-28. main.ts,
# App.svelte, PreviewPanel.svelte, vite-env.d.ts, lib/persistence.ts, and
# StudioHeader.svelte are no longer plugin-divergent — they sync normally now.

# Plugin-specific: frontend overlay (not in upstream configurator).
src/plugin-main.ts
src/AppOverlay.svelte

# StudioHeader has WP-specific Save button additions (hasPendingChanges/saveState/onSave)
# that live on the feature branch in upstream; keep until the companion PR merges to main.
src/components/shell/StudioHeader.svelte
36 changes: 26 additions & 10 deletions SLASHED-for-WP/admin-app/.vendored-manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,18 @@
"description": "Files vendored from the SLASHED framework configurator. DO NOT edit directly — make changes in codeslash-dev/SLASHED → configurator/src/ and re-run npm run sync.",
"frameworkRepo": "https://github.com/codeslash-dev/SLASHED",
"configuratorSrc": "configurator/src/",
"source": "local:/home/user/SLASHED/configurator/src",
"syncedAt": "2026-06-30T09:21:41.107Z"
"source": "local",
"syncedAt": "2026-06-30T21:51:15.209Z"
},
"vendoredFiles": [
{
"file": "src/app.css",
"source": "local:configurator/src/app.css"
},
{
"file": "src/App.svelte",
"source": "local:configurator/src/App.svelte"
},
{
"file": "src/components/CommandPalette.svelte",
"source": "local:configurator/src/components/CommandPalette.svelte"
Expand Down Expand Up @@ -43,10 +47,6 @@
"file": "src/components/inputs/SliderRow.svelte",
"source": "local:configurator/src/components/inputs/SliderRow.svelte"
},
{
"file": "src/components/inputs/StylePresetCards.svelte",
"source": "local:configurator/src/components/inputs/StylePresetCards.svelte"
},
{
"file": "src/components/inputs/TokenRow.svelte",
"source": "local:configurator/src/components/inputs/TokenRow.svelte"
Expand Down Expand Up @@ -119,6 +119,10 @@
"file": "src/components/panels/WcagPanel.svelte",
"source": "local:configurator/src/components/panels/WcagPanel.svelte"
},
{
"file": "src/components/shell/PreviewPanel.svelte",
"source": "local:configurator/src/components/shell/PreviewPanel.svelte"
},
{
"file": "src/components/shell/SidebarNav.svelte",
"source": "local:configurator/src/components/shell/SidebarNav.svelte"
Expand All @@ -127,6 +131,10 @@
"file": "src/components/shell/StatusBar.svelte",
"source": "local:configurator/src/components/shell/StatusBar.svelte"
},
{
"file": "src/components/shell/StudioHeader.svelte",
"source": "local:configurator/src/components/shell/StudioHeader.svelte"
},
{
"file": "src/data/api-index.generated.json",
"source": "local:configurator/src/data/api-index.generated.json"
Expand Down Expand Up @@ -167,6 +175,10 @@
"file": "src/lib/lumlockerPreview.svelte.ts",
"source": "local:configurator/src/lib/lumlockerPreview.svelte.ts"
},
{
"file": "src/lib/persistence.ts",
"source": "local:configurator/src/lib/persistence.ts"
},
{
"file": "src/lib/powerKnobs.ts",
"source": "local:configurator/src/lib/powerKnobs.ts"
Expand All @@ -176,16 +188,20 @@
"source": "local:configurator/src/lib/previewResolver.svelte.ts"
},
{
"file": "src/lib/stylePresets.ts",
"source": "local:configurator/src/lib/stylePresets.ts"
"file": "src/lib/savedThemes.ts",
"source": "local:configurator/src/lib/savedThemes.ts"
},
{
"file": "src/lib/themes.ts",
"source": "local:configurator/src/lib/themes.ts"
"file": "src/main.ts",
"source": "local:configurator/src/main.ts"
},
{
"file": "src/types.ts",
"source": "local:configurator/src/types.ts"
},
{
"file": "src/vite-env.d.ts",
"source": "local:configurator/src/vite-env.d.ts"
}
]
}
100 changes: 43 additions & 57 deletions SLASHED-for-WP/admin-app/framework-css/badges/slashed.full.css
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
/* SLASHED v0.6.25 — slashed.full.css */
/* SLASHED v0.6.29 — slashed.full.css */

/* ─── core/layers.css ─── */
/* SLASHED — core/layers.css
Expand Down Expand Up @@ -859,71 +859,57 @@


/* ----------------------------------------------------------
base — V-shaped ramp (inverted tint direction)
base — fixed-lightness ramp (mode-independent, monotonic)
────────────────────────────────────────────────────────
Unlike every other family, base is a near-white (light mode)
or near-black (dark mode) surface token, not a mid-lightness
brand colour. There is nowhere "lighter" to go from near-white,
so the tint direction is inverted: steps 50-400 mix --sf-color-text
INTO base (progressively darker in light mode, progressively
lighter in dark mode). Steps 600-950 mix base INTO text in both
modes (the same direction as other families' shades).

Approximate OKLCH L values — default palette, light mode:
base-50 ≈ 0.946 barely off-surface (dividers, zebra rows)
base-100 ≈ 0.931 subtle surface variant
base-200 ≈ 0.900 light gray (well / inset areas)
base-300 ≈ 0.840 medium-light gray
base-400 ≈ 0.748 medium gray (secondary UI elements)
base-500 ≈ 0.960 base itself (source token)
base-600 ≈ 0.850 medium-light (toward text, from 500)
base-700 ≈ 0.762
base-800 ≈ 0.630
base-900 ≈ 0.337
base-950 ≈ 0.170 near-black

Dark mode reverses the visual: base-50 becomes near-white-ish,
base-950 becomes near-black-ish, base-500 is the dark surface.

SEMANTIC ALIAS MAPPING (consistent position in ramp, not absolute L):
superlight = base-50 (closest to surface — barely distinguishable)
xlight = base-200 (light gray)
lighter = base-400 (medium gray — "lighter contrast" toward text)
darker = base-600 (one step past base toward text from shade side)
xdark = base-800
superdark = base-950 (near ink color)

When you need surface-level differentiation, prefer
--sf-color-inset / --sf-color-raised / --sf-color-bg over the
numbered scale. For overlays, prefer the alpha variants (-a10…-a80)
which are mode-safe by transparency and compose cleanly on any bg.
base is a surface-elevation family, not a mid-lightness brand
colour. The ramp uses oklch() relative syntax with fixed L steps
spanning 0.97 → 0.06, preserving the base source's hue and chroma.
50 is always near-white; 950 is always near-black regardless of
light/dark mode or the source colour's position.

OKLCH L values (fixed, mode-independent):
base-50 = 0.97 near-white
base-100 = 0.94 very light gray
base-200 = 0.88 light gray
base-300 = 0.78 medium-light gray
base-400 = 0.65 medium gray
base-500 = 0.50 mid gray
base-600 = 0.37 medium-dark gray
base-700 = 0.27 dark gray
base-800 = 0.17 very dark gray
base-900 = 0.11 near-black
base-950 = 0.06 near-black

For mode-adaptive surface differentiation use the surface tokens
(--sf-color-inset / --sf-color-raised / --sf-color-bg) which derive
from --sf-color-base via relative oklch and adapt to light/dark mode.
For overlays use alpha variants (-a10…-a80).
---------------------------------------------------------- */
--sf-color-base-50: color-mix(in oklab, var(--sf-color-text) var(--sf-palette-mix-50), var(--sf-color-base));
--sf-color-base-100: color-mix(in oklab, var(--sf-color-text) var(--sf-palette-mix-100), var(--sf-color-base));
--sf-color-base-200: color-mix(in oklab, var(--sf-color-text) var(--sf-palette-mix-200), var(--sf-color-base));
--sf-color-base-300: color-mix(in oklab, var(--sf-color-text) var(--sf-palette-mix-300), var(--sf-color-base));
--sf-color-base-400: color-mix(in oklab, var(--sf-color-text) var(--sf-palette-mix-400), var(--sf-color-base));
--sf-color-base-500: var(--sf-color-base);
--sf-color-base-600: color-mix(in oklab, var(--sf-color-base) var(--sf-palette-mix-600), var(--sf-color-text));
--sf-color-base-700: color-mix(in oklab, var(--sf-color-base) var(--sf-palette-mix-700), var(--sf-color-text));
--sf-color-base-800: color-mix(in oklab, var(--sf-color-base) var(--sf-palette-mix-800), var(--sf-color-text));
--sf-color-base-900: color-mix(in oklab, var(--sf-color-base) var(--sf-palette-mix-900), var(--sf-color-text));
--sf-color-base-950: color-mix(in oklab, var(--sf-color-base) var(--sf-palette-mix-950), var(--sf-color-text));
--sf-color-base-50: oklch(from var(--sf-color-base) 0.97 c h);
--sf-color-base-100: oklch(from var(--sf-color-base) 0.94 c h);
--sf-color-base-200: oklch(from var(--sf-color-base) 0.88 c h);
--sf-color-base-300: oklch(from var(--sf-color-base) 0.78 c h);
--sf-color-base-400: oklch(from var(--sf-color-base) 0.65 c h);
--sf-color-base-500: oklch(from var(--sf-color-base) 0.50 c h);
--sf-color-base-600: oklch(from var(--sf-color-base) 0.37 c h);
--sf-color-base-700: oklch(from var(--sf-color-base) 0.27 c h);
--sf-color-base-800: oklch(from var(--sf-color-base) 0.17 c h);
--sf-color-base-900: oklch(from var(--sf-color-base) 0.11 c h);
--sf-color-base-950: oklch(from var(--sf-color-base) 0.06 c h);

--sf-color-base-a5: oklch(from var(--sf-color-base) l c h / 0.05);
--sf-color-base-a10: oklch(from var(--sf-color-base) l c h / 0.10);
--sf-color-base-a30: oklch(from var(--sf-color-base) l c h / 0.30);
--sf-color-base-a50: oklch(from var(--sf-color-base) l c h / 0.50);
--sf-color-base-a80: oklch(from var(--sf-color-base) l c h / 0.80);

--sf-color-base-superlight: var(--sf-color-base-50);
--sf-color-base-xlight: var(--sf-color-base-200);
--sf-color-base-lighter: var(--sf-color-base-400);
--sf-color-base-darker: var(--sf-color-base-600);
--sf-color-base-xdark: var(--sf-color-base-800);
--sf-color-base-superdark: var(--sf-color-base-950);
--sf-color-base--hover: var(--sf-color-base-darker);
--sf-color-base--active: var(--sf-color-base-xdark);
/* No relative aliases (lighter/darker/xlight/…) on base: it is an
absolute scale, so a step's name would lie depending on where the
source sits (e.g. "lighter" would be darker than a near-white base
in light mode). For relative, mode-adaptive surface elevation use
--sf-color-bg / --sf-color-inset / --sf-color-raised instead. */
--sf-color-base--hover: oklch(from var(--sf-color-base) clamp(0.01, calc(l - 0.04 + var(--sf-is-dark) * 0.08), 0.99) c h);
--sf-color-base--active: oklch(from var(--sf-color-base) clamp(0.01, calc(l - 0.08 + var(--sf-is-dark) * 0.16), 0.99) c h);
--sf-color-base-subtle: var(--sf-color-base-a10);
--sf-color-base-muted: var(--sf-color-base-a30);
--sf-color-base-ghost: var(--sf-color-base-a5);
Expand Down
Loading