* License: Keys beginning with 'vendbase' now validate via Polar.sh (customer-portal API) instead of LemonSqueezy; added activatePolarLicense, validatePolarLicense, isVendbasePolarKey; settings validates Polar keys on load; Polar keys are cleared locally on remove (no deactivate API)
* Settings/License: Fixed race where Polar license briefly showed "Licence Active" then disappeared on refresh - removed on-load validation that cleared the license when the Polar API returned false (network/API errors were incorrectly treated as invalid)
* Update: Pointed plugin updater to
https://www.vendbase.io/api/v1/update/latest; aligned structure with snipvault updater; fixed after_update to clear transient; added null-safe handling for optional API sections (changelog); updated requires_php/tested/requires to match API (8.1, 6.7, 6)
* Dashboard: Animated number transitions on stat cards (Products sold, Net sales, Total orders, Total sales, Average order value, Refunds) using VueUse useTransition for smooth count-up effect
* Toolbar/UI: Refined user menu - user info block (avatar, name, email) at top of dropdown, clearer theme section header, rounded hover states on theme options, full-width logout with subtle destructive hover; avatar kept compact (w-6) with ring hover/focus states
* UI/Notifications: Migrated toast notifications from custom component to vue-sonner - toasts now use Sonner with zinc-themed styling, rich colors, and close buttons; notify() and removeNotification() API unchanged for backward compatibility
* Setup/API: Fixed Germanized settings not displaying saved values in app - endpoint now populates each setting's `value` from the database (via WC_Admin_Settings::get_option) so stored values appear correctly after load
* Dashboard: Sales performance chart colors now support light and dark mode (colorLight/colorDark per series)
* Dashboard: Refined Sales performance chart colors - purple/indigo default lines, cohesive palette aligned with design system
* Dashboard: Increased space above sparklines in stat cards (Total sales, Net sales, Total orders, Average order value, Refunds) to twice the previous spacing
* Setup/UI: Added Germanized-aware setup rendering - loads `vendbase/v1/settings/germanized`, provides tab/section navigation, and displays settings grouped by Germanized subsection
* Setup/UI: Fixed Germanized tab/section click navigation state handling and reduced border-heavy styling for a cleaner settings layout
* Setup/UI: Added Germanized field support for `single_select_page(_with_search)` and `gzd_toggle`, rendered `html`/`image` content blocks, and suppressed `hidden` fields to remove unsupported-type warnings
* Setup/Save: Bridged edited Germanized subsection values into the standard `wc/v3/settings/{group}/batch` save flow so Germanized changes save via the same update action
* Setup/Save: Fixed WooCommerce batch save limit by chunking settings updates into groups of 100 items (prevents "Unable to accept more than 100 items" errors)
* Setup/Save: Improved Germanized persistence by sending a minimal `{ id, value }` batch payload derived from edited subsection fields (avoids id-mismatch issues in full-group merges)
* Setup/Routing: Fixed tab-switch lockup by replacing route/state watchEffect loop with guarded route-to-state and state-to-route syncing for `section`
* Setup/API: Added `vendbase/v1/settings/germanized` endpoint to expose Germanized tabs, subsections, and per-subsection settings mapping for structured setup navigation
* Products/Search: Improved product table filtering by omitting unsupported `status=any` and empty stock-status params from `wc/v3/products` requests
* Products/Search: Added variation-SKU parent lookup in REST product search SQL clauses so searching by variation SKU can return the parent product
* Orders/UI: Fixed order item variant links to route to `/products/{product_id}/variants/{variation_id}` instead of incorrectly using product ID for both segments
* Currency: Hardened `formatCurrency()` with strict ISO currency-code resolution and safe `Intl.NumberFormat` fallback behavior for non-USD stores
* Dashboard/UI: Disabled dashboard card drag sorting on touch/coarse-pointer devices to prevent accidental card movement while scrolling on mobile/tablet
* Dashboard/Extensibility: Hardened dashboard-card filter hook usage by guarding `wp.hooks.applyFilters` availability before invoking extension filters
* Integrations/SEO: Expanded SEO provider detection and overview-card availability to include Slim SEO, AIOSEO, and Squirrly SEO
* Products/UI: Added Woo-style product status counter tabs (All, Published, Draft, Pending, Private) with live counts and one-click filtering
* Orders/UI: Matched order status filter to the new counter-tab design used on products, with status counts and one-click filtering for visual consistency
* Orders/Kanban: Persisted "Expand all order details" preference in local storage so the expanded-details behavior can be kept as default between visits
* Custom fields/API: Added generic `vendbase_custom_meta` REST field support for products, orders, categories, coupons, and subscriptions (read/update), including plugin-aware key inclusion for SEO/CRM metadata
* Custom fields/UI: Added dynamic custom-meta sections to product, order, and category detail views so compatible plugin metadata can be viewed/edited directly in VendBase
* Custom fields/UI: Removed generic external-plugin custom-meta sections from product/order/category views to prevent noisy internal plugin keys surfacing in the UI
* View Builder/API: Added `vendbase/v1/view-builder/available-fields` endpoint to discover core + meta_data field paths for orders, products, categories, discounts, subscriptions, reviews, shipping zones, and brands
* View Builder/Settings: Added global admin-shared detail-view builder (`view_builder_layouts`) so admins can define custom sections and map editable fields/types per entity
* View Builder/Runtime: Added dynamic detail-panel rendering + safe payload mapping for configured editable fields (including `meta_data.<key>` support) across orders/products/categories/discounts/subscriptions/reviews/shipping/brands
* View Builder/UI: Polished detail-view builder UX with field/source/type badges, live counters, improved empty states, section-level mapped-field totals, and clearer read-only/required field controls
* View Builder/UI: Updated settings UX to "Add new custom view" flow (pick entity first, then configure), and added persistent custom-view cards with edit/delete actions
* View Builder/UI: Fixed configure-modal layout sizing/scroll behavior by using a fixed modal height, constraining editor columns, and removing sticky footer overlap
* View Builder/Fields: Added broader editor/formatter support including image, datetime, time, phone, and color types with updated inference, sanitization allowlists, and runtime rendering (including image preview in read-only mode)
* View Builder/UI: Refined custom-view builder with clearer step guidance, richer field cards, and inline field metadata controls (description + placeholder) for better content authoring context
* View Builder/Fields: Added new `select` editor with custom option rows and a WordPress media-backed `image_picker` editor, with runtime rendering + settings sanitization support
* Reports: Added support for loading custom report definitions from VendBase settings (`custom_reports`) to extend report types without core code edits
* Reports/Settings: Upgraded custom reports builder UI in Settings (`custom_reports`) with no-code presets (revenue chart, order status summary, inventory summary), metric toggles, and report-id/label controls; builder entries compile into full report configs automatically
* Settings/API: Fixed `wp/v2/settings` save validation for `woobase_settings` by registering and sanitizing `custom_reports` in REST schema (prevents "Invalid parameter(s): woobase_settings" when saving custom reports)
* Settings/Menu: Added custom-link options for "Open in new tab" and "Open in frame", plus a new embedded page route for iframe-based in-app content screens
* Integrations: Expanded frontend active-plugin detection list to include AIOSEO, Slim SEO, Squirrly SEO, and FluentCRM for UI-level integration awareness
* UI/Table: Fixed table checkboxes - use Reka UI `model-value`/`update:model-value` instead of `checked`/`update:checked` so row selection and header select-all/deselect-all work correctly
* Orders: Added global custom table columns manager - users can discover raw `wc/v3/orders` fields (including `meta_data` keys), choose formatters (text/date/currency/number/status/customer/tags), and save shared column definitions in `woobase_settings`
* Orders/UI: Refined custom columns manager layout with stronger visual hierarchy, counters, clearer field cards, and constrained scroll areas (`max-height` + `overflow-auto`) for available/selected lists
* Orders/UI: Reduced visual noise in custom columns manager (fewer nested borders) and fixed selected-column row alignment for label, formatter, and action controls
* Orders/Columns: Expanded custom column formatter coverage (datetime, percent, boolean, email, link, JSON, uppercase/lowercase) and added per-column alignment controls (left/center/right) with renderer + settings sanitization support
* Orders/UI: Fixed Custom columns button icon by switching to direct Lucide import for reliable rendering
* Orders: Refined status overview at top of orders list - replaced card grid with tabbed design (Tabs component) inside a subtle bordered container, with counts in labels when available
* Orders/Print: Fixed local pickup packing slips showing a shipping address (billing fallback); local pickup orders now render "Collection" details instead
* UI/Table: Switched utility table to shadcn table + checkbox components and added TypeScript as a dev dependency in `app/` to support typed UI SFC imports during Vite builds
* Reports: Fixed customers report "Invalid parameter(s): orderby" error - use `registered_date` and `name` (WooCommerce customers API) instead of `date`
* Reports: Fixed CSV export to fetch and include all pages of table data (not just current page) when exporting full dataset
* Reports: Refactored into world-class config-driven reports generator - extensible schema (filters, layouts, formatters), reusable ReportChart/ReportSummaryCards/ReportCell components, chart view for revenue with ECharts, config-driven summary layouts (metrics/list), column formatters (date/currency/status/customer), and WordPress hook `vendbase.api.reports.types` for adding custom reports
* Reports: Added new multi-discipline Reports page with configurable report types (orders, inventory, products, customers, revenue, order summary, inventory summary), dynamic filters, and CSV export
* Reports/API: Added `vendbase/v1/reports/inventory-summary` endpoint for inventory KPIs (stock value, low stock count, stock units, stock-status breakdown)
* Orders/Print: Added configurable print branding options (`print_logo`, `print_note`) and applied them to print order, packing slip, and invoice documents
* Orders/Print: Improved print currency rendering by resolving order/store currency consistently across print templates
* UI: Refined `status-tag` styling with a quieter zinc-first look, replacing loud multi-color surfaces with subtle accent rings and status dots
* Tools: Added scripts/generate-random-reviews.php for generating fake product reviews (CLI or browser) to test data flow
* Dashboard: Refined list cards (Top customers, Top products, Top categories, Top coupons) - data now inside lighter inner boxes matching Net sales/Total sales style
* Dashboard: Fixed Top Customers - Total Spend card - customer names now fall back to email when first/last name are empty (PHP filter + frontend API fallback)
* Dashboard: Added new cards - Refunds, Order status summary, Low stock alerts, Recent reviews, and Top countries / regions map
* Dashboard: Added period-over-period deltas on key stat cards (Total sales, Net sales, Total orders, Products sold, Average order value)
* Dashboard/API: Added custom endpoints for orders by country (`vendbase/v1/reports/orders-by-country`) and low-stock products (`vendbase/v1/products/low-stock`)
* Dashboard: Added Mapbox-powered Top countries / regions visualization with date-range support
* Dashboard: Fixed Top countries map initialization issue when data loads after mount (map now initializes reliably)
* Dashboard: Updated Top countries map to fully support dark mode and live theme switching
* Global: Added modern CSS-driven sleek scrollbar styling (thin, rounded, theme-aware for light/dark mode)
* Dashboard: Added minimal ECharts greyscale sparklines under stat cards (Total sales, Net sales, Total orders, Products sold, Average order value)
* Dashboard: Added drag handle (top-left, visible on hover) for reordering cards
* Dashboard: Redesigned cards to match uixpress design - rounded-3xl containers, card headers with title/subtitle, inner value containers (bg-white dark:bg-zinc-700/20 rounded-2xl), refined borders (border-zinc-200/40 dark:border-zinc-800/60), loading skeletons (bg-zinc-200 dark:bg-zinc-700)
* Dashboard: Enhanced UI - header with title/subtitle, improved spacing (gap-10), 12-column grid
* Dashboard: Added empty state when no cards are enabled
* Dashboard: Card options - fixed hasFilters computed for settings indicator dot
* Dashboard: Sales performance chart migrated from Chart.js to ECharts (direct API, Shadow DOM compatible)
* Icons: Migrated from custom SVG icons to lucide-vue-next
* Icons: AppIcon component now uses Lucide icons with legacy SVG fallback for custom/brand icons (vendbase)
* Languages: Added AI translation workflow in `languages/translate-cli.js` using Google Cloud Translate, with Turkish (`tr_TR`) support and generated PO/MO/JSON output pipeline
* Orders: Improved status updates with inline loading feedback and removed forced route refresh after status change/update
* Orders: Added AST shipment tracking section in order details (list existing trackings + add tracking code via VendBase REST proxy)
* Dashboard: Added optional Google Site Kit and SEO overview cards with integration summary endpoints
* Products: Added dedicated Attributes management pages (list + detail + term management), plus routes and menu links