forked from fa/breadcrumb-the-shire
Introduces a reusable core detail-drawer primitive that slides in from the right and loads any view via a `*-fragment(none).phtml` endpoint. Bundles the address book list overhaul that is its first consumer. Core additions: - `app-detail-drawer.js` — generic drawer with stepper, focus trap, body scroll-lock, URL-hash deep-linking, session-expiry detection - `app-fragment-init.js` — auto-wires tabs/lookups/confirm/file-upload/ fslightbox inside injected HTML; consumers do not re-initialize components - `app-focus-trap.js` — shared focus-trap + refcounted scroll-lock, used by both filter-drawer and detail-drawer - `getHtml()` in `app-http.js` + `SessionExpiredError`; drawer reloads the page on auth redirect instead of rendering the login form in the panel - `DetailDrawerFragmentContractTest` enforces that every `initDetailDrawer` consumer ships matching `*-fragment($id).php` + `*-fragment(none).phtml` Address book list: - Grid collapses from 9 columns to 4 (identity / context / phone / actions) with a two-line identity cell (avatar + name + email) - Tenant register tabs above the grid using the `app-list-tabs` partial; tenant filter wired via hidden toolbar field so grid.js forwards it on every data fetch - Profile body extracted to a shared partial so the full-page view and the new drawer fragment share the same markup - New i18n keys for the drawer/list labels Also refactors `app-filter-drawer` to reuse the shared focus-trap and scroll-lock instead of maintaining its own copy, and documents the detail-drawer convention in CLAUDE.md. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
50 lines
2.0 KiB
CSS
50 lines
2.0 KiB
CSS
@charset "UTF-8";
|
|
|
|
/*
|
|
* Core CSS framework entrypoint for the default admin shell.
|
|
* Keep imports in deterministic order; file-level @layer declarations define precedence.
|
|
*/
|
|
@import url("app-layers.css");
|
|
|
|
/* Shared foundation used by multiple templates */
|
|
@import url("components/app-badges.css");
|
|
@import url("layout/app-shell.css");
|
|
@import url("components/app-dialog.css");
|
|
@import url("components/app-blockquote.css");
|
|
@import url("components/app-forms.css");
|
|
@import url("components/app-flash.css");
|
|
@import url("components/app-brand.css");
|
|
@import url("components/app-file-upload.css");
|
|
|
|
/* Default admin experience */
|
|
@import url("vendor-overrides/multi-select.css");
|
|
@import url("components/app-icon-button.css");
|
|
@import url("components/app-buttons.css");
|
|
@import url("vendor-overrides/gridjs.css");
|
|
@import url("layout/app-topbar.css");
|
|
@import url("layout/app-sidebar.css");
|
|
@import url("components/app-search.css");
|
|
@import url("components/app-list-titlebar.css");
|
|
@import url("components/app-details-titlebar.css");
|
|
@import url("components/app-dashboard-titlebar.css");
|
|
@import url("components/app-empty-state.css");
|
|
@import url("components/app-details.css");
|
|
@import url("components/app-details-card.css");
|
|
@import url("components/app-form-info-tile.css");
|
|
@import url("components/app-list-table.css");
|
|
@import url("components/app-list-tabs.css");
|
|
@import url("components/app-tabs.css");
|
|
@import url("components/app-list-toolbar.css");
|
|
@import url("components/app-filter-drawer.css");
|
|
@import url("components/app-detail-drawer.css");
|
|
@import url("components/app-active-filter-chips.css");
|
|
@import url("components/app-confirm-dialog.css");
|
|
@import url("components/app-breadcrumb.css");
|
|
@import url("components/app-tile.css");
|
|
@import url("components/app-tooltips.css");
|
|
@import url("components/app-lookup-field.css");
|
|
@import url("components/app-page-editor.css");
|
|
@import url("vendor-overrides/editorjs.css");
|
|
@import url("components/app-page-copy.css");
|
|
@import url("layout/app-aside-icon-bar.css");
|