Commit Graph
619 Commits
Author SHA1 Message Date
Rahim f64acdfd15 refactor(compiler)!: move component generation to core 2026-06-19 19:37:09 -07:00
Rahim b2c6b3489f feat(compiler): restore component manifest generation 2026-06-18 02:34:54 -07:00
Rahim c3d68fa1d8 chore(skin): park current skin sources 2026-06-17 21:37:38 -07:00
Rahim 6f5f7ef577 fix(compiler): support current skin extraction patterns 2026-06-17 21:33:35 -07:00
Rahim 3108dd25ce chore(skin): remove legacy migration files 2026-06-17 21:31:10 -07:00
Rahim 21392ccd16 refactor(compiler): use vite plugin types 2026-06-17 17:13:40 -07:00
Rahim f941eacf37 feat(compiler)!: add config-driven compile pipeline 2026-06-17 17:13:40 -07:00
Rahim 0486765848 feat(compiler): configurable @property handling for --tw-* slots
Tailwind registers internal slots (`--tw-content`, `--tw-shadow`, …) via
`@property` rules that supply their defaults. `decompose` dropped those
rules, so utilities that reference a slot without setting it locally —
notably `after:*`/`before:*` emitting `content: var(--tw-content)` — left
a dangling reference that resolves to nothing and suppresses the
pseudo-element.

`decompose` now captures the `@property` registrations, and `emitCss`
gains a `properties` option to handle them, configurably:

  - `mode: 'emit'`   — emit `@property` rules for referenced slots,
    preserving Tailwind's typed defaults.
  - `mode: 'inline'` — substitute each slot's `initial-value` into the
    values that reference it (a superset of `inlineVars` for the matched
    slots), so the output is fully self-contained.
  - `resolve(name, captured)` hook — override or supply a slot's config
    (initial-value / syntax / inherits), or register one Tailwind didn't.
  - `match` — restrict handling to matching names (default `/^--tw-/`).

`tailwindPlugin` forwards `properties` through its `onCss` path. Adds 9
tests (capture, emit, inline, resolve override, match, back-compat,
plugin e2e). Compiler suite: 178 passing.
2026-06-17 17:13:40 -07:00
Rahim 578f0ca3c4 fix(compiler): vanilla-css correctness — markers, collisions, theme vars
Three correctness fixes for the `vanilla-css` Tailwind target, each
previously untested:

1. Preserve marker utilities. Utilities that produce no declarations
   (`group`, `peer`, `group/<name>`) were silently dropped when rewriting
   `className` to the semantic name, breaking every descendant
   `group-*` / `peer-*` variant. They're now kept on the element
   (`"play-button group"`), alongside any other class Tailwind doesn't
   recognize.

2. Flag class-name collisions. Two distinct elements that derive the same
   class name but resolve to different utilities would have their
   conflicting declarations silently merged into one rule (e.g. the
   forward/back `seek-icon`, buffering vs preview `spinner-icon`,
   current/duration `time-value`). The plugin now tracks a per-name
   utility signature and throws a fixable DiagnosticError on mismatch,
   while identical recurrences (repeated `Tooltip.Popup`) pass cleanly.

3. Emit referenced theme variables. The generated CSS referenced
   `var(--spacing)`, `var(--color-*)`, `var(--ease-*)` etc. with nothing
   defining them. `emitCss` now accepts a `resolveThemeVar` resolver
   (backed by `design.resolveThemeVar`) and emits a leading, transitively
   resolved theme block — scoped to the skin's hoist root when set — so
   the output resolves without a separate Tailwind theme on the page.

Adds 11 tests (markers, collisions, theme emission incl. transitive,
already-declared, scoped, and back-compat). Compiler suite: 169 passing.

Note: `@property`-registered `--tw-*` slots (e.g. `--tw-content`) resolve
to undefined and are left for a follow-up.
2026-06-17 17:13:40 -07:00
Rahim d562279df1 chore(skin): park constrained-JSX skin migration under __old__
The in-flight compiler skin migration refactored the shared Tailwind token
modules from main's function API (`root = (isShadowDOM) => cn(...)`, flat
exports) into a string-aggregate API (`video`/`audio` nested objects) that
the constrained-JSX skins consume. Since then, main built 16 runtime skin
files on the function API — including the new live-video / live-audio
presets — which the new token shape cannot satisfy without porting.

Rather than regress main's skins or break the build, park the authored
migration sources (constrained-JSX skins + refactored token layer +
tailwind.css) under packages/skins/__old__, a sibling of src/ that sits
outside the package tsconfig include, tsdown globs, and (via biome ignore)
linting. Main remains the source of truth for live skins.

The full migration snapshot (build wiring, generated React skins/CSS, core
manifests, icons generate config, html/react edits) is preserved in the
git tag backup/pre-rebase-2b2bbfad. The audit and port backlog live in
.claude/plans/compiler-rebase-audit.md.
2026-06-17 17:13:40 -07:00
Rahim b01a051744 feat(compiler): add @videojs/compiler package
Introduce the build-time compiler for constrained-JSX skins, rebased onto
current main as a clean, additive package. Provides:

- core pipeline: parse, compile, generate, JSX runtime, define-component
- transforms: import rewriting, replace/wrap, drop-unused locals/imports
- matchers + react lowering (add-prop, child-as-prop)
- styles className analyzer
- tailwind subsystem: design-system loader, decompose, evaluator,
  deriveClassName, emitCss, tailwindPlugin (three targets)

Self-contained: the integration smoke test now reads a vendored skin
fixture instead of the skins package, so the compiler builds and tests
green independently. 158 tests pass.

Wiring: register the project reference (tsconfig), commitlint scope,
CI test-matrix entry, and lockfile entries (lightningcss, tailwindcss).

