@radix-ng/primitives 0.51.0 → 1.0.0-beta.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.
Files changed (186) hide show
  1. package/fesm2022/radix-ng-primitives-accordion.mjs +105 -38
  2. package/fesm2022/radix-ng-primitives-accordion.mjs.map +1 -1
  3. package/fesm2022/radix-ng-primitives-alert-dialog.mjs +221 -129
  4. package/fesm2022/radix-ng-primitives-alert-dialog.mjs.map +1 -1
  5. package/fesm2022/radix-ng-primitives-arrow.mjs +20 -4
  6. package/fesm2022/radix-ng-primitives-arrow.mjs.map +1 -1
  7. package/fesm2022/radix-ng-primitives-aspect-ratio.mjs.map +1 -1
  8. package/fesm2022/radix-ng-primitives-avatar.mjs +54 -61
  9. package/fesm2022/radix-ng-primitives-avatar.mjs.map +1 -1
  10. package/fesm2022/radix-ng-primitives-button.mjs +123 -0
  11. package/fesm2022/radix-ng-primitives-button.mjs.map +1 -0
  12. package/fesm2022/radix-ng-primitives-calendar.mjs +95 -83
  13. package/fesm2022/radix-ng-primitives-calendar.mjs.map +1 -1
  14. package/fesm2022/radix-ng-primitives-checkbox.mjs +378 -54
  15. package/fesm2022/radix-ng-primitives-checkbox.mjs.map +1 -1
  16. package/fesm2022/radix-ng-primitives-collapsible.mjs +182 -81
  17. package/fesm2022/radix-ng-primitives-collapsible.mjs.map +1 -1
  18. package/fesm2022/radix-ng-primitives-collection.mjs +40 -57
  19. package/fesm2022/radix-ng-primitives-collection.mjs.map +1 -1
  20. package/fesm2022/radix-ng-primitives-config.mjs.map +1 -1
  21. package/fesm2022/radix-ng-primitives-context-menu.mjs +140 -424
  22. package/fesm2022/radix-ng-primitives-context-menu.mjs.map +1 -1
  23. package/fesm2022/radix-ng-primitives-core.mjs +845 -744
  24. package/fesm2022/radix-ng-primitives-core.mjs.map +1 -1
  25. package/fesm2022/radix-ng-primitives-cropper.mjs +288 -308
  26. package/fesm2022/radix-ng-primitives-cropper.mjs.map +1 -1
  27. package/fesm2022/radix-ng-primitives-date-field.mjs +104 -58
  28. package/fesm2022/radix-ng-primitives-date-field.mjs.map +1 -1
  29. package/fesm2022/radix-ng-primitives-dialog.mjs +655 -327
  30. package/fesm2022/radix-ng-primitives-dialog.mjs.map +1 -1
  31. package/fesm2022/radix-ng-primitives-dismissable-layer.mjs +70 -46
  32. package/fesm2022/radix-ng-primitives-dismissable-layer.mjs.map +1 -1
  33. package/fesm2022/radix-ng-primitives-drawer.mjs +960 -0
  34. package/fesm2022/radix-ng-primitives-drawer.mjs.map +1 -0
  35. package/fesm2022/radix-ng-primitives-editable.mjs +304 -23
  36. package/fesm2022/radix-ng-primitives-editable.mjs.map +1 -1
  37. package/fesm2022/radix-ng-primitives-field.mjs +363 -0
  38. package/fesm2022/radix-ng-primitives-field.mjs.map +1 -0
  39. package/fesm2022/radix-ng-primitives-fieldset.mjs +79 -0
  40. package/fesm2022/radix-ng-primitives-fieldset.mjs.map +1 -0
  41. package/fesm2022/radix-ng-primitives-focus-scope.mjs +23 -8
  42. package/fesm2022/radix-ng-primitives-focus-scope.mjs.map +1 -1
  43. package/fesm2022/radix-ng-primitives-input.mjs +172 -0
  44. package/fesm2022/radix-ng-primitives-input.mjs.map +1 -0
  45. package/fesm2022/radix-ng-primitives-label.mjs +6 -6
  46. package/fesm2022/radix-ng-primitives-label.mjs.map +1 -1
  47. package/fesm2022/radix-ng-primitives-menu.mjs +1907 -363
  48. package/fesm2022/radix-ng-primitives-menu.mjs.map +1 -1
  49. package/fesm2022/radix-ng-primitives-menubar.mjs +290 -162
  50. package/fesm2022/radix-ng-primitives-menubar.mjs.map +1 -1
  51. package/fesm2022/radix-ng-primitives-meter.mjs +271 -0
  52. package/fesm2022/radix-ng-primitives-meter.mjs.map +1 -0
  53. package/fesm2022/radix-ng-primitives-navigation-menu.mjs +1052 -1553
  54. package/fesm2022/radix-ng-primitives-navigation-menu.mjs.map +1 -1
  55. package/fesm2022/radix-ng-primitives-number-field.mjs +1102 -367
  56. package/fesm2022/radix-ng-primitives-number-field.mjs.map +1 -1
  57. package/fesm2022/radix-ng-primitives-pagination.mjs.map +1 -1
  58. package/fesm2022/radix-ng-primitives-popover.mjs +978 -989
  59. package/fesm2022/radix-ng-primitives-popover.mjs.map +1 -1
  60. package/fesm2022/radix-ng-primitives-popper.mjs +111 -44
  61. package/fesm2022/radix-ng-primitives-popper.mjs.map +1 -1
  62. package/fesm2022/radix-ng-primitives-portal.mjs +34 -10
  63. package/fesm2022/radix-ng-primitives-portal.mjs.map +1 -1
  64. package/fesm2022/radix-ng-primitives-presence.mjs +134 -246
  65. package/fesm2022/radix-ng-primitives-presence.mjs.map +1 -1
  66. package/fesm2022/radix-ng-primitives-preview-card.mjs +997 -0
  67. package/fesm2022/radix-ng-primitives-preview-card.mjs.map +1 -0
  68. package/fesm2022/radix-ng-primitives-progress.mjs +223 -84
  69. package/fesm2022/radix-ng-primitives-progress.mjs.map +1 -1
  70. package/fesm2022/radix-ng-primitives-radio.mjs +191 -51
  71. package/fesm2022/radix-ng-primitives-radio.mjs.map +1 -1
  72. package/fesm2022/radix-ng-primitives-roving-focus.mjs +96 -50
  73. package/fesm2022/radix-ng-primitives-roving-focus.mjs.map +1 -1
  74. package/fesm2022/radix-ng-primitives-scroll-area.mjs +923 -0
  75. package/fesm2022/radix-ng-primitives-scroll-area.mjs.map +1 -0
  76. package/fesm2022/radix-ng-primitives-select.mjs +791 -509
  77. package/fesm2022/radix-ng-primitives-select.mjs.map +1 -1
  78. package/fesm2022/radix-ng-primitives-separator.mjs +12 -35
  79. package/fesm2022/radix-ng-primitives-separator.mjs.map +1 -1
  80. package/fesm2022/radix-ng-primitives-slider.mjs +969 -717
  81. package/fesm2022/radix-ng-primitives-slider.mjs.map +1 -1
  82. package/fesm2022/radix-ng-primitives-stepper.mjs +15 -19
  83. package/fesm2022/radix-ng-primitives-stepper.mjs.map +1 -1
  84. package/fesm2022/radix-ng-primitives-switch.mjs +125 -113
  85. package/fesm2022/radix-ng-primitives-switch.mjs.map +1 -1
  86. package/fesm2022/radix-ng-primitives-tabs.mjs +390 -108
  87. package/fesm2022/radix-ng-primitives-tabs.mjs.map +1 -1
  88. package/fesm2022/radix-ng-primitives-time-field.mjs +55 -46
  89. package/fesm2022/radix-ng-primitives-time-field.mjs.map +1 -1
  90. package/fesm2022/radix-ng-primitives-toast.mjs +839 -0
  91. package/fesm2022/radix-ng-primitives-toast.mjs.map +1 -0
  92. package/fesm2022/radix-ng-primitives-toggle-group.mjs +121 -247
  93. package/fesm2022/radix-ng-primitives-toggle-group.mjs.map +1 -1
  94. package/fesm2022/radix-ng-primitives-toggle.mjs +98 -61
  95. package/fesm2022/radix-ng-primitives-toggle.mjs.map +1 -1
  96. package/fesm2022/radix-ng-primitives-toolbar.mjs +303 -92
  97. package/fesm2022/radix-ng-primitives-toolbar.mjs.map +1 -1
  98. package/fesm2022/radix-ng-primitives-tooltip.mjs +699 -1072
  99. package/fesm2022/radix-ng-primitives-tooltip.mjs.map +1 -1
  100. package/fesm2022/radix-ng-primitives-visually-hidden.mjs +25 -66
  101. package/fesm2022/radix-ng-primitives-visually-hidden.mjs.map +1 -1
  102. package/meter/README.md +3 -0
  103. package/navigation-menu/README.md +2 -1
  104. package/package.json +39 -18
  105. package/portal/README.md +2 -0
  106. package/preview-card/README.md +3 -0
  107. package/schematics/collection.json +1 -0
  108. package/schematics/ng-add/index.d.ts +3 -2
  109. package/schematics/ng-add/index.js +62 -31
  110. package/schematics/ng-add/index.js.map +1 -1
  111. package/schematics/ng-add/package-config.d.ts +4 -2
  112. package/schematics/ng-add/package-config.js +10 -2
  113. package/schematics/ng-add/package-config.js.map +1 -1
  114. package/schematics/ng-add/schema.d.ts +3 -0
  115. package/schematics/ng-add/schema.js +3 -0
  116. package/schematics/ng-add/schema.js.map +1 -0
  117. package/schematics/ng-add/schema.json +14 -0
  118. package/select/README.md +2 -0
  119. package/types/radix-ng-primitives-accordion.d.ts +51 -16
  120. package/types/radix-ng-primitives-alert-dialog.d.ts +95 -38
  121. package/types/radix-ng-primitives-arrow.d.ts +1 -1
  122. package/types/radix-ng-primitives-aspect-ratio.d.ts +1 -1
  123. package/types/radix-ng-primitives-avatar.d.ts +7 -11
  124. package/types/radix-ng-primitives-button.d.ts +73 -0
  125. package/types/radix-ng-primitives-calendar.d.ts +39 -20
  126. package/types/radix-ng-primitives-checkbox.d.ts +204 -35
  127. package/types/radix-ng-primitives-collapsible.d.ts +114 -40
  128. package/types/radix-ng-primitives-collection.d.ts +38 -34
  129. package/types/radix-ng-primitives-config.d.ts +1 -1
  130. package/types/radix-ng-primitives-context-menu.d.ts +61 -116
  131. package/types/radix-ng-primitives-core.d.ts +345 -235
  132. package/types/radix-ng-primitives-cropper.d.ts +89 -56
  133. package/types/radix-ng-primitives-date-field.d.ts +49 -28
  134. package/types/radix-ng-primitives-dialog.d.ts +283 -165
  135. package/types/radix-ng-primitives-dismissable-layer.d.ts +15 -7
  136. package/types/radix-ng-primitives-drawer.d.ts +426 -0
  137. package/types/radix-ng-primitives-editable.d.ts +91 -14
  138. package/types/radix-ng-primitives-field.d.ts +374 -0
  139. package/types/radix-ng-primitives-fieldset.d.ts +49 -0
  140. package/types/radix-ng-primitives-focus-scope.d.ts +15 -6
  141. package/types/radix-ng-primitives-input.d.ts +87 -0
  142. package/types/radix-ng-primitives-label.d.ts +0 -1
  143. package/types/radix-ng-primitives-menu.d.ts +584 -99
  144. package/types/radix-ng-primitives-menubar.d.ts +61 -50
  145. package/types/radix-ng-primitives-meter.d.ts +194 -0
  146. package/types/radix-ng-primitives-navigation-menu.d.ts +422 -340
  147. package/types/radix-ng-primitives-number-field.d.ts +405 -145
  148. package/types/radix-ng-primitives-pagination.d.ts +2 -2
  149. package/types/radix-ng-primitives-popover.d.ts +366 -351
  150. package/types/radix-ng-primitives-popper.d.ts +68 -11
  151. package/types/radix-ng-primitives-portal.d.ts +14 -6
  152. package/types/radix-ng-primitives-presence.d.ts +28 -76
  153. package/types/radix-ng-primitives-preview-card.d.ts +359 -0
  154. package/types/radix-ng-primitives-progress.d.ts +175 -48
  155. package/types/radix-ng-primitives-radio.d.ts +55 -25
  156. package/types/radix-ng-primitives-roving-focus.d.ts +33 -23
  157. package/types/radix-ng-primitives-scroll-area.d.ts +253 -0
  158. package/types/radix-ng-primitives-select.d.ts +475 -177
  159. package/types/radix-ng-primitives-separator.d.ts +7 -32
  160. package/types/radix-ng-primitives-slider.d.ts +315 -201
  161. package/types/radix-ng-primitives-stepper.d.ts +5 -7
  162. package/types/radix-ng-primitives-switch.d.ts +86 -71
  163. package/types/radix-ng-primitives-tabs.d.ts +213 -79
  164. package/types/radix-ng-primitives-time-field.d.ts +42 -27
  165. package/types/radix-ng-primitives-toast.d.ts +378 -0
  166. package/types/radix-ng-primitives-toggle-group.d.ts +86 -164
  167. package/types/radix-ng-primitives-toggle.d.ts +43 -53
  168. package/types/radix-ng-primitives-toolbar.d.ts +164 -38
  169. package/types/radix-ng-primitives-tooltip.d.ts +348 -384
  170. package/types/radix-ng-primitives-visually-hidden.d.ts +19 -19
  171. package/dropdown-menu/README.md +0 -1
  172. package/fesm2022/radix-ng-primitives-dropdown-menu.mjs +0 -581
  173. package/fesm2022/radix-ng-primitives-dropdown-menu.mjs.map +0 -1
  174. package/fesm2022/radix-ng-primitives-hover-card.mjs +0 -1238
  175. package/fesm2022/radix-ng-primitives-hover-card.mjs.map +0 -1
  176. package/fesm2022/radix-ng-primitives-select2.mjs +0 -897
  177. package/fesm2022/radix-ng-primitives-select2.mjs.map +0 -1
  178. package/fesm2022/radix-ng-primitives-tooltip2.mjs +0 -735
  179. package/fesm2022/radix-ng-primitives-tooltip2.mjs.map +0 -1
  180. package/hover-card/README.md +0 -3
  181. package/select2/README.md +0 -3
  182. package/tooltip2/README.md +0 -3
  183. package/types/radix-ng-primitives-dropdown-menu.d.ts +0 -171
  184. package/types/radix-ng-primitives-hover-card.d.ts +0 -471
  185. package/types/radix-ng-primitives-select2.d.ts +0 -511
  186. package/types/radix-ng-primitives-tooltip2.d.ts +0 -325
