@pecb-ui/components 1.1.11 → 1.1.12

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.
@@ -5400,6 +5400,13 @@ class DropdownComponent {
5400
5400
  this.searchQuery = signal('', ...(ngDevMode ? [{ debugName: "searchQuery" }] : []));
5401
5401
  this.selectedValues = signal([], ...(ngDevMode ? [{ debugName: "selectedValues" }] : []));
5402
5402
  this.focusedIndex = signal(-1, ...(ngDevMode ? [{ debugName: "focusedIndex" }] : []));
5403
+ /**
5404
+ * Width the overlay panel is pinned to, so it lines up edge-to-edge with the
5405
+ * trigger. Measured with `getBoundingClientRect()` rather than `offsetWidth`
5406
+ * because the latter rounds to whole pixels and leaves the panel a hair off in
5407
+ * fluid layouts.
5408
+ */
5409
+ this.triggerWidth = signal(0, ...(ngDevMode ? [{ debugName: "triggerWidth" }] : []));
5403
5410
  /** Overlay positions: prefer below the trigger, flip above when there's no room. */
5404
5411
  this.overlayPositions = [
5405
5412
  { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 4 },
@@ -5449,11 +5456,23 @@ class DropdownComponent {
5449
5456
  this.onChange(cleared);
5450
5457
  this.selectionChange.emit(cleared);
5451
5458
  }
5459
+ /** Re-measure the trigger so a resize doesn't leave an open panel misaligned. */
5460
+ syncTriggerWidth() {
5461
+ if (!this.isOpen())
5462
+ return;
5463
+ this.measureTrigger();
5464
+ }
5465
+ measureTrigger() {
5466
+ const width = this.triggerEl?.nativeElement.getBoundingClientRect().width;
5467
+ if (width)
5468
+ this.triggerWidth.set(width);
5469
+ }
5452
5470
  toggleDropdown() {
5453
5471
  if (this.disabled())
5454
5472
  return;
5455
5473
  this.isOpen.set(!this.isOpen());
5456
5474
  if (this.isOpen()) {
5475
+ this.measureTrigger();
5457
5476
  this.onTouched();
5458
5477
  this.focusedIndex.set(-1);
5459
5478
  if (this.searchable()) {
@@ -5556,13 +5575,13 @@ class DropdownComponent {
5556
5575
  registerOnTouched(fn) { this.onTouched = fn; }
5557
5576
  setDisabledState(isDisabled) { this.disabled.set(isDisabled); }
5558
5577
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DropdownComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
5559
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.16", type: DropdownComponent, isStandalone: true, selector: "pecb-dropdown", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, searchable: { classPropertyName: "searchable", publicName: "searchable", isSignal: true, isRequired: false, transformFunction: null }, maxHeight: { classPropertyName: "maxHeight", publicName: "maxHeight", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, error: { classPropertyName: "error", publicName: "error", isSignal: true, isRequired: false, transformFunction: null }, errorMessage: { classPropertyName: "errorMessage", publicName: "errorMessage", isSignal: true, isRequired: false, transformFunction: null }, helperText: { classPropertyName: "helperText", publicName: "helperText", isSignal: true, isRequired: false, transformFunction: null }, searchPlaceholder: { classPropertyName: "searchPlaceholder", publicName: "searchPlaceholder", isSignal: true, isRequired: false, transformFunction: null }, clearSelectionAriaLabel: { classPropertyName: "clearSelectionAriaLabel", publicName: "clearSelectionAriaLabel", isSignal: true, isRequired: false, transformFunction: null }, noResultsText: { classPropertyName: "noResultsText", publicName: "noResultsText", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { disabled: "disabledChange", selectionChange: "selectionChange" }, providers: [
5578
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.16", type: DropdownComponent, isStandalone: true, selector: "pecb-dropdown", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, searchable: { classPropertyName: "searchable", publicName: "searchable", isSignal: true, isRequired: false, transformFunction: null }, maxHeight: { classPropertyName: "maxHeight", publicName: "maxHeight", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, error: { classPropertyName: "error", publicName: "error", isSignal: true, isRequired: false, transformFunction: null }, errorMessage: { classPropertyName: "errorMessage", publicName: "errorMessage", isSignal: true, isRequired: false, transformFunction: null }, helperText: { classPropertyName: "helperText", publicName: "helperText", isSignal: true, isRequired: false, transformFunction: null }, searchPlaceholder: { classPropertyName: "searchPlaceholder", publicName: "searchPlaceholder", isSignal: true, isRequired: false, transformFunction: null }, clearSelectionAriaLabel: { classPropertyName: "clearSelectionAriaLabel", publicName: "clearSelectionAriaLabel", isSignal: true, isRequired: false, transformFunction: null }, noResultsText: { classPropertyName: "noResultsText", publicName: "noResultsText", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { disabled: "disabledChange", selectionChange: "selectionChange" }, host: { listeners: { "window:resize": "syncTriggerWidth()" } }, providers: [
5560
5579
  {
5561
5580
  provide: NG_VALUE_ACCESSOR,
5562
5581
  useExisting: forwardRef(() => DropdownComponent),
5563
5582
  multi: true
5564
5583
  }
5565
- ], viewQueries: [{ propertyName: "searchInput", first: true, predicate: ["searchInput"], descendants: true }], ngImport: i0, template: "<div [class]=\"wrapperClasses.join(' ')\">\n <!-- Field title \u2014 sits on the trigger's top border (Figma \"Field - Master\") -->\n <label\n *ngIf=\"label()\"\n [attr.for]=\"id()\"\n class=\"pecb-dropdown__label\"\n >\n {{ label() }}<span *ngIf=\"required()\" class=\"pecb-dropdown__required\">*</span>\n </label>\n\n <!-- Dropdown Trigger -->\n <div\n class=\"pecb-dropdown__trigger\"\n cdkOverlayOrigin\n #ddTrigger=\"cdkOverlayOrigin\"\n #ddTriggerEl\n [attr.tabindex]=\"disabled() ? -1 : 0\"\n [attr.aria-label]=\"label()\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"true\"\n [attr.aria-disabled]=\"disabled()\"\n (click)=\"toggleDropdown()\"\n (keydown)=\"onKeyDown($event)\"\n >\n <span class=\"pecb-dropdown__value\">{{ displayText || placeholder() }}</span>\n\n <!-- Clear button (shown whenever a value is set, single or multi) -->\n <span *ngIf=\"hasValue && !disabled()\" class=\"pecb-dropdown__clear\" (click)=\"clearAll($event)\" [attr.aria-label]=\"clearSelectionAriaLabel()\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M11 1L1 11M1 1L11 11\" stroke=\"#616161\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </span>\n\n <!-- Dropdown Arrow -->\n <span class=\"pecb-dropdown__arrow\">\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M4.5 6.75L9 11.25L13.5 6.75\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </span>\n </div>\n\n <!-- Dropdown Panel \u2014 CDK overlay so it flips near edges and escapes overflow. -->\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"ddTrigger\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayWidth]=\"ddTriggerEl.offsetWidth\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayPush]=\"true\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n (backdropClick)=\"closeDropdown()\"\n (detach)=\"closeDropdown()\"\n >\n <div\n class=\"pecb-dropdown__panel\"\n [style.max-height.px]=\"maxHeight()\"\n >\n <!-- Search Input -->\n <div *ngIf=\"searchable()\" class=\"pecb-dropdown__search\">\n <svg class=\"pecb-dropdown__search-icon\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"currentColor\">\n <path d=\"M11.742 10.344a6.5 6.5 0 1 0-1.397 1.398h-.001c.03.04.062.078.098.115l3.85 3.85a1 1 0 0 0 1.415-1.414l-3.85-3.85a1.007 1.007 0 0 0-.115-.1zM12 6.5a5.5 5.5 0 1 1-11 0 5.5 5.5 0 0 1 11 0z\"/>\n </svg>\n <input\n #searchInput\n type=\"text\"\n class=\"pecb-dropdown__search-input\"\n [placeholder]=\"searchPlaceholder()\"\n [value]=\"searchQuery()\"\n (input)=\"onSearchInput($event)\"\n (keydown)=\"onKeyDown($event)\"\n />\n </div>\n\n <!-- Options List -->\n <div class=\"pecb-dropdown__options\">\n <div\n *ngFor=\"let option of filteredOptions; let i = index\"\n class=\"pecb-dropdown__option\"\n [class.pecb-dropdown__option--selected]=\"isSelected(option)\"\n [class.pecb-dropdown__option--disabled]=\"option.disabled\"\n [class.pecb-dropdown__option--focused]=\"i === focusedIndex()\"\n (click)=\"selectOption(option)\"\n >\n <!-- Checkbox for multi-select -->\n <span *ngIf=\"multiple()\" class=\"pecb-dropdown__checkbox\">\n <span class=\"pecb-dropdown__checkbox-control\" [class.pecb-dropdown__checkbox-control--checked]=\"isSelected(option)\">\n <svg *ngIf=\"isSelected(option)\" class=\"pecb-dropdown__checkbox-icon\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path d=\"M10 3L4.5 8.5L2 6\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </span>\n </span>\n\n <!-- Option Label -->\n <span class=\"pecb-dropdown__option-label\">{{ option.label }}</span>\n </div>\n\n <!-- No results message -->\n <div *ngIf=\"filteredOptions.length === 0\" class=\"pecb-dropdown__no-results\">\n {{ noResultsText() }}\n </div>\n </div>\n </div>\n </ng-template>\n\n <!-- Helper Text / Error Message -->\n <div\n *ngIf=\"helperText() || errorMessage()\"\n [id]=\"id() + '-description'\"\n class=\"pecb-dropdown__description\"\n [class.pecb-dropdown__description--error]=\"error() && errorMessage()\"\n >\n <span *ngIf=\"error() && errorMessage()\">{{ errorMessage() }}</span>\n <span *ngIf=\"!error() && helperText()\">{{ helperText() }}</span>\n </div>\n</div>\n", styles: [".pecb-dropdown{position:relative;display:inline-block;width:100%}.pecb-dropdown__trigger{position:relative;display:flex;align-items:center;width:100%;min-height:40px;padding:12px 32px 12px 16px;font-family:inherit;font-size:14px;color:#313131;background-color:#fff;border:1px solid #c2c2c2;border-radius:8px;cursor:pointer;-webkit-user-select:none;user-select:none;outline:none;box-sizing:border-box;transition-property:border-color,box-shadow;transition-duration:.25s ease-in-out;transition-timing-function:ease-in-out}.pecb-dropdown__trigger:hover:not([aria-disabled=true]){border-color:#919191}.pecb-dropdown__trigger:focus-visible{border-color:#212427;box-shadow:0 0 0 3px #2124271a}.pecb-dropdown__value{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#616161}.pecb-dropdown__label{position:absolute;left:16px;top:0;transform:translateY(-50%);font-family:inherit;font-size:12px;font-weight:400;color:#212427;background-color:#fff;padding:0 6px;pointer-events:none;z-index:1;white-space:nowrap}.pecb-dropdown__required{color:inherit;margin-left:2px}.pecb-dropdown__arrow{position:absolute;right:12px;display:flex;align-items:center;justify-content:center;color:#919191;transition-property:transform;transition-duration:.25s ease-in-out;transition-timing-function:ease-in-out}.pecb-dropdown__arrow svg{display:block}.pecb-dropdown__panel{background-color:#fff;border:1px solid #c2c2c2;border-radius:8px;box-shadow:0 4px 12px #0000001a;overflow:hidden;box-sizing:border-box;display:flex;flex-direction:column}.pecb-dropdown__search{position:relative;padding:12px 12px 8px;border-bottom:1px solid #f7f5f5;flex-shrink:0}.pecb-dropdown__search-icon{position:absolute;left:18px;top:50%;transform:translateY(-50%);color:#c2c2c2;pointer-events:none;z-index:1}.pecb-dropdown__search-input{width:100%;padding:8px 12px 8px 32px;font-family:inherit;font-size:14px;color:#313131;background-color:#fff;border:1px solid #f7f5f5;border-radius:8px;outline:none;box-sizing:border-box;transition-property:border-color,box-shadow;transition-duration:.25s ease-in-out;transition-timing-function:ease-in-out}.pecb-dropdown__search-input::placeholder{color:#c2c2c2;font-size:14px}.pecb-dropdown__search-input:hover{border-color:#ececec}.pecb-dropdown__search-input:focus{border-color:#c2c2c2;box-shadow:0 0 0 1px #c2c2c21a}.pecb-dropdown__options{flex:1;overflow-y:auto;overflow-x:hidden;padding:8px 0;min-height:0}.pecb-dropdown__options::-webkit-scrollbar{width:6px}.pecb-dropdown__options::-webkit-scrollbar-track{background-color:#f4f4f4}.pecb-dropdown__options::-webkit-scrollbar-thumb{background-color:#212427;border-radius:3px}.pecb-dropdown__options::-webkit-scrollbar-thumb:hover{background-color:#0e1011}.pecb-dropdown__option{display:flex;align-items:center;gap:12px;padding:12px 16px;font-family:inherit;font-size:14px;color:#616161;cursor:pointer;transition-property:background-color;transition-duration:.25s ease-in-out;transition-timing-function:ease-in-out}.pecb-dropdown__option:hover:not(.pecb-dropdown__option--disabled){background-color:#f4f4f4}.pecb-dropdown__option--selected{background-color:#f7f5f5}.pecb-dropdown__option--selected:hover{background-color:#ececec}.pecb-dropdown__option--focused{background-color:#f4f4f4}.pecb-dropdown__option--disabled{color:#c2c2c2;cursor:not-allowed;opacity:.5}.pecb-dropdown__option-label{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pecb-dropdown__checkbox{display:flex;align-items:center;flex-shrink:0}.pecb-dropdown__checkbox-control{position:relative;display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;border:1.5px solid #c2c2c2;border-radius:6px;background-color:#fff;transition-property:border-color,background-color;transition-duration:.25s ease-in-out;transition-timing-function:ease-in-out}.pecb-dropdown__checkbox-control--checked{border-color:#212427;background-color:#212427}.pecb-dropdown__checkbox-icon{color:#fff}.pecb-dropdown__clear{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;position:absolute;right:32px;color:#919191;cursor:pointer;transition-property:color;transition-duration:.25s ease-in-out;transition-timing-function:ease-in-out}.pecb-dropdown__clear:hover{color:#313131}.pecb-dropdown--has-value .pecb-dropdown__trigger{padding-right:48px}.pecb-dropdown__no-results{padding:16px;text-align:center;font-family:inherit;font-size:14px;color:#c2c2c2}.pecb-dropdown__description{margin-top:8px;font-family:inherit;font-size:12px;color:#919191}.pecb-dropdown__description--error{color:#a11e29}.pecb-dropdown--open .pecb-dropdown__trigger{border-color:#212427;box-shadow:0 0 0 3px #2124271a}.pecb-dropdown--open .pecb-dropdown__arrow{transform:rotate(180deg)}.pecb-dropdown--open.pecb-dropdown--multiple .pecb-dropdown__trigger{border-color:#c2c2c2;box-shadow:none}.pecb-dropdown--open.pecb-dropdown--multiple .pecb-dropdown__panel{border-radius:8px;border-color:#c2c2c2;box-shadow:0 4px 12px #0000001a}.pecb-dropdown--error .pecb-dropdown__trigger{border-color:#a11e29}.pecb-dropdown--error .pecb-dropdown__trigger:focus-visible{box-shadow:0 0 0 3px #a11e291a}.pecb-dropdown--error .pecb-dropdown__label{color:#a11e29}.pecb-dropdown--disabled .pecb-dropdown__trigger{background-color:#f4f4f4;border-color:#ececec;cursor:not-allowed;opacity:.6}.pecb-dropdown--disabled .pecb-dropdown__value{color:#c2c2c2}.pecb-dropdown--disabled .pecb-dropdown__arrow{color:#ececec}.pecb-dropdown--sm .pecb-dropdown__trigger{min-height:32px;padding:8px 24px 8px 12px;font-size:12px}.pecb-dropdown--sm .pecb-dropdown__label{left:12px}.pecb-dropdown--sm .pecb-dropdown__arrow{right:8px}.pecb-dropdown--sm .pecb-dropdown__option{padding:8px 12px;font-size:12px}.pecb-dropdown--md .pecb-dropdown__trigger{min-height:40px}.pecb-dropdown--lg .pecb-dropdown__trigger{min-height:48px;padding:16px 40px 16px 18px;font-size:16px}.pecb-dropdown--lg .pecb-dropdown__label{left:18px}.pecb-dropdown--lg .pecb-dropdown__arrow{right:16px}.pecb-dropdown--lg .pecb-dropdown__option{padding:12px 18px;font-size:16px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i2.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i2.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
5584
+ ], viewQueries: [{ propertyName: "searchInput", first: true, predicate: ["searchInput"], descendants: true }, { propertyName: "triggerEl", first: true, predicate: ["ddTriggerEl"], descendants: true }], ngImport: i0, template: "<div [class]=\"wrapperClasses.join(' ')\">\n <!-- Field title \u2014 sits on the trigger's top border (Figma \"Field - Master\") -->\n <label\n *ngIf=\"label()\"\n [attr.for]=\"id()\"\n class=\"pecb-dropdown__label\"\n >\n {{ label() }}<span *ngIf=\"required()\" class=\"pecb-dropdown__required\">*</span>\n </label>\n\n <!-- Dropdown Trigger -->\n <div\n class=\"pecb-dropdown__trigger\"\n cdkOverlayOrigin\n #ddTrigger=\"cdkOverlayOrigin\"\n #ddTriggerEl\n [attr.tabindex]=\"disabled() ? -1 : 0\"\n [attr.aria-label]=\"label()\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"true\"\n [attr.aria-disabled]=\"disabled()\"\n (click)=\"toggleDropdown()\"\n (keydown)=\"onKeyDown($event)\"\n >\n <span class=\"pecb-dropdown__value\">{{ displayText || placeholder() }}</span>\n\n <!-- Clear button (shown whenever a value is set, single or multi) -->\n <span *ngIf=\"hasValue && !disabled()\" class=\"pecb-dropdown__clear\" (click)=\"clearAll($event)\" [attr.aria-label]=\"clearSelectionAriaLabel()\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M11 1L1 11M1 1L11 11\" stroke=\"#616161\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </span>\n\n <!-- Dropdown Arrow -->\n <span class=\"pecb-dropdown__arrow\">\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M4.5 6.75L9 11.25L13.5 6.75\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </span>\n </div>\n\n <!-- Dropdown Panel \u2014 CDK overlay so it flips near edges and escapes overflow. -->\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"ddTrigger\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayWidth]=\"triggerWidth()\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayPush]=\"true\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n (backdropClick)=\"closeDropdown()\"\n (detach)=\"closeDropdown()\"\n >\n <div\n class=\"pecb-dropdown__panel\"\n [style.max-height.px]=\"maxHeight()\"\n >\n <!-- Search Input -->\n <div *ngIf=\"searchable()\" class=\"pecb-dropdown__search\">\n <svg class=\"pecb-dropdown__search-icon\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"currentColor\">\n <path d=\"M11.742 10.344a6.5 6.5 0 1 0-1.397 1.398h-.001c.03.04.062.078.098.115l3.85 3.85a1 1 0 0 0 1.415-1.414l-3.85-3.85a1.007 1.007 0 0 0-.115-.1zM12 6.5a5.5 5.5 0 1 1-11 0 5.5 5.5 0 0 1 11 0z\"/>\n </svg>\n <input\n #searchInput\n type=\"text\"\n class=\"pecb-dropdown__search-input\"\n [placeholder]=\"searchPlaceholder()\"\n [value]=\"searchQuery()\"\n (input)=\"onSearchInput($event)\"\n (keydown)=\"onKeyDown($event)\"\n />\n </div>\n\n <!-- Options List -->\n <div class=\"pecb-dropdown__options\">\n <div\n *ngFor=\"let option of filteredOptions; let i = index\"\n class=\"pecb-dropdown__option\"\n [class.pecb-dropdown__option--selected]=\"isSelected(option)\"\n [class.pecb-dropdown__option--disabled]=\"option.disabled\"\n [class.pecb-dropdown__option--focused]=\"i === focusedIndex()\"\n (click)=\"selectOption(option)\"\n >\n <!-- Checkbox for multi-select -->\n <span *ngIf=\"multiple()\" class=\"pecb-dropdown__checkbox\">\n <span class=\"pecb-dropdown__checkbox-control\" [class.pecb-dropdown__checkbox-control--checked]=\"isSelected(option)\">\n <svg *ngIf=\"isSelected(option)\" class=\"pecb-dropdown__checkbox-icon\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path d=\"M10 3L4.5 8.5L2 6\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </span>\n </span>\n\n <!-- Option Label -->\n <span class=\"pecb-dropdown__option-label\">{{ option.label }}</span>\n </div>\n\n <!-- No results message -->\n <div *ngIf=\"filteredOptions.length === 0\" class=\"pecb-dropdown__no-results\">\n {{ noResultsText() }}\n </div>\n </div>\n </div>\n </ng-template>\n\n <!-- Helper Text / Error Message -->\n <div\n *ngIf=\"helperText() || errorMessage()\"\n [id]=\"id() + '-description'\"\n class=\"pecb-dropdown__description\"\n [class.pecb-dropdown__description--error]=\"error() && errorMessage()\"\n >\n <span *ngIf=\"error() && errorMessage()\">{{ errorMessage() }}</span>\n <span *ngIf=\"!error() && helperText()\">{{ helperText() }}</span>\n </div>\n</div>\n", styles: [".pecb-dropdown{position:relative;display:inline-block;width:100%}.pecb-dropdown__trigger{position:relative;display:flex;align-items:center;width:100%;min-height:40px;padding:12px 32px 12px 16px;font-family:inherit;font-size:14px;color:#313131;background-color:#fff;border:1px solid #c2c2c2;border-radius:8px;cursor:pointer;-webkit-user-select:none;user-select:none;outline:none;box-sizing:border-box;transition-property:border-color,box-shadow;transition-duration:.25s ease-in-out;transition-timing-function:ease-in-out}.pecb-dropdown__trigger:hover:not([aria-disabled=true]){border-color:#919191}.pecb-dropdown__trigger:focus-visible{border-color:#212427;box-shadow:0 0 0 3px #2124271a}.pecb-dropdown__value{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#616161}.pecb-dropdown__label{position:absolute;left:16px;top:0;transform:translateY(-50%);font-family:inherit;font-size:12px;font-weight:400;color:#212427;background-color:#fff;padding:0 6px;pointer-events:none;z-index:1;white-space:nowrap}.pecb-dropdown__required{color:inherit;margin-left:2px}.pecb-dropdown__arrow{position:absolute;right:12px;display:flex;align-items:center;justify-content:center;color:#919191;transition-property:transform;transition-duration:.25s ease-in-out;transition-timing-function:ease-in-out}.pecb-dropdown__arrow svg{display:block}.pecb-dropdown__panel{width:100%;background-color:#fff;border:1px solid #c2c2c2;border-radius:8px;box-shadow:0 4px 12px #0000001a;overflow:hidden;box-sizing:border-box;display:flex;flex-direction:column}.pecb-dropdown__search{position:relative;padding:12px 12px 8px;border-bottom:1px solid #f7f5f5;flex-shrink:0}.pecb-dropdown__search-icon{position:absolute;left:18px;top:50%;transform:translateY(-50%);color:#c2c2c2;pointer-events:none;z-index:1}.pecb-dropdown__search-input{width:100%;padding:8px 12px 8px 32px;font-family:inherit;font-size:14px;color:#313131;background-color:#fff;border:1px solid #f7f5f5;border-radius:8px;outline:none;box-sizing:border-box;transition-property:border-color,box-shadow;transition-duration:.25s ease-in-out;transition-timing-function:ease-in-out}.pecb-dropdown__search-input::placeholder{color:#c2c2c2;font-size:14px}.pecb-dropdown__search-input:hover{border-color:#ececec}.pecb-dropdown__search-input:focus{border-color:#c2c2c2;box-shadow:0 0 0 1px #c2c2c21a}.pecb-dropdown__options{flex:1;overflow-y:auto;overflow-x:hidden;padding:8px 0;min-height:0}.pecb-dropdown__options::-webkit-scrollbar{width:6px}.pecb-dropdown__options::-webkit-scrollbar-track{background-color:#f4f4f4}.pecb-dropdown__options::-webkit-scrollbar-thumb{background-color:#212427;border-radius:3px}.pecb-dropdown__options::-webkit-scrollbar-thumb:hover{background-color:#0e1011}.pecb-dropdown__option{display:flex;align-items:center;gap:12px;padding:12px 16px;font-family:inherit;font-size:14px;color:#616161;cursor:pointer;transition-property:background-color;transition-duration:.25s ease-in-out;transition-timing-function:ease-in-out}.pecb-dropdown__option:hover:not(.pecb-dropdown__option--disabled){background-color:#f4f4f4}.pecb-dropdown__option--selected{background-color:#f7f5f5}.pecb-dropdown__option--selected:hover{background-color:#ececec}.pecb-dropdown__option--focused{background-color:#f4f4f4}.pecb-dropdown__option--disabled{color:#c2c2c2;cursor:not-allowed;opacity:.5}.pecb-dropdown__option-label{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pecb-dropdown__checkbox{display:flex;align-items:center;flex-shrink:0}.pecb-dropdown__checkbox-control{position:relative;display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;border:1.5px solid #c2c2c2;border-radius:6px;background-color:#fff;transition-property:border-color,background-color;transition-duration:.25s ease-in-out;transition-timing-function:ease-in-out}.pecb-dropdown__checkbox-control--checked{border-color:#212427;background-color:#212427}.pecb-dropdown__checkbox-icon{color:#fff}.pecb-dropdown__clear{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;position:absolute;right:32px;color:#919191;cursor:pointer;transition-property:color;transition-duration:.25s ease-in-out;transition-timing-function:ease-in-out}.pecb-dropdown__clear:hover{color:#313131}.pecb-dropdown--has-value .pecb-dropdown__trigger{padding-right:48px}.pecb-dropdown__no-results{padding:16px;text-align:center;font-family:inherit;font-size:14px;color:#c2c2c2}.pecb-dropdown__description{margin-top:8px;font-family:inherit;font-size:12px;color:#919191}.pecb-dropdown__description--error{color:#a11e29}.pecb-dropdown--open .pecb-dropdown__trigger{border-color:#212427;box-shadow:0 0 0 3px #2124271a}.pecb-dropdown--open .pecb-dropdown__arrow{transform:rotate(180deg)}.pecb-dropdown--open.pecb-dropdown--multiple .pecb-dropdown__trigger{border-color:#c2c2c2;box-shadow:none}.pecb-dropdown--open.pecb-dropdown--multiple .pecb-dropdown__panel{border-radius:8px;border-color:#c2c2c2;box-shadow:0 4px 12px #0000001a}.pecb-dropdown--error .pecb-dropdown__trigger{border-color:#a11e29}.pecb-dropdown--error .pecb-dropdown__trigger:focus-visible{box-shadow:0 0 0 3px #a11e291a}.pecb-dropdown--error .pecb-dropdown__label{color:#a11e29}.pecb-dropdown--disabled .pecb-dropdown__trigger{background-color:#f4f4f4;border-color:#ececec;cursor:not-allowed;opacity:.6}.pecb-dropdown--disabled .pecb-dropdown__value{color:#c2c2c2}.pecb-dropdown--disabled .pecb-dropdown__arrow{color:#ececec}.pecb-dropdown--sm .pecb-dropdown__trigger{min-height:32px;padding:8px 24px 8px 12px;font-size:12px}.pecb-dropdown--sm .pecb-dropdown__label{left:12px}.pecb-dropdown--sm .pecb-dropdown__arrow{right:8px}.pecb-dropdown--sm .pecb-dropdown__option{padding:8px 12px;font-size:12px}.pecb-dropdown--md .pecb-dropdown__trigger{min-height:40px}.pecb-dropdown--lg .pecb-dropdown__trigger{min-height:48px;padding:16px 40px 16px 18px;font-size:16px}.pecb-dropdown--lg .pecb-dropdown__label{left:18px}.pecb-dropdown--lg .pecb-dropdown__arrow{right:16px}.pecb-dropdown--lg .pecb-dropdown__option{padding:12px 18px;font-size:16px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i2.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i2.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
5566
5585
  }
5567
5586
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DropdownComponent, decorators: [{
5568
5587
  type: Component,
@@ -5572,11 +5591,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
5572
5591
  useExisting: forwardRef(() => DropdownComponent),
5573
5592
  multi: true
5574
5593
  }
5575
- ], template: "<div [class]=\"wrapperClasses.join(' ')\">\n <!-- Field title \u2014 sits on the trigger's top border (Figma \"Field - Master\") -->\n <label\n *ngIf=\"label()\"\n [attr.for]=\"id()\"\n class=\"pecb-dropdown__label\"\n >\n {{ label() }}<span *ngIf=\"required()\" class=\"pecb-dropdown__required\">*</span>\n </label>\n\n <!-- Dropdown Trigger -->\n <div\n class=\"pecb-dropdown__trigger\"\n cdkOverlayOrigin\n #ddTrigger=\"cdkOverlayOrigin\"\n #ddTriggerEl\n [attr.tabindex]=\"disabled() ? -1 : 0\"\n [attr.aria-label]=\"label()\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"true\"\n [attr.aria-disabled]=\"disabled()\"\n (click)=\"toggleDropdown()\"\n (keydown)=\"onKeyDown($event)\"\n >\n <span class=\"pecb-dropdown__value\">{{ displayText || placeholder() }}</span>\n\n <!-- Clear button (shown whenever a value is set, single or multi) -->\n <span *ngIf=\"hasValue && !disabled()\" class=\"pecb-dropdown__clear\" (click)=\"clearAll($event)\" [attr.aria-label]=\"clearSelectionAriaLabel()\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M11 1L1 11M1 1L11 11\" stroke=\"#616161\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </span>\n\n <!-- Dropdown Arrow -->\n <span class=\"pecb-dropdown__arrow\">\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M4.5 6.75L9 11.25L13.5 6.75\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </span>\n </div>\n\n <!-- Dropdown Panel \u2014 CDK overlay so it flips near edges and escapes overflow. -->\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"ddTrigger\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayWidth]=\"ddTriggerEl.offsetWidth\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayPush]=\"true\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n (backdropClick)=\"closeDropdown()\"\n (detach)=\"closeDropdown()\"\n >\n <div\n class=\"pecb-dropdown__panel\"\n [style.max-height.px]=\"maxHeight()\"\n >\n <!-- Search Input -->\n <div *ngIf=\"searchable()\" class=\"pecb-dropdown__search\">\n <svg class=\"pecb-dropdown__search-icon\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"currentColor\">\n <path d=\"M11.742 10.344a6.5 6.5 0 1 0-1.397 1.398h-.001c.03.04.062.078.098.115l3.85 3.85a1 1 0 0 0 1.415-1.414l-3.85-3.85a1.007 1.007 0 0 0-.115-.1zM12 6.5a5.5 5.5 0 1 1-11 0 5.5 5.5 0 0 1 11 0z\"/>\n </svg>\n <input\n #searchInput\n type=\"text\"\n class=\"pecb-dropdown__search-input\"\n [placeholder]=\"searchPlaceholder()\"\n [value]=\"searchQuery()\"\n (input)=\"onSearchInput($event)\"\n (keydown)=\"onKeyDown($event)\"\n />\n </div>\n\n <!-- Options List -->\n <div class=\"pecb-dropdown__options\">\n <div\n *ngFor=\"let option of filteredOptions; let i = index\"\n class=\"pecb-dropdown__option\"\n [class.pecb-dropdown__option--selected]=\"isSelected(option)\"\n [class.pecb-dropdown__option--disabled]=\"option.disabled\"\n [class.pecb-dropdown__option--focused]=\"i === focusedIndex()\"\n (click)=\"selectOption(option)\"\n >\n <!-- Checkbox for multi-select -->\n <span *ngIf=\"multiple()\" class=\"pecb-dropdown__checkbox\">\n <span class=\"pecb-dropdown__checkbox-control\" [class.pecb-dropdown__checkbox-control--checked]=\"isSelected(option)\">\n <svg *ngIf=\"isSelected(option)\" class=\"pecb-dropdown__checkbox-icon\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path d=\"M10 3L4.5 8.5L2 6\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </span>\n </span>\n\n <!-- Option Label -->\n <span class=\"pecb-dropdown__option-label\">{{ option.label }}</span>\n </div>\n\n <!-- No results message -->\n <div *ngIf=\"filteredOptions.length === 0\" class=\"pecb-dropdown__no-results\">\n {{ noResultsText() }}\n </div>\n </div>\n </div>\n </ng-template>\n\n <!-- Helper Text / Error Message -->\n <div\n *ngIf=\"helperText() || errorMessage()\"\n [id]=\"id() + '-description'\"\n class=\"pecb-dropdown__description\"\n [class.pecb-dropdown__description--error]=\"error() && errorMessage()\"\n >\n <span *ngIf=\"error() && errorMessage()\">{{ errorMessage() }}</span>\n <span *ngIf=\"!error() && helperText()\">{{ helperText() }}</span>\n </div>\n</div>\n", styles: [".pecb-dropdown{position:relative;display:inline-block;width:100%}.pecb-dropdown__trigger{position:relative;display:flex;align-items:center;width:100%;min-height:40px;padding:12px 32px 12px 16px;font-family:inherit;font-size:14px;color:#313131;background-color:#fff;border:1px solid #c2c2c2;border-radius:8px;cursor:pointer;-webkit-user-select:none;user-select:none;outline:none;box-sizing:border-box;transition-property:border-color,box-shadow;transition-duration:.25s ease-in-out;transition-timing-function:ease-in-out}.pecb-dropdown__trigger:hover:not([aria-disabled=true]){border-color:#919191}.pecb-dropdown__trigger:focus-visible{border-color:#212427;box-shadow:0 0 0 3px #2124271a}.pecb-dropdown__value{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#616161}.pecb-dropdown__label{position:absolute;left:16px;top:0;transform:translateY(-50%);font-family:inherit;font-size:12px;font-weight:400;color:#212427;background-color:#fff;padding:0 6px;pointer-events:none;z-index:1;white-space:nowrap}.pecb-dropdown__required{color:inherit;margin-left:2px}.pecb-dropdown__arrow{position:absolute;right:12px;display:flex;align-items:center;justify-content:center;color:#919191;transition-property:transform;transition-duration:.25s ease-in-out;transition-timing-function:ease-in-out}.pecb-dropdown__arrow svg{display:block}.pecb-dropdown__panel{background-color:#fff;border:1px solid #c2c2c2;border-radius:8px;box-shadow:0 4px 12px #0000001a;overflow:hidden;box-sizing:border-box;display:flex;flex-direction:column}.pecb-dropdown__search{position:relative;padding:12px 12px 8px;border-bottom:1px solid #f7f5f5;flex-shrink:0}.pecb-dropdown__search-icon{position:absolute;left:18px;top:50%;transform:translateY(-50%);color:#c2c2c2;pointer-events:none;z-index:1}.pecb-dropdown__search-input{width:100%;padding:8px 12px 8px 32px;font-family:inherit;font-size:14px;color:#313131;background-color:#fff;border:1px solid #f7f5f5;border-radius:8px;outline:none;box-sizing:border-box;transition-property:border-color,box-shadow;transition-duration:.25s ease-in-out;transition-timing-function:ease-in-out}.pecb-dropdown__search-input::placeholder{color:#c2c2c2;font-size:14px}.pecb-dropdown__search-input:hover{border-color:#ececec}.pecb-dropdown__search-input:focus{border-color:#c2c2c2;box-shadow:0 0 0 1px #c2c2c21a}.pecb-dropdown__options{flex:1;overflow-y:auto;overflow-x:hidden;padding:8px 0;min-height:0}.pecb-dropdown__options::-webkit-scrollbar{width:6px}.pecb-dropdown__options::-webkit-scrollbar-track{background-color:#f4f4f4}.pecb-dropdown__options::-webkit-scrollbar-thumb{background-color:#212427;border-radius:3px}.pecb-dropdown__options::-webkit-scrollbar-thumb:hover{background-color:#0e1011}.pecb-dropdown__option{display:flex;align-items:center;gap:12px;padding:12px 16px;font-family:inherit;font-size:14px;color:#616161;cursor:pointer;transition-property:background-color;transition-duration:.25s ease-in-out;transition-timing-function:ease-in-out}.pecb-dropdown__option:hover:not(.pecb-dropdown__option--disabled){background-color:#f4f4f4}.pecb-dropdown__option--selected{background-color:#f7f5f5}.pecb-dropdown__option--selected:hover{background-color:#ececec}.pecb-dropdown__option--focused{background-color:#f4f4f4}.pecb-dropdown__option--disabled{color:#c2c2c2;cursor:not-allowed;opacity:.5}.pecb-dropdown__option-label{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pecb-dropdown__checkbox{display:flex;align-items:center;flex-shrink:0}.pecb-dropdown__checkbox-control{position:relative;display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;border:1.5px solid #c2c2c2;border-radius:6px;background-color:#fff;transition-property:border-color,background-color;transition-duration:.25s ease-in-out;transition-timing-function:ease-in-out}.pecb-dropdown__checkbox-control--checked{border-color:#212427;background-color:#212427}.pecb-dropdown__checkbox-icon{color:#fff}.pecb-dropdown__clear{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;position:absolute;right:32px;color:#919191;cursor:pointer;transition-property:color;transition-duration:.25s ease-in-out;transition-timing-function:ease-in-out}.pecb-dropdown__clear:hover{color:#313131}.pecb-dropdown--has-value .pecb-dropdown__trigger{padding-right:48px}.pecb-dropdown__no-results{padding:16px;text-align:center;font-family:inherit;font-size:14px;color:#c2c2c2}.pecb-dropdown__description{margin-top:8px;font-family:inherit;font-size:12px;color:#919191}.pecb-dropdown__description--error{color:#a11e29}.pecb-dropdown--open .pecb-dropdown__trigger{border-color:#212427;box-shadow:0 0 0 3px #2124271a}.pecb-dropdown--open .pecb-dropdown__arrow{transform:rotate(180deg)}.pecb-dropdown--open.pecb-dropdown--multiple .pecb-dropdown__trigger{border-color:#c2c2c2;box-shadow:none}.pecb-dropdown--open.pecb-dropdown--multiple .pecb-dropdown__panel{border-radius:8px;border-color:#c2c2c2;box-shadow:0 4px 12px #0000001a}.pecb-dropdown--error .pecb-dropdown__trigger{border-color:#a11e29}.pecb-dropdown--error .pecb-dropdown__trigger:focus-visible{box-shadow:0 0 0 3px #a11e291a}.pecb-dropdown--error .pecb-dropdown__label{color:#a11e29}.pecb-dropdown--disabled .pecb-dropdown__trigger{background-color:#f4f4f4;border-color:#ececec;cursor:not-allowed;opacity:.6}.pecb-dropdown--disabled .pecb-dropdown__value{color:#c2c2c2}.pecb-dropdown--disabled .pecb-dropdown__arrow{color:#ececec}.pecb-dropdown--sm .pecb-dropdown__trigger{min-height:32px;padding:8px 24px 8px 12px;font-size:12px}.pecb-dropdown--sm .pecb-dropdown__label{left:12px}.pecb-dropdown--sm .pecb-dropdown__arrow{right:8px}.pecb-dropdown--sm .pecb-dropdown__option{padding:8px 12px;font-size:12px}.pecb-dropdown--md .pecb-dropdown__trigger{min-height:40px}.pecb-dropdown--lg .pecb-dropdown__trigger{min-height:48px;padding:16px 40px 16px 18px;font-size:16px}.pecb-dropdown--lg .pecb-dropdown__label{left:18px}.pecb-dropdown--lg .pecb-dropdown__arrow{right:16px}.pecb-dropdown--lg .pecb-dropdown__option{padding:12px 18px;font-size:16px}\n"] }]
5594
+ ], template: "<div [class]=\"wrapperClasses.join(' ')\">\n <!-- Field title \u2014 sits on the trigger's top border (Figma \"Field - Master\") -->\n <label\n *ngIf=\"label()\"\n [attr.for]=\"id()\"\n class=\"pecb-dropdown__label\"\n >\n {{ label() }}<span *ngIf=\"required()\" class=\"pecb-dropdown__required\">*</span>\n </label>\n\n <!-- Dropdown Trigger -->\n <div\n class=\"pecb-dropdown__trigger\"\n cdkOverlayOrigin\n #ddTrigger=\"cdkOverlayOrigin\"\n #ddTriggerEl\n [attr.tabindex]=\"disabled() ? -1 : 0\"\n [attr.aria-label]=\"label()\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"true\"\n [attr.aria-disabled]=\"disabled()\"\n (click)=\"toggleDropdown()\"\n (keydown)=\"onKeyDown($event)\"\n >\n <span class=\"pecb-dropdown__value\">{{ displayText || placeholder() }}</span>\n\n <!-- Clear button (shown whenever a value is set, single or multi) -->\n <span *ngIf=\"hasValue && !disabled()\" class=\"pecb-dropdown__clear\" (click)=\"clearAll($event)\" [attr.aria-label]=\"clearSelectionAriaLabel()\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M11 1L1 11M1 1L11 11\" stroke=\"#616161\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </span>\n\n <!-- Dropdown Arrow -->\n <span class=\"pecb-dropdown__arrow\">\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M4.5 6.75L9 11.25L13.5 6.75\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </span>\n </div>\n\n <!-- Dropdown Panel \u2014 CDK overlay so it flips near edges and escapes overflow. -->\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"ddTrigger\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayWidth]=\"triggerWidth()\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayPush]=\"true\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n (backdropClick)=\"closeDropdown()\"\n (detach)=\"closeDropdown()\"\n >\n <div\n class=\"pecb-dropdown__panel\"\n [style.max-height.px]=\"maxHeight()\"\n >\n <!-- Search Input -->\n <div *ngIf=\"searchable()\" class=\"pecb-dropdown__search\">\n <svg class=\"pecb-dropdown__search-icon\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"currentColor\">\n <path d=\"M11.742 10.344a6.5 6.5 0 1 0-1.397 1.398h-.001c.03.04.062.078.098.115l3.85 3.85a1 1 0 0 0 1.415-1.414l-3.85-3.85a1.007 1.007 0 0 0-.115-.1zM12 6.5a5.5 5.5 0 1 1-11 0 5.5 5.5 0 0 1 11 0z\"/>\n </svg>\n <input\n #searchInput\n type=\"text\"\n class=\"pecb-dropdown__search-input\"\n [placeholder]=\"searchPlaceholder()\"\n [value]=\"searchQuery()\"\n (input)=\"onSearchInput($event)\"\n (keydown)=\"onKeyDown($event)\"\n />\n </div>\n\n <!-- Options List -->\n <div class=\"pecb-dropdown__options\">\n <div\n *ngFor=\"let option of filteredOptions; let i = index\"\n class=\"pecb-dropdown__option\"\n [class.pecb-dropdown__option--selected]=\"isSelected(option)\"\n [class.pecb-dropdown__option--disabled]=\"option.disabled\"\n [class.pecb-dropdown__option--focused]=\"i === focusedIndex()\"\n (click)=\"selectOption(option)\"\n >\n <!-- Checkbox for multi-select -->\n <span *ngIf=\"multiple()\" class=\"pecb-dropdown__checkbox\">\n <span class=\"pecb-dropdown__checkbox-control\" [class.pecb-dropdown__checkbox-control--checked]=\"isSelected(option)\">\n <svg *ngIf=\"isSelected(option)\" class=\"pecb-dropdown__checkbox-icon\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path d=\"M10 3L4.5 8.5L2 6\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </span>\n </span>\n\n <!-- Option Label -->\n <span class=\"pecb-dropdown__option-label\">{{ option.label }}</span>\n </div>\n\n <!-- No results message -->\n <div *ngIf=\"filteredOptions.length === 0\" class=\"pecb-dropdown__no-results\">\n {{ noResultsText() }}\n </div>\n </div>\n </div>\n </ng-template>\n\n <!-- Helper Text / Error Message -->\n <div\n *ngIf=\"helperText() || errorMessage()\"\n [id]=\"id() + '-description'\"\n class=\"pecb-dropdown__description\"\n [class.pecb-dropdown__description--error]=\"error() && errorMessage()\"\n >\n <span *ngIf=\"error() && errorMessage()\">{{ errorMessage() }}</span>\n <span *ngIf=\"!error() && helperText()\">{{ helperText() }}</span>\n </div>\n</div>\n", styles: [".pecb-dropdown{position:relative;display:inline-block;width:100%}.pecb-dropdown__trigger{position:relative;display:flex;align-items:center;width:100%;min-height:40px;padding:12px 32px 12px 16px;font-family:inherit;font-size:14px;color:#313131;background-color:#fff;border:1px solid #c2c2c2;border-radius:8px;cursor:pointer;-webkit-user-select:none;user-select:none;outline:none;box-sizing:border-box;transition-property:border-color,box-shadow;transition-duration:.25s ease-in-out;transition-timing-function:ease-in-out}.pecb-dropdown__trigger:hover:not([aria-disabled=true]){border-color:#919191}.pecb-dropdown__trigger:focus-visible{border-color:#212427;box-shadow:0 0 0 3px #2124271a}.pecb-dropdown__value{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#616161}.pecb-dropdown__label{position:absolute;left:16px;top:0;transform:translateY(-50%);font-family:inherit;font-size:12px;font-weight:400;color:#212427;background-color:#fff;padding:0 6px;pointer-events:none;z-index:1;white-space:nowrap}.pecb-dropdown__required{color:inherit;margin-left:2px}.pecb-dropdown__arrow{position:absolute;right:12px;display:flex;align-items:center;justify-content:center;color:#919191;transition-property:transform;transition-duration:.25s ease-in-out;transition-timing-function:ease-in-out}.pecb-dropdown__arrow svg{display:block}.pecb-dropdown__panel{width:100%;background-color:#fff;border:1px solid #c2c2c2;border-radius:8px;box-shadow:0 4px 12px #0000001a;overflow:hidden;box-sizing:border-box;display:flex;flex-direction:column}.pecb-dropdown__search{position:relative;padding:12px 12px 8px;border-bottom:1px solid #f7f5f5;flex-shrink:0}.pecb-dropdown__search-icon{position:absolute;left:18px;top:50%;transform:translateY(-50%);color:#c2c2c2;pointer-events:none;z-index:1}.pecb-dropdown__search-input{width:100%;padding:8px 12px 8px 32px;font-family:inherit;font-size:14px;color:#313131;background-color:#fff;border:1px solid #f7f5f5;border-radius:8px;outline:none;box-sizing:border-box;transition-property:border-color,box-shadow;transition-duration:.25s ease-in-out;transition-timing-function:ease-in-out}.pecb-dropdown__search-input::placeholder{color:#c2c2c2;font-size:14px}.pecb-dropdown__search-input:hover{border-color:#ececec}.pecb-dropdown__search-input:focus{border-color:#c2c2c2;box-shadow:0 0 0 1px #c2c2c21a}.pecb-dropdown__options{flex:1;overflow-y:auto;overflow-x:hidden;padding:8px 0;min-height:0}.pecb-dropdown__options::-webkit-scrollbar{width:6px}.pecb-dropdown__options::-webkit-scrollbar-track{background-color:#f4f4f4}.pecb-dropdown__options::-webkit-scrollbar-thumb{background-color:#212427;border-radius:3px}.pecb-dropdown__options::-webkit-scrollbar-thumb:hover{background-color:#0e1011}.pecb-dropdown__option{display:flex;align-items:center;gap:12px;padding:12px 16px;font-family:inherit;font-size:14px;color:#616161;cursor:pointer;transition-property:background-color;transition-duration:.25s ease-in-out;transition-timing-function:ease-in-out}.pecb-dropdown__option:hover:not(.pecb-dropdown__option--disabled){background-color:#f4f4f4}.pecb-dropdown__option--selected{background-color:#f7f5f5}.pecb-dropdown__option--selected:hover{background-color:#ececec}.pecb-dropdown__option--focused{background-color:#f4f4f4}.pecb-dropdown__option--disabled{color:#c2c2c2;cursor:not-allowed;opacity:.5}.pecb-dropdown__option-label{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pecb-dropdown__checkbox{display:flex;align-items:center;flex-shrink:0}.pecb-dropdown__checkbox-control{position:relative;display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;border:1.5px solid #c2c2c2;border-radius:6px;background-color:#fff;transition-property:border-color,background-color;transition-duration:.25s ease-in-out;transition-timing-function:ease-in-out}.pecb-dropdown__checkbox-control--checked{border-color:#212427;background-color:#212427}.pecb-dropdown__checkbox-icon{color:#fff}.pecb-dropdown__clear{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;position:absolute;right:32px;color:#919191;cursor:pointer;transition-property:color;transition-duration:.25s ease-in-out;transition-timing-function:ease-in-out}.pecb-dropdown__clear:hover{color:#313131}.pecb-dropdown--has-value .pecb-dropdown__trigger{padding-right:48px}.pecb-dropdown__no-results{padding:16px;text-align:center;font-family:inherit;font-size:14px;color:#c2c2c2}.pecb-dropdown__description{margin-top:8px;font-family:inherit;font-size:12px;color:#919191}.pecb-dropdown__description--error{color:#a11e29}.pecb-dropdown--open .pecb-dropdown__trigger{border-color:#212427;box-shadow:0 0 0 3px #2124271a}.pecb-dropdown--open .pecb-dropdown__arrow{transform:rotate(180deg)}.pecb-dropdown--open.pecb-dropdown--multiple .pecb-dropdown__trigger{border-color:#c2c2c2;box-shadow:none}.pecb-dropdown--open.pecb-dropdown--multiple .pecb-dropdown__panel{border-radius:8px;border-color:#c2c2c2;box-shadow:0 4px 12px #0000001a}.pecb-dropdown--error .pecb-dropdown__trigger{border-color:#a11e29}.pecb-dropdown--error .pecb-dropdown__trigger:focus-visible{box-shadow:0 0 0 3px #a11e291a}.pecb-dropdown--error .pecb-dropdown__label{color:#a11e29}.pecb-dropdown--disabled .pecb-dropdown__trigger{background-color:#f4f4f4;border-color:#ececec;cursor:not-allowed;opacity:.6}.pecb-dropdown--disabled .pecb-dropdown__value{color:#c2c2c2}.pecb-dropdown--disabled .pecb-dropdown__arrow{color:#ececec}.pecb-dropdown--sm .pecb-dropdown__trigger{min-height:32px;padding:8px 24px 8px 12px;font-size:12px}.pecb-dropdown--sm .pecb-dropdown__label{left:12px}.pecb-dropdown--sm .pecb-dropdown__arrow{right:8px}.pecb-dropdown--sm .pecb-dropdown__option{padding:8px 12px;font-size:12px}.pecb-dropdown--md .pecb-dropdown__trigger{min-height:40px}.pecb-dropdown--lg .pecb-dropdown__trigger{min-height:48px;padding:16px 40px 16px 18px;font-size:16px}.pecb-dropdown--lg .pecb-dropdown__label{left:18px}.pecb-dropdown--lg .pecb-dropdown__arrow{right:16px}.pecb-dropdown--lg .pecb-dropdown__option{padding:12px 18px;font-size:16px}\n"] }]
5576
5595
  }], propDecorators: { searchInput: [{
5577
5596
  type: ViewChild,
5578
5597
  args: ['searchInput']
5579
- }], id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: false }] }], multiple: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiple", required: false }] }], searchable: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchable", required: false }] }], maxHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxHeight", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }, { type: i0.Output, args: ["disabledChange"] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], error: [{ type: i0.Input, args: [{ isSignal: true, alias: "error", required: false }] }], errorMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "errorMessage", required: false }] }], helperText: [{ type: i0.Input, args: [{ isSignal: true, alias: "helperText", required: false }] }], searchPlaceholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchPlaceholder", required: false }] }], clearSelectionAriaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "clearSelectionAriaLabel", required: false }] }], noResultsText: [{ type: i0.Input, args: [{ isSignal: true, alias: "noResultsText", required: false }] }], selectionChange: [{ type: i0.Output, args: ["selectionChange"] }] } });
5598
+ }], triggerEl: [{
5599
+ type: ViewChild,
5600
+ args: ['ddTriggerEl']
5601
+ }], id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: false }] }], multiple: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiple", required: false }] }], searchable: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchable", required: false }] }], maxHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxHeight", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }, { type: i0.Output, args: ["disabledChange"] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], error: [{ type: i0.Input, args: [{ isSignal: true, alias: "error", required: false }] }], errorMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "errorMessage", required: false }] }], helperText: [{ type: i0.Input, args: [{ isSignal: true, alias: "helperText", required: false }] }], searchPlaceholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchPlaceholder", required: false }] }], clearSelectionAriaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "clearSelectionAriaLabel", required: false }] }], noResultsText: [{ type: i0.Input, args: [{ isSignal: true, alias: "noResultsText", required: false }] }], selectionChange: [{ type: i0.Output, args: ["selectionChange"] }], syncTriggerWidth: [{
5602
+ type: HostListener,
5603
+ args: ['window:resize']
5604
+ }] } });
5580
5605
 
5581
5606
  class RightModalComponent {
5582
5607
  constructor() {