@sp-days-framework/docusaurus-frontpage-collection 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +339 -0
  3. package/lib/components/Block/index.d.ts +22 -0
  4. package/lib/components/Block/index.d.ts.map +1 -0
  5. package/lib/components/Block/index.js +32 -0
  6. package/lib/components/Block/index.js.map +1 -0
  7. package/lib/components/Block/styles.module.css +26 -0
  8. package/lib/components/Columns/index.d.ts +68 -0
  9. package/lib/components/Columns/index.d.ts.map +1 -0
  10. package/lib/components/Columns/index.js +119 -0
  11. package/lib/components/Columns/index.js.map +1 -0
  12. package/lib/components/Columns/styles.module.css +196 -0
  13. package/lib/components/CourseFeature/index.d.ts +99 -0
  14. package/lib/components/CourseFeature/index.d.ts.map +1 -0
  15. package/lib/components/CourseFeature/index.js +188 -0
  16. package/lib/components/CourseFeature/index.js.map +1 -0
  17. package/lib/components/CourseFeature/styles.module.css +204 -0
  18. package/lib/components/FancyHeader/index.d.ts +24 -0
  19. package/lib/components/FancyHeader/index.d.ts.map +1 -0
  20. package/lib/components/FancyHeader/index.js +32 -0
  21. package/lib/components/FancyHeader/index.js.map +1 -0
  22. package/lib/components/FancyHeader/styles.module.css +23 -0
  23. package/lib/components/GetStarted/index.d.ts +99 -0
  24. package/lib/components/GetStarted/index.d.ts.map +1 -0
  25. package/lib/components/GetStarted/index.js +127 -0
  26. package/lib/components/GetStarted/index.js.map +1 -0
  27. package/lib/components/GetStarted/styles.module.css +174 -0
  28. package/lib/components/HeroBanner/DotCrossGrid.d.ts +25 -0
  29. package/lib/components/HeroBanner/DotCrossGrid.d.ts.map +1 -0
  30. package/lib/components/HeroBanner/DotCrossGrid.js +283 -0
  31. package/lib/components/HeroBanner/DotCrossGrid.js.map +1 -0
  32. package/lib/components/HeroBanner/DotCrossGrid.module.css +9 -0
  33. package/lib/components/HeroBanner/index.d.ts +42 -0
  34. package/lib/components/HeroBanner/index.d.ts.map +1 -0
  35. package/lib/components/HeroBanner/index.js +116 -0
  36. package/lib/components/HeroBanner/index.js.map +1 -0
  37. package/lib/components/HeroBanner/styles.module.css +204 -0
  38. package/lib/components/IconContainer/index.d.ts +76 -0
  39. package/lib/components/IconContainer/index.d.ts.map +1 -0
  40. package/lib/components/IconContainer/index.js +119 -0
  41. package/lib/components/IconContainer/index.js.map +1 -0
  42. package/lib/components/IconContainer/styles.module.css +147 -0
  43. package/lib/components/Iconify/index.d.ts +56 -0
  44. package/lib/components/Iconify/index.d.ts.map +1 -0
  45. package/lib/components/Iconify/index.js +88 -0
  46. package/lib/components/Iconify/index.js.map +1 -0
  47. package/lib/components/Iconify/styles.module.css +30 -0
  48. package/lib/index.d.ts +36 -0
  49. package/lib/index.d.ts.map +1 -0
  50. package/lib/index.js +73 -0
  51. package/lib/index.js.map +1 -0
  52. package/lib/utils/IconifyIcon.d.ts +17 -0
  53. package/lib/utils/IconifyIcon.d.ts.map +1 -0
  54. package/lib/utils/IconifyIcon.js +26 -0
  55. package/lib/utils/IconifyIcon.js.map +1 -0
  56. package/lib/utils/InlineSvg.d.ts +29 -0
  57. package/lib/utils/InlineSvg.d.ts.map +1 -0
  58. package/lib/utils/InlineSvg.js +90 -0
  59. package/lib/utils/InlineSvg.js.map +1 -0
  60. package/lib/utils/ThemedIcon.d.ts +61 -0
  61. package/lib/utils/ThemedIcon.d.ts.map +1 -0
  62. package/lib/utils/ThemedIcon.js +128 -0
  63. package/lib/utils/ThemedIcon.js.map +1 -0
  64. package/lib/utils/constants.d.ts +23 -0
  65. package/lib/utils/constants.d.ts.map +1 -0
  66. package/lib/utils/constants.js +36 -0
  67. package/lib/utils/constants.js.map +1 -0
  68. package/lib/utils/index.d.ts +9 -0
  69. package/lib/utils/index.d.ts.map +1 -0
  70. package/lib/utils/index.js +19 -0
  71. package/lib/utils/index.js.map +1 -0
  72. package/lib/utils/logger.d.ts +21 -0
  73. package/lib/utils/logger.d.ts.map +1 -0
  74. package/lib/utils/logger.js +38 -0
  75. package/lib/utils/logger.js.map +1 -0
  76. package/lib/utils/types.d.ts +129 -0
  77. package/lib/utils/types.d.ts.map +1 -0
  78. package/lib/utils/types.js +6 -0
  79. package/lib/utils/types.js.map +1 -0
  80. package/package.json +73 -0
