carriera-intern-components 1.1.39 → 1.1.40
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/app/components/avatar/avatar.component.d.ts +1 -1
- package/app/components/sticky-scrollbar/enums/index.d.ts +1 -0
- package/app/components/sticky-scrollbar/enums/scroll-state.enum.d.ts +6 -0
- package/app/components/sticky-scrollbar/sticky-scrollbar.component.d.ts +82 -0
- package/app/utils/constants/input-character-sets.constants.d.ts +5 -5
- package/fesm2022/carriera-intern-components.mjs +266 -3
- package/fesm2022/carriera-intern-components.mjs.map +1 -1
- package/package.json +1 -1
- package/public-api.d.ts +2 -0
|
@@ -14,7 +14,7 @@ export declare class AvatarComponent {
|
|
|
14
14
|
* The size of the avatar in pixels.
|
|
15
15
|
* @type {Size}
|
|
16
16
|
*/
|
|
17
|
-
size: import("@angular/core").InputSignal<
|
|
17
|
+
size: import("@angular/core").InputSignal<18 | 22 | 32 | 74 | 160 | 28>;
|
|
18
18
|
/**
|
|
19
19
|
* Whether the avatar should be rounded or not.
|
|
20
20
|
* @type {boolean}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './scroll-state.enum';
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { AfterViewInit, ElementRef, EventEmitter, OnChanges, SimpleChanges } from '@angular/core';
|
|
2
|
+
import { eScrollState } from './enums';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class StickyScrollbarComponent implements AfterViewInit, OnChanges {
|
|
5
|
+
scrollContainer: ElementRef<HTMLDivElement>;
|
|
6
|
+
scrollThumb: ElementRef<HTMLDivElement>;
|
|
7
|
+
/**
|
|
8
|
+
* Input to set scroll position programmatically (for syncing multiple scrollbars)
|
|
9
|
+
*/
|
|
10
|
+
scrollPosition?: number;
|
|
11
|
+
/**
|
|
12
|
+
* Hide the scrollbar track completely
|
|
13
|
+
*/
|
|
14
|
+
hideTrack: boolean;
|
|
15
|
+
/**
|
|
16
|
+
* Offset for the sticky position from the bottom (in pixels)
|
|
17
|
+
* @default 0
|
|
18
|
+
*/
|
|
19
|
+
stickyOffset: number;
|
|
20
|
+
/**
|
|
21
|
+
* Output to emit scroll position changes (for syncing multiple scrollbars)
|
|
22
|
+
*/
|
|
23
|
+
scrollPositionChange: EventEmitter<number>;
|
|
24
|
+
/**
|
|
25
|
+
* Output to emit scroll state changes (start, scrolling, end)
|
|
26
|
+
*/
|
|
27
|
+
scrollStateChange: EventEmitter<eScrollState>;
|
|
28
|
+
private readonly renderer;
|
|
29
|
+
private readonly destroyRef;
|
|
30
|
+
isDragging: boolean;
|
|
31
|
+
private dragStartX;
|
|
32
|
+
private scrollStartLeft;
|
|
33
|
+
private isSettingScrollPosition;
|
|
34
|
+
private currentScrollState?;
|
|
35
|
+
private setPositionTimeout?;
|
|
36
|
+
private dragStart$;
|
|
37
|
+
private dragEnd$;
|
|
38
|
+
ngOnChanges(changes: SimpleChanges): void;
|
|
39
|
+
ngAfterViewInit(): void;
|
|
40
|
+
/**
|
|
41
|
+
* Applies the scroll position from input (programmatically)
|
|
42
|
+
*/
|
|
43
|
+
private applyScrollPosition;
|
|
44
|
+
/**
|
|
45
|
+
* Updates scrollbar thumb size and position based on content
|
|
46
|
+
*/
|
|
47
|
+
private updateScrollbar;
|
|
48
|
+
/**
|
|
49
|
+
* Observes container resize to update scrollbar
|
|
50
|
+
*/
|
|
51
|
+
private setupResizeObserver;
|
|
52
|
+
/**
|
|
53
|
+
* Updates scroll state and emits the state change event
|
|
54
|
+
*/
|
|
55
|
+
private updateScrollState;
|
|
56
|
+
/**
|
|
57
|
+
* Calculates the scroll state based on current scroll position
|
|
58
|
+
*/
|
|
59
|
+
private calculateScrollState;
|
|
60
|
+
/**
|
|
61
|
+
* Handles scroll event on the container
|
|
62
|
+
*/
|
|
63
|
+
onScroll(): void;
|
|
64
|
+
/**
|
|
65
|
+
* Handles mouse down on scrollbar thumb
|
|
66
|
+
*/
|
|
67
|
+
onThumbMouseDown(event: MouseEvent): void;
|
|
68
|
+
/**
|
|
69
|
+
* Sets up drag event listeners (called once during initialization)
|
|
70
|
+
*/
|
|
71
|
+
private setupDragListeners;
|
|
72
|
+
/**
|
|
73
|
+
* Handles thumb dragging
|
|
74
|
+
*/
|
|
75
|
+
private onThumbDrag;
|
|
76
|
+
/**
|
|
77
|
+
* Handles mouse up to end dragging
|
|
78
|
+
*/
|
|
79
|
+
onThumbMouseUp(): void;
|
|
80
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StickyScrollbarComponent, never>;
|
|
81
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<StickyScrollbarComponent, "ca-sticky-scrollbar", never, { "scrollPosition": { "alias": "scrollPosition"; "required": false; }; "hideTrack": { "alias": "hideTrack"; "required": false; }; "stickyOffset": { "alias": "stickyOffset"; "required": false; }; }, { "scrollPositionChange": "scrollPositionChange"; "scrollStateChange": "scrollStateChange"; }, never, ["*"], true, never>;
|
|
82
|
+
}
|
|
@@ -8,11 +8,11 @@ export declare const INPUT_CHARACTER_SETS: {
|
|
|
8
8
|
readonly QUOTES: readonly ["\"", "'", "`"];
|
|
9
9
|
readonly WHITESPACE: readonly [" ", "\t"];
|
|
10
10
|
readonly DBA_SPECIAL: readonly ["!", "#", "'", "$", "&", "%", "(", ")", "*", "+", ",", "-", ".", "/", ":", ";", "=", ">", "?", "[", "]", "\\", "^"];
|
|
11
|
-
readonly ALPHANUMERIC: ("0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "
|
|
11
|
+
readonly ALPHANUMERIC: ("0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" | "a" | "b" | "c" | "d" | "e" | "f" | "g" | "h" | "i" | "j" | "k" | "l" | "m" | "n" | "o" | "p" | "q" | "r" | "s" | "t" | "u" | "v" | "w" | "x" | "y" | "z")[];
|
|
12
12
|
readonly ALPHANUMERIC_WITH_SPACES: string[];
|
|
13
13
|
readonly EMAIL_SPECIAL: readonly ["@", ".", "-", "_", "+"];
|
|
14
|
-
readonly EMAIL_CHARACTERS: ("0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "
|
|
15
|
-
readonly SPECIAL_EXCEPT_NAME_FRIENDLY: ("
|
|
16
|
-
readonly NAME_CHARACTER_EXCLUSIONS: ("0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "
|
|
17
|
-
readonly SPECIAL: ("
|
|
14
|
+
readonly EMAIL_CHARACTERS: ("0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" | "a" | "b" | "c" | "d" | "e" | "f" | "g" | "h" | "i" | "j" | "k" | "l" | "m" | "n" | "o" | "p" | "q" | "r" | "s" | "t" | "u" | "v" | "w" | "x" | "y" | "z" | "." | "@" | "+" | "-" | "_")[];
|
|
15
|
+
readonly SPECIAL_EXCEPT_NAME_FRIENDLY: ("." | "," | "!" | "?" | ";" | ":" | "@" | "#" | "$" | "%" | "&" | "*" | "+" | "-" | "=" | "_" | "|" | "~" | "`" | "^" | "<" | ">" | "/" | "\\" | "(" | ")" | "[" | "]" | "{" | "}" | "\"" | "'")[];
|
|
16
|
+
readonly NAME_CHARACTER_EXCLUSIONS: ("0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" | "." | "," | "!" | "?" | ";" | ":" | "@" | "#" | "$" | "%" | "&" | "*" | "+" | "-" | "=" | "_" | "|" | "~" | "`" | "^" | "<" | ">" | "/" | "\\" | "(" | ")" | "[" | "]" | "{" | "}" | "\"" | "'")[];
|
|
17
|
+
readonly SPECIAL: ("." | "," | "!" | "?" | ";" | ":" | "@" | "#" | "$" | "%" | "&" | "*" | "+" | "-" | "=" | "_" | "|" | "~" | "`" | "^" | "<" | ">" | "/" | "\\" | "(" | ")" | "[" | "]" | "{" | "}" | "\"" | "'")[];
|
|
18
18
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as i1 from '@angular/forms';
|
|
2
2
|
import { Validators, FormsModule, FormControl, ReactiveFormsModule, FormGroup } from '@angular/forms';
|
|
3
3
|
import * as i0 from '@angular/core';
|
|
4
|
-
import { Pipe, input, output, signal, effect, Optional, Self, Component, HostListener, Directive, EventEmitter, Output, Input, computed, ViewChild, Injectable, inject, Inject, forwardRef, ViewContainerRef } from '@angular/core';
|
|
4
|
+
import { Pipe, input, output, signal, effect, Optional, Self, Component, HostListener, Directive, EventEmitter, Output, Input, computed, ViewChild, Injectable, inject, Inject, forwardRef, ViewContainerRef, Renderer2, DestroyRef } from '@angular/core';
|
|
5
5
|
import * as i2 from '@ng-bootstrap/ng-bootstrap';
|
|
6
6
|
import { NgbPopover, NgbTooltipModule, NgbDropdownModule, NgbTooltip, NgbPopoverModule, NgbModule } from '@ng-bootstrap/ng-bootstrap';
|
|
7
7
|
import * as i4 from 'angular-svg-icon';
|
|
@@ -12,11 +12,12 @@ import { ImageCropperComponent } from 'ngx-image-cropper';
|
|
|
12
12
|
import * as pdfjsLib from 'pdfjs-dist';
|
|
13
13
|
import * as i1$1 from '@angular/platform-browser';
|
|
14
14
|
import moment from 'moment';
|
|
15
|
-
import { Subject, takeUntil, distinctUntilChanged as distinctUntilChanged$1, tap, filter, debounceTime, switchMap, of, catchError } from 'rxjs';
|
|
15
|
+
import { Subject, takeUntil, distinctUntilChanged as distinctUntilChanged$1, tap, filter, debounceTime, switchMap, of, catchError, fromEvent } from 'rxjs';
|
|
16
16
|
import { distinctUntilChanged, takeUntil as takeUntil$1 } from 'rxjs/operators';
|
|
17
17
|
import * as i3 from '@angular/cdk/scrolling';
|
|
18
18
|
import { ScrollingModule, VIRTUAL_SCROLL_STRATEGY } from '@angular/cdk/scrolling';
|
|
19
19
|
import * as i1$2 from '@angular/cdk/clipboard';
|
|
20
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
20
21
|
|
|
21
22
|
/**
|
|
22
23
|
* Creates a validator that ignores validation rules when the control is autofilled.
|
|
@@ -8608,6 +8609,268 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
|
|
|
8608
8609
|
args: ['container']
|
|
8609
8610
|
}] } });
|
|
8610
8611
|
|
|
8612
|
+
var eScrollState;
|
|
8613
|
+
(function (eScrollState) {
|
|
8614
|
+
eScrollState["START"] = "start";
|
|
8615
|
+
eScrollState["SCROLLING"] = "scrolling";
|
|
8616
|
+
eScrollState["END"] = "end";
|
|
8617
|
+
eScrollState["NOT_NEEDED"] = "not_needed";
|
|
8618
|
+
})(eScrollState || (eScrollState = {}));
|
|
8619
|
+
|
|
8620
|
+
// Angular Core
|
|
8621
|
+
class StickyScrollbarComponent {
|
|
8622
|
+
scrollContainer;
|
|
8623
|
+
scrollThumb;
|
|
8624
|
+
/**
|
|
8625
|
+
* Input to set scroll position programmatically (for syncing multiple scrollbars)
|
|
8626
|
+
*/
|
|
8627
|
+
scrollPosition;
|
|
8628
|
+
/**
|
|
8629
|
+
* Hide the scrollbar track completely
|
|
8630
|
+
*/
|
|
8631
|
+
hideTrack = false;
|
|
8632
|
+
/**
|
|
8633
|
+
* Offset for the sticky position from the bottom (in pixels)
|
|
8634
|
+
* @default 0
|
|
8635
|
+
*/
|
|
8636
|
+
stickyOffset = 0;
|
|
8637
|
+
/**
|
|
8638
|
+
* Output to emit scroll position changes (for syncing multiple scrollbars)
|
|
8639
|
+
*/
|
|
8640
|
+
scrollPositionChange = new EventEmitter();
|
|
8641
|
+
/**
|
|
8642
|
+
* Output to emit scroll state changes (start, scrolling, end)
|
|
8643
|
+
*/
|
|
8644
|
+
scrollStateChange = new EventEmitter();
|
|
8645
|
+
renderer = inject(Renderer2);
|
|
8646
|
+
destroyRef = inject(DestroyRef);
|
|
8647
|
+
isDragging = false;
|
|
8648
|
+
dragStartX = 0;
|
|
8649
|
+
scrollStartLeft = 0;
|
|
8650
|
+
isSettingScrollPosition = false;
|
|
8651
|
+
currentScrollState;
|
|
8652
|
+
setPositionTimeout;
|
|
8653
|
+
dragStart$ = new Subject();
|
|
8654
|
+
dragEnd$ = new Subject();
|
|
8655
|
+
ngOnChanges(changes) {
|
|
8656
|
+
if (changes['scrollPosition'] && !changes['scrollPosition'].firstChange) {
|
|
8657
|
+
this.applyScrollPosition();
|
|
8658
|
+
}
|
|
8659
|
+
}
|
|
8660
|
+
ngAfterViewInit() {
|
|
8661
|
+
this.updateScrollbar();
|
|
8662
|
+
this.setupResizeObserver();
|
|
8663
|
+
this.setupDragListeners();
|
|
8664
|
+
// Apply initial scroll position if provided
|
|
8665
|
+
if (this.scrollPosition !== undefined) {
|
|
8666
|
+
this.applyScrollPosition();
|
|
8667
|
+
}
|
|
8668
|
+
// Set initial scroll state to Start
|
|
8669
|
+
this.updateScrollState(eScrollState.START);
|
|
8670
|
+
// Cleanup on destroy
|
|
8671
|
+
this.destroyRef.onDestroy(() => {
|
|
8672
|
+
if (this.setPositionTimeout) {
|
|
8673
|
+
clearTimeout(this.setPositionTimeout);
|
|
8674
|
+
}
|
|
8675
|
+
this.dragStart$.complete();
|
|
8676
|
+
this.dragEnd$.complete();
|
|
8677
|
+
});
|
|
8678
|
+
}
|
|
8679
|
+
/**
|
|
8680
|
+
* Applies the scroll position from input (programmatically)
|
|
8681
|
+
*/
|
|
8682
|
+
applyScrollPosition() {
|
|
8683
|
+
if (this.scrollPosition === undefined || !this.scrollContainer) {
|
|
8684
|
+
return;
|
|
8685
|
+
}
|
|
8686
|
+
this.isSettingScrollPosition = true;
|
|
8687
|
+
this.scrollContainer.nativeElement.scrollLeft = this.scrollPosition;
|
|
8688
|
+
this.updateScrollbar();
|
|
8689
|
+
// Calculate and emit scroll state based on new position
|
|
8690
|
+
const newState = this.calculateScrollState();
|
|
8691
|
+
this.updateScrollState(newState);
|
|
8692
|
+
// Clear any existing timeout
|
|
8693
|
+
if (this.setPositionTimeout) {
|
|
8694
|
+
clearTimeout(this.setPositionTimeout);
|
|
8695
|
+
}
|
|
8696
|
+
// Reset flag after a short delay to ensure scroll event is processed
|
|
8697
|
+
this.setPositionTimeout = setTimeout(() => {
|
|
8698
|
+
this.isSettingScrollPosition = false;
|
|
8699
|
+
this.setPositionTimeout = undefined;
|
|
8700
|
+
}, 0);
|
|
8701
|
+
}
|
|
8702
|
+
/**
|
|
8703
|
+
* Updates scrollbar thumb size and position based on content
|
|
8704
|
+
*/
|
|
8705
|
+
updateScrollbar() {
|
|
8706
|
+
const container = this.scrollContainer.nativeElement;
|
|
8707
|
+
const thumb = this.scrollThumb.nativeElement;
|
|
8708
|
+
const containerWidth = container.clientWidth;
|
|
8709
|
+
const contentWidth = container.scrollWidth;
|
|
8710
|
+
const scrollLeft = container.scrollLeft;
|
|
8711
|
+
// Calculate thumb width as a ratio of visible content
|
|
8712
|
+
const thumbWidth = (containerWidth / contentWidth) * containerWidth;
|
|
8713
|
+
const thumbPosition = (scrollLeft / contentWidth) * containerWidth;
|
|
8714
|
+
// Hide scrollbar if content fits within container
|
|
8715
|
+
const shouldShow = contentWidth > containerWidth;
|
|
8716
|
+
this.renderer.setStyle(thumb.parentElement, 'opacity', shouldShow ? '1' : '0');
|
|
8717
|
+
this.renderer.setStyle(thumb.parentElement, 'pointer-events', shouldShow ? 'auto' : 'none');
|
|
8718
|
+
// Update thumb dimensions and position
|
|
8719
|
+
this.renderer.setStyle(thumb, 'width', `${thumbWidth}px`);
|
|
8720
|
+
this.renderer.setStyle(thumb, 'transform', `translateX(${thumbPosition}px)`);
|
|
8721
|
+
// Update scroll state after scrollbar update
|
|
8722
|
+
const newState = this.calculateScrollState();
|
|
8723
|
+
this.updateScrollState(newState);
|
|
8724
|
+
}
|
|
8725
|
+
/**
|
|
8726
|
+
* Observes container resize to update scrollbar
|
|
8727
|
+
*/
|
|
8728
|
+
setupResizeObserver() {
|
|
8729
|
+
const resizeObserver = new ResizeObserver(() => {
|
|
8730
|
+
this.updateScrollbar();
|
|
8731
|
+
});
|
|
8732
|
+
resizeObserver.observe(this.scrollContainer.nativeElement);
|
|
8733
|
+
resizeObserver.observe(this.scrollContainer.nativeElement.firstElementChild);
|
|
8734
|
+
this.destroyRef.onDestroy(() => {
|
|
8735
|
+
resizeObserver.disconnect();
|
|
8736
|
+
});
|
|
8737
|
+
}
|
|
8738
|
+
/**
|
|
8739
|
+
* Updates scroll state and emits the state change event
|
|
8740
|
+
*/
|
|
8741
|
+
updateScrollState(newState) {
|
|
8742
|
+
if (this.currentScrollState !== newState) {
|
|
8743
|
+
this.currentScrollState = newState;
|
|
8744
|
+
this.scrollStateChange.emit(newState);
|
|
8745
|
+
}
|
|
8746
|
+
}
|
|
8747
|
+
/**
|
|
8748
|
+
* Calculates the scroll state based on current scroll position
|
|
8749
|
+
*/
|
|
8750
|
+
calculateScrollState() {
|
|
8751
|
+
const container = this.scrollContainer.nativeElement;
|
|
8752
|
+
const containerWidth = container.clientWidth;
|
|
8753
|
+
const contentWidth = container.scrollWidth;
|
|
8754
|
+
const scrollLeft = container.scrollLeft;
|
|
8755
|
+
const maxScroll = contentWidth - containerWidth;
|
|
8756
|
+
// Check if scrollbar is not needed
|
|
8757
|
+
if (contentWidth <= containerWidth) {
|
|
8758
|
+
return eScrollState.NOT_NEEDED;
|
|
8759
|
+
}
|
|
8760
|
+
// Determine scroll state based on position
|
|
8761
|
+
if (scrollLeft <= 1) {
|
|
8762
|
+
// At the start (with small tolerance for rounding)
|
|
8763
|
+
return eScrollState.START;
|
|
8764
|
+
}
|
|
8765
|
+
else if (scrollLeft >= maxScroll - 1) {
|
|
8766
|
+
// At the end (with small tolerance for rounding)
|
|
8767
|
+
return eScrollState.END;
|
|
8768
|
+
}
|
|
8769
|
+
else {
|
|
8770
|
+
// In the middle
|
|
8771
|
+
return eScrollState.SCROLLING;
|
|
8772
|
+
}
|
|
8773
|
+
}
|
|
8774
|
+
/**
|
|
8775
|
+
* Handles scroll event on the container
|
|
8776
|
+
*/
|
|
8777
|
+
onScroll() {
|
|
8778
|
+
if (!this.isDragging) {
|
|
8779
|
+
this.updateScrollbar();
|
|
8780
|
+
}
|
|
8781
|
+
// Emit scroll position only if it's user-initiated (not programmatically set)
|
|
8782
|
+
if (!this.isSettingScrollPosition) {
|
|
8783
|
+
const container = this.scrollContainer.nativeElement;
|
|
8784
|
+
const scrollLeft = container.scrollLeft;
|
|
8785
|
+
this.scrollPositionChange.emit(scrollLeft);
|
|
8786
|
+
// Calculate and emit scroll state based on position
|
|
8787
|
+
const newState = this.calculateScrollState();
|
|
8788
|
+
this.updateScrollState(newState);
|
|
8789
|
+
}
|
|
8790
|
+
}
|
|
8791
|
+
/**
|
|
8792
|
+
* Handles mouse down on scrollbar thumb
|
|
8793
|
+
*/
|
|
8794
|
+
onThumbMouseDown(event) {
|
|
8795
|
+
event.preventDefault();
|
|
8796
|
+
event.stopPropagation();
|
|
8797
|
+
this.isDragging = true;
|
|
8798
|
+
this.dragStartX = event.clientX;
|
|
8799
|
+
this.scrollStartLeft = this.scrollContainer.nativeElement.scrollLeft;
|
|
8800
|
+
// Emit drag start event
|
|
8801
|
+
this.dragStart$.next(event);
|
|
8802
|
+
}
|
|
8803
|
+
/**
|
|
8804
|
+
* Sets up drag event listeners (called once during initialization)
|
|
8805
|
+
*/
|
|
8806
|
+
setupDragListeners() {
|
|
8807
|
+
const mouseMove$ = fromEvent(document, 'mousemove');
|
|
8808
|
+
const mouseUp$ = fromEvent(document, 'mouseup');
|
|
8809
|
+
// Handle mouse move - only active when dragging
|
|
8810
|
+
mouseMove$
|
|
8811
|
+
.pipe(filter(() => this.isDragging), takeUntilDestroyed(this.destroyRef))
|
|
8812
|
+
.subscribe((event) => {
|
|
8813
|
+
this.onThumbDrag(event);
|
|
8814
|
+
});
|
|
8815
|
+
// Handle mouse up - only active when dragging
|
|
8816
|
+
mouseUp$
|
|
8817
|
+
.pipe(filter(() => this.isDragging), takeUntilDestroyed(this.destroyRef))
|
|
8818
|
+
.subscribe(() => {
|
|
8819
|
+
this.onThumbMouseUp();
|
|
8820
|
+
this.dragEnd$.next();
|
|
8821
|
+
});
|
|
8822
|
+
}
|
|
8823
|
+
/**
|
|
8824
|
+
* Handles thumb dragging
|
|
8825
|
+
*/
|
|
8826
|
+
onThumbDrag(event) {
|
|
8827
|
+
const container = this.scrollContainer.nativeElement;
|
|
8828
|
+
const deltaX = event.clientX - this.dragStartX;
|
|
8829
|
+
// Calculate scroll delta based on content/container ratio
|
|
8830
|
+
const containerWidth = container.clientWidth;
|
|
8831
|
+
const contentWidth = container.scrollWidth;
|
|
8832
|
+
const scrollDelta = (deltaX / containerWidth) * contentWidth;
|
|
8833
|
+
// Update scroll position
|
|
8834
|
+
container.scrollLeft = this.scrollStartLeft + scrollDelta;
|
|
8835
|
+
// Update scrollbar position during drag
|
|
8836
|
+
this.updateScrollbar();
|
|
8837
|
+
// Emit the new scroll position
|
|
8838
|
+
const scrollLeft = container.scrollLeft;
|
|
8839
|
+
this.scrollPositionChange.emit(scrollLeft);
|
|
8840
|
+
// Calculate and emit scroll state based on position
|
|
8841
|
+
const newState = this.calculateScrollState();
|
|
8842
|
+
this.updateScrollState(newState);
|
|
8843
|
+
}
|
|
8844
|
+
/**
|
|
8845
|
+
* Handles mouse up to end dragging
|
|
8846
|
+
*/
|
|
8847
|
+
onThumbMouseUp() {
|
|
8848
|
+
this.isDragging = false;
|
|
8849
|
+
}
|
|
8850
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: StickyScrollbarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
8851
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: StickyScrollbarComponent, isStandalone: true, selector: "ca-sticky-scrollbar", inputs: { scrollPosition: "scrollPosition", hideTrack: "hideTrack", stickyOffset: "stickyOffset" }, outputs: { scrollPositionChange: "scrollPositionChange", scrollStateChange: "scrollStateChange" }, viewQueries: [{ propertyName: "scrollContainer", first: true, predicate: ["scrollContainer"], descendants: true }, { propertyName: "scrollThumb", first: true, predicate: ["scrollThumb"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"sticky-scrollbar-wrapper\">\n <div\n #scrollContainer\n class=\"sticky-scrollbar-container\"\n (scroll)=\"onScroll()\"\n >\n <ng-content></ng-content>\n </div>\n <div\n class=\"sticky-scrollbar-track\"\n [class.hidden]=\"hideTrack\"\n [style.bottom.px]=\"stickyOffset\"\n >\n <div\n #scrollThumb\n class=\"sticky-scrollbar-thumb\"\n [class.dragging]=\"isDragging\"\n (mousedown)=\"onThumbMouseDown($event)\"\n (mouseup)=\"onThumbMouseUp()\"\n ></div>\n </div>\n</div>\n", styles: [".sticky-scrollbar-wrapper{position:relative;height:100%;width:100%;display:flex;flex-direction:column}.sticky-scrollbar-container{flex:1;width:100%;overflow-x:auto;overflow-y:hidden;-ms-overflow-style:none;scrollbar-width:none}.sticky-scrollbar-container::-webkit-scrollbar{display:none}.sticky-scrollbar-track{position:sticky;bottom:0;width:100%;height:6px;border-radius:2px;margin-top:1px;cursor:pointer;transition:opacity .1s ease-in-out;z-index:10}.sticky-scrollbar-track.hidden{display:none}.sticky-scrollbar-thumb{height:100%;background-color:#aaa;border-radius:2px;transition:background-color .1s ease-in-out;cursor:grab;min-width:30px}.sticky-scrollbar-thumb:hover{background-color:#424242b2}.sticky-scrollbar-thumb.dragging{background-color:#424242b2;cursor:grabbing}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
|
|
8852
|
+
}
|
|
8853
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: StickyScrollbarComponent, decorators: [{
|
|
8854
|
+
type: Component,
|
|
8855
|
+
args: [{ selector: 'ca-sticky-scrollbar', imports: [CommonModule], template: "<div class=\"sticky-scrollbar-wrapper\">\n <div\n #scrollContainer\n class=\"sticky-scrollbar-container\"\n (scroll)=\"onScroll()\"\n >\n <ng-content></ng-content>\n </div>\n <div\n class=\"sticky-scrollbar-track\"\n [class.hidden]=\"hideTrack\"\n [style.bottom.px]=\"stickyOffset\"\n >\n <div\n #scrollThumb\n class=\"sticky-scrollbar-thumb\"\n [class.dragging]=\"isDragging\"\n (mousedown)=\"onThumbMouseDown($event)\"\n (mouseup)=\"onThumbMouseUp()\"\n ></div>\n </div>\n</div>\n", styles: [".sticky-scrollbar-wrapper{position:relative;height:100%;width:100%;display:flex;flex-direction:column}.sticky-scrollbar-container{flex:1;width:100%;overflow-x:auto;overflow-y:hidden;-ms-overflow-style:none;scrollbar-width:none}.sticky-scrollbar-container::-webkit-scrollbar{display:none}.sticky-scrollbar-track{position:sticky;bottom:0;width:100%;height:6px;border-radius:2px;margin-top:1px;cursor:pointer;transition:opacity .1s ease-in-out;z-index:10}.sticky-scrollbar-track.hidden{display:none}.sticky-scrollbar-thumb{height:100%;background-color:#aaa;border-radius:2px;transition:background-color .1s ease-in-out;cursor:grab;min-width:30px}.sticky-scrollbar-thumb:hover{background-color:#424242b2}.sticky-scrollbar-thumb.dragging{background-color:#424242b2;cursor:grabbing}\n"] }]
|
|
8856
|
+
}], propDecorators: { scrollContainer: [{
|
|
8857
|
+
type: ViewChild,
|
|
8858
|
+
args: ['scrollContainer', { static: false }]
|
|
8859
|
+
}], scrollThumb: [{
|
|
8860
|
+
type: ViewChild,
|
|
8861
|
+
args: ['scrollThumb', { static: false }]
|
|
8862
|
+
}], scrollPosition: [{
|
|
8863
|
+
type: Input
|
|
8864
|
+
}], hideTrack: [{
|
|
8865
|
+
type: Input
|
|
8866
|
+
}], stickyOffset: [{
|
|
8867
|
+
type: Input
|
|
8868
|
+
}], scrollPositionChange: [{
|
|
8869
|
+
type: Output
|
|
8870
|
+
}], scrollStateChange: [{
|
|
8871
|
+
type: Output
|
|
8872
|
+
}] } });
|
|
8873
|
+
|
|
8611
8874
|
/*
|
|
8612
8875
|
* Public API Surface of carriera-intern-components
|
|
8613
8876
|
*/
|
|
@@ -8616,5 +8879,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
|
|
|
8616
8879
|
* Generated bundle index. Do not edit.
|
|
8617
8880
|
*/
|
|
8618
8881
|
|
|
8619
|
-
export { AvatarComponent, CaiInputDatetimePickerComponent, CopyComponent, DropZoneComponent, DropdownTypes, INPUT_CHARACTER_SETS, InputAddressComponent, InputComponent, IntervalDropdownComponent, ListContactDropdownComponent, PmComponent, RatingReviewComponent, ReviewModalComponent, SelectedBusinessFieldComponent, TabOptionDropdownComponent, ignoreWhenAutofilled, sizes };
|
|
8882
|
+
export { AvatarComponent, CaiInputDatetimePickerComponent, CopyComponent, DropZoneComponent, DropdownTypes, INPUT_CHARACTER_SETS, InputAddressComponent, InputComponent, IntervalDropdownComponent, ListContactDropdownComponent, PmComponent, RatingReviewComponent, ReviewModalComponent, SelectedBusinessFieldComponent, StickyScrollbarComponent, TabOptionDropdownComponent, eScrollState, ignoreWhenAutofilled, sizes };
|
|
8620
8883
|
//# sourceMappingURL=carriera-intern-components.mjs.map
|