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

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 (87) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/dist/atoms/components/data/Duration/Duration.d.ts +11 -0
  3. package/dist/atoms/components/data/Duration/Duration.d.ts.map +1 -0
  4. package/dist/atoms/components/data/Duration/index.d.ts +2 -0
  5. package/dist/atoms/components/data/Duration/index.d.ts.map +1 -0
  6. package/dist/atoms/components/data/LiveIndicator/LiveIndicator.d.ts +12 -0
  7. package/dist/atoms/components/data/LiveIndicator/LiveIndicator.d.ts.map +1 -0
  8. package/dist/atoms/components/data/LiveIndicator/index.d.ts +2 -0
  9. package/dist/atoms/components/data/LiveIndicator/index.d.ts.map +1 -0
  10. package/dist/atoms/components/data/Sparkline/Sparkline.d.ts +16 -0
  11. package/dist/atoms/components/data/Sparkline/Sparkline.d.ts.map +1 -0
  12. package/dist/atoms/components/data/Sparkline/index.d.ts +2 -0
  13. package/dist/atoms/components/data/Sparkline/index.d.ts.map +1 -0
  14. package/dist/atoms/components/data/Timestamp/Timestamp.d.ts +13 -0
  15. package/dist/atoms/components/data/Timestamp/Timestamp.d.ts.map +1 -0
  16. package/dist/atoms/components/data/Timestamp/index.d.ts +2 -0
  17. package/dist/atoms/components/data/Timestamp/index.d.ts.map +1 -0
  18. package/dist/atoms/components/data/index.d.ts +4 -0
  19. package/dist/atoms/components/data/index.d.ts.map +1 -1
  20. package/dist/frontend-patterns.css +1 -1
  21. package/dist/index.d.ts +1 -1
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.es.js +299 -42
  24. package/dist/index.es.js.map +1 -1
  25. package/dist/index.js +299 -42
  26. package/dist/index.js.map +1 -1
  27. package/dist/swebrain/SweBrainShowcase.d.ts +8 -0
  28. package/dist/swebrain/SweBrainShowcase.d.ts.map +1 -0
  29. package/dist/swebrain/atoms/Card.d.ts +15 -0
  30. package/dist/swebrain/atoms/Card.d.ts.map +1 -0
  31. package/dist/swebrain/atoms/Chip.d.ts +17 -0
  32. package/dist/swebrain/atoms/Chip.d.ts.map +1 -0
  33. package/dist/swebrain/atoms/Duration.d.ts +7 -0
  34. package/dist/swebrain/atoms/Duration.d.ts.map +1 -0
  35. package/dist/swebrain/atoms/EmptyCell.d.ts +5 -0
  36. package/dist/swebrain/atoms/EmptyCell.d.ts.map +1 -0
  37. package/dist/swebrain/atoms/Hand.d.ts +8 -0
  38. package/dist/swebrain/atoms/Hand.d.ts.map +1 -0
  39. package/dist/swebrain/atoms/ID.d.ts +9 -0
  40. package/dist/swebrain/atoms/ID.d.ts.map +1 -0
  41. package/dist/swebrain/atoms/IdTag.d.ts +9 -0
  42. package/dist/swebrain/atoms/IdTag.d.ts.map +1 -0
  43. package/dist/swebrain/atoms/KV.d.ts +7 -0
  44. package/dist/swebrain/atoms/KV.d.ts.map +1 -0
  45. package/dist/swebrain/atoms/LiveIndicator.d.ts +7 -0
  46. package/dist/swebrain/atoms/LiveIndicator.d.ts.map +1 -0
  47. package/dist/swebrain/atoms/PoolChip.d.ts +14 -0
  48. package/dist/swebrain/atoms/PoolChip.d.ts.map +1 -0
  49. package/dist/swebrain/atoms/Row.d.ts +10 -0
  50. package/dist/swebrain/atoms/Row.d.ts.map +1 -0
  51. package/dist/swebrain/atoms/Sparkline.d.ts +11 -0
  52. package/dist/swebrain/atoms/Sparkline.d.ts.map +1 -0
  53. package/dist/swebrain/atoms/StatusBadge.d.ts +11 -0
  54. package/dist/swebrain/atoms/StatusBadge.d.ts.map +1 -0
  55. package/dist/swebrain/atoms/StatusDot.d.ts +11 -0
  56. package/dist/swebrain/atoms/StatusDot.d.ts.map +1 -0
  57. package/dist/swebrain/atoms/Timestamp.d.ts +8 -0
  58. package/dist/swebrain/atoms/Timestamp.d.ts.map +1 -0
  59. package/dist/swebrain/atoms/index.d.ts +34 -0
  60. package/dist/swebrain/atoms/index.d.ts.map +1 -0
  61. package/dist/swebrain/atoms/pool-tokens.d.ts +14 -0
  62. package/dist/swebrain/atoms/pool-tokens.d.ts.map +1 -0
  63. package/dist/swebrain/atoms/tokens.d.ts +96 -0
  64. package/dist/swebrain/atoms/tokens.d.ts.map +1 -0
  65. package/dist/swebrain/index.d.ts +4 -0
  66. package/dist/swebrain/index.d.ts.map +1 -0
  67. package/dist/swebrain/lib/favs.d.ts +5 -0
  68. package/dist/swebrain/lib/favs.d.ts.map +1 -0
  69. package/dist/swebrain/lib/vendors.d.ts +14 -0
  70. package/dist/swebrain/lib/vendors.d.ts.map +1 -0
  71. package/dist/swebrain/molecules/PoolLegend.d.ts +8 -0
  72. package/dist/swebrain/molecules/PoolLegend.d.ts.map +1 -0
  73. package/dist/swebrain/molecules/SearchInput.d.ts +17 -0
  74. package/dist/swebrain/molecules/SearchInput.d.ts.map +1 -0
  75. package/dist/swebrain/molecules/StatCard.d.ts +11 -0
  76. package/dist/swebrain/molecules/StatCard.d.ts.map +1 -0
  77. package/dist/swebrain/molecules/TimeRangePicker.d.ts +18 -0
  78. package/dist/swebrain/molecules/TimeRangePicker.d.ts.map +1 -0
  79. package/dist/swebrain/molecules/index.d.ts +9 -0
  80. package/dist/swebrain/molecules/index.d.ts.map +1 -0
  81. package/dist/sync/createEntityHooks.d.ts.map +1 -1
  82. package/dist/sync/index.d.ts +1 -1
  83. package/dist/sync/index.d.ts.map +1 -1
  84. package/dist/sync/types.d.ts +110 -23
  85. package/dist/sync/types.d.ts.map +1 -1
  86. package/dist/templates/factory.d.ts.map +1 -1
  87. package/package.json +2 -1
