@burdenoff/microfe-bigconsole 2026.1001.3 → 2026.1001.4

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.
@@ -14,12 +14,12 @@ var s = n(function({ actions: n, onNavigate: s }) {
14
14
  icon: /* @__PURE__ */ a(r, { className: "h-icon-sm w-icon-sm" }),
15
15
  title: c("bigconsole.overview.quickActions.title", "Quick actions"),
16
16
  children: /* @__PURE__ */ a("div", {
17
- className: "flex flex-col gap-2",
17
+ className: "flex flex-wrap gap-3",
18
18
  children: n.map((e) => /* @__PURE__ */ o(i, {
19
19
  type: "button",
20
20
  variant: e.primary ? "default" : "outline",
21
21
  onClick: () => s(e.path),
22
- className: "min-h-11 w-full justify-start sm:min-h-10",
22
+ className: "min-h-11 w-full justify-start sm:w-auto sm:min-h-10",
23
23
  "data-testid": `overview-quick-action-${e.id}`,
24
24
  children: [e.icon, e.label]
25
25
  }, e.id))
@@ -1 +1 @@
1
- {"version":3,"file":"OverviewQuickActions.js","names":[],"sources":["../../../../src/bigconsole/components/overview/OverviewQuickActions.tsx"],"sourcesContent":["/**\n * OverviewQuickActions\n *\n * Navigation shortcuts to the most common \"create\" flows. Actions the caller\n * is not permitted to perform are hidden, not disabled; the card is omitted by\n * the page when none remain.\n */\n\nimport { type FC, type ReactNode, memo } from 'react';\nimport { Button } from '@burdenoff/fe-libs/ui';\nimport { Zap } from 'lucide-react';\nimport { useTr } from '../../../shared/hooks/useTr';\nimport { Section } from '../common';\n\nexport interface OverviewQuickAction {\n id: string;\n label: string;\n icon: ReactNode;\n path: string;\n primary?: boolean;\n}\n\nexport interface OverviewQuickActionsProps {\n actions: OverviewQuickAction[];\n onNavigate: (path: string) => void;\n}\n\nexport const OverviewQuickActions: FC<OverviewQuickActionsProps> = memo(function OverviewQuickActions({\n actions,\n onNavigate,\n}) {\n const tr = useTr();\n\n return (\n <Section\n headingLevel={2}\n data-testid=\"overview-quick-actions\"\n icon={<Zap className=\"h-icon-sm w-icon-sm\" />}\n title={tr('bigconsole.overview.quickActions.title', 'Quick actions')}\n >\n <div className=\"flex flex-col gap-2\">\n {actions.map((action) => (\n <Button\n key={action.id}\n type=\"button\"\n variant={action.primary ? 'default' : 'outline'}\n onClick={() => onNavigate(action.path)}\n className=\"min-h-11 w-full justify-start sm:min-h-10\"\n data-testid={`overview-quick-action-${action.id}`}\n >\n {action.icon}\n {action.label}\n </Button>\n ))}\n </div>\n </Section>\n );\n});\n\nexport default OverviewQuickActions;\n"],"mappings":";;;;;;;;AA2BA,IAAa,IAAsD,EAAK,SAA8B,EACpG,YACA,iBACC;CACD,IAAM,IAAK,GAAO;AAElB,QACE,kBAAC,GAAD;EACE,cAAc;EACd,eAAY;EACZ,MAAM,kBAAC,GAAD,EAAK,WAAU,uBAAwB,CAAA;EAC7C,OAAO,EAAG,0CAA0C,gBAAgB;YAEpE,kBAAC,OAAD;GAAK,WAAU;aACZ,EAAQ,KAAK,MACZ,kBAAC,GAAD;IAEE,MAAK;IACL,SAAS,EAAO,UAAU,YAAY;IACtC,eAAe,EAAW,EAAO,KAAK;IACtC,WAAU;IACV,eAAa,yBAAyB,EAAO;cAN/C,CAQG,EAAO,MACP,EAAO,MACD;MATF,EAAO,GASL,CACT;GACE,CAAA;EACE,CAAA;EAEZ"}
1
+ {"version":3,"file":"OverviewQuickActions.js","names":[],"sources":["../../../../src/bigconsole/components/overview/OverviewQuickActions.tsx"],"sourcesContent":["/**\n * OverviewQuickActions\n *\n * Navigation shortcuts to the most common \"create\" flows. Actions the caller\n * is not permitted to perform are hidden, not disabled; the card is omitted by\n * the page when none remain.\n */\n\nimport { type FC, type ReactNode, memo } from 'react';\nimport { Button } from '@burdenoff/fe-libs/ui';\nimport { Zap } from 'lucide-react';\nimport { useTr } from '../../../shared/hooks/useTr';\nimport { Section } from '../common';\n\nexport interface OverviewQuickAction {\n id: string;\n label: string;\n icon: ReactNode;\n path: string;\n primary?: boolean;\n}\n\nexport interface OverviewQuickActionsProps {\n actions: OverviewQuickAction[];\n onNavigate: (path: string) => void;\n}\n\nexport const OverviewQuickActions: FC<OverviewQuickActionsProps> = memo(function OverviewQuickActions({\n actions,\n onNavigate,\n}) {\n const tr = useTr();\n\n return (\n <Section\n headingLevel={2}\n data-testid=\"overview-quick-actions\"\n icon={<Zap className=\"h-icon-sm w-icon-sm\" />}\n title={tr('bigconsole.overview.quickActions.title', 'Quick actions')}\n >\n <div className=\"flex flex-wrap gap-3\">\n {actions.map((action) => (\n <Button\n key={action.id}\n type=\"button\"\n variant={action.primary ? 'default' : 'outline'}\n onClick={() => onNavigate(action.path)}\n className=\"min-h-11 w-full justify-start sm:w-auto sm:min-h-10\"\n data-testid={`overview-quick-action-${action.id}`}\n >\n {action.icon}\n {action.label}\n </Button>\n ))}\n </div>\n </Section>\n );\n});\n\nexport default OverviewQuickActions;\n"],"mappings":";;;;;;;;AA2BA,IAAa,IAAsD,EAAK,SAA8B,EACpG,YACA,iBACC;CACD,IAAM,IAAK,GAAO;AAElB,QACE,kBAAC,GAAD;EACE,cAAc;EACd,eAAY;EACZ,MAAM,kBAAC,GAAD,EAAK,WAAU,uBAAwB,CAAA;EAC7C,OAAO,EAAG,0CAA0C,gBAAgB;YAEpE,kBAAC,OAAD;GAAK,WAAU;aACZ,EAAQ,KAAK,MACZ,kBAAC,GAAD;IAEE,MAAK;IACL,SAAS,EAAO,UAAU,YAAY;IACtC,eAAe,EAAW,EAAO,KAAK;IACtC,WAAU;IACV,eAAa,yBAAyB,EAAO;cAN/C,CAQG,EAAO,MACP,EAAO,MACD;MATF,EAAO,GASL,CACT;GACE,CAAA;EACE,CAAA;EAEZ"}
@@ -7,6 +7,8 @@ export interface OverviewStatCardProps {
7
7
  value: number | undefined;
8
8
  /** The section is still loading — an undefined value renders a skeleton. */
9
9
  loading?: boolean;
10
+ /** A conservative lower-bound marker when the backend count is capped. */
11
+ valueSuffix?: string;
10
12
  subtitle?: string;
11
13
  icon: ReactNode;
12
14
  variant?: OverviewStatVariant;
@@ -1 +1 @@
1
- {"version":3,"file":"OverviewStatCard.d.ts","sourceRoot":"","sources":["../../../../src/bigconsole/components/overview/OverviewStatCard.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,SAAS,EAAQ,MAAM,OAAO,CAAC;AAItD,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;AAEpE,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,+EAA+E;IAC/E,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,4EAA4E;IAC5E,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAUD,eAAO,MAAM,gBAAgB,EAAE,EAAE,CAAC,qBAAqB,CAoDrD,CAAC;AAEH,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"OverviewStatCard.d.ts","sourceRoot":"","sources":["../../../../src/bigconsole/components/overview/OverviewStatCard.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,SAAS,EAAQ,MAAM,OAAO,CAAC;AAItD,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;AAEpE,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,+EAA+E;IAC/E,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,4EAA4E;IAC5E,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,0EAA0E;IAC1E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAUD,eAAO,MAAM,gBAAgB,EAAE,EAAE,CAAC,qBAAqB,CAsDrD,CAAC;AAEH,eAAe,gBAAgB,CAAC"}
@@ -7,8 +7,8 @@ var o = {
7
7
  default: "bg-[var(--color-accent-soft)] text-text-primary",
8
8
  success: "bg-status-success-bg-subtle text-status-success-text",
9
9
  warning: "bg-status-warning-bg-subtle text-[var(--color-status-warning-text)]"
10
- }, s = e(function({ title: e, value: s, loading: c = !1, subtitle: l, icon: u, variant: d = "default", onClick: f, "data-testid": p }) {
11
- let m = /* @__PURE__ */ i("div", {
10
+ }, s = e(function({ title: e, value: s, loading: c = !1, valueSuffix: l, subtitle: u, icon: d, variant: f = "default", onClick: p, "data-testid": m }) {
11
+ let h = /* @__PURE__ */ i("div", {
12
12
  className: "flex flex-col gap-2.5",
13
13
  children: [
14
14
  /* @__PURE__ */ i("div", {
@@ -18,36 +18,36 @@ var o = {
18
18
  children: e
19
19
  }), /* @__PURE__ */ r("span", {
20
20
  "aria-hidden": "true",
21
- className: `flex size-9 shrink-0 items-center justify-center rounded-lg [&>svg]:size-4 ${o[d]}`,
22
- children: u
21
+ className: `flex size-9 shrink-0 items-center justify-center rounded-lg [&>svg]:size-4 ${o[f]}`,
22
+ children: d
23
23
  })]
24
24
  }),
25
25
  s === void 0 ? c ? /* @__PURE__ */ r(n, { className: "h-8 w-16" }) : /* @__PURE__ */ r("div", {
26
26
  "aria-hidden": "true",
27
27
  className: "text-2xl font-semibold text-text-muted",
28
28
  children: "—"
29
- }) : /* @__PURE__ */ r("div", {
29
+ }) : /* @__PURE__ */ i("div", {
30
30
  className: "text-2xl font-semibold tabular-nums text-text-primary",
31
- children: /* @__PURE__ */ r(a, { value: s })
31
+ children: [/* @__PURE__ */ r(a, { value: s }), l]
32
32
  }),
33
- l ? /* @__PURE__ */ r("p", {
33
+ u ? /* @__PURE__ */ r("p", {
34
34
  className: "text-xs text-text-secondary",
35
- children: l
35
+ children: u
36
36
  }) : null
37
37
  ]
38
38
  });
39
39
  return /* @__PURE__ */ r(t, {
40
40
  treatment: "metric",
41
41
  className: "h-full border-[var(--color-border-seam)] p-0",
42
- "data-testid": p,
43
- children: f ? /* @__PURE__ */ r("button", {
42
+ "data-testid": m,
43
+ children: p ? /* @__PURE__ */ r("button", {
44
44
  type: "button",
45
- onClick: f,
45
+ onClick: p,
46
46
  className: "block h-full w-full rounded-card p-5 text-left focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus",
47
- children: m
47
+ children: h
48
48
  }) : /* @__PURE__ */ r("div", {
49
49
  className: "p-5",
50
- children: m
50
+ children: h
51
51
  })
52
52
  });
53
53
  });
@@ -1 +1 @@
1
- {"version":3,"file":"OverviewStatCard.js","names":[],"sources":["../../../../src/bigconsole/components/overview/OverviewStatCard.tsx"],"sourcesContent":["/**\n * OverviewStatCard\n *\n * KPI tile for the Overview: a label, a large number and an optional subtitle,\n * on the GlassCard \"metric\" surface. When `onClick` is set the whole tile is a\n * real `<button>` so it is keyboard- and screen-reader-navigable.\n */\n\nimport { type FC, type ReactNode, memo } from 'react';\nimport { GlassCard, Skeleton } from '@burdenoff/fe-libs/ui';\nimport { AnimatedCounter } from '@burdenoff/fe-libs/shared/motion';\n\nexport type OverviewStatVariant = 'default' | 'success' | 'warning';\n\nexport interface OverviewStatCardProps {\n title: string;\n /** The count; `undefined` while loading or when the section failed to load. */\n value: number | undefined;\n /** The section is still loading — an undefined value renders a skeleton. */\n loading?: boolean;\n subtitle?: string;\n icon: ReactNode;\n variant?: OverviewStatVariant;\n onClick?: () => void;\n 'data-testid'?: string;\n}\n\n// Icon chip tint per variant. Warning text has no registered utility in the\n// shell theme, so it uses the token variable directly.\nconst ICON_CHIP_CLASSES: Record<OverviewStatVariant, string> = {\n default: 'bg-[var(--color-accent-soft)] text-text-primary',\n success: 'bg-status-success-bg-subtle text-status-success-text',\n warning: 'bg-status-warning-bg-subtle text-[var(--color-status-warning-text)]',\n};\n\nexport const OverviewStatCard: FC<OverviewStatCardProps> = memo(function OverviewStatCard({\n title,\n value,\n loading = false,\n subtitle,\n icon,\n variant = 'default',\n onClick,\n 'data-testid': testId,\n}) {\n const body = (\n <div className=\"flex flex-col gap-2.5\">\n <div className=\"flex items-center justify-between gap-3\">\n <p className=\"text-sm font-medium text-text-secondary\">{title}</p>\n <span\n aria-hidden=\"true\"\n className={`flex size-9 shrink-0 items-center justify-center rounded-lg [&>svg]:size-4 ${ICON_CHIP_CLASSES[variant]}`}\n >\n {icon}\n </span>\n </div>\n {value !== undefined ? (\n <div className=\"text-2xl font-semibold tabular-nums text-text-primary\">\n <AnimatedCounter value={value} />\n </div>\n ) : loading ? (\n <Skeleton className=\"h-8 w-16\" />\n ) : (\n // Failed to load: a neutral placeholder; the subtitle says why.\n <div aria-hidden=\"true\" className=\"text-2xl font-semibold text-text-muted\">\n —\n </div>\n )}\n {subtitle ? <p className=\"text-xs text-text-secondary\">{subtitle}</p> : null}\n </div>\n );\n\n return (\n <GlassCard treatment=\"metric\" className=\"h-full border-[var(--color-border-seam)] p-0\" data-testid={testId}>\n {onClick ? (\n <button\n type=\"button\"\n onClick={onClick}\n className=\"block h-full w-full rounded-card p-5 text-left focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus\"\n >\n {body}\n </button>\n ) : (\n <div className=\"p-5\">{body}</div>\n )}\n </GlassCard>\n );\n});\n\nexport default OverviewStatCard;\n"],"mappings":";;;;;AA6BA,IAAM,IAAyD;CAC7D,SAAS;CACT,SAAS;CACT,SAAS;CACV,EAEY,IAA8C,EAAK,SAA0B,EACxF,UACA,UACA,aAAU,IACV,aACA,SACA,aAAU,WACV,YACA,eAAe,KACd;CACD,IAAM,IACJ,kBAAC,OAAD;EAAK,WAAU;YAAf;GACE,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,KAAD;KAAG,WAAU;eAA2C;KAAU,CAAA,EAClE,kBAAC,QAAD;KACE,eAAY;KACZ,WAAW,8EAA8E,EAAkB;eAE1G;KACI,CAAA,CACH;;GACL,MAAU,KAAA,IAIP,IACF,kBAAC,GAAD,EAAU,WAAU,YAAa,CAAA,GAGjC,kBAAC,OAAD;IAAK,eAAY;IAAO,WAAU;cAAyC;IAErE,CAAA,GATN,kBAAC,OAAD;IAAK,WAAU;cACb,kBAAC,GAAD,EAAwB,UAAS,CAAA;IAC7B,CAAA;GASP,IAAW,kBAAC,KAAD;IAAG,WAAU;cAA+B;IAAa,CAAA,GAAG;GACpE;;AAGR,QACE,kBAAC,GAAD;EAAW,WAAU;EAAS,WAAU;EAA+C,eAAa;YACjG,IACC,kBAAC,UAAD;GACE,MAAK;GACI;GACT,WAAU;aAET;GACM,CAAA,GAET,kBAAC,OAAD;GAAK,WAAU;aAAO;GAAW,CAAA;EAEzB,CAAA;EAEd"}
1
+ {"version":3,"file":"OverviewStatCard.js","names":[],"sources":["../../../../src/bigconsole/components/overview/OverviewStatCard.tsx"],"sourcesContent":["/**\n * OverviewStatCard\n *\n * KPI tile for the Overview: a label, a large number and an optional subtitle,\n * on the GlassCard \"metric\" surface. When `onClick` is set the whole tile is a\n * real `<button>` so it is keyboard- and screen-reader-navigable.\n */\n\nimport { type FC, type ReactNode, memo } from 'react';\nimport { GlassCard, Skeleton } from '@burdenoff/fe-libs/ui';\nimport { AnimatedCounter } from '@burdenoff/fe-libs/shared/motion';\n\nexport type OverviewStatVariant = 'default' | 'success' | 'warning';\n\nexport interface OverviewStatCardProps {\n title: string;\n /** The count; `undefined` while loading or when the section failed to load. */\n value: number | undefined;\n /** The section is still loading — an undefined value renders a skeleton. */\n loading?: boolean;\n /** A conservative lower-bound marker when the backend count is capped. */\n valueSuffix?: string;\n subtitle?: string;\n icon: ReactNode;\n variant?: OverviewStatVariant;\n onClick?: () => void;\n 'data-testid'?: string;\n}\n\n// Icon chip tint per variant. Warning text has no registered utility in the\n// shell theme, so it uses the token variable directly.\nconst ICON_CHIP_CLASSES: Record<OverviewStatVariant, string> = {\n default: 'bg-[var(--color-accent-soft)] text-text-primary',\n success: 'bg-status-success-bg-subtle text-status-success-text',\n warning: 'bg-status-warning-bg-subtle text-[var(--color-status-warning-text)]',\n};\n\nexport const OverviewStatCard: FC<OverviewStatCardProps> = memo(function OverviewStatCard({\n title,\n value,\n loading = false,\n valueSuffix,\n subtitle,\n icon,\n variant = 'default',\n onClick,\n 'data-testid': testId,\n}) {\n const body = (\n <div className=\"flex flex-col gap-2.5\">\n <div className=\"flex items-center justify-between gap-3\">\n <p className=\"text-sm font-medium text-text-secondary\">{title}</p>\n <span\n aria-hidden=\"true\"\n className={`flex size-9 shrink-0 items-center justify-center rounded-lg [&>svg]:size-4 ${ICON_CHIP_CLASSES[variant]}`}\n >\n {icon}\n </span>\n </div>\n {value !== undefined ? (\n <div className=\"text-2xl font-semibold tabular-nums text-text-primary\">\n <AnimatedCounter value={value} />\n {valueSuffix}\n </div>\n ) : loading ? (\n <Skeleton className=\"h-8 w-16\" />\n ) : (\n // Failed to load: a neutral placeholder; the subtitle says why.\n <div aria-hidden=\"true\" className=\"text-2xl font-semibold text-text-muted\">\n —\n </div>\n )}\n {subtitle ? <p className=\"text-xs text-text-secondary\">{subtitle}</p> : null}\n </div>\n );\n\n return (\n <GlassCard treatment=\"metric\" className=\"h-full border-[var(--color-border-seam)] p-0\" data-testid={testId}>\n {onClick ? (\n <button\n type=\"button\"\n onClick={onClick}\n className=\"block h-full w-full rounded-card p-5 text-left focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus\"\n >\n {body}\n </button>\n ) : (\n <div className=\"p-5\">{body}</div>\n )}\n </GlassCard>\n );\n});\n\nexport default OverviewStatCard;\n"],"mappings":";;;;;AA+BA,IAAM,IAAyD;CAC7D,SAAS;CACT,SAAS;CACT,SAAS;CACV,EAEY,IAA8C,EAAK,SAA0B,EACxF,UACA,UACA,aAAU,IACV,gBACA,aACA,SACA,aAAU,WACV,YACA,eAAe,KACd;CACD,IAAM,IACJ,kBAAC,OAAD;EAAK,WAAU;YAAf;GACE,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,KAAD;KAAG,WAAU;eAA2C;KAAU,CAAA,EAClE,kBAAC,QAAD;KACE,eAAY;KACZ,WAAW,8EAA8E,EAAkB;eAE1G;KACI,CAAA,CACH;;GACL,MAAU,KAAA,IAKP,IACF,kBAAC,GAAD,EAAU,WAAU,YAAa,CAAA,GAGjC,kBAAC,OAAD;IAAK,eAAY;IAAO,WAAU;cAAyC;IAErE,CAAA,GAVN,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,GAAD,EAAwB,UAAS,CAAA,EAChC,EACG;;GASP,IAAW,kBAAC,KAAD;IAAG,WAAU;cAA+B;IAAa,CAAA,GAAG;GACpE;;AAGR,QACE,kBAAC,GAAD;EAAW,WAAU;EAAS,WAAU;EAA+C,eAAa;YACjG,IACC,kBAAC,UAAD;GACE,MAAK;GACI;GACT,WAAU;aAET;GACM,CAAA,GAET,kBAAC,OAAD;GAAK,WAAU;aAAO;GAAW,CAAA;EAEzB,CAAA;EAEd"}
@@ -12,7 +12,6 @@ var m = i(function({ dashboards: i, loading: m, error: h, canCreate: g, onRetry:
12
12
  return h && i.length === 0 ? /* @__PURE__ */ f(e, {
13
13
  headingLevel: 2,
14
14
  tone: "danger",
15
- className: "h-full",
16
15
  "data-testid": "overview-recent-dashboards-error",
17
16
  title: x("bigconsole.overview.recentDashboards.errorTitle", "Couldn’t load your dashboards"),
18
17
  description: h.message,
@@ -23,7 +22,7 @@ var m = i(function({ dashboards: i, loading: m, error: h, canCreate: g, onRetry:
23
22
  })
24
23
  }) : /* @__PURE__ */ p(c, {
25
24
  "data-testid": "overview-recent-dashboards",
26
- className: "flex h-full flex-col border-[color-mix(in_oklab,var(--color-action-primary-bg)_34%,transparent)] bg-bg-surface bg-[image:var(--gradient-accent-wash)] shadow-[var(--shadow-glow)]",
25
+ className: "flex flex-col border-[color-mix(in_oklab,var(--color-action-primary-bg)_34%,transparent)] bg-bg-surface bg-[image:var(--gradient-accent-wash)] shadow-[var(--shadow-glow)]",
27
26
  children: [/* @__PURE__ */ p("div", {
28
27
  className: "mb-5 flex items-center justify-between gap-3",
29
28
  children: [/* @__PURE__ */ p("h2", {
@@ -54,26 +53,26 @@ var m = i(function({ dashboards: i, loading: m, error: h, canCreate: g, onRetry:
54
53
  className: "flex-1 py-6",
55
54
  illustration: "empty-data",
56
55
  title: x("bigconsole.overview.recentDashboards.emptyTitle", "No dashboards yet"),
57
- description: x("bigconsole.overview.recentDashboards.emptyDescription", "Follow the guide above to build your first dashboard."),
56
+ description: x("bigconsole.overview.recentDashboards.emptyDescription", "Follow the guide below to build your first dashboard."),
58
57
  action: g ? /* @__PURE__ */ f(s, {
59
58
  onClick: () => v(b),
60
59
  children: x("bigconsole.overview.actions.createDashboard", "Create Dashboard")
61
60
  }) : void 0
62
61
  }) : /* @__PURE__ */ f("ul", {
63
- className: "flex flex-col gap-2",
62
+ className: "grid grid-cols-1 gap-4 lg:grid-cols-2",
64
63
  children: i.map((e) => {
65
64
  let t = y(e.updatedAt);
66
65
  return /* @__PURE__ */ f("li", { children: /* @__PURE__ */ p("button", {
67
66
  type: "button",
68
67
  onClick: () => v(`/dashboards/${encodeURIComponent(e.id)}`),
69
- className: "flex min-h-14 w-full items-center gap-3 rounded-card border border-border-subtle bg-bg-surface px-3 py-2.5 text-left transition-colors duration-200 hover:bg-bg-sunken focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus motion-reduce:transition-none",
68
+ className: "flex min-h-28 w-full items-center gap-3 rounded-card border border-border-subtle bg-bg-surface px-5 py-4 text-left transition-colors duration-200 hover:bg-bg-sunken focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus motion-reduce:transition-none",
70
69
  children: [/* @__PURE__ */ p("div", {
71
70
  className: "min-w-0 flex-1",
72
71
  children: [
73
72
  /* @__PURE__ */ p("div", {
74
73
  className: "flex flex-wrap items-center gap-2",
75
74
  children: [/* @__PURE__ */ f("span", {
76
- className: "truncate text-sm font-medium text-text-primary",
75
+ className: "truncate text-base font-semibold text-text-primary",
77
76
  children: e.name
78
77
  }), /* @__PURE__ */ f(n, {
79
78
  status: e.status,
@@ -81,7 +80,7 @@ var m = i(function({ dashboards: i, loading: m, error: h, canCreate: g, onRetry:
81
80
  })]
82
81
  }),
83
82
  e.description ? /* @__PURE__ */ f("p", {
84
- className: "mt-0.5 line-clamp-1 text-xs text-text-muted",
83
+ className: "mt-0.5 line-clamp-2 text-xs text-text-muted",
85
84
  children: e.description
86
85
  }) : null,
87
86
  /* @__PURE__ */ p("p", {
@@ -1 +1 @@
1
- {"version":3,"file":"RecentDashboardsPanel.js","names":[],"sources":["../../../../src/bigconsole/components/overview/RecentDashboardsPanel.tsx"],"sourcesContent":["/**\n * RecentDashboardsPanel\n *\n * The Overview's single emphasis zone: the most recently updated dashboards,\n * each one click away, with their lifecycle status and widget count.\n */\n\nimport { type FC, memo } from 'react';\nimport { Button, EmphasisPanel, IllustratedEmptyState, Skeleton } from '@burdenoff/fe-libs/ui';\nimport { ArrowRight, LayoutDashboard } from 'lucide-react';\nimport { useTr } from '../../../shared/hooks/useTr';\nimport { Section } from '../common';\nimport { DashboardStatusPill, useDashboardStatusLabel } from '../dashboard/DashboardStatusPill';\nimport type { RecentDashboard } from './overviewModel';\n\nexport interface RecentDashboardsPanelProps {\n dashboards: RecentDashboard[];\n /** First load in progress (no data yet). */\n loading: boolean;\n error: { message: string } | undefined;\n canCreate: boolean;\n onRetry: () => void;\n onNavigate: (path: string) => void;\n formatUpdated: (iso: string) => string | null;\n createDashboardPath: string;\n}\n\nexport const RecentDashboardsPanel: FC<RecentDashboardsPanelProps> = memo(function RecentDashboardsPanel({\n dashboards,\n loading,\n error,\n canCreate,\n onRetry,\n onNavigate,\n formatUpdated,\n createDashboardPath,\n}) {\n const tr = useTr();\n const statusLabel = useDashboardStatusLabel();\n\n if (error && dashboards.length === 0) {\n return (\n <Section\n headingLevel={2}\n tone=\"danger\"\n className=\"h-full\"\n data-testid=\"overview-recent-dashboards-error\"\n title={tr('bigconsole.overview.recentDashboards.errorTitle', 'Couldn’t load your dashboards')}\n description={error.message}\n actions={\n <Button size=\"sm\" onClick={onRetry}>\n {tr('bigconsole.overview.retry', 'Retry')}\n </Button>\n }\n />\n );\n }\n\n return (\n <EmphasisPanel\n data-testid=\"overview-recent-dashboards\"\n // EmphasisPanel's own `bg-accent-wash` / `border-border-seam` utilities are\n // not registered in the shell theme, so the surface, wash and border are\n // set explicitly from the same tokens.\n className=\"flex h-full flex-col border-[color-mix(in_oklab,var(--color-action-primary-bg)_34%,transparent)] bg-bg-surface bg-[image:var(--gradient-accent-wash)] shadow-[var(--shadow-glow)]\"\n >\n <div className=\"mb-5 flex items-center justify-between gap-3\">\n <h2 className=\"flex items-center gap-2.5 text-lg font-semibold tracking-tight text-text-primary\">\n <span\n aria-hidden=\"true\"\n className=\"inline-flex size-8 items-center justify-center rounded-lg bg-[var(--color-accent-soft)] text-text-primary\"\n >\n <LayoutDashboard className=\"size-5\" />\n </span>\n {tr('bigconsole.overview.recentDashboards.title', 'Recent dashboards')}\n </h2>\n <Button variant=\"link\" size=\"sm\" onClick={() => onNavigate('/dashboards')}>\n {tr('bigconsole.overview.viewAll', 'View all')}\n {/* Context for screen readers, appended so the accessible name still\n starts with the visible label in every locale (WCAG 2.5.3). */}\n <span className=\"sr-only\"> {tr('bigconsole.overview.recentDashboards.viewAllContext', 'dashboards')}</span>\n </Button>\n </div>\n\n {loading && dashboards.length === 0 ? (\n <div className=\"space-y-2\" aria-hidden=\"true\">\n <Skeleton className=\"h-14 w-full\" />\n <Skeleton className=\"h-14 w-full\" />\n <Skeleton className=\"h-14 w-full\" />\n </div>\n ) : dashboards.length === 0 ? (\n <IllustratedEmptyState\n className=\"flex-1 py-6\"\n illustration=\"empty-data\"\n title={tr('bigconsole.overview.recentDashboards.emptyTitle', 'No dashboards yet')}\n description={tr(\n 'bigconsole.overview.recentDashboards.emptyDescription',\n 'Follow the guide above to build your first dashboard.'\n )}\n action={\n canCreate ? (\n <Button onClick={() => onNavigate(createDashboardPath)}>\n {tr('bigconsole.overview.actions.createDashboard', 'Create Dashboard')}\n </Button>\n ) : undefined\n }\n />\n ) : (\n <ul className=\"flex flex-col gap-2\">\n {dashboards.map((dashboard) => {\n const updated = formatUpdated(dashboard.updatedAt);\n return (\n <li key={dashboard.id}>\n <button\n type=\"button\"\n onClick={() => onNavigate(`/dashboards/${encodeURIComponent(dashboard.id)}`)}\n className=\"flex min-h-14 w-full items-center gap-3 rounded-card border border-border-subtle bg-bg-surface px-3 py-2.5 text-left transition-colors duration-200 hover:bg-bg-sunken focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus motion-reduce:transition-none\"\n >\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex flex-wrap items-center gap-2\">\n <span className=\"truncate text-sm font-medium text-text-primary\">{dashboard.name}</span>\n <DashboardStatusPill status={dashboard.status} label={statusLabel(dashboard.status)} />\n </div>\n {dashboard.description ? (\n <p className=\"mt-0.5 line-clamp-1 text-xs text-text-muted\">{dashboard.description}</p>\n ) : null}\n <p className=\"mt-0.5 text-xs text-text-secondary\">\n {dashboard.widgetCount === 1\n ? tr('bigconsole.overview.recentDashboards.widgetsOne', '1 widget')\n : tr('bigconsole.overview.recentDashboards.widgetsOther', '{{count}} widgets', {\n count: dashboard.widgetCount,\n })}\n {updated ? (\n <>\n <span aria-hidden=\"true\"> · </span>\n {tr('bigconsole.overview.recentDashboards.updated', 'Updated {{time}}', { time: updated })}\n </>\n ) : null}\n </p>\n </div>\n <ArrowRight className=\"size-4 shrink-0 text-text-muted\" aria-hidden=\"true\" />\n </button>\n </li>\n );\n })}\n </ul>\n )}\n </EmphasisPanel>\n );\n});\n\nexport default RecentDashboardsPanel;\n"],"mappings":";;;;;;;;;AA2BA,IAAa,IAAwD,EAAK,SAA+B,EACvG,eACA,YACA,UACA,cACA,YACA,eACA,kBACA,0BACC;CACD,IAAM,IAAK,GAAO,EACZ,IAAc,GAAyB;AAoB7C,QAlBI,KAAS,EAAW,WAAW,IAE/B,kBAAC,GAAD;EACE,cAAc;EACd,MAAK;EACL,WAAU;EACV,eAAY;EACZ,OAAO,EAAG,mDAAmD,gCAAgC;EAC7F,aAAa,EAAM;EACnB,SACE,kBAAC,GAAD;GAAQ,MAAK;GAAK,SAAS;aACxB,EAAG,6BAA6B,QAAQ;GAClC,CAAA;EAEX,CAAA,GAKJ,kBAAC,GAAD;EACE,eAAY;EAIZ,WAAU;YALZ,CAOE,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,MAAD;IAAI,WAAU;cAAd,CACE,kBAAC,QAAD;KACE,eAAY;KACZ,WAAU;eAEV,kBAAC,GAAD,EAAiB,WAAU,UAAW,CAAA;KACjC,CAAA,EACN,EAAG,8CAA8C,oBAAoB,CACnE;OACL,kBAAC,GAAD;IAAQ,SAAQ;IAAO,MAAK;IAAK,eAAe,EAAW,cAAc;cAAzE,CACG,EAAG,+BAA+B,WAAW,EAG9C,kBAAC,QAAD;KAAM,WAAU;eAAhB,CAA0B,KAAE,EAAG,uDAAuD,aAAa,CAAQ;OACpG;MACL;MAEL,KAAW,EAAW,WAAW,IAChC,kBAAC,OAAD;GAAK,WAAU;GAAY,eAAY;aAAvC;IACE,kBAAC,GAAD,EAAU,WAAU,eAAgB,CAAA;IACpC,kBAAC,GAAD,EAAU,WAAU,eAAgB,CAAA;IACpC,kBAAC,GAAD,EAAU,WAAU,eAAgB,CAAA;IAChC;OACJ,EAAW,WAAW,IACxB,kBAAC,GAAD;GACE,WAAU;GACV,cAAa;GACb,OAAO,EAAG,mDAAmD,oBAAoB;GACjF,aAAa,EACX,yDACA,wDACD;GACD,QACE,IACE,kBAAC,GAAD;IAAQ,eAAe,EAAW,EAAoB;cACnD,EAAG,+CAA+C,mBAAmB;IAC/D,CAAA,GACP,KAAA;GAEN,CAAA,GAEF,kBAAC,MAAD;GAAI,WAAU;aACX,EAAW,KAAK,MAAc;IAC7B,IAAM,IAAU,EAAc,EAAU,UAAU;AAClD,WACE,kBAAC,MAAD,EAAA,UACE,kBAAC,UAAD;KACE,MAAK;KACL,eAAe,EAAW,eAAe,mBAAmB,EAAU,GAAG,GAAG;KAC5E,WAAU;eAHZ,CAKE,kBAAC,OAAD;MAAK,WAAU;gBAAf;OACE,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,QAAD;SAAM,WAAU;mBAAkD,EAAU;SAAY,CAAA,EACxF,kBAAC,GAAD;SAAqB,QAAQ,EAAU;SAAQ,OAAO,EAAY,EAAU,OAAO;SAAI,CAAA,CACnF;;OACL,EAAU,cACT,kBAAC,KAAD;QAAG,WAAU;kBAA+C,EAAU;QAAgB,CAAA,GACpF;OACJ,kBAAC,KAAD;QAAG,WAAU;kBAAb,CACG,EAAU,gBAAgB,IACvB,EAAG,mDAAmD,WAAW,GACjE,EAAG,qDAAqD,qBAAqB,EAC3E,OAAO,EAAU,aAClB,CAAC,EACL,IACC,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,QAAD;SAAM,eAAY;mBAAO;SAAU,CAAA,EAClC,EAAG,gDAAgD,oBAAoB,EAAE,MAAM,GAAS,CAAC,CACzF,EAAA,CAAA,GACD,KACF;;OACA;SACN,kBAAC,GAAD;MAAY,WAAU;MAAkC,eAAY;MAAS,CAAA,CACtE;QACN,EA9BI,EAAU,GA8Bd;KAEP;GACC,CAAA,CAEO;;EAElB"}
1
+ {"version":3,"file":"RecentDashboardsPanel.js","names":[],"sources":["../../../../src/bigconsole/components/overview/RecentDashboardsPanel.tsx"],"sourcesContent":["/**\n * RecentDashboardsPanel\n *\n * The Overview's single emphasis zone: the most recently updated dashboards,\n * each one click away, with their lifecycle status and widget count.\n */\n\nimport { type FC, memo } from 'react';\nimport { Button, EmphasisPanel, IllustratedEmptyState, Skeleton } from '@burdenoff/fe-libs/ui';\nimport { ArrowRight, LayoutDashboard } from 'lucide-react';\nimport { useTr } from '../../../shared/hooks/useTr';\nimport { Section } from '../common';\nimport { DashboardStatusPill, useDashboardStatusLabel } from '../dashboard/DashboardStatusPill';\nimport type { RecentDashboard } from './overviewModel';\n\nexport interface RecentDashboardsPanelProps {\n dashboards: RecentDashboard[];\n /** First load in progress (no data yet). */\n loading: boolean;\n error: { message: string } | undefined;\n canCreate: boolean;\n onRetry: () => void;\n onNavigate: (path: string) => void;\n formatUpdated: (iso: string) => string | null;\n createDashboardPath: string;\n}\n\nexport const RecentDashboardsPanel: FC<RecentDashboardsPanelProps> = memo(function RecentDashboardsPanel({\n dashboards,\n loading,\n error,\n canCreate,\n onRetry,\n onNavigate,\n formatUpdated,\n createDashboardPath,\n}) {\n const tr = useTr();\n const statusLabel = useDashboardStatusLabel();\n\n if (error && dashboards.length === 0) {\n return (\n <Section\n headingLevel={2}\n tone=\"danger\"\n\n data-testid=\"overview-recent-dashboards-error\"\n title={tr('bigconsole.overview.recentDashboards.errorTitle', 'Couldn’t load your dashboards')}\n description={error.message}\n actions={\n <Button size=\"sm\" onClick={onRetry}>\n {tr('bigconsole.overview.retry', 'Retry')}\n </Button>\n }\n />\n );\n }\n\n return (\n <EmphasisPanel\n data-testid=\"overview-recent-dashboards\"\n // EmphasisPanel's own `bg-accent-wash` / `border-border-seam` utilities are\n // not registered in the shell theme, so the surface, wash and border are\n // set explicitly from the same tokens.\n className=\"flex flex-col border-[color-mix(in_oklab,var(--color-action-primary-bg)_34%,transparent)] bg-bg-surface bg-[image:var(--gradient-accent-wash)] shadow-[var(--shadow-glow)]\"\n >\n <div className=\"mb-5 flex items-center justify-between gap-3\">\n <h2 className=\"flex items-center gap-2.5 text-lg font-semibold tracking-tight text-text-primary\">\n <span\n aria-hidden=\"true\"\n className=\"inline-flex size-8 items-center justify-center rounded-lg bg-[var(--color-accent-soft)] text-text-primary\"\n >\n <LayoutDashboard className=\"size-5\" />\n </span>\n {tr('bigconsole.overview.recentDashboards.title', 'Recent dashboards')}\n </h2>\n <Button variant=\"link\" size=\"sm\" onClick={() => onNavigate('/dashboards')}>\n {tr('bigconsole.overview.viewAll', 'View all')}\n {/* Context for screen readers, appended so the accessible name still\n starts with the visible label in every locale (WCAG 2.5.3). */}\n <span className=\"sr-only\"> {tr('bigconsole.overview.recentDashboards.viewAllContext', 'dashboards')}</span>\n </Button>\n </div>\n\n {loading && dashboards.length === 0 ? (\n <div className=\"space-y-2\" aria-hidden=\"true\">\n <Skeleton className=\"h-14 w-full\" />\n <Skeleton className=\"h-14 w-full\" />\n <Skeleton className=\"h-14 w-full\" />\n </div>\n ) : dashboards.length === 0 ? (\n <IllustratedEmptyState\n className=\"flex-1 py-6\"\n illustration=\"empty-data\"\n title={tr('bigconsole.overview.recentDashboards.emptyTitle', 'No dashboards yet')}\n description={tr(\n 'bigconsole.overview.recentDashboards.emptyDescription',\n 'Follow the guide below to build your first dashboard.'\n )}\n action={\n canCreate ? (\n <Button onClick={() => onNavigate(createDashboardPath)}>\n {tr('bigconsole.overview.actions.createDashboard', 'Create Dashboard')}\n </Button>\n ) : undefined\n }\n />\n ) : (\n <ul className=\"grid grid-cols-1 gap-4 lg:grid-cols-2\">\n {dashboards.map((dashboard) => {\n const updated = formatUpdated(dashboard.updatedAt);\n return (\n <li key={dashboard.id}>\n <button\n type=\"button\"\n onClick={() => onNavigate(`/dashboards/${encodeURIComponent(dashboard.id)}`)}\n className=\"flex min-h-28 w-full items-center gap-3 rounded-card border border-border-subtle bg-bg-surface px-5 py-4 text-left transition-colors duration-200 hover:bg-bg-sunken focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus motion-reduce:transition-none\"\n >\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex flex-wrap items-center gap-2\">\n <span className=\"truncate text-base font-semibold text-text-primary\">{dashboard.name}</span>\n <DashboardStatusPill status={dashboard.status} label={statusLabel(dashboard.status)} />\n </div>\n {dashboard.description ? (\n <p className=\"mt-0.5 line-clamp-2 text-xs text-text-muted\">{dashboard.description}</p>\n ) : null}\n <p className=\"mt-0.5 text-xs text-text-secondary\">\n {dashboard.widgetCount === 1\n ? tr('bigconsole.overview.recentDashboards.widgetsOne', '1 widget')\n : tr('bigconsole.overview.recentDashboards.widgetsOther', '{{count}} widgets', {\n count: dashboard.widgetCount,\n })}\n {updated ? (\n <>\n <span aria-hidden=\"true\"> · </span>\n {tr('bigconsole.overview.recentDashboards.updated', 'Updated {{time}}', { time: updated })}\n </>\n ) : null}\n </p>\n </div>\n <ArrowRight className=\"size-4 shrink-0 text-text-muted\" aria-hidden=\"true\" />\n </button>\n </li>\n );\n })}\n </ul>\n )}\n </EmphasisPanel>\n );\n});\n\nexport default RecentDashboardsPanel;\n"],"mappings":";;;;;;;;;AA2BA,IAAa,IAAwD,EAAK,SAA+B,EACvG,eACA,YACA,UACA,cACA,YACA,eACA,kBACA,0BACC;CACD,IAAM,IAAK,GAAO,EACZ,IAAc,GAAyB;AAoB7C,QAlBI,KAAS,EAAW,WAAW,IAE/B,kBAAC,GAAD;EACE,cAAc;EACd,MAAK;EAEL,eAAY;EACZ,OAAO,EAAG,mDAAmD,gCAAgC;EAC7F,aAAa,EAAM;EACnB,SACE,kBAAC,GAAD;GAAQ,MAAK;GAAK,SAAS;aACxB,EAAG,6BAA6B,QAAQ;GAClC,CAAA;EAEX,CAAA,GAKJ,kBAAC,GAAD;EACE,eAAY;EAIZ,WAAU;YALZ,CAOE,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,MAAD;IAAI,WAAU;cAAd,CACE,kBAAC,QAAD;KACE,eAAY;KACZ,WAAU;eAEV,kBAAC,GAAD,EAAiB,WAAU,UAAW,CAAA;KACjC,CAAA,EACN,EAAG,8CAA8C,oBAAoB,CACnE;OACL,kBAAC,GAAD;IAAQ,SAAQ;IAAO,MAAK;IAAK,eAAe,EAAW,cAAc;cAAzE,CACG,EAAG,+BAA+B,WAAW,EAG9C,kBAAC,QAAD;KAAM,WAAU;eAAhB,CAA0B,KAAE,EAAG,uDAAuD,aAAa,CAAQ;OACpG;MACL;MAEL,KAAW,EAAW,WAAW,IAChC,kBAAC,OAAD;GAAK,WAAU;GAAY,eAAY;aAAvC;IACE,kBAAC,GAAD,EAAU,WAAU,eAAgB,CAAA;IACpC,kBAAC,GAAD,EAAU,WAAU,eAAgB,CAAA;IACpC,kBAAC,GAAD,EAAU,WAAU,eAAgB,CAAA;IAChC;OACJ,EAAW,WAAW,IACxB,kBAAC,GAAD;GACE,WAAU;GACV,cAAa;GACb,OAAO,EAAG,mDAAmD,oBAAoB;GACjF,aAAa,EACX,yDACA,wDACD;GACD,QACE,IACE,kBAAC,GAAD;IAAQ,eAAe,EAAW,EAAoB;cACnD,EAAG,+CAA+C,mBAAmB;IAC/D,CAAA,GACP,KAAA;GAEN,CAAA,GAEF,kBAAC,MAAD;GAAI,WAAU;aACX,EAAW,KAAK,MAAc;IAC7B,IAAM,IAAU,EAAc,EAAU,UAAU;AAClD,WACE,kBAAC,MAAD,EAAA,UACE,kBAAC,UAAD;KACE,MAAK;KACL,eAAe,EAAW,eAAe,mBAAmB,EAAU,GAAG,GAAG;KAC5E,WAAU;eAHZ,CAKE,kBAAC,OAAD;MAAK,WAAU;gBAAf;OACE,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,QAAD;SAAM,WAAU;mBAAsD,EAAU;SAAY,CAAA,EAC5F,kBAAC,GAAD;SAAqB,QAAQ,EAAU;SAAQ,OAAO,EAAY,EAAU,OAAO;SAAI,CAAA,CACnF;;OACL,EAAU,cACT,kBAAC,KAAD;QAAG,WAAU;kBAA+C,EAAU;QAAgB,CAAA,GACpF;OACJ,kBAAC,KAAD;QAAG,WAAU;kBAAb,CACG,EAAU,gBAAgB,IACvB,EAAG,mDAAmD,WAAW,GACjE,EAAG,qDAAqD,qBAAqB,EAC3E,OAAO,EAAU,aAClB,CAAC,EACL,IACC,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,QAAD;SAAM,eAAY;mBAAO;SAAU,CAAA,EAClC,EAAG,gDAAgD,oBAAoB,EAAE,MAAM,GAAS,CAAC,CACzF,EAAA,CAAA,GACD,KACF;;OACA;SACN,kBAAC,GAAD;MAAY,WAAU;MAAkC,eAAY;MAAS,CAAA,CACtE;QACN,EA9BI,EAAU,GA8Bd;KAEP;GACC,CAAA,CAEO;;EAElB"}
@@ -1,4 +1,4 @@
1
- import { BigConsoleOverviewDashboardsQuery, BigConsoleOverviewDataSinksQuery } from '../../../generated/wspace-operations';
1
+ import { BigConsoleOverviewParsersQuery, BigConsoleOverviewPipelinesQuery, BigConsoleOverviewDashboardsQuery, BigConsoleOverviewDataSinksQuery } from '../../../generated/wspace-operations';
2
2
 
3
3
  export interface OverviewSectionState<TData> {
4
4
  /** The caller holds the read permission for this section. */
@@ -15,6 +15,8 @@ export interface UseOverviewDataResult {
15
15
  permissionsLoading: boolean;
16
16
  dashboards: OverviewSectionState<BigConsoleOverviewDashboardsQuery>;
17
17
  dataSinks: OverviewSectionState<BigConsoleOverviewDataSinksQuery>;
18
+ parsers: OverviewSectionState<BigConsoleOverviewParsersQuery>;
19
+ pipelines: OverviewSectionState<BigConsoleOverviewPipelinesQuery>;
18
20
  /** Refetch every permitted section (the page's Refresh action). */
19
21
  refetchAll: () => void;
20
22
  }
@@ -1 +1 @@
1
- {"version":3,"file":"useOverviewData.d.ts","sourceRoot":"","sources":["../../../../src/bigconsole/components/overview/useOverviewData.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,EAGL,KAAK,iCAAiC,EACtC,KAAK,gCAAgC,EACtC,MAAM,sCAAsC,CAAC;AAG9C,MAAM,WAAW,oBAAoB,CAAC,KAAK;IACzC,6DAA6D;IAC7D,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,KAAK,GAAG,SAAS,CAAC;IACxB,wDAAwD;IACxD,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;IACvC,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,MAAM,WAAW,qBAAqB;IACpC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,UAAU,EAAE,oBAAoB,CAAC,iCAAiC,CAAC,CAAC;IACpE,SAAS,EAAE,oBAAoB,CAAC,gCAAgC,CAAC,CAAC;IAClE,mEAAmE;IACnE,UAAU,EAAE,MAAM,IAAI,CAAC;CACxB;AAOD,wBAAgB,eAAe,IAAI,qBAAqB,CAuDvD"}
1
+ {"version":3,"file":"useOverviewData.d.ts","sourceRoot":"","sources":["../../../../src/bigconsole/components/overview/useOverviewData.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,OAAO,EAKL,KAAK,8BAA8B,EACnC,KAAK,gCAAgC,EACrC,KAAK,iCAAiC,EACtC,KAAK,gCAAgC,EACtC,MAAM,sCAAsC,CAAC;AAG9C,MAAM,WAAW,oBAAoB,CAAC,KAAK;IACzC,6DAA6D;IAC7D,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,KAAK,GAAG,SAAS,CAAC;IACxB,wDAAwD;IACxD,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;IACvC,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,MAAM,WAAW,qBAAqB;IACpC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,UAAU,EAAE,oBAAoB,CAAC,iCAAiC,CAAC,CAAC;IACpE,SAAS,EAAE,oBAAoB,CAAC,gCAAgC,CAAC,CAAC;IAClE,OAAO,EAAE,oBAAoB,CAAC,8BAA8B,CAAC,CAAC;IAC9D,SAAS,EAAE,oBAAoB,CAAC,gCAAgC,CAAC,CAAC;IAClE,mEAAmE;IACnE,UAAU,EAAE,MAAM,IAAI,CAAC;CACxB;AAOD,wBAAgB,eAAe,IAAI,qBAAqB,CA2FvD"}
@@ -1,48 +1,79 @@
1
- import { useBigConsoleOverviewDashboardsQuery as e, useBigConsoleOverviewDataSinksQuery as t } from "../../../generated/wspace-operations.js";
2
- import { BIGCONSOLE_PERMISSIONS as n } from "../../../constants/permissions.js";
1
+ import { useBigConsoleOverviewDashboardsQuery as e, useBigConsoleOverviewDataSinksQuery as t, useBigConsoleOverviewParsersQuery as n, useBigConsoleOverviewPipelinesQuery as r } from "../../../generated/wspace-operations.js";
2
+ import { BIGCONSOLE_PERMISSIONS as i } from "../../../constants/permissions.js";
3
3
  import "./overviewModel.js";
4
- import { useCallback as r } from "react";
5
- import { usePermissions as i } from "@burdenoff/fe-libs/shared/providers/shell";
4
+ import { useCallback as a } from "react";
5
+ import { usePermissions as o } from "@burdenoff/fe-libs/shared/providers/shell";
6
6
  //#region src/bigconsole/components/overview/useOverviewData.ts
7
- function a() {}
8
- function o() {
9
- let { hasPermission: o, isLoading: s } = i(), c = !s && o(n.DASHBOARD_READ), l = !s && o(n.DATASINK_READ), u = e({
7
+ function s() {}
8
+ function c() {
9
+ let { hasPermission: c, isLoading: l } = o(), u = !l && c(i.DASHBOARD_READ), d = !l && c(i.DATASINK_READ), f = !l && c(i.PARSER_READ), p = !l && c(i.PIPELINE_READ), m = n({
10
+ skip: !f,
11
+ fetchPolicy: "cache-and-network",
12
+ notifyOnNetworkStatusChange: !0
13
+ }), h = r({
14
+ skip: !p,
15
+ fetchPolicy: "cache-and-network",
16
+ notifyOnNetworkStatusChange: !0
17
+ }), g = e({
10
18
  variables: { first: 5 },
11
- skip: !c,
19
+ skip: !u,
12
20
  fetchPolicy: "cache-and-network",
13
21
  notifyOnNetworkStatusChange: !0
14
- }), d = t({
22
+ }), _ = t({
15
23
  variables: { attentionFirst: 5 },
16
- skip: !l,
24
+ skip: !d,
17
25
  fetchPolicy: "cache-and-network",
18
26
  notifyOnNetworkStatusChange: !0
19
- }), { refetch: f } = u, { refetch: p } = d, m = r(() => {
20
- c && f().catch(a);
21
- }, [c, f]), h = r(() => {
22
- l && p().catch(a);
23
- }, [l, p]), g = r(() => {
24
- m(), h();
25
- }, [m, h]);
27
+ }), { refetch: v } = g, { refetch: y } = _, b = a(() => {
28
+ u && v().catch(s);
29
+ }, [u, v]), x = a(() => {
30
+ d && y().catch(s);
31
+ }, [d, y]), { refetch: S } = m, { refetch: C } = h, w = a(() => {
32
+ f && S().catch(s);
33
+ }, [f, S]), T = a(() => {
34
+ p && C().catch(s);
35
+ }, [p, C]), E = a(() => {
36
+ b(), x(), w(), T();
37
+ }, [
38
+ b,
39
+ x,
40
+ w,
41
+ T
42
+ ]);
26
43
  return {
27
- permissionsLoading: s,
44
+ permissionsLoading: l,
45
+ parsers: {
46
+ allowed: f,
47
+ data: f ? m.data : void 0,
48
+ loading: f && m.loading,
49
+ error: f ? m.error : void 0,
50
+ refetch: w
51
+ },
52
+ pipelines: {
53
+ allowed: p,
54
+ data: p ? h.data : void 0,
55
+ loading: p && h.loading,
56
+ error: p ? h.error : void 0,
57
+ refetch: T
58
+ },
28
59
  dashboards: {
29
- allowed: c,
30
- data: c ? u.data : void 0,
31
- loading: c && u.loading,
32
- error: c ? u.error : void 0,
33
- refetch: m
60
+ allowed: u,
61
+ data: u ? g.data : void 0,
62
+ loading: u && g.loading,
63
+ error: u ? g.error : void 0,
64
+ refetch: b
34
65
  },
35
66
  dataSinks: {
36
- allowed: l,
37
- data: l ? d.data : void 0,
38
- loading: l && d.loading,
39
- error: l ? d.error : void 0,
40
- refetch: h
67
+ allowed: d,
68
+ data: d ? _.data : void 0,
69
+ loading: d && _.loading,
70
+ error: d ? _.error : void 0,
71
+ refetch: x
41
72
  },
42
- refetchAll: g
73
+ refetchAll: E
43
74
  };
44
75
  }
45
76
  //#endregion
46
- export { o as useOverviewData };
77
+ export { c as useOverviewData };
47
78
 
48
79
  //# sourceMappingURL=useOverviewData.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useOverviewData.js","names":[],"sources":["../../../../src/bigconsole/components/overview/useOverviewData.ts"],"sourcesContent":["/**\n * useOverviewData Hook\n *\n * Loads the BigConsole Overview's two data sections — dashboards and data\n * sinks — each as its own operation gated on its own read permission.\n *\n * Why two operations: the gateway checks `@rbac` per top-level field and rejects\n * the entire operation when any check fails, so a combined query would blank\n * every section (and raise a permission toast) for a user who can read\n * dashboards but not data sinks. Queries skip until the permission set has\n * resolved; both fire in the same render and share one batched POST to the\n * workspace gateway.\n */\n\nimport { useCallback } from 'react';\nimport { usePermissions } from '@burdenoff/fe-libs/shared/providers/shell';\nimport { BIGCONSOLE_PERMISSIONS } from '../../../constants/permissions';\nimport {\n useBigConsoleOverviewDashboardsQuery,\n useBigConsoleOverviewDataSinksQuery,\n type BigConsoleOverviewDashboardsQuery,\n type BigConsoleOverviewDataSinksQuery,\n} from '../../../generated/wspace-operations';\nimport { DATA_HEALTH_ROW_LIMIT, RECENT_DASHBOARDS_LIMIT } from './overviewModel';\n\nexport interface OverviewSectionState<TData> {\n /** The caller holds the read permission for this section. */\n allowed: boolean;\n data: TData | undefined;\n /** A request (initial load or refetch) is in flight. */\n loading: boolean;\n error: { message: string } | undefined;\n refetch: () => void;\n}\n\nexport interface UseOverviewDataResult {\n permissionsLoading: boolean;\n dashboards: OverviewSectionState<BigConsoleOverviewDashboardsQuery>;\n dataSinks: OverviewSectionState<BigConsoleOverviewDataSinksQuery>;\n /** Refetch every permitted section (the page's Refresh action). */\n refetchAll: () => void;\n}\n\nfunction ignoreRefetchRejection(): void {\n // A failed refetch is surfaced through the query's `error` state; nothing\n // else to do with the rejected promise.\n}\n\nexport function useOverviewData(): UseOverviewDataResult {\n const { hasPermission, isLoading: permissionsLoading } = usePermissions();\n const canReadDashboards = !permissionsLoading && hasPermission(BIGCONSOLE_PERMISSIONS.DASHBOARD_READ);\n const canReadDataSinks = !permissionsLoading && hasPermission(BIGCONSOLE_PERMISSIONS.DATASINK_READ);\n\n const dashboardsQuery = useBigConsoleOverviewDashboardsQuery({\n variables: { first: RECENT_DASHBOARDS_LIMIT },\n skip: !canReadDashboards,\n fetchPolicy: 'cache-and-network',\n notifyOnNetworkStatusChange: true,\n });\n\n const dataSinksQuery = useBigConsoleOverviewDataSinksQuery({\n variables: { attentionFirst: DATA_HEALTH_ROW_LIMIT },\n skip: !canReadDataSinks,\n fetchPolicy: 'cache-and-network',\n notifyOnNetworkStatusChange: true,\n });\n\n const { refetch: refetchDashboardsQuery } = dashboardsQuery;\n const { refetch: refetchDataSinksQuery } = dataSinksQuery;\n\n const refetchDashboards = useCallback(() => {\n if (!canReadDashboards) return;\n refetchDashboardsQuery().catch(ignoreRefetchRejection);\n }, [canReadDashboards, refetchDashboardsQuery]);\n\n const refetchDataSinks = useCallback(() => {\n if (!canReadDataSinks) return;\n refetchDataSinksQuery().catch(ignoreRefetchRejection);\n }, [canReadDataSinks, refetchDataSinksQuery]);\n\n const refetchAll = useCallback(() => {\n refetchDashboards();\n refetchDataSinks();\n }, [refetchDashboards, refetchDataSinks]);\n\n return {\n permissionsLoading,\n dashboards: {\n allowed: canReadDashboards,\n data: canReadDashboards ? dashboardsQuery.data : undefined,\n loading: canReadDashboards && dashboardsQuery.loading,\n error: canReadDashboards ? dashboardsQuery.error : undefined,\n refetch: refetchDashboards,\n },\n dataSinks: {\n allowed: canReadDataSinks,\n data: canReadDataSinks ? dataSinksQuery.data : undefined,\n loading: canReadDataSinks && dataSinksQuery.loading,\n error: canReadDataSinks ? dataSinksQuery.error : undefined,\n refetch: refetchDataSinks,\n },\n refetchAll,\n };\n}\n"],"mappings":";;;;;;AA2CA,SAAS,IAA+B;AAKxC,SAAgB,IAAyC;CACvD,IAAM,EAAE,kBAAe,WAAW,MAAuB,GAAgB,EACnE,IAAoB,CAAC,KAAsB,EAAc,EAAuB,eAAe,EAC/F,IAAmB,CAAC,KAAsB,EAAc,EAAuB,cAAc,EAE7F,IAAkB,EAAqC;EAC3D,WAAW,EAAE,OAAA,GAAgC;EAC7C,MAAM,CAAC;EACP,aAAa;EACb,6BAA6B;EAC9B,CAAC,EAEI,IAAiB,EAAoC;EACzD,WAAW,EAAE,gBAAA,GAAuC;EACpD,MAAM,CAAC;EACP,aAAa;EACb,6BAA6B;EAC9B,CAAC,EAEI,EAAE,SAAS,MAA2B,GACtC,EAAE,SAAS,MAA0B,GAErC,IAAoB,QAAkB;AACrC,OACL,GAAwB,CAAC,MAAM,EAAuB;IACrD,CAAC,GAAmB,EAAuB,CAAC,EAEzC,IAAmB,QAAkB;AACpC,OACL,GAAuB,CAAC,MAAM,EAAuB;IACpD,CAAC,GAAkB,EAAsB,CAAC,EAEvC,IAAa,QAAkB;AAEnC,EADA,GAAmB,EACnB,GAAkB;IACjB,CAAC,GAAmB,EAAiB,CAAC;AAEzC,QAAO;EACL;EACA,YAAY;GACV,SAAS;GACT,MAAM,IAAoB,EAAgB,OAAO,KAAA;GACjD,SAAS,KAAqB,EAAgB;GAC9C,OAAO,IAAoB,EAAgB,QAAQ,KAAA;GACnD,SAAS;GACV;EACD,WAAW;GACT,SAAS;GACT,MAAM,IAAmB,EAAe,OAAO,KAAA;GAC/C,SAAS,KAAoB,EAAe;GAC5C,OAAO,IAAmB,EAAe,QAAQ,KAAA;GACjD,SAAS;GACV;EACD;EACD"}
1
+ {"version":3,"file":"useOverviewData.js","names":[],"sources":["../../../../src/bigconsole/components/overview/useOverviewData.ts"],"sourcesContent":["/**\n * useOverviewData Hook\n *\n * Loads the BigConsole Overview's resource counts and data health — each as its own operation gated on its own read permission.\n *\n * Why separate operations: the gateway checks `@rbac` per top-level field and rejects\n * the entire operation when any check fails, so a combined query would blank\n * every section (and raise a permission toast) for a user who can read\n * dashboards but not data sinks. Queries skip until the permission set has\n * resolved; both fire in the same render and share one batched POST to the\n * workspace gateway.\n */\n\nimport { useCallback } from 'react';\nimport { usePermissions } from '@burdenoff/fe-libs/shared/providers/shell';\nimport { BIGCONSOLE_PERMISSIONS } from '../../../constants/permissions';\nimport {\n useBigConsoleOverviewDashboardsQuery,\n useBigConsoleOverviewDataSinksQuery,\n useBigConsoleOverviewParsersQuery,\n useBigConsoleOverviewPipelinesQuery,\n type BigConsoleOverviewParsersQuery,\n type BigConsoleOverviewPipelinesQuery,\n type BigConsoleOverviewDashboardsQuery,\n type BigConsoleOverviewDataSinksQuery,\n} from '../../../generated/wspace-operations';\nimport { DATA_HEALTH_ROW_LIMIT, RECENT_DASHBOARDS_LIMIT } from './overviewModel';\n\nexport interface OverviewSectionState<TData> {\n /** The caller holds the read permission for this section. */\n allowed: boolean;\n data: TData | undefined;\n /** A request (initial load or refetch) is in flight. */\n loading: boolean;\n error: { message: string } | undefined;\n refetch: () => void;\n}\n\nexport interface UseOverviewDataResult {\n permissionsLoading: boolean;\n dashboards: OverviewSectionState<BigConsoleOverviewDashboardsQuery>;\n dataSinks: OverviewSectionState<BigConsoleOverviewDataSinksQuery>;\n parsers: OverviewSectionState<BigConsoleOverviewParsersQuery>;\n pipelines: OverviewSectionState<BigConsoleOverviewPipelinesQuery>;\n /** Refetch every permitted section (the page's Refresh action). */\n refetchAll: () => void;\n}\n\nfunction ignoreRefetchRejection(): void {\n // A failed refetch is surfaced through the query's `error` state; nothing\n // else to do with the rejected promise.\n}\n\nexport function useOverviewData(): UseOverviewDataResult {\n const { hasPermission, isLoading: permissionsLoading } = usePermissions();\n const canReadDashboards = !permissionsLoading && hasPermission(BIGCONSOLE_PERMISSIONS.DASHBOARD_READ);\n const canReadDataSinks = !permissionsLoading && hasPermission(BIGCONSOLE_PERMISSIONS.DATASINK_READ);\n\n const canReadParsers = !permissionsLoading && hasPermission(BIGCONSOLE_PERMISSIONS.PARSER_READ);\n const canReadPipelines = !permissionsLoading && hasPermission(BIGCONSOLE_PERMISSIONS.PIPELINE_READ);\n const parsersQuery = useBigConsoleOverviewParsersQuery({\n skip: !canReadParsers,\n fetchPolicy: 'cache-and-network',\n notifyOnNetworkStatusChange: true,\n });\n const pipelinesQuery = useBigConsoleOverviewPipelinesQuery({\n skip: !canReadPipelines,\n fetchPolicy: 'cache-and-network',\n notifyOnNetworkStatusChange: true,\n });\n const dashboardsQuery = useBigConsoleOverviewDashboardsQuery({\n variables: { first: RECENT_DASHBOARDS_LIMIT },\n skip: !canReadDashboards,\n fetchPolicy: 'cache-and-network',\n notifyOnNetworkStatusChange: true,\n });\n\n const dataSinksQuery = useBigConsoleOverviewDataSinksQuery({\n variables: { attentionFirst: DATA_HEALTH_ROW_LIMIT },\n skip: !canReadDataSinks,\n fetchPolicy: 'cache-and-network',\n notifyOnNetworkStatusChange: true,\n });\n\n const { refetch: refetchDashboardsQuery } = dashboardsQuery;\n const { refetch: refetchDataSinksQuery } = dataSinksQuery;\n\n const refetchDashboards = useCallback(() => {\n if (!canReadDashboards) return;\n refetchDashboardsQuery().catch(ignoreRefetchRejection);\n }, [canReadDashboards, refetchDashboardsQuery]);\n\n const refetchDataSinks = useCallback(() => {\n if (!canReadDataSinks) return;\n refetchDataSinksQuery().catch(ignoreRefetchRejection);\n }, [canReadDataSinks, refetchDataSinksQuery]);\n\n const { refetch: refetchParsersQuery } = parsersQuery;\n const { refetch: refetchPipelinesQuery } = pipelinesQuery;\n const refetchParsers = useCallback(() => {\n if (canReadParsers) refetchParsersQuery().catch(ignoreRefetchRejection);\n }, [canReadParsers, refetchParsersQuery]);\n const refetchPipelines = useCallback(() => {\n if (canReadPipelines) refetchPipelinesQuery().catch(ignoreRefetchRejection);\n }, [canReadPipelines, refetchPipelinesQuery]);\n const refetchAll = useCallback(() => {\n refetchDashboards();\n refetchDataSinks();\n refetchParsers();\n refetchPipelines();\n }, [refetchDashboards, refetchDataSinks, refetchParsers, refetchPipelines]);\n\n return {\n permissionsLoading,\n parsers: {\n allowed: canReadParsers,\n data: canReadParsers ? parsersQuery.data : undefined,\n loading: canReadParsers && parsersQuery.loading,\n error: canReadParsers ? parsersQuery.error : undefined,\n refetch: refetchParsers,\n },\n pipelines: {\n allowed: canReadPipelines,\n data: canReadPipelines ? pipelinesQuery.data : undefined,\n loading: canReadPipelines && pipelinesQuery.loading,\n error: canReadPipelines ? pipelinesQuery.error : undefined,\n refetch: refetchPipelines,\n },\n dashboards: {\n allowed: canReadDashboards,\n data: canReadDashboards ? dashboardsQuery.data : undefined,\n loading: canReadDashboards && dashboardsQuery.loading,\n error: canReadDashboards ? dashboardsQuery.error : undefined,\n refetch: refetchDashboards,\n },\n dataSinks: {\n allowed: canReadDataSinks,\n data: canReadDataSinks ? dataSinksQuery.data : undefined,\n loading: canReadDataSinks && dataSinksQuery.loading,\n error: canReadDataSinks ? dataSinksQuery.error : undefined,\n refetch: refetchDataSinks,\n },\n refetchAll,\n };\n}\n"],"mappings":";;;;;;AAgDA,SAAS,IAA+B;AAKxC,SAAgB,IAAyC;CACvD,IAAM,EAAE,kBAAe,WAAW,MAAuB,GAAgB,EACnE,IAAoB,CAAC,KAAsB,EAAc,EAAuB,eAAe,EAC/F,IAAmB,CAAC,KAAsB,EAAc,EAAuB,cAAc,EAE7F,IAAiB,CAAC,KAAsB,EAAc,EAAuB,YAAY,EACzF,IAAmB,CAAC,KAAsB,EAAc,EAAuB,cAAc,EAC7F,IAAe,EAAkC;EACrD,MAAM,CAAC;EACP,aAAa;EACb,6BAA6B;EAC9B,CAAC,EACI,IAAiB,EAAoC;EACzD,MAAM,CAAC;EACP,aAAa;EACb,6BAA6B;EAC9B,CAAC,EACI,IAAkB,EAAqC;EAC3D,WAAW,EAAE,OAAA,GAAgC;EAC7C,MAAM,CAAC;EACP,aAAa;EACb,6BAA6B;EAC9B,CAAC,EAEI,IAAiB,EAAoC;EACzD,WAAW,EAAE,gBAAA,GAAuC;EACpD,MAAM,CAAC;EACP,aAAa;EACb,6BAA6B;EAC9B,CAAC,EAEI,EAAE,SAAS,MAA2B,GACtC,EAAE,SAAS,MAA0B,GAErC,IAAoB,QAAkB;AACrC,OACL,GAAwB,CAAC,MAAM,EAAuB;IACrD,CAAC,GAAmB,EAAuB,CAAC,EAEzC,IAAmB,QAAkB;AACpC,OACL,GAAuB,CAAC,MAAM,EAAuB;IACpD,CAAC,GAAkB,EAAsB,CAAC,EAEvC,EAAE,SAAS,MAAwB,GACnC,EAAE,SAAS,MAA0B,GACrC,IAAiB,QAAkB;AACvC,EAAI,KAAgB,GAAqB,CAAC,MAAM,EAAuB;IACtE,CAAC,GAAgB,EAAoB,CAAC,EACnC,IAAmB,QAAkB;AACzC,EAAI,KAAkB,GAAuB,CAAC,MAAM,EAAuB;IAC1E,CAAC,GAAkB,EAAsB,CAAC,EACvC,IAAa,QAAkB;AAInC,EAHA,GAAmB,EACnB,GAAkB,EAClB,GAAgB,EAChB,GAAkB;IACjB;EAAC;EAAmB;EAAkB;EAAgB;EAAiB,CAAC;AAE3E,QAAO;EACL;EACA,SAAS;GACP,SAAS;GACT,MAAM,IAAiB,EAAa,OAAO,KAAA;GAC3C,SAAS,KAAkB,EAAa;GACxC,OAAO,IAAiB,EAAa,QAAQ,KAAA;GAC7C,SAAS;GACV;EACD,WAAW;GACT,SAAS;GACT,MAAM,IAAmB,EAAe,OAAO,KAAA;GAC/C,SAAS,KAAoB,EAAe;GAC5C,OAAO,IAAmB,EAAe,QAAQ,KAAA;GACjD,SAAS;GACV;EACD,YAAY;GACV,SAAS;GACT,MAAM,IAAoB,EAAgB,OAAO,KAAA;GACjD,SAAS,KAAqB,EAAgB;GAC9C,OAAO,IAAoB,EAAgB,QAAQ,KAAA;GACnD,SAAS;GACV;EACD,WAAW;GACT,SAAS;GACT,MAAM,IAAmB,EAAe,OAAO,KAAA;GAC/C,SAAS,KAAoB,EAAe;GAC5C,OAAO,IAAmB,EAAe,QAAQ,KAAA;GACjD,SAAS;GACV;EACD;EACD"}
@@ -1 +1 @@
1
- {"version":3,"file":"OverviewPage.d.ts","sourceRoot":"","sources":["../../../src/bigconsole/pages/OverviewPage.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,KAAK,EAAE,EAA2D,MAAM,OAAO,CAAC;AA2BzF,eAAO,MAAM,YAAY,EAAE,EA8TzB,CAAC;AAEH,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"OverviewPage.d.ts","sourceRoot":"","sources":["../../../src/bigconsole/pages/OverviewPage.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,KAAK,EAAE,EAA2D,MAAM,OAAO,CAAC;AA2BzF,eAAO,MAAM,YAAY,EAAE,EA4UzB,CAAC;AAEH,eAAe,YAAY,CAAC"}