@iress-oss/ids-components 6.0.0-alpha.16 → 6.0.0-alpha.18

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 (46) hide show
  1. package/dist/components/Autocomplete/Autocomplete.styles.js +5 -1
  2. package/dist/components/Autocomplete/hooks/useAutocompleteSearch.js +53 -51
  3. package/dist/components/Badge/Badge.styles.js +2 -0
  4. package/dist/components/Card/Card.styles.d.ts +1 -1
  5. package/dist/components/Card/Card.styles.js +3 -1
  6. package/dist/components/Checkbox/Checkbox.styles.js +2 -0
  7. package/dist/components/Expander/Expander.styles.js +2 -0
  8. package/dist/components/Filter/Filter.styles.d.ts +1 -1
  9. package/dist/components/Filter/components/FilterSearch.d.ts +2 -1
  10. package/dist/components/Input/Input.d.ts +15 -6
  11. package/dist/components/Input/Input.js +92 -82
  12. package/dist/components/Input/Input.styles.d.ts +8 -0
  13. package/dist/components/Input/Input.styles.js +11 -1
  14. package/dist/components/Modal/Modal.styles.d.ts +0 -1
  15. package/dist/components/Modal/Modal.styles.js +7 -3
  16. package/dist/components/Panel/Panel.styles.js +2 -0
  17. package/dist/components/Popover/Popover.styles.js +2 -0
  18. package/dist/components/Progress/Progress.d.ts +6 -1
  19. package/dist/components/Progress/Progress.js +38 -36
  20. package/dist/components/Progress/Progress.styles.js +8 -0
  21. package/dist/components/Radio/Radio.styles.js +2 -0
  22. package/dist/components/RichSelect/RichSelect.styles.js +2 -0
  23. package/dist/components/RichSelect/SelectBody/SelectBody.styles.js +2 -0
  24. package/dist/components/RichSelect/SelectMenu/SelectMenu.styles.js +2 -0
  25. package/dist/components/RichSelect/SelectSearchInput/SelectSearchInput.styles.js +2 -0
  26. package/dist/components/RichSelect/SelectTags/SelectTags.styles.js +2 -0
  27. package/dist/components/Select/Select.styles.js +4 -2
  28. package/dist/components/Slideout/Slideout.js +1 -1
  29. package/dist/components/Slideout/Slideout.styles.js +4 -1
  30. package/dist/components/Slider/Slider.styles.js +2 -0
  31. package/dist/components/Spinner/Spinner.d.ts +22 -3
  32. package/dist/components/Spinner/Spinner.js +35 -19
  33. package/dist/components/Spinner/Spinner.styles.d.ts +1 -0
  34. package/dist/components/Spinner/Spinner.styles.js +32 -4
  35. package/dist/components/Spinner/index.js +3 -2
  36. package/dist/components/TabSet/TabSet.styles.js +2 -0
  37. package/dist/components/Tag/Tag.styles.d.ts +6 -0
  38. package/dist/components/Tag/Tag.styles.js +10 -2
  39. package/dist/components/Toggle/Toggle.styles.js +2 -0
  40. package/dist/components/Tooltip/Tooltip.styles.js +4 -2
  41. package/dist/main.js +108 -107
  42. package/dist/patterns/Loading/Loading.styles.d.ts +1 -1
  43. package/dist/patterns/Shadow/Shadow.js +110 -38
  44. package/dist/style.css +1 -1
  45. package/dist/styled-system/types/prop-type.d.ts +1 -1
  46. package/package.json +3 -2
