@stigmer/react 0.0.92 → 0.0.94

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 (328) hide show
  1. package/README.md +57 -12
  2. package/agent/AgentDetailView.js +7 -7
  3. package/agent/AgentDetailView.js.map +1 -1
  4. package/agent/AgentPicker.js +3 -3
  5. package/agent/AgentPicker.js.map +1 -1
  6. package/api-key/ApiKeyCreatedAlert.js +1 -1
  7. package/api-key/ApiKeyCreatedAlert.js.map +1 -1
  8. package/api-key/ApiKeyListPanel.js +4 -4
  9. package/api-key/ApiKeyListPanel.js.map +1 -1
  10. package/api-key/CreateApiKeyForm.js +1 -1
  11. package/api-key/CreateApiKeyForm.js.map +1 -1
  12. package/attachment/AttachmentChipList.js +2 -2
  13. package/attachment/AttachmentChipList.js.map +1 -1
  14. package/color-mode.d.ts +48 -0
  15. package/color-mode.d.ts.map +1 -0
  16. package/color-mode.js +53 -0
  17. package/color-mode.js.map +1 -0
  18. package/composer/ComposerToolbar.d.ts +6 -2
  19. package/composer/ComposerToolbar.d.ts.map +1 -1
  20. package/composer/ComposerToolbar.js +5 -3
  21. package/composer/ComposerToolbar.js.map +1 -1
  22. package/composer/ConfigureMenu.js +3 -3
  23. package/composer/ConfigureMenu.js.map +1 -1
  24. package/composer/ContextChip.js +1 -1
  25. package/composer/ContextChip.js.map +1 -1
  26. package/composer/ContextPopover.js +1 -1
  27. package/composer/ContextPopover.js.map +1 -1
  28. package/composer/SessionComposer.d.ts +24 -3
  29. package/composer/SessionComposer.d.ts.map +1 -1
  30. package/composer/SessionComposer.js +5 -4
  31. package/composer/SessionComposer.js.map +1 -1
  32. package/environment/CreateEnvironmentForm.js +1 -1
  33. package/environment/CreateEnvironmentForm.js.map +1 -1
  34. package/environment/EnvVarForm.js +2 -2
  35. package/environment/EnvVarForm.js.map +1 -1
  36. package/environment/EnvironmentListPanel.js +2 -2
  37. package/environment/EnvironmentListPanel.js.map +1 -1
  38. package/environment/EnvironmentVariableEditor.js +6 -6
  39. package/environment/EnvironmentVariableEditor.js.map +1 -1
  40. package/error/ErrorMessage.js +1 -1
  41. package/error/ErrorMessage.js.map +1 -1
  42. package/execution/ApprovalCard.js +4 -4
  43. package/execution/ApprovalCard.js.map +1 -1
  44. package/execution/ArtifactCard.js +1 -1
  45. package/execution/ArtifactCard.js.map +1 -1
  46. package/execution/ArtifactPreviewModal.js +4 -4
  47. package/execution/ArtifactPreviewModal.js.map +1 -1
  48. package/execution/FollowUpInput.js +1 -1
  49. package/execution/FollowUpInput.js.map +1 -1
  50. package/execution/McpToolDetail.js +4 -4
  51. package/execution/McpToolDetail.js.map +1 -1
  52. package/execution/MessageEntry.js +1 -1
  53. package/execution/MessageEntry.js.map +1 -1
  54. package/execution/MessageThread.js +1 -1
  55. package/execution/MessageThread.js.map +1 -1
  56. package/execution/SessionVariablesInput.js +4 -4
  57. package/execution/SessionVariablesInput.js.map +1 -1
  58. package/execution/SubAgentSection.js +2 -2
  59. package/execution/SubAgentSection.js.map +1 -1
  60. package/execution/ToolCallDetail.js +2 -2
  61. package/execution/ToolCallDetail.js.map +1 -1
  62. package/execution/ToolCallGroup.js +1 -1
  63. package/execution/ToolCallGroup.js.map +1 -1
  64. package/execution/ToolCallItem.js +2 -2
  65. package/execution/ToolCallItem.js.map +1 -1
  66. package/execution/WriteBackCard.js +3 -3
  67. package/execution/WriteBackCard.js.map +1 -1
  68. package/execution/tool-rendering-primitives.js +3 -3
  69. package/execution/tool-rendering-primitives.js.map +1 -1
  70. package/github/GitHubRepoPicker.js +5 -5
  71. package/github/GitHubRepoPicker.js.map +1 -1
  72. package/iam-policy/GrantAccessForm.js +1 -1
  73. package/iam-policy/GrantAccessForm.js.map +1 -1
  74. package/iam-policy/OrgMembersPanel.js +5 -5
  75. package/iam-policy/OrgMembersPanel.js.map +1 -1
  76. package/identity-provider/CreateIdentityProviderForm.js +3 -3
  77. package/identity-provider/CreateIdentityProviderForm.js.map +1 -1
  78. package/identity-provider/IdentityProviderDetailPanel.js +5 -5
  79. package/identity-provider/IdentityProviderDetailPanel.js.map +1 -1
  80. package/identity-provider/IdentityProviderListPanel.js +3 -3
  81. package/identity-provider/IdentityProviderListPanel.js.map +1 -1
  82. package/identity-provider/IdentityProviderWizard.js +7 -7
  83. package/identity-provider/IdentityProviderWizard.js.map +1 -1
  84. package/identity-provider/ProviderPicker.js +2 -2
  85. package/identity-provider/ProviderPicker.js.map +1 -1
  86. package/index.d.ts +8 -4
  87. package/index.d.ts.map +1 -1
  88. package/index.js +7 -3
  89. package/index.js.map +1 -1
  90. package/internal/CloudFeatureNotice.js +1 -1
  91. package/internal/CloudFeatureNotice.js.map +1 -1
  92. package/internal/Tabs.js +1 -1
  93. package/internal/Tabs.js.map +1 -1
  94. package/internal/markdown-components.js +2 -2
  95. package/internal/markdown-components.js.map +1 -1
  96. package/invitation/InvitationCreatedAlert.js +1 -1
  97. package/invitation/InvitationCreatedAlert.js.map +1 -1
  98. package/invitation/InvitationManager.js +5 -5
  99. package/invitation/InvitationManager.js.map +1 -1
  100. package/invitation/InvitationRedemption.js +4 -4
  101. package/invitation/InvitationRedemption.js.map +1 -1
  102. package/library/ResourceCountCard.js +1 -1
  103. package/library/ResourceCountCard.js.map +1 -1
  104. package/library/ResourceListView.js +5 -5
  105. package/library/ResourceListView.js.map +1 -1
  106. package/mcp-server/McpServerConfigPanel.js +5 -5
  107. package/mcp-server/McpServerConfigPanel.js.map +1 -1
  108. package/mcp-server/McpServerConnectDialog.js +4 -4
  109. package/mcp-server/McpServerConnectDialog.js.map +1 -1
  110. package/mcp-server/McpServerDetailView.js +14 -14
  111. package/mcp-server/McpServerDetailView.js.map +1 -1
  112. package/mcp-server/McpServerPicker.js +4 -4
  113. package/mcp-server/McpServerPicker.js.map +1 -1
  114. package/mcp-server/McpToolSelector.js +3 -3
  115. package/mcp-server/McpToolSelector.js.map +1 -1
  116. package/mcp-server/OAuthAppForm.js +1 -1
  117. package/mcp-server/OAuthAppForm.js.map +1 -1
  118. package/models/ModelSelector.js +1 -1
  119. package/models/ModelSelector.js.map +1 -1
  120. package/oauth-app/CreateOAuthAppForm.js +1 -1
  121. package/oauth-app/CreateOAuthAppForm.js.map +1 -1
  122. package/oauth-app/OAuthAppDetailPanel.js +3 -3
  123. package/oauth-app/OAuthAppDetailPanel.js.map +1 -1
  124. package/oauth-app/OAuthAppListPanel.js +2 -2
  125. package/oauth-app/OAuthAppListPanel.js.map +1 -1
  126. package/organization/CreateOrganizationForm.js +1 -1
  127. package/organization/CreateOrganizationForm.js.map +1 -1
  128. package/organization/OrgProfilePanel.js +3 -3
  129. package/organization/OrgProfilePanel.js.map +1 -1
  130. package/package.json +4 -4
  131. package/platform-client/CreatePlatformClientForm.js +2 -2
  132. package/platform-client/CreatePlatformClientForm.js.map +1 -1
  133. package/platform-client/PlatformClientDetailPanel.js +4 -4
  134. package/platform-client/PlatformClientDetailPanel.js.map +1 -1
  135. package/platform-client/PlatformClientListPanel.js +3 -3
  136. package/platform-client/PlatformClientListPanel.js.map +1 -1
  137. package/platform-client/PlatformClientSecretAlert.js +2 -2
  138. package/platform-client/PlatformClientSecretAlert.js.map +1 -1
  139. package/provider.d.ts +39 -2
  140. package/provider.d.ts.map +1 -1
  141. package/provider.js +11 -3
  142. package/provider.js.map +1 -1
  143. package/runner/RunnerListPanel.d.ts +65 -0
  144. package/runner/RunnerListPanel.d.ts.map +1 -0
  145. package/runner/RunnerListPanel.js +237 -0
  146. package/runner/RunnerListPanel.js.map +1 -0
  147. package/runner/RunnerPicker.d.ts +54 -0
  148. package/runner/RunnerPicker.d.ts.map +1 -0
  149. package/runner/RunnerPicker.js +133 -0
  150. package/runner/RunnerPicker.js.map +1 -0
  151. package/runner/__tests__/useDeleteRunner.test.d.ts +2 -0
  152. package/runner/__tests__/useDeleteRunner.test.d.ts.map +1 -0
  153. package/runner/__tests__/useDeleteRunner.test.js +108 -0
  154. package/runner/__tests__/useDeleteRunner.test.js.map +1 -0
  155. package/runner/__tests__/useLaunchLocalRunner.test.d.ts +2 -0
  156. package/runner/__tests__/useLaunchLocalRunner.test.d.ts.map +1 -0
  157. package/runner/__tests__/useLaunchLocalRunner.test.js +143 -0
  158. package/runner/__tests__/useLaunchLocalRunner.test.js.map +1 -0
  159. package/runner/__tests__/useStopRunner.test.d.ts +2 -0
  160. package/runner/__tests__/useStopRunner.test.d.ts.map +1 -0
  161. package/runner/__tests__/useStopRunner.test.js +114 -0
  162. package/runner/__tests__/useStopRunner.test.js.map +1 -0
  163. package/runner/index.d.ts +14 -0
  164. package/runner/index.d.ts.map +1 -0
  165. package/runner/index.js +8 -0
  166. package/runner/index.js.map +1 -0
  167. package/runner/phase.d.ts +30 -0
  168. package/runner/phase.d.ts.map +1 -0
  169. package/runner/phase.js +58 -0
  170. package/runner/phase.js.map +1 -0
  171. package/runner/useDeleteRunner.d.ts +36 -0
  172. package/runner/useDeleteRunner.d.ts.map +1 -0
  173. package/runner/useDeleteRunner.js +42 -0
  174. package/runner/useDeleteRunner.js.map +1 -0
  175. package/runner/useLaunchLocalRunner.d.ts +84 -0
  176. package/runner/useLaunchLocalRunner.d.ts.map +1 -0
  177. package/runner/useLaunchLocalRunner.js +75 -0
  178. package/runner/useLaunchLocalRunner.js.map +1 -0
  179. package/runner/useRunnerList.d.ts +49 -0
  180. package/runner/useRunnerList.d.ts.map +1 -0
  181. package/runner/useRunnerList.js +70 -0
  182. package/runner/useRunnerList.js.map +1 -0
  183. package/runner/useStopRunner.d.ts +53 -0
  184. package/runner/useStopRunner.d.ts.map +1 -0
  185. package/runner/useStopRunner.js +50 -0
  186. package/runner/useStopRunner.js.map +1 -0
  187. package/session/draft.d.ts +53 -0
  188. package/session/draft.d.ts.map +1 -0
  189. package/session/draft.js +45 -0
  190. package/session/draft.js.map +1 -0
  191. package/session/index.d.ts +10 -0
  192. package/session/index.d.ts.map +1 -1
  193. package/session/index.js +5 -0
  194. package/session/index.js.map +1 -1
  195. package/session/useCreateSession.d.ts +8 -0
  196. package/session/useCreateSession.d.ts.map +1 -1
  197. package/session/useCreateSession.js +1 -0
  198. package/session/useCreateSession.js.map +1 -1
  199. package/session/useEditSessionPrep.d.ts +26 -0
  200. package/session/useEditSessionPrep.d.ts.map +1 -0
  201. package/session/useEditSessionPrep.js +83 -0
  202. package/session/useEditSessionPrep.js.map +1 -0
  203. package/session/useNewSessionFlow.d.ts +110 -0
  204. package/session/useNewSessionFlow.d.ts.map +1 -0
  205. package/session/useNewSessionFlow.js +184 -0
  206. package/session/useNewSessionFlow.js.map +1 -0
  207. package/session/usePersistedModel.d.ts +18 -0
  208. package/session/usePersistedModel.d.ts.map +1 -0
  209. package/session/usePersistedModel.js +31 -0
  210. package/session/usePersistedModel.js.map +1 -0
  211. package/session/useSessionPageFlow.d.ts +104 -0
  212. package/session/useSessionPageFlow.d.ts.map +1 -0
  213. package/session/useSessionPageFlow.js +172 -0
  214. package/session/useSessionPageFlow.js.map +1 -0
  215. package/skill/SkillDetailView.js +3 -3
  216. package/skill/SkillDetailView.js.map +1 -1
  217. package/skill/SkillPicker.js +3 -3
  218. package/skill/SkillPicker.js.map +1 -1
  219. package/src/agent/AgentDetailView.tsx +8 -8
  220. package/src/agent/AgentPicker.tsx +3 -3
  221. package/src/api-key/ApiKeyCreatedAlert.tsx +2 -2
  222. package/src/api-key/ApiKeyListPanel.tsx +6 -6
  223. package/src/api-key/CreateApiKeyForm.tsx +2 -2
  224. package/src/attachment/AttachmentChipList.tsx +3 -3
  225. package/src/color-mode.ts +75 -0
  226. package/src/composer/ComposerToolbar.tsx +29 -7
  227. package/src/composer/ConfigureMenu.tsx +6 -6
  228. package/src/composer/ContextChip.tsx +1 -1
  229. package/src/composer/ContextPopover.tsx +2 -2
  230. package/src/composer/SessionComposer.tsx +34 -5
  231. package/src/environment/CreateEnvironmentForm.tsx +3 -3
  232. package/src/environment/EnvVarForm.tsx +6 -6
  233. package/src/environment/EnvironmentListPanel.tsx +3 -3
  234. package/src/environment/EnvironmentVariableEditor.tsx +7 -7
  235. package/src/error/ErrorMessage.tsx +5 -5
  236. package/src/execution/ApprovalCard.tsx +5 -5
  237. package/src/execution/ArtifactCard.tsx +2 -2
  238. package/src/execution/ArtifactPreviewModal.tsx +4 -4
  239. package/src/execution/FollowUpInput.tsx +2 -2
  240. package/src/execution/McpToolDetail.tsx +4 -4
  241. package/src/execution/MessageEntry.tsx +1 -1
  242. package/src/execution/MessageThread.tsx +1 -1
  243. package/src/execution/SessionVariablesInput.tsx +7 -7
  244. package/src/execution/SubAgentSection.tsx +5 -5
  245. package/src/execution/ToolCallDetail.tsx +2 -2
  246. package/src/execution/ToolCallGroup.tsx +3 -3
  247. package/src/execution/ToolCallItem.tsx +4 -4
  248. package/src/execution/WriteBackCard.tsx +5 -5
  249. package/src/execution/tool-rendering-primitives.tsx +5 -5
  250. package/src/github/GitHubRepoPicker.tsx +5 -5
  251. package/src/iam-policy/GrantAccessForm.tsx +2 -2
  252. package/src/iam-policy/OrgMembersPanel.tsx +11 -11
  253. package/src/identity-provider/CreateIdentityProviderForm.tsx +4 -4
  254. package/src/identity-provider/IdentityProviderDetailPanel.tsx +7 -7
  255. package/src/identity-provider/IdentityProviderListPanel.tsx +7 -7
  256. package/src/identity-provider/IdentityProviderWizard.tsx +8 -8
  257. package/src/identity-provider/ProviderPicker.tsx +2 -2
  258. package/src/index.ts +46 -7
  259. package/src/internal/CloudFeatureNotice.tsx +1 -1
  260. package/src/internal/Tabs.tsx +1 -1
  261. package/src/internal/markdown-components.tsx +2 -2
  262. package/src/invitation/InvitationCreatedAlert.tsx +2 -2
  263. package/src/invitation/InvitationManager.tsx +9 -9
  264. package/src/invitation/InvitationRedemption.tsx +11 -11
  265. package/src/library/ResourceCountCard.tsx +1 -1
  266. package/src/library/ResourceListView.tsx +7 -7
  267. package/src/mcp-server/McpServerConfigPanel.tsx +7 -7
  268. package/src/mcp-server/McpServerConnectDialog.tsx +5 -5
  269. package/src/mcp-server/McpServerDetailView.tsx +19 -19
  270. package/src/mcp-server/McpServerPicker.tsx +6 -6
  271. package/src/mcp-server/McpToolSelector.tsx +4 -4
  272. package/src/mcp-server/OAuthAppForm.tsx +3 -3
  273. package/src/models/ModelSelector.tsx +1 -1
  274. package/src/oauth-app/CreateOAuthAppForm.tsx +3 -3
  275. package/src/oauth-app/OAuthAppDetailPanel.tsx +7 -7
  276. package/src/oauth-app/OAuthAppListPanel.tsx +3 -3
  277. package/src/organization/CreateOrganizationForm.tsx +3 -3
  278. package/src/organization/OrgProfilePanel.tsx +4 -5
  279. package/src/platform-client/CreatePlatformClientForm.tsx +6 -6
  280. package/src/platform-client/PlatformClientDetailPanel.tsx +19 -19
  281. package/src/platform-client/PlatformClientListPanel.tsx +7 -7
  282. package/src/platform-client/PlatformClientSecretAlert.tsx +2 -2
  283. package/src/provider.tsx +52 -2
  284. package/src/runner/RunnerListPanel.tsx +725 -0
  285. package/src/runner/RunnerPicker.tsx +319 -0
  286. package/src/runner/__tests__/useDeleteRunner.test.tsx +150 -0
  287. package/src/runner/__tests__/useLaunchLocalRunner.test.tsx +223 -0
  288. package/src/runner/__tests__/useStopRunner.test.tsx +154 -0
  289. package/src/runner/index.ts +34 -0
  290. package/src/runner/phase.ts +62 -0
  291. package/src/runner/useDeleteRunner.ts +67 -0
  292. package/src/runner/useLaunchLocalRunner.ts +139 -0
  293. package/src/runner/useRunnerList.ts +114 -0
  294. package/src/runner/useStopRunner.ts +92 -0
  295. package/src/session/draft.ts +82 -0
  296. package/src/session/index.ts +28 -0
  297. package/src/session/useCreateSession.ts +9 -0
  298. package/src/session/useEditSessionPrep.ts +111 -0
  299. package/src/session/useNewSessionFlow.ts +283 -0
  300. package/src/session/usePersistedModel.ts +41 -0
  301. package/src/session/useSessionPageFlow.ts +280 -0
  302. package/src/skill/SkillDetailView.tsx +5 -5
  303. package/src/skill/SkillPicker.tsx +3 -3
  304. package/src/styles.css +25 -1
  305. package/src/usage/OrgUsagePanel.tsx +4 -4
  306. package/src/workspace/WorkspaceEditor.tsx +78 -66
  307. package/src/workspace/index.ts +0 -8
  308. package/styles.css +1 -1
  309. package/usage/OrgUsagePanel.js +2 -2
  310. package/usage/OrgUsagePanel.js.map +1 -1
  311. package/workspace/WorkspaceEditor.d.ts +28 -3
  312. package/workspace/WorkspaceEditor.d.ts.map +1 -1
  313. package/workspace/WorkspaceEditor.js +24 -25
  314. package/workspace/WorkspaceEditor.js.map +1 -1
  315. package/workspace/index.d.ts +0 -4
  316. package/workspace/index.d.ts.map +1 -1
  317. package/workspace/index.js +0 -2
  318. package/workspace/index.js.map +1 -1
  319. package/src/workspace/FolderBrowser.tsx +0 -579
  320. package/src/workspace/useFolderListing.ts +0 -164
  321. package/workspace/FolderBrowser.d.ts +0 -37
  322. package/workspace/FolderBrowser.d.ts.map +0 -1
  323. package/workspace/FolderBrowser.js +0 -188
  324. package/workspace/FolderBrowser.js.map +0 -1
  325. package/workspace/useFolderListing.d.ts +0 -73
  326. package/workspace/useFolderListing.d.ts.map +0 -1
  327. package/workspace/useFolderListing.js +0 -110
  328. package/workspace/useFolderListing.js.map +0 -1
