@brijbyte/agentic-ui 0.0.3 → 0.0.4

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 (201) hide show
  1. package/README.md +132 -35
  2. package/dist/accordion/accordion.d.ts +14 -0
  3. package/dist/accordion/accordion.d.ts.map +1 -1
  4. package/dist/accordion/accordion.js +5 -0
  5. package/dist/accordion/accordion.js.map +1 -1
  6. package/dist/alert-dialog/alert-dialog.d.ts +11 -0
  7. package/dist/alert-dialog/alert-dialog.d.ts.map +1 -1
  8. package/dist/alert-dialog/alert-dialog.js +5 -0
  9. package/dist/alert-dialog/alert-dialog.js.map +1 -1
  10. package/dist/badge/badge.d.ts +6 -0
  11. package/dist/badge/badge.d.ts.map +1 -1
  12. package/dist/badge/badge.js +4 -0
  13. package/dist/badge/badge.js.map +1 -1
  14. package/dist/button/button.d.ts +12 -1
  15. package/dist/button/button.d.ts.map +1 -1
  16. package/dist/button/button.js +5 -0
  17. package/dist/button/button.js.map +1 -1
  18. package/dist/card/card.d.ts +10 -0
  19. package/dist/card/card.d.ts.map +1 -1
  20. package/dist/card/card.js +7 -0
  21. package/dist/card/card.js.map +1 -1
  22. package/dist/checkbox/checkbox.d.ts +13 -0
  23. package/dist/checkbox/checkbox.d.ts.map +1 -1
  24. package/dist/checkbox/checkbox.js +4 -0
  25. package/dist/checkbox/checkbox.js.map +1 -1
  26. package/dist/collapsible/collapsible.d.ts +11 -0
  27. package/dist/collapsible/collapsible.d.ts.map +1 -1
  28. package/dist/collapsible/collapsible.js +5 -0
  29. package/dist/collapsible/collapsible.js.map +1 -1
  30. package/dist/context-menu/context-menu.d.ts +5 -0
  31. package/dist/context-menu/context-menu.d.ts.map +1 -1
  32. package/dist/context-menu/context-menu.js +4 -0
  33. package/dist/context-menu/context-menu.js.map +1 -1
  34. package/dist/dialog/dialog.d.ts +13 -1
  35. package/dist/dialog/dialog.d.ts.map +1 -1
  36. package/dist/dialog/dialog.js +6 -0
  37. package/dist/dialog/dialog.js.map +1 -1
  38. package/dist/drawer/drawer.d.ts +11 -0
  39. package/dist/drawer/drawer.d.ts.map +1 -1
  40. package/dist/drawer/drawer.js +5 -0
  41. package/dist/drawer/drawer.js.map +1 -1
  42. package/dist/index.css +1681 -1251
  43. package/dist/index.d.ts +19 -10
  44. package/dist/index.js +14 -1
  45. package/dist/input/input.d.ts +8 -0
  46. package/dist/input/input.d.ts.map +1 -1
  47. package/dist/input/input.js +5 -0
  48. package/dist/input/input.js.map +1 -1
  49. package/dist/menu/menu.css +3 -8
  50. package/dist/menu/menu.d.ts +11 -4
  51. package/dist/menu/menu.d.ts.map +1 -1
  52. package/dist/menu/menu.js +10 -24
  53. package/dist/menu/menu.js.map +1 -1
  54. package/dist/menu/menu.module.js +1 -1
  55. package/dist/menu/menu.module.js.map +1 -1
  56. package/dist/meter/circular-meter.d.ts +48 -0
  57. package/dist/meter/circular-meter.d.ts.map +1 -0
  58. package/dist/meter/circular-meter.js +86 -0
  59. package/dist/meter/circular-meter.js.map +1 -0
  60. package/dist/meter/index.d.ts +4 -0
  61. package/dist/meter/index.js +5 -0
  62. package/dist/meter/meter.css +152 -0
  63. package/dist/meter/meter.d.ts +58 -0
  64. package/dist/meter/meter.d.ts.map +1 -0
  65. package/dist/meter/meter.js +50 -0
  66. package/dist/meter/meter.js.map +1 -0
  67. package/dist/meter/meter.module.css.d.ts +2 -0
  68. package/dist/meter/meter.module.js +27 -0
  69. package/dist/meter/meter.module.js.map +1 -0
  70. package/dist/meter/meterState.js +18 -0
  71. package/dist/meter/meterState.js.map +1 -0
  72. package/dist/meter/parts.d.ts +31 -0
  73. package/dist/meter/parts.d.ts.map +1 -0
  74. package/dist/meter/parts.js +56 -0
  75. package/dist/meter/parts.js.map +1 -0
  76. package/dist/number-field/number-field.d.ts +16 -0
  77. package/dist/number-field/number-field.d.ts.map +1 -1
  78. package/dist/number-field/number-field.js +4 -0
  79. package/dist/number-field/number-field.js.map +1 -1
  80. package/dist/popover/index.d.ts +3 -0
  81. package/dist/popover/index.js +4 -0
  82. package/dist/popover/parts.d.ts +43 -0
  83. package/dist/popover/parts.d.ts.map +1 -0
  84. package/dist/popover/parts.js +96 -0
  85. package/dist/popover/parts.js.map +1 -0
  86. package/dist/popover/popover.css +173 -0
  87. package/dist/popover/popover.d.ts +49 -0
  88. package/dist/popover/popover.d.ts.map +1 -0
  89. package/dist/popover/popover.js +68 -0
  90. package/dist/popover/popover.js.map +1 -0
  91. package/dist/popover/popover.module.css.d.ts +2 -0
  92. package/dist/popover/popover.module.js +16 -0
  93. package/dist/popover/popover.module.js.map +1 -0
  94. package/dist/progress/progress.d.ts +11 -0
  95. package/dist/progress/progress.d.ts.map +1 -1
  96. package/dist/progress/progress.js +5 -0
  97. package/dist/progress/progress.js.map +1 -1
  98. package/dist/radio/index.d.ts +3 -0
  99. package/dist/radio/index.js +4 -0
  100. package/dist/radio/parts.d.ts +18 -0
  101. package/dist/radio/parts.d.ts.map +1 -0
  102. package/dist/radio/parts.js +42 -0
  103. package/dist/radio/parts.js.map +1 -0
  104. package/dist/radio/radio.css +84 -0
  105. package/dist/radio/radio.d.ts +31 -0
  106. package/dist/radio/radio.d.ts.map +1 -0
  107. package/dist/radio/radio.js +33 -0
  108. package/dist/radio/radio.js.map +1 -0
  109. package/dist/radio/radio.module.css.d.ts +2 -0
  110. package/dist/radio/radio.module.js +11 -0
  111. package/dist/radio/radio.module.js.map +1 -0
  112. package/dist/radio-group/index.d.ts +3 -0
  113. package/dist/radio-group/index.js +4 -0
  114. package/dist/radio-group/parts.d.ts +13 -0
  115. package/dist/radio-group/parts.d.ts.map +1 -0
  116. package/dist/radio-group/parts.js +31 -0
  117. package/dist/radio-group/parts.js.map +1 -0
  118. package/dist/radio-group/radio-group.css +17 -0
  119. package/dist/radio-group/radio-group.d.ts +37 -0
  120. package/dist/radio-group/radio-group.d.ts.map +1 -0
  121. package/dist/radio-group/radio-group.js +28 -0
  122. package/dist/radio-group/radio-group.js.map +1 -0
  123. package/dist/radio-group/radio-group.module.css.d.ts +2 -0
  124. package/dist/radio-group/radio-group.module.js +9 -0
  125. package/dist/radio-group/radio-group.module.js.map +1 -0
  126. package/dist/select/select.d.ts +14 -1
  127. package/dist/select/select.d.ts.map +1 -1
  128. package/dist/select/select.js +4 -0
  129. package/dist/select/select.js.map +1 -1
  130. package/dist/separator/separator.d.ts +4 -0
  131. package/dist/separator/separator.d.ts.map +1 -1
  132. package/dist/separator/separator.js +4 -0
  133. package/dist/separator/separator.js.map +1 -1
  134. package/dist/shared/PopupArrow.js +22 -0
  135. package/dist/shared/PopupArrow.js.map +1 -0
  136. package/dist/slider/slider.d.ts +18 -0
  137. package/dist/slider/slider.d.ts.map +1 -1
  138. package/dist/slider/slider.js +6 -0
  139. package/dist/slider/slider.js.map +1 -1
  140. package/dist/switch/switch.css +11 -2
  141. package/dist/switch/switch.d.ts +12 -0
  142. package/dist/switch/switch.d.ts.map +1 -1
  143. package/dist/switch/switch.js +4 -0
  144. package/dist/switch/switch.js.map +1 -1
  145. package/dist/switch/switch.module.js.map +1 -1
  146. package/dist/tabs/tabs.d.ts +8 -1
  147. package/dist/tabs/tabs.d.ts.map +1 -1
  148. package/dist/tabs/tabs.js +4 -0
  149. package/dist/tabs/tabs.js.map +1 -1
  150. package/dist/toast/toast.d.ts +11 -0
  151. package/dist/toast/toast.d.ts.map +1 -1
  152. package/dist/toast/toast.js +8 -0
  153. package/dist/toast/toast.js.map +1 -1
  154. package/dist/tooltip/tooltip.d.ts +9 -0
  155. package/dist/tooltip/tooltip.d.ts.map +1 -1
  156. package/dist/tooltip/tooltip.js +4 -0
  157. package/dist/tooltip/tooltip.js.map +1 -1
  158. package/package.json +22 -2
  159. package/src/accordion/accordion.tsx +14 -0
  160. package/src/alert-dialog/alert-dialog.tsx +11 -0
  161. package/src/badge/badge.tsx +6 -0
  162. package/src/button/button.tsx +12 -1
  163. package/src/card/card.tsx +10 -0
  164. package/src/checkbox/checkbox.tsx +13 -0
  165. package/src/collapsible/collapsible.tsx +11 -0
  166. package/src/context-menu/context-menu.tsx +5 -0
  167. package/src/dialog/dialog.tsx +13 -1
  168. package/src/drawer/drawer.tsx +11 -0
  169. package/src/index.ts +4 -0
  170. package/src/input/input.tsx +8 -0
  171. package/src/menu/menu.module.css +3 -10
  172. package/src/menu/menu.tsx +13 -26
  173. package/src/meter/circular-meter.tsx +114 -0
  174. package/src/meter/index.ts +9 -0
  175. package/src/meter/meter.module.css +162 -0
  176. package/src/meter/meter.tsx +86 -0
  177. package/src/meter/meterState.ts +29 -0
  178. package/src/meter/parts.tsx +72 -0
  179. package/src/number-field/number-field.tsx +16 -0
  180. package/src/popover/index.ts +14 -0
  181. package/src/popover/parts.tsx +120 -0
  182. package/src/popover/popover.module.css +189 -0
  183. package/src/popover/popover.tsx +80 -0
  184. package/src/progress/progress.tsx +11 -0
  185. package/src/radio/index.ts +6 -0
  186. package/src/radio/parts.tsx +43 -0
  187. package/src/radio/radio.module.css +96 -0
  188. package/src/radio/radio.tsx +37 -0
  189. package/src/radio-group/index.ts +5 -0
  190. package/src/radio-group/parts.tsx +32 -0
  191. package/src/radio-group/radio-group.module.css +17 -0
  192. package/src/radio-group/radio-group.tsx +63 -0
  193. package/src/select/select.tsx +14 -1
  194. package/src/separator/separator.tsx +4 -0
  195. package/src/shared/PopupArrow.tsx +41 -0
  196. package/src/slider/slider.tsx +18 -0
  197. package/src/switch/switch.module.css +11 -2
  198. package/src/switch/switch.tsx +12 -0
  199. package/src/tabs/tabs.tsx +8 -1
  200. package/src/toast/toast.tsx +11 -0
  201. package/src/tooltip/tooltip.tsx +9 -0
