@primer/react 38.30.0-rc.dc0369509 → 38.30.1-rc.0d136c1b7

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 (77) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/dist/ActionBar/ActionBar.d.ts +24 -1
  3. package/dist/ActionBar/ActionBar.d.ts.map +1 -1
  4. package/dist/ActionBar/ActionBar.js +96 -4
  5. package/dist/ActionBar/index.d.ts +21 -1
  6. package/dist/ActionBar/index.d.ts.map +1 -1
  7. package/dist/ActionBar/index.js +2 -1
  8. package/dist/AvatarStack/AvatarStack.js +231 -117
  9. package/dist/Heading/Heading.js +69 -19
  10. package/dist/Link/Link.js +81 -25
  11. package/dist/NavList/NavList-b50d982b.css +2 -0
  12. package/dist/NavList/NavList-b50d982b.css.map +1 -0
  13. package/dist/NavList/NavList.d.ts +13 -4
  14. package/dist/NavList/NavList.d.ts.map +1 -1
  15. package/dist/NavList/NavList.js +238 -70
  16. package/dist/NavList/NavList.module.css.js +2 -2
  17. package/dist/Pagehead/Pagehead.js +45 -11
  18. package/dist/SelectPanel/SelectPanel.d.ts +2 -2
  19. package/dist/SelectPanel/SelectPanel.d.ts.map +1 -1
  20. package/dist/SelectPanel/SelectPanel.js +4 -1
  21. package/dist/SideNav.js +112 -41
  22. package/dist/UnderlineNav/UnderlineNav-47547980.css +2 -0
  23. package/dist/UnderlineNav/UnderlineNav-47547980.css.map +1 -0
  24. package/dist/UnderlineNav/UnderlineNav.d.ts +1 -2
  25. package/dist/UnderlineNav/UnderlineNav.d.ts.map +1 -1
  26. package/dist/UnderlineNav/UnderlineNav.js +91 -331
  27. package/dist/UnderlineNav/UnderlineNav.module.css.js +2 -2
  28. package/dist/UnderlineNav/UnderlineNavContext.d.ts +1 -11
  29. package/dist/UnderlineNav/UnderlineNavContext.d.ts.map +1 -1
  30. package/dist/UnderlineNav/UnderlineNavContext.js +1 -4
  31. package/dist/UnderlineNav/UnderlineNavItem-402cd41c.css +2 -0
  32. package/dist/UnderlineNav/UnderlineNavItem-402cd41c.css.map +1 -0
  33. package/dist/UnderlineNav/UnderlineNavItem.d.ts +1 -44
  34. package/dist/UnderlineNav/UnderlineNavItem.d.ts.map +1 -1
  35. package/dist/UnderlineNav/UnderlineNavItem.js +33 -38
  36. package/dist/UnderlineNav/UnderlineNavItem.module.css.js +1 -1
  37. package/dist/UnderlineNav/UnderlineNavItemsRegistry.d.ts +51 -0
  38. package/dist/UnderlineNav/UnderlineNavItemsRegistry.d.ts.map +1 -0
  39. package/dist/UnderlineNav/UnderlineNavItemsRegistry.js +8 -0
  40. package/dist/UnderlineNav/index.d.ts +1 -1
  41. package/dist/UnderlineNav/index.d.ts.map +1 -1
  42. package/dist/UnderlineNav/utils.d.ts +2 -0
  43. package/dist/UnderlineNav/utils.d.ts.map +1 -1
  44. package/dist/UnderlineNav/utils.js +2 -1
  45. package/dist/experimental/UnderlinePanels/UnderlinePanels-162f9aed.css +2 -0
  46. package/dist/experimental/UnderlinePanels/UnderlinePanels-162f9aed.css.map +1 -0
  47. package/dist/experimental/UnderlinePanels/UnderlinePanels.d.ts.map +1 -1
  48. package/dist/experimental/UnderlinePanels/UnderlinePanels.js +8 -11
  49. package/dist/experimental/UnderlinePanels/UnderlinePanels.module.css.js +1 -1
  50. package/dist/internal/components/CheckboxOrRadioGroup/CheckboxOrRadioGroup.js +196 -75
  51. package/dist/internal/components/CheckboxOrRadioGroup/CheckboxOrRadioGroupCaption.js +33 -11
  52. package/dist/internal/components/CheckboxOrRadioGroup/CheckboxOrRadioGroupLabel.js +53 -16
  53. package/dist/internal/components/CheckboxOrRadioGroup/CheckboxOrRadioGroupValidation.js +27 -12
  54. package/dist/internal/components/InputValidation.js +1 -1
  55. package/dist/internal/components/UnderlineTabbedInterface-1745a3d6.css +2 -0
  56. package/dist/internal/components/UnderlineTabbedInterface-1745a3d6.css.map +1 -0
  57. package/dist/internal/components/UnderlineTabbedInterface.d.ts +0 -1
  58. package/dist/internal/components/UnderlineTabbedInterface.d.ts.map +1 -1
  59. package/dist/internal/components/UnderlineTabbedInterface.js +66 -60
  60. package/dist/internal/components/UnderlineTabbedInterface.module.css.js +1 -1
  61. package/generated/components.json +72 -5
  62. package/package.json +1 -1
  63. package/dist/NavList/NavList-5dc067e3.css +0 -2
  64. package/dist/NavList/NavList-5dc067e3.css.map +0 -1
  65. package/dist/UnderlineNav/UnderlineNav-4344d9b0.css +0 -2
  66. package/dist/UnderlineNav/UnderlineNav-4344d9b0.css.map +0 -1
  67. package/dist/UnderlineNav/UnderlineNavItem-b65e8fd3.css +0 -2
  68. package/dist/UnderlineNav/UnderlineNavItem-b65e8fd3.css.map +0 -1
  69. package/dist/UnderlineNav/styles.d.ts +0 -16
  70. package/dist/UnderlineNav/styles.d.ts.map +0 -1
  71. package/dist/UnderlineNav/styles.js +0 -19
  72. package/dist/UnderlineNav/types.d.ts +0 -10
  73. package/dist/UnderlineNav/types.d.ts.map +0 -1
  74. package/dist/experimental/UnderlinePanels/UnderlinePanels-e4b325b9.css +0 -2
  75. package/dist/experimental/UnderlinePanels/UnderlinePanels-e4b325b9.css.map +0 -1
  76. package/dist/internal/components/UnderlineTabbedInterface-4197ee28.css +0 -2
  77. package/dist/internal/components/UnderlineTabbedInterface-4197ee28.css.map +0 -1
