@tensor_1/react 2.4.0 → 2.5.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.
@@ -0,0 +1,35 @@
1
+ import * as react from 'react';
2
+ import { HTMLAttributes, ReactNode } from 'react';
3
+
4
+ interface InboxProps extends HTMLAttributes<HTMLDivElement> {
5
+ children?: ReactNode;
6
+ }
7
+ /** Two-pane inbox master-detail container backed by `.uix-inbox`. Place `<InboxList>` and `<InboxDetail>` as children. */
8
+ declare function Inbox({ children, className, ...props }: InboxProps): react.JSX.Element;
9
+ interface InboxListProps extends HTMLAttributes<HTMLDivElement> {
10
+ children?: ReactNode;
11
+ }
12
+ /** Left-pane item list. Place `<InboxItem>` children here. */
13
+ declare function InboxList({ children, className, ...props }: InboxListProps): react.JSX.Element;
14
+ interface InboxItemProps extends HTMLAttributes<HTMLDivElement> {
15
+ /** Primary subject / title line. */
16
+ subject?: ReactNode;
17
+ /** Secondary preview excerpt (truncated). */
18
+ preview?: ReactNode;
19
+ /** Leading slot — avatar, icon, or priority indicator. */
20
+ leading?: ReactNode;
21
+ /** When true sets `data-unread` → bolds the subject line. */
22
+ unread?: boolean;
23
+ /** When true sets `aria-selected` → renders the accent left-border stripe. */
24
+ selected?: boolean;
25
+ children?: ReactNode;
26
+ }
27
+ /** A single inbox row with subject, preview excerpt, optional leading slot, and unread/selected states. */
28
+ declare function InboxItem({ subject, preview, leading, unread, selected, children, className, ...props }: InboxItemProps): react.JSX.Element;
29
+ interface InboxDetailProps extends HTMLAttributes<HTMLDivElement> {
30
+ children?: ReactNode;
31
+ }
32
+ /** Right-pane detail area — renders the full content of the selected item. */
33
+ declare function InboxDetail({ children, className, ...props }: InboxDetailProps): react.JSX.Element;
34
+
35
+ export { Inbox, InboxDetail, type InboxDetailProps, InboxItem, type InboxItemProps, InboxList, type InboxListProps, type InboxProps };
@@ -0,0 +1,45 @@
1
+ "use client";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import { cx } from "../cx.js";
4
+ function Inbox({ children, className, ...props }) {
5
+ return /* @__PURE__ */ jsx("div", { className: cx("uix-inbox", className), ...props, children });
6
+ }
7
+ function InboxList({ children, className, ...props }) {
8
+ return /* @__PURE__ */ jsx("div", { className: cx("uix-inbox__list", className), role: "listbox", ...props, children });
9
+ }
10
+ function InboxItem({
11
+ subject,
12
+ preview,
13
+ leading,
14
+ unread,
15
+ selected,
16
+ children,
17
+ className,
18
+ ...props
19
+ }) {
20
+ return /* @__PURE__ */ jsxs(
21
+ "div",
22
+ {
23
+ role: "option",
24
+ "aria-selected": selected ?? false,
25
+ className: cx("uix-inbox__item", className),
26
+ ...unread ? { "data-unread": "" } : {},
27
+ ...props,
28
+ children: [
29
+ leading,
30
+ subject != null && /* @__PURE__ */ jsx("div", { className: "uix-inbox__subject", children: subject }),
31
+ preview != null && /* @__PURE__ */ jsx("div", { className: "uix-inbox__preview", children: preview }),
32
+ children
33
+ ]
34
+ }
35
+ );
36
+ }
37
+ function InboxDetail({ children, className, ...props }) {
38
+ return /* @__PURE__ */ jsx("div", { className: cx("uix-inbox__detail", className), ...props, children });
39
+ }
40
+ export {
41
+ Inbox,
42
+ InboxDetail,
43
+ InboxItem,
44
+ InboxList
45
+ };
@@ -0,0 +1,15 @@
1
+ import * as react from 'react';
2
+ import { HTMLAttributes } from 'react';
3
+
4
+ /** Fill color tone for the meter bar. Defaults to `success` (green). */
5
+ type MeterTone = 'success' | 'warning' | 'danger' | 'attention' | 'overdue';
6
+ interface MeterProps extends HTMLAttributes<HTMLDivElement> {
7
+ /** Fill level 0–100. Clamped to this range. */
8
+ value?: number;
9
+ /** Threshold tone applied via `data-tone` on the fill element. `success` is the implicit default (no attribute). */
10
+ tone?: MeterTone;
11
+ }
12
+ /** Horizontal utilization / threshold bar backed by `.uix-meter`. */
13
+ declare function Meter({ value, tone, className, ...props }: MeterProps): react.JSX.Element;
14
+
15
+ export { Meter, type MeterProps, type MeterTone };
@@ -0,0 +1,28 @@
1
+ "use client";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import { cx } from "../cx.js";
4
+ function Meter({ value = 0, tone, className, ...props }) {
5
+ const pct = Math.max(0, Math.min(100, value));
6
+ return /* @__PURE__ */ jsx(
7
+ "div",
8
+ {
9
+ role: "meter",
10
+ "aria-valuenow": pct,
11
+ "aria-valuemin": 0,
12
+ "aria-valuemax": 100,
13
+ className: cx("uix-meter", className),
14
+ ...props,
15
+ children: /* @__PURE__ */ jsx(
16
+ "div",
17
+ {
18
+ className: "uix-meter__fill",
19
+ style: { width: `${pct}%` },
20
+ ...tone && tone !== "success" ? { "data-tone": tone } : {}
21
+ }
22
+ )
23
+ }
24
+ );
25
+ }
26
+ export {
27
+ Meter
28
+ };
@@ -1,7 +1,7 @@
1
1
  import * as react from 'react';
