snow-flow 3.4.36 → 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/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,124 @@
|
|
|
1
|
+
import React, { useState, useEffect } from 'react';
|
|
2
|
+
import './Navigation.css';
|
|
3
|
+
|
|
4
|
+
const Navigation = ({
|
|
5
|
+
logo = "⚡",
|
|
6
|
+
brandName = "Snow-Flow",
|
|
7
|
+
navItems = [
|
|
8
|
+
{ href: "#home", label: "Home" },
|
|
9
|
+
{ href: "#features", label: "Features" },
|
|
10
|
+
{ href: "#about", label: "About" },
|
|
11
|
+
{ href: "#contact", label: "Contact" }
|
|
12
|
+
],
|
|
13
|
+
className = ""
|
|
14
|
+
}) => {
|
|
15
|
+
const [isOpen, setIsOpen] = useState(false);
|
|
16
|
+
const [scrolled, setScrolled] = useState(false);
|
|
17
|
+
const [activeSection, setActiveSection] = useState('home');
|
|
18
|
+
|
|
19
|
+
useEffect(() => {
|
|
20
|
+
const handleScroll = () => {
|
|
21
|
+
const scrollTop = window.pageYOffset;
|
|
22
|
+
setScrolled(scrollTop > 50);
|
|
23
|
+
|
|
24
|
+
// Update active section based on scroll position
|
|
25
|
+
const sections = navItems.map(item => item.href.replace('#', ''));
|
|
26
|
+
let current = 'home';
|
|
27
|
+
|
|
28
|
+
for (const section of sections) {
|
|
29
|
+
const element = document.getElementById(section);
|
|
30
|
+
if (element) {
|
|
31
|
+
const rect = element.getBoundingClientRect();
|
|
32
|
+
if (rect.top <= 100 && rect.bottom >= 100) {
|
|
33
|
+
current = section;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
setActiveSection(current);
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
window.addEventListener('scroll', handleScroll);
|
|
41
|
+
return () => window.removeEventListener('scroll', handleScroll);
|
|
42
|
+
}, [navItems]);
|
|
43
|
+
|
|
44
|
+
const handleNavClick = (e, href) => {
|
|
45
|
+
e.preventDefault();
|
|
46
|
+
setIsOpen(false);
|
|
47
|
+
|
|
48
|
+
if (href.startsWith('#')) {
|
|
49
|
+
const target = document.querySelector(href);
|
|
50
|
+
if (target) {
|
|
51
|
+
const offset = 80;
|
|
52
|
+
const targetPosition = target.offsetTop - offset;
|
|
53
|
+
window.scrollTo({
|
|
54
|
+
top: targetPosition,
|
|
55
|
+
behavior: 'smooth'
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
const toggleMobileMenu = () => {
|
|
62
|
+
setIsOpen(!isOpen);
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
return (
|
|
66
|
+
<nav className={`sf-nav ${scrolled ? 'sf-nav--scrolled' : ''} ${className}`}>
|
|
67
|
+
<div className="sf-nav__container">
|
|
68
|
+
{/* Logo and Brand */}
|
|
69
|
+
<div className="sf-nav__brand" onClick={(e) => handleNavClick(e, '#home')}>
|
|
70
|
+
<span className="sf-nav__logo">{logo}</span>
|
|
71
|
+
<span className="sf-nav__brand-name">{brandName}</span>
|
|
72
|
+
</div>
|
|
73
|
+
|
|
74
|
+
{/* Desktop Navigation */}
|
|
75
|
+
<ul className={`sf-nav__menu ${isOpen ? 'sf-nav__menu--open' : ''}`}>
|
|
76
|
+
{navItems.map((item, index) => (
|
|
77
|
+
<li key={index} className="sf-nav__item">
|
|
78
|
+
<a
|
|
79
|
+
href={item.href}
|
|
80
|
+
className={`sf-nav__link ${
|
|
81
|
+
activeSection === item.href.replace('#', '') ? 'sf-nav__link--active' : ''
|
|
82
|
+
}`}
|
|
83
|
+
onClick={(e) => handleNavClick(e, item.href)}
|
|
84
|
+
>
|
|
85
|
+
{item.label}
|
|
86
|
+
<span className="sf-nav__link-indicator"></span>
|
|
87
|
+
</a>
|
|
88
|
+
</li>
|
|
89
|
+
))}
|
|
90
|
+
|
|
91
|
+
{/* CTA Button */}
|
|
92
|
+
<li className="sf-nav__item">
|
|
93
|
+
<a href="#get-started" className="sf-nav__cta" onClick={(e) => handleNavClick(e, '#get-started')}>
|
|
94
|
+
Get Started
|
|
95
|
+
</a>
|
|
96
|
+
</li>
|
|
97
|
+
</ul>
|
|
98
|
+
|
|
99
|
+
{/* Mobile Hamburger */}
|
|
100
|
+
<button
|
|
101
|
+
className={`sf-nav__hamburger ${isOpen ? 'sf-nav__hamburger--open' : ''}`}
|
|
102
|
+
onClick={toggleMobileMenu}
|
|
103
|
+
aria-label="Toggle navigation menu"
|
|
104
|
+
>
|
|
105
|
+
<span></span>
|
|
106
|
+
<span></span>
|
|
107
|
+
<span></span>
|
|
108
|
+
</button>
|
|
109
|
+
</div>
|
|
110
|
+
|
|
111
|
+
{/* Scroll Progress Indicator */}
|
|
112
|
+
<div className="sf-nav__progress">
|
|
113
|
+
<div
|
|
114
|
+
className="sf-nav__progress-bar"
|
|
115
|
+
style={{
|
|
116
|
+
width: `${Math.min(100, (window.pageYOffset / (document.documentElement.scrollHeight - window.innerHeight)) * 100)}%`
|
|
117
|
+
}}
|
|
118
|
+
></div>
|
|
119
|
+
</div>
|
|
120
|
+
</nav>
|
|
121
|
+
);
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
export default Navigation;
|