UNPKG

resig.js

Version:

Universal reactive signal library with complete platform features: signals, animations, CRDTs, scheduling, DOM integration. Works identically across React, SolidJS, Svelte, Vue, and Qwik.

226 lines 19.1 kB
"use strict"; /** * Signal-Σ Extensions * Advanced primitives for extensibility following mathematical patterns */ Object.defineProperty(exports, "__esModule", { value: true }); exports.globalExtensionRegistry = exports.ExtensionRegistry = exports.validateExtension = exports.composeExtensions = exports.ExampleExtensions = exports.createExtension = exports.ExtensionPatterns = exports.createArrayCommand = exports.createTextCommand = exports.createCommand = exports.createUndoRedoManager = exports.UndoRedoManager = exports.mapThemeColors = exports.composeThemes = exports.createDarkTheme = exports.createLightTheme = exports.createThemeManager = exports.ThemeManager = exports.createSyncedRegister = exports.createSyncedSet = exports.createSyncedCounter = exports.createRealtimeSync = exports.RealtimeSync = exports.composeDragBehaviors = exports.createDragContainer = exports.DragContainer = void 0; // Drag-n-Drop System (Operad patterns) var drag_drop_1 = require("./drag-drop"); Object.defineProperty(exports, "DragContainer", { enumerable: true, get: function () { return drag_drop_1.DragContainer; } }); Object.defineProperty(exports, "createDragContainer", { enumerable: true, get: function () { return drag_drop_1.createDragContainer; } }); Object.defineProperty(exports, "composeDragBehaviors", { enumerable: true, get: function () { return drag_drop_1.composeDragBehaviors; } }); // Real-time Sync System (Commutative monoid operations) var realtime_sync_1 = require("./realtime-sync"); Object.defineProperty(exports, "RealtimeSync", { enumerable: true, get: function () { return realtime_sync_1.RealtimeSync; } }); Object.defineProperty(exports, "createRealtimeSync", { enumerable: true, get: function () { return realtime_sync_1.createRealtimeSync; } }); Object.defineProperty(exports, "createSyncedCounter", { enumerable: true, get: function () { return realtime_sync_1.createSyncedCounter; } }); Object.defineProperty(exports, "createSyncedSet", { enumerable: true, get: function () { return realtime_sync_1.createSyncedSet; } }); Object.defineProperty(exports, "createSyncedRegister", { enumerable: true, get: function () { return realtime_sync_1.createSyncedRegister; } }); // Theme System (Functor map patterns) var theme_system_1 = require("./theme-system"); Object.defineProperty(exports, "ThemeManager", { enumerable: true, get: function () { return theme_system_1.ThemeManager; } }); Object.defineProperty(exports, "createThemeManager", { enumerable: true, get: function () { return theme_system_1.createThemeManager; } }); Object.defineProperty(exports, "createLightTheme", { enumerable: true, get: function () { return theme_system_1.createLightTheme; } }); Object.defineProperty(exports, "createDarkTheme", { enumerable: true, get: function () { return theme_system_1.createDarkTheme; } }); Object.defineProperty(exports, "composeThemes", { enumerable: true, get: function () { return theme_system_1.composeThemes; } }); Object.defineProperty(exports, "mapThemeColors", { enumerable: true, get: function () { return theme_system_1.mapThemeColors; } }); // Undo/Redo System (Coalgebraic time-travel) var undo_redo_1 = require("./undo-redo"); Object.defineProperty(exports, "UndoRedoManager", { enumerable: true, get: function () { return undo_redo_1.UndoRedoManager; } }); Object.defineProperty(exports, "createUndoRedoManager", { enumerable: true, get: function () { return undo_redo_1.createUndoRedoManager; } }); Object.defineProperty(exports, "createCommand", { enumerable: true, get: function () { return undo_redo_1.createCommand; } }); Object.defineProperty(exports, "createTextCommand", { enumerable: true, get: function () { return undo_redo_1.createTextCommand; } }); Object.defineProperty(exports, "createArrayCommand", { enumerable: true, get: function () { return undo_redo_1.createArrayCommand; } }); // Extension utilities and patterns exports.ExtensionPatterns = { // Operad composition for UI components Operad: { compose: (f, g) => (a) => g(f(a)), plug: (outer, inner) => (t) => outer(inner(t)), identity: (x) => x, }, // Commutative monoid for data synchronization CommutativeMonoid: { empty: () => [], combine: (a, b) => [...a, ...b], isCommutative: true, isAssociative: true, hasIdentity: true, }, // Functor for theme transformations Functor: { map: (f) => (fa) => fa.map(f), identity: (fa) => fa, composition: (f, g) => (a) => g(f(a)), }, // Coalgebra for time-travel and state evolution Coalgebra: { unfold: (seed, next) => { const result = []; let current = seed; while (true) { const [value, nextState] = next(current); result.push(value); current = nextState; // Prevent infinite loops in example if (result.length > 1000) break; } return result; }, observe: (state, observer) => observer(state), transition: (state, transition) => transition(state), }, }; // Extension factory for creating custom extensions const createExtension = (name, pattern, implementation) => { return { name, pattern, create: implementation.create, compose: implementation.compose, map: implementation.map, unfold: implementation.unfold, // Mathematical properties verification verify: () => { switch (pattern) { case 'operad': return { hasIdentity: true, hasComposition: !!implementation.compose, isAssociative: true, // Assumed for operads }; case 'monoid': return { hasIdentity: true, hasComposition: !!implementation.compose, isAssociative: true, isCommutative: true, // For commutative monoids }; case 'functor': return { hasMap: !!implementation.map, preservesIdentity: true, preservesComposition: true, }; case 'coalgebra': return { hasUnfold: !!implementation.unfold, isObservable: true, hasTransitions: true, }; default: return {}; } }, }; }; exports.createExtension = createExtension; // Example extensions using the factory exports.ExampleExtensions = { // Drag-drop as operad DragDropOperad: (0, exports.createExtension)('drag-drop', 'operad', { create: (config) => ({ container: config.container, items: config.items, options: config.options, }), compose: (a, b) => ({ behaviors: [a, b] }), }), // Sync as commutative monoid SyncMonoid: (0, exports.createExtension)('realtime-sync', 'monoid', { create: (config) => ({ config }), compose: (a, _b) => { // Merge sync managers (theoretical - would need careful implementation) return a; // Simplified }, }), // Theme as functor ThemeFunctor: (0, exports.createExtension)('theme-system', 'functor', { create: (config) => ({ config }), map: (transform, theme) => ({ theme, transform }), }), // Undo/Redo as coalgebra UndoRedoCoalgebra: (0, exports.createExtension)('undo-redo', 'coalgebra', { create: (config) => ({ initialState: config.initialState, options: config.options, }), unfold: (manager, _next) => { // Unfold history states const history = manager.getHistory().value(); return history.map((memento) => memento.state); }, }), }; // Extension composition utilities const composeExtensions = (...extensions) => { // Compose multiple extensions following their mathematical patterns return extensions.reduce((acc, ext) => { // Implementation would depend on the specific extension types return { ...acc, ...ext }; }); }; exports.composeExtensions = composeExtensions; // Extension validation const validateExtension = (extension) => { try { const verification = extension.verify?.(); // Check mathematical properties based on pattern switch (extension.pattern) { case 'operad': return verification?.hasIdentity && verification?.hasComposition; case 'monoid': return (verification?.hasIdentity && verification?.hasComposition && verification?.isAssociative); case 'functor': return verification?.hasMap && verification?.preservesIdentity; case 'coalgebra': return verification?.hasUnfold && verification?.isObservable; default: return true; } } catch (error) { console.error('Extension validation failed:', error); return false; } }; exports.validateExtension = validateExtension; // Extension registry for dynamic loading class ExtensionRegistry { constructor() { this.extensions = new Map(); } register(name, extension) { if ((0, exports.validateExtension)(extension)) { this.extensions.set(name, extension); } else { throw new Error(`Extension ${name} failed validation`); } } get(name) { return this.extensions.get(name); } list() { return Array.from(this.extensions.keys()); } compose(names) { const extensions = names .map((name) => this.extensions.get(name)) .filter(Boolean); return (0, exports.composeExtensions)(...extensions); } } exports.ExtensionRegistry = ExtensionRegistry; // Global extension registry exports.globalExtensionRegistry = new ExtensionRegistry(); // Auto-register built-in extensions exports.globalExtensionRegistry.register('drag-drop', exports.ExampleExtensions.DragDropOperad); exports.globalExtensionRegistry.register('realtime-sync', exports.ExampleExtensions.SyncMonoid); exports.globalExtensionRegistry.register('theme-system', exports.ExampleExtensions.ThemeFunctor); exports.globalExtensionRegistry.register('undo-redo', exports.ExampleExtensions.UndoRedoCoalgebra); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZXh0ZW5zaW9ucy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztHQUdHOzs7QUFFSCx1Q0FBdUM7QUFDdkMseUNBT3FCO0FBTm5CLDBHQUFBLGFBQWEsT0FBQTtBQUNiLGdIQUFBLG1CQUFtQixPQUFBO0FBQ25CLGlIQUFBLG9CQUFvQixPQUFBO0FBTXRCLHdEQUF3RDtBQUN4RCxpREFVeUI7QUFUdkIsNkdBQUEsWUFBWSxPQUFBO0FBQ1osbUhBQUEsa0JBQWtCLE9BQUE7QUFDbEIsb0hBQUEsbUJBQW1CLE9BQUE7QUFDbkIsZ0hBQUEsZUFBZSxPQUFBO0FBQ2YscUhBQUEsb0JBQW9CLE9BQUE7QUFPdEIsc0NBQXNDO0FBQ3RDLCtDQVl3QjtBQVh0Qiw0R0FBQSxZQUFZLE9BQUE7QUFDWixrSEFBQSxrQkFBa0IsT0FBQTtBQUNsQixnSEFBQSxnQkFBZ0IsT0FBQTtBQUNoQiwrR0FBQSxlQUFlLE9BQUE7QUFDZiw2R0FBQSxhQUFhLE9BQUE7QUFDYiw4R0FBQSxjQUFjLE9BQUE7QUFRaEIsNkNBQTZDO0FBQzdDLHlDQVVxQjtBQVRuQiw0R0FBQSxlQUFlLE9BQUE7QUFDZixrSEFBQSxxQkFBcUIsT0FBQTtBQUNyQiwwR0FBQSxhQUFhLE9BQUE7QUFDYiw4R0FBQSxpQkFBaUIsT0FBQTtBQUNqQiwrR0FBQSxrQkFBa0IsT0FBQTtBQU9wQixtQ0FBbUM7QUFDdEIsUUFBQSxpQkFBaUIsR0FBRztJQUMvQix1Q0FBdUM7SUFDdkMsTUFBTSxFQUFFO1FBQ04sT0FBTyxFQUNMLENBQVUsQ0FBYyxFQUFFLENBQWMsRUFBRSxFQUFFLENBQzVDLENBQUMsQ0FBSSxFQUFFLEVBQUUsQ0FDUCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1gsSUFBSSxFQUNGLENBQVUsS0FBa0IsRUFBRSxLQUFrQixFQUFFLEVBQUUsQ0FDcEQsQ0FBQyxD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