@chaaskit/client 0.1.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 (135) hide show
  1. package/dist/favicon.svg +11 -0
  2. package/dist/index.html +17 -0
  3. package/dist/lib/LoadingSkeletons-IcIC2JPq.js +132 -0
  4. package/dist/lib/LoadingSkeletons-IcIC2JPq.js.map +1 -0
  5. package/dist/lib/ServerThemeProvider-DNF0LAyk.js +42 -0
  6. package/dist/lib/ServerThemeProvider-DNF0LAyk.js.map +1 -0
  7. package/dist/lib/extensions.js +10 -0
  8. package/dist/lib/extensions.js.map +1 -0
  9. package/dist/lib/favicon.svg +11 -0
  10. package/dist/lib/index.js +74126 -0
  11. package/dist/lib/index.js.map +1 -0
  12. package/dist/lib/logo.svg +12 -0
  13. package/dist/lib/routes/AcceptInviteRoute.js +19 -0
  14. package/dist/lib/routes/AcceptInviteRoute.js.map +1 -0
  15. package/dist/lib/routes/AdminDashboardRoute.js +19 -0
  16. package/dist/lib/routes/AdminDashboardRoute.js.map +1 -0
  17. package/dist/lib/routes/AdminTeamRoute.js +19 -0
  18. package/dist/lib/routes/AdminTeamRoute.js.map +1 -0
  19. package/dist/lib/routes/AdminTeamsRoute.js +19 -0
  20. package/dist/lib/routes/AdminTeamsRoute.js.map +1 -0
  21. package/dist/lib/routes/AdminUsersRoute.js +19 -0
  22. package/dist/lib/routes/AdminUsersRoute.js.map +1 -0
  23. package/dist/lib/routes/ApiKeysRoute.js +19 -0
  24. package/dist/lib/routes/ApiKeysRoute.js.map +1 -0
  25. package/dist/lib/routes/AutomationsRoute.js +19 -0
  26. package/dist/lib/routes/AutomationsRoute.js.map +1 -0
  27. package/dist/lib/routes/ChatRoute.js +19 -0
  28. package/dist/lib/routes/ChatRoute.js.map +1 -0
  29. package/dist/lib/routes/DocumentsRoute.js +19 -0
  30. package/dist/lib/routes/DocumentsRoute.js.map +1 -0
  31. package/dist/lib/routes/OAuthConsentRoute.js +19 -0
  32. package/dist/lib/routes/OAuthConsentRoute.js.map +1 -0
  33. package/dist/lib/routes/PricingRoute.js +19 -0
  34. package/dist/lib/routes/PricingRoute.js.map +1 -0
  35. package/dist/lib/routes/PrivacyRoute.js +19 -0
  36. package/dist/lib/routes/PrivacyRoute.js.map +1 -0
  37. package/dist/lib/routes/TeamSettingsRoute.js +19 -0
  38. package/dist/lib/routes/TeamSettingsRoute.js.map +1 -0
  39. package/dist/lib/routes/TermsRoute.js +19 -0
  40. package/dist/lib/routes/TermsRoute.js.map +1 -0
  41. package/dist/lib/routes/VerifyEmailRoute.js +19 -0
  42. package/dist/lib/routes/VerifyEmailRoute.js.map +1 -0
  43. package/dist/lib/routes.js +79 -0
  44. package/dist/lib/routes.js.map +1 -0
  45. package/dist/lib/ssr-utils.js +29 -0
  46. package/dist/lib/ssr-utils.js.map +1 -0
  47. package/dist/lib/ssr.js +60 -0
  48. package/dist/lib/ssr.js.map +1 -0
  49. package/dist/lib/styles.css +2410 -0
  50. package/dist/lib/useExtensions-B5nX_8XD.js +155 -0
  51. package/dist/lib/useExtensions-B5nX_8XD.js.map +1 -0
  52. package/dist/logo.svg +12 -0
  53. package/package.json +84 -0
  54. package/src/components/AgentSelector.tsx +90 -0
  55. package/src/components/BranchModal.tsx +129 -0
  56. package/src/components/ClientOnly.tsx +27 -0
  57. package/src/components/ExportMenu.tsx +122 -0
  58. package/src/components/LoadingSkeletons.tsx +110 -0
  59. package/src/components/MCPCredentialsSection.tsx +309 -0
  60. package/src/components/MentionChip.tsx +149 -0
  61. package/src/components/MentionDropdown.tsx +175 -0
  62. package/src/components/MentionInput.tsx +293 -0
  63. package/src/components/MessageItem.tsx +300 -0
  64. package/src/components/MessageList.tsx +159 -0
  65. package/src/components/OAuthAppsSection.tsx +124 -0
  66. package/src/components/ProjectFolder.tsx +141 -0
  67. package/src/components/ProjectModal.tsx +296 -0
  68. package/src/components/SSRMessageList.tsx +153 -0
  69. package/src/components/SearchModal.tsx +173 -0
  70. package/src/components/SettingsModal.tsx +412 -0
  71. package/src/components/ShareModal.tsx +280 -0
  72. package/src/components/Sidebar.tsx +491 -0
  73. package/src/components/TeamSwitcher.tsx +273 -0
  74. package/src/components/ToolCallDisplay.tsx +473 -0
  75. package/src/components/ToolConfirmationModal.tsx +130 -0
  76. package/src/components/UsageChart.tsx +177 -0
  77. package/src/components/content/CodeBlock.tsx +69 -0
  78. package/src/components/content/MarkdownRenderer.tsx +64 -0
  79. package/src/components/content/SSRMarkdownRenderer.tsx +158 -0
  80. package/src/contexts/AuthContext.tsx +119 -0
  81. package/src/contexts/ConfigContext.tsx +214 -0
  82. package/src/contexts/ProjectContext.tsx +167 -0
  83. package/src/contexts/ServerConfigProvider.tsx +41 -0
  84. package/src/contexts/ServerThemeProvider.tsx +47 -0
  85. package/src/contexts/TeamContext.tsx +255 -0
  86. package/src/contexts/ThemeContext.tsx +113 -0
  87. package/src/extensions/index.ts +15 -0
  88. package/src/extensions/registry.ts +187 -0
  89. package/src/extensions/useExtensions.ts +52 -0
  90. package/src/hooks/useAppPath.ts +34 -0
  91. package/src/hooks/useBasePath.ts +13 -0
  92. package/src/hooks/useKeyboardShortcuts.ts +50 -0
  93. package/src/hooks/useMentionSearch.ts +106 -0
  94. package/src/index.tsx +116 -0
  95. package/src/layouts/MainLayout.tsx +98 -0
  96. package/src/pages/AcceptInvitePage.tsx +175 -0
  97. package/src/pages/AdminDashboardPage.tsx +362 -0
  98. package/src/pages/AdminTeamPage.tsx +304 -0
  99. package/src/pages/AdminTeamsPage.tsx +242 -0
  100. package/src/pages/AdminUsersPage.tsx +385 -0
  101. package/src/pages/ApiKeysPage.tsx +449 -0
  102. package/src/pages/ChatPage.tsx +310 -0
  103. package/src/pages/DocumentsPage.tsx +577 -0
  104. package/src/pages/LoginPage.tsx +232 -0
  105. package/src/pages/OAuthConsentPage.tsx +234 -0
  106. package/src/pages/PricingPage.tsx +314 -0
  107. package/src/pages/PrivacyPage.tsx +65 -0
  108. package/src/pages/RegisterPage.tsx +153 -0
  109. package/src/pages/ScheduledPromptsPage.tsx +702 -0
  110. package/src/pages/SharedThreadPage.tsx +116 -0
  111. package/src/pages/TeamSettingsPage.tsx +1085 -0
  112. package/src/pages/TermsPage.tsx +82 -0
  113. package/src/pages/VerifyEmailPage.tsx +202 -0
  114. package/src/routes/AcceptInviteRoute.tsx +24 -0
  115. package/src/routes/AdminDashboardRoute.tsx +24 -0
  116. package/src/routes/AdminTeamRoute.tsx +24 -0
  117. package/src/routes/AdminTeamsRoute.tsx +24 -0
  118. package/src/routes/AdminUsersRoute.tsx +24 -0
  119. package/src/routes/ApiKeysRoute.tsx +24 -0
  120. package/src/routes/AutomationsRoute.tsx +24 -0
  121. package/src/routes/ChatRoute.tsx +28 -0
  122. package/src/routes/DocumentsRoute.tsx +24 -0
  123. package/src/routes/OAuthConsentRoute.tsx +24 -0
  124. package/src/routes/PricingRoute.tsx +24 -0
  125. package/src/routes/PrivacyRoute.tsx +24 -0
  126. package/src/routes/TeamSettingsRoute.tsx +24 -0
  127. package/src/routes/TermsRoute.tsx +24 -0
  128. package/src/routes/VerifyEmailRoute.tsx +24 -0
  129. package/src/routes/index.ts +57 -0
  130. package/src/ssr-utils.tsx +84 -0
  131. package/src/ssr.ts +123 -0
  132. package/src/stores/chatStore.ts +670 -0
  133. package/src/styles/index.css +254 -0
  134. package/src/utils/api.ts +78 -0
  135. package/src/vite-env.d.ts +13 -0