2
2
  import { HTMLAttributes, ReactNode } from 'react';
3
3
 
4
- type PillTone = 'neutral' | 'success' | 'info' | 'warning' | 'danger' | 'critical' | 'muted';
4
+ type PillTone = 'neutral' | 'success' | 'info' | 'warning' | 'danger' | 'critical' | 'muted' | 'attention' | 'overdue' | 'sla-ok' | 'sla-at-risk' | 'sla-breached' | 'p1' | 'p2' | 'p3' | 'p4' | 'p5';
5
5
  type PillTreatment = 'filled' | 'outline';
6
6
  interface StatusPillProps extends HTMLAttributes<HTMLSpanElement> {
7
7
  tone?: PillTone;
package/dist/index.cjs CHANGED
@@ -40,6 +40,10 @@ __export(src_exports, {
40
40
  EmptyState: () => EmptyState,
41
41
  ErrorState: () => ErrorState,
42
42
  Field: () => Field,
43
+ Inbox: () => Inbox,
44
+ InboxDetail: () => InboxDetail,
45
+ InboxItem: () => InboxItem,
46
+ InboxList: () => InboxList,
43
47
  Input: () => Input,
44
48
  InputGroup: () => InputGroup,
45
49
  Kanban: () => Kanban,
@@ -49,6 +53,7 @@ __export(src_exports, {
49
53
  List: () => List,
50
54
  ListItem: () => ListItem,
51
55
  LoadingState: () => LoadingState,
56
+ Meter: () => Meter,
52
57
  Modal: () => Modal,
53
58
  NavFavourites: () => NavFavourites,
54
59
  NavGroup: () => NavGroup,
@@ -1125,49 +1130,74 @@ function Progress({ value = 0, max = 100, indeterminate, className, ...props })
1125
1130
  );
1126
1131
  }
1127
1132
 
1128
- // src/components/Stat.tsx
1133
+ // src/components/Meter.tsx
1129
1134
  var import_jsx_runtime29 = require("react/jsx-runtime");
1135
+ function Meter({ value = 0, tone, className, ...props }) {
1136
+ const pct = Math.max(0, Math.min(100, value));
1137
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
1138
+ "div",
1139
+ {
1140
+ role: "meter",
1141
+ "aria-valuenow": pct,
1142
+ "aria-valuemin": 0,
1143
+ "aria-valuemax": 100,
1144
+ className: cx("uix-meter", className),
1145
+ ...props,
1146
+ children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
1147
+ "div",
1148
+ {
1149
+ className: "uix-meter__fill",
1150
+ style: { width: `${pct}%` },
1151
+ ...tone && tone !== "success" ? { "data-tone": tone } : {}
1152
+ }
1153
+ )
1154
+ }
1155
+ );
1156
+ }
1157
+
1158
+ // src/components/Stat.tsx
1159
+ var import_jsx_runtime30 = require("react/jsx-runtime");
1130
1160
  function Stat({ label, value, icon, meta, trend, className, ...props }) {
1131
- return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: cx("uix-stat", className), ...props, children: [
1132
- /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: "uix-stat__label", children: [
1133
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { children: label }),
1161
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: cx("uix-stat", className), ...props, children: [
1162
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "uix-stat__label", children: [
1163
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { children: label }),
1134
1164
  icon
1135
1165
  ] }),
1136
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { className: "uix-stat__value", children: value }),
1137
- (meta != null || trend != null) && /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: "uix-stat__meta", children: [
1138
- trend != null && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { className: cx("uix-stat__trend", `uix-stat__trend--${trend.direction}`), children: trend.label }),
1166
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { className: "uix-stat__value", children: value }),
1167
+ (meta != null || trend != null) && /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "uix-stat__meta", children: [
1168
+ trend != null && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { className: cx("uix-stat__trend", `uix-stat__trend--${trend.direction}`), children: trend.label }),
1139
1169
  meta
1140
1170
  ] })
1141
1171
  ] });
1142
1172
  }
1143
1173
 
1144
1174
  // src/components/Tooltip.tsx
1145
- var import_jsx_runtime30 = require("react/jsx-runtime");
1175
+ var import_jsx_runtime31 = require("react/jsx-runtime");
1146
1176
  function Tooltip({ label, children, ...props }) {
1147
- return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { "data-uix-tip": label, ...props, children });
1177
+ return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { "data-uix-tip": label, ...props, children });
1148
1178
  }
1149
1179
 
1150
1180
  // src/components/States.tsx
