snow-flow 3.4.35 → 3.4.39
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.
- package/README.md +412 -287
- package/dist/cli/deploy-artifact.js +2 -2
- package/dist/mcp/servicenow-deployment-mcp.js +1 -1
- package/dist/mcp/servicenow-mcp-server.js +2 -2
- package/dist/mcp/shared/mcp-logger.js +6 -12
- package/dist/queen/agent-factory.js +134 -52
- package/dist/queen/servicenow-queen.d.ts +127 -2
- package/dist/queen/servicenow-queen.js +978 -618
- package/dist/services/widget-deployment-service.d.ts +1 -1
- package/dist/services/widget-deployment-service.js +1 -1
- package/dist/templates/claude-md-template.d.ts +1 -1
- package/dist/templates/claude-md-template.js +2 -2
- package/dist/types/servicenow.types.d.ts +1 -1
- package/dist/utils/dependency-detector.d.ts +1 -1
- package/dist/utils/dependency-detector.js +1 -1
- package/dist/utils/servicenow-client.d.ts +1 -1
- package/dist/utils/servicenow-client.js +4 -8
- package/package.json +1 -1
- package/website/components/README.md +419 -0
- package/website/components/code-display/CodeDisplay.css +583 -0
- package/website/components/code-display/CodeDisplay.html +200 -0
- package/website/components/code-display/CodeDisplay.js +375 -0
- package/website/components/code-display/CodeDisplay.jsx +268 -0
- package/website/components/demo/ComponentLibraryDemo.html +845 -0
- package/website/components/feature-cards/FeatureCards.css +573 -0
- package/website/components/feature-cards/FeatureCards.html +247 -0
- package/website/components/feature-cards/FeatureCards.js +382 -0
- package/website/components/feature-cards/FeatureCards.jsx +235 -0
- package/website/components/hero/Hero.css +558 -0
- package/website/components/hero/Hero.html +98 -0
- package/website/components/hero/Hero.js +415 -0
- package/website/components/hero/Hero.jsx +214 -0
- package/website/components/interactive/InteractiveElements.css +776 -0
- package/website/components/interactive/InteractiveElements.html +283 -0
- package/website/components/interactive/InteractiveElements.js +489 -0
- package/website/components/interactive/InteractiveElements.jsx +444 -0
- package/website/components/layout/LayoutComponents.css +697 -0
- package/website/components/layout/LayoutComponents.html +374 -0
- package/website/components/layout/LayoutComponents.js +447 -0
- package/website/components/layout/LayoutComponents.jsx +379 -0
- package/website/components/navigation/Navigation.css +383 -0
- package/website/components/navigation/Navigation.html +89 -0
- package/website/components/navigation/Navigation.js +248 -0
- package/website/components/navigation/Navigation.jsx +124 -0
- package/website/css/animations.css +854 -0
- package/website/css/style.css +916 -948
- package/website/index.html +394 -424
- package/website/js/animations.js +707 -0
- package/website/js/main.js +310 -383
- package/website/mcp-servers.html +310 -0
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
import React, { useState, useEffect, useRef } from 'react';
|
|
2
|
+
import './FeatureCards.css';
|
|
3
|
+
|
|
4
|
+
const FeatureCard = ({
|
|
5
|
+
icon,
|
|
6
|
+
title,
|
|
7
|
+
description,
|
|
8
|
+
link,
|
|
9
|
+
index = 0,
|
|
10
|
+
animationDelay = 0,
|
|
11
|
+
isVisible = false
|
|
12
|
+
}) => {
|
|
13
|
+
const [isHovered, setIsHovered] = useState(false);
|
|
14
|
+
const cardRef = useRef(null);
|
|
15
|
+
|
|
16
|
+
const handleCardClick = () => {
|
|
17
|
+
if (link) {
|
|
18
|
+
if (link.startsWith('#')) {
|
|
19
|
+
const target = document.querySelector(link);
|
|
20
|
+
if (target) {
|
|
21
|
+
const offset = 80;
|
|
22
|
+
const targetPosition = target.offsetTop - offset;
|
|
23
|
+
window.scrollTo({
|
|
24
|
+
top: targetPosition,
|
|
25
|
+
behavior: 'smooth'
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
} else {
|
|
29
|
+
window.open(link, '_blank', 'noopener,noreferrer');
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
return (
|
|
35
|
+
<div
|
|
36
|
+
ref={cardRef}
|
|
37
|
+
className={`sf-feature-card ${isVisible ? 'sf-feature-card--visible' : ''} ${link ? 'sf-feature-card--clickable' : ''}`}
|
|
38
|
+
style={{
|
|
39
|
+
animationDelay: `${animationDelay}ms`,
|
|
40
|
+
'--index': index
|
|
41
|
+
}}
|
|
42
|
+
onMouseEnter={() => setIsHovered(true)}
|
|
43
|
+
onMouseLeave={() => setIsHovered(false)}
|
|
44
|
+
onClick={handleCardClick}
|
|
45
|
+
role={link ? 'button' : 'article'}
|
|
46
|
+
tabIndex={link ? 0 : -1}
|
|
47
|
+
onKeyDown={(e) => {
|
|
48
|
+
if (link && (e.key === 'Enter' || e.key === ' ')) {
|
|
49
|
+
e.preventDefault();
|
|
50
|
+
handleCardClick();
|
|
51
|
+
}
|
|
52
|
+
}}
|
|
53
|
+
>
|
|
54
|
+
{/* 3D Border Effect */}
|
|
55
|
+
<div className="sf-feature-card__border">
|
|
56
|
+
<div className="sf-feature-card__border-top"></div>
|
|
57
|
+
<div className="sf-feature-card__border-right"></div>
|
|
58
|
+
<div className="sf-feature-card__border-bottom"></div>
|
|
59
|
+
<div className="sf-feature-card__border-left"></div>
|
|
60
|
+
</div>
|
|
61
|
+
|
|
62
|
+
{/* Background Glow */}
|
|
63
|
+
<div className="sf-feature-card__glow"></div>
|
|
64
|
+
|
|
65
|
+
{/* Content */}
|
|
66
|
+
<div className="sf-feature-card__content">
|
|
67
|
+
{/* Icon */}
|
|
68
|
+
<div className="sf-feature-card__icon-wrapper">
|
|
69
|
+
<div className={`sf-feature-card__icon ${isHovered ? 'sf-feature-card__icon--animated' : ''}`}>
|
|
70
|
+
{typeof icon === 'string' ? (
|
|
71
|
+
<span role="img" aria-hidden="true">{icon}</span>
|
|
72
|
+
) : (
|
|
73
|
+
icon
|
|
74
|
+
)}
|
|
75
|
+
</div>
|
|
76
|
+
</div>
|
|
77
|
+
|
|
78
|
+
{/* Text Content */}
|
|
79
|
+
<div className="sf-feature-card__text">
|
|
80
|
+
<h3 className="sf-feature-card__title">{title}</h3>
|
|
81
|
+
<p className="sf-feature-card__description">{description}</p>
|
|
82
|
+
</div>
|
|
83
|
+
|
|
84
|
+
{/* Hover Arrow */}
|
|
85
|
+
{link && (
|
|
86
|
+
<div className={`sf-feature-card__arrow ${isHovered ? 'sf-feature-card__arrow--visible' : ''}`}>
|
|
87
|
+
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2">
|
|
88
|
+
<path d="M7 17L17 7M17 7H7M17 7V17"/>
|
|
89
|
+
</svg>
|
|
90
|
+
</div>
|
|
91
|
+
)}
|
|
92
|
+
</div>
|
|
93
|
+
|
|
94
|
+
{/* Ripple Effect */}
|
|
95
|
+
<div className="sf-feature-card__ripple"></div>
|
|
96
|
+
</div>
|
|
97
|
+
);
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
const FeatureCards = ({
|
|
101
|
+
title = "Features",
|
|
102
|
+
subtitle = "Discover what makes our platform unique",
|
|
103
|
+
features = [
|
|
104
|
+
{
|
|
105
|
+
icon: "⚡",
|
|
106
|
+
title: "Lightning Fast",
|
|
107
|
+
description: "Optimized performance with cutting-edge technology for instant results.",
|
|
108
|
+
link: "#performance"
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
icon: "🔒",
|
|
112
|
+
title: "Secure by Design",
|
|
113
|
+
description: "Enterprise-grade security with end-to-end encryption and compliance.",
|
|
114
|
+
link: "#security"
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
icon: "🚀",
|
|
118
|
+
title: "Easy Integration",
|
|
119
|
+
description: "Seamless integration with your existing tools and workflows.",
|
|
120
|
+
link: "#integration"
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
icon: "📊",
|
|
124
|
+
title: "Real-time Analytics",
|
|
125
|
+
description: "Comprehensive insights and analytics to drive informed decisions.",
|
|
126
|
+
link: "#analytics"
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
icon: "🎯",
|
|
130
|
+
title: "Precision Control",
|
|
131
|
+
description: "Granular control over every aspect of your system operations.",
|
|
132
|
+
link: "#control"
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
icon: "🔄",
|
|
136
|
+
title: "Auto Updates",
|
|
137
|
+
description: "Stay current with automatic updates and feature enhancements.",
|
|
138
|
+
link: "#updates"
|
|
139
|
+
}
|
|
140
|
+
],
|
|
141
|
+
columns = "auto-fit",
|
|
142
|
+
minCardWidth = "300px",
|
|
143
|
+
maxCardWidth = "400px",
|
|
144
|
+
className = ""
|
|
145
|
+
}) => {
|
|
146
|
+
const [isVisible, setIsVisible] = useState(false);
|
|
147
|
+
const [visibleCards, setVisibleCards] = useState(new Set());
|
|
148
|
+
const containerRef = useRef(null);
|
|
149
|
+
|
|
150
|
+
useEffect(() => {
|
|
151
|
+
const observer = new IntersectionObserver(
|
|
152
|
+
([entry]) => {
|
|
153
|
+
if (entry.isIntersecting) {
|
|
154
|
+
setIsVisible(true);
|
|
155
|
+
|
|
156
|
+
// Stagger card animations
|
|
157
|
+
features.forEach((_, index) => {
|
|
158
|
+
setTimeout(() => {
|
|
159
|
+
setVisibleCards(prev => new Set([...prev, index]));
|
|
160
|
+
}, index * 150);
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
},
|
|
164
|
+
{ threshold: 0.1 }
|
|
165
|
+
);
|
|
166
|
+
|
|
167
|
+
if (containerRef.current) {
|
|
168
|
+
observer.observe(containerRef.current);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
return () => observer.disconnect();
|
|
172
|
+
}, [features]);
|
|
173
|
+
|
|
174
|
+
const gridStyle = {
|
|
175
|
+
gridTemplateColumns: columns === 'auto-fit'
|
|
176
|
+
? `repeat(auto-fit, minmax(${minCardWidth}, 1fr))`
|
|
177
|
+
: `repeat(${columns}, minmax(${minCardWidth}, ${maxCardWidth}))`
|
|
178
|
+
};
|
|
179
|
+
|
|
180
|
+
return (
|
|
181
|
+
<section
|
|
182
|
+
ref={containerRef}
|
|
183
|
+
className={`sf-feature-cards ${isVisible ? 'sf-feature-cards--visible' : ''} ${className}`}
|
|
184
|
+
>
|
|
185
|
+
<div className="sf-feature-cards__container">
|
|
186
|
+
{/* Header */}
|
|
187
|
+
<div className="sf-feature-cards__header">
|
|
188
|
+
<h2 className="sf-feature-cards__title">{title}</h2>
|
|
189
|
+
{subtitle && (
|
|
190
|
+
<p className="sf-feature-cards__subtitle">{subtitle}</p>
|
|
191
|
+
)}
|
|
192
|
+
</div>
|
|
193
|
+
|
|
194
|
+
{/* Feature Grid */}
|
|
195
|
+
<div
|
|
196
|
+
className="sf-feature-cards__grid"
|
|
197
|
+
style={gridStyle}
|
|
198
|
+
>
|
|
199
|
+
{features.map((feature, index) => (
|
|
200
|
+
<FeatureCard
|
|
201
|
+
key={index}
|
|
202
|
+
icon={feature.icon}
|
|
203
|
+
title={feature.title}
|
|
204
|
+
description={feature.description}
|
|
205
|
+
link={feature.link}
|
|
206
|
+
index={index}
|
|
207
|
+
animationDelay={index * 150}
|
|
208
|
+
isVisible={visibleCards.has(index)}
|
|
209
|
+
/>
|
|
210
|
+
))}
|
|
211
|
+
</div>
|
|
212
|
+
|
|
213
|
+
{/* Optional Call-to-Action */}
|
|
214
|
+
{features.length > 6 && (
|
|
215
|
+
<div className={`sf-feature-cards__cta ${isVisible ? 'sf-feature-cards__cta--visible' : ''}`}>
|
|
216
|
+
<button className="sf-feature-cards__cta-button">
|
|
217
|
+
View All Features
|
|
218
|
+
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2">
|
|
219
|
+
<path d="M5 12H19M12 5L19 12L12 19"/>
|
|
220
|
+
</svg>
|
|
221
|
+
</button>
|
|
222
|
+
</div>
|
|
223
|
+
)}
|
|
224
|
+
</div>
|
|
225
|
+
|
|
226
|
+
{/* Background Elements */}
|
|
227
|
+
<div className="sf-feature-cards__background">
|
|
228
|
+
<div className="sf-feature-cards__bg-grid"></div>
|
|
229
|
+
<div className="sf-feature-cards__bg-gradient"></div>
|
|
230
|
+
</div>
|
|
231
|
+
</section>
|
|
232
|
+
);
|
|
233
|
+
};
|
|
234
|
+
|
|
235
|
+
export default FeatureCards;
|