@dooboostore/simple-web-component 1.0.44 → 1.0.46

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 (95) hide show
  1. package/README.md +25 -25
  2. package/dist/cjs/decorators/addEventListener.js.map +2 -2
  3. package/dist/cjs/decorators/applyAttribute.js +36 -15
  4. package/dist/cjs/decorators/applyAttribute.js.map +2 -2
  5. package/dist/cjs/decorators/applyClass.js +53 -22
  6. package/dist/cjs/decorators/applyClass.js.map +2 -2
  7. package/dist/cjs/decorators/applyNode.js +54 -24
  8. package/dist/cjs/decorators/applyNode.js.map +2 -2
  9. package/dist/cjs/decorators/applyProperty.js +38 -17
  10. package/dist/cjs/decorators/applyProperty.js.map +2 -2
  11. package/dist/cjs/decorators/applyStyle.js +53 -22
  12. package/dist/cjs/decorators/applyStyle.js.map +2 -2
  13. package/dist/cjs/decorators/elementDefine.js +49 -33
  14. package/dist/cjs/decorators/elementDefine.js.map +3 -3
  15. package/dist/cjs/decorators/emitCustomEvent.js +61 -47
  16. package/dist/cjs/decorators/emitCustomEvent.js.map +2 -2
  17. package/dist/cjs/decorators/lifecycles.js +11 -36
  18. package/dist/cjs/decorators/lifecycles.js.map +2 -2
  19. package/dist/cjs/decorators/query.js +91 -56
  20. package/dist/cjs/decorators/query.js.map +2 -2
  21. package/dist/cjs/decorators/queryAll.js +104 -66
  22. package/dist/cjs/decorators/queryAll.js.map +2 -2
  23. package/dist/cjs/elements/SwcAppMixin.js +6 -2
  24. package/dist/cjs/elements/SwcAppMixin.js.map +2 -2
  25. package/dist/cjs/types/window.d.js.map +1 -1
  26. package/dist/esm/decorators/addEventListener.js.map +2 -2
  27. package/dist/esm/decorators/applyAttribute.js +36 -15
  28. package/dist/esm/decorators/applyAttribute.js.map +2 -2
  29. package/dist/esm/decorators/applyClass.js +53 -22
  30. package/dist/esm/decorators/applyClass.js.map +2 -2
  31. package/dist/esm/decorators/applyNode.js +54 -24
  32. package/dist/esm/decorators/applyNode.js.map +2 -2
  33. package/dist/esm/decorators/applyProperty.js +38 -17
  34. package/dist/esm/decorators/applyProperty.js.map +2 -2
  35. package/dist/esm/decorators/applyStyle.js +53 -22
  36. package/dist/esm/decorators/applyStyle.js.map +2 -2
  37. package/dist/esm/decorators/elementDefine.js +50 -34
  38. package/dist/esm/decorators/elementDefine.js.map +2 -2
  39. package/dist/esm/decorators/emitCustomEvent.js +61 -47
  40. package/dist/esm/decorators/emitCustomEvent.js.map +2 -2
  41. package/dist/esm/decorators/lifecycles.js +11 -36
  42. package/dist/esm/decorators/lifecycles.js.map +2 -2
  43. package/dist/esm/decorators/query.js +91 -56
  44. package/dist/esm/decorators/query.js.map +2 -2
  45. package/dist/esm/decorators/queryAll.js +104 -66
  46. package/dist/esm/decorators/queryAll.js.map +2 -2
  47. package/dist/esm/elements/SwcAppMixin.js +6 -2
  48. package/dist/esm/elements/SwcAppMixin.js.map +2 -2
  49. package/dist/esm-bundle/dooboostore-simple-web-component.esm.js +572 -320
  50. package/dist/esm-bundle/dooboostore-simple-web-component.esm.js.map +3 -3
  51. package/dist/types/decorators/addEventListener.d.ts +7 -6
  52. package/dist/types/decorators/addEventListener.d.ts.map +1 -1
  53. package/dist/types/decorators/applyAttribute.d.ts +13 -8
  54. package/dist/types/decorators/applyAttribute.d.ts.map +1 -1
  55. package/dist/types/decorators/applyClass.d.ts +8 -7
  56. package/dist/types/decorators/applyClass.d.ts.map +1 -1
  57. package/dist/types/decorators/applyNode.d.ts +18 -17
  58. package/dist/types/decorators/applyNode.d.ts.map +1 -1
  59. package/dist/types/decorators/applyProperty.d.ts +14 -9
  60. package/dist/types/decorators/applyProperty.d.ts.map +1 -1
  61. package/dist/types/decorators/applyStyle.d.ts +6 -5
  62. package/dist/types/decorators/applyStyle.d.ts.map +1 -1
  63. package/dist/types/decorators/elementDefine.d.ts.map +1 -1
  64. package/dist/types/decorators/emitCustomEvent.d.ts +3 -2
  65. package/dist/types/decorators/emitCustomEvent.d.ts.map +1 -1
  66. package/dist/types/decorators/lifecycles.d.ts +12 -13
  67. package/dist/types/decorators/lifecycles.d.ts.map +1 -1
  68. package/dist/types/decorators/query.d.ts +15 -5
  69. package/dist/types/decorators/query.d.ts.map +1 -1
  70. package/dist/types/decorators/queryAll.d.ts +15 -5
  71. package/dist/types/decorators/queryAll.d.ts.map +1 -1
  72. package/dist/types/elements/SwcAppMixin.d.ts.map +1 -1
  73. package/dist/umd-bundle/dooboostore-simple-web-component.umd.js +572 -320
  74. package/dist/umd-bundle/dooboostore-simple-web-component.umd.js.map +3 -3
  75. package/package.json +3 -3
  76. package/src/decorators/addEventListener.ts +9 -7
  77. package/src/decorators/applyAttribute.ts +60 -27
  78. package/src/decorators/applyClass.ts +78 -32
  79. package/src/decorators/applyNode.ts +118 -73
  80. package/src/decorators/applyProperty.ts +63 -30
  81. package/src/decorators/applyStyle.ts +76 -30
  82. package/src/decorators/elementDefine.ts +57 -37
  83. package/src/decorators/emitCustomEvent.ts +63 -39
  84. package/src/decorators/lifecycles.ts +53 -52
  85. package/src/decorators/query.ts +111 -49
  86. package/src/decorators/queryAll.ts +121 -61
  87. package/src/elements/SwcAppMixin.ts +7 -3
  88. package/src/types/window.d.ts +3 -0
  89. package/dist/cjs/examples/RxJSOperatorsExample.js +0 -285
  90. package/dist/cjs/examples/RxJSOperatorsExample.js.map +0 -7
  91. package/dist/esm/examples/RxJSOperatorsExample.js +0 -266
  92. package/dist/esm/examples/RxJSOperatorsExample.js.map +0 -7
  93. package/dist/types/examples/RxJSOperatorsExample.d.ts +0 -94
  94. package/dist/types/examples/RxJSOperatorsExample.d.ts.map +0 -1
  95. package/src/examples/RxJSOperatorsExample.ts +0 -279
