refactor(ui): Item primitive adoption for state-fill list rows (convergence round 2) - #686

Merged
jackwener merged 2 commits into
mainfrom
feat/item-row-convergence
Jul 9, 2026
Merged

refactor(ui): Item primitive adoption for state-fill list rows (convergence round 2)#686
jackwener merged 2 commits into
mainfrom
feat/item-row-convergence

Conversation

@jackwener

Copy link
Copy Markdown
Member

Round 2 of notes/ui-convergence-map-2026-07-09.md: Item becomes the one list-row implementation for state fills.

  • Item gains selected (→ governed --state-selected-bg token, data-selected hook) and interactive (suppress hover/pressed for inert geometry rows)
  • Migrated: models 连接行 (bespoke data-default fill retired; fix(desktop): 模型连接 rows speak the same row language as the catalog below #675 geometry preserved), daily-review archive rows (quiet-button recipe → Item with selected)
  • providerCatalogRow was already an Item — no bespoke fill left to fold
  • Deferred with reasons (recorded in the map): enabledProviderTrigger (accordion header semantics), settingsOsPermissionRow (static grid + contract-pinned structure, no fill), daily-review session rows (composite hover target), skills row (inert grid; interactive=false now exists for a future adoption), sidebar rows (densest contracts, by design)

Verified in worktree: ui 46/46 + desktop 2291/2291 exit-code gated, dead-css clean, alignment auditor clean, CDP captures on all four touched fixtures. Implemented by an opus worktree agent to the map spec.

…d 2)
Extend primitives/item.tsx with a `selected` prop (data-selected →
--state-selected-bg, the governed 6.5% foreground-alpha token) and an
`interactive` gate so inert geometry-only rows can borrow Item's
media/content/actions layout without a hover fill. Item already speaks
hover 4% / pressed 8% via Base UI useRender + render-prop composition.
Migrations:
- models 连接行 (enabledConnRow): data-default → Item `selected`; retire the
bespoke [data-default] fill rule in models.css. #675 mx-2/pl-10/pr-6
geometry preserved.
- daily-review archive rows: UiButton variant=quiet → Item render=<button>
with `selected` for the active archive; ItemContent stacks title over the
tabular-nums meta line. daily-review.css keeps only geometry + the
selected-border accent.
- providerCatalogRow: already on Item (round 1 groundwork) — no change
needed; its remaining CSS is pinned list-separator/logo-plate geometry.
Deferred/skipped (disproportionate contract risk, no state-fill to
converge — noted for a later round):
- enabledProviderTrigger: a Base UI AccordionTrigger header, not a list row;
its hover already uses --state-hover-bg.
- settingsOsPermissionRow: static grid row w/ status ::before stripe, pinned
by permissions-unified-card (grid/divider/div-actions) — Item's flex model
conflicts, zero interactive fill to fold.
- daily-review session rows: composite (hover on the <li> container +
non-interactive preview sibling outside the button) — not a single
state-fill row.
- maka-skill-library-row: bespoke 3-col grid + 38px icon tile, hover on the
parent <li>, pinned by skills.test.ts; interactive={false} support added
so a future round can adopt without behavior change.
- sidebar .maka-list-row/.maka-nav-row: untouched by design (densest pins).
Verify: desktop 2291/2291, ui 46/46, check-dead-css clean,
audit-alignment clean (no new findings on any fixture).
@jackwener
jackwener merged commit 5532db7 into mainJul 9, 2026
3 checks passed
@Astro-Han
Astro-Han deleted the feat/item-row-convergence branch July 14, 2026 05:05
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@jackwener
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

refactor(ui): Item primitive adoption for state-fill list rows (convergence round 2) - #686

Merged
jackwener merged 2 commits into
mainfrom
feat/item-row-convergence
Jul 9, 2026
Merged

refactor(ui): Item primitive adoption for state-fill list rows (convergence round 2)#686
jackwener merged 2 commits into
mainfrom
feat/item-row-convergence

Conversation

@jackwener

Copy link
Copy Markdown
Member

