@proulr/sdui-components 0.1.66 → 0.1.68

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 (171) hide show
  1. package/assets/icons/arrow-down-right.svg +8 -0
  2. package/assets/icons/arrow-right.svg +8 -0
  3. package/assets/icons/arrow-up-right.svg +8 -0
  4. package/assets/icons/attachment.svg +8 -0
  5. package/assets/icons/back.svg +8 -0
  6. package/assets/icons/bell.svg +10 -0
  7. package/assets/icons/bookmark.svg +8 -0
  8. package/assets/icons/boost.svg +11 -0
  9. package/assets/icons/camera.svg +10 -0
  10. package/assets/icons/chat.svg +11 -0
  11. package/assets/icons/check.svg +8 -0
  12. package/assets/icons/chevron-down.svg +8 -0
  13. package/assets/icons/chevron-right.svg +8 -0
  14. package/assets/icons/close.svg +8 -0
  15. package/assets/icons/communities.svg +10 -0
  16. package/assets/icons/copy.svg +11 -0
  17. package/assets/icons/crop.svg +10 -0
  18. package/assets/icons/download.svg +9 -0
  19. package/assets/icons/edit.svg +10 -0
  20. package/assets/icons/events.svg +15 -0
  21. package/assets/icons/fire.svg +8 -0
  22. package/assets/icons/flash.svg +8 -0
  23. package/assets/icons/flip-camera.svg +12 -0
  24. package/assets/icons/followers.svg +13 -0
  25. package/assets/icons/gallery.svg +12 -0
  26. package/assets/icons/gift.svg +11 -0
  27. package/assets/icons/globe.svg +10 -0
  28. package/assets/icons/heart-filled.svg +8 -0
  29. package/assets/icons/heart.svg +8 -0
  30. package/assets/icons/hourglass.svg +13 -0
  31. package/assets/icons/hunt.svg +12 -0
  32. package/assets/icons/incognito.svg +11 -0
  33. package/assets/icons/info.svg +10 -0
  34. package/assets/icons/list.svg +13 -0
  35. package/assets/icons/location.svg +8 -0
  36. package/assets/icons/lock.svg +11 -0
  37. package/assets/icons/mention.svg +9 -0
  38. package/assets/icons/mic.svg +10 -0
  39. package/assets/icons/overflow.svg +12 -0
  40. package/assets/icons/pause.svg +10 -0
  41. package/assets/icons/pending.svg +10 -0
  42. package/assets/icons/play.svg +8 -0
  43. package/assets/icons/plus.svg +8 -0
  44. package/assets/icons/poll.svg +9 -0
  45. package/assets/icons/profile.svg +10 -0
  46. package/assets/icons/publish.svg +9 -0
  47. package/assets/icons/radio-unchecked.svg +8 -0
  48. package/assets/icons/reply.svg +9 -0
  49. package/assets/icons/repost.svg +11 -0
  50. package/assets/icons/right-now.svg +14 -0
  51. package/assets/icons/search.svg +10 -0
  52. package/assets/icons/send.svg +9 -0
  53. package/assets/icons/settings.svg +8 -0
  54. package/assets/icons/share.svg +13 -0
  55. package/assets/icons/shield.svg +9 -0
  56. package/assets/icons/sign-out.svg +9 -0
  57. package/assets/icons/signal.svg +8 -0
  58. package/assets/icons/star.svg +8 -0
  59. package/assets/icons/story-effects.svg +12 -0
  60. package/assets/icons/story-mention.svg +10 -0
  61. package/assets/icons/story-music.svg +10 -0
  62. package/assets/icons/story-sticker.svg +11 -0
  63. package/assets/icons/story-text.svg +9 -0
  64. package/assets/icons/story.svg +10 -0
  65. package/assets/icons/tab-chat.svg +11 -0
  66. package/assets/icons/tab-discover.svg +11 -0
  67. package/assets/icons/tab-flash.svg +8 -0
  68. package/assets/icons/tab-random.svg +13 -0
  69. package/assets/icons/tab-vibes.svg +8 -0
  70. package/assets/icons/thumbs-up-filled.svg +8 -0
  71. package/assets/icons/thumbs-up.svg +9 -0
  72. package/assets/icons/trash.svg +10 -0
  73. package/assets/icons/travel.svg +11 -0
  74. package/assets/icons/video.svg +11 -0
  75. package/assets/icons/visibility-off.svg +10 -0
  76. package/assets/icons/visibility.svg +9 -0
  77. package/assets/icons/volume-off.svg +9 -0
  78. package/assets/icons/volume-on.svg +10 -0
  79. package/assets/icons/warning.svg +10 -0
  80. package/package.json +4 -2
  81. package/src/catalog/catalog.test.ts +3 -1
  82. package/src/renderer/ui/app-icon-glyph-props.ts +5 -0
  83. package/src/renderer/ui/app-icon.test.ts +45 -0
  84. package/src/renderer/ui/app-icon.tsx +6 -166
  85. package/src/renderer/ui/compose-recent-media-grid.tsx +2 -2
  86. package/src/renderer/ui/compose-screen-header.tsx +2 -2
  87. package/src/renderer/ui/compose-visibility-row.tsx +2 -2
  88. package/src/renderer/ui/generated/arrow-down-right.tsx +16 -0
  89. package/src/renderer/ui/generated/arrow-right.tsx +16 -0
  90. package/src/renderer/ui/generated/arrow-up-right.tsx +16 -0
  91. package/src/renderer/ui/generated/attachment.tsx +16 -0
  92. package/src/renderer/ui/generated/back.tsx +16 -0
  93. package/src/renderer/ui/generated/bell.tsx +18 -0
  94. package/src/renderer/ui/generated/bookmark.tsx +16 -0
  95. package/src/renderer/ui/generated/boost.tsx +19 -0
  96. package/src/renderer/ui/generated/camera.tsx +18 -0
  97. package/src/renderer/ui/generated/chat.tsx +19 -0
  98. package/src/renderer/ui/generated/check.tsx +16 -0
  99. package/src/renderer/ui/generated/chevron-down.tsx +16 -0
  100. package/src/renderer/ui/generated/chevron-right.tsx +16 -0
  101. package/src/renderer/ui/generated/close.tsx +16 -0
  102. package/src/renderer/ui/generated/communities.tsx +18 -0
  103. package/src/renderer/ui/generated/copy.tsx +19 -0
  104. package/src/renderer/ui/generated/crop.tsx +18 -0
  105. package/src/renderer/ui/generated/download.tsx +17 -0
  106. package/src/renderer/ui/generated/edit.tsx +18 -0
  107. package/src/renderer/ui/generated/events.tsx +23 -0
  108. package/src/renderer/ui/generated/fire.tsx +16 -0
  109. package/src/renderer/ui/generated/flash.tsx +16 -0
  110. package/src/renderer/ui/generated/flip-camera.tsx +20 -0
  111. package/src/renderer/ui/generated/followers.tsx +21 -0
  112. package/src/renderer/ui/generated/gallery.tsx +20 -0
  113. package/src/renderer/ui/generated/gift.tsx +19 -0
  114. package/src/renderer/ui/generated/globe.tsx +18 -0
  115. package/src/renderer/ui/generated/heart-filled.tsx +16 -0
  116. package/src/renderer/ui/generated/heart.tsx +16 -0
  117. package/src/renderer/ui/generated/hourglass.tsx +21 -0
  118. package/src/renderer/ui/generated/hunt.tsx +20 -0
  119. package/src/renderer/ui/generated/incognito.tsx +19 -0
  120. package/src/renderer/ui/generated/index.ts +248 -0
  121. package/src/renderer/ui/generated/info.tsx +18 -0
  122. package/src/renderer/ui/generated/list.tsx +21 -0
  123. package/src/renderer/ui/generated/location.tsx +16 -0
  124. package/src/renderer/ui/generated/lock.tsx +19 -0
  125. package/src/renderer/ui/generated/mention.tsx +17 -0
  126. package/src/renderer/ui/generated/mic.tsx +18 -0
  127. package/src/renderer/ui/generated/overflow.tsx +20 -0
  128. package/src/renderer/ui/generated/pause.tsx +18 -0
  129. package/src/renderer/ui/generated/pending.tsx +18 -0
  130. package/src/renderer/ui/generated/play.tsx +16 -0
  131. package/src/renderer/ui/generated/plus.tsx +16 -0
  132. package/src/renderer/ui/generated/poll.tsx +17 -0
  133. package/src/renderer/ui/generated/profile.tsx +18 -0
  134. package/src/renderer/ui/generated/publish.tsx +17 -0
  135. package/src/renderer/ui/generated/radio-unchecked.tsx +16 -0
  136. package/src/renderer/ui/generated/reply.tsx +17 -0
  137. package/src/renderer/ui/generated/repost.tsx +19 -0
  138. package/src/renderer/ui/generated/right-now.tsx +22 -0
  139. package/src/renderer/ui/generated/search.tsx +18 -0
  140. package/src/renderer/ui/generated/send.tsx +17 -0
  141. package/src/renderer/ui/generated/settings.tsx +16 -0
  142. package/src/renderer/ui/generated/share.tsx +21 -0
  143. package/src/renderer/ui/generated/shield.tsx +17 -0
  144. package/src/renderer/ui/generated/sign-out.tsx +17 -0
  145. package/src/renderer/ui/generated/signal.tsx +16 -0
  146. package/src/renderer/ui/generated/star.tsx +16 -0
  147. package/src/renderer/ui/generated/story-effects.tsx +20 -0
  148. package/src/renderer/ui/generated/story-mention.tsx +18 -0
  149. package/src/renderer/ui/generated/story-music.tsx +18 -0
  150. package/src/renderer/ui/generated/story-sticker.tsx +19 -0
  151. package/src/renderer/ui/generated/story-text.tsx +17 -0
  152. package/src/renderer/ui/generated/story.tsx +18 -0
  153. package/src/renderer/ui/generated/tab-chat.tsx +19 -0
  154. package/src/renderer/ui/generated/tab-discover.tsx +19 -0
  155. package/src/renderer/ui/generated/tab-flash.tsx +16 -0
  156. package/src/renderer/ui/generated/tab-random.tsx +21 -0
  157. package/src/renderer/ui/generated/tab-vibes.tsx +16 -0
  158. package/src/renderer/ui/generated/thumbs-up-filled.tsx +16 -0
  159. package/src/renderer/ui/generated/thumbs-up.tsx +17 -0
  160. package/src/renderer/ui/generated/trash.tsx +18 -0
  161. package/src/renderer/ui/generated/travel.tsx +19 -0
  162. package/src/renderer/ui/generated/video.tsx +19 -0
  163. package/src/renderer/ui/generated/visibility-off.tsx +18 -0
  164. package/src/renderer/ui/generated/visibility.tsx +17 -0
  165. package/src/renderer/ui/generated/volume-off.tsx +17 -0
  166. package/src/renderer/ui/generated/volume-on.tsx +18 -0
  167. package/src/renderer/ui/generated/warning.tsx +18 -0
  168. package/src/renderer/ui/index.ts +2 -85
  169. package/src/renderer/ui/story-compose-header.tsx +2 -2
  170. package/src/renderer/ui/app-glyphs.tsx +0 -2082
  171. package/src/renderer/ui/compose-glyphs.tsx +0 -439
