@ethlete/cdk 4.35.0 → 4.36.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @ethlete/cdk
2
2
 
3
+ ## 4.36.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [`51621d2`](https://github.com/ethlete-io/ethdk/commit/51621d2e35f20eb6cf08de42d2a28fb699a5e144) Thanks [@TomTomB](https://github.com/TomTomB)! - Add `updateQueryParam` method to the function returned by `createOverlayHandlerWithQueryParamLifecycle`
8
+
3
9
  ## 4.35.0
4
10
 
5
11
  ### Minor Changes
@@ -1,4 +1,4 @@
1
- import { DestroyRef, effect, inject, untracked, ViewContainerRef } from '@angular/core';
1
+ import { DestroyRef, effect, inject, Injector, untracked, ViewContainerRef, } from '@angular/core';
2
2
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
3
3
  import { Router } from '@angular/router';
4
4
  import { injectQueryParam } from '@ethlete/core';
@@ -49,7 +49,7 @@ export const createOverlayHandler = (rootConfig) => {
49
49
  export const OVERLAY_QUERY_PARAM_INPUT_NAME = 'overlayQueryParam';
50
50
  /**
51
51
  * This handler will automatically open the overlay when the query param is present.
52
- * The overlay can contain a required input with the name `overlayQueryParam` to receive the query param value.
52
+ * The overlay can contain a input or model with the name `overlayQueryParam` to receive the query param value.
53
53
  *
54
54
  * If you need to transfer more information (eg. a second query param), you need to combine them into a single query param string.
55
55
  * You can then split the string inside the overlay component using computed signals.
@@ -57,29 +57,42 @@ export const OVERLAY_QUERY_PARAM_INPUT_NAME = 'overlayQueryParam';
57
57
  * To open the overlay either use the `OverlayHandlerLinkDirective` or call the `.open` method of the returned handler.
58
58
  */
59
59
  export const createOverlayHandlerWithQueryParamLifecycle = (config) => {
60
- const handler = createOverlayHandler(config);
60
+ const handler = createOverlayHandler({ ...config, closeOnNavigation: false });
61
61
  let fnCalled = false;
62
+ let router = null;
63
+ const updateQueryParam = (value) => {
64
+ router?.navigate([], {
65
+ queryParams: {
66
+ [config.queryParamKey]: value,
67
+ },
68
+ queryParamsHandling: 'merge',
69
+ });
70
+ };
62
71
  const fn = (innerConfig) => {
63
72
  if (fnCalled) {
64
73
  throw new Error('The function returned by createOverlayHandlerWithQueryParamLifecycle can only be called once until the caller is destroyed');
65
74
  }
66
75
  fnCalled = true;
67
- const router = inject(Router);
76
+ router = inject(Router);
68
77
  const destroyRef = inject(DestroyRef);
69
- const overlayHandler = handler(innerConfig);
78
+ const injector = inject(Injector);
79
+ const overlayHandler = handler({ ...(innerConfig ?? {}) });
70
80
  const queryParamValue = injectQueryParam(config.queryParamKey);
71
81
  let currentOverlayRef = null;
82
+ let inputSignalEffect = null;
72
83
  destroyRef.onDestroy(() => {
73
84
  fnCalled = false;
85
+ router = null;
74
86
  cleanup();
75
87
  });
76
88
  const cleanup = () => {
77
- router.navigate([], {
78
- queryParams: {
79
- [config.queryParamKey]: null,
80
- },
81
- queryParamsHandling: 'merge',
82
- });
89
+ inputSignalEffect?.destroy();
90
+ inputSignalEffect = null;
91
+ updateQueryParam(null);
92
+ };
93
+ const getQueryParamInput = () => {
94
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
95
+ return currentOverlayRef?.componentInstance?.[OVERLAY_QUERY_PARAM_INPUT_NAME];
83
96
  };
84
97
  effect(() => {
85
98
  const value = queryParamValue();
@@ -91,28 +104,32 @@ export const createOverlayHandlerWithQueryParamLifecycle = (config) => {
91
104
  .afterClosed()
92
105
  .pipe(takeUntilDestroyed(destroyRef), tap(() => cleanup()))
93
106
  .subscribe();
107
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
108
+ const inputSignal = getQueryParamInput();
109
+ if (inputSignal) {
110
+ inputSignalEffect = effect(() => {
111
+ const inputVal = inputSignal();
112
+ untracked(() => {
113
+ updateQueryParam(inputVal);
114
+ });
115
+ }, { injector });
116
+ }
94
117
  }
95
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
96
- if (currentOverlayRef.componentInstance[OVERLAY_QUERY_PARAM_INPUT_NAME]) {
118
+ if (getQueryParamInput()) {
97
119
  currentOverlayRef.componentRef?.setInput(OVERLAY_QUERY_PARAM_INPUT_NAME, value);
98
120
  }
99
121
  }
100
122
  else {
101
123
  if (currentOverlayRef) {
124
+ inputSignalEffect?.destroy();
125
+ inputSignalEffect = null;
102
126
  currentOverlayRef.close();
103
127
  currentOverlayRef = null;
104
128
  }
105
129
  }
106
130
  });
107
131
  });
108
- const open = (queryParamValue) => {
109
- router.navigate([], {
110
- queryParams: {
111
- [config.queryParamKey]: queryParamValue,
112
- },
113
- queryParamsHandling: 'merge',
114
- });
115
- };
132
+ const open = (queryParamValue) => updateQueryParam(queryParamValue);
116
133
  const close = () => {
117
134
  cleanup();
118
135
  };
@@ -123,6 +140,7 @@ export const createOverlayHandlerWithQueryParamLifecycle = (config) => {
123
140
  return lifecycleHandler;
124
141
  };
125
142
  fn['injectOverlayRef'] = () => handler().injectOverlayRef();
143
+ fn['updateQueryParam'] = (value) => updateQueryParam(value);
126
144
  return fn;
127
145
  };