Round 2 of notes/ui-convergence-map-2026-07-09.md: Item becomes the one list-row implementation for state fills.

  • Item gains selected (→ governed --state-selected-bg token, data-selected hook) and interactive (suppress hover/pressed for inert geometry rows)
  • Migrated: models 连接行 (bespoke data-default fill retired; fix(desktop): 模型连接 rows speak the same row language as the catalog below #675 geometry preserved), daily-review archive rows (quiet-button recipe → Item with selected)
  • providerCatalogRow was already an Item — no bespoke fill left to fold
  • Deferred with reasons (recorded in the map): enabledProviderTrigger (accordion header semantics), settingsOsPermissionRow (static grid + contract-pinned structure, no fill), daily-review session rows (composite hover target), skills row (inert grid; interactive=false now exists for a future adoption), sidebar rows (densest contracts, by design)

Verified in worktree: ui 46/46 + desktop 2291/2291 exit-code gated, dead-css clean, alignment auditor clean, CDP captures on all four touched fixtures. Implemented by an opus worktree agent to the map spec.

…d 2)
Extend primitives/item.tsx with a `selected` prop (data-selected →
--state-selected-bg, the governed 6.5% foreground-alpha token) and an
`interactive` gate so inert geometry-only rows can borrow Item's
media/content/actions layout without a hover fill. Item already speaks
hover 4% / pressed 8% via Base UI useRender + render-prop composition.
Migrations:
- models 连接行 (enabledConnRow): data-default → Item `selected`; retire the
bespoke [data-default] fill rule in models.css. #675 mx-2/pl-10/pr-6
geometry preserved.
- daily-review archive rows: UiButton variant=quiet → Item render=<button>
with `selected` for the active archive; ItemContent stacks title over the
tabular-nums meta line. daily-review.css keeps only geometry + the
selected-border accent.
- providerCatalogRow: already on Item (round 1 groundwork) — no change
needed; its remaining CSS is pinned list-separator/logo-plate geometry.
Deferred/skipped (disproportionate contract risk, no state-fill to
converge — noted for a later round):
- enabledProviderTrigger: a Base UI AccordionTrigger header, not a list row;
its hover already uses --state-hover-bg.
- settingsOsPermissionRow: static grid row w/ status ::before stripe, pinned
by permissions-unified-card (grid/divider/div-actions) — Item's flex model
conflicts, zero interactive fill to fold.
- daily-review session rows: composite (hover on the <li> container +
non-interactive preview sibling outside the button) — not a single
state-fill row.
- maka-skill-library-row: bespoke 3-col grid + 38px icon tile, hover on the
parent <li>, pinned by skills.test.ts; interactive={false} support added
so a future round can adopt without behavior change.
- sidebar .maka-list-row/.maka-nav-row: untouched by design (densest pins).
Verify: desktop 2291/2291, ui 46/46, check-dead-css clean,
audit-alignment clean (no new findings on any fixture).
@jackwener
jackwener merged commit 5532db7 into mainJul 9, 2026
3 checks passed
@Astro-Han
Astro-Han deleted the feat/item-row-convergence branch July 14, 2026 05:05
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@jackwener
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

refactor(ui): Item primitive adoption for state-fill list rows (convergence round 2) - #686

Merged
jackwener merged 2 commits into
mainfrom
feat/item-row-convergence
Jul 9, 2026
Merged

refactor(ui): Item primitive adoption for state-fill list rows (convergence round 2)#686
jackwener merged 2 commits into
mainfrom
feat/item-row-convergence

Conversation

@jackwener

Copy link
Copy Markdown
Member

