@optimum-intelligence/opti-ui 0.0.0-stage → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (174) hide show
  1. package/LICENSE +23 -0
  2. package/README.md +161 -2
  3. package/dist/components/accordion/Accordion.d.ts +17 -0
  4. package/dist/components/accordion/Accordion.js +204 -0
  5. package/dist/components/accordion/Accordion.js.map +1 -0
  6. package/dist/components/alert/Alert.d.ts +18 -0
  7. package/dist/components/alert/Alert.js +164 -0
  8. package/dist/components/alert/Alert.js.map +1 -0
  9. package/dist/components/app-shell/AppShell.d.ts +97 -0
  10. package/dist/components/app-shell/AppShell.js +689 -0
  11. package/dist/components/app-shell/AppShell.js.map +1 -0
  12. package/dist/components/avatar/Avatar.d.ts +21 -0
  13. package/dist/components/avatar/Avatar.js +190 -0
  14. package/dist/components/avatar/Avatar.js.map +1 -0
  15. package/dist/components/badge/Badge.d.ts +16 -0
  16. package/dist/components/badge/Badge.js +94 -0
  17. package/dist/components/badge/Badge.js.map +1 -0
  18. package/dist/components/breadcrumbs/Breadcrumbs.d.ts +18 -0
  19. package/dist/components/breadcrumbs/Breadcrumbs.js +154 -0
  20. package/dist/components/breadcrumbs/Breadcrumbs.js.map +1 -0
  21. package/dist/components/button/Button.d.ts +23 -0
  22. package/dist/components/button/Button.js +159 -0
  23. package/dist/components/button/Button.js.map +1 -0
  24. package/dist/components/calendar/Calendar.d.ts +59 -0
  25. package/dist/components/calendar/Calendar.js +709 -0
  26. package/dist/components/calendar/Calendar.js.map +1 -0
  27. package/dist/components/calendar/date-utils.d.ts +32 -0
  28. package/dist/components/calendar/date-utils.js +112 -0
  29. package/dist/components/calendar/date-utils.js.map +1 -0
  30. package/dist/components/card/Card.d.ts +42 -0
  31. package/dist/components/card/Card.js +82 -0
  32. package/dist/components/card/Card.js.map +1 -0
  33. package/dist/components/choice/Choice.d.ts +32 -0
  34. package/dist/components/choice/Choice.js +371 -0
  35. package/dist/components/choice/Choice.js.map +1 -0
  36. package/dist/components/collapsible/Collapsible.d.ts +15 -0
  37. package/dist/components/collapsible/Collapsible.js +155 -0
  38. package/dist/components/collapsible/Collapsible.js.map +1 -0
  39. package/dist/components/combobox/Combobox.d.ts +68 -0
  40. package/dist/components/combobox/Combobox.js +752 -0
  41. package/dist/components/combobox/Combobox.js.map +1 -0
  42. package/dist/components/command-palette/CommandPalette.d.ts +52 -0
  43. package/dist/components/command-palette/CommandPalette.js +328 -0
  44. package/dist/components/command-palette/CommandPalette.js.map +1 -0
  45. package/dist/components/data-table/DataTable.d.ts +111 -0
  46. package/dist/components/data-table/DataTable.js +444 -0
  47. package/dist/components/data-table/DataTable.js.map +1 -0
  48. package/dist/components/date-picker/DatePicker.d.ts +50 -0
  49. package/dist/components/date-picker/DatePicker.js +485 -0
  50. package/dist/components/date-picker/DatePicker.js.map +1 -0
  51. package/dist/components/date-picker/DateRangePicker.d.ts +39 -0
  52. package/dist/components/date-picker/DateRangePicker.js +339 -0
  53. package/dist/components/date-picker/DateRangePicker.js.map +1 -0
  54. package/dist/components/date-picker/PickerField.d.ts +38 -0
  55. package/dist/components/date-picker/PickerField.js +238 -0
  56. package/dist/components/date-picker/PickerField.js.map +1 -0
  57. package/dist/components/dialog/Dialog.d.ts +70 -0
  58. package/dist/components/dialog/Dialog.js +354 -0
  59. package/dist/components/dialog/Dialog.js.map +1 -0
  60. package/dist/components/drawer/Drawer.d.ts +39 -0
  61. package/dist/components/drawer/Drawer.js +225 -0
  62. package/dist/components/drawer/Drawer.js.map +1 -0
  63. package/dist/components/empty-state/EmptyState.d.ts +12 -0
  64. package/dist/components/empty-state/EmptyState.js +116 -0
  65. package/dist/components/empty-state/EmptyState.js.map +1 -0
  66. package/dist/components/field/Field.d.ts +36 -0
  67. package/dist/components/field/Field.js +337 -0
  68. package/dist/components/field/Field.js.map +1 -0
  69. package/dist/components/file-upload/FileUpload.d.ts +91 -0
  70. package/dist/components/file-upload/FileUpload.js +714 -0
  71. package/dist/components/file-upload/FileUpload.js.map +1 -0
  72. package/dist/components/input/Input.d.ts +49 -0
  73. package/dist/components/input/Input.js +538 -0
  74. package/dist/components/input/Input.js.map +1 -0
  75. package/dist/components/link/Link.d.ts +17 -0
  76. package/dist/components/link/Link.js +91 -0
  77. package/dist/components/link/Link.js.map +1 -0
  78. package/dist/components/menu/Menu.d.ts +79 -0
  79. package/dist/components/menu/Menu.js +615 -0
  80. package/dist/components/menu/Menu.js.map +1 -0
  81. package/dist/components/number-field/NumberField.d.ts +16 -0
  82. package/dist/components/number-field/NumberField.js +188 -0
  83. package/dist/components/number-field/NumberField.js.map +1 -0
  84. package/dist/components/pagination/Pagination.d.ts +34 -0
  85. package/dist/components/pagination/Pagination.js +244 -0
  86. package/dist/components/pagination/Pagination.js.map +1 -0
  87. package/dist/components/popover/Popover.d.ts +22 -0
  88. package/dist/components/popover/Popover.js +186 -0
  89. package/dist/components/popover/Popover.js.map +1 -0
  90. package/dist/components/preview-card/PreviewCard.d.ts +20 -0
  91. package/dist/components/preview-card/PreviewCard.js +114 -0
  92. package/dist/components/preview-card/PreviewCard.js.map +1 -0
  93. package/dist/components/progress/Progress.d.ts +20 -0
  94. package/dist/components/progress/Progress.js +169 -0
  95. package/dist/components/progress/Progress.js.map +1 -0
  96. package/dist/components/scroll-area/ScrollArea.d.ts +8 -0
  97. package/dist/components/scroll-area/ScrollArea.js +112 -0
  98. package/dist/components/scroll-area/ScrollArea.js.map +1 -0
  99. package/dist/components/search-input/SearchInput.d.ts +14 -0
  100. package/dist/components/search-input/SearchInput.js +114 -0
  101. package/dist/components/search-input/SearchInput.js.map +1 -0
  102. package/dist/components/select/Select.d.ts +66 -0
  103. package/dist/components/select/Select.js +601 -0
  104. package/dist/components/select/Select.js.map +1 -0
  105. package/dist/components/separator/Separator.d.ts +4 -0
  106. package/dist/components/separator/Separator.js +46 -0
  107. package/dist/components/separator/Separator.js.map +1 -0
  108. package/dist/components/skeleton/Skeleton.d.ts +16 -0
  109. package/dist/components/skeleton/Skeleton.js +135 -0
  110. package/dist/components/skeleton/Skeleton.js.map +1 -0
  111. package/dist/components/slider/Slider.d.ts +11 -0
  112. package/dist/components/slider/Slider.js +107 -0
  113. package/dist/components/slider/Slider.js.map +1 -0
  114. package/dist/components/spinner/Spinner.d.ts +9 -0
  115. package/dist/components/spinner/Spinner.js +78 -0
  116. package/dist/components/spinner/Spinner.js.map +1 -0
  117. package/dist/components/stack/Stack.d.ts +23 -0
  118. package/dist/components/stack/Stack.js +79 -0
  119. package/dist/components/stack/Stack.js.map +1 -0
  120. package/dist/components/stat-card/StatCard.d.ts +22 -0
  121. package/dist/components/stat-card/StatCard.js +153 -0
  122. package/dist/components/stat-card/StatCard.js.map +1 -0
  123. package/dist/components/stepper/Stepper.d.ts +30 -0
  124. package/dist/components/stepper/Stepper.js +131 -0
  125. package/dist/components/stepper/Stepper.js.map +1 -0
  126. package/dist/components/table/Table.d.ts +53 -0
  127. package/dist/components/table/Table.js +221 -0
  128. package/dist/components/table/Table.js.map +1 -0
  129. package/dist/components/tabs/Tabs.d.ts +19 -0
  130. package/dist/components/tabs/Tabs.js +183 -0
  131. package/dist/components/tabs/Tabs.js.map +1 -0
  132. package/dist/components/tag/Tag.d.ts +22 -0
  133. package/dist/components/tag/Tag.js +121 -0
  134. package/dist/components/tag/Tag.js.map +1 -0
  135. package/dist/components/toast/Toast.d.ts +34 -0
  136. package/dist/components/toast/Toast.js +187 -0
  137. package/dist/components/toast/Toast.js.map +1 -0
  138. package/dist/components/toggle/Toggle.d.ts +31 -0
  139. package/dist/components/toggle/Toggle.js +197 -0
  140. package/dist/components/toggle/Toggle.js.map +1 -0
  141. package/dist/components/toolbar/Toolbar.d.ts +21 -0
  142. package/dist/components/toolbar/Toolbar.js +239 -0
  143. package/dist/components/toolbar/Toolbar.js.map +1 -0
  144. package/dist/components/tooltip/Tooltip.d.ts +33 -0
  145. package/dist/components/tooltip/Tooltip.js +182 -0
  146. package/dist/components/tooltip/Tooltip.js.map +1 -0
  147. package/dist/components/typography/Typography.d.ts +32 -0
  148. package/dist/components/typography/Typography.js +183 -0
  149. package/dist/components/typography/Typography.js.map +1 -0
  150. package/dist/fonts.css +3 -0
  151. package/dist/icons/index.d.ts +125 -0
  152. package/dist/icons/index.js +174 -0
  153. package/dist/icons/index.js.map +1 -0
  154. package/dist/index.d.ts +53 -0
  155. package/dist/index.js +56 -0
  156. package/dist/opti-ui.css +5365 -0
  157. package/dist/theme/ThemeProvider.d.ts +22 -0
  158. package/dist/theme/ThemeProvider.js +115 -0
  159. package/dist/theme/ThemeProvider.js.map +1 -0
  160. package/dist/theme/index.d.ts +2 -0
  161. package/dist/utils/cx.d.ts +10 -0
  162. package/dist/utils/cx.js +18 -0
  163. package/dist/utils/cx.js.map +1 -0
  164. package/dist/utils/index.d.ts +2 -0
  165. package/dist/utils/portal.d.ts +8 -0
  166. package/dist/utils/portal.js +16 -0
  167. package/dist/utils/portal.js.map +1 -0
  168. package/dist/utils/primitive.d.ts +13 -0
  169. package/dist/utils/primitive.js +61 -0
  170. package/dist/utils/primitive.js.map +1 -0
  171. package/dist/utils/search.d.ts +4 -0
  172. package/dist/utils/search.js +15 -0
  173. package/dist/utils/search.js.map +1 -0
  174. package/package.json +71 -4
