@prosophia/lab-techy 0.0.3 → 0.0.5

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.
@@ -0,0 +1,296 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import React$1 from 'react';
3
+ import { S as SiteSettings$1, P as ProsophiaConfig } from './index-CSdV51Jq.js';
4
+ export { a as SiteConfig, T as ThemeConfig } from './index-CSdV51Jq.js';
5
+
6
+ interface FooterLink {
7
+ label: string;
8
+ url: string;
9
+ }
10
+ interface SocialLink {
11
+ platform: 'twitter' | 'linkedin' | 'github' | 'scholar' | 'orcid' | 'website' | 'email' | 'youtube' | 'instagram';
12
+ url: string;
13
+ }
14
+ interface FooterData$1 {
15
+ labName: string;
16
+ footerText?: string;
17
+ socialLinks?: SocialLink[];
18
+ footerLinks?: FooterLink[];
19
+ email?: string;
20
+ address?: string;
21
+ }
22
+ interface FooterProps {
23
+ footerData?: FooterData$1 | null;
24
+ }
25
+ declare function Footer({ footerData }: FooterProps): react_jsx_runtime.JSX.Element;
26
+
27
+ interface NavItem {
28
+ label: string;
29
+ href: string;
30
+ }
31
+ interface SanityImage {
32
+ _type: 'image';
33
+ asset: {
34
+ _ref: string;
35
+ _type: 'reference';
36
+ };
37
+ }
38
+ interface NavigationData$1 {
39
+ labName: string;
40
+ logo?: SanityImage;
41
+ mainNavigation?: NavItem[];
42
+ }
43
+ interface HeaderProps {
44
+ navigationData?: NavigationData$1 | null;
45
+ }
46
+ declare function Header({ navigationData }: HeaderProps): react_jsx_runtime.JSX.Element;
47
+
48
+ declare function ThemeToggle(): react_jsx_runtime.JSX.Element;
49
+
50
+ type SiteSettings = {
51
+ labName?: string;
52
+ labNameAccent?: string;
53
+ footerText?: string;
54
+ showPrivacyPolicy?: boolean;
55
+ privacyPolicyUrl?: string;
56
+ showTerms?: boolean;
57
+ termsUrl?: string;
58
+ };
59
+ type ClientLayoutProps = {
60
+ children: React$1.ReactNode;
61
+ settings: SiteSettings;
62
+ };
63
+ declare function ClientLayout({ children, settings }: ClientLayoutProps): react_jsx_runtime.JSX.Element;
64
+
65
+ interface NavigationData {
66
+ labName: string;
67
+ logo?: {
68
+ _type: 'image';
69
+ asset: {
70
+ _ref: string;
71
+ _type: 'reference';
72
+ };
73
+ };
74
+ mainNavigation?: Array<{
75
+ label: string;
76
+ href: string;
77
+ }>;
78
+ }
79
+ interface FooterData {
80
+ labName: string;
81
+ footerText?: string;
82
+ socialLinks?: Array<{
83
+ platform: 'twitter' | 'linkedin' | 'github' | 'scholar' | 'orcid' | 'website' | 'email' | 'youtube' | 'instagram';
84
+ url: string;
85
+ }>;
86
+ footerLinks?: Array<{
87
+ label: string;
88
+ url: string;
89
+ }>;
90
+ email?: string;
91
+ address?: string;
92
+ }
93
+ interface HomePageProps {
94
+ children?: React.ReactNode;
95
+ settings?: SiteSettings$1 | null;
96
+ navigationData?: NavigationData | null;
97
+ footerData?: FooterData | null;
98
+ header?: React.ReactNode;
99
+ footer?: React.ReactNode;
100
+ }
101
+ /**
102
+ * Main HomePage wrapper for lab-techy template
103
+ * Provides consistent header/footer with customizable main content
104
+ */
105
+ declare function HomePage({ children, settings, navigationData, footerData, header, footer, }: HomePageProps): react_jsx_runtime.JSX.Element;
106
+
107
+ /**
108
+ * Define configuration for your lab website
109
+ * @param config - The site configuration object
110
+ * @returns The configuration object (passthrough for type safety)
111
+ */
112
+ declare function defineConfig(config: ProsophiaConfig): ProsophiaConfig;
113
+
114
+ declare const easeOutExpo: [number, number, number, number];
115
+ declare const springStiff: {
116
+ type: string;
117
+ mass: number;
118
+ stiffness: number;
119
+ damping: number;
120
+ };
121
+ declare const timing: {
122
+ quick: number;
123
+ standard: number;
124
+ ambient: number;
125
+ };
126
+ declare const fadeInUp: {
127
+ hidden: {
128
+ opacity: number;
129
+ y: number;
130
+ };
131
+ visible: {
132
+ opacity: number;
133
+ y: number;
134
+ transition: {
135
+ duration: number;
136
+ ease: [number, number, number, number];
137
+ };
138
+ };
139
+ };
140
+ declare const fadeInLeft: {
141
+ hidden: {
142
+ opacity: number;
143
+ x: number;
144
+ };
145
+ visible: {
146
+ opacity: number;
147
+ x: number;
148
+ transition: {
149
+ duration: number;
150
+ ease: [number, number, number, number];
151
+ };
152
+ };
153
+ };
154
+ declare const fadeInRight: {
155
+ hidden: {
156
+ opacity: number;
157
+ x: number;
158
+ };
159
+ visible: {
160
+ opacity: number;
161
+ x: number;
162
+ transition: {
163
+ duration: number;
164
+ ease: [number, number, number, number];
165
+ };
166
+ };
167
+ };
168
+ declare const scaleUp: {
169
+ hidden: {
170
+ opacity: number;
171
+ scale: number;
172
+ };
173
+ visible: {
174
+ opacity: number;
175
+ scale: number;
176
+ transition: {
177
+ duration: number;
178
+ ease: [number, number, number, number];
179
+ };
180
+ };
181
+ };
182
+ declare const staggerContainer: {
183
+ hidden: {
184
+ opacity: number;
185
+ };
186
+ visible: {
187
+ opacity: number;
188
+ transition: {
189
+ staggerChildren: number;
190
+ delayChildren: number;
191
+ };
192
+ };
193
+ };
194
+ declare const staggerItem: {
195
+ hidden: {
196
+ opacity: number;
197
+ y: number;
198
+ };
199
+ visible: {
200
+ opacity: number;
201
+ y: number;
202
+ transition: {
203
+ duration: number;
204
+ ease: [number, number, number, number];
205
+ };
206
+ };
207
+ };
208
+ declare const cardHover: {
209
+ rest: {
210
+ y: number;
211
+ boxShadow: string;
212
+ transition: {
213
+ duration: number;
214
+ ease: [number, number, number, number];
215
+ };
216
+ };
217
+ hover: {
218
+ y: number;
219
+ boxShadow: string;
220
+ transition: {
221
+ duration: number;
222
+ ease: [number, number, number, number];
223
+ };
224
+ };
225
+ };
226
+ declare const imageZoom: {
227
+ rest: {
228
+ scale: number;
229
+ transition: {
230
+ duration: number;
231
+ ease: [number, number, number, number];
232
+ };
233
+ };
234
+ hover: {
235
+ scale: number;
236
+ transition: {
237
+ duration: number;
238
+ ease: [number, number, number, number];
239
+ };
240
+ };
241
+ };
242
+ declare const buttonPress: {
243
+ tap: {
244
+ scale: number;
245
+ };
246
+ hover: {
247
+ scale: number;
248
+ };
249
+ };
250
+ declare const pageTransition: {
251
+ hidden: {
252
+ opacity: number;
253
+ };
254
+ visible: {
255
+ opacity: number;
256
+ transition: {
257
+ duration: number;
258
+ ease: [number, number, number, number];
259
+ };
260
+ };
261
+ exit: {
262
+ opacity: number;
263
+ transition: {
264
+ duration: number;
265
+ ease: [number, number, number, number];
266
+ };
267
+ };
268
+ };
269
+ declare const revealRight: {
270
+ hidden: {
271
+ clipPath: string;
272
+ };
273
+ visible: {
274
+ clipPath: string;
275
+ transition: {
276
+ duration: number;
277
+ ease: [number, number, number, number];
278
+ };
279
+ };
280
+ };
281
+ declare const blurFade: {
282
+ hidden: {
283
+ opacity: number;
284
+ filter: string;
285
+ };
286
+ visible: {
287
+ opacity: number;
288
+ filter: string;
289
+ transition: {
290
+ duration: number;
291
+ ease: [number, number, number, number];
292
+ };
293
+ };
294
+ };
295
+
296
+ export { ClientLayout, Footer, Header, HomePage, type HomePageProps, ProsophiaConfig, SiteSettings$1 as SiteSettings, ThemeToggle, blurFade, buttonPress, cardHover, defineConfig, easeOutExpo, fadeInLeft, fadeInRight, fadeInUp, imageZoom, pageTransition, revealRight, scaleUp, springStiff, staggerContainer, staggerItem, timing };
package/dist/index.js CHANGED
@@ -30,9 +30,27 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
30
30
  // src/index.ts
