organify-ui 0.2.16 → 0.3.2

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.
@@ -8,7 +8,8 @@ function getSystemTheme() {
8
8
  return window.matchMedia("(prefers-color-scheme: light)").matches ? "light" : "dark";
9
9
  }
10
10
  function resolveTheme(theme) {
11
- return theme === "system" ? getSystemTheme() : theme;
11
+ if (theme === "system") return getSystemTheme();
12
+ return theme;
12
13
  }
13
14
  function ThemeProvider({
14
15
  children,
@@ -22,7 +23,7 @@ function ThemeProvider({
22
23
  if (typeof window === "undefined") return defaultTheme;
23
24
  try {
24
25
  const stored = localStorage.getItem(storageKey);
25
- if (stored === "dark" || stored === "light" || stored === "system") return stored;
26
+ if (stored === "dark" || stored === "light" || stored === "liquid" || stored === "fluid" || stored === "system") return stored;
26
27
  } catch {
27
28
  }
28
29
  return defaultTheme;
@@ -46,14 +47,14 @@ function ThemeProvider({
46
47
  setResolvedTheme(resolved);
47
48
  const root = document.documentElement;
48
49
  root.setAttribute(attribute, resolved);
49
- root.style.colorScheme = resolved;
50
+ root.style.colorScheme = resolved === "light" ? "light" : "dark";
50
51
  if (theme === "system" && !forcedTheme) {
51
52
  const mq = window.matchMedia("(prefers-color-scheme: light)");
52
53
  const handler = (e) => {
53
54
  const r = e.matches ? "light" : "dark";
54
55
  setResolvedTheme(r);
55
56
  root.setAttribute(attribute, r);
56
- root.style.colorScheme = r;
57
+ root.style.colorScheme = r === "light" ? "light" : "dark";
57
58
  };
58
59
  mq.addEventListener("change", handler);
59
60
  return () => mq.removeEventListener("change", handler);
@@ -72,5 +73,5 @@ function useTheme() {
72
73
  }
73
74
 
74
75
  export { ThemeProvider, useTheme };
75
- //# sourceMappingURL=chunk-5L6BWKVA.js.map
76
- //# sourceMappingURL=chunk-5L6BWKVA.js.map
76
+ //# sourceMappingURL=chunk-RFOKENE3.js.map
77
+ //# sourceMappingURL=chunk-RFOKENE3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/providers/theme-provider.tsx"],"names":[],"mappings":"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","file":"chunk-RFOKENE3.js","sourcesContent":["'use client';\n\nimport * as React from 'react';\n\nexport type Theme = 'dark' | 'light' | 'liquid' | 'fluid' | 'system';\ntype ResolvedTheme = 'dark' | 'light' | 'liquid' | 'fluid';\n\ninterface ThemeContextValue {\n theme: Theme;\n resolvedTheme: ResolvedTheme;\n setTheme: (theme: Theme) => void;\n}\n\nconst ThemeContext = React.createContext<ThemeContextValue | undefined>(undefined);\n\nconst STORAGE_KEY = 'organify-theme';\n\nfunction getSystemTheme(): ResolvedTheme {\n if (typeof window === 'undefined') return 'dark';\n return window.matchMedia('(prefers-color-scheme: light)').matches ? 'light' : 'dark';\n}\n\nfunction resolveTheme(theme: Theme): ResolvedTheme {\n if (theme === 'system') return getSystemTheme();\n return theme;\n}\n\nexport interface ThemeProviderProps {\n children: React.ReactNode;\n /** Default theme when no preference is stored */\n defaultTheme?: Theme;\n /** Force a specific theme (overrides user choice) */\n forcedTheme?: ResolvedTheme;\n /** Storage key for persistence */\n storageKey?: string;\n /** Apply to a specific element instead of <html> */\n attribute?: string;\n}\n\nfunction ThemeProvider({\n children,\n defaultTheme = 'system',\n forcedTheme,\n storageKey = STORAGE_KEY,\n attribute = 'data-theme',\n}: ThemeProviderProps) {\n const [theme, setThemeState] = React.useState<Theme>(() => {\n if (forcedTheme) return forcedTheme;\n if (typeof window === 'undefined') return defaultTheme;\n try {\n const stored = localStorage.getItem(storageKey);\n if (stored === 'dark' || stored === 'light' || stored === 'liquid' || stored === 'fluid' || stored === 'system') return stored;\n } catch {}\n return defaultTheme;\n });\n\n const [resolvedTheme, setResolvedTheme] = React.useState<ResolvedTheme>(() =>\n forcedTheme ?? resolveTheme(theme),\n );\n\n const setTheme = React.useCallback(\n (newTheme: Theme) => {\n if (forcedTheme) return;\n setThemeState(newTheme);\n try {\n localStorage.setItem(storageKey, newTheme);\n } catch {}\n },\n [forcedTheme, storageKey],\n );\n\n // Apply data-theme attribute and listen for system changes\n React.useEffect(() => {\n const resolved = forcedTheme ?? resolveTheme(theme);\n setResolvedTheme(resolved);\n\n const root = document.documentElement;\n root.setAttribute(attribute, resolved);\n root.style.colorScheme = resolved === 'light' ? 'light' : 'dark';\n\n // Listen for system theme changes when in system mode\n if (theme === 'system' && !forcedTheme) {\n const mq = window.matchMedia('(prefers-color-scheme: light)');\n const handler = (e: MediaQueryListEvent) => {\n const r: ResolvedTheme = e.matches ? 'light' : 'dark';\n setResolvedTheme(r);\n root.setAttribute(attribute, r);\n root.style.colorScheme = r === 'light' ? 'light' : 'dark';\n };\n mq.addEventListener('change', handler);\n return () => mq.removeEventListener('change', handler);\n }\n }, [theme, forcedTheme, attribute]);\n\n const value = React.useMemo(\n () => ({ theme, resolvedTheme, setTheme }),\n [theme, resolvedTheme, setTheme],\n );\n\n return <ThemeContext.Provider value={value}>{children}</ThemeContext.Provider>;\n}\n\nfunction useTheme(): ThemeContextValue {\n const ctx = React.useContext(ThemeContext);\n if (!ctx) throw new Error('useTheme must be used within a <ThemeProvider>');\n return ctx;\n}\n\nexport { ThemeProvider, useTheme };\n"]}
@@ -0,0 +1,327 @@
1
+ // src/tokens/colors.ts
2
+ var colors = {
3
+ // ─── Brand — Vibrant Violet ──────────────────────
4
+ primary: {
5
+ DEFAULT: "#7C3AED",
6
+ light: "#A78BFA",
7
+ soft: "#6D28D9",
8
+ electric: "#8B5CF6",
9
+ "electric-light": "#C4B5FD",
10
+ dark: "#4C1D95",
11
+ deep: "#3B0764"
12
+ },
13
+ // ─── Neutral — purple-tinted dark base ──────────
14
+ neutral: {
15
+ 900: "#0D0A1A",
16
+ 875: "#110E22",
17
+ 850: "#16122E",
18
+ 800: "#1A1530",
19
+ 750: "#211B3A",
20
+ 700: "#2A2245",
21
+ 600: "#352D52",
22
+ 500: "#7B7394",
23
+ 400: "#A49BBF",
24
+ 300: "#C4BDD9",
25
+ 200: "#DDD8EB",
26
+ 100: "#F0ECF9",
27
+ 50: "#F8F6FC",
28
+ 25: "#FCFBFE",
29
+ 0: "#FFFFFF"
30
+ },
31
+ // ─── Semantic ────────────────────────────────────
32
+ semantic: {
33
+ success: {
34
+ DEFAULT: "#10B981",
35
+ light: "#34d399",
36
+ dark: "#065f46",
37
+ surface: "rgba(16, 185, 129, 0.12)",
38
+ border: "rgba(16, 185, 129, 0.30)"
39
+ },
40
+ warning: {
41
+ DEFAULT: "#F59E0B",
42
+ light: "#fbbf24",
43
+ dark: "#92400e",
44
+ surface: "rgba(245, 158, 11, 0.12)",
45
+ border: "rgba(245, 158, 11, 0.30)"
46
+ },
47
+ error: {
48
+ DEFAULT: "#EF4444",
49
+ light: "#f87171",
50
+ dark: "#991b1b",
51
+ surface: "rgba(239, 68, 68, 0.12)",
52
+ border: "rgba(239, 68, 68, 0.30)"
53
+ },
54
+ info: {
55
+ DEFAULT: "#3B82F6",
56
+ light: "#60a5fa",
57
+ dark: "#1e40af",
58
+ surface: "rgba(59, 130, 246, 0.12)",
59
+ border: "rgba(59, 130, 246, 0.30)"
60
+ }
61
+ },
62
+ // ─── Glass — purple-tinted transparency ─────────
63
+ glass: {
64
+ bg: "rgba(124, 58, 237, 0.06)",
65
+ bgHeavy: "rgba(124, 58, 237, 0.12)",
66
+ surface: "rgba(255, 255, 255, 0.05)",
67
+ border: "rgba(167, 139, 250, 0.15)",
68
+ borderMedium: "rgba(167, 139, 250, 0.25)",
69
+ borderStrong: "rgba(167, 139, 250, 0.40)",
70
+ highlight: "rgba(255, 255, 255, 0.06)",
71
+ white5: "rgba(255, 255, 255, 0.05)",
72
+ white10: "rgba(255, 255, 255, 0.10)",
73
+ white20: "rgba(255, 255, 255, 0.20)",
74
+ white40: "rgba(255, 255, 255, 0.40)"
75
+ },
76
+ // ─── Cream Theme ────────────────────────────────
77
+ cream: {
78
+ base: "#F8F6FC",
79
+ surface: "rgba(255, 255, 255, 0.75)",
80
+ surfaceStrong: "rgba(255, 255, 255, 0.92)",
81
+ border: "rgba(124, 58, 237, 0.08)",
82
+ borderMedium: "rgba(124, 58, 237, 0.12)",
83
+ borderStrong: "rgba(124, 58, 237, 0.20)",
84
+ glassBorder: "rgba(124, 58, 237, 0.04)",
85
+ text: "#1A1530",
86
+ textMuted: "#7B7394",
87
+ textSubtle: "#A49BBF"
88
+ },
89
+ // ─── Fluid Theme ────────────────────────────────
90
+ fluid: {
91
+ bg: "rgba(124, 58, 237, 0.05)",
92
+ surface: "#1A1530",
93
+ border: "rgba(167, 139, 250, 0.08)",
94
+ borderMedium: "rgba(167, 139, 250, 0.12)",
95
+ borderStrong: "rgba(167, 139, 250, 0.18)",
96
+ highlight: "rgba(167, 139, 250, 0.06)",
97
+ primarySoft: "rgba(124, 58, 237, 0.20)"
98
+ },
99
+ // ─── Liquid Glass Theme — violet glassmorphism ──
100
+ liquid: {
101
+ void: "#0D0A1A",
102
+ surface: "#110E22",
103
+ elevated: "#1A1530",
104
+ card: "#13102A",
105
+ text: "#F0ECF9",
106
+ textSecondary: "#C4BDD9",
107
+ textMuted: "#7B7394",
108
+ border: "rgba(139, 92, 246, 0.10)",
109
+ borderMedium: "rgba(139, 92, 246, 0.18)",
110
+ borderStrong: "rgba(167, 139, 250, 0.28)",
111
+ glassBg: "rgba(124, 58, 237, 0.06)",
112
+ glassBgHeavy: "rgba(17, 14, 34, 0.85)",
113
+ glassSurface: "rgba(17, 14, 34, 0.70)",
114
+ glassBorder: "rgba(139, 92, 246, 0.08)",
115
+ glassBorderMedium: "rgba(139, 92, 246, 0.15)",
116
+ glassBorderStrong: "rgba(167, 139, 250, 0.25)",
117
+ glassHighlight: "rgba(167, 139, 250, 0.06)",
118
+ primaryViolet: "#7C3AED",
119
+ primaryPurple: "#A855F7",
120
+ primaryLavender: "#C4B5FD",
121
+ primaryDeep: "#6D28D9",
122
+ primarySoft: "rgba(124, 58, 237, 0.20)",
123
+ accentGlow: "rgba(124, 58, 237, 0.40)",
124
+ grainOpacity: "0.04"
125
+ },
126
+ // ─── Status / Flow ──────────────────────────────
127
+ status: {
128
+ inFlow: {
129
+ bg: "rgba(124, 58, 237, 0.20)",
130
+ text: "#C4B5FD",
131
+ border: "rgba(124, 58, 237, 0.30)",
132
+ dot: "#A78BFA"
133
+ },
134
+ deepWork: {
135
+ bg: "rgba(217, 70, 239, 0.12)",
136
+ text: "#f0abfc",
137
+ border: "rgba(217, 70, 239, 0.22)"
138
+ },
139
+ resting: {
140
+ bg: "rgba(245, 158, 11, 0.15)",
141
+ text: "#fde68a",
142
+ border: "rgba(245, 158, 11, 0.30)"
143
+ },
144
+ disconnected: {
145
+ bg: "rgba(239, 68, 68, 0.15)",
146
+ text: "#fecdd3",
147
+ border: "rgba(239, 68, 68, 0.30)"
148
+ }
149
+ }
150
+ };
151
+
152
+ // src/tokens/typography.ts
153
+ var fontFamily = {
154
+ sans: ["Space Grotesk", "Inter", "system-ui", "-apple-system", "sans-serif"],
155
+ mono: [
156
+ "ui-monospace",
157
+ "SFMono-Regular",
158
+ "Menlo",
159
+ "Monaco",
160
+ "Consolas",
161
+ "Liberation Mono",
162
+ "Courier New",
163
+ "monospace"
164
+ ]
165
+ };
166
+ var fontSize = {
167
+ "display-xl": ["5rem", { lineHeight: "0.90", letterSpacing: "-0.04em", fontWeight: "300" }],
168
+ "display-lg": ["4rem", { lineHeight: "0.95", letterSpacing: "-0.03em", fontWeight: "300" }],
169
+ "heading-xl": ["2.5rem", { lineHeight: "1.1", letterSpacing: "-0.02em", fontWeight: "400" }],
170
+ "heading-lg": ["1.5rem", { lineHeight: "1.2", letterSpacing: "-0.01em", fontWeight: "400" }],
171
+ "heading-md": ["1.25rem", { lineHeight: "1.3", letterSpacing: "-0.01em", fontWeight: "400" }],
172
+ "heading-sm": ["1rem", { lineHeight: "1.4", fontWeight: "500" }],
173
+ "body-lg": ["1rem", { lineHeight: "1.6", fontWeight: "300" }],
174
+ "body-md": ["0.875rem", { lineHeight: "1.6", fontWeight: "300" }],
175
+ "body-sm": ["0.75rem", { lineHeight: "1.5", fontWeight: "400" }],
176
+ "caption": ["0.6875rem", { lineHeight: "1.4", fontWeight: "500" }],
177
+ "label": ["0.625rem", { lineHeight: "1.3", letterSpacing: "0.15em", fontWeight: "500" }],
178
+ "mono-xs": ["0.625rem", { lineHeight: "1.4", fontWeight: "400" }]
179
+ };
180
+ var fontWeight = {
181
+ thin: "100",
182
+ extralight: "200",
183
+ light: "300",
184
+ normal: "400",
185
+ medium: "500",
186
+ semibold: "600"
187
+ };
188
+
189
+ // src/tokens/shadows.ts
190
+ var shadows = {
191
+ glass: "0 24px 80px -15px rgba(13, 10, 26, 0.60)",
192
+ "glass-sm": "0 8px 32px -8px rgba(13, 10, 26, 0.50)",
193
+ "glass-lg": "0 32px 100px -20px rgba(13, 10, 26, 0.70)",
194
+ "glass-xl": "0 40px 120px -20px rgba(13, 10, 26, 0.80)",
195
+ "cream-glass": "0 10px 40px -10px rgba(124, 58, 237, 0.06), inset 0 0 20px rgba(255, 255, 255, 0.50)",
196
+ "cream-soft": "0 20px 60px -15px rgba(124, 58, 237, 0.08)",
197
+ "cream-glow": "0 0 15px rgba(124, 58, 237, 0.12)",
198
+ "cream-btn": "0 8px 20px rgba(124, 58, 237, 0.10)",
199
+ "cream-btn-primary": "0 4px 12px rgba(124, 58, 237, 0.15)",
200
+ "inner-light": "inset 0 1px 0 0 rgba(167, 139, 250, 0.08)",
201
+ "neon-glow": "0 0 15px rgba(124, 58, 237, 0.35), 0 0 30px rgba(124, 58, 237, 0.15)",
202
+ "neon-glow-sm": "0 0 8px rgba(124, 58, 237, 0.30)",
203
+ "neon-glow-lg": "0 0 30px rgba(124, 58, 237, 0.45), 0 0 60px rgba(124, 58, 237, 0.20)",
204
+ "soft-glow": "0 0 20px rgba(124, 58, 237, 0.08)",
205
+ "glow-primary": "0 0 25px rgba(124, 58, 237, 0.50)",
206
+ "glow-soft": "0 0 60px rgba(124, 58, 237, 0.18)",
207
+ "glow-indigo": "0 0 15px rgba(124, 58, 237, 0.50)",
208
+ "glow-success": "0 0 20px rgba(16, 185, 129, 0.20)",
209
+ "glow-warning": "0 0 20px rgba(245, 158, 11, 0.20)",
210
+ "glow-error": "0 0 20px rgba(239, 68, 68, 0.20)",
211
+ "glow-info": "0 0 20px rgba(59, 130, 246, 0.20)",
212
+ "asymmetric-glow": "0 0 60px -15px rgba(124, 58, 237, 0.35)",
213
+ sharp: "4px 4px 0px 0px rgba(124, 58, 237, 1)",
214
+ "status-online": "0 0 8px rgba(74, 222, 128, 0.80)",
215
+ "status-flow": "0 0 8px rgba(167, 139, 250, 0.80)",
216
+ "status-primary": "0 0 15px rgba(124, 58, 237, 0.50)",
217
+ // ─── Liquid Glass ───────────────────────────────
218
+ "liquid-glass": "0 8px 32px rgba(13, 10, 26, 0.60), inset 0 1px 0 0 rgba(167, 139, 250, 0.06)",
219
+ "liquid-glass-sm": "0 4px 16px rgba(13, 10, 26, 0.40)",
220
+ "liquid-glass-lg": "0 16px 48px rgba(13, 10, 26, 0.70), inset 0 1px 0 0 rgba(167, 139, 250, 0.08)",
221
+ "liquid-glass-xl": "0 24px 64px rgba(13, 10, 26, 0.80), inset 0 1px 0 0 rgba(167, 139, 250, 0.10)",
222
+ "liquid-glow": "0 0 20px rgba(124, 58, 237, 0.30), 0 0 40px rgba(168, 85, 247, 0.15)",
223
+ "liquid-glow-sm": "0 0 12px rgba(124, 58, 237, 0.25)",
224
+ "liquid-glow-lg": "0 0 40px rgba(124, 58, 237, 0.40), 0 0 80px rgba(168, 85, 247, 0.20)",
225
+ "liquid-glow-primary": "0 0 24px rgba(124, 58, 237, 0.35), 0 4px 16px rgba(124, 58, 237, 0.20)",
226
+ "liquid-neon": "0 0 15px rgba(124, 58, 237, 0.50), 0 0 30px rgba(168, 85, 247, 0.25)",
227
+ "liquid-inner": "inset 0 1px 0 0 rgba(167, 139, 250, 0.08)"
228
+ };
229
+
230
+ // src/tokens/borders.ts
231
+ var borderRadius = {
232
+ none: "0",
233
+ sm: "0.25rem",
234
+ md: "0.5rem",
235
+ lg: "1rem",
236
+ xl: "1.25rem",
237
+ "2xl": "1.5rem",
238
+ "3xl": "2rem",
239
+ "4xl": "2.5rem",
240
+ full: "9999px",
241
+ organic: "2.5rem",
242
+ "organic-lg": "3rem",
243
+ squircle: "1.25rem",
244
+ "squircle-sm": "1rem",
245
+ "squircle-lg": "2rem",
246
+ geo: "0.5rem 2rem 0.5rem 2rem",
247
+ "geo-inv": "2rem 0.5rem 2rem 0.5rem",
248
+ "d-shape": "0.25rem 2rem 2rem 0.25rem",
249
+ "pill-asym": "4px 16px 16px 4px",
250
+ "asym-1": "24px 8px 24px 8px",
251
+ "asym-2": "8px 24px 8px 24px"
252
+ };
253
+
254
+ // src/tokens/animations.ts
255
+ var animation = {
256
+ keyframes: {
257
+ shimmer: {
258
+ "0%": { transform: "translateX(-100%)" },
259
+ "100%": { transform: "translateX(100%)" }
260
+ },
261
+ "draw-line": {
262
+ to: { strokeDashoffset: "0" }
263
+ },
264
+ "spin-slow": {
265
+ from: { transform: "rotate(0deg)" },
266
+ to: { transform: "rotate(360deg)" }
267
+ },
268
+ "glow-pulse": {
269
+ "0%, 100%": { opacity: "0.4" },
270
+ "50%": { opacity: "1" }
271
+ },
272
+ float: {
273
+ "0%": { transform: "translate(0, 0) rotate(0deg)" },
274
+ "50%": { transform: "translate(-20px, 20px) rotate(2deg)" },
275
+ "100%": { transform: "translate(0, 0) rotate(0deg)" }
276
+ },
277
+ "float-subtle": {
278
+ "0%, 100%": { transform: "translateY(0)" },
279
+ "50%": { transform: "translateY(-8px)" }
280
+ },
281
+ "fade-in": {
282
+ from: { opacity: "0" },
283
+ to: { opacity: "1" }
284
+ },
285
+ "slide-up": {
286
+ from: { opacity: "0", transform: "translateY(12px)" },
287
+ to: { opacity: "1", transform: "translateY(0)" }
288
+ },
289
+ "liquid-reveal": {
290
+ from: { opacity: "0", transform: "translateY(8px) scale(0.98)", filter: "blur(4px)" },
291
+ to: { opacity: "1", transform: "translateY(0) scale(1)", filter: "blur(0)" }
292
+ },
293
+ "liquid-fade": {
294
+ from: { opacity: "0", backdropFilter: "blur(0px)" },
295
+ to: { opacity: "1", backdropFilter: "blur(40px)" }
296
+ },
297
+ "liquid-glow-pulse": {
298
+ "0%, 100%": { opacity: "0.3", boxShadow: "0 0 20px rgba(124, 58, 237, 0.20)" },
299
+ "50%": { opacity: "0.6", boxShadow: "0 0 40px rgba(124, 58, 237, 0.40)" }
300
+ },
301
+ "grain-drift": {
302
+ "0%": { transform: "translate(0, 0)" },
303
+ "50%": { transform: "translate(-2%, -1%)" },
304
+ "100%": { transform: "translate(0, 0)" }
305
+ }
306
+ },
307
+ durations: {
308
+ fast: "150ms",
309
+ normal: "300ms",
310
+ slow: "500ms",
311
+ "very-slow": "700ms",
312
+ organic: "400ms"
313
+ },
314
+ easings: {
315
+ default: "cubic-bezier(0.4, 0, 0.2, 1)",
316
+ in: "cubic-bezier(0.4, 0, 1, 1)",
317
+ out: "cubic-bezier(0, 0, 0.2, 1)",
318
+ "in-out": "cubic-bezier(0.4, 0, 0.2, 1)",
319
+ spring: "cubic-bezier(0.34, 1.56, 0.64, 1)",
320
+ organic: "cubic-bezier(0.25, 1, 0.5, 1)",
321
+ "organic-out": "cubic-bezier(0.2, 0.8, 0.2, 1)"
322
+ }
323
+ };
324
+
325
+ export { animation, borderRadius, colors, fontFamily, fontSize, fontWeight, shadows };
326
+ //# sourceMappingURL=chunk-UGX6D3AO.js.map
327
+ //# sourceMappingURL=chunk-UGX6D3AO.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/tokens/colors.ts","../src/tokens/typography.ts","../src/tokens/shadows.ts","../src/tokens/borders.ts","../src/tokens/animations.ts"],"names":[],"mappings":"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","file":"chunk-UGX6D3AO.js","sourcesContent":["/**\n * @organify/ui — Color Tokens\n *\n * Organify Organic Design System — Vibrant Violet\n * Purple-dominant glassmorphism with violet accents.\n * Inspired by the Organify landing page aesthetic.\n *\n * Themes: Dark (default), Cream (light), Fluid (vibrant)\n */\n\nexport const colors = {\n // ─── Brand — Vibrant Violet ──────────────────────\n primary: {\n DEFAULT: '#7C3AED',\n light: '#A78BFA',\n soft: '#6D28D9',\n electric: '#8B5CF6',\n 'electric-light': '#C4B5FD',\n dark: '#4C1D95',\n deep: '#3B0764',\n },\n\n // ─── Neutral — purple-tinted dark base ──────────\n neutral: {\n 900: '#0D0A1A',\n 875: '#110E22',\n 850: '#16122E',\n 800: '#1A1530',\n 750: '#211B3A',\n 700: '#2A2245',\n 600: '#352D52',\n 500: '#7B7394',\n 400: '#A49BBF',\n 300: '#C4BDD9',\n 200: '#DDD8EB',\n 100: '#F0ECF9',\n 50: '#F8F6FC',\n 25: '#FCFBFE',\n 0: '#FFFFFF',\n },\n\n // ─── Semantic ────────────────────────────────────\n semantic: {\n success: {\n DEFAULT: '#10B981',\n light: '#34d399',\n dark: '#065f46',\n surface: 'rgba(16, 185, 129, 0.12)',\n border: 'rgba(16, 185, 129, 0.30)',\n },\n warning: {\n DEFAULT: '#F59E0B',\n light: '#fbbf24',\n dark: '#92400e',\n surface: 'rgba(245, 158, 11, 0.12)',\n border: 'rgba(245, 158, 11, 0.30)',\n },\n error: {\n DEFAULT: '#EF4444',\n light: '#f87171',\n dark: '#991b1b',\n surface: 'rgba(239, 68, 68, 0.12)',\n border: 'rgba(239, 68, 68, 0.30)',\n },\n info: {\n DEFAULT: '#3B82F6',\n light: '#60a5fa',\n dark: '#1e40af',\n surface: 'rgba(59, 130, 246, 0.12)',\n border: 'rgba(59, 130, 246, 0.30)',\n },\n },\n\n // ─── Glass — purple-tinted transparency ─────────\n glass: {\n bg: 'rgba(124, 58, 237, 0.06)',\n bgHeavy: 'rgba(124, 58, 237, 0.12)',\n surface: 'rgba(255, 255, 255, 0.05)',\n border: 'rgba(167, 139, 250, 0.15)',\n borderMedium: 'rgba(167, 139, 250, 0.25)',\n borderStrong: 'rgba(167, 139, 250, 0.40)',\n highlight: 'rgba(255, 255, 255, 0.06)',\n white5: 'rgba(255, 255, 255, 0.05)',\n white10: 'rgba(255, 255, 255, 0.10)',\n white20: 'rgba(255, 255, 255, 0.20)',\n white40: 'rgba(255, 255, 255, 0.40)',\n },\n\n // ─── Cream Theme ────────────────────────────────\n cream: {\n base: '#F8F6FC',\n surface: 'rgba(255, 255, 255, 0.75)',\n surfaceStrong: 'rgba(255, 255, 255, 0.92)',\n border: 'rgba(124, 58, 237, 0.08)',\n borderMedium: 'rgba(124, 58, 237, 0.12)',\n borderStrong: 'rgba(124, 58, 237, 0.20)',\n glassBorder: 'rgba(124, 58, 237, 0.04)',\n text: '#1A1530',\n textMuted: '#7B7394',\n textSubtle: '#A49BBF',\n },\n\n // ─── Fluid Theme ────────────────────────────────\n fluid: {\n bg: 'rgba(124, 58, 237, 0.05)',\n surface: '#1A1530',\n border: 'rgba(167, 139, 250, 0.08)',\n borderMedium: 'rgba(167, 139, 250, 0.12)',\n borderStrong: 'rgba(167, 139, 250, 0.18)',\n highlight: 'rgba(167, 139, 250, 0.06)',\n primarySoft: 'rgba(124, 58, 237, 0.20)',\n },\n\n // ─── Liquid Glass Theme — violet glassmorphism ──\n liquid: {\n void: '#0D0A1A',\n surface: '#110E22',\n elevated: '#1A1530',\n card: '#13102A',\n text: '#F0ECF9',\n textSecondary: '#C4BDD9',\n textMuted: '#7B7394',\n border: 'rgba(139, 92, 246, 0.10)',\n borderMedium: 'rgba(139, 92, 246, 0.18)',\n borderStrong: 'rgba(167, 139, 250, 0.28)',\n glassBg: 'rgba(124, 58, 237, 0.06)',\n glassBgHeavy: 'rgba(17, 14, 34, 0.85)',\n glassSurface: 'rgba(17, 14, 34, 0.70)',\n glassBorder: 'rgba(139, 92, 246, 0.08)',\n glassBorderMedium: 'rgba(139, 92, 246, 0.15)',\n glassBorderStrong: 'rgba(167, 139, 250, 0.25)',\n glassHighlight: 'rgba(167, 139, 250, 0.06)',\n primaryViolet: '#7C3AED',\n primaryPurple: '#A855F7',\n primaryLavender: '#C4B5FD',\n primaryDeep: '#6D28D9',\n primarySoft: 'rgba(124, 58, 237, 0.20)',\n accentGlow: 'rgba(124, 58, 237, 0.40)',\n grainOpacity: '0.04',\n },\n\n // ─── Status / Flow ──────────────────────────────\n status: {\n inFlow: {\n bg: 'rgba(124, 58, 237, 0.20)',\n text: '#C4B5FD',\n border: 'rgba(124, 58, 237, 0.30)',\n dot: '#A78BFA',\n },\n deepWork: {\n bg: 'rgba(217, 70, 239, 0.12)',\n text: '#f0abfc',\n border: 'rgba(217, 70, 239, 0.22)',\n },\n resting: {\n bg: 'rgba(245, 158, 11, 0.15)',\n text: '#fde68a',\n border: 'rgba(245, 158, 11, 0.30)',\n },\n disconnected: {\n bg: 'rgba(239, 68, 68, 0.15)',\n text: '#fecdd3',\n border: 'rgba(239, 68, 68, 0.30)',\n },\n },\n} as const;\n\nexport type Colors = typeof colors;\n","/**\n * @organify/ui — Typography Tokens\n *\n * Space Grotesk — primary font, geometric & modern.\n * Inter kept as secondary/fallback.\n * Display headings use italic style for landing aesthetic.\n */\n\nexport const fontFamily = {\n sans: ['Space Grotesk', 'Inter', 'system-ui', '-apple-system', 'sans-serif'],\n mono: [\n 'ui-monospace',\n 'SFMono-Regular',\n 'Menlo',\n 'Monaco',\n 'Consolas',\n 'Liberation Mono',\n 'Courier New',\n 'monospace',\n ],\n} as const;\n\nexport const fontSize = {\n 'display-xl': ['5rem', { lineHeight: '0.90', letterSpacing: '-0.04em', fontWeight: '300' }],\n 'display-lg': ['4rem', { lineHeight: '0.95', letterSpacing: '-0.03em', fontWeight: '300' }],\n 'heading-xl': ['2.5rem', { lineHeight: '1.1', letterSpacing: '-0.02em', fontWeight: '400' }],\n 'heading-lg': ['1.5rem', { lineHeight: '1.2', letterSpacing: '-0.01em', fontWeight: '400' }],\n 'heading-md': ['1.25rem', { lineHeight: '1.3', letterSpacing: '-0.01em', fontWeight: '400' }],\n 'heading-sm': ['1rem', { lineHeight: '1.4', fontWeight: '500' }],\n 'body-lg': ['1rem', { lineHeight: '1.6', fontWeight: '300' }],\n 'body-md': ['0.875rem', { lineHeight: '1.6', fontWeight: '300' }],\n 'body-sm': ['0.75rem', { lineHeight: '1.5', fontWeight: '400' }],\n 'caption': ['0.6875rem', { lineHeight: '1.4', fontWeight: '500' }],\n 'label': ['0.625rem', { lineHeight: '1.3', letterSpacing: '0.15em', fontWeight: '500' }],\n 'mono-xs': ['0.625rem', { lineHeight: '1.4', fontWeight: '400' }],\n} as const;\n\nexport const fontWeight = {\n thin: '100',\n extralight: '200',\n light: '300',\n normal: '400',\n medium: '500',\n semibold: '600',\n} as const;\n\nexport type FontFamily = typeof fontFamily;\nexport type FontSize = typeof fontSize;\nexport type FontWeight = typeof fontWeight;\n","/**\n * @organify/ui — Shadow Tokens\n *\n * Organic Design System — violet-tinted depth & glow layers.\n */\n\nexport const shadows = {\n glass: '0 24px 80px -15px rgba(13, 10, 26, 0.60)',\n 'glass-sm': '0 8px 32px -8px rgba(13, 10, 26, 0.50)',\n 'glass-lg': '0 32px 100px -20px rgba(13, 10, 26, 0.70)',\n 'glass-xl': '0 40px 120px -20px rgba(13, 10, 26, 0.80)',\n 'cream-glass': '0 10px 40px -10px rgba(124, 58, 237, 0.06), inset 0 0 20px rgba(255, 255, 255, 0.50)',\n 'cream-soft': '0 20px 60px -15px rgba(124, 58, 237, 0.08)',\n 'cream-glow': '0 0 15px rgba(124, 58, 237, 0.12)',\n 'cream-btn': '0 8px 20px rgba(124, 58, 237, 0.10)',\n 'cream-btn-primary': '0 4px 12px rgba(124, 58, 237, 0.15)',\n 'inner-light': 'inset 0 1px 0 0 rgba(167, 139, 250, 0.08)',\n 'neon-glow': '0 0 15px rgba(124, 58, 237, 0.35), 0 0 30px rgba(124, 58, 237, 0.15)',\n 'neon-glow-sm': '0 0 8px rgba(124, 58, 237, 0.30)',\n 'neon-glow-lg': '0 0 30px rgba(124, 58, 237, 0.45), 0 0 60px rgba(124, 58, 237, 0.20)',\n 'soft-glow': '0 0 20px rgba(124, 58, 237, 0.08)',\n 'glow-primary': '0 0 25px rgba(124, 58, 237, 0.50)',\n 'glow-soft': '0 0 60px rgba(124, 58, 237, 0.18)',\n 'glow-indigo': '0 0 15px rgba(124, 58, 237, 0.50)',\n 'glow-success': '0 0 20px rgba(16, 185, 129, 0.20)',\n 'glow-warning': '0 0 20px rgba(245, 158, 11, 0.20)',\n 'glow-error': '0 0 20px rgba(239, 68, 68, 0.20)',\n 'glow-info': '0 0 20px rgba(59, 130, 246, 0.20)',\n 'asymmetric-glow': '0 0 60px -15px rgba(124, 58, 237, 0.35)',\n sharp: '4px 4px 0px 0px rgba(124, 58, 237, 1)',\n 'status-online': '0 0 8px rgba(74, 222, 128, 0.80)',\n 'status-flow': '0 0 8px rgba(167, 139, 250, 0.80)',\n 'status-primary': '0 0 15px rgba(124, 58, 237, 0.50)',\n\n // ─── Liquid Glass ───────────────────────────────\n 'liquid-glass': '0 8px 32px rgba(13, 10, 26, 0.60), inset 0 1px 0 0 rgba(167, 139, 250, 0.06)',\n 'liquid-glass-sm': '0 4px 16px rgba(13, 10, 26, 0.40)',\n 'liquid-glass-lg': '0 16px 48px rgba(13, 10, 26, 0.70), inset 0 1px 0 0 rgba(167, 139, 250, 0.08)',\n 'liquid-glass-xl': '0 24px 64px rgba(13, 10, 26, 0.80), inset 0 1px 0 0 rgba(167, 139, 250, 0.10)',\n 'liquid-glow': '0 0 20px rgba(124, 58, 237, 0.30), 0 0 40px rgba(168, 85, 247, 0.15)',\n 'liquid-glow-sm': '0 0 12px rgba(124, 58, 237, 0.25)',\n 'liquid-glow-lg': '0 0 40px rgba(124, 58, 237, 0.40), 0 0 80px rgba(168, 85, 247, 0.20)',\n 'liquid-glow-primary': '0 0 24px rgba(124, 58, 237, 0.35), 0 4px 16px rgba(124, 58, 237, 0.20)',\n 'liquid-neon': '0 0 15px rgba(124, 58, 237, 0.50), 0 0 30px rgba(168, 85, 247, 0.25)',\n 'liquid-inner': 'inset 0 1px 0 0 rgba(167, 139, 250, 0.08)',\n} as const;\n\nexport type Shadows = typeof shadows;\n","/**\n * @organify/ui — Border Tokens\n *\n * Organic Design System — fluid curves.\n * organic: 2.5rem (dark), 3rem (cream)\n * squircle: 1.25rem (dark), 1.5-2rem (cream/fluid)\n */\n\nexport const borderRadius = {\n none: '0',\n sm: '0.25rem',\n md: '0.5rem',\n lg: '1rem',\n xl: '1.25rem',\n '2xl': '1.5rem',\n '3xl': '2rem',\n '4xl': '2.5rem',\n full: '9999px',\n organic: '2.5rem',\n 'organic-lg': '3rem',\n squircle: '1.25rem',\n 'squircle-sm': '1rem',\n 'squircle-lg': '2rem',\n geo: '0.5rem 2rem 0.5rem 2rem',\n 'geo-inv': '2rem 0.5rem 2rem 0.5rem',\n 'd-shape': '0.25rem 2rem 2rem 0.25rem',\n 'pill-asym': '4px 16px 16px 4px',\n 'asym-1': '24px 8px 24px 8px',\n 'asym-2': '8px 24px 8px 24px',\n} as const;\n\nexport type BorderRadius = typeof borderRadius;\n","/**\n * @organify/ui — Animation Tokens\n *\n * Organic Design System — fluid, breathable motion.\n */\n\nexport const animation = {\n keyframes: {\n shimmer: {\n '0%': { transform: 'translateX(-100%)' },\n '100%': { transform: 'translateX(100%)' },\n },\n 'draw-line': {\n to: { strokeDashoffset: '0' },\n },\n 'spin-slow': {\n from: { transform: 'rotate(0deg)' },\n to: { transform: 'rotate(360deg)' },\n },\n 'glow-pulse': {\n '0%, 100%': { opacity: '0.4' },\n '50%': { opacity: '1' },\n },\n float: {\n '0%': { transform: 'translate(0, 0) rotate(0deg)' },\n '50%': { transform: 'translate(-20px, 20px) rotate(2deg)' },\n '100%': { transform: 'translate(0, 0) rotate(0deg)' },\n },\n 'float-subtle': {\n '0%, 100%': { transform: 'translateY(0)' },\n '50%': { transform: 'translateY(-8px)' },\n },\n 'fade-in': {\n from: { opacity: '0' },\n to: { opacity: '1' },\n },\n 'slide-up': {\n from: { opacity: '0', transform: 'translateY(12px)' },\n to: { opacity: '1', transform: 'translateY(0)' },\n },\n 'liquid-reveal': {\n from: { opacity: '0', transform: 'translateY(8px) scale(0.98)', filter: 'blur(4px)' },\n to: { opacity: '1', transform: 'translateY(0) scale(1)', filter: 'blur(0)' },\n },\n 'liquid-fade': {\n from: { opacity: '0', backdropFilter: 'blur(0px)' },\n to: { opacity: '1', backdropFilter: 'blur(40px)' },\n },\n 'liquid-glow-pulse': {\n '0%, 100%': { opacity: '0.3', boxShadow: '0 0 20px rgba(124, 58, 237, 0.20)' },\n '50%': { opacity: '0.6', boxShadow: '0 0 40px rgba(124, 58, 237, 0.40)' },\n },\n 'grain-drift': {\n '0%': { transform: 'translate(0, 0)' },\n '50%': { transform: 'translate(-2%, -1%)' },\n '100%': { transform: 'translate(0, 0)' },\n },\n },\n durations: {\n fast: '150ms',\n normal: '300ms',\n slow: '500ms',\n 'very-slow': '700ms',\n organic: '400ms',\n },\n easings: {\n default: 'cubic-bezier(0.4, 0, 0.2, 1)',\n in: 'cubic-bezier(0.4, 0, 1, 1)',\n out: 'cubic-bezier(0, 0, 0.2, 1)',\n 'in-out': 'cubic-bezier(0.4, 0, 0.2, 1)',\n spring: 'cubic-bezier(0.34, 1.56, 0.64, 1)',\n organic: 'cubic-bezier(0.25, 1, 0.5, 1)',\n 'organic-out': 'cubic-bezier(0.2, 0.8, 0.2, 1)',\n },\n} as const;\n\nexport type Animation = typeof animation;\n"]}
@@ -15,8 +15,8 @@ var badgeVariants = cva(
15
15
  {
16
16
  variants: {
17
17
  variant: {
18
- default: "rounded-full border border-glass-border bg-glass-highlight px-3 py-1.5 text-org-text-secondary",
19
- primary: "rounded-full border border-primary-light/30 bg-primary/20 px-3 py-1.5 text-primary-light",
18
+ default: "rounded-full border border-white/10 bg-white/[0.05] px-3 py-1.5 text-org-text-secondary",
19
+ primary: "rounded-full border border-indigo-400/30 bg-indigo-500/20 px-3 py-1.5 text-indigo-300",
20
20
  success: "rounded-full border border-success/30 bg-success/10 px-3 py-1.5 text-success-light",
21
21
  warning: "rounded-full border border-warning/30 bg-warning/10 px-3 py-1.5 text-warning-light",
22
22
  error: "rounded-full border border-error/30 bg-error/10 px-3 py-1.5 text-error-light",
@@ -51,7 +51,7 @@ function Badge({ className, variant, dot, dotColor, children, ...props }) {
51
51
  ] });
52
52
  }
53
53
  var avatarVariants = cva(
54
- "relative overflow-hidden border border-glass-border flex items-center justify-center",
54
+ "relative overflow-hidden border border-white/10 flex items-center justify-center",
55
55
  {
56
56
  variants: {
57
57
  shape: {
@@ -60,7 +60,7 @@ var avatarVariants = cva(
60
60
  "asym-2": "rounded-asym-2",
61
61
  geo: "rounded-geo",
62
62
  "geo-inv": "rounded-geo-inv",
63
- square: "rounded-sm"
63
+ square: "rounded-xl"
64
64
  },
65
65
  size: {
66
66
  sm: "h-8 w-8",
@@ -136,7 +136,7 @@ var TooltipContent = React3.forwardRef(({ className, sideOffset = 6, ...props },
136
136
  ref,
137
137
  sideOffset,
138
138
  className: cn(
139
- "z-50 max-w-[12rem] bg-glass-highlight backdrop-blur-md border border-glass-border rounded-sm px-2.5 py-1.5 text-[11px] leading-snug text-org-text shadow-glass animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-1 data-[side=left]:slide-in-from-right-1 data-[side=right]:slide-in-from-left-1 data-[side=top]:slide-in-from-bottom-1",
139
+ "z-50 max-w-[12rem] bg-white/[0.05] backdrop-blur-[40px] border border-white/10 rounded-xl px-2.5 py-1.5 text-[11px] leading-snug text-white/90 shadow-[0_24px_80px_-15px_rgba(0,0,0,0.5)] animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-1 data-[side=left]:slide-in-from-right-1 data-[side=right]:slide-in-from-left-1 data-[side=top]:slide-in-from-bottom-1",
140
140
  className
141
141
  ),
142
142
  ...props
@@ -150,7 +150,7 @@ function Skeleton({ className, variant = "rounded", ...props }) {
150
150
  className: cn(
151
151
  "skeleton-shimmer",
152
152
  variant === "circular" && "rounded-full",
153
- variant === "rounded" && "rounded-sm",
153
+ variant === "rounded" && "rounded-xl",
154
154
  variant === "rectangular" && "rounded-none",
155
155
  className
156
156
  ),
@@ -168,7 +168,7 @@ function SkeletonCard({ className, ...props }) {
168
168
  ] })
169
169
  ] }),
170
170
  /* @__PURE__ */ jsxs("div", { className: "space-y-3 pt-2", children: [
171
- /* @__PURE__ */ jsx(Skeleton, { className: "h-24 w-full rounded-sm" }),
171
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-24 w-full rounded-xl" }),
172
172
  /* @__PURE__ */ jsxs("div", { className: "flex justify-between pt-1", children: [
173
173
  /* @__PURE__ */ jsx(Skeleton, { className: "h-3 w-20 opacity-40" }),
174
174
  /* @__PURE__ */ jsx(Skeleton, { className: "h-3 w-20 opacity-40" })
@@ -455,5 +455,5 @@ function OrganifyProvider({ children, value }) {
455
455
  OrganifyProvider.displayName = "OrganifyProvider";
456
456
 
457
457
  export { Avatar, AvatarFallback, AvatarImage, Badge, OrganifyContext, OrganifyProvider, ScrollArea, ScrollBar, Skeleton, SkeletonCard, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, avatarVariants, badgeVariants, cn, useOrganify, useOrganifyApi, useOrganifyGql, useOrganifyNavigation, useOrganifyProject, useOrganifyRest, useOrganifyUser, useOrganifyWorkspace };
458
- //# sourceMappingURL=chunk-ERFN2H75.js.map
459
- //# sourceMappingURL=chunk-ERFN2H75.js.map
458
+ //# sourceMappingURL=chunk-VHQZS77G.js.map
459
+ //# sourceMappingURL=chunk-VHQZS77G.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/lib/utils.ts","../src/components/primitives/badge.tsx","../src/components/primitives/avatar.tsx","../src/components/primitives/tooltip.tsx","../src/components/primitives/skeleton.tsx","../src/components/primitives/scroll-area.tsx","../src/providers/organify-provider.tsx"],"names":["cva","React","jsxs","jsx","React2","json"],"mappings":"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","file":"chunk-VHQZS77G.js","sourcesContent":["import { type ClassValue, clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\n/**\n * Merge Tailwind CSS classes with clsx — the standard shadcn pattern.\n */\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../lib/utils';\n\n/**\n * Badge — Status badges & context indicators\n *\n * Organic Design System — smooth pill shapes.\n * Theme-aware: uses CSS variables for theme switching.\n */\nconst badgeVariants = cva(\n 'inline-flex items-center gap-2 text-caption font-bold uppercase tracking-wider transition-all duration-[400ms] ease-[cubic-bezier(0.25,1,0.5,1)]',\n {\n variants: {\n variant: {\n default:\n 'rounded-full border border-white/10 bg-white/[0.05] px-3 py-1.5 text-org-text-secondary',\n primary:\n 'rounded-full border border-indigo-400/30 bg-indigo-500/20 px-3 py-1.5 text-indigo-300',\n success:\n 'rounded-full border border-success/30 bg-success/10 px-3 py-1.5 text-success-light',\n warning:\n 'rounded-full border border-warning/30 bg-warning/10 px-3 py-1.5 text-warning-light',\n error:\n 'rounded-full border border-error/30 bg-error/10 px-3 py-1.5 text-error-light',\n info:\n 'rounded-full border border-info/30 bg-info/10 px-3 py-1.5 text-info-light',\n\n // ─── Flow status (from Brand Assets HTML) ──\n 'in-flow':\n 'rounded-full border border-indigo-500/30 bg-indigo-500/20 px-3 py-1.5 text-indigo-200 shadow-[0_0_15px_rgba(99,102,241,0.15)]',\n 'deep-work':\n 'rounded-full border border-fuchsia-500/20 bg-fuchsia-500/10 px-3 py-1.5 text-fuchsia-200',\n 'high-energy':\n 'rounded-full border border-emerald-500/20 bg-emerald-500/10 px-3 py-1.5 text-emerald-200',\n\n // ─── Cream Light theme ─────────────────────\n 'cream-default':\n 'rounded-full border border-neutral-200 bg-white/50 px-3 py-1 text-neutral-600 backdrop-blur-sm',\n 'cream-primary':\n 'rounded-full border border-primary/20 bg-primary/5 px-3 py-1 text-primary',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n },\n);\n\nexport interface BadgeProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof badgeVariants> {\n /** Animated pulse dot */\n dot?: boolean;\n /** Dot color class (e.g. 'bg-indigo-400') */\n dotColor?: string;\n}\n\nfunction Badge({ className, variant, dot, dotColor, children, ...props }: BadgeProps) {\n return (\n <div className={cn(badgeVariants({ variant }), className)} {...props}>\n {dot && (\n <span\n className={cn(\n 'h-1.5 w-1.5 rounded-full animate-pulse',\n dotColor || 'bg-current',\n variant === 'in-flow' && 'shadow-[0_0_8px_rgba(129,140,248,0.8)]',\n )}\n />\n )}\n {children}\n </div>\n );\n}\n\nexport { Badge, badgeVariants };\n","'use client';\n\nimport * as React from 'react';\nimport * as AvatarPrimitive from '@radix-ui/react-avatar';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../lib/utils';\n\n/**\n * Avatar — Geometric asymmetric avatars\n *\n * From the Brand Assets HTML: asymmetric shapes with gradient backgrounds,\n * geometric corner accents, status dot indicators.\n * Theme-aware: uses CSS variables for theme switching.\n */\nconst avatarVariants = cva(\n 'relative overflow-hidden border border-white/10 flex items-center justify-center',\n {\n variants: {\n shape: {\n circle: 'rounded-full',\n 'asym-1': 'rounded-asym-1',\n 'asym-2': 'rounded-asym-2',\n geo: 'rounded-geo',\n 'geo-inv': 'rounded-geo-inv',\n square: 'rounded-xl',\n },\n size: {\n sm: 'h-8 w-8',\n default: 'h-10 w-10',\n lg: 'h-16 w-16',\n xl: 'h-20 w-20',\n },\n },\n defaultVariants: {\n shape: 'circle',\n size: 'default',\n },\n },\n);\n\nexport interface AvatarProps\n extends React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Root>,\n VariantProps<typeof avatarVariants> {\n /** Online status indicator */\n status?: 'online' | 'offline' | 'away' | 'busy';\n /** Status dot color class override */\n statusColor?: string;\n /** Gradient background for fallback */\n gradient?: string;\n}\n\nconst Avatar = React.forwardRef<\n React.ComponentRef<typeof AvatarPrimitive.Root>,\n AvatarProps\n>(({ className, shape, size, status, statusColor, gradient, ...props }, ref) => (\n <div className=\"relative inline-flex\">\n <AvatarPrimitive.Root\n ref={ref}\n className={cn(\n avatarVariants({ shape, size }),\n gradient && `bg-gradient-to-br ${gradient}`,\n className,\n )}\n {...props}\n />\n {status && (\n <span\n className={cn(\n 'absolute -bottom-0.5 -right-0.5 rounded-full border-2 border-surface',\n size === 'sm' && 'h-2.5 w-2.5',\n size === 'default' && 'h-3 w-3',\n (size === 'lg' || size === 'xl') && 'h-3.5 w-3.5',\n statusColor ||\n (status === 'online' && 'bg-green-500'),\n status === 'offline' && 'bg-neutral-500',\n status === 'away' && 'bg-amber-500',\n status === 'busy' && 'bg-red-500',\n )}\n />\n )}\n {/* Geometric corner accent for lg/xl */}\n {(size === 'lg' || size === 'xl') && shape !== 'circle' && (\n <div className=\"absolute bottom-0 right-0 h-3 w-3 rotate-45 translate-x-1/2 translate-y-1/2 bg-primary-light\" />\n )}\n </div>\n));\nAvatar.displayName = 'Avatar';\n\nconst AvatarImage = React.forwardRef<\n React.ComponentRef<typeof AvatarPrimitive.Image>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Image>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Image\n ref={ref}\n className={cn('aspect-square h-full w-full object-cover', className)}\n {...props}\n />\n));\nAvatarImage.displayName = 'AvatarImage';\n\nconst AvatarFallback = React.forwardRef<\n React.ComponentRef<typeof AvatarPrimitive.Fallback>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Fallback>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Fallback\n ref={ref}\n className={cn(\n 'flex h-full w-full items-center justify-center text-sm font-medium text-white/90',\n className,\n )}\n {...props}\n />\n));\nAvatarFallback.displayName = 'AvatarFallback';\n\nexport { Avatar, AvatarImage, AvatarFallback, avatarVariants };\n","'use client';\n\nimport * as React from 'react';\nimport * as TooltipPrimitive from '@radix-ui/react-tooltip';\nimport { cn } from '../../lib/utils';\n\n/**\n * Tooltip — Organic glass tooltip\n *\n * Theme-aware: uses CSS variables for theme switching.\n * Squircle shape with glass backdrop.\n */\n\nconst TooltipProvider = TooltipPrimitive.Provider;\nconst Tooltip = TooltipPrimitive.Root;\nconst TooltipTrigger = TooltipPrimitive.Trigger;\n\nconst TooltipContent = React.forwardRef<\n React.ComponentRef<typeof TooltipPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(({ className, sideOffset = 6, ...props }, ref) => (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n 'z-50 max-w-[12rem] bg-white/[0.05] backdrop-blur-[40px] border border-white/10 rounded-xl px-2.5 py-1.5 text-[11px] leading-snug text-white/90 shadow-[0_24px_80px_-15px_rgba(0,0,0,0.5)] animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-1 data-[side=left]:slide-in-from-right-1 data-[side=right]:slide-in-from-left-1 data-[side=top]:slide-in-from-bottom-1',\n className,\n )}\n {...props}\n />\n </TooltipPrimitive.Portal>\n));\nTooltipContent.displayName = TooltipPrimitive.Content.displayName;\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };\n","import * as React from 'react';\nimport { cn } from '../../lib/utils';\n\n/**\n * Skeleton — Shimmer loading placeholder\n *\n * From the design system: bg-white/10 with a sliding gradient shimmer animation.\n */\n\nexport interface SkeletonProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Shape variant */\n variant?: 'rectangular' | 'circular' | 'rounded';\n}\n\nfunction Skeleton({ className, variant = 'rounded', ...props }: SkeletonProps) {\n return (\n <div\n className={cn(\n 'skeleton-shimmer',\n variant === 'circular' && 'rounded-full',\n variant === 'rounded' && 'rounded-xl',\n variant === 'rectangular' && 'rounded-none',\n className,\n )}\n {...props}\n />\n );\n}\n\n/**\n * SkeletonCard — Pre-built skeleton card from the design system\n */\nfunction SkeletonCard({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {\n return (\n <div className={cn('glass-panel space-y-6 p-6', className)} {...props}>\n <div className=\"flex items-center gap-5\">\n <Skeleton className=\"h-14 w-14 shrink-0\" variant=\"rounded\" />\n <div className=\"flex-1 space-y-2.5\">\n <Skeleton className=\"h-4 w-2/3\" />\n <Skeleton className=\"h-3 w-1/2 opacity-60\" />\n </div>\n </div>\n <div className=\"space-y-3 pt-2\">\n <Skeleton className=\"h-24 w-full rounded-xl\" />\n <div className=\"flex justify-between pt-1\">\n <Skeleton className=\"h-3 w-20 opacity-40\" />\n <Skeleton className=\"h-3 w-20 opacity-40\" />\n </div>\n </div>\n </div>\n );\n}\n\nexport { Skeleton, SkeletonCard };\n","'use client';\n\nimport * as React from 'react';\nimport * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area';\nimport { cn } from '../../lib/utils';\n\nfunction ScrollArea({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof ScrollAreaPrimitive.Root>) {\n return (\n <ScrollAreaPrimitive.Root\n data-slot=\"scroll-area\"\n className={cn('relative overflow-hidden', className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport className=\"h-full w-full rounded-[inherit]\">\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar />\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n );\n}\n\nfunction ScrollBar({\n className,\n orientation = 'vertical',\n ...props\n}: React.ComponentProps<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>) {\n return (\n <ScrollAreaPrimitive.ScrollAreaScrollbar\n data-slot=\"scroll-bar\"\n orientation={orientation}\n className={cn(\n 'flex touch-none select-none transition-colors',\n orientation === 'vertical' && 'h-full w-2.5 border-l border-l-transparent p-[1px]',\n orientation === 'horizontal' && 'h-2.5 flex-col border-t border-t-transparent p-[1px]',\n className,\n )}\n {...props}\n >\n <ScrollAreaPrimitive.ScrollAreaThumb className=\"relative flex-1 rounded-full bg-border\" />\n </ScrollAreaPrimitive.ScrollAreaScrollbar>\n );\n}\n\nexport { ScrollArea, ScrollBar };\n","// ─────────────────────────────────────────────\n// OrganifyProvider — Shared data context\n// ─────────────────────────────────────────────\n// Holds workspace, user, project data + API config\n// so that organify-ui components (WorkspaceSwitcher,\n// OrganifyNotifications, OrganifyChat, TaskDetailDialog,\n// CommentThread, etc.) can do internal API fetches\n// instead of receiving data via props.\n//\n// ALL API requests must go through:\n// useOrganifyGql(endpoint, query, vars) — for GraphQL\n// useOrganifyRest(endpoint, options) — for REST\n//\n// Never use raw fetch() directly.\n// ─────────────────────────────────────────────\n\n'use client';\n\nimport * as React from 'react';\n\n// ─── Types ──────────────────────────────────\n\nexport interface OrganifyWorkspace {\n id: string;\n name: string;\n slug: string;\n description?: string | null;\n avatarUrl?: string | null;\n plan?: { name: string } | null;\n _count?: {\n members?: number;\n teams?: number;\n invites?: number;\n };\n}\n\nexport interface OrganifyUser {\n id: string;\n name: string;\n email: string;\n avatarUrl?: string | null;\n role?: string;\n}\n\nexport interface OrganifyProject {\n id: string;\n name: string;\n slug: string;\n description?: string | null;\n type?: string;\n status?: string;\n}\n\nexport interface OrganifyApiConfig {\n /** Gateway base URL (e.g. http://localhost:4000) */\n gatewayUrl: string;\n /** JWT auth token (from cookie or auth state) */\n authToken?: string;\n /** Direct service URLs for WebSocket/subscription connections (bypass gateway) */\n services?: {\n /** Chat service (e.g. https://organify-chat-service.onrender.com) */\n chat?: string;\n /** Notifications service (e.g. https://organify-notifications-service.onrender.com) */\n notifications?: string;\n /** Projects service (e.g. https://organify-projects-service.onrender.com) */\n projects?: string;\n /** Workspaces service (e.g. https://modern-nikki-organify-studio-787ea453.koyeb.app) */\n workspaces?: string;\n };\n}\n\n// ─── Endpoint Types ─────────────────────────\n// Pre-configured endpoint keys for useOrganifyGql\n\nexport type GqlEndpoint = 'projects' | 'chat' | 'notifications' | 'workspaces';\nexport type RestEndpoint = 'auth' | 'users' | 'onboarding' | 'workspaces' | 'projects';\n\nexport interface OrganifyContextValue {\n // ─── API Configuration ────────────────\n api: OrganifyApiConfig;\n\n // Current workspace\n workspace: OrganifyWorkspace | null;\n workspaceLoading: boolean;\n\n // All available workspaces (for switcher)\n workspaces: OrganifyWorkspace[];\n workspacesLoading: boolean;\n\n // Current user\n user: OrganifyUser | null;\n\n // Current project (optional, set inside project routes)\n project: OrganifyProject | null;\n projectLoading: boolean;\n\n // Navigation\n navigate?: (path: string) => void;\n\n // Render helpers\n renderLink?: (props: {\n href: string;\n children: React.ReactNode;\n className?: string;\n onClick?: () => void;\n }) => React.ReactNode;\n\n // ─── Workspace Mutation Callbacks ─────\n // Called by internal components (WorkspaceSwitcher) to update parent state.\n // The host app provides these to keep its workspace state in sync.\n\n /** Called when workspaces list changes (create, update, delete) */\n onWorkspacesChange?: (workspaces: OrganifyWorkspace[]) => void;\n\n /** Called when active workspace should change (e.g. after create, switch) */\n onWorkspaceChange?: (workspace: OrganifyWorkspace | null) => void;\n}\n\n// ─── Context ────────────────────────────────\n\nconst OrganifyContext = React.createContext<OrganifyContextValue>({\n api: { gatewayUrl: '' },\n workspace: null,\n workspaceLoading: false,\n workspaces: [],\n workspacesLoading: false,\n user: null,\n project: null,\n projectLoading: false,\n});\n\n// ─── Hooks ──────────────────────────────────\n\nexport function useOrganify(): OrganifyContextValue {\n return React.useContext(OrganifyContext);\n}\n\n/** Access the API config (gatewayUrl, authToken, services) for internal fetches */\nexport function useOrganifyApi(): OrganifyApiConfig {\n const ctx = React.useContext(OrganifyContext);\n return ctx.api ?? { gatewayUrl: '' };\n}\n\n// ─── URL Resolution ─────────────────────────\n\n/**\n * Resolves the full URL for a GraphQL endpoint.\n *\n * Routing logic:\n * - 'projects' → gatewayUrl/api/graphql (via gateway proxy)\n * - 'chat' → gatewayUrl/api/graphql (via gateway proxy)\n * - 'notifications' → gatewayUrl/api/graphql (via gateway proxy)\n * - 'workspaces' → gatewayUrl/api/graphql (via gateway proxy)\n *\n * The gateway at port 4000 has a global `/api` prefix and proxies all\n * GraphQL endpoints through `/api/graphql/[subgraph]`:\n * - POST /api/graphql/workspaces → workspaces subgraph\n * - POST /api/graphql/projects → projects subgraph\n * - POST /api/graphql/chat → chat subgraph\n * - POST /api/graphql/notifications → notifications subgraph\n *\n * Also accepts legacy full paths like '/graphql/projects' or '/api/graphql'.\n */\nfunction resolveGqlUrl(\n endpoint: string,\n gatewayUrl: string,\n services?: OrganifyApiConfig['services'],\n): string {\n // Normalise: strip leading slash if present\n const ep = endpoint.replace(/^\\//, '');\n\n // Named endpoint keys → gateway proxy with /api prefix\n switch (ep) {\n case 'projects':\n return `${gatewayUrl}/api/graphql/projects`;\n case 'chat':\n return `${gatewayUrl}/api/graphql/chat`;\n case 'notifications':\n return `${gatewayUrl}/api/graphql/notifications`;\n case 'workspaces': {\n // Gateway proxy (primary) or direct service fallback\n return `${gatewayUrl}/api/graphql/workspaces`;\n }\n default:\n break;\n }\n\n // Legacy full paths — support both /graphql/* and /api/graphql/*\n if (ep.startsWith('graphql/')) {\n return `${gatewayUrl}/api/${ep}`;\n }\n if (ep.startsWith('api/graphql')) {\n return `${gatewayUrl}/${ep}`;\n }\n\n // Absolute URL passthrough (for services that need direct connection)\n if (ep.startsWith('http://') || ep.startsWith('https://')) {\n return ep;\n }\n\n // Fallback: attach to gateway with /api prefix\n return `${gatewayUrl}/api/${ep}`;\n}\n\n/**\n * Resolves the full URL for a REST endpoint.\n *\n * Routing logic:\n * - 'auth' → gatewayUrl/api/auth\n * - 'users' → gatewayUrl/api/users\n * - 'onboarding' → gatewayUrl/api/onboarding\n * - 'workspaces' → gatewayUrl/api/internal/workspaces\n * - 'projects' → gatewayUrl/api/internal/projects\n *\n * Also accepts full paths like '/api/auth/me'.\n */\nfunction resolveRestUrl(\n endpoint: string,\n path: string,\n gatewayUrl: string,\n): string {\n const p = path.replace(/^\\//, '');\n\n switch (endpoint) {\n case 'auth':\n return `${gatewayUrl}/api/auth/${p}`;\n case 'users':\n return `${gatewayUrl}/api/users/${p}`;\n case 'onboarding':\n return `${gatewayUrl}/api/onboarding/${p}`;\n case 'workspaces':\n return `${gatewayUrl}/api/internal/workspaces/${p}`;\n case 'projects':\n return `${gatewayUrl}/api/internal/projects/${p}`;\n default:\n break;\n }\n\n // Full path passthrough (e.g. '/api/auth/me')\n if (endpoint.startsWith('/')) {\n return `${gatewayUrl}${endpoint}`;\n }\n\n return `${gatewayUrl}/${endpoint}`;\n}\n\n// ─── Client-side Query Rate Limiter ─────────\n// Prevents runaway re-fetches from overwhelming the backend.\n// Deduplicates identical queries within a sliding window.\n\nconst GQL_RATE_LIMIT_WINDOW = 2000; // 2 seconds\nconst GQL_RATE_LIMIT_MAX = 5; // max 5 identical queries per window\n\n/** Global map: \"endpoint|queryHash|varsHash\" → timestamp[] */\nconst _gqlQueryLog = new Map<string, number[]>();\n\nfunction _gqlRateLimitKey(endpoint: string, query: string, variables?: Record<string, any>): string {\n // Fast hash: first 80 chars of the query + stringified vars (or empty)\n const qKey = query.replace(/\\s+/g, ' ').slice(0, 80);\n const vKey = variables ? JSON.stringify(variables) : '';\n return `${endpoint}|${qKey}|${vKey}`;\n}\n\nfunction _gqlCheckRateLimit(key: string): boolean {\n const now = Date.now();\n const times = _gqlQueryLog.get(key) ?? [];\n // Evict old entries\n const recent = times.filter((t) => now - t < GQL_RATE_LIMIT_WINDOW);\n if (recent.length >= GQL_RATE_LIMIT_MAX) {\n _gqlQueryLog.set(key, recent);\n return false; // blocked\n }\n recent.push(now);\n _gqlQueryLog.set(key, recent);\n return true; // allowed\n}\n\nfunction readAuthTokenCookie(cookieName = 'auth_token'): string | null {\n if (typeof document === 'undefined') return null;\n const match = document.cookie\n .split(';')\n .map((s) => s.trim())\n .find((s) => s.startsWith(`${cookieName}=`));\n if (!match) return null;\n return decodeURIComponent(match.split('=')[1]);\n}\n\n// ─── Centralized GraphQL Client ─────────────\n\n/**\n * Universal GraphQL fetch helper — ALL GraphQL requests go through this.\n *\n * Includes client-side rate limiting: identical queries are capped at\n * 5 per 2-second window. If exceeded, the call throws to prevent\n * runaway loops from overwhelming the backend.\n *\n * Usage:\n * const gql = useOrganifyGql();\n * const data = await gql('projects', CREATE_TASK_MUTATION, { input });\n * const data = await gql('chat', GET_ROOMS_QUERY, { workspaceId });\n * const data = await gql('workspaces', GET_WORKSPACES_QUERY);\n * const data = await gql('notifications', GET_NOTIFICATIONS_QUERY, { filter });\n */\nexport function useOrganifyGql() {\n const api = useOrganifyApi();\n const gatewayUrl = api?.gatewayUrl ?? '';\n const authToken = api?.authToken;\n const services = api?.services;\n\n return React.useCallback(\n async <T = any>(\n endpoint: GqlEndpoint | string,\n query: string,\n variables?: Record<string, any>,\n ): Promise<T> => {\n // ─── Rate limit check ──\n const rlKey = _gqlRateLimitKey(endpoint, query, variables);\n if (!_gqlCheckRateLimit(rlKey)) {\n console.warn(\n `[useOrganifyGql] Rate limited — ${GQL_RATE_LIMIT_MAX} identical requests in ${GQL_RATE_LIMIT_WINDOW}ms window`,\n { endpoint, variables },\n );\n throw new Error('Rate limited: too many identical requests');\n }\n\n const url = resolveGqlUrl(endpoint, gatewayUrl, services);\n const token = authToken || readAuthTokenCookie();\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n };\n if (token) headers['Authorization'] = `Bearer ${token}`;\n\n console.log(\n `[useOrganifyGql] ${endpoint} ${token ? '✓ token' : '⚠ no token'}`,\n Object.keys(variables || {}).length > 0 ? `vars: ${JSON.stringify(variables)}` : '',\n );\n\n const res = await fetch(url, {\n method: 'POST',\n headers,\n credentials: 'include',\n body: JSON.stringify({ query, variables }),\n });\n\n if (!res.ok) {\n const json = await res.json();\n const errorMsg = json.errors?.[0]?.message || json.error || `HTTP ${res.status}`;\n const originalError = json.errors?.[0]?.extensions?.originalError?.message;\n console.error(`[useOrganifyGql] ${res.status} error on ${endpoint}:`, {\n message: errorMsg,\n originalError,\n errors: json.errors,\n });\n throw new Error(`HTTP ${res.status}: ${errorMsg}${originalError ? ` (${originalError})` : ''}`);\n }\n const json = await res.json();\n if (json.errors?.length) {\n const errorMsg = json.errors[0].message;\n const originalError = json.errors[0]?.extensions?.originalError?.message;\n console.error(`[useOrganifyGql] GraphQL error on ${endpoint}:`, {\n message: errorMsg,\n originalError,\n errors: json.errors,\n });\n throw new Error(`${errorMsg}${originalError ? ` (${originalError})` : ''}`);\n }\n return json.data;\n },\n [gatewayUrl, authToken, services],\n );\n}\n\n// ─── Centralized REST Client ────────────────\n\n/**\n * Universal REST fetch helper — ALL REST requests go through this.\n *\n * Usage:\n * const rest = useOrganifyRest();\n * const user = await rest('auth', 'me');\n * const data = await rest('auth', 'login', { method: 'POST', body: { email, password } });\n * const ws = await rest('workspaces', '');\n */\nexport function useOrganifyRest() {\n const api = useOrganifyApi();\n const gatewayUrl = api?.gatewayUrl ?? '';\n const authToken = api?.authToken;\n\n return React.useCallback(\n async <T = any>(\n endpoint: RestEndpoint | string,\n path: string = '',\n options?: {\n method?: string;\n body?: any;\n headers?: Record<string, string>;\n },\n ): Promise<T> => {\n const url = resolveRestUrl(endpoint, path, gatewayUrl);\n const method = options?.method ?? 'GET';\n const token = authToken || readAuthTokenCookie();\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n ...(options?.headers ?? {}),\n };\n if (token) headers['Authorization'] = `Bearer ${token}`;\n\n const fetchOpts: RequestInit = {\n method,\n headers,\n credentials: 'include',\n };\n if (options?.body && method !== 'GET') {\n fetchOpts.body = JSON.stringify(options.body);\n }\n\n const res = await fetch(url, fetchOpts);\n if (!res.ok) throw new Error(`HTTP ${res.status}`);\n const json = await res.json();\n return json.data ?? json;\n },\n [gatewayUrl, authToken],\n );\n}\n\n// ─── Data Hooks ─────────────────────────────\n\nexport function useOrganifyWorkspace() {\n const ctx = React.useContext(OrganifyContext);\n return {\n workspace: ctx.workspace,\n loading: ctx.workspaceLoading,\n workspaces: ctx.workspaces,\n workspacesLoading: ctx.workspacesLoading,\n onWorkspacesChange: ctx.onWorkspacesChange,\n onWorkspaceChange: ctx.onWorkspaceChange,\n };\n}\n\nexport function useOrganifyUser() {\n const ctx = React.useContext(OrganifyContext);\n return ctx.user;\n}\n\nexport function useOrganifyProject() {\n const ctx = React.useContext(OrganifyContext);\n return {\n project: ctx.project,\n loading: ctx.projectLoading,\n };\n}\n\nexport function useOrganifyNavigation() {\n const ctx = React.useContext(OrganifyContext);\n return {\n navigate: ctx.navigate,\n renderLink: ctx.renderLink,\n };\n}\n\n// ─── Provider ───────────────────────────────\n\nexport interface OrganifyProviderProps {\n children: React.ReactNode;\n value: Partial<OrganifyContextValue> & { api: OrganifyApiConfig };\n}\n\nfunction OrganifyProvider({ children, value }: OrganifyProviderProps) {\n const merged = React.useMemo<OrganifyContextValue>(\n () => ({\n api: value.api,\n workspace: value.workspace ?? null,\n workspaceLoading: value.workspaceLoading ?? false,\n workspaces: value.workspaces ?? [],\n workspacesLoading: value.workspacesLoading ?? false,\n user: value.user ?? null,\n project: value.project ?? null,\n projectLoading: value.projectLoading ?? false,\n navigate: value.navigate,\n renderLink: value.renderLink,\n onWorkspacesChange: value.onWorkspacesChange,\n onWorkspaceChange: value.onWorkspaceChange,\n }),\n [\n value.api,\n value.workspace,\n value.workspaceLoading,\n value.workspaces,\n value.workspacesLoading,\n value.user,\n value.project,\n value.projectLoading,\n value.navigate,\n value.renderLink,\n value.onWorkspacesChange,\n value.onWorkspaceChange,\n ],\n );\n\n return (\n <OrganifyContext.Provider value={merged}>\n {children}\n </OrganifyContext.Provider>\n );\n}\n\nOrganifyProvider.displayName = 'OrganifyProvider';\n\nexport { OrganifyProvider, OrganifyContext };\n"]}
@@ -1,5 +1,5 @@
1
- export { ChatMessages, ChatSidebar, CreateRoomDialog, MOCK_PROJECTS, MOCK_USERS, MentionPopover, MessageBubble, MessageInput, OrganifyChat, RoomManagementPanel, TypingIndicatorMock, generateAutoReplies, getMockMentionOptions, getRoomPermissions, typingIndicator, useChat } from '../../chunk-INKNHHKT.js';
2
- import '../../chunk-ERFN2H75.js';
3
- import '../../chunk-HY7M3VZM.js';
1
+ export { ChatMessages, ChatSidebar, CreateRoomDialog, MOCK_PROJECTS, MOCK_USERS, MentionPopover, MessageBubble, MessageInput, OrganifyChat, RoomManagementPanel, TypingIndicatorMock, generateAutoReplies, getMockMentionOptions, getRoomPermissions, typingIndicator, useChat } from '../../chunk-GQZMW7XN.js';
2
+ import '../../chunk-VHQZS77G.js';
3
+ import '../../chunk-MZKEDV5W.js';
4
4
  //# sourceMappingURL=index.js.map
5
5
  //# sourceMappingURL=index.js.map
@@ -1,5 +1,5 @@
1
- export { NotificationBell, NotificationItem, NotificationList, OrganifyNotifications, PresenceAvatarStack, PresenceIndicator, useNotifications, usePresence } from '../../chunk-I47BBGVI.js';
2
- import '../../chunk-ERFN2H75.js';
3
- import '../../chunk-HY7M3VZM.js';
1
+ export { NotificationBell, NotificationItem, NotificationList, OrganifyNotifications, PresenceAvatarStack, PresenceIndicator, useNotifications, usePresence } from '../../chunk-A2H2TBSV.js';
2
+ import '../../chunk-VHQZS77G.js';
3
+ import '../../chunk-MZKEDV5W.js';
4
4
  //# sourceMappingURL=index.js.map
5
5
  //# sourceMappingURL=index.js.map