@@ -0,0 +1,283 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.DotCrossGrid = void 0;
40
+ const react_1 = __importStar(require("react"));
41
+ const gsap_1 = require("gsap");
42
+ const DotCrossGrid_module_css_1 = __importDefault(require("./DotCrossGrid.module.css"));
43
+ /**
44
+ * DotCrossGrid - Simple implementation
45
+ *
46
+ * User interaction: Mouse creates crosses that auto-fade after 500ms
47
+ * Idle animation: Crosses appear in edges, fade after 2500ms
48
+ */
49
+ const DotCrossGrid = ({ dotSize = 6, gap = 5, color = '#ffffff', pointerRadius = 80, pointerInnerIntensity = 0.008, pointerOuterIntensity = 0.002, maxOpacity = 0.7, minOpacity = 0.1, randomOpacity = true, idleEnabled = true, idleAreaWidth = 220, idleInterval = 2500, idleIntensity = 42, }) => {
50
+ const canvasRef = (0, react_1.useRef)(null);
51
+ const dotsMapRef = (0, react_1.useRef)(new Map());
52
+ const rafRef = (0, react_1.useRef)();
53
+ const idleIntervalRef = (0, react_1.useRef)();
54
+ const idleTimeoutsRef = (0, react_1.useRef)([]);
55
+ const gridSpacing = dotSize + gap;
56
+ /**
57
+ * Get or create dot at grid position
58
+ */
59
+ const getOrCreateDot = (gridX, gridY) => {
60
+ const key = `${gridX},${gridY}`;
61
+ let dot = dotsMapRef.current.get(key);
62
+ if (!dot) {
63
+ dot = {
64
+ x: gridX * gridSpacing,
65
+ y: gridY * gridSpacing,
66
+ gridX,
67
+ gridY,
68
+ opacity: 0,
69
+ };
70
+ dotsMapRef.current.set(key, dot);
71
+ }
72
+ return dot;
73
+ };
74
+ /**
75
+ * Create a cross pattern (5 dots) at grid position
76
+ */
77
+ const createCross = (gridX, gridY, isIdle) => {
78
+ const dots = [
79
+ getOrCreateDot(gridX, gridY),
80
+ getOrCreateDot(gridX, gridY - 1),
81
+ getOrCreateDot(gridX, gridY + 1),
82
+ getOrCreateDot(gridX - 1, gridY),
83
+ getOrCreateDot(gridX + 1, gridY),
84
+ ];
85
+ // Calculate target opacity ONCE for the entire cross
86
+ let targetOpacity;
87
+ if (randomOpacity) {
88
+ // Random opacity between min and max for this cross
89
+ targetOpacity = minOpacity + Math.random() * (maxOpacity - minOpacity);
90
+ }
91
+ else {
92
+ targetOpacity = isIdle ? minOpacity : maxOpacity;
93
+ }
94
+ const fadeDelay = isIdle ? 2500 : 500;
95
+ // Apply the same opacity to all 5 dots in this cross
96
+ dots.forEach(dot => {
97
+ // Clear existing fade timeout
98
+ if (dot.fadeTimeout) {
99
+ clearTimeout(dot.fadeTimeout);
100
+ }
101
+ // Fade in to the SAME target opacity for all dots
102
+ gsap_1.gsap.to(dot, {
103
+ opacity: targetOpacity,
104
+ duration: 0.3,
105
+ ease: 'power2.out',
106
+ overwrite: true,
107
+ });
108
+ // Schedule fade out (store the target for reference)
109
+ const finalTarget = targetOpacity;
110
+ dot.fadeTimeout = setTimeout(() => {
111
+ gsap_1.gsap.to(dot, {
112
+ opacity: 0,
113
+ duration: 0.6,
114
+ ease: 'power2.out',
115
+ overwrite: true,
116
+ });
117
+ }, fadeDelay);
118
+ });
119
+ }; /**
120
+ * Handle mouse move - create crosses around mouse with intensity falloff
121
+ */
122
+ const handleMouseMove = (e) => {
123
+ const canvas = canvasRef.current;
124
+ if (!canvas)
125
+ return;
126
+ const rect = canvas.getBoundingClientRect();
127
+ const mouseX = e.clientX - rect.left;
128
+ const mouseY = e.clientY - rect.top;
129
+ const centerGridX = Math.floor(mouseX / gridSpacing);
130
+ const centerGridY = Math.floor(mouseY / gridSpacing);
131
+ // Create crosses probabilistically based on distance from mouse (including center)
132
+ const searchRadius = Math.ceil(pointerRadius / gridSpacing);
133
+ for (let dx = -searchRadius; dx <= searchRadius; dx++) {
134
+ for (let dy = -searchRadius; dy <= searchRadius; dy++) {
135
+ const distance = Math.sqrt(dx * dx + dy * dy) * gridSpacing;
136
+ if (distance <= pointerRadius) {
137
+ // Calculate intensity based on distance (linear falloff)
138
+ const normalizedDistance = distance / pointerRadius;
139
+ const intensity = pointerInnerIntensity +
140
+ (pointerOuterIntensity - pointerInnerIntensity) * normalizedDistance;
141
+ // Random chance based on intensity (including center position)
142
+ if (Math.random() < intensity) {
143
+ createCross(centerGridX + dx, centerGridY + dy, false);
144
+ }
145
+ }
146
+ }
147
+ }
148
+ };
149
+ /**
150
+ * Idle animation - create random crosses at edges sequentially
151
+ */
152
+ const idlePulse = () => {
153
+ if (!idleEnabled)
154
+ return;
155
+ const canvas = canvasRef.current;
156
+ if (!canvas)
157
+ return;
158
+ const rect = canvas.getBoundingClientRect();
159
+ // Clear any existing scheduled timeouts
160
+ idleTimeoutsRef.current.forEach(timeout => clearTimeout(timeout));
161
+ idleTimeoutsRef.current = [];
162
+ // Calculate delay between each cross
163
+ const delayBetweenCrosses = idleInterval / idleIntensity;
164
+ // Create crosses one-by-one with calculated delays
165
+ for (let i = 0; i < idleIntensity; i++) {
166
+ const timeout = setTimeout(() => {
167
+ const isLeft = Math.random() < 0.5;
168
+ const maxAreaWidth = Math.min(idleAreaWidth, rect.width * 0.2);
169
+ // Generate a weighted random position within the idle area
170
+ // Use power distribution to favor edges (far from center)
171
+ // Higher values = more edge-weighted (2.5 gives roughly 80/20 distribution)
172
+ const randomFactor = Math.pow(Math.random(), 2.5);
173
+ const distanceFromEdge = randomFactor * maxAreaWidth;
174
+ const x = isLeft
175
+ ? distanceFromEdge
176
+ : rect.width - distanceFromEdge;
177
+ const y = Math.random() * rect.height;
178
+ const gridX = Math.floor(x / gridSpacing);
179
+ const gridY = Math.floor(y / gridSpacing);
180
+ createCross(gridX, gridY, true);
181
+ }, i * delayBetweenCrosses);
182
+ idleTimeoutsRef.current.push(timeout);
183
+ }
184
+ };
185
+ /**
186
+ * Render loop
187
+ */
188
+ const render = () => {
189
+ const canvas = canvasRef.current;
190
+ if (!canvas)
191
+ return;
192
+ const ctx = canvas.getContext('2d');
193
+ if (!ctx)
194
+ return;
195
+ // Clear using CSS pixel dimensions (context is already scaled by DPR)
196
+ const parent = canvas.parentElement;
197
+ if (!parent)
198
+ return;
199
+ const rect = parent.getBoundingClientRect();
200
+ ctx.clearRect(0, 0, rect.width, rect.height);
201
+ // Draw all dots
202
+ dotsMapRef.current.forEach(dot => {
203
+ if (dot.opacity > 0.01) {
204
+ ctx.fillStyle = color;
205
+ ctx.globalAlpha = dot.opacity;
206
+ ctx.beginPath();
207
+ ctx.arc(dot.x, dot.y, dotSize / 2, 0, Math.PI * 2);
208
+ ctx.fill();
209
+ }
210
+ });
211
+ ctx.globalAlpha = 1;
212
+ rafRef.current = requestAnimationFrame(render);
213
+ };
214
+ /**
215
+ * Setup
216
+ */
217
+ (0, react_1.useEffect)(() => {
218
+ const canvas = canvasRef.current;
219
+ if (!canvas)
220
+ return;
221
+ // Size canvas
222
+ const resizeCanvas = () => {
223
+ const parent = canvas.parentElement;
224
+ if (!parent)
225
+ return;
226
+ // Clear all existing dots and animations before resize
227
+ dotsMapRef.current.forEach(dot => {
228
+ if (dot.fadeTimeout) {
229
+ clearTimeout(dot.fadeTimeout);
230
+ }
231
+ gsap_1.gsap.killTweensOf(dot);
232
+ });
233
+ dotsMapRef.current.clear();
234
+ const rect = parent.getBoundingClientRect();
235
+ const dpr = window.devicePixelRatio || 1;
236
+ canvas.width = rect.width * dpr;
237
+ canvas.height = rect.height * dpr;
238
+ canvas.style.width = `${rect.width}px`;
239
+ canvas.style.height = `${rect.height}px`;
240
+ const ctx = canvas.getContext('2d');
241
+ if (ctx) {
242
+ ctx.scale(dpr, dpr);
243
+ }
244
+ };
245
+ resizeCanvas();
246
+ window.addEventListener('resize', resizeCanvas);
247
+ // Event listeners
248
+ canvas.addEventListener('mousemove', handleMouseMove);
249
+ // Start render loop
250
+ rafRef.current = requestAnimationFrame(render);
251
+ // Start idle animation
252
+ if (idleEnabled) {
253
+ idleIntervalRef.current = setInterval(idlePulse, idleInterval);
254
+ }
255
+ return () => {
256
+ window.removeEventListener('resize', resizeCanvas);
257
+ canvas.removeEventListener('mousemove', handleMouseMove);
258
+ if (rafRef.current) {
259
+ cancelAnimationFrame(rafRef.current);
260
+ }
261
+ if (idleIntervalRef.current) {
262
+ clearInterval(idleIntervalRef.current);
263
+ }
264
+ // Clear all scheduled idle timeouts
265
+ idleTimeoutsRef.current.forEach(timeout => clearTimeout(timeout));
266
+ idleTimeoutsRef.current = [];
267
+ // Clear all timeouts
268
+ dotsMapRef.current.forEach(dot => {
269
+ if (dot.fadeTimeout) {
270
+ clearTimeout(dot.fadeTimeout);
271
+ }
272
+ });
273
+ // Kill all GSAP animations
274
+ dotsMapRef.current.forEach(dot => {
275
+ gsap_1.gsap.killTweensOf(dot);
276
+ });
277
+ };
278
+ }, [idleEnabled, idleInterval, idleIntensity, gridSpacing, pointerRadius, pointerInnerIntensity, pointerOuterIntensity, maxOpacity, minOpacity, randomOpacity]);
279
+ return react_1.default.createElement("canvas", { ref: canvasRef, className: DotCrossGrid_module_css_1.default.dotCrossGrid });
280
+ };
281
+ exports.DotCrossGrid = DotCrossGrid;
282
+ exports.default = exports.DotCrossGrid;
283
+ //# sourceMappingURL=DotCrossGrid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DotCrossGrid.js","sourceRoot":"","sources":["../../../src/components/HeroBanner/DotCrossGrid.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ .dotCrossGrid {
2
+ position: absolute;
3
+ top: 0;
4
+ left: 0;
5
+ width: 100%;
6
+ height: 100%;
7
+ z-index: 2;
8
+ pointer-events: auto;
9
+ }
@@ -0,0 +1,42 @@
1
+ import React from 'react';
2
+ import type { IconifyConfig, CustomSvgConfig, CustomImageConfig, IconColorConfig } from '../../utils/types';
3
+ export interface HeroBannerProps {
4
+ bannerText?: string;
5
+ bannerFullWidth?: boolean;
6
+ iconify?: IconifyConfig | string;
7
+ customSvg?: CustomSvgConfig;
8
+ customImage?: CustomImageConfig;
9
+ iconColors?: IconColorConfig;
10
+ enableDotCrossEffect?: boolean;
11
+ dotCrossColor?: string;
12
+ dotCrossSize?: number;
13
+ dotCrossGap?: number;
14
+ pointerRadius?: number;
15
+ pointerInnerIntensity?: number;
16
+ pointerOuterIntensity?: number;
17
+ maxOpacity?: number;
18
+ minOpacity?: number;
19
+ randomOpacity?: boolean;
20
+ idleEnabled?: boolean;
21
+ idleAreaWidth?: number;
22
+ idleInterval?: number;
23
+ idleIntensity?: number;
24
+ }
25
+ /**
26
+ * HeroBanner Component
27
+ *
28
+ * A full-width banner component with animated dot cross grid background.
29
+ * Automatically uses site title and tagline from Docusaurus config.
30
+ *
31
+ * @example
32
+ * ```tsx
33
+ * <HeroBanner
34
+ * bannerText="Build amazing documentation sites"
35
+ * iconify="mdi:rocket-launch"
36
+ * enableDotCrossEffect={true}
37
+ * />
38
+ * ```
39
+ */
40
+ export declare const HeroBanner: React.FC<HeroBannerProps>;
41
+ export default HeroBanner;
42
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/HeroBanner/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4B,MAAM,OAAO,CAAC;AAIjD,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAG5G,MAAM,WAAW,eAAe;IAE9B,UAAU,CAAC,EAAE,MAAM,CAAC;IAGpB,eAAe,CAAC,EAAE,OAAO,CAAC;IAG1B,OAAO,CAAC,EAAE,aAAa,GAAG,MAAM,CAAC;IACjC,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,UAAU,CAAC,EAAE,eAAe,CAAC;IAG7B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IAGrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAG/B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;IAGxB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CAsHhD,CAAC;AAEF,eAAe,UAAU,CAAC"}
@@ -0,0 +1,116 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.HeroBanner = void 0;
40
+ const react_1 = __importStar(require("react"));
41
+ const useDocusaurusContext_1 = __importDefault(require("@docusaurus/useDocusaurusContext"));
42
+ const ThemedIcon_1 = require("../../utils/ThemedIcon");
43
+ const DotCrossGrid_1 = require("./DotCrossGrid");
44
+ const styles_module_css_1 = __importDefault(require("./styles.module.css"));
45
+ /**
46
+ * HeroBanner Component
47
+ *
48
+ * A full-width banner component with animated dot cross grid background.
49
+ * Automatically uses site title and tagline from Docusaurus config.
50
+ *
51
+ * @example
52
+ * ```tsx
53
+ * <HeroBanner
54
+ * bannerText="Build amazing documentation sites"
55
+ * iconify="mdi:rocket-launch"
56
+ * enableDotCrossEffect={true}
57
+ * />
58
+ * ```
59
+ */
60
+ const HeroBanner = ({ bannerText, bannerFullWidth = true, iconify, customSvg, customImage, iconColors, enableDotCrossEffect = true, dotCrossColor, dotCrossSize, dotCrossGap, pointerRadius, pointerInnerIntensity, pointerOuterIntensity, maxOpacity, minOpacity, randomOpacity, idleEnabled, idleAreaWidth, idleInterval, idleIntensity, }) => {
61
+ const { siteConfig } = (0, useDocusaurusContext_1.default)();
62
+ const { title, tagline } = siteConfig;
63
+ const bannerRef = (0, react_1.useRef)(null);
64
+ // Set banner width to window width (only for full-width mode)
65
+ (0, react_1.useEffect)(() => {
66
+ if (!bannerFullWidth)
67
+ return;
68
+ const updateWidth = () => {
69
+ if (bannerRef.current) {
70
+ // Set width to window width minus 4px
71
+ bannerRef.current.style.width = `${window.innerWidth - 4}px`;
72
+ }
73
+ };
74
+ updateWidth();
75
+ window.addEventListener('resize', updateWidth);
76
+ return () => {
77
+ window.removeEventListener('resize', updateWidth);
78
+ };
79
+ }, [bannerFullWidth]);
80
+ // Build iconify config with colors if provided
81
+ const iconifyWithColors = iconify && iconColors
82
+ ? (typeof iconify === 'string'
83
+ ? { icon: iconify, colors: iconColors }
84
+ : { ...iconify, colors: { ...iconify.colors, ...iconColors } })
85
+ : iconify
86
+ ? (typeof iconify === 'string'
87
+ ? { icon: iconify, colors: { light: '#ffffff', dark: '#ffffff' } }
88
+ : { ...iconify, colors: { light: '#ffffff', dark: '#ffffff', ...iconify.colors } })
89
+ : iconify;
90
+ // For Iconify icons, ensure they fill the container if no explicit size is set
91
+ const iconifyWithSize = iconifyWithColors
92
+ ? (typeof iconifyWithColors === 'string'
93
+ ? { icon: iconifyWithColors, width: '100%', height: '100%' }
94
+ : {
95
+ ...iconifyWithColors,
96
+ width: iconifyWithColors.width || '100%',
97
+ height: iconifyWithColors.height || '100%',
98
+ })
99
+ : iconifyWithColors;
100
+ // Check if we have any icon to render
101
+ const hasIcon = iconify || customSvg || customImage;
102
+ // Determine which CSS class to use based on icon type
103
+ const logoClassName = customImage ? styles_module_css_1.default.heroLogoImage : styles_module_css_1.default.heroLogo;
104
+ return (react_1.default.createElement("div", { ref: bannerRef, className: `${styles_module_css_1.default.heroBanner} ${!bannerFullWidth ? styles_module_css_1.default.heroBannerContained : ''}` },
105
+ enableDotCrossEffect && (react_1.default.createElement(DotCrossGrid_1.DotCrossGrid, { dotSize: dotCrossSize, gap: dotCrossGap, color: dotCrossColor, pointerRadius: pointerRadius, pointerInnerIntensity: pointerInnerIntensity, pointerOuterIntensity: pointerOuterIntensity, maxOpacity: maxOpacity, minOpacity: minOpacity, randomOpacity: randomOpacity, idleEnabled: idleEnabled, idleAreaWidth: idleAreaWidth, idleInterval: idleInterval, idleIntensity: idleIntensity })),
106
+ react_1.default.createElement("div", { className: styles_module_css_1.default.heroContent },
107
+ react_1.default.createElement("div", { className: styles_module_css_1.default.heroTextContainer },
108
+ react_1.default.createElement("h1", { className: styles_module_css_1.default.heroTitle }, title),
109
+ bannerText && react_1.default.createElement("p", { className: styles_module_css_1.default.heroBannerText }, bannerText),
110
+ tagline && react_1.default.createElement("p", { className: styles_module_css_1.default.heroTagline }, tagline)),
111
+ hasIcon && (react_1.default.createElement("div", { className: styles_module_css_1.default.heroLogoContainer },
112
+ react_1.default.createElement(ThemedIcon_1.ThemedIcon, { iconify: iconifyWithSize, customSvg: customSvg, customImage: customImage, alt: `${title} icon`, className: logoClassName, supportsHover: false }))))));
113
+ };
114
+ exports.HeroBanner = HeroBanner;
115
+ exports.default = exports.HeroBanner;
116
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/HeroBanner/index.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,204 @@
1
+ .heroBanner {
2
+ position: relative;
3
+ /* Width set dynamically via JavaScript */
4
+ margin-left: calc(-50vw + 50%);
5
+ margin-right: calc(-50vw + 50%);
6
+ margin-top: -32px;
7
+ min-height: 280px;
8
+ background: var(--hero-background-color, var(--ifm-color-primary));
9
+ overflow: hidden;
10
+ padding: 3rem 2rem;
11
+ --hero-background-color: var(--ifm-color-primary);
12
+ }
13
+
14
+ /* Contained mode - stays within document flow */
15
+ .heroBannerContained {
16
+ margin-left: 0;
17
+ margin-right: 0;
18
+ margin-top: 0;
19
+ width: 100% !important;
20
+ }
21
+
22
+ /* Dark theme adjustments */
23
+ [data-theme="dark"] .heroBanner {
24
+ --hero-background-color: var(--ifm-color-primary-darker);
25
+ }
26
+
27
+ .heroContent {
28
+ position: relative;
29
+ z-index: 4;
30
+ max-width: 1000px;
31
+ margin: 0 auto;
32
+ display: grid;
33
+ grid-template-columns: 70% 30%;
34
+ gap: 2rem;
35
+ align-items: center;
36
+ height: 100%;
37
+ pointer-events: none;
38
+ }
39
+
40
+ /* Text container */
41
+ .heroTextContainer {
42
+ position: relative;
43
+ color: var(--ifm-font-color-base-inverse);
44
+ pointer-events: none;
45
+ }
46
+
47
+ .heroTitle {
48
+ position: relative;
49
+ font-size: 3rem;
50
+ font-weight: 800;
51
+ line-height: 1.2;
52
+ margin: 0 0 1rem 0;
53
+ color: #ffffff;
54
+ pointer-events: none;
55
+ z-index: 4;
56
+ filter: drop-shadow(0 0 20px var(--hero-background-color))
57
+ drop-shadow(0 0 40px var(--hero-background-color))
58
+ drop-shadow(0 0 60px var(--hero-background-color))
59
+ drop-shadow(2px 2px 2px #00000063);
60
+ }
61
+
62
+ .heroBannerText {
63
+ position: relative;
64
+ font-size: 1.5rem;
65
+ font-weight: 400;
66
+ line-height: 1.4;
67
+ margin: 0 0 1.5rem 0;
68
+ color: rgba(255, 255, 255, 0.95);
69
+ display: -webkit-box;
70
+ -webkit-line-clamp: 3;
71
+ line-clamp: 3;
72
+ -webkit-box-orient: vertical;
73
+ overflow: hidden;
74
+ z-index: 4;
75
+ filter: drop-shadow(0 0 20px var(--hero-background-color))
76
+ drop-shadow(0 0 40px var(--hero-background-color))
77
+ drop-shadow(0 0 60px var(--hero-background-color))
78
+ drop-shadow(2px 2px 2px #00000063);
79
+ }
80
+
81
+ .heroTagline {
82
+ position: relative;
83
+ font-size: 1.125rem;
84
+ font-style: italic;
85
+ line-height: 1.6;
86
+ margin: 0;
87
+ color: rgba(255, 255, 255, 0.9);
88
+
89
+ /* Truncate with ellipsis after 3 lines */
90
+ display: -webkit-box;
91
+ -webkit-line-clamp: 2;
92
+ line-clamp: 2;
93
+ -webkit-box-orient: vertical;
94
+ overflow: hidden;
95
+ text-overflow: ellipsis;
96
+ pointer-events: none;
97
+ z-index: 4;
98
+ filter: drop-shadow(0 0 20px var(--hero-background-color))
99
+ drop-shadow(0 0 40px var(--hero-background-color))
100
+ drop-shadow(0 0 60px var(--hero-background-color))
101
+ drop-shadow(2px 2px 2px #00000063);
102
+ }
103
+
104
+ /* Logo container */
105
+ .heroLogoContainer {
106
+ position: relative;
107
+ display: flex;
108
+ align-items: center;
109
+ justify-content: center;
110
+ height: 100%;
111
+ min-height: 200px;
112
+ pointer-events: none;
113
+ }
114
+
115
+ .heroLogo {
116
+ position: relative;
117
+ width: 100%;
118
+ height: 100%;
119
+ max-width: 200px;
120
+ object-fit: contain;
121
+ pointer-events: none;
122
+ z-index: 4;
123
+ filter: drop-shadow(0 0 20px var(--hero-background-color))
124
+ drop-shadow(0 0 40px var(--hero-background-color))
125
+ drop-shadow(0 0 60px var(--hero-background-color))
126
+ drop-shadow(2px 2px 2px #00000063);
127
+ }
128
+
129
+ /* Logo for custom images (PNG/JPEG) - no shadow, optimized sizing */
130
+ .heroLogoImage {
131
+ position: relative;
132
+ max-width: 100%;
133
+ max-height: 200px;
134
+ width: auto;
135
+ height: auto;
136
+ object-fit: contain;
137
+ pointer-events: none;
138
+ z-index: 4;
139
+ }
140
+
141
+ /* Tablet (768px - 996px) */
142
+ @media (max-width: 996px) {
143
+ .heroTitle {
144
+ font-size: 2.5rem;
145
+ }
146
+ .heroBannerText {
147
+ font-size: 1.25rem;
148
+ -webkit-line-clamp: 2; /* Truncate after 2 lines on tablet */
149
+ line-clamp: 2;
150
+ }
151
+
152
+ .heroTagline {
153
+ font-size: 1rem;
154
+ -webkit-line-clamp: 2; /* Truncate after 2 lines on tablet */
155
+ line-clamp: 2;
156
+ }
157
+ }
158
+
159
+ /* Mobile (<576px) */
160
+ @media (max-width: 576px) {
161
+ .heroBanner {
162
+ min-height: auto;
163
+ padding: 2rem 1rem;
164
+ }
165
+
166
+ .heroContent {
167
+ grid-template-columns: 1fr;
168
+ gap: 1rem;
169
+ }
170
+
171
+ .heroTextContainer {
172
+ text-align: center;
173
+ }
174
+
175
+ .heroTitle {
176
+ font-size: 2rem;
177
+ }
178
+
179
+ .heroBannerText {
180
+ font-size: 0.95rem;
181
+ -webkit-line-clamp: 2;
182
+ line-clamp: 2;
183
+ }
184
+
185
+ .heroTagline {
186
+ font-size: 1.125rem;
187
+ -webkit-line-clamp: 1;
188
+ line-clamp: 1;
189
+ }
190
+
191
+ /* Show logo on mobile at smaller size, centered at top */
192
+ .heroLogoContainer {
193
+ order: -1;
194
+ min-height: 80px;
195
+ }
196
+
197
+ .heroLogo {
198
+ max-width: 80px;
199
+ }
200
+
201
+ .heroLogoImage {
202
+ max-width: 80px;
203
+ }
204
+ }