@@ -1,175 +1,15 @@
1
1
  import type { ComponentType } from 'react';
2
2
  import { isAppIconName, type AppIconName } from '../../catalog/app-icon-names';
3
3
  import { APP_ICON_SIZE } from './app-icon-size-catalog';
4
- import {
5
- AppChromeArrowDownRightGlyph,
6
- AppChromeArrowRightGlyph,
7
- AppChromeArrowUpRightGlyph,
8
- AppChromeAttachmentGlyph,
9
- AppChromeBackGlyph,
10
- AppChromeBellGlyph,
11
- AppChromeBookmarkGlyph,
12
- AppChromeBoostGlyph,
13
- AppChromeChatGlyph,
14
- AppChromeCheckGlyph,
15
- AppChromeChevronDownGlyph,
16
- AppChromeChevronRightGlyph,
17
- AppChromeCloseGlyph,
18
- AppChromeCommunitiesGlyph,
19
- AppChromeCopyGlyph,
20
- AppChromeDownloadGlyph,
21
- AppChromeEditGlyph,
22
- AppChromeCropGlyph,
23
- AppChromeEventsGlyph,
24
- AppChromeFireGlyph,
25
- AppChromeRightNowGlyph,
26
- AppChromeFlashGlyph,
27
- AppChromeFlipCameraGlyph,
28
- AppChromeHeartFilledGlyph,
29
- AppChromeHeartGlyph,
30
- AppChromeHourglassGlyph,
31
- AppChromeHuntGlyph,
32
- AppChromeIncognitoGlyph,
33
- AppChromeInfoGlyph,
34
- AppChromeListGlyph,
35
- AppChromeLocationGlyph,
36
- AppChromeLockGlyph,
37
- AppChromeMicGlyph,
38
- AppChromeOverflowGlyph,
39
- AppChromePauseGlyph,
40
- AppChromePendingGlyph,
41
- AppChromePlayGlyph,
42
- AppChromePlusGlyph,
43
- AppChromePollGlyph,
44
- AppChromeProfileGlyph,
45
- AppChromePublishGlyph,
46
- AppChromeRadioUncheckedGlyph,
47
- AppChromeReplyGlyph,
48
- AppChromeRepostGlyph,
49
- AppChromeSearchGlyph,
50
- AppChromeSendGlyph,
51
- AppChromeShareGlyph,
52
- AppChromeGiftGlyph,
53
- AppChromeSettingsGlyph,
54
- AppChromeShieldGlyph,
55
- AppChromeSignalGlyph,
56
- AppChromeSignOutGlyph,
57
- AppChromeStarGlyph,
58
- AppChromeStoryEffectsGlyph,
59
- AppChromeStoryGlyph,
60
- AppChromeStoryMentionGlyph,
61
- AppChromeStoryMusicGlyph,
62
- AppChromeStoryStickerGlyph,
63
- AppChromeStoryTextGlyph,
64
- AppChromeTabChatGlyph,
65
- AppChromeTabDiscoverGlyph,
66
- AppChromeTabFlashGlyph,
67
- AppChromeTabRandomGlyph,
68
- AppChromeTabVibesGlyph,
69
- AppChromeThumbsUpFilledGlyph,
70
- AppChromeThumbsUpGlyph,
71
- AppChromeVisibilityGlyph,
72
- AppChromeVisibilityOffGlyph,
73
- AppChromeVolumeOffGlyph,
74
- AppChromeVolumeOnGlyph,
75
- AppChromeWarningGlyph,
76
- type AppChromeGlyphProps,
77
- } from './app-glyphs';
78
- import {
79
- ComposeCameraGlyph,
80
- ComposeFollowersGlyph,
81
- ComposeGalleryGlyph,
82
- ComposeGlobeGlyph,
83
- ComposeMentionGlyph,
84
- ComposeTravelGlyph,
85
- ComposeTrashGlyph,
86
- ComposeVideoGlyph,
87
- } from './compose-glyphs';
4
+ import type { AppIconGlyphProps } from './app-icon-glyph-props';
5
+ import { GENERATED_ICON_REGISTRY } from './generated';
88
6
 
