snice 1.13.2 → 1.13.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/templates/base/README.md +1 -1
- package/dist/components/accordion/snice-accordion-item.d.ts +25 -0
- package/dist/components/accordion/snice-accordion-item.js +260 -0
- package/dist/components/accordion/snice-accordion-item.js.map +1 -0
- package/dist/components/accordion/snice-accordion.d.ts +28 -0
- package/dist/components/accordion/snice-accordion.js +221 -0
- package/dist/components/accordion/snice-accordion.js.map +1 -0
- package/dist/components/accordion/snice-accordion.types.d.ts +29 -0
- package/dist/components/accordion/snice-accordion.types.js +2 -0
- package/dist/components/accordion/snice-accordion.types.js.map +1 -0
- package/dist/components/alert/snice-alert.d.ts +26 -0
- package/dist/components/alert/snice-alert.js +191 -0
- package/dist/components/alert/snice-alert.js.map +1 -0
- package/dist/components/alert/snice-alert.types.d.ts +11 -0
- package/dist/components/alert/snice-alert.types.js +2 -0
- package/dist/components/alert/snice-alert.types.js.map +1 -0
- package/dist/components/avatar/snice-avatar.d.ts +24 -0
- package/dist/components/avatar/snice-avatar.js +177 -0
- package/dist/components/avatar/snice-avatar.js.map +1 -0
- package/dist/components/avatar/snice-avatar.types.d.ts +12 -0
- package/dist/components/avatar/snice-avatar.types.js +2 -0
- package/dist/components/avatar/snice-avatar.types.js.map +1 -0
- package/dist/components/badge/snice-badge.d.ts +25 -0
- package/dist/components/badge/snice-badge.js +157 -0
- package/dist/components/badge/snice-badge.js.map +1 -0
- package/dist/components/badge/snice-badge.types.d.ts +15 -0
- package/dist/components/badge/snice-badge.types.js +2 -0
- package/dist/components/badge/snice-badge.types.js.map +1 -0
- package/dist/components/breadcrumbs/snice-breadcrumbs.d.ts +27 -0
- package/dist/components/breadcrumbs/snice-breadcrumbs.js +212 -0
- package/dist/components/breadcrumbs/snice-breadcrumbs.js.map +1 -0
- package/dist/components/breadcrumbs/snice-breadcrumbs.types.d.ts +23 -0
- package/dist/components/breadcrumbs/snice-breadcrumbs.types.js +2 -0
- package/dist/components/breadcrumbs/snice-breadcrumbs.types.js.map +1 -0
- package/dist/components/breadcrumbs/snice-crumb.d.ts +9 -0
- package/dist/components/breadcrumbs/snice-crumb.js +50 -0
- package/dist/components/breadcrumbs/snice-crumb.js.map +1 -0
- package/dist/components/button/snice-button.d.ts +32 -0
- package/dist/components/button/snice-button.js +212 -0
- package/dist/components/button/snice-button.js.map +1 -0
- package/dist/components/button/snice-button.types.d.ts +23 -0
- package/dist/components/button/snice-button.types.js +2 -0
- package/dist/components/button/snice-button.types.js.map +1 -0
- package/dist/components/card/snice-card.d.ts +19 -0
- package/dist/components/card/snice-card.js +132 -0
- package/dist/components/card/snice-card.js.map +1 -0
- package/dist/components/card/snice-card.types.d.ts +9 -0
- package/dist/components/card/snice-card.types.js +2 -0
- package/dist/components/card/snice-card.types.js.map +1 -0
- package/dist/components/checkbox/snice-checkbox.d.ts +34 -0
- package/dist/components/checkbox/snice-checkbox.js +289 -0
- package/dist/components/checkbox/snice-checkbox.js.map +1 -0
- package/dist/components/checkbox/snice-checkbox.types.d.ts +20 -0
- package/dist/components/checkbox/snice-checkbox.types.js +2 -0
- package/dist/components/checkbox/snice-checkbox.types.js.map +1 -0
- package/dist/components/chip/snice-chip.d.ts +28 -0
- package/dist/components/chip/snice-chip.js +203 -0
- package/dist/components/chip/snice-chip.js.map +1 -0
- package/dist/components/chip/snice-chip.types.d.ts +14 -0
- package/dist/components/chip/snice-chip.types.js +2 -0
- package/dist/components/chip/snice-chip.types.js.map +1 -0
- package/dist/components/date-picker/snice-date-picker.d.ts +82 -0
- package/dist/components/date-picker/snice-date-picker.js +880 -0
- package/dist/components/date-picker/snice-date-picker.js.map +1 -0
- package/dist/components/date-picker/snice-date-picker.types.d.ts +71 -0
- package/dist/components/date-picker/snice-date-picker.types.js +2 -0
- package/dist/components/date-picker/snice-date-picker.types.js.map +1 -0
- package/dist/components/divider/snice-divider.d.ts +17 -0
- package/dist/components/divider/snice-divider.js +111 -0
- package/dist/components/divider/snice-divider.js.map +1 -0
- package/dist/components/divider/snice-divider.types.d.ts +14 -0
- package/dist/components/divider/snice-divider.types.js +2 -0
- package/dist/components/divider/snice-divider.types.js.map +1 -0
- package/dist/components/drawer/snice-drawer.d.ts +37 -0
- package/dist/components/drawer/snice-drawer.js +335 -0
- package/dist/components/drawer/snice-drawer.js.map +1 -0
- package/dist/components/drawer/snice-drawer.types.d.ts +16 -0
- package/dist/components/drawer/snice-drawer.types.js +2 -0
- package/dist/components/drawer/snice-drawer.types.js.map +1 -0
- package/dist/components/input/snice-input.d.ts +65 -0
- package/dist/components/input/snice-input.js +603 -0
- package/dist/components/input/snice-input.js.map +1 -0
- package/dist/components/input/snice-input.types.d.ts +53 -0
- package/dist/components/input/snice-input.types.js +2 -0
- package/dist/components/input/snice-input.types.js.map +1 -0
- package/dist/components/layout/snice-layout-blog.d.ts +4 -0
- package/dist/components/layout/snice-layout-blog.js +56 -0
- package/dist/components/layout/snice-layout-blog.js.map +1 -0
- package/dist/components/layout/snice-layout-card.d.ts +6 -0
- package/dist/components/layout/snice-layout-card.js +53 -0
- package/dist/components/layout/snice-layout-card.js.map +1 -0
- package/dist/components/layout/snice-layout-centered.d.ts +5 -0
- package/dist/components/layout/snice-layout-centered.js +38 -0
- package/dist/components/layout/snice-layout-centered.js.map +1 -0
- package/dist/components/layout/snice-layout-dashboard.d.ts +4 -0
- package/dist/components/layout/snice-layout-dashboard.js +53 -0
- package/dist/components/layout/snice-layout-dashboard.js.map +1 -0
- package/dist/components/layout/snice-layout-fullscreen.d.ts +5 -0
- package/dist/components/layout/snice-layout-fullscreen.js +50 -0
- package/dist/components/layout/snice-layout-fullscreen.js.map +1 -0
- package/dist/components/layout/snice-layout-landing.d.ts +4 -0
- package/dist/components/layout/snice-layout-landing.js +55 -0
- package/dist/components/layout/snice-layout-landing.js.map +1 -0
- package/dist/components/layout/snice-layout-minimal.d.ts +4 -0
- package/dist/components/layout/snice-layout-minimal.js +27 -0
- package/dist/components/layout/snice-layout-minimal.js.map +1 -0
- package/dist/components/layout/snice-layout-sidebar.d.ts +5 -0
- package/dist/components/layout/snice-layout-sidebar.js +64 -0
- package/dist/components/layout/snice-layout-sidebar.js.map +1 -0
- package/dist/components/layout/snice-layout-split.d.ts +6 -0
- package/dist/components/layout/snice-layout-split.js +47 -0
- package/dist/components/layout/snice-layout-split.js.map +1 -0
- package/dist/components/layout/snice-layout.d.ts +4 -0
- package/dist/components/layout/snice-layout.js +43 -0
- package/dist/components/layout/snice-layout.js.map +1 -0
- package/dist/components/layout/snice-layout.types.d.ts +3 -0
- package/dist/components/layout/snice-layout.types.js +2 -0
- package/dist/components/layout/snice-layout.types.js.map +1 -0
- package/dist/components/login/snice-login.d.ts +45 -0
- package/dist/components/login/snice-login.js +385 -0
- package/dist/components/login/snice-login.js.map +1 -0
- package/dist/components/login/snice-login.types.d.ts +31 -0
- package/dist/components/login/snice-login.types.js +2 -0
- package/dist/components/login/snice-login.types.js.map +1 -0
- package/dist/components/modal/snice-modal.d.ts +32 -0
- package/dist/components/modal/snice-modal.js +288 -0
- package/dist/components/modal/snice-modal.js.map +1 -0
- package/dist/components/modal/snice-modal.types.d.ts +18 -0
- package/dist/components/modal/snice-modal.types.js +2 -0
- package/dist/components/modal/snice-modal.types.js.map +1 -0
- package/dist/components/pagination/snice-pagination.d.ts +26 -0
- package/dist/components/pagination/snice-pagination.js +373 -0
- package/dist/components/pagination/snice-pagination.js.map +1 -0
- package/dist/components/pagination/snice-pagination.types.d.ts +18 -0
- package/dist/components/pagination/snice-pagination.types.js +2 -0
- package/dist/components/pagination/snice-pagination.types.js.map +1 -0
- package/dist/components/progress/snice-progress.d.ts +35 -0
- package/dist/components/progress/snice-progress.js +295 -0
- package/dist/components/progress/snice-progress.js.map +1 -0
- package/dist/components/progress/snice-progress.types.d.ts +18 -0
- package/dist/components/progress/snice-progress.types.js +2 -0
- package/dist/components/progress/snice-progress.types.js.map +1 -0
- package/dist/components/radio/snice-radio.d.ts +33 -0
- package/dist/components/radio/snice-radio.js +286 -0
- package/dist/components/radio/snice-radio.js.map +1 -0
- package/dist/components/radio/snice-radio.types.d.ts +19 -0
- package/dist/components/radio/snice-radio.types.js +2 -0
- package/dist/components/radio/snice-radio.types.js.map +1 -0
- package/dist/components/select/snice-option.d.ts +17 -0
- package/dist/components/select/snice-option.js +77 -0
- package/dist/components/select/snice-option.js.map +1 -0
- package/dist/components/select/snice-option.types.d.ts +14 -0
- package/dist/components/select/snice-option.types.js +2 -0
- package/dist/components/select/snice-option.types.js.map +1 -0
- package/dist/components/select/snice-select.d.ts +89 -0
- package/dist/components/select/snice-select.js +900 -0
- package/dist/components/select/snice-select.js.map +1 -0
- package/dist/components/select/snice-select.types.d.ts +49 -0
- package/dist/components/select/snice-select.types.js +2 -0
- package/dist/components/select/snice-select.types.js.map +1 -0
- package/dist/components/skeleton/snice-skeleton.d.ts +16 -0
- package/dist/components/skeleton/snice-skeleton.js +159 -0
- package/dist/components/skeleton/snice-skeleton.js.map +1 -0
- package/dist/components/skeleton/snice-skeleton.types.d.ts +10 -0
- package/dist/components/skeleton/snice-skeleton.types.js +2 -0
- package/dist/components/skeleton/snice-skeleton.types.js.map +1 -0
- package/dist/components/switch/snice-switch.d.ts +38 -0
- package/dist/components/switch/snice-switch.js +309 -0
- package/dist/components/switch/snice-switch.js.map +1 -0
- package/dist/components/switch/snice-switch.types.d.ts +21 -0
- package/dist/components/switch/snice-switch.types.js +2 -0
- package/dist/components/switch/snice-switch.types.js.map +1 -0
- package/dist/components/symbols.d.ts +1 -0
- package/dist/components/symbols.js +20 -0
- package/dist/components/symbols.js.map +1 -0
- package/dist/components/table/snice-cell-boolean.d.ts +21 -0
- package/dist/components/table/snice-cell-boolean.js +152 -0
- package/dist/components/table/snice-cell-boolean.js.map +1 -0
- package/dist/components/table/snice-cell-date.d.ts +24 -0
- package/dist/components/table/snice-cell-date.js +240 -0
- package/dist/components/table/snice-cell-date.js.map +1 -0
- package/dist/components/table/snice-cell-duration.d.ts +16 -0
- package/dist/components/table/snice-cell-duration.js +123 -0
- package/dist/components/table/snice-cell-duration.js.map +1 -0
- package/dist/components/table/snice-cell-filesize.d.ts +16 -0
- package/dist/components/table/snice-cell-filesize.js +119 -0
- package/dist/components/table/snice-cell-filesize.js.map +1 -0
- package/dist/components/table/snice-cell-number.d.ts +23 -0
- package/dist/components/table/snice-cell-number.js +202 -0
- package/dist/components/table/snice-cell-number.js.map +1 -0
- package/dist/components/table/snice-cell-progress.d.ts +17 -0
- package/dist/components/table/snice-cell-progress.js +114 -0
- package/dist/components/table/snice-cell-progress.js.map +1 -0
- package/dist/components/table/snice-cell-rating.d.ts +17 -0
- package/dist/components/table/snice-cell-rating.js +113 -0
- package/dist/components/table/snice-cell-rating.js.map +1 -0
- package/dist/components/table/snice-cell-sparkline.d.ts +29 -0
- package/dist/components/table/snice-cell-sparkline.js +290 -0
- package/dist/components/table/snice-cell-sparkline.js.map +1 -0
- package/dist/components/table/snice-cell-text.d.ts +19 -0
- package/dist/components/table/snice-cell-text.js +153 -0
- package/dist/components/table/snice-cell-text.js.map +1 -0
- package/dist/components/table/snice-cell.d.ts +32 -0
- package/dist/components/table/snice-cell.js +451 -0
- package/dist/components/table/snice-cell.js.map +1 -0
- package/dist/components/table/snice-column.d.ts +62 -0
- package/dist/components/table/snice-column.js +440 -0
- package/dist/components/table/snice-column.js.map +1 -0
- package/dist/components/table/snice-header.d.ts +33 -0
- package/dist/components/table/snice-header.js +303 -0
- package/dist/components/table/snice-header.js.map +1 -0
- package/dist/components/table/snice-progress.d.ts +10 -0
- package/dist/components/table/snice-progress.js +91 -0
- package/dist/components/table/snice-progress.js.map +1 -0
- package/dist/components/table/snice-rating.d.ts +9 -0
- package/dist/components/table/snice-rating.js +68 -0
- package/dist/components/table/snice-rating.js.map +1 -0
- package/dist/components/table/snice-row.d.ts +43 -0
- package/dist/components/table/snice-row.js +365 -0
- package/dist/components/table/snice-row.js.map +1 -0
- package/dist/components/table/snice-table.d.ts +69 -0
- package/dist/components/table/snice-table.js +814 -0
- package/dist/components/table/snice-table.js.map +1 -0
- package/dist/components/table/snice-table.types.d.ts +137 -0
- package/dist/components/table/snice-table.types.js +2 -0
- package/dist/components/table/snice-table.types.js.map +1 -0
- package/dist/components/tabs/snice-tab-panel.d.ts +12 -0
- package/dist/components/tabs/snice-tab-panel.js +78 -0
- package/dist/components/tabs/snice-tab-panel.js.map +1 -0
- package/dist/components/tabs/snice-tab.d.ts +13 -0
- package/dist/components/tabs/snice-tab.js +90 -0
- package/dist/components/tabs/snice-tab.js.map +1 -0
- package/dist/components/tabs/snice-tabs.d.ts +34 -0
- package/dist/components/tabs/snice-tabs.js +367 -0
- package/dist/components/tabs/snice-tabs.js.map +1 -0
- package/dist/components/tabs/snice-tabs.types.d.ts +23 -0
- package/dist/components/tabs/snice-tabs.types.js +2 -0
- package/dist/components/tabs/snice-tabs.types.js.map +1 -0
- package/dist/components/toast/snice-toast-container.d.ts +25 -0
- package/dist/components/toast/snice-toast-container.js +251 -0
- package/dist/components/toast/snice-toast-container.js.map +1 -0
- package/dist/components/toast/snice-toast.d.ts +23 -0
- package/dist/components/toast/snice-toast.js +316 -0
- package/dist/components/toast/snice-toast.js.map +1 -0
- package/dist/components/toast/snice-toast.types.d.ts +30 -0
- package/dist/components/toast/snice-toast.types.js +2 -0
- package/dist/components/toast/snice-toast.types.js.map +1 -0
- package/dist/components/tooltip/snice-tooltip.d.ts +50 -0
- package/dist/components/tooltip/snice-tooltip.js +656 -0
- package/dist/components/tooltip/snice-tooltip.js.map +1 -0
- package/dist/components/tooltip/snice-tooltip.types.d.ts +18 -0
- package/dist/components/tooltip/snice-tooltip.types.js +2 -0
- package/dist/components/tooltip/snice-tooltip.types.js.map +1 -0
- package/dist/components/transitions.d.ts +11 -0
- package/dist/components/transitions.js +69 -0
- package/dist/components/transitions.js.map +1 -0
- package/dist/src/controller.d.ts +61 -0
- package/dist/src/controller.js +297 -0
- package/dist/src/controller.js.map +1 -0
- package/dist/src/element.d.ts +77 -0
- package/dist/src/element.js +805 -0
- package/dist/src/element.js.map +1 -0
- package/dist/src/events.d.ts +37 -0
- package/dist/src/events.js +289 -0
- package/dist/src/events.js.map +1 -0
- package/dist/src/global.d.ts +7 -0
- package/dist/src/global.js +23 -0
- package/dist/src/global.js.map +1 -0
- package/{src/index.ts → dist/src/index.d.ts} +1 -1
- package/dist/src/index.js +8 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/observe.d.ts +26 -0
- package/dist/src/observe.js +329 -0
- package/dist/src/observe.js.map +1 -0
- package/dist/src/request-response.d.ts +46 -0
- package/dist/src/request-response.js +267 -0
- package/dist/src/request-response.js.map +1 -0
- package/dist/src/router.d.ts +87 -0
- package/dist/src/router.js +375 -0
- package/dist/src/router.js.map +1 -0
- package/dist/src/symbols.d.ts +29 -0
- package/{src/symbols.ts → dist/src/symbols.js} +2 -12
- package/dist/src/symbols.js.map +1 -0
- package/dist/src/transitions.d.ts +50 -0
- package/dist/src/transitions.js +199 -0
- package/dist/src/transitions.js.map +1 -0
- package/package.json +6 -8
- package/src/controller.ts +0 -347
- package/src/element.ts +0 -897
- package/src/events.ts +0 -349
- package/src/global.ts +0 -31
- package/src/observe.ts +0 -414
- package/src/request-response.ts +0 -336
- package/src/router.ts +0 -552
- package/src/transitions.ts +0 -264
|
@@ -0,0 +1,329 @@
|
|
|
1
|
+
import { OBSERVERS, CLEANUP, IS_CONTROLLER_INSTANCE } from './symbols';
|
|
2
|
+
// Global cache for MediaQueryList objects
|
|
3
|
+
const mediaQueryCache = new Map();
|
|
4
|
+
// Global WeakMap to track observer instances for reuse
|
|
5
|
+
const intersectionObservers = new WeakMap();
|
|
6
|
+
/**
|
|
7
|
+
* Decorator for observing external changes like viewport intersection, resize, media queries, and DOM mutations
|
|
8
|
+
*
|
|
9
|
+
* @param target - The observation target (e.g., 'intersection', 'resize', 'media:(min-width: 768px)', 'mutation:childList') or array of targets
|
|
10
|
+
* @param selectorOrOptions - CSS selector for element to observe OR options object
|
|
11
|
+
* @param options - Options object (when second parameter is a selector)
|
|
12
|
+
*/
|
|
13
|
+
export function observe(observeTarget, selectorOrOptions, options) {
|
|
14
|
+
// Handle overloaded parameters
|
|
15
|
+
let selector;
|
|
16
|
+
let opts;
|
|
17
|
+
if (typeof selectorOrOptions === 'string') {
|
|
18
|
+
selector = selectorOrOptions;
|
|
19
|
+
opts = options;
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
selector = undefined;
|
|
23
|
+
opts = selectorOrOptions;
|
|
24
|
+
}
|
|
25
|
+
return function (target, propertyKey, descriptor) {
|
|
26
|
+
// Store observer metadata
|
|
27
|
+
if (!target[OBSERVERS]) {
|
|
28
|
+
target[OBSERVERS] = [];
|
|
29
|
+
}
|
|
30
|
+
// Normalize to array
|
|
31
|
+
const observeTargets = Array.isArray(observeTarget) ? observeTarget : [observeTarget];
|
|
32
|
+
// Create an observer entry for each target
|
|
33
|
+
for (const targetString of observeTargets) {
|
|
34
|
+
// Parse the observation type from the observeTarget string
|
|
35
|
+
const [type, ...modifiers] = targetString.split(':');
|
|
36
|
+
target[OBSERVERS].push({
|
|
37
|
+
type,
|
|
38
|
+
target: modifiers.join(':'), // Rejoin for media queries or mutation types
|
|
39
|
+
selector,
|
|
40
|
+
methodName: propertyKey,
|
|
41
|
+
method: descriptor.value,
|
|
42
|
+
options: opts
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
return descriptor;
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
// Helper to setup observers for elements
|
|
49
|
+
export function setupObservers(instance, element) {
|
|
50
|
+
// Only check the prototype, not the instance itself to avoid property access issues
|
|
51
|
+
const observers = instance.constructor.prototype[OBSERVERS];
|
|
52
|
+
if (!observers || !Array.isArray(observers) || observers.length === 0) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
// Initialize cleanup object if needed
|
|
56
|
+
if (!instance[CLEANUP]) {
|
|
57
|
+
instance[CLEANUP] = { events: [], channels: [], observers: [] };
|
|
58
|
+
}
|
|
59
|
+
else if (!instance[CLEANUP].observers) {
|
|
60
|
+
instance[CLEANUP].observers = [];
|
|
61
|
+
}
|
|
62
|
+
for (const observer of observers) {
|
|
63
|
+
const method = observer.method.bind(instance);
|
|
64
|
+
// Apply throttling if specified
|
|
65
|
+
const callback = observer.options?.throttle
|
|
66
|
+
? createThrottledCallback(method, observer.options.throttle)
|
|
67
|
+
: method;
|
|
68
|
+
switch (observer.type) {
|
|
69
|
+
case 'intersection':
|
|
70
|
+
setupIntersectionObserver(instance, element, observer, callback);
|
|
71
|
+
break;
|
|
72
|
+
case 'resize':
|
|
73
|
+
setupResizeObserver(instance, element, observer, callback);
|
|
74
|
+
break;
|
|
75
|
+
case 'media':
|
|
76
|
+
setupMediaQueryObserver(instance, element, observer, callback);
|
|
77
|
+
break;
|
|
78
|
+
case 'mutation':
|
|
79
|
+
setupMutationObserver(instance, element, observer, callback);
|
|
80
|
+
break;
|
|
81
|
+
default:
|
|
82
|
+
console.warn(`Unknown observer type: ${observer.type}`);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
function setupIntersectionObserver(instance, element, observer, callback) {
|
|
87
|
+
const options = {
|
|
88
|
+
threshold: observer.options?.threshold ?? 0,
|
|
89
|
+
rootMargin: observer.options?.rootMargin ?? '0px',
|
|
90
|
+
root: observer.options?.root ?? null
|
|
91
|
+
};
|
|
92
|
+
// Create a key for reusing observers with same options
|
|
93
|
+
const optionsKey = JSON.stringify(options);
|
|
94
|
+
// Wrap callback to handle return value
|
|
95
|
+
const wrappedCallback = (entries) => {
|
|
96
|
+
for (const entry of entries) {
|
|
97
|
+
try {
|
|
98
|
+
const result = callback(entry);
|
|
99
|
+
// If callback returns false, stop observing that element
|
|
100
|
+
if (result === false && io) {
|
|
101
|
+
io.unobserve(entry.target);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
console.error(`Error in intersection observer ${observer.methodName}:`, error);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
// Check if IntersectionObserver is available
|
|
110
|
+
if (typeof IntersectionObserver === 'undefined') {
|
|
111
|
+
console.warn('IntersectionObserver is not available in this environment');
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
// Create or reuse IntersectionObserver
|
|
115
|
+
let io = intersectionObservers.get({ instance, options: optionsKey });
|
|
116
|
+
if (!io) {
|
|
117
|
+
io = new IntersectionObserver(wrappedCallback, options);
|
|
118
|
+
intersectionObservers.set({ instance, options: optionsKey }, io);
|
|
119
|
+
}
|
|
120
|
+
// Find target elements
|
|
121
|
+
const targets = observer.selector
|
|
122
|
+
? Array.from(element.shadowRoot?.querySelectorAll(observer.selector) || [])
|
|
123
|
+
: [element];
|
|
124
|
+
// Start observing
|
|
125
|
+
targets.forEach(target => io.observe(target));
|
|
126
|
+
// Store cleanup
|
|
127
|
+
instance[CLEANUP].observers.push(() => {
|
|
128
|
+
targets.forEach(target => io.unobserve(target));
|
|
129
|
+
// Only disconnect if no more targets
|
|
130
|
+
if (io.takeRecords().length === 0) {
|
|
131
|
+
io.disconnect();
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
function setupResizeObserver(instance, element, observer, callback) {
|
|
136
|
+
const box = observer.options?.box || 'content-box';
|
|
137
|
+
// Wrap callback with error handling
|
|
138
|
+
const wrappedCallback = (entries) => {
|
|
139
|
+
for (const entry of entries) {
|
|
140
|
+
try {
|
|
141
|
+
callback(entry);
|
|
142
|
+
}
|
|
143
|
+
catch (error) {
|
|
144
|
+
console.error(`Error in resize observer ${observer.methodName}:`, error);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
};
|
|
148
|
+
// Check if ResizeObserver is available
|
|
149
|
+
if (typeof ResizeObserver === 'undefined') {
|
|
150
|
+
console.warn('ResizeObserver is not available in this environment');
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
// Create ResizeObserver
|
|
154
|
+
const ro = new ResizeObserver(wrappedCallback);
|
|
155
|
+
// Find target elements
|
|
156
|
+
const targets = observer.selector
|
|
157
|
+
? Array.from(element.shadowRoot?.querySelectorAll(observer.selector) || [])
|
|
158
|
+
: [element];
|
|
159
|
+
// Start observing with options
|
|
160
|
+
targets.forEach(target => {
|
|
161
|
+
ro.observe(target, { box });
|
|
162
|
+
});
|
|
163
|
+
// Store cleanup
|
|
164
|
+
instance[CLEANUP].observers.push(() => {
|
|
165
|
+
ro.disconnect();
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
function setupMediaQueryObserver(instance, _element, observer, callback) {
|
|
169
|
+
// Extract media query from target (e.g., "media:(min-width: 768px)" -> "(min-width: 768px)")
|
|
170
|
+
const mediaQuery = observer.target;
|
|
171
|
+
if (!mediaQuery) {
|
|
172
|
+
console.warn('Media query observer requires a query string');
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
// Get or create MediaQueryList (cached globally)
|
|
176
|
+
let mql = mediaQueryCache.get(mediaQuery);
|
|
177
|
+
if (!mql) {
|
|
178
|
+
try {
|
|
179
|
+
mql = window.matchMedia(mediaQuery);
|
|
180
|
+
mediaQueryCache.set(mediaQuery, mql);
|
|
181
|
+
}
|
|
182
|
+
catch (error) {
|
|
183
|
+
console.error(`Invalid media query: ${mediaQuery}`, error);
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
// Wrap callback with error handling
|
|
188
|
+
const wrappedCallback = (event) => {
|
|
189
|
+
try {
|
|
190
|
+
callback('matches' in event ? event.matches : event.matches);
|
|
191
|
+
}
|
|
192
|
+
catch (error) {
|
|
193
|
+
console.error(`Error in media query observer ${observer.methodName}:`, error);
|
|
194
|
+
}
|
|
195
|
+
};
|
|
196
|
+
// Call immediately with current state
|
|
197
|
+
wrappedCallback(mql);
|
|
198
|
+
// Listen for changes
|
|
199
|
+
const changeHandler = (e) => wrappedCallback(e);
|
|
200
|
+
// Modern browsers use addEventListener
|
|
201
|
+
if (mql.addEventListener) {
|
|
202
|
+
mql.addEventListener('change', changeHandler);
|
|
203
|
+
instance[CLEANUP].observers.push(() => {
|
|
204
|
+
mql.removeEventListener('change', changeHandler);
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
else {
|
|
208
|
+
// Fallback for older browsers
|
|
209
|
+
mql.addListener(changeHandler);
|
|
210
|
+
instance[CLEANUP].observers.push(() => {
|
|
211
|
+
mql.removeListener(changeHandler);
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
function setupMutationObserver(instance, element, observer, callback) {
|
|
216
|
+
// Parse mutation type and attribute from target
|
|
217
|
+
// e.g., "childList", "attributes:class", "attributes:data-state"
|
|
218
|
+
const parts = observer.target.split(':');
|
|
219
|
+
const mutationType = parts[0] || 'childList';
|
|
220
|
+
const attributeName = parts[1];
|
|
221
|
+
// Build MutationObserver options
|
|
222
|
+
const options = {};
|
|
223
|
+
switch (mutationType) {
|
|
224
|
+
case 'childList':
|
|
225
|
+
options.childList = true;
|
|
226
|
+
break;
|
|
227
|
+
case 'attributes':
|
|
228
|
+
options.attributes = true;
|
|
229
|
+
if (attributeName) {
|
|
230
|
+
options.attributeFilter = [attributeName];
|
|
231
|
+
}
|
|
232
|
+
break;
|
|
233
|
+
default:
|
|
234
|
+
console.warn(`Unknown mutation type: ${mutationType}`);
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
237
|
+
// Apply subtree with safety limits
|
|
238
|
+
if (observer.options?.subtree) {
|
|
239
|
+
options.subtree = true;
|
|
240
|
+
// Could implement maxDepth checking in the callback
|
|
241
|
+
if (observer.options.maxDepth) {
|
|
242
|
+
console.warn('maxDepth is set but requires custom implementation');
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
// Wrap callback with error handling
|
|
246
|
+
const wrappedCallback = (mutations) => {
|
|
247
|
+
try {
|
|
248
|
+
// Filter mutations if maxDepth is specified (simplified version)
|
|
249
|
+
if (observer.options?.maxDepth && observer.options.subtree) {
|
|
250
|
+
const maxDepth = observer.options.maxDepth;
|
|
251
|
+
const filtered = mutations.filter(mutation => {
|
|
252
|
+
// Simple depth check (could be more sophisticated)
|
|
253
|
+
let depth = 0;
|
|
254
|
+
let current = mutation.target;
|
|
255
|
+
const root = element.shadowRoot || element;
|
|
256
|
+
while (current && current !== root && depth < maxDepth) {
|
|
257
|
+
current = current.parentNode;
|
|
258
|
+
depth++;
|
|
259
|
+
}
|
|
260
|
+
return depth < maxDepth;
|
|
261
|
+
});
|
|
262
|
+
if (filtered.length > 0) {
|
|
263
|
+
callback(filtered);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
else {
|
|
267
|
+
callback(mutations);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
catch (error) {
|
|
271
|
+
console.error(`Error in mutation observer ${observer.methodName}:`, error);
|
|
272
|
+
}
|
|
273
|
+
};
|
|
274
|
+
// Create MutationObserver
|
|
275
|
+
const mo = new MutationObserver(wrappedCallback);
|
|
276
|
+
// Find target elements
|
|
277
|
+
const isController = instance[IS_CONTROLLER_INSTANCE] === true;
|
|
278
|
+
// For mutation observers without selector:
|
|
279
|
+
// - Controllers: observe the shadow DOM of the element they're attached to (if it exists)
|
|
280
|
+
// - Elements: observe the element itself (light DOM) to avoid infinite loops
|
|
281
|
+
const targets = observer.selector
|
|
282
|
+
? Array.from(element.shadowRoot?.querySelectorAll(observer.selector) || [])
|
|
283
|
+
: isController && element.shadowRoot
|
|
284
|
+
? [element.shadowRoot]
|
|
285
|
+
: [element];
|
|
286
|
+
// Start observing
|
|
287
|
+
targets.forEach(target => {
|
|
288
|
+
mo.observe(target, options);
|
|
289
|
+
});
|
|
290
|
+
// Store cleanup
|
|
291
|
+
instance[CLEANUP].observers.push(() => {
|
|
292
|
+
mo.disconnect();
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
function createThrottledCallback(callback, delay) {
|
|
296
|
+
let lastCall = 0;
|
|
297
|
+
let timeout = null;
|
|
298
|
+
return function (...args) {
|
|
299
|
+
const now = Date.now();
|
|
300
|
+
const remaining = delay - (now - lastCall);
|
|
301
|
+
if (remaining <= 0) {
|
|
302
|
+
// Enough time has passed, execute immediately
|
|
303
|
+
if (timeout) {
|
|
304
|
+
clearTimeout(timeout);
|
|
305
|
+
timeout = null;
|
|
306
|
+
}
|
|
307
|
+
lastCall = now;
|
|
308
|
+
return callback.apply(this, args);
|
|
309
|
+
}
|
|
310
|
+
else if (!timeout) {
|
|
311
|
+
// Schedule for later
|
|
312
|
+
timeout = setTimeout(() => {
|
|
313
|
+
lastCall = Date.now();
|
|
314
|
+
timeout = null;
|
|
315
|
+
callback.apply(this, args);
|
|
316
|
+
}, remaining);
|
|
317
|
+
}
|
|
318
|
+
};
|
|
319
|
+
}
|
|
320
|
+
// Helper to cleanup observers
|
|
321
|
+
export function cleanupObservers(instance) {
|
|
322
|
+
if (instance[CLEANUP]?.observers) {
|
|
323
|
+
for (const cleanup of instance[CLEANUP].observers) {
|
|
324
|
+
cleanup();
|
|
325
|
+
}
|
|
326
|
+
instance[CLEANUP].observers = [];
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
//# sourceMappingURL=observe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observe.js","sourceRoot":"","sources":["../../src/observe.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
export type Response<T = any> = T | any;
|
|
2
|
+
export interface RequestOptions extends EventInit {
|
|
3
|
+
/**
|
|
4
|
+
* Timeout for waiting for responses (in ms) - defaults to 5000ms
|
|
5
|
+
*/
|
|
6
|
+
timeout?: number;
|
|
7
|
+
/**
|
|
8
|
+
* Timeout for finding a handler (in ms) - defaults to 50ms
|
|
9
|
+
*/
|
|
10
|
+
discoveryTimeout?: number;
|
|
11
|
+
/**
|
|
12
|
+
* Debounce the request by specified milliseconds
|
|
13
|
+
*/
|
|
14
|
+
debounce?: number;
|
|
15
|
+
/**
|
|
16
|
+
* Throttle the request by specified milliseconds
|
|
17
|
+
*/
|
|
18
|
+
throttle?: number;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Decorator for making requests from elements or controllers.
|
|
22
|
+
* Uses async generator pattern for bidirectional communication.
|
|
23
|
+
*
|
|
24
|
+
* @param requestName The name of the request
|
|
25
|
+
* @param options Optional configuration
|
|
26
|
+
*/
|
|
27
|
+
export declare function request(requestName: string, options?: RequestOptions): (_target: any, _propertyKey: string, descriptor: PropertyDescriptor) => PropertyDescriptor;
|
|
28
|
+
export interface RespondOptions {
|
|
29
|
+
/**
|
|
30
|
+
* Debounce the response by specified milliseconds
|
|
31
|
+
*/
|
|
32
|
+
debounce?: number;
|
|
33
|
+
/**
|
|
34
|
+
* Throttle the response by specified milliseconds
|
|
35
|
+
*/
|
|
36
|
+
throttle?: number;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Decorator for responding to requests in elements or controllers.
|
|
40
|
+
*
|
|
41
|
+
* @param requestName The name of the request to respond to
|
|
42
|
+
* @param options Optional configuration
|
|
43
|
+
*/
|
|
44
|
+
export declare function respond(requestName: string, options?: RespondOptions): (target: any, propertyKey: string, descriptor: PropertyDescriptor) => PropertyDescriptor;
|
|
45
|
+
export declare function setupResponseHandlers(instance: any, element: HTMLElement): void;
|
|
46
|
+
export declare function cleanupResponseHandlers(instance: any): void;
|
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
import { CHANNEL_HANDLERS, CLEANUP, IS_CONTROLLER_INSTANCE } from './symbols';
|
|
2
|
+
/**
|
|
3
|
+
* Decorator for making requests from elements or controllers.
|
|
4
|
+
* Uses async generator pattern for bidirectional communication.
|
|
5
|
+
*
|
|
6
|
+
* @param requestName The name of the request
|
|
7
|
+
* @param options Optional configuration
|
|
8
|
+
*/
|
|
9
|
+
export function request(requestName, options) {
|
|
10
|
+
return function (_target, _propertyKey, descriptor) {
|
|
11
|
+
const originalMethod = descriptor.value;
|
|
12
|
+
// Create timing variables for debounce/throttle
|
|
13
|
+
let debounceTimeout;
|
|
14
|
+
let throttleLastCall = 0;
|
|
15
|
+
let throttleTimeout;
|
|
16
|
+
descriptor.value = async function (...args) {
|
|
17
|
+
const actualRequest = async () => {
|
|
18
|
+
// @request always acts as requester (client side)
|
|
19
|
+
const responseTimeout = options?.timeout ?? 120000; // Default 2 minute timeout
|
|
20
|
+
const discoveryTimeout = options?.discoveryTimeout ?? 50; // Default 50ms discovery timeout
|
|
21
|
+
// Create the generator
|
|
22
|
+
const generator = originalMethod.apply(this, args);
|
|
23
|
+
// Get the first yield (the request payload)
|
|
24
|
+
const { value: payload, done } = await generator.next();
|
|
25
|
+
if (done) {
|
|
26
|
+
// Generator returned without yielding
|
|
27
|
+
return payload;
|
|
28
|
+
}
|
|
29
|
+
// Create data promise and expose resolve/reject
|
|
30
|
+
let dataResolve;
|
|
31
|
+
let dataReject;
|
|
32
|
+
const dataPromise = new Promise((resolve, reject) => {
|
|
33
|
+
dataResolve = resolve;
|
|
34
|
+
dataReject = reject;
|
|
35
|
+
});
|
|
36
|
+
// Create discovery timeout promise and expose resolve/reject
|
|
37
|
+
let discoveryResolve;
|
|
38
|
+
let discoveryReject;
|
|
39
|
+
let discoveryTimeoutId;
|
|
40
|
+
const discoveryPromise = new Promise((resolve, reject) => {
|
|
41
|
+
discoveryResolve = resolve;
|
|
42
|
+
discoveryReject = reject;
|
|
43
|
+
discoveryTimeoutId = setTimeout(() => {
|
|
44
|
+
reject(new Error(`Request "${requestName}" timed out after ${discoveryTimeout}ms - no handler found`));
|
|
45
|
+
}, discoveryTimeout);
|
|
46
|
+
});
|
|
47
|
+
// Dispatch event with promises
|
|
48
|
+
const eventName = `@request/${requestName}`;
|
|
49
|
+
const event = new CustomEvent(eventName, {
|
|
50
|
+
bubbles: options?.bubbles !== undefined ? options.bubbles : true,
|
|
51
|
+
cancelable: options?.cancelable || false,
|
|
52
|
+
composed: true, // Allow crossing shadow DOM boundaries
|
|
53
|
+
detail: {
|
|
54
|
+
payload,
|
|
55
|
+
discovery: {
|
|
56
|
+
resolve: () => {
|
|
57
|
+
clearTimeout(discoveryTimeoutId);
|
|
58
|
+
discoveryResolve();
|
|
59
|
+
},
|
|
60
|
+
reject: discoveryReject
|
|
61
|
+
},
|
|
62
|
+
data: {
|
|
63
|
+
resolve: dataResolve,
|
|
64
|
+
reject: dataReject
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
// Check if this is a controller instance using the symbol
|
|
69
|
+
const isController = this[IS_CONTROLLER_INSTANCE] === true;
|
|
70
|
+
const dispatcher = isController && this.element ? this.element : this;
|
|
71
|
+
dispatcher.dispatchEvent(event);
|
|
72
|
+
try {
|
|
73
|
+
// Wait for discovery timeout to be cleared (handler found) or discovery timeout to reject (no handler)
|
|
74
|
+
await discoveryPromise;
|
|
75
|
+
// If we get here, a handler was found and discovery timeout was cleared
|
|
76
|
+
// Now wait for the actual data response with the full response timeout
|
|
77
|
+
const responseTimeoutId = setTimeout(() => {
|
|
78
|
+
dataReject(new Error(`Request "${requestName}" timed out after ${responseTimeout}ms`));
|
|
79
|
+
}, responseTimeout);
|
|
80
|
+
const response = await dataPromise;
|
|
81
|
+
clearTimeout(responseTimeoutId);
|
|
82
|
+
// Send response back to generator and get final return value
|
|
83
|
+
const { value: finalValue } = await generator.next(response);
|
|
84
|
+
return finalValue;
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
// Send error to generator
|
|
88
|
+
try {
|
|
89
|
+
await generator.throw(error);
|
|
90
|
+
}
|
|
91
|
+
catch (generatorError) {
|
|
92
|
+
throw generatorError;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}; // Close actualRequest function
|
|
96
|
+
// Apply debounce or throttle if specified
|
|
97
|
+
if (options?.debounce) {
|
|
98
|
+
return new Promise((resolve, reject) => {
|
|
99
|
+
clearTimeout(debounceTimeout);
|
|
100
|
+
debounceTimeout = setTimeout(async () => {
|
|
101
|
+
try {
|
|
102
|
+
const result = await actualRequest();
|
|
103
|
+
resolve(result);
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
reject(error);
|
|
107
|
+
}
|
|
108
|
+
}, options.debounce);
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
if (options?.throttle) {
|
|
112
|
+
const now = Date.now();
|
|
113
|
+
const remaining = options.throttle - (now - throttleLastCall);
|
|
114
|
+
if (remaining <= 0) {
|
|
115
|
+
clearTimeout(throttleTimeout);
|
|
116
|
+
throttleLastCall = now;
|
|
117
|
+
return actualRequest();
|
|
118
|
+
}
|
|
119
|
+
else if (!throttleTimeout) {
|
|
120
|
+
return new Promise((resolve, reject) => {
|
|
121
|
+
throttleTimeout = setTimeout(async () => {
|
|
122
|
+
throttleLastCall = Date.now();
|
|
123
|
+
throttleTimeout = null;
|
|
124
|
+
try {
|
|
125
|
+
const result = await actualRequest();
|
|
126
|
+
resolve(result);
|
|
127
|
+
}
|
|
128
|
+
catch (error) {
|
|
129
|
+
reject(error);
|
|
130
|
+
}
|
|
131
|
+
}, remaining);
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
// If throttled and timeout already exists, return empty promise
|
|
135
|
+
return Promise.resolve();
|
|
136
|
+
}
|
|
137
|
+
// No timing applied, execute immediately
|
|
138
|
+
return actualRequest();
|
|
139
|
+
};
|
|
140
|
+
return descriptor;
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Decorator for responding to requests in elements or controllers.
|
|
145
|
+
*
|
|
146
|
+
* @param requestName The name of the request to respond to
|
|
147
|
+
* @param options Optional configuration
|
|
148
|
+
*/
|
|
149
|
+
export function respond(requestName, options) {
|
|
150
|
+
return function (target, propertyKey, descriptor) {
|
|
151
|
+
const originalMethod = descriptor.value;
|
|
152
|
+
// Store response metadata on the prototype
|
|
153
|
+
// This will be picked up by setupResponseHandlers
|
|
154
|
+
if (!target[CHANNEL_HANDLERS]) {
|
|
155
|
+
target[CHANNEL_HANDLERS] = [];
|
|
156
|
+
}
|
|
157
|
+
target[CHANNEL_HANDLERS].push({
|
|
158
|
+
channelName: requestName,
|
|
159
|
+
methodName: propertyKey,
|
|
160
|
+
method: originalMethod,
|
|
161
|
+
options: options
|
|
162
|
+
});
|
|
163
|
+
return descriptor;
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
// Helper to setup response handlers for elements and controllers
|
|
167
|
+
export function setupResponseHandlers(instance, element) {
|
|
168
|
+
const handlers = instance.constructor.prototype[CHANNEL_HANDLERS];
|
|
169
|
+
if (!handlers)
|
|
170
|
+
return;
|
|
171
|
+
// Store cleanup functions
|
|
172
|
+
// Initialize cleanup object if needed
|
|
173
|
+
if (!instance[CLEANUP]) {
|
|
174
|
+
instance[CLEANUP] = { events: [], channels: [] };
|
|
175
|
+
}
|
|
176
|
+
for (const handler of handlers) {
|
|
177
|
+
const boundMethod = handler.method.bind(instance);
|
|
178
|
+
const eventName = `@request/${handler.channelName}`;
|
|
179
|
+
// Create timing variables for debounce/throttle per handler
|
|
180
|
+
let debounceTimeout;
|
|
181
|
+
let throttleLastCall = 0;
|
|
182
|
+
let throttleTimeout;
|
|
183
|
+
// Create wrapped method with timing if needed
|
|
184
|
+
const createTimedMethod = (originalMethod) => {
|
|
185
|
+
if (handler.options?.debounce) {
|
|
186
|
+
return (...args) => {
|
|
187
|
+
return new Promise((resolve, reject) => {
|
|
188
|
+
clearTimeout(debounceTimeout);
|
|
189
|
+
debounceTimeout = setTimeout(async () => {
|
|
190
|
+
try {
|
|
191
|
+
const result = await originalMethod(...args);
|
|
192
|
+
resolve(result);
|
|
193
|
+
}
|
|
194
|
+
catch (error) {
|
|
195
|
+
reject(error);
|
|
196
|
+
}
|
|
197
|
+
}, handler.options.debounce);
|
|
198
|
+
});
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
if (handler.options?.throttle) {
|
|
202
|
+
return (...args) => {
|
|
203
|
+
const now = Date.now();
|
|
204
|
+
const remaining = handler.options.throttle - (now - throttleLastCall);
|
|
205
|
+
if (remaining <= 0) {
|
|
206
|
+
clearTimeout(throttleTimeout);
|
|
207
|
+
throttleLastCall = now;
|
|
208
|
+
return originalMethod(...args);
|
|
209
|
+
}
|
|
210
|
+
else if (!throttleTimeout) {
|
|
211
|
+
return new Promise((resolve, reject) => {
|
|
212
|
+
throttleTimeout = setTimeout(async () => {
|
|
213
|
+
throttleLastCall = Date.now();
|
|
214
|
+
throttleTimeout = null;
|
|
215
|
+
try {
|
|
216
|
+
const result = await originalMethod(...args);
|
|
217
|
+
resolve(result);
|
|
218
|
+
}
|
|
219
|
+
catch (error) {
|
|
220
|
+
reject(error);
|
|
221
|
+
}
|
|
222
|
+
}, remaining);
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
// If throttled and timeout already exists, return cached/empty response
|
|
226
|
+
return Promise.resolve(undefined);
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
return originalMethod;
|
|
230
|
+
};
|
|
231
|
+
const timedMethod = createTimedMethod(boundMethod);
|
|
232
|
+
// Setup response handler
|
|
233
|
+
const responseHandler = (event) => {
|
|
234
|
+
// Extract promises and payload
|
|
235
|
+
const { data, discovery, payload } = event.detail;
|
|
236
|
+
// Prevent other responders from responding
|
|
237
|
+
event.preventDefault();
|
|
238
|
+
event.stopImmediatePropagation();
|
|
239
|
+
event.stopPropagation();
|
|
240
|
+
// Clear the discovery timeout immediately - we found a handler
|
|
241
|
+
discovery.resolve();
|
|
242
|
+
// Call the timed responder method and handle the result
|
|
243
|
+
Promise.resolve(timedMethod(payload))
|
|
244
|
+
.then(result => {
|
|
245
|
+
data.resolve(result);
|
|
246
|
+
})
|
|
247
|
+
.catch(error => {
|
|
248
|
+
data.reject(error);
|
|
249
|
+
console.error(`Error in response handler ${handler.methodName}:`, error);
|
|
250
|
+
});
|
|
251
|
+
};
|
|
252
|
+
element.addEventListener(eventName, responseHandler);
|
|
253
|
+
instance[CLEANUP].channels.push(() => {
|
|
254
|
+
element.removeEventListener(eventName, responseHandler);
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
// Helper to cleanup response handlers
|
|
259
|
+
export function cleanupResponseHandlers(instance) {
|
|
260
|
+
if (instance[CLEANUP]?.channels) {
|
|
261
|
+
for (const cleanup of instance[CLEANUP].channels) {
|
|
262
|
+
cleanup();
|
|
263
|
+
}
|
|
264
|
+
instance[CLEANUP].channels = [];
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
//# sourceMappingURL=request-response.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-response.js","sourceRoot":"","sources":["../../src/request-response.ts"],"names":[],"mappings":"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"}
|