ng-primitives 0.97.0 → 0.99.0
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/fesm2022/ng-primitives-dialog.mjs +4 -0
- package/fesm2022/ng-primitives-dialog.mjs.map +1 -1
- package/fesm2022/ng-primitives-menu.mjs +17 -3
- package/fesm2022/ng-primitives-menu.mjs.map +1 -1
- package/fesm2022/ng-primitives-popover.mjs +15 -3
- package/fesm2022/ng-primitives-popover.mjs.map +1 -1
- package/fesm2022/ng-primitives-toggle-group.mjs +1 -0
- package/fesm2022/ng-primitives-toggle-group.mjs.map +1 -1
- package/fesm2022/ng-primitives-tooltip.mjs +15 -3
- package/fesm2022/ng-primitives-tooltip.mjs.map +1 -1
- package/menu/index.d.ts +36 -2
- package/package.json +1 -1
- package/popover/index.d.ts +14 -2
- package/schematics/ng-generate/templates/toast/toast.__fileSuffix@dasherize__.ts.template +72 -8
- package/toast/index.d.ts +1 -1
- package/toggle-group/index.d.ts +4 -0
- package/tooltip/index.d.ts +14 -2
package/popover/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as ng_primitives_portal from 'ng-primitives/portal';
|
|
2
|
-
import { NgpOffset, NgpOverlayContent, NgpOffsetInput, NgpOverlay } from 'ng-primitives/portal';
|
|
2
|
+
import { NgpOffset, NgpShift, NgpOverlayContent, NgpOffsetInput, NgpShiftInput, NgpOverlay } from 'ng-primitives/portal';
|
|
3
3
|
export { injectOverlayContext as injectPopoverContext } from 'ng-primitives/portal';
|
|
4
4
|
import * as _angular_core from '@angular/core';
|
|
5
5
|
import { Provider, OnDestroy, InjectOptions, Signal } from '@angular/core';
|
|
@@ -57,6 +57,12 @@ interface NgpPopoverConfig {
|
|
|
57
57
|
* @default scroll
|
|
58
58
|
*/
|
|
59
59
|
scrollBehavior: 'reposition' | 'block';
|
|
60
|
+
/**
|
|
61
|
+
* Configure shift behavior to keep the popover in view.
|
|
62
|
+
* Can be a boolean to enable/disable, or an object with padding and limiter options.
|
|
63
|
+
* @default undefined (enabled by default in overlay)
|
|
64
|
+
*/
|
|
65
|
+
shift: NgpShift;
|
|
60
66
|
}
|
|
61
67
|
/**
|
|
62
68
|
* Provide the default Popover configuration
|
|
@@ -126,6 +132,12 @@ declare class NgpPopoverTrigger<T = null> implements OnDestroy {
|
|
|
126
132
|
* @default true
|
|
127
133
|
*/
|
|
128
134
|
readonly flip: _angular_core.InputSignalWithTransform<boolean, BooleanInput>;
|
|
135
|
+
/**
|
|
136
|
+
* Configure shift behavior to keep the popover in view.
|
|
137
|
+
* Can be a boolean to enable/disable, or an object with padding and limiter options.
|
|
138
|
+
* @default undefined (enabled by default in overlay)
|
|
139
|
+
*/
|
|
140
|
+
readonly shift: _angular_core.InputSignalWithTransform<NgpShift, NgpShiftInput>;
|
|
129
141
|
/**
|
|
130
142
|
* Define the container in which the popover should be attached.
|
|
131
143
|
* @default document.body
|
|
@@ -191,7 +203,7 @@ declare class NgpPopoverTrigger<T = null> implements OnDestroy {
|
|
|
191
203
|
*/
|
|
192
204
|
private createOverlay;
|
|
193
205
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgpPopoverTrigger<any>, never>;
|
|
194
|
-
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<NgpPopoverTrigger<any>, "[ngpPopoverTrigger]", ["ngpPopoverTrigger"], { "popover": { "alias": "ngpPopoverTrigger"; "required": false; "isSignal": true; }; "disabled": { "alias": "ngpPopoverTriggerDisabled"; "required": false; "isSignal": true; }; "placement": { "alias": "ngpPopoverTriggerPlacement"; "required": false; "isSignal": true; }; "offset": { "alias": "ngpPopoverTriggerOffset"; "required": false; "isSignal": true; }; "showDelay": { "alias": "ngpPopoverTriggerShowDelay"; "required": false; "isSignal": true; }; "hideDelay": { "alias": "ngpPopoverTriggerHideDelay"; "required": false; "isSignal": true; }; "flip": { "alias": "ngpPopoverTriggerFlip"; "required": false; "isSignal": true; }; "container": { "alias": "ngpPopoverTriggerContainer"; "required": false; "isSignal": true; }; "closeOnOutsideClick": { "alias": "ngpPopoverTriggerCloseOnOutsideClick"; "required": false; "isSignal": true; }; "closeOnEscape": { "alias": "ngpPopoverTriggerCloseOnEscape"; "required": false; "isSignal": true; }; "scrollBehavior": { "alias": "ngpPopoverTriggerScrollBehavior"; "required": false; "isSignal": true; }; "context": { "alias": "ngpPopoverTriggerContext"; "required": false; "isSignal": true; }; "anchor": { "alias": "ngpPopoverTriggerAnchor"; "required": false; "isSignal": true; }; }, { "openChange": "ngpPopoverTriggerOpenChange"; }, never, never, true, never>;
|
|
206
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<NgpPopoverTrigger<any>, "[ngpPopoverTrigger]", ["ngpPopoverTrigger"], { "popover": { "alias": "ngpPopoverTrigger"; "required": false; "isSignal": true; }; "disabled": { "alias": "ngpPopoverTriggerDisabled"; "required": false; "isSignal": true; }; "placement": { "alias": "ngpPopoverTriggerPlacement"; "required": false; "isSignal": true; }; "offset": { "alias": "ngpPopoverTriggerOffset"; "required": false; "isSignal": true; }; "showDelay": { "alias": "ngpPopoverTriggerShowDelay"; "required": false; "isSignal": true; }; "hideDelay": { "alias": "ngpPopoverTriggerHideDelay"; "required": false; "isSignal": true; }; "flip": { "alias": "ngpPopoverTriggerFlip"; "required": false; "isSignal": true; }; "shift": { "alias": "ngpPopoverTriggerShift"; "required": false; "isSignal": true; }; "container": { "alias": "ngpPopoverTriggerContainer"; "required": false; "isSignal": true; }; "closeOnOutsideClick": { "alias": "ngpPopoverTriggerCloseOnOutsideClick"; "required": false; "isSignal": true; }; "closeOnEscape": { "alias": "ngpPopoverTriggerCloseOnEscape"; "required": false; "isSignal": true; }; "scrollBehavior": { "alias": "ngpPopoverTriggerScrollBehavior"; "required": false; "isSignal": true; }; "context": { "alias": "ngpPopoverTriggerContext"; "required": false; "isSignal": true; }; "anchor": { "alias": "ngpPopoverTriggerAnchor"; "required": false; "isSignal": true; }; }, { "openChange": "ngpPopoverTriggerOpenChange"; }, never, never, true, never>;
|
|
195
207
|
}
|
|
196
208
|
type NgpPopoverPlacement = 'top' | 'right' | 'bottom' | 'left' | 'top-start' | 'top-end' | 'right-start' | 'right-end' | 'bottom-start' | 'bottom-end' | 'left-start' | 'left-end';
|
|
197
209
|
|
|
@@ -6,6 +6,10 @@ import { injectToastContext, NgpToast, NgpToastManager } from 'ng-primitives/toa
|
|
|
6
6
|
selector: '<%= prefix %>-toast',
|
|
7
7
|
imports: [NgpButton],
|
|
8
8
|
hostDirectives: [NgpToast],
|
|
9
|
+
host: {
|
|
10
|
+
'animate.enter': 'toast-enter',
|
|
11
|
+
'animate.leave': 'toast-leave',
|
|
12
|
+
},
|
|
9
13
|
template: `
|
|
10
14
|
<p class="toast-title">{{ context.header }}</p>
|
|
11
15
|
<p class="toast-description">{{ context.description }}</p>
|
|
@@ -17,11 +21,6 @@ import { injectToastContext, NgpToast, NgpToastManager } from 'ng-primitives/toa
|
|
|
17
21
|
:host {
|
|
18
22
|
position: absolute;
|
|
19
23
|
touch-action: none;
|
|
20
|
-
transition:
|
|
21
|
-
transform 0.4s,
|
|
22
|
-
opacity 0.4s,
|
|
23
|
-
height 0.4s,
|
|
24
|
-
box-shadow 0.2s;
|
|
25
24
|
box-sizing: border-box;
|
|
26
25
|
align-items: center;
|
|
27
26
|
gap: 6px;
|
|
@@ -31,16 +30,16 @@ import { injectToastContext, NgpToast, NgpToastManager } from 'ng-primitives/toa
|
|
|
31
30
|
border: 1px solid var(--ngp-border);
|
|
32
31
|
padding: 12px 16px;
|
|
33
32
|
opacity: 0;
|
|
34
|
-
transition: all 0.4s cubic-bezier(0.215, 0.61, 0.355, 1);
|
|
35
33
|
border-radius: 8px;
|
|
36
34
|
z-index: var(--ngp-toast-z-index);
|
|
37
35
|
grid-template-columns: 1fr auto;
|
|
38
36
|
grid-template-rows: min-content min-content;
|
|
39
37
|
column-gap: 12px;
|
|
40
38
|
align-items: center;
|
|
41
|
-
width:
|
|
39
|
+
width: 350px;
|
|
42
40
|
height: fit-content;
|
|
43
41
|
transform: var(--y);
|
|
42
|
+
transition: all 0.4s cubic-bezier(0.215, 0.61, 0.355, 1);
|
|
44
43
|
}
|
|
45
44
|
|
|
46
45
|
.toast-title {
|
|
@@ -133,7 +132,7 @@ import { injectToastContext, NgpToast, NgpToastManager } from 'ng-primitives/toa
|
|
|
133
132
|
|
|
134
133
|
:host[data-expanded='true'] {
|
|
135
134
|
--y: translateY(calc(var(--lift) * var(--ngp-toast-offset)));
|
|
136
|
-
height:
|
|
135
|
+
height: auto;
|
|
137
136
|
}
|
|
138
137
|
|
|
139
138
|
:host[data-swiping='true'] {
|
|
@@ -161,6 +160,71 @@ import { injectToastContext, NgpToast, NgpToastManager } from 'ng-primitives/toa
|
|
|
161
160
|
/* Fade out from 45px to 100px swipe */
|
|
162
161
|
opacity: calc(1 - clamp(0, (var(--ngp-toast-swipe-y, 0px) - 45) / 55, 1));
|
|
163
162
|
}
|
|
163
|
+
|
|
164
|
+
/* Truncate text only when toast is not front AND not expanded */
|
|
165
|
+
:host[data-front='false'][data-expanded='false'] .toast-title {
|
|
166
|
+
overflow: hidden;
|
|
167
|
+
text-overflow: ellipsis;
|
|
168
|
+
white-space: nowrap;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
:host[data-front='false'][data-expanded='false'] .toast-description {
|
|
172
|
+
overflow: hidden;
|
|
173
|
+
text-overflow: ellipsis;
|
|
174
|
+
white-space: nowrap;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
/* Angular animations based on position */
|
|
178
|
+
|
|
179
|
+
/* Bottom position animations */
|
|
180
|
+
:host[data-position-y='bottom'].toast-enter {
|
|
181
|
+
animation: toast-slide-in-bottom 400ms cubic-bezier(0.215, 0.61, 0.355, 1);
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
:host[data-position-y='bottom'].toast-leave {
|
|
185
|
+
opacity: 0;
|
|
186
|
+
transform: translateY(100%);
|
|
187
|
+
transition:
|
|
188
|
+
opacity 400ms cubic-bezier(0.215, 0.61, 0.355, 1),
|
|
189
|
+
transform 400ms cubic-bezier(0.215, 0.61, 0.355, 1);
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
/* Top position animations */
|
|
193
|
+
:host[data-position-y='top'].toast-enter {
|
|
194
|
+
animation: toast-slide-in-top 400ms cubic-bezier(0.215, 0.61, 0.355, 1);
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
:host[data-position-y='top'].toast-leave {
|
|
198
|
+
opacity: 0;
|
|
199
|
+
transform: translateY(-100%);
|
|
200
|
+
transition:
|
|
201
|
+
opacity 400ms cubic-bezier(0.215, 0.61, 0.355, 1),
|
|
202
|
+
transform 400ms cubic-bezier(0.215, 0.61, 0.355, 1);
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
/* Keyframes for bottom position */
|
|
206
|
+
@keyframes toast-slide-in-bottom {
|
|
207
|
+
from {
|
|
208
|
+
opacity: 0;
|
|
209
|
+
transform: translateY(100%);
|
|
210
|
+
}
|
|
211
|
+
to {
|
|
212
|
+
opacity: 1;
|
|
213
|
+
transform: translateY(0);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
/* Keyframes for top position */
|
|
218
|
+
@keyframes toast-slide-in-top {
|
|
219
|
+
from {
|
|
220
|
+
opacity: 0;
|
|
221
|
+
transform: translateY(-100%);
|
|
222
|
+
}
|
|
223
|
+
to {
|
|
224
|
+
opacity: 1;
|
|
225
|
+
transform: translateY(0);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
164
228
|
`,
|
|
165
229
|
})
|
|
166
230
|
export class Toast<%= componentSuffix %> {
|
package/toast/index.d.ts
CHANGED
package/toggle-group/index.d.ts
CHANGED
|
@@ -84,6 +84,10 @@ interface NgpToggleGroupState {
|
|
|
84
84
|
* Whether the toggle group is disabled.
|
|
85
85
|
*/
|
|
86
86
|
readonly disabled: WritableSignal<boolean>;
|
|
87
|
+
/**
|
|
88
|
+
* The orientation of the toggle group.
|
|
89
|
+
*/
|
|
90
|
+
readonly orientation: WritableSignal<NgpOrientation>;
|
|
87
91
|
/**
|
|
88
92
|
* Select a value in the toggle group.
|
|
89
93
|
*/
|
package/tooltip/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as ng_primitives_portal from 'ng-primitives/portal';
|
|
2
|
-
import { NgpOffset, NgpOverlayContent, NgpOffsetInput, NgpOverlay } from 'ng-primitives/portal';
|
|
2
|
+
import { NgpOffset, NgpShift, NgpOverlayContent, NgpOffsetInput, NgpShiftInput, NgpOverlay } from 'ng-primitives/portal';
|
|
3
3
|
export { injectOverlayContext as injectTooltipContext } from 'ng-primitives/portal';
|
|
4
4
|
import * as _angular_core from '@angular/core';
|
|
5
5
|
import { Provider, OnDestroy, Signal } from '@angular/core';
|
|
@@ -49,6 +49,12 @@ interface NgpTooltipConfig {
|
|
|
49
49
|
* @default true
|
|
50
50
|
*/
|
|
51
51
|
useTextContent: boolean;
|
|
52
|
+
/**
|
|
53
|
+
* Configure shift behavior to keep the tooltip in view.
|
|
54
|
+
* Can be a boolean to enable/disable, or an object with padding and limiter options.
|
|
55
|
+
* @default undefined (enabled by default in overlay)
|
|
56
|
+
*/
|
|
57
|
+
shift: NgpShift;
|
|
52
58
|
}
|
|
53
59
|
/**
|
|
54
60
|
* Provide the default Tooltip configuration
|
|
@@ -119,6 +125,12 @@ declare class NgpTooltipTrigger<T = null> implements OnDestroy {
|
|
|
119
125
|
* @default true
|
|
120
126
|
*/
|
|
121
127
|
readonly flip: _angular_core.InputSignalWithTransform<boolean, BooleanInput>;
|
|
128
|
+
/**
|
|
129
|
+
* Configure shift behavior to keep the tooltip in view.
|
|
130
|
+
* Can be a boolean to enable/disable, or an object with padding and limiter options.
|
|
131
|
+
* @default undefined (enabled by default in overlay)
|
|
132
|
+
*/
|
|
133
|
+
readonly shift: _angular_core.InputSignalWithTransform<NgpShift, NgpShiftInput>;
|
|
122
134
|
/**
|
|
123
135
|
* Define the container in which the tooltip should be attached.
|
|
124
136
|
* @default document.body
|
|
@@ -181,7 +193,7 @@ declare class NgpTooltipTrigger<T = null> implements OnDestroy {
|
|
|
181
193
|
*/
|
|
182
194
|
setTooltipId(id: string): void;
|
|
183
195
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgpTooltipTrigger<any>, never>;
|
|
184
|
-
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<NgpTooltipTrigger<any>, "[ngpTooltipTrigger]", ["ngpTooltipTrigger"], { "tooltip": { "alias": "ngpTooltipTrigger"; "required": false; "isSignal": true; }; "disabled": { "alias": "ngpTooltipTriggerDisabled"; "required": false; "isSignal": true; }; "placement": { "alias": "ngpTooltipTriggerPlacement"; "required": false; "isSignal": true; }; "offset": { "alias": "ngpTooltipTriggerOffset"; "required": false; "isSignal": true; }; "showDelay": { "alias": "ngpTooltipTriggerShowDelay"; "required": false; "isSignal": true; }; "hideDelay": { "alias": "ngpTooltipTriggerHideDelay"; "required": false; "isSignal": true; }; "flip": { "alias": "ngpTooltipTriggerFlip"; "required": false; "isSignal": true; }; "container": { "alias": "ngpTooltipTriggerContainer"; "required": false; "isSignal": true; }; "showOnOverflow": { "alias": "ngpTooltipTriggerShowOnOverflow"; "required": false; "isSignal": true; }; "context": { "alias": "ngpTooltipTriggerContext"; "required": false; "isSignal": true; }; "useTextContent": { "alias": "ngpTooltipTriggerUseTextContent"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
196
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<NgpTooltipTrigger<any>, "[ngpTooltipTrigger]", ["ngpTooltipTrigger"], { "tooltip": { "alias": "ngpTooltipTrigger"; "required": false; "isSignal": true; }; "disabled": { "alias": "ngpTooltipTriggerDisabled"; "required": false; "isSignal": true; }; "placement": { "alias": "ngpTooltipTriggerPlacement"; "required": false; "isSignal": true; }; "offset": { "alias": "ngpTooltipTriggerOffset"; "required": false; "isSignal": true; }; "showDelay": { "alias": "ngpTooltipTriggerShowDelay"; "required": false; "isSignal": true; }; "hideDelay": { "alias": "ngpTooltipTriggerHideDelay"; "required": false; "isSignal": true; }; "flip": { "alias": "ngpTooltipTriggerFlip"; "required": false; "isSignal": true; }; "shift": { "alias": "ngpTooltipTriggerShift"; "required": false; "isSignal": true; }; "container": { "alias": "ngpTooltipTriggerContainer"; "required": false; "isSignal": true; }; "showOnOverflow": { "alias": "ngpTooltipTriggerShowOnOverflow"; "required": false; "isSignal": true; }; "context": { "alias": "ngpTooltipTriggerContext"; "required": false; "isSignal": true; }; "useTextContent": { "alias": "ngpTooltipTriggerUseTextContent"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
185
197
|
}
|
|
186
198
|
type NgpTooltipPlacement = 'top' | 'right' | 'bottom' | 'left' | 'top-start' | 'top-end' | 'right-start' | 'right-end' | 'bottom-start' | 'bottom-end' | 'left-start' | 'left-end';
|
|
187
199
|
|