@deque/cauldron-react 7.2.0-canary.f495a82b → 7.3.0-canary.3a9f8d48

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.
@@ -1,19 +1,27 @@
1
1
  import React from 'react';
2
2
  import type { onActionCallbackFunction } from '../ActionList/ActionListContext';
3
+ import AnchoredOverlay from '../AnchoredOverlay';
3
4
  interface ActionMenuListProps {
4
5
  ref?: React.Ref<HTMLElement>;
5
6
  onAction?: onActionCallbackFunction;
6
7
  [key: string]: unknown;
7
8
  }
8
- type ActionMenuTriggerProps = Pick<React.HTMLAttributes<HTMLButtonElement>, 'children' | 'onClick' | 'onKeyDown' | 'aria-expanded' | 'aria-haspopup' | 'aria-controls'> & {
9
- ref: React.RefObject<HTMLButtonElement | null>;
9
+ /**
10
+ * Props passed to an `ActionMenu` trigger render function. The element type
11
+ * defaults to `HTMLButtonElement`; annotate it (e.g. `ActionMenuTriggerProps<HTMLLIElement>`)
12
+ * when the trigger is not a button — for example a `MenuItem`/`TopBarItem`
13
+ * (`<li>`) in the documented `TopBar`/`MenuBar` nesting — so the `ref` and
14
+ * spread handlers type against the actual element without casts.
15
+ */
16
+ export type ActionMenuTriggerProps<E extends HTMLElement = HTMLButtonElement> = Pick<React.HTMLAttributes<E>, 'children' | 'id' | 'onClick' | 'onKeyDown' | 'aria-expanded' | 'aria-haspopup' | 'aria-controls'> & {
17
+ ref: React.RefObject<E | null>;
10
18
  };
11
- type ActionMenuTriggerFunction = (props: ActionMenuTriggerProps, open: boolean) => React.ReactElement;
12
- declare const ActionMenu: React.ForwardRefExoticComponent<{
19
+ export type ActionMenuTriggerFunction<E extends HTMLElement = HTMLButtonElement> = (props: ActionMenuTriggerProps<E>, open: boolean) => React.ReactElement;
20
+ type ActionMenuProps<E extends HTMLElement = HTMLButtonElement> = {
13
21
  children: React.ReactElement<ActionMenuListProps>;
14
- trigger: React.ReactElement | ActionMenuTriggerFunction;
22
+ trigger: React.ReactElement | ActionMenuTriggerFunction<E>;
15
23
  /** Render the action menu in a different location in the dom. */
16
- portal?: HTMLElement | React.RefObject<HTMLElement | null> | undefined;
24
+ portal?: React.RefObject<HTMLElement | null> | HTMLElement;
17
25
  /**
18
26
  * Controls whether the menu should render as a child of the trigger, as opposed to
19
27
  * rendering as a sibling. Intended for use with nested menu patterns, for example
@@ -21,25 +29,17 @@ declare const ActionMenu: React.ForwardRefExoticComponent<{
21
29
  *
22
30
  * Only supported if trigger is a function *and* portal is undefined.
23
31
  */
24
- renderInTrigger?: boolean | undefined;
25
- } & Pick<{
26
- target: HTMLElement | React.RefObject<HTMLElement | null> | React.MutableRefObject<HTMLElement | null>;
27
- placement?: "auto" | import("@floating-ui/dom").Placement | "auto-start" | "auto-end" | undefined;
28
- open?: boolean | undefined;
29
- onOpenChange?: ((open: boolean) => void) | undefined;
30
- onPlacementChange?: ((placement: import("@floating-ui/dom").Placement) => void) | undefined;
31
- onShiftChange?: ((coords: import("@floating-ui/dom").Coords) => void) | undefined;
32
- offset?: number | undefined;
33
- focusTrap?: boolean | undefined;
34
- focusTrapOptions?: {
35
- disabled?: boolean | undefined;
36
- initialFocusElement?: import("../../types").ElementOrRef<HTMLElement> | undefined;
37
- returnFocus?: boolean | undefined;
38
- returnFocusElement?: import("../../types").ElementOrRef<HTMLElement> | undefined;
39
- } | undefined;
40
- portal?: HTMLElement | React.RefObject<HTMLElement | null> | undefined;
41
- children?: React.ReactNode;
42
- } & React.HTMLAttributes<HTMLElement> & {
43
- as?: React.ElementType<any, keyof React.JSX.IntrinsicElements> | undefined;
44
- } & React.RefAttributes<HTMLElement>, "placement"> & React.HTMLAttributes<HTMLElement> & React.RefAttributes<HTMLElement>>;
32
+ renderInTrigger?: boolean;
33
+ } & Pick<React.ComponentProps<typeof AnchoredOverlay>, 'placement'> & React.HTMLAttributes<HTMLElement>;
34
+ /**
35
+ * The trigger element type is parameterized (defaulting to `HTMLButtonElement`)
36
+ * so it can be widened for nested menu patterns where the trigger is not a
37
+ * button e.g. a `MenuItem`/`TopBarItem` (`<li>`) inside a `TopBar`/`MenuBar`.
38
+ * This only widens the public types of the `trigger` function; the internal
39
+ * implementation is unaffected. See the ActionMenu docs for a usage example.
40
+ */
41
+ type ActionMenuType = Omit<React.ForwardRefExoticComponent<ActionMenuProps>, keyof CallableFunction> & {
42
+ <E extends HTMLElement = HTMLButtonElement>(props: ActionMenuProps<E> & React.RefAttributes<HTMLElement>): React.ReactElement;
43
+ };
44
+ declare const ActionMenu: ActionMenuType;
45
45
  export default ActionMenu;
@@ -1 +1,2 @@
1
1
  export { default as ActionMenu } from './ActionMenu';
2
+ export type { ActionMenuTriggerProps, ActionMenuTriggerFunction } from './ActionMenu';
@@ -0,0 +1,11 @@
1
+ import React, { type ComponentPropsWithRef } from 'react';
2
+ export type MetadataListProps = {
3
+ orientation?: 'vertical' | 'horizontal';
4
+ } & ComponentPropsWithRef<'dl'>;
5
+ export declare const MetadataList: React.ForwardRefExoticComponent<Omit<MetadataListProps, "ref"> & React.RefAttributes<HTMLDListElement>>;
6
+ export type MetadataListItemProps = ComponentPropsWithRef<'div'>;
7
+ export declare const MetadataListItem: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
8
+ export type MetadataListLabelProps = ComponentPropsWithRef<'dt'>;
9
+ export declare const MetadataListLabel: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>, "ref"> & React.RefAttributes<HTMLElement>>;
10
+ export type MetadataListValueProps = ComponentPropsWithRef<'dd'>;
11
+ export declare const MetadataListValue: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>, "ref"> & React.RefAttributes<HTMLElement>>;
package/lib/index.d.ts CHANGED
@@ -44,6 +44,7 @@ export { default as TagButton } from './components/TagButton';
44
44
  export { default as Table, TableBody, TableCell, TableHead, TableHeader, TableRow, TableFooter } from './components/Table';
45
45
  export { default as Tabs, Tab, TabPanel } from './components/Tabs';
46
46
  export { DescriptionList, DescriptionListItem, DescriptionTerm, DescriptionDetails } from './components/DescriptionList';
47
+ export { MetadataList, MetadataListItem, MetadataListLabel, MetadataListValue } from './components/MetadataList';
47
48
  export { default as Stepper, Step } from './components/Stepper';
48
49
  export { default as Panel, PanelHeader, PanelContent } from './components/Panel';
49
50
  export { default as ProgressBar } from './components/ProgressBar';
@@ -67,7 +68,7 @@ export { default as PageHeader } from './components/PageHeader';
67
68
  export { default as SectionHeader } from './components/SectionHeader';
68
69
  export { default as EmptyState } from './components/EmptyState';
69
70
  export { ActionList, ActionListItem, ActionListGroup, ActionListSeparator, ActionListLinkItem } from './components/ActionList';
70
- export { ActionMenu } from './components/ActionMenu';
71
+ export { ActionMenu, type ActionMenuTriggerProps, type ActionMenuTriggerFunction } from './components/ActionMenu';
71
72
  export { default as TreeView, type TreeViewNode } from './components/TreeView';
72
73
  /**
73
74
  * Helpers / Utils
package/lib/index.js CHANGED
@@ -3366,6 +3366,27 @@ var DescriptionDetails = function (_a) {
3366
3366
  };
3367
3367
  DescriptionDetails.displayName = 'DescriptionDetails';
3368
3368
 
3369
+ var MetadataList = React.forwardRef(function (_a, ref) {
3370
+ var _b = _a.orientation, orientation = _b === void 0 ? 'horizontal' : _b, className = _a.className, children = _a.children, rest = tslib.__rest(_a, ["orientation", "className", "children"]);
3371
+ return (React__default["default"].createElement("dl", tslib.__assign({ className: classNames__default["default"]('MetadataList', "MetadataList--".concat(orientation), className), ref: ref }, rest), children));
3372
+ });
3373
+ MetadataList.displayName = 'MetadataList';
3374
+ var MetadataListItem = React.forwardRef(function (_a, ref) {
3375
+ var className = _a.className, children = _a.children, rest = tslib.__rest(_a, ["className", "children"]);
3376
+ return (React__default["default"].createElement("div", tslib.__assign({ className: classNames__default["default"]('MetadataList__item', className), ref: ref }, rest), children));
3377
+ });
3378
+ MetadataListItem.displayName = 'MetadataListItem';
3379
+ var MetadataListLabel = React.forwardRef(function (_a, ref) {
3380
+ var className = _a.className, children = _a.children, rest = tslib.__rest(_a, ["className", "children"]);
3381
+ return (React__default["default"].createElement("dt", tslib.__assign({ className: classNames__default["default"]('MetadataList__label', className), ref: ref }, rest), children));
3382
+ });
3383
+ MetadataListLabel.displayName = 'MetadataListLabel';
3384
+ var MetadataListValue = React.forwardRef(function (_a, ref) {
3385
+ var className = _a.className, children = _a.children, rest = tslib.__rest(_a, ["className", "children"]);
3386
+ return (React__default["default"].createElement("dd", tslib.__assign({ className: classNames__default["default"]('MetadataList__value', className), ref: ref }, rest), children));
3387
+ });
3388
+ MetadataListValue.displayName = 'MetadataListValue';
3389
+
3369
3390
  var isTooltipProps = function (props) {
3370
3391
  return !!props.tooltip;
3371
3392
  };
@@ -5309,7 +5330,7 @@ var ActionListLinkItem = React.forwardRef(function (_a, ref) {
5309
5330
  ActionListLinkItem.displayName = 'ActionListLinkItem';
5310
5331
 
5311
5332
  var _a = tslib.__read(['ArrowDown', 'ArrowUp'], 2), ArrowDown = _a[0], ArrowUp = _a[1];
5312
- var ActionMenu = React.forwardRef(function (_a, ref) {
5333
+ var ActionMenuComponent = React.forwardRef(function (_a, ref) {
5313
5334
  var className = _a.className, style = _a.style, trigger = _a.trigger, _b = _a.placement, placement = _b === void 0 ? 'bottom-start' : _b, actionMenuList = _a.children, portal = _a.portal, _c = _a.renderInTrigger, renderInTrigger = _c === void 0 ? false : _c, props = tslib.__rest(_a, ["className", "style", "trigger", "placement", "children", "portal", "renderInTrigger"]);
5314
5335
  var _d = tslib.__read(React.useState(false), 2), open = _d[0], setOpen = _d[1];
5315
5336
  var _e = tslib.__read(React.useState('first'), 2), focusStrategy = _e[0], setFocusStrategy = _e[1];
@@ -5427,7 +5448,8 @@ var ActionMenu = React.forwardRef(function (_a, ref) {
5427
5448
  React__default["default"].createElement(ClickOutsideListener$1, { onClickOutside: handleClickOutside, mouseEvent: open ? undefined : false, touchEvent: open ? undefined : false, target: triggerProps.ref }, actionMenuTrigger),
5428
5449
  renderInTrigger ? null : overlay));
5429
5450
  });
5430
- ActionMenu.displayName = 'ActionMenu';
5451
+ ActionMenuComponent.displayName = 'ActionMenu';
5452
+ var ActionMenu = ActionMenuComponent;
5431
5453
 
5432
5454
  var TreeViewItem = function (_a) {
5433
5455
  var id = _a.id, textValue = _a.textValue, children = _a.children;
@@ -5625,7 +5647,7 @@ var ThemeProvider = function (_a) {
5625
5647
  // eslint-disable-next-line ssr-friendly/no-dom-globals-in-react-fc
5626
5648
  _b = _a.context,
5627
5649
  // eslint-disable-next-line ssr-friendly/no-dom-globals-in-react-fc
5628
- context = _b === void 0 ? document === null || document === void 0 ? void 0 : document.body : _b, _c = _a.initialTheme, initialTheme = _c === void 0 ? 'light' : _c;
5650
+ context = _b === void 0 ? typeof document !== 'undefined' ? document.body : undefined : _b, _c = _a.initialTheme, initialTheme = _c === void 0 ? 'light' : _c;
5629
5651
  var _d = tslib.__read(React.useState(initialTheme), 2), theme = _d[0], setTheme = _d[1];
5630
5652
  var getThemeFromContext = function () {
5631
5653
  return (context === null || context === void 0 ? void 0 : context.classList.contains(DARK_THEME_CLASS)) ? 'dark' : 'light';
@@ -5744,6 +5766,10 @@ exports.LoaderOverlay = LoaderOverlay;
5744
5766
  exports.Main = Main;
5745
5767
  exports.MenuBar = TopBar$1;
5746
5768
  exports.MenuItem = MenuItem;
5769
+ exports.MetadataList = MetadataList;
5770
+ exports.MetadataListItem = MetadataListItem;
5771
+ exports.MetadataListLabel = MetadataListLabel;
5772
+ exports.MetadataListValue = MetadataListValue;
5747
5773
  exports.Modal = Modal;
5748
5774
  exports.ModalCloseButton = ModalCloseButton;
5749
5775
  exports.ModalContent = ModalContent;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deque/cauldron-react",
3
- "version": "7.2.0-canary.f495a82b",
3
+ "version": "7.3.0-canary.3a9f8d48",
4
4
  "license": "MPL-2.0",
5
5
  "description": "Fully accessible react components library for Deque Cauldron",
6
6
  "homepage": "https://cauldron.dequelabs.com/",
@@ -25,6 +25,7 @@
25
25
  "tslib": "^2.4.0"
26
26
  },
27
27
  "devDependencies": {
28
+ "@arethetypeswrong/cli": "^0.18.4",
28
29
  "@babel/core": "^7.29.7",
29
30
  "@babel/plugin-proposal-export-default-from": "^7.29.7",
30
31
  "@babel/preset-env": "^7.29.7",
@@ -60,6 +61,7 @@
60
61
  "postcss-import": "^16.1.1",
61
62
  "postcss-loader": "^8.2.1",
62
63
  "prop-types": "^15.8.1",
64
+ "publint": "^0.3.21",
63
65
  "react": "^19",
64
66
  "react-dom": "^19",
65
67
  "rollup": "^2.23.0",
@@ -81,6 +83,7 @@
81
83
  "build:lib": "rollup -c",
82
84
  "build:css": "postcss --output=lib/cauldron.css src/index.css",
83
85
  "typecheck": "tsc --noEmit --skipLibCheck",
86
+ "verify:packaging": "pnpm build && node scripts/verifyPackaging.js",
84
87
  "dev": "concurrently 'pnpm build:css --watch' 'rollup -c --watch'",
85
88
  "test": "jest --maxWorkers=1 --coverage",
86
89
  "figma:parse": "figma connect parse",