fix(webkit): stop wrapped toast titles overlapping and pin the glyph to line one - #900

Open
gabriel-lisboa-azion wants to merge 2 commits into
mainfrom
fix/toast-multiline-title
Open

fix(webkit): stop wrapped toast titles overlapping and pin the glyph to line one#900
gabriel-lisboa-azion wants to merge 2 commits into
mainfrom
fix/toast-multiline-title

Conversation

@gabriel-lisboa-azion

Copy link
Copy Markdown
Collaborator

Summary

  • Stacked on fix(webkit): align a toast's leading icon to its title, not to the whole row #892 (base is fix/toast-item-alignment, not main) — it continues that work rather than competing with it. GitHub will retarget this to main once fix(webkit): align a toast's leading icon to its title, not to the whole row #892 merges.
  • ToastTitle carried leading-none, pinning the line box to the font size (14px) while the glyphs need 18px, so every wrapped title overlapped its own next line by 4px. text-label-md already carries the token leading (1.5). The single-line case is unchanged.
  • The leading glyph now gets the title's line boxh-[1lh] on a box carrying text-label-md resolves to exactly the leading ToastTitle uses — so it sits on the first line at any card height. The loading Spinner shares that wrapper instead of keeping self-center, which centred it on the whole card.

How to test

  1. cd packages/webkit && npx vitest run src/components/feedback/toast → 23 passed.
  2. pnpm storybook:dev → Components/Feedback/Toast. Give a toast a long message so the title wraps: before, consecutive title lines overlap by ~4px; now they are cleanly spaced. The severity icon (and the loading spinner) sits on the title's first line, not the middle of the block.
  3. One-line toasts are unchanged from fix(webkit): align a toast's leading icon to its title, not to the whole row #892.

Notes