128
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmxheS1oYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jZGsvc3JjL2xpYi9jb21wb25lbnRzL292ZXJsYXkvY29tcG9uZW50cy9vdmVybGF5L3V0aWxzL292ZXJsYXktaGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQWUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzQixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzVDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFHN0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQW1DM0MsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FDbEMsVUFBZ0UsRUFDaEUsRUFBRTtJQUNGLE1BQU0sRUFBRSxHQUFHLENBQUMsV0FBNkQsRUFBRSxFQUFFO1FBQzNFLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUM5QyxNQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2xELE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUV0QyxNQUFNLEdBQUcsR0FBRyxVQUFVLENBQUMsU0FBUyxJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUM7UUFFeEQsSUFBSSxDQUFDLEdB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O1NBQ04sQ0FBQztRQUVGLE9BQU8sZ0JBQWdCLENBQUM7SUFDMUIsQ0FBQyxDQUFDO0lBRUYsRUFBRSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUU1RCxPQUFPLEVBQUUsQ0FBQztBQUNaLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudFR5cGUgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBEZXN0cm95UmVmLCBlZmZlY3QsIGluamVjdCwgVGVtcGxhdGVSZWYsIHVudHJhY2tlZCwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IGluamVjdFF1ZXJ5UGFyYW0gfSBmcm9tICdAZXRobGV0ZS9jb3JlJztcbmltcG9ydCB7IHRhcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgT1ZFUkxBWV9EQVRBIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IE92ZXJsYXlTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgT3ZlcmxheUJyZWFrcG9pbnRDb25maWdFbnRyeSwgT3ZlcmxheUNvbmZpZywgT3ZlcmxheUNvbnN1bWVyQ29uZmlnIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgT3ZlcmxheVBvc2l0aW9uQnVpbGRlciB9IGZyb20gJy4vb3ZlcmxheS1wb3NpdGlvbi1idWlsZGVyJztcbmltcG9ydCB7IE92ZXJsYXlSZWYgfSBmcm9tICcuL292ZXJsYXktcmVmJztcblxuZXhwb3J0IHR5cGUgQ3JlYXRlT3ZlcmxheUhhbmRsZXJDb25maWc8VCwgRCA9IHVua25vd24+ID0gT21pdDxPdmVybGF5Q29uZmlnPEQ+LCAncG9zaXRpb25zJz4gJiB7XG4gIC8qKiBUaGUgb3ZlcmxheSBjb21wb25lbnQuIFVzZSBlaXRoZXIgdGhpcyBvciB0aGUgYHRlbXBsYXRlYCBwcm9wZXJ0eSAgKi9cbiAgY29tcG9uZW50PzogQ29tcG9uZW50VHlwZTxUPjtcblxuICAvKiogVGhlIG92ZXJsYXkgdGVtcGxhdGUuIFVzZSBlaXRoZXIgdGhpcyBvciB0aGUgYGNvbXBvbmVudGAgcHJvcGVydHkgICovXG4gIHRlbXBsYXRlPzogVGVtcGxhdGVSZWY8VD47XG5cbiAgLyoqIFRoZSBvdmVybGF5IHBvc2l0aW9ucyB1c2luZyB0aGUgcG9zaXRpb24gYnVpbGRlciBwcm92aWRlZCB2aWEgYXJndW1lbnQgICovXG4gIHBvc2l0aW9uczogKGJ1aWxkZXI6IE92ZXJsYXlQb3NpdGlvbkJ1aWxkZXIpID0+IE92ZXJsYXlCcmVha3BvaW50Q29uZmlnRW50cnlbXTtcbn07XG5cbmV4cG9ydCB0eXBlIE92ZXJsYXlIYW5kbGVyPFQsIEQgPSB1bmtub3duLCBSID0gdW5rbm93bj4gPSB7XG4gIC8qKiBPcGVuIHRoZSBvdmVybGF5IHVzaW5nIGEgY29tYmluYXRpb24gb2YgdGhlIGdpdmVuIGNvbmZpZ3MgICovXG4gIG9wZW46IChjb25maWc/OiBPdmVybGF5Q29uc3VtZXJDb25maWc8RD4pID0+IE92ZXJsYXlSZWY8VCwgUj47XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHR5cGVkIG92ZXJsYXkgcmVmLlxuICAgKiBAdGhyb3dzIEVycm9yIGlmIHRoZSBvdmVybGF5IHJlZiBnZXRzIGFjY2Vzc2VkIG91dHNpZGUgb2YgdGhlIG92ZXJsYXkgY29tcG9uZW50IG9yIHRlbXBsYXRlUmVmXG4gICAqL1xuICBpbmplY3RPdmVybGF5UmVmOiAoKSA9PiBPdmVybGF5UmVmPFQsIFI+O1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBvdmVybGF5IGRhdGEuXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIG92ZXJsYXkgZGF0YSBnZXRzIGFjY2Vzc2VkIG91dHNpZGUgb2YgdGhlIG92ZXJsYXkgY29tcG9uZW50IG9yIHRlbXBsYXRlUmVmXG4gICAqL1xuICBpbmplY3RPdmVybGF5RGF0YTogKCkgPT4gRDtcbn07XG5cbmV4cG9ydCB0eXBlIENyZWF0ZU92ZXJsYXlIYW5kbGVySW5uZXJDb25maWc8UiA9IHVua25vd24+ID0ge1xuICAvKiogQSBjYWxsYmFjayBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCBvbmNlIHRoZSBvdmVybGF5IGhhcyBiZWVuIGNsb3NlZCAqL1xuICBhZnRlckNsb3NlZD86IChyZXN1bHQ6IFIgfCBudWxsKSA9PiB2b2lkO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZU92ZXJsYXlIYW5kbGVyID0gPFRDb21wb25lbnQsIFRPdmVybGF5RGF0YSA9IHVua25vd24sIFRPdmVybGF5UmVzdWx0ID0gdW5rbm93bj4oXG4gIHJvb3RDb25maWc6IENyZWF0ZU92ZXJsYXlIYW5kbGVyQ29uZmlnPFRDb21wb25lbnQsIFRPdmVybGF5RGF0YT4sXG4pID0+IHtcbiAgY29uc3QgZm4gPSAoaW5uZXJDb25maWc/OiBDcmVhdGVPdmVybGF5SGFuZGxlcklubmVyQ29uZmlnPFRPdmVybGF5UmVzdWx0PikgPT4ge1xuICAgIGNvbnN0IG92ZXJsYXlTZXJ2aWNlID0gaW5qZWN0KE92ZXJsYXlTZXJ2aWNlKTtcbiAgICBjb25zdCB2aWV3Q29udGFpbmVyUmVmID0gaW5qZWN0KFZpZXdDb250YWluZXJSZWYpO1xuICAgIGNvbnN0IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgICBjb25zdCB0cGwgPSByb290Q29uZmlnLmNvbXBvbmVudCA/PyByb290Q29uZmlnLnRlbXBsYXRlO1xuXG4gICAgaWYgKCF0cGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRWl0aGVyIGNvbXBvbmVudCBvciB0ZW1wbGF0ZSBtdXN0IGJlIHByb3ZpZGVkJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3BlbiA9IChjb25maWc/OiBPdmVybGF5Q29uc3VtZXJDb25maWc8VE92ZXJsYXlEYXRhPikgPT4ge1xuICAgICAgY29uc3QgcmVmID0gb3ZlcmxheVNlcnZpY2Uub3BlbjxUQ29tcG9uZW50LCBUT3ZlcmxheURhdGEsIFRPdmVybGF5UmVzdWx0Pih0cGwsIHtcbiAgICAgICAgdmlld0NvbnRhaW5lclJlZixcbiAgICAgICAgLi4ucm9vdENvbmZpZyxcbiAgICAgICAgcG9zaXRpb25zOiByb290Q29uZmlnLnBvc2l0aW9ucyhvdmVybGF5U2VydmljZS5wb3NpdGlvbnMpLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgYWZ0ZXJDbG9zZWRGbiA9IGlubmVyQ29uZmlnPy5hZnRlckNsb3NlZDtcblxuICAgICAgaWYgKGFmdGVyQ2xvc2VkRm4pIHtcbiAgICAgICAgcmVmXG4gICAgICAgICAgLmFmdGVyQ2xvc2VkKClcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZChkZXN0cm95UmVmKSxcbiAgICAgICAgICAgIHRhcCgocikgPT4gYWZ0ZXJDbG9zZWRGbihyID8/IG51bGwpKSxcbiAgICAgICAgICApXG4gICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVmO1xuICAgIH07XG5cbiAgICBjb25zdCBpbmplY3RPdmVybGF5UmVmID0gKCkgPT4ge1xuICAgICAgcmV0dXJuIGluamVjdDxPdmVybGF5UmVmPFRDb21wb25lbnQsIFRPdmVybGF5UmVzdWx0Pj4oT3ZlcmxheVJlZik7XG4gICAgfTtcblxuICAgIGNvbnN0IGluamVjdE92ZXJsYXlEYXRhID0gKCkgPT4ge1xuICAgICAgcmV0dXJuIGluamVjdDxUT3ZlcmxheURhdGE+KE9WRVJMQVlfREFUQSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGhhbmRsZXI6IE92ZXJsYXlIYW5kbGVyPFRDb21wb25lbnQsIFRPdmVybGF5RGF0YSwgVE92ZXJsYXlSZXN1bHQ+ID0ge1xuICAgICAgb3BlbixcbiAgICAgIGluamVjdE92ZXJsYXlSZWYsXG4gICAgICBpbmplY3RPdmVybGF5RGF0YSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIGhhbmRsZXI7XG4gIH07XG5cbiAgcmV0dXJuIGZuO1xufTtcblxuZXhwb3J0IHR5cGUgT3ZlcmxheUhhbmRsZXJXaXRoUXVlcnlQYXJhbUxpZmVjeWNsZTxRID0gc3RyaW5nPiA9IHtcbiAgLyoqIE9wZW4gdGhlIG92ZXJsYXkgdXNpbmcgdGhlIHByb3ZpZGVkIHF1ZXJ5IHBhcmFtIHZhbHVlICAqL1xuICBvcGVuOiAocXVlcnlQYXJhbVZhbHVlOiBRKSA9PiB2b2lkO1xuXG4gIC8qKiBDbG9zZSB0aGUgb3ZlcmxheSBhbmQgcmVtb3ZlIHRoZSBxdWVyeSBwYXJhbSAgKi9cbiAgY2xvc2U6ICgpID0+IHZvaWQ7XG59O1xuXG5leHBvcnQgdHlwZSBDcmVhdGVPdmVybGF5SGFuZGxlcldpdGhRdWVyeVBhcmFtTGlmZWN5Y2xlQ29uZmlnPFQ+ID0gT21pdDxcbiAgT3ZlcmxheUNvbmZpZzx1bmtub3duPixcbiAgJ3Bvc2l0aW9ucycgfCAnZGF0YSdcbj4gJiB7XG4gIC8qKiBUaGUgb3ZlcmxheSBjb21wb25lbnQgICovXG4gIGNvbXBvbmVudDogQ29tcG9uZW50VHlwZTxUPjtcblxuICAvKiogVGhlIG92ZXJsYXkgcG9zaXRpb25zIHVzaW5nIHRoZSBwb3NpdGlvbiBidWlsZGVyIHByb3ZpZGVkIHZpYSBhcmd1bWVudCAgKi9cbiAgcG9zaXRpb25zOiAoYnVpbGRlcjogT3ZlcmxheVBvc2l0aW9uQnVpbGRlcikgPT4gT3ZlcmxheUJyZWFrcG9pbnRDb25maWdFbnRyeVtdO1xuXG4gIC8qKiBUaGUgcXVlcnkgcGFyYW0ga2V5IHRvIGJlIHVzZWQgZm9yIHRoZSBvdmVybGF5ICAqL1xuICBxdWVyeVBhcmFtS2V5OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgY29uc3QgT1ZFUkxBWV9RVUVSWV9QQVJBTV9JTlBVVF9OQU1FID0gJ292ZXJsYXlRdWVyeVBhcmFtJztcblxuLyoqXG4gKiBUaGlzIGhhbmRsZXIgd2lsbCBhdXRvbWF0aWNhbGx5IG9wZW4gdGhlIG92ZXJsYXkgd2hlbiB0aGUgcXVlcnkgcGFyYW0gaXMgcHJlc2VudC5cbiAqIFRoZSBvdmVybGF5IGNhbiBjb250YWluIGEgcmVxdWlyZWQgaW5wdXQgd2l0aCB0aGUgbmFtZSBgb3ZlcmxheVF1ZXJ5UGFyYW1gIHRvIHJlY2VpdmUgdGhlIHF1ZXJ5IHBhcmFtIHZhbHVlLlxuICpcbiAqIElmIHlvdSBuZWVkIHRvIHRyYW5zZmVyIG1vcmUgaW5mb3JtYXRpb24gKGVnLiBhIHNlY29uZCBxdWVyeSBwYXJhbSksIHlvdSBuZWVkIHRvIGNvbWJpbmUgdGhlbSBpbnRvIGEgc2luZ2xlIHF1ZXJ5IHBhcmFtIHN0cmluZy5cbiAqIFlvdSBjYW4gdGhlbiBzcGxpdCB0aGUgc3RyaW5nIGluc2lkZSB0aGUgb3ZlcmxheSBjb21wb25lbnQgdXNpbmcgY29tcHV0ZWQgc2lnbmFscy5cbiAqXG4gKiBUbyBvcGVuIHRoZSBvdmVybGF5IGVpdGhlciB1c2UgdGhlIGBPdmVybGF5SGFuZGxlckxpbmtEaXJlY3RpdmVgIG9yIGNhbGwgdGhlIGAub3BlbmAgbWV0aG9kIG9mIHRoZSByZXR1cm5lZCBoYW5kbGVyLlxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlT3ZlcmxheUhhbmRsZXJXaXRoUXVlcnlQYXJhbUxpZmVjeWNsZSA9IDxcbiAgVENvbXBvbmVudCxcbiAgVFF1ZXJ5UGFyYW0gZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsXG4gIFRSZXN1bHQgPSB1bmtub3duLFxuPihcbiAgY29uZmlnOiBDcmVhdGVPdmVybGF5SGFuZGxlcldpdGhRdWVyeVBhcmFtTGlmZWN5Y2xlQ29uZmlnPFRDb21wb25lbnQ+LFxuKSA9PiB7XG4gIGNvbnN0IGhhbmRsZXIgPSBjcmVhdGVPdmVybGF5SGFuZGxlcjxUQ29tcG9uZW50LCB2b2lkLCBUUmVzdWx0Pihjb25maWcpO1xuXG4gIGxldCBmbkNhbGxlZCA9IGZhbHNlO1xuXG4gIGNvbnN0IGZuID0gKGlubmVyQ29uZmlnPzogQ3JlYXRlT3ZlcmxheUhhbmRsZXJJbm5lckNvbmZpZzxUUmVzdWx0PikgPT4ge1xuICAgIGlmIChmbkNhbGxlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnVGhlIGZ1bmN0aW9uIHJldHVybmVkIGJ5IGNyZWF0ZU92ZXJsYXlIYW5kbGVyV2l0aFF1ZXJ5UGFyYW1MaWZlY3ljbGUgY2FuIG9ubHkgYmUgY2FsbGVkIG9uY2UgdW50aWwgdGhlIGNhbGxlciBpcyBkZXN0cm95ZWQnLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBmbkNhbGxlZCA9IHRydWU7XG5cbiAgICBjb25zdCByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcbiAgICBjb25zdCBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICAgIGNvbnN0IG92ZXJsYXlIYW5kbGVyID0gaGFuZGxlcihpbm5lckNvbmZpZyk7XG4gICAgY29uc3QgcXVlcnlQYXJhbVZhbHVlID0gaW5qZWN0UXVlcnlQYXJhbTxUUXVlcnlQYXJhbT4oY29uZmlnLnF1ZXJ5UGFyYW1LZXkpO1xuXG4gICAgbGV0IGN1cnJlbnRPdmVybGF5UmVmOiBPdmVybGF5UmVmPFRDb21wb25lbnQsIFRSZXN1bHQ+IHwgbnVsbCA9IG51bGw7XG5cbiAgICBkZXN0cm95UmVmLm9uRGVzdHJveSgoKSA9PiB7XG4gICAgICBmbkNhbGxlZCA9IGZhbHNlO1xuICAgICAgY2xlYW51cCgpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgY2xlYW51cCA9ICgpID0+IHtcbiAgICAgIHJvdXRlci5uYXZpZ2F0ZShbXSwge1xuICAgICAgICBxdWVyeVBhcmFtczoge1xuICAgICAgICAgIFtjb25maWcucXVlcnlQYXJhbUtleV06IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZScsXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gcXVlcnlQYXJhbVZhbHVlKCk7XG5cbiAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgIGlmICghY3VycmVudE92ZXJsYXlSZWYpIHtcbiAgICAgICAgICAgIGN1cnJlbnRPdmVybGF5UmVmID0gb3ZlcmxheUhhbmRsZXIub3BlbigpO1xuICAgICAgICAgICAgY3VycmVudE92ZXJsYXlSZWZcbiAgICAgICAgICAgICAgLmFmdGVyQ2xvc2VkKClcbiAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKGRlc3Ryb3lSZWYpLFxuICAgICAgICAgICAgICAgIHRhcCgoKSA9PiBjbGVhbnVwKCkpLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICAgIGlmICgoY3VycmVudE92ZXJsYXlSZWYuY29tcG9uZW50SW5zdGFuY2UgYXMgYW55KVtPVkVSTEFZX1FVRVJZX1BBUkFNX0lOUFVUX05BTUVdKSB7XG4gICAgICAgICAgICBjdXJyZW50T3ZlcmxheVJlZi5jb21wb25lbnRSZWY/LnNldElucHV0KE9WRVJMQVlfUVVFUllfUEFSQU1fSU5QVVRfTkFNRSwgdmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoY3VycmVudE92ZXJsYXlSZWYpIHtcbiAgICAgICAgICAgIGN1cnJlbnRPdmVybGF5UmVmLmNsb3NlKCk7XG4gICAgICAgICAgICBjdXJyZW50T3ZlcmxheVJlZiA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGNvbnN0IG9wZW4gPSAocXVlcnlQYXJhbVZhbHVlOiBUUXVlcnlQYXJhbSkgPT4ge1xuICAgICAgcm91dGVyLm5hdmlnYXRlKFtdLCB7XG4gICAgICAgIHF1ZXJ5UGFyYW1zOiB7XG4gICAgICAgICAgW2NvbmZpZy5xdWVyeVBhcmFtS2V5XTogcXVlcnlQYXJhbVZhbHVlLFxuICAgICAgICB9LFxuICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnLFxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGNsb3NlID0gKCkgPT4ge1xuICAgICAgY2xlYW51cCgpO1xuICAgIH07XG5cbiAgICBjb25zdCBsaWZlY3ljbGVIYW5kbGVyOiBPdmVybGF5SGFuZGxlcldpdGhRdWVyeVBhcmFtTGlmZWN5Y2xlPFRRdWVyeVBhcmFtPiA9IHtcbiAgICAgIG9wZW4sXG4gICAgICBjbG9zZSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIGxpZmVjeWNsZUhhbmRsZXI7XG4gIH07XG5cbiAgZm5bJ2luamVjdE92ZXJsYXlSZWYnXSA9ICgpID0+IGhhbmRsZXIoKS5pbmplY3RPdmVybGF5UmVmKCk7XG5cbiAgcmV0dXJuIGZuO1xufTtcbiJdfQ==
146
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmxheS1oYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jZGsvc3JjL2xpYi9jb21wb25lbnRzL292ZXJsYXkvY29tcG9uZW50cy9vdmVybGF5L3V0aWxzL292ZXJsYXktaGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQ0wsVUFBVSxFQUNWLE1BQU0sRUFFTixNQUFNLEVBQ04sUUFBUSxFQUlSLFNBQVMsRUFDVCxnQkFBZ0IsR0FDakIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDNUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUc3QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBbUMzQyxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxDQUNsQyxVQUFnRSxFQUNoRSxFQUFFO0lBQ0YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxXQUE2RCxFQUFFLEVBQUU7UUFDM0UsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzlDLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDbEQsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRXRDLE1BQU0sR0FBRyxHQUFHLFVBQVUsQ0FBQyxTQUFTLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQztRQUV4RCxJ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RUFBRSxDQUFDO0FBQ1osQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50VHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7XG4gIERlc3Ryb3lSZWYsXG4gIGVmZmVjdCxcbiAgRWZmZWN0UmVmLFxuICBpbmplY3QsXG4gIEluamVjdG9yLFxuICBJbnB1dFNpZ25hbCxcbiAgTW9kZWxTaWduYWwsXG4gIFRlbXBsYXRlUmVmLFxuICB1bnRyYWNrZWQsXG4gIFZpZXdDb250YWluZXJSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IGluamVjdFF1ZXJ5UGFyYW0gfSBmcm9tICdAZXRobGV0ZS9jb3JlJztcbmltcG9ydCB7IHRhcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgT1ZFUkxBWV9EQVRBIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IE92ZXJsYXlTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgT3ZlcmxheUJyZWFrcG9pbnRDb25maWdFbnRyeSwgT3ZlcmxheUNvbmZpZywgT3ZlcmxheUNvbnN1bWVyQ29uZmlnIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgT3ZlcmxheVBvc2l0aW9uQnVpbGRlciB9IGZyb20gJy4vb3ZlcmxheS1wb3NpdGlvbi1idWlsZGVyJztcbmltcG9ydCB7IE92ZXJsYXlSZWYgfSBmcm9tICcuL292ZXJsYXktcmVmJztcblxuZXhwb3J0IHR5cGUgQ3JlYXRlT3ZlcmxheUhhbmRsZXJDb25maWc8VCwgRCA9IHVua25vd24+ID0gT21pdDxPdmVybGF5Q29uZmlnPEQ+LCAncG9zaXRpb25zJz4gJiB7XG4gIC8qKiBUaGUgb3ZlcmxheSBjb21wb25lbnQuIFVzZSBlaXRoZXIgdGhpcyBvciB0aGUgYHRlbXBsYXRlYCBwcm9wZXJ0eSAgKi9cbiAgY29tcG9uZW50PzogQ29tcG9uZW50VHlwZTxUPjtcblxuICAvKiogVGhlIG92ZXJsYXkgdGVtcGxhdGUuIFVzZSBlaXRoZXIgdGhpcyBvciB0aGUgYGNvbXBvbmVudGAgcHJvcGVydHkgICovXG4gIHRlbXBsYXRlPzogVGVtcGxhdGVSZWY8VD47XG5cbiAgLyoqIFRoZSBvdmVybGF5IHBvc2l0aW9ucyB1c2luZyB0aGUgcG9zaXRpb24gYnVpbGRlciBwcm92aWRlZCB2aWEgYXJndW1lbnQgICovXG4gIHBvc2l0aW9uczogKGJ1aWxkZXI6IE92ZXJsYXlQb3NpdGlvbkJ1aWxkZXIpID0+IE92ZXJsYXlCcmVha3BvaW50Q29uZmlnRW50cnlbXTtcbn07XG5cbmV4cG9ydCB0eXBlIE92ZXJsYXlIYW5kbGVyPFQsIEQgPSB1bmtub3duLCBSID0gdW5rbm93bj4gPSB7XG4gIC8qKiBPcGVuIHRoZSBvdmVybGF5IHVzaW5nIGEgY29tYmluYXRpb24gb2YgdGhlIGdpdmVuIGNvbmZpZ3MgICovXG4gIG9wZW46IChjb25maWc/OiBPdmVybGF5Q29uc3VtZXJDb25maWc8RD4pID0+IE92ZXJsYXlSZWY8VCwgUj47XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHR5cGVkIG92ZXJsYXkgcmVmLlxuICAgKiBAdGhyb3dzIEVycm9yIGlmIHRoZSBvdmVybGF5IHJlZiBnZXRzIGFjY2Vzc2VkIG91dHNpZGUgb2YgdGhlIG92ZXJsYXkgY29tcG9uZW50IG9yIHRlbXBsYXRlUmVmXG4gICAqL1xuICBpbmplY3RPdmVybGF5UmVmOiAoKSA9PiBPdmVybGF5UmVmPFQsIFI+O1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBvdmVybGF5IGRhdGEuXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIG92ZXJsYXkgZGF0YSBnZXRzIGFjY2Vzc2VkIG91dHNpZGUgb2YgdGhlIG92ZXJsYXkgY29tcG9uZW50IG9yIHRlbXBsYXRlUmVmXG4gICAqL1xuICBpbmplY3RPdmVybGF5RGF0YTogKCkgPT4gRDtcbn07XG5cbmV4cG9ydCB0eXBlIENyZWF0ZU92ZXJsYXlIYW5kbGVySW5uZXJDb25maWc8UiA9IHVua25vd24+ID0ge1xuICAvKiogQSBjYWxsYmFjayBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCBvbmNlIHRoZSBvdmVybGF5IGhhcyBiZWVuIGNsb3NlZCAqL1xuICBhZnRlckNsb3NlZD86IChyZXN1bHQ6IFIgfCBudWxsKSA9PiB2b2lkO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZU92ZXJsYXlIYW5kbGVyID0gPFRDb21wb25lbnQsIFRPdmVybGF5RGF0YSA9IHVua25vd24sIFRPdmVybGF5UmVzdWx0ID0gdW5rbm93bj4oXG4gIHJvb3RDb25maWc6IENyZWF0ZU92ZXJsYXlIYW5kbGVyQ29uZmlnPFRDb21wb25lbnQsIFRPdmVybGF5RGF0YT4sXG4pID0+IHtcbiAgY29uc3QgZm4gPSAoaW5uZXJDb25maWc/OiBDcmVhdGVPdmVybGF5SGFuZGxlcklubmVyQ29uZmlnPFRPdmVybGF5UmVzdWx0PikgPT4ge1xuICAgIGNvbnN0IG92ZXJsYXlTZXJ2aWNlID0gaW5qZWN0KE92ZXJsYXlTZXJ2aWNlKTtcbiAgICBjb25zdCB2aWV3Q29udGFpbmVyUmVmID0gaW5qZWN0KFZpZXdDb250YWluZXJSZWYpO1xuICAgIGNvbnN0IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgICBjb25zdCB0cGwgPSByb290Q29uZmlnLmNvbXBvbmVudCA/PyByb290Q29uZmlnLnRlbXBsYXRlO1xuXG4gICAgaWYgKCF0cGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRWl0aGVyIGNvbXBvbmVudCBvciB0ZW1wbGF0ZSBtdXN0IGJlIHByb3ZpZGVkJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3BlbiA9IChjb25maWc/OiBPdmVybGF5Q29uc3VtZXJDb25maWc8VE92ZXJsYXlEYXRhPikgPT4ge1xuICAgICAgY29uc3QgcmVmID0gb3ZlcmxheVNlcnZpY2Uub3BlbjxUQ29tcG9uZW50LCBUT3ZlcmxheURhdGEsIFRPdmVybGF5UmVzdWx0Pih0cGwsIHtcbiAgICAgICAgdmlld0NvbnRhaW5lclJlZixcbiAgICAgICAgLi4ucm9vdENvbmZpZyxcbiAgICAgICAgcG9zaXRpb25zOiByb290Q29uZmlnLnBvc2l0aW9ucyhvdmVybGF5U2VydmljZS5wb3NpdGlvbnMpLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgYWZ0ZXJDbG9zZWRGbiA9IGlubmVyQ29uZmlnPy5hZnRlckNsb3NlZDtcblxuICAgICAgaWYgKGFmdGVyQ2xvc2VkRm4pIHtcbiAgICAgICAgcmVmXG4gICAgICAgICAgLmFmdGVyQ2xvc2VkKClcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZChkZXN0cm95UmVmKSxcbiAgICAgICAgICAgIHRhcCgocikgPT4gYWZ0ZXJDbG9zZWRGbihyID8/IG51bGwpKSxcbiAgICAgICAgICApXG4gICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVmO1xuICAgIH07XG5cbiAgICBjb25zdCBpbmplY3RPdmVybGF5UmVmID0gKCkgPT4ge1xuICAgICAgcmV0dXJuIGluamVjdDxPdmVybGF5UmVmPFRDb21wb25lbnQsIFRPdmVybGF5UmVzdWx0Pj4oT3ZlcmxheVJlZik7XG4gICAgfTtcblxuICAgIGNvbnN0IGluamVjdE92ZXJsYXlEYXRhID0gKCkgPT4ge1xuICAgICAgcmV0dXJuIGluamVjdDxUT3ZlcmxheURhdGE+KE9WRVJMQVlfREFUQSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGhhbmRsZXI6IE92ZXJsYXlIYW5kbGVyPFRDb21wb25lbnQsIFRPdmVybGF5RGF0YSwgVE92ZXJsYXlSZXN1bHQ+ID0ge1xuICAgICAgb3BlbixcbiAgICAgIGluamVjdE92ZXJsYXlSZWYsXG4gICAgICBpbmplY3RPdmVybGF5RGF0YSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIGhhbmRsZXI7XG4gIH07XG5cbiAgcmV0dXJuIGZuO1xufTtcblxuZXhwb3J0IHR5cGUgT3ZlcmxheUhhbmRsZXJXaXRoUXVlcnlQYXJhbUxpZmVjeWNsZTxRID0gc3RyaW5nPiA9IHtcbiAgLyoqIE9wZW4gdGhlIG92ZXJsYXkgdXNpbmcgdGhlIHByb3ZpZGVkIHF1ZXJ5IHBhcmFtIHZhbHVlICAqL1xuICBvcGVuOiAocXVlcnlQYXJhbVZhbHVlOiBRKSA9PiB2b2lkO1xuXG4gIC8qKiBDbG9zZSB0aGUgb3ZlcmxheSBhbmQgcmVtb3ZlIHRoZSBxdWVyeSBwYXJhbSAgKi9cbiAgY2xvc2U6ICgpID0+IHZvaWQ7XG59O1xuXG5leHBvcnQgdHlwZSBDcmVhdGVPdmVybGF5SGFuZGxlcldpdGhRdWVyeVBhcmFtTGlmZWN5Y2xlQ29uZmlnPFQ+ID0gT21pdDxcbiAgT3ZlcmxheUNvbmZpZzx1bmtub3duPixcbiAgJ3Bvc2l0aW9ucycgfCAnZGF0YScgfCAnY2xvc2VPbk5hdmlnYXRpb24nXG4+ICYge1xuICAvKiogVGhlIG92ZXJsYXkgY29tcG9uZW50ICAqL1xuICBjb21wb25lbnQ6IENvbXBvbmVudFR5cGU8VD47XG5cbiAgLyoqIFRoZSBvdmVybGF5IHBvc2l0aW9ucyB1c2luZyB0aGUgcG9zaXRpb24gYnVpbGRlciBwcm92aWRlZCB2aWEgYXJndW1lbnQgICovXG4gIHBvc2l0aW9uczogKGJ1aWxkZXI6IE92ZXJsYXlQb3NpdGlvbkJ1aWxkZXIpID0+IE92ZXJsYXlCcmVha3BvaW50Q29uZmlnRW50cnlbXTtcblxuICAvKiogVGhlIHF1ZXJ5IHBhcmFtIGtleSB0byBiZSB1c2VkIGZvciB0aGUgb3ZlcmxheSAgKi9cbiAgcXVlcnlQYXJhbUtleTogc3RyaW5nO1xufTtcblxuZXhwb3J0IGNvbnN0IE9WRVJMQVlfUVVFUllfUEFSQU1fSU5QVVRfTkFNRSA9ICdvdmVybGF5UXVlcnlQYXJhbSc7XG5cbi8qKlxuICogVGhpcyBoYW5kbGVyIHdpbGwgYXV0b21hdGljYWxseSBvcGVuIHRoZSBvdmVybGF5IHdoZW4gdGhlIHF1ZXJ5IHBhcmFtIGlzIHByZXNlbnQuXG4gKiBUaGUgb3ZlcmxheSBjYW4gY29udGFpbiBhIGlucHV0IG9yIG1vZGVsIHdpdGggdGhlIG5hbWUgYG92ZXJsYXlRdWVyeVBhcmFtYCB0byByZWNlaXZlIHRoZSBxdWVyeSBwYXJhbSB2YWx1ZS5cbiAqXG4gKiBJZiB5b3UgbmVlZCB0byB0cmFuc2ZlciBtb3JlIGluZm9ybWF0aW9uIChlZy4gYSBzZWNvbmQgcXVlcnkgcGFyYW0pLCB5b3UgbmVlZCB0byBjb21iaW5lIHRoZW0gaW50byBhIHNpbmdsZSBxdWVyeSBwYXJhbSBzdHJpbmcuXG4gKiBZb3UgY2FuIHRoZW4gc3BsaXQgdGhlIHN0cmluZyBpbnNpZGUgdGhlIG92ZXJsYXkgY29tcG9uZW50IHVzaW5nIGNvbXB1dGVkIHNpZ25hbHMuXG4gKlxuICogVG8gb3BlbiB0aGUgb3ZlcmxheSBlaXRoZXIgdXNlIHRoZSBgT3ZlcmxheUhhbmRsZXJMaW5rRGlyZWN0aXZlYCBvciBjYWxsIHRoZSBgLm9wZW5gIG1ldGhvZCBvZiB0aGUgcmV0dXJuZWQgaGFuZGxlci5cbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZU92ZXJsYXlIYW5kbGVyV2l0aFF1ZXJ5UGFyYW1MaWZlY3ljbGUgPSA8XG4gIFRDb21wb25lbnQsXG4gIFRRdWVyeVBhcmFtIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLFxuICBUUmVzdWx0ID0gdW5rbm93bixcbj4oXG4gIGNvbmZpZzogQ3JlYXRlT3ZlcmxheUhhbmRsZXJXaXRoUXVlcnlQYXJhbUxpZmVjeWNsZUNvbmZpZzxUQ29tcG9uZW50PixcbikgPT4ge1xuICBjb25zdCBoYW5kbGVyID0gY3JlYXRlT3ZlcmxheUhhbmRsZXI8VENvbXBvbmVudCwgdm9pZCwgVFJlc3VsdD4oeyAuLi5jb25maWcsIGNsb3NlT25OYXZpZ2F0aW9uOiBmYWxzZSB9KTtcblxuICBsZXQgZm5DYWxsZWQgPSBmYWxzZTtcbiAgbGV0IHJvdXRlcjogUm91dGVyIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3QgdXBkYXRlUXVlcnlQYXJhbSA9ICh2YWx1ZTogVFF1ZXJ5UGFyYW0gfCBudWxsKSA9PiB7XG4gICAgcm91dGVyPy5uYXZpZ2F0ZShbXSwge1xuICAgICAgcXVlcnlQYXJhbXM6IHtcbiAgICAgICAgW2NvbmZpZy5xdWVyeVBhcmFtS2V5XTogdmFsdWUsXG4gICAgICB9LFxuICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJyxcbiAgICB9KTtcbiAgfTtcblxuICBjb25zdCBmbiA9IChpbm5lckNvbmZpZz86IENyZWF0ZU92ZXJsYXlIYW5kbGVySW5uZXJDb25maWc8VFJlc3VsdD4pID0+IHtcbiAgICBpZiAoZm5DYWxsZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ1RoZSBmdW5jdGlvbiByZXR1cm5lZCBieSBjcmVhdGVPdmVybGF5SGFuZGxlcldpdGhRdWVyeVBhcmFtTGlmZWN5Y2xlIGNhbiBvbmx5IGJlIGNhbGxlZCBvbmNlIHVudGlsIHRoZSBjYWxsZXIgaXMgZGVzdHJveWVkJyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgZm5DYWxsZWQgPSB0cnVlO1xuXG4gICAgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG4gICAgY29uc3QgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcbiAgICBjb25zdCBpbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG4gICAgY29uc3Qgb3ZlcmxheUhhbmRsZXIgPSBoYW5kbGVyKHsgLi4uKGlubmVyQ29uZmlnID8/IHt9KSB9KTtcbiAgICBjb25zdCBxdWVyeVBhcmFtVmFsdWUgPSBpbmplY3RRdWVyeVBhcmFtPFRRdWVyeVBhcmFtPihjb25maWcucXVlcnlQYXJhbUtleSk7XG5cbiAgICBsZXQgY3VycmVudE92ZXJsYXlSZWY6IE92ZXJsYXlSZWY8VENvbXBvbmVudCwgVFJlc3VsdD4gfCBudWxsID0gbnVsbDtcbiAgICBsZXQgaW5wdXRTaWduYWxFZmZlY3Q6IEVmZmVjdFJlZiB8IG51bGwgPSBudWxsO1xuXG4gICAgZGVzdHJveVJlZi5vbkRlc3Ryb3koKCkgPT4ge1xuICAgICAgZm5DYWxsZWQgPSBmYWxzZTtcbiAgICAgIHJvdXRlciA9IG51bGw7XG4gICAgICBjbGVhbnVwKCk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBjbGVhbnVwID0gKCkgPT4ge1xuICAgICAgaW5wdXRTaWduYWxFZmZlY3Q/LmRlc3Ryb3koKTtcbiAgICAgIGlucHV0U2lnbmFsRWZmZWN0ID0gbnVsbDtcbiAgICAgIHVwZGF0ZVF1ZXJ5UGFyYW0obnVsbCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGdldFF1ZXJ5UGFyYW1JbnB1dCA9ICgpID0+IHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICByZXR1cm4gKGN1cnJlbnRPdmVybGF5UmVmPy5jb21wb25lbnRJbnN0YW5jZSBhcyBhbnkpPy5bT1ZFUkxBWV9RVUVSWV9QQVJBTV9JTlBVVF9OQU1FXSBhc1xuICAgICAgICB8IE1vZGVsU2lnbmFsPFRRdWVyeVBhcmFtPlxuICAgICAgICB8IElucHV0U2lnbmFsPFRRdWVyeVBhcmFtPlxuICAgICAgICB8IHVuZGVmaW5lZDtcbiAgICB9O1xuXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gcXVlcnlQYXJhbVZhbHVlKCk7XG5cbiAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgIGlmICghY3VycmVudE92ZXJsYXlSZWYpIHtcbiAgICAgICAgICAgIGN1cnJlbnRPdmVybGF5UmVmID0gb3ZlcmxheUhhbmRsZXIub3BlbigpO1xuICAgICAgICAgICAgY3VycmVudE92ZXJsYXlSZWZcbiAgICAgICAgICAgICAgLmFmdGVyQ2xvc2VkKClcbiAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKGRlc3Ryb3lSZWYpLFxuICAgICAgICAgICAgICAgIHRhcCgoKSA9PiBjbGVhbnVwKCkpLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAgIGNvbnN0IGlucHV0U2lnbmFsID0gZ2V0UXVlcnlQYXJhbUlucHV0KCk7XG5cbiAgICAgICAgICAgIGlmIChpbnB1dFNpZ25hbCkge1xuICAgICAgICAgICAgICBpbnB1dFNpZ25hbEVmZmVjdCA9IGVmZmVjdChcbiAgICAgICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBpbnB1dFZhbCA9IGlucHV0U2lnbmFsKCk7XG5cbiAgICAgICAgICAgICAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZVF1ZXJ5UGFyYW0oaW5wdXRWYWwpO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7IGluamVjdG9yIH0sXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGdldFF1ZXJ5UGFyYW1JbnB1dCgpKSB7XG4gICAgICAgICAgICBjdXJyZW50T3ZlcmxheVJlZi5jb21wb25lbnRSZWY/LnNldElucHV0KE9WRVJMQVlfUVVFUllfUEFSQU1fSU5QVVRfTkFNRSwgdmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoY3VycmVudE92ZXJsYXlSZWYpIHtcbiAgICAgICAgICAgIGlucHV0U2lnbmFsRWZmZWN0Py5kZXN0cm95KCk7XG4gICAgICAgICAgICBpbnB1dFNpZ25hbEVmZmVjdCA9IG51bGw7XG4gICAgICAgICAgICBjdXJyZW50T3ZlcmxheVJlZi5jbG9zZSgpO1xuICAgICAgICAgICAgY3VycmVudE92ZXJsYXlSZWYgPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBvcGVuID0gKHF1ZXJ5UGFyYW1WYWx1ZTogVFF1ZXJ5UGFyYW0pID0+IHVwZGF0ZVF1ZXJ5UGFyYW0ocXVlcnlQYXJhbVZhbHVlKTtcblxuICAgIGNvbnN0IGNsb3NlID0gKCkgPT4ge1xuICAgICAgY2xlYW51cCgpO1xuICAgIH07XG5cbiAgICBjb25zdCBsaWZlY3ljbGVIYW5kbGVyOiBPdmVybGF5SGFuZGxlcldpdGhRdWVyeVBhcmFtTGlmZWN5Y2xlPFRRdWVyeVBhcmFtPiA9IHtcbiAgICAgIG9wZW4sXG4gICAgICBjbG9zZSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIGxpZmVjeWNsZUhhbmRsZXI7XG4gIH07XG5cbiAgZm5bJ2luamVjdE92ZXJsYXlSZWYnXSA9ICgpID0+IGhhbmRsZXIoKS5pbmplY3RPdmVybGF5UmVmKCk7XG4gIGZuWyd1cGRhdGVRdWVyeVBhcmFtJ10gPSAodmFsdWU6IFRRdWVyeVBhcmFtKSA9PiB1cGRhdGVRdWVyeVBhcmFtKHZhbHVlKTtcblxuICByZXR1cm4gZm47XG59O1xuIl19
@@ -12460,7 +12460,7 @@ const createOverlayHandler = (rootConfig) => {
12460
12460
  const OVERLAY_QUERY_PARAM_INPUT_NAME = 'overlayQueryParam';
12461
12461
  /**
12462
12462
  * This handler will automatically open the overlay when the query param is present.
12463
- * The overlay can contain a required input with the name `overlayQueryParam` to receive the query param value.
12463
+ * The overlay can contain a input or model with the name `overlayQueryParam` to receive the query param value.
12464
12464
  *
12465
12465
  * If you need to transfer more information (eg. a second query param), you need to combine them into a single query param string.
12466
12466
  * You can then split the string inside the overlay component using computed signals.
@@ -12468,29 +12468,42 @@ const OVERLAY_QUERY_PARAM_INPUT_NAME = 'overlayQueryParam';
12468
12468
  * To open the overlay either use the `OverlayHandlerLinkDirective` or call the `.open` method of the returned handler.
12469
12469
  */
12470
12470
  const createOverlayHandlerWithQueryParamLifecycle = (config) => {
12471
- const handler = createOverlayHandler(config);
12471
+ const handler = createOverlayHandler({ ...config, closeOnNavigation: false });
12472
12472
  let fnCalled = false;
12473
+ let router = null;
12474
+ const updateQueryParam = (value) => {
12475
+ router?.navigate([], {
12476
+ queryParams: {
12477
+ [config.queryParamKey]: value,
12478
+ },
12479
+ queryParamsHandling: 'merge',
12480
+ });
12481
+ };
12473
12482
  const fn = (innerConfig) => {
12474
12483
  if (fnCalled) {
12475
12484
  throw new Error('The function returned by createOverlayHandlerWithQueryParamLifecycle can only be called once until the caller is destroyed');
12476
12485
  }
12477
12486
  fnCalled = true;
12478
- const router = inject(Router);
12487
+ router = inject(Router);
12479
12488
  const destroyRef = inject(DestroyRef);
12480
- const overlayHandler = handler(innerConfig);
12489
+ const injector = inject(Injector);
12490
+ const overlayHandler = handler({ ...(innerConfig ?? {}) });
12481
12491
  const queryParamValue = injectQueryParam(config.queryParamKey);
12482
12492
  let currentOverlayRef = null;
12493
+ let inputSignalEffect = null;
12483
12494
  destroyRef.onDestroy(() => {
12484
12495
  fnCalled = false;
12496
+ router = null;
12485
12497
  cleanup();
12486
12498
  });
12487
12499
  const cleanup = () => {
12488
- router.navigate([], {
12489
- queryParams: {
12490
- [config.queryParamKey]: null,
12491
- },
12492
- queryParamsHandling: 'merge',
12493
- });
12500
+ inputSignalEffect?.destroy();
12501
+ inputSignalEffect = null;
12502
+ updateQueryParam(null);
12503
+ };
12504
+ const getQueryParamInput = () => {
12505
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
12506
+ return currentOverlayRef?.componentInstance?.[OVERLAY_QUERY_PARAM_INPUT_NAME];
12494
12507
  };
12495
12508
  effect(() => {
12496
12509
  const value = queryParamValue();
@@ -12502,28 +12515,32 @@ const createOverlayHandlerWithQueryParamLifecycle = (config) => {
12502
12515
  .afterClosed()
12503
12516
  .pipe(takeUntilDestroyed(destroyRef), tap(() => cleanup()))
12504
12517
  .subscribe();
12518
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
12519
+ const inputSignal = getQueryParamInput();
12520
+ if (inputSignal) {
12521
+ inputSignalEffect = effect(() => {
12522
+ const inputVal = inputSignal();
12523
+ untracked(() => {
12524
+ updateQueryParam(inputVal);
12525
+ });
12526
+ }, { injector });
12527
+ }
12505
12528
  }
12506
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
12507
- if (currentOverlayRef.componentInstance[OVERLAY_QUERY_PARAM_INPUT_NAME]) {
12529
+ if (getQueryParamInput()) {
12508
12530
  currentOverlayRef.componentRef?.setInput(OVERLAY_QUERY_PARAM_INPUT_NAME, value);
12509
12531
  }
12510
12532
  }
12511
12533
  else {
12512
12534
  if (currentOverlayRef) {
12535
+ inputSignalEffect?.destroy();
12536
+ inputSignalEffect = null;
12513
12537
  currentOverlayRef.close();
12514
12538
  currentOverlayRef = null;
12515
12539
  }
12516
12540
  }
12517
12541
  });
12518
12542
  });
12519
- const open = (queryParamValue) => {
12520
- router.navigate([], {
12521
- queryParams: {
12522
- [config.queryParamKey]: queryParamValue,
12523
- },
12524
- queryParamsHandling: 'merge',
12525
- });
12526
- };
12543
+ const open = (queryParamValue) => updateQueryParam(queryParamValue);
12527
12544
  const close = () => {
12528
12545
  cleanup();
12529
12546
  };
@@ -12534,6 +12551,7 @@ const createOverlayHandlerWithQueryParamLifecycle = (config) => {
12534
12551
  return lifecycleHandler;
12535
12552
  };
12536
12553
  fn['injectOverlayRef'] = () => handler().injectOverlayRef();
12554
+ fn['updateQueryParam'] = (value) => updateQueryParam(value);
12537
12555
  return fn;
12538
12556
  };
12539
12557