31
31
  var index_exports = {};
32
32
  __export(index_exports, {
33
+ ClientLayout: () => ClientLayout,
33
34
  Footer: () => Footer,
34
35
  Header: () => Header,
35
- ThemeToggle: () => ThemeToggle
36
+ HomePage: () => HomePage,
37
+ ThemeToggle: () => ThemeToggle,
38
+ blurFade: () => blurFade,
39
+ buttonPress: () => buttonPress,
40
+ cardHover: () => cardHover,
41
+ defineConfig: () => defineConfig,
42
+ easeOutExpo: () => easeOutExpo,
43
+ fadeInLeft: () => fadeInLeft,
44
+ fadeInRight: () => fadeInRight,
45
+ fadeInUp: () => fadeInUp,
46
+ imageZoom: () => imageZoom,
47
+ pageTransition: () => pageTransition,
48
+ revealRight: () => revealRight,
49
+ scaleUp: () => scaleUp,
50
+ springStiff: () => springStiff,
51
+ staggerContainer: () => staggerContainer,
52
+ staggerItem: () => staggerItem,
53
+ timing: () => timing
36
54
  });
37
55
  module.exports = __toCommonJS(index_exports);
38
56
 
@@ -149,11 +167,14 @@ var import_Header = __toESM(require("./Header.module.css"));
149
167
 