@@ -0,0 +1,16 @@
1
+ import * as React from 'react';
2
+ export interface SkeletonProps extends React.HTMLAttributes<HTMLSpanElement> {
3
+ ref?: React.Ref<HTMLSpanElement>;
4
+ width?: number | string;
5
+ height?: number | string;
6
+ /** Render as a circle (uses `width` for both dimensions). */
7
+ circle?: boolean;
8
+ radius?: number | string;
9
+ }
10
+ /** Pulsing placeholder for content that is still loading. */
11
+ export declare function Skeleton({ width, height, circle, radius, className, style, ref, ...props }: SkeletonProps): React.JSX.Element;
12
+ export interface SkeletonTextProps extends React.HTMLAttributes<HTMLDivElement> {
13
+ ref?: React.Ref<HTMLDivElement>;
14
+ lines?: number;
15
+ }
16
+ export declare function SkeletonText({ lines, className, ref, ...props }: SkeletonTextProps): React.JSX.Element;
@@ -0,0 +1,135 @@
1
+ "use client";
2
+ import { cx } from "../../utils/cx.js";
3
+ import { c } from "react/compiler-runtime";
4
+ import "react";
5
+ import { jsx } from "react/jsx-runtime";
6
+ //#region src/components/skeleton/Skeleton.tsx
7
+ /** Pulsing placeholder for content that is still loading. */
8
+ function Skeleton(t0) {
9
+ const $ = c(22);
10
+ let circle;
11
+ let className;
12
+ let height;
13
+ let props;
14
+ let radius;
15
+ let ref;
16
+ let style;
17
+ let width;
18
+ if ($[0] !== t0) {
19
+ ({width, height, circle, radius, className, style, ref, ...props} = t0);
20
+ $[0] = t0;
21
+ $[1] = circle;
22
+ $[2] = className;
23
+ $[3] = height;
24
+ $[4] = props;
25
+ $[5] = radius;
26
+ $[6] = ref;
27
+ $[7] = style;
28
+ $[8] = width;
29
+ } else {
30
+ circle = $[1];
31
+ className = $[2];
32
+ height = $[3];
33
+ props = $[4];
34
+ radius = $[5];
35
+ ref = $[6];
36
+ style = $[7];
37
+ width = $[8];
38
+ }
39
+ let t1;
40
+ if ($[9] !== className) {
41
+ t1 = cx("oui-skeleton", className);
42
+ $[9] = className;
43
+ $[10] = t1;
44
+ } else t1 = $[10];
45
+ const t2 = circle || void 0;
46
+ const t3 = circle ? width : height;
47
+ let t4;
48
+ if ($[11] !== radius || $[12] !== style || $[13] !== t3 || $[14] !== width) {
49
+ t4 = {
50
+ width,
51
+ height: t3,
52
+ borderRadius: radius,
53
+ ...style
54
+ };
55
+ $[11] = radius;
56
+ $[12] = style;
57
+ $[13] = t3;
58
+ $[14] = width;
59
+ $[15] = t4;
60
+ } else t4 = $[15];
61
+ let t5;
62
+ if ($[16] !== props || $[17] !== ref || $[18] !== t1 || $[19] !== t2 || $[20] !== t4) {
63
+ t5 = /* @__PURE__ */ jsx("span", {
64
+ ref,
65
+ "aria-hidden": true,
66
+ className: t1,
67
+ "data-circle": t2,
68
+ style: t4,
69
+ ...props
70
+ });
71
+ $[16] = props;
72
+ $[17] = ref;
73
+ $[18] = t1;
74
+ $[19] = t2;
75
+ $[20] = t4;
76
+ $[21] = t5;
77
+ } else t5 = $[21];
78
+ return t5;
79
+ }
80
+ function SkeletonText(t0) {
81
+ const $ = c(14);
82
+ let className;
83
+ let props;
84
+ let ref;
85
+ let t1;
86
+ if ($[0] !== t0) {
87
+ ({lines: t1, className, ref, ...props} = t0);
88
+ $[0] = t0;
89
+ $[1] = className;
90
+ $[2] = props;
91
+ $[3] = ref;
92
+ $[4] = t1;
93
+ } else {
94
+ className = $[1];
95
+ props = $[2];
96
+ ref = $[3];
97
+ t1 = $[4];
98
+ }
99
+ const lines = t1 === void 0 ? 3 : t1;
100
+ let t2;
101
+ if ($[5] !== className) {
102
+ t2 = cx("oui-skeleton-text", className);
103
+ $[5] = className;
104
+ $[6] = t2;
105
+ } else t2 = $[6];
106
+ let t3;
107
+ if ($[7] !== lines) {
108
+ t3 = Array.from({ length: lines }, (_, i) => /* @__PURE__ */ jsx(Skeleton, {
109
+ height: "0.8rem",
110
+ width: i === lines - 1 && lines > 1 ? "60%" : "100%"
111
+ }, i));
112
+ $[7] = lines;
113
+ $[8] = t3;
114
+ } else t3 = $[8];
115
+ let t4;
116
+ if ($[9] !== props || $[10] !== ref || $[11] !== t2 || $[12] !== t3) {
117
+ t4 = /* @__PURE__ */ jsx("div", {
118
+ ref,
119
+ "aria-hidden": true,
120
+ className: t2,
121
+ ...props,
122
+ children: t3
123
+ });
124
+ $[9] = props;
125
+ $[10] = ref;
126
+ $[11] = t2;
127
+ $[12] = t3;
128
+ $[13] = t4;
129
+ } else t4 = $[13];
130
+ return t4;
131
+ }
132
+ //#endregion
133
+ export { Skeleton, SkeletonText };
134
+
135
+ //# sourceMappingURL=Skeleton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Skeleton.js","names":["React","cx","SkeletonProps","HTMLAttributes","HTMLSpanElement","ref","Ref","width","height","circle","radius","Skeleton","t0","$","_c","className","props","style","t1","t2","undefined","t3","t4","borderRadius","t5","SkeletonTextProps","HTMLDivElement","lines","SkeletonText","Array","from","length","_","i","_c"],"sources":["../../../src/components/skeleton/Skeleton.tsx"],"sourcesContent":["import * as React from 'react';\nimport { cx } from '../../utils/cx';\n\nexport interface SkeletonProps extends React.HTMLAttributes<HTMLSpanElement> {\n ref?: React.Ref<HTMLSpanElement>;\n width?: number | string;\n height?: number | string;\n /** Render as a circle (uses `width` for both dimensions). */\n circle?: boolean;\n radius?: number | string;\n}\n\n/** Pulsing placeholder for content that is still loading. */\nexport function Skeleton({ width, height, circle, radius, className, style, ref, ...props }: SkeletonProps) {\n return (\n <span\n ref={ref}\n aria-hidden\n className={cx('oui-skeleton', className)}\n data-circle={circle || undefined}\n style={{\n width,\n height: circle ? width : height,\n borderRadius: radius,\n ...style,\n }}\n {...props}\n />\n );\n}\n\nexport interface SkeletonTextProps extends React.HTMLAttributes<HTMLDivElement> {\n ref?: React.Ref<HTMLDivElement>;\n lines?: number;\n}\n\nexport function SkeletonText({ lines = 3, className, ref, ...props }: SkeletonTextProps) {\n return (\n <div ref={ref} aria-hidden className={cx('oui-skeleton-text', className)} {...props}>\n {Array.from({ length: lines }, (_, i) => (\n <Skeleton key={i} height=\"0.8rem\" width={i === lines - 1 && lines > 1 ? '60%' : '100%'} />\n ))}\n </div>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import * as React from 'react';
2
+ import { Slider as BaseSlider } from '@base-ui/react/slider';
3
+ export interface SliderProps extends BaseSlider.Root.Props {
4
+ label?: React.ReactNode;
5
+ /** Show the formatted value next to the label. */
6
+ showValue?: boolean;
7
+ /** Accessible labels for each thumb (needed for range sliders). */
8
+ thumbLabels?: string[];
9
+ }
10
+ /** Single value or range (pass an array) slider. */
11
+ export declare function Slider({ label, showValue, thumbLabels, className, value, defaultValue, ref, ...props }: SliderProps): React.JSX.Element;
@@ -0,0 +1,107 @@
1
+ "use client";
2
+ import { withClass } from "../../utils/cx.js";
3
+ import { c } from "react/compiler-runtime";
4
+ import "react";
5
+ import { jsx, jsxs } from "react/jsx-runtime";
6
+ import { Slider } from "@base-ui/react/slider";
7
+ //#region src/components/slider/Slider.tsx
8
+ /** Single value or range (pass an array) slider. */
9
+ function Slider$1(t0) {
10
+ const $ = c(26);
11
+ let className;
12
+ let defaultValue;
13
+ let label;
14
+ let props;
15
+ let ref;
16
+ let showValue;
17
+ let thumbLabels;
18
+ let value;
19
+ if ($[0] !== t0) {
20
+ ({label, showValue, thumbLabels, className, value, defaultValue, ref, ...props} = t0);
21
+ $[0] = t0;
22
+ $[1] = className;
23
+ $[2] = defaultValue;
24
+ $[3] = label;
25
+ $[4] = props;
26
+ $[5] = ref;
27
+ $[6] = showValue;
28
+ $[7] = thumbLabels;
29
+ $[8] = value;
30
+ } else {
31
+ className = $[1];
32
+ defaultValue = $[2];
33
+ label = $[3];
34
+ props = $[4];
35
+ ref = $[5];
36
+ showValue = $[6];
37
+ thumbLabels = $[7];
38
+ value = $[8];
39
+ }
40
+ const initial = value ?? defaultValue;
41
+ const count = Array.isArray(initial) ? initial.length : 1;
42
+ let t1;
43
+ if ($[9] !== className) {
44
+ t1 = withClass("oui-slider", className);
45
+ $[9] = className;
46
+ $[10] = t1;
47
+ } else t1 = $[10];
48
+ let t2;
49
+ if ($[11] !== label || $[12] !== showValue) {
50
+ t2 = (label || showValue) && /* @__PURE__ */ jsxs("div", {
51
+ className: "oui-slider__header",
52
+ children: [label && /* @__PURE__ */ jsx(Slider.Label, {
53
+ className: "oui-field__label",
54
+ children: label
55
+ }), showValue && /* @__PURE__ */ jsx(Slider.Value, { className: "oui-slider__value" })]
56
+ });
57
+ $[11] = label;
58
+ $[12] = showValue;
59
+ $[13] = t2;
60
+ } else t2 = $[13];
61
+ let t3;
62
+ if ($[14] === Symbol.for("react.memo_cache_sentinel")) {
63
+ t3 = /* @__PURE__ */ jsx(Slider.Indicator, { className: "oui-slider__indicator" });
64
+ $[14] = t3;
65
+ } else t3 = $[14];
66
+ let t4;
67
+ if ($[15] !== count || $[16] !== thumbLabels) {
68
+ t4 = /* @__PURE__ */ jsx(Slider.Control, {
69
+ className: "oui-slider__control",
70
+ children: /* @__PURE__ */ jsxs(Slider.Track, {
71
+ className: "oui-slider__track",
72
+ children: [t3, Array.from({ length: count }, (_, index) => /* @__PURE__ */ jsx(Slider.Thumb, {
73
+ index: count > 1 ? index : void 0,
74
+ className: "oui-slider__thumb",
75
+ "aria-label": thumbLabels?.[index]
76
+ }, index))]
77
+ })
78
+ });
79
+ $[15] = count;
80
+ $[16] = thumbLabels;
81
+ $[17] = t4;
82
+ } else t4 = $[17];
83
+ let t5;
84
+ if ($[18] !== defaultValue || $[19] !== props || $[20] !== ref || $[21] !== t1 || $[22] !== t2 || $[23] !== t4 || $[24] !== value) {
85
+ t5 = /* @__PURE__ */ jsxs(Slider.Root, {
86
+ ref,
87
+ className: t1,
88
+ value,
89
+ defaultValue,
90
+ ...props,
91
+ children: [t2, t4]
92
+ });
93
+ $[18] = defaultValue;
94
+ $[19] = props;
95
+ $[20] = ref;
96
+ $[21] = t1;
97
+ $[22] = t2;
98
+ $[23] = t4;
99
+ $[24] = value;
100
+ $[25] = t5;
101
+ } else t5 = $[25];
102
+ return t5;
103
+ }
104
+ //#endregion
105
+ export { Slider$1 as Slider };
106
+
107
+ //# sourceMappingURL=Slider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Slider.js","names":["React","Slider","BaseSlider","withClass","SliderProps","Root","Props","label","ReactNode","showValue","thumbLabels","t0","$","_c","className","defaultValue","props","ref","value","initial","count","Array","isArray","length","t1","t2","t3","Symbol","for","t4","from","_","index","undefined","t5","Slider","_c","BaseSlider"],"sources":["../../../src/components/slider/Slider.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Slider as BaseSlider } from '@base-ui/react/slider';\nimport { withClass } from '../../utils/cx';\n\nexport interface SliderProps extends BaseSlider.Root.Props {\n label?: React.ReactNode;\n /** Show the formatted value next to the label. */\n showValue?: boolean;\n /** Accessible labels for each thumb (needed for range sliders). */\n thumbLabels?: string[];\n}\n\n/** Single value or range (pass an array) slider. */\nexport function Slider({ label, showValue, thumbLabels, className, value, defaultValue, ref, ...props }: SliderProps) {\n const initial = value ?? defaultValue;\n const count = Array.isArray(initial) ? initial.length : 1;\n return (\n <BaseSlider.Root\n ref={ref}\n className={withClass('oui-slider', className)}\n value={value}\n defaultValue={defaultValue}\n {...props}\n >\n {(label || showValue) && (\n <div className=\"oui-slider__header\">\n {label && <BaseSlider.Label className=\"oui-field__label\">{label}</BaseSlider.Label>}\n {showValue && <BaseSlider.Value className=\"oui-slider__value\" />}\n </div>\n )}\n <BaseSlider.Control className=\"oui-slider__control\">\n <BaseSlider.Track className=\"oui-slider__track\">\n <BaseSlider.Indicator className=\"oui-slider__indicator\" />\n {Array.from({ length: count }, (_, index) => (\n <BaseSlider.Thumb\n key={index}\n index={count > 1 ? index : undefined}\n className=\"oui-slider__thumb\"\n aria-label={thumbLabels?.[index]}\n />\n ))}\n </BaseSlider.Track>\n </BaseSlider.Control>\n </BaseSlider.Root>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import * as React from 'react';
2
+ export interface SpinnerProps extends React.HTMLAttributes<HTMLSpanElement> {
3
+ ref?: React.Ref<HTMLSpanElement>;
4
+ /** Diameter, e.g. `1rem` or `24`. Defaults to `1.25em`. */
5
+ size?: number | string;
6
+ /** Accessible label. Set to `null` when a parent already announces loading. */
7
+ label?: string | null;
8
+ }
9
+ export declare function Spinner({ size, label, className, style, ref, ...props }: SpinnerProps): React.JSX.Element;
@@ -0,0 +1,78 @@
1
+ "use client";
2
+ import { cx } from "../../utils/cx.js";
3
+ import { c } from "react/compiler-runtime";
4
+ import "react";
5
+ import { jsx } from "react/jsx-runtime";
6
+ //#region src/components/spinner/Spinner.tsx
7
+ function Spinner(t0) {
8
+ const $ = c(20);
9
+ let className;
10
+ let props;
11
+ let ref;
12
+ let size;
13
+ let style;
14
+ let t1;
15
+ if ($[0] !== t0) {
16
+ ({size, label: t1, className, style, ref, ...props} = t0);
17
+ $[0] = t0;
18
+ $[1] = className;
19
+ $[2] = props;
20
+ $[3] = ref;
21
+ $[4] = size;
22
+ $[5] = style;
23
+ $[6] = t1;
24
+ } else {
25
+ className = $[1];
26
+ props = $[2];
27
+ ref = $[3];
28
+ size = $[4];
29
+ style = $[5];
30
+ t1 = $[6];
31
+ }
32
+ const label = t1 === void 0 ? "Loading" : t1;
33
+ const t2 = label ? "status" : void 0;
34
+ const t3 = label ?? void 0;
35
+ const t4 = label ? void 0 : true;
36
+ let t5;
37
+ if ($[7] !== className) {
38
+ t5 = cx("oui-spinner", className);
39
+ $[7] = className;
40
+ $[8] = t5;
41
+ } else t5 = $[8];
42
+ let t6;
43
+ if ($[9] !== size || $[10] !== style) {
44
+ t6 = size != null ? {
45
+ width: size,
46
+ height: size,
47
+ ...style
48
+ } : style;
49
+ $[9] = size;
50
+ $[10] = style;
51
+ $[11] = t6;
52
+ } else t6 = $[11];
53
+ let t7;
54
+ if ($[12] !== props || $[13] !== ref || $[14] !== t2 || $[15] !== t3 || $[16] !== t4 || $[17] !== t5 || $[18] !== t6) {
55
+ t7 = /* @__PURE__ */ jsx("span", {
56
+ ref,
57
+ role: t2,
58
+ "aria-label": t3,
59
+ "aria-hidden": t4,
60
+ className: t5,
61
+ style: t6,
62
+ ...props
63
+ });
64
+ $[12] = props;
65
+ $[13] = ref;
66
+ $[14] = t2;
67
+ $[15] = t3;
68
+ $[16] = t4;
69
+ $[17] = t5;
70
+ $[18] = t6;
71
+ $[19] = t7;
72
+ } else t7 = $[19];
73
+ return t7;
74
+ }
75
+ //#endregion
76
+ export { Spinner };
77
+
78
+ //# sourceMappingURL=Spinner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Spinner.js","names":["React","cx","SpinnerProps","HTMLAttributes","HTMLSpanElement","ref","Ref","size","label","Spinner","t0","$","_c","className","props","style","t1","undefined","t2","t3","t4","t5","t6","width","height","t7","_c"],"sources":["../../../src/components/spinner/Spinner.tsx"],"sourcesContent":["import * as React from 'react';\nimport { cx } from '../../utils/cx';\n\nexport interface SpinnerProps extends React.HTMLAttributes<HTMLSpanElement> {\n ref?: React.Ref<HTMLSpanElement>;\n /** Diameter, e.g. `1rem` or `24`. Defaults to `1.25em`. */\n size?: number | string;\n /** Accessible label. Set to `null` when a parent already announces loading. */\n label?: string | null;\n}\n\nexport function Spinner({ size, label = 'Loading', className, style, ref, ...props }: SpinnerProps) {\n return (\n <span\n ref={ref}\n role={label ? 'status' : undefined}\n aria-label={label ?? undefined}\n aria-hidden={label ? undefined : true}\n className={cx('oui-spinner', className)}\n style={size != null ? { width: size, height: size, ...style } : style}\n {...props}\n />\n );\n}\n"],"mappings":";;;;;;AAWA,SAAOS,QAAAC,IAAA;CAAA,MAAAC,IAAAC,EAAA,EAAA;CAAA,IAAAC;CAAA,IAAAC;CAAA,IAAAT;CAAA,IAAAE;CAAA,IAAAQ;CAAA,IAAAC;CAAA,IAAAL,EAAA,OAAAD,IAAA;EAAiB,CAAA,CAAAH,MAAAC,OAAAQ,IAAAH,WAAAE,OAAAV,KAAA,GAAAS,SAAAJ;EAA0EC,EAAA,KAAAD;EAAAC,EAAA,KAAAE;EAAAF,EAAA,KAAAG;EAAAH,EAAA,KAAAN;EAAAM,EAAA,KAAAJ;EAAAI,EAAA,KAAAI;EAAAJ,EAAA,KAAAK;CAAA,OAAA;EAAAH,YAAAF,EAAA;EAAAG,QAAAH,EAAA;EAAAN,MAAAM,EAAA;EAAAJ,OAAAI,EAAA;EAAAI,QAAAJ,EAAA;EAAAK,KAAAL,EAAA;CAAA;CAAlE,MAAAH,QAAAQ,OAAAC,KAAAA,IAAA,YAAAD;CAIpB,MAAAE,KAAAV,QAAA,WAAAS,KAAAA;CACM,MAAAE,KAAAX,SAAAS,KAAAA;CACC,MAAAG,KAAAZ,QAAAS,KAAAA,IAAA;CAAwB,IAAAI;CAAA,IAAAV,EAAA,OAAAE,WAAA;EAC1BQ,KAAApB,GAAG,eAAeY,SAAS;EAACF,EAAA,KAAAE;EAAAF,EAAA,KAAAU;CAAA,OAAAA,KAAAV,EAAA;CAAA,IAAAW;CAAA,IAAAX,EAAA,OAAAJ,QAAAI,EAAA,QAAAI,OAAA;EAChCO,KAAAf,QAAQ,OAAR;GAAAgB,OAAwBhB;GAAIiB,QAAUjB;GAAI,GAAKQ;EAAc,IAA7DA;EAA8DJ,EAAA,KAAAJ;EAAAI,EAAA,MAAAI;EAAAJ,EAAA,MAAAW;CAAA,OAAAA,KAAAX,EAAA;CAAA,IAAAc;CAAA,IAAAd,EAAA,QAAAG,SAAAH,EAAA,QAAAN,OAAAM,EAAA,QAAAO,MAAAP,EAAA,QAAAQ,MAAAR,EAAA,QAAAS,MAAAT,EAAA,QAAAU,MAAAV,EAAA,QAAAW,IAAA;EANvEG,KAAA,oBAAA,QAAA;GACOpB;GACC,MAAAa;GACM,cAAAC;GACC,eAAAC;GACF,WAAAC;GACJ,OAAAC;GAA8D,GACjER;EAAK,CAAA;EACTH,EAAA,MAAAG;EAAAH,EAAA,MAAAN;EAAAM,EAAA,MAAAO;EAAAP,EAAA,MAAAQ;EAAAR,EAAA,MAAAS;EAAAT,EAAA,MAAAU;EAAAV,EAAA,MAAAW;EAAAX,EAAA,MAAAc;CAAA,OAAAA,KAAAd,EAAA;CAAA,OARFc;AAQE"}
@@ -0,0 +1,23 @@
1
+ import { useRender } from '@base-ui/react/use-render';
2
+ export type StackGap = 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl';
3
+ export type StackState = {
4
+ direction: 'column' | 'row';
5
+ gap: StackGap;
6
+ align?: 'start' | 'center' | 'end' | 'stretch' | 'baseline';
7
+ justify?: 'start' | 'center' | 'end' | 'between';
8
+ wrap: boolean;
9
+ };
10
+ export interface StackProps extends useRender.ComponentProps<'div', StackState> {
11
+ /** `column` (default) stacks children, `row` puts them on a line. */
12
+ direction?: StackState['direction'];
13
+ /** Space between children. Override with `--oui-stack-gap`. */
14
+ gap?: StackGap;
15
+ /** Cross-axis alignment. Defaults to `stretch` in a column and `center` in a row. */
16
+ align?: StackState['align'];
17
+ /** Main-axis distribution. */
18
+ justify?: StackState['justify'];
19
+ /** Let a row's children wrap onto more lines. */
20
+ wrap?: boolean;
21
+ }
22
+ /** Flex container that spaces its children evenly, in a column or a row. */
23
+ export declare function Stack({ direction, gap, align, justify, wrap, render, ref, ...props }: StackProps): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
@@ -0,0 +1,79 @@
1
+ "use client";
2
+ import { c } from "react/compiler-runtime";
3
+ import { useRender } from "@base-ui/react/use-render";
4
+ import { mergeProps } from "@base-ui/react/merge-props";
5
+ //#region src/components/stack/Stack.tsx
6
+ /** Flex container that spaces its children evenly, in a column or a row. */
7
+ function Stack(t0) {
8
+ const $ = c(19);
9
+ let t1;
10
+ let t2;
11
+ let t3;
12
+ let t4;
13
+ let t5;
14
+ let t6;
15
+ if ($[0] !== t0) {
16
+ const { direction: t7, gap: t8, align, justify, wrap: t9, render, ref, ...props } = t0;
17
+ const direction = t7 === void 0 ? "column" : t7;
18
+ const gap = t8 === void 0 ? "md" : t8;
19
+ const wrap = t9 === void 0 ? false : t9;
20
+ let t10;
21
+ if ($[7] !== align || $[8] !== direction || $[9] !== gap || $[10] !== justify || $[11] !== wrap) {
22
+ t10 = {
23
+ direction,
24
+ gap,
25
+ align,
26
+ justify,
27
+ wrap
28
+ };
29
+ $[7] = align;
30
+ $[8] = direction;
31
+ $[9] = gap;
32
+ $[10] = justify;
33
+ $[11] = wrap;
34
+ $[12] = t10;
35
+ } else t10 = $[12];
36
+ const state = t10;
37
+ t6 = useRender;
38
+ t1 = "div";
39
+ t2 = render;
40
+ t3 = ref;
41
+ t4 = state;
42
+ t5 = mergeProps({ className: "oui-stack" }, props);
43
+ $[0] = t0;
44
+ $[1] = t1;
45
+ $[2] = t2;
46
+ $[3] = t3;
47
+ $[4] = t4;
48
+ $[5] = t5;
49
+ $[6] = t6;
50
+ } else {
51
+ t1 = $[1];
52
+ t2 = $[2];
53
+ t3 = $[3];
54
+ t4 = $[4];
55
+ t5 = $[5];
56
+ t6 = $[6];
57
+ }
58
+ let t7;
59
+ if ($[13] !== t1 || $[14] !== t2 || $[15] !== t3 || $[16] !== t4 || $[17] !== t5) {
60
+ t7 = {
61
+ defaultTagName: t1,
62
+ render: t2,
63
+ ref: t3,
64
+ state: t4,
65
+ props: t5
66
+ };
67
+ $[13] = t1;
68
+ $[14] = t2;
69
+ $[15] = t3;
70
+ $[16] = t4;
71
+ $[17] = t5;
72
+ $[18] = t7;
73
+ } else t7 = $[18];
74
+ return t6(t7);
75
+ }
76
+ //#endregion
77
+ export { Stack };
78
+
79
+ //# sourceMappingURL=Stack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Stack.js","names":["useRender","mergeProps","StackGap","StackState","direction","gap","align","justify","wrap","StackProps","ComponentProps","Stack","t0","$","_c","t1","t2","t3","t4","t5","t6","t7","t8","t9","render","ref","props","undefined","t10","state","className","defaultTagName","_c"],"sources":["../../../src/components/stack/Stack.tsx"],"sourcesContent":["import { useRender } from '@base-ui/react/use-render';\nimport { mergeProps } from '@base-ui/react/merge-props';\n\nexport type StackGap = 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\nexport type StackState = {\n direction: 'column' | 'row';\n gap: StackGap;\n align?: 'start' | 'center' | 'end' | 'stretch' | 'baseline';\n justify?: 'start' | 'center' | 'end' | 'between';\n wrap: boolean;\n};\n\nexport interface StackProps extends useRender.ComponentProps<'div', StackState> {\n /** `column` (default) stacks children, `row` puts them on a line. */\n direction?: StackState['direction'];\n /** Space between children. Override with `--oui-stack-gap`. */\n gap?: StackGap;\n /** Cross-axis alignment. Defaults to `stretch` in a column and `center` in a row. */\n align?: StackState['align'];\n /** Main-axis distribution. */\n justify?: StackState['justify'];\n /** Let a row's children wrap onto more lines. */\n wrap?: boolean;\n}\n\n/** Flex container that spaces its children evenly, in a column or a row. */\nexport function Stack({\n direction = 'column',\n gap = 'md',\n align,\n justify,\n wrap = false,\n render,\n ref,\n ...props\n}: StackProps) {\n const state: StackState = { direction, gap, align, justify, wrap };\n return useRender({\n defaultTagName: 'div',\n render,\n ref,\n state,\n props: mergeProps<'div'>({ className: 'oui-stack' }, props),\n });\n}\n"],"mappings":";;;;;;AA2BA,SAAOW,MAAAC,IAAA;CAAA,MAAAC,IAAAC,EAAA,EAAA;CAAA,IAAAC;CAAA,IAAAC;CAAA,IAAAC;CAAA,IAAAC;CAAA,IAAAC;CAAA,IAAAC;CAAA,IAAAP,EAAA,OAAAD,IAAA;EAAe,MAAA,EAAAR,WAAAiB,IAAAhB,KAAAiB,IAAAhB,OAAAC,SAAAC,MAAAe,IAAAC,QAAAC,KAAA,GAAAC,UAAAd;EACpB,MAAAR,YAAAiB,OAAAM,KAAAA,IAAA,WAAAN;EACA,MAAAhB,MAAAiB,OAAAK,KAAAA,IAAA,OAAAL;EAGA,MAAAd,OAAAe,OAAAI,KAAAA,IAAA,QAAAJ;EAAY,IAAAK;EAAA,IAAAf,EAAA,OAAAP,SAAAO,EAAA,OAAAT,aAAAS,EAAA,OAAAR,OAAAQ,EAAA,QAAAN,WAAAM,EAAA,QAAAL,MAAA;GAKcoB,MAAA;IAAAxB;IAAAC;IAAAC;IAAAC;IAAAC;GAAuC;GAACK,EAAA,KAAAP;GAAAO,EAAA,KAAAT;GAAAS,EAAA,KAAAR;GAAAQ,EAAA,MAAAN;GAAAM,EAAA,MAAAL;GAAAK,EAAA,MAAAe;EAAA,OAAAA,MAAAf,EAAA;EAAlE,MAAAgB,QAA0BD;EACnB5B,KAAAA;EACWe,KAAA;EAChBS,KAAAA;EACAC,KAAAA;EACAI,KAAAA;EACOV,KAAAlB,WAAkB,EAAA6B,WAAa,YAAY,GAAGJ,KAAK;EAACb,EAAA,KAAAD;EAAAC,EAAA,KAAAE;EAAAF,EAAA,KAAAG;EAAAH,EAAA,KAAAI;EAAAJ,EAAA,KAAAK;EAAAL,EAAA,KAAAM;EAAAN,EAAA,KAAAO;CAAA,OAAA;EAAAL,KAAAF,EAAA;EAAAG,KAAAH,EAAA;EAAAI,KAAAJ,EAAA;EAAAK,KAAAL,EAAA;EAAAM,KAAAN,EAAA;EAAAO,KAAAP,EAAA;CAAA;CAAA,IAAAQ;CAAA,IAAAR,EAAA,QAAAE,MAAAF,EAAA,QAAAG,MAAAH,EAAA,QAAAI,MAAAJ,EAAA,QAAAK,MAAAL,EAAA,QAAAM,IAAA;EAL5CE,KAAA;GAAAU,gBACChB;GAAKS,QACrBA;GAAMC,KACNA;GAAGI,OACHA;GAAKH,OACEP;EACT;EAACN,EAAA,MAAAE;EAAAF,EAAA,MAAAG;EAAAH,EAAA,MAAAI;EAAAJ,EAAA,MAAAK;EAAAL,EAAA,MAAAM;EAAAN,EAAA,MAAAQ;CAAA,OAAAA,KAAAR,EAAA;CAAA,OANMb,GAAUqB,EAMhB;AAAC"}
@@ -0,0 +1,22 @@
1
+ import * as React from 'react';
2
+ import { type CardProps } from '../card/Card';
3
+ export type StatTrend = 'up' | 'down' | 'flat';
4
+ export type StatTone = 'positive' | 'negative' | 'neutral';
5
+ export interface StatCardProps extends Omit<CardProps, 'children'> {
6
+ label: React.ReactNode;
7
+ value: React.ReactNode;
8
+ /** Small uppercase unit under the value, e.g. "kWh" or "orders". */
9
+ unit?: React.ReactNode;
10
+ /** Change indicator, e.g. "+12.4%". */
11
+ delta?: React.ReactNode;
12
+ trend?: StatTrend;
13
+ /** Color of the delta. Defaults to positive for `up`, negative for `down`. */
14
+ tone?: StatTone;
15
+ /** Supporting text under the value. */
16
+ hint?: React.ReactNode;
17
+ /** Icon tile shown in the top-right corner. */
18
+ icon?: React.ReactNode;
19
+ loading?: boolean;
20
+ }
21
+ /** KPI tile: label, large value, optional unit and trend. */
22
+ export declare function StatCard({ label, value, unit, delta, trend, tone, hint, icon, loading, className, ref, ...props }: StatCardProps): React.JSX.Element;
@@ -0,0 +1,153 @@
1
+ "use client";
2
+ import { cx } from "../../utils/cx.js";
3
+ import { TrendingDownIcon, TrendingUpIcon } from "../../icons/index.js";
4
+ import { Card } from "../card/Card.js";
5
+ import { Skeleton } from "../skeleton/Skeleton.js";
6
+ import { c } from "react/compiler-runtime";
7
+ import "react";
8
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
9
+ //#region src/components/stat-card/StatCard.tsx
10
+ /** KPI tile: label, large value, optional unit and trend. */
11
+ function StatCard(t0) {
12
+ const $ = c(36);
13
+ let className;
14
+ let delta;
15
+ let hint;
16
+ let icon;
17
+ let label;
18
+ let loading;
19
+ let props;
20
+ let ref;
21
+ let tone;
22
+ let trend;
23
+ let unit;
24
+ let value;
25
+ if ($[0] !== t0) {
26
+ ({label, value, unit, delta, trend, tone, hint, icon, loading, className, ref, ...props} = t0);
27
+ $[0] = t0;
28
+ $[1] = className;
29
+ $[2] = delta;
30
+ $[3] = hint;
31
+ $[4] = icon;
32
+ $[5] = label;
33
+ $[6] = loading;
34
+ $[7] = props;
35
+ $[8] = ref;
36
+ $[9] = tone;
37
+ $[10] = trend;
38
+ $[11] = unit;
39
+ $[12] = value;
40
+ } else {
41
+ className = $[1];
42
+ delta = $[2];
43
+ hint = $[3];
44
+ icon = $[4];
45
+ label = $[5];
46
+ loading = $[6];
47
+ props = $[7];
48
+ ref = $[8];
49
+ tone = $[9];
50
+ trend = $[10];
51
+ unit = $[11];
52
+ value = $[12];
53
+ }
54
+ const resolvedTone = tone ?? (trend === "up" ? "positive" : trend === "down" ? "negative" : "neutral");
55
+ let t1;
56
+ if ($[13] !== className) {
57
+ t1 = cx("oui-stat", className);
58
+ $[13] = className;
59
+ $[14] = t1;
60
+ } else t1 = $[14];
61
+ let t2;
62
+ if ($[15] !== label) {
63
+ t2 = /* @__PURE__ */ jsx("p", {
64
+ className: "oui-stat__label",
65
+ children: label
66
+ });
67
+ $[15] = label;
68
+ $[16] = t2;
69
+ } else t2 = $[16];
70
+ let t3;
71
+ if ($[17] !== icon) {
72
+ t3 = icon && /* @__PURE__ */ jsx("span", {
73
+ className: "oui-stat__icon",
74
+ children: icon
75
+ });
76
+ $[17] = icon;
77
+ $[18] = t3;
78
+ } else t3 = $[18];
79
+ let t4;
80
+ if ($[19] !== t2 || $[20] !== t3) {
81
+ t4 = /* @__PURE__ */ jsxs("div", {
82
+ className: "oui-stat__header",
83
+ children: [t2, t3]
84
+ });
85
+ $[19] = t2;
86
+ $[20] = t3;
87
+ $[21] = t4;
88
+ } else t4 = $[21];
89
+ let t5;
90
+ if ($[22] !== delta || $[23] !== hint || $[24] !== loading || $[25] !== resolvedTone || $[26] !== trend || $[27] !== unit || $[28] !== value) {
91
+ t5 = loading ? /* @__PURE__ */ jsxs("div", {
92
+ className: "oui-stat__loading",
93
+ children: [/* @__PURE__ */ jsx(Skeleton, {
94
+ height: "2.25rem",
95
+ width: "55%"
96
+ }), /* @__PURE__ */ jsx(Skeleton, {
97
+ height: "0.9rem",
98
+ width: "35%"
99
+ })]
100
+ }) : /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsxs("div", {
101
+ className: "oui-stat__body",
102
+ children: [/* @__PURE__ */ jsx("p", {
103
+ className: "oui-stat__value",
104
+ children: value
105
+ }), unit && /* @__PURE__ */ jsx("p", {
106
+ className: "oui-stat__unit",
107
+ children: unit
108
+ })]
109
+ }), (delta || hint) && /* @__PURE__ */ jsxs("div", {
110
+ className: "oui-stat__footer",
111
+ children: [delta && /* @__PURE__ */ jsxs("span", {
112
+ className: "oui-stat__delta",
113
+ "data-tone": resolvedTone,
114
+ children: [
115
+ trend === "up" && /* @__PURE__ */ jsx(TrendingUpIcon, {}),
116
+ trend === "down" && /* @__PURE__ */ jsx(TrendingDownIcon, {}),
117
+ delta
118
+ ]
119
+ }), hint && /* @__PURE__ */ jsx("span", {
120
+ className: "oui-stat__hint",
121
+ children: hint
122
+ })]
123
+ })] });
124
+ $[22] = delta;
125
+ $[23] = hint;
126
+ $[24] = loading;
127
+ $[25] = resolvedTone;
128
+ $[26] = trend;
129
+ $[27] = unit;
130
+ $[28] = value;
131
+ $[29] = t5;
132
+ } else t5 = $[29];
133
+ let t6;
134
+ if ($[30] !== props || $[31] !== ref || $[32] !== t1 || $[33] !== t4 || $[34] !== t5) {
135
+ t6 = /* @__PURE__ */ jsxs(Card, {
136
+ ref,
137
+ className: t1,
138
+ ...props,
139
+ children: [t4, t5]
140
+ });
141
+ $[30] = props;
142
+ $[31] = ref;
143
+ $[32] = t1;
144
+ $[33] = t4;
145
+ $[34] = t5;
146
+ $[35] = t6;
147
+ } else t6 = $[35];
148
+ return t6;
149
+ }
150
+ //#endregion
151
+ export { StatCard };
152
+
153
+ //# sourceMappingURL=StatCard.js.map