Round 2 of notes/ui-convergence-map-2026-07-09.md: Item becomes the one list-row implementation for state fills.

  • Item gains selected (→ governed --state-selected-bg token, data-selected hook) and interactive (suppress hover/pressed for inert geometry rows)
  • Migrated: models 连接行 (bespoke data-default fill retired; fix(desktop): 模型连接 rows speak the same row language as the catalog below #675 geometry preserved), daily-review archive rows (quiet-button recipe → Item with selected)
  • providerCatalogRow was already an Item — no bespoke fill left to fold
  • Deferred with reasons (recorded in the map): enabledProviderTrigger (accordion header semantics), settingsOsPermissionRow (static grid + contract-pinned structure, no fill), daily-review session rows (composite hover target), skills row (inert grid; interactive=false now exists for a future adoption), sidebar rows (densest contracts, by design)

Verified in worktree: ui 46/46 + desktop 2291/2291 exit-code gated, dead-css clean, alignment auditor clean, CDP captures on all four touched fixtures. Implemented by an opus worktree agent to the map spec.

…d 2)
Extend primitives/item.tsx with a `selected` prop (data-selected →
--state-selected-bg, the governed 6.5% foreground-alpha token) and an
`interactive` gate so inert geometry-only rows can borrow Item's
media/content/actions layout without a hover fill. Item already speaks
hover 4% / pressed 8% via Base UI useRender + render-prop composition.
Migrations:
- models 连接行 (enabledConnRow): data-default → Item `selected`; retire the
bespoke [data-default] fill rule in models.css. #675 mx-2/pl-10/pr-6
geometry preserved.
- daily-review archive rows: UiButton variant=quiet → Item render=<button>
with `selected` for the active archive; ItemContent stacks title over the
tabular-nums meta line. daily-review.css keeps only geometry + the
selected-border accent.
- providerCatalogRow: already on Item (round 1 groundwork) — no change
needed; its remaining CSS is pinned list-separator/logo-plate geometry.
Deferred/skipped (disproportionate contract risk, no state-fill to
converge — noted for a later round):
- enabledProviderTrigger: a Base UI AccordionTrigger header, not a list row;
its hover already uses --state-hover-bg.
- settingsOsPermissionRow: static grid row w/ status ::before stripe, pinned
by permissions-unified-card (grid/divider/div-actions) — Item's flex model
conflicts, zero interactive fill to fold.
- daily-review session rows: composite (hover on the <li> container +
non-interactive preview sibling outside the button) — not a single
state-fill row.
- maka-skill-library-row: bespoke 3-col grid + 38px icon tile, hover on the
parent <li>, pinned by skills.test.ts; interactive={false} support added
so a future round can adopt without behavior change.
- sidebar .maka-list-row/.maka-nav-row: untouched by design (densest pins).
Verify: desktop 2291/2291, ui 46/46, check-dead-css clean,
audit-alignment clean (no new findings on any fixture).
@jackwener
jackwener merged commit 5532db7 into mainJul 9, 2026
3 checks passed
@Astro-Han
Astro-Han deleted the feat/item-row-convergence branch July 14, 2026 05:05
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@jackwener
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

refactor(ui): Item primitive adoption for state-fill list rows (convergence round 2) - #686

Merged
jackwener merged 2 commits into
mainfrom
feat/item-row-convergence
Jul 9, 2026
Merged

refactor(ui): Item primitive adoption for state-fill list rows (convergence round 2)#686
jackwener merged 2 commits into
mainfrom
feat/item-row-convergence

Conversation

@jackwener

Copy link
Copy Markdown
Member

