@coopdigital/react 0.46.0 → 0.47.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.
Files changed (190) hide show
  1. package/dist/components/AlertBanner/AlertBanner.d.ts +4 -2
  2. package/dist/components/AlertBanner/AlertBanner.js +2 -2
  3. package/dist/components/Author/Author.d.ts +4 -2
  4. package/dist/components/Author/Author.js +2 -2
  5. package/dist/components/Button/Button.d.ts +1 -1
  6. package/dist/components/Button/Button.js +1 -2
  7. package/dist/components/Card/Card.d.ts +4 -2
  8. package/dist/components/Card/Card.js +2 -2
  9. package/dist/components/Checkbox/Checkbox.d.ts +4 -2
  10. package/dist/components/Checkbox/Checkbox.js +2 -2
  11. package/dist/components/Expandable/Expandable.d.ts +4 -2
  12. package/dist/components/Expandable/Expandable.js +2 -2
  13. package/dist/components/Field/Field.d.ts +4 -2
  14. package/dist/components/Field/Field.js +3 -4
  15. package/dist/components/FieldMarkers/Error.d.ts +4 -2
  16. package/dist/components/FieldMarkers/Error.js +2 -2
  17. package/dist/components/FieldMarkers/Hint.d.ts +5 -3
  18. package/dist/components/FieldMarkers/Hint.js +2 -2
  19. package/dist/components/FieldMarkers/Label.d.ts +4 -2
  20. package/dist/components/FieldMarkers/Label.js +6 -2
  21. package/dist/components/FieldMarkers/Legend.d.ts +4 -2
  22. package/dist/components/FieldMarkers/Legend.js +2 -2
  23. package/dist/components/Fieldset/Fieldset.d.ts +4 -2
  24. package/dist/components/Fieldset/Fieldset.js +2 -4
  25. package/dist/components/Flourish/Flourish.d.ts +4 -2
  26. package/dist/components/Flourish/Flourish.js +2 -2
  27. package/dist/components/Icon/AddIcon.d.ts +1 -1
  28. package/dist/components/Icon/AddIcon.js +6 -5
  29. package/dist/components/Icon/ArrowDownIcon.d.ts +1 -1
  30. package/dist/components/Icon/ArrowDownIcon.js +6 -5
  31. package/dist/components/Icon/ArrowLeftIcon.d.ts +1 -1
  32. package/dist/components/Icon/ArrowLeftIcon.js +6 -5
  33. package/dist/components/Icon/ArrowRightIcon.d.ts +1 -1
  34. package/dist/components/Icon/ArrowRightIcon.js +6 -5
  35. package/dist/components/Icon/ArrowUpIcon.d.ts +1 -1
  36. package/dist/components/Icon/ArrowUpIcon.js +6 -5
  37. package/dist/components/Icon/AvatarAltIcon.d.ts +1 -1
  38. package/dist/components/Icon/AvatarAltIcon.js +6 -5
  39. package/dist/components/Icon/AvatarIcon.d.ts +1 -1
  40. package/dist/components/Icon/AvatarIcon.js +6 -5
  41. package/dist/components/Icon/BasketIcon.d.ts +1 -1
  42. package/dist/components/Icon/BasketIcon.js +6 -5
  43. package/dist/components/Icon/CalendarIcon.d.ts +1 -1
  44. package/dist/components/Icon/CalendarIcon.js +6 -5
  45. package/dist/components/Icon/ChevronDownIcon.d.ts +1 -1
  46. package/dist/components/Icon/ChevronDownIcon.js +6 -5
  47. package/dist/components/Icon/ChevronLeftIcon.d.ts +1 -1
  48. package/dist/components/Icon/ChevronLeftIcon.js +6 -5
  49. package/dist/components/Icon/ChevronRightIcon.d.ts +1 -1
  50. package/dist/components/Icon/ChevronRightIcon.js +6 -5
  51. package/dist/components/Icon/ChevronUpIcon.d.ts +1 -1
  52. package/dist/components/Icon/ChevronUpIcon.js +6 -5
  53. package/dist/components/Icon/ClockIcon.d.ts +1 -1
  54. package/dist/components/Icon/ClockIcon.js +6 -5
  55. package/dist/components/Icon/CloseAltIcon.d.ts +1 -1
  56. package/dist/components/Icon/CloseAltIcon.js +6 -5
  57. package/dist/components/Icon/CloseIcon.d.ts +1 -1
  58. package/dist/components/Icon/CloseIcon.js +6 -5
  59. package/dist/components/Icon/CoopCardIcon.d.ts +1 -1
  60. package/dist/components/Icon/CoopCardIcon.js +6 -5
  61. package/dist/components/Icon/CoopIcon.d.ts +1 -1
  62. package/dist/components/Icon/CoopIcon.js +6 -5
  63. package/dist/components/Icon/CoopLocationIcon.d.ts +1 -1
  64. package/dist/components/Icon/CoopLocationIcon.js +6 -5
  65. package/dist/components/Icon/DownloadIcon.d.ts +1 -1
  66. package/dist/components/Icon/DownloadIcon.js +6 -5
  67. package/dist/components/Icon/HomeIcon.d.ts +1 -1
  68. package/dist/components/Icon/HomeIcon.js +6 -5
  69. package/dist/components/Icon/InformationIcon.d.ts +1 -1
  70. package/dist/components/Icon/InformationIcon.js +6 -5
  71. package/dist/components/Icon/LoadingIcon.d.ts +1 -1
  72. package/dist/components/Icon/LoadingIcon.js +6 -5
  73. package/dist/components/Icon/LocationIcon.d.ts +1 -1
  74. package/dist/components/Icon/LocationIcon.js +6 -5
  75. package/dist/components/Icon/MailIcon.d.ts +1 -1
  76. package/dist/components/Icon/MailIcon.js +6 -5
  77. package/dist/components/Icon/MenuIcon.d.ts +1 -1
  78. package/dist/components/Icon/MenuIcon.js +6 -5
  79. package/dist/components/Icon/MessageIcon.d.ts +1 -1
  80. package/dist/components/Icon/MessageIcon.js +6 -5
  81. package/dist/components/Icon/MinusIcon.d.ts +1 -1
  82. package/dist/components/Icon/MinusIcon.js +6 -5
  83. package/dist/components/Icon/OpenNewIcon.d.ts +1 -1
  84. package/dist/components/Icon/OpenNewIcon.js +6 -5
  85. package/dist/components/Icon/PencilIcon.d.ts +1 -1
  86. package/dist/components/Icon/PencilIcon.js +6 -5
  87. package/dist/components/Icon/PhoneIcon.d.ts +1 -1
  88. package/dist/components/Icon/PhoneIcon.js +6 -5
  89. package/dist/components/Icon/QuestionIcon.d.ts +1 -1
  90. package/dist/components/Icon/QuestionIcon.js +6 -5
  91. package/dist/components/Icon/ScooterIcon.d.ts +1 -1
  92. package/dist/components/Icon/ScooterIcon.js +6 -5
  93. package/dist/components/Icon/SearchIcon.d.ts +1 -1
  94. package/dist/components/Icon/SearchIcon.js +6 -5
  95. package/dist/components/Icon/SettingsIcon.d.ts +1 -1
  96. package/dist/components/Icon/SettingsIcon.js +6 -5
  97. package/dist/components/Icon/TickAltIcon.d.ts +1 -1
  98. package/dist/components/Icon/TickAltIcon.js +6 -5
  99. package/dist/components/Icon/TickIcon.d.ts +1 -1
  100. package/dist/components/Icon/TickIcon.js +6 -5
  101. package/dist/components/Icon/VanIcon.d.ts +1 -1
  102. package/dist/components/Icon/VanIcon.js +6 -5
  103. package/dist/components/Icon/WarningIcon.d.ts +1 -1
  104. package/dist/components/Icon/WarningIcon.js +6 -5
  105. package/dist/components/Icon/WriteIcon.d.ts +1 -1
  106. package/dist/components/Icon/WriteIcon.js +6 -5
  107. package/dist/components/Image/Image.d.ts +4 -2
  108. package/dist/components/Image/Image.js +2 -2
  109. package/dist/components/Pill/Pill.d.ts +4 -2
  110. package/dist/components/Pill/Pill.js +5 -6
  111. package/dist/components/Radio/Radio.d.ts +5 -3
  112. package/dist/components/Radio/Radio.js +5 -6
  113. package/dist/components/Searchbox/Searchbox.d.ts +4 -2
  114. package/dist/components/Searchbox/Searchbox.js +14 -9
  115. package/dist/components/Signpost/Signpost.d.ts +6 -4
  116. package/dist/components/Signpost/Signpost.js +3 -6
  117. package/dist/components/SkipNav/SkipNav.d.ts +4 -2
  118. package/dist/components/SkipNav/SkipNav.js +2 -2
  119. package/dist/components/Squircle/Squircle.d.ts +4 -2
  120. package/dist/components/Squircle/Squircle.js +2 -2
  121. package/dist/components/Tag/Tag.d.ts +5 -3
  122. package/dist/components/Tag/Tag.js +3 -6
  123. package/dist/components/TextInput/TextInput.d.ts +4 -2
  124. package/dist/components/TextInput/TextInput.js +2 -2
  125. package/dist/components/Textarea/Textarea.d.ts +4 -2
  126. package/dist/components/Textarea/Textarea.js +4 -5
  127. package/package.json +2 -2
  128. package/src/components/AlertBanner/AlertBanner.tsx +6 -2
  129. package/src/components/Author/Author.tsx +5 -2
  130. package/src/components/Button/Button.tsx +2 -3
  131. package/src/components/Card/Card.tsx +5 -2
  132. package/src/components/Checkbox/Checkbox.tsx +6 -2
  133. package/src/components/Expandable/Expandable.tsx +10 -3
  134. package/src/components/Field/Field.tsx +6 -5
  135. package/src/components/FieldMarkers/Error.tsx +9 -3
  136. package/src/components/FieldMarkers/Hint.tsx +10 -4
  137. package/src/components/FieldMarkers/Label.tsx +9 -3
  138. package/src/components/FieldMarkers/Legend.tsx +9 -3
  139. package/src/components/Fieldset/Fieldset.tsx +9 -4
  140. package/src/components/Flourish/Flourish.tsx +5 -2
  141. package/src/components/Icon/AddIcon.tsx +9 -6
  142. package/src/components/Icon/ArrowDownIcon.tsx +9 -6
  143. package/src/components/Icon/ArrowLeftIcon.tsx +9 -6
  144. package/src/components/Icon/ArrowRightIcon.tsx +9 -6
  145. package/src/components/Icon/ArrowUpIcon.tsx +9 -6
  146. package/src/components/Icon/AvatarAltIcon.tsx +9 -6
  147. package/src/components/Icon/AvatarIcon.tsx +9 -6
  148. package/src/components/Icon/BasketIcon.tsx +9 -6
  149. package/src/components/Icon/CalendarIcon.tsx +9 -6
  150. package/src/components/Icon/ChevronDownIcon.tsx +9 -6
  151. package/src/components/Icon/ChevronLeftIcon.tsx +9 -6
  152. package/src/components/Icon/ChevronRightIcon.tsx +9 -6
  153. package/src/components/Icon/ChevronUpIcon.tsx +9 -6
  154. package/src/components/Icon/ClockIcon.tsx +9 -6
  155. package/src/components/Icon/CloseAltIcon.tsx +9 -6
  156. package/src/components/Icon/CloseIcon.tsx +9 -6
  157. package/src/components/Icon/CoopCardIcon.tsx +9 -6
  158. package/src/components/Icon/CoopIcon.tsx +9 -6
  159. package/src/components/Icon/CoopLocationIcon.tsx +9 -6
  160. package/src/components/Icon/DownloadIcon.tsx +9 -6
  161. package/src/components/Icon/HomeIcon.tsx +9 -6
  162. package/src/components/Icon/InformationIcon.tsx +9 -6
  163. package/src/components/Icon/LoadingIcon.tsx +9 -6
  164. package/src/components/Icon/LocationIcon.tsx +9 -6
  165. package/src/components/Icon/MailIcon.tsx +9 -6
  166. package/src/components/Icon/MenuIcon.tsx +9 -6
  167. package/src/components/Icon/MessageIcon.tsx +9 -6
  168. package/src/components/Icon/MinusIcon.tsx +9 -6
  169. package/src/components/Icon/OpenNewIcon.tsx +9 -6
  170. package/src/components/Icon/PencilIcon.tsx +9 -6
  171. package/src/components/Icon/PhoneIcon.tsx +9 -6
  172. package/src/components/Icon/QuestionIcon.tsx +9 -6
  173. package/src/components/Icon/ScooterIcon.tsx +9 -6
  174. package/src/components/Icon/SearchIcon.tsx +9 -6
  175. package/src/components/Icon/SettingsIcon.tsx +9 -6
  176. package/src/components/Icon/TickAltIcon.tsx +9 -6
  177. package/src/components/Icon/TickIcon.tsx +9 -6
  178. package/src/components/Icon/VanIcon.tsx +9 -6
  179. package/src/components/Icon/WarningIcon.tsx +9 -6
  180. package/src/components/Icon/WriteIcon.tsx +9 -6
  181. package/src/components/Image/Image.tsx +5 -2
  182. package/src/components/Pill/Pill.tsx +8 -7
  183. package/src/components/Radio/Radio.tsx +10 -7
  184. package/src/components/Searchbox/Searchbox.tsx +22 -19
  185. package/src/components/Signpost/Signpost.tsx +8 -8
  186. package/src/components/SkipNav/SkipNav.tsx +5 -2
  187. package/src/components/Squircle/Squircle.tsx +5 -2
  188. package/src/components/Tag/Tag.tsx +9 -8
  189. package/src/components/TextInput/TextInput.tsx +5 -2
  190. package/src/components/Textarea/Textarea.tsx +8 -6