150
168
  // src/components/ThemeToggle.tsx
151
169
  var import_framer_motion2 = require("framer-motion");
152
- var import_ThemeContext = require("@/context/ThemeContext");
170
+ var import_next_themes = require("next-themes");
153
171
  var import_ThemeToggle = __toESM(require("./ThemeToggle.module.css"));
154
172
  var import_jsx_runtime2 = require("react/jsx-runtime");
155
173
  function ThemeToggle() {
156
- const { theme, toggleTheme } = (0, import_ThemeContext.useTheme)();
174
+ const { resolvedTheme, setTheme } = (0, import_next_themes.useTheme)();
175
+ const toggleTheme = () => {
176
+ setTheme(resolvedTheme === "light" ? "dark" : "light");
177
+ };
157
178
  return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
158
179
  import_framer_motion2.motion.button,
159
180
  {
@@ -161,8 +182,8 @@ function ThemeToggle() {
161
182
  onClick: toggleTheme,
162
183
  whileHover: { scale: 1.05 },
163
184
  whileTap: { scale: 0.95 },
164
- "aria-label": `Switch to ${theme === "light" ? "dark" : "light"} mode`,
165
- children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { className: "material-symbols-outlined", children: theme === "light" ? "dark_mode" : "light_mode" })
185
+ "aria-label": `Switch to ${resolvedTheme === "light" ? "dark" : "light"} mode`,
186
+ children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { className: "material-symbols-outlined", children: resolvedTheme === "light" ? "dark_mode" : "light_mode" })
166
187
  }