@@ -212,7 +212,7 @@ export function OAuthAppDetailPanel({
212
212
  onClick={enterEdit}
213
213
  className={cn(
214
214
  "shrink-0 rounded-md px-2.5 py-1.5 text-xs font-medium",
215
- "text-muted-foreground hover:text-foreground hover:bg-accent/50",
215
+ "text-muted-foreground hover:text-foreground hover:bg-accent-hover",
216
216
  "transition-colors",
217
217
  )}
218
218
  >
@@ -226,7 +226,7 @@ export function OAuthAppDetailPanel({
226
226
  }}
227
227
  className={cn(
228
228
  "shrink-0 rounded-md px-2.5 py-1.5 text-xs font-medium",
229
- "text-destructive/70 hover:text-destructive hover:bg-destructive/10",
229
+ "text-destructive-muted hover:text-destructive hover:bg-destructive-subtle",
230
230
  "transition-colors",
231
231
  )}
232
232
  >
@@ -239,7 +239,7 @@ export function OAuthAppDetailPanel({
239
239
  {/* Inline delete confirmation */}
240
240
  {confirmingDelete && (
241
241
  <div
242
- className="rounded-md border border-destructive/30 bg-destructive/5 p-3"
242
+ className="rounded-md border border-destructive/30 bg-destructive-subtle p-3"
243
243
  role="alert"
244
244
  >
245
245
  <p className="text-foreground mb-2 text-xs font-medium">
@@ -261,7 +261,7 @@ export function OAuthAppDetailPanel({
261
261
  disabled={isDeleting}
262
262
  className={cn(
263
263
  "inline-flex items-center gap-1.5 rounded-md px-3 py-1.5 text-xs font-medium",
264
- "bg-destructive text-destructive-foreground hover:bg-destructive/90",
264
+ "bg-destructive text-destructive-foreground hover:bg-destructive-hover",
265
265
  "disabled:pointer-events-none disabled:opacity-40",
266
266
  )}
267
267
  >
@@ -277,7 +277,7 @@ export function OAuthAppDetailPanel({
277
277
  disabled={isDeleting}
278
278
  className={cn(
279
279
  "rounded-md px-2.5 py-1.5 text-xs",
280
- "text-muted-foreground hover:text-foreground hover:bg-accent/50",
280
+ "text-muted-foreground hover:text-foreground hover:bg-accent-hover",
281
281
  "disabled:pointer-events-none disabled:opacity-50",
282
282
  )}
283
283
  >
@@ -421,7 +421,7 @@ export function OAuthAppDetailPanel({
421
421
  disabled={!canSave}
422
422
  className={cn(
423
423
  "inline-flex items-center gap-1.5 rounded-md px-3 py-1.5 text-xs font-medium",
424
- "bg-primary text-primary-foreground hover:bg-primary/90",
424
+ "bg-primary text-primary-foreground hover:bg-primary-hover",
425
425
  "disabled:pointer-events-none disabled:opacity-40",
426
426
  )}
427
427
  >
@@ -434,7 +434,7 @@ export function OAuthAppDetailPanel({
434
434
  disabled={isUpdating}
435
435
  className={cn(
436
436
  "rounded-md px-2.5 py-1.5 text-xs",
437
- "text-muted-foreground hover:text-foreground hover:bg-accent/50",
437
+ "text-muted-foreground hover:text-foreground hover:bg-accent-hover",
438
438
  "disabled:pointer-events-none disabled:opacity-50",
439
439
  )}
440
440
  >
@@ -73,7 +73,7 @@ export function OAuthAppListPanel({
73
73
  {Array.from({ length: 2 }, (_, i) => (
74
74
  <div
75
75
  key={i}
76
- className="bg-muted/40 h-14 animate-pulse rounded-lg"
76
+ className="bg-muted-subtle h-14 animate-pulse rounded-lg"
77
77
  />
78
78
  ))}
79
79
  </div>
@@ -136,7 +136,7 @@ function OAuthAppRow({
136
136
  return (
137
137
  <div
138
138
  role="listitem"
139
- className="flex items-center gap-3 rounded-lg border border-border/60 px-3 py-2.5 transition-colors hover:border-border"
139
+ className="flex items-center gap-3 rounded-lg border border-border-muted px-3 py-2.5 transition-colors hover:border-border"
140
140
  >
141
141
  <OAuthIcon />
142
142
 
@@ -166,7 +166,7 @@ function OAuthAppRow({
166
166
  aria-label={`Edit ${provider}`}
167
167
  className={cn(
168
168
  "shrink-0 rounded p-1",
169
- "text-muted-foreground hover:text-foreground hover:bg-accent/50",
169
+ "text-muted-foreground hover:text-foreground hover:bg-accent-hover",
170
170
  "transition-colors",
171
171
  )}
172
172
  >
@@ -190,7 +190,7 @@ export function CreateOrganizationForm({
190
190
  className="text-xs font-medium text-muted-foreground"
191
191
  >
192
192
  Description{" "}
193
- <span className="text-muted-foreground/60">(optional)</span>
193
+ <span className="text-muted-foreground-subtle">(optional)</span>
194
194
  </label>
195
195
  <input
196
196
  id="stgm-new-org-desc"
@@ -221,7 +221,7 @@ export function CreateOrganizationForm({
221
221
  disabled={!canSubmit}
222
222
  className={cn(
223
223
  "inline-flex items-center gap-1.5 rounded-md px-3 py-1.5 text-xs font-medium",
224
- "bg-primary text-primary-foreground hover:bg-primary/90",
224
+ "bg-primary text-primary-foreground hover:bg-primary-hover",
225
225
  "disabled:pointer-events-none disabled:opacity-40",
226
226
  )}
227
227
  >
@@ -236,7 +236,7 @@ export function CreateOrganizationForm({
236
236
  disabled={isCreating}
237
237
  className={cn(
238
238
  "rounded-md px-3 py-1.5 text-xs",
239
- "text-muted-foreground hover:text-foreground hover:bg-accent/50",
239
+ "text-muted-foreground hover:text-foreground hover:bg-accent-hover",
240
240
  "disabled:pointer-events-none disabled:opacity-50",
241
241
  )}
242
242
  >
@@ -181,7 +181,7 @@ export function OrgProfilePanel({
181
181
  onClick={refetch}
182
182
  className={cn(
183
183
  "rounded-md px-3 py-1.5 text-xs font-medium",
184
- "bg-primary text-primary-foreground hover:bg-primary/90",
184
+ "bg-primary text-primary-foreground hover:bg-primary-hover",
185
185
  )}
186
186
  >
187
187
  Retry
@@ -317,7 +317,7 @@ export function OrgProfilePanel({
317
317
  disabled={!canSubmit}
318
318
  className={cn(
319
319
  "inline-flex items-center gap-1.5 rounded-md px-3 py-1.5 text-xs font-medium",
320
- "bg-primary text-primary-foreground hover:bg-primary/90",
320
+ "bg-primary text-primary-foreground hover:bg-primary-hover",
321
321
  "disabled:pointer-events-none disabled:opacity-40",
322
322
  )}
323
323
  >
@@ -331,7 +331,7 @@ export function OrgProfilePanel({
331
331
  onClick={handleDiscard}
332
332
  className={cn(
333
333
  "rounded-md px-3 py-1.5 text-xs",
334
- "text-muted-foreground hover:text-foreground hover:bg-accent/50",
334
+ "text-muted-foreground hover:text-foreground hover:bg-accent-hover",
335
335
  )}
336
336
  >
337
337
  Discard
@@ -385,7 +385,7 @@ function ReadOnlyField({
385
385
  onClick={handleCopy}
386
386
  className={cn(
387
387
  "rounded px-1.5 py-0.5 text-[0.6rem]",
388
- "text-muted-foreground hover:text-foreground hover:bg-accent/50",
388
+ "text-muted-foreground hover:text-foreground hover:bg-accent-hover",
389
389
  "transition-colors",
390
390
  )}
391
391
  aria-label={`Copy ${label}`}
@@ -412,7 +412,6 @@ function LogoPreview({ url }: { url: string }) {
412
412
 
413
413
  return (
414
414
  <div className="mt-2">
415
- {/* eslint-disable-next-line @next/next/no-img-element */}
416
415
  <img
417
416
  src={url}
418
417
  alt="Organization logo preview"
@@ -206,7 +206,7 @@ export function CreatePlatformClientForm({
206
206
 
207
207
  {/* JIT provisioning */}
208
208
  <fieldset className="space-y-2.5" disabled={isCreating}>
209
- <hr className="border-border/40" />
209
+ <hr className="border-border-muted" />
210
210
  <legend className="text-xs font-medium text-foreground">
211
211
  JIT provisioning
212
212
  </legend>
@@ -267,7 +267,7 @@ export function CreatePlatformClientForm({
267
267
 
268
268
  {/* Allowed origins */}
269
269
  <fieldset className="space-y-2" disabled={isCreating}>
270
- <hr className="border-border/40" />
270
+ <hr className="border-border-muted" />
271
271
  <legend className="text-xs font-medium text-foreground">
272
272
  Allowed origins
273
273
  </legend>
@@ -300,7 +300,7 @@ export function CreatePlatformClientForm({
300
300
  disabled={isCreating || !originInput.trim()}
301
301
  className={cn(
302
302
  "shrink-0 rounded-md px-2.5 py-1.5 text-xs font-medium",
303
- "text-muted-foreground hover:text-foreground hover:bg-accent/50",
303
+ "text-muted-foreground hover:text-foreground hover:bg-accent-hover",
304
304
  "disabled:pointer-events-none disabled:opacity-50",
305
305
  "transition-colors",
306
306
  )}
@@ -314,7 +314,7 @@ export function CreatePlatformClientForm({
314
314
  {origins.map((origin) => (
315
315
  <span
316
316
  key={origin}
317
- className="inline-flex items-center gap-1 rounded-full border border-border/60 bg-muted/40 px-2 py-0.5 text-[0.65rem] font-mono text-foreground"
317
+ className="inline-flex items-center gap-1 rounded-full border border-border-muted bg-muted-subtle px-2 py-0.5 text-[0.65rem] font-mono text-foreground"
318
318
  >
319
319
  {origin}
320
320
  <button
@@ -344,7 +344,7 @@ export function CreatePlatformClientForm({
344
344
  disabled={!canSubmit}
345
345
  className={cn(
346
346
  "inline-flex items-center gap-1.5 rounded-md px-3 py-1.5 text-xs font-medium",
347
- "bg-primary text-primary-foreground hover:bg-primary/90",
347
+ "bg-primary text-primary-foreground hover:bg-primary-hover",
348
348
  "disabled:pointer-events-none disabled:opacity-40",
349
349
  )}
350
350
  >
@@ -359,7 +359,7 @@ export function CreatePlatformClientForm({
359
359
  disabled={isCreating}
360
360
  className={cn(
361
361
  "rounded-md px-3 py-1.5 text-xs",
362
- "text-muted-foreground hover:text-foreground hover:bg-accent/50",
362
+ "text-muted-foreground hover:text-foreground hover:bg-accent-hover",
363
363
  "disabled:pointer-events-none disabled:opacity-50",
364
364
  )}
365
365
  >
@@ -276,7 +276,7 @@ export function PlatformClientDetailPanel({
276
276
  onClick={enterEdit}
277
277
  className={cn(
278
278
  "shrink-0 rounded-md px-2.5 py-1.5 text-xs font-medium",
279
- "text-muted-foreground hover:text-foreground hover:bg-accent/50",
279
+ "text-muted-foreground hover:text-foreground hover:bg-accent-hover",
280
280
  "transition-colors",
281
281
  )}
282
282
  >
@@ -295,7 +295,7 @@ export function PlatformClientDetailPanel({
295
295
  ) : (
296
296
  <form onSubmit={handleSave} className="space-y-3">
297
297
  {/* Read-only credential info */}
298
- <div className="rounded-md border border-border/60 bg-muted/30 px-3 py-2 space-y-1">
298
+ <div className="rounded-md border border-border-muted bg-muted-faint px-3 py-2 space-y-1">
299
299
  <p className="text-[0.65rem] font-medium text-muted-foreground">
300
300
  Client ID
301
301
  </p>
@@ -341,7 +341,7 @@ export function PlatformClientDetailPanel({
341
341
 
342
342
  {/* JIT provisioning */}
343
343
  <fieldset className="space-y-2.5" disabled={isUpdating}>
344
- <hr className="border-border/40" />
344
+ <hr className="border-border-muted" />
345
345
  <legend className="text-xs font-medium text-foreground">
346
346
  JIT provisioning
347
347
  </legend>
@@ -397,7 +397,7 @@ export function PlatformClientDetailPanel({
397
397
 
398
398
  {/* Allowed origins */}
399
399
  <fieldset className="space-y-2" disabled={isUpdating}>
400
- <hr className="border-border/40" />
400
+ <hr className="border-border-muted" />
401
401
  <legend className="text-xs font-medium text-foreground">
402
402
  Allowed origins
403
403
  </legend>
@@ -430,7 +430,7 @@ export function PlatformClientDetailPanel({
430
430
  disabled={isUpdating || !originInput.trim()}
431
431
  className={cn(
432
432
  "shrink-0 rounded-md px-2.5 py-1.5 text-xs font-medium",
433
- "text-muted-foreground hover:text-foreground hover:bg-accent/50",
433
+ "text-muted-foreground hover:text-foreground hover:bg-accent-hover",
434
434
  "disabled:pointer-events-none disabled:opacity-50",
435
435
  "transition-colors",
436
436
  )}
@@ -444,7 +444,7 @@ export function PlatformClientDetailPanel({
444
444
  {origins.map((origin) => (
445
445
  <span
446
446
  key={origin}
447
- className="inline-flex items-center gap-1 rounded-full border border-border/60 bg-muted/40 px-2 py-0.5 text-[0.65rem] font-mono text-foreground"
447
+ className="inline-flex items-center gap-1 rounded-full border border-border-muted bg-muted-subtle px-2 py-0.5 text-[0.65rem] font-mono text-foreground"
448
448
  >
449
449
  {origin}
450
450
  <button
@@ -474,7 +474,7 @@ export function PlatformClientDetailPanel({
474
474
  disabled={isUpdating}
475
475
  className={cn(
476
476
  "inline-flex items-center gap-1.5 rounded-md px-3 py-1.5 text-xs font-medium",
477
- "bg-primary text-primary-foreground hover:bg-primary/90",
477
+ "bg-primary text-primary-foreground hover:bg-primary-hover",
478
478
  "disabled:pointer-events-none disabled:opacity-40",
479
479
  )}
480
480
  >
@@ -487,7 +487,7 @@ export function PlatformClientDetailPanel({
487
487
  disabled={isUpdating}
488
488
  className={cn(
489
489
  "rounded-md px-2.5 py-1.5 text-xs",
490
- "text-muted-foreground hover:text-foreground hover:bg-accent/50",
490
+ "text-muted-foreground hover:text-foreground hover:bg-accent-hover",
491
491
  "disabled:pointer-events-none disabled:opacity-50",
492
492
  )}
493
493
  >
@@ -500,7 +500,7 @@ export function PlatformClientDetailPanel({
500
500
  {/* Actions bar (view mode only) */}
501
501
  {mode === "view" && (
502
502
  <div className="space-y-2 pt-2">
503
- <hr className="border-border/40" />
503
+ <hr className="border-border-muted" />
504
504
 
505
505
  {/* Rotate Secret */}
506
506
  {confirmingRotate ? (
@@ -516,7 +516,7 @@ export function PlatformClientDetailPanel({
516
516
  disabled={isBusy}
517
517
  className={cn(
518
518
  "inline-flex items-center gap-1 rounded-md px-2.5 py-1 text-xs font-medium",
519
- "bg-primary text-primary-foreground hover:bg-primary/90",
519
+ "bg-primary text-primary-foreground hover:bg-primary-hover",
520
520
  "disabled:pointer-events-none disabled:opacity-50",
521
521
  )}
522
522
  >
@@ -532,7 +532,7 @@ export function PlatformClientDetailPanel({
532
532
  disabled={isBusy}
533
533
  className={cn(
534
534
  "rounded-md px-2.5 py-1 text-xs",
535
- "text-muted-foreground hover:text-foreground hover:bg-accent/50",
535
+ "text-muted-foreground hover:text-foreground hover:bg-accent-hover",
536
536
  "disabled:pointer-events-none disabled:opacity-50",
537
537
  )}
538
538
  >
@@ -547,7 +547,7 @@ export function PlatformClientDetailPanel({
547
547
  disabled={isBusy}
548
548
  className={cn(
549
549
  "rounded-md px-2.5 py-1.5 text-xs font-medium",
550
- "text-muted-foreground hover:text-foreground hover:bg-accent/50",
550
+ "text-muted-foreground hover:text-foreground hover:bg-accent-hover",
551
551
  "disabled:pointer-events-none disabled:opacity-50",
552
552
  "transition-colors",
553
553
  )}
@@ -563,7 +563,7 @@ export function PlatformClientDetailPanel({
563
563
 
564
564
  {/* Delete */}
565
565
  {confirmingDelete ? (
566
- <div className="flex items-center justify-between rounded-md border border-destructive/30 bg-destructive/5 px-3 py-2">
566
+ <div className="flex items-center justify-between rounded-md border border-destructive/30 bg-destructive-subtle px-3 py-2">
567
567
  <div className="min-w-0 flex-1">
568
568
  <p className="text-xs text-foreground">
569
569
  Delete{" "}
@@ -583,7 +583,7 @@ export function PlatformClientDetailPanel({
583
583
  disabled={isBusy}
584
584
  className={cn(
585
585
  "inline-flex items-center gap-1 rounded-md px-2.5 py-1 text-xs font-medium",
586
- "bg-destructive text-destructive-foreground hover:bg-destructive/90",
586
+ "bg-destructive text-destructive-foreground hover:bg-destructive-hover",
587
587
  "disabled:pointer-events-none disabled:opacity-50",
588
588
  )}
589
589
  >
@@ -596,7 +596,7 @@ export function PlatformClientDetailPanel({
596
596
  disabled={isBusy}
597
597
  className={cn(
598
598
  "rounded-md px-2.5 py-1 text-xs",
599
- "text-muted-foreground hover:text-foreground hover:bg-accent/50",
599
+ "text-muted-foreground hover:text-foreground hover:bg-accent-hover",
600
600
  "disabled:pointer-events-none disabled:opacity-50",
601
601
  )}
602
602
  >
@@ -611,7 +611,7 @@ export function PlatformClientDetailPanel({
611
611
  disabled={isBusy}
612
612
  className={cn(
613
613
  "rounded-md px-2.5 py-1.5 text-xs font-medium",
614
- "text-destructive hover:text-destructive-foreground hover:bg-destructive/90",
614
+ "text-destructive hover:text-destructive-foreground hover:bg-destructive-hover",
615
615
  "disabled:pointer-events-none disabled:opacity-50",
616
616
  "transition-colors",
617
617
  )}
@@ -662,7 +662,7 @@ function ViewMode({
662
662
  ) : null}
663
663
 
664
664
  {/* JIT provisioning */}
665
- <hr className="border-border/40" />
665
+ <hr className="border-border-muted" />
666
666
  <Field
667
667
  label="Auto-provision accounts"
668
668
  value={spec?.autoProvisionAccounts ? "Enabled" : "Disabled"}
@@ -681,7 +681,7 @@ function ViewMode({
681
681
  {/* Allowed origins */}
682
682
  {(spec?.allowedOrigins.length ?? 0) > 0 && (
683
683
  <>
684
- <hr className="border-border/40" />
684
+ <hr className="border-border-muted" />
685
685
  <div>
686
686
  <dt className="text-muted-foreground text-[0.65rem] font-medium">
687
687
  Allowed origins
@@ -690,7 +690,7 @@ function ViewMode({
690
690
  {spec!.allowedOrigins.map((origin) => (
691
691
  <span
692
692
  key={origin}
693
- className="inline-block rounded-full border border-border/60 bg-muted/40 px-2 py-0.5 text-[0.65rem] font-mono text-foreground"
693
+ className="inline-block rounded-full border border-border-muted bg-muted-subtle px-2 py-0.5 text-[0.65rem] font-mono text-foreground"
694
694
  >
695
695
  {origin}
696
696
  </span>
@@ -71,7 +71,7 @@ export function PlatformClientListPanel({
71
71
  {Array.from({ length: 2 }, (_, i) => (
72
72
  <div
73
73
  key={i}
74
- className="bg-muted/40 h-14 animate-pulse rounded-lg"
74
+ className="bg-muted-subtle h-14 animate-pulse rounded-lg"
75
75
  />
76
76
  ))}
77
77
  </div>
@@ -169,7 +169,7 @@ function PlatformClientRow({
169
169
  return (
170
170
  <div
171
171
  role="listitem"
172
- className="flex items-center justify-between rounded-lg border border-destructive/30 bg-destructive/5 px-3 py-2.5"
172
+ className="flex items-center justify-between rounded-lg border border-destructive/30 bg-destructive-subtle px-3 py-2.5"
173
173
  >
174
174
  <div className="min-w-0 flex-1">
175
175
  <p className="text-xs text-foreground">
@@ -195,7 +195,7 @@ function PlatformClientRow({
195
195
  disabled={isDeleting}
196
196
  className={cn(
197
197
  "inline-flex items-center gap-1 rounded-md px-2.5 py-1 text-xs font-medium",
198
- "bg-destructive text-destructive-foreground hover:bg-destructive/90",
198
+ "bg-destructive text-destructive-foreground hover:bg-destructive-hover",
199
199
  "disabled:pointer-events-none disabled:opacity-50",
200
200
  )}
201
201
  >
@@ -208,7 +208,7 @@ function PlatformClientRow({
208
208
  disabled={isDeleting}
209
209
  className={cn(
210
210
  "rounded-md px-2.5 py-1 text-xs",
211
- "text-muted-foreground hover:text-foreground hover:bg-accent/50",
211
+ "text-muted-foreground hover:text-foreground hover:bg-accent-hover",
212
212
  "disabled:pointer-events-none disabled:opacity-50",
213
213
  )}
214
214
  >
@@ -222,7 +222,7 @@ function PlatformClientRow({
222
222
  return (
223
223
  <div
224
224
  role="listitem"
225
- className="flex items-center gap-3 rounded-lg border border-border/60 px-3 py-2.5 hover:border-border transition-colors"
225
+ className="flex items-center gap-3 rounded-lg border border-border-muted px-3 py-2.5 hover:border-border transition-colors"
226
226
  >
227
227
  <KeyIcon />
228
228
 
@@ -267,7 +267,7 @@ function PlatformClientRow({
267
267
  aria-label={`Edit ${name}`}
268
268
  className={cn(
269
269
  "shrink-0 rounded p-1",
270
- "text-muted-foreground hover:text-foreground hover:bg-accent/50",
270
+ "text-muted-foreground hover:text-foreground hover:bg-accent-hover",
271
271
  "transition-colors",
272
272
  )}
273
273
  >
@@ -280,7 +280,7 @@ function PlatformClientRow({
280
280
  aria-label={`Delete ${name}`}
281
281
  className={cn(
282
282
  "shrink-0 rounded p-1",
283
- "text-muted-foreground hover:text-destructive hover:bg-destructive/10",
283
+ "text-muted-foreground hover:text-destructive hover:bg-destructive-subtle",
284
284
  "transition-colors",
285
285
  )}
286
286
  >
@@ -104,7 +104,7 @@ export function PlatformClientSecretAlert({
104
104
  aria-label="Dismiss"
105
105
  className={cn(
106
106
  "shrink-0 rounded p-1",
107
- "text-muted-foreground hover:text-foreground hover:bg-accent/50",
107
+ "text-muted-foreground hover:text-foreground hover:bg-accent-hover",
108
108
  "transition-colors",
109
109
  )}
110
110
  >
@@ -181,7 +181,7 @@ function CopyableField({
181
181
  aria-label={`Copy ${label}`}
182
182
  className={cn(
183
183
  "inline-flex shrink-0 items-center gap-1.5 rounded-md px-3 py-1.5 text-xs font-medium",
184
- "bg-primary text-primary-foreground hover:bg-primary/90",
184
+ "bg-primary text-primary-foreground hover:bg-primary-hover",
185
185
  "transition-colors",
186
186
  )}
187
187
  >
package/src/provider.tsx CHANGED
@@ -6,6 +6,8 @@ import { cn, resolvePresetClass } from "@stigmer/theme";
6
6
  import type { ThemePresetId } from "@stigmer/theme";
7
7
  import { StigmerContext } from "./context";
8
8
  import { DeploymentModeContext } from "./deployment-mode";
9
+ import type { ColorMode, ResolvedColorMode } from "./color-mode";
10
+ import { ColorModeContext, useSystemColorMode } from "./color-mode";
9
11
 
10
12
  /** Props for {@link StigmerProvider}. */
11
13
  export interface StigmerProviderProps {
@@ -45,6 +47,37 @@ export interface StigmerProviderProps {
45
47
  * The container always includes the `stgm` class for style isolation.
46
48
  */
47
49
  readonly className?: string;
50
+ /**
51
+ * Controls the color mode for all descendant Stigmer components.
52
+ *
53
+ * - `"light"` — light design tokens (default).
54
+ * - `"dark"` — dark design tokens.
55
+ * - `"system"` — follows the user's OS preference via
56
+ * `prefers-color-scheme`. Resolved to `"light"` or `"dark"`
57
+ * before reaching CSS or React context.
58
+ *
59
+ * The resolved value is set as `data-stgm-color-mode` on the
60
+ * scoping container and exposed via {@link useColorMode}.
61
+ * Host applications pass their own theme state directly —
62
+ * no ancestor CSS class conventions are required.
63
+ *
64
+ * @default "light"
65
+ *
66
+ * @example
67
+ * ```tsx
68
+ * // Explicit dark mode
69
+ * <StigmerProvider client={client} colorMode="dark">
70
+ * <ChatWidget />
71
+ * </StigmerProvider>
72
+ *
73
+ * // Bridge from MUI
74
+ * const muiMode = useTheme().palette.mode;
75
+ * <StigmerProvider client={client} colorMode={muiMode}>
76
+ * <ChatWidget />
77
+ * </StigmerProvider>
78
+ * ```
79
+ */
80
+ readonly colorMode?: ColorMode;
48
81
  }
49
82
 
50
83
  /**
@@ -56,6 +89,11 @@ export interface StigmerProviderProps {
56
89
  * `@stigmer/react/styles.css` get isolated styles that do not
57
90
  * leak into the host application.
58
91
  *
92
+ * The `colorMode` prop controls dark/light appearance via a
93
+ * `data-stgm-color-mode` attribute on the scoping container.
94
+ * Host applications pass their theme state directly — no ancestor
95
+ * `.dark` class or Tailwind convention is required.
96
+ *
59
97
  * Pass {@link StigmerProviderProps.preset | preset} to apply a
60
98
  * built-in theme, or use {@link StigmerProviderProps.className | className}
61
99
  * for custom styling.
@@ -67,7 +105,7 @@ export interface StigmerProviderProps {
67
105
  * [getAccessToken],
68
106
  * );
69
107
  *
70
- * <StigmerProvider client={client} preset="fintech">
108
+ * <StigmerProvider client={client} preset="fintech" colorMode="dark">
71
109
  * <App />
72
110
  * </StigmerProvider>
73
111
  * ```
@@ -78,13 +116,25 @@ export function StigmerProvider({
78
116
  deploymentMode = "cloud",
79
117
  preset,
80
118
  className,
119
+ colorMode = "light",
81
120
  }: StigmerProviderProps) {
121
+ const systemMode = useSystemColorMode();
122
+ const resolvedMode: ResolvedColorMode =
123
+ colorMode === "system" ? systemMode : colorMode;
124
+
82
125
  const presetClass = preset ? resolvePresetClass(preset) : "";
83
126
 
84
127
  return (
85
128
  <StigmerContext.Provider value={client}>
86
129
  <DeploymentModeContext.Provider value={deploymentMode}>
87
- <div className={cn("stgm", presetClass, className)}>{children}</div>
130
+ <ColorModeContext.Provider value={resolvedMode}>
131
+ <div
132
+ className={cn("stgm", presetClass, className)}
133
+ data-stgm-color-mode={resolvedMode}
134
+ >
135
+ {children}
136
+ </div>
137
+ </ColorModeContext.Provider>
88
138
  </DeploymentModeContext.Provider>
89
139
  </StigmerContext.Provider>
90
140
  );