@@ -0,0 +1,271 @@
1
+ import * as i0 from '@angular/core';
2
+ import { input, numberAttribute, computed, Directive, inject, NgModule } from '@angular/core';
3
+ import { createContext } from '@radix-ng/primitives/core';
4
+
5
+ let meterId = 0;
6
+ const DEFAULT_MIN = 0;
7
+ const DEFAULT_MAX = 100;
8
+ const isValidNumber = (value) => typeof value === 'number' && !Number.isNaN(value);
9
+ const clamp = (value, min, max) => Math.min(Math.max(value, min), max);
10
+ const meterRootContext = () => {
11
+ const root = injectMeterRoot();
12
+ return {
13
+ labelId: root.labelId,
14
+ valueId: root.valueId,
15
+ minState: root.minState,
16
+ maxState: root.maxState,
17
+ valueState: root.valueState,
18
+ percentageState: root.percentageState,
19
+ formattedValueState: root.formattedValueState,
20
+ ariaValueTextState: root.ariaValueTextState
21
+ };
22
+ };
23
+ const [injectMeterRootContext, provideMeterRootContext] = createContext('RdxMeterRoot');
24
+ /**
25
+ * Provides meter state and accessibility attributes.
26
+ *
27
+ * @group Components
28
+ */
29
+ class RdxMeterRootDirective {
30
+ constructor() {
31
+ /**
32
+ * Current meter value.
33
+ *
34
+ * @group Props
35
+ */
36
+ this.value = input.required({ ...(ngDevMode ? { debugName: "value" } : /* istanbul ignore next */ {}), transform: numberAttribute });
37
+ /**
38
+ * Minimum meter value.
39
+ *
40
+ * @group Props
41
+ * @defaultValue 0
42
+ */
43
+ this.min = input(DEFAULT_MIN, { ...(ngDevMode ? { debugName: "min" } : /* istanbul ignore next */ {}), transform: numberAttribute });
44
+ /**
45
+ * Maximum meter value.
46
+ *
47
+ * @group Props
48
+ * @defaultValue 100
49
+ */
50
+ this.max = input(DEFAULT_MAX, { ...(ngDevMode ? { debugName: "max" } : /* istanbul ignore next */ {}), transform: numberAttribute });
51
+ /**
52
+ * Locale used by `Intl.NumberFormat` when formatting the displayed value.
53
+ *
54
+ * @group Props
55
+ */
56
+ this.locale = input(...(ngDevMode ? [undefined, { debugName: "locale" }] : /* istanbul ignore next */ []));
57
+ /**
58
+ * Number formatting options for the displayed value.
59
+ *
60
+ * @group Props
61
+ */
62
+ this.format = input(...(ngDevMode ? [undefined, { debugName: "format" }] : /* istanbul ignore next */ []));
63
+ /**
64
+ * Human-readable text alternative for the current value.
65
+ *
66
+ * @group Props
67
+ */
68
+ this.ariaValueText = input(undefined, { ...(ngDevMode ? { debugName: "ariaValueText" } : /* istanbul ignore next */ {}), alias: 'aria-valuetext' });
69
+ /**
70
+ * Formats a human-readable text alternative for the current value.
71
+ *
72
+ * @group Props
73
+ */
74
+ this.getAriaValueText = input(...(ngDevMode ? [undefined, { debugName: "getAriaValueText" }] : /* istanbul ignore next */ []));
75
+ this.labelId = input(`rdx-meter-label-${meterId++}`, ...(ngDevMode ? [{ debugName: "labelId" }] : /* istanbul ignore next */ []));
76
+ this.valueId = input(`rdx-meter-value-${meterId++}`, ...(ngDevMode ? [{ debugName: "valueId" }] : /* istanbul ignore next */ []));
77
+ this.minState = computed(() => (isValidNumber(this.min()) ? this.min() : DEFAULT_MIN), ...(ngDevMode ? [{ debugName: "minState" }] : /* istanbul ignore next */ []));
78
+ this.maxState = computed(() => {
79
+ const min = this.minState();
80
+ const max = this.max();
81
+ return isValidNumber(max) && max > min ? max : min + DEFAULT_MAX;
82
+ }, ...(ngDevMode ? [{ debugName: "maxState" }] : /* istanbul ignore next */ []));
83
+ this.valueState = computed(() => {
84
+ const value = this.value();
85
+ return clamp(isValidNumber(value) ? value : this.minState(), this.minState(), this.maxState());
86
+ }, ...(ngDevMode ? [{ debugName: "valueState" }] : /* istanbul ignore next */ []));
87
+ this.percentageState = computed(() => {
88
+ const min = this.minState();
89
+ const max = this.maxState();
90
+ return ((this.valueState() - min) / (max - min)) * 100;
91
+ }, ...(ngDevMode ? [{ debugName: "percentageState" }] : /* istanbul ignore next */ []));
92
+ this.formattedValueState = computed(() => {
93
+ const format = this.format();
94
+ if (format) {
95
+ return new Intl.NumberFormat(this.locale(), format).format(this.valueState());
96
+ }
97
+ return new Intl.NumberFormat(this.locale(), { style: 'percent' }).format(this.percentageState() / 100);
98
+ }, ...(ngDevMode ? [{ debugName: "formattedValueState" }] : /* istanbul ignore next */ []));
99
+ this.ariaValueTextState = computed(() => {
100
+ const explicitText = this.ariaValueText();
101
+ if (explicitText !== undefined) {
102
+ return explicitText;
103
+ }
104
+ return this.getAriaValueText()?.(this.formattedValueState(), this.valueState());
105
+ }, ...(ngDevMode ? [{ debugName: "ariaValueTextState" }] : /* istanbul ignore next */ []));
106
+ }
107
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxMeterRootDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
108
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: RdxMeterRootDirective, isStandalone: true, selector: "[rdxMeterRoot]", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, locale: { classPropertyName: "locale", publicName: "locale", isSignal: true, isRequired: false, transformFunction: null }, format: { classPropertyName: "format", publicName: "format", isSignal: true, isRequired: false, transformFunction: null }, ariaValueText: { classPropertyName: "ariaValueText", publicName: "aria-valuetext", isSignal: true, isRequired: false, transformFunction: null }, getAriaValueText: { classPropertyName: "getAriaValueText", publicName: "getAriaValueText", isSignal: true, isRequired: false, transformFunction: null }, labelId: { classPropertyName: "labelId", publicName: "labelId", isSignal: true, isRequired: false, transformFunction: null }, valueId: { classPropertyName: "valueId", publicName: "valueId", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "meter" }, properties: { "attr.aria-labelledby": "labelId()", "attr.aria-describedby": "valueId()", "attr.aria-valuemin": "minState()", "attr.aria-valuemax": "maxState()", "attr.aria-valuenow": "valueState()", "attr.aria-valuetext": "ariaValueTextState()", "attr.data-value": "valueState()", "attr.data-min": "minState()", "attr.data-max": "maxState()", "attr.data-percent": "percentageState()" } }, providers: [provideMeterRootContext(meterRootContext)], exportAs: ["rdxMeterRoot"], ngImport: i0 }); }
109
+ }
110
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxMeterRootDirective, decorators: [{
111
+ type: Directive,
112
+ args: [{
113
+ selector: '[rdxMeterRoot]',
114
+ exportAs: 'rdxMeterRoot',
115
+ providers: [provideMeterRootContext(meterRootContext)],
116
+ host: {
117
+ role: 'meter',
118
+ '[attr.aria-labelledby]': 'labelId()',
119
+ '[attr.aria-describedby]': 'valueId()',
120
+ '[attr.aria-valuemin]': 'minState()',
121
+ '[attr.aria-valuemax]': 'maxState()',
122
+ '[attr.aria-valuenow]': 'valueState()',
123
+ '[attr.aria-valuetext]': 'ariaValueTextState()',
124
+ '[attr.data-value]': 'valueState()',
125
+ '[attr.data-min]': 'minState()',
126
+ '[attr.data-max]': 'maxState()',
127
+ '[attr.data-percent]': 'percentageState()'
128
+ }
129
+ }]
130
+ }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: true }] }], min: [{ type: i0.Input, args: [{ isSignal: true, alias: "min", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], locale: [{ type: i0.Input, args: [{ isSignal: true, alias: "locale", required: false }] }], format: [{ type: i0.Input, args: [{ isSignal: true, alias: "format", required: false }] }], ariaValueText: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-valuetext", required: false }] }], getAriaValueText: [{ type: i0.Input, args: [{ isSignal: true, alias: "getAriaValueText", required: false }] }], labelId: [{ type: i0.Input, args: [{ isSignal: true, alias: "labelId", required: false }] }], valueId: [{ type: i0.Input, args: [{ isSignal: true, alias: "valueId", required: false }] }] } });
131
+ function injectMeterRoot() {
132
+ return inject(RdxMeterRootDirective);
133
+ }
134
+
135
+ /**
136
+ * Displays the visual meter fill.
137
+ *
138
+ * @group Components
139
+ */
140
+ class RdxMeterIndicatorDirective {
141
+ constructor() {
142
+ this.meter = injectMeterRootContext();
143
+ }
144
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxMeterIndicatorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
145
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.9", type: RdxMeterIndicatorDirective, isStandalone: true, selector: "[rdxMeterIndicator]", host: { properties: { "attr.data-value": "meter.valueState()", "attr.data-min": "meter.minState()", "attr.data-max": "meter.maxState()", "attr.data-percent": "meter.percentageState()" } }, exportAs: ["rdxMeterIndicator"], ngImport: i0 }); }
146
+ }
147
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxMeterIndicatorDirective, decorators: [{
148
+ type: Directive,
149
+ args: [{
150
+ selector: '[rdxMeterIndicator]',
151
+ exportAs: 'rdxMeterIndicator',
152
+ host: {
153
+ '[attr.data-value]': 'meter.valueState()',
154
+ '[attr.data-min]': 'meter.minState()',
155
+ '[attr.data-max]': 'meter.maxState()',
156
+ '[attr.data-percent]': 'meter.percentageState()'
157
+ }
158
+ }]
159
+ }] });
160
+
161
+ /**
162
+ * Labels the meter.
163
+ *
164
+ * @group Components
165
+ */
166
+ class RdxMeterLabelDirective {
167
+ constructor() {
168
+ this.meter = injectMeterRootContext();
169
+ }
170
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxMeterLabelDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
171
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.9", type: RdxMeterLabelDirective, isStandalone: true, selector: "[rdxMeterLabel]", host: { properties: { "attr.id": "meter.labelId()" } }, exportAs: ["rdxMeterLabel"], ngImport: i0 }); }
172
+ }
173
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxMeterLabelDirective, decorators: [{
174
+ type: Directive,
175
+ args: [{
176
+ selector: '[rdxMeterLabel]',
177
+ exportAs: 'rdxMeterLabel',
178
+ host: {
179
+ '[attr.id]': 'meter.labelId()'
180
+ }
181
+ }]
182
+ }] });
183
+
184
+ /**
185
+ * Contains the visual meter indicator.
186
+ *
187
+ * @group Components
188
+ */
189
+ class RdxMeterTrackDirective {
190
+ constructor() {
191
+ this.meter = injectMeterRootContext();
192
+ }
193
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxMeterTrackDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
194
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.9", type: RdxMeterTrackDirective, isStandalone: true, selector: "[rdxMeterTrack]", host: { properties: { "attr.data-value": "meter.valueState()", "attr.data-min": "meter.minState()", "attr.data-max": "meter.maxState()", "attr.data-percent": "meter.percentageState()" } }, exportAs: ["rdxMeterTrack"], ngImport: i0 }); }
195
+ }
196
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxMeterTrackDirective, decorators: [{
197
+ type: Directive,
198
+ args: [{
199
+ selector: '[rdxMeterTrack]',
200
+ exportAs: 'rdxMeterTrack',
201
+ host: {
202
+ '[attr.data-value]': 'meter.valueState()',
203
+ '[attr.data-min]': 'meter.minState()',
204
+ '[attr.data-max]': 'meter.maxState()',
205
+ '[attr.data-percent]': 'meter.percentageState()'
206
+ }
207
+ }]
208
+ }] });
209
+
210
+ /**
211
+ * Displays the formatted meter value.
212
+ *
213
+ * @group Components
214
+ */
215
+ class RdxMeterValueDirective {
216
+ constructor() {
217
+ this.meter = injectMeterRootContext();
218
+ }
219
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxMeterValueDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
220
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.9", type: RdxMeterValueDirective, isStandalone: true, selector: "[rdxMeterValue]", host: { properties: { "attr.id": "meter.valueId()", "textContent": "meter.formattedValueState()", "attr.data-value": "meter.valueState()", "attr.data-min": "meter.minState()", "attr.data-max": "meter.maxState()", "attr.data-percent": "meter.percentageState()" } }, exportAs: ["rdxMeterValue"], ngImport: i0 }); }
221
+ }
222
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxMeterValueDirective, decorators: [{
223
+ type: Directive,
224
+ args: [{
225
+ selector: '[rdxMeterValue]',
226
+ exportAs: 'rdxMeterValue',
227
+ host: {
228
+ '[attr.id]': 'meter.valueId()',
229
+ '[textContent]': 'meter.formattedValueState()',
230
+ '[attr.data-value]': 'meter.valueState()',
231
+ '[attr.data-min]': 'meter.minState()',
232
+ '[attr.data-max]': 'meter.maxState()',
233
+ '[attr.data-percent]': 'meter.percentageState()'
234
+ }
235
+ }]
236
+ }] });
237
+
238
+ const _imports = [
239
+ RdxMeterRootDirective,
240
+ RdxMeterLabelDirective,
241
+ RdxMeterValueDirective,
242
+ RdxMeterTrackDirective,
243
+ RdxMeterIndicatorDirective
244
+ ];
245
+ class RdxMeterModule {
246
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxMeterModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
247
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.9", ngImport: i0, type: RdxMeterModule, imports: [RdxMeterRootDirective,
248
+ RdxMeterLabelDirective,
249
+ RdxMeterValueDirective,
250
+ RdxMeterTrackDirective,
251
+ RdxMeterIndicatorDirective], exports: [RdxMeterRootDirective,
252
+ RdxMeterLabelDirective,
253
+ RdxMeterValueDirective,
254
+ RdxMeterTrackDirective,
255
+ RdxMeterIndicatorDirective] }); }
256
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxMeterModule }); }
257
+ }
258
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxMeterModule, decorators: [{
259
+ type: NgModule,
260
+ args: [{
261
+ imports: [..._imports],
262
+ exports: [..._imports]
263
+ }]
264
+ }] });
265
+
266
+ /**
267
+ * Generated bundle index. Do not edit.
268
+ */
269
+
270
+ export { RdxMeterIndicatorDirective, RdxMeterLabelDirective, RdxMeterModule, RdxMeterRootDirective, RdxMeterTrackDirective, RdxMeterValueDirective, injectMeterRootContext, provideMeterRootContext };
271
+ //# sourceMappingURL=radix-ng-primitives-meter.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"radix-ng-primitives-meter.mjs","sources":["../../../packages/primitives/meter/src/meter-root.directive.ts","../../../packages/primitives/meter/src/meter-indicator.directive.ts","../../../packages/primitives/meter/src/meter-label.directive.ts","../../../packages/primitives/meter/src/meter-track.directive.ts","../../../packages/primitives/meter/src/meter-value.directive.ts","../../../packages/primitives/meter/index.ts","../../../packages/primitives/meter/radix-ng-primitives-meter.ts"],"sourcesContent":["import { computed, Directive, inject, input, numberAttribute } from '@angular/core';\nimport { createContext } from '@radix-ng/primitives/core';\n\nlet meterId = 0;\n\nexport type MeterValueFormatter = (formattedValue: string, value: number) => string;\n\nexport interface MeterProps {\n value: number;\n min?: number;\n max?: number;\n locale?: Intl.LocalesArgument;\n format?: Intl.NumberFormatOptions;\n ariaValueText?: string;\n getAriaValueText?: MeterValueFormatter;\n}\n\nconst DEFAULT_MIN = 0;\nconst DEFAULT_MAX = 100;\n\nconst isValidNumber = (value: unknown): value is number => typeof value === 'number' && !Number.isNaN(value);\n\nconst clamp = (value: number, min: number, max: number) => Math.min(Math.max(value, min), max);\n\nconst meterRootContext = () => {\n const root = injectMeterRoot();\n\n return {\n labelId: root.labelId,\n valueId: root.valueId,\n minState: root.minState,\n maxState: root.maxState,\n valueState: root.valueState,\n percentageState: root.percentageState,\n formattedValueState: root.formattedValueState,\n ariaValueTextState: root.ariaValueTextState\n };\n};\n\nexport type RdxMeterRootContext = ReturnType<typeof meterRootContext>;\n\nexport const [injectMeterRootContext, provideMeterRootContext] = createContext<RdxMeterRootContext>('RdxMeterRoot');\n\n/**\n * Provides meter state and accessibility attributes.\n *\n * @group Components\n */\n@Directive({\n selector: '[rdxMeterRoot]',\n exportAs: 'rdxMeterRoot',\n providers: [provideMeterRootContext(meterRootContext)],\n host: {\n role: 'meter',\n '[attr.aria-labelledby]': 'labelId()',\n '[attr.aria-describedby]': 'valueId()',\n '[attr.aria-valuemin]': 'minState()',\n '[attr.aria-valuemax]': 'maxState()',\n '[attr.aria-valuenow]': 'valueState()',\n '[attr.aria-valuetext]': 'ariaValueTextState()',\n '[attr.data-value]': 'valueState()',\n '[attr.data-min]': 'minState()',\n '[attr.data-max]': 'maxState()',\n '[attr.data-percent]': 'percentageState()'\n }\n})\nexport class RdxMeterRootDirective {\n /**\n * Current meter value.\n *\n * @group Props\n */\n readonly value = input.required<number, unknown>({ transform: numberAttribute });\n\n /**\n * Minimum meter value.\n *\n * @group Props\n * @defaultValue 0\n */\n readonly min = input(DEFAULT_MIN, { transform: numberAttribute });\n\n /**\n * Maximum meter value.\n *\n * @group Props\n * @defaultValue 100\n */\n readonly max = input(DEFAULT_MAX, { transform: numberAttribute });\n\n /**\n * Locale used by `Intl.NumberFormat` when formatting the displayed value.\n *\n * @group Props\n */\n readonly locale = input<Intl.LocalesArgument>();\n\n /**\n * Number formatting options for the displayed value.\n *\n * @group Props\n */\n readonly format = input<Intl.NumberFormatOptions>();\n\n /**\n * Human-readable text alternative for the current value.\n *\n * @group Props\n */\n readonly ariaValueText = input<string | undefined>(undefined, {\n alias: 'aria-valuetext'\n });\n\n /**\n * Formats a human-readable text alternative for the current value.\n *\n * @group Props\n */\n readonly getAriaValueText = input<MeterValueFormatter>();\n\n readonly labelId = input(`rdx-meter-label-${meterId++}`);\n readonly valueId = input(`rdx-meter-value-${meterId++}`);\n\n readonly minState = computed(() => (isValidNumber(this.min()) ? this.min() : DEFAULT_MIN));\n readonly maxState = computed(() => {\n const min = this.minState();\n const max = this.max();\n\n return isValidNumber(max) && max > min ? max : min + DEFAULT_MAX;\n });\n\n readonly valueState = computed(() => {\n const value = this.value();\n\n return clamp(isValidNumber(value) ? value : this.minState(), this.minState(), this.maxState());\n });\n\n readonly percentageState = computed(() => {\n const min = this.minState();\n const max = this.maxState();\n\n return ((this.valueState() - min) / (max - min)) * 100;\n });\n\n readonly formattedValueState = computed(() => {\n const format = this.format();\n\n if (format) {\n return new Intl.NumberFormat(this.locale(), format).format(this.valueState());\n }\n\n return new Intl.NumberFormat(this.locale(), { style: 'percent' }).format(this.percentageState() / 100);\n });\n\n readonly ariaValueTextState = computed(() => {\n const explicitText = this.ariaValueText();\n\n if (explicitText !== undefined) {\n return explicitText;\n }\n\n return this.getAriaValueText()?.(this.formattedValueState(), this.valueState());\n });\n}\n\nfunction injectMeterRoot(): RdxMeterRootDirective {\n return inject(RdxMeterRootDirective);\n}\n","import { Directive } from '@angular/core';\nimport { injectMeterRootContext } from './meter-root.directive';\n\n/**\n * Displays the visual meter fill.\n *\n * @group Components\n */\n@Directive({\n selector: '[rdxMeterIndicator]',\n exportAs: 'rdxMeterIndicator',\n host: {\n '[attr.data-value]': 'meter.valueState()',\n '[attr.data-min]': 'meter.minState()',\n '[attr.data-max]': 'meter.maxState()',\n '[attr.data-percent]': 'meter.percentageState()'\n }\n})\nexport class RdxMeterIndicatorDirective {\n protected readonly meter = injectMeterRootContext();\n}\n","import { Directive } from '@angular/core';\nimport { injectMeterRootContext } from './meter-root.directive';\n\n/**\n * Labels the meter.\n *\n * @group Components\n */\n@Directive({\n selector: '[rdxMeterLabel]',\n exportAs: 'rdxMeterLabel',\n host: {\n '[attr.id]': 'meter.labelId()'\n }\n})\nexport class RdxMeterLabelDirective {\n protected readonly meter = injectMeterRootContext();\n}\n","import { Directive } from '@angular/core';\nimport { injectMeterRootContext } from './meter-root.directive';\n\n/**\n * Contains the visual meter indicator.\n *\n * @group Components\n */\n@Directive({\n selector: '[rdxMeterTrack]',\n exportAs: 'rdxMeterTrack',\n host: {\n '[attr.data-value]': 'meter.valueState()',\n '[attr.data-min]': 'meter.minState()',\n '[attr.data-max]': 'meter.maxState()',\n '[attr.data-percent]': 'meter.percentageState()'\n }\n})\nexport class RdxMeterTrackDirective {\n protected readonly meter = injectMeterRootContext();\n}\n","import { Directive } from '@angular/core';\nimport { injectMeterRootContext } from './meter-root.directive';\n\n/**\n * Displays the formatted meter value.\n *\n * @group Components\n */\n@Directive({\n selector: '[rdxMeterValue]',\n exportAs: 'rdxMeterValue',\n host: {\n '[attr.id]': 'meter.valueId()',\n '[textContent]': 'meter.formattedValueState()',\n '[attr.data-value]': 'meter.valueState()',\n '[attr.data-min]': 'meter.minState()',\n '[attr.data-max]': 'meter.maxState()',\n '[attr.data-percent]': 'meter.percentageState()'\n }\n})\nexport class RdxMeterValueDirective {\n protected readonly meter = injectMeterRootContext();\n}\n","import { NgModule } from '@angular/core';\nimport { RdxMeterIndicatorDirective } from './src/meter-indicator.directive';\nimport { RdxMeterLabelDirective } from './src/meter-label.directive';\nimport { RdxMeterRootDirective } from './src/meter-root.directive';\nimport { RdxMeterTrackDirective } from './src/meter-track.directive';\nimport { RdxMeterValueDirective } from './src/meter-value.directive';\n\nexport * from './src/meter-indicator.directive';\nexport * from './src/meter-label.directive';\nexport * from './src/meter-root.directive';\nexport * from './src/meter-track.directive';\nexport * from './src/meter-value.directive';\n\nexport type { MeterProps, MeterValueFormatter } from './src/meter-root.directive';\n\nconst _imports = [\n RdxMeterRootDirective,\n RdxMeterLabelDirective,\n RdxMeterValueDirective,\n RdxMeterTrackDirective,\n RdxMeterIndicatorDirective\n];\n\n@NgModule({\n imports: [..._imports],\n exports: [..._imports]\n})\nexport class RdxMeterModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}