89
7
  export type { AppIconName };
90
8
  export { isAppIconName };
91
9
 
92
- const ICON_REGISTRY: Record<AppIconName, ComponentType<AppChromeGlyphProps>> = {
93
- search: AppChromeSearchGlyph,
94
- hunt: AppChromeHuntGlyph,
95
- back: AppChromeBackGlyph,
96
- overflow: AppChromeOverflowGlyph,
97
- location: AppChromeLocationGlyph,
98
- mic: AppChromeMicGlyph,
99
- send: AppChromeSendGlyph,
100
- chat: AppChromeChatGlyph,
101
- close: AppChromeCloseGlyph,
102
- 'chevron-down': AppChromeChevronDownGlyph,
103
- 'chevron-right': AppChromeChevronRightGlyph,
104
- 'flip-camera': AppChromeFlipCameraGlyph,
105
- flash: AppChromeFlashGlyph,
106
- gallery: ComposeGalleryGlyph,
107
- video: ComposeVideoGlyph,
108
- camera: ComposeCameraGlyph,
109
- trash: ComposeTrashGlyph,
110
- globe: ComposeGlobeGlyph,
111
- travel: ComposeTravelGlyph,
112
- 'tab-discover': AppChromeTabDiscoverGlyph,
113
- 'tab-vibes': AppChromeTabVibesGlyph,
114
- 'tab-flash': AppChromeTabFlashGlyph,
115
- 'tab-chat': AppChromeTabChatGlyph,
116
- 'tab-random': AppChromeTabRandomGlyph,
117
- boost: AppChromeBoostGlyph,
118
- fire: AppChromeFireGlyph,
119
- 'right-now': AppChromeRightNowGlyph,
120
- settings: AppChromeSettingsGlyph,
121
- edit: AppChromeEditGlyph,
122
- crop: AppChromeCropGlyph,
123
- incognito: AppChromeIncognitoGlyph,
124
- events: AppChromeEventsGlyph,
125
- shield: AppChromeShieldGlyph,
126
- profile: AppChromeProfileGlyph,
127
- bookmark: AppChromeBookmarkGlyph,
128
- list: AppChromeListGlyph,
129
- communities: AppChromeCommunitiesGlyph,
130
- star: AppChromeStarGlyph,
131
- 'sign-out': AppChromeSignOutGlyph,
132
- publish: AppChromePublishGlyph,
133
- story: AppChromeStoryGlyph,
134
- 'story-music': AppChromeStoryMusicGlyph,
135
- 'story-sticker': AppChromeStoryStickerGlyph,
136
- 'story-text': AppChromeStoryTextGlyph,
137
- 'story-effects': AppChromeStoryEffectsGlyph,
138
- 'story-mention': AppChromeStoryMentionGlyph,
139
- repost: AppChromeRepostGlyph,
140
- heart: AppChromeHeartGlyph,
141
- 'heart-filled': AppChromeHeartFilledGlyph,
142
- 'thumbs-up': AppChromeThumbsUpGlyph,
143
- 'thumbs-up-filled': AppChromeThumbsUpFilledGlyph,
144
- play: AppChromePlayGlyph,
145
- pause: AppChromePauseGlyph,
146
- plus: AppChromePlusGlyph,
147
- followers: ComposeFollowersGlyph,
148
- mention: ComposeMentionGlyph,
149
- visibility: AppChromeVisibilityGlyph,
150
- 'visibility-off': AppChromeVisibilityOffGlyph,
151
- check: AppChromeCheckGlyph,
152
- 'arrow-right': AppChromeArrowRightGlyph,
153
- 'arrow-up-right': AppChromeArrowUpRightGlyph,
154
- 'arrow-down-right': AppChromeArrowDownRightGlyph,
155
- reply: AppChromeReplyGlyph,
156
- pending: AppChromePendingGlyph,
157
- download: AppChromeDownloadGlyph,
158
- 'radio-unchecked': AppChromeRadioUncheckedGlyph,
159
- copy: AppChromeCopyGlyph,
160
- attachment: AppChromeAttachmentGlyph,
161
- poll: AppChromePollGlyph,
162
- lock: AppChromeLockGlyph,
163
- 'volume-on': AppChromeVolumeOnGlyph,
164
- 'volume-off': AppChromeVolumeOffGlyph,
165
- info: AppChromeInfoGlyph,
166
- warning: AppChromeWarningGlyph,
167
- signal: AppChromeSignalGlyph,
168
- hourglass: AppChromeHourglassGlyph,
169
- bell: AppChromeBellGlyph,
170
- share: AppChromeShareGlyph,
171
- gift: AppChromeGiftGlyph,
172
- };
10
+ /** 1:1 registry — one generated SVG component per AppIconName (no aliases). */
11
+ const ICON_REGISTRY: Record<AppIconName, ComponentType<AppIconGlyphProps>> =
12
+ GENERATED_ICON_REGISTRY;
173
13
 
