@opensite/ui 0.1.3 → 0.1.4

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 (101) hide show
  1. package/dist/components.cjs +1501 -0
  2. package/dist/components.cjs.map +1 -1
  3. package/dist/components.d.cts +13 -0
  4. package/dist/components.d.ts +13 -0
  5. package/dist/components.js +1489 -1
  6. package/dist/components.js.map +1 -1
  7. package/dist/footer-animated-social.cjs +272 -0
  8. package/dist/footer-animated-social.cjs.map +1 -0
  9. package/dist/footer-animated-social.d.cts +41 -0
  10. package/dist/footer-animated-social.d.ts +41 -0
  11. package/dist/footer-animated-social.js +250 -0
  12. package/dist/footer-animated-social.js.map +1 -0
  13. package/dist/footer-background-card.cjs +149 -0
  14. package/dist/footer-background-card.cjs.map +1 -0
  15. package/dist/footer-background-card.d.cts +74 -0
  16. package/dist/footer-background-card.d.ts +74 -0
  17. package/dist/footer-background-card.js +147 -0
  18. package/dist/footer-background-card.js.map +1 -0
  19. package/dist/footer-brand-description.cjs +244 -0
  20. package/dist/footer-brand-description.cjs.map +1 -0
  21. package/dist/footer-brand-description.d.cts +65 -0
  22. package/dist/footer-brand-description.d.ts +65 -0
  23. package/dist/footer-brand-description.js +222 -0
  24. package/dist/footer-brand-description.js.map +1 -0
  25. package/dist/footer-contact-card.cjs +238 -0
  26. package/dist/footer-contact-card.cjs.map +1 -0
  27. package/dist/footer-contact-card.d.cts +65 -0
  28. package/dist/footer-contact-card.d.ts +65 -0
  29. package/dist/footer-contact-card.js +216 -0
  30. package/dist/footer-contact-card.js.map +1 -0
  31. package/dist/footer-cta-banner.cjs +282 -0
  32. package/dist/footer-cta-banner.cjs.map +1 -0
  33. package/dist/footer-cta-banner.d.cts +77 -0
  34. package/dist/footer-cta-banner.d.ts +77 -0
  35. package/dist/footer-cta-banner.js +260 -0
  36. package/dist/footer-cta-banner.js.map +1 -0
  37. package/dist/footer-cta-social.cjs +221 -0
  38. package/dist/footer-cta-social.cjs.map +1 -0
  39. package/dist/footer-cta-social.d.cts +45 -0
  40. package/dist/footer-cta-social.d.ts +45 -0
  41. package/dist/footer-cta-social.js +199 -0
  42. package/dist/footer-cta-social.js.map +1 -0
  43. package/dist/footer-links-grid.cjs +119 -0
  44. package/dist/footer-links-grid.cjs.map +1 -0
  45. package/dist/footer-links-grid.d.cts +54 -0
  46. package/dist/footer-links-grid.d.ts +54 -0
  47. package/dist/footer-links-grid.js +117 -0
  48. package/dist/footer-links-grid.js.map +1 -0
  49. package/dist/footer-nav-social.cjs +273 -0
  50. package/dist/footer-nav-social.cjs.map +1 -0
  51. package/dist/footer-nav-social.d.cts +72 -0
  52. package/dist/footer-nav-social.d.ts +72 -0
  53. package/dist/footer-nav-social.js +251 -0
  54. package/dist/footer-nav-social.js.map +1 -0
  55. package/dist/footer-newsletter-grid.cjs +271 -0
  56. package/dist/footer-newsletter-grid.cjs.map +1 -0
  57. package/dist/footer-newsletter-grid.d.cts +74 -0
  58. package/dist/footer-newsletter-grid.d.ts +74 -0
  59. package/dist/footer-newsletter-grid.js +249 -0
  60. package/dist/footer-newsletter-grid.js.map +1 -0
  61. package/dist/footer-newsletter-minimal.cjs +271 -0
  62. package/dist/footer-newsletter-minimal.cjs.map +1 -0
  63. package/dist/footer-newsletter-minimal.d.cts +57 -0
  64. package/dist/footer-newsletter-minimal.d.ts +57 -0
  65. package/dist/footer-newsletter-minimal.js +249 -0
  66. package/dist/footer-newsletter-minimal.js.map +1 -0
  67. package/dist/footer-simple-centered.cjs +101 -0
  68. package/dist/footer-simple-centered.cjs.map +1 -0
  69. package/dist/footer-simple-centered.d.cts +52 -0
  70. package/dist/footer-simple-centered.d.ts +52 -0
  71. package/dist/footer-simple-centered.js +99 -0
  72. package/dist/footer-simple-centered.js.map +1 -0
  73. package/dist/footer-social-apps.cjs +247 -0
  74. package/dist/footer-social-apps.cjs.map +1 -0
  75. package/dist/footer-social-apps.d.cts +75 -0
  76. package/dist/footer-social-apps.d.ts +75 -0
  77. package/dist/footer-social-apps.js +225 -0
  78. package/dist/footer-social-apps.js.map +1 -0
  79. package/dist/footer-social-newsletter.cjs +267 -0
  80. package/dist/footer-social-newsletter.cjs.map +1 -0
  81. package/dist/footer-social-newsletter.d.cts +68 -0
  82. package/dist/footer-social-newsletter.d.ts +68 -0
  83. package/dist/footer-social-newsletter.js +245 -0
  84. package/dist/footer-social-newsletter.js.map +1 -0
  85. package/dist/index.cjs +1501 -0
  86. package/dist/index.cjs.map +1 -1
  87. package/dist/index.d.cts +13 -0
  88. package/dist/index.d.ts +13 -0
  89. package/dist/index.js +1489 -1
  90. package/dist/index.js.map +1 -1
  91. package/dist/registry.cjs +1971 -1
  92. package/dist/registry.cjs.map +1 -1
  93. package/dist/registry.js +1971 -1
  94. package/dist/registry.js.map +1 -1
  95. package/dist/team-media-showcase.cjs +182 -0
  96. package/dist/team-media-showcase.cjs.map +1 -0
  97. package/dist/team-media-showcase.d.cts +145 -0
  98. package/dist/team-media-showcase.d.ts +145 -0
  99. package/dist/team-media-showcase.js +160 -0
  100. package/dist/team-media-showcase.js.map +1 -0
  101. package/package.json +71 -1