Round 2 of notes/ui-convergence-map-2026-07-09.md: Item becomes the one list-row implementation for state fills.

  • Item gains selected (→ governed --state-selected-bg token, data-selected hook) and interactive (suppress hover/pressed for inert geometry rows)
  • Migrated: models 连接行 (bespoke data-default fill retired; fix(desktop): 模型连接 rows speak the same row language as the catalog below #675 geometry preserved), daily-review archive rows (quiet-button recipe → Item with selected)
  • providerCatalogRow was already an Item — no bespoke fill left to fold
  • Deferred with reasons (recorded in the map): enabledProviderTrigger (accordion header semantics), settingsOsPermissionRow (static grid + contract-pinned structure, no fill), daily-review session rows (composite hover target), skills row (inert grid; interactive=false now exists for a future adoption), sidebar rows (densest contracts, by design)

Verified in worktree: ui 46/46 + desktop 2291/2291 exit-code gated, dead-css clean, alignment auditor clean, CDP captures on all four touched fixtures. Implemented by an opus worktree agent to the map spec.

…d 2)
Extend primitives/item.tsx with a `selected` prop (data-selected →
--state-selected-bg, the governed 6.5% foreground-alpha token) and an
`interactive` gate so inert geometry-only rows can borrow Item's
media/content/actions layout without a hover fill. Item already speaks
hover 4% / pressed 8% via Base UI useRender + render-prop composition.
Migrations:
- models 连接行 (enabledConnRow): data-default → Item `selected`; retire the
bespoke [data-default] fill rule in models.css. #675 mx-2/pl-10/pr-6
geometry preserved.
- daily-review archive rows: UiButton variant=quiet → Item render=<button>
with `selected` for the active archive; ItemContent stacks title over the
tabular-nums meta line. daily-review.css keeps only geometry + the
selected-border accent.
- providerCatalogRow: already on Item (round 1 groundwork) — no change
needed; its remaining CSS is pinned list-separator/logo-plate geometry.
Deferred/skipped (disproportionate contract risk, no state-fill to
converge — noted for a later round):
- enabledProviderTrigger: a Base UI AccordionTrigger header, not a list row;
its hover already uses --state-hover-bg.
- settingsOsPermissionRow: static grid row w/ status ::before stripe, pinned
by permissions-unified-card (grid/divider/div-actions) — Item's flex model
conflicts, zero interactive fill to fold.
- daily-review session rows: composite (hover on the <li> container +
non-interactive preview sibling outside the button) — not a single
state-fill row.
- maka-skill-library-row: bespoke 3-col grid + 38px icon tile, hover on the
parent <li>, pinned by skills.test.ts; interactive={false} support added
so a future round can adopt without behavior change.
- sidebar .maka-list-row/.maka-nav-row: untouched by design (densest pins).
Verify: desktop 2291/2291, ui 46/46, check-dead-css clean,
audit-alignment clean (no new findings on any fixture).
@jackwener
jackwener merged commit 5532db7 into mainJul 9, 2026
3 checks passed
@Astro-Han
Astro-Han deleted the feat/item-row-convergence branch July 14, 2026 05:05
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@jackwener
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

refactor(ui): Item primitive adoption for state-fill list rows (convergence round 2) - #686

Merged
jackwener merged 2 commits into
mainfrom
feat/item-row-convergence
Jul 9, 2026
Merged

refactor(ui): Item primitive adoption for state-fill list rows (convergence round 2)#686
jackwener merged 2 commits into
mainfrom
feat/item-row-convergence

Conversation

@jackwener

Copy link
Copy Markdown
Member

Round 2 of notes/ui-convergence-map-2026-07-09.md: Item becomes the one list-row implementation for state fills.

  • Item gains selected (→ governed --state-selected-bg token, data-selected hook) and interactive (suppress hover/pressed for inert geometry rows)
  • Migrated: models 连接行 (bespoke data-default fill retired; fix(desktop): 模型连接 rows speak the same row language as the catalog below #675 geometry preserved), daily-review archive rows (quiet-button recipe → Item with selected)
  • providerCatalogRow was already an Item — no bespoke fill left to fold
  • Deferred with reasons (recorded in the map): enabledProviderTrigger (accordion header semantics), settingsOsPermissionRow (static grid + contract-pinned structure, no fill), daily-review session rows (composite hover target), skills row (inert grid; interactive=false now exists for a future adoption), sidebar rows (densest contracts, by design)

Verified in worktree: ui 46/46 + desktop 2291/2291 exit-code gated, dead-css clean, alignment auditor clean, CDP captures on all four touched fixtures. Implemented by an opus worktree agent to the map spec.

…d 2)
Extend primitives/item.tsx with a `selected` prop (data-selected →
--state-selected-bg, the governed 6.5% foreground-alpha token) and an
`interactive` gate so inert geometry-only rows can borrow Item's
media/content/actions layout without a hover fill. Item already speaks
hover 4% / pressed 8% via Base UI useRender + render-prop composition.
Migrations:
- models 连接行 (enabledConnRow): data-default → Item `selected`; retire the
bespoke [data-default] fill rule in models.css. #675 mx-2/pl-10/pr-6
geometry preserved.
- daily-review archive rows: UiButton variant=quiet → Item render=<button>
with `selected` for the active archive; ItemContent stacks title over the
tabular-nums meta line. daily-review.css keeps only geometry + the
selected-border accent.
- providerCatalogRow: already on Item (round 1 groundwork) — no change
needed; its remaining CSS is pinned list-separator/logo-plate geometry.
Deferred/skipped (disproportionate contract risk, no state-fill to
converge — noted for a later round):
- enabledProviderTrigger: a Base UI AccordionTrigger header, not a list row;
its hover already uses --state-hover-bg.
- settingsOsPermissionRow: static grid row w/ status ::before stripe, pinned
by permissions-unified-card (grid/divider/div-actions) — Item's flex model
conflicts, zero interactive fill to fold.
- daily-review session rows: composite (hover on the <li> container +
non-interactive preview sibling outside the button) — not a single
state-fill row.
- maka-skill-library-row: bespoke 3-col grid + 38px icon tile, hover on the
parent <li>, pinned by skills.test.ts; interactive={false} support added
so a future round can adopt without behavior change.
- sidebar .maka-list-row/.maka-nav-row: untouched by design (densest pins).
Verify: desktop 2291/2291, ui 46/46, check-dead-css clean,
audit-alignment clean (no new findings on any fixture).
@jackwener
jackwener merged commit 5532db7 into mainJul 9, 2026
3 checks passed
@Astro-Han
Astro-Han deleted the feat/item-row-convergence branch July 14, 2026 05:05
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@jackwener
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

