@postenbring/hedwig-react 0.0.59 → 0.0.60

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.
@@ -832,6 +832,10 @@ export { InputProps as InputProps_alias_4 }
832
832
 
833
833
  export declare const Inverted: Story_16;
834
834
 
835
+ export declare const JustACheckbox: Story_8;
836
+
837
+ export declare const JustARadiobutton: Story_12;
838
+
835
839
  export declare const JustOneItem: Story;
836
840
 
837
841
  export declare const LargeLegend: Story_10;
@@ -1206,8 +1210,6 @@ export { Radiobutton as Radiobutton_alias_2 }
1206
1210
  export { Radiobutton as Radiobutton_alias_3 }
1207
1211
  export { Radiobutton as Radiobutton_alias_4 }
1208
1212
 
1209
- export declare const RadiobuttonInFieldset: Story_12;
1210
-
1211
1213
  declare interface RadiobuttonProps extends Omit<InputHTMLAttributes<HTMLInputElement>, "defaultValue"> {
1212
1214
  variant?: "plain" | "bounding-box";
1213
1215
  hasError?: boolean;
@@ -832,6 +832,10 @@ export { InputProps as InputProps_alias_4 }
832
832
 
833
833
  export declare const Inverted: Story_16;
834
834
 
835
+ export declare const JustACheckbox: Story_8;
836
+
837
+ export declare const JustARadiobutton: Story_12;
838
+
835
839
  export declare const JustOneItem: Story;
836
840
 
837
841
  export declare const LargeLegend: Story_10;
@@ -1206,8 +1210,6 @@ export { Radiobutton as Radiobutton_alias_2 }
1206
1210
  export { Radiobutton as Radiobutton_alias_3 }
1207
1211
  export { Radiobutton as Radiobutton_alias_4 }
1208
1212
 
1209
- export declare const RadiobuttonInFieldset: Story_12;
1210
-
1211
1213
  declare interface RadiobuttonProps extends Omit<InputHTMLAttributes<HTMLInputElement>, "defaultValue"> {
1212
1214
  variant?: "plain" | "bounding-box";
1213
1215
  hasError?: boolean;
@@ -12,6 +12,7 @@ import {
12
12
  import { createContext, useContext, forwardRef, useState, useRef, useEffect } from "react";
13
13
  import { createRoot } from "react-dom/client";
14
14
  import { clsx } from "@postenbring/hedwig-css/typed-classname";
15
+ import FocusTrap from "focus-trap-react";
15
16
  import { jsx, jsxs } from "react/jsx-runtime";
16
17
  var navbarContext = createContext([
17
18
  false,
@@ -30,7 +31,11 @@ function NavbarExpandableMenu({ children }) {
30
31
  document.body.classList.remove(clsx("hds-navbar-scroll-lock"));
31
32
  }
32
33
  };
33
- return /* @__PURE__ */ jsx(navbarContext.Provider, { value: [open, toggleOpen], children });
34
+ const navbarElement = document.getElementsByClassName(clsx("hds-navbar"))[0];
35
+ return /* @__PURE__ */ jsxs(navbarContext.Provider, { value: [open, toggleOpen], children: [
36
+ open ? /* @__PURE__ */ jsx(FocusTrap, { containerElements: [navbarElement] }) : null,
37
+ children
38
+ ] });
34
39
  }
35
40
  NavbarExpandableMenu.displayName = "NavbarExpandableMenu";
36
41
  function RenderButton(_a) {
@@ -173,4 +178,4 @@ export {
173
178
  NavbarExpandableMenuTrigger,
174
179
  NavbarExpandableMenuContent
175
180
  };
176
- //# sourceMappingURL=chunk-WDD7QJP6.mjs.map
181
+ //# sourceMappingURL=chunk-2E6XPNPX.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/navbar/navbar-expandable-menu.tsx"],"sourcesContent":["import React, { createContext, useContext, forwardRef, useState, useRef, useEffect } from \"react\";\nimport { createRoot } from \"react-dom/client\";\nimport type { ClassValue } from \"@postenbring/hedwig-css/typed-classname/index.mjs\";\nimport { clsx } from \"@postenbring/hedwig-css/typed-classname\";\nimport FocusTrap from \"focus-trap-react\";\nimport type { OverridableComponent } from \"../utils\";\nimport { CloseIcon, MenuIcon } from \"./icons\";\n\nconst navbarContext = createContext([\n false as boolean,\n () => {\n // Empty\n },\n] as const);\n\n/**\n * Root\n */\nexport interface NavbarExpandableMenuProps {\n children: React.ReactNode;\n}\nexport function NavbarExpandableMenu({ children }: NavbarExpandableMenuProps) {\n const [open, setOpen] = useState(false);\n const toggleOpen = () => {\n const nextOpenState = !open;\n setOpen(nextOpenState);\n if (nextOpenState) {\n window.scrollTo(0, 0);\n document.body.classList.add(clsx(\"hds-navbar-scroll-lock\"));\n } else {\n document.body.classList.remove(clsx(\"hds-navbar-scroll-lock\"));\n }\n };\n const navbarElement = document.getElementsByClassName(clsx(\"hds-navbar\"))[0];\n return (\n <navbarContext.Provider value={[open, toggleOpen]}>\n {open ? <FocusTrap containerElements={[navbarElement as HTMLElement]} /> : null}\n {children}\n </navbarContext.Provider>\n );\n}\nNavbarExpandableMenu.displayName = \"NavbarExpandableMenu\";\n\ninterface ButtonInterface {\n className?: ClassValue;\n open?: boolean;\n innerRef?: React.RefObject<HTMLButtonElement>;\n ref?: React.ForwardedRef<HTMLButtonElement>;\n text: React.ReactNode;\n title?: string;\n toggleOpen?: () => void;\n width?: number;\n}\n\nfunction RenderButton({\n className,\n innerRef,\n open = false,\n ref,\n text,\n title,\n toggleOpen,\n width,\n ...rest\n}: ButtonInterface) {\n const icon = open ? <CloseIcon /> : <MenuIcon />;\n const style = width ? { width } : {};\n return (\n <button\n className={clsx(\"hds-navbar__button\", className)}\n onClick={toggleOpen}\n ref={ref ?? innerRef}\n style={style}\n title={title}\n type=\"button\"\n {...rest}\n >\n {text} {icon}\n </button>\n );\n}\n\n/**\n * Trigger\n *\n * ## TODO\n * - [ ] Hide text when on mobile\n * - [X] Open / Close icon\n * - [X] Make button have consistant width\n */\n\nexport interface NavbarExpandableMenuTriggerProps\n extends Omit<React.HTMLAttributes<HTMLButtonElement>, \"children\"> {\n whenClosedText: React.ReactNode;\n whenClosedHelperTitle?: string;\n\n whenOpenText: React.ReactNode;\n whenOpenHelperTitle?: string;\n}\nexport const NavbarExpandableMenuTrigger = forwardRef<\n HTMLButtonElement,\n NavbarExpandableMenuTriggerProps\n>(\n (\n {\n whenClosedText,\n whenClosedHelperTitle,\n\n whenOpenText,\n whenOpenHelperTitle,\n\n className,\n ...rest\n },\n ref,\n ) => {\n const [open, toggleOpen] = useContext(navbarContext);\n const [width, setWidth] = useState(0);\n const measureButtonRef = useRef<HTMLButtonElement>(null);\n\n const text: React.ReactNode = open ? whenOpenText : whenClosedText;\n const title = open ? whenOpenHelperTitle : whenClosedHelperTitle;\n\n /**\n *\n * @param element - Button to measure\n * @param callback - report the width back\n */\n const measureButton = (element: React.ReactNode, callback: (width: number) => void) => {\n // Create an empty div to render the Button in\n const container = document.createElement(\"div\");\n container.style.cssText = \"display: inline-block; position: absolute; visibility: hidden\";\n\n // Attach the empty div inside the navigation section\n const c = document.getElementsByClassName(\"hds-navbar__navigation\")[0];\n c.appendChild(container);\n\n // Render the Button here\n const root = createRoot(container as HTMLElement);\n root.render(element);\n\n /**\n * Get the offsetWidth now that it is rendered\n * Also clean up after us\n */\n const getWidth = () => {\n callback(measureButtonRef.current?.offsetWidth ?? 0);\n root.unmount();\n c.removeChild(container);\n };\n // This is instead of the callback that used to be on ReactDOM.render()\n setTimeout(getWidth, 0);\n };\n\n useEffect(() => {\n measureButton(\n <RenderButton\n className={(className ? className : \"\") as ClassValue}\n innerRef={measureButtonRef}\n text={whenClosedText}\n title={title}\n {...rest}\n />,\n (closedWidth: number) => {\n measureButton(\n <RenderButton\n className={(className ? className : \"\") as ClassValue}\n innerRef={measureButtonRef}\n open\n text={whenOpenText}\n title={title}\n {...rest}\n />,\n (openWidth: number) => {\n setWidth(Math.max(openWidth, closedWidth));\n },\n );\n },\n );\n }, [className, rest, title, whenClosedText, whenOpenText]);\n\n return (\n <RenderButton\n className={(className ? className : \"\") as ClassValue}\n open={open}\n ref={ref}\n text={text as string}\n title={title}\n toggleOpen={toggleOpen}\n width={width}\n {...rest}\n />\n );\n },\n);\nNavbarExpandableMenuTrigger.displayName = \"Navbar.ExpandableMenu.Trigger\";\n\n/**\n * Content\n */\nexport interface NavbarExpandableMenuContentProps {\n children: React.ReactNode;\n className?: string;\n}\nexport const NavbarExpandableMenuContent: OverridableComponent<\n NavbarExpandableMenuContentProps,\n HTMLDivElement\n> = forwardRef(({ as: Component = \"section\", children, className, ...rest }, ref) => {\n const [open] = useContext(navbarContext);\n return (\n <Component\n {...rest}\n className={clsx(\"hds-navbar__expandable-menu-content\", className as undefined)}\n data-state={open ? \"open\" : \"closed\"}\n ref={ref}\n >\n <div className={clsx(\"hds-navbar__expandable-menu-content-inner\")}>{children}</div>\n </Component>\n );\n});\nNavbarExpandableMenuContent.displayName = \"Navbar.ExpandableMenu.Content\";\n"],"mappings":"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","names":["_a","_b"]}
@@ -8,7 +8,7 @@ import {
8
8
  NavbarExpandableMenu,
9
9
  NavbarExpandableMenuContent,
10
10
  NavbarExpandableMenuTrigger
11
- } from "./chunk-WDD7QJP6.mjs";
11
+ } from "./chunk-2E6XPNPX.mjs";
12
12
 
13
13
  // src/navbar/index.tsx
14
14
  var NavbarExpandableMenuComponent = NavbarExpandableMenu;
@@ -23,4 +23,4 @@ NavbarComponent.Navigation = NavbarNavigation;
23
23
  export {
24
24
  NavbarComponent
25
25
  };
26
- //# sourceMappingURL=chunk-SBJBQUKE.mjs.map
26
+ //# sourceMappingURL=chunk-Q3GMWURJ.mjs.map
@@ -1238,6 +1238,7 @@ NavbarNavigation.displayName = "Navbar.Navigation";
1238
1238
  var import_react22 = require("react");
1239
1239
  var import_client = require("react-dom/client");
1240
1240
  var import_typed_classname26 = require("@postenbring/hedwig-css/typed-classname");
1241
+ var import_focus_trap_react = __toESM(require("focus-trap-react"));
1241
1242
 
1242
1243
  // src/navbar/icons.tsx
1243
1244
  var import_jsx_runtime26 = require("react/jsx-runtime");
@@ -1279,7 +1280,11 @@ function NavbarExpandableMenu({ children }) {
1279
1280
  document.body.classList.remove((0, import_typed_classname26.clsx)("hds-navbar-scroll-lock"));
1280
1281
  }
1281
1282
  };
1282
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(navbarContext.Provider, { value: [open, toggleOpen], children });
1283
+ const navbarElement = document.getElementsByClassName((0, import_typed_classname26.clsx)("hds-navbar"))[0];
1284
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(navbarContext.Provider, { value: [open, toggleOpen], children: [
1285
+ open ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_focus_trap_react.default, { containerElements: [navbarElement] }) : null,
1286
+ children
1287
+ ] });
1283
1288
  }
1284
1289
  NavbarExpandableMenu.displayName = "NavbarExpandableMenu";
1285
1290
  function RenderButton(_a) {