@@ -0,0 +1,152 @@
1
+ @layer components {
2
+ .root_vOHIVq {
3
+ gap: var(--space-1-5);
4
+ flex-direction: column;
5
+ width: 100%;
6
+ display: flex;
7
+ }
8
+
9
+ .label-row_vOHIVq {
10
+ font-family: var(--font-mono);
11
+ font-size: var(--font-size-xs);
12
+ color: var(--color-secondary);
13
+ justify-content: space-between;
14
+ align-items: center;
15
+ display: flex;
16
+ }
17
+
18
+ .label_vOHIVq, .value_vOHIVq {
19
+ font-family: var(--font-mono);
20
+ font-size: var(--font-size-xs);
21
+ color: var(--color-secondary);
22
+ }
23
+
24
+ .track_vOHIVq {
25
+ background-color: var(--color-surface-3);
26
+ border-radius: var(--radius-full);
27
+ width: 100%;
28
+ position: relative;
29
+ overflow: hidden;
30
+ }
31
+
32
+ .track-sm_vOHIVq {
33
+ height: 4px;
34
+ }
35
+
36
+ .track-md_vOHIVq {
37
+ height: 6px;
38
+ }
39
+
40
+ .track-lg_vOHIVq {
41
+ height: 8px;
42
+ }
43
+
44
+ .indicator_vOHIVq {
45
+ border-radius: var(--radius-full);
46
+ background-color: var(--color-accent);
47
+ height: 100%;
48
+ transition: width var(--duration-slower) var(--easing-standard);
49
+ }
50
+
51
+ .indicator_vOHIVq[data-meter-state="optimum"] {
52
+ background-color: var(--color-success-solid);
53
+ }
54
+
55
+ .indicator_vOHIVq[data-meter-state="suboptimal"] {
56
+ background-color: var(--color-warning-solid);
57
+ }
58
+
59
+ .indicator_vOHIVq[data-meter-state="critical"] {
60
+ background-color: var(--color-error-solid);
61
+ }
62
+
63
+ .tick_vOHIVq {
64
+ background-color: var(--color-canvas);
65
+ opacity: .6;
66
+ pointer-events: none;
67
+ width: 1px;
68
+ position: absolute;
69
+ top: 0;
70
+ bottom: 0;
71
+ }
72
+
73
+ .circular-root_vOHIVq {
74
+ align-items: center;
75
+ gap: var(--space-1-5);
76
+ flex-direction: column;
77
+ display: inline-flex;
78
+ }
79
+
80
+ .circular-svg_vOHIVq {
81
+ overflow: visible;
82
+ }
83
+
84
+ .circular-track_vOHIVq {
85
+ fill: none;
86
+ stroke: var(--color-surface-3);
87
+ }
88
+
89
+ .circular-indicator_vOHIVq {
90
+ fill: none;
91
+ stroke: var(--color-accent);
92
+ stroke-linecap: round;
93
+ transition: stroke-dashoffset var(--duration-slower) var(--easing-standard);
94
+ }
95
+
96
+ .circular-indicator_vOHIVq[data-meter-state="optimum"] {
97
+ stroke: var(--color-success-solid);
98
+ }
99
+
100
+ .circular-indicator_vOHIVq[data-meter-state="suboptimal"] {
101
+ stroke: var(--color-warning-solid);
102
+ }
103
+
104
+ .circular-indicator_vOHIVq[data-meter-state="critical"] {
105
+ stroke: var(--color-error-solid);
106
+ }
107
+
108
+ .circular-center_vOHIVq {
109
+ justify-content: center;
110
+ align-items: center;
111
+ gap: var(--space-0-5);
112
+ flex-direction: column;
113
+ display: flex;
114
+ }
115
+
116
+ .circular-value_vOHIVq {
117
+ font-family: var(--font-mono);
118
+ font-weight: var(--font-weight-semibold);
119
+ color: var(--color-primary);
120
+ line-height: 1;
121
+ }
122
+
123
+ .circular-label_vOHIVq {
124
+ font-family: var(--font-mono);
125
+ color: var(--color-secondary);
126
+ line-height: 1;
127
+ }
128
+
129
+ .circular-sm_vOHIVq .circular-value_vOHIVq {
130
+ font-size: var(--font-size-sm);
131
+ }
132
+
133
+ .circular-sm_vOHIVq .circular-label_vOHIVq {
134
+ font-size: var(--font-size-xs);
135
+ }
136
+
137
+ .circular-md_vOHIVq .circular-value_vOHIVq {
138
+ font-size: var(--font-size-xl);
139
+ }
140
+
141
+ .circular-md_vOHIVq .circular-label_vOHIVq {
142
+ font-size: var(--font-size-xs);
143
+ }
144
+
145
+ .circular-lg_vOHIVq .circular-value_vOHIVq {
146
+ font-size: var(--font-size-2xl);
147
+ }
148
+
149
+ .circular-lg_vOHIVq .circular-label_vOHIVq {
150
+ font-size: var(--font-size-sm);
151
+ }
152
+ }
@@ -0,0 +1,58 @@
1
+ import * as react_jsx_runtime0 from "react/jsx-runtime";
2
+ import { ReactNode } from "react";
3
+ import styles from "./meter.module.css";
4
+
5
+ //#region src/meter/meter.d.ts
6
+ type MeterSize = "sm" | "md" | "lg";
7
+ interface MeterProps {
8
+ /** Current value. Must be between `min` and `max`. */
9
+ value: number;
10
+ /** Minimum value of the range. @default 0 */
11
+ min?: number;
12
+ /** Maximum value of the range. @default 100 */
13
+ max?: number;
14
+ /** Upper boundary of the low zone. Values ≤ this are "low". */
15
+ low?: number;
16
+ /** Lower boundary of the high zone. Values ≥ this are "high". */
17
+ high?: number;
18
+ /**
19
+ * Which zone is optimal — determines fill colour:
20
+ * - `"high"` (default) → high=green, mid=amber, low=red (battery, signal)
21
+ * - `"low"` → low=green, mid=amber, high=red (CPU load, disk)
22
+ * - `"mid"` → mid=green, low/high=amber (temperature)
23
+ */
24
+ optimum?: "low" | "mid" | "high";
25
+ /** Accessible + visible label. */
26
+ label?: ReactNode;
27
+ /** Show the formatted value next to the label. @default false */
28
+ showValue?: boolean;
29
+ /** `Intl.NumberFormatOptions` for value formatting. */
30
+ format?: Intl.NumberFormatOptions;
31
+ /** Show tick marks at low/high threshold positions. @default false */
32
+ showTicks?: boolean;
33
+ /** Bar thickness. @default "md" */
34
+ size?: MeterSize;
35
+ className?: string;
36
+ }
37
+ /**
38
+ * Displays a scalar measurement within a known range. Use `low` / `high` /
39
+ * `optimum` thresholds to colour the fill based on whether the value is in
40
+ * an optimal, suboptimal, or critical zone.
41
+ */
42
+ declare function Meter({
43
+ value,
44
+ min,
45
+ max,
46
+ low,
47
+ high,
48
+ optimum,
49
+ label,
50
+ showValue,
51
+ format,
52
+ showTicks,
53
+ size,
54
+ className
55
+ }: MeterProps): react_jsx_runtime0.JSX.Element;
56
+ //#endregion
57
+ export { Meter, MeterProps, MeterSize, styles };
58
+ //# sourceMappingURL=meter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meter.d.ts","names":[],"sources":["../../src/meter/meter.tsx"],"mappings":";;;;;KAKY,SAAA;AAAA,UAEK,UAAA;;EAEf,KAAA;EAJmB;EAMnB,GAAA;EANmB;EAQnB,GAAA;EANe;EAQf,GAAA;;EAEA,IAAA;EAaS;;;;;;EANT,OAAA;EATA;EAWA,KAAA,GAAQ,SAAA;EAFR;EAIA,SAAA;EAFQ;EAIR,MAAA,GAAS,IAAA,CAAK,mBAAA;EAAd;EAEA,SAAA;EAFc;EAId,IAAA,GAAO,SAAA;EACP,SAAA;AAAA;;;;AAQF;;iBAAgB,KAAA,CAAA;EACd,KAAA;EACA,GAAA;EACA,GAAA;EACA,GAAA;EACA,IAAA;EACA,OAAA;EACA,KAAA;EACA,SAAA;EACA,MAAA;EACA,SAAA;EACA,IAAA;EACA;AAAA,GACC,UAAA,GAAU,kBAAA,CAAA,GAAA,CAAA,OAAA"}
@@ -0,0 +1,50 @@
1
+ import meter_module_default from "./meter.module.js";
2
+ import { getMeterState } from "./meterState.js";
3
+ import { jsx, jsxs } from "react/jsx-runtime";
4
+ import { Meter } from "@base-ui/react/meter";
5
+ //#region src/meter/meter.tsx
6
+ /**
7
+ * Displays a scalar measurement within a known range. Use `low` / `high` /
8
+ * `optimum` thresholds to colour the fill based on whether the value is in
9
+ * an optimal, suboptimal, or critical zone.
10
+ */
11
+ function Meter$1({ value, min = 0, max = 100, low, high, optimum = "high", label, showValue = false, format, showTicks = false, size = "md", className = "" }) {
12
+ const clampedValue = Math.min(Math.max(value, min), max);
13
+ const state = getMeterState(clampedValue, min, max, low, high, optimum);
14
+ const lowPct = low != null ? (low - min) / (max - min) * 100 : null;
15
+ const highPct = high != null ? (high - min) / (max - min) * 100 : null;
16
+ return /* @__PURE__ */ jsxs(Meter.Root, {
17
+ value: clampedValue,
18
+ min,
19
+ max,
20
+ ...format !== void 0 && { format },
21
+ className: `${meter_module_default.root} ${className}`,
22
+ children: [(label != null || showValue) && /* @__PURE__ */ jsxs("div", {
23
+ className: meter_module_default["label-row"],
24
+ children: [label != null && /* @__PURE__ */ jsx(Meter.Label, {
25
+ className: meter_module_default.label,
26
+ children: label
27
+ }), showValue && /* @__PURE__ */ jsx(Meter.Value, { className: meter_module_default.value })]
28
+ }), /* @__PURE__ */ jsxs(Meter.Track, {
29
+ className: `${meter_module_default.track} ${meter_module_default[`track-${size}`]}`,
30
+ children: [
31
+ /* @__PURE__ */ jsx(Meter.Indicator, {
32
+ className: meter_module_default.indicator,
33
+ "data-meter-state": state
34
+ }),
35
+ showTicks && lowPct != null && /* @__PURE__ */ jsx("div", {
36
+ className: meter_module_default.tick,
37
+ style: { left: `${lowPct}%` }
38
+ }),
39
+ showTicks && highPct != null && /* @__PURE__ */ jsx("div", {
40
+ className: meter_module_default.tick,
41
+ style: { left: `${highPct}%` }
42
+ })
43
+ ]
44
+ })]
45
+ });
46
+ }
47
+ //#endregion
48
+ export { Meter$1 as Meter };
49
+
50
+ //# sourceMappingURL=meter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meter.js","names":["Meter","BaseMeter","styles"],"sources":["../../src/meter/meter.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { Meter as BaseMeter } from \"@base-ui/react/meter\";\nimport styles from \"./meter.module.css\";\nimport { getMeterState } from \"./meterState\";\n\nexport type MeterSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface MeterProps {\n /** Current value. Must be between `min` and `max`. */\n value: number;\n /** Minimum value of the range. @default 0 */\n min?: number;\n /** Maximum value of the range. @default 100 */\n max?: number;\n /** Upper boundary of the low zone. Values ≤ this are \"low\". */\n low?: number;\n /** Lower boundary of the high zone. Values ≥ this are \"high\". */\n high?: number;\n /**\n * Which zone is optimal — determines fill colour:\n * - `\"high\"` (default) → high=green, mid=amber, low=red (battery, signal)\n * - `\"low\"` → low=green, mid=amber, high=red (CPU load, disk)\n * - `\"mid\"` → mid=green, low/high=amber (temperature)\n */\n optimum?: \"low\" | \"mid\" | \"high\";\n /** Accessible + visible label. */\n label?: ReactNode;\n /** Show the formatted value next to the label. @default false */\n showValue?: boolean;\n /** `Intl.NumberFormatOptions` for value formatting. */\n format?: Intl.NumberFormatOptions;\n /** Show tick marks at low/high threshold positions. @default false */\n showTicks?: boolean;\n /** Bar thickness. @default \"md\" */\n size?: MeterSize;\n className?: string;\n}\n\n/**\n * Displays a scalar measurement within a known range. Use `low` / `high` /\n * `optimum` thresholds to colour the fill based on whether the value is in\n * an optimal, suboptimal, or critical zone.\n */\nexport function Meter({\n value,\n min = 0,\n max = 100,\n low,\n high,\n optimum = \"high\",\n label,\n showValue = false,\n format,\n showTicks = false,\n size = \"md\",\n className = \"\",\n}: MeterProps) {\n const clampedValue = Math.min(Math.max(value, min), max);\n const state = getMeterState(clampedValue, min, max, low, high, optimum);\n const lowPct = low != null ? ((low - min) / (max - min)) * 100 : null;\n const highPct = high != null ? ((high - min) / (max - min)) * 100 : null;\n\n return (\n <BaseMeter.Root\n value={clampedValue}\n min={min}\n max={max}\n {...(format !== undefined && { format })}\n className={`${styles.root} ${className}`}\n >\n {(label != null || showValue) && (\n <div className={styles[\"label-row\"]}>\n {label != null && <BaseMeter.Label className={styles.label}>{label}</BaseMeter.Label>}\n {showValue && <BaseMeter.Value className={styles.value} />}\n </div>\n )}\n <BaseMeter.Track className={`${styles.track} ${styles[`track-${size}`]}`}>\n <BaseMeter.Indicator className={styles.indicator} data-meter-state={state} />\n {showTicks && lowPct != null && <div className={styles.tick} style={{ left: `${lowPct}%` }} />}\n {showTicks && highPct != null && <div className={styles.tick} style={{ left: `${highPct}%` }} />}\n </BaseMeter.Track>\n </BaseMeter.Root>\n );\n}\n\nexport { styles as MeterStyles };\n"],"mappings":";;;;;;;;;;AA2CA,SAAgBA,QAAM,EACpB,OACA,MAAM,GACN,MAAM,KACN,KACA,MACA,UAAU,QACV,OACA,YAAY,OACZ,QACA,YAAY,OACZ,OAAO,MACP,YAAY,MACC;CACb,MAAM,eAAe,KAAK,IAAI,KAAK,IAAI,OAAO,IAAI,EAAE,IAAI;CACxD,MAAM,QAAQ,cAAc,cAAc,KAAK,KAAK,KAAK,MAAM,QAAQ;CACvE,MAAM,SAAS,OAAO,QAAS,MAAM,QAAQ,MAAM,OAAQ,MAAM;CACjE,MAAM,UAAU,QAAQ,QAAS,OAAO,QAAQ,MAAM,OAAQ,MAAM;AAEpE,QACE,qBAACC,MAAU,MAAX;EACE,OAAO;EACF;EACA;EACL,GAAK,WAAW,KAAA,KAAa,EAAE,QAAQ;EACvC,WAAW,GAAGC,qBAAO,KAAK,GAAG;YAL/B,EAOI,SAAS,QAAQ,cACjB,qBAAC,OAAD;GAAK,WAAWA,qBAAO;aAAvB,CACG,SAAS,QAAQ,oBAACD,MAAU,OAAX;IAAiB,WAAWC,qBAAO;cAAQ;IAAwB,CAAA,EACpF,aAAa,oBAACD,MAAU,OAAX,EAAiB,WAAWC,qBAAO,OAAS,CAAA,CACtD;MAER,qBAACD,MAAU,OAAX;GAAiB,WAAW,GAAGC,qBAAO,MAAM,GAAGA,qBAAO,SAAS;aAA/D;IACE,oBAACD,MAAU,WAAX;KAAqB,WAAWC,qBAAO;KAAW,oBAAkB;KAAS,CAAA;IAC5E,aAAa,UAAU,QAAQ,oBAAC,OAAD;KAAK,WAAWA,qBAAO;KAAM,OAAO,EAAE,MAAM,GAAG,OAAO,IAAI;KAAI,CAAA;IAC7F,aAAa,WAAW,QAAQ,oBAAC,OAAD;KAAK,WAAWA,qBAAO;KAAM,OAAO,EAAE,MAAM,GAAG,QAAQ,IAAI;KAAI,CAAA;IAChF;KACH"}
@@ -0,0 +1,2 @@
1
+ declare const styles: Record<string, string | undefined>;
2
+ export default styles;
@@ -0,0 +1,27 @@
1
+ //#region src/meter/meter.module.css
2
+ var meter_module_default = {
3
+ "circular-center": "circular-center_vOHIVq",
4
+ "circular-indicator": "circular-indicator_vOHIVq",
5
+ "circular-label": "circular-label_vOHIVq",
6
+ "circular-lg": "circular-lg_vOHIVq",
7
+ "circular-md": "circular-md_vOHIVq",
8
+ "circular-root": "circular-root_vOHIVq",
9
+ "circular-sm": "circular-sm_vOHIVq",
10
+ "circular-svg": "circular-svg_vOHIVq",
11
+ "circular-track": "circular-track_vOHIVq",
12
+ "circular-value": "circular-value_vOHIVq",
13
+ "indicator": "indicator_vOHIVq",
14
+ "label": "label_vOHIVq",
15
+ "label-row": "label-row_vOHIVq",
16
+ "root": "root_vOHIVq",
17
+ "tick": "tick_vOHIVq",
18
+ "track": "track_vOHIVq",
19
+ "track-lg": "track-lg_vOHIVq",
20
+ "track-md": "track-md_vOHIVq",
21
+ "track-sm": "track-sm_vOHIVq",
22
+ "value": "value_vOHIVq"
23
+ };
24
+ //#endregion
25
+ export { meter_module_default as default };
26
+
27
+ //# sourceMappingURL=meter.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meter.module.js","names":[],"sources":["../../src/meter/meter.module.css"],"sourcesContent":["@layer components {\n .root {\n display: flex;\n flex-direction: column;\n gap: var(--space-1-5);\n width: 100%;\n }\n\n /* ── Label row ──────────────────────────────────────────────────── */\n\n .label-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n font-family: var(--font-mono);\n font-size: var(--font-size-xs);\n color: var(--color-secondary);\n }\n\n .label {\n font-family: var(--font-mono);\n font-size: var(--font-size-xs);\n color: var(--color-secondary);\n }\n\n .value {\n font-family: var(--font-mono);\n font-size: var(--font-size-xs);\n color: var(--color-secondary);\n }\n\n /* ── Track (the outer bar) ──────────────────────────────────────── */\n\n .track {\n position: relative;\n width: 100%;\n background-color: var(--color-surface-3);\n border-radius: var(--radius-full);\n overflow: hidden;\n }\n\n .track-sm {\n height: 4px;\n }\n .track-md {\n height: 6px;\n }\n .track-lg {\n height: 8px;\n }\n\n /* ── Indicator (the fill) ───────────────────────────────────────── */\n\n .indicator {\n height: 100%;\n border-radius: var(--radius-full);\n background-color: var(--color-accent);\n transition: width var(--duration-slower) var(--easing-standard);\n }\n\n /* Threshold-based colours — driven by data attributes set in JS */\n .indicator[data-meter-state=\"optimum\"] {\n background-color: var(--color-success-solid);\n }\n .indicator[data-meter-state=\"suboptimal\"] {\n background-color: var(--color-warning-solid);\n }\n .indicator[data-meter-state=\"critical\"] {\n background-color: var(--color-error-solid);\n }\n\n /* ── Tick marks for low / high thresholds ───────────────────────── */\n\n .tick {\n position: absolute;\n top: 0;\n bottom: 0;\n width: 1px;\n background-color: var(--color-canvas);\n opacity: 0.6;\n pointer-events: none;\n }\n\n /* ── Circular gauge ─────────────────────────────────────────────── */\n\n .circular-root {\n display: inline-flex;\n flex-direction: column;\n align-items: center;\n gap: var(--space-1-5);\n }\n\n .circular-svg {\n overflow: visible;\n }\n\n /* Track ring */\n .circular-track {\n fill: none;\n stroke: var(--color-surface-3);\n }\n\n /* Value arc */\n .circular-indicator {\n fill: none;\n stroke: var(--color-accent);\n stroke-linecap: round;\n transition: stroke-dashoffset var(--duration-slower) var(--easing-standard);\n }\n\n .circular-indicator[data-meter-state=\"optimum\"] {\n stroke: var(--color-success-solid);\n }\n .circular-indicator[data-meter-state=\"suboptimal\"] {\n stroke: var(--color-warning-solid);\n }\n .circular-indicator[data-meter-state=\"critical\"] {\n stroke: var(--color-error-solid);\n }\n\n /* Centre text stack */\n .circular-center {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: var(--space-0-5);\n }\n\n .circular-value {\n font-family: var(--font-mono);\n font-weight: var(--font-weight-semibold);\n color: var(--color-primary);\n line-height: 1;\n }\n\n .circular-label {\n font-family: var(--font-mono);\n color: var(--color-secondary);\n line-height: 1;\n }\n\n /* Size variants */\n .circular-sm .circular-value {\n font-size: var(--font-size-sm);\n }\n .circular-sm .circular-label {\n font-size: var(--font-size-xs);\n }\n .circular-md .circular-value {\n font-size: var(--font-size-xl);\n }\n .circular-md .circular-label {\n font-size: var(--font-size-xs);\n }\n .circular-lg .circular-value {\n font-size: var(--font-size-2xl);\n }\n .circular-lg .circular-label {\n font-size: var(--font-size-sm);\n }\n}\n"],"mappings":""}
@@ -0,0 +1,18 @@
1
+ //#region src/meter/meterState.ts
2
+ /**
3
+ * Derives the semantic zone from value + thresholds,
4
+ * following the HTML <meter> spec colouring algorithm.
5
+ *
6
+ * Returns undefined when no thresholds are defined (plain accent colour).
7
+ */
8
+ function getMeterState(value, min, max, low, high, optimum) {
9
+ if (low === void 0 && high === void 0) return void 0;
10
+ const zone = value <= (low ?? min) ? "low" : value >= (high ?? max) ? "high" : "mid";
11
+ if (zone === optimum) return "optimum";
12
+ if (optimum === "mid") return "suboptimal";
13
+ return zone === "mid" ? "suboptimal" : "critical";
14
+ }
15
+ //#endregion
16
+ export { getMeterState };
17
+
18
+ //# sourceMappingURL=meterState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meterState.js","names":[],"sources":["../../src/meter/meterState.ts"],"sourcesContent":["/**\n * Derives the semantic zone from value + thresholds,\n * following the HTML <meter> spec colouring algorithm.\n *\n * Returns undefined when no thresholds are defined (plain accent colour).\n */\nexport function getMeterState(\n value: number,\n min: number,\n max: number,\n low: number | undefined,\n high: number | undefined,\n optimum: \"low\" | \"mid\" | \"high\",\n): \"optimum\" | \"suboptimal\" | \"critical\" | undefined {\n if (low === undefined && high === undefined) return undefined;\n\n const effectiveLow = low ?? min;\n const effectiveHigh = high ?? max;\n\n const zone: \"low\" | \"mid\" | \"high\" = value <= effectiveLow ? \"low\" : value >= effectiveHigh ? \"high\" : \"mid\";\n\n if (zone === optimum) return \"optimum\";\n\n // \"mid\" optimum → no critical zone, extremes are equally suboptimal\n if (optimum === \"mid\") return \"suboptimal\";\n\n // \"low\" or \"high\" optimum → adjacent zone = suboptimal, far end = critical\n return zone === \"mid\" ? \"suboptimal\" : \"critical\";\n}\n"],"mappings":";;;;;;;AAMA,SAAgB,cACd,OACA,KACA,KACA,KACA,MACA,SACmD;AACnD,KAAI,QAAQ,KAAA,KAAa,SAAS,KAAA,EAAW,QAAO,KAAA;CAKpD,MAAM,OAA+B,UAHhB,OAAO,OAGiC,QAAQ,UAF/C,QAAQ,OAEgE,SAAS;AAEvG,KAAI,SAAS,QAAS,QAAO;AAG7B,KAAI,YAAY,MAAO,QAAO;AAG9B,QAAO,SAAS,QAAQ,eAAe"}
@@ -0,0 +1,31 @@
1
+ import * as react from "react";
2
+ import { ComponentPropsWithoutRef } from "react";
3
+ import { Meter } from "@base-ui/react/meter";
4
+
5
+ //#region src/meter/parts.d.ts
6
+ type BaseTrackProps = ComponentPropsWithoutRef<typeof Meter.Track>;
7
+ type BaseIndicatorProps = ComponentPropsWithoutRef<typeof Meter.Indicator>;
8
+ type BaseLabelProps = ComponentPropsWithoutRef<typeof Meter.Label>;
9
+ type BaseValueProps = ComponentPropsWithoutRef<typeof Meter.Value>;
10
+ interface MeterTrackProps extends Omit<BaseTrackProps, "className"> {
11
+ className?: string;
12
+ size?: "sm" | "md" | "lg";
13
+ }
14
+ interface MeterIndicatorProps extends Omit<BaseIndicatorProps, "className"> {
15
+ className?: string;
16
+ /** Threshold state — controls fill colour. Set automatically by the high-level Meter wrapper. */
17
+ "data-meter-state"?: "optimum" | "suboptimal" | "critical";
18
+ }
19
+ interface MeterLabelProps extends Omit<BaseLabelProps, "className"> {
20
+ className?: string;
21
+ }
22
+ interface MeterValueProps extends Omit<BaseValueProps, "className"> {
23
+ className?: string;
24
+ }
25
+ declare const MeterTrack: react.ForwardRefExoticComponent<MeterTrackProps & react.RefAttributes<HTMLDivElement>>;
26
+ declare const MeterIndicator: react.ForwardRefExoticComponent<MeterIndicatorProps & react.RefAttributes<HTMLDivElement>>;
27
+ declare const MeterLabel: react.ForwardRefExoticComponent<MeterLabelProps & react.RefAttributes<HTMLSpanElement>>;
28
+ declare const MeterValue: react.ForwardRefExoticComponent<MeterValueProps & react.RefAttributes<HTMLSpanElement>>;
29
+ //#endregion
30
+ export { MeterIndicator, MeterIndicatorProps, MeterLabel, MeterLabelProps, MeterTrack, MeterTrackProps, MeterValue, MeterValueProps };
31
+ //# sourceMappingURL=parts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parts.d.ts","names":[],"sources":["../../src/meter/parts.tsx"],"mappings":";;;;;KAwBK,cAAA,GAAiB,wBAAA,QAAgC,KAAA,CAAU,KAAA;AAAA,KAC3D,kBAAA,GAAqB,wBAAA,QAAgC,KAAA,CAAU,SAAA;AAAA,KAC/D,cAAA,GAAiB,wBAAA,QAAgC,KAAA,CAAU,KAAA;AAAA,KAC3D,cAAA,GAAiB,wBAAA,QAAgC,KAAA,CAAU,KAAA;AAAA,UAE/C,eAAA,SAAwB,IAAA,CAAK,cAAA;EAC5C,SAAA;EACA,IAAA;AAAA;AAAA,UAEe,mBAAA,SAA4B,IAAA,CAAK,kBAAA;EAChD,SAAA;EAVmE;EAYnE,kBAAA;AAAA;AAAA,UAEe,eAAA,SAAwB,IAAA,CAAK,cAAA;EAC5C,SAAA;AAAA;AAAA,UAEe,eAAA,SAAwB,IAAA,CAAK,cAAA;EAC5C,SAAA;AAAA;AAAA,cAGW,UAAA,EAAU,KAAA,CAAA,yBAAA,CAAA,eAAA,GAAA,KAAA,CAAA,aAAA,CAAA,cAAA;AAAA,cAOV,cAAA,EAAc,KAAA,CAAA,yBAAA,CAAA,mBAAA,GAAA,KAAA,CAAA,aAAA,CAAA,cAAA;AAAA,cAOd,UAAA,EAAU,KAAA,CAAA,yBAAA,CAAA,eAAA,GAAA,KAAA,CAAA,aAAA,CAAA,eAAA;AAAA,cAOV,UAAA,EAAU,KAAA,CAAA,yBAAA,CAAA,eAAA,GAAA,KAAA,CAAA,aAAA,CAAA,eAAA"}
@@ -0,0 +1,56 @@
1
+ import meter_module_default from "./meter.module.js";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import { forwardRef } from "react";
4
+ import { Meter } from "@base-ui/react/meter";
5
+ //#region src/meter/parts.tsx
6
+ /**
7
+ * Styled primitives for Meter.
8
+ *
9
+ * @example
10
+ * ```tsx
11
+ * import { Meter } from '@base-ui/react/meter';
12
+ * import { MeterTrack, MeterIndicator, MeterLabel, MeterValue } from '@brijbyte/agentic-ui/meter';
13
+ *
14
+ * <Meter.Root value={68} min={0} max={100}>
15
+ * <div style={{ display: 'flex', justifyContent: 'space-between' }}>
16
+ * <MeterLabel>Storage</MeterLabel>
17
+ * <MeterValue />
18
+ * </div>
19
+ * <MeterTrack>
20
+ * <MeterIndicator />
21
+ * </MeterTrack>
22
+ * </Meter.Root>
23
+ * ```
24
+ */
25
+ const MeterTrack = forwardRef(function MeterTrack({ className, size = "md", ...props }, ref) {
26
+ return /* @__PURE__ */ jsx(Meter.Track, {
27
+ ref,
28
+ className: `${meter_module_default.track} ${meter_module_default[`track-${size}`]} ${className ?? ""}`,
29
+ ...props
30
+ });
31
+ });
32
+ const MeterIndicator = forwardRef(function MeterIndicator({ className, ...props }, ref) {
33
+ return /* @__PURE__ */ jsx(Meter.Indicator, {
34
+ ref,
35
+ className: `${meter_module_default.indicator} ${className ?? ""}`,
36
+ ...props
37
+ });
38
+ });
39
+ const MeterLabel = forwardRef(function MeterLabel({ className, ...props }, ref) {
40
+ return /* @__PURE__ */ jsx(Meter.Label, {
41
+ ref,
42
+ className: `${meter_module_default.label} ${className ?? ""}`,
43
+ ...props
44
+ });
45
+ });
46
+ const MeterValue = forwardRef(function MeterValue({ className, ...props }, ref) {
47
+ return /* @__PURE__ */ jsx(Meter.Value, {
48
+ ref,
49
+ className: `${meter_module_default.value} ${className ?? ""}`,
50
+ ...props
51
+ });
52
+ });
53
+ //#endregion
54
+ export { MeterIndicator, MeterLabel, MeterTrack, MeterValue };
55
+
56
+ //# sourceMappingURL=parts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parts.js","names":["BaseMeter","styles"],"sources":["../../src/meter/parts.tsx"],"sourcesContent":["/**\n * Styled primitives for Meter.\n *\n * @example\n * ```tsx\n * import { Meter } from '@base-ui/react/meter';\n * import { MeterTrack, MeterIndicator, MeterLabel, MeterValue } from '@brijbyte/agentic-ui/meter';\n *\n * <Meter.Root value={68} min={0} max={100}>\n * <div style={{ display: 'flex', justifyContent: 'space-between' }}>\n * <MeterLabel>Storage</MeterLabel>\n * <MeterValue />\n * </div>\n * <MeterTrack>\n * <MeterIndicator />\n * </MeterTrack>\n * </Meter.Root>\n * ```\n */\nimport { forwardRef } from \"react\";\nimport type { ComponentRef, ComponentPropsWithoutRef } from \"react\";\nimport { Meter as BaseMeter } from \"@base-ui/react/meter\";\nimport styles from \"./meter.module.css\";\n\ntype BaseTrackProps = ComponentPropsWithoutRef<typeof BaseMeter.Track>;\ntype BaseIndicatorProps = ComponentPropsWithoutRef<typeof BaseMeter.Indicator>;\ntype BaseLabelProps = ComponentPropsWithoutRef<typeof BaseMeter.Label>;\ntype BaseValueProps = ComponentPropsWithoutRef<typeof BaseMeter.Value>;\n\nexport interface MeterTrackProps extends Omit<BaseTrackProps, \"className\"> {\n className?: string;\n size?: \"sm\" | \"md\" | \"lg\";\n}\nexport interface MeterIndicatorProps extends Omit<BaseIndicatorProps, \"className\"> {\n className?: string;\n /** Threshold state — controls fill colour. Set automatically by the high-level Meter wrapper. */\n \"data-meter-state\"?: \"optimum\" | \"suboptimal\" | \"critical\";\n}\nexport interface MeterLabelProps extends Omit<BaseLabelProps, \"className\"> {\n className?: string;\n}\nexport interface MeterValueProps extends Omit<BaseValueProps, \"className\"> {\n className?: string;\n}\n\nexport const MeterTrack = forwardRef<ComponentRef<typeof BaseMeter.Track>, MeterTrackProps>(function MeterTrack(\n { className, size = \"md\", ...props },\n ref,\n) {\n return <BaseMeter.Track ref={ref} className={`${styles.track} ${styles[`track-${size}`]} ${className ?? \"\"}`} {...props} />;\n});\n\nexport const MeterIndicator = forwardRef<ComponentRef<typeof BaseMeter.Indicator>, MeterIndicatorProps>(function MeterIndicator(\n { className, ...props },\n ref,\n) {\n return <BaseMeter.Indicator ref={ref} className={`${styles.indicator} ${className ?? \"\"}`} {...props} />;\n});\n\nexport const MeterLabel = forwardRef<ComponentRef<typeof BaseMeter.Label>, MeterLabelProps>(function MeterLabel(\n { className, ...props },\n ref,\n) {\n return <BaseMeter.Label ref={ref} className={`${styles.label} ${className ?? \"\"}`} {...props} />;\n});\n\nexport const MeterValue = forwardRef<ComponentRef<typeof BaseMeter.Value>, MeterValueProps>(function MeterValue(\n { className, ...props },\n ref,\n) {\n return <BaseMeter.Value ref={ref} className={`${styles.value} ${className ?? \"\"}`} {...props} />;\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AA6CA,MAAa,aAAa,WAAkE,SAAS,WACnG,EAAE,WAAW,OAAO,MAAM,GAAG,SAC7B,KACA;AACA,QAAO,oBAACA,MAAU,OAAX;EAAsB;EAAK,WAAW,GAAGC,qBAAO,MAAM,GAAGA,qBAAO,SAAS,QAAQ,GAAG,aAAa;EAAM,GAAI;EAAS,CAAA;EAC3H;AAEF,MAAa,iBAAiB,WAA0E,SAAS,eAC/G,EAAE,WAAW,GAAG,SAChB,KACA;AACA,QAAO,oBAACD,MAAU,WAAX;EAA0B;EAAK,WAAW,GAAGC,qBAAO,UAAU,GAAG,aAAa;EAAM,GAAI;EAAS,CAAA;EACxG;AAEF,MAAa,aAAa,WAAkE,SAAS,WACnG,EAAE,WAAW,GAAG,SAChB,KACA;AACA,QAAO,oBAACD,MAAU,OAAX;EAAsB;EAAK,WAAW,GAAGC,qBAAO,MAAM,GAAG,aAAa;EAAM,GAAI;EAAS,CAAA;EAChG;AAEF,MAAa,aAAa,WAAkE,SAAS,WACnG,EAAE,WAAW,GAAG,SAChB,KACA;AACA,QAAO,oBAACD,MAAU,OAAX;EAAsB;EAAK,WAAW,GAAGC,qBAAO,MAAM,GAAG,aAAa;EAAM,GAAI;EAAS,CAAA;EAChG"}
@@ -6,20 +6,36 @@ import styles from "./number-field.module.css";
6
6
  interface NumberFieldProps {
7
7
  /** Visible label text. When present a scrub-area is also rendered. */
8
8
  label?: ReactNode;
9
+ /** Initial value (uncontrolled). */
9
10
  defaultValue?: number;
11
+ /** Current value (controlled). `null` when the field is empty. */
10
12
  value?: number | null;
13
+ /** Called when the value changes. */
11
14
  onValueChange?: (value: number | null) => void;
15
+ /** Minimum allowed value. */
12
16
  min?: number;
17
+ /** Maximum allowed value. */
13
18
  max?: number;
19
+ /** Increment/decrement step size. @default 1 */
14
20
  step?: number;
21
+ /** Prevent interaction. */
15
22
  disabled?: boolean;
23
+ /** Allow reading but not editing. */
16
24
  readOnly?: boolean;
25
+ /** Mark the field as required for form validation. */
17
26
  required?: boolean;
27
+ /** HTML name attribute for form submission. */
18
28
  name?: string;
29
+ /** `Intl.NumberFormatOptions` for display formatting. */
19
30
  format?: Intl.NumberFormatOptions;
31
+ /** Allow changing the value by scrolling the mouse wheel. */
20
32
  allowWheelScrub?: boolean;
21
33
  className?: string;
22
34
  }
