purity-world 1.0.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 (134) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +89 -0
  3. package/cursors/alias.svg +17 -0
  4. package/cursors/all-scroll.svg +12 -0
  5. package/cursors/bottom_left_corner.svg +16 -0
  6. package/cursors/bottom_right_corner.svg +16 -0
  7. package/cursors/bottom_side.svg +18 -0
  8. package/cursors/cell.svg +9 -0
  9. package/cursors/center_ptr.svg +9 -0
  10. package/cursors/col-resize.svg +9 -0
  11. package/cursors/color-picker.svg +10 -0
  12. package/cursors/context-menu.svg +10 -0
  13. package/cursors/copy.svg +17 -0
  14. package/cursors/crosshair.svg +20 -0
  15. package/cursors/default.svg +9 -0
  16. package/cursors/dnd-move.svg +9 -0
  17. package/cursors/dnd-no-drop.svg +16 -0
  18. package/cursors/down-arrow.svg +9 -0
  19. package/cursors/draft.svg +9 -0
  20. package/cursors/fleur.svg +10 -0
  21. package/cursors/help.svg +20 -0
  22. package/cursors/left-arrow.svg +9 -0
  23. package/cursors/left_side.svg +18 -0
  24. package/cursors/no-drop.svg +16 -0
  25. package/cursors/not-allowed.svg +9 -0
  26. package/cursors/openhand.svg +9 -0
  27. package/cursors/pencil.svg +9 -0
  28. package/cursors/pirate.svg +9 -0
  29. package/cursors/pointer.svg +9 -0
  30. package/cursors/progress-01.svg +15 -0
  31. package/cursors/progress-02.svg +15 -0
  32. package/cursors/progress-03.svg +15 -0
  33. package/cursors/progress-04.svg +15 -0
  34. package/cursors/progress-05.svg +15 -0
  35. package/cursors/progress-06.svg +15 -0
  36. package/cursors/progress-07.svg +15 -0
  37. package/cursors/progress-08.svg +15 -0
  38. package/cursors/progress-09.svg +15 -0
  39. package/cursors/progress-10.svg +15 -0
  40. package/cursors/progress-11.svg +15 -0
  41. package/cursors/progress-12.svg +15 -0
  42. package/cursors/progress-13.svg +15 -0
  43. package/cursors/progress-14.svg +15 -0
  44. package/cursors/progress-15.svg +15 -0
  45. package/cursors/progress-16.svg +15 -0
  46. package/cursors/progress-17.svg +15 -0
  47. package/cursors/progress-18.svg +15 -0
  48. package/cursors/progress-19.svg +15 -0
  49. package/cursors/progress-20.svg +15 -0
  50. package/cursors/progress-21.svg +15 -0
  51. package/cursors/progress-22.svg +15 -0
  52. package/cursors/progress-23.svg +15 -0
  53. package/cursors/right-arrow.svg +9 -0
  54. package/cursors/right_ptr.svg +9 -0
  55. package/cursors/right_side.svg +18 -0
  56. package/cursors/row-resize.svg +9 -0
  57. package/cursors/size_bdiag.svg +10 -0
  58. package/cursors/size_fdiag.svg +10 -0
  59. package/cursors/size_hor.svg +10 -0
  60. package/cursors/size_ver.svg +12 -0
  61. package/cursors/text.svg +9 -0
  62. package/cursors/top_left_corner.svg +16 -0
  63. package/cursors/top_right_corner.svg +16 -0
  64. package/cursors/top_side.svg +18 -0
  65. package/cursors/up-arrow.svg +9 -0
  66. package/cursors/vertical-text.svg +9 -0
  67. package/cursors/wait-01.svg +14 -0
  68. package/cursors/wait-02.svg +14 -0
  69. package/cursors/wait-03.svg +14 -0
  70. package/cursors/wait-04.svg +14 -0
  71. package/cursors/wait-05.svg +14 -0
  72. package/cursors/wait-06.svg +14 -0
  73. package/cursors/wait-07.svg +14 -0
  74. package/cursors/wait-08.svg +14 -0
  75. package/cursors/wait-09.svg +14 -0
  76. package/cursors/wait-10.svg +14 -0
  77. package/cursors/wait-11.svg +14 -0
  78. package/cursors/wait-12.svg +14 -0
  79. package/cursors/wait-13.svg +14 -0
  80. package/cursors/wait-14.svg +14 -0
  81. package/cursors/wait-15.svg +14 -0
  82. package/cursors/wait-16.svg +14 -0
  83. package/cursors/wait-17.svg +14 -0
  84. package/cursors/wait-18.svg +14 -0
  85. package/cursors/wait-19.svg +14 -0
  86. package/cursors/wait-20.svg +14 -0
  87. package/cursors/wait-21.svg +14 -0
  88. package/cursors/wait-22.svg +14 -0
  89. package/cursors/wait-23.svg +14 -0
  90. package/cursors/wayland-cursor.svg +10 -0
  91. package/cursors/x-cursor.svg +11 -0
  92. package/cursors/zoom-in.svg +13 -0
  93. package/cursors/zoom-out.svg +13 -0
  94. package/index.cjs +1 -0
  95. package/index.d.ts +1 -0
  96. package/index.js +1972 -0
  97. package/package.json +60 -0
  98. package/style.css +1 -0
  99. package/styles/_base.scss +525 -0
  100. package/styles/_mixins.scss +57 -0
  101. package/styles/_theme-dark.scss +103 -0
  102. package/styles/_theme-light.scss +103 -0
  103. package/styles/_themes.scss +34 -0
  104. package/styles/_variables.scss +72 -0
  105. package/styles/index.scss +7 -0
  106. package/types/bootstrap.d.ts +42 -0
  107. package/types/bootstrap.d.ts.map +1 -0
  108. package/types/common.d.ts +9 -0
  109. package/types/common.d.ts.map +1 -0
  110. package/types/component.d.ts +57 -0
  111. package/types/component.d.ts.map +1 -0
  112. package/types/core.d.ts +46 -0
  113. package/types/core.d.ts.map +1 -0
  114. package/types/di.d.ts +53 -0
  115. package/types/di.d.ts.map +1 -0
  116. package/types/directive.d.ts +47 -0
  117. package/types/directive.d.ts.map +1 -0
  118. package/types/http.d.ts +211 -0
  119. package/types/http.d.ts.map +1 -0
  120. package/types/pipe.d.ts +34 -0
  121. package/types/pipe.d.ts.map +1 -0
  122. package/types/router.d.ts +145 -0
  123. package/types/router.d.ts.map +1 -0
  124. package/types/seo.d.ts +134 -0
  125. package/types/seo.d.ts.map +1 -0
  126. package/types/validator.d.ts +73 -0
  127. package/types/validator.d.ts.map +1 -0
  128. package/types/virtual-for.d.ts +36 -0
  129. package/types/virtual-for.d.ts.map +1 -0
  130. package/types/vite-plugin.d.ts +18 -0
  131. package/types/vite-plugin.d.ts.map +1 -0
  132. package/vite.cjs +4 -0
  133. package/vite.d.ts +1 -0
  134. package/vite.js +51 -0
