@je-es/client 0.0.9 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/main.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/mod/core/styles.ts","../src/mod/core/scheduler.ts","../src/mod/core/component.ts","../src/mod/core/router.ts","../src/mod/core/client.ts","../src/mod/core/store.ts","../src/mod/core/decorators.ts","../src/mod/components/smart-form.ts","../src/mod/help.ts","../src/mod/core/context.ts","../src/mod/core/hooks.ts","../src/main.ts"],"names":["StyleManager","css","componentName","id","styleElement","scopedCSS","scope","lines","scopedLines","braceCount","line","selector","rest","scopedSelector","element","strings","values","result","i","UpdateScheduler","callback","callbacks","error","scheduler","Component","props","initialState","partialState","prevState","newState","newProps","prevProps","updater","prevIsScheduled","key","container","unsubscribe","name","el","compute","deps","cached","subscription","fn","delay","timeoutId","args","lastCall","now","timeSinceLastCall","newVNode","parent","index","oldVDomNode","newVDomNode","patch","vnode","convertedProps","value","convertedChildren","child","eventName","errorInfo","prevDeps","nextDeps","dep","propertyName","newValue","oldValue","watchers","methodName","Router","routes","mode","base","scrollBehavior","path","state","delta","hook","handler","exact","createElement","r","params","route","matchedRoute","e","link","href","to","from","guard","resolve","nextPath","ComponentClass","ComponentCtor","component","proto","exp","errorMessage","normalizedPath","cleanPath","pattern","paramNames","regexPattern","_","paramName","regex","match","search","query","pair","router","client","config","_config","stylesDir","outputPath","sass","writeFileSync","existsSync","mkdirSync","join","relative","dirname","outputDir","outputFile","scssFiles","combinedCSS","file","sassError","fullOutputPath","f","dir","readdirSync","statSync","extname","files","entries","entry","fullPath","stat","watch","entryDir","eventType","filename","capiConfig","configureApi","Store","options","stored","update","action","middleware","listener","prevValue","subscriber","updates","prevNotify","shouldNotify","stateCopy","createStore","createComputedStore","stores","computer","computedStore","s","store","connect","mapStateToProps","target","context","propertyKey","instance","initialValue","hiddenKey","inst","targetConstructor","initKey","computed","targetOrGetter","descriptor","ctx","originalGetter","cacheKey","dirtyKey","decorator","targetOrMethod","SmartFormComponent","field","fieldName","validation","stringValue","isValid","event","firstErrorField","response","api","showError","html","optionNodes","opt","submitButton","fieldNodes","__decorateClass","SmartForm","debounce","throttle","classNames","classes","cls","formatDate","date","format","d","year","month","day","hours","minutes","seconds","deepClone","obj","item","clonedMap","clonedSet","cloned","deepMerge","sources","source","isObject","sourceValue","targetValue","uniqueIdCounter","uniqueId","prefix","timestamp","randomPart","counter","sleep","ms","isEmpty","capitalize","str","kebabCase","camelCase","char","pascalCase","camel","truncate","length","suffix","parseQuery","queryString","cleaned","pairs","decodedValue","actualKey","stringifyQuery","clamp","min","max","isBrowser","safeJsonParse","json","fallback","utils","Context","defaultValue","createContext","Provider","children","useContext","CombinedContext","initialValues","createCombinedContext","currentComponent","currentHookIndex","hookStates","setHookContext","clearHookContext","getHookStates","useState","hookIndex","states","setState","nextValue","useEffect","effect","areDepsEqual","cleanup","useMemo","factory","useCallback","useRef","useReducer","reducer","dispatch","useLocalStorage","storedValue","setStoredValue","valueToStore","useDebounce","debouncedValue","setDebouncedValue","usePrevious","ref","useToggle","setValue","toggle","v","useInterval","savedCallback","useFetch","url","data","setData","loading","setLoading","setError","fetchData","useWindowSize","size","setSize","handleResize","useEventListener","savedHandler","eventListener","createFunctionalComponent","displayName","FunctionalComponent","setConfig"],"mappings":"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","file":"main.cjs","sourcesContent":["// src/mod/core/styles.ts\r\n//\r\n// Made with ❤️ by Maysara.\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ CORE ════════════════════════════════════════╗\r\n\r\n /**\r\n * Style Manager - handles CSS injection and scoping\r\n */\r\n export class StyleManager {\r\n private static styles = new Map<string, HTMLStyleElement>();\r\n private static scopeCounter = 0;\r\n\r\n /**\r\n * Inject styles into document\r\n */\r\n static inject(css: string, componentName?: string): string {\r\n const id = componentName || `style-${this.scopeCounter++}`;\r\n\r\n if (this.styles.has(id)) {\r\n return id;\r\n }\r\n\r\n const styleElement = document.createElement('style');\r\n styleElement.setAttribute('data-component', id);\r\n\r\n // Scope the CSS\r\n const scopedCSS = this.scopeStyles(css, id);\r\n styleElement.textContent = scopedCSS;\r\n\r\n document.head.appendChild(styleElement);\r\n this.styles.set(id, styleElement);\r\n\r\n return id;\r\n }\r\n\r\n /**\r\n * Remove styles from document\r\n */\r\n static remove(id: string): void {\r\n const styleElement = this.styles.get(id);\r\n if (styleElement && styleElement.parentElement) {\r\n styleElement.parentElement.removeChild(styleElement);\r\n this.styles.delete(id);\r\n }\r\n }\r\n\r\n /**\r\n * Scope CSS selectors\r\n */\r\n private static scopeStyles(css: string, scope: string): string {\r\n // Simple scoping - prefix all selectors with [data-scope=\"id\"]\r\n // This is a basic implementation. A production version would use a proper CSS parser\r\n\r\n const lines = css.split('\\n');\r\n const scopedLines: string[] = [];\r\n let inMediaQuery = false;\r\n let braceCount = 0;\r\n\r\n for (let line of lines) {\r\n line = line.trim();\r\n\r\n // Handle media queries\r\n if (line.startsWith('@media')) {\r\n inMediaQuery = true;\r\n scopedLines.push(line);\r\n continue;\r\n }\r\n\r\n // Count braces\r\n braceCount += (line.match(/{/g) || []).length;\r\n braceCount -= (line.match(/}/g) || []).length;\r\n\r\n if (inMediaQuery && braceCount === 0) {\r\n inMediaQuery = false;\r\n }\r\n\r\n // Scope selectors\r\n if (line.includes('{') && !line.startsWith('@') && !line.startsWith('}')) {\r\n const selector = line.substring(0, line.indexOf('{')).trim();\r\n const rest = line.substring(line.indexOf('{'));\r\n\r\n // Don't scope :root, *, or @-rules\r\n if (selector === ':root' || selector === '*' || line.startsWith('@')) {\r\n scopedLines.push(line);\r\n } else {\r\n const scopedSelector = `[data-scope=\"${scope}\"] ${selector}`;\r\n scopedLines.push(`${scopedSelector} ${rest}`);\r\n }\r\n } else {\r\n scopedLines.push(line);\r\n }\r\n }\r\n\r\n return scopedLines.join('\\n');\r\n }\r\n\r\n /**\r\n * Clear all styles\r\n */\r\n static clear(): void {\r\n for (const [, element] of this.styles) {\r\n if (element.parentElement) {\r\n element.parentElement.removeChild(element);\r\n }\r\n }\r\n this.styles.clear();\r\n }\r\n }\r\n\r\n /**\r\n * CSS template literal tag\r\n * Usage: css`.class { color: red; }`\r\n */\r\n export function css(\r\n strings: TemplateStringsArray,\r\n ...values: unknown[]\r\n ): string {\r\n let result = '';\r\n\r\n for (let i = 0; i < strings.length; i++) {\r\n result += strings[i];\r\n if (i < values.length) {\r\n result += values[i];\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝","// src/mod/core/scheduler.ts\r\n//\r\n// Made with ❤️ by Maysara.\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ TYPE ════════════════════════════════════════╗\r\n\r\n type UpdateCallback = () => void;\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ CORE ════════════════════════════════════════╗\r\n\r\n /**\r\n * Update Scheduler\r\n * Batches multiple state changes into a single render\r\n */\r\n class UpdateScheduler {\r\n private queue = new Set<UpdateCallback>();\r\n private isFlushScheduled = false;\r\n private isFlushing = false;\r\n\r\n /**\r\n * Schedule a component update\r\n */\r\n schedule(callback: UpdateCallback): void {\r\n if (this.isFlushing) {\r\n // If we're currently flushing, schedule for next batch\r\n requestAnimationFrame(() => this.schedule(callback));\r\n return;\r\n }\r\n\r\n this.queue.add(callback);\r\n\r\n if (!this.isFlushScheduled) {\r\n this.isFlushScheduled = true;\r\n\r\n // Use microtask for immediate batching, then RAF for rendering\r\n Promise.resolve().then(() => {\r\n requestAnimationFrame(() => this.flush());\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Force immediate flush (for urgent updates)\r\n */\r\n flushSync(callback: UpdateCallback): void {\r\n callback();\r\n }\r\n\r\n /**\r\n * Flush all pending updates\r\n */\r\n private flush(): void {\r\n if (this.queue.size === 0) {\r\n this.isFlushScheduled = false;\r\n return;\r\n }\r\n\r\n this.isFlushing = true;\r\n this.isFlushScheduled = false;\r\n\r\n const callbacks = Array.from(this.queue);\r\n this.queue.clear();\r\n\r\n // Execute all updates\r\n for (const callback of callbacks) {\r\n try {\r\n callback();\r\n } catch (error) {\r\n console.error('Error during update:', error);\r\n }\r\n }\r\n\r\n this.isFlushing = false;\r\n\r\n // If new updates were scheduled during flush, process them\r\n if (this.queue.size > 0) {\r\n this.schedule(() => {});\r\n }\r\n }\r\n\r\n /**\r\n * Clear all pending updates\r\n */\r\n clear(): void {\r\n this.queue.clear();\r\n this.isFlushScheduled = false;\r\n }\r\n\r\n /**\r\n * Get queue size (for debugging)\r\n */\r\n get size(): number {\r\n return this.queue.size;\r\n }\r\n }\r\n\r\n // Export singleton instance\r\n export const scheduler = new UpdateScheduler();\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝","// src/mod/core/component.ts\r\n//\r\n// Made with ❤️ by Maysara.\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ PACK ════════════════════════════════════════╗\r\n\r\n import type { VNode } from '../../types';\r\n import { patch, VNode as VDomVNode } from '@je-es/vdom';\r\n import { StyleManager } from './styles';\r\n import { scheduler } from './scheduler';\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ TYPE ════════════════════════════════════════╗\r\n\r\n export abstract class Component<P = Record<string, unknown>, S = Record<string, unknown>> {\r\n public props: P;\r\n public state: S;\r\n public _isMounted: boolean = false;\r\n\r\n private _isUnmounting: boolean = false;\r\n private _element: HTMLElement | null = null;\r\n private _vnode: VNode | null = null;\r\n private _styleId: string | null = null;\r\n private _isScheduledForUpdate: boolean = false;\r\n private _updateBatch = new Set<string>();\r\n private _refs = new Map<string, HTMLElement>();\r\n private _subscriptions: (() => void)[] = [];\r\n private _memoCache = new Map<string, { args: unknown[]; result: unknown }>();\r\n\r\n constructor(props?: P, initialState?: S) {\r\n this.props = props || {} as P;\r\n this.state = initialState || {} as S;\r\n }\r\n\r\n // ─── Lifecycle Hooks ───\r\n\r\n onBeforeMount?(): void | Promise<void>;\r\n onMount?(): void | Promise<void>;\r\n onBeforeUpdate?(prevProps: P, prevState: S): void | Promise<void>;\r\n onUpdate?(prevProps: P, prevState: S): void;\r\n onBeforeUnmount?(): void;\r\n onUnmount?(): void;\r\n onError?(error: Error, errorInfo: { componentStack?: string }): void;\r\n onPropsChange?(prevProps: P, newProps: P): void;\r\n onStateChange?(prevState: S, newState: S): void;\r\n shouldUpdate?(prevProps: P, prevState: S): boolean;\r\n\r\n // ─── Abstract Methods ───\r\n\r\n abstract render(): VNode;\r\n styles?(): string;\r\n\r\n // ─── State Management ───\r\n\r\n setState(\r\n partialState: Partial<S> | ((prevState: S) => Partial<S>),\r\n callback?: () => void\r\n ): void {\r\n const prevState = { ...this.state };\r\n const newState = typeof partialState === 'function'\r\n ? partialState(this.state)\r\n : partialState;\r\n\r\n this.state = { ...this.state, ...newState };\r\n\r\n this.onStateChange?.(prevState, this.state);\r\n this.update();\r\n\r\n if (callback) {\r\n scheduler.schedule(callback);\r\n }\r\n }\r\n\r\n setProps(newProps: Partial<P>): void {\r\n const prevProps = { ...this.props };\r\n this.props = { ...this.props, ...newProps };\r\n\r\n this.onPropsChange?.(prevProps, this.props);\r\n this.update();\r\n }\r\n\r\n // ─── Update Scheduling ───\r\n\r\n batchUpdate(updater: () => void): void {\r\n const prevIsScheduled = this._isScheduledForUpdate;\r\n this._isScheduledForUpdate = true;\r\n\r\n try {\r\n updater();\r\n } finally {\r\n if (!prevIsScheduled) {\r\n this._isScheduledForUpdate = false;\r\n this.update();\r\n }\r\n }\r\n }\r\n\r\n update(key?: string): void {\r\n if (!this._isMounted || this._isUnmounting) return;\r\n\r\n if (key) {\r\n this._updateBatch.add(key);\r\n }\r\n\r\n if (this._isScheduledForUpdate) return;\r\n\r\n this._isScheduledForUpdate = true;\r\n scheduler.schedule(() => {\r\n this._isScheduledForUpdate = false;\r\n this._updateBatch.clear();\r\n this._performUpdate();\r\n });\r\n }\r\n\r\n forceUpdate(): void {\r\n if (!this._isMounted || this._isUnmounting) return;\r\n\r\n scheduler.flushSync(() => {\r\n this._performUpdate();\r\n });\r\n }\r\n\r\n // ─── Lifecycle Methods ───\r\n\r\n async mount(container: HTMLElement): Promise<void> {\r\n if (this._isMounted) {\r\n console.warn('Component is already mounted');\r\n return;\r\n }\r\n\r\n try {\r\n await this.onBeforeMount?.();\r\n\r\n this._vnode = this.render();\r\n this._element = this._createElementFromVNode(this._vnode);\r\n\r\n if (this.styles) {\r\n this._styleId = StyleManager.inject(\r\n this.styles(),\r\n this.constructor.name\r\n );\r\n this._element?.setAttribute('data-scope', this.constructor.name);\r\n }\r\n\r\n container.appendChild(this._element);\r\n this._isMounted = true;\r\n\r\n await this.onMount?.();\r\n } catch (error) {\r\n this._handleError(error as Error, { componentStack: this.constructor.name });\r\n }\r\n }\r\n\r\n unmount(): void {\r\n if (!this._isMounted || this._isUnmounting) return;\r\n\r\n this._isUnmounting = true;\r\n\r\n try {\r\n this.onBeforeUnmount?.();\r\n\r\n // Cleanup\r\n this._isScheduledForUpdate = false;\r\n this._updateBatch.clear();\r\n\r\n if (this._styleId) {\r\n StyleManager.remove(this._styleId);\r\n }\r\n\r\n this._subscriptions.forEach(unsubscribe => unsubscribe());\r\n this._subscriptions = [];\r\n\r\n if (this._element?.parentElement) {\r\n this._element.parentElement.removeChild(this._element);\r\n }\r\n\r\n this._isMounted = false;\r\n this._element = null;\r\n this._vnode = null;\r\n\r\n this.onUnmount?.();\r\n\r\n this._refs.clear();\r\n this._memoCache.clear();\r\n } catch (error) {\r\n this._handleError(error as Error, { componentStack: this.constructor.name });\r\n } finally {\r\n this._isUnmounting = false;\r\n }\r\n }\r\n\r\n // ─── Helper Methods ───\r\n\r\n getRef(name: string): HTMLElement | undefined {\r\n return this._refs.get(name);\r\n }\r\n\r\n createRef(name: string): (el: HTMLElement | null) => void {\r\n return (el: HTMLElement | null) => {\r\n if (el) {\r\n this._refs.set(name, el);\r\n } else {\r\n this._refs.delete(name);\r\n }\r\n };\r\n }\r\n\r\n memo<T>(key: string, compute: () => T, deps: unknown[]): T {\r\n const cached = this._memoCache.get(key);\r\n\r\n if (cached && this._areDepsEqual(cached.args, deps)) {\r\n return cached.result as T;\r\n }\r\n\r\n const result = compute();\r\n this._memoCache.set(key, { args: deps, result });\r\n return result;\r\n }\r\n\r\n subscribe(subscription: () => void): void {\r\n this._subscriptions.push(subscription);\r\n }\r\n\r\n debounce<T extends (...args: unknown[]) => unknown>(\r\n fn: T,\r\n delay: number\r\n ): (...args: Parameters<T>) => void {\r\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\r\n\r\n return (...args: Parameters<T>): void => {\r\n if (timeoutId !== null) {\r\n clearTimeout(timeoutId);\r\n }\r\n\r\n timeoutId = setTimeout(() => {\r\n timeoutId = null;\r\n fn.apply(this, args);\r\n }, delay);\r\n };\r\n }\r\n\r\n throttle<T extends (...args: unknown[]) => unknown>(\r\n fn: T,\r\n delay: number\r\n ): (...args: Parameters<T>) => void {\r\n let lastCall = 0;\r\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\r\n\r\n return (...args: Parameters<T>): void => {\r\n const now = Date.now();\r\n const timeSinceLastCall = now - lastCall;\r\n\r\n if (timeSinceLastCall >= delay) {\r\n lastCall = now;\r\n fn.apply(this, args);\r\n } else if (!timeoutId) {\r\n timeoutId = setTimeout(() => {\r\n lastCall = Date.now();\r\n timeoutId = null;\r\n fn.apply(this, args);\r\n }, delay - timeSinceLastCall);\r\n }\r\n };\r\n }\r\n\r\n // ─── Getters ───\r\n\r\n get element(): HTMLElement | null {\r\n return this._element;\r\n }\r\n\r\n get isMounted(): boolean {\r\n return this._isMounted;\r\n }\r\n\r\n get isUnmounting(): boolean {\r\n return this._isUnmounting;\r\n }\r\n\r\n // ─── Private Methods ───\r\n\r\n private async _performUpdate(): Promise<void> {\r\n if (!this._isMounted || !this._element || this._isUnmounting) return;\r\n\r\n const prevProps = { ...this.props };\r\n const prevState = { ...this.state };\r\n\r\n try {\r\n if (this.shouldUpdate && !this.shouldUpdate(prevProps, prevState)) {\r\n return;\r\n }\r\n\r\n await this.onBeforeUpdate?.(prevProps, prevState);\r\n\r\n const newVNode = this.render();\r\n const parent = this._element.parentElement;\r\n\r\n if (this._vnode && parent) {\r\n const index = Array.from(parent.childNodes).indexOf(this._element);\r\n // Convert to VDom-compatible VNode\r\n const oldVDomNode = this._convertToVDomNode(this._vnode);\r\n const newVDomNode = this._convertToVDomNode(newVNode);\r\n patch(parent, oldVDomNode, newVDomNode, index);\r\n this._element = parent.childNodes[index] as HTMLElement;\r\n }\r\n\r\n this._vnode = newVNode;\r\n this.onUpdate?.(prevProps, prevState);\r\n } catch (error) {\r\n this._handleError(error as Error, { componentStack: this.constructor.name });\r\n }\r\n }\r\n\r\n private _convertToVDomNode(vnode: VNode): VDomVNode {\r\n if (typeof vnode.type !== 'string') {\r\n throw new Error('Component VNodes cannot be converted to VDom nodes');\r\n }\r\n\r\n // Convert props to VDom-compatible format\r\n const convertedProps: Record<string, unknown> = {};\r\n for (const [key, value] of Object.entries(vnode.props)) {\r\n if (key === 'children') continue;\r\n\r\n // Convert style object if needed\r\n if (key === 'style' && typeof value === 'object' && value !== null && !Array.isArray(value)) {\r\n convertedProps[key] = value as Record<string, string | number>;\r\n } else {\r\n convertedProps[key] = value;\r\n }\r\n }\r\n\r\n const convertedChildren = vnode.children.map(child => {\r\n if (child == null || typeof child === 'boolean') return null;\r\n if (typeof child === 'string' || typeof child === 'number') return child;\r\n return this._convertToVDomNode(child as VNode);\r\n }).filter((child): child is string | number | VDomVNode => child !== null);\r\n\r\n return {\r\n type: vnode.type,\r\n props: convertedProps as never,\r\n children: convertedChildren\r\n };\r\n }\r\n\r\n private _createElementFromVNode(vnode: VNode): HTMLElement {\r\n if (typeof vnode.type !== 'string') {\r\n throw new Error('Component VNodes not supported in _createElementFromVNode');\r\n }\r\n\r\n const element = document.createElement(vnode.type);\r\n\r\n // Set properties\r\n for (const [key, value] of Object.entries(vnode.props)) {\r\n if (key === 'children') continue;\r\n this._setElementProperty(element, key, value);\r\n }\r\n\r\n // Add children\r\n for (const child of vnode.children) {\r\n if (child == null || child === false) continue;\r\n\r\n if (typeof child === 'string' || typeof child === 'number') {\r\n element.appendChild(document.createTextNode(String(child)));\r\n } else if (typeof child === 'object' && 'type' in child) {\r\n element.appendChild(this._createElementFromVNode(child as VNode));\r\n }\r\n }\r\n\r\n return element;\r\n }\r\n\r\n private _setElementProperty(element: HTMLElement, key: string, value: unknown): void {\r\n // Event handlers\r\n if (key.startsWith('on') && typeof value === 'function') {\r\n const eventName = key.substring(2).toLowerCase();\r\n element.addEventListener(eventName, value as EventListener);\r\n return;\r\n }\r\n\r\n // Class names\r\n if (key === 'className' && typeof value === 'string') {\r\n element.className = value;\r\n return;\r\n }\r\n\r\n // Styles\r\n if (key === 'style') {\r\n if (typeof value === 'string') {\r\n element.setAttribute('style', value);\r\n } else if (typeof value === 'object' && value !== null) {\r\n Object.assign(element.style, value);\r\n }\r\n return;\r\n }\r\n\r\n // Refs\r\n if (key === 'ref' && typeof value === 'function') {\r\n (value as (el: HTMLElement) => void)(element);\r\n return;\r\n }\r\n\r\n // Boolean attributes\r\n if (key === 'checked' || key === 'disabled' || key === 'selected') {\r\n const boolValue = value === 'true' || value === true || value === '';\r\n if (boolValue) {\r\n element.setAttribute(key, '');\r\n }\r\n return;\r\n }\r\n\r\n // Regular attributes\r\n if (value != null && value !== false) {\r\n element.setAttribute(key, String(value));\r\n }\r\n }\r\n\r\n private _handleError(error: Error, errorInfo: { componentStack?: string }): void {\r\n console.error(`Error in component ${this.constructor.name}:`, error);\r\n\r\n if (this.onError) {\r\n this.onError(error, errorInfo);\r\n } else {\r\n throw error;\r\n }\r\n }\r\n\r\n private _areDepsEqual(prevDeps: unknown[], nextDeps: unknown[]): boolean {\r\n if (prevDeps.length !== nextDeps.length) return false;\r\n return prevDeps.every((dep, i) => dep === nextDeps[i]);\r\n }\r\n\r\n /**\r\n * Invalidate all computed property caches (called by decorators)\r\n */\r\n _invalidateAllComputed(): void {\r\n for (const key in this) {\r\n if (key.startsWith('_computed_dirty_')) {\r\n (this as Record<string, unknown>)[key] = true;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Trigger watchers for a property (called by decorators)\r\n */\r\n _triggerWatchers(propertyName: string, newValue: unknown, oldValue: unknown): void {\r\n const watchers = (this.constructor as ComponentConstructor).__watchers__;\r\n if (!watchers?.[propertyName]) return;\r\n\r\n for (const methodName of watchers[propertyName]) {\r\n if (typeof (this as Record<string, unknown>)[methodName] === 'function') {\r\n try {\r\n ((this as Record<string, unknown>)[methodName] as (nv: unknown, ov: unknown) => void).call(this, newValue, oldValue);\r\n } catch (error) {\r\n console.error(`Watcher error in ${methodName}:`, error);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Helper type for constructor metadata\r\n export interface ComponentConstructor {\r\n __watchers__?: Record<string, string[]>;\r\n __reactiveProps__?: string[];\r\n }\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝","// src/mod/core/router.ts\r\n//\r\n// Made with ❤️ by Maysara.\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ PACK ════════════════════════════════════════╗\r\n\r\n import type { Route, RouteConfig, NavigationGuard } from '../../types';\r\n import type { VNode } from '@je-es/vdom';\r\n import { Component, ComponentConstructor } from './component';\r\n import { createElement } from '@je-es/vdom';\r\n\r\n export type { Route, RouteConfig, NavigationGuard };\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ TYPE ════════════════════════════════════════╗\r\n\r\n // Type for lazy-loaded module\r\n interface LazyModule {\r\n default? : ComponentConstructor;\r\n HomePage? : ComponentConstructor;\r\n TodoPage? : ComponentConstructor;\r\n [key: string] : unknown;\r\n }\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝\r\n\r\n\r\n// ╔════════════════════════════════════════ TYPE ════════════════════════════════════════╗\r\n\r\n export class Router {\r\n private routes: RouteConfig[] = [];\r\n private currentRoute: Route | null = null;\r\n private mode: 'history' | 'hash' = 'history';\r\n private base: string = '/';\r\n private beforeEachHooks: NavigationGuard[] = [];\r\n private afterEachHooks: ((to: Route, from: Route) => void)[] = [];\r\n private currentComponent: Component | null = null;\r\n private routerOutlet: HTMLElement | null = null;\r\n private isNavigating: boolean = false;\r\n private scrollBehavior: 'auto' | 'smooth' | 'instant' = 'auto';\r\n private notFoundHandler: (() => void) | null = null;\r\n private _internalPath: string | null = null;\r\n\r\n /**\r\n * Initialize router\r\n */\r\n init(\r\n routes: RouteConfig[],\r\n mode: 'history' | 'hash' = 'history',\r\n base: string = '/',\r\n scrollBehavior: 'auto' | 'smooth' | 'instant' = 'auto'\r\n ): void {\r\n this.routes = routes;\r\n this.mode = mode;\r\n this.base = base.endsWith('/') ? base.slice(0, -1) : base;\r\n this.scrollBehavior = scrollBehavior;\r\n\r\n this._initializeRouting();\r\n this._handleRoute();\r\n }\r\n\r\n /**\r\n * Navigate to a path\r\n */\r\n async push(path: string, state?: Record<string, unknown>): Promise<void> {\r\n if (this.isNavigating) {\r\n // console.warn('Navigation already in progress');\r\n return;\r\n }\r\n\r\n this._internalPath = path;\r\n\r\n if (this.mode === 'history') {\r\n window.history.pushState(state || {}, '', this._buildFullPath(path));\r\n } else {\r\n window.location.hash = path;\r\n }\r\n\r\n await this._handleRoute();\r\n }\r\n\r\n /**\r\n * Replace current route\r\n */\r\n async replace(path: string, state?: Record<string, unknown>): Promise<void> {\r\n this._internalPath = path;\r\n\r\n if (this.mode === 'history') {\r\n window.history.replaceState(state || {}, '', this._buildFullPath(path));\r\n } else {\r\n window.location.hash = path;\r\n }\r\n\r\n return this._handleRoute();\r\n }\r\n\r\n back(): void { window.history.back(); }\r\n forward(): void { window.history.forward(); }\r\n go(delta: number): void { window.history.go(delta); }\r\n\r\n /**\r\n * Navigation guards\r\n */\r\n beforeEach(hook: NavigationGuard): void {\r\n this.beforeEachHooks.push(hook);\r\n }\r\n\r\n afterEach(hook: (to: Route, from: Route) => void): void {\r\n this.afterEachHooks.push(hook);\r\n }\r\n\r\n onNotFound(handler: () => void): void {\r\n this.notFoundHandler = handler;\r\n }\r\n\r\n /**\r\n * Route utilities\r\n */\r\n getCurrentRoute(): Route | null {\r\n return this.currentRoute ? { ...this.currentRoute } : null;\r\n }\r\n\r\n isActive(path: string, exact: boolean = false): boolean {\r\n if (!this.currentRoute) return false;\r\n return exact\r\n ? this.currentRoute.path === path\r\n : this.currentRoute.path.startsWith(path);\r\n }\r\n\r\n outlet(): VNode {\r\n return createElement('div', {\r\n 'data-router-outlet': 'true',\r\n style: 'display: contents;'\r\n }) as VNode;\r\n }\r\n\r\n getRoute(name: string): RouteConfig | undefined {\r\n return this.routes.find(r => r.name === name);\r\n }\r\n\r\n async pushNamed(name: string, params?: Record<string, string>): Promise<void> {\r\n const route = this.getRoute(name);\r\n if (!route) {\r\n console.error(`Route with name \"${name}\" not found`);\r\n return;\r\n }\r\n\r\n let path = route.path;\r\n if (params) {\r\n for (const [key, value] of Object.entries(params)) {\r\n path = path.replace(`:${key}`, value);\r\n }\r\n }\r\n\r\n return this.push(path);\r\n }\r\n\r\n resolve(path: string): Route | null {\r\n const matchedRoute = this._matchRoute(path);\r\n if (!matchedRoute) return null;\r\n\r\n const { route, params } = matchedRoute;\r\n return {\r\n path,\r\n params,\r\n query: this._parseQuery(path),\r\n meta: route.meta || {},\r\n hash: path.includes('#') ? path.split('#')[1] : '',\r\n name: route.name,\r\n };\r\n }\r\n\r\n /**\r\n * Initialize routing handlers\r\n */\r\n private _initializeRouting(): void {\r\n // Handle browser navigation\r\n window.addEventListener('popstate', () => {\r\n this._internalPath = null;\r\n this._handleRoute();\r\n });\r\n\r\n if (this.mode === 'hash') {\r\n window.addEventListener('hashchange', () => {\r\n this._internalPath = null;\r\n this._handleRoute();\r\n });\r\n }\r\n\r\n // Intercept link clicks\r\n document.addEventListener('click', (e) => {\r\n const link = (e.target as HTMLElement).closest('a[href]') as HTMLAnchorElement | null;\r\n\r\n if (link && this._shouldInterceptLink(link)) {\r\n e.preventDefault();\r\n const href = link.getAttribute('href');\r\n if (href) {\r\n const path = this.mode === 'hash' && href.startsWith('#')\r\n ? href.substring(1)\r\n : href.replace(this.base, '');\r\n this.push(path);\r\n }\r\n }\r\n });\r\n }\r\n\r\n private _shouldInterceptLink(link: HTMLAnchorElement): boolean {\r\n const href = link.getAttribute('href');\r\n return !!(\r\n href &&\r\n link.hostname === window.location.hostname &&\r\n link.target !== '_blank' &&\r\n !link.hasAttribute('download') &&\r\n link.rel !== 'external'\r\n );\r\n }\r\n\r\n /**\r\n * Handle route change\r\n */\r\n private async _handleRoute(): Promise<void> {\r\n if (this.isNavigating) return;\r\n\r\n this.isNavigating = true;\r\n\r\n try {\r\n const path = this._getCurrentPath();\r\n const matchedRoute = this._matchRoute(path);\r\n\r\n if (!matchedRoute) {\r\n this._handleNotFound(path);\r\n return;\r\n }\r\n\r\n const { route, params } = matchedRoute;\r\n const to = this._buildRouteObject(path, params, route);\r\n const from = this.currentRoute || this._buildEmptyRoute();\r\n\r\n // Run guards\r\n const canProceed = await this._runNavigationGuards(route, to, from);\r\n if (!canProceed) return;\r\n\r\n this.currentRoute = to;\r\n\r\n await this._renderComponent(route);\r\n this._handleScrollBehavior(to, from);\r\n\r\n if (route.meta?.title && typeof route.meta.title === 'string') {\r\n document.title = route.meta.title;\r\n }\r\n\r\n // Run after hooks\r\n this.afterEachHooks.forEach(hook => hook(to, from));\r\n\r\n } catch (error) {\r\n console.error('Router error:', error);\r\n } finally {\r\n this.isNavigating = false;\r\n }\r\n }\r\n\r\n /**\r\n * Handle 404 not found\r\n */\r\n private _handleNotFound(path: string): void {\r\n console.warn(`No route matched for path: ${path}`);\r\n\r\n this.currentRoute = {\r\n path,\r\n params: {},\r\n query: this._parseQuery(),\r\n meta: {},\r\n hash: window.location.hash.substring(1),\r\n };\r\n\r\n if (this.notFoundHandler) {\r\n this.notFoundHandler();\r\n }\r\n }\r\n\r\n /**\r\n * Build route object\r\n */\r\n private _buildRouteObject(\r\n path: string,\r\n params: Record<string, string>,\r\n route: RouteConfig\r\n ): Route {\r\n return {\r\n path,\r\n params,\r\n query: this._parseQuery(),\r\n meta: route.meta || {},\r\n hash: window.location.hash.substring(1),\r\n name: route.name,\r\n };\r\n }\r\n\r\n private _buildEmptyRoute(): Route {\r\n return {\r\n path: '',\r\n params: {},\r\n query: {},\r\n meta: {},\r\n hash: '',\r\n };\r\n }\r\n\r\n /**\r\n * Run navigation guards\r\n */\r\n private async _runNavigationGuards(\r\n route: RouteConfig,\r\n to: Route,\r\n from: Route\r\n ): Promise<boolean> {\r\n // Route-specific guard\r\n if (route.beforeEnter) {\r\n const result = await this._runGuard(route.beforeEnter, to, from);\r\n if (!result) return false;\r\n }\r\n\r\n // Global guards\r\n for (const guard of this.beforeEachHooks) {\r\n const result = await this._runGuard(guard, to, from);\r\n if (!result) return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n private _runGuard(\r\n guard: NavigationGuard,\r\n to: Route,\r\n from: Route\r\n ): Promise<boolean> {\r\n return new Promise((resolve) => {\r\n guard(to, from, (nextPath?: string | false) => {\r\n if (nextPath === false) {\r\n resolve(false);\r\n } else if (typeof nextPath === 'string') {\r\n this.push(nextPath);\r\n resolve(false);\r\n } else {\r\n resolve(true);\r\n }\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Render component - simplified component resolution\r\n */\r\n private async _renderComponent(route: RouteConfig): Promise<void> {\r\n // Get or find outlet\r\n if (!this.routerOutlet) {\r\n this.routerOutlet = document.querySelector('[data-router-outlet=\"true\"]') as HTMLElement;\r\n if (!this.routerOutlet) {\r\n console.warn('Router outlet not found');\r\n return;\r\n }\r\n }\r\n\r\n // Unmount previous component\r\n if (this.currentComponent) {\r\n this.currentComponent.unmount();\r\n this.currentComponent = null;\r\n }\r\n\r\n // Clear outlet\r\n this.routerOutlet.innerHTML = '';\r\n\r\n try {\r\n const ComponentClass = await this._resolveComponent(route.component);\r\n\r\n if (!ComponentClass || typeof ComponentClass !== 'function') {\r\n throw new Error('Component is null or not a constructor');\r\n }\r\n\r\n const ComponentCtor = ComponentClass as new () => Component;\r\n // console.log('🎨 Mounting:', ComponentCtor.name || 'Component');\r\n this.currentComponent = new ComponentCtor();\r\n\r\n if (this.currentComponent) {\r\n await this.currentComponent.mount(this.routerOutlet);\r\n // console.log('✅ Mounted successfully!');\r\n }\r\n\r\n } catch (error) {\r\n this._renderError(route.path, error);\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Resolve component (handle lazy loading)\r\n */\r\n private async _resolveComponent(\r\n component: ComponentConstructor | (() => Promise<LazyModule>)\r\n ): Promise<ComponentConstructor | null> {\r\n // console.log('🔍 Resolving component...');\r\n\r\n // Check if it's a class constructor\r\n if (typeof component === 'function') {\r\n // Try to determine if it's a class vs a loader function\r\n const hasPrototype = 'prototype' in component && component.prototype;\r\n const proto = hasPrototype ? (component as { prototype: unknown }).prototype : null;\r\n const hasConstructor = proto && typeof proto === 'object' && 'constructor' in proto;\r\n\r\n if (hasConstructor && (proto as { constructor: unknown }).constructor === component) {\r\n // console.log('✅ Direct component class');\r\n return component as ComponentConstructor;\r\n }\r\n\r\n // Otherwise treat as lazy loader\r\n // console.log('📦 Lazy loading...');\r\n try {\r\n const result = await (component as () => Promise<LazyModule>)();\r\n // console.log('📦 Module keys:', Object.keys(result));\r\n\r\n // Find component in module\r\n const found = result.HomePage ||\r\n result.TodoPage ||\r\n result.default ||\r\n Object.values(result).find((exp: unknown): exp is ComponentConstructor => {\r\n if (typeof exp !== 'function') return false;\r\n // Type guard: check if it's a constructor function\r\n const possibleCtor = exp as { prototype?: unknown };\r\n const proto = possibleCtor.prototype;\r\n return proto !== null && typeof proto === 'object' && proto !== undefined && 'constructor' in proto;\r\n });\r\n\r\n return found || null;\r\n } catch (error) {\r\n console.error('Failed to load lazy component:', error);\r\n return null;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Render error fallback\r\n */\r\n private _renderError(path: string, error: unknown): void {\r\n if (this.routerOutlet) {\r\n const errorMessage = error instanceof Error ? error.message : String(error);\r\n this.routerOutlet.innerHTML = `\r\n <div style=\"padding: 2rem; background: #fee; border: 2px solid #c00;\r\n border-radius: 8px; margin: 2rem;\">\r\n <h2 style=\"color: #c00; margin-top: 0;\">⚠️ Failed to Load Component</h2>\r\n <p><strong>Route:</strong> ${path}</p>\r\n <p><strong>Error:</strong> ${errorMessage}</p>\r\n </div>\r\n `;\r\n }\r\n }\r\n\r\n /**\r\n * Handle scroll behavior\r\n */\r\n private _handleScrollBehavior(to: Route, from: Route): void {\r\n if (to.hash) {\r\n const element = document.getElementById(to.hash);\r\n if (element) {\r\n element.scrollIntoView({ behavior: this.scrollBehavior });\r\n return;\r\n }\r\n }\r\n\r\n if (to.path !== from.path) {\r\n window.scrollTo({ top: 0, behavior: this.scrollBehavior });\r\n }\r\n }\r\n\r\n /**\r\n * Get current path (handles test environments)\r\n */\r\n private _getCurrentPath(): string {\r\n if (this._internalPath !== null) {\r\n return this._internalPath;\r\n }\r\n\r\n if (this.mode === 'hash') {\r\n return window.location.hash.substring(1).split('?')[0] || '/';\r\n }\r\n\r\n let path = window.location.pathname;\r\n\r\n // Handle test environments\r\n if (!path || path === 'blank' || path === 'about:blank') {\r\n path = '/';\r\n }\r\n\r\n if (this.base && path.startsWith(this.base)) {\r\n path = path.substring(this.base.length);\r\n }\r\n\r\n return path || '/';\r\n }\r\n\r\n private _buildFullPath(path: string): string {\r\n if (path.startsWith('http')) return path;\r\n const normalizedPath = path.startsWith('/') ? path : '/' + path;\r\n return this.base + normalizedPath;\r\n }\r\n\r\n /**\r\n * Match route pattern to path\r\n */\r\n private _matchRoute(path: string): { route: RouteConfig; params: Record<string, string> } | null {\r\n const cleanPath = path.split('?')[0].split('#')[0];\r\n\r\n for (const route of this.routes) {\r\n const params = this._matchPath(route.path, cleanPath);\r\n if (params !== null) {\r\n return { route, params };\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private _matchPath(pattern: string, path: string): Record<string, string> | null {\r\n if (pattern === '*') return {};\r\n if (pattern === path) return {};\r\n\r\n const paramNames: string[] = [];\r\n const regexPattern = pattern\r\n .replace(/\\*/g, '.*')\r\n .replace(/:([^/]+)/g, (_, paramName: string) => {\r\n paramNames.push(paramName);\r\n return '([^/]+)';\r\n });\r\n\r\n const regex = new RegExp(`^${regexPattern}$`);\r\n const match = path.match(regex);\r\n\r\n if (!match) return null;\r\n\r\n return paramNames.reduce((params, name, i) => {\r\n params[name] = decodeURIComponent(match[i + 1]);\r\n return params;\r\n }, {} as Record<string, string>);\r\n }\r\n\r\n /**\r\n * Parse query string\r\n */\r\n private _parseQuery(path?: string): Record<string, string> {\r\n const search = path\r\n ? path.includes('?') ? path.split('?')[1].split('#')[0] : ''\r\n : window.location.search.substring(1);\r\n\r\n if (!search) return {};\r\n\r\n return search.split('&').reduce((query, pair) => {\r\n const [key, value] = pair.split('=').map(decodeURIComponent);\r\n if (key) query[key] = value || '';\r\n return query;\r\n }, {} as Record<string, string>);\r\n }\r\n }\r\n\r\n export const router = new Router();\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝","// src/mod/core/client.ts\r\n//\r\n// Made with ❤️ by Maysara.\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ PACK ════════════════════════════════════════╗\r\n\r\n import type { ClientConfig } from '../../types';\r\n import type { ApiConfig as CapiConfigType } from '@je-es/capi';\r\n import { router } from './router';\r\n import { configureApi } from '@je-es/capi';\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ TYPE ════════════════════════════════════════╗\r\n\r\n export type { ClientConfig };\r\n\r\n // Bun build types\r\n interface BunBuildOptions {\r\n entrypoints: string[];\r\n outdir: string;\r\n target: string;\r\n minify?: boolean;\r\n sourcemap?: 'none' | 'external' | 'inline';\r\n splitting?: boolean;\r\n naming?: { entry?: string };\r\n external?: string[];\r\n }\r\n\r\n interface BunBuildResult {\r\n success: boolean;\r\n logs: {\r\n message: string;\r\n level: 'error' | 'warning' | 'info';\r\n }[];\r\n }\r\n\r\n declare const Bun: {\r\n build(options: BunBuildOptions): Promise<BunBuildResult>;\r\n };\r\n\r\n // Window type extension for dev tools\r\n declare global {\r\n interface Window {\r\n __JEES_DEV__?: {\r\n router: typeof router;\r\n config: ClientConfig;\r\n version: string;\r\n };\r\n }\r\n }\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ CORE ════════════════════════════════════════╗\r\n\r\n /**\r\n * Client builder\r\n * Handles build process and runtime configuration\r\n */\r\n export function client(config: ClientConfig) {\r\n // Store configuration\r\n const _config = config;\r\n\r\n return {\r\n /**\r\n * Build the client application\r\n * This compiles TypeScript components to vanilla JavaScript\r\n */\r\n async build(): Promise<void> {\r\n if (!_config.build) {\r\n console.warn('No build configuration provided');\r\n return;\r\n }\r\n\r\n console.log('🔨 Building @je-es/client application...');\r\n\r\n try {\r\n // Build JavaScript\r\n await this._buildJS();\r\n\r\n // Build SCSS/CSS\r\n await this._buildStyles();\r\n\r\n console.log('✅ Build completed successfully!');\r\n\r\n } catch (error) {\r\n console.error('❌ Build error:', error);\r\n throw error;\r\n }\r\n },\r\n\r\n /**\r\n * Build JavaScript bundle\r\n */\r\n async _buildJS(): Promise<void> {\r\n if (!_config.build) return;\r\n\r\n const result = await Bun.build({\r\n entrypoints : [_config.build.entry],\r\n outdir : _config.build.output.substring(0, _config.build.output.lastIndexOf('/')),\r\n target : 'browser',\r\n minify : _config.build.minify ?? false,\r\n sourcemap : _config.build.sourcemap ? 'external' : 'none',\r\n splitting : _config.build.optimization?.splitChunks ?? false,\r\n naming : {\r\n entry : _config.build.output.substring(_config.build.output.lastIndexOf('/') + 1),\r\n },\r\n // Exclude server-side packages from browser bundle\r\n external : [\r\n 'sass',\r\n 'fs',\r\n 'path',\r\n 'url',\r\n 'util',\r\n 'stream',\r\n 'buffer',\r\n 'events',\r\n 'crypto',\r\n 'os',\r\n 'child_process',\r\n ],\r\n });\r\n\r\n if (!result.success) {\r\n console.error('❌ JS Build failed:', result.logs);\r\n throw new Error('JS Build failed');\r\n }\r\n\r\n // console.log('📦 JavaScript bundled');\r\n },\r\n\r\n /**\r\n * Build SCSS/CSS styles\r\n */\r\n async _buildStyles(): Promise<void> {\r\n const stylesDir = _config.build?.styles?.input || './app/style';\r\n const outputPath = _config.build?.styles?.output || './static/client.css';\r\n\r\n // Dynamically import server-side modules only when building\r\n const { default: sass } = await import('sass');\r\n const { writeFileSync, existsSync, mkdirSync } = await import('fs');\r\n const { join, relative, dirname } = await import('path');\r\n\r\n const outputDir = dirname(outputPath);\r\n const outputFile = outputPath.split('/').pop() || 'client.css';\r\n\r\n // Check if styles directory exists\r\n if (!existsSync(stylesDir)) {\r\n console.log('⚠️ No style directory found, skipping CSS build');\r\n return;\r\n }\r\n\r\n try {\r\n // Ensure output directory exists\r\n if (!existsSync(outputDir)) {\r\n mkdirSync(outputDir, { recursive: true });\r\n }\r\n\r\n // Collect all SCSS files (no .sass files)\r\n const scssFiles = this._collectScssFiles(stylesDir);\r\n\r\n if ((await scssFiles).length === 0) {\r\n console.log('⚠️ No SCSS files found, skipping CSS build');\r\n return;\r\n }\r\n\r\n // console.log(`📝 Found ${scssFiles.length} SCSS file(s)`);\r\n\r\n // Compile all SCSS files and combine\r\n let combinedCSS = '';\r\n\r\n for (const file of await scssFiles) {\r\n try {\r\n const result = sass.compile(file, {\r\n style: _config.build?.minify ? 'compressed' : 'expanded',\r\n sourceMap: _config.build?.sourcemap ? true : false,\r\n });\r\n\r\n combinedCSS += `\\n/* ${relative(stylesDir, file)} */\\n`;\r\n combinedCSS += result.css;\r\n combinedCSS += '\\n';\r\n\r\n } catch (sassError) {\r\n console.error(`❌ Error compiling ${file}:`, sassError);\r\n throw sassError;\r\n }\r\n }\r\n\r\n // Write combined CSS\r\n const fullOutputPath = join(outputDir, outputFile);\r\n writeFileSync(fullOutputPath, combinedCSS, 'utf-8');\r\n\r\n // console.log(`💅 Styles compiled to ${fullOutputPath}`);\r\n\r\n // Write source map if enabled\r\n if (_config.build?.sourcemap) {\r\n writeFileSync(\r\n `${fullOutputPath}.map`,\r\n JSON.stringify({\r\n version: 3,\r\n sources: (await scssFiles).map(f => relative(outputDir, f)),\r\n names: [],\r\n mappings: ''\r\n }),\r\n 'utf-8'\r\n );\r\n }\r\n\r\n } catch (error) {\r\n console.error('❌ CSS Build failed:', error);\r\n throw error;\r\n }\r\n },\r\n\r\n /**\r\n * Recursively collect all SCSS files (excluding .sass)\r\n */\r\n async _collectScssFiles(dir: string): Promise<string[]> {\r\n const { readdirSync, statSync, existsSync } = await import('fs');\r\n const { join, extname } = await import('path');\r\n\r\n const files: string[] = [];\r\n\r\n if (!existsSync(dir)) {\r\n return files;\r\n }\r\n\r\n const entries = readdirSync(dir);\r\n\r\n for (const entry of entries) {\r\n const fullPath = join(dir, entry);\r\n const stat = statSync(fullPath);\r\n\r\n if (stat.isDirectory()) {\r\n // Recursively scan subdirectories\r\n files.push(...await this._collectScssFiles(fullPath));\r\n } else if (stat.isFile()) {\r\n const ext = extname(entry);\r\n // Only include .scss files, skip partials (starting with _)\r\n if (ext === '.scss' && !entry.startsWith('_')) {\r\n files.push(fullPath);\r\n }\r\n }\r\n }\r\n\r\n // Sort files to ensure consistent order\r\n return files.sort();\r\n },\r\n\r\n /**\r\n * Watch mode for development\r\n */\r\n async watch(): Promise<void> {\r\n console.log('👀 Watching for changes...');\r\n\r\n // Initial build\r\n await this.build();\r\n\r\n // Watch for file changes\r\n const { watch } = await import('fs');\r\n const { dirname } = await import('path');\r\n const { existsSync } = await import('fs');\r\n\r\n // Watch TypeScript files\r\n if (_config.build?.entry) {\r\n const entryDir = dirname(_config.build.entry);\r\n watch(entryDir, { recursive: true }, async (eventType, filename) => {\r\n if (filename && (filename.endsWith('.ts') || filename.endsWith('.tsx'))) {\r\n console.log(`🔄 ${filename} changed, rebuilding JS...`);\r\n try {\r\n await this._buildJS();\r\n console.log('✅ JS rebuild complete');\r\n } catch (error) {\r\n console.error('❌ JS rebuild failed:', error);\r\n }\r\n }\r\n });\r\n }\r\n\r\n // Watch SCSS files\r\n const stylesDir = './app/style';\r\n if (existsSync(stylesDir)) {\r\n watch(stylesDir, { recursive: true }, async (eventType, filename) => {\r\n if (filename && filename.endsWith('.scss')) {\r\n console.log(`🔄 ${filename} changed, rebuilding CSS...`);\r\n try {\r\n await this._buildStyles();\r\n console.log('✅ CSS rebuild complete');\r\n } catch (error) {\r\n console.error('❌ CSS rebuild failed:', error);\r\n }\r\n }\r\n });\r\n }\r\n },\r\n\r\n /**\r\n * Initialize the client runtime\r\n * This runs in the browser\r\n */\r\n init(): void {\r\n // console.log('🚀 Initializing @je-es/client...');\r\n\r\n // Configure API client\r\n if (_config.api) {\r\n // Build the capi-compatible config\r\n const capiConfig: Partial<CapiConfigType> = {\r\n baseURL: _config.api.baseURL,\r\n timeout: _config.api.timeout,\r\n headers: _config.api.headers,\r\n };\r\n\r\n // Add interceptors if they exist\r\n if (_config.api.interceptors) {\r\n capiConfig.interceptors = {\r\n request: _config.api.interceptors.request || null,\r\n response: _config.api.interceptors.response || null,\r\n error: _config.api.interceptors.error || null,\r\n };\r\n }\r\n\r\n configureApi(capiConfig);\r\n }\r\n\r\n // Configure router\r\n if (_config.router && _config.app?.routes) {\r\n router.init(\r\n _config.app.routes,\r\n _config.router.mode,\r\n _config.router.base\r\n );\r\n\r\n if (_config.router.beforeEach) {\r\n router.beforeEach(_config.router.beforeEach);\r\n }\r\n\r\n if (_config.router.afterEach) {\r\n router.afterEach(_config.router.afterEach);\r\n }\r\n }\r\n\r\n // Mount root component\r\n if (_config.app?.root) {\r\n const rootElement = document.querySelector(_config.app.root);\r\n if (rootElement) {\r\n // console.log('✅ Client initialized successfully!');\r\n } else {\r\n console.error(`❌ Root element \"${_config.app.root}\" not found`);\r\n }\r\n }\r\n\r\n // Enable dev tools\r\n if (_config.devTools?.enabled) {\r\n this._enableDevTools();\r\n }\r\n },\r\n\r\n /**\r\n * Enable development tools\r\n */\r\n _enableDevTools(): void {\r\n // console.log('🛠️ Dev tools enabled');\r\n\r\n // Add dev tools to window\r\n window.__JEES_DEV__ = {\r\n router,\r\n config: _config,\r\n version: '0.0.1',\r\n };\r\n\r\n // // Log router changes\r\n // if (_config.devTools?.showRouterInfo) {\r\n // router.afterEach((to: Route, from: Route) => {\r\n // console.log('📍 Route changed:', {\r\n // from: from.path,\r\n // to: to.path,\r\n // params: to.params,\r\n // query: to.query,\r\n // });\r\n // });\r\n // }\r\n },\r\n\r\n /**\r\n * Get configuration\r\n */\r\n getConfig(): ClientConfig {\r\n return _config;\r\n },\r\n };\r\n }\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝","// src/mod/core/store.ts\r\n//\r\n// Made with ❤️ by Maysara.\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ PACK ════════════════════════════════════════╗\r\n\r\n import { StoreOptions, StoreSubscriber } from '../../types';\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ CORE ════════════════════════════════════════╗\r\n\r\n /**\r\n * Store - Global state management with improved features\r\n */\r\n export class Store<T extends Record<string, unknown> = Record<string, unknown>> {\r\n private _state: T;\r\n private _subscribers = new Set<StoreSubscriber<T>>();\r\n private _persist: boolean;\r\n private _storage: Storage | null = null;\r\n private _storageKey: string;\r\n private _middleware: ((state: T, action?: string) => void)[] = [];\r\n private _isHydrating: boolean = false;\r\n\r\n constructor(options: StoreOptions<T>) {\r\n this._persist = options.persist ?? false;\r\n this._storageKey = options.storageKey || `store_${Date.now()}`;\r\n\r\n // Initialize storage\r\n if (this._persist && typeof window !== 'undefined') {\r\n this._storage = options.storage === 'sessionStorage'\r\n ? sessionStorage\r\n : localStorage;\r\n }\r\n\r\n // Load from storage if persisted\r\n if (this._persist && this._storage) {\r\n const stored = this._loadFromStorage();\r\n this._state = stored !== null ? stored : options.state;\r\n } else {\r\n this._state = options.state;\r\n }\r\n\r\n // Apply initial middleware\r\n if (options.middleware) {\r\n this._middleware = options.middleware;\r\n }\r\n }\r\n\r\n /**\r\n * Get current state (readonly)\r\n */\r\n get state(): Readonly<T> {\r\n return { ...this._state };\r\n }\r\n\r\n /**\r\n * Set entire state (replaces state)\r\n */\r\n set state(newState: T) {\r\n this.setState(newState);\r\n }\r\n\r\n /**\r\n * Update state (merges with existing state)\r\n */\r\n setState(update: Partial<T> | ((prevState: T) => Partial<T>), action?: string): void {\r\n const prevState = { ...this._state };\r\n\r\n const partialState = typeof update === 'function'\r\n ? update(prevState)\r\n : update;\r\n\r\n this._state = { ...prevState, ...partialState };\r\n\r\n // Apply middleware\r\n for (const middleware of this._middleware) {\r\n try {\r\n middleware(this._state, action);\r\n } catch (error) {\r\n console.error('Store middleware error:', error);\r\n }\r\n }\r\n\r\n // Persist to storage\r\n if (this._persist && !this._isHydrating) {\r\n this._saveToStorage();\r\n }\r\n\r\n // Notify subscribers\r\n this._notify();\r\n }\r\n\r\n /**\r\n * Get a specific value from state\r\n */\r\n get<K extends keyof T>(key: K): T[K] {\r\n return this._state[key];\r\n }\r\n\r\n /**\r\n * Set a specific value in state\r\n */\r\n set<K extends keyof T>(key: K, value: T[K], action?: string): void {\r\n this.setState({ [key]: value } as unknown as Partial<T>, action);\r\n }\r\n\r\n /**\r\n * Subscribe to state changes\r\n * Returns unsubscribe function\r\n */\r\n subscribe(listener: StoreSubscriber<T>): () => void {\r\n this._subscribers.add(listener);\r\n\r\n // Immediately call listener with current state\r\n listener(this._state);\r\n\r\n // Return unsubscribe function\r\n return () => {\r\n this._subscribers.delete(listener);\r\n };\r\n }\r\n\r\n /**\r\n * Subscribe to specific key changes\r\n */\r\n subscribeToKey<K extends keyof T>(\r\n key: K,\r\n listener: (value: T[K]) => void\r\n ): () => void {\r\n let prevValue = this._state[key];\r\n\r\n const subscriber = (state: T) => {\r\n const newValue = state[key];\r\n if (prevValue !== newValue) {\r\n prevValue = newValue;\r\n listener(newValue);\r\n }\r\n };\r\n\r\n return this.subscribe(subscriber);\r\n }\r\n\r\n /**\r\n * Add middleware\r\n */\r\n use(middleware: (state: T, action?: string) => void): void {\r\n this._middleware.push(middleware);\r\n }\r\n\r\n /**\r\n * Clear all state\r\n */\r\n clear(): void {\r\n this._state = {} as T;\r\n\r\n if (this._persist && this._storage) {\r\n try {\r\n this._storage.removeItem(this._storageKey);\r\n } catch (error) {\r\n console.error('Failed to clear storage:', error);\r\n }\r\n }\r\n\r\n this._notify();\r\n }\r\n\r\n /**\r\n * Reset state to initial value\r\n */\r\n reset(initialState: T): void {\r\n this._state = { ...initialState };\r\n\r\n if (this._persist) {\r\n this._saveToStorage();\r\n }\r\n\r\n this._notify();\r\n }\r\n\r\n /**\r\n * Hydrate state from storage\r\n */\r\n hydrate(): void {\r\n if (!this._persist || !this._storage) {\r\n console.warn('Cannot hydrate: persistence not enabled');\r\n return;\r\n }\r\n\r\n this._isHydrating = true;\r\n const stored = this._loadFromStorage();\r\n\r\n if (stored !== null) {\r\n this._state = stored;\r\n this._notify();\r\n }\r\n\r\n this._isHydrating = false;\r\n }\r\n\r\n /**\r\n * Get store snapshot for debugging\r\n */\r\n getSnapshot(): { state: T; subscribers: number; storageKey: string } {\r\n return {\r\n state: { ...this._state },\r\n subscribers: this._subscribers.size,\r\n storageKey: this._storageKey,\r\n };\r\n }\r\n\r\n /**\r\n * Batch multiple updates\r\n */\r\n batch(updates: () => void): void {\r\n const prevNotify = this._notify.bind(this);\r\n let shouldNotify = false;\r\n\r\n // Temporarily override notify\r\n this._notify = () => {\r\n shouldNotify = true;\r\n };\r\n\r\n try {\r\n updates();\r\n } finally {\r\n this._notify = prevNotify;\r\n if (shouldNotify) {\r\n this._notify();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Notify all subscribers\r\n */\r\n private _notify(): void {\r\n const stateCopy = { ...this._state };\r\n\r\n for (const subscriber of this._subscribers) {\r\n try {\r\n subscriber(stateCopy);\r\n } catch (error) {\r\n console.error('Store subscriber error:', error);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Load state from storage\r\n */\r\n private _loadFromStorage(): T | null {\r\n if (!this._storage) return null;\r\n\r\n try {\r\n const stored = this._storage.getItem(this._storageKey);\r\n return stored ? JSON.parse(stored) as T : null;\r\n } catch (error) {\r\n console.error('Failed to load from storage:', error);\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * Save state to storage\r\n */\r\n private _saveToStorage(): void {\r\n if (!this._storage) return;\r\n\r\n try {\r\n this._storage.setItem(this._storageKey, JSON.stringify(this._state));\r\n } catch (error) {\r\n console.error('Failed to save to storage:', error);\r\n\r\n // Handle quota exceeded\r\n if (error instanceof DOMException && error.name === 'QuotaExceededError') {\r\n console.warn('Storage quota exceeded');\r\n // Could implement cleanup strategy here\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Destroy store and cleanup\r\n */\r\n destroy(): void {\r\n this._subscribers.clear();\r\n this._middleware = [];\r\n this._state = {} as T;\r\n }\r\n }\r\n\r\n /**\r\n * Create a store with type inference\r\n */\r\n export function createStore<T extends Record<string, unknown>>(\r\n options: StoreOptions<T>\r\n ): Store<T> {\r\n return new Store(options);\r\n }\r\n\r\n /**\r\n * Create a computed store that derives from other stores\r\n */\r\n export function createComputedStore<T, S extends Store<Record<string, unknown>>[]>(\r\n stores: S,\r\n computer: (...states: unknown[]) => T\r\n ): Store<{ value: T }> {\r\n const computedStore = createStore<{ value: T }>({\r\n state: { value: computer(...stores.map(s => s.state)) },\r\n });\r\n\r\n // Subscribe to all source stores\r\n for (const store of stores) {\r\n store.subscribe(() => {\r\n computedStore.setState({\r\n value: computer(...stores.map(s => s.state)),\r\n });\r\n });\r\n }\r\n\r\n return computedStore;\r\n }\r\n\r\n /**\r\n * Connect a component to a store\r\n */\r\n export function connect<T extends Record<string, unknown>, C extends { update?: () => void }>(\r\n store: Store<T>,\r\n component: C,\r\n mapStateToProps: (state: T) => Partial<C>\r\n ): () => void {\r\n const unsubscribe = store.subscribe((state) => {\r\n const props = mapStateToProps(state);\r\n Object.assign(component, props);\r\n\r\n // Trigger update if component has update method\r\n if (typeof component.update === 'function') {\r\n component.update();\r\n }\r\n });\r\n\r\n return unsubscribe;\r\n }\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝","// src/mod/core/decorators.ts\r\n//\r\n// Made with ❤️ by Maysara.\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ TYPE ════════════════════════════════════════╗\r\n\r\n // Type for decorator context (Stage 3 decorators)\r\n interface ClassFieldDecoratorContext<This = unknown, Value = unknown> {\r\n kind: 'field';\r\n name: string | symbol;\r\n access: {\r\n get(object: This): Value;\r\n set(object: This, value: Value): void;\r\n };\r\n addInitializer(initializer: (this: This) => void): void;\r\n }\r\n\r\n interface ClassGetterDecoratorContext<This = unknown, Value = unknown> {\r\n kind: 'getter';\r\n name: string | symbol;\r\n access: {\r\n get(object: This): Value;\r\n };\r\n addInitializer(initializer: (this: This) => void): void;\r\n }\r\n\r\n interface ClassMethodDecoratorContext<This = unknown, Value = unknown> {\r\n kind: 'method';\r\n name: string | symbol;\r\n access: {\r\n get(object: This): Value;\r\n };\r\n addInitializer(initializer: (this: This) => void): void;\r\n }\r\n\r\n // Component metadata interface\r\n interface ComponentMetadata {\r\n __reactiveProps__?: string[];\r\n __watchers__?: Record<string, string[]>;\r\n }\r\n\r\n // Helper type for component instance\r\n type ComponentInstance = Record<string, unknown> & {\r\n constructor: ComponentMetadata;\r\n _invalidateAllComputed?: () => void;\r\n _triggerWatchers?: (key: string, newVal: unknown, oldVal: unknown) => void;\r\n _isMounted?: boolean;\r\n update?: () => void;\r\n };\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ CORE ════════════════════════════════════════╗\r\n\r\n /**\r\n * State decorator - makes property reactive\r\n * Usage: @state fields = [];\r\n *\r\n * Supports both TypeScript 5 decorators and legacy decorators\r\n */\r\n export function state<This, Value>(\r\n target: undefined,\r\n context: ClassFieldDecoratorContext<This, Value>\r\n ): (this: This, initialValue: Value) => Value;\r\n export function state(\r\n target: Record<string, unknown>,\r\n context: string\r\n ): void;\r\n export function state<This, Value>(\r\n target: Record<string, unknown> | undefined,\r\n context: string | ClassFieldDecoratorContext<This, Value>\r\n ): unknown {\r\n // TypeScript 5+ decorator (Stage 3)\r\n if (context && typeof context === 'object' && 'kind' in context) {\r\n const propertyKey = context.name as string;\r\n\r\n context.addInitializer(function(this: unknown) {\r\n const instance = this as ComponentInstance;\r\n if (!instance.constructor.__reactiveProps__) {\r\n instance.constructor.__reactiveProps__ = [];\r\n }\r\n if (!instance.constructor.__reactiveProps__.includes(propertyKey)) {\r\n instance.constructor.__reactiveProps__.push(propertyKey);\r\n }\r\n });\r\n\r\n return function(this: This, initialValue: Value): Value {\r\n const instance = this as ComponentInstance;\r\n const hiddenKey = `_state_${propertyKey}`;\r\n\r\n // Store initial value\r\n instance[hiddenKey] = initialValue;\r\n\r\n // Define getter/setter\r\n Object.defineProperty(this, propertyKey, {\r\n get(this: This) {\r\n const inst = this as Record<string, unknown>;\r\n return inst[hiddenKey];\r\n },\r\n set(this: This, newValue: Value) {\r\n const inst = this as ComponentInstance;\r\n const oldValue = inst[hiddenKey];\r\n\r\n if (oldValue !== newValue) {\r\n inst[hiddenKey] = newValue;\r\n\r\n // Invalidate all computed properties\r\n if (typeof inst._invalidateAllComputed === 'function') {\r\n inst._invalidateAllComputed();\r\n }\r\n\r\n // Trigger watchers with correct old/new values\r\n if (typeof inst._triggerWatchers === 'function') {\r\n inst._triggerWatchers(propertyKey, newValue, oldValue);\r\n }\r\n\r\n // Trigger update if component is mounted\r\n if (inst._isMounted && typeof inst.update === 'function') {\r\n inst.update();\r\n }\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true,\r\n });\r\n\r\n return initialValue;\r\n };\r\n }\r\n\r\n // Legacy decorator (for backwards compatibility)\r\n const propertyKey = context as string;\r\n\r\n // Store reactive property metadata\r\n const targetConstructor = (target as { constructor: ComponentMetadata }).constructor;\r\n if (!targetConstructor.__reactiveProps__) {\r\n targetConstructor.__reactiveProps__ = [];\r\n }\r\n if (!targetConstructor.__reactiveProps__.includes(propertyKey)) {\r\n targetConstructor.__reactiveProps__.push(propertyKey);\r\n }\r\n\r\n // Create hidden property key\r\n const hiddenKey = `_state_${propertyKey}`;\r\n const initKey = `_state_init_${propertyKey}`;\r\n\r\n // Define getter/setter\r\n Object.defineProperty(target, propertyKey, {\r\n get(this: unknown) {\r\n const instance = this as Record<string, unknown>;\r\n // If not initialized yet, return undefined (don't trigger getter before init)\r\n if (!instance[initKey]) {\r\n return undefined;\r\n }\r\n return instance[hiddenKey];\r\n },\r\n set(this: unknown, newValue: unknown) {\r\n const instance = this as ComponentInstance;\r\n // On first set (during construction), just store the value\r\n if (!instance[initKey]) {\r\n instance[hiddenKey] = newValue;\r\n instance[initKey] = true;\r\n return;\r\n }\r\n\r\n const oldValue = instance[hiddenKey];\r\n\r\n if (oldValue !== newValue) {\r\n instance[hiddenKey] = newValue;\r\n\r\n // Invalidate all computed properties\r\n if (typeof instance._invalidateAllComputed === 'function') {\r\n instance._invalidateAllComputed();\r\n }\r\n\r\n // Trigger watchers with correct old/new values\r\n if (typeof instance._triggerWatchers === 'function') {\r\n instance._triggerWatchers(propertyKey, newValue, oldValue);\r\n }\r\n\r\n // Trigger update if component is mounted\r\n if (instance._isMounted && typeof instance.update === 'function') {\r\n instance.update();\r\n }\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true,\r\n });\r\n }\r\n\r\n /**\r\n * Computed decorator - creates computed property\r\n * Usage: @computed get fullName() { return this.firstName + ' ' + this.lastName; }\r\n */\r\n export function computed<This, Value>(\r\n originalGetter: (this: This) => Value,\r\n context: ClassGetterDecoratorContext<This, Value>\r\n ): (this: This) => Value;\r\n export function computed(\r\n target: Record<string, unknown>,\r\n context: string,\r\n descriptor: PropertyDescriptor\r\n ): PropertyDescriptor;\r\n // Catch-all for invalid uses (like methods) to provide better error messages\r\n export function computed(\r\n targetOrGetter: unknown,\r\n context: unknown\r\n ): never;\r\n export function computed<This, Value>(\r\n targetOrGetter: Record<string, unknown> | ((this: This) => Value) | unknown,\r\n context: string | ClassGetterDecoratorContext<This, Value> | unknown,\r\n descriptor?: PropertyDescriptor\r\n ): unknown {\r\n // TypeScript 5+ decorator (Stage 3)\r\n if (context && typeof context === 'object' && 'kind' in context) {\r\n const ctx = context as ClassGetterDecoratorContext<This, Value>;\r\n if (ctx.kind !== 'getter') {\r\n throw new Error('@computed can only be used on getters');\r\n }\r\n\r\n const originalGetter = targetOrGetter as (this: This) => Value;\r\n const propertyKey = ctx.name as string;\r\n const cacheKey = `_computed_cache_${propertyKey}`;\r\n const dirtyKey = `_computed_dirty_${propertyKey}`;\r\n\r\n return function(this: This): Value {\r\n const instance = this as Record<string, unknown>;\r\n // Initialize as dirty on first access\r\n if (instance[dirtyKey] === undefined) {\r\n instance[dirtyKey] = true;\r\n }\r\n\r\n // Recompute if dirty\r\n if (instance[dirtyKey] === true) {\r\n instance[cacheKey] = originalGetter.call(this);\r\n instance[dirtyKey] = false;\r\n }\r\n\r\n return instance[cacheKey] as Value;\r\n };\r\n }\r\n\r\n // Legacy decorator\r\n const propertyKey = context as string;\r\n if (!descriptor) {\r\n throw new Error('@computed requires a property descriptor');\r\n }\r\n\r\n const originalGetter = descriptor.get;\r\n\r\n if (!originalGetter) {\r\n throw new Error('@computed can only be used on getters');\r\n }\r\n\r\n const cacheKey = `_computed_cache_${propertyKey}`;\r\n const dirtyKey = `_computed_dirty_${propertyKey}`;\r\n\r\n return {\r\n get(this: unknown) {\r\n const instance = this as Record<string, unknown>;\r\n // Initialize as dirty on first access\r\n if (instance[dirtyKey] === undefined) {\r\n instance[dirtyKey] = true;\r\n }\r\n\r\n // Recompute if dirty\r\n if (instance[dirtyKey] === true) {\r\n instance[cacheKey] = originalGetter.call(this);\r\n instance[dirtyKey] = false;\r\n }\r\n\r\n return instance[cacheKey];\r\n },\r\n enumerable: descriptor.enumerable,\r\n configurable: descriptor.configurable,\r\n };\r\n }\r\n\r\n /**\r\n * Watch decorator - watches for property changes\r\n * Usage: @watch('propertyName') onPropertyChange(newValue, oldValue) {}\r\n */\r\n export function watch(propertyName: string) {\r\n function decorator<This, Args extends unknown[], Return>(\r\n originalMethod: (this: This, ...args: Args) => Return,\r\n context: ClassMethodDecoratorContext<This, (this: This, ...args: Args) => Return>\r\n ): void;\r\n function decorator(\r\n target: Record<string, unknown>,\r\n context: string,\r\n descriptor: PropertyDescriptor\r\n ): PropertyDescriptor;\r\n function decorator<This, Args extends unknown[], Return>(\r\n targetOrMethod: Record<string, unknown> | ((this: This, ...args: Args) => Return),\r\n context: string | ClassMethodDecoratorContext<This, (this: This, ...args: Args) => Return>,\r\n descriptor?: PropertyDescriptor\r\n ): PropertyDescriptor | void {\r\n // TypeScript 5+ decorator (Stage 3)\r\n if (context && typeof context === 'object' && 'kind' in context) {\r\n if (context.kind !== 'method') {\r\n throw new Error('@watch can only be used on methods');\r\n }\r\n\r\n const methodName = context.name as string;\r\n\r\n context.addInitializer(function(this: unknown) {\r\n const instance = this as ComponentInstance;\r\n if (!instance.constructor.__watchers__) {\r\n instance.constructor.__watchers__ = {};\r\n }\r\n if (!instance.constructor.__watchers__[propertyName]) {\r\n instance.constructor.__watchers__[propertyName] = [];\r\n }\r\n if (!instance.constructor.__watchers__[propertyName].includes(methodName)) {\r\n instance.constructor.__watchers__[propertyName].push(methodName);\r\n }\r\n });\r\n\r\n return;\r\n }\r\n\r\n // Legacy decorator\r\n const methodName = context as string;\r\n if (!descriptor) {\r\n throw new Error('@watch requires a property descriptor');\r\n }\r\n\r\n const target = targetOrMethod as Record<string, unknown>;\r\n const targetConstructor = (target as { constructor: ComponentMetadata }).constructor;\r\n if (!targetConstructor.__watchers__) {\r\n targetConstructor.__watchers__ = {};\r\n }\r\n if (!targetConstructor.__watchers__[propertyName]) {\r\n targetConstructor.__watchers__[propertyName] = [];\r\n }\r\n if (!targetConstructor.__watchers__[propertyName].includes(methodName)) {\r\n targetConstructor.__watchers__[propertyName].push(methodName);\r\n }\r\n\r\n return descriptor;\r\n }\r\n\r\n return decorator;\r\n }\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝","// src/mod/components/smart-form.ts\r\n//\r\n// Made with ❤️ by Maysara.\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ PACK ════════════════════════════════════════╗\r\n\r\n import { Component } from '../core/component';\r\n import { html } from '@je-es/vdom';\r\n import type { FormFieldOption, VNode } from '../../types';\r\n import { css } from '../core/styles';\r\n import { state } from '../core/decorators';\r\n import { api } from '@je-es/capi';\r\n import type { FormFieldConfig, ValidationRule } from '../../types';\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ TYPE ════════════════════════════════════════╗\r\n\r\n export type { FormFieldConfig, ValidationRule };\r\n\r\n export interface FormConfig {\r\n fields: FormFieldConfig[];\r\n endpoint?: string;\r\n method?: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';\r\n onSubmit?: (data: Record<string, unknown>, event: Event) => void | Promise<void>;\r\n onSuccess?: (data: unknown) => void;\r\n onError?: (error: unknown) => void;\r\n submitButton?: {\r\n label?: string;\r\n loadingLabel?: string;\r\n className?: string;\r\n };\r\n className?: string;\r\n autoValidate?: boolean;\r\n }\r\n\r\n export interface FormField extends FormFieldConfig {\r\n error?: string;\r\n touched?: boolean;\r\n }\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ CORE ════════════════════════════════════════╗\r\n\r\n /**\r\n * SmartForm Component\r\n * Auto-validation, CSRF protection, API submission\r\n */\r\n export class SmartFormComponent extends Component<FormConfig> {\r\n // @ts-expect-error - TypeScript decorator limitation with class property types\r\n @state fields: FormField[] = [];\r\n // @ts-expect-error - TypeScript decorator limitation with class property types\r\n @state formData: Record<string, unknown> = {};\r\n // @ts-expect-error - TypeScript decorator limitation with class property types\r\n @state isSubmitting = false;\r\n // @ts-expect-error - TypeScript decorator limitation with class property types\r\n @state submitError = '';\r\n // @ts-expect-error - TypeScript decorator limitation with class property types\r\n @state submitSuccess = false;\r\n\r\n constructor(props: FormConfig) {\r\n super(props);\r\n\r\n // Initialize fields immediately in constructor\r\n this.fields = this.props.fields.map((field: FormFieldConfig) => ({\r\n ...field,\r\n error: undefined,\r\n touched: false,\r\n })) as FormField[];\r\n\r\n // Initialize form data\r\n for (const field of this.fields) {\r\n this.formData[field.name] = field.value || '';\r\n }\r\n }\r\n\r\n onMount(): void {\r\n // console.log('📝 SmartForm mounted with', this.fields.length, 'fields');\r\n }\r\n\r\n /**\r\n * Handle field change\r\n */\r\n handleChange(fieldName: string, value: unknown): void {\r\n this.formData[fieldName] = value;\r\n\r\n // Auto-validate if enabled\r\n const field = this.fields.find(f => f.name === fieldName);\r\n if (field && this.props.autoValidate) {\r\n field.error = this.validateField(field, value);\r\n field.touched = true;\r\n }\r\n\r\n this.update();\r\n }\r\n\r\n /**\r\n * Handle field blur\r\n */\r\n handleBlur(fieldName: string): void {\r\n const field = this.fields.find(f => f.name === fieldName);\r\n if (field) {\r\n field.touched = true;\r\n field.error = this.validateField(field, this.formData[fieldName]);\r\n this.update();\r\n }\r\n }\r\n\r\n /**\r\n * Validate single field\r\n */\r\n validateField(field: FormField, value: unknown): string | undefined {\r\n const validation = field.validation;\r\n if (!validation) return undefined;\r\n\r\n // Required\r\n if (validation.required && !value) {\r\n return validation.message || `${field.label || field.name} is required`;\r\n }\r\n\r\n if (!value) return undefined;\r\n\r\n // Convert to string for string validations\r\n const stringValue = String(value);\r\n\r\n // Min length\r\n if (validation.minLength && stringValue.length < validation.minLength) {\r\n return validation.message || `Minimum ${validation.minLength} characters required`;\r\n }\r\n\r\n // Max length\r\n if (validation.maxLength && stringValue.length > validation.maxLength) {\r\n return validation.message || `Maximum ${validation.maxLength} characters allowed`;\r\n }\r\n\r\n // Min value\r\n if (validation.min !== undefined && Number(value) < validation.min) {\r\n return validation.message || `Minimum value is ${validation.min}`;\r\n }\r\n\r\n // Max value\r\n if (validation.max !== undefined && Number(value) > validation.max) {\r\n return validation.message || `Maximum value is ${validation.max}`;\r\n }\r\n\r\n // Pattern\r\n if (validation.pattern && !validation.pattern.test(stringValue)) {\r\n return validation.message || 'Invalid format';\r\n }\r\n\r\n // Email\r\n if (validation.email && !/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(stringValue)) {\r\n return validation.message || 'Invalid email address';\r\n }\r\n\r\n // URL\r\n if (validation.url && !/^https?:\\/\\/.+/.test(stringValue)) {\r\n return validation.message || 'Invalid URL';\r\n }\r\n\r\n // Custom validation\r\n if (validation.custom) {\r\n const result = validation.custom(value);\r\n if (result !== true) {\r\n return typeof result === 'string' ? result : 'Validation failed';\r\n }\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Validate all fields\r\n */\r\n validateForm(): boolean {\r\n let isValid = true;\r\n\r\n for (const field of this.fields) {\r\n const error = this.validateField(field, this.formData[field.name]);\r\n field.error = error;\r\n field.touched = true;\r\n\r\n if (error) {\r\n isValid = false;\r\n }\r\n }\r\n\r\n this.update();\r\n return isValid;\r\n }\r\n\r\n /**\r\n * Handle form submission\r\n */\r\n async handleSubmit(event: Event): Promise<void> {\r\n event.preventDefault();\r\n\r\n // Validate form\r\n if (!this.validateForm()) {\r\n // Focus first error field\r\n const firstErrorField = this.fields.find(f => f.error);\r\n if (firstErrorField) {\r\n const element = document.querySelector(`[name=\"${firstErrorField.name}\"]`) as HTMLElement;\r\n element?.focus();\r\n }\r\n return;\r\n }\r\n\r\n this.isSubmitting = true;\r\n this.submitError = '';\r\n this.submitSuccess = false;\r\n this.update();\r\n\r\n try {\r\n // Custom submit handler\r\n if (this.props.onSubmit) {\r\n await this.props.onSubmit(this.formData, event);\r\n }\r\n // API submission\r\n else if (this.props.endpoint) {\r\n const response = await api({\r\n method: this.props.method || 'POST',\r\n url: this.props.endpoint,\r\n data: this.formData,\r\n });\r\n\r\n this.submitSuccess = true;\r\n\r\n if (this.props.onSuccess) {\r\n this.props.onSuccess(response.data);\r\n }\r\n }\r\n\r\n } catch (error: unknown) {\r\n const errorMessage = error instanceof Error ? error.message : 'Submission failed';\r\n this.submitError = errorMessage;\r\n\r\n if (this.props.onError) {\r\n this.props.onError(error);\r\n }\r\n } finally {\r\n this.isSubmitting = false;\r\n this.update();\r\n }\r\n }\r\n\r\n /**\r\n * Render form field\r\n */\r\n renderField(field: FormField): VNode {\r\n const value = this.formData[field.name] || '';\r\n const showError = field.touched && field.error;\r\n\r\n switch (field.type) {\r\n case 'textarea': {\r\n return html`\r\n <div class=\"form-field ${field.className || ''}\">\r\n ${field.label ? html`<label for=${field.name}>${field.label}</label>` : ''}\r\n <textarea\r\n id=${field.name}\r\n name=${field.name}\r\n placeholder=${field.placeholder || ''}\r\n value=${String(value)}\r\n disabled=${String(field.disabled || this.isSubmitting)}\r\n oninput=${(e: Event) => {\r\n const target = e.target as HTMLTextAreaElement;\r\n this.handleChange(field.name, target.value);\r\n }}\r\n onblur=${() => this.handleBlur(field.name)}\r\n ></textarea>\r\n ${showError ? html`<span class=\"error\">${field.error}</span>` : ''}\r\n </div>\r\n ` as VNode;\r\n }\r\n\r\n case 'select': {\r\n const options = field.options || [];\r\n const optionNodes = options.map((opt: FormFieldOption) => html`\r\n <option value=${String(opt.value)}>${opt.label}</option>\r\n `);\r\n\r\n return html`\r\n <div class=\"form-field ${field.className || ''}\">\r\n ${field.label ? html`<label for=${field.name}>${field.label}</label>` : ''}\r\n <select\r\n id=${field.name}\r\n name=${field.name}\r\n value=${String(value)}\r\n disabled=${String(field.disabled || this.isSubmitting)}\r\n onchange=${(e: Event) => {\r\n const target = e.target as HTMLSelectElement;\r\n this.handleChange(field.name, target.value);\r\n }}\r\n onblur=${() => this.handleBlur(field.name)}\r\n >\r\n <option value=\"\">Select...</option>\r\n ${optionNodes}\r\n </select>\r\n ${showError ? html`<span class=\"error\">${field.error}</span>` : ''}\r\n </div>\r\n ` as VNode;\r\n }\r\n\r\n case 'checkbox': {\r\n return html`\r\n <div class=\"form-field form-field-checkbox ${field.className || ''}\">\r\n <label>\r\n <input\r\n type=\"checkbox\"\r\n id=${field.name}\r\n name=${field.name}\r\n checked=${String(value)}\r\n disabled=${String(field.disabled || this.isSubmitting)}\r\n onchange=${(e: Event) => {\r\n const target = e.target as HTMLInputElement;\r\n this.handleChange(field.name, target.checked);\r\n }}\r\n />\r\n ${field.label || ''}\r\n </label>\r\n ${showError ? html`<span class=\"error\">${field.error}</span>` : ''}\r\n </div>\r\n ` as VNode;\r\n }\r\n\r\n default: {\r\n return html`\r\n <div class=\"form-field ${field.className || ''}\">\r\n ${field.label ? html`<label for=\"${field.name}\">${field.label}</label>` : ''}\r\n <input\r\n type=\"${field.type || 'text'}\"\r\n id=\"${field.name}\"\r\n name=\"${field.name}\"\r\n placeholder=\"${field.placeholder || ''}\"\r\n value=\"${String(value)}\"\r\n oninput=${(e: Event) => {\r\n const target = e.target as HTMLInputElement;\r\n this.handleChange(field.name, target.value);\r\n }}\r\n onblur=${() => this.handleBlur(field.name)}\r\n />\r\n ${showError ? html`<span class=\"error\">${field.error}</span>` : ''}\r\n </div>\r\n ` as VNode;\r\n }\r\n }\r\n }\r\n\r\n render(): VNode {\r\n const submitButton = this.props.submitButton || {};\r\n\r\n // Render all fields into an array first\r\n const fieldNodes = this.fields.map((field: FormField) => this.renderField(field));\r\n\r\n return html`\r\n <form\r\n class=\"smart-form ${this.props.className || ''}\"\r\n onsubmit=${(e: Event) => this.handleSubmit(e)}\r\n >\r\n ${this.submitError ? html`\r\n <div class=\"alert alert-error\">${this.submitError}</div>\r\n ` : ''}\r\n\r\n ${this.submitSuccess ? html`\r\n <div class=\"alert alert-success\">Submitted successfully!</div>\r\n ` : ''}\r\n\r\n ${fieldNodes}\r\n\r\n <button\r\n type=\"submit\"\r\n class=\"submit-button ${submitButton.className || ''}\"\r\n disabled=${String(this.isSubmitting)}\r\n >\r\n ${this.isSubmitting\r\n ? (submitButton.loadingLabel || 'Submitting...')\r\n : (submitButton.label || 'Submit')\r\n }\r\n </button>\r\n </form>\r\n ` as VNode;\r\n }\r\n\r\n styles(): string {\r\n return css`\r\n .smart-form {\r\n max-width: 100%;\r\n }\r\n .form-field {\r\n margin-bottom: 1rem;\r\n }\r\n .form-field label {\r\n display: block;\r\n margin-bottom: 0.5rem;\r\n font-weight: 500;\r\n }\r\n .form-field input,\r\n .form-field textarea,\r\n .form-field select {\r\n width: 100%;\r\n padding: 0.5rem;\r\n border: 1px solid #d1d5db;\r\n border-radius: 0.375rem;\r\n font-size: 1rem;\r\n }\r\n .form-field input:focus,\r\n .form-field textarea:focus,\r\n .form-field select:focus {\r\n outline: none;\r\n border-color: #3b82f6;\r\n box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\r\n }\r\n .form-field .error {\r\n display: block;\r\n margin-top: 0.25rem;\r\n color: #ef4444;\r\n font-size: 0.875rem;\r\n }\r\n .form-field-checkbox label {\r\n display: flex;\r\n align-items: center;\r\n gap: 0.5rem;\r\n }\r\n .form-field-checkbox input[type=\"checkbox\"] {\r\n width: auto;\r\n }\r\n .submit-button {\r\n width: 100%;\r\n padding: 0.75rem 1rem;\r\n background: #3b82f6;\r\n color: white;\r\n border: none;\r\n border-radius: 0.375rem;\r\n font-size: 1rem;\r\n font-weight: 500;\r\n cursor: pointer;\r\n transition: background 0.2s;\r\n }\r\n .submit-button:hover:not(:disabled) {\r\n background: #2563eb;\r\n }\r\n .submit-button:disabled {\r\n opacity: 0.6;\r\n cursor: not-allowed;\r\n }\r\n .alert {\r\n padding: 0.75rem;\r\n border-radius: 0.375rem;\r\n margin-bottom: 1rem;\r\n }\r\n .alert-error {\r\n background: #fee2e2;\r\n color: #dc2626;\r\n }\r\n .alert-success {\r\n background: #d1fae5;\r\n color: #065f46;\r\n }\r\n `;\r\n }\r\n }\r\n\r\n /**\r\n * SmartForm helper function\r\n */\r\n export function SmartForm(config: FormConfig): VNode {\r\n const form = new SmartFormComponent(config);\r\n return form.render();\r\n }\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝","// src/mod/help.ts\r\n//\r\n// Made with ❤️ by Maysara.\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ PACK ════════════════════════════════════════╗\r\n\r\n import type { ClassValue } from '../types';\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ CORE ════════════════════════════════════════╗\r\n\r\n /**\r\n * Debounce function\r\n * Delays function execution until after wait time\r\n */\r\n export function debounce<T extends (...args: never[]) => unknown>(\r\n fn: T,\r\n delay: number\r\n ): (...args: Parameters<T>) => void {\r\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\r\n\r\n return (...args: Parameters<T>): void => {\r\n if (timeoutId !== null) {\r\n clearTimeout(timeoutId);\r\n }\r\n\r\n timeoutId = setTimeout(() => {\r\n timeoutId = null;\r\n fn(...args);\r\n }, delay);\r\n };\r\n }\r\n\r\n /**\r\n * Throttle function\r\n * Limits function execution to once per time period\r\n */\r\n export function throttle<T extends (...args: never[]) => unknown>(\r\n fn: T,\r\n delay: number\r\n ): (...args: Parameters<T>) => void {\r\n let lastCall = 0;\r\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\r\n\r\n return (...args: Parameters<T>): void => {\r\n const now = Date.now();\r\n const timeSinceLastCall = now - lastCall;\r\n\r\n if (timeSinceLastCall >= delay) {\r\n lastCall = now;\r\n fn(...args);\r\n } else if (!timeoutId) {\r\n // Schedule execution at the end of the throttle period\r\n timeoutId = setTimeout(() => {\r\n lastCall = Date.now();\r\n timeoutId = null;\r\n fn(...args);\r\n }, delay - timeSinceLastCall);\r\n }\r\n };\r\n }\r\n\r\n /**\r\n * Class names utility\r\n * Combines class names conditionally\r\n */\r\n export function classNames(...classes: ClassValue[]): string {\r\n const result: string[] = [];\r\n\r\n for (const cls of classes) {\r\n if (!cls) continue;\r\n\r\n if (typeof cls === 'string') {\r\n result.push(cls);\r\n } else if (typeof cls === 'object') {\r\n for (const [key, value] of Object.entries(cls)) {\r\n if (value) {\r\n result.push(key);\r\n }\r\n }\r\n }\r\n }\r\n\r\n return result.join(' ');\r\n }\r\n\r\n /**\r\n * Format date\r\n * Simple date formatting utility with validation\r\n */\r\n export function formatDate(date: Date | string | number, format: string = 'YYYY-MM-DD'): string {\r\n const d = date instanceof Date ? date : new Date(date);\r\n\r\n // Validate date\r\n if (isNaN(d.getTime())) {\r\n throw new Error('Invalid date provided to formatDate');\r\n }\r\n\r\n const year = d.getFullYear();\r\n const month = String(d.getMonth() + 1).padStart(2, '0');\r\n const day = String(d.getDate()).padStart(2, '0');\r\n const hours = String(d.getHours()).padStart(2, '0');\r\n const minutes = String(d.getMinutes()).padStart(2, '0');\r\n const seconds = String(d.getSeconds()).padStart(2, '0');\r\n\r\n return format\r\n .replace('YYYY', String(year))\r\n .replace('MM', month)\r\n .replace('DD', day)\r\n .replace('HH', hours)\r\n .replace('mm', minutes)\r\n .replace('ss', seconds);\r\n }\r\n\r\n /**\r\n * Deep clone object\r\n * Handles Date, Array, and nested objects\r\n */\r\n export function deepClone<T>(obj: T): T {\r\n if (obj === null || typeof obj !== 'object') {\r\n return obj;\r\n }\r\n\r\n if (obj instanceof Date) {\r\n return new Date(obj.getTime()) as T;\r\n }\r\n\r\n if (Array.isArray(obj)) {\r\n return obj.map(item => deepClone(item)) as T;\r\n }\r\n\r\n if (obj instanceof RegExp) {\r\n return new RegExp(obj.source, obj.flags) as T;\r\n }\r\n\r\n if (obj instanceof Map) {\r\n const clonedMap = new Map();\r\n obj.forEach((value, key) => {\r\n clonedMap.set(deepClone(key), deepClone(value));\r\n });\r\n return clonedMap as T;\r\n }\r\n\r\n if (obj instanceof Set) {\r\n const clonedSet = new Set();\r\n obj.forEach(value => {\r\n clonedSet.add(deepClone(value));\r\n });\r\n return clonedSet as T;\r\n }\r\n\r\n if (Object.prototype.toString.call(obj) === '[object Object]') {\r\n const cloned: Record<string, unknown> = {};\r\n for (const key in obj) {\r\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\r\n cloned[key] = deepClone((obj as Record<string, unknown>)[key]);\r\n }\r\n }\r\n return cloned as T;\r\n }\r\n\r\n return obj;\r\n }\r\n\r\n /**\r\n * Merge objects deeply\r\n * Properly handles nested objects and arrays\r\n */\r\n export function deepMerge<T extends Record<string, unknown>>(\r\n target: T,\r\n ...sources: Partial<T>[]\r\n ): T {\r\n if (!sources.length) return target;\r\n\r\n const source = sources.shift();\r\n if (!source) return target;\r\n\r\n if (isObject(target) && isObject(source)) {\r\n for (const key in source) {\r\n if (Object.prototype.hasOwnProperty.call(source, key)) {\r\n const sourceValue = source[key];\r\n const targetValue = target[key];\r\n\r\n if (sourceValue !== undefined) {\r\n if (isObject(sourceValue) && !Array.isArray(sourceValue)) {\r\n if (!targetValue || !isObject(targetValue)) {\r\n target[key] = {} as T[Extract<keyof T, string>];\r\n }\r\n deepMerge(target[key] as Record<string, unknown>, sourceValue as Record<string, unknown>);\r\n } else {\r\n target[key] = sourceValue as T[Extract<keyof T, string>];\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n return deepMerge(target, ...sources);\r\n }\r\n\r\n /**\r\n * Helper to check if value is a plain object\r\n */\r\n function isObject(item: unknown): item is Record<string, unknown> {\r\n return item !== null && typeof item === 'object' && !Array.isArray(item);\r\n }\r\n\r\n /**\r\n * Generate unique ID with better entropy\r\n */\r\n let uniqueIdCounter = 0;\r\n\r\n export function uniqueId(prefix: string = 'id'): string {\r\n const timestamp = Date.now().toString(36);\r\n const randomPart = Math.random().toString(36).substring(2, 11);\r\n uniqueIdCounter = (uniqueIdCounter || 0) + 1;\r\n const counter = uniqueIdCounter.toString(36);\r\n return `${prefix}_${timestamp}_${randomPart}_${counter}`;\r\n }\r\n\r\n /**\r\n * Sleep/delay utility\r\n */\r\n export function sleep(ms: number): Promise<void> {\r\n if (ms < 0) {\r\n throw new Error('Sleep duration must be non-negative');\r\n }\r\n return new Promise(resolve => setTimeout(resolve, ms));\r\n }\r\n\r\n /**\r\n * Check if value is empty\r\n */\r\n export function isEmpty(value: unknown): boolean {\r\n if (value == null) return true;\r\n if (typeof value === 'string') return value.trim().length === 0;\r\n if (Array.isArray(value)) return value.length === 0;\r\n if (value instanceof Map || value instanceof Set) return value.size === 0;\r\n if (typeof value === 'object') return Object.keys(value).length === 0;\r\n return false;\r\n }\r\n\r\n /**\r\n * Capitalize first letter\r\n */\r\n export function capitalize(str: string): string {\r\n if (!str) return '';\r\n return str.charAt(0).toUpperCase() + str.slice(1);\r\n }\r\n\r\n /**\r\n * Convert to kebab-case\r\n */\r\n export function kebabCase(str: string): string {\r\n if (!str) return '';\r\n return str\r\n .replace(/([a-z])([A-Z])/g, '$1-$2')\r\n .replace(/[\\s_]+/g, '-')\r\n .toLowerCase();\r\n }\r\n\r\n /**\r\n * Convert to camelCase\r\n */\r\n export function camelCase(str: string): string {\r\n if (!str) return '';\r\n return str\r\n .replace(/[-_\\s]+(.)?/g, (_, char: string) => (char ? char.toUpperCase() : ''))\r\n .replace(/^[A-Z]/, char => char.toLowerCase());\r\n }\r\n\r\n /**\r\n * Convert to PascalCase\r\n */\r\n export function pascalCase(str: string): string {\r\n if (!str) return '';\r\n const camel = camelCase(str);\r\n return camel.charAt(0).toUpperCase() + camel.slice(1);\r\n }\r\n\r\n /**\r\n * Truncate string\r\n */\r\n export function truncate(str: string, length: number, suffix: string = '...'): string {\r\n if (!str || str.length <= length) return str;\r\n return str.substring(0, length - suffix.length) + suffix;\r\n }\r\n\r\n /**\r\n * Parse query string\r\n */\r\n export function parseQuery(queryString: string): Record<string, string | string[]> {\r\n const query: Record<string, string | string[]> = {};\r\n const cleaned = queryString.replace(/^\\?/, '');\r\n\r\n if (!cleaned) return query;\r\n\r\n const pairs = cleaned.split('&');\r\n\r\n for (const pair of pairs) {\r\n const [key, value] = pair.split('=').map(decodeURIComponent);\r\n if (!key) continue;\r\n\r\n const decodedValue = value || '';\r\n\r\n // Handle array parameters (key[]=value)\r\n if (key.endsWith('[]')) {\r\n const actualKey = key.slice(0, -2);\r\n if (!query[actualKey]) {\r\n query[actualKey] = [];\r\n }\r\n (query[actualKey] as string[]).push(decodedValue);\r\n } else {\r\n query[key] = decodedValue;\r\n }\r\n }\r\n\r\n return query;\r\n }\r\n\r\n /**\r\n * Stringify object to query string\r\n */\r\n export function stringifyQuery(obj: Record<string, unknown>): string {\r\n const pairs: string[] = [];\r\n\r\n for (const [key, value] of Object.entries(obj)) {\r\n if (value == null) continue;\r\n\r\n if (Array.isArray(value)) {\r\n // Handle arrays\r\n for (const item of value) {\r\n if (item != null) {\r\n pairs.push(`${encodeURIComponent(key)}[]=${encodeURIComponent(String(item))}`);\r\n }\r\n }\r\n } else {\r\n pairs.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`);\r\n }\r\n }\r\n\r\n return pairs.length > 0 ? `?${pairs.join('&')}` : '';\r\n }\r\n\r\n /**\r\n * Clamp a number between min and max\r\n */\r\n export function clamp(value: number, min: number, max: number): number {\r\n return Math.min(Math.max(value, min), max);\r\n }\r\n\r\n /**\r\n * Check if code is running in browser\r\n */\r\n export function isBrowser(): boolean {\r\n return typeof window !== 'undefined' && typeof document !== 'undefined';\r\n }\r\n\r\n /**\r\n * Safe JSON parse with fallback\r\n */\r\n export function safeJsonParse<T = unknown>(json: string, fallback: T): T {\r\n try {\r\n return JSON.parse(json) as T;\r\n } catch {\r\n return fallback;\r\n }\r\n }\r\n\r\n /**\r\n * Export all utilities\r\n */\r\n export const utils = {\r\n debounce,\r\n throttle,\r\n classNames,\r\n formatDate,\r\n deepClone,\r\n deepMerge,\r\n uniqueId,\r\n sleep,\r\n isEmpty,\r\n capitalize,\r\n kebabCase,\r\n camelCase,\r\n pascalCase,\r\n truncate,\r\n parseQuery,\r\n stringifyQuery,\r\n clamp,\r\n isBrowser,\r\n safeJsonParse,\r\n };\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝","// src/mod/core/context.ts\r\n//\r\n// Made with ❤️ by Maysara.\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ PACK ════════════════════════════════════════╗\r\n\r\n import { Component } from './component';\r\n import { html, type VNode } from '@je-es/vdom';\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ TYPE ════════════════════════════════════════╗\r\n\r\n export type ContextSubscriber<T> = (value: T) => void;\r\n\r\n export interface ProviderProps<T> {\r\n context: Context<T>;\r\n value: T;\r\n children: VNode | VNode[];\r\n }\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ CORE ════════════════════════════════════════╗\r\n\r\n /**\r\n * Context class for sharing data across component tree\r\n */\r\n export class Context<T = unknown> {\r\n private _value: T;\r\n private _subscribers = new Set<ContextSubscriber<T>>();\r\n private _defaultValue: T;\r\n\r\n constructor(defaultValue: T) {\r\n this._value = defaultValue;\r\n this._defaultValue = defaultValue;\r\n }\r\n\r\n get value(): T {\r\n return this._value;\r\n }\r\n\r\n set value(newValue: T) {\r\n if (this._value !== newValue) {\r\n this._value = newValue;\r\n this._notify();\r\n }\r\n }\r\n\r\n subscribe(subscriber: ContextSubscriber<T>): () => void {\r\n this._subscribers.add(subscriber);\r\n\r\n // Immediately call with current value (wrapped in try-catch)\r\n try {\r\n subscriber(this._value);\r\n } catch (error) {\r\n console.error('Context subscriber error:', error);\r\n // Don't throw - the test expects this to not throw\r\n }\r\n\r\n // Return unsubscribe function\r\n return () => {\r\n this._subscribers.delete(subscriber);\r\n };\r\n }\r\n\r\n reset(): void {\r\n this.value = this._defaultValue;\r\n }\r\n\r\n update(updater: (prev: T) => T): void {\r\n this.value = updater(this._value);\r\n }\r\n\r\n private _notify(): void {\r\n for (const subscriber of this._subscribers) {\r\n try {\r\n subscriber(this._value);\r\n } catch (error) {\r\n console.error('Context subscriber error:', error);\r\n // Continue notifying other subscribers\r\n }\r\n }\r\n }\r\n\r\n get subscriberCount(): number {\r\n return this._subscribers.size;\r\n }\r\n }\r\n\r\n /**\r\n * Create a new context\r\n */\r\n export function createContext<T>(defaultValue: T): Context<T> {\r\n return new Context(defaultValue);\r\n }\r\n\r\n export class Provider<T> extends Component<ProviderProps<T>> {\r\n onMount(): void {\r\n // Update context value\r\n this.props.context.value = this.props.value;\r\n }\r\n\r\n onUpdate(): void {\r\n // Update context when props change\r\n this.props.context.value = this.props.value;\r\n }\r\n\r\n onUnmount(): void {\r\n // Optionally reset context on unmount\r\n // this.props.context.reset();\r\n }\r\n\r\n render(): VNode {\r\n const children = Array.isArray(this.props.children)\r\n ? this.props.children\r\n : [this.props.children];\r\n\r\n return html`\r\n <div class=\"context-provider\" style=\"display: contents;\">\r\n ${children}\r\n </div>\r\n `;\r\n }\r\n }\r\n\r\n /**\r\n * Hook-like function to use context in components\r\n * Call this in your component to get context value\r\n */\r\n export function useContext<T>(context: Context<T>, component: Component): T {\r\n // Subscribe to context changes\r\n const unsubscribe = context.subscribe(() => {\r\n if (component.isMounted) {\r\n component.update();\r\n }\r\n });\r\n\r\n // Cleanup on unmount\r\n component.subscribe(() => unsubscribe);\r\n\r\n return context.value;\r\n }\r\n\r\n /**\r\n * Combined context for complex state management\r\n */\r\n export class CombinedContext<T extends Record<string, unknown>> {\r\n private contexts = new Map<keyof T, Context<T[keyof T]>>();\r\n\r\n constructor(initialValues: T) {\r\n for (const [key, value] of Object.entries(initialValues)) {\r\n this.contexts.set(key as keyof T, new Context(value) as unknown as Context<T[keyof T]>);\r\n }\r\n }\r\n\r\n get<K extends keyof T>(key: K): Context<T[K]> {\r\n const context = this.contexts.get(key);\r\n if (!context) {\r\n throw new Error(`Context key \"${String(key)}\" not found`);\r\n }\r\n return context as unknown as Context<T[K]>;\r\n }\r\n\r\n set<K extends keyof T>(key: K, value: T[K]): void {\r\n const context = this.contexts.get(key);\r\n if (context) {\r\n (context as unknown as Context<T[K]>).value = value;\r\n }\r\n }\r\n\r\n subscribe<K extends keyof T>(\r\n key: K,\r\n subscriber: ContextSubscriber<T[K]>\r\n ): () => void {\r\n const context = this.contexts.get(key);\r\n if (!context) {\r\n throw new Error(`Context key \"${String(key)}\" not found`);\r\n }\r\n return (context as unknown as Context<T[K]>).subscribe(subscriber);\r\n }\r\n\r\n reset(): void {\r\n for (const context of this.contexts.values()) {\r\n context.reset();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Create combined context\r\n */\r\n export function createCombinedContext<T extends Record<string, unknown>>(\r\n initialValues: T\r\n ): CombinedContext<T> {\r\n return new CombinedContext(initialValues);\r\n }\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝\r\n","// src/mod/core/hooks.ts\r\n//\r\n// Made with ❤️ by Maysara.\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ PACK ════════════════════════════════════════╗\r\n\r\n import { Component } from './component';\r\n import type { VNode } from '../../types';\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ TYPE ════════════════════════════════════════╗\r\n\r\n interface HookState {\r\n value: unknown;\r\n deps?: unknown[];\r\n }\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ INIT ════════════════════════════════════════╗\r\n\r\n let currentComponent: Component | null = null;\r\n let currentHookIndex: number = 0;\r\n const hookStates = new WeakMap<Component, HookState[]>();\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ CORE ════════════════════════════════════════╗\r\n\r\n /**\r\n * Set current component context for hooks\r\n */\r\n export function setHookContext(component: Component): void {\r\n currentComponent = component;\r\n currentHookIndex = 0;\r\n }\r\n\r\n /**\r\n * Clear hook context\r\n */\r\n export function clearHookContext(): void {\r\n currentComponent = null;\r\n currentHookIndex = 0;\r\n }\r\n\r\n /**\r\n * Get or create hook states for component\r\n */\r\n function getHookStates(component: Component): HookState[] {\r\n if (!hookStates.has(component)) {\r\n hookStates.set(component, []);\r\n }\r\n return hookStates.get(component)!;\r\n }\r\n\r\n // ─── Core Hooks ───\r\n\r\n /**\r\n * useState hook - manages component state\r\n */\r\n export function useState<T>(initialValue: T | (() => T)): [T, (newValue: T | ((prev: T) => T)) => void] {\r\n if (!currentComponent) {\r\n throw new Error('useState must be called inside a component');\r\n }\r\n\r\n const component = currentComponent;\r\n const hookIndex = currentHookIndex++;\r\n const states = getHookStates(component);\r\n\r\n // Initialize state if first render\r\n if (states[hookIndex] === undefined) {\r\n states[hookIndex] = {\r\n value: typeof initialValue === 'function' ? (initialValue as () => T)() : initialValue\r\n };\r\n }\r\n\r\n const setState = (newValue: T | ((prev: T) => T)) => {\r\n const state = states[hookIndex];\r\n const nextValue = typeof newValue === 'function'\r\n ? (newValue as (prev: T) => T)(state.value as T)\r\n : newValue;\r\n\r\n if (state.value !== nextValue) {\r\n state.value = nextValue;\r\n component.update();\r\n }\r\n };\r\n\r\n return [states[hookIndex].value as T, setState];\r\n }\r\n\r\n /**\r\n * useEffect hook - side effects\r\n */\r\n export function useEffect(\r\n effect: () => void | (() => void),\r\n deps?: unknown[]\r\n ): void {\r\n if (!currentComponent) {\r\n throw new Error('useEffect must be called inside a component');\r\n }\r\n\r\n const component = currentComponent;\r\n const hookIndex = currentHookIndex++;\r\n const states = getHookStates(component);\r\n\r\n const prevState = states[hookIndex];\r\n const hasChanged = !prevState || !deps || !areDepsEqual(prevState.deps, deps);\r\n\r\n if (hasChanged) {\r\n // Cleanup previous effect\r\n if (prevState?.value && typeof prevState.value === 'function') {\r\n try {\r\n (prevState.value as () => void)();\r\n } catch (error) {\r\n console.error('Error in effect cleanup:', error);\r\n }\r\n }\r\n\r\n // Run new effect after a microtask (so it runs after render completes)\r\n Promise.resolve().then(() => {\r\n try {\r\n const cleanup = effect();\r\n\r\n // Store cleanup and deps\r\n states[hookIndex] = {\r\n value: cleanup,\r\n deps: deps ? [...deps] : undefined\r\n };\r\n } catch (error) {\r\n console.error('Error in effect:', error);\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * useMemo hook - memoize expensive computations\r\n */\r\n export function useMemo<T>(\r\n factory: () => T,\r\n deps: unknown[]\r\n ): T {\r\n if (!currentComponent) {\r\n throw new Error('useMemo must be called inside a component');\r\n }\r\n\r\n const hookIndex = currentHookIndex++;\r\n const states = getHookStates(currentComponent);\r\n\r\n const prevState = states[hookIndex];\r\n const hasChanged = !prevState || !areDepsEqual(prevState.deps, deps);\r\n\r\n if (hasChanged) {\r\n states[hookIndex] = {\r\n value: factory(),\r\n deps: [...deps]\r\n };\r\n }\r\n\r\n return states[hookIndex].value as T;\r\n }\r\n\r\n /**\r\n * useCallback hook - memoize callbacks\r\n */\r\n export function useCallback<T extends (...args: unknown[]) => unknown>(\r\n callback: T,\r\n deps: unknown[]\r\n ): T {\r\n return useMemo(() => callback, deps);\r\n }\r\n\r\n /**\r\n * useRef hook - persistent value across renders\r\n */\r\n export function useRef<T>(initialValue: T): { current: T } {\r\n if (!currentComponent) {\r\n throw new Error('useRef must be called inside a component');\r\n }\r\n\r\n const hookIndex = currentHookIndex++;\r\n const states = getHookStates(currentComponent);\r\n\r\n if (states[hookIndex] === undefined) {\r\n states[hookIndex] = {\r\n value: { current: initialValue }\r\n };\r\n }\r\n\r\n return states[hookIndex].value as { current: T };\r\n }\r\n\r\n /**\r\n * useReducer hook - complex state management\r\n */\r\n export function useReducer<S, A>(\r\n reducer: (state: S, action: A) => S,\r\n initialState: S\r\n ): [S, (action: A) => void] {\r\n const [state, setState] = useState(initialState);\r\n\r\n const dispatch = useCallback((action: unknown) => {\r\n setState(prevState => reducer(prevState, action as A));\r\n }, [reducer]) as (action: A) => void;\r\n\r\n return [state, dispatch];\r\n }\r\n\r\n // ─── Custom Hooks ───\r\n\r\n /**\r\n * useLocalStorage hook - sync state with localStorage\r\n */\r\n export function useLocalStorage<T>(\r\n key: string,\r\n initialValue: T\r\n ): [T, (value: T | ((prev: T) => T)) => void] {\r\n // Initialize from localStorage\r\n const [storedValue, setStoredValue] = useState<T>(() => {\r\n try {\r\n const item = window.localStorage.getItem(key);\r\n return item ? JSON.parse(item) as T : initialValue;\r\n } catch (error) {\r\n console.error('Error loading from localStorage:', error);\r\n return initialValue;\r\n }\r\n });\r\n\r\n // Create setValue wrapper (recreated each render, but that's okay)\r\n const setValue = (newValue: T | ((prev: T) => T)) => {\r\n setStoredValue((prevValue: T) => {\r\n const valueToStore = newValue instanceof Function\r\n ? newValue(prevValue)\r\n : newValue;\r\n\r\n // Update localStorage synchronously\r\n try {\r\n window.localStorage.setItem(key, JSON.stringify(valueToStore));\r\n } catch (error) {\r\n console.error('Error saving to localStorage:', error);\r\n }\r\n\r\n return valueToStore;\r\n });\r\n };\r\n\r\n return [storedValue, setValue];\r\n }\r\n\r\n /**\r\n * useDebounce hook - debounce value changes\r\n */\r\n export function useDebounce<T>(value: T, delay: number): T {\r\n const [debouncedValue, setDebouncedValue] = useState(value);\r\n\r\n useEffect(() => {\r\n // Set up the timeout\r\n const handler = setTimeout(() => {\r\n setDebouncedValue(value);\r\n }, delay);\r\n\r\n // Cleanup function that clears the timeout\r\n return () => {\r\n clearTimeout(handler);\r\n };\r\n }, [value, delay]);\r\n\r\n return debouncedValue;\r\n }\r\n\r\n /**\r\n * usePrevious hook - get previous value\r\n */\r\n export function usePrevious<T>(value: T): T | undefined {\r\n const ref = useRef<T | undefined>(undefined);\r\n\r\n // Use effect to update the ref after render\r\n useEffect(() => {\r\n ref.current = value;\r\n });\r\n\r\n // Return the previous value (what ref was BEFORE this render)\r\n const prevValue = ref.current;\r\n\r\n return prevValue;\r\n }\r\n\r\n /**\r\n * useToggle hook - boolean toggle\r\n */\r\n export function useToggle(initialValue: boolean = false): [boolean, () => void] {\r\n const [value, setValue] = useState(initialValue);\r\n\r\n const toggle = useCallback(() => {\r\n setValue(v => !v);\r\n }, []);\r\n\r\n return [value, toggle];\r\n }\r\n\r\n /**\r\n * useInterval hook - setInterval with cleanup\r\n */\r\n export function useInterval(callback: () => void, delay: number | null): void {\r\n const savedCallback = useRef(callback);\r\n\r\n useEffect(() => {\r\n savedCallback.current = callback;\r\n }, [callback]);\r\n\r\n useEffect(() => {\r\n if (delay === null) return;\r\n\r\n const id = setInterval(() => savedCallback.current(), delay);\r\n\r\n return () => clearInterval(id);\r\n }, [delay]);\r\n }\r\n\r\n /**\r\n * useFetch hook - data fetching\r\n */\r\n export function useFetch<T>(\r\n url: string,\r\n options?: RequestInit\r\n ): {\r\n data: T | null;\r\n loading: boolean;\r\n error: Error | null;\r\n refetch: () => void;\r\n } {\r\n const [data, setData] = useState<T | null>(null);\r\n const [loading, setLoading] = useState(true);\r\n const [error, setError] = useState<Error | null>(null);\r\n\r\n const fetchData = useCallback(async () => {\r\n setLoading(true);\r\n setError(null);\r\n\r\n try {\r\n const response = await fetch(url, options);\r\n if (!response.ok) {\r\n throw new Error(`HTTP error! status: ${response.status}`);\r\n }\r\n const json = await response.json() as T;\r\n setData(json);\r\n } catch (e) {\r\n setError(e as Error);\r\n } finally {\r\n setLoading(false);\r\n }\r\n }, [url]);\r\n\r\n useEffect(() => {\r\n fetchData();\r\n }, [fetchData]);\r\n\r\n return { data, loading, error, refetch: fetchData };\r\n }\r\n\r\n /**\r\n * useWindowSize hook - track window dimensions\r\n */\r\n export function useWindowSize(): { width: number; height: number } {\r\n const [size, setSize] = useState({\r\n width: window.innerWidth,\r\n height: window.innerHeight\r\n });\r\n\r\n useEffect(() => {\r\n const handleResize = () => {\r\n setSize({\r\n width: window.innerWidth,\r\n height: window.innerHeight\r\n });\r\n };\r\n\r\n window.addEventListener('resize', handleResize);\r\n return () => window.removeEventListener('resize', handleResize);\r\n }, []);\r\n\r\n return size;\r\n }\r\n\r\n /**\r\n * useEventListener hook - add event listener\r\n */\r\n export function useEventListener<K extends keyof WindowEventMap>(\r\n eventName: K,\r\n handler: (event: WindowEventMap[K]) => void,\r\n element: HTMLElement | Window = window\r\n ): void {\r\n const savedHandler = useRef(handler);\r\n\r\n useEffect(() => {\r\n savedHandler.current = handler;\r\n }, [handler]);\r\n\r\n useEffect(() => {\r\n const isSupported = element && 'addEventListener' in element;\r\n if (!isSupported) return;\r\n\r\n const eventListener = (event: Event) => {\r\n savedHandler.current(event as WindowEventMap[K]);\r\n };\r\n\r\n element.addEventListener(eventName, eventListener);\r\n\r\n return () => {\r\n element.removeEventListener(eventName, eventListener);\r\n };\r\n }, [eventName, element]);\r\n }\r\n\r\n /**\r\n * Create a functional component with hooks\r\n * Returns a component class that can be instantiated\r\n */\r\n export function createFunctionalComponent<P extends Record<string, unknown> = Record<string, unknown>>(\r\n fn: (props: P) => VNode,\r\n displayName?: string\r\n ): new (props?: P) => Component<P> {\r\n class FunctionalComponent extends Component<P> {\r\n render(): VNode {\r\n setHookContext(this);\r\n try {\r\n return fn(this.props) as VNode;\r\n } finally {\r\n clearHookContext();\r\n }\r\n }\r\n }\r\n\r\n if (displayName) {\r\n Object.defineProperty(FunctionalComponent, 'name', { value: displayName });\r\n }\r\n\r\n return FunctionalComponent as new (props?: P) => Component<P>;\r\n }\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ HELP ════════════════════════════════════════╗\r\n\r\n function areDepsEqual(prevDeps: unknown[] | undefined, nextDeps: unknown[]): boolean {\r\n if (!prevDeps || prevDeps.length !== nextDeps.length) {\r\n return false;\r\n }\r\n\r\n for (let i = 0; i < prevDeps.length; i++) {\r\n if (prevDeps[i] !== nextDeps[i]) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝\r\n","// src/main.ts\r\n//\r\n// Made with ❤️ by Maysara.\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ CORE ════════════════════════════════════════╗\r\n\r\n // Core exports\r\n export { Component } from './mod/core/component';\r\n export { client } from './mod/core/client';\r\n export { router, Router } from './mod/core/router';\r\n export { Store, createStore, createComputedStore, connect } from './mod/core/store';\r\n export { api, http, configureApi, getApiConfig, resetApiConfig, type ApiError } from '@je-es/capi';\r\n export { StyleManager, css } from './mod/core/styles';\r\n export { createElement, html, patch, createDOMElement } from '@je-es/vdom';\r\n\r\n // Decorators\r\n export { state, computed, watch } from './mod/core/decorators';\r\n\r\n // Components\r\n export { SmartFormComponent, SmartForm, type FormConfig } from './mod/components/smart-form';\r\n\r\n // Utilities\r\n export { utils, debounce, throttle, classNames, formatDate, deepClone, deepMerge, uniqueId, sleep, isEmpty, capitalize, kebabCase, camelCase, pascalCase, truncate, parseQuery, stringifyQuery, clamp, isBrowser, safeJsonParse } from './mod/help';\r\n\r\n // Context API\r\n export {\r\n Context,\r\n createContext,\r\n Provider,\r\n useContext,\r\n CombinedContext,\r\n createCombinedContext\r\n } from './mod/core/context';\r\n\r\n // Hooks System\r\n export {\r\n // Core hooks\r\n useState,\r\n useEffect,\r\n useMemo,\r\n useCallback,\r\n useRef,\r\n useReducer,\r\n\r\n // Custom hooks\r\n useLocalStorage,\r\n useDebounce,\r\n usePrevious,\r\n useToggle,\r\n useInterval,\r\n useFetch,\r\n useWindowSize,\r\n useEventListener,\r\n\r\n // Functional components\r\n createFunctionalComponent,\r\n setHookContext,\r\n clearHookContext\r\n } from './mod/core/hooks';\r\n\r\n // VDOM Types\r\n export type { VNode, VNodeProps, ComponentConstructor, VNodeChild } from './types';\r\n\r\n // Client Types\r\n export type { ClientConfig, BuildConfig, AppConfig, StateConfig, FormsConfig, RouterConfig, ApiConfig, DevToolsConfig } from './types';\r\n\r\n // Router Types\r\n export type { Route, RouteConfig, NavigationGuard } from './types';\r\n\r\n // API Types\r\n export type { ApiOptions, ApiResponse, HttpMethod, ApiInterceptors } from './types';\r\n\r\n // Store Types\r\n export type { StoreOptions, StoreSubscriber, StoreMiddleware } from './types';\r\n\r\n // Form Types\r\n export type { FormFieldConfig, ValidationRule, FormFieldOption, FormSubmitHandler } from './types';\r\n\r\n // Scheduler\r\n export { scheduler } from './mod/core/scheduler';\r\n\r\n import { setConfig } from '@je-es/vdom';\r\n\r\n setConfig({\r\n devMode: false, // Enable warnings\r\n sanitizeHTML: true, // XSS protection\r\n // onError: (err) => { // Custom error handler\r\n // console.error('VDOM Error:', err);\r\n // }\r\n });\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝"]}
1
+ {"version":3,"sources":["../src/mod/core/styles.ts","../src/mod/core/scheduler.ts","../src/mod/core/component.ts","../src/mod/core/router.ts","../src/mod/core/client.ts","../src/mod/core/store.ts","../src/mod/core/decorators.ts","../src/mod/components/smart-form.ts","../src/mod/help.ts","../src/mod/core/context.ts","../src/mod/core/hooks.ts","../src/main.ts"],"names":["StyleManager","css","componentName","id","styleElement","scopedCSS","scope","lines","scopedLines","braceCount","line","selector","rest","scopedSelector","element","strings","values","result","i","UpdateScheduler","callback","callbacks","error","scheduler","Component","props","initialState","partialState","prevState","newState","newProps","prevProps","updater","prevIsScheduled","key","container","unsubscribe","name","el","compute","deps","cached","subscription","fn","delay","timeoutId","args","lastCall","now","timeSinceLastCall","newVNode","parent","index","oldVDomNode","newVDomNode","patch","vnode","convertedProps","value","convertedChildren","child","eventName","errorInfo","prevDeps","nextDeps","dep","propertyName","newValue","oldValue","watchers","methodName","Router","routes","mode","base","scrollBehavior","path","state","delta","hook","handler","exact","createElement","r","params","route","matchedRoute","e","link","href","to","from","guard","resolve","nextPath","ComponentClass","ComponentCtor","component","proto","exp","errorMessage","normalizedPath","cleanPath","pattern","paramNames","regexPattern","_","paramName","regex","match","search","query","pair","router","client","config","_config","stylesDir","outputPath","outputDir","dirname","outputFile","existsSync","mkdirSync","scssFiles","combinedCSS","file","j","relative","sassError","fullOutputPath","join","writeFileSync","f","dir","files","entries","readdirSync","entry","fullPath","stat","statSync","extname","entryDir","watch","eventType","filename","capiConfig","configureApi","Store","options","stored","update","action","middleware","listener","prevValue","subscriber","updates","prevNotify","shouldNotify","stateCopy","createStore","createComputedStore","stores","computer","computedStore","s","store","connect","mapStateToProps","target","context","propertyKey","instance","initialValue","hiddenKey","inst","targetConstructor","initKey","computed","targetOrGetter","descriptor","ctx","originalGetter","cacheKey","dirtyKey","decorator","targetOrMethod","SmartFormComponent","field","fieldName","validation","stringValue","isValid","event","firstErrorField","response","api","showError","html","optionNodes","opt","submitButton","fieldNodes","__decorateClass","SmartForm","debounce","throttle","classNames","classes","cls","formatDate","date","format","d","year","month","day","hours","minutes","seconds","deepClone","obj","item","clonedMap","clonedSet","cloned","deepMerge","sources","source","isObject","sourceValue","targetValue","uniqueIdCounter","uniqueId","prefix","timestamp","randomPart","counter","sleep","ms","isEmpty","capitalize","str","kebabCase","camelCase","char","pascalCase","camel","truncate","length","suffix","parseQuery","queryString","cleaned","pairs","decodedValue","actualKey","stringifyQuery","clamp","min","max","isBrowser","safeJsonParse","json","fallback","utils","Context","defaultValue","createContext","Provider","children","useContext","CombinedContext","initialValues","createCombinedContext","currentComponent","currentHookIndex","hookStates","setHookContext","clearHookContext","getHookStates","useState","hookIndex","states","setState","nextValue","useEffect","effect","areDepsEqual","cleanup","useMemo","factory","useCallback","useRef","useReducer","reducer","dispatch","useLocalStorage","storedValue","setStoredValue","valueToStore","useDebounce","debouncedValue","setDebouncedValue","usePrevious","ref","useToggle","setValue","toggle","v","useInterval","savedCallback","useFetch","url","data","setData","loading","setLoading","setError","fetchData","useWindowSize","size","setSize","handleResize","useEventListener","savedHandler","eventListener","createFunctionalComponent","displayName","FunctionalComponent","setConfig"],"mappings":"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","file":"main.cjs","sourcesContent":["// src/mod/core/styles.ts\r\n//\r\n// Made with ❤️ by Maysara.\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ CORE ════════════════════════════════════════╗\r\n\r\n /**\r\n * Style Manager - handles CSS injection and scoping\r\n */\r\n export class StyleManager {\r\n private static styles = new Map<string, HTMLStyleElement>();\r\n private static scopeCounter = 0;\r\n\r\n /**\r\n * Inject styles into document\r\n */\r\n static inject(css: string, componentName?: string): string {\r\n const id = componentName || `style-${this.scopeCounter++}`;\r\n\r\n if (this.styles.has(id)) {\r\n return id;\r\n }\r\n\r\n const styleElement = document.createElement('style');\r\n styleElement.setAttribute('data-component', id);\r\n\r\n // Scope the CSS\r\n const scopedCSS = this.scopeStyles(css, id);\r\n styleElement.textContent = scopedCSS;\r\n\r\n document.head.appendChild(styleElement);\r\n this.styles.set(id, styleElement);\r\n\r\n return id;\r\n }\r\n\r\n /**\r\n * Remove styles from document\r\n */\r\n static remove(id: string): void {\r\n const styleElement = this.styles.get(id);\r\n if (styleElement && styleElement.parentElement) {\r\n styleElement.parentElement.removeChild(styleElement);\r\n this.styles.delete(id);\r\n }\r\n }\r\n\r\n /**\r\n * Scope CSS selectors\r\n */\r\n private static scopeStyles(css: string, scope: string): string {\r\n // Simple scoping - prefix all selectors with [data-scope=\"id\"]\r\n // This is a basic implementation. A production version would use a proper CSS parser\r\n\r\n const lines = css.split('\\n');\r\n const scopedLines: string[] = [];\r\n let inMediaQuery = false;\r\n let braceCount = 0;\r\n\r\n for (let line of lines) {\r\n line = line.trim();\r\n\r\n // Handle media queries\r\n if (line.startsWith('@media')) {\r\n inMediaQuery = true;\r\n scopedLines.push(line);\r\n continue;\r\n }\r\n\r\n // Count braces\r\n braceCount += (line.match(/{/g) || []).length;\r\n braceCount -= (line.match(/}/g) || []).length;\r\n\r\n if (inMediaQuery && braceCount === 0) {\r\n inMediaQuery = false;\r\n }\r\n\r\n // Scope selectors\r\n if (line.includes('{') && !line.startsWith('@') && !line.startsWith('}')) {\r\n const selector = line.substring(0, line.indexOf('{')).trim();\r\n const rest = line.substring(line.indexOf('{'));\r\n\r\n // Don't scope :root, *, or @-rules\r\n if (selector === ':root' || selector === '*' || line.startsWith('@')) {\r\n scopedLines.push(line);\r\n } else {\r\n const scopedSelector = `[data-scope=\"${scope}\"] ${selector}`;\r\n scopedLines.push(`${scopedSelector} ${rest}`);\r\n }\r\n } else {\r\n scopedLines.push(line);\r\n }\r\n }\r\n\r\n return scopedLines.join('\\n');\r\n }\r\n\r\n /**\r\n * Clear all styles\r\n */\r\n static clear(): void {\r\n for (const [, element] of this.styles) {\r\n if (element.parentElement) {\r\n element.parentElement.removeChild(element);\r\n }\r\n }\r\n this.styles.clear();\r\n }\r\n }\r\n\r\n /**\r\n * CSS template literal tag\r\n * Usage: css`.class { color: red; }`\r\n */\r\n export function css(\r\n strings: TemplateStringsArray,\r\n ...values: unknown[]\r\n ): string {\r\n let result = '';\r\n\r\n for (let i = 0; i < strings.length; i++) {\r\n result += strings[i];\r\n if (i < values.length) {\r\n result += values[i];\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝","// src/mod/core/scheduler.ts\r\n//\r\n// Made with ❤️ by Maysara.\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ TYPE ════════════════════════════════════════╗\r\n\r\n type UpdateCallback = () => void;\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ CORE ════════════════════════════════════════╗\r\n\r\n /**\r\n * Update Scheduler\r\n * Batches multiple state changes into a single render\r\n */\r\n class UpdateScheduler {\r\n private queue = new Set<UpdateCallback>();\r\n private isFlushScheduled = false;\r\n private isFlushing = false;\r\n\r\n /**\r\n * Schedule a component update\r\n */\r\n schedule(callback: UpdateCallback): void {\r\n if (this.isFlushing) {\r\n // If we're currently flushing, schedule for next batch\r\n requestAnimationFrame(() => this.schedule(callback));\r\n return;\r\n }\r\n\r\n this.queue.add(callback);\r\n\r\n if (!this.isFlushScheduled) {\r\n this.isFlushScheduled = true;\r\n\r\n // Use microtask for immediate batching, then RAF for rendering\r\n Promise.resolve().then(() => {\r\n requestAnimationFrame(() => this.flush());\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Force immediate flush (for urgent updates)\r\n */\r\n flushSync(callback: UpdateCallback): void {\r\n callback();\r\n }\r\n\r\n /**\r\n * Flush all pending updates\r\n */\r\n private flush(): void {\r\n if (this.queue.size === 0) {\r\n this.isFlushScheduled = false;\r\n return;\r\n }\r\n\r\n this.isFlushing = true;\r\n this.isFlushScheduled = false;\r\n\r\n const callbacks = Array.from(this.queue);\r\n this.queue.clear();\r\n\r\n // Execute all updates\r\n for (const callback of callbacks) {\r\n try {\r\n callback();\r\n } catch (error) {\r\n console.error('Error during update:', error);\r\n }\r\n }\r\n\r\n this.isFlushing = false;\r\n\r\n // If new updates were scheduled during flush, process them\r\n if (this.queue.size > 0) {\r\n this.schedule(() => {});\r\n }\r\n }\r\n\r\n /**\r\n * Clear all pending updates\r\n */\r\n clear(): void {\r\n this.queue.clear();\r\n this.isFlushScheduled = false;\r\n }\r\n\r\n /**\r\n * Get queue size (for debugging)\r\n */\r\n get size(): number {\r\n return this.queue.size;\r\n }\r\n }\r\n\r\n // Export singleton instance\r\n export const scheduler = new UpdateScheduler();\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝","// src/mod/core/component.ts\r\n//\r\n// Made with ❤️ by Maysara.\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ PACK ════════════════════════════════════════╗\r\n\r\n import type { VNode } from '../../types';\r\n import { patch, VNode as VDomVNode } from '@je-es/vdom';\r\n import { StyleManager } from './styles';\r\n import { scheduler } from './scheduler';\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ TYPE ════════════════════════════════════════╗\r\n\r\n export abstract class Component<P = Record<string, unknown>, S = Record<string, unknown>> {\r\n public props: P;\r\n public state: S;\r\n public _isMounted: boolean = false;\r\n\r\n private _isUnmounting: boolean = false;\r\n private _element: HTMLElement | null = null;\r\n private _vnode: VNode | null = null;\r\n private _styleId: string | null = null;\r\n private _isScheduledForUpdate: boolean = false;\r\n private _updateBatch = new Set<string>();\r\n private _refs = new Map<string, HTMLElement>();\r\n private _subscriptions: (() => void)[] = [];\r\n private _memoCache = new Map<string, { args: unknown[]; result: unknown }>();\r\n\r\n constructor(props?: P, initialState?: S) {\r\n this.props = props || {} as P;\r\n this.state = initialState || {} as S;\r\n }\r\n\r\n // ─── Lifecycle Hooks ───\r\n\r\n onBeforeMount?(): void | Promise<void>;\r\n onMount?(): void | Promise<void>;\r\n onBeforeUpdate?(prevProps: P, prevState: S): void | Promise<void>;\r\n onUpdate?(prevProps: P, prevState: S): void;\r\n onBeforeUnmount?(): void;\r\n onUnmount?(): void;\r\n onError?(error: Error, errorInfo: { componentStack?: string }): void;\r\n onPropsChange?(prevProps: P, newProps: P): void;\r\n onStateChange?(prevState: S, newState: S): void;\r\n shouldUpdate?(prevProps: P, prevState: S): boolean;\r\n\r\n // ─── Abstract Methods ───\r\n\r\n abstract render(): VNode;\r\n styles?(): string;\r\n\r\n // ─── State Management ───\r\n\r\n setState(\r\n partialState: Partial<S> | ((prevState: S) => Partial<S>),\r\n callback?: () => void\r\n ): void {\r\n const prevState = { ...this.state };\r\n const newState = typeof partialState === 'function'\r\n ? partialState(this.state)\r\n : partialState;\r\n\r\n this.state = { ...this.state, ...newState };\r\n\r\n this.onStateChange?.(prevState, this.state);\r\n this.update();\r\n\r\n if (callback) {\r\n scheduler.schedule(callback);\r\n }\r\n }\r\n\r\n setProps(newProps: Partial<P>): void {\r\n const prevProps = { ...this.props };\r\n this.props = { ...this.props, ...newProps };\r\n\r\n this.onPropsChange?.(prevProps, this.props);\r\n this.update();\r\n }\r\n\r\n // ─── Update Scheduling ───\r\n\r\n batchUpdate(updater: () => void): void {\r\n const prevIsScheduled = this._isScheduledForUpdate;\r\n this._isScheduledForUpdate = true;\r\n\r\n try {\r\n updater();\r\n } finally {\r\n if (!prevIsScheduled) {\r\n this._isScheduledForUpdate = false;\r\n this.update();\r\n }\r\n }\r\n }\r\n\r\n update(key?: string): void {\r\n if (!this._isMounted || this._isUnmounting) return;\r\n\r\n if (key) {\r\n this._updateBatch.add(key);\r\n }\r\n\r\n if (this._isScheduledForUpdate) return;\r\n\r\n this._isScheduledForUpdate = true;\r\n scheduler.schedule(() => {\r\n this._isScheduledForUpdate = false;\r\n this._updateBatch.clear();\r\n this._performUpdate();\r\n });\r\n }\r\n\r\n forceUpdate(): void {\r\n if (!this._isMounted || this._isUnmounting) return;\r\n\r\n scheduler.flushSync(() => {\r\n this._performUpdate();\r\n });\r\n }\r\n\r\n // ─── Lifecycle Methods ───\r\n\r\n async mount(container: HTMLElement): Promise<void> {\r\n if (this._isMounted) {\r\n console.warn('Component is already mounted');\r\n return;\r\n }\r\n\r\n try {\r\n await this.onBeforeMount?.();\r\n\r\n this._vnode = this.render();\r\n this._element = this._createElementFromVNode(this._vnode);\r\n\r\n if (this.styles) {\r\n this._styleId = StyleManager.inject(\r\n this.styles(),\r\n this.constructor.name\r\n );\r\n this._element?.setAttribute('data-scope', this.constructor.name);\r\n }\r\n\r\n container.appendChild(this._element);\r\n this._isMounted = true;\r\n\r\n await this.onMount?.();\r\n } catch (error) {\r\n this._handleError(error as Error, { componentStack: this.constructor.name });\r\n }\r\n }\r\n\r\n unmount(): void {\r\n if (!this._isMounted || this._isUnmounting) return;\r\n\r\n this._isUnmounting = true;\r\n\r\n try {\r\n this.onBeforeUnmount?.();\r\n\r\n // Cleanup\r\n this._isScheduledForUpdate = false;\r\n this._updateBatch.clear();\r\n\r\n if (this._styleId) {\r\n StyleManager.remove(this._styleId);\r\n }\r\n\r\n this._subscriptions.forEach(unsubscribe => unsubscribe());\r\n this._subscriptions = [];\r\n\r\n if (this._element?.parentElement) {\r\n this._element.parentElement.removeChild(this._element);\r\n }\r\n\r\n this._isMounted = false;\r\n this._element = null;\r\n this._vnode = null;\r\n\r\n this.onUnmount?.();\r\n\r\n this._refs.clear();\r\n this._memoCache.clear();\r\n } catch (error) {\r\n this._handleError(error as Error, { componentStack: this.constructor.name });\r\n } finally {\r\n this._isUnmounting = false;\r\n }\r\n }\r\n\r\n // ─── Helper Methods ───\r\n\r\n getRef(name: string): HTMLElement | undefined {\r\n return this._refs.get(name);\r\n }\r\n\r\n createRef(name: string): (el: HTMLElement | null) => void {\r\n return (el: HTMLElement | null) => {\r\n if (el) {\r\n this._refs.set(name, el);\r\n } else {\r\n this._refs.delete(name);\r\n }\r\n };\r\n }\r\n\r\n memo<T>(key: string, compute: () => T, deps: unknown[]): T {\r\n const cached = this._memoCache.get(key);\r\n\r\n if (cached && this._areDepsEqual(cached.args, deps)) {\r\n return cached.result as T;\r\n }\r\n\r\n const result = compute();\r\n this._memoCache.set(key, { args: deps, result });\r\n return result;\r\n }\r\n\r\n subscribe(subscription: () => void): void {\r\n this._subscriptions.push(subscription);\r\n }\r\n\r\n debounce<T extends (...args: unknown[]) => unknown>(\r\n fn: T,\r\n delay: number\r\n ): (...args: Parameters<T>) => void {\r\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\r\n\r\n return (...args: Parameters<T>): void => {\r\n if (timeoutId !== null) {\r\n clearTimeout(timeoutId);\r\n }\r\n\r\n timeoutId = setTimeout(() => {\r\n timeoutId = null;\r\n fn.apply(this, args);\r\n }, delay);\r\n };\r\n }\r\n\r\n throttle<T extends (...args: unknown[]) => unknown>(\r\n fn: T,\r\n delay: number\r\n ): (...args: Parameters<T>) => void {\r\n let lastCall = 0;\r\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\r\n\r\n return (...args: Parameters<T>): void => {\r\n const now = Date.now();\r\n const timeSinceLastCall = now - lastCall;\r\n\r\n if (timeSinceLastCall >= delay) {\r\n lastCall = now;\r\n fn.apply(this, args);\r\n } else if (!timeoutId) {\r\n timeoutId = setTimeout(() => {\r\n lastCall = Date.now();\r\n timeoutId = null;\r\n fn.apply(this, args);\r\n }, delay - timeSinceLastCall);\r\n }\r\n };\r\n }\r\n\r\n // ─── Getters ───\r\n\r\n get element(): HTMLElement | null {\r\n return this._element;\r\n }\r\n\r\n get isMounted(): boolean {\r\n return this._isMounted;\r\n }\r\n\r\n get isUnmounting(): boolean {\r\n return this._isUnmounting;\r\n }\r\n\r\n // ─── Private Methods ───\r\n\r\n private async _performUpdate(): Promise<void> {\r\n if (!this._isMounted || !this._element || this._isUnmounting) return;\r\n\r\n const prevProps = { ...this.props };\r\n const prevState = { ...this.state };\r\n\r\n try {\r\n if (this.shouldUpdate && !this.shouldUpdate(prevProps, prevState)) {\r\n return;\r\n }\r\n\r\n await this.onBeforeUpdate?.(prevProps, prevState);\r\n\r\n const newVNode = this.render();\r\n const parent = this._element.parentElement;\r\n\r\n if (this._vnode && parent) {\r\n const index = Array.from(parent.childNodes).indexOf(this._element);\r\n // Convert to VDom-compatible VNode\r\n const oldVDomNode = this._convertToVDomNode(this._vnode);\r\n const newVDomNode = this._convertToVDomNode(newVNode);\r\n patch(parent, oldVDomNode, newVDomNode, index);\r\n this._element = parent.childNodes[index] as HTMLElement;\r\n }\r\n\r\n this._vnode = newVNode;\r\n this.onUpdate?.(prevProps, prevState);\r\n } catch (error) {\r\n this._handleError(error as Error, { componentStack: this.constructor.name });\r\n }\r\n }\r\n\r\n private _convertToVDomNode(vnode: VNode): VDomVNode {\r\n if (typeof vnode.type !== 'string') {\r\n throw new Error('Component VNodes cannot be converted to VDom nodes');\r\n }\r\n\r\n // Convert props to VDom-compatible format\r\n const convertedProps: Record<string, unknown> = {};\r\n for (const [key, value] of Object.entries(vnode.props)) {\r\n if (key === 'children') continue;\r\n\r\n // Convert style object if needed\r\n if (key === 'style' && typeof value === 'object' && value !== null && !Array.isArray(value)) {\r\n convertedProps[key] = value as Record<string, string | number>;\r\n } else {\r\n convertedProps[key] = value;\r\n }\r\n }\r\n\r\n const convertedChildren = vnode.children.map(child => {\r\n if (child == null || typeof child === 'boolean') return null;\r\n if (typeof child === 'string' || typeof child === 'number') return child;\r\n return this._convertToVDomNode(child as VNode);\r\n }).filter((child): child is string | number | VDomVNode => child !== null);\r\n\r\n return {\r\n type: vnode.type,\r\n props: convertedProps as never,\r\n children: convertedChildren\r\n };\r\n }\r\n\r\n private _createElementFromVNode(vnode: VNode): HTMLElement {\r\n if (typeof vnode.type !== 'string') {\r\n throw new Error('Component VNodes not supported in _createElementFromVNode');\r\n }\r\n\r\n const element = document.createElement(vnode.type);\r\n\r\n // Set properties\r\n for (const [key, value] of Object.entries(vnode.props)) {\r\n if (key === 'children') continue;\r\n this._setElementProperty(element, key, value);\r\n }\r\n\r\n // Add children\r\n for (const child of vnode.children) {\r\n if (child == null || child === false) continue;\r\n\r\n if (typeof child === 'string' || typeof child === 'number') {\r\n element.appendChild(document.createTextNode(String(child)));\r\n } else if (typeof child === 'object' && 'type' in child) {\r\n element.appendChild(this._createElementFromVNode(child as VNode));\r\n }\r\n }\r\n\r\n return element;\r\n }\r\n\r\n private _setElementProperty(element: HTMLElement, key: string, value: unknown): void {\r\n // Event handlers\r\n if (key.startsWith('on') && typeof value === 'function') {\r\n const eventName = key.substring(2).toLowerCase();\r\n element.addEventListener(eventName, value as EventListener);\r\n return;\r\n }\r\n\r\n // Class names\r\n if (key === 'className' && typeof value === 'string') {\r\n element.className = value;\r\n return;\r\n }\r\n\r\n // Styles\r\n if (key === 'style') {\r\n if (typeof value === 'string') {\r\n element.setAttribute('style', value);\r\n } else if (typeof value === 'object' && value !== null) {\r\n Object.assign(element.style, value);\r\n }\r\n return;\r\n }\r\n\r\n // Refs\r\n if (key === 'ref' && typeof value === 'function') {\r\n (value as (el: HTMLElement) => void)(element);\r\n return;\r\n }\r\n\r\n // Boolean attributes\r\n if (key === 'checked' || key === 'disabled' || key === 'selected') {\r\n const boolValue = value === 'true' || value === true || value === '';\r\n if (boolValue) {\r\n element.setAttribute(key, '');\r\n }\r\n return;\r\n }\r\n\r\n // Regular attributes\r\n if (value != null && value !== false) {\r\n element.setAttribute(key, String(value));\r\n }\r\n }\r\n\r\n private _handleError(error: Error, errorInfo: { componentStack?: string }): void {\r\n console.error(`Error in component ${this.constructor.name}:`, error);\r\n\r\n if (this.onError) {\r\n this.onError(error, errorInfo);\r\n } else {\r\n throw error;\r\n }\r\n }\r\n\r\n private _areDepsEqual(prevDeps: unknown[], nextDeps: unknown[]): boolean {\r\n if (prevDeps.length !== nextDeps.length) return false;\r\n return prevDeps.every((dep, i) => dep === nextDeps[i]);\r\n }\r\n\r\n /**\r\n * Invalidate all computed property caches (called by decorators)\r\n */\r\n _invalidateAllComputed(): void {\r\n for (const key in this) {\r\n if (key.startsWith('_computed_dirty_')) {\r\n (this as Record<string, unknown>)[key] = true;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Trigger watchers for a property (called by decorators)\r\n */\r\n _triggerWatchers(propertyName: string, newValue: unknown, oldValue: unknown): void {\r\n const watchers = (this.constructor as ComponentConstructor).__watchers__;\r\n if (!watchers?.[propertyName]) return;\r\n\r\n for (const methodName of watchers[propertyName]) {\r\n if (typeof (this as Record<string, unknown>)[methodName] === 'function') {\r\n try {\r\n ((this as Record<string, unknown>)[methodName] as (nv: unknown, ov: unknown) => void).call(this, newValue, oldValue);\r\n } catch (error) {\r\n console.error(`Watcher error in ${methodName}:`, error);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Helper type for constructor metadata\r\n export interface ComponentConstructor {\r\n __watchers__?: Record<string, string[]>;\r\n __reactiveProps__?: string[];\r\n }\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝","// src/mod/core/router.ts\r\n//\r\n// Made with ❤️ by Maysara.\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ PACK ════════════════════════════════════════╗\r\n\r\n import type { Route, RouteConfig, NavigationGuard } from '../../types';\r\n import type { VNode } from '@je-es/vdom';\r\n import { Component, ComponentConstructor } from './component';\r\n import { createElement } from '@je-es/vdom';\r\n\r\n export type { Route, RouteConfig, NavigationGuard };\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ TYPE ════════════════════════════════════════╗\r\n\r\n // Type for lazy-loaded module\r\n interface LazyModule {\r\n default? : ComponentConstructor;\r\n HomePage? : ComponentConstructor;\r\n TodoPage? : ComponentConstructor;\r\n [key: string] : unknown;\r\n }\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝\r\n\r\n\r\n// ╔════════════════════════════════════════ TYPE ════════════════════════════════════════╗\r\n\r\n export class Router {\r\n private routes: RouteConfig[] = [];\r\n private currentRoute: Route | null = null;\r\n private mode: 'history' | 'hash' = 'history';\r\n private base: string = '/';\r\n private beforeEachHooks: NavigationGuard[] = [];\r\n private afterEachHooks: ((to: Route, from: Route) => void)[] = [];\r\n private currentComponent: Component | null = null;\r\n private routerOutlet: HTMLElement | null = null;\r\n private isNavigating: boolean = false;\r\n private scrollBehavior: 'auto' | 'smooth' | 'instant' = 'auto';\r\n private notFoundHandler: (() => void) | null = null;\r\n private _internalPath: string | null = null;\r\n\r\n /**\r\n * Initialize router\r\n */\r\n init(\r\n routes: RouteConfig[],\r\n mode: 'history' | 'hash' = 'history',\r\n base: string = '/',\r\n scrollBehavior: 'auto' | 'smooth' | 'instant' = 'auto'\r\n ): void {\r\n this.routes = routes;\r\n this.mode = mode;\r\n this.base = base.endsWith('/') ? base.slice(0, -1) : base;\r\n this.scrollBehavior = scrollBehavior;\r\n\r\n this._initializeRouting();\r\n this._handleRoute();\r\n }\r\n\r\n /**\r\n * Navigate to a path\r\n */\r\n async push(path: string, state?: Record<string, unknown>): Promise<void> {\r\n if (this.isNavigating) {\r\n // console.warn('Navigation already in progress');\r\n return;\r\n }\r\n\r\n this._internalPath = path;\r\n\r\n if (this.mode === 'history') {\r\n window.history.pushState(state || {}, '', this._buildFullPath(path));\r\n } else {\r\n window.location.hash = path;\r\n }\r\n\r\n await this._handleRoute();\r\n }\r\n\r\n /**\r\n * Replace current route\r\n */\r\n async replace(path: string, state?: Record<string, unknown>): Promise<void> {\r\n this._internalPath = path;\r\n\r\n if (this.mode === 'history') {\r\n window.history.replaceState(state || {}, '', this._buildFullPath(path));\r\n } else {\r\n window.location.hash = path;\r\n }\r\n\r\n return this._handleRoute();\r\n }\r\n\r\n back(): void { window.history.back(); }\r\n forward(): void { window.history.forward(); }\r\n go(delta: number): void { window.history.go(delta); }\r\n\r\n /**\r\n * Navigation guards\r\n */\r\n beforeEach(hook: NavigationGuard): void {\r\n this.beforeEachHooks.push(hook);\r\n }\r\n\r\n afterEach(hook: (to: Route, from: Route) => void): void {\r\n this.afterEachHooks.push(hook);\r\n }\r\n\r\n onNotFound(handler: () => void): void {\r\n this.notFoundHandler = handler;\r\n }\r\n\r\n /**\r\n * Route utilities\r\n */\r\n getCurrentRoute(): Route | null {\r\n return this.currentRoute ? { ...this.currentRoute } : null;\r\n }\r\n\r\n isActive(path: string, exact: boolean = false): boolean {\r\n if (!this.currentRoute) return false;\r\n return exact\r\n ? this.currentRoute.path === path\r\n : this.currentRoute.path.startsWith(path);\r\n }\r\n\r\n outlet(): VNode {\r\n return createElement('div', {\r\n 'data-router-outlet': 'true',\r\n style: 'display: contents;'\r\n }) as VNode;\r\n }\r\n\r\n getRoute(name: string): RouteConfig | undefined {\r\n return this.routes.find(r => r.name === name);\r\n }\r\n\r\n async pushNamed(name: string, params?: Record<string, string>): Promise<void> {\r\n const route = this.getRoute(name);\r\n if (!route) {\r\n console.error(`Route with name \"${name}\" not found`);\r\n return;\r\n }\r\n\r\n let path = route.path;\r\n if (params) {\r\n for (const [key, value] of Object.entries(params)) {\r\n path = path.replace(`:${key}`, value);\r\n }\r\n }\r\n\r\n return this.push(path);\r\n }\r\n\r\n resolve(path: string): Route | null {\r\n const matchedRoute = this._matchRoute(path);\r\n if (!matchedRoute) return null;\r\n\r\n const { route, params } = matchedRoute;\r\n return {\r\n path,\r\n params,\r\n query: this._parseQuery(path),\r\n meta: route.meta || {},\r\n hash: path.includes('#') ? path.split('#')[1] : '',\r\n name: route.name,\r\n };\r\n }\r\n\r\n /**\r\n * Initialize routing handlers\r\n */\r\n private _initializeRouting(): void {\r\n // Handle browser navigation\r\n window.addEventListener('popstate', () => {\r\n this._internalPath = null;\r\n this._handleRoute();\r\n });\r\n\r\n if (this.mode === 'hash') {\r\n window.addEventListener('hashchange', () => {\r\n this._internalPath = null;\r\n this._handleRoute();\r\n });\r\n }\r\n\r\n // Intercept link clicks\r\n document.addEventListener('click', (e) => {\r\n const link = (e.target as HTMLElement).closest('a[href]') as HTMLAnchorElement | null;\r\n\r\n if (link && this._shouldInterceptLink(link)) {\r\n e.preventDefault();\r\n const href = link.getAttribute('href');\r\n if (href) {\r\n const path = this.mode === 'hash' && href.startsWith('#')\r\n ? href.substring(1)\r\n : href.replace(this.base, '');\r\n this.push(path);\r\n }\r\n }\r\n });\r\n }\r\n\r\n private _shouldInterceptLink(link: HTMLAnchorElement): boolean {\r\n const href = link.getAttribute('href');\r\n return !!(\r\n href &&\r\n link.hostname === window.location.hostname &&\r\n link.target !== '_blank' &&\r\n !link.hasAttribute('download') &&\r\n link.rel !== 'external'\r\n );\r\n }\r\n\r\n /**\r\n * Handle route change\r\n */\r\n private async _handleRoute(): Promise<void> {\r\n if (this.isNavigating) return;\r\n\r\n this.isNavigating = true;\r\n\r\n try {\r\n const path = this._getCurrentPath();\r\n const matchedRoute = this._matchRoute(path);\r\n\r\n if (!matchedRoute) {\r\n this._handleNotFound(path);\r\n return;\r\n }\r\n\r\n const { route, params } = matchedRoute;\r\n const to = this._buildRouteObject(path, params, route);\r\n const from = this.currentRoute || this._buildEmptyRoute();\r\n\r\n // Run guards\r\n const canProceed = await this._runNavigationGuards(route, to, from);\r\n if (!canProceed) return;\r\n\r\n this.currentRoute = to;\r\n\r\n await this._renderComponent(route);\r\n this._handleScrollBehavior(to, from);\r\n\r\n if (route.meta?.title && typeof route.meta.title === 'string') {\r\n document.title = route.meta.title;\r\n }\r\n\r\n // Run after hooks\r\n this.afterEachHooks.forEach(hook => hook(to, from));\r\n\r\n } catch (error) {\r\n console.error('Router error:', error);\r\n } finally {\r\n this.isNavigating = false;\r\n }\r\n }\r\n\r\n /**\r\n * Handle 404 not found\r\n */\r\n private _handleNotFound(path: string): void {\r\n console.warn(`No route matched for path: ${path}`);\r\n\r\n this.currentRoute = {\r\n path,\r\n params: {},\r\n query: this._parseQuery(),\r\n meta: {},\r\n hash: window.location.hash.substring(1),\r\n };\r\n\r\n if (this.notFoundHandler) {\r\n this.notFoundHandler();\r\n }\r\n }\r\n\r\n /**\r\n * Build route object\r\n */\r\n private _buildRouteObject(\r\n path: string,\r\n params: Record<string, string>,\r\n route: RouteConfig\r\n ): Route {\r\n return {\r\n path,\r\n params,\r\n query: this._parseQuery(),\r\n meta: route.meta || {},\r\n hash: window.location.hash.substring(1),\r\n name: route.name,\r\n };\r\n }\r\n\r\n private _buildEmptyRoute(): Route {\r\n return {\r\n path: '',\r\n params: {},\r\n query: {},\r\n meta: {},\r\n hash: '',\r\n };\r\n }\r\n\r\n /**\r\n * Run navigation guards\r\n */\r\n private async _runNavigationGuards(\r\n route: RouteConfig,\r\n to: Route,\r\n from: Route\r\n ): Promise<boolean> {\r\n // Route-specific guard\r\n if (route.beforeEnter) {\r\n const result = await this._runGuard(route.beforeEnter, to, from);\r\n if (!result) return false;\r\n }\r\n\r\n // Global guards\r\n for (const guard of this.beforeEachHooks) {\r\n const result = await this._runGuard(guard, to, from);\r\n if (!result) return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n private _runGuard(\r\n guard: NavigationGuard,\r\n to: Route,\r\n from: Route\r\n ): Promise<boolean> {\r\n return new Promise((resolve) => {\r\n guard(to, from, (nextPath?: string | false) => {\r\n if (nextPath === false) {\r\n resolve(false);\r\n } else if (typeof nextPath === 'string') {\r\n this.push(nextPath);\r\n resolve(false);\r\n } else {\r\n resolve(true);\r\n }\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Render component - simplified component resolution\r\n */\r\n private async _renderComponent(route: RouteConfig): Promise<void> {\r\n // Get or find outlet\r\n if (!this.routerOutlet) {\r\n this.routerOutlet = document.querySelector('[data-router-outlet=\"true\"]') as HTMLElement;\r\n if (!this.routerOutlet) {\r\n console.warn('Router outlet not found');\r\n return;\r\n }\r\n }\r\n\r\n // Unmount previous component\r\n if (this.currentComponent) {\r\n this.currentComponent.unmount();\r\n this.currentComponent = null;\r\n }\r\n\r\n // Clear outlet\r\n this.routerOutlet.innerHTML = '';\r\n\r\n try {\r\n const ComponentClass = await this._resolveComponent(route.component);\r\n\r\n if (!ComponentClass || typeof ComponentClass !== 'function') {\r\n throw new Error('Component is null or not a constructor');\r\n }\r\n\r\n const ComponentCtor = ComponentClass as new () => Component;\r\n // console.log('🎨 Mounting:', ComponentCtor.name || 'Component');\r\n this.currentComponent = new ComponentCtor();\r\n\r\n if (this.currentComponent) {\r\n await this.currentComponent.mount(this.routerOutlet);\r\n // console.log('✅ Mounted successfully!');\r\n }\r\n\r\n } catch (error) {\r\n this._renderError(route.path, error);\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Resolve component (handle lazy loading)\r\n */\r\n private async _resolveComponent(\r\n component: ComponentConstructor | (() => Promise<LazyModule>)\r\n ): Promise<ComponentConstructor | null> {\r\n // console.log('🔍 Resolving component...');\r\n\r\n // Check if it's a class constructor\r\n if (typeof component === 'function') {\r\n // Try to determine if it's a class vs a loader function\r\n const hasPrototype = 'prototype' in component && component.prototype;\r\n const proto = hasPrototype ? (component as { prototype: unknown }).prototype : null;\r\n const hasConstructor = proto && typeof proto === 'object' && 'constructor' in proto;\r\n\r\n if (hasConstructor && (proto as { constructor: unknown }).constructor === component) {\r\n // console.log('✅ Direct component class');\r\n return component as ComponentConstructor;\r\n }\r\n\r\n // Otherwise treat as lazy loader\r\n // console.log('📦 Lazy loading...');\r\n try {\r\n const result = await (component as () => Promise<LazyModule>)();\r\n // console.log('📦 Module keys:', Object.keys(result));\r\n\r\n // Find component in module\r\n const found = result.HomePage ||\r\n result.TodoPage ||\r\n result.default ||\r\n Object.values(result).find((exp: unknown): exp is ComponentConstructor => {\r\n if (typeof exp !== 'function') return false;\r\n // Type guard: check if it's a constructor function\r\n const possibleCtor = exp as { prototype?: unknown };\r\n const proto = possibleCtor.prototype;\r\n return proto !== null && typeof proto === 'object' && proto !== undefined && 'constructor' in proto;\r\n });\r\n\r\n return found || null;\r\n } catch (error) {\r\n console.error('Failed to load lazy component:', error);\r\n return null;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Render error fallback\r\n */\r\n private _renderError(path: string, error: unknown): void {\r\n if (this.routerOutlet) {\r\n const errorMessage = error instanceof Error ? error.message : String(error);\r\n this.routerOutlet.innerHTML = `\r\n <div style=\"padding: 2rem; background: #fee; border: 2px solid #c00;\r\n border-radius: 8px; margin: 2rem;\">\r\n <h2 style=\"color: #c00; margin-top: 0;\">⚠️ Failed to Load Component</h2>\r\n <p><strong>Route:</strong> ${path}</p>\r\n <p><strong>Error:</strong> ${errorMessage}</p>\r\n </div>\r\n `;\r\n }\r\n }\r\n\r\n /**\r\n * Handle scroll behavior\r\n */\r\n private _handleScrollBehavior(to: Route, from: Route): void {\r\n if (to.hash) {\r\n const element = document.getElementById(to.hash);\r\n if (element) {\r\n element.scrollIntoView({ behavior: this.scrollBehavior });\r\n return;\r\n }\r\n }\r\n\r\n if (to.path !== from.path) {\r\n window.scrollTo({ top: 0, behavior: this.scrollBehavior });\r\n }\r\n }\r\n\r\n /**\r\n * Get current path (handles test environments)\r\n */\r\n private _getCurrentPath(): string {\r\n if (this._internalPath !== null) {\r\n return this._internalPath;\r\n }\r\n\r\n if (this.mode === 'hash') {\r\n return window.location.hash.substring(1).split('?')[0] || '/';\r\n }\r\n\r\n let path = window.location.pathname;\r\n\r\n // Handle test environments\r\n if (!path || path === 'blank' || path === 'about:blank') {\r\n path = '/';\r\n }\r\n\r\n if (this.base && path.startsWith(this.base)) {\r\n path = path.substring(this.base.length);\r\n }\r\n\r\n return path || '/';\r\n }\r\n\r\n private _buildFullPath(path: string): string {\r\n if (path.startsWith('http')) return path;\r\n const normalizedPath = path.startsWith('/') ? path : '/' + path;\r\n return this.base + normalizedPath;\r\n }\r\n\r\n /**\r\n * Match route pattern to path\r\n */\r\n private _matchRoute(path: string): { route: RouteConfig; params: Record<string, string> } | null {\r\n const cleanPath = path.split('?')[0].split('#')[0];\r\n\r\n for (const route of this.routes) {\r\n const params = this._matchPath(route.path, cleanPath);\r\n if (params !== null) {\r\n return { route, params };\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private _matchPath(pattern: string, path: string): Record<string, string> | null {\r\n if (pattern === '*') return {};\r\n if (pattern === path) return {};\r\n\r\n const paramNames: string[] = [];\r\n const regexPattern = pattern\r\n .replace(/\\*/g, '.*')\r\n .replace(/:([^/]+)/g, (_, paramName: string) => {\r\n paramNames.push(paramName);\r\n return '([^/]+)';\r\n });\r\n\r\n const regex = new RegExp(`^${regexPattern}$`);\r\n const match = path.match(regex);\r\n\r\n if (!match) return null;\r\n\r\n return paramNames.reduce((params, name, i) => {\r\n params[name] = decodeURIComponent(match[i + 1]);\r\n return params;\r\n }, {} as Record<string, string>);\r\n }\r\n\r\n /**\r\n * Parse query string\r\n */\r\n private _parseQuery(path?: string): Record<string, string> {\r\n const search = path\r\n ? path.includes('?') ? path.split('?')[1].split('#')[0] : ''\r\n : window.location.search.substring(1);\r\n\r\n if (!search) return {};\r\n\r\n return search.split('&').reduce((query, pair) => {\r\n const [key, value] = pair.split('=').map(decodeURIComponent);\r\n if (key) query[key] = value || '';\r\n return query;\r\n }, {} as Record<string, string>);\r\n }\r\n }\r\n\r\n export const router = new Router();\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝","// src/mod/core/client.ts\r\n//\r\n// Made with ❤️ by Maysara.\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ PACK ════════════════════════════════════════╗\r\n\r\n import type { ClientConfig } from '../../types';\r\n import type { ApiConfig as CapiConfigType } from '@je-es/capi';\r\n import { router } from './router';\r\n import { configureApi } from '@je-es/capi';\r\n import * as sass from 'sass';\r\n import { readdirSync, statSync, writeFileSync, existsSync, mkdirSync, watch } from 'fs';\r\n import { join, extname, relative, dirname } from 'path';\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ TYPE ════════════════════════════════════════╗\r\n\r\n export type { ClientConfig };\r\n\r\n // Bun build types\r\n interface BunBuildOptions {\r\n entrypoints: string[];\r\n outdir: string;\r\n target: string;\r\n minify?: boolean;\r\n sourcemap?: 'none' | 'external' | 'inline';\r\n splitting?: boolean;\r\n naming?: { entry?: string };\r\n external?: string[];\r\n }\r\n\r\n interface BunBuildResult {\r\n success: boolean;\r\n logs: {\r\n message: string;\r\n level: 'error' | 'warning' | 'info';\r\n }[];\r\n }\r\n\r\n declare const Bun: {\r\n build(options: BunBuildOptions): Promise<BunBuildResult>;\r\n };\r\n\r\n // Window type extension for dev tools\r\n declare global {\r\n interface Window {\r\n __JEES_DEV__?: {\r\n router: typeof router;\r\n config: ClientConfig;\r\n version: string;\r\n };\r\n }\r\n }\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ CORE ════════════════════════════════════════╗\r\n\r\n /**\r\n * Client builder\r\n * Handles build process and runtime configuration\r\n */\r\n export function client(config: ClientConfig) {\r\n // Store configuration\r\n const _config = config;\r\n\r\n return {\r\n /**\r\n * Build the client application\r\n * This compiles TypeScript components to vanilla JavaScript\r\n */\r\n async build(): Promise<void> {\r\n if (!_config.build) {\r\n console.warn('No build configuration provided');\r\n return;\r\n }\r\n\r\n console.log('🔨 Building @je-es/client application...');\r\n\r\n try {\r\n // Build JavaScript\r\n await this._buildJS();\r\n\r\n // Build SCSS/CSS\r\n await this._buildStyles();\r\n\r\n console.log('✅ Build completed successfully!');\r\n\r\n } catch (error) {\r\n console.error('❌ Build error:', error);\r\n throw error;\r\n }\r\n },\r\n\r\n /**\r\n * Build JavaScript bundle\r\n */\r\n async _buildJS(): Promise<void> {\r\n if (!_config.build) return;\r\n\r\n const result = await Bun.build({\r\n entrypoints : [_config.build.entry],\r\n outdir : _config.build.output.substring(0, _config.build.output.lastIndexOf('/')),\r\n target : 'browser',\r\n minify : _config.build.minify ?? false,\r\n sourcemap : _config.build.sourcemap ? 'external' : 'none',\r\n splitting : _config.build.optimization?.splitChunks ?? false,\r\n naming : {\r\n entry : _config.build.output.substring(_config.build.output.lastIndexOf('/') + 1),\r\n },\r\n // Exclude server-side packages from browser bundle\r\n external : [\r\n 'sass',\r\n 'fs',\r\n 'path',\r\n 'url',\r\n 'util',\r\n 'stream',\r\n 'buffer',\r\n 'events',\r\n 'crypto',\r\n 'os',\r\n 'child_process',\r\n ],\r\n });\r\n\r\n if (!result.success) {\r\n console.error('❌ JS Build failed:', result.logs);\r\n throw new Error('JS Build failed');\r\n }\r\n\r\n // console.log('📦 JavaScript bundled');\r\n },\r\n\r\n /**\r\n * Build SCSS/CSS styles\r\n */\r\n async _buildStyles(): Promise<void> {\r\n const stylesDir = _config.build?.styles?.input || './app/style';\r\n const outputPath = _config.build?.styles?.output || './static/client.css';\r\n\r\n // Dynamically import server-side modules only when building\r\n const outputDir = dirname(outputPath);\r\n const outputFile = outputPath.split('/').pop() || 'client.css';\r\n\r\n // Check if styles directory exists\r\n if (!existsSync(stylesDir)) {\r\n console.log('⚠️ No style directory found, skipping CSS build');\r\n return;\r\n }\r\n\r\n try {\r\n // Ensure output directory exists\r\n if (!existsSync(outputDir)) {\r\n mkdirSync(outputDir, { recursive: true });\r\n }\r\n\r\n // Collect all SCSS files (no .sass files)\r\n const scssFiles = this._collectScssFiles(stylesDir);\r\n\r\n if ((await scssFiles).length === 0) {\r\n console.log('⚠️ No SCSS files found, skipping CSS build');\r\n return;\r\n }\r\n\r\n // console.log(`📝 Found ${scssFiles.length} SCSS file(s)`);\r\n\r\n // Compile all SCSS files and combine\r\n let combinedCSS = '';\r\n\r\n for (const file of await scssFiles) {\r\n try {\r\n const result = sass.compile(file, {\r\n style: _config.build?.minify ? 'compressed' : 'expanded',\r\n sourceMap: _config.build?.sourcemap ? true : false,\r\n });\r\n\r\n combinedCSS += `\\n/* ${relative(stylesDir, file)} */\\n`;\r\n combinedCSS += result.css;\r\n combinedCSS += '\\n';\r\n\r\n } catch (sassError) {\r\n console.error(`❌ Error compiling ${file}:`, sassError);\r\n throw sassError;\r\n }\r\n }\r\n\r\n // Write combined CSS\r\n const fullOutputPath = join(outputDir, outputFile);\r\n writeFileSync(fullOutputPath, combinedCSS, 'utf-8');\r\n\r\n // console.log(`💅 Styles compiled to ${fullOutputPath}`);\r\n\r\n // Write source map if enabled\r\n if (_config.build?.sourcemap) {\r\n writeFileSync(\r\n `${fullOutputPath}.map`,\r\n JSON.stringify({\r\n version: 3,\r\n sources: (await scssFiles).map(f => relative(outputDir, f)),\r\n names: [],\r\n mappings: ''\r\n }),\r\n 'utf-8'\r\n );\r\n }\r\n\r\n } catch (error) {\r\n console.error('❌ CSS Build failed:', error);\r\n throw error;\r\n }\r\n },\r\n\r\n /**\r\n * Recursively collect all SCSS files (excluding .sass)\r\n */\r\n async _collectScssFiles(dir: string): Promise<string[]> {\r\n const files: string[] = [];\r\n\r\n if (!existsSync(dir)) {\r\n return files;\r\n }\r\n\r\n const entries = readdirSync(dir);\r\n\r\n for (const entry of entries) {\r\n const fullPath = join(dir, entry);\r\n const stat = statSync(fullPath);\r\n\r\n if (stat.isDirectory()) {\r\n // Recursively scan subdirectories\r\n files.push(...await this._collectScssFiles(fullPath));\r\n } else if (stat.isFile()) {\r\n const ext = extname(entry);\r\n // Only include .scss files, skip partials (starting with _)\r\n if (ext === '.scss' && !entry.startsWith('_')) {\r\n files.push(fullPath);\r\n }\r\n }\r\n }\r\n\r\n // Sort files to ensure consistent order\r\n return files.sort();\r\n },\r\n\r\n /**\r\n * Watch mode for development\r\n */\r\n async watch(): Promise<void> {\r\n console.log('👀 Watching for changes...');\r\n\r\n // Initial build\r\n await this.build();\r\n\r\n // Watch TypeScript files\r\n if (_config.build?.entry) {\r\n const entryDir = dirname(_config.build.entry);\r\n watch(entryDir, { recursive: true }, async (eventType, filename) => {\r\n if (filename && (filename.endsWith('.ts') || filename.endsWith('.tsx'))) {\r\n console.log(`🔄 ${filename} changed, rebuilding JS...`);\r\n try {\r\n await this._buildJS();\r\n console.log('✅ JS rebuild complete');\r\n } catch (error) {\r\n console.error('❌ JS rebuild failed:', error);\r\n }\r\n }\r\n });\r\n }\r\n\r\n // Watch SCSS files\r\n const stylesDir = './app/style';\r\n if (existsSync(stylesDir)) {\r\n watch(stylesDir, { recursive: true }, async (eventType, filename) => {\r\n if (filename && filename.endsWith('.scss')) {\r\n console.log(`🔄 ${filename} changed, rebuilding CSS...`);\r\n try {\r\n await this._buildStyles();\r\n console.log('✅ CSS rebuild complete');\r\n } catch (error) {\r\n console.error('❌ CSS rebuild failed:', error);\r\n }\r\n }\r\n });\r\n }\r\n },\r\n\r\n /**\r\n * Initialize the client runtime\r\n * This runs in the browser\r\n */\r\n init(): void {\r\n // console.log('🚀 Initializing @je-es/client...');\r\n\r\n // Configure API client\r\n if (_config.api) {\r\n // Build the capi-compatible config\r\n const capiConfig: Partial<CapiConfigType> = {\r\n baseURL: _config.api.baseURL,\r\n timeout: _config.api.timeout,\r\n headers: _config.api.headers,\r\n };\r\n\r\n // Add interceptors if they exist\r\n if (_config.api.interceptors) {\r\n capiConfig.interceptors = {\r\n request: _config.api.interceptors.request || null,\r\n response: _config.api.interceptors.response || null,\r\n error: _config.api.interceptors.error || null,\r\n };\r\n }\r\n\r\n configureApi(capiConfig);\r\n }\r\n\r\n // Configure router\r\n if (_config.router && _config.app?.routes) {\r\n router.init(\r\n _config.app.routes,\r\n _config.router.mode,\r\n _config.router.base\r\n );\r\n\r\n if (_config.router.beforeEach) {\r\n router.beforeEach(_config.router.beforeEach);\r\n }\r\n\r\n if (_config.router.afterEach) {\r\n router.afterEach(_config.router.afterEach);\r\n }\r\n }\r\n\r\n // Mount root component\r\n if (_config.app?.root) {\r\n const rootElement = document.querySelector(_config.app.root);\r\n if (rootElement) {\r\n // console.log('✅ Client initialized successfully!');\r\n } else {\r\n console.error(`❌ Root element \"${_config.app.root}\" not found`);\r\n }\r\n }\r\n\r\n // Enable dev tools\r\n if (_config.devTools?.enabled) {\r\n this._enableDevTools();\r\n }\r\n },\r\n\r\n /**\r\n * Enable development tools\r\n */\r\n _enableDevTools(): void {\r\n // console.log('🛠️ Dev tools enabled');\r\n\r\n // Add dev tools to window\r\n window.__JEES_DEV__ = {\r\n router,\r\n config: _config,\r\n version: '0.0.1',\r\n };\r\n\r\n // // Log router changes\r\n // if (_config.devTools?.showRouterInfo) {\r\n // router.afterEach((to: Route, from: Route) => {\r\n // console.log('📍 Route changed:', {\r\n // from: from.path,\r\n // to: to.path,\r\n // params: to.params,\r\n // query: to.query,\r\n // });\r\n // });\r\n // }\r\n },\r\n\r\n /**\r\n * Get configuration\r\n */\r\n getConfig(): ClientConfig {\r\n return _config;\r\n },\r\n };\r\n }\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝","// src/mod/core/store.ts\r\n//\r\n// Made with ❤️ by Maysara.\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ PACK ════════════════════════════════════════╗\r\n\r\n import { StoreOptions, StoreSubscriber } from '../../types';\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ CORE ════════════════════════════════════════╗\r\n\r\n /**\r\n * Store - Global state management with improved features\r\n */\r\n export class Store<T extends Record<string, unknown> = Record<string, unknown>> {\r\n private _state: T;\r\n private _subscribers = new Set<StoreSubscriber<T>>();\r\n private _persist: boolean;\r\n private _storage: Storage | null = null;\r\n private _storageKey: string;\r\n private _middleware: ((state: T, action?: string) => void)[] = [];\r\n private _isHydrating: boolean = false;\r\n\r\n constructor(options: StoreOptions<T>) {\r\n this._persist = options.persist ?? false;\r\n this._storageKey = options.storageKey || `store_${Date.now()}`;\r\n\r\n // Initialize storage\r\n if (this._persist && typeof window !== 'undefined') {\r\n this._storage = options.storage === 'sessionStorage'\r\n ? sessionStorage\r\n : localStorage;\r\n }\r\n\r\n // Load from storage if persisted\r\n if (this._persist && this._storage) {\r\n const stored = this._loadFromStorage();\r\n this._state = stored !== null ? stored : options.state;\r\n } else {\r\n this._state = options.state;\r\n }\r\n\r\n // Apply initial middleware\r\n if (options.middleware) {\r\n this._middleware = options.middleware;\r\n }\r\n }\r\n\r\n /**\r\n * Get current state (readonly)\r\n */\r\n get state(): Readonly<T> {\r\n return { ...this._state };\r\n }\r\n\r\n /**\r\n * Set entire state (replaces state)\r\n */\r\n set state(newState: T) {\r\n this.setState(newState);\r\n }\r\n\r\n /**\r\n * Update state (merges with existing state)\r\n */\r\n setState(update: Partial<T> | ((prevState: T) => Partial<T>), action?: string): void {\r\n const prevState = { ...this._state };\r\n\r\n const partialState = typeof update === 'function'\r\n ? update(prevState)\r\n : update;\r\n\r\n this._state = { ...prevState, ...partialState };\r\n\r\n // Apply middleware\r\n for (const middleware of this._middleware) {\r\n try {\r\n middleware(this._state, action);\r\n } catch (error) {\r\n console.error('Store middleware error:', error);\r\n }\r\n }\r\n\r\n // Persist to storage\r\n if (this._persist && !this._isHydrating) {\r\n this._saveToStorage();\r\n }\r\n\r\n // Notify subscribers\r\n this._notify();\r\n }\r\n\r\n /**\r\n * Get a specific value from state\r\n */\r\n get<K extends keyof T>(key: K): T[K] {\r\n return this._state[key];\r\n }\r\n\r\n /**\r\n * Set a specific value in state\r\n */\r\n set<K extends keyof T>(key: K, value: T[K], action?: string): void {\r\n this.setState({ [key]: value } as unknown as Partial<T>, action);\r\n }\r\n\r\n /**\r\n * Subscribe to state changes\r\n * Returns unsubscribe function\r\n */\r\n subscribe(listener: StoreSubscriber<T>): () => void {\r\n this._subscribers.add(listener);\r\n\r\n // Immediately call listener with current state\r\n listener(this._state);\r\n\r\n // Return unsubscribe function\r\n return () => {\r\n this._subscribers.delete(listener);\r\n };\r\n }\r\n\r\n /**\r\n * Subscribe to specific key changes\r\n */\r\n subscribeToKey<K extends keyof T>(\r\n key: K,\r\n listener: (value: T[K]) => void\r\n ): () => void {\r\n let prevValue = this._state[key];\r\n\r\n const subscriber = (state: T) => {\r\n const newValue = state[key];\r\n if (prevValue !== newValue) {\r\n prevValue = newValue;\r\n listener(newValue);\r\n }\r\n };\r\n\r\n return this.subscribe(subscriber);\r\n }\r\n\r\n /**\r\n * Add middleware\r\n */\r\n use(middleware: (state: T, action?: string) => void): void {\r\n this._middleware.push(middleware);\r\n }\r\n\r\n /**\r\n * Clear all state\r\n */\r\n clear(): void {\r\n this._state = {} as T;\r\n\r\n if (this._persist && this._storage) {\r\n try {\r\n this._storage.removeItem(this._storageKey);\r\n } catch (error) {\r\n console.error('Failed to clear storage:', error);\r\n }\r\n }\r\n\r\n this._notify();\r\n }\r\n\r\n /**\r\n * Reset state to initial value\r\n */\r\n reset(initialState: T): void {\r\n this._state = { ...initialState };\r\n\r\n if (this._persist) {\r\n this._saveToStorage();\r\n }\r\n\r\n this._notify();\r\n }\r\n\r\n /**\r\n * Hydrate state from storage\r\n */\r\n hydrate(): void {\r\n if (!this._persist || !this._storage) {\r\n console.warn('Cannot hydrate: persistence not enabled');\r\n return;\r\n }\r\n\r\n this._isHydrating = true;\r\n const stored = this._loadFromStorage();\r\n\r\n if (stored !== null) {\r\n this._state = stored;\r\n this._notify();\r\n }\r\n\r\n this._isHydrating = false;\r\n }\r\n\r\n /**\r\n * Get store snapshot for debugging\r\n */\r\n getSnapshot(): { state: T; subscribers: number; storageKey: string } {\r\n return {\r\n state: { ...this._state },\r\n subscribers: this._subscribers.size,\r\n storageKey: this._storageKey,\r\n };\r\n }\r\n\r\n /**\r\n * Batch multiple updates\r\n */\r\n batch(updates: () => void): void {\r\n const prevNotify = this._notify.bind(this);\r\n let shouldNotify = false;\r\n\r\n // Temporarily override notify\r\n this._notify = () => {\r\n shouldNotify = true;\r\n };\r\n\r\n try {\r\n updates();\r\n } finally {\r\n this._notify = prevNotify;\r\n if (shouldNotify) {\r\n this._notify();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Notify all subscribers\r\n */\r\n private _notify(): void {\r\n const stateCopy = { ...this._state };\r\n\r\n for (const subscriber of this._subscribers) {\r\n try {\r\n subscriber(stateCopy);\r\n } catch (error) {\r\n console.error('Store subscriber error:', error);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Load state from storage\r\n */\r\n private _loadFromStorage(): T | null {\r\n if (!this._storage) return null;\r\n\r\n try {\r\n const stored = this._storage.getItem(this._storageKey);\r\n return stored ? JSON.parse(stored) as T : null;\r\n } catch (error) {\r\n console.error('Failed to load from storage:', error);\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * Save state to storage\r\n */\r\n private _saveToStorage(): void {\r\n if (!this._storage) return;\r\n\r\n try {\r\n this._storage.setItem(this._storageKey, JSON.stringify(this._state));\r\n } catch (error) {\r\n console.error('Failed to save to storage:', error);\r\n\r\n // Handle quota exceeded\r\n if (error instanceof DOMException && error.name === 'QuotaExceededError') {\r\n console.warn('Storage quota exceeded');\r\n // Could implement cleanup strategy here\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Destroy store and cleanup\r\n */\r\n destroy(): void {\r\n this._subscribers.clear();\r\n this._middleware = [];\r\n this._state = {} as T;\r\n }\r\n }\r\n\r\n /**\r\n * Create a store with type inference\r\n */\r\n export function createStore<T extends Record<string, unknown>>(\r\n options: StoreOptions<T>\r\n ): Store<T> {\r\n return new Store(options);\r\n }\r\n\r\n /**\r\n * Create a computed store that derives from other stores\r\n */\r\n export function createComputedStore<T, S extends Store<Record<string, unknown>>[]>(\r\n stores: S,\r\n computer: (...states: unknown[]) => T\r\n ): Store<{ value: T }> {\r\n const computedStore = createStore<{ value: T }>({\r\n state: { value: computer(...stores.map(s => s.state)) },\r\n });\r\n\r\n // Subscribe to all source stores\r\n for (const store of stores) {\r\n store.subscribe(() => {\r\n computedStore.setState({\r\n value: computer(...stores.map(s => s.state)),\r\n });\r\n });\r\n }\r\n\r\n return computedStore;\r\n }\r\n\r\n /**\r\n * Connect a component to a store\r\n */\r\n export function connect<T extends Record<string, unknown>, C extends { update?: () => void }>(\r\n store: Store<T>,\r\n component: C,\r\n mapStateToProps: (state: T) => Partial<C>\r\n ): () => void {\r\n const unsubscribe = store.subscribe((state) => {\r\n const props = mapStateToProps(state);\r\n Object.assign(component, props);\r\n\r\n // Trigger update if component has update method\r\n if (typeof component.update === 'function') {\r\n component.update();\r\n }\r\n });\r\n\r\n return unsubscribe;\r\n }\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝","// src/mod/core/decorators.ts\r\n//\r\n// Made with ❤️ by Maysara.\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ TYPE ════════════════════════════════════════╗\r\n\r\n // Type for decorator context (Stage 3 decorators)\r\n interface ClassFieldDecoratorContext<This = unknown, Value = unknown> {\r\n kind: 'field';\r\n name: string | symbol;\r\n access: {\r\n get(object: This): Value;\r\n set(object: This, value: Value): void;\r\n };\r\n addInitializer(initializer: (this: This) => void): void;\r\n }\r\n\r\n interface ClassGetterDecoratorContext<This = unknown, Value = unknown> {\r\n kind: 'getter';\r\n name: string | symbol;\r\n access: {\r\n get(object: This): Value;\r\n };\r\n addInitializer(initializer: (this: This) => void): void;\r\n }\r\n\r\n interface ClassMethodDecoratorContext<This = unknown, Value = unknown> {\r\n kind: 'method';\r\n name: string | symbol;\r\n access: {\r\n get(object: This): Value;\r\n };\r\n addInitializer(initializer: (this: This) => void): void;\r\n }\r\n\r\n // Component metadata interface\r\n interface ComponentMetadata {\r\n __reactiveProps__?: string[];\r\n __watchers__?: Record<string, string[]>;\r\n }\r\n\r\n // Helper type for component instance\r\n type ComponentInstance = Record<string, unknown> & {\r\n constructor: ComponentMetadata;\r\n _invalidateAllComputed?: () => void;\r\n _triggerWatchers?: (key: string, newVal: unknown, oldVal: unknown) => void;\r\n _isMounted?: boolean;\r\n update?: () => void;\r\n };\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ CORE ════════════════════════════════════════╗\r\n\r\n /**\r\n * State decorator - makes property reactive\r\n * Usage: @state fields = [];\r\n *\r\n * Supports both TypeScript 5 decorators and legacy decorators\r\n */\r\n export function state<This, Value>(\r\n target: undefined,\r\n context: ClassFieldDecoratorContext<This, Value>\r\n ): (this: This, initialValue: Value) => Value;\r\n export function state(\r\n target: Record<string, unknown>,\r\n context: string\r\n ): void;\r\n export function state<This, Value>(\r\n target: Record<string, unknown> | undefined,\r\n context: string | ClassFieldDecoratorContext<This, Value>\r\n ): unknown {\r\n // TypeScript 5+ decorator (Stage 3)\r\n if (context && typeof context === 'object' && 'kind' in context) {\r\n const propertyKey = context.name as string;\r\n\r\n context.addInitializer(function(this: unknown) {\r\n const instance = this as ComponentInstance;\r\n if (!instance.constructor.__reactiveProps__) {\r\n instance.constructor.__reactiveProps__ = [];\r\n }\r\n if (!instance.constructor.__reactiveProps__.includes(propertyKey)) {\r\n instance.constructor.__reactiveProps__.push(propertyKey);\r\n }\r\n });\r\n\r\n return function(this: This, initialValue: Value): Value {\r\n const instance = this as ComponentInstance;\r\n const hiddenKey = `_state_${propertyKey}`;\r\n\r\n // Store initial value\r\n instance[hiddenKey] = initialValue;\r\n\r\n // Define getter/setter\r\n Object.defineProperty(this, propertyKey, {\r\n get(this: This) {\r\n const inst = this as Record<string, unknown>;\r\n return inst[hiddenKey];\r\n },\r\n set(this: This, newValue: Value) {\r\n const inst = this as ComponentInstance;\r\n const oldValue = inst[hiddenKey];\r\n\r\n if (oldValue !== newValue) {\r\n inst[hiddenKey] = newValue;\r\n\r\n // Invalidate all computed properties\r\n if (typeof inst._invalidateAllComputed === 'function') {\r\n inst._invalidateAllComputed();\r\n }\r\n\r\n // Trigger watchers with correct old/new values\r\n if (typeof inst._triggerWatchers === 'function') {\r\n inst._triggerWatchers(propertyKey, newValue, oldValue);\r\n }\r\n\r\n // Trigger update if component is mounted\r\n if (inst._isMounted && typeof inst.update === 'function') {\r\n inst.update();\r\n }\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true,\r\n });\r\n\r\n return initialValue;\r\n };\r\n }\r\n\r\n // Legacy decorator (for backwards compatibility)\r\n const propertyKey = context as string;\r\n\r\n // Store reactive property metadata\r\n const targetConstructor = (target as { constructor: ComponentMetadata }).constructor;\r\n if (!targetConstructor.__reactiveProps__) {\r\n targetConstructor.__reactiveProps__ = [];\r\n }\r\n if (!targetConstructor.__reactiveProps__.includes(propertyKey)) {\r\n targetConstructor.__reactiveProps__.push(propertyKey);\r\n }\r\n\r\n // Create hidden property key\r\n const hiddenKey = `_state_${propertyKey}`;\r\n const initKey = `_state_init_${propertyKey}`;\r\n\r\n // Define getter/setter\r\n Object.defineProperty(target, propertyKey, {\r\n get(this: unknown) {\r\n const instance = this as Record<string, unknown>;\r\n // If not initialized yet, return undefined (don't trigger getter before init)\r\n if (!instance[initKey]) {\r\n return undefined;\r\n }\r\n return instance[hiddenKey];\r\n },\r\n set(this: unknown, newValue: unknown) {\r\n const instance = this as ComponentInstance;\r\n // On first set (during construction), just store the value\r\n if (!instance[initKey]) {\r\n instance[hiddenKey] = newValue;\r\n instance[initKey] = true;\r\n return;\r\n }\r\n\r\n const oldValue = instance[hiddenKey];\r\n\r\n if (oldValue !== newValue) {\r\n instance[hiddenKey] = newValue;\r\n\r\n // Invalidate all computed properties\r\n if (typeof instance._invalidateAllComputed === 'function') {\r\n instance._invalidateAllComputed();\r\n }\r\n\r\n // Trigger watchers with correct old/new values\r\n if (typeof instance._triggerWatchers === 'function') {\r\n instance._triggerWatchers(propertyKey, newValue, oldValue);\r\n }\r\n\r\n // Trigger update if component is mounted\r\n if (instance._isMounted && typeof instance.update === 'function') {\r\n instance.update();\r\n }\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true,\r\n });\r\n }\r\n\r\n /**\r\n * Computed decorator - creates computed property\r\n * Usage: @computed get fullName() { return this.firstName + ' ' + this.lastName; }\r\n */\r\n export function computed<This, Value>(\r\n originalGetter: (this: This) => Value,\r\n context: ClassGetterDecoratorContext<This, Value>\r\n ): (this: This) => Value;\r\n export function computed(\r\n target: Record<string, unknown>,\r\n context: string,\r\n descriptor: PropertyDescriptor\r\n ): PropertyDescriptor;\r\n // Catch-all for invalid uses (like methods) to provide better error messages\r\n export function computed(\r\n targetOrGetter: unknown,\r\n context: unknown\r\n ): never;\r\n export function computed<This, Value>(\r\n targetOrGetter: Record<string, unknown> | ((this: This) => Value) | unknown,\r\n context: string | ClassGetterDecoratorContext<This, Value> | unknown,\r\n descriptor?: PropertyDescriptor\r\n ): unknown {\r\n // TypeScript 5+ decorator (Stage 3)\r\n if (context && typeof context === 'object' && 'kind' in context) {\r\n const ctx = context as ClassGetterDecoratorContext<This, Value>;\r\n if (ctx.kind !== 'getter') {\r\n throw new Error('@computed can only be used on getters');\r\n }\r\n\r\n const originalGetter = targetOrGetter as (this: This) => Value;\r\n const propertyKey = ctx.name as string;\r\n const cacheKey = `_computed_cache_${propertyKey}`;\r\n const dirtyKey = `_computed_dirty_${propertyKey}`;\r\n\r\n return function(this: This): Value {\r\n const instance = this as Record<string, unknown>;\r\n // Initialize as dirty on first access\r\n if (instance[dirtyKey] === undefined) {\r\n instance[dirtyKey] = true;\r\n }\r\n\r\n // Recompute if dirty\r\n if (instance[dirtyKey] === true) {\r\n instance[cacheKey] = originalGetter.call(this);\r\n instance[dirtyKey] = false;\r\n }\r\n\r\n return instance[cacheKey] as Value;\r\n };\r\n }\r\n\r\n // Legacy decorator\r\n const propertyKey = context as string;\r\n if (!descriptor) {\r\n throw new Error('@computed requires a property descriptor');\r\n }\r\n\r\n const originalGetter = descriptor.get;\r\n\r\n if (!originalGetter) {\r\n throw new Error('@computed can only be used on getters');\r\n }\r\n\r\n const cacheKey = `_computed_cache_${propertyKey}`;\r\n const dirtyKey = `_computed_dirty_${propertyKey}`;\r\n\r\n return {\r\n get(this: unknown) {\r\n const instance = this as Record<string, unknown>;\r\n // Initialize as dirty on first access\r\n if (instance[dirtyKey] === undefined) {\r\n instance[dirtyKey] = true;\r\n }\r\n\r\n // Recompute if dirty\r\n if (instance[dirtyKey] === true) {\r\n instance[cacheKey] = originalGetter.call(this);\r\n instance[dirtyKey] = false;\r\n }\r\n\r\n return instance[cacheKey];\r\n },\r\n enumerable: descriptor.enumerable,\r\n configurable: descriptor.configurable,\r\n };\r\n }\r\n\r\n /**\r\n * Watch decorator - watches for property changes\r\n * Usage: @watch('propertyName') onPropertyChange(newValue, oldValue) {}\r\n */\r\n export function watch(propertyName: string) {\r\n function decorator<This, Args extends unknown[], Return>(\r\n originalMethod: (this: This, ...args: Args) => Return,\r\n context: ClassMethodDecoratorContext<This, (this: This, ...args: Args) => Return>\r\n ): void;\r\n function decorator(\r\n target: Record<string, unknown>,\r\n context: string,\r\n descriptor: PropertyDescriptor\r\n ): PropertyDescriptor;\r\n function decorator<This, Args extends unknown[], Return>(\r\n targetOrMethod: Record<string, unknown> | ((this: This, ...args: Args) => Return),\r\n context: string | ClassMethodDecoratorContext<This, (this: This, ...args: Args) => Return>,\r\n descriptor?: PropertyDescriptor\r\n ): PropertyDescriptor | void {\r\n // TypeScript 5+ decorator (Stage 3)\r\n if (context && typeof context === 'object' && 'kind' in context) {\r\n if (context.kind !== 'method') {\r\n throw new Error('@watch can only be used on methods');\r\n }\r\n\r\n const methodName = context.name as string;\r\n\r\n context.addInitializer(function(this: unknown) {\r\n const instance = this as ComponentInstance;\r\n if (!instance.constructor.__watchers__) {\r\n instance.constructor.__watchers__ = {};\r\n }\r\n if (!instance.constructor.__watchers__[propertyName]) {\r\n instance.constructor.__watchers__[propertyName] = [];\r\n }\r\n if (!instance.constructor.__watchers__[propertyName].includes(methodName)) {\r\n instance.constructor.__watchers__[propertyName].push(methodName);\r\n }\r\n });\r\n\r\n return;\r\n }\r\n\r\n // Legacy decorator\r\n const methodName = context as string;\r\n if (!descriptor) {\r\n throw new Error('@watch requires a property descriptor');\r\n }\r\n\r\n const target = targetOrMethod as Record<string, unknown>;\r\n const targetConstructor = (target as { constructor: ComponentMetadata }).constructor;\r\n if (!targetConstructor.__watchers__) {\r\n targetConstructor.__watchers__ = {};\r\n }\r\n if (!targetConstructor.__watchers__[propertyName]) {\r\n targetConstructor.__watchers__[propertyName] = [];\r\n }\r\n if (!targetConstructor.__watchers__[propertyName].includes(methodName)) {\r\n targetConstructor.__watchers__[propertyName].push(methodName);\r\n }\r\n\r\n return descriptor;\r\n }\r\n\r\n return decorator;\r\n }\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝","// src/mod/components/smart-form.ts\r\n//\r\n// Made with ❤️ by Maysara.\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ PACK ════════════════════════════════════════╗\r\n\r\n import { Component } from '../core/component';\r\n import { html } from '@je-es/vdom';\r\n import type { FormFieldOption, VNode } from '../../types';\r\n import { css } from '../core/styles';\r\n import { state } from '../core/decorators';\r\n import { api } from '@je-es/capi';\r\n import type { FormFieldConfig, ValidationRule } from '../../types';\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ TYPE ════════════════════════════════════════╗\r\n\r\n export type { FormFieldConfig, ValidationRule };\r\n\r\n export interface FormConfig {\r\n fields: FormFieldConfig[];\r\n endpoint?: string;\r\n method?: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';\r\n onSubmit?: (data: Record<string, unknown>, event: Event) => void | Promise<void>;\r\n onSuccess?: (data: unknown) => void;\r\n onError?: (error: unknown) => void;\r\n submitButton?: {\r\n label?: string;\r\n loadingLabel?: string;\r\n className?: string;\r\n };\r\n className?: string;\r\n autoValidate?: boolean;\r\n }\r\n\r\n export interface FormField extends FormFieldConfig {\r\n error?: string;\r\n touched?: boolean;\r\n }\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ CORE ════════════════════════════════════════╗\r\n\r\n /**\r\n * SmartForm Component\r\n * Auto-validation, CSRF protection, API submission\r\n */\r\n export class SmartFormComponent extends Component<FormConfig> {\r\n // @ts-expect-error - TypeScript decorator limitation with class property types\r\n @state fields: FormField[] = [];\r\n // @ts-expect-error - TypeScript decorator limitation with class property types\r\n @state formData: Record<string, unknown> = {};\r\n // @ts-expect-error - TypeScript decorator limitation with class property types\r\n @state isSubmitting = false;\r\n // @ts-expect-error - TypeScript decorator limitation with class property types\r\n @state submitError = '';\r\n // @ts-expect-error - TypeScript decorator limitation with class property types\r\n @state submitSuccess = false;\r\n\r\n constructor(props: FormConfig) {\r\n super(props);\r\n\r\n // Initialize fields immediately in constructor\r\n this.fields = this.props.fields.map((field: FormFieldConfig) => ({\r\n ...field,\r\n error: undefined,\r\n touched: false,\r\n })) as FormField[];\r\n\r\n // Initialize form data\r\n for (const field of this.fields) {\r\n this.formData[field.name] = field.value || '';\r\n }\r\n }\r\n\r\n onMount(): void {\r\n // console.log('📝 SmartForm mounted with', this.fields.length, 'fields');\r\n }\r\n\r\n /**\r\n * Handle field change\r\n */\r\n handleChange(fieldName: string, value: unknown): void {\r\n this.formData[fieldName] = value;\r\n\r\n // Auto-validate if enabled\r\n const field = this.fields.find(f => f.name === fieldName);\r\n if (field && this.props.autoValidate) {\r\n field.error = this.validateField(field, value);\r\n field.touched = true;\r\n }\r\n\r\n this.update();\r\n }\r\n\r\n /**\r\n * Handle field blur\r\n */\r\n handleBlur(fieldName: string): void {\r\n const field = this.fields.find(f => f.name === fieldName);\r\n if (field) {\r\n field.touched = true;\r\n field.error = this.validateField(field, this.formData[fieldName]);\r\n this.update();\r\n }\r\n }\r\n\r\n /**\r\n * Validate single field\r\n */\r\n validateField(field: FormField, value: unknown): string | undefined {\r\n const validation = field.validation;\r\n if (!validation) return undefined;\r\n\r\n // Required\r\n if (validation.required && !value) {\r\n return validation.message || `${field.label || field.name} is required`;\r\n }\r\n\r\n if (!value) return undefined;\r\n\r\n // Convert to string for string validations\r\n const stringValue = String(value);\r\n\r\n // Min length\r\n if (validation.minLength && stringValue.length < validation.minLength) {\r\n return validation.message || `Minimum ${validation.minLength} characters required`;\r\n }\r\n\r\n // Max length\r\n if (validation.maxLength && stringValue.length > validation.maxLength) {\r\n return validation.message || `Maximum ${validation.maxLength} characters allowed`;\r\n }\r\n\r\n // Min value\r\n if (validation.min !== undefined && Number(value) < validation.min) {\r\n return validation.message || `Minimum value is ${validation.min}`;\r\n }\r\n\r\n // Max value\r\n if (validation.max !== undefined && Number(value) > validation.max) {\r\n return validation.message || `Maximum value is ${validation.max}`;\r\n }\r\n\r\n // Pattern\r\n if (validation.pattern && !validation.pattern.test(stringValue)) {\r\n return validation.message || 'Invalid format';\r\n }\r\n\r\n // Email\r\n if (validation.email && !/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(stringValue)) {\r\n return validation.message || 'Invalid email address';\r\n }\r\n\r\n // URL\r\n if (validation.url && !/^https?:\\/\\/.+/.test(stringValue)) {\r\n return validation.message || 'Invalid URL';\r\n }\r\n\r\n // Custom validation\r\n if (validation.custom) {\r\n const result = validation.custom(value);\r\n if (result !== true) {\r\n return typeof result === 'string' ? result : 'Validation failed';\r\n }\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Validate all fields\r\n */\r\n validateForm(): boolean {\r\n let isValid = true;\r\n\r\n for (const field of this.fields) {\r\n const error = this.validateField(field, this.formData[field.name]);\r\n field.error = error;\r\n field.touched = true;\r\n\r\n if (error) {\r\n isValid = false;\r\n }\r\n }\r\n\r\n this.update();\r\n return isValid;\r\n }\r\n\r\n /**\r\n * Handle form submission\r\n */\r\n async handleSubmit(event: Event): Promise<void> {\r\n event.preventDefault();\r\n\r\n // Validate form\r\n if (!this.validateForm()) {\r\n // Focus first error field\r\n const firstErrorField = this.fields.find(f => f.error);\r\n if (firstErrorField) {\r\n const element = document.querySelector(`[name=\"${firstErrorField.name}\"]`) as HTMLElement;\r\n element?.focus();\r\n }\r\n return;\r\n }\r\n\r\n this.isSubmitting = true;\r\n this.submitError = '';\r\n this.submitSuccess = false;\r\n this.update();\r\n\r\n try {\r\n // Custom submit handler\r\n if (this.props.onSubmit) {\r\n await this.props.onSubmit(this.formData, event);\r\n }\r\n // API submission\r\n else if (this.props.endpoint) {\r\n const response = await api({\r\n method: this.props.method || 'POST',\r\n url: this.props.endpoint,\r\n data: this.formData,\r\n });\r\n\r\n this.submitSuccess = true;\r\n\r\n if (this.props.onSuccess) {\r\n this.props.onSuccess(response.data);\r\n }\r\n }\r\n\r\n } catch (error: unknown) {\r\n const errorMessage = error instanceof Error ? error.message : 'Submission failed';\r\n this.submitError = errorMessage;\r\n\r\n if (this.props.onError) {\r\n this.props.onError(error);\r\n }\r\n } finally {\r\n this.isSubmitting = false;\r\n this.update();\r\n }\r\n }\r\n\r\n /**\r\n * Render form field\r\n */\r\n renderField(field: FormField): VNode {\r\n const value = this.formData[field.name] || '';\r\n const showError = field.touched && field.error;\r\n\r\n switch (field.type) {\r\n case 'textarea': {\r\n return html`\r\n <div class=\"form-field ${field.className || ''}\">\r\n ${field.label ? html`<label for=${field.name}>${field.label}</label>` : ''}\r\n <textarea\r\n id=${field.name}\r\n name=${field.name}\r\n placeholder=${field.placeholder || ''}\r\n value=${String(value)}\r\n disabled=${String(field.disabled || this.isSubmitting)}\r\n oninput=${(e: Event) => {\r\n const target = e.target as HTMLTextAreaElement;\r\n this.handleChange(field.name, target.value);\r\n }}\r\n onblur=${() => this.handleBlur(field.name)}\r\n ></textarea>\r\n ${showError ? html`<span class=\"error\">${field.error}</span>` : ''}\r\n </div>\r\n ` as VNode;\r\n }\r\n\r\n case 'select': {\r\n const options = field.options || [];\r\n const optionNodes = options.map((opt: FormFieldOption) => html`\r\n <option value=${String(opt.value)}>${opt.label}</option>\r\n `);\r\n\r\n return html`\r\n <div class=\"form-field ${field.className || ''}\">\r\n ${field.label ? html`<label for=${field.name}>${field.label}</label>` : ''}\r\n <select\r\n id=${field.name}\r\n name=${field.name}\r\n value=${String(value)}\r\n disabled=${String(field.disabled || this.isSubmitting)}\r\n onchange=${(e: Event) => {\r\n const target = e.target as HTMLSelectElement;\r\n this.handleChange(field.name, target.value);\r\n }}\r\n onblur=${() => this.handleBlur(field.name)}\r\n >\r\n <option value=\"\">Select...</option>\r\n ${optionNodes}\r\n </select>\r\n ${showError ? html`<span class=\"error\">${field.error}</span>` : ''}\r\n </div>\r\n ` as VNode;\r\n }\r\n\r\n case 'checkbox': {\r\n return html`\r\n <div class=\"form-field form-field-checkbox ${field.className || ''}\">\r\n <label>\r\n <input\r\n type=\"checkbox\"\r\n id=${field.name}\r\n name=${field.name}\r\n checked=${String(value)}\r\n disabled=${String(field.disabled || this.isSubmitting)}\r\n onchange=${(e: Event) => {\r\n const target = e.target as HTMLInputElement;\r\n this.handleChange(field.name, target.checked);\r\n }}\r\n />\r\n ${field.label || ''}\r\n </label>\r\n ${showError ? html`<span class=\"error\">${field.error}</span>` : ''}\r\n </div>\r\n ` as VNode;\r\n }\r\n\r\n default: {\r\n return html`\r\n <div class=\"form-field ${field.className || ''}\">\r\n ${field.label ? html`<label for=\"${field.name}\">${field.label}</label>` : ''}\r\n <input\r\n type=\"${field.type || 'text'}\"\r\n id=\"${field.name}\"\r\n name=\"${field.name}\"\r\n placeholder=\"${field.placeholder || ''}\"\r\n value=\"${String(value)}\"\r\n oninput=${(e: Event) => {\r\n const target = e.target as HTMLInputElement;\r\n this.handleChange(field.name, target.value);\r\n }}\r\n onblur=${() => this.handleBlur(field.name)}\r\n />\r\n ${showError ? html`<span class=\"error\">${field.error}</span>` : ''}\r\n </div>\r\n ` as VNode;\r\n }\r\n }\r\n }\r\n\r\n render(): VNode {\r\n const submitButton = this.props.submitButton || {};\r\n\r\n // Render all fields into an array first\r\n const fieldNodes = this.fields.map((field: FormField) => this.renderField(field));\r\n\r\n return html`\r\n <form\r\n class=\"smart-form ${this.props.className || ''}\"\r\n onsubmit=${(e: Event) => this.handleSubmit(e)}\r\n >\r\n ${this.submitError ? html`\r\n <div class=\"alert alert-error\">${this.submitError}</div>\r\n ` : ''}\r\n\r\n ${this.submitSuccess ? html`\r\n <div class=\"alert alert-success\">Submitted successfully!</div>\r\n ` : ''}\r\n\r\n ${fieldNodes}\r\n\r\n <button\r\n type=\"submit\"\r\n class=\"submit-button ${submitButton.className || ''}\"\r\n disabled=${String(this.isSubmitting)}\r\n >\r\n ${this.isSubmitting\r\n ? (submitButton.loadingLabel || 'Submitting...')\r\n : (submitButton.label || 'Submit')\r\n }\r\n </button>\r\n </form>\r\n ` as VNode;\r\n }\r\n\r\n styles(): string {\r\n return css`\r\n .smart-form {\r\n max-width: 100%;\r\n }\r\n .form-field {\r\n margin-bottom: 1rem;\r\n }\r\n .form-field label {\r\n display: block;\r\n margin-bottom: 0.5rem;\r\n font-weight: 500;\r\n }\r\n .form-field input,\r\n .form-field textarea,\r\n .form-field select {\r\n width: 100%;\r\n padding: 0.5rem;\r\n border: 1px solid #d1d5db;\r\n border-radius: 0.375rem;\r\n font-size: 1rem;\r\n }\r\n .form-field input:focus,\r\n .form-field textarea:focus,\r\n .form-field select:focus {\r\n outline: none;\r\n border-color: #3b82f6;\r\n box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\r\n }\r\n .form-field .error {\r\n display: block;\r\n margin-top: 0.25rem;\r\n color: #ef4444;\r\n font-size: 0.875rem;\r\n }\r\n .form-field-checkbox label {\r\n display: flex;\r\n align-items: center;\r\n gap: 0.5rem;\r\n }\r\n .form-field-checkbox input[type=\"checkbox\"] {\r\n width: auto;\r\n }\r\n .submit-button {\r\n width: 100%;\r\n padding: 0.75rem 1rem;\r\n background: #3b82f6;\r\n color: white;\r\n border: none;\r\n border-radius: 0.375rem;\r\n font-size: 1rem;\r\n font-weight: 500;\r\n cursor: pointer;\r\n transition: background 0.2s;\r\n }\r\n .submit-button:hover:not(:disabled) {\r\n background: #2563eb;\r\n }\r\n .submit-button:disabled {\r\n opacity: 0.6;\r\n cursor: not-allowed;\r\n }\r\n .alert {\r\n padding: 0.75rem;\r\n border-radius: 0.375rem;\r\n margin-bottom: 1rem;\r\n }\r\n .alert-error {\r\n background: #fee2e2;\r\n color: #dc2626;\r\n }\r\n .alert-success {\r\n background: #d1fae5;\r\n color: #065f46;\r\n }\r\n `;\r\n }\r\n }\r\n\r\n /**\r\n * SmartForm helper function\r\n */\r\n export function SmartForm(config: FormConfig): VNode {\r\n const form = new SmartFormComponent(config);\r\n return form.render();\r\n }\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝","// src/mod/help.ts\r\n//\r\n// Made with ❤️ by Maysara.\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ PACK ════════════════════════════════════════╗\r\n\r\n import type { ClassValue } from '../types';\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ CORE ════════════════════════════════════════╗\r\n\r\n /**\r\n * Debounce function\r\n * Delays function execution until after wait time\r\n */\r\n export function debounce<T extends (...args: never[]) => unknown>(\r\n fn: T,\r\n delay: number\r\n ): (...args: Parameters<T>) => void {\r\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\r\n\r\n return (...args: Parameters<T>): void => {\r\n if (timeoutId !== null) {\r\n clearTimeout(timeoutId);\r\n }\r\n\r\n timeoutId = setTimeout(() => {\r\n timeoutId = null;\r\n fn(...args);\r\n }, delay);\r\n };\r\n }\r\n\r\n /**\r\n * Throttle function\r\n * Limits function execution to once per time period\r\n */\r\n export function throttle<T extends (...args: never[]) => unknown>(\r\n fn: T,\r\n delay: number\r\n ): (...args: Parameters<T>) => void {\r\n let lastCall = 0;\r\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\r\n\r\n return (...args: Parameters<T>): void => {\r\n const now = Date.now();\r\n const timeSinceLastCall = now - lastCall;\r\n\r\n if (timeSinceLastCall >= delay) {\r\n lastCall = now;\r\n fn(...args);\r\n } else if (!timeoutId) {\r\n // Schedule execution at the end of the throttle period\r\n timeoutId = setTimeout(() => {\r\n lastCall = Date.now();\r\n timeoutId = null;\r\n fn(...args);\r\n }, delay - timeSinceLastCall);\r\n }\r\n };\r\n }\r\n\r\n /**\r\n * Class names utility\r\n * Combines class names conditionally\r\n */\r\n export function classNames(...classes: ClassValue[]): string {\r\n const result: string[] = [];\r\n\r\n for (const cls of classes) {\r\n if (!cls) continue;\r\n\r\n if (typeof cls === 'string') {\r\n result.push(cls);\r\n } else if (typeof cls === 'object') {\r\n for (const [key, value] of Object.entries(cls)) {\r\n if (value) {\r\n result.push(key);\r\n }\r\n }\r\n }\r\n }\r\n\r\n return result.join(' ');\r\n }\r\n\r\n /**\r\n * Format date\r\n * Simple date formatting utility with validation\r\n */\r\n export function formatDate(date: Date | string | number, format: string = 'YYYY-MM-DD'): string {\r\n const d = date instanceof Date ? date : new Date(date);\r\n\r\n // Validate date\r\n if (isNaN(d.getTime())) {\r\n throw new Error('Invalid date provided to formatDate');\r\n }\r\n\r\n const year = d.getFullYear();\r\n const month = String(d.getMonth() + 1).padStart(2, '0');\r\n const day = String(d.getDate()).padStart(2, '0');\r\n const hours = String(d.getHours()).padStart(2, '0');\r\n const minutes = String(d.getMinutes()).padStart(2, '0');\r\n const seconds = String(d.getSeconds()).padStart(2, '0');\r\n\r\n return format\r\n .replace('YYYY', String(year))\r\n .replace('MM', month)\r\n .replace('DD', day)\r\n .replace('HH', hours)\r\n .replace('mm', minutes)\r\n .replace('ss', seconds);\r\n }\r\n\r\n /**\r\n * Deep clone object\r\n * Handles Date, Array, and nested objects\r\n */\r\n export function deepClone<T>(obj: T): T {\r\n if (obj === null || typeof obj !== 'object') {\r\n return obj;\r\n }\r\n\r\n if (obj instanceof Date) {\r\n return new Date(obj.getTime()) as T;\r\n }\r\n\r\n if (Array.isArray(obj)) {\r\n return obj.map(item => deepClone(item)) as T;\r\n }\r\n\r\n if (obj instanceof RegExp) {\r\n return new RegExp(obj.source, obj.flags) as T;\r\n }\r\n\r\n if (obj instanceof Map) {\r\n const clonedMap = new Map();\r\n obj.forEach((value, key) => {\r\n clonedMap.set(deepClone(key), deepClone(value));\r\n });\r\n return clonedMap as T;\r\n }\r\n\r\n if (obj instanceof Set) {\r\n const clonedSet = new Set();\r\n obj.forEach(value => {\r\n clonedSet.add(deepClone(value));\r\n });\r\n return clonedSet as T;\r\n }\r\n\r\n if (Object.prototype.toString.call(obj) === '[object Object]') {\r\n const cloned: Record<string, unknown> = {};\r\n for (const key in obj) {\r\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\r\n cloned[key] = deepClone((obj as Record<string, unknown>)[key]);\r\n }\r\n }\r\n return cloned as T;\r\n }\r\n\r\n return obj;\r\n }\r\n\r\n /**\r\n * Merge objects deeply\r\n * Properly handles nested objects and arrays\r\n */\r\n export function deepMerge<T extends Record<string, unknown>>(\r\n target: T,\r\n ...sources: Partial<T>[]\r\n ): T {\r\n if (!sources.length) return target;\r\n\r\n const source = sources.shift();\r\n if (!source) return target;\r\n\r\n if (isObject(target) && isObject(source)) {\r\n for (const key in source) {\r\n if (Object.prototype.hasOwnProperty.call(source, key)) {\r\n const sourceValue = source[key];\r\n const targetValue = target[key];\r\n\r\n if (sourceValue !== undefined) {\r\n if (isObject(sourceValue) && !Array.isArray(sourceValue)) {\r\n if (!targetValue || !isObject(targetValue)) {\r\n target[key] = {} as T[Extract<keyof T, string>];\r\n }\r\n deepMerge(target[key] as Record<string, unknown>, sourceValue as Record<string, unknown>);\r\n } else {\r\n target[key] = sourceValue as T[Extract<keyof T, string>];\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n return deepMerge(target, ...sources);\r\n }\r\n\r\n /**\r\n * Helper to check if value is a plain object\r\n */\r\n function isObject(item: unknown): item is Record<string, unknown> {\r\n return item !== null && typeof item === 'object' && !Array.isArray(item);\r\n }\r\n\r\n /**\r\n * Generate unique ID with better entropy\r\n */\r\n let uniqueIdCounter = 0;\r\n\r\n export function uniqueId(prefix: string = 'id'): string {\r\n const timestamp = Date.now().toString(36);\r\n const randomPart = Math.random().toString(36).substring(2, 11);\r\n uniqueIdCounter = (uniqueIdCounter || 0) + 1;\r\n const counter = uniqueIdCounter.toString(36);\r\n return `${prefix}_${timestamp}_${randomPart}_${counter}`;\r\n }\r\n\r\n /**\r\n * Sleep/delay utility\r\n */\r\n export function sleep(ms: number): Promise<void> {\r\n if (ms < 0) {\r\n throw new Error('Sleep duration must be non-negative');\r\n }\r\n return new Promise(resolve => setTimeout(resolve, ms));\r\n }\r\n\r\n /**\r\n * Check if value is empty\r\n */\r\n export function isEmpty(value: unknown): boolean {\r\n if (value == null) return true;\r\n if (typeof value === 'string') return value.trim().length === 0;\r\n if (Array.isArray(value)) return value.length === 0;\r\n if (value instanceof Map || value instanceof Set) return value.size === 0;\r\n if (typeof value === 'object') return Object.keys(value).length === 0;\r\n return false;\r\n }\r\n\r\n /**\r\n * Capitalize first letter\r\n */\r\n export function capitalize(str: string): string {\r\n if (!str) return '';\r\n return str.charAt(0).toUpperCase() + str.slice(1);\r\n }\r\n\r\n /**\r\n * Convert to kebab-case\r\n */\r\n export function kebabCase(str: string): string {\r\n if (!str) return '';\r\n return str\r\n .replace(/([a-z])([A-Z])/g, '$1-$2')\r\n .replace(/[\\s_]+/g, '-')\r\n .toLowerCase();\r\n }\r\n\r\n /**\r\n * Convert to camelCase\r\n */\r\n export function camelCase(str: string): string {\r\n if (!str) return '';\r\n return str\r\n .replace(/[-_\\s]+(.)?/g, (_, char: string) => (char ? char.toUpperCase() : ''))\r\n .replace(/^[A-Z]/, char => char.toLowerCase());\r\n }\r\n\r\n /**\r\n * Convert to PascalCase\r\n */\r\n export function pascalCase(str: string): string {\r\n if (!str) return '';\r\n const camel = camelCase(str);\r\n return camel.charAt(0).toUpperCase() + camel.slice(1);\r\n }\r\n\r\n /**\r\n * Truncate string\r\n */\r\n export function truncate(str: string, length: number, suffix: string = '...'): string {\r\n if (!str || str.length <= length) return str;\r\n return str.substring(0, length - suffix.length) + suffix;\r\n }\r\n\r\n /**\r\n * Parse query string\r\n */\r\n export function parseQuery(queryString: string): Record<string, string | string[]> {\r\n const query: Record<string, string | string[]> = {};\r\n const cleaned = queryString.replace(/^\\?/, '');\r\n\r\n if (!cleaned) return query;\r\n\r\n const pairs = cleaned.split('&');\r\n\r\n for (const pair of pairs) {\r\n const [key, value] = pair.split('=').map(decodeURIComponent);\r\n if (!key) continue;\r\n\r\n const decodedValue = value || '';\r\n\r\n // Handle array parameters (key[]=value)\r\n if (key.endsWith('[]')) {\r\n const actualKey = key.slice(0, -2);\r\n if (!query[actualKey]) {\r\n query[actualKey] = [];\r\n }\r\n (query[actualKey] as string[]).push(decodedValue);\r\n } else {\r\n query[key] = decodedValue;\r\n }\r\n }\r\n\r\n return query;\r\n }\r\n\r\n /**\r\n * Stringify object to query string\r\n */\r\n export function stringifyQuery(obj: Record<string, unknown>): string {\r\n const pairs: string[] = [];\r\n\r\n for (const [key, value] of Object.entries(obj)) {\r\n if (value == null) continue;\r\n\r\n if (Array.isArray(value)) {\r\n // Handle arrays\r\n for (const item of value) {\r\n if (item != null) {\r\n pairs.push(`${encodeURIComponent(key)}[]=${encodeURIComponent(String(item))}`);\r\n }\r\n }\r\n } else {\r\n pairs.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`);\r\n }\r\n }\r\n\r\n return pairs.length > 0 ? `?${pairs.join('&')}` : '';\r\n }\r\n\r\n /**\r\n * Clamp a number between min and max\r\n */\r\n export function clamp(value: number, min: number, max: number): number {\r\n return Math.min(Math.max(value, min), max);\r\n }\r\n\r\n /**\r\n * Check if code is running in browser\r\n */\r\n export function isBrowser(): boolean {\r\n return typeof window !== 'undefined' && typeof document !== 'undefined';\r\n }\r\n\r\n /**\r\n * Safe JSON parse with fallback\r\n */\r\n export function safeJsonParse<T = unknown>(json: string, fallback: T): T {\r\n try {\r\n return JSON.parse(json) as T;\r\n } catch {\r\n return fallback;\r\n }\r\n }\r\n\r\n /**\r\n * Export all utilities\r\n */\r\n export const utils = {\r\n debounce,\r\n throttle,\r\n classNames,\r\n formatDate,\r\n deepClone,\r\n deepMerge,\r\n uniqueId,\r\n sleep,\r\n isEmpty,\r\n capitalize,\r\n kebabCase,\r\n camelCase,\r\n pascalCase,\r\n truncate,\r\n parseQuery,\r\n stringifyQuery,\r\n clamp,\r\n isBrowser,\r\n safeJsonParse,\r\n };\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝","// src/mod/core/context.ts\r\n//\r\n// Made with ❤️ by Maysara.\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ PACK ════════════════════════════════════════╗\r\n\r\n import { Component } from './component';\r\n import { html, type VNode } from '@je-es/vdom';\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ TYPE ════════════════════════════════════════╗\r\n\r\n export type ContextSubscriber<T> = (value: T) => void;\r\n\r\n export interface ProviderProps<T> {\r\n context: Context<T>;\r\n value: T;\r\n children: VNode | VNode[];\r\n }\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ CORE ════════════════════════════════════════╗\r\n\r\n /**\r\n * Context class for sharing data across component tree\r\n */\r\n export class Context<T = unknown> {\r\n private _value: T;\r\n private _subscribers = new Set<ContextSubscriber<T>>();\r\n private _defaultValue: T;\r\n\r\n constructor(defaultValue: T) {\r\n this._value = defaultValue;\r\n this._defaultValue = defaultValue;\r\n }\r\n\r\n get value(): T {\r\n return this._value;\r\n }\r\n\r\n set value(newValue: T) {\r\n if (this._value !== newValue) {\r\n this._value = newValue;\r\n this._notify();\r\n }\r\n }\r\n\r\n subscribe(subscriber: ContextSubscriber<T>): () => void {\r\n this._subscribers.add(subscriber);\r\n\r\n // Immediately call with current value (wrapped in try-catch)\r\n try {\r\n subscriber(this._value);\r\n } catch (error) {\r\n console.error('Context subscriber error:', error);\r\n // Don't throw - the test expects this to not throw\r\n }\r\n\r\n // Return unsubscribe function\r\n return () => {\r\n this._subscribers.delete(subscriber);\r\n };\r\n }\r\n\r\n reset(): void {\r\n this.value = this._defaultValue;\r\n }\r\n\r\n update(updater: (prev: T) => T): void {\r\n this.value = updater(this._value);\r\n }\r\n\r\n private _notify(): void {\r\n for (const subscriber of this._subscribers) {\r\n try {\r\n subscriber(this._value);\r\n } catch (error) {\r\n console.error('Context subscriber error:', error);\r\n // Continue notifying other subscribers\r\n }\r\n }\r\n }\r\n\r\n get subscriberCount(): number {\r\n return this._subscribers.size;\r\n }\r\n }\r\n\r\n /**\r\n * Create a new context\r\n */\r\n export function createContext<T>(defaultValue: T): Context<T> {\r\n return new Context(defaultValue);\r\n }\r\n\r\n export class Provider<T> extends Component<ProviderProps<T>> {\r\n onMount(): void {\r\n // Update context value\r\n this.props.context.value = this.props.value;\r\n }\r\n\r\n onUpdate(): void {\r\n // Update context when props change\r\n this.props.context.value = this.props.value;\r\n }\r\n\r\n onUnmount(): void {\r\n // Optionally reset context on unmount\r\n // this.props.context.reset();\r\n }\r\n\r\n render(): VNode {\r\n const children = Array.isArray(this.props.children)\r\n ? this.props.children\r\n : [this.props.children];\r\n\r\n return html`\r\n <div class=\"context-provider\" style=\"display: contents;\">\r\n ${children}\r\n </div>\r\n `;\r\n }\r\n }\r\n\r\n /**\r\n * Hook-like function to use context in components\r\n * Call this in your component to get context value\r\n */\r\n export function useContext<T>(context: Context<T>, component: Component): T {\r\n // Subscribe to context changes\r\n const unsubscribe = context.subscribe(() => {\r\n if (component.isMounted) {\r\n component.update();\r\n }\r\n });\r\n\r\n // Cleanup on unmount\r\n component.subscribe(() => unsubscribe);\r\n\r\n return context.value;\r\n }\r\n\r\n /**\r\n * Combined context for complex state management\r\n */\r\n export class CombinedContext<T extends Record<string, unknown>> {\r\n private contexts = new Map<keyof T, Context<T[keyof T]>>();\r\n\r\n constructor(initialValues: T) {\r\n for (const [key, value] of Object.entries(initialValues)) {\r\n this.contexts.set(key as keyof T, new Context(value) as unknown as Context<T[keyof T]>);\r\n }\r\n }\r\n\r\n get<K extends keyof T>(key: K): Context<T[K]> {\r\n const context = this.contexts.get(key);\r\n if (!context) {\r\n throw new Error(`Context key \"${String(key)}\" not found`);\r\n }\r\n return context as unknown as Context<T[K]>;\r\n }\r\n\r\n set<K extends keyof T>(key: K, value: T[K]): void {\r\n const context = this.contexts.get(key);\r\n if (context) {\r\n (context as unknown as Context<T[K]>).value = value;\r\n }\r\n }\r\n\r\n subscribe<K extends keyof T>(\r\n key: K,\r\n subscriber: ContextSubscriber<T[K]>\r\n ): () => void {\r\n const context = this.contexts.get(key);\r\n if (!context) {\r\n throw new Error(`Context key \"${String(key)}\" not found`);\r\n }\r\n return (context as unknown as Context<T[K]>).subscribe(subscriber);\r\n }\r\n\r\n reset(): void {\r\n for (const context of this.contexts.values()) {\r\n context.reset();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Create combined context\r\n */\r\n export function createCombinedContext<T extends Record<string, unknown>>(\r\n initialValues: T\r\n ): CombinedContext<T> {\r\n return new CombinedContext(initialValues);\r\n }\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝\r\n","// src/mod/core/hooks.ts\r\n//\r\n// Made with ❤️ by Maysara.\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ PACK ════════════════════════════════════════╗\r\n\r\n import { Component } from './component';\r\n import type { VNode } from '../../types';\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ TYPE ════════════════════════════════════════╗\r\n\r\n interface HookState {\r\n value: unknown;\r\n deps?: unknown[];\r\n }\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ INIT ════════════════════════════════════════╗\r\n\r\n let currentComponent: Component | null = null;\r\n let currentHookIndex: number = 0;\r\n const hookStates = new WeakMap<Component, HookState[]>();\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ CORE ════════════════════════════════════════╗\r\n\r\n /**\r\n * Set current component context for hooks\r\n */\r\n export function setHookContext(component: Component): void {\r\n currentComponent = component;\r\n currentHookIndex = 0;\r\n }\r\n\r\n /**\r\n * Clear hook context\r\n */\r\n export function clearHookContext(): void {\r\n currentComponent = null;\r\n currentHookIndex = 0;\r\n }\r\n\r\n /**\r\n * Get or create hook states for component\r\n */\r\n function getHookStates(component: Component): HookState[] {\r\n if (!hookStates.has(component)) {\r\n hookStates.set(component, []);\r\n }\r\n return hookStates.get(component)!;\r\n }\r\n\r\n // ─── Core Hooks ───\r\n\r\n /**\r\n * useState hook - manages component state\r\n */\r\n export function useState<T>(initialValue: T | (() => T)): [T, (newValue: T | ((prev: T) => T)) => void] {\r\n if (!currentComponent) {\r\n throw new Error('useState must be called inside a component');\r\n }\r\n\r\n const component = currentComponent;\r\n const hookIndex = currentHookIndex++;\r\n const states = getHookStates(component);\r\n\r\n // Initialize state if first render\r\n if (states[hookIndex] === undefined) {\r\n states[hookIndex] = {\r\n value: typeof initialValue === 'function' ? (initialValue as () => T)() : initialValue\r\n };\r\n }\r\n\r\n const setState = (newValue: T | ((prev: T) => T)) => {\r\n const state = states[hookIndex];\r\n const nextValue = typeof newValue === 'function'\r\n ? (newValue as (prev: T) => T)(state.value as T)\r\n : newValue;\r\n\r\n if (state.value !== nextValue) {\r\n state.value = nextValue;\r\n component.update();\r\n }\r\n };\r\n\r\n return [states[hookIndex].value as T, setState];\r\n }\r\n\r\n /**\r\n * useEffect hook - side effects\r\n */\r\n export function useEffect(\r\n effect: () => void | (() => void),\r\n deps?: unknown[]\r\n ): void {\r\n if (!currentComponent) {\r\n throw new Error('useEffect must be called inside a component');\r\n }\r\n\r\n const component = currentComponent;\r\n const hookIndex = currentHookIndex++;\r\n const states = getHookStates(component);\r\n\r\n const prevState = states[hookIndex];\r\n const hasChanged = !prevState || !deps || !areDepsEqual(prevState.deps, deps);\r\n\r\n if (hasChanged) {\r\n // Cleanup previous effect\r\n if (prevState?.value && typeof prevState.value === 'function') {\r\n try {\r\n (prevState.value as () => void)();\r\n } catch (error) {\r\n console.error('Error in effect cleanup:', error);\r\n }\r\n }\r\n\r\n // Run new effect after a microtask (so it runs after render completes)\r\n Promise.resolve().then(() => {\r\n try {\r\n const cleanup = effect();\r\n\r\n // Store cleanup and deps\r\n states[hookIndex] = {\r\n value: cleanup,\r\n deps: deps ? [...deps] : undefined\r\n };\r\n } catch (error) {\r\n console.error('Error in effect:', error);\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * useMemo hook - memoize expensive computations\r\n */\r\n export function useMemo<T>(\r\n factory: () => T,\r\n deps: unknown[]\r\n ): T {\r\n if (!currentComponent) {\r\n throw new Error('useMemo must be called inside a component');\r\n }\r\n\r\n const hookIndex = currentHookIndex++;\r\n const states = getHookStates(currentComponent);\r\n\r\n const prevState = states[hookIndex];\r\n const hasChanged = !prevState || !areDepsEqual(prevState.deps, deps);\r\n\r\n if (hasChanged) {\r\n states[hookIndex] = {\r\n value: factory(),\r\n deps: [...deps]\r\n };\r\n }\r\n\r\n return states[hookIndex].value as T;\r\n }\r\n\r\n /**\r\n * useCallback hook - memoize callbacks\r\n */\r\n export function useCallback<T extends (...args: unknown[]) => unknown>(\r\n callback: T,\r\n deps: unknown[]\r\n ): T {\r\n return useMemo(() => callback, deps);\r\n }\r\n\r\n /**\r\n * useRef hook - persistent value across renders\r\n */\r\n export function useRef<T>(initialValue: T): { current: T } {\r\n if (!currentComponent) {\r\n throw new Error('useRef must be called inside a component');\r\n }\r\n\r\n const hookIndex = currentHookIndex++;\r\n const states = getHookStates(currentComponent);\r\n\r\n if (states[hookIndex] === undefined) {\r\n states[hookIndex] = {\r\n value: { current: initialValue }\r\n };\r\n }\r\n\r\n return states[hookIndex].value as { current: T };\r\n }\r\n\r\n /**\r\n * useReducer hook - complex state management\r\n */\r\n export function useReducer<S, A>(\r\n reducer: (state: S, action: A) => S,\r\n initialState: S\r\n ): [S, (action: A) => void] {\r\n const [state, setState] = useState(initialState);\r\n\r\n const dispatch = useCallback((action: unknown) => {\r\n setState(prevState => reducer(prevState, action as A));\r\n }, [reducer]) as (action: A) => void;\r\n\r\n return [state, dispatch];\r\n }\r\n\r\n // ─── Custom Hooks ───\r\n\r\n /**\r\n * useLocalStorage hook - sync state with localStorage\r\n */\r\n export function useLocalStorage<T>(\r\n key: string,\r\n initialValue: T\r\n ): [T, (value: T | ((prev: T) => T)) => void] {\r\n // Initialize from localStorage\r\n const [storedValue, setStoredValue] = useState<T>(() => {\r\n try {\r\n const item = window.localStorage.getItem(key);\r\n return item ? JSON.parse(item) as T : initialValue;\r\n } catch (error) {\r\n console.error('Error loading from localStorage:', error);\r\n return initialValue;\r\n }\r\n });\r\n\r\n // Create setValue wrapper (recreated each render, but that's okay)\r\n const setValue = (newValue: T | ((prev: T) => T)) => {\r\n setStoredValue((prevValue: T) => {\r\n const valueToStore = newValue instanceof Function\r\n ? newValue(prevValue)\r\n : newValue;\r\n\r\n // Update localStorage synchronously\r\n try {\r\n window.localStorage.setItem(key, JSON.stringify(valueToStore));\r\n } catch (error) {\r\n console.error('Error saving to localStorage:', error);\r\n }\r\n\r\n return valueToStore;\r\n });\r\n };\r\n\r\n return [storedValue, setValue];\r\n }\r\n\r\n /**\r\n * useDebounce hook - debounce value changes\r\n */\r\n export function useDebounce<T>(value: T, delay: number): T {\r\n const [debouncedValue, setDebouncedValue] = useState(value);\r\n\r\n useEffect(() => {\r\n // Set up the timeout\r\n const handler = setTimeout(() => {\r\n setDebouncedValue(value);\r\n }, delay);\r\n\r\n // Cleanup function that clears the timeout\r\n return () => {\r\n clearTimeout(handler);\r\n };\r\n }, [value, delay]);\r\n\r\n return debouncedValue;\r\n }\r\n\r\n /**\r\n * usePrevious hook - get previous value\r\n */\r\n export function usePrevious<T>(value: T): T | undefined {\r\n const ref = useRef<T | undefined>(undefined);\r\n\r\n // Use effect to update the ref after render\r\n useEffect(() => {\r\n ref.current = value;\r\n });\r\n\r\n // Return the previous value (what ref was BEFORE this render)\r\n const prevValue = ref.current;\r\n\r\n return prevValue;\r\n }\r\n\r\n /**\r\n * useToggle hook - boolean toggle\r\n */\r\n export function useToggle(initialValue: boolean = false): [boolean, () => void] {\r\n const [value, setValue] = useState(initialValue);\r\n\r\n const toggle = useCallback(() => {\r\n setValue(v => !v);\r\n }, []);\r\n\r\n return [value, toggle];\r\n }\r\n\r\n /**\r\n * useInterval hook - setInterval with cleanup\r\n */\r\n export function useInterval(callback: () => void, delay: number | null): void {\r\n const savedCallback = useRef(callback);\r\n\r\n useEffect(() => {\r\n savedCallback.current = callback;\r\n }, [callback]);\r\n\r\n useEffect(() => {\r\n if (delay === null) return;\r\n\r\n const id = setInterval(() => savedCallback.current(), delay);\r\n\r\n return () => clearInterval(id);\r\n }, [delay]);\r\n }\r\n\r\n /**\r\n * useFetch hook - data fetching\r\n */\r\n export function useFetch<T>(\r\n url: string,\r\n options?: RequestInit\r\n ): {\r\n data: T | null;\r\n loading: boolean;\r\n error: Error | null;\r\n refetch: () => void;\r\n } {\r\n const [data, setData] = useState<T | null>(null);\r\n const [loading, setLoading] = useState(true);\r\n const [error, setError] = useState<Error | null>(null);\r\n\r\n const fetchData = useCallback(async () => {\r\n setLoading(true);\r\n setError(null);\r\n\r\n try {\r\n const response = await fetch(url, options);\r\n if (!response.ok) {\r\n throw new Error(`HTTP error! status: ${response.status}`);\r\n }\r\n const json = await response.json() as T;\r\n setData(json);\r\n } catch (e) {\r\n setError(e as Error);\r\n } finally {\r\n setLoading(false);\r\n }\r\n }, [url]);\r\n\r\n useEffect(() => {\r\n fetchData();\r\n }, [fetchData]);\r\n\r\n return { data, loading, error, refetch: fetchData };\r\n }\r\n\r\n /**\r\n * useWindowSize hook - track window dimensions\r\n */\r\n export function useWindowSize(): { width: number; height: number } {\r\n const [size, setSize] = useState({\r\n width: window.innerWidth,\r\n height: window.innerHeight\r\n });\r\n\r\n useEffect(() => {\r\n const handleResize = () => {\r\n setSize({\r\n width: window.innerWidth,\r\n height: window.innerHeight\r\n });\r\n };\r\n\r\n window.addEventListener('resize', handleResize);\r\n return () => window.removeEventListener('resize', handleResize);\r\n }, []);\r\n\r\n return size;\r\n }\r\n\r\n /**\r\n * useEventListener hook - add event listener\r\n */\r\n export function useEventListener<K extends keyof WindowEventMap>(\r\n eventName: K,\r\n handler: (event: WindowEventMap[K]) => void,\r\n element: HTMLElement | Window = window\r\n ): void {\r\n const savedHandler = useRef(handler);\r\n\r\n useEffect(() => {\r\n savedHandler.current = handler;\r\n }, [handler]);\r\n\r\n useEffect(() => {\r\n const isSupported = element && 'addEventListener' in element;\r\n if (!isSupported) return;\r\n\r\n const eventListener = (event: Event) => {\r\n savedHandler.current(event as WindowEventMap[K]);\r\n };\r\n\r\n element.addEventListener(eventName, eventListener);\r\n\r\n return () => {\r\n element.removeEventListener(eventName, eventListener);\r\n };\r\n }, [eventName, element]);\r\n }\r\n\r\n /**\r\n * Create a functional component with hooks\r\n * Returns a component class that can be instantiated\r\n */\r\n export function createFunctionalComponent<P extends Record<string, unknown> = Record<string, unknown>>(\r\n fn: (props: P) => VNode,\r\n displayName?: string\r\n ): new (props?: P) => Component<P> {\r\n class FunctionalComponent extends Component<P> {\r\n render(): VNode {\r\n setHookContext(this);\r\n try {\r\n return fn(this.props) as VNode;\r\n } finally {\r\n clearHookContext();\r\n }\r\n }\r\n }\r\n\r\n if (displayName) {\r\n Object.defineProperty(FunctionalComponent, 'name', { value: displayName });\r\n }\r\n\r\n return FunctionalComponent as new (props?: P) => Component<P>;\r\n }\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ HELP ════════════════════════════════════════╗\r\n\r\n function areDepsEqual(prevDeps: unknown[] | undefined, nextDeps: unknown[]): boolean {\r\n if (!prevDeps || prevDeps.length !== nextDeps.length) {\r\n return false;\r\n }\r\n\r\n for (let i = 0; i < prevDeps.length; i++) {\r\n if (prevDeps[i] !== nextDeps[i]) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝\r\n","// src/main.ts\r\n//\r\n// Made with ❤️ by Maysara.\r\n\r\n\r\n\r\n// ╔════════════════════════════════════════ CORE ════════════════════════════════════════╗\r\n\r\n // Core exports\r\n export { Component } from './mod/core/component';\r\n export { client } from './mod/core/client';\r\n export { router, Router } from './mod/core/router';\r\n export { Store, createStore, createComputedStore, connect } from './mod/core/store';\r\n export { api, http, configureApi, getApiConfig, resetApiConfig, type ApiError } from '@je-es/capi';\r\n export { StyleManager, css } from './mod/core/styles';\r\n export { createElement, html, patch, createDOMElement } from '@je-es/vdom';\r\n\r\n // Decorators\r\n export { state, computed, watch } from './mod/core/decorators';\r\n\r\n // Components\r\n export { SmartFormComponent, SmartForm, type FormConfig } from './mod/components/smart-form';\r\n\r\n // Utilities\r\n export { utils, debounce, throttle, classNames, formatDate, deepClone, deepMerge, uniqueId, sleep, isEmpty, capitalize, kebabCase, camelCase, pascalCase, truncate, parseQuery, stringifyQuery, clamp, isBrowser, safeJsonParse } from './mod/help';\r\n\r\n // Context API\r\n export {\r\n Context,\r\n createContext,\r\n Provider,\r\n useContext,\r\n CombinedContext,\r\n createCombinedContext\r\n } from './mod/core/context';\r\n\r\n // Hooks System\r\n export {\r\n // Core hooks\r\n useState,\r\n useEffect,\r\n useMemo,\r\n useCallback,\r\n useRef,\r\n useReducer,\r\n\r\n // Custom hooks\r\n useLocalStorage,\r\n useDebounce,\r\n usePrevious,\r\n useToggle,\r\n useInterval,\r\n useFetch,\r\n useWindowSize,\r\n useEventListener,\r\n\r\n // Functional components\r\n createFunctionalComponent,\r\n setHookContext,\r\n clearHookContext\r\n } from './mod/core/hooks';\r\n\r\n // VDOM Types\r\n export type { VNode, VNodeProps, ComponentConstructor, VNodeChild } from './types';\r\n\r\n // Client Types\r\n export type { ClientConfig, BuildConfig, AppConfig, StateConfig, FormsConfig, RouterConfig, ApiConfig, DevToolsConfig } from './types';\r\n\r\n // Router Types\r\n export type { Route, RouteConfig, NavigationGuard } from './types';\r\n\r\n // API Types\r\n export type { ApiOptions, ApiResponse, HttpMethod, ApiInterceptors } from './types';\r\n\r\n // Store Types\r\n export type { StoreOptions, StoreSubscriber, StoreMiddleware } from './types';\r\n\r\n // Form Types\r\n export type { FormFieldConfig, ValidationRule, FormFieldOption, FormSubmitHandler } from './types';\r\n\r\n // Scheduler\r\n export { scheduler } from './mod/core/scheduler';\r\n\r\n import { setConfig } from '@je-es/vdom';\r\n\r\n setConfig({\r\n devMode: false, // Enable warnings\r\n sanitizeHTML: true, // XSS protection\r\n // onError: (err) => { // Custom error handler\r\n // console.error('VDOM Error:', err);\r\n // }\r\n });\r\n\r\n// ╚══════════════════════════════════════════════════════════════════════════════════════╝"]}