ng-primitives 0.35.0 → 0.37.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.
Files changed (138) hide show
  1. package/a11y/visually-hidden/visually-hidden-state.d.ts +1 -1
  2. package/accordion/accordion/accordion-state.d.ts +1 -1
  3. package/accordion/accordion-item/accordion-item-state.d.ts +1 -1
  4. package/accordion/accordion-trigger/accordion-trigger.d.ts +4 -0
  5. package/avatar/avatar/avatar-state.d.ts +1 -1
  6. package/button/button/button-state.d.ts +1 -1
  7. package/checkbox/checkbox/checkbox-state.d.ts +1 -1
  8. package/date-picker/date-picker/date-picker-state.d.ts +1 -1
  9. package/dialog/dialog/dialog-state.d.ts +1 -1
  10. package/dialog/dialog-overlay/dialog-overlay.d.ts +7 -1
  11. package/dialog/dialog-trigger/dialog-trigger.d.ts +0 -2
  12. package/example-theme/index.css +2 -0
  13. package/fesm2022/ng-primitives-a11y.mjs +3 -3
  14. package/fesm2022/ng-primitives-accordion.mjs +18 -13
  15. package/fesm2022/ng-primitives-accordion.mjs.map +1 -1
  16. package/fesm2022/ng-primitives-autofill.mjs +4 -4
  17. package/fesm2022/ng-primitives-avatar.mjs +9 -9
  18. package/fesm2022/ng-primitives-button.mjs +3 -3
  19. package/fesm2022/ng-primitives-checkbox.mjs +4 -4
  20. package/fesm2022/ng-primitives-common.mjs +3 -3
  21. package/fesm2022/ng-primitives-date-picker.mjs +27 -27
  22. package/fesm2022/ng-primitives-dialog.mjs +30 -22
  23. package/fesm2022/ng-primitives-dialog.mjs.map +1 -1
  24. package/fesm2022/ng-primitives-file-upload.mjs +18 -12
  25. package/fesm2022/ng-primitives-file-upload.mjs.map +1 -1
  26. package/fesm2022/ng-primitives-focus-trap.mjs +31 -8
  27. package/fesm2022/ng-primitives-focus-trap.mjs.map +1 -1
  28. package/fesm2022/ng-primitives-form-field.mjs +15 -15
  29. package/fesm2022/ng-primitives-input.mjs +3 -3
  30. package/fesm2022/ng-primitives-interactions.mjs +15 -15
  31. package/fesm2022/ng-primitives-internal.mjs +66 -70
  32. package/fesm2022/ng-primitives-internal.mjs.map +1 -1
  33. package/fesm2022/ng-primitives-listbox.mjs +12 -12
  34. package/fesm2022/ng-primitives-menu.mjs +13 -13
  35. package/fesm2022/ng-primitives-meter.mjs +164 -0
  36. package/fesm2022/ng-primitives-meter.mjs.map +1 -0
  37. package/fesm2022/ng-primitives-pagination.mjs +19 -19
  38. package/fesm2022/ng-primitives-popover.mjs +114 -68
  39. package/fesm2022/ng-primitives-popover.mjs.map +1 -1
  40. package/fesm2022/ng-primitives-progress.mjs +6 -6
  41. package/fesm2022/ng-primitives-radio.mjs +13 -9
  42. package/fesm2022/ng-primitives-radio.mjs.map +1 -1
  43. package/fesm2022/ng-primitives-resize.mjs +3 -3
  44. package/fesm2022/ng-primitives-roving-focus.mjs +6 -6
  45. package/fesm2022/ng-primitives-search.mjs +7 -7
  46. package/fesm2022/ng-primitives-select.mjs +3 -3
  47. package/fesm2022/ng-primitives-separator.mjs +3 -3
  48. package/fesm2022/ng-primitives-slider.mjs +12 -12
  49. package/fesm2022/ng-primitives-state.mjs +10 -3
  50. package/fesm2022/ng-primitives-state.mjs.map +1 -1
  51. package/fesm2022/ng-primitives-switch.mjs +6 -6
  52. package/fesm2022/ng-primitives-tabs.mjs +35 -48
  53. package/fesm2022/ng-primitives-tabs.mjs.map +1 -1
  54. package/fesm2022/ng-primitives-textarea.mjs +3 -3
  55. package/fesm2022/ng-primitives-toast.mjs +3 -3
  56. package/fesm2022/ng-primitives-toggle-group.mjs +9 -14
  57. package/fesm2022/ng-primitives-toggle-group.mjs.map +1 -1
  58. package/fesm2022/ng-primitives-toggle.mjs +4 -4
  59. package/fesm2022/ng-primitives-toolbar.mjs +38 -14
  60. package/fesm2022/ng-primitives-toolbar.mjs.map +1 -1
  61. package/fesm2022/ng-primitives-tooltip.mjs +108 -51
  62. package/fesm2022/ng-primitives-tooltip.mjs.map +1 -1
  63. package/fesm2022/ng-primitives-utils.mjs +18 -0
  64. package/fesm2022/ng-primitives-utils.mjs.map +1 -1
  65. package/file-upload/file-dropzone/file-dropzone-state.d.ts +2 -2
  66. package/file-upload/file-dropzone/file-dropzone.d.ts +3 -2
  67. package/file-upload/file-upload/file-upload-state.d.ts +2 -2
  68. package/file-upload/file-upload/file-upload.d.ts +3 -2
  69. package/focus-trap/focus-trap/focus-trap-state.d.ts +41 -0
  70. package/focus-trap/focus-trap/focus-trap.d.ts +4 -0
  71. package/focus-trap/index.d.ts +1 -0
  72. package/form-field/form-control/form-control-state.d.ts +24 -24
  73. package/form-field/form-field/form-field-state.d.ts +1 -1
  74. package/input/input/input-state.d.ts +1 -1
  75. package/internal/exit-animation/exit-animation-manager.d.ts +17 -0
  76. package/internal/exit-animation/exit-animation.d.ts +4 -17
  77. package/internal/index.d.ts +2 -1
  78. package/listbox/listbox/listbox-state.d.ts +4 -4
  79. package/meter/README.md +3 -0
  80. package/meter/index.d.ts +6 -0
  81. package/meter/meter/meter-state.d.ts +25 -0
  82. package/meter/meter/meter.d.ts +27 -0
  83. package/meter/meter-indicator/meter-indicator.d.ts +15 -0
  84. package/meter/meter-label/meter-label.d.ts +18 -0
  85. package/meter/meter-track/meter-track.d.ts +5 -0
  86. package/meter/meter-value/meter-value.d.ts +5 -0
  87. package/package.json +13 -9
  88. package/pagination/pagination/pagination-state.d.ts +3 -3
  89. package/pagination/pagination-first/pagination-first.d.ts +2 -2
  90. package/pagination/pagination-next/pagination-next.d.ts +2 -2
  91. package/pagination/pagination-previous/pagination-previous.d.ts +2 -2
  92. package/popover/index.d.ts +1 -0
  93. package/popover/popover/popover-token.d.ts +10 -0
  94. package/popover/popover/popover.d.ts +34 -3
  95. package/popover/popover-trigger/popover-trigger-state.d.ts +5 -3
  96. package/popover/popover-trigger/popover-trigger.d.ts +26 -18
  97. package/progress/progress/progress-state.d.ts +3 -3
  98. package/progress/progress-indicator/progress-indicator.d.ts +2 -2
  99. package/radio/radio-group/radio-group-state.d.ts +1 -1
  100. package/radio/radio-item/radio-item-state.d.ts +1 -1
  101. package/roving-focus/roving-focus-group/roving-focus-group-state.d.ts +7 -7
  102. package/schematics/ng-generate/schema.d.ts +4 -1
  103. package/schematics/ng-generate/schema.json +4 -1
  104. package/schematics/ng-generate/templates/meter/meter.__fileSuffix@dasherize__.ts.template +78 -0
  105. package/schematics/ng-generate/templates/pagination/pagination.__fileSuffix@dasherize__.ts.template +11 -11
  106. package/schematics/ng-generate/templates/slider/slider.__fileSuffix@dasherize__.ts.template +8 -3
  107. package/schematics/ng-generate/templates/toolbar/toolbar-button.__fileSuffix@dasherize__.ts.template +58 -0
  108. package/schematics/ng-generate/templates/toolbar/toolbar.__fileSuffix@dasherize__.ts.template +37 -0
  109. package/schematics/ng-generate/templates/tooltip/tooltip-trigger.__fileSuffix@dasherize__.ts.template +35 -0
  110. package/schematics/ng-generate/templates/tooltip/tooltip.__fileSuffix@dasherize__.ts.template +60 -0
  111. package/search/search/search-state.d.ts +1 -1
  112. package/select/select/select-state.d.ts +1 -1
  113. package/slider/slider/slider-state.d.ts +5 -5
  114. package/slider/slider-range/slider-range.d.ts +4 -4
  115. package/slider/slider-thumb/slider-thumb.d.ts +4 -4
  116. package/slider/slider-track/slider-track.d.ts +4 -4
  117. package/state/index.d.ts +7 -1
  118. package/switch/switch/switch-state.d.ts +1 -1
  119. package/tabs/index.d.ts +1 -2
  120. package/tabs/tab-button/tab-button.d.ts +9 -10
  121. package/tabs/tab-list/tab-list.d.ts +6 -7
  122. package/tabs/tab-panel/tab-panel.d.ts +11 -9
  123. package/tabs/tabset/tabset-state.d.ts +7 -8
  124. package/tabs/tabset/tabset.d.ts +3 -4
  125. package/textarea/textarea/textarea-state.d.ts +1 -1
  126. package/toggle/toggle/toggle-state.d.ts +1 -1
  127. package/toggle-group/toggle-group/toggle-group-state.d.ts +7 -7
  128. package/toggle-group/toggle-group/toggle-group.d.ts +1 -1
  129. package/toggle-group/toggle-group-item/toggle-group-item-state.d.ts +13 -13
  130. package/toolbar/index.d.ts +1 -0
  131. package/toolbar/toolbar/toolbar-state.d.ts +39 -0
  132. package/toolbar/toolbar/toolbar.d.ts +10 -1
  133. package/tooltip/index.d.ts +1 -0
  134. package/tooltip/tooltip/tooltip-token.d.ts +10 -0
  135. package/tooltip/tooltip/tooltip.d.ts +2 -1
  136. package/tooltip/tooltip-trigger/tooltip-trigger-state.d.ts +3 -3
  137. package/tooltip/tooltip-trigger/tooltip-trigger.d.ts +44 -18
  138. package/tabs/tabset/tabset-token.d.ts +0 -11