refactor(ui): Item primitive adoption for state-fill list rows (convergence round 2) - #686

Merged
jackwener merged 2 commits into
mainfrom
feat/item-row-convergence
Jul 9, 2026
Merged

refactor(ui): Item primitive adoption for state-fill list rows (convergence round 2)#686
jackwener merged 2 commits into
mainfrom
feat/item-row-convergence

Conversation

@jackwener

Copy link
Copy Markdown
Member

Round 2 of notes/ui-convergence-map-2026-07-09.md: Item becomes the one list-row implementation for state fills.

  • Item gains selected (→ governed --state-selected-bg token, data-selected hook) and interactive (suppress hover/pressed for inert geometry rows)
  • Migrated: models 连接行 (bespoke data-default fill retired; fix(desktop): 模型连接 rows speak the same row language as the catalog below #675 geometry preserved), daily-review archive rows (quiet-button recipe → Item with selected)
  • providerCatalogRow was already an Item — no bespoke fill left to fold
  • Deferred with reasons (recorded in the map): enabledProviderTrigger (accordion header semantics), settingsOsPermissionRow (static grid + contract-pinned structure, no fill), daily-review session rows (composite hover target), skills row (inert grid; interactive=false now exists for a future adoption), sidebar rows (densest contracts, by design)

Verified in worktree: ui 46/46 + desktop 2291/2291 exit-code gated, dead-css clean, alignment auditor clean, CDP captures on all four touched fixtures. Implemented by an opus worktree agent to the map spec.

…d 2)
Extend primitives/item.tsx with a `selected` prop (data-selected →
--state-selected-bg, the governed 6.5% foreground-alpha token) and an
`interactive` gate so inert geometry-only rows can borrow Item's
media/content/actions layout without a hover fill. Item already speaks
hover 4% / pressed 8% via Base UI useRender + render-prop composition.
Migrations:
- models 连接行 (enabledConnRow): data-default → Item `selected`; retire the
bespoke [data-default] fill rule in models.css. #675 mx-2/pl-10/pr-6
geometry preserved.
- daily-review archive rows: UiButton variant=quiet → Item render=<button>
with `selected` for the active archive; ItemContent stacks title over the
tabular-nums meta line. daily-review.css keeps only geometry + the
selected-border accent.
- providerCatalogRow: already on Item (round 1 groundwork) — no change
needed; its remaining CSS is pinned list-separator/logo-plate geometry.
Deferred/skipped (disproportionate contract risk, no state-fill to
converge — noted for a later round):
- enabledProviderTrigger: a Base UI AccordionTrigger header, not a list row;
its hover already uses --state-hover-bg.
- settingsOsPermissionRow: static grid row w/ status ::before stripe, pinned
by permissions-unified-card (grid/divider/div-actions) — Item's flex model
conflicts, zero interactive fill to fold.
- daily-review session rows: composite (hover on the <li> container +
non-interactive preview sibling outside the button) — not a single
state-fill row.
- maka-skill-library-row: bespoke 3-col grid + 38px icon tile, hover on the
parent <li>, pinned by skills.test.ts; interactive={false} support added
so a future round can adopt without behavior change.
- sidebar .maka-list-row/.maka-nav-row: untouched by design (densest pins).
Verify: desktop 2291/2291, ui 46/46, check-dead-css clean,
audit-alignment clean (no new findings on any fixture).
@jackwener
jackwener merged commit 5532db7 into mainJul 9, 2026
3 checks passed
@Astro-Han
Astro-Han deleted the feat/item-row-convergence branch July 14, 2026 05:05
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@jackwener
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

