@stigmer/react 0.0.99 → 0.0.101

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 (112) hide show
  1. package/index.d.ts +17 -3
  2. package/index.d.ts.map +1 -1
  3. package/index.js +16 -3
  4. package/index.js.map +1 -1
  5. package/internal/menu.d.ts +17 -0
  6. package/internal/menu.d.ts.map +1 -0
  7. package/internal/menu.js +43 -0
  8. package/internal/menu.js.map +1 -0
  9. package/library/LibraryBreadcrumbContext.d.ts +30 -0
  10. package/library/LibraryBreadcrumbContext.d.ts.map +1 -0
  11. package/library/LibraryBreadcrumbContext.js +39 -0
  12. package/library/LibraryBreadcrumbContext.js.map +1 -0
  13. package/library/index.d.ts +1 -0
  14. package/library/index.d.ts.map +1 -1
  15. package/library/index.js +1 -0
  16. package/library/index.js.map +1 -1
  17. package/organization/OrgProvider.d.ts +59 -0
  18. package/organization/OrgProvider.d.ts.map +1 -0
  19. package/organization/OrgProvider.js +130 -0
  20. package/organization/OrgProvider.js.map +1 -0
  21. package/organization/OrgSwitcher.d.ts +36 -0
  22. package/organization/OrgSwitcher.d.ts.map +1 -0
  23. package/organization/OrgSwitcher.js +73 -0
  24. package/organization/OrgSwitcher.js.map +1 -0
  25. package/organization/index.d.ts +6 -0
  26. package/organization/index.d.ts.map +1 -1
  27. package/organization/index.js +3 -0
  28. package/organization/index.js.map +1 -1
  29. package/organization/useOrgGate.d.ts +101 -0
  30. package/organization/useOrgGate.d.ts.map +1 -0
  31. package/organization/useOrgGate.js +99 -0
  32. package/organization/useOrgGate.js.map +1 -0
  33. package/package.json +5 -4
  34. package/runner/RunnerListPanel.d.ts +13 -8
  35. package/runner/RunnerListPanel.d.ts.map +1 -1
  36. package/runner/RunnerListPanel.js +10 -6
  37. package/runner/RunnerListPanel.js.map +1 -1
  38. package/settings/ApiKeysSection.d.ts +3 -0
  39. package/settings/ApiKeysSection.d.ts.map +1 -0
  40. package/settings/ApiKeysSection.js +30 -0
  41. package/settings/ApiKeysSection.js.map +1 -0
  42. package/settings/EnvironmentsSection.d.ts +3 -0
  43. package/settings/EnvironmentsSection.d.ts.map +1 -0
  44. package/settings/EnvironmentsSection.js +49 -0
  45. package/settings/EnvironmentsSection.js.map +1 -0
  46. package/settings/IdentityProvidersSection.d.ts +12 -0
  47. package/settings/IdentityProvidersSection.d.ts.map +1 -0
  48. package/settings/IdentityProvidersSection.js +34 -0
  49. package/settings/IdentityProvidersSection.js.map +1 -0
  50. package/settings/InvitationsSection.d.ts +3 -0
  51. package/settings/InvitationsSection.d.ts.map +1 -0
  52. package/settings/InvitationsSection.js +13 -0
  53. package/settings/InvitationsSection.js.map +1 -0
  54. package/settings/MembersSection.d.ts +3 -0
  55. package/settings/MembersSection.d.ts.map +1 -0
  56. package/settings/MembersSection.js +14 -0
  57. package/settings/MembersSection.js.map +1 -0
  58. package/settings/OAuthAppsSection.d.ts +3 -0
  59. package/settings/OAuthAppsSection.d.ts.map +1 -0
  60. package/settings/OAuthAppsSection.js +33 -0
  61. package/settings/OAuthAppsSection.js.map +1 -0
  62. package/settings/OrgProfileSection.d.ts +3 -0
  63. package/settings/OrgProfileSection.d.ts.map +1 -0
  64. package/settings/OrgProfileSection.js +15 -0
  65. package/settings/OrgProfileSection.js.map +1 -0
  66. package/settings/PlatformClientsSection.d.ts +3 -0
  67. package/settings/PlatformClientsSection.d.ts.map +1 -0
  68. package/settings/PlatformClientsSection.js +48 -0
  69. package/settings/PlatformClientsSection.js.map +1 -0
  70. package/settings/UsageSection.d.ts +3 -0
  71. package/settings/UsageSection.d.ts.map +1 -0
  72. package/settings/UsageSection.js +14 -0
  73. package/settings/UsageSection.js.map +1 -0
  74. package/settings/index.d.ts +13 -0
  75. package/settings/index.d.ts.map +1 -0
  76. package/settings/index.js +11 -0
  77. package/settings/index.js.map +1 -0
  78. package/settings/settings-nav.d.ts +25 -0
  79. package/settings/settings-nav.d.ts.map +1 -0
  80. package/settings/settings-nav.js +41 -0
  81. package/settings/settings-nav.js.map +1 -0
  82. package/src/index.ts +32 -1
  83. package/src/internal/menu.tsx +160 -0
  84. package/src/library/LibraryBreadcrumbContext.tsx +70 -0
  85. package/src/library/index.ts +6 -0
  86. package/src/organization/OrgProvider.tsx +184 -0
  87. package/src/organization/OrgSwitcher.tsx +275 -0
  88. package/src/organization/index.ts +10 -0
  89. package/src/organization/useOrgGate.ts +183 -0
  90. package/src/runner/RunnerListPanel.tsx +14 -9
  91. package/src/settings/ApiKeysSection.tsx +96 -0
  92. package/src/settings/EnvironmentsSection.tsx +162 -0
  93. package/src/settings/IdentityProvidersSection.tsx +123 -0
  94. package/src/settings/InvitationsSection.tsx +42 -0
  95. package/src/settings/MembersSection.tsx +41 -0
  96. package/src/settings/OAuthAppsSection.tsx +100 -0
  97. package/src/settings/OrgProfileSection.tsx +41 -0
  98. package/src/settings/PlatformClientsSection.tsx +149 -0
  99. package/src/settings/UsageSection.tsx +41 -0
  100. package/src/settings/index.ts +13 -0
  101. package/src/settings/settings-nav.ts +78 -0
  102. package/src/user/UserMenu.tsx +241 -0
  103. package/src/user/index.ts +2 -0
  104. package/styles.css +1 -1
  105. package/user/UserMenu.d.ts +82 -0
  106. package/user/UserMenu.d.ts.map +1 -0
  107. package/user/UserMenu.js +51 -0
  108. package/user/UserMenu.js.map +1 -0
  109. package/user/index.d.ts +3 -0
  110. package/user/index.d.ts.map +1 -0
  111. package/user/index.js +2 -0
  112. package/user/index.js.map +1 -0
