@sinequa/atomic-angular 0.0.146
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/assets/tailwind.css +334 -0
- package/esm2022/lib/assistant/index.mjs +2 -0
- package/esm2022/lib/assistant/signalR.web.service.mjs +81 -0
- package/esm2022/lib/components/dropdown-input.mjs +97 -0
- package/esm2022/lib/components/dropdown-list.mjs +35 -0
- package/esm2022/lib/components/dropdown.mjs +127 -0
- package/esm2022/lib/components/index.mjs +7 -0
- package/esm2022/lib/components/menu/index.mjs +3 -0
- package/esm2022/lib/components/menu/menu-item.mjs +22 -0
- package/esm2022/lib/components/menu/menu.mjs +99 -0
- package/esm2022/lib/components/metadata/index.mjs +2 -0
- package/esm2022/lib/components/metadata/metadata.component.mjs +65 -0
- package/esm2022/lib/components/theme/index.mjs +3 -0
- package/esm2022/lib/components/theme/theme-selector.component.mjs +67 -0
- package/esm2022/lib/components/theme/theme-toggle.component.mjs +67 -0
- package/esm2022/lib/directives/index.mjs +5 -0
- package/esm2022/lib/directives/infinite-scroll.directive.mjs +47 -0
- package/esm2022/lib/directives/select-article-on-click.directive.mjs +39 -0
- package/esm2022/lib/directives/show-bookmark.directive.mjs +55 -0
- package/esm2022/lib/directives/theme-provider.directive.mjs +31 -0
- package/esm2022/lib/guards/auth.guard.mjs +27 -0
- package/esm2022/lib/guards/index.mjs +3 -0
- package/esm2022/lib/guards/initialization.guard.mjs +41 -0
- package/esm2022/lib/interceptors/audit.interceptor.mjs +23 -0
- package/esm2022/lib/interceptors/auth.interceptor.mjs +49 -0
- package/esm2022/lib/interceptors/body.interceptor.mjs +24 -0
- package/esm2022/lib/interceptors/error.interceptor.mjs +35 -0
- package/esm2022/lib/interceptors/index.mjs +7 -0
- package/esm2022/lib/interceptors/toast.interceptor.mjs +27 -0
- package/esm2022/lib/models/aggregation.mjs +2 -0
- package/esm2022/lib/models/article-metadata.mjs +2 -0
- package/esm2022/lib/models/autocomplete.mjs +2 -0
- package/esm2022/lib/models/custom-json.mjs +2 -0
- package/esm2022/lib/models/filter-dropdown.mjs +2 -0
- package/esm2022/lib/models/index.mjs +7 -0
- package/esm2022/lib/models/user-settings.mjs +2 -0
- package/esm2022/lib/pipes/highlight-word.pipe.mjs +33 -0
- package/esm2022/lib/pipes/index.mjs +3 -0
- package/esm2022/lib/pipes/source-icon.pipe.mjs +43 -0
- package/esm2022/lib/public-api.mjs +18 -0
- package/esm2022/lib/resolvers/index.mjs +2 -0
- package/esm2022/lib/resolvers/query-name-resolver.mjs +14 -0
- package/esm2022/lib/resources/index.mjs +2 -0
- package/esm2022/lib/resources/themes.mjs +53 -0
- package/esm2022/lib/services/application.service.mjs +245 -0
- package/esm2022/lib/services/autocomplete.service.mjs +85 -0
- package/esm2022/lib/services/drawer/backdrop.service.mjs +23 -0
- package/esm2022/lib/services/drawer/drawer-stack.service.mjs +152 -0
- package/esm2022/lib/services/drawer/drawer.service.mjs +38 -0
- package/esm2022/lib/services/index.mjs +12 -0
- package/esm2022/lib/services/label.service.mjs +161 -0
- package/esm2022/lib/services/navigation.service.mjs +59 -0
- package/esm2022/lib/services/saved-searches.service.mjs +75 -0
- package/esm2022/lib/services/search.service.mjs +89 -0
- package/esm2022/lib/services/selection-history.service.mjs +92 -0
- package/esm2022/lib/services/selection.service.mjs +87 -0
- package/esm2022/lib/stores/aggregations.store.mjs +59 -0
- package/esm2022/lib/stores/app.store.mjs +270 -0
- package/esm2022/lib/stores/application.store.mjs +87 -0
- package/esm2022/lib/stores/index.mjs +9 -0
- package/esm2022/lib/stores/principal.store.mjs +47 -0
- package/esm2022/lib/stores/query-params.store.mjs +207 -0
- package/esm2022/lib/stores/selection.store.mjs +45 -0
- package/esm2022/lib/stores/theme.store.mjs +116 -0
- package/esm2022/lib/stores/user-settings.store.mjs +391 -0
- package/esm2022/lib/tokens/highlights.mjs +32 -0
- package/esm2022/lib/tokens/index.mjs +2 -0
- package/esm2022/lib/utils/debounced-signal.mjs +38 -0
- package/esm2022/lib/utils/index.mjs +8 -0
- package/esm2022/lib/utils/inline-worker.mjs +40 -0
- package/esm2022/lib/utils/query.mjs +58 -0
- package/esm2022/lib/utils/routes.mjs +28 -0
- package/esm2022/lib/utils/tailwind-utils.mjs +6 -0
- package/esm2022/lib/utils/theme-body-hook.mjs +18 -0
- package/esm2022/lib/utils/theme-registry.mjs +6 -0
- package/esm2022/lib/web-services/aggregations.service.mjs +104 -0
- package/esm2022/lib/web-services/app.service.mjs +48 -0
- package/esm2022/lib/web-services/audit.service.mjs +122 -0
- package/esm2022/lib/web-services/index.mjs +10 -0
- package/esm2022/lib/web-services/json-method-plugin.service.mjs +54 -0
- package/esm2022/lib/web-services/preview.service.mjs +327 -0
- package/esm2022/lib/web-services/principal.service.mjs +46 -0
- package/esm2022/lib/web-services/query.service.mjs +123 -0
- package/esm2022/lib/web-services/text-chunck.service.mjs +46 -0
- package/esm2022/public-api.mjs +5 -0
- package/esm2022/sinequa-atomic-angular.mjs +5 -0
- package/fesm2022/sinequa-atomic-angular.mjs +4420 -0
- package/fesm2022/sinequa-atomic-angular.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/assistant/index.d.ts +1 -0
- package/lib/assistant/signalR.web.service.d.ts +46 -0
- package/lib/components/dropdown-input.d.ts +18 -0
- package/lib/components/dropdown-list.d.ts +8 -0
- package/lib/components/dropdown.d.ts +50 -0
- package/lib/components/index.d.ts +6 -0
- package/lib/components/menu/index.d.ts +2 -0
- package/lib/components/menu/menu-item.d.ts +8 -0
- package/lib/components/menu/menu.d.ts +24 -0
- package/lib/components/metadata/index.d.ts +1 -0
- package/lib/components/metadata/metadata.component.d.ts +24 -0
- package/lib/components/theme/index.d.ts +2 -0
- package/lib/components/theme/theme-selector.component.d.ts +70 -0
- package/lib/components/theme/theme-toggle.component.d.ts +10 -0
- package/lib/directives/index.d.ts +4 -0
- package/lib/directives/infinite-scroll.directive.d.ts +30 -0
- package/lib/directives/select-article-on-click.directive.d.ts +14 -0
- package/lib/directives/show-bookmark.directive.d.ts +60 -0
- package/lib/directives/theme-provider.directive.d.ts +20 -0
- package/lib/guards/auth.guard.d.ts +7 -0
- package/lib/guards/index.d.ts +2 -0
- package/lib/guards/initialization.guard.d.ts +20 -0
- package/lib/interceptors/audit.interceptor.d.ts +13 -0
- package/lib/interceptors/auth.interceptor.d.ts +14 -0
- package/lib/interceptors/body.interceptor.d.ts +11 -0
- package/lib/interceptors/error.interceptor.d.ts +9 -0
- package/lib/interceptors/index.d.ts +5 -0
- package/lib/interceptors/toast.interceptor.d.ts +13 -0
- package/lib/models/aggregation.d.ts +12 -0
- package/lib/models/article-metadata.d.ts +5 -0
- package/lib/models/autocomplete.d.ts +5 -0
- package/lib/models/custom-json.d.ts +69 -0
- package/lib/models/filter-dropdown.d.ts +10 -0
- package/lib/models/index.d.ts +6 -0
- package/lib/models/user-settings.d.ts +38 -0
- package/lib/pipes/highlight-word.pipe.d.ts +22 -0
- package/lib/pipes/index.d.ts +2 -0
- package/lib/pipes/source-icon.pipe.d.ts +51 -0
- package/lib/public-api.d.ts +14 -0
- package/lib/resolvers/index.d.ts +1 -0
- package/lib/resolvers/query-name-resolver.d.ts +9 -0
- package/lib/resources/index.d.ts +1 -0
- package/lib/resources/themes.d.ts +51 -0
- package/lib/services/application.service.d.ts +183 -0
- package/lib/services/autocomplete.service.d.ts +96 -0
- package/lib/services/drawer/backdrop.service.d.ts +9 -0
- package/lib/services/drawer/drawer-stack.service.d.ts +70 -0
- package/lib/services/drawer/drawer.service.d.ts +15 -0
- package/lib/services/index.d.ts +11 -0
- package/lib/services/label.service.d.ts +114 -0
- package/lib/services/navigation.service.d.ts +33 -0
- package/lib/services/saved-searches.service.d.ts +149 -0
- package/lib/services/search.service.d.ts +159 -0
- package/lib/services/selection-history.service.d.ts +50 -0
- package/lib/services/selection.service.d.ts +123 -0
- package/lib/stores/aggregations.store.d.ts +25 -0
- package/lib/stores/app.store.d.ts +110 -0
- package/lib/stores/application.store.d.ts +83 -0
- package/lib/stores/index.d.ts +8 -0
- package/lib/stores/principal.store.d.ts +47 -0
- package/lib/stores/query-params.store.d.ts +128 -0
- package/lib/stores/selection.store.d.ts +52 -0
- package/lib/stores/theme.store.d.ts +66 -0
- package/lib/stores/user-settings.store.d.ts +111 -0
- package/lib/tokens/highlights.d.ts +8 -0
- package/lib/tokens/index.d.ts +1 -0
- package/lib/utils/debounced-signal.d.ts +25 -0
- package/lib/utils/index.d.ts +7 -0
- package/lib/utils/inline-worker.d.ts +11 -0
- package/lib/utils/query.d.ts +26 -0
- package/lib/utils/routes.d.ts +16 -0
- package/lib/utils/tailwind-utils.d.ts +2 -0
- package/lib/utils/theme-body-hook.d.ts +6 -0
- package/lib/utils/theme-registry.d.ts +3 -0
- package/lib/web-services/aggregations.service.d.ts +57 -0
- package/lib/web-services/app.service.d.ts +30 -0
- package/lib/web-services/audit.service.d.ts +72 -0
- package/lib/web-services/index.d.ts +9 -0
- package/lib/web-services/json-method-plugin.service.d.ts +41 -0
- package/lib/web-services/preview.service.d.ts +283 -0
- package/lib/web-services/principal.service.d.ts +28 -0
- package/lib/web-services/query.service.d.ts +29 -0
- package/lib/web-services/text-chunck.service.d.ts +22 -0
- package/package.json +28 -0
- package/public-api.d.ts +1 -0
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { Component, HostListener, afterNextRender, input, signal, viewChild } from '@angular/core';
|
|
2
|
+
import { autoUpdate, computePosition, flip, offset, shift } from '@floating-ui/dom';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class DropdownComponent {
|
|
5
|
+
mouseleave(event) {
|
|
6
|
+
this.close();
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Initializes the dropdown component and sets up automatic updates for its position.
|
|
10
|
+
*
|
|
11
|
+
* The constructor uses `afterNextRender` to ensure that the DOM elements are available
|
|
12
|
+
* before calling `autoUpdate`. The `autoUpdate` function monitors the trigger and dropdown
|
|
13
|
+
* elements, and if the dropdown is open, it recalculates its position.
|
|
14
|
+
*
|
|
15
|
+
* @constructor
|
|
16
|
+
*/
|
|
17
|
+
constructor() {
|
|
18
|
+
this.isOpen = signal(false);
|
|
19
|
+
this.position = input('bottom-start');
|
|
20
|
+
this.autoClose = input(false);
|
|
21
|
+
this.disabled = input();
|
|
22
|
+
this.dropdown = viewChild('dropdownWrapper');
|
|
23
|
+
this.trigger = viewChild('trigger');
|
|
24
|
+
this.width = signal(0);
|
|
25
|
+
afterNextRender(() => {
|
|
26
|
+
autoUpdate(this.trigger()?.nativeElement, this.dropdown()?.nativeElement, () => {
|
|
27
|
+
if (!this.isOpen())
|
|
28
|
+
return;
|
|
29
|
+
this.calculatePosition();
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Toggles the dropdown's open state.
|
|
35
|
+
* If the dropdown is disabled, the method returns immediately without making any changes.
|
|
36
|
+
* Otherwise, it updates the `isOpen` state to its opposite value and recalculates the dropdown's position.
|
|
37
|
+
*/
|
|
38
|
+
toggle() {
|
|
39
|
+
if (this.disabled())
|
|
40
|
+
return;
|
|
41
|
+
this.isOpen.update(() => !this.isOpen());
|
|
42
|
+
this.calculatePosition();
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Closes the dropdown by setting the `isOpen` state to `false`.
|
|
46
|
+
*/
|
|
47
|
+
close() {
|
|
48
|
+
this.isOpen.set(false);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Calculates and sets the position of the dropdown element relative to the trigger element.
|
|
52
|
+
* Utilizes the `computePosition` function with specified middleware for offset, flip, and shift.
|
|
53
|
+
* Updates the dropdown's `left` and `top` styles based on the computed position.
|
|
54
|
+
* Also sets the width of the dropdown to match the trigger element's width.
|
|
55
|
+
*
|
|
56
|
+
* @returns {void}
|
|
57
|
+
*/
|
|
58
|
+
calculatePosition() {
|
|
59
|
+
computePosition(this.trigger()?.nativeElement, this.dropdown()?.nativeElement, {
|
|
60
|
+
placement: this.position(),
|
|
61
|
+
middleware: [offset(8), flip(), shift()],
|
|
62
|
+
}).then(({ x, y }) => {
|
|
63
|
+
this.dropdown().nativeElement.style.left = x + 'px';
|
|
64
|
+
this.dropdown().nativeElement.style.top = y + 'px';
|
|
65
|
+
this.width.set(this.trigger()?.nativeElement.offsetWidth);
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
// Onclick outside the dropdown, close it
|
|
69
|
+
clickout(event) {
|
|
70
|
+
if (
|
|
71
|
+
// Check if the click was outside the dropdown
|
|
72
|
+
// and the dropdown is open
|
|
73
|
+
// and the click was not on the button
|
|
74
|
+
// then close the dropdown
|
|
75
|
+
!this.dropdown()?.nativeElement.contains(event.target)
|
|
76
|
+
&& this.isOpen
|
|
77
|
+
&& !this.trigger()?.nativeElement.contains(event.target)) {
|
|
78
|
+
this.isOpen.set(false);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Handles the click event on the dropdown content.
|
|
83
|
+
* If the `autoClose` method returns true, it triggers the `close` method to close the dropdown.
|
|
84
|
+
*/
|
|
85
|
+
contentClicked() {
|
|
86
|
+
if (this.autoClose())
|
|
87
|
+
this.close();
|
|
88
|
+
}
|
|
89
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: DropdownComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
90
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.5", type: DropdownComponent, isStandalone: true, selector: "sq-dropdown, Dropdown", inputs: { position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, autoClose: { classPropertyName: "autoClose", publicName: "autoClose", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "document:click": "clickout($event)" } }, viewQueries: [{ propertyName: "dropdown", first: true, predicate: ["dropdownWrapper"], descendants: true, isSignal: true }, { propertyName: "trigger", first: true, predicate: ["trigger"], descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
91
|
+
<div #trigger class="select-none dropdown" (click)="toggle()">
|
|
92
|
+
<ng-content></ng-content>
|
|
93
|
+
</div>
|
|
94
|
+
|
|
95
|
+
<div #dropdownWrapper
|
|
96
|
+
class="dropdown-wrapper absolute text-sm min-w-fit"
|
|
97
|
+
[style.display]="isOpen() ? 'block' : 'none'"
|
|
98
|
+
[style.width]="width() + 'px'"
|
|
99
|
+
(click)="contentClicked()"
|
|
100
|
+
(mouseleave)="mouseleave($event)"
|
|
101
|
+
>
|
|
102
|
+
<ng-content select="[dropdown-content]"></ng-content>
|
|
103
|
+
</div>
|
|
104
|
+
`, isInline: true, styles: [".dropdown-wrapper{z-index:var(--z-dropdown, 100)}\n"] }); }
|
|
105
|
+
}
|
|
106
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: DropdownComponent, decorators: [{
|
|
107
|
+
type: Component,
|
|
108
|
+
args: [{ selector: 'sq-dropdown, Dropdown', standalone: true, template: `
|
|
109
|
+
<div #trigger class="select-none dropdown" (click)="toggle()">
|
|
110
|
+
<ng-content></ng-content>
|
|
111
|
+
</div>
|
|
112
|
+
|
|
113
|
+
<div #dropdownWrapper
|
|
114
|
+
class="dropdown-wrapper absolute text-sm min-w-fit"
|
|
115
|
+
[style.display]="isOpen() ? 'block' : 'none'"
|
|
116
|
+
[style.width]="width() + 'px'"
|
|
117
|
+
(click)="contentClicked()"
|
|
118
|
+
(mouseleave)="mouseleave($event)"
|
|
119
|
+
>
|
|
120
|
+
<ng-content select="[dropdown-content]"></ng-content>
|
|
121
|
+
</div>
|
|
122
|
+
`, styles: [".dropdown-wrapper{z-index:var(--z-dropdown, 100)}\n"] }]
|
|
123
|
+
}], ctorParameters: () => [], propDecorators: { clickout: [{
|
|
124
|
+
type: HostListener,
|
|
125
|
+
args: ['document:click', ['$event']]
|
|
126
|
+
}] } });
|
|
127
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hdG9taWMtYW5ndWxhci9zcmMvbGliL2NvbXBvbmVudHMvZHJvcGRvd24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9HLE9BQU8sRUFBYSxVQUFVLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7O0FBMEIvRixNQUFNLE9BQU8saUJBQWlCO0lBVzVCLFVBQVUsQ0FBQyxLQUFZO1FBQ3JCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNmLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNIO1FBdkJBLFdBQU0sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkIsYUFBUSxHQUFHLEtBQUssQ0FBWSxjQUFjLENBQUMsQ0FBQztRQUM1QyxjQUFTLEdBQUcsS0FBSyxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQ2xDLGFBQVEsR0FBRyxLQUFLLEVBQVcsQ0FBQztRQUU1QixhQUFRLEdBQUcsU0FBUyxDQUFhLGlCQUFpQixDQUFDLENBQUM7UUFDcEQsWUFBTyxHQUFHLFNBQVMsQ0FBYSxTQUFTLENBQUMsQ0FBQztRQUUzQyxVQUFLLEdBQUcsTUFBTSxDQUFTLENBQUMsQ0FBQyxDQUFDO1FBZ0J4QixlQUFlLENBQUMsR0FBRyxFQUFFO1lBQ25CLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsYUFBYSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFFO2dCQUM3RSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtvQkFBRSxPQUFPO2dCQUMzQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUMzQixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUdEOzs7O09BSUc7SUFDSCxNQUFNO1FBQ0osSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQUUsT0FBTztRQUM1QixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUs7UUFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILGlCQUFpQjtRQUNmLGVBQWUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsYUFBYSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxhQUFhLEVBQUU7WUFDN0UsU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDMUIsVUFBVSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDO1NBQ3pDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQTRCLEVBQUUsRUFBRTtZQUM3QyxJQUFJLENBQUMsUUFBUSxFQUFHLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztZQUNyRCxJQUFJLENBQUMsUUFBUSxFQUFHLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztZQUNwRCxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzVELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELHlDQUF5QztJQUV6QyxRQUFRLENBQUMsS0FBWTtRQUNuQjtRQUNFLDhDQUE4QztRQUM5QywyQkFBMkI7UUFDM0Isc0NBQXNDO1FBQ3RDLDBCQUEwQjtRQUMxQixDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxhQUFhLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7ZUFDbkQsSUFBSSxDQUFDLE1BQU07ZUFDWCxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxhQUFhLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFDeEQsQ0FBQztZQUNELElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pCLENBQUM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsY0FBYztRQUNaLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNyQyxDQUFDOzhHQTdGVSxpQkFBaUI7a0dBQWpCLGlCQUFpQixvd0JBckJsQjs7Ozs7Ozs7Ozs7Ozs7R0FjVDs7MkZBT1UsaUJBQWlCO2tCQXhCN0IsU0FBUzsrQkFDRSx1QkFBdUIsY0FDckIsSUFBSSxZQUNOOzs7Ozs7Ozs7Ozs7OztHQWNUO3dEQWdGRCxRQUFRO3NCQURQLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgYWZ0ZXJOZXh0UmVuZGVyLCBpbnB1dCwgc2lnbmFsLCB2aWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBsYWNlbWVudCwgYXV0b1VwZGF0ZSwgY29tcHV0ZVBvc2l0aW9uLCBmbGlwLCBvZmZzZXQsIHNoaWZ0IH0gZnJvbSAnQGZsb2F0aW5nLXVpL2RvbSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NxLWRyb3Bkb3duLCBEcm9wZG93bicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiAjdHJpZ2dlciBjbGFzcz1cInNlbGVjdC1ub25lIGRyb3Bkb3duXCIgKGNsaWNrKT1cInRvZ2dsZSgpXCI+XG4gICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2ICNkcm9wZG93bldyYXBwZXJcbiAgICAgIGNsYXNzPVwiZHJvcGRvd24td3JhcHBlciBhYnNvbHV0ZSB0ZXh0LXNtIG1pbi13LWZpdFwiXG4gICAgICBbc3R5bGUuZGlzcGxheV09XCJpc09wZW4oKSA/ICdibG9jaycgOiAnbm9uZSdcIlxuICAgICAgW3N0eWxlLndpZHRoXT1cIndpZHRoKCkgKyAncHgnXCJcbiAgICAgIChjbGljayk9XCJjb250ZW50Q2xpY2tlZCgpXCJcbiAgICAgIChtb3VzZWxlYXZlKT1cIm1vdXNlbGVhdmUoJGV2ZW50KVwiXG4gICAgPlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2Ryb3Bkb3duLWNvbnRlbnRdXCI+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZXM6IGBcbiAgICAuZHJvcGRvd24td3JhcHBlciB7XG4gICAgICB6LWluZGV4OiB2YXIoLS16LWRyb3Bkb3duLCAxMDApO1xuICAgIH1cbiAgYFxufSlcbmV4cG9ydCBjbGFzcyBEcm9wZG93bkNvbXBvbmVudCB7XG4gIGlzT3BlbiA9IHNpZ25hbChmYWxzZSk7XG4gIHBvc2l0aW9uID0gaW5wdXQ8UGxhY2VtZW50PignYm90dG9tLXN0YXJ0Jyk7XG4gIGF1dG9DbG9zZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgZGlzYWJsZWQgPSBpbnB1dDxib29sZWFuPigpO1xuXG4gIGRyb3Bkb3duID0gdmlld0NoaWxkPEVsZW1lbnRSZWY+KCdkcm9wZG93bldyYXBwZXInKTtcbiAgdHJpZ2dlciA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPigndHJpZ2dlcicpO1xuXG4gIHdpZHRoID0gc2lnbmFsPG51bWJlcj4oMCk7XG5cbiAgbW91c2VsZWF2ZShldmVudDogRXZlbnQpIHtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgdGhlIGRyb3Bkb3duIGNvbXBvbmVudCBhbmQgc2V0cyB1cCBhdXRvbWF0aWMgdXBkYXRlcyBmb3IgaXRzIHBvc2l0aW9uLlxuICAgKlxuICAgKiBUaGUgY29uc3RydWN0b3IgdXNlcyBgYWZ0ZXJOZXh0UmVuZGVyYCB0byBlbnN1cmUgdGhhdCB0aGUgRE9NIGVsZW1lbnRzIGFyZSBhdmFpbGFibGVcbiAgICogYmVmb3JlIGNhbGxpbmcgYGF1dG9VcGRhdGVgLiBUaGUgYGF1dG9VcGRhdGVgIGZ1bmN0aW9uIG1vbml0b3JzIHRoZSB0cmlnZ2VyIGFuZCBkcm9wZG93blxuICAgKiBlbGVtZW50cywgYW5kIGlmIHRoZSBkcm9wZG93biBpcyBvcGVuLCBpdCByZWNhbGN1bGF0ZXMgaXRzIHBvc2l0aW9uLlxuICAgKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICovXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGFmdGVyTmV4dFJlbmRlcigoKSA9PiB7XG4gICAgICBhdXRvVXBkYXRlKHRoaXMudHJpZ2dlcigpPy5uYXRpdmVFbGVtZW50LCB0aGlzLmRyb3Bkb3duKCk/Lm5hdGl2ZUVsZW1lbnQsICgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmlzT3BlbigpKSByZXR1cm47XG4gICAgICAgIHRoaXMuY2FsY3VsYXRlUG9zaXRpb24oKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cblxuICAvKipcbiAgICogVG9nZ2xlcyB0aGUgZHJvcGRvd24ncyBvcGVuIHN0YXRlLlxuICAgKiBJZiB0aGUgZHJvcGRvd24gaXMgZGlzYWJsZWQsIHRoZSBtZXRob2QgcmV0dXJucyBpbW1lZGlhdGVseSB3aXRob3V0IG1ha2luZyBhbnkgY2hhbmdlcy5cbiAgICogT3RoZXJ3aXNlLCBpdCB1cGRhdGVzIHRoZSBgaXNPcGVuYCBzdGF0ZSB0byBpdHMgb3Bwb3NpdGUgdmFsdWUgYW5kIHJlY2FsY3VsYXRlcyB0aGUgZHJvcGRvd24ncyBwb3NpdGlvbi5cbiAgICovXG4gIHRvZ2dsZSgpIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCgpKSByZXR1cm47XG4gICAgdGhpcy5pc09wZW4udXBkYXRlKCgpID0+ICF0aGlzLmlzT3BlbigpKTtcbiAgICB0aGlzLmNhbGN1bGF0ZVBvc2l0aW9uKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2VzIHRoZSBkcm9wZG93biBieSBzZXR0aW5nIHRoZSBgaXNPcGVuYCBzdGF0ZSB0byBgZmFsc2VgLlxuICAgKi9cbiAgY2xvc2UoKSB7XG4gICAgdGhpcy5pc09wZW4uc2V0KGZhbHNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIGFuZCBzZXRzIHRoZSBwb3NpdGlvbiBvZiB0aGUgZHJvcGRvd24gZWxlbWVudCByZWxhdGl2ZSB0byB0aGUgdHJpZ2dlciBlbGVtZW50LlxuICAgKiBVdGlsaXplcyB0aGUgYGNvbXB1dGVQb3NpdGlvbmAgZnVuY3Rpb24gd2l0aCBzcGVjaWZpZWQgbWlkZGxld2FyZSBmb3Igb2Zmc2V0LCBmbGlwLCBhbmQgc2hpZnQuXG4gICAqIFVwZGF0ZXMgdGhlIGRyb3Bkb3duJ3MgYGxlZnRgIGFuZCBgdG9wYCBzdHlsZXMgYmFzZWQgb24gdGhlIGNvbXB1dGVkIHBvc2l0aW9uLlxuICAgKiBBbHNvIHNldHMgdGhlIHdpZHRoIG9mIHRoZSBkcm9wZG93biB0byBtYXRjaCB0aGUgdHJpZ2dlciBlbGVtZW50J3Mgd2lkdGguXG4gICAqXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgY2FsY3VsYXRlUG9zaXRpb24oKSB7XG4gICAgY29tcHV0ZVBvc2l0aW9uKHRoaXMudHJpZ2dlcigpPy5uYXRpdmVFbGVtZW50LCB0aGlzLmRyb3Bkb3duKCk/Lm5hdGl2ZUVsZW1lbnQsIHtcbiAgICAgIHBsYWNlbWVudDogdGhpcy5wb3NpdGlvbigpLFxuICAgICAgbWlkZGxld2FyZTogW29mZnNldCg4KSwgZmxpcCgpLCBzaGlmdCgpXSxcbiAgICB9KS50aGVuKCh7IHgsIHkgfTogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9KSA9PiB7XG4gICAgICB0aGlzLmRyb3Bkb3duKCkhLm5hdGl2ZUVsZW1lbnQuc3R5bGUubGVmdCA9IHggKyAncHgnO1xuICAgICAgdGhpcy5kcm9wZG93bigpIS5uYXRpdmVFbGVtZW50LnN0eWxlLnRvcCA9IHkgKyAncHgnO1xuICAgICAgdGhpcy53aWR0aC5zZXQodGhpcy50cmlnZ2VyKCk/Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGgpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gT25jbGljayBvdXRzaWRlIHRoZSBkcm9wZG93biwgY2xvc2UgaXRcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snLCBbJyRldmVudCddKVxuICBjbGlja291dChldmVudDogRXZlbnQpIHtcbiAgICBpZiAoXG4gICAgICAvLyBDaGVjayBpZiB0aGUgY2xpY2sgd2FzIG91dHNpZGUgdGhlIGRyb3Bkb3duXG4gICAgICAvLyBhbmQgdGhlIGRyb3Bkb3duIGlzIG9wZW5cbiAgICAgIC8vIGFuZCB0aGUgY2xpY2sgd2FzIG5vdCBvbiB0aGUgYnV0dG9uXG4gICAgICAvLyB0aGVuIGNsb3NlIHRoZSBkcm9wZG93blxuICAgICAgIXRoaXMuZHJvcGRvd24oKT8ubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpXG4gICAgICAmJiB0aGlzLmlzT3BlblxuICAgICAgJiYgIXRoaXMudHJpZ2dlcigpPy5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldClcbiAgICApIHtcbiAgICAgIHRoaXMuaXNPcGVuLnNldChmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgdGhlIGNsaWNrIGV2ZW50IG9uIHRoZSBkcm9wZG93biBjb250ZW50LlxuICAgKiBJZiB0aGUgYGF1dG9DbG9zZWAgbWV0aG9kIHJldHVybnMgdHJ1ZSwgaXQgdHJpZ2dlcnMgdGhlIGBjbG9zZWAgbWV0aG9kIHRvIGNsb3NlIHRoZSBkcm9wZG93bi5cbiAgICovXG4gIGNvbnRlbnRDbGlja2VkKCkge1xuICAgIGlmICh0aGlzLmF1dG9DbG9zZSgpKSB0aGlzLmNsb3NlKCk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export * from "./dropdown";
|
|
2
|
+
export * from "./dropdown-input";
|
|
3
|
+
export * from "./dropdown-list";
|
|
4
|
+
export * from "./menu";
|
|
5
|
+
export * from "./metadata";
|
|
6
|
+
export * from "./theme";
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hdG9taWMtYW5ndWxhci9zcmMvbGliL2NvbXBvbmVudHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsUUFBUSxDQUFDO0FBQ3ZCLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vZHJvcGRvd25cIjtcclxuZXhwb3J0ICogZnJvbSBcIi4vZHJvcGRvd24taW5wdXRcIjtcclxuZXhwb3J0ICogZnJvbSBcIi4vZHJvcGRvd24tbGlzdFwiO1xyXG5leHBvcnQgKiBmcm9tIFwiLi9tZW51XCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL21ldGFkYXRhXCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL3RoZW1lXCI7XHJcblxyXG4iXX0=
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export * from './menu-item';
|
|
2
|
+
export * from './menu';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hdG9taWMtYW5ndWxhci9zcmMvbGliL2NvbXBvbmVudHMvbWVudS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbWVudS1pdGVtJztcbmV4cG9ydCAqIGZyb20gJy4vbWVudSc7XG4iXX0=
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { NgClass } from "@angular/common";
|
|
2
|
+
import { Component } from "@angular/core";
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "./menu";
|
|
5
|
+
export class MenuItemComponent {
|
|
6
|
+
constructor(menu) {
|
|
7
|
+
this.menu = menu;
|
|
8
|
+
}
|
|
9
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: MenuItemComponent, deps: [{ token: i1.MenuComponent }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
10
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.5", type: MenuItemComponent, isStandalone: true, selector: "sq-menu-item, menu-item, MenuItem", host: { classAttribute: "data-list-item flex gap-2 items-center justify-start py-2 px-4 text-sm cursor-pointer" }, ngImport: i0, template: `
|
|
11
|
+
<ng-content></ng-content>
|
|
12
|
+
`, isInline: true, styles: [":host[disabled]{cursor:default}\n"] }); }
|
|
13
|
+
}
|
|
14
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: MenuItemComponent, decorators: [{
|
|
15
|
+
type: Component,
|
|
16
|
+
args: [{ selector: "sq-menu-item, menu-item, MenuItem", standalone: true, imports: [NgClass], template: `
|
|
17
|
+
<ng-content></ng-content>
|
|
18
|
+
`, host: {
|
|
19
|
+
class: 'data-list-item flex gap-2 items-center justify-start py-2 px-4 text-sm cursor-pointer'
|
|
20
|
+
}, styles: [":host[disabled]{cursor:default}\n"] }]
|
|
21
|
+
}], ctorParameters: () => [{ type: i1.MenuComponent }] });
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS1pdGVtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXRvbWljLWFuZ3VsYXIvc3JjL2xpYi9jb21wb25lbnRzL21lbnUvbWVudS1pdGVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQUUsU0FBUyxFQUFnQyxNQUFNLGVBQWUsQ0FBQzs7O0FBbUJ4RSxNQUFNLE9BQU8saUJBQWlCO0lBQzVCLFlBQTRCLElBQW1CO1FBQW5CLFNBQUksR0FBSixJQUFJLENBQWU7SUFBRyxDQUFDOzhHQUR4QyxpQkFBaUI7a0dBQWpCLGlCQUFpQixnTkFabEI7O0NBRVg7OzJGQVVZLGlCQUFpQjtrQkFoQjdCLFNBQVM7K0JBQ0UsbUNBQW1DLGNBQ2pDLElBQUksV0FDUCxDQUFDLE9BQU8sQ0FBQyxZQUNSOztDQUVYLFFBQ087d0JBQ0osS0FBSyxFQUFFLHVGQUF1RjtxQkFDL0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ0NsYXNzIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIGNvbXB1dGVkLCBIb3N0QmluZGluZywgaW5wdXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBNZW51Q29tcG9uZW50IH0gZnJvbSBcIi4vbWVudVwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwic3EtbWVudS1pdGVtLCBtZW51LWl0ZW0sIE1lbnVJdGVtXCIsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbTmdDbGFzc10sXHJcbiAgdGVtcGxhdGU6IGBcclxuICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XHJcbmAsXHJcbiAgaG9zdDoge1xyXG4gICAgY2xhc3M6ICdkYXRhLWxpc3QtaXRlbSBmbGV4IGdhcC0yIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LXN0YXJ0IHB5LTIgcHgtNCB0ZXh0LXNtIGN1cnNvci1wb2ludGVyJ1xyXG4gIH0sXHJcbiAgc3R5bGVzOiBbYFxyXG4gICAgOmhvc3RbZGlzYWJsZWRdIHtcclxuICAgICAgY3Vyc29yOiBkZWZhdWx0O1xyXG4gICAgfVxyXG4gIGBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNZW51SXRlbUNvbXBvbmVudCB7XHJcbiAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IG1lbnU6IE1lbnVDb21wb25lbnQpIHt9XHJcbn0iXX0=
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { NgClass } from '@angular/common';
|
|
2
|
+
import { Component, HostListener, ViewEncapsulation, input, signal, viewChild } from '@angular/core';
|
|
3
|
+
import { autoUpdate, computePosition, flip, offset, shift } from '@floating-ui/dom';
|
|
4
|
+
import { cn } from '../../utils/tailwind-utils';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export class MenuComponent {
|
|
7
|
+
constructor() {
|
|
8
|
+
this.cn = cn;
|
|
9
|
+
this.default = "z-10 bg-white rounded-md border border-gray-300 shadow absolute text-sm";
|
|
10
|
+
this.isOpen = signal(false);
|
|
11
|
+
this.position = input('bottom-start');
|
|
12
|
+
this.className = input();
|
|
13
|
+
this.disabled = input();
|
|
14
|
+
this.autoClose = input(false);
|
|
15
|
+
this.dropdown = viewChild('dropdown');
|
|
16
|
+
this.trigger = viewChild('trigger');
|
|
17
|
+
this.width = signal(0);
|
|
18
|
+
}
|
|
19
|
+
ngAfterViewInit() {
|
|
20
|
+
autoUpdate(this.trigger()?.nativeElement, this.dropdown()?.nativeElement, () => {
|
|
21
|
+
if (!this.isOpen())
|
|
22
|
+
return;
|
|
23
|
+
this.calculatePosition();
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
toggle(e) {
|
|
27
|
+
e.stopPropagation();
|
|
28
|
+
if (this.disabled())
|
|
29
|
+
return;
|
|
30
|
+
this.isOpen.update(() => !this.isOpen());
|
|
31
|
+
this.calculatePosition();
|
|
32
|
+
}
|
|
33
|
+
close() {
|
|
34
|
+
this.isOpen.set(false);
|
|
35
|
+
}
|
|
36
|
+
calculatePosition() {
|
|
37
|
+
computePosition(this.trigger()?.nativeElement, this.dropdown()?.nativeElement, {
|
|
38
|
+
placement: this.position(),
|
|
39
|
+
middleware: [offset(8), flip(), shift()],
|
|
40
|
+
}).then(({ x, y }) => {
|
|
41
|
+
this.dropdown().nativeElement.style.left = x + 'px';
|
|
42
|
+
this.dropdown().nativeElement.style.top = y + 'px';
|
|
43
|
+
this.width.set(this.trigger()?.nativeElement.offsetWidth);
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
contentClicked(e) {
|
|
47
|
+
e.stopPropagation();
|
|
48
|
+
if (this.autoClose())
|
|
49
|
+
this.close();
|
|
50
|
+
}
|
|
51
|
+
// Onclick outside the dropdown, close it
|
|
52
|
+
clickout(event) {
|
|
53
|
+
if (!this.dropdown()?.nativeElement.contains(event.target) &&
|
|
54
|
+
this.isOpen &&
|
|
55
|
+
!this.trigger()?.nativeElement.contains(event.target)) {
|
|
56
|
+
this.isOpen.set(false);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: MenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
60
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.5", type: MenuComponent, isStandalone: true, selector: "sq-menu, Menu", inputs: { position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, className: { classPropertyName: "className", publicName: "className", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, autoClose: { classPropertyName: "autoClose", publicName: "autoClose", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "document:click": "clickout($event)" } }, viewQueries: [{ propertyName: "dropdown", first: true, predicate: ["dropdown"], descendants: true, isSignal: true }, { propertyName: "trigger", first: true, predicate: ["trigger"], descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
61
|
+
<div #trigger class="select-none" (click)="toggle($event)">
|
|
62
|
+
<ng-content></ng-content>
|
|
63
|
+
</div>
|
|
64
|
+
<div #dropdown
|
|
65
|
+
[ngClass]= "cn(default, className(), disabled() && 'disabled cursor-default opacity-50 hover:bg-transparent')"
|
|
66
|
+
[style.display]="isOpen() ? 'block' : 'none'"
|
|
67
|
+
[style.width]="width() + 'px'"
|
|
68
|
+
(click)="contentClicked($event)"
|
|
69
|
+
>
|
|
70
|
+
<ng-content select="[menu-content]"></ng-content>
|
|
71
|
+
</div>
|
|
72
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
73
|
+
}
|
|
74
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: MenuComponent, decorators: [{
|
|
75
|
+
type: Component,
|
|
76
|
+
args: [{
|
|
77
|
+
selector: 'sq-menu, Menu',
|
|
78
|
+
standalone: true,
|
|
79
|
+
imports: [NgClass],
|
|
80
|
+
encapsulation: ViewEncapsulation.None,
|
|
81
|
+
template: `
|
|
82
|
+
<div #trigger class="select-none" (click)="toggle($event)">
|
|
83
|
+
<ng-content></ng-content>
|
|
84
|
+
</div>
|
|
85
|
+
<div #dropdown
|
|
86
|
+
[ngClass]= "cn(default, className(), disabled() && 'disabled cursor-default opacity-50 hover:bg-transparent')"
|
|
87
|
+
[style.display]="isOpen() ? 'block' : 'none'"
|
|
88
|
+
[style.width]="width() + 'px'"
|
|
89
|
+
(click)="contentClicked($event)"
|
|
90
|
+
>
|
|
91
|
+
<ng-content select="[menu-content]"></ng-content>
|
|
92
|
+
</div>
|
|
93
|
+
`
|
|
94
|
+
}]
|
|
95
|
+
}], propDecorators: { clickout: [{
|
|
96
|
+
type: HostListener,
|
|
97
|
+
args: ['document:click', ['$event']]
|
|
98
|
+
}] } });
|
|
99
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2F0b21pYy1hbmd1bGFyL3NyYy9saWIvY29tcG9uZW50cy9tZW51L21lbnUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sRUFBaUIsU0FBUyxFQUFjLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoSSxPQUFPLEVBQWEsVUFBVSxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRS9GLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7QUFxQmhELE1BQU0sT0FBTyxhQUFhO0lBbkIxQjtRQW9CRSxPQUFFLEdBQUcsRUFBRSxDQUFDO1FBRVIsWUFBTyxHQUFHLHlFQUF5RSxDQUFBO1FBRW5GLFdBQU0sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkIsYUFBUSxHQUFHLEtBQUssQ0FBWSxjQUFjLENBQUMsQ0FBQztRQUM1QyxjQUFTLEdBQUcsS0FBSyxFQUFVLENBQUM7UUFDNUIsYUFBUSxHQUFHLEtBQUssRUFBVyxDQUFDO1FBQzVCLGNBQVMsR0FBRyxLQUFLLENBQVUsS0FBSyxDQUFDLENBQUM7UUFFbEMsYUFBUSxHQUFHLFNBQVMsQ0FBYSxVQUFVLENBQUMsQ0FBQztRQUM3QyxZQUFPLEdBQUcsU0FBUyxDQUFhLFNBQVMsQ0FBQyxDQUFDO1FBRTNDLFVBQUssR0FBRyxNQUFNLENBQVMsQ0FBQyxDQUFDLENBQUM7S0ErQzNCO0lBN0NDLGVBQWU7UUFDYixVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLGFBQWEsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBRTtZQUM3RSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFBRSxPQUFPO1lBQzNCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE1BQU0sQ0FBQyxDQUFRO1FBQ2IsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3BCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUFFLE9BQU87UUFDNUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsS0FBSztRQUNILElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxpQkFBaUI7UUFDZixlQUFlLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLGFBQWEsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsYUFBYSxFQUFFO1lBQzdFLFNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQzFCLFVBQVUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQztTQUN6QyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUE0QixFQUFFLEVBQUU7WUFDN0MsSUFBSSxDQUFDLFFBQVEsRUFBRyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDckQsSUFBSSxDQUFDLFFBQVEsRUFBRyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDcEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM1RCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxjQUFjLENBQUMsQ0FBUTtRQUNyQixDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDcEIsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3JDLENBQUM7SUFFRCx5Q0FBeUM7SUFFekMsUUFBUSxDQUFDLEtBQVk7UUFDbkIsSUFDRSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxhQUFhLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDdEQsSUFBSSxDQUFDLE1BQU07WUFDWCxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxhQUFhLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFDckQsQ0FBQztZQUNELElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pCLENBQUM7SUFDSCxDQUFDOzhHQTVEVSxhQUFhO2tHQUFiLGFBQWEseTNCQWRkOzs7Ozs7Ozs7Ozs7R0FZVCw0REFkUyxPQUFPOzsyRkFnQk4sYUFBYTtrQkFuQnpCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGVBQWU7b0JBQ3pCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUM7b0JBQ2xCLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO29CQUNyQyxRQUFRLEVBQUU7Ozs7Ozs7Ozs7OztHQVlUO2lCQUNGOzhCQXFEQyxRQUFRO3NCQURQLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ0NsYXNzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyLCBWaWV3RW5jYXBzdWxhdGlvbiwgaW5wdXQsIHNpZ25hbCwgdmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBQbGFjZW1lbnQsIGF1dG9VcGRhdGUsIGNvbXB1dGVQb3NpdGlvbiwgZmxpcCwgb2Zmc2V0LCBzaGlmdCB9IGZyb20gJ0BmbG9hdGluZy11aS9kb20nO1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJy4uLy4uL3V0aWxzL3RhaWx3aW5kLXV0aWxzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3EtbWVudSwgTWVudScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtOZ0NsYXNzXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2ICN0cmlnZ2VyIGNsYXNzPVwic2VsZWN0LW5vbmVcIiAoY2xpY2spPVwidG9nZ2xlKCRldmVudClcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgI2Ryb3Bkb3duXG4gICAgICBbbmdDbGFzc109IFwiY24oZGVmYXVsdCwgY2xhc3NOYW1lKCksIGRpc2FibGVkKCkgJiYgJ2Rpc2FibGVkIGN1cnNvci1kZWZhdWx0IG9wYWNpdHktNTAgaG92ZXI6YmctdHJhbnNwYXJlbnQnKVwiXG4gICAgICBbc3R5bGUuZGlzcGxheV09XCJpc09wZW4oKSA/ICdibG9jaycgOiAnbm9uZSdcIlxuICAgICAgW3N0eWxlLndpZHRoXT1cIndpZHRoKCkgKyAncHgnXCJcbiAgICAgIChjbGljayk9XCJjb250ZW50Q2xpY2tlZCgkZXZlbnQpXCJcbiAgICA+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbbWVudS1jb250ZW50XVwiPjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cbiAgYFxufSlcbmV4cG9ydCBjbGFzcyBNZW51Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gIGNuID0gY247XG5cbiAgZGVmYXVsdCA9IFwiei0xMCBiZy13aGl0ZSByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItZ3JheS0zMDAgc2hhZG93IGFic29sdXRlIHRleHQtc21cIlxuXG4gIGlzT3BlbiA9IHNpZ25hbChmYWxzZSk7XG4gIHBvc2l0aW9uID0gaW5wdXQ8UGxhY2VtZW50PignYm90dG9tLXN0YXJ0Jyk7XG4gIGNsYXNzTmFtZSA9IGlucHV0PHN0cmluZz4oKTtcbiAgZGlzYWJsZWQgPSBpbnB1dDxib29sZWFuPigpO1xuICBhdXRvQ2xvc2UgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG5cbiAgZHJvcGRvd24gPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZj4oJ2Ryb3Bkb3duJyk7XG4gIHRyaWdnZXIgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZj4oJ3RyaWdnZXInKTtcblxuICB3aWR0aCA9IHNpZ25hbDxudW1iZXI+KDApO1xuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBhdXRvVXBkYXRlKHRoaXMudHJpZ2dlcigpPy5uYXRpdmVFbGVtZW50LCB0aGlzLmRyb3Bkb3duKCk/Lm5hdGl2ZUVsZW1lbnQsICgpID0+IHtcbiAgICAgIGlmICghdGhpcy5pc09wZW4oKSkgcmV0dXJuO1xuICAgICAgdGhpcy5jYWxjdWxhdGVQb3NpdGlvbigpO1xuICAgIH0pO1xuICB9XG5cbiAgdG9nZ2xlKGU6IEV2ZW50KSB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCgpKSByZXR1cm47XG4gICAgdGhpcy5pc09wZW4udXBkYXRlKCgpID0+ICF0aGlzLmlzT3BlbigpKTtcbiAgICB0aGlzLmNhbGN1bGF0ZVBvc2l0aW9uKCk7XG4gIH1cblxuICBjbG9zZSgpIHtcbiAgICB0aGlzLmlzT3Blbi5zZXQoZmFsc2UpO1xuICB9XG5cbiAgY2FsY3VsYXRlUG9zaXRpb24oKSB7XG4gICAgY29tcHV0ZVBvc2l0aW9uKHRoaXMudHJpZ2dlcigpPy5uYXRpdmVFbGVtZW50LCB0aGlzLmRyb3Bkb3duKCk/Lm5hdGl2ZUVsZW1lbnQsIHtcbiAgICAgIHBsYWNlbWVudDogdGhpcy5wb3NpdGlvbigpLFxuICAgICAgbWlkZGxld2FyZTogW29mZnNldCg4KSwgZmxpcCgpLCBzaGlmdCgpXSxcbiAgICB9KS50aGVuKCh7IHgsIHkgfTogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9KSA9PiB7XG4gICAgICB0aGlzLmRyb3Bkb3duKCkhLm5hdGl2ZUVsZW1lbnQuc3R5bGUubGVmdCA9IHggKyAncHgnO1xuICAgICAgdGhpcy5kcm9wZG93bigpIS5uYXRpdmVFbGVtZW50LnN0eWxlLnRvcCA9IHkgKyAncHgnO1xuICAgICAgdGhpcy53aWR0aC5zZXQodGhpcy50cmlnZ2VyKCk/Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGgpO1xuICAgIH0pO1xuICB9XG5cbiAgY29udGVudENsaWNrZWQoZTogRXZlbnQpIHtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGlmICh0aGlzLmF1dG9DbG9zZSgpKSB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICAvLyBPbmNsaWNrIG91dHNpZGUgdGhlIGRyb3Bkb3duLCBjbG9zZSBpdFxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50J10pXG4gIGNsaWNrb3V0KGV2ZW50OiBFdmVudCkge1xuICAgIGlmIChcbiAgICAgICF0aGlzLmRyb3Bkb3duKCk/Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSAmJlxuICAgICAgdGhpcy5pc09wZW4gJiZcbiAgICAgICF0aGlzLnRyaWdnZXIoKT8ubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpXG4gICAgKSB7XG4gICAgICB0aGlzLmlzT3Blbi5zZXQoZmFsc2UpO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export * from './metadata.component';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hdG9taWMtYW5ndWxhci9zcmMvbGliL2NvbXBvbmVudHMvbWV0YWRhdGEvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxzQkFBc0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbWV0YWRhdGEuY29tcG9uZW50JztcbiJdfQ==
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { NgClass } from "@angular/common";
|
|
2
|
+
import { Component, computed, input, output } from "@angular/core";
|
|
3
|
+
import { getMetadata } from "@sinequa/atomic";
|
|
4
|
+
import { cn } from "../../utils/tailwind-utils";
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export class MetadataComponent {
|
|
7
|
+
constructor() {
|
|
8
|
+
this.cn = cn;
|
|
9
|
+
this.default = "text-ellipsis";
|
|
10
|
+
this.override = input(false);
|
|
11
|
+
this.className = input();
|
|
12
|
+
this.article = input.required();
|
|
13
|
+
this.metadata = input.required();
|
|
14
|
+
this.onMetadataClick = output();
|
|
15
|
+
this.items = computed(() => getMetadata(this.article(), this.metadata()));
|
|
16
|
+
}
|
|
17
|
+
onClick(event, item) {
|
|
18
|
+
event.stopPropagation();
|
|
19
|
+
this.onMetadataClick.emit(item);
|
|
20
|
+
}
|
|
21
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: MetadataComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
22
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.5", type: MetadataComponent, isStandalone: true, selector: "sq-metadata, Metadata", inputs: { override: { classPropertyName: "override", publicName: "override", isSignal: true, isRequired: false, transformFunction: null }, className: { classPropertyName: "className", publicName: "className", isSignal: true, isRequired: false, transformFunction: null }, article: { classPropertyName: "article", publicName: "article", isSignal: true, isRequired: true, transformFunction: null }, metadata: { classPropertyName: "metadata", publicName: "metadata", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { onMetadataClick: "onMetadataClick" }, host: { properties: { "class.hidden": "items().length === 0" } }, exportAs: ["metadata"], ngImport: i0, template: `
|
|
23
|
+
|
|
24
|
+
@if(override()) {
|
|
25
|
+
<ng-content></ng-content>
|
|
26
|
+
}
|
|
27
|
+
@else {
|
|
28
|
+
<ng-content select="[before]"></ng-content>
|
|
29
|
+
@for(item of items(); track $index) {
|
|
30
|
+
@if(item.display) {
|
|
31
|
+
<span [ngClass]="cn(default, className())" (click)="onClick($event, {field: this.metadata() ,value: item.display })">{{ item.display }}</span>
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
<ng-content select="[after]"></ng-content>
|
|
35
|
+
}
|
|
36
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); }
|
|
37
|
+
}
|
|
38
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: MetadataComponent, decorators: [{
|
|
39
|
+
type: Component,
|
|
40
|
+
args: [{
|
|
41
|
+
selector: 'sq-metadata, Metadata',
|
|
42
|
+
exportAs: 'metadata',
|
|
43
|
+
standalone: true,
|
|
44
|
+
imports: [NgClass],
|
|
45
|
+
template: `
|
|
46
|
+
|
|
47
|
+
@if(override()) {
|
|
48
|
+
<ng-content></ng-content>
|
|
49
|
+
}
|
|
50
|
+
@else {
|
|
51
|
+
<ng-content select="[before]"></ng-content>
|
|
52
|
+
@for(item of items(); track $index) {
|
|
53
|
+
@if(item.display) {
|
|
54
|
+
<span [ngClass]="cn(default, className())" (click)="onClick($event, {field: this.metadata() ,value: item.display })">{{ item.display }}</span>
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
<ng-content select="[after]"></ng-content>
|
|
58
|
+
}
|
|
59
|
+
`,
|
|
60
|
+
host: {
|
|
61
|
+
'[class.hidden]': 'items().length === 0'
|
|
62
|
+
}
|
|
63
|
+
}]
|
|
64
|
+
}] });
|
|
65
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0YWRhdGEuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXRvbWljLWFuZ3VsYXIvc3JjL2xpYi9jb21wb25lbnRzL21ldGFkYXRhL21ldGFkYXRhLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQWtCLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7QUEwQmhELE1BQU0sT0FBTyxpQkFBaUI7SUF4QjlCO1FBeUJFLE9BQUUsR0FBRyxFQUFFLENBQUM7UUFDUixZQUFPLEdBQUcsZUFBZSxDQUFDO1FBRTFCLGFBQVEsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEIsY0FBUyxHQUFHLEtBQUssRUFBVSxDQUFDO1FBQzVCLFlBQU8sR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFzRCxDQUFDO1FBQy9FLGFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFvRCxDQUFDO1FBRTlFLG9CQUFlLEdBQUcsTUFBTSxFQUFvQyxDQUFDO1FBRTdELFVBQUssR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBTXRFO0lBSkMsT0FBTyxDQUFDLEtBQWlCLEVBQUUsSUFBc0M7UUFDL0QsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xDLENBQUM7OEdBaEJVLGlCQUFpQjtrR0FBakIsaUJBQWlCLDB1QkFuQmxCOzs7Ozs7Ozs7Ozs7OztHQWNULDREQWZTLE9BQU87OzJGQW9CTixpQkFBaUI7a0JBeEI3QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSx1QkFBdUI7b0JBQ2pDLFFBQVEsRUFBRSxVQUFVO29CQUNwQixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDO29CQUNsQixRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7O0dBY1Q7b0JBQ0QsSUFBSSxFQUFFO3dCQUNKLGdCQUFnQixFQUFFLHNCQUFzQjtxQkFDekM7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ0NsYXNzIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIGNvbXB1dGVkLCBpbnB1dCwgb3V0cHV0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgQXJ0aWNsZSwgS2V5T2YsIGdldE1ldGFkYXRhIH0gZnJvbSBcIkBzaW5lcXVhL2F0b21pY1wiO1xyXG5pbXBvcnQgeyBjbiB9IGZyb20gXCIuLi8uLi91dGlscy90YWlsd2luZC11dGlsc1wiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzcS1tZXRhZGF0YSwgTWV0YWRhdGEnLFxyXG4gIGV4cG9ydEFzOiAnbWV0YWRhdGEnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW05nQ2xhc3NdLFxyXG4gIHRlbXBsYXRlOiBgXHJcblxyXG4gIEBpZihvdmVycmlkZSgpKSB7XHJcbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XHJcbiAgfVxyXG4gIEBlbHNlIHtcclxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltiZWZvcmVdXCI+PC9uZy1jb250ZW50PlxyXG4gICAgQGZvcihpdGVtIG9mIGl0ZW1zKCk7IHRyYWNrICRpbmRleCkge1xyXG4gICAgICBAaWYoaXRlbS5kaXNwbGF5KSB7XHJcbiAgICAgICAgPHNwYW4gW25nQ2xhc3NdPVwiY24oZGVmYXVsdCwgY2xhc3NOYW1lKCkpXCIgKGNsaWNrKT1cIm9uQ2xpY2soJGV2ZW50LCB7ZmllbGQ6IHRoaXMubWV0YWRhdGEoKSAsdmFsdWU6IGl0ZW0uZGlzcGxheSB9KVwiPnt7IGl0ZW0uZGlzcGxheSB9fTwvc3Bhbj5cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2FmdGVyXVwiPjwvbmctY29udGVudD5cclxuICB9XHJcbiAgYCxcclxuICBob3N0OiB7XHJcbiAgICAnW2NsYXNzLmhpZGRlbl0nOiAnaXRlbXMoKS5sZW5ndGggPT09IDAnXHJcbiAgfVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTWV0YWRhdGFDb21wb25lbnQge1xyXG4gIGNuID0gY247XHJcbiAgZGVmYXVsdCA9IFwidGV4dC1lbGxpcHNpc1wiO1xyXG5cclxuICBvdmVycmlkZSA9IGlucHV0KGZhbHNlKTtcclxuICBjbGFzc05hbWUgPSBpbnB1dDxzdHJpbmc+KCk7XHJcbiAgYXJ0aWNsZSA9IGlucHV0LnJlcXVpcmVkPFBhcnRpYWw8QXJ0aWNsZT4gfCAoc3RyaW5nICYgUmVjb3JkPG5ldmVyLCBuZXZlcj4pPigpO1xyXG4gIG1ldGFkYXRhID0gaW5wdXQucmVxdWlyZWQ8S2V5T2Y8QXJ0aWNsZT4gfCAoc3RyaW5nICYgUmVjb3JkPG5ldmVyLCBuZXZlcj4pPigpO1xyXG5cclxuICBvbk1ldGFkYXRhQ2xpY2sgPSBvdXRwdXQ8eyBmaWVsZDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIH0+KCk7XHJcblxyXG4gIGl0ZW1zID0gY29tcHV0ZWQoKCkgPT4gZ2V0TWV0YWRhdGEodGhpcy5hcnRpY2xlKCksIHRoaXMubWV0YWRhdGEoKSkpO1xyXG5cclxuICBvbkNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50LCBpdGVtOiB7IGZpZWxkOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfSkge1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB0aGlzLm9uTWV0YWRhdGFDbGljay5lbWl0KGl0ZW0pO1xyXG4gIH1cclxufSJdfQ==
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export * from './theme-selector.component';
|
|
2
|
+
export * from './theme-toggle.component';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hdG9taWMtYW5ndWxhci9zcmMvbGliL2NvbXBvbmVudHMvdGhlbWUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLDBCQUEwQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi90aGVtZS1zZWxlY3Rvci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi90aGVtZS10b2dnbGUuY29tcG9uZW50JztcblxuIl19
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { Component, computed, effect, inject, input, model } from '@angular/core';
|
|
2
|
+
import { NgStyle } from '@angular/common';
|
|
3
|
+
import { THEMES } from '../../resources';
|
|
4
|
+
import { ThemeStore } from '../../stores';
|
|
5
|
+
import { MenuComponent } from '../menu';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
export class ThemeSelectorComponent {
|
|
8
|
+
constructor() {
|
|
9
|
+
this.scope = input.required();
|
|
10
|
+
this.showPrivate = input(false);
|
|
11
|
+
this.themes = computed(() => THEMES.filter(theme => this.showPrivate() ? true : !theme.private));
|
|
12
|
+
this.selectedTheme = model();
|
|
13
|
+
this.themeStore = inject(ThemeStore);
|
|
14
|
+
effect(() => {
|
|
15
|
+
const currentTheme = this.themeStore.scopes()[this.scope()];
|
|
16
|
+
if (!currentTheme)
|
|
17
|
+
return;
|
|
18
|
+
this.selectedTheme.set(this.themeStore.scopes()[this.scope()].themeName);
|
|
19
|
+
}, { allowSignalWrites: true });
|
|
20
|
+
}
|
|
21
|
+
selectTheme(theme) {
|
|
22
|
+
if (typeof theme !== 'string')
|
|
23
|
+
theme = theme.name;
|
|
24
|
+
this.themeStore.setCurrentTheme(this.scope(), theme);
|
|
25
|
+
}
|
|
26
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: ThemeSelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
27
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.5", type: ThemeSelectorComponent, isStandalone: true, selector: "theme-selector", inputs: { scope: { classPropertyName: "scope", publicName: "scope", isSignal: true, isRequired: true, transformFunction: null }, showPrivate: { classPropertyName: "showPrivate", publicName: "showPrivate", isSignal: true, isRequired: false, transformFunction: null }, selectedTheme: { classPropertyName: "selectedTheme", publicName: "selectedTheme", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectedTheme: "selectedThemeChange" }, ngImport: i0, template: `
|
|
28
|
+
<sq-menu>
|
|
29
|
+
<ng-content></ng-content>
|
|
30
|
+
|
|
31
|
+
<div menu-content>
|
|
32
|
+
<ul class="p-2 flex flex-col gap-1 divide-y">
|
|
33
|
+
@for (theme of themes(); track $index) {
|
|
34
|
+
<li class="p-2" (click)="selectTheme(theme)">
|
|
35
|
+
<div class="flex gap-2 items-baseline">
|
|
36
|
+
<span class="size-3 rounded-full" [ngStyle]="{ 'background-color': 'hsl(' + theme.colors.primary + ')' }" aria-hidden="true"></span>
|
|
37
|
+
<span>{{ theme.name }}</span>
|
|
38
|
+
</div>
|
|
39
|
+
</li>
|
|
40
|
+
}
|
|
41
|
+
</ul>
|
|
42
|
+
</div>
|
|
43
|
+
</sq-menu>
|
|
44
|
+
`, isInline: true, styles: [""], dependencies: [{ kind: "component", type: MenuComponent, selector: "sq-menu, Menu", inputs: ["position", "className", "disabled", "autoClose"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] }); }
|
|
45
|
+
}
|
|
46
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: ThemeSelectorComponent, decorators: [{
|
|
47
|
+
type: Component,
|
|
48
|
+
args: [{ selector: 'theme-selector', standalone: true, imports: [MenuComponent, NgStyle], template: `
|
|
49
|
+
<sq-menu>
|
|
50
|
+
<ng-content></ng-content>
|
|
51
|
+
|
|
52
|
+
<div menu-content>
|
|
53
|
+
<ul class="p-2 flex flex-col gap-1 divide-y">
|
|
54
|
+
@for (theme of themes(); track $index) {
|
|
55
|
+
<li class="p-2" (click)="selectTheme(theme)">
|
|
56
|
+
<div class="flex gap-2 items-baseline">
|
|
57
|
+
<span class="size-3 rounded-full" [ngStyle]="{ 'background-color': 'hsl(' + theme.colors.primary + ')' }" aria-hidden="true"></span>
|
|
58
|
+
<span>{{ theme.name }}</span>
|
|
59
|
+
</div>
|
|
60
|
+
</li>
|
|
61
|
+
}
|
|
62
|
+
</ul>
|
|
63
|
+
</div>
|
|
64
|
+
</sq-menu>
|
|
65
|
+
` }]
|
|
66
|
+
}], ctorParameters: () => [] });
|
|
67
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhlbWUtc2VsZWN0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXRvbWljLWFuZ3VsYXIvc3JjL2xpYi9jb21wb25lbnRzL3RoZW1lL3RoZW1lLXNlbGVjdG9yLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbEYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sRUFBUyxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxTQUFTLENBQUM7O0FBMEJ4QyxNQUFNLE9BQU8sc0JBQXNCO0lBUWpDO1FBUFMsVUFBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQVUsQ0FBQztRQUNqQyxnQkFBVyxHQUFHLEtBQUssQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUVwQyxXQUFNLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUM1RixrQkFBYSxHQUFHLEtBQUssRUFBc0IsQ0FBQztRQUM1QyxlQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBR3ZDLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDVixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBRTVELElBQUksQ0FBQyxZQUFZO2dCQUFFLE9BQU87WUFFMUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMzRSxDQUFDLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFJTSxXQUFXLENBQUMsS0FBcUI7UUFDdEMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO1lBQzNCLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBRXJCLElBQUksQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN2RCxDQUFDOzhHQXpCVSxzQkFBc0I7a0dBQXRCLHNCQUFzQiwwaEJBcEJ2Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQlQsMEVBbEJTLGFBQWEsc0hBQUUsT0FBTzs7MkZBcUJyQixzQkFBc0I7a0JBeEJsQyxTQUFTOytCQUNFLGdCQUFnQixjQUNkLElBQUksV0FDUCxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUMsWUFDdkI7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJUIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBjb21wdXRlZCwgZWZmZWN0LCBpbmplY3QsIGlucHV0LCBtb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBOZ1N0eWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFRoZW1lLCBUSEVNRVMgfSBmcm9tICcuLi8uLi9yZXNvdXJjZXMnO1xuaW1wb3J0IHsgVGhlbWVTdG9yZSB9IGZyb20gJy4uLy4uL3N0b3Jlcyc7XG5pbXBvcnQgeyBNZW51Q29tcG9uZW50IH0gZnJvbSAnLi4vbWVudSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RoZW1lLXNlbGVjdG9yJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW01lbnVDb21wb25lbnQsIE5nU3R5bGVdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxzcS1tZW51PlxuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgXG4gICAgICA8ZGl2IG1lbnUtY29udGVudD5cbiAgICAgICAgPHVsIGNsYXNzPVwicC0yIGZsZXggZmxleC1jb2wgZ2FwLTEgZGl2aWRlLXlcIj5cbiAgICAgICAgICBAZm9yICh0aGVtZSBvZiB0aGVtZXMoKTsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICA8bGkgY2xhc3M9XCJwLTJcIiAoY2xpY2spPVwic2VsZWN0VGhlbWUodGhlbWUpXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC0yIGl0ZW1zLWJhc2VsaW5lXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzaXplLTMgcm91bmRlZC1mdWxsXCIgW25nU3R5bGVdPVwieyAnYmFja2dyb3VuZC1jb2xvcic6ICdoc2woJyArIHRoZW1lLmNvbG9ycy5wcmltYXJ5ICsgJyknIH1cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgdGhlbWUubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICAgIH1cbiAgICAgICAgPC91bD5cbiAgICAgIDwvZGl2PlxuICAgIDwvc3EtbWVudT5cbiAgYCxcbiAgc3R5bGVzOiBgYFxufSlcbmV4cG9ydCBjbGFzcyBUaGVtZVNlbGVjdG9yQ29tcG9uZW50IHtcbiAgcmVhZG9ubHkgc2NvcGUgPSBpbnB1dC5yZXF1aXJlZDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IHNob3dQcml2YXRlID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIHJlYWRvbmx5IHRoZW1lcyA9IGNvbXB1dGVkKCgpID0+IFRIRU1FUy5maWx0ZXIodGhlbWUgPT4gdGhpcy5zaG93UHJpdmF0ZSgpID8gdHJ1ZSA6ICF0aGVtZS5wcml2YXRlKSk7XG4gIHJlYWRvbmx5IHNlbGVjdGVkVGhlbWUgPSBtb2RlbDxzdHJpbmcgfCB1bmRlZmluZWQ+KCk7XG4gIHJlYWRvbmx5IHRoZW1lU3RvcmUgPSBpbmplY3QoVGhlbWVTdG9yZSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnRUaGVtZSA9IHRoaXMudGhlbWVTdG9yZS5zY29wZXMoKVt0aGlzLnNjb3BlKCldO1xuXG4gICAgICBpZiAoIWN1cnJlbnRUaGVtZSkgcmV0dXJuO1xuXG4gICAgICB0aGlzLnNlbGVjdGVkVGhlbWUuc2V0KHRoaXMudGhlbWVTdG9yZS5zY29wZXMoKVt0aGlzLnNjb3BlKCldLnRoZW1lTmFtZSk7XG4gICAgfSwgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3RUaGVtZSh0aGVtZTogc3RyaW5nKTogdm9pZDtcbiAgcHVibGljIHNlbGVjdFRoZW1lKHRoZW1lOiBUaGVtZSk6IHZvaWQ7XG4gIHB1YmxpYyBzZWxlY3RUaGVtZSh0aGVtZTogVGhlbWUgfCBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodHlwZW9mIHRoZW1lICE9PSAnc3RyaW5nJylcbiAgICAgIHRoZW1lID0gdGhlbWUubmFtZTtcblxuICAgIHRoaXMudGhlbWVTdG9yZS5zZXRDdXJyZW50VGhlbWUodGhpcy5zY29wZSgpLCB0aGVtZSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { Component, effect, inject, input, model } from '@angular/core';
|
|
2
|
+
import { FormsModule } from '@angular/forms';
|
|
3
|
+
import { ThemeStore } from '../../stores';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@angular/forms";
|
|
6
|
+
export class ThemeToggleComponent {
|
|
7
|
+
constructor() {
|
|
8
|
+
this.scope = input.required();
|
|
9
|
+
this.darkMode = model();
|
|
10
|
+
this.themeStore = inject(ThemeStore);
|
|
11
|
+
effect(() => {
|
|
12
|
+
const currentTheme = this.themeStore.scopes()[this.scope()];
|
|
13
|
+
if (!currentTheme)
|
|
14
|
+
return;
|
|
15
|
+
this.darkMode.set(currentTheme.darkMode ?? false);
|
|
16
|
+
}, { allowSignalWrites: true });
|
|
17
|
+
}
|
|
18
|
+
toggleDarkMode(status) {
|
|
19
|
+
const scope = this.themeStore.scopes()?.[this.scope()];
|
|
20
|
+
if (!scope || !scope.cssVars)
|
|
21
|
+
return;
|
|
22
|
+
this.themeStore.setDarkMode(this.scope(), status);
|
|
23
|
+
}
|
|
24
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: ThemeToggleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
25
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.5", type: ThemeToggleComponent, isStandalone: true, selector: "theme-toggle", inputs: { scope: { classPropertyName: "scope", publicName: "scope", isSignal: true, isRequired: true, transformFunction: null }, darkMode: { classPropertyName: "darkMode", publicName: "darkMode", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { darkMode: "darkModeChange" }, ngImport: i0, template: `
|
|
26
|
+
<label class="flex gap-2 items-center select-none cursor-pointer">
|
|
27
|
+
@if (darkMode()) {
|
|
28
|
+
<i class="fa-fw far fa-toggle-large-on text-primary"></i>
|
|
29
|
+
}
|
|
30
|
+
@else {
|
|
31
|
+
<i class="fa-fw far fa-toggle-large-on fa-flip-horizontal"></i>
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
<span>Dark mode</span>
|
|
35
|
+
|
|
36
|
+
<input
|
|
37
|
+
type="checkbox"
|
|
38
|
+
class="hidden"
|
|
39
|
+
[(ngModel)]="darkMode"
|
|
40
|
+
(ngModelChange)="toggleDarkMode($event)"
|
|
41
|
+
/>
|
|
42
|
+
</label>
|
|
43
|
+
`, isInline: true, styles: [""], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] }); }
|
|
44
|
+
}
|
|
45
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: ThemeToggleComponent, decorators: [{
|
|
46
|
+
type: Component,
|
|
47
|
+
args: [{ selector: 'theme-toggle', standalone: true, imports: [FormsModule], template: `
|
|
48
|
+
<label class="flex gap-2 items-center select-none cursor-pointer">
|
|
49
|
+
@if (darkMode()) {
|
|
50
|
+
<i class="fa-fw far fa-toggle-large-on text-primary"></i>
|
|
51
|
+
}
|
|
52
|
+
@else {
|
|
53
|
+
<i class="fa-fw far fa-toggle-large-on fa-flip-horizontal"></i>
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
<span>Dark mode</span>
|
|
57
|
+
|
|
58
|
+
<input
|
|
59
|
+
type="checkbox"
|
|
60
|
+
class="hidden"
|
|
61
|
+
[(ngModel)]="darkMode"
|
|
62
|
+
(ngModelChange)="toggleDarkMode($event)"
|
|
63
|
+
/>
|
|
64
|
+
</label>
|
|
65
|
+
` }]
|
|
66
|
+
}], ctorParameters: () => [] });
|
|
67
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhlbWUtdG9nZ2xlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2F0b21pYy1hbmd1bGFyL3NyYy9saWIvY29tcG9uZW50cy90aGVtZS90aGVtZS10b2dnbGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFDOzs7QUEyQjFDLE1BQU0sT0FBTyxvQkFBb0I7SUFPL0I7UUFOUyxVQUFLLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBVSxDQUFDO1FBRWpDLGFBQVEsR0FBRyxLQUFLLEVBQVcsQ0FBQztRQUVwQixlQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRy9DLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDVixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBRTVELElBQUksQ0FBQyxZQUFZO2dCQUFFLE9BQU87WUFFMUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsQ0FBQztRQUNwRCxDQUFDLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFTSxjQUFjLENBQUMsTUFBZTtRQUNuQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFFdkQsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPO1lBQUUsT0FBTztRQUVyQyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDcEQsQ0FBQzs4R0F2QlUsb0JBQW9CO2tHQUFwQixvQkFBb0IscVhBckJyQjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JULHlFQW5CUyxXQUFXOzsyRkFzQlYsb0JBQW9CO2tCQXpCaEMsU0FBUzsrQkFDRSxjQUFjLGNBQ1osSUFBSSxXQUNQLENBQUMsV0FBVyxDQUFDLFlBQ1o7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCVCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgZWZmZWN0LCBpbmplY3QsIGlucHV0LCBtb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IFRoZW1lU3RvcmUgfSBmcm9tICcuLi8uLi9zdG9yZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0aGVtZS10b2dnbGUnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbRm9ybXNNb2R1bGVdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxsYWJlbCBjbGFzcz1cImZsZXggZ2FwLTIgaXRlbXMtY2VudGVyIHNlbGVjdC1ub25lIGN1cnNvci1wb2ludGVyXCI+XG4gICAgICBAaWYgKGRhcmtNb2RlKCkpIHtcbiAgICAgICAgPGkgY2xhc3M9XCJmYS1mdyBmYXIgZmEtdG9nZ2xlLWxhcmdlLW9uIHRleHQtcHJpbWFyeVwiPjwvaT5cbiAgICAgIH0gXG4gICAgICBAZWxzZSB7XG4gICAgICAgIDxpIGNsYXNzPVwiZmEtZncgZmFyIGZhLXRvZ2dsZS1sYXJnZS1vbiBmYS1mbGlwLWhvcml6b250YWxcIj48L2k+XG4gICAgICB9XG4gICAgXG4gICAgICA8c3Bhbj5EYXJrIG1vZGU8L3NwYW4+XG5cbiAgICAgIDxpbnB1dFxuICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICBjbGFzcz1cImhpZGRlblwiXG4gICAgICAgIFsobmdNb2RlbCldPVwiZGFya01vZGVcIlxuICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ0b2dnbGVEYXJrTW9kZSgkZXZlbnQpXCJcbiAgICAgIC8+XG4gICAgPC9sYWJlbD5cbiAgYCxcbiAgc3R5bGVzOiBgYFxufSlcbmV4cG9ydCBjbGFzcyBUaGVtZVRvZ2dsZUNvbXBvbmVudCB7XG4gIHJlYWRvbmx5IHNjb3BlID0gaW5wdXQucmVxdWlyZWQ8c3RyaW5nPigpO1xuXG4gIHJlYWRvbmx5IGRhcmtNb2RlID0gbW9kZWw8Ym9vbGVhbj4oKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHRoZW1lU3RvcmUgPSBpbmplY3QoVGhlbWVTdG9yZSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnRUaGVtZSA9IHRoaXMudGhlbWVTdG9yZS5zY29wZXMoKVt0aGlzLnNjb3BlKCldO1xuXG4gICAgICBpZiAoIWN1cnJlbnRUaGVtZSkgcmV0dXJuO1xuXG4gICAgICB0aGlzLmRhcmtNb2RlLnNldChjdXJyZW50VGhlbWUuZGFya01vZGUgPz8gZmFsc2UpO1xuICAgIH0sIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSk7XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlRGFya01vZGUoc3RhdHVzOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3Qgc2NvcGUgPSB0aGlzLnRoZW1lU3RvcmUuc2NvcGVzKCk/Llt0aGlzLnNjb3BlKCldO1xuXG4gICAgaWYgKCFzY29wZSB8fCAhc2NvcGUuY3NzVmFycykgcmV0dXJuO1xuXG4gICAgdGhpcy50aGVtZVN0b3JlLnNldERhcmtNb2RlKHRoaXMuc2NvcGUoKSwgc3RhdHVzKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export * from './infinite-scroll.directive';
|
|
2
|
+
export * from './select-article-on-click.directive';
|
|
3
|
+
export * from './show-bookmark.directive';
|
|
4
|
+
export * from './theme-provider.directive';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hdG9taWMtYW5ndWxhci9zcmMvbGliL2RpcmVjdGl2ZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyw0QkFBNEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vaW5maW5pdGUtc2Nyb2xsLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL3NlbGVjdC1hcnRpY2xlLW9uLWNsaWNrLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL3Nob3ctYm9va21hcmsuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vdGhlbWUtcHJvdmlkZXIuZGlyZWN0aXZlJztcblxuIl19
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { afterNextRender, Directive, input, output } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
/**
|
|
4
|
+
* Represents a directive that enables infinite scrolling behavior.
|
|
5
|
+
* This directive listens for the intersection of the element with the viewport
|
|
6
|
+
* and emits a `loadMore` event when the element becomes visible.
|
|
7
|
+
*
|
|
8
|
+
* @remarks
|
|
9
|
+
* This directive requires the `IntersectionObserver` API to be available in the browser.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```html
|
|
13
|
+
* <div infinityScroll (onScroll)="loadMore()">
|
|
14
|
+
* <!-- Content to be scrolled -->
|
|
15
|
+
* </div>
|
|
16
|
+
* ```
|
|
17
|
+
*
|
|
18
|
+
*/
|
|
19
|
+
export class InfinityScrollDirective {
|
|
20
|
+
constructor(el) {
|
|
21
|
+
this.el = el;
|
|
22
|
+
this.options = input({ root: null });
|
|
23
|
+
this.onScroll = output();
|
|
24
|
+
this.observer = new IntersectionObserver(([entry]) => {
|
|
25
|
+
if (entry.isIntersecting) {
|
|
26
|
+
this.onScroll.emit();
|
|
27
|
+
}
|
|
28
|
+
}, this.options());
|
|
29
|
+
afterNextRender(() => {
|
|
30
|
+
this.observer.observe(this.el.nativeElement);
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
ngOnDestroy() {
|
|
34
|
+
this.observer.disconnect();
|
|
35
|
+
}
|
|
36
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: InfinityScrollDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
37
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.5", type: InfinityScrollDirective, isStandalone: true, selector: "[infinity-scroll]", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onScroll: "onScroll" }, ngImport: i0 }); }
|
|
38
|
+
}
|
|
39
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: InfinityScrollDirective, decorators: [{
|
|
40
|
+
type: Directive,
|
|
41
|
+
args: [{
|
|
42
|
+
// eslint-disable-next-line @angular-eslint/directive-selector
|
|
43
|
+
selector: '[infinity-scroll]',
|
|
44
|
+
standalone: true
|
|
45
|
+
}]
|
|
46
|
+
}], ctorParameters: () => [{ type: i0.ElementRef }] });
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5maW5pdGUtc2Nyb2xsLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2F0b21pYy1hbmd1bGFyL3NyYy9saWIvZGlyZWN0aXZlcy9pbmZpbml0ZS1zY3JvbGwuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFjLEtBQUssRUFBYSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRWpHOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQU1ILE1BQU0sT0FBTyx1QkFBdUI7SUFVbEMsWUFBb0IsRUFBYztRQUFkLE9BQUUsR0FBRixFQUFFLENBQVk7UUFUbEMsWUFBTyxHQUFHLEtBQUssQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ2hDLGFBQVEsR0FBRyxNQUFNLEVBQUUsQ0FBQztRQUVaLGFBQVEsR0FBRSxJQUFJLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFO1lBQ3JELElBQUksS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN6QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3ZCLENBQUM7UUFDSCxDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFHakIsZUFBZSxDQUFDLEdBQUcsRUFBRTtZQUNuQixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQy9DLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQzdCLENBQUM7OEdBbEJVLHVCQUF1QjtrR0FBdkIsdUJBQXVCOzsyRkFBdkIsdUJBQXVCO2tCQUxuQyxTQUFTO21CQUFDO29CQUNULDhEQUE4RDtvQkFDOUQsUUFBUSxFQUFFLG1CQUFtQjtvQkFDN0IsVUFBVSxFQUFFLElBQUk7aUJBQ2pCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYWZ0ZXJOZXh0UmVuZGVyLCBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIGlucHV0LCBPbkRlc3Ryb3ksIG91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuLyoqXHJcbiAqIFJlcHJlc2VudHMgYSBkaXJlY3RpdmUgdGhhdCBlbmFibGVzIGluZmluaXRlIHNjcm9sbGluZyBiZWhhdmlvci5cclxuICogVGhpcyBkaXJlY3RpdmUgbGlzdGVucyBmb3IgdGhlIGludGVyc2VjdGlvbiBvZiB0aGUgZWxlbWVudCB3aXRoIHRoZSB2aWV3cG9ydFxyXG4gKiBhbmQgZW1pdHMgYSBgbG9hZE1vcmVgIGV2ZW50IHdoZW4gdGhlIGVsZW1lbnQgYmVjb21lcyB2aXNpYmxlLlxyXG4gKlxyXG4gKiBAcmVtYXJrc1xyXG4gKiBUaGlzIGRpcmVjdGl2ZSByZXF1aXJlcyB0aGUgYEludGVyc2VjdGlvbk9ic2VydmVyYCBBUEkgdG8gYmUgYXZhaWxhYmxlIGluIHRoZSBicm93c2VyLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGBodG1sXHJcbiAqIDxkaXYgaW5maW5pdHlTY3JvbGwgKG9uU2Nyb2xsKT1cImxvYWRNb3JlKClcIj5cclxuICogICA8IS0tIENvbnRlbnQgdG8gYmUgc2Nyb2xsZWQgLS0+XHJcbiAqIDwvZGl2PlxyXG4gKiBgYGBcclxuICpcclxuICovXHJcbkBEaXJlY3RpdmUoe1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvZGlyZWN0aXZlLXNlbGVjdG9yXHJcbiAgc2VsZWN0b3I6ICdbaW5maW5pdHktc2Nyb2xsXScsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgSW5maW5pdHlTY3JvbGxEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG4gIG9wdGlvbnMgPSBpbnB1dCh7IHJvb3Q6IG51bGwgfSk7XHJcbiAgb25TY3JvbGwgPSBvdXRwdXQoKTtcclxuXHJcbiAgcHJpdmF0ZSBvYnNlcnZlcj0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKChbZW50cnldKSA9PiB7XHJcbiAgICBpZiAoZW50cnkuaXNJbnRlcnNlY3RpbmcpIHtcclxuICAgICAgdGhpcy5vblNjcm9sbC5lbWl0KCk7XHJcbiAgICB9XHJcbiAgfSwgdGhpcy5vcHRpb25zKCkpO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsOiBFbGVtZW50UmVmKSB7XHJcbiAgICBhZnRlck5leHRSZW5kZXIoKCkgPT4ge1xyXG4gICAgICB0aGlzLm9ic2VydmVyLm9ic2VydmUodGhpcy5lbC5uYXRpdmVFbGVtZW50KTtcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMub2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xyXG4gIH1cclxuXHJcbn0iXX0=
|