1151
- var import_jsx_runtime31 = require("react/jsx-runtime");
1181
+ var import_jsx_runtime32 = require("react/jsx-runtime");
1152
1182
  function EmptyState({ icon, title, children, action, className, ...props }) {
1153
- return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: cx("uix-empty", className), ...props, children: [
1154
- icon != null && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", { className: "uix-empty__icon", children: icon }),
1155
- title != null && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", { className: "uix-empty__title", children: title }),
1183
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: cx("uix-empty", className), ...props, children: [
1184
+ icon != null && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: "uix-empty__icon", children: icon }),
1185
+ title != null && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: "uix-empty__title", children: title }),
1156
1186
  children,
1157
1187
  action
1158
1188
  ] });
1159
1189
  }
1160
1190
  function ErrorState({ icon, title, detail, action, className, ...props }) {
1161
- return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: cx("uix-empty", "uix-empty--danger", className), role: "alert", ...props, children: [
1162
- icon != null && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", { className: "uix-empty__icon uix-empty__icon--danger", children: icon }),
1163
- title != null && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", { className: "uix-empty__title", children: title }),
1164
- detail != null && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("p", { children: detail }),
1191
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: cx("uix-empty", "uix-empty--danger", className), role: "alert", ...props, children: [
1192
+ icon != null && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: "uix-empty__icon uix-empty__icon--danger", children: icon }),
1193
+ title != null && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: "uix-empty__title", children: title }),
1194
+ detail != null && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("p", { children: detail }),
1165
1195
  action
1166
1196
  ] });
1167
1197
  }
1168
1198
  function Skeleton({ variant = "block", width, height, className, style, ...props }) {
1169
1199
  const dims = { width, height, ...style };
1170
- return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
1200
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
1171
1201
  "div",
1172
1202
  {
1173
1203
  className: cx(
@@ -1182,52 +1212,52 @@ function Skeleton({ variant = "block", width, height, className, style, ...props
1182
1212
  );
1183
1213
  }
1184
1214
  function LoadingState({ rows = 3, className, ...props }) {
1185
- return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", { className: cx("uix-stack", className), role: "status", "aria-busy": "true", ...props, children: Array.from({ length: rows }, (_, i) => /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Skeleton, { variant: "text", width: `${92 - i % 3 * 14}%` }, i)) });
1215
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: cx("uix-stack", className), role: "status", "aria-busy": "true", ...props, children: Array.from({ length: rows }, (_, i) => /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Skeleton, { variant: "text", width: `${92 - i % 3 * 14}%` }, i)) });
1186
1216
  }
1187
1217
 
1188
1218
  // src/components/Label.tsx
1189
- var import_jsx_runtime32 = require("react/jsx-runtime");
1219
+ var import_jsx_runtime33 = require("react/jsx-runtime");
1190
1220
  function Label({ color, dot, children, className, style, ...props }) {
1191
1221
  const merged = color ? { "--label-color": color, ...style } : style;
1192
- return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("span", { className: cx("uix-label", className), style: merged, ...props, children: [
1193
- dot && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: "uix-label__dot", "aria-hidden": "true" }),
1222
+ return /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("span", { className: cx("uix-label", className), style: merged, ...props, children: [
1223
+ dot && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: "uix-label__dot", "aria-hidden": "true" }),
1194
1224
  children
1195
1225
  ] });
1196
1226
  }
1197
1227
 
1198
1228
  // src/components/Avatar.tsx
1199
- var import_jsx_runtime33 = require("react/jsx-runtime");
1229
+ var import_jsx_runtime34 = require("react/jsx-runtime");
1200
1230
  function Avatar({ size = "md", src, alt, children, status, className, ...props }) {
1201
- return /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("span", { className: cx("uix-avatar", size !== "md" && `uix-avatar--${size}`, className), ...props, children: [
1202
- src ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("img", { src, alt: alt ?? "" }) : children,
1203
- status && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: "uix-avatar__status" })
1231
+ return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("span", { className: cx("uix-avatar", size !== "md" && `uix-avatar--${size}`, className), ...props, children: [
1232
+ src ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("img", { src, alt: alt ?? "" }) : children,
1233
+ status && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { className: "uix-avatar__status" })
1204
1234
  ] });
1205
1235
  }
1206
1236
  function AvatarGroup({ children, className, ...props }) {
1207
- return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: cx("uix-avatar-group", className), ...props, children });
1237
+ return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { className: cx("uix-avatar-group", className), ...props, children });
1208
1238
  }
1209
1239
  function UserChip({ avatar, name, sub, className, children, ...props }) {
1210
- return /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("span", { className: cx("uix-user-chip", className), ...props, children: [
1240
+ return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("span", { className: cx("uix-user-chip", className), ...props, children: [
1211
1241
  avatar,
1212
- /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("span", { children: [
1213
- name != null && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: "uix-user-chip__name", children: name }),
1214
- sub != null && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: "uix-user-chip__sub", style: { display: "block" }, children: sub })
1242
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("span", { children: [
1243
+ name != null && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { className: "uix-user-chip__name", children: name }),
1244
+ sub != null && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { className: "uix-user-chip__sub", style: { display: "block" }, children: sub })
1215
1245
  ] }),
1216
1246
  children
1217
1247
  ] });
1218
1248
  }
1219
1249
 
1220
1250
  // src/components/Comments.tsx
1221
- var import_jsx_runtime34 = require("react/jsx-runtime");
1251
+ var import_jsx_runtime35 = require("react/jsx-runtime");
1222
1252
  function Comments({ children, className, ...props }) {
1223
- return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("div", { className: cx("uix-comments", className), ...props, children });
1253
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { className: cx("uix-comments", className), ...props, children });
1224
1254
  }