174
14
  export type AppIconProps = {
175
15
  name: AppIconName;
@@ -188,4 +28,4 @@ export function AppIcon({ name, color, size = APP_ICON_SIZE.composer }: AppIconP
188
28
  return <Glyph color={color} size={size} />;
189
29
  }
190
30
 
191
- export { APP_ICON_SIZE };
31
+ export { APP_ICON_SIZE, ICON_REGISTRY };
@@ -8,8 +8,8 @@ import {
8
8
  View,
9
9
  } from 'react-native';
10
10
  import { fonts, m3Colors, m3Shape, m3Type, spacing } from '../theme/proulr-theme';
11
+ import { AppIcon } from './app-icon';
11
12
  import { AppLoadingSpinner } from './AppLoadingSpinner';
12
- import { ComposeCameraGlyph } from './compose-glyphs';
13
13
  import { StoryTextGlyph } from './story-glyphs';
14
14
 
15
15
  export type ComposeRecentMediaItem = {
@@ -114,7 +114,7 @@ export function ComposeRecentMediaGrid({
114
114
  pressed && { opacity: 0.85 },
115
115
  ]}
116
116
  >
117
- <ComposeCameraGlyph color={m3Colors.onSurface} />
117
+ <AppIcon name="camera" color={m3Colors.onSurface} size={24} />
118
118
  </Pressable>
119
119
  );
120
120
  }
@@ -1,8 +1,8 @@
1
1
  import { Pressable, StyleSheet, Text, View } from 'react-native';
2
2
  import { useSafeAreaInsets } from 'react-native-safe-area-context';
3
3
  import { fonts, m3Colors, m3Shape, m3Type, spacing } from '../theme/proulr-theme';
4
+ import { AppIcon } from './app-icon';
4
5
  import { AppLoadingSpinner } from './AppLoadingSpinner';
5
- import { ComposeCloseGlyph } from './compose-glyphs';
6
6
 