@@ -1,17 +1,21 @@
1
1
  import { FocusOrigin } from '@angular/cdk/a11y';
2
2
  import { BooleanInput, NumberInput } from '@angular/cdk/coercion';
3
- import { OnDestroy, TemplateRef } from '@angular/core';
3
+ import { ComponentRef, EmbeddedViewRef, OnDestroy, TemplateRef, Type } from '@angular/core';
4
4
  import { Placement } from '@floating-ui/dom';
5
5
  import type { NgpPopover } from '../popover/popover';
6
6
  import * as i0 from "@angular/core";
7
7
  /**
8
8
  * Apply the `ngpPopoverTrigger` directive to an element that triggers the popover to show.
9
9
  */
10
- export declare class NgpPopoverTrigger implements OnDestroy {
10
+ export declare class NgpPopoverTrigger<T = null> implements OnDestroy {
11
11
  /**
12
12
  * Access the trigger element
13
13
  */
14
14
  private readonly trigger;
15
+ /**
16
+ * Access the exit animation state.
17
+ */
18
+ private readonly exitAnimationState;
15
19
  /**
16
20
  * Inject the parent popover trigger if available.
17
21
  */
@@ -47,16 +51,7 @@ export declare class NgpPopoverTrigger implements OnDestroy {
47
51
  /**
48
52
  * Access the popover template ref.
49
53
  */
50
- readonly popover: import("@angular/core").InputSignal<TemplateRef<void>>;
51
- /**
52
- * The open state of the popover.
53
- * @default false
54
- */
55
- readonly open: import("@angular/core").InputSignalWithTransform<boolean, BooleanInput>;
56
- /**
57
- * Emit when the open state changes.
58
- */
59
- readonly openChange: import("@angular/core").OutputEmitterRef<boolean>;
54
+ readonly popover: import("@angular/core").InputSignal<NgpPopoverContent<T> | null>;
60
55
  /**
61
56
  * Define if the trigger should be disabled.
62
57
  * @default false
@@ -107,10 +102,19 @@ export declare class NgpPopoverTrigger implements OnDestroy {
107
102
  * @default 'reposition'
108
103
  */
109
104
  readonly scrollBehavior: import("@angular/core").InputSignal<"reposition" | "block">;
105
+ /**
106
+ * Provide context to the popover.
107
+ * @default null
108
+ */
109
+ readonly context: import("@angular/core").InputSignal<T | null>;
110
110
  /**
111
111
  * Store the popover view ref.
112
112
  */
113
- private viewRef;
113
+ protected readonly viewRef: import("@angular/core").WritableSignal<ComponentRef<unknown> | EmbeddedViewRef<void> | null>;
114
+ /**
115
+ * Determines if the popover is open.
116
+ */
117
+ readonly open: import("@angular/core").Signal<boolean>;
114
118
  /**
115
119
  * Derive the popover middleware from the provided configuration.
116
120
  */
@@ -150,7 +154,7 @@ export declare class NgpPopoverTrigger implements OnDestroy {
150
154
  * @internal
151
155
  * Register any child popover to the stack.
152
156
  */
153
- readonly stack: NgpPopoverTrigger[];
157
+ readonly stack: NgpPopoverTrigger<any>[];
154
158
  /**
155
159
  * @internal
156
160
  * The timeout to open the popover.
@@ -164,12 +168,11 @@ export declare class NgpPopoverTrigger implements OnDestroy {
164
168
  /**
165
169
  * The popover trigger state.
166
170
  */
167
- protected readonly state: import("ng-primitives/state").CreatedState<NgpPopoverTrigger>;
171
+ readonly state: import("ng-primitives/state").CreatedState<NgpPopoverTrigger<T>>;
168
172
  constructor();
169
173
  ngOnDestroy(): void;
170
174
  protected toggleOpenState(event: MouseEvent): void;
171
175
  /**
172
- * @internal
173
176
  * Show the popover.
174
177
  */
175
178
  show(origin: FocusOrigin): void;
@@ -192,6 +195,11 @@ export declare class NgpPopoverTrigger implements OnDestroy {
192
195
  * @internal
193
196
  */
194
197
  setPopover(instance: NgpPopover): void;
195
- static ɵfac: i0.ɵɵFactoryDeclaration<NgpPopoverTrigger, never>;
196
- static ɵdir: i0.ɵɵDirectiveDeclaration<NgpPopoverTrigger, "[ngpPopoverTrigger]", ["ngpPopoverTrigger"], { "popover": { "alias": "ngpPopoverTrigger"; "required": true; "isSignal": true; }; "open": { "alias": "ngpPopoverTriggerOpen"; "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; }; }, { "openChange": "ngpPopoverTriggerOpenChange"; }, never, never, true, never>;
198
+ static ɵfac: i0.ɵɵFactoryDeclaration<NgpPopoverTrigger<any>, never>;
199
+ static ɵdir: i0.ɵɵ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; }; }, {}, never, never, true, never>;
197
200
  }
201
+ type NgpPopoverTemplateContext<T> = {
202
+ $implicit: T;
203
+ };
204
+ type NgpPopoverContent<T> = TemplateRef<NgpPopoverTemplateContext<T>> | Type<unknown>;
205
+ export {};
@@ -6,13 +6,13 @@ export declare const NgpProgressStateToken: import("@angular/core").InjectionTok
6
6
  /**
7
7
  * Provides the Progress state.
8
8
  */
9
- export declare const provideProgressState: () => import("@angular/core").FactoryProvider;
9
+ export declare const provideProgressState: (options?: import("ng-primitives/state").CreateStateProviderOptions) => import("@angular/core").FactoryProvider;
10
10
  /**
11
11
  * Injects the Progress state.
12
12
  */
13
13
  export declare const injectProgressState: <U = {
14
- readonly value: import("@angular/core").InputSignalWithTransform<number, import("@angular/cdk/coercion").NumberInput>;
15
- readonly max: import("@angular/core").InputSignalWithTransform<number, import("@angular/cdk/coercion").NumberInput>;
14
+ readonly value: import("@angular/core").InputSignalWithTransform<number, import("@angular/cdk/number-property.d-BzBQchZ2").NumberInput>;
15
+ readonly max: import("@angular/core").InputSignalWithTransform<number, import("@angular/cdk/number-property.d-BzBQchZ2").NumberInput>;
16
16
  readonly valueLabel: import("@angular/core").InputSignal<import("./progress").NgpProgressValueLabelFn>;
17
17
  readonly dataState: import("@angular/core").Signal<"indeterminate" | "complete" | "loading">;
18
18
  readonly label: import("@angular/core").Signal<string>;
@@ -8,8 +8,8 @@ export declare class NgpProgressIndicator {
8
8
  * Access the progress state.
9
9
  */
10
10
  protected readonly state: import("@angular/core").Signal<import("ng-primitives/state").State<{
11
- readonly value: import("@angular/core").InputSignalWithTransform<number, import("@angular/cdk/coercion").NumberInput>;
12
- readonly max: import("@angular/core").InputSignalWithTransform<number, import("@angular/cdk/coercion").NumberInput>;
11
+ readonly value: import("@angular/core").InputSignalWithTransform<number, import("@angular/cdk/number-property.d-BzBQchZ2").NumberInput>;
12
+ readonly max: import("@angular/core").InputSignalWithTransform<number, import("@angular/cdk/number-property.d-BzBQchZ2").NumberInput>;
13
13
  readonly valueLabel: import("@angular/core").InputSignal<import("ng-primitives/progress").NgpProgressValueLabelFn>;
14
14
  readonly dataState: import("@angular/core").Signal<"indeterminate" | "complete" | "loading">;
15
15
  readonly label: import("@angular/core").Signal<string>;
@@ -7,7 +7,7 @@ export declare const NgpRadioGroupStateToken: import("@angular/core").InjectionT
7
7
  /**
8
8
  * Provides the RadioGroup state.
9
9
  */
10
- export declare const provideRadioGroupState: () => import("@angular/core").FactoryProvider;
10
+ export declare const provideRadioGroupState: (options?: import("ng-primitives/state").CreateStateProviderOptions) => import("@angular/core").FactoryProvider;
11
11
  /**
12
12
  * Injects the RadioGroup state.
13
13
  */
@@ -7,7 +7,7 @@ export declare const NgpRadioItemStateToken: import("@angular/core").InjectionTo
7
7
  /**
8
8
  * Provides the RadioItem state.
9
9
  */
10
- export declare const provideRadioItemState: () => import("@angular/core").FactoryProvider;
10
+ export declare const provideRadioItemState: (options?: import("ng-primitives/state").CreateStateProviderOptions) => import("@angular/core").FactoryProvider;
11
11
  /**
12
12
  * Injects the RadioItem state.
13
13
  */
@@ -6,12 +6,12 @@ export declare const NgpRovingFocusGroupStateToken: import("@angular/core").Inje
6
6
  /**
7
7
  * Provides the RovingFocusGroup state.
8
8
  */
9
- export declare const provideRovingFocusGroupState: () => import("@angular/core").FactoryProvider;
9
+ export declare const provideRovingFocusGroupState: (options?: import("ng-primitives/state").CreateStateProviderOptions) => import("@angular/core").FactoryProvider;
10
10
  /**
11
11
  * Injects the RovingFocusGroup state.
12
12
  */
13
13
  export declare const injectRovingFocusGroupState: <U = {
14
- readonly directionality: import("@angular/cdk/bidi").Directionality;
14
+ readonly directionality: import("@angular/cdk/bidi-module.d-BSI86Zrk").Directionality;
15
15
  readonly orientation: import("@angular/core").InputSignal<import("ng-primitives/common").NgpOrientation>;
16
16
  readonly wrap: import("@angular/core").InputSignalWithTransform<boolean, import("@angular/cdk/coercion").BooleanInput>;
17
17
  readonly homeEnd: import("@angular/core").InputSignalWithTransform<boolean, import("@angular/cdk/coercion").BooleanInput>;
@@ -22,11 +22,11 @@ export declare const injectRovingFocusGroupState: <U = {
22
22
  readonly state: import("ng-primitives/state").CreatedState<NgpRovingFocusGroup>;
23
23
  register: (item: import("ng-primitives/roving-focus").NgpRovingFocusItem) => void;
24
24
  unregister: (item: import("ng-primitives/roving-focus").NgpRovingFocusItem) => void;
25
- setActiveItem: (item: import("ng-primitives/roving-focus").NgpRovingFocusItem | null, origin?: import("@angular/cdk/a11y").FocusOrigin) => void;
26
- activateFirstItem: (origin: import("@angular/cdk/a11y").FocusOrigin) => void;
27
- activateLastItem: (origin: import("@angular/cdk/a11y").FocusOrigin) => void;
28
- activateNextItem: (origin: import("@angular/cdk/a11y").FocusOrigin) => void;
29
- activatePreviousItem: (origin: import("@angular/cdk/a11y").FocusOrigin) => void;
25
+ setActiveItem: (item: import("ng-primitives/roving-focus").NgpRovingFocusItem | null, origin?: import("@angular/cdk/focus-monitor.d-BBkiOKUH").FocusOrigin) => void;
26
+ activateFirstItem: (origin: import("@angular/cdk/focus-monitor.d-BBkiOKUH").FocusOrigin) => void;
27
+ activateLastItem: (origin: import("@angular/cdk/focus-monitor.d-BBkiOKUH").FocusOrigin) => void;
28
+ activateNextItem: (origin: import("@angular/cdk/focus-monitor.d-BBkiOKUH").FocusOrigin) => void;
29
+ activatePreviousItem: (origin: import("@angular/cdk/focus-monitor.d-BBkiOKUH").FocusOrigin) => void;
30
30
  onKeydown: (event: KeyboardEvent) => void;
31
31
  }>(injectOptions?: import("@angular/core").InjectOptions) => import("@angular/core").Signal<import("ng-primitives/state").State<U>>;
32
32
  /**
@@ -22,7 +22,10 @@ export interface AngularPrimitivesComponentSchema {
22
22
  | 'dialog'
23
23
  | 'file-upload'
24
24
  | 'search'
25
- | 'toast';
25
+ | 'toast'
26
+ | 'toolbar'
27
+ | 'tooltip'
28
+ | 'meter';
26
29
 
27
30
  /**
28
31
  * The path where the component files should be created, relative to the current workspace.
@@ -20,6 +20,7 @@
20
20
  "form-field",
21
21
  "input",
22
22
  "listbox",
23
+ "meter",
23
24
  "pagination",
24
25
  "progress",
25
26
  "radio",
@@ -31,7 +32,9 @@
31
32
  "textarea",
32
33
  "toast",
33
34
  "toggle",
34
- "toggle-group"
35
+ "toggle-group",
36
+ "toolbar",
37
+ "tooltip"
35
38
  ],
36
39
  "x-prompt": "What primitive would you like to generate?",
37
40
  "$default": {
@@ -0,0 +1,78 @@
1
+ import { NumberInput } from '@angular/cdk/coercion';
2
+ import { Component, input, numberAttribute } from '@angular/core';
3
+ import {
4
+ NgpMeter,
5
+ NgpMeterIndicator,
6
+ NgpMeterLabel,
7
+ NgpMeterTrack,
8
+ NgpMeterValue,
9
+ } from 'ng-primitives/meter';
10
+
11
+ @Component({
12
+ selector: '<%= prefix %>-meter',
13
+ hostDirectives: [
14
+ { directive: NgpMeter, inputs: ['ngpMeterValue:value', 'ngpMeterMin:min', 'ngpMeterMax:max'] },
15
+ ],
16
+ imports: [NgpMeterIndicator, NgpMeterLabel, NgpMeterValue, NgpMeterTrack],
17
+ template: `
18
+ <span ngpMeterLabel>{{ label() }}</span>
19
+ <span ngpMeterValue>{{ value() }}%</span>
20
+
21
+ <div ngpMeterTrack>
22
+ <div ngpMeterIndicator></div>
23
+ </div>
24
+ `,
25
+ styles: `
26
+ /* These styles rely on CSS variables that can be imported from ng-primitives/example-theme/index.css in your global styles */
27
+
28
+ :host {
29
+ display: grid;
30
+ grid-template-columns: 1fr 1fr;
31
+ grid-row-gap: 0.5rem;
32
+ width: 200px;
33
+ box-sizing: border-box;
34
+ padding: 0.5rem;
35
+ }
36
+
37
+ [ngpMeterLabel] {
38
+ color: var(--ngp-text-emphasis);
39
+ font-size: 14px;
40
+ font-weight: 600;
41
+ }
42
+
43
+ [ngpMeterValue] {
44
+ color: var(--ngp-text-secondary);
45
+ font-size: 14px;
46
+ font-weight: 500;
47
+ text-align: right;
48
+ grid-column-start: 2;
49
+ text-align: end;
50
+ }
51
+
52
+ [ngpMeterTrack] {
53
+ grid-column: 1 / 3;
54
+ overflow: hidden;
55
+ background-color: var(--ngp-background);
56
+ box-shadow: var(--ngp-shadow-border);
57
+ border-radius: 4px;
58
+ height: 8px;
59
+ }
60
+
61
+ [ngpMeterIndicator] {
62
+ background-color: var(--ngp-background-success);
63
+ height: 100%;
64
+ transition: width 0.2s ease-in-out;
65
+ inset-inline-start: 0px;
66
+ border-radius: 4px;
67
+ }
68
+ `,
69
+ })
70
+ export class Meter<%= componentSuffix %> {
71
+ /** The value of the meter. */
72
+ readonly value = input<number, NumberInput>(0, {
73
+ transform: numberAttribute,
74
+ });
75
+
76
+ /** The label of the meter. */
77
+ readonly label = input.required<string>();
78
+ }
@@ -51,39 +51,39 @@ import { ChangeFn, provideValueAccessor, TouchedFn } from 'ng-primitives/utils';
51
51
  template: `
52
52
  <ul>
53
53
  <li>
54
- <a ngpPaginationFirst aria-label="First Page">
54
+ <button ngpPaginationFirst aria-label="First Page">
55
55
  <ng-icon name="heroChevronDoubleLeft" />
56
- </a>
56
+ </button>
57
57
  </li>
58
58
 
59
59
  <li>
60
- <a ngpPaginationPrevious aria-label="Previous Page">
60
+ <button ngpPaginationPrevious aria-label="Previous Page">
61
61
  <ng-icon name="heroChevronLeft" />
62
- </a>
62
+ </button>
63
63
  </li>
64
64
 
65
65
  @for (page of pages(); track page) {
66
66
  <li>
67
- <a
67
+ <button
68
68
  [ngpPaginationButtonPage]="page"
69
69
  [attr.aria-label]="'Page ' + page"
70
70
  ngpPaginationButton
71
71
  >
72
72
  {{ page }}
73
- </a>
73
+ </button>
74
74
  </li>
75
75
  }
76
76
 
77
77
  <li>
78
- <a ngpPaginationNext aria-label="Next Page">
78
+ <button ngpPaginationNext aria-label="Next Page">
79
79
  <ng-icon name="heroChevronRight" />
80
- </a>
80
+ </button>
81
81
  </li>
82
82
 
83
83
  <li>
84
- <a ngpPaginationLast aria-label="Last Page">
84
+ <button ngpPaginationLast aria-label="Last Page">
85
85
  <ng-icon name="heroChevronDoubleRight" />
86
- </a>
86
+ </button>
87
87
  </li>
88
88
  </ul>
89
89
  `,
@@ -116,7 +116,7 @@ import { ChangeFn, provideValueAccessor, TouchedFn } from 'ng-primitives/utils';
116
116
  background-color: var(--ngp-background);
117
117
  box-shadow: var(--ngp-button-shadow);
118
118
  cursor: pointer;
119
- transition: all 0.2s;
119
+ transition: background-color 0.2s;
120
120
 
121
121
  &[data-hover]:not([data-disabled]):not([data-selected]) {
122
122
  background-color: var(--ngp-background-hover);
@@ -1,4 +1,4 @@
1
- import { Component } from '@angular/core';
1
+ import { Component, input } from '@angular/core';
2
2
  import { ControlValueAccessor } from '@angular/forms';
3
3
  import {
4
4
  injectSliderState,
@@ -24,12 +24,12 @@ import { ChangeFn, provideValueAccessor, TouchedFn } from 'ng-primitives/utils';
24
24
  },
25
25
  ],
26
26
  imports: [NgpSliderTrack, NgpSliderRange, NgpSliderThumb],
27
- viewProviders: [provideValueAccessor(Slider<%= componentSuffix %>)],
27
+ providers: [provideValueAccessor(Slider<%= componentSuffix %>)],
28
28
  template: `
29
29
  <div ngpSliderTrack>
30
30
  <div ngpSliderRange></div>
31
31
  </div>
32
- <div ngpSliderThumb></div>
32
+ <div [ariaLabel]="ariaLabel()" ngpSliderThumb></div>
33
33
  `,
34
34
  styles: `
35
35
  /* These styles rely on CSS variables that can be imported from ng-primitives/example-theme/index.css in your global styles */
@@ -84,6 +84,11 @@ export class Slider<%= componentSuffix %> implements ControlValueAccessor {
84
84
  /** Access the slider state */
85
85
  private readonly state = injectSliderState();
86
86
 
87
+ /** Forward the aria-label to the thumb */
88
+ readonly ariaLabel = input<string | null>(null, {
89
+ alias: 'aria-label',
90
+ });
91
+
87
92
  /**
88
93
  * The onChange callback function.
89
94
  */
@@ -0,0 +1,58 @@
1
+ import { Component } from '@angular/core';
2
+ import { NgpButton } from 'ng-primitives/button';
3
+ import { NgpRovingFocusItem } from 'ng-primitives/roving-focus';
4
+
5
+ @Component({
6
+ selector: 'button[<%= prefix %>-toolbar-button]',
7
+ hostDirectives: [
8
+ { directive: NgpButton, inputs: ['disabled'] },
9
+ {
10
+ directive: NgpRovingFocusItem,
11
+ inputs: ['ngpRovingFocusItemDisabled:disabled'],
12
+ },
13
+ ],
14
+ host: {
15
+ type: 'button',
16
+ },
17
+ template: `
18
+ <ng-content />
19
+ `,
20
+ styles: `
21
+ /* These styles rely on CSS variables that can be imported from ng-primitives/example-theme/index.css in your global styles */
22
+
23
+ :host {
24
+ display: flex;
25
+ width: 2rem;
26
+ height: 2rem;
27
+ align-items: center;
28
+ justify-content: center;
29
+ border-radius: 0.25rem;
30
+ border: 1px solid transparent;
31
+ background: transparent;
32
+ outline: none;
33
+ transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1);
34
+ box-sizing: border-box;
35
+ color: var(--ngp-text-primary);
36
+ cursor: pointer;
37
+ }
38
+
39
+ :host[data-hover] {
40
+ background-color: var(--ngp-background-hover);
41
+ border-color: var(--ngp-border);
42
+ }
43
+
44
+ :host[data-focus-visible] {
45
+ outline: 2px solid var(--ngp-focus-ring);
46
+ }
47
+
48
+ :host[data-press] {
49
+ background-color: var(--ngp-background-active);
50
+ }
51
+
52
+ :host[data-selected] {
53
+ background-color: var(--ngp-background-inverse);
54
+ color: var(--ngp-text-inverse);
55
+ }
56
+ `,
57
+ })
58
+ export class ToolbarButton<%= componentSuffix %> {}
@@ -0,0 +1,37 @@
1
+ import { Component } from '@angular/core';
2
+ import { injectToolbarState, NgpToolbar } from 'ng-primitives/toolbar';
3
+
4
+ @Component({
5
+ selector: '<%= prefix %>-toolbar',
6
+ hostDirectives: [{ directive: NgpToolbar, inputs: ['ngpToolbarOrientation:orientation'] }],
7
+ template: `
8
+ <ng-content />
9
+ `,
10
+ styles: `
11
+ /* These styles rely on CSS variables that can be imported from ng-primitives/example-theme/index.css in your global styles */
12
+
13
+ :host {
14
+ display: flex;
15
+ column-gap: 0.25rem;
16
+ align-items: center;
17
+ border-radius: 0.375rem;
18
+ background-color: var(--ngp-background);
19
+ box-shadow: var(--ngp-button-shadow);
20
+ padding: 0.25rem;
21
+ }
22
+
23
+ :host[data-orientation='vertical'] {
24
+ flex-direction: column;
25
+ row-gap: 0.25rem;
26
+ }
27
+ `,
28
+ })
29
+ export class Toolbar<%= componentSuffix %> {
30
+ /** Access the toolbar state */
31
+ private readonly toolbar = injectToolbarState();
32
+
33
+ constructor() {
34
+ // default to horizontal orientation
35
+ this.toolbar().orientation.set('horizontal');
36
+ }
37
+ }
@@ -0,0 +1,35 @@
1
+ import { Directive, input } from '@angular/core';
2
+ import { injectTooltipTriggerState, NgpTooltipTrigger } from 'ng-primitives/tooltip';
3
+ import { Tooltip } from './tooltip';
4
+
5
+ @Directive({
6
+ selector: '[appTooltipTrigger]',
7
+ hostDirectives: [
8
+ {
9
+ directive: NgpTooltipTrigger,
10
+ inputs: [
11
+ 'ngpTooltipTriggerPlacement:appTooltipTriggerPlacement',
12
+ 'ngpTooltipTriggerDisabled:appTooltipTriggerDisabled',
13
+ 'ngpTooltipTriggerOffset:appTooltipTriggerOffset',
14
+ 'ngpTooltipTriggerShowDelay:appTooltipTriggerShowDelay',
15
+ 'ngpTooltipTriggerHideDelay:appTooltipTriggerHideDelay',
16
+ 'ngpTooltipTriggerFlip:appTooltipTriggerFlip',
17
+ 'ngpTooltipTriggerContainer:appTooltipTriggerContainer',
18
+ 'ngpTooltipTriggerContext:appTooltipTrigger',
19
+ ],
20
+ },
21
+ ],
22
+ })
23
+ export class TooltipTrigger {
24
+ /** Access the tooltip trigger */
25
+ private readonly tooltipTrigger = injectTooltipTriggerState();
26
+
27
+ /** Define the content of the tooltip */
28
+ readonly content = input.required<string>({
29
+ alias: 'appTooltipTrigger',
30
+ });
31
+
32
+ constructor() {
33
+ this.tooltipTrigger().tooltip.set(Tooltip);
34
+ }
35
+ }
@@ -0,0 +1,60 @@
1
+ import { Component } from '@angular/core';
2
+ import { injectTooltipContext, NgpTooltip } from 'ng-primitives/tooltip';
3
+
4
+ @Component({
5
+ selector: '<%= prefix %>-tooltip',
6
+ hostDirectives: [NgpTooltip],
7
+ template: `
8
+ {{ content }}
9
+ `,
10
+ styles: `
11
+ /* These styles rely on CSS variables that can be imported from ng-primitives/example-theme/index.css in your global styles */
12
+
13
+ :host {
14
+ position: absolute;
15
+ max-width: 16rem;
16
+ border-radius: 0.5rem;
17
+ background-color: var(--ngp-background-inverse);
18
+ padding: 0.5rem 0.75rem;
19
+ border: none;
20
+ font-size: 0.75rem;
21
+ font-weight: 500;
22
+ color: var(--ngp-text-inverse);
23
+ transform-origin: var(--ngp-tooltip-transform-origin);
24
+ }
25
+
26
+ :host[data-enter] {
27
+ animation: tooltip-show 200ms ease-in-out;
28
+ }
29
+
30
+ :host[data-exit] {
31
+ animation: tooltip-hide 200ms ease-in-out;
32
+ }
33
+
34
+ @keyframes tooltip-show {
35
+ 0% {
36
+ opacity: 0;
37
+ transform: scale(0.9);
38
+ }
39
+ 100% {
40
+ opacity: 1;
41
+ transform: scale(1);
42
+ }
43
+ }
44
+
45
+ @keyframes tooltip-hide {
46
+ 0% {
47
+ opacity: 1;
48
+ transform: scale(1);
49
+ }
50
+ 100% {
51
+ opacity: 0;
52
+ transform: scale(0.9);
53
+ }
54
+ }
55
+ `,
56
+ })
57
+ export class Tooltip<%= componentSuffix %> {
58
+ /** Access the tooltip context where the content is stored. */
59
+ protected readonly content = injectTooltipContext<string>();
60
+ }
@@ -6,7 +6,7 @@ export declare const NgpSearchStateToken: import("@angular/core").InjectionToken
6
6
  /**
7
7
  * Provides the Search state.
8
8
  */
9
- export declare const provideSearchState: () => import("@angular/core").FactoryProvider;
9
+ export declare const provideSearchState: (options?: import("ng-primitives/state").CreateStateProviderOptions) => import("@angular/core").FactoryProvider;
10
10
  /**
11
11
  * Injects the Search state.
12
12
  */
@@ -6,7 +6,7 @@ export declare const NgpSelectStateToken: import("@angular/core").InjectionToken
6
6
  /**
7
7
  * Provides the Select state.
8
8
  */
9
- export declare const provideSelectState: () => import("@angular/core").FactoryProvider;
9
+ export declare const provideSelectState: (options?: import("ng-primitives/state").CreateStateProviderOptions) => import("@angular/core").FactoryProvider;
10
10
  /**
11
11
  * Injects the Select state.
12
12
  */
@@ -6,16 +6,16 @@ export declare const NgpSliderStateToken: import("@angular/core").InjectionToken
6
6
  /**
7
7
  * Provides the Slider state.
8
8
  */
9
- export declare const provideSliderState: () => import("@angular/core").FactoryProvider;
9
+ export declare const provideSliderState: (options?: import("ng-primitives/state").CreateStateProviderOptions) => import("@angular/core").FactoryProvider;
10
10
  /**
11
11
  * Injects the Slider state.
12
12
  */
13
13
  export declare const injectSliderState: <U = {
14
- readonly value: import("@angular/core").InputSignalWithTransform<number, import("@angular/cdk/coercion").NumberInput>;
14
+ readonly value: import("@angular/core").InputSignalWithTransform<number, import("@angular/cdk/number-property.d-BzBQchZ2").NumberInput>;
15
15
  readonly valueChange: import("@angular/core").OutputEmitterRef<number>;
16
- readonly min: import("@angular/core").InputSignalWithTransform<number, import("@angular/cdk/coercion").NumberInput>;
17
- readonly max: import("@angular/core").InputSignalWithTransform<number, import("@angular/cdk/coercion").NumberInput>;
18
- readonly step: import("@angular/core").InputSignalWithTransform<number, import("@angular/cdk/coercion").NumberInput>;
16
+ readonly min: import("@angular/core").InputSignalWithTransform<number, import("@angular/cdk/number-property.d-BzBQchZ2").NumberInput>;
17
+ readonly max: import("@angular/core").InputSignalWithTransform<number, import("@angular/cdk/number-property.d-BzBQchZ2").NumberInput>;
18
+ readonly step: import("@angular/core").InputSignalWithTransform<number, import("@angular/cdk/number-property.d-BzBQchZ2").NumberInput>;
19
19
  readonly orientation: import("@angular/core").InputSignal<import("ng-primitives/common").NgpOrientation>;
20
20
  readonly disabled: import("@angular/core").InputSignalWithTransform<boolean, import("@angular/cdk/coercion").BooleanInput>;
21
21
  readonly track: import("@angular/core").WritableSignal<import("ng-primitives/slider").NgpSliderTrack | undefined>;
@@ -7,11 +7,11 @@ export declare class NgpSliderRange {
7
7
  * Access the slider state.
8
8
  */
9
9
  protected readonly sliderState: import("@angular/core").Signal<import("ng-primitives/state").State<{
10
- readonly value: import("@angular/core").InputSignalWithTransform<number, import("@angular/cdk/coercion").NumberInput>;
10
+ readonly value: import("@angular/core").InputSignalWithTransform<number, import("@angular/cdk/number-property.d-BzBQchZ2").NumberInput>;
11
11
  readonly valueChange: import("@angular/core").OutputEmitterRef<number>;
12
- readonly min: import("@angular/core").InputSignalWithTransform<number, import("@angular/cdk/coercion").NumberInput>;
13
- readonly max: import("@angular/core").InputSignalWithTransform<number, import("@angular/cdk/coercion").NumberInput>;
14
- readonly step: import("@angular/core").InputSignalWithTransform<number, import("@angular/cdk/coercion").NumberInput>;
12
+ readonly min: import("@angular/core").InputSignalWithTransform<number, import("@angular/cdk/number-property.d-BzBQchZ2").NumberInput>;
13
+ readonly max: import("@angular/core").InputSignalWithTransform<number, import("@angular/cdk/number-property.d-BzBQchZ2").NumberInput>;
14
+ readonly step: import("@angular/core").InputSignalWithTransform<number, import("@angular/cdk/number-property.d-BzBQchZ2").NumberInput>;
15
15
  readonly orientation: import("@angular/core").InputSignal<import("ng-primitives/common").NgpOrientation>;
16
16
  readonly disabled: import("@angular/core").InputSignalWithTransform<boolean, import("@angular/cdk/coercion").BooleanInput>;
17
17
  readonly track: import("@angular/core").WritableSignal<import("ng-primitives/slider").NgpSliderTrack | undefined>;