@linzjs/lui 28.0.0 → 28.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -5,6 +5,13 @@
5
5
 
6
6
  * **LuiComboSelect:** restore interface to support styling of the input element. ([#1270](https://github.com/linz/lui/issues/1270)) ([7ce6a13](https://github.com/linz/lui/commit/7ce6a137c7f16ffa3acbe4357569a6eb59ef47db))
7
7
 
8
+ ## [28.1.0](https://github.com/linz/Lui/compare/lui-v28.0.0...lui-v28.1.0) (2026-10-01)
9
+
10
+
11
+ ### Features
12
+
13
+ * **LuiAccordicardStatic:** support clickable headers ([#1420](https://github.com/linz/Lui/issues/1420)) ([692274b](https://github.com/linz/Lui/commit/692274bc3875f3fd488e3d014982284d5a0ef960))
14
+
8
15
  ## [28.0.0](https://github.com/linz/Lui/compare/lui-v27.0.1...lui-v28.0.0) (2026-09-24)
9
16
 
10
17
 
@@ -5,5 +5,6 @@ export interface IAccordicardStatic {
5
5
  headerContent: React.ReactNode;
6
6
  className?: string;
7
7
  warning?: boolean;
8
+ expandOnHeaderClick?: boolean;
8
9
  }
9
10
  export declare const LuiAccordicardStatic: (props: IAccordicardStatic) => React.JSX.Element;
package/dist/index.js CHANGED
@@ -33999,16 +33999,32 @@ const LuiAccordicard = (props) => {
33999
33999
  };
34000
34000
 
34001
34001
  const LuiAccordicardStatic = (props) => {
34002
- const { defaultToOpen = false, children, headerContent } = props;
34002
+ const { defaultToOpen = false, children, headerContent, expandOnHeaderClick = false, } = props;
34003
34003
  const [isOpen, setIsOpen] = React.useState(defaultToOpen);
34004
- return (React__default["default"].createElement("div", { className: clsx('LuiAccordicardStatic', isOpen ? 'LuiAccordicardStatic--isOpen' : null, props.warning ? 'LuiAccordicardStatic--warning' : null, props.className) },
34004
+ const contentId = React.useId();
34005
+ const toggle = () => setIsOpen((currentIsOpen) => !currentIsOpen);
34006
+ const isInteractiveTarget = (target, currentTarget) => {
34007
+ if (!(target instanceof Element))
34008
+ return false;
34009
+ const interactiveTarget = target.closest('a, button, input, label, select, textarea, summary, [contenteditable="true"], [tabindex]:not([tabindex="-1"]), [role="button"], [role="checkbox"], [role="combobox"], [role="link"], [role="menuitem"], [role="menuitemcheckbox"], [role="menuitemradio"], [role="option"], [role="radio"], [role="switch"], [role="tab"], [role="textbox"], [role="spinbutton"]');
34010
+ return interactiveTarget !== null && interactiveTarget !== currentTarget;
34011
+ };
34012
+ const handleHeaderClick = (event) => {
34013
+ if (!expandOnHeaderClick)
34014
+ return;
34015
+ if (isInteractiveTarget(event.target, event.currentTarget))
34016
+ return;
34017
+ toggle();
34018
+ };
34019
+ return (React__default["default"].createElement("div", { className: clsx('LuiAccordicardStatic', isOpen ? 'LuiAccordicardStatic--isOpen' : null, props.warning ? 'LuiAccordicardStatic--warning' : null, expandOnHeaderClick ? 'LuiAccordicardStatic--clickableHeader' : null, props.className) },
34005
34020
  props.warning && (React__default["default"].createElement("div", { className: "LuiAccordicardStatic-sideBar" },
34006
34021
  React__default["default"].createElement(LuiIcon, { className: "LuiAccordicardStatic-warningIcon", alt: "Accordicard warning", name: 'ic_warning', size: 'md' }))),
34007
- React__default["default"].createElement("div", { className: "LuiAccordicardStatic-header" },
34022
+ React__default["default"].createElement("div", { className: "LuiAccordicardStatic-header", onClick: handleHeaderClick },
34023
+ expandOnHeaderClick && (React__default["default"].createElement("button", { "aria-controls": contentId, "aria-expanded": isOpen, "aria-label": "Expand and collapse panel", className: "LuiAccordicardStatic-headerToggle", onClick: toggle, type: "button" })),
34008
34024
  React__default["default"].createElement("div", { className: "LuiAccordicardStatic-headerContent" }, headerContent)),
34009
- React__default["default"].createElement("div", { className: clsx('LuiAccordicardStatic-contentWrapper', isOpen ? 'LuiAccordicardStatic-contentWrapper--isOpen' : null) },
34025
+ React__default["default"].createElement("div", { id: contentId, className: clsx('LuiAccordicardStatic-contentWrapper', isOpen ? 'LuiAccordicardStatic-contentWrapper--isOpen' : null) },
34010
34026
  React__default["default"].createElement("div", { className: clsx('LuiAccordicardStatic-content', isOpen ? 'LuiAccordicardStatic-content--isOpen' : null) }, isOpen ? children : React__default["default"].createElement(React__default["default"].Fragment, null))),
34011
- React__default["default"].createElement("button", { "aria-label": isOpen ? 'Expanded' : 'Closed', className: "LuiAccordicardStatic-trigger", onClick: () => setIsOpen(!isOpen), type: "button" },
34027
+ React__default["default"].createElement("button", { "aria-label": isOpen ? 'Expanded' : 'Closed', className: "LuiAccordicardStatic-trigger", onClick: toggle, type: "button" },
34012
34028
  React__default["default"].createElement(LuiIcon, { className: clsx('LuiAccordicardStatic-chevron', isOpen ? 'LuiAccordicardStatic-chevron--isOpen' : null), name: 'ic_expand_more', alt: "expand", title: "Expand and collapse panel", size: "md" }))));
34013
34029
  };
34014
34030