@@ -0,0 +1,211 @@
1
+ import { type Signal } from './core';
2
+ export type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'HEAD' | 'OPTIONS';
3
+ export type HttpResponseType = 'json' | 'text' | 'blob' | 'arraybuffer' | 'stream';
4
+ export interface HttpRequestOptions {
5
+ headers?: Record<string, string | string[]> | HttpHeaders | Headers;
6
+ params?: Record<string, string | number | boolean | (string | number | boolean)[]> | HttpParams | URLSearchParams | string;
7
+ body?: any;
8
+ responseType?: HttpResponseType;
9
+ timeout?: number;
10
+ signal?: AbortSignal;
11
+ withCredentials?: boolean;
12
+ context?: Record<string, any> | Map<string, any>;
13
+ }
14
+ /**
15
+ * Immutable, case-insensitive HTTP headers container.
16
+ */
17
+ export declare class HttpHeaders {
18
+ private map;
19
+ private displayNames;
20
+ constructor(headers?: Record<string, string | string[]> | HttpHeaders | Headers | [string, string | string[]][]);
21
+ private clone;
22
+ has(name: string): boolean;
23
+ get(name: string): string | null;
24
+ getAll(name: string): string[] | null;
25
+ keys(): string[];
26
+ set(name: string, value: string | string[]): HttpHeaders;
27
+ append(name: string, value: string | string[]): HttpHeaders;
28
+ delete(name: string): HttpHeaders;
29
+ forEach(fn: (value: string, name: string, headers: HttpHeaders) => void): void;
30
+ toRecord(): Record<string, string>;
31
+ toHeaders(): Headers;
32
+ }
33
+ /**
34
+ * Immutable URL query parameters container.
35
+ */
36
+ export declare class HttpParams {
37
+ private map;
38
+ constructor(params?: Record<string, string | number | boolean | (string | number | boolean)[]> | HttpParams | URLSearchParams | string);
39
+ private clone;
40
+ has(name: string): boolean;
41
+ get(name: string): string | null;
42
+ getAll(name: string): string[] | null;
43
+ keys(): string[];
44
+ set(name: string, value: string | number | boolean | (string | number | boolean)[]): HttpParams;
45
+ append(name: string, value: string | number | boolean | (string | number | boolean)[]): HttpParams;
46
+ delete(name: string): HttpParams;
47
+ toString(): string;
48
+ }
49
+ /**
50
+ * Representation of an outgoing HTTP request.
51
+ */
52
+ export declare class HttpRequest<T = any> {
53
+ readonly method: HttpMethod;
54
+ readonly url: string;
55
+ readonly headers: HttpHeaders;
56
+ readonly params: HttpParams;
57
+ readonly body: T | null;
58
+ readonly responseType: HttpResponseType;
59
+ readonly timeout?: number;
60
+ readonly signal?: AbortSignal;
61
+ readonly withCredentials?: boolean;
62
+ readonly context: Map<string, any>;
63
+ constructor(method: HttpMethod, url: string, options?: HttpRequestOptions);
64
+ /**
65
+ * Creates an immutable clone with updated properties.
66
+ */
67
+ clone(update?: Partial<HttpRequestOptions & {
68
+ method?: HttpMethod;
69
+ url?: string;
70
+ }>): HttpRequest<any>;
71
+ /**
72
+ * Resolves the full URL including serialized query parameters.
73
+ */
74
+ getUrlWithParams(): string;
75
+ }
76
+ /**
77
+ * Representation of an incoming HTTP response.
78
+ */
79
+ export declare class HttpResponse<T = any> {
80
+ readonly data: T;
81
+ readonly status: number;
82
+ readonly statusText: string;
83
+ readonly headers: HttpHeaders;
84
+ readonly url: string;
85
+ readonly ok: boolean;
86
+ readonly request: HttpRequest;
87
+ constructor(init: {
88
+ data: T;
89
+ status: number;
90
+ statusText: string;
91
+ headers: HttpHeaders;
92
+ url: string;
93
+ request: HttpRequest;
94
+ });
95
+ }
96
+ /**
97
+ * Custom error thrown when an HTTP request fails or returns a non-2xx status.
98
+ */
99
+ export declare class HttpErrorResponse extends Error {
100
+ readonly error: any;
101
+ readonly status: number;
102
+ readonly statusText: string;
103
+ readonly url: string;
104
+ readonly headers: HttpHeaders;
105
+ readonly request: HttpRequest;
106
+ constructor(init: {
107
+ error: any;
108
+ status: number;
109
+ statusText: string;
110
+ url: string;
111
+ headers: HttpHeaders;
112
+ request: HttpRequest;
113
+ message?: string;
114
+ });
115
+ }
116
+ export type HttpNextFn = (req: HttpRequest) => Promise<HttpResponse<any>>;
117
+ /**
118
+ * HTTP Interceptor contract for intercepting and mutating requests and responses.
119
+ */
120
+ export interface HttpInterceptor {
121
+ intercept(req: HttpRequest, next: HttpNextFn): Promise<HttpResponse<any>>;
122
+ }
123
+ export type HttpInterceptorFn = (req: HttpRequest, next: HttpNextFn) => Promise<HttpResponse<any>>;
124
+ export declare const HTTP_INTERCEPTORS = "HTTP_INTERCEPTORS";
125
+ /**
126
+ * Provider helper to register centralized HTTP interceptors for bootstrapApplication.
127
+ */
128
+ export declare function provideHttpInterceptors(...interceptors: Array<HttpInterceptor | (new (...args: any[]) => HttpInterceptor) | HttpInterceptorFn>): {
129
+ provide: string;
130
+ useValue: Array<HttpInterceptor | HttpInterceptorFn>;
131
+ };
132
+ /**
133
+ * Default HTTP fetch backend executing requests via window.fetch().
134
+ */
135
+ export declare class HttpFetchBackend {
136
+ handle(req: HttpRequest): Promise<HttpResponse<any>>;
137
+ }
138
+ export interface HttpResource<T> {
139
+ data: Signal<T | null>;
140
+ loading: Signal<boolean>;
141
+ error: Signal<HttpErrorResponse | Error | null>;
142
+ status: Signal<number | null>;
143
+ refetch: () => Promise<HttpResponse<T> | null>;
144
+ }
145
+ /**
146
+ * Starts the animated Breeze progress/loading cursor.
147
+ * Supports reference counting across multiple concurrent HTTP requests and loaders.
148
+ */
149
+ export declare function startLoadingCursor(): void;
150
+ /**
151
+ * Stops the animated Breeze progress/loading cursor when all holders have released it.
152
+ */
153
+ export declare function stopLoadingCursor(): void;
154
+ /**
155
+ * Injectable HTTP Client Service providing comprehensive HTTP methods,
156
+ * interceptor pipeline chaining, and reactive signal helpers.
157
+ */
158
+ export declare class HttpClient {
159
+ private backend;
160
+ private interceptors;
161
+ activeRequests: Signal<number>;
162
+ isLoading: Signal<boolean>;
163
+ constructor();
164
+ /**
165
+ * Appends an interceptor into the execution pipeline.
166
+ */
167
+ addInterceptor(interceptor: HttpInterceptor | HttpInterceptorFn): () => void;
168
+ /**
169
+ * Method chaining alias for adding interceptors.
170
+ */
171
+ use(interceptor: HttpInterceptor | HttpInterceptorFn): this;
172
+ /**
173
+ * Core request dispatcher executing through the interceptor pipeline.
174
+ */
175
+ request<T = any>(method: HttpMethod, url: string, options?: HttpRequestOptions): Promise<HttpResponse<T>>;
176
+ /**
177
+ * Standard HTTP GET request.
178
+ */
179
+ get<T = any>(url: string, options?: HttpRequestOptions): Promise<HttpResponse<T>>;
180
+ /**
181
+ * Standard HTTP POST request.
182
+ */
183
+ post<T = any>(url: string, body?: any, options?: HttpRequestOptions): Promise<HttpResponse<T>>;
184
+ /**
185
+ * Standard HTTP PUT request.
186
+ */
187
+ put<T = any>(url: string, body?: any, options?: HttpRequestOptions): Promise<HttpResponse<T>>;
188
+ /**
189
+ * Standard HTTP PATCH request.
190
+ */
191
+ patch<T = any>(url: string, body?: any, options?: HttpRequestOptions): Promise<HttpResponse<T>>;
192
+ /**
193
+ * Standard HTTP DELETE request.
194
+ */
195
+ delete<T = any>(url: string, options?: HttpRequestOptions): Promise<HttpResponse<T>>;
196
+ /**
197
+ * Standard HTTP HEAD request.
198
+ */
199
+ head(url: string, options?: HttpRequestOptions): Promise<HttpResponse<null>>;
200
+ /**
201
+ * Standard HTTP OPTIONS request.
202
+ */
203
+ options<T = any>(url: string, options?: HttpRequestOptions): Promise<HttpResponse<T>>;
204
+ /**
205
+ * Reactive Signal Resource Helper.
206
+ * Generates fine-grained reactive signals (`data`, `loading`, `error`, `status`)
207
+ * that automatically manage request lifecycle and enable effortless template binding.
208
+ */
209
+ createResource<T>(fetcher: () => Promise<HttpResponse<T>>, autoFetch?: boolean): HttpResource<T>;
210
+ }
211
+ //# sourceMappingURL=http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/framework/http.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Interface defining the contract for Purity transform pipes.
3
+ */
4
+ export interface PipeTransform {
5
+ transform(value: any, ...args: any[]): any;
6
+ }
7
+ /**
8
+ * Base class for Purity transform pipes.
9
+ */
10
+ export declare abstract class BasePipe implements PipeTransform {
11
+ abstract transform(value: any, ...args: any[]): any;
12
+ }
13
+ export interface PipeOptions {
14
+ name: string;
15
+ }
16
+ /**
17
+ * Pipe decorator that registers a transform pipe class under the given name.
18
+ *
19
+ * @param nameOrOptions Pipe name (e.g. 'myTransformPipe' or 'uppercase') or options object
20
+ */
21
+ export declare function Pipe(nameOrOptions: string | PipeOptions): any;
22
+ /**
23
+ * Programmatically registers a pipe class by name.
24
+ */
25
+ export declare function registerPipe(name: string, pipeClass: any): void;
26
+ /**
27
+ * Resolves a singleton instance of the registered pipe class.
28
+ */
29
+ export declare function getPipe(name: string): PipeTransform | null;
30
+ /**
31
+ * Executes a pipe transform function at runtime.
32
+ */
33
+ export declare function executePipe(name: string, value: any, ...args: any[]): any;
34
+ //# sourceMappingURL=pipe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipe.d.ts","sourceRoot":"","sources":["../../src/framework/pipe.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,aAAa;IAC1B,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC;CAC9C;AAED;;GAEG;AACH,8BAAsB,QAAS,YAAW,aAAa;IACnD,QAAQ,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC;CACvD;AAED,MAAM,WAAW,WAAW;IACxB,IAAI,EAAE,MAAM,CAAC;CAChB;AAKD;;;;GAIG;AACH,wBAAgB,IAAI,CAAC,aAAa,EAAE,MAAM,GAAG,WAAW,GAAG,GAAG,CAa7D;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,GAAG,IAAI,CAG/D;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAgB1D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,GAAG,CAYzE"}
@@ -0,0 +1,145 @@
1
+ import { type Signal } from './core';
2
+ import { type Token, type Constructor } from './di';
3
+ import { BaseDirective } from './directive';
4
+ import type { SeoConfig } from './seo';
5
+ export type CanActivateFn = (route: Route, state: RouterState) => boolean | Promise<boolean>;
6
+ export interface RouteData {
7
+ [key: string]: any;
8
+ }
9
+ export type RouteParams = Record<string, string>;
10
+ export type QueryParams = Record<string, string>;
11
+ export interface Route {
12
+ path: string;
13
+ component?: Constructor | string;
14
+ redirectTo?: string;
15
+ title?: string | ((params: RouteParams) => string);
16
+ seo?: SeoConfig | ((params: RouteParams, data: RouteData) => SeoConfig);
17
+ canActivate?: Array<CanActivateFn | Token>;
18
+ data?: RouteData;
19
+ children?: Route[];
20
+ }
21
+ export type Routes = Route[];
22
+ export interface RouterState {
23
+ url: string;
24
+ path: string;
25
+ params: RouteParams;
26
+ queryParams: QueryParams;
27
+ data: RouteData;
28
+ }
29
+ export interface NavigationOptions {
30
+ replaceUrl?: boolean;
31
+ queryParams?: QueryParams;
32
+ state?: any;
33
+ skipLocationChange?: boolean;
34
+ }
35
+ export interface RouterOptions {
36
+ mode?: 'history' | 'hash' | 'memory';
37
+ initialUrl?: string;
38
+ scrollRestoration?: boolean;
39
+ }
40
+ /**
41
+ * Normalizes route path strings by trimming trailing slashes while preserving root `/`.
42
+ */
43
+ export declare function normalizePath(path: string): string;
44
+ /**
45
+ * Parses query strings like `?key=val&foo=bar` into typed object records.
46
+ */
47
+ export declare function parseQueryString(queryString: string): QueryParams;
48
+ /**
49
+ * Serializes query parameters object into query string `?key=val&foo=bar`.
50
+ */
51
+ export declare function serializeQueryParams(params: QueryParams): string;
52
+ /**
53
+ * Matches a URL pathname against a route pattern (e.g. `/users/:id` or `**`),
54
+ * returning extracted route parameters or null if not matched.
55
+ */
56
+ export declare function matchRoutePattern(routePattern: string, pathname: string): {
57
+ matched: boolean;
58
+ params: RouteParams;
59
+ } | null;
60
+ /**
61
+ * Purity Framework Router Service
62
+ * Fine-grained, signal-based routing service managing history, parameter extraction, and route guards.
63
+ */
64
+ export declare class Router {
65
+ private routes;
66
+ private options;
67
+ private isListening;
68
+ readonly url: Signal<string>;
69
+ readonly path: Signal<string>;
70
+ readonly params: Signal<RouteParams>;
71
+ readonly queryParams: Signal<QueryParams>;
72
+ readonly data: Signal<RouteData>;
73
+ readonly activeRoute: Signal<Route | null>;
74
+ constructor();
75
+ /**
76
+ * Configures the route table and initial options for the application router.
77
+ */
78
+ configureRoutes(routes: Route[], options?: RouterOptions): void;
79
+ /**
80
+ * Returns the configured route definitions.
81
+ */
82
+ getRoutes(): Route[];
83
+ /**
84
+ * Starts listening to browser navigation events (popstate / hashchange).
85
+ */
86
+ private startListening;
87
+ /**
88
+ * Extracts current URL from window.location based on router mode.
89
+ */
90
+ private getCurrentLocationUrl;
91
+ /**
92
+ * Navigates to a target route path with optional query parameters and options.
93
+ */
94
+ navigate(targetPath: string, options?: NavigationOptions): Promise<boolean>;
95
+ /**
96
+ * Navigates to a full URL (including pathname and query parameters).
97
+ */
98
+ navigateByUrl(fullUrl: string, options?: NavigationOptions): Promise<boolean>;
99
+ /**
100
+ * Resolves the matching route definition and params from the route table.
101
+ */
102
+ private findMatchingRoute;
103
+ /**
104
+ * Navigates back in browser history.
105
+ */
106
+ back(): void;
107
+ /**
108
+ * Navigates forward in browser history.
109
+ */
110
+ forward(): void;
111
+ /**
112
+ * Returns the active router options.
113
+ */
114
+ getOptions(): RouterOptions;
115
+ /**
116
+ * Checks whether a given path is currently active.
117
+ */
118
+ isActive(targetPath: string, exact?: boolean): boolean;
119
+ }
120
+ /**
121
+ * <router-layout> Component
122
+ * Host container that dynamically instantiates and mounts components for the currently active route.
123
+ */
124
+ export declare class RouterLayoutComponent {
125
+ private router;
126
+ private currentRenderedComponent;
127
+ private currentMountedElement;
128
+ protected onInit(): void;
129
+ protected onDestroy(): void;
130
+ private teardownCurrentComponent;
131
+ private renderRouteComponent;
132
+ }
133
+ /**
134
+ * routerLink Directive
135
+ * Binds click events on anchor tags or buttons to trigger programmatic SPA router navigation,
136
+ * and dynamically manages .active-link and .active-route CSS classes.
137
+ */
138
+ export declare class RouterLinkDirective extends BaseDirective {
139
+ private router;
140
+ private clickHandler?;
141
+ onInit(): void;
142
+ onChanges(newValue: any): void;
143
+ onDestroy(): void;
144
+ }
145
+ //# sourceMappingURL=router.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/framework/router.ts"],"names":[],"mappings":"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"}
package/types/seo.d.ts ADDED
@@ -0,0 +1,134 @@
1
+ export interface MetaDefinition {
2
+ name?: string;
3
+ property?: string;
4
+ httpEquiv?: string;
5
+ content: string;
6
+ [prop: string]: any;
7
+ }
8
+ export interface OpenGraphConfig {
9
+ title?: string;
10
+ description?: string;
11
+ url?: string;
12
+ type?: string;
13
+ image?: string;
14
+ imageSecureUrl?: string;
15
+ imageType?: string;
16
+ imageWidth?: number | string;
17
+ imageHeight?: number | string;
18
+ imageAlt?: string;
19
+ siteName?: string;
20
+ locale?: string;
21
+ [prop: string]: any;
22
+ }
23
+ export interface TwitterCardConfig {
24
+ card?: 'summary' | 'summary_large_image' | 'app' | 'player' | string;
25
+ site?: string;
26
+ creator?: string;
27
+ title?: string;
28
+ description?: string;
29
+ image?: string;
30
+ imageAlt?: string;
31
+ [prop: string]: any;
32
+ }
33
+ export interface RobotsOptions {
34
+ index?: boolean;
35
+ follow?: boolean;
36
+ noarchive?: boolean;
37
+ nosnippet?: boolean;
38
+ maxSnippet?: number;
39
+ maxImagePreview?: 'none' | 'standard' | 'large';
40
+ maxVideoPreview?: number;
41
+ }
42
+ export interface SeoConfig {
43
+ title?: string;
44
+ titlePrefix?: string;
45
+ titleSuffix?: string;
46
+ description?: string;
47
+ keywords?: string | string[];
48
+ author?: string;
49
+ canonical?: string;
50
+ robots?: RobotsOptions | string;
51
+ og?: OpenGraphConfig;
52
+ twitter?: TwitterCardConfig;
53
+ jsonLd?: Record<string, any> | Array<Record<string, any>>;
54
+ metaTags?: MetaDefinition[];
55
+ }
56
+ /**
57
+ * Purity Framework SEO & Head Metadata Service
58
+ * Fine-grained service managing document titles, canonical links, OpenGraph, Twitter Cards,
59
+ * meta tags, robots directives, and Schema.org JSON-LD structured data.
60
+ */
61
+ export declare class SeoService {
62
+ private defaultSiteName;
63
+ private currentConfig;
64
+ /**
65
+ * Updates the document title and synchronized title meta tags.
66
+ */
67
+ setTitle(title: string, options?: {
68
+ prefix?: string;
69
+ suffix?: string;
70
+ separator?: string;
71
+ }): void;
72
+ /**
73
+ * Returns the current document title.
74
+ */
75
+ getTitle(): string;
76
+ /**
77
+ * Updates the meta description across primary, OpenGraph, and Twitter tags.
78
+ */
79
+ setDescription(description: string): void;
80
+ /**
81
+ * Updates the meta keywords tag.
82
+ */
83
+ setKeywords(keywords: string | string[]): void;
84
+ /**
85
+ * Updates or creates the canonical link tag and corresponding URL tags.
86
+ */
87
+ setCanonicalUrl(url: string): void;
88
+ /**
89
+ * Configures crawler indexing and robots directives.
90
+ */
91
+ setRobots(options: RobotsOptions | string): void;
92
+ /**
93
+ * Configures Open Graph metadata tags for rich social media sharing previews.
94
+ */
95
+ setOpenGraph(og: OpenGraphConfig): void;
96
+ /**
97
+ * Configures Twitter Card metadata tags.
98
+ */
99
+ setTwitterCard(twitter: TwitterCardConfig): void;
100
+ /**
101
+ * Injects or updates a Schema.org JSON-LD structured data script.
102
+ */
103
+ setJsonLd(schema: Record<string, any> | Array<Record<string, any>>, id?: string): void;
104
+ /**
105
+ * Updates an existing meta tag or creates a new one if it does not exist.
106
+ */
107
+ updateTag(tag: MetaDefinition): HTMLMetaElement | null;
108
+ /**
109
+ * Finds and returns a matching meta tag by CSS selector.
110
+ */
111
+ getTag(attrSelector: string): HTMLMetaElement | null;
112
+ /**
113
+ * Removes a meta tag matching the given attribute selector.
114
+ */
115
+ removeTag(attrSelector: string): void;
116
+ /**
117
+ * Batch updates full SEO metadata for a route, page, or view.
118
+ */
119
+ setSeo(config: SeoConfig): void;
120
+ /**
121
+ * Returns the active SEO metadata snapshot.
122
+ */
123
+ getSeo(): SeoConfig;
124
+ /**
125
+ * Generates a precise CSS selector to locate an existing meta tag.
126
+ */
127
+ private buildTagSelector;
128
+ }
129
+ /**
130
+ * MetaService is an alias for SeoService to support standard metadata naming conventions.
131
+ */
132
+ export declare class MetaService extends SeoService {
133
+ }
134
+ //# sourceMappingURL=seo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seo.d.ts","sourceRoot":"","sources":["../../src/framework/seo.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ import type { Constructor } from './di';
2
+ export interface FieldValidationConfig {
3
+ selector: string;
4
+ validClass?: string;
5
+ invalidClass?: string;
6
+ validate?: (value: string, element: HTMLElement) => boolean;
7
+ }
8
+ export interface ValidatorOptions {
9
+ form: string;
10
+ fields: Record<string, string | FieldValidationConfig>;
11
+ validClass?: string;
12
+ invalidClass?: string;
13
+ events?: string[];
14
+ }
15
+ export interface ValidatorLifecycle {
16
+ form: HTMLFormElement | HTMLElement | null;
17
+ fields: Map<string, HTMLElement>;
18
+ submitButtons: HTMLElement[];
19
+ isValid: boolean;
20
+ onInit?(): void;
21
+ onDestroy?(): void;
22
+ validateAll?(): boolean;
23
+ updateFormState?(isValid: boolean): void;
24
+ onFieldChange?(fieldName: string, value: string, isValid: boolean, element: HTMLElement): void;
25
+ onStateChange?(isValid: boolean, validator: this): void;
26
+ [key: string]: any;
27
+ }
28
+ export declare abstract class BaseValidator implements ValidatorLifecycle {
29
+ form: HTMLFormElement | HTMLElement | null;
30
+ fields: Map<string, HTMLElement>;
31
+ submitButtons: HTMLElement[];
32
+ isValid: boolean;
33
+ onInit?(): void;
34
+ onDestroy?(): void;
35
+ onFieldChange?(fieldName: string, value: string, isValid: boolean, element: HTMLElement): void;
36
+ onStateChange?(isValid: boolean, validator: this): void;
37
+ validateAll(): boolean;
38
+ updateFormState(isValid: boolean): void;
39
+ }
40
+ export declare const validatorRegistry: Map<string, {
41
+ constructor: Constructor<ValidatorLifecycle>;
42
+ options: ValidatorOptions;
43
+ }>;
44
+ /**
45
+ * Decorator to register a class as a Form Validator.
46
+ * Automatically tracks field mutations and toggles submit button disabled states and CSS classes.
47
+ *
48
+ * @example
49
+ * ```typescript
50
+ * @Validator({
51
+ * form: '.forms-validation-form',
52
+ * fields: {
53
+ * input1: '#input1',
54
+ * input2: '#input2',
55
+ * },
56
+ * validClass: 'is-valid',
57
+ * invalidClass: 'is-invalid',
58
+ * })
59
+ * export class MyFormValidator extends BaseValidator {
60
+ * validateInput1(value: string): boolean {
61
+ * return value.trim().length >= 3;
62
+ * }
63
+ * }
64
+ * ```
65
+ */
66
+ export declare function Validator(options: ValidatorOptions): <T extends Constructor>(target: T, _context?: ClassDecoratorContext<T> | any) => T | void;
67
+ /**
68
+ * Scans a DOM tree for forms matching registered validators and attaches form and field validation.
69
+ */
70
+ export declare function bindValidators(root: HTMLElement, _context?: any): Array<{
71
+ destroy: () => void;
72
+ }>;
73
+ //# sourceMappingURL=validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../src/framework/validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,MAAM,CAAC;AAExC,MAAM,WAAW,qBAAqB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC;CAC/D;AAED,MAAM,WAAW,gBAAgB;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,qBAAqB,CAAC,CAAC;IACvD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB;IAC/B,IAAI,EAAE,eAAe,GAAG,WAAW,GAAG,IAAI,CAAC;IAC3C,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACjC,aAAa,EAAE,WAAW,EAAE,CAAC;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,IAAI,IAAI,CAAC;IAChB,SAAS,CAAC,IAAI,IAAI,CAAC;IACnB,WAAW,CAAC,IAAI,OAAO,CAAC;IACxB,eAAe,CAAC,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACzC,aAAa,CAAC,CACV,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,WAAW,GACrB,IAAI,CAAC;IACR,aAAa,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC;IACxD,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACtB;AAED,8BAAsB,aAAc,YAAW,kBAAkB;IAC7D,IAAI,EAAE,eAAe,GAAG,WAAW,GAAG,IAAI,CAAQ;IAClD,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAa;IAC7C,aAAa,EAAE,WAAW,EAAE,CAAM;IAClC,OAAO,EAAE,OAAO,CAAS;IAEzB,MAAM,CAAC,IAAI,IAAI,CAAC;IAChB,SAAS,CAAC,IAAI,IAAI,CAAC;IACnB,aAAa,CAAC,CACV,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,WAAW,GACrB,IAAI,CAAC;IACR,aAAa,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC;IAExD,WAAW,IAAI,OAAO,CAErB;IAED,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAEtC;CACJ;AAED,eAAO,MAAM,iBAAiB;iBAGT,WAAW,CAAC,kBAAkB,CAAC;aACnC,gBAAgB;EAE9B,CAAC;AAEJ;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,gBAAgB,IAC9B,CAAC,SAAS,WAAW,UAC1B,CAAC,aACE,qBAAqB,CAAC,CAAC,CAAC,GAAG,GAAG,KAC1C,CAAC,GAAG,IAAI,CAQd;AAkCD;;GAEG;AACH,wBAAgB,cAAc,CAC1B,IAAI,EAAE,WAAW,EACjB,QAAQ,GAAE,GAAU,GACrB,KAAK,CAAC;IAAE,OAAO,EAAE,MAAM,IAAI,CAAA;CAAE,CAAC,CA0MhC"}
@@ -0,0 +1,36 @@
1
+ export interface VirtualForOptions {
2
+ itemHeight: number;
3
+ buffer: number;
4
+ height?: string;
5
+ dynamicHeight?: boolean;
6
+ scrollIndexExpr?: string;
7
+ scrollAlign?: 'start' | 'center' | 'end';
8
+ }
9
+ export interface VirtualScrollMetrics {
10
+ totalItems: number;
11
+ renderedCount: number;
12
+ startIndex: number;
13
+ endIndex: number;
14
+ scrollTop: number;
15
+ totalHeight: number;
16
+ itemHeight: number;
17
+ }
18
+ export declare function getVirtualForAttribute(el: Element): string | null;
19
+ export declare function hasVirtualForAttribute(el: Element): boolean;
20
+ export declare function removeVirtualForAttributes(el: Element): void;
21
+ /**
22
+ * Parses virtual-for expression:
23
+ * e.g. "let item, index of items; itemHeight: 48; buffer: 8; height: 420px; scrollIndex: jumpSignal"
24
+ */
25
+ export declare function parseVirtualForExpression(rawExpr: string): {
26
+ itemVar: string;
27
+ indexVar: string;
28
+ arrayExpr: string;
29
+ options: VirtualForOptions;
30
+ };
31
+ /**
32
+ * Binds high-performance virtual scrolling repeater on elements with `virtual-for`
33
+ * or inside `<virtual-scroll>` custom containers.
34
+ */
35
+ export declare function bindVirtualFor(rootEl: HTMLElement, context: any, componentInstance: any, bindTemplateTreeFn: (root: HTMLElement, ctx: any, inst: any) => void, evaluateValueFn: (expr: string, ctx: any) => any, isInsideNestedComponentFn: (node: Node, root: HTMLElement) => boolean): void;
36
+ //# sourceMappingURL=virtual-for.d.ts.map