@postenbring/hedwig-react 2.1.2 → 2.1.3

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.
@@ -7,8 +7,8 @@ import {
7
7
  NavbarLogo,
8
8
  NavbarLogoAndServiceText,
9
9
  NavbarNavigation
10
- } from "../chunk-AQZALI2J.mjs";
11
- import "../chunk-ZV4GTALL.mjs";
10
+ } from "../chunk-DTU7AXY3.mjs";
11
+ import "../chunk-DRSAVDIE.mjs";
12
12
  import "../chunk-XMDDGSCF.mjs";
13
13
  import "../chunk-ILFK3VKS.mjs";
14
14
  import "../chunk-YOSPWY5K.mjs";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@postenbring/hedwig-react",
3
- "version": "2.1.2",
3
+ "version": "2.1.3",
4
4
  "main": "./dist/index.js",
5
5
  "module": "./dist/index.mjs",
6
6
  "types": "./dist/index.d.ts",
@@ -31,7 +31,7 @@
31
31
  "dependencies": {
32
32
  "@radix-ui/react-popover": "1.1.13",
33
33
  "@radix-ui/react-slot": "1.2.2",
34
- "@postenbring/hedwig-css": "2.1.2"
34
+ "@postenbring/hedwig-css": "2.1.3"
35
35
  },
36
36
  "publishConfig": {
37
37
  "access": "public"
@@ -8,6 +8,7 @@ interface ExpandableMenuContextProps {
8
8
  setOpen: (open: boolean) => void;
9
9
  contentId: string;
10
10
  }
11
+
11
12
  const ExpandableMenuContext = createContext<ExpandableMenuContextProps | null>(null);
12
13
  export const useNavbarExpendableMenuContext = () => {
13
14
  const value = useContext(ExpandableMenuContext);
@@ -53,6 +54,7 @@ export function NavbarExpandableMenu({ children }: NavbarExpandableMenuProps) {
53
54
  </ExpandableMenuContext.Provider>
54
55
  );
55
56
  }
57
+
56
58
  NavbarExpandableMenu.displayName = "NavbarExpandableMenu";
57
59
 
58
60
  /**
@@ -66,6 +68,7 @@ export interface NavbarExpandableMenuTriggerProps
66
68
  whenOpenText: React.ReactNode;
67
69
  whenOpenHelperTitle?: string;
68
70
  }
71
+
69
72
  export const NavbarExpandableMenuTrigger = forwardRef<
70
73
  HTMLButtonElement,
71
74
  NavbarExpandableMenuTriggerProps
@@ -86,23 +89,6 @@ export const NavbarExpandableMenuTrigger = forwardRef<
86
89
  ) => {
87
90
  const { contentId, open, setOpen } = useNavbarExpendableMenuContext();
88
91
 
89
- // Measure the width of the text when open and closed and choose the widest one
90
- // This is to ensure that the button doesn't change size when the text changes
91
- const [textWidth, setTextWidth] = useState<number | undefined>(undefined);
92
- const measurementId = useId();
93
- useEffect(() => {
94
- const widthWhenOpen =
95
- document.getElementById(`${measurementId}-when-open`)?.getBoundingClientRect().width ?? 0;
96
- const widthWhenClosed =
97
- document.getElementById(`${measurementId}-when-closed`)?.getBoundingClientRect().width ?? 0;
98
-
99
- setTextWidth(widthWhenOpen < widthWhenClosed ? widthWhenClosed : widthWhenOpen);
100
- }, [measurementId]);
101
-
102
- const text = open ? whenOpenText : whenClosedText;
103
- const title = open ? whenOpenHelperTitle : whenClosedHelperTitle;
104
- const icon = open ? <CloseIcon /> : <MenuIcon />;
105
-
106
92
  function toggleOpen() {
107
93
  setOpen(!open);
108
94
  }
@@ -111,48 +97,27 @@ export const NavbarExpandableMenuTrigger = forwardRef<
111
97
  <button
112
98
  aria-expanded={open}
113
99
  aria-controls={contentId}
114
- className={clsx("hds-navbar__item", className as undefined)}
100
+ className={clsx(
101
+ "hds-navbar__item",
102
+ className as undefined,
103
+ open ? "hds-navbar__item--open" : "hds-navbar__item--closed",
104
+ )}
115
105
  onClick={toggleOpen}
116
106
  ref={ref}
117
- title={title}
107
+ title={open ? whenOpenHelperTitle : whenClosedHelperTitle}
118
108
  type="button"
119
109
  style={{ position: "relative", ...style }}
120
110
  {...rest}
121
111
  >
122
- {/* Measurement elements, not shown to the user */}
123
- <span
124
- id={`${measurementId}-when-closed`}
125
- aria-hidden
126
- style={{
127
- position: "absolute",
128
- visibility: "hidden",
129
- pointerEvents: "none",
130
- whiteSpace: "nowrap",
131
- }}
132
- >
133
- {whenOpenText}
134
- </span>
135
- <span
136
- id={`${measurementId}-when-open`}
137
- aria-hidden
138
- style={{
139
- position: "absolute",
140
- visibility: "hidden",
141
- pointerEvents: "none",
142
- whiteSpace: "nowrap",
143
- }}
144
- >
145
- {whenClosedText}
112
+ <span className="hds-navbar__item-responsive-text">
113
+ <span aria-hidden={!open} className={clsx("hds-navbar__item-whenopentext")}>
114
+ {whenOpenText}
115
+ </span>
116
+ <span aria-hidden={open} className={clsx("hds-navbar__item-whenclosedtext")}>
117
+ {whenClosedText}
118
+ </span>
146
119
  </span>
