@postenbring/hedwig-react 0.0.83 → 0.0.84

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.
Files changed (140) hide show
  1. package/dist/accordion/accordion-content.d.ts.map +1 -1
  2. package/dist/accordion/accordion-content.js +1 -0
  3. package/dist/accordion/accordion-content.js.map +1 -1
  4. package/dist/accordion/accordion-content.mjs +2 -2
  5. package/dist/accordion/accordion-header.d.ts.map +1 -1
  6. package/dist/accordion/accordion-header.js +1 -0
  7. package/dist/accordion/accordion-header.js.map +1 -1
  8. package/dist/accordion/accordion-header.mjs +2 -2
  9. package/dist/accordion/accordion-item.d.ts.map +1 -1
  10. package/dist/accordion/accordion-item.js +2 -1
  11. package/dist/accordion/accordion-item.js.map +1 -1
  12. package/dist/accordion/accordion-item.mjs +2 -2
  13. package/dist/accordion/accordion.js +4 -1
  14. package/dist/accordion/accordion.js.map +1 -1
  15. package/dist/accordion/accordion.mjs +5 -5
  16. package/dist/accordion/context.d.ts +1 -0
  17. package/dist/accordion/context.d.ts.map +1 -1
  18. package/dist/accordion/context.js.map +1 -1
  19. package/dist/accordion/context.mjs +1 -1
  20. package/dist/accordion/index.js +4 -1
  21. package/dist/accordion/index.js.map +1 -1
  22. package/dist/accordion/index.mjs +7 -7
  23. package/dist/badge/badge.d.ts +13 -4
  24. package/dist/badge/badge.d.ts.map +1 -1
  25. package/dist/badge/badge.js +22 -42
  26. package/dist/badge/badge.js.map +1 -1
  27. package/dist/badge/badge.mjs +3 -9
  28. package/dist/badge/index.d.ts +1 -1
  29. package/dist/badge/index.d.ts.map +1 -1
  30. package/dist/badge/index.js +22 -42
  31. package/dist/badge/index.js.map +1 -1
  32. package/dist/badge/index.mjs +3 -9
  33. package/dist/button/button.d.ts +17 -5
  34. package/dist/button/button.d.ts.map +1 -1
  35. package/dist/button/button.js +4 -17
  36. package/dist/button/button.js.map +1 -1
  37. package/dist/button/button.mjs +3 -5
  38. package/dist/button/index.d.ts +1 -1
  39. package/dist/button/index.d.ts.map +1 -1
  40. package/dist/button/index.js +4 -17
  41. package/dist/button/index.js.map +1 -1
  42. package/dist/button/index.mjs +3 -5
  43. package/dist/{chunk-KEKPEN2C.mjs → chunk-6MR5XZOX.mjs} +4 -16
  44. package/dist/chunk-6MR5XZOX.mjs.map +1 -0
  45. package/dist/{chunk-M3Y3XOGC.mjs → chunk-B6L7IFDX.mjs} +6 -6
  46. package/dist/{chunk-FC4CEI2V.mjs → chunk-EVUKWONG.mjs} +2 -2
  47. package/dist/chunk-GQUFERB2.mjs +37 -0
  48. package/dist/chunk-GQUFERB2.mjs.map +1 -0
  49. package/dist/{chunk-C34HEQXO.mjs → chunk-GRWLX5BC.mjs} +5 -5
  50. package/dist/chunk-GRWLX5BC.mjs.map +1 -0
  51. package/dist/{chunk-3EFAPJ3H.mjs → chunk-HJYS664B.mjs} +3 -2
  52. package/dist/chunk-HJYS664B.mjs.map +1 -0
  53. package/dist/{chunk-OGZ2NBMH.mjs → chunk-IHZ2MRF6.mjs} +4 -4
  54. package/dist/chunk-IHZ2MRF6.mjs.map +1 -0
  55. package/dist/{chunk-3WVRY6CC.mjs → chunk-L4YBHIS3.mjs} +20 -12
  56. package/dist/chunk-L4YBHIS3.mjs.map +1 -0
  57. package/dist/{chunk-35TXKAUH.mjs → chunk-OIC2CPID.mjs} +18 -12
  58. package/dist/chunk-OIC2CPID.mjs.map +1 -0
  59. package/dist/{chunk-A2H2LAII.mjs → chunk-SKVM7G76.mjs} +5 -4
  60. package/dist/chunk-SKVM7G76.mjs.map +1 -0
  61. package/dist/chunk-SRLM3K2X.mjs +1 -0
  62. package/dist/{chunk-GLAEI3SD.mjs → chunk-VCQIR53Y.mjs} +3 -2
  63. package/dist/chunk-VCQIR53Y.mjs.map +1 -0
  64. package/dist/{chunk-V3PAFMK5.mjs → chunk-YQFL5UN4.mjs} +1 -1
  65. package/dist/chunk-YQFL5UN4.mjs.map +1 -0
  66. package/dist/footer/footer.js +7 -15
  67. package/dist/footer/footer.js.map +1 -1
  68. package/dist/footer/footer.mjs +7 -7
  69. package/dist/footer/index.js +7 -15
  70. package/dist/footer/index.js.map +1 -1
  71. package/dist/footer/index.mjs +7 -7
  72. package/dist/index-no-css.js +226 -239
  73. package/dist/index-no-css.js.map +1 -1
  74. package/dist/index-no-css.mjs +30 -38
  75. package/dist/index.js +226 -239
  76. package/dist/index.js.map +1 -1
  77. package/dist/index.mjs +30 -38
  78. package/dist/index.mjs.map +1 -1
  79. package/dist/modal/index.js.map +1 -1
  80. package/dist/modal/index.mjs +2 -2
  81. package/dist/modal/modal.d.ts +4 -4
  82. package/dist/modal/modal.js.map +1 -1
  83. package/dist/modal/modal.mjs +2 -2
  84. package/dist/navbar/index.js +17 -11
  85. package/dist/navbar/index.js.map +1 -1
  86. package/dist/navbar/index.mjs +2 -2
  87. package/dist/navbar/navbar-expandable-menu.d.ts +7 -1
  88. package/dist/navbar/navbar-expandable-menu.d.ts.map +1 -1
  89. package/dist/navbar/navbar-expandable-menu.js +17 -11
  90. package/dist/navbar/navbar-expandable-menu.js.map +1 -1
  91. package/dist/navbar/navbar-expandable-menu.mjs +1 -1
  92. package/dist/navbar/navbar.js +17 -11
  93. package/dist/navbar/navbar.js.map +1 -1
  94. package/dist/navbar/navbar.mjs +2 -2
  95. package/dist/show-more/index.d.ts +0 -2
  96. package/dist/show-more/index.d.ts.map +1 -1
  97. package/dist/show-more/index.js +5 -143
  98. package/dist/show-more/index.js.map +1 -1
  99. package/dist/show-more/index.mjs +1 -6
  100. package/dist/warning-banner/index.js +28 -94
  101. package/dist/warning-banner/index.js.map +1 -1
  102. package/dist/warning-banner/index.mjs +1 -3
  103. package/dist/warning-banner/warning-banner.d.ts.map +1 -1
  104. package/dist/warning-banner/warning-banner.js +28 -94
  105. package/dist/warning-banner/warning-banner.js.map +1 -1
  106. package/dist/warning-banner/warning-banner.mjs +1 -3
  107. package/package.json +2 -2
  108. package/src/accordion/accordion-content.tsx +1 -0
  109. package/src/accordion/accordion-header.tsx +1 -0
  110. package/src/accordion/accordion-item.tsx +3 -2
  111. package/src/accordion/context.ts +1 -0
  112. package/src/badge/badge.stories.tsx +6 -4
  113. package/src/badge/badge.tsx +32 -40
  114. package/src/badge/index.tsx +1 -1
  115. package/src/button/button.stories.tsx +19 -17
  116. package/src/button/button.tsx +19 -18
  117. package/src/button/index.tsx +1 -1
  118. package/src/footer/footer.tsx +3 -3
  119. package/src/form/input/input.stories.tsx +6 -6
  120. package/src/modal/modal.stories.tsx +9 -9
  121. package/src/modal/modal.tsx +4 -4
  122. package/src/navbar/navbar-expandable-menu.tsx +25 -14
  123. package/src/show-more/index.ts +0 -3
  124. package/src/skeleton/skeleton.stories.tsx +3 -3
  125. package/src/warning-banner/warning-banner.tsx +24 -13
  126. package/dist/chunk-35TXKAUH.mjs.map +0 -1
  127. package/dist/chunk-3EFAPJ3H.mjs.map +0 -1
  128. package/dist/chunk-3WVRY6CC.mjs.map +0 -1
  129. package/dist/chunk-A2H2LAII.mjs.map +0 -1
  130. package/dist/chunk-C34HEQXO.mjs.map +0 -1
  131. package/dist/chunk-GLAEI3SD.mjs.map +0 -1
  132. package/dist/chunk-KEKPEN2C.mjs.map +0 -1
  133. package/dist/chunk-MSFHJVHD.mjs +0 -1
  134. package/dist/chunk-OGZ2NBMH.mjs.map +0 -1
  135. package/dist/chunk-P6KBFRF4.mjs +0 -54
  136. package/dist/chunk-P6KBFRF4.mjs.map +0 -1
  137. package/dist/chunk-V3PAFMK5.mjs.map +0 -1
  138. /package/dist/{chunk-M3Y3XOGC.mjs.map → chunk-B6L7IFDX.mjs.map} +0 -0
  139. /package/dist/{chunk-FC4CEI2V.mjs.map → chunk-EVUKWONG.mjs.map} +0 -0
  140. /package/dist/{chunk-MSFHJVHD.mjs.map → chunk-SRLM3K2X.mjs.map} +0 -0
