@proulr/sdui-components 0.1.66 → 0.1.67

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
@@ -0,0 +1,14 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!--
3
+ Right Now — live radar/sonar: soft core bloom, layered arcs, cross ticks.
4
+ -->
5
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
6
+ <circle cx="12" cy="12" r="3.4" fill="currentColor" fill-opacity="0.28" />
7
+ <circle cx="12" cy="12" r="2.2" fill="currentColor" />
8
+ <path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" stroke-width="1.9" d="M12 6.2a5.8 5.8 0 0 1 5.8 5.8" />
9
+ <path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" stroke-width="1.9" d="M12 4a8 8 0 0 1 8 8" />
10
+ <path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" stroke-width="1.8" d="M12 2.2a9.8 9.8 0 0 1 9.8 9.8" opacity="0.55" />
11
+ <path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" stroke-width="1.7" d="M6.2 12A5.8 5.8 0 0 1 12 6.2" opacity="0.4" />
12
+ <path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" stroke-width="1.6" d="M12 2.4v2.2M12 19.4v2.2M2.4 12h2.2M19.4 12h2.2" />
13
+ <circle cx="17.2" cy="6.8" r="0.9" fill="currentColor" />
14
+ </svg>
@@ -0,0 +1,10 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!--
3
+ Search — crafted magnifier with soft lens plate (night hunt focus).
4
+ -->
5
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
6
+ <circle cx="10.6" cy="10.6" r="5.6" fill="currentColor" fill-opacity="0.28" />
7
+ <circle cx="10.6" cy="10.6" r="6.4" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" stroke-width="2" />
8
+ <path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" stroke-width="2.2" d="M15.4 15.4l5 5" />
9
+ <circle cx="8.8" cy="8.8" r="1.2" fill="currentColor" fill-opacity="0.4" />
10
+ </svg>
@@ -0,0 +1,9 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!--
3
+ Send — paper dart with soft fold plate (dispatch into the night).
4
+ -->
5
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
6
+ <path fill="currentColor" fill-opacity="0.3" d="M3.4 11.1 19.8 3.4a.8.8 0 0 1 1.05 1L14.5 20.2a.8.8 0 0 1-1.45.08l-2.4-5.6-5.6-2.4a.8.8 0 0 1-.61-1.18z" />
7
+ <path fill="currentColor" d="M4.2 11.2 19.6 4.2 13.2 18.8l-2.2-5.2-5.2-2.2a.55.55 0 0 1-.4-.8z" />
8
+ <path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" stroke-width="1.6" d="M10.8 13.6l3.4-3.4" />
9
+ </svg>
@@ -0,0 +1,8 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!--
3
+ Settings — soft gear aura + punched hub (crafted, not sterile).
4
+ -->
5
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
6
+ <circle cx="12" cy="12" r="9.2" fill="currentColor" fill-opacity="0.18" />
7
+ <path fill="currentColor" fill-rule="evenodd" d="M19.35 13.05a7.4 7.4 0 0 0 .1-1.05 7.4 7.4 0 0 0-.1-1.05l1.95-1.55a.55.55 0 0 0 .12-.7l-1.85-3.2a.55.55 0 0 0-.66-.24l-2.3.95a7.2 7.2 0 0 0-1.65-.95l-.38-2.45A.55.55 0 0 0 13.9 2.4h-3.8a.55.55 0 0 0-.54.45l-.38 2.45c-.58.24-1.14.55-1.65.95l-2.3-.95a.55.55 0 0 0-.66.24L2.72 8.5a.55.55 0 0 0 .12.7l1.95 1.55a7.4 7.4 0 0 0-.1 1.05c0 .36.03.71.1 1.05l-1.95 1.55a.55.55 0 0 0-.12.7l1.85 3.2a.55.55 0 0 0 .66.24l2.3-.95c.5.4 1.07.72 1.65.95l.38 2.45a.55.55 0 0 0 .54.45h3.8a.55.55 0 0 0 .54-.45l.38-2.45c.58-.23 1.14-.55 1.65-.95l2.3.95a.55.55 0 0 0 .66-.24l1.85-3.2a.55.55 0 0 0-.12-.7l-1.95-1.55zM12 15.2a3.2 3.2 0 1 0 0-6.4 3.2 3.2 0 0 0 0 6.4z" />
8
+ </svg>
@@ -0,0 +1,13 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!--
3
+ Share — soft node blooms with connectors.
4
+ -->
5
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
6
+ <circle cx="18.2" cy="5.4" r="3" fill="currentColor" fill-opacity="0.3" />
7
+ <circle cx="5.8" cy="12" r="3" fill="currentColor" fill-opacity="0.3" />
8
+ <circle cx="18.2" cy="18.6" r="3" fill="currentColor" fill-opacity="0.3" />
9
+ <circle cx="18.2" cy="5.4" r="2.2" fill="currentColor" />
10
+ <circle cx="5.8" cy="12" r="2.2" fill="currentColor" />
11
+ <circle cx="18.2" cy="18.6" r="2.2" fill="currentColor" />
12
+ <path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" stroke-width="1.9" d="M8.1 10.7 15.8 6.7M8.1 13.3l7.7 4" />
13
+ </svg>
@@ -0,0 +1,9 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!--
3
+ Shield — soft crest plate with outline and cross mark.
4
+ -->
5
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
6
+ <path fill="currentColor" fill-opacity="0.3" d="M12 2.4 19.6 5.4v6.4c0 5-3.4 8.8-7.6 10-4.2-1.2-7.6-5-7.6-10V5.4L12 2.4z" />
7
+ <path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" stroke-width="1.8" d="M12 3.4 18.4 5.8v5.8c0 4.4-2.9 7.8-6.4 8.9-3.5-1.1-6.4-4.5-6.4-8.9V5.8L12 3.4z" />
8
+ <path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" stroke-width="1.7" d="M12 8.4v6.2M9.6 11.2h4.8" />
9
+ </svg>
@@ -0,0 +1,9 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!--
3
+ Sign out — soft door plate + outgoing arrow.
4
+ -->
5
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
6
+ <path fill="currentColor" fill-opacity="0.28" d="M4.6 5.4h6.4v13.2H4.6V5.4z" />
7
+ <path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" stroke-width="1.9" d="M11.2 4.2H6.4A2 2 0 0 0 4.4 6.2v11.6a2 2 0 0 0 2 2h4.8" />
8
+ <path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" stroke-width="2" d="M10.4 12h9.2M16.4 8.2 20.2 12l-3.8 3.8" />
9
+ </svg>
@@ -0,0 +1,8 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!--
3
+ Signal — soft bar auras + solid rising bars.
4
+ -->
5
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
6
+ <path fill="currentColor" fill-opacity="0.28" d="M3.6 14.6h3.8V20.4H3.6v-5.8zm4.6-4.2h3.8V20.4H8.2v-10zm4.6-4.2h3.8V20.4h-3.8V6.2zm4.6-3.6h3.8V20.4h-3.8V2.6z" />
7
+ <path fill="currentColor" d="M4.4 15.4h2.4V20H4.4v-4.6zm4.6-4h2.4V20H9v-8.6zm4.6-4h2.4V20h-2.4V7.4zm4.6-3.4h2.4V20h-2.4V4z" />
8
+ </svg>
@@ -0,0 +1,8 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!--
3
+ Star — soft outer star plate + solid favorite core.
4
+ -->
5
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
6
+ <path fill="currentColor" fill-opacity="0.3" d="M12 2.2 15.1 9.1l7.2.55-5.5 4.75 1.7 7L12 18 5.5 21.4l1.7-7L1.7 9.65l7.2-.55L12 2.2z" />
7
+ <path fill="currentColor" d="M12 3.6 14.55 9.4l5.9.5-4.5 3.9 1.4 5.7L12 16.5 6.65 19.5l1.4-5.7-4.5-3.9 5.9-.5L12 3.6z" />
8
+ </svg>
@@ -0,0 +1,12 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!--
3
+ Story effects — soft spark plate + orbit pips (FX).
4
+ -->
5
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
6
+ <path fill="currentColor" fill-opacity="0.3" d="M12 2.4 13.3 9.2 19.8 10.4 13.3 11.6 12 18.4 10.7 11.6 4.2 10.4 10.7 9.2 12 2.4z" />
7
+ <path fill="currentColor" d="M12 4.2 12.9 9.4 18 10.2 12.9 11 12 16.2 11.1 11 6 10.2 11.1 9.4 12 4.2z" />
8
+ <circle cx="18.6" cy="5.2" r="1.2" fill="currentColor" />
9
+ <circle cx="5.4" cy="6" r="1" fill="currentColor" fill-opacity="0.55" />
10
+ <circle cx="18.2" cy="17.8" r="1.05" fill="currentColor" fill-opacity="0.55" />
11
+ <circle cx="6.2" cy="17.2" r="0.9" fill="currentColor" fill-opacity="0.45" />
12
+ </svg>
@@ -0,0 +1,10 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!--
3
+ Story mention — soft ring aura around @ glyph.
4
+ -->
5
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
6
+ <circle cx="12" cy="12" r="7.4" fill="currentColor" fill-opacity="0.22" />
7
+ <circle cx="12" cy="12" r="8.2" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" stroke-width="1.9" />
8
+ <path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" stroke-width="1.8" d="M15.6 12a3.6 3.6 0 1 1-.4-1.7" />
9
+ <path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" stroke-width="1.8" d="M15.2 10.3v3.4a2 2 0 0 0 2 2h.4" />
10
+ </svg>
@@ -0,0 +1,10 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!--
3
+ Story music — soft note stem with solid discs.
4
+ -->
5
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
6
+ <path fill="currentColor" fill-opacity="0.28" d="M11.2 5.2 18.6 3.6v11.2l-7.4 1.6V5.2z" />
7
+ <circle cx="9.2" cy="19.2" r="2.5" fill="currentColor" />
8
+ <circle cx="16.4" cy="16" r="2.5" fill="currentColor" />
9
+ <path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" stroke-width="2" d="M11.7 18V5.2l6.9-1.5v11.6" />
10
+ </svg>
@@ -0,0 +1,11 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!--
3
+ Story sticker — soft badge plate with smile accents.
4
+ -->
5
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
6
+ <path fill="currentColor" fill-opacity="0.3" d="M12 2.4 14.4 8.2l6.1.5-4.65 4 1.45 6L12 15.8 6.7 18.7l1.45-6-4.65-4 6.1-.5L12 2.4z" />
7
+ <path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" stroke-width="1.8" d="M12 3.6 13.9 8.5l4.9.4-3.75 3.25 1.15 4.8L12 14.7 7.8 17l1.15-4.8L5.2 8.9l4.9-.4L12 3.6z" />
8
+ <circle cx="10.3" cy="10.6" r="0.9" fill="currentColor" />
9
+ <circle cx="13.7" cy="10.6" r="0.9" fill="currentColor" />
10
+ <path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" stroke-width="1.5" d="M10.1 13.2c.55.65 1.3 1 1.9 1s1.35-.35 1.9-1" />
11
+ </svg>
@@ -0,0 +1,9 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!--
3
+ Story text — soft T bar plate with stem.
4
+ -->
5
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
6
+ <path fill="currentColor" fill-opacity="0.3" d="M5.2 4.6h13.6v3H5.2v-3z" />
7
+ <path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" stroke-width="2.2" d="M5.4 6.2h13.2M12 6.2v12.4" />
8
+ <path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" stroke-width="1.8" d="M8.8 18.6h6.4" />
9
+ </svg>
@@ -0,0 +1,10 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!--
3
+ Story — soft rounded frame with media pip (ephemeral).
4
+ -->
5
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
6
+ <rect x="4.4" y="3.6" width="15.2" height="16.8" rx="3.2" fill="currentColor" fill-opacity="0.28" />
7
+ <rect x="4.2" y="3.4" width="15.6" height="17.2" rx="3.4" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" stroke-width="1.9" />
8
+ <circle cx="12" cy="11" r="2.7" fill="currentColor" />
9
+ <path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" stroke-width="1.6" d="M8.4 17.4h7.2" />
10
+ </svg>
@@ -0,0 +1,11 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!--
3
+ Tab Chat — speech sibling with soft plate and dots.
4
+ -->
5
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
6
+ <path fill="currentColor" fill-opacity="0.32" d="M5 4h14a2.2 2.2 0 0 1 2.2 2.2v8.2A2.2 2.2 0 0 1 19 16.6h-8.2L6.2 20.2V16.6H5A2.2 2.2 0 0 1 2.8 14.4V6.2A2.2 2.2 0 0 1 5 4z" />
7
+ <path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" stroke-width="1.8" d="M5 4.8h14a1.4 1.4 0 0 1 1.4 1.4v8.2a1.4 1.4 0 0 1-1.4 1.4H10.6L6.4 19V15.8H5A1.4 1.4 0 0 1 3.6 14.4V6.2A1.4 1.4 0 0 1 5 4.8z" />
8
+ <circle cx="8.8" cy="10" r="0.95" fill="currentColor" />
9
+ <circle cx="12" cy="10" r="0.95" fill="currentColor" />
10
+ <circle cx="15.2" cy="10" r="0.95" fill="currentColor" />
11
+ </svg>
@@ -0,0 +1,11 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!--
3
+ Tab Discover — hunt crosshair sibling with soft bloom.
4
+ -->
5
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
6
+ <circle cx="12" cy="12" r="7" fill="currentColor" fill-opacity="0.22" />
7
+ <circle cx="12" cy="12" r="8.2" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" stroke-width="2" />
8
+ <circle cx="12" cy="12" r="4.6" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" stroke-width="1.5" />
9
+ <circle cx="12" cy="12" r="2.15" fill="currentColor" />
10
+ <path fill="currentColor" d="M11.2 2h1.6v2.8h-1.6V2zm0 17.2h1.6V22h-1.6v-2.8zM2 11.2h2.8v1.6H2v-1.6zm17.2 0H22v1.6h-2.8v-1.6z" />
11
+ </svg>
@@ -0,0 +1,8 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!--
3
+ Tab Flash — lightning sibling with soft outer plate.
4
+ -->
5
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
6
+ <path fill="currentColor" fill-opacity="0.3" d="M13.8 1.8 6 13.4h4.8l-1.15 8.8 8.5-12.8H13l.8-7.6z" />
7
+ <path fill="currentColor" d="M13.4 2.6 6.8 13h4l-.9 7.6 7.2-10.8h-4.2l.5-7.2z" />
8
+ </svg>
@@ -0,0 +1,13 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!--
3
+ Tab Random — soft dice plate with solid pips.
4
+ -->
5
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
6
+ <rect x="3.8" y="3.8" width="16.4" height="16.4" rx="3.1" fill="currentColor" fill-opacity="0.3" />
7
+ <rect x="3.6" y="3.6" width="16.8" height="16.8" rx="3.2" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" stroke-width="1.9" />
8
+ <circle cx="8.4" cy="8.4" r="1.35" fill="currentColor" />
9
+ <circle cx="15.6" cy="8.4" r="1.35" fill="currentColor" />
10
+ <circle cx="12" cy="12" r="1.35" fill="currentColor" />
11
+ <circle cx="8.4" cy="15.6" r="1.35" fill="currentColor" />
12
+ <circle cx="15.6" cy="15.6" r="1.35" fill="currentColor" />
13
+ </svg>
@@ -0,0 +1,8 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!--
3
+ Tab Vibes — soft waveform aura behind rising bars.
4
+ -->
5
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
6
+ <path fill="currentColor" fill-opacity="0.28" d="M3.8 9h3v6h-3V9zm3.6-3.2h3v12.4h-3V5.8zm3.6 2h3v8.4h-3V7.8zm3.6-3.4h3v15.2h-3V4.4zm3.6 4.6h3v6h-3v-6z" />
7
+ <path fill="currentColor" d="M4.4 9.6h2v4.8h-2V9.6zm3.6-3h2v10.8h-2V6.6zm3.6 1.8h2v7.2h-2V8.4zm3.6-3.2h2v13.6h-2V5.2zm3.6 4.4h2v4.8h-2v-4.8z" />
8
+ </svg>
@@ -0,0 +1,8 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!--
3
+ Thumbs up filled — soft outer hand + solid core.
4
+ -->
5
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
6
+ <path fill="currentColor" fill-opacity="0.28" d="M7.6 10V20H5.4A2 2 0 0 1 3.4 18v-5.8A2 2 0 0 1 5.4 10H7.6zm2-5.8a2.2 2.2 0 0 1 4.05 1.1V10h4.4a2.2 2.2 0 0 1 2.15 2.7l-1.3 6A2.8 2.8 0 0 1 16.3 20.4H7.6V10l2-5.8z" />
7
+ <path fill="currentColor" d="M8 10.4V19.6H5.8A1.8 1.8 0 0 1 4 17.8v-5.6a1.8 1.8 0 0 1 1.8-1.8H8zm2.2-5.6a2 2 0 0 1 3.7 1V10h4.2a2 2 0 0 1 1.95 2.45l-1.25 5.7A2.6 2.6 0 0 1 16.1 20H8V10.4l2.2-5.6z" />
8
+ </svg>
@@ -0,0 +1,9 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!--
3
+ Thumbs up outline — soft hand plate with stroke silhouette.
4
+ -->
5
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
6
+ <path fill="currentColor" fill-opacity="0.28" d="M8.4 10.8V19H6.4A1.4 1.4 0 0 1 5 17.6v-5.4A1.4 1.4 0 0 1 6.4 10.8h2z" />
7
+ <path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" stroke-width="1.9" d="M8.2 10.6V19.4H6.2A1.6 1.6 0 0 1 4.6 17.8v-5.6A1.6 1.6 0 0 1 6.2 10.6h2z" />
8
+ <path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" stroke-width="1.9" d="M8.2 10.6 10.4 5.2a1.8 1.8 0 0 1 3.3.9V10h4.4a1.8 1.8 0 0 1 1.75 2.2l-1.2 5.6A2.4 2.4 0 0 1 16.7 19.4H8.2" />
9
+ </svg>
@@ -0,0 +1,10 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!--
3
+ Trash — soft bin plate with lid and body lines.
4
+ -->
5
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
6
+ <path fill="currentColor" fill-opacity="0.28" d="M8.4 9h7.2l-.65 9.4a1.6 1.6 0 0 1-1.6 1.45H10.65a1.6 1.6 0 0 1-1.6-1.45L8.4 9z" />
7
+ <path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" stroke-width="1.9" d="M8.2 8.8h7.6l-.7 10.2a1.8 1.8 0 0 1-1.8 1.6H10.7a1.8 1.8 0 0 1-1.8-1.6L8.2 8.8z" />
8
+ <path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" stroke-width="1.9" d="M5.4 8.8h13.2M10 5.6h4a1.4 1.4 0 0 1 1.4 1.4V8.8H8.6V7A1.4 1.4 0 0 1 10 5.6z" />
9
+ <path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" stroke-width="1.5" d="M11.2 12.2v4.2M12.8 12.2v4.2" />
10
+ </svg>
@@ -0,0 +1,11 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!--
3
+ Travel — soft suitcase plate with handle and sticker pip.
4
+ -->
5
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
6
+ <rect x="4.2" y="8.4" width="15.6" height="11" rx="2.1" fill="currentColor" fill-opacity="0.3" />
7
+ <rect x="4" y="8.2" width="16" height="11.4" rx="2.2" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" stroke-width="1.8" />
8
+ <path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" stroke-width="1.9" d="M9 8.2V6.4A1.8 1.8 0 0 1 10.8 4.6h2.4A1.8 1.8 0 0 1 15 6.4v1.8" />
9
+ <path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" stroke-width="1.7" d="M12 9.8v8.2M4 13.8h16" />
10
+ <circle cx="17" cy="11.6" r="1.15" fill="currentColor" />
11
+ </svg>
@@ -0,0 +1,11 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!--
3
+ Video — camera body plate + lens + play wedge.
4
+ -->
5
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
6
+ <rect x="2.6" y="6.4" width="12.8" height="11.2" rx="2.3" fill="currentColor" fill-opacity="0.32" />
7
+ <rect x="2.6" y="6.4" width="12.8" height="11.2" rx="2.3" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" stroke-width="1.8" />
8
+ <circle cx="9" cy="12" r="2.3" fill="currentColor" />
9
+ <path fill="currentColor" fill-opacity="0.35" d="M16.2 9.2 21.2 6.6v10.8l-5-2.6V9.2z" />
10
+ <path fill="currentColor" d="M16.6 10 20.4 8v8l-3.8-2V10z" />
11
+ </svg>
@@ -0,0 +1,10 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!--
3
+ Visibility off — same eye as visibility + diagonal slash (hidden).
4
+ -->
5
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
6
+ <path fill="currentColor" fill-opacity="0.28" d="M12 4.8c5.8 0 10.4 4.6 11.2 7.2-.8 2.6-5.4 7.2-11.2 7.2S1.6 14.6.8 12C1.6 9.4 6.2 4.8 12 4.8z" />
7
+ <path fill="currentColor" fill-rule="evenodd" d="M12 5.6c5.2 0 9.4 4.1 10.2 6.4-.8 2.3-5 6.4-10.2 6.4S2.6 14.3 1.8 12C2.6 9.7 6.8 5.6 12 5.6zm0 2.6a3.8 3.8 0 1 0 0 7.6 3.8 3.8 0 0 0 0-7.6z" />
8
+ <circle cx="12" cy="12" r="1.55" fill="currentColor" />
9
+ <path stroke="currentColor" stroke-width="2.2" stroke-linecap="round" d="M4.2 5.2 19.8 18.8" />
10
+ </svg>
@@ -0,0 +1,9 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!--
3
+ Visibility — soft eye plate + punched iris + pupil (seen).
4
+ -->
5
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
6
+ <path fill="currentColor" fill-opacity="0.28" d="M12 4.8c5.8 0 10.4 4.6 11.2 7.2-.8 2.6-5.4 7.2-11.2 7.2S1.6 14.6.8 12C1.6 9.4 6.2 4.8 12 4.8z" />
7
+ <path fill="currentColor" fill-rule="evenodd" d="M12 5.6c5.2 0 9.4 4.1 10.2 6.4-.8 2.3-5 6.4-10.2 6.4S2.6 14.3 1.8 12C2.6 9.7 6.8 5.6 12 5.6zm0 2.6a3.8 3.8 0 1 0 0 7.6 3.8 3.8 0 0 0 0-7.6z" />
8
+ <circle cx="12" cy="12" r="1.55" fill="currentColor" />
9
+ </svg>
@@ -0,0 +1,9 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!--
3
+ Volume off — soft speaker + clear X mute (intact geometry).
4
+ -->
5
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
6
+ <path fill="currentColor" fill-opacity="0.3" d="M4.2 8.8h3.8L12.6 4.4v15.2l-4.6-4.4H4.2V8.8z" />
7
+ <path fill="currentColor" d="M4.8 9.6h3L11.6 6v12l-3.8-3.6h-3V9.6z" />
8
+ <path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" stroke-width="2.1" d="M15.2 9.4l5 5M20.2 9.4l-5 5" />
9
+ </svg>
@@ -0,0 +1,10 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!--
3
+ Volume on — soft speaker plate + wave arcs.
4
+ -->
5
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
6
+ <path fill="currentColor" fill-opacity="0.3" d="M4.2 8.8h3.8L12.6 4.4v15.2l-4.6-4.4H4.2V8.8z" />
7
+ <path fill="currentColor" d="M4.8 9.6h3L11.6 6v12l-3.8-3.6h-3V9.6z" />
8
+ <path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" stroke-width="1.8" d="M15.2 9.2a3.4 3.4 0 0 1 0 5.6" />
9
+ <path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" stroke-width="1.8" d="M17.4 7a6 6 0 0 1 0 10" />
10
+ </svg>
@@ -0,0 +1,10 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!--
3
+ Warning — soft triangle plate + outline + bang marks.
4
+ -->
5
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
6
+ <path fill="currentColor" fill-opacity="0.3" d="M12 2.8 21.8 19.8H2.2L12 2.8z" />
7
+ <path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" stroke-width="1.9" d="M12 4.6 19.4 18.2H4.6L12 4.6z" />
8
+ <path fill="currentColor" d="M11.1 9.2h1.8v5h-1.8v-5z" />
9
+ <circle cx="12" cy="16.4" r="1.15" fill="currentColor" />
10
+ </svg>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@proulr/sdui-components",
3
- "version": "0.1.66",
3
+ "version": "0.1.67",
4
4
  "type": "module",
