The global toggle-switch styling for input[type=checkbox] doesn't fit
the 32px select column or 37px index column in frappe-datatable, so
content was clipped and checkboxes sat flush to the cell baseline.
- Compact 14x14 themed square checkbox (same paint as grid .row-check)
inside .datatable, with ::after pseudo disabled.
- Flex-center the cell when the only child is a checkbox.
- Let the filter input shrink instead of crushing its help-icon sibling.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Mirrors the grid module's UX in Frappe's desk list view — drag the right
edge of a header to resize, drag the header itself to reorder. Widths
and order persist per doctype in localStorage.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
v16 removed the .collapse-sidebar-link anchor the Full Width / Switch
Theme buttons inserted before, so they silently stopped rendering.
Add a jeySidebarAnchor() helper that falls back to .body-sidebar-bottom,
and re-add a Collapse/Expand button (calls frappe.app.sidebar.toggle_width)
to replace the default v15 link Frappe dropped.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Chrome theme: active grid row now visually matches the static row —
flattened inputs, forced bottom border, padding match, pressed-in
button-style effect on focused cells with smooth 0.45s transition.
- Read-only grid cells get a distinct lighter-grey bg only while their
row is the active one (uses Frappe's display:none on .field-area).
- Button press animations: expanded shadow set + explicit transitions
so press/release is symmetric and eased.
- Shared: fixed section-in keyframe leaving a stacking context that
clipped Link autocomplete dropdowns; dropdown fade-out without
Popper position reset; smooth sidebar expand to match collapse.
- JS: clip section overflow during collapse transition, restore after
transitionend; freeze dropdown position during Bootstrap hide.
- CLAUDE.md: rewritten as Claude Code guidance doc.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Rewrites <use href="#icon-NAME"> inside .frappe-menu dropdown items
(the user/settings menu at top-left) to semantically similar but
visually distinct lucide ids — home→house, sliders-horizontal→
settings-2, rotate-ccw→refresh-ccw, maximize→chevrons-left-right,
moon→moon-star, info→life-buoy, logout→log-out. Idempotent via
.jey-menu-remap-done marker. Wired into processAll + rebuildAllIcons
so it runs on boot, theme switch and DOM mutations.
Also switches the custom .jey-fullwidth-link button to the same
chevrons-left-right icon so its appearance matches the menu entry.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Creates a custom /desk subsystem "Taxes Az" listing user-facing doctypes
from the taxes_az module in three cards (Declarations & Returns, Setup &
Reference, Period Closing & Tools). The doctype list is a STATIC snapshot
baked into taxes_workspace.py — adding a new DocType to taxes_az will not
automatically put it into the workspace; edit the tuples and re-run setup.
- Uses "Taxes Az" name (not "Taxes") to avoid collision with erpnext's
built-in Workspace Sidebar "Taxes", which otherwise hijacks routing to
/app/sales-taxes-and-charges-template.
- Creates a matching Workspace Sidebar whose first Link is link_type=
"Workspace" so Frappe's desktop.js get_route() generates a clean
/app/taxes-az route and the click stays in-tab (standard behaviour).
- Desktop Icon with idx=999 pins it to the end of the /desk grid.
- Cleanup of the obsolete "Taxes" doc we created earlier is idempotent
and scoped to jey_theme-owned records (never touches erpnext's).
Registered via after_migrate hook so every `bench migrate` re-asserts
the configuration. setup() is idempotent.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Menu titles in the app switcher dropdown and sidebar header are
translated (e.g. Azerbaijani), so looking up THEME_ICONS by textContent
missed everything. resolveEnglishKey() now extracts the untranslated
icon name from the <img src> URL, falls back to scanning
frappe.boot.desktop_icons for a matching __(label), then the text.
Also adds a "taxes az" alias to THEME_ICONS.chrome so our new
Taxes Az desktop icon renders the tax document SVG instead of the
alphabet fallback.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Adds jey_theme.access_control with a single source of truth (BLOCKED_MODULES,
BLOCKED_DOCTYPES_EXTRA) and three Frappe hooks:
- before_request: HTTP-level block on /api/resource/<Doctype>, /app/<slug>
and any whitelisted method passing `doctype` in form_dict. Runs before the
Administrator bypass in frappe.permissions, so it blocks every user.
- extend_bootinfo: strips blocked modules/doctypes/workspaces from bootinfo
(workspaces.pages, module_wise_workspaces, app_data, desktop_icons,
user.can_read/...) so the client router never registers routes for them
and the sidebar/switcher hide them.
- has_permission wildcard: per-doc safety net for non-Administrator users.
shared.css gets desktop-icon[data-id] fallbacks for Quality/Subcontracting.
Reversal: clear BLOCKED_MODULES in access_control.py and run
`bench --site <site> clear-cache && bench restart`. No DB writes are made.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Extended chrome theme from desktop icons only to the full ERPNext UI:
navbar, sidebar, buttons, inputs, forms, lists, tables, modals,
dropdowns, tabs, timeline, scrollbars. Uses 45° multi-stop reflective
gradients, beveled shadows, conic-gradient accents, and polished
metal body background.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>