@raqm/ui 0.0.0-stage → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +22 -0
- package/LICENSE +21 -0
- package/NOTICE.md +28 -0
- package/README.md +126 -3
- package/combobox/README.md +17 -0
- package/fesm2022/raqm-ui-accordion.mjs +414 -0
- package/fesm2022/raqm-ui-accordion.mjs.map +1 -0
- package/fesm2022/raqm-ui-alert-dialog.mjs +457 -0
- package/fesm2022/raqm-ui-alert-dialog.mjs.map +1 -0
- package/fesm2022/raqm-ui-alert.mjs +195 -0
- package/fesm2022/raqm-ui-alert.mjs.map +1 -0
- package/fesm2022/raqm-ui-aspect-ratio.mjs +66 -0
- package/fesm2022/raqm-ui-aspect-ratio.mjs.map +1 -0
- package/fesm2022/raqm-ui-attachment.mjs +435 -0
- package/fesm2022/raqm-ui-attachment.mjs.map +1 -0
- package/fesm2022/raqm-ui-avatar.mjs +337 -0
- package/fesm2022/raqm-ui-avatar.mjs.map +1 -0
- package/fesm2022/raqm-ui-badge.mjs +68 -0
- package/fesm2022/raqm-ui-badge.mjs.map +1 -0
- package/fesm2022/raqm-ui-breadcrumb.mjs +309 -0
- package/fesm2022/raqm-ui-breadcrumb.mjs.map +1 -0
- package/fesm2022/raqm-ui-button-group.mjs +138 -0
- package/fesm2022/raqm-ui-button-group.mjs.map +1 -0
- package/fesm2022/raqm-ui-button.mjs +295 -0
- package/fesm2022/raqm-ui-button.mjs.map +1 -0
- package/fesm2022/raqm-ui-calendar.mjs +1394 -0
- package/fesm2022/raqm-ui-calendar.mjs.map +1 -0
- package/fesm2022/raqm-ui-card.mjs +331 -0
- package/fesm2022/raqm-ui-card.mjs.map +1 -0
- package/fesm2022/raqm-ui-carousel.mjs +410 -0
- package/fesm2022/raqm-ui-carousel.mjs.map +1 -0
- package/fesm2022/raqm-ui-checkbox.mjs +86 -0
- package/fesm2022/raqm-ui-checkbox.mjs.map +1 -0
- package/fesm2022/raqm-ui-collapsible.mjs +266 -0
- package/fesm2022/raqm-ui-collapsible.mjs.map +1 -0
- package/fesm2022/raqm-ui-combobox.mjs +1584 -0
- package/fesm2022/raqm-ui-combobox.mjs.map +1 -0
- package/fesm2022/raqm-ui-command.mjs +1210 -0
- package/fesm2022/raqm-ui-command.mjs.map +1 -0
- package/fesm2022/raqm-ui-context-menu.mjs +723 -0
- package/fesm2022/raqm-ui-context-menu.mjs.map +1 -0
- package/fesm2022/raqm-ui-dialog.mjs +1214 -0
- package/fesm2022/raqm-ui-dialog.mjs.map +1 -0
- package/fesm2022/raqm-ui-drawer.mjs +687 -0
- package/fesm2022/raqm-ui-drawer.mjs.map +1 -0
- package/fesm2022/raqm-ui-dropdown-menu.mjs +1168 -0
- package/fesm2022/raqm-ui-dropdown-menu.mjs.map +1 -0
- package/fesm2022/raqm-ui-empty.mjs +272 -0
- package/fesm2022/raqm-ui-empty.mjs.map +1 -0
- package/fesm2022/raqm-ui-field.mjs +517 -0
- package/fesm2022/raqm-ui-field.mjs.map +1 -0
- package/fesm2022/raqm-ui-hover-card.mjs +828 -0
- package/fesm2022/raqm-ui-hover-card.mjs.map +1 -0
- package/fesm2022/raqm-ui-input-group.mjs +270 -0
- package/fesm2022/raqm-ui-input-group.mjs.map +1 -0
- package/fesm2022/raqm-ui-input-otp.mjs +788 -0
- package/fesm2022/raqm-ui-input-otp.mjs.map +1 -0
- package/fesm2022/raqm-ui-input.mjs +73 -0
- package/fesm2022/raqm-ui-input.mjs.map +1 -0
- package/fesm2022/raqm-ui-item.mjs +495 -0
- package/fesm2022/raqm-ui-item.mjs.map +1 -0
- package/fesm2022/raqm-ui-kbd.mjs +80 -0
- package/fesm2022/raqm-ui-kbd.mjs.map +1 -0
- package/fesm2022/raqm-ui-label.mjs +44 -0
- package/fesm2022/raqm-ui-label.mjs.map +1 -0
- package/fesm2022/raqm-ui-menubar.mjs +536 -0
- package/fesm2022/raqm-ui-menubar.mjs.map +1 -0
- package/fesm2022/raqm-ui-native-select.mjs +131 -0
- package/fesm2022/raqm-ui-native-select.mjs.map +1 -0
- package/fesm2022/raqm-ui-navigation-menu.mjs +1399 -0
- package/fesm2022/raqm-ui-navigation-menu.mjs.map +1 -0
- package/fesm2022/raqm-ui-overlay-internal.mjs +185 -0
- package/fesm2022/raqm-ui-overlay-internal.mjs.map +1 -0
- package/fesm2022/raqm-ui-pagination.mjs +440 -0
- package/fesm2022/raqm-ui-pagination.mjs.map +1 -0
- package/fesm2022/raqm-ui-popover.mjs +1495 -0
- package/fesm2022/raqm-ui-popover.mjs.map +1 -0
- package/fesm2022/raqm-ui-progress.mjs +369 -0
- package/fesm2022/raqm-ui-progress.mjs.map +1 -0
- package/fesm2022/raqm-ui-questionnaire.mjs +1005 -0
- package/fesm2022/raqm-ui-questionnaire.mjs.map +1 -0
- package/fesm2022/raqm-ui-radio-group.mjs +151 -0
- package/fesm2022/raqm-ui-radio-group.mjs.map +1 -0
- package/fesm2022/raqm-ui-resizable.mjs +439 -0
- package/fesm2022/raqm-ui-resizable.mjs.map +1 -0
- package/fesm2022/raqm-ui-scroll-area.mjs +510 -0
- package/fesm2022/raqm-ui-scroll-area.mjs.map +1 -0
- package/fesm2022/raqm-ui-select.mjs +1073 -0
- package/fesm2022/raqm-ui-select.mjs.map +1 -0
- package/fesm2022/raqm-ui-separator.mjs +103 -0
- package/fesm2022/raqm-ui-separator.mjs.map +1 -0
- package/fesm2022/raqm-ui-sheet.mjs +411 -0
- package/fesm2022/raqm-ui-sheet.mjs.map +1 -0
- package/fesm2022/raqm-ui-sidebar.mjs +1784 -0
- package/fesm2022/raqm-ui-sidebar.mjs.map +1 -0
- package/fesm2022/raqm-ui-skeleton.mjs +50 -0
- package/fesm2022/raqm-ui-skeleton.mjs.map +1 -0
- package/fesm2022/raqm-ui-slider.mjs +609 -0
- package/fesm2022/raqm-ui-slider.mjs.map +1 -0
- package/fesm2022/raqm-ui-spinner.mjs +137 -0
- package/fesm2022/raqm-ui-spinner.mjs.map +1 -0
- package/fesm2022/raqm-ui-switch.mjs +109 -0
- package/fesm2022/raqm-ui-switch.mjs.map +1 -0
- package/fesm2022/raqm-ui-table.mjs +271 -0
- package/fesm2022/raqm-ui-table.mjs.map +1 -0
- package/fesm2022/raqm-ui-tabs.mjs +536 -0
- package/fesm2022/raqm-ui-tabs.mjs.map +1 -0
- package/fesm2022/raqm-ui-textarea.mjs +37 -0
- package/fesm2022/raqm-ui-textarea.mjs.map +1 -0
- package/fesm2022/raqm-ui-toast.mjs +918 -0
- package/fesm2022/raqm-ui-toast.mjs.map +1 -0
- package/fesm2022/raqm-ui-toggle-group.mjs +462 -0
- package/fesm2022/raqm-ui-toggle-group.mjs.map +1 -0
- package/fesm2022/raqm-ui-toggle.mjs +158 -0
- package/fesm2022/raqm-ui-toggle.mjs.map +1 -0
- package/fesm2022/raqm-ui-tooltip.mjs +1226 -0
- package/fesm2022/raqm-ui-tooltip.mjs.map +1 -0
- package/fesm2022/raqm-ui.mjs +50 -0
- package/input-otp/README.md +12 -0
- package/package.json +275 -3
- package/styles/theme.css +4324 -0
- package/types/raqm-ui-accordion.d.ts +124 -0
- package/types/raqm-ui-alert-dialog.d.ts +81 -0
- package/types/raqm-ui-alert.d.ts +29 -0
- package/types/raqm-ui-aspect-ratio.d.ts +13 -0
- package/types/raqm-ui-attachment.d.ts +72 -0
- package/types/raqm-ui-avatar.d.ts +67 -0
- package/types/raqm-ui-badge.d.ts +20 -0
- package/types/raqm-ui-breadcrumb.d.ts +35 -0
- package/types/raqm-ui-button-group.d.ts +27 -0
- package/types/raqm-ui-button.d.ts +80 -0
- package/types/raqm-ui-calendar.d.ts +359 -0
- package/types/raqm-ui-card.d.ts +34 -0
- package/types/raqm-ui-carousel.d.ts +81 -0
- package/types/raqm-ui-checkbox.d.ts +24 -0
- package/types/raqm-ui-collapsible.d.ts +72 -0
- package/types/raqm-ui-combobox.d.ts +405 -0
- package/types/raqm-ui-command.d.ts +256 -0
- package/types/raqm-ui-context-menu.d.ts +196 -0
- package/types/raqm-ui-dialog.d.ts +232 -0
- package/types/raqm-ui-drawer.d.ts +121 -0
- package/types/raqm-ui-dropdown-menu.d.ts +319 -0
- package/types/raqm-ui-empty.d.ts +35 -0
- package/types/raqm-ui-field.d.ts +88 -0
- package/types/raqm-ui-hover-card.d.ts +139 -0
- package/types/raqm-ui-input-group.d.ts +45 -0
- package/types/raqm-ui-input-otp.d.ts +197 -0
- package/types/raqm-ui-input.d.ts +16 -0
- package/types/raqm-ui-item.d.ts +71 -0
- package/types/raqm-ui-kbd.d.ts +12 -0
- package/types/raqm-ui-label.d.ts +6 -0
- package/types/raqm-ui-menubar.d.ts +159 -0
- package/types/raqm-ui-native-select.d.ts +23 -0
- package/types/raqm-ui-navigation-menu.d.ts +230 -0
- package/types/raqm-ui-overlay-internal.d.ts +5 -0
- package/types/raqm-ui-pagination.d.ts +84 -0
- package/types/raqm-ui-popover.d.ts +235 -0
- package/types/raqm-ui-progress.d.ts +79 -0
- package/types/raqm-ui-questionnaire.d.ts +217 -0
- package/types/raqm-ui-radio-group.d.ts +48 -0
- package/types/raqm-ui-resizable.d.ts +98 -0
- package/types/raqm-ui-scroll-area.d.ts +132 -0
- package/types/raqm-ui-select.d.ts +205 -0
- package/types/raqm-ui-separator.d.ts +21 -0
- package/types/raqm-ui-sheet.d.ts +79 -0
- package/types/raqm-ui-sidebar.d.ts +285 -0
- package/types/raqm-ui-skeleton.d.ts +6 -0
- package/types/raqm-ui-slider.d.ts +129 -0
- package/types/raqm-ui-spinner.d.ts +32 -0
- package/types/raqm-ui-switch.d.ts +32 -0
- package/types/raqm-ui-table.d.ts +36 -0
- package/types/raqm-ui-tabs.d.ts +154 -0
- package/types/raqm-ui-textarea.d.ts +6 -0
- package/types/raqm-ui-toast.d.ts +190 -0
- package/types/raqm-ui-toggle-group.d.ts +167 -0
- package/types/raqm-ui-toggle.d.ts +42 -0
- package/types/raqm-ui-tooltip.d.ts +207 -0
- package/types/raqm-ui.d.ts +50 -0
|
@@ -0,0 +1,510 @@
|
|
|
1
|
+
import { CdkScrollable } from "@angular/cdk/scrolling";
|
|
2
|
+
import { RtlScrollAxisType, getRtlScrollAxisType } from "@angular/cdk/platform";
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import { ChangeDetectionStrategy, Component, DestroyRef, ElementRef, InjectionToken, afterNextRender, booleanAttribute, computed, contentChildren, forwardRef, inject, input, signal, viewChild } from "@angular/core";
|
|
5
|
+
const SCROLL_AREA = new InjectionToken("RAQM_SCROLL_AREA");
|
|
6
|
+
var RaqmScrollBarComponent = class RaqmScrollBarComponent {
|
|
7
|
+
vertical = input(true, {
|
|
8
|
+
...ngDevMode ? { debugName: "vertical" } : /* istanbul ignore next */ {},
|
|
9
|
+
transform: booleanAttribute
|
|
10
|
+
});
|
|
11
|
+
keepMounted = input(false, {
|
|
12
|
+
...ngDevMode ? { debugName: "keepMounted" } : /* istanbul ignore next */ {},
|
|
13
|
+
transform: booleanAttribute
|
|
14
|
+
});
|
|
15
|
+
area = inject(SCROLL_AREA);
|
|
16
|
+
host = inject(ElementRef);
|
|
17
|
+
destroyRef = inject(DestroyRef);
|
|
18
|
+
trackSize = signal(0, ...ngDevMode ? [{ debugName: "trackSize" }] : /* istanbul ignore next */ []);
|
|
19
|
+
drag = null;
|
|
20
|
+
overflow = computed(() => {
|
|
21
|
+
const m = this.area.metrics();
|
|
22
|
+
return this.vertical() ? m.scrollHeight > m.height : m.scrollWidth > m.width;
|
|
23
|
+
}, ...ngDevMode ? [{ debugName: "overflow" }] : /* istanbul ignore next */ []);
|
|
24
|
+
geometry = computed(() => {
|
|
25
|
+
const m = this.area.metrics();
|
|
26
|
+
const vertical = this.vertical();
|
|
27
|
+
const viewport = vertical ? m.height : m.width;
|
|
28
|
+
const content = vertical ? m.scrollHeight : m.scrollWidth;
|
|
29
|
+
const track = this.trackSize();
|
|
30
|
+
const thumb = Math.min(track, Math.max(16, content ? track * viewport / content : track));
|
|
31
|
+
const max = Math.max(0, content - viewport);
|
|
32
|
+
return {
|
|
33
|
+
thumb,
|
|
34
|
+
travel: track - thumb,
|
|
35
|
+
max,
|
|
36
|
+
offset: vertical ? m.y : m.x
|
|
37
|
+
};
|
|
38
|
+
}, ...ngDevMode ? [{ debugName: "geometry" }] : /* istanbul ignore next */ []);
|
|
39
|
+
thumbStyle = computed(() => {
|
|
40
|
+
const g = this.geometry();
|
|
41
|
+
const position = g.max ? g.offset / g.max * g.travel : 0;
|
|
42
|
+
return this.vertical() ? {
|
|
43
|
+
"block-size": `${g.thumb}px`,
|
|
44
|
+
"inset-block-start": `${position}px`
|
|
45
|
+
} : {
|
|
46
|
+
"inline-size": `${g.thumb}px`,
|
|
47
|
+
"inset-inline-start": `${position}px`
|
|
48
|
+
};
|
|
49
|
+
}, ...ngDevMode ? [{ debugName: "thumbStyle" }] : /* istanbul ignore next */ []);
|
|
50
|
+
constructor() {
|
|
51
|
+
afterNextRender(() => {
|
|
52
|
+
const resize = new ResizeObserver(() => this.measure());
|
|
53
|
+
resize.observe(this.host.nativeElement);
|
|
54
|
+
this.measure();
|
|
55
|
+
const track = this.host.nativeElement;
|
|
56
|
+
const wheel = (event) => this.onTrackWheel(event);
|
|
57
|
+
track.addEventListener("wheel", wheel, { passive: false });
|
|
58
|
+
this.destroyRef.onDestroy(() => {
|
|
59
|
+
resize.disconnect();
|
|
60
|
+
track.removeEventListener("wheel", wheel);
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
this.destroyRef.onDestroy(() => this.endDrag());
|
|
64
|
+
}
|
|
65
|
+
onTrackWheel(event) {
|
|
66
|
+
if (event.ctrlKey || event.defaultPrevented || !event.cancelable) return;
|
|
67
|
+
const vertical = this.vertical();
|
|
68
|
+
const delta = vertical ? event.deltaY : event.deltaX;
|
|
69
|
+
if (!Number.isFinite(delta) || delta === 0) return;
|
|
70
|
+
this.area.refresh();
|
|
71
|
+
const metrics = this.area.metrics();
|
|
72
|
+
const css = getComputedStyle(this.host.nativeElement);
|
|
73
|
+
const lineHeight = parseFloat(css.lineHeight) || parseFloat(css.fontSize) * 1.2 || 16;
|
|
74
|
+
const change = delta * (event.deltaMode === WheelEvent.DOM_DELTA_LINE ? lineHeight : event.deltaMode === WheelEvent.DOM_DELTA_PAGE ? vertical ? metrics.height : metrics.width : 1) * (!vertical && metrics.rtl ? -1 : 1);
|
|
75
|
+
const before = vertical ? metrics.y : metrics.x;
|
|
76
|
+
this.area.scrollTo(this.vertical() ? "vertical" : "horizontal", before + change);
|
|
77
|
+
const after = this.area.metrics();
|
|
78
|
+
if ((vertical ? after.y : after.x) !== before) event.preventDefault();
|
|
79
|
+
}
|
|
80
|
+
measure() {
|
|
81
|
+
const el = this.host.nativeElement;
|
|
82
|
+
const css = getComputedStyle(el);
|
|
83
|
+
const vertical = this.vertical();
|
|
84
|
+
this.trackSize.set(Math.max(0, (vertical ? el.clientHeight : el.clientWidth) - parseFloat(vertical ? css.paddingTop : css.paddingLeft) - parseFloat(vertical ? css.paddingBottom : css.paddingRight)));
|
|
85
|
+
}
|
|
86
|
+
coordinate(event) {
|
|
87
|
+
const el = this.host.nativeElement;
|
|
88
|
+
const rect = el.getBoundingClientRect();
|
|
89
|
+
const css = getComputedStyle(el);
|
|
90
|
+
if (this.vertical()) return event.clientY - rect.top - el.clientTop - parseFloat(css.paddingTop);
|
|
91
|
+
return this.area.metrics().rtl ? rect.right - event.clientX - parseFloat(css.borderRightWidth) - parseFloat(css.paddingRight) : event.clientX - rect.left - el.clientLeft - parseFloat(css.paddingLeft);
|
|
92
|
+
}
|
|
93
|
+
onPointerDown(event) {
|
|
94
|
+
if (!event.isPrimary || event.button !== 0 || !this.overflow() || this.drag) return;
|
|
95
|
+
event.preventDefault();
|
|
96
|
+
this.area.refresh();
|
|
97
|
+
this.measure();
|
|
98
|
+
const g = this.geometry();
|
|
99
|
+
const position = g.max ? g.offset / g.max * g.travel : 0;
|
|
100
|
+
const coordinate = this.coordinate(event);
|
|
101
|
+
const onThumb = coordinate >= position && coordinate <= position + g.thumb;
|
|
102
|
+
this.drag = {
|
|
103
|
+
pointer: event.pointerId,
|
|
104
|
+
grab: onThumb ? coordinate - position : g.thumb / 2
|
|
105
|
+
};
|
|
106
|
+
this.host.nativeElement.setPointerCapture(event.pointerId);
|
|
107
|
+
if (!onThumb) this.onPointerMove(event);
|
|
108
|
+
}
|
|
109
|
+
onPointerMove(event) {
|
|
110
|
+
if (this.drag?.pointer !== event.pointerId) return;
|
|
111
|
+
const g = this.geometry();
|
|
112
|
+
if (g.travel > 0) this.area.scrollTo(this.vertical() ? "vertical" : "horizontal", (this.coordinate(event) - this.drag.grab) / g.travel * g.max);
|
|
113
|
+
}
|
|
114
|
+
endPointer(event) {
|
|
115
|
+
if (event.pointerId === this.drag?.pointer) this.endDrag();
|
|
116
|
+
}
|
|
117
|
+
endDrag() {
|
|
118
|
+
const drag = this.drag;
|
|
119
|
+
this.drag = null;
|
|
120
|
+
if (drag && this.host.nativeElement.hasPointerCapture(drag.pointer)) this.host.nativeElement.releasePointerCapture(drag.pointer);
|
|
121
|
+
}
|
|
122
|
+
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
123
|
+
minVersion: "12.0.0",
|
|
124
|
+
version: "22.2.2",
|
|
125
|
+
ngImport: i0,
|
|
126
|
+
type: RaqmScrollBarComponent,
|
|
127
|
+
deps: [],
|
|
128
|
+
target: i0.ɵɵFactoryTarget.Component
|
|
129
|
+
});
|
|
130
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({
|
|
131
|
+
minVersion: "17.0.0",
|
|
132
|
+
version: "22.2.2",
|
|
133
|
+
type: RaqmScrollBarComponent,
|
|
134
|
+
isStandalone: true,
|
|
135
|
+
selector: "raqm-scroll-bar",
|
|
136
|
+
inputs: {
|
|
137
|
+
vertical: {
|
|
138
|
+
classPropertyName: "vertical",
|
|
139
|
+
publicName: "vertical",
|
|
140
|
+
isSignal: true,
|
|
141
|
+
isRequired: false,
|
|
142
|
+
transformFunction: null
|
|
143
|
+
},
|
|
144
|
+
keepMounted: {
|
|
145
|
+
classPropertyName: "keepMounted",
|
|
146
|
+
publicName: "keepMounted",
|
|
147
|
+
isSignal: true,
|
|
148
|
+
isRequired: false,
|
|
149
|
+
transformFunction: null
|
|
150
|
+
}
|
|
151
|
+
},
|
|
152
|
+
host: {
|
|
153
|
+
attributes: {
|
|
154
|
+
"data-slot": "scroll-area-scrollbar",
|
|
155
|
+
"aria-hidden": "true"
|
|
156
|
+
},
|
|
157
|
+
listeners: {
|
|
158
|
+
"pointerdown": "onPointerDown($event)",
|
|
159
|
+
"pointermove": "onPointerMove($event)",
|
|
160
|
+
"pointerup": "endPointer($event)",
|
|
161
|
+
"pointercancel": "endPointer($event)",
|
|
162
|
+
"lostpointercapture": "endPointer($event)"
|
|
163
|
+
},
|
|
164
|
+
properties: {
|
|
165
|
+
"attr.data-raqm-vertical": "vertical() ? \"\" : null",
|
|
166
|
+
"attr.data-raqm-overflow": "overflow() ? \"\" : null",
|
|
167
|
+
"attr.data-raqm-keep-mounted": "keepMounted() ? \"\" : null",
|
|
168
|
+
"attr.data-raqm-corner": "area.horizontal() && area.vertical() ? \"\" : null",
|
|
169
|
+
"attr.data-raqm-scrolling": "area.scrolling() ? \"\" : null",
|
|
170
|
+
"attr.data-raqm-hovering": "area.hovering() ? \"\" : null",
|
|
171
|
+
"attr.data-raqm-has-overflow-x": "area.metrics().scrollWidth > area.metrics().width ? \"\" : null",
|
|
172
|
+
"attr.data-raqm-has-overflow-y": "area.vertical() ? \"\" : null",
|
|
173
|
+
"attr.data-raqm-overflow-x-start": "area.edges().xStart ? \"\" : null",
|
|
174
|
+
"attr.data-raqm-overflow-x-end": "area.edges().xEnd ? \"\" : null",
|
|
175
|
+
"attr.data-raqm-overflow-y-start": "area.edges().yStart ? \"\" : null",
|
|
176
|
+
"attr.data-raqm-overflow-y-end": "area.edges().yEnd ? \"\" : null"
|
|
177
|
+
},
|
|
178
|
+
classAttribute: "raqm-scroll-bar"
|
|
179
|
+
},
|
|
180
|
+
ngImport: i0,
|
|
181
|
+
template: "@if (overflow() || keepMounted()) {\r\n <div\r\n class=\"raqm-scroll-bar__thumb\"\r\n data-slot=\"scroll-area-thumb\"\r\n [attr.data-raqm-vertical]=\"vertical() ? '' : null\"\r\n [attr.data-raqm-scrolling]=\"area.scrolling() ? '' : null\"\r\n [style]=\"thumbStyle()\"\r\n ></div>\r\n}\r\n",
|
|
182
|
+
styles: [":host{position:absolute;display:flex;box-sizing:border-box;touch-action:none;-webkit-user-select:none;user-select:none;padding:1px;transition:color .15s,background-color .15s;visibility:hidden}:host([data-raqm-overflow]),:host([data-raqm-keep-mounted]){visibility:visible}:host([data-raqm-vertical]){inset-block:0;inset-inline-end:0;inline-size:calc(var(--raqm-spacing) * 2.5);border-inline-start:1px solid transparent}:host(:not([data-raqm-vertical])){inset-inline:0;inset-block-end:0;block-size:calc(var(--raqm-spacing) * 2.5);flex-direction:column;border-block-start:1px solid transparent}:host([data-raqm-vertical][data-raqm-corner]){inset-block-end:calc(var(--raqm-spacing) * 2.5)}:host(:not([data-raqm-vertical])[data-raqm-corner]){inset-inline-end:calc(var(--raqm-spacing) * 2.5)}.raqm-scroll-bar__thumb{position:relative;flex-shrink:0;background:var(--raqm-border);border-radius:9999px}:host([data-raqm-vertical]) .raqm-scroll-bar__thumb{inline-size:100%}:host(:not([data-raqm-vertical])) .raqm-scroll-bar__thumb{block-size:100%}@media(prefers-reduced-motion:reduce){:host{transition:none}}@media(forced-colors:active){:host{display:none}}\n"],
|
|
183
|
+
changeDetection: i0.ChangeDetectionStrategy.OnPush
|
|
184
|
+
});
|
|
185
|
+
};
|
|
186
|
+
i0.ɵɵngDeclareClassMetadata({
|
|
187
|
+
minVersion: "12.0.0",
|
|
188
|
+
version: "22.2.2",
|
|
189
|
+
ngImport: i0,
|
|
190
|
+
type: RaqmScrollBarComponent,
|
|
191
|
+
decorators: [{
|
|
192
|
+
type: Component,
|
|
193
|
+
args: [{
|
|
194
|
+
selector: "raqm-scroll-bar",
|
|
195
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
196
|
+
host: {
|
|
197
|
+
class: "raqm-scroll-bar",
|
|
198
|
+
"data-slot": "scroll-area-scrollbar",
|
|
199
|
+
"aria-hidden": "true",
|
|
200
|
+
"[attr.data-raqm-vertical]": "vertical() ? \"\" : null",
|
|
201
|
+
"[attr.data-raqm-overflow]": "overflow() ? \"\" : null",
|
|
202
|
+
"[attr.data-raqm-keep-mounted]": "keepMounted() ? \"\" : null",
|
|
203
|
+
"[attr.data-raqm-corner]": "area.horizontal() && area.vertical() ? \"\" : null",
|
|
204
|
+
"[attr.data-raqm-scrolling]": "area.scrolling() ? \"\" : null",
|
|
205
|
+
"[attr.data-raqm-hovering]": "area.hovering() ? \"\" : null",
|
|
206
|
+
"[attr.data-raqm-has-overflow-x]": "area.metrics().scrollWidth > area.metrics().width ? \"\" : null",
|
|
207
|
+
"[attr.data-raqm-has-overflow-y]": "area.vertical() ? \"\" : null",
|
|
208
|
+
"[attr.data-raqm-overflow-x-start]": "area.edges().xStart ? \"\" : null",
|
|
209
|
+
"[attr.data-raqm-overflow-x-end]": "area.edges().xEnd ? \"\" : null",
|
|
210
|
+
"[attr.data-raqm-overflow-y-start]": "area.edges().yStart ? \"\" : null",
|
|
211
|
+
"[attr.data-raqm-overflow-y-end]": "area.edges().yEnd ? \"\" : null",
|
|
212
|
+
"(pointerdown)": "onPointerDown($event)",
|
|
213
|
+
"(pointermove)": "onPointerMove($event)",
|
|
214
|
+
"(pointerup)": "endPointer($event)",
|
|
215
|
+
"(pointercancel)": "endPointer($event)",
|
|
216
|
+
"(lostpointercapture)": "endPointer($event)"
|
|
217
|
+
},
|
|
218
|
+
template: "@if (overflow() || keepMounted()) {\r\n <div\r\n class=\"raqm-scroll-bar__thumb\"\r\n data-slot=\"scroll-area-thumb\"\r\n [attr.data-raqm-vertical]=\"vertical() ? '' : null\"\r\n [attr.data-raqm-scrolling]=\"area.scrolling() ? '' : null\"\r\n [style]=\"thumbStyle()\"\r\n ></div>\r\n}\r\n",
|
|
219
|
+
styles: [":host{position:absolute;display:flex;box-sizing:border-box;touch-action:none;-webkit-user-select:none;user-select:none;padding:1px;transition:color .15s,background-color .15s;visibility:hidden}:host([data-raqm-overflow]),:host([data-raqm-keep-mounted]){visibility:visible}:host([data-raqm-vertical]){inset-block:0;inset-inline-end:0;inline-size:calc(var(--raqm-spacing) * 2.5);border-inline-start:1px solid transparent}:host(:not([data-raqm-vertical])){inset-inline:0;inset-block-end:0;block-size:calc(var(--raqm-spacing) * 2.5);flex-direction:column;border-block-start:1px solid transparent}:host([data-raqm-vertical][data-raqm-corner]){inset-block-end:calc(var(--raqm-spacing) * 2.5)}:host(:not([data-raqm-vertical])[data-raqm-corner]){inset-inline-end:calc(var(--raqm-spacing) * 2.5)}.raqm-scroll-bar__thumb{position:relative;flex-shrink:0;background:var(--raqm-border);border-radius:9999px}:host([data-raqm-vertical]) .raqm-scroll-bar__thumb{inline-size:100%}:host(:not([data-raqm-vertical])) .raqm-scroll-bar__thumb{block-size:100%}@media(prefers-reduced-motion:reduce){:host{transition:none}}@media(forced-colors:active){:host{display:none}}\n"]
|
|
220
|
+
}]
|
|
221
|
+
}],
|
|
222
|
+
ctorParameters: () => [],
|
|
223
|
+
propDecorators: {
|
|
224
|
+
vertical: [{
|
|
225
|
+
type: i0.Input,
|
|
226
|
+
args: [{
|
|
227
|
+
isSignal: true,
|
|
228
|
+
alias: "vertical",
|
|
229
|
+
required: false
|
|
230
|
+
}]
|
|
231
|
+
}],
|
|
232
|
+
keepMounted: [{
|
|
233
|
+
type: i0.Input,
|
|
234
|
+
args: [{
|
|
235
|
+
isSignal: true,
|
|
236
|
+
alias: "keepMounted",
|
|
237
|
+
required: false
|
|
238
|
+
}]
|
|
239
|
+
}]
|
|
240
|
+
}
|
|
241
|
+
});
|
|
242
|
+
var RaqmScrollAreaComponent = class RaqmScrollAreaComponent {
|
|
243
|
+
viewportLabel = input.required(...ngDevMode ? [{ debugName: "viewportLabel" }] : /* istanbul ignore next */ []);
|
|
244
|
+
overflowEdgeThreshold = input(0, ...ngDevMode ? [{ debugName: "overflowEdgeThreshold" }] : /* istanbul ignore next */ []);
|
|
245
|
+
viewport = viewChild.required("viewport", ...ngDevMode ? [{ debugName: "viewport" }] : /* istanbul ignore next */ []);
|
|
246
|
+
content = viewChild.required("content", ...ngDevMode ? [{ debugName: "content" }] : /* istanbul ignore next */ []);
|
|
247
|
+
host = inject(ElementRef);
|
|
248
|
+
destroyRef = inject(DestroyRef);
|
|
249
|
+
bars = contentChildren(RaqmScrollBarComponent, ...ngDevMode ? [{ debugName: "bars" }] : /* istanbul ignore next */ []);
|
|
250
|
+
defaultVertical = computed(() => !this.bars().some((bar) => bar.vertical()), ...ngDevMode ? [{ debugName: "defaultVertical" }] : /* istanbul ignore next */ []);
|
|
251
|
+
metrics = signal({
|
|
252
|
+
width: 0,
|
|
253
|
+
height: 0,
|
|
254
|
+
scrollWidth: 0,
|
|
255
|
+
scrollHeight: 0,
|
|
256
|
+
x: 0,
|
|
257
|
+
y: 0,
|
|
258
|
+
rtl: false
|
|
259
|
+
}, ...ngDevMode ? [{ debugName: "metrics" }] : /* istanbul ignore next */ []);
|
|
260
|
+
horizontal = computed(() => this.bars().some((bar) => !bar.vertical()) && this.metrics().scrollWidth > this.metrics().width, ...ngDevMode ? [{ debugName: "horizontal" }] : /* istanbul ignore next */ []);
|
|
261
|
+
vertical = computed(() => this.metrics().scrollHeight > this.metrics().height, ...ngDevMode ? [{ debugName: "vertical" }] : /* istanbul ignore next */ []);
|
|
262
|
+
scrolling = signal(false, ...ngDevMode ? [{ debugName: "scrolling" }] : /* istanbul ignore next */ []);
|
|
263
|
+
hovering = signal(false, ...ngDevMode ? [{ debugName: "hovering" }] : /* istanbul ignore next */ []);
|
|
264
|
+
scrollTimer;
|
|
265
|
+
edges = computed(() => {
|
|
266
|
+
const m = this.metrics();
|
|
267
|
+
const threshold = this.overflowEdgeThreshold();
|
|
268
|
+
const edge = (key) => Math.max(0, typeof threshold === "number" ? threshold : threshold[key] ?? 0);
|
|
269
|
+
return {
|
|
270
|
+
xStart: m.x > edge("xStart"),
|
|
271
|
+
xEnd: m.scrollWidth - m.width - m.x > edge("xEnd"),
|
|
272
|
+
yStart: m.y > edge("yStart"),
|
|
273
|
+
yEnd: m.scrollHeight - m.height - m.y > edge("yEnd")
|
|
274
|
+
};
|
|
275
|
+
}, ...ngDevMode ? [{ debugName: "edges" }] : /* istanbul ignore next */ []);
|
|
276
|
+
constructor() {
|
|
277
|
+
this.destroyRef.onDestroy(() => clearTimeout(this.scrollTimer));
|
|
278
|
+
afterNextRender(() => {
|
|
279
|
+
const viewport = this.viewport().nativeElement;
|
|
280
|
+
const content = this.content().nativeElement;
|
|
281
|
+
const resize = new ResizeObserver(() => this.refresh());
|
|
282
|
+
resize.observe(viewport);
|
|
283
|
+
resize.observe(content);
|
|
284
|
+
const direction = new MutationObserver(() => this.refresh());
|
|
285
|
+
for (let element = this.host.nativeElement; element; element = element.parentElement) direction.observe(element, {
|
|
286
|
+
attributes: true,
|
|
287
|
+
attributeFilter: [
|
|
288
|
+
"dir",
|
|
289
|
+
"class",
|
|
290
|
+
"style"
|
|
291
|
+
]
|
|
292
|
+
});
|
|
293
|
+
const mutation = new MutationObserver(() => this.refresh());
|
|
294
|
+
mutation.observe(content, {
|
|
295
|
+
subtree: true,
|
|
296
|
+
childList: true,
|
|
297
|
+
characterData: true,
|
|
298
|
+
attributes: true
|
|
299
|
+
});
|
|
300
|
+
const load = () => this.refresh();
|
|
301
|
+
content.addEventListener("load", load, true);
|
|
302
|
+
this.destroyRef.onDestroy(() => {
|
|
303
|
+
resize.disconnect();
|
|
304
|
+
mutation.disconnect();
|
|
305
|
+
direction.disconnect();
|
|
306
|
+
content.removeEventListener("load", load, true);
|
|
307
|
+
});
|
|
308
|
+
this.refresh();
|
|
309
|
+
});
|
|
310
|
+
}
|
|
311
|
+
onScroll() {
|
|
312
|
+
this.refresh();
|
|
313
|
+
this.scrolling.set(true);
|
|
314
|
+
clearTimeout(this.scrollTimer);
|
|
315
|
+
this.scrollTimer = setTimeout(() => this.scrolling.set(false), 100);
|
|
316
|
+
}
|
|
317
|
+
refresh() {
|
|
318
|
+
const viewport = this.viewport().nativeElement;
|
|
319
|
+
const rtl = getComputedStyle(viewport).direction === "rtl";
|
|
320
|
+
const max = Math.max(0, viewport.scrollWidth - viewport.clientWidth);
|
|
321
|
+
let x = viewport.scrollLeft;
|
|
322
|
+
if (rtl) switch (getRtlScrollAxisType()) {
|
|
323
|
+
case RtlScrollAxisType.NEGATED:
|
|
324
|
+
x = -x;
|
|
325
|
+
break;
|
|
326
|
+
case RtlScrollAxisType.NORMAL: x = max - x;
|
|
327
|
+
}
|
|
328
|
+
const next = {
|
|
329
|
+
width: viewport.clientWidth,
|
|
330
|
+
height: viewport.clientHeight,
|
|
331
|
+
scrollWidth: viewport.scrollWidth,
|
|
332
|
+
scrollHeight: viewport.scrollHeight,
|
|
333
|
+
x: Math.max(0, Math.min(max, x)),
|
|
334
|
+
y: Math.max(0, viewport.scrollTop),
|
|
335
|
+
rtl
|
|
336
|
+
};
|
|
337
|
+
const previous = this.metrics();
|
|
338
|
+
if (Object.keys(next).some((key) => next[key] !== previous[key])) this.metrics.set(next);
|
|
339
|
+
}
|
|
340
|
+
scrollTo(orientation, offset) {
|
|
341
|
+
const viewport = this.viewport().nativeElement;
|
|
342
|
+
this.refresh();
|
|
343
|
+
const metrics = this.metrics();
|
|
344
|
+
const max = orientation === "horizontal" ? metrics.scrollWidth - metrics.width : metrics.scrollHeight - metrics.height;
|
|
345
|
+
let value = Math.max(0, Math.min(max, offset));
|
|
346
|
+
if (orientation === "vertical") viewport.scrollTop = value;
|
|
347
|
+
else {
|
|
348
|
+
if (metrics.rtl) switch (getRtlScrollAxisType()) {
|
|
349
|
+
case RtlScrollAxisType.NEGATED:
|
|
350
|
+
value = -value;
|
|
351
|
+
break;
|
|
352
|
+
case RtlScrollAxisType.NORMAL: value = max - value;
|
|
353
|
+
}
|
|
354
|
+
viewport.scrollLeft = value;
|
|
355
|
+
}
|
|
356
|
+
this.refresh();
|
|
357
|
+
}
|
|
358
|
+
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
359
|
+
minVersion: "12.0.0",
|
|
360
|
+
version: "22.2.2",
|
|
361
|
+
ngImport: i0,
|
|
362
|
+
type: RaqmScrollAreaComponent,
|
|
363
|
+
deps: [],
|
|
364
|
+
target: i0.ɵɵFactoryTarget.Component
|
|
365
|
+
});
|
|
366
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({
|
|
367
|
+
minVersion: "17.0.0",
|
|
368
|
+
version: "22.2.2",
|
|
369
|
+
type: RaqmScrollAreaComponent,
|
|
370
|
+
isStandalone: true,
|
|
371
|
+
selector: "raqm-scroll-area",
|
|
372
|
+
inputs: {
|
|
373
|
+
viewportLabel: {
|
|
374
|
+
classPropertyName: "viewportLabel",
|
|
375
|
+
publicName: "viewportLabel",
|
|
376
|
+
isSignal: true,
|
|
377
|
+
isRequired: true,
|
|
378
|
+
transformFunction: null
|
|
379
|
+
},
|
|
380
|
+
overflowEdgeThreshold: {
|
|
381
|
+
classPropertyName: "overflowEdgeThreshold",
|
|
382
|
+
publicName: "overflowEdgeThreshold",
|
|
383
|
+
isSignal: true,
|
|
384
|
+
isRequired: false,
|
|
385
|
+
transformFunction: null
|
|
386
|
+
}
|
|
387
|
+
},
|
|
388
|
+
host: {
|
|
389
|
+
attributes: { "data-slot": "scroll-area" },
|
|
390
|
+
listeners: {
|
|
391
|
+
"pointerenter": "hovering.set(true)",
|
|
392
|
+
"pointerleave": "hovering.set(false)"
|
|
393
|
+
},
|
|
394
|
+
properties: {
|
|
395
|
+
"attr.data-raqm-has-overflow-x": "metrics().scrollWidth > metrics().width ? \"\" : null",
|
|
396
|
+
"attr.data-raqm-has-overflow-y": "vertical() ? \"\" : null",
|
|
397
|
+
"attr.data-raqm-overflow-x-start": "edges().xStart ? \"\" : null",
|
|
398
|
+
"attr.data-raqm-overflow-x-end": "edges().xEnd ? \"\" : null",
|
|
399
|
+
"attr.data-raqm-overflow-y-start": "edges().yStart ? \"\" : null",
|
|
400
|
+
"attr.data-raqm-overflow-y-end": "edges().yEnd ? \"\" : null",
|
|
401
|
+
"attr.data-raqm-scrolling": "scrolling() ? \"\" : null"
|
|
402
|
+
},
|
|
403
|
+
classAttribute: "raqm-scroll-area"
|
|
404
|
+
},
|
|
405
|
+
providers: [{
|
|
406
|
+
provide: SCROLL_AREA,
|
|
407
|
+
useExisting: forwardRef(() => RaqmScrollAreaComponent)
|
|
408
|
+
}],
|
|
409
|
+
queries: [{
|
|
410
|
+
propertyName: "bars",
|
|
411
|
+
predicate: RaqmScrollBarComponent,
|
|
412
|
+
isSignal: true
|
|
413
|
+
}],
|
|
414
|
+
viewQueries: [{
|
|
415
|
+
propertyName: "viewport",
|
|
416
|
+
first: true,
|
|
417
|
+
predicate: ["viewport"],
|
|
418
|
+
descendants: true,
|
|
419
|
+
isSignal: true
|
|
420
|
+
}, {
|
|
421
|
+
propertyName: "content",
|
|
422
|
+
first: true,
|
|
423
|
+
predicate: ["content"],
|
|
424
|
+
descendants: true,
|
|
425
|
+
isSignal: true
|
|
426
|
+
}],
|
|
427
|
+
ngImport: i0,
|
|
428
|
+
template: "<div\r\n #viewport\r\n cdkScrollable\r\n class=\"raqm-scroll-area__viewport\"\r\n data-slot=\"scroll-area-viewport\"\r\n tabindex=\"0\"\r\n role=\"region\"\r\n [attr.aria-label]=\"viewportLabel()\"\r\n (scroll)=\"onScroll()\"\r\n>\r\n <div #content class=\"raqm-scroll-area__content\"><ng-content /></div>\r\n</div>\r\n<ng-content select=\"raqm-scroll-bar\" />\r\n@if (defaultVertical()) {\r\n <raqm-scroll-bar />\r\n}\r\n@if (horizontal() && vertical()) {\r\n <div class=\"raqm-scroll-area__corner\" aria-hidden=\"true\"></div>\r\n}\r\n",
|
|
429
|
+
styles: [":host{display:block;position:relative;min-inline-size:0;min-block-size:0}.raqm-scroll-area__viewport{inline-size:100%;block-size:100%;overflow:auto;border-radius:inherit;scrollbar-width:none;outline:none;transition:color .15s,box-shadow .15s}.raqm-scroll-area__viewport::-webkit-scrollbar{display:none}.raqm-scroll-area__viewport:focus-visible{outline:1px solid var(--raqm-ring);box-shadow:0 0 0 3px color-mix(in srgb,var(--raqm-ring) 50%,transparent)}.raqm-scroll-area__content{display:table;min-inline-size:100%}.raqm-scroll-area__corner{position:absolute;inset-inline-end:0;inset-block-end:0;inline-size:calc(var(--raqm-spacing) * 2.5);block-size:calc(var(--raqm-spacing) * 2.5)}@media(prefers-reduced-motion:reduce){.raqm-scroll-area__viewport{transition:none}}@media(forced-colors:active){.raqm-scroll-area__viewport{scrollbar-width:auto}.raqm-scroll-area__viewport::-webkit-scrollbar{display:initial}}\n"],
|
|
430
|
+
dependencies: [{
|
|
431
|
+
kind: "directive",
|
|
432
|
+
type: CdkScrollable,
|
|
433
|
+
selector: "[cdk-scrollable], [cdkScrollable]"
|
|
434
|
+
}, {
|
|
435
|
+
kind: "component",
|
|
436
|
+
type: RaqmScrollBarComponent,
|
|
437
|
+
selector: "raqm-scroll-bar",
|
|
438
|
+
inputs: ["vertical", "keepMounted"]
|
|
439
|
+
}],
|
|
440
|
+
changeDetection: i0.ChangeDetectionStrategy.OnPush
|
|
441
|
+
});
|
|
442
|
+
};
|
|
443
|
+
i0.ɵɵngDeclareClassMetadata({
|
|
444
|
+
minVersion: "12.0.0",
|
|
445
|
+
version: "22.2.2",
|
|
446
|
+
ngImport: i0,
|
|
447
|
+
type: RaqmScrollAreaComponent,
|
|
448
|
+
decorators: [{
|
|
449
|
+
type: Component,
|
|
450
|
+
args: [{
|
|
451
|
+
selector: "raqm-scroll-area",
|
|
452
|
+
imports: [CdkScrollable, RaqmScrollBarComponent],
|
|
453
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
454
|
+
providers: [{
|
|
455
|
+
provide: SCROLL_AREA,
|
|
456
|
+
useExisting: forwardRef(() => RaqmScrollAreaComponent)
|
|
457
|
+
}],
|
|
458
|
+
host: {
|
|
459
|
+
class: "raqm-scroll-area",
|
|
460
|
+
"data-slot": "scroll-area",
|
|
461
|
+
"[attr.data-raqm-has-overflow-x]": "metrics().scrollWidth > metrics().width ? \"\" : null",
|
|
462
|
+
"[attr.data-raqm-has-overflow-y]": "vertical() ? \"\" : null",
|
|
463
|
+
"[attr.data-raqm-overflow-x-start]": "edges().xStart ? \"\" : null",
|
|
464
|
+
"[attr.data-raqm-overflow-x-end]": "edges().xEnd ? \"\" : null",
|
|
465
|
+
"[attr.data-raqm-overflow-y-start]": "edges().yStart ? \"\" : null",
|
|
466
|
+
"[attr.data-raqm-overflow-y-end]": "edges().yEnd ? \"\" : null",
|
|
467
|
+
"[attr.data-raqm-scrolling]": "scrolling() ? \"\" : null",
|
|
468
|
+
"(pointerenter)": "hovering.set(true)",
|
|
469
|
+
"(pointerleave)": "hovering.set(false)"
|
|
470
|
+
},
|
|
471
|
+
template: "<div\r\n #viewport\r\n cdkScrollable\r\n class=\"raqm-scroll-area__viewport\"\r\n data-slot=\"scroll-area-viewport\"\r\n tabindex=\"0\"\r\n role=\"region\"\r\n [attr.aria-label]=\"viewportLabel()\"\r\n (scroll)=\"onScroll()\"\r\n>\r\n <div #content class=\"raqm-scroll-area__content\"><ng-content /></div>\r\n</div>\r\n<ng-content select=\"raqm-scroll-bar\" />\r\n@if (defaultVertical()) {\r\n <raqm-scroll-bar />\r\n}\r\n@if (horizontal() && vertical()) {\r\n <div class=\"raqm-scroll-area__corner\" aria-hidden=\"true\"></div>\r\n}\r\n",
|
|
472
|
+
styles: [":host{display:block;position:relative;min-inline-size:0;min-block-size:0}.raqm-scroll-area__viewport{inline-size:100%;block-size:100%;overflow:auto;border-radius:inherit;scrollbar-width:none;outline:none;transition:color .15s,box-shadow .15s}.raqm-scroll-area__viewport::-webkit-scrollbar{display:none}.raqm-scroll-area__viewport:focus-visible{outline:1px solid var(--raqm-ring);box-shadow:0 0 0 3px color-mix(in srgb,var(--raqm-ring) 50%,transparent)}.raqm-scroll-area__content{display:table;min-inline-size:100%}.raqm-scroll-area__corner{position:absolute;inset-inline-end:0;inset-block-end:0;inline-size:calc(var(--raqm-spacing) * 2.5);block-size:calc(var(--raqm-spacing) * 2.5)}@media(prefers-reduced-motion:reduce){.raqm-scroll-area__viewport{transition:none}}@media(forced-colors:active){.raqm-scroll-area__viewport{scrollbar-width:auto}.raqm-scroll-area__viewport::-webkit-scrollbar{display:initial}}\n"]
|
|
473
|
+
}]
|
|
474
|
+
}],
|
|
475
|
+
ctorParameters: () => [],
|
|
476
|
+
propDecorators: {
|
|
477
|
+
viewportLabel: [{
|
|
478
|
+
type: i0.Input,
|
|
479
|
+
args: [{
|
|
480
|
+
isSignal: true,
|
|
481
|
+
alias: "viewportLabel",
|
|
482
|
+
required: true
|
|
483
|
+
}]
|
|
484
|
+
}],
|
|
485
|
+
overflowEdgeThreshold: [{
|
|
486
|
+
type: i0.Input,
|
|
487
|
+
args: [{
|
|
488
|
+
isSignal: true,
|
|
489
|
+
alias: "overflowEdgeThreshold",
|
|
490
|
+
required: false
|
|
491
|
+
}]
|
|
492
|
+
}],
|
|
493
|
+
viewport: [{
|
|
494
|
+
type: i0.ViewChild,
|
|
495
|
+
args: ["viewport", { isSignal: true }]
|
|
496
|
+
}],
|
|
497
|
+
content: [{
|
|
498
|
+
type: i0.ViewChild,
|
|
499
|
+
args: ["content", { isSignal: true }]
|
|
500
|
+
}],
|
|
501
|
+
bars: [{
|
|
502
|
+
type: i0.ContentChildren,
|
|
503
|
+
args: [i0.forwardRef(() => RaqmScrollBarComponent), { isSignal: true }]
|
|
504
|
+
}]
|
|
505
|
+
}
|
|
506
|
+
});
|
|
507
|
+
const RaqmScrollArea = [RaqmScrollAreaComponent, RaqmScrollBarComponent];
|
|
508
|
+
export { RaqmScrollArea, RaqmScrollAreaComponent, RaqmScrollBarComponent };
|
|
509
|
+
|
|
510
|
+
//# sourceMappingURL=raqm-ui-scroll-area.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"raqm-ui-scroll-area.mjs","names":[],"sources":["../../../projects/ui/scroll-area/scroll-area-context.ts","../../../projects/ui/scroll-area/scroll-bar.ts","../../../projects/ui/scroll-area/scroll-bar.html","../../../projects/ui/scroll-area/scroll-area.ts","../../../projects/ui/scroll-area/scroll-area.html","../../../projects/ui/scroll-area/public-api.ts"],"sourcesContent":["import { InjectionToken, Signal } from '@angular/core';\r\n\r\nexport interface ScrollAreaMetrics {\r\n width: number;\r\n height: number;\r\n scrollWidth: number;\r\n scrollHeight: number;\r\n x: number;\r\n y: number;\r\n rtl: boolean;\r\n}\r\n\r\n/** Internal root contract; the token avoids a circular component dependency. */\r\nexport const SCROLL_AREA = new InjectionToken<{\r\n metrics: Signal<ScrollAreaMetrics>;\r\n horizontal: Signal<boolean>;\r\n vertical: Signal<boolean>;\r\n scrolling: Signal<boolean>;\r\n hovering: Signal<boolean>;\r\n edges: Signal<{ xStart: boolean; xEnd: boolean; yStart: boolean; yEnd: boolean }>;\r\n refresh(): void;\r\n scrollTo(orientation: 'horizontal' | 'vertical', offset: number): void;\r\n}>('RAQM_SCROLL_AREA');\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n DestroyRef,\r\n ElementRef,\r\n afterNextRender,\r\n booleanAttribute,\r\n computed,\r\n inject,\r\n input,\r\n signal,\r\n} from '@angular/core';\r\nimport { SCROLL_AREA } from './scroll-area-context';\r\n\r\n/** Scroll bar overlay; `aria-hidden` and not a tab stop, because the viewport handles keyboard/AT scrolling. */\r\n@Component({\r\n selector: 'raqm-scroll-bar',\r\n templateUrl: './scroll-bar.html',\r\n styleUrl: './scroll-bar.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n class: 'raqm-scroll-bar',\r\n 'data-slot': 'scroll-area-scrollbar',\r\n 'aria-hidden': 'true',\r\n '[attr.data-raqm-vertical]': 'vertical() ? \"\" : null',\r\n '[attr.data-raqm-overflow]': 'overflow() ? \"\" : null',\r\n '[attr.data-raqm-keep-mounted]': 'keepMounted() ? \"\" : null',\r\n '[attr.data-raqm-corner]': 'area.horizontal() && area.vertical() ? \"\" : null',\r\n '[attr.data-raqm-scrolling]': 'area.scrolling() ? \"\" : null',\r\n '[attr.data-raqm-hovering]': 'area.hovering() ? \"\" : null',\r\n '[attr.data-raqm-has-overflow-x]':\r\n 'area.metrics().scrollWidth > area.metrics().width ? \"\" : null',\r\n '[attr.data-raqm-has-overflow-y]': 'area.vertical() ? \"\" : null',\r\n '[attr.data-raqm-overflow-x-start]': 'area.edges().xStart ? \"\" : null',\r\n '[attr.data-raqm-overflow-x-end]': 'area.edges().xEnd ? \"\" : null',\r\n '[attr.data-raqm-overflow-y-start]': 'area.edges().yStart ? \"\" : null',\r\n '[attr.data-raqm-overflow-y-end]': 'area.edges().yEnd ? \"\" : null',\r\n '(pointerdown)': 'onPointerDown($event)',\r\n '(pointermove)': 'onPointerMove($event)',\r\n '(pointerup)': 'endPointer($event)',\r\n '(pointercancel)': 'endPointer($event)',\r\n '(lostpointercapture)': 'endPointer($event)',\r\n },\r\n})\r\nexport class RaqmScrollBarComponent {\r\n readonly vertical = input(true, { transform: booleanAttribute });\r\n /** Keeps the internal thumb mounted without overflow; the Angular host always exists. */\r\n readonly keepMounted = input(false, { transform: booleanAttribute });\r\n protected readonly area = inject(SCROLL_AREA);\r\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\r\n private readonly destroyRef = inject(DestroyRef);\r\n private readonly trackSize = signal(0);\r\n private drag: { pointer: number; grab: number } | null = null;\r\n protected readonly overflow = computed(() => {\r\n const m = this.area.metrics();\r\n return this.vertical() ? m.scrollHeight > m.height : m.scrollWidth > m.width;\r\n });\r\n private readonly geometry = computed(() => {\r\n const m = this.area.metrics();\r\n const vertical = this.vertical();\r\n const viewport = vertical ? m.height : m.width;\r\n const content = vertical ? m.scrollHeight : m.scrollWidth;\r\n const track = this.trackSize();\r\n const thumb = Math.min(track, Math.max(16, content ? (track * viewport) / content : track));\r\n const max = Math.max(0, content - viewport);\r\n return { thumb, travel: track - thumb, max, offset: vertical ? m.y : m.x };\r\n });\r\n protected readonly thumbStyle = computed(() => {\r\n const g = this.geometry();\r\n const position = g.max ? (g.offset / g.max) * g.travel : 0;\r\n return this.vertical()\r\n ? { 'block-size': `${g.thumb}px`, 'inset-block-start': `${position}px` }\r\n : { 'inline-size': `${g.thumb}px`, 'inset-inline-start': `${position}px` };\r\n });\r\n\r\n constructor() {\r\n afterNextRender(() => {\r\n const resize = new ResizeObserver(() => this.measure());\r\n resize.observe(this.host.nativeElement);\r\n this.measure();\r\n const track = this.host.nativeElement;\r\n const wheel = (event: WheelEvent) => this.onTrackWheel(event);\r\n track.addEventListener('wheel', wheel, { passive: false });\r\n this.destroyRef.onDestroy(() => {\r\n resize.disconnect();\r\n track.removeEventListener('wheel', wheel);\r\n });\r\n });\r\n this.destroyRef.onDestroy(() => this.endDrag());\r\n }\r\n\r\n /** Bridges only overlay-track wheel input; viewport wheel/touch remain native. */\r\n private onTrackWheel(event: WheelEvent): void {\r\n if (event.ctrlKey || event.defaultPrevented || !event.cancelable) return;\r\n const vertical = this.vertical();\r\n const delta = vertical ? event.deltaY : event.deltaX;\r\n if (!Number.isFinite(delta) || delta === 0) return;\r\n this.area.refresh();\r\n const metrics = this.area.metrics();\r\n const css = getComputedStyle(this.host.nativeElement);\r\n // Computed line-height may be `normal`: use the inherited font's usual 1.2 ratio.\r\n const lineHeight = parseFloat(css.lineHeight) || parseFloat(css.fontSize) * 1.2 || 16;\r\n const unit =\r\n event.deltaMode === WheelEvent.DOM_DELTA_LINE\r\n ? lineHeight\r\n : event.deltaMode === WheelEvent.DOM_DELTA_PAGE\r\n ? vertical\r\n ? metrics.height\r\n : metrics.width\r\n : 1;\r\n // Wheel deltaX is physical; the root's public offset is measured from logical start.\r\n const change = delta * unit * (!vertical && metrics.rtl ? -1 : 1);\r\n const before = vertical ? metrics.y : metrics.x;\r\n this.area.scrollTo(this.vertical() ? 'vertical' : 'horizontal', before + change);\r\n const after = this.area.metrics();\r\n if ((vertical ? after.y : after.x) !== before) event.preventDefault();\r\n }\r\n\r\n private measure(): void {\r\n const el = this.host.nativeElement;\r\n const css = getComputedStyle(el);\r\n const vertical = this.vertical();\r\n this.trackSize.set(\r\n Math.max(\r\n 0,\r\n (vertical ? el.clientHeight : el.clientWidth) -\r\n parseFloat(vertical ? css.paddingTop : css.paddingLeft) -\r\n parseFloat(vertical ? css.paddingBottom : css.paddingRight),\r\n ),\r\n );\r\n }\r\n\r\n private coordinate(event: PointerEvent): number {\r\n const el = this.host.nativeElement;\r\n const rect = el.getBoundingClientRect();\r\n const css = getComputedStyle(el);\r\n if (this.vertical())\r\n return event.clientY - rect.top - el.clientTop - parseFloat(css.paddingTop);\r\n return this.area.metrics().rtl\r\n ? rect.right - event.clientX - parseFloat(css.borderRightWidth) - parseFloat(css.paddingRight)\r\n : event.clientX - rect.left - el.clientLeft - parseFloat(css.paddingLeft);\r\n }\r\n\r\n protected onPointerDown(event: PointerEvent): void {\r\n if (!event.isPrimary || event.button !== 0 || !this.overflow() || this.drag) return;\r\n event.preventDefault();\r\n this.area.refresh();\r\n this.measure();\r\n const g = this.geometry();\r\n const position = g.max ? (g.offset / g.max) * g.travel : 0;\r\n const coordinate = this.coordinate(event);\r\n const onThumb = coordinate >= position && coordinate <= position + g.thumb;\r\n this.drag = { pointer: event.pointerId, grab: onThumb ? coordinate - position : g.thumb / 2 };\r\n this.host.nativeElement.setPointerCapture(event.pointerId);\r\n if (!onThumb) this.onPointerMove(event);\r\n }\r\n\r\n protected onPointerMove(event: PointerEvent): void {\r\n if (this.drag?.pointer !== event.pointerId) return;\r\n const g = this.geometry();\r\n if (g.travel > 0)\r\n this.area.scrollTo(\r\n this.vertical() ? 'vertical' : 'horizontal',\r\n ((this.coordinate(event) - this.drag.grab) / g.travel) * g.max,\r\n );\r\n }\r\n\r\n protected endPointer(event: PointerEvent): void {\r\n if (event.pointerId === this.drag?.pointer) this.endDrag();\r\n }\r\n\r\n private endDrag(): void {\r\n const drag = this.drag;\r\n this.drag = null;\r\n if (drag && this.host.nativeElement.hasPointerCapture(drag.pointer))\r\n this.host.nativeElement.releasePointerCapture(drag.pointer);\r\n }\r\n}\r\n","@if (overflow() || keepMounted()) {\r\n <div\r\n class=\"raqm-scroll-bar__thumb\"\r\n data-slot=\"scroll-area-thumb\"\r\n [attr.data-raqm-vertical]=\"vertical() ? '' : null\"\r\n [attr.data-raqm-scrolling]=\"area.scrolling() ? '' : null\"\r\n [style]=\"thumbStyle()\"\r\n ></div>\r\n}\r\n","import { CdkScrollable } from '@angular/cdk/scrolling';\r\nimport { getRtlScrollAxisType, RtlScrollAxisType } from '@angular/cdk/platform';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n DestroyRef,\r\n ElementRef,\r\n afterNextRender,\r\n computed,\r\n contentChildren,\r\n forwardRef,\r\n inject,\r\n input,\r\n signal,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { RaqmScrollBarComponent } from './scroll-bar';\r\nimport { SCROLL_AREA, ScrollAreaMetrics } from './scroll-area-context';\r\n\r\n/** Scroll area; the labelled native viewport is the sole keyboard/AT target and the overlay bars are `aria-hidden` and pointer-only. */\r\n@Component({\r\n selector: 'raqm-scroll-area',\r\n imports: [CdkScrollable, RaqmScrollBarComponent],\r\n templateUrl: './scroll-area.html',\r\n styleUrl: './scroll-area.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [{ provide: SCROLL_AREA, useExisting: forwardRef(() => RaqmScrollAreaComponent) }],\r\n host: {\r\n class: 'raqm-scroll-area',\r\n 'data-slot': 'scroll-area',\r\n '[attr.data-raqm-has-overflow-x]': 'metrics().scrollWidth > metrics().width ? \"\" : null',\r\n '[attr.data-raqm-has-overflow-y]': 'vertical() ? \"\" : null',\r\n '[attr.data-raqm-overflow-x-start]': 'edges().xStart ? \"\" : null',\r\n '[attr.data-raqm-overflow-x-end]': 'edges().xEnd ? \"\" : null',\r\n '[attr.data-raqm-overflow-y-start]': 'edges().yStart ? \"\" : null',\r\n '[attr.data-raqm-overflow-y-end]': 'edges().yEnd ? \"\" : null',\r\n '[attr.data-raqm-scrolling]': 'scrolling() ? \"\" : null',\r\n '(pointerenter)': 'hovering.set(true)',\r\n '(pointerleave)': 'hovering.set(false)',\r\n },\r\n})\r\nexport class RaqmScrollAreaComponent {\r\n /** Required accessible name for the keyboard-focusable native viewport. */\r\n readonly viewportLabel = input.required<string>();\r\n readonly overflowEdgeThreshold = input<\r\n number | Partial<Record<'xStart' | 'xEnd' | 'yStart' | 'yEnd', number>>\r\n >(0);\r\n readonly viewport = viewChild.required<ElementRef<HTMLElement>>('viewport');\r\n private readonly content = viewChild.required<ElementRef<HTMLElement>>('content');\r\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\r\n private readonly destroyRef = inject(DestroyRef);\r\n private readonly bars = contentChildren(RaqmScrollBarComponent);\r\n protected readonly defaultVertical = computed(() => !this.bars().some((bar) => bar.vertical()));\r\n readonly metrics = signal<ScrollAreaMetrics>({\r\n width: 0,\r\n height: 0,\r\n scrollWidth: 0,\r\n scrollHeight: 0,\r\n x: 0,\r\n y: 0,\r\n rtl: false,\r\n });\r\n readonly horizontal = computed(\r\n () =>\r\n this.bars().some((bar) => !bar.vertical()) &&\r\n this.metrics().scrollWidth > this.metrics().width,\r\n );\r\n readonly vertical = computed(() => this.metrics().scrollHeight > this.metrics().height);\r\n readonly scrolling = signal(false);\r\n readonly hovering = signal(false);\r\n private scrollTimer: ReturnType<typeof setTimeout> | undefined;\r\n readonly edges = computed(() => {\r\n const m = this.metrics();\r\n const threshold = this.overflowEdgeThreshold();\r\n const edge = (key: 'xStart' | 'xEnd' | 'yStart' | 'yEnd') =>\r\n Math.max(0, typeof threshold === 'number' ? threshold : (threshold[key] ?? 0));\r\n return {\r\n xStart: m.x > edge('xStart'),\r\n xEnd: m.scrollWidth - m.width - m.x > edge('xEnd'),\r\n yStart: m.y > edge('yStart'),\r\n yEnd: m.scrollHeight - m.height - m.y > edge('yEnd'),\r\n };\r\n });\r\n\r\n constructor() {\r\n this.destroyRef.onDestroy(() => clearTimeout(this.scrollTimer));\r\n afterNextRender(() => {\r\n const viewport = this.viewport().nativeElement;\r\n const content = this.content().nativeElement;\r\n const resize = new ResizeObserver(() => this.refresh());\r\n resize.observe(viewport);\r\n resize.observe(content);\r\n // Direction can change on any ancestor without changing viewport size.\r\n const direction = new MutationObserver(() => this.refresh());\r\n for (\r\n let element: HTMLElement | null = this.host.nativeElement;\r\n element;\r\n element = element.parentElement\r\n ) {\r\n direction.observe(element, {\r\n attributes: true,\r\n attributeFilter: ['dir', 'class', 'style'],\r\n });\r\n }\r\n const mutation = new MutationObserver(() => this.refresh());\r\n mutation.observe(content, {\r\n subtree: true,\r\n childList: true,\r\n characterData: true,\r\n attributes: true,\r\n });\r\n const load = () => this.refresh();\r\n content.addEventListener('load', load, true);\r\n this.destroyRef.onDestroy(() => {\r\n resize.disconnect();\r\n mutation.disconnect();\r\n direction.disconnect();\r\n content.removeEventListener('load', load, true);\r\n });\r\n this.refresh();\r\n });\r\n }\r\n\r\n /** Tracks the native scroll lifecycle without changing wheel or touch events. */\r\n protected onScroll(): void {\r\n this.refresh();\r\n this.scrolling.set(true);\r\n clearTimeout(this.scrollTimer);\r\n this.scrollTimer = setTimeout(() => this.scrolling.set(false), 100);\r\n }\r\n\r\n refresh(): void {\r\n const viewport = this.viewport().nativeElement;\r\n const rtl = getComputedStyle(viewport).direction === 'rtl';\r\n const max = Math.max(0, viewport.scrollWidth - viewport.clientWidth);\r\n let x = viewport.scrollLeft;\r\n if (rtl) {\r\n switch (getRtlScrollAxisType()) {\r\n case RtlScrollAxisType.NEGATED:\r\n x = -x;\r\n break;\r\n case RtlScrollAxisType.NORMAL:\r\n x = max - x;\r\n break;\r\n }\r\n }\r\n const next = {\r\n width: viewport.clientWidth,\r\n height: viewport.clientHeight,\r\n scrollWidth: viewport.scrollWidth,\r\n scrollHeight: viewport.scrollHeight,\r\n x: Math.max(0, Math.min(max, x)),\r\n y: Math.max(0, viewport.scrollTop),\r\n rtl,\r\n };\r\n const previous = this.metrics();\r\n if (\r\n Object.keys(next).some(\r\n (key) => next[key as keyof ScrollAreaMetrics] !== previous[key as keyof ScrollAreaMetrics],\r\n )\r\n )\r\n this.metrics.set(next);\r\n }\r\n\r\n /** Sets a clamped native offset measured from the logical start of the chosen axis. */\r\n scrollTo(orientation: 'horizontal' | 'vertical', offset: number): void {\r\n const viewport = this.viewport().nativeElement;\r\n this.refresh();\r\n const metrics = this.metrics();\r\n const max =\r\n orientation === 'horizontal'\r\n ? metrics.scrollWidth - metrics.width\r\n : metrics.scrollHeight - metrics.height;\r\n let value = Math.max(0, Math.min(max, offset));\r\n if (orientation === 'vertical') {\r\n viewport.scrollTop = value;\r\n } else {\r\n if (metrics.rtl) {\r\n switch (getRtlScrollAxisType()) {\r\n case RtlScrollAxisType.NEGATED:\r\n value = -value;\r\n break;\r\n case RtlScrollAxisType.NORMAL:\r\n value = max - value;\r\n break;\r\n }\r\n }\r\n viewport.scrollLeft = value;\r\n }\r\n this.refresh();\r\n }\r\n}\r\n","<div\r\n #viewport\r\n cdkScrollable\r\n class=\"raqm-scroll-area__viewport\"\r\n data-slot=\"scroll-area-viewport\"\r\n tabindex=\"0\"\r\n role=\"region\"\r\n [attr.aria-label]=\"viewportLabel()\"\r\n (scroll)=\"onScroll()\"\r\n>\r\n <div #content class=\"raqm-scroll-area__content\"><ng-content /></div>\r\n</div>\r\n<ng-content select=\"raqm-scroll-bar\" />\r\n@if (defaultVertical()) {\r\n <raqm-scroll-bar />\r\n}\r\n@if (horizontal() && vertical()) {\r\n <div class=\"raqm-scroll-area__corner\" aria-hidden=\"true\"></div>\r\n}\r\n","import { RaqmScrollAreaComponent } from './scroll-area';\r\nimport { RaqmScrollBarComponent } from './scroll-bar';\r\n\r\nexport { RaqmScrollAreaComponent, RaqmScrollBarComponent };\r\n\r\nexport const RaqmScrollArea = [RaqmScrollAreaComponent, RaqmScrollBarComponent] as const;\r\n"],"mappings":"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"}
|