@@ -1,29 +1,44 @@
1
1
  import { ReflectUtils } from '@dooboostore/core';
2
2
  import { getElementConfig, ensureInit } from './elementDefine';
3
3
  import { SwcUtils } from '../utils/Utils';
4
- import { SpecialSelector, SwcQueryOptions, HelperHostSet } from '../types';
4
+ import { SwcQueryOptions, HelperHostSet } from '../types';
5
+
6
+ export interface QueryAllOptions extends SwcQueryOptions {
7
+ /**
8
+ * Filter function to determine whether to include the element.
9
+ * If it returns false, the element is skipped.
10
+ */
11
+ filter?: (target: HTMLElement, meta: { currentThis: any, helper: HelperHostSet }) => boolean;
12
+ }
5
13
 
6
14
  export interface QueryAllMetadata {
7
15
  propertyKey: string | symbol;
8
- selector: string;
9
- options: SwcQueryOptions;
16
+ selector: string | ((currentThis: any, helper: HelperHostSet) => NodeList | Element | Element[] | null);
17
+ options: QueryAllOptions;
10
18
  }
11
19
 
12
20
  export const QUERY_ALL_METADATA_KEY = Symbol.for('simple-web-component:query-all');
13
21
 
14
22
  export function queryAll(target: Object, propertyKey: string | symbol, descriptor?: PropertyDescriptor): PropertyDescriptor | void;
15
- export function queryAll(selector: string, options?: SwcQueryOptions): PropertyDecorator;
16
- export function queryAll(options?: SwcQueryOptions): PropertyDecorator;
23
+ export function queryAll(selector: string | ((currentThis: any, helper: HelperHostSet) => NodeList | Element | Element[] | null), options?: QueryAllOptions): PropertyDecorator;
24
+ export function queryAll(options?: QueryAllOptions): PropertyDecorator;
17
25
  /**
18
26
  * @queryAll decorator to inject a list of elements into a class property.
27
+ *
28
+ * Supports both string selectors and function-based selectors:
29
+ * - String selector: @queryAll('.item')
30
+ * - Function selector: @queryAll((currentThis, helper) => currentThis.shadowRoot?.querySelectorAll('.item'))
31
+ *
32
+ * Supports filtering:
33
+ * - @queryAll('.item', { filter: (target, meta) => target.hasAttribute('active') })
19
34
  */