@@ -0,0 +1,182 @@
1
+ "use client";
2
+ 'use strict';
3
+
4
+ var React = require('react');
5
+ var clsx = require('clsx');
6
+ var tailwindMerge = require('tailwind-merge');
7
+ var jsxRuntime = require('react/jsx-runtime');
8
+ var img = require('@page-speed/img');
9
+
10
+ function _interopNamespace(e) {
11
+ if (e && e.__esModule) return e;
12
+ var n = Object.create(null);
13
+ if (e) {
14
+ Object.keys(e).forEach(function (k) {
15
+ if (k !== 'default') {
16
+ var d = Object.getOwnPropertyDescriptor(e, k);
17
+ Object.defineProperty(n, k, d.get ? d : {
18
+ enumerable: true,
19
+ get: function () { return e[k]; }
20
+ });
21
+ }
22
+ });
23
+ }
24
+ n.default = e;
25
+ return Object.freeze(n);
26
+ }
27
+
28
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
29
+
30
+ // components/blocks/team/team-media-showcase.tsx
31
+ function cn(...inputs) {
32
+ return tailwindMerge.twMerge(clsx.clsx(inputs));
33
+ }
34
+ var maxWidthStyles = {
35
+ sm: "max-w-screen-sm",
36
+ md: "max-w-screen-md",
37
+ lg: "max-w-screen-lg",
38
+ xl: "max-w-screen-xl",
39
+ "2xl": "max-w-screen-2xl",
40
+ "4xl": "max-w-[1536px]",
41
+ full: "max-w-full"
42
+ };
43
+ var Container = React__namespace.default.forwardRef(
44
+ ({ children, maxWidth = "xl", className, as = "div", ...props }, ref) => {
45
+ const Component = as;
46
+ return /* @__PURE__ */ jsxRuntime.jsx(
47
+ Component,
48
+ {
49
+ ref,
50
+ className: cn(
51
+ "mx-auto w-full px-4 sm:px-6 lg:px-8",
52
+ maxWidthStyles[maxWidth],
53
+ className
54
+ ),
55
+ ...props,
56
+ children
57
+ }
58
+ );
59
+ }
60
+ );
61
+ Container.displayName = "Container";
62
+ var backgroundStyles = {
63
+ white: "bg-background text-foreground",
64
+ gray: "bg-muted/30 text-foreground",
65
+ dark: "bg-foreground text-background",
66
+ gradient: "bg-gradient-to-br from-primary via-primary/90 to-foreground text-primary-foreground",
67
+ primary: "bg-primary text-primary-foreground",
68
+ secondary: "bg-secondary text-secondary-foreground",
69
+ muted: "bg-muted text-muted-foreground"
70
+ };
71
+ var spacingStyles = {
72
+ sm: "py-12 md:py-16",
73
+ md: "py-16 md:py-24",
74
+ lg: "py-20 md:py-32",
75
+ xl: "py-24 md:py-40"
76
+ };
77
+ var Section = React__namespace.default.forwardRef(
78
+ ({
79
+ id,
80
+ title,
81
+ subtitle,
82
+ children,
83
+ className,
84
+ style,
85
+ background = "white",
86
+ spacing = "lg",
87
+ ...props
88
+ }, ref) => {
89
+ return /* @__PURE__ */ jsxRuntime.jsx(
90
+ "section",
91
+ {
92
+ ref,
93
+ id,
94
+ className: cn(
95
+ backgroundStyles[background],
96
+ spacingStyles[spacing],
97
+ className
98
+ ),
99
+ style,
100
+ ...props,
101
+ children: /* @__PURE__ */ jsxRuntime.jsxs(Container, { children: [
102
+ (title || subtitle) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-center mb-12 md:mb-16", children: [
103
+ subtitle && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm font-semibold uppercase tracking-wider mb-2 text-primary", children: subtitle }),
104
+ title && /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-3xl md:text-4xl lg:text-5xl font-bold tracking-tight", children: title })
105
+ ] }),
106
+ children
107
+ ] })
108
+ }
109
+ );
110
+ }
111
+ );
112
+ Section.displayName = "Section";
113
+ var TeamMemberBackgroundImageCard = React__namespace.forwardRef(({ className, imageUrl, imageAlt, children, optixFlowConfig, ...props }, ref) => {
114
+ return /* @__PURE__ */ jsxRuntime.jsxs(
115
+ "div",
116
+ {
117
+ ref,
118
+ className: cn(
119
+ "group h-[400px] relative w-full max-w-sm overflow-hidden rounded-xl border border-border bg-card shadow-lg",
120
+ "transition-all duration-300 ease-in-out",
121
+ className
122
+ ),
123
+ ...props,
124
+ children: [
125
+ /* @__PURE__ */ jsxRuntime.jsx(
126
+ img.Img,
127
+ {
128
+ src: imageUrl,
129
+ alt: imageAlt,
130
+ className: "absolute inset-0 h-full w-full object-cover transition-transform duration-500 ease-in-out group-hover:scale-110",
131
+ optixFlowConfig
132
+ }
133
+ ),
134
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute inset-0 bg-gradient-to-t from-black/80 via-black/20 to-transparent" }),
135
+ children
136
+ ]
137
+ }
138
+ );
139
+ });
140
+ TeamMemberBackgroundImageCard.displayName = "TeamMemberBackgroundImageCard";
141
+ function TeamMediaShowcase({
142
+ items,
143
+ children,
144
+ listEyebrow,
145
+ background = "white",
146
+ verticalMargin = "lg",
147
+ gridClassName = "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6",
148
+ className,
149
+ optixFlowConfig
150
+ }) {
151
+ return /* @__PURE__ */ jsxRuntime.jsx(Section, { background, spacing: verticalMargin, className, children: /* @__PURE__ */ jsxRuntime.jsxs(Container, { children: [
152
+ children,
153
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-12", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-6", children: [
154
+ listEyebrow && typeof listEyebrow === "string" && listEyebrow.trim() !== "" && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-md pt-8 uppercase text-dark-charcoal/70 tracking-[0.2em] font-semibold", children: listEyebrow }),
155
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: gridClassName, children: items.map((member, idx) => {
156
+ const imageAlt = member.imageAlt || (member.name && typeof member.name === "string" && member.name.trim() !== "" ? member.name : `member-${idx}`);
157
+ return /* @__PURE__ */ jsxRuntime.jsx(
158
+ TeamMemberBackgroundImageCard,
159
+ {
160
+ imageUrl: member.imageSrc,
161
+ imageAlt,
162
+ className: member.cardClassName,
163
+ optixFlowConfig,
164
+ children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative flex h-full flex-col justify-end p-6 text-card-foreground", children: [
165
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-4 transition-transform duration-500 ease-in-out group-hover:-translate-y-12", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
166
+ member.name && typeof member.name === "string" && member.name.trim() !== "" && /* @__PURE__ */ jsxRuntime.jsx("h4", { className: "text-3xl font-bold text-white", children: member.name }),
167
+ member.role && typeof member.role === "string" && member.role.trim() !== "" && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-white/80", children: member.role })
168
+ ] }) }),
169
+ member.action ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute -bottom-20 left-0 w-full pt-2 p-6 opacity-0 transition-all duration-500 ease-in-out group-hover:bottom-0 group-hover:opacity-100", children: member.action }) : null
170
+ ] })
171
+ },
172
+ idx
173
+ );
174
+ }) })
175
+ ] }) })
176
+ ] }) });
177
+ }
178
+
179
+ exports.TeamMediaShowcase = TeamMediaShowcase;
180
+ exports.TeamMemberBackgroundImageCard = TeamMemberBackgroundImageCard;
181
+ //# sourceMappingURL=team-media-showcase.cjs.map
182
+ //# sourceMappingURL=team-media-showcase.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../lib/utils.ts","../components/ui/container.tsx","../components/ui/section.tsx","../components/blocks/team/team-media-showcase.tsx"],"names":["twMerge","clsx","React","jsx","jsxs","React3","Img"],"mappings":"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","file":"team-media-showcase.cjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport type { ContainerProps } from \"../../src/types\";\n\nconst maxWidthStyles = {\n sm: \"max-w-screen-sm\",\n md: \"max-w-screen-md\",\n lg: \"max-w-screen-lg\",\n xl: \"max-w-screen-xl\",\n \"2xl\": \"max-w-screen-2xl\",\n \"4xl\": \"max-w-[1536px]\",\n full: \"max-w-full\",\n};\n\n/**\n * Container component for consistent content width and centering\n *\n * @example\n * ```tsx\n * <Container maxWidth=\"xl\">\n * <h1>Page Content</h1>\n * </Container>\n * ```\n */\nexport const Container = React.forwardRef<HTMLDivElement, ContainerProps>(\n ({ children, maxWidth = \"xl\", className, as = \"div\", ...props }, ref) => {\n const Component = as as any;\n return (\n <Component\n ref={ref}\n className={cn(\n \"mx-auto w-full px-4 sm:px-6 lg:px-8\",\n maxWidthStyles[maxWidth],\n className\n )}\n {...props}\n >\n {children}\n </Component>\n );\n }\n);\n\nContainer.displayName = \"Container\";\n","import React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { Container } from \"./container\";\nimport type { SectionProps } from \"../../src/types\";\n\n/**\n * Background style variants\n * Uses standard Tailwind/shadcn CSS variables for theming\n */\nconst backgroundStyles = {\n white: \"bg-background text-foreground\",\n gray: \"bg-muted/30 text-foreground\",\n dark: \"bg-foreground text-background\",\n gradient: \"bg-gradient-to-br from-primary via-primary/90 to-foreground text-primary-foreground\",\n primary: \"bg-primary text-primary-foreground\",\n secondary: \"bg-secondary text-secondary-foreground\",\n muted: \"bg-muted text-muted-foreground\",\n};\n\n/**\n * Vertical spacing variants\n */\nconst spacingStyles = {\n sm: \"py-12 md:py-16\",\n md: \"py-16 md:py-24\",\n lg: \"py-20 md:py-32\",\n xl: \"py-24 md:py-40\",\n};\n\n/**\n * Section component for consistent page sections with optional title, subtitle, and background\n *\n * @example\n * ```tsx\n * <Section\n * title=\"Our Services\"\n * subtitle=\"What we offer\"\n * background=\"gray\"\n * spacing=\"lg\"\n * >\n * <div>Section content goes here</div>\n * </Section>\n * ```\n */\nexport const Section = React.forwardRef<HTMLElement, SectionProps>(\n (\n {\n id,\n title,\n subtitle,\n children,\n className,\n style,\n background = \"white\",\n spacing = \"lg\",\n ...props\n },\n ref\n ) => {\n return (\n <section\n ref={ref}\n id={id}\n className={cn(\n backgroundStyles[background],\n spacingStyles[spacing],\n className\n )}\n style={style}\n {...props}\n >\n <Container>\n {(title || subtitle) && (\n <div className=\"text-center mb-12 md:mb-16\">\n {subtitle && (\n <p className=\"text-sm font-semibold uppercase tracking-wider mb-2 text-primary\">\n {subtitle}\n </p>\n )}\n {title && (\n <h2 className=\"text-3xl md:text-4xl lg:text-5xl font-bold tracking-tight\">\n {title}\n </h2>\n )}\n </div>\n )}\n {children}\n </Container>\n </section>\n );\n }\n);\n\nSection.displayName = \"Section\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport { Container } from \"../../ui/container\";\nimport { Section } from \"../../ui/section\";\nimport { Img } from \"@page-speed/img\";\nimport type { SectionBackground, SectionSpacing } from \"../../../src/types\";\n\n/**\n * Configuration for Optix Flow image optimization\n */\nexport interface OptixFlowConfig {\n /**\n * API key for Optix Flow service\n */\n apiKey: string;\n /**\n * Compression level (0-100)\n */\n compression?: number;\n}\n\n/**\n * Individual team member item for TeamMediaShowcase\n */\nexport interface TeamMediaShowcaseItem {\n /**\n * Image source URL for the team member (required)\n */\n imageSrc: string;\n /**\n * Team member's name (optional)\n */\n name?: string;\n /**\n * Team member's role/title (optional)\n */\n role?: string;\n /**\n * Custom action element to display on hover (optional)\n * Can be a button, link, or any React node\n */\n action?: React.ReactNode;\n /**\n * Alt text for the image (defaults to name or generic text)\n */\n imageAlt?: string;\n /**\n * Additional CSS classes for the card\n */\n cardClassName?: string;\n}\n\n/**\n * Props for TeamMediaShowcase component\n */\nexport interface TeamMediaShowcaseProps {\n /**\n * Array of team member items to display (required)\n * Each item must have at least an imageSrc\n */\n items: TeamMediaShowcaseItem[];\n /**\n * Optional children to render above the grid (e.g., section header content)\n */\n children?: React.ReactNode;\n /**\n * Eyebrow text displayed above the grid\n */\n listEyebrow?: string;\n /**\n * Background style variant for the section\n * @default \"white\"\n */\n background?: SectionBackground;\n /**\n * Vertical spacing/margin variant\n * @default \"lg\"\n */\n verticalMargin?: SectionSpacing;\n /**\n * Custom grid CSS classes\n * @default \"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6\"\n */\n gridClassName?: string;\n /**\n * Additional CSS classes for the section wrapper\n */\n className?: string;\n /**\n * Optional Optix Flow configuration for @page-speed/img\n */\n optixFlowConfig?: OptixFlowConfig;\n}\n\n/**\n * Props for TeamMemberBackgroundImageCard component\n */\ninterface TeamMemberBackgroundImageCardProps\n extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Image URL for the background\n */\n imageUrl: string;\n /**\n * Alt text for the image\n */\n imageAlt: string;\n /**\n * Card content (overlaid on the image)\n */\n children?: React.ReactNode;\n /**\n * Optional Optix Flow configuration for @page-speed/img\n */\n optixFlowConfig?: OptixFlowConfig;\n}\n\n/**\n * TeamMemberBackgroundImageCard - Individual card with background image and hover effects\n *\n * Displays a team member with a full-bleed background image that zooms on hover,\n * with a gradient overlay for text readability.\n */\nconst TeamMemberBackgroundImageCard = React.forwardRef<\n HTMLDivElement,\n TeamMemberBackgroundImageCardProps\n>(({ className, imageUrl, imageAlt, children, optixFlowConfig, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n \"group h-[400px] relative w-full max-w-sm overflow-hidden rounded-xl border border-border bg-card shadow-lg\",\n \"transition-all duration-300 ease-in-out\",\n className\n )}\n {...props}\n >\n <Img\n src={imageUrl}\n alt={imageAlt}\n className=\"absolute inset-0 h-full w-full object-cover transition-transform duration-500 ease-in-out group-hover:scale-110\"\n optixFlowConfig={optixFlowConfig}\n />\n\n <div className=\"absolute inset-0 bg-gradient-to-t from-black/80 via-black/20 to-transparent\"></div>\n\n {children}\n </div>\n );\n});\nTeamMemberBackgroundImageCard.displayName = \"TeamMemberBackgroundImageCard\";\n\n/**\n * TeamMediaShowcase - Display team members in a grid with background images\n *\n * A responsive grid of team member cards featuring full-bleed background images\n * with hover effects. Each card shows the member's name and role with an optional\n * action element that appears on hover.\n *\n * @example\n * ```tsx\n * <TeamMediaShowcase\n * listEyebrow=\"Our Team\"\n * items={[\n * {\n * imageSrc: \"/team/john.jpg\",\n * name: \"John Doe\",\n * role: \"CEO\",\n * action: <Button>View Profile</Button>\n * },\n * {\n * imageSrc: \"/team/jane.jpg\",\n * name: \"Jane Smith\",\n * role: \"CTO\"\n * }\n * ]}\n * />\n * ```\n */\nexport function TeamMediaShowcase({\n items,\n children,\n listEyebrow,\n background = \"white\",\n verticalMargin = \"lg\",\n gridClassName = \"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6\",\n className,\n optixFlowConfig,\n}: TeamMediaShowcaseProps): React.JSX.Element {\n return (\n <Section background={background} spacing={verticalMargin} className={className}>\n <Container>\n {children}\n\n <div className=\"space-y-12\">\n <div className=\"space-y-6\">\n {listEyebrow && typeof listEyebrow === \"string\" && listEyebrow.trim() !== \"\" && (\n <div className=\"text-md pt-8 uppercase text-dark-charcoal/70 tracking-[0.2em] font-semibold\">\n {listEyebrow}\n </div>\n )}\n <div className={gridClassName}>\n {items.map((member, idx) => {\n const imageAlt =\n member.imageAlt ||\n (member.name && typeof member.name === \"string\" && member.name.trim() !== \"\"\n ? member.name\n : `member-${idx}`);\n\n return (\n <TeamMemberBackgroundImageCard\n key={idx}\n imageUrl={member.imageSrc}\n imageAlt={imageAlt}\n className={member.cardClassName}\n optixFlowConfig={optixFlowConfig}\n >\n <div className=\"relative flex h-full flex-col justify-end p-6 text-card-foreground\">\n <div className=\"space-y-4 transition-transform duration-500 ease-in-out group-hover:-translate-y-12\">\n <div>\n {member.name &&\n typeof member.name === \"string\" &&\n member.name.trim() !== \"\" && (\n <h4 className=\"text-3xl font-bold text-white\">\n {member.name}\n </h4>\n )}\n {member.role &&\n typeof member.role === \"string\" &&\n member.role.trim() !== \"\" && (\n <p className=\"text-sm text-white/80\">{member.role}</p>\n )}\n </div>\n </div>\n\n {member.action ? (\n <div className=\"absolute -bottom-20 left-0 w-full pt-2 p-6 opacity-0 transition-all duration-500 ease-in-out group-hover:bottom-0 group-hover:opacity-100\">\n {member.action}\n </div>\n ) : null}\n </div>\n </TeamMemberBackgroundImageCard>\n );\n })}\n </div>\n </div>\n </div>\n </Container>\n </Section>\n );\n}\n\nexport { TeamMemberBackgroundImageCard };\n"]}
@@ -0,0 +1,145 @@
1
+ import * as React from 'react';
2
+ import { SectionBackground, SectionSpacing } from './types.cjs';
3
+
4
+ /**
5
+ * Configuration for Optix Flow image optimization
6
+ */
7
+ interface OptixFlowConfig {
8
+ /**
9
+ * API key for Optix Flow service
10
+ */
11
+ apiKey: string;
12
+ /**
13
+ * Compression level (0-100)
14
+ */
15
+ compression?: number;
16
+ }
17
+ /**
18
+ * Individual team member item for TeamMediaShowcase
19
+ */
20
+ interface TeamMediaShowcaseItem {
21
+ /**
22
+ * Image source URL for the team member (required)
23
+ */
24
+ imageSrc: string;
25
+ /**
26
+ * Team member's name (optional)
27
+ */
28
+ name?: string;
29
+ /**
30
+ * Team member's role/title (optional)
31
+ */
32
+ role?: string;
33
+ /**
34
+ * Custom action element to display on hover (optional)
35
+ * Can be a button, link, or any React node
36
+ */
37
+ action?: React.ReactNode;
38
+ /**
39
+ * Alt text for the image (defaults to name or generic text)
40
+ */
41
+ imageAlt?: string;
42
+ /**
43
+ * Additional CSS classes for the card
44
+ */
45
+ cardClassName?: string;
46
+ }
47
+ /**
48
+ * Props for TeamMediaShowcase component
49
+ */
50
+ interface TeamMediaShowcaseProps {
51
+ /**
52
+ * Array of team member items to display (required)
53
+ * Each item must have at least an imageSrc
54
+ */
55
+ items: TeamMediaShowcaseItem[];
56
+ /**
57
+ * Optional children to render above the grid (e.g., section header content)
58
+ */
59
+ children?: React.ReactNode;
60
+ /**
61
+ * Eyebrow text displayed above the grid
62
+ */
63
+ listEyebrow?: string;
64
+ /**
65
+ * Background style variant for the section
66
+ * @default "white"
67
+ */
68
+ background?: SectionBackground;
69
+ /**
70
+ * Vertical spacing/margin variant
71
+ * @default "lg"
72
+ */
73
+ verticalMargin?: SectionSpacing;
74
+ /**
75
+ * Custom grid CSS classes
76
+ * @default "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6"
77
+ */
78
+ gridClassName?: string;
79
+ /**
80
+ * Additional CSS classes for the section wrapper
81
+ */
82
+ className?: string;
83
+ /**
84
+ * Optional Optix Flow configuration for @page-speed/img
85
+ */
86
+ optixFlowConfig?: OptixFlowConfig;
87
+ }
88
+ /**
89
+ * Props for TeamMemberBackgroundImageCard component
90
+ */
91
+ interface TeamMemberBackgroundImageCardProps extends React.HTMLAttributes<HTMLDivElement> {
92
+ /**
93
+ * Image URL for the background
94
+ */
95
+ imageUrl: string;
96
+ /**
97
+ * Alt text for the image
98
+ */
99
+ imageAlt: string;
100
+ /**
101
+ * Card content (overlaid on the image)
102
+ */
103
+ children?: React.ReactNode;
104
+ /**
105
+ * Optional Optix Flow configuration for @page-speed/img
106
+ */
107
+ optixFlowConfig?: OptixFlowConfig;
108
+ }
109
+ /**
110
+ * TeamMemberBackgroundImageCard - Individual card with background image and hover effects
111
+ *
112
+ * Displays a team member with a full-bleed background image that zooms on hover,
113
+ * with a gradient overlay for text readability.
114
+ */
115
+ declare const TeamMemberBackgroundImageCard: React.ForwardRefExoticComponent<TeamMemberBackgroundImageCardProps & React.RefAttributes<HTMLDivElement>>;
116
+ /**
117
+ * TeamMediaShowcase - Display team members in a grid with background images
118
+ *
119
+ * A responsive grid of team member cards featuring full-bleed background images
120
+ * with hover effects. Each card shows the member's name and role with an optional
121
+ * action element that appears on hover.
122
+ *
123
+ * @example
124
+ * ```tsx
125
+ * <TeamMediaShowcase
126
+ * listEyebrow="Our Team"
127
+ * items={[
128
+ * {
129
+ * imageSrc: "/team/john.jpg",
130
+ * name: "John Doe",
131
+ * role: "CEO",
132
+ * action: <Button>View Profile</Button>
133
+ * },
134
+ * {
135
+ * imageSrc: "/team/jane.jpg",
136
+ * name: "Jane Smith",
137
+ * role: "CTO"
138
+ * }
139
+ * ]}
140
+ * />
141
+ * ```
142
+ */
143
+ declare function TeamMediaShowcase({ items, children, listEyebrow, background, verticalMargin, gridClassName, className, optixFlowConfig, }: TeamMediaShowcaseProps): React.JSX.Element;
144
+
145
+ export { type OptixFlowConfig, TeamMediaShowcase, type TeamMediaShowcaseItem, type TeamMediaShowcaseProps, TeamMemberBackgroundImageCard };
@@ -0,0 +1,145 @@
1
+ import * as React from 'react';
2
+ import { SectionBackground, SectionSpacing } from './types.js';
3
+
4
+ /**
5
+ * Configuration for Optix Flow image optimization
6
+ */
7
+ interface OptixFlowConfig {
8
+ /**
9
+ * API key for Optix Flow service
10
+ */
11
+ apiKey: string;
12
+ /**
13
+ * Compression level (0-100)
14
+ */
15
+ compression?: number;
16
+ }
17
+ /**
18
+ * Individual team member item for TeamMediaShowcase
19
+ */
20
+ interface TeamMediaShowcaseItem {
21
+ /**
22
+ * Image source URL for the team member (required)
23
+ */
24
+ imageSrc: string;
25
+ /**
26
+ * Team member's name (optional)
27
+ */
28
+ name?: string;
29
+ /**
30
+ * Team member's role/title (optional)
31
+ */
32
+ role?: string;
33
+ /**
34
+ * Custom action element to display on hover (optional)
35
+ * Can be a button, link, or any React node
36
+ */
37
+ action?: React.ReactNode;
38
+ /**
39
+ * Alt text for the image (defaults to name or generic text)
40
+ */
41
+ imageAlt?: string;
42
+ /**
43
+ * Additional CSS classes for the card
44
+ */
45
+ cardClassName?: string;
46
+ }
47
+ /**
48
+ * Props for TeamMediaShowcase component
49
+ */
50
+ interface TeamMediaShowcaseProps {
51
+ /**
52
+ * Array of team member items to display (required)
53
+ * Each item must have at least an imageSrc
54
+ */
55
+ items: TeamMediaShowcaseItem[];
56
+ /**
57
+ * Optional children to render above the grid (e.g., section header content)
58
+ */
59
+ children?: React.ReactNode;
60
+ /**
61
+ * Eyebrow text displayed above the grid
62
+ */
63
+ listEyebrow?: string;
64
+ /**
65
+ * Background style variant for the section
66
+ * @default "white"
67
+ */
68
+ background?: SectionBackground;
69
+ /**
70
+ * Vertical spacing/margin variant
71
+ * @default "lg"
72
+ */
73
+ verticalMargin?: SectionSpacing;
74
+ /**
75
+ * Custom grid CSS classes
76
+ * @default "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6"
77
+ */
78
+ gridClassName?: string;
79
+ /**
80
+ * Additional CSS classes for the section wrapper
81
+ */
82
+ className?: string;
83
+ /**
84
+ * Optional Optix Flow configuration for @page-speed/img
85
+ */
86
+ optixFlowConfig?: OptixFlowConfig;
87
+ }
88
+ /**
89
+ * Props for TeamMemberBackgroundImageCard component
90
+ */
91
+ interface TeamMemberBackgroundImageCardProps extends React.HTMLAttributes<HTMLDivElement> {
92
+ /**
93
+ * Image URL for the background
94
+ */
95
+ imageUrl: string;
96
+ /**
97
+ * Alt text for the image
98
+ */
99
+ imageAlt: string;
100
+ /**
101
+ * Card content (overlaid on the image)
102
+ */
103
+ children?: React.ReactNode;
104
+ /**
105
+ * Optional Optix Flow configuration for @page-speed/img
106
+ */
107
+ optixFlowConfig?: OptixFlowConfig;
108
+ }
109
+ /**
110
+ * TeamMemberBackgroundImageCard - Individual card with background image and hover effects
111
+ *
112
+ * Displays a team member with a full-bleed background image that zooms on hover,
113
+ * with a gradient overlay for text readability.
114
+ */
115
+ declare const TeamMemberBackgroundImageCard: React.ForwardRefExoticComponent<TeamMemberBackgroundImageCardProps & React.RefAttributes<HTMLDivElement>>;
116
+ /**
117
+ * TeamMediaShowcase - Display team members in a grid with background images
118
+ *
119
+ * A responsive grid of team member cards featuring full-bleed background images
120
+ * with hover effects. Each card shows the member's name and role with an optional
121
+ * action element that appears on hover.
122
+ *
123
+ * @example
124
+ * ```tsx
125
+ * <TeamMediaShowcase
126
+ * listEyebrow="Our Team"
127
+ * items={[
128
+ * {
129
+ * imageSrc: "/team/john.jpg",
130
+ * name: "John Doe",
131
+ * role: "CEO",
132
+ * action: <Button>View Profile</Button>
133
+ * },
134
+ * {
135
+ * imageSrc: "/team/jane.jpg",
136
+ * name: "Jane Smith",
137
+ * role: "CTO"
138
+ * }
139
+ * ]}
140
+ * />
141
+ * ```
142
+ */
143
+ declare function TeamMediaShowcase({ items, children, listEyebrow, background, verticalMargin, gridClassName, className, optixFlowConfig, }: TeamMediaShowcaseProps): React.JSX.Element;
144
+
145
+ export { type OptixFlowConfig, TeamMediaShowcase, type TeamMediaShowcaseItem, type TeamMediaShowcaseProps, TeamMemberBackgroundImageCard };
@@ -0,0 +1,160 @@
1
+ "use client";
2
+ import * as React from 'react';
3
+ import React__default from 'react';
4
+ import { clsx } from 'clsx';
5
+ import { twMerge } from 'tailwind-merge';
6
+ import { jsx, jsxs } from 'react/jsx-runtime';
7
+ import { Img } from '@page-speed/img';
8
+
9
+ // components/blocks/team/team-media-showcase.tsx
10
+ function cn(...inputs) {
11
+ return twMerge(clsx(inputs));
12
+ }
13
+ var maxWidthStyles = {
14
+ sm: "max-w-screen-sm",
15
+ md: "max-w-screen-md",
16
+ lg: "max-w-screen-lg",
17
+ xl: "max-w-screen-xl",
18
+ "2xl": "max-w-screen-2xl",
19
+ "4xl": "max-w-[1536px]",
20
+ full: "max-w-full"
21
+ };
22
+ var Container = React__default.forwardRef(
23
+ ({ children, maxWidth = "xl", className, as = "div", ...props }, ref) => {
24
+ const Component = as;
25
+ return /* @__PURE__ */ jsx(
26
+ Component,
27
+ {
28
+ ref,
29
+ className: cn(
30
+ "mx-auto w-full px-4 sm:px-6 lg:px-8",
31
+ maxWidthStyles[maxWidth],
32
+ className
33
+ ),
34
+ ...props,
35
+ children
36
+ }
37
+ );
38
+ }
39
+ );
40
+ Container.displayName = "Container";
41
+ var backgroundStyles = {
42
+ white: "bg-background text-foreground",
43
+ gray: "bg-muted/30 text-foreground",
44
+ dark: "bg-foreground text-background",
45
+ gradient: "bg-gradient-to-br from-primary via-primary/90 to-foreground text-primary-foreground",
46
+ primary: "bg-primary text-primary-foreground",
47
+ secondary: "bg-secondary text-secondary-foreground",
48
+ muted: "bg-muted text-muted-foreground"
49
+ };
50
+ var spacingStyles = {
51
+ sm: "py-12 md:py-16",
52
+ md: "py-16 md:py-24",
53
+ lg: "py-20 md:py-32",
54
+ xl: "py-24 md:py-40"
55
+ };
56
+ var Section = React__default.forwardRef(
57
+ ({
58
+ id,
59
+ title,
60
+ subtitle,
61
+ children,
62
+ className,
63
+ style,
64
+ background = "white",
65
+ spacing = "lg",
66
+ ...props
67
+ }, ref) => {
68
+ return /* @__PURE__ */ jsx(
69
+ "section",
70
+ {
71
+ ref,
72
+ id,
73
+ className: cn(
74
+ backgroundStyles[background],
75
+ spacingStyles[spacing],
76
+ className
77
+ ),
78
+ style,
79
+ ...props,
80
+ children: /* @__PURE__ */ jsxs(Container, { children: [
81
+ (title || subtitle) && /* @__PURE__ */ jsxs("div", { className: "text-center mb-12 md:mb-16", children: [
82
+ subtitle && /* @__PURE__ */ jsx("p", { className: "text-sm font-semibold uppercase tracking-wider mb-2 text-primary", children: subtitle }),
83
+ title && /* @__PURE__ */ jsx("h2", { className: "text-3xl md:text-4xl lg:text-5xl font-bold tracking-tight", children: title })
84
+ ] }),
85
+ children
86
+ ] })
87
+ }
88
+ );
89
+ }
90
+ );
91
+ Section.displayName = "Section";
92
+ var TeamMemberBackgroundImageCard = React.forwardRef(({ className, imageUrl, imageAlt, children, optixFlowConfig, ...props }, ref) => {
93
+ return /* @__PURE__ */ jsxs(
94
+ "div",
95
+ {
96
+ ref,
97
+ className: cn(
98
+ "group h-[400px] relative w-full max-w-sm overflow-hidden rounded-xl border border-border bg-card shadow-lg",
99
+ "transition-all duration-300 ease-in-out",
100
+ className
101
+ ),
102
+ ...props,
103
+ children: [
104
+ /* @__PURE__ */ jsx(
105
+ Img,
106
+ {
107
+ src: imageUrl,
108
+ alt: imageAlt,
109
+ className: "absolute inset-0 h-full w-full object-cover transition-transform duration-500 ease-in-out group-hover:scale-110",
110
+ optixFlowConfig
111
+ }
112
+ ),
113
+ /* @__PURE__ */ jsx("div", { className: "absolute inset-0 bg-gradient-to-t from-black/80 via-black/20 to-transparent" }),
114
+ children
115
+ ]
116
+ }
117
+ );
118
+ });
119
+ TeamMemberBackgroundImageCard.displayName = "TeamMemberBackgroundImageCard";
120
+ function TeamMediaShowcase({
121
+ items,
122
+ children,
123
+ listEyebrow,
124
+ background = "white",
125
+ verticalMargin = "lg",
126
+ gridClassName = "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6",
127
+ className,
128
+ optixFlowConfig
129
+ }) {
130
+ return /* @__PURE__ */ jsx(Section, { background, spacing: verticalMargin, className, children: /* @__PURE__ */ jsxs(Container, { children: [
131
+ children,
132
+ /* @__PURE__ */ jsx("div", { className: "space-y-12", children: /* @__PURE__ */ jsxs("div", { className: "space-y-6", children: [
133
+ listEyebrow && typeof listEyebrow === "string" && listEyebrow.trim() !== "" && /* @__PURE__ */ jsx("div", { className: "text-md pt-8 uppercase text-dark-charcoal/70 tracking-[0.2em] font-semibold", children: listEyebrow }),
134
+ /* @__PURE__ */ jsx("div", { className: gridClassName, children: items.map((member, idx) => {
135
+ const imageAlt = member.imageAlt || (member.name && typeof member.name === "string" && member.name.trim() !== "" ? member.name : `member-${idx}`);
136
+ return /* @__PURE__ */ jsx(
137
+ TeamMemberBackgroundImageCard,
138
+ {
139
+ imageUrl: member.imageSrc,
140
+ imageAlt,
141
+ className: member.cardClassName,
142
+ optixFlowConfig,
143
+ children: /* @__PURE__ */ jsxs("div", { className: "relative flex h-full flex-col justify-end p-6 text-card-foreground", children: [
144
+ /* @__PURE__ */ jsx("div", { className: "space-y-4 transition-transform duration-500 ease-in-out group-hover:-translate-y-12", children: /* @__PURE__ */ jsxs("div", { children: [
145
+ member.name && typeof member.name === "string" && member.name.trim() !== "" && /* @__PURE__ */ jsx("h4", { className: "text-3xl font-bold text-white", children: member.name }),
146
+ member.role && typeof member.role === "string" && member.role.trim() !== "" && /* @__PURE__ */ jsx("p", { className: "text-sm text-white/80", children: member.role })
147
+ ] }) }),
148
+ member.action ? /* @__PURE__ */ jsx("div", { className: "absolute -bottom-20 left-0 w-full pt-2 p-6 opacity-0 transition-all duration-500 ease-in-out group-hover:bottom-0 group-hover:opacity-100", children: member.action }) : null
149
+ ] })
150
+ },
151
+ idx
152
+ );
153
+ }) })
154
+ ] }) })
155
+ ] }) });
156
+ }
157
+
158
+ export { TeamMediaShowcase, TeamMemberBackgroundImageCard };
159
+ //# sourceMappingURL=team-media-showcase.js.map
160
+ //# sourceMappingURL=team-media-showcase.js.map