UNPKG

ttabs-svelte

Version:

A flexible layout management system with draggable, resizable tiles and tabs for Svelte applications. Like in VSCode

55 lines (54 loc) 1.94 kB
import { defaultValidator } from './default-validator'; import { LayoutValidationError } from './validation-types'; /** * Creates a validation middleware instance * @param ttabs The ttabs instance to validate * @param validators Custom validators to add * @param defaultLayoutCreator Function to create a default layout * @returns A validation middleware instance */ export function createValidationMiddleware(ttabs, validators = [], defaultLayoutCreator) { return { validators, defaultLayoutCreator, errorHandlers: [], validate(ttabs) { try { // Always run the default validator first defaultValidator(ttabs); // Then run custom validators for (const validator of this.validators) { validator(ttabs); } return true; } catch (error) { if (error instanceof LayoutValidationError) { // Notify error handlers this.errorHandlers.forEach(handler => { handler(error); }); console.warn(`Layout validation failed: ${error.message} (${error.code})`); // Reset to default layout this.resetToDefault(ttabs); return false; } // Re-throw other errors throw error; } }, resetToDefault(ttabs) { // Clear existing tiles ttabs.resetTiles(); // Create a root grid first ttabs.addGrid(); // Apply default layout if provided if (this.defaultLayoutCreator) { this.defaultLayoutCreator(ttabs); } }, addErrorHandler(handler) { this.errorHandlers.push(handler); } }; }