Admin theming fixes (round 2) - #40
Merged
Merged
Conversation
- A .modal-header holding only the close button drew Bootstrap's hairline under nothing; detect the title structurally with :has() and zero the border width for that case only. - h1 goes bold (700): Bootstrap's reboot leaves headings at 500, and h1 carried 700 through v2 (Stisla set every heading bold). - The hr rhythm (dashed, 2.5rem) takes !important on its margin so scoped tweaks cannot silently compress the separator. Static catalogue rebuilt (castor catalog:build --no-shot). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01G9HvRYqT42n7yvuCwqHGSh
The navbar notification panels (communication, sync) collapsed to their
content: v2's '.dropdown-list { width: 350px; padding: 0 }' was lost in
the ablation. Restore it as a min-width, and drop the menu padding the
rows never expect (they carry their own).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01G9HvRYqT42n7yvuCwqHGSh
Flash messages and legacy templates use Bootstrap's alert vocabulary, which v3 left on Bootstrap's pale defaults. Paint them the way Tick&Live wore them through v2: semantic fill, white text (links included), no border — driven through --bs-alert-* variables like the other bridged components. Also kill the stray bottom margin on a <p> inside any alert (v2 rule). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01G9HvRYqT42n7yvuCwqHGSh
The bridge hardcoded every --bs-*-rgb triplet: an integrator overriding a colour token still got the default palette in everything Bootstrap builds from rgba() — .bg-*, .text-bg-*, focus rings — and no override rule can catch a utility, since Bootstrap's layered !important beats any unlayered one. CSS cannot decompose a hex token into a bare comma triplet (relative colour syntax cannot escape its own function), so each bridged colour now carries an --aro-color-*-rgb companion in _tokens.css and the bridge maps it: one place to override the pair, no literal left behind. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01G9HvRYqT42n7yvuCwqHGSh
Stisla gave .tab-content > .tab-pane its own leading (24px, plus a 28px prose rule); the ablation dropped both and panes fell back to the 18px body leading, which cramps prose framed by chrome on every side. 28px is the arbitrated value, kept as a literal like the body leading in _typography.css, pending the §4 density pass. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01G9HvRYqT42n7yvuCwqHGSh
Same reasoning as h1's bold: Bootstrap's reboot leaves headings at 500. h1 bold, h2 semibold — a step apart so the hierarchy reads. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01G9HvRYqT42n7yvuCwqHGSh
The v3 ImageMapper calls getAttributes() for every ImageType, where v2 only read attributes in the gallery (whose items always carry one). Any integration passing a domain object without an 'attributes' property — legitimate, since only filename_value is configurable — now threw NoSuchPropertyException. Attributes and crops are optional and guarded by the mapper: read them through isReadable() and return null when absent. getFileName() stays strict, an unreadable filename is a real misconfiguration. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01G9HvRYqT42n7yvuCwqHGSh
app.js reads its button labels from data-confirm-label / data-cancel-label, which yield undefined when the attributes are absent. Object.assign copied that undefined over the translated defaults, and textContent = undefined empties the node — so every caller not using the actions macro rendered two blank buttons. Drop the undefined entries before merging. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01G9HvRYqT42n7yvuCwqHGSh
The macro covers edit / status / delete and nothing else, so a row needing one more item —
a preview link, a modal trigger — had to fall back to hand-written markup, and with it to
the blank-button bug. Add an optional 'extra' parameter, rendered between edit and status
and counted by the divider logic. Capture it with {% set %} so it stays Markup.
The parameter table in doc/macros.md was also missing 'status' and 'delete_token'.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01G9HvRYqT42n7yvuCwqHGSh
_bootstrap-layer.css claimed unlayered CSS always wins and that an integrator's stylesheet
therefore keeps winning over ours. True for normal declarations, false for !important: the
layer order reverses (CSS Cascading 5 §6.4), so a layered important beats an unlayered one.
Every Bootstrap utility is !important, so .w-100 in the markup now defeats an unlayered
.my-column { width: 350px !important }. Verified in Chromium. Nothing to escalate to — the
fix is to drop the utility. This is also the real reason components/ may not use !important.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01G9HvRYqT42n7yvuCwqHGSh
processResults moved from data.items / data.total_count to data.results / data.pagination.more. An endpoint answering the old shape fails in the worst way: the request fires, the response arrives, the list renders empty, and nothing reaches the console. Also note that Component\Select2\Select2 only covers Doctrine-backed lists — every path ends in a QueryBuilder, Select2DataProviderInterface included. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01G9HvRYqT42n7yvuCwqHGSh
The picker behind ColorType is unchanged since v3.0.0 — the type, the
`aropixel_admin_color_widget` block, the `$('.color-picker').spectrum()`
init and the `<link>`/`<script>` tags in Form/base.html.twig are all
still there. What went missing is the skin: it lived in the deleted
`css/custom.css`, and unlike Select2, DataTables, pickadate and
tagsinput it was never transcribed into `css/vendor/`. The picker fell
back to the raw plugin stylesheet — orange border, gradient buttons, hue
bar hard against the saturation square.
Restyled on tokens rather than transcribed, because two things the
v3.0.0 rules leaned on are gone: `--main-bg-color` (the *choose* button,
now on the primary tokens) and the Font Awesome 5 chevron of `.sp-dd`
(the admin no longer ships FA, so Spectrum's own `▼` glyph stays, muted).
The resting control now wears the field surface of the other inputs
instead of the old flat grey; geometry is kept as it was.
No form in the sandbox uses ColorType, so the popup appears in no visual
baseline — validated by driving a picker in Browserless, open and
closed, with and without the sheet.
The catalogue is rebuilt because a sheet entered the manifest: pure
addition, and the README preview came back byte-identical.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EkNJFwEGLYcH6MNb4rjHFK
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.