@byuhbll/components 0.0.12 → 0.0.13

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.
@@ -100,7 +100,7 @@ export class SsSearchBarComponent {
100
100
  };
101
101
  this.emitAdvancedSearchOpen = () => {
102
102
  this.heightOfContainer = this.barWrapperRef?.nativeElement.clientHeight;
103
- this.advancedSearch.emit({
103
+ this.advancedSearchOpen.emit({
104
104
  ...this.config,
105
105
  showAdvancedSearchAsText: false,
106
106
  showAdvancedSearch: true,
@@ -147,4 +147,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
147
147
  type: ViewChild,
148
148
  args: ['barWrapperRef']
149
149
  }] } });
150
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Mtc2VhcmNoLWJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvc3Mtc2VhcmNoLWJhci9zcy1zZWFyY2gtYmFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9zcy1zZWFyY2gtYmFyL3NzLXNlYXJjaC1iYXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDSCxTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBQ04sU0FBUyxFQUNULGlCQUFpQixHQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN0RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUN0RixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUdoRixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQzs7O0FBOEIvRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQStCRztBQWlCSCxNQUFNLE9BQU8sb0JBQW9CO0lBaEJqQztRQXdCYyxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFnQixDQUFDO1FBQ2hELHNCQUFpQixHQUFHLElBQUksWUFBWSxFQUFnQixDQUFDO1FBQ3JELG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQWdCLENBQUM7UUFDbEQseUJBQW9CLEdBQUcsSUFBSSxZQUFZLEVB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b3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5wdXQsXG4gICAgT3V0cHV0LFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTc0FkdmFuY2VkUXVlcmllc1BpcGUgfSBmcm9tICcuL3BpcGVzL2FkdmFuY2VkLXF1ZXJpZXMucGlwZSc7XG5pbXBvcnQgeyBsaWJIYmxsRXhwYW5kQ29sbGFwc2UgfSBmcm9tICcuLi9hbmltYXRpb25zL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgQWR2YW5jZWRTZWFyY2hDb21wb25lbnQgfSBmcm9tICcuL2FkdmFuY2VkLXNlYXJjaC9hZHZhbmNlZC1zZWFyY2guY29tcG9uZW50JztcbmltcG9ydCB7IFNpbXBsZVNlYXJjaENvbXBvbmVudCB9IGZyb20gJy4vc2ltcGxlLXNlYXJjaC9zaW1wbGUtc2VhcmNoLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBZHZhbmNlZFNlYXJjaFF1ZXJ5Um93IH0gZnJvbSAnLi9tb2RlbHMvYWR2YW5jZWQtc2VhcmNoLm1vZGVsJztcbmltcG9ydCB7IFNlYXJjaFNjb3BlIH0gZnJvbSAnLi9tb2RlbHMvc2VhcmNoLXNjb3BlLm1vZGVsJztcbmltcG9ydCB7IEFkdmFuY2VkRmllbGRXYXJuaW5nUGlwZSB9IGZyb20gJy4vcGlwZXMvYWR2YW5jZWQtZmllbGQtd2FybmluZy5waXBlJztcbmltcG9ydCB7IEZpZWxkQnlTY29wZVBpcGUgfSBmcm9tICcuL3BpcGVzL2ZpZWxkLWJ5LXNjb3BlLnBpcGUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaENvbmZpZyB7XG4gICAgc2hvd0V4dGVybmFsVGFiOiBib29sZWFuO1xuICAgIHNob3dBZHZhbmNlZFNlYXJjaDogYm9vbGVhbjtcbiAgICBzaG93QWR2YW5jZWRTZWFyY2hBc1RleHQ6IGJvb2xlYW47XG4gICAgc2NvcGU6IFNlYXJjaFNjb3BlO1xuICAgIHE6IHN0cmluZztcbiAgICBhZHZhbmNlZFNlYXJjaFF1ZXJ5Um93czogQWR2YW5jZWRTZWFyY2hRdWVyeVJvd1tdO1xuICAgIGxvY2FsQWR2YW5jZWRTZWFyY2g6IHtcbiAgICAgICAgc2VsZWN0ZWRSZXNvdXJjZVR5cGVzOiBzdHJpbmdbXTtcbiAgICAgICAgYXZhaWxhYmxlUmVzb3VyY2VUeXBlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICAgICAgc2VsZWN0ZWRDb2xsZWN0aW9uczogc3RyaW5nW107XG4gICAgICAgIGF2YWlsYWJsZUNvbGxlY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIH07XG4gICAgZXh0ZXJuYWxBZHZhbmNlZFNlYXJjaDoge1xuICAgICAgICBkYXRlUHVibGlzaGVkOiB7IGZyb206IHN0cmluZzsgdG86IHN0cmluZyB9O1xuICAgICAgICBzZWxlY3RlZExhbmd1YWdlczogc3RyaW5nW107XG4gICAgICAgIGF2YWlsYWJsZUxhbmd1YWdlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICAgICAgbGltaXRSZXN1bHRzOiB7XG4gICAgICAgICAgICBwZWVyUmV2aWV3ZWQ6IGJvb2xlYW47XG4gICAgICAgIH07XG4gICAgICAgIGV4cGFuZFJlc3VsdHM6IHtcbiAgICAgICAgICAgIGFwcGx5UmVsYXRlZFdvcmRzOiBib29sZWFuO1xuICAgICAgICAgICAgYXBwbHlFcXVpdmFsZW50U3ViamVjdHM6IGJvb2xlYW47XG4gICAgICAgICAgICBmdWxsVGV4dDogYm9vbGVhbjtcbiAgICAgICAgfTtcbiAgICB9O1xufVxuXG4vKipcbiAqIEFjY2VwdHMgYXMgaW5wdXQsIGFuZCBlbWl0cyBhcyBldmVudHMsIFNlYXJjaENvbmZpZyBvYmplY3RzOlxuICogYGBgXG4gKiBTZWFyY2hDb25maWcge1xuICAgIHNob3dFeHRlcm5hbFRhYjogYm9vbGVhbjtcbiAgICBzaG93QWR2YW5jZWRTZWFyY2g6IGJvb2xlYW47XG4gICAgc2hvd0FkdmFuY2VkU2VhcmNoQXNUZXh0OiBib29sZWFuO1xuICAgIHNjb3BlOiBTZWFyY2hTY29wZTtcbiAgICBxOiBzdHJpbmc7XG4gICAgaXNGYWNldFNlYXJjaDogYm9vbGVhbjtcbiAgICBhZHZhbmNlZFNlYXJjaFF1ZXJ5Um93czogQWR2YW5jZWRTZWFyY2hRdWVyeVJvd1tdO1xuICAgIGxvY2FsQWR2YW5jZWRTZWFyY2g6IHtcbiAgICAgICAgc2VsZWN0ZWRSZXNvdXJjZVR5cGVzOiBzdHJpbmdbXTtcbiAgICAgICAgYXZhaWxhYmxlUmVzb3VyY2VUeXBlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICAgICAgc2VsZWN0ZWRDb2xsZWN0aW9uczogc3RyaW5nW107XG4gICAgICAgIGF2YWlsYWJsZUNvbGxlY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIH07XG4gICAgZXh0ZXJuYWxBZHZhbmNlZFNlYXJjaDoge1xuICAgICAgICBkYXRlUHVibGlzaGVkOiB7IGZyb206IHN0cmluZzsgdG86IHN0cmluZyB9O1xuICAgICAgICBzZWxlY3RlZExhbmd1YWdlczogc3RyaW5nW107XG4gICAgICAgIGF2YWlsYWJsZUxhbmd1YWdlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICAgICAgbGltaXRSZXN1bHRzOiB7XG4gICAgICAgICAgICBwZWVyUmV2aWV3ZWQ6IGJvb2xlYW47XG4gICAgICAgIH07XG4gICAgICAgIGV4cGFuZFJlc3VsdHM6IHtcbiAgICAgICAgICAgIGFwcGx5UmVsYXRlZFdvcmRzOiBib29sZWFuO1xuICAgICAgICAgICAgYXBwbHlFcXVpdmFsZW50U3ViamVjdHM6IGJvb2xlYW47XG4gICAgICAgICAgICBmdWxsVGV4dDogYm9vbGVhbjtcbiAgICAgICAgfTtcbiAgICB9O1xuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbGliLXNzLXNlYXJjaC1iYXInLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIFNzQWR2YW5jZWRRdWVyaWVzUGlwZSxcbiAgICAgICAgQWR2YW5jZWRTZWFyY2hDb21wb25lbnQsXG4gICAgICAgIFNpbXBsZVNlYXJjaENvbXBvbmVudCxcbiAgICAgICAgQWR2YW5jZWRGaWVsZFdhcm5pbmdQaXBlLFxuICAgIF0sXG4gICAgcHJvdmlkZXJzOiBbRmllbGRCeVNjb3BlUGlwZV0sXG4gICAgYW5pbWF0aW9uczogW2xpYkhibGxFeHBhbmRDb2xsYXBzZV0sXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NzLXNlYXJjaC1iYXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsOiAnLi9zcy1zZWFyY2gtYmFyLmNvbXBvbmVudC5zY3NzJyxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcbmV4cG9ydCBjbGFzcyBTc1NlYXJjaEJhckNvbXBvbmVudCB7XG4gICAgcHJpdmF0ZSBfY29uZmlnITogU2VhcmNoQ29uZmlnO1xuICAgIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIHNldCBjb25maWcoY29uZmlnOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fY29uZmlnID0gSlNPTi5wYXJzZShjb25maWcpIGFzIFNlYXJjaENvbmZpZztcbiAgICB9XG4gICAgZ2V0IGNvbmZpZygpOiBTZWFyY2hDb25maWcge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlnO1xuICAgIH1cbiAgICBAT3V0cHV0KCkgc2ltcGxlU2VhcmNoID0gbmV3IEV2ZW50RW1pdHRlcjxTZWFyY2hDb25maWc+KCk7XG4gICAgQE91dHB1dCgpIGNsZWFyU2ltcGxlU2VhcmNoID0gbmV3IEV2ZW50RW1pdHRlcjxTZWFyY2hDb25maWc+KCk7XG4gICAgQE91dHB1dCgpIGFkdmFuY2VkU2VhcmNoID0gbmV3IEV2ZW50RW1pdHRlcjxTZWFyY2hDb25maWc+KCk7XG4gICAgQE91dHB1dCgpIGFkdmFuY2VkU2VhcmNoQ2xvc2VkID0gbmV3IEV2ZW50RW1pdHRlcjxTZWFyY2hDb25maWc+KCk7XG4gICAgQE91dHB1dCgpIGFkdmFuY2VkU2VhcmNoT3BlbiA9IG5ldyBFdmVudEVtaXR0ZXI8U2VhcmNoQ29uZmlnPigpO1xuICAgIEBPdXRwdXQoKSB0YWJDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFNlYXJjaENvbmZpZz4oKTtcbiAgICBAVmlld0NoaWxkKCdiYXJXcmFwcGVyUmVmJykgcHJpdmF0ZSBiYXJXcmFwcGVyUmVmITogRWxlbWVudFJlZjtcbiAgICBwcm90ZWN0ZWQgaGVpZ2h0T2ZDb250YWluZXIgPSAwO1xuXG4gICAgcHJvdGVjdGVkIGVtaXRDbGVhclNpbXBsZVNlYXJjaCA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5jbGVhclNpbXBsZVNlYXJjaC5lbWl0KHtcbiAgICAgICAgICAgIC4uLnRoaXMuY29uZmlnLFxuICAgICAgICAgICAgcTogJycsXG4gICAgICAgICAgICBhZHZhbmNlZFNlYXJjaFF1ZXJ5Um93czogW10sXG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBwcm90ZWN0ZWQgZW1pdFNpbXBsZVNlYXJjaCA9ICh1cGRhdGVkUHJvcHM6IFBhcnRpYWw8U2VhcmNoQ29uZmlnPikgPT4ge1xuICAgICAgICB0aGlzLnNpbXBsZVNlYXJjaC5lbWl0KHtcbiAgICAgICAgICAgIC4uLnRoaXMuY29uZmlnLFxuICAgICAgICAgICAgLi4udXBkYXRlZFByb3BzLFxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgcHJvdGVjdGVkIGVtaXRBZHZhbmNlZFNlYXJjaENsb3NlZCA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5oZWlnaHRPZkNvbnRhaW5lciA9IHRoaXMuYmFyV3JhcHBlclJlZj8ubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gICAgICAgIHRoaXMuY29uZmlnLnNob3dBZHZhbmNlZFNlYXJjaCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmFkdmFuY2VkU2VhcmNoQ2xvc2VkLmVtaXQoe1xuICAgICAgICAgICAgLi4udGhpcy5jb25maWcsXG4gICAgICAgICAgICBxOiB0aGlzLmNvbmZpZy5xIHx8IHRoaXMuY29uZmlnLmFkdmFuY2VkU2VhcmNoUXVlcnlSb3dzWzBdPy5xdWVyeSxcbiAgICAgICAgICAgIHNob3dBZHZhbmNlZFNlYXJjaDogZmFsc2UsXG4gICAgICAgICAgICBhZHZhbmNlZFNlYXJjaFF1ZXJ5Um93czogKHRoaXMuY29uZmlnLmFkdmFuY2VkU2VhcmNoUXVlcnlSb3dzID0gW10pLFxuICAgICAgICAgICAgbG9jYWxBZHZhbmNlZFNlYXJjaDoge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuY29uZmlnLmxvY2FsQWR2YW5jZWRTZWFyY2gsXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRSZXNvdXJjZVR5cGVzOiBbXSxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZENvbGxlY3Rpb25zOiBbXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBleHRlcm5hbEFkdmFuY2VkU2VhcmNoOiB7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5jb25maWcuZXh0ZXJuYWxBZHZhbmNlZFNlYXJjaCxcbiAgICAgICAgICAgICAgICBkYXRlUHVibGlzaGVkOiB7IGZyb206ICcnLCB0bzogJycgfSxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZExhbmd1YWdlczogW10sXG4gICAgICAgICAgICAgICAgbGltaXRSZXN1bHRzOiB7XG4gICAgICAgICAgICAgICAgICAgIHBlZXJSZXZpZXdlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBleHBhbmRSZXN1bHRzOiB7XG4gICAgICAgICAgICAgICAgICAgIGFwcGx5UmVsYXRlZFdvcmRzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgYXBwbHlFcXVpdmFsZW50U3ViamVjdHM6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBmdWxsVGV4dDogZmFsc2UsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBwcm90ZWN0ZWQgZW1pdEFkdmFuY2VkU2VhcmNoID0gKGNvbmZpZzogU2VhcmNoQ29uZmlnKSA9PiB7XG4gICAgICAgIHRoaXMuaGVpZ2h0T2ZDb250YWluZXIgPSB0aGlzLmJhcldyYXBwZXJSZWY/Lm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICAgICAgICB0aGlzLmFkdmFuY2VkU2VhcmNoLmVtaXQoe1xuICAgICAgICAgICAgLi4uY29uZmlnLFxuICAgICAgICAgICAgc2hvd0FkdmFuY2VkU2VhcmNoQXNUZXh0OiB0cnVlLFxuICAgICAgICAgICAgc2hvd0FkdmFuY2VkU2VhcmNoOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgcHJvdGVjdGVkIGVtaXRBZHZhbmNlZFNlYXJjaE9wZW4gPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuaGVpZ2h0T2ZDb250YWluZXIgPSB0aGlzLmJhcldyYXBwZXJSZWY/Lm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICAgICAgICB0aGlzLmFkdmFuY2VkU2VhcmNoLmVtaXQoe1xuICAgICAgICAgICAgLi4udGhpcy5jb25maWcsXG4gICAgICAgICAgICBzaG93QWR2YW5jZWRTZWFyY2hBc1RleHQ6IGZhbHNlLFxuICAgICAgICAgICAgc2hvd0FkdmFuY2VkU2VhcmNoOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgcHJvdGVjdGVkIGVtaXRUYWJDaGFuZ2UgPSAobmV3U2NvcGU6IFNlYXJjaFNjb3BlKSA9PiB7XG4gICAgICAgIHRoaXMudGFiQ2hhbmdlLmVtaXQoeyAuLi50aGlzLmNvbmZpZywgc2NvcGU6IG5ld1Njb3BlIH0pO1xuICAgIH07XG59XG4iLCI8ZGl2IGlkPVwic3NTZWFyY2hCYXJcIj5cbiAgICA8YnV0dG9uXG4gICAgICAgIChjbGljayk9XCJlbWl0VGFiQ2hhbmdlKCdsb2NhbCcpXCJcbiAgICAgICAgY2xhc3M9XCJ0YWJcIlxuICAgICAgICBbbmdDbGFzc109XCJ7IGFjdGl2ZTogY29uZmlnLnNjb3BlID09PSAnbG9jYWwnIH1cIlxuICAgICAgICBkYXRhLXRlc3RpZD1cImxvY2FsVGFiXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImNvbmZpZy5zY29wZSA9PT0gJ2xvY2FsJ1wiXG4gICAgPlxuICAgICAgICBJbiB0aGUgTGlicmFyeVxuICAgIDwvYnV0dG9uPlxuICAgIEBpZiAoY29uZmlnLnNob3dFeHRlcm5hbFRhYikge1xuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPVwiZW1pdFRhYkNoYW5nZSgnZXh0ZXJuYWwnKVwiXG4gICAgICAgICAgICBjbGFzcz1cInRhYlwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7IGFjdGl2ZTogY29uZmlnLnNjb3BlID09PSAnZXh0ZXJuYWwnIH1cIlxuICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJleHRlcm5hbFRhYlwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiY29uZmlnLnNjb3BlID09PSAnZXh0ZXJuYWwnXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgQXZhaWxhYmxlIE9ubGluZVxuICAgICAgICA8L2J1dHRvbj5cbiAgICB9XG4gICAgPGRpdlxuICAgICAgICBjbGFzcz1cImJhci13cmFwcGVyXCJcbiAgICAgICAgI2JhcldyYXBwZXJSZWZcbiAgICAgICAgW0BsaWJIYmxsRXhwYW5kQ29sbGFwc2VdPVwie1xuICAgICAgICAgICAgdmFsdWU6IGNvbmZpZy5zaG93QWR2YW5jZWRTZWFyY2ggPyAoIWNvbmZpZy5zaG93QWR2YW5jZWRTZWFyY2hBc1RleHQgPyAxIDogMikgOiAzLFxuICAgICAgICAgICAgcGFyYW1zOiB7IHN0YXJ0SGVpZ2h0OiBoZWlnaHRPZkNvbnRhaW5lciB9LFxuICAgICAgICB9XCJcbiAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJiYXItY29udGVudFwiIGRhdGEtdGVzdGlkPVwic2VhcmNoRm9ybVwiPlxuICAgICAgICAgICAgQGlmICghY29uZmlnLnNob3dBZHZhbmNlZFNlYXJjaCkge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtYmFyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsaWItc3Mtc2ltcGxlLXNlYXJjaFxuICAgICAgICAgICAgICAgICAgICAgICAgW2NvbmZpZ109XCJjb25maWdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKHNpbXBsZVNlYXJjaCk9XCJlbWl0U2ltcGxlU2VhcmNoKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsZWFyU2ltcGxlU2VhcmNoKT1cImVtaXRDbGVhclNpbXBsZVNlYXJjaCgpXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvbGliLXNzLXNpbXBsZS1zZWFyY2g+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGlkPVwiYWR2U2VhcmNoQ2xvc2VCdG5cIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZW1pdEFkdmFuY2VkU2VhcmNoQ2xvc2VkKClcIlxuICAgICAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cImFkdlNlYXJjaENsb3NlQnRuXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBpY29uXCI+IGNsb3NlIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8ZGl2IGlkPVwiYWR2U2VhcmNoV3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICBAaWYgKGNvbmZpZy5zaG93QWR2YW5jZWRTZWFyY2ggJiYgIWNvbmZpZy5zaG93QWR2YW5jZWRTZWFyY2hBc1RleHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1zcy1hZHZhbmNlZC1zZWFyY2hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbmZpZ109XCJjb25maWdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYWR2YW5jZWRTZWFyY2gpPVwiZW1pdEFkdmFuY2VkU2VhcmNoKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2xpYi1zcy1hZHZhbmNlZC1zZWFyY2g+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhZHYtc2VhcmNoLXRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwiYWR2YW5jZWRTZWFyY2hUZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcuYWR2YW5jZWRTZWFyY2hRdWVyeVJvd3MgfCBzc0FkdmFuY2VkUXVlcmllczogY29uZmlnLnNjb3BlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZpZWxkLXdhcm5pbmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5hZHZhbmNlZFNlYXJjaFF1ZXJ5Um93cyB8IGFkdmFuY2VkRmllbGRXYXJuaW5nOiBjb25maWcuc2NvcGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICBAaWYgKCFjb25maWcuc2hvd0FkdmFuY2VkU2VhcmNoIHx8IGNvbmZpZy5zaG93QWR2YW5jZWRTZWFyY2hBc1RleHQpIHtcbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cInRvZ2dsZUFkdlNlYXJjaEJ1dHRvblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJhZHYtc2VhcmNoLWJ0blwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImVtaXRBZHZhbmNlZFNlYXJjaE9wZW4oKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgQWR2YW5jZWQgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGljb25cIj4ga2V5Ym9hcmRfYXJyb3dfZG93biA8L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgfVxuICAgIDwvZGl2PlxuPC9kaXY+XG4iXX0=
150
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Mtc2VhcmNoLWJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvc3Mtc2VhcmNoLWJhci9zcy1zZWFyY2gtYmFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9zcy1zZWFyY2gtYmFyL3NzLXNlYXJjaC1iYXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDSCxTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBQ04sU0FBUyxFQUNULGlCQUFpQixHQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN0RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUN0RixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUdoRixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQzs7O0FBOEIvRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQStCRztBQWlCSCxNQUFNLE9BQU8sb0JBQW9CO0lBaEJqQztRQXdCYyxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFnQixDQUFDO1FBQ2hELHNCQUFpQixHQUFHLElBQUksWUFBWSxFQUFnQixDQUFDO1FBQ3JELG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQWdCLENBQUM7UUFDbEQseUJBQW9CLEdBQUcsSUFBSSxZQUFZLEVB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bXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbnB1dCxcbiAgICBPdXRwdXQsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNzQWR2YW5jZWRRdWVyaWVzUGlwZSB9IGZyb20gJy4vcGlwZXMvYWR2YW5jZWQtcXVlcmllcy5waXBlJztcbmltcG9ydCB7IGxpYkhibGxFeHBhbmRDb2xsYXBzZSB9IGZyb20gJy4uL2FuaW1hdGlvbnMvYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBBZHZhbmNlZFNlYXJjaENvbXBvbmVudCB9IGZyb20gJy4vYWR2YW5jZWQtc2VhcmNoL2FkdmFuY2VkLXNlYXJjaC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2ltcGxlU2VhcmNoQ29tcG9uZW50IH0gZnJvbSAnLi9zaW1wbGUtc2VhcmNoL3NpbXBsZS1zZWFyY2guY29tcG9uZW50JztcbmltcG9ydCB7IEFkdmFuY2VkU2VhcmNoUXVlcnlSb3cgfSBmcm9tICcuL21vZGVscy9hZHZhbmNlZC1zZWFyY2gubW9kZWwnO1xuaW1wb3J0IHsgU2VhcmNoU2NvcGUgfSBmcm9tICcuL21vZGVscy9zZWFyY2gtc2NvcGUubW9kZWwnO1xuaW1wb3J0IHsgQWR2YW5jZWRGaWVsZFdhcm5pbmdQaXBlIH0gZnJvbSAnLi9waXBlcy9hZHZhbmNlZC1maWVsZC13YXJuaW5nLnBpcGUnO1xuaW1wb3J0IHsgRmllbGRCeVNjb3BlUGlwZSB9IGZyb20gJy4vcGlwZXMvZmllbGQtYnktc2NvcGUucGlwZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VhcmNoQ29uZmlnIHtcbiAgICBzaG93RXh0ZXJuYWxUYWI6IGJvb2xlYW47XG4gICAgc2hvd0FkdmFuY2VkU2VhcmNoOiBib29sZWFuO1xuICAgIHNob3dBZHZhbmNlZFNlYXJjaEFzVGV4dDogYm9vbGVhbjtcbiAgICBzY29wZTogU2VhcmNoU2NvcGU7XG4gICAgcTogc3RyaW5nO1xuICAgIGFkdmFuY2VkU2VhcmNoUXVlcnlSb3dzOiBBZHZhbmNlZFNlYXJjaFF1ZXJ5Um93W107XG4gICAgbG9jYWxBZHZhbmNlZFNlYXJjaDoge1xuICAgICAgICBzZWxlY3RlZFJlc291cmNlVHlwZXM6IHN0cmluZ1tdO1xuICAgICAgICBhdmFpbGFibGVSZXNvdXJjZVR5cGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgICAgICBzZWxlY3RlZENvbGxlY3Rpb25zOiBzdHJpbmdbXTtcbiAgICAgICAgYXZhaWxhYmxlQ29sbGVjdGlvbnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgfTtcbiAgICBleHRlcm5hbEFkdmFuY2VkU2VhcmNoOiB7XG4gICAgICAgIGRhdGVQdWJsaXNoZWQ6IHsgZnJvbTogc3RyaW5nOyB0bzogc3RyaW5nIH07XG4gICAgICAgIHNlbGVjdGVkTGFuZ3VhZ2VzOiBzdHJpbmdbXTtcbiAgICAgICAgYXZhaWxhYmxlTGFuZ3VhZ2VzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgICAgICBsaW1pdFJlc3VsdHM6IHtcbiAgICAgICAgICAgIHBlZXJSZXZpZXdlZDogYm9vbGVhbjtcbiAgICAgICAgfTtcbiAgICAgICAgZXhwYW5kUmVzdWx0czoge1xuICAgICAgICAgICAgYXBwbHlSZWxhdGVkV29yZHM6IGJvb2xlYW47XG4gICAgICAgICAgICBhcHBseUVxdWl2YWxlbnRTdWJqZWN0czogYm9vbGVhbjtcbiAgICAgICAgICAgIGZ1bGxUZXh0OiBib29sZWFuO1xuICAgICAgICB9O1xuICAgIH07XG59XG5cbi8qKlxuICogQWNjZXB0cyBhcyBpbnB1dCwgYW5kIGVtaXRzIGFzIGV2ZW50cywgU2VhcmNoQ29uZmlnIG9iamVjdHM6XG4gKiBgYGBcbiAqIFNlYXJjaENvbmZpZyB7XG4gICAgc2hvd0V4dGVybmFsVGFiOiBib29sZWFuO1xuICAgIHNob3dBZHZhbmNlZFNlYXJjaDogYm9vbGVhbjtcbiAgICBzaG93QWR2YW5jZWRTZWFyY2hBc1RleHQ6IGJvb2xlYW47XG4gICAgc2NvcGU6IFNlYXJjaFNjb3BlO1xuICAgIHE6IHN0cmluZztcbiAgICBpc0ZhY2V0U2VhcmNoOiBib29sZWFuO1xuICAgIGFkdmFuY2VkU2VhcmNoUXVlcnlSb3dzOiBBZHZhbmNlZFNlYXJjaFF1ZXJ5Um93W107XG4gICAgbG9jYWxBZHZhbmNlZFNlYXJjaDoge1xuICAgICAgICBzZWxlY3RlZFJlc291cmNlVHlwZXM6IHN0cmluZ1tdO1xuICAgICAgICBhdmFpbGFibGVSZXNvdXJjZVR5cGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgICAgICBzZWxlY3RlZENvbGxlY3Rpb25zOiBzdHJpbmdbXTtcbiAgICAgICAgYXZhaWxhYmxlQ29sbGVjdGlvbnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgfTtcbiAgICBleHRlcm5hbEFkdmFuY2VkU2VhcmNoOiB7XG4gICAgICAgIGRhdGVQdWJsaXNoZWQ6IHsgZnJvbTogc3RyaW5nOyB0bzogc3RyaW5nIH07XG4gICAgICAgIHNlbGVjdGVkTGFuZ3VhZ2VzOiBzdHJpbmdbXTtcbiAgICAgICAgYXZhaWxhYmxlTGFuZ3VhZ2VzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgICAgICBsaW1pdFJlc3VsdHM6IHtcbiAgICAgICAgICAgIHBlZXJSZXZpZXdlZDogYm9vbGVhbjtcbiAgICAgICAgfTtcbiAgICAgICAgZXhwYW5kUmVzdWx0czoge1xuICAgICAgICAgICAgYXBwbHlSZWxhdGVkV29yZHM6IGJvb2xlYW47XG4gICAgICAgICAgICBhcHBseUVxdWl2YWxlbnRTdWJqZWN0czogYm9vbGVhbjtcbiAgICAgICAgICAgIGZ1bGxUZXh0OiBib29sZWFuO1xuICAgICAgICB9O1xuICAgIH07XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdsaWItc3Mtc2VhcmNoLWJhcicsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgU3NBZHZhbmNlZFF1ZXJpZXNQaXBlLFxuICAgICAgICBBZHZhbmNlZFNlYXJjaENvbXBvbmVudCxcbiAgICAgICAgU2ltcGxlU2VhcmNoQ29tcG9uZW50LFxuICAgICAgICBBZHZhbmNlZEZpZWxkV2FybmluZ1BpcGUsXG4gICAgXSxcbiAgICBwcm92aWRlcnM6IFtGaWVsZEJ5U2NvcGVQaXBlXSxcbiAgICBhbmltYXRpb25zOiBbbGliSGJsbEV4cGFuZENvbGxhcHNlXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc3Mtc2VhcmNoLWJhci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmw6ICcuL3NzLXNlYXJjaC1iYXIuY29tcG9uZW50LnNjc3MnLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuZXhwb3J0IGNsYXNzIFNzU2VhcmNoQmFyQ29tcG9uZW50IHtcbiAgICBwcml2YXRlIF9jb25maWchOiBTZWFyY2hDb25maWc7XG4gICAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgc2V0IGNvbmZpZyhjb25maWc6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9jb25maWcgPSBKU09OLnBhcnNlKGNvbmZpZykgYXMgU2VhcmNoQ29uZmlnO1xuICAgIH1cbiAgICBnZXQgY29uZmlnKCk6IFNlYXJjaENvbmZpZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb25maWc7XG4gICAgfVxuICAgIEBPdXRwdXQoKSBzaW1wbGVTZWFyY2ggPSBuZXcgRXZlbnRFbWl0dGVyPFNlYXJjaENvbmZpZz4oKTtcbiAgICBAT3V0cHV0KCkgY2xlYXJTaW1wbGVTZWFyY2ggPSBuZXcgRXZlbnRFbWl0dGVyPFNlYXJjaENvbmZpZz4oKTtcbiAgICBAT3V0cHV0KCkgYWR2YW5jZWRTZWFyY2ggPSBuZXcgRXZlbnRFbWl0dGVyPFNlYXJjaENvbmZpZz4oKTtcbiAgICBAT3V0cHV0KCkgYWR2YW5jZWRTZWFyY2hDbG9zZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFNlYXJjaENvbmZpZz4oKTtcbiAgICBAT3V0cHV0KCkgYWR2YW5jZWRTZWFyY2hPcGVuID0gbmV3IEV2ZW50RW1pdHRlcjxTZWFyY2hDb25maWc+KCk7XG4gICAgQE91dHB1dCgpIHRhYkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8U2VhcmNoQ29uZmlnPigpO1xuICAgIEBWaWV3Q2hpbGQoJ2JhcldyYXBwZXJSZWYnKSBwcml2YXRlIGJhcldyYXBwZXJSZWYhOiBFbGVtZW50UmVmO1xuICAgIHByb3RlY3RlZCBoZWlnaHRPZkNvbnRhaW5lciA9IDA7XG5cbiAgICBwcm90ZWN0ZWQgZW1pdENsZWFyU2ltcGxlU2VhcmNoID0gKCkgPT4ge1xuICAgICAgICB0aGlzLmNsZWFyU2ltcGxlU2VhcmNoLmVtaXQoe1xuICAgICAgICAgICAgLi4udGhpcy5jb25maWcsXG4gICAgICAgICAgICBxOiAnJyxcbiAgICAgICAgICAgIGFkdmFuY2VkU2VhcmNoUXVlcnlSb3dzOiBbXSxcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIHByb3RlY3RlZCBlbWl0U2ltcGxlU2VhcmNoID0gKHVwZGF0ZWRQcm9wczogUGFydGlhbDxTZWFyY2hDb25maWc+KSA9PiB7XG4gICAgICAgIHRoaXMuc2ltcGxlU2VhcmNoLmVtaXQoe1xuICAgICAgICAgICAgLi4udGhpcy5jb25maWcsXG4gICAgICAgICAgICAuLi51cGRhdGVkUHJvcHMsXG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBwcm90ZWN0ZWQgZW1pdEFkdmFuY2VkU2VhcmNoQ2xvc2VkID0gKCkgPT4ge1xuICAgICAgICB0aGlzLmhlaWdodE9mQ29udGFpbmVyID0gdGhpcy5iYXJXcmFwcGVyUmVmPy5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodDtcbiAgICAgICAgdGhpcy5jb25maWcuc2hvd0FkdmFuY2VkU2VhcmNoID0gZmFsc2U7XG4gICAgICAgIHRoaXMuYWR2YW5jZWRTZWFyY2hDbG9zZWQuZW1pdCh7XG4gICAgICAgICAgICAuLi50aGlzLmNvbmZpZyxcbiAgICAgICAgICAgIHE6IHRoaXMuY29uZmlnLnEgfHwgdGhpcy5jb25maWcuYWR2YW5jZWRTZWFyY2hRdWVyeVJvd3NbMF0/LnF1ZXJ5LFxuICAgICAgICAgICAgc2hvd0FkdmFuY2VkU2VhcmNoOiBmYWxzZSxcbiAgICAgICAgICAgIGFkdmFuY2VkU2VhcmNoUXVlcnlSb3dzOiAodGhpcy5jb25maWcuYWR2YW5jZWRTZWFyY2hRdWVyeVJvd3MgPSBbXSksXG4gICAgICAgICAgICBsb2NhbEFkdmFuY2VkU2VhcmNoOiB7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5jb25maWcubG9jYWxBZHZhbmNlZFNlYXJjaCxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFJlc291cmNlVHlwZXM6IFtdLFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkQ29sbGVjdGlvbnM6IFtdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGV4dGVybmFsQWR2YW5jZWRTZWFyY2g6IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLmNvbmZpZy5leHRlcm5hbEFkdmFuY2VkU2VhcmNoLFxuICAgICAgICAgICAgICAgIGRhdGVQdWJsaXNoZWQ6IHsgZnJvbTogJycsIHRvOiAnJyB9LFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkTGFuZ3VhZ2VzOiBbXSxcbiAgICAgICAgICAgICAgICBsaW1pdFJlc3VsdHM6IHtcbiAgICAgICAgICAgICAgICAgICAgcGVlclJldmlld2VkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGV4cGFuZFJlc3VsdHM6IHtcbiAgICAgICAgICAgICAgICAgICAgYXBwbHlSZWxhdGVkV29yZHM6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBhcHBseUVxdWl2YWxlbnRTdWJqZWN0czogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGZ1bGxUZXh0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIHByb3RlY3RlZCBlbWl0QWR2YW5jZWRTZWFyY2ggPSAoY29uZmlnOiBTZWFyY2hDb25maWcpID0+IHtcbiAgICAgICAgdGhpcy5oZWlnaHRPZkNvbnRhaW5lciA9IHRoaXMuYmFyV3JhcHBlclJlZj8ubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gICAgICAgIHRoaXMuYWR2YW5jZWRTZWFyY2guZW1pdCh7XG4gICAgICAgICAgICAuLi5jb25maWcsXG4gICAgICAgICAgICBzaG93QWR2YW5jZWRTZWFyY2hBc1RleHQ6IHRydWUsXG4gICAgICAgICAgICBzaG93QWR2YW5jZWRTZWFyY2g6IHRydWUsXG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBwcm90ZWN0ZWQgZW1pdEFkdmFuY2VkU2VhcmNoT3BlbiA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5oZWlnaHRPZkNvbnRhaW5lciA9IHRoaXMuYmFyV3JhcHBlclJlZj8ubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gICAgICAgIHRoaXMuYWR2YW5jZWRTZWFyY2hPcGVuLmVtaXQoe1xuICAgICAgICAgICAgLi4udGhpcy5jb25maWcsXG4gICAgICAgICAgICBzaG93QWR2YW5jZWRTZWFyY2hBc1RleHQ6IGZhbHNlLFxuICAgICAgICAgICAgc2hvd0FkdmFuY2VkU2VhcmNoOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgcHJvdGVjdGVkIGVtaXRUYWJDaGFuZ2UgPSAobmV3U2NvcGU6IFNlYXJjaFNjb3BlKSA9PiB7XG4gICAgICAgIHRoaXMudGFiQ2hhbmdlLmVtaXQoeyAuLi50aGlzLmNvbmZpZywgc2NvcGU6IG5ld1Njb3BlIH0pO1xuICAgIH07XG59XG4iLCI8ZGl2IGlkPVwic3NTZWFyY2hCYXJcIj5cbiAgICA8YnV0dG9uXG4gICAgICAgIChjbGljayk9XCJlbWl0VGFiQ2hhbmdlKCdsb2NhbCcpXCJcbiAgICAgICAgY2xhc3M9XCJ0YWJcIlxuICAgICAgICBbbmdDbGFzc109XCJ7IGFjdGl2ZTogY29uZmlnLnNjb3BlID09PSAnbG9jYWwnIH1cIlxuICAgICAgICBkYXRhLXRlc3RpZD1cImxvY2FsVGFiXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImNvbmZpZy5zY29wZSA9PT0gJ2xvY2FsJ1wiXG4gICAgPlxuICAgICAgICBJbiB0aGUgTGlicmFyeVxuICAgIDwvYnV0dG9uPlxuICAgIEBpZiAoY29uZmlnLnNob3dFeHRlcm5hbFRhYikge1xuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPVwiZW1pdFRhYkNoYW5nZSgnZXh0ZXJuYWwnKVwiXG4gICAgICAgICAgICBjbGFzcz1cInRhYlwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7IGFjdGl2ZTogY29uZmlnLnNjb3BlID09PSAnZXh0ZXJuYWwnIH1cIlxuICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJleHRlcm5hbFRhYlwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiY29uZmlnLnNjb3BlID09PSAnZXh0ZXJuYWwnXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgQXZhaWxhYmxlIE9ubGluZVxuICAgICAgICA8L2J1dHRvbj5cbiAgICB9XG4gICAgPGRpdlxuICAgICAgICBjbGFzcz1cImJhci13cmFwcGVyXCJcbiAgICAgICAgI2JhcldyYXBwZXJSZWZcbiAgICAgICAgW0BsaWJIYmxsRXhwYW5kQ29sbGFwc2VdPVwie1xuICAgICAgICAgICAgdmFsdWU6IGNvbmZpZy5zaG93QWR2YW5jZWRTZWFyY2ggPyAoIWNvbmZpZy5zaG93QWR2YW5jZWRTZWFyY2hBc1RleHQgPyAxIDogMikgOiAzLFxuICAgICAgICAgICAgcGFyYW1zOiB7IHN0YXJ0SGVpZ2h0OiBoZWlnaHRPZkNvbnRhaW5lciB9LFxuICAgICAgICB9XCJcbiAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJiYXItY29udGVudFwiIGRhdGEtdGVzdGlkPVwic2VhcmNoRm9ybVwiPlxuICAgICAgICAgICAgQGlmICghY29uZmlnLnNob3dBZHZhbmNlZFNlYXJjaCkge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtYmFyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsaWItc3Mtc2ltcGxlLXNlYXJjaFxuICAgICAgICAgICAgICAgICAgICAgICAgW2NvbmZpZ109XCJjb25maWdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKHNpbXBsZVNlYXJjaCk9XCJlbWl0U2ltcGxlU2VhcmNoKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsZWFyU2ltcGxlU2VhcmNoKT1cImVtaXRDbGVhclNpbXBsZVNlYXJjaCgpXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvbGliLXNzLXNpbXBsZS1zZWFyY2g+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGlkPVwiYWR2U2VhcmNoQ2xvc2VCdG5cIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZW1pdEFkdmFuY2VkU2VhcmNoQ2xvc2VkKClcIlxuICAgICAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cImFkdlNlYXJjaENsb3NlQnRuXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBpY29uXCI+IGNsb3NlIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8ZGl2IGlkPVwiYWR2U2VhcmNoV3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICBAaWYgKGNvbmZpZy5zaG93QWR2YW5jZWRTZWFyY2ggJiYgIWNvbmZpZy5zaG93QWR2YW5jZWRTZWFyY2hBc1RleHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1zcy1hZHZhbmNlZC1zZWFyY2hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbmZpZ109XCJjb25maWdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYWR2YW5jZWRTZWFyY2gpPVwiZW1pdEFkdmFuY2VkU2VhcmNoKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2xpYi1zcy1hZHZhbmNlZC1zZWFyY2g+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhZHYtc2VhcmNoLXRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwiYWR2YW5jZWRTZWFyY2hUZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcuYWR2YW5jZWRTZWFyY2hRdWVyeVJvd3MgfCBzc0FkdmFuY2VkUXVlcmllczogY29uZmlnLnNjb3BlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZpZWxkLXdhcm5pbmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5hZHZhbmNlZFNlYXJjaFF1ZXJ5Um93cyB8IGFkdmFuY2VkRmllbGRXYXJuaW5nOiBjb25maWcuc2NvcGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICBAaWYgKCFjb25maWcuc2hvd0FkdmFuY2VkU2VhcmNoIHx8IGNvbmZpZy5zaG93QWR2YW5jZWRTZWFyY2hBc1RleHQpIHtcbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cInRvZ2dsZUFkdlNlYXJjaEJ1dHRvblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJhZHYtc2VhcmNoLWJ0blwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImVtaXRBZHZhbmNlZFNlYXJjaE9wZW4oKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgQWR2YW5jZWQgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGljb25cIj4ga2V5Ym9hcmRfYXJyb3dfZG93biA8L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgfVxuICAgIDwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -1004,7 +1004,7 @@ class SsSearchBarComponent {
1004
1004
  };
