@pattern-stack/frontend-patterns 0.2.0-alpha.16 → 0.2.0-alpha.18

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.
package/CHANGELOG.md CHANGED
@@ -7,6 +7,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.2.0-alpha.17]
11
+
12
+ ### Fixed
13
+ - **`SidebarButton` label no longer wraps mid-animation**: added `whitespace-nowrap` to the label `<span>` so the text stays on one line during the Sidebar's `w-16 ↔ w-64` expand/collapse width transition, instead of briefly wrapping onto two lines.
14
+
10
15
  ## [0.2.0-alpha.16]
11
16
 
12
17
  ### Added
@@ -0,0 +1,11 @@
1
+ export interface DurationProps {
2
+ ms: number;
3
+ precision?: "auto" | "s" | "ms";
4
+ className?: string;
5
+ }
6
+ /**
7
+ * Duration — renders a millisecond value as a compact, human-readable span
8
+ * with an accessible spoken label (e.g. 1500 → "1.5s", aria-label "1.5 seconds").
9
+ */
10
+ export declare function Duration({ ms, precision, className }: DurationProps): import("react/jsx-runtime").JSX.Element;
11
+ //# sourceMappingURL=Duration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Duration.d.ts","sourceRoot":"","sources":["../../../../../src/atoms/components/data/Duration/Duration.tsx"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,CAAC,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA6CD;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,EAAE,EAAE,EAAE,SAAkB,EAAE,SAAS,EAAE,EAAE,aAAa,2CAgB5E"}
@@ -0,0 +1,2 @@
1
+ export { Duration, type DurationProps } from "./Duration";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/atoms/components/data/Duration/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,12 @@
1
+ export interface LiveIndicatorProps {
2
+ active: boolean;
3
+ label?: string;
4
+ className?: string;
5
+ }
6
+ /**
7
+ * LiveIndicator — a small status pill with a pulsing dot signalling a live /
8
+ * connected state (e.g. real-time sync, streaming). Announces its state via
9
+ * role="status" + aria-live for assistive tech.
10
+ */
11
+ export declare function LiveIndicator({ active, label, className, }: LiveIndicatorProps): import("react/jsx-runtime").JSX.Element;
12
+ //# sourceMappingURL=LiveIndicator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LiveIndicator.d.ts","sourceRoot":"","sources":["../../../../../src/atoms/components/data/LiveIndicator/LiveIndicator.tsx"],"names":[],"mappings":"AAEA,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,EAC5B,MAAM,EACN,KAAc,EACd,SAAS,GACV,EAAE,kBAAkB,2CAuBpB"}
@@ -0,0 +1,2 @@
1
+ export { LiveIndicator, type LiveIndicatorProps } from "./LiveIndicator";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/atoms/components/data/LiveIndicator/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,16 @@
1
+ export interface SparklineProps {
2
+ data: number[];
3
+ width?: number;
4
+ height?: number;
5
+ color?: string;
6
+ fill?: string;
7
+ strokeWidth?: number;
8
+ markLast?: boolean;
9
+ }
10
+ /**
11
+ * Sparkline — a tiny inline trend chart drawn as a single SVG polyline.
12
+ * Lightweight alternative to <Chart> for in-cell / in-row sparklines.
13
+ * Renders an empty (aria-hidden) svg when given fewer than 2 points.
14
+ */
15
+ export declare function Sparkline({ data, width, height, color, fill, strokeWidth, markLast, }: SparklineProps): import("react/jsx-runtime").JSX.Element;
16
+ //# sourceMappingURL=Sparkline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Sparkline.d.ts","sourceRoot":"","sources":["../../../../../src/atoms/components/data/Sparkline/Sparkline.tsx"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,EACxB,IAAI,EACJ,KAAW,EACX,MAAW,EACX,KAAsC,EACtC,IAAI,EACJ,WAAiB,EACjB,QAAgB,GACjB,EAAE,cAAc,2CAyDhB"}
@@ -0,0 +1,2 @@
1
+ export { Sparkline, type SparklineProps } from "./Sparkline";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/atoms/components/data/Sparkline/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,13 @@
1
+ export interface TimestampProps {
2
+ value: string | Date | number;
3
+ format?: "relative" | "absolute" | "both";
4
+ tz?: string;
5
+ className?: string;
6
+ }
7
+ /**
8
+ * Timestamp — renders a date/time value as a semantic <time> element.
9
+ * In "relative" / "both" modes it self-updates every 30s. "both" shows the
10
+ * absolute time with the relative time on hover.
11
+ */
12
+ export declare function Timestamp({ value, format, tz, className, }: TimestampProps): import("react/jsx-runtime").JSX.Element;
13
+ //# sourceMappingURL=Timestamp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Timestamp.d.ts","sourceRoot":"","sources":["../../../../../src/atoms/components/data/Timestamp/Timestamp.tsx"],"names":[],"mappings":"AAGA,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAAC;IAC9B,MAAM,CAAC,EAAE,UAAU,GAAG,UAAU,GAAG,MAAM,CAAC;IAC1C,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAmCD;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,MAAmB,EACnB,EAAE,EACF,SAAS,GACV,EAAE,cAAc,2CA0BhB"}
@@ -0,0 +1,2 @@
1
+ export { Timestamp, type TimestampProps } from "./Timestamp";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/atoms/components/data/Timestamp/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC"}
@@ -9,6 +9,10 @@ export { ProgressBar, type ProgressBarProps } from "./ProgressBar";
9
9
  export { ListCard, type ListCardProps } from "./ListCard";
