@wandelbots/mui 0.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. package/README.md +131 -1
  2. package/dist/components/AdornedSelect/AdornedSelect.cjs +2 -0
  3. package/dist/components/AdornedSelect/AdornedSelect.d.ts +19 -0
  4. package/dist/components/AdornedSelect/AdornedSelect.d.ts.map +1 -0
  5. package/dist/components/AdornedSelect/AdornedSelect.js +85 -0
  6. package/dist/components/AdornedSelect/index.d.ts +2 -0
  7. package/dist/components/AdornedSelect/index.d.ts.map +1 -0
  8. package/dist/components/AdornedTextField/AdornedAutocomplete.cjs +2 -0
  9. package/dist/components/AdornedTextField/AdornedAutocomplete.d.ts +21 -0
  10. package/dist/components/AdornedTextField/AdornedAutocomplete.d.ts.map +1 -0
  11. package/dist/components/AdornedTextField/AdornedAutocomplete.js +47 -0
  12. package/dist/components/AdornedTextField/AdornedTextField.cjs +2 -0
  13. package/dist/components/AdornedTextField/AdornedTextField.d.ts +12 -0
  14. package/dist/components/AdornedTextField/AdornedTextField.d.ts.map +1 -0
  15. package/dist/components/AdornedTextField/AdornedTextField.js +158 -0
  16. package/dist/components/AdornedTextField/index.d.ts +3 -0
  17. package/dist/components/AdornedTextField/index.d.ts.map +1 -0
  18. package/dist/components/ElevationCard/ElevationCard.cjs +2 -0
  19. package/dist/components/ElevationCard/ElevationCard.d.ts +39 -0
  20. package/dist/components/ElevationCard/ElevationCard.d.ts.map +1 -0
  21. package/dist/components/ElevationCard/ElevationCard.js +43 -0
  22. package/dist/components/ElevationCard/index.d.ts +2 -0
  23. package/dist/components/ElevationCard/index.d.ts.map +1 -0
  24. package/dist/components/PrimaryButton/PrimaryButton.cjs +2 -0
  25. package/dist/components/PrimaryButton/PrimaryButton.d.ts +8 -0
  26. package/dist/components/PrimaryButton/PrimaryButton.d.ts.map +1 -0
  27. package/dist/components/PrimaryButton/PrimaryButton.js +18 -0
  28. package/dist/components/PrimaryButton/index.d.ts +2 -0
  29. package/dist/components/PrimaryButton/index.d.ts.map +1 -0
  30. package/dist/components/RoundedIconButton/RoundedIconButton.cjs +2 -0
  31. package/dist/components/RoundedIconButton/RoundedIconButton.d.ts +30 -0
  32. package/dist/components/RoundedIconButton/RoundedIconButton.d.ts.map +1 -0
  33. package/dist/components/RoundedIconButton/RoundedIconButton.js +45 -0
  34. package/dist/components/RoundedIconButton/index.d.ts +2 -0
  35. package/dist/components/RoundedIconButton/index.d.ts.map +1 -0
  36. package/dist/components/SecondaryButton/SecondaryButton.cjs +2 -0
  37. package/dist/components/SecondaryButton/SecondaryButton.d.ts +8 -0
  38. package/dist/components/SecondaryButton/SecondaryButton.d.ts.map +1 -0
  39. package/dist/components/SecondaryButton/SecondaryButton.js +26 -0
  40. package/dist/components/SecondaryButton/index.d.ts +2 -0
  41. package/dist/components/SecondaryButton/index.d.ts.map +1 -0
  42. package/dist/components/fields/FloatTextField.cjs +2 -0
  43. package/dist/components/fields/FloatTextField.d.ts +5 -0
  44. package/dist/components/fields/FloatTextField.d.ts.map +1 -0
  45. package/dist/components/fields/FloatTextField.js +17 -0
  46. package/dist/components/fields/IntegerTextField.cjs +2 -0
  47. package/dist/components/fields/IntegerTextField.d.ts +5 -0
  48. package/dist/components/fields/IntegerTextField.d.ts.map +1 -0
  49. package/dist/components/fields/IntegerTextField.js +17 -0
  50. package/dist/components/fields/IpAddressTextField.cjs +2 -0
  51. package/dist/components/fields/IpAddressTextField.d.ts +5 -0
  52. package/dist/components/fields/IpAddressTextField.d.ts.map +1 -0
  53. package/dist/components/fields/IpAddressTextField.js +17 -0
  54. package/dist/components/fields/ParsingTextField.cjs +2 -0
  55. package/dist/components/fields/ParsingTextField.d.ts +18 -0
  56. package/dist/components/fields/ParsingTextField.d.ts.map +1 -0
  57. package/dist/components/fields/ParsingTextField.js +35 -0
  58. package/dist/components/fields/PortTextField.cjs +2 -0
  59. package/dist/components/fields/PortTextField.d.ts +5 -0
  60. package/dist/components/fields/PortTextField.d.ts.map +1 -0
  61. package/dist/components/fields/PortTextField.js +17 -0
  62. package/dist/components/fields/StringValidationTextField.cjs +2 -0
  63. package/dist/components/fields/StringValidationTextField.d.ts +5 -0
  64. package/dist/components/fields/StringValidationTextField.d.ts.map +1 -0
  65. package/dist/components/fields/StringValidationTextField.js +9 -0
  66. package/dist/components/fields/index.d.ts +7 -0
  67. package/dist/components/fields/index.d.ts.map +1 -0
  68. package/dist/components/index.d.ts +8 -0
  69. package/dist/components/index.d.ts.map +1 -0
  70. package/dist/index.cjs +1 -0
  71. package/dist/index.d.ts +5 -0
  72. package/dist/index.d.ts.map +1 -0
  73. package/dist/index.js +53 -0
  74. package/dist/theme/createNovaMuiTheme.cjs +2 -0
  75. package/dist/theme/createNovaMuiTheme.d.ts +144 -0
  76. package/dist/theme/createNovaMuiTheme.d.ts.map +1 -0
  77. package/dist/theme/createNovaMuiTheme.js +374 -0
  78. package/dist/theme/index.d.ts +3 -0
  79. package/dist/theme/index.d.ts.map +1 -0
  80. package/dist/validators/core.cjs +1 -0
  81. package/dist/validators/core.d.ts +7 -0
  82. package/dist/validators/core.d.ts.map +1 -0
  83. package/dist/validators/core.js +10 -0
  84. package/dist/validators/index.cjs +1 -0
  85. package/dist/validators/index.d.ts +5 -0
  86. package/dist/validators/index.d.ts.map +1 -0
  87. package/dist/validators/index.js +25 -0
  88. package/dist/validators/network.cjs +1 -0
  89. package/dist/validators/network.d.ts +21 -0
  90. package/dist/validators/network.d.ts.map +1 -0
  91. package/dist/validators/network.js +40 -0
  92. package/dist/validators/number.cjs +1 -0
  93. package/dist/validators/number.d.ts +13 -0
  94. package/dist/validators/number.d.ts.map +1 -0
  95. package/dist/validators/number.js +40 -0
  96. package/dist/validators/string.cjs +1 -0
  97. package/dist/validators/string.d.ts +7 -0
  98. package/dist/validators/string.d.ts.map +1 -0
  99. package/dist/validators/string.js +32 -0
  100. package/package.json +79 -3
