@blakesteve/roster 5.6.0 → 5.8.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 (99) hide show
  1. package/README.md +190 -5
  2. package/dist/components/atoms/Avatar/Avatar.cjs +1 -1
  3. package/dist/components/atoms/Avatar/Avatar.d.ts +4 -0
  4. package/dist/components/atoms/Avatar/Avatar.js +1 -1
  5. package/dist/components/atoms/AvatarStrip/AvatarStrip.cjs +1 -1
  6. package/dist/components/atoms/AvatarStrip/AvatarStrip.d.ts +10 -1
  7. package/dist/components/atoms/AvatarStrip/AvatarStrip.js +34 -30
  8. package/dist/components/atoms/Button/button-variants.cjs +1 -1
  9. package/dist/components/atoms/Button/button-variants.js +5 -3
  10. package/dist/components/atoms/Eyebrow/eyebrow-variants.cjs +1 -1
  11. package/dist/components/atoms/Eyebrow/eyebrow-variants.js +8 -4
  12. package/dist/components/atoms/LoadingDots/LoadingDots.cjs +1 -0
  13. package/dist/components/atoms/LoadingDots/LoadingDots.d.ts +20 -0
  14. package/dist/components/atoms/LoadingDots/LoadingDots.js +43 -0
  15. package/dist/components/atoms/MultiSelect/MultiSelect.cjs +1 -1
  16. package/dist/components/atoms/MultiSelect/MultiSelect.d.ts +3 -1
  17. package/dist/components/atoms/MultiSelect/MultiSelect.js +87 -89
  18. package/dist/components/atoms/Progress/Progress.cjs +1 -0
  19. package/dist/components/atoms/Progress/Progress.d.ts +62 -0
  20. package/dist/components/atoms/Progress/Progress.js +107 -0
  21. package/dist/components/atoms/Progress/progress-values.cjs +1 -0
  22. package/dist/components/atoms/Progress/progress-values.d.ts +26 -0
  23. package/dist/components/atoms/Progress/progress-values.js +12 -0
  24. package/dist/components/atoms/Skeleton/Skeleton.cjs +1 -0
  25. package/dist/components/atoms/Skeleton/Skeleton.d.ts +79 -0
  26. package/dist/components/atoms/Skeleton/Skeleton.js +80 -0
  27. package/dist/components/atoms/Stat/Stat.cjs +1 -1
  28. package/dist/components/atoms/Stat/Stat.js +19 -19
  29. package/dist/components/atoms/Stat/stat-variants.cjs +1 -1
  30. package/dist/components/atoms/Stat/stat-variants.d.ts +1 -0
  31. package/dist/components/atoms/Stat/stat-variants.js +10 -7
  32. package/dist/components/molecules/Breadcrumbs/Breadcrumbs.cjs +1 -1
  33. package/dist/components/molecules/Breadcrumbs/Breadcrumbs.d.ts +10 -1
  34. package/dist/components/molecules/Breadcrumbs/Breadcrumbs.js +31 -29
  35. package/dist/components/molecules/CallToAction/CallToAction.cjs +1 -1
  36. package/dist/components/molecules/CallToAction/CallToAction.d.ts +8 -1
  37. package/dist/components/molecules/CallToAction/CallToAction.js +34 -29
  38. package/dist/components/molecules/Carousel/Carousel.cjs +1 -1
  39. package/dist/components/molecules/Carousel/Carousel.d.ts +7 -0
  40. package/dist/components/molecules/Carousel/Carousel.js +155 -155
  41. package/dist/components/molecules/ErrorState/ErrorState.cjs +1 -1
  42. package/dist/components/molecules/ErrorState/ErrorState.d.ts +8 -1
  43. package/dist/components/molecules/ErrorState/ErrorState.js +44 -39
  44. package/dist/components/molecules/FileUpload/FileUpload.cjs +1 -1
  45. package/dist/components/molecules/FileUpload/FileUpload.js +122 -142
  46. package/dist/components/molecules/MediaPreview/MediaPreview.cjs +1 -1
  47. package/dist/components/molecules/MediaPreview/MediaPreview.d.ts +3 -1
  48. package/dist/components/molecules/MediaPreview/MediaPreview.js +13 -12
  49. package/dist/components/molecules/Pagination/Pagination.cjs +1 -1
  50. package/dist/components/molecules/Pagination/Pagination.d.ts +1 -0
  51. package/dist/components/molecules/Pagination/Pagination.js +47 -46
  52. package/dist/components/molecules/ProgressField/ProgressField.cjs +1 -0
  53. package/dist/components/molecules/ProgressField/ProgressField.d.ts +24 -0
  54. package/dist/components/molecules/ProgressField/ProgressField.js +32 -0
  55. package/dist/components/molecules/SkeletonPresets/SkeletonPresets.cjs +1 -0
  56. package/dist/components/molecules/SkeletonPresets/SkeletonPresets.d.ts +55 -0
  57. package/dist/components/molecules/SkeletonPresets/SkeletonPresets.js +45 -0
  58. package/dist/components/molecules/StepProgress/StepProgress.cjs +1 -0
  59. package/dist/components/molecules/StepProgress/StepProgress.d.ts +37 -0
  60. package/dist/components/molecules/StepProgress/StepProgress.js +90 -0
  61. package/dist/components/organisms/Countdown/Countdown.cjs +1 -1
  62. package/dist/components/organisms/Countdown/Countdown.d.ts +13 -0
  63. package/dist/components/organisms/Countdown/Countdown.js +54 -47
  64. package/dist/components/organisms/DataTable/DataTable.cjs +1 -1
  65. package/dist/components/organisms/DataTable/DataTable.d.ts +5 -3
  66. package/dist/components/organisms/DataTable/DataTable.js +27 -26
  67. package/dist/components/organisms/Dialog/Dialog.cjs +1 -1
  68. package/dist/components/organisms/Dialog/Dialog.d.ts +9 -2
  69. package/dist/components/organisms/Dialog/Dialog.js +25 -23
  70. package/dist/components/organisms/Footer/Footer.cjs +1 -1
  71. package/dist/components/organisms/Footer/Footer.d.ts +9 -0
  72. package/dist/components/organisms/Footer/Footer.js +21 -23
  73. package/dist/components/organisms/ModerationQueue/ModerationQueue.cjs +1 -1
  74. package/dist/components/organisms/ModerationQueue/ModerationQueue.d.ts +40 -1
  75. package/dist/components/organisms/ModerationQueue/ModerationQueue.js +262 -237
  76. package/dist/components/organisms/ModerationQueue/QueueEditDialog.cjs +1 -1
  77. package/dist/components/organisms/ModerationQueue/QueueEditDialog.d.ts +1 -1
  78. package/dist/components/organisms/ModerationQueue/QueueEditDialog.js +23 -21
  79. package/dist/components/organisms/ModerationQueue/QueueEditSheet.cjs +1 -1
  80. package/dist/components/organisms/ModerationQueue/QueueEditSheet.d.ts +1 -1
  81. package/dist/components/organisms/ModerationQueue/QueueEditSheet.js +22 -20
  82. package/dist/components/organisms/ModerationQueue/queue-actions.d.ts +29 -10
  83. package/dist/components/organisms/Navbar/Navbar.cjs +1 -1
  84. package/dist/components/organisms/Navbar/Navbar.d.ts +38 -3
  85. package/dist/components/organisms/Navbar/Navbar.js +210 -187
  86. package/dist/components/organisms/Navbar/navbar-variants.cjs +1 -1
  87. package/dist/components/organisms/Navbar/navbar-variants.js +4 -2
  88. package/dist/components/organisms/Sheet/Sheet.cjs +1 -1
  89. package/dist/components/organisms/Sheet/Sheet.d.ts +8 -1
  90. package/dist/components/organisms/Sheet/Sheet.js +65 -63
  91. package/dist/index.d.ts +6 -0
  92. package/dist/lib/labels.cjs +1 -0
  93. package/dist/lib/labels.d.ts +7 -0
  94. package/dist/lib/labels.js +12 -0
  95. package/dist/meta.json +3 -3
  96. package/dist/roster.cjs +1 -1
  97. package/dist/roster.css +1 -1
  98. package/dist/roster.js +174 -157
  99. package/package.json +1 -1