1225
1255
  function Comment({ avatar, author, meta, children, className, ...props }) {
1226
- return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: cx("uix-comment", className), ...props, children: [
1227
- avatar ?? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { "aria-hidden": "true" }),
1228
- /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: "uix-comment__body", children: [
1229
- (author != null || meta != null) && /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: "uix-comment__meta", children: [
1230
- author != null && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { className: "uix-comment__author", children: author }),
1256
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { className: cx("uix-comment", className), ...props, children: [
1257
+ avatar ?? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { "aria-hidden": "true" }),
1258
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { className: "uix-comment__body", children: [
1259
+ (author != null || meta != null) && /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { className: "uix-comment__meta", children: [
1260
+ author != null && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "uix-comment__author", children: author }),
1231
1261
  author != null && meta != null ? " \xB7 " : null,
1232
1262
  meta
1233
1263
  ] }),
@@ -1237,95 +1267,134 @@ function Comment({ avatar, author, meta, children, className, ...props }) {
1237
1267
  }
1238
1268
 
1239
1269
  // src/components/Timeline.tsx
1240
- var import_jsx_runtime35 = require("react/jsx-runtime");
1270
+ var import_jsx_runtime36 = require("react/jsx-runtime");
1241
1271
  function Timeline({ children, className, ...props }) {
1242
- return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { className: cx("uix-timeline", className), ...props, children });
1272
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { className: cx("uix-timeline", className), ...props, children });
1243
1273
  }
1244
1274
  function TimelineItem({ meta, children, className, ...props }) {
1245
- return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { className: cx("uix-timeline__item", className), ...props, children: [
1246
- /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { className: "uix-timeline__rail", children: [
1247
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "uix-timeline__node" }),
1248
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "uix-timeline__line" })
1275
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: cx("uix-timeline__item", className), ...props, children: [
1276
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: "uix-timeline__rail", children: [
1277
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: "uix-timeline__node" }),
1278
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: "uix-timeline__line" })
1249
1279
  ] }),
1250
- /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { className: "uix-timeline__body", children: [
1251
- meta != null && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { className: "uix-timeline__meta", children: meta }),
1280
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: "uix-timeline__body", children: [
1281
+ meta != null && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { className: "uix-timeline__meta", children: meta }),
1252
1282
  children
1253
1283
  ] })
1254
1284
  ] });
1255
1285
  }
1256
1286
 
1257
1287
  // src/components/Prose.tsx
1258
- var import_jsx_runtime36 = require("react/jsx-runtime");
1288
+ var import_jsx_runtime37 = require("react/jsx-runtime");
1259
1289
  function Prose({ children, className, ...props }) {
1260
- return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { className: cx("uix-prose", className), ...props, children });
1290
+ return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: cx("uix-prose", className), ...props, children });
1261
1291
  }
1262
1292
  function Note({ tone, icon, children, className, ...props }) {
1263
- return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: cx("uix-note", tone && `uix-note--${tone}`, className), ...props, children: [
1264
- icon != null && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { className: "uix-note__icon", children: icon }),
1265
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { className: "uix-note__body", children })
1293
+ return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: cx("uix-note", tone && `uix-note--${tone}`, className), ...props, children: [
1294
+ icon != null && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: "uix-note__icon", children: icon }),
1295
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: "uix-note__body", children })
1266
1296
  ] });
1267
1297
  }
1268
1298
 
1269
1299
  // src/components/Popover.tsx
1270
- var import_jsx_runtime37 = require("react/jsx-runtime");
1300
+ var import_jsx_runtime38 = require("react/jsx-runtime");
1271
1301
  function Popover({ popover = "auto", children, className, ...props }) {
1272
1302
  const popoverAttr = { popover };
1273
- return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: cx("uix-popover", className), ...popoverAttr, ...props, children });
1303
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { className: cx("uix-popover", className), ...popoverAttr, ...props, children });
1274
1304
  }
1275
1305
 
1276
1306
  // src/components/CommandPalette.tsx
1277
- var import_jsx_runtime38 = require("react/jsx-runtime");
1307
+ var import_jsx_runtime39 = require("react/jsx-runtime");
1278
1308
  function CommandPalette({ inputProps, children, className, ...props }) {
1279
- return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { className: cx("uix-cmdk", className), ...props, children: [
1280
- /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("input", { className: "uix-cmdk__input", ...inputProps }),
1281
- /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { className: "uix-cmdk__list", children })
1309
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)("div", { className: cx("uix-cmdk", className), ...props, children: [
1310
+ /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("input", { className: "uix-cmdk__input", ...inputProps }),
1311
+ /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("div", { className: "uix-cmdk__list", children })
1282
1312
  ] });
1283
1313
  }
