@stackone/malachite 2.21.0 → 2.22.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 (778) hide show
  1. package/dist/ShadowRootWrapper.js +83 -0
  2. package/dist/ShadowRootWrapper.js.map +1 -0
  3. package/dist/assets/icons/account.svg.js +6 -0
  4. package/dist/assets/icons/account.svg.js.map +1 -0
  5. package/dist/assets/icons/accounts.svg.js +6 -0
  6. package/dist/assets/icons/accounts.svg.js.map +1 -0
  7. package/dist/assets/icons/add.svg.js +6 -0
  8. package/dist/assets/icons/add.svg.js.map +1 -0
  9. package/dist/assets/icons/advanced_logs.svg.js +6 -0
  10. package/dist/assets/icons/advanced_logs.svg.js.map +1 -0
  11. package/dist/assets/icons/api_keys.svg.js +6 -0
  12. package/dist/assets/icons/api_keys.svg.js.map +1 -0
  13. package/dist/assets/icons/archive.svg.js +6 -0
  14. package/dist/assets/icons/archive.svg.js.map +1 -0
  15. package/dist/assets/icons/arrow_left.svg.js +6 -0
  16. package/dist/assets/icons/arrow_left.svg.js.map +1 -0
  17. package/dist/assets/icons/arrow_up.svg.js +6 -0
  18. package/dist/assets/icons/arrow_up.svg.js.map +1 -0
  19. package/dist/assets/icons/arrow_up_right.svg.js +6 -0
  20. package/dist/assets/icons/arrow_up_right.svg.js.map +1 -0
  21. package/dist/assets/icons/authentication.svg.js +6 -0
  22. package/dist/assets/icons/authentication.svg.js.map +1 -0
  23. package/dist/assets/icons/bell.svg.js +6 -0
  24. package/dist/assets/icons/bell.svg.js.map +1 -0
  25. package/dist/assets/icons/bell_slash.svg.js +6 -0
  26. package/dist/assets/icons/bell_slash.svg.js.map +1 -0
  27. package/dist/assets/icons/bi_directional_arrows.svg.js +6 -0
  28. package/dist/assets/icons/bi_directional_arrows.svg.js.map +1 -0
  29. package/dist/assets/icons/card.svg.js +6 -0
  30. package/dist/assets/icons/card.svg.js.map +1 -0
  31. package/dist/assets/icons/caret_down.svg.js +6 -0
  32. package/dist/assets/icons/caret_down.svg.js.map +1 -0
  33. package/dist/assets/icons/caret_left.svg.js +6 -0
  34. package/dist/assets/icons/caret_left.svg.js.map +1 -0
  35. package/dist/assets/icons/caret_right.svg.js +6 -0
  36. package/dist/assets/icons/caret_right.svg.js.map +1 -0
  37. package/dist/assets/icons/caret_up.svg.js +6 -0
  38. package/dist/assets/icons/caret_up.svg.js.map +1 -0
  39. package/dist/assets/icons/change_password.svg.js +6 -0
  40. package/dist/assets/icons/change_password.svg.js.map +1 -0
  41. package/dist/assets/icons/check.svg.js +6 -0
  42. package/dist/assets/icons/check.svg.js.map +1 -0
  43. package/dist/assets/icons/check_circle_filled.svg.js +6 -0
  44. package/dist/assets/icons/check_circle_filled.svg.js.map +1 -0
  45. package/dist/assets/icons/checkmark.svg.js +6 -0
  46. package/dist/assets/icons/checkmark.svg.js.map +1 -0
  47. package/dist/assets/icons/clear.svg.js +6 -0
  48. package/dist/assets/icons/clear.svg.js.map +1 -0
  49. package/dist/assets/icons/close.svg.js +6 -0
  50. package/dist/assets/icons/close.svg.js.map +1 -0
  51. package/dist/assets/icons/code.svg.js +6 -0
  52. package/dist/assets/icons/code.svg.js.map +1 -0
  53. package/dist/assets/icons/command_key.svg.js +6 -0
  54. package/dist/assets/icons/command_key.svg.js.map +1 -0
  55. package/dist/assets/icons/copy.svg.js +6 -0
  56. package/dist/assets/icons/copy.svg.js.map +1 -0
  57. package/dist/assets/icons/csv.svg.js +6 -0
  58. package/dist/assets/icons/csv.svg.js.map +1 -0
  59. package/dist/assets/icons/custom_field.svg.js +6 -0
  60. package/dist/assets/icons/custom_field.svg.js.map +1 -0
  61. package/dist/assets/icons/dashboard.svg.js +6 -0
  62. package/dist/assets/icons/dashboard.svg.js.map +1 -0
  63. package/dist/assets/icons/date.svg.js +6 -0
  64. package/dist/assets/icons/date.svg.js.map +1 -0
  65. package/dist/assets/icons/disable.svg.js +6 -0
  66. package/dist/assets/icons/disable.svg.js.map +1 -0
  67. package/dist/assets/icons/disabled.svg.js +6 -0
  68. package/dist/assets/icons/disabled.svg.js.map +1 -0
  69. package/dist/assets/icons/dismiss.svg.js +6 -0
  70. package/dist/assets/icons/dismiss.svg.js.map +1 -0
  71. package/dist/assets/icons/doc.svg.js +6 -0
  72. package/dist/assets/icons/doc.svg.js.map +1 -0
  73. package/dist/assets/icons/double_check.svg.js +6 -0
  74. package/dist/assets/icons/double_check.svg.js.map +1 -0
  75. package/dist/assets/icons/download.svg.js +6 -0
  76. package/dist/assets/icons/download.svg.js.map +1 -0
  77. package/dist/assets/icons/edit.svg.js +6 -0
  78. package/dist/assets/icons/edit.svg.js.map +1 -0
  79. package/dist/assets/icons/enable.svg.js +6 -0
  80. package/dist/assets/icons/enable.svg.js.map +1 -0
  81. package/dist/assets/icons/enum.svg.js +6 -0
  82. package/dist/assets/icons/enum.svg.js.map +1 -0
  83. package/dist/assets/icons/error_circle_filled.svg.js +6 -0
  84. package/dist/assets/icons/error_circle_filled.svg.js.map +1 -0
  85. package/dist/assets/icons/expand.svg.js +6 -0
  86. package/dist/assets/icons/expand.svg.js.map +1 -0
  87. package/dist/assets/icons/eye-closed.svg.js +6 -0
  88. package/dist/assets/icons/eye-closed.svg.js.map +1 -0
  89. package/dist/assets/icons/eye.svg.js +6 -0
  90. package/dist/assets/icons/eye.svg.js.map +1 -0
  91. package/dist/assets/icons/field_mapping.svg.js +6 -0
  92. package/dist/assets/icons/field_mapping.svg.js.map +1 -0
  93. package/dist/assets/icons/filled_caret_down.svg.js +6 -0
  94. package/dist/assets/icons/filled_caret_down.svg.js.map +1 -0
  95. package/dist/assets/icons/filled_caret_right.svg.js +6 -0
  96. package/dist/assets/icons/filled_caret_right.svg.js.map +1 -0
  97. package/dist/assets/icons/filter.svg.js +6 -0
  98. package/dist/assets/icons/filter.svg.js.map +1 -0
  99. package/dist/assets/icons/forbidden.svg.js +6 -0
  100. package/dist/assets/icons/forbidden.svg.js.map +1 -0
  101. package/dist/assets/icons/forward_arrow.svg.js +6 -0
  102. package/dist/assets/icons/forward_arrow.svg.js.map +1 -0
  103. package/dist/assets/icons/globe.svg.js +6 -0
  104. package/dist/assets/icons/globe.svg.js.map +1 -0
  105. package/dist/assets/icons/inbox.svg.js +6 -0
  106. package/dist/assets/icons/inbox.svg.js.map +1 -0
  107. package/dist/assets/icons/info.svg.js +6 -0
  108. package/dist/assets/icons/info.svg.js.map +1 -0
  109. package/dist/assets/icons/info_circle_filled.svg.js +6 -0
  110. package/dist/assets/icons/info_circle_filled.svg.js.map +1 -0
  111. package/dist/assets/icons/info_filled.svg.js +6 -0
  112. package/dist/assets/icons/info_filled.svg.js.map +1 -0
  113. package/dist/assets/icons/integrations.svg.js +6 -0
  114. package/dist/assets/icons/integrations.svg.js.map +1 -0
  115. package/dist/assets/icons/key.svg.js +6 -0
  116. package/dist/assets/icons/key.svg.js.map +1 -0
  117. package/dist/assets/icons/library.svg.js +6 -0
  118. package/dist/assets/icons/library.svg.js.map +1 -0
  119. package/dist/assets/icons/logs.svg.js +6 -0
  120. package/dist/assets/icons/logs.svg.js.map +1 -0
  121. package/dist/assets/icons/magic_wand.svg.js +6 -0
  122. package/dist/assets/icons/magic_wand.svg.js.map +1 -0
  123. package/dist/assets/icons/manage_team.svg.js +6 -0
  124. package/dist/assets/icons/manage_team.svg.js.map +1 -0
  125. package/dist/assets/icons/manual_native_webhook.svg.js +6 -0
  126. package/dist/assets/icons/manual_native_webhook.svg.js.map +1 -0
  127. package/dist/assets/icons/mark_read.svg.js +6 -0
  128. package/dist/assets/icons/mark_read.svg.js.map +1 -0
  129. package/dist/assets/icons/mark_unread.svg.js +6 -0
  130. package/dist/assets/icons/mark_unread.svg.js.map +1 -0
  131. package/dist/assets/icons/members.svg.js +6 -0
  132. package/dist/assets/icons/members.svg.js.map +1 -0
  133. package/dist/assets/icons/modal.svg.js +6 -0
  134. package/dist/assets/icons/modal.svg.js.map +1 -0
  135. package/dist/assets/icons/more_horizontal.svg.js +6 -0
  136. package/dist/assets/icons/more_horizontal.svg.js.map +1 -0
  137. package/dist/assets/icons/more_vertical.svg.js +6 -0
  138. package/dist/assets/icons/more_vertical.svg.js.map +1 -0
  139. package/dist/assets/icons/navbar_collapse.svg.js +6 -0
  140. package/dist/assets/icons/navbar_collapse.svg.js.map +1 -0
  141. package/dist/assets/icons/navbar_expand.svg.js +6 -0
  142. package/dist/assets/icons/navbar_expand.svg.js.map +1 -0
  143. package/dist/assets/icons/not_found.svg.js +6 -0
  144. package/dist/assets/icons/not_found.svg.js.map +1 -0
  145. package/dist/assets/icons/organization.svg.js +6 -0
  146. package/dist/assets/icons/organization.svg.js.map +1 -0
  147. package/dist/assets/icons/pin.svg.js +6 -0
  148. package/dist/assets/icons/pin.svg.js.map +1 -0
  149. package/dist/assets/icons/plus.svg.js +6 -0
  150. package/dist/assets/icons/plus.svg.js.map +1 -0
  151. package/dist/assets/icons/preview.svg.js +6 -0
  152. package/dist/assets/icons/preview.svg.js.map +1 -0
  153. package/dist/assets/icons/programmatic_native_webhook.svg.js +6 -0
  154. package/dist/assets/icons/programmatic_native_webhook.svg.js.map +1 -0
  155. package/dist/assets/icons/pulse.svg.js +6 -0
  156. package/dist/assets/icons/pulse.svg.js.map +1 -0
  157. package/dist/assets/icons/refresh.svg.js +6 -0
  158. package/dist/assets/icons/refresh.svg.js.map +1 -0
  159. package/dist/assets/icons/reject.svg.js +6 -0
  160. package/dist/assets/icons/reject.svg.js.map +1 -0
  161. package/dist/assets/icons/reload.svg.js +6 -0
  162. package/dist/assets/icons/reload.svg.js.map +1 -0
  163. package/dist/assets/icons/reply.svg.js +6 -0
  164. package/dist/assets/icons/reply.svg.js.map +1 -0
  165. package/dist/assets/icons/required_field_indicator.svg.js +6 -0
  166. package/dist/assets/icons/required_field_indicator.svg.js.map +1 -0
  167. package/dist/assets/icons/search.svg.js +6 -0
  168. package/dist/assets/icons/search.svg.js.map +1 -0
  169. package/dist/assets/icons/security.svg.js +6 -0
  170. package/dist/assets/icons/security.svg.js.map +1 -0
  171. package/dist/assets/icons/send.svg.js +6 -0
  172. package/dist/assets/icons/send.svg.js.map +1 -0
  173. package/dist/assets/icons/settings.svg.js +6 -0
  174. package/dist/assets/icons/settings.svg.js.map +1 -0
  175. package/dist/assets/icons/sign_out.svg.js +6 -0
  176. package/dist/assets/icons/sign_out.svg.js.map +1 -0
  177. package/dist/assets/icons/slider.svg.js +6 -0
  178. package/dist/assets/icons/slider.svg.js.map +1 -0
  179. package/dist/assets/icons/sort.svg.js +6 -0
  180. package/dist/assets/icons/sort.svg.js.map +1 -0
  181. package/dist/assets/icons/source.svg.js +6 -0
  182. package/dist/assets/icons/source.svg.js.map +1 -0
  183. package/dist/assets/icons/sparkle.svg.js +6 -0
  184. package/dist/assets/icons/sparkle.svg.js.map +1 -0
  185. package/dist/assets/icons/star.svg.js +6 -0
  186. package/dist/assets/icons/star.svg.js.map +1 -0
  187. package/dist/assets/icons/step_current.svg.js +6 -0
  188. package/dist/assets/icons/step_current.svg.js.map +1 -0
  189. package/dist/assets/icons/step_upcoming.svg.js +6 -0
  190. package/dist/assets/icons/step_upcoming.svg.js.map +1 -0
  191. package/dist/assets/icons/synthetic_webhook.svg.js +6 -0
  192. package/dist/assets/icons/synthetic_webhook.svg.js.map +1 -0
  193. package/dist/assets/icons/thumbs_down.svg.js +6 -0
  194. package/dist/assets/icons/thumbs_down.svg.js.map +1 -0
  195. package/dist/assets/icons/thumbs_up.svg.js +6 -0
  196. package/dist/assets/icons/thumbs_up.svg.js.map +1 -0
  197. package/dist/assets/icons/trash.svg.js +6 -0
  198. package/dist/assets/icons/trash.svg.js.map +1 -0
  199. package/dist/assets/icons/triangle_down.svg.js +6 -0
  200. package/dist/assets/icons/triangle_down.svg.js.map +1 -0
  201. package/dist/assets/icons/triangle_right.svg.js +6 -0
  202. package/dist/assets/icons/triangle_right.svg.js.map +1 -0
  203. package/dist/assets/icons/unarchive.svg.js +6 -0
  204. package/dist/assets/icons/unarchive.svg.js.map +1 -0
  205. package/dist/assets/icons/upload.svg.js +6 -0
  206. package/dist/assets/icons/upload.svg.js.map +1 -0
  207. package/dist/assets/icons/warning_circle_filled.svg.js +6 -0
  208. package/dist/assets/icons/warning_circle_filled.svg.js.map +1 -0
  209. package/dist/assets/icons/warning_triangle.svg.js +6 -0
  210. package/dist/assets/icons/warning_triangle.svg.js.map +1 -0
  211. package/dist/assets/icons/webhook-events.svg.js +6 -0
  212. package/dist/assets/icons/webhook-events.svg.js.map +1 -0
  213. package/dist/assets/icons/webhook.svg.js +6 -0
  214. package/dist/assets/icons/webhook.svg.js.map +1 -0
  215. package/dist/assets/icons/webhook_signing_secret.svg.js +6 -0
  216. package/dist/assets/icons/webhook_signing_secret.svg.js.map +1 -0
  217. package/dist/assets/logo-stackone-desaturated.png.js +5 -0
  218. package/dist/assets/logo-stackone-desaturated.png.js.map +1 -0
  219. package/dist/components/Accordion.js +105 -0
  220. package/dist/components/Accordion.js.map +1 -0
  221. package/dist/components/ActionBar.js +66 -0
  222. package/dist/components/ActionBar.js.map +1 -0
  223. package/dist/components/ActionMenu.js +174 -0
  224. package/dist/components/ActionMenu.js.map +1 -0
  225. package/dist/components/Alert.js +136 -0
  226. package/dist/components/Alert.js.map +1 -0
  227. package/dist/components/AppLogo.js +43 -0
  228. package/dist/components/AppLogo.js.map +1 -0
  229. package/dist/components/Avatar.js +61 -0
  230. package/dist/components/Avatar.js.map +1 -0
  231. package/dist/components/BaseFormComponent.js +91 -0
  232. package/dist/components/BaseFormComponent.js.map +1 -0
  233. package/dist/components/Breadcrumbs.js +106 -0
  234. package/dist/components/Breadcrumbs.js.map +1 -0
  235. package/dist/components/Button.js +227 -0
  236. package/dist/components/Button.js.map +1 -0
  237. package/dist/components/ButtonList.js +40 -0
  238. package/dist/components/ButtonList.js.map +1 -0
  239. package/dist/components/Card.js +109 -0
  240. package/dist/components/Card.js.map +1 -0
  241. package/dist/components/CardStrip.js +454 -0
  242. package/dist/components/CardStrip.js.map +1 -0
  243. package/dist/components/ChangeReview/ChangeReviewItem.js +129 -0
  244. package/dist/components/ChangeReview/ChangeReviewItem.js.map +1 -0
  245. package/dist/components/ChangeReview/ChangeReviewJump.js +27 -0
  246. package/dist/components/ChangeReview/ChangeReviewJump.js.map +1 -0
  247. package/dist/components/ChangeReview/ChangeReviewRemoved.js +37 -0
  248. package/dist/components/ChangeReview/ChangeReviewRemoved.js.map +1 -0
  249. package/dist/components/ChangeReview/ChangeReviewSummary.js +56 -0
  250. package/dist/components/ChangeReview/ChangeReviewSummary.js.map +1 -0
  251. package/dist/components/ChangeReview/index.js +15 -0
  252. package/dist/components/ChangeReview/index.js.map +1 -0
  253. package/dist/components/Chat/ChatComposer.js +100 -0
  254. package/dist/components/Chat/ChatComposer.js.map +1 -0
  255. package/dist/components/Chat/ChatComposerChip.js +28 -0
  256. package/dist/components/Chat/ChatComposerChip.js.map +1 -0
  257. package/dist/components/Chat/ChatContext.js +55 -0
  258. package/dist/components/Chat/ChatContext.js.map +1 -0
  259. package/dist/components/Chat/ChatContextMeter.js +30 -0
  260. package/dist/components/Chat/ChatContextMeter.js.map +1 -0
  261. package/dist/components/Chat/ChatHeader.js +44 -0
  262. package/dist/components/Chat/ChatHeader.js.map +1 -0
  263. package/dist/components/Chat/ChatMessage.js +127 -0
  264. package/dist/components/Chat/ChatMessage.js.map +1 -0
  265. package/dist/components/Chat/ChatModelPicker.js +207 -0
  266. package/dist/components/Chat/ChatModelPicker.js.map +1 -0
  267. package/dist/components/Chat/ChatRoot.js +6 -0
  268. package/dist/components/Chat/ChatRoot.js.map +1 -0
  269. package/dist/components/Chat/ChatSuggestion.js +22 -0
  270. package/dist/components/Chat/ChatSuggestion.js.map +1 -0
  271. package/dist/components/Chat/ChatThinking.js +20 -0
  272. package/dist/components/Chat/ChatThinking.js.map +1 -0
  273. package/dist/components/Chat/ChatThread.js +68 -0
  274. package/dist/components/Chat/ChatThread.js.map +1 -0
  275. package/dist/components/Chat/ChatToolCall.js +59 -0
  276. package/dist/components/Chat/ChatToolCall.js.map +1 -0
  277. package/dist/components/Chat/index.js +29 -0
  278. package/dist/components/Chat/index.js.map +1 -0
  279. package/dist/components/Chat/stickToBottom.js +29 -0
  280. package/dist/components/Chat/stickToBottom.js.map +1 -0
  281. package/dist/components/Chat/tokenText.js +6 -0
  282. package/dist/components/Chat/tokenText.js.map +1 -0
  283. package/dist/components/Checkbox.js +79 -0
  284. package/dist/components/Checkbox.js.map +1 -0
  285. package/dist/components/ClampText.js +30 -0
  286. package/dist/components/ClampText.js.map +1 -0
  287. package/dist/components/CodeBlock.js +223 -0
  288. package/dist/components/CodeBlock.js.map +1 -0
  289. package/dist/components/CodeBlockHighlighter.js +103 -0
  290. package/dist/components/CodeBlockHighlighter.js.map +1 -0
  291. package/dist/components/CollapsibleSection.js +40 -0
  292. package/dist/components/CollapsibleSection.js.map +1 -0
  293. package/dist/components/Confetti.js +56 -0
  294. package/dist/components/Confetti.js.map +1 -0
  295. package/dist/components/ConfirmationDialog.js +234 -0
  296. package/dist/components/ConfirmationDialog.js.map +1 -0
  297. package/dist/components/ConnectionHeader.js +47 -0
  298. package/dist/components/ConnectionHeader.js.map +1 -0
  299. package/dist/components/CustomIcons/AccountIcon.js +28 -0
  300. package/dist/components/CustomIcons/AccountIcon.js.map +1 -0
  301. package/dist/components/CustomIcons/AccountsIcon.js +28 -0
  302. package/dist/components/CustomIcons/AccountsIcon.js.map +1 -0
  303. package/dist/components/CustomIcons/AddIcon.js +28 -0
  304. package/dist/components/CustomIcons/AddIcon.js.map +1 -0
  305. package/dist/components/CustomIcons/AdvancedLogsIcon.js +21 -0
  306. package/dist/components/CustomIcons/AdvancedLogsIcon.js.map +1 -0
  307. package/dist/components/CustomIcons/ApiKeysIcon.js +16 -0
  308. package/dist/components/CustomIcons/ApiKeysIcon.js.map +1 -0
  309. package/dist/components/CustomIcons/ArchiveIcon.js +16 -0
  310. package/dist/components/CustomIcons/ArchiveIcon.js.map +1 -0
  311. package/dist/components/CustomIcons/ArrowLeftIcon.js +16 -0
  312. package/dist/components/CustomIcons/ArrowLeftIcon.js.map +1 -0
  313. package/dist/components/CustomIcons/ArrowUpIcon.js +28 -0
  314. package/dist/components/CustomIcons/ArrowUpIcon.js.map +1 -0
  315. package/dist/components/CustomIcons/ArrowUpRightIcon.js +20 -0
  316. package/dist/components/CustomIcons/ArrowUpRightIcon.js.map +1 -0
  317. package/dist/components/CustomIcons/AuthenticationIcon.js +28 -0
  318. package/dist/components/CustomIcons/AuthenticationIcon.js.map +1 -0
  319. package/dist/components/CustomIcons/BellIcon.js +16 -0
  320. package/dist/components/CustomIcons/BellIcon.js.map +1 -0
  321. package/dist/components/CustomIcons/BellSlashIcon.js +16 -0
  322. package/dist/components/CustomIcons/BellSlashIcon.js.map +1 -0
  323. package/dist/components/CustomIcons/BiDirectionalArrowsIcon.js +21 -0
  324. package/dist/components/CustomIcons/BiDirectionalArrowsIcon.js.map +1 -0
  325. package/dist/components/CustomIcons/CardIcon.js +16 -0
  326. package/dist/components/CustomIcons/CardIcon.js.map +1 -0
  327. package/dist/components/CustomIcons/CaretDownIcon.js +16 -0
  328. package/dist/components/CustomIcons/CaretDownIcon.js.map +1 -0
  329. package/dist/components/CustomIcons/CaretLeftIcon.js +16 -0
  330. package/dist/components/CustomIcons/CaretLeftIcon.js.map +1 -0
  331. package/dist/components/CustomIcons/CaretRightIcon.js +21 -0
  332. package/dist/components/CustomIcons/CaretRightIcon.js.map +1 -0
  333. package/dist/components/CustomIcons/CaretUpIcon.js +16 -0
  334. package/dist/components/CustomIcons/CaretUpIcon.js.map +1 -0
  335. package/dist/components/CustomIcons/ChangePasswordIcon.js +21 -0
  336. package/dist/components/CustomIcons/ChangePasswordIcon.js.map +1 -0
  337. package/dist/components/CustomIcons/CheckCircleFilled.js +21 -0
  338. package/dist/components/CustomIcons/CheckCircleFilled.js.map +1 -0
  339. package/dist/components/CustomIcons/CheckIcon.js +28 -0
  340. package/dist/components/CustomIcons/CheckIcon.js.map +1 -0
  341. package/dist/components/CustomIcons/CheckmarkIcon.js +16 -0
  342. package/dist/components/CustomIcons/CheckmarkIcon.js.map +1 -0
  343. package/dist/components/CustomIcons/ClearIcon.js +28 -0
  344. package/dist/components/CustomIcons/ClearIcon.js.map +1 -0
  345. package/dist/components/CustomIcons/CloseIcon.js +28 -0
  346. package/dist/components/CustomIcons/CloseIcon.js.map +1 -0
  347. package/dist/components/CustomIcons/CodeIcon.js +16 -0
  348. package/dist/components/CustomIcons/CodeIcon.js.map +1 -0
  349. package/dist/components/CustomIcons/CommandKeyIcon.js +21 -0
  350. package/dist/components/CustomIcons/CommandKeyIcon.js.map +1 -0
  351. package/dist/components/CustomIcons/CopyIcon.js +28 -0
  352. package/dist/components/CustomIcons/CopyIcon.js.map +1 -0
  353. package/dist/components/CustomIcons/CsvIcon.js +28 -0
  354. package/dist/components/CustomIcons/CsvIcon.js.map +1 -0
  355. package/dist/components/CustomIcons/CustomFieldIcon.js +21 -0
  356. package/dist/components/CustomIcons/CustomFieldIcon.js.map +1 -0
  357. package/dist/components/CustomIcons/DashboardIcon.js +28 -0
  358. package/dist/components/CustomIcons/DashboardIcon.js.map +1 -0
  359. package/dist/components/CustomIcons/DateIcon.js +28 -0
  360. package/dist/components/CustomIcons/DateIcon.js.map +1 -0
  361. package/dist/components/CustomIcons/DisableIcon.js +28 -0
  362. package/dist/components/CustomIcons/DisableIcon.js.map +1 -0
  363. package/dist/components/CustomIcons/DisabledIcon.js +28 -0
  364. package/dist/components/CustomIcons/DisabledIcon.js.map +1 -0
  365. package/dist/components/CustomIcons/DismissIcon.js +15 -0
  366. package/dist/components/CustomIcons/DismissIcon.js.map +1 -0
  367. package/dist/components/CustomIcons/DocIcon.js +28 -0
  368. package/dist/components/CustomIcons/DocIcon.js.map +1 -0
  369. package/dist/components/CustomIcons/DoubleCheckIcon.js +21 -0
  370. package/dist/components/CustomIcons/DoubleCheckIcon.js.map +1 -0
  371. package/dist/components/CustomIcons/DownloadIcon.js +28 -0
  372. package/dist/components/CustomIcons/DownloadIcon.js.map +1 -0
  373. package/dist/components/CustomIcons/EditIcon.js +28 -0
  374. package/dist/components/CustomIcons/EditIcon.js.map +1 -0
  375. package/dist/components/CustomIcons/EnableIcon.js +28 -0
  376. package/dist/components/CustomIcons/EnableIcon.js.map +1 -0
  377. package/dist/components/CustomIcons/EnumIcon.js +28 -0
  378. package/dist/components/CustomIcons/EnumIcon.js.map +1 -0
  379. package/dist/components/CustomIcons/ErrorCircleFilled.js +21 -0
  380. package/dist/components/CustomIcons/ErrorCircleFilled.js.map +1 -0
  381. package/dist/components/CustomIcons/ExpandIcon.js +28 -0
  382. package/dist/components/CustomIcons/ExpandIcon.js.map +1 -0
  383. package/dist/components/CustomIcons/EyeClosedIcon.js +16 -0
  384. package/dist/components/CustomIcons/EyeClosedIcon.js.map +1 -0
  385. package/dist/components/CustomIcons/EyeIcon.js +16 -0
  386. package/dist/components/CustomIcons/EyeIcon.js.map +1 -0
  387. package/dist/components/CustomIcons/FieldMappingIcon.js +21 -0
  388. package/dist/components/CustomIcons/FieldMappingIcon.js.map +1 -0
  389. package/dist/components/CustomIcons/FilledCaretDownIcon.js +21 -0
  390. package/dist/components/CustomIcons/FilledCaretDownIcon.js.map +1 -0
  391. package/dist/components/CustomIcons/FilledCaretRightIcon.js +21 -0
  392. package/dist/components/CustomIcons/FilledCaretRightIcon.js.map +1 -0
  393. package/dist/components/CustomIcons/FilterIcon.js +28 -0
  394. package/dist/components/CustomIcons/FilterIcon.js.map +1 -0
  395. package/dist/components/CustomIcons/ForbiddenIcon.js +28 -0
  396. package/dist/components/CustomIcons/ForbiddenIcon.js.map +1 -0
  397. package/dist/components/CustomIcons/ForwardArrowIcon.js +21 -0
  398. package/dist/components/CustomIcons/ForwardArrowIcon.js.map +1 -0
  399. package/dist/components/CustomIcons/GlobeIcon.js +16 -0
  400. package/dist/components/CustomIcons/GlobeIcon.js.map +1 -0
  401. package/dist/components/CustomIcons/InboxIcon.js +16 -0
  402. package/dist/components/CustomIcons/InboxIcon.js.map +1 -0
  403. package/dist/components/CustomIcons/InfoCircleFilled.js +21 -0
  404. package/dist/components/CustomIcons/InfoCircleFilled.js.map +1 -0
  405. package/dist/components/CustomIcons/InfoFilledIcon.js +21 -0
  406. package/dist/components/CustomIcons/InfoFilledIcon.js.map +1 -0
  407. package/dist/components/CustomIcons/InfoIcon.js +28 -0
  408. package/dist/components/CustomIcons/InfoIcon.js.map +1 -0
  409. package/dist/components/CustomIcons/IntegrationsIcon.js +28 -0
  410. package/dist/components/CustomIcons/IntegrationsIcon.js.map +1 -0
  411. package/dist/components/CustomIcons/KeyIcon.js +28 -0
  412. package/dist/components/CustomIcons/KeyIcon.js.map +1 -0
  413. package/dist/components/CustomIcons/LibraryIcon.js +16 -0
  414. package/dist/components/CustomIcons/LibraryIcon.js.map +1 -0
  415. package/dist/components/CustomIcons/LogsIcon.js +28 -0
  416. package/dist/components/CustomIcons/LogsIcon.js.map +1 -0
  417. package/dist/components/CustomIcons/MagicWandIcon.js +16 -0
  418. package/dist/components/CustomIcons/MagicWandIcon.js.map +1 -0
  419. package/dist/components/CustomIcons/ManageTeamIcon.js +21 -0
  420. package/dist/components/CustomIcons/ManageTeamIcon.js.map +1 -0
  421. package/dist/components/CustomIcons/ManualWebhookIcon.js +21 -0
  422. package/dist/components/CustomIcons/ManualWebhookIcon.js.map +1 -0
  423. package/dist/components/CustomIcons/MarkReadIcon.js +16 -0
  424. package/dist/components/CustomIcons/MarkReadIcon.js.map +1 -0
  425. package/dist/components/CustomIcons/MarkUnreadIcon.js +21 -0
  426. package/dist/components/CustomIcons/MarkUnreadIcon.js.map +1 -0
  427. package/dist/components/CustomIcons/MembersIcon.js +28 -0
  428. package/dist/components/CustomIcons/MembersIcon.js.map +1 -0
  429. package/dist/components/CustomIcons/ModalIcon.js +28 -0
  430. package/dist/components/CustomIcons/ModalIcon.js.map +1 -0
  431. package/dist/components/CustomIcons/MoreHorizontalIcon.js +21 -0
  432. package/dist/components/CustomIcons/MoreHorizontalIcon.js.map +1 -0
  433. package/dist/components/CustomIcons/MoreVerticalIcon.js +21 -0
  434. package/dist/components/CustomIcons/MoreVerticalIcon.js.map +1 -0
  435. package/dist/components/CustomIcons/NavbarCollapseIcon.js +21 -0
  436. package/dist/components/CustomIcons/NavbarCollapseIcon.js.map +1 -0
  437. package/dist/components/CustomIcons/NavbarExpandIcon.js +21 -0
  438. package/dist/components/CustomIcons/NavbarExpandIcon.js.map +1 -0
  439. package/dist/components/CustomIcons/NotFoundIcon.js +16 -0
  440. package/dist/components/CustomIcons/NotFoundIcon.js.map +1 -0
  441. package/dist/components/CustomIcons/OrganizationIcon.js +21 -0
  442. package/dist/components/CustomIcons/OrganizationIcon.js.map +1 -0
  443. package/dist/components/CustomIcons/PinIcon.js +16 -0
  444. package/dist/components/CustomIcons/PinIcon.js.map +1 -0
  445. package/dist/components/CustomIcons/PlusIcon.js +28 -0
  446. package/dist/components/CustomIcons/PlusIcon.js.map +1 -0
  447. package/dist/components/CustomIcons/PreviewIcon.js +28 -0
  448. package/dist/components/CustomIcons/PreviewIcon.js.map +1 -0
  449. package/dist/components/CustomIcons/ProgrammaticWebhookIcon.js +21 -0
  450. package/dist/components/CustomIcons/ProgrammaticWebhookIcon.js.map +1 -0
  451. package/dist/components/CustomIcons/PulseIcon.js +28 -0
  452. package/dist/components/CustomIcons/PulseIcon.js.map +1 -0
  453. package/dist/components/CustomIcons/RefreshIcon.js +28 -0
  454. package/dist/components/CustomIcons/RefreshIcon.js.map +1 -0
  455. package/dist/components/CustomIcons/RejectIcon.js +28 -0
  456. package/dist/components/CustomIcons/RejectIcon.js.map +1 -0
  457. package/dist/components/CustomIcons/ReloadIcon.js +28 -0
  458. package/dist/components/CustomIcons/ReloadIcon.js.map +1 -0
  459. package/dist/components/CustomIcons/ReplyIcon.js +16 -0
  460. package/dist/components/CustomIcons/ReplyIcon.js.map +1 -0
  461. package/dist/components/CustomIcons/RequiredFieldIndicatorIcon.js +21 -0
  462. package/dist/components/CustomIcons/RequiredFieldIndicatorIcon.js.map +1 -0
  463. package/dist/components/CustomIcons/SearchIcon.js +15 -0
  464. package/dist/components/CustomIcons/SearchIcon.js.map +1 -0
  465. package/dist/components/CustomIcons/SecurityIcon.js +28 -0
  466. package/dist/components/CustomIcons/SecurityIcon.js.map +1 -0
  467. package/dist/components/CustomIcons/SendIcon.js +16 -0
  468. package/dist/components/CustomIcons/SendIcon.js.map +1 -0
  469. package/dist/components/CustomIcons/SettingsIcon.js +28 -0
  470. package/dist/components/CustomIcons/SettingsIcon.js.map +1 -0
  471. package/dist/components/CustomIcons/SignOutIcon.js +16 -0
  472. package/dist/components/CustomIcons/SignOutIcon.js.map +1 -0
  473. package/dist/components/CustomIcons/SliderIcon.js +28 -0
  474. package/dist/components/CustomIcons/SliderIcon.js.map +1 -0
  475. package/dist/components/CustomIcons/SortIcon.js +28 -0
  476. package/dist/components/CustomIcons/SortIcon.js.map +1 -0
  477. package/dist/components/CustomIcons/SourceIcon.js +28 -0
  478. package/dist/components/CustomIcons/SourceIcon.js.map +1 -0
  479. package/dist/components/CustomIcons/SparkleIcon.js +16 -0
  480. package/dist/components/CustomIcons/SparkleIcon.js.map +1 -0
  481. package/dist/components/CustomIcons/StarIcon.js +16 -0
  482. package/dist/components/CustomIcons/StarIcon.js.map +1 -0
  483. package/dist/components/CustomIcons/StepCurrentIcon.js +21 -0
  484. package/dist/components/CustomIcons/StepCurrentIcon.js.map +1 -0
  485. package/dist/components/CustomIcons/StepUpcomingIcon.js +21 -0
  486. package/dist/components/CustomIcons/StepUpcomingIcon.js.map +1 -0
  487. package/dist/components/CustomIcons/SyntheticWebhookIcon.js +21 -0
  488. package/dist/components/CustomIcons/SyntheticWebhookIcon.js.map +1 -0
  489. package/dist/components/CustomIcons/ThumbsDownIcon.js +21 -0
  490. package/dist/components/CustomIcons/ThumbsDownIcon.js.map +1 -0
  491. package/dist/components/CustomIcons/ThumbsUpIcon.js +16 -0
  492. package/dist/components/CustomIcons/ThumbsUpIcon.js.map +1 -0
  493. package/dist/components/CustomIcons/TrashIcon.js +28 -0
  494. package/dist/components/CustomIcons/TrashIcon.js.map +1 -0
  495. package/dist/components/CustomIcons/TriangleDownIcon.js +21 -0
  496. package/dist/components/CustomIcons/TriangleDownIcon.js.map +1 -0
  497. package/dist/components/CustomIcons/TriangleRightIcon.js +21 -0
  498. package/dist/components/CustomIcons/TriangleRightIcon.js.map +1 -0
  499. package/dist/components/CustomIcons/UnarchiveIcon.js +16 -0
  500. package/dist/components/CustomIcons/UnarchiveIcon.js.map +1 -0
  501. package/dist/components/CustomIcons/UploadIcon.js +28 -0
  502. package/dist/components/CustomIcons/UploadIcon.js.map +1 -0
  503. package/dist/components/CustomIcons/WarningCircleFilled.js +21 -0
  504. package/dist/components/CustomIcons/WarningCircleFilled.js.map +1 -0
  505. package/dist/components/CustomIcons/WarningTriangleIcon.js +21 -0
  506. package/dist/components/CustomIcons/WarningTriangleIcon.js.map +1 -0
  507. package/dist/components/CustomIcons/WebhookEventsIcon.js +28 -0
  508. package/dist/components/CustomIcons/WebhookEventsIcon.js.map +1 -0
  509. package/dist/components/CustomIcons/WebhookIcon.js +28 -0
  510. package/dist/components/CustomIcons/WebhookIcon.js.map +1 -0
  511. package/dist/components/CustomIcons/WebhookSigningSecretIcon.js +21 -0
  512. package/dist/components/CustomIcons/WebhookSigningSecretIcon.js.map +1 -0
  513. package/dist/components/CustomIcons/index.js +328 -0
  514. package/dist/components/CustomIcons/index.js.map +1 -0
  515. package/dist/components/DefinitionRow.js +15 -0
  516. package/dist/components/DefinitionRow.js.map +1 -0
  517. package/dist/components/DisclosureArrow.js +20 -0
  518. package/dist/components/DisclosureArrow.js.map +1 -0
  519. package/dist/components/Divider.js +59 -0
  520. package/dist/components/Divider.js.map +1 -0
  521. package/dist/components/Dropdown.js +847 -0
  522. package/dist/components/Dropdown.js.map +1 -0
  523. package/dist/components/FieldBlock.js +25 -0
  524. package/dist/components/FieldBlock.js.map +1 -0
  525. package/dist/components/FieldGroup.js +23 -0
  526. package/dist/components/FieldGroup.js.map +1 -0
  527. package/dist/components/FieldMessage.js +15 -0
  528. package/dist/components/FieldMessage.js.map +1 -0
  529. package/dist/components/Flex.js +45 -0
  530. package/dist/components/Flex.js.map +1 -0
  531. package/dist/components/FooterLinks.js +88 -0
  532. package/dist/components/FooterLinks.js.map +1 -0
  533. package/dist/components/FooterNav.js +19 -0
  534. package/dist/components/FooterNav.js.map +1 -0
  535. package/dist/components/Form.js +26 -0
  536. package/dist/components/Form.js.map +1 -0
  537. package/dist/components/FormItem.js +32 -0
  538. package/dist/components/FormItem.js.map +1 -0
  539. package/dist/components/FormSectionHeading.js +20 -0
  540. package/dist/components/FormSectionHeading.js.map +1 -0
  541. package/dist/components/InlineConfirm.js +129 -0
  542. package/dist/components/InlineConfirm.js.map +1 -0
  543. package/dist/components/Input/Input.js +302 -0
  544. package/dist/components/Input/Input.js.map +1 -0
  545. package/dist/components/KeyValueList.js +26 -0
  546. package/dist/components/KeyValueList.js.map +1 -0
  547. package/dist/components/Link.js +47 -0
  548. package/dist/components/Link.js.map +1 -0
  549. package/dist/components/LoadingBar.js +85 -0
  550. package/dist/components/LoadingBar.js.map +1 -0
  551. package/dist/components/LoadingInput.js +29 -0
  552. package/dist/components/LoadingInput.js.map +1 -0
  553. package/dist/components/MalachiteContext.js +18 -0
  554. package/dist/components/MalachiteContext.js.map +1 -0
  555. package/dist/components/Modal.js +212 -0
  556. package/dist/components/Modal.js.map +1 -0
  557. package/dist/components/MultiSelect.js +643 -0
  558. package/dist/components/MultiSelect.js.map +1 -0
  559. package/dist/components/NumberTag.js +22 -0
  560. package/dist/components/NumberTag.js.map +1 -0
  561. package/dist/components/OverflowRow.js +153 -0
  562. package/dist/components/OverflowRow.js.map +1 -0
  563. package/dist/components/Padded.js +39 -0
  564. package/dist/components/Padded.js.map +1 -0
  565. package/dist/components/PageLayout/constants.js +12 -0
  566. package/dist/components/PageLayout/constants.js.map +1 -0
  567. package/dist/components/PageLayout/emptyLayout.js +61 -0
  568. package/dist/components/PageLayout/emptyLayout.js.map +1 -0
  569. package/dist/components/PageLayout/index.js +10 -0
  570. package/dist/components/PageLayout/index.js.map +1 -0
  571. package/dist/components/PageLayout/regularLayout.js +177 -0
  572. package/dist/components/PageLayout/regularLayout.js.map +1 -0
  573. package/dist/components/PillButton.js +70 -0
  574. package/dist/components/PillButton.js.map +1 -0
  575. package/dist/components/PreviewTree.js +49 -0
  576. package/dist/components/PreviewTree.js.map +1 -0
  577. package/dist/components/Progress.js +69 -0
  578. package/dist/components/Progress.js.map +1 -0
  579. package/dist/components/QueryInput.js +370 -0
  580. package/dist/components/QueryInput.js.map +1 -0
  581. package/dist/components/Radio.js +63 -0
  582. package/dist/components/Radio.js.map +1 -0
  583. package/dist/components/Search.js +54 -0
  584. package/dist/components/Search.js.map +1 -0
  585. package/dist/components/SegmentedControl.js +107 -0
  586. package/dist/components/SegmentedControl.js.map +1 -0
  587. package/dist/components/SelectableCard.js +364 -0
  588. package/dist/components/SelectableCard.js.map +1 -0
  589. package/dist/components/SelectionBar.js +103 -0
  590. package/dist/components/SelectionBar.js.map +1 -0
  591. package/dist/components/SettingRow.js +40 -0
  592. package/dist/components/SettingRow.js.map +1 -0
  593. package/dist/components/ShadowEscape.js +166 -0
  594. package/dist/components/ShadowEscape.js.map +1 -0
  595. package/dist/components/SidePanel.js +140 -0
  596. package/dist/components/SidePanel.js.map +1 -0
  597. package/dist/components/SidePanelNavFooter.js +46 -0
  598. package/dist/components/SidePanelNavFooter.js.map +1 -0
  599. package/dist/components/Skeleton.js +106 -0
  600. package/dist/components/Skeleton.js.map +1 -0
  601. package/dist/components/Spacer.js +63 -0
  602. package/dist/components/Spacer.js.map +1 -0
  603. package/dist/components/Spinner.js +86 -0
  604. package/dist/components/Spinner.js.map +1 -0
  605. package/dist/components/SplitScreenLayout.js +51 -0
  606. package/dist/components/SplitScreenLayout.js.map +1 -0
  607. package/dist/components/StatBadge.js +10 -0
  608. package/dist/components/StatBadge.js.map +1 -0
  609. package/dist/components/Statistic.js +48 -0
  610. package/dist/components/Statistic.js.map +1 -0
  611. package/dist/components/StatusBadge.js +56 -0
  612. package/dist/components/StatusBadge.js.map +1 -0
  613. package/dist/components/StepTabs.js +52 -0
  614. package/dist/components/StepTabs.js.map +1 -0
  615. package/dist/components/Stepper.js +40 -0
  616. package/dist/components/Stepper.js.map +1 -0
  617. package/dist/components/Surface.js +143 -0
  618. package/dist/components/Surface.js.map +1 -0
  619. package/dist/components/Swatch.js +44 -0
  620. package/dist/components/Swatch.js.map +1 -0
  621. package/dist/components/Table/Table.js +1007 -0
  622. package/dist/components/Table/Table.js.map +1 -0
  623. package/dist/components/Table/TablePagination.js +205 -0
  624. package/dist/components/Table/TablePagination.js.map +1 -0
  625. package/dist/components/Tabs.js +35 -0
  626. package/dist/components/Tabs.js.map +1 -0
  627. package/dist/components/Tag.js +154 -0
  628. package/dist/components/Tag.js.map +1 -0
  629. package/dist/components/TextArea/TextArea.js +289 -0
  630. package/dist/components/TextArea/TextArea.js.map +1 -0
  631. package/dist/components/ThemeScope.js +14 -0
  632. package/dist/components/ThemeScope.js.map +1 -0
  633. package/dist/components/Toggle.js +115 -0
  634. package/dist/components/Toggle.js.map +1 -0
  635. package/dist/components/Toolbar.js +25 -0
  636. package/dist/components/Toolbar.js.map +1 -0
  637. package/dist/components/Tooltip.js +181 -0
  638. package/dist/components/Tooltip.js.map +1 -0
  639. package/dist/components/TruncatedTooltip.js +38 -0
  640. package/dist/components/TruncatedTooltip.js.map +1 -0
  641. package/dist/components/Typography/CodeText.js +49 -0
  642. package/dist/components/Typography/CodeText.js.map +1 -0
  643. package/dist/components/Typography/EllipsisText.js +27 -0
  644. package/dist/components/Typography/EllipsisText.js.map +1 -0
  645. package/dist/components/Typography/FormSectionTitle.js +21 -0
  646. package/dist/components/Typography/FormSectionTitle.js.map +1 -0
  647. package/dist/components/Typography/LinkText.js +32 -0
  648. package/dist/components/Typography/LinkText.js.map +1 -0
  649. package/dist/components/Typography/MarkdownBlock.js +304 -0
  650. package/dist/components/Typography/MarkdownBlock.js.map +1 -0
  651. package/dist/components/Typography/PageTitle.js +21 -0
  652. package/dist/components/Typography/PageTitle.js.map +1 -0
  653. package/dist/components/Typography/SecondaryText.js +51 -0
  654. package/dist/components/Typography/SecondaryText.js.map +1 -0
  655. package/dist/components/Typography/SectionTitle.js +16 -0
  656. package/dist/components/Typography/SectionTitle.js.map +1 -0
  657. package/dist/components/Typography/StatisticLabel.js +22 -0
  658. package/dist/components/Typography/StatisticLabel.js.map +1 -0
  659. package/dist/components/Typography/StatisticValue.js +21 -0
  660. package/dist/components/Typography/StatisticValue.js.map +1 -0
  661. package/dist/components/Typography/TerminalText.js +45 -0
  662. package/dist/components/Typography/TerminalText.js.map +1 -0
  663. package/dist/components/Typography/Text.js +31 -0
  664. package/dist/components/Typography/Text.js.map +1 -0
  665. package/dist/components/Typography/index.js +31 -0
  666. package/dist/components/Typography/index.js.map +1 -0
  667. package/dist/components/Typography/textStyles.js +66 -0
  668. package/dist/components/Typography/textStyles.js.map +1 -0
  669. package/dist/components/WizardLayout.js +113 -0
  670. package/dist/components/WizardLayout.js.map +1 -0
  671. package/dist/components/actionBarMenuItems.js +16 -0
  672. package/dist/components/actionBarMenuItems.js.map +1 -0
  673. package/dist/components/activeElement.js +11 -0
  674. package/dist/components/activeElement.js.map +1 -0
  675. package/dist/components/breadcrumbsNav.js +5 -0
  676. package/dist/components/breadcrumbsNav.js.map +1 -0
  677. package/dist/components/cardStripSlot.js +9 -0
  678. package/dist/components/cardStripSlot.js.map +1 -0
  679. package/dist/components/codeBlockDiff.js +78 -0
  680. package/dist/components/codeBlockDiff.js.map +1 -0
  681. package/dist/components/codeBlockLine.js +90 -0
  682. package/dist/components/codeBlockLine.js.map +1 -0
  683. package/dist/components/codeBlockStyles.js +20 -0
  684. package/dist/components/codeBlockStyles.js.map +1 -0
  685. package/dist/components/confirmationDialogVariants.js +30 -0
  686. package/dist/components/confirmationDialogVariants.js.map +1 -0
  687. package/dist/components/controlTextSize.js +14 -0
  688. package/dist/components/controlTextSize.js.map +1 -0
  689. package/dist/components/devWarning.js +22 -0
  690. package/dist/components/devWarning.js.map +1 -0
  691. package/dist/components/dividerTypes.js +7 -0
  692. package/dist/components/dividerTypes.js.map +1 -0
  693. package/dist/components/dropdownPanelPosition.js +38 -0
  694. package/dist/components/dropdownPanelPosition.js.map +1 -0
  695. package/dist/components/dropdownTriggerStyle.js +36 -0
  696. package/dist/components/dropdownTriggerStyle.js.map +1 -0
  697. package/dist/components/escapeLayers.js +13 -0
  698. package/dist/components/escapeLayers.js.map +1 -0
  699. package/dist/components/flexTypes.js +8 -0
  700. package/dist/components/flexTypes.js.map +1 -0
  701. package/dist/components/focusRing.js +9 -0
  702. package/dist/components/focusRing.js.map +1 -0
  703. package/dist/components/formItemState.js +12 -0
  704. package/dist/components/formItemState.js.map +1 -0
  705. package/dist/components/glassSurface.js +10 -0
  706. package/dist/components/glassSurface.js.map +1 -0
  707. package/dist/components/injectStyleSheet.js +33 -0
  708. package/dist/components/injectStyleSheet.js.map +1 -0
  709. package/dist/components/inlineConfirmPosition.js +27 -0
  710. package/dist/components/inlineConfirmPosition.js.map +1 -0
  711. package/dist/components/keyboardActivation.js +14 -0
  712. package/dist/components/keyboardActivation.js.map +1 -0
  713. package/dist/components/modalTray.js +16 -0
  714. package/dist/components/modalTray.js.map +1 -0
  715. package/dist/components/optionRowStyles.js +27 -0
  716. package/dist/components/optionRowStyles.js.map +1 -0
  717. package/dist/components/overlayBehaviour.js +118 -0
  718. package/dist/components/overlayBehaviour.js.map +1 -0
  719. package/dist/components/portalOverlay.js +35 -0
  720. package/dist/components/portalOverlay.js.map +1 -0
  721. package/dist/components/prismCedar.js +27 -0
  722. package/dist/components/prismCedar.js.map +1 -0
  723. package/dist/components/queryInputGeometry.js +24 -0
  724. package/dist/components/queryInputGeometry.js.map +1 -0
  725. package/dist/components/renderableNode.js +6 -0
  726. package/dist/components/renderableNode.js.map +1 -0
  727. package/dist/components/safeHref.js +11 -0
  728. package/dist/components/safeHref.js.map +1 -0
  729. package/dist/components/scrollLock.js +19 -0
  730. package/dist/components/scrollLock.js.map +1 -0
  731. package/dist/components/selectedRow.js +14 -0
  732. package/dist/components/selectedRow.js.map +1 -0
  733. package/dist/components/selectionBarChrome.js +63 -0
  734. package/dist/components/selectionBarChrome.js.map +1 -0
  735. package/dist/components/topLayer.js +29 -0
  736. package/dist/components/topLayer.js.map +1 -0
  737. package/dist/components/useAdoptedStyleSheet.js +41 -0
  738. package/dist/components/useAdoptedStyleSheet.js.map +1 -0
  739. package/dist/geist-font.js +23 -0
  740. package/dist/geist-font.js.map +1 -0
  741. package/dist/index.d.ts +1045 -89
  742. package/dist/index.js +403 -104
  743. package/dist/index.js.map +1 -1
  744. package/dist/inter-font.js +35 -0
  745. package/dist/inter-font.js.map +1 -0
  746. package/dist/stack-sans-font.js +17 -0
  747. package/dist/stack-sans-font.js.map +1 -0
  748. package/dist/tailwind.css.js +5 -0
  749. package/dist/tailwind.css.js.map +1 -0
  750. package/dist/theme.js +1959 -0
  751. package/dist/theme.js.map +1 -0
  752. package/dist/vendor/@fontsource/geist-sans/files/geist-sans-latin-400-normal.woff2.js +5 -0
  753. package/dist/vendor/@fontsource/geist-sans/files/geist-sans-latin-400-normal.woff2.js.map +1 -0
  754. package/dist/vendor/@fontsource/geist-sans/files/geist-sans-latin-500-normal.woff2.js +5 -0
  755. package/dist/vendor/@fontsource/geist-sans/files/geist-sans-latin-500-normal.woff2.js.map +1 -0
  756. package/dist/vendor/@fontsource/inter/files/inter-latin-400-normal.woff2.js +5 -0
  757. package/dist/vendor/@fontsource/inter/files/inter-latin-400-normal.woff2.js.map +1 -0
  758. package/dist/vendor/@fontsource/inter/files/inter-latin-500-normal.woff2.js +5 -0
  759. package/dist/vendor/@fontsource/inter/files/inter-latin-500-normal.woff2.js.map +1 -0
  760. package/dist/vendor/@fontsource/inter/files/inter-latin-600-normal.woff2.js +5 -0
  761. package/dist/vendor/@fontsource/inter/files/inter-latin-600-normal.woff2.js.map +1 -0
  762. package/dist/vendor/@fontsource/inter/files/inter-latin-700-normal.woff2.js +5 -0
  763. package/dist/vendor/@fontsource/inter/files/inter-latin-700-normal.woff2.js.map +1 -0
  764. package/dist/vendor/@fontsource/inter/files/inter-latin-ext-400-normal.woff2.js +5 -0
  765. package/dist/vendor/@fontsource/inter/files/inter-latin-ext-400-normal.woff2.js.map +1 -0
  766. package/dist/vendor/@fontsource/inter/files/inter-latin-ext-500-normal.woff2.js +5 -0
  767. package/dist/vendor/@fontsource/inter/files/inter-latin-ext-500-normal.woff2.js.map +1 -0
  768. package/dist/vendor/@fontsource/inter/files/inter-latin-ext-600-normal.woff2.js +5 -0
  769. package/dist/vendor/@fontsource/inter/files/inter-latin-ext-600-normal.woff2.js.map +1 -0
  770. package/dist/vendor/@fontsource/inter/files/inter-latin-ext-700-normal.woff2.js +5 -0
  771. package/dist/vendor/@fontsource/inter/files/inter-latin-ext-700-normal.woff2.js.map +1 -0
  772. package/dist/vendor/@fontsource-variable/stack-sans-text/files/stack-sans-text-latin-wght-normal.woff2.js +5 -0
  773. package/dist/vendor/@fontsource-variable/stack-sans-text/files/stack-sans-text-latin-wght-normal.woff2.js.map +1 -0
  774. package/package.json +6 -1
  775. package/dist/CodeBlockHighlighter-BJeE32YS.js +0 -2791
  776. package/dist/CodeBlockHighlighter-BJeE32YS.js.map +0 -1
  777. package/dist/index-P2H4or4t.js +0 -19528
  778. package/dist/index-P2H4or4t.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Dropdown.js","sources":["../../src/components/Dropdown.tsx"],"sourcesContent":["import React, {\n useId,\n useState,\n useRef,\n useEffect,\n useInsertionEffect,\n useLayoutEffect,\n useCallback,\n} from 'react';\nimport { createPortal } from 'react-dom';\nimport { Control, FieldPath, FieldValues } from 'react-hook-form';\nimport BaseFormComponent, { type RequiredIndicator, useFormFieldIds } from './BaseFormComponent';\nimport CaretDownIcon from './CustomIcons/CaretDownIcon';\nimport CloseIcon from './CustomIcons/CloseIcon';\nimport FieldMessage from './FieldMessage';\nimport LoadingInput from './LoadingInput';\nimport Spinner from './Spinner';\nimport Tooltip from './Tooltip';\nimport { CONTROL_TEXT_SIZE, CONTROL_TEXT_SIZE_CLASS } from './controlTextSize';\nimport {\n PANEL_VIEWPORT_PADDING_PX,\n computePanelGeometry,\n isContentSizedPanel,\n isTriggerOffscreen,\n rectSignature,\n} from './dropdownPanelPosition';\nimport { DROPDOWN_TRIGGER_ATTR, type DropdownTone, getTriggerVisual } from './dropdownTriggerStyle';\nimport { pushEscapeLayer } from './escapeLayers';\nimport { ensureDropdownPanelStyles } from './optionRowStyles';\nimport { overlayIdentity } from './portalOverlay';\nimport { useTopLayer } from './topLayer';\n\nexport type { DropdownTone };\n\nexport interface DropdownItem {\n id: string;\n label: string;\n icon?: React.ReactNode;\n /** Alternate label shown in the closed trigger when selected (falls back to `label`). */\n triggerLabel?: string;\n /** Items sharing a `group` render under a section header, in first-seen order. */\n group?: string;\n subtitle?: string;\n rightSideText?: string;\n rightSideTextVariant?: 'muted' | 'primary';\n rightSideTextAlignment?: 'left' | 'right';\n}\n\ninterface DropdownBaseProps {\n label?: string;\n hint?: string;\n tooltip?: string;\n name: FieldPath<FieldValues> | string;\n loading?: boolean;\n menuLoading?: boolean;\n items: DropdownItem[];\n onItemSelected?: (id?: string) => void;\n defaultValue?: string;\n /** Controlled selection. When set, the trigger always reflects this id and the component\n * keeps no selection state of its own. Pass it with `onItemSelected`. */\n value?: string;\n disabled?: boolean;\n error?: boolean;\n /** `pending` marks a value the user still has to supply. Outranks open and selection. */\n tone?: DropdownTone;\n className?: string;\n formControl?: Control<FieldValues, unknown>;\n description?: string;\n required?: boolean;\n requiredIndicator?: RequiredIndicator;\n helperText?: React.ReactNode;\n placeholder?: string;\n subtitleLayout?: SubtitleLayout;\n /** Adds a clear control to the trigger, reported as `onItemSelected(undefined)`. */\n clearable?: boolean;\n /** 'large' (42px) for form inputs; 'medium' (32px) for toolbar chips; 'small' (28px) beside a title. */\n size?: DropdownSize;\n /** Fills the container instead of sizing to content, and matches the panel to the trigger. */\n fullWidth?: boolean;\n /** Names the trigger from the light DOM, where `htmlFor` cannot reach into the shadow root. */\n id?: string;\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n}\n\n/**\n * The search trigger is a single-line text input with nowhere for a second line, so\n * `showSubtitleInTrigger` is rejected alongside `search` rather than silently ignored.\n */\ntype DropdownTriggerModeProps =\n | {\n search?: false;\n /** Promotes the selected item's `subtitle` into the closed trigger, beneath the value. */\n showSubtitleInTrigger?: boolean;\n }\n | { search: true; showSubtitleInTrigger?: never };\n\nexport type DropdownProps = DropdownBaseProps & DropdownTriggerModeProps;\n\n/**\n * Matches Button and the Figma component library: 28 / 32 / 42px. These names moved up a\n * tier in 0.71 — what was `xsmall`/`small`/`medium` is now `small`/`medium`/`large`.\n */\nexport type DropdownSize = 'small' | 'medium' | 'large';\n\nexport type SubtitleLayout = 'inline' | 'stacked';\n\n// Floating-panel positioning constants. Behavioural margins, not visual\n// design tokens — they govern how close the portaled panel can sit to the\n// trigger and to the viewport edges. If a theme spacing scale lands later,\n// these become the single point of override.\n\nconst PANEL_MESSAGE_STYLE: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 8,\n padding: '24px 16px',\n color: 'var(--malachite-text-dimmed, rgb(161, 161, 161))',\n};\n\n// Figma pins the option's inline annotation at 11px on every tier — unlike the label,\n// it does not ride the ladder (Item Large 68:2617, Item Medium 2343:2134).\nconst ANNOTATION_FONT_SIZE = 'var(--malachite-font-size-xsmall, 11px)';\n\nconst OPTION_SELECTOR = '[data-dropdown-option]';\n\nconst panelOptions = (panel: HTMLElement | null): HTMLElement[] =>\n Array.from(panel?.querySelectorAll<HTMLElement>(OPTION_SELECTOR) ?? []);\n\nconst matchesSearch = (item: DropdownItem, query: string) => {\n const q = query.toLowerCase();\n const labelMatches = item.label.toLowerCase().includes(q);\n const subtitleMatches = item.subtitle ? item.subtitle.toLowerCase().includes(q) : false;\n const rightSideTextMatches = item.rightSideText\n ? item.rightSideText.toLowerCase().includes(q)\n : false;\n return labelMatches || subtitleMatches || rightSideTextMatches;\n};\n\nconst TRIGGER_SIZE_HEIGHT: Record<DropdownSize, string> = {\n small: 'h-[var(--malachite-control-height-small,28px)]',\n medium: 'h-[var(--malachite-control-height-medium,32px)]',\n large: 'h-[var(--malachite-control-height-large,42px)]',\n};\n\nconst TRIGGER_SIZE_CLASSES: Record<DropdownSize, string> = {\n small: `${TRIGGER_SIZE_HEIGHT.small} px-2.5 py-1.5 ${CONTROL_TEXT_SIZE_CLASS.small}`,\n medium: `${TRIGGER_SIZE_HEIGHT.medium} px-3 py-1.5 ${CONTROL_TEXT_SIZE_CLASS.medium}`,\n large: `${TRIGGER_SIZE_HEIGHT.large} px-4 py-2.5 ${CONTROL_TEXT_SIZE_CLASS.large}`,\n};\n\nconst TRIGGER_SIZE_STACKED_CLASSES: Record<DropdownSize, string> = {\n small: `min-h-[var(--malachite-control-height-small,28px)] px-2.5 py-1.5 ${CONTROL_TEXT_SIZE_CLASS.small}`,\n medium: `min-h-[var(--malachite-control-height-medium,32px)] px-3 py-1.5 ${CONTROL_TEXT_SIZE_CLASS.medium}`,\n large: `min-h-[var(--malachite-control-height-large,42px)] px-4 py-2.5 ${CONTROL_TEXT_SIZE_CLASS.large}`,\n};\n\nconst CLEAR_OFFSET_CLASSES: Record<DropdownSize, string> = {\n small: 'right-[26px] size-4',\n medium: 'right-[30px] size-4',\n large: 'right-[38px] size-4',\n};\n\nconst CLEAR_STACKED_TOP_CLASSES: Record<DropdownSize, string> = {\n small: 'top-[calc(var(--malachite-control-height-small,28px)/2)] -translate-y-1/2',\n medium: 'top-[calc(var(--malachite-control-height-medium,32px)/2)] -translate-y-1/2',\n large: 'top-[calc(var(--malachite-control-height-large,42px)/2)] -translate-y-1/2',\n};\n\n// Radius tracks the tier in Figma: 10 / 12 / 14. Only 12 has a --malachite-radius-* rung.\nconst TRIGGER_SIZE_RADIUS: Record<DropdownSize, string> = {\n small: 'rounded-[var(--malachite-radius-10,10px)]',\n medium: 'rounded-xl',\n large: 'rounded-[var(--malachite-radius-xxl,14px)]',\n};\n\nconst NEVER = () => false;\n\ntype TruncatedTriggerLines = 'value' | 'subtitle' | 'both';\n\n// Portaled to document.body, outside the shadow root: styling here has to be inline.\nconst TOOLTIP_LINES_STYLE: React.CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: 4,\n};\n\nconst triggerTooltipText = (\n lines: TruncatedTriggerLines,\n valueText: React.ReactNode,\n subtitle: React.ReactNode,\n): React.ReactNode => {\n if (lines === 'value') {\n return valueText;\n }\n if (lines === 'subtitle') {\n return subtitle;\n }\n return (\n <span style={TOOLTIP_LINES_STYLE}>\n <span>{valueText}</span>\n <span>{subtitle}</span>\n </span>\n );\n};\n\nconst ValueRow: React.FC<{ wrap: boolean; id?: string; children: React.ReactNode }> = ({\n wrap,\n id,\n children,\n}) =>\n wrap ? (\n <span id={id} className=\"min-w-0 flex items-center gap-2\">\n {children}\n </span>\n ) : (\n <>{children}</>\n );\n\nconst LabelRow: React.FC<{ row: boolean; children: React.ReactNode }> = ({ row, children }) =>\n row ? (\n <span style={{ display: 'flex', alignItems: 'center', gap: 8, minWidth: 0 }}>\n {children}\n </span>\n ) : (\n <>{children}</>\n );\n\ninterface DropdownTriggerProps {\n isOpen: boolean;\n onClick: () => void;\n selectedItem: DropdownItem | undefined;\n hasClear?: boolean;\n onClear?: (event: React.MouseEvent<HTMLButtonElement>) => void;\n clearLabel?: string;\n disabled?: boolean;\n error?: boolean;\n tone?: DropdownTone;\n placeholder?: string;\n search?: boolean;\n showSubtitleInTrigger?: boolean;\n searchQuery?: string;\n onSearchChange?: (value: string) => void;\n onFocusOpen?: () => void;\n /** ArrowDown on the trigger: opens the menu, or steps into it if already open. */\n onArrowDown?: () => void;\n size?: DropdownSize;\n controlId: string;\n labelId?: string;\n describedBy?: string;\n required?: boolean;\n ariaLabel?: string;\n ariaLabelledBy?: string;\n /** A caller-supplied id means an external `<label for>` may be naming the control. */\n hasCallerId?: boolean;\n}\n\nconst DropdownTrigger = React.forwardRef<HTMLElement, DropdownTriggerProps>(\n (\n {\n isOpen,\n onClick,\n selectedItem,\n disabled = false,\n error = false,\n tone,\n placeholder,\n search = false,\n showSubtitleInTrigger = false,\n searchQuery = '',\n onSearchChange,\n onFocusOpen,\n onArrowDown,\n size = 'large',\n hasClear = false,\n onClear,\n clearLabel,\n controlId,\n labelId,\n describedBy,\n required = false,\n ariaLabel,\n ariaLabelledBy,\n hasCallerId = false,\n },\n forwardedRef,\n ) => {\n const stacked = showSubtitleInTrigger && !search && !!selectedItem?.subtitle;\n const sizeClasses = stacked\n ? TRIGGER_SIZE_STACKED_CLASSES[size]\n : TRIGGER_SIZE_CLASSES[size];\n const sizeRadius = TRIGGER_SIZE_RADIUS[size];\n const valueId = `${controlId}-value`;\n const subtitleId = `${controlId}-subtitle`;\n // aria-labelledby outranks aria-label in the accessible-name algorithm, so the\n // generated label+value pair has to be dropped for a caller's aria-label to apply.\n // Named off nothing, the button takes its name from every descendant — the subtitle\n // included, which `aria-describedby` then repeats. Naming it off the value alone fixes\n // that, but only where nothing else already names the control.\n const namesItself = !labelId && !ariaLabel && !hasCallerId && stacked;\n const labelledBy =\n ariaLabelledBy ??\n (labelId && !ariaLabel ? `${labelId} ${valueId}` : undefined) ??\n (namesItself ? valueId : undefined);\n\n const handleArrowDown = (event: React.KeyboardEvent): void => {\n if (event.key !== 'ArrowDown') {\n return;\n }\n event.preventDefault();\n onArrowDown?.();\n };\n\n const valueTextRef = useRef<HTMLSpanElement>(null);\n const subtitleTextRef = useRef<HTMLSpanElement>(null);\n const triggerVisual = getTriggerVisual({ disabled, error, tone, open: isOpen });\n const showValueLabel = !isOpen && !!selectedItem;\n const valueText = selectedItem?.triggerLabel ?? selectedItem?.label;\n const triggerSubtitle = stacked ? selectedItem?.subtitle : undefined;\n const isValueTruncated = () => {\n const el = valueTextRef.current;\n return !!el && el.scrollWidth > el.clientWidth;\n };\n const isSubtitleTruncated = () => {\n const el = subtitleTextRef.current;\n return !!el && el.scrollWidth > el.clientWidth;\n };\n\n // A tooltip reads its text at render, but which line is cut off is only knowable on\n // hover — so the one measurement pass that decides whether to show also records what\n // to say. The initial value never shows: untruncated, the tooltip refuses to open.\n const [truncatedLines, setTruncatedLines] = useState<TruncatedTriggerLines>('subtitle');\n const measureTruncatedLines = () => {\n const value = isValueTruncated();\n const subtitle = isSubtitleTruncated();\n if (!value && !subtitle) {\n return false;\n }\n setTruncatedLines(value && subtitle ? 'both' : value ? 'value' : 'subtitle');\n return true;\n };\n\n if (search && !disabled) {\n return (\n <div\n ref={forwardedRef as React.Ref<HTMLDivElement>}\n className={`\n relative w-full ${sizeClasses} ${sizeRadius}\n border border-solid\n transition-all duration-200\n flex items-center\n `}\n style={triggerVisual}\n {...{ [DROPDOWN_TRIGGER_ATTR]: '' }}\n onClick={(e) => e.stopPropagation()}\n >\n {selectedItem?.icon && (\n <span className=\"flex shrink-0 items-center justify-center pr-2\">\n {selectedItem.icon}\n </span>\n )}\n <Tooltip text={valueText} shouldShow={isValueTruncated} isShrinkable fill>\n <div className=\"relative flex-1 flex items-center\">\n {showValueLabel && (\n <span\n aria-hidden=\"true\"\n className=\"absolute inset-0 flex items-center pointer-events-none\"\n >\n <span\n ref={valueTextRef}\n className=\"min-w-0 block truncate text-[length:inherit]\n text-[var(--malachite-text-primary)]\"\n >\n {valueText}\n </span>\n </span>\n )}\n <input\n id={controlId}\n type=\"text\"\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n aria-invalid={error || undefined}\n aria-required={required || undefined}\n aria-describedby={describedBy}\n value={isOpen ? searchQuery : (selectedItem?.label ?? '')}\n onChange={(e) => {\n e.stopPropagation();\n onSearchChange?.(e.target.value);\n if (!isOpen) {\n onClick();\n }\n }}\n onFocus={() => {\n onFocusOpen?.();\n }}\n onKeyDown={handleArrowDown}\n placeholder={placeholder ?? 'Select Field'}\n className={`flex-1 bg-transparent outline-none\n text-[length:inherit] font-normal\n placeholder:text-[var(--malachite-text-dimmed)] ${\n showValueLabel\n ? 'text-transparent'\n : 'text-[var(--malachite-text-primary)]'\n }`}\n />\n </div>\n </Tooltip>\n {hasClear && (\n <button\n type=\"button\"\n aria-label={clearLabel}\n onClick={onClear}\n className=\"flex shrink-0 items-center justify-center pl-2 cursor-pointer\n bg-transparent border-none p-0 text-[var(--malachite-text-placeholder)]\n hover:text-[var(--malachite-text-primary)] transition-colors\n rounded-full focus-visible:[outline:2px_solid_var(--malachite-text-primary)] focus-visible:outline-offset-2\"\n >\n <CloseIcon size={13} />\n </button>\n )}\n <div className=\"flex items-center justify-center pl-2\">\n {/* Mouse-only affordance: the input beside it already opens the menu on\n click and focus, so this stays out of the tab order to avoid a\n duplicate stop — but it must still be a button, not a click-handling\n span, so it is exposed and activatable rather than invisible. */}\n <button\n type=\"button\"\n tabIndex={-1}\n aria-label={isOpen ? 'Close options' : 'Open options'}\n onClick={(e) => {\n e.stopPropagation();\n onClick();\n }}\n className=\"flex items-center justify-center cursor-pointer bg-transparent border-none p-0\"\n >\n <CaretDownIcon\n size={13}\n style={{\n color: isOpen\n ? 'var(--malachite-text-primary, rgb(10, 10, 10))'\n : 'var(--malachite-text-placeholder, rgb(187, 187, 187))',\n transition: 'transform 0.2s ease, color 0.2s ease',\n transform: isOpen ? 'rotate(180deg)' : 'rotate(0deg)',\n }}\n />\n </button>\n </div>\n </div>\n );\n }\n\n const trigger = (\n <button\n ref={forwardedRef as React.Ref<HTMLButtonElement>}\n id={controlId}\n type=\"button\"\n aria-label={ariaLabel}\n aria-labelledby={labelledBy}\n aria-invalid={error || undefined}\n aria-required={required || undefined}\n aria-describedby={\n [describedBy, triggerSubtitle ? subtitleId : undefined]\n .filter(Boolean)\n .join(' ') || undefined\n }\n onClick={(e) => {\n e.stopPropagation();\n onClick();\n }}\n onKeyDown={handleArrowDown}\n disabled={disabled}\n style={triggerVisual}\n {...{ [DROPDOWN_TRIGGER_ATTR]: '' }}\n className={`\n relative w-full ${sizeClasses} ${sizeRadius}\n border border-solid\n transition-all duration-200\n flex ${stacked ? 'items-start' : 'items-center'} gap-3\n cursor-pointer\n disabled:cursor-not-allowed\n `}\n >\n {/* Spans: <button> takes phrasing content only. */}\n <span\n id={triggerSubtitle ? undefined : valueId}\n className={`text-left flex-1 min-w-0 flex ${\n triggerSubtitle ? 'flex-col gap-1' : 'items-center gap-2'\n }`}\n >\n {selectedItem ? (\n <>\n <ValueRow wrap={!!triggerSubtitle} id={valueId}>\n {selectedItem.icon && (\n <span className=\"flex items-center justify-center shrink-0\">\n {selectedItem.icon}\n </span>\n )}\n <Tooltip\n text={valueText}\n shouldShow={triggerSubtitle ? NEVER : isValueTruncated}\n triggerAs={triggerSubtitle ? 'span' : 'div'}\n isShrinkable\n >\n <span\n ref={valueTextRef}\n className={`min-w-0 block truncate text-[length:inherit] ${\n disabled\n ? 'text-[var(--malachite-text-placeholder)]'\n : 'text-[var(--malachite-text-primary)]'\n }`}\n >\n {valueText}\n </span>\n </Tooltip>\n </ValueRow>\n {triggerSubtitle && (\n <span\n id={subtitleId}\n ref={subtitleTextRef}\n className=\"min-w-0 block truncate text-[length:var(--malachite-font-size-xsmall,11px)] text-[var(--malachite-text-secondary,rgb(123,123,123))] leading-normal\"\n >\n {triggerSubtitle}\n </span>\n )}\n </>\n ) : (\n <span\n className={`flex-1 min-w-0 truncate text-[length:inherit] ${\n disabled\n ? 'text-[var(--malachite-text-placeholder)]'\n : 'text-[var(--malachite-text-dimmed)]'\n }`}\n >\n {placeholder ?? 'Select Field'}\n </span>\n )}\n </span>\n {hasClear && <span aria-hidden=\"true\" className=\"shrink-0 w-4\" />}\n <span className=\"flex items-center justify-center shrink-0\">\n <CaretDownIcon\n size={13}\n style={{\n color: isOpen\n ? 'var(--malachite-text-primary, rgb(10, 10, 10))'\n : 'var(--malachite-text-placeholder, rgb(187, 187, 187))',\n transition: 'transform 0.2s ease, color 0.2s ease',\n transform: isOpen ? 'rotate(180deg)' : 'rotate(0deg)',\n }}\n />\n </span>\n </button>\n );\n\n // The button is what takes focus, so the tooltip wraps it rather than a line inside:\n // mounted on a line it could only ever open with a pointer, and nested tooltips opened\n // together on hover. Its text is already in the trigger's name and description, so it\n // repeats it visually only. `fill`, not `isShrinkable`, whose `overflow: hidden` would\n // clip the error ring the button paints outside its border box.\n // Gated on the prop, not on there being a subtitle to show: keyed off the selection the\n // wrapper would appear on the first choice, remounting the button `focusTrigger` has\n // just handed focus back to and dropping the keyboard user at <body>.\n return showSubtitleInTrigger && !search ? (\n <Tooltip\n text={triggerTooltipText(truncatedLines, valueText, triggerSubtitle)}\n shouldShow={triggerSubtitle ? measureTruncatedLines : NEVER}\n fill\n describesTrigger={false}\n >\n {trigger}\n </Tooltip>\n ) : (\n trigger\n );\n },\n);\nDropdownTrigger.displayName = 'DropdownTrigger';\n\ninterface DropdownItemComponentProps {\n item: DropdownItem;\n selected: boolean;\n subtitleLayout: SubtitleLayout;\n onItemSelected: (item: DropdownItem) => void;\n}\n\nconst DropdownItemComponent = ({\n item,\n selected,\n subtitleLayout,\n onItemSelected,\n}: DropdownItemComponentProps) => {\n const textColor = selected\n ? 'var(--malachite-accent-foreground, rgb(2, 122, 66))'\n : 'var(--malachite-text-primary, rgb(10, 10, 10))';\n const stacked = subtitleLayout === 'stacked' && !!item.subtitle;\n const optionId = `mal-${useId().replace(/[^a-zA-Z0-9_-]/g, '')}`;\n const optionLabelId = `${optionId}-label`;\n const optionSubtitleId = `${optionId}-subtitle`;\n const subtitleRef = useRef<HTMLSpanElement>(null);\n const isSubtitleTruncated = () => {\n const el = subtitleRef.current;\n return !!el && el.scrollWidth > el.clientWidth + 1;\n };\n\n // Default to muted so right-side metadata (e.g. category tags) de-emphasises\n // against the primary item label. Consumers can opt back in with 'primary'.\n const rightSideTextColor =\n item.rightSideTextVariant === 'primary'\n ? 'var(--malachite-text-right-side-text-primary, rgb(10, 10, 10))'\n : 'var(--malachite-text-right-side-text-muted, rgb(123, 123, 123))';\n\n const rightSideJustify = item.rightSideTextAlignment === 'left' ? 'flex-start' : 'flex-end';\n\n const option = (\n // `role=\"option\"` would be invalid — nothing here declares a `listbox`, and an\n // orphaned option is dropped from the a11y tree. `aria-current`, not\n // `aria-pressed`: these are one-of-many choices, not toggles. tabIndex={-1}\n // because the portaled panel is outside the trigger's tab order; DropdownPanel\n // focuses an option on open and arrow keys move between them.\n <button\n type=\"button\"\n data-dropdown-option=\"\"\n data-selected={selected}\n aria-current={selected || undefined}\n // Unnamed, the option takes its name from everything inside it — a sentence-length\n // subtitle included.\n aria-labelledby={item.subtitle ? optionLabelId : undefined}\n aria-describedby={item.subtitle ? optionSubtitleId : undefined}\n tabIndex={-1}\n onClick={(e) => {\n e.stopPropagation();\n onItemSelected(item);\n }}\n className=\"malachite-dropdown-option\"\n style={{\n minHeight: 38,\n borderRadius: 8,\n display: 'flex',\n alignItems: 'center',\n padding: 10,\n gap: 12,\n cursor: 'pointer',\n transition: 'background-color 120ms ease',\n // Reset the UA button chrome. Background is deliberately absent — see PANEL_RULES.\n width: '100%',\n border: 'none',\n textAlign: 'left',\n font: 'inherit',\n color: 'inherit',\n }}\n >\n {/* Spans: <button> takes phrasing content only. `minWidth: 0` so a long,\n unwrappable subtitle ellipsises instead of stretching the option. */}\n <span\n style={{\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n gap: 12,\n ...(stacked ? { minWidth: 0 } : {}),\n }}\n >\n <span style={{ flex: 1, display: 'block', ...(stacked ? { minWidth: 0 } : {}) }}>\n <span\n style={\n stacked\n ? { display: 'flex', flexDirection: 'column', gap: 2 }\n : { display: 'flex', alignItems: 'center', gap: 8 }\n }\n >\n <LabelRow row={stacked && !!item.icon}>\n {item.icon && (\n <span\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n }}\n >\n {item.icon}\n </span>\n )}\n <span\n id={item.subtitle ? optionLabelId : undefined}\n style={{\n fontWeight: 400,\n color: textColor,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n minWidth: 0,\n }}\n >\n {item.label}\n </span>\n </LabelRow>\n {item.subtitle &&\n (stacked ? (\n <span\n id={optionSubtitleId}\n ref={subtitleRef}\n style={{\n fontSize: ANNOTATION_FONT_SIZE,\n fontWeight: 400,\n lineHeight: 1.4,\n color: selected\n ? textColor\n : 'var(--malachite-text-dimmed, rgb(161, 161, 161))',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }}\n >\n {item.subtitle}\n </span>\n ) : (\n <>\n <span\n style={{\n fontSize: ANNOTATION_FONT_SIZE,\n fontWeight: 400,\n color: 'var(--malachite-text-secondary, rgb(123, 123, 123))',\n flexShrink: 0,\n }}\n >\n |\n </span>\n <span\n id={optionSubtitleId}\n style={{\n fontSize: ANNOTATION_FONT_SIZE,\n fontWeight: 400,\n color: 'var(--malachite-text-secondary, rgb(123, 123, 123))',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n minWidth: 0,\n }}\n >\n {item.subtitle}\n </span>\n </>\n ))}\n </span>\n </span>\n <span\n style={{\n // Reserved only when there is something to put there: an empty slot\n // still holding its width truncates the label and subtitle early.\n minWidth: item.rightSideText\n ? 'var(--malachite-text-right-side-text-min-width, 80px)'\n : 0,\n flexShrink: 1,\n display: 'flex',\n justifyContent: rightSideJustify,\n }}\n >\n {item.rightSideText && (\n <span\n style={{\n fontSize: 'var(--malachite-text-right-side-text-font-size, 12px)',\n fontWeight: 400,\n color: rightSideTextColor,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n minWidth: 0,\n }}\n >\n {item.rightSideText}\n </span>\n )}\n </span>\n </span>\n </button>\n );\n\n // Focus lands on the option itself, and focusin does not reach a descendant, so a keyboard\n // user could never open a tooltip mounted inside it.\n return stacked ? (\n <Tooltip\n text={item.subtitle}\n shouldShow={isSubtitleTruncated}\n isShrinkable\n describesTrigger={false}\n >\n {option}\n </Tooltip>\n ) : (\n option\n );\n};\n\ninterface DropdownPanelProps {\n items: DropdownItem[];\n onItemSelected: (item?: DropdownItem) => void;\n selectedItem: DropdownItem | undefined;\n menuLoading?: boolean;\n emptyMessage: string;\n /** Focus an option on open. False in search mode, where the input keeps focus. */\n autoFocus: boolean;\n /** Panel has been measured. It renders `visibility: hidden` until then, and a\n * hidden element cannot take focus, so open-time focus has to wait for this. */\n positioned: boolean;\n /** Close the panel and hand focus back to the trigger. */\n onDismiss: () => void;\n subtitleLayout: SubtitleLayout;\n size: DropdownSize;\n}\n\nconst DropdownPanel = React.forwardRef<\n HTMLDivElement,\n DropdownPanelProps & { style?: React.CSSProperties }\n>((props, ref) => {\n const {\n items,\n onItemSelected,\n selectedItem,\n menuLoading,\n emptyMessage,\n autoFocus,\n positioned,\n onDismiss,\n subtitleLayout,\n size,\n style,\n } = props;\n const panelRef = useRef<HTMLDivElement | null>(null);\n\n // The panel only mounts while open, so no condition. useInsertionEffect, not layout:\n // it runs before the DOM mutation, so the rules are in place before the rows are inserted.\n useInsertionEffect(() => {\n ensureDropdownPanelStyles();\n }, []);\n\n useTopLayer(panelRef, true);\n\n // Start on the selected option so Enter re-confirms the current value. Not keyed on\n // `items`: re-running as the filtered list changes would yank focus back to the top.\n useEffect(() => {\n if (!autoFocus || !positioned) {\n return;\n }\n const options = panelOptions(panelRef.current);\n const selected = options.find((option) => option.dataset.selected === 'true');\n // Falls back to the panel: with no options nothing else can hold focus, and Tab-dismiss\n // only fires from inside it.\n (selected ?? options[0] ?? panelRef.current)?.focus();\n }, [autoFocus, positioned]);\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>): void => {\n // The panel is portaled to document.body, so the browser's next tab stop bears no\n // relation to the trigger. Dismissing restores trigger focus so Tab resumes there.\n if (event.key === 'Tab') {\n onDismiss();\n return;\n }\n const options = panelOptions(panelRef.current);\n if (options.length === 0) {\n return;\n }\n const current = options.indexOf(document.activeElement as HTMLElement);\n const target = {\n ArrowDown: current + 1,\n ArrowUp: current - 1,\n Home: 0,\n End: options.length - 1,\n }[event.key];\n if (target === undefined) {\n return;\n }\n event.preventDefault();\n options[Math.min(Math.max(target, 0), options.length - 1)]?.focus();\n };\n\n // Inline styles, not Tailwind: this portals into document.body, outside the\n // Shadow DOM the malachite stylesheet is adopted into.\n return (\n <div\n ref={(node) => {\n panelRef.current = node;\n if (typeof ref === 'function') {\n ref(node);\n } else if (ref) {\n ref.current = node;\n }\n }}\n {...overlayIdentity('dropdown')}\n tabIndex={-1}\n onKeyDown={handleKeyDown}\n style={{\n background: 'var(--malachite-card-background, rgb(255, 255, 255))',\n border: '1px solid var(--malachite-card-border, rgb(232, 232, 232))',\n borderRadius: 12,\n boxShadow: '0px 2px 5px 0px rgba(0, 0, 0, 0.1)',\n maxHeight: 400,\n overflow: 'hidden',\n fontSize: CONTROL_TEXT_SIZE[size],\n ...style,\n }}\n >\n {menuLoading ? (\n <div style={PANEL_MESSAGE_STYLE}>\n <Spinner size=\"xxxsmall\" />\n <span>Loading…</span>\n </div>\n ) : items.length === 0 ? (\n <div style={PANEL_MESSAGE_STYLE}>{emptyMessage}</div>\n ) : (\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: 4,\n padding: 4,\n maxHeight: 400,\n overflowY: 'auto',\n scrollbarWidth: 'thin',\n scrollbarColor:\n 'var(--malachite-text-placeholder, rgb(187, 187, 187)) transparent',\n }}\n >\n {items.map((item, index) => {\n const prev = items[index - 1];\n const showGroupHeader =\n !!item.group && (!prev || prev.group !== item.group);\n return (\n <div key={item.id} style={{ flexShrink: 0 }}>\n {showGroupHeader && (\n <div\n style={{\n padding: '6px 10px 4px',\n fontSize: 12,\n fontWeight: 500,\n color: 'var(--malachite-text-secondary, rgb(123, 123, 123))',\n textTransform: 'none',\n userSelect: 'none',\n }}\n >\n {item.group}\n </div>\n )}\n <DropdownItemComponent\n item={item}\n onItemSelected={onItemSelected}\n subtitleLayout={subtitleLayout}\n selected={item.id === selectedItem?.id || false}\n />\n </div>\n );\n })}\n </div>\n )}\n </div>\n );\n});\nDropdownPanel.displayName = 'DropdownPanel';\n\nexport const Dropdown = ({\n items,\n onItemSelected,\n defaultValue,\n value,\n disabled = false,\n error,\n tone,\n label,\n hint,\n tooltip,\n name,\n required = false,\n requiredIndicator,\n loading,\n menuLoading,\n formControl,\n description,\n helperText,\n placeholder,\n search = false,\n showSubtitleInTrigger = false,\n subtitleLayout = 'inline',\n clearable = false,\n size = 'large',\n fullWidth = false,\n id,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n}: DropdownProps) => {\n const { controlId, labelId, descriptionId, hintId, helperTextId } = useFormFieldIds({\n id,\n label,\n description,\n hint,\n helperText: true,\n });\n const [isOpen, setIsOpen] = useState(false);\n // The id, never the resolved item: a cached object goes stale when `items` is rebuilt.\n const [ownValue, setOwnValue] = useState(defaultValue);\n const selectedId = value ?? ownValue;\n const selectedItem = items.find((item) => item.id === selectedId);\n const showClear = clearable && selectedId !== undefined && selectedId !== '' && !disabled;\n const triggerIsStacked = showSubtitleInTrigger && !search && !!selectedItem?.subtitle;\n const clearLabel = `Clear ${label ?? placeholder ?? 'selection'}`;\n\n // `defaultValue` only seeds the state, so a later change has to be pushed in.\n const lastDefaultValueRef = useRef(defaultValue);\n useEffect(() => {\n if (lastDefaultValueRef.current === defaultValue) {\n return;\n }\n lastDefaultValueRef.current = defaultValue;\n setOwnValue(defaultValue);\n }, [defaultValue]);\n const [searchQuery, setSearchQuery] = useState('');\n // Search mode only: set when the panel is opened by ArrowDown, so focus follows the\n // user into the list on mount instead of staying in the input.\n const [focusPanelOnOpen, setFocusPanelOnOpen] = useState(false);\n const dropdownRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLElement>(null);\n const panelRef = useRef<HTMLDivElement>(null);\n const [panelPosition, setPanelPosition] = useState<{\n top: number;\n left: number;\n width: number;\n openUp: boolean;\n } | null>(null);\n\n const reopenOnFocusRef = useRef(true);\n\n // In search mode the trigger is a wrapper div; the focusable part is the input.\n const focusTrigger = useCallback(() => {\n const trigger = triggerRef.current;\n if (!trigger) {\n return;\n }\n (trigger instanceof HTMLButtonElement\n ? trigger\n : trigger.querySelector<HTMLElement>('input')\n )?.focus();\n }, []);\n\n const handleClear = useCallback(\n (event: React.MouseEvent<HTMLButtonElement>) => {\n event.stopPropagation();\n setOwnValue(undefined);\n // The resolver is told the empty this form started the field at; the public\n // callback keeps reporting `undefined` whatever shape that is.\n reportSelectionRef.current?.(reportEmptyRef.current);\n onItemSelected?.(undefined);\n\n if (search) {\n reopenOnFocusRef.current = false;\n }\n focusTrigger();\n },\n [onItemSelected, search, focusTrigger],\n );\n\n const sizeRef = useRef(size);\n const fullWidthRef = useRef(fullWidth);\n const updatePanelPosition = useCallback(() => {\n const trigger = triggerRef.current;\n if (!trigger) return;\n\n setPanelPosition(\n computePanelGeometry({\n triggerRect: trigger.getBoundingClientRect(),\n panelWidth: panelRef.current?.offsetWidth ?? 0,\n panelHeight: panelRef.current?.offsetHeight ?? 0,\n size: sizeRef.current,\n fullWidth: fullWidthRef.current,\n viewportWidth: window.innerWidth,\n viewportHeight: window.innerHeight,\n }),\n );\n }, []);\n\n // Before the next frame, or `followTrigger` writes geometry off stale values and\n // `lastRect` stops it correcting. An open panel is remeasured here rather than left to\n // that loop, which only fires when the trigger's own rect moves.\n useLayoutEffect(() => {\n sizeRef.current = size;\n fullWidthRef.current = fullWidth;\n if (isOpen) {\n updatePanelPosition();\n }\n }, [size, fullWidth, isOpen, updatePanelPosition]);\n\n useEffect(() => {\n if (!isOpen) {\n setPanelPosition(null);\n setFocusPanelOnOpen(false);\n return;\n }\n updatePanelPosition();\n const handleClickOutside = (event: MouseEvent) => {\n const path = event.composedPath();\n const trigger = dropdownRef.current;\n const panel = panelRef.current;\n const inTrigger = !!trigger && path.includes(trigger);\n const inPanel = !!panel && path.includes(panel);\n if (!inTrigger && !inPanel) {\n setIsOpen(false);\n if (search) {\n setSearchQuery('');\n }\n // Closing unmounts whatever option held focus, so the focusout the wrapper\n // below listens for never fires. Clicking away from an open menu is the one\n // way of leaving the field that has to report the blur itself.\n reportBlurRef.current?.();\n }\n };\n // ESC via the shared layer stack: closes only the topmost overlay. Focus is\n // restored explicitly — unmounting the option it sits on would drop it to <body>.\n const popEscapeLayer = pushEscapeLayer(() => {\n setIsOpen(false);\n if (search) {\n setSearchQuery('');\n }\n focusTrigger();\n });\n const handleScrollOrResize = () => updatePanelPosition();\n\n // `scroll` is not composed: a window listener never hears a scroller inside a\n // consumer's shadow root, so the trigger's rect is tracked instead.\n let frame = 0;\n let lastRect = '';\n const followTrigger = () => {\n const trigger = triggerRef.current;\n if (trigger) {\n const rect = trigger.getBoundingClientRect();\n\n if (isTriggerOffscreen(rect, window.innerWidth, window.innerHeight)) {\n setIsOpen(false);\n if (search) {\n setSearchQuery('');\n }\n return;\n }\n\n const signature = rectSignature(rect);\n if (signature !== lastRect) {\n lastRect = signature;\n updatePanelPosition();\n }\n }\n frame = requestAnimationFrame(followTrigger);\n };\n frame = requestAnimationFrame(followTrigger);\n\n document.addEventListener('mousedown', handleClickOutside);\n window.addEventListener('scroll', handleScrollOrResize, true);\n window.addEventListener('resize', handleScrollOrResize);\n return () => {\n cancelAnimationFrame(frame);\n document.removeEventListener('mousedown', handleClickOutside);\n popEscapeLayer();\n window.removeEventListener('scroll', handleScrollOrResize, true);\n window.removeEventListener('resize', handleScrollOrResize);\n };\n }, [isOpen, search, updatePanelPosition, focusTrigger]);\n\n // Re-measure once the panel paints so open-up/down uses its real height.\n useLayoutEffect(() => {\n if (isOpen && panelRef.current) {\n updatePanelPosition();\n }\n }, [isOpen, updatePanelPosition]);\n\n const reportSelectionRef = useRef<((value: unknown) => void) | undefined>(undefined);\n const reportBlurRef = useRef<(() => void) | undefined>(undefined);\n const reportEmptyRef = useRef<unknown>('');\n\n const handleItemSelected = (item?: DropdownItem) => {\n setOwnValue(item?.id);\n reportSelectionRef.current?.(item?.id ?? reportEmptyRef.current);\n setIsOpen(false);\n if (search) {\n setSearchQuery('');\n // Focus returns to the search input, whose focus handler would reopen the panel.\n reopenOnFocusRef.current = false;\n }\n onItemSelected?.(item?.id);\n focusTrigger();\n };\n\n const dismissPanel = () => {\n setIsOpen(false);\n if (search) {\n setSearchQuery('');\n }\n focusTrigger();\n };\n\n // ArrowDown is the \"take me into the list\" gesture. When it also opens the panel the\n // intent carries over to the mount, so it doesn't cost a second press in search mode.\n const enterPanel = () => {\n const first = panelOptions(panelRef.current)[0];\n if (first) {\n first.focus();\n return;\n }\n setFocusPanelOnOpen(true);\n setIsOpen(true);\n };\n\n const visibleItems =\n search && searchQuery ? items.filter((item) => matchesSearch(item, searchQuery)) : items;\n\n return (\n <BaseFormComponent\n fullWidth={fullWidth}\n label={label}\n hint={hint}\n tooltip={tooltip}\n name={name}\n required={required}\n requiredIndicator={requiredIndicator}\n loading={loading}\n formControl={formControl}\n description={description}\n controlId={controlId}\n labelId={labelId}\n descriptionId={descriptionId}\n hintId={hintId}\n loadingComponent={\n <LoadingInput\n heightClass={TRIGGER_SIZE_HEIGHT[size]}\n helperText={!!helperText}\n helperTextMarginTop\n />\n }\n >\n {({ error: fieldError, message, onFieldChange, onFieldBlur, emptyValue }) => {\n reportSelectionRef.current = onFieldChange;\n reportBlurRef.current = onFieldBlur;\n reportEmptyRef.current = emptyValue;\n const isError = error ?? fieldError;\n // `error={false}` opts out of the resolver entirely, message included: a screen\n // that has dealt with the rejection its own way would otherwise keep reporting it.\n // The message is its own line rather than a replacement for the helper text,\n // matching Input and TextArea: a field that explains what it wants still has to\n // say why what was chosen was rejected.\n const errorMessage = error === false ? undefined : message;\n const errorMessageId = `${helperTextId}-error`;\n const describedBy =\n [\n descriptionId,\n hintId,\n helperText ? helperTextId : undefined,\n errorMessage ? errorMessageId : undefined,\n ]\n .filter(Boolean)\n .join(' ') || undefined;\n\n return (\n <>\n <div\n ref={dropdownRef}\n className={`relative w-full`}\n // Only leaving the field altogether is a blur `mode: 'onBlur'` should\n // hear. The panel is portaled to the body, so containment has to be\n // asked of it separately — otherwise opening the menu reads as\n // leaving, and the form validates before anything has been chosen.\n onBlur={(event) => {\n const next = event.relatedTarget as Node | null;\n const staysInField =\n event.currentTarget.contains(next) ||\n panelRef.current?.contains(next) === true;\n\n if (!staysInField) {\n reportBlurRef.current?.();\n }\n }}\n >\n {showClear && !search && (\n <button\n type=\"button\"\n onClick={handleClear}\n aria-label={clearLabel}\n className={`absolute ${\n triggerIsStacked\n ? CLEAR_STACKED_TOP_CLASSES[size]\n : 'top-1/2 -translate-y-1/2'\n } z-10 flex items-center\n justify-center rounded-full text-[var(--malachite-text-placeholder)]\n hover:text-[var(--malachite-text-primary)] transition-colors\n focus-visible:[outline:2px_solid_var(--malachite-text-primary)] focus-visible:outline-offset-2 ${CLEAR_OFFSET_CLASSES[size]}`}\n >\n <CloseIcon size={13} />\n </button>\n )}\n <DropdownTrigger\n hasClear={showClear}\n onClear={handleClear}\n clearLabel={clearLabel}\n ref={triggerRef as React.Ref<HTMLElement>}\n isOpen={isOpen}\n onClick={() => !disabled && setIsOpen(!isOpen)}\n selectedItem={selectedItem}\n disabled={disabled}\n error={isError}\n tone={tone}\n placeholder={placeholder}\n search={search}\n showSubtitleInTrigger={showSubtitleInTrigger}\n searchQuery={searchQuery}\n onSearchChange={setSearchQuery}\n onFocusOpen={() => {\n if (!reopenOnFocusRef.current) {\n reopenOnFocusRef.current = true;\n return;\n }\n setIsOpen(true);\n }}\n onArrowDown={() => {\n if (!disabled) {\n enterPanel();\n }\n }}\n size={size}\n controlId={controlId}\n hasCallerId={!!id}\n labelId={labelId}\n describedBy={describedBy}\n required={required}\n ariaLabel={ariaLabel}\n ariaLabelledBy={ariaLabelledBy}\n />\n {isOpen &&\n createPortal(\n <DropdownPanel\n ref={panelRef}\n style={{\n position: 'fixed',\n top: panelPosition?.top ?? 0,\n left: panelPosition?.left ?? 0,\n width: isContentSizedPanel(size, fullWidth)\n ? 'auto'\n : panelPosition?.width,\n maxWidth: isContentSizedPanel(size, fullWidth)\n ? `calc(100vw - ${PANEL_VIEWPORT_PADDING_PX * 2}px)`\n : undefined,\n visibility: panelPosition ? 'visible' : 'hidden',\n opacity: panelPosition ? 1 : 0,\n }}\n items={visibleItems}\n onItemSelected={handleItemSelected}\n selectedItem={selectedItem}\n menuLoading={menuLoading}\n emptyMessage={\n items.length === 0\n ? 'No options available'\n : 'No results found'\n }\n subtitleLayout={subtitleLayout}\n size={size}\n autoFocus={!search || focusPanelOnOpen}\n positioned={panelPosition !== null}\n onDismiss={dismissPanel}\n />,\n document.body,\n )}\n </div>\n {helperText && (\n <div\n id={helperTextId}\n className=\"mt-1 text-[length:var(--malachite-font-size-small,13px)] text-left pl-2 text-[var(--malachite-text-dimmed,rgb(161,161,161))]\"\n >\n {helperText}\n </div>\n )}\n <FieldMessage id={errorMessageId} message={errorMessage} spaced />\n </>\n );\n }}\n </BaseFormComponent>\n );\n};\n\nexport default Dropdown;\n"],"names":["PANEL_MESSAGE_STYLE","ANNOTATION_FONT_SIZE","OPTION_SELECTOR","panelOptions","panel","matchesSearch","item","query","q","labelMatches","subtitleMatches","rightSideTextMatches","TRIGGER_SIZE_HEIGHT","TRIGGER_SIZE_CLASSES","CONTROL_TEXT_SIZE_CLASS","TRIGGER_SIZE_STACKED_CLASSES","CLEAR_OFFSET_CLASSES","CLEAR_STACKED_TOP_CLASSES","TRIGGER_SIZE_RADIUS","NEVER","TOOLTIP_LINES_STYLE","triggerTooltipText","lines","valueText","subtitle","jsxs","jsx","ValueRow","wrap","id","children","Fragment","LabelRow","row","DropdownTrigger","React","isOpen","onClick","selectedItem","disabled","error","tone","placeholder","search","showSubtitleInTrigger","searchQuery","onSearchChange","onFocusOpen","onArrowDown","size","hasClear","onClear","clearLabel","controlId","labelId","describedBy","required","ariaLabel","ariaLabelledBy","hasCallerId","forwardedRef","stacked","sizeClasses","sizeRadius","valueId","subtitleId","namesItself","labelledBy","handleArrowDown","event","valueTextRef","useRef","subtitleTextRef","triggerVisual","getTriggerVisual","showValueLabel","triggerSubtitle","isValueTruncated","el","isSubtitleTruncated","truncatedLines","setTruncatedLines","useState","measureTruncatedLines","value","DROPDOWN_TRIGGER_ATTR","e","Tooltip","CloseIcon","CaretDownIcon","trigger","DropdownItemComponent","selected","subtitleLayout","onItemSelected","textColor","optionId","useId","optionLabelId","optionSubtitleId","subtitleRef","rightSideTextColor","rightSideJustify","option","DropdownPanel","props","ref","items","menuLoading","emptyMessage","autoFocus","positioned","onDismiss","style","panelRef","useInsertionEffect","ensureDropdownPanelStyles","useTopLayer","useEffect","options","_a","handleKeyDown","current","target","node","overlayIdentity","CONTROL_TEXT_SIZE","Spinner","index","prev","showGroupHeader","Dropdown","defaultValue","label","hint","tooltip","name","requiredIndicator","loading","formControl","description","helperText","clearable","fullWidth","descriptionId","hintId","helperTextId","useFormFieldIds","setIsOpen","ownValue","setOwnValue","selectedId","showClear","triggerIsStacked","lastDefaultValueRef","setSearchQuery","focusPanelOnOpen","setFocusPanelOnOpen","dropdownRef","triggerRef","panelPosition","setPanelPosition","reopenOnFocusRef","focusTrigger","useCallback","handleClear","reportSelectionRef","reportEmptyRef","sizeRef","fullWidthRef","updatePanelPosition","computePanelGeometry","_b","useLayoutEffect","handleClickOutside","path","inTrigger","inPanel","reportBlurRef","popEscapeLayer","pushEscapeLayer","handleScrollOrResize","frame","lastRect","followTrigger","rect","isTriggerOffscreen","signature","rectSignature","handleItemSelected","dismissPanel","enterPanel","first","visibleItems","BaseFormComponent","LoadingInput","fieldError","message","onFieldChange","onFieldBlur","emptyValue","isError","errorMessage","errorMessageId","next","createPortal","isContentSizedPanel","PANEL_VIEWPORT_PADDING_PX","FieldMessage"],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import { jsx as i, jsxs as m } from "react/jsx-runtime";