The skin migration that consumes this compiler is parked separately —
its token refactor conflicts with skin work that landed on main; see the
follow-up commit and .claude/plans/compiler-rebase-audit.md.
2026-06-17 17:13:40 -07:00
Wesley LuytenandGitHub 1b31f3e8d7 feat(core): add vimeo media host and html/react components (#1667) 2026-06-18 09:36:31 +10:00
Sam PottsandGitHub 035b509c7a feat(packages): compound tooltips with label and shortcut parts (#1494) 2026-06-18 08:12:16 +10:00
Sam PottsandGitHub 9275f93504 feat(packages): add resolved rendition to auto label (#1698) 2026-06-18 07:42:00 +10:00
Sam PottsandGitHub 16ab90987a feat(packages): add quality menu UI (#1694) 2026-06-18 07:20:59 +10:00
Sam PottsandGitHub 74da6821d7 feat(core): add quality selection state (#1693) 2026-06-18 07:20:13 +10:00
bce79ec424 feat(spf): capability probing (#1676)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 11:22:49 -07:00
b89f1e944c feat(spf): multi cdn failover (#1671)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 08:20:43 -07:00
Santiago PuppoandGitHub 33873bc4ae feat(spf): Add maxResolution to SPF Background Video (#1654) 2026-06-17 11:36:02 -03:00
Ronald UrbinaandGitHub 47aca0f798 fix(core): remove 1-9 digit key seek from slider keyboard handler (#1690) 2026-06-16 10:50:16 -03:00
Wesley LuytenandGitHub 67b39fe4bd feat(core): add media tracks and renditions support (#1664) 2026-06-15 07:39:55 +10:00
Wesley LuytenandGitHub 0ffe1a9197 feat(media)!: add Google Cast by default to HLS, DASH media (#1661) 2026-06-12 17:34:14 -07:00
00aa6247b8 feat(spf): multi-cdn support (#1668)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-11 10:09:16 -07:00
Sam PottsandGitHub b9e0a75c1b fix(react): address stale media reference (#1677) 2026-06-11 09:37:28 -07:00
Renzo DelfinoandGitHub 48a984aecd fix(core): prevent mobile controls flash on first tap after auto-hide (#1556) 2026-06-10 14:39:39 -03:00
00b6f0be1d feat(packages): add settings menu (#1615)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-10 13:54:45 +10:00
Sam PottsandGitHub 62d0524b83 feat(core): lock fullscreen orientation (#1656) 2026-06-10 10:32:43 +10:00
Sam PottsandGitHub 3d2225e77e fix(packages): fix ejected skin slider setup (#1660) 2026-06-08 15:07:57 -07:00
d9f9efde88 fix(spf): refactor track switching to rules (#1658)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-08 14:48:34 -07:00
057f32573e feat(spf): multi-track audio + skills building features and behaviors (#1605)
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-04 09:53:13 -07:00
Santiago PuppoandGitHub 24a78d253a refactor(core): airplay button (#1614) 2026-06-03 13:54:28 -07:00
Sam PottsandGitHub 7453d538a8 feat(skin): show scrubber preview timestamps (#1652) 2026-06-03 19:27:54 +10:00
Sam PottsandGitHub c5f75166fd feat(packages): update menu group labels (#1643) 2026-06-02 20:26:19 +10:00
Sam PottsandGitHub 2f5e23e100 fix(core): update trigger aria-expanded on close (#1644) 2026-06-02 17:07:20 +10:00
Sam PottsandGitHub e9a619e03a fix(core): focus selected radio menu items (#1645) 2026-06-02 16:40:11 +10:00
Santiago PuppoandGitHub efc7c23b7b fix(spf): add emptied listener to track-current-time behavior (#1634) 2026-06-01 16:54:58 -03:00
Santiago PuppoandGitHub 3741e8de12 feat(spf): background looping video (phase 1) (#1602) 2026-06-01 16:13:26 -03:00
Sam PottsandGitHub 01a2115aab fix(packages): scope menu data attributes (#1628) 2026-05-29 16:26:47 +10:00
Sam PottsandGitHub e7aa0a6669 feat(packages): constrain popovers to positioning boundary (#1627) 2026-05-29 16:26:15 +10:00
93c92ff646 fix(skin): restore overflow on audio skins (#1623)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-29 10:02:48 +10:00
996239e029 fix(skin): prevent initial pause icon flash (#1622)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-29 10:02:32 +10:00
1a3cb45b29 feat(spf): basic audio only use case + use-case-composition doc-type + implementation skills (#1584)
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 12:48:40 -07:00
Santiago PuppoandGitHub 338020e1d5 feat(packages): airplay button (#1531) 2026-05-27 10:22:31 -07:00
Sam PottsandGitHub 760870fdf2 fix(core): disable toggle captions when there are no captions (#1598) 2026-05-26 09:49:50 +10:00
Sam PottsandGitHub 23c6224446 fix(skin): minor design tweaks (#1597) 2026-05-26 07:40:20 +10:00
c9d6ccecdd docs(spf): seed feature registry, clusters reference, and document-feature skill (#1581)
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-21 12:07:33 -07:00
1a3911151a chore(build): quiet tsdown size reports in local dev (#1569)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-20 11:38:26 +10:00
Wesley LuytenGitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
5f1c2370fa chore: release main (#1477)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-05-19 12:48:40 -07:00
c112b6248b fix(spf): conventions, per-type specialization, config threading (#1537)
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-19 11:38:47 -07:00
20e77d37fa feat(packages): ship bundled markdown docs in html and react tarballs (#1560)
Co-authored-by: Claude <noreply@anthropic.com>
2026-05-19 11:35:16 -07:00