UNPKG

ibag

Version:

A visual, fast, and customizable front-end scaffolding.

91 lines (75 loc) 2.58 kB
"use strict"; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard"); var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports.Accordion = Accordion; exports.AccordionItem = AccordionItem; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var React = _interopRequireWildcard(require("react")); var _useId = require("./use-id"); var keys = _interopRequireWildcard(require("../helpers/keys")); var _match = require("../helpers/match"); function ChevronIcon() { return /*#__PURE__*/React.createElement("svg", { focusable: "false", preserveAspectRatio: "xMidYMid meet", xmlns: "http://www.w3.org/2000/svg", fill: "currentColor", width: "16", height: "16", viewBox: "0 0 16 16", "aria-hidden": "true", "data-gatsby-overlay": "chevron-icon" }, /*#__PURE__*/React.createElement("path", { d: "M11 8L6 13 5.3 12.3 9.6 8 5.3 3.7 6 3z" })); } function Accordion({ children, ...rest }) { return /*#__PURE__*/React.createElement("ul", (0, _extends2.default)({ "data-gatsby-overlay": "accordion" }, rest), children); } function AccordionItem({ children, disabled = false, open = false, title = `title`, ...rest }) { const [isOpen, setIsOpen] = React.useState(open); const [prevIsOpen, setPrevIsOpen] = React.useState(open); const id = (0, _useId.useId)(`accordion-item`); if (open !== prevIsOpen) { setIsOpen(open); setPrevIsOpen(open); } const toggleOpen = () => { const nextValue = !isOpen; setIsOpen(nextValue); }; // If the AccordionItem is open, and the user hits the ESC key, then close it const onKeyDown = event => { if (isOpen && (0, _match.match)(event, keys.Escape)) { setIsOpen(false); } }; return /*#__PURE__*/React.createElement("li", (0, _extends2.default)({ "data-gatsby-overlay": "accordion__item", "data-accordion-active": isOpen ? `true` : `false` }, rest), /*#__PURE__*/React.createElement("button", { "data-gatsby-overlay": "accordion__item__heading", type: "button", disabled: disabled, "aria-controls": id, "aria-expanded": isOpen, onClick: toggleOpen, onKeyDown: onKeyDown }, /*#__PURE__*/React.createElement(ChevronIcon, null), /*#__PURE__*/React.createElement("div", { "data-gatsby-overlay": "accordion__item__title" }, title)), /*#__PURE__*/React.createElement("div", { id: id, "data-gatsby-overlay": "accordion__item__content" }, children)); }