@@ -0,0 +1,11 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32">
2
+ <defs>
3
+ <linearGradient id="grad" x1="0%" y1="0%" x2="100%" y2="100%">
4
+ <stop offset="0%" style="stop-color:#6366f1"/>
5
+ <stop offset="100%" style="stop-color:#8b5cf6"/>
6
+ </linearGradient>
7
+ </defs>
8
+ <rect width="32" height="32" rx="6" fill="url(#grad)"/>
9
+ <path d="M10 12 L16 9 L22 12 L22 18 L16 21 L10 18 Z" fill="none" stroke="white" stroke-width="1.5" stroke-linejoin="round"/>
10
+ <circle cx="16" cy="15" r="2.5" fill="white"/>
11
+ </svg>
@@ -0,0 +1,17 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
+ <title>AI Chat</title>
8
+ <link rel="preconnect" href="https://fonts.googleapis.com" />
9
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
10
+ <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet" />
11
+ <script type="module" crossorigin src="/assets/index-BYcLoar2.js"></script>
12
+ <link rel="stylesheet" crossorigin href="/assets/index-Ob8N4Y68.css">
13
+ </head>
14
+ <body>
15
+ <div id="root"></div>
16
+ </body>
17
+ </html>
@@ -0,0 +1,132 @@
1
+ import { jsx, Fragment, jsxs } from "react/jsx-runtime";
2
+ import { useState, useEffect } from "react";
3
+ function ClientOnly({ children, fallback = null }) {
4
+ const [mounted, setMounted] = useState(false);
5
+ useEffect(() => {
6
+ setMounted(true);
7
+ }, []);
8
+ return mounted ? /* @__PURE__ */ jsx(Fragment, { children: children() }) : /* @__PURE__ */ jsx(Fragment, { children: fallback });
9
+ }
10
+ function ChatLoadingSkeleton() {
11
+ return /* @__PURE__ */ jsxs("div", { style: { display: "flex", height: "100vh" }, children: [
12
+ /* @__PURE__ */ jsxs(
13
+ "div",
14
+ {
15
+ style: {
16
+ width: "256px",
17
+ backgroundColor: "rgb(var(--color-sidebar))",
18
+ borderRight: "1px solid rgb(var(--color-border))",
19
+ padding: "1rem"
20
+ },
21
+ children: [
22
+ /* @__PURE__ */ jsx(
23
+ "div",
24
+ {
25
+ style: {
26
+ height: "2rem",
27
+ backgroundColor: "rgb(var(--color-background-secondary))",
28
+ borderRadius: "0.5rem",
29
+ marginBottom: "1rem"
30
+ }
31
+ }
32
+ ),
33
+ /* @__PURE__ */ jsx(
34
+ "div",
35
+ {
36
+ style: {
37
+ height: "1rem",
38
+ backgroundColor: "rgb(var(--color-background-secondary))",
39
+ borderRadius: "0.25rem",
40
+ width: "80%"
41
+ }
42
+ }
43
+ )
44
+ ]
45
+ }
46
+ ),
47
+ /* @__PURE__ */ jsx(
48
+ "div",
49
+ {
50
+ style: {
51
+ flex: 1,
52
+ display: "flex",
53
+ alignItems: "center",
54
+ justifyContent: "center",
55
+ backgroundColor: "rgb(var(--color-background))"
56
+ },
57
+ children: /* @__PURE__ */ jsxs(
58
+ "div",
59
+ {
60
+ style: {
61
+ display: "flex",
62
+ flexDirection: "column",
63
+ alignItems: "center",
64
+ gap: "1rem"
65
+ },
66
+ children: [
67
+ /* @__PURE__ */ jsx(
68
+ "div",
69
+ {
70
+ style: {
71
+ width: "2rem",
72
+ height: "2rem",
73
+ border: "2px solid rgb(var(--color-primary))",
74
+ borderTopColor: "transparent",
75
+ borderRadius: "50%",
76
+ animation: "chaaskit-spin 1s linear infinite"
77
+ }
78
+ }
79
+ ),
80
+ /* @__PURE__ */ jsx("p", { style: { color: "rgb(var(--color-text-muted))" }, children: "Loading..." })
81
+ ]
82
+ }
83
+ )
84
+ }
85
+ ),
86
+ /* @__PURE__ */ jsx("style", { children: `
87
+ @keyframes chaaskit-spin {
88
+ to { transform: rotate(360deg); }
89
+ }
90
+ ` })
91
+ ] });
92
+ }
93
+ function SimpleLoadingSkeleton() {
94
+ return /* @__PURE__ */ jsxs(
95
+ "div",
96
+ {
97
+ style: {
98
+ display: "flex",
99
+ height: "100vh",
100
+ alignItems: "center",
101
+ justifyContent: "center",
102
+ backgroundColor: "rgb(var(--color-background))"
103
+ },
104
+ children: [
105
+ /* @__PURE__ */ jsx(
106
+ "div",
107
+ {
108
+ style: {
109
+ width: "2rem",
110
+ height: "2rem",
111
+ border: "2px solid rgb(var(--color-primary))",
112
+ borderTopColor: "transparent",
113
+ borderRadius: "50%",
114
+ animation: "chaaskit-spin 1s linear infinite"
115
+ }
116
+ }
117
+ ),
118
+ /* @__PURE__ */ jsx("style", { children: `
119
+ @keyframes chaaskit-spin {
120
+ to { transform: rotate(360deg); }
121
+ }
122
+ ` })
123
+ ]
124
+ }
125
+ );
126
+ }
127
+ export {
128
+ ChatLoadingSkeleton as C,
129
+ SimpleLoadingSkeleton as S,
130
+ ClientOnly as a
131
+ };
132
+ //# sourceMappingURL=LoadingSkeletons-IcIC2JPq.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LoadingSkeletons-IcIC2JPq.js","sources":["../../src/components/ClientOnly.tsx","../../src/components/LoadingSkeletons.tsx"],"sourcesContent":["import { useState, useEffect, type ReactNode } from 'react';\n\ninterface ClientOnlyProps {\n children: () => ReactNode;\n fallback?: ReactNode;\n}\n\n/**\n * Renders children only on the client after hydration.\n * Use this for components that rely on browser APIs or client-side state.\n *\n * @example\n * ```tsx\n * <ClientOnly fallback={<LoadingSkeleton />}>\n * {() => <ChatApp />}\n * </ClientOnly>\n * ```\n */\nexport function ClientOnly({ children, fallback = null }: ClientOnlyProps) {\n const [mounted, setMounted] = useState(false);\n\n useEffect(() => {\n setMounted(true);\n }, []);\n\n return mounted ? <>{children()}</> : <>{fallback}</>;\n}\n","/**\n * Loading skeleton for chat pages with sidebar.\n * Used as SSR fallback for routes that render the full chat interface.\n */\nexport function ChatLoadingSkeleton() {\n return (\n <div style={{ display: 'flex', height: '100vh' }}>\n {/* Sidebar skeleton */}\n <div\n style={{\n width: '256px',\n backgroundColor: 'rgb(var(--color-sidebar))',\n borderRight: '1px solid rgb(var(--color-border))',\n padding: '1rem',\n }}\n >\n <div\n style={{\n height: '2rem',\n backgroundColor: 'rgb(var(--color-background-secondary))',\n borderRadius: '0.5rem',\n marginBottom: '1rem',\n }}\n />\n <div\n style={{\n height: '1rem',\n backgroundColor: 'rgb(var(--color-background-secondary))',\n borderRadius: '0.25rem',\n width: '80%',\n }}\n />\n </div>\n {/* Main content skeleton */}\n <div\n style={{\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: 'rgb(var(--color-background))',\n }}\n >\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: '1rem',\n }}\n >\n <div\n style={{\n width: '2rem',\n height: '2rem',\n border: '2px solid rgb(var(--color-primary))',\n borderTopColor: 'transparent',\n borderRadius: '50%',\n animation: 'chaaskit-spin 1s linear infinite',\n }}\n />\n <p style={{ color: 'rgb(var(--color-text-muted))' }}>Loading...</p>\n </div>\n </div>\n <style>\n {`\n @keyframes chaaskit-spin {\n to { transform: rotate(360deg); }\n }\n `}\n </style>\n </div>\n );\n}\n\n/**\n * Simple centered loading spinner skeleton.\n * Used as SSR fallback for simple pages without sidebar.\n */\nexport function SimpleLoadingSkeleton() {\n return (\n <div\n style={{\n display: 'flex',\n height: '100vh',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: 'rgb(var(--color-background))',\n }}\n >\n <div\n style={{\n width: '2rem',\n height: '2rem',\n border: '2px solid rgb(var(--color-primary))',\n borderTopColor: 'transparent',\n borderRadius: '50%',\n animation: 'chaaskit-spin 1s linear infinite',\n }}\n />\n <style>\n {`\n @keyframes chaaskit-spin {\n to { transform: rotate(360deg); }\n }\n `}\n </style>\n </div>\n );\n}\n"],"names":[],"mappings":";;AAkBO,SAAS,WAAW,EAAE,UAAU,WAAW,QAAyB;AACzE,QAAM,CAAC,SAAS,UAAU,IAAI,SAAS,KAAK;AAE5C,YAAU,MAAM;AACd,eAAW,IAAI;AAAA,EACjB,GAAG,CAAA,CAAE;AAEL,SAAO,UAAU,oBAAA,UAAA,EAAG,UAAA,SAAA,GAAW,oCAAS,UAAA,SAAA,CAAS;AACnD;ACtBO,SAAS,sBAAsB;AACpC,SACE,qBAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,QAAQ,WAErC,UAAA;AAAA,IAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,UACL,OAAO;AAAA,UACP,iBAAiB;AAAA,UACjB,aAAa;AAAA,UACb,SAAS;AAAA,QAAA;AAAA,QAGX,UAAA;AAAA,UAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,OAAO;AAAA,gBACL,QAAQ;AAAA,gBACR,iBAAiB;AAAA,gBACjB,cAAc;AAAA,gBACd,cAAc;AAAA,cAAA;AAAA,YAChB;AAAA,UAAA;AAAA,UAEF;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,OAAO;AAAA,gBACL,QAAQ;AAAA,gBACR,iBAAiB;AAAA,gBACjB,cAAc;AAAA,gBACd,OAAO;AAAA,cAAA;AAAA,YACT;AAAA,UAAA;AAAA,QACF;AAAA,MAAA;AAAA,IAAA;AAAA,IAGF;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,UACL,MAAM;AAAA,UACN,SAAS;AAAA,UACT,YAAY;AAAA,UACZ,gBAAgB;AAAA,UAChB,iBAAiB;AAAA,QAAA;AAAA,QAGnB,UAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACL,SAAS;AAAA,cACT,eAAe;AAAA,cACf,YAAY;AAAA,cACZ,KAAK;AAAA,YAAA;AAAA,YAGP,UAAA;AAAA,cAAA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,OAAO;AAAA,oBACL,OAAO;AAAA,oBACP,QAAQ;AAAA,oBACR,QAAQ;AAAA,oBACR,gBAAgB;AAAA,oBAChB,cAAc;AAAA,oBACd,WAAW;AAAA,kBAAA;AAAA,gBACb;AAAA,cAAA;AAAA,kCAED,KAAA,EAAE,OAAO,EAAE,OAAO,+BAAA,GAAkC,UAAA,aAAA,CAAU;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MACjE;AAAA,IAAA;AAAA,wBAED,SAAA,EACE,UAAA;AAAA;AAAA;AAAA;AAAA,UAAA,CAKH;AAAA,EAAA,GACF;AAEJ;AAMO,SAAS,wBAAwB;AACtC,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,QACL,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,YAAY;AAAA,QACZ,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,MAAA;AAAA,MAGnB,UAAA;AAAA,QAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACL,OAAO;AAAA,cACP,QAAQ;AAAA,cACR,QAAQ;AAAA,cACR,gBAAgB;AAAA,cAChB,cAAc;AAAA,cACd,WAAW;AAAA,YAAA;AAAA,UACb;AAAA,QAAA;AAAA,4BAED,SAAA,EACE,UAAA;AAAA;AAAA;AAAA;AAAA,UAAA,CAKH;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;"}
@@ -0,0 +1,42 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { createContext, useContext } from "react";
3
+ const ServerConfigContext = createContext(null);
4
+ function ServerConfigProvider({ children, config }) {
5
+ return /* @__PURE__ */ jsx(ServerConfigContext.Provider, { value: { config, configLoaded: true }, children });
6
+ }
7
+ function useServerConfig() {
8
+ const context = useContext(ServerConfigContext);
9
+ if (!context) {
10
+ throw new Error("useServerConfig must be used within a ServerConfigProvider");
11
+ }
12
+ return context.config;
13
+ }
14
+ function useServerConfigLoaded() {
15
+ const context = useContext(ServerConfigContext);
16
+ return (context == null ? void 0 : context.configLoaded) ?? false;
17
+ }
18
+ const ServerThemeContext = createContext(null);
19
+ function ServerThemeProvider({
20
+ children,
21
+ theme,
22
+ availableThemes
23
+ }) {
24
+ const setTheme = () => {
25
+ };
26
+ return /* @__PURE__ */ jsx(ServerThemeContext.Provider, { value: { theme, availableThemes, setTheme }, children });
27
+ }
28
+ function useServerTheme() {
29
+ const context = useContext(ServerThemeContext);
30
+ if (!context) {
31
+ throw new Error("useServerTheme must be used within a ServerThemeProvider");
32
+ }
33
+ return context;
34
+ }
35
+ export {
36
+ ServerConfigProvider as S,
37
+ useServerConfigLoaded as a,
38
+ ServerThemeProvider as b,
39
+ useServerTheme as c,
40
+ useServerConfig as u
41
+ };
42
+ //# sourceMappingURL=ServerThemeProvider-DNF0LAyk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ServerThemeProvider-DNF0LAyk.js","sources":["../../src/contexts/ServerConfigProvider.tsx","../../src/contexts/ServerThemeProvider.tsx"],"sourcesContent":["import { createContext, useContext, type ReactNode } from 'react';\nimport type { AppConfig } from '@chaaskit/shared';\n\n/**\n * Server-safe config provider that accepts pre-loaded config data.\n * Used for SSR routes where config is loaded in the Remix loader.\n * Does not make any API calls or use browser APIs.\n */\n\ninterface ServerConfigContextValue {\n config: Partial<AppConfig>;\n configLoaded: boolean;\n}\n\nconst ServerConfigContext = createContext<ServerConfigContextValue | null>(null);\n\nexport interface ServerConfigProviderProps {\n children: ReactNode;\n config: Partial<AppConfig>;\n}\n\nexport function ServerConfigProvider({ children, config }: ServerConfigProviderProps) {\n return (\n <ServerConfigContext.Provider value={{ config, configLoaded: true }}>\n {children}\n </ServerConfigContext.Provider>\n );\n}\n\nexport function useServerConfig(): Partial<AppConfig> {\n const context = useContext(ServerConfigContext);\n if (!context) {\n throw new Error('useServerConfig must be used within a ServerConfigProvider');\n }\n return context.config;\n}\n\nexport function useServerConfigLoaded(): boolean {\n const context = useContext(ServerConfigContext);\n return context?.configLoaded ?? false;\n}\n","import { createContext, useContext, type ReactNode } from 'react';\n\n/**\n * Server-safe theme provider that accepts a pre-determined theme.\n * Used for SSR routes where theme is determined on the server.\n * Does not access localStorage or document.\n */\n\ninterface ServerThemeContextValue {\n theme: string;\n availableThemes: string[];\n // setTheme is a no-op on server, actual theme switching happens client-side\n setTheme: (theme: string) => void;\n}\n\nconst ServerThemeContext = createContext<ServerThemeContextValue | null>(null);\n\nexport interface ServerThemeProviderProps {\n children: ReactNode;\n theme: string;\n availableThemes: string[];\n}\n\nexport function ServerThemeProvider({\n children,\n theme,\n availableThemes,\n}: ServerThemeProviderProps) {\n // Server-side setTheme is a no-op - theme changes require client-side hydration\n const setTheme = () => {\n // No-op on server\n };\n\n return (\n <ServerThemeContext.Provider value={{ theme, availableThemes, setTheme }}>\n {children}\n </ServerThemeContext.Provider>\n );\n}\n\nexport function useServerTheme() {\n const context = useContext(ServerThemeContext);\n if (!context) {\n throw new Error('useServerTheme must be used within a ServerThemeProvider');\n }\n return context;\n}\n"],"names":[],"mappings":";;AAcA,MAAM,sBAAsB,cAA+C,IAAI;AAOxE,SAAS,qBAAqB,EAAE,UAAU,UAAqC;AACpF,SACE,oBAAC,oBAAoB,UAApB,EAA6B,OAAO,EAAE,QAAQ,cAAc,QAC1D,UACH;AAEJ;AAEO,SAAS,kBAAsC;AACpD,QAAM,UAAU,WAAW,mBAAmB;AAC9C,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,4DAA4D;AAAA,EAC9E;AACA,SAAO,QAAQ;AACjB;AAEO,SAAS,wBAAiC;AAC/C,QAAM,UAAU,WAAW,mBAAmB;AAC9C,UAAO,mCAAS,iBAAgB;AAClC;ACzBA,MAAM,qBAAqB,cAA8C,IAAI;AAQtE,SAAS,oBAAoB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AACF,GAA6B;AAE3B,QAAM,WAAW,MAAM;AAAA,EAEvB;AAEA,SACE,oBAAC,mBAAmB,UAAnB,EAA4B,OAAO,EAAE,OAAO,iBAAiB,YAC3D,UACH;AAEJ;AAEO,SAAS,iBAAiB;AAC/B,QAAM,UAAU,WAAW,kBAAkB;AAC7C,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,0DAA0D;AAAA,EAC5E;AACA,SAAO;AACT;"}
@@ -0,0 +1,10 @@
1
+ import { c, e, u, b, a, d } from "./useExtensions-B5nX_8XD.js";
2
+ export {
3
+ c as clientRegistry,
4
+ e as useComponentOverride,
5
+ u as useExtensionPages,
6
+ b as useExtensionTools,
7
+ a as useSidebarPages,
8
+ d as useToolRenderer
9
+ };
10
+ //# sourceMappingURL=extensions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extensions.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
@@ -0,0 +1,11 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32">
2
+ <defs>
3
+ <linearGradient id="grad" x1="0%" y1="0%" x2="100%" y2="100%">
4
+ <stop offset="0%" style="stop-color:#6366f1"/>
5
+ <stop offset="100%" style="stop-color:#8b5cf6"/>
6
+ </linearGradient>
7
+ </defs>
8
+ <rect width="32" height="32" rx="6" fill="url(#grad)"/>
9
+ <path d="M10 12 L16 9 L22 12 L22 18 L16 21 L10 18 Z" fill="none" stroke="white" stroke-width="1.5" stroke-linejoin="round"/>
10
+ <circle cx="16" cy="15" r="2.5" fill="white"/>
11
+ </svg>