From 0bcebe956658a9f02bc1d9e208a9f475aa50bda0 Mon Sep 17 00:00:00 2001 From: konojunya Date: Sun, 6 Sep 2026 14:41:50 +0900 Subject: [PATCH 1/2] Use rounded cache cards in core themes --- catalog/catalog.json | 6 +++--- crates/stack-theme/src/generated/catalog.json | 12 ++++++------ crates/stack-theme/src/generated/metadata.rs | 2 +- packages/theme/catalog-metadata.json | 2 +- packages/theme/catalog.generated.js | 14 +++++++------- packages/theme/catalog.json | 12 ++++++------ tests/catalog.test.mjs | 17 ++++++++++++++--- 7 files changed, 38 insertions(+), 27 deletions(-) diff --git a/catalog/catalog.json b/catalog/catalog.json index fadcede..87f9634 100644 --- a/catalog/catalog.json +++ b/catalog/catalog.json @@ -82,7 +82,7 @@ "function": { "shape": "hexagon", "fill": "surfaceMuted", "stroke": "accent", "text": "text", "accent": "accent", "cornerRadiusMilliPx": 0, "fallbackIconId": "kind-function" }, "worker": { "shape": "capsule", "fill": "surface", "stroke": "border", "text": "text", "accent": "accent", "cornerRadiusMilliPx": 16000, "fallbackIconId": "kind-worker" }, "database": { "shape": "rounded-rectangle", "fill": "surface", "stroke": "accent", "text": "text", "accent": "accent", "cornerRadiusMilliPx": 8000, "fallbackIconId": "kind-database" }, - "cache": { "shape": "cylinder", "fill": "surfaceMuted", "stroke": "border", "text": "text", "accent": "accent", "cornerRadiusMilliPx": 0, "fallbackIconId": "kind-cache" }, + "cache": { "shape": "rounded-rectangle", "fill": "surfaceMuted", "stroke": "border", "text": "text", "accent": "accent", "cornerRadiusMilliPx": 8000, "fallbackIconId": "kind-cache" }, "queue": { "shape": "capsule", "fill": "surfaceMuted", "stroke": "accent", "text": "text", "accent": "accent", "cornerRadiusMilliPx": 16000, "fallbackIconId": "kind-queue" }, "storage": { "shape": "rounded-rectangle", "fill": "surface", "stroke": "border", "text": "text", "accent": "accent", "cornerRadiusMilliPx": 4000, "fallbackIconId": "kind-storage" }, "external": { "shape": "hexagon", "fill": "surfaceMuted", "stroke": "border", "text": "text", "accent": "accent", "cornerRadiusMilliPx": 0, "fallbackIconId": "kind-external" } @@ -144,7 +144,7 @@ "function": { "shape": "hexagon", "fill": "surfaceMuted", "stroke": "accent", "text": "text", "accent": "accent", "cornerRadiusMilliPx": 0, "fallbackIconId": "kind-function" }, "worker": { "shape": "capsule", "fill": "surface", "stroke": "border", "text": "text", "accent": "accent", "cornerRadiusMilliPx": 16000, "fallbackIconId": "kind-worker" }, "database": { "shape": "rounded-rectangle", "fill": "surface", "stroke": "accent", "text": "text", "accent": "accent", "cornerRadiusMilliPx": 8000, "fallbackIconId": "kind-database" }, - "cache": { "shape": "cylinder", "fill": "surfaceMuted", "stroke": "border", "text": "text", "accent": "accent", "cornerRadiusMilliPx": 0, "fallbackIconId": "kind-cache" }, + "cache": { "shape": "rounded-rectangle", "fill": "surfaceMuted", "stroke": "border", "text": "text", "accent": "accent", "cornerRadiusMilliPx": 8000, "fallbackIconId": "kind-cache" }, "queue": { "shape": "capsule", "fill": "surfaceMuted", "stroke": "accent", "text": "text", "accent": "accent", "cornerRadiusMilliPx": 16000, "fallbackIconId": "kind-queue" }, "storage": { "shape": "rounded-rectangle", "fill": "surface", "stroke": "border", "text": "text", "accent": "accent", "cornerRadiusMilliPx": 4000, "fallbackIconId": "kind-storage" }, "external": { "shape": "hexagon", "fill": "surfaceMuted", "stroke": "border", "text": "text", "accent": "accent", "cornerRadiusMilliPx": 0, "fallbackIconId": "kind-external" } @@ -206,7 +206,7 @@ "function": { "shape": "hexagon", "fill": "surfaceMuted", "stroke": "accent", "text": "text", "accent": "accent", "cornerRadiusMilliPx": 0, "fallbackIconId": "kind-function" }, "worker": { "shape": "capsule", "fill": "surface", "stroke": "border", "text": "text", "accent": "accent", "cornerRadiusMilliPx": 16000, "fallbackIconId": "kind-worker" }, "database": { "shape": "rounded-rectangle", "fill": "surface", "stroke": "accent", "text": "text", "accent": "accent", "cornerRadiusMilliPx": 8000, "fallbackIconId": "kind-database" }, - "cache": { "shape": "cylinder", "fill": "surfaceMuted", "stroke": "border", "text": "text", "accent": "accent", "cornerRadiusMilliPx": 0, "fallbackIconId": "kind-cache" }, + "cache": { "shape": "rounded-rectangle", "fill": "surfaceMuted", "stroke": "border", "text": "text", "accent": "accent", "cornerRadiusMilliPx": 8000, "fallbackIconId": "kind-cache" }, "queue": { "shape": "capsule", "fill": "surfaceMuted", "stroke": "accent", "text": "text", "accent": "accent", "cornerRadiusMilliPx": 16000, "fallbackIconId": "kind-queue" }, "storage": { "shape": "rounded-rectangle", "fill": "surface", "stroke": "border", "text": "text", "accent": "accent", "cornerRadiusMilliPx": 4000, "fallbackIconId": "kind-storage" }, "external": { "shape": "hexagon", "fill": "surfaceMuted", "stroke": "border", "text": "text", "accent": "accent", "cornerRadiusMilliPx": 0, "fallbackIconId": "kind-external" } diff --git a/crates/stack-theme/src/generated/catalog.json b/crates/stack-theme/src/generated/catalog.json index 90f859d..e6fa9f2 100644 --- a/crates/stack-theme/src/generated/catalog.json +++ b/crates/stack-theme/src/generated/catalog.json @@ -188,12 +188,12 @@ "fallbackIconId": "kind-database" }, "cache": { - "shape": "cylinder", + "shape": "rounded-rectangle", "fill": "surfaceMuted", "stroke": "border", "text": "text", "accent": "accent", - "cornerRadiusMilliPx": 0, + "cornerRadiusMilliPx": 8000, "fallbackIconId": "kind-cache" }, "queue": { @@ -1395,12 +1395,12 @@ "fallbackIconId": "kind-database" }, "cache": { - "shape": "cylinder", + "shape": "rounded-rectangle", "fill": "surfaceMuted", "stroke": "border", "text": "text", "accent": "accent", - "cornerRadiusMilliPx": 0, + "cornerRadiusMilliPx": 8000, "fallbackIconId": "kind-cache" }, "queue": { @@ -2602,12 +2602,12 @@ "fallbackIconId": "kind-database" }, "cache": { - "shape": "cylinder", + "shape": "rounded-rectangle", "fill": "surfaceMuted", "stroke": "border", "text": "text", "accent": "accent", - "cornerRadiusMilliPx": 0, + "cornerRadiusMilliPx": 8000, "fallbackIconId": "kind-cache" }, "queue": { diff --git a/crates/stack-theme/src/generated/metadata.rs b/crates/stack-theme/src/generated/metadata.rs index 78e9f39..fbf10c7 100644 --- a/crates/stack-theme/src/generated/metadata.rs +++ b/crates/stack-theme/src/generated/metadata.rs @@ -1,6 +1,6 @@ // Generated by scripts/generate.mjs. Do not edit. pub const CATALOG_VERSION: &str = "0.6.0"; -pub const CATALOG_REVISION: &str = "sha256:4d4e9dcda36bf2a5187a233c0be74c9e9302f41d5021e1fa2a73712837ff55c1"; +pub const CATALOG_REVISION: &str = "sha256:2e1a68af5fee501c49132c98c13348bea8c2adafccef23feb76e92fcedbc544a"; pub fn icon_svg(asset_path: &str) -> Option<&'static str> { match asset_path { diff --git a/packages/theme/catalog-metadata.json b/packages/theme/catalog-metadata.json index 7927074..121e794 100644 --- a/packages/theme/catalog-metadata.json +++ b/packages/theme/catalog-metadata.json @@ -1,4 +1,4 @@ { "catalogVersion": "0.6.0", - "catalogRevision": "sha256:4d4e9dcda36bf2a5187a233c0be74c9e9302f41d5021e1fa2a73712837ff55c1" + "catalogRevision": "sha256:2e1a68af5fee501c49132c98c13348bea8c2adafccef23feb76e92fcedbc544a" } diff --git a/packages/theme/catalog.generated.js b/packages/theme/catalog.generated.js index 41e31a0..00792a3 100644 --- a/packages/theme/catalog.generated.js +++ b/packages/theme/catalog.generated.js @@ -189,12 +189,12 @@ const catalogData = { "fallbackIconId": "kind-database" }, "cache": { - "shape": "cylinder", + "shape": "rounded-rectangle", "fill": "surfaceMuted", "stroke": "border", "text": "text", "accent": "accent", - "cornerRadiusMilliPx": 0, + "cornerRadiusMilliPx": 8000, "fallbackIconId": "kind-cache" }, "queue": { @@ -1396,12 +1396,12 @@ const catalogData = { "fallbackIconId": "kind-database" }, "cache": { - "shape": "cylinder", + "shape": "rounded-rectangle", "fill": "surfaceMuted", "stroke": "border", "text": "text", "accent": "accent", - "cornerRadiusMilliPx": 0, + "cornerRadiusMilliPx": 8000, "fallbackIconId": "kind-cache" }, "queue": { @@ -2603,12 +2603,12 @@ const catalogData = { "fallbackIconId": "kind-database" }, "cache": { - "shape": "cylinder", + "shape": "rounded-rectangle", "fill": "surfaceMuted", "stroke": "border", "text": "text", "accent": "accent", - "cornerRadiusMilliPx": 0, + "cornerRadiusMilliPx": 8000, "fallbackIconId": "kind-cache" }, "queue": { @@ -4261,7 +4261,7 @@ function deepFreeze(value) { export const catalog = deepFreeze(catalogData); export const providerPackSchema = deepFreeze(providerPackSchemaData); export const catalogVersion = "0.6.0"; -export const catalogRevision = "sha256:4d4e9dcda36bf2a5187a233c0be74c9e9302f41d5021e1fa2a73712837ff55c1"; +export const catalogRevision = "sha256:2e1a68af5fee501c49132c98c13348bea8c2adafccef23feb76e92fcedbc544a"; export const iconAssets = deepFreeze(iconAssetsData); export function iconSvg(assetPath) { return iconAssets[assetPath]; diff --git a/packages/theme/catalog.json b/packages/theme/catalog.json index 90f859d..e6fa9f2 100644 --- a/packages/theme/catalog.json +++ b/packages/theme/catalog.json @@ -188,12 +188,12 @@ "fallbackIconId": "kind-database" }, "cache": { - "shape": "cylinder", + "shape": "rounded-rectangle", "fill": "surfaceMuted", "stroke": "border", "text": "text", "accent": "accent", - "cornerRadiusMilliPx": 0, + "cornerRadiusMilliPx": 8000, "fallbackIconId": "kind-cache" }, "queue": { @@ -1395,12 +1395,12 @@ "fallbackIconId": "kind-database" }, "cache": { - "shape": "cylinder", + "shape": "rounded-rectangle", "fill": "surfaceMuted", "stroke": "border", "text": "text", "accent": "accent", - "cornerRadiusMilliPx": 0, + "cornerRadiusMilliPx": 8000, "fallbackIconId": "kind-cache" }, "queue": { @@ -2602,12 +2602,12 @@ "fallbackIconId": "kind-database" }, "cache": { - "shape": "cylinder", + "shape": "rounded-rectangle", "fill": "surfaceMuted", "stroke": "border", "text": "text", "accent": "accent", - "cornerRadiusMilliPx": 0, + "cornerRadiusMilliPx": 8000, "fallbackIconId": "kind-cache" }, "queue": { diff --git a/tests/catalog.test.mjs b/tests/catalog.test.mjs index dc030ce..0524cf1 100644 --- a/tests/catalog.test.mjs +++ b/tests/catalog.test.mjs @@ -26,7 +26,7 @@ test("the complete contract fixture is valid", async () => { await validateCatalog(fixture); }); -test("database fallbacks use cards with their existing database icons", async () => { +test("database and cache fallbacks use cards with their existing icons", async () => { const sourceCatalog = await readJson( path.join(repositoryRoot, "catalog/catalog.json"), ); @@ -48,8 +48,19 @@ test("database fallbacks use cards with their existing database icons", async () ["surface", "accent", "text", "accent"], ); assert.ok(theme.icons.some((icon) => icon.id === database.fallbackIconId)); - assert.equal(theme.nodeKindFallbacks.cache.shape, "cylinder"); - assert.equal(theme.nodeKindFallbacks.cache.cornerRadiusMilliPx, 0); + const cache = theme.nodeKindFallbacks.cache; + assert.equal(cache.shape, "rounded-rectangle", `${theme.id} cache shape`); + assert.equal(cache.cornerRadiusMilliPx, 8000, `${theme.id} cache radius`); + assert.equal( + cache.cornerRadiusMilliPx, + theme.nodeKindFallbacks.service.cornerRadiusMilliPx, + ); + assert.equal(cache.fallbackIconId, "kind-cache"); + assert.deepEqual( + [cache.fill, cache.stroke, cache.text, cache.accent], + ["surfaceMuted", "border", "text", "accent"], + ); + assert.ok(theme.icons.some((icon) => icon.id === cache.fallbackIconId)); } }); From 46109a642a86ec624e61690eb91b093e69e2d1fc Mon Sep 17 00:00:00 2001 From: konojunya Date: Sun, 6 Sep 2026 16:02:34 +0900 Subject: [PATCH 2/2] Prepare cache card catalog release 0.7.0 --- CONTRACT.md | 2 +- Cargo.lock | 2 +- Cargo.toml | 2 +- README.md | 6 +++--- catalog/catalog.json | 2 +- crates/stack-theme/README.md | 2 +- crates/stack-theme/src/generated/catalog.json | 2 +- crates/stack-theme/src/generated/metadata.rs | 4 ++-- docs/releases/v0.7.0.md | 7 +++++++ package-lock.json | 4 ++-- package.json | 2 +- packages/theme/README.md | 2 +- packages/theme/catalog-metadata.json | 4 ++-- packages/theme/catalog.generated.js | 6 +++--- packages/theme/catalog.json | 2 +- packages/theme/package.json | 2 +- 16 files changed, 29 insertions(+), 22 deletions(-) create mode 100644 docs/releases/v0.7.0.md diff --git a/CONTRACT.md b/CONTRACT.md index fb18037..d7e6872 100644 --- a/CONTRACT.md +++ b/CONTRACT.md @@ -2,7 +2,7 @@ ## Status -This document defines the draft `1.0` core catalog document shape. Catalog and package version `0.6.0` remain pre-1.0 and may change incompatibly before a stable release. The Rust catalog is distributed on crates.io; generated npm artifacts are maintained in this repository. User-imported provider packs use the separate contract in [`PROVIDER_PACKS.md`](./PROVIDER_PACKS.md); their custom-term assets never enter this core catalog. +This document defines the draft `1.0` core catalog document shape. Catalog and package version `0.7.0` remain pre-1.0 and may change incompatibly before a stable release. The Rust catalog is distributed on crates.io; generated npm artifacts are maintained in this repository. User-imported provider packs use the separate contract in [`PROVIDER_PACKS.md`](./PROVIDER_PACKS.md); their custom-term assets never enter this core catalog. The JSON Schema at [`schemas/catalog.schema.json`](./schemas/catalog.schema.json) is the machine-readable source of truth. [`catalog/catalog.json`](./catalog/catalog.json) is the only source catalog. Generated Cargo and npm copies must not be edited directly. The schema is copied into both packages; `$schema` is an editor-facing canonical repository URL and runtime consumers do not fetch it. diff --git a/Cargo.lock b/Cargo.lock index ad79648..ee4b360 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -77,7 +77,7 @@ dependencies = [ [[package]] name = "stack-theme" -version = "0.6.0" +version = "0.7.0" dependencies = [ "serde", "serde_json", diff --git a/Cargo.toml b/Cargo.toml index af78495..b75563a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,7 +7,7 @@ edition = "2024" license = "Apache-2.0" repository = "https://github.com/stack-sh/theme" rust-version = "1.85" -version = "0.6.0" +version = "0.7.0" [workspace.dependencies] serde = { version = "1.0", features = ["derive"] } diff --git a/README.md b/README.md index 3d61d82..50c761e 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ The core catalog contract is defined by [`CONTRACT.md`](./CONTRACT.md) and [`schemas/catalog.schema.json`](./schemas/catalog.schema.json). The separate local-only provider-pack contract is defined by [`PROVIDER_PACKS.md`](./PROVIDER_PACKS.md) and [`schemas/provider-pack.schema.json`](./schemas/provider-pack.schema.json). The canonical core source is [`catalog/catalog.json`](./catalog/catalog.json); Rust and JavaScript package trees are generated from that source with one content revision. -The current `0.6.0` catalog contains the core `default`, `light`, and `dark` themes, repository-authored fallbacks for every Stack 1.0 node kind, 30 provider-neutral explicit icons, and versioned host-independent font metrics. The explicit icon catalog covers clients and compute, networking and delivery, data and events, development workflows, security, general collaboration tools, and AI systems. Its identifiers are `api`, `web`, `mobile`, `desktop`, `server`, `container`, `cluster`, `cloud`, `scheduler`, `webhook`, `identity`, `observability`, `gateway`, `load-balancer`, `dns`, `cdn`, `firewall`, `network`, `event`, `stream`, `search`, `analytics`, `repository`, `pipeline`, `secret`, `document`, `task`, `chat`, `email`, and `ai`. +The current `0.7.0` catalog contains the core `default`, `light`, and `dark` themes, repository-authored fallbacks for every Stack 1.0 node kind, 30 provider-neutral explicit icons, and versioned host-independent font metrics. The explicit icon catalog covers clients and compute, networking and delivery, data and events, development workflows, security, general collaboration tools, and AI systems. Its identifiers are `api`, `web`, `mobile`, `desktop`, `server`, `container`, `cluster`, `cloud`, `scheduler`, `webhook`, `identity`, `observability`, `gateway`, `load-balancer`, `dns`, `cdn`, `firewall`, `network`, `event`, `stream`, `search`, `analytics`, `repository`, `pipeline`, `secret`, `document`, `task`, `chat`, `email`, and `ai`. Provider-specific assets are not bundled. The provider-pack contract lets a CLI or browser validate an archive that the user explicitly selected from the provider's official source, keep it local, preserve the artwork, and carry source and terms notices into diagram output. @@ -13,7 +13,7 @@ Provider-specific assets are not bundled. The provider-pack contract lets a CLI Add the Rust catalog from crates.io with: ```sh -cargo add stack-theme@0.6.0 +cargo add stack-theme@0.7.0 ``` The package supports Rust 1.85 or newer and includes only the generated catalog API, repository-authored SVG assets, public schemas, package documentation, and the Apache-2.0 license. @@ -75,4 +75,4 @@ Repository-authored source code, catalog data, and assets are licensed under the Third-party fonts, icons, and other assets keep their own licenses and are not relicensed under Apache-2.0. Their provenance and redistribution terms must be recorded in [THIRD_PARTY_LICENSES.md](./THIRD_PARTY_LICENSES.md) before they are committed. Current provider icons are user-imported and are never committed or copied into the Cargo or npm packages. -Maintainers use the [trusted publishing procedure](./docs/releasing.md#ongoing-trusted-publishing) for subsequent crates.io releases. See the [0.6.0 release notes](./docs/releases/v0.6.0.md) for the database card update. +Maintainers use the [trusted publishing procedure](./docs/releasing.md#ongoing-trusted-publishing) for subsequent crates.io releases. See the [0.7.0 release notes](./docs/releases/v0.7.0.md) for the cache card update. diff --git a/catalog/catalog.json b/catalog/catalog.json index 87f9634..ac9a2c9 100644 --- a/catalog/catalog.json +++ b/catalog/catalog.json @@ -1,7 +1,7 @@ { "$schema": "https://raw.githubusercontent.com/stack-sh/theme/main/schemas/catalog.schema.json", "schemaVersion": "1.0", - "catalogVersion": "0.6.0", + "catalogVersion": "0.7.0", "reservedThemeIds": [], "fallbacks": { "missingThemeId": "default", diff --git a/crates/stack-theme/README.md b/crates/stack-theme/README.md index 70141a7..561d2ad 100644 --- a/crates/stack-theme/README.md +++ b/crates/stack-theme/README.md @@ -4,4 +4,4 @@ The public contract and compatibility policy are documented in the repository's [`CONTRACT.md`](https://github.com/stack-sh/theme/blob/main/CONTRACT.md). -Add version 0.6.0 from crates.io with `cargo add stack-theme@0.6.0`. The package supports Rust 1.85 or newer. +Add version 0.7.0 from crates.io with `cargo add stack-theme@0.7.0`. The package supports Rust 1.85 or newer. diff --git a/crates/stack-theme/src/generated/catalog.json b/crates/stack-theme/src/generated/catalog.json index e6fa9f2..87eebb1 100644 --- a/crates/stack-theme/src/generated/catalog.json +++ b/crates/stack-theme/src/generated/catalog.json @@ -1,7 +1,7 @@ { "$schema": "https://raw.githubusercontent.com/stack-sh/theme/main/schemas/catalog.schema.json", "schemaVersion": "1.0", - "catalogVersion": "0.6.0", + "catalogVersion": "0.7.0", "reservedThemeIds": [], "fallbacks": { "missingThemeId": "default", diff --git a/crates/stack-theme/src/generated/metadata.rs b/crates/stack-theme/src/generated/metadata.rs index fbf10c7..0c7a6a2 100644 --- a/crates/stack-theme/src/generated/metadata.rs +++ b/crates/stack-theme/src/generated/metadata.rs @@ -1,6 +1,6 @@ // Generated by scripts/generate.mjs. Do not edit. -pub const CATALOG_VERSION: &str = "0.6.0"; -pub const CATALOG_REVISION: &str = "sha256:2e1a68af5fee501c49132c98c13348bea8c2adafccef23feb76e92fcedbc544a"; +pub const CATALOG_VERSION: &str = "0.7.0"; +pub const CATALOG_REVISION: &str = "sha256:4a8b94b746c6b120998bfbe701edd722449a28c89c424b0a33f67561756ded5a"; pub fn icon_svg(asset_path: &str) -> Option<&'static str> { match asset_path { diff --git a/docs/releases/v0.7.0.md b/docs/releases/v0.7.0.md new file mode 100644 index 0000000..a8e1c18 --- /dev/null +++ b/docs/releases/v0.7.0.md @@ -0,0 +1,7 @@ +# Stack Theme 0.7.0 + +Cache nodes now use a rounded card with an 8 px corner radius in the `default`, `light`, and `dark` themes. The cache icon retains the node's identity without a decorative cylinder cap competing with its label or border. + +Cache colors, typography, icons, and minimum dimensions are unchanged. The `cylinder` shape remains supported for custom themes; only the built-in cache fallback changes. The catalog schema remains `1.0`, and layout and rendering remain the engine's responsibility. + +The Rust crate and generated catalog share version `0.7.0`. This release does not introduce custom palettes or a new npm distribution channel. diff --git a/package-lock.json b/package-lock.json index 3ed7bd1..521e940 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "stack-theme-workspace", - "version": "0.6.0", + "version": "0.7.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "stack-theme-workspace", - "version": "0.6.0", + "version": "0.7.0", "workspaces": [ "packages/theme" ], diff --git a/package.json b/package.json index f0d94b8..f7334fb 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "stack-theme-workspace", "private": true, - "version": "0.6.0", + "version": "0.7.0", "workspaces": [ "packages/theme" ], diff --git a/packages/theme/README.md b/packages/theme/README.md index 9dd52a3..932ea12 100644 --- a/packages/theme/README.md +++ b/packages/theme/README.md @@ -4,6 +4,6 @@ The package is browser-safe and performs no filesystem, network, clock, locale, or host-font access. See the repository's [`CONTRACT.md`](https://github.com/stack-sh/theme/blob/main/CONTRACT.md) for the core catalog and [`PROVIDER_PACKS.md`](https://github.com/stack-sh/theme/blob/main/PROVIDER_PACKS.md) for the local provider-pack contract. -Catalog `0.6.0` includes 30 provider-neutral explicit icons shared by the `default`, `light`, and `dark` themes: `api`, `web`, `mobile`, `desktop`, `server`, `container`, `cluster`, `cloud`, `scheduler`, `webhook`, `identity`, `observability`, `gateway`, `load-balancer`, `dns`, `cdn`, `firewall`, `network`, `event`, `stream`, `search`, `analytics`, `repository`, `pipeline`, `secret`, `document`, `task`, `chat`, `email`, and `ai`. Resolve a core icon's catalog asset path through `iconSvg()`; do not treat a logical icon identifier as a filesystem path or URL. +Catalog `0.7.0` includes 30 provider-neutral explicit icons shared by the `default`, `light`, and `dark` themes: `api`, `web`, `mobile`, `desktop`, `server`, `container`, `cluster`, `cloud`, `scheduler`, `webhook`, `identity`, `observability`, `gateway`, `load-balancer`, `dns`, `cdn`, `firewall`, `network`, `event`, `stream`, `search`, `analytics`, `repository`, `pipeline`, `secret`, `document`, `task`, `chat`, `email`, and `ai`. Resolve a core icon's catalog asset path through `iconSvg()`; do not treat a logical icon identifier as a filesystem path or URL. `providerPackSchema` describes manifests produced from a provider archive that the user explicitly imports. It requires local-only processing, disabled package redistribution, provider-prefixed icon IDs, source and processed hashes, artwork-preservation policy, and user-visible terms notices. The package contains no vendor asset bytes and never downloads or uploads an archive. diff --git a/packages/theme/catalog-metadata.json b/packages/theme/catalog-metadata.json index 121e794..a5ffc34 100644 --- a/packages/theme/catalog-metadata.json +++ b/packages/theme/catalog-metadata.json @@ -1,4 +1,4 @@ { - "catalogVersion": "0.6.0", - "catalogRevision": "sha256:2e1a68af5fee501c49132c98c13348bea8c2adafccef23feb76e92fcedbc544a" + "catalogVersion": "0.7.0", + "catalogRevision": "sha256:4a8b94b746c6b120998bfbe701edd722449a28c89c424b0a33f67561756ded5a" } diff --git a/packages/theme/catalog.generated.js b/packages/theme/catalog.generated.js index 00792a3..b3dcd5e 100644 --- a/packages/theme/catalog.generated.js +++ b/packages/theme/catalog.generated.js @@ -2,7 +2,7 @@ const catalogData = { "$schema": "https://raw.githubusercontent.com/stack-sh/theme/main/schemas/catalog.schema.json", "schemaVersion": "1.0", - "catalogVersion": "0.6.0", + "catalogVersion": "0.7.0", "reservedThemeIds": [], "fallbacks": { "missingThemeId": "default", @@ -4260,8 +4260,8 @@ function deepFreeze(value) { export const catalog = deepFreeze(catalogData); export const providerPackSchema = deepFreeze(providerPackSchemaData); -export const catalogVersion = "0.6.0"; -export const catalogRevision = "sha256:2e1a68af5fee501c49132c98c13348bea8c2adafccef23feb76e92fcedbc544a"; +export const catalogVersion = "0.7.0"; +export const catalogRevision = "sha256:4a8b94b746c6b120998bfbe701edd722449a28c89c424b0a33f67561756ded5a"; export const iconAssets = deepFreeze(iconAssetsData); export function iconSvg(assetPath) { return iconAssets[assetPath]; diff --git a/packages/theme/catalog.json b/packages/theme/catalog.json index e6fa9f2..87eebb1 100644 --- a/packages/theme/catalog.json +++ b/packages/theme/catalog.json @@ -1,7 +1,7 @@ { "$schema": "https://raw.githubusercontent.com/stack-sh/theme/main/schemas/catalog.schema.json", "schemaVersion": "1.0", - "catalogVersion": "0.6.0", + "catalogVersion": "0.7.0", "reservedThemeIds": [], "fallbacks": { "missingThemeId": "default", diff --git a/packages/theme/package.json b/packages/theme/package.json index 8f004ed..10711a6 100644 --- a/packages/theme/package.json +++ b/packages/theme/package.json @@ -1,6 +1,6 @@ { "name": "@stack-sh/theme", - "version": "0.6.0", + "version": "0.7.0", "description": "Canonical Stack theme catalog contract and embedded catalog data", "type": "module", "license": "Apache-2.0",