@@ -7,7 +7,7 @@ const o = [
7
7
  "content",
8
8
  "footer",
9
9
  "pushElement"
10
- ], t = a({
10
+ ], i = a({
11
11
  slots: o,
12
12
  base: {
13
13
  backdrop: {
@@ -19,6 +19,9 @@ const o = [
19
19
  top: "spacing.2",
20
20
  right: "spacing.2"
21
21
  },
22
+ content: {
23
+ scrollable: "y"
24
+ },
22
25
  header: {
23
26
  mb: "spacing.4"
24
27
  },
@@ -26,6 +29,8 @@ const o = [
26
29
  borderBlockStart: "divider"
27
30
  },
28
31
  modal: {
32
+ // Performance: CSS containment (no paint due to fixed positioning)
33
+ contain: "layout style",
29
34
  position: "relative",
30
35
  borderRadius: "radius.system.layout",
31
36
  padding: "spacing.0",
@@ -62,7 +67,6 @@ const o = [
62
67
  content: {
63
68
  flex: "[1]",
64
69
  overflowX: "hidden",
65
- scrollable: "y",
66
70
  maxHeight: "[calc(100vh - ({spacing.spacing.7} * 2))]",
67
71
  "@media (min-height: 600px)": {
68
72
  maxHeight: "[calc(100vh - (100px * 2))]"
@@ -151,5 +155,5 @@ const o = [
151
155
  }
152
156
  });
153
157
  export {
154
- t as modal
158
+ i as modal
155
159
  };
@@ -1,6 +1,8 @@
1
1
  import { c as a } from "../../cva-DtPMccE9.js";
2
2
  const o = a({
3
3
  base: {
4
+ // Performance: CSS containment (no paint to allow overflow)
5
+ contain: "layout style",
4
6
  display: "block",
5
7
  boxSizing: "border-box",
6
8
  borderRadius: "radius.system.layout",
@@ -9,6 +9,8 @@ const a = t({
9
9
  display: "inline-block"
10
10
  },
11
11
  content: {
12
+ // Performance: CSS containment (no paint due to floating nature)
13
+ contain: "layout style",
12
14
  bg: "colour.neutral.10",
13
15
  border: "divider",
14
16
  borderRadius: "radius.system.form",
@@ -11,6 +11,10 @@ type ProgressElement<TMin extends number | undefined = undefined> = TMin extends
11
11
  * - `IressProgressProps<0>` will use the attributes of a `<meter />` element.
12
12
  */
13
13
  export type IressProgressProps<TMin extends number | undefined = undefined> = Omit<IressStyledProps<ProgressElement<TMin>>, 'borderRadius' | 'value'> & {
14
+ /**
15
+ * A background image URL to be used as the background of the progress bar.
16
+ */
17
+ backgroundImage?: string;
14
18
  /**
15
19
  * The **`border-radius`** CSS property rounds the corners of an element's outer border edge using the radius tokens in the design system.
16
20
  * @see https://developer.mozilla.org/docs/Web/CSS/border-radius
@@ -39,9 +43,10 @@ export type IressProgressProps<TMin extends number | undefined = undefined> = Om
39
43
  };
40
44
  export interface ProgressCustomCSSProperties extends CSSProperties {
41
45
  '--iress-border-radius'?: string;
46
+ '--iress-background-image'?: string;
42
47
  }
43
48
  export declare const IressProgress: {
44
- <TMin extends number | undefined = undefined>({ borderRadius, className: classNameProp, max, min, sectionTitle, style: styleProp, value, ...restProps }: IressProgressProps<TMin>): import("react/jsx-runtime").JSX.Element;
49
+ <TMin extends number | undefined = undefined>({ backgroundImage, borderRadius, className: classNameProp, max, min, sectionTitle, style: styleProp, value, ...restProps }: IressProgressProps<TMin>): import("react/jsx-runtime").JSX.Element;
45
50
  displayName: string;
46
51
  };
47
52
  export {};
@@ -1,57 +1,59 @@
1
- import { jsx as m } from "react/jsx-runtime";
1
+ import { jsx as n } from "react/jsx-runtime";
2
2
  import { stringReplacer as P } from "../../helpers/formatting/stringReplacer.js";
3
- import { c as v } from "../../css-DNdLYQld.js";
4
- import { c as y } from "../../cx-DN21T1EH.js";
5
- import { progress as S } from "./Progress.styles.js";
6
- import { s as n } from "../../factory-CsinCTPr.js";
7
- import { s as b } from "../../is-valid-prop-DweT-eOL.js";
8
- import { GlobalCSSClass as x } from "../../enums.js";
9
- import { t as C } from "../../index-Bm5rQqn5.js";
10
- const N = ({
11
- borderRadius: e,
12
- className: p,
3
+ import { c as y } from "../../css-DNdLYQld.js";
4
+ import { c as S } from "../../cx-DN21T1EH.js";
5
+ import { progress as b } from "./Progress.styles.js";
6
+ import { s as p } from "../../factory-CsinCTPr.js";
7
+ import { s as x } from "../../is-valid-prop-DweT-eOL.js";
8
+ import { GlobalCSSClass as C } from "../../enums.js";
9
+ import { t as N } from "../../index-Bm5rQqn5.js";
10
+ const h = ({
11
+ backgroundImage: e,
12
+ borderRadius: t,
13
+ className: c,
13
14
  max: r = 100,
14
15
  min: s,
15
- sectionTitle: c = "Progress is {{current}} of {{max}}",
16
- style: f,
16
+ sectionTitle: f = "Progress is {{current}} of {{max}}",
17
+ style: u,
17
18
  value: g = 0,
18
- ...u
19
+ ...d
19
20
  }) => {
20
- const [d, t] = b(u), a = y(
21
- p,
22
- v(S.raw(), d),
23
- x.Progress
24
- ), o = Math.min(Math.max(g, s ?? 0), r), i = () => P(c, [
21
+ const [v, a] = x(d), i = S(
22
+ c,
23
+ y(b.raw(), v),
24
+ C.Progress
25
+ ), o = Math.min(Math.max(g, s ?? 0), r), l = () => P(f, [
25
26
  { name: "{{current}}", value: String(o) },
26
27
  { name: "{{max}}", value: r.toString() }
27
- ]), l = {
28
- "--iress-border-radius": e ? C(`radii.${e}`) : void 0,
29
- ...f
28
+ ]), m = {
29
+ "--iress-border-radius": t ? N(`radii.${t}`) : void 0,
30
+ "--iress-background-image": e ? `url(${e})` : void 0,
31
+ ...u
30
32
  };
31
- return s !== void 0 ? /* @__PURE__ */ m(
32
- n.meter,
33
+ return s !== void 0 ? /* @__PURE__ */ n(
34
+ p.meter,
33
35
  {
34
- "aria-label": i(),
35
- className: a,
36
+ "aria-label": l(),
37
+ className: i,
36
38
  max: r,
37
39
  min: s,
38
40
  value: o,
39
- ...t,
40
- style: l
41
+ ...a,
42
+ style: m
41
43
  }
42
- ) : /* @__PURE__ */ m(
43
- n.progress,
44
+ ) : /* @__PURE__ */ n(
45
+ p.progress,
44
46
  {
45
- "aria-label": i(),
46
- className: a,
47
+ "aria-label": l(),
48
+ className: i,
47
49
  max: r,
48
50
  value: o,
49
- ...t,
50
- style: l
51
+ ...a,
52
+ style: m
51
53
  }
52
54
  );
53
55
  };
54
- N.displayName = "IressProgress";
56
+ h.displayName = "IressProgress";
55
57
  export {
56
- N as IressProgress
58
+ h as IressProgress
57
59
  };
@@ -1,6 +1,8 @@
1
1
  import { c as r } from "../../cva-DtPMccE9.js";
2
2
  const e = r({
3
3
  base: {
4
+ // Performance: CSS containment limits style recalculation scope
5
+ contain: "layout style paint",
4
6
  appearance: "none",
5
7
  bg: "colour.neutral.40",
6
8
  color: "colour.neutral.50",
@@ -18,6 +20,9 @@ const e = r({
18
20
  _progressValue: {
19
21
  appearance: "none",
20
22
  bg: "[currentColor]",
23
+ backgroundImage: "var(--iress-background-image)",
24
+ backgroundSize: "cover",
25
+ backgroundPosition: "center",
21
26
  borderRadius: "var(--iress-border-radius)",
22
27
  margin: "spacing.0",
23
28
  transition: "all"
@@ -25,6 +30,9 @@ const e = r({
25
30
  _mozProgressValue: {
26
31
  appearance: "none",
27
32
  bg: "[currentColor]",
33
+ backgroundImage: "var(--iress-background-image)",
34
+ backgroundSize: "cover",
35
+ backgroundPosition: "center",
28
36
  borderRadius: "var(--iress-border-radius)",
29
37
  margin: "spacing.0",
30
38
  transition: "all"
@@ -11,6 +11,8 @@ const e = r({
11
11
  ],
12
12
  base: {
13
13
  root: {
14
+ // Performance: CSS containment (no paint to allow focus ring/shadow)
15
+ contain: "layout style",
14
16
  color: "colour.primary.fill",
15
17
  display: "flex",
16
18
  position: "relative",
@@ -9,6 +9,8 @@ const i = c({
9
9
  ],
10
10
  base: {
11
11
  richSelect: {
12
+ // Performance: CSS containment (no paint to allow focus ring/shadow)
13
+ contain: "layout style",
12
14
  display: "block"
13
15
  },
14
16
  popoverContent: {
@@ -3,6 +3,8 @@ const l = e({
3
3
  slots: ["selectBody", "children"],
4
4
  base: {
5
5
  selectBody: {
6
+ // Performance: CSS containment (no paint due to overflow)
7
+ contain: "layout style",
6
8
  display: "flex",
7
9
  flexDirection: "column",
8
10
  maxHeight: "[30rem]",
@@ -3,6 +3,8 @@ const o = t({
3
3
  slots: ["root"],
4
4
  base: {
5
5
  root: {
6
+ // Performance: CSS containment limits style recalculation scope
7
+ contain: "layout style paint",
6
8
  width: "[100%]"
7
9
  }
8
10
  },
@@ -3,6 +3,8 @@ const t = o({
3
3
  slots: ["root"],
4
4
  base: {
5
5
  root: {
6
+ // Performance: CSS containment limits style recalculation scope
7
+ contain: "layout style paint",
6
8
  borderWidth: "0px",
7
9
  borderBottomWidth: "1px",
8
10
  borderBottomStyle: "solid",
@@ -3,6 +3,8 @@ const l = e({
3
3
  slots: ["root", "placeholder", "prepend", "append", "tag", "tagsList"],
4
4
  base: {
5
5
  root: {
6
+ // Performance: CSS containment limits style recalculation scope
7
+ contain: "layout style paint",
6
8
  display: "flex",
7
9
  alignItems: "center",
8
10
  width: "[100%]",
@@ -1,8 +1,10 @@
1
1
  import { s as e } from "../../sva-B7kca5XO.js";
2
- const t = ["wrapper", "control", "element"], c = e({
2
+ const t = ["wrapper", "control", "element"], a = e({
3
3
  slots: t,
4
4
  base: {
5
5
  wrapper: {
6
+ // Performance: CSS containment limits style recalculation scope
7
+ contain: "layout style",
6
8
  display: "block",
7
9
  position: "relative",
8
10
  lineHeight: 1,
@@ -122,5 +124,5 @@ const t = ["wrapper", "control", "element"], c = e({
122
124
  }
123
125
  });
124
126
  export {
125
- c as select
127
+ a as select
126
128
  };
@@ -230,7 +230,7 @@ const xe = ({
230
230
  ...H.getFloatingProps(Y),
231
231
  onTransitionEnd: K
232
232
  };
233
- return /* @__PURE__ */ _(ie, { root: t, children: /* @__PURE__ */ _(
233
+ return /* @__PURE__ */ _(ie, { root: t ?? E?.container, children: /* @__PURE__ */ _(
234
234
  fe,
235
235
  {
236
236
  ...Z,
@@ -3,6 +3,8 @@ const i = t({
3
3
  slots: ["root", "content", "footer", "closeButton"],
4
4
  base: {
5
5
  root: {
6
+ // Performance: CSS containment (no paint due to fixed positioning)
7
+ contain: "layout style",
6
8
  textStyle: "typography.body.md",
7
9
  position: "fixed",
8
10
  insetBlockStart: "spacing.0",
@@ -24,7 +26,8 @@ const i = t({
24
26
  },
25
27
  content: {
26
28
  overflow: "auto",
27
- flex: "[1 1 auto]"
29
+ flex: "[1 1 auto]",
30
+ scrollable: "y"
28
31
  },
29
32
  footer: {
30
33
  borderBlockStart: "divider"
@@ -10,6 +10,8 @@ const i = e({
10
10
  ],
11
11
  base: {
12
12
  root: {
13
+ // Performance: CSS containment (no paint to allow focus ring/shadow)
14
+ contain: "layout style",
13
15
  display: "flex",
14
16
  flexDirection: "column"
15
17
  },
@@ -1,12 +1,31 @@
1
1
  import { IressIconProps } from '../Icon';
2
- export interface IressSpinnerProps extends Omit<IressIconProps, 'name'> {
2
+ import { IressStyledProps } from '../../types';
3
+ type IressSpinnerDefaultProps = Omit<IressIconProps, 'name'> & {
3
4
  /**
4
5
  * Spin speed of spinner.
5
6
  * @default half
6
7
  **/
7
8
  spin?: IressIconProps['spin'];
8
- }
9
+ /**
10
+ * Variant of spinner.
11
+ * - 'default': Standard rotating spinner
12
+ **/
13
+ variant?: 'default';
14
+ };
15
+ type IressSpinnerChattyProps = IressStyledProps<'span'> & {
16
+ /**
17
+ * Variant of spinner.
18
+ * - 'chatty': Animated dots for chatting/typing indicator
19
+ **/
20
+ variant: 'chatty';
21
+ /**
22
+ * Screen reader text for the chatty spinner.
23
+ */
24
+ screenreaderText: string;
25
+ };
26
+ export type IressSpinnerProps = IressSpinnerDefaultProps | IressSpinnerChattyProps;
9
27
  export declare const IressSpinner: {
10
- ({ className, spin, ...restProps }: IressSpinnerProps): import("react/jsx-runtime").JSX.Element;
28
+ (props: IressSpinnerProps): import("react/jsx-runtime").JSX.Element;
11
29
  displayName: string;
12
30
  };
31
+ export {};
@@ -1,23 +1,39 @@
1
- import { jsx as m } from "react/jsx-runtime";
2
- import { GlobalCSSClass as n } from "../../enums.js";
3
- import { IressIcon as e } from "../Icon/Icon.js";
1
+ import { jsxs as p, jsx as a } from "react/jsx-runtime";
2
+ import { GlobalCSSClass as e } from "../../enums.js";
3
+ import { IressIcon as N } from "../Icon/Icon.js";
4
4
  import "../Icon/Icon.styles.js";
5
- import { spinner as i } from "./Spinner.styles.js";
6
- import { c as p } from "../../cx-DN21T1EH.js";
7
- const t = ({
8
- className: r,
9
- spin: s = "half",
10
- ...o
11
- }) => /* @__PURE__ */ m(
12
- e,
13
- {
14
- ...o,
15
- className: p(r, i(), n.Spinner),
16
- name: "spinner-third",
17
- spin: s
5
+ import { chatty as d, spinner as f } from "./Spinner.styles.js";
6
+ import { c as n } from "../../cx-DN21T1EH.js";
7
+ const S = (r) => {
8
+ if (r.variant === "chatty") {
9
+ const { className: c, screenreaderText: i, ...l } = r, s = d();
10
+ return /* @__PURE__ */ p(
11
+ "span",
12
+ {
13
+ className: n(c, s.root, e.Spinner),
14
+ "aria-label": i,
15
+ role: "status",
16
+ ...l,
17
+ children: [
18
+ /* @__PURE__ */ a("span", { className: s.dot }),
19
+ /* @__PURE__ */ a("span", { className: s.dot }),
20
+ /* @__PURE__ */ a("span", { className: s.dot })
21
+ ]
22
+ }
23
+ );
18
24
  }
19
- );
20
- t.displayName = "IressSpinner";
25
+ const { className: t, spin: o = "half", ...m } = r;
26
+ return /* @__PURE__ */ a(
27
+ N,
28
+ {
29
+ ...m,
30
+ className: n(t, f(), e.Spinner),
31
+ name: "spinner-third",
32
+ spin: o
33
+ }
34
+ );
35
+ };
36
+ S.displayName = "IressSpinner";
21
37
  export {
22
- t as IressSpinner
38
+ S as IressSpinner
23
39
  };
@@ -1 +1,2 @@
1
1
  export declare const spinner: import('../../styled-system/types').RecipeRuntimeFn<{}>;
2
+ export declare const chatty: import('../../styled-system/types').SlotRecipeRuntimeFn<"root" | "dot", import('../../styled-system/types').SlotRecipeVariantRecord<"root" | "dot">>;
@@ -1,11 +1,39 @@
1
- import { c as a } from "../../cva-DtPMccE9.js";
2
- const o = a({
1
+ import { c as t } from "../../cva-DtPMccE9.js";
2
+ import { s as a } from "../../sva-B7kca5XO.js";
3
+ const o = t({
3
4
  base: {
4
5
  boxSizing: "border-box"
5
6
  },
6
- variants: {},
7
- defaultVariants: {}
7
+ variants: {}
8
+ }), e = a({
9
+ slots: ["root", "dot"],
10
+ base: {
11
+ root: {
12
+ // Performance: CSS containment (no paint to allow animation effects)
13
+ contain: "layout style",
14
+ display: "inline-flex",
15
+ alignItems: "center",
16
+ gap: "spacing.1"
17
+ },
18
+ dot: {
19
+ width: "[0.5em]",
20
+ height: "[0.5em]",
21
+ borderRadius: "50%",
22
+ bg: "colour.neutral.50",
23
+ animation: "chatty 1.4s infinite ease-in-out",
24
+ "&:nth-child(1)": {
25
+ animationDelay: "0s"
26
+ },
27
+ "&:nth-child(2)": {
28
+ animationDelay: "0.2s"
29
+ },
30
+ "&:nth-child(3)": {
31
+ animationDelay: "0.4s"
32
+ }
33
+ }
34
+ }
8
35
  });
9
36
  export {
37
+ e as chatty,
10
38
  o as spinner
11
39
  };
@@ -1,6 +1,7 @@
1
1
  import { IressSpinner as n } from "./Spinner.js";
2
- import { spinner as p } from "./Spinner.styles.js";
2
+ import { chatty as p, spinner as t } from "./Spinner.styles.js";
3
3
  export {
4
4
  n as IressSpinner,
5
- p as spinner
5
+ p as chatty,
6
+ t as spinner
6
7
  };
@@ -10,6 +10,8 @@ const e = t({
10
10
  ],
11
11
  base: {
12
12
  root: {
13
+ // Performance: CSS containment (no paint to allow overflow)
14
+ contain: "layout style",
13
15
  bg: "colour.neutral.10",
14
16
  borderRadius: "radius.system.layout"
15
17
  },
@@ -20,6 +20,12 @@ export declare const tag: import('../../styled-system/types').SlotRecipeRuntimeF
20
20
  _active: {
21
21
  boxShadow: "color-mix(in srgb, {colors.colour.primary.surface}, transparent 60%) 0px 0px 0px 3px";
22
22
  };
23
+ _focus: {
24
+ outline: "[none]";
25
+ };
26
+ _focusVisible: {
27
+ layerStyle: "elevation.focus";
28
+ };
23
29
  };
24
30
  };
25
31
  };
@@ -1,8 +1,10 @@
1
- import { s as r } from "../../sva-B7kca5XO.js";
2
- const t = r({
1
+ import { s as o } from "../../sva-B7kca5XO.js";
2
+ const t = o({
3
3
  slots: ["root", "content", "deleteButton"],
4
4
  base: {
5
5
  root: {
6
+ // Performance: CSS containment limits style recalculation scope
7
+ contain: "layout style",
6
8
  alignItems: "center",
7
9
  bg: "colour.neutral.20",
8
10
  border: "divider",
@@ -53,6 +55,12 @@ const t = r({
53
55
  },
54
56
  _active: {
55
57
  boxShadow: "color-mix(in srgb, {colors.colour.primary.surface}, transparent 60%) 0px 0px 0px 3px"
58
+ },
59
+ _focus: {
60
+ outline: "[none]"
61
+ },
62
+ _focusVisible: {
63
+ layerStyle: "elevation.focus"
56
64
  }
57
65
  }
58
66
  }
@@ -10,6 +10,8 @@ const t = e({
10
10
  ],
11
11
  base: {
12
12
  toggleBase: {
13
+ // Performance: CSS containment (no paint to allow focus ring/shadow)
14
+ contain: "layout style",
13
15
  display: "inline-flex",
14
16
  gap: "spacing.1",
15
17
  color: "colour.primary.fill",
@@ -1,5 +1,5 @@
1
- import { s as o } from "../../sva-B7kca5XO.js";
2
- const a = o({
1
+ import { s as t } from "../../sva-B7kca5XO.js";
2
+ const a = t({
3
3
  slots: ["root", "activator", "content"],
4
4
  base: {
5
5
  root: {
@@ -8,6 +8,8 @@ const a = o({
8
8
  },
9
9
  activator: {},
10
10
  content: {
11
+ // Performance: CSS containment limits style recalculation scope
12
+ contain: "layout style paint",
11
13
  zIndex: "600",
12
14
  width: "[max-content]",
13
15
  maxWidth: "[20em]",