1. Pagination ordering — Moved the pagination block from inside the if (services) block to after Form->end() / before Widget->end(), so pagination renders below the bulk actions bar in the card-footer (matching the invoices widget pattern).
2. Trash icon color — The a.btn
{ color: inherit !important }
rule in _overrides.scss was overriding the non-!important a.btn-outline-danger
{ color: var(--danger-color) }
rule in _theme.scss. Fixed by adding!important to the danger rule and removing a.btn-outline-danger from the generic color: inherit block. Also updated the scheduled cancellation icon from text-muted to text-warning (and active icon to check-circle-fill text-success) to match the billing services widget.
3. Expand row modernization — Converted both the client profile and billing services widgets from their ad-hoc expand implementations to the standard data-collapse-row pattern from expandable-rows.js. This included updating the serviceinfo template to wrap content in <div class="p-3 service-info-content">, replacing addon rows with the same pattern, and removing duplicate JS/forms. Also removed bg-subtable class references (class doesn't exist in stylesheets).
4. Updated expandable-rows.js to fix AJAX expandable rows on initial page load. Without the data-collapse-initialized guard, rows that survive across calls (i.e., weren't replaced by AJAX) accumulate duplicate click handlers — each click would toggle the collapse twice (open then immediately close), appearing broken. The guard makes the function idempotent so it's safe to call repeatedly. Some other widgets are not affected because they have not yet been converted to utilize expandable-rows.js
The check icon missing from the design mockup was unintentional.
Tabs seemed to work when accessing the widget URL directly
Updated delete icon
Updated widget to follow the new pattern from the widget helper
Solved an issue with the 1st page expand area not expanding when using expandable-rows.js. There are other widgets that should be updated to use expandable-rows.js instead of Bootstrap's data-bs-toggle="collapse"