1284
1314
  function CommandGroup({ label, children }) {
1285
- return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_jsx_runtime38.Fragment, { children: [
1286
- label != null && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { className: "uix-cmdk__group", children: label }),
1315
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(import_jsx_runtime39.Fragment, { children: [
1316
+ label != null && /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("div", { className: "uix-cmdk__group", children: label }),
1287
1317
  children
1288
1318
  ] });
1289
1319
  }
1290
1320
  function CommandItem({ icon, shortcut, active, children, className, ...props }) {
1291
- return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { className: cx("uix-cmdk__item", className), "data-active": active || void 0, ...props, children: [
1321
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)("div", { className: cx("uix-cmdk__item", className), "data-active": active || void 0, ...props, children: [
1292
1322
  icon,
1293
- /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { children }),
1323
+ /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("span", { children }),
1294
1324
  shortcut
1295
1325
  ] });
1296
1326
  }
1297
1327
 
1328
+ // src/components/Inbox.tsx
1329
+ var import_jsx_runtime40 = require("react/jsx-runtime");
1330
+ function Inbox({ children, className, ...props }) {
1331
+ return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { className: cx("uix-inbox", className), ...props, children });
1332
+ }
1333
+ function InboxList({ children, className, ...props }) {
1334
+ return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { className: cx("uix-inbox__list", className), role: "listbox", ...props, children });
1335
+ }
1336
+ function InboxItem({
1337
+ subject,
1338
+ preview,
1339
+ leading,
1340
+ unread,
1341
+ selected,
1342
+ children,
1343
+ className,
1344
+ ...props
1345
+ }) {
1346
+ return /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(
1347
+ "div",
1348
+ {
1349
+ role: "option",
1350
+ "aria-selected": selected ?? false,
1351
+ className: cx("uix-inbox__item", className),
1352
+ ...unread ? { "data-unread": "" } : {},
1353
+ ...props,
1354
+ children: [
1355
+ leading,
1356
+ subject != null && /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { className: "uix-inbox__subject", children: subject }),
1357
+ preview != null && /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { className: "uix-inbox__preview", children: preview }),
1358
+ children
1359
+ ]
1360
+ }
1361
+ );
1362
+ }
1363
+ function InboxDetail({ children, className, ...props }) {
1364
+ return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { className: cx("uix-inbox__detail", className), ...props, children });
1365
+ }
1366
+
1298
1367
  // src/components/Kanban.tsx
1299
- var import_jsx_runtime39 = require("react/jsx-runtime");
1368
+ var import_jsx_runtime41 = require("react/jsx-runtime");
1300
1369
  function Kanban({ children, className, ...props }) {
1301
- return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("div", { className: cx("uix-kanban", className), ...props, children });
1370
+ return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { className: cx("uix-kanban", className), ...props, children });
1302
1371
  }
1303
1372
  function KanbanColumn({ title, count, children, className, ...props }) {
1304
- return /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)("div", { className: cx("uix-kanban__col", className), ...props, children: [
1305
- (title != null || count != null) && /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)("div", { className: "uix-kanban__head", children: [
1373
+ return /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)("div", { className: cx("uix-kanban__col", className), ...props, children: [
1374
+ (title != null || count != null) && /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)("div", { className: "uix-kanban__head", children: [
1306
1375
  title,
1307
- count != null && /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("span", { className: "uix-kanban__count", children: count })
1376
+ count != null && /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("span", { className: "uix-kanban__count", children: count })
1308
1377
  ] }),
1309
- /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("div", { className: "uix-kanban__body", children })
1378
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { className: "uix-kanban__body", children })
1310
1379
  ] });
1311
1380
  }
1312
1381
  function KanbanCard({ title, meta, children, className, ...props }) {
1313
- return /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)("div", { className: cx("uix-kanban__card", className), ...props, children: [
1314
- title && /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("div", { className: "uix-kanban__card-title", children: title }),
1315
- meta && /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("div", { className: "uix-kanban__card-meta", children: meta }),
1382
+ return /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)("div", { className: cx("uix-kanban__card", className), ...props, children: [
1383
+ title && /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { className: "uix-kanban__card-title", children: title }),
1384
+ meta && /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { className: "uix-kanban__card-meta", children: meta }),
1316
1385
  children
1317
1386
  ] });
1318
1387
  }
1319
1388
 
1320
1389
  // src/components/Tree.tsx
1321
1390
  var import_react13 = require("react");