167
188
  );
168
189
  }
@@ -222,9 +243,251 @@ function Header({ navigationData }) {
222
243
  }
223
244
  );
224
245
  }
246
+
247
+ // src/components/ClientLayout.tsx
248
+ var import_react = require("react");
249
+ var import_next_themes2 = require("next-themes");
250
+ var import_jsx_runtime4 = require("react/jsx-runtime");
251
+ function ThemeBodySync() {
252
+ const { resolvedTheme } = (0, import_next_themes2.useTheme)();
253
+ (0, import_react.useEffect)(() => {
254
+ if (resolvedTheme === "dark") {
255
+ document.body.classList.add("dark-mode");
256
+ document.body.classList.remove("light-mode");
257
+ } else {
258
+ document.body.classList.add("light-mode");
259
+ document.body.classList.remove("dark-mode");
260
+ }
261
+ }, [resolvedTheme]);
262
+ return null;
263
+ }
264
+ function ClientLayout({ children, settings }) {
265
+ const navigationData = {
266
+ labName: settings.labName || "Prosophia Research Lab"
267
+ };
268
+ const footerData = {
269
+ labName: settings.labName || "Prosophia Research Lab",
270
+ footerText: settings.footerText
271
+ };
272
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_next_themes2.ThemeProvider, { attribute: "class", defaultTheme: "light", enableSystem: false, children: [
273
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(ThemeBodySync, {}),
274
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "pageWrapper", children: [
275
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Header, { navigationData }),
276
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("main", { children }),
277
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Footer, { footerData })
278
+ ] })
279
+ ] });
280
+ }
281
+
282
+ // src/components/HomePage.tsx
283
+ var import_jsx_runtime5 = require("react/jsx-runtime");
284
+ function HomePage({
285
+ children,
286
+ settings = null,
287
+ navigationData,
288
+ footerData,
289
+ header,
290
+ footer
291
+ }) {
292
+ const navData = navigationData ?? (settings ? {
293
+ labName: settings.labName || "Research Lab"
294
+ } : void 0);
295
+ const ftData = footerData ?? (settings ? {
296
+ labName: settings.labName || "Research Lab",
297
+ footerText: settings.footerText
298
+ } : void 0);
299
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_jsx_runtime5.Fragment, { children: [
300
+ header ?? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Header, { navigationData: navData }),
301
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("main", { children }),
302
+ footer ?? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Footer, { footerData: ftData })
303
+ ] });
304
+ }
305
+
306
+ // src/config.ts
307
+ function defineConfig(config) {
308
+ return config;
309
+ }
310
+
311
+ // src/lib/motion.ts
312
+ var easeOutExpo = [0.16, 1, 0.3, 1];
313
+ var springStiff = {
314
+ type: "spring",
315
+ mass: 1,
316
+ stiffness: 100,
317
+ damping: 15
318
+ };
319
+ var timing = {
320
+ quick: 0.15,
321
+ standard: 0.35,
322
+ ambient: 0.8
323
+ };
324
+ var fadeInUp = {
325
+ hidden: { opacity: 0, y: 20 },
326
+ visible: {
327
+ opacity: 1,
328
+ y: 0,
329
+ transition: {
330
+ duration: timing.standard,
331
+ ease: easeOutExpo
332
+ }
333
+ }
334
+ };
335
+ var fadeInLeft = {
336
+ hidden: { opacity: 0, x: -20 },
337
+ visible: {
338
+ opacity: 1,
339
+ x: 0,
340
+ transition: {
341
+ duration: timing.standard,
342
+ ease: easeOutExpo
343
+ }
344
+ }
345
+ };
346
+ var fadeInRight = {
347
+ hidden: { opacity: 0, x: 20 },
348
+ visible: {
349
+ opacity: 1,
350
+ x: 0,
351
+ transition: {
352
+ duration: timing.standard,
353
+ ease: easeOutExpo
354
+ }
355
+ }
356
+ };
357
+ var scaleUp = {
358
+ hidden: { opacity: 0, scale: 0.95 },
359
+ visible: {
360
+ opacity: 1,
361
+ scale: 1,
362
+ transition: {
363
+ duration: timing.standard,
364
+ ease: easeOutExpo
365
+ }
366
+ }
367
+ };
368
+ var staggerContainer = {
369
+ hidden: { opacity: 0 },
370
+ visible: {
371
+ opacity: 1,
372
+ transition: {
373
+ staggerChildren: 0.05,
374
+ delayChildren: 0.1
375
+ }
376
+ }
377
+ };
378
+ var staggerItem = {
379
+ hidden: { opacity: 0, y: 20 },
380
+ visible: {
381
+ opacity: 1,
382
+ y: 0,
383
+ transition: {
384
+ duration: timing.standard,
385
+ ease: easeOutExpo
386
+ }
387
+ }
388
+ };
389
+ var cardHover = {
390
+ rest: {
391
+ y: 0,
392
+ boxShadow: "0 1px 2px 0 rgb(0 0 0 / 0.05)",
393
+ transition: {
394
+ duration: timing.quick,
395
+ ease: easeOutExpo
396
+ }
397
+ },
398
+ hover: {
399
+ y: -4,
400
+ boxShadow: "0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)",
401
+ transition: {
402
+ duration: timing.quick,
403
+ ease: easeOutExpo
404
+ }
405
+ }
406
+ };
407
+ var imageZoom = {
408
+ rest: {
409
+ scale: 1,
410
+ transition: {
411
+ duration: timing.ambient,
412
+ ease: easeOutExpo
413
+ }
414
+ },
415
+ hover: {
416
+ scale: 1.05,
417
+ transition: {
418
+ duration: timing.ambient,
419
+ ease: easeOutExpo
420
+ }
421
+ }
422
+ };
423
+ var buttonPress = {
424
+ tap: { scale: 0.95 },
425
+ hover: { scale: 1.02 }
426
+ };
427
+ var pageTransition = {
428
+ hidden: { opacity: 0 },
429
+ visible: {
430
+ opacity: 1,
431
+ transition: {
432
+ duration: timing.standard,
433
+ ease: easeOutExpo
434
+ }
435
+ },
436
+ exit: {
437
+ opacity: 0,
438
+ transition: {
439
+ duration: timing.quick,
440
+ ease: easeOutExpo
441
+ }
442
+ }
443
+ };
444
+ var revealRight = {
445
+ hidden: {
446
+ clipPath: "inset(0 100% 0 0)"
447
+ },
448
+ visible: {
449
+ clipPath: "inset(0 0% 0 0)",
450
+ transition: {
451
+ duration: timing.ambient,
452
+ ease: easeOutExpo
453
+ }
454
+ }
455
+ };
456
+ var blurFade = {
457
+ hidden: {
458
+ opacity: 0,
459
+ filter: "blur(10px)"
460
+ },
461
+ visible: {
462
+ opacity: 1,
463
+ filter: "blur(0px)",
464
+ transition: {
465
+ duration: timing.standard,
466
+ ease: easeOutExpo
467
+ }
468
+ }
469
+ };
225
470
  // Annotate the CommonJS export names for ESM import in node:
226
471
  0 && (module.exports = {
472
+ ClientLayout,
227
473
  Footer,
228
474
  Header,
229
- ThemeToggle
475
+ HomePage,
476
+ ThemeToggle,
477
+ blurFade,
478
+ buttonPress,
479
+ cardHover,
480
+ defineConfig,
481
+ easeOutExpo,
482
+ fadeInLeft,
483
+ fadeInRight,
484
+ fadeInUp,
485
+ imageZoom,
486
+ pageTransition,
487
+ revealRight,
488
+ scaleUp,
489
+ springStiff,
490
+ staggerContainer,
491
+ staggerItem,
492
+ timing
230
493
  });