35
+ /**
36
+ * A numeric input with stepper buttons and a scrub area. Supports min/max
37
+ * clamping, step size, locale-aware formatting, and keyboard/scroll input.
38
+ */
23
39
  declare function NumberField({
24
40
  label,
25
41
  className,
@@ -1 +1 @@
1
- {"version":3,"file":"number-field.d.ts","names":[],"sources":["../../src/number-field/number-field.tsx"],"mappings":";;;;;UAKiB,gBAAA;;EAEf,KAAA,GAAQ,SAAA;EACR,YAAA;EACA,KAAA;EACA,aAAA,IAAiB,KAAA;EACjB,GAAA;EACA,GAAA;EACA,IAAA;EACA,QAAA;EACA,QAAA;EACA,QAAA;EACA,IAAA;EACA,MAAA,GAAS,IAAA,CAAK,mBAAA;EACd,eAAA;EACA,SAAA;AAAA;AAAA,iBA2Bc,WAAA,CAAA;EAAc,KAAA;EAAO,SAAA;EAAW,aAAA;EAAA,GAAkB;AAAA,GAAS,gBAAA,GAAgB,kBAAA,CAAA,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"number-field.d.ts","names":[],"sources":["../../src/number-field/number-field.tsx"],"mappings":";;;;;UAKiB,gBAAA;;EAEf,KAAA,GAAQ,SAAA;EAFO;EAIf,YAAA;;EAEA,KAAA;EAJA;EAMA,aAAA,IAAiB,KAAA;EAJjB;EAMA,GAAA;EAFA;EAIA,GAAA;EAFA;EAIA,IAAA;EAAA;EAEA,QAAA;EAEA;EAAA,QAAA;EAIA;EAFA,QAAA;EAIS;EAFT,IAAA;EAIA;EAFA,MAAA,GAAS,IAAA,CAAK,mBAAA;EAGL;EADT,eAAA;EACA,SAAA;AAAA;;;;;iBA+Bc,WAAA,CAAA;EAAc,KAAA;EAAO,SAAA;EAAW,aAAA;EAAA,GAAkB;AAAA,GAAS,gBAAA,GAAgB,kBAAA,CAAA,GAAA,CAAA,OAAA"}
@@ -39,6 +39,10 @@ function ScrubCursorIcon() {
39
39
  children: /* @__PURE__ */ jsx("path", { d: "M19.5 5.5L6.49737 5.51844V2L1 6.9999L6.5 12L6.49737 8.5L19.5 8.5V12L25 6.9999L19.5 2V5.5Z" })
40
40
  });
41
41
  }
42
+ /**
43
+ * A numeric input with stepper buttons and a scrub area. Supports min/max
44
+ * clamping, step size, locale-aware formatting, and keyboard/scroll input.
45
+ */
42
46
  function NumberField$1({ label, className, onValueChange, ...props }) {
43
47
  const id = useId();
44
48
  return /* @__PURE__ */ jsxs(NumberField.Root, {
@@ -1 +1 @@
1
- {"version":3,"file":"number-field.js","names":["NumberField","BaseNumberField","styles"],"sources":["../../src/number-field/number-field.tsx"],"sourcesContent":["import { useId } from \"react\";\nimport type { ReactNode } from \"react\";\nimport { NumberField as BaseNumberField } from \"@base-ui/react/number-field\";\nimport styles from \"./number-field.module.css\";\n\nexport interface NumberFieldProps {\n /** Visible label text. When present a scrub-area is also rendered. */\n label?: ReactNode;\n defaultValue?: number;\n value?: number | null;\n onValueChange?: (value: number | null) => void;\n min?: number;\n max?: number;\n step?: number;\n disabled?: boolean;\n readOnly?: boolean;\n required?: boolean;\n name?: string;\n format?: Intl.NumberFormatOptions;\n allowWheelScrub?: boolean;\n className?: string;\n}\n\nfunction MinusIcon() {\n return (\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.6\" aria-hidden>\n <path d=\"M0 5H10\" />\n </svg>\n );\n}\n\nfunction PlusIcon() {\n return (\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.6\" aria-hidden>\n <path d=\"M0 5H5M10 5H5M5 5V0M5 5V10\" />\n </svg>\n );\n}\n\nfunction ScrubCursorIcon() {\n return (\n <svg width=\"24\" height=\"12\" viewBox=\"0 0 24 14\" fill=\"currentColor\" stroke=\"white\" strokeWidth=\"0.5\" aria-hidden>\n <path d=\"M19.5 5.5L6.49737 5.51844V2L1 6.9999L6.5 12L6.49737 8.5L19.5 8.5V12L25 6.9999L19.5 2V5.5Z\" />\n </svg>\n );\n}\n\nexport function NumberField({ label, className, onValueChange, ...props }: NumberFieldProps) {\n const id = useId();\n\n return (\n <BaseNumberField.Root id={id} className={`${styles.root} ${className ?? \"\"}`} onValueChange={onValueChange as never} {...props}>\n {label && (\n <BaseNumberField.ScrubArea className={styles[\"scrub-area\"]}>\n <label htmlFor={id} className={styles.label}>\n {label}\n </label>\n <BaseNumberField.ScrubAreaCursor className={styles[\"scrub-area-cursor\"]}>\n <ScrubCursorIcon />\n </BaseNumberField.ScrubAreaCursor>\n </BaseNumberField.ScrubArea>\n )}\n <BaseNumberField.Group className={styles.group}>\n <BaseNumberField.Decrement className={`${styles[\"step-button\"]} ${styles.decrement}`}>\n <MinusIcon />\n </BaseNumberField.Decrement>\n <BaseNumberField.Input className={styles.input} />\n <BaseNumberField.Increment className={`${styles[\"step-button\"]} ${styles.increment}`}>\n <PlusIcon />\n </BaseNumberField.Increment>\n </BaseNumberField.Group>\n </BaseNumberField.Root>\n );\n}\nexport { styles as NumberFieldStyles };\n"],"mappings":";;;;;AAuBA,SAAS,YAAY;AACnB,QACE,oBAAC,OAAD;EAAK,OAAM;EAAK,QAAO;EAAK,SAAQ;EAAY,MAAK;EAAO,QAAO;EAAe,aAAY;EAAM,eAAA;YAClG,oBAAC,QAAD,EAAM,GAAE,WAAY,CAAA;EAChB,CAAA;;AAIV,SAAS,WAAW;AAClB,QACE,oBAAC,OAAD;EAAK,OAAM;EAAK,QAAO;EAAK,SAAQ;EAAY,MAAK;EAAO,QAAO;EAAe,aAAY;EAAM,eAAA;YAClG,oBAAC,QAAD,EAAM,GAAE,8BAA+B,CAAA;EACnC,CAAA;;AAIV,SAAS,kBAAkB;AACzB,QACE,oBAAC,OAAD;EAAK,OAAM;EAAK,QAAO;EAAK,SAAQ;EAAY,MAAK;EAAe,QAAO;EAAQ,aAAY;EAAM,eAAA;YACnG,oBAAC,QAAD,EAAM,GAAE,6FAA8F,CAAA;EAClG,CAAA;;AAIV,SAAgBA,cAAY,EAAE,OAAO,WAAW,eAAe,GAAG,SAA2B;CAC3F,MAAM,KAAK,OAAO;AAElB,QACE,qBAACC,YAAgB,MAAjB;EAA0B;EAAI,WAAW,GAAGC,4BAAO,KAAK,GAAG,aAAa;EAAqB;EAAwB,GAAI;YAAzH,CACG,SACC,qBAACD,YAAgB,WAAjB;GAA2B,WAAWC,4BAAO;aAA7C,CACE,oBAAC,SAAD;IAAO,SAAS;IAAI,WAAWA,4BAAO;cACnC;IACK,CAAA,EACR,oBAACD,YAAgB,iBAAjB;IAAiC,WAAWC,4BAAO;cACjD,oBAAC,iBAAD,EAAmB,CAAA;IACa,CAAA,CACR;MAE9B,qBAACD,YAAgB,OAAjB;GAAuB,WAAWC,4BAAO;aAAzC;IACE,oBAACD,YAAgB,WAAjB;KAA2B,WAAW,GAAGC,4BAAO,eAAe,GAAGA,4BAAO;eACvE,oBAAC,WAAD,EAAa,CAAA;KACa,CAAA;IAC5B,oBAACD,YAAgB,OAAjB,EAAuB,WAAWC,4BAAO,OAAS,CAAA;IAClD,oBAACD,YAAgB,WAAjB;KAA2B,WAAW,GAAGC,4BAAO,eAAe,GAAGA,4BAAO;eACvE,oBAAC,UAAD,EAAY,CAAA;KACc,CAAA;IACN;KACH"}
1
+ {"version":3,"file":"number-field.js","names":["NumberField","BaseNumberField","styles"],"sources":["../../src/number-field/number-field.tsx"],"sourcesContent":["import { useId } from \"react\";\nimport type { ReactNode } from \"react\";\nimport { NumberField as BaseNumberField } from \"@base-ui/react/number-field\";\nimport styles from \"./number-field.module.css\";\n\nexport interface NumberFieldProps {\n /** Visible label text. When present a scrub-area is also rendered. */\n label?: ReactNode;\n /** Initial value (uncontrolled). */\n defaultValue?: number;\n /** Current value (controlled). `null` when the field is empty. */\n value?: number | null;\n /** Called when the value changes. */\n onValueChange?: (value: number | null) => void;\n /** Minimum allowed value. */\n min?: number;\n /** Maximum allowed value. */\n max?: number;\n /** Increment/decrement step size. @default 1 */\n step?: number;\n /** Prevent interaction. */\n disabled?: boolean;\n /** Allow reading but not editing. */\n readOnly?: boolean;\n /** Mark the field as required for form validation. */\n required?: boolean;\n /** HTML name attribute for form submission. */\n name?: string;\n /** `Intl.NumberFormatOptions` for display formatting. */\n format?: Intl.NumberFormatOptions;\n /** Allow changing the value by scrolling the mouse wheel. */\n allowWheelScrub?: boolean;\n className?: string;\n}\n\nfunction MinusIcon() {\n return (\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.6\" aria-hidden>\n <path d=\"M0 5H10\" />\n </svg>\n );\n}\n\nfunction PlusIcon() {\n return (\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.6\" aria-hidden>\n <path d=\"M0 5H5M10 5H5M5 5V0M5 5V10\" />\n </svg>\n );\n}\n\nfunction ScrubCursorIcon() {\n return (\n <svg width=\"24\" height=\"12\" viewBox=\"0 0 24 14\" fill=\"currentColor\" stroke=\"white\" strokeWidth=\"0.5\" aria-hidden>\n <path d=\"M19.5 5.5L6.49737 5.51844V2L1 6.9999L6.5 12L6.49737 8.5L19.5 8.5V12L25 6.9999L19.5 2V5.5Z\" />\n </svg>\n );\n}\n\n/**\n * A numeric input with stepper buttons and a scrub area. Supports min/max\n * clamping, step size, locale-aware formatting, and keyboard/scroll input.\n */\nexport function NumberField({ label, className, onValueChange, ...props }: NumberFieldProps) {\n const id = useId();\n\n return (\n <BaseNumberField.Root id={id} className={`${styles.root} ${className ?? \"\"}`} onValueChange={onValueChange as never} {...props}>\n {label && (\n <BaseNumberField.ScrubArea className={styles[\"scrub-area\"]}>\n <label htmlFor={id} className={styles.label}>\n {label}\n </label>\n <BaseNumberField.ScrubAreaCursor className={styles[\"scrub-area-cursor\"]}>\n <ScrubCursorIcon />\n </BaseNumberField.ScrubAreaCursor>\n </BaseNumberField.ScrubArea>\n )}\n <BaseNumberField.Group className={styles.group}>\n <BaseNumberField.Decrement className={`${styles[\"step-button\"]} ${styles.decrement}`}>\n <MinusIcon />\n </BaseNumberField.Decrement>\n <BaseNumberField.Input className={styles.input} />\n <BaseNumberField.Increment className={`${styles[\"step-button\"]} ${styles.increment}`}>\n <PlusIcon />\n </BaseNumberField.Increment>\n </BaseNumberField.Group>\n </BaseNumberField.Root>\n );\n}\nexport { styles as NumberFieldStyles };\n"],"mappings":";;;;;AAmCA,SAAS,YAAY;AACnB,QACE,oBAAC,OAAD;EAAK,OAAM;EAAK,QAAO;EAAK,SAAQ;EAAY,MAAK;EAAO,QAAO;EAAe,aAAY;EAAM,eAAA;YAClG,oBAAC,QAAD,EAAM,GAAE,WAAY,CAAA;EAChB,CAAA;;AAIV,SAAS,WAAW;AAClB,QACE,oBAAC,OAAD;EAAK,OAAM;EAAK,QAAO;EAAK,SAAQ;EAAY,MAAK;EAAO,QAAO;EAAe,aAAY;EAAM,eAAA;YAClG,oBAAC,QAAD,EAAM,GAAE,8BAA+B,CAAA;EACnC,CAAA;;AAIV,SAAS,kBAAkB;AACzB,QACE,oBAAC,OAAD;EAAK,OAAM;EAAK,QAAO;EAAK,SAAQ;EAAY,MAAK;EAAe,QAAO;EAAQ,aAAY;EAAM,eAAA;YACnG,oBAAC,QAAD,EAAM,GAAE,6FAA8F,CAAA;EAClG,CAAA;;;;;;AAQV,SAAgBA,cAAY,EAAE,OAAO,WAAW,eAAe,GAAG,SAA2B;CAC3F,MAAM,KAAK,OAAO;AAElB,QACE,qBAACC,YAAgB,MAAjB;EAA0B;EAAI,WAAW,GAAGC,4BAAO,KAAK,GAAG,aAAa;EAAqB;EAAwB,GAAI;YAAzH,CACG,SACC,qBAACD,YAAgB,WAAjB;GAA2B,WAAWC,4BAAO;aAA7C,CACE,oBAAC,SAAD;IAAO,SAAS;IAAI,WAAWA,4BAAO;cACnC;IACK,CAAA,EACR,oBAACD,YAAgB,iBAAjB;IAAiC,WAAWC,4BAAO;cACjD,oBAAC,iBAAD,EAAmB,CAAA;IACa,CAAA,CACR;MAE9B,qBAACD,YAAgB,OAAjB;GAAuB,WAAWC,4BAAO;aAAzC;IACE,oBAACD,YAAgB,WAAjB;KAA2B,WAAW,GAAGC,4BAAO,eAAe,GAAGA,4BAAO;eACvE,oBAAC,WAAD,EAAa,CAAA;KACa,CAAA;IAC5B,oBAACD,YAAgB,OAAjB,EAAuB,WAAWC,4BAAO,OAAS,CAAA;IAClD,oBAACD,YAAgB,WAAjB;KAA2B,WAAW,GAAGC,4BAAO,eAAe,GAAGA,4BAAO;eACvE,oBAAC,UAAD,EAAY,CAAA;KACc,CAAA;IACN;KACH"}
@@ -0,0 +1,3 @@
1
+ import { Popover, PopoverProps, styles } from "./popover.js";
2
+ import { PopoverArrow, PopoverArrowProps, PopoverClose, PopoverCloseProps, PopoverDescription, PopoverDescriptionProps, PopoverPopup, PopoverPopupProps, PopoverPositioner, PopoverPositionerProps, PopoverTitle, PopoverTitleProps, PopoverViewport, PopoverViewportProps } from "./parts.js";
3
+ export { Popover, PopoverArrow, type PopoverArrowProps, PopoverClose, type PopoverCloseProps, PopoverDescription, type PopoverDescriptionProps, PopoverPopup, type PopoverPopupProps, PopoverPositioner, type PopoverPositionerProps, type PopoverProps, styles as PopoverStyles, PopoverTitle, type PopoverTitleProps, PopoverViewport, type PopoverViewportProps };
@@ -0,0 +1,4 @@
1
+ import popover_module_default from "./popover.module.js";
2
+ import { Popover } from "./popover.js";
3
+ import { PopoverArrow, PopoverClose, PopoverDescription, PopoverPopup, PopoverPositioner, PopoverTitle, PopoverViewport } from "./parts.js";
4
+ export { Popover, PopoverArrow, PopoverClose, PopoverDescription, PopoverPopup, PopoverPositioner, popover_module_default as PopoverStyles, PopoverTitle, PopoverViewport };
@@ -0,0 +1,43 @@
1
+ import * as react from "react";
2
+ import { ComponentPropsWithoutRef } from "react";
3
+ import { Popover } from "@base-ui/react/popover";
4
+
5
+ //#region src/popover/parts.d.ts
6
+ type BasePositionerProps = ComponentPropsWithoutRef<typeof Popover.Positioner>;
7
+ type BasePopupProps = ComponentPropsWithoutRef<typeof Popover.Popup>;
8
+ type BaseTitleProps = ComponentPropsWithoutRef<typeof Popover.Title>;
9
+ type BaseDescriptionProps = ComponentPropsWithoutRef<typeof Popover.Description>;
10
+ type BaseCloseProps = ComponentPropsWithoutRef<typeof Popover.Close>;
11
+ type BaseArrowProps = ComponentPropsWithoutRef<typeof Popover.Arrow>;
12
+ type BaseViewportProps = ComponentPropsWithoutRef<typeof Popover.Viewport>;
13
+ interface PopoverPositionerProps extends Omit<BasePositionerProps, "className"> {
14
+ className?: string;
15
+ }
16
+ interface PopoverPopupProps extends Omit<BasePopupProps, "className"> {
17
+ className?: string;
18
+ }
19
+ interface PopoverTitleProps extends Omit<BaseTitleProps, "className"> {
20
+ className?: string;
21
+ }
22
+ interface PopoverDescriptionProps extends Omit<BaseDescriptionProps, "className"> {
23
+ className?: string;
24
+ }
25
+ interface PopoverCloseProps extends Omit<BaseCloseProps, "className"> {
26
+ className?: string;
27
+ }
28
+ interface PopoverArrowProps extends Omit<BaseArrowProps, "className"> {
29
+ className?: string;
30
+ }
31
+ interface PopoverViewportProps extends Omit<BaseViewportProps, "className"> {
32
+ className?: string;
33
+ }
34
+ declare const PopoverPositioner: react.ForwardRefExoticComponent<PopoverPositionerProps & react.RefAttributes<HTMLDivElement>>;
35
+ declare const PopoverPopup: react.ForwardRefExoticComponent<PopoverPopupProps & react.RefAttributes<HTMLDivElement>>;
36
+ declare const PopoverTitle: react.ForwardRefExoticComponent<PopoverTitleProps & react.RefAttributes<HTMLHeadingElement>>;
37
+ declare const PopoverDescription: react.ForwardRefExoticComponent<PopoverDescriptionProps & react.RefAttributes<HTMLParagraphElement>>;
38
+ declare const PopoverClose: react.ForwardRefExoticComponent<PopoverCloseProps & react.RefAttributes<HTMLButtonElement>>;
39
+ declare const PopoverViewport: react.ForwardRefExoticComponent<PopoverViewportProps & react.RefAttributes<HTMLDivElement>>;
40
+ declare const PopoverArrow: react.ForwardRefExoticComponent<PopoverArrowProps & react.RefAttributes<HTMLDivElement>>;
41
+ //#endregion
42
+ export { PopoverArrow, PopoverArrowProps, PopoverClose, PopoverCloseProps, PopoverDescription, PopoverDescriptionProps, PopoverPopup, PopoverPopupProps, PopoverPositioner, PopoverPositionerProps, PopoverTitle, PopoverTitleProps, PopoverViewport, PopoverViewportProps };
43
+ //# sourceMappingURL=parts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parts.d.ts","names":[],"sources":["../../src/popover/parts.tsx"],"mappings":";;;;;KAuCK,mBAAA,GAAsB,wBAAA,QAAgC,OAAA,CAAY,UAAA;AAAA,KAClE,cAAA,GAAiB,wBAAA,QAAgC,OAAA,CAAY,KAAA;AAAA,KAC7D,cAAA,GAAiB,wBAAA,QAAgC,OAAA,CAAY,KAAA;AAAA,KAC7D,oBAAA,GAAuB,wBAAA,QAAgC,OAAA,CAAY,WAAA;AAAA,KACnE,cAAA,GAAiB,wBAAA,QAAgC,OAAA,CAAY,KAAA;AAAA,KAC7D,cAAA,GAAiB,wBAAA,QAAgC,OAAA,CAAY,KAAA;AAAA,KAC7D,iBAAA,GAAoB,wBAAA,QAAgC,OAAA,CAAY,QAAA;AAAA,UAEpD,sBAAA,SAA+B,IAAA,CAAK,mBAAA;EACnD,SAAA;AAAA;AAAA,UAEe,iBAAA,SAA0B,IAAA,CAAK,cAAA;EAC9C,SAAA;AAAA;AAAA,UAEe,iBAAA,SAA0B,IAAA,CAAK,cAAA;EAC9C,SAAA;AAAA;AAAA,UAEe,uBAAA,SAAgC,IAAA,CAAK,oBAAA;EACpD,SAAA;AAAA;AAAA,UAEe,iBAAA,SAA0B,IAAA,CAAK,cAAA;EAC9C,SAAA;AAAA;AAAA,UAEe,iBAAA,SAA0B,IAAA,CAAK,cAAA;EAC9C,SAAA;AAAA;AAAA,UAEe,oBAAA,SAA6B,IAAA,CAAK,iBAAA;EACjD,SAAA;AAAA;AAAA,cAGW,iBAAA,EAAiB,KAAA,CAAA,yBAAA,CAAA,sBAAA,GAAA,KAAA,CAAA,aAAA,CAAA,cAAA;AAAA,cAOjB,YAAA,EAAY,KAAA,CAAA,yBAAA,CAAA,iBAAA,GAAA,KAAA,CAAA,aAAA,CAAA,cAAA;AAAA,cAOZ,YAAA,EAAY,KAAA,CAAA,yBAAA,CAAA,iBAAA,GAAA,KAAA,CAAA,aAAA,CAAA,kBAAA;AAAA,cAOZ,kBAAA,EAAkB,KAAA,CAAA,yBAAA,CAAA,uBAAA,GAAA,KAAA,CAAA,aAAA,CAAA,oBAAA;AAAA,cAMlB,YAAA,EAAY,KAAA,CAAA,yBAAA,CAAA,iBAAA,GAAA,KAAA,CAAA,aAAA,CAAA,iBAAA;AAAA,cAOZ,eAAA,EAAe,KAAA,CAAA,yBAAA,CAAA,oBAAA,GAAA,KAAA,CAAA,aAAA,CAAA,cAAA;AAAA,cAOf,YAAA,EAAY,KAAA,CAAA,yBAAA,CAAA,iBAAA,GAAA,KAAA,CAAA,aAAA,CAAA,cAAA"}