package/CHANGELOG.md CHANGED
@@ -1,9 +1,27 @@
1
1
  # @primer/react
2
2
 
3
+ ## 38.30.1
4
+
5
+ ### Patch Changes
6
+
7
+ - [#8054](https://github.com/primer/react/pull/8054) [`1775f2e`](https://github.com/primer/react/commit/1775f2e8b968d59a1189456b14cff15e527937cb) Thanks [@joshblack](https://github.com/joshblack)! - AvatarStack: Improve rendering performance with React Compiler support
8
+
9
+ - [#8053](https://github.com/primer/react/pull/8053) [`b2151ae`](https://github.com/primer/react/commit/b2151ae2d5719f09efb0b89731e52e4ca50e8bf1) Thanks [@joshblack](https://github.com/joshblack)! - Checkbox, CheckboxGroup, and RadioGroup: Improve rendering performance with React Compiler support
10
+
11
+ - [#8052](https://github.com/primer/react/pull/8052) [`a1b24cf`](https://github.com/primer/react/commit/a1b24cf3411566641aeb846e62069dc26505da6b) Thanks [@joshblack](https://github.com/joshblack)! - Heading, Link, Pagehead, Portal, and SideNav: Improve rendering performance with React Compiler support
12
+
3
13
  ## 38.30.0
4
14
 
5
15
  ### Minor Changes
6
16
 
17
+ - [#8048](https://github.com/primer/react/pull/8048) [`0add561`](https://github.com/primer/react/commit/0add5615720d17d69c77b014786c5e17e4337bb0) Thanks [@copilot-swe-agent](https://github.com/apps/copilot-swe-agent)! - ActionBar: Add `ActionBar.Button` for rendering text buttons that overflow into the menu, alongside the existing `ActionBar.IconButton`
18
+
19
+ - [#8031](https://github.com/primer/react/pull/8031) [`cb79351`](https://github.com/primer/react/commit/cb79351f29b9a1aea7bacf890eca97a5c9d97590) Thanks [@janmaarten-a11y](https://github.com/janmaarten-a11y)! - Add a `NavList.Heading` slot that names the navigation region. It renders an `h2`
20
+ by default (configurable to `h3` via `as`), supports a `visuallyHidden` variant,
21
+ labels the `nav` landmark via `aria-labelledby`, and makes `NavList.Group`
22
+ headings default to one level deeper (`h3`, or `h4` under an `h3` heading) for a
23
+ correct heading hierarchy.
24
+
7
25
  - [#7991](https://github.com/primer/react/pull/7991) [`b906268`](https://github.com/primer/react/commit/b906268b7ebe8d684d8b5e9b1c4e9b528a5dd67a) Thanks [@llastflowers](https://github.com/llastflowers)! - Add data-component attributes and associated tests for:
8
26
 
9
27
  Radio
@@ -18,6 +36,10 @@
18
36
  SkeletonText
19
37
  Spinner
20
38
 
39
+ - [#8026](https://github.com/primer/react/pull/8026) [`73a45df`](https://github.com/primer/react/commit/73a45dfe11c3a297e4f2f8317caa4a535a70ce80) Thanks [@TylerJDev](https://github.com/TylerJDev)! - SelectPanel: Add `cssAnchorPositioningSettings` prop to customize CSS anchor positioning behavior
40
+
41
+ - [#7506](https://github.com/primer/react/pull/7506) [`e58907c`](https://github.com/primer/react/commit/e58907c5559f5ef8133a1d98a05e2e4a6c1ca6cb) Thanks [@iansan5653](https://github.com/iansan5653)! - Refactors `UnderlineNav` overflow handling to use CSS-based overflow detection instead of JavaScript width measurements, eliminating layout shift (CLS) issues and improving performance. The overflow menu is now implemented with `ActionMenu`, and item registration uses a descendant registry instead of the `React.Children` API. Consumer-facing changes: items can now be wrapped in fragments or wrapper components; the current item may appear in the overflow menu when the viewport is narrow; and the overflow menu button is right-aligned.
42
+
21
43
  ### Patch Changes
22
44
 
23
45
  - [#8021](https://github.com/primer/react/pull/8021) [`6131a94`](https://github.com/primer/react/commit/6131a9424b5bd5bb98b7ae05771d8187fe2f58cd) Thanks [@mattcosta7](https://github.com/mattcosta7)! - Announce, AriaStatus, AriaAlert: Avoid an extra React render on every content change (e.g. per keystroke when tied to an input)
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import { type ActionListItemProps } from '../ActionList';
3
- import type { IconButtonProps } from '../Button';
3
+ import type { ButtonProps, IconButtonProps } from '../Button';
4
4
  type Size = 'small' | 'medium' | 'large';
5
5
  type A11yProps = {
6
6
  /** When provided, a label is added to the action bar */
@@ -38,6 +38,9 @@ export type ActionBarProps = {
38
38
  export type ActionBarIconButtonProps = {
39
39
  disabled?: boolean;
40
40
  } & IconButtonProps;
41
+ export type ActionBarButtonProps = {
42
+ disabled?: boolean;
43
+ } & ButtonProps;
41
44
  export type ActionBarMenuItemProps = ({
42
45
  /**
43
46
  * Type of menu item to be rendered in the menu (action | group).
@@ -91,6 +94,26 @@ export type ActionBarMenuProps = {
91
94
  } & IconButtonProps;
92
95
  export declare const ActionBar: React.FC<React.PropsWithChildren<ActionBarProps>>;
93
96
  export declare const ActionBarIconButton: React.ForwardRefExoticComponent<ActionBarIconButtonProps & React.RefAttributes<unknown>>;
97
+ export declare const ActionBarButton: React.ForwardRefExoticComponent<{
98
+ disabled?: boolean;
99
+ } & {
100
+ alignContent?: import("../Button/types").AlignContent;
101
+ icon?: React.FunctionComponent<import("@primer/octicons-react").IconProps> | React.ElementType | React.ReactElement<any> | null;
102
+ leadingVisual?: React.ElementType | React.ReactElement<any> | null;
103
+ trailingVisual?: React.ElementType | React.ReactElement<any> | null;
104
+ trailingAction?: React.ElementType | null;
105
+ children?: React.ReactNode;
106
+ count?: number | string;
107
+ } & {
108
+ variant?: import("../Button/types").VariantType;
109
+ size?: import("../Button/types").Size;
110
+ disabled?: boolean;
111
+ block?: boolean;
112
+ loading?: boolean;
113
+ loadingAnnouncement?: string;
114
+ inactive?: boolean;
115
+ labelWrap?: boolean;
116
+ } & React.ButtonHTMLAttributes<HTMLButtonElement> & React.RefAttributes<unknown>>;
94
117
  export declare const ActionBarGroup: React.ForwardRefExoticComponent<{
95
118
  children?: React.ReactNode | undefined;
96
119
  } & React.RefAttributes<unknown>>;
@@ -1 +1 @@
1
- {"version":3,"file":"ActionBar.d.ts","sourceRoot":"","sources":["../../src/ActionBar/ActionBar.tsx"],"names":[],"mappings":"AACA,OAAO,KAAiF,MAAM,OAAO,CAAA;AAErG,OAAO,EAAa,KAAK,mBAAmB,EAAC,MAAM,eAAe,CAAA;AAElE,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,WAAW,CAAA;AAmC9C,KAAK,IAAI,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAA;AAExC,KAAK,SAAS,GACV;IACE,wDAAwD;IACxD,YAAY,EAAE,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAA;IAChD,iBAAiB,CAAC,EAAE,SAAS,CAAA;CAC9B,GACD;IACE,YAAY,CAAC,EAAE,SAAS,CAAA;IACxB;;OAEG;IACH,iBAAiB,EAAE,KAAK,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAA;CAC3D,CAAA;AAEL,KAAK,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAA;AAEpC,MAAM,MAAM,cAAc,GAAG;IAC3B;;;SAGK;IACL,IAAI,CAAC,EAAE,IAAI,CAAA;IAEX,gCAAgC;IAChC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IAEzB;;;SAGK;IACL,KAAK,CAAC,EAAE,OAAO,CAAA;IAEf,uBAAuB;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;IAElB;;;OAGG;IACH,GAAG,CAAC,EAAE,QAAQ,CAAA;CACf,GAAG,SAAS,CAAA;AAEb,MAAM,MAAM,wBAAwB,GAAG;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAC,GAAG,eAAe,CAAA;AAE7E,MAAM,MAAM,sBAAsB,GAC9B,CAAC;IACC;;;OAGG;IACH,IAAI,CAAC,EAAE,QAAQ,CAAA;IACf;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;;OAEG;IACH,aAAa,CAAC,EAAE,wBAAwB,CAAC,MAAM,CAAC,CAAA;IAChD;;OAEG;IACH,cAAc,CAAC,EAAE,wBAAwB,CAAC,MAAM,CAAC,GAAG,MAAM,CAAA;IAC1D;;OAEG;IACH,KAAK,EAAE,MAAM,CAAA;IACb;;OAEG;IACH,OAAO,CAAC,EAAE,mBAAmB,CAAC,UAAU,CAAC,CAAA;IACzC;;;OAGG;IACH,KAAK,CAAC,EAAE,sBAAsB,EAAE,CAAA;CACjC,GAAG,IAAI,CAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC,GACzC;IACE,IAAI,EAAE,SAAS,CAAA;CAChB,CAAA;AAEL,MAAM,MAAM,kBAAkB,GAAG;IAC/B,2CAA2C;IAC3C,YAAY,EAAE,MAAM,CAAA;IACpB,+BAA+B;IAC/B,IAAI,EAAE,wBAAwB,CAAC,MAAM,CAAC,CAAA;IACtC,KAAK,EAAE,sBAAsB,EAAE,CAAA;IAC/B;;;OAGG;IACH,YAAY,CAAC,EAAE,wBAAwB,CAAC,MAAM,CAAC,GAAG,MAAM,CAAA;IACxD;;OAEG;IACH,cAAc,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,CAAA;CAC9C,GAAG,eAAe,CAAA;AAwDnB,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC,cAAc,CAAC,CA+GvE,CAAA;AAyCD,eAAO,MAAM,mBAAmB,0FA2C/B,CAAA;AAMD,eAAO,MAAM,cAAc;;iCAezB,CAAA;AAEF,eAAO,MAAM,aAAa;IAhSxB,2CAA2C;kBAC7B,MAAM;IACpB,+BAA+B;UACzB,wBAAwB,CAAC,MAAM,CAAC;WAC/B,sBAAsB,EAAE;IAC/B;;;OAGG;mBACY,wBAAwB,CAAC,MAAM,CAAC,GAAG,MAAM;IACxD;;OAEG;qBACc,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC;;;;;;;;;;;wGA8T9C,CAAA;AAED,eAAO,MAAM,eAAe,yBAgB3B,CAAA"}
1
+ {"version":3,"file":"ActionBar.d.ts","sourceRoot":"","sources":["../../src/ActionBar/ActionBar.tsx"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ import React, { forwardRef, useRef, useState, useMemo, useCallback, useContext,
3
3
  import { KebabHorizontalIcon } from '@primer/octicons-react';
4
4
  import { ActionList } from '../ActionList/index.js';
5
5
  import { IconButton } from '../Button/IconButton.js';
6
+ import { ButtonComponent } from '../Button/Button.js';
6
7
  import { useFocusZone } from '../hooks/useFocusZone.js';
7
8
  import styles from './ActionBar.module.css.js';
8
9
  import { clsx } from 'clsx';
@@ -359,6 +360,97 @@ const ActionBarIconButton = /*#__PURE__*/forwardRef(({
359
360
  "data-overflowing": dataOverflowingAttr
360
361
  });
361
362
  });
363
+ const ActionBarButton = /*#__PURE__*/forwardRef((t0, forwardedRef) => {
364
+ const $ = c(19);
365
+ let disabled;
366
+ let onClick;
367
+ let props;
368
+ if ($[0] !== t0) {
369
+ ({
370
+ disabled,
371
+ onClick,
372
+ ...props
373
+ } = t0);
374
+ $[0] = t0;
375
+ $[1] = disabled;
376
+ $[2] = onClick;
377
+ $[3] = props;
378
+ } else {
379
+ disabled = $[1];
380
+ onClick = $[2];
381
+ props = $[3];
382
+ }
383
+ const ref = useRef(null);
384
+ const mergedRef = useMergedRefs(forwardedRef, ref);
385
+ const {
386
+ size
387
+ } = React.useContext(ActionBarContext);
388
+ const {
389
+ children,
390
+ leadingVisual
391
+ } = props;
392
+ const t1 = typeof leadingVisual === "function" ? leadingVisual : undefined;
393
+ const t2 = !!disabled;
394
+ const t3 = onClick;
395
+ let t4;
396
+ if ($[4] !== children || $[5] !== t1 || $[6] !== t2 || $[7] !== t3) {
397
+ t4 = {
398
+ type: "action",
399
+ label: children,
400
+ icon: t1,
401
+ disabled: t2,
402
+ onClick: t3
403
+ };
404
+ $[4] = children;
405
+ $[5] = t1;
406
+ $[6] = t2;
407
+ $[7] = t3;
408
+ $[8] = t4;
409
+ } else {
410
+ t4 = $[8];
411
+ }
412
+ const {
413
+ dataOverflowingAttr
414
+ } = useActionBarItem(ref, t4);
415
+ let t5;
416
+ if ($[9] !== disabled || $[10] !== onClick) {
417
+ t5 = event => {
418
+ var _onClick;
419
+ if (disabled) {
420
+ return;
421
+ }
422
+ (_onClick = onClick) === null || _onClick === void 0 ? void 0 : _onClick(event);
423
+ };
424
+ $[9] = disabled;
425
+ $[10] = onClick;
426
+ $[11] = t5;
427
+ } else {
428
+ t5 = $[11];
429
+ }
430
+ const clickHandler = t5;
431
+ let t6;
432
+ if ($[12] !== clickHandler || $[13] !== dataOverflowingAttr || $[14] !== disabled || $[15] !== mergedRef || $[16] !== props || $[17] !== size) {
433
+ t6 = /*#__PURE__*/jsx(ButtonComponent, {
434
+ "aria-disabled": disabled,
435
+ ref: mergedRef,
436
+ size: size,
437
+ onClick: clickHandler,
438
+ ...props,
439
+ variant: "invisible",
440
+ "data-overflowing": dataOverflowingAttr
441
+ });
442
+ $[12] = clickHandler;
443
+ $[13] = dataOverflowingAttr;
444
+ $[14] = disabled;
445
+ $[15] = mergedRef;
446
+ $[16] = props;
447
+ $[17] = size;
448
+ $[18] = t6;
449
+ } else {
450
+ t6 = $[18];
451
+ }
452
+ return t6;
453
+ });
362
454
  const ActionBarGroupContext = /*#__PURE__*/React.createContext(null);
363
455
  const ActionBarGroup = /*#__PURE__*/forwardRef((t0, forwardedRef) => {
364
456
  const $ = c(10);
@@ -611,10 +703,10 @@ function _temp4(t0) {
611
703
  typeof onClick === "function" && onClick(event);
612
704
  },
613
705
  disabled: disabled,
614
- children: [/*#__PURE__*/jsx(ActionList.LeadingVisual, {
706
+ children: [Icon ? /*#__PURE__*/jsx(ActionList.LeadingVisual, {
615
707
  children: /*#__PURE__*/jsx(Icon, {})
616
- }), label]
617
- }, label);
708
+ }) : null, label]
709
+ }, id);
618
710
  }
619
711
  if (menuItem.type === "menu") {
620
712
  const menuItems = menuItem.items;
@@ -645,4 +737,4 @@ function _temp7(item, index) {
645
737
  return renderMenuItem(item, index);
646
738
  }
647
739
 
648
- export { ActionBar, ActionBarGroup, ActionBarIconButton, ActionBarMenu, VerticalDivider };
740
+ export { ActionBar, ActionBarButton, ActionBarGroup, ActionBarIconButton, ActionBarMenu, VerticalDivider };
@@ -1,6 +1,26 @@
1
- export type { ActionBarProps, ActionBarMenuProps, ActionBarMenuItemProps } from './ActionBar';
1
+ export type { ActionBarProps, ActionBarButtonProps, ActionBarMenuProps, ActionBarMenuItemProps } from './ActionBar';
2
2
  declare const ActionBar: import("react").FC<import("react").PropsWithChildren<import("./ActionBar").ActionBarProps>> & {
3
3
  IconButton: import("react").ForwardRefExoticComponent<import("./ActionBar").ActionBarIconButtonProps & import("react").RefAttributes<unknown>>;
4
+ Button: import("react").ForwardRefExoticComponent<{
5
+ disabled?: boolean;
6
+ } & {
7
+ alignContent?: import("../Button/types").AlignContent;
8
+ icon?: React.FunctionComponent<import("@primer/octicons-react").IconProps> | React.ElementType | React.ReactElement<any> | null;
9
+ leadingVisual?: React.ElementType | React.ReactElement<any> | null;
10
+ trailingVisual?: React.ElementType | React.ReactElement<any> | null;
11
+ trailingAction?: React.ElementType | null;
12
+ children?: React.ReactNode;
13
+ count?: number | string;
14
+ } & {
15
+ variant?: import("../Button/types").VariantType;
16
+ size?: import("../Button/types").Size;
17
+ disabled?: boolean;
18
+ block?: boolean;
19
+ loading?: boolean;
20
+ loadingAnnouncement?: string;
21
+ inactive?: boolean;
22
+ labelWrap?: boolean;
23
+ } & import("react").ButtonHTMLAttributes<HTMLButtonElement> & import("react").RefAttributes<unknown>>;
4
24
  Divider: () => import("react").JSX.Element;
5
25
  Group: import("react").ForwardRefExoticComponent<{
6
26
  children?: import("react").ReactNode | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ActionBar/index.ts"],"names":[],"mappings":"AACA,YAAY,EAAC,cAAc,EAAE,kBAAkB,EAAE,sBAAsB,EAAC,MAAM,aAAa,CAAA;AAE3F,QAAA,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;CAKb,CAAA;AAEF,eAAe,SAAS,CAAA;AACxB,OAAO,EAAC,SAAS,EAAC,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ActionBar/index.ts"],"names":[],"mappings":"AAQA,YAAY,EAAC,cAAc,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,sBAAsB,EAAC,MAAM,aAAa,CAAA;AAEjH,QAAA,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAMb,CAAA;AAEF,eAAe,SAAS,CAAA;AACxB,OAAO,EAAC,SAAS,EAAC,CAAA"}
@@ -1,7 +1,8 @@
1
- import { ActionBar as ActionBar$1, ActionBarMenu, ActionBarGroup, VerticalDivider, ActionBarIconButton } from './ActionBar.js';
1
+ import { ActionBar as ActionBar$1, ActionBarMenu, ActionBarGroup, VerticalDivider, ActionBarButton, ActionBarIconButton } from './ActionBar.js';
2
2
 
3
3
  const ActionBar = Object.assign(ActionBar$1, {
4
4
  IconButton: ActionBarIconButton,
5
+ Button: ActionBarButton,
5
6
  Divider: VerticalDivider,
6
7
  Group: ActionBarGroup,
7
8
  Menu: ActionBarMenu
@@ -1,10 +1,11 @@
1
+ import { c } from 'react-compiler-runtime';
1
2
  import { clsx } from 'clsx';
2
3
  import React, { useState, useRef, useEffect } from 'react';
3
4
  import { DEFAULT_AVATAR_SIZE } from '../Avatar/Avatar.js';
4
5
  import { isResponsiveValue } from '../hooks/useResponsiveValue.js';
5
6
  import classes from './AvatarStack.module.css.js';
6
7
  import { hasInteractiveNodes } from '../internal/utils/hasInteractiveNodes.js';
7
- import { jsx, jsxs } from 'react/jsx-runtime';
8
+ import { jsxs, jsx } from 'react/jsx-runtime';
8
9
 
9
10
  const transformChildren = (children, shape) => {
10
11
  return React.Children.map(children, child => {
@@ -16,136 +17,249 @@ const transformChildren = (children, shape) => {
16
17
  });
17
18
  });
18
19
  };
19
- const AvatarStackBody = ({
20
- disableExpand,
21
- hasInteractiveChildren,
22
- stackContainer,
23
- children
24
- }) => {
25
- return /*#__PURE__*/jsx("div", {
26
- "data-component": "AvatarStack.Body",
27
- "data-disable-expand": disableExpand ? '' : undefined,
28
- className: clsx({
29
- 'pc-AvatarStack--disableExpand': disableExpand
30
- }, 'pc-AvatarStackBody', classes.AvatarStackBody),
31
- tabIndex: !hasInteractiveChildren && !disableExpand ? 0 : undefined,
32
- ref: stackContainer,
33
- children: children
34
- });
20
+ const AvatarStackBody = t0 => {
21
+ const $ = c(8);
22
+ const {
23
+ disableExpand,
24
+ hasInteractiveChildren,
25
+ stackContainer,
26
+ children
27
+ } = t0;
28
+ const t1 = disableExpand ? "" : undefined;
29
+ let t2;
30
+ if ($[0] !== disableExpand) {
31
+ t2 = clsx({
32
+ "pc-AvatarStack--disableExpand": disableExpand
33
+ }, "pc-AvatarStackBody", classes.AvatarStackBody);
34
+ $[0] = disableExpand;
35
+ $[1] = t2;
36
+ } else {
37
+ t2 = $[1];
38
+ }
39
+ const t3 = !hasInteractiveChildren && !disableExpand ? 0 : undefined;
40
+ let t4;
41
+ if ($[2] !== children || $[3] !== stackContainer || $[4] !== t1 || $[5] !== t2 || $[6] !== t3) {
42
+ t4 = /*#__PURE__*/jsx("div", {
43
+ "data-component": "AvatarStack.Body",
44
+ "data-disable-expand": t1,
45
+ className: t2,
46
+ tabIndex: t3,
47
+ ref: stackContainer,
48
+ children: children
49
+ });
50
+ $[2] = children;
51
+ $[3] = stackContainer;
52
+ $[4] = t1;
53
+ $[5] = t2;
54
+ $[6] = t3;
55
+ $[7] = t4;
56
+ } else {
57
+ t4 = $[7];
58
+ }
59
+ return t4;
35
60
  };
36
- AvatarStackBody.displayName = "AvatarStackBody";
37
- const AvatarStack = ({
38
- children,
39
- variant = 'cascade',
40
- shape = 'circle',
41
- alignRight,
42
- disableExpand,
43
- size,
44
- className,
45
- style
46
- }) => {
61
+ const AvatarStack = t0 => {
62
+ const $ = c(36);
63
+ const {
64
+ children,
65
+ variant: t1,
66
+ shape: t2,
67
+ alignRight,
68
+ disableExpand,
69
+ size,
70
+ className,
71
+ style
72
+ } = t0;
73
+ const variant = t1 === undefined ? "cascade" : t1;
74
+ const shape = t2 === undefined ? "circle" : t2;
47
75
  const [hasInteractiveChildren, setHasInteractiveChildren] = useState(false);
48
76
  const stackContainer = useRef(null);
49
77
  const count = React.Children.count(children);
50
- const getAvatarChildSizes = () => {
51
- const avatarSizeMap = {
52
- narrow: [],
53
- regular: [],
54
- wide: []
55
- };
56
- return React.Children.toArray(children).reduce((acc, child) => {
57
- // if child is not an Avatar, return the default avatar sizes from the accumulator
58
- if (! /*#__PURE__*/React.isValidElement(child)) return acc;
59
- for (const responsiveKey of Object.keys(avatarSizeMap)) {
60
- // if the child has responsive `size` prop values, push the value to the appropriate viewport property in the avatarSizeMap
61
- if (isResponsiveValue(child.props.size)) {
62
- avatarSizeMap[responsiveKey].push(child.props.size[responsiveKey] || DEFAULT_AVATAR_SIZE);
78
+ let t3;
79
+ if ($[0] !== children) {
80
+ const getAvatarChildSizes = () => {
81
+ const avatarSizeMap = {
82
+ narrow: [],
83
+ regular: [],
84
+ wide: []
85
+ };
86
+ return React.Children.toArray(children).reduce((acc, child) => {
87
+ if (! /*#__PURE__*/React.isValidElement(child)) {
88
+ return acc;
63
89
  }
64
- // otherwise, the size is a number (or undefined), so push the value to all viewport properties in the avatarSizeMap
65
- else {
66
- avatarSizeMap[responsiveKey].push(child.props.size || DEFAULT_AVATAR_SIZE);
90
+ for (const responsiveKey of Object.keys(avatarSizeMap)) {
91
+ if (isResponsiveValue(child.props.size)) {
92
+ avatarSizeMap[responsiveKey].push(child.props.size[responsiveKey] || DEFAULT_AVATAR_SIZE);
93
+ } else {
94
+ avatarSizeMap[responsiveKey].push(child.props.size || DEFAULT_AVATAR_SIZE);
95
+ }
96
+ acc[responsiveKey] = Math.min(...avatarSizeMap[responsiveKey]);
67
97
  }
68
-
69
- // set the smallest size in each viewport property as the value for that viewport property in the accumulator
70
- acc[responsiveKey] = Math.min(...avatarSizeMap[responsiveKey]);
71
- }
72
- return acc;
73
- }, {
74
- narrow: DEFAULT_AVATAR_SIZE,
75
- regular: DEFAULT_AVATAR_SIZE,
76
- wide: DEFAULT_AVATAR_SIZE
77
- });
78
- };
79
- const childSizes = getAvatarChildSizes();
80
- useEffect(() => {
81
- if (stackContainer.current) {
82
- const interactiveChildren = () => {
83
- setHasInteractiveChildren(hasInteractiveNodes(stackContainer.current));
84
- };
85
- const observer = new MutationObserver(interactiveChildren);
86
- observer.observe(stackContainer.current, {
87
- childList: true
98
+ return acc;
99
+ }, {
100
+ narrow: DEFAULT_AVATAR_SIZE,
101
+ regular: DEFAULT_AVATAR_SIZE,
102
+ wide: DEFAULT_AVATAR_SIZE
88
103
  });
89
-
90
- // Call on initial render, then call it again only if there's a mutation
91
- // eslint-disable-next-line react-you-might-not-need-an-effect/no-initialize-state
92
- interactiveChildren();
93
- return () => {
94
- observer.disconnect();
95
- };
96
- }
97
- }, []);
98
- const getResponsiveAvatarSizeStyles = () => {
99
- // if there is no size set on the AvatarStack, use the `size` props of the Avatar children to set the `--avatar-stack-size` CSS variable
100
- if (!size) {
101
- return {
102
- '--stackSize-narrow': `${childSizes.narrow}px`,
103
- '--stackSize-regular': `${childSizes.regular}px`,
104
- '--stackSize-wide': `${childSizes.wide}px`
105
- };
106
- }
107
-
108
- // if the `size` prop is set and responsive, set the `--avatar-stack-size` CSS variable for each viewport
109
- if (isResponsiveValue(size)) {
104
+ };
105
+ t3 = getAvatarChildSizes();
106
+ $[0] = children;
107
+ $[1] = t3;
108
+ } else {
109
+ t3 = $[1];
110
+ }
111
+ const childSizes = t3;
112
+ let t4;
113
+ let t5;
114
+ if ($[2] === Symbol.for("react.memo_cache_sentinel")) {
115
+ t4 = () => {
116
+ if (stackContainer.current) {
117
+ const interactiveChildren = () => {
118
+ setHasInteractiveChildren(hasInteractiveNodes(stackContainer.current));
119
+ };
120
+ const observer = new MutationObserver(interactiveChildren);
121
+ observer.observe(stackContainer.current, {
122
+ childList: true
123
+ });
124
+ interactiveChildren();
125
+ return () => {
126
+ observer.disconnect();
127
+ };
128
+ }
129
+ };
130
+ t5 = [];
131
+ $[2] = t4;
132
+ $[3] = t5;
133
+ } else {
134
+ t4 = $[2];
135
+ t5 = $[3];
136
+ }
137
+ useEffect(t4, t5);
138
+ let t6;
139
+ if ($[4] !== childSizes || $[5] !== size) {
140
+ t6 = () => {
141
+ if (!size) {
142
+ return {
143
+ "--stackSize-narrow": `${childSizes.narrow}px`,
144
+ "--stackSize-regular": `${childSizes.regular}px`,
145
+ "--stackSize-wide": `${childSizes.wide}px`
146
+ };
147
+ }
148
+ if (isResponsiveValue(size)) {
149
+ return {
150
+ "--stackSize-narrow": `${size.narrow || DEFAULT_AVATAR_SIZE}px`,
151
+ "--stackSize-regular": `${size.regular || DEFAULT_AVATAR_SIZE}px`,
152
+ "--stackSize-wide": `${size.wide || DEFAULT_AVATAR_SIZE}px`
153
+ };
154
+ }
110
155
  return {
111
- '--stackSize-narrow': `${size.narrow || DEFAULT_AVATAR_SIZE}px`,
112
- '--stackSize-regular': `${size.regular || DEFAULT_AVATAR_SIZE}px`,
113
- '--stackSize-wide': `${size.wide || DEFAULT_AVATAR_SIZE}px`
156
+ "--avatar-stack-size": `${size}px`
114
157
  };
115
- }
116
-
117
- // if the `size` prop is set and not responsive, it is a number, so we can just set the `--avatar-stack-size` CSS variable to that number
118
- return {
119
- '--avatar-stack-size': `${size}px`
120
158
  };
121
- };
122
- return /*#__PURE__*/jsx("span", {
123
- "data-component": "AvatarStack",
124
- "data-variant": variant,
125
- "data-shape": shape,
126
- "data-avatar-count": count > 3 ? '3+' : count,
127
- "data-align-right": alignRight ? '' : undefined,
128
- "data-responsive": !size || isResponsiveValue(size) ? '' : undefined,
129
- className: clsx({
130
- 'pc-AvatarStack--variant': variant,
131
- 'pc-AvatarStack--shape': shape,
132
- 'pc-AvatarStack--two': count === 2,
133
- 'pc-AvatarStack--three': count === 3,
134
- 'pc-AvatarStack--three-plus': count > 3,
135
- 'pc-AvatarStack--right': alignRight
136
- }, className, classes.AvatarStack),
137
- style: {
138
- ...getResponsiveAvatarSizeStyles(),
159
+ $[4] = childSizes;
160
+ $[5] = size;
161
+ $[6] = t6;
162
+ } else {
163
+ t6 = $[6];
164
+ }
165
+ const getResponsiveAvatarSizeStyles = t6;
166
+ const t7 = count > 3 ? "3+" : count;
167
+ const t8 = alignRight ? "" : undefined;
168
+ const t9 = !size || isResponsiveValue(size) ? "" : undefined;
169
+ const t10 = count === 2;
170
+ const t11 = count === 3;
171
+ const t12 = count > 3;
172
+ let t13;
173
+ if ($[7] !== alignRight || $[8] !== className || $[9] !== shape || $[10] !== t10 || $[11] !== t11 || $[12] !== t12 || $[13] !== variant) {
174
+ t13 = clsx({
175
+ "pc-AvatarStack--variant": variant,
176
+ "pc-AvatarStack--shape": shape,
177
+ "pc-AvatarStack--two": t10,
178
+ "pc-AvatarStack--three": t11,
179
+ "pc-AvatarStack--three-plus": t12,
180
+ "pc-AvatarStack--right": alignRight
181
+ }, className, classes.AvatarStack);
182
+ $[7] = alignRight;
183
+ $[8] = className;
184
+ $[9] = shape;
185
+ $[10] = t10;
186
+ $[11] = t11;
187
+ $[12] = t12;
188
+ $[13] = variant;
189
+ $[14] = t13;
190
+ } else {
191
+ t13 = $[14];
192
+ }
193
+ let t14;
194
+ if ($[15] !== getResponsiveAvatarSizeStyles) {
195
+ t14 = getResponsiveAvatarSizeStyles();
196
+ $[15] = getResponsiveAvatarSizeStyles;
197
+ $[16] = t14;
198
+ } else {
199
+ t14 = $[16];
200
+ }
201
+ let t15;
202
+ if ($[17] !== style || $[18] !== t14) {
203
+ t15 = {
204
+ ...t14,
139
205
  ...style
140
- },
141
- children: /*#__PURE__*/jsxs(AvatarStackBody, {
206
+ };
207
+ $[17] = style;
208
+ $[18] = t14;
209
+ $[19] = t15;
210
+ } else {
211
+ t15 = $[19];
212
+ }
213
+ let t16;
214
+ if ($[20] !== children || $[21] !== shape) {
215
+ t16 = transformChildren(children, shape);
216
+ $[20] = children;
217
+ $[21] = shape;
218
+ $[22] = t16;
219
+ } else {
220
+ t16 = $[22];
221
+ }
222
+ let t17;
223
+ if ($[23] !== disableExpand || $[24] !== hasInteractiveChildren || $[25] !== t16) {
224
+ t17 = /*#__PURE__*/jsxs(AvatarStackBody, {
142
225
  disableExpand: disableExpand,
143
226
  hasInteractiveChildren: hasInteractiveChildren,
144
227
  stackContainer: stackContainer,
145
- children: [' ', transformChildren(children, shape)]
146
- })
147
- });
228
+ children: [" ", t16]
229
+ });
230
+ $[23] = disableExpand;
231
+ $[24] = hasInteractiveChildren;
232
+ $[25] = t16;
233
+ $[26] = t17;
234
+ } else {
235
+ t17 = $[26];
236
+ }
237
+ let t18;
238
+ if ($[27] !== shape || $[28] !== t13 || $[29] !== t15 || $[30] !== t17 || $[31] !== t7 || $[32] !== t8 || $[33] !== t9 || $[34] !== variant) {
239
+ t18 = /*#__PURE__*/jsx("span", {
240
+ "data-component": "AvatarStack",
241
+ "data-variant": variant,
242
+ "data-shape": shape,
243
+ "data-avatar-count": t7,
244
+ "data-align-right": t8,
245
+ "data-responsive": t9,
246
+ className: t13,
247
+ style: t15,
248
+ children: t17
249
+ });
250
+ $[27] = shape;
251
+ $[28] = t13;
252
+ $[29] = t15;
253
+ $[30] = t17;
254
+ $[31] = t7;
255
+ $[32] = t8;
256
+ $[33] = t9;
257
+ $[34] = variant;
258
+ $[35] = t18;
259
+ } else {
260
+ t18 = $[35];
261
+ }
262
+ return t18;
148
263
  };
149
- AvatarStack.displayName = "AvatarStack";
150
264
 
151
265
  export { AvatarStack as default };