@agnos-ui/angular-headless 0.6.0-next.2 → 0.7.0-next.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 (52) hide show
  1. package/fesm2022/agnos-ui-angular-headless.mjs +66 -48
  2. package/fesm2022/agnos-ui-angular-headless.mjs.map +1 -1
  3. package/package.json +5 -5
  4. package/slot.directive.d.ts +3 -3
  5. package/types.d.ts +13 -5
  6. package/utils/coercion.d.ts +2 -2
  7. package/utils/directive.d.ts +4 -4
  8. package/utils/widget.d.ts +1 -1
  9. package/esm2022/agnos-ui-angular-headless.mjs +0 -5
  10. package/esm2022/config.mjs +0 -143
  11. package/esm2022/generated/components/accordion/index.mjs +0 -2
  12. package/esm2022/generated/components/alert/index.mjs +0 -2
  13. package/esm2022/generated/components/modal/index.mjs +0 -2
  14. package/esm2022/generated/components/pagination/index.mjs +0 -2
  15. package/esm2022/generated/components/progressbar/index.mjs +0 -2
  16. package/esm2022/generated/components/rating/index.mjs +0 -2
  17. package/esm2022/generated/components/select/index.mjs +0 -2
  18. package/esm2022/generated/components/slider/index.mjs +0 -2
  19. package/esm2022/generated/components/toast/index.mjs +0 -2
  20. package/esm2022/generated/components/tree/index.mjs +0 -2
  21. package/esm2022/generated/config.mjs +0 -2
  22. package/esm2022/generated/index.mjs +0 -34
  23. package/esm2022/generated/services/extendWidget.mjs +0 -2
  24. package/esm2022/generated/services/floatingUI.mjs +0 -2
  25. package/esm2022/generated/services/focustrack.mjs +0 -2
  26. package/esm2022/generated/services/hash.mjs +0 -2
  27. package/esm2022/generated/services/intersection.mjs +0 -2
  28. package/esm2022/generated/services/matchMedia.mjs +0 -2
  29. package/esm2022/generated/services/navManager.mjs +0 -2
  30. package/esm2022/generated/services/portal.mjs +0 -2
  31. package/esm2022/generated/services/resizeObserver.mjs +0 -2
  32. package/esm2022/generated/services/siblingsInert.mjs +0 -2
  33. package/esm2022/generated/services/transitions/baseTransitions.mjs +0 -2
  34. package/esm2022/generated/services/transitions/collapse.mjs +0 -2
  35. package/esm2022/generated/services/transitions/cssTransitions.mjs +0 -2
  36. package/esm2022/generated/services/transitions/simpleClassTransition.mjs +0 -2
  37. package/esm2022/generated/slot.directive.mjs +0 -2
  38. package/esm2022/generated/types.mjs +0 -2
  39. package/esm2022/generated/utils/coercion.mjs +0 -2
  40. package/esm2022/generated/utils/directive.mjs +0 -2
  41. package/esm2022/generated/utils/stores.mjs +0 -2
  42. package/esm2022/generated/utils/widget.mjs +0 -2
  43. package/esm2022/generated/utils/writables.mjs +0 -2
  44. package/esm2022/generated/utils/zone.mjs +0 -2
  45. package/esm2022/index.mjs +0 -5
  46. package/esm2022/slot.directive.mjs +0 -233
  47. package/esm2022/types.mjs +0 -38
  48. package/esm2022/utils/coercion.mjs +0 -32
  49. package/esm2022/utils/directive.mjs +0 -118
  50. package/esm2022/utils/stores.mjs +0 -29
  51. package/esm2022/utils/widget.mjs +0 -149
  52. package/esm2022/utils/zone.mjs +0 -77