@@ -0,0 +1,18 @@
1
+ "use client";
2
+ import { jsx as o } from "react/jsx-runtime";
3
+ import t from "@mui/material/Button";
4
+ import { styled as a } from "@mui/material/styles";
5
+ const n = a(t)(({ theme: r }) => ({
6
+ backgroundColor: r.palette.primary.main,
7
+ color: r.palette.primary.contrastText,
8
+ borderRadius: `${r.shape.borderRadius}px`,
9
+ "&:hover": {
10
+ backgroundColor: r.palette.primary.dark
11
+ }
12
+ }));
13
+ function e(r) {
14
+ return /* @__PURE__ */ o(n, { variant: "contained", ...r });
15
+ }
16
+ export {
17
+ e as PrimaryButton
18
+ };
@@ -0,0 +1,2 @@
1
+ export { PrimaryButton, type PrimaryButtonProps } from "./PrimaryButton";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/PrimaryButton/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,iBAAiB,CAAA"}
@@ -0,0 +1,2 @@
1
+ "use client";
2
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const g=require("react/jsx-runtime"),R=require("@mui/material/IconButton");function x({icon:u,onClick:i,bgColor:e,isActive:n,disabled:c,dataTestId:l,ariaLabel:p,href:a,size:s,sx:t,ref:b}){return g.jsx(R,{ref:b,...a?{href:a}:{},size:s,onClick:i,disabled:c,sx:[r=>{var o,d;return{backgroundColor:n!==void 0?n?e??((o=r.palette.backgroundPaperElevation)==null?void 0:o[11]):"transparent":e??((d=r.palette.backgroundPaperElevation)==null?void 0:d[11]),borderRadius:`${r.shape.borderRadius}px`,width:"30px",height:"30px"}},...Array.isArray(t)?t:[t]],"data-testid":l,"aria-label":p,children:u})}exports.RoundedIconButton=x;
@@ -0,0 +1,30 @@
1
+ import type { IconButtonProps } from "@mui/material/IconButton";
2
+ import type { SxProps, Theme } from "@mui/material/styles";
3
+ import type { MouseEventHandler, ReactNode, Ref } from "react";
4
+ export type RoundedIconButtonProps = {
5
+ icon: ReactNode;
6
+ /** Covers both render modes: a `<button>`, or an `<a>` when `href` is set. */
7
+ onClick?: MouseEventHandler<HTMLButtonElement | HTMLAnchorElement>;
8
+ /** Overrides the default background (`backgroundPaperElevation[11]`). */
9
+ bgColor?: string;
10
+ /**
11
+ * If undefined, the button always has a background. If set, it only shows
12
+ * a background when `true`.
13
+ */
14
+ isActive?: boolean;
15
+ disabled?: boolean;
16
+ dataTestId?: string;
17
+ ariaLabel?: string;
18
+ /** Renders the button as a link (forwarded to the underlying `IconButton`/`ButtonBase`). */
19
+ href?: string;
20
+ /** MUI's own size scale, affects icon padding — the 30×30 root size is unaffected. */
21
+ size?: IconButtonProps["size"];
22
+ sx?: SxProps<Theme>;
23
+ ref?: Ref<HTMLButtonElement>;
24
+ };
25
+ /**
26
+ * Small square (30×30) icon button with rounded corners on an elevated
27
+ * background, styled to NovaDeck's canonical look.
28
+ */
29
+ export declare function RoundedIconButton({ icon, onClick, bgColor, isActive, disabled, dataTestId, ariaLabel, href, size, sx, ref, }: RoundedIconButtonProps): import("react").JSX.Element;
30
+ //# sourceMappingURL=RoundedIconButton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RoundedIconButton.d.ts","sourceRoot":"","sources":["../../../src/components/RoundedIconButton/RoundedIconButton.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAC/D,OAAO,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA;AAE9D,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,SAAS,CAAA;IACf,8EAA8E;IAC9E,OAAO,CAAC,EAAE,iBAAiB,CAAC,iBAAiB,GAAG,iBAAiB,CAAC,CAAA;IAClE,yEAAyE;IACzE,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,4FAA4F;IAC5F,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,sFAAsF;IACtF,IAAI,CAAC,EAAE,eAAe,CAAC,MAAM,CAAC,CAAA;IAC9B,EAAE,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAA;IACnB,GAAG,CAAC,EAAE,GAAG,CAAC,iBAAiB,CAAC,CAAA;CAC7B,CAAA;AAYD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,IAAI,EACJ,OAAO,EACP,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,SAAS,EACT,IAAI,EACJ,IAAI,EACJ,EAAE,EACF,GAAG,GACJ,EAAE,sBAAsB,+BA4BxB"}
@@ -0,0 +1,45 @@
1
+ "use client";
2
+ import { jsx as x } from "react/jsx-runtime";
3
+ import g from "@mui/material/IconButton";
4
+ function f({
5
+ icon: i,
6
+ onClick: p,
7
+ bgColor: o,
8
+ isActive: t,
9
+ disabled: u,
10
+ dataTestId: l,
11
+ ariaLabel: c,
12
+ href: n,
13
+ size: b,
14
+ sx: r,
15
+ ref: s
16
+ }) {
17
+ return /* @__PURE__ */ x(
18
+ g,
19
+ {
20
+ ref: s,
21
+ ...n ? { href: n } : {},
22
+ size: b,
23
+ onClick: p,
24
+ disabled: u,
25
+ sx: [
26
+ (a) => {
27
+ var d, e;
28
+ return {
29
+ backgroundColor: t !== void 0 ? t ? o ?? ((d = a.palette.backgroundPaperElevation) == null ? void 0 : d[11]) : "transparent" : o ?? ((e = a.palette.backgroundPaperElevation) == null ? void 0 : e[11]),
30
+ borderRadius: `${a.shape.borderRadius}px`,
31
+ width: "30px",
32
+ height: "30px"
33
+ };
34
+ },
35
+ ...Array.isArray(r) ? r : [r]
36
+ ],
37
+ "data-testid": l,
38
+ "aria-label": c,
39
+ children: i
40
+ }
41
+ );
42
+ }
43
+ export {
44
+ f as RoundedIconButton
45
+ };
@@ -0,0 +1,2 @@
1
+ export * from "./RoundedIconButton";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/RoundedIconButton/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAA"}
@@ -0,0 +1,2 @@
1
+ "use client";
2
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const d=require("react/jsx-runtime"),n=require("@mui/material/Button"),a=require("@mui/material/styles"),i=a.styled(n)(({theme:t,size:o="medium"})=>{var r,e;return{...t.typography.body2,fontWeight:t.typography.fontWeightMedium,background:(e=(r=t.paletteExt)==null?void 0:r.secondary)==null?void 0:e.tonal,color:t.palette.secondary.contrastText,border:`1px solid ${t.palette.divider}`,borderRadius:`${t.shape.borderRadius}px`,padding:o==="small"?"4px 10px":o==="large"?"8px 22px":"6px 16px","&:hover":{background:t.palette.action.hover,border:`1px solid ${t.palette.divider}`}}});function p(t){return d.jsx(i,{...t})}exports.SecondaryButton=p;
@@ -0,0 +1,8 @@
1
+ import type { ButtonProps } from "@mui/material/Button";
2
+ export type SecondaryButtonProps = ButtonProps;
3
+ /**
4
+ * Grey outlined-looking button for secondary actions (Cancel, Export, …),
5
+ * styled to NovaDeck's canonical look. Accepts all MUI `ButtonProps`.
6
+ */
7
+ export declare function SecondaryButton(props: SecondaryButtonProps): import("react").JSX.Element;
8
+ //# sourceMappingURL=SecondaryButton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SecondaryButton.d.ts","sourceRoot":"","sources":["../../../src/components/SecondaryButton/SecondaryButton.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAIvD,MAAM,MAAM,oBAAoB,GAAG,WAAW,CAAA;AAmC9C;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,+BAE1D"}
@@ -0,0 +1,26 @@
1
+ "use client";
2
+ import { jsx as p } from "react/jsx-runtime";
3
+ import a from "@mui/material/Button";
4
+ import { styled as n } from "@mui/material/styles";
5
+ const e = n(a)(({ theme: o, size: r = "medium" }) => {
6
+ var t, d;
7
+ return {
8
+ ...o.typography.body2,
9
+ fontWeight: o.typography.fontWeightMedium,
10
+ background: (d = (t = o.paletteExt) == null ? void 0 : t.secondary) == null ? void 0 : d.tonal,
11
+ color: o.palette.secondary.contrastText,
12
+ border: `1px solid ${o.palette.divider}`,
13
+ borderRadius: `${o.shape.borderRadius}px`,
14
+ padding: r === "small" ? "4px 10px" : r === "large" ? "8px 22px" : "6px 16px",
15
+ "&:hover": {
16
+ background: o.palette.action.hover,
17
+ border: `1px solid ${o.palette.divider}`
18
+ }
19
+ };
20
+ });
21
+ function s(o) {
22
+ return /* @__PURE__ */ p(e, { ...o });
23
+ }
24
+ export {
25
+ s as SecondaryButton
26
+ };
@@ -0,0 +1,2 @@
1
+ export { SecondaryButton, type SecondaryButtonProps } from "./SecondaryButton";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/SecondaryButton/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,KAAK,oBAAoB,EAAE,MAAM,mBAAmB,CAAA"}
@@ -0,0 +1,2 @@
1
+ "use client";
2
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("react/jsx-runtime"),i=require("../../validators/number.cjs"),n=require("./ParsingTextField.cjs");function o(e){return r.jsx(n.ParsingTextField,{parse:i.parseFloatStrict,stringify:t=>t.toString(),...e})}exports.FloatTextField=o;
@@ -0,0 +1,5 @@
1
+ import type { ParsingTextFieldProps } from "./ParsingTextField";
2
+ export type FloatTextFieldProps = Omit<ParsingTextFieldProps<number>, "parse" | "stringify">;
3
+ /** Text field that accepts only valid floating point numbers. */
4
+ export declare function FloatTextField(props: FloatTextFieldProps): import("react").JSX.Element;
5
+ //# sourceMappingURL=FloatTextField.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FloatTextField.d.ts","sourceRoot":"","sources":["../../../src/components/fields/FloatTextField.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAK/D,MAAM,MAAM,mBAAmB,GAAG,IAAI,CACpC,qBAAqB,CAAC,MAAM,CAAC,EAC7B,OAAO,GAAG,WAAW,CACtB,CAAA;AAED,iEAAiE;AACjE,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,+BAQxD"}
@@ -0,0 +1,17 @@
1
+ "use client";
2
+ import { jsx as i } from "react/jsx-runtime";
3
+ import { parseFloatStrict as o } from "../../validators/number.js";
4
+ import { ParsingTextField as e } from "./ParsingTextField.js";
5
+ function a(r) {
6
+ return /* @__PURE__ */ i(
7
+ e,
8
+ {
9
+ parse: o,
10
+ stringify: (t) => t.toString(),
11
+ ...r
12
+ }
13
+ );
14
+ }
15
+ export {
16
+ a as FloatTextField
17
+ };
@@ -0,0 +1,2 @@
1
+ "use client";
2
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),i=require("../../validators/number.cjs"),n=require("./ParsingTextField.cjs");function s(e){return t.jsx(n.ParsingTextField,{parse:i.parseInteger,stringify:r=>r.toString(),...e})}exports.IntegerTextField=s;
@@ -0,0 +1,5 @@
1
+ import type { ParsingTextFieldProps } from "./ParsingTextField";
2
+ export type IntegerTextFieldProps = Omit<ParsingTextFieldProps<number>, "parse" | "stringify">;
3
+ /** Text field that accepts only whole numbers. */
4
+ export declare function IntegerTextField(props: IntegerTextFieldProps): import("react").JSX.Element;
5
+ //# sourceMappingURL=IntegerTextField.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IntegerTextField.d.ts","sourceRoot":"","sources":["../../../src/components/fields/IntegerTextField.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAG/D,MAAM,MAAM,qBAAqB,GAAG,IAAI,CACtC,qBAAqB,CAAC,MAAM,CAAC,EAC7B,OAAO,GAAG,WAAW,CACtB,CAAA;AAED,kDAAkD;AAClD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,+BAQ5D"}
@@ -0,0 +1,17 @@
1
+ "use client";
2
+ import { jsx as e } from "react/jsx-runtime";
3
+ import { parseInteger as i } from "../../validators/number.js";
4
+ import { ParsingTextField as o } from "./ParsingTextField.js";
5
+ function f(r) {
6
+ return /* @__PURE__ */ e(
7
+ o,
8
+ {
9
+ parse: i,
10
+ stringify: (t) => t.toString(),
11
+ ...r
12
+ }
13
+ );
14
+ }
15
+ export {
16
+ f as IntegerTextField
17
+ };
@@ -0,0 +1,2 @@
1
+ "use client";
2
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),i=require("../../validators/network.cjs"),s=require("./ParsingTextField.cjs");function n(e){return t.jsx(s.ParsingTextField,{parse:i.parseIpv4,stringify:r=>r,...e})}exports.IpAddressTextField=n;
@@ -0,0 +1,5 @@
1
+ import type { ParsingTextFieldProps } from "./ParsingTextField";
2
+ export type IpAddressTextFieldProps = Omit<ParsingTextFieldProps<string>, "parse" | "stringify">;
3
+ /** Text field that accepts only valid IPv4 addresses. */
4
+ export declare function IpAddressTextField(props: IpAddressTextFieldProps): import("react").JSX.Element;
5
+ //# sourceMappingURL=IpAddressTextField.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IpAddressTextField.d.ts","sourceRoot":"","sources":["../../../src/components/fields/IpAddressTextField.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAI/D,MAAM,MAAM,uBAAuB,GAAG,IAAI,CACxC,qBAAqB,CAAC,MAAM,CAAC,EAC7B,OAAO,GAAG,WAAW,CACtB,CAAA;AAED,yDAAyD;AACzD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,uBAAuB,+BAQhE"}
@@ -0,0 +1,17 @@
1
+ "use client";
2
+ import { jsx as i } from "react/jsx-runtime";
3
+ import { parseIpv4 as t } from "../../validators/network.js";
4
+ import { ParsingTextField as o } from "./ParsingTextField.js";
5
+ function f(r) {
6
+ return /* @__PURE__ */ i(
7
+ o,
8
+ {
9
+ parse: t,
10
+ stringify: (e) => e,
11
+ ...r
12
+ }
13
+ );
14
+ }
15
+ export {
16
+ f as IpAddressTextField
17
+ };
@@ -0,0 +1,2 @@
1
+ "use client";
2
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c=require("react/jsx-runtime"),q=require("@mui/material/TextField"),l=require("react"),P=require("../AdornedTextField/AdornedTextField.cjs");function f({initialValue:d,onChange:n,parse:x,stringify:o,onErrorStateChange:e,plain:T,adornedSize:p,...a}){const[F,j]=l.useState(o(d)),[t,u]=l.useState(""),r={value:F,onChange:i=>{j(i.target.value);try{const s=x(i.target.value);n(s),u(""),e==null||e(!1)}catch(s){u(s.message),e==null||e(!0)}},error:t!=="",helperText:t,...a};return T?c.jsx(q,{...r}):c.jsx(P.AdornedTextField,{adornedSize:p,...r})}exports.ParsingTextField=f;
@@ -0,0 +1,18 @@
1
+ import type { AdornedTextFieldProps } from "../AdornedTextField";
2
+ export interface ParsingTextFieldProps<T> extends Omit<AdornedTextFieldProps, "value" | "onChange" | "error" | "helperText"> {
3
+ initialValue: T;
4
+ onChange: (value: T) => void;
5
+ /** Throws `Error(message)` on invalid input; the message becomes the helper text. */
6
+ parse: (value: string) => T;
7
+ stringify: (value: T) => string;
8
+ onErrorStateChange?: (hasError: boolean) => void;
9
+ /** Render a plain MUI TextField instead of the AdornedTextField base. */
10
+ plain?: boolean;
11
+ }
12
+ /**
13
+ * Text field driven by a throwing parser: on every change the raw input is
14
+ * parsed; success calls `onChange(parsed)`, a throw shows the error message
15
+ * as helper text. The proven RobotPad pattern.
16
+ */
17
+ export declare function ParsingTextField<T>({ initialValue, onChange, parse, stringify, onErrorStateChange, plain, adornedSize, ...textFieldProps }: ParsingTextFieldProps<T>): import("react").JSX.Element;
18
+ //# sourceMappingURL=ParsingTextField.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ParsingTextField.d.ts","sourceRoot":"","sources":["../../../src/components/fields/ParsingTextField.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAMhE,MAAM,WAAW,qBAAqB,CAAC,CAAC,CACtC,SAAQ,IAAI,CACV,qBAAqB,EACrB,OAAO,GAAG,UAAU,GAAG,OAAO,GAAG,YAAY,CAC9C;IACD,YAAY,EAAE,CAAC,CAAA;IACf,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAA;IAC5B,qFAAqF;IACrF,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,CAAC,CAAA;IAC3B,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,MAAM,CAAA;IAC/B,kBAAkB,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAA;IAChD,yEAAyE;IACzE,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,EAClC,YAAY,EACZ,QAAQ,EACR,KAAK,EACL,SAAS,EACT,kBAAkB,EAClB,KAAK,EACL,WAAW,EACX,GAAG,cAAc,EAClB,EAAE,qBAAqB,CAAC,CAAC,CAAC,+BAiC1B"}
@@ -0,0 +1,35 @@
1
+ "use client";
2
+ import { jsx as l } from "react/jsx-runtime";
3
+ import V from "@mui/material/TextField";
4
+ import { useState as i } from "react";
5
+ import { AdornedTextField as a } from "../AdornedTextField/AdornedTextField.js";
6
+ function b({
7
+ initialValue: c,
8
+ onChange: m,
9
+ parse: o,
10
+ stringify: x,
11
+ onErrorStateChange: s,
12
+ plain: d,
13
+ adornedSize: f,
14
+ ...T
15
+ }) {
16
+ const [F, I] = i(x(c)), [t, u] = i(""), p = {
17
+ value: F,
18
+ onChange: (r) => {
19
+ I(r.target.value);
20
+ try {
21
+ const e = o(r.target.value);
22
+ m(e), u(""), s == null || s(!1);
23
+ } catch (e) {
24
+ u(e.message), s == null || s(!0);
25
+ }
26
+ },
27
+ error: t !== "",
28
+ helperText: t,
29
+ ...T
30
+ };
31
+ return d ? /* @__PURE__ */ l(V, { ...p }) : /* @__PURE__ */ l(a, { adornedSize: f, ...p });
32
+ }
33
+ export {
34
+ b as ParsingTextField
35
+ };
@@ -0,0 +1,2 @@
1
+ "use client";
2
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("react/jsx-runtime"),i=require("../../validators/network.cjs"),n=require("./ParsingTextField.cjs");function o(e){return r.jsx(n.ParsingTextField,{parse:i.parsePort,stringify:t=>t.toString(),...e})}exports.PortTextField=o;
@@ -0,0 +1,5 @@
1
+ import type { ParsingTextFieldProps } from "./ParsingTextField";
2
+ export type PortTextFieldProps = Omit<ParsingTextFieldProps<number>, "parse" | "stringify">;
3
+ /** Text field that accepts only valid ports (1–65535). */
4
+ export declare function PortTextField(props: PortTextFieldProps): import("react").JSX.Element;
5
+ //# sourceMappingURL=PortTextField.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PortTextField.d.ts","sourceRoot":"","sources":["../../../src/components/fields/PortTextField.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAG/D,MAAM,MAAM,kBAAkB,GAAG,IAAI,CACnC,qBAAqB,CAAC,MAAM,CAAC,EAC7B,OAAO,GAAG,WAAW,CACtB,CAAA;AAED,0DAA0D;AAC1D,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,+BAQtD"}
@@ -0,0 +1,17 @@
1
+ "use client";
2
+ import { jsx as o } from "react/jsx-runtime";
3
+ import { parsePort as i } from "../../validators/network.js";
4
+ import { ParsingTextField as e } from "./ParsingTextField.js";
5
+ function f(r) {
6
+ return /* @__PURE__ */ o(
7
+ e,
8
+ {
9
+ parse: i,
10
+ stringify: (t) => t.toString(),
11
+ ...r
12
+ }
13
+ );
14
+ }
15
+ export {
16
+ f as PortTextField
17
+ };
@@ -0,0 +1,2 @@
1
+ "use client";
2
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),n=require("./ParsingTextField.cjs");function r(e){return t.jsx(n.ParsingTextField,{stringify:i=>i,...e})}exports.StringValidationTextField=r;
@@ -0,0 +1,5 @@
1
+ import type { ParsingTextFieldProps } from "./ParsingTextField";
2
+ export type StringValidationTextFieldProps = Omit<ParsingTextFieldProps<string>, "stringify">;
3
+ /** String field with a caller-supplied throwing validator as `parse`. */
4
+ export declare function StringValidationTextField(props: StringValidationTextFieldProps): import("react").JSX.Element;
5
+ //# sourceMappingURL=StringValidationTextField.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StringValidationTextField.d.ts","sourceRoot":"","sources":["../../../src/components/fields/StringValidationTextField.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAI/D,MAAM,MAAM,8BAA8B,GAAG,IAAI,CAC/C,qBAAqB,CAAC,MAAM,CAAC,EAC7B,WAAW,CACZ,CAAA;AAED,yEAAyE;AACzE,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,8BAA8B,+BAGtC"}
@@ -0,0 +1,9 @@
1
+ "use client";
2
+ import { jsx as t } from "react/jsx-runtime";
3
+ import { ParsingTextField as n } from "./ParsingTextField.js";
4
+ function f(i) {
5
+ return /* @__PURE__ */ t(n, { stringify: (r) => r, ...i });
6
+ }
7
+ export {
8
+ f as StringValidationTextField
9
+ };
@@ -0,0 +1,7 @@
1
+ export * from "./FloatTextField";
2
+ export * from "./IntegerTextField";
3
+ export * from "./IpAddressTextField";
4
+ export * from "./ParsingTextField";
5
+ export * from "./PortTextField";
6
+ export * from "./StringValidationTextField";
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/fields/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA;AAChC,cAAc,oBAAoB,CAAA;AAClC,cAAc,sBAAsB,CAAA;AACpC,cAAc,oBAAoB,CAAA;AAClC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,6BAA6B,CAAA"}
@@ -0,0 +1,8 @@
1
+ export * from "./AdornedSelect";
2
+ export * from "./AdornedTextField";
3
+ export * from "./ElevationCard";
4
+ export * from "./fields";
5
+ export * from "./PrimaryButton";
6
+ export * from "./RoundedIconButton";
7
+ export * from "./SecondaryButton";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA;AAC/B,cAAc,oBAAoB,CAAA;AAClC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,UAAU,CAAA;AACxB,cAAc,iBAAiB,CAAA;AAC/B,cAAc,qBAAqB,CAAA;AACnC,cAAc,mBAAmB,CAAA"}
package/dist/index.cjs ADDED
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("./validators/core.cjs"),e=require("./validators/network.cjs"),t=require("./validators/number.cjs"),r=require("./validators/string.cjs"),o=require("./components/AdornedTextField/AdornedAutocomplete.cjs"),i=require("./components/AdornedSelect/AdornedSelect.cjs"),a=require("./components/AdornedTextField/AdornedTextField.cjs"),d=require("./components/ElevationCard/ElevationCard.cjs"),s=require("./components/fields/FloatTextField.cjs"),l=require("./components/fields/IntegerTextField.cjs"),c=require("./components/fields/IpAddressTextField.cjs"),u=require("./components/fields/ParsingTextField.cjs"),p=require("./components/fields/PortTextField.cjs"),F=require("./components/PrimaryButton/PrimaryButton.cjs"),T=require("./components/RoundedIconButton/RoundedIconButton.cjs"),g=require("./components/SecondaryButton/SecondaryButton.cjs"),m=require("./components/fields/StringValidationTextField.cjs"),x=require("./theme/createNovaMuiTheme.cjs");exports.assertValid=n.assertValid;exports.isCidr=e.isCidr;exports.isHostname=e.isHostname;exports.isHttpUrl=e.isHttpUrl;exports.isIpv4=e.isIpv4;exports.isPort=e.isPort;exports.parseCidr=e.parseCidr;exports.parseHostname=e.parseHostname;exports.parseHttpUrl=e.parseHttpUrl;exports.parseIpv4=e.parseIpv4;exports.parsePort=e.parsePort;exports.parseFloatInRange=t.parseFloatInRange;exports.parseFloatStrict=t.parseFloatStrict;exports.parseInteger=t.parseInteger;exports.parseIntegerInRange=t.parseIntegerInRange;exports.matches=r.matches;exports.maxLength=r.maxLength;exports.minLength=r.minLength;exports.nonEmpty=r.nonEmpty;exports.AdornedAutocomplete=o.AdornedAutocomplete;exports.AdornedSelect=i.AdornedSelect;exports.AdornedTextField=a.AdornedTextField;exports.ElevationCard=d.ElevationCard;exports.FloatTextField=s.FloatTextField;exports.IntegerTextField=l.IntegerTextField;exports.IpAddressTextField=c.IpAddressTextField;exports.ParsingTextField=u.ParsingTextField;exports.PortTextField=p.PortTextField;exports.PrimaryButton=F.PrimaryButton;exports.RoundedIconButton=T.RoundedIconButton;exports.SecondaryButton=g.SecondaryButton;exports.StringValidationTextField=m.StringValidationTextField;exports.createNovaMuiTheme=x.createNovaMuiTheme;
@@ -0,0 +1,5 @@
1
+ export * from "./components";
2
+ export type { BackgroundPaperElevation, NovaPaletteExt } from "./theme";
3
+ export { createNovaMuiTheme } from "./theme";
4
+ export * from "./validators";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,cAAc,cAAc,CAAA;AAC5B,YAAY,EAAE,wBAAwB,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAC5C,cAAc,cAAc,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,53 @@
1
+ import { assertValid as t } from "./validators/core.js";
2
+ import { isCidr as p, isHostname as a, isHttpUrl as m, isIpv4 as n, isPort as x, parseCidr as i, parseHostname as d, parseHttpUrl as s, parseIpv4 as f, parsePort as l } from "./validators/network.js";
3
+ import { parseFloatInRange as g, parseFloatStrict as I, parseInteger as T, parseIntegerInRange as c } from "./validators/number.js";
4
+ import { matches as A, maxLength as P, minLength as h, nonEmpty as v } from "./validators/string.js";
5
+ import { AdornedAutocomplete as S } from "./components/AdornedTextField/AdornedAutocomplete.js";
6
+ import { AdornedSelect as B } from "./components/AdornedSelect/AdornedSelect.js";
7
+ import { AdornedTextField as R } from "./components/AdornedTextField/AdornedTextField.js";
8
+ import { ElevationCard as L } from "./components/ElevationCard/ElevationCard.js";
9
+ import { FloatTextField as V } from "./components/fields/FloatTextField.js";
10
+ import { IntegerTextField as N } from "./components/fields/IntegerTextField.js";
11
+ import { IpAddressTextField as j } from "./components/fields/IpAddressTextField.js";
12
+ import { ParsingTextField as q } from "./components/fields/ParsingTextField.js";
13
+ import { PortTextField as z } from "./components/fields/PortTextField.js";
14
+ import { PrimaryButton as G } from "./components/PrimaryButton/PrimaryButton.js";
15
+ import { RoundedIconButton as K } from "./components/RoundedIconButton/RoundedIconButton.js";
16
+ import { SecondaryButton as Q } from "./components/SecondaryButton/SecondaryButton.js";
17
+ import { StringValidationTextField as X } from "./components/fields/StringValidationTextField.js";
18
+ import { createNovaMuiTheme as Z } from "./theme/createNovaMuiTheme.js";
19
+ export {
20
+ S as AdornedAutocomplete,
21
+ B as AdornedSelect,
22
+ R as AdornedTextField,
23
+ L as ElevationCard,
24
+ V as FloatTextField,
25
+ N as IntegerTextField,
26
+ j as IpAddressTextField,
27
+ q as ParsingTextField,
28
+ z as PortTextField,
29
+ G as PrimaryButton,
30
+ K as RoundedIconButton,
31
+ Q as SecondaryButton,
32
+ X as StringValidationTextField,
33
+ t as assertValid,
34
+ Z as createNovaMuiTheme,
35
+ p as isCidr,
36
+ a as isHostname,
37
+ m as isHttpUrl,
38
+ n as isIpv4,
39
+ x as isPort,
40
+ A as matches,
41
+ P as maxLength,
42
+ h as minLength,
43
+ v as nonEmpty,
44
+ i as parseCidr,
45
+ g as parseFloatInRange,
46
+ I as parseFloatStrict,
47
+ d as parseHostname,
48
+ s as parseHttpUrl,
49
+ T as parseInteger,
50
+ c as parseIntegerInRange,
51
+ f as parseIpv4,
52
+ l as parsePort
53
+ };
@@ -0,0 +1,2 @@
1
+ "use client";
2
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const d=require("@mui/material/styles"),e=require("@wandelbots/design-tokens");function n(){return{palette:{mode:"dark",text:{primary:e.ZeroGravityTextPrimary,secondary:e.ZeroGravityTextSecondary,disabled:e.ZeroGravityTextDisabled},primary:{main:e.ZeroGravityNovaViolet5,dark:e.ZeroGravityNovaViolet4,light:e.ZeroGravityNovaViolet6,contrastText:"rgba(255, 255, 255, 0.87)"},secondary:{main:e.ZeroGravitySecondaryMain,dark:e.ZeroGravitySecondaryDark,contrastText:e.ZeroGravitySecondaryContrast},tertiary:{main:e.ColorsTealA200,dark:e.ColorsTeal400,light:e.ColorsTealA100,contrastText:"rgba(0, 0, 0, 1)"},error:{main:e.ColorsRed400,dark:e.ColorsRed600,light:e.ColorsRed200,contrastText:"rgba(255, 255, 255, 1)"},warning:{main:e.ColorsOrangeA200,dark:e.ColorsOrangeA400,light:e.ColorsOrangeA100,contrastText:"rgba(0, 0, 0, 0.87)"},success:{main:e.ColorsTeal400,dark:e.ColorsTeal700,light:e.ColorsTeal200,contrastText:"rgba(255, 255, 255, 0.87)"},background:{default:"#161825",paper:"#11131f"},action:{active:e.ZeroGravityActionActive,hover:e.ZeroGravityActionHover,selected:e.ZeroGravityActionSelected,disabledBackground:e.ZeroGravityActionDisabledBackground,focus:"#ffffff1f",disabled:e.ZeroGravityActionDisabled},common:{white:"rgba(255, 255, 255, 1)",black:"rgba(0, 0, 0, 1)"},divider:e.ZeroGravityDivider,backgroundPaperElevation:{0:"#11131f",1:e.ZeroGravityBackgroundPaperElevation1,2:e.ZeroGravityBackgroundPaperElevation2,3:"#1a1c2b",4:"#1d1f2f",5:e.ZeroGravityBackgroundPaperElevation5,6:"#232537",7:"#26283b",8:e.ZeroGravityBackgroundPaperElevation8,9:"#2c2e43",10:"#2f3147",11:e.ZeroGravityBackgroundPaperElevation11,12:"#35374f",13:"#383a53",14:"#3b3d57",15:"#3e405b",16:"#393f57"}},paletteExt:{primary:{hover:`${e.ZeroGravityNovaViolet5}14`,selected:`${e.ZeroGravityNovaViolet5}29`,focus:`${e.ZeroGravityNovaViolet5}1f`,focusVisible:`${e.ZeroGravityNovaViolet5}4d`,outlineBorder:`${e.ZeroGravityNovaViolet5}80`},secondary:{tonal:e.ZeroGravitySecondaryTonal},components:{inputFilledEnabledFill:e.ZeroGravityComponentsInputFilledEnabledFill}},shape:{borderRadius:Number.parseInt(e.RadiusSm,10)},typography:{fontFamily:'"Inter", "Roboto", "Helvetica", "Arial", system-ui, sans-serif',fontWeightRegular:500,body2:{fontSize:14,fontWeight:400}}}}function l(){const t=e.RadiusSm;return{MuiCssBaseline:{styleOverrides:{"html, body, *":{scrollbarWidth:"none",msOverflowStyle:"none"},"html:hover, body:hover, *:hover":{scrollbarWidth:"thin",scrollbarColor:`${e.ZeroGravityDivider} transparent`}}},MuiButton:{styleOverrides:{root:{textTransform:"none",borderRadius:t}},variants:[{props:{color:"secondary",variant:"contained"},style:({theme:r})=>{var o,a,i;return{border:`1px solid ${r.palette.divider}`,background:(i=(a=(o=r.paletteExt)==null?void 0:o.secondary)==null?void 0:a.tonal)==null?void 0:i.toString()}}},{props:{color:"secondary",variant:"outlined"},style:({theme:r})=>({border:`1px solid ${r.palette.divider}`})}]},MuiTab:{styleOverrides:{root:({theme:r})=>({textTransform:"none",color:r.palette.text.secondary,"&.Mui-selected":{color:r.palette.text.primary}})}},MuiTabs:{styleOverrides:{root:({theme:r})=>{var o;return{background:(o=r.palette.backgroundPaperElevation)==null?void 0:o[1]}}}},MuiToggleButtonGroup:{styleOverrides:{root:{".MuiToggleButtonGroup-firstButton":{borderRadius:`${t} 0 0 ${t}`},".MuiToggleButtonGroup-lastButton":{borderRadius:`0 ${t} ${t} 0`}}}},MuiToggleButton:{styleOverrides:{root:{textTransform:"none",padding:"6px 16px"}}},MuiAutocomplete:{styleOverrides:{root:({theme:r})=>({background:r.palette.secondary.dark,fieldset:{border:"none"},"&.MuiAutocomplete-root":{borderRadius:"16px",border:"1px solid transparent"},"&.Mui-focused":{border:`1px solid ${r.palette.primary.main}`,label:{transform:"translate(14px, 6px) scale(0.75)",color:r.palette.text.secondary}},"&.MuiAutocomplete-hasClearIcon":{label:{transform:"translate(14px, 6px) scale(0.75)"}},label:{color:r.palette.text.secondary},input:{transform:"translate(0px, 6px)"}})}},MuiSelect:{styleOverrides:{root:({theme:r})=>({background:r.palette.secondary.dark,borderRadius:"16px",border:"1px solid transparent",fieldset:{border:"none"},"&:hover":{border:`1px solid ${r.palette.action.hover}`},"&.Mui-focused":{border:`1px solid ${r.palette.primary.main}`}})},variants:[{props:{variant:"filled"},style:{borderRadius:t,"::before, ::after":{visibility:"collapse"},".MuiInputBase-input":{padding:"6px 16px",borderRadius:t}}}]},MuiTooltip:{styleOverrides:{tooltip:({theme:r})=>{var o;return{background:(o=r.palette.backgroundPaperElevation)==null?void 0:o[1],border:`1px solid ${r.palette.divider}`,borderRadius:e.RadiusSm,padding:"8px 12px",lineHeight:"1.8em",fontWeight:"300",fontSize:"10px",maxWidth:"260px"}},arrow:({theme:r})=>{var o;return{"&:before":{border:`1px solid ${r.palette.divider}`,background:(o=r.palette.backgroundPaperElevation)==null?void 0:o[1]},color:r.palette.common.white}}}},MuiDrawer:{styleOverrides:{paper:{border:"none",boxShadow:"4px 0 8px -4px rgba(0, 0, 0, 0.3)"}}},MuiDialog:{styleOverrides:{paper:({theme:r})=>{var o;return{background:(o=r.palette.backgroundPaperElevation)==null?void 0:o[2],border:`1px solid ${r.palette.divider}`,borderRadius:"16px"}}}},MuiFab:{styleOverrides:{root:({theme:r})=>{var o,a;return{background:(a=(o=r.paletteExt)==null?void 0:o.secondary)==null?void 0:a.tonal}}},variants:[{props:{color:"primary"},style:({theme:r})=>({background:r.palette.primary.main})}]}}}function s(t){var r;for(const o of t)if(((r=o==null?void 0:o.palette)==null?void 0:r.mode)==="light")throw new Error("createNovaMuiTheme: palette.mode 'light' is not yet supported by @wandelbots/mui. Use the default dark theme or omit palette.mode. Light tokens will land when synced from Figma.")}function p(...t){return s(t),d.createTheme(n(),{components:l()},...t)}exports.commonComponents=l;exports.createNovaMuiTheme=p;exports.darkBaseOptions=n;