1322
- var import_jsx_runtime40 = require("react/jsx-runtime");
1323
- var ChevronIcon2 = () => /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("svg", { viewBox: "0 0 12 12", fill: "none", stroke: "currentColor", strokeWidth: 1.5, strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("path", { d: "M2 4l4 4 4-4" }) });
1391
+ var import_jsx_runtime42 = require("react/jsx-runtime");
1392
+ var ChevronIcon2 = () => /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("svg", { viewBox: "0 0 12 12", fill: "none", stroke: "currentColor", strokeWidth: 1.5, strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("path", { d: "M2 4l4 4 4-4" }) });
1324
1393
  function TreeNode({ node, expanded, selected, onToggle, onSelect, level = 0 }) {
1325
1394
  const hasChildren = Array.isArray(node.children) && node.children.length > 0;
1326
1395
  const isExpanded = expanded.has(node.id);
1327
- return /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)("li", { children: [
1328
- /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(
1396
+ return /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)("li", { children: [
1397
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(
1329
1398
  "button",
1330
1399
  {
1331
1400
  className: "uix-tree__row",
@@ -1336,13 +1405,13 @@ function TreeNode({ node, expanded, selected, onToggle, onSelect, level = 0 }) {
1336
1405
  onSelect?.(node.id);
1337
1406
  },
1338
1407
  children: [
1339
- /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("span", { className: "uix-tree__toggle", children: hasChildren && /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(ChevronIcon2, {}) }),
1340
- node.icon && /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("span", { "aria-hidden": "true", children: node.icon }),
1408
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("span", { className: "uix-tree__toggle", children: hasChildren && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(ChevronIcon2, {}) }),
1409
+ node.icon && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("span", { "aria-hidden": "true", children: node.icon }),
1341
1410
  node.label
1342
1411
  ]
1343
1412
  }
1344
1413
  ),
1345
- hasChildren && isExpanded && /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("ul", { children: node.children.map((child) => /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
1414
+ hasChildren && isExpanded && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("ul", { children: node.children.map((child) => /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
1346
1415
  TreeNode,
1347
1416
  {
1348
1417
  node: child,
@@ -1370,7 +1439,7 @@ function Tree({ nodes, expanded: controlledExpanded, defaultExpanded, selected,
1370
1439
  }
1371
1440
  onToggle?.(id);
1372
1441
  }
1373
- return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("ul", { className: cx("uix-tree", className), role: "tree", ...props, children: nodes.map((node) => /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
1442
+ return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("ul", { className: cx("uix-tree", className), role: "tree", ...props, children: nodes.map((node) => /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
1374
1443
  TreeNode,
1375
1444
  {
1376
1445
  node,
@@ -1404,6 +1473,10 @@ function Tree({ nodes, expanded: controlledExpanded, defaultExpanded, selected,
1404
1473
  EmptyState,
1405
1474
  ErrorState,
1406
1475
  Field,
1476
+ Inbox,
1477
+ InboxDetail,
1478
+ InboxItem,
1479
+ InboxList,
1407
1480
  Input,
1408
1481
  InputGroup,
1409
1482
  Kanban,
@@ -1413,6 +1486,7 @@ function Tree({ nodes, expanded: controlledExpanded, defaultExpanded, selected,
1413
1486
  List,
1414
1487
  ListItem,
1415
1488
  LoadingState,
1489
+ Meter,
1416
1490
  Modal,
1417
1491
  NavFavourites,
1418
1492
  NavGroup,
package/dist/index.d.cts CHANGED
@@ -414,7 +414,7 @@ interface PaginationProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange
414
414
  }
415
415
  declare function Pagination({ page, pageCount, onChange, className, ...props }: PaginationProps): react.JSX.Element;
416
416
 
417
- type PillTone = 'neutral' | 'success' | 'info' | 'warning' | 'danger' | 'critical' | 'muted';
417
+ type PillTone = 'neutral' | 'success' | 'info' | 'warning' | 'danger' | 'critical' | 'muted' | 'attention' | 'overdue' | 'sla-ok' | 'sla-at-risk' | 'sla-breached' | 'p1' | 'p2' | 'p3' | 'p4' | 'p5';
418
418
  type PillTreatment = 'filled' | 'outline';
419
419
  interface StatusPillProps extends HTMLAttributes<HTMLSpanElement> {
420
420
  tone?: PillTone;
@@ -435,6 +435,17 @@ interface ProgressProps extends HTMLAttributes<HTMLDivElement> {
435
435
  }
436
436
  declare function Progress({ value, max, indeterminate, className, ...props }: ProgressProps): react.JSX.Element;
437
437
 
438
+ /** Fill color tone for the meter bar. Defaults to `success` (green). */
439
+ type MeterTone = 'success' | 'warning' | 'danger' | 'attention' | 'overdue';
440
+ interface MeterProps extends HTMLAttributes<HTMLDivElement> {
441
+ /** Fill level 0–100. Clamped to this range. */
442
+ value?: number;
443
+ /** Threshold tone applied via `data-tone` on the fill element. `success` is the implicit default (no attribute). */
444
+ tone?: MeterTone;
445
+ }
446
+ /** Horizontal utilization / threshold bar backed by `.uix-meter`. */
447
+ declare function Meter({ value, tone, className, ...props }: MeterProps): react.JSX.Element;
448
+
438
449
  interface StatTrend {
439
450
  direction: 'up' | 'down';
440
451
  label: ReactNode;
@@ -617,6 +628,37 @@ interface CommandItemProps extends HTMLAttributes<HTMLDivElement> {
617
628
  /** A single command row over `.uix-cmdk__item`. */
618
629
  declare function CommandItem({ icon, shortcut, active, children, className, ...props }: CommandItemProps): react.JSX.Element;
619
630
 
631
+ interface InboxProps extends HTMLAttributes<HTMLDivElement> {
632
+ children?: ReactNode;
633
+ }
634
+ /** Two-pane inbox master-detail container backed by `.uix-inbox`. Place `<InboxList>` and `<InboxDetail>` as children. */
635
+ declare function Inbox({ children, className, ...props }: InboxProps): react.JSX.Element;
636
+ interface InboxListProps extends HTMLAttributes<HTMLDivElement> {
637
+ children?: ReactNode;
638
+ }
639
+ /** Left-pane item list. Place `<InboxItem>` children here. */
640
+ declare function InboxList({ children, className, ...props }: InboxListProps): react.JSX.Element;
641
+ interface InboxItemProps extends HTMLAttributes<HTMLDivElement> {
642
+ /** Primary subject / title line. */
643
+ subject?: ReactNode;
644
+ /** Secondary preview excerpt (truncated). */
645
+ preview?: ReactNode;
646
+ /** Leading slot — avatar, icon, or priority indicator. */
647
+ leading?: ReactNode;
648
+ /** When true sets `data-unread` → bolds the subject line. */
649
+ unread?: boolean;
650
+ /** When true sets `aria-selected` → renders the accent left-border stripe. */
651
+ selected?: boolean;
652
+ children?: ReactNode;
653
+ }
654
+ /** A single inbox row with subject, preview excerpt, optional leading slot, and unread/selected states. */
655
+ declare function InboxItem({ subject, preview, leading, unread, selected, children, className, ...props }: InboxItemProps): react.JSX.Element;
656
+ interface InboxDetailProps extends HTMLAttributes<HTMLDivElement> {
657
+ children?: ReactNode;
658
+ }
659
+ /** Right-pane detail area — renders the full content of the selected item. */
660
+ declare function InboxDetail({ children, className, ...props }: InboxDetailProps): react.JSX.Element;
661
+
620
662
  interface KanbanProps extends HTMLAttributes<HTMLDivElement> {
621
663
  children?: ReactNode;
622
664
  }
@@ -658,4 +700,4 @@ interface TreeProps extends Omit<HTMLAttributes<HTMLUListElement>, 'onSelect' |
658
700
  }
659
701
  declare function Tree({ nodes, expanded: controlledExpanded, defaultExpanded, selected, onToggle, onSelect, className, ...props }: TreeProps): react.JSX.Element;
660
702
 
661
- export { Alert, type AlertProps, type AlertTone, AppShell, type AppShellProps, Avatar, AvatarGroup, type AvatarGroupProps, type AvatarProps, Button, ButtonGroup, type ButtonGroupProps, type ButtonProps, Card, type CardProps, Checkbox, type CheckboxProps, CommandGroup, type CommandGroupProps, CommandItem, type CommandItemProps, CommandPalette, type CommandPaletteProps, Comment, type CommentProps, Comments, type CommentsProps, DescriptionItem, type DescriptionItemProps, DescriptionList, type DescriptionListItem, type DescriptionListProps, DetailLayout, type DetailLayoutProps, Drawer, type DrawerProps, EmptyState, type EmptyStateProps, ErrorState, type ErrorStateProps, Field, type FieldProps, Input, InputGroup, type InputGroupProps, type InputProps, Kanban, KanbanCard, type KanbanCardProps, KanbanColumn, type KanbanColumnProps, type KanbanProps, Label, type LabelProps, List, ListItem, type ListItemProps, type ListProps, LoadingState, type LoadingStateProps, Modal, type ModalProps, type NavFavouriteItem, NavFavourites, type NavFavouritesLabels, type NavFavouritesProps, NavGroup, type NavGroupProps, NavItem, type NavItemProps, Note, type NoteProps, type NoteTone, PageHeader, type PageHeaderProps, Pagination, type PaginationProps, Peek, type PeekProps, type PillTone, type PillTreatment, Popover, type PopoverProps, Progress, type ProgressProps, Prose, type ProseProps, Radio, RadioGroup, type RadioGroupProps, type RadioProps, Select, type SelectProps, Sidebar, type SidebarProps, SidebarSection, type SidebarSectionProps, Skeleton, type SkeletonProps, type SortDirection, Spinner, type SpinnerProps, StarButton, type StarButtonProps, Stat, type StatProps, type StatTrend, StatusPill, type StatusPillProps, SubNavItem, type SubNavItemProps, Switch, type SwitchProps, Tab, type TabProps, Table, type TableDensity, type TableProps, TableWrap, type TableWrapProps, Tabs, type TabsProps, Td, type TdProps, Textarea, type TextareaProps, Th, type ThProps, Timeline, TimelineItem, type TimelineItemProps, type TimelineProps, Toast, type ToastProps, type ToastTone, Toaster, type ToasterProps, Tooltip, type TooltipProps, Tr, type TrProps, Tree, type TreeNodeData, type TreeNodeProps, type TreeProps, UserChip, type UserChipProps, cx, useDialog };
703
+ export { Alert, type AlertProps, type AlertTone, AppShell, type AppShellProps, Avatar, AvatarGroup, type AvatarGroupProps, type AvatarProps, Button, ButtonGroup, type ButtonGroupProps, type ButtonProps, Card, type CardProps, Checkbox, type CheckboxProps, CommandGroup, type CommandGroupProps, CommandItem, type CommandItemProps, CommandPalette, type CommandPaletteProps, Comment, type CommentProps, Comments, type CommentsProps, DescriptionItem, type DescriptionItemProps, DescriptionList, type DescriptionListItem, type DescriptionListProps, DetailLayout, type DetailLayoutProps, Drawer, type DrawerProps, EmptyState, type EmptyStateProps, ErrorState, type ErrorStateProps, Field, type FieldProps, Inbox, InboxDetail, type InboxDetailProps, InboxItem, type InboxItemProps, InboxList, type InboxListProps, type InboxProps, Input, InputGroup, type InputGroupProps, type InputProps, Kanban, KanbanCard, type KanbanCardProps, KanbanColumn, type KanbanColumnProps, type KanbanProps, Label, type LabelProps, List, ListItem, type ListItemProps, type ListProps, LoadingState, type LoadingStateProps, Meter, type MeterProps, type MeterTone, Modal, type ModalProps, type NavFavouriteItem, NavFavourites, type NavFavouritesLabels, type NavFavouritesProps, NavGroup, type NavGroupProps, NavItem, type NavItemProps, Note, type NoteProps, type NoteTone, PageHeader, type PageHeaderProps, Pagination, type PaginationProps, Peek, type PeekProps, type PillTone, type PillTreatment, Popover, type PopoverProps, Progress, type ProgressProps, Prose, type ProseProps, Radio, RadioGroup, type RadioGroupProps, type RadioProps, Select, type SelectProps, Sidebar, type SidebarProps, SidebarSection, type SidebarSectionProps, Skeleton, type SkeletonProps, type SortDirection, Spinner, type SpinnerProps, StarButton, type StarButtonProps, Stat, type StatProps, type StatTrend, StatusPill, type StatusPillProps, SubNavItem, type SubNavItemProps, Switch, type SwitchProps, Tab, type TabProps, Table, type TableDensity, type TableProps, TableWrap, type TableWrapProps, Tabs, type TabsProps, Td, type TdProps, Textarea, type TextareaProps, Th, type ThProps, Timeline, TimelineItem, type TimelineItemProps, type TimelineProps, Toast, type ToastProps, type ToastTone, Toaster, type ToasterProps, Tooltip, type TooltipProps, Tr, type TrProps, Tree, type TreeNodeData, type TreeNodeProps, type TreeProps, UserChip, type UserChipProps, cx, useDialog };
package/dist/index.d.ts CHANGED
@@ -28,6 +28,7 @@ export { SortDirection, Table, TableDensity, TableProps, TableWrap, TableWrapPro
28
28
  export { Pagination, PaginationProps } from './components/Pagination.js';
29
29
  export { PillTone, PillTreatment, StatusPill, StatusPillProps } from './components/StatusPill.js';
30
30
  export { Progress, ProgressProps } from './components/Progress.js';
31
+ export { Meter, MeterProps, MeterTone } from './components/Meter.js';
31
32
  export { Stat, StatProps, StatTrend } from './components/Stat.js';
32
33
  export { Tooltip, TooltipProps } from './components/Tooltip.js';
33
34
  export { EmptyState, EmptyStateProps, ErrorState, ErrorStateProps, LoadingState, LoadingStateProps, Skeleton, SkeletonProps } from './components/States.js';
@@ -38,6 +39,7 @@ export { Timeline, TimelineItem, TimelineItemProps, TimelineProps } from './comp
38
39
  export { Note, NoteProps, NoteTone, Prose, ProseProps } from './components/Prose.js';
39
40
  export { Popover, PopoverProps } from './components/Popover.js';
40
41
  export { CommandGroup, CommandGroupProps, CommandItem, CommandItemProps, CommandPalette, CommandPaletteProps } from './components/CommandPalette.js';
42
+ export { Inbox, InboxDetail, InboxDetailProps, InboxItem, InboxItemProps, InboxList, InboxListProps, InboxProps } from './components/Inbox.js';
41
43
  export { Kanban, KanbanCard, KanbanCardProps, KanbanColumn, KanbanColumnProps, KanbanProps } from './components/Kanban.js';
42
44
  export { Tree, TreeNodeData, TreeNodeProps, TreeProps } from './components/Tree.js';
43
45
  import 'react';
package/dist/index.js CHANGED
@@ -28,6 +28,7 @@ import { TableWrap, Table, Th, Td, Tr } from "./components/Table.js";
28
28
  import { Pagination } from "./components/Pagination.js";
29
29
  import { StatusPill } from "./components/StatusPill.js";
30
30
  import { Progress } from "./components/Progress.js";
31
+ import { Meter } from "./components/Meter.js";
31
32
  import { Stat } from "./components/Stat.js";
32
33
  import { Tooltip } from "./components/Tooltip.js";
33
34
  import { EmptyState, ErrorState, Skeleton, LoadingState } from "./components/States.js";
@@ -38,6 +39,7 @@ import { Timeline, TimelineItem } from "./components/Timeline.js";
38
39
  import { Prose, Note } from "./components/Prose.js";
39
40
  import { Popover } from "./components/Popover.js";
40
41
  import { CommandPalette, CommandGroup, CommandItem } from "./components/CommandPalette.js";
42
+ import { Inbox, InboxList, InboxItem, InboxDetail } from "./components/Inbox.js";
41
43
  import { Kanban, KanbanColumn, KanbanCard } from "./components/Kanban.js";
42
44
  import { Tree } from "./components/Tree.js";
43
45
  export {
@@ -61,6 +63,10 @@ export {
61
63
  EmptyState,
62
64
  ErrorState,
63
65
  Field,
66
+ Inbox,
67
+ InboxDetail,
68
+ InboxItem,
69
+ InboxList,
64
70
  Input,
65
71
  InputGroup,
66
72
  Kanban,
@@ -70,6 +76,7 @@ export {
70
76
  List,
71
77
  ListItem,
72
78
  LoadingState,
79
+ Meter,
73
80
  Modal,
74
81
  NavFavourites,
75
82
  NavGroup,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tensor_1/react",
3
- "version": "2.4.0",
3
+ "version": "2.5.0",
4
4
  "description": "Thin React wrappers over the UIx v2 CSS component library.",
5
5
  "license": "UNLICENSED",
6
6
  "type": "module",