@but212/atom-effect-jquery 0.31.0 → 0.32.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.
Files changed (78) hide show
  1. package/README.md +32 -28
  2. package/dist/atom-effect-jquery.min.js +9 -5
  3. package/dist/atom-effect-jquery.min.js.map +1 -1
  4. package/dist/bindings/chainable.d.ts +2 -0
  5. package/dist/bindings/chainable.d.ts.map +1 -0
  6. package/dist/bindings/form.d.ts +29 -0
  7. package/dist/bindings/form.d.ts.map +1 -0
  8. package/dist/bindings/input-binding.d.ts +31 -0
  9. package/dist/bindings/input-binding.d.ts.map +1 -0
  10. package/dist/bindings/list/context.d.ts +61 -0
  11. package/dist/bindings/list/context.d.ts.map +1 -0
  12. package/dist/bindings/list/diff.d.ts +32 -0
  13. package/dist/bindings/list/diff.d.ts.map +1 -0
  14. package/dist/bindings/list/dom.d.ts +63 -0
  15. package/dist/bindings/list/dom.d.ts.map +1 -0
  16. package/dist/bindings/list/index.d.ts +2 -0
  17. package/dist/bindings/list/index.d.ts.map +1 -0
  18. package/dist/bindings/list/types.d.ts +93 -0
  19. package/dist/bindings/list/types.d.ts.map +1 -0
  20. package/dist/bindings/list/utils.d.ts +33 -0
  21. package/dist/bindings/list/utils.d.ts.map +1 -0
  22. package/dist/bindings/mount.d.ts +2 -0
  23. package/dist/bindings/mount.d.ts.map +1 -0
  24. package/dist/bindings/unified.d.ts +135 -0
  25. package/dist/bindings/unified.d.ts.map +1 -0
  26. package/dist/constants.d.ts +108 -0
  27. package/dist/constants.d.ts.map +1 -0
  28. package/dist/core/dom.d.ts +26 -0
  29. package/dist/core/dom.d.ts.map +1 -0
  30. package/dist/core/effect-factory.d.ts +34 -0
  31. package/dist/core/effect-factory.d.ts.map +1 -0
  32. package/dist/core/jquery-patch.d.ts +12 -0
  33. package/dist/core/jquery-patch.d.ts.map +1 -0
  34. package/dist/core/namespace.d.ts +11 -0
  35. package/dist/core/namespace.d.ts.map +1 -0
  36. package/dist/core/navigation.d.ts +172 -0
  37. package/dist/core/navigation.d.ts.map +1 -0
  38. package/dist/core/registry.d.ts +189 -0
  39. package/dist/core/registry.d.ts.map +1 -0
  40. package/dist/core/symbols.d.ts +33 -0
  41. package/dist/core/symbols.d.ts.map +1 -0
  42. package/dist/features/fetch.d.ts +2 -0
  43. package/dist/features/fetch.d.ts.map +1 -0
  44. package/dist/features/nav.d.ts +23 -0
  45. package/dist/features/nav.d.ts.map +1 -0
  46. package/dist/features/route/core.d.ts +83 -0
  47. package/dist/features/route/core.d.ts.map +1 -0
  48. package/dist/features/route/index.d.ts +43 -0
  49. package/dist/features/route/index.d.ts.map +1 -0
  50. package/dist/features/route/router.d.ts +74 -0
  51. package/dist/features/route/router.d.ts.map +1 -0
  52. package/dist/features/route/types.d.ts +60 -0
  53. package/dist/features/route/types.d.ts.map +1 -0
  54. package/dist/features/route/view.d.ts +116 -0
  55. package/dist/features/route/view.d.ts.map +1 -0
  56. package/dist/features/web-component/index.d.ts +33 -0
  57. package/dist/features/web-component/index.d.ts.map +1 -0
  58. package/dist/features/web-component/setup.d.ts +77 -0
  59. package/dist/features/web-component/setup.d.ts.map +1 -0
  60. package/dist/features/web-component/state.d.ts +47 -0
  61. package/dist/features/web-component/state.d.ts.map +1 -0
  62. package/dist/features/web-component/utils.d.ts +13 -0
  63. package/dist/features/web-component/utils.d.ts.map +1 -0
  64. package/dist/index.cjs +9 -5
  65. package/dist/index.cjs.map +1 -1
  66. package/dist/index.d.ts +30 -230
  67. package/dist/index.d.ts.map +1 -0
  68. package/dist/index.mjs +3127 -2967
  69. package/dist/index.mjs.map +1 -1
  70. package/dist/types.d.ts +476 -0
  71. package/dist/types.d.ts.map +1 -0
  72. package/dist/utils/debug.d.ts +40 -0
  73. package/dist/utils/debug.d.ts.map +1 -0
  74. package/dist/utils/index.d.ts +51 -0
  75. package/dist/utils/index.d.ts.map +1 -0
  76. package/dist/utils/sanitize.d.ts +52 -0
  77. package/dist/utils/sanitize.d.ts.map +1 -0
  78. package/package.json +10 -8
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Iterates over a jQuery collection and executes a callback for each HTMLElement.
3
+ *
4
+ * Reason: jQuery collections can contain non-element nodes (e.g., text or
5
+ * comment nodes). This utility provides a safe, element-only iteration path
6
+ * required for establishing reactive bindings and event listeners.
7
+ *
8
+ * @param jq - The jQuery collection to iterate over.
9
+ * @param fn - The callback function to execute for each element.
10
+ * @returns The original jQuery collection for chaining.
11
+ * @internal
12
+ */
13
+ export declare function atomEachElement(jq: JQuery, fn: (el: HTMLElement) => void): JQuery;
14
+ /**
15
+ * Normalizes a binding source into a tuple containing the source and optional configuration.
16
+ *
17
+ * Logic: This utility uses heuristics to determine if an input represents a
18
+ * configuration tuple (e.g., `[source, options]`) or a simple array-based
19
+ * data value. This is used in unified bindings to support overloaded signatures.
20
+ *
21
+ * @param val - The value or tuple to unpack.
22
+ * @returns A tuple where the first element is the source and the second is optional config.
23
+ * @internal
24
+ */
25
+ export declare function unpack<T, O>(val: T | [T, O]): [T, O?];
26
+ //# sourceMappingURL=dom.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dom.d.ts","sourceRoot":"","sources":["../../src/core/dom.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,IAAI,GAAG,MAAM,CAQjF;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAgBrD"}
@@ -0,0 +1,34 @@
1
+ import { AsyncReactiveValue } from '../types';
2
+ /**
3
+ * Enumeration of binding types for debugging and performance tracking.
4
+ * @internal
5
+ */
6
+ export type BindingDebugType = 'text' | 'html' | 'show' | 'hide' | 'checked' | `class.${string & {}}` | `css.${string & {}}` | `attr.${string & {}}` | `prop.${string & {}}` | (string & {});
7
+ /**
8
+ * Establishes a reactive effect between a single source and a DOM element.
9
+ *
10
+ * Lifecycle: The created effect is automatically registered with the global
11
+ * `registry` and linked to the target element.
12
+ *
13
+ * @param el - The target DOM element.
14
+ * @param source - The reactive atom, function, or static value.
15
+ * @param updater - The function that applies the value to the DOM.
16
+ * @param debugType - Metadata for debugging.
17
+ * @internal
18
+ */
19
+ export declare function registerReactiveEffect<T>(el: Element, source: AsyncReactiveValue<T>, updater: (value: T) => void, debugType: BindingDebugType): void;
20
+ /**
21
+ * Establishes a reactive effect between a map of sources and a DOM element.
22
+ *
23
+ * Optimization: Single-pass Collection
24
+ * Replaces multiple array methods (map/filter/forEach) with a single for-loop
25
+ * to reduce memory allocation and GC pressure on every state change.
26
+ *
27
+ * @param el - The target DOM element.
28
+ * @param sourceMap - A record of property keys and reactive values.
29
+ * @param updater - The function that applies the entire map to the DOM.
30
+ * @param debugType - Metadata for debugging.
31
+ * @internal
32
+ */
33
+ export declare function registerMapEffect<T>(el: Element, sourceMap: Record<string, AsyncReactiveValue<T>>, updater: (map: Record<string, T>) => void, debugType: BindingDebugType): void;
34
+ //# sourceMappingURL=effect-factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effect-factory.d.ts","sourceRoot":"","sources":["../../src/core/effect-factory.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAIlD;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GACxB,MAAM,GACN,MAAM,GACN,MAAM,GACN,MAAM,GACN,SAAS,GACT,SAAS,MAAM,GAAG,EAAE,EAAE,GACtB,OAAO,MAAM,GAAG,EAAE,EAAE,GACpB,QAAQ,MAAM,GAAG,EAAE,EAAE,GACrB,QAAQ,MAAM,GAAG,EAAE,EAAE,GACrB,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AA4ElB;;;;;;;;;;;GAWG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,EACtC,EAAE,EAAE,OAAO,EACX,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAC7B,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,EAC3B,SAAS,EAAE,gBAAgB,GAC1B,IAAI,CAsBN;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EACjC,EAAE,EAAE,OAAO,EACX,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC,EAChD,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,IAAI,EACzC,SAAS,EAAE,gBAAgB,GAC1B,IAAI,CA4DN"}
@@ -0,0 +1,12 @@
1
+ import { PatchOptions } from '../types';
2
+ /**
3
+ * Enables global patches for jQuery to integrate reactive state management.
4
+ * @internal
5
+ */
6
+ export declare function enablejQueryOverrides(options?: PatchOptions): void;
7
+ /**
8
+ * Restores jQuery prototype methods to their original native state.
9
+ * @internal
10
+ */
11
+ export declare function disablejQueryOverrides(): void;
12
+ //# sourceMappingURL=jquery-patch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jquery-patch.d.ts","sourceRoot":"","sources":["../../src/core/jquery-patch.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAqH5C;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,YAAiB,GAAG,IAAI,CAqEtE;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAW7C"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Returns a promise that resolves after the next reactive update cycle has completed.
3
+ *
4
+ * When to use:
5
+ * - To perform manual DOM measurements after reactive changes have been applied.
6
+ * - To coordinate external library initializations that depend on the current DOM state.
7
+ *
8
+ * @returns A promise that resolves when the DOM has been synchronized with the latest state.
9
+ */
10
+ export declare const nextTick: () => Promise<void>;
11
+ //# sourceMappingURL=namespace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"namespace.d.ts","sourceRoot":"","sources":["../../src/core/namespace.ts"],"names":[],"mappings":"AAkBA;;;;;;;;GAQG;AACH,eAAO,MAAM,QAAQ,QAAO,OAAO,CAAC,IAAI,CAAiB,CAAC"}
@@ -0,0 +1,172 @@
1
+ import { Option, Result } from '@but212/atom-effect-utils';
2
+ /** @internal */
3
+ export type NavigationType = 'init' | 'push' | 'replace' | 'pop';
4
+ /** @internal */
5
+ export interface ContentState {
6
+ html: string;
7
+ title: string | null;
8
+ attributes?: Record<string, string>;
9
+ redirectUrl?: string | null | undefined;
10
+ meta?: Record<string, string>;
11
+ }
12
+ /** @internal */
13
+ export declare const normalizePath: (path: string) => string;
14
+ /** @internal */
15
+ export declare const splitPath: (path: string) => {
16
+ route: string;
17
+ query: Option<string>;
18
+ };
19
+ /** @internal */
20
+ export declare const parseQuery: (raw: string) => Record<string, string>;
21
+ /** @internal */
22
+ export declare const getAbsoluteUrl: (url: string, base: string) => Result<URL, Error>;
23
+ /**
24
+ * SEO Metadata Schema
25
+ * Defines the mapping between internal state keys and physical HTML tags.
26
+ */
27
+ export declare const META_SCHEMA: readonly [{
28
+ readonly selector: "meta[name=\"description\"]";
29
+ readonly tag: "meta";
30
+ readonly attr: "content";
31
+ readonly key: "description";
32
+ readonly staticAttrs: {
33
+ readonly name: "description";
34
+ };
35
+ }, {
36
+ readonly selector: "meta[name=\"keywords\"]";
37
+ readonly tag: "meta";
38
+ readonly attr: "content";
39
+ readonly key: "keywords";
40
+ readonly staticAttrs: {
41
+ readonly name: "keywords";
42
+ };
43
+ }, {
44
+ readonly selector: "link[rel=\"canonical\"]";
45
+ readonly tag: "link";
46
+ readonly attr: "href";
47
+ readonly key: "canonical";
48
+ readonly staticAttrs: {
49
+ readonly rel: "canonical";
50
+ };
51
+ }];
52
+ /**
53
+ * Synchronizes document head metadata with the provided state.
54
+ *
55
+ * Why: Ensures SEO-critical tags stay in sync during SPA transitions
56
+ * without a full page reload.
57
+ *
58
+ * Side Effect: Creates missing tags in `<head>` if defined in `meta` record.
59
+ */
60
+ export declare function syncMetaData(win: Window, meta?: Record<string, string>): void;
61
+ /**
62
+ * Updates element attributes while preserving internal tracking IDs.
63
+ *
64
+ * Constraint: Attributes in `ATTR_PRESERVE` (like `id`) are never removed,
65
+ * even if missing from the next state, to prevent breaking DOM references.
66
+ */
67
+ export declare function updateAttributes(el: HTMLElement, next: Record<string, string>): void;
68
+ /**
69
+ * Manages viewport scrolling after a navigation event.
70
+ * Priority: Hash element > Window top (if fallback enabled).
71
+ */
72
+ export declare function performScroll(win: Window, hash?: string, fallbackToTop?: boolean): void;
73
+ /**
74
+ * Filters click events to determine if they should trigger client-side navigation.
75
+ *
76
+ * Why: Ignores modified clicks (Ctrl+Click) or right-clicks to preserve native
77
+ * browser features (e.g., "Open in new tab").
78
+ */
79
+ export declare function isNavigationClick(e: MouseEvent | JQuery.TriggeredEvent): boolean;
80
+ /**
81
+ * Determines if a link click should be intercepted by the SPA router.
82
+ *
83
+ * Example:
84
+ * ```ts
85
+ * $(document).on('click', 'a', (e) => {
86
+ * if (isInterceptee(e.currentTarget)) {
87
+ * e.preventDefault();
88
+ * navigate(e.currentTarget.href);
89
+ * }
90
+ * });
91
+ * ```
92
+ */
93
+ export declare function isInterceptee(el: Element, win?: Window): boolean;
94
+ /** @internal */
95
+ export declare function getUrlParts(url: string, base: string): {
96
+ pathAndSearch: string;
97
+ hash: string;
98
+ };
99
+ /**
100
+ * Calculates whether the viewport should scroll after a navigation transition.
101
+ *
102
+ * Why: Prevents jarring scroll jumps during 'Pop' (Back/Forward) events while
103
+ * ensuring 'Push' events start at the top of the new content.
104
+ */
105
+ export declare function getScrollDecision(params: {
106
+ hash: string;
107
+ type: NavigationType;
108
+ isNewTarget: boolean;
109
+ prevHash: string;
110
+ scrollToTop: boolean;
111
+ }): {
112
+ shouldScroll: boolean;
113
+ resetScroll: boolean;
114
+ };
115
+ /** @internal */
116
+ export declare function extractMetaData(doc: Document | Element): Record<string, string>;
117
+ /** @internal Extracts path relative to a base for routing logic. */
118
+ export declare function resolveAnchorPath(el: Element, base?: string): string;
119
+ /**
120
+ * Parses raw HTML strings into a structured `ContentState`.
121
+ *
122
+ * Why: Allows the router to perform "Fragment Extraction" — extracting
123
+ * only specific container content and page metadata from a full server response.
124
+ */
125
+ export declare function extractContent(params: {
126
+ html: string;
127
+ selector?: string | undefined;
128
+ redirectUrl?: string | null | undefined;
129
+ }): ContentState;
130
+ /** @internal */
131
+ export declare function updateActiveState(params: {
132
+ el: Element;
133
+ active: boolean;
134
+ activeClass: string;
135
+ }): void;
136
+ /** @internal SPA Link Recognition Specification */
137
+ export declare const NAV_SPEC: {
138
+ readonly selectors: "a, [data-route]";
139
+ readonly attributes: readonly ["href", "data-route", "xlink:href"];
140
+ };
141
+ /** @internal */
142
+ export type NavFeatureType = 'nav' | 'router';
143
+ /**
144
+ * Coordination layer to prevent feature collisions.
145
+ *
146
+ * Why: Prevents race conditions when both `atomNav` and `$.route` are applied
147
+ * to the same DOM element. It also aggregates 'Leave' guards for the entire tree.
148
+ *
149
+ * @internal
150
+ */
151
+ declare class NavigationCoordinator {
152
+ private managers;
153
+ /**
154
+ * Registers a navigation manager.
155
+ * Warning: Throws a console warning if a target is double-managed by
156
+ * different navigation features.
157
+ */
158
+ register(target: Element, type: NavFeatureType, canLeave?: () => boolean): void;
159
+ /**
160
+ * Checks if navigation is allowed by scanning all registered guards
161
+ * within the container.
162
+ */
163
+ canLeaveWithin(container: Element): boolean;
164
+ /** @internal */
165
+ isNestedIn(el: Element, type: NavFeatureType): boolean;
166
+ /** @internal */
167
+ getManagerType(target: Element): NavFeatureType | undefined;
168
+ }
169
+ /** Global singleton for managing cross-component navigation lifecycle. */
170
+ export declare const navCoordinator: NavigationCoordinator;
171
+ export {};
172
+ //# sourceMappingURL=navigation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../../src/core/navigation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,189 @@
1
+ import { SlotBuffer } from '@but212/atom-effect-utils';
2
+ import { EffectObject } from '../types';
3
+ /**
4
+ * Configures whether the automated MutationObserver cleanup system is allowed to run.
5
+ *
6
+ * Logic: This provides explicit control over the global 'safety-net' observer,
7
+ * allowing it to be disabled in environments or scenarios where manual
8
+ * lifecycle management is strictly enforced.
9
+ *
10
+ * @param allowed - True to allow auto-cleanup, false to disable it.
11
+ * @internal
12
+ */
13
+ export declare function setAutoCleanupAllowed(allowed: boolean): void;
14
+ /**
15
+ * Represents the lifecycle metadata for a bound element.
16
+ * @internal
17
+ */
18
+ export interface BindingRecord {
19
+ /**
20
+ * A collection of individual cleanup tasks (e.g., effect disposals).
21
+ * Optimization: Uses SlotBuffer to minimize heap allocations for small
22
+ * collections (1-4 items), which represents the vast majority of use cases.
23
+ */
24
+ tasks?: SlotBuffer<() => void>;
25
+ /** An optional component-level teardown function. */
26
+ teardown?: (() => void) | undefined;
27
+ }
28
+ /**
29
+ * The central registry for managing reactive resources and element lifecycles.
30
+ *
31
+ * Logic: Safety & Memory Management
32
+ * - WeakMap Storage: Binding records are stored in `WeakMap` instances to avoid
33
+ * holding strong references to DOM elements. This allows the garbage collector
34
+ * to reclaim memory even if elements are not explicitly unmounted.
35
+ * - Flag System: `WeakSet` is used for `keep` and `ignored` states to ensure that
36
+ * metadata does not leak for nodes that are removed without a cleanup call.
37
+ * - Performance: The registry uses CSS markers (`_aes-bound`, `_aes-has-shadow`)
38
+ * to perform high-speed scoped queries (`querySelectorAll`) during tree
39
+ * disposal, avoiding expensive full-tree traversals.
40
+ *
41
+ * @internal
42
+ */
43
+ declare class BindingRegistry {
44
+ private records;
45
+ private kept;
46
+ private ignored;
47
+ private shadows;
48
+ private autoCleanupScheduled;
49
+ /**
50
+ * Marks a node to preserve its reactive resources even if detached from the DOM.
51
+ * (e.g., used by jQuery's `.detach()` method).
52
+ */
53
+ keep(node: Node): void;
54
+ /** Determines if a node is marked for resource preservation. */
55
+ isKept(node: Node): boolean;
56
+ /**
57
+ * Marks a node to be ignored by the next automated cleanup cycle.
58
+ * This prevents redundant cleanup calls during complex DOM manipulations.
59
+ */
60
+ markIgnored(node: Node): void;
61
+ /** Determines if a node is currently marked to be ignored. */
62
+ isIgnored(node: Node): boolean;
63
+ /**
64
+ * Removes the 'ignored' flag, re-enabling standard cleanup logic for the node.
65
+ * @internal
66
+ */
67
+ unmarkIgnored(node: Node): void;
68
+ /** @internal */
69
+ isAutoCleanupScheduled(): boolean;
70
+ /** @internal */
71
+ setAutoCleanupScheduled(scheduled: boolean): void;
72
+ /**
73
+ * Performs a move-aware cleanup of a node and its descendants.
74
+ *
75
+ * Logic: Deferring the cleanup to a microtask allows elements to be
76
+ * disconnected and then immediately reconnected (moved) without
77
+ * losing their reactive state.
78
+ *
79
+ * @param node - The node to tentatively clean up.
80
+ */
81
+ deferCleanup(node: Node): void;
82
+ /**
83
+ * Registers a ShadowRoot to a host element for AEJ lifecycle tracking.
84
+ *
85
+ * @param host - The host element.
86
+ * @param sr - The ShadowRoot (can be 'open' or 'closed').
87
+ * @internal
88
+ */
89
+ registerShadow(host: Element, sr: ShadowRoot): void;
90
+ /**
91
+ * Safely adds a CSS marker to an element, deferring if it's currently being constructed.
92
+ */
93
+ private safeMark;
94
+ /**
95
+ * Marks a host element to indicate it possesses a managed ShadowRoot.
96
+ *
97
+ * Optimization: This adds a CSS marker used by `cleanupDescendants` to
98
+ * locate isolated Shadow DOM trees efficiently without full-tree traversal.
99
+ *
100
+ * @param host - The host element to mark.
101
+ * @internal
102
+ */
103
+ markHost(host: Element): void;
104
+ /**
105
+ * Retrieves the ShadowRoot for a host element, including tracked 'closed' roots.
106
+ * @internal
107
+ */
108
+ getShadow(host: Element): ShadowRoot | null;
109
+ /**
110
+ * Retrieves or initializes the binding record for a specific element.
111
+ *
112
+ * Logic: The auto-cleanup MutationObserver is lazily initialized when
113
+ * the first reactive binding is registered in the document.
114
+ */
115
+ private getOrCreateRecord;
116
+ /** Internal helper to append a cleanup task to an element's record. */
117
+ private addCleanup;
118
+ /**
119
+ * Registers a reactive effect to be tracked and disposed with the element.
120
+ *
121
+ * Constraint: Effects must be registered to ensure synchronous disposal
122
+ * when the host element is destroyed or unmounted.
123
+ *
124
+ * @param element - The host element.
125
+ * @param effect - The reactive effect object.
126
+ */
127
+ trackEffect(element: Element, effect: EffectObject): void;
128
+ /** Registers a generic cleanup function to be executed with the element. @internal */
129
+ onCleanup(element: Element, cleanupFunction: () => void): void;
130
+ /** Assigns a component-level teardown function to an element. @internal */
131
+ setTeardown(element: Element, teardownFunction: (() => void) | undefined): void;
132
+ /** Determines if an element has any active bindings. */
133
+ hasBind(element: Element): boolean;
134
+ /**
135
+ * Disposes of all reactive resources associated with a single node.
136
+ *
137
+ * @param node - The node to clean up.
138
+ */
139
+ cleanup(node: Node): void;
140
+ /**
141
+ * Efficiently cleans up reactive bindings within a DOM subtree.
142
+ *
143
+ * Logic: Snapshot Strategy
144
+ * This method uses `querySelectorAll` to obtain a static snapshot of bound
145
+ * elements before iteration begins. This ensures stability and prevents
146
+ * missed nodes if the DOM structure or classes are modified during cleanup.
147
+ *
148
+ * @param root - The root of the subtree or fragment to clean up.
149
+ */
150
+ cleanupDescendants(root: Element | DocumentFragment | ShadowRoot): void;
151
+ /**
152
+ * Performs a deep recursive cleanup of a node and all its internal subtrees (including Shadow DOM).
153
+ * @internal
154
+ */
155
+ cleanupTree(node: Node): void;
156
+ }
157
+ /** The global instance of the BindingRegistry. */
158
+ export declare const registry: BindingRegistry;
159
+ /**
160
+ * Initializes an automated MutationObserver safety net for a specific root.
161
+ *
162
+ * Logic: DOM Safety Net
163
+ * Standard browser operations (e.g., setting `innerHTML = ''`) bypass jQuery's
164
+ * internal hooks. This observer acts as a fallback, detecting removed nodes
165
+ * that were not processed by patched jQuery methods.
166
+ *
167
+ * @param root - The DOM element or fragment to monitor.
168
+ * @internal
169
+ */
170
+ export declare function enableAutoCleanup(root: Element | ShadowRoot | DocumentFragment): void;
171
+ /**
172
+ * Disconnects and destroys all registered auto-cleanup observers.
173
+ * @internal
174
+ */
175
+ export declare function disableAutoCleanup(): void;
176
+ /**
177
+ * Disconnects the auto-cleanup observer for a specific root node.
178
+ *
179
+ * Logic: Scoped Disposal
180
+ * This is used to release strong references held by the registry to specific
181
+ * boundaries (e.g., ShadowRoots) to prevent memory leaks when components
182
+ * are permanently removed.
183
+ *
184
+ * @param root - The specific node to stop monitoring.
185
+ * @internal
186
+ */
187
+ export declare function disableAutoCleanupFor(root: Node): void;
188
+ export {};
189
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/core/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /** Symbol used to mark a DOM element as hydrated with reactive bindings. */
2
+ export declare const HYDRATION_MARKER: unique symbol;
3
+ /** Symbol used to indicate that an element has an active lifecycle MutationObserver attached. */
4
+ export declare const CLEANUP_MARKER: unique symbol;
5
+ /**
6
+ * Event name used for the bubbling context discovery mechanism.
7
+ *
8
+ * Logic: Dependency Injection
9
+ * Descendant elements dispatch this event to locate reactive providers
10
+ * higher in the DOM tree, including across Shadow DOM boundaries.
11
+ */
12
+ export declare const CONTEXT_REQUEST = "aej:context-request";
13
+ /**
14
+ * Payload structure for context discovery events.
15
+ * @internal
16
+ */
17
+ export interface ContextRequestDetail {
18
+ /** The unique key or symbol of the requested context. */
19
+ key: string | symbol;
20
+ /** A callback executed by the provider to deliver the reactive value. */
21
+ callback: (atom: unknown) => void;
22
+ }
23
+ /**
24
+ * A unique symbol used to mark event handlers as already wrapped in a batch.
25
+ *
26
+ * Reason: Batch Coalescing
27
+ * This prevents redundant nested `batch()` calls when re-binding
28
+ * handlers or during multiple patch cycles, maintaining flat execution stacks.
29
+ *
30
+ * @internal
31
+ */
32
+ export declare const INTERNAL_HANDLER: unique symbol;
33
+ //# sourceMappingURL=symbols.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"symbols.d.ts","sourceRoot":"","sources":["../../src/core/symbols.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,eAAO,MAAM,gBAAgB,eAA6B,CAAC;AAE3D,iGAAiG;AACjG,eAAO,MAAM,cAAc,eAAoC,CAAC;AAEhE;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,wBAAwB,CAAC;AAErD;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,yDAAyD;IACzD,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,yEAAyE;IACzE,QAAQ,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CACnC;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,gBAAgB,eAAqC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=fetch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../src/features/fetch.ts"],"names":[],"mappings":""}
@@ -0,0 +1,23 @@
1
+ import { AtomNav, AtomNavOptions } from '../types';
2
+ /**
3
+ * Initializes a reactive navigation manager for PJAX transitions.
4
+ *
5
+ * When to use:
6
+ * - Use when you want to enable "Single Page" behavior by fetching HTML
7
+ * fragments from the server instead of performing full page reloads.
8
+ *
9
+ * @param options - Configuration for target containers, headers, and lifecycle hooks.
10
+ * @returns A navigation controller with reactive status monitoring and programmatic controls.
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * const nav = $.atomNav({
15
+ * target: '#main-content',
16
+ * onMount: ($el) => console.log('Content swapped!'),
17
+ * });
18
+ *
19
+ * nav.navigate('/dashboard');
20
+ * ```
21
+ */
22
+ export declare function atomNav(options: AtomNavOptions): AtomNav;
23
+ //# sourceMappingURL=nav.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nav.d.ts","sourceRoot":"","sources":["../../src/features/nav.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAgB,MAAM,SAAS,CAAC;AA0GrE;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CA8UxD"}
@@ -0,0 +1,83 @@
1
+ import { RouteDefinition, Router } from '../../types';
2
+ import { MatchEntry, MatchResult } from './types';
3
+ /**
4
+ * Factory for creating a URL adapter based on the application's routing strategy.
5
+ *
6
+ * When to use:
7
+ * - Use 'history' for clean URLs (requires server-side fallback to index.html).
8
+ * - Use 'hash' for legacy support or environments where the server is not configurable.
9
+ *
10
+ * @param mode - 'history' or 'hash'.
11
+ * @param basePath - Optional root segment (e.g., '/admin') if the app is not at domain root.
12
+ *
13
+ * @example
14
+ * const adapter = createAdapter('history', '/my-app');
15
+ */
16
+ export declare const createAdapter: (mode: "history" | "hash", basePath?: string) => {
17
+ get: () => import('./types').URLState;
18
+ commit: (path: string) => import('./types').URLState;
19
+ revert: (prev: string) => void;
20
+ resolveAnchor: (el: Element) => string;
21
+ setupListener: (h: () => void) => () => void;
22
+ };
23
+ export interface RouteMatcher {
24
+ readonly exact: Map<string, MatchEntry>;
25
+ readonly dynamic: MatchEntry[];
26
+ }
27
+ /**
28
+ * Optimization: Separation of Concerns
29
+ * Partitions routes into 'exact' and 'dynamic' buckets to enable O(1) lookups for static paths.
30
+ */
31
+ export declare function createRouteMatcher(routes: Record<string, RouteDefinition>): RouteMatcher;
32
+ /**
33
+ * Attempts to match a path against the compiled routing table.
34
+ */
35
+ export declare function matchRoute(matcher: RouteMatcher, path: string): MatchResult;
36
+ /**
37
+ * Finds the canonical route pattern for a given resolved path.
38
+ */
39
+ export declare function getRoutePattern(matcher: RouteMatcher, path: string): string;
40
+ /**
41
+ * Resolves a raw path into a matched route definition with parameters and 404 fallback logic.
42
+ */
43
+ export declare function resolveRoute(matcher: RouteMatcher, path: string, routes: Record<string, RouteDefinition>, notFoundPath?: string): {
44
+ def: RouteDefinition;
45
+ pattern: string;
46
+ params: Record<string, string>;
47
+ isMatch: boolean;
48
+ } | {
49
+ def: RouteDefinition | undefined;
50
+ pattern: string;
51
+ params: {};
52
+ isMatch: boolean;
53
+ };
54
+ /**
55
+ * Logic: Navigation Pipeline Orchestration
56
+ * Coordinates the full transition sequence: matching, parameter merging, and guard execution.
57
+ *
58
+ * When to use:
59
+ * - Invoked internally by the router during navigation requests.
60
+ *
61
+ * Caution:
62
+ * - Guards (`onEnter`) must be side-effect free relative to the router's internal state.
63
+ */
64
+ export declare function resolveNavigation(matcher: RouteMatcher, config: {
65
+ routes: Record<string, RouteDefinition>;
66
+ default: string;
67
+ notFound: string;
68
+ }, path: string, query: Record<string, string>, router: Router): {
69
+ success: boolean;
70
+ path?: never;
71
+ query?: never;
72
+ params?: never;
73
+ def?: never;
74
+ } | {
75
+ success: boolean;
76
+ path: string;
77
+ query: Record<string, string>;
78
+ params: {
79
+ [x: string]: string;
80
+ };
81
+ def: RouteDefinition | undefined;
82
+ };
83
+ //# sourceMappingURL=core.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../src/features/route/core.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAc,MAAM,SAAS,CAAC;AA+DnE;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,aAAa,GAAI,MAAM,SAAS,GAAG,MAAM,EAAE,WAAW,MAAM;;mBAKtD,MAAM;mBACN,MAAM;wBACD,OAAO;uBACR,MAAM,IAAI;CAEhC,CAAC;AAEF,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACxC,QAAQ,CAAC,OAAO,EAAE,UAAU,EAAE,CAAC;CAChC;AAiGD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,YAAY,CAYxF;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,GAAG,WAAW,CAQ3E;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAK3E;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,YAAY,EACrB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,EACvC,YAAY,CAAC,EAAE,MAAM;;;;;;;;;;EAUtB;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,YAAY,EACrB,MAAM,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,EACtF,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,MAAM,EAAE,MAAM;;;;;;;;;;;;;;EA8Bf"}