10
10
  export { EntityIcon, type EntityIconProps } from "./EntityIcon";
11
11
  export { TruncatedText, type TruncatedTextProps } from "./TruncatedText";
12
+ export { Duration, type DurationProps } from "./Duration";
13
+ export { Timestamp, type TimestampProps } from "./Timestamp";
14
+ export { Sparkline, type SparklineProps } from "./Sparkline";
15
+ export { LiveIndicator, type LiveIndicatorProps } from "./LiveIndicator";
12
16
  export { ActivityFeed, type ActivityFeedProps, type ActivityItem, type ActivityType, type ActivityVariant, } from "./ActivityFeed";
13
17
  export { ConnectionStatus, type ConnectionStatusProps, } from "../../composed/ConnectionStatus";
14
18
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/atoms/components/data/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,SAAS,EACT,KAAK,cAAc,EACnB,KAAK,MAAM,EACX,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,YAAY,EACZ,KAAK,iBAAiB,GACvB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,KAAK,EACL,SAAS,EACT,YAAY,EACZ,SAAS,EACT,SAAS,EACT,WAAW,EACX,QAAQ,EACR,WAAW,EACX,KAAK,UAAU,GAChB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,KAAK,EAAE,KAAK,UAAU,EAAE,KAAK,cAAc,EAAE,MAAM,SAAS,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,EACL,YAAY,EACZ,KAAK,iBAAiB,EACtB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,eAAe,GACrB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,gBAAgB,EAChB,KAAK,qBAAqB,GAC3B,MAAM,iCAAiC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/atoms/components/data/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,SAAS,EACT,KAAK,cAAc,EACnB,KAAK,MAAM,EACX,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,YAAY,EACZ,KAAK,iBAAiB,GACvB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,KAAK,EACL,SAAS,EACT,YAAY,EACZ,SAAS,EACT,SAAS,EACT,WAAW,EACX,QAAQ,EACR,WAAW,EACX,KAAK,UAAU,GAChB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,KAAK,EAAE,KAAK,UAAU,EAAE,KAAK,cAAc,EAAE,MAAM,SAAS,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,EACL,YAAY,EACZ,KAAK,iBAAiB,EACtB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,eAAe,GACrB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,gBAAgB,EAChB,KAAK,qBAAqB,GAC3B,MAAM,iCAAiC,CAAC"}
package/dist/index.es.js CHANGED
@@ -7750,6 +7750,201 @@ const TruncatedText = ({
7750
7750
  }
7751
7751
  );