5
5
  "main": "./src/renderer/index.ts",
6
6
  "types": "./src/renderer/index.ts",
@@ -14,7 +14,8 @@
14
14
  "./catalog": "./src/catalog/index.ts"
15
15
  },
16
16
  "files": [
17
- "src"
17
+ "src",
18
+ "assets/icons"
18
19
  ],
19
20
  "repository": {
20
21
  "type": "git",
@@ -22,6 +23,7 @@
22
23
  },
23
24
  "scripts": {
24
25
  "prepare": "husky",
26
+ "icons:generate": "node scripts/generate-app-icons.mjs",
25
27
  "typecheck": "tsc --noEmit",
26
28
  "test": "vitest run",
27
29
  "test:watch": "vitest",
@@ -41,8 +41,10 @@ describe('block-types', () => {
41
41
 
42
42
  describe('app-icon-names', () => {
43
43
  it('validates icon tokens', () => {
44
- expect(APP_ICON_NAMES.length).toBeGreaterThan(10);
44
+ expect(APP_ICON_NAMES).toHaveLength(79);
45
45
  expect(isAppIconName('search')).toBe(true);
46
+ expect(isAppIconName('heart-filled')).toBe(true);
47
+ expect(isAppIconName('tab-discover')).toBe(true);
46
48
  expect(isAppIconName('not-an-icon')).toBe(false);
47
49
  });
48
50
  });
@@ -0,0 +1,5 @@
1
+ /** Shared props for generated AppIcon SVG components. */
2
+ export type AppIconGlyphProps = {
3
+ color?: string;
4
+ size?: number;
5
+ };
@@ -0,0 +1,45 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
4
+ import { describe, expect, it } from 'vitest';
5
+ import { APP_ICON_NAMES } from '../../catalog/app-icon-names';
6
+
7
+ const ROOT = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '../../..');
8
+ const ICONS_DIR = path.join(ROOT, 'assets', 'icons');
9
+ const GENERATED_DIR = path.join(ROOT, 'src', 'renderer', 'ui', 'generated');
10
+
11
+ describe('AppIcon SVG ↔ catalog 1:1', () => {
12
+ it('has exactly 79 AppIconName tokens', () => {
13
+ expect(APP_ICON_NAMES).toHaveLength(79);
14
+ });
15
+
16
+ it('has one SVG file per AppIconName and no orphan SVGs', () => {
17
+ const svgNames = fs
18
+ .readdirSync(ICONS_DIR)
19
+ .filter((f) => f.endsWith('.svg'))
20
+ .map((f) => f.replace(/\.svg$/, ''))
21
+ .sort();
22
+ expect(svgNames).toEqual([...APP_ICON_NAMES].sort());
23
+ for (const name of APP_ICON_NAMES) {
24
+ const text = fs.readFileSync(path.join(ICONS_DIR, `${name}.svg`), 'utf8');
25
+ expect(text).toContain('viewBox="0 0 24 24"');
26
+ expect(text).toMatch(/currentColor/i);
27
+ }
28
+ });
29
+
30
+ it('has a generated TSX component per AppIconName and registry entries', () => {
31
+ const generatedTsx = fs
32
+ .readdirSync(GENERATED_DIR)
33
+ .filter((f) => f.endsWith('.tsx'))
34
+ .map((f) => f.replace(/\.tsx$/, ''))
35
+ .sort();
36
+ expect(generatedTsx).toEqual([...APP_ICON_NAMES].sort());
37
+
38
+ const indexSource = fs.readFileSync(path.join(GENERATED_DIR, 'index.ts'), 'utf8');
39
+ expect(indexSource).toContain('GENERATED_ICON_REGISTRY');
40
+ for (const name of APP_ICON_NAMES) {
41
+ expect(indexSource).toContain(`'${name}':`);
42
+ expect(fs.existsSync(path.join(GENERATED_DIR, `${name}.tsx`))).toBe(true);
43
+ }
44
+ });
45
+ });