@@ -5,6 +5,13 @@ import { forwardRef } from "react";
5
5
  export interface BadgeProps extends React.AnchorHTMLAttributes<HTMLSpanElement> {
6
6
  children: React.ReactNode;
7
7
 
8
+ /**
9
+ * Color of the badge
10
+ *
11
+ * @default "lighter"
12
+ */
13
+ variant?: "lighter" | "dark" | "white" | "warning";
14
+
8
15
  /**
9
16
  * Font size of the badge
10
17
  *
@@ -20,44 +27,29 @@ export interface BadgeProps extends React.AnchorHTMLAttributes<HTMLSpanElement>
20
27
  asChild?: boolean;
21
28
  }
22
29
 
23
- const Badge = forwardRef<
24
- HTMLSpanElement,
25
- BadgeProps & { variant: "lighter" | "dark" | "white" | "warning" }
26
- >(({ children, asChild, variant, size = "small", className, ...rest }, ref) => {
27
- const Component = asChild ? Slot : "span";
28
- return (
29
- <Component
30
- ref={ref}
31
- className={clsx(
32
- "hds-badge",
33
- `hds-badge--${size}`,
34
- `hds-badge--${variant}`,
35
- className as undefined,
36
- )}
37
- {...rest}
38
- >
39
- {children}
40
- </Component>
41
- );
42
- });
30
+ /**
31
+ * Badges are used to label, categorize or organize items using keywords to describe them.
32
+ *
33
+ * @example
34
+ * <Badge variant="dark">Dark</Badge>
35
+ */
36
+ export const Badge = forwardRef<HTMLSpanElement, BadgeProps>(
37
+ ({ children, asChild, variant = "lighter", size = "small", className, ...rest }, ref) => {
38
+ const Component = asChild ? Slot : "span";
39
+ return (
40
+ <Component
41
+ ref={ref}
42
+ className={clsx(
43
+ "hds-badge",
44
+ `hds-badge--${size}`,
45
+ `hds-badge--${variant}`,
46
+ className as undefined,
47
+ )}
48
+ {...rest}
49
+ >
50
+ {children}
51
+ </Component>
52
+ );
53
+ },
54
+ );
43
55
  Badge.displayName = "Badge";
44
-
45
- export const LighterBadge = forwardRef<HTMLSpanElement, BadgeProps>((props, ref) => {
46
- return <Badge {...props} ref={ref} variant="lighter" />;
47
- });
48
- LighterBadge.displayName = "LighterBadge";
49
-
50
- export const DarkBadge = forwardRef<HTMLSpanElement, BadgeProps>((props, ref) => {
51
- return <Badge {...props} ref={ref} variant="dark" />;
52
- });
53
- DarkBadge.displayName = "DarkBadge";
54
-
55
- export const WhiteBadge = forwardRef<HTMLSpanElement, BadgeProps>((props, ref) => {
56
- return <Badge {...props} ref={ref} variant="white" />;
57
- });
58
- WhiteBadge.displayName = "WhiteBadge";
59
-
60
- export const WarningBadge = forwardRef<HTMLSpanElement, BadgeProps>((props, ref) => {
61
- return <Badge {...props} ref={ref} variant="warning" />;
62
- });
63
- WarningBadge.displayName = "WarningBadge";
@@ -1,3 +1,3 @@
1
- export { LighterBadge as Badge, DarkBadge, WarningBadge, WhiteBadge } from "./badge";
1
+ export { Badge } from "./badge";
2
2
 
3
3
  export type * from "./badge";
@@ -2,11 +2,11 @@
2
2
  import type { Meta, StoryObj } from "@storybook/react";
3
3
  import { HStack } from "../layout";
4
4
  import type { ButtonProps } from ".";
5
- import { PrimaryButton, SecondaryButton } from ".";
5
+ import { Button } from ".";
6
6
 
7
- const meta: Meta<typeof PrimaryButton> = {
7
+ const meta: Meta<typeof Button> = {
8
8
  title: "Button",
9
- component: PrimaryButton,
9
+ component: Button,
10
10
  argTypes: {
11
11
  fullWidth: { control: "radio", options: [false, true, "mobile"] },
12
12
  },
@@ -14,33 +14,33 @@ const meta: Meta<typeof PrimaryButton> = {
14
14
 
15
15
  export default meta;
16
16
 
17
- type Story = StoryObj<typeof PrimaryButton>;
17
+ type Story = StoryObj<typeof Button>;
18
18
 
19
19
  export const Primary: Story = {
20
20
  args: {
21
+ variant: "primary",
21
22
  children: "Primary button",
22
23
  },
23
24
  };
24
25
 
25
26
  export const PrimaryOutline: Story = {
26
27
  args: {
28
+ variant: "primary-outline",
27
29
  children: "Primary outline button",
28
- fill: "outline",
29
30
  },
30
31
  };
31
32
 
32
33
  export const Secondary: Story = {
33
34
  args: {
35
+ variant: "secondary",
34
36
  children: "Secondary button",
35
37
  },
36
- render: (props) => <SecondaryButton {...props} />,
37
38
  };
38
39
 
39
40
  export const SecondaryOutline: Story = {
40
- render: (props) => <SecondaryButton {...props} />,
41
41
  args: {
42
+ variant: "secondary-outline",
42
43
  children: "Secondary outline button",
43
- fill: "outline",
44
44
  },
45
45
  };
46
46
 
@@ -48,10 +48,10 @@ export const AsALink: Story = {
48
48
  name: "As a link",
49
49
  render: (args) => (
50
50
  <HStack gap="16" wrap>
51
- <PrimaryButton {...args} />
52
- <PrimaryButton {...args} fill="outline" />
53
- <SecondaryButton {...args} />
54
- <SecondaryButton {...args} fill="outline" />
51
+ <Button {...args} variant="primary" />
52
+ <Button {...args} variant="primary-outline" />
53
+ <Button {...args} variant="secondary" />
54
+ <Button {...args} variant="secondary-outline" />
55
55
  </HStack>
56
56
  ),
57
57
  args: {
@@ -65,7 +65,7 @@ export const AsALink: Story = {
65
65
  };
66
66
 
67
67
  const createIconStory = (
68
- Component: typeof PrimaryButton,
68
+ Component: typeof Button,
69
69
  extraArgs: Partial<ButtonProps> = {},
70
70
  ): Story => ({
71
71
  render: (args) => (
@@ -98,7 +98,9 @@ const createIconStory = (
98
98
  },
99
99
  });
100
100
 
101
- export const IconPrimary: Story = createIconStory(PrimaryButton);
102
- export const IconPrimaryOutline: Story = createIconStory(PrimaryButton, { fill: "outline" });
103
- export const IconSecondary: Story = createIconStory(SecondaryButton);
104
- export const IconSecondaryOutline: Story = createIconStory(SecondaryButton, { fill: "outline" });
101
+ export const IconPrimary: Story = createIconStory(Button, { variant: "secondary" });
102
+ export const IconPrimaryOutline: Story = createIconStory(Button, { variant: "primary-outline" });
103
+ export const IconSecondary: Story = createIconStory(Button, { variant: "secondary" });
104
+ export const IconSecondaryOutline: Story = createIconStory(Button, {
105
+ variant: "secondary-outline",
106
+ });
@@ -9,11 +9,11 @@ export interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElemen
9
9
  size?: "small" | "medium" | "large";
10
10
 
11
11
  /**
12
- * The background fill of the button
12
+ * The background and fill of the button
13
13
  *
14
- * @default "contained"
14
+ * @default "primary"
15
15
  */
16
- fill?: "contained" | "outline";
16
+ variant?: "primary" | "secondary" | "primary-outline" | "secondary-outline";
17
17
 
18
18
  /**
19
19
  * Make the button use 100% width available.
@@ -36,15 +36,27 @@ export interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElemen
36
36
  asChild?: boolean;
37
37
  }
38
38
 
39
- const Button = forwardRef<HTMLButtonElement, ButtonProps & { variant: "primary" | "secondary" }>(
39
+ /**
40
+ * Button component
41
+ *
42
+ * @example
43
+ * <Button variant="primary">Primary</Button>
44
+ * <Button variant="secondary" size="large">Secondary</Button>
45
+ * <Button variant="primary-outline">Primary Outline</Button>
46
+ * <Button variant="secondary-outline" fullWidth="mobile">Secondary Outline</Button>
47
+ *
48
+ * @example
49
+ * // If used for navigation use the `asChild` prop with a anchor element as a child.
50
+ * <Button asChild><a href="/home">Home</a></Button>
51
+ */
52
+ export const Button = forwardRef<HTMLButtonElement, ButtonProps>(
40
53
  (
41
54
  {
42
55
  asChild,
43
56
  children,
44
- variant,
57
+ variant = "primary",
45
58
  size = "medium",
46
59
  fullWidth = false,
47
- fill = "contained",
48
60
  icon,
49
61
  className,
50
62
  ...rest
@@ -57,9 +69,8 @@ const Button = forwardRef<HTMLButtonElement, ButtonProps & { variant: "primary"
57
69
  className={clsx(
58
70
  "hds-button",
59
71
  `hds-button--${size}`,
72
+ `hds-button--${variant}`,
60
73
  {
61
- [`hds-button--${variant}`]: fill === "contained",
62
- [`hds-button--outline-${variant}`]: fill === "outline",
63
74
  "hds-button--full": fullWidth === true,
64
75
  "hds-button--mobile-full": fullWidth === "mobile",
65
76
  "hds-button--icon-only": icon,
@@ -75,13 +86,3 @@ const Button = forwardRef<HTMLButtonElement, ButtonProps & { variant: "primary"
75
86
  },
76
87
  );
77
88
  Button.displayName = "Button";
78
-
79
- export const PrimaryButton = forwardRef<HTMLButtonElement, ButtonProps>((props, ref) => {
80
- return <Button {...props} ref={ref} variant="primary" />;
81
- });
82
- PrimaryButton.displayName = "PrimaryButton";
83
-
84
- export const SecondaryButton = forwardRef<HTMLButtonElement, ButtonProps>((props, ref) => {
85
- return <Button {...props} ref={ref} variant="secondary" />;
86
- });
87
- SecondaryButton.displayName = "SecondaryButton";
@@ -1,3 +1,3 @@
1
- export { PrimaryButton, SecondaryButton } from "./button";
1
+ export { Button } from "./button";
2
2
 
3
3
  export type * from "./button";
@@ -3,7 +3,7 @@ import { clsx } from "@postenbring/hedwig-css/typed-classname";
3
3
  import { Slot } from "@radix-ui/react-slot";
4
4
  import { Accordion } from "../accordion";
5
5
  import { LinkList } from "../list/link-list";
6
- import { PrimaryButton } from "../button";
6
+ import { Button } from "../button";
7
7
 
8
8
  interface FooterLogoProps extends HTMLAttributes<HTMLDivElement> {
9
9
  /**
@@ -47,11 +47,11 @@ export const FooterButtonLink = forwardRef<HTMLAnchorElement, FooterButtonLinkPr
47
47
  ({ children, className, asChild, ...rest }, ref) => {
48
48
  const Component = asChild ? Slot : "a";
49
49
  return (
50
- <PrimaryButton asChild fill="outline" className={clsx(className as undefined)}>
50
+ <Button asChild variant="primary-outline" className={clsx(className as undefined)}>
51
51
  <Component ref={ref} {...rest}>
52
52
  {children}
53
53
  </Component>
54
- </PrimaryButton>
54
+ </Button>
55
55
  );
56
56
  },
57
57
  );
@@ -1,7 +1,7 @@
1
1
  /* eslint-disable import/no-extraneous-dependencies -- storybook story */
2
2
  import type { Meta, StoryObj } from "@storybook/react";
3
3
  import { useState } from "react";
4
- import { PrimaryButton, SecondaryButton } from "../../button";
4
+ import { Button } from "../../button";
5
5
  import { HStack, VStack } from "../../layout";
6
6
  import { Input } from ".";
7
7
 
@@ -118,7 +118,7 @@ export const TrackingNumberSearch: Story = {
118
118
  }}
119
119
  >
120
120
  <Input label="Sporingsnummer" style={{ width: "100%" }} />
121
- <PrimaryButton size="large">Spor</PrimaryButton>
121
+ <Button size="large">Spor</Button>
122
122
  </HStack>
123
123
  ),
124
124
  };
@@ -148,16 +148,16 @@ export const FormWithErrorsOnSubmit: Story = {
148
148
  <Input errorMessage={errors.Two} label="Two" name="Two" />
149
149
  <Input errorMessage={errors.Three} label="Three" name="Three" />
150
150
  <VStack gap="4">
151
- <PrimaryButton type="submit">Submit</PrimaryButton>
152
- <SecondaryButton
153
- fill="outline"
151
+ <Button type="submit">Submit</Button>
152
+ <Button
153
+ variant="secondary-outline"
154
154
  onClick={() => {
155
155
  setErrors({});
156
156
  }}
157
157
  type="reset"
158
158
  >
159
159
  Reset
160
- </SecondaryButton>
160
+ </Button>
161
161
  </VStack>
162
162
  </form>
163
163
  </VStack>
@@ -1,7 +1,7 @@
1
1
  /* eslint-disable import/no-extraneous-dependencies -- storybook story */
2
2
  import type { Meta, StoryObj } from "@storybook/react";
3
3
  import { useRef } from "react";
4
- import { PrimaryButton } from "../button";
4
+ import { Button } from "../button";
5
5
  import { Link } from "../link";
6
6
  import { Message } from "../message";
7
7
  import { StyledHtml } from "../styled-html";
@@ -24,7 +24,7 @@ export const Main = {
24
24
 
25
25
  return (
26
26
  <>
27
- <PrimaryButton onClick={() => modalRef.current?.showModal()}>Open Modal</PrimaryButton>
27
+ <Button onClick={() => modalRef.current?.showModal()}>Open Modal</Button>
28
28
  <Modal ref={modalRef} {...args}>
29
29
  <Modal.Header>Dialog header</Modal.Header>
30
30
  <Modal.Content>
@@ -35,10 +35,10 @@ export const Main = {
35
35
  </Modal.Content>
36
36
  <Modal.Footer>
37
37
  <HStack gap="16" wrap>
38
- <PrimaryButton onClick={onMainAction}>Main action</PrimaryButton>
39
- <PrimaryButton fill="outline" onClick={onClose}>
38
+ <Button onClick={onMainAction}>Main action</Button>
39
+ <Button variant="primary-outline" onClick={onClose}>
40
40
  Cancel
41
- </PrimaryButton>
41
+ </Button>
42
42
  </HStack>
43
43
  </Modal.Footer>
44
44
  </Modal>
@@ -53,7 +53,7 @@ export const ShareParcelModal = {
53
53
  const open = window.location.search.includes("viewMode=story");
54
54
  return (
55
55
  <>
56
- <PrimaryButton onClick={() => modalRef.current?.showModal()}>Open Modal</PrimaryButton>
56
+ <Button onClick={() => modalRef.current?.showModal()}>Open Modal</Button>
57
57
  <Modal ref={modalRef} {...args} closeOnBackdropClick open={open}>
58
58
  <Modal.Header>Legg til pakken</Modal.Header>
59
59
  <Modal.Content>
@@ -67,7 +67,7 @@ export const ShareParcelModal = {
67
67
  </StyledHtml>
68
68
  </Modal.Content>
69
69
  <Modal.Footer>
70
- <PrimaryButton fullWidth="mobile">Legg til pakken i Posten-appen </PrimaryButton>
70
+ <Button fullWidth="mobile">Legg til pakken i Posten-appen </Button>
71
71
  </Modal.Footer>
72
72
  </Modal>
73
73
  </>
@@ -136,9 +136,9 @@ export const AsAReadMore: Story = {
136
136
  </Modal.Content>
137
137
 
138
138
  <Modal.Footer>
139
- <PrimaryButton fullWidth="mobile" onClick={() => modalRef.current?.close()}>
139
+ <Button fullWidth="mobile" onClick={() => modalRef.current?.close()}>
140
140
  Lukk
141
- </PrimaryButton>
141
+ </Button>
142
142
  </Modal.Footer>
143
143
  </Modal>
144
144
  </>
@@ -96,7 +96,7 @@ export interface ModalProps extends React.HTMLAttributes<HTMLDialogElement> {
96
96
  *
97
97
  * return (
98
98
  * <>
99
- * <PrimaryButton onClick={() => modalRef.current?.showModal()}>Open Modal</PrimaryButton>
99
+ * <Button onClick={() => modalRef.current?.showModal()}>Open Modal</Button>
100
100
  * <Modal ref={modalRef}>
101
101
  * <Modal.Header>Dialog header</Modal.Header>
102
102
  * <Modal.Content>
@@ -107,10 +107,10 @@ export interface ModalProps extends React.HTMLAttributes<HTMLDialogElement> {
107
107
  * </Modal.Content>
108
108
  * <Modal.Footer>
109
109
  * <HStack gap="16" wrap>
110
- * <PrimaryButton onClick={onMainAction}>Main action</PrimaryButton>
111
- * <PrimaryButton fill="outline" onClick={onClose}>
110
+ * <Button onClick={onMainAction}>Main action</Button>
111
+ * <Button variant="primary-outline" onClick={onClose}>
112
112
  * Cancel
113
- * </PrimaryButton>
113
+ * </Button>
114
114
  * </HStack>
115
115
  * </Modal.Footer>
116
116
  * </Modal>
@@ -3,13 +3,19 @@ import { clsx } from "@postenbring/hedwig-css/typed-classname";
3
3
  import { focusTrap } from "../utils/utils";
4
4
  import { CloseIcon, MenuIcon } from "./icons";
5
5
 
6
- const expandableMenuContext = createContext([
7
- false as boolean,
8
- () => {
9
- // Empty
10
- },
11
- ] as const);
12
- export const useNavbarExpendableMenuContext = () => useContext(expandableMenuContext);
6
+ interface ExpandableMenuContextProps {
7
+ open: boolean;
8
+ setOpen: (open: boolean) => void;
9
+ contentId: string;
10
+ }
11
+ const ExpandableMenuContext = createContext<ExpandableMenuContextProps | null>(null);
12
+ export const useNavbarExpendableMenuContext = () => {
13
+ const value = useContext(ExpandableMenuContext);
14
+ if (value === null) {
15
+ throw new Error("useNavbarExpendableMenuContext must be used within a Navbar.ExpandableMenu");
16
+ }
17
+ return value;
18
+ };
13
19
 
14
20
  export interface NavbarExpandableMenuProps {
15
21
  children: React.ReactNode;
@@ -23,10 +29,8 @@ export interface NavbarExpandableMenuProps {
23
29
  * If we want a sticky header in the future the scrolling should be configurable
24
30
  */
25
31
  export function NavbarExpandableMenu({ children }: NavbarExpandableMenuProps) {
32
+ const contentId = useId();
26
33
  const [open, setOpen] = useState(false);
27
- function toggleOpen() {
28
- setOpen((prev) => !prev);
29
- }
30
34
 
31
35
  useEffect(() => {
32
36
  if (open) {
@@ -44,9 +48,9 @@ export function NavbarExpandableMenu({ children }: NavbarExpandableMenuProps) {
44
48
  }, [open]);
45
49
 
46
50
  return (
47
- <expandableMenuContext.Provider value={[open, toggleOpen]}>
51
+ <ExpandableMenuContext.Provider value={{ contentId, open, setOpen }}>
48
52
  {children}
49
- </expandableMenuContext.Provider>
53
+ </ExpandableMenuContext.Provider>
50
54
  );
51
55
  }
52
56
  NavbarExpandableMenu.displayName = "NavbarExpandableMenu";
@@ -80,7 +84,7 @@ export const NavbarExpandableMenuTrigger = forwardRef<
80
84
  },
81
85
  ref,
82
86
  ) => {
83
- const [open, toggleOpen] = useNavbarExpendableMenuContext();
87
+ const { contentId, open, setOpen } = useNavbarExpendableMenuContext();
84
88
 
85
89
  // Measure the width of the text when open and closed and choose the widest one
86
90
  // This is to ensure that the button doesn't change size when the text changes
@@ -99,8 +103,14 @@ export const NavbarExpandableMenuTrigger = forwardRef<
99
103
  const title = open ? whenOpenHelperTitle : whenClosedHelperTitle;
100
104
  const icon = open ? <CloseIcon /> : <MenuIcon />;
101
105
 
106
+ function toggleOpen() {
107
+ setOpen(!open);
108
+ }
109
+
102
110
  return (
103
111
  <button
112
+ aria-expanded={open}
113
+ aria-controls={contentId}
104
114
  className={clsx("hds-navbar__item", className as undefined)}
105
115
  onClick={toggleOpen}
106
116
  ref={ref}
@@ -160,10 +170,11 @@ export const NavbarExpandableMenuContent = forwardRef<
160
170
  HTMLDivElement,
161
171
  NavbarExpandableMenuContentProps
162
172
  >(({ children, className, ...rest }, ref) => {
163
- const [open] = useNavbarExpendableMenuContext();
173
+ const { contentId, open } = useNavbarExpendableMenuContext();
164
174
  return (
165
175
  <section
166
176
  {...rest}
177
+ id={contentId}
167
178
  className={clsx("hds-navbar__expandable-menu-content", className as undefined)}
168
179
  data-state={open ? "open" : "closed"}
169
180
  {...{ inert: open ? undefined : "true" }}
@@ -1,5 +1,2 @@
1
- export { AutoAnimateHeight } from "../utils/auto-animate-height";
2
- export type * from "../utils/auto-animate-height";
3
-
4
1
  export { ShowMoreButton } from "./show-more";
5
2
  export type * from "./show-more";
@@ -5,7 +5,7 @@ import { useEffect, useState } from "react";
5
5
  import { StyledHtml } from "../styled-html";
6
6
  import { Card } from "../card";
7
7
  import { CardStory } from "../card/card.stories";
8
- import { PrimaryButton } from "../button";
8
+ import { Button } from "../button";
9
9
  import { HStack, VStack } from "../layout";
10
10
  import { Skeleton } from ".";
11
11
 
@@ -91,14 +91,14 @@ export const LoadingCards: Story = {
91
91
  const card = isLoading ? skeletonCard : realCard;
92
92
  return (
93
93
  <div>
94
- <PrimaryButton
94
+ <Button
95
95
  size="small"
96
96
  onClick={() => {
97
97
  setIsLoading(true);
98
98
  }}
99
99
  >
100
100
  Reload
101
- </PrimaryButton>
101
+ </Button>
102
102
  <p className="hds-mt-8">Only use greytones, never any red or green colors.</p>
103
103
  <HStack className="hds-mt-16" wrap gap="24">
104
104
  {card}
@@ -1,7 +1,6 @@
1
1
  import type { ReactNode } from "react";
2
- import React, { forwardRef, useState } from "react";
2
+ import React, { forwardRef, useId, useState } from "react";
3
3
  import { clsx } from "@postenbring/hedwig-css/typed-classname";
4
- import { Box } from "../box";
5
4
 
6
5
  export interface WarningBannerProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "title"> {
7
6
  title: ReactNode;
@@ -10,36 +9,47 @@ export interface WarningBannerProps extends Omit<React.HTMLAttributes<HTMLDivEle
10
9
 
11
10
  export const WarningBanner = forwardRef<HTMLDivElement, WarningBannerProps>(
12
11
  ({ title, description, className, ...rest }, ref) => {
12
+ const descriptionId = useId();
13
13
  const expandable = !!description;
14
14
  return (
15
- <Box {...rest} className={clsx("hds-warning-banner", className as undefined)} ref={ref}>
16
- <WarningBannerTitle variant={expandable ? "expandable" : "default"}>
15
+ <div {...rest} className={clsx("hds-warning-banner", className as undefined)} ref={ref}>
16
+ <WarningBannerTitle
17
+ variant={expandable ? "expandable" : "default"}
18
+ descriptionId={descriptionId}
19
+ >
17
20
  {title}
18
21
  </WarningBannerTitle>
19
- {expandable ? <WarningBannerDescription>{description}</WarningBannerDescription> : null}
20
- </Box>
22
+ {expandable ? (
23
+ <WarningBannerDescription id={descriptionId}>{description}</WarningBannerDescription>
24
+ ) : null}
25
+ </div>
21
26
  );
22
27
  },
23
28
  );
24
29
  WarningBanner.displayName = "WarningBanner";
25
30
 
26
31
  type WarningBannerTitleProps =
27
- | ({ variant: "expandable" } & React.ButtonHTMLAttributes<HTMLButtonElement>)
28
- | ({ variant: "default" } & React.HTMLAttributes<HTMLParagraphElement>);
32
+ | ({
33
+ variant: "expandable";
34
+ descriptionId: string;
35
+ } & React.ButtonHTMLAttributes<HTMLButtonElement>)
36
+ | ({ variant: "default"; descriptionId?: string } & React.HTMLAttributes<HTMLParagraphElement>);
29
37
 
30
38
  const WarningBannerTitle = forwardRef<
31
39
  HTMLButtonElement | HTMLParagraphElement,
32
40
  WarningBannerTitleProps
33
- >(({ variant, children, className, ...rest }, ref) => {
41
+ >(({ variant, descriptionId, children, className, ...rest }, ref) => {
34
42
  const [open, setOpen] = useState<boolean>(false);
35
43
  if (variant === "expandable") {
36
44
  return (
37
45
  <button
38
46
  {...(rest as React.ButtonHTMLAttributes<HTMLButtonElement>)}
47
+ aria-expanded={open}
48
+ aria-controls={descriptionId}
49
+ data-state={open ? "open" : "closed"}
39
50
  className={clsx(
40
51
  "hds-warning-banner__title",
41
52
  "hds-warning-banner__title-trigger",
42
- { "hds-warning-banner--closed": !open },
43
53
  className as undefined,
44
54
  )}
45
55
  onClick={() => {
@@ -48,7 +58,7 @@ const WarningBannerTitle = forwardRef<
48
58
  ref={ref as React.Ref<HTMLButtonElement>}
49
59
  type="button"
50
60
  >
51
- <span>{children}</span>
61
+ <div>{children}</div>
52
62
  </button>
53
63
  );
54
64
  }
@@ -64,11 +74,12 @@ const WarningBannerTitle = forwardRef<
64
74
  });
65
75
  WarningBannerTitle.displayName = "WarningBannerTitle";
66
76
 
67
- type WarningBannerDescriptionProps = React.HTMLAttributes<HTMLParagraphElement>;
77
+ type WarningBannerDescriptionProps = { id: string } & React.HTMLAttributes<HTMLParagraphElement>;
68
78
  const WarningBannerDescription = forwardRef<HTMLParagraphElement, WarningBannerDescriptionProps>(
69
- ({ className, ...rest }, ref) => {
79
+ ({ className, id, ...rest }, ref) => {
70
80
  return (
71
81
  <p
82
+ id={id}
72
83
  className={clsx("hds-warning-banner__description", className as undefined)}
73
84
  ref={ref}
74
85
  {...rest}
@@ -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\nconst expandableMenuContext = createContext([\n false as boolean,\n () => {\n // Empty\n },\n] as const);\nexport const useNavbarExpendableMenuContext = () => useContext(expandableMenuContext);\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 [open, setOpen] = useState(false);\n function toggleOpen() {\n setOpen((prev) => !prev);\n }\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={[open, toggleOpen]}>\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 [open, toggleOpen] = 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 return (\n <button\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 [open] = useNavbarExpendableMenuContext();\n return (\n <section\n {...rest}\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":";;;;;;;;;;;;;;AAAA,SAAS,eAAe,YAAY,YAAY,UAAU,WAAW,aAAa;AAClF,SAAS,YAAY;AA6CjB,cAwDE,YAxDF;AAzCJ,IAAM,wBAAwB,cAAc;AAAA,EAC1C;AAAA,EACA,MAAM;AAAA,EAEN;AACF,CAAU;AACH,IAAM,iCAAiC,MAAM,WAAW,qBAAqB;AAa7E,SAAS,qBAAqB,EAAE,SAAS,GAA8B;AAC5E,QAAM,CAAC,MAAM,OAAO,IAAI,SAAS,KAAK;AACtC,WAAS,aAAa;AACpB,YAAQ,CAAC,SAAS,CAAC,IAAI;AAAA,EACzB;AAEA,YAAU,MAAM;AACd,QAAI,MAAM;AACR,aAAO,SAAS,GAAG,CAAC;AACpB,eAAS,KAAK,UAAU,IAAI,KAAK,wBAAwB,CAAC;AAC1D,YAAM,mBAAmB;AAAA,QACvB,SAAS,uBAAuB,KAAK,YAAY,CAAC,EAAE,CAAC;AAAA,MACvD;AAEA,aAAO,MAAM;AACX,iBAAS,KAAK,UAAU,OAAO,KAAK,wBAAwB,CAAC;AAC7D,yBAAiB;AAAA,MACnB;AAAA,IACF;AAAA,EACF,GAAG,CAAC,IAAI,CAAC;AAET,SACE,oBAAC,sBAAsB,UAAtB,EAA+B,OAAO,CAAC,MAAM,UAAU,GACrD,UACH;AAEJ;AACA,qBAAqB,cAAc;AAa5B,IAAM,8BAA8B;AAAA,EAIzC,CACE,IAWA,QACG;AAZH,iBACE;AAAA;AAAA,MACA;AAAA,MAEA;AAAA,MACA;AAAA,MAEA;AAAA,MACA;AAAA,IA7EN,IAqEI,IASK,iBATL,IASK;AAAA,MARH;AAAA,MACA;AAAA,MAEA;AAAA,MACA;AAAA,MAEA;AAAA,MACA;AAAA;AAKF,UAAM,CAAC,MAAM,UAAU,IAAI,+BAA+B;AAI1D,UAAM,CAAC,WAAW,YAAY,IAAI,SAA6B,MAAS;AACxE,UAAM,gBAAgB,MAAM;AAC5B,cAAU,MAAM;AAxFpB,UAAAA,KAAAC,KAAA;AAyFM,YAAM,iBACJA,OAAAD,MAAA,SAAS,eAAe,GAAG,aAAa,YAAY,MAApD,gBAAAA,IAAuD,wBAAwB,UAA/E,OAAAC,MAAwF;AAC1F,YAAM,mBACJ,oBAAS,eAAe,GAAG,aAAa,cAAc,MAAtD,mBAAyD,wBAAwB,UAAjF,YAA0F;AAE5F,mBAAa,gBAAgB,kBAAkB,kBAAkB,aAAa;AAAA,IAChF,GAAG,CAAC,aAAa,CAAC;AAElB,UAAM,OAAO,OAAO,eAAe;AACnC,UAAM,QAAQ,OAAO,sBAAsB;AAC3C,UAAM,OAAO,OAAO,oBAAC,aAAU,IAAK,oBAAC,YAAS;AAE9C,WACE;AAAA,MAAC;AAAA;AAAA,QACC,WAAW,KAAK,oBAAoB,SAAsB;AAAA,QAC1D,SAAS;AAAA,QACT;AAAA,QACA;AAAA,QACA,MAAK;AAAA,QACL,OAAO,iBAAE,UAAU,cAAe;AAAA,SAC9B,OAPL;AAAA,QAUC;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,IAAI,GAAG,aAAa;AAAA,cACpB,eAAW;AAAA,cACX,OAAO;AAAA,gBACL,UAAU;AAAA,gBACV,YAAY;AAAA,gBACZ,eAAe;AAAA,gBACf,YAAY;AAAA,cACd;AAAA,cAEC;AAAA;AAAA,UACH;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,IAAI,GAAG,aAAa;AAAA,cACpB,eAAW;AAAA,cACX,OAAO;AAAA,gBACL,UAAU;AAAA,gBACV,YAAY;AAAA,gBACZ,eAAe;AAAA,gBACf,YAAY;AAAA,cACd;AAAA,cAEC;AAAA;AAAA,UACH;AAAA,UAGA;AAAA,YAAC;AAAA;AAAA,cACC,OAAO,EAAE,OAAO,WAAW,YAAY,SAAS;AAAA,cAChD,WAAW,KAAK,kCAAkC;AAAA,cAEjD;AAAA;AAAA,UACH;AAAA,UACA,oBAAC,UAAK,OAAO,EAAE,OAAO,IAAI,QAAQ,GAAG,GAAI,gBAAK;AAAA;AAAA;AAAA,IAChD;AAAA,EAEJ;AACF;AACA,4BAA4B,cAAc;AASnC,IAAM,8BAA8B,WAGzC,CAAC,IAAkC,QAAQ;AAA1C,eAAE,YAAU,UAjKf,IAiKG,IAA0B,iBAA1B,IAA0B,CAAxB,YAAU;AACb,QAAM,CAAC,IAAI,IAAI,+BAA+B;AAC9C,SACE;AAAA,IAAC;AAAA,kEACK,OADL;AAAA,MAEC,WAAW,KAAK,uCAAuC,SAAsB;AAAA,MAC7E,cAAY,OAAO,SAAS;AAAA,QACxB,EAAE,OAAO,OAAO,SAAY,OAAO,IAJxC;AAAA,MAKC;AAAA,MAEA,8BAAC,SAAI,WAAW,KAAK,2CAA2C,GAAI,UAAS;AAAA;AAAA,EAC/E;AAEJ,CAAC;AACD,4BAA4B,cAAc;","names":["_a","_b"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/accordion/accordion-header.tsx"],"sourcesContent":["import type { MouseEvent, ReactNode } from \"react\";\nimport { forwardRef, useContext } from \"react\";\nimport { clsx } from \"@postenbring/hedwig-css/typed-classname\";\nimport { AccordionItemContext } from \"./context\";\n\nexport interface AccordionHeaderProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n children: ReactNode;\n}\n\nexport const AccordionHeader = forwardRef<HTMLButtonElement, AccordionHeaderProps>(\n ({ children, className, onClick, ...rest }, ref) => {\n const context = useContext(AccordionItemContext);\n if (context === null) {\n return null;\n }\n const expandOrCollapse = (e: MouseEvent<HTMLButtonElement>) => {\n context.setOpen(!context.open);\n onClick?.(e);\n };\n return (\n <button\n {...rest}\n aria-expanded={context.open}\n data-state={context.open ? \"open\" : \"closed\"}\n className={clsx(\"hds-accordion-item-header\", className as undefined)}\n onClick={expandOrCollapse}\n ref={ref}\n type=\"button\"\n >\n <span>{children}</span>\n </button>\n );\n },\n);\n\nAccordionHeader.displayName = \"Accordion.Header\";\n"],"mappings":";;;;;;;;;;AACA,SAAS,YAAY,kBAAkB;AACvC,SAAS,YAAY;AA2Bb;AApBD,IAAM,kBAAkB;AAAA,EAC7B,CAAC,IAA2C,QAAQ;AAAnD,iBAAE,YAAU,WAAW,QAV1B,IAUG,IAAmC,iBAAnC,IAAmC,CAAjC,YAAU,aAAW;AACtB,UAAM,UAAU,WAAW,oBAAoB;AAC/C,QAAI,YAAY,MAAM;AACpB,aAAO;AAAA,IACT;AACA,UAAM,mBAAmB,CAAC,MAAqC;AAC7D,cAAQ,QAAQ,CAAC,QAAQ,IAAI;AAC7B,yCAAU;AAAA,IACZ;AACA,WACE;AAAA,MAAC;AAAA,uCACK,OADL;AAAA,QAEC,iBAAe,QAAQ;AAAA,QACvB,cAAY,QAAQ,OAAO,SAAS;AAAA,QACpC,WAAW,KAAK,6BAA6B,SAAsB;AAAA,QACnE,SAAS;AAAA,QACT;AAAA,QACA,MAAK;AAAA,QAEL,8BAAC,UAAM,UAAS;AAAA;AAAA,IAClB;AAAA,EAEJ;AACF;AAEA,gBAAgB,cAAc;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/warning-banner/warning-banner.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport React, { forwardRef, useState } from \"react\";\nimport { clsx } from \"@postenbring/hedwig-css/typed-classname\";\nimport { Box } from \"../box\";\n\nexport interface WarningBannerProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"title\"> {\n title: ReactNode;\n description?: ReactNode;\n}\n\nexport const WarningBanner = forwardRef<HTMLDivElement, WarningBannerProps>(\n ({ title, description, className, ...rest }, ref) => {\n const expandable = !!description;\n return (\n <Box {...rest} className={clsx(\"hds-warning-banner\", className as undefined)} ref={ref}>\n <WarningBannerTitle variant={expandable ? \"expandable\" : \"default\"}>\n {title}\n </WarningBannerTitle>\n {expandable ? <WarningBannerDescription>{description}</WarningBannerDescription> : null}\n </Box>\n );\n },\n);\nWarningBanner.displayName = \"WarningBanner\";\n\ntype WarningBannerTitleProps =\n | ({ variant: \"expandable\" } & React.ButtonHTMLAttributes<HTMLButtonElement>)\n | ({ variant: \"default\" } & React.HTMLAttributes<HTMLParagraphElement>);\n\nconst WarningBannerTitle = forwardRef<\n HTMLButtonElement | HTMLParagraphElement,\n WarningBannerTitleProps\n>(({ variant, children, className, ...rest }, ref) => {\n const [open, setOpen] = useState<boolean>(false);\n if (variant === \"expandable\") {\n return (\n <button\n {...(rest as React.ButtonHTMLAttributes<HTMLButtonElement>)}\n className={clsx(\n \"hds-warning-banner__title\",\n \"hds-warning-banner__title-trigger\",\n { \"hds-warning-banner--closed\": !open },\n className as undefined,\n )}\n onClick={() => {\n setOpen((prev) => !prev);\n }}\n ref={ref as React.Ref<HTMLButtonElement>}\n type=\"button\"\n >\n <span>{children}</span>\n </button>\n );\n }\n return (\n <p\n {...(rest as React.HTMLAttributes<HTMLParagraphElement>)}\n className={clsx(\"hds-warning-banner__title\", className as undefined)}\n ref={ref as React.Ref<HTMLParagraphElement>}\n >\n {children}\n </p>\n );\n});\nWarningBannerTitle.displayName = \"WarningBannerTitle\";\n\ntype WarningBannerDescriptionProps = React.HTMLAttributes<HTMLParagraphElement>;\nconst WarningBannerDescription = forwardRef<HTMLParagraphElement, WarningBannerDescriptionProps>(\n ({ className, ...rest }, ref) => {\n return (\n <p\n className={clsx(\"hds-warning-banner__description\", className as undefined)}\n ref={ref}\n {...rest}\n />\n );\n },\n);\nWarningBannerDescription.displayName = \"WarningBannerDescription\";\n"],"mappings":";;;;;;;;;;AACA,SAAgB,YAAY,gBAAgB;AAC5C,SAAS,YAAY;AAYf,SACE,KADF;AAJC,IAAM,gBAAgB;AAAA,EAC3B,CAAC,IAA4C,QAAQ;AAApD,iBAAE,SAAO,aAAa,UAXzB,IAWG,IAAoC,iBAApC,IAAoC,CAAlC,SAAO,eAAa;AACrB,UAAM,aAAa,CAAC,CAAC;AACrB,WACE,qBAAC,sCAAQ,OAAR,EAAc,WAAW,KAAK,sBAAsB,SAAsB,GAAG,KAC5E;AAAA,0BAAC,sBAAmB,SAAS,aAAa,eAAe,WACtD,iBACH;AAAA,MACC,aAAa,oBAAC,4BAA0B,uBAAY,IAA8B;AAAA,QACrF;AAAA,EAEJ;AACF;AACA,cAAc,cAAc;AAM5B,IAAM,qBAAqB,WAGzB,CAAC,IAA2C,QAAQ;AAAnD,eAAE,WAAS,UAAU,UAhCxB,IAgCG,IAAmC,iBAAnC,IAAmC,CAAjC,WAAS,YAAU;AACtB,QAAM,CAAC,MAAM,OAAO,IAAI,SAAkB,KAAK;AAC/C,MAAI,YAAY,cAAc;AAC5B,WACE;AAAA,MAAC;AAAA,uCACM,OADN;AAAA,QAEC,WAAW;AAAA,UACT;AAAA,UACA;AAAA,UACA,EAAE,8BAA8B,CAAC,KAAK;AAAA,UACtC;AAAA,QACF;AAAA,QACA,SAAS,MAAM;AACb,kBAAQ,CAAC,SAAS,CAAC,IAAI;AAAA,QACzB;AAAA,QACA;AAAA,QACA,MAAK;AAAA,QAEL,8BAAC,UAAM,UAAS;AAAA;AAAA,IAClB;AAAA,EAEJ;AACA,SACE;AAAA,IAAC;AAAA,qCACM,OADN;AAAA,MAEC,WAAW,KAAK,6BAA6B,SAAsB;AAAA,MACnE;AAAA,MAEC;AAAA;AAAA,EACH;AAEJ,CAAC;AACD,mBAAmB,cAAc;AAGjC,IAAM,2BAA2B;AAAA,EAC/B,CAAC,IAAwB,QAAQ;AAAhC,iBAAE,YApEL,IAoEG,IAAgB,iBAAhB,IAAgB,CAAd;AACD,WACE;AAAA,MAAC;AAAA;AAAA,QACC,WAAW,KAAK,mCAAmC,SAAsB;AAAA,QACzE;AAAA,SACI;AAAA,IACN;AAAA,EAEJ;AACF;AACA,yBAAyB,cAAc;","names":[]}