ui-style-kit-css 2.2.0 → 2.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +77 -1
- package/CONTRIBUTING.md +8 -1
- package/README.md +171 -53
- package/STYLE-MAP.md +28 -5
- package/dist/assets/bauhaus-barlow-OFL.txt +93 -0
- package/dist/assets/bauhaus-barlow-semibold.ttf +0 -0
- package/dist/assets/bauhaus-barlow.ttf +0 -0
- package/dist/assets/bauhaus-condensed-OFL.txt +93 -0
- package/dist/assets/bauhaus-condensed-bold.ttf +0 -0
- package/dist/assets/bauhaus-condensed-extrabold.ttf +0 -0
- package/dist/assets/bento-manrope-OFL.txt +93 -0
- package/dist/assets/bento-manrope.ttf +0 -0
- package/dist/assets/clay-grain.png +0 -0
- package/dist/assets/clay-rounded-OFL.txt +93 -0
- package/dist/assets/clay-rounded.ttf +0 -0
- package/dist/assets/neo-noir-corner-dark.png +0 -0
- package/dist/assets/neo-noir-corner-light.png +0 -0
- package/dist/assets/neo-noir-texture-dark.png +0 -0
- package/dist/assets/neo-noir-texture-light.png +0 -0
- package/dist/assets/organic-display-OFL.txt +93 -0
- package/dist/assets/organic-display.ttf +0 -0
- package/dist/assets/organic-icons-LICENSE.txt +21 -0
- package/dist/assets/organic-sans-OFL.txt +93 -0
- package/dist/assets/organic-sans.ttf +0 -0
- package/dist/ui-style-kit.css +55604 -6525
- package/dist/ui-style-kit.min.css +2 -2
- package/dist/ui-style-kit.visual.css +55443 -6942
- package/dist/ui-style-kit.visual.min.css +2 -2
- package/dist/ui-style-kit.with-bridge.css +55646 -6551
- package/dist/ui-style-kit.with-bridge.min.css +2 -2
- package/dist/visual/art-deco.css +7318 -0
- package/dist/visual/bauhaus.css +2 -2961
- package/dist/visual/bento.css +2 -2980
- package/dist/visual/brutalism.css +2679 -352
- package/dist/visual/clay.css +5 -0
- package/dist/visual/cyberpunk.css +4482 -781
- package/dist/visual/data-terminal.css +6182 -0
- package/dist/visual/editorial-luxe.css +6450 -0
- package/dist/visual/industrial-utility.css +7259 -0
- package/dist/visual/maximalist.css +4080 -1025
- package/dist/visual/minimal-saas.css +3305 -888
- package/dist/visual/neo-noir.css +5 -0
- package/dist/visual/neumorphism.css +3582 -975
- package/dist/visual/organic-modern.css +5 -0
- package/dist/visual/paper-editorial.css +7074 -0
- package/dist/visual/retro-glass.css +4426 -760
- package/dist/visual/retrofuturism.css +3676 -875
- package/dist/visual/tactile.css +4568 -1036
- package/dist/visual/technical-blueprint.css +6713 -0
- package/dist/visual/y2k.css +3672 -753
- package/docs/ART-DECO.md +80 -0
- package/docs/BAUHAUS.md +152 -0
- package/docs/BENTO.md +121 -0
- package/docs/CLAY.md +127 -0
- package/docs/DEMO-SHOWCASE.md +65 -0
- package/docs/ECOSYSTEM.md +9 -5
- package/docs/EDITORIAL-LUX.md +75 -0
- package/docs/INDUSTRIAL-UTILITY.md +131 -0
- package/docs/NATIVE-ELEMENTS.md +23 -17
- package/docs/NEO-NOIR.md +94 -0
- package/docs/ORGANIC-MODERN.md +91 -0
- package/docs/PAPER-EDITORIAL.md +63 -0
- package/docs/PUBLISHING.md +36 -11
- package/docs/RELEASE-2.4.0.md +88 -0
- package/docs/RETRO-GLASS.md +105 -0
- package/docs/STYLE-GUIDE.md +68 -13
- package/docs/TACTILE.md +38 -0
- package/docs/TECHNICAL-BLUEPRINT.md +60 -0
- package/docs/TOKENS.md +90 -4
- package/docs/superpowers/plans/2026-08-29-preset-identity-system-refinement.md +649 -0
- package/docs/superpowers/plans/2026-09-04-library-wide-theme-fallback-and-fidelity.md +331 -0
- package/docs/superpowers/specs/2026-08-29-preset-identity-system-refinement-design.md +212 -0
- package/docs/superpowers/specs/2026-09-04-library-wide-theme-fallback-and-fidelity-design.md +113 -0
- package/manifest.json +769 -20
- package/package.json +79 -14
- package/styles/art-deco.css +2068 -0
- package/styles/assets/bauhaus-barlow-OFL.txt +93 -0
- package/styles/assets/bauhaus-barlow-semibold.ttf +0 -0
- package/styles/assets/bauhaus-barlow.ttf +0 -0
- package/styles/assets/bauhaus-condensed-OFL.txt +93 -0
- package/styles/assets/bauhaus-condensed-bold.ttf +0 -0
- package/styles/assets/bauhaus-condensed-extrabold.ttf +0 -0
- package/styles/assets/bento-manrope-OFL.txt +93 -0
- package/styles/assets/bento-manrope.ttf +0 -0
- package/styles/assets/clay-grain.png +0 -0
- package/styles/assets/clay-rounded-OFL.txt +93 -0
- package/styles/assets/clay-rounded.ttf +0 -0
- package/styles/assets/neo-noir-corner-dark.png +0 -0
- package/styles/assets/neo-noir-corner-light.png +0 -0
- package/styles/assets/neo-noir-texture-dark.png +0 -0
- package/styles/assets/neo-noir-texture-light.png +0 -0
- package/styles/assets/organic-display-OFL.txt +93 -0
- package/styles/assets/organic-display.ttf +0 -0
- package/styles/assets/organic-icons-LICENSE.txt +21 -0
- package/styles/assets/organic-sans-OFL.txt +93 -0
- package/styles/assets/organic-sans.ttf +0 -0
- package/styles/bauhaus.css +1092 -87
- package/styles/bento.css +1413 -86
- package/styles/brutalism.css +493 -10
- package/styles/clay.css +1927 -0
- package/styles/compat-layout.css +1 -2
- package/styles/components.css +698 -33
- package/styles/content-overflow.css +434 -9
- package/styles/cyberpunk.css +2082 -46
- package/styles/data-terminal.css +1795 -0
- package/styles/editorial-luxe.css +1251 -0
- package/styles/industrial-utility.css +2449 -0
- package/styles/interactive-surface-bridge.css +40 -24
- package/styles/interactive-surface-theme.css +31 -13
- package/styles/maximalist.css +1410 -94
- package/styles/minimal-saas.css +675 -73
- package/styles/native-elements.css +396 -168
- package/styles/neo-noir.css +1332 -0
- package/styles/neumorphism.css +1155 -52
- package/styles/organic-modern.css +1353 -0
- package/styles/paper-editorial.css +1724 -0
- package/styles/retro-glass.css +870 -42
- package/styles/retrofuturism.css +1173 -55
- package/styles/tactile.css +2018 -84
- package/styles/technical-blueprint.css +1337 -0
- package/styles/theme-colors.css +796 -5
- package/styles/y2k.css +1182 -40
package/docs/PUBLISHING.md
CHANGED
|
@@ -1,28 +1,53 @@
|
|
|
1
1
|
# Publishing Guide
|
|
2
2
|
|
|
3
|
+
## 2.4.0 release workflow
|
|
4
|
+
|
|
5
|
+
The current checkout is a release candidate. [Release preparation notes](RELEASE-2.4.0.md)
|
|
6
|
+
record the current local scope and gates; existing visual-QA documents are historical
|
|
7
|
+
evidence, not proof that subsequent edits passed browser validation. Replace the
|
|
8
|
+
2.4.0 changelog's `Unreleased` marker with the actual release date at approved publication.
|
|
9
|
+
|
|
10
|
+
Update the tracked `wiki/` sources with the README and docs. Publishing those pages
|
|
11
|
+
to GitHub Wiki is a separate handoff, not a side effect of the CSS build. No jsdoc2md
|
|
12
|
+
documentation generator is configured in this package; reusable JavaScript helpers
|
|
13
|
+
use JSDoc-compatible comments, and the checked-in build owns generated CSS, manifests,
|
|
14
|
+
icons, README size measurements, and demo asset hashes.
|
|
15
|
+
|
|
16
|
+
Prepare `ui-style-kit-css@2.4.0` on its release branch, open a pull request against `main`, and merge only after the fast automated gate is green and any requested manual demo review is complete. The aligned companion set is `layout-style-css@3.1.0` and `interactive-surface-css@1.7.0`.
|
|
17
|
+
|
|
18
|
+
Do not push `v2.4.0` before the reviewed release commit is on `main`. A pushed version tag runs Release Version Alignment, which validates the tag/package/changelog contract and creates the GitHub Release; publishing that release triggers the protected npm workflow.
|
|
19
|
+
|
|
20
|
+
Release Version Alignment owns the fast automated release gate: lint, build, unit checks, the tagged Chromium release-smoke Playwright suite, and packed ecosystem preflight with `--skip-clean-install`. The visual-baseline suite, full UI matrix, and clean-install ecosystem matrix are manual escalation tools, not default push or publish blockers. The protected npm workflow intentionally does not rerun browser gates; it revalidates the immutable tag, package contracts, browser-free compatibility checks, companion commit reachability, the explicit release preflight with `--skip-clean-install`, npm token presence, npm owner authorization, and registry state before publishing.
|
|
21
|
+
|
|
3
22
|
## Dry run
|
|
4
23
|
|
|
5
24
|
```bash
|
|
6
25
|
npm run release:verify
|
|
7
26
|
```
|
|
8
27
|
|
|
9
|
-
`npm run release:verify` is the non-publishing release gate. It runs `npm run check`,
|
|
28
|
+
`npm run release:verify` is the non-publishing default release gate. It runs `npm run check`, the curated `npm run test:e2e` Chromium release smoke suite, the explicit UI-candidate release preflight with `--skip-clean-install`, `npm audit --audit-level=moderate`, and `npm run pack:dry-run`.
|
|
10
29
|
|
|
11
|
-
`npm run release:
|
|
30
|
+
`npm run release:verify:full` preserves the exhaustive historical gate for deliberate manual use. It runs `npm run check`, `npm run test:e2e:full`, `npm run test:axe:full`, `npm run test:visual:full`, the 36-block `npm run test:matrix` sequence, the full explicit UI-candidate release preflight, `npm audit --audit-level=moderate`, and `npm run pack:dry-run`.
|
|
12
31
|
|
|
13
|
-
|
|
32
|
+
Manual release review should open the checked-in demo, exercise the changed presets and responsive widths, and run `npm run test:visual:full` only when a visual-baseline audit is explicitly requested. The default PR, tag, and npm publish gates do not run the historical visual-baseline stack.
|
|
33
|
+
|
|
34
|
+
The local UI matrix stops after the first failing 100-case block. Every case has a stable global number, so diagnose each failure with `npm run test:matrix:case -- --case N`. The rest of that block has already completed; after its targeted failures pass, continue at the next untested block with `npm run test:matrix -- --from-block B`. Already green blocks do not run again. `npm run test:matrix:block -- --block B` and `npm run test:matrix:range -- --from N --to M` provide bounded alternatives. `test:matrix:raw` is reserved for the manual sharded automation workflow.
|
|
35
|
+
|
|
36
|
+
`npm run release:preflight` validates the shared manifests and compatibility contract, queries npm for every exact minimum/current version, resolves every export from the candidate tarball, checks maintained documentation against installed packages, and can run the current/minimum clean-install browser matrix when `--skip-clean-install` is omitted. Normal UI preflight remains strict and queries `ui-style-kit-css@2.4.0` alongside every other documented exact version. The release workflows pass `--candidate-package ui-style-kit-css`, which excludes only that exact current version while it is absent from npm and still requires every published minimum and companion version. The default PR and release workflows also pass `--skip-clean-install`; run `release:verify:full` or `check:ecosystem:packs` when clean-install browser proof is explicitly requested. The gate performs no publish, tag, release, or deployment mutation and is therefore safe to execute on pull requests.
|
|
37
|
+
|
|
38
|
+
`npm run check` rebuilds dist CSS, runs stylelint, executes package and API contracts, validates all theme/mode contrast pairs, enforces the Browserslist compatibility contract through `check:compat`, verifies CSS ownership, and confirms package metadata. Default browser gates cover the release-smoke Playwright set; visual-baseline and full matrix checks are explicit manual gates. `npm run check:ecosystem:packs` remains the full standalone, pairwise, and all-three packed package compatibility proof for canonical visual/theme/state/layout imports and deprecated bridge imports in both supported matrices. `npm run pack:dry-run` shows the exact files that would publish without re-entering `prepack`.
|
|
14
39
|
|
|
15
40
|
`npm run check:ecosystem:current` packs this repository and the sibling `../Layout-Style-CSS` and `../Interactive-Surface-CSS` checkouts. It extracts imports from the explicitly maintained current documentation in all three repositories and resolves every documented specifier from the installed tarballs. Deprecated UI bridge guides are validated as a separate supported-compatibility class; changelogs and Layout migration guides are reviewed historical material rather than current setup. Use `-- --ui-spec <specifier>`, `-- --layout-repo <path>`, `-- --layout-spec <specifier>`, `-- --interactive-spec <specifier>`, `-- --interactive-repo <path>`, `-- --layout-docs-repo <path>`, or `-- --interactive-docs-repo <path>` when validating different package or documentation sources.
|
|
16
41
|
|
|
17
42
|
`npm run check:ecosystem:minimum` downloads and repacks the declared minimum published runtime versions: `ui-style-kit-css@2.1.0`, `interactive-surface-css@1.5.0`, and `layout-style-css@3.0.0`. Those tarballs predate the additive shared-manifest policy introduced on the coordinated branches, so the minimum matrix validates their exact installed versions and published CSS entry points; current packed heads retain the stricter manifest-schema and current-documentation checks. `npm run check:ecosystem:packs` runs current first and minimum second.
|
|
18
43
|
|
|
19
|
-
The current matrix checks `ui-style-kit-css@2.
|
|
44
|
+
The current matrix checks `ui-style-kit-css@2.4.0` as the active candidate only while its exact npm version is absent, `interactive-surface-css@1.7.0` as a published release, and `layout-style-css@3.1.0` as a published release. The minimum published matrix remains `ui-style-kit-css@2.1.0`, `interactive-surface-css@1.5.0`, and `layout-style-css@3.0.0`.
|
|
20
45
|
|
|
21
46
|
Both matrices install fresh tarball consumers for UI only, Interaction only, Layout only, every pair, and all three. Chromium then checks selected theme paint, native and prefixed components, interaction focus/disabled/loading/selected/persistent states, Layout wrappers/primitives/recipes/personalities, console cleanliness, and an empty external-request log. Three text-free baselines under `tests/snapshots/clean-install/` cover the highest-risk integrated combinations.
|
|
22
47
|
|
|
23
48
|
Snapshot verification decodes PNG pixels, requires exact dimensions, ignores pixelmatch-classified antialias noise, uses a `0.1` color threshold, and permits at most `0.25%` differing pixels. The committed fixtures render at 720-721 by 261 pixels and therefore allow 469-470 changed pixels while rejecting the tested 42% meaningful change. A mismatch retains both `SCENARIO-actual.png` and `SCENARIO-diff.png` in the reported safe temporary directory. CI only validates committed baselines and never passes the generation flag. To intentionally refresh them locally, run the current checker with `--update-snapshots`, inspect all three images, and rerun without that flag.
|
|
24
49
|
|
|
25
|
-
The PR integration and npm-publish workflows read the companion repository and immutable revision pins from `ecosystem-compatibility.json`, then pack those coordinated reviewed artifacts. Advance those pins whenever a later release changes a companion contract. The current values pin the published Interactive Surface CSS merge at `
|
|
50
|
+
The PR integration and npm-publish workflows read the companion repository and immutable revision pins from `ecosystem-compatibility.json`, then pack those coordinated reviewed artifacts. Advance those pins whenever a later release changes a companion contract. The current values pin the published Interactive Surface CSS merge at `b48b8b9080e4b1d4e344b6749ab1969a2863b3d1` and the published Layout Style CSS merge at `afcb1fdf70d4635e35739e621ee1598400fed103`.
|
|
26
51
|
|
|
27
52
|
Use this exact bootstrap and merge sequence:
|
|
28
53
|
|
|
@@ -33,15 +58,13 @@ Use this exact bootstrap and merge sequence:
|
|
|
33
58
|
|
|
34
59
|
The workflows enforce immutable remote-object reachability and do not fall back to mutable branches or registry packages. The stable bootstrap ref lets companion workflows load the reviewed preflight implementation before the final UI commit references their heads.
|
|
35
60
|
|
|
36
|
-
`npm run build` uses exactly pinned CSS Tree parsing and Lightning CSS formatting/minification. Generated minified bundles retain the release banner while preserving grammar-sensitive selector and `calc()` whitespace.
|
|
61
|
+
`npm run build` synchronizes manifest-driven component and overflow inventories and uses exactly pinned CSS Tree parsing and Lightning CSS formatting/minification. Every transform resolves the package Browserslist policy through `browserslistToTargets`. Generated minified bundles retain the release banner while preserving grammar-sensitive selector and `calc()` whitespace.
|
|
37
62
|
|
|
38
63
|
The npm artifact is library-focused: `dist/`, `styles/`, docs, and metadata. Demo pages, favicon source assets, and social preview images remain checked in for GitHub Pages but are excluded from the tarball to keep package installs small.
|
|
39
64
|
|
|
40
65
|
## Publish
|
|
41
66
|
|
|
42
|
-
No package, tag, or registry release occurs without explicit approval.
|
|
43
|
-
|
|
44
|
-
The completed 2.0.4 correctness hotfix is historical context. Do not create replacement tags or registry releases merely to verify the coordinated compatibility contract.
|
|
67
|
+
No package, tag, or registry release occurs without explicit approval. Release tags must use the `v<package-version>` form and point to the reviewed commit on `main`.
|
|
45
68
|
|
|
46
69
|
Run the coordinated checked-out ecosystem proof from this repository:
|
|
47
70
|
|
|
@@ -53,7 +76,9 @@ npm run check:ecosystem:packs -- --layout-repo ../Layout-Style-CSS --interactive
|
|
|
53
76
|
npm publish
|
|
54
77
|
```
|
|
55
78
|
|
|
56
|
-
`prepublishOnly` runs `npm run release:verify`, so a direct `npm publish` still has the
|
|
79
|
+
`prepublishOnly` runs `npm run release:verify`, so a direct `npm publish` still has the default fast release gate. For GitHub releases, push or dispatch the matching package tag, such as `v2.4.0`, only after the release PR is merged. The release workflows verify that `package.json`, `package-lock.json`, `CHANGELOG.md`, generated dist banners, and ecosystem pins are aligned before publishing. Dispatch the protected npm workflow from the current `main` workflow file when recovering publication for a release that has already passed Release Version Alignment.
|
|
80
|
+
|
|
81
|
+
The repository `NPM_TOKEN` secret must authenticate to npm as a user that appears in `npm owner ls ui-style-kit-css`. If the token belongs to another npm account or lacks package publish rights, npm may report a misleading registry `E404` at publish time.
|
|
57
82
|
|
|
58
83
|
## Versioning
|
|
59
84
|
|
|
@@ -63,4 +88,4 @@ npm run release:minor
|
|
|
63
88
|
npm run release:major
|
|
64
89
|
```
|
|
65
90
|
|
|
66
|
-
Use patch for fixes, minor for new themes
|
|
91
|
+
Use patch for compatible fixes, minor for new themes, presets, component capabilities, or browser-support contracts, and major for incompatible public API changes. The complete preset-specific native-control identity and browser coverage contract make `2.4.0` a minor release.
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# v2.4.0 release preparation
|
|
2
|
+
|
|
3
|
+
Status: local release candidate; not published by this task.
|
|
4
|
+
|
|
5
|
+
## Compatibility contract
|
|
6
|
+
|
|
7
|
+
- Package, lockfile, and manifest remain version `2.4.0`.
|
|
8
|
+
- All 20 presets, 20 shared themes, three modes, 29 semantic selectors, and v2 import paths remain supported.
|
|
9
|
+
- `data-ui` and `data-mode` are required; omit `data-theme` for a native palette.
|
|
10
|
+
- Named themes retain shared `--usk-*` color ownership. Native demo edits target actual preset RGB variables, including material-specific colors.
|
|
11
|
+
- The typed `--ui-color-bg` resolves through `--usk-native-bg` to the active preset background.
|
|
12
|
+
- Existing companion compatibility pins remain unchanged; this task does not upgrade sibling libraries.
|
|
13
|
+
|
|
14
|
+
## Prepared changes
|
|
15
|
+
|
|
16
|
+
The accumulated candidate includes reference-driven preset refinements and native
|
|
17
|
+
control coverage. This audit adds shared trust-seal text inheritance, the native
|
|
18
|
+
background handshake fix, material-aware palette editing, validated demo deep
|
|
19
|
+
links, and Organic Modern native-light contrast corrections. Recent Maximalist and
|
|
20
|
+
Tactile annotation corrections remain included. Generated documentation and demo
|
|
21
|
+
entrypoints now use the same bounded file-lock retries as distribution CSS.
|
|
22
|
+
The manifest now inventories existing Bento, Bauhaus, Clay, and Tactile workspace
|
|
23
|
+
classes that were absent from capability metadata. Organic's duplicate `field`
|
|
24
|
+
entry was removed from preset extras because it remains a universal capability;
|
|
25
|
+
authored component behavior is unchanged by these metadata corrections.
|
|
26
|
+
|
|
27
|
+
The default demo presents one unified kit with a style-specific gallery. Industrial
|
|
28
|
+
Utility's instruments and local alarm flow remain visible. Original complete boards
|
|
29
|
+
are available through `?view=reference`, not duplicated above the public showcase.
|
|
30
|
+
|
|
31
|
+
README, token/native/style guides, changelog, contributor/publishing instructions,
|
|
32
|
+
and tracked wiki sources describe the same native/theme model. Focused CSS bundle
|
|
33
|
+
sizes and demo asset hashes are regenerated from actual build output.
|
|
34
|
+
|
|
35
|
+
## Verification boundary
|
|
36
|
+
|
|
37
|
+
Focused regression checks are run per changed behavior. Final local checks cover
|
|
38
|
+
build output, lint, syntax, documented imports, semantic and package contracts,
|
|
39
|
+
contrast, browser-free compatibility, and ownership. Record actual results below;
|
|
40
|
+
do not infer current results from old snapshots or prior design-QA reports.
|
|
41
|
+
|
|
42
|
+
Browser navigation was blocked by an admin-policy verification error in the Codex
|
|
43
|
+
browser path. No alternate browser or file-URL workaround was used. Rendered
|
|
44
|
+
desktop/mobile comparisons, browser interactions, Axe, the 3,600-case engine
|
|
45
|
+
matrix, and packed-browser ecosystem verification remain unverified in this audit.
|
|
46
|
+
|
|
47
|
+
### Final local results
|
|
48
|
+
|
|
49
|
+
- Build: passed; default, visual, all 20 focused, and bridge bundles regenerated, together with manifest snapshots, README measurements, and asset hashes.
|
|
50
|
+
- CSS lint: passed after the final source and tooling changes.
|
|
51
|
+
- Contrast: passed all 1,200 named-theme combinations and 60 native fallback palettes. This is token-pair arithmetic, not rendered accessibility certification.
|
|
52
|
+
- CSS compatibility: passed 26 generated entrypoints against 60 resolved browser targets; this is a parser/policy check, not execution in those browsers.
|
|
53
|
+
- CSS ownership: passed 35,799 declarations with zero reviewed exceptions.
|
|
54
|
+
- Package integrity: passed; exports, tracked documentation links, wiki routes, release-version surfaces, semantic producer contracts, measured bundle sizes, and demo asset hashes have focused checks.
|
|
55
|
+
- Focused regressions: passed native-material inventory/edit/export/reset isolation, None/null selection, deep links, seal foreground inheritance, all-preset background mapping, Organic contrast, and generated-file retry/error handling. Checks were run individually; no full unit or CI suite was run.
|
|
56
|
+
- Dependency audit: `npm audit --audit-level=moderate` passed with zero reported vulnerabilities after the targeted `fast-uri` patch below.
|
|
57
|
+
- Packaging dry run: `npm pack --dry-run --ignore-scripts --json` passed with 125 files (approximately 12.6 MiB packed / 31.4 MiB unpacked). The release/demo/Tactile guides are included; demo, test, wiki, and temporary output directories are excluded. Lifecycle hooks were disabled, so this was inventory validation, not the full prepublish chain.
|
|
58
|
+
|
|
59
|
+
### Development-tooling security correction
|
|
60
|
+
|
|
61
|
+
The installed chain was `stylelint → table → ajv → fast-uri@3.1.5`. AJV uses the
|
|
62
|
+
URI resolver for schema references; no URI fetch path or runtime JavaScript
|
|
63
|
+
dependency was established in this CSS package. The confirmed finding was the
|
|
64
|
+
vulnerable installed tooling and failed audit gate, not a demonstrated application
|
|
65
|
+
SSRF endpoint.
|
|
66
|
+
|
|
67
|
+
The security-fix checklist kept this change to the existing override, lockfile,
|
|
68
|
+
and focused regression coverage: `fast-uri@3.1.6`, within AJV's supported v3 range.
|
|
69
|
+
The upstream patch addresses [URI canonicalization advisories](https://github.com/fastify/fast-uri/releases/tag/v3.1.6).
|
|
70
|
+
The malformed-IPv6 regression failed before the update and passed afterward;
|
|
71
|
+
encoded schemes, nested host escapes, and scheme-relative IDN normalization also
|
|
72
|
+
passed. Ordinary URI resolution, AJV schema references, the exact override
|
|
73
|
+
contract, and CSS lint passed. No network requests were made by these URI fixtures.
|
|
74
|
+
|
|
75
|
+
Only one installed package changed. Other overrides, direct dependencies, public
|
|
76
|
+
CSS imports, and consumer APIs were preserved. Browser and packed-consumer proof
|
|
77
|
+
remain outside this narrow tooling fix and are still pending for the release.
|
|
78
|
+
|
|
79
|
+
## Publication handoff
|
|
80
|
+
|
|
81
|
+
Do not tag, publish, or merge on the strength of static checks alone. Complete the
|
|
82
|
+
required browser and packed-consumer gates using [Publishing](PUBLISHING.md), review
|
|
83
|
+
the full candidate diff, and obtain the requested release authority. Set the real
|
|
84
|
+
release date in the changelog at that handoff. The tracked `wiki/` sources still
|
|
85
|
+
need a separate hosted-wiki publication step.
|
|
86
|
+
|
|
87
|
+
No commit, push, release tag, GitHub Release, npm publication, or deployment is part
|
|
88
|
+
of this local preparation task.
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
# Retro Glass
|
|
2
|
+
|
|
3
|
+
The `retro-glass` preset implements the retained RetroGlass light and dark element
|
|
4
|
+
boards with rounded glass surfaces, brushed chrome, inset inputs, and glossy actions.
|
|
5
|
+
All components use the `rg-*` API. The shared semantic API remains unchanged.
|
|
6
|
+
|
|
7
|
+
```html
|
|
8
|
+
<link rel="stylesheet" href="ui-style-kit-css/retro-glass.css">
|
|
9
|
+
<main data-ui="retro-glass" data-mode="dark">
|
|
10
|
+
<section class="rg-panel">
|
|
11
|
+
<h2 class="rg-section-title">Library</h2>
|
|
12
|
+
<label class="rg-field">
|
|
13
|
+
<span class="rg-label">Search documents</span>
|
|
14
|
+
<input class="rg-input" type="search">
|
|
15
|
+
</label>
|
|
16
|
+
<button class="rg-button rg-button-primary">Apply</button>
|
|
17
|
+
</section>
|
|
18
|
+
</main>
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Themes
|
|
22
|
+
|
|
23
|
+
Omit `data-theme` for the reference palette. Set `data-theme` to any supported
|
|
24
|
+
scheme, such as `arctic-indigo`, to use semantic `--usk-*-rgb` colors. Switch
|
|
25
|
+
`data-mode` between `light`, `dark`, and `contrast` without changing markup.
|
|
26
|
+
Custom semantic tokens continue to override preset fallbacks.
|
|
27
|
+
|
|
28
|
+
The demo's mode pill activates the reference palette and updates the color-theme
|
|
29
|
+
selector. Choosing a shared theme restores that scheme. The token editor supports
|
|
30
|
+
both paths; reference overrides are scoped to the active preset and mode.
|
|
31
|
+
|
|
32
|
+
Default controls follow a 36px rhythm with 6px corners. Panels use 10px corners,
|
|
33
|
+
window chrome uses 14px, and badges, switches, and tracks use pills. Touch input
|
|
34
|
+
expands interactive targets to at least 44px. Application text defaults to 14px;
|
|
35
|
+
the desktop specimen uses compact documentation typography from the reference.
|
|
36
|
+
|
|
37
|
+
Reference accent channels are retained. Muted text and essential borders use
|
|
38
|
+
stronger foregrounds for contrast. Glossy actions have a dedicated foreground
|
|
39
|
+
because their shaded material differs from a flat semantic swatch.
|
|
40
|
+
|
|
41
|
+
## Component Coverage
|
|
42
|
+
|
|
43
|
+
| Board group | Public classes and states |
|
|
44
|
+
| --- | --- |
|
|
45
|
+
| Action states | `rg-button`, `rg-button-primary`, `rg-button-secondary`, `rg-button-ghost`, `rg-button-danger`, `rg-icon-button`; default, hover, pressed, loading, disabled |
|
|
46
|
+
| Form inputs | `rg-field`, `rg-label`, `rg-input`, `rg-select`, `rg-textarea`, `rg-input-wrap`, `rg-input-icon`, `rg-helper`, `rg-error-text` |
|
|
47
|
+
| Choices and tags | `rg-choice`, `rg-switch`, `rg-switch-track`, `rg-switch-thumb`, `rg-segmented`, `rg-segment`, `rg-chip`, `rg-chip-danger`, `rg-chip-warning` |
|
|
48
|
+
| Select and upload | `rg-dropdown`, `rg-option`, `rg-tags`, `rg-file` |
|
|
49
|
+
| Ranges and progress | `rg-range`, `rg-range-critical`, `rg-progress`, `rg-progress-bar`, `rg-progress-danger`, `rg-meter`, `rg-stepper`, `rg-step` |
|
|
50
|
+
| Feedback | `rg-alert` and success/warning/danger modifiers, `rg-toast`, `rg-spinner`, `rg-skeleton` |
|
|
51
|
+
| Navigation | `rg-breadcrumb`, `rg-tabs`, `rg-tab`, `rg-nav`, `rg-nav-link`, `rg-pagination`, `rg-pagination-page` |
|
|
52
|
+
| Data | `rg-table`, `rg-badge` and semantic modifiers, `rg-avatar`, `rg-avatar-danger`, `rg-avatar-neutral`, `rg-avatar-group` |
|
|
53
|
+
| Overlays and disclosure | `rg-tooltip`, `rg-popover`, `rg-modal`, `rg-modal-actions`, `rg-accordion` |
|
|
54
|
+
| Foundations | `rg-title`, `rg-heading`, `rg-section-title`, `rg-overline`, `rg-token-swatch`, `rg-code`, `rg-list`, `rg-quote`, existing `rg-console` |
|
|
55
|
+
|
|
56
|
+
The library keeps canonical single-hyphen modifiers, translating reference names
|
|
57
|
+
such as `rg-button--primary` to `rg-button-primary`. The template's pagination
|
|
58
|
+
item becomes `rg-pagination-page`; the existing `rg-page` layout shell is preserved.
|
|
59
|
+
Every published preset extra is listed in `manifest.json`.
|
|
60
|
+
|
|
61
|
+
## State And Interaction Contracts
|
|
62
|
+
|
|
63
|
+
- Use native `disabled`, `aria-busy`, `aria-invalid`, `aria-selected`, and
|
|
64
|
+
`aria-current` attributes. Static `.is-hover`, `.is-focus`, `.is-pressed`,
|
|
65
|
+
`.is-loading`, and `.is-disabled` classes are available for specimens.
|
|
66
|
+
- Associate visible error text with its input using `aria-describedby`.
|
|
67
|
+
- Keep switch inputs focusable. Include the `rg-switch-thumb` inside the track.
|
|
68
|
+
- Set `--rg-value` to a percentage for range fill and meter position. Update it
|
|
69
|
+
alongside the native input value and an accessible `output`.
|
|
70
|
+
- Set `--rg-progress-value` on `rg-progress-bar`. Supply the progressbar name and
|
|
71
|
+
`aria-valuemin`, `aria-valuemax`, and `aria-valuenow` on the track.
|
|
72
|
+
- Use native `dialog.showModal()` for modal behavior and native `details` for
|
|
73
|
+
disclosure. A visual `rg-modal` class alone does not create a focus trap.
|
|
74
|
+
- Set `--rg-token-swatch-color` to the semantic color shown by a token swatch.
|
|
75
|
+
- Standalone, semantic, and native busy indicators share a complete circular
|
|
76
|
+
track with one highlighted quadrant. Busy controls reserve a non-shrinking
|
|
77
|
+
16px indicator; reduced-motion preferences stop rotation.
|
|
78
|
+
- Disabled choices retain readable labels and use dashed outlines to distinguish
|
|
79
|
+
their state without relying on faded text. Keep the native `disabled` attribute.
|
|
80
|
+
- Anchor buttons retain the same contrast-safe foreground as button elements.
|
|
81
|
+
Marketing seals use opaque chrome with inherited text color.
|
|
82
|
+
|
|
83
|
+
CSS supplies visual states; applications own interaction behavior. The demo adds
|
|
84
|
+
roving keyboard focus for tabs and listbox options, file selection and drop,
|
|
85
|
+
range output, filter chips, pagination, a menu, and a native modal dialog.
|
|
86
|
+
Examples use inert local data and do not upload or delete real documents.
|
|
87
|
+
|
|
88
|
+
## Preset Isolation
|
|
89
|
+
|
|
90
|
+
The demo renders preset extras only for their owner. All exclusive regions use
|
|
91
|
+
`data-preset-only` and a shared visibility synchronizer. Changing the style removes
|
|
92
|
+
the prior preset's generated markup; presets with no extras show no extras region.
|
|
93
|
+
This rule applies to all presets, including the Cyberpunk and Retro Glass boards.
|
|
94
|
+
|
|
95
|
+
## Assets
|
|
96
|
+
|
|
97
|
+
The demo vendors Lucide 0.468.0 icons in `demo/assets/lucide`, including the upstream
|
|
98
|
+
license. The build generates `demo/demo-icons.js` from those source files so icons
|
|
99
|
+
work offline through either HTML entry point, including `file:` URLs.
|
|
100
|
+
|
|
101
|
+
The semantic demo settings icon uses a 24px SVG in a stable 44px control across
|
|
102
|
+
presets. Retro Glass feature checks use a heavier SVG stroke inside the medallion.
|
|
103
|
+
|
|
104
|
+
`npm run build` regenerates the default, visual, focused, and bridge bundles,
|
|
105
|
+
containment foundations, demo icon asset, and README bundle-size metadata.
|
package/docs/STYLE-GUIDE.md
CHANGED
|
@@ -2,22 +2,77 @@
|
|
|
2
2
|
|
|
3
3
|
| UI style | Best for |
|
|
4
4
|
|---|---|
|
|
5
|
-
| Minimal SaaS |
|
|
6
|
-
| Bento UI |
|
|
7
|
-
| Maximalist / Playful | Creators, entertainment
|
|
8
|
-
| Bauhaus / Swiss Modern | Agencies,
|
|
9
|
-
|
|
|
10
|
-
| Neumorphism |
|
|
11
|
-
| Retrofuturism |
|
|
12
|
-
| Brutalism | Bold
|
|
13
|
-
| Cyberpunk | Security, gaming, encryption,
|
|
14
|
-
| Y2K | Nostalgic, playful, music/
|
|
15
|
-
| Retro Glass | Futuristic
|
|
16
|
-
|
|
17
|
-
|
|
5
|
+
| Minimal SaaS | Dense dashboards, admin tools, and focused SaaS workflows |
|
|
6
|
+
| Bento UI | Friendly product surfaces, feature mosaics, and showcase dashboards |
|
|
7
|
+
| Maximalist / Playful | Creators, entertainment, bold client sites |
|
|
8
|
+
| Bauhaus / Swiss Modern | Agencies, editorial layouts, design-forward brands |
|
|
9
|
+
| Skeuomorphic / Tactile | Physical workspace configuration, control panels and instrument-like product UI |
|
|
10
|
+
| Neumorphism | Sculpted same-surface dashboards and quiet configuration workflows |
|
|
11
|
+
| Retrofuturism | Atomic-age dashboards, instrument panels, and configuration workspaces |
|
|
12
|
+
| Brutalism | Bold creative websites |
|
|
13
|
+
| Cyberpunk | Security, gaming, encryption, tech demos |
|
|
14
|
+
| Y2K | Nostalgic, playful, fashion/music/event sites |
|
|
15
|
+
| Retro Glass | Futuristic glass dashboards and hero sections |
|
|
16
|
+
| Editorial Luxe | Luxury brands, architecture, hospitality, premium editorial sites |
|
|
17
|
+
| Organic Modern | Wellness, sustainability, hospitality, natural product brands |
|
|
18
|
+
| Industrial Utility | Operations software, manufacturing, logistics, fleet and equipment systems |
|
|
19
|
+
| Technical Blueprint | Engineering, architecture, technical documentation, scientific tools |
|
|
20
|
+
| Art Deco | Luxury, hospitality, heritage brands, events and distinctive showcases |
|
|
21
|
+
| Clay | Friendly SaaS, collaborative tools, education and approachable product sites |
|
|
22
|
+
| Data Terminal | Operator consoles, telemetry, infrastructure, monitoring and developer tools |
|
|
23
|
+
| Paper Editorial | News, magazines, journals, cultural sites and story-led publishing |
|
|
24
|
+
| Neo-Noir | Cinematic portfolios, nightlife, premium creative studios and dramatic product sites |
|
|
25
|
+
|
|
26
|
+
All styles share the same 20 color schemes through `styles/theme-colors.css`, so changing `data-theme` affects the active color scheme independently from the selected UI treatment.
|
|
27
|
+
|
|
28
|
+
Omit `data-theme` to use the chosen preset's native light, dark, or contrast colors.
|
|
29
|
+
The [demo guide](DEMO-SHOWCASE.md) explains the unified style-specific gallery and
|
|
30
|
+
optional reference boards. Native material colors can be edited in the workbench
|
|
31
|
+
without assigning a shared theme or changing geometry.
|
|
18
32
|
|
|
19
33
|
Use `data-mode="contrast"` for high-contrast variants and pair it with semantic HTML for best accessibility outcomes.
|
|
20
34
|
|
|
35
|
+
## Preset identity and component roles
|
|
36
|
+
|
|
37
|
+
UI presets own geometry, material, spacing, depth, and typographic character. Color schemes own semantic color roles. A preset should therefore remain recognizable when its `data-theme` changes, while every component continues to consume the active theme tokens instead of fixed artwork colors.
|
|
38
|
+
|
|
39
|
+
| UI style | Repeated component identity |
|
|
40
|
+
|---|---|
|
|
41
|
+
| Minimal SaaS | Flat neutral modules, fine rules, tight radii, compact controls and negligible elevation |
|
|
42
|
+
| Bento UI | Large rounded tiles, theme-tinted mosaic washes, nested highlights, friendly typography and soft elevation |
|
|
43
|
+
| Maximalist / Playful | Punk-collage paper panels, hard ink strokes and loud condensed type |
|
|
44
|
+
| Bauhaus / Swiss Modern | Strict grids, heavy rules, primary geometry, flat construction and condensed uppercase type |
|
|
45
|
+
| Skeuomorphic / Tactile | Paper plates, serif headings, compact uppercase labels, dark instrument navigation, hard keylines, chamfered keycaps, squared lever thumbs and segmented gauges |
|
|
46
|
+
| Neumorphism | Borderless same-surface shells, generous radii, quiet modern type, opposing light/dark extrusion, deeply concave fields and tracks, and visibly pressed actions |
|
|
47
|
+
| Retrofuturism | Rounded enamel shells, nested metallic rims, recessed instrument bays, oval actions, jewel-light feedback, condensed display type, calibrated ranges and segmented progress gauges |
|
|
48
|
+
| Brutalism | Square full-bleed grids, heavy rules, numbered modules, blunt controls and segmented meters |
|
|
49
|
+
| Cyberpunk | Chamfered HUD panels, clipped controls, technical condensed type and signal-colored edges |
|
|
50
|
+
| Y2K | Dense portal panels, 1px bevels, title bars, system typography and segmented indicators |
|
|
51
|
+
| Retro Glass | Brushed application chrome, glossy navigation, beveled controls, glass panes and dark dock treatment |
|
|
52
|
+
| Editorial Luxe | Didone hierarchy, double rules, rigid editorial geometry and restrained couture material |
|
|
53
|
+
| Organic Modern | Warm material surfaces, serif identity type, fine hairlines, asymmetry and leaf-tipped details |
|
|
54
|
+
| Industrial Utility | Metal-framed panels, recessed instruments, mechanical actions, safety gauges and technical type |
|
|
55
|
+
| Technical Blueprint | Drafting grids, technical linework, square measured controls, annotations and calibrated geometry |
|
|
56
|
+
| Art Deco | Stepped symmetry, metallic double keylines, fanburst geometry, elegant display type and jewel controls |
|
|
57
|
+
| Clay | A continuous sculpted slab with soft mineral surfaces, raised rounded controls and carved seams |
|
|
58
|
+
| Data Terminal | A dense 1px command grid with mono typography, bracketed actions and strict semantic signals |
|
|
59
|
+
| Paper Editorial | A physical field-manual sheet with binder details, index tabs, print rules, condensed headings and monospaced data |
|
|
60
|
+
| Neo-Noir | Cinematic slants, trapezoid controls, diagonal cuts, subtle grain and amber, teal and red semantic signaling |
|
|
61
|
+
|
|
62
|
+
For filled service actions, compose `<prefix>-button`, `<prefix>-button-primary`, and `<prefix>-button-cut`. For framed callout actions, compose `<prefix>-button` and `<prefix>-button-outline-heavy`. These modifiers are independent; the library does not expose a `button-cta` class. Carry the same preset identity into service cards, media scrims, feature strips, callout bars, native actions, and dialogs rather than treating each specimen as isolated artwork.
|
|
63
|
+
|
|
64
|
+
Minimal SaaS and Bento deliberately share semantic roles but not presentation. Minimal SaaS keeps controls near `2.375rem`, uses narrow spacing and flat bordered modules, and reserves theme color for action and state emphasis. Bento uses `2.75rem` controls and `1.5rem` tiles, applies theme-derived primary, accent and secondary washes, and reinforces the mosaic hierarchy with inset highlights and soft shadows. This distinction must remain visible in every theme and mode.
|
|
65
|
+
|
|
66
|
+
Neumorphism and Tactile also share component roles without sharing material. Neumorphism removes visible keylines and sculpts cards and actions outward from one theme-derived surface while fields, tracks, table cells, and pressed states sink inward through paired light and dark shadows. Tactile keeps a denser paper-workspace rhythm: serif headings sit above compact uppercase labels, framed plates use visible rules and shallow chamfers, actions behave like raised keycaps, and dark troughs hold squared thumbs and segmented progress gauges. Theme channels may recolor both systems, but those geometry, typography, elevation, inset-depth, feedback, and table contracts remain stable.
|
|
67
|
+
|
|
68
|
+
Retrofuturism uses a mid-century atomic appliance language rather than cyberpunk scanlines or generic neon glass. Light mode reads as bright enamel with softly recessed instrument wells; dark mode reads as deep enamel with stronger recess depth. Both retain nested metallic keylines, rounded equipment housings, condensed display typography, compact uppercase labels, oval mechanical actions, dial-like range thumbs, and segmented jewel-lamp progress. Theme channels recolor the enamel, instruments, actions, and status lamps without changing that material or geometry contract.
|
|
69
|
+
|
|
70
|
+
Every preset must carry its contract through the same complete role set: buttons, fields, choices, navigation, cards, panels, tables, badges, alerts, tooltips, dialogs, ranges, progress, meters, service cards, feature strips, callouts, loading, disabled, focus and pressed states. The registry and regression suite compare typography, density, geometry, material, feedback and data presentation pairwise; theme changes are expected to alter paint while those structural identity axes remain stable.
|
|
71
|
+
|
|
72
|
+
The registry also exposes executable reference traits for all six identity axes. Each trait identifies an authored selector, property, and required value fragment, so the tests verify real CSS rather than descriptive metadata. Browser identity checks are split by preset, viewport, mode, and pair to support exact reruns without replaying unrelated passing cases.
|
|
73
|
+
|
|
74
|
+
Preset-specific grids must size from their own container. Bento feature tiles, for example, use intrinsic columns and only introduce a feature span when their container can support it, preventing metric labels from collapsing into vertical text.
|
|
75
|
+
|
|
21
76
|
## Visual regression baseline
|
|
22
77
|
|
|
23
78
|
The repository includes optional Playwright visual smoke checks:
|
package/docs/TACTILE.md
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Tactile workspace components
|
|
2
|
+
|
|
3
|
+
Use `data-ui="tactile"` and `data-mode="light"`, `dark`, or `contrast` on the
|
|
4
|
+
owning root. Omit `data-theme` for the native material palette; a named theme
|
|
5
|
+
repaints the existing materials through shared `--usk-*-rgb` roles.
|
|
6
|
+
|
|
7
|
+
Import `ui-style-kit-css/tactile.css` for the complete preset or
|
|
8
|
+
`ui-style-kit-css/visual/tactile.css` for the focused visual distribution.
|
|
9
|
+
Existing semantic `.ui-*` components, native controls, and `tactile-*` classes
|
|
10
|
+
remain available without the workspace composition.
|
|
11
|
+
|
|
12
|
+
## Advanced workspace inventory
|
|
13
|
+
|
|
14
|
+
The authored workspace classes are listed in
|
|
15
|
+
`manifest.classApi.presetExtras.tactile` so consuming tools can discover them.
|
|
16
|
+
They are an optional preset-specific composition, not new universal `.ui-*` aliases.
|
|
17
|
+
|
|
18
|
+
| Area | Classes (with the `tactile-` prefix) |
|
|
19
|
+
| --- | --- |
|
|
20
|
+
| Frame and navigation | `workspace-shell`, `workspace-sidebar`, `workspace-menu`, `workspace-link`, `workspace-icon`, `workspace-sidebar-note` |
|
|
21
|
+
| Identity | `workspace-brand`, `workspace-brand-mark`, `workspace-header`, `workspace-title` |
|
|
22
|
+
| Main settings | `workspace-main`, `workspace-body`, `workspace-settings`, `workspace-row`, `workspace-fields`, `workspace-switches` |
|
|
23
|
+
| Instrument panels | `workspace-security`, `workspace-readiness`, `workspace-gauge`, `workspace-gauge-key`, `workspace-shelf`, `workspace-progress` |
|
|
24
|
+
|
|
25
|
+
Keep real links, labels, inputs, and buttons inside these visual containers.
|
|
26
|
+
Use `aria-current="page"` for an active workspace link. CSS supplies appearance;
|
|
27
|
+
application code owns navigation, settings persistence, and instrument values.
|
|
28
|
+
|
|
29
|
+
## Material colors and accessibility
|
|
30
|
+
|
|
31
|
+
Native mode exposes preset material RGB channels such as paper and ink in the
|
|
32
|
+
[demo workbench](DEMO-SHOWCASE.md). Native exports target `--tactile-*-rgb`;
|
|
33
|
+
named-theme exports retain `--usk-*-rgb`. The shared background token resolves
|
|
34
|
+
to the final Tactile background instead of requiring an explicit theme.
|
|
35
|
+
|
|
36
|
+
Trust-seal captions inherit their paired foreground, including the dark
|
|
37
|
+
instrument treatment. Recheck contrast after custom palette edits. Passing token
|
|
38
|
+
checks does not replace keyboard, zoom, screen-reader, and rendered contrast QA.
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# Technical Blueprint
|
|
2
|
+
|
|
3
|
+
The Technical Blueprint preset follows the retained Technical Blueprint element
|
|
4
|
+
boards and design guide: square controls, a 16px construction grid, drafting
|
|
5
|
+
registration marks, calibrated line weights, and restrained semantic ink colors.
|
|
6
|
+
The canonical public prefix is `blueprint-`; source-template `tb-` aliases are
|
|
7
|
+
not exported.
|
|
8
|
+
|
|
9
|
+
## Theme and Material
|
|
10
|
+
|
|
11
|
+
Set `data-ui="technical-blueprint"` and `data-mode="light"` or `"dark"` on the
|
|
12
|
+
containing element. Existing `--usk-*` semantic tokens feed the `--blueprint-*`
|
|
13
|
+
aliases, so changing `data-theme` changes color without replacing drafting
|
|
14
|
+
geometry. In the demo, **Use reference palette** selects the guide's fallback
|
|
15
|
+
colors instead of a named color theme. Primary action fill and foreground are
|
|
16
|
+
paired separately from annotation ink for readable labels in both modes.
|
|
17
|
+
|
|
18
|
+
## Component Surface
|
|
19
|
+
|
|
20
|
+
The manifest is the authoritative class inventory. Alongside the shared button,
|
|
21
|
+
input, card, table, alert, badge, tooltip, progress, spinner, and switch families,
|
|
22
|
+
Technical Blueprint exports these preset-only components:
|
|
23
|
+
|
|
24
|
+
- Sheet frame, datum marker, line sample, section title, overline, token swatch.
|
|
25
|
+
- Choice, input wrapper/icon, helper/error text, range, critical range, meter.
|
|
26
|
+
- Dropdown/option, file upload surface, tags, chips and semantic chip variants.
|
|
27
|
+
- Segmented controls, tabs, breadcrumb, pagination and pagination page.
|
|
28
|
+
- Stepper/step, revision progress, toast, skeleton.
|
|
29
|
+
- Avatars and groups, code, quote, list, metric, empty state.
|
|
30
|
+
- Popover, modal/actions, accordion.
|
|
31
|
+
|
|
32
|
+
`blueprint-page` remains the page shell. Pagination items use
|
|
33
|
+
`blueprint-pagination-page` to avoid changing that existing API.
|
|
34
|
+
|
|
35
|
+
## Demo and Accessibility
|
|
36
|
+
|
|
37
|
+
The demo includes all ten reference groups: actions, forms, choices, selects and
|
|
38
|
+
upload, ranges and progress, alerts and loading, navigation, data display,
|
|
39
|
+
overlays, and foundations. Additional code, quote, metric, and empty-state
|
|
40
|
+
examples live in the preset-specific extras section. Every preset-owned demo
|
|
41
|
+
region is hidden when a different preset is selected.
|
|
42
|
+
|
|
43
|
+
The specimen uses labeled native inputs, named icon buttons, keyboard-operated
|
|
44
|
+
tabs and listboxes, a native dialog, file selection, and live range outputs.
|
|
45
|
+
Sample actions are local demonstrations; they do not upload or delete data.
|
|
46
|
+
CSS alone provides presentation, not dialog/listbox application behavior.
|
|
47
|
+
Controls retain visible focus, disabled-state cues, reduced-motion handling,
|
|
48
|
+
forced-color fallbacks, and 44px touch targets on coarse-pointer devices.
|
|
49
|
+
|
|
50
|
+
Native date/time formatting, file pickers, font rasterization, and responsive
|
|
51
|
+
reflow follow the browser rather than reproducing static illustration pixels.
|
|
52
|
+
|
|
53
|
+
## Focused Verification
|
|
54
|
+
|
|
55
|
+
- `node --test tests/technical-blueprint-template.test.js`
|
|
56
|
+
- `npx playwright test tests/e2e/technical-blueprint-template.spec.js --project=chromium`
|
|
57
|
+
|
|
58
|
+
The browser checks use the generated bundle, verify all preset-only regions,
|
|
59
|
+
audit both reference modes with axe, and exercise keyboard behavior, token
|
|
60
|
+
overrides, and mobile overflow. Rebuild distribution CSS before browser checks.
|
package/docs/TOKENS.md
CHANGED
|
@@ -8,13 +8,44 @@ shared scheme channels -> prefixed aliases -> UI rules
|
|
|
8
8
|
|
|
9
9
|
`styles/theme-colors.css` defines the active scheme and mode once as `--usk-*` RGB channels. Each UI style maps those shared channels to its public prefix, then component rules consume prefixed functional variables. `styles/native-elements.css` owns native HTML fallback selectors and consumes `--usk-native-*` tokens that each preset maps back to its own public variables.
|
|
10
10
|
|
|
11
|
+
## Demo palette workbench
|
|
12
|
+
|
|
13
|
+
The demo starts with **Color Theme: None — style defaults**. This omits `data-theme`
|
|
14
|
+
and displays the selected preset's native light, dark, or contrast palette. All 20
|
|
15
|
+
named color themes remain available; selecting one applies the shared color roles
|
|
16
|
+
without changing component classes or preset geometry.
|
|
17
|
+
|
|
18
|
+
```js
|
|
19
|
+
document.body.dataset.ui = "minimal-saas";
|
|
20
|
+
document.body.dataset.mode = "light";
|
|
21
|
+
document.body.removeAttribute("data-theme");
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
The named-theme color table reads 23 shared RGB roles. Native mode reads the preset's
|
|
25
|
+
RGB inventory, including material channels such as paper, ink, brass, and enamel.
|
|
26
|
+
Native exports use `--<prefix>-*-rgb`; named-theme exports use `--usk-*-rgb`.
|
|
27
|
+
Native-palette edits are isolated by preset and mode; named-theme edits are shared
|
|
28
|
+
across presets using the same theme and mode. Native exports are
|
|
29
|
+
scoped to the selected `[data-ui]:not([data-theme])[data-mode]` combination, so they
|
|
30
|
+
do not override a subsequently selected named theme.
|
|
31
|
+
|
|
32
|
+
Reset a single role or use **Reset palette edits** to restore only the active
|
|
33
|
+
palette. Edits are temporary until reload. Invalid values leave the last valid
|
|
34
|
+
preview intact. Custom colors can reduce contrast; validate edited palettes before
|
|
35
|
+
using them in production. The library's CSS expects `data-theme` to be absent, not
|
|
36
|
+
the literal strings `"None"` or `"null"`; the demo normalizes empty/null selections.
|
|
37
|
+
|
|
11
38
|
## Shared semantic token handshake
|
|
12
39
|
|
|
13
|
-
The
|
|
40
|
+
The background handshake resolves through `--usk-native-bg`, which each preset
|
|
41
|
+
maps to its functional `--<prefix>-bg`. It therefore follows the actual native
|
|
42
|
+
material even when shared `--usk-bg-rgb` channels are absent.
|
|
43
|
+
|
|
44
|
+
The `[data-ui][data-mode]` native-token root publishes 12 fully typed `--ui-*` values whether or not `data-theme` is present. UI Style Kit is the primary producer, but the names are intentionally package-neutral so a third-party theme can produce the same contract. Consumer libraries treat these values as optional fallbacks: a package-specific override wins first, then the shared semantic value, then the consumer's legacy token and literal default.
|
|
14
45
|
|
|
15
46
|
| Shared token | CSS type | UI Style Kit source |
|
|
16
47
|
|---|---|---|
|
|
17
|
-
| `--ui-color-bg` | `<color>` | `
|
|
48
|
+
| `--ui-color-bg` | `<color>` | `var(--usk-native-bg)` |
|
|
18
49
|
| `--ui-color-surface` | `<color>` | `var(--usk-native-surface-strong)` |
|
|
19
50
|
| `--ui-color-text` | `<color>` | `var(--usk-native-text)` |
|
|
20
51
|
| `--ui-color-muted` | `<color>` | `var(--usk-native-text-muted)` |
|
|
@@ -63,6 +94,15 @@ UI Style Kit entrypoints publish all 12 values. Standalone consumer packages mus
|
|
|
63
94
|
| Cyberpunk | `cyber` |
|
|
64
95
|
| Y2K | `y2k` |
|
|
65
96
|
| Retro Glass | `rg` |
|
|
97
|
+
| Editorial Luxe | `luxe` |
|
|
98
|
+
| Organic Modern | `organic` |
|
|
99
|
+
| Industrial Utility | `utility` |
|
|
100
|
+
| Technical Blueprint | `blueprint` |
|
|
101
|
+
| Art Deco | `deco` |
|
|
102
|
+
| Clay | `clay` |
|
|
103
|
+
| Data Terminal | `terminal` |
|
|
104
|
+
| Paper Editorial | `paper` |
|
|
105
|
+
| Neo-Noir | `noir` |
|
|
66
106
|
|
|
67
107
|
## Stable functional tokens
|
|
68
108
|
|
|
@@ -198,9 +238,55 @@ Native HTML coverage is shared in `styles/native-elements.css` to avoid repeatin
|
|
|
198
238
|
--usk-native-shadow
|
|
199
239
|
--usk-native-shadow-md
|
|
200
240
|
--usk-native-focus-ring
|
|
241
|
+
--usk-native-choice-size
|
|
242
|
+
--usk-native-choice-background
|
|
243
|
+
--usk-native-choice-border
|
|
244
|
+
--usk-native-checkbox-radius
|
|
245
|
+
--usk-native-radio-radius
|
|
246
|
+
--usk-native-choice-shadow
|
|
247
|
+
--usk-native-choice-checked-background
|
|
248
|
+
--usk-native-choice-mark-color
|
|
249
|
+
--usk-native-select-indicator-image
|
|
250
|
+
--usk-native-select-indicator-size
|
|
251
|
+
--usk-native-select-indicator-position
|
|
252
|
+
--usk-native-select-padding-inline-end
|
|
253
|
+
--usk-native-range-track-size
|
|
254
|
+
--usk-native-range-track-background
|
|
255
|
+
--usk-native-range-track-border
|
|
256
|
+
--usk-native-range-track-radius
|
|
257
|
+
--usk-native-range-track-shadow
|
|
258
|
+
--usk-native-range-progress-background
|
|
259
|
+
--usk-native-range-thumb-size
|
|
260
|
+
--usk-native-range-thumb-background
|
|
261
|
+
--usk-native-range-thumb-border
|
|
262
|
+
--usk-native-range-thumb-radius
|
|
263
|
+
--usk-native-range-thumb-shadow
|
|
264
|
+
--usk-native-progress-size
|
|
265
|
+
--usk-native-progress-track-background
|
|
266
|
+
--usk-native-progress-track-border
|
|
267
|
+
--usk-native-progress-track-radius
|
|
268
|
+
--usk-native-progress-track-shadow
|
|
269
|
+
--usk-native-progress-value-background
|
|
270
|
+
--usk-native-progress-value-radius
|
|
271
|
+
--usk-native-progress-value-shadow
|
|
272
|
+
--usk-native-meter-optimum-background
|
|
273
|
+
--usk-native-meter-suboptimum-background
|
|
274
|
+
--usk-native-meter-critical-background
|
|
275
|
+
--usk-native-file-button-background
|
|
276
|
+
--usk-native-file-button-border
|
|
277
|
+
--usk-native-file-button-radius
|
|
278
|
+
--usk-native-file-button-shadow
|
|
279
|
+
--usk-native-color-swatch-border
|
|
280
|
+
--usk-native-color-swatch-radius
|
|
281
|
+
--usk-native-indicator-opacity
|
|
282
|
+
--usk-native-indicator-filter
|
|
283
|
+
--usk-native-scrollbar-size
|
|
284
|
+
--usk-native-scrollbar-track
|
|
285
|
+
--usk-native-scrollbar-thumb
|
|
286
|
+
--usk-native-scrollbar-radius
|
|
201
287
|
```
|
|
202
288
|
|
|
203
|
-
Consumers usually override the prefixed public tokens, not these internal bridge tokens. Use `--usk-native-*` only when intentionally customizing native fallback styling across every UI preset.
|
|
289
|
+
Every preset maps the complete identity set. Consumers usually override the prefixed public tokens, not these internal bridge tokens. Use `--usk-native-*` only when intentionally customizing native fallback styling across every UI preset.
|
|
204
290
|
|
|
205
291
|
Use prefixed RGB aliases for component-local alpha effects:
|
|
206
292
|
|
|
@@ -243,7 +329,7 @@ Loading indicators use theme variables by default:
|
|
|
243
329
|
--<prefix>-spinner-accent
|
|
244
330
|
```
|
|
245
331
|
|
|
246
|
-
The class utilities are `<prefix>-spinner`, `<prefix>-loading-spinner`, `<prefix>-spinner-sm`, and `<prefix>-spinner-lg`. Native buttons and prefixed buttons
|
|
332
|
+
The class utilities are `<prefix>-spinner`, `<prefix>-loading-spinner`, `<prefix>-spinner-sm`, and `<prefix>-spinner-lg`. Each preset owns its loader silhouette, cadence, and depth while consuming only these active theme roles. Native buttons and prefixed buttons render the matching preset-owned indicator when `aria-busy="true"` is present.
|
|
247
333
|
|
|
248
334
|
## Interactive Surface bridge tokens
|
|
249
335
|
|