20
- export function queryAll(selectorOrTarget?: string | Object, optionsOrPropertyKey?: SwcQueryOptions | string | symbol, descriptor?: PropertyDescriptor): any {
35
+ export function queryAll(selectorOrTarget?: string | ((currentThis: any, helper: HelperHostSet) => NodeList | Element | Element[] | null) | Object, optionsOrPropertyKey?: QueryAllOptions | string | symbol, descriptor?: PropertyDescriptor): any {
21
36
  // Bare decorator: @queryAll
22
37
  if (descriptor !== undefined && (typeof optionsOrPropertyKey === 'string' || typeof optionsOrPropertyKey === 'symbol')) {
23
38
  throw new Error(`@queryAll decorator cannot be used on methods. (Method: ${String(optionsOrPropertyKey)})`);
24
39
  }
25
40
  // With selector
26
- if (typeof selectorOrTarget === 'string') {
41
+ if (typeof selectorOrTarget === 'string' || typeof selectorOrTarget === 'function') {
27
42
  return (targetObj: Object, propertyKey: string | symbol, descriptor?: never): void => {
28
43
  if (descriptor !== undefined) {
29
44
  throw new Error(`@queryAll decorator cannot be used on methods. (Method: ${String(propertyKey)})`);
@@ -35,78 +50,123 @@ export function queryAll(selectorOrTarget?: string | Object, optionsOrPropertyKe
35
50
  queries = [];
36
51
  ReflectUtils.defineMetadata(QUERY_ALL_METADATA_KEY, queries, constructor);
37
52
  }
38
- queries.push({ propertyKey, selector: selectorOrTarget, options: optionsOrPropertyKey as SwcQueryOptions || {} });
53
+ queries.push({ propertyKey, selector: selectorOrTarget as any, options: optionsOrPropertyKey as QueryAllOptions || {} });
39
54
 
40
55
  Object.defineProperty(targetObj, propertyKey, {
41
56
  get(this: HTMLElement) {
42
57
  ensureInit(this);
43
- const selector = selectorOrTarget;
44
-
45
- const r = (optionsOrPropertyKey as SwcQueryOptions)?.root || 'auto';
46
- const applyRoot = (t: any): any[] => {
47
- if (!t) return [];
48
- const items = Array.isArray(t) ? t : [t];
49
- const results: any[] = [];
50
- items.forEach(it => {
51
- if (!(it instanceof HTMLElement)) {
52
- results.push(it);
53
- return;
54
- }
55
- if (r === 'auto') results.push(it.shadowRoot || it);
56
- else {
57
- if (r === 'light' || r === 'all') results.push(it);
58
- if ((r === 'shadow' || r === 'all') && it.shadowRoot) results.push(it.shadowRoot);
59
- }
60
- });
61
- return results;
62
- };
63
-
64
- // --- Special Selectors: HostSet ---
65
- const hostSet = SwcUtils.getHostSet(this);
66
- if (selector === '$hosts') return applyRoot(hostSet.$hosts);
67
- if (selector === '$appHosts') return applyRoot(hostSet.$appHosts);
68
- if (selector === '$host') return applyRoot(hostSet.$host);
69
- if (selector === '$parentHost') return applyRoot(hostSet.$parentHost);
70
- if (selector === '$appHost') return applyRoot(hostSet.$appHost);
71
- if (selector === '$firstHost') return applyRoot(hostSet.$firstHost);
72
- if (selector === '$lastHost') return applyRoot(hostSet.$lastHost);
73
- if (selector === '$firstAppHost') return applyRoot(hostSet.$firstAppHost);
74
- if (selector === '$lastAppHost') return applyRoot(hostSet.$lastAppHost);
75
-
76
- // --- Special Selectors: Env ---
77
58
  const config = getElementConfig(this);
78
59
  const win = config?.window || window;
79
- if (selector === '$window') return [win];
80
- if (selector === '$document') return [win.document];
81
- if (selector === '$this') return applyRoot(this);
60
+ const hostSet = SwcUtils.getHelperAndHostSet(win, this);
61
+
62
+ // Resolve selector - can be string or function
63
+ let resolvedSelector: string;
64
+ let resolvedElements: HTMLElement[] = [];
65
+
66
+ if (typeof selectorOrTarget === 'function') {
67
+ const result = (selectorOrTarget as any)(this, hostSet);
68
+ // If function returns NodeList or Element[], convert to array
69
+ if (result instanceof win.NodeList) {
70
+ resolvedElements = Array.from(result).filter(el => el instanceof win.HTMLElement) as HTMLElement[];
71
+ } else if (Array.isArray(result)) {
72
+ resolvedElements = result.filter(el => el instanceof win.HTMLElement) as HTMLElement[];
73
+ }
74
+ } else {
75
+ resolvedSelector = selectorOrTarget;
82
76
 
83
- // --- Standard Selectors ---
84
- if (r === 'shadow') return this.shadowRoot ? Array.from(this.shadowRoot.querySelectorAll(selector)) : [];
85
- if (r === 'light') return Array.from(this.querySelectorAll(selector));
86
- if (r === 'all') {
87
- const sNodes = this.shadowRoot ? Array.from(this.shadowRoot.querySelectorAll(selector)) : [];
88
- const lNodes = Array.from(this.querySelectorAll(selector));
89
- return [...sNodes, ...lNodes];
77
+ const r = (optionsOrPropertyKey as QueryAllOptions)?.root || 'auto';
78
+ const applyRoot = (t: any): any[] => {
79
+ if (!t) return [];
80
+ const items = Array.isArray(t) ? t : [t];
81
+ const results: any[] = [];
82
+ items.forEach(it => {
83
+ if (!(it instanceof HTMLElement)) {
84
+ results.push(it);
85
+ return;
86
+ }
87
+ if (r === 'auto') results.push(it.shadowRoot || it);
88
+ else {
89
+ if (r === 'light' || r === 'all') results.push(it);
90
+ if ((r === 'shadow' || r === 'all') && it.shadowRoot) results.push(it.shadowRoot);
91
+ }
92
+ });
93
+ return results;
94
+ };
95
+
96
+ // --- Special Selectors: HostSet ---
97
+ if (resolvedSelector === '$hosts') resolvedElements = applyRoot(hostSet.$hosts).filter(el => el instanceof HTMLElement);
98
+ else if (resolvedSelector === '$appHosts') resolvedElements = applyRoot(hostSet.$appHosts).filter(el => el instanceof HTMLElement);
99
+ else if (resolvedSelector === '$host') resolvedElements = applyRoot(hostSet.$host).filter(el => el instanceof HTMLElement);
100
+ else if (resolvedSelector === '$parentHost') resolvedElements = applyRoot(hostSet.$parentHost).filter(el => el instanceof HTMLElement);
101
+ else if (resolvedSelector === '$appHost') resolvedElements = applyRoot(hostSet.$appHost).filter(el => el instanceof HTMLElement);
102
+ else if (resolvedSelector === '$firstHost') resolvedElements = applyRoot(hostSet.$firstHost).filter(el => el instanceof HTMLElement);
103
+ else if (resolvedSelector === '$lastHost') resolvedElements = applyRoot(hostSet.$lastHost).filter(el => el instanceof HTMLElement);
104
+ else if (resolvedSelector === '$firstAppHost') resolvedElements = applyRoot(hostSet.$firstAppHost).filter(el => el instanceof HTMLElement);
105
+ else if (resolvedSelector === '$lastAppHost') resolvedElements = applyRoot(hostSet.$lastAppHost).filter(el => el instanceof HTMLElement);
106
+ // --- Special Selectors: Env ---
107
+ else if (resolvedSelector === '$window') return [win];
108
+ else if (resolvedSelector === '$document') return [win.document];
109
+ else if (resolvedSelector === '$this') resolvedElements = applyRoot(this).filter(el => el instanceof HTMLElement);
110
+ // --- Standard Selectors ---
111
+ else {
112
+ if (r === 'shadow') resolvedElements = this.shadowRoot ? (Array.from(this.shadowRoot.querySelectorAll(resolvedSelector)) as HTMLElement[]) : [];
113
+ else if (r === 'light') resolvedElements = Array.from(this.querySelectorAll(resolvedSelector)) as HTMLElement[];
114
+ else if (r === 'all') {
115
+ const sNodes = this.shadowRoot ? (Array.from(this.shadowRoot.querySelectorAll(resolvedSelector)) as HTMLElement[]) : [];
116
+ const lNodes = Array.from(this.querySelectorAll(resolvedSelector)) as HTMLElement[];
117
+ resolvedElements = [...sNodes, ...lNodes];
118
+ }
119
+ else resolvedElements = (Array.from((this.shadowRoot || this).querySelectorAll(resolvedSelector)) as HTMLElement[]);
120
+ }
90
121
  }
91
- const root = this.shadowRoot || this;
92
- return Array.from(root.querySelectorAll(selector));
122
+
123
+ // Apply filter if provided
124
+ if ((optionsOrPropertyKey as QueryAllOptions)?.filter) {
125
+ resolvedElements = resolvedElements.filter(el => {
126
+ if (!(el instanceof win.HTMLElement)) return true;
127
+ return (optionsOrPropertyKey as QueryAllOptions).filter!(el, { currentThis: this, helper: hostSet });
128
+ });
129
+ }
130
+
131
+ return resolvedElements;
93
132
  },
94
133
  set(this: HTMLElement, nv: any) {
95
134
  ensureInit(this);
96
135
  if (nv === null || nv === undefined || (Array.isArray(nv) && nv.length === 0)) {
97
- const selector = selectorOrTarget;
98
- if (selector.startsWith('$') && selector !== '$this') return;
136
+ const config = getElementConfig(this);
137
+ const win = config?.window || window;
138
+ const hostSet = SwcUtils.getHelperAndHostSet(win, this);
139
+
140
+ // Resolve selector - can be string or function
141
+ if (typeof selectorOrTarget === 'function') {
142
+ // Get elements from function and remove them
143
+ const result = (selectorOrTarget as any)(this, hostSet);
144
+ if (result instanceof win.NodeList) {
145
+ Array.from(result).forEach(el => {
146
+ if (el instanceof win.Element) (el as Element).remove();
147
+ });
148
+ } else if (Array.isArray(result)) {
149
+ result.forEach(el => {
150
+ if (el instanceof win.Element) (el as Element).remove();
151
+ });
152
+ }
153
+ return;
154
+ }
155
+
156
+ const resolvedSelector = selectorOrTarget;
157
+
158
+ if (resolvedSelector.startsWith('$') && resolvedSelector !== '$this') return;
99
159
 
100
160
  const r = (optionsOrPropertyKey as SwcQueryOptions)?.root || 'auto';
101
161
  let targets: (Element | Node)[] = [];
102
- if (r === 'shadow') targets = this.shadowRoot ? Array.from(this.shadowRoot.querySelectorAll(selector)) : [];
103
- else if (r === 'light') targets = Array.from(this.querySelectorAll(selector));
162
+ if (r === 'shadow') targets = this.shadowRoot ? Array.from(this.shadowRoot.querySelectorAll(resolvedSelector)) : [];
163
+ else if (r === 'light') targets = Array.from(this.querySelectorAll(resolvedSelector));
104
164
  else if (r === 'all') {
105
- const sNodes = this.shadowRoot ? Array.from(this.shadowRoot.querySelectorAll(selector)) : [];
106
- const lNodes = Array.from(this.querySelectorAll(selector));
165
+ const sNodes = this.shadowRoot ? Array.from(this.shadowRoot.querySelectorAll(resolvedSelector)) : [];
166
+ const lNodes = Array.from(this.querySelectorAll(resolvedSelector));
107
167
  targets = [...sNodes, ...lNodes];
108
168
  } else {
109
- targets = Array.from((this.shadowRoot || this).querySelectorAll(selector));
169
+ targets = Array.from((this.shadowRoot || this).querySelectorAll(resolvedSelector));
110
170
  }
111
171
  targets.forEach(t => (t as Element).remove());
112
172
  }
@@ -2,7 +2,7 @@ import { SwcAppInterface, SwcAppMessage } from '../types';
2
2
  import { APPLY_NODE_METADATA_KEY, findAllLifecycleMetadata, getSubscribeSwcAppMessageWhileConnectedMetadata, getSubscribeSwcAppRouteChangeWhileConnectedMetadata, ON_CONNECTED_SWC_APP_METADATA_KEY, SUBSCRIBE_SWC_APP_ROUTE_CHANGE_WHILE_CONNECTED_METADATA_KEY } from '../decorators';
3
3
  import { SwcAppEngine, SwcAttributeConfigType, SwcConfigType } from '../SwcAppEngine';
4
4
  import { debounceTimeIntervalLock, FunctionUtils, Subscription } from '@dooboostore/core';
5
- import { RouterEventType } from '@dooboostore/core-web';
5
+ import {RouterEventType, ValidUtils} from '@dooboostore/core-web';
6
6
  import { SwcUtils } from '../utils/Utils';
7
7
 
8
8
  export const isSSR = (i: HTMLElement) => {
@@ -137,7 +137,9 @@ export function SwcAppMixin<T extends { new (...args: any[]): HTMLElement }>(Bas
137
137
  }
138
138
  }
139
139
  } finally {
140
- if (this.config?.ssr) {
140
+ // this.config?.window
141
+ const isBrowser = ValidUtils.isBrowser();
142
+ if (!isBrowser && this.config?.ssr) {
141
143
  setSSRAttribute(instance);
142
144
  } else {
143
145
  removeSSRAttribute(instance);
@@ -188,7 +190,9 @@ export function SwcAppMixin<T extends { new (...args: any[]): HTMLElement }>(Bas
188
190
  }
189
191
  }
190
192
 
191
- if (this.config?.ssr) {
193
+ const isBrowser = ValidUtils.isBrowser();
194
+ console.log('------>', isBrowser, this.config?.ssr)
195
+ if (!isBrowser && this.config?.ssr) {
192
196
  setSSRAttribute(instance);
193
197
  } else {
194
198
  removeSSRAttribute(instance);
@@ -5,6 +5,9 @@ import {HTMLDialogElement} from "@dooboostore/dom-parser";
5
5
  */
6
6
  declare global {
7
7
  interface Window {
8
+ Node: typeof Node;
9
+ NodeList: typeof NodeList;
10
+ Element: typeof Element;
8
11
  HTMLElement: typeof HTMLElement;
9
12
  HTMLDivElement: typeof HTMLDivElement;
10
13
  HTMLButtonElement: typeof HTMLButtonElement;
@@ -1,285 +0,0 @@
1
- var __defProp = Object.defineProperty;
2
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
- var __getOwnPropNames = Object.getOwnPropertyNames;
4
- var __hasOwnProp = Object.prototype.hasOwnProperty;
5
- var __export = (target, all) => {
6
- for (var name in all)
7
- __defProp(target, name, { get: all[name], enumerable: true });
8
- };
9
- var __copyProps = (to, from, except, desc) => {
10
- if (from && typeof from === "object" || typeof from === "function") {
11
- for (let key of __getOwnPropNames(from))
12
- if (!__hasOwnProp.call(to, key) && key !== except)
13
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
- }
15
- return to;
16
- };
17
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
- var RxJSOperatorsExample_exports = {};
19
- __export(RxJSOperatorsExample_exports, {
20
- AutoSaveEditor: () => AutoSaveEditor,
21
- FormInput: () => FormInput,
22
- InfiniteScroll: () => InfiniteScroll,
23
- KeyboardHandler: () => KeyboardHandler,
24
- LengthTracker: () => LengthTracker,
25
- MouseTracker: () => MouseTracker,
26
- ResponsiveLayout: () => ResponsiveLayout,
27
- SearchComponent: () => SearchComponent
28
- });
29
- module.exports = __toCommonJS(RxJSOperatorsExample_exports);
30
- var import_decorators = require("../decorators");
31
- var __decorate = function(decorators, target, key, desc) {
32
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
33
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
34
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
35
- return c > 3 && r && Object.defineProperty(target, key, r), r;
36
- };
37
- var __metadata = function(k, v) {
38
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
39
- };
40
- var _a, _b, _c, _d, _e, _f, _g, _h;
41
- let SearchComponent = class SearchComponent2 extends HTMLElement {
42
- constructor() {
43
- super(...arguments);
44
- this.results = [];
45
- }
46
- async onSearchInput(event) {
47
- const input = event.target;
48
- const query = input.value.trim();
49
- if (query.length > 2) {
50
- try {
51
- const response = await fetch(`/api/search?q=${encodeURIComponent(query)}`);
52
- this.results = await response.json();
53
- this.renderResults();
54
- } catch (error) {
55
- console.error("Search failed:", error);
56
- }
57
- } else {
58
- this.results = [];
59
- this.renderResults();
60
- }
61
- }
62
- renderResults() {
63
- console.log("Rendering results:", this.results);
64
- }
65
- };
66
- __decorate([
67
- (0, import_decorators.addEventListener)("$this", "input", { debounceTime: 1e3 }),
68
- __metadata("design:type", Function),
69
- __metadata("design:paramtypes", [typeof (_a = typeof Event !== "undefined" && Event) === "function" ? _a : Object]),
70
- __metadata("design:returntype", Promise)
71
- ], SearchComponent.prototype, "onSearchInput", null);
72
- SearchComponent = __decorate([
73
- (0, import_decorators.elementDefine)("search-component")
74
- ], SearchComponent);
75
- let ResponsiveLayout = class ResponsiveLayout2 extends HTMLElement {
76
- onWindowResize(event) {
77
- const width = window.innerWidth;
78
- const height = window.innerHeight;
79
- console.log(`Window resized to: ${width}x${height}`);
80
- this.updateLayout(width, height);
81
- }
82
- updateLayout(width, height) {
83
- if (width < 768) {
84
- this.classList.add("mobile");
85
- this.classList.remove("desktop");
86
- } else {
87
- this.classList.add("desktop");
88
- this.classList.remove("mobile");
89
- }
90
- }
91
- };
92
- __decorate([
93
- (0, import_decorators.addEventListener)("$window", "resize", { throttleTime: 250 }),
94
- __metadata("design:type", Function),
95
- __metadata("design:paramtypes", [typeof (_b = typeof Event !== "undefined" && Event) === "function" ? _b : Object]),
96
- __metadata("design:returntype", void 0)
97
- ], ResponsiveLayout.prototype, "onWindowResize", null);
98
- ResponsiveLayout = __decorate([
99
- (0, import_decorators.elementDefine)("responsive-layout")
100
- ], ResponsiveLayout);
101
- let FormInput = class FormInput2 extends HTMLElement {
102
- onFormInput(event) {
103
- const input = event.target;
104
- const fieldName = input.name;
105
- const value = input.value;
106
- console.log(`Validating ${fieldName}: ${value}`);
107
- this.validateField(fieldName, value);
108
- }
109
- validateField(name, value) {
110
- const isValid = value.length > 0;
111
- console.log(`Field ${name} is ${isValid ? "valid" : "invalid"}`);
112
- }
113
- };
114
- __decorate([
115
- (0, import_decorators.addEventListener)("$this", "input", {
116
- debounceTime: 300,
117
- distinctUntilChanged: true
118
- }),
119
- __metadata("design:type", Function),
120
- __metadata("design:paramtypes", [typeof (_c = typeof Event !== "undefined" && Event) === "function" ? _c : Object]),
121
- __metadata("design:returntype", void 0)
122
- ], FormInput.prototype, "onFormInput", null);
123
- FormInput = __decorate([
124
- (0, import_decorators.elementDefine)("form-input")
125
- ], FormInput);
126
- let InfiniteScroll = class InfiniteScroll2 extends HTMLElement {
127
- constructor() {
128
- super(...arguments);
129
- this.isLoading = false;
130
- }
131
- onScroll(event) {
132
- if (this.isLoading)
133
- return;
134
- if (this.isNearBottom()) {
135
- console.log("Near bottom, loading more content...");
136
- this.loadMoreContent();
137
- }
138
- }
139
- isNearBottom() {
140
- const scrollTop = window.scrollY;
141
- const windowHeight = window.innerHeight;
142
- const documentHeight = document.documentElement.scrollHeight;
143
- return scrollTop + windowHeight >= documentHeight - 500;
144
- }
145
- async loadMoreContent() {
146
- this.isLoading = true;
147
- try {
148
- await new Promise((resolve) => setTimeout(resolve, 1e3));
149
- console.log("Content loaded");
150
- } finally {
151
- this.isLoading = false;
152
- }
153
- }
154
- };
155
- __decorate([
156
- (0, import_decorators.addEventListener)("$window", "scroll", { throttleTime: 100 }),
157
- __metadata("design:type", Function),
158
- __metadata("design:paramtypes", [typeof (_d = typeof Event !== "undefined" && Event) === "function" ? _d : Object]),
159
- __metadata("design:returntype", void 0)
160
- ], InfiniteScroll.prototype, "onScroll", null);
161
- InfiniteScroll = __decorate([
162
- (0, import_decorators.elementDefine)("infinite-scroll")
163
- ], InfiniteScroll);
164
- let LengthTracker = class LengthTracker2 extends HTMLElement {
165
- onInputChange(event) {
166
- const input = event.target;
167
- const length = input.value.length;
168
- console.log(`Input length changed to: ${length}`);
169
- this.updateLengthDisplay(length);
170
- }
171
- updateLengthDisplay(length) {
172
- const display = this.querySelector(".length-display");
173
- if (display) {
174
- display.textContent = `${length} characters`;
175
- }
176
- }
177
- };
178
- __decorate([
179
- (0, import_decorators.addEventListener)("$this", "input", {
180
- distinctUntilChanged: (prev, curr) => {
181
- return prev?.length === curr?.length;
182
- }
183
- }),
184
- __metadata("design:type", Function),
185
- __metadata("design:paramtypes", [typeof (_e = typeof Event !== "undefined" && Event) === "function" ? _e : Object]),
186
- __metadata("design:returntype", void 0)
187
- ], LengthTracker.prototype, "onInputChange", null);
188
- LengthTracker = __decorate([
189
- (0, import_decorators.elementDefine)("length-tracker")
190
- ], LengthTracker);
191
- let AutoSaveEditor = class AutoSaveEditor2 extends HTMLElement {
192
- constructor() {
193
- super(...arguments);
194
- this.lastSavedContent = "";
195
- }
196
- async onContentChange(event) {
197
- const textarea = event.target;
198
- const content = textarea.value;
199
- if (content !== this.lastSavedContent) {
200
- console.log("Auto-saving content...");
201
- await this.saveContent(content);
202
- this.lastSavedContent = content;
203
- }
204
- }
205
- async saveContent(content) {
206
- try {
207
- const response = await fetch("/api/save", {
208
- method: "POST",
209
- headers: { "Content-Type": "application/json" },
210
- body: JSON.stringify({ content })
211
- });
212
- if (response.ok) {
213
- console.log("Content saved successfully");
214
- this.showSaveIndicator();
215
- }
216
- } catch (error) {
217
- console.error("Save failed:", error);
218
- }
219
- }
220
- showSaveIndicator() {
221
- const indicator = this.querySelector(".save-indicator");
222
- if (indicator) {
223
- indicator.classList.add("show");
224
- setTimeout(() => indicator.classList.remove("show"), 2e3);
225
- }
226
- }
227
- };
228
- __decorate([
229
- (0, import_decorators.addEventListener)("$this", "input", {
230
- debounceTime: 2e3,
231
- distinctUntilChanged: (prev, curr) => {
232
- return prev === curr;
233
- }
234
- }),
235
- __metadata("design:type", Function),
236
- __metadata("design:paramtypes", [typeof (_f = typeof Event !== "undefined" && Event) === "function" ? _f : Object]),
237
- __metadata("design:returntype", Promise)
238
- ], AutoSaveEditor.prototype, "onContentChange", null);
239
- AutoSaveEditor = __decorate([
240
- (0, import_decorators.elementDefine)("auto-save-editor")
241
- ], AutoSaveEditor);
242
- let KeyboardHandler = class KeyboardHandler2 extends HTMLElement {
243
- onSaveShortcut(event) {
244
- event.preventDefault();
245
- console.log("Save shortcut triggered");
246
- this.handleSave();
247
- }
248
- handleSave() {
249
- console.log("Saving...");
250
- }
251
- };
252
- __decorate([
253
- (0, import_decorators.addEventListener)("$document", "keydown", {
254
- throttleTime: 500,
255
- filter: (event) => {
256
- return (event.ctrlKey || event.metaKey) && event.key === "s";
257
- }
258
- }),
259
- __metadata("design:type", Function),
260
- __metadata("design:paramtypes", [typeof (_g = typeof KeyboardEvent !== "undefined" && KeyboardEvent) === "function" ? _g : Object]),
261
- __metadata("design:returntype", void 0)
262
- ], KeyboardHandler.prototype, "onSaveShortcut", null);
263
- KeyboardHandler = __decorate([
264
- (0, import_decorators.elementDefine)("keyboard-handler")
265
- ], KeyboardHandler);
266
- let MouseTracker = class MouseTracker2 extends HTMLElement {
267
- onMouseMove(event) {
268
- const x = event.clientX;
269
- const y = event.clientY;
270
- this.updateCursorPosition(x, y);
271
- }
272
- updateCursorPosition(x, y) {
273
- console.log(`Cursor at: ${x}, ${y}`);
274
- }
275
- };
276
- __decorate([
277
- (0, import_decorators.addEventListener)("$document", "mousemove", { throttleTime: 100 }),
278
- __metadata("design:type", Function),
279
- __metadata("design:paramtypes", [typeof (_h = typeof MouseEvent !== "undefined" && MouseEvent) === "function" ? _h : Object]),
280
- __metadata("design:returntype", void 0)
281
- ], MouseTracker.prototype, "onMouseMove", null);
282
- MouseTracker = __decorate([
283
- (0, import_decorators.elementDefine)("mouse-tracker")
284
- ], MouseTracker);
285
- //# sourceMappingURL=RxJSOperatorsExample.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/examples/RxJSOperatorsExample.ts"],
4
- "sourcesContent": ["/**\n * Example: Using RxJS-like Operators with @addEventListener\n * \n * This example demonstrates how to use debounceTime, throttleTime, and distinctUntilChanged\n * operators with the @addEventListener decorator.\n */\n\nimport { elementDefine, addEventListener } from '../decorators';\n\n/**\n * Example 1: Search Component with Debounce\n * \n * Waits 1 second after user stops typing before performing search.\n * Prevents excessive API calls during typing.\n */\n@elementDefine('search-component')\nexport class SearchComponent extends HTMLElement {\n private results: any[] = [];\n\n @addEventListener('$this', 'input', { debounceTime: 1000 })\n async onSearchInput(event: Event) {\n const input = event.target as HTMLInputElement;\n const query = input.value.trim();\n\n if (query.length > 2) {\n try {\n // Simulate API call\n const response = await fetch(`/api/search?q=${encodeURIComponent(query)}`);\n this.results = await response.json();\n this.renderResults();\n } catch (error) {\n console.error('Search failed:', error);\n }\n } else {\n this.results = [];\n this.renderResults();\n }\n }\n\n private renderResults() {\n // Render search results\n console.log('Rendering results:', this.results);\n }\n}\n\n/**\n * Example 2: Window Resize Handler with Throttle\n * \n * Recalculates layout at most 4 times per second (every 250ms).\n * Prevents performance issues from excessive resize calculations.\n */\n@elementDefine('responsive-layout')\nexport class ResponsiveLayout extends HTMLElement {\n @addEventListener('$window', 'resize', { throttleTime: 250 })\n onWindowResize(event: Event) {\n const width = window.innerWidth;\n const height = window.innerHeight;\n\n console.log(`Window resized to: ${width}x${height}`);\n this.updateLayout(width, height);\n }\n\n private updateLayout(width: number, height: number) {\n // Update layout based on new dimensions\n if (width < 768) {\n this.classList.add('mobile');\n this.classList.remove('desktop');\n } else {\n this.classList.add('desktop');\n this.classList.remove('mobile');\n }\n }\n}\n\n/**\n * Example 3: Form Input with Debounce + Distinct\n * \n * Validates field only when:\n * 1. User stops typing (debounce 300ms)\n * 2. AND the value actually changed (distinct)\n */\n@elementDefine('form-input')\nexport class FormInput extends HTMLElement {\n @addEventListener('$this', 'input', {\n debounceTime: 300,\n distinctUntilChanged: true\n })\n onFormInput(event: Event) {\n const input = event.target as HTMLInputElement;\n const fieldName = input.name;\n const value = input.value;\n\n console.log(`Validating ${fieldName}: ${value}`);\n this.validateField(fieldName, value);\n }\n\n private validateField(name: string, value: string) {\n // Perform validation\n const isValid = value.length > 0;\n console.log(`Field ${name} is ${isValid ? 'valid' : 'invalid'}`);\n }\n}\n\n/**\n * Example 4: Scroll Event with Throttle\n * \n * Checks if user scrolled to bottom at most 10 times per second.\n * Prevents excessive \"load more\" API calls.\n */\n@elementDefine('infinite-scroll')\nexport class InfiniteScroll extends HTMLElement {\n private isLoading = false;\n\n @addEventListener('$window', 'scroll', { throttleTime: 100 })\n onScroll(event: Event) {\n if (this.isLoading) return;\n\n if (this.isNearBottom()) {\n console.log('Near bottom, loading more content...');\n this.loadMoreContent();\n }\n }\n\n private isNearBottom(): boolean {\n const scrollTop = window.scrollY;\n const windowHeight = window.innerHeight;\n const documentHeight = document.documentElement.scrollHeight;\n\n return scrollTop + windowHeight >= documentHeight - 500;\n }\n\n private async loadMoreContent() {\n this.isLoading = true;\n try {\n // Simulate API call\n await new Promise(resolve => setTimeout(resolve, 1000));\n console.log('Content loaded');\n } finally {\n this.isLoading = false;\n }\n }\n}\n\n/**\n * Example 5: Custom Comparison with Distinct\n * \n * Only fires when the input value length changes.\n * Ignores changes that don't affect the length.\n */\n@elementDefine('length-tracker')\nexport class LengthTracker extends HTMLElement {\n @addEventListener('$this', 'input', {\n distinctUntilChanged: (prev: any, curr: any) => {\n // Only consider it changed if the length differs\n return prev?.length === curr?.length;\n }\n })\n onInputChange(event: Event) {\n const input = event.target as HTMLInputElement;\n const length = input.value.length;\n\n console.log(`Input length changed to: ${length}`);\n this.updateLengthDisplay(length);\n }\n\n private updateLengthDisplay(length: number) {\n // Update UI with new length\n const display = this.querySelector('.length-display');\n if (display) {\n display.textContent = `${length} characters`;\n }\n }\n}\n\n/**\n * Example 6: Complex Scenario - Auto-save with Multiple Operators\n * \n * Combines debounce and distinct for intelligent auto-save:\n * - Waits 2 seconds after user stops typing\n * - Only saves if content actually changed\n * - Prevents unnecessary save operations\n */\n@elementDefine('auto-save-editor')\nexport class AutoSaveEditor extends HTMLElement {\n private lastSavedContent = '';\n\n @addEventListener('$this', 'input', {\n debounceTime: 2000,\n distinctUntilChanged: (prev: any, curr: any) => {\n // Consider changed if the content is different\n return prev === curr;\n }\n })\n async onContentChange(event: Event) {\n const textarea = event.target as HTMLTextAreaElement;\n const content = textarea.value;\n\n if (content !== this.lastSavedContent) {\n console.log('Auto-saving content...');\n await this.saveContent(content);\n this.lastSavedContent = content;\n }\n }\n\n private async saveContent(content: string) {\n try {\n // Simulate API call\n const response = await fetch('/api/save', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ content })\n });\n\n if (response.ok) {\n console.log('Content saved successfully');\n this.showSaveIndicator();\n }\n } catch (error) {\n console.error('Save failed:', error);\n }\n }\n\n private showSaveIndicator() {\n const indicator = this.querySelector('.save-indicator');\n if (indicator) {\n indicator.classList.add('show');\n setTimeout(() => indicator.classList.remove('show'), 2000);\n }\n }\n}\n\n/**\n * Example 7: Keyboard Shortcut Handler with Throttle\n * \n * Prevents rapid repeated execution of keyboard shortcuts.\n */\n@elementDefine('keyboard-handler')\nexport class KeyboardHandler extends HTMLElement {\n @addEventListener('$document', 'keydown', {\n throttleTime: 500,\n filter: (event: KeyboardEvent) => {\n // Only handle Ctrl+S or Cmd+S\n return (event.ctrlKey || event.metaKey) && event.key === 's';\n }\n })\n onSaveShortcut(event: KeyboardEvent) {\n event.preventDefault();\n console.log('Save shortcut triggered');\n this.handleSave();\n }\n\n private handleSave() {\n // Handle save operation\n console.log('Saving...');\n }\n}\n\n/**\n * Example 8: Mouse Move Tracking with Throttle\n * \n * Tracks mouse position at most 10 times per second.\n * Useful for analytics or interactive features.\n */\n@elementDefine('mouse-tracker')\nexport class MouseTracker extends HTMLElement {\n @addEventListener('$document', 'mousemove', { throttleTime: 100 })\n onMouseMove(event: MouseEvent) {\n const x = event.clientX;\n const y = event.clientY;\n\n // Update cursor position indicator\n this.updateCursorPosition(x, y);\n }\n\n private updateCursorPosition(x: number, y: number) {\n // Update UI with cursor position\n console.log(`Cursor at: ${x}, ${y}`);\n }\n}\n"],
5
- "mappings": "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",
6
- "names": ["SearchComponent", "ResponsiveLayout", "FormInput", "InfiniteScroll", "LengthTracker", "AutoSaveEditor", "KeyboardHandler", "MouseTracker"]
7
- }