…ole row
The icon and the content column now sit in an inner items-start group, so the
typed glyph aligns to the title's line — its only line on a one-line toast, the
first line on a multi-line one — instead of to the outer row, which the 28px
action/close control stretched. The trailing region takes a negative block margin
so that control no longer inflates a one-line card, and a negative inline-end
margin so a text action's label ends optically flush with the card's padding
instead of inset by the button's own.
…to line one
Two defects that only appear once a toast wraps, which it does routinely — an
icon and a trailing action together leave the title barely half of the 356px
region.
`ToastTitle` carried `leading-none`, pinning the line box to the font size
(14px) while the glyphs need 18px, so every wrapped title overlapped its own
next line by 4px. `text-label-md` already carries the token leading (1.5), which
is what a multi-line title needs; the single-line case is unchanged.
The leading glyph was centred on the whole card (`items-center` plus
`self-center`), which put it beside the middle of a wrapped message, pointing at
nothing. It now gets the title's line box — `h-[1lh]` on a box carrying
`text-label-md` resolves to exactly the leading `ToastTitle` uses — so it sits on
the first line whether the card is one line or four. The trailing action moves to
the same row for the same reason.
Base automatically changed from fix/toast-item-alignment to mainAugust 21, 2026 14:27
gabriel-lisboa-azion added a commit that referenced this pull request Aug 26, 2026
Brings in the 17 commits main has since 2026-08-17 — the webkit
documentation category (#919), the shared leading column for Select /
MultiSelect / Dropdown (#935), resizable-panel (#902), the copy-button
tooltip and card-box header inset (#936), --container-site (#923), the
page-enter / content-enter arrivals (#896), the colored-icon currentColor
fix (#930) and the skills that landed with them.
Conflict resolution, all fifteen:
Demo wins where it already carries work that is still an OPEN PR on main
and main's side is the older shape that PR rewrote — toast-item (#900's
`h-[1lh]` line box over #892's `self-center`), use-placement and
popover.test (#932's translate anchoring over #891's prose), and the
theme animation tokens, where the entry-count canary confirms every
main entry survived alongside demo's.
Main wins where its side is a superset or the corrected form — DESIGN.md
(gains `text-body-prose-md` and `.layout-column-docs`), package.json
(keeping demo's footer block would have duplicated the four keys main
already merged in above it), and resizable-panel.test, whose named
imports are the form that keeps CodeQL from reading a compiler-generated
`.vue` default export as undefined.
Both sides where each added something: .size-limit.json keeps demo's
ratcheted 1.1 KB footer-root budget and takes main's fourteen doc-*
entries; the ui-craft skill and the CLI plan keep demo's microcopy
routing without duplicating main's entry.
Generated artifacts were rebuilt rather than hand-resolved — theme dist
via build:tokens, catalog.json via catalog:build — and both carry each
side's tokens and all 258 exports.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@gabriel-lisboa-azion
, '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

fix(webkit): stop wrapped toast titles overlapping and pin the glyph to line one - #900

Open
gabriel-lisboa-azion wants to merge 2 commits into
mainfrom
fix/toast-multiline-title
Open

fix(webkit): stop wrapped toast titles overlapping and pin the glyph to line one#900
gabriel-lisboa-azion wants to merge 2 commits into
mainfrom
fix/toast-multiline-title

Conversation

@gabriel-lisboa-azion

Copy link
Copy Markdown
Collaborator

Summary

  • Stacked on fix(webkit): align a toast's leading icon to its title, not to the whole row #892 (base is fix/toast-item-alignment, not main) — it continues that work rather than competing with it. GitHub will retarget this to main once fix(webkit): align a toast's leading icon to its title, not to the whole row #892 merges.
  • ToastTitle carried leading-none, pinning the line box to the font size (14px) while the glyphs need 18px, so every wrapped title overlapped its own next line by 4px. text-label-md already carries the token leading (1.5). The single-line case is unchanged.
  • The leading glyph now gets the title's line boxh-[1lh] on a box carrying text-label-md resolves to exactly the leading ToastTitle uses — so it sits on the first line at any card height. The loading Spinner shares that wrapper instead of keeping self-center, which centred it on the whole card.

How to test

  1. cd packages/webkit && npx vitest run src/components/feedback/toast → 23 passed.
  2. pnpm storybook:dev → Components/Feedback/Toast. Give a toast a long message so the title wraps: before, consecutive title lines overlap by ~4px; now they are cleanly spaced. The severity icon (and the loading spinner) sits on the title's first line, not the middle of the block.
  3. One-line toasts are unchanged from fix(webkit): align a toast's leading icon to its title, not to the whole row #892.

Notes

…ole row
The icon and the content column now sit in an inner items-start group, so the
typed glyph aligns to the title's line — its only line on a one-line toast, the
first line on a multi-line one — instead of to the outer row, which the 28px
action/close control stretched. The trailing region takes a negative block margin
so that control no longer inflates a one-line card, and a negative inline-end
margin so a text action's label ends optically flush with the card's padding
instead of inset by the button's own.
…to line one
Two defects that only appear once a toast wraps, which it does routinely — an
icon and a trailing action together leave the title barely half of the 356px
region.
`ToastTitle` carried `leading-none`, pinning the line box to the font size
(14px) while the glyphs need 18px, so every wrapped title overlapped its own
next line by 4px. `text-label-md` already carries the token leading (1.5), which
is what a multi-line title needs; the single-line case is unchanged.
The leading glyph was centred on the whole card (`items-center` plus
`self-center`), which put it beside the middle of a wrapped message, pointing at
nothing. It now gets the title's line box — `h-[1lh]` on a box carrying
`text-label-md` resolves to exactly the leading `ToastTitle` uses — so it sits on
the first line whether the card is one line or four. The trailing action moves to
the same row for the same reason.
Base automatically changed from fix/toast-item-alignment to mainAugust 21, 2026 14:27
gabriel-lisboa-azion added a commit that referenced this pull request Aug 26, 2026
Brings in the 17 commits main has since 2026-08-17 — the webkit
documentation category (#919), the shared leading column for Select /
MultiSelect / Dropdown (#935), resizable-panel (#902), the copy-button
tooltip and card-box header inset (#936), --container-site (#923), the
page-enter / content-enter arrivals (#896), the colored-icon currentColor
fix (#930) and the skills that landed with them.
Conflict resolution, all fifteen:
Demo wins where it already carries work that is still an OPEN PR on main
and main's side is the older shape that PR rewrote — toast-item (#900's
`h-[1lh]` line box over #892's `self-center`), use-placement and
popover.test (#932's translate anchoring over #891's prose), and the
theme animation tokens, where the entry-count canary confirms every
main entry survived alongside demo's.
Main wins where its side is a superset or the corrected form — DESIGN.md
(gains `text-body-prose-md` and `.layout-column-docs`), package.json
(keeping demo's footer block would have duplicated the four keys main
already merged in above it), and resizable-panel.test, whose named
imports are the form that keeps CodeQL from reading a compiler-generated
`.vue` default export as undefined.
Both sides where each added something: .size-limit.json keeps demo's
ratcheted 1.1 KB footer-root budget and takes main's fourteen doc-*
entries; the ui-craft skill and the CLI plan keep demo's microcopy
routing without duplicating main's entry.
Generated artifacts were rebuilt rather than hand-resolved — theme dist
via build:tokens, catalog.json via catalog:build — and both carry each
side's tokens and all 258 exports.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@gabriel-lisboa-azion
, '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

fix(webkit): stop wrapped toast titles overlapping and pin the glyph to line one - #900

Open
gabriel-lisboa-azion wants to merge 2 commits into
mainfrom
fix/toast-multiline-title
Open

fix(webkit): stop wrapped toast titles overlapping and pin the glyph to line one#900
gabriel-lisboa-azion wants to merge 2 commits into
mainfrom
fix/toast-multiline-title

Conversation

@gabriel-lisboa-azion

Copy link
Copy Markdown
Collaborator

Summary

  • Stacked on fix(webkit): align a toast's leading icon to its title, not to the whole row #892 (base is fix/toast-item-alignment, not main) — it continues that work rather than competing with it. GitHub will retarget this to main once fix(webkit): align a toast's leading icon to its title, not to the whole row #892 merges.
  • ToastTitle carried leading-none, pinning the line box to the font size (14px) while the glyphs need 18px, so every wrapped title overlapped its own next line by 4px. text-label-md already carries the token leading (1.5). The single-line case is unchanged.
  • The leading glyph now gets the title's line boxh-[1lh] on a box carrying text-label-md resolves to exactly the leading ToastTitle uses — so it sits on the first line at any card height. The loading Spinner shares that wrapper instead of keeping self-center, which centred it on the whole card.

How to test

  1. cd packages/webkit && npx vitest run src/components/feedback/toast → 23 passed.
  2. pnpm storybook:dev → Components/Feedback/Toast. Give a toast a long message so the title wraps: before, consecutive title lines overlap by ~4px; now they are cleanly spaced. The severity icon (and the loading spinner) sits on the title's first line, not the middle of the block.
  3. One-line toasts are unchanged from fix(webkit): align a toast's leading icon to its title, not to the whole row #892.

Notes

…ole row
The icon and the content column now sit in an inner items-start group, so the
typed glyph aligns to the title's line — its only line on a one-line toast, the
first line on a multi-line one — instead of to the outer row, which the 28px
action/close control stretched. The trailing region takes a negative block margin
so that control no longer inflates a one-line card, and a negative inline-end
margin so a text action's label ends optically flush with the card's padding
instead of inset by the button's own.
…to line one
Two defects that only appear once a toast wraps, which it does routinely — an
icon and a trailing action together leave the title barely half of the 356px
region.
`ToastTitle` carried `leading-none`, pinning the line box to the font size
(14px) while the glyphs need 18px, so every wrapped title overlapped its own
next line by 4px. `text-label-md` already carries the token leading (1.5), which
is what a multi-line title needs; the single-line case is unchanged.
The leading glyph was centred on the whole card (`items-center` plus
`self-center`), which put it beside the middle of a wrapped message, pointing at
nothing. It now gets the title's line box — `h-[1lh]` on a box carrying
`text-label-md` resolves to exactly the leading `ToastTitle` uses — so it sits on
the first line whether the card is one line or four. The trailing action moves to
the same row for the same reason.
Base automatically changed from fix/toast-item-alignment to mainAugust 21, 2026 14:27
gabriel-lisboa-azion added a commit that referenced this pull request Aug 26, 2026
Brings in the 17 commits main has since 2026-08-17 — the webkit
documentation category (#919), the shared leading column for Select /
MultiSelect / Dropdown (#935), resizable-panel (#902), the copy-button
tooltip and card-box header inset (#936), --container-site (#923), the
page-enter / content-enter arrivals (#896), the colored-icon currentColor
fix (#930) and the skills that landed with them.
Conflict resolution, all fifteen:
Demo wins where it already carries work that is still an OPEN PR on main
and main's side is the older shape that PR rewrote — toast-item (#900's
`h-[1lh]` line box over #892's `self-center`), use-placement and
popover.test (#932's translate anchoring over #891's prose), and the
theme animation tokens, where the entry-count canary confirms every
main entry survived alongside demo's.
Main wins where its side is a superset or the corrected form — DESIGN.md
(gains `text-body-prose-md` and `.layout-column-docs`), package.json
(keeping demo's footer block would have duplicated the four keys main
already merged in above it), and resizable-panel.test, whose named
imports are the form that keeps CodeQL from reading a compiler-generated
`.vue` default export as undefined.
Both sides where each added something: .size-limit.json keeps demo's
ratcheted 1.1 KB footer-root budget and takes main's fourteen doc-*
entries; the ui-craft skill and the CLI plan keep demo's microcopy
routing without duplicating main's entry.
Generated artifacts were rebuilt rather than hand-resolved — theme dist
via build:tokens, catalog.json via catalog:build — and both carry each
side's tokens and all 258 exports.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@gabriel-lisboa-azion
, '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

fix(webkit): stop wrapped toast titles overlapping and pin the glyph to line one - #900

Open
gabriel-lisboa-azion wants to merge 2 commits into
mainfrom
fix/toast-multiline-title
Open

fix(webkit): stop wrapped toast titles overlapping and pin the glyph to line one#900
gabriel-lisboa-azion wants to merge 2 commits into
mainfrom
fix/toast-multiline-title

Conversation

@gabriel-lisboa-azion

Copy link
Copy Markdown
Collaborator

Summary

  • Stacked on fix(webkit): align a toast's leading icon to its title, not to the whole row #892 (base is fix/toast-item-alignment, not main) — it continues that work rather than competing with it. GitHub will retarget this to main once fix(webkit): align a toast's leading icon to its title, not to the whole row #892 merges.
  • ToastTitle carried leading-none, pinning the line box to the font size (14px) while the glyphs need 18px, so every wrapped title overlapped its own next line by 4px. text-label-md already carries the token leading (1.5). The single-line case is unchanged.
  • The leading glyph now gets the title's line boxh-[1lh] on a box carrying text-label-md resolves to exactly the leading ToastTitle uses — so it sits on the first line at any card height. The loading Spinner shares that wrapper instead of keeping self-center, which centred it on the whole card.

How to test

  1. cd packages/webkit && npx vitest run src/components/feedback/toast → 23 passed.
  2. pnpm storybook:dev → Components/Feedback/Toast. Give a toast a long message so the title wraps: before, consecutive title lines overlap by ~4px; now they are cleanly spaced. The severity icon (and the loading spinner) sits on the title's first line, not the middle of the block.
  3. One-line toasts are unchanged from fix(webkit): align a toast's leading icon to its title, not to the whole row #892.

Notes

…ole row
The icon and the content column now sit in an inner items-start group, so the
typed glyph aligns to the title's line — its only line on a one-line toast, the
first line on a multi-line one — instead of to the outer row, which the 28px
action/close control stretched. The trailing region takes a negative block margin
so that control no longer inflates a one-line card, and a negative inline-end
margin so a text action's label ends optically flush with the card's padding
instead of inset by the button's own.
…to line one
Two defects that only appear once a toast wraps, which it does routinely — an
icon and a trailing action together leave the title barely half of the 356px
region.
`ToastTitle` carried `leading-none`, pinning the line box to the font size
(14px) while the glyphs need 18px, so every wrapped title overlapped its own
next line by 4px. `text-label-md` already carries the token leading (1.5), which
is what a multi-line title needs; the single-line case is unchanged.
The leading glyph was centred on the whole card (`items-center` plus
`self-center`), which put it beside the middle of a wrapped message, pointing at
nothing. It now gets the title's line box — `h-[1lh]` on a box carrying
`text-label-md` resolves to exactly the leading `ToastTitle` uses — so it sits on
the first line whether the card is one line or four. The trailing action moves to
the same row for the same reason.
Base automatically changed from fix/toast-item-alignment to mainAugust 21, 2026 14:27
gabriel-lisboa-azion added a commit that referenced this pull request Aug 26, 2026
Brings in the 17 commits main has since 2026-08-17 — the webkit
documentation category (#919), the shared leading column for Select /
MultiSelect / Dropdown (#935), resizable-panel (#902), the copy-button
tooltip and card-box header inset (#936), --container-site (#923), the
page-enter / content-enter arrivals (#896), the colored-icon currentColor
fix (#930) and the skills that landed with them.
Conflict resolution, all fifteen:
Demo wins where it already carries work that is still an OPEN PR on main
and main's side is the older shape that PR rewrote — toast-item (#900's
`h-[1lh]` line box over #892's `self-center`), use-placement and
popover.test (#932's translate anchoring over #891's prose), and the
theme animation tokens, where the entry-count canary confirms every
main entry survived alongside demo's.
Main wins where its side is a superset or the corrected form — DESIGN.md
(gains `text-body-prose-md` and `.layout-column-docs`), package.json
(keeping demo's footer block would have duplicated the four keys main
already merged in above it), and resizable-panel.test, whose named
imports are the form that keeps CodeQL from reading a compiler-generated
`.vue` default export as undefined.
Both sides where each added something: .size-limit.json keeps demo's
ratcheted 1.1 KB footer-root budget and takes main's fourteen doc-*
entries; the ui-craft skill and the CLI plan keep demo's microcopy
routing without duplicating main's entry.
Generated artifacts were rebuilt rather than hand-resolved — theme dist
via build:tokens, catalog.json via catalog:build — and both carry each
side's tokens and all 258 exports.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@gabriel-lisboa-azion
, '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

fix(webkit): stop wrapped toast titles overlapping and pin the glyph to line one - #900

Open
gabriel-lisboa-azion wants to merge 2 commits into
mainfrom
fix/toast-multiline-title
Open

fix(webkit): stop wrapped toast titles overlapping and pin the glyph to line one#900
gabriel-lisboa-azion wants to merge 2 commits into
mainfrom
fix/toast-multiline-title

Conversation

@gabriel-lisboa-azion

Copy link
Copy Markdown
Collaborator

Summary

  • Stacked on fix(webkit): align a toast's leading icon to its title, not to the whole row #892 (base is fix/toast-item-alignment, not main) — it continues that work rather than competing with it. GitHub will retarget this to main once fix(webkit): align a toast's leading icon to its title, not to the whole row #892 merges.
  • ToastTitle carried leading-none, pinning the line box to the font size (14px) while the glyphs need 18px, so every wrapped title overlapped its own next line by 4px. text-label-md already carries the token leading (1.5). The single-line case is unchanged.
  • The leading glyph now gets the title's line boxh-[1lh] on a box carrying text-label-md resolves to exactly the leading ToastTitle uses — so it sits on the first line at any card height. The loading Spinner shares that wrapper instead of keeping self-center, which centred it on the whole card.

How to test

  1. cd packages/webkit && npx vitest run src/components/feedback/toast → 23 passed.
  2. pnpm storybook:dev → Components/Feedback/Toast. Give a toast a long message so the title wraps: before, consecutive title lines overlap by ~4px; now they are cleanly spaced. The severity icon (and the loading spinner) sits on the title's first line, not the middle of the block.
  3. One-line toasts are unchanged from fix(webkit): align a toast's leading icon to its title, not to the whole row #892.

Notes

…ole row
The icon and the content column now sit in an inner items-start group, so the
typed glyph aligns to the title's line — its only line on a one-line toast, the
first line on a multi-line one — instead of to the outer row, which the 28px
action/close control stretched. The trailing region takes a negative block margin
so that control no longer inflates a one-line card, and a negative inline-end
margin so a text action's label ends optically flush with the card's padding
instead of inset by the button's own.
…to line one
Two defects that only appear once a toast wraps, which it does routinely — an
icon and a trailing action together leave the title barely half of the 356px
region.
`ToastTitle` carried `leading-none`, pinning the line box to the font size
(14px) while the glyphs need 18px, so every wrapped title overlapped its own
next line by 4px. `text-label-md` already carries the token leading (1.5), which
is what a multi-line title needs; the single-line case is unchanged.
The leading glyph was centred on the whole card (`items-center` plus
`self-center`), which put it beside the middle of a wrapped message, pointing at
nothing. It now gets the title's line box — `h-[1lh]` on a box carrying
`text-label-md` resolves to exactly the leading `ToastTitle` uses — so it sits on
the first line whether the card is one line or four. The trailing action moves to
the same row for the same reason.
Base automatically changed from fix/toast-item-alignment to mainAugust 21, 2026 14:27
gabriel-lisboa-azion added a commit that referenced this pull request Aug 26, 2026
Brings in the 17 commits main has since 2026-08-17 — the webkit
documentation category (#919), the shared leading column for Select /
MultiSelect / Dropdown (#935), resizable-panel (#902), the copy-button
tooltip and card-box header inset (#936), --container-site (#923), the
page-enter / content-enter arrivals (#896), the colored-icon currentColor
fix (#930) and the skills that landed with them.
Conflict resolution, all fifteen:
Demo wins where it already carries work that is still an OPEN PR on main
and main's side is the older shape that PR rewrote — toast-item (#900's
`h-[1lh]` line box over #892's `self-center`), use-placement and
popover.test (#932's translate anchoring over #891's prose), and the
theme animation tokens, where the entry-count canary confirms every
main entry survived alongside demo's.
Main wins where its side is a superset or the corrected form — DESIGN.md
(gains `text-body-prose-md` and `.layout-column-docs`), package.json
(keeping demo's footer block would have duplicated the four keys main
already merged in above it), and resizable-panel.test, whose named
imports are the form that keeps CodeQL from reading a compiler-generated
`.vue` default export as undefined.
Both sides where each added something: .size-limit.json keeps demo's
ratcheted 1.1 KB footer-root budget and takes main's fourteen doc-*
entries; the ui-craft skill and the CLI plan keep demo's microcopy
routing without duplicating main's entry.
Generated artifacts were rebuilt rather than hand-resolved — theme dist
via build:tokens, catalog.json via catalog:build — and both carry each
side's tokens and all 258 exports.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@gabriel-lisboa-azion
, '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

fix(webkit): stop wrapped toast titles overlapping and pin the glyph to line one - #900

Open
gabriel-lisboa-azion wants to merge 2 commits into
mainfrom
fix/toast-multiline-title
Open

fix(webkit): stop wrapped toast titles overlapping and pin the glyph to line one#900
gabriel-lisboa-azion wants to merge 2 commits into
mainfrom
fix/toast-multiline-title

Conversation

@gabriel-lisboa-azion

Copy link
Copy Markdown
Collaborator

Summary

  • Stacked on fix(webkit): align a toast's leading icon to its title, not to the whole row #892 (base is fix/toast-item-alignment, not main) — it continues that work rather than competing with it. GitHub will retarget this to main once fix(webkit): align a toast's leading icon to its title, not to the whole row #892 merges.
  • ToastTitle carried leading-none, pinning the line box to the font size (14px) while the glyphs need 18px, so every wrapped title overlapped its own next line by 4px. text-label-md already carries the token leading (1.5). The single-line case is unchanged.
  • The leading glyph now gets the title's line boxh-[1lh] on a box carrying text-label-md resolves to exactly the leading ToastTitle uses — so it sits on the first line at any card height. The loading Spinner shares that wrapper instead of keeping self-center, which centred it on the whole card.

How to test

  1. cd packages/webkit && npx vitest run src/components/feedback/toast → 23 passed.
  2. pnpm storybook:dev → Components/Feedback/Toast. Give a toast a long message so the title wraps: before, consecutive title lines overlap by ~4px; now they are cleanly spaced. The severity icon (and the loading spinner) sits on the title's first line, not the middle of the block.
  3. One-line toasts are unchanged from fix(webkit): align a toast's leading icon to its title, not to the whole row #892.

Notes

…ole row
The icon and the content column now sit in an inner items-start group, so the
typed glyph aligns to the title's line — its only line on a one-line toast, the
first line on a multi-line one — instead of to the outer row, which the 28px
action/close control stretched. The trailing region takes a negative block margin
so that control no longer inflates a one-line card, and a negative inline-end
margin so a text action's label ends optically flush with the card's padding
instead of inset by the button's own.
…to line one
Two defects that only appear once a toast wraps, which it does routinely — an
icon and a trailing action together leave the title barely half of the 356px
region.
`ToastTitle` carried `leading-none`, pinning the line box to the font size
(14px) while the glyphs need 18px, so every wrapped title overlapped its own
next line by 4px. `text-label-md` already carries the token leading (1.5), which
is what a multi-line title needs; the single-line case is unchanged.
The leading glyph was centred on the whole card (`items-center` plus
`self-center`), which put it beside the middle of a wrapped message, pointing at
nothing. It now gets the title's line box — `h-[1lh]` on a box carrying
`text-label-md` resolves to exactly the leading `ToastTitle` uses — so it sits on
the first line whether the card is one line or four. The trailing action moves to
the same row for the same reason.
Base automatically changed from fix/toast-item-alignment to mainAugust 21, 2026 14:27
gabriel-lisboa-azion added a commit that referenced this pull request Aug 26, 2026
Brings in the 17 commits main has since 2026-08-17 — the webkit
documentation category (#919), the shared leading column for Select /
MultiSelect / Dropdown (#935), resizable-panel (#902), the copy-button
tooltip and card-box header inset (#936), --container-site (#923), the
page-enter / content-enter arrivals (#896), the colored-icon currentColor
fix (#930) and the skills that landed with them.
Conflict resolution, all fifteen:
Demo wins where it already carries work that is still an OPEN PR on main
and main's side is the older shape that PR rewrote — toast-item (#900's
`h-[1lh]` line box over #892's `self-center`), use-placement and
popover.test (#932's translate anchoring over #891's prose), and the
theme animation tokens, where the entry-count canary confirms every
main entry survived alongside demo's.
Main wins where its side is a superset or the corrected form — DESIGN.md
(gains `text-body-prose-md` and `.layout-column-docs`), package.json
(keeping demo's footer block would have duplicated the four keys main
already merged in above it), and resizable-panel.test, whose named
imports are the form that keeps CodeQL from reading a compiler-generated
`.vue` default export as undefined.
Both sides where each added something: .size-limit.json keeps demo's
ratcheted 1.1 KB footer-root budget and takes main's fourteen doc-*
entries; the ui-craft skill and the CLI plan keep demo's microcopy
routing without duplicating main's entry.
Generated artifacts were rebuilt rather than hand-resolved — theme dist
via build:tokens, catalog.json via catalog:build — and both carry each
side's tokens and all 258 exports.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@gabriel-lisboa-azion
, '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

fix(webkit): stop wrapped toast titles overlapping and pin the glyph to line one - #900

Open
gabriel-lisboa-azion wants to merge 2 commits into
mainfrom
fix/toast-multiline-title
Open

fix(webkit): stop wrapped toast titles overlapping and pin the glyph to line one#900
gabriel-lisboa-azion wants to merge 2 commits into
mainfrom
fix/toast-multiline-title

Conversation

@gabriel-lisboa-azion

Copy link
Copy Markdown
Collaborator

Summary

  • Stacked on fix(webkit): align a toast's leading icon to its title, not to the whole row #892 (base is fix/toast-item-alignment, not main) — it continues that work rather than competing with it. GitHub will retarget this to main once fix(webkit): align a toast's leading icon to its title, not to the whole row #892 merges.
  • ToastTitle carried leading-none, pinning the line box to the font size (14px) while the glyphs need 18px, so every wrapped title overlapped its own next line by 4px. text-label-md already carries the token leading (1.5). The single-line case is unchanged.
  • The leading glyph now gets the title's line boxh-[1lh] on a box carrying text-label-md resolves to exactly the leading ToastTitle uses — so it sits on the first line at any card height. The loading Spinner shares that wrapper instead of keeping self-center, which centred it on the whole card.

How to test

  1. cd packages/webkit && npx vitest run src/components/feedback/toast → 23 passed.
  2. pnpm storybook:dev → Components/Feedback/Toast. Give a toast a long message so the title wraps: before, consecutive title lines overlap by ~4px; now they are cleanly spaced. The severity icon (and the loading spinner) sits on the title's first line, not the middle of the block.
  3. One-line toasts are unchanged from fix(webkit): align a toast's leading icon to its title, not to the whole row #892.

Notes

…ole row
The icon and the content column now sit in an inner items-start group, so the
typed glyph aligns to the title's line — its only line on a one-line toast, the
first line on a multi-line one — instead of to the outer row, which the 28px
action/close control stretched. The trailing region takes a negative block margin
so that control no longer inflates a one-line card, and a negative inline-end
margin so a text action's label ends optically flush with the card's padding
instead of inset by the button's own.
…to line one
Two defects that only appear once a toast wraps, which it does routinely — an
icon and a trailing action together leave the title barely half of the 356px
region.
`ToastTitle` carried `leading-none`, pinning the line box to the font size
(14px) while the glyphs need 18px, so every wrapped title overlapped its own
next line by 4px. `text-label-md` already carries the token leading (1.5), which
is what a multi-line title needs; the single-line case is unchanged.
The leading glyph was centred on the whole card (`items-center` plus
`self-center`), which put it beside the middle of a wrapped message, pointing at
nothing. It now gets the title's line box — `h-[1lh]` on a box carrying
`text-label-md` resolves to exactly the leading `ToastTitle` uses — so it sits on
the first line whether the card is one line or four. The trailing action moves to
the same row for the same reason.
Base automatically changed from fix/toast-item-alignment to mainAugust 21, 2026 14:27
gabriel-lisboa-azion added a commit that referenced this pull request Aug 26, 2026
Brings in the 17 commits main has since 2026-08-17 — the webkit
documentation category (#919), the shared leading column for Select /
MultiSelect / Dropdown (#935), resizable-panel (#902), the copy-button
tooltip and card-box header inset (#936), --container-site (#923), the
page-enter / content-enter arrivals (#896), the colored-icon currentColor
fix (#930) and the skills that landed with them.
Conflict resolution, all fifteen:
Demo wins where it already carries work that is still an OPEN PR on main
and main's side is the older shape that PR rewrote — toast-item (#900's
`h-[1lh]` line box over #892's `self-center`), use-placement and
popover.test (#932's translate anchoring over #891's prose), and the
theme animation tokens, where the entry-count canary confirms every
main entry survived alongside demo's.
Main wins where its side is a superset or the corrected form — DESIGN.md
(gains `text-body-prose-md` and `.layout-column-docs`), package.json
(keeping demo's footer block would have duplicated the four keys main
already merged in above it), and resizable-panel.test, whose named
imports are the form that keeps CodeQL from reading a compiler-generated
`.vue` default export as undefined.
Both sides where each added something: .size-limit.json keeps demo's
ratcheted 1.1 KB footer-root budget and takes main's fourteen doc-*
entries; the ui-craft skill and the CLI plan keep demo's microcopy
routing without duplicating main's entry.
Generated artifacts were rebuilt rather than hand-resolved — theme dist
via build:tokens, catalog.json via catalog:build — and both carry each
side's tokens and all 258 exports.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@gabriel-lisboa-azion
, '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

fix(webkit): stop wrapped toast titles overlapping and pin the glyph to line one - #900

Open
gabriel-lisboa-azion wants to merge 2 commits into
mainfrom
fix/toast-multiline-title
Open

fix(webkit): stop wrapped toast titles overlapping and pin the glyph to line one#900
gabriel-lisboa-azion wants to merge 2 commits into
mainfrom
fix/toast-multiline-title

Conversation

@gabriel-lisboa-azion

Copy link
Copy Markdown
Collaborator

Summary

  • Stacked on fix(webkit): align a toast's leading icon to its title, not to the whole row #892 (base is fix/toast-item-alignment, not main) — it continues that work rather than competing with it. GitHub will retarget this to main once fix(webkit): align a toast's leading icon to its title, not to the whole row #892 merges.
  • ToastTitle carried leading-none, pinning the line box to the font size (14px) while the glyphs need 18px, so every wrapped title overlapped its own next line by 4px. text-label-md already carries the token leading (1.5). The single-line case is unchanged.
  • The leading glyph now gets the title's line boxh-[1lh] on a box carrying text-label-md resolves to exactly the leading ToastTitle uses — so it sits on the first line at any card height. The loading Spinner shares that wrapper instead of keeping self-center, which centred it on the whole card.

How to test

  1. cd packages/webkit && npx vitest run src/components/feedback/toast → 23 passed.
  2. pnpm storybook:dev → Components/Feedback/Toast. Give a toast a long message so the title wraps: before, consecutive title lines overlap by ~4px; now they are cleanly spaced. The severity icon (and the loading spinner) sits on the title's first line, not the middle of the block.
  3. One-line toasts are unchanged from fix(webkit): align a toast's leading icon to its title, not to the whole row #892.

Notes

…ole row
The icon and the content column now sit in an inner items-start group, so the
typed glyph aligns to the title's line — its only line on a one-line toast, the
first line on a multi-line one — instead of to the outer row, which the 28px
action/close control stretched. The trailing region takes a negative block margin
so that control no longer inflates a one-line card, and a negative inline-end
margin so a text action's label ends optically flush with the card's padding
instead of inset by the button's own.
…to line one
Two defects that only appear once a toast wraps, which it does routinely — an
icon and a trailing action together leave the title barely half of the 356px
region.
`ToastTitle` carried `leading-none`, pinning the line box to the font size
(14px) while the glyphs need 18px, so every wrapped title overlapped its own
next line by 4px. `text-label-md` already carries the token leading (1.5), which
is what a multi-line title needs; the single-line case is unchanged.
The leading glyph was centred on the whole card (`items-center` plus
`self-center`), which put it beside the middle of a wrapped message, pointing at
nothing. It now gets the title's line box — `h-[1lh]` on a box carrying
`text-label-md` resolves to exactly the leading `ToastTitle` uses — so it sits on
the first line whether the card is one line or four. The trailing action moves to
the same row for the same reason.
Base automatically changed from fix/toast-item-alignment to mainAugust 21, 2026 14:27
gabriel-lisboa-azion added a commit that referenced this pull request Aug 26, 2026
Brings in the 17 commits main has since 2026-08-17 — the webkit
documentation category (#919), the shared leading column for Select /
MultiSelect / Dropdown (#935), resizable-panel (#902), the copy-button
tooltip and card-box header inset (#936), --container-site (#923), the
page-enter / content-enter arrivals (#896), the colored-icon currentColor
fix (#930) and the skills that landed with them.
Conflict resolution, all fifteen:
Demo wins where it already carries work that is still an OPEN PR on main
and main's side is the older shape that PR rewrote — toast-item (#900's
`h-[1lh]` line box over #892's `self-center`), use-placement and
popover.test (#932's translate anchoring over #891's prose), and the
theme animation tokens, where the entry-count canary confirms every
main entry survived alongside demo's.
Main wins where its side is a superset or the corrected form — DESIGN.md
(gains `text-body-prose-md` and `.layout-column-docs`), package.json
(keeping demo's footer block would have duplicated the four keys main
already merged in above it), and resizable-panel.test, whose named
imports are the form that keeps CodeQL from reading a compiler-generated
`.vue` default export as undefined.
Both sides where each added something: .size-limit.json keeps demo's
ratcheted 1.1 KB footer-root budget and takes main's fourteen doc-*
entries; the ui-craft skill and the CLI plan keep demo's microcopy
routing without duplicating main's entry.
Generated artifacts were rebuilt rather than hand-resolved — theme dist
via build:tokens, catalog.json via catalog:build — and both carry each
side's tokens and all 258 exports.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@gabriel-lisboa-azion