@@ -1,24 +1,27 @@
1
1
  import clsx from "clsx"
2
- import { type SVGProps, useId } from "react"
2
+ import { type SVGProps } from "react"
3
+
4
+ import { useId } from "../../hooks/useId"
3
5
 
4
6
  interface IconProps extends SVGProps<SVGSVGElement> {
5
7
  alt?: string
6
8
  }
7
9
 
8
- export const ArrowUpIcon = ({ alt, className, fill, ...props }: IconProps) => {
9
- const id = useId()
10
+ export const ArrowUpIcon = ({ alt, className, fill, id, ref, ...props }: IconProps) => {
11
+ const uid = useId(id)
10
12
  const componentProps = {
11
- "aria-labelledby": alt ? id : undefined,
13
+ "aria-labelledby": alt ? uid + "-title" : undefined,
12
14
  className: clsx("coop-icon", className),
13
15
  "data-icon": "arrow-up",
14
16
  fill: fill ?? "none",
17
+ id: uid,
15
18
  role: alt ? "img" : undefined,
16
19
  viewBox: "0 0 32 32",
17
20
  ...props,
18
21
  }
19
22
  return (
20
- <svg {...componentProps}>
21
- {alt ? <title id={id}>{alt}</title> : null}
23
+ <svg {...componentProps} ref={ref}>
24
+ {alt ? <title id={uid + "-title"}>{alt}</title> : null}
22
25
  <path d="M17 3.34V29a1 1 0 0 1-2 0V3.34a1 1 0 0 1 2 0" fill={fill ?? "currentColor"} />
23
26
  <path
24
27
  d="M29 15a1 1 0 0 1-.29.71 1 1 0 0 1-1.42 0L16 4.42 4.71 15.71a1 1 0 0 1-1.42 0 1 1 0 0 1 0-1.41l12-12a1 1 0 0 1 1.41 0l12 12a1 1 0 0 1 .3.7"
@@ -1,24 +1,27 @@
1
1
  import clsx from "clsx"
2
- import { type SVGProps, useId } from "react"
2
+ import { type SVGProps } from "react"
3
+
4
+ import { useId } from "../../hooks/useId"
3
5
 
4
6
  interface IconProps extends SVGProps<SVGSVGElement> {
5
7
  alt?: string
6
8
  }
7
9
 
8
- export const AvatarAltIcon = ({ alt, className, fill, ...props }: IconProps) => {
9
- const id = useId()
10
+ export const AvatarAltIcon = ({ alt, className, fill, id, ref, ...props }: IconProps) => {
11
+ const uid = useId(id)
10
12
  const componentProps = {
11
- "aria-labelledby": alt ? id : undefined,
13
+ "aria-labelledby": alt ? uid + "-title" : undefined,
12
14
  className: clsx("coop-icon", className),
13
15
  "data-icon": "avatar-alt",
14
16
  fill: fill ?? "none",
17
+ id: uid,
15
18
  role: alt ? "img" : undefined,
16
19
  viewBox: "0 0 32 32",
17
20
  ...props,
18
21
  }
19
22
  return (
20
- <svg {...componentProps}>
21
- {alt ? <title id={id}>{alt}</title> : null}
23
+ <svg {...componentProps} ref={ref}>
24
+ {alt ? <title id={uid + "-title"}>{alt}</title> : null}
22
25
  <path
23
26
  d="M16 32a16 16 0 1 1 16-16 16 16 0 0 1-16 16m0-30a14 14 0 1 0 14 14A14 14 0 0 0 16 2"
24
27
  fill={fill ?? "currentColor"}
@@ -1,24 +1,27 @@
1
1
  import clsx from "clsx"
2
- import { type SVGProps, useId } from "react"
2
+ import { type SVGProps } from "react"
3
+
4
+ import { useId } from "../../hooks/useId"
3
5
 
4
6
  interface IconProps extends SVGProps<SVGSVGElement> {
5
7
  alt?: string
6
8
  }
7
9
 
8
- export const AvatarIcon = ({ alt, className, fill, ...props }: IconProps) => {
9
- const id = useId()
10
+ export const AvatarIcon = ({ alt, className, fill, id, ref, ...props }: IconProps) => {
11
+ const uid = useId(id)
10
12
  const componentProps = {
11
- "aria-labelledby": alt ? id : undefined,
13
+ "aria-labelledby": alt ? uid + "-title" : undefined,
12
14
  className: clsx("coop-icon", className),
13
15
  "data-icon": "avatar",
14
16
  fill: fill ?? "none",
17
+ id: uid,
15
18
  role: alt ? "img" : undefined,
16
19
  viewBox: "0 0 32 32",
17
20
  ...props,
18
21
  }
19
22
  return (
20
- <svg {...componentProps}>
21
- {alt ? <title id={id}>{alt}</title> : null}
23
+ <svg {...componentProps} ref={ref}>
24
+ {alt ? <title id={uid + "-title"}>{alt}</title> : null}
22
25
  <path
23
26
  d="M16 31a18.24 18.24 0 0 1-12.64-5.1A1.19 1.19 0 0 1 3 24.86a12.31 12.31 0 0 1 12-10h2a12.31 12.31 0 0 1 12 10 1.19 1.19 0 0 1-.34 1.06A18.24 18.24 0 0 1 16 31M5.42 24.68a15.9 15.9 0 0 0 21.16 0A10 10 0 0 0 17 17.17h-2a10 10 0 0 0-9.58 7.51"
24
27
  fill={fill ?? "currentColor"}
@@ -1,24 +1,27 @@
1
1
  import clsx from "clsx"
2
- import { type SVGProps, useId } from "react"
2
+ import { type SVGProps } from "react"
3
+
4
+ import { useId } from "../../hooks/useId"
3
5
 
4
6
  interface IconProps extends SVGProps<SVGSVGElement> {
5
7
  alt?: string
6
8
  }
7
9
 
8
- export const BasketIcon = ({ alt, className, fill, ...props }: IconProps) => {
9
- const id = useId()
10
+ export const BasketIcon = ({ alt, className, fill, id, ref, ...props }: IconProps) => {
11
+ const uid = useId(id)
10
12
  const componentProps = {
11
- "aria-labelledby": alt ? id : undefined,
13
+ "aria-labelledby": alt ? uid + "-title" : undefined,
12
14
  className: clsx("coop-icon", className),
13
15
  "data-icon": "basket",
14
16
  fill: fill ?? "none",
17
+ id: uid,
15
18
  role: alt ? "img" : undefined,
16
19
  viewBox: "0 0 32 32",
17
20
  ...props,
18
21
  }
19
22
  return (
20
- <svg {...componentProps}>
21
- {alt ? <title id={id}>{alt}</title> : null}
23
+ <svg {...componentProps} ref={ref}>
24
+ {alt ? <title id={uid + "-title"}>{alt}</title> : null}
22
25
  <path
23
26
  d="M16.07 26a1 1 0 0 0 1-1v-4.08a1 1 0 1 0-2 0V25a1 1 0 0 0 1 1M21.5 26h.17a1 1 0 0 0 1-.85l.68-4.07a1 1 0 0 0-.82-1.18 1 1 0 0 0-1.16.84l-.67 4.07a1 1 0 0 0 .8 1.19M10.43 26h.17a1 1 0 0 0 .82-1.18l-.68-4.07a1 1 0 0 0-1.15-.84 1 1 0 0 0-.82 1.18l.67 4.07a1 1 0 0 0 .99.84"
24
27
  fill={fill ?? "currentColor"}
@@ -1,24 +1,27 @@
1
1
  import clsx from "clsx"
2
- import { type SVGProps, useId } from "react"
2
+ import { type SVGProps } from "react"
3
+
4
+ import { useId } from "../../hooks/useId"
3
5
 
4
6
  interface IconProps extends SVGProps<SVGSVGElement> {
5
7
  alt?: string
6
8
  }
7
9
 
8
- export const CalendarIcon = ({ alt, className, fill, ...props }: IconProps) => {
9
- const id = useId()
10
+ export const CalendarIcon = ({ alt, className, fill, id, ref, ...props }: IconProps) => {
11
+ const uid = useId(id)
10
12
  const componentProps = {
11
- "aria-labelledby": alt ? id : undefined,
13
+ "aria-labelledby": alt ? uid + "-title" : undefined,
12
14
  className: clsx("coop-icon", className),
13
15
  "data-icon": "calendar",
14
16
  fill: fill ?? "none",
17
+ id: uid,
15
18
  role: alt ? "img" : undefined,
16
19
  viewBox: "0 0 32 32",
17
20
  ...props,
18
21
  }
19
22
  return (
20
- <svg {...componentProps}>
21
- {alt ? <title id={id}>{alt}</title> : null}
23
+ <svg {...componentProps} ref={ref}>
24
+ {alt ? <title id={uid + "-title"}>{alt}</title> : null}
22
25
  <path
23
26
  d="M31 2h-4V1a1 1 0 0 0-2 0v1H7V1a1 1 0 0 0-2 0v1H1a1 1 0 0 0-1 1v28a1 1 0 0 0 1 1h30a1 1 0 0 0 1-1V3a1 1 0 0 0-1-1m-1 28H2V10h28Zm0-22H2V4h3v1a1 1 0 0 0 2 0V4h18v1a1 1 0 0 0 2 0V4h3Z"
24
27
  fill={fill ?? "currentColor"}
@@ -1,24 +1,27 @@
1
1
  import clsx from "clsx"
2
- import { type SVGProps, useId } from "react"
2
+ import { type SVGProps } from "react"
3
+
4
+ import { useId } from "../../hooks/useId"
3
5
 
4
6
  interface IconProps extends SVGProps<SVGSVGElement> {
5
7
  alt?: string
6
8
  }
7
9
 
8
- export const ChevronDownIcon = ({ alt, className, fill, ...props }: IconProps) => {
9
- const id = useId()
10
+ export const ChevronDownIcon = ({ alt, className, fill, id, ref, ...props }: IconProps) => {
11
+ const uid = useId(id)
10
12
  const componentProps = {
11
- "aria-labelledby": alt ? id : undefined,
13
+ "aria-labelledby": alt ? uid + "-title" : undefined,
12
14
  className: clsx("coop-icon", className),
13
15
  "data-icon": "chevron-down",
14
16
  fill: fill ?? "none",
17
+ id: uid,
15
18
  role: alt ? "img" : undefined,
16
19
  viewBox: "0 0 32 32",
17
20
  ...props,
18
21
  }
19
22
  return (
20
- <svg {...componentProps}>
21
- {alt ? <title id={id}>{alt}</title> : null}
23
+ <svg {...componentProps} ref={ref}>
24
+ {alt ? <title id={uid + "-title"}>{alt}</title> : null}
22
25
  <path
23
26
  d="M31 9a1 1 0 0 0-.29-.71 1 1 0 0 0-1.42 0L16 21.59 2.71 8.3a1 1 0 0 0-1.42 0 1 1 0 0 0 0 1.41l14 14a1 1 0 0 0 1.41 0l14-14A1 1 0 0 0 31 9"
24
27
  fill={fill ?? "currentColor"}
@@ -1,24 +1,27 @@
1
1
  import clsx from "clsx"
2
- import { type SVGProps, useId } from "react"
2
+ import { type SVGProps } from "react"
3
+
4
+ import { useId } from "../../hooks/useId"
3
5
 
4
6
  interface IconProps extends SVGProps<SVGSVGElement> {
5
7
  alt?: string
6
8
  }
7
9
 
8
- export const ChevronLeftIcon = ({ alt, className, fill, ...props }: IconProps) => {
9
- const id = useId()
10
+ export const ChevronLeftIcon = ({ alt, className, fill, id, ref, ...props }: IconProps) => {
11
+ const uid = useId(id)
10
12
  const componentProps = {
11
- "aria-labelledby": alt ? id : undefined,
13
+ "aria-labelledby": alt ? uid + "-title" : undefined,
12
14
  className: clsx("coop-icon", className),
13
15
  "data-icon": "chevron-left",
14
16
  fill: fill ?? "none",
17
+ id: uid,
15
18
  role: alt ? "img" : undefined,
16
19
  viewBox: "0 0 32 32",
17
20
  ...props,
18
21
  }
19
22
  return (
20
- <svg {...componentProps}>
21
- {alt ? <title id={id}>{alt}</title> : null}
23
+ <svg {...componentProps} ref={ref}>
24
+ {alt ? <title id={uid + "-title"}>{alt}</title> : null}
22
25
  <path
23
26
  d="M22.5 30a1 1 0 0 0 .71-.29 1 1 0 0 0 0-1.42L10.91 16 23.2 3.71a1 1 0 0 0 0-1.41 1 1 0 0 0-1.41 0l-13 13a1 1 0 0 0 0 1.41l13 13a1 1 0 0 0 .71.29"
24
27
  fill={fill ?? "currentColor"}
@@ -1,24 +1,27 @@
1
1
  import clsx from "clsx"
2
- import { type SVGProps, useId } from "react"
2
+ import { type SVGProps } from "react"
3
+
4
+ import { useId } from "../../hooks/useId"
3
5
 
4
6
  interface IconProps extends SVGProps<SVGSVGElement> {
5
7
  alt?: string
6
8
  }
7
9
 
8
- export const ChevronRightIcon = ({ alt, className, fill, ...props }: IconProps) => {
9
- const id = useId()
10
+ export const ChevronRightIcon = ({ alt, className, fill, id, ref, ...props }: IconProps) => {
11
+ const uid = useId(id)
10
12
  const componentProps = {
11
- "aria-labelledby": alt ? id : undefined,
13
+ "aria-labelledby": alt ? uid + "-title" : undefined,
12
14
  className: clsx("coop-icon", className),
13
15
  "data-icon": "chevron-right",
14
16
  fill: fill ?? "none",
17
+ id: uid,
15
18
  role: alt ? "img" : undefined,
16
19
  viewBox: "0 0 32 32",
17
20
  ...props,
18
21
  }
19
22
  return (
20
- <svg {...componentProps}>
21
- {alt ? <title id={id}>{alt}</title> : null}
23
+ <svg {...componentProps} ref={ref}>
24
+ {alt ? <title id={uid + "-title"}>{alt}</title> : null}
22
25
  <path
23
26
  d="M9.49 2a1 1 0 0 0-.71 1.71L21.07 16 8.79 28.3a1 1 0 1 0 1.41 1.41l13-13a1 1 0 0 0 0-1.42l-13-13A1 1 0 0 0 9.49 2"
24
27
  fill={fill ?? "currentColor"}
@@ -1,24 +1,27 @@
1
1
  import clsx from "clsx"
2
- import { type SVGProps, useId } from "react"
2
+ import { type SVGProps } from "react"
3
+
4
+ import { useId } from "../../hooks/useId"
3
5
 
4
6
  interface IconProps extends SVGProps<SVGSVGElement> {
5
7
  alt?: string
6
8
  }
7
9
 
8
- export const ChevronUpIcon = ({ alt, className, fill, ...props }: IconProps) => {
9
- const id = useId()
10
+ export const ChevronUpIcon = ({ alt, className, fill, id, ref, ...props }: IconProps) => {
11
+ const uid = useId(id)
10
12
  const componentProps = {
11
- "aria-labelledby": alt ? id : undefined,
13
+ "aria-labelledby": alt ? uid + "-title" : undefined,
12
14
  className: clsx("coop-icon", className),
13
15
  "data-icon": "chevron-up",
14
16
  fill: fill ?? "none",
17
+ id: uid,
15
18
  role: alt ? "img" : undefined,
16
19
  viewBox: "0 0 32 32",
17
20
  ...props,
18
21
  }
19
22
  return (
20
- <svg {...componentProps}>
21
- {alt ? <title id={id}>{alt}</title> : null}
23
+ <svg {...componentProps} ref={ref}>
24
+ {alt ? <title id={uid + "-title"}>{alt}</title> : null}
22
25
  <path
23
26
  d="M1 23a1 1 0 0 0 .29.71 1 1 0 0 0 1.42 0L16 10.41 29.29 23.7a1 1 0 0 0 1.42 0 1 1 0 0 0 0-1.41l-14-14a1 1 0 0 0-1.41 0l-14 14A1 1 0 0 0 1 23"
24
27
  fill={fill ?? "currentColor"}
@@ -1,24 +1,27 @@
1
1
  import clsx from "clsx"
2
- import { type SVGProps, useId } from "react"
2
+ import { type SVGProps } from "react"
3
+
4
+ import { useId } from "../../hooks/useId"
3
5
 
4
6
  interface IconProps extends SVGProps<SVGSVGElement> {
5
7
  alt?: string
6
8
  }
7
9
 
8
- export const ClockIcon = ({ alt, className, fill, ...props }: IconProps) => {
9
- const id = useId()
10
+ export const ClockIcon = ({ alt, className, fill, id, ref, ...props }: IconProps) => {
11
+ const uid = useId(id)
10
12
  const componentProps = {
11
- "aria-labelledby": alt ? id : undefined,
13
+ "aria-labelledby": alt ? uid + "-title" : undefined,
12
14
  className: clsx("coop-icon", className),
13
15
  "data-icon": "clock",
14
16
  fill: fill ?? "none",
17
+ id: uid,
15
18
  role: alt ? "img" : undefined,
16
19
  viewBox: "0 0 32 32",
17
20
  ...props,
18
21
  }
19
22
  return (
20
- <svg {...componentProps}>
21
- {alt ? <title id={id}>{alt}</title> : null}
23
+ <svg {...componentProps} ref={ref}>
24
+ {alt ? <title id={uid + "-title"}>{alt}</title> : null}
22
25
  <path
23
26
  d="M23 21.05a.93.93 0 0 1-.5-.14L15 16.58v-9.5a1 1 0 0 1 1-1 1 1 0 0 1 1 1v8.35l6.47 3.77a1 1 0 0 1 .36 1.36 1 1 0 0 1-.83.49"
24
27
  fill={fill ?? "currentColor"}
@@ -1,24 +1,27 @@
1
1
  import clsx from "clsx"
2
- import { type SVGProps, useId } from "react"
2
+ import { type SVGProps } from "react"
3
+
4
+ import { useId } from "../../hooks/useId"
3
5
 
4
6
  interface IconProps extends SVGProps<SVGSVGElement> {
5
7
  alt?: string
6
8
  }
7
9
 
8
- export const CloseAltIcon = ({ alt, className, fill, ...props }: IconProps) => {
9
- const id = useId()
10
+ export const CloseAltIcon = ({ alt, className, fill, id, ref, ...props }: IconProps) => {
11
+ const uid = useId(id)
10
12
  const componentProps = {
11
- "aria-labelledby": alt ? id : undefined,
13
+ "aria-labelledby": alt ? uid + "-title" : undefined,
12
14
  className: clsx("coop-icon", className),
13
15
  "data-icon": "close-alt",
14
16
  fill: fill ?? "none",
17
+ id: uid,
15
18
  role: alt ? "img" : undefined,
16
19
  viewBox: "0 0 32 32",
17
20
  ...props,
18
21
  }
19
22
  return (
20
- <svg {...componentProps}>
21
- {alt ? <title id={id}>{alt}</title> : null}
23
+ <svg {...componentProps} ref={ref}>
24
+ {alt ? <title id={uid + "-title"}>{alt}</title> : null}
22
25
  <path
23
26
  d="M21.55 22.51a1 1 0 0 1-.7-.3l-11-11a1 1 0 0 1 1.41-1.41l11 11a1 1 0 0 1 0 1.41 1 1 0 0 1-.71.3"
24
27
  fill={fill ?? "currentColor"}
@@ -1,24 +1,27 @@
1
1
  import clsx from "clsx"
2
- import { type SVGProps, useId } from "react"
2
+ import { type SVGProps } from "react"
3
+
4
+ import { useId } from "../../hooks/useId"
3
5
 
4
6
  interface IconProps extends SVGProps<SVGSVGElement> {
5
7
  alt?: string
6
8
  }
7
9
 
8
- export const CloseIcon = ({ alt, className, fill, ...props }: IconProps) => {
9
- const id = useId()
10
+ export const CloseIcon = ({ alt, className, fill, id, ref, ...props }: IconProps) => {
11
+ const uid = useId(id)
10
12
  const componentProps = {
11
- "aria-labelledby": alt ? id : undefined,
13
+ "aria-labelledby": alt ? uid + "-title" : undefined,
12
14
  className: clsx("coop-icon", className),
13
15
  "data-icon": "close",
14
16
  fill: fill ?? "none",
17
+ id: uid,
15
18
  role: alt ? "img" : undefined,
16
19
  viewBox: "0 0 32 32",
17
20
  ...props,
18
21
  }
19
22
  return (
20
- <svg {...componentProps}>
21
- {alt ? <title id={id}>{alt}</title> : null}
23
+ <svg {...componentProps} ref={ref}>
24
+ {alt ? <title id={uid + "-title"}>{alt}</title> : null}
22
25
  <path
23
26
  d="M27 28a1 1 0 0 1-.71-.29l-22-22a1 1 0 0 1 1.42-1.42l22 22a1 1 0 0 1 0 1.42A1 1 0 0 1 27 28"
24
27
  fill={fill ?? "currentColor"}
@@ -1,24 +1,27 @@
1
1
  import clsx from "clsx"
2
- import { type SVGProps, useId } from "react"
2
+ import { type SVGProps } from "react"
3
+
4
+ import { useId } from "../../hooks/useId"
3
5
 
4
6
  interface IconProps extends SVGProps<SVGSVGElement> {
5
7
  alt?: string
6
8
  }
7
9
 
8
- export const CoopCardIcon = ({ alt, className, fill, ...props }: IconProps) => {
9
- const id = useId()
10
+ export const CoopCardIcon = ({ alt, className, fill, id, ref, ...props }: IconProps) => {
11
+ const uid = useId(id)
10
12
  const componentProps = {
11
- "aria-labelledby": alt ? id : undefined,
13
+ "aria-labelledby": alt ? uid + "-title" : undefined,
12
14
  className: clsx("coop-icon", className),
13
15
  "data-icon": "coop-card",
14
16
  fill: fill ?? "none",
17
+ id: uid,
15
18
  role: alt ? "img" : undefined,
16
19
  viewBox: "0 0 32 32",
17
20
  ...props,
18
21
  }
19
22
  return (
20
- <svg {...componentProps}>
21
- {alt ? <title id={id}>{alt}</title> : null}
23
+ <svg {...componentProps} ref={ref}>
24
+ {alt ? <title id={uid + "-title"}>{alt}</title> : null}
22
25
  <path
23
26
  d="M6.67 0a1.34 1.34 0 0 0-1.34 1.33v29.34A1.34 1.34 0 0 0 6.67 32h18.66a1.34 1.34 0 0 0 1.34-1.33V1.33A1.34 1.34 0 0 0 25.33 0ZM23 4.77a6.4 6.4 0 0 1 .21 1.62A6.8 6.8 0 0 1 22.94 8a2.1 2.1 0 0 1-.48.85 2.3 2.3 0 0 1-.82.55 6.3 6.3 0 0 1-1.93.31 5.3 5.3 0 0 1-1.94-.31 2.2 2.2 0 0 1-.8-.55 2.3 2.3 0 0 1-.49-.85 5.94 5.94 0 0 1 0-3.24 2.2 2.2 0 0 1 .52-.84 2.1 2.1 0 0 1 .82-.54 5.84 5.84 0 0 1 3.87 0 2.24 2.24 0 0 1 .81.55 2.3 2.3 0 0 1 .5.84m-2 2.4a2.5 2.5 0 0 0 .12-.78 2.4 2.4 0 0 0-.13-.8 1 1 0 0 0-.28-.45 1.15 1.15 0 0 0-.47-.23 2.8 2.8 0 0 0-1 0 1 1 0 0 0-.47.24.9.9 0 0 0-.29.44 2.66 2.66 0 0 0 0 1.58 1 1 0 0 0 .28.45 1.1 1.1 0 0 0 .48.23 2.8 2.8 0 0 0 1 0 1.1 1.1 0 0 0 .47-.24 1 1 0 0 0 .23-.44Zm-5.5 4.75a5.9 5.9 0 0 1 0 3.23 2.07 2.07 0 0 1-1.3 1.4 5.84 5.84 0 0 1-3.87 0 2.16 2.16 0 0 1-.81-.55 2.1 2.1 0 0 1-.52-.85 5.9 5.9 0 0 1 0-3.23 2.1 2.1 0 0 1 .48-.85 2.16 2.16 0 0 1 .82-.55 5.84 5.84 0 0 1 3.87 0 2.19 2.19 0 0 1 1.3 1.4Zm-2 2.41a2.5 2.5 0 0 0 .12-.77 2.7 2.7 0 0 0-.12-.8 1 1 0 0 0-.28-.45 1 1 0 0 0-.48-.23 2.8 2.8 0 0 0-1 0 1 1 0 0 0-.47.24 1 1 0 0 0-.28.44 2.63 2.63 0 0 0 0 1.57.9.9 0 0 0 .28.45 1 1 0 0 0 .47.23 2.8 2.8 0 0 0 1 0 1 1 0 0 0 .47-.23 1 1 0 0 0 .29-.45m2.22-8h-2.1a3.3 3.3 0 0 0-.1-.78 1 1 0 0 0-.29-.45 1.1 1.1 0 0 0-.47-.23 2.8 2.8 0 0 0-1 0 1.05 1.05 0 0 0-.47.24 1.1 1.1 0 0 0-.29.44 2.66 2.66 0 0 0 0 1.58 1 1 0 0 0 .28.45 1.1 1.1 0 0 0 .48.23 2.8 2.8 0 0 0 1 0 1.1 1.1 0 0 0 .47-.24 1.1 1.1 0 0 0 .29-.44 2.3 2.3 0 0 0 .07-.36l2 .92a3 3 0 0 0-.09.31 2.1 2.1 0 0 1-.49.85 2.16 2.16 0 0 1-.81.55 6.4 6.4 0 0 1-1.94.31 5.7 5.7 0 0 1-1.93-.31 2.1 2.1 0 0 1-.8-.55A2.16 2.16 0 0 1 9 8a5.94 5.94 0 0 1 0-3.23 2.06 2.06 0 0 1 .48-.85 2 2 0 0 1 .82-.54 5.84 5.84 0 0 1 3.87 0 2.2 2.2 0 0 1 .8.55 2 2 0 0 1 .49.84 6.7 6.7 0 0 1 .26 1.6Zm.5 7.18a6.2 6.2 0 0 1 .21-1.61 2.06 2.06 0 0 1 .51-.85 2 2 0 0 1 .85-.5 5.84 5.84 0 0 1 3.87 0 2.16 2.16 0 0 1 .81.55 2.1 2.1 0 0 1 .53.9 5.9 5.9 0 0 1 0 3.23 2.1 2.1 0 0 1-.48.85 2.16 2.16 0 0 1-.82.55 6.7 6.7 0 0 1-1.93.32L19 15h.2a2.8 2.8 0 0 0 1 0 1 1 0 0 0 .46-.24 1.05 1.05 0 0 0 .27-.44 2.66 2.66 0 0 0 0-1.58 1 1 0 0 0-.28-.44 1 1 0 0 0-.47-.23 2.4 2.4 0 0 0-1 0 .9.9 0 0 0-.47.23.9.9 0 0 0-.29.44 2.3 2.3 0 0 0-.11.78v4.73h-2.1Z"
24
27
  fill={fill ?? "currentColor"}
@@ -1,24 +1,27 @@
1
1
  import clsx from "clsx"
2
- import { type SVGProps, useId } from "react"
2
+ import { type SVGProps } from "react"
3
+
4
+ import { useId } from "../../hooks/useId"
3
5
 
4
6
  interface IconProps extends SVGProps<SVGSVGElement> {
5
7
  alt?: string
6
8
  }
7
9
 
8
- export const CoopIcon = ({ alt, className, fill, ...props }: IconProps) => {
9
- const id = useId()
10
+ export const CoopIcon = ({ alt, className, fill, id, ref, ...props }: IconProps) => {
11
+ const uid = useId(id)
10
12
  const componentProps = {
11
- "aria-labelledby": alt ? id : undefined,
13
+ "aria-labelledby": alt ? uid + "-title" : undefined,
12
14
  className: clsx("coop-icon", className),
13
15
  "data-icon": "coop",
14
16
  fill: fill ?? "none",
17
+ id: uid,
15
18
  role: alt ? "img" : undefined,
16
19
  viewBox: "0 0 32 32",
17
20
  ...props,
18
21
  }
19
22
  return (
20
- <svg {...componentProps}>
21
- {alt ? <title id={id}>{alt}</title> : null}
23
+ <svg {...componentProps} ref={ref}>
24
+ {alt ? <title id={uid + "-title"}>{alt}</title> : null}
22
25
  <path
23
26
  d="M28.77 5.17a11.33 11.33 0 0 1 0 5.93 4 4 0 0 1-.88 1.57 4.1 4.1 0 0 1-1.5 1 12 12 0 0 1-3.56.58 9.8 9.8 0 0 1-3.56-.58 4.2 4.2 0 0 1-1.47-1 4.1 4.1 0 0 1-.9-1.55 10.9 10.9 0 0 1 0-5.94 3.8 3.8 0 0 1 .89-1.56 3.8 3.8 0 0 1 1.49-1 10.73 10.73 0 0 1 7.12 0 3.9 3.9 0 0 1 1.48 1 3.9 3.9 0 0 1 .89 1.55m-3.67 4.4a4.9 4.9 0 0 0 .21-1.43 4.9 4.9 0 0 0-.23-1.47 1.8 1.8 0 0 0-.53-.82 1.77 1.77 0 0 0-.87-.42 5.1 5.1 0 0 0-1.83 0 2 2 0 0 0-.87.43 1.9 1.9 0 0 0-.53.81 4.94 4.94 0 0 0 0 2.9 1.86 1.86 0 0 0 .52.82 1.8 1.8 0 0 0 .88.43 5.1 5.1 0 0 0 1.83 0 1.88 1.88 0 0 0 1.4-1.25Zm-10 8.73a10.9 10.9 0 0 1 0 5.94 3.75 3.75 0 0 1-.88 1.58 3.8 3.8 0 0 1-1.5 1 10.7 10.7 0 0 1-7.11 0 4 4 0 0 1-1.49-1 4.1 4.1 0 0 1-.9-1.56 10.9 10.9 0 0 1 0-5.94 3.9 3.9 0 0 1 .89-1.57 3.8 3.8 0 0 1 1.5-1 10.7 10.7 0 0 1 7.11 0 4 4 0 0 1 1.48 1 3.9 3.9 0 0 1 .88 1.55Zm-3.66 4.44a5 5 0 0 0 .22-1.43 5.2 5.2 0 0 0-.22-1.47 1.9 1.9 0 0 0-.54-.84 1.8 1.8 0 0 0-.88-.43 5.6 5.6 0 0 0-1.83 0 2 2 0 0 0-.87.44 1.9 1.9 0 0 0-.52.81 4.8 4.8 0 0 0 0 2.9 1.7 1.7 0 0 0 .52.82 1.65 1.65 0 0 0 .87.42A4.7 4.7 0 0 0 10 24a1.83 1.83 0 0 0 .87-.43 2 2 0 0 0 .55-.83Zm4.05-14.63h-3.85a6.3 6.3 0 0 0-.19-1.43 1.8 1.8 0 0 0-.52-.82 1.8 1.8 0 0 0-.88-.42 5.1 5.1 0 0 0-1.83 0 1.93 1.93 0 0 0-.87.43 1.9 1.9 0 0 0-.53.81 4.94 4.94 0 0 0 0 2.9 1.86 1.86 0 0 0 .52.82 1.8 1.8 0 0 0 .88.43 5.1 5.1 0 0 0 1.83 0 2 2 0 0 0 .87-.44 2 2 0 0 0 .53-.81 4.5 4.5 0 0 0 .14-.66l3.63 1.69c-.05.16-.1.33-.14.5a4 4 0 0 1-.88 1.57 4.1 4.1 0 0 1-1.5 1 12 12 0 0 1-3.56.58 10.7 10.7 0 0 1-3.55-.58 4.2 4.2 0 0 1-1.48-1 4 4 0 0 1-.89-1.55 10.9 10.9 0 0 1 0-5.94A3.9 3.9 0 0 1 4.1 3.6a4 4 0 0 1 1.5-1 10.7 10.7 0 0 1 7.11 0 3.9 3.9 0 0 1 1.49 1 4 4 0 0 1 .9 1.55 11.3 11.3 0 0 1 .39 2.96m.93 13.19a11 11 0 0 1 .39-3 3.6 3.6 0 0 1 .93-1.55 3.7 3.7 0 0 1 1.56-.92 10.7 10.7 0 0 1 7.11 0 3.9 3.9 0 0 1 1.49 1 4 4 0 0 1 .9 1.55 10.93 10.93 0 0 1 0 5.95 3.8 3.8 0 0 1-.89 1.56 3.74 3.74 0 0 1-1.5 1 11.5 11.5 0 0 1-3.55.59l-1.32-3.59h.15l.21.06a5.2 5.2 0 0 0 1.84 0 1.84 1.84 0 0 0 .84-.44 1.9 1.9 0 0 0 .52-.8 4.94 4.94 0 0 0 0-2.9 1.83 1.83 0 0 0-1.4-1.25 5.1 5.1 0 0 0-1.83 0A2 2 0 0 0 21 19a1.9 1.9 0 0 0-.53.81 4.6 4.6 0 0 0-.2 1.42V30h-3.85Z"
24
27
  fill={fill ?? "currentColor"}
@@ -1,24 +1,27 @@
1
1
  import clsx from "clsx"
2
- import { type SVGProps, useId } from "react"
2
+ import { type SVGProps } from "react"
3
+
4
+ import { useId } from "../../hooks/useId"
3
5
 
4
6
  interface IconProps extends SVGProps<SVGSVGElement> {
5
7
  alt?: string
6
8
  }
7
9
 
8
- export const CoopLocationIcon = ({ alt, className, fill, ...props }: IconProps) => {
9
- const id = useId()
10
+ export const CoopLocationIcon = ({ alt, className, fill, id, ref, ...props }: IconProps) => {
11
+ const uid = useId(id)
10
12
  const componentProps = {
11
- "aria-labelledby": alt ? id : undefined,
13
+ "aria-labelledby": alt ? uid + "-title" : undefined,
12
14
  className: clsx("coop-icon", className),
13
15
  "data-icon": "coop-location",
14
16
  fill: fill ?? "none",
17
+ id: uid,
15
18
  role: alt ? "img" : undefined,
16
19
  viewBox: "0 0 32 32",
17
20
  ...props,
18
21
  }
19
22
  return (
20
- <svg {...componentProps}>
21
- {alt ? <title id={id}>{alt}</title> : null}
23
+ <svg {...componentProps} ref={ref}>
24
+ {alt ? <title id={uid + "-title"}>{alt}</title> : null}
22
25
  <path
23
26
  d="M20.48 6.51a2.4 2.4 0 0 0-.54 0 2.3 2.3 0 0 0-.53 0 1 1 0 0 0-.8.71 2.75 2.75 0 0 0 0 1.67 1.07 1.07 0 0 0 .8.71 3 3 0 0 0 .53.05 3.3 3.3 0 0 0 .54-.05 1.07 1.07 0 0 0 .8-.71 3 3 0 0 0 0-1.67 1 1 0 0 0-.8-.71"
24
27
  fill={fill ?? "currentColor"}
@@ -1,24 +1,27 @@
1
1
  import clsx from "clsx"
2
- import { type SVGProps, useId } from "react"
2
+ import { type SVGProps } from "react"
3
+
4
+ import { useId } from "../../hooks/useId"
3
5
 
4
6
  interface IconProps extends SVGProps<SVGSVGElement> {
5
7
  alt?: string
6
8
  }
7
9
 
8
- export const DownloadIcon = ({ alt, className, fill, ...props }: IconProps) => {
9
- const id = useId()
10
+ export const DownloadIcon = ({ alt, className, fill, id, ref, ...props }: IconProps) => {
11
+ const uid = useId(id)
10
12
  const componentProps = {
11
- "aria-labelledby": alt ? id : undefined,
13
+ "aria-labelledby": alt ? uid + "-title" : undefined,
12
14
  className: clsx("coop-icon", className),
13
15
  "data-icon": "download",
14
16
  fill: fill ?? "none",
17
+ id: uid,
15
18
  role: alt ? "img" : undefined,
16
19
  viewBox: "0 0 32 32",
17
20
  ...props,
18
21
  }
19
22
  return (
20
- <svg {...componentProps}>
21
- {alt ? <title id={id}>{alt}</title> : null}
23
+ <svg {...componentProps} ref={ref}>
24
+ {alt ? <title id={uid + "-title"}>{alt}</title> : null}
22
25
  <path
23
26
  d="M16 22.56a1 1 0 0 1-1-1V1a1 1 0 0 1 2 0v20.56a1 1 0 0 1-1 1"
24
27
  fill={fill ?? "currentColor"}
@@ -1,24 +1,27 @@
1
1
  import clsx from "clsx"
2
- import { type SVGProps, useId } from "react"
2
+ import { type SVGProps } from "react"
3
+
4
+ import { useId } from "../../hooks/useId"
3
5
 
4
6
  interface IconProps extends SVGProps<SVGSVGElement> {
5
7
  alt?: string
6
8
  }
7
9
 
8
- export const HomeIcon = ({ alt, className, fill, ...props }: IconProps) => {
9
- const id = useId()
10
+ export const HomeIcon = ({ alt, className, fill, id, ref, ...props }: IconProps) => {
11
+ const uid = useId(id)
10
12
  const componentProps = {
11
- "aria-labelledby": alt ? id : undefined,
13
+ "aria-labelledby": alt ? uid + "-title" : undefined,
12
14
  className: clsx("coop-icon", className),
13
15
  "data-icon": "home",
14
16
  fill: fill ?? "none",
17
+ id: uid,
15
18
  role: alt ? "img" : undefined,
16
19
  viewBox: "0 0 32 32",
17
20
  ...props,
18
21
  }
19
22
  return (
20
- <svg {...componentProps}>
21
- {alt ? <title id={id}>{alt}</title> : null}
23
+ <svg {...componentProps} ref={ref}>
24
+ {alt ? <title id={uid + "-title"}>{alt}</title> : null}
22
25
  <path
23
26
  d="M29 31H3a1 1 0 0 1-1-1V15a1 1 0 0 1 2 0v14h24V15a1 1 0 0 1 2 0v15a1 1 0 0 1-1 1"
24
27
  fill={fill ?? "currentColor"}
@@ -1,24 +1,27 @@
1
1
  import clsx from "clsx"
2
- import { type SVGProps, useId } from "react"
2
+ import { type SVGProps } from "react"
3
+
4
+ import { useId } from "../../hooks/useId"
3
5
 
4
6
  interface IconProps extends SVGProps<SVGSVGElement> {
5
7
  alt?: string
6
8
  }
7
9
 
8
- export const InformationIcon = ({ alt, className, fill, ...props }: IconProps) => {
9
- const id = useId()
10
+ export const InformationIcon = ({ alt, className, fill, id, ref, ...props }: IconProps) => {
11
+ const uid = useId(id)
10
12
  const componentProps = {
11
- "aria-labelledby": alt ? id : undefined,
13
+ "aria-labelledby": alt ? uid + "-title" : undefined,
12
14
  className: clsx("coop-icon", className),
13
15
  "data-icon": "information",
14
16
  fill: fill ?? "none",
17
+ id: uid,
15
18
  role: alt ? "img" : undefined,
16
19
  viewBox: "0 0 32 32",
17
20
  ...props,
18
21
  }
19
22
  return (
20
- <svg {...componentProps}>
21
- {alt ? <title id={id}>{alt}</title> : null}
23
+ <svg {...componentProps} ref={ref}>
24
+ {alt ? <title id={uid + "-title"}>{alt}</title> : null}
22
25
  <path
23
26
  d="M14.46 10.19a1.4 1.4 0 0 1 .43-1A1.5 1.5 0 0 1 16 8.75a1.6 1.6 0 0 1 1.11.41 1.35 1.35 0 0 1 .45 1 1.32 1.32 0 0 1-.45 1 1.56 1.56 0 0 1-1.11.41 1.47 1.47 0 0 1-1.09-.43 1.35 1.35 0 0 1-.45-.95m.34 3.26h2.4v9.6h-2.4Z"
24
27
  fill={fill ?? "currentColor"}