@brijbyte/agentic-ui 0.0.2 → 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 (227) hide show
  1. package/README.md +132 -35
  2. package/dist/accordion/accordion.d.ts +15 -1
  3. package/dist/accordion/accordion.d.ts.map +1 -1
  4. package/dist/accordion/accordion.js +6 -1
  5. package/dist/accordion/accordion.js.map +1 -1
  6. package/dist/accordion/parts.d.ts +1 -1
  7. package/dist/accordion/parts.js +2 -2
  8. package/dist/alert-dialog/alert-dialog.d.ts +12 -1
  9. package/dist/alert-dialog/alert-dialog.d.ts.map +1 -1
  10. package/dist/alert-dialog/alert-dialog.js +6 -1
  11. package/dist/alert-dialog/alert-dialog.js.map +1 -1
  12. package/dist/alert-dialog/parts.d.ts +1 -1
  13. package/dist/alert-dialog/parts.js +2 -2
  14. package/dist/badge/badge.d.ts +7 -1
  15. package/dist/badge/badge.d.ts.map +1 -1
  16. package/dist/badge/badge.js +4 -0
  17. package/dist/badge/badge.js.map +1 -1
  18. package/dist/button/button.css +22 -8
  19. package/dist/button/button.d.ts +19 -8
  20. package/dist/button/button.d.ts.map +1 -1
  21. package/dist/button/button.js +6 -1
  22. package/dist/button/button.js.map +1 -1
  23. package/dist/button/button.module.js.map +1 -1
  24. package/dist/card/card.d.ts +11 -1
  25. package/dist/card/card.d.ts.map +1 -1
  26. package/dist/card/card.js +7 -0
  27. package/dist/card/card.js.map +1 -1
  28. package/dist/checkbox/checkbox.d.ts +14 -1
  29. package/dist/checkbox/checkbox.d.ts.map +1 -1
  30. package/dist/checkbox/checkbox.js +5 -1
  31. package/dist/checkbox/checkbox.js.map +1 -1
  32. package/dist/checkbox/parts.js +1 -1
  33. package/dist/collapsible/collapsible.d.ts +12 -1
  34. package/dist/collapsible/collapsible.d.ts.map +1 -1
  35. package/dist/collapsible/collapsible.js +5 -0
  36. package/dist/collapsible/collapsible.js.map +1 -1
  37. package/dist/collapsible/parts.js +1 -1
  38. package/dist/context-menu/context-menu.d.ts +6 -1
  39. package/dist/context-menu/context-menu.d.ts.map +1 -1
  40. package/dist/context-menu/context-menu.js +4 -0
  41. package/dist/context-menu/context-menu.js.map +1 -1
  42. package/dist/context-menu/parts.js +1 -1
  43. package/dist/dialog/dialog.d.ts +14 -2
  44. package/dist/dialog/dialog.d.ts.map +1 -1
  45. package/dist/dialog/dialog.js +6 -0
  46. package/dist/dialog/dialog.js.map +1 -1
  47. package/dist/dialog/parts.js +1 -1
  48. package/dist/drawer/drawer.d.ts +12 -1
  49. package/dist/drawer/drawer.d.ts.map +1 -1
  50. package/dist/drawer/drawer.js +5 -0
  51. package/dist/drawer/drawer.js.map +1 -1
  52. package/dist/drawer/parts.d.ts +1 -1
  53. package/dist/drawer/parts.js +1 -1
  54. package/dist/index.css +1773 -1316
  55. package/dist/index.d.ts +29 -20
  56. package/dist/index.js +50 -37
  57. package/dist/input/input.d.ts +8 -0
  58. package/dist/input/input.d.ts.map +1 -1
  59. package/dist/input/input.js +6 -1
  60. package/dist/input/input.js.map +1 -1
  61. package/dist/menu/menu.css +3 -8
  62. package/dist/menu/menu.d.ts +12 -5
  63. package/dist/menu/menu.d.ts.map +1 -1
  64. package/dist/menu/menu.js +10 -24
  65. package/dist/menu/menu.js.map +1 -1
  66. package/dist/menu/menu.module.js +1 -1
  67. package/dist/menu/menu.module.js.map +1 -1
  68. package/dist/menu/menuitemshortcut.js +1 -1
  69. package/dist/menu/parts.js +1 -1
  70. package/dist/meter/circular-meter.d.ts +48 -0
  71. package/dist/meter/circular-meter.d.ts.map +1 -0
  72. package/dist/meter/circular-meter.js +86 -0
  73. package/dist/meter/circular-meter.js.map +1 -0
  74. package/dist/meter/index.d.ts +4 -0
  75. package/dist/meter/index.js +5 -0
  76. package/dist/meter/meter.css +152 -0
  77. package/dist/meter/meter.d.ts +58 -0
  78. package/dist/meter/meter.d.ts.map +1 -0
  79. package/dist/meter/meter.js +50 -0
  80. package/dist/meter/meter.js.map +1 -0
  81. package/dist/meter/meter.module.css.d.ts +2 -0
  82. package/dist/meter/meter.module.js +27 -0
  83. package/dist/meter/meter.module.js.map +1 -0
  84. package/dist/meter/meterState.js +18 -0
  85. package/dist/meter/meterState.js.map +1 -0
  86. package/dist/meter/parts.d.ts +31 -0
  87. package/dist/meter/parts.d.ts.map +1 -0
  88. package/dist/meter/parts.js +56 -0
  89. package/dist/meter/parts.js.map +1 -0
  90. package/dist/number-field/number-field.d.ts +17 -1
  91. package/dist/number-field/number-field.d.ts.map +1 -1
  92. package/dist/number-field/number-field.js +5 -1
  93. package/dist/number-field/number-field.js.map +1 -1
  94. package/dist/number-field/parts.js +1 -1
  95. package/dist/popover/index.d.ts +3 -0
  96. package/dist/popover/index.js +4 -0
  97. package/dist/popover/parts.d.ts +43 -0
  98. package/dist/popover/parts.d.ts.map +1 -0
  99. package/dist/popover/parts.js +96 -0
  100. package/dist/popover/parts.js.map +1 -0
  101. package/dist/popover/popover.css +173 -0
  102. package/dist/popover/popover.d.ts +49 -0
  103. package/dist/popover/popover.d.ts.map +1 -0
  104. package/dist/popover/popover.js +68 -0
  105. package/dist/popover/popover.js.map +1 -0
  106. package/dist/popover/popover.module.css.d.ts +2 -0
  107. package/dist/popover/popover.module.js +16 -0
  108. package/dist/popover/popover.module.js.map +1 -0
  109. package/dist/progress/parts.js +1 -1
  110. package/dist/progress/progress.d.ts +11 -0
  111. package/dist/progress/progress.d.ts.map +1 -1
  112. package/dist/progress/progress.js +5 -0
  113. package/dist/progress/progress.js.map +1 -1
  114. package/dist/radio/index.d.ts +3 -0
  115. package/dist/radio/index.js +4 -0
  116. package/dist/radio/parts.d.ts +18 -0
  117. package/dist/radio/parts.d.ts.map +1 -0
  118. package/dist/radio/parts.js +42 -0
  119. package/dist/radio/parts.js.map +1 -0
  120. package/dist/radio/radio.css +84 -0
  121. package/dist/radio/radio.d.ts +31 -0
  122. package/dist/radio/radio.d.ts.map +1 -0
  123. package/dist/radio/radio.js +33 -0
  124. package/dist/radio/radio.js.map +1 -0
  125. package/dist/radio/radio.module.css.d.ts +2 -0
  126. package/dist/radio/radio.module.js +11 -0
  127. package/dist/radio/radio.module.js.map +1 -0
  128. package/dist/radio-group/index.d.ts +3 -0
  129. package/dist/radio-group/index.js +4 -0
  130. package/dist/radio-group/parts.d.ts +13 -0
  131. package/dist/radio-group/parts.d.ts.map +1 -0
  132. package/dist/radio-group/parts.js +31 -0
  133. package/dist/radio-group/parts.js.map +1 -0
  134. package/dist/radio-group/radio-group.css +17 -0
  135. package/dist/radio-group/radio-group.d.ts +37 -0
  136. package/dist/radio-group/radio-group.d.ts.map +1 -0
  137. package/dist/radio-group/radio-group.js +28 -0
  138. package/dist/radio-group/radio-group.js.map +1 -0
  139. package/dist/radio-group/radio-group.module.css.d.ts +2 -0
  140. package/dist/radio-group/radio-group.module.js +9 -0
  141. package/dist/radio-group/radio-group.module.js.map +1 -0
  142. package/dist/select/parts.js +1 -1
  143. package/dist/select/select.d.ts +15 -2
  144. package/dist/select/select.d.ts.map +1 -1
  145. package/dist/select/select.js +5 -1
  146. package/dist/select/select.js.map +1 -1
  147. package/dist/separator/separator.d.ts +4 -0
  148. package/dist/separator/separator.d.ts.map +1 -1
  149. package/dist/separator/separator.js +5 -1
  150. package/dist/separator/separator.js.map +1 -1
  151. package/dist/shared/PopupArrow.js +22 -0
  152. package/dist/shared/PopupArrow.js.map +1 -0
  153. package/dist/slider/parts.js +1 -1
  154. package/dist/slider/slider.d.ts +19 -1
  155. package/dist/slider/slider.d.ts.map +1 -1
  156. package/dist/slider/slider.js +6 -0
  157. package/dist/slider/slider.js.map +1 -1
  158. package/dist/styles/tokens.css +21 -8
  159. package/dist/switch/parts.js +1 -1
  160. package/dist/switch/switch.css +11 -2
  161. package/dist/switch/switch.d.ts +13 -1
  162. package/dist/switch/switch.d.ts.map +1 -1
  163. package/dist/switch/switch.js +5 -1
  164. package/dist/switch/switch.js.map +1 -1
  165. package/dist/switch/switch.module.js.map +1 -1
  166. package/dist/tabs/parts.js +1 -1
  167. package/dist/tabs/tabs.d.ts +9 -2
  168. package/dist/tabs/tabs.d.ts.map +1 -1
  169. package/dist/tabs/tabs.js +4 -0
  170. package/dist/tabs/tabs.js.map +1 -1
  171. package/dist/toast/parts.js +1 -1
  172. package/dist/toast/toast.d.ts +12 -1
  173. package/dist/toast/toast.d.ts.map +1 -1
  174. package/dist/toast/toast.js +8 -0
  175. package/dist/toast/toast.js.map +1 -1
  176. package/dist/tokens.css +23 -11
  177. package/dist/tooltip/parts.js +1 -1
  178. package/dist/tooltip/tooltip.d.ts +10 -1
  179. package/dist/tooltip/tooltip.d.ts.map +1 -1
  180. package/dist/tooltip/tooltip.js +4 -0
  181. package/dist/tooltip/tooltip.js.map +1 -1
  182. package/package.json +23 -2
  183. package/src/accordion/accordion.tsx +14 -0
  184. package/src/alert-dialog/alert-dialog.tsx +11 -0
  185. package/src/badge/badge.tsx +6 -0
  186. package/src/button/button.module.css +29 -13
  187. package/src/button/button.tsx +19 -8
  188. package/src/card/card.tsx +10 -0
  189. package/src/checkbox/checkbox.tsx +13 -0
  190. package/src/collapsible/collapsible.tsx +11 -0
  191. package/src/context-menu/context-menu.tsx +5 -0
  192. package/src/dialog/dialog.tsx +13 -1
  193. package/src/drawer/drawer.tsx +11 -0
  194. package/src/index.ts +25 -233
  195. package/src/input/input.tsx +8 -0
  196. package/src/menu/menu.module.css +3 -10
  197. package/src/menu/menu.tsx +13 -26
  198. package/src/meter/circular-meter.tsx +114 -0
  199. package/src/meter/index.ts +9 -0
  200. package/src/meter/meter.module.css +162 -0
  201. package/src/meter/meter.tsx +86 -0
  202. package/src/meter/meterState.ts +29 -0
  203. package/src/meter/parts.tsx +72 -0
  204. package/src/number-field/number-field.tsx +16 -0
  205. package/src/popover/index.ts +14 -0
  206. package/src/popover/parts.tsx +120 -0
  207. package/src/popover/popover.module.css +189 -0
  208. package/src/popover/popover.tsx +80 -0
  209. package/src/progress/progress.tsx +11 -0
  210. package/src/radio/index.ts +6 -0
  211. package/src/radio/parts.tsx +43 -0
  212. package/src/radio/radio.module.css +96 -0
  213. package/src/radio/radio.tsx +37 -0
  214. package/src/radio-group/index.ts +5 -0
  215. package/src/radio-group/parts.tsx +32 -0
  216. package/src/radio-group/radio-group.module.css +17 -0
  217. package/src/radio-group/radio-group.tsx +63 -0
  218. package/src/select/select.tsx +14 -1
  219. package/src/separator/separator.tsx +4 -0
  220. package/src/shared/PopupArrow.tsx +41 -0
  221. package/src/slider/slider.tsx +18 -0
  222. package/src/styles/tokens.css +23 -11
  223. package/src/switch/switch.module.css +11 -2
  224. package/src/switch/switch.tsx +12 -0
  225. package/src/tabs/tabs.tsx +8 -1
  226. package/src/toast/toast.tsx +11 -0
  227. package/src/tooltip/tooltip.tsx +9 -0