2
+ import o from "./Spacer.js";
3
+ import t from "./Typography/Text.js";
4
+ const l = (e) => e != null && e !== !1 && e !== !0 && e !== "", x = ({
5
+ label: e,
6
+ badge: s,
7
+ action: r,
8
+ helperText: c,
9
+ children: a,
10
+ className: d = "",
11
+ style: n
12
+ }) => /* @__PURE__ */ i("div", { className: d, style: n, children: /* @__PURE__ */ m(o, { direction: "vertical", size: 6, align: "stretch", fullWidth: !0, children: [
13
+ (l(e) || l(s) || l(r)) && /* @__PURE__ */ m("div", { className: "flex items-center gap-1.5 px-2", children: [
14
+ l(e) && /* @__PURE__ */ i(t, { size: "xsmall", color: "primary", fontWeight: "semi-bold", children: e }),
15
+ l(s) && /* @__PURE__ */ i("span", { className: "flex items-center", children: s }),
16
+ l(r) && /* @__PURE__ */ i("span", { className: "ml-auto flex", children: r })
17
+ ] }),
18
+ /* @__PURE__ */ i("div", { className: "px-2", children: a }),
19
+ l(c) && /* @__PURE__ */ i("div", { className: "px-2", children: /* @__PURE__ */ i(t, { size: "small", color: "dimmed", children: c }) })
20
+ ] }) });
21
+ export {
22
+ x as FieldBlock,
23
+ x as default
24
+ };
25
+ //# sourceMappingURL=FieldBlock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FieldBlock.js","sources":["../../src/components/FieldBlock.tsx"],"sourcesContent":["import React from 'react';\nimport Spacer from './Spacer';\nimport Text from './Typography/Text';\n\nexport interface FieldBlockProps {\n label?: string;\n /** Sits beside the label — a count, a status. */\n badge?: React.ReactNode;\n /** Sits at the far end of the label row — a copy button, a link. */\n action?: React.ReactNode;\n helperText?: React.ReactNode;\n children: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n}\n\n// `{cond && <Badge/>}` yields `false` when cond is false, and React paints it as nothing —\n// counted as present it opens an empty label row and the gap above it. `0` is a real badge.\nconst present = (node: React.ReactNode): boolean =>\n node !== undefined && node !== null && node !== false && node !== true && node !== '';\n\n/**\n * Something a form has to show but does not ask for — a computed list, a generated value —\n * wearing a field's anatomy: label, content, helper text, on a field's metrics.\n */\nexport const FieldBlock: React.FC<FieldBlockProps> = ({\n label,\n badge,\n action,\n helperText,\n children,\n className = '',\n style,\n}) => (\n <div className={className} style={style}>\n <Spacer direction=\"vertical\" size={6} align=\"stretch\" fullWidth>\n {(present(label) || present(badge) || present(action)) && (\n <div className=\"flex items-center gap-1.5 px-2\">\n {present(label) && (\n <Text size=\"xsmall\" color=\"primary\" fontWeight=\"semi-bold\">\n {label}\n </Text>\n )}\n {present(badge) && <span className=\"flex items-center\">{badge}</span>}\n {present(action) && <span className=\"ml-auto flex\">{action}</span>}\n </div>\n )}\n <div className=\"px-2\">{children}</div>\n {present(helperText) && (\n <div className=\"px-2\">\n <Text size=\"small\" color=\"dimmed\">\n {helperText}\n </Text>\n </div>\n )}\n </Spacer>\n </div>\n);\n\nexport default FieldBlock;\n"],"names":["present","node","FieldBlock","label","badge","action","helperText","children","className","style","jsx","jsxs","Spacer","Text"],"mappings":";;;AAkBA,MAAMA,IAAU,CAACC,MACSA,KAAS,QAAQA,MAAS,MAASA,MAAS,MAAQA,MAAS,IAM1EC,IAAwC,CAAC;AAAA,EAClD,OAAAC;AAAA,EACA,OAAAC;AAAA,EACA,QAAAC;AAAA,EACA,YAAAC;AAAA,EACA,UAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,OAAAC;AACJ,MACI,gBAAAC,EAAC,OAAA,EAAI,WAAAF,GAAsB,OAAAC,GACvB,UAAA,gBAAAE,EAACC,GAAA,EAAO,WAAU,YAAW,MAAM,GAAG,OAAM,WAAU,WAAS,IACzD,UAAA;AAAA,GAAAZ,EAAQG,CAAK,KAAKH,EAAQI,CAAK,KAAKJ,EAAQK,CAAM,MAChD,gBAAAM,EAAC,OAAA,EAAI,WAAU,kCACV,UAAA;AAAA,IAAAX,EAAQG,CAAK,KACV,gBAAAO,EAACG,GAAA,EAAK,MAAK,UAAS,OAAM,WAAU,YAAW,aAC1C,UAAAV,EAAA,CACL;AAAA,IAEHH,EAAQI,CAAK,uBAAM,QAAA,EAAK,WAAU,qBAAqB,UAAAA,GAAM;AAAA,IAC7DJ,EAAQK,CAAM,uBAAM,QAAA,EAAK,WAAU,gBAAgB,UAAAA,EAAA,CAAO;AAAA,EAAA,GAC/D;AAAA,EAEJ,gBAAAK,EAAC,OAAA,EAAI,WAAU,QAAQ,UAAAH,EAAA,CAAS;AAAA,EAC/BP,EAAQM,CAAU,KACf,gBAAAI,EAAC,SAAI,WAAU,QACX,UAAA,gBAAAA,EAACG,GAAA,EAAK,MAAK,SAAQ,OAAM,UACpB,aACL,EAAA,CACJ;AAAA,EAAA,CAER,EAAA,CACJ;"}
@@ -0,0 +1,23 @@
1
+ import { jsx as o } from "react/jsx-runtime";
2
+ const d = {
3
+ small: "gap-5",
4
+ medium: "gap-10",
5
+ large: "gap-[60px]"
6
+ }, s = ({
7
+ children: r,
8
+ gap: e = "medium",
9
+ className: l = "",
10
+ style: a
11
+ }) => /* @__PURE__ */ o(
12
+ "div",
13
+ {
14
+ className: `flex flex-col items-stretch w-full pl-5 border-l-2 border-solid border-[var(--malachite-card-border,rgb(232,232,232))] ${d[e]} ${l}`.trim(),
15
+ style: a,
16
+ children: r
17
+ }
18
+ );
19
+ export {
20
+ s as FieldGroup,
21
+ s as default
22
+ };
23
+ //# sourceMappingURL=FieldGroup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FieldGroup.js","sources":["../../src/components/FieldGroup.tsx"],"sourcesContent":["import React from 'react';\n\nexport type FieldGroupGap = 'small' | 'medium' | 'large';\n\nexport interface FieldGroupProps {\n children: React.ReactNode;\n gap?: FieldGroupGap;\n className?: string;\n style?: React.CSSProperties;\n}\n\nconst GAP_CLASSES: Record<FieldGroupGap, string> = {\n small: 'gap-5',\n medium: 'gap-10',\n large: 'gap-[60px]',\n};\n\n/**\n * Fields that follow from an answer given above them — the credentials a chosen\n * authentication type asks for, say — drawn as its children: indented, with a rule down the side.\n */\nexport const FieldGroup: React.FC<FieldGroupProps> = ({\n children,\n gap = 'medium',\n className = '',\n style,\n}) => (\n <div\n className={`flex flex-col items-stretch w-full pl-5 border-l-2 border-solid border-[var(--malachite-card-border,rgb(232,232,232))] ${GAP_CLASSES[gap]} ${className}`.trim()}\n style={style}\n >\n {children}\n </div>\n);\n\nexport default FieldGroup;\n"],"names":["GAP_CLASSES","FieldGroup","children","gap","className","style","jsx"],"mappings":";AAWA,MAAMA,IAA6C;AAAA,EAC/C,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AACX,GAMaC,IAAwC,CAAC;AAAA,EAClD,UAAAC;AAAA,EACA,KAAAC,IAAM;AAAA,EACN,WAAAC,IAAY;AAAA,EACZ,OAAAC;AACJ,MACI,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACG,WAAW,0HAA0HN,EAAYG,CAAG,CAAC,IAAIC,CAAS,GAAG,KAAA;AAAA,IACrK,OAAAC;AAAA,IAEC,UAAAH;AAAA,EAAA;AACL;"}
@@ -0,0 +1,15 @@
1
+ import { jsx as l } from "react/jsx-runtime";
2
+ const i = "text-[length:var(--malachite-font-size-small,13px)] text-left pl-2 text-[var(--malachite-destructive-foreground,rgb(196,62,62))]", s = ({ id: e, message: t, spaced: a = !1 }) => /* @__PURE__ */ l(
3
+ "div",
4
+ {
5
+ id: e,
6
+ "aria-live": "polite",
7
+ className: t ? `${a ? "mt-1 " : ""}${i}` : "absolute",
8
+ children: t
9
+ }
10
+ );
11
+ export {
12
+ s as FieldMessage,
13
+ s as default
14
+ };
15
+ //# sourceMappingURL=FieldMessage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FieldMessage.js","sources":["../../src/components/FieldMessage.tsx"],"sourcesContent":["import type React from 'react';\n\nconst MESSAGE_CLASSES =\n 'text-[length:var(--malachite-font-size-small,13px)] text-left pl-2 text-[var(--malachite-destructive-foreground,rgb(196,62,62))]';\n\ninterface FieldMessageProps {\n id?: string;\n message?: string;\n /** The controls that sit their message under a helper line need the gap; `Input` does not. */\n spaced?: boolean;\n}\n\n/**\n * A field's validation message. The live region is mounted whether or not there is anything\n * to say, because a region inserted with its text already inside it is not a mutation and\n * screen readers stay silent — which would lose the first rejection, the one that matters.\n * Out of flow while empty, so a flex parent's `gap` reserves no space beside it.\n */\nexport const FieldMessage: React.FC<FieldMessageProps> = ({ id, message, spaced = false }) => (\n <div\n id={id}\n // Polite rather than assertive: the message is also the field's description via\n // aria-describedby, and an interrupting region says it a second time.\n aria-live=\"polite\"\n className={message ? `${spaced ? 'mt-1 ' : ''}${MESSAGE_CLASSES}` : 'absolute'}\n >\n {message}\n </div>\n);\n\nexport default FieldMessage;\n"],"names":["MESSAGE_CLASSES","FieldMessage","id","message","spaced","jsx"],"mappings":";AAEA,MAAMA,IACF,oIAeSC,IAA4C,CAAC,EAAE,IAAAC,GAAI,SAAAC,GAAS,QAAAC,IAAS,SAC9E,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACG,IAAAH;AAAA,IAGA,aAAU;AAAA,IACV,WAAWC,IAAU,GAAGC,IAAS,UAAU,EAAE,GAAGJ,CAAe,KAAK;AAAA,IAEnE,UAAAG;AAAA,EAAA;AACL;"}
@@ -0,0 +1,45 @@
1
+ import { jsx as v } from "react/jsx-runtime";
2
+ import { FlexDirection as r, FlexAlign as g, FlexJustify as h, FlexGapSize as e } from "./flexTypes.js";
3
+ const y = (t) => {
4
+ switch (t) {
5
+ case e.XSmall:
6
+ return 8;
7
+ case e.Small:
8
+ return 12;
9
+ case e.Medium:
10
+ return 24;
11
+ case e.Large:
12
+ return 36;
13
+ }
14
+ }, z = ({
15
+ justify: t = h.Center,
16
+ align: o = g.Center,
17
+ gapSize: i,
18
+ direction: a = r.Horizontal,
19
+ fullHeight: n = !1,
20
+ grow: s = !1,
21
+ shrink: c = !1,
22
+ wrap: f = !1,
23
+ width: d,
24
+ id: x,
25
+ children: u,
26
+ className: m = ""
27
+ }) => {
28
+ const l = i ? y(i) : void 0, p = {
29
+ display: "flex",
30
+ flexDirection: a === r.Vertical ? "column" : "row",
31
+ flexWrap: f ? "wrap" : void 0,
32
+ justifyContent: t,
33
+ alignItems: o,
34
+ gap: l ? `${l}px` : void 0,
35
+ height: n ? "100%" : void 0,
36
+ flex: s ? 1 : void 0,
37
+ minWidth: c ? 0 : void 0,
38
+ width: d || void 0
39
+ };
40
+ return /* @__PURE__ */ v("div", { id: x, className: m, style: p, children: u });
41
+ };
42
+ export {
43
+ z as default
44
+ };
45
+ //# sourceMappingURL=Flex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Flex.js","sources":["../../src/components/Flex.tsx"],"sourcesContent":["import React from 'react';\nimport { FlexAlign, FlexDirection, FlexGapSize, FlexJustify } from './flexTypes';\n\n\n\n\n\ninterface FlexProps {\n justify?: FlexJustify;\n align?: FlexAlign;\n gapSize?: FlexGapSize;\n direction?: FlexDirection;\n fullHeight?: boolean;\n grow?: boolean;\n shrink?: boolean;\n wrap?: boolean;\n width?: string;\n id?: string;\n children?: React.ReactNode;\n className?: string;\n}\n\nconst getGapSize = (size: FlexGapSize): number => {\n switch (size) {\n case FlexGapSize.XSmall:\n return 8;\n case FlexGapSize.Small:\n return 12;\n case FlexGapSize.Medium:\n return 24;\n case FlexGapSize.Large:\n return 36;\n }\n};\n\nconst Flex: React.FC<FlexProps> = ({\n justify = FlexJustify.Center,\n align = FlexAlign.Center,\n gapSize,\n direction = FlexDirection.Horizontal,\n fullHeight = false,\n grow = false,\n shrink = false,\n wrap = false,\n width,\n id,\n children,\n className = '',\n}) => {\n const gapSizeValue = gapSize ? getGapSize(gapSize) : undefined;\n\n // Convert direction to CSS flex-direction\n const flexDirection = direction === FlexDirection.Vertical ? 'column' : 'row';\n\n const baseStyle: React.CSSProperties = {\n display: 'flex',\n flexDirection,\n flexWrap: wrap ? 'wrap' : undefined,\n justifyContent: justify,\n alignItems: align,\n gap: gapSizeValue ? `${gapSizeValue}px` : undefined,\n height: fullHeight ? '100%' : undefined,\n flex: grow ? 1 : undefined,\n minWidth: shrink ? 0 : undefined,\n width: width || undefined,\n };\n\n return (\n <div id={id} className={className} style={baseStyle}>\n {children}\n </div>\n );\n};\n\nexport default Flex;\n"],"names":["getGapSize","size","FlexGapSize","Flex","justify","FlexJustify","align","FlexAlign","gapSize","direction","FlexDirection","fullHeight","grow","shrink","wrap","width","id","children","className","gapSizeValue","baseStyle"],"mappings":";;AAsBA,MAAMA,IAAa,CAACC,MAA8B;AAC9C,UAAQA,GAAA;AAAA,IACJ,KAAKC,EAAY;AACb,aAAO;AAAA,IACX,KAAKA,EAAY;AACb,aAAO;AAAA,IACX,KAAKA,EAAY;AACb,aAAO;AAAA,IACX,KAAKA,EAAY;AACb,aAAO;AAAA,EAAA;AAEnB,GAEMC,IAA4B,CAAC;AAAA,EAC/B,SAAAC,IAAUC,EAAY;AAAA,EACtB,OAAAC,IAAQC,EAAU;AAAA,EAClB,SAAAC;AAAA,EACA,WAAAC,IAAYC,EAAc;AAAA,EAC1B,YAAAC,IAAa;AAAA,EACb,MAAAC,IAAO;AAAA,EACP,QAAAC,IAAS;AAAA,EACT,MAAAC,IAAO;AAAA,EACP,OAAAC;AAAA,EACA,IAAAC;AAAA,EACA,UAAAC;AAAA,EACA,WAAAC,IAAY;AAChB,MAAM;AACF,QAAMC,IAAeX,IAAUR,EAAWQ,CAAO,IAAI,QAK/CY,IAAiC;AAAA,IACnC,SAAS;AAAA,IACT,eAJkBX,MAAcC,EAAc,WAAW,WAAW;AAAA,IAKpE,UAAUI,IAAO,SAAS;AAAA,IAC1B,gBAAgBV;AAAA,IAChB,YAAYE;AAAA,IACZ,KAAKa,IAAe,GAAGA,CAAY,OAAO;AAAA,IAC1C,QAAQR,IAAa,SAAS;AAAA,IAC9B,MAAMC,IAAO,IAAI;AAAA,IACjB,UAAUC,IAAS,IAAI;AAAA,IACvB,OAAOE,KAAS;AAAA,EAAA;AAGpB,2BACK,OAAA,EAAI,IAAAC,GAAQ,WAAAE,GAAsB,OAAOE,GACrC,UAAAH,GACL;AAER;"}
@@ -0,0 +1,88 @@
1
+ import { jsxs as t, jsx as e } from "react/jsx-runtime";
2
+ import s from "../assets/logo-stackone-desaturated.png.js";
3
+ import n from "./Spacer.js";
4
+ import r from "./Typography/LinkText.js";
5
+ const h = ({
6
+ fullWidth: o = !1,
7
+ showDocsSupport: i = !1
8
+ }) => /* @__PURE__ */ t(
9
+ n,
10
+ {
11
+ direction: "horizontal",
12
+ size: 10,
13
+ fullWidth: o,
14
+ justifyContent: o ? "space-between" : void 0,
15
+ align: "center",
16
+ children: [
17
+ /* @__PURE__ */ e(r, { href: "https://www.stackone.com", target: "_blank", rel: "noopener noreferrer", children: /* @__PURE__ */ e(
18
+ "img",
19
+ {
20
+ src: s,
21
+ width: 16,
22
+ alt: "StackOne Logo",
23
+ style: {
24
+ opacity: 1,
25
+ marginLeft: "5px"
26
+ }
27
+ }
28
+ ) }),
29
+ i ? /* @__PURE__ */ t(n, { direction: "horizontal", size: 10, children: [
30
+ /* @__PURE__ */ e(
31
+ r,
32
+ {
33
+ href: "https://docs.stackone.com",
34
+ target: "_blank",
35
+ rel: "noopener noreferrer",
36
+ color: "dimmed",
37
+ fontSize: "sm",
38
+ padding: !0,
39
+ showLeftBorder: !o,
40
+ showRightBorder: !0,
41
+ children: "Docs"
42
+ }
43
+ ),
44
+ /* @__PURE__ */ e(
45
+ r,
46
+ {
47
+ href: "https://www.stackone.com/",
48
+ rel: "noopener noreferrer",
49
+ target: "_blank",
50
+ color: "dimmed",
51
+ fontSize: "sm",
52
+ children: "Support"
53
+ }
54
+ )
55
+ ] }) : /* @__PURE__ */ t(n, { direction: "horizontal", size: 10, children: [
56
+ /* @__PURE__ */ e(
57
+ r,
58
+ {
59
+ href: "https://www.stackone.com/terms/end-customer-terms",
60
+ target: "_blank",
61
+ rel: "noopener noreferrer",
62
+ color: "dimmed",
63
+ fontSize: "sm",
64
+ padding: !0,
65
+ showLeftBorder: !o,
66
+ showRightBorder: !0,
67
+ children: "Terms"
68
+ }
69
+ ),
70
+ /* @__PURE__ */ e(
71
+ r,
72
+ {
73
+ href: "https://www.stackone.com/terms/privacy-policy",
74
+ target: "_blank",
75
+ rel: "noopener noreferrer",
76
+ color: "dimmed",
77
+ fontSize: "sm",
78
+ children: "Privacy"
79
+ }
80
+ )
81
+ ] })
82
+ ]
83
+ }
84
+ );
85
+ export {
86
+ h as default
87
+ };
88
+ //# sourceMappingURL=FooterLinks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FooterLinks.js","sources":["../../src/components/FooterLinks.tsx"],"sourcesContent":["import React from 'react';\nimport StackOneLogoDesaturated from '../assets/logo-stackone-desaturated.png';\nimport Spacer from './Spacer';\nimport LinkText from './Typography/LinkText';\n\ninterface FooterLinksProps {\n fullWidth?: boolean;\n showDocsSupport?: boolean;\n}\n\nconst FooterLinks: React.FC<FooterLinksProps> = ({\n fullWidth = false,\n showDocsSupport = false,\n}) => {\n const renderLinks = () => {\n if (showDocsSupport) {\n return (\n <Spacer direction=\"horizontal\" size={10}>\n <LinkText\n href=\"https://docs.stackone.com\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n color=\"dimmed\"\n fontSize=\"sm\"\n padding={true}\n showLeftBorder={!fullWidth}\n showRightBorder={true}\n >\n Docs\n </LinkText>\n <LinkText\n href=\"https://www.stackone.com/\"\n rel=\"noopener noreferrer\"\n target=\"_blank\"\n color=\"dimmed\"\n fontSize=\"sm\"\n >\n Support\n </LinkText>\n </Spacer>\n );\n }\n\n return (\n <Spacer direction=\"horizontal\" size={10}>\n <LinkText\n href=\"https://www.stackone.com/terms/end-customer-terms\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n color=\"dimmed\"\n fontSize=\"sm\"\n padding={true}\n showLeftBorder={!fullWidth}\n showRightBorder={true}\n >\n Terms\n </LinkText>\n <LinkText\n href=\"https://www.stackone.com/terms/privacy-policy\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n color=\"dimmed\"\n fontSize=\"sm\"\n >\n Privacy\n </LinkText>\n </Spacer>\n );\n };\n\n return (\n <Spacer\n direction=\"horizontal\"\n size={10}\n fullWidth={fullWidth}\n justifyContent={fullWidth ? 'space-between' : undefined}\n align=\"center\"\n >\n <LinkText href=\"https://www.stackone.com\" target=\"_blank\" rel=\"noopener noreferrer\">\n <img\n src={StackOneLogoDesaturated}\n width={16}\n alt=\"StackOne Logo\"\n style={{\n opacity: 1,\n marginLeft: '5px',\n }}\n />\n </LinkText>\n {renderLinks()}\n </Spacer>\n );\n};\n\nexport default FooterLinks;\n"],"names":["FooterLinks","fullWidth","showDocsSupport","jsxs","Spacer","jsx","LinkText","StackOneLogoDesaturated"],"mappings":";;;;AAUA,MAAMA,IAA0C,CAAC;AAAA,EAC7C,WAAAC,IAAY;AAAA,EACZ,iBAAAC,IAAkB;AACtB,MA0DQ,gBAAAC;AAAA,EAACC;AAAA,EAAA;AAAA,IACG,WAAU;AAAA,IACV,MAAM;AAAA,IACN,WAAAH;AAAA,IACA,gBAAgBA,IAAY,kBAAkB;AAAA,IAC9C,OAAM;AAAA,IAEN,UAAA;AAAA,MAAA,gBAAAI,EAACC,KAAS,MAAK,4BAA2B,QAAO,UAAS,KAAI,uBAC1D,UAAA,gBAAAD;AAAA,QAAC;AAAA,QAAA;AAAA,UACG,KAAKE;AAAA,UACL,OAAO;AAAA,UACP,KAAI;AAAA,UACJ,OAAO;AAAA,YACH,SAAS;AAAA,YACT,YAAY;AAAA,UAAA;AAAA,QAChB;AAAA,MAAA,GAER;AAAA,MAzEAL,IAEI,gBAAAC,EAACC,GAAA,EAAO,WAAU,cAAa,MAAM,IACjC,UAAA;AAAA,QAAA,gBAAAC;AAAA,UAACC;AAAA,UAAA;AAAA,YACG,MAAK;AAAA,YACL,QAAO;AAAA,YACP,KAAI;AAAA,YACJ,OAAM;AAAA,YACN,UAAS;AAAA,YACT,SAAS;AAAA,YACT,gBAAgB,CAACL;AAAA,YACjB,iBAAiB;AAAA,YACpB,UAAA;AAAA,UAAA;AAAA,QAAA;AAAA,QAGD,gBAAAI;AAAA,UAACC;AAAA,UAAA;AAAA,YACG,MAAK;AAAA,YACL,KAAI;AAAA,YACJ,QAAO;AAAA,YACP,OAAM;AAAA,YACN,UAAS;AAAA,YACZ,UAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MAED,GACJ,IAKJ,gBAAAH,EAACC,GAAA,EAAO,WAAU,cAAa,MAAM,IACjC,UAAA;AAAA,QAAA,gBAAAC;AAAA,UAACC;AAAA,UAAA;AAAA,YACG,MAAK;AAAA,YACL,QAAO;AAAA,YACP,KAAI;AAAA,YACJ,OAAM;AAAA,YACN,UAAS;AAAA,YACT,SAAS;AAAA,YACT,gBAAgB,CAACL;AAAA,YACjB,iBAAiB;AAAA,YACpB,UAAA;AAAA,UAAA;AAAA,QAAA;AAAA,QAGD,gBAAAI;AAAA,UAACC;AAAA,UAAA;AAAA,YACG,MAAK;AAAA,YACL,QAAO;AAAA,YACP,KAAI;AAAA,YACJ,OAAM;AAAA,YACN,UAAS;AAAA,YACZ,UAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MAED,GACJ;AAAA,IAuBa;AAAA,EAAA;AAAA;"}
@@ -0,0 +1,19 @@
1
+ import { jsx as t, jsxs as l } from "react/jsx-runtime";
2
+ import s from "react";
3
+ const r = "text-[13px] font-medium no-underline text-[var(--malachite-text-placeholder)] hover:text-[var(--malachite-text-secondary)]", d = ({ links: c, className: o = "" }) => /* @__PURE__ */ t("nav", { className: `flex items-center justify-center gap-[8px] ${o}`, children: c.map((e, a) => /* @__PURE__ */ l(s.Fragment, { children: [
4
+ a > 0 && /* @__PURE__ */ t("span", { className: "text-[13px] text-[var(--malachite-card-border)]", children: "•" }),
5
+ e.href ? /* @__PURE__ */ t("a", { href: e.href, onClick: e.onClick, className: r, children: e.label }) : /* @__PURE__ */ t(
6
+ "button",
7
+ {
8
+ type: "button",
9
+ onClick: e.onClick,
10
+ className: `${r} bg-transparent border-0 cursor-pointer`,
11
+ children: e.label
12
+ }
13
+ )
14
+ ] }, `${a}-${e.label}`)) });
15
+ export {
16
+ d as FooterNav,
17
+ d as default
18
+ };
19
+ //# sourceMappingURL=FooterNav.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FooterNav.js","sources":["../../src/components/FooterNav.tsx"],"sourcesContent":["import React from 'react';\n\nexport interface FooterNavLink {\n label: string;\n href?: string;\n onClick?: () => void;\n}\n\nexport interface FooterNavProps {\n links: FooterNavLink[];\n className?: string;\n}\n\nconst ITEM_CLASSES =\n 'text-[13px] font-medium no-underline text-[var(--malachite-text-placeholder)] hover:text-[var(--malachite-text-secondary)]';\n\nconst FooterNav: React.FC<FooterNavProps> = ({ links, className = '' }) => (\n <nav className={`flex items-center justify-center gap-[8px] ${className}`}>\n {links.map((link, index) => (\n <React.Fragment key={`${index}-${link.label}`}>\n {index > 0 && (\n <span className=\"text-[13px] text-[var(--malachite-card-border)]\">•</span>\n )}\n {link.href ? (\n <a href={link.href} onClick={link.onClick} className={ITEM_CLASSES}>\n {link.label}\n </a>\n ) : (\n <button\n type=\"button\"\n onClick={link.onClick}\n className={`${ITEM_CLASSES} bg-transparent border-0 cursor-pointer`}\n >\n {link.label}\n </button>\n )}\n </React.Fragment>\n ))}\n </nav>\n);\n\nexport default FooterNav;\nexport { FooterNav };\n"],"names":["ITEM_CLASSES","FooterNav","links","className","link","index","jsxs","React","jsx"],"mappings":";;AAaA,MAAMA,IACF,8HAEEC,IAAsC,CAAC,EAAE,OAAAC,GAAO,WAAAC,IAAY,GAAA,wBAC7D,OAAA,EAAI,WAAW,8CAA8CA,CAAS,IAClE,YAAM,IAAI,CAACC,GAAMC,MACd,gBAAAC,EAACC,EAAM,UAAN,EACI,UAAA;AAAA,EAAAF,IAAQ,KACL,gBAAAG,EAAC,QAAA,EAAK,WAAU,mDAAkD,UAAA,KAAC;AAAA,EAEtEJ,EAAK,OACF,gBAAAI,EAAC,KAAA,EAAE,MAAMJ,EAAK,MAAM,SAASA,EAAK,SAAS,WAAWJ,GACjD,UAAAI,EAAK,OACV,IAEA,gBAAAI;AAAA,IAAC;AAAA,IAAA;AAAA,MACG,MAAK;AAAA,MACL,SAASJ,EAAK;AAAA,MACd,WAAW,GAAGJ,CAAY;AAAA,MAEzB,UAAAI,EAAK;AAAA,IAAA;AAAA,EAAA;AACV,EAAA,GAfa,GAAGC,CAAK,IAAID,EAAK,KAAK,EAiB3C,CACH,EAAA,CACL;"}
@@ -0,0 +1,26 @@
1
+ import { jsx as f } from "react/jsx-runtime";
2
+ const c = ({ children: r, onFinish: t, className: s = "" }) => /* @__PURE__ */ f(
3
+ "form",
4
+ {
5
+ onSubmit: (e) => {
6
+ if (e.preventDefault(), t) {
7
+ const o = new FormData(e.currentTarget), a = {};
8
+ for (const [m, n] of o.entries())
9
+ a[m] = n;
10
+ t(a);
11
+ }
12
+ },
13
+ className: `malachite-form space-y-4 ${s}`,
14
+ style: {
15
+ fontFamily: '"Inter", system-ui, -apple-system, sans-serif',
16
+ fontSize: "14px",
17
+ lineHeight: "1.5",
18
+ width: "100%"
19
+ },
20
+ children: r
21
+ }
22
+ );
23
+ export {
24
+ c as default
25
+ };
26
+ //# sourceMappingURL=Form.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Form.js","sources":["../../src/components/Form.tsx"],"sourcesContent":["import React from 'react';\nimport { type FieldValues, type UseFormReturn } from 'react-hook-form';\n\ninterface FormProps {\n children: React.ReactNode;\n onFinish?: (data: FieldValues) => void;\n formInstance?: UseFormReturn<FieldValues>;\n defaultValues?: FieldValues;\n className?: string;\n}\n\n// Simple form component that doesn't use hooks - relies on native form submission\nconst Form: React.FC<FormProps> = ({ children, onFinish, className = '' }) => {\n const handleSubmit = (event: React.FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n\n if (onFinish) {\n // Extract form data without using react-hook-form\n const formData = new FormData(event.currentTarget);\n const data: FieldValues = {};\n\n for (const [key, value] of formData.entries()) {\n data[key] = value;\n }\n\n onFinish(data);\n }\n };\n\n return (\n <form\n onSubmit={handleSubmit}\n className={`malachite-form space-y-4 ${className}`}\n style={{\n fontFamily: '\"Inter\", system-ui, -apple-system, sans-serif',\n fontSize: '14px',\n lineHeight: '1.5',\n width: '100%',\n }}\n >\n {children}\n </form>\n );\n};\n\nexport default Form;\n"],"names":["Form","children","onFinish","className","jsx","event","formData","data","key","value"],"mappings":";AAYA,MAAMA,IAA4B,CAAC,EAAE,UAAAC,GAAU,UAAAC,GAAU,WAAAC,IAAY,SAkB7D,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACG,UAlBa,CAACC,MAA4C;AAG9D,UAFAA,EAAM,eAAA,GAEFH,GAAU;AAEV,cAAMI,IAAW,IAAI,SAASD,EAAM,aAAa,GAC3CE,IAAoB,CAAA;AAE1B,mBAAW,CAACC,GAAKC,CAAK,KAAKH,EAAS;AAChC,UAAAC,EAAKC,CAAG,IAAIC;AAGhB,QAAAP,EAASK,CAAI;AAAA,MACjB;AAAA,IACJ;AAAA,IAKQ,WAAW,4BAA4BJ,CAAS;AAAA,IAChD,OAAO;AAAA,MACH,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,OAAO;AAAA,IAAA;AAAA,IAGV,UAAAF;AAAA,EAAA;AAAA;"}
@@ -0,0 +1,32 @@
1
+ import { jsx as m } from "react/jsx-runtime";
2
+ import { useRef as l } from "react";
3
+ import { Controller as p } from "react-hook-form";
4
+ import { emptyValueOf as i, renderFormItemChildren as c } from "./formItemState.js";
5
+ const v = ({ control: a, name: u, children: s }) => {
6
+ const o = l("");
7
+ return /* @__PURE__ */ m(
8
+ p,
9
+ {
10
+ control: a,
11
+ name: u,
12
+ render: ({ field: r, fieldState: e }) => {
13
+ var t;
14
+ e.isDirty || (o.current = i(r.value));
15
+ const n = {
16
+ error: !!e.error,
17
+ message: (t = e.error) == null ? void 0 : t.message,
18
+ onFieldChange: r.onChange,
19
+ onFieldBlur: r.onBlur,
20
+ emptyValue: o.current,
21
+ value: r.value
22
+ };
23
+ return /* @__PURE__ */ m("div", { "data-field-name": r.name, "data-has-error": n.error, children: c(s, n) });
24
+ }
25
+ }
26
+ );
27
+ };
28
+ export {
29
+ v as FormItem,
30
+ v as default
31
+ };
32
+ //# sourceMappingURL=FormItem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormItem.js","sources":["../../src/components/FormItem.tsx"],"sourcesContent":["import React, { useRef } from 'react';\nimport { type Control, Controller, type FieldPath, type FieldValues } from 'react-hook-form';\nimport {\n type FieldErrorState,\n type FormItemChildren,\n emptyValueOf,\n renderFormItemChildren,\n} from './formItemState';\n\ninterface FormItemProps {\n control: Control<FieldValues, unknown>;\n name: FieldPath<FieldValues>;\n children: FormItemChildren;\n}\n\nexport const FormItem: React.FC<FormItemProps> = ({ control, name, children }) => {\n // A pristine field is still showing this form's default for it, which is the only place\n // the shape the form uses for \"empty\" is observable. Re-read while pristine rather than\n // once: `reset()` and async defaults change that shape long after the first render.\n const emptyValueRef = useRef<unknown>('');\n\n return (\n <Controller\n control={control}\n name={name}\n render={({ field, fieldState }) => {\n if (!fieldState.isDirty) {\n emptyValueRef.current = emptyValueOf(field.value);\n }\n const state: FieldErrorState = {\n error: !!fieldState.error,\n message: fieldState.error?.message,\n onFieldChange: field.onChange,\n onFieldBlur: field.onBlur,\n emptyValue: emptyValueRef.current,\n value: field.value,\n };\n\n return (\n <div data-field-name={field.name} data-has-error={state.error}>\n {renderFormItemChildren(children, state)}\n </div>\n );\n }}\n />\n );\n};\n\nexport default FormItem;\n"],"names":["FormItem","control","name","children","emptyValueRef","useRef","jsx","Controller","field","fieldState","emptyValueOf","state","_a","renderFormItemChildren"],"mappings":";;;;AAeO,MAAMA,IAAoC,CAAC,EAAE,SAAAC,GAAS,MAAAC,GAAM,UAAAC,QAAe;AAI9E,QAAMC,IAAgBC,EAAgB,EAAE;AAExC,SACI,gBAAAC;AAAA,IAACC;AAAA,IAAA;AAAA,MACG,SAAAN;AAAA,MACA,MAAAC;AAAA,MACA,QAAQ,CAAC,EAAE,OAAAM,GAAO,YAAAC,QAAiB;;AAC/B,QAAKA,EAAW,YACZL,EAAc,UAAUM,EAAaF,EAAM,KAAK;AAEpD,cAAMG,IAAyB;AAAA,UAC3B,OAAO,CAAC,CAACF,EAAW;AAAA,UACpB,UAASG,IAAAH,EAAW,UAAX,gBAAAG,EAAkB;AAAA,UAC3B,eAAeJ,EAAM;AAAA,UACrB,aAAaA,EAAM;AAAA,UACnB,YAAYJ,EAAc;AAAA,UAC1B,OAAOI,EAAM;AAAA,QAAA;AAGjB,eACI,gBAAAF,EAAC,OAAA,EAAI,mBAAiBE,EAAM,MAAM,kBAAgBG,EAAM,OACnD,UAAAE,EAAuBV,GAAUQ,CAAK,EAAA,CAC3C;AAAA,MAER;AAAA,IAAA;AAAA,EAAA;AAGZ;"}
@@ -0,0 +1,20 @@
1
+ import { jsxs as l, jsx as e } from "react/jsx-runtime";
2
+ import { Divider as m } from "./Divider.js";
3
+ const d = ({
4
+ children: a,
5
+ rule: t = !0,
6
+ level: r = 3,
7
+ className: i = "",
8
+ style: n = {}
9
+ }) => {
10
+ const s = `h${r}`;
11
+ return /* @__PURE__ */ l("div", { className: `flex items-center gap-2 w-full px-2 ${i}`.trim(), style: n, children: [
12
+ /* @__PURE__ */ e(s, { className: "m-0 whitespace-nowrap shrink-0 text-[length:var(--malachite-font-size-small,13px)] font-normal leading-[1.6] text-[var(--malachite-text-secondary,rgb(123,123,123))]", children: a }),
13
+ t && /* @__PURE__ */ e("div", { className: "flex-auto min-w-0", children: /* @__PURE__ */ e(m, {}) })
14
+ ] });
15
+ };
16
+ export {
17
+ d as FormSectionHeading,
18
+ d as default
19
+ };
20
+ //# sourceMappingURL=FormSectionHeading.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormSectionHeading.js","sources":["../../src/components/FormSectionHeading.tsx"],"sourcesContent":["import React from 'react';\nimport Divider from './Divider';\n\nexport type FormSectionHeadingLevel = 2 | 3 | 4 | 5 | 6;\n\nexport interface FormSectionHeadingProps {\n children: React.ReactNode;\n /** The rule that runs from the label to the edge of the section. */\n rule?: boolean;\n /** Where the section sits in the page's heading hierarchy. */\n level?: FormSectionHeadingLevel;\n className?: string;\n style?: React.CSSProperties;\n}\n\n/**\n * Names a group of fields in a form and rules off the space beside it. Quieter than\n * `Typography.FormSectionTitle`, which titles a form rather than dividing one.\n */\nexport const FormSectionHeading: React.FC<FormSectionHeadingProps> = ({\n children,\n rule = true,\n level = 3,\n className = '',\n style = {},\n}) => {\n const HeadingTag: `h${FormSectionHeadingLevel}` = `h${level}`;\n\n return (\n <div className={`flex items-center gap-2 w-full px-2 ${className}`.trim()} style={style}>\n <HeadingTag className=\"m-0 whitespace-nowrap shrink-0 text-[length:var(--malachite-font-size-small,13px)] font-normal leading-[1.6] text-[var(--malachite-text-secondary,rgb(123,123,123))]\">\n {children}\n </HeadingTag>\n {rule && (\n <div className=\"flex-auto min-w-0\">\n <Divider />\n </div>\n )}\n </div>\n );\n};\n\nexport default FormSectionHeading;\n"],"names":["FormSectionHeading","children","rule","level","className","style","HeadingTag","jsxs","jsx","Divider"],"mappings":";;AAmBO,MAAMA,IAAwD,CAAC;AAAA,EAClE,UAAAC;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,OAAAC,IAAQ;AAAA,EACR,WAAAC,IAAY;AAAA,EACZ,OAAAC,IAAQ,CAAA;AACZ,MAAM;AACF,QAAMC,IAA4C,IAAIH,CAAK;AAE3D,SACI,gBAAAI,EAAC,SAAI,WAAW,uCAAuCH,CAAS,GAAG,QAAQ,OAAAC,GACvE,UAAA;AAAA,IAAA,gBAAAG,EAACF,GAAA,EAAW,WAAU,wKACjB,UAAAL,EAAA,CACL;AAAA,IACCC,KACG,gBAAAM,EAAC,OAAA,EAAI,WAAU,qBACX,UAAA,gBAAAA,EAACC,KAAQ,EAAA,CACb;AAAA,EAAA,GAER;AAER;"}