7
7
  export function ComposeScreenHeader({
8
8
  title,
@@ -30,7 +30,7 @@ export function ComposeScreenHeader({
30
30
  accessibilityLabel="Fechar"
31
31
  style={styles.closeBtn}
32
32
  >
33
- <ComposeCloseGlyph />
33
+ <AppIcon name="close" color={m3Colors.onSurface} size={18} />
34
34
  </Pressable>
35
35
 
36
36
  {title ? (
@@ -1,7 +1,7 @@
1
1
  import type { ReactNode } from 'react';
2
2
  import { Pressable, StyleSheet, Text } from 'react-native';
3
3
  import { fonts, m3Colors, spacing } from '../theme/proulr-theme';
4
- import { ComposeGlobeGlyph } from './compose-glyphs';
4
+ import { AppIcon } from './app-icon';
5
5
 
6
6
  export function ComposeVisibilityRow({
7
7
  label,
@@ -26,7 +26,7 @@ export function ComposeVisibilityRow({
26
26
  pressed && onPress && { opacity: 0.82 },
27
27
  ]}
28
28
  >
29
- {icon ?? <ComposeGlobeGlyph />}
29
+ {icon ?? <AppIcon name="globe" color={m3Colors.primary} size={24} />}
30
30
  <Text style={styles.label}>{label}</Text>
31
31
  </Pressable>
32
32
  );
@@ -0,0 +1,16 @@
1
+ /* Generated by scripts/generate-app-icons.mjs — do not edit. */
2
+ import Svg, { Path } from 'react-native-svg';
3
+ import { m3Colors } from '../../theme/proulr-theme';
4
+ import type { AppIconGlyphProps } from '../app-icon-glyph-props';
5
+
6
+ export function ArrowDownRightIcon({
7
+ color = m3Colors.primary,
8
+ size = 24,
9
+ }: AppIconGlyphProps) {
10
+ return (
11
+ <Svg width={size} height={size} viewBox="0 0 24 24" fill="none">
12
+ <Path stroke={color} strokeLinecap="round" strokeLinejoin="round" fill="none" strokeWidth={1.5} d="M8 8 15.8 15.8M10 16h5.8v-5.8" opacity={0.3} />
13
+ <Path stroke={color} strokeLinecap="round" strokeLinejoin="round" fill="none" strokeWidth={2.1} d="M7.2 7.2 16.8 16.8M9.2 16.8h7.6v-7.6" />
14
+ </Svg>
15
+ );
16
+ }
@@ -0,0 +1,16 @@
1
+ /* Generated by scripts/generate-app-icons.mjs — do not edit. */
2
+ import Svg, { Path } from 'react-native-svg';
3
+ import { m3Colors } from '../../theme/proulr-theme';
4
+ import type { AppIconGlyphProps } from '../app-icon-glyph-props';
5
+
6
+ export function ArrowRightIcon({
7
+ color = m3Colors.primary,
8
+ size = 24,
9
+ }: AppIconGlyphProps) {
10
+ return (
11
+ <Svg width={size} height={size} viewBox="0 0 24 24" fill="none">
12
+ <Path stroke={color} strokeLinecap="round" strokeLinejoin="round" fill="none" strokeWidth={1.5} d="M5.4 12.8h12.6M14.6 7.4 19 12l-4.4 4.6" opacity={0.3} />
13
+ <Path stroke={color} strokeLinecap="round" strokeLinejoin="round" fill="none" strokeWidth={2.1} d="M4.6 12h14.2M14.2 6.4 19.8 12l-5.6 5.6" />
14
+ </Svg>
15
+ );
16
+ }
@@ -0,0 +1,16 @@
1
+ /* Generated by scripts/generate-app-icons.mjs — do not edit. */
2
+ import Svg, { Path } from 'react-native-svg';
3
+ import { m3Colors } from '../../theme/proulr-theme';
4
+ import type { AppIconGlyphProps } from '../app-icon-glyph-props';
5
+
6
+ export function ArrowUpRightIcon({
7
+ color = m3Colors.primary,
8
+ size = 24,
9
+ }: AppIconGlyphProps) {
10
+ return (
11
+ <Svg width={size} height={size} viewBox="0 0 24 24" fill="none">
12
+ <Path stroke={color} strokeLinecap="round" strokeLinejoin="round" fill="none" strokeWidth={1.5} d="M8 16 15.8 8.2M10 8h5.8v5.8" opacity={0.3} />
13
+ <Path stroke={color} strokeLinecap="round" strokeLinejoin="round" fill="none" strokeWidth={2.1} d="M7.2 16.8 16.8 7.2M9.2 7.2h7.6v7.6" />
14
+ </Svg>
15
+ );
16
+ }
@@ -0,0 +1,16 @@
1
+ /* Generated by scripts/generate-app-icons.mjs — do not edit. */
2
+ import Svg, { Path } from 'react-native-svg';
3
+ import { m3Colors } from '../../theme/proulr-theme';
4
+ import type { AppIconGlyphProps } from '../app-icon-glyph-props';
5
+
6
+ export function AttachmentIcon({
7
+ color = m3Colors.primary,
8
+ size = 24,
9
+ }: AppIconGlyphProps) {
10
+ return (
11
+ <Svg width={size} height={size} viewBox="0 0 24 24" fill="none">
12
+ <Path stroke={color} strokeLinecap="round" strokeLinejoin="round" fill="none" strokeWidth={1.5} d="M15.6 11.8 10.2 17.2a2.8 2.8 0 0 1-4-4l7-7" opacity={0.32} />
13
+ <Path stroke={color} strokeLinecap="round" strokeLinejoin="round" fill="none" strokeWidth={2} d="M16.8 11.2 11 17a3.6 3.6 0 0 1-5.1-5.1l7.2-7.2a2.6 2.6 0 0 1 3.7 3.7l-7.2 7.2a1.4 1.4 0 1 1-2-2l6.4-6.4" />
14
+ </Svg>
15
+ );
16
+ }
@@ -0,0 +1,16 @@
1
+ /* Generated by scripts/generate-app-icons.mjs — do not edit. */
2
+ import Svg, { Path } from 'react-native-svg';
3
+ import { m3Colors } from '../../theme/proulr-theme';
4
+ import type { AppIconGlyphProps } from '../app-icon-glyph-props';
5
+
6
+ export function BackIcon({
7
+ color = m3Colors.primary,
8
+ size = 24,
9
+ }: AppIconGlyphProps) {
10
+ return (
11
+ <Svg width={size} height={size} viewBox="0 0 24 24" fill="none">
12
+ <Path stroke={color} strokeLinecap="round" strokeLinejoin="round" fill="none" strokeWidth={1.7} d="M15.4 6.4L10 12l5.4 5.6" opacity={0.35} />
13
+ <Path stroke={color} strokeLinecap="round" strokeLinejoin="round" fill="none" strokeWidth={2.2} d="M14.8 5.2L8.2 12l6.6 6.8" />
14
+ </Svg>
15
+ );
16
+ }
@@ -0,0 +1,18 @@
1
+ /* Generated by scripts/generate-app-icons.mjs — do not edit. */
2
+ import Svg, { Path } from 'react-native-svg';
3
+ import { m3Colors } from '../../theme/proulr-theme';
4
+ import type { AppIconGlyphProps } from '../app-icon-glyph-props';
5
+
6
+ export function BellIcon({
7
+ color = m3Colors.primary,
8
+ size = 24,
9
+ }: AppIconGlyphProps) {
10
+ return (
11
+ <Svg width={size} height={size} viewBox="0 0 24 24" fill="none">
12
+ <Path fill={color} fillOpacity={0.3} d="M12 2.8a1.7 1.7 0 0 1 1.7 1.7v.5A6.8 6.8 0 0 1 19 11.6v4.8l1.5 1.7v1.4H3.5v-1.4l1.5-1.7v-4.8A6.8 6.8 0 0 1 10.3 5v-.5A1.7 1.7 0 0 1 12 2.8z" />
13
+ <Path stroke={color} strokeLinecap="round" strokeLinejoin="round" fill="none" strokeWidth={1.8} d="M12 3.8a1.2 1.2 0 0 1 1.2 1.2v.55A6 6 0 0 1 17.8 11.4v4.2l1.2 1.4M12 3.8a1.2 1.2 0 0 0-1.2 1.2v.55A6 6 0 0 0 6.2 11.4v4.2L5 16.999" />
14
+ <Path stroke={color} strokeLinecap="round" strokeLinejoin="round" fill="none" strokeWidth={1.8} d="M4.4 18.2h15.2" />
15
+ <Path fill={color} d="M10.2 19.2a1.8 1.8 0 0 0 3.6 0H10.2z" />
16
+ </Svg>
17
+ );
18
+ }
@@ -0,0 +1,16 @@
1
+ /* Generated by scripts/generate-app-icons.mjs — do not edit. */
2
+ import Svg, { Path } from 'react-native-svg';
3
+ import { m3Colors } from '../../theme/proulr-theme';
4
+ import type { AppIconGlyphProps } from '../app-icon-glyph-props';
5
+
6
+ export function BookmarkIcon({
7
+ color = m3Colors.primary,
8
+ size = 24,
9
+ }: AppIconGlyphProps) {
10
+ return (
11
+ <Svg width={size} height={size} viewBox="0 0 24 24" fill="none">
12
+ <Path fill={color} fillOpacity={0.3} d="M7 3.2h10A1.8 1.8 0 0 1 18.8 5v15.4l-6.8-3.8-6.8 3.8V5A1.8 1.8 0 0 1 7 3.2z" />
13
+ <Path stroke={color} strokeLinecap="round" strokeLinejoin="round" fill="none" strokeWidth={1.8} d="M7.4 4h9.2A1 1 0 0 1 17.6 5v13.8l-5.6-3.15L6.4 18.8V5A1 1 0 0 1 7.4 4z" />
14
+ </Svg>
15
+ );
16
+ }
@@ -0,0 +1,19 @@
1
+ /* Generated by scripts/generate-app-icons.mjs — do not edit. */
2
+ import Svg, { Path } from 'react-native-svg';
3
+ import { m3Colors } from '../../theme/proulr-theme';
4
+ import type { AppIconGlyphProps } from '../app-icon-glyph-props';
5
+
6
+ export function BoostIcon({
7
+ color = m3Colors.primary,
8
+ size = 24,
9
+ }: AppIconGlyphProps) {
10
+ return (
11
+ <Svg width={size} height={size} viewBox="0 0 24 24" fill="none">
12
+ <Path fill={color} fillOpacity={0.3} d="M12 2.8 18.2 12.4h-3.6v7.6H9.4v-7.6H5.8L12 2.8z" />
13
+ <Path fill={color} d="M12 4.2 16.6 11.6h-2.8v6.6H10.2v-6.6H7.4L12 4.2z" />
14
+ <Path stroke={color} strokeLinecap="round" strokeLinejoin="round" fill="none" strokeWidth={1.8} d="M7.6 3.6V2.2M12 2.8V1.4M16.4 3.6V2.2" />
15
+ <Path stroke={color} strokeLinecap="round" strokeLinejoin="round" fill="none" strokeWidth={1.7} d="M5.2 16.8A8.6 8.6 0 0 0 12 19.6a8.6 8.6 0 0 0 6.8-2.8" />
16
+ <Path stroke={color} strokeLinecap="round" strokeLinejoin="round" fill="none" strokeWidth={1.5} d="M3.8 18.6A11 11 0 0 0 12 21.4a11 11 0 0 0 8.2-2.8" opacity={0.45} />
17
+ </Svg>
18
+ );
19
+ }
@@ -0,0 +1,18 @@
1
+ /* Generated by scripts/generate-app-icons.mjs — do not edit. */
2
+ import Svg, { Circle, Path } from 'react-native-svg';
3
+ import { m3Colors } from '../../theme/proulr-theme';
4
+ import type { AppIconGlyphProps } from '../app-icon-glyph-props';
5
+
6
+ export function CameraIcon({
7
+ color = m3Colors.primary,
8
+ size = 24,
9
+ }: AppIconGlyphProps) {
10
+ return (
11
+ <Svg width={size} height={size} viewBox="0 0 24 24" fill="none">
12
+ <Path fill={color} fillOpacity={0.3} d="M8.2 5.2h2.1l1.1-1.4h1.4l1.1 1.4h2.1A2.4 2.4 0 0 1 18.4 7.6v10a2.4 2.4 0 0 1-2.4 2.4H8.2A2.4 2.4 0 0 1 5.8 17.6v-10A2.4 2.4 0 0 1 8.2 5.2z" />
13
+ <Path stroke={color} strokeLinecap="round" strokeLinejoin="round" fill="none" strokeWidth={1.8} d="M8.2 5.8h2l1-1.2h1.6l1 1.2h2A1.8 1.8 0 0 1 17.6 7.6v10a1.8 1.8 0 0 1-1.8 1.8H8.2A1.8 1.8 0 0 1 6.4 17.6v-10A1.8 1.8 0 0 1 8.2 5.8z" />
14
+ <Circle cx={12} cy={12.6} r={3.4} stroke={color} strokeLinecap="round" strokeLinejoin="round" fill="none" strokeWidth={1.8} />
15
+ <Circle cx={12} cy={12.6} r={1.65} fill={color} />
16
+ </Svg>
17
+ );
18
+ }
@@ -0,0 +1,19 @@
1
+ /* Generated by scripts/generate-app-icons.mjs — do not edit. */
2
+ import Svg, { Circle, Path } from 'react-native-svg';
3
+ import { m3Colors } from '../../theme/proulr-theme';
4
+ import type { AppIconGlyphProps } from '../app-icon-glyph-props';
5
+
6
+ export function ChatIcon({
7
+ color = m3Colors.primary,
8
+ size = 24,
9
+ }: AppIconGlyphProps) {
10
+ return (
11
+ <Svg width={size} height={size} viewBox="0 0 24 24" fill="none">
12
+ <Path fill={color} fillOpacity={0.32} d="M5.2 3.8h13.6A2.4 2.4 0 0 1 21.2 6.2v8.4a2.4 2.4 0 0 1-2.4 2.4H10.1L5.4 20.8a.7.7 0 0 1-1.15-.55V16.8H5.2A2.4 2.4 0 0 1 2.8 14.4V6.2A2.4 2.4 0 0 1 5.2 3.8z" />
13
+ <Path stroke={color} strokeLinecap="round" strokeLinejoin="round" fill="none" strokeWidth={1.8} d="M5.2 4.6h13.6A1.6 1.6 0 0 1 20.4 6.2v8.4a1.6 1.6 0 0 1-1.6 1.6H9.8L5.2 19.8V15H5.2A1.6 1.6 0 0 1 3.6 13.4V6.2A1.6 1.6 0 0 1 5.2 4.6z" />
14
+ <Circle cx={8.6} cy={10.2} r={1.05} fill={color} />
15
+ <Circle cx={12} cy={10.2} r={1.05} fill={color} />
16
+ <Circle cx={15.4} cy={10.2} r={1.05} fill={color} />
17
+ </Svg>
18
+ );
19
+ }
@@ -0,0 +1,16 @@
1
+ /* Generated by scripts/generate-app-icons.mjs — do not edit. */
2
+ import Svg, { Path } from 'react-native-svg';
3
+ import { m3Colors } from '../../theme/proulr-theme';
4
+ import type { AppIconGlyphProps } from '../app-icon-glyph-props';
5
+
6
+ export function CheckIcon({
7
+ color = m3Colors.primary,
8
+ size = 24,
9
+ }: AppIconGlyphProps) {
10
+ return (
11
+ <Svg width={size} height={size} viewBox="0 0 24 24" fill="none">
12
+ <Path stroke={color} strokeLinecap="round" strokeLinejoin="round" fill="none" strokeWidth={1.6} d="M5.8 12.6 10.3 16.8 18.4 7" opacity={0.3} />
13
+ <Path stroke={color} strokeLinecap="round" strokeLinejoin="round" fill="none" strokeWidth={2.3} d="M5.2 12.2 10.1 17l8.7-10.4" />
14
+ </Svg>
15
+ );
16
+ }
@@ -0,0 +1,16 @@
1
+ /* Generated by scripts/generate-app-icons.mjs — do not edit. */
2
+ import Svg, { Path } from 'react-native-svg';
3
+ import { m3Colors } from '../../theme/proulr-theme';
4
+ import type { AppIconGlyphProps } from '../app-icon-glyph-props';
5
+
6
+ export function ChevronDownIcon({
7
+ color = m3Colors.primary,
8
+ size = 24,
9
+ }: AppIconGlyphProps) {
10
+ return (
11
+ <Svg width={size} height={size} viewBox="0 0 24 24" fill="none">
12
+ <Path stroke={color} strokeLinecap="round" strokeLinejoin="round" fill="none" strokeWidth={1.6} d="M6.4 9.8L12 15.2l5.6-5.4" opacity={0.32} />
13
+ <Path stroke={color} strokeLinecap="round" strokeLinejoin="round" fill="none" strokeWidth={2.2} d="M5.4 9.2L12 15.8l6.6-6.6" />
14
+ </Svg>
15
+ );
16
+ }
@@ -0,0 +1,16 @@
1
+ /* Generated by scripts/generate-app-icons.mjs — do not edit. */
2
+ import Svg, { Path } from 'react-native-svg';
3
+ import { m3Colors } from '../../theme/proulr-theme';
4
+ import type { AppIconGlyphProps } from '../app-icon-glyph-props';
5
+
6
+ export function ChevronRightIcon({
7
+ color = m3Colors.primary,
8
+ size = 24,
9
+ }: AppIconGlyphProps) {
10
+ return (
11
+ <Svg width={size} height={size} viewBox="0 0 24 24" fill="none">
12
+ <Path stroke={color} strokeLinecap="round" strokeLinejoin="round" fill="none" strokeWidth={1.6} d="M9.8 6.4L15.2 12l-5.4 5.6" opacity={0.32} />
13
+ <Path stroke={color} strokeLinecap="round" strokeLinejoin="round" fill="none" strokeWidth={2.2} d="M9.2 5.4L15.8 12l-6.6 6.6" />
14
+ </Svg>
15
+ );
16
+ }
@@ -0,0 +1,16 @@
1
+ /* Generated by scripts/generate-app-icons.mjs — do not edit. */
2
+ import Svg, { Path } from 'react-native-svg';
3
+ import { m3Colors } from '../../theme/proulr-theme';
4
+ import type { AppIconGlyphProps } from '../app-icon-glyph-props';
5
+
6
+ export function CloseIcon({
7
+ color = m3Colors.primary,
8
+ size = 24,
9
+ }: AppIconGlyphProps) {
10
+ return (
11
+ <Svg width={size} height={size} viewBox="0 0 24 24" fill="none">
12
+ <Path stroke={color} strokeLinecap="round" strokeLinejoin="round" fill="none" strokeWidth={1.6} d="M7 7l10 10M17 7L7 17" opacity={0.32} />
13
+ <Path stroke={color} strokeLinecap="round" strokeLinejoin="round" fill="none" strokeWidth={2.2} d="M6.2 6.2l11.6 11.6M17.8 6.2L6.2 17.8" />
14
+ </Svg>
15
+ );
16
+ }
@@ -0,0 +1,18 @@
1
+ /* Generated by scripts/generate-app-icons.mjs — do not edit. */
2
+ import Svg, { Circle, Path } from 'react-native-svg';
3
+ import { m3Colors } from '../../theme/proulr-theme';
4
+ import type { AppIconGlyphProps } from '../app-icon-glyph-props';
5
+
6
+ export function CommunitiesIcon({
7
+ color = m3Colors.primary,
8
+ size = 24,
9
+ }: AppIconGlyphProps) {
10
+ return (
11
+ <Svg width={size} height={size} viewBox="0 0 24 24" fill="none">
12
+ <Circle cx={15.4} cy={8} r={3.2} fill={color} fillOpacity={0.35} />
13
+ <Path fill={color} fillOpacity={0.35} d="M12.8 14.4c.6-.2 1.3-.3 2.1-.3 3.2 0 5.6 1.8 5.6 4.4V20h-6.2v-1.9c0-1.4-.5-2.6-1.5-3.7z" />
14
+ <Circle cx={8.6} cy={8.2} r={3.3} fill={color} />
15
+ <Path fill={color} d="M2.8 18.8c0-2.7 2.6-4.6 5.8-4.6s5.8 1.9 5.8 4.6V20H2.8v-1.2z" />
16
+ </Svg>
17
+ );
18
+ }
@@ -0,0 +1,19 @@
1
+ /* Generated by scripts/generate-app-icons.mjs — do not edit. */
2
+ import Svg, { Path, Rect } from 'react-native-svg';
3
+ import { m3Colors } from '../../theme/proulr-theme';
4
+ import type { AppIconGlyphProps } from '../app-icon-glyph-props';
5
+
6
+ export function CopyIcon({
7
+ color = m3Colors.primary,
8
+ size = 24,
9
+ }: AppIconGlyphProps) {
10
+ return (
11
+ <Svg width={size} height={size} viewBox="0 0 24 24" fill="none">
12
+ <Rect x={8.4} y={6.4} width={10.8} height={12.8} rx={1.9} fill={color} fillOpacity={0.3} />
13
+ <Rect x={8.2} y={6.2} width={11.2} height={13.2} rx={2} stroke={color} strokeLinecap="round" strokeLinejoin="round" fill="none" strokeWidth={1.7} />
14
+ <Rect x={4.6} y={3.8} width={11.2} height={13.2} rx={2} fill={color} fillOpacity={0.2} />
15
+ <Rect x={4.6} y={3.8} width={11.2} height={13.2} rx={2} stroke={color} strokeLinecap="round" strokeLinejoin="round" fill="none" strokeWidth={1.8} />
16
+ <Path stroke={color} strokeLinecap="round" strokeLinejoin="round" fill="none" strokeWidth={1.5} d="M7.2 8.4h5.6M7.2 11h5.6" />
17
+ </Svg>
18
+ );
19
+ }
@@ -0,0 +1,18 @@
1
+ /* Generated by scripts/generate-app-icons.mjs — do not edit. */
2
+ import Svg, { Path, Rect } from 'react-native-svg';
3
+ import { m3Colors } from '../../theme/proulr-theme';
4
+ import type { AppIconGlyphProps } from '../app-icon-glyph-props';
5
+
6
+ export function CropIcon({
7
+ color = m3Colors.primary,
8
+ size = 24,
9
+ }: AppIconGlyphProps) {
10
+ return (
11
+ <Svg width={size} height={size} viewBox="0 0 24 24" fill="none">
12
+ <Path stroke={color} strokeLinecap="round" strokeLinejoin="round" fill="none" strokeWidth={2} d="M7.2 3.4v13.4H20.6" />
13
+ <Path stroke={color} strokeLinecap="round" strokeLinejoin="round" fill="none" strokeWidth={2} d="M16.8 20.6V7.2H3.4" />
14
+ <Rect x={6} y={6} width={2.4} height={2.4} rx={0.5} fill={color} fillOpacity={0.4} />
15
+ <Rect x={15.6} y={15.6} width={2.4} height={2.4} rx={0.5} fill={color} fillOpacity={0.4} />
16
+ </Svg>
17
+ );
18
+ }
@@ -0,0 +1,17 @@
1
+ /* Generated by scripts/generate-app-icons.mjs — do not edit. */
2
+ import Svg, { Path } from 'react-native-svg';
3
+ import { m3Colors } from '../../theme/proulr-theme';
4
+ import type { AppIconGlyphProps } from '../app-icon-glyph-props';
5
+
6
+ export function DownloadIcon({
7
+ color = m3Colors.primary,
8
+ size = 24,
9
+ }: AppIconGlyphProps) {
10
+ return (
11
+ <Svg width={size} height={size} viewBox="0 0 24 24" fill="none">
12
+ <Path fill={color} fillOpacity={0.28} d="M6.8 17.4h10.4v2.6H6.8v-2.6z" />
13
+ <Path stroke={color} strokeLinecap="round" strokeLinejoin="round" fill="none" strokeWidth={2} d="M12 4.6v10.8M8.2 12.2 12 16l3.8-3.8" />
14
+ <Path stroke={color} strokeLinecap="round" strokeLinejoin="round" fill="none" strokeWidth={1.9} d="M5.2 16.4v2a2 2 0 0 0 2 2h9.6a2 2 0 0 0 2-2v-2" />
15
+ </Svg>
16
+ );
17
+ }
@@ -0,0 +1,18 @@
1
+ /* Generated by scripts/generate-app-icons.mjs — do not edit. */
2
+ import Svg, { Path } from 'react-native-svg';
3
+ import { m3Colors } from '../../theme/proulr-theme';
4
+ import type { AppIconGlyphProps } from '../app-icon-glyph-props';
5
+
6
+ export function EditIcon({
7
+ color = m3Colors.primary,
8
+ size = 24,
9
+ }: AppIconGlyphProps) {
10
+ return (
11
+ <Svg width={size} height={size} viewBox="0 0 24 24" fill="none">
12
+ <Path fill={color} fillOpacity={0.3} d="M3.8 16.6V20.4h3.8l9.4-9.4-3.8-3.8L3.8 16.6z" />
13
+ <Path fill={color} d="M4.4 17.2V19.6h2.4l8.5-8.5-2.4-2.4L4.4 17.2z" />
14
+ <Path fill={color} d="M17.4 8.1 19.5 6a1.2 1.2 0 0 0 0-1.7l-1.15-1.15a1.2 1.2 0 0 0-1.7 0L14.55 5.2l2.85 2.9z" />
15
+ <Path stroke={color} strokeLinecap="round" strokeLinejoin="round" fill="none" strokeWidth={1.5} d="M13.3 6.5l2.8 2.8" />
16
+ </Svg>
17
+ );
18
+ }
@@ -0,0 +1,23 @@
1
+ /* Generated by scripts/generate-app-icons.mjs — do not edit. */
2
+ import Svg, { Circle, Path, Rect } from 'react-native-svg';
3
+ import { m3Colors } from '../../theme/proulr-theme';
4
+ import type { AppIconGlyphProps } from '../app-icon-glyph-props';
5
+
6
+ export function EventsIcon({
7
+ color = m3Colors.primary,
8
+ size = 24,
9
+ }: AppIconGlyphProps) {
10
+ return (
11
+ <Svg width={size} height={size} viewBox="0 0 24 24" fill="none">
12
+ <Rect x={3.6} y={5.4} width={16.8} height={14.8} rx={2.3} fill={color} fillOpacity={0.28} />
13
+ <Rect x={3.4} y={5.2} width={17.2} height={15.2} rx={2.4} stroke={color} strokeLinecap="round" strokeLinejoin="round" fill="none" strokeWidth={1.8} />
14
+ <Path fill={color} d="M3.4 5.2h17.2v4H3.4V5.2z" />
15
+ <Path stroke={color} strokeLinecap="round" strokeLinejoin="round" fill="none" strokeWidth={1.9} d="M8 3.4v3.2M16 3.4v3.2" />
16
+ <Circle cx={8.6} cy={14.2} r={1.1} fill={color} />
17
+ <Circle cx={12} cy={14.2} r={1.1} fill={color} />
18
+ <Circle cx={15.4} cy={14.2} r={1.1} fill={color} />
19
+ <Circle cx={8.6} cy={17.4} r={1.05} fill={color} fillOpacity={0.55} />
20
+ <Circle cx={12} cy={17.4} r={1.05} fill={color} fillOpacity={0.55} />
21
+ </Svg>
22
+ );
23
+ }
@@ -0,0 +1,16 @@
1
+ /* Generated by scripts/generate-app-icons.mjs — do not edit. */
2
+ import Svg, { Path } from 'react-native-svg';
3
+ import { m3Colors } from '../../theme/proulr-theme';
4
+ import type { AppIconGlyphProps } from '../app-icon-glyph-props';
5
+
6
+ export function FireIcon({
7
+ color = m3Colors.primary,
8
+ size = 24,
9
+ }: AppIconGlyphProps) {
10
+ return (
11
+ <Svg width={size} height={size} viewBox="0 0 24 24" fill="none">
12
+ <Path fill={color} fillOpacity={0.34} d="M12 21.8c5 0 9-3.8 9-8.4 0-4.4-3.4-9-6-11.4-.4 2.2-1.7 4-3.4 5.3C10.8 4.8 10.2 1.8 12 .6c-1.9 1.5-2.5 4.8-1.8 8.2-1.7-1.3-3-3.2-3.4-5.4C4.4 5.8 1.2 10.4 1.2 14.4c0 4.6 4 8.4 10.8 8.4z" />
13
+ <Path fill={color} fillRule="evenodd" d="M12 20.6c4.2 0 7.6-3.2 7.6-7.2 0-3.6-2.8-7.6-5-9.8-.3 1.8-1.4 3.4-2.8 4.5.7-2.8.2-5.6 1.6-6.9-1.5 1.3-2 4-1.4 7-1.4-1-2.5-2.6-2.8-4.4C7.2 5.8 4.4 9.6 4.4 13.4c0 4 3.4 7.2 7.6 7.2zM12 17.6c1.7 0 3-1.2 3-2.9 0-1.2-1.2-2.9-3-5-1.8 2.1-3 3.8-3 5 0 1.7 1.3 2.9 3 2.9z" />
14
+ </Svg>
15
+ );
16
+ }