refactor(ui): Item primitive adoption for state-fill list rows (convergence round 2) - #686

Merged
jackwener merged 2 commits into
mainfrom
feat/item-row-convergence
Jul 9, 2026
Merged

refactor(ui): Item primitive adoption for state-fill list rows (convergence round 2)#686
jackwener merged 2 commits into
mainfrom
feat/item-row-convergence

Conversation

@jackwener

Copy link
Copy Markdown
Member

Round 2 of notes/ui-convergence-map-2026-07-09.md: Item becomes the one list-row implementation for state fills.

  • Item gains selected (→ governed --state-selected-bg token, data-selected hook) and interactive (suppress hover/pressed for inert geometry rows)
  • Migrated: models 连接行 (bespoke data-default fill retired; fix(desktop): 模型连接 rows speak the same row language as the catalog below #675 geometry preserved), daily-review archive rows (quiet-button recipe → Item with selected)
  • providerCatalogRow was already an Item — no bespoke fill left to fold
  • Deferred with reasons (recorded in the map): enabledProviderTrigger (accordion header semantics), settingsOsPermissionRow (static grid + contract-pinned structure, no fill), daily-review session rows (composite hover target), skills row (inert grid; interactive=false now exists for a future adoption), sidebar rows (densest contracts, by design)

Verified in worktree: ui 46/46 + desktop 2291/2291 exit-code gated, dead-css clean, alignment auditor clean, CDP captures on all four touched fixtures. Implemented by an opus worktree agent to the map spec.

…d 2)
Extend primitives/item.tsx with a `selected` prop (data-selected →
--state-selected-bg, the governed 6.5% foreground-alpha token) and an
`interactive` gate so inert geometry-only rows can borrow Item's
media/content/actions layout without a hover fill. Item already speaks
hover 4% / pressed 8% via Base UI useRender + render-prop composition.
Migrations:
- models 连接行 (enabledConnRow): data-default → Item `selected`; retire the
bespoke [data-default] fill rule in models.css. #675 mx-2/pl-10/pr-6
geometry preserved.
- daily-review archive rows: UiButton variant=quiet → Item render=<button>
with `selected` for the active archive; ItemContent stacks title over the
tabular-nums meta line. daily-review.css keeps only geometry + the
selected-border accent.
- providerCatalogRow: already on Item (round 1 groundwork) — no change
needed; its remaining CSS is pinned list-separator/logo-plate geometry.
Deferred/skipped (disproportionate contract risk, no state-fill to
converge — noted for a later round):
- enabledProviderTrigger: a Base UI AccordionTrigger header, not a list row;
its hover already uses --state-hover-bg.
- settingsOsPermissionRow: static grid row w/ status ::before stripe, pinned
by permissions-unified-card (grid/divider/div-actions) — Item's flex model
conflicts, zero interactive fill to fold.
- daily-review session rows: composite (hover on the <li> container +
non-interactive preview sibling outside the button) — not a single
state-fill row.
- maka-skill-library-row: bespoke 3-col grid + 38px icon tile, hover on the
parent <li>, pinned by skills.test.ts; interactive={false} support added
so a future round can adopt without behavior change.
- sidebar .maka-list-row/.maka-nav-row: untouched by design (densest pins).
Verify: desktop 2291/2291, ui 46/46, check-dead-css clean,
audit-alignment clean (no new findings on any fixture).
@jackwener
jackwener merged commit 5532db7 into mainJul 9, 2026
3 checks passed
@Astro-Han
Astro-Han deleted the feat/item-row-convergence branch July 14, 2026 05:05
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@jackwener
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

