{"version":1,"categories":[{"slug":"forms-editing","name":"Forms \u0026 Editing","patterns":[{"slug":"click-to-edit","name":"Click To Edit","path":"/patterns/forms/click-to-edit","description":"Toggle between view and edit mode","status":"stable","category":"Forms \u0026 Editing"},{"slug":"edit-row","name":"Edit Row","path":"/patterns/forms/edit-row","description":"Inline editing of table rows","status":"stable","category":"Forms \u0026 Editing"},{"slug":"inline-validation","name":"Inline Validation","path":"/patterns/forms/inline-validation","description":"Server-side field validation as you type","status":"stable","category":"Forms \u0026 Editing"},{"slug":"bulk-update","name":"Bulk Update","path":"/patterns/forms/bulk-update","description":"Batch checkbox operations","status":"stable","category":"Forms \u0026 Editing"},{"slug":"reset-input","name":"Reset User Input","path":"/patterns/forms/reset-input","description":"Auto-clear forms after submission","status":"stable","category":"Forms \u0026 Editing"},{"slug":"file-upload","name":"File Upload","path":"/patterns/forms/file-upload","description":"Standard and chunked file uploads","status":"stable","category":"Forms \u0026 Editing"},{"slug":"preserve-inputs","name":"Preserving File Inputs","path":"/patterns/forms/preserve-inputs","description":"Retain form values across re-renders","status":"stable","category":"Forms \u0026 Editing"}]},{"slug":"lists-data","name":"Lists \u0026 Data","patterns":[{"slug":"delete-row","name":"Delete Row","path":"/patterns/lists/delete-row","description":"Animated row removal","status":"stable","category":"Lists \u0026 Data"},{"slug":"click-to-load","name":"Click To Load","path":"/patterns/lists/click-to-load","description":"Append-only pagination","status":"stable","category":"Lists \u0026 Data"},{"slug":"infinite-scroll","name":"Infinite Scroll","path":"/patterns/lists/infinite-scroll","description":"Auto-load on scroll with IntersectionObserver","status":"stable","category":"Lists \u0026 Data"},{"slug":"value-select","name":"Value Select","path":"/patterns/lists/value-select","description":"Cascading dependent selects","status":"stable","category":"Lists \u0026 Data"},{"slug":"sortable","name":"Sortable List","path":"/patterns/lists/sortable","description":"Drag-and-drop reordering with native HTML5 drag events","status":"stable","category":"Lists \u0026 Data"},{"slug":"large-table","name":"Large Table","path":"/patterns/lists/large-table","description":"10k-row table with filter, sort, append, update, delete, reset (streaming range)","status":"stable","category":"Lists \u0026 Data"}]},{"slug":"search-filtering","name":"Search \u0026 Filtering","patterns":[{"slug":"active-search","name":"Active Search","path":"/patterns/search/active-search","description":"Debounced live search","status":"stable","category":"Search \u0026 Filtering"},{"slug":"url-filters","name":"URL-Preserved Filters","path":"/patterns/search/url-filters","description":"Bookmarkable filter state via query params","status":"stable","category":"Search \u0026 Filtering"}]},{"slug":"loading-progress","name":"Loading \u0026 Progress","patterns":[{"slug":"lazy-loading","name":"Lazy Loading","path":"/patterns/loading/lazy-loading","description":"Load content after page render via server push","status":"stable","category":"Loading \u0026 Progress"},{"slug":"progress-bar","name":"Progress Bar","path":"/patterns/loading/progress-bar","description":"WebSocket-pushed progress updates","status":"stable","category":"Loading \u0026 Progress"},{"slug":"async-operations","name":"Async Operations","path":"/patterns/loading/async-operations","description":"Loading/success/error state machine","status":"stable","category":"Loading \u0026 Progress"}]},{"slug":"dialogs-tabs-navigation","name":"Dialogs, Tabs \u0026 Navigation","patterns":[{"slug":"modal-dialog","name":"Modal Dialog","path":"/patterns/navigation/modal-dialog","description":"Native dialog with command/commandfor","status":"stable","category":"Dialogs, Tabs \u0026 Navigation"},{"slug":"confirm-dialog","name":"Confirm Dialog","path":"/patterns/navigation/confirm-dialog","description":"CSP-compliant confirmation flow","status":"stable","category":"Dialogs, Tabs \u0026 Navigation"},{"slug":"tabs","name":"Tabs (HATEOAS)","path":"/patterns/navigation/tabs","description":"Server-driven tabs via SPA navigation","status":"stable","category":"Dialogs, Tabs \u0026 Navigation"},{"slug":"spa-navigation","name":"SPA Navigation","path":"/patterns/navigation/spa-navigation","description":"Auto link interception with pushState","status":"stable","category":"Dialogs, Tabs \u0026 Navigation"},{"slug":"keyboard-shortcuts","name":"Keyboard Shortcuts","path":"/patterns/navigation/keyboard-shortcuts","description":"Global keyboard event binding","status":"stable","category":"Dialogs, Tabs \u0026 Navigation"}]},{"slug":"visual-feedback","name":"Visual Feedback","patterns":[{"slug":"animations","name":"Animations","path":"/patterns/feedback/animations","description":"Entry animations with lvt-fx:animate","status":"stable","category":"Visual Feedback"},{"slug":"loading-states","name":"Loading States","path":"/patterns/feedback/loading-states","description":"Auto aria-busy and custom loading text","status":"stable","category":"Visual Feedback"},{"slug":"highlight","name":"Highlight on Change","path":"/patterns/feedback/highlight","description":"Visual flash on DOM updates","status":"stable","category":"Visual Feedback"},{"slug":"flash-messages","name":"Flash Messages","path":"/patterns/feedback/flash-messages","description":"Toast notifications via ctx.SetFlash","status":"stable","category":"Visual Feedback"}]},{"slug":"real-time-multi-user","name":"Real-Time \u0026 Multi-User","patterns":[{"slug":"multi-user-sync","name":"Multi-User Sync","path":"/patterns/realtime/multi-user-sync","description":"Auto-sync across tabs via Sync() handler","status":"stable","category":"Real-Time \u0026 Multi-User"},{"slug":"broadcasting","name":"Broadcasting","path":"/patterns/realtime/broadcasting","description":"Cross-connection updates via BroadcastAction","status":"stable","category":"Real-Time \u0026 Multi-User"},{"slug":"presence","name":"Presence Tracking","path":"/patterns/realtime/presence","description":"Explicit join/leave with shared state","status":"stable","category":"Real-Time \u0026 Multi-User"},{"slug":"reconnection","name":"Reconnection Recovery","path":"/patterns/realtime/reconnection","description":"State persistence across disconnects","status":"stable","category":"Real-Time \u0026 Multi-User"},{"slug":"live-preview","name":"Live Preview","path":"/patterns/realtime/live-preview","description":"Real-time input preview via Change()","status":"stable","category":"Real-Time \u0026 Multi-User"},{"slug":"server-push","name":"Server Push","path":"/patterns/realtime/server-push","description":"Background goroutine pushing updates","status":"stable","category":"Real-Time \u0026 Multi-User"}]}]}