@@ -1,149 +0,0 @@
1
- import { computed, writable } from '@amadeus-it-group/tansu';
2
- import { Directive, Injector, inject, runInInjectionContext } from '@angular/core';
3
- import { toAngularSignal, toReadableStore } from './stores';
4
- import { ZoneWrapper } from './zone';
5
- import * as i0 from "@angular/core";
6
- const createPatchSlots = (set) => {
7
- let lastValue = {};
8
- return (object) => {
9
- const newValue = {};
10
- let hasChange = false;
11
- for (const key of Object.keys(object)) {
12
- const objectKey = object[key];
13
- if (objectKey != null) {
14
- // only use defined slots
15
- newValue[key] = objectKey;
16
- }
17
- if (objectKey != lastValue[key]) {
18
- hasChange = true;
19
- }
20
- }
21
- if (hasChange) {
22
- lastValue = newValue;
23
- set(newValue);
24
- }
25
- };
26
- };
27
- /**
28
- * Call a widget factory using provided configs.
29
- *
30
- * @param parameter - the parameter
31
- * @param parameter.factory - the widget factory to call
32
- * @param parameter.defaultConfig - the default config of the widget
33
- * @param parameter.widgetConfig - the config of the widget, overriding the defaultConfig
34
- * @param parameter.events - the events of the widget
35
- * @param parameter.afterInit - a callback to call after successful setup of the widget
36
- * @param parameter.slotTemplates - a function to provide all slot templates using child queries
37
- * @param parameter.slotChildren - a function to provide the default children slot using a view query
38
- * @returns the widget
39
- */
40
- export const callWidgetFactoryWithConfig = ({ factory, defaultConfig, widgetConfig, events, afterInit, slotTemplates, slotChildren, }) => {
41
- const injector = inject(Injector);
42
- const slots$ = writable({});
43
- const props = {};
44
- let initDone;
45
- const patchSlots = createPatchSlots(slots$.set);
46
- const res = {
47
- initialized: new Promise((resolve) => {
48
- initDone = resolve;
49
- }),
50
- updateSlots: () => {
51
- if (slotTemplates) {
52
- patchSlots(slotTemplates());
53
- }
54
- },
55
- patch(newProps) {
56
- // temporary function replaced in ngInit
57
- Object.assign(props, newProps);
58
- },
59
- ngInit() {
60
- runInInjectionContext(injector, () => {
61
- const zoneWrapper = inject(ZoneWrapper);
62
- factory = zoneWrapper.outsideNgZone(factory);
63
- const defaultConfig$ = toReadableStore(defaultConfig);
64
- events = zoneWrapper.insideNgZoneWrapFunctionsObject(events);
65
- const widget = factory({
66
- config: computed(() => ({
67
- ...defaultConfig$(),
68
- children: slotChildren?.(),
69
- ...widgetConfig?.(),
70
- ...slots$(),
71
- ...events,
72
- })),
73
- props,
74
- });
75
- Object.assign(res, {
76
- patch: zoneWrapper.outsideNgZone(widget.patch),
77
- directives: zoneWrapper.outsideNgZoneWrapDirectivesObject(widget.directives),
78
- api: zoneWrapper.outsideNgZoneWrapFunctionsObject(widget.api),
79
- state: Object.fromEntries(Object.entries(widget.stores).map(([key, val]) => [key.slice(0, -1), toAngularSignal(val)])),
80
- });
81
- afterInit?.(res);
82
- initDone();
83
- });
84
- },
85
- };
86
- return res;
87
- };
88
- function patchSimpleChanges(patchFn, changes) {
89
- const obj = {};
90
- for (const [key, simpleChange] of Object.entries(changes)) {
91
- if (simpleChange !== undefined) {
92
- obj[key] = simpleChange.currentValue;
93
- }
94
- }
95
- patchFn(obj);
96
- }
97
- /**
98
- * An abstract base class for widget directives, providing common functionality
99
- * for Angular components that interact with widgets.
100
- *
101
- * @template W - The type of the widget.
102
- */
103
- export class BaseWidgetDirective {
104
- constructor(_widget) {
105
- this._widget = _widget;
106
- }
107
- /**
108
- * Retrieves the widget api
109
- * @returns the widget api
110
- */
111
- get api() {
112
- return this._widget.api;
113
- }
114
- /**
115
- * Retrieves the widget state. Each property of the state is exposed through an Angular {@link https://angular.dev/api/core/Signal | Signal}
116
- * @returns the widget state
117
- */
118
- get state() {
119
- return this._widget.state;
120
- }
121
- /**
122
- * Retrieves the widget directives
123
- * @returns the widget directives
124
- */
125
- get directives() {
126
- return this._widget.directives;
127
- }
128
- /**
129
- * @inheritdoc
130
- * @internal
131
- */
132
- ngOnChanges(changes) {
133
- patchSimpleChanges(this._widget.patch, changes);
134
- }
135
- /** @internal */
136
- ngOnInit() {
137
- this._widget.ngInit();
138
- }
139
- /** @internal */
140
- ngAfterContentChecked() {
141
- this._widget.updateSlots();
142
- }
143
- static { this.ɵfac = function BaseWidgetDirective_Factory(__ngFactoryType__) { i0.ɵɵinvalidFactory(); }; }
144
- static { this.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: BaseWidgetDirective, features: [i0.ɵɵNgOnChangesFeature] }); }
145
- }
146
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(BaseWidgetDirective, [{
147
- type: Directive
148
- }], () => [{ type: undefined }], null); })();
149
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3V0aWxzL3dpZGdldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsUUFBUSxFQUF1QixRQUFRLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUVoRixPQUFPLEVBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUscUJBQXFCLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFakYsT0FBTyxFQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDMUQsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLFFBQVEsQ0FBQzs7QUFFbkMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFtQixHQUFpQyxFQUFFLEVBQUU7SUFDaEYsSUFBSSxTQUFTLEdBQWUsRUFBRSxDQUFDO0lBQy9CLE9BQU8sQ0FBQyxNQUFTLEVBQUUsRUFBRTtRQUNwQixNQUFNLFFBQVEsR0FBZSxFQUFFLENBQUM7UUFDaEMsSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQXlCLEVBQUUsQ0FBQztZQUMvRCxNQUFNLFNBQVMsR0FBSSxNQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdkMsSUFBSSxTQUFTLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ3ZCLHlCQUF5QjtnQkFDekIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQztZQUMzQixDQUFDO1lBQ0QsSUFBSSxTQUFTLElBQUksU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ2pDLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDbEIsQ0FBQztRQUNGLENBQUM7UUFDRCxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ2YsU0FBUyxHQUFHLFFBQVEsQ0FBQztZQUNyQixHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFD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bUJBQW1CO2NBRHhDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2NvbXB1dGVkLCB0eXBlIFJlYWRhYmxlU2lnbmFsLCB3cml0YWJsZX0gZnJvbSAnQGFtYWRldXMtaXQtZ3JvdXAvdGFuc3UnO1xuaW1wb3J0IHR5cGUge0FmdGVyQ29udGVudENoZWNrZWQsIE9uQ2hhbmdlcywgT25Jbml0LCBTaW1wbGVDaGFuZ2VzLCBUZW1wbGF0ZVJlZn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0RpcmVjdGl2ZSwgSW5qZWN0b3IsIGluamVjdCwgcnVuSW5JbmplY3Rpb25Db250ZXh0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB0eXBlIHtBbmd1bGFyU3RhdGUsIEFuZ3VsYXJXaWRnZXQsIElzU2xvdENvbnRlbnQsIFNsb3RDb250ZW50LCBXaWRnZXQsIFdpZGdldEZhY3RvcnksIFdpZGdldFByb3BzfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge3RvQW5ndWxhclNpZ25hbCwgdG9SZWFkYWJsZVN0b3JlfSBmcm9tICcuL3N0b3Jlcyc7XG5pbXBvcnQge1pvbmVXcmFwcGVyfSBmcm9tICcuL3pvbmUnO1xuXG5jb25zdCBjcmVhdGVQYXRjaFNsb3RzID0gPFQgZXh0ZW5kcyBvYmplY3Q+KHNldDogKG9iamVjdDogUGFydGlhbDxUPikgPT4gdm9pZCkgPT4ge1xuXHRsZXQgbGFzdFZhbHVlOiBQYXJ0aWFsPFQ+ID0ge307XG5cdHJldHVybiAob2JqZWN0OiBUKSA9PiB7XG5cdFx0Y29uc3QgbmV3VmFsdWU6IFBhcnRpYWw8VD4gPSB7fTtcblx0XHRsZXQgaGFzQ2hhbmdlID0gZmFsc2U7XG5cdFx0Zm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMob2JqZWN0KSBhcyAoc3RyaW5nICYga2V5b2YgVClbXSkge1xuXHRcdFx0Y29uc3Qgb2JqZWN0S2V5ID0gKG9iamVjdCBhcyBhbnkpW2tleV07XG5cdFx0XHRpZiAob2JqZWN0S2V5ICE9IG51bGwpIHtcblx0XHRcdFx0Ly8gb25seSB1c2UgZGVmaW5lZCBzbG90c1xuXHRcdFx0XHRuZXdWYWx1ZVtrZXldID0gb2JqZWN0S2V5O1xuXHRcdFx0fVxuXHRcdFx0aWYgKG9iamVjdEtleSAhPSBsYXN0VmFsdWVba2V5XSkge1xuXHRcdFx0XHRoYXNDaGFuZ2UgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoaGFzQ2hhbmdlKSB7XG5cdFx0XHRsYXN0VmFsdWUgPSBuZXdWYWx1ZTtcblx0XHRcdHNldChuZXdWYWx1ZSk7XG5cdFx0fVxuXHR9O1xufTtcblxuLyoqXG4gKiBDYWxsIGEgd2lkZ2V0IGZhY3RvcnkgdXNpbmcgcHJvdmlkZWQgY29uZmlncy5cbiAqXG4gKiBAcGFyYW0gcGFyYW1ldGVyIC0gdGhlIHBhcmFtZXRlclxuICogQHBhcmFtIHBhcmFtZXRlci5mYWN0b3J5IC0gdGhlIHdpZGdldCBmYWN0b3J5IHRvIGNhbGxcbiAqIEBwYXJhbSBwYXJhbWV0ZXIuZGVmYXVsdENvbmZpZyAtIHRoZSBkZWZhdWx0IGNvbmZpZyBvZiB0aGUgd2lkZ2V0XG4gKiBAcGFyYW0gcGFyYW1ldGVyLndpZGdldENvbmZpZyAtIHRoZSBjb25maWcgb2YgdGhlIHdpZGdldCwgb3ZlcnJpZGluZyB0aGUgZGVmYXVsdENvbmZpZ1xuICogQHBhcmFtIHBhcmFtZXRlci5ldmVudHMgLSB0aGUgZXZlbnRzIG9mIHRoZSB3aWRnZXRcbiAqIEBwYXJhbSBwYXJhbWV0ZXIuYWZ0ZXJJbml0IC0gYSBjYWxsYmFjayB0byBjYWxsIGFmdGVyIHN1Y2Nlc3NmdWwgc2V0dXAgb2YgdGhlIHdpZGdldFxuICogQHBhcmFtIHBhcmFtZXRlci5zbG90VGVtcGxhdGVzIC0gYSBmdW5jdGlvbiB0byBwcm92aWRlIGFsbCBzbG90IHRlbXBsYXRlcyB1c2luZyBjaGlsZCBxdWVyaWVzXG4gKiBAcGFyYW0gcGFyYW1ldGVyLnNsb3RDaGlsZHJlbiAtIGEgZnVuY3Rpb24gdG8gcHJvdmlkZSB0aGUgZGVmYXVsdCBjaGlsZHJlbiBzbG90IHVzaW5nIGEgdmlldyBxdWVyeVxuICogQHJldHVybnMgdGhlIHdpZGdldFxuICovXG5leHBvcnQgY29uc3QgY2FsbFdpZGdldEZhY3RvcnlXaXRoQ29uZmlnID0gPFcgZXh0ZW5kcyBXaWRnZXQ+KHtcblx0ZmFjdG9yeSxcblx0ZGVmYXVsdENvbmZpZyxcblx0d2lkZ2V0Q29uZmlnLFxuXHRldmVudHMsXG5cdGFmdGVySW5pdCxcblx0c2xvdFRlbXBsYXRlcyxcblx0c2xvdENoaWxkcmVuLFxufToge1xuXHRmYWN0b3J5OiBXaWRnZXRGYWN0b3J5PFc+O1xuXHRkZWZhdWx0Q29uZmlnPzogUGFydGlhbDxXaWRnZXRQcm9wczxXPj4gfCBSZWFkYWJsZVNpZ25hbDxQYXJ0aWFsPFdpZGdldFByb3BzPFc+PiB8IHVuZGVmaW5lZD47XG5cdHdpZGdldENvbmZpZz86IG51bGwgfCB1bmRlZmluZWQgfCBSZWFkYWJsZVNpZ25hbDxQYXJ0aWFsPFdpZGdldFByb3BzPFc+PiB8IHVuZGVmaW5lZD47XG5cdGV2ZW50cz86IFBhcnRpYWw8UGljazxXaWRnZXRQcm9wczxXPiwga2V5b2YgV2lkZ2V0UHJvcHM8Vz4gJiBgb24ke3N0cmluZ31gPj47XG5cdGFmdGVySW5pdD86ICh3aWRnZXQ6IEFuZ3VsYXJXaWRnZXQ8Vz4pID0+IHZvaWQ7XG5cdHNsb3RUZW1wbGF0ZXM/OiAoKSA9PiB7XG5cdFx0W0sgaW4ga2V5b2YgV2lkZ2V0UHJvcHM8Vz4gYXMgSXNTbG90Q29udGVudDxXaWRnZXRQcm9wczxXPltLXT4gZXh0ZW5kcyAwID8gbmV2ZXIgOiBLXTogV2lkZ2V0UHJvcHM8Vz5bS10gZXh0ZW5kcyBTbG90Q29udGVudDxpbmZlciBVPlxuXHRcdFx0PyBUZW1wbGF0ZVJlZjxVPiB8IHVuZGVmaW5lZFxuXHRcdFx0OiBuZXZlcjtcblx0fTtcblx0c2xvdENoaWxkcmVuPzogKCkgPT4gVGVtcGxhdGVSZWY8dm9pZD4gfCB1bmRlZmluZWQ7XG59KTogQW5ndWxhcldpZGdldDxXPiA9PiB7XG5cdGNvbnN0IGluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcblx0Y29uc3Qgc2xvdHMkID0gd3JpdGFibGUoe30pO1xuXHRjb25zdCBwcm9wcyA9IHt9O1xuXHRsZXQgaW5pdERvbmU6ICgpID0+IHZvaWQ7XG5cdGNvbnN0IHBhdGNoU2xvdHMgPSBjcmVhdGVQYXRjaFNsb3RzKHNsb3RzJC5zZXQpO1xuXG5cdGNvbnN0IHJlcyA9IHtcblx0XHRpbml0aWFsaXplZDogbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcblx0XHRcdGluaXREb25lID0gcmVzb2x2ZTtcblx0XHR9KSxcblx0XHR1cGRhdGVTbG90czogKCkgPT4ge1xuXHRcdFx0aWYgKHNsb3RUZW1wbGF0ZXMpIHtcblx0XHRcdFx0cGF0Y2hTbG90cyhzbG90VGVtcGxhdGVzKCkpO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0cGF0Y2gobmV3UHJvcHM6IFBhcnRpYWw8V2lkZ2V0UHJvcHM8Vz4+KSB7XG5cdFx0XHQvLyB0ZW1wb3JhcnkgZnVuY3Rpb24gcmVwbGFjZWQgaW4gbmdJbml0XG5cdFx0XHRPYmplY3QuYXNzaWduKHByb3BzLCBuZXdQcm9wcyk7XG5cdFx0fSxcblx0XHRuZ0luaXQoKSB7XG5cdFx0XHRydW5JbkluamVjdGlvbkNvbnRleHQoaW5qZWN0b3IsICgpID0+IHtcblx0XHRcdFx0Y29uc3Qgem9uZVdyYXBwZXIgPSBpbmplY3QoWm9uZVdyYXBwZXIpO1xuXHRcdFx0XHRmYWN0b3J5ID0gem9uZVdyYXBwZXIub3V0c2lkZU5nWm9uZShmYWN0b3J5KTtcblx0XHRcdFx0Y29uc3QgZGVmYXVsdENvbmZpZyQgPSB0b1JlYWRhYmxlU3RvcmUoZGVmYXVsdENvbmZpZyk7XG5cdFx0XHRcdGV2ZW50cyA9IHpvbmVXcmFwcGVyLmluc2lkZU5nWm9uZVdyYXBGdW5jdGlvbnNPYmplY3QoZXZlbnRzKTtcblx0XHRcdFx0Y29uc3Qgd2lkZ2V0ID0gZmFjdG9yeSh7XG5cdFx0XHRcdFx0Y29uZmlnOiBjb21wdXRlZCgoKSA9PiAoe1xuXHRcdFx0XHRcdFx0Li4uZGVmYXVsdENvbmZpZyQoKSxcblx0XHRcdFx0XHRcdGNoaWxkcmVuOiBzbG90Q2hpbGRyZW4/LigpLFxuXHRcdFx0XHRcdFx0Li4ud2lkZ2V0Q29uZmlnPy4oKSxcblx0XHRcdFx0XHRcdC4uLnNsb3RzJCgpLFxuXHRcdFx0XHRcdFx0Li4uKGV2ZW50cyBhcyBQYXJ0aWFsPFdpZGdldFByb3BzPFc+PiksXG5cdFx0XHRcdFx0fSkpLFxuXHRcdFx0XHRcdHByb3BzLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0T2JqZWN0LmFzc2lnbihyZXMsIHtcblx0XHRcdFx0XHRwYXRjaDogem9uZVdyYXBwZXIub3V0c2lkZU5nWm9uZSh3aWRnZXQucGF0Y2gpLFxuXHRcdFx0XHRcdGRpcmVjdGl2ZXM6IHpvbmVXcmFwcGVyLm91dHNpZGVOZ1pvbmVXcmFwRGlyZWN0aXZlc09iamVjdCh3aWRnZXQuZGlyZWN0aXZlcyksXG5cdFx0XHRcdFx0YXBpOiB6b25lV3JhcHBlci5vdXRzaWRlTmdab25lV3JhcEZ1bmN0aW9uc09iamVjdCh3aWRnZXQuYXBpKSxcblx0XHRcdFx0XHRzdGF0ZTogT2JqZWN0LmZyb21FbnRyaWVzKFxuXHRcdFx0XHRcdFx0T2JqZWN0LmVudHJpZXM8UmVhZGFibGVTaWduYWw8dW5rbm93bj4+KHdpZGdldC5zdG9yZXMgYXMgYW55KS5tYXAoKFtrZXksIHZhbF0pID0+IFtrZXkuc2xpY2UoMCwgLTEpLCB0b0FuZ3VsYXJTaWduYWwodmFsKV0pLFxuXHRcdFx0XHRcdCksXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRhZnRlckluaXQ/LihyZXMgYXMgQW5ndWxhcldpZGdldDxXPik7XG5cdFx0XHRcdGluaXREb25lKCk7XG5cdFx0XHR9KTtcblx0XHR9LFxuXHR9O1xuXG5cdHJldHVybiByZXMgYXMgQW5ndWxhcldpZGdldDxXPjtcbn07XG5cbmZ1bmN0aW9uIHBhdGNoU2ltcGxlQ2hhbmdlcyhwYXRjaEZuOiAob2JqOiBhbnkpID0+IHZvaWQsIGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcblx0Y29uc3Qgb2JqOiBhbnkgPSB7fTtcblx0Zm9yIChjb25zdCBba2V5LCBzaW1wbGVDaGFuZ2VdIG9mIE9iamVjdC5lbnRyaWVzKGNoYW5nZXMpKSB7XG5cdFx0aWYgKHNpbXBsZUNoYW5nZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRvYmpba2V5XSA9IHNpbXBsZUNoYW5nZS5jdXJyZW50VmFsdWU7XG5cdFx0fVxuXHR9XG5cdHBhdGNoRm4ob2JqKTtcbn1cblxuLyoqXG4gKiBBbiBhYnN0cmFjdCBiYXNlIGNsYXNzIGZvciB3aWRnZXQgZGlyZWN0aXZlcywgcHJvdmlkaW5nIGNvbW1vbiBmdW5jdGlvbmFsaXR5XG4gKiBmb3IgQW5ndWxhciBjb21wb25lbnRzIHRoYXQgaW50ZXJhY3Qgd2l0aCB3aWRnZXRzLlxuICpcbiAqIEB0ZW1wbGF0ZSBXIC0gVGhlIHR5cGUgb2YgdGhlIHdpZGdldC5cbiAqL1xuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZVdpZGdldERpcmVjdGl2ZTxXIGV4dGVuZHMgV2lkZ2V0PiBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25Jbml0LCBBZnRlckNvbnRlbnRDaGVja2VkIHtcblx0Y29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBfd2lkZ2V0OiBBbmd1bGFyV2lkZ2V0PFc+KSB7fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIHdpZGdldCBhcGlcblx0ICogQHJldHVybnMgdGhlIHdpZGdldCBhcGlcblx0ICovXG5cdGdldCBhcGkoKTogV1snYXBpJ10ge1xuXHRcdHJldHVybiB0aGlzLl93aWRnZXQuYXBpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgd2lkZ2V0IHN0YXRlLiBFYWNoIHByb3BlcnR5IG9mIHRoZSBzdGF0ZSBpcyBleHBvc2VkIHRocm91Z2ggYW4gQW5ndWxhciB7QGxpbmsgaHR0cHM6Ly9hbmd1bGFyLmRldi9hcGkvY29yZS9TaWduYWwgfCBTaWduYWx9XG5cdCAqIEByZXR1cm5zIHRoZSB3aWRnZXQgc3RhdGVcblx0ICovXG5cdGdldCBzdGF0ZSgpOiBBbmd1bGFyU3RhdGU8Vz4ge1xuXHRcdHJldHVybiB0aGlzLl93aWRnZXQuc3RhdGU7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSB3aWRnZXQgZGlyZWN0aXZlc1xuXHQgKiBAcmV0dXJucyB0aGUgd2lkZ2V0IGRpcmVjdGl2ZXNcblx0ICovXG5cdGdldCBkaXJlY3RpdmVzKCk6IFdbJ2RpcmVjdGl2ZXMnXSB7XG5cdFx0cmV0dXJuIHRoaXMuX3dpZGdldC5kaXJlY3RpdmVzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBpbmhlcml0ZG9jXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0bmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuXHRcdHBhdGNoU2ltcGxlQ2hhbmdlcyh0aGlzLl93aWRnZXQucGF0Y2gsIGNoYW5nZXMpO1xuXHR9XG5cblx0LyoqIEBpbnRlcm5hbCAqL1xuXHRuZ09uSW5pdCgpOiB2b2lkIHtcblx0XHR0aGlzLl93aWRnZXQubmdJbml0KCk7XG5cdH1cblxuXHQvKiogQGludGVybmFsICovXG5cdG5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpOiB2b2lkIHtcblx0XHR0aGlzLl93aWRnZXQudXBkYXRlU2xvdHMoKTtcblx0fVxufVxuIl19
@@ -1,77 +0,0 @@
1
- import { Injectable, NgZone, inject } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- const noop = () => { };
4
- const identity = (a) => a;
5
- const createObjectWrapper = (wrap) => (object) => {
6
- if (!object || typeof object !== 'object') {
7
- return object;
8
- }
9
- const res = {};
10
- for (const key of Object.keys(object)) {
11
- res[key] = wrap(object[key]);
12
- }
13
- return res;
14
- };
15
- const createReturnValueWrapper = (wrapReturnValue, wrapResult) => (fn) => wrapResult(typeof fn === 'function' ? ((...args) => wrapReturnValue(fn(...args))) : fn);
16
- /**
17
- * A utility class that provides methods to run functions inside or outside of Angular's NgZone.
18
- * This can be useful for optimizing performance by avoiding unnecessary change detection cycles.
19
- */
20
- export class ZoneWrapper {
21
- constructor() {
22
- this.#zone = inject(NgZone);
23
- this.#hasZone = this.#zone.run(() => NgZone.isInAngularZone()); // check if zone is enabled (can be NoopZone, cf https://angular.io/guide/zone#noopzone)
24
- this.#runNeeded = false;
25
- this.#runPlanned = false;
26
- this.planNgZoneRun = this.#hasZone
27
- ? () => {
28
- if (this.#zone.isStable) {
29
- this.#runNeeded = true;
30
- if (!this.#runPlanned) {
31
- this.#runPlanned = true;
32
- void (async () => {
33
- await Promise.resolve();
34
- this.#runPlanned = false;
35
- if (this.#runNeeded) {
36
- this.ngZoneRun(noop);
37
- }
38
- })();
39
- }
40
- }
41
- }
42
- : noop;
43
- this.insideNgZone = this.#hasZone
44
- ? (fn) => (typeof fn === 'function' ? ((...args) => this.ngZoneRun(() => fn(...args))) : fn)
45
- : identity;
46
- this.insideNgZoneWrapFunctionsObject = createObjectWrapper(this.insideNgZone);
47
- this.outsideNgZone = this.#hasZone
48
- ? (fn) => (typeof fn === 'function' ? ((...args) => this.#zone.runOutsideAngular(() => fn(...args))) : fn)
49
- : identity;
50
- this.outsideNgZoneWrapFunctionsObject = createObjectWrapper(this.outsideNgZone);
51
- this.outsideNgZoneWrapDirective = createReturnValueWrapper(this.outsideNgZoneWrapFunctionsObject, this.outsideNgZone);
52
- this.outsideNgZoneWrapDirectivesObject = createObjectWrapper(this.outsideNgZoneWrapDirective);
53
- }
54
- #zone;
55
- #hasZone; // check if zone is enabled (can be NoopZone, cf https://angular.io/guide/zone#noopzone)
56
- #runNeeded;
57
- #runPlanned;
58
- /**
59
- * Run the input function synchronously within the Angular zone
60
- *
61
- * @param fn - a function to run
62
- * @returns the value returned by the function
63
- */
64
- ngZoneRun(fn) {
65
- this.#runNeeded = false;
66
- return this.#zone.run(fn);
67
- }
68
- static { this.ɵfac = function ZoneWrapper_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ZoneWrapper)(); }; }
69
- static { this.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: ZoneWrapper, factory: ZoneWrapper.ɵfac, providedIn: 'root' }); }
70
- }
71
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ZoneWrapper, [{
72
- type: Injectable,
73
- args: [{
74
- providedIn: 'root',
75
- }]
76
- }], null, null); })();
77
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiem9uZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlscy96b25lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQzs7QUFFekQsTUFBTSxJQUFJLEdBQUcsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO0FBQ3RCLE1BQU0sUUFBUSxHQUFHLENBQUksQ0FBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFJaEMsTUFBTSxtQkFBbUIsR0FDeEIsQ0FBQyxJQUFhLEVBQVcsRUFBRSxDQUMzQixDQUFDLE1BQU0sRUFBRSxFQUFFO0lBQ1YsSUFBSSxDQUFDLE1BQU0sSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUMzQyxPQUFPLE1BQU0sQ0FBQztJQUNmLENBQUM7SUFDRCxNQUFNLEdBQUcsR0FBRyxFQUFTLENBQUM7SUFDdEIsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDdkMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBRSxNQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDWixDQUFDLENBQUM7QUFFSCxNQUFNLHdCQUF3QixHQUM3QixDQUFDLGVBQXdCLEVBQUUsVUFBbUIsRUFBVyxFQUFFLENBQzNELENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FDTixVQUFVLENBQUMsT0FBTyxFQUFFLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBRSxDQUFDLENBQUMsR0FBRyxJQUFXLEVBQUUsRUFBRSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBRTFHOzs7R0FHRztBQUlI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QUFDO2dCQUNYLFVBQVUsRUFBRSxNQUFNO2FBQ2xCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlLCBOZ1pvbmUsIGluamVjdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7fTtcbmNvbnN0IGlkZW50aXR5ID0gPFQ+KGE6IFQpID0+IGE7XG5cbnR5cGUgV3JhcHBlciA9IDxUPihmbjogVCkgPT4gVDtcblxuY29uc3QgY3JlYXRlT2JqZWN0V3JhcHBlciA9XG5cdCh3cmFwOiBXcmFwcGVyKTogV3JhcHBlciA9PlxuXHQob2JqZWN0KSA9PiB7XG5cdFx0aWYgKCFvYmplY3QgfHwgdHlwZW9mIG9iamVjdCAhPT0gJ29iamVjdCcpIHtcblx0XHRcdHJldHVybiBvYmplY3Q7XG5cdFx0fVxuXHRcdGNvbnN0IHJlcyA9IHt9IGFzIGFueTtcblx0XHRmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhvYmplY3QpKSB7XG5cdFx0XHRyZXNba2V5XSA9IHdyYXAoKG9iamVjdCBhcyBhbnkpW2tleV0pO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzO1xuXHR9O1xuXG5jb25zdCBjcmVhdGVSZXR1cm5WYWx1ZVdyYXBwZXIgPVxuXHQod3JhcFJldHVyblZhbHVlOiBXcmFwcGVyLCB3cmFwUmVzdWx0OiBXcmFwcGVyKTogV3JhcHBlciA9PlxuXHQoZm4pID0+XG5cdFx0d3JhcFJlc3VsdCh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicgPyAoKCguLi5hcmdzOiBhbnlbXSkgPT4gd3JhcFJldHVyblZhbHVlKGZuKC4uLmFyZ3MpKSkgYXMgYW55KSA6IGZuKTtcblxuLyoqXG4gKiBBIHV0aWxpdHkgY2xhc3MgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIHJ1biBmdW5jdGlvbnMgaW5zaWRlIG9yIG91dHNpZGUgb2YgQW5ndWxhcidzIE5nWm9uZS5cbiAqIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3Igb3B0aW1pemluZyBwZXJmb3JtYW5jZSBieSBhdm9pZGluZyB1bm5lY2Vzc2FyeSBjaGFuZ2UgZGV0ZWN0aW9uIGN5Y2xlcy5cbiAqL1xuQEluamVjdGFibGUoe1xuXHRwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFpvbmVXcmFwcGVyIHtcblx0cmVhZG9ubHkgI3pvbmUgPSBpbmplY3QoTmdab25lKTtcblx0cmVhZG9ubHkgI2hhc1pvbmUgPSB0aGlzLiN6b25lLnJ1bigoKSA9PiBOZ1pvbmUuaXNJbkFuZ3VsYXJab25lKCkpOyAvLyBjaGVjayBpZiB6b25lIGlzIGVuYWJsZWQgKGNhbiBiZSBOb29wWm9uZSwgY2YgaHR0cHM6Ly9hbmd1bGFyLmlvL2d1aWRlL3pvbmUjbm9vcHpvbmUpXG5cdCNydW5OZWVkZWQgPSBmYWxzZTtcblx0I3J1blBsYW5uZWQgPSBmYWxzZTtcblxuXHRwbGFuTmdab25lUnVuID0gdGhpcy4jaGFzWm9uZVxuXHRcdD8gKCkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy4jem9uZS5pc1N0YWJsZSkge1xuXHRcdFx0XHRcdHRoaXMuI3J1bk5lZWRlZCA9IHRydWU7XG5cdFx0XHRcdFx0aWYgKCF0aGlzLiNydW5QbGFubmVkKSB7XG5cdFx0XHRcdFx0XHR0aGlzLiNydW5QbGFubmVkID0gdHJ1ZTtcblx0XHRcdFx0XHRcdHZvaWQgKGFzeW5jICgpID0+IHtcblx0XHRcdFx0XHRcdFx0YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0XHRcdFx0XHRcdHRoaXMuI3J1blBsYW5uZWQgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0aWYgKHRoaXMuI3J1bk5lZWRlZCkge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMubmdab25lUnVuKG5vb3ApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9KSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdDogbm9vcDtcblxuXHQvKipcblx0ICogUnVuIHRoZSBpbnB1dCBmdW5jdGlvbiBzeW5jaHJvbm91c2x5IHdpdGhpbiB0aGUgQW5ndWxhciB6b25lXG5cdCAqXG5cdCAqIEBwYXJhbSBmbiAtIGEgZnVuY3Rpb24gdG8gcnVuXG5cdCAqIEByZXR1cm5zIHRoZSB2YWx1ZSByZXR1cm5lZCBieSB0aGUgZnVuY3Rpb25cblx0ICovXG5cdG5nWm9uZVJ1bjxUPihmbjogKCkgPT4gVCk6IFQge1xuXHRcdHRoaXMuI3J1bk5lZWRlZCA9IGZhbHNlO1xuXHRcdHJldHVybiB0aGlzLiN6b25lLnJ1bihmbik7XG5cdH1cblxuXHRpbnNpZGVOZ1pvbmU6IFdyYXBwZXIgPSB0aGlzLiNoYXNab25lXG5cdFx0PyAoZm4pID0+ICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicgPyAoKCguLi5hcmdzOiBhbnlbXSkgPT4gdGhpcy5uZ1pvbmVSdW4oKCkgPT4gZm4oLi4uYXJncykpKSBhcyBhbnkpIDogZm4pXG5cdFx0OiBpZGVudGl0eTtcblx0aW5zaWRlTmdab25lV3JhcEZ1bmN0aW9uc09iamVjdCA9IGNyZWF0ZU9iamVjdFdyYXBwZXIodGhpcy5pbnNpZGVOZ1pvbmUpO1xuXG5cdG91dHNpZGVOZ1pvbmU6IFdyYXBwZXIgPSB0aGlzLiNoYXNab25lXG5cdFx0PyAoZm4pID0+ICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicgPyAoKCguLi5hcmdzOiBhbnlbXSkgPT4gdGhpcy4jem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiBmbiguLi5hcmdzKSkpIGFzIGFueSkgOiBmbilcblx0XHQ6IGlkZW50aXR5O1xuXG5cdG91dHNpZGVOZ1pvbmVXcmFwRnVuY3Rpb25zT2JqZWN0ID0gY3JlYXRlT2JqZWN0V3JhcHBlcih0aGlzLm91dHNpZGVOZ1pvbmUpO1xuXHRvdXRzaWRlTmdab25lV3JhcERpcmVjdGl2ZSA9IGNyZWF0ZVJldHVyblZhbHVlV3JhcHBlcih0aGlzLm91dHNpZGVOZ1pvbmVXcmFwRnVuY3Rpb25zT2JqZWN0LCB0aGlzLm91dHNpZGVOZ1pvbmUpO1xuXHRvdXRzaWRlTmdab25lV3JhcERpcmVjdGl2ZXNPYmplY3QgPSBjcmVhdGVPYmplY3RXcmFwcGVyKHRoaXMub3V0c2lkZU5nWm9uZVdyYXBEaXJlY3RpdmUpO1xufVxuIl19