elseware-ui 3.1.0 → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -18,6 +18,7 @@ var ReactWorldFlags = require('react-world-flags');
18
18
  var emojiFlags = require('emoji-flags');
19
19
  var reactSimpleMaps = require('react-simple-maps');
20
20
  var index_js$5 = require('react-icons/bi/index.js');
21
+ var fi = require('react-icons/fi');
21
22
  var CodeMirror = require('@uiw/react-codemirror');
22
23
  var langMarkdown = require('@codemirror/lang-markdown');
23
24
  var themeOneDark = require('@codemirror/theme-one-dark');
@@ -4728,7 +4729,7 @@ var init_python = __esm({
4728
4729
  });
4729
4730
 
4730
4731
  // node_modules/refractor/lang/jsx.js
4731
- function jsx226(Prism2) {
4732
+ function jsx227(Prism2) {
4732
4733
  Prism2.register(javascript);
4733
4734
  Prism2.register(markup);
4734
4735
  (function(Prism3) {
@@ -4861,14 +4862,14 @@ var init_jsx = __esm({
4861
4862
  "node_modules/refractor/lang/jsx.js"() {
4862
4863
  init_javascript();
4863
4864
  init_markup();
4864
- jsx226.displayName = "jsx";
4865
- jsx226.aliases = [];
4865
+ jsx227.displayName = "jsx";
4866
+ jsx227.aliases = [];
4866
4867
  }
4867
4868
  });
4868
4869
 
4869
4870
  // node_modules/refractor/lang/tsx.js
4870
4871
  function tsx(Prism2) {
4871
- Prism2.register(jsx226);
4872
+ Prism2.register(jsx227);
4872
4873
  Prism2.register(typescript);
4873
4874
  (function(Prism3) {
4874
4875
  var typescript2 = Prism3.util.clone(Prism3.languages.typescript);
@@ -6183,7 +6184,7 @@ var cardHoverBorderVariants = {
6183
6184
  ["dark" /* dark */]: "hover:border-eui-dark-500"
6184
6185
  };
6185
6186
  var cardBgVariants = {
6186
- ["default" /* default */]: "bg-white/5",
6187
+ ["default" /* default */]: "bg-white/[0.03]",
6187
6188
  ["primary" /* primary */]: "bg-eui-primary-500/10",
6188
6189
  ["secondary" /* secondary */]: "bg-eui-secondary-500/10",
6189
6190
  ["success" /* success */]: "bg-eui-success-500/10",
@@ -10217,6 +10218,7 @@ var Link = ({
10217
10218
  target = "self",
10218
10219
  variant = "info",
10219
10220
  decoration = "underline",
10221
+ rel,
10220
10222
  bold,
10221
10223
  italic,
10222
10224
  styles,
@@ -10233,6 +10235,7 @@ var Link = ({
10233
10235
  {
10234
10236
  href: href || "#",
10235
10237
  target: targets[target],
10238
+ rel,
10236
10239
  onClick: handleClick,
10237
10240
  className: classNames67__default.default({
10238
10241
  [`${textVariants[variant]}`]: variant,
@@ -13790,13 +13793,13 @@ function Card({
13790
13793
  // default behavior
13791
13794
  }) {
13792
13795
  const eui = useEUIConfig();
13793
- const resolvedShape = shape ?? eui?.config?.global?.shape ?? "softRoundedSquare";
13796
+ const resolvedShape = shape ?? eui?.config?.global?.shape ?? "roundedSquare";
13794
13797
  return /* @__PURE__ */ jsxRuntime.jsxs(
13795
13798
  "div",
13796
13799
  {
13797
13800
  className: cn(
13798
13801
  // Base
13799
- "relative border backdrop-blur-md transition-all duration-300 overflow-hidden p-3",
13802
+ "relative overflow-hidden border p-4 backdrop-blur-md transition-all duration-300",
13800
13803
  // Shape
13801
13804
  shapes[resolvedShape],
13802
13805
  // Background
@@ -32729,6 +32732,430 @@ function StarRatingDistribution({
32729
32732
  );
32730
32733
  }
32731
32734
  var StarRatingDistribution_default = StarRatingDistribution;
32735
+ var HEALTHY_STATUSES = /* @__PURE__ */ new Set([
32736
+ "ok",
32737
+ "up",
32738
+ "online",
32739
+ "healthy",
32740
+ "success",
32741
+ "operational"
32742
+ ]);
32743
+ var UNHEALTHY_STATUSES = /* @__PURE__ */ new Set([
32744
+ "down",
32745
+ "offline",
32746
+ "unhealthy",
32747
+ "error",
32748
+ "failed",
32749
+ "failure",
32750
+ "unavailable"
32751
+ ]);
32752
+ var isRecord2 = (value) => {
32753
+ return typeof value === "object" && value !== null;
32754
+ };
32755
+ var getField = (value, key) => {
32756
+ if (!isRecord2(value)) {
32757
+ return void 0;
32758
+ }
32759
+ return value[key];
32760
+ };
32761
+ var getStringField = (value, keys2) => {
32762
+ for (const key of keys2) {
32763
+ const field = getField(value, key);
32764
+ if (typeof field === "string" && field.trim()) {
32765
+ return field.trim();
32766
+ }
32767
+ }
32768
+ return "";
32769
+ };
32770
+ var getBooleanField = (value, keys2) => {
32771
+ for (const key of keys2) {
32772
+ const field = getField(value, key);
32773
+ if (typeof field === "boolean") {
32774
+ return field;
32775
+ }
32776
+ }
32777
+ return null;
32778
+ };
32779
+ var getSystemHealthPayload = (data) => {
32780
+ const nestedData = getField(data, "data");
32781
+ return nestedData ?? data ?? null;
32782
+ };
32783
+ var getSystemHealthErrorMessage = (error) => {
32784
+ const nestedData = getField(error, "data");
32785
+ return getStringField(nestedData, ["message", "error"]) || getStringField(error, ["message", "error", "statusText"]) || "Health endpoint did not respond.";
32786
+ };
32787
+ var getSystemHealthHttpStatus = (error) => {
32788
+ const status = getField(error, "status");
32789
+ if (typeof status === "string" || typeof status === "number") {
32790
+ return status;
32791
+ }
32792
+ return "Network error";
32793
+ };
32794
+ var getSystemHealthStatusText = (data) => {
32795
+ const payload = getSystemHealthPayload(data);
32796
+ return (getStringField(payload, ["status", "state", "health"]) || getStringField(data, ["status", "state", "health"])).toLowerCase();
32797
+ };
32798
+ var normalizeSystemHealthState = (status) => {
32799
+ if (!status) {
32800
+ return null;
32801
+ }
32802
+ const normalizedStatus = status.toLowerCase();
32803
+ if (HEALTHY_STATUSES.has(normalizedStatus)) {
32804
+ return "operational";
32805
+ }
32806
+ if (UNHEALTHY_STATUSES.has(normalizedStatus)) {
32807
+ return "unavailable";
32808
+ }
32809
+ if (normalizedStatus === "checking" || normalizedStatus === "loading") {
32810
+ return "checking";
32811
+ }
32812
+ if (normalizedStatus === "reachable") {
32813
+ return "reachable";
32814
+ }
32815
+ return null;
32816
+ };
32817
+ var resolveSystemHealthState = ({
32818
+ data,
32819
+ status,
32820
+ isError,
32821
+ isLoading,
32822
+ isFetching
32823
+ }) => {
32824
+ if (isLoading || isFetching) {
32825
+ return "checking";
32826
+ }
32827
+ if (isError) {
32828
+ return "unavailable";
32829
+ }
32830
+ const normalizedStatus = normalizeSystemHealthState(status) ?? normalizeSystemHealthState(getSystemHealthStatusText(data));
32831
+ if (normalizedStatus) {
32832
+ return normalizedStatus;
32833
+ }
32834
+ const payload = getSystemHealthPayload(data);
32835
+ const healthy = getBooleanField(payload, ["ok", "healthy", "success"]) ?? getBooleanField(data, ["ok", "healthy", "success"]);
32836
+ if (healthy === true) {
32837
+ return "operational";
32838
+ }
32839
+ if (healthy === false) {
32840
+ return "unavailable";
32841
+ }
32842
+ return "reachable";
32843
+ };
32844
+ var resolveSystemHealthView = (input) => {
32845
+ const state = resolveSystemHealthState(input);
32846
+ const viewMap = {
32847
+ checking: {
32848
+ state: "checking",
32849
+ label: "Checking",
32850
+ description: "Request in flight",
32851
+ variant: "info",
32852
+ icon: fi.FiActivity,
32853
+ dotClassName: "bg-eui-info-300",
32854
+ panelClassName: "text-eui-info-200 bg-eui-info-500/10 border-eui-info-400/30"
32855
+ },
32856
+ operational: {
32857
+ state: "operational",
32858
+ label: "Operational",
32859
+ description: "Health endpoint is reporting normally",
32860
+ variant: "success",
32861
+ icon: fi.FiCheckCircle,
32862
+ dotClassName: "bg-eui-success-300",
32863
+ panelClassName: "text-eui-success-200 bg-eui-success-500/10 border-eui-success-400/30"
32864
+ },
32865
+ reachable: {
32866
+ state: "reachable",
32867
+ label: "Reachable",
32868
+ description: getSystemHealthStatusText(input.data) || "Response received",
32869
+ variant: "warning",
32870
+ icon: fi.FiActivity,
32871
+ dotClassName: "bg-eui-warning-300",
32872
+ panelClassName: "text-eui-warning-100 bg-eui-warning-500/10 border-eui-warning-300/30"
32873
+ },
32874
+ unavailable: {
32875
+ state: "unavailable",
32876
+ label: "Unavailable",
32877
+ description: getSystemHealthErrorMessage(input.error),
32878
+ variant: "danger",
32879
+ icon: fi.FiAlertTriangle,
32880
+ dotClassName: "bg-eui-danger-300",
32881
+ panelClassName: "text-eui-danger-200 bg-eui-danger-500/10 border-eui-danger-400/30"
32882
+ }
32883
+ };
32884
+ const view = viewMap[state];
32885
+ return {
32886
+ ...view,
32887
+ label: input.statusLabel ?? view.label,
32888
+ description: input.statusDescription ?? view.description
32889
+ };
32890
+ };
32891
+ var formatSystemHealthTimestamp = (value) => {
32892
+ if (!value) {
32893
+ return "Pending";
32894
+ }
32895
+ if (typeof value === "string") {
32896
+ return value;
32897
+ }
32898
+ const date = value instanceof Date ? value : new Date(value);
32899
+ if (Number.isNaN(date.getTime())) {
32900
+ return "Pending";
32901
+ }
32902
+ return date.toLocaleString();
32903
+ };
32904
+ var stringifySystemHealthPayload = (value, emptyText = "No response payload yet.") => {
32905
+ if (value === null || value === void 0) {
32906
+ return emptyText;
32907
+ }
32908
+ if (typeof value === "string") {
32909
+ return value;
32910
+ }
32911
+ if (value instanceof Error) {
32912
+ return JSON.stringify(
32913
+ {
32914
+ name: value.name,
32915
+ message: value.message,
32916
+ stack: value.stack
32917
+ },
32918
+ null,
32919
+ 2
32920
+ );
32921
+ }
32922
+ try {
32923
+ return JSON.stringify(value, null, 2);
32924
+ } catch {
32925
+ return String(value);
32926
+ }
32927
+ };
32928
+ function MetricItem({ icon, label, value }) {
32929
+ return /* @__PURE__ */ jsxRuntime.jsx(Card_default, { children: /* @__PURE__ */ jsxRuntime.jsxs(CardContent_default, { className: "p-0", children: [
32930
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 text-xs uppercase tracking-wide text-slate-400", children: [
32931
+ icon ? React26.createElement(icon, {
32932
+ className: "text-eui-success-300"
32933
+ }) : null,
32934
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: label })
32935
+ ] }),
32936
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-3 break-words text-sm font-medium text-slate-100", children: value ?? "Not available" })
32937
+ ] }) });
32938
+ }
32939
+ function ConnectionItem({ label, value }) {
32940
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
32941
+ /* @__PURE__ */ jsxRuntime.jsx("dt", { className: "text-slate-500", children: label }),
32942
+ /* @__PURE__ */ jsxRuntime.jsx("dd", { className: "mt-1 break-words font-medium text-slate-100", children: value ?? "Not available" })
32943
+ ] });
32944
+ }
32945
+ function SystemHealthStatus({
32946
+ eyebrow = "System",
32947
+ title = "System Health",
32948
+ description,
32949
+ data,
32950
+ error,
32951
+ response,
32952
+ status,
32953
+ statusLabel,
32954
+ statusDescription,
32955
+ isError = false,
32956
+ isLoading = false,
32957
+ isFetching = false,
32958
+ serverLabel = "Server",
32959
+ serverUrl,
32960
+ endpointLabel = "Endpoint",
32961
+ endpointPath = "/api/v1/system/health",
32962
+ endpointUrl,
32963
+ environmentLabel = "Environment",
32964
+ environment,
32965
+ lastCheckedLabel = "Last Checked",
32966
+ lastCheckedAt,
32967
+ responseTitle = "Response",
32968
+ responseDescription,
32969
+ emptyResponseText = "No response payload yet.",
32970
+ connectionTitle = "Connection",
32971
+ httpStateLabel = "HTTP state",
32972
+ httpState,
32973
+ pollingLabel = "Polling",
32974
+ pollingValue,
32975
+ clientLabel = "Client",
32976
+ clientName,
32977
+ metrics,
32978
+ connectionItems,
32979
+ refreshLabel = "Refresh health status",
32980
+ onRefresh,
32981
+ contentClassName,
32982
+ heroClassName,
32983
+ metricsClassName,
32984
+ responseClassName,
32985
+ connectionClassName,
32986
+ className,
32987
+ ...rest
32988
+ }) {
32989
+ const view = resolveSystemHealthView({
32990
+ data,
32991
+ error,
32992
+ status,
32993
+ statusLabel,
32994
+ statusDescription,
32995
+ isError,
32996
+ isLoading,
32997
+ isFetching
32998
+ });
32999
+ const StatusIcon = view.icon;
33000
+ const responsePayload = response ?? (isError ? error : getSystemHealthPayload(data));
33001
+ const responseText = stringifySystemHealthPayload(
33002
+ responsePayload,
33003
+ emptyResponseText
33004
+ );
33005
+ const defaultMetrics = [
33006
+ {
33007
+ id: "server",
33008
+ icon: fi.FiServer,
33009
+ label: serverLabel,
33010
+ value: serverUrl
33011
+ },
33012
+ {
33013
+ id: "endpoint",
33014
+ icon: fi.FiDatabase,
33015
+ label: endpointLabel,
33016
+ value: endpointUrl ?? endpointPath
33017
+ },
33018
+ {
33019
+ id: "last-checked",
33020
+ icon: fi.FiClock,
33021
+ label: lastCheckedLabel,
33022
+ value: formatSystemHealthTimestamp(lastCheckedAt)
33023
+ },
33024
+ {
33025
+ id: "environment",
33026
+ icon: fi.FiActivity,
33027
+ label: environmentLabel,
33028
+ value: environment
33029
+ }
33030
+ ];
33031
+ const defaultConnectionItems = [
33032
+ {
33033
+ id: "http-state",
33034
+ label: httpStateLabel,
33035
+ value: httpState ?? (isError ? getSystemHealthHttpStatus(error) : "Connected")
33036
+ },
33037
+ {
33038
+ id: "polling",
33039
+ label: pollingLabel,
33040
+ value: pollingValue
33041
+ },
33042
+ {
33043
+ id: "client",
33044
+ label: clientLabel,
33045
+ value: clientName
33046
+ }
33047
+ ];
33048
+ const visibleMetrics = metrics ?? defaultMetrics;
33049
+ const visibleConnectionItems = connectionItems ?? defaultConnectionItems;
33050
+ const currentResponseDescription = responseDescription ?? (isError ? "Request error" : "Latest payload");
33051
+ const heroDescription = description ?? `Live status from ${endpointPath}`;
33052
+ return /* @__PURE__ */ jsxRuntime.jsxs(
33053
+ "section",
33054
+ {
33055
+ ...rest,
33056
+ className: cn("min-h-screen bg-[#05070b] text-slate-100", className),
33057
+ children: [
33058
+ /* @__PURE__ */ jsxRuntime.jsx(
33059
+ "section",
33060
+ {
33061
+ className: cn(
33062
+ "border-b border-white/10",
33063
+ "bg-[radial-gradient(circle_at_top_left,rgba(22,163,74,0.22),transparent_32%),linear-gradient(135deg,rgba(15,23,42,0.96),rgba(2,6,23,0.98))]",
33064
+ heroClassName
33065
+ ),
33066
+ children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mx-auto flex w-full max-w-6xl flex-col gap-8 px-5 py-14 sm:px-8 lg:flex-row lg:items-end lg:justify-between lg:py-20", children: [
33067
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "max-w-3xl", children: [
33068
+ eyebrow ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm font-semibold uppercase tracking-wide text-eui-success-300", children: eyebrow }) : null,
33069
+ title ? /* @__PURE__ */ jsxRuntime.jsx("h1", { className: "mt-4 text-4xl font-semibold leading-tight text-white sm:text-5xl", children: title }) : null,
33070
+ heroDescription ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-5 max-w-2xl text-base leading-7 text-slate-300", children: heroDescription }) : null
33071
+ ] }),
33072
+ /* @__PURE__ */ jsxRuntime.jsx(Card_default, { styles: cn("px-5 py-4", view.panelClassName), children: /* @__PURE__ */ jsxRuntime.jsxs(CardContent_default, { className: "p-0", children: [
33073
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3", children: [
33074
+ /* @__PURE__ */ jsxRuntime.jsx(
33075
+ "span",
33076
+ {
33077
+ className: cn("h-2.5 w-2.5 rounded-full", view.dotClassName)
33078
+ }
33079
+ ),
33080
+ /* @__PURE__ */ jsxRuntime.jsx(StatusIcon, { className: "text-xl" }),
33081
+ /* @__PURE__ */ jsxRuntime.jsx(
33082
+ Chip,
33083
+ {
33084
+ label: view.label,
33085
+ variant: view.variant,
33086
+ appearance: "ghost",
33087
+ shape: "roundedSquare"
33088
+ }
33089
+ )
33090
+ ] }),
33091
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-2 max-w-xs text-sm opacity-80", children: view.description })
33092
+ ] }) })
33093
+ ] })
33094
+ }
33095
+ ),
33096
+ /* @__PURE__ */ jsxRuntime.jsxs(
33097
+ "section",
33098
+ {
33099
+ className: cn(
33100
+ "mx-auto w-full max-w-6xl px-5 py-10 sm:px-8",
33101
+ contentClassName
33102
+ ),
33103
+ children: [
33104
+ visibleMetrics.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx(
33105
+ "div",
33106
+ {
33107
+ className: cn(
33108
+ "grid gap-4 md:grid-cols-2 xl:grid-cols-4",
33109
+ metricsClassName
33110
+ ),
33111
+ children: visibleMetrics.map((metric, index3) => /* @__PURE__ */ jsxRuntime.jsx(MetricItem, { ...metric }, metric.id ?? index3))
33112
+ }
33113
+ ) : null,
33114
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-8 grid gap-6 lg:grid-cols-[minmax(0,1fr)_320px]", children: [
33115
+ /* @__PURE__ */ jsxRuntime.jsx(Card_default, { styles: cn("bg-slate-950/70 p-0", responseClassName), children: /* @__PURE__ */ jsxRuntime.jsxs(CardContent_default, { className: "p-0", children: [
33116
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between gap-4 border-b border-white/10 px-5 py-4", children: [
33117
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
33118
+ responseTitle ? /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-lg font-semibold text-white", children: responseTitle }) : null,
33119
+ currentResponseDescription ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-1 text-sm text-slate-400", children: currentResponseDescription }) : null
33120
+ ] }),
33121
+ onRefresh ? /* @__PURE__ */ jsxRuntime.jsx(
33122
+ Button_web_default,
33123
+ {
33124
+ icon: /* @__PURE__ */ jsxRuntime.jsx(
33125
+ fi.FiRefreshCw,
33126
+ {
33127
+ className: isFetching ? "animate-spin" : ""
33128
+ }
33129
+ ),
33130
+ mode: "outlined",
33131
+ variant: "success",
33132
+ shape: "roundedSquare",
33133
+ size: "md",
33134
+ disabled: isFetching,
33135
+ onPress: () => {
33136
+ void onRefresh();
33137
+ },
33138
+ accessibilityLabel: refreshLabel,
33139
+ className: "h-10 w-10",
33140
+ contentClassName: "text-eui-success-200"
33141
+ }
33142
+ ) : null
33143
+ ] }),
33144
+ /* @__PURE__ */ jsxRuntime.jsx("pre", { className: "max-h-[420px] overflow-auto whitespace-pre-wrap break-words p-5 text-sm leading-6 text-slate-300", children: responseText })
33145
+ ] }) }),
33146
+ /* @__PURE__ */ jsxRuntime.jsx(Card_default, { styles: cn("p-5", connectionClassName), children: /* @__PURE__ */ jsxRuntime.jsxs(CardContent_default, { className: "p-0", children: [
33147
+ connectionTitle ? /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-lg font-semibold text-white", children: connectionTitle }) : null,
33148
+ visibleConnectionItems.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx("dl", { className: "mt-5 space-y-4 text-sm", children: visibleConnectionItems.map((item, index3) => /* @__PURE__ */ jsxRuntime.jsx(ConnectionItem, { ...item }, item.id ?? index3)) }) : null
33149
+ ] }) })
33150
+ ] })
33151
+ ]
33152
+ }
33153
+ )
33154
+ ]
33155
+ }
33156
+ );
33157
+ }
33158
+ var SystemHealthStatus_default = SystemHealthStatus;
32732
33159
  function WorldMapCountryTable({
32733
33160
  title = "Country Breakdown",
32734
33161
  data
@@ -32889,13 +33316,14 @@ function FooterDescription({
32889
33316
  }
32890
33317
  function FooterSocial({ item, className }) {
32891
33318
  const { name: name2, href, icon, external = true, onClick } = item;
33319
+ const target = item.target ?? (external ? "blank" : void 0);
32892
33320
  return /* @__PURE__ */ jsxRuntime.jsx(
32893
33321
  "a",
32894
33322
  {
32895
33323
  href,
32896
33324
  onClick,
32897
- target: external ? "_blank" : void 0,
32898
- rel: external ? "noopener noreferrer" : void 0,
33325
+ target: target ? `_${target}` : void 0,
33326
+ rel: target === "blank" ? "noopener noreferrer" : void 0,
32899
33327
  "aria-label": name2,
32900
33328
  title: name2,
32901
33329
  className: cn(
@@ -32929,7 +33357,9 @@ function FooterSocials({
32929
33357
  }
32930
33358
  function FooterLink({ item, navigate, className }) {
32931
33359
  const { label, to, icon, description, badge, external, onClick } = item;
32932
- const useJsNav = Boolean(onClick) || Boolean(navigate) && Boolean(to);
33360
+ const target = item.target ?? (external ? "blank" : "self");
33361
+ const isSelfTarget = target === "self";
33362
+ const useJsNav = Boolean(onClick) || Boolean(navigate) && Boolean(to) && isSelfTarget;
32933
33363
  const handleClick = () => {
32934
33364
  if (onClick) {
32935
33365
  onClick();
@@ -32941,7 +33371,8 @@ function FooterLink({ item, navigate, className }) {
32941
33371
  Link,
32942
33372
  {
32943
33373
  href: to || "#",
32944
- target: external ? "blank" : "self",
33374
+ target,
33375
+ rel: target === "blank" ? "noopener noreferrer" : void 0,
32945
33376
  variant: "default",
32946
33377
  decoration: "noUnderline",
32947
33378
  onClick: useJsNav ? handleClick : void 0,
@@ -35722,11 +36153,11 @@ function addChildren(props, children3) {
35722
36153
  }
35723
36154
  }
35724
36155
  }
35725
- function productionCreate(_2, jsx265, jsxs130) {
36156
+ function productionCreate(_2, jsx266, jsxs131) {
35726
36157
  return create3;
35727
36158
  function create3(_3, type2, props, key) {
35728
36159
  const isStaticChildren = Array.isArray(props.children);
35729
- const fn = isStaticChildren ? jsxs130 : jsx265;
36160
+ const fn = isStaticChildren ? jsxs131 : jsx266;
35730
36161
  return key ? fn(type2, props, key) : fn(type2, props);
35731
36162
  }
35732
36163
  }
@@ -55947,7 +56378,7 @@ function createChildren2(stylesheet, useInlineStyles) {
55947
56378
  return function(children3) {
55948
56379
  childrenCount += 1;
55949
56380
  return children3.map(function(child, i) {
55950
- return createElement2({
56381
+ return createElement3({
55951
56382
  node: child,
55952
56383
  stylesheet,
55953
56384
  useInlineStyles,
@@ -55956,7 +56387,7 @@ function createChildren2(stylesheet, useInlineStyles) {
55956
56387
  });
55957
56388
  };
55958
56389
  }
55959
- function createElement2(_ref) {
56390
+ function createElement3(_ref) {
55960
56391
  var node2 = _ref.node, stylesheet = _ref.stylesheet, _ref$style = _ref.style, style2 = _ref$style === void 0 ? {} : _ref$style, useInlineStyles = _ref.useInlineStyles, key = _ref.key;
55961
56392
  var properties2 = node2.properties, type2 = node2.type, TagName = node2.tagName, value = node2.value;
55962
56393
  if (type2 === "text") {
@@ -56215,7 +56646,7 @@ function processLines(codeTree, wrapLines, lineProps, showLineNumbers, showInlin
56215
56646
  function defaultRenderer(_ref5) {
56216
56647
  var rows = _ref5.rows, stylesheet = _ref5.stylesheet, useInlineStyles = _ref5.useInlineStyles;
56217
56648
  return rows.map(function(node2, i) {
56218
- return createElement2({
56649
+ return createElement3({
56219
56650
  node: node2,
56220
56651
  stylesheet,
56221
56652
  useInlineStyles,
@@ -56645,7 +57076,7 @@ var json_default = json;
56645
57076
 
56646
57077
  // node_modules/react-syntax-highlighter/dist/esm/languages/prism/jsx.js
56647
57078
  init_jsx();
56648
- var jsx_default = jsx226;
57079
+ var jsx_default = jsx227;
56649
57080
 
56650
57081
  // node_modules/react-syntax-highlighter/dist/esm/languages/prism/markup.js
56651
57082
  init_markup();
@@ -59629,6 +60060,7 @@ exports.StarRatingInput = StarRatingInput_default;
59629
60060
  exports.StatPlot = StatPlot;
59630
60061
  exports.StaticChartDataSource = StaticChartDataSource;
59631
60062
  exports.Switch = Switch_default;
60063
+ exports.SystemHealthStatus = SystemHealthStatus_default;
59632
60064
  exports.TNContext = TNContext;
59633
60065
  exports.TNDropdown = TNDropdown;
59634
60066
  exports.TNDropdownGroup = TNDropdownGroup;
@@ -59710,6 +60142,7 @@ exports.formatChartValue = formatChartValue;
59710
60142
  exports.formatCommentDate = formatCommentDate;
59711
60143
  exports.formatConfigError = formatConfigError;
59712
60144
  exports.formatReviewDate = formatReviewDate;
60145
+ exports.formatSystemHealthTimestamp = formatSystemHealthTimestamp;
59713
60146
  exports.generateHeadingNumbers = generateHeadingNumbers;
59714
60147
  exports.getAllowedOrigins = getAllowedOrigins;
59715
60148
  exports.getBrowserHref = getBrowserHref;
@@ -59728,6 +60161,10 @@ exports.getNowISOString = getNowISOString;
59728
60161
  exports.getOptimisticDislikeState = getOptimisticDislikeState;
59729
60162
  exports.getOptimisticLikeState = getOptimisticLikeState;
59730
60163
  exports.getSafeRedirect = getSafeRedirect;
60164
+ exports.getSystemHealthErrorMessage = getSystemHealthErrorMessage;
60165
+ exports.getSystemHealthHttpStatus = getSystemHealthHttpStatus;
60166
+ exports.getSystemHealthPayload = getSystemHealthPayload;
60167
+ exports.getSystemHealthStatusText = getSystemHealthStatusText;
59731
60168
  exports.getViewport = getViewport;
59732
60169
  exports.hasReviewReply = hasReviewReply;
59733
60170
  exports.incrementReplyCount = incrementReplyCount;
@@ -59742,6 +60179,7 @@ exports.normalizeMarkdown = normalizeMarkdown;
59742
60179
  exports.normalizeReview = normalizeReview;
59743
60180
  exports.normalizeReviewAuthor = normalizeReviewAuthor;
59744
60181
  exports.normalizeReviewReply = normalizeReviewReply;
60182
+ exports.normalizeSystemHealthState = normalizeSystemHealthState;
59745
60183
  exports.parseJson = parseJson;
59746
60184
  exports.parseJsonRecord = parseJsonRecord;
59747
60185
  exports.parseUrlMap = parseUrlMap;
@@ -59760,6 +60198,8 @@ exports.replaceReviewReply = replaceReviewReply;
59760
60198
  exports.resolveAppearanceStyles = resolveAppearanceStyles;
59761
60199
  exports.resolveChartColor = resolveChartColor;
59762
60200
  exports.resolveChartColors = resolveChartColors;
60201
+ exports.resolveSystemHealthState = resolveSystemHealthState;
60202
+ exports.resolveSystemHealthView = resolveSystemHealthView;
59763
60203
  exports.resolveWithGlobal = resolveWithGlobal;
59764
60204
  exports.safeReadStorage = safeReadStorage;
59765
60205
  exports.safeRemoveStorage = safeRemoveStorage;
@@ -59767,6 +60207,7 @@ exports.safeWriteStorage = safeWriteStorage;
59767
60207
  exports.sanitizeHeading = sanitizeHeading;
59768
60208
  exports.sendToast = sendToast;
59769
60209
  exports.slugify = slugify;
60210
+ exports.stringifySystemHealthPayload = stringifySystemHealthPayload;
59770
60211
  exports.toConfiguratorError = toConfiguratorError;
59771
60212
  exports.updateComment = updateComment;
59772
60213
  exports.updateReplyCacheComment = updateReplyCacheComment;