@@ -1,12 +1,13 @@
1
1
  "use client";
2
- import { jsxs as u, Fragment as I, jsx as e } from "react/jsx-runtime";
3
- import { useId as et, useState as X, useRef as rt, useMemo as st } from "react";
2
+ import { jsxs as u, Fragment as I, jsx as r } from "react/jsx-runtime";
3
+ import { useId as rt, useState as X, useRef as et, useMemo as st } from "react";
4
4
  import { cn as x } from "../../../lib/utils.js";
5
- import { Button as at } from "../../atoms/Button/Button.js";
6
- import { buttonVariants as nt } from "../../atoms/Button/button-variants.js";
7
- import { selectTriggerVariants as it } from "../../atoms/Select/select-variants.js";
8
- import { clampPage as lt, pageItems as ot } from "./page-items.js";
9
- const ct = {
5
+ import { withLabels as at } from "../../../lib/labels.js";
6
+ import { Button as nt } from "../../atoms/Button/Button.js";
7
+ import { buttonVariants as it } from "../../atoms/Button/button-variants.js";
8
+ import { selectTriggerVariants as lt } from "../../atoms/Select/select-variants.js";
9
+ import { clampPage as ot, pageItems as ct } from "./page-items.js";
10
+ const dt = {
10
11
  nav: "Pagination",
11
12
  page: (t) => `Page ${t}`,
12
13
  number: (t) => String(t),
@@ -21,8 +22,8 @@ const ct = {
21
22
  of: (t) => `of ${t}`,
22
23
  status: (t, i) => `Page ${t} of ${i}`
23
24
  };
24
- function dt({ href: t, className: i, children: c, onClick: o, ...p }) {
25
- return /* @__PURE__ */ e(
25
+ function ut({ href: t, className: i, children: c, onClick: o, ...p }) {
26
+ return /* @__PURE__ */ r(
26
27
  "a",
27
28
  {
28
29
  href: t,
@@ -35,8 +36,8 @@ function dt({ href: t, className: i, children: c, onClick: o, ...p }) {
35
36
  }
36
37
  );
37
38
  }
38
- const ut = "rst:h-11 rst:min-w-11 rst:px-2", pt = "rst:cursor-not-allowed rst:opacity-50", ft = "rst:forced-colors:border-2 rst:forced-colors:underline rst:forced-colors:decoration-2 rst:forced-colors:underline-offset-4", Y = { width: 18, height: 18, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": !0 }, j = ({ dir: t, double: i = !1 }) => /* @__PURE__ */ e("svg", { ...Y, className: "rst:shrink-0", children: t === "left" ? i ? /* @__PURE__ */ e("path", { d: "m11 17-5-5 5-5M18 17l-5-5 5-5" }) : /* @__PURE__ */ e("path", { d: "m15 18-6-6 6-6" }) : i ? /* @__PURE__ */ e("path", { d: "m13 17 5-5-5-5M6 17l5-5-5-5" }) : /* @__PURE__ */ e("path", { d: "m9 18 6-6-6-6" }) });
39
- function mt({
39
+ const pt = "rst:h-11 rst:min-w-11 rst:px-2", ft = "rst:cursor-not-allowed rst:opacity-50", mt = "rst:forced-colors:border-2 rst:forced-colors:underline rst:forced-colors:decoration-2 rst:forced-colors:underline-offset-4", Y = { width: 18, height: 18, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": !0 }, j = ({ dir: t, double: i = !1 }) => /* @__PURE__ */ r("svg", { ...Y, className: "rst:shrink-0", children: t === "left" ? i ? /* @__PURE__ */ r("path", { d: "m11 17-5-5 5-5M18 17l-5-5 5-5" }) : /* @__PURE__ */ r("path", { d: "m15 18-6-6 6-6" }) : i ? /* @__PURE__ */ r("path", { d: "m13 17 5-5-5-5M6 17l5-5-5-5" }) : /* @__PURE__ */ r("path", { d: "m9 18 6-6-6-6" }) });
40
+ function ht({
40
41
  id: t,
41
42
  describedBy: i,
42
43
  page: c,
@@ -44,13 +45,13 @@ function mt({
44
45
  number: p,
45
46
  onCommit: P
46
47
  }) {
47
- const [d, N] = X(null), f = rt(!1), v = d && d.page === c ? d.value : null, y = (l) => {
48
+ const [d, N] = X(null), f = et(!1), v = d && d.page === c ? d.value : null, y = (l) => {
48
49
  N(null), l !== c && P(l);
49
50
  }, $ = st(
50
- () => Array.from({ length: o }, (l, m) => /* @__PURE__ */ e("option", { value: m + 1, children: p(m + 1) }, m + 1)),
51
+ () => Array.from({ length: o }, (l, m) => /* @__PURE__ */ r("option", { value: m + 1, children: p(m + 1) }, m + 1)),
51
52
  [o, p]
52
53
  );
53
- return /* @__PURE__ */ e(
54
+ return /* @__PURE__ */ r(
54
55
  "select",
55
56
  {
56
57
  id: t,
@@ -78,7 +79,7 @@ function mt({
78
79
  v !== null && y(v);
79
80
  },
80
81
  className: x(
81
- it({ variant: "outline" }),
82
+ lt({ variant: "outline" }),
82
83
  /* 16px: iOS zooms the page into a select whose text is smaller. */
83
84
  "rst:h-11 rst:w-auto rst:min-w-16 rst:appearance-none rst:pl-3 rst:pr-8 rst:text-base rst:tabular-nums"
84
85
  ),
@@ -87,7 +88,7 @@ function mt({
87
88
  }
88
89
  );
89
90
  }
90
- function kt({
91
+ function $t({
91
92
  page: t,
92
93
  pageCount: i,
93
94
  onPageChange: c,
@@ -103,20 +104,20 @@ function kt({
103
104
  labels: l,
104
105
  className: m
105
106
  }) {
106
- const a = { ...ct, ...l }, h = Number.isFinite(i) ? Math.max(0, Math.floor(i)) : 0, n = lt(t, h), S = et(), Z = p ?? dt, [T, H] = X({ page: n, text: "" });
107
+ const a = at(dt, l), h = Number.isFinite(i) ? Math.max(0, Math.floor(i)) : 0, n = ot(t, h), S = rt(), Z = p ?? ut, [T, H] = X({ page: n, text: "" });
107
108
  T.page !== n && H({ page: n, text: $ ? a.status(n, h) : "" });
108
- const D = (r) => {
109
- r !== Math.floor(t) && c?.(r);
110
- }, w = (r, s, k, F) => {
111
- const g = r === "page" && s === n, L = s === null, q = x(ut, L && pt, g && ft, F.className), J = r === "page" ? `page-${s}` : r;
109
+ const D = (e) => {
110
+ e !== Math.floor(t) && c?.(e);
111
+ }, w = (e, s, k, F) => {
112
+ const g = e === "page" && s === n, L = s === null, q = x(pt, L && ft, g && mt, F.className), J = e === "page" ? `page-${s}` : e;
112
113
  if (o) {
113
114
  const Q = o(s ?? n);
114
- return /* @__PURE__ */ e(
115
+ return /* @__PURE__ */ r(
115
116
  Z,
116
117
  {
117
118
  href: Q,
118
119
  to: Q,
119
- className: x(nt({ variant: g ? "solid" : y, colorScheme: g ? "primary" : "neutral" }), q),
120
+ className: x(it({ variant: g ? "solid" : y, colorScheme: g ? "primary" : "neutral" }), q),
120
121
  "aria-label": F.label,
121
122
  "aria-current": g ? "page" : void 0,
122
123
  "aria-disabled": L ? !0 : void 0,
@@ -132,8 +133,8 @@ function kt({
132
133
  J
133
134
  );
134
135
  }
135
- return /* @__PURE__ */ e(
136
- at,
136
+ return /* @__PURE__ */ r(
137
+ nt,
137
138
  {
138
139
  type: "button",
139
140
  variant: g ? "solid" : y,
@@ -149,42 +150,42 @@ function kt({
149
150
  },
150
151
  J
151
152
  );
152
- }, B = n > 1 ? n - 1 : null, K = n < h ? n + 1 : null, R = n > 1 ? 1 : null, O = n < h ? h : null, M = (r) => w(
153
+ }, B = n > 1 ? n - 1 : null, K = n < h ? n + 1 : null, R = n > 1 ? 1 : null, O = n < h ? h : null, M = (e) => w(
153
154
  "previous",
154
155
  B,
155
156
  /* @__PURE__ */ u(I, { children: [
156
- /* @__PURE__ */ e(j, { dir: "left" }),
157
- r && /* @__PURE__ */ e("span", { className: "rst:hidden rst:pr-1 rst:@[36rem]:inline", children: a.previous })
157
+ /* @__PURE__ */ r(j, { dir: "left" }),
158
+ e && /* @__PURE__ */ r("span", { className: "rst:hidden rst:pr-1 rst:@[36rem]:inline", children: a.previous })
158
159
  ] }),
159
160
  { label: a.previousPage(B) }
160
- ), A = (r) => w(
161
+ ), A = (e) => w(
161
162
  "next",
162
163
  K,
163
164
  /* @__PURE__ */ u(I, { children: [
164
- r && /* @__PURE__ */ e("span", { className: "rst:hidden rst:pl-1 rst:@[36rem]:inline", children: a.next }),
165
- /* @__PURE__ */ e(j, { dir: "right" })
165
+ e && /* @__PURE__ */ r("span", { className: "rst:hidden rst:pl-1 rst:@[36rem]:inline", children: a.next }),
166
+ /* @__PURE__ */ r(j, { dir: "right" })
166
167
  ] }),
167
168
  { label: a.nextPage(K) }
168
- ), V = (r) => w("first", R, /* @__PURE__ */ e(j, { dir: "left", double: !0 }), {
169
+ ), V = (e) => w("first", R, /* @__PURE__ */ r(j, { dir: "left", double: !0 }), {
169
170
  label: a.firstPage(R),
170
- className: r ? "rst:hidden rst:@[24rem]:inline-flex" : void 0
171
- }), _ = (r) => w("last", O, /* @__PURE__ */ e(j, { dir: "right", double: !0 }), {
171
+ className: e ? "rst:hidden rst:@[24rem]:inline-flex" : void 0
172
+ }), _ = (e) => w("last", O, /* @__PURE__ */ r(j, { dir: "right", double: !0 }), {
172
173
  label: a.lastPage(O),
173
- className: r ? "rst:hidden rst:@[24rem]:inline-flex" : void 0
174
- }), C = "rst:flex rst:flex-wrap rst:items-center rst:gap-1", E = { start: "rst:justify-start", center: "rst:justify-center", end: "rst:justify-end" }[v], z = (r) => /* @__PURE__ */ u("div", { className: x(C, E, r), "data-pagination-layout": "pages", children: [
174
+ className: e ? "rst:hidden rst:@[24rem]:inline-flex" : void 0
175
+ }), C = "rst:flex rst:flex-wrap rst:items-center rst:gap-1", E = { start: "rst:justify-start", center: "rst:justify-center", end: "rst:justify-end" }[v], z = (e) => /* @__PURE__ */ u("div", { className: x(C, E, e), "data-pagination-layout": "pages", children: [
175
176
  M(!0),
176
- ot(n, h, N).map(
177
- (s) => typeof s == "number" ? w("page", s, a.number(s), { label: a.page(s) }) : /* @__PURE__ */ e("span", { "aria-hidden": "true", className: "rst:inline-flex rst:h-11 rst:w-11 rst:items-center rst:justify-center rst:text-sm rst:text-gray-500 rst:dark:text-gray-400", children: a.gap }, s)
177
+ ct(n, h, N).map(
178
+ (s) => typeof s == "number" ? w("page", s, a.number(s), { label: a.page(s) }) : /* @__PURE__ */ r("span", { "aria-hidden": "true", className: "rst:inline-flex rst:h-11 rst:w-11 rst:items-center rst:justify-center rst:text-sm rst:text-gray-500 rst:dark:text-gray-400", children: a.gap }, s)
178
179
  ),
179
180
  A(!0)
180
- ] }), G = `${S}-picker`, U = `${S}-of`, W = (r) => /* @__PURE__ */ u("div", { className: x(C, E, r), "data-pagination-layout": "compact", children: [
181
+ ] }), G = `${S}-picker`, U = `${S}-of`, W = (e) => /* @__PURE__ */ u("div", { className: x(C, E, e), "data-pagination-layout": "compact", children: [
181
182
  f && V(!0),
182
183
  M(!1),
183
184
  /* @__PURE__ */ u("div", { className: "rst:flex rst:items-center rst:gap-2 rst:px-1 rst:text-sm rst:font-medium rst:text-[var(--roster-control-text)]", children: [
184
- /* @__PURE__ */ e("label", { htmlFor: G, children: a.picker }),
185
+ /* @__PURE__ */ r("label", { htmlFor: G, children: a.picker }),
185
186
  /* @__PURE__ */ u("span", { className: "rst:relative rst:inline-flex", children: [
186
- /* @__PURE__ */ e(
187
- mt,
187
+ /* @__PURE__ */ r(
188
+ ht,
188
189
  {
189
190
  id: G,
190
191
  describedBy: U,
@@ -200,9 +201,9 @@ function kt({
200
201
  }
201
202
  }
202
203
  ),
203
- /* @__PURE__ */ e("svg", { ...Y, width: 16, height: 16, className: "rst:pointer-events-none rst:absolute rst:right-2.5 rst:top-1/2 rst:-translate-y-1/2 rst:text-gray-500 rst:dark:text-gray-400", children: /* @__PURE__ */ e("path", { d: "m6 9 6 6 6-6" }) })
204
+ /* @__PURE__ */ r("svg", { ...Y, width: 16, height: 16, className: "rst:pointer-events-none rst:absolute rst:right-2.5 rst:top-1/2 rst:-translate-y-1/2 rst:text-gray-500 rst:dark:text-gray-400", children: /* @__PURE__ */ r("path", { d: "m6 9 6 6 6-6" }) })
204
205
  ] }),
205
- /* @__PURE__ */ e("span", { id: U, className: "rst:tabular-nums", children: a.of(h) })
206
+ /* @__PURE__ */ r("span", { id: U, className: "rst:tabular-nums", children: a.of(h) })
206
207
  ] }),
207
208
  A(!1),
208
209
  f && _(!0)
@@ -236,12 +237,12 @@ function kt({
236
237
  z("rst:hidden rst:@[28rem]:flex"),
237
238
  W("rst:@[28rem]:hidden")
238
239
  ] }),
239
- $ && /* @__PURE__ */ e("div", { role: "status", "aria-live": "polite", "aria-atomic": "true", className: "rst:sr-only", "data-pagination-live": "", children: T.text })
240
+ $ && /* @__PURE__ */ r("div", { role: "status", "aria-live": "polite", "aria-atomic": "true", className: "rst:sr-only", "data-pagination-live": "", children: T.text })
240
241
  ]
241
242
  }
242
243
  )
243
244
  );
244
245
  }
245
246
  export {
246
- kt as Pagination
247
+ $t as Pagination
247
248
  };
@@ -0,0 +1 @@
1
+ "use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),f=require("../../../lib/utils.cjs"),j=require("../../atoms/Progress/Progress.cjs"),h=require("../../atoms/Progress/progress-values.cjs"),y=s=>`${s}%`,N=(s,r)=>`${s} of ${r}`;function w({label:s,valueText:r,detail:n,labels:e,className:c,...a}){const{value:u,max:d,variant:o="continuous",segments:l,announce:m=!0}=a,{known:g,percent:x,done:p,applicable:v}=h.progressValues({value:u,max:d,variant:o,segments:l}),i=r??(o==="segmented"?(e?.count??N)(p,v):g?(e?.percent??y)(x):void 0);return t.jsxs("div",{className:f.cn("rst:font-ui rst:w-full rst:min-w-0",c),"data-progress-field":"",children:[t.jsxs("div",{"aria-hidden":m?!0:void 0,className:"rst:mb-1.5 rst:flex rst:items-baseline rst:justify-between rst:gap-3 rst:text-sm",children:[t.jsx("span",{className:"rst:min-w-0 rst:truncate rst:font-medium rst:text-[var(--roster-control-text)]","data-progress-label":"",children:s}),i!==void 0&&t.jsx("span",{className:"rst:shrink-0 rst:tabular-nums rst:text-gray-600 rst:dark:text-gray-400","data-progress-value":"",children:i})]}),t.jsx(j.Progress,{...a,label:s,valueText:r,labels:e}),n!==void 0&&t.jsx("p",{className:"rst:mt-1.5 rst:text-xs rst:text-gray-600 rst:dark:text-gray-400","data-progress-detail":"",children:n})]})}exports.ProgressField=w;
@@ -0,0 +1,24 @@
1
+ import { ReactNode } from 'react';
2
+ import { ProgressLabels, ProgressProps } from '../../atoms/Progress/Progress';
3
+ export interface ProgressFieldProps extends Pick<ProgressProps, "value" | "max" | "variant" | "segments" | "status" | "size" | "rounded" | "busy" | "announce" | "announceEvery"> {
4
+ /** What's progressing: "Uploading photos". Shown, and said with the value. */
5
+ label: string;
6
+ /** The value as shown and said, in place of the percent or the count: "3 of 8 files". */
7
+ valueText?: string;
8
+ /** A line under the bar: bytes, a step counter, a time left. */
9
+ detail?: ReactNode;
10
+ /** The component's own words, replaced; any left out stay English. */
11
+ labels?: Partial<ProgressLabels>;
12
+ className?: string;
13
+ }
14
+ /**
15
+ * A progress bar with its label and value above it and an optional detail
16
+ * line below: the form to reach for when showing progress. Label left and
17
+ * value right, on one baseline, so a column of them lines up down a page.
18
+ *
19
+ * A screen reader hears the label and value together, politely, as they
20
+ * change (no more than once every 1.5 seconds); the visible pair is hidden
21
+ * from it so it isn't read twice.
22
+ */
23
+ declare function ProgressField({ label, valueText, detail, labels, className, ...progress }: ProgressFieldProps): import("react/jsx-runtime").JSX.Element;
24
+ export { ProgressField };
@@ -0,0 +1,32 @@
1
+ "use client";
2
+ import { jsxs as c, jsx as s } from "react/jsx-runtime";
3
+ import { cn as h } from "../../../lib/utils.js";
4
+ import { Progress as N } from "../../atoms/Progress/Progress.js";
5
+ import { progressValues as w } from "../../atoms/Progress/progress-values.js";
6
+ const y = (t) => `${t}%`, k = (t, r) => `${t} of ${r}`;
7
+ function C({
8
+ label: t,
9
+ valueText: r,
10
+ detail: n,
11
+ labels: e,
12
+ className: m,
13
+ ...a
14
+ }) {
15
+ const { value: d, max: l, variant: o = "continuous", segments: u, announce: p = !0 } = a, { known: g, percent: x, done: f, applicable: v } = w({ value: d, max: l, variant: o, segments: u }), i = r ?? (o === "segmented" ? (e?.count ?? k)(f, v) : g ? (e?.percent ?? y)(x) : void 0);
16
+ return (
17
+ /* min-w-0: in a grid or flex column, a field otherwise refuses to be
18
+ narrower than its label on one line, and a long label pushes it out of
19
+ the column instead of truncating. */
20
+ /* @__PURE__ */ c("div", { className: h("rst:font-ui rst:w-full rst:min-w-0", m), "data-progress-field": "", children: [
21
+ /* @__PURE__ */ c("div", { "aria-hidden": p ? !0 : void 0, className: "rst:mb-1.5 rst:flex rst:items-baseline rst:justify-between rst:gap-3 rst:text-sm", children: [
22
+ /* @__PURE__ */ s("span", { className: "rst:min-w-0 rst:truncate rst:font-medium rst:text-[var(--roster-control-text)]", "data-progress-label": "", children: t }),
23
+ i !== void 0 && /* @__PURE__ */ s("span", { className: "rst:shrink-0 rst:tabular-nums rst:text-gray-600 rst:dark:text-gray-400", "data-progress-value": "", children: i })
24
+ ] }),
25
+ /* @__PURE__ */ s(N, { ...a, label: t, valueText: r, labels: e }),
26
+ n !== void 0 && /* @__PURE__ */ s("p", { className: "rst:mt-1.5 rst:text-xs rst:text-gray-600 rst:dark:text-gray-400", "data-progress-detail": "", children: n })
27
+ ] })
28
+ );
29
+ }
30
+ export {
31
+ C as ProgressField
32
+ };
@@ -0,0 +1 @@
1
+ "use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),l=require("../../../lib/utils.cjs"),x=require("../../atoms/Card/Card.cjs"),m=require("../../atoms/Eyebrow/Eyebrow.cjs"),c=require("../../atoms/Stat/stat-variants.cjs"),h=require("../../organisms/Table/Table.cjs"),t=require("../../atoms/Skeleton/Skeleton.cjs");function j({media:r,lines:a=3,variant:s,padding:i,className:n}){return e.jsxs(x.Card,{variant:s,padding:i,className:n,"aria-hidden":"true","data-skeleton":"card",children:[r!==void 0&&e.jsx(t.Skeleton,{shape:"block",height:r,className:"rst:mb-4"}),e.jsx(t.Skeleton,{size:"lg",width:"45%"}),a>0&&e.jsx(t.Skeleton,{size:"md",lines:a,className:"rst:mt-2"})]})}function S({columns:r,className:a}){const s=["70%","50%","60%","40%"];return e.jsx(h.TableRow,{"aria-hidden":"true",className:a,"data-skeleton":"table-row",children:Array.from({length:Math.max(1,r)},(i,n)=>e.jsx(h.TableCell,{children:e.jsx(t.Skeleton,{size:"inherit",width:s[n%s.length]})},n))})}function k({size:r="md",withName:a=!1,className:s}){return a?e.jsxs("span",{"aria-hidden":"true",className:l.cn("rst:flex rst:items-center rst:gap-3",s),"data-skeleton":"avatar",children:[e.jsx(t.Skeleton,{shape:"circle",size:r}),e.jsx(t.Skeleton,{size:"md",width:"8rem"})]}):e.jsx(t.Skeleton,{shape:"circle",size:r,className:s})}function w({size:r="md",semantics:a="definition",source:s=!1,className:i}){const n=c.statValueVariants({size:r,colorScheme:"neutral"}),o=e.jsx(t.Skeleton,{size:"inherit",width:"2.5em"}),d=e.jsx(m.Eyebrow,{size:"xs",children:e.jsx(t.Skeleton,{size:"inherit",width:"9em"})}),u=e.jsx("span",{className:c.statSourceClass,children:e.jsx(t.Skeleton,{size:"inherit",width:"12em"})});return a==="standalone"?e.jsxs("span",{"aria-hidden":"true",className:l.cn("rst:flex rst:flex-col rst:gap-[3px]",i),"data-skeleton":"stat",children:[e.jsx("span",{className:n,children:o}),d,s&&u]}):e.jsxs("div",{"aria-hidden":"true",className:l.cn("rst:grid rst:content-start rst:gap-[3px]",i),"data-skeleton":"stat",children:[e.jsx("dt",{className:"rst:relative rst:col-start-1 rst:row-start-2 rst:flex",children:d}),s?e.jsxs("dd",{className:l.cn("rst:m-0",n,"rst:col-start-1 rst:row-span-3 rst:row-start-1 rst:grid rst:grid-rows-subgrid"),children:[e.jsx("span",{className:"rst:row-start-1",children:o}),e.jsx("span",{className:l.cn(c.statSourceClass,"rst:row-start-3"),children:e.jsx(t.Skeleton,{size:"inherit",width:"12em"})})]}):e.jsx("dd",{className:l.cn("rst:m-0 rst:col-start-1 rst:row-start-1",n),children:o})]})}exports.SkeletonAvatar=k;exports.SkeletonCard=j;exports.SkeletonStat=w;exports.SkeletonTableRow=S;
@@ -0,0 +1,55 @@
1
+ import { CSSProperties } from 'react';
2
+ import { CardProps } from '../../atoms/Card/Card';
3
+ export interface SkeletonCardProps extends Pick<CardProps, "variant" | "padding"> {
4
+ /** A media block above the text, at this height (an image, a chart). */
5
+ media?: CSSProperties["height"];
6
+ /** Body lines under the title. */
7
+ lines?: number;
8
+ className?: string;
9
+ }
10
+ /**
11
+ * A Card loading. Stands in for a Card holding an optional media block (with
12
+ * 16px below it), a `text-base` title, and `text-sm` body lines 8px under it.
13
+ */
14
+ declare function SkeletonCard({ media, lines, variant, padding, className }: SkeletonCardProps): import("react/jsx-runtime").JSX.Element;
15
+ export interface SkeletonTableRowProps {
16
+ /** How many cells. */
17
+ columns: number;
18
+ className?: string;
19
+ }
20
+ /**
21
+ * A table row loading, inside Roster's Table: its own cells, at the table's
22
+ * size, each holding one line in the cell's text size. Stands in for a row of
23
+ * one-line cells.
24
+ */
25
+ declare function SkeletonTableRow({ columns, className }: SkeletonTableRowProps): import("react/jsx-runtime").JSX.Element;
26
+ export interface SkeletonAvatarProps {
27
+ /** Avatar's sizes. */
28
+ size?: "xs" | "sm" | "md" | "lg" | "xl";
29
+ /** A name line beside it, in `text-sm`. */
30
+ withName?: boolean;
31
+ className?: string;
32
+ }
33
+ /** An Avatar loading, and optionally the name beside it. */
34
+ declare function SkeletonAvatar({ size, withName, className }: SkeletonAvatarProps): import("react/jsx-runtime").JSX.Element;
35
+ export interface SkeletonStatProps {
36
+ /** Stat's sizes. */
37
+ size?: "sm" | "md" | "lg";
38
+ /**
39
+ * Stat's two markups, mirrored. `definition` (Stat's default) is a `dt` and
40
+ * `dd` pair for a `<dl>`: put this preset in the same `<dl>`. `standalone`
41
+ * is spans.
42
+ */
43
+ semantics?: "definition" | "standalone";
44
+ /** A source line under the figure, as a Stat with `source` has. */
45
+ source?: boolean;
46
+ className?: string;
47
+ }
48
+ /**
49
+ * A Stat loading. Stat's own markup in each of its forms, with lines in place
50
+ * of its words, so the figure that arrives is the height of what held it:
51
+ * the label is the real Eyebrow, a flex item where Stat's is, so it makes the
52
+ * same line.
53
+ */
54
+ declare function SkeletonStat({ size, semantics, source, className }: SkeletonStatProps): import("react/jsx-runtime").JSX.Element;
55
+ export { SkeletonCard, SkeletonTableRow, SkeletonAvatar, SkeletonStat };
@@ -0,0 +1,45 @@
1
+ "use client";
2
+ import { jsx as t, jsxs as o } from "react/jsx-runtime";
3
+ import { cn as n } from "../../../lib/utils.js";
4
+ import { Card as p } from "../../atoms/Card/Card.js";
5
+ import { Eyebrow as u } from "../../atoms/Eyebrow/Eyebrow.js";
6
+ import { statValueVariants as f, statSourceClass as h } from "../../atoms/Stat/stat-variants.js";
7
+ import { TableRow as w, TableCell as g } from "../../organisms/Table/Table.js";
8
+ import { Skeleton as r } from "../../atoms/Skeleton/Skeleton.js";
9
+ function C({ media: s, lines: a = 3, variant: e, padding: l, className: i }) {
10
+ return /* @__PURE__ */ o(p, { variant: e, padding: l, className: i, "aria-hidden": "true", "data-skeleton": "card", children: [
11
+ s !== void 0 && /* @__PURE__ */ t(r, { shape: "block", height: s, className: "rst:mb-4" }),
12
+ /* @__PURE__ */ t(r, { size: "lg", width: "45%" }),
13
+ a > 0 && /* @__PURE__ */ t(r, { size: "md", lines: a, className: "rst:mt-2" })
14
+ ] });
15
+ }
16
+ function T({ columns: s, className: a }) {
17
+ const e = ["70%", "50%", "60%", "40%"];
18
+ return /* @__PURE__ */ t(w, { "aria-hidden": "true", className: a, "data-skeleton": "table-row", children: Array.from({ length: Math.max(1, s) }, (l, i) => /* @__PURE__ */ t(g, { children: /* @__PURE__ */ t(r, { size: "inherit", width: e[i % e.length] }) }, i)) });
19
+ }
20
+ function j({ size: s = "md", withName: a = !1, className: e }) {
21
+ return a ? /* @__PURE__ */ o("span", { "aria-hidden": "true", className: n("rst:flex rst:items-center rst:gap-3", e), "data-skeleton": "avatar", children: [
22
+ /* @__PURE__ */ t(r, { shape: "circle", size: s }),
23
+ /* @__PURE__ */ t(r, { size: "md", width: "8rem" })
24
+ ] }) : /* @__PURE__ */ t(r, { shape: "circle", size: s, className: e });
25
+ }
26
+ function y({ size: s = "md", semantics: a = "definition", source: e = !1, className: l }) {
27
+ const i = f({ size: s, colorScheme: "neutral" }), d = /* @__PURE__ */ t(r, { size: "inherit", width: "2.5em" }), c = /* @__PURE__ */ t(u, { size: "xs", children: /* @__PURE__ */ t(r, { size: "inherit", width: "9em" }) }), m = /* @__PURE__ */ t("span", { className: h, children: /* @__PURE__ */ t(r, { size: "inherit", width: "12em" }) });
28
+ return a === "standalone" ? /* @__PURE__ */ o("span", { "aria-hidden": "true", className: n("rst:flex rst:flex-col rst:gap-[3px]", l), "data-skeleton": "stat", children: [
29
+ /* @__PURE__ */ t("span", { className: i, children: d }),
30
+ c,
31
+ e && m
32
+ ] }) : /* @__PURE__ */ o("div", { "aria-hidden": "true", className: n("rst:grid rst:content-start rst:gap-[3px]", l), "data-skeleton": "stat", children: [
33
+ /* @__PURE__ */ t("dt", { className: "rst:relative rst:col-start-1 rst:row-start-2 rst:flex", children: c }),
34
+ e ? /* @__PURE__ */ o("dd", { className: n("rst:m-0", i, "rst:col-start-1 rst:row-span-3 rst:row-start-1 rst:grid rst:grid-rows-subgrid"), children: [
35
+ /* @__PURE__ */ t("span", { className: "rst:row-start-1", children: d }),
36
+ /* @__PURE__ */ t("span", { className: n(h, "rst:row-start-3"), children: /* @__PURE__ */ t(r, { size: "inherit", width: "12em" }) })
37
+ ] }) : /* @__PURE__ */ t("dd", { className: n("rst:m-0 rst:col-start-1 rst:row-start-1", i), children: d })
38
+ ] });
39
+ }
40
+ export {
41
+ j as SkeletonAvatar,
42
+ C as SkeletonCard,
43
+ y as SkeletonStat,
44
+ T as SkeletonTableRow
45
+ };
@@ -0,0 +1 @@
1
+ "use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("react/jsx-runtime"),l=require("../../../lib/utils.cjs"),h=require("../../../lib/labels.cjs"),b=require("../../atoms/Progress/Progress.cjs"),y={nav:"Progress",position:(s,c)=>`Step ${s} of ${c}`,done:"done",number:s=>String(s)},j=()=>r.jsx("svg",{viewBox:"0 0 24 24",width:"16",height:"16",fill:"none",stroke:"currentColor",strokeWidth:"3",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:r.jsx("path",{d:"M20 6 9 17l-5-5"})});function k({steps:s,current:c,variant:g="stepper",labels:f,className:p}){const o=h.withLabels(y,f),n=s.length;if(n===0)return null;const t=Math.min(Math.max(1,Math.floor(Number.isFinite(c)?c:1)),n+1),d=t>n,u=d?o.position(n,n):o.position(t,n),x=d?u:`${u}: ${s[t-1]}`;return g==="segmented"?r.jsxs("div",{className:l.cn("rst:font-ui rst:w-full rst:min-w-0",p),"data-step-progress":"segmented",children:[r.jsxs("div",{className:"rst:mb-1.5 rst:flex rst:items-baseline rst:justify-between rst:gap-3 rst:text-sm","aria-hidden":"true",children:[r.jsx("span",{className:"rst:font-medium rst:text-[var(--roster-control-text)]","data-step-position":"",children:u}),!d&&r.jsx("span",{className:"rst:min-w-0 rst:truncate rst:text-gray-600 rst:dark:text-gray-400","data-step-name":"",children:s[t-1]})]}),r.jsx(b.Progress,{variant:"segmented",segments:s.map((m,i)=>i+1<t?"done":i+1===t?"current":"remaining"),announce:!1}),r.jsx("span",{role:"status",className:"rst:sr-only","data-step-status":"",children:x})]}):r.jsxs("div",{className:l.cn("rst:font-ui rst:w-full",p),"data-step-progress":"stepper",children:[r.jsx("ol",{"aria-label":o.nav,className:"rst:m-0 rst:flex rst:w-full rst:list-none rst:p-0",children:s.map((m,i)=>{const a=i+1,e=a<t?"done":a===t?"current":"upcoming";return r.jsxs("li",{"aria-current":e==="current"?"step":void 0,className:"rst:relative rst:flex rst:min-w-0 rst:flex-1 rst:flex-col rst:items-center rst:gap-1.5 rst:text-center","data-step":e,children:[i>0&&r.jsx("span",{"aria-hidden":"true",className:l.cn("rst:absolute rst:right-1/2 rst:top-4 rst:h-0.5 rst:w-full rst:-translate-y-1/2",a<=t?"rst:bg-primary-600 rst:dark:bg-primary-400 rst:forced-colors:forced-color-adjust-none rst:forced-colors:bg-[Highlight]":"rst:bg-[var(--roster-skeleton)] rst:forced-colors:forced-color-adjust-none rst:forced-colors:bg-[GrayText]"),"data-step-connector":a<=t?"filled":"empty"}),r.jsx("span",{"aria-hidden":"true",className:l.cn("rst:relative rst:z-10 rst:flex rst:h-8 rst:w-8 rst:items-center rst:justify-center rst:rounded-full rst:text-sm rst:font-semibold rst:tabular-nums",e==="done"&&"rst:bg-primary-600 rst:text-primary-600-ink rst:dark:bg-primary-400 rst:dark:text-gray-950 rst:forced-colors:forced-color-adjust-none rst:forced-colors:bg-[Highlight] rst:forced-colors:text-[HighlightText]",e==="current"&&"rst:border-2 rst:border-primary-600 rst:bg-[var(--roster-card-bg)] rst:text-primary-600 rst:dark:border-primary-400 rst:dark:text-primary-400",e==="upcoming"&&"rst:bg-[var(--roster-skeleton)] rst:text-gray-600 rst:dark:text-gray-300 rst:forced-colors:border"),"data-step-marker":"",children:e==="done"?r.jsx(j,{}):o.number(a)}),r.jsxs("span",{className:l.cn("rst:w-full rst:px-1 rst:text-xs rst:leading-4 rst:break-words",e==="current"?"rst:font-semibold rst:text-[var(--roster-control-text)]":"rst:text-gray-600 rst:dark:text-gray-400"),children:[m,e==="done"&&r.jsx("span",{className:"rst:sr-only",children:`, ${o.done}`})]})]},`${a}-${m}`)})}),r.jsx("span",{role:"status",className:"rst:sr-only","data-step-status":"",children:x})]})}exports.StepProgress=k;
@@ -0,0 +1,37 @@
1
+ /** Every word StepProgress shows or says. Pass any of them in `labels` to replace it. */
2
+ export interface StepProgressLabels {
3
+ /** The list's name. */
4
+ nav: string;
5
+ /** Where you are: "Step 2 of 5". */
6
+ position: (current: number, total: number) => string;
7
+ /** Said after a finished step's name. */
8
+ done: string;
9
+ /** A step's number as shown. */
10
+ number: (step: number) => string;
11
+ }
12
+ export interface StepProgressProps {
13
+ /** Each step's name, in order. */
14
+ steps: string[];
15
+ /** The step you're on, from 1. Past the last means every step is done. */
16
+ current: number;
17
+ /**
18
+ * - `"stepper"`: every step named, with a numbered marker and connectors
19
+ * that fill behind the current one. For a flow with room to show its map.
20
+ * - `"segmented"`: a segmented bar and "Step 2 of 5", for a card or a side
21
+ * panel. The segments alone don't say where you are, so the words always
22
+ * come with them.
23
+ */
24
+ variant?: "stepper" | "segmented";
25
+ /** The component's own words, replaced; any left out stay English. */
26
+ labels?: Partial<StepProgressLabels>;
27
+ className?: string;
28
+ }
29
+ /**
30
+ * Discrete progress through named steps: a join flow, a setup, a checkout.
31
+ *
32
+ * The current step is `aria-current="step"`, each finished one says so, and
33
+ * a polite status says the new position ("Step 3 of 5: Shelf") when it
34
+ * changes.
35
+ */
36
+ declare function StepProgress({ steps, current: rawCurrent, variant, labels: overrides, className }: StepProgressProps): import("react/jsx-runtime").JSX.Element | null;
37
+ export { StepProgress };
@@ -0,0 +1,90 @@
1
+ "use client";
2
+ import { jsxs as l, jsx as r } from "react/jsx-runtime";
3
+ import { cn as d } from "../../../lib/utils.js";
4
+ import { withLabels as b } from "../../../lib/labels.js";
5
+ import { Progress as y } from "../../atoms/Progress/Progress.js";
6
+ const k = {
7
+ nav: "Progress",
8
+ position: (s, c) => `Step ${s} of ${c}`,
9
+ done: "done",
10
+ number: (s) => String(s)
11
+ }, v = () => /* @__PURE__ */ r("svg", { viewBox: "0 0 24 24", width: "16", height: "16", fill: "none", stroke: "currentColor", strokeWidth: "3", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: /* @__PURE__ */ r("path", { d: "M20 6 9 17l-5-5" }) });
12
+ function L({ steps: s, current: c, variant: h = "stepper", labels: x, className: g }) {
13
+ const n = b(k, x), a = s.length;
14
+ if (a === 0) return null;
15
+ const t = Math.min(Math.max(1, Math.floor(Number.isFinite(c) ? c : 1)), a + 1), m = t > a, p = m ? n.position(a, a) : n.position(t, a), f = m ? p : `${p}: ${s[t - 1]}`;
16
+ return h === "segmented" ? /* @__PURE__ */ l("div", { className: d("rst:font-ui rst:w-full rst:min-w-0", g), "data-step-progress": "segmented", children: [
17
+ /* @__PURE__ */ l("div", { className: "rst:mb-1.5 rst:flex rst:items-baseline rst:justify-between rst:gap-3 rst:text-sm", "aria-hidden": "true", children: [
18
+ /* @__PURE__ */ r("span", { className: "rst:font-medium rst:text-[var(--roster-control-text)]", "data-step-position": "", children: p }),
19
+ !m && /* @__PURE__ */ r("span", { className: "rst:min-w-0 rst:truncate rst:text-gray-600 rst:dark:text-gray-400", "data-step-name": "", children: s[t - 1] })
20
+ ] }),
21
+ /* @__PURE__ */ r(
22
+ y,
23
+ {
24
+ variant: "segmented",
25
+ segments: s.map((u, i) => i + 1 < t ? "done" : i + 1 === t ? "current" : "remaining"),
26
+ announce: !1
27
+ }
28
+ ),
29
+ /* @__PURE__ */ r("span", { role: "status", className: "rst:sr-only", "data-step-status": "", children: f })
30
+ ] }) : /* @__PURE__ */ l("div", { className: d("rst:font-ui rst:w-full", g), "data-step-progress": "stepper", children: [
31
+ /* @__PURE__ */ r("ol", { "aria-label": n.nav, className: "rst:m-0 rst:flex rst:w-full rst:list-none rst:p-0", children: s.map((u, i) => {
32
+ const o = i + 1, e = o < t ? "done" : o === t ? "current" : "upcoming";
33
+ return /* @__PURE__ */ l(
34
+ "li",
35
+ {
36
+ "aria-current": e === "current" ? "step" : void 0,
37
+ className: "rst:relative rst:flex rst:min-w-0 rst:flex-1 rst:flex-col rst:items-center rst:gap-1.5 rst:text-center",
38
+ "data-step": e,
39
+ children: [
40
+ i > 0 && /* @__PURE__ */ r(
41
+ "span",
42
+ {
43
+ "aria-hidden": "true",
44
+ className: d(
45
+ "rst:absolute rst:right-1/2 rst:top-4 rst:h-0.5 rst:w-full rst:-translate-y-1/2",
46
+ o <= t ? "rst:bg-primary-600 rst:dark:bg-primary-400 rst:forced-colors:forced-color-adjust-none rst:forced-colors:bg-[Highlight]" : "rst:bg-[var(--roster-skeleton)] rst:forced-colors:forced-color-adjust-none rst:forced-colors:bg-[GrayText]"
47
+ ),
48
+ "data-step-connector": o <= t ? "filled" : "empty"
49
+ }
50
+ ),
51
+ /* @__PURE__ */ r(
52
+ "span",
53
+ {
54
+ "aria-hidden": "true",
55
+ className: d(
56
+ "rst:relative rst:z-10 rst:flex rst:h-8 rst:w-8 rst:items-center rst:justify-center rst:rounded-full rst:text-sm rst:font-semibold rst:tabular-nums",
57
+ e === "done" && "rst:bg-primary-600 rst:text-primary-600-ink rst:dark:bg-primary-400 rst:dark:text-gray-950 rst:forced-colors:forced-color-adjust-none rst:forced-colors:bg-[Highlight] rst:forced-colors:text-[HighlightText]",
58
+ /* A border, not a ring: forced colors keep a border and drop
59
+ the shadow a ring is drawn with. */
60
+ e === "current" && "rst:border-2 rst:border-primary-600 rst:bg-[var(--roster-card-bg)] rst:text-primary-600 rst:dark:border-primary-400 rst:dark:text-primary-400",
61
+ e === "upcoming" && "rst:bg-[var(--roster-skeleton)] rst:text-gray-600 rst:dark:text-gray-300 rst:forced-colors:border"
62
+ ),
63
+ "data-step-marker": "",
64
+ children: e === "done" ? /* @__PURE__ */ r(v, {}) : n.number(o)
65
+ }
66
+ ),
67
+ /* @__PURE__ */ l(
68
+ "span",
69
+ {
70
+ className: d(
71
+ "rst:w-full rst:px-1 rst:text-xs rst:leading-4 rst:break-words",
72
+ e === "current" ? "rst:font-semibold rst:text-[var(--roster-control-text)]" : "rst:text-gray-600 rst:dark:text-gray-400"
73
+ ),
74
+ children: [
75
+ u,
76
+ e === "done" && /* @__PURE__ */ r("span", { className: "rst:sr-only", children: `, ${n.done}` })
77
+ ]
78
+ }
79
+ )
80
+ ]
81
+ },
82
+ `${o}-${u}`
83
+ );
84
+ }) }),
85
+ /* @__PURE__ */ r("span", { role: "status", className: "rst:sr-only", "data-step-status": "", children: f })
86
+ ] });
87
+ }
88
+ export {
89
+ L as StepProgress
90
+ };
@@ -1 +1 @@
1
- "use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),b=require("react"),r=require("../../../lib/utils.cjs"),g=require("../../../hooks/useCountdown.cjs"),l=require("./countdown-variants.cjs"),a=({value:c,label:n,size:s,variant:e})=>t.jsxs("div",{className:"rst:flex rst:flex-col rst:items-center",children:[t.jsx("span",{className:r.cn(l.countdownNumberVariants({size:s,variant:e})),children:String(c).padStart(2,"0")}),t.jsx("span",{className:r.cn(l.countdownLabelVariants({size:s}),"rst:@max-[22rem]:text-[9px]"),children:n})]}),x=b.forwardRef(({targetDate:c,title:n,size:s,variant:e="gradient",className:o,completionText:u,...d},i)=>{const{days:m,hours:j,minutes:w,seconds:f,isFinished:h}=g.useCountdown(c);return h?u?t.jsx("div",{ref:i,className:r.cn("rst:font-bold rst:w-full rst:text-center rst:text-gray-900 rst:dark:text-gray-100",o),...d,children:t.jsx("h3",{className:r.cn(l.countdownTitleVariants({size:s}),"rst:mb-0"),children:u})}):null:t.jsx("div",{ref:i,className:r.cn("rst:font-bold rst:w-full rst:text-center rst:text-gray-900 rst:dark:text-gray-100",o),...d,children:t.jsxs("div",{className:"rst:@container rst:w-full",children:[n&&t.jsx("h3",{className:r.cn(l.countdownTitleVariants({size:s})),children:n}),t.jsxs("div",{className:"rst:flex rst:justify-center rst:gap-3 rst:@[22rem]:gap-6 rst:@[35rem]:gap-8",children:[t.jsx(a,{value:m,label:"Days",size:s,variant:e}),t.jsx(a,{value:j,label:"Hours",size:s,variant:e}),t.jsx(a,{value:w,label:"Minutes",size:s,variant:e}),t.jsx(a,{value:f,label:"Seconds",size:s,variant:e})]})]})})});x.displayName="Countdown";exports.Countdown=x;
1
+ "use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("react/jsx-runtime"),g=require("react"),n=require("../../../lib/utils.cjs"),N=require("../../../lib/labels.cjs"),v=require("../../../hooks/useCountdown.cjs"),c=require("./countdown-variants.cjs"),l=({value:o,label:r,size:t,variant:e})=>s.jsxs("div",{className:"rst:flex rst:flex-col rst:items-center",children:[s.jsx("span",{className:n.cn(c.countdownNumberVariants({size:t,variant:e})),children:String(o).padStart(2,"0")}),s.jsx("span",{className:n.cn(c.countdownLabelVariants({size:t}),"rst:@max-[22rem]:text-[9px]"),children:r})]}),p={days:()=>"Days",hours:()=>"Hours",minutes:()=>"Minutes",seconds:()=>"Seconds"},b=g.forwardRef(({targetDate:o,title:r,size:t,variant:e="gradient",className:u,completionText:d,labels:f,...i},x)=>{const a=N.withLabels(p,f),{days:m,hours:h,minutes:j,seconds:w,isFinished:y}=v.useCountdown(o);return y?d?s.jsx("div",{ref:x,className:n.cn("rst:font-bold rst:w-full rst:text-center rst:text-gray-900 rst:dark:text-gray-100",u),...i,children:s.jsx("h3",{className:n.cn(c.countdownTitleVariants({size:t}),"rst:mb-0"),children:d})}):null:s.jsx("div",{ref:x,className:n.cn("rst:font-bold rst:w-full rst:text-center rst:text-gray-900 rst:dark:text-gray-100",u),...i,children:s.jsxs("div",{className:"rst:@container rst:w-full",children:[r&&s.jsx("h3",{className:n.cn(c.countdownTitleVariants({size:t})),children:r}),s.jsxs("div",{className:"rst:flex rst:justify-center rst:gap-3 rst:@[22rem]:gap-6 rst:@[35rem]:gap-8",children:[s.jsx(l,{value:m,label:a.days(m),size:t,variant:e}),s.jsx(l,{value:h,label:a.hours(h),size:t,variant:e}),s.jsx(l,{value:j,label:a.minutes(j),size:t,variant:e}),s.jsx(l,{value:w,label:a.seconds(w),size:t,variant:e})]})]})})});b.displayName="Countdown";exports.Countdown=b;
@@ -1,11 +1,24 @@
1
1
  import { default as React } from 'react';
2
2
  import { VariantProps } from 'class-variance-authority';
3
3
  import { countdownTitleVariants, countdownNumberVariants } from './countdown-variants';
4
+ /**
5
+ * Every word Countdown shows of its own. Pass any of them in `labels` to
6
+ * replace it. Each takes the number beside it, for a language whose word
7
+ * changes with the count.
8
+ */
9
+ export interface CountdownLabels {
10
+ days: (count: number) => string;
11
+ hours: (count: number) => string;
12
+ minutes: (count: number) => string;
13
+ seconds: (count: number) => string;
14
+ }
4
15
  export interface CountdownProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof countdownTitleVariants> {
5
16
  targetDate: Date;
6
17
  title?: string;
7
18
  completionText?: string;
8
19
  variant?: VariantProps<typeof countdownNumberVariants>["variant"];
20
+ /** Replaces the unit words under the numbers. */
21
+ labels?: Partial<CountdownLabels>;
9
22
  }
10
23
  declare const Countdown: React.ForwardRefExoticComponent<CountdownProps & React.RefAttributes<HTMLDivElement>>;
11
24
  export { Countdown };