7752
7752
  };
7753
+ function formatAuto(ms) {
7754
+ if (ms < 1e3) {
7755
+ return { visible: `${ms}ms`, spoken: `${ms} milliseconds` };
7756
+ }
7757
+ if (ms < 6e4) {
7758
+ const secs = ms / 1e3;
7759
+ return {
7760
+ visible: `${secs.toFixed(1)}s`,
7761
+ spoken: `${secs.toFixed(1)} seconds`
7762
+ };
7763
+ }
7764
+ if (ms < 36e5) {
7765
+ const m = Math.floor(ms / 6e4);
7766
+ const s = Math.round(ms % 6e4 / 1e3);
7767
+ return { visible: `${m}m ${s}s`, spoken: `${m} minutes ${s} seconds` };
7768
+ }
7769
+ if (ms < 864e5) {
7770
+ const h2 = Math.floor(ms / 36e5);
7771
+ const m = Math.round(ms % 36e5 / 6e4);
7772
+ return { visible: `${h2}h ${m}m`, spoken: `${h2} hours ${m} minutes` };
7773
+ }
7774
+ const d = Math.floor(ms / 864e5);
7775
+ const h = Math.round(ms % 864e5 / 36e5);
7776
+ return { visible: `${d}d ${h}h`, spoken: `${d} days ${h} hours` };
7777
+ }
7778
+ function formatS(ms) {
7779
+ const secs = ms / 1e3;
7780
+ return {
7781
+ visible: `${secs.toFixed(1)}s`,
7782
+ spoken: `${secs.toFixed(1)} seconds`
7783
+ };
7784
+ }
7785
+ function formatMs(ms) {
7786
+ return { visible: `${ms}ms`, spoken: `${ms} milliseconds` };
7787
+ }
7788
+ function Duration({ ms, precision = "auto", className }) {
7789
+ const { visible, spoken } = precision === "s" ? formatS(ms) : precision === "ms" ? formatMs(ms) : formatAuto(ms);
7790
+ return /* @__PURE__ */ jsx(
7791
+ "span",
7792
+ {
7793
+ "aria-label": spoken,
7794
+ className: cn("font-mono text-xs text-muted-foreground", className),
7795
+ children: visible
7796
+ }
7797
+ );
7798
+ }
7799
+ function toDate(v) {
7800
+ return v instanceof Date ? v : new Date(v);
7801
+ }
7802
+ function formatRelative(date, now) {
7803
+ const diffMs = now.getTime() - date.getTime();
7804
+ const abs = Math.abs(diffMs);
7805
+ const suffix = diffMs >= 0 ? "ago" : "from now";
7806
+ if (abs < 6e4) return "just now";
7807
+ if (abs < 36e5) {
7808
+ const m = Math.floor(abs / 6e4);
7809
+ return `${m}m ${suffix}`;
7810
+ }
7811
+ if (abs < 864e5) {
7812
+ const h = Math.floor(abs / 36e5);
7813
+ return `${h}h ${suffix}`;
7814
+ }
7815
+ if (abs < 6048e5) {
7816
+ const d = Math.floor(abs / 864e5);
7817
+ return d === 1 ? "yesterday" : `${d}d ${suffix}`;
7818
+ }
7819
+ return date.toLocaleDateString(void 0);
7820
+ }
7821
+ function formatAbsolute(date, tz) {
7822
+ return date.toLocaleString(void 0, {
7823
+ dateStyle: "short",
7824
+ timeStyle: "short",
7825
+ timeZone: tz
7826
+ });
7827
+ }
7828
+ function Timestamp({
7829
+ value,
7830
+ format = "relative",
7831
+ tz,
7832
+ className
7833
+ }) {
7834
+ const date = toDate(value);
7835
+ const iso = date.toISOString();
7836
+ const [now, setNow] = useState(() => /* @__PURE__ */ new Date());
7837
+ useEffect(() => {
7838
+ if (format === "absolute") return;
7839
+ const id = setInterval(() => setNow(/* @__PURE__ */ new Date()), 3e4);
7840
+ return () => clearInterval(id);
7841
+ }, [format]);
7842
+ const absolute = formatAbsolute(date, tz);
7843
+ const relative = formatRelative(date, now);
7844
+ const display = format === "relative" ? relative : absolute;
7845
+ const title = format === "both" ? relative : void 0;
7846
+ return /* @__PURE__ */ jsx(
7847
+ "time",
7848
+ {
7849
+ dateTime: iso,
7850
+ title,
7851
+ className: cn("font-mono text-xs text-muted-foreground", className),
7852
+ children: display
7853
+ }
7854
+ );
7855
+ }
7856
+ function Sparkline({
7857
+ data,
7858
+ width = 140,
7859
+ height = 28,
7860
+ color = "hsl(var(--muted-foreground))",
7861
+ fill,
7862
+ strokeWidth = 1.2,
7863
+ markLast = false
7864
+ }) {
7865
+ if (data.length < 2) {
7866
+ return /* @__PURE__ */ jsx("svg", { width, height, "aria-hidden": true });
7867
+ }
7868
+ const min = Math.min(...data);
7869
+ const max = Math.max(...data);
7870
+ const range = max - min || 1;
7871
+ const pad = strokeWidth;
7872
+ const innerW = width - pad * 2;
7873
+ const innerH = height - pad * 2;
7874
+ const points = data.map((v, i) => {
7875
+ const x = pad + i / (data.length - 1) * innerW;
7876
+ const y = pad + innerH - (v - min) / range * innerH;
7877
+ return [x, y];
7878
+ });
7879
+ const polyline = points.map(([x, y]) => `${x.toFixed(2)},${y.toFixed(2)}`).join(" ");
7880
+ const firstPt = points[0];
7881
+ const lastPt = points[points.length - 1];
7882
+ let fillPath;
7883
+ if (fill) {
7884
+ fillPath = [
7885
+ `${firstPt[0].toFixed(2)},${(pad + innerH).toFixed(2)}`,
7886
+ ...points.map(([x, y]) => `${x.toFixed(2)},${y.toFixed(2)}`),
7887
+ `${lastPt[0].toFixed(2)},${(pad + innerH).toFixed(2)}`
7888
+ ].join(" ");
7889
+ }
7890
+ return /* @__PURE__ */ jsxs(
7891
+ "svg",
7892
+ {
7893
+ width,
7894
+ height,
7895
+ viewBox: `0 0 ${width} ${height}`,
7896
+ "aria-hidden": true,
7897
+ style: { display: "block", overflow: "visible" },
7898
+ children: [
7899
+ fillPath && /* @__PURE__ */ jsx("polygon", { points: fillPath, fill, stroke: "none" }),
7900
+ /* @__PURE__ */ jsx(
7901
+ "polyline",
7902
+ {
7903
+ points: polyline,
7904
+ fill: "none",
7905
+ stroke: color,
7906
+ strokeWidth,
7907
+ strokeLinejoin: "round",
7908
+ strokeLinecap: "round"
7909
+ }
7910
+ ),
7911
+ markLast && /* @__PURE__ */ jsx("circle", { cx: lastPt[0], cy: lastPt[1], r: strokeWidth * 2, fill: color })
7912
+ ]
7913
+ }
7914
+ );
7915
+ }
7916
+ function LiveIndicator({
7917
+ active,
7918
+ label = "Live",
7919
+ className
7920
+ }) {
7921
+ const ariaLabel = active ? `${label} — connected` : `${label} — paused`;
7922
+ return /* @__PURE__ */ jsxs(
7923
+ "span",
7924
+ {
7925
+ role: "status",
7926
+ "aria-live": "polite",
7927
+ "aria-label": ariaLabel,
7928
+ className: cn(
7929
+ "inline-flex items-center gap-2 text-xs font-mono",
7930
+ active ? "text-primary" : "text-muted-foreground",
7931
+ className
7932
+ ),
7933
+ children: [
7934
+ /* @__PURE__ */ jsx(
7935
+ "span",
7936
+ {
7937
+ className: cn(
7938
+ "inline-block w-2 h-2 rounded-full",
7939
+ active ? "bg-primary animate-pulse" : "bg-muted-foreground/40"
7940
+ )
7941
+ }
7942
+ ),
7943
+ label
7944
+ ]
7945
+ }
7946
+ );
7947
+ }
7753
7948
  const defaultActivityIconMap = {
7754
7949
  user: {
7755
7950
  icon: Users,
@@ -10601,7 +10796,7 @@ const SidebarButton = ({
10601
10796
  "span",
10602
10797
  {
10603
10798
  className: cn(
10604
- "text-sm font-medium flex-1 text-left",
10799
+ "text-sm font-medium flex-1 text-left whitespace-nowrap",
10605
10800
  active ? `text-category-${category}` : "text-foreground"
10606
10801
  ),
10607
10802
  children: label
@@ -15697,14 +15892,12 @@ function createReactApp(config) {
15697
15892
  if (enableRouting) {
15698
15893
  tree = /* @__PURE__ */ jsx(NavigationProvider, { initialNavigation: navigation, children: /* @__PURE__ */ jsx(SidebarProvider, { children: tree }) });
15699
15894
  }
15700
- if (enableAuth) {
15701
- const authMode = (auth == null ? void 0 : auth.mode) || "pattern-stack";
15702
- if (authMode === "none") {
15703
- setGlobalAuthService(null);
15704
- tree = /* @__PURE__ */ jsx(NoAuthProvider, { children: tree });
15705
- } else {
15706
- tree = /* @__PURE__ */ jsx(AuthProvider, { config: auth, children: tree });
15707
- }
15895
+ const authMode = (auth == null ? void 0 : auth.mode) || "pattern-stack";
15896
+ if (enableAuth && authMode !== "none") {
15897
+ tree = /* @__PURE__ */ jsx(AuthProvider, { config: auth, children: tree });
15898
+ } else {
15899
+ setGlobalAuthService(null);
15900
+ tree = /* @__PURE__ */ jsx(NoAuthProvider, { children: tree });
15708
15901
  }
15709
15902
  if (enableQuery) {
15710
15903
  tree = /* @__PURE__ */ jsxs(QueryClientProvider, { client: queryClient, children: [
@@ -19171,6 +19364,7 @@ export {
19171
19364
  DropdownMenuSubContent,
19172
19365
  DropdownMenuSubTrigger,
19173
19366
  DropdownMenuTrigger,
19367
+ Duration,
19174
19368
  EmptyState,
19175
19369
  EnhancedDataTemplate,
19176
19370
  EntityIcon,
@@ -19190,6 +19384,7 @@ export {
19190
19384
  ListCard,
19191
19385
  ListPageTemplate,
19192
19386
  ListToolbar,
19387
+ LiveIndicator,
19193
19388
  Loading,
19194
19389
  LoginForm,
19195
19390
  LogoutButton,
@@ -19234,6 +19429,7 @@ export {
19234
19429
  SkeletonButton,
19235
19430
  SkeletonCard,
19236
19431
  SkeletonText,
19432
+ Sparkline,
19237
19433
  Spinner,
19238
19434
  StatCard,
19239
19435
  StyleGuide,
@@ -19251,6 +19447,7 @@ export {
19251
19447
  TabsContent,
19252
19448
  TabsList,
19253
19449
  TabsTrigger,
19450
+ Timestamp,
19254
19451
  Toast,
19255
19452
  ToastContainer,
19256
19453
  Tooltip,