@@ -0,0 +1,86 @@
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/circular-meter.tsx
6
+ const SIZES = {
7
+ sm: {
8
+ diameter: 56,
9
+ strokeWidth: 5
10
+ },
11
+ md: {
12
+ diameter: 80,
13
+ strokeWidth: 7
14
+ },
15
+ lg: {
16
+ diameter: 112,
17
+ strokeWidth: 9
18
+ }
19
+ };
20
+ function CircularMeter({ value, min = 0, max = 100, low, high, optimum = "high", label, showValue = false, format, size = "md", className = "" }) {
21
+ const clampedValue = Math.min(Math.max(value, min), max);
22
+ const state = getMeterState(clampedValue, min, max, low, high, optimum);
23
+ const { diameter, strokeWidth } = SIZES[size];
24
+ const radius = (diameter - strokeWidth) / 2;
25
+ const circumference = 2 * Math.PI * radius;
26
+ const dashOffset = circumference * (1 - (clampedValue - min) / (max - min));
27
+ const center = diameter / 2;
28
+ return /* @__PURE__ */ jsx(Meter.Root, {
29
+ value: clampedValue,
30
+ min,
31
+ max,
32
+ ...format !== void 0 && { format },
33
+ className: `${meter_module_default["circular-root"]} ${meter_module_default[`circular-${size}`]} ${className}`,
34
+ children: /* @__PURE__ */ jsxs("div", {
35
+ style: {
36
+ position: "relative",
37
+ width: diameter,
38
+ height: diameter
39
+ },
40
+ children: [/* @__PURE__ */ jsxs("svg", {
41
+ width: diameter,
42
+ height: diameter,
43
+ viewBox: `0 0 ${diameter} ${diameter}`,
44
+ className: meter_module_default["circular-svg"],
45
+ "aria-hidden": "true",
46
+ children: [/* @__PURE__ */ jsx("circle", {
47
+ cx: center,
48
+ cy: center,
49
+ r: radius,
50
+ strokeWidth,
51
+ className: meter_module_default["circular-track"]
52
+ }), /* @__PURE__ */ jsx("circle", {
53
+ cx: center,
54
+ cy: center,
55
+ r: radius,
56
+ strokeWidth,
57
+ strokeDasharray: circumference,
58
+ strokeDashoffset: dashOffset,
59
+ className: meter_module_default["circular-indicator"],
60
+ "data-meter-state": state,
61
+ style: {
62
+ transform: "rotate(-90deg)",
63
+ transformOrigin: "center"
64
+ }
65
+ })]
66
+ }), (showValue || label != null) && /* @__PURE__ */ jsxs("div", {
67
+ style: {
68
+ position: "absolute",
69
+ inset: 0,
70
+ display: "flex",
71
+ flexDirection: "column",
72
+ alignItems: "center",
73
+ justifyContent: "center"
74
+ },
75
+ children: [showValue && /* @__PURE__ */ jsx(Meter.Value, { className: meter_module_default["circular-value"] }), label != null && /* @__PURE__ */ jsx(Meter.Label, {
76
+ className: meter_module_default["circular-label"],
77
+ children: label
78
+ })]
79
+ })]
80
+ })
81
+ });
82
+ }
83
+ //#endregion
84
+ export { CircularMeter };
85
+
86
+ //# sourceMappingURL=circular-meter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"circular-meter.js","names":["BaseMeter","styles"],"sources":["../../src/meter/circular-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 CircularMeterSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface CircularMeterProps {\n /** Current value. Must be between `min` and `max`. */\n value: number;\n /** @default 0 */\n min?: number;\n /** @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 stroke 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 shown below the value inside the circle. */\n label?: ReactNode;\n /** Show the formatted value inside the circle. @default false */\n showValue?: boolean;\n /** `Intl.NumberFormatOptions` for value formatting. */\n format?: Intl.NumberFormatOptions;\n size?: CircularMeterSize;\n className?: string;\n}\n\nconst SIZES: Record<CircularMeterSize, { diameter: number; strokeWidth: number }> = {\n sm: { diameter: 56, strokeWidth: 5 },\n md: { diameter: 80, strokeWidth: 7 },\n lg: { diameter: 112, strokeWidth: 9 },\n};\n\nexport function CircularMeter({\n value,\n min = 0,\n max = 100,\n low,\n high,\n optimum = \"high\",\n label,\n showValue = false,\n format,\n size = \"md\",\n className = \"\",\n}: CircularMeterProps) {\n const clampedValue = Math.min(Math.max(value, min), max);\n const state = getMeterState(clampedValue, min, max, low, high, optimum);\n\n const { diameter, strokeWidth } = SIZES[size];\n const radius = (diameter - strokeWidth) / 2;\n const circumference = 2 * Math.PI * radius;\n const dashOffset = circumference * (1 - (clampedValue - min) / (max - min));\n const center = diameter / 2;\n\n return (\n <BaseMeter.Root\n value={clampedValue}\n min={min}\n max={max}\n {...(format !== undefined && { format })}\n className={`${styles[\"circular-root\"]} ${styles[`circular-${size}`]} ${className}`}\n >\n <div style={{ position: \"relative\", width: diameter, height: diameter }}>\n <svg\n width={diameter}\n height={diameter}\n viewBox={`0 0 ${diameter} ${diameter}`}\n className={styles[\"circular-svg\"]}\n aria-hidden=\"true\"\n >\n {/* Background track ring */}\n <circle cx={center} cy={center} r={radius} strokeWidth={strokeWidth} className={styles[\"circular-track\"]} />\n {/* Value arc — origin at 12 o'clock */}\n <circle\n cx={center}\n cy={center}\n r={radius}\n strokeWidth={strokeWidth}\n strokeDasharray={circumference}\n strokeDashoffset={dashOffset}\n className={styles[\"circular-indicator\"]}\n data-meter-state={state}\n style={{ transform: \"rotate(-90deg)\", transformOrigin: \"center\" }}\n />\n </svg>\n\n {(showValue || label != null) && (\n <div\n style={{\n position: \"absolute\",\n inset: 0,\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n >\n {showValue && <BaseMeter.Value className={styles[\"circular-value\"]} />}\n {label != null && <BaseMeter.Label className={styles[\"circular-label\"]}>{label}</BaseMeter.Label>}\n </div>\n )}\n </div>\n </BaseMeter.Root>\n );\n}\n"],"mappings":";;;;;AAmCA,MAAM,QAA8E;CAClF,IAAI;EAAE,UAAU;EAAI,aAAa;EAAG;CACpC,IAAI;EAAE,UAAU;EAAI,aAAa;EAAG;CACpC,IAAI;EAAE,UAAU;EAAK,aAAa;EAAG;CACtC;AAED,SAAgB,cAAc,EAC5B,OACA,MAAM,GACN,MAAM,KACN,KACA,MACA,UAAU,QACV,OACA,YAAY,OACZ,QACA,OAAO,MACP,YAAY,MACS;CACrB,MAAM,eAAe,KAAK,IAAI,KAAK,IAAI,OAAO,IAAI,EAAE,IAAI;CACxD,MAAM,QAAQ,cAAc,cAAc,KAAK,KAAK,KAAK,MAAM,QAAQ;CAEvE,MAAM,EAAE,UAAU,gBAAgB,MAAM;CACxC,MAAM,UAAU,WAAW,eAAe;CAC1C,MAAM,gBAAgB,IAAI,KAAK,KAAK;CACpC,MAAM,aAAa,iBAAiB,KAAK,eAAe,QAAQ,MAAM;CACtE,MAAM,SAAS,WAAW;AAE1B,QACE,oBAACA,MAAU,MAAX;EACE,OAAO;EACF;EACA;EACL,GAAK,WAAW,KAAA,KAAa,EAAE,QAAQ;EACvC,WAAW,GAAGC,qBAAO,iBAAiB,GAAGA,qBAAO,YAAY,QAAQ,GAAG;YAEvE,qBAAC,OAAD;GAAK,OAAO;IAAE,UAAU;IAAY,OAAO;IAAU,QAAQ;IAAU;aAAvE,CACE,qBAAC,OAAD;IACE,OAAO;IACP,QAAQ;IACR,SAAS,OAAO,SAAS,GAAG;IAC5B,WAAWA,qBAAO;IAClB,eAAY;cALd,CAQE,oBAAC,UAAD;KAAQ,IAAI;KAAQ,IAAI;KAAQ,GAAG;KAAqB;KAAa,WAAWA,qBAAO;KAAqB,CAAA,EAE5G,oBAAC,UAAD;KACE,IAAI;KACJ,IAAI;KACJ,GAAG;KACU;KACb,iBAAiB;KACjB,kBAAkB;KAClB,WAAWA,qBAAO;KAClB,oBAAkB;KAClB,OAAO;MAAE,WAAW;MAAkB,iBAAiB;MAAU;KACjE,CAAA,CACE;QAEJ,aAAa,SAAS,SACtB,qBAAC,OAAD;IACE,OAAO;KACL,UAAU;KACV,OAAO;KACP,SAAS;KACT,eAAe;KACf,YAAY;KACZ,gBAAgB;KACjB;cARH,CAUG,aAAa,oBAACD,MAAU,OAAX,EAAiB,WAAWC,qBAAO,mBAAqB,CAAA,EACrE,SAAS,QAAQ,oBAACD,MAAU,OAAX;KAAiB,WAAWC,qBAAO;eAAoB;KAAwB,CAAA,CAC7F;MAEJ;;EACS,CAAA"}
@@ -0,0 +1,4 @@
1
+ import { Meter, MeterProps, MeterSize, styles } from "./meter.js";
2
+ import { CircularMeter, CircularMeterProps, CircularMeterSize } from "./circular-meter.js";
3
+ import { MeterIndicator, MeterIndicatorProps, MeterLabel, MeterLabelProps, MeterTrack, MeterTrackProps, MeterValue, MeterValueProps } from "./parts.js";
4
+ export { CircularMeter, type CircularMeterProps, type CircularMeterSize, Meter, MeterIndicator, type MeterIndicatorProps, MeterLabel, type MeterLabelProps, type MeterProps, type MeterSize, styles as MeterStyles, MeterTrack, type MeterTrackProps, MeterValue, type MeterValueProps };
@@ -0,0 +1,5 @@
1
+ import meter_module_default from "./meter.module.js";
2
+ import { Meter } from "./meter.js";
3
+ import { CircularMeter } from "./circular-meter.js";
4
+ import { MeterIndicator, MeterLabel, MeterTrack, MeterValue } from "./parts.js";
5
+ export { CircularMeter, Meter, MeterIndicator, MeterLabel, meter_module_default as MeterStyles, MeterTrack, MeterValue };
@@ -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"}
@@ -1,25 +1,41 @@
1
- import { ReactNode } from "react";
2
1
  import * as react_jsx_runtime0 from "react/jsx-runtime";
2
+ import { ReactNode } from "react";
3
3
  import styles from "./number-field.module.css";
4
4
 
5
5
  //#region src/number-field/number-field.d.ts
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"}
@@ -1,6 +1,6 @@
1
1
  import number_field_module_default from "./number-field.module.js";
2
- import { useId } from "react";
3
2
  import { jsx, jsxs } from "react/jsx-runtime";
3
+ import { useId } from "react";
4
4
  import { NumberField } from "@base-ui/react/number-field";
5
5
  //#region src/number-field/number-field.tsx
6
6
  function MinusIcon() {
@@ -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, {