refactor(ui): Item primitive adoption for state-fill list rows (convergence round 2) - #686

Merged
jackwener merged 2 commits into
mainfrom
feat/item-row-convergence
Jul 9, 2026
Merged

refactor(ui): Item primitive adoption for state-fill list rows (convergence round 2)#686
jackwener merged 2 commits into
mainfrom
feat/item-row-convergence

Conversation

@jackwener

Copy link
Copy Markdown
Member

Round 2 of notes/ui-convergence-map-2026-07-09.md: Item becomes the one list-row implementation for state fills.

  • Item gains selected (→ governed --state-selected-bg token, data-selected hook) and interactive (suppress hover/pressed for inert geometry rows)
  • Migrated: models 连接行 (bespoke data-default fill retired; fix(desktop): 模型连接 rows speak the same row language as the catalog below #675 geometry preserved), daily-review archive rows (quiet-button recipe → Item with selected)
  • providerCatalogRow was already an Item — no bespoke fill left to fold
  • Deferred with reasons (recorded in the map): enabledProviderTrigger (accordion header semantics), settingsOsPermissionRow (static grid + contract-pinned structure, no fill), daily-review session rows (composite hover target), skills row (inert grid; interactive=false now exists for a future adoption), sidebar rows (densest contracts, by design)

Verified in worktree: ui 46/46 + desktop 2291/2291 exit-code gated, dead-css clean, alignment auditor clean, CDP captures on all four touched fixtures. Implemented by an opus worktree agent to the map spec.

…d 2)
Extend primitives/item.tsx with a `selected` prop (data-selected →
--state-selected-bg, the governed 6.5% foreground-alpha token) and an
`interactive` gate so inert geometry-only rows can borrow Item's
media/content/actions layout without a hover fill. Item already speaks
hover 4% / pressed 8% via Base UI useRender + render-prop composition.
Migrations:
- models 连接行 (enabledConnRow): data-default → Item `selected`; retire the
bespoke [data-default] fill rule in models.css. #675 mx-2/pl-10/pr-6
geometry preserved.
- daily-review archive rows: UiButton variant=quiet → Item render=<button>
with `selected` for the active archive; ItemContent stacks title over the
tabular-nums meta line. daily-review.css keeps only geometry + the
selected-border accent.
- providerCatalogRow: already on Item (round 1 groundwork) — no change
needed; its remaining CSS is pinned list-separator/logo-plate geometry.
Deferred/skipped (disproportionate contract risk, no state-fill to
converge — noted for a later round):
- enabledProviderTrigger: a Base UI AccordionTrigger header, not a list row;
its hover already uses --state-hover-bg.
- settingsOsPermissionRow: static grid row w/ status ::before stripe, pinned
by permissions-unified-card (grid/divider/div-actions) — Item's flex model
conflicts, zero interactive fill to fold.
- daily-review session rows: composite (hover on the <li> container +
non-interactive preview sibling outside the button) — not a single
state-fill row.
- maka-skill-library-row: bespoke 3-col grid + 38px icon tile, hover on the
parent <li>, pinned by skills.test.ts; interactive={false} support added
so a future round can adopt without behavior change.
- sidebar .maka-list-row/.maka-nav-row: untouched by design (densest pins).
Verify: desktop 2291/2291, ui 46/46, check-dead-css clean,
audit-alignment clean (no new findings on any fixture).
@jackwener
jackwener merged commit 5532db7 into mainJul 9, 2026
3 checks passed
@Astro-Han
Astro-Han deleted the feat/item-row-convergence branch July 14, 2026 05:05
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@jackwener