1005
1005
  this.emitAdvancedSearchOpen = () => {
1006
1006
  this.heightOfContainer = this.barWrapperRef?.nativeElement.clientHeight;
1007
- this.advancedSearch.emit({
1007
+ this.advancedSearchOpen.emit({
1008
1008
  ...this.config,
1009
1009
  showAdvancedSearchAsText: false,
1010
1010
  showAdvancedSearch: true,
@@ -1 +1 @@
1
- {"version":3,"file":"byuhbll-components.mjs","sources":["../../../projects/components/src/lib/hbll-header/hbll-header.component.ts","../../../projects/components/src/lib/hbll-header/hbll-header.component.html","../../../projects/components/src/lib/ss-search-bar/constants.ts","../../../projects/components/src/lib/ss-search-bar/models/advanced-search.model.ts","../../../projects/components/src/lib/ss-search-bar/pipes/field-by-scope.pipe.ts","../../../projects/components/src/lib/ss-search-bar/pipes/advanced-queries.pipe.ts","../../../projects/components/src/lib/animations/animations.ts","../../../projects/components/src/lib/ss-search-bar/utils.ts","../../../projects/components/src/lib/hbll-multi-select/hbll-multi-select.component.ts","../../../projects/components/src/lib/hbll-multi-select/hbll-multi-select.component.html","../../../projects/components/src/lib/hbll-checkbox/hbll-checkbox.component.ts","../../../projects/components/src/lib/hbll-checkbox/hbll-checkbox.component.html","../../../projects/components/src/lib/directives/hbll-pill-btn/hbll-pill-btn.directive.ts","../../../projects/components/src/lib/ss-search-bar/date-range/date-range.component.ts","../../../projects/components/src/lib/ss-search-bar/date-range/date-range.component.html","../../../projects/components/src/lib/ss-search-bar/advanced-search/advanced-search.component.ts","../../../projects/components/src/lib/ss-search-bar/advanced-search/advanced-search.component.html","../../../projects/components/src/lib/ss-search-bar/simple-search/simple-search.component.ts","../../../projects/components/src/lib/ss-search-bar/simple-search/simple-search.component.html","../../../projects/components/src/lib/ss-search-bar/pipes/advanced-field-warning.pipe.ts","../../../projects/components/src/lib/ss-search-bar/ss-search-bar.component.ts","../../../projects/components/src/lib/ss-search-bar/ss-search-bar.component.html","../../../projects/components/src/public-api.ts","../../../projects/components/src/byuhbll-components.ts"],"sourcesContent":["import { DatePipe, LowerCasePipe } from '@angular/common';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { HttpClient } from '@angular/common/http';\nimport {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n Output,\n Pipe,\n PipeTransform,\n Renderer2,\n computed,\n inject,\n input,\n viewChild,\n} from '@angular/core';\n\nconst LIBRARY_HOURS_API_URL = 'https://apps.lib.byu.edu/libraryhours/api/hours';\n\ninterface LibraryHours {\n date: string;\n is_closed: boolean;\n open_time: string;\n close_time: string;\n has_exception: boolean;\n exception_title: string;\n exception_message: string;\n is_currently_open: boolean;\n}\n\n@Pipe({\n name: 'libraryHoursDate',\n standalone: true,\n})\nexport class LibraryHoursDatePipe implements PipeTransform {\n transform(date: string, time: string): Date {\n return new Date(date + 'T' + time);\n }\n}\n\n/**\n * Header component built to be exported as a custom element.\n * This component uses icons provided by Google Material.\n * The link to these icons should be included once in the \\<head> of your base html.\n *\n * When a non-empty string `name` is provided to this component, the user is considered logged in.\n * Two outputs/events are accessible: `login` and `logout`.\n */\n@Component({\n selector: 'lib-hbll-header',\n standalone: true,\n imports: [DatePipe, LowerCasePipe, LibraryHoursDatePipe],\n templateUrl: './hbll-header.component.html',\n styleUrl: './hbll-header.component.scss',\n})\nexport class HbllHeaderComponent implements AfterViewInit {\n private readonly r2 = inject(Renderer2);\n private readonly http = inject(HttpClient);\n\n // --- API ---\n protected name = input<string>('');\n @Output() login = new EventEmitter<void>();\n @Output() logout = new EventEmitter<void>();\n // -----------\n\n private accountInfoEl = viewChild<ElementRef>('accountInfo');\n\n protected isLoggedIn = computed(() => !!this.name());\n protected libraryHours = toSignal(this.http.get<LibraryHours>(LIBRARY_HOURS_API_URL));\n protected showAccountDropdown = false;\n\n ngAfterViewInit(): void {\n this.r2.listen('window', 'click', (e: Event) => {\n if (!this.accountInfoEl()?.nativeElement.contains(e.target))\n this.showAccountDropdown = false;\n });\n }\n}\n","<header role=\"banner\" class=\"wrapper\">\n <h1>\n <a href=\"https://lib.byu.edu/\">\n <img\n src=\"https://media.lib.byu.edu/web-assets/images/1.0.0/byu-library-logo-full.svg\"\n alt=\"BYU Library Logo\"\n />\n </a>\n </h1>\n <div id=\"libraryInfo\" class=\"wrapper\">\n @if (libraryHours()) {\n <div id=\"libraryHours\">\n <div class=\"wrapper\">\n <span class=\"material-symbols-outlined left-icon\"> schedule </span>\n {{\n libraryHours()?.is_closed\n ? \"CLOSED\"\n : \"Today's hours: \" +\n (libraryHours()!.date\n | libraryHoursDate : libraryHours()!.open_time\n | date : \"ha\"\n | lowercase) +\n \" - \" +\n (libraryHours()!.date\n | libraryHoursDate : libraryHours()!.close_time\n | date : \"ha\"\n | lowercase)\n }}\n </div>\n </div>\n }\n <div id=\"accountInfo\" #accountInfo>\n <button\n (click)=\"\n isLoggedIn()\n ? (showAccountDropdown = !showAccountDropdown)\n : login.emit()\n \"\n class=\"wrapper\"\n id=\"accountBtn\"\n >\n <span class=\"material-symbols-outlined left-icon\"> person </span>\n {{ isLoggedIn() ? name : \"Login\" }}\n @if (isLoggedIn()) {\n <span class=\"material-symbols-outlined\"> arrow_drop_down </span>\n }\n </button>\n @if (isLoggedIn() && showAccountDropdown) {\n <div id=\"accountDropdown\">\n <a class=\"item\">My Account</a>\n <a class=\"item\">Preferences</a>\n <button class=\"item\" (click)=\"logout.emit()\">Logout</button>\n </div>\n }\n </div>\n </div>\n</header>\n<nav></nav>\n","export const ADVANCED_SEARCH_QUALIFIER_MAP = {\n contains: 'contains',\n begins_with: 'begins with',\n exact: 'is (exact)',\n index: 'browse value',\n subject_lc: 'LC browse',\n subject_expanded: 'expanded browse',\n};\n\nexport const ADVANCED_SEARCH_FIELD_MAP = {\n abstract: 'Abstract',\n any: 'Any Field',\n callNumber: 'Call Number',\n contributor: 'Contributor',\n creator: 'Author/Creator',\n genre: 'Genre',\n isbn: 'ISBN',\n issn: 'ISSN',\n series: 'Series',\n source: 'Source',\n subject: 'Subject',\n title: 'Title',\n};\n\nexport const ADVANCED_SEARCH_QUERIES_LIMIT = 12;\n\nexport const PERIOD_OPTIONS = ['', '1', '2', '5', '10', 'custom'] as const;\n\nexport const ADVANCED_SEARCH_OPTIONS = {\n boolean: ['AND', 'OR', 'NOT'],\n // In SS-api, the EDS key for all fields is `allText`, however this is the default and is never used in the URL, so we omit it here.\n fields: ['any', 'title', 'creator', 'subject', 'issn', 'isbn'],\n localFields: ['callNumber', 'contributor', 'genre', 'series'],\n externalFields: ['source', 'abstract'],\n qualifiers: {\n any: ['contains'],\n title: ['contains', 'exact', 'begins_with', 'index'],\n callNumber: ['contains', 'exact', 'begins_with', 'index'],\n creator: ['contains', 'exact', 'begins_with', 'index'],\n contributor: ['contains', 'exact'],\n isbn: ['contains', 'exact'],\n issn: ['contains', 'exact'],\n genre: ['contains', 'exact'],\n subject: ['contains', 'exact', 'subject_lc', 'subject_expanded'],\n series: ['contains', 'exact'],\n },\n resultsPerPage: ['10', '20', '50', '100'],\n period: PERIOD_OPTIONS,\n languages: [\n 'eng',\n 'ara',\n 'chi',\n 'ces',\n 'dan',\n 'dut',\n 'fin',\n 'fre',\n 'ger',\n 'gre',\n 'heb',\n 'hin',\n 'hun',\n 'ice',\n 'ita',\n 'jpn',\n 'kor',\n 'lat',\n 'nor',\n 'pol',\n 'por',\n 'pan',\n 'rum',\n 'rus',\n 'spa',\n 'swe',\n 'wel',\n 'yid',\n ],\n} as const;\n\nexport const PRIMARY_BLUE = 'rgba(63, 112, 176, 1)';\nexport const PRIMARY_BLUE_HOVER = 'hsl(214, 48%, 60%, 1)';\nexport const PRIMARY_LIGHT_BLUE = 'rgba(223, 233, 247, 1)';\nexport const PRIMARY_PURPLE = '#8772A6';\nexport const PRIMARY_PURPLE_HOVER = '#7C659F';\nexport const DESTRUCTIVE_RED = 'hsl(5, 47%, 47%, 1)';\nexport const DESTRUCTIVE_RED_HOVER = 'hsl(5, 47%, 50%, 1)';\nexport const SECONDARY_TEXT_GRAY = 'rgba(112, 112, 112, 1)';\nexport const LIGHT_GRAY = 'rgba(230, 230, 230, 1)';\nexport const DROP_SHADOW_DARK_BLUE = 'rgba(51, 62, 77, 0.16)';\nexport const TEXT_SEMIBOLD = '600';\nexport const TEXT_BOLD = '700';\nexport const ANIMATION_LENGTH_STD = '0.15s';\nexport const LINE_HEIGHT_STD = '1.4';\nexport const CONTEXTUAL_SELECTOR_HEIGHT = '4.5rem';\nexport const CONTENT_MAX_WIDTH = '75rem';\nexport const CONTENT_PADDING = '5.4rem';\n","import { ADVANCED_SEARCH_OPTIONS } from '../constants';\n\nexport type AdvancedSearchBooleanOption = (typeof ADVANCED_SEARCH_OPTIONS.boolean)[number];\n\nexport type AdvancedSearchFieldOption = (typeof ADVANCED_SEARCH_OPTIONS.fields)[number];\n\nexport const isAdvancedSearchFieldOption = (\n field: string,\n): field is AdvancedSearchLocalFieldOption =>\n [...ADVANCED_SEARCH_OPTIONS.fields].includes(field as AdvancedSearchFieldOption);\n\nexport type AdvancedSearchLocalFieldOption = (typeof ADVANCED_SEARCH_OPTIONS.localFields)[number];\n\nexport const isAdvancedSearchLocalFieldOption = (\n field: string,\n): field is AdvancedSearchLocalFieldOption =>\n ADVANCED_SEARCH_OPTIONS.localFields.includes(field as AdvancedSearchLocalFieldOption);\n\nexport type AdvancedSearchExternalFieldOption =\n (typeof ADVANCED_SEARCH_OPTIONS.externalFields)[number];\n\nexport const isAdvancedSearchExternalFieldOption = (\n field: string,\n): field is AdvancedSearchExternalFieldOption =>\n ADVANCED_SEARCH_OPTIONS.externalFields.includes(field as AdvancedSearchExternalFieldOption);\n\nexport type AdvancedSearchQualifierOption =\n (typeof ADVANCED_SEARCH_OPTIONS.qualifiers)[keyof typeof ADVANCED_SEARCH_OPTIONS.qualifiers][number];\n\nexport type AdvancedSearchResultsPerPageOption =\n (typeof ADVANCED_SEARCH_OPTIONS.resultsPerPage)[number];\n\nexport type AdvancedSearchLanguageOption = (typeof ADVANCED_SEARCH_OPTIONS.languages)[number];\n\nexport type AdvancedSearchQualifier = keyof typeof ADVANCED_SEARCH_OPTIONS.qualifiers;\n\nexport interface AdvancedSearchQueryRow {\n boolean?: AdvancedSearchBooleanOption;\n field?:\n | AdvancedSearchFieldOption\n | AdvancedSearchLocalFieldOption\n | AdvancedSearchExternalFieldOption;\n qualifier?: AdvancedSearchQualifierOption;\n query: string;\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport {\n AdvancedSearchExternalFieldOption,\n AdvancedSearchFieldOption,\n AdvancedSearchLocalFieldOption,\n isAdvancedSearchExternalFieldOption,\n isAdvancedSearchFieldOption,\n isAdvancedSearchLocalFieldOption,\n} from '../models/advanced-search.model';\nimport { ADVANCED_SEARCH_OPTIONS } from '../constants';\nimport { SearchScope } from '../models/search-scope.model';\n\n/**\n * Returns the field value based on the scope. If a field value does not exist in a specific scope, the default is returned.\n */\n@Pipe({\n name: 'fieldByScope',\n standalone: true,\n})\nexport class FieldByScopePipe implements PipeTransform {\n transform(\n fieldValue:\n | AdvancedSearchFieldOption\n | AdvancedSearchLocalFieldOption\n | AdvancedSearchExternalFieldOption,\n scope: SearchScope,\n ):\n | AdvancedSearchFieldOption\n | AdvancedSearchLocalFieldOption\n | AdvancedSearchExternalFieldOption {\n if (\n isAdvancedSearchFieldOption(fieldValue) ||\n (scope === 'local'\n ? isAdvancedSearchLocalFieldOption(fieldValue)\n : isAdvancedSearchExternalFieldOption(fieldValue))\n )\n return fieldValue;\n return ADVANCED_SEARCH_OPTIONS.fields[0];\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport {\n ADVANCED_SEARCH_FIELD_MAP,\n ADVANCED_SEARCH_OPTIONS,\n ADVANCED_SEARCH_QUALIFIER_MAP,\n} from '../constants';\nimport {\n AdvancedSearchExternalFieldOption,\n AdvancedSearchFieldOption,\n AdvancedSearchLocalFieldOption,\n AdvancedSearchQueryRow,\n} from '../models/advanced-search.model';\nimport { SearchScope } from '../models/search-scope.model';\nimport { FieldByScopePipe } from './field-by-scope.pipe';\n\n@Pipe({\n name: 'ssAdvancedQueries',\n standalone: true,\n})\nexport class SsAdvancedQueriesPipe implements PipeTransform {\n constructor(private fieldByScopePipe: FieldByScopePipe) {}\n transform(queryRows: AdvancedSearchQueryRow[], scope: SearchScope): string {\n return queryRows\n .map((row, i) => {\n const b = i !== 0 ? row.boolean || ADVANCED_SEARCH_OPTIONS.boolean[0] : '';\n const f:\n | AdvancedSearchFieldOption\n | AdvancedSearchLocalFieldOption\n | AdvancedSearchExternalFieldOption = this.fieldByScopePipe.transform(\n row.field ?? ADVANCED_SEARCH_OPTIONS.fields[0],\n scope,\n );\n const o =\n row.qualifier ??\n ADVANCED_SEARCH_OPTIONS.qualifiers[\n f as AdvancedSearchFieldOption | AdvancedSearchLocalFieldOption\n ][0];\n return `${b ? b + ' ' : ''}${\n ADVANCED_SEARCH_FIELD_MAP[f]\n } ${ADVANCED_SEARCH_QUALIFIER_MAP[o as keyof typeof ADVANCED_SEARCH_QUALIFIER_MAP]} <b>${row.query}</b>`;\n })\n .join(' ');\n }\n}\n","import {\n trigger,\n transition,\n animate,\n style,\n group,\n query,\n animateChild,\n} from '@angular/animations';\n\nexport const libHbllExpandCollapse = trigger('libHbllExpandCollapse', [\n transition('void <=> *', []),\n transition(\n '* <=> *',\n [\n group([\n style({ height: '{{startHeight}}px' }),\n query('@*', [animateChild()], { optional: true }),\n animate('.15s ease-in-out'),\n ]),\n ],\n { params: { startHeight: '0px' } },\n ),\n]);\n\nexport const libHbllFadeInOut = trigger('libHbllFadeInOut', [\n transition(':enter', [style({ opacity: '0' }), animate('.15s ease-out')]),\n transition(':leave', [animate('.15s ease-out', style({ opacity: '0' }))]),\n]);\n\nexport const libHbllFadeIn = trigger('libHbllFadeIn', [\n transition(':enter', [style({ opacity: '0' }), animate('.15s ease-out')]),\n]);\n\nexport const libHbllFadeOut = trigger('libHbllFadeOut', [\n transition(':leave', [animate('.15s ease-out', style({ opacity: '0' }))]),\n]);\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\n\n/**\n * Validator method to check if a `FormGroup<{ from: FormControl<string>; to: FormControl<string> }>` is valid.\n * The FormGroup is considered valid if either both `from` and `to` are set, or both are empty strings.\n * @returns {ValidationErrors | null} validation errors, if any\n */\nexport const validateDateRangeFields = (): ValidatorFn => {\n return (control: AbstractControl): ValidationErrors | null => {\n const from: string = control.get('from')?.value;\n const to: string = control.get('to')?.value;\n // Valid if both fields are set or both are empty.\n if ((!from && !to) || (from && to)) return null;\n return from ? { toInvalid: true } : { fromInvalid: true };\n };\n};\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n Output,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n MatAutocompleteModule,\n MatAutocompleteSelectedEvent,\n} from '@angular/material/autocomplete';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatChipInputEvent, MatChipsModule } from '@angular/material/chips';\nimport { COMMA, ENTER } from '@angular/cdk/keycodes';\nimport { MatIconModule } from '@angular/material/icon';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { Observable, combineLatest } from 'rxjs';\nimport { map, startWith } from 'rxjs/operators';\n\n@Component({\n selector: 'lib-hbll-multi-select',\n standalone: true,\n imports: [\n CommonModule,\n MatChipsModule,\n MatFormFieldModule,\n MatAutocompleteModule,\n ReactiveFormsModule,\n MatIconModule,\n ],\n // Necessary to override material design styles.\n // IMPORTANT: Tightly scope classes and ids to this component if they are necessary.\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './hbll-multi-select.component.html',\n styleUrls: ['./hbll-multi-select.component.scss'],\n})\nexport class HbllMultiSelectComponent {\n @ViewChild('input') private inputRef!: ElementRef<HTMLInputElement>;\n @Input() allOptions: Record<string, string> = {};\n @Input() label = '';\n /**\n * An array that indicates which keys are selected.\n */\n @Input() selectedKeys: string[] = [];\n /**\n * An EventEmitter that emits an array of keys indicating which options are currently selected.\n */\n @Output() selectedKeysChange = new EventEmitter<string[]>();\n\n protected inputControl = new FormControl('');\n protected filteredOptions$: Observable<string[]> = combineLatest([\n this.inputControl.valueChanges.pipe(startWith('')),\n this.selectedKeysChange.asObservable().pipe(startWith([])),\n ]).pipe(\n map(([key]: [string | null, unknown]) =>\n // Display filtered options if there is a value, else display all options currently not selected.\n key\n ? this.filterOptions(key)\n : Object.keys(this.allOptions).filter(\n (key) => !this.selectedKeys.find((selectedOption) => key === selectedOption),\n ),\n ),\n );\n protected separatorKeysCodes: number[] = [ENTER, COMMA];\n\n /**\n * Adds a key from the input to the array of selected key.\n * The value from the input must match a key from the record of all options.\n * @param {MatChipInputEvent} event MatChipInputEvent\n */\n protected addOption(event: MatChipInputEvent): void {\n this.addOptionToSelectedOptions(event.value);\n }\n\n /**\n * Removes a key from the array of selected options and emits the new selected keys.\n * @param {MultiSelectKeyValPair} key key to remove\n */\n protected removeOption(key: string): void {\n const index = this.selectedKeys.indexOf(key);\n if (index >= 0) {\n this.selectedKeys.splice(index, 1);\n this.selectedKeysChange.emit(this.selectedKeys);\n }\n }\n\n /**\n * Adds an option to the array of selected keys when a user selects from the autocomplete.\n * @param {MatAutocompleteSelectedEvent} event MatAutocompleteSelectedEvent\n */\n protected selectOption = (event: MatAutocompleteSelectedEvent): void => {\n this.addOptionToSelectedOptions(event.option.value);\n };\n\n /**\n * Filters the options by the supplied key as well as the currently selected key.\n * @param {string} key key to filter by.\n * @returns {string[]} the filtered keys\n */\n private filterOptions = (newKey: string): string[] => {\n return Object.keys(this.allOptions).filter(\n (key: string) => this.allOptions[key] !== newKey && !this.selectedKeys.includes(key),\n );\n };\n\n /**\n * Adds a key to the selected keys array if the option is truthy and not already in the array.\n * The input is also cleared (if available), and the new selected keys are emitted.\n * @param {key} option key to add\n */\n private addOptionToSelectedOptions = (key: string): void => {\n if (key && !this.selectedKeys.includes(key) && this.allOptions[key]) {\n this.selectedKeys.push(key);\n this.inputControl.setValue('');\n this.selectedKeysChange.emit(this.selectedKeys);\n if (this.inputRef) this.inputRef.nativeElement.value = '';\n }\n };\n}\n","<div class=\"hbll-multi-select\">\n <mat-form-field appearance=\"outline\">\n <mat-chip-grid #chipGrid [attr.aria-label]=\"label + ' selection'\">\n @for (key of selectedKeys; track key) {\n <mat-chip-row (removed)=\"removeOption(key)\" data-testid=\"matChipRow\">\n {{ allOptions[key] }}\n <button\n matChipRemove\n [attr.aria-label]=\"'remove ' + allOptions[key]\"\n [attr.data-testid]=\"'remove' + key\"\n >\n <span class=\"material-symbols-outlined icon\"> cancel </span>\n </button>\n </mat-chip-row>\n }\n </mat-chip-grid>\n <label class=\"hidden\" for=\"input\">{{ label }}</label>\n <input\n [placeholder]=\"label | titlecase\"\n #input\n id=\"input\"\n [formControl]=\"inputControl\"\n [matChipInputFor]=\"chipGrid\"\n [matAutocomplete]=\"auto\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\n (matChipInputTokenEnd)=\"addOption($event)\"\n data-testid=\"input\"\n />\n <mat-autocomplete\n #auto=\"matAutocomplete\"\n (optionSelected)=\"selectOption($event)\"\n data-testid=\"autocomplete\"\n >\n @for (key of filteredOptions$ | async; track key) {\n <mat-option [value]=\"key\" data-testid=\"autocompleteOption\">\n {{ allOptions[key] }}\n </mat-option>\n }\n </mat-autocomplete>\n </mat-form-field>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'lib-hbll-checkbox',\n templateUrl: './hbll-checkbox.component.html',\n styleUrls: ['./hbll-checkbox.component.scss'],\n standalone: true,\n imports: [CommonModule],\n})\nexport class HbllCheckboxComponent {\n @Input() isChecked = false;\n}\n","<span class=\"checkbox-container\" [class.checked]=\"isChecked\">\n @if (isChecked) {\n <span class=\"material-symbols-outlined icon\"> check </span>\n }\n</span>\n","import {\n Directive,\n ElementRef,\n HostListener,\n Input,\n inject,\n type OnChanges,\n type OnInit,\n} from '@angular/core';\nimport {\n ANIMATION_LENGTH_STD,\n DESTRUCTIVE_RED,\n DESTRUCTIVE_RED_HOVER,\n LIGHT_GRAY,\n PRIMARY_BLUE,\n PRIMARY_BLUE_HOVER,\n PRIMARY_PURPLE,\n PRIMARY_PURPLE_HOVER,\n SECONDARY_TEXT_GRAY,\n TEXT_SEMIBOLD,\n} from '../../ss-search-bar/constants';\n\nconst BG_COLORS = {\n blue: PRIMARY_BLUE,\n purple: PRIMARY_PURPLE,\n};\n\nconst BG_COLORS_HOVER = {\n blue: PRIMARY_BLUE_HOVER,\n purple: PRIMARY_PURPLE_HOVER,\n};\n\n@Directive({\n selector: '[libHbllPillBtn]',\n standalone: true,\n})\nexport class HbllPillBtnDirective implements OnInit, OnChanges {\n private readonly el = inject(ElementRef);\n @Input() isDestructiveStyle = false;\n @Input() isDisabled = false;\n @Input() isFullWidth = false;\n @Input() color: 'blue' | 'purple' = 'purple';\n\n @HostListener('mouseenter') onMouseEnter() {\n if (this.isDisabled) {\n return;\n } else {\n if (!this.isDestructiveStyle) {\n this.el.nativeElement.style.backgroundColor = BG_COLORS_HOVER[this.color];\n } else {\n this.el.nativeElement.style.backgroundColor = DESTRUCTIVE_RED_HOVER;\n }\n }\n this.el.nativeElement.style.cursor = 'pointer';\n }\n\n @HostListener('mouseleave') onMouseLeave() {\n if (this.isDisabled) {\n return;\n } else {\n if (!this.isDestructiveStyle) {\n this.el.nativeElement.style.backgroundColor = BG_COLORS[this.color];\n } else {\n this.el.nativeElement.style.backgroundColor = DESTRUCTIVE_RED;\n }\n }\n this.el.nativeElement.style.cursor = 'pointer';\n }\n\n @HostListener('click') onClick() {\n if (this.isDisabled) {\n return;\n } else {\n if (!this.isDestructiveStyle) {\n this.el.nativeElement.style.backgroundColor = BG_COLORS[this.color];\n } else {\n this.el.nativeElement.style.backgroundColor = DESTRUCTIVE_RED;\n }\n }\n this.el.nativeElement.style.cursor = 'pointer';\n }\n\n ngOnInit() {\n this.setupButton();\n }\n\n ngOnChanges() {\n this.setupButton();\n }\n\n setupButton() {\n if (this.isDisabled) {\n this.el.nativeElement.style.color = SECONDARY_TEXT_GRAY;\n this.el.nativeElement.style.backgroundColor = LIGHT_GRAY;\n } else {\n if (!this.isDestructiveStyle) {\n this.el.nativeElement.style.backgroundColor = BG_COLORS[this.color];\n } else {\n this.el.nativeElement.style.backgroundColor = DESTRUCTIVE_RED;\n }\n this.el.nativeElement.style.color = 'white';\n }\n this.el.nativeElement.style.transition = 'all ' + ANIMATION_LENGTH_STD;\n this.el.nativeElement.style.fontSize = '1em';\n this.el.nativeElement.style.fontWeight = TEXT_SEMIBOLD;\n this.el.nativeElement.style.textAlign = 'center';\n this.el.nativeElement.style.display = this.isFullWidth ? 'flex' : 'inline-flex';\n this.el.nativeElement.style.justifyContent = 'center';\n this.el.nativeElement.style.alignItems = 'center';\n this.el.nativeElement.style.width = this.isFullWidth ? '100%' : 'auto';\n this.el.nativeElement.style.borderRadius = '100em';\n this.el.nativeElement.style.padding = '0.4em 1.3em';\n this.el.nativeElement.style.boxSizing = 'border-box';\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n Output,\n inject,\n} from '@angular/core';\nimport { NonNullableFormBuilder, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { libHbllFadeInOut } from '../../animations/animations';\nimport { validateDateRangeFields } from '../utils';\n\n@Component({\n selector: 'lib-date-range',\n templateUrl: './date-range.component.html',\n styleUrls: ['./date-range.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule],\n animations: [libHbllFadeInOut],\n})\nexport class DateRangeComponent {\n private readonly fb = inject(NonNullableFormBuilder);\n /**\n * Emits `{ from: string, to: string }` object if both values are set to a valid or empty state by the user.\n */\n @Output() validDateChange = new EventEmitter<{ from: string; to: string }>();\n @Output() fromChange = new EventEmitter<string>();\n @Output() toChange = new EventEmitter<string>();\n protected dateForm = this.fb.group(\n {\n from: ['', [Validators.pattern('^[0-9]{4}$')]],\n to: ['', [Validators.pattern('^[0-9]{4}$')]],\n },\n { validators: validateDateRangeFields() },\n );\n @Input() set from(from: string) {\n if (from !== this.dateForm.controls.from.value) this.dateForm.controls.from.setValue(from);\n }\n @Input() set to(to: string) {\n if (to !== this.dateForm.controls.to.value) this.dateForm.controls.to.setValue(to);\n }\n protected onFromChange = () => {\n this.onInputChange();\n this.fromChange.emit(this.dateForm.controls.from.value);\n };\n protected onToChange = () => {\n this.onInputChange();\n this.toChange.emit(this.dateForm.controls.to.value);\n };\n\n private onInputChange = () => {\n let from = this.dateForm.controls.from.value;\n let to = this.dateForm.controls.to.value;\n if (from && to && this.dateForm.controls.from.valid && this.dateForm.controls.to.valid) {\n // Ensure 'to' contains the larger year. Swap if necessary.\n if (parseInt(from) > parseInt(to)) {\n const swap = from;\n from = to;\n to = swap;\n }\n this.validDateChange.emit({ from, to });\n } else if (!from && !to) {\n this.validDateChange.emit({ from, to });\n }\n };\n}\n","<form id=\"from-to\" data-testid=\"from-to\" [formGroup]=\"dateForm\">\n <label for=\"fromFacet\">Between</label>\n <input\n formControlName=\"from\"\n id=\"fromFacet\"\n name=\"fromFacet\"\n data-testid=\"from\"\n placeholder=\"YYYY\"\n inputmode=\"numeric\"\n minlength=\"4\"\n maxlength=\"4\"\n (input)=\"onFromChange()\"\n [class.error]=\"\n dateForm.errors?.['fromInvalid'] || dateForm.controls.from.errors?.['pattern']\n \"\n />\n <label for=\"toFacet\">and</label>\n <input\n formControlName=\"to\"\n id=\"toFacet\"\n name=\"toFacet\"\n data-testid=\"to\"\n placeholder=\"YYYY\"\n inputmode=\"numeric\"\n minlength=\"4\"\n maxlength=\"4\"\n (input)=\"onToChange()\"\n [class.error]=\"dateForm.errors?.['toInvalid'] || dateForm.controls.to.errors?.['pattern']\"\n />\n</form>\n","import {\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n Output,\n ViewChild,\n inject,\n} from '@angular/core';\nimport {\n FormControl,\n FormGroup,\n NonNullableFormBuilder,\n ReactiveFormsModule,\n Validators,\n} from '@angular/forms';\nimport { MatTooltip, MatTooltipModule } from '@angular/material/tooltip';\nimport { filter, startWith, tap } from 'rxjs/operators';\nimport {\n AdvancedSearchBooleanOption,\n AdvancedSearchLocalFieldOption,\n AdvancedSearchLanguageOption,\n AdvancedSearchQualifierOption,\n AdvancedSearchQualifier,\n AdvancedSearchExternalFieldOption,\n AdvancedSearchQueryRow,\n AdvancedSearchFieldOption,\n isAdvancedSearchFieldOption,\n isAdvancedSearchLocalFieldOption,\n isAdvancedSearchExternalFieldOption,\n} from '../models/advanced-search.model';\nimport { Subscription } from 'rxjs';\nimport { SearchConfig } from '../ss-search-bar.component';\nimport { validateDateRangeFields } from '../utils';\nimport { CommonModule } from '@angular/common';\nimport {\n ADVANCED_SEARCH_FIELD_MAP,\n ADVANCED_SEARCH_OPTIONS,\n ADVANCED_SEARCH_QUALIFIER_MAP,\n ADVANCED_SEARCH_QUERIES_LIMIT,\n} from '../constants';\nimport { MatIconModule } from '@angular/material/icon';\nimport { HbllMultiSelectComponent } from '../../hbll-multi-select/hbll-multi-select.component';\nimport { HbllCheckboxComponent } from '../../hbll-checkbox/hbll-checkbox.component';\nimport { HbllPillBtnDirective } from '../../directives/hbll-pill-btn/hbll-pill-btn.directive';\nimport { DateRangeComponent } from '../date-range/date-range.component';\n\ntype QueryRow = {\n boolean: FormControl<AdvancedSearchBooleanOption>;\n field: FormControl<\n | AdvancedSearchFieldOption\n | AdvancedSearchLocalFieldOption\n | AdvancedSearchExternalFieldOption\n >;\n qualifier: FormControl<AdvancedSearchQualifierOption>;\n query: FormControl<string>;\n};\n\nconst DATE_VALIDATOR_REGEX = '^[0-9]{4}$';\n\n@Component({\n selector: 'lib-ss-advanced-search',\n standalone: true,\n templateUrl: './advanced-search.component.html',\n styleUrls: ['./advanced-search.component.scss'],\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatTooltipModule,\n MatIconModule,\n HbllMultiSelectComponent,\n HbllCheckboxComponent,\n HbllPillBtnDirective,\n DateRangeComponent,\n ],\n})\nexport class AdvancedSearchComponent implements OnDestroy {\n private readonly fb = inject(NonNullableFormBuilder);\n private _config!: SearchConfig;\n @Input({ required: true }) set config(config: SearchConfig) {\n this._config = config;\n this.setupForm();\n }\n get config() {\n return this._config;\n }\n @Output() advancedSearch = new EventEmitter<SearchConfig>();\n\n // Though multiple instances exists, this represent query 1.\n @ViewChild('searchInput') private searchInput!: ElementRef;\n // The tooltip is disabled in the template.\n // It is enabled and displayed if a user searches against an empty query (simple or q1).\n // Any change to the search field disables the tooltip.\n @ViewChild(MatTooltip) private inputTooltip!: MatTooltip;\n\n private subscription = new Subscription();\n\n ngOnDestroy(): void {\n this.subscription.unsubscribe();\n }\n\n /**\n * Takes a `FormGroup` and syncs up the `field` and `qualifier` values.\n * After syncing, when the `field` value changes, the `qualifier` value will update appropriately.\n */\n private syncUpFieldAndQualifier = (\n fg: FormGroup<{\n boolean: FormControl;\n field: FormControl;\n qualifier: FormControl;\n query: FormControl;\n }>,\n scope: SearchConfig['scope'],\n ) => {\n this.subscription.add(\n fg.controls.field.valueChanges\n .pipe(\n filter(() => scope === 'local'),\n tap((val: AdvancedSearchQualifier) =>\n fg.controls.qualifier.setValue(ADVANCED_SEARCH_OPTIONS.qualifiers[val][0]),\n ),\n )\n .subscribe(),\n );\n };\n\n protected advancedSearchForm = this.fb.group({\n queries: this.fb.array<FormGroup<QueryRow>>(\n [],\n [Validators.maxLength(ADVANCED_SEARCH_QUERIES_LIMIT)],\n ),\n types: [[] as string[]],\n collections: [[] as string[]],\n languages: [[] as AdvancedSearchLanguageOption[]],\n datePublished: this.fb.group(\n {\n from: ['', [Validators.maxLength(4), Validators.pattern(DATE_VALIDATOR_REGEX)]],\n to: ['', [Validators.maxLength(4), Validators.pattern(DATE_VALIDATOR_REGEX)]],\n },\n { validators: validateDateRangeFields() },\n ),\n limitResults: this.fb.group({\n peerReviewed: [false],\n }),\n expandResults: this.fb.group({\n applyRelatedWords: [false],\n applyEquivalentSubjects: [false],\n fullText: [false],\n }),\n });\n\n protected isSubmitted = false;\n protected advancedSearchOptions = ADVANCED_SEARCH_OPTIONS;\n protected advancedSearchFieldMap = ADVANCED_SEARCH_FIELD_MAP;\n protected advancedSearchQualifierMap = ADVANCED_SEARCH_QUALIFIER_MAP;\n\n get queries() {\n return this.advancedSearchForm.controls.queries;\n }\n get types() {\n return this.advancedSearchForm.controls.types;\n }\n get collections() {\n return this.advancedSearchForm.controls.collections;\n }\n get languages() {\n return this.advancedSearchForm.controls.languages;\n }\n get from() {\n return this.advancedSearchForm.controls.datePublished.controls.from;\n }\n get to() {\n return this.advancedSearchForm.controls.datePublished.controls.to;\n }\n get peerReviewed() {\n return this.advancedSearchForm.controls.limitResults.controls.peerReviewed;\n }\n get fullText() {\n return this.advancedSearchForm.controls.expandResults.controls.fullText;\n }\n get applyRelatedWords() {\n return this.advancedSearchForm.controls.expandResults.controls.applyRelatedWords;\n }\n get applyEquivalentSubjects() {\n return this.advancedSearchForm.controls.expandResults.controls.applyEquivalentSubjects;\n }\n\n /**\n * Add a query to `queries` `FormArray`. This FormGroup has an additional `boolean` control.\n */\n protected addQuery = () => {\n this.queries.push(\n this.fb.group({\n boolean: [ADVANCED_SEARCH_OPTIONS.boolean[0] as AdvancedSearchBooleanOption],\n field: [\n ADVANCED_SEARCH_OPTIONS.fields[0] as\n | AdvancedSearchFieldOption\n | AdvancedSearchLocalFieldOption\n | AdvancedSearchExternalFieldOption,\n ],\n qualifier: [\n ADVANCED_SEARCH_OPTIONS.qualifiers[\n ADVANCED_SEARCH_OPTIONS.localFields[0]\n ][0] as AdvancedSearchQualifierOption,\n ],\n query: ['', Validators.required],\n }),\n );\n this.syncUpFieldAndQualifier(this.queries.at(-1), this.config.scope);\n };\n\n protected removeQuery = (i: number) => {\n this.queries.removeAt(i);\n };\n\n /**\n * Prepares appropriate query params before performing a local advanced search.\n */\n protected doLocalAdvancedSearch = () => {\n this.doAdvancedSearch({\n localAdvancedSearch: {\n ...this.config.localAdvancedSearch,\n selectedResourceTypes: this.types.value,\n selectedCollections: this.collections.value,\n },\n });\n };\n\n /**\n * Prepares appropriate query params before performing an external advanced search.\n */\n protected doExternalAdvancedSearch = () => {\n // Compares 'from' and 'to' to ensure 'to' is greater than / equal to 'from', swaps them if not\n const from = this.from.value\n ? parseInt(this.from.value) <= parseInt(this.to.value)\n ? this.from.value\n : this.to.value\n : '';\n // Compares 'from' and 'to' to ensure 'to' is greater than / equal to 'from', swaps them if not\n const to = this.to.value\n ? parseInt(this.to.value) >= parseInt(this.from.value)\n ? this.to.value\n : this.from.value\n : '';\n this.doAdvancedSearch({\n externalAdvancedSearch: {\n ...this.config.externalAdvancedSearch,\n datePublished: { from, to },\n selectedLanguages: this.languages.value,\n limitResults: {\n peerReviewed: this.peerReviewed.value,\n },\n expandResults: {\n applyRelatedWords: this.applyRelatedWords.value,\n applyEquivalentSubjects: this.applyEquivalentSubjects.value,\n fullText: this.fullText.value,\n },\n },\n });\n };\n\n /**\n * Verifies that there is a query to use, gathers all other query parameters needed, then performs an advanced search via `router.navigate()`.\n * @param {Record<string, string>} queryParams base set of query params to navigate with\n */\n private doAdvancedSearch = (updatedProps: Partial<SearchConfig>): void => {\n this.isSubmitted = true;\n // Don't perform a search unless there is at least one query\n if (\n this.queries.at(0).controls.query.invalid &&\n !this.queries.value.some((v) => !!v.query)\n ) {\n this.showSearchValidationToolTip();\n return;\n }\n // Don't perform a search unless the date form is valid\n if (this.advancedSearchForm.controls.datePublished.invalid) return;\n\n this.advancedSearch.emit({\n ...this.config,\n ...updatedProps,\n advancedSearchQueryRows: this.queries.value as AdvancedSearchQueryRow[],\n });\n this.isSubmitted = false;\n };\n\n private showSearchValidationToolTip = () => {\n this.searchInput.nativeElement.focus();\n this.inputTooltip.disabled = false;\n this.inputTooltip.show();\n };\n\n private setupForm = () => {\n this.queries.clear();\n // Always keep at least two queries available\n this.addQuery();\n this.addQuery();\n\n // Ensure validation tooltip closes when uses enters a query\n this.subscription.add(\n this.queries\n .at(0)\n .controls.query.valueChanges.pipe(startWith(''))\n .pipe(filter(() => !!this.inputTooltip))\n .subscribe(() => (this.inputTooltip.disabled = true)),\n );\n\n // If no `q{NUM}` use `q` for first query\n if (!this.config.advancedSearchQueryRows.length)\n this.queries.at(0).controls.query.setValue(this.config.q);\n\n this.config.advancedSearchQueryRows.forEach((queryRow, i) => {\n // Add a query form control for every q{num} key after the first.\n let queryControl = null;\n if (i === 0 || i === 1) {\n queryControl = this.queries.at(i);\n } else {\n this.addQuery();\n queryControl = this.queries.at(-1);\n }\n\n // Add the query value.\n queryControl.controls.query.setValue(queryRow.query);\n\n // Add the field value, if available.\n if (\n queryRow.field && // Only set the field if the value belongs to the current scope\n (isAdvancedSearchFieldOption(queryRow.field) ||\n (this.config.scope === 'local'\n ? isAdvancedSearchLocalFieldOption(queryRow.field)\n : isAdvancedSearchExternalFieldOption(queryRow.field)))\n )\n queryControl.controls.field.setValue(queryRow.field);\n else queryControl.controls.field.setValue(this.advancedSearchOptions.fields[0]);\n\n // Add the qualifier value, if available and a local search.\n if (this.config.scope === 'local' && queryRow.qualifier)\n queryControl.controls.qualifier.setValue(\n queryRow.qualifier ||\n this.advancedSearchOptions.qualifiers[\n queryControl.controls.field.value as\n | AdvancedSearchFieldOption\n | AdvancedSearchLocalFieldOption\n ],\n );\n\n // Add the boolean, if available and not the first query.\n if (i !== 0 && queryRow.boolean)\n queryControl.controls.boolean.setValue(queryRow.boolean);\n });\n if (this.config.scope === 'local') {\n this.types.setValue(this.config.localAdvancedSearch.selectedResourceTypes);\n this.collections.setValue(this.config.localAdvancedSearch.selectedCollections);\n } else {\n this.languages.setValue(\n this.config.externalAdvancedSearch\n .selectedLanguages as AdvancedSearchLanguageOption[],\n );\n this.peerReviewed.setValue(\n this.config.externalAdvancedSearch.limitResults.peerReviewed,\n );\n this.applyRelatedWords.setValue(\n this.config.externalAdvancedSearch.expandResults.applyRelatedWords,\n );\n this.applyEquivalentSubjects.setValue(\n this.config.externalAdvancedSearch.expandResults.applyEquivalentSubjects,\n );\n this.fullText.setValue(this.config.externalAdvancedSearch.expandResults.fullText);\n this.from.setValue(this.config.externalAdvancedSearch.datePublished.from);\n this.to.setValue(this.config.externalAdvancedSearch.datePublished.to);\n }\n };\n}\n","<form\n data-testid=\"advancedSearchForm\"\n (submit)=\"config.scope === 'local' ? doLocalAdvancedSearch() : doExternalAdvancedSearch()\"\n [formGroup]=\"advancedSearchForm\"\n class=\"adv-search-wrapper\"\n>\n <h3>Advanced Search</h3>\n <!-- Queries -->\n @for (query of queries.controls; track $index; let queryIndex = $index) {\n <div class=\"adv-search-row\" [formGroup]=\"query\">\n <!-- Boolean operator -->\n <!-- Add boolean for each row except for first -->\n @if (!$first) {\n <div class=\"select-wrapper\">\n <select\n [id]=\"'boolean' + queryIndex\"\n [formControlName]=\"'boolean'\"\n [attr.data-testid]=\"'boolean' + queryIndex\"\n >\n @for (boolean of advancedSearchOptions.boolean; track boolean) {\n <option [ngValue]=\"boolean\">\n {{ boolean }}\n </option>\n }\n </select>\n </div>\n }\n <!-- Field -->\n <label [for]=\"'field' + queryIndex\" class=\"hidden\">Field {{ queryIndex }}</label>\n <div class=\"select-wrapper\">\n <select\n [id]=\"'field' + queryIndex\"\n [formControlName]=\"'field'\"\n [attr.data-testid]=\"'field' + queryIndex\"\n >\n @for (field of advancedSearchOptions.fields; track field) {\n <option [ngValue]=\"field\">\n {{ advancedSearchFieldMap[field] }}\n </option>\n }\n <optgroup\n [label]=\"(config.scope === 'external' ? 'Online' : 'Library') + ' Specific'\"\n >\n @for (\n field of config.scope === 'external'\n ? advancedSearchOptions.externalFields\n : advancedSearchOptions.localFields;\n track field\n ) {\n <option [ngValue]=\"field\">\n {{ advancedSearchFieldMap[field] }}\n </option>\n }\n </optgroup>\n </select>\n </div>\n <!-- Qualifiers are only available for local searches -->\n @if (config.scope === 'local') {\n <label [for]=\"'qualifier' + queryIndex\" class=\"hidden\"\n >Match Criteria {{ queryIndex }}</label\n >\n <div class=\"select-wrapper\">\n <select\n [id]=\"'qualifier' + queryIndex\"\n [formControlName]=\"'qualifier'\"\n [attr.data-testid]=\"'qualifier' + queryIndex\"\n >\n <!-- $any because a field can technically be local or external, though this block is scoped strictly to local fields -->\n @for (\n qualifier of $any(advancedSearchOptions.qualifiers)[\n query.controls.field.value\n ];\n track qualifier;\n let optionIndex = $index\n ) {\n <option\n [ngValue]=\"qualifier\"\n [attr.data-testid]=\"\n 'qualifier' + queryIndex + '-option' + optionIndex\n \"\n >\n {{ $any(advancedSearchQualifierMap)[qualifier] }}\n </option>\n }\n </select>\n </div>\n }\n <!-- Query -->\n <label [for]=\"'query' + queryIndex\" class=\"hidden\">Query {{ queryIndex }}</label>\n <div class=\"query-input\">\n <input\n #searchInput\n [id]=\"'query' + queryIndex\"\n [formControlName]=\"'query'\"\n [attr.data-testid]=\"'query' + queryIndex\"\n required\n aria-required=\"true\"\n matTooltip=\"Fill out this field\"\n [matTooltipPosition]=\"'above'\"\n [matTooltipDisabled]=\"true\"\n [attr.aria-invalid]=\"isSubmitted && queries.at(0).controls.query.invalid\"\n aria-describedby=\"invalidInputDesc\"\n />\n </div>\n @if (!$first) {\n <button\n class=\"row-cancel\"\n type=\"button\"\n (click)=\"removeQuery(queryIndex)\"\n [attr.data-testid]=\"'cancelRow' + queryIndex\"\n >\n <span class=\"material-symbols-outlined icon\"> cancel </span>\n </button>\n }\n </div>\n }\n <button\n type=\"button\"\n (click)=\"addQuery()\"\n id=\"addQueryBtn\"\n data-testid=\"addQuery\"\n [disabled]=\"queries.length > 11\"\n >\n <span class=\"material-symbols-outlined icon\"> add </span>\n Add a row\n </button>\n <!-- OTHER OPTIONS -->\n <div class=\"other-options\">\n <!-- LOCAL -->\n @if (config.scope === 'local') {\n <!-- Type -->\n <div data-testid=\"resourceType\">\n <h4>Resource Type</h4>\n <div class=\"multi-select-wrapper\">\n <lib-hbll-multi-select\n [label]=\"'Resource Type'\"\n [allOptions]=\"config.localAdvancedSearch.availableResourceTypes\"\n [selectedKeys]=\"types.value\"\n (selectedKeysChange)=\"types.setValue($event)\"\n ></lib-hbll-multi-select>\n </div>\n </div>\n <!-- Collection -->\n <div data-testid=\"collection\">\n <h4>Collection</h4>\n <div class=\"multi-select-wrapper\">\n <lib-hbll-multi-select\n [label]=\"'Collection'\"\n [allOptions]=\"config.localAdvancedSearch.availableCollections\"\n [selectedKeys]=\"collections.value\"\n (selectedKeysChange)=\"collections.setValue($event)\"\n ></lib-hbll-multi-select>\n </div>\n </div>\n }\n <!-- EXTERNAL -->\n @if (config.scope === 'external') {\n <div formGroupName=\"limitResults\" class=\"checkbox-section\">\n <h4>For Fewer Results Try</h4>\n <!-- Peer reviewed -->\n <label class=\"checkbox-label\" for=\"peerReviewed\" tabindex=\"0\">\n <input\n class=\"hidden\"\n id=\"peerReviewed\"\n type=\"checkbox\"\n [formControlName]=\"'peerReviewed'\"\n data-testid=\"peerReviewed\"\n />\n <lib-hbll-checkbox [isChecked]=\"peerReviewed.value\"></lib-hbll-checkbox>\n <span class=\"label-text\">Peer reviewed journal articles</span>\n </label>\n </div>\n <div formGroupName=\"expandResults\" class=\"checkbox-section\">\n <h4>For More Results Try</h4>\n <!-- Apply related words -->\n <label class=\"checkbox-label\" for=\"applyRelatedWords\" tabindex=\"0\">\n <input\n class=\"hidden\"\n id=\"applyRelatedWords\"\n type=\"checkbox\"\n [formControlName]=\"'applyRelatedWords'\"\n data-testid=\"applyRelatedWords\"\n />\n <lib-hbll-checkbox [isChecked]=\"applyRelatedWords.value\"></lib-hbll-checkbox>\n <span class=\"label-text\">Apply related words</span>\n </label>\n <!-- Apply equivalent subjects -->\n <label class=\"checkbox-label\" for=\"applyEquivalentSubjects\" tabindex=\"0\">\n <input\n class=\"hidden\"\n id=\"applyEquivalentSubjects\"\n type=\"checkbox\"\n [formControlName]=\"'applyEquivalentSubjects'\"\n data-testid=\"applyEquivalentSubjects\"\n />\n <lib-hbll-checkbox\n [isChecked]=\"applyEquivalentSubjects.value\"\n ></lib-hbll-checkbox>\n <span class=\"label-text\">Apply equivalent subjects</span>\n </label>\n <!-- Full text -->\n <label class=\"checkbox-label\" for=\"fullText\" tabindex=\"0\">\n <input\n class=\"hidden\"\n id=\"fullText\"\n type=\"checkbox\"\n [formControlName]=\"'fullText'\"\n data-testid=\"fullText\"\n />\n <lib-hbll-checkbox [isChecked]=\"fullText.value\"></lib-hbll-checkbox>\n <span class=\"label-text\"\n >Include results the library doesn't have access to</span\n >\n </label>\n </div>\n <!-- Date -->\n <div id=\"dateOptions\">\n <h4>Date Published</h4>\n <lib-date-range\n [from]=\"from.value\"\n [to]=\"to.value\"\n (fromChange)=\"from.setValue($event)\"\n (toChange)=\"to.setValue($event)\"\n ></lib-date-range>\n </div>\n <!-- Language -->\n <div>\n <h4>Language</h4>\n <lib-hbll-multi-select\n [label]=\"'language'\"\n [allOptions]=\"config.externalAdvancedSearch.availableLanguages\"\n [selectedKeys]=\"languages.value\"\n (selectedKeysChange)=\"languages.setValue($any($event))\"\n ></lib-hbll-multi-select>\n </div>\n }\n </div>\n <div id=\"advSearchFooter\">\n <button libHbllPillBtn [color]=\"'blue'\" type=\"submit\" data-testid=\"advSearchSubmitButton\">\n Search\n </button>\n </div>\n</form>\n","import {\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewChild,\n inject,\n} from '@angular/core';\nimport { FormBuilder, FormControl, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { MatTooltip, MatTooltipModule } from '@angular/material/tooltip';\nimport { Subscription } from 'rxjs';\nimport { startWith, filter } from 'rxjs/operators';\nimport { SearchConfig } from '../ss-search-bar.component';\nimport { MatIconModule } from '@angular/material/icon';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'lib-ss-simple-search',\n standalone: true,\n imports: [MatTooltipModule, MatIconModule, ReactiveFormsModule, CommonModule],\n templateUrl: './simple-search.component.html',\n styleUrls: ['./simple-search.component.scss'],\n})\nexport class SimpleSearchComponent implements OnInit, OnDestroy {\n private readonly fb = inject(FormBuilder);\n @ViewChild('searchInput') private searchInput!: ElementRef;\n // The tooltip is disabled in the template.\n // It is enabled and displayed if a user searches against an empty query (simple or q1).\n // Any change to the search field disables the tooltip.\n @ViewChild(MatTooltip) private inputTooltip!: MatTooltip;\n private subscription = new Subscription();\n private _config!: SearchConfig;\n @Input({ required: true }) set config(config: SearchConfig) {\n this._config = config;\n this.setupForm();\n }\n get config() {\n return this._config;\n }\n @Output() simpleSearch = new EventEmitter<SearchConfig>();\n @Output() clearSimpleSearch = new EventEmitter<void>();\n protected isSubmitted = false;\n protected searchForm = this.fb.nonNullable.group({\n simpleQuery: ['', Validators.required],\n });\n\n get simpleQuery() {\n return this.searchForm.get('simpleQuery') as FormControl;\n }\n\n ngOnInit() {\n // Ensure validation tooltip closes when uses enters a query\n this.subscription.add(\n this.simpleQuery.valueChanges\n .pipe(startWith(''))\n .pipe(filter(() => !!this.inputTooltip))\n .subscribe(() => {\n this.inputTooltip.disabled = true;\n }),\n );\n }\n\n ngOnDestroy(): void {\n this.subscription.unsubscribe();\n }\n\n protected emitSimpleSearch = () => {\n this.isSubmitted = true;\n // Don't perform a search unless there is a query\n if (this.simpleQuery.invalid) {\n this.showSearchValidationToolTip();\n return;\n }\n this.simpleSearch.emit({ ...this.config, q: this.simpleQuery.value });\n this.isSubmitted = false;\n };\n\n protected clearQuery = () => {\n this.simpleQuery.setValue('');\n this.clearSimpleSearch.emit();\n };\n\n private setupForm = () => {\n this.simpleQuery.setValue(\n this.config.q || this.config.advancedSearchQueryRows[0]?.query || '',\n );\n };\n\n private showSearchValidationToolTip = () => {\n this.searchInput.nativeElement.focus();\n this.inputTooltip.disabled = false;\n this.inputTooltip.show();\n };\n}\n","<div class=\"container\">\n <form [formGroup]=\"searchForm\" (submit)=\"emitSimpleSearch()\" data-testid=\"searchForm\">\n <input\n #searchInput\n data-testid=\"searchInput\"\n id=\"q\"\n name=\"q\"\n type=\"text\"\n required\n aria-required=\"true\"\n aria-label=\"search input\"\n autocapitalize=\"off\"\n formControlName=\"simpleQuery\"\n matTooltip=\"Fill out this field\"\n [matTooltipPosition]=\"'above'\"\n [matTooltipDisabled]=\"true\"\n [attr.aria-invalid]=\"isSubmitted && simpleQuery.invalid\"\n />\n <label for=\"q\" data-testid=\"label\">{{\n config.scope === 'local'\n ? 'Books, media, special collections and more'\n : 'Ebooks, articles, journals, databases, streaming media and more'\n }}</label>\n <button type=\"submit\" aria-label=\"search\" data-testid=\"searchBtn\">\n <span class=\"material-symbols-outlined icon\"> search </span>\n </button>\n </form>\n\n @if (simpleQuery.value) {\n <button id=\"clear\" (click)=\"clearQuery()\" data-testid=\"clearBtn\">\n <span class=\"material-symbols-outlined icon\"> cancel </span>\n </button>\n }\n</div>\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { ADVANCED_SEARCH_FIELD_MAP } from '../constants';\nimport {\n AdvancedSearchQueryRow,\n isAdvancedSearchExternalFieldOption,\n isAdvancedSearchFieldOption,\n isAdvancedSearchLocalFieldOption,\n} from '../models/advanced-search.model';\nimport { SearchScope } from '../models/search-scope.model';\n\n@Pipe({\n name: 'advancedFieldWarning',\n standalone: true,\n})\nexport class AdvancedFieldWarningPipe implements PipeTransform {\n transform(queryRows: AdvancedSearchQueryRow[], scope: SearchScope): string {\n let warning = '';\n queryRows.forEach((row) => {\n if (\n row.field &&\n !isAdvancedSearchFieldOption(row.field as string) &&\n (scope === 'local'\n ? !isAdvancedSearchLocalFieldOption(row.field as string)\n : !isAdvancedSearchExternalFieldOption(row.field as string))\n ) {\n if (!warning)\n warning = `Searching by <b>${\n ADVANCED_SEARCH_FIELD_MAP[row.field]\n }</b> is not an option for this tab. <b>${\n ADVANCED_SEARCH_FIELD_MAP['any']\n }</b> has replaced it.`;\n else {\n warning += '<br />All other unavailable options have also been replaced.';\n return;\n }\n }\n });\n return warning;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n ElementRef,\n EventEmitter,\n Input,\n Output,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { SsAdvancedQueriesPipe } from './pipes/advanced-queries.pipe';\nimport { libHbllExpandCollapse } from '../animations/animations';\nimport { AdvancedSearchComponent } from './advanced-search/advanced-search.component';\nimport { SimpleSearchComponent } from './simple-search/simple-search.component';\nimport { AdvancedSearchQueryRow } from './models/advanced-search.model';\nimport { SearchScope } from './models/search-scope.model';\nimport { AdvancedFieldWarningPipe } from './pipes/advanced-field-warning.pipe';\nimport { FieldByScopePipe } from './pipes/field-by-scope.pipe';\n\nexport interface SearchConfig {\n showExternalTab: boolean;\n showAdvancedSearch: boolean;\n showAdvancedSearchAsText: boolean;\n scope: SearchScope;\n q: string;\n advancedSearchQueryRows: AdvancedSearchQueryRow[];\n localAdvancedSearch: {\n selectedResourceTypes: string[];\n availableResourceTypes: Record<string, string>;\n selectedCollections: string[];\n availableCollections: Record<string, string>;\n };\n externalAdvancedSearch: {\n datePublished: { from: string; to: string };\n selectedLanguages: string[];\n availableLanguages: Record<string, string>;\n limitResults: {\n peerReviewed: boolean;\n };\n expandResults: {\n applyRelatedWords: boolean;\n applyEquivalentSubjects: boolean;\n fullText: boolean;\n };\n };\n}\n\n/**\n * Accepts as input, and emits as events, SearchConfig objects:\n * ```\n * SearchConfig {\n showExternalTab: boolean;\n showAdvancedSearch: boolean;\n showAdvancedSearchAsText: boolean;\n scope: SearchScope;\n q: string;\n isFacetSearch: boolean;\n advancedSearchQueryRows: AdvancedSearchQueryRow[];\n localAdvancedSearch: {\n selectedResourceTypes: string[];\n availableResourceTypes: Record<string, string>;\n selectedCollections: string[];\n availableCollections: Record<string, string>;\n };\n externalAdvancedSearch: {\n datePublished: { from: string; to: string };\n selectedLanguages: string[];\n availableLanguages: Record<string, string>;\n limitResults: {\n peerReviewed: boolean;\n };\n expandResults: {\n applyRelatedWords: boolean;\n applyEquivalentSubjects: boolean;\n fullText: boolean;\n };\n };\n * ```\n */\n@Component({\n selector: 'lib-ss-search-bar',\n standalone: true,\n imports: [\n CommonModule,\n SsAdvancedQueriesPipe,\n AdvancedSearchComponent,\n SimpleSearchComponent,\n AdvancedFieldWarningPipe,\n ],\n providers: [FieldByScopePipe],\n animations: [libHbllExpandCollapse],\n templateUrl: './ss-search-bar.component.html',\n styleUrl: './ss-search-bar.component.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class SsSearchBarComponent {\n private _config!: SearchConfig;\n @Input({ required: true }) set config(config: string) {\n this._config = JSON.parse(config) as SearchConfig;\n }\n get config(): SearchConfig {\n return this._config;\n }\n @Output() simpleSearch = new EventEmitter<SearchConfig>();\n @Output() clearSimpleSearch = new EventEmitter<SearchConfig>();\n @Output() advancedSearch = new EventEmitter<SearchConfig>();\n @Output() advancedSearchClosed = new EventEmitter<SearchConfig>();\n @Output() advancedSearchOpen = new EventEmitter<SearchConfig>();\n @Output() tabChange = new EventEmitter<SearchConfig>();\n @ViewChild('barWrapperRef') private barWrapperRef!: ElementRef;\n protected heightOfContainer = 0;\n\n protected emitClearSimpleSearch = () => {\n this.clearSimpleSearch.emit({\n ...this.config,\n q: '',\n advancedSearchQueryRows: [],\n });\n };\n\n protected emitSimpleSearch = (updatedProps: Partial<SearchConfig>) => {\n this.simpleSearch.emit({\n ...this.config,\n ...updatedProps,\n });\n };\n\n protected emitAdvancedSearchClosed = () => {\n this.heightOfContainer = this.barWrapperRef?.nativeElement.clientHeight;\n this.config.showAdvancedSearch = false;\n this.advancedSearchClosed.emit({\n ...this.config,\n q: this.config.q || this.config.advancedSearchQueryRows[0]?.query,\n showAdvancedSearch: false,\n advancedSearchQueryRows: (this.config.advancedSearchQueryRows = []),\n localAdvancedSearch: {\n ...this.config.localAdvancedSearch,\n selectedResourceTypes: [],\n selectedCollections: [],\n },\n externalAdvancedSearch: {\n ...this.config.externalAdvancedSearch,\n datePublished: { from: '', to: '' },\n selectedLanguages: [],\n limitResults: {\n peerReviewed: false,\n },\n expandResults: {\n applyRelatedWords: false,\n applyEquivalentSubjects: false,\n fullText: false,\n },\n },\n });\n };\n\n protected emitAdvancedSearch = (config: SearchConfig) => {\n this.heightOfContainer = this.barWrapperRef?.nativeElement.clientHeight;\n this.advancedSearch.emit({\n ...config,\n showAdvancedSearchAsText: true,\n showAdvancedSearch: true,\n });\n };\n\n protected emitAdvancedSearchOpen = () => {\n this.heightOfContainer = this.barWrapperRef?.nativeElement.clientHeight;\n this.advancedSearch.emit({\n ...this.config,\n showAdvancedSearchAsText: false,\n showAdvancedSearch: true,\n });\n };\n\n protected emitTabChange = (newScope: SearchScope) => {\n this.tabChange.emit({ ...this.config, scope: newScope });\n };\n}\n","<div id=\"ssSearchBar\">\n <button\n (click)=\"emitTabChange('local')\"\n class=\"tab\"\n [ngClass]=\"{ active: config.scope === 'local' }\"\n data-testid=\"localTab\"\n [disabled]=\"config.scope === 'local'\"\n >\n In the Library\n </button>\n @if (config.showExternalTab) {\n <button\n (click)=\"emitTabChange('external')\"\n class=\"tab\"\n [ngClass]=\"{ active: config.scope === 'external' }\"\n data-testid=\"externalTab\"\n [disabled]=\"config.scope === 'external'\"\n >\n Available Online\n </button>\n }\n <div\n class=\"bar-wrapper\"\n #barWrapperRef\n [@libHbllExpandCollapse]=\"{\n value: config.showAdvancedSearch ? (!config.showAdvancedSearchAsText ? 1 : 2) : 3,\n params: { startHeight: heightOfContainer },\n }\"\n >\n <div class=\"bar-content\" data-testid=\"searchForm\">\n @if (!config.showAdvancedSearch) {\n <div class=\"search-bar\">\n <lib-ss-simple-search\n [config]=\"config\"\n (simpleSearch)=\"emitSimpleSearch($event)\"\n (clearSimpleSearch)=\"emitClearSimpleSearch()\"\n ></lib-ss-simple-search>\n </div>\n } @else {\n <button\n id=\"advSearchCloseBtn\"\n (click)=\"emitAdvancedSearchClosed()\"\n data-testid=\"advSearchCloseBtn\"\n >\n <span class=\"material-symbols-outlined icon\"> close </span>\n </button>\n <div id=\"advSearchWrapper\">\n @if (config.showAdvancedSearch && !config.showAdvancedSearchAsText) {\n <div>\n <lib-ss-advanced-search\n [config]=\"config\"\n (advancedSearch)=\"emitAdvancedSearch($event)\"\n ></lib-ss-advanced-search>\n </div>\n } @else {\n <div\n class=\"adv-search-text\"\n data-testid=\"advancedSearchText\"\n [innerHTML]=\"\n config.advancedSearchQueryRows | ssAdvancedQueries: config.scope\n \"\n ></div>\n <div\n class=\"field-warning\"\n [innerHTML]=\"\n config.advancedSearchQueryRows | advancedFieldWarning: config.scope\n \"\n ></div>\n }\n </div>\n }\n </div>\n @if (!config.showAdvancedSearch || config.showAdvancedSearchAsText) {\n <button\n data-testid=\"toggleAdvSearchButton\"\n class=\"adv-search-btn\"\n (click)=\"emitAdvancedSearchOpen()\"\n >\n Advanced <span class=\"material-symbols-outlined icon\"> keyboard_arrow_down </span>\n </button>\n }\n </div>\n</div>\n","/*\n * Public API Surface of components\n */\n\nexport * from './lib/hbll-header/hbll-header.component';\nexport * from './lib/ss-search-bar/ss-search-bar.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.FieldByScopePipe","i1","i2"],"mappings":"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"}
1
+ {"version":3,"file":"byuhbll-components.mjs","sources":["../../../projects/components/src/lib/hbll-header/hbll-header.component.ts","../../../projects/components/src/lib/hbll-header/hbll-header.component.html","../../../projects/components/src/lib/ss-search-bar/constants.ts","../../../projects/components/src/lib/ss-search-bar/models/advanced-search.model.ts","../../../projects/components/src/lib/ss-search-bar/pipes/field-by-scope.pipe.ts","../../../projects/components/src/lib/ss-search-bar/pipes/advanced-queries.pipe.ts","../../../projects/components/src/lib/animations/animations.ts","../../../projects/components/src/lib/ss-search-bar/utils.ts","../../../projects/components/src/lib/hbll-multi-select/hbll-multi-select.component.ts","../../../projects/components/src/lib/hbll-multi-select/hbll-multi-select.component.html","../../../projects/components/src/lib/hbll-checkbox/hbll-checkbox.component.ts","../../../projects/components/src/lib/hbll-checkbox/hbll-checkbox.component.html","../../../projects/components/src/lib/directives/hbll-pill-btn/hbll-pill-btn.directive.ts","../../../projects/components/src/lib/ss-search-bar/date-range/date-range.component.ts","../../../projects/components/src/lib/ss-search-bar/date-range/date-range.component.html","../../../projects/components/src/lib/ss-search-bar/advanced-search/advanced-search.component.ts","../../../projects/components/src/lib/ss-search-bar/advanced-search/advanced-search.component.html","../../../projects/components/src/lib/ss-search-bar/simple-search/simple-search.component.ts","../../../projects/components/src/lib/ss-search-bar/simple-search/simple-search.component.html","../../../projects/components/src/lib/ss-search-bar/pipes/advanced-field-warning.pipe.ts","../../../projects/components/src/lib/ss-search-bar/ss-search-bar.component.ts","../../../projects/components/src/lib/ss-search-bar/ss-search-bar.component.html","../../../projects/components/src/public-api.ts","../../../projects/components/src/byuhbll-components.ts"],"sourcesContent":["import { DatePipe, LowerCasePipe } from '@angular/common';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { HttpClient } from '@angular/common/http';\nimport {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n Output,\n Pipe,\n PipeTransform,\n Renderer2,\n computed,\n inject,\n input,\n viewChild,\n} from '@angular/core';\n\nconst LIBRARY_HOURS_API_URL = 'https://apps.lib.byu.edu/libraryhours/api/hours';\n\ninterface LibraryHours {\n date: string;\n is_closed: boolean;\n open_time: string;\n close_time: string;\n has_exception: boolean;\n exception_title: string;\n exception_message: string;\n is_currently_open: boolean;\n}\n\n@Pipe({\n name: 'libraryHoursDate',\n standalone: true,\n})\nexport class LibraryHoursDatePipe implements PipeTransform {\n transform(date: string, time: string): Date {\n return new Date(date + 'T' + time);\n }\n}\n\n/**\n * Header component built to be exported as a custom element.\n * This component uses icons provided by Google Material.\n * The link to these icons should be included once in the \\<head> of your base html.\n *\n * When a non-empty string `name` is provided to this component, the user is considered logged in.\n * Two outputs/events are accessible: `login` and `logout`.\n */\n@Component({\n selector: 'lib-hbll-header',\n standalone: true,\n imports: [DatePipe, LowerCasePipe, LibraryHoursDatePipe],\n templateUrl: './hbll-header.component.html',\n styleUrl: './hbll-header.component.scss',\n})\nexport class HbllHeaderComponent implements AfterViewInit {\n private readonly r2 = inject(Renderer2);\n private readonly http = inject(HttpClient);\n\n // --- API ---\n protected name = input<string>('');\n @Output() login = new EventEmitter<void>();\n @Output() logout = new EventEmitter<void>();\n // -----------\n\n private accountInfoEl = viewChild<ElementRef>('accountInfo');\n\n protected isLoggedIn = computed(() => !!this.name());\n protected libraryHours = toSignal(this.http.get<LibraryHours>(LIBRARY_HOURS_API_URL));\n protected showAccountDropdown = false;\n\n ngAfterViewInit(): void {\n this.r2.listen('window', 'click', (e: Event) => {\n if (!this.accountInfoEl()?.nativeElement.contains(e.target))\n this.showAccountDropdown = false;\n });\n }\n}\n","<header role=\"banner\" class=\"wrapper\">\n <h1>\n <a href=\"https://lib.byu.edu/\">\n <img\n src=\"https://media.lib.byu.edu/web-assets/images/1.0.0/byu-library-logo-full.svg\"\n alt=\"BYU Library Logo\"\n />\n </a>\n </h1>\n <div id=\"libraryInfo\" class=\"wrapper\">\n @if (libraryHours()) {\n <div id=\"libraryHours\">\n <div class=\"wrapper\">\n <span class=\"material-symbols-outlined left-icon\"> schedule </span>\n {{\n libraryHours()?.is_closed\n ? \"CLOSED\"\n : \"Today's hours: \" +\n (libraryHours()!.date\n | libraryHoursDate : libraryHours()!.open_time\n | date : \"ha\"\n | lowercase) +\n \" - \" +\n (libraryHours()!.date\n | libraryHoursDate : libraryHours()!.close_time\n | date : \"ha\"\n | lowercase)\n }}\n </div>\n </div>\n }\n <div id=\"accountInfo\" #accountInfo>\n <button\n (click)=\"\n isLoggedIn()\n ? (showAccountDropdown = !showAccountDropdown)\n : login.emit()\n \"\n class=\"wrapper\"\n id=\"accountBtn\"\n >\n <span class=\"material-symbols-outlined left-icon\"> person </span>\n {{ isLoggedIn() ? name : \"Login\" }}\n @if (isLoggedIn()) {\n <span class=\"material-symbols-outlined\"> arrow_drop_down </span>\n }\n </button>\n @if (isLoggedIn() && showAccountDropdown) {\n <div id=\"accountDropdown\">\n <a class=\"item\">My Account</a>\n <a class=\"item\">Preferences</a>\n <button class=\"item\" (click)=\"logout.emit()\">Logout</button>\n </div>\n }\n </div>\n </div>\n</header>\n<nav></nav>\n","export const ADVANCED_SEARCH_QUALIFIER_MAP = {\n contains: 'contains',\n begins_with: 'begins with',\n exact: 'is (exact)',\n index: 'browse value',\n subject_lc: 'LC browse',\n subject_expanded: 'expanded browse',\n};\n\nexport const ADVANCED_SEARCH_FIELD_MAP = {\n abstract: 'Abstract',\n any: 'Any Field',\n callNumber: 'Call Number',\n contributor: 'Contributor',\n creator: 'Author/Creator',\n genre: 'Genre',\n isbn: 'ISBN',\n issn: 'ISSN',\n series: 'Series',\n source: 'Source',\n subject: 'Subject',\n title: 'Title',\n};\n\nexport const ADVANCED_SEARCH_QUERIES_LIMIT = 12;\n\nexport const PERIOD_OPTIONS = ['', '1', '2', '5', '10', 'custom'] as const;\n\nexport const ADVANCED_SEARCH_OPTIONS = {\n boolean: ['AND', 'OR', 'NOT'],\n // In SS-api, the EDS key for all fields is `allText`, however this is the default and is never used in the URL, so we omit it here.\n fields: ['any', 'title', 'creator', 'subject', 'issn', 'isbn'],\n localFields: ['callNumber', 'contributor', 'genre', 'series'],\n externalFields: ['source', 'abstract'],\n qualifiers: {\n any: ['contains'],\n title: ['contains', 'exact', 'begins_with', 'index'],\n callNumber: ['contains', 'exact', 'begins_with', 'index'],\n creator: ['contains', 'exact', 'begins_with', 'index'],\n contributor: ['contains', 'exact'],\n isbn: ['contains', 'exact'],\n issn: ['contains', 'exact'],\n genre: ['contains', 'exact'],\n subject: ['contains', 'exact', 'subject_lc', 'subject_expanded'],\n series: ['contains', 'exact'],\n },\n resultsPerPage: ['10', '20', '50', '100'],\n period: PERIOD_OPTIONS,\n languages: [\n 'eng',\n 'ara',\n 'chi',\n 'ces',\n 'dan',\n 'dut',\n 'fin',\n 'fre',\n 'ger',\n 'gre',\n 'heb',\n 'hin',\n 'hun',\n 'ice',\n 'ita',\n 'jpn',\n 'kor',\n 'lat',\n 'nor',\n 'pol',\n 'por',\n 'pan',\n 'rum',\n 'rus',\n 'spa',\n 'swe',\n 'wel',\n 'yid',\n ],\n} as const;\n\nexport const PRIMARY_BLUE = 'rgba(63, 112, 176, 1)';\nexport const PRIMARY_BLUE_HOVER = 'hsl(214, 48%, 60%, 1)';\nexport const PRIMARY_LIGHT_BLUE = 'rgba(223, 233, 247, 1)';\nexport const PRIMARY_PURPLE = '#8772A6';\nexport const PRIMARY_PURPLE_HOVER = '#7C659F';\nexport const DESTRUCTIVE_RED = 'hsl(5, 47%, 47%, 1)';\nexport const DESTRUCTIVE_RED_HOVER = 'hsl(5, 47%, 50%, 1)';\nexport const SECONDARY_TEXT_GRAY = 'rgba(112, 112, 112, 1)';\nexport const LIGHT_GRAY = 'rgba(230, 230, 230, 1)';\nexport const DROP_SHADOW_DARK_BLUE = 'rgba(51, 62, 77, 0.16)';\nexport const TEXT_SEMIBOLD = '600';\nexport const TEXT_BOLD = '700';\nexport const ANIMATION_LENGTH_STD = '0.15s';\nexport const LINE_HEIGHT_STD = '1.4';\nexport const CONTEXTUAL_SELECTOR_HEIGHT = '4.5rem';\nexport const CONTENT_MAX_WIDTH = '75rem';\nexport const CONTENT_PADDING = '5.4rem';\n","import { ADVANCED_SEARCH_OPTIONS } from '../constants';\n\nexport type AdvancedSearchBooleanOption = (typeof ADVANCED_SEARCH_OPTIONS.boolean)[number];\n\nexport type AdvancedSearchFieldOption = (typeof ADVANCED_SEARCH_OPTIONS.fields)[number];\n\nexport const isAdvancedSearchFieldOption = (\n field: string,\n): field is AdvancedSearchLocalFieldOption =>\n [...ADVANCED_SEARCH_OPTIONS.fields].includes(field as AdvancedSearchFieldOption);\n\nexport type AdvancedSearchLocalFieldOption = (typeof ADVANCED_SEARCH_OPTIONS.localFields)[number];\n\nexport const isAdvancedSearchLocalFieldOption = (\n field: string,\n): field is AdvancedSearchLocalFieldOption =>\n ADVANCED_SEARCH_OPTIONS.localFields.includes(field as AdvancedSearchLocalFieldOption);\n\nexport type AdvancedSearchExternalFieldOption =\n (typeof ADVANCED_SEARCH_OPTIONS.externalFields)[number];\n\nexport const isAdvancedSearchExternalFieldOption = (\n field: string,\n): field is AdvancedSearchExternalFieldOption =>\n ADVANCED_SEARCH_OPTIONS.externalFields.includes(field as AdvancedSearchExternalFieldOption);\n\nexport type AdvancedSearchQualifierOption =\n (typeof ADVANCED_SEARCH_OPTIONS.qualifiers)[keyof typeof ADVANCED_SEARCH_OPTIONS.qualifiers][number];\n\nexport type AdvancedSearchResultsPerPageOption =\n (typeof ADVANCED_SEARCH_OPTIONS.resultsPerPage)[number];\n\nexport type AdvancedSearchLanguageOption = (typeof ADVANCED_SEARCH_OPTIONS.languages)[number];\n\nexport type AdvancedSearchQualifier = keyof typeof ADVANCED_SEARCH_OPTIONS.qualifiers;\n\nexport interface AdvancedSearchQueryRow {\n boolean?: AdvancedSearchBooleanOption;\n field?:\n | AdvancedSearchFieldOption\n | AdvancedSearchLocalFieldOption\n | AdvancedSearchExternalFieldOption;\n qualifier?: AdvancedSearchQualifierOption;\n query: string;\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport {\n AdvancedSearchExternalFieldOption,\n AdvancedSearchFieldOption,\n AdvancedSearchLocalFieldOption,\n isAdvancedSearchExternalFieldOption,\n isAdvancedSearchFieldOption,\n isAdvancedSearchLocalFieldOption,\n} from '../models/advanced-search.model';\nimport { ADVANCED_SEARCH_OPTIONS } from '../constants';\nimport { SearchScope } from '../models/search-scope.model';\n\n/**\n * Returns the field value based on the scope. If a field value does not exist in a specific scope, the default is returned.\n */\n@Pipe({\n name: 'fieldByScope',\n standalone: true,\n})\nexport class FieldByScopePipe implements PipeTransform {\n transform(\n fieldValue:\n | AdvancedSearchFieldOption\n | AdvancedSearchLocalFieldOption\n | AdvancedSearchExternalFieldOption,\n scope: SearchScope,\n ):\n | AdvancedSearchFieldOption\n | AdvancedSearchLocalFieldOption\n | AdvancedSearchExternalFieldOption {\n if (\n isAdvancedSearchFieldOption(fieldValue) ||\n (scope === 'local'\n ? isAdvancedSearchLocalFieldOption(fieldValue)\n : isAdvancedSearchExternalFieldOption(fieldValue))\n )\n return fieldValue;\n return ADVANCED_SEARCH_OPTIONS.fields[0];\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport {\n ADVANCED_SEARCH_FIELD_MAP,\n ADVANCED_SEARCH_OPTIONS,\n ADVANCED_SEARCH_QUALIFIER_MAP,\n} from '../constants';\nimport {\n AdvancedSearchExternalFieldOption,\n AdvancedSearchFieldOption,\n AdvancedSearchLocalFieldOption,\n AdvancedSearchQueryRow,\n} from '../models/advanced-search.model';\nimport { SearchScope } from '../models/search-scope.model';\nimport { FieldByScopePipe } from './field-by-scope.pipe';\n\n@Pipe({\n name: 'ssAdvancedQueries',\n standalone: true,\n})\nexport class SsAdvancedQueriesPipe implements PipeTransform {\n constructor(private fieldByScopePipe: FieldByScopePipe) {}\n transform(queryRows: AdvancedSearchQueryRow[], scope: SearchScope): string {\n return queryRows\n .map((row, i) => {\n const b = i !== 0 ? row.boolean || ADVANCED_SEARCH_OPTIONS.boolean[0] : '';\n const f:\n | AdvancedSearchFieldOption\n | AdvancedSearchLocalFieldOption\n | AdvancedSearchExternalFieldOption = this.fieldByScopePipe.transform(\n row.field ?? ADVANCED_SEARCH_OPTIONS.fields[0],\n scope,\n );\n const o =\n row.qualifier ??\n ADVANCED_SEARCH_OPTIONS.qualifiers[\n f as AdvancedSearchFieldOption | AdvancedSearchLocalFieldOption\n ][0];\n return `${b ? b + ' ' : ''}${\n ADVANCED_SEARCH_FIELD_MAP[f]\n } ${ADVANCED_SEARCH_QUALIFIER_MAP[o as keyof typeof ADVANCED_SEARCH_QUALIFIER_MAP]} <b>${row.query}</b>`;\n })\n .join(' ');\n }\n}\n","import {\n trigger,\n transition,\n animate,\n style,\n group,\n query,\n animateChild,\n} from '@angular/animations';\n\nexport const libHbllExpandCollapse = trigger('libHbllExpandCollapse', [\n transition('void <=> *', []),\n transition(\n '* <=> *',\n [\n group([\n style({ height: '{{startHeight}}px' }),\n query('@*', [animateChild()], { optional: true }),\n animate('.15s ease-in-out'),\n ]),\n ],\n { params: { startHeight: '0px' } },\n ),\n]);\n\nexport const libHbllFadeInOut = trigger('libHbllFadeInOut', [\n transition(':enter', [style({ opacity: '0' }), animate('.15s ease-out')]),\n transition(':leave', [animate('.15s ease-out', style({ opacity: '0' }))]),\n]);\n\nexport const libHbllFadeIn = trigger('libHbllFadeIn', [\n transition(':enter', [style({ opacity: '0' }), animate('.15s ease-out')]),\n]);\n\nexport const libHbllFadeOut = trigger('libHbllFadeOut', [\n transition(':leave', [animate('.15s ease-out', style({ opacity: '0' }))]),\n]);\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\n\n/**\n * Validator method to check if a `FormGroup<{ from: FormControl<string>; to: FormControl<string> }>` is valid.\n * The FormGroup is considered valid if either both `from` and `to` are set, or both are empty strings.\n * @returns {ValidationErrors | null} validation errors, if any\n */\nexport const validateDateRangeFields = (): ValidatorFn => {\n return (control: AbstractControl): ValidationErrors | null => {\n const from: string = control.get('from')?.value;\n const to: string = control.get('to')?.value;\n // Valid if both fields are set or both are empty.\n if ((!from && !to) || (from && to)) return null;\n return from ? { toInvalid: true } : { fromInvalid: true };\n };\n};\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n Output,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n MatAutocompleteModule,\n MatAutocompleteSelectedEvent,\n} from '@angular/material/autocomplete';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatChipInputEvent, MatChipsModule } from '@angular/material/chips';\nimport { COMMA, ENTER } from '@angular/cdk/keycodes';\nimport { MatIconModule } from '@angular/material/icon';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { Observable, combineLatest } from 'rxjs';\nimport { map, startWith } from 'rxjs/operators';\n\n@Component({\n selector: 'lib-hbll-multi-select',\n standalone: true,\n imports: [\n CommonModule,\n MatChipsModule,\n MatFormFieldModule,\n MatAutocompleteModule,\n ReactiveFormsModule,\n MatIconModule,\n ],\n // Necessary to override material design styles.\n // IMPORTANT: Tightly scope classes and ids to this component if they are necessary.\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './hbll-multi-select.component.html',\n styleUrls: ['./hbll-multi-select.component.scss'],\n})\nexport class HbllMultiSelectComponent {\n @ViewChild('input') private inputRef!: ElementRef<HTMLInputElement>;\n @Input() allOptions: Record<string, string> = {};\n @Input() label = '';\n /**\n * An array that indicates which keys are selected.\n */\n @Input() selectedKeys: string[] = [];\n /**\n * An EventEmitter that emits an array of keys indicating which options are currently selected.\n */\n @Output() selectedKeysChange = new EventEmitter<string[]>();\n\n protected inputControl = new FormControl('');\n protected filteredOptions$: Observable<string[]> = combineLatest([\n this.inputControl.valueChanges.pipe(startWith('')),\n this.selectedKeysChange.asObservable().pipe(startWith([])),\n ]).pipe(\n map(([key]: [string | null, unknown]) =>\n // Display filtered options if there is a value, else display all options currently not selected.\n key\n ? this.filterOptions(key)\n : Object.keys(this.allOptions).filter(\n (key) => !this.selectedKeys.find((selectedOption) => key === selectedOption),\n ),\n ),\n );\n protected separatorKeysCodes: number[] = [ENTER, COMMA];\n\n /**\n * Adds a key from the input to the array of selected key.\n * The value from the input must match a key from the record of all options.\n * @param {MatChipInputEvent} event MatChipInputEvent\n */\n protected addOption(event: MatChipInputEvent): void {\n this.addOptionToSelectedOptions(event.value);\n }\n\n /**\n * Removes a key from the array of selected options and emits the new selected keys.\n * @param {MultiSelectKeyValPair} key key to remove\n */\n protected removeOption(key: string): void {\n const index = this.selectedKeys.indexOf(key);\n if (index >= 0) {\n this.selectedKeys.splice(index, 1);\n this.selectedKeysChange.emit(this.selectedKeys);\n }\n }\n\n /**\n * Adds an option to the array of selected keys when a user selects from the autocomplete.\n * @param {MatAutocompleteSelectedEvent} event MatAutocompleteSelectedEvent\n */\n protected selectOption = (event: MatAutocompleteSelectedEvent): void => {\n this.addOptionToSelectedOptions(event.option.value);\n };\n\n /**\n * Filters the options by the supplied key as well as the currently selected key.\n * @param {string} key key to filter by.\n * @returns {string[]} the filtered keys\n */\n private filterOptions = (newKey: string): string[] => {\n return Object.keys(this.allOptions).filter(\n (key: string) => this.allOptions[key] !== newKey && !this.selectedKeys.includes(key),\n );\n };\n\n /**\n * Adds a key to the selected keys array if the option is truthy and not already in the array.\n * The input is also cleared (if available), and the new selected keys are emitted.\n * @param {key} option key to add\n */\n private addOptionToSelectedOptions = (key: string): void => {\n if (key && !this.selectedKeys.includes(key) && this.allOptions[key]) {\n this.selectedKeys.push(key);\n this.inputControl.setValue('');\n this.selectedKeysChange.emit(this.selectedKeys);\n if (this.inputRef) this.inputRef.nativeElement.value = '';\n }\n };\n}\n","<div class=\"hbll-multi-select\">\n <mat-form-field appearance=\"outline\">\n <mat-chip-grid #chipGrid [attr.aria-label]=\"label + ' selection'\">\n @for (key of selectedKeys; track key) {\n <mat-chip-row (removed)=\"removeOption(key)\" data-testid=\"matChipRow\">\n {{ allOptions[key] }}\n <button\n matChipRemove\n [attr.aria-label]=\"'remove ' + allOptions[key]\"\n [attr.data-testid]=\"'remove' + key\"\n >\n <span class=\"material-symbols-outlined icon\"> cancel </span>\n </button>\n </mat-chip-row>\n }\n </mat-chip-grid>\n <label class=\"hidden\" for=\"input\">{{ label }}</label>\n <input\n [placeholder]=\"label | titlecase\"\n #input\n id=\"input\"\n [formControl]=\"inputControl\"\n [matChipInputFor]=\"chipGrid\"\n [matAutocomplete]=\"auto\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\n (matChipInputTokenEnd)=\"addOption($event)\"\n data-testid=\"input\"\n />\n <mat-autocomplete\n #auto=\"matAutocomplete\"\n (optionSelected)=\"selectOption($event)\"\n data-testid=\"autocomplete\"\n >\n @for (key of filteredOptions$ | async; track key) {\n <mat-option [value]=\"key\" data-testid=\"autocompleteOption\">\n {{ allOptions[key] }}\n </mat-option>\n }\n </mat-autocomplete>\n </mat-form-field>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'lib-hbll-checkbox',\n templateUrl: './hbll-checkbox.component.html',\n styleUrls: ['./hbll-checkbox.component.scss'],\n standalone: true,\n imports: [CommonModule],\n})\nexport class HbllCheckboxComponent {\n @Input() isChecked = false;\n}\n","<span class=\"checkbox-container\" [class.checked]=\"isChecked\">\n @if (isChecked) {\n <span class=\"material-symbols-outlined icon\"> check </span>\n }\n</span>\n","import {\n Directive,\n ElementRef,\n HostListener,\n Input,\n inject,\n type OnChanges,\n type OnInit,\n} from '@angular/core';\nimport {\n ANIMATION_LENGTH_STD,\n DESTRUCTIVE_RED,\n DESTRUCTIVE_RED_HOVER,\n LIGHT_GRAY,\n PRIMARY_BLUE,\n PRIMARY_BLUE_HOVER,\n PRIMARY_PURPLE,\n PRIMARY_PURPLE_HOVER,\n SECONDARY_TEXT_GRAY,\n TEXT_SEMIBOLD,\n} from '../../ss-search-bar/constants';\n\nconst BG_COLORS = {\n blue: PRIMARY_BLUE,\n purple: PRIMARY_PURPLE,\n};\n\nconst BG_COLORS_HOVER = {\n blue: PRIMARY_BLUE_HOVER,\n purple: PRIMARY_PURPLE_HOVER,\n};\n\n@Directive({\n selector: '[libHbllPillBtn]',\n standalone: true,\n})\nexport class HbllPillBtnDirective implements OnInit, OnChanges {\n private readonly el = inject(ElementRef);\n @Input() isDestructiveStyle = false;\n @Input() isDisabled = false;\n @Input() isFullWidth = false;\n @Input() color: 'blue' | 'purple' = 'purple';\n\n @HostListener('mouseenter') onMouseEnter() {\n if (this.isDisabled) {\n return;\n } else {\n if (!this.isDestructiveStyle) {\n this.el.nativeElement.style.backgroundColor = BG_COLORS_HOVER[this.color];\n } else {\n this.el.nativeElement.style.backgroundColor = DESTRUCTIVE_RED_HOVER;\n }\n }\n this.el.nativeElement.style.cursor = 'pointer';\n }\n\n @HostListener('mouseleave') onMouseLeave() {\n if (this.isDisabled) {\n return;\n } else {\n if (!this.isDestructiveStyle) {\n this.el.nativeElement.style.backgroundColor = BG_COLORS[this.color];\n } else {\n this.el.nativeElement.style.backgroundColor = DESTRUCTIVE_RED;\n }\n }\n this.el.nativeElement.style.cursor = 'pointer';\n }\n\n @HostListener('click') onClick() {\n if (this.isDisabled) {\n return;\n } else {\n if (!this.isDestructiveStyle) {\n this.el.nativeElement.style.backgroundColor = BG_COLORS[this.color];\n } else {\n this.el.nativeElement.style.backgroundColor = DESTRUCTIVE_RED;\n }\n }\n this.el.nativeElement.style.cursor = 'pointer';\n }\n\n ngOnInit() {\n this.setupButton();\n }\n\n ngOnChanges() {\n this.setupButton();\n }\n\n setupButton() {\n if (this.isDisabled) {\n this.el.nativeElement.style.color = SECONDARY_TEXT_GRAY;\n this.el.nativeElement.style.backgroundColor = LIGHT_GRAY;\n } else {\n if (!this.isDestructiveStyle) {\n this.el.nativeElement.style.backgroundColor = BG_COLORS[this.color];\n } else {\n this.el.nativeElement.style.backgroundColor = DESTRUCTIVE_RED;\n }\n this.el.nativeElement.style.color = 'white';\n }\n this.el.nativeElement.style.transition = 'all ' + ANIMATION_LENGTH_STD;\n this.el.nativeElement.style.fontSize = '1em';\n this.el.nativeElement.style.fontWeight = TEXT_SEMIBOLD;\n this.el.nativeElement.style.textAlign = 'center';\n this.el.nativeElement.style.display = this.isFullWidth ? 'flex' : 'inline-flex';\n this.el.nativeElement.style.justifyContent = 'center';\n this.el.nativeElement.style.alignItems = 'center';\n this.el.nativeElement.style.width = this.isFullWidth ? '100%' : 'auto';\n this.el.nativeElement.style.borderRadius = '100em';\n this.el.nativeElement.style.padding = '0.4em 1.3em';\n this.el.nativeElement.style.boxSizing = 'border-box';\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n Output,\n inject,\n} from '@angular/core';\nimport { NonNullableFormBuilder, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { libHbllFadeInOut } from '../../animations/animations';\nimport { validateDateRangeFields } from '../utils';\n\n@Component({\n selector: 'lib-date-range',\n templateUrl: './date-range.component.html',\n styleUrls: ['./date-range.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule],\n animations: [libHbllFadeInOut],\n})\nexport class DateRangeComponent {\n private readonly fb = inject(NonNullableFormBuilder);\n /**\n * Emits `{ from: string, to: string }` object if both values are set to a valid or empty state by the user.\n */\n @Output() validDateChange = new EventEmitter<{ from: string; to: string }>();\n @Output() fromChange = new EventEmitter<string>();\n @Output() toChange = new EventEmitter<string>();\n protected dateForm = this.fb.group(\n {\n from: ['', [Validators.pattern('^[0-9]{4}$')]],\n to: ['', [Validators.pattern('^[0-9]{4}$')]],\n },\n { validators: validateDateRangeFields() },\n );\n @Input() set from(from: string) {\n if (from !== this.dateForm.controls.from.value) this.dateForm.controls.from.setValue(from);\n }\n @Input() set to(to: string) {\n if (to !== this.dateForm.controls.to.value) this.dateForm.controls.to.setValue(to);\n }\n protected onFromChange = () => {\n this.onInputChange();\n this.fromChange.emit(this.dateForm.controls.from.value);\n };\n protected onToChange = () => {\n this.onInputChange();\n this.toChange.emit(this.dateForm.controls.to.value);\n };\n\n private onInputChange = () => {\n let from = this.dateForm.controls.from.value;\n let to = this.dateForm.controls.to.value;\n if (from && to && this.dateForm.controls.from.valid && this.dateForm.controls.to.valid) {\n // Ensure 'to' contains the larger year. Swap if necessary.\n if (parseInt(from) > parseInt(to)) {\n const swap = from;\n from = to;\n to = swap;\n }\n this.validDateChange.emit({ from, to });\n } else if (!from && !to) {\n this.validDateChange.emit({ from, to });\n }\n };\n}\n","<form id=\"from-to\" data-testid=\"from-to\" [formGroup]=\"dateForm\">\n <label for=\"fromFacet\">Between</label>\n <input\n formControlName=\"from\"\n id=\"fromFacet\"\n name=\"fromFacet\"\n data-testid=\"from\"\n placeholder=\"YYYY\"\n inputmode=\"numeric\"\n minlength=\"4\"\n maxlength=\"4\"\n (input)=\"onFromChange()\"\n [class.error]=\"\n dateForm.errors?.['fromInvalid'] || dateForm.controls.from.errors?.['pattern']\n \"\n />\n <label for=\"toFacet\">and</label>\n <input\n formControlName=\"to\"\n id=\"toFacet\"\n name=\"toFacet\"\n data-testid=\"to\"\n placeholder=\"YYYY\"\n inputmode=\"numeric\"\n minlength=\"4\"\n maxlength=\"4\"\n (input)=\"onToChange()\"\n [class.error]=\"dateForm.errors?.['toInvalid'] || dateForm.controls.to.errors?.['pattern']\"\n />\n</form>\n","import {\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n Output,\n ViewChild,\n inject,\n} from '@angular/core';\nimport {\n FormControl,\n FormGroup,\n NonNullableFormBuilder,\n ReactiveFormsModule,\n Validators,\n} from '@angular/forms';\nimport { MatTooltip, MatTooltipModule } from '@angular/material/tooltip';\nimport { filter, startWith, tap } from 'rxjs/operators';\nimport {\n AdvancedSearchBooleanOption,\n AdvancedSearchLocalFieldOption,\n AdvancedSearchLanguageOption,\n AdvancedSearchQualifierOption,\n AdvancedSearchQualifier,\n AdvancedSearchExternalFieldOption,\n AdvancedSearchQueryRow,\n AdvancedSearchFieldOption,\n isAdvancedSearchFieldOption,\n isAdvancedSearchLocalFieldOption,\n isAdvancedSearchExternalFieldOption,\n} from '../models/advanced-search.model';\nimport { Subscription } from 'rxjs';\nimport { SearchConfig } from '../ss-search-bar.component';\nimport { validateDateRangeFields } from '../utils';\nimport { CommonModule } from '@angular/common';\nimport {\n ADVANCED_SEARCH_FIELD_MAP,\n ADVANCED_SEARCH_OPTIONS,\n ADVANCED_SEARCH_QUALIFIER_MAP,\n ADVANCED_SEARCH_QUERIES_LIMIT,\n} from '../constants';\nimport { MatIconModule } from '@angular/material/icon';\nimport { HbllMultiSelectComponent } from '../../hbll-multi-select/hbll-multi-select.component';\nimport { HbllCheckboxComponent } from '../../hbll-checkbox/hbll-checkbox.component';\nimport { HbllPillBtnDirective } from '../../directives/hbll-pill-btn/hbll-pill-btn.directive';\nimport { DateRangeComponent } from '../date-range/date-range.component';\n\ntype QueryRow = {\n boolean: FormControl<AdvancedSearchBooleanOption>;\n field: FormControl<\n | AdvancedSearchFieldOption\n | AdvancedSearchLocalFieldOption\n | AdvancedSearchExternalFieldOption\n >;\n qualifier: FormControl<AdvancedSearchQualifierOption>;\n query: FormControl<string>;\n};\n\nconst DATE_VALIDATOR_REGEX = '^[0-9]{4}$';\n\n@Component({\n selector: 'lib-ss-advanced-search',\n standalone: true,\n templateUrl: './advanced-search.component.html',\n styleUrls: ['./advanced-search.component.scss'],\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatTooltipModule,\n MatIconModule,\n HbllMultiSelectComponent,\n HbllCheckboxComponent,\n HbllPillBtnDirective,\n DateRangeComponent,\n ],\n})\nexport class AdvancedSearchComponent implements OnDestroy {\n private readonly fb = inject(NonNullableFormBuilder);\n private _config!: SearchConfig;\n @Input({ required: true }) set config(config: SearchConfig) {\n this._config = config;\n this.setupForm();\n }\n get config() {\n return this._config;\n }\n @Output() advancedSearch = new EventEmitter<SearchConfig>();\n\n // Though multiple instances exists, this represent query 1.\n @ViewChild('searchInput') private searchInput!: ElementRef;\n // The tooltip is disabled in the template.\n // It is enabled and displayed if a user searches against an empty query (simple or q1).\n // Any change to the search field disables the tooltip.\n @ViewChild(MatTooltip) private inputTooltip!: MatTooltip;\n\n private subscription = new Subscription();\n\n ngOnDestroy(): void {\n this.subscription.unsubscribe();\n }\n\n /**\n * Takes a `FormGroup` and syncs up the `field` and `qualifier` values.\n * After syncing, when the `field` value changes, the `qualifier` value will update appropriately.\n */\n private syncUpFieldAndQualifier = (\n fg: FormGroup<{\n boolean: FormControl;\n field: FormControl;\n qualifier: FormControl;\n query: FormControl;\n }>,\n scope: SearchConfig['scope'],\n ) => {\n this.subscription.add(\n fg.controls.field.valueChanges\n .pipe(\n filter(() => scope === 'local'),\n tap((val: AdvancedSearchQualifier) =>\n fg.controls.qualifier.setValue(ADVANCED_SEARCH_OPTIONS.qualifiers[val][0]),\n ),\n )\n .subscribe(),\n );\n };\n\n protected advancedSearchForm = this.fb.group({\n queries: this.fb.array<FormGroup<QueryRow>>(\n [],\n [Validators.maxLength(ADVANCED_SEARCH_QUERIES_LIMIT)],\n ),\n types: [[] as string[]],\n collections: [[] as string[]],\n languages: [[] as AdvancedSearchLanguageOption[]],\n datePublished: this.fb.group(\n {\n from: ['', [Validators.maxLength(4), Validators.pattern(DATE_VALIDATOR_REGEX)]],\n to: ['', [Validators.maxLength(4), Validators.pattern(DATE_VALIDATOR_REGEX)]],\n },\n { validators: validateDateRangeFields() },\n ),\n limitResults: this.fb.group({\n peerReviewed: [false],\n }),\n expandResults: this.fb.group({\n applyRelatedWords: [false],\n applyEquivalentSubjects: [false],\n fullText: [false],\n }),\n });\n\n protected isSubmitted = false;\n protected advancedSearchOptions = ADVANCED_SEARCH_OPTIONS;\n protected advancedSearchFieldMap = ADVANCED_SEARCH_FIELD_MAP;\n protected advancedSearchQualifierMap = ADVANCED_SEARCH_QUALIFIER_MAP;\n\n get queries() {\n return this.advancedSearchForm.controls.queries;\n }\n get types() {\n return this.advancedSearchForm.controls.types;\n }\n get collections() {\n return this.advancedSearchForm.controls.collections;\n }\n get languages() {\n return this.advancedSearchForm.controls.languages;\n }\n get from() {\n return this.advancedSearchForm.controls.datePublished.controls.from;\n }\n get to() {\n return this.advancedSearchForm.controls.datePublished.controls.to;\n }\n get peerReviewed() {\n return this.advancedSearchForm.controls.limitResults.controls.peerReviewed;\n }\n get fullText() {\n return this.advancedSearchForm.controls.expandResults.controls.fullText;\n }\n get applyRelatedWords() {\n return this.advancedSearchForm.controls.expandResults.controls.applyRelatedWords;\n }\n get applyEquivalentSubjects() {\n return this.advancedSearchForm.controls.expandResults.controls.applyEquivalentSubjects;\n }\n\n /**\n * Add a query to `queries` `FormArray`. This FormGroup has an additional `boolean` control.\n */\n protected addQuery = () => {\n this.queries.push(\n this.fb.group({\n boolean: [ADVANCED_SEARCH_OPTIONS.boolean[0] as AdvancedSearchBooleanOption],\n field: [\n ADVANCED_SEARCH_OPTIONS.fields[0] as\n | AdvancedSearchFieldOption\n | AdvancedSearchLocalFieldOption\n | AdvancedSearchExternalFieldOption,\n ],\n qualifier: [\n ADVANCED_SEARCH_OPTIONS.qualifiers[\n ADVANCED_SEARCH_OPTIONS.localFields[0]\n ][0] as AdvancedSearchQualifierOption,\n ],\n query: ['', Validators.required],\n }),\n );\n this.syncUpFieldAndQualifier(this.queries.at(-1), this.config.scope);\n };\n\n protected removeQuery = (i: number) => {\n this.queries.removeAt(i);\n };\n\n /**\n * Prepares appropriate query params before performing a local advanced search.\n */\n protected doLocalAdvancedSearch = () => {\n this.doAdvancedSearch({\n localAdvancedSearch: {\n ...this.config.localAdvancedSearch,\n selectedResourceTypes: this.types.value,\n selectedCollections: this.collections.value,\n },\n });\n };\n\n /**\n * Prepares appropriate query params before performing an external advanced search.\n */\n protected doExternalAdvancedSearch = () => {\n // Compares 'from' and 'to' to ensure 'to' is greater than / equal to 'from', swaps them if not\n const from = this.from.value\n ? parseInt(this.from.value) <= parseInt(this.to.value)\n ? this.from.value\n : this.to.value\n : '';\n // Compares 'from' and 'to' to ensure 'to' is greater than / equal to 'from', swaps them if not\n const to = this.to.value\n ? parseInt(this.to.value) >= parseInt(this.from.value)\n ? this.to.value\n : this.from.value\n : '';\n this.doAdvancedSearch({\n externalAdvancedSearch: {\n ...this.config.externalAdvancedSearch,\n datePublished: { from, to },\n selectedLanguages: this.languages.value,\n limitResults: {\n peerReviewed: this.peerReviewed.value,\n },\n expandResults: {\n applyRelatedWords: this.applyRelatedWords.value,\n applyEquivalentSubjects: this.applyEquivalentSubjects.value,\n fullText: this.fullText.value,\n },\n },\n });\n };\n\n /**\n * Verifies that there is a query to use, gathers all other query parameters needed, then performs an advanced search via `router.navigate()`.\n * @param {Record<string, string>} queryParams base set of query params to navigate with\n */\n private doAdvancedSearch = (updatedProps: Partial<SearchConfig>): void => {\n this.isSubmitted = true;\n // Don't perform a search unless there is at least one query\n if (\n this.queries.at(0).controls.query.invalid &&\n !this.queries.value.some((v) => !!v.query)\n ) {\n this.showSearchValidationToolTip();\n return;\n }\n // Don't perform a search unless the date form is valid\n if (this.advancedSearchForm.controls.datePublished.invalid) return;\n\n this.advancedSearch.emit({\n ...this.config,\n ...updatedProps,\n advancedSearchQueryRows: this.queries.value as AdvancedSearchQueryRow[],\n });\n this.isSubmitted = false;\n };\n\n private showSearchValidationToolTip = () => {\n this.searchInput.nativeElement.focus();\n this.inputTooltip.disabled = false;\n this.inputTooltip.show();\n };\n\n private setupForm = () => {\n this.queries.clear();\n // Always keep at least two queries available\n this.addQuery();\n this.addQuery();\n\n // Ensure validation tooltip closes when uses enters a query\n this.subscription.add(\n this.queries\n .at(0)\n .controls.query.valueChanges.pipe(startWith(''))\n .pipe(filter(() => !!this.inputTooltip))\n .subscribe(() => (this.inputTooltip.disabled = true)),\n );\n\n // If no `q{NUM}` use `q` for first query\n if (!this.config.advancedSearchQueryRows.length)\n this.queries.at(0).controls.query.setValue(this.config.q);\n\n this.config.advancedSearchQueryRows.forEach((queryRow, i) => {\n // Add a query form control for every q{num} key after the first.\n let queryControl = null;\n if (i === 0 || i === 1) {\n queryControl = this.queries.at(i);\n } else {\n this.addQuery();\n queryControl = this.queries.at(-1);\n }\n\n // Add the query value.\n queryControl.controls.query.setValue(queryRow.query);\n\n // Add the field value, if available.\n if (\n queryRow.field && // Only set the field if the value belongs to the current scope\n (isAdvancedSearchFieldOption(queryRow.field) ||\n (this.config.scope === 'local'\n ? isAdvancedSearchLocalFieldOption(queryRow.field)\n : isAdvancedSearchExternalFieldOption(queryRow.field)))\n )\n queryControl.controls.field.setValue(queryRow.field);\n else queryControl.controls.field.setValue(this.advancedSearchOptions.fields[0]);\n\n // Add the qualifier value, if available and a local search.\n if (this.config.scope === 'local' && queryRow.qualifier)\n queryControl.controls.qualifier.setValue(\n queryRow.qualifier ||\n this.advancedSearchOptions.qualifiers[\n queryControl.controls.field.value as\n | AdvancedSearchFieldOption\n | AdvancedSearchLocalFieldOption\n ],\n );\n\n // Add the boolean, if available and not the first query.\n if (i !== 0 && queryRow.boolean)\n queryControl.controls.boolean.setValue(queryRow.boolean);\n });\n if (this.config.scope === 'local') {\n this.types.setValue(this.config.localAdvancedSearch.selectedResourceTypes);\n this.collections.setValue(this.config.localAdvancedSearch.selectedCollections);\n } else {\n this.languages.setValue(\n this.config.externalAdvancedSearch\n .selectedLanguages as AdvancedSearchLanguageOption[],\n );\n this.peerReviewed.setValue(\n this.config.externalAdvancedSearch.limitResults.peerReviewed,\n );\n this.applyRelatedWords.setValue(\n this.config.externalAdvancedSearch.expandResults.applyRelatedWords,\n );\n this.applyEquivalentSubjects.setValue(\n this.config.externalAdvancedSearch.expandResults.applyEquivalentSubjects,\n );\n this.fullText.setValue(this.config.externalAdvancedSearch.expandResults.fullText);\n this.from.setValue(this.config.externalAdvancedSearch.datePublished.from);\n this.to.setValue(this.config.externalAdvancedSearch.datePublished.to);\n }\n };\n}\n","<form\n data-testid=\"advancedSearchForm\"\n (submit)=\"config.scope === 'local' ? doLocalAdvancedSearch() : doExternalAdvancedSearch()\"\n [formGroup]=\"advancedSearchForm\"\n class=\"adv-search-wrapper\"\n>\n <h3>Advanced Search</h3>\n <!-- Queries -->\n @for (query of queries.controls; track $index; let queryIndex = $index) {\n <div class=\"adv-search-row\" [formGroup]=\"query\">\n <!-- Boolean operator -->\n <!-- Add boolean for each row except for first -->\n @if (!$first) {\n <div class=\"select-wrapper\">\n <select\n [id]=\"'boolean' + queryIndex\"\n [formControlName]=\"'boolean'\"\n [attr.data-testid]=\"'boolean' + queryIndex\"\n >\n @for (boolean of advancedSearchOptions.boolean; track boolean) {\n <option [ngValue]=\"boolean\">\n {{ boolean }}\n </option>\n }\n </select>\n </div>\n }\n <!-- Field -->\n <label [for]=\"'field' + queryIndex\" class=\"hidden\">Field {{ queryIndex }}</label>\n <div class=\"select-wrapper\">\n <select\n [id]=\"'field' + queryIndex\"\n [formControlName]=\"'field'\"\n [attr.data-testid]=\"'field' + queryIndex\"\n >\n @for (field of advancedSearchOptions.fields; track field) {\n <option [ngValue]=\"field\">\n {{ advancedSearchFieldMap[field] }}\n </option>\n }\n <optgroup\n [label]=\"(config.scope === 'external' ? 'Online' : 'Library') + ' Specific'\"\n >\n @for (\n field of config.scope === 'external'\n ? advancedSearchOptions.externalFields\n : advancedSearchOptions.localFields;\n track field\n ) {\n <option [ngValue]=\"field\">\n {{ advancedSearchFieldMap[field] }}\n </option>\n }\n </optgroup>\n </select>\n </div>\n <!-- Qualifiers are only available for local searches -->\n @if (config.scope === 'local') {\n <label [for]=\"'qualifier' + queryIndex\" class=\"hidden\"\n >Match Criteria {{ queryIndex }}</label\n >\n <div class=\"select-wrapper\">\n <select\n [id]=\"'qualifier' + queryIndex\"\n [formControlName]=\"'qualifier'\"\n [attr.data-testid]=\"'qualifier' + queryIndex\"\n >\n <!-- $any because a field can technically be local or external, though this block is scoped strictly to local fields -->\n @for (\n qualifier of $any(advancedSearchOptions.qualifiers)[\n query.controls.field.value\n ];\n track qualifier;\n let optionIndex = $index\n ) {\n <option\n [ngValue]=\"qualifier\"\n [attr.data-testid]=\"\n 'qualifier' + queryIndex + '-option' + optionIndex\n \"\n >\n {{ $any(advancedSearchQualifierMap)[qualifier] }}\n </option>\n }\n </select>\n </div>\n }\n <!-- Query -->\n <label [for]=\"'query' + queryIndex\" class=\"hidden\">Query {{ queryIndex }}</label>\n <div class=\"query-input\">\n <input\n #searchInput\n [id]=\"'query' + queryIndex\"\n [formControlName]=\"'query'\"\n [attr.data-testid]=\"'query' + queryIndex\"\n required\n aria-required=\"true\"\n matTooltip=\"Fill out this field\"\n [matTooltipPosition]=\"'above'\"\n [matTooltipDisabled]=\"true\"\n [attr.aria-invalid]=\"isSubmitted && queries.at(0).controls.query.invalid\"\n aria-describedby=\"invalidInputDesc\"\n />\n </div>\n @if (!$first) {\n <button\n class=\"row-cancel\"\n type=\"button\"\n (click)=\"removeQuery(queryIndex)\"\n [attr.data-testid]=\"'cancelRow' + queryIndex\"\n >\n <span class=\"material-symbols-outlined icon\"> cancel </span>\n </button>\n }\n </div>\n }\n <button\n type=\"button\"\n (click)=\"addQuery()\"\n id=\"addQueryBtn\"\n data-testid=\"addQuery\"\n [disabled]=\"queries.length > 11\"\n >\n <span class=\"material-symbols-outlined icon\"> add </span>\n Add a row\n </button>\n <!-- OTHER OPTIONS -->\n <div class=\"other-options\">\n <!-- LOCAL -->\n @if (config.scope === 'local') {\n <!-- Type -->\n <div data-testid=\"resourceType\">\n <h4>Resource Type</h4>\n <div class=\"multi-select-wrapper\">\n <lib-hbll-multi-select\n [label]=\"'Resource Type'\"\n [allOptions]=\"config.localAdvancedSearch.availableResourceTypes\"\n [selectedKeys]=\"types.value\"\n (selectedKeysChange)=\"types.setValue($event)\"\n ></lib-hbll-multi-select>\n </div>\n </div>\n <!-- Collection -->\n <div data-testid=\"collection\">\n <h4>Collection</h4>\n <div class=\"multi-select-wrapper\">\n <lib-hbll-multi-select\n [label]=\"'Collection'\"\n [allOptions]=\"config.localAdvancedSearch.availableCollections\"\n [selectedKeys]=\"collections.value\"\n (selectedKeysChange)=\"collections.setValue($event)\"\n ></lib-hbll-multi-select>\n </div>\n </div>\n }\n <!-- EXTERNAL -->\n @if (config.scope === 'external') {\n <div formGroupName=\"limitResults\" class=\"checkbox-section\">\n <h4>For Fewer Results Try</h4>\n <!-- Peer reviewed -->\n <label class=\"checkbox-label\" for=\"peerReviewed\" tabindex=\"0\">\n <input\n class=\"hidden\"\n id=\"peerReviewed\"\n type=\"checkbox\"\n [formControlName]=\"'peerReviewed'\"\n data-testid=\"peerReviewed\"\n />\n <lib-hbll-checkbox [isChecked]=\"peerReviewed.value\"></lib-hbll-checkbox>\n <span class=\"label-text\">Peer reviewed journal articles</span>\n </label>\n </div>\n <div formGroupName=\"expandResults\" class=\"checkbox-section\">\n <h4>For More Results Try</h4>\n <!-- Apply related words -->\n <label class=\"checkbox-label\" for=\"applyRelatedWords\" tabindex=\"0\">\n <input\n class=\"hidden\"\n id=\"applyRelatedWords\"\n type=\"checkbox\"\n [formControlName]=\"'applyRelatedWords'\"\n data-testid=\"applyRelatedWords\"\n />\n <lib-hbll-checkbox [isChecked]=\"applyRelatedWords.value\"></lib-hbll-checkbox>\n <span class=\"label-text\">Apply related words</span>\n </label>\n <!-- Apply equivalent subjects -->\n <label class=\"checkbox-label\" for=\"applyEquivalentSubjects\" tabindex=\"0\">\n <input\n class=\"hidden\"\n id=\"applyEquivalentSubjects\"\n type=\"checkbox\"\n [formControlName]=\"'applyEquivalentSubjects'\"\n data-testid=\"applyEquivalentSubjects\"\n />\n <lib-hbll-checkbox\n [isChecked]=\"applyEquivalentSubjects.value\"\n ></lib-hbll-checkbox>\n <span class=\"label-text\">Apply equivalent subjects</span>\n </label>\n <!-- Full text -->\n <label class=\"checkbox-label\" for=\"fullText\" tabindex=\"0\">\n <input\n class=\"hidden\"\n id=\"fullText\"\n type=\"checkbox\"\n [formControlName]=\"'fullText'\"\n data-testid=\"fullText\"\n />\n <lib-hbll-checkbox [isChecked]=\"fullText.value\"></lib-hbll-checkbox>\n <span class=\"label-text\"\n >Include results the library doesn't have access to</span\n >\n </label>\n </div>\n <!-- Date -->\n <div id=\"dateOptions\">\n <h4>Date Published</h4>\n <lib-date-range\n [from]=\"from.value\"\n [to]=\"to.value\"\n (fromChange)=\"from.setValue($event)\"\n (toChange)=\"to.setValue($event)\"\n ></lib-date-range>\n </div>\n <!-- Language -->\n <div>\n <h4>Language</h4>\n <lib-hbll-multi-select\n [label]=\"'language'\"\n [allOptions]=\"config.externalAdvancedSearch.availableLanguages\"\n [selectedKeys]=\"languages.value\"\n (selectedKeysChange)=\"languages.setValue($any($event))\"\n ></lib-hbll-multi-select>\n </div>\n }\n </div>\n <div id=\"advSearchFooter\">\n <button libHbllPillBtn [color]=\"'blue'\" type=\"submit\" data-testid=\"advSearchSubmitButton\">\n Search\n </button>\n </div>\n</form>\n","import {\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewChild,\n inject,\n} from '@angular/core';\nimport { FormBuilder, FormControl, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { MatTooltip, MatTooltipModule } from '@angular/material/tooltip';\nimport { Subscription } from 'rxjs';\nimport { startWith, filter } from 'rxjs/operators';\nimport { SearchConfig } from '../ss-search-bar.component';\nimport { MatIconModule } from '@angular/material/icon';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'lib-ss-simple-search',\n standalone: true,\n imports: [MatTooltipModule, MatIconModule, ReactiveFormsModule, CommonModule],\n templateUrl: './simple-search.component.html',\n styleUrls: ['./simple-search.component.scss'],\n})\nexport class SimpleSearchComponent implements OnInit, OnDestroy {\n private readonly fb = inject(FormBuilder);\n @ViewChild('searchInput') private searchInput!: ElementRef;\n // The tooltip is disabled in the template.\n // It is enabled and displayed if a user searches against an empty query (simple or q1).\n // Any change to the search field disables the tooltip.\n @ViewChild(MatTooltip) private inputTooltip!: MatTooltip;\n private subscription = new Subscription();\n private _config!: SearchConfig;\n @Input({ required: true }) set config(config: SearchConfig) {\n this._config = config;\n this.setupForm();\n }\n get config() {\n return this._config;\n }\n @Output() simpleSearch = new EventEmitter<SearchConfig>();\n @Output() clearSimpleSearch = new EventEmitter<void>();\n protected isSubmitted = false;\n protected searchForm = this.fb.nonNullable.group({\n simpleQuery: ['', Validators.required],\n });\n\n get simpleQuery() {\n return this.searchForm.get('simpleQuery') as FormControl;\n }\n\n ngOnInit() {\n // Ensure validation tooltip closes when uses enters a query\n this.subscription.add(\n this.simpleQuery.valueChanges\n .pipe(startWith(''))\n .pipe(filter(() => !!this.inputTooltip))\n .subscribe(() => {\n this.inputTooltip.disabled = true;\n }),\n );\n }\n\n ngOnDestroy(): void {\n this.subscription.unsubscribe();\n }\n\n protected emitSimpleSearch = () => {\n this.isSubmitted = true;\n // Don't perform a search unless there is a query\n if (this.simpleQuery.invalid) {\n this.showSearchValidationToolTip();\n return;\n }\n this.simpleSearch.emit({ ...this.config, q: this.simpleQuery.value });\n this.isSubmitted = false;\n };\n\n protected clearQuery = () => {\n this.simpleQuery.setValue('');\n this.clearSimpleSearch.emit();\n };\n\n private setupForm = () => {\n this.simpleQuery.setValue(\n this.config.q || this.config.advancedSearchQueryRows[0]?.query || '',\n );\n };\n\n private showSearchValidationToolTip = () => {\n this.searchInput.nativeElement.focus();\n this.inputTooltip.disabled = false;\n this.inputTooltip.show();\n };\n}\n","<div class=\"container\">\n <form [formGroup]=\"searchForm\" (submit)=\"emitSimpleSearch()\" data-testid=\"searchForm\">\n <input\n #searchInput\n data-testid=\"searchInput\"\n id=\"q\"\n name=\"q\"\n type=\"text\"\n required\n aria-required=\"true\"\n aria-label=\"search input\"\n autocapitalize=\"off\"\n formControlName=\"simpleQuery\"\n matTooltip=\"Fill out this field\"\n [matTooltipPosition]=\"'above'\"\n [matTooltipDisabled]=\"true\"\n [attr.aria-invalid]=\"isSubmitted && simpleQuery.invalid\"\n />\n <label for=\"q\" data-testid=\"label\">{{\n config.scope === 'local'\n ? 'Books, media, special collections and more'\n : 'Ebooks, articles, journals, databases, streaming media and more'\n }}</label>\n <button type=\"submit\" aria-label=\"search\" data-testid=\"searchBtn\">\n <span class=\"material-symbols-outlined icon\"> search </span>\n </button>\n </form>\n\n @if (simpleQuery.value) {\n <button id=\"clear\" (click)=\"clearQuery()\" data-testid=\"clearBtn\">\n <span class=\"material-symbols-outlined icon\"> cancel </span>\n </button>\n }\n</div>\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { ADVANCED_SEARCH_FIELD_MAP } from '../constants';\nimport {\n AdvancedSearchQueryRow,\n isAdvancedSearchExternalFieldOption,\n isAdvancedSearchFieldOption,\n isAdvancedSearchLocalFieldOption,\n} from '../models/advanced-search.model';\nimport { SearchScope } from '../models/search-scope.model';\n\n@Pipe({\n name: 'advancedFieldWarning',\n standalone: true,\n})\nexport class AdvancedFieldWarningPipe implements PipeTransform {\n transform(queryRows: AdvancedSearchQueryRow[], scope: SearchScope): string {\n let warning = '';\n queryRows.forEach((row) => {\n if (\n row.field &&\n !isAdvancedSearchFieldOption(row.field as string) &&\n (scope === 'local'\n ? !isAdvancedSearchLocalFieldOption(row.field as string)\n : !isAdvancedSearchExternalFieldOption(row.field as string))\n ) {\n if (!warning)\n warning = `Searching by <b>${\n ADVANCED_SEARCH_FIELD_MAP[row.field]\n }</b> is not an option for this tab. <b>${\n ADVANCED_SEARCH_FIELD_MAP['any']\n }</b> has replaced it.`;\n else {\n warning += '<br />All other unavailable options have also been replaced.';\n return;\n }\n }\n });\n return warning;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n ElementRef,\n EventEmitter,\n Input,\n Output,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { SsAdvancedQueriesPipe } from './pipes/advanced-queries.pipe';\nimport { libHbllExpandCollapse } from '../animations/animations';\nimport { AdvancedSearchComponent } from './advanced-search/advanced-search.component';\nimport { SimpleSearchComponent } from './simple-search/simple-search.component';\nimport { AdvancedSearchQueryRow } from './models/advanced-search.model';\nimport { SearchScope } from './models/search-scope.model';\nimport { AdvancedFieldWarningPipe } from './pipes/advanced-field-warning.pipe';\nimport { FieldByScopePipe } from './pipes/field-by-scope.pipe';\n\nexport interface SearchConfig {\n showExternalTab: boolean;\n showAdvancedSearch: boolean;\n showAdvancedSearchAsText: boolean;\n scope: SearchScope;\n q: string;\n advancedSearchQueryRows: AdvancedSearchQueryRow[];\n localAdvancedSearch: {\n selectedResourceTypes: string[];\n availableResourceTypes: Record<string, string>;\n selectedCollections: string[];\n availableCollections: Record<string, string>;\n };\n externalAdvancedSearch: {\n datePublished: { from: string; to: string };\n selectedLanguages: string[];\n availableLanguages: Record<string, string>;\n limitResults: {\n peerReviewed: boolean;\n };\n expandResults: {\n applyRelatedWords: boolean;\n applyEquivalentSubjects: boolean;\n fullText: boolean;\n };\n };\n}\n\n/**\n * Accepts as input, and emits as events, SearchConfig objects:\n * ```\n * SearchConfig {\n showExternalTab: boolean;\n showAdvancedSearch: boolean;\n showAdvancedSearchAsText: boolean;\n scope: SearchScope;\n q: string;\n isFacetSearch: boolean;\n advancedSearchQueryRows: AdvancedSearchQueryRow[];\n localAdvancedSearch: {\n selectedResourceTypes: string[];\n availableResourceTypes: Record<string, string>;\n selectedCollections: string[];\n availableCollections: Record<string, string>;\n };\n externalAdvancedSearch: {\n datePublished: { from: string; to: string };\n selectedLanguages: string[];\n availableLanguages: Record<string, string>;\n limitResults: {\n peerReviewed: boolean;\n };\n expandResults: {\n applyRelatedWords: boolean;\n applyEquivalentSubjects: boolean;\n fullText: boolean;\n };\n };\n * ```\n */\n@Component({\n selector: 'lib-ss-search-bar',\n standalone: true,\n imports: [\n CommonModule,\n SsAdvancedQueriesPipe,\n AdvancedSearchComponent,\n SimpleSearchComponent,\n AdvancedFieldWarningPipe,\n ],\n providers: [FieldByScopePipe],\n animations: [libHbllExpandCollapse],\n templateUrl: './ss-search-bar.component.html',\n styleUrl: './ss-search-bar.component.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class SsSearchBarComponent {\n private _config!: SearchConfig;\n @Input({ required: true }) set config(config: string) {\n this._config = JSON.parse(config) as SearchConfig;\n }\n get config(): SearchConfig {\n return this._config;\n }\n @Output() simpleSearch = new EventEmitter<SearchConfig>();\n @Output() clearSimpleSearch = new EventEmitter<SearchConfig>();\n @Output() advancedSearch = new EventEmitter<SearchConfig>();\n @Output() advancedSearchClosed = new EventEmitter<SearchConfig>();\n @Output() advancedSearchOpen = new EventEmitter<SearchConfig>();\n @Output() tabChange = new EventEmitter<SearchConfig>();\n @ViewChild('barWrapperRef') private barWrapperRef!: ElementRef;\n protected heightOfContainer = 0;\n\n protected emitClearSimpleSearch = () => {\n this.clearSimpleSearch.emit({\n ...this.config,\n q: '',\n advancedSearchQueryRows: [],\n });\n };\n\n protected emitSimpleSearch = (updatedProps: Partial<SearchConfig>) => {\n this.simpleSearch.emit({\n ...this.config,\n ...updatedProps,\n });\n };\n\n protected emitAdvancedSearchClosed = () => {\n this.heightOfContainer = this.barWrapperRef?.nativeElement.clientHeight;\n this.config.showAdvancedSearch = false;\n this.advancedSearchClosed.emit({\n ...this.config,\n q: this.config.q || this.config.advancedSearchQueryRows[0]?.query,\n showAdvancedSearch: false,\n advancedSearchQueryRows: (this.config.advancedSearchQueryRows = []),\n localAdvancedSearch: {\n ...this.config.localAdvancedSearch,\n selectedResourceTypes: [],\n selectedCollections: [],\n },\n externalAdvancedSearch: {\n ...this.config.externalAdvancedSearch,\n datePublished: { from: '', to: '' },\n selectedLanguages: [],\n limitResults: {\n peerReviewed: false,\n },\n expandResults: {\n applyRelatedWords: false,\n applyEquivalentSubjects: false,\n fullText: false,\n },\n },\n });\n };\n\n protected emitAdvancedSearch = (config: SearchConfig) => {\n this.heightOfContainer = this.barWrapperRef?.nativeElement.clientHeight;\n this.advancedSearch.emit({\n ...config,\n showAdvancedSearchAsText: true,\n showAdvancedSearch: true,\n });\n };\n\n protected emitAdvancedSearchOpen = () => {\n this.heightOfContainer = this.barWrapperRef?.nativeElement.clientHeight;\n this.advancedSearchOpen.emit({\n ...this.config,\n showAdvancedSearchAsText: false,\n showAdvancedSearch: true,\n });\n };\n\n protected emitTabChange = (newScope: SearchScope) => {\n this.tabChange.emit({ ...this.config, scope: newScope });\n };\n}\n","<div id=\"ssSearchBar\">\n <button\n (click)=\"emitTabChange('local')\"\n class=\"tab\"\n [ngClass]=\"{ active: config.scope === 'local' }\"\n data-testid=\"localTab\"\n [disabled]=\"config.scope === 'local'\"\n >\n In the Library\n </button>\n @if (config.showExternalTab) {\n <button\n (click)=\"emitTabChange('external')\"\n class=\"tab\"\n [ngClass]=\"{ active: config.scope === 'external' }\"\n data-testid=\"externalTab\"\n [disabled]=\"config.scope === 'external'\"\n >\n Available Online\n </button>\n }\n <div\n class=\"bar-wrapper\"\n #barWrapperRef\n [@libHbllExpandCollapse]=\"{\n value: config.showAdvancedSearch ? (!config.showAdvancedSearchAsText ? 1 : 2) : 3,\n params: { startHeight: heightOfContainer },\n }\"\n >\n <div class=\"bar-content\" data-testid=\"searchForm\">\n @if (!config.showAdvancedSearch) {\n <div class=\"search-bar\">\n <lib-ss-simple-search\n [config]=\"config\"\n (simpleSearch)=\"emitSimpleSearch($event)\"\n (clearSimpleSearch)=\"emitClearSimpleSearch()\"\n ></lib-ss-simple-search>\n </div>\n } @else {\n <button\n id=\"advSearchCloseBtn\"\n (click)=\"emitAdvancedSearchClosed()\"\n data-testid=\"advSearchCloseBtn\"\n >\n <span class=\"material-symbols-outlined icon\"> close </span>\n </button>\n <div id=\"advSearchWrapper\">\n @if (config.showAdvancedSearch && !config.showAdvancedSearchAsText) {\n <div>\n <lib-ss-advanced-search\n [config]=\"config\"\n (advancedSearch)=\"emitAdvancedSearch($event)\"\n ></lib-ss-advanced-search>\n </div>\n } @else {\n <div\n class=\"adv-search-text\"\n data-testid=\"advancedSearchText\"\n [innerHTML]=\"\n config.advancedSearchQueryRows | ssAdvancedQueries: config.scope\n \"\n ></div>\n <div\n class=\"field-warning\"\n [innerHTML]=\"\n config.advancedSearchQueryRows | advancedFieldWarning: config.scope\n \"\n ></div>\n }\n </div>\n }\n </div>\n @if (!config.showAdvancedSearch || config.showAdvancedSearchAsText) {\n <button\n data-testid=\"toggleAdvSearchButton\"\n class=\"adv-search-btn\"\n (click)=\"emitAdvancedSearchOpen()\"\n >\n Advanced <span class=\"material-symbols-outlined icon\"> keyboard_arrow_down </span>\n </button>\n }\n </div>\n</div>\n","/*\n * Public API Surface of components\n */\n\nexport * from './lib/hbll-header/hbll-header.component';\nexport * from './lib/ss-search-bar/ss-search-bar.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.FieldByScopePipe","i1","i2"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@byuhbll/components",
3
- "version": "0.0.12",
3
+ "version": "0.0.13",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^18.0.0",
6
6
  "@angular/core": "^18.0.0"