Skip to content

Expand CSS mask shorthands into retained longhands #499

Description

@wieslawsoltes

Completed focused slice — 19 September 2026

PR #501 merged provider-first as WebScene main commit fd3ea54388cd88afb97d86bc9e09384814e5908a; this issue is closed. The change exposes standard/WebKit mask identities and expands bounded single-layer shorthand forms into retained longhands. A stale property-count expectation found by the first CI attempt was corrected before merge. Full cumulative validation remains deferred and is tracked by #256/#235.

Problem

Unchanged Code OSS frequently authors icon and fade masks through the mask shorthand, often paired with a -webkit-mask fallback. WebScene currently exposes only the five longhands. Its native declaration parser drops prefixed mask declarations and retains a standard mask declaration as an unrelated property, so the renderer never receives the longhand image/repeat/position/size/composite state.

Representative consumers include activity/view icons, file-icon themes, progress indicators, Chat welcome icons, voice-glow borders, and session input banners.

Bounded implementation

  • Add browser-shaped mask and prefixed mask property identities/aliases without changing VS Code.
  • Canonicalize -webkit-mask* declarations to the corresponding standard property.
  • Expand a single balanced mask layer during declaration parsing into mask-image, mask-position, mask-size, mask-repeat, mask-composite, and mask-mode so normal cascade ordering operates on effective longhands.
  • Support the Code OSS URL/gradient plus repeat and position forms; reset omitted components to their initial values.
  • Preserve unsupported multi-layer, geometry-box, luminance, and non-add forms as explicit unclaimed syntax instead of partially applying them.
  • Add parser, inline-style, CSSOM/computed-value, mutation, cascade-order, prefixed-alias, and bounded-work regression coverage.

Acceptance and deferred gates

The effective longhands must be identical whether authored directly or through the supported shorthand, including longhand-before/after-shorthand ordering and !important. No product-specific selector or URL is permitted. Browser/WPT, native runtime, performance, memory, package, and CI gates remain required before release promotion but are deferred under the current throughput directive.

Parent: #256. Coordination: #235/#239/#241.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    vscode-oss/plannedPlanned for the AppScene/WebScene VS Code OSS integration

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions