@geenius/tools 0.1.0 → 0.3.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 (177) hide show
  1. package/package.json +62 -3
  2. package/packages/convex/shared/README.md +1 -1
  3. package/packages/devtools/dist/index.d.ts +204 -0
  4. package/packages/devtools/dist/index.js +186 -0
  5. package/packages/devtools/dist/index.js.map +1 -0
  6. package/packages/devtools/react/README.md +1 -1
  7. package/packages/devtools/solidjs/README.md +1 -1
  8. package/packages/devtools/solidjs/dist/index.js +1830 -0
  9. package/packages/devtools/solidjs/dist/index.js.map +1 -0
  10. package/packages/env/dist/index.d.ts +151 -0
  11. package/packages/env/dist/index.js +93 -0
  12. package/packages/env/dist/index.js.map +1 -0
  13. package/packages/errors/dist/index.d.ts +177 -0
  14. package/packages/errors/dist/index.js +187 -0
  15. package/packages/errors/dist/index.js.map +1 -0
  16. package/packages/errors/react/README.md +1 -1
  17. package/packages/errors/solidjs/README.md +1 -1
  18. package/packages/logger/dist/index.d.ts +171 -0
  19. package/packages/logger/dist/index.js +216 -0
  20. package/packages/logger/dist/index.js.map +1 -0
  21. package/packages/logger/react/README.md +1 -1
  22. package/packages/logger/solidjs/README.md +1 -1
  23. package/packages/perf/dist/index.d.ts +168 -0
  24. package/packages/perf/dist/index.js +265 -0
  25. package/packages/perf/dist/index.js.map +1 -0
  26. package/packages/perf/react/README.md +1 -1
  27. package/packages/perf/solidjs/README.md +1 -1
  28. package/packages/shared/dist/index.d.ts +253 -0
  29. package/packages/shared/dist/index.js +278 -0
  30. package/packages/shared/dist/index.js.map +1 -0
  31. package/.changeset/config.json +0 -11
  32. package/.env.example +0 -2
  33. package/.github/CODEOWNERS +0 -1
  34. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -16
  35. package/.github/ISSUE_TEMPLATE/feature_request.md +0 -11
  36. package/.github/PULL_REQUEST_TEMPLATE.md +0 -10
  37. package/.github/dependabot.yml +0 -11
  38. package/.github/workflows/ci.yml +0 -23
  39. package/.github/workflows/release.yml +0 -29
  40. package/.node-version +0 -1
  41. package/.nvmrc +0 -1
  42. package/.prettierrc +0 -7
  43. package/.project/ACCOUNT.yaml +0 -4
  44. package/.project/IDEAS.yaml +0 -7
  45. package/.project/PROJECT.yaml +0 -11
  46. package/.project/ROADMAP.yaml +0 -15
  47. package/CODE_OF_CONDUCT.md +0 -26
  48. package/CONTRIBUTING.md +0 -69
  49. package/SECURITY.md +0 -18
  50. package/SUPPORT.md +0 -14
  51. package/packages/convex/shared/package.json +0 -42
  52. package/packages/convex/shared/src/audit/index.ts +0 -5
  53. package/packages/convex/shared/src/audit/presets.ts +0 -165
  54. package/packages/convex/shared/src/audit/schema.ts +0 -85
  55. package/packages/convex/shared/src/audit/write.ts +0 -102
  56. package/packages/convex/shared/src/extract.ts +0 -75
  57. package/packages/convex/shared/src/index.ts +0 -41
  58. package/packages/convex/shared/src/messages.ts +0 -45
  59. package/packages/convex/shared/src/security.ts +0 -112
  60. package/packages/convex/shared/src/throw.ts +0 -184
  61. package/packages/convex/shared/src/types.ts +0 -57
  62. package/packages/convex/shared/src/utils.ts +0 -58
  63. package/packages/convex/shared/tsconfig.json +0 -28
  64. package/packages/convex/shared/tsup.config.ts +0 -12
  65. package/packages/devtools/package.json +0 -27
  66. package/packages/devtools/react/package.json +0 -53
  67. package/packages/devtools/react/src/components/DesignPreview.tsx +0 -59
  68. package/packages/devtools/react/src/components/DesignSwitcherDropdown.tsx +0 -99
  69. package/packages/devtools/react/src/components/DevSidebar.tsx +0 -247
  70. package/packages/devtools/react/src/components/DevToolbar.tsx +0 -242
  71. package/packages/devtools/react/src/components/GitHubIssueDialog.tsx +0 -402
  72. package/packages/devtools/react/src/components/InspectorOverlay.tsx +0 -312
  73. package/packages/devtools/react/src/components/PageLoadWaterfall.tsx +0 -144
  74. package/packages/devtools/react/src/components/PerformancePanel.tsx +0 -330
  75. package/packages/devtools/react/src/context/DevModeContext.tsx +0 -226
  76. package/packages/devtools/react/src/context/PerformanceContext.tsx +0 -143
  77. package/packages/devtools/react/src/data/designs.ts +0 -13
  78. package/packages/devtools/react/src/hooks/useGitHubLabels.ts +0 -47
  79. package/packages/devtools/react/src/hooks/useVirtualList.ts +0 -124
  80. package/packages/devtools/react/src/index.ts +0 -77
  81. package/packages/devtools/react/src/panels/ConvexSpy.tsx +0 -130
  82. package/packages/devtools/react/src/panels/DatabaseSeeder.tsx +0 -116
  83. package/packages/devtools/react/src/panels/DevModePhase2.tsx +0 -191
  84. package/packages/devtools/react/src/panels/DevModePhase3.tsx +0 -234
  85. package/packages/devtools/react/src/panels/FeatureFlagsToggle.tsx +0 -104
  86. package/packages/devtools/react/src/panels/QuickRouteJump.tsx +0 -152
  87. package/packages/devtools/react/src/services/github-service.ts +0 -247
  88. package/packages/devtools/react/tsconfig.json +0 -31
  89. package/packages/devtools/react/tsup.config.ts +0 -18
  90. package/packages/devtools/solidjs/package.json +0 -49
  91. package/packages/devtools/solidjs/src/components/DesignPreview.tsx +0 -51
  92. package/packages/devtools/solidjs/src/components/DesignSwitcherDropdown.tsx +0 -95
  93. package/packages/devtools/solidjs/src/components/DevSidebar.tsx +0 -247
  94. package/packages/devtools/solidjs/src/components/DevToolbar.tsx +0 -242
  95. package/packages/devtools/solidjs/src/components/GitHubIssueDialog.tsx +0 -400
  96. package/packages/devtools/solidjs/src/components/InspectorOverlay.tsx +0 -311
  97. package/packages/devtools/solidjs/src/components/PageLoadWaterfall.tsx +0 -144
  98. package/packages/devtools/solidjs/src/components/PerformancePanel.tsx +0 -330
  99. package/packages/devtools/solidjs/src/context/DevModeContext.tsx +0 -216
  100. package/packages/devtools/solidjs/src/context/PerformanceContext.tsx +0 -135
  101. package/packages/devtools/solidjs/src/data/designs.ts +0 -13
  102. package/packages/devtools/solidjs/src/hooks/createGitHubLabels.ts +0 -47
  103. package/packages/devtools/solidjs/src/index.ts +0 -64
  104. package/packages/devtools/solidjs/src/services/github-service.ts +0 -247
  105. package/packages/devtools/solidjs/tsconfig.json +0 -21
  106. package/packages/devtools/src/index.ts +0 -377
  107. package/packages/devtools/tsup.config.ts +0 -12
  108. package/packages/env/package.json +0 -30
  109. package/packages/env/src/index.ts +0 -264
  110. package/packages/env/tsup.config.ts +0 -12
  111. package/packages/errors/package.json +0 -27
  112. package/packages/errors/react/package.json +0 -72
  113. package/packages/errors/react/src/analytics.ts +0 -16
  114. package/packages/errors/react/src/components/ErrorBoundary.tsx +0 -248
  115. package/packages/errors/react/src/components/ErrorDisplay.tsx +0 -328
  116. package/packages/errors/react/src/components/ValidationErrors.tsx +0 -102
  117. package/packages/errors/react/src/config.ts +0 -199
  118. package/packages/errors/react/src/constants.ts +0 -74
  119. package/packages/errors/react/src/hooks/useErrorBoundary.ts +0 -92
  120. package/packages/errors/react/src/hooks/useErrorHandler.ts +0 -87
  121. package/packages/errors/react/src/index.ts +0 -96
  122. package/packages/errors/react/src/types.ts +0 -102
  123. package/packages/errors/react/src/utils/errorMessages.ts +0 -35
  124. package/packages/errors/react/src/utils/errorPolicy.ts +0 -139
  125. package/packages/errors/react/src/utils/extractAppError.ts +0 -174
  126. package/packages/errors/react/src/utils/formatError.ts +0 -112
  127. package/packages/errors/react/tsconfig.json +0 -25
  128. package/packages/errors/react/tsup.config.ts +0 -24
  129. package/packages/errors/solidjs/package.json +0 -46
  130. package/packages/errors/solidjs/src/components/ErrorDisplay.tsx +0 -179
  131. package/packages/errors/solidjs/src/config.ts +0 -98
  132. package/packages/errors/solidjs/src/hooks/createErrorHandler.ts +0 -107
  133. package/packages/errors/solidjs/src/index.ts +0 -61
  134. package/packages/errors/solidjs/src/types.ts +0 -34
  135. package/packages/errors/solidjs/src/utils/errorPolicy.ts +0 -56
  136. package/packages/errors/solidjs/src/utils/extractAppError.ts +0 -94
  137. package/packages/errors/solidjs/src/utils/formatError.ts +0 -33
  138. package/packages/errors/solidjs/tsconfig.json +0 -26
  139. package/packages/errors/solidjs/tsup.config.ts +0 -21
  140. package/packages/errors/src/index.ts +0 -320
  141. package/packages/errors/tsup.config.ts +0 -12
  142. package/packages/logger/package.json +0 -27
  143. package/packages/logger/react/package.json +0 -46
  144. package/packages/logger/react/src/index.ts +0 -4
  145. package/packages/logger/react/src/useMetrics.ts +0 -42
  146. package/packages/logger/react/src/usePerformanceLog.ts +0 -61
  147. package/packages/logger/react/tsconfig.json +0 -31
  148. package/packages/logger/react/tsup.config.ts +0 -12
  149. package/packages/logger/solidjs/package.json +0 -45
  150. package/packages/logger/solidjs/src/createMetrics.ts +0 -37
  151. package/packages/logger/solidjs/src/createPerformanceLog.ts +0 -58
  152. package/packages/logger/solidjs/src/index.ts +0 -4
  153. package/packages/logger/solidjs/tsconfig.json +0 -32
  154. package/packages/logger/solidjs/tsup.config.ts +0 -12
  155. package/packages/logger/src/index.ts +0 -363
  156. package/packages/logger/tsup.config.ts +0 -12
  157. package/packages/perf/package.json +0 -27
  158. package/packages/perf/react/package.json +0 -59
  159. package/packages/perf/react/src/components/PerformanceDashboard.tsx +0 -257
  160. package/packages/perf/react/src/hooks/useMonitoredQuery.ts +0 -89
  161. package/packages/perf/react/src/hooks/usePerformanceMetrics.ts +0 -78
  162. package/packages/perf/react/src/index.ts +0 -33
  163. package/packages/perf/react/src/services/PerformanceMonitor.ts +0 -313
  164. package/packages/perf/react/src/types.ts +0 -77
  165. package/packages/perf/react/tsconfig.json +0 -25
  166. package/packages/perf/react/tsup.config.ts +0 -19
  167. package/packages/perf/solidjs/package.json +0 -41
  168. package/packages/perf/solidjs/src/components/PerformanceDashboard.tsx +0 -207
  169. package/packages/perf/solidjs/src/hooks/createPerformanceMetrics.ts +0 -73
  170. package/packages/perf/solidjs/src/index.ts +0 -31
  171. package/packages/perf/solidjs/src/services/PerformanceMonitor.ts +0 -134
  172. package/packages/perf/solidjs/src/types.ts +0 -78
  173. package/packages/perf/solidjs/tsconfig.json +0 -26
  174. package/packages/perf/solidjs/tsup.config.ts +0 -14
  175. package/packages/perf/src/index.ts +0 -410
  176. package/packages/perf/tsup.config.ts +0 -12
  177. package/pnpm-workspace.yaml +0 -2
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/context/DevModeContext.tsx","../src/context/PerformanceContext.tsx","../src/services/github-service.ts","../src/hooks/createGitHubLabels.ts","../src/components/GitHubIssueDialog.tsx","../src/components/PerformancePanel.tsx","../src/components/DevToolbar.tsx","../src/components/DevSidebar.tsx","../src/components/InspectorOverlay.tsx","../src/components/DesignPreview.tsx","../src/components/DesignSwitcherDropdown.tsx","../src/components/PageLoadWaterfall.tsx","../src/data/designs.ts"],"names":["DevModeProvider","createContext","useContext","PerformanceProvider","createSignal","createEffect","jsx","GitHubIssueDialog","MiniBar","cn","MetricRow","jsxs","StatCard","FilterToggle","PerformancePanel","ToolbarButton","Fragment","ExpandableSection","DevToolbar","Activity","Bug","Lightbulb","IssueCard","createMemo","Clock","ExternalLink","DevSidebar","bugs","features","X","onCleanup","designs","onMount"],"mappings":"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","file":"index.js","sourcesContent":["// @geenius/tools-devtools-solidjs — src/context/DevModeContext.tsx\n\nimport { createContext, useContext, createSignal, createEffect, type JSX } from 'solid-js'\n\nconst DEV_MODE_STORAGE_KEY = 'geenius-dev-mode-state'\n\nexport interface ComponentDetails {\n name: string\n file?: string\n selector: string\n key?: string\n props?: Record<string, unknown>\n}\n\ninterface DevModeState {\n isDevMode: boolean\n isSidebarOpen: boolean\n isInspectorMode: boolean\n issueDialog: {\n isOpen: boolean\n type: 'bug' | 'feature'\n initialDescription?: string\n componentDetails?: ComponentDetails[]\n }\n}\n\nexport interface DevModeContextValue extends DevModeState {\n toggleDevMode: () => void\n toggleSidebar: () => void\n toggleInspector: () => void\n setDevMode: (enabled: boolean) => void\n setSidebarOpen: (open: boolean) => void\n setInspectorMode: (enabled: boolean) => void\n openIssueDialog: (\n type: 'bug' | 'feature',\n description?: string,\n componentDetails?: ComponentDetails[],\n ) => void\n closeIssueDialog: () => void\n}\n\nconst defaultState: DevModeState = {\n isDevMode: false,\n isSidebarOpen: false,\n isInspectorMode: false,\n issueDialog: {\n isOpen: false,\n type: 'bug',\n initialDescription: '',\n },\n}\n\nconst DevModeContext = createContext<DevModeContextValue | undefined>(undefined)\n\nexport function createDevMode() {\n const context = useContext(DevModeContext)\n if (!context) {\n throw new Error('createDevMode must be used within a DevModeProvider')\n }\n return context\n}\n\nexport function createDevModeOptional(): DevModeContextValue | null {\n return useContext(DevModeContext) ?? null\n}\n\nexport interface DevModeProviderProps {\n children: JSX.Element\n /** Whether dev tools are allowed. Default: checks import.meta.env.DEV */\n isAllowed?: boolean\n}\n\nexport const DevModeProvider = memo(function DevModeProvider({\n children,\n isAllowed,\n}: DevModeProviderProps) {\n const resolvedAllowed = isAllowed ?? resolveDevAllowed()\n\n const [state, setState] = createSignal<DevModeState>(() => {\n if (!resolvedAllowed || typeof window === 'undefined') return defaultState\n\n try {\n const stored = localStorage.getItem(DEV_MODE_STORAGE_KEY)\n if (stored) {\n const parsed = JSON.parse(stored) as Partial<DevModeState>\n return {\n isDevMode: parsed.isDevMode ?? false,\n isSidebarOpen: false,\n isInspectorMode: false,\n issueDialog: defaultState.issueDialog,\n }\n }\n } catch {\n // Ignore parse errors\n }\n return defaultState\n })\n\n createEffect(() => {\n if (!resolvedAllowed || typeof window === 'undefined') return\n\n try {\n localStorage.setItem(\n DEV_MODE_STORAGE_KEY,\n JSON.stringify({ isDevMode: state.isDevMode }),\n )\n } catch {\n // Ignore storage errors\n }\n }, [state.isDevMode, resolvedAllowed])\n\n const toggleDevMode = () => {\n setState((prev) => ({\n ...prev,\n isDevMode: !prev.isDevMode,\n isSidebarOpen: prev.isDevMode ? false : prev.isSidebarOpen,\n isInspectorMode: prev.isDevMode ? false : prev.isInspectorMode,\n }))\n }\n\n const toggleSidebar = () => {\n setState((prev) => ({ ...prev, isSidebarOpen: !prev.isSidebarOpen }))\n }\n\n const toggleInspector = () => {\n setState((prev) => ({\n ...prev,\n isInspectorMode: !prev.isInspectorMode,\n }))\n }\n\n const setDevMode = (enabled: boolean) => {\n setState((prev) => ({\n ...prev,\n isDevMode: enabled,\n isSidebarOpen: enabled ? prev.isSidebarOpen : false,\n isInspectorMode: enabled ? prev.isInspectorMode : false,\n }))\n }\n\n const setSidebarOpen = (open: boolean) => {\n setState((prev) => ({ ...prev, isSidebarOpen: open }))\n }\n\n const setInspectorMode = (enabled: boolean) => {\n setState((prev) => ({ ...prev, isInspectorMode: enabled }))\n }\n\n const openIssueDialog = (\n type: 'bug' | 'feature',\n description?: string,\n componentDetails?: ComponentDetails[],\n ) => {\n setState((prev) => ({\n ...prev,\n issueDialog: {\n isOpen: true,\n type,\n initialDescription: description,\n componentDetails,\n },\n }))\n }\n\n const closeIssueDialog = () => {\n setState((prev) => ({\n ...prev,\n issueDialog: { ...prev.issueDialog, isOpen: false },\n }))\n }\n\n if (!resolvedAllowed) {\n return <>{children}</>\n }\n\n return (\n <DevModeContext.Provider\n value={{\n ...state,\n toggleDevMode,\n toggleSidebar,\n toggleInspector,\n setDevMode,\n setSidebarOpen,\n setInspectorMode,\n openIssueDialog,\n closeIssueDialog,\n }}\n >\n {children}\n </DevModeContext.Provider>\n )\n})\n\nexport function createIsDevToolsVisible(): boolean {\n const context = createDevModeOptional()\n if (!context) return false\n return context.isDevMode\n}\n\nexport function createIsDevAllowed(isAllowed?: boolean): boolean {\n return isAllowed ?? resolveDevAllowed()\n}\n\nfunction resolveDevAllowed(): boolean {\n try {\n // @ts-expect-error — Vite env\n if (import.meta?.env?.VITE_CONVEX_IS_DEV === 'true') return true\n // @ts-expect-error — Vite env\n if (import.meta?.env?.DEV) return true\n } catch {\n // Not in Vite\n }\n return false\n}\n","// @geenius/tools-devtools-solidjs — src/context/PerformanceContext.tsx\n\nimport { createContext, useContext, createSignal, createEffect, type JSX } from 'solid-js'\nimport { metricsStore, type PerformanceMetric } from '@geenius/tools-logger'\n\nconst MAX_METRICS = 100\n\ninterface PerformanceContextValue {\n isPerformancePanelOpen: boolean\n metrics: PerformanceMetric[]\n filters: {\n network: boolean\n query: boolean\n mutation: boolean\n render: boolean\n route: boolean\n }\n stats: {\n totalRequests: number\n avgDuration: number\n slowRequests: number\n fastRequests: number\n }\n togglePerformancePanel: () => void\n clearMetrics: () => void\n toggleFilter: (filter: keyof PerformanceContextValue['filters']) => void\n}\n\nconst PerformanceContext = createContext<PerformanceContextValue | undefined>(\n undefined,\n)\n\nexport function createPerformanceContext() {\n const context = useContext(PerformanceContext)\n if (!context) {\n throw new Error(\n 'createPerformanceContext must be used within PerformanceProvider',\n )\n }\n return context\n}\n\nexport function createPerformanceContextOptional(): PerformanceContextValue | null {\n return useContext(PerformanceContext) ?? null\n}\n\ninterface PerformanceProviderProps {\n children: JSX.Element\n}\n\nexport const PerformanceProvider = memo(function PerformanceProvider({\n children,\n}: PerformanceProviderProps) {\n const [isPerformancePanelOpen, setIsPerformancePanelOpen] = createSignal(false)\n const [metrics, setMetrics] = createSignal<PerformanceMetric[]>([])\n const [filters, setFilters] = createSignal({\n network: true,\n query: true,\n mutation: true,\n render: true,\n route: true,\n })\n\n createEffect(() => {\n const unsubscribe = metricsStore.subscribe((newMetrics) => {\n setMetrics((prev) => {\n const combined = [...prev, ...newMetrics]\n if (combined.length > MAX_METRICS) {\n return combined.slice(-MAX_METRICS)\n }\n return combined\n })\n })\n\n return () => unsubscribe()\n })\n\n const stats = () => {\n const filtered = metrics.filter((m) => m.duration !== undefined)\n const total = filtered.length\n\n if (total === 0) {\n return {\n totalRequests: 0,\n avgDuration: 0,\n slowRequests: 0,\n fastRequests: 0,\n }\n }\n\n const durations = filtered.map((m) => m.duration!)\n const avg = durations.reduce((a, b) => a + b, 0) / total\n const slow = durations.filter((d) => d > 100).length\n const fast = durations.filter((d) => d < 50).length\n\n return {\n totalRequests: total,\n avgDuration: Math.round(avg * 100) / 100,\n slowRequests: slow,\n fastRequests: fast,\n }\n }\n\n const togglePerformancePanel = () => {\n setIsPerformancePanelOpen((prev) => !prev)\n }\n\n const clearMetrics = () => {\n setMetrics([])\n metricsStore.clear()\n }\n\n const toggleFilter = (filter: keyof typeof filters) => {\n setFilters((prev) => ({\n ...prev,\n [filter]: !prev[filter],\n }))\n }\n\n return (\n <PerformanceContext.Provider\n value={{\n isPerformancePanelOpen,\n metrics,\n filters,\n stats: stats(),\n togglePerformancePanel,\n clearMetrics,\n toggleFilter,\n }}\n >\n {children}\n </PerformanceContext.Provider>\n )\n})\n","// @geenius/tools-devtools-react — src/services/github-service.ts\n// GitHub API service for creating issues — adapted from geenius-react\n\nexport interface GitHubIssue {\n title: string\n body: string\n labels?: string[]\n}\n\nexport interface GitHubLabel {\n id: number\n name: string\n color: string\n description: string | null\n}\n\nexport interface CreateIssueResponse {\n id: number\n number: number\n html_url: string\n title: string\n}\n\nexport interface GitHubIssueListItem {\n id: number\n number: number\n title: string\n body: string | null\n html_url: string\n state: 'open' | 'closed'\n created_at: string\n updated_at: string\n labels: GitHubLabel[]\n user: {\n login: string\n avatar_url: string\n } | null\n}\n\nexport type IssueFilter = 'all' | 'bug' | 'enhancement'\n\n/**\n * GitHub configuration. Provide via `configureGitHub()` or env vars.\n */\nexport interface GitHubConfig {\n owner: string\n repo: string\n branch?: string\n token: string\n}\n\nlet _config: GitHubConfig | null = null\n\n/**\n * Configure GitHub integration.\n *\n * @example\n * ```ts\n * configureGitHub({\n * owner: 'my-org',\n * repo: 'my-app',\n * token: import.meta.env.VITE_GITHUB_TOKEN,\n * })\n * ```\n */\nexport function configureGitHub(config: GitHubConfig): void {\n _config = config\n}\n\nexport function getGitHubConfig(): GitHubConfig {\n if (_config) return _config\n\n // Fallback: try env vars (Vite convention)\n let owner = ''\n let repo = ''\n let branch = 'main'\n let token = ''\n try {\n // @ts-expect-error — Vite env\n owner = import.meta?.env?.VITE_GITHUB_OWNER ?? ''\n // @ts-expect-error — Vite env\n repo = import.meta?.env?.VITE_GITHUB_REPO ?? ''\n // @ts-expect-error — Vite env\n branch = import.meta?.env?.VITE_GITHUB_BRANCH ?? 'main'\n // @ts-expect-error — Vite env\n token = import.meta?.env?.VITE_GITHUB_TOKEN ?? ''\n } catch {\n // Not in Vite\n }\n\n return { owner, repo, branch, token }\n}\n\nexport function isGitHubConfigured(): boolean {\n const { owner, repo, token } = getGitHubConfig()\n const isPlaceholder =\n !token || token === 'ghp_your_personal_access_token_here'\n return Boolean(owner && repo && token && !isPlaceholder)\n}\n\nexport async function createGitHubIssue(\n issue: GitHubIssue,\n): Promise<CreateIssueResponse> {\n const { owner, repo, token } = getGitHubConfig()\n\n if (!owner || !repo || !token) {\n throw new Error(\n 'GitHub configuration is incomplete. Call configureGitHub() or set VITE_GITHUB_* env vars.',\n )\n }\n\n const response = await fetch(\n `https://api.github.com/repos/${owner}/${repo}/issues`,\n {\n method: 'POST',\n headers: {\n Accept: 'application/vnd.github+json',\n Authorization: `Bearer ${token}`,\n 'X-GitHub-Api-Version': '2022-11-28',\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n title: issue.title,\n body: issue.body,\n labels: issue.labels || [],\n }),\n },\n )\n\n if (!response.ok) {\n const error = await response\n .json()\n .catch(() => ({ message: 'Unknown error' }))\n throw new Error(\n `Failed to create issue: ${error.message || response.statusText}`,\n )\n }\n\n return response.json()\n}\n\nexport async function getRepositoryLabels(): Promise<GitHubLabel[]> {\n const { owner, repo, token } = getGitHubConfig()\n\n if (!owner || !repo || !token) return []\n\n try {\n const response = await fetch(\n `https://api.github.com/repos/${owner}/${repo}/labels`,\n {\n headers: {\n Accept: 'application/vnd.github+json',\n Authorization: `Bearer ${token}`,\n 'X-GitHub-Api-Version': '2022-11-28',\n },\n },\n )\n\n if (!response.ok) return []\n return response.json()\n } catch {\n return []\n }\n}\n\nexport async function getGitHubIssues(\n filter: IssueFilter = 'all',\n state: 'open' | 'closed' | 'all' = 'open',\n): Promise<GitHubIssueListItem[]> {\n const { owner, repo, token } = getGitHubConfig()\n\n if (!owner || !repo || !token) return []\n\n try {\n const params = new URLSearchParams({\n state,\n per_page: '50',\n sort: 'updated',\n direction: 'desc',\n })\n\n if (filter !== 'all') {\n params.set('labels', filter)\n }\n\n const response = await fetch(\n `https://api.github.com/repos/${owner}/${repo}/issues?${params.toString()}`,\n {\n headers: {\n Accept: 'application/vnd.github+json',\n Authorization: `Bearer ${token}`,\n 'X-GitHub-Api-Version': '2022-11-28',\n },\n },\n )\n\n if (!response.ok) return []\n\n const issues: GitHubIssueListItem[] = await response.json()\n return issues.filter((issue) => !('pull_request' in issue))\n } catch {\n return []\n }\n}\n\nexport function generateContextInfo(): string {\n const lines: string[] = [\n '---',\n '### Context',\n '',\n `**Page URL:** ${window.location.href}`,\n `**Timestamp:** ${new Date().toISOString()}`,\n `**User Agent:** ${navigator.userAgent}`,\n `**Branch:** ${getGitHubConfig().branch ?? 'main'}`,\n ]\n\n if (typeof window !== 'undefined') {\n lines.push(`**Screen:** ${window.innerWidth}x${window.innerHeight}`)\n }\n\n return lines.join('\\n')\n}\n\nexport function getIssueType(\n issue: GitHubIssueListItem,\n): 'bug' | 'feature' | 'other' {\n const labelNames = issue.labels.map((l) => l.name.toLowerCase())\n if (labelNames.includes('bug')) return 'bug'\n if (labelNames.includes('enhancement') || labelNames.includes('feature'))\n return 'feature'\n return 'other'\n}\n\nexport function formatRelativeTime(dateString: string): string {\n const date = new Date(dateString)\n const now = new Date()\n const diffMs = now.getTime() - date.getTime()\n const diffMins = Math.floor(diffMs / 60000)\n const diffHours = Math.floor(diffMs / 3600000)\n const diffDays = Math.floor(diffMs / 86400000)\n\n if (diffMins < 1) return 'just now'\n if (diffMins < 60) return `${diffMins}m ago`\n if (diffHours < 24) return `${diffHours}h ago`\n if (diffDays < 7) return `${diffDays}d ago`\n return date.toLocaleDateString()\n}\n","// @geenius/tools-devtools-solidjs — src/hooks/createGitHubLabels.ts\n\nimport { createSignal, createEffect } from 'solid-js'\nimport {\n getRepositoryLabels,\n isGitHubConfigured,\n type GitHubLabel,\n} from '../services/github-service'\n\n/**\n * Hook to fetch GitHub repository labels.\n * Fetches once on mount if GitHub is configured.\n * No external dependencies (no react-query).\n */\nexport function createGitHubLabels() {\n const [data, setData] = createSignal<GitHubLabel[] | undefined>(undefined)\n const [isLoading, setIsLoading] = createSignal(false)\n const [error, setError] = createSignal<Error | null>(null)\n const isConfigured = isGitHubConfigured()\n\n createEffect(() => {\n if (!isConfigured) return\n\n let cancelled = false\n setIsLoading(true)\n\n getRepositoryLabels()\n .then((labels) => {\n if (!cancelled) {\n setData(labels)\n setIsLoading(false)\n }\n })\n .catch((err) => {\n if (!cancelled) {\n setError(err)\n setIsLoading(false)\n }\n })\n\n return () => {\n cancelled = true\n }\n })\n\n return { data, isLoading, error, isConfigured }\n}\n","// @geenius/tools-devtools-solidjs — src/components/GitHubIssueDialog.tsx\n\nimport { createSignal, createEffect } from 'solid-js'\nimport { cn } from '@geenius/ui-solid'\nimport {\n Bug,\n Lightbulb,\n ExternalLink,\n AlertCircle,\n CheckCircle2,\n Github,\n Component,\n} from 'lucide-solid'\nimport type { ComponentDetails } from '../context/DevModeContext'\nimport { createGitHubLabels } from '../hooks/createGitHubLabels'\nimport {\n createGitHubIssue,\n isGitHubConfigured,\n type CreateIssueResponse,\n} from '../services/github-service'\n\ntype IssueType = 'bug' | 'feature'\n\ninterface FormState {\n type: IssueType\n title: string\n description: string\n selectedLabel: string\n}\n\nconst initialFormState: FormState = {\n type: 'feature',\n title: '',\n description: '',\n selectedLabel: '',\n}\n\nexport interface GitHubIssueDialogProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n initialType?: IssueType\n initialDescription?: string\n componentDetails?: ComponentDetails[]\n}\n\nexport const GitHubIssueDialog = memo(function GitHubIssueDialog({\n open,\n onOpenChange,\n initialType = 'feature',\n initialDescription = '',\n componentDetails,\n}: GitHubIssueDialogProps) {\n const [form, setForm] = createSignal<FormState>({\n ...initialFormState,\n type: initialType,\n description: initialDescription,\n })\n const [loading, setLoading] = createSignal(false)\n const [success, setSuccess] = createSignal<CreateIssueResponse | null>(null)\n const [error, setError] = createSignal<string | null>(null)\n const { data: labels } = createGitHubLabels()\n const configured = isGitHubConfigured()\n let dialogRef: HTMLDivElement | undefined\n\n createEffect(() => {\n if (open) {\n setForm({\n ...initialFormState,\n type: initialType,\n description: initialDescription,\n })\n setError(null)\n setSuccess(null)\n }\n })\n\n // Close on Escape\n createEffect(() => {\n if (!open) return\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') onOpenChange(false)\n }\n window.addEventListener('keydown', handleKeyDown)\n return () => window.removeEventListener('keydown', handleKeyDown)\n })\n\n const handleSubmit = async () => {\n if (!form.title.trim()) {\n setError('Please provide a title for the issue.')\n return\n }\n\n setLoading(true)\n setError(null)\n\n try {\n const typePrefix =\n form.type === 'bug' ? '🐛 Bug Report' : '✨ Feature Request'\n\n let componentSection = ''\n if (componentDetails && componentDetails.length > 0) {\n componentSection = `\\n### Components\\n${componentDetails\n .map((detail, index) => {\n let propsBlock = ''\n if (detail.props) {\n try {\n propsBlock = `\\n- **Props:**\\n\\`\\`\\`json\\n${JSON.stringify(detail.props, null, 2)}\\n\\`\\`\\``\n } catch {\n propsBlock = '\\n- **Props:** (Complex Object)'\n }\n }\n return `\n**Component ${index + 1}**\n- **Name:** \\`${detail.name}\\`\n${detail.key ? `- **Key:** \\`${detail.key}\\`` : ''}\n${detail.file ? `- **File:** \\`${detail.file}\\`` : ''}\n- **Selector:** \\`${detail.selector}\\`${propsBlock}\n`\n })\n .join('\\n')}`\n }\n\n const descriptionSection = form.description\n ? `## Description\\n${form.description}`\n : ''\n\n const timestamp = new Date().toISOString()\n const theme =\n typeof document !== 'undefined' &&\n document.documentElement.classList.contains('dark')\n ? 'dark'\n : 'light'\n const viewport =\n typeof window !== 'undefined'\n ? `${window.innerWidth}x${window.innerHeight}`\n : 'unknown'\n const userAgent =\n typeof navigator !== 'undefined' ? navigator.userAgent : 'unknown'\n const url =\n typeof window !== 'undefined' ? window.location.href : 'unknown'\n\n const contextSection = `\n-----\n**Context Information**\n- **URL:** ${url}\n- **Time:** ${timestamp}\n- **Theme:** ${theme}\n- **Viewport:** ${viewport}\n- **User Agent:** ${userAgent}\n`.trim()\n\n const body = [\n `# ${typePrefix}`,\n '',\n descriptionSection,\n componentSection,\n '',\n contextSection,\n ]\n .filter(Boolean)\n .join('\\n')\n\n const issueLabels: string[] = []\n if (form.type === 'bug') issueLabels.push('bug')\n if (form.type === 'feature') issueLabels.push('enhancement')\n if (form.selectedLabel) issueLabels.push(form.selectedLabel)\n\n const result = await createGitHubIssue({\n title: `[${form.type === 'bug' ? 'Bug' : 'Feature'}] ${form.title}`,\n body,\n labels: issueLabels,\n })\n\n setSuccess(result)\n } catch (err) {\n setError(err instanceof Error ? err.message : 'An error occurred')\n } finally {\n setLoading(false)\n }\n }\n\n const handleFieldChange = <K extends keyof FormState>(field: K, value: FormState[K]) => {\n setForm((prev) => ({ ...prev, [field]: value }))\n setError(null)\n }\n\n if (!open) return null\n\n return (\n <div class=\"fixed inset-0 z-[10000] flex items-center justify-center\" data-dev-tool=\"true\">\n {/* Backdrop */}\n <div\n class=\"absolute inset-0 bg-black/60 backdrop-blur-sm\"\n onClick={() => onOpenChange(false)}\n />\n\n {/* Dialog */}\n <div\n ref={dialogRef}\n class={cn(\n 'relative z-10 w-full max-w-[500px] mx-4',\n 'bg-gradient-to-br from-slate-900 to-slate-800',\n 'border border-white/10 rounded-2xl shadow-2xl',\n 'max-h-[90vh] overflow-y-auto',\n 'animate-in fade-in zoom-in-95 duration-200',\n )}\n >\n {/* Header */}\n <div class=\"flex items-center gap-2 px-6 py-4 border-b border-white/10\">\n <Github class=\"h-5 w-5 text-primary\" />\n <h2 class=\"text-lg font-bold text-white\">Create GitHub Issue</h2>\n </div>\n\n <div class=\"px-6 py-4\">\n {!configured ? (\n <div class=\"py-6\">\n <div class=\"text-center space-y-3\">\n <div class=\"mx-auto w-12 h-12 rounded-full bg-yellow-500/10 flex items-center justify-center\">\n <AlertCircle class=\"h-6 w-6 text-yellow-500\" />\n </div>\n <p class=\"text-sm text-white/60\">\n GitHub integration is not configured. Call{' '}\n <code class=\"text-xs bg-white/10 px-1.5 py-0.5 rounded\">\n configureGitHub()\n </code>{' '}\n or set VITE_GITHUB_TOKEN to enable issue creation.\n </p>\n </div>\n </div>\n ) : success ? (\n <div class=\"py-6\">\n <div class=\"text-center space-y-4\">\n <CheckCircle2 class=\"mx-auto h-12 w-12 text-green-500\" />\n <div>\n <p class=\"font-medium text-white\">Issue Created!</p>\n <p class=\"text-sm text-white/60 mt-1\">{success.title}</p>\n </div>\n <a\n href={success.html_url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class=\"inline-flex items-center gap-2 px-4 py-2 bg-primary text-white rounded-lg hover:bg-primary/80 transition-colors\"\n >\n <ExternalLink class=\"h-4 w-4\" />\n View on GitHub\n </a>\n </div>\n </div>\n ) : (\n <div class=\"space-y-4 py-2\">\n {/* Issue Type Selector */}\n <div class=\"grid grid-cols-2 gap-2\">\n <button\n type=\"button\"\n onClick={() => handleFieldChange('type', 'feature')}\n class={cn(\n 'flex items-center gap-2 p-3 rounded-lg border-2 transition-all',\n form.type === 'feature'\n ? 'border-emerald-500 bg-emerald-500/10 text-emerald-400'\n : 'border-white/10 text-white/60 hover:border-white/20',\n )}\n >\n <Lightbulb class=\"h-4 w-4\" />\n <span class=\"font-medium text-sm\">Feature</span>\n </button>\n <button\n type=\"button\"\n onClick={() => handleFieldChange('type', 'bug')}\n class={cn(\n 'flex items-center gap-2 p-3 rounded-lg border-2 transition-all',\n form.type === 'bug'\n ? 'border-red-500 bg-red-500/10 text-red-400'\n : 'border-white/10 text-white/60 hover:border-white/20',\n )}\n >\n <Bug class=\"h-4 w-4\" />\n <span class=\"font-medium text-sm\">Bug Report</span>\n </button>\n </div>\n\n {/* Component Details */}\n {componentDetails && componentDetails.length > 0 && (\n <div class=\"p-3 rounded-lg bg-white/5 border border-white/10\">\n <div class=\"flex items-center gap-1.5 text-xs text-white/50 mb-2\">\n <Component class=\"h-3 w-3\" />\n <span>\n {componentDetails.length} component\n {componentDetails.length > 1 ? 's' : ''} attached\n </span>\n </div>\n <div class=\"space-y-1\">\n {componentDetails.map((c, i) => (\n <div key={i} class=\"text-xs font-mono text-white/80\">\n {c.name}\n {c.key && (\n <span class=\"text-white/40 ml-1\">\n key={c.key}\n </span>\n )}\n </div>\n ))}\n </div>\n </div>\n )}\n\n {/* Title */}\n <div>\n <label class=\"block text-xs font-medium text-white/60 mb-1\">\n Title\n </label>\n <input\n type=\"text\"\n value={form.title}\n onChange={(e) => handleFieldChange('title', e.target.value)}\n placeholder={\n form.type === 'bug'\n ? 'Describe the bug...'\n : 'Feature idea...'\n }\n class=\"w-full px-3 py-2 bg-white/5 border border-white/10 rounded-lg text-sm text-white placeholder:text-white/30 focus:outline-none focus:ring-2 focus:ring-primary/50\"\n autoFocus\n />\n </div>\n\n {/* Description */}\n <div>\n <label class=\"block text-xs font-medium text-white/60 mb-1\">\n Description\n </label>\n <textarea\n value={form.description}\n onChange={(e) =>\n handleFieldChange('description', e.target.value)\n }\n placeholder=\"Provide more details...\"\n rows={4}\n class=\"w-full px-3 py-2 bg-white/5 border border-white/10 rounded-lg text-sm text-white placeholder:text-white/30 focus:outline-none focus:ring-2 focus:ring-primary/50 resize-none\"\n />\n </div>\n\n {/* Label Selector */}\n {labels && labels.length > 0 && (\n <div>\n <label class=\"block text-xs font-medium text-white/60 mb-1\">\n Label\n </label>\n <select\n value={form.selectedLabel}\n onChange={(e) =>\n handleFieldChange('selectedLabel', e.target.value)\n }\n class=\"w-full px-3 py-2 bg-white/5 border border-white/10 rounded-lg text-sm text-white focus:outline-none focus:ring-2 focus:ring-primary/50\"\n >\n <option value=\"\">No label</option>\n {labels.map((label) => (\n <option key={label.id} value={label.name}>\n {label.name}\n </option>\n ))}\n </select>\n </div>\n )}\n\n {/* Error */}\n {error && (\n <div class=\"flex items-center gap-2 p-3 bg-red-500/10 border border-red-500/20 rounded-lg\">\n <AlertCircle class=\"h-4 w-4 text-red-400 flex-shrink-0\" />\n <p class=\"text-xs text-red-300\">{error}</p>\n </div>\n )}\n\n {/* Actions */}\n <div class=\"flex justify-end gap-2 pt-2\">\n <button\n onClick={() => onOpenChange(false)}\n class=\"px-4 py-2 text-sm text-white/60 hover:text-white transition-colors\"\n >\n Cancel\n </button>\n <button\n onClick={handleSubmit}\n disabled={loading || !form.title.trim()}\n class={cn(\n 'px-4 py-2 text-sm font-medium rounded-lg transition-all',\n loading || !form.title.trim()\n ? 'bg-white/10 text-white/30 cursor-not-allowed'\n : 'bg-primary text-white hover:bg-primary/80',\n )}\n >\n {loading ? 'Creating...' : 'Create Issue'}\n </button>\n </div>\n </div>\n )}\n </div>\n </div>\n </div>\n )\n})\n","// @geenius/tools-devtools-solidjs — src/components/PerformancePanel.tsx\n\nimport { createMemo, createEffect } from 'solid-js'\nimport { cn } from '@geenius/ui-solid'\nimport { X, Trash2, Activity, Zap, Clock, AlertTriangle } from 'lucide-solid'\nimport { createPerformanceContext } from '../context/PerformanceContext'\nimport type { PerformanceMetric } from '@geenius/tools-logger'\n\nfunction getDurationColor(duration: number | undefined): string {\n if (duration === undefined) return 'text-white/40'\n if (duration > 100) return 'text-red-400'\n if (duration > 50) return 'text-yellow-400'\n return 'text-green-400'\n}\n\nfunction getDurationBgColor(duration: number | undefined): string {\n if (duration === undefined) return 'bg-white/20'\n if (duration > 100) return 'bg-red-500'\n if (duration > 50) return 'bg-yellow-500'\n return 'bg-green-500'\n}\n\nfunction getTypeColor(type: string): string {\n switch (type) {\n case 'network':\n return 'text-blue-400'\n case 'query':\n return 'text-orange-400'\n case 'mutation':\n return 'text-red-400'\n case 'render':\n return 'text-purple-400'\n case 'route':\n return 'text-green-400'\n case 'component':\n return 'text-cyan-400'\n case 'effect':\n return 'text-teal-400'\n default:\n return 'text-white/60'\n }\n}\n\nfunction getTypeIcon(type: string) {\n switch (type) {\n case 'network':\n return '🌐'\n case 'query':\n return '🔍'\n case 'mutation':\n return '✏️'\n case 'render':\n return '🎨'\n case 'route':\n return '🧭'\n case 'component':\n return '📦'\n case 'effect':\n return '⚡'\n default:\n return '📝'\n }\n}\n\nconst MiniBar = memo(function MiniBar({\n height,\n color,\n label,\n}: {\n height: number\n color: string\n label: string\n}) {\n return (\n <div class=\"flex flex-col items-center gap-0.5 flex-1 min-w-0\">\n <div class=\"w-full h-12 flex items-end\">\n <div\n class={cn('w-full rounded-t-sm transition-all duration-300', color)}\n style={{ height: `${Math.min(height, 100)}%` }}\n title={label}\n />\n </div>\n </div>\n )\n})\n\nconst MetricRow = memo(function MetricRow({\n metric,\n}: {\n metric: PerformanceMetric\n}) {\n const duration = metric.duration\n const durationStr = duration ? `${duration.toFixed(1)}ms` : 'pending...'\n\n return (\n <div\n class={cn(\n 'flex items-center gap-3 px-3 py-2 rounded-lg',\n 'bg-white/5 hover:bg-white/10 transition-colors',\n )}\n >\n <span class=\"text-sm\">{getTypeIcon(metric.type)}</span>\n <div class=\"flex-1 min-w-0\">\n <div class={cn('text-xs font-medium truncate', getTypeColor(metric.type))}>\n {metric.name}\n </div>\n </div>\n <div\n class={cn(\n 'text-xs font-mono font-bold',\n getDurationColor(duration),\n )}\n >\n {durationStr}\n </div>\n </div>\n )\n})\n\nconst StatCard = memo(function StatCard({\n icon: Icon,\n label,\n value,\n color = 'text-white',\n}: {\n icon: React.ElementType\n label: string\n value: string | number\n color?: string\n}) {\n return (\n <div class=\"flex items-center gap-2 px-3 py-2 rounded-lg bg-white/5\">\n <Icon class={cn('w-4 h-4', color)} />\n <div class=\"flex flex-col\">\n <span class=\"text-[10px] text-white/50 uppercase\">{label}</span>\n <span class=\"text-sm font-bold text-white\">{value}</span>\n </div>\n </div>\n )\n})\n\nconst FilterToggle = memo(function FilterToggle({\n label,\n active,\n color,\n onClick,\n}: {\n label: string\n active: boolean\n color: string\n onClick: () => void\n}) {\n return (\n <button\n onClick={onClick}\n class={cn(\n 'px-2 py-1 rounded text-xs font-medium transition-all',\n active\n ? `${color} text-white`\n : 'bg-white/10 text-white/50 hover:bg-white/20',\n )}\n >\n {label}\n </button>\n )\n})\n\nexport const PerformancePanel = memo(function PerformancePanel() {\n const {\n isPerformancePanelOpen,\n metrics,\n filters,\n stats,\n togglePerformancePanel,\n clearMetrics,\n toggleFilter,\n } = createPerformanceContext()\n\n let listRef: HTMLDivElement | undefined\n\n const filteredMetrics = createMemo(() => {\n return metrics.filter((m) => {\n if (m.type === 'network' && !filters.network) return false\n if (m.type === 'query' && !filters.query) return false\n if (m.type === 'mutation' && !filters.mutation) return false\n if (m.type === 'render' && !filters.render) return false\n if (m.type === 'route' && !filters.route) return false\n return true\n })\n })\n\n const chartMetrics = createMemo(() => {\n return filteredMetrics.filter((m) => m.duration !== undefined).slice(-20)\n })\n\n const maxDuration = createMemo(() => {\n if (chartMetrics.length === 0) return 100\n const max = Math.max(...chartMetrics.map((m) => m.duration || 0))\n return Math.max(max, 100)\n })\n\n createEffect(() => {\n if (listRef) {\n listRef.scrollTop = listRef.scrollHeight\n }\n }, [filteredMetrics.length])\n\n if (!isPerformancePanelOpen) return null\n\n return (\n <div\n data-dev-tool=\"true\"\n class={cn(\n 'fixed bottom-20 left-1/2 -translate-x-1/2 z-50',\n 'w-[440px] max-h-[400px]',\n 'rounded-2xl border border-white/10',\n 'bg-gradient-to-b from-slate-900/95 via-slate-800/95 to-slate-900/95',\n 'backdrop-blur-xl shadow-2xl shadow-black/50',\n 'flex flex-col overflow-hidden',\n 'animate-in slide-in-from-bottom-4 fade-in duration-300',\n )}\n >\n {/* Header */}\n <div class=\"flex items-center justify-between px-4 py-3 border-b border-white/10\">\n <div class=\"flex items-center gap-2\">\n <Activity class=\"w-4 h-4 text-primary\" />\n <span class=\"text-sm font-bold text-white\">Performance</span>\n <span class=\"text-xs text-white/40\">\n ({filteredMetrics.length} events)\n </span>\n </div>\n <div class=\"flex items-center gap-1\">\n <button\n onClick={clearMetrics}\n class=\"p-1.5 text-white/40 hover:text-white hover:bg-white/10 rounded-lg transition-colors\"\n title=\"Clear metrics\"\n >\n <Trash2 class=\"w-3.5 h-3.5\" />\n </button>\n <button\n onClick={togglePerformancePanel}\n class=\"p-1.5 text-white/40 hover:text-white hover:bg-white/10 rounded-lg transition-colors\"\n title=\"Close panel\"\n >\n <X class=\"w-4 h-4\" />\n </button>\n </div>\n </div>\n\n {/* Stats Bar */}\n <div class=\"flex gap-2 px-4 py-3 border-b border-white/10 overflow-x-auto\">\n <StatCard\n icon={Activity}\n label=\"Requests\"\n value={stats.totalRequests}\n color=\"text-blue-400\"\n />\n <StatCard\n icon={Clock}\n label=\"Avg\"\n value={`${stats.avgDuration}ms`}\n color={\n stats.avgDuration > 100\n ? 'text-red-400'\n : stats.avgDuration > 50\n ? 'text-yellow-400'\n : 'text-green-400'\n }\n />\n <StatCard\n icon={Zap}\n label=\"Fast\"\n value={stats.fastRequests}\n color=\"text-green-400\"\n />\n <StatCard\n icon={AlertTriangle}\n label=\"Slow\"\n value={stats.slowRequests}\n color={stats.slowRequests > 0 ? 'text-red-400' : 'text-white/50'}\n />\n </div>\n\n {/* Mini Chart */}\n {chartMetrics.length > 0 && (\n <div class=\"px-4 py-3 border-b border-white/10\">\n <div class=\"flex items-end gap-1 h-16\">\n {chartMetrics.map((metric) => (\n <MiniBar\n key={metric.id}\n height={((metric.duration || 0) / maxDuration) * 100}\n color={getDurationBgColor(metric.duration)}\n label={`${metric.name}: ${metric.duration?.toFixed(1)}ms`}\n />\n ))}\n </div>\n <div class=\"flex justify-between mt-1 text-xs text-white/40\">\n <span>Recent requests</span>\n <span>0-{maxDuration.toFixed(0)}ms</span>\n </div>\n </div>\n )}\n\n {/* Filters */}\n <div class=\"flex gap-1 px-4 py-2 border-b border-white/10\">\n <FilterToggle label=\"Network\" active={filters.network} color=\"bg-blue-500\" onClick={() => toggleFilter('network')} />\n <FilterToggle label=\"Query\" active={filters.query} color=\"bg-orange-500\" onClick={() => toggleFilter('query')} />\n <FilterToggle label=\"Mutation\" active={filters.mutation} color=\"bg-red-500\" onClick={() => toggleFilter('mutation')} />\n <FilterToggle label=\"Render\" active={filters.render} color=\"bg-purple-500\" onClick={() => toggleFilter('render')} />\n <FilterToggle label=\"Route\" active={filters.route} color=\"bg-green-500\" onClick={() => toggleFilter('route')} />\n </div>\n\n {/* Metrics List */}\n <div\n ref={listRef}\n class=\"flex-1 overflow-y-auto px-3 py-2 space-y-1 min-h-[100px] max-h-[180px]\"\n >\n {filteredMetrics.length === 0 ? (\n <div class=\"flex items-center justify-center py-8 text-sm text-white/30\">\n No metrics recorded yet\n </div>\n ) : (\n filteredMetrics.map((metric) => (\n <MetricRow key={metric.id} metric={metric} />\n ))\n )}\n </div>\n </div>\n )\n})\n","// @geenius/tools-devtools-solidjs — src/components/DevToolbar.tsx\n\nimport { createSignal, createEffect } from 'solid-js'\nimport { cn } from '@geenius/ui-solid'\nimport {\n Power,\n PanelRight,\n Bug,\n Lightbulb,\n Target,\n Activity,\n} from 'lucide-solid'\nimport { createDevModeOptional, createIsDevAllowed } from '../context/DevModeContext'\nimport { createPerformanceContextOptional } from '../context/PerformanceContext'\nimport { GitHubIssueDialog } from './GitHubIssueDialog'\nimport { PerformancePanel } from './PerformancePanel'\n\ninterface ToolbarButtonProps {\n icon: React.JSX.Element\n label: string\n onClick?: () => void\n active?: boolean\n variant?: 'default' | 'primary' | 'success' | 'danger'\n showLabel?: boolean\n disabled?: boolean\n}\n\nconst ToolbarButton = memo(function ToolbarButton({\n icon,\n label,\n onClick,\n active = false,\n variant = 'default',\n showLabel = true,\n disabled = false,\n}: ToolbarButtonProps) {\n const variantStyles = {\n default: active\n ? 'bg-white/20 text-white'\n : 'text-white/70 hover:text-white hover:bg-white/10',\n primary: active\n ? 'bg-primary/30 text-primary-foreground'\n : 'text-white/70 hover:text-primary hover:bg-primary/10',\n success: 'text-white/70 hover:text-emerald-400 hover:bg-emerald-500/10',\n danger: 'text-white/70 hover:text-red-400 hover:bg-red-500/10',\n }\n\n const content = (\n <>\n {icon}\n {showLabel && (\n <span class=\"hidden sm:inline text-xs font-medium\">{label}</span>\n )}\n </>\n )\n\n const className = cn(\n 'flex items-center gap-2 px-3 py-2 rounded-lg transition-all duration-200',\n 'focus:outline-none focus:ring-2 focus:ring-white/20',\n disabled\n ? 'opacity-40 cursor-not-allowed text-white'\n : variantStyles[variant],\n )\n\n return (\n <button\n type=\"button\"\n onClick={disabled ? undefined : onClick}\n class={cn(className, !disabled && 'cursor-pointer')}\n title={label}\n disabled={disabled}\n >\n {content}\n </button>\n )\n})\n\ninterface ExpandableSectionProps {\n show: boolean\n children: React.JSX.Element\n}\n\nconst ExpandableSection = memo(function ExpandableSection({\n show,\n children,\n}: ExpandableSectionProps) {\n let contentRef: HTMLDivElement | undefined\n const [width, setWidth] = createSignal(0)\n\n createEffect(() => {\n if (contentRef) {\n setWidth(show ? contentRef.scrollWidth : 0)\n }\n })\n\n return (\n <div\n class=\"overflow-hidden transition-all duration-300 ease-out\"\n style={{ width: show ? width : 0, opacity: show ? 1 : 0 }}\n >\n <div\n ref={contentRef}\n class={cn(\n 'flex items-center gap-1 whitespace-nowrap',\n 'transition-transform duration-300 ease-out',\n show ? 'translate-x-0' : '-translate-x-2',\n )}\n >\n {children}\n </div>\n </div>\n )\n})\n\nexport interface DevToolbarProps {\n /** Whether dev tools are allowed. Default: auto-detects from env */\n isAllowed?: boolean\n}\n\nexport const DevToolbar = memo(function DevToolbar({\n isAllowed,\n}: DevToolbarProps = {}) {\n const isDevAllowed = createIsDevAllowed(isAllowed)\n const devMode = createDevModeOptional()\n const performanceContext = createPerformanceContextOptional()\n\n const [isReady, setIsReady] = createSignal(false)\n createEffect(() => {\n const timer = setTimeout(() => setIsReady(true), 1000)\n return () => clearTimeout(timer)\n })\n\n if (!isDevAllowed || !devMode) return null\n\n const {\n isDevMode,\n isSidebarOpen,\n toggleDevMode,\n toggleSidebar,\n openIssueDialog,\n issueDialog,\n closeIssueDialog,\n } = devMode\n\n const showContent = isDevMode && isReady\n\n return (\n <>\n {/* Floating Toolbar */}\n <div\n data-dev-tool=\"true\"\n class={cn(\n 'fixed bottom-4 left-1/2 -translate-x-1/2 z-50',\n 'flex items-center px-2 py-1',\n showContent ? 'gap-2' : 'gap-0',\n 'rounded-2xl border border-white/10',\n 'bg-gradient-to-r from-slate-900/95 via-slate-800/95 to-slate-900/95',\n 'backdrop-blur-xl shadow-2xl shadow-black/50',\n 'transition-all duration-300 ease-out',\n )}\n >\n {/* Power / Toggle Dev Mode */}\n <ToolbarButton\n icon={<Power class=\"w-4 h-4\" />}\n label={isDevMode ? 'Dev Mode On' : 'Dev Mode Off'}\n onClick={toggleDevMode}\n active={isDevMode}\n variant={isDevMode ? 'primary' : 'default'}\n />\n\n <ExpandableSection show={showContent}>\n {/* Separator */}\n <div class=\"shrink-0 w-px h-6 bg-white/20 mx-1 my-2\" />\n\n {/* Inspector Mode Toggle */}\n <ToolbarButton\n icon={<Target class=\"w-4 h-4\" />}\n label=\"Inspector\"\n onClick={devMode.toggleInspector}\n active={devMode.isInspectorMode}\n variant={devMode.isInspectorMode ? 'primary' : 'default'}\n />\n\n {/* Performance Monitor Toggle */}\n {performanceContext && (\n <ToolbarButton\n icon={<Activity class=\"w-4 h-4\" />}\n label=\"Perf\"\n onClick={performanceContext.togglePerformancePanel}\n active={performanceContext.isPerformancePanelOpen}\n variant={\n performanceContext.isPerformancePanelOpen\n ? 'primary'\n : 'default'\n }\n />\n )}\n\n {/* Sidebar Toggle (Desktop only) */}\n <div class=\"hidden md:block\">\n <ToolbarButton\n icon={<PanelRight class=\"w-4 h-4\" />}\n label=\"Issues\"\n onClick={toggleSidebar}\n active={isSidebarOpen}\n />\n </div>\n\n {/* Create Bug */}\n <ToolbarButton\n icon={<Bug class=\"w-4 h-4\" />}\n label=\"Bug\"\n onClick={() => openIssueDialog('bug')}\n variant=\"danger\"\n />\n\n {/* Create Feature */}\n <ToolbarButton\n icon={<Lightbulb class=\"w-4 h-4\" />}\n label=\"Feature\"\n onClick={() => openIssueDialog('feature')}\n variant=\"success\"\n />\n </ExpandableSection>\n </div>\n\n {/* Performance Panel */}\n {performanceContext && <PerformancePanel />}\n\n {/* Issue Dialog */}\n <div data-dev-tool=\"true\">\n <GitHubIssueDialog\n open={issueDialog.isOpen}\n onOpenChange={(open) => !open && closeIssueDialog()}\n initialType={issueDialog.type}\n initialDescription={issueDialog.initialDescription}\n componentDetails={issueDialog.componentDetails}\n />\n </div>\n </>\n )\n})\n","// @geenius/tools-devtools-solidjs — src/components/DevSidebar.tsx\n\nimport { createSignal, createEffect, createMemo } from 'solid-js'\nimport { cn } from '@geenius/ui-solid'\nimport {\n Bug,\n Lightbulb,\n ExternalLink,\n Clock,\n X,\n RefreshCw,\n Maximize2,\n Minimize2,\n} from 'lucide-solid'\nimport { createDevModeOptional } from '../context/DevModeContext'\nimport {\n getGitHubIssues,\n getGitHubConfig,\n getIssueType,\n formatRelativeTime,\n type GitHubIssueListItem,\n} from '../services/github-service'\n\ninterface IssueCardProps {\n issue: GitHubIssueListItem\n expandedView: boolean\n}\n\nconst IssueCard = memo(function IssueCard({\n issue,\n expandedView,\n}: IssueCardProps) {\n const issueType = getIssueType(issue)\n\n const linkedComponent = createMemo(() => {\n if (!issue.body) return null\n const match = issue.body.match(/\\*\\*Name:\\*\\*\\s*`([^`]+)`/)\n return match ? match[1] : null\n }, [issue.body])\n\n return (\n <a\n href={issue.html_url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class={cn(\n 'block p-3 rounded-lg border transition-all duration-200',\n 'hover:bg-white/5 hover:border-white/20',\n 'border-white/10 bg-white/[0.02]',\n )}\n >\n <div class=\"flex items-start gap-3\">\n <div\n class={cn(\n 'flex-shrink-0 w-8 h-8 rounded-lg flex items-center justify-center',\n issueType === 'bug' && 'bg-red-500/10 text-red-500',\n issueType === 'feature' && 'bg-emerald-500/10 text-emerald-500',\n issueType === 'other' && 'bg-blue-500/10 text-blue-500',\n )}\n >\n {issueType === 'bug' ? (\n <Bug class=\"w-4 h-4\" />\n ) : (\n <Lightbulb class=\"w-4 h-4\" />\n )}\n </div>\n\n <div class=\"flex-1 min-w-0\">\n <p class=\"font-medium text-sm text-white line-clamp-2\">\n {issue.title}\n </p>\n\n {linkedComponent && (\n <span class=\"inline-flex items-center gap-1 mt-1 text-[10px] px-1.5 py-0.5 bg-white/5 border border-white/10 rounded text-white/60\">\n {linkedComponent}\n </span>\n )}\n\n <div class=\"flex items-center gap-3 mt-2 text-xs text-white/40\">\n <span>#{issue.number}</span>\n <span class=\"flex items-center gap-1\">\n <Clock class=\"w-3 h-3\" />\n {formatRelativeTime(issue.updated_at)}\n </span>\n </div>\n\n {expandedView && issue.body && (\n <div class=\"mt-3 text-xs text-white/40 border-l-2 border-white/10 pl-2 line-clamp-6 whitespace-pre-line font-mono bg-white/[0.02] p-2 rounded-sm\">\n {issue.body.substring(0, 300)}\n {issue.body.length > 300 ? '...' : ''}\n </div>\n )}\n </div>\n <ExternalLink class=\"w-4 h-4 text-white/30 flex-shrink-0\" />\n </div>\n </a>\n )\n})\n\nexport const DevSidebar = memo(function DevSidebar() {\n const devMode = createDevModeOptional()\n const [issues, setIssues] = createSignal<GitHubIssueListItem[]>([])\n const [loading, setLoading] = createSignal(false)\n const [tab, setTab] = createSignal<'bugs' | 'features'>('bugs')\n const [isExpanded, setIsExpanded] = createSignal(false)\n\n const isSidebarOpen = devMode?.isSidebarOpen ?? false\n const setSidebarOpen = devMode?.setSidebarOpen ?? (() => { })\n\n createEffect(() => {\n if (isSidebarOpen && issues.length === 0 && !loading) {\n fetchIssues()\n }\n })\n\n const fetchIssues = async () => {\n setLoading(true)\n try {\n const result = await getGitHubIssues('all', 'open')\n setIssues(result)\n } catch {\n // Silently fail\n } finally {\n setLoading(false)\n }\n }\n\n const handleRefresh = () => fetchIssues()\n const toggleExpand = () => setIsExpanded((prev) => !prev)\n\n const { bugs, features } = createMemo(() => {\n const bugs: GitHubIssueListItem[] = []\n const features: GitHubIssueListItem[] = []\n\n issues.forEach((issue) => {\n const type = getIssueType(issue)\n if (type === 'bug') bugs.push(issue)\n else features.push(issue)\n })\n\n return { bugs, features }\n })\n\n const currentIssues = tab === 'bugs' ? bugs : features\n\n if (!devMode || !isSidebarOpen) return null\n\n const config = getGitHubConfig()\n\n return (\n <div\n data-dev-tool=\"true\"\n class={cn(\n 'fixed top-0 right-0 h-full z-50',\n 'flex flex-col',\n 'bg-gradient-to-b from-slate-900/98 to-slate-950/98',\n 'backdrop-blur-xl border-l border-white/10',\n 'shadow-2xl shadow-black/50',\n 'transition-all duration-300 ease-in-out',\n isExpanded ? 'w-full sm:max-w-[50vw]' : 'w-full sm:max-w-md',\n 'animate-in slide-in-from-right duration-300',\n )}\n >\n {/* Header */}\n <div class=\"flex items-center justify-between px-4 py-3 border-b border-white/10\">\n <div class=\"flex items-center gap-2\">\n <Bug class=\"w-4 h-4 text-primary\" />\n <span class=\"text-sm font-bold text-white\">GitHub Issues</span>\n <span class=\"text-xs text-white/40\">\n ({config.owner}/{config.repo})\n </span>\n </div>\n <div class=\"flex items-center gap-1\">\n <button\n onClick={handleRefresh}\n disabled={loading}\n class={cn(\n 'p-1.5 text-white/40 hover:text-white hover:bg-white/10 rounded-lg transition-colors',\n loading && 'animate-spin',\n )}\n >\n <RefreshCw class=\"w-3.5 h-3.5\" />\n </button>\n <button\n onClick={toggleExpand}\n class=\"hidden sm:block p-1.5 text-white/40 hover:text-white hover:bg-white/10 rounded-lg transition-colors\"\n >\n {isExpanded ? (\n <Minimize2 class=\"w-3.5 h-3.5\" />\n ) : (\n <Maximize2 class=\"w-3.5 h-3.5\" />\n )}\n </button>\n <button\n onClick={() => setSidebarOpen(false)}\n class=\"p-1.5 text-white/40 hover:text-white hover:bg-white/10 rounded-lg transition-colors\"\n >\n <X class=\"w-4 h-4\" />\n </button>\n </div>\n </div>\n\n {/* Tabs */}\n <div class=\"flex border-b border-white/10\">\n <button\n onClick={() => setTab('bugs')}\n class={cn(\n 'flex-1 px-4 py-2.5 text-xs font-medium transition-colors',\n tab === 'bugs'\n ? 'text-red-400 border-b-2 border-red-500'\n : 'text-white/40 hover:text-white/70',\n )}\n >\n 🐛 Bugs ({bugs.length})\n </button>\n <button\n onClick={() => setTab('features')}\n class={cn(\n 'flex-1 px-4 py-2.5 text-xs font-medium transition-colors',\n tab === 'features'\n ? 'text-emerald-400 border-b-2 border-emerald-500'\n : 'text-white/40 hover:text-white/70',\n )}\n >\n ✨ Features ({features.length})\n </button>\n </div>\n\n {/* Content */}\n <div class=\"flex-1 overflow-y-auto p-3 space-y-2\">\n {loading ? (\n <div class=\"flex items-center justify-center py-12\">\n <div class=\"w-6 h-6 border-2 border-white/20 border-t-primary rounded-full animate-spin\" />\n </div>\n ) : currentIssues.length === 0 ? (\n <div class=\"text-center py-12 text-sm text-white/30\">\n No {tab === 'bugs' ? 'bugs' : 'features'} found\n </div>\n ) : (\n currentIssues.map((issue) => (\n <IssueCard key={issue.id} issue={issue} expandedView={isExpanded} />\n ))\n )}\n </div>\n </div>\n )\n})\n","// @geenius/tools-devtools-solidjs — src/components/InspectorOverlay.tsx\n\nimport { createSignal, createEffect, createMemo, onCleanup, type JSX } from 'solid-js'\nimport { Portal } from 'solid-js/web'\nimport { createDevModeOptional } from '../context/DevModeContext'\nimport { cn } from '@geenius/ui-solid'\n\ninterface Rect {\n top: number\n left: number\n width: number\n height: number\n}\n\ninterface ComponentInfo {\n name: string\n file?: string\n key?: string\n props?: Record<string, unknown>\n}\n\nfunction getComponentInfo(element: HTMLElement): ComponentInfo | null {\n let fiberNode: any = null\n const key = Object.keys(element).find((k) => k.startsWith('__reactFiber$'))\n if (key) {\n fiberNode = (element as any)[key]\n }\n if (!fiberNode) return null\n\n const elementKey = fiberNode.key !== null ? String(fiberNode.key) : undefined\n\n let node = fiberNode\n while (node) {\n if (node.tag === 0 || node.tag === 1) {\n if (node.type && (node.type.displayName || node.type.name)) {\n return {\n name: node.type.displayName || node.type.name,\n file: node._debugSource?.fileName,\n key:\n elementKey !== undefined\n ? elementKey\n : node.key !== null\n ? String(node.key)\n : undefined,\n }\n }\n }\n node = node.return\n }\n\n return { name: element.tagName.toLowerCase() }\n}\n\nexport function InspectorOverlay() {\n const devMode = createDevModeOptional()\n const [hoveredRect, setHoveredRect] = createSignal<Rect | null>(null)\n const [selectedComponents, setSelectedComponents] = createSignal<\n { rect: Rect; info: ComponentInfo }[]\n >([])\n const [hoveredComponent, setHoveredComponent] = createSignal<ComponentInfo | null>(null)\n const [cursorPos, setCursorPos] = createSignal({ x: 0, y: 0 })\n let overlayRef: HTMLDivElement | undefined\n\n const isInspectorMode = devMode?.isInspectorMode ?? false\n const setInspectorMode = devMode?.setInspectorMode ?? (() => { })\n const openIssueDialog = devMode?.openIssueDialog ?? (() => { })\n\n createEffect(() => {\n if (!isInspectorMode) {\n setHoveredRect(null)\n setSelectedComponents([])\n return\n }\n\n const isDevTool = (element: Element | null) => {\n if (!element) return false\n return !!element.closest('[data-dev-tool=\"true\"]')\n }\n\n const handleMouseMove = (e: MouseEvent) => {\n setCursorPos({ x: e.clientX, y: e.clientY })\n const elements = document.elementsFromPoint(e.clientX, e.clientY)\n\n if (elements.length > 0 && isDevTool(elements[0])) {\n setHoveredRect(null)\n setHoveredComponent(null)\n return\n }\n\n let target: HTMLElement | null = null\n for (const el of elements) {\n if (!isDevTool(el)) {\n target = el as HTMLElement\n break\n }\n }\n\n if (\n target &&\n target !== document.body &&\n target !== document.documentElement\n ) {\n const rect = target.getBoundingClientRect()\n setHoveredRect({\n top: rect.top,\n left: rect.left,\n width: rect.width,\n height: rect.height,\n })\n setHoveredComponent(getComponentInfo(target))\n } else {\n setHoveredRect(null)\n setHoveredComponent(null)\n }\n }\n\n const handleClick = (e: MouseEvent) => {\n const elements = document.elementsFromPoint(e.clientX, e.clientY)\n if (elements.length > 0 && isDevTool(elements[0])) return\n\n let target: HTMLElement | null = null\n for (const el of elements) {\n if (!isDevTool(el)) {\n target = el as HTMLElement\n break\n }\n }\n\n if (target) {\n e.preventDefault()\n e.stopPropagation()\n\n const info = getComponentInfo(target)\n const rect = target.getBoundingClientRect()\n\n if (info) {\n setSelectedComponents((prev) => {\n const existsIndex = prev.findIndex(\n (p) =>\n p.info.name === info.name &&\n p.info.key === info.key &&\n p.info.file === info.file,\n )\n\n if (existsIndex >= 0) {\n const newSelection = [...prev]\n newSelection.splice(existsIndex, 1)\n return newSelection\n } else {\n return [\n ...prev,\n {\n rect: {\n top: rect.top,\n left: rect.left,\n width: rect.width,\n height: rect.height,\n },\n info,\n },\n ]\n }\n })\n }\n }\n }\n\n window.addEventListener('mousemove', handleMouseMove, { capture: true })\n window.addEventListener('click', handleClick, { capture: true })\n\n return () => {\n window.removeEventListener('mousemove', handleMouseMove, { capture: true })\n window.removeEventListener('click', handleClick, { capture: true })\n }\n })\n\n if (!devMode || !isInspectorMode) return null\n\n return /* Portal: */ (\n <div\n ref={overlayRef}\n class=\"fixed inset-0 z-[9999] pointer-events-none cursor-crosshair\"\n style={{ background: 'transparent' }}\n data-dev-tool=\"true\"\n >\n {/* Desktop Debug Panel */}\n <div class=\"hidden md:block fixed top-0 left-0 z-[10000] p-2 text-xs font-mono text-white pointer-events-auto transition-all duration-300\">\n <div\n class={cn(\n 'group flex flex-col gap-1 min-w-[150px] p-2 rounded-lg backdrop-blur-sm transition-all duration-300',\n 'bg-blue-500/10 hover:bg-blue-950/90',\n 'border border-blue-500/30',\n 'text-black hover:text-white',\n )}\n >\n <div class=\"flex justify-between items-center opacity-80\">\n <span class=\"font-bold opacity-100 group-hover:text-white/90\">\n INSPECTOR\n </span>\n <span class=\"opacity-70 group-hover:text-white/70\">\n {Math.round(cursorPos.x)}, {Math.round(cursorPos.y)}\n </span>\n </div>\n {hoveredComponent && (\n <div class=\"font-bold drop-shadow-sm truncate text-blue-700 group-hover:text-blue-300\">\n {hoveredComponent.name}\n </div>\n )}\n {selectedComponents.length > 0 && (\n <div class=\"truncate text-[10px] opacity-80 text-green-700 group-hover:text-green-300 border-t border-white/10 pt-1 mt-1\">\n {selectedComponents.length} Selected\n </div>\n )}\n </div>\n </div>\n\n {/* Hover Highlight */}\n {hoveredRect && (\n <div\n class=\"absolute border-2 border-blue-500 bg-blue-500/10 pointer-events-none transition-all duration-75 ease-out\"\n style={{\n top: hoveredRect.top,\n left: hoveredRect.left,\n width: hoveredRect.width,\n height: hoveredRect.height,\n }}\n >\n <div class=\"absolute -top-6 left-0 bg-blue-500 text-white text-[10px] px-1.5 py-0.5 rounded-sm whitespace-nowrap\">\n {hoveredComponent?.name} ({Math.round(hoveredRect.width)} x{' '}\n {Math.round(hoveredRect.height)})\n </div>\n </div>\n )}\n\n {/* Selection Highlights */}\n {selectedComponents.map((comp, i) => (\n <div\n key={i}\n class=\"absolute border-2 border-green-500 bg-green-500/20 pointer-events-none transition-all duration-75 ease-out\"\n style={{\n top: comp.rect.top,\n left: comp.rect.left,\n width: comp.rect.width,\n height: comp.rect.height,\n }}\n >\n <div class=\"absolute -top-6 left-0 bg-green-600 text-white text-[10px] px-1.5 py-0.5 rounded-sm whitespace-nowrap z-[10001]\">\n {comp.info.name}\n </div>\n </div>\n ))}\n\n {/* Floating Toolbar */}\n {selectedComponents.length > 0 &&\n (() => {\n const lastSelected = selectedComponents[selectedComponents.length - 1]\n return (\n <div\n class=\"fixed z-[10002] flex items-center gap-1 p-1 bg-slate-900 border border-slate-700 rounded-md shadow-xl animate-in fade-in zoom-in-95 pointer-events-auto\"\n style={{\n top: Math.max(10, lastSelected.rect.top - 45),\n left: Math.max(10, lastSelected.rect.left),\n }}\n >\n <button\n onClick={() => {\n const allDetails = selectedComponents.map((c) => ({\n name: c.info.name,\n file: c.info.file,\n key: c.info.key,\n props: c.info.props,\n selector: 'Multi-select',\n }))\n openIssueDialog('feature', '', allDetails as any)\n setInspectorMode(false)\n }}\n class=\"px-2 py-1 text-xs font-medium text-white hover:bg-white/10 rounded transition-colors\"\n >\n Feature\n </button>\n <div class=\"w-px h-3 bg-white/20 mx-0.5\" />\n <button\n onClick={() => {\n const allDetails = selectedComponents.map((c) => ({\n name: c.info.name,\n file: c.info.file,\n key: c.info.key,\n props: c.info.props,\n selector: 'Multi-select',\n }))\n openIssueDialog('bug', '', allDetails as any)\n setInspectorMode(false)\n }}\n class=\"px-2 py-1 text-xs font-medium text-red-400 hover:bg-red-500/10 rounded transition-colors\"\n >\n Bug\n </button>\n <div class=\"w-px h-3 bg-white/20 mx-0.5\" />\n <button\n onClick={() => setSelectedComponents([])}\n class=\"px-2 py-1 text-xs text-slate-400 hover:text-white hover:bg-white/10 rounded transition-colors\"\n >\n Deselect all\n </button>\n </div>\n )\n })()}\n </div>,\n document.body,\n )\n}\n","// @geenius/tools-devtools-solidjs — components/DesignPreview.tsx\nimport { createEffect, onMount } from 'solid-js'\nimport type { Design } from '../data/designs'\n\nexport type DesignPreviewProps = {\n designNumber: number\n showGrid?: boolean\n theme?: 'light' | 'dark'\n}\n\n/**\n * DesignPreview — renders an HTML design file in an iframe with grid overlay + theme control.\n *\n * Uses Tailwind CSS utility classes.\n */\nexport function DesignPreview(props: DesignPreviewProps) {\n let iframeRef: HTMLIFrameElement | undefined\n\n const applyTheme = () => {\n try {\n if (iframeRef?.contentDocument) {\n const action = (props.theme ?? 'light') === 'dark' ? 'add' : 'remove'\n iframeRef.contentDocument.documentElement.classList[action]('dark')\n iframeRef.contentDocument.body?.classList[action]('dark')\n }\n } catch {\n // Cross-origin restrictions\n }\n }\n\n createEffect(applyTheme)\n\n return (\n <div class=\"relative w-full h-screen\">\n {(props.showGrid ?? false) && (\n <div class=\"absolute inset-0 pointer-events-none z-[100] flex justify-between px-4 max-w-[1400px] mx-auto w-full\">\n {Array.from({ length: 12 }).map((_, i) => (\n <div class=\"h-full w-[calc(100%/12)] border-x border-red-500/20 bg-red-500/5 mx-2\" />\n ))}\n </div>\n )}\n <iframe\n ref={iframeRef}\n src={`/designs/design-${props.designNumber}.html`}\n class=\"w-full h-full border-0\"\n title={`Design ${props.designNumber} Preview`}\n onLoad={applyTheme}\n />\n </div>\n )\n}\n","// @geenius/tools-devtools-solidjs — components/DesignSwitcherDropdown.tsx\nimport { createSignal, createEffect, onCleanup } from 'solid-js'\nimport { For, Show } from 'solid-js/web'\n\nexport type DesignSwitcherDropdownProps = {\n /** Current active path — used to highlight the active design */\n currentPath: string\n /** Called when user selects a design */\n onNavigate: (path: string) => void\n /** Total number of designs */\n designCount?: number\n}\n\n/**\n * DesignSwitcherDropdown — dropdown menu for switching between design previews.\n *\n * Router-agnostic: caller provides currentPath and onNavigate.\n * Uses Tailwind CSS utility classes.\n */\nexport function DesignSwitcherDropdown(props: DesignSwitcherDropdownProps) {\n const [isOpen, setIsOpen] = createSignal(false)\n let dropdownRef: HTMLDivElement | undefined\n\n const getCurrentDesign = () => {\n const match = props.currentPath.match(/\\/dev\\/design\\/(\\d+)/)\n return match ? `Design ${match[1]}` : 'Current Design'\n }\n\n createEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (dropdownRef && !dropdownRef.contains(event.target as Node)) {\n setIsOpen(false)\n }\n }\n document.addEventListener('mousedown', handleClickOutside)\n onCleanup(() => document.removeEventListener('mousedown', handleClickOutside))\n })\n\n const handleDesignChange = (path: string) => {\n props.onNavigate(path)\n setIsOpen(false)\n }\n\n const designs = () => [\n { label: 'Current Design', path: '/' },\n ...Array.from({ length: props.designCount ?? 21 }, (_, i) => ({\n label: `Design ${i + 1}`,\n path: `/dev/design/${i + 1}`,\n })),\n ]\n\n return (\n <div ref={dropdownRef} class=\"relative\">\n <button\n type=\"button\"\n onClick={() => setIsOpen(!isOpen())}\n aria-label=\"Switch Design\"\n class=\"flex items-center gap-2 px-3 py-2 rounded-lg text-foreground hover:bg-bg-muted transition-colors text-sm font-medium\"\n >\n <svg class=\"w-4 h-4\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width={2}><circle cx=\"13.5\" cy=\"6.5\" r=\"0.5\" /><circle cx=\"17.5\" cy=\"10.5\" r=\"0.5\" /><circle cx=\"8.5\" cy=\"7.5\" r=\"0.5\" /><circle cx=\"6.5\" cy=\"12\" r=\"0.5\" /><path d=\"M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10c.926 0 1.648-.746 1.648-1.688 0-.437-.18-.835-.437-1.125-.29-.289-.438-.652-.438-1.125a1.64 1.64 0 0 1 1.668-1.668h1.996c3.051 0 5.555-2.503 5.555-5.554C21.965 6.012 17.461 2 12 2z\" /></svg>\n <span class=\"hidden sm:inline\">{getCurrentDesign()}</span>\n <svg\n class={`w-4 h-4 transition-transform duration-200 ${isOpen() ? 'rotate-180' : ''}`}\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width={2} d=\"M19 9l-7 7-7-7\" />\n </svg>\n </button>\n\n <Show when={isOpen()}>\n <div class=\"absolute right-0 mt-2 py-2 bg-card border border-border rounded-lg shadow-xl overflow-hidden min-w-[180px] max-h-[400px] overflow-y-auto z-50\">\n <For each={designs()}>\n {(design) => (\n <button\n type=\"button\"\n onClick={() => handleDesignChange(design.path)}\n class={`w-full px-4 py-2.5 text-left text-sm transition-colors ${getCurrentDesign() === design.label\n ? 'bg-primary/10 text-primary font-medium'\n : 'hover:bg-bg-muted text-foreground'\n }`}\n >\n {design.label}\n <Show when={getCurrentDesign() === design.label}>\n <span class=\"ml-2 text-primary\">✓</span>\n </Show>\n </button>\n )}\n </For>\n </div>\n </Show>\n </div>\n )\n}\n","// @geenius/tools-devtools-solidjs — components/PageLoadWaterfall.tsx\nimport { onMount } from 'solid-js'\n\nexport type SsrTiming = {\n ssrStart: number\n getAuthStart: number\n getAuthEnd: number\n translationsStart: number\n translationsEnd: number\n userPrefsStart: number\n userPrefsEnd: number\n ssrEnd: number\n isCachedAuth: boolean\n}\n\n/**\n * PageLoadWaterfall — invisible component that logs detailed performance\n * waterfall data to the browser console on first mount.\n *\n * Includes: network timing, SSR breakdown, FCP, resource loading, top-5 slowest JS bundles.\n * Returns `null` — no UI.\n */\nexport function PageLoadWaterfall(props: { ssrTiming?: SsrTiming | null }) {\n let hasLogged = false\n\n onMount(() => {\n if (hasLogged) return\n hasLogged = true\n logWaterfall(props.ssrTiming)\n })\n\n return null\n}\n\n/** @internal Shared waterfall logging logic — framework-agnostic */\nexport function logWaterfall(ssrTiming?: SsrTiming | null) {\n const clientStart = performance.now()\n\n const run = () => {\n const navEntry = performance.getEntriesByType('navigation')[0] as PerformanceNavigationTiming | undefined\n const fcp = performance.getEntriesByType('paint').find((e) => e.name === 'first-contentful-paint')\n\n console.log('\\n')\n console.log('%c╔══════════════════════════════════════════════════════╗', 'color: #4CAF50; font-weight: bold')\n console.log('%c║ PAGE LOAD PERFORMANCE WATERFALL ║', 'color: #4CAF50; font-weight: bold')\n console.log('%c╚══════════════════════════════════════════════════════╝', 'color: #4CAF50; font-weight: bold')\n\n if (navEntry) {\n const dns = navEntry.domainLookupEnd - navEntry.domainLookupStart\n const tcp = navEntry.connectEnd - navEntry.connectStart\n const ttfb = navEntry.responseStart - navEntry.requestStart\n const download = navEntry.responseEnd - navEntry.responseStart\n const domParsing = navEntry.domInteractive - navEntry.responseEnd\n const domComplete = navEntry.domComplete - navEntry.domInteractive\n const totalLoad = navEntry.loadEventEnd - navEntry.startTime\n\n console.log('%c\\n── Network & Browser Timing ──', 'color: #FF9800; font-weight: bold')\n console.table({\n 'DNS Lookup': { ms: Math.round(dns), bar: '█'.repeat(Math.max(1, Math.round(dns / 20))) },\n 'TCP Connect': { ms: Math.round(tcp), bar: '█'.repeat(Math.max(1, Math.round(tcp / 20))) },\n 'TTFB (Time to First Byte)': { ms: Math.round(ttfb), bar: '█'.repeat(Math.max(1, Math.round(ttfb / 20))) },\n 'Response Download': { ms: Math.round(download), bar: '█'.repeat(Math.max(1, Math.round(download / 20))) },\n 'DOM Parsing': { ms: Math.round(domParsing), bar: '█'.repeat(Math.max(1, Math.round(domParsing / 20))) },\n 'DOM Complete': { ms: Math.round(domComplete), bar: '█'.repeat(Math.max(1, Math.round(domComplete / 20))) },\n 'Total Page Load': { ms: Math.round(totalLoad), bar: '█'.repeat(Math.max(1, Math.round(totalLoad / 20))) },\n })\n\n console.log(\n `%c\\n⚡ TTFB: ${Math.round(ttfb)}ms — This includes all SSR processing time`,\n ttfb > 500 ? 'color: #F44336; font-weight: bold; font-size: 14px' : 'color: #4CAF50; font-weight: bold; font-size: 14px',\n )\n }\n\n if (ssrTiming) {\n console.log('%c\\n── SSR beforeLoad Breakdown ──', 'color: #2196F3; font-weight: bold')\n const total = ssrTiming.ssrEnd - ssrTiming.ssrStart\n const auth = ssrTiming.getAuthEnd ? ssrTiming.getAuthEnd - ssrTiming.getAuthStart : 0\n const prefs = ssrTiming.userPrefsEnd ? ssrTiming.userPrefsEnd - ssrTiming.userPrefsStart : 0\n const trans = ssrTiming.translationsEnd ? ssrTiming.translationsEnd - ssrTiming.translationsStart : 0\n\n console.table({\n 'getAuth()': { ms: auth, bar: '█'.repeat(Math.max(1, Math.round(auth / 20))), note: ssrTiming.isCachedAuth ? '(cached)' : '(server call)' },\n 'User Prefs': { ms: prefs, bar: '█'.repeat(Math.max(1, Math.round(prefs / 20))) },\n 'loadTranslations()': { ms: trans, bar: '█'.repeat(Math.max(1, Math.round(trans / 20))) },\n 'Total SSR beforeLoad': { ms: total, bar: '█'.repeat(Math.max(1, Math.round(total / 20))) },\n })\n } else {\n console.log('%c\\n── SSR Timing: Not available (client-side navigation) ──', 'color: #9E9E9E')\n }\n\n if (fcp) {\n console.log(\n `%c\\n🎨 First Contentful Paint: ${Math.round(fcp.startTime)}ms`,\n fcp.startTime > 1500 ? 'color: #F44336; font-weight: bold; font-size: 14px' : 'color: #4CAF50; font-weight: bold; font-size: 14px',\n )\n }\n\n console.log(\n `%c\\n🧩 Component mounted at: ${Math.round(clientStart)}ms from page start`,\n 'color: #2c4f7c; font-weight: bold',\n )\n\n const resources = performance.getEntriesByType('resource') as PerformanceResourceTiming[]\n const jsResources = resources.filter((r) => r.name.endsWith('.js') || r.name.endsWith('.mjs') || r.name.includes('.js?'))\n const cssResources = resources.filter((r) => r.name.endsWith('.css') || r.name.includes('.css?'))\n const fontResources = resources.filter((r) => r.name.includes('fonts.googleapis') || r.name.includes('fonts.gstatic'))\n const imgResources = resources.filter((r) => r.initiatorType === 'img')\n\n const totalJsSize = jsResources.reduce((sum, r) => sum + (r.transferSize || 0), 0)\n const slowestJs = [...jsResources].sort((a, b) => b.duration - a.duration).slice(0, 5)\n\n console.log('%c\\n── Resource Loading ──', 'color: #9C27B0; font-weight: bold')\n console.table({\n 'JS bundles': { count: jsResources.length, totalKB: Math.round(totalJsSize / 1024), slowest_ms: Math.round(slowestJs[0]?.duration ?? 0) },\n 'CSS files': { count: cssResources.length, totalKB: Math.round(cssResources.reduce((s, r) => s + (r.transferSize || 0), 0) / 1024) },\n 'Font resources': { count: fontResources.length, slowest_ms: Math.round([...fontResources].sort((a, b) => b.duration - a.duration)[0]?.duration ?? 0) },\n 'Images': { count: imgResources.length, totalKB: Math.round(imgResources.reduce((s, r) => s + (r.transferSize || 0), 0) / 1024) },\n })\n\n if (slowestJs.length > 0) {\n console.log('%c\\n── Top 5 Slowest JS Bundles ──', 'color: #E91E63; font-weight: bold')\n console.table(\n Object.fromEntries(\n slowestJs.map((r, i) => [\n `#${i + 1}`,\n {\n file: r.name.split('/').pop()?.split('?')[0] ?? r.name,\n duration_ms: Math.round(r.duration),\n size_KB: Math.round((r.transferSize || 0) / 1024),\n },\n ]),\n ),\n )\n }\n\n console.log('%c\\n══════════════════════════════════════════════════════', 'color: #4CAF50; font-weight: bold')\n }\n\n if (document.readyState === 'complete') {\n setTimeout(run, 500)\n } else {\n window.addEventListener('load', () => setTimeout(run, 500))\n }\n}\n","// @geenius/tools-devtools — data/designs.ts\n\nexport interface Design {\n id: string\n name: string\n path: string\n}\n\nexport const designs: Design[] = Array.from({ length: 21 }, (_, i) => ({\n id: String(i + 1),\n name: `Design ${i + 1}`,\n path: `/dev/design/${i + 1}`,\n}))\n"]}
@@ -0,0 +1,151 @@
1
+ import { ZodSchema } from 'zod/v4';
2
+ export { ZodSchema } from 'zod/v4';
3
+
4
+ /**
5
+ * @geenius/tools-env — Environment variable validation and management
6
+ *
7
+ * Provides schema-based environment variable validation using Zod.
8
+ * Validates at runtime and provides type-safe access to env vars.
9
+ */
10
+
11
+ /**
12
+ * Environment variable schema definition
13
+ */
14
+ type EnvSchema = Record<string, ZodSchema>;
15
+ /**
16
+ * Configuration for environment validation
17
+ */
18
+ interface EnvConfig {
19
+ /** Whether to throw on validation error (default: true) */
20
+ throw?: boolean;
21
+ /** Prefix to add to all env var names (e.g., 'REACT_APP_') */
22
+ prefix?: string;
23
+ /** Default values for optional variables */
24
+ defaults?: Record<string, unknown>;
25
+ }
26
+ /**
27
+ * Validates environment variables against a Zod schema
28
+ *
29
+ * @param schema Zod schema defining expected environment variables
30
+ * @param config Validation configuration options
31
+ * @returns Validated environment variables as typed object
32
+ * @throws Error if validation fails and throw option is true
33
+ *
34
+ * @example
35
+ * ```ts
36
+ * const envSchema = {
37
+ * DATABASE_URL: z.string().url(),
38
+ * API_KEY: z.string(),
39
+ * DEBUG: z.enum(['true', 'false']).optional(),
40
+ * }
41
+ *
42
+ * const env = validateEnv(envSchema, { throw: true })
43
+ * // env is now { DATABASE_URL: string, API_KEY: string, DEBUG?: string }
44
+ * ```
45
+ */
46
+ declare function validateEnv<T extends EnvSchema>(schema: T, config?: EnvConfig): Partial<{
47
+ [K in keyof T]: unknown;
48
+ }>;
49
+ /**
50
+ * Creates a reusable environment validator
51
+ *
52
+ * @param schema Zod schema
53
+ * @param config Default configuration
54
+ * @returns Validator function
55
+ *
56
+ * @example
57
+ * ```ts
58
+ * const validator = createEnvValidator(
59
+ * { DATABASE_URL: z.string().url() },
60
+ * { throw: true }
61
+ * )
62
+ * const env = validator()
63
+ * ```
64
+ */
65
+ declare function createEnvValidator<T extends EnvSchema>(schema: T, config?: EnvConfig): () => Partial<{ [K in keyof T]: unknown; }>;
66
+ /**
67
+ * Gets a single environment variable with optional validation
68
+ *
69
+ * @param key Environment variable key
70
+ * @param schema Optional Zod schema for validation
71
+ * @param defaultValue Default value if not found
72
+ * @returns Environment variable value or default
73
+ *
74
+ * @example
75
+ * ```ts
76
+ * const apiKey = getEnv('API_KEY', z.string().min(1))
77
+ * ```
78
+ */
79
+ declare function getEnv<T = string>(key: string, schema?: ZodSchema, defaultValue?: T): T | undefined;
80
+ /**
81
+ * Checks if environment variable exists and is set
82
+ *
83
+ * @param key Variable name
84
+ * @returns True if variable exists
85
+ */
86
+ declare function hasEnv(key: string): boolean;
87
+ /**
88
+ * Gets multiple environment variables at once
89
+ *
90
+ * @param keys List of environment variable keys
91
+ * @returns Object with available values
92
+ *
93
+ * @example
94
+ * ```ts
95
+ * const { API_KEY, DEBUG } = getEnvs(['API_KEY', 'DEBUG'])
96
+ * ```
97
+ */
98
+ declare function getEnvs(keys: string[]): Record<string, string | undefined>;
99
+ /**
100
+ * Asserts that all required environment variables are set
101
+ *
102
+ * @param requiredKeys List of required variable names
103
+ * @throws Error if any required variable is missing
104
+ *
105
+ * @example
106
+ * ```ts
107
+ * requireEnv(['DATABASE_URL', 'API_KEY'])
108
+ * ```
109
+ */
110
+ declare function requireEnv(requiredKeys: string[]): void;
111
+ /**
112
+ * Parses environment variable as JSON
113
+ *
114
+ * @param key Environment variable key
115
+ * @param defaultValue Default object if parsing fails
116
+ * @returns Parsed JSON object
117
+ *
118
+ * @example
119
+ * ```ts
120
+ * const config = parseEnvJson('APP_CONFIG', { theme: 'light' })
121
+ * ```
122
+ */
123
+ declare function parseEnvJson<T = unknown>(key: string, defaultValue?: T): T | undefined;
124
+ /**
125
+ * Parses environment variable as boolean
126
+ *
127
+ * @param key Environment variable key
128
+ * @param defaultValue Default value
129
+ * @returns Boolean value
130
+ *
131
+ * @example
132
+ * ```ts
133
+ * const debug = parseEnvBool('DEBUG', false)
134
+ * ```
135
+ */
136
+ declare function parseEnvBool(key: string, defaultValue?: boolean): boolean;
137
+ /**
138
+ * Parses environment variable as number
139
+ *
140
+ * @param key Environment variable key
141
+ * @param defaultValue Default value
142
+ * @returns Numeric value
143
+ *
144
+ * @example
145
+ * ```ts
146
+ * const port = parseEnvNumber('PORT', 3000)
147
+ * ```
148
+ */
149
+ declare function parseEnvNumber(key: string, defaultValue?: number): number;
150
+
151
+ export { type EnvConfig, type EnvSchema, createEnvValidator, getEnv, getEnvs, hasEnv, parseEnvBool, parseEnvJson, parseEnvNumber, requireEnv, validateEnv };
@@ -0,0 +1,93 @@
1
+ // src/index.ts
2
+ import { z } from "zod/v4";
3
+ function validateEnv(schema, config = {}) {
4
+ const { prefix = "", defaults = {}, throw: shouldThrow = true } = config;
5
+ const envVars = {};
6
+ for (const key of Object.keys(schema)) {
7
+ const prefixedKey = prefix ? `${prefix}${key}` : key;
8
+ const value = process.env[prefixedKey] ?? defaults[key];
9
+ if (value !== void 0) {
10
+ envVars[key] = value;
11
+ }
12
+ }
13
+ const schemaObj = z.object(schema);
14
+ const result = schemaObj.safeParse(envVars);
15
+ if (!result.success) {
16
+ const errors = result.error.issues.map((e) => `${e.path.join(".")}: ${e.message}`).join(", ");
17
+ const message = `Environment validation failed: ${errors}`;
18
+ if (shouldThrow) {
19
+ throw new Error(message);
20
+ }
21
+ console.error(message);
22
+ return {};
23
+ }
24
+ return result.data;
25
+ }
26
+ function createEnvValidator(schema, config = {}) {
27
+ return () => validateEnv(schema, config);
28
+ }
29
+ function getEnv(key, schema, defaultValue) {
30
+ const value = process.env[key] ?? defaultValue;
31
+ if (!value) return void 0;
32
+ if (schema) {
33
+ const result = schema.safeParse(value);
34
+ if (!result.success) {
35
+ throw new Error(`Invalid env var ${key}: ${result.error.message}`);
36
+ }
37
+ return result.data;
38
+ }
39
+ return value;
40
+ }
41
+ function hasEnv(key) {
42
+ return key in process.env;
43
+ }
44
+ function getEnvs(keys) {
45
+ return keys.reduce(
46
+ (acc, key) => {
47
+ acc[key] = process.env[key];
48
+ return acc;
49
+ },
50
+ {}
51
+ );
52
+ }
53
+ function requireEnv(requiredKeys) {
54
+ const missing = requiredKeys.filter((key) => !(key in process.env));
55
+ if (missing.length > 0) {
56
+ throw new Error(
57
+ `Missing required environment variables: ${missing.join(", ")}`
58
+ );
59
+ }
60
+ }
61
+ function parseEnvJson(key, defaultValue) {
62
+ const value = process.env[key];
63
+ if (!value) return defaultValue;
64
+ try {
65
+ return JSON.parse(value);
66
+ } catch {
67
+ console.warn(`Failed to parse ${key} as JSON`);
68
+ return defaultValue;
69
+ }
70
+ }
71
+ function parseEnvBool(key, defaultValue = false) {
72
+ const value = process.env[key];
73
+ if (!value) return defaultValue;
74
+ return ["true", "1", "yes", "on"].includes(value.toLowerCase());
75
+ }
76
+ function parseEnvNumber(key, defaultValue = 0) {
77
+ const value = process.env[key];
78
+ if (!value) return defaultValue;
79
+ const num = Number(value);
80
+ return isNaN(num) ? defaultValue : num;
81
+ }
82
+ export {
83
+ createEnvValidator,
84
+ getEnv,
85
+ getEnvs,
86
+ hasEnv,
87
+ parseEnvBool,
88
+ parseEnvJson,
89
+ parseEnvNumber,
90
+ requireEnv,
91
+ validateEnv
92
+ };
93
+ //# sourceMappingURL=index.js.map