147
-
148
- {/* Actual content */}
149
- <span
150
- style={{ width: textWidth, whiteSpace: "nowrap" }}
151
- className={clsx("hds-navbar__item-responsive-text")}
152
- >
153
- {text}
154
- </span>
155
- <span style={{ width: 32, height: 32 }}>{icon}</span>
120
+ <span style={{ width: 32, height: 32 }}>{open ? <CloseIcon /> : <MenuIcon />}</span>
156
121
  </button>
157
122
  );
158
123
  },
@@ -166,6 +131,7 @@ export interface NavbarExpandableMenuContentProps {
166
131
  children: React.ReactNode;
167
132
  className?: string;
168
133
  }
134
+
169
135
  export const NavbarExpandableMenuContent = forwardRef<
170
136
  HTMLDivElement,
171
137
  NavbarExpandableMenuContentProps
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/navbar/navbar-expandable-menu.tsx"],"sourcesContent":["import { createContext, useContext, forwardRef, useState, useEffect, useId } from \"react\";\nimport { clsx } from \"@postenbring/hedwig-css/typed-classname\";\nimport { focusTrap } from \"../utils/utils\";\nimport { CloseIcon, MenuIcon } from \"./icons\";\n\ninterface ExpandableMenuContextProps {\n open: boolean;\n setOpen: (open: boolean) => void;\n contentId: string;\n}\nconst ExpandableMenuContext = createContext<ExpandableMenuContextProps | null>(null);\nexport const useNavbarExpendableMenuContext = () => {\n const value = useContext(ExpandableMenuContext);\n if (value === null) {\n throw new Error(\"useNavbarExpendableMenuContext must be used within a Navbar.ExpandableMenu\");\n }\n return value;\n};\n\nexport interface NavbarExpandableMenuProps {\n children: React.ReactNode;\n}\n\n/**\n * Expandable Menu Provider\n * Handles scroll and focus locking,\n * as well as scrolling the user to the top of the page.\n *\n * If we want a sticky header in the future the scrolling should be configurable\n */\nexport function NavbarExpandableMenu({ children }: NavbarExpandableMenuProps) {\n const contentId = useId();\n const [open, setOpen] = useState(false);\n\n useEffect(() => {\n if (open) {\n window.scrollTo(0, 0);\n document.body.classList.add(clsx(\"hds-navbar-scroll-lock\"));\n const releaseFocusTrap = focusTrap(\n document.getElementsByClassName(clsx(\"hds-navbar\"))[0] as HTMLElement,\n );\n\n return () => {\n document.body.classList.remove(clsx(\"hds-navbar-scroll-lock\"));\n releaseFocusTrap();\n };\n }\n }, [open]);\n\n return (\n <ExpandableMenuContext.Provider value={{ contentId, open, setOpen }}>\n {children}\n </ExpandableMenuContext.Provider>\n );\n}\nNavbarExpandableMenu.displayName = \"NavbarExpandableMenu\";\n\n/**\n * Trigger\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 style,\n className,\n ...rest\n },\n ref,\n ) => {\n const { contentId, open, setOpen } = useNavbarExpendableMenuContext();\n\n // Measure the width of the text when open and closed and choose the widest one\n // This is to ensure that the button doesn't change size when the text changes\n const [textWidth, setTextWidth] = useState<number | undefined>(undefined);\n const measurementId = useId();\n useEffect(() => {\n const widthWhenOpen =\n document.getElementById(`${measurementId}-when-open`)?.getBoundingClientRect().width ?? 0;\n const widthWhenClosed =\n document.getElementById(`${measurementId}-when-closed`)?.getBoundingClientRect().width ?? 0;\n\n setTextWidth(widthWhenOpen < widthWhenClosed ? widthWhenClosed : widthWhenOpen);\n }, [measurementId]);\n\n const text = open ? whenOpenText : whenClosedText;\n const title = open ? whenOpenHelperTitle : whenClosedHelperTitle;\n const icon = open ? <CloseIcon /> : <MenuIcon />;\n\n function toggleOpen() {\n setOpen(!open);\n }\n\n return (\n <button\n aria-expanded={open}\n aria-controls={contentId}\n className={clsx(\"hds-navbar__item\", className as undefined)}\n onClick={toggleOpen}\n ref={ref}\n title={title}\n type=\"button\"\n style={{ position: \"relative\", ...style }}\n {...rest}\n >\n {/* Measurement elements, not shown to the user */}\n <span\n id={`${measurementId}-when-closed`}\n aria-hidden\n style={{\n position: \"absolute\",\n visibility: \"hidden\",\n pointerEvents: \"none\",\n whiteSpace: \"nowrap\",\n }}\n >\n {whenOpenText}\n </span>\n <span\n id={`${measurementId}-when-open`}\n aria-hidden\n style={{\n position: \"absolute\",\n visibility: \"hidden\",\n pointerEvents: \"none\",\n whiteSpace: \"nowrap\",\n }}\n >\n {whenClosedText}\n </span>\n\n {/* Actual content */}\n <span\n style={{ width: textWidth, whiteSpace: \"nowrap\" }}\n className={clsx(\"hds-navbar__item-responsive-text\")}\n >\n {text}\n </span>\n <span style={{ width: 32, height: 32 }}>{icon}</span>\n </button>\n );\n },\n);\nNavbarExpandableMenuTrigger.displayName = \"Navbar.ExpandableMenuTrigger\";\n\n/**\n * Content\n */\nexport interface NavbarExpandableMenuContentProps {\n children: React.ReactNode;\n className?: string;\n}\nexport const NavbarExpandableMenuContent = forwardRef<\n HTMLDivElement,\n NavbarExpandableMenuContentProps\n>(({ children, className, ...rest }, ref) => {\n const { contentId, open } = useNavbarExpendableMenuContext();\n return (\n <section\n {...rest}\n id={contentId}\n className={clsx(\"hds-navbar__expandable-menu-content\", className as undefined)}\n data-state={open ? \"open\" : \"closed\"}\n {...{ inert: open ? undefined : \"true\" }}\n ref={ref}\n >\n <div className={clsx(\"hds-navbar__expandable-menu-content-inner\")}>{children}</div>\n </section>\n );\n});\nNavbarExpandableMenuContent.displayName = \"Navbar.ExpandableMenuContent\";\n"],"mappings":"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","names":["_a","_b"]}