package/dist/index.js CHANGED
@@ -7793,6 +7793,201 @@ const TruncatedText = ({
7793
7793
  }
7794
7794
  );
7795
7795
  };
7796
+ function formatAuto(ms) {
7797
+ if (ms < 1e3) {
7798
+ return { visible: `${ms}ms`, spoken: `${ms} milliseconds` };
7799
+ }
7800
+ if (ms < 6e4) {
7801
+ const secs = ms / 1e3;
7802
+ return {
7803
+ visible: `${secs.toFixed(1)}s`,
7804
+ spoken: `${secs.toFixed(1)} seconds`
7805
+ };
7806
+ }
7807
+ if (ms < 36e5) {
7808
+ const m = Math.floor(ms / 6e4);
7809
+ const s = Math.round(ms % 6e4 / 1e3);
7810
+ return { visible: `${m}m ${s}s`, spoken: `${m} minutes ${s} seconds` };
7811
+ }
7812
+ if (ms < 864e5) {
7813
+ const h2 = Math.floor(ms / 36e5);
7814
+ const m = Math.round(ms % 36e5 / 6e4);
7815
+ return { visible: `${h2}h ${m}m`, spoken: `${h2} hours ${m} minutes` };
7816
+ }
7817
+ const d = Math.floor(ms / 864e5);
7818
+ const h = Math.round(ms % 864e5 / 36e5);
7819
+ return { visible: `${d}d ${h}h`, spoken: `${d} days ${h} hours` };
7820
+ }
7821
+ function formatS(ms) {
7822
+ const secs = ms / 1e3;
7823
+ return {
7824
+ visible: `${secs.toFixed(1)}s`,
7825
+ spoken: `${secs.toFixed(1)} seconds`
7826
+ };
7827
+ }
7828
+ function formatMs(ms) {
7829
+ return { visible: `${ms}ms`, spoken: `${ms} milliseconds` };
7830
+ }
7831
+ function Duration({ ms, precision = "auto", className }) {
7832
+ const { visible, spoken } = precision === "s" ? formatS(ms) : precision === "ms" ? formatMs(ms) : formatAuto(ms);
7833
+ return /* @__PURE__ */ jsxRuntime.jsx(
7834
+ "span",
7835
+ {
7836
+ "aria-label": spoken,
7837
+ className: cn("font-mono text-xs text-muted-foreground", className),
7838
+ children: visible
7839
+ }
7840
+ );
7841
+ }
7842
+ function toDate(v) {
7843
+ return v instanceof Date ? v : new Date(v);
7844
+ }
7845
+ function formatRelative(date, now) {
7846
+ const diffMs = now.getTime() - date.getTime();
7847
+ const abs = Math.abs(diffMs);
7848
+ const suffix = diffMs >= 0 ? "ago" : "from now";
7849
+ if (abs < 6e4) return "just now";
7850
+ if (abs < 36e5) {
7851
+ const m = Math.floor(abs / 6e4);
7852
+ return `${m}m ${suffix}`;
7853
+ }
7854
+ if (abs < 864e5) {
7855
+ const h = Math.floor(abs / 36e5);
7856
+ return `${h}h ${suffix}`;
7857
+ }
7858
+ if (abs < 6048e5) {
7859
+ const d = Math.floor(abs / 864e5);
7860
+ return d === 1 ? "yesterday" : `${d}d ${suffix}`;
7861
+ }
7862
+ return date.toLocaleDateString(void 0);
7863
+ }
7864
+ function formatAbsolute(date, tz) {
7865
+ return date.toLocaleString(void 0, {
7866
+ dateStyle: "short",
7867
+ timeStyle: "short",
7868
+ timeZone: tz
7869
+ });
7870
+ }
7871
+ function Timestamp({
7872
+ value,
7873
+ format = "relative",
7874
+ tz,
7875
+ className
7876
+ }) {
7877
+ const date = toDate(value);
7878
+ const iso = date.toISOString();
7879
+ const [now, setNow] = React.useState(() => /* @__PURE__ */ new Date());
7880
+ React.useEffect(() => {
7881
+ if (format === "absolute") return;
7882
+ const id = setInterval(() => setNow(/* @__PURE__ */ new Date()), 3e4);
7883
+ return () => clearInterval(id);
7884
+ }, [format]);
7885
+ const absolute = formatAbsolute(date, tz);
7886
+ const relative = formatRelative(date, now);
7887
+ const display = format === "relative" ? relative : absolute;
7888
+ const title = format === "both" ? relative : void 0;
7889
+ return /* @__PURE__ */ jsxRuntime.jsx(
7890
+ "time",
7891
+ {
7892
+ dateTime: iso,
7893
+ title,
7894
+ className: cn("font-mono text-xs text-muted-foreground", className),
7895
+ children: display
7896
+ }
7897
+ );
7898
+ }
7899
+ function Sparkline({
7900
+ data,
7901
+ width = 140,
7902
+ height = 28,
7903
+ color = "hsl(var(--muted-foreground))",
7904
+ fill,
7905
+ strokeWidth = 1.2,
7906
+ markLast = false
7907
+ }) {
7908
+ if (data.length < 2) {
7909
+ return /* @__PURE__ */ jsxRuntime.jsx("svg", { width, height, "aria-hidden": true });
7910
+ }
7911
+ const min = Math.min(...data);
7912
+ const max = Math.max(...data);
7913
+ const range = max - min || 1;
7914
+ const pad = strokeWidth;
7915
+ const innerW = width - pad * 2;
7916
+ const innerH = height - pad * 2;
7917
+ const points = data.map((v, i) => {
7918
+ const x = pad + i / (data.length - 1) * innerW;
7919
+ const y = pad + innerH - (v - min) / range * innerH;
7920
+ return [x, y];
7921
+ });
7922
+ const polyline = points.map(([x, y]) => `${x.toFixed(2)},${y.toFixed(2)}`).join(" ");
7923
+ const firstPt = points[0];
7924
+ const lastPt = points[points.length - 1];
7925
+ let fillPath;
7926
+ if (fill) {
7927
+ fillPath = [
7928
+ `${firstPt[0].toFixed(2)},${(pad + innerH).toFixed(2)}`,
7929
+ ...points.map(([x, y]) => `${x.toFixed(2)},${y.toFixed(2)}`),
7930
+ `${lastPt[0].toFixed(2)},${(pad + innerH).toFixed(2)}`
7931
+ ].join(" ");
7932
+ }
7933
+ return /* @__PURE__ */ jsxRuntime.jsxs(
7934
+ "svg",
7935
+ {
7936
+ width,
7937
+ height,
7938
+ viewBox: `0 0 ${width} ${height}`,
7939
+ "aria-hidden": true,
7940
+ style: { display: "block", overflow: "visible" },
7941
+ children: [
7942
+ fillPath && /* @__PURE__ */ jsxRuntime.jsx("polygon", { points: fillPath, fill, stroke: "none" }),
7943
+ /* @__PURE__ */ jsxRuntime.jsx(
7944
+ "polyline",
7945
+ {
7946
+ points: polyline,
7947
+ fill: "none",
7948
+ stroke: color,
7949
+ strokeWidth,
7950
+ strokeLinejoin: "round",
7951
+ strokeLinecap: "round"
7952
+ }
7953
+ ),
7954
+ markLast && /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: lastPt[0], cy: lastPt[1], r: strokeWidth * 2, fill: color })
7955
+ ]
7956
+ }
7957
+ );
7958
+ }
7959
+ function LiveIndicator({
7960
+ active,
7961
+ label = "Live",
7962
+ className
7963
+ }) {
7964
+ const ariaLabel = active ? `${label} — connected` : `${label} — paused`;
7965
+ return /* @__PURE__ */ jsxRuntime.jsxs(
7966
+ "span",
7967
+ {
7968
+ role: "status",
7969
+ "aria-live": "polite",
7970
+ "aria-label": ariaLabel,
7971
+ className: cn(
7972
+ "inline-flex items-center gap-2 text-xs font-mono",
7973
+ active ? "text-primary" : "text-muted-foreground",
7974
+ className
7975
+ ),
7976
+ children: [
7977
+ /* @__PURE__ */ jsxRuntime.jsx(
7978
+ "span",
7979
+ {
7980
+ className: cn(
7981
+ "inline-block w-2 h-2 rounded-full",
7982
+ active ? "bg-primary animate-pulse" : "bg-muted-foreground/40"
7983
+ )
7984
+ }
7985
+ ),
7986
+ label
7987
+ ]
7988
+ }
7989
+ );
7990
+ }
7796
7991
  const defaultActivityIconMap = {
7797
7992
  user: {
7798
7993
  icon: lucideReact.Users,
@@ -10644,7 +10839,7 @@ const SidebarButton = ({
10644
10839
  "span",
10645
10840
  {
10646
10841
  className: cn(
10647
- "text-sm font-medium flex-1 text-left",
10842
+ "text-sm font-medium flex-1 text-left whitespace-nowrap",
10648
10843
  active ? `text-category-${category}` : "text-foreground"
10649
10844
  ),
10650
10845
  children: label
@@ -15740,14 +15935,12 @@ function createReactApp(config) {
15740
15935
  if (enableRouting) {
15741
15936
  tree = /* @__PURE__ */ jsxRuntime.jsx(NavigationProvider, { initialNavigation: navigation, children: /* @__PURE__ */ jsxRuntime.jsx(SidebarProvider, { children: tree }) });
15742
15937
  }
15743
- if (enableAuth) {
15744
- const authMode = (auth == null ? void 0 : auth.mode) || "pattern-stack";
15745
- if (authMode === "none") {
15746
- setGlobalAuthService(null);
15747
- tree = /* @__PURE__ */ jsxRuntime.jsx(NoAuthProvider, { children: tree });
15748
- } else {
15749
- tree = /* @__PURE__ */ jsxRuntime.jsx(AuthProvider, { config: auth, children: tree });
15750
- }
15938
+ const authMode = (auth == null ? void 0 : auth.mode) || "pattern-stack";
15939
+ if (enableAuth && authMode !== "none") {
15940
+ tree = /* @__PURE__ */ jsxRuntime.jsx(AuthProvider, { config: auth, children: tree });
15941
+ } else {
15942
+ setGlobalAuthService(null);
15943
+ tree = /* @__PURE__ */ jsxRuntime.jsx(NoAuthProvider, { children: tree });
15751
15944
  }
15752
15945
  if (enableQuery) {
15753
15946
  tree = /* @__PURE__ */ jsxRuntime.jsxs(reactQuery.QueryClientProvider, { client: queryClient, children: [
@@ -18897,20 +19090,50 @@ function createEntityHooks(config) {
18897
19090
  /** Key for a specific entity detail query */
18898
19091
  detail: (id) => [...keys.details(), id]
18899
19092
  };
18900
- function useListSync(filters) {
19093
+ const DEFAULT_PAGE_SIZE = 50;
19094
+ function toPage(raw, requestedPage, requestedPageSize) {
19095
+ if (Array.isArray(raw)) {
19096
+ const items2 = raw;
19097
+ return {
19098
+ items: items2,
19099
+ page: requestedPage,
19100
+ pageCount: 1,
19101
+ total: items2.length,
19102
+ pageSize: requestedPageSize || items2.length || DEFAULT_PAGE_SIZE,
19103
+ nextCursor: null
19104
+ };
19105
+ }
19106
+ const env2 = raw ?? {};
19107
+ const items = Array.isArray(env2.items) ? env2.items : [];
19108
+ const pageSize = typeof env2.pageSize === "number" && env2.pageSize > 0 ? env2.pageSize : requestedPageSize || DEFAULT_PAGE_SIZE;
19109
+ const total = typeof env2.total === "number" ? env2.total : items.length;
19110
+ const pageCount = typeof env2.pageCount === "number" ? env2.pageCount : Math.max(1, Math.ceil(total / Math.max(1, pageSize)));
19111
+ return {
19112
+ items,
19113
+ page: typeof env2.page === "number" ? env2.page : requestedPage,
19114
+ pageCount,
19115
+ total,
19116
+ pageSize,
19117
+ nextCursor: env2.nextCursor ?? null
19118
+ };
19119
+ }
19120
+ function useListSync(params, requestedPage, requestedPageSize) {
18901
19121
  const query = reactQuery.useQuery({
18902
- queryKey: keys.list(filters),
18903
- queryFn: () => api.list(filters),
19122
+ queryKey: keys.list(params),
19123
+ queryFn: () => api.list(params),
18904
19124
  staleTime
18905
19125
  });
19126
+ const pageEnvelope = React.useMemo(
19127
+ () => query.data === void 0 ? void 0 : toPage(query.data, requestedPage, requestedPageSize),
19128
+ [query.data, requestedPage, requestedPageSize]
19129
+ );
18906
19130
  React.useEffect(() => {
18907
19131
  var _a, _b;
18908
- if (query.data) {
18909
- const items = Array.isArray(query.data) ? query.data : query.data.items || [];
18910
- (_b = (_a = collection.utils) == null ? void 0 : _a.writeUpsert) == null ? void 0 : _b.call(_a, items);
19132
+ if (pageEnvelope) {
19133
+ (_b = (_a = collection.utils) == null ? void 0 : _a.writeUpsert) == null ? void 0 : _b.call(_a, pageEnvelope.items);
18911
19134
  }
18912
- }, [query.data]);
18913
- return query;
19135
+ }, [pageEnvelope]);
19136
+ return { query, pageEnvelope };
18914
19137
  }
18915
19138
  function useGetSync(id) {
18916
19139
  const query = reactQuery.useQuery({
@@ -18928,41 +19151,71 @@ function createEntityHooks(config) {
18928
19151
  return query;
18929
19152
  }
18930
19153
  function useList(options = {}) {
18931
- const { where, orderBy, enabled = true } = options;
18932
- const sync = useListSync(enabled ? where : void 0);
19154
+ const { where, orderBy, enabled = true, pageSize, cursor } = options;
19155
+ const [page, setPageState] = React.useState(() => Math.max(1, options.page ?? 1));
19156
+ const params = React.useMemo(() => {
19157
+ if (!enabled) return void 0;
19158
+ const p = { page };
19159
+ if (pageSize !== void 0) p.pageSize = pageSize;
19160
+ if (cursor !== void 0) p.cursor = cursor;
19161
+ if (orderBy) {
19162
+ p.sort_by = orderBy.field;
19163
+ p.sort_order = orderBy.direction;
19164
+ }
19165
+ if (where) Object.assign(p, where);
19166
+ return p;
19167
+ }, [enabled, page, pageSize, cursor, orderBy, where]);
19168
+ const { query: sync, pageEnvelope } = useListSync(params, page, pageSize ?? DEFAULT_PAGE_SIZE);
19169
+ const pageIds = React.useMemo(() => {
19170
+ if (!pageEnvelope) return [];
19171
+ return pageEnvelope.items.map((item) => item.id).filter((id) => typeof id === "string");
19172
+ }, [pageEnvelope]);
18933
19173
  const liveResult = reactDb.useLiveQuery(collection);
18934
19174
  const data = React.useMemo(() => {
18935
- let items = liveResult.data ?? [];
18936
- if (where) {
18937
- items = items.filter((item) => {
18938
- return Object.entries(where).every(([key, value]) => {
18939
- if (value === void 0) return true;
18940
- const itemValue = item[key];
18941
- if (Array.isArray(value)) {
18942
- return value.includes(itemValue);
18943
- }
18944
- return itemValue === value;
18945
- });
18946
- });
19175
+ var _a, _b;
19176
+ const live = liveResult.data ?? [];
19177
+ const byId = /* @__PURE__ */ new Map();
19178
+ for (const row of live) {
19179
+ const id = row.id;
19180
+ if (typeof id === "string") byId.set(id, row);
18947
19181
  }
18948
- if (orderBy) {
18949
- items = [...items].sort((a, b) => {
18950
- const aVal = a[orderBy.field];
18951
- const bVal = b[orderBy.field];
18952
- if (aVal < bVal) return orderBy.direction === "asc" ? -1 : 1;
18953
- if (aVal > bVal) return orderBy.direction === "asc" ? 1 : -1;
18954
- return 0;
18955
- });
19182
+ const rows = [];
19183
+ for (const id of pageIds) {
19184
+ const row = byId.get(id) ?? // eslint-disable-next-line @typescript-eslint/no-explicit-any
19185
+ ((_b = (_a = collection.state) == null ? void 0 : _a.get) == null ? void 0 : _b.call(_a, id));
19186
+ if (row !== void 0) rows.push(row);
18956
19187
  }
18957
- return items;
18958
- }, [liveResult.data, where, orderBy]);
19188
+ return rows;
19189
+ }, [liveResult.data, pageIds]);
19190
+ const pageCount = (pageEnvelope == null ? void 0 : pageEnvelope.pageCount) ?? 1;
19191
+ const total = (pageEnvelope == null ? void 0 : pageEnvelope.total) ?? data.length;
19192
+ const resolvedPageSize = (pageEnvelope == null ? void 0 : pageEnvelope.pageSize) ?? pageSize ?? DEFAULT_PAGE_SIZE;
19193
+ const currentPage = (pageEnvelope == null ? void 0 : pageEnvelope.page) ?? page;
19194
+ const setPage = React.useCallback(
19195
+ (next2) => {
19196
+ const clamped = Math.max(1, pageCount > 0 ? Math.min(next2, pageCount) : next2);
19197
+ setPageState(clamped);
19198
+ },
19199
+ [pageCount]
19200
+ );
19201
+ const next = React.useCallback(() => setPage(page + 1), [setPage, page]);
19202
+ const prev = React.useCallback(() => setPage(page - 1), [setPage, page]);
18959
19203
  return {
18960
19204
  data,
18961
19205
  isLoading: sync.isLoading || liveResult.isLoading,
18962
19206
  isError: sync.isError,
18963
19207
  error: sync.error,
18964
19208
  refetch: sync.refetch,
18965
- collection
19209
+ collection,
19210
+ page: currentPage,
19211
+ pageCount,
19212
+ total,
19213
+ pageSize: resolvedPageSize,
19214
+ setPage,
19215
+ next,
19216
+ prev,
19217
+ hasNext: currentPage < pageCount,
19218
+ hasPrev: currentPage > 1
18966
19219
  };
18967
19220
  }
18968
19221
  function useGet(id, options = {}) {
@@ -19213,6 +19466,7 @@ exports.DropdownMenuSub = DropdownMenuSub;
19213
19466
  exports.DropdownMenuSubContent = DropdownMenuSubContent;
19214
19467
  exports.DropdownMenuSubTrigger = DropdownMenuSubTrigger;
19215
19468
  exports.DropdownMenuTrigger = DropdownMenuTrigger;
19469
+ exports.Duration = Duration;
19216
19470
  exports.EmptyState = EmptyState;
19217
19471
  exports.EnhancedDataTemplate = EnhancedDataTemplate;
19218
19472
  exports.EntityIcon = EntityIcon;
@@ -19232,6 +19486,7 @@ exports.Label = Label;
19232
19486
  exports.ListCard = ListCard;
19233
19487
  exports.ListPageTemplate = ListPageTemplate;
19234
19488
  exports.ListToolbar = ListToolbar;
19489
+ exports.LiveIndicator = LiveIndicator;
19235
19490
  exports.Loading = Loading;
19236
19491
  exports.LoginForm = LoginForm;
19237
19492
  exports.LogoutButton = LogoutButton;
@@ -19276,6 +19531,7 @@ exports.SkeletonAvatar = SkeletonAvatar;
19276
19531
  exports.SkeletonButton = SkeletonButton;
19277
19532
  exports.SkeletonCard = SkeletonCard;
19278
19533
  exports.SkeletonText = SkeletonText;
19534
+ exports.Sparkline = Sparkline;
19279
19535
  exports.Spinner = Spinner;
19280
19536
  exports.StatCard = StatCard;
19281
19537
  exports.StyleGuide = StyleGuide;
@@ -19293,6 +19549,7 @@ exports.Tabs = Tabs;
19293
19549
  exports.TabsContent = TabsContent;
19294
19550
  exports.TabsList = TabsList;
19295
19551
  exports.TabsTrigger = TabsTrigger;
19552
+ exports.Timestamp = Timestamp;
19296
19553
  exports.Toast = Toast;
19297
19554
  exports.ToastContainer = ToastContainer;
19298
19555
  exports.Tooltip = Tooltip;