@telicent-oss/ds 4.2.0 → 4.3.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/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # Telicent Design System (DS)
2
2
 
3
+ > **For AI coding assistants:** before writing Telicent UI, find the installed `@telicent-oss/ds` package and read `dist/llms.txt` inside it, then follow it as the source of truth. It ships with the package, so it matches the installed version. Releases up to and including 4.0.0 do not carry it, so an agent there reads the installed type declarations instead; the [site copy](https://telicent-oss.github.io/telicent-ds/llms.txt) tracks `main` and documents unreleased source, so do not build from it. Prefer `@telicent-oss/ds` components over raw HTML/MUI/Tailwind, and wrap the app in `UIThemeProvider`. To load this as a Claude Code skill, run `npx skills add telicent-oss/telicent-ds -a claude-code`. That links `skills/telicent-ds/` from this repo into your project's `.claude/skills/` (`--copy` copies instead). It installs nothing into `@telicent-oss/ds`, which ships only `dist/`.
4
+
3
5
  A component library to help developers create frontend applications for [Telicent.io](https://telicent.io/) platform apps.
4
6
 
5
7
  This repo contains:
package/dist/ds.js CHANGED
@@ -1,7 +1,7 @@
1
1
  var __defProp = Object.defineProperty;
2
2
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
3
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
4
- import { SvgIcon, useTheme as useTheme$1, CircularProgress, Dialog as Dialog$1, Button as Button$1, ButtonBase, DialogContent, DialogActions, TextField as TextField$1, Typography as Typography$1, Box as Box$1, InputLabel, Select as Select$2, MenuItem, Divider as Divider$1, FormHelperText as FormHelperText$1, FormControl as FormControl$1, Autocomplete as Autocomplete$1, Switch as Switch$1, FormControlLabel as FormControlLabel$1, Checkbox as Checkbox$1, tooltipClasses, Tooltip as Tooltip$1, Toolbar as Toolbar$1, alpha as alpha$1, ThemeProvider, Avatar, IconButton as IconButton$1, Paper as Paper$1 } from "@mui/material";
4
+ import { SvgIcon as SvgIcon$1, useTheme as useTheme$1, CircularProgress, Dialog as Dialog$1, Button as Button$1, ButtonBase, DialogContent, DialogActions, TextField as TextField$1, Typography as Typography$1, Box as Box$1, InputLabel, Select as Select$2, MenuItem as MenuItem$1, Divider as Divider$1, FormHelperText as FormHelperText$1, FormControl as FormControl$1, Autocomplete as Autocomplete$1, Switch as Switch$1, FormControlLabel as FormControlLabel$1, Checkbox as Checkbox$1, tooltipClasses, Tooltip as Tooltip$1, Toolbar as Toolbar$1, alpha as alpha$1, ThemeProvider, Avatar, IconButton as IconButton$1, Paper as Paper$1 } from "@mui/material";
5
5
  import { DialogActions as DialogActions2, DialogContent as DialogContent2, DialogTitle } from "@mui/material";
6
6
  import * as React$1 from "react";
7
7
  import React__default, { useState, useEffect, forwardRef, useContext, useCallback, useId as useId$1, createContext, memo, useMemo, PureComponent, createElement as createElement$1, useRef, useImperativeHandle } from "react";
@@ -25,6 +25,7 @@ import MUIMenuItem from "@mui/material/MenuItem";
25
25
  import MUIIconButton from "@mui/material/IconButton";
26
26
  import MUIChip from "@mui/material/Chip";
27
27
  import MUIDivider from "@mui/material/Divider";
28
+ import { dividerClasses } from "@mui/material/Divider";
28
29
  import MUIAvatar from "@mui/material/Avatar";
29
30
  import MUIPopOver from "@mui/material/Popover";
30
31
  import TableRaw from "@mui/material/Table";
@@ -36,6 +37,7 @@ import LinearProgressRaw from "@mui/material/LinearProgress";
36
37
  import MUIButton from "@mui/material/Button";
37
38
  import Alert from "@mui/material/Alert";
38
39
  import { default as default2 } from "@mui/material/Alert";
40
+ import { default as default3 } from "@mui/material/AlertTitle";
39
41
  import SkeletonRaw from "@mui/material/Skeleton";
40
42
  import { useSnackbar as useSnackbar$1, enqueueSnackbar, SnackbarProvider as SnackbarProvider$1 } from "notistack";
41
43
  import { closeSnackbar } from "notistack";
@@ -58,6 +60,9 @@ import { createSvgIcon, useForkRef as useForkRef$2 } from "@mui/material/utils";
58
60
  import InputBase from "@mui/material/InputBase";
59
61
  import MuiTabs from "@mui/material/Tabs";
60
62
  import MuiTab from "@mui/material/Tab";
63
+ import MuiAccordion from "@mui/material/Accordion";
64
+ import MuiAccordionSummary from "@mui/material/AccordionSummary";
65
+ import MuiAccordionDetails from "@mui/material/AccordionDetails";
61
66
  import MUICard from "@mui/material/Card";
62
67
  import MUICardHeader from "@mui/material/CardHeader";
63
68
  import MUICardContent from "@mui/material/CardContent";
@@ -1825,7 +1830,7 @@ const BinIcon = (iconProps) => /* @__PURE__ */ jsx(MUISvgIcon, { ...iconProps, v
1825
1830
  const CloseIcon = (iconProps) => /* @__PURE__ */ jsx(MUISvgIcon, { ...iconProps, viewBox: "0 0 12 13", children: /* @__PURE__ */ jsx("path", { d: "M11.9997 1.84102L10.8247 0.666016L6.16634 5.32435L1.50801 0.666016L0.333008 1.84102L4.99134 6.49935L0.333008 11.1577L1.50801 12.3327L6.16634 7.67435L10.8247 12.3327L11.9997 11.1577L7.34134 6.49935L11.9997 1.84102Z", fill: "currentColor" }) });
1826
1831
  const CogIcon = (iconProps) => /* @__PURE__ */ jsx(MUISvgIcon, { ...iconProps, children: /* @__PURE__ */ jsx("g", { transform: "translate(-2.106 -0.351) scale(1.1755)", children: /* @__PURE__ */ jsx("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M13.4142 2C13.7472 2 14.0331 2.23578 14.0964 2.5626L14.4482 4.3773C15.0779 4.60095 15.6666 4.9124 16.1975 5.29804L17.9247 4.66643C18.2371 4.55212 18.5872 4.68036 18.7537 4.96876L20.1679 7.41772C20.3345 7.70616 20.2678 8.07248 20.0104 8.28338L18.5896 9.44811C18.6608 9.79007 18.6982 10.1443 18.6982 10.5073C18.6982 10.8703 18.6608 11.2245 18.5896 11.5665L20.0104 12.7312C20.2678 12.9421 20.3345 13.3084 20.1679 13.5969L18.7537 16.0458C18.5872 16.3342 18.2371 16.4625 17.9247 16.3482L16.1975 15.7166C15.6666 16.1022 15.0779 16.4137 14.4482 16.6373L14.0964 18.452C14.0331 18.7788 13.7472 19.0146 13.4142 19.0146H10.5858C10.2528 19.0146 9.9669 18.7788 9.90361 18.452L9.55176 16.6373C8.92209 16.4137 8.33338 16.1022 7.80253 15.7166L6.0753 16.3482C5.76288 16.4625 5.41283 16.3342 5.24631 16.0458L3.83208 13.5969C3.66551 13.3084 3.73217 12.9421 3.98964 12.7312L5.4104 11.5665C5.33921 11.2245 5.30177 10.8703 5.30177 10.5073C5.30177 10.1443 5.33921 9.79007 5.4104 9.44811L3.98964 8.28338C3.73217 8.07248 3.66551 7.70616 3.83208 7.41772L5.24631 4.96876C5.41283 4.68036 5.76288 4.55212 6.0753 4.66643L7.80253 5.29804C8.33338 4.9124 8.92209 4.60095 9.55176 4.3773L9.90361 2.5626C9.9669 2.23578 10.2528 2 10.5858 2H13.4142ZM12.7592 3.56679H11.2408L10.9401 5.11751C10.8871 5.39093 10.6929 5.61587 10.4272 5.70389C9.7188 5.93858 9.06819 6.28901 8.49443 6.72979C8.27923 6.89513 7.99093 6.94061 7.73326 6.84636L6.25758 6.30662L5.4964 7.62497L6.71075 8.6208C6.9227 8.79458 7.02026 9.07091 6.9662 9.34093C6.90506 9.64593 6.86855 9.96035 6.86855 10.5073C6.86855 11.0543 6.90506 11.3687 6.9662 11.6737C7.02026 11.9437 6.9227 12.22 6.71075 12.3938L5.4964 13.3897L6.25758 14.708L7.73326 14.1683C7.99093 14.074 8.27923 14.1195 8.49443 14.2848C9.06819 14.7256 9.7188 15.076 10.4272 15.3107C10.6929 15.3988 10.8871 15.6237 10.9401 15.8971L11.2408 17.4478H12.7592L13.0599 15.8971C13.1129 15.6237 13.3071 15.3988 13.5728 15.3107C14.2812 15.076 14.9318 14.7256 15.5056 14.2848C15.7208 14.1195 16.0091 14.074 16.2667 14.1683L17.7424 14.708L18.5036 13.3897L17.2893 12.3938C17.0773 12.22 16.9797 11.9437 17.0338 11.6737C17.0949 11.3687 17.1315 11.0543 17.1315 10.5073C17.1315 9.96035 17.0949 9.64593 17.0338 9.34093C16.9797 9.07091 17.0773 8.79458 17.2893 8.6208L18.5036 7.62497L17.7424 6.30662L16.2667 6.84636C16.0091 6.94061 15.7208 6.89513 15.5056 6.72979C14.9318 6.28901 14.2812 5.93858 13.5728 5.70389C13.3071 5.61587 13.1129 5.39093 13.0599 5.11751L12.7592 3.56679ZM12 7.83398C13.6478 7.83398 14.9834 9.16957 14.9834 10.8174C14.9834 12.4653 13.6478 13.8008 12 13.8008C10.3522 13.8008 9.01659 12.4653 9.01659 10.8174C9.01659 9.16957 10.3522 7.83398 12 7.83398ZM12 9.40077C11.2175 9.40077 10.5834 10.0349 10.5834 10.8174C10.5834 11.5999 11.2175 12.234 12 12.234C12.7825 12.234 13.4166 11.5999 13.4166 10.8174C13.4166 10.0349 12.7825 9.40077 12 9.40077Z", fill: "currentColor" }) }) });
1827
1832
  const XIcon = (iconProps) => /* @__PURE__ */ jsx(MUISvgIcon, { ...iconProps, viewBox: "0 0 640 640", children: /* @__PURE__ */ jsx("path", { fill: "currentColor", d: "M183.1 137.4C170.6 124.9 150.3 124.9 137.8 137.4C125.3 149.9 125.3 170.2 137.8 182.7L275.2 320L137.9 457.4C125.4 469.9 125.4 490.2 137.9 502.7C150.4 515.2 170.7 515.2 183.2 502.7L320.5 365.3L457.9 502.6C470.4 515.1 490.7 515.1 503.2 502.6C515.7 490.1 515.7 469.8 503.2 457.3L365.8 320L503.1 182.6C515.6 170.1 515.6 149.8 503.1 137.3C490.6 124.8 470.3 124.8 457.8 137.3L320.5 274.7L183.1 137.4z" }) });
1828
- const DataServiceIcon = (svgIconProps) => /* @__PURE__ */ jsx(SvgIcon, { ...svgIconProps, children: /* @__PURE__ */ jsxs("svg", { xmlns: "http://www.w3.org/2000/svg", width: "15", height: "27", viewBox: "0 0 15 27", fill: "none", children: [
1833
+ const DataServiceIcon = (svgIconProps) => /* @__PURE__ */ jsx(SvgIcon$1, { ...svgIconProps, children: /* @__PURE__ */ jsxs("svg", { xmlns: "http://www.w3.org/2000/svg", width: "15", height: "27", viewBox: "0 0 15 27", fill: "none", children: [
1829
1834
  /* @__PURE__ */ jsx("circle", { cx: "1.74976", cy: "22.345", r: "1.40649", transform: "rotate(90 1.74976 22.345)", fill: "currentColor" }),
1830
1835
  /* @__PURE__ */ jsx("circle", { cx: "13.2517", cy: "18.658", r: "1.40649", transform: "rotate(90 13.2517 18.658)", fill: "currentColor" }),
1831
1836
  /* @__PURE__ */ jsx("circle", { cx: "7.80444", cy: "25.158", r: "1.40649", transform: "rotate(90 7.80444 25.158)", fill: "currentColor" }),
@@ -1836,7 +1841,7 @@ const DataServiceIcon = (svgIconProps) => /* @__PURE__ */ jsx(SvgIcon, { ...svgI
1836
1841
  /* @__PURE__ */ jsx("path", { d: "M4.40039 12.5454L1.91399 15.3954L1.91399 21.3954", stroke: "currentColor", strokeWidth: "1.5" }),
1837
1842
  /* @__PURE__ */ jsx("path", { d: "M7.9043 13.0649L7.9043 24.2749", stroke: "currentColor", strokeWidth: "1.5" })
1838
1843
  ] }) });
1839
- const DataSetIcon = (iconProps) => /* @__PURE__ */ jsx(SvgIcon, { ...iconProps, children: /* @__PURE__ */ jsx("svg", { width: "19", height: "25", viewBox: "0 0 19 25", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ jsxs("g", { id: "dataset icon", children: [
1844
+ const DataSetIcon = (iconProps) => /* @__PURE__ */ jsx(SvgIcon$1, { ...iconProps, children: /* @__PURE__ */ jsx("svg", { width: "19", height: "25", viewBox: "0 0 19 25", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ jsxs("g", { id: "dataset icon", children: [
1840
1845
  /* @__PURE__ */ jsx("rect", { id: "Rectangle 2", x: "1.0332", y: "1.90381", width: "16.9326", height: "22.0233", stroke: "currentColor", strokeWidth: "2" }),
1841
1846
  /* @__PURE__ */ jsx("rect", { id: "Rectangle 3", x: "3.82031", y: "20.3071", width: "11.3596", height: "0.923972", fill: "currentColor" }),
1842
1847
  /* @__PURE__ */ jsx("rect", { id: "Rectangle 4", x: "3.82031", y: "18.4595", width: "11.3596", height: "0.923972", fill: "currentColor" }),
@@ -2058,10 +2063,12 @@ const TelicentHorizontalSVG = ({
2058
2063
  /* @__PURE__ */ jsx("path", { d: "M95.1909 7.93852V11.7937H95.541C96.2426 9.55004 98.3098 7.51756 101.744 7.51756C106.37 7.51756 109.489 11.5478 109.489 16.6992V25.4613H105.88V16.6992C105.88 13.0899 103.532 10.742 100.623 10.742C97.5734 10.742 95.1909 13.3358 95.1909 16.6992V25.4613H91.5469V7.93852H95.1909Z", fill: "currentColor" }),
2059
2064
  /* @__PURE__ */ jsx("path", { d: "M114.747 4.2587V2.68189H118.462V4.46846C118.462 6.15087 118.462 7.58735 116.079 7.58735V7.93888H123.578V11.1634H118.356V20.3103C118.356 22.0621 118.496 22.3428 120.25 22.3428H123.228V25.4617H119.058C116.043 25.4617 114.747 24.2349 114.747 21.1161V11.1634H110.576V7.93888C114.956 7.93888 114.747 6.53711 114.747 4.2587Z", fill: "currentColor" })
2060
2065
  ] });
2061
- const UserIcon = (iconProps) => /* @__PURE__ */ jsx(SvgIcon, { ...iconProps, children: /* @__PURE__ */ jsxs("svg", { xmlns: "http://www.w3.org/2000/svg", width: "36", height: "36", viewBox: "0 0 36 36", fill: "none", children: [
2066
+ const UserIcon = (iconProps) => /* @__PURE__ */ jsx(SvgIcon$1, { ...iconProps, children: /* @__PURE__ */ jsxs("svg", { xmlns: "http://www.w3.org/2000/svg", width: "36", height: "36", viewBox: "0 0 36 36", fill: "none", children: [
2062
2067
  /* @__PURE__ */ jsx("circle", { cx: "18", cy: "13.5", r: "3.375", stroke: "currentColor", strokeWidth: "2.25" }),
2063
2068
  /* @__PURE__ */ jsx("path", { d: "M12 25.5V23.25C12 21.5931 13.3431 20.25 15 20.25H21C22.6569 20.25 24 21.5931 24 23.25V25.5", stroke: "currentColor", strokeWidth: "2.25", strokeLinecap: "round" })
2064
2069
  ] }) });
2070
+ const ExpandMoreIcon = (iconProps) => /* @__PURE__ */ jsx(MUISvgIcon, { ...iconProps, children: /* @__PURE__ */ jsx("path", { d: "M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z", fill: "currentColor" }) });
2071
+ const ExpandLessIcon = (iconProps) => /* @__PURE__ */ jsx(MUISvgIcon, { ...iconProps, children: /* @__PURE__ */ jsx("path", { d: "M12 8l-6 6 1.41 1.41L12 10.83l4.59 4.59L18 14z", fill: "currentColor" }) });
2065
2072
  const AddIcon = createSvgIcon(/* @__PURE__ */ jsxRuntimeExports.jsx("path", {
2066
2073
  d: "M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6z"
2067
2074
  }), "Add");
@@ -26041,10 +26048,13 @@ const TreeView = ({
26041
26048
  };
26042
26049
  const UserProfile = ({
26043
26050
  fullName,
26044
- children
26051
+ children,
26052
+ id = "user-profile",
26053
+ ariaLabel = "User menu"
26045
26054
  }) => {
26046
26055
  const [anchorEl, setAnchorEl] = useState(null);
26047
26056
  const open = Boolean(anchorEl);
26057
+ const menuId = `${id}-menu`;
26048
26058
  const handleClick = (event) => {
26049
26059
  setAnchorEl(event.currentTarget);
26050
26060
  };
@@ -26052,10 +26062,16 @@ const UserProfile = ({
26052
26062
  setAnchorEl(null);
26053
26063
  };
26054
26064
  return /* @__PURE__ */ jsxs(Fragment, { children: [
26055
- /* @__PURE__ */ jsxs(MUIStack, { onClick: handleClick, width: "max-content", direction: "row", alignItems: "center", spacing: 1, sx: {
26065
+ /* @__PURE__ */ jsxs(MUIStack, { component: "button", type: "button", id, "aria-label": ariaLabel, "aria-haspopup": "menu", "aria-expanded": open, "aria-controls": open ? menuId : void 0, onClick: handleClick, width: "max-content", direction: "row", alignItems: "center", spacing: 1, sx: {
26066
+ background: "none",
26067
+ border: "none",
26068
+ padding: 0,
26069
+ color: "inherit",
26070
+ font: "inherit",
26071
+ textAlign: "inherit",
26056
26072
  cursor: "pointer"
26057
26073
  }, children: [
26058
- /* @__PURE__ */ jsx(Text$1, { variant: "subtitle1", component: "h2", sx: {
26074
+ fullName && /* @__PURE__ */ jsx(Text$1, { variant: "subtitle1", component: "h2", sx: {
26059
26075
  display: {
26060
26076
  xs: "none",
26061
26077
  sm: "block"
@@ -26075,9 +26091,20 @@ const UserProfile = ({
26075
26091
  height: 32,
26076
26092
  borderColor: "inherit"
26077
26093
  }, children: /* @__PURE__ */ jsx(UserIcon, { color: "inherit" }) }),
26078
- /* @__PURE__ */ jsx(MUIIconButton, { "aria-label": "user-profile", color: "inherit", children: /* @__PURE__ */ jsx(DownArrow, { rotation: open ? 180 : void 0, size: "sm", color: "primary" }) })
26094
+ /* @__PURE__ */ jsx(MUIBox, { component: "span", "aria-hidden": true, sx: {
26095
+ display: "inline-flex",
26096
+ alignItems: "center",
26097
+ justifyContent: "center",
26098
+ padding: 1,
26099
+ borderRadius: 1,
26100
+ color: "inherit",
26101
+ transition: "background-color 150ms cubic-bezier(0.4, 0, 0.2, 1)",
26102
+ "&:hover": {
26103
+ backgroundColor: (theme) => theme.palette.action.hover
26104
+ }
26105
+ }, children: /* @__PURE__ */ jsx(DownArrow, { rotation: open ? 180 : void 0, size: "sm", color: "primary" }) })
26079
26106
  ] }),
26080
- /* @__PURE__ */ jsx(MUIMenu, { anchorEl, id: "user-profile-menu", open, onClose: handleClose, onClick: handleClose, MenuListProps: {
26107
+ /* @__PURE__ */ jsx(MUIMenu, { anchorEl, id: menuId, open, onClose: handleClose, onClick: handleClose, MenuListProps: {
26081
26108
  component: "div",
26082
26109
  sx: {
26083
26110
  padding: 0
@@ -26275,6 +26302,7 @@ const DropdownButton = ({
26275
26302
  }, icon: menuItem == null ? void 0 : menuItem.icon, faIcon: menuItem == null ? void 0 : menuItem.faIcon, value: menuItem.value, selected: menuItem.value === selectedMenuItem.value }, `${id}-item-${index2}`)) })
26276
26303
  ] });
26277
26304
  };
26305
+ const SvgIcon = (props) => /* @__PURE__ */ jsx(MUISvgIcon, { ...props });
26278
26306
  const Table = (props) => /* @__PURE__ */ jsx(TableRaw, { ...props });
26279
26307
  const TableBody = (props) => /* @__PURE__ */ jsx(TableBodyRaw, { ...props });
26280
26308
  const TableCell = (props) => /* @__PURE__ */ jsx(TableCellRaw, { ...props });
@@ -26293,7 +26321,7 @@ const LinearProgress = ({
26293
26321
  );
26294
26322
  };
26295
26323
  const Spinner = (props) => {
26296
- return /* @__PURE__ */ jsx(CircularProgress, { ...props });
26324
+ return /* @__PURE__ */ jsx(CircularProgress, { "aria-label": "Loading", ...props });
26297
26325
  };
26298
26326
  const Dialog = ({
26299
26327
  open,
@@ -26329,7 +26357,7 @@ const TertiaryButton = forwardRef((buttonProps, ref) => {
26329
26357
  const theme = useExtendedTheme();
26330
26358
  return /* @__PURE__ */ jsx(MUIButton, { variant: "contained", ref, ...buttonProps, sx: {
26331
26359
  border: `1px solid ${(_a = theme.palette.tertiary) == null ? void 0 : _a.main}`,
26332
- color: (_b = theme.palette.tertiary) == null ? void 0 : _b.contrastText,
26360
+ color: (_b = theme.palette.tertiary) == null ? void 0 : _b.main,
26333
26361
  backgroundColor: theme.palette.mode === "dark" ? "#080808" : "#FFFFFF",
26334
26362
  "&:hover": {
26335
26363
  backgroundColor: `${(_c = theme.palette.tertiary) == null ? void 0 : _c.main}14`,
@@ -26553,6 +26581,7 @@ const SnackbarProvider = ({
26553
26581
  ...Components
26554
26582
  }, ...otherProps, children });
26555
26583
  const Tooltip = (tooltipProps) => /* @__PURE__ */ jsx(MUITooltip, { ...tooltipProps });
26584
+ const ToggleButton = (props) => /* @__PURE__ */ jsx(MUIToggleButton, { ...props });
26556
26585
  const StyledToggleButton$1 = styled(MUIToggleButton)({
26557
26586
  border: 0
26558
26587
  });
@@ -26698,7 +26727,7 @@ const Select$1 = React__default.forwardRef(({
26698
26727
  return /* @__PURE__ */ jsxs(FormControl$1, { sx: composedSx, size: "small", error: error2, required, fullWidth, disabled: disabled2, children: [
26699
26728
  label && /* @__PURE__ */ jsx(InputLabel, { id: labelId, required, htmlFor: selectedId, children: label }),
26700
26729
  /* @__PURE__ */ jsxs(Select$2, { ...rest, open: openProp, onOpen: handleOpen, onClose: handleClose, color: "primary", variant: "outlined", labelId, label, id: selectedId, value, onChange: onChange2, inputRef: ref, "aria-describedby": helperText ? helperTextId : void 0, children: [
26701
- options.map((option) => /* @__PURE__ */ jsx(MenuItem, { value: option.value, "aria-label": renderOption ? option.label : void 0, disableRipple: true, disabled: option.disabled, children: renderOption ? renderOption(option) : option.label }, option.value)),
26730
+ options.map((option) => /* @__PURE__ */ jsx(MenuItem$1, { value: option.value, "aria-label": renderOption ? option.label : void 0, disableRipple: true, disabled: option.disabled, children: renderOption ? renderOption(option) : option.label }, option.value)),
26702
26731
  footer && options.length > 0 && /* @__PURE__ */ jsx(Divider$1, { component: "li", role: "separator", sx: {
26703
26732
  my: 0.5
26704
26733
  } }, "__ds-select-footer-divider"),
@@ -27082,9 +27111,14 @@ const CopyToClipboard = ({
27082
27111
  return /* @__PURE__ */ jsx(Tooltip$1, { title: message, onClose: handleTooltipClose, open, leaveDelay: 1400, arrow: true, placement: "right", componentsProps: {
27083
27112
  tooltip: {
27084
27113
  sx: {
27085
- bgcolor: message !== successMsg ? theme.palette.error.main : void 0,
27114
+ // Read `error.dark` (not `.main`): MUI Tooltip's text is
27115
+ // hardcoded white, and `.dark` is pinned in both palettes to
27116
+ // the deep red that passes AA white-on-red (7.78:1 dark,
27117
+ // ~8:1 light). `error.main` is tuned for FormLabel text
27118
+ // contrast on page bg and would fail here in dark mode.
27119
+ bgcolor: message !== successMsg ? theme.palette.error.dark : void 0,
27086
27120
  [`& .${tooltipClasses.arrow}`]: {
27087
- color: message !== successMsg ? theme.palette.error.main : void 0
27121
+ color: message !== successMsg ? theme.palette.error.dark : void 0
27088
27122
  },
27089
27123
  fontSize: "0.75rem"
27090
27124
  }
@@ -27323,6 +27357,67 @@ const TabPanel = forwardRef(({
27323
27357
  );
27324
27358
  });
27325
27359
  TabPanel.displayName = "TabPanel";
27360
+ const Menu = ({
27361
+ "aria-label": ariaLabel,
27362
+ button,
27363
+ options,
27364
+ onSelect,
27365
+ onOpenChange,
27366
+ menuId = "menu",
27367
+ anchorOrigin = {
27368
+ vertical: "bottom",
27369
+ horizontal: "right"
27370
+ },
27371
+ transformOrigin = {
27372
+ vertical: "top",
27373
+ horizontal: "right"
27374
+ },
27375
+ autoFocusSelected = true,
27376
+ sx
27377
+ }) => {
27378
+ const [anchorEl, setAnchorEl] = React$1.useState(null);
27379
+ const open = Boolean(anchorEl);
27380
+ const selectedIndex = React$1.useMemo(() => options.findIndex((o2) => o2.selected), [options]);
27381
+ const handleOpen = (e) => {
27382
+ setAnchorEl(e.currentTarget);
27383
+ onOpenChange == null ? void 0 : onOpenChange(true);
27384
+ };
27385
+ const handleClose = () => {
27386
+ setAnchorEl(null);
27387
+ onOpenChange == null ? void 0 : onOpenChange(false);
27388
+ };
27389
+ const ariaControls = open ? menuId : void 0;
27390
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
27391
+ button({
27392
+ onClick: handleOpen,
27393
+ "aria-controls": ariaControls,
27394
+ "aria-haspopup": true,
27395
+ "aria-expanded": open ? true : void 0
27396
+ }),
27397
+ /* @__PURE__ */ jsx(MUIMenu, { id: menuId, anchorEl, open, onClose: handleClose, anchorOrigin, transformOrigin, MenuListProps: {
27398
+ "aria-label": ariaLabel,
27399
+ ...autoFocusSelected && selectedIndex >= 0 ? {
27400
+ autoFocusItem: true
27401
+ } : {}
27402
+ }, sx, children: options.flatMap((opt, idx) => {
27403
+ const item = /* @__PURE__ */ jsxs(MUIMenuItem, { disabled: opt.disabled, selected: Boolean(opt.selected), autoFocus: autoFocusSelected && idx === selectedIndex, "aria-selected": opt.selected ? "true" : void 0, onClick: () => {
27404
+ var _a;
27405
+ if (opt.href) window.open(opt.href, opt.target ?? "_self");
27406
+ (_a = opt.onClick) == null ? void 0 : _a.call(opt);
27407
+ onSelect == null ? void 0 : onSelect(opt);
27408
+ handleClose();
27409
+ }, children: [
27410
+ opt.icon ? /* @__PURE__ */ jsx(MUIListItemIcon, { children: opt.icon }) : null,
27411
+ /* @__PURE__ */ jsx(MUIListItemText, { children: opt.label })
27412
+ ] }, opt.id);
27413
+ return opt.dividerAbove ? [/* @__PURE__ */ jsx(MUIDivider, { component: "li", role: "separator" }, `${opt.id}-divider`), item] : [item];
27414
+ }) })
27415
+ ] });
27416
+ };
27417
+ const MenuItem = (props) => /* @__PURE__ */ jsx(MUIMenuItem, { ...props });
27418
+ const Accordion = (props) => /* @__PURE__ */ jsx(MuiAccordion, { ...props });
27419
+ const AccordionSummary = (props) => /* @__PURE__ */ jsx(MuiAccordionSummary, { expandIcon: /* @__PURE__ */ jsx(ExpandMoreIcon, {}), ...props });
27420
+ const AccordionDetails = (props) => /* @__PURE__ */ jsx(MuiAccordionDetails, { ...props });
27326
27421
  const Card = ({
27327
27422
  maxWidth,
27328
27423
  ...cardProps
@@ -30088,6 +30183,7 @@ const Panel = ({
30088
30183
  }, children: !(context == null ? void 0 : context.get(targetId, "minimised")) && children })
30089
30184
  ] });
30090
30185
  };
30186
+ const Popper = (props) => /* @__PURE__ */ jsx(MUIPopper, { ...props });
30091
30187
  const Toolbar = ({
30092
30188
  children,
30093
30189
  sx,
@@ -30096,6 +30192,8 @@ const Toolbar = ({
30096
30192
  const theme = useTheme$1();
30097
30193
  return /* @__PURE__ */ jsx(Toolbar$1, { disableGutters: true, variant: "dense", sx: {
30098
30194
  backgroundColor: theme.palette.mode === "dark" ? "#2e2e2e" : "#FFFFFF",
30195
+ borderTop: theme.palette.mode === "dark" ? "none" : "1px solid #DEDEDE",
30196
+ borderBottom: theme.palette.mode === "dark" ? "none" : "1px solid #DEDEDE",
30099
30197
  paddingX: 2,
30100
30198
  paddingY: 1,
30101
30199
  ...sx
@@ -30116,43 +30214,66 @@ const DataNavy = {
30116
30214
  }
30117
30215
  };
30118
30216
  const main$3 = "#F56AAA";
30217
+ const mainLight$1 = "#B70071";
30119
30218
  const DocumentPink = {
30120
30219
  dark: {
30121
30220
  primary: {
30122
30221
  main: main$3,
30123
- dark: alpha(main$3, 0.7),
30124
- light: alpha(main$3, 0.5),
30222
+ dark: "#C45488",
30223
+ light: "#F787BB",
30125
30224
  contrastText: common.black
30126
30225
  }
30226
+ },
30227
+ light: {
30228
+ primary: {
30229
+ main: mainLight$1,
30230
+ dark: "#92005A",
30231
+ light: "#C5338D",
30232
+ contrastText: "#FFFFFF"
30233
+ },
30234
+ background: {
30235
+ default: "#F9F9F9",
30236
+ paper: "#FFFFFF"
30237
+ },
30238
+ text: {
30239
+ primary: "#1A1D21",
30240
+ secondary: "#5A6172"
30241
+ },
30242
+ divider: "rgba(26, 29, 33, 0.12)",
30243
+ action: {
30244
+ hover: "rgba(26, 29, 33, 0.04)"
30245
+ }
30127
30246
  }
30128
30247
  };
30129
30248
  const main$2 = "#F2A64B";
30130
- const mainLight = "#A65200";
30249
+ const mainLight = "#C24D00";
30131
30250
  const GraphOrange = {
30132
30251
  dark: {
30133
30252
  primary: {
30134
30253
  main: main$2,
30135
- dark: alpha(main$2, 0.7),
30136
- light: alpha(main$2, 0.5),
30254
+ dark: "#C1843C",
30255
+ light: "#F4B76F",
30137
30256
  contrastText: common.black
30138
30257
  }
30139
30258
  },
30140
30259
  light: {
30141
- // The app colour shifts per mode rather than splitting into a
30142
- // second token, so components keep reading primary alone.
30143
- // contrastThreshold 4.5 resolves #FFF on mainLight (5.49:1).
30260
+ // Known trade-off: `mainLight` is tuned for brand recognition and does
30261
+ // not clear WCAG 2.2 AA (4.5:1) in every component context — notably
30262
+ // established patterns like the Secondary button variant where it
30263
+ // renders as foreground on light surfaces. Shipped per explicit product
30264
+ // direction, prioritising brand fidelity over universal AA
30265
+ // conformance for this specific token. The gap is documented here
30266
+ // rather than silently carried; revisit against the system-wide target
30267
+ // in docs/adr/0001-wcag-2.2-aa.md if a brand or component update
30268
+ // closes it.
30144
30269
  //
30145
- // dark / light are ramp steps, not alpha: over a LIGHT ground
30146
- // alpha(mainLight, 0.7) resolves lighter than main, so .dark
30147
- // would read as a tint. Dark mode does not have that problem,
30148
- // which is why it keeps alpha() above.
30270
+ // The app colour shifts per mode rather than splitting into a second
30271
+ // token, so components keep reading primary alone. contrastThreshold
30272
+ // 4.5 resolves #FFF on mainLight (5.49:1).
30149
30273
  primary: {
30150
30274
  main: mainLight,
30151
- // 700
30152
- dark: "#874300",
30153
- // 800 — pressed, link hover
30154
- light: "#C06806",
30155
- // 600 — still 4.02:1, safe on borders
30275
+ dark: "#9B3D00",
30276
+ light: "#CE7033",
30156
30277
  contrastText: "#FFFFFF"
30157
30278
  },
30158
30279
  background: {
@@ -30176,16 +30297,16 @@ const AdminBlue = {
30176
30297
  dark: {
30177
30298
  primary: {
30178
30299
  main: darkMain$1,
30179
- dark: alpha(darkMain$1, 0.7),
30180
- light: alpha(darkMain$1, 0.5),
30300
+ dark: "#1F8CB8",
30301
+ light: "#1F6D8C",
30181
30302
  contrastText: common.black
30182
30303
  }
30183
30304
  },
30184
30305
  light: {
30185
30306
  primary: {
30186
30307
  main: lightMain,
30187
- dark: alpha(lightMain, 0.7),
30188
- light: alpha(lightMain, 0.5),
30308
+ dark: "#6C7AD8",
30309
+ light: "#949FE2",
30189
30310
  contrastText: "#FFFFFF"
30190
30311
  }
30191
30312
  }
@@ -30254,6 +30375,22 @@ const AVATAR_OVERRIDES = {
30254
30375
  }]
30255
30376
  }
30256
30377
  };
30378
+ const generateAccordionOverrides = (_uiTheme) => ({
30379
+ MuiAccordion: {
30380
+ defaultProps: {
30381
+ elevation: 0,
30382
+ disableGutters: true
30383
+ },
30384
+ styleOverrides: {
30385
+ root: {
30386
+ backgroundColor: "transparent",
30387
+ "&:before": {
30388
+ display: "none"
30389
+ }
30390
+ }
30391
+ }
30392
+ }
30393
+ });
30257
30394
  const generateButtonOverrides = (_uiTheme) => ({
30258
30395
  MuiButton: {
30259
30396
  styleOverrides: {
@@ -30490,6 +30627,7 @@ const FONT_FACES_CSS = `
30490
30627
  `;
30491
30628
  const generateComponentOverrides = (uiTheme) => ({
30492
30629
  ...AVATAR_OVERRIDES,
30630
+ ...generateAccordionOverrides(),
30493
30631
  ...generateButtonOverrides(),
30494
30632
  ...generateCardOverrides(),
30495
30633
  ...generateTabsOverrides(),
@@ -31301,11 +31439,14 @@ const merge$1 = /* @__PURE__ */ getDefaultExportFromCjs$1(lodash_mergeExports);
31301
31439
  const CONTRAST_THRESHOLD = 4.5;
31302
31440
  const baseLightPalette = {
31303
31441
  contrastThreshold: CONTRAST_THRESHOLD,
31442
+ // Tertiary is a theme-agnostic neutral grey; pinned here rather than
31443
+ // re-stated in every theme file. `main` reads at 6.20:1 as text on white
31444
+ // and 5.97:1 as filled bg behind white — passes AA in both roles.
31304
31445
  tertiary: {
31305
- main: "#8094A3",
31306
- dark: alpha("#8094A3", 0.7),
31307
- light: alpha("#8094A3", 0.5),
31308
- contrastText: "#252525"
31446
+ main: "#5A6172",
31447
+ dark: "#454B59",
31448
+ light: "#767E90",
31449
+ contrastText: "#FFFFFF"
31309
31450
  },
31310
31451
  text: {
31311
31452
  primary: "#000000",
@@ -31314,15 +31455,21 @@ const baseLightPalette = {
31314
31455
  },
31315
31456
  background: {
31316
31457
  default: "#F9F9F9"
31458
+ },
31459
+ error: {
31460
+ main: "#d32f2f",
31461
+ dark: "#b71c1c"
31317
31462
  }
31318
31463
  };
31319
31464
  const baseDarkPalette = {
31320
31465
  contrastThreshold: CONTRAST_THRESHOLD,
31466
+ // Mirrors the light-mode tertiary role: `main` reads at 7.66:1 as text on
31467
+ // the dark page bg (#1D1D1D) and 6.93:1 as filled bg behind dark text.
31321
31468
  tertiary: {
31322
- main: "#6B6B6B",
31323
- dark: alpha("#6B6B6B", 0.7),
31324
- light: alpha("#6B6B6B", 0.5),
31325
- contrastText: "#FFFFFF"
31469
+ main: "#A0A0A0",
31470
+ dark: "#808080",
31471
+ light: "#BFBFBF",
31472
+ contrastText: "#1A1A1A"
31326
31473
  },
31327
31474
  text: {
31328
31475
  primary: "#ececec",
@@ -31333,22 +31480,14 @@ const baseDarkPalette = {
31333
31480
  default: "#1D1D1D",
31334
31481
  paper: "#252525"
31335
31482
  },
31336
- // MUI's dark-mode default success is green[400] (#66bb6a) — bright enough
31337
- // that getContrastText picks dark text (~2.5:1 to white would fail AA).
31338
- // green[800] gives ~5.35:1 to white, so getContrastText resolves to #fff
31339
- // and filled Alert renders success with white text + icon. Restores
31340
- // pre-3.6.0 catalog behaviour without a component-level override.
31483
+ // Darker than MUI's dark-mode default so getContrastText picks white on
31484
+ // filled success Alerts.
31341
31485
  success: {
31342
31486
  main: "#2e7d32"
31343
31487
  },
31344
- // MUI's dark-mode default error.main is red[500] (#f44336). Contrast to
31345
- // white is 3.76:1 — with the 4.5 threshold, getContrastText would flip to
31346
- // dark text on red, changing error's long-standing visual identity.
31347
- // Overriding main to red[700] (#d32f2f, contrast 5.36:1) keeps white text
31348
- // and pushes the actual filled-Alert background (which paints .dark in
31349
- // dark mode) to a slightly deeper red — no component override needed.
31350
31488
  error: {
31351
- main: "#d32f2f"
31489
+ main: "#ff5252",
31490
+ dark: "#c62828"
31352
31491
  },
31353
31492
  grey
31354
31493
  };
@@ -79463,63 +79602,6 @@ const Image$1 = ({
79463
79602
  width: 25,
79464
79603
  height: 20
79465
79604
  } }) });
79466
- const Menu = ({
79467
- "aria-label": ariaLabel,
79468
- button,
79469
- options,
79470
- onSelect,
79471
- onOpenChange,
79472
- menuId = "menu",
79473
- anchorOrigin = {
79474
- vertical: "bottom",
79475
- horizontal: "right"
79476
- },
79477
- transformOrigin = {
79478
- vertical: "top",
79479
- horizontal: "right"
79480
- },
79481
- autoFocusSelected = true,
79482
- sx
79483
- }) => {
79484
- const [anchorEl, setAnchorEl] = React$1.useState(null);
79485
- const open = Boolean(anchorEl);
79486
- const selectedIndex = React$1.useMemo(() => options.findIndex((o2) => o2.selected), [options]);
79487
- const handleOpen = (e) => {
79488
- setAnchorEl(e.currentTarget);
79489
- onOpenChange == null ? void 0 : onOpenChange(true);
79490
- };
79491
- const handleClose = () => {
79492
- setAnchorEl(null);
79493
- onOpenChange == null ? void 0 : onOpenChange(false);
79494
- };
79495
- const ariaControls = open ? menuId : void 0;
79496
- return /* @__PURE__ */ jsxs(Fragment, { children: [
79497
- button({
79498
- onClick: handleOpen,
79499
- "aria-controls": ariaControls,
79500
- "aria-haspopup": true,
79501
- "aria-expanded": open ? true : void 0
79502
- }),
79503
- /* @__PURE__ */ jsx(MUIMenu, { id: menuId, anchorEl, open, onClose: handleClose, anchorOrigin, transformOrigin, MenuListProps: {
79504
- "aria-label": ariaLabel,
79505
- ...autoFocusSelected && selectedIndex >= 0 ? {
79506
- autoFocusItem: true
79507
- } : {}
79508
- }, sx, children: options.flatMap((opt, idx) => {
79509
- const item = /* @__PURE__ */ jsxs(MUIMenuItem, { disabled: opt.disabled, selected: Boolean(opt.selected), autoFocus: autoFocusSelected && idx === selectedIndex, "aria-selected": opt.selected ? "true" : void 0, onClick: () => {
79510
- var _a;
79511
- if (opt.href) window.open(opt.href, opt.target ?? "_self");
79512
- (_a = opt.onClick) == null ? void 0 : _a.call(opt);
79513
- onSelect == null ? void 0 : onSelect(opt);
79514
- handleClose();
79515
- }, children: [
79516
- opt.icon ? /* @__PURE__ */ jsx(MUIListItemIcon, { children: opt.icon }) : null,
79517
- /* @__PURE__ */ jsx(MUIListItemText, { children: opt.label })
79518
- ] }, opt.id);
79519
- return opt.dividerAbove ? [/* @__PURE__ */ jsx(MUIDivider, { component: "li", role: "separator" }, `${opt.id}-divider`), item] : [item];
79520
- }) })
79521
- ] });
79522
- };
79523
79605
  const resolveVisibleBaseLayerIndex = (layers) => {
79524
79606
  const storedLabel = localStorage.getItem("map.baselayer");
79525
79607
  const baseLayers = layers.filter((l) => l.get("kind") !== "overlay-vector");
@@ -87221,7 +87303,11 @@ const mui = {
87221
87303
  Box: Box$1
87222
87304
  };
87223
87305
  export {
87306
+ Accordion,
87307
+ AccordionDetails,
87308
+ AccordionSummary,
87224
87309
  default2 as Alert,
87310
+ default3 as AlertTitle,
87225
87311
  AppBar,
87226
87312
  AppChrome,
87227
87313
  AppInfo,
@@ -87248,6 +87334,7 @@ export {
87248
87334
  CardContent,
87249
87335
  CardHeader,
87250
87336
  Checkbox,
87337
+ ChevronRightIcon,
87251
87338
  Chip,
87252
87339
  ClockIcon,
87253
87340
  CloseIcon,
@@ -87274,6 +87361,8 @@ export {
87274
87361
  ErrorFallback,
87275
87362
  ErrorFallbackText,
87276
87363
  ErrorFallbackWrapper,
87364
+ ExpandLessIcon,
87365
+ ExpandMoreIcon,
87277
87366
  Panel as FixedPanel,
87278
87367
  FlexBox,
87279
87368
  FlexGrid,
@@ -87313,6 +87402,8 @@ export {
87313
87402
  MapIcon,
87314
87403
  MapToggleButtonPresentational,
87315
87404
  MarkerAnchor,
87405
+ Menu,
87406
+ MenuItem,
87316
87407
  MiniSearchAutocomplete,
87317
87408
  MiniSearchBox,
87318
87409
  MinusCircleIcon,
@@ -87321,6 +87412,7 @@ export {
87321
87412
  PlayIcon,
87322
87413
  PlusCircleIcon,
87323
87414
  PopOver,
87415
+ Popper,
87324
87416
  PreferredLabelCache,
87325
87417
  QuestionIcon,
87326
87418
  RecentSearches,
@@ -87332,6 +87424,7 @@ export {
87332
87424
  Skeleton,
87333
87425
  SnackbarProvider,
87334
87426
  Spinner,
87427
+ SvgIcon,
87335
87428
  Switch,
87336
87429
  Tab,
87337
87430
  TabPanel,
@@ -87349,6 +87442,7 @@ export {
87349
87442
  ThemeSwitch,
87350
87443
  ThemeSwitchRow,
87351
87444
  TitleAndContent,
87445
+ ToggleButton,
87352
87446
  Toolbar,
87353
87447
  Tooltip,
87354
87448
  TooltipToggleButton,
@@ -87368,6 +87462,7 @@ export {
87368
87462
  closeSnackbar,
87369
87463
  createApi,
87370
87464
  createRequestApi,
87465
+ dividerClasses,
87371
87466
  ensureFaIconPath,
87372
87467
  getCodec,
87373
87468
  workspace as insetInMap,