@@ -0,0 +1,51 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { ChevronsUpDown, LogOut, Settings, SunMoon, User, } from "lucide-react";
4
+ import { cn } from "@stigmer/theme";
5
+ import { Menu, MenuContent, MenuGroup, MenuItem, MenuLabel, MenuRadioGroup, MenuRadioItem, MenuSeparator, MenuTrigger, } from "../internal/menu";
6
+ /**
7
+ * User menu dropdown for sidebar navigation.
8
+ *
9
+ * Displays the current user (avatar + name/email) or a "Local mode"
10
+ * indicator when unauthenticated, with optional color scheme switching,
11
+ * settings navigation, app-specific extra items, and sign out.
12
+ *
13
+ * Designed for sidebar placement — the trigger uses `sidebar-*` design
14
+ * tokens. The portaled dropdown uses standard `popover-*` / main-area
15
+ * tokens per theme-token-guidelines (DD-005).
16
+ *
17
+ * Framework-agnostic: all actions are expressed as callback props
18
+ * (DD-004). The consumer bridges to their routing, auth, and theme
19
+ * systems.
20
+ *
21
+ * @example
22
+ * ```tsx
23
+ * <UserMenu
24
+ * user={{ name: "Jane", email: "jane@acme.com" }}
25
+ * colorMode="dark"
26
+ * onColorModeChange={(mode) => setTheme(mode)}
27
+ * onSettingsClick={() => router.push("/settings")}
28
+ * onSignOut={() => logout()}
29
+ * />
30
+ * ```
31
+ */
32
+ export function UserMenu({ user, colorMode, onColorModeChange, onSettingsClick, onSignOut, extraItems, className, }) {
33
+ const showColorScheme = colorMode != null && onColorModeChange != null;
34
+ const showSettings = onSettingsClick != null;
35
+ const showSignOut = onSignOut != null;
36
+ const hasContentBeforeSignOut = showSettings || showColorScheme || extraItems;
37
+ const displayName = user?.name ?? user?.email;
38
+ const triggerLabel = user ? "User menu" : "Settings";
39
+ return (_jsxs(Menu, { children: [_jsxs(MenuTrigger, { "aria-label": triggerLabel, className: cn("hover:bg-sidebar-accent flex w-full cursor-pointer items-center gap-2 rounded-lg px-2 py-1.5 transition-colors focus:outline-none", className), children: [_jsx(UserAvatar, { name: displayName }), user ? (_jsxs("div", { className: "flex min-w-0 flex-1 flex-col text-left", children: [user.name && (_jsx("span", { className: "truncate text-sm font-medium", children: user.name })), _jsx("span", { className: "text-sidebar-muted-foreground truncate text-xs", children: user.email })] })) : (_jsx("span", { className: "text-sidebar-muted-foreground truncate text-sm", children: "Local mode" })), _jsx(ChevronsUpDown, { className: "text-sidebar-muted-foreground ml-auto size-3.5 shrink-0" })] }), _jsxs(MenuContent, { align: "start", side: "top", sideOffset: 8, children: [showSettings && (_jsxs(MenuItem, { onClick: onSettingsClick, children: [_jsx(Settings, { className: "size-4" }), "Settings"] })), showSettings && showColorScheme && _jsx(MenuSeparator, {}), showColorScheme && (_jsx(ColorSchemeSection, { colorMode: colorMode, onColorModeChange: onColorModeChange })), extraItems && (_jsxs(_Fragment, { children: [(showSettings || showColorScheme) && _jsx(MenuSeparator, {}), extraItems] })), showSignOut && (_jsxs(_Fragment, { children: [hasContentBeforeSignOut && _jsx(MenuSeparator, {}), _jsxs(MenuItem, { onClick: onSignOut, children: [_jsx(LogOut, { className: "size-4" }), "Sign out"] })] }))] })] }));
40
+ }
41
+ // ---------------------------------------------------------------------------
42
+ // Internal sub-components
43
+ // ---------------------------------------------------------------------------
44
+ function ColorSchemeSection({ colorMode, onColorModeChange, }) {
45
+ return (_jsxs(MenuGroup, { "aria-label": "Color scheme", children: [_jsxs(MenuLabel, { children: [_jsx(SunMoon, { className: "mr-1 inline size-3 align-[-2px]" }), "Color Scheme"] }), _jsxs(MenuRadioGroup, { value: colorMode, onValueChange: (val) => onColorModeChange(val), children: [_jsx(MenuRadioItem, { value: "light", children: "Light" }), _jsx(MenuRadioItem, { value: "dark", children: "Dark" }), _jsx(MenuRadioItem, { value: "system", children: "System" })] })] }));
46
+ }
47
+ function UserAvatar({ name }) {
48
+ const initial = name ? name.charAt(0).toUpperCase() : null;
49
+ return (_jsx("div", { className: cn("bg-sidebar-accent text-sidebar-accent-foreground border-sidebar-border", "flex size-6 shrink-0 items-center justify-center rounded-full border"), children: initial ? (_jsx("span", { className: "text-xs font-medium", children: initial })) : (_jsx(User, { className: "size-3.5" })) }));
50
+ }
51
+ //# sourceMappingURL=UserMenu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UserMenu.js","sourceRoot":"","sources":["../../src/user/UserMenu.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { UserMenu } from "./UserMenu";
2
+ export type { UserMenuProps } from "./UserMenu";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/user/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC"}
package/user/index.js ADDED
@@ -0,0 +1,2 @@
1
+ export { UserMenu } from "./UserMenu";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/user/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC"}