@sudarshanaui/ui 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.
package/README.md ADDED
@@ -0,0 +1,78 @@
1
+ # @sudarshana/ui
2
+
3
+ <div align="center">
4
+ <img src="https://via.placeholder.com/150" alt="Sudarshana UI Logo" width="120" />
5
+ <h1>Sudarshana UI</h1>
6
+ <p><strong>Elegant. Modern. Infinite.</strong></p>
7
+ <p>The official React component library for the Sudarshana ecosystem.</p>
8
+
9
+ [![npm version](https://img.shields.io/npm/v/@sudarshana/ui.svg?style=flat-square)](https://www.npmjs.com/package/@sudarshana/ui)
10
+ [![License](https://img.shields.io/npm/l/@sudarshana/ui.svg?style=flat-square)](LICENSE)
11
+ </div>
12
+
13
+ ---
14
+
15
+ ## Introduction
16
+
17
+ **Sudarshana UI** is a meticulously crafted collection of React components designed to build immersive and high-performance web applications. Inspired by cosmic aesthetics and built for modern developers, it provides a seamless developer experience with award-winning visual quality.
18
+
19
+ ## Features
20
+
21
+ - 🎨 **Award-Winning Design**: Components inspired by top-tier design trends (Awwwards, Webby).
22
+ - 🧩 **Modular & Composable**: Import only what you need.
23
+ - ♿ **Accessible**: Built with WAI-ARIA standards in mind.
24
+ - ⚡ **High Performance**: Optimized for speed and minimal bundle size.
25
+ - 🌙 **Dark Mode Ready**: First-class support for dark themes.
26
+
27
+ ## Installation
28
+
29
+ Install the package via npm:
30
+
31
+ ```bash
32
+ npm install @sudarshana/ui
33
+ ```
34
+
35
+ Or using yarn:
36
+
37
+ ```bash
38
+ yarn add @sudarshana/ui
39
+ ```
40
+
41
+ ## Usage
42
+
43
+ Import components directly into your React application:
44
+
45
+ ```jsx
46
+ import React from 'react';
47
+ import { PrismButton, VoidCard } from '@sudarshana/ui';
48
+
49
+ const App = () => {
50
+ return (
51
+ <div className="app-container">
52
+ <VoidCard title="Welcome to Sudarshana">
53
+ <p>Explore the infinite possibilities.</p>
54
+ <PrismButton variant="cosmic" onClick={() => console.log('Clicked!')}>
55
+ Launch
56
+ </PrismButton>
57
+ </VoidCard>
58
+ </div>
59
+ );
60
+ };
61
+
62
+ export default App;
63
+ ```
64
+
65
+ ## Available Components
66
+
67
+ - **PrismButton**: A button component with prismatic light effects.
68
+ - **VoidCard**: A depth-defying card container.
69
+ - **LiquidToggle**: A fluid state toggle switch.
70
+ - ...and many more being added regularly.
71
+
72
+ ## Contributing
73
+
74
+ We welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details.
75
+
76
+ ## License
77
+
78
+ MIT © [Sudarshana Team](https://sudarshana.com)
package/index.js ADDED
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Sudarshana UI
3
+ * The official component library for Sudarshana.
4
+ *
5
+ * Auto-generated exports from published components.
6
+ */
7
+
8
+ export * from './src/FancyButton';
9
+ export * from './src/AnimatedCard';
10
+ export * from './src/AnimatedTextfield';
11
+ export * from './src/NormalOtp';
12
+ export * from './src/AnimatedOtp';
13
+ export * from './src/NormalFooter';
14
+ export * from './src/AnimatedFooter';
15
+ export * from './src/AdminchoiceKineticMarqueeButton';
16
+ export * from './src/AdminchoiceNoiseGlassCard';
17
+ export * from './src/AdminchoiceMagneticAttractionButton';
18
+ export * from './src/AdminchoiceRevealMaskText';
19
+ export * from './src/AdminchoiceLiquidMorphLoader';
20
+ export * from './src/AdminchoiceCreativeGridMenu';
21
+ export * from './src/AdminchoiceParallaxImageLink';
22
+ export * from './src/AdminchoiceGlitchTitle';
23
+ export * from './src/AdminchoiceInteractiveToggle';
24
+ export * from './src/AdminchoiceSpotlightInput';
25
+ export * from './src/Testing';
package/package.json ADDED
@@ -0,0 +1,36 @@
1
+ {
2
+ "name": "@sudarshanaui/ui",
3
+ "version": "1.0.0",
4
+ "description": "The official component library for Sudarshana - Elegant, modern, and accessible React components.",
5
+ "main": "index.js",
6
+ "publishConfig": {
7
+ "access": "public"
8
+ },
9
+ "scripts": {
10
+ "test": "echo \"Error: no test specified\" && exit 1"
11
+ },
12
+ "repository": {
13
+ "type": "git",
14
+ "url": "git+https://github.com/Start-Up-Sudarshana/sudarshana.git"
15
+ },
16
+ "keywords": [
17
+ "sudarshana",
18
+ "ui",
19
+ "react",
20
+ "components",
21
+ "design-system",
22
+ "accessible",
23
+ "modern"
24
+ ],
25
+ "author": "Sudarshana Team <contact@sudarshana.com>",
26
+ "license": "MIT",
27
+ "bugs": {
28
+ "url": "https://github.com/Start-Up-Sudarshana/sudarshana/issues"
29
+ },
30
+ "homepage": "https://sudarshana.com",
31
+ "dependencies": {},
32
+ "peerDependencies": {
33
+ "react": ">=18.0.0",
34
+ "react-dom": ">=18.0.0"
35
+ }
36
+ }
@@ -0,0 +1,39 @@
1
+ import React from 'react';
2
+
3
+ /**
4
+ * AdminChoice - Creative Grid Menu
5
+ * Generated from Sudarshana DB
6
+ */
7
+
8
+ const styles = `
9
+ .brut-nav { display: flex; flex-direction: column; border: 1px solid #fff; width: 220px; background: #000; }
10
+ .brut-link { display: flex; justify-content: space-between; padding: 24px; color: #fff; text-decoration: none; font-family: arial, sans-serif; font-weight: bold; border-bottom: 1px solid #fff; position: relative; overflow: hidden; transition: color 0.3s, padding 0.3s; }
11
+ .brut-link:last-child { border-bottom: none; }
12
+ .brut-link::before { content: ""; position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: #fff; transform: translateX(-101%); transition: transform 0.4s cubic-bezier(0.22, 1, 0.36, 1); z-index: -1; }
13
+ .brut-link:hover { color: #000; padding-left: 34px; }
14
+ .brut-link:hover::before { transform: translateX(0); }
15
+ .brut-link:active { opacity: 0.8; }
16
+ .brut-link span { font-family: monospace; opacity: 0.5; transition: opacity 0.3s; }
17
+ .brut-link:hover span { opacity: 1; }
18
+
19
+ `;
20
+
21
+ export const AdminchoiceCreativeGridMenu = (props) => {
22
+ let html = `
23
+ <nav class="brut-nav">
24
+ <a href="#" class="brut-link"><span>01</span> WORK</a>
25
+ <a href="#" class="brut-link"><span>02</span> STUDIO</a>
26
+ <a href="#" class="brut-link"><span>03</span> CONTACT</a>
27
+ </nav>
28
+ `;
29
+
30
+ // Inject props
31
+
32
+
33
+ return (
34
+ <div {...(propsList.length === 0 ? props : rest)} className="sudarshana-component-AdminchoiceCreativeGridMenu">
35
+ <style>{styles}</style>
36
+ <div dangerouslySetInnerHTML={{ __html: html }} />
37
+ </div>
38
+ );
39
+ };
@@ -0,0 +1,35 @@
1
+ import React from 'react';
2
+
3
+ /**
4
+ * AdminChoice - Glitch Title
5
+ * Generated from Sudarshana DB
6
+ */
7
+
8
+ const styles = `
9
+ .rgb-text { font-family: monospace; font-weight: bold; font-size: 48px; color: #fff; position: relative; mix-blend-mode: lighten; cursor: help; transition: transform 0.2s; }
10
+ .rgb-text:hover { transform: scale(1.05) skewX(-2deg); }
11
+ .rgb-text::before, .rgb-text::after { content: attr(data-text); position: absolute; top: 0; left: 0; width: 100%; height: 100%; opacity: 0.8; transition: animation-duration 0.2s; }
12
+ .rgb-text:hover::before { animation-duration: 0.1s; }
13
+ .rgb-text:hover::after { animation-duration: 0.1s; }
14
+ .rgb-text::before { color: #ff0000; z-index: -1; animation: rgb-1 8s infinite; }
15
+ .rgb-text::after { color: #0000ff; z-index: -2; animation: rgb-2 8s infinite; }
16
+ @keyframes rgb-1 { 0%,100%: [object Object]; 20%: [object Object]; 40%: [object Object]; 60%: [object Object]; 80%: [object Object]; }
17
+ @keyframes rgb-2 { 0%,100%: [object Object]; 25%: [object Object]; 50%: [object Object]; 75%: [object Object]; }
18
+
19
+ `;
20
+
21
+ export const AdminchoiceGlitchTitle = (props) => {
22
+ let html = `
23
+ <h1 class="rgb-text" data-text="SYSTEM_FAILURE">SYSTEM_FAILURE</h1>
24
+ `;
25
+
26
+ // Inject props
27
+
28
+
29
+ return (
30
+ <div {...(propsList.length === 0 ? props : rest)} className="sudarshana-component-AdminchoiceGlitchTitle">
31
+ <style>{styles}</style>
32
+ <div dangerouslySetInnerHTML={{ __html: html }} />
33
+ </div>
34
+ );
35
+ };
@@ -0,0 +1,41 @@
1
+ import React from 'react';
2
+
3
+ /**
4
+ * AdminChoice - Interactive Toggle
5
+ * Generated from Sudarshana DB
6
+ */
7
+
8
+ const styles = `
9
+ .pill-toggle { position: fixed; width: 80px; height: 36px; cursor: pointer; }
10
+ .pill-toggle input { display: none; }
11
+ .pill-track { width: 100%; height: 100%; background: #222; border-radius: 36px; display: flex; justify-content: space-between; align-items: center; padding: 0 12px; box-sizing: border-box; font-family: sans-serif; font-size: 10px; font-weight: bold; color: #555; transition: background 0.3s; }
12
+ .pill-toggle:hover .pill-track { background: #333; }
13
+ .pill-thumb { position: absolute; top: 3px; left: 3px; width: 30px; height: 30px; background: #fff; border-radius: 50%; transition: all 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275); }
14
+ .pill-toggle:active .pill-thumb { width: 36px; }
15
+ input:checked ~ .pill-thumb { transform: translateX(44px); background: #00ff88; }
16
+ input:checked ~ .pill-track .label-on { color: #fff; }
17
+
18
+ `;
19
+
20
+ export const AdminchoiceInteractiveToggle = (props) => {
21
+ let html = `
22
+ <label class="pill-toggle">
23
+ <input type="checkbox">
24
+ <div class="pill-track">
25
+ <span class="label-off">OFF</span>
26
+ <span class="label-on">ON</span>
27
+ </div>
28
+ <div class="pill-thumb"></div>
29
+ </label>
30
+ `;
31
+
32
+ // Inject props
33
+
34
+
35
+ return (
36
+ <div {...(propsList.length === 0 ? props : rest)} className="sudarshana-component-AdminchoiceInteractiveToggle">
37
+ <style>{styles}</style>
38
+ <div dangerouslySetInnerHTML={{ __html: html }} />
39
+ </div>
40
+ );
41
+ };
@@ -0,0 +1,48 @@
1
+ import React from 'react';
2
+
3
+ /**
4
+ * AdminChoice - Kinetic Marquee Button
5
+ * Generated from Sudarshana DB
6
+ */
7
+
8
+ const styles = `
9
+ .kinetic-mag-btn { position: relative; width: 240px; height: 64px; background: #111; border: none; border-radius: 32px; overflow: hidden; cursor: pointer; color: #fff; font-family: sans-serif; font-weight: 800; transition: transform 0.6s cubic-bezier(0.165, 0.84, 0.44, 1), background 0.3s; }
10
+ .kinetic-mag-btn:hover { transform: scale(1.05) rotate(-1deg); background: #222; }
11
+ .kinetic-mag-btn:active { transform: scale(0.95) rotate(0deg); transition: transform 0.1s; }
12
+ .marquee-wrap { display: flex; width: 100%; height: 100%; align-items: center; mask-image: linear-gradient(90deg, transparent, #000 15%, #000 85%, transparent); }
13
+ .marquee-track { display: flex; align-items: center; white-space: nowrap; animation: k-scroll 6s linear infinite; transition: animation-duration 0.3s; }
14
+ .kinetic-mag-btn:hover .marquee-track { animation-duration: 3s; }
15
+ .marquee-track span { padding-left: 20px; font-size: 16px; }
16
+ .icon { width: 20px; height: 20px; margin-left: 10px; margin-right: 10px; }
17
+ @keyframes k-scroll { 0%: [object Object]; 100%: [object Object]; }
18
+
19
+ `;
20
+
21
+ export const AdminchoiceKineticMarqueeButton = (props) => {
22
+ let html = `
23
+ <button class="kinetic-mag-btn">
24
+ <div class="marquee-wrap">
25
+ <div class="marquee-track">
26
+ <span>START PROJECT</span><img src="https://api.iconify.design/ph:arrow-right-bold.svg?color=white" class="icon"/>
27
+ <span>START PROJECT</span><img src="https://api.iconify.design/ph:arrow-right-bold.svg?color=white" class="icon"/>
28
+ <span>START PROJECT</span><img src="https://api.iconify.design/ph:arrow-right-bold.svg?color=white" class="icon"/>
29
+ </div>
30
+ <div class="marquee-track">
31
+ <span>START PROJECT</span><img src="https://api.iconify.design/ph:arrow-right-bold.svg?color=white" class="icon"/>
32
+ <span>START PROJECT</span><img src="https://api.iconify.design/ph:arrow-right-bold.svg?color=white" class="icon"/>
33
+ <span>START PROJECT</span><img src="https://api.iconify.design/ph:arrow-right-bold.svg?color=white" class="icon"/>
34
+ </div>
35
+ </div>
36
+ </button>
37
+ `;
38
+
39
+ // Inject props
40
+
41
+
42
+ return (
43
+ <div {...(propsList.length === 0 ? props : rest)} className="sudarshana-component-AdminchoiceKineticMarqueeButton">
44
+ <style>{styles}</style>
45
+ <div dangerouslySetInnerHTML={{ __html: html }} />
46
+ </div>
47
+ );
48
+ };
@@ -0,0 +1,40 @@
1
+ import React from 'react';
2
+
3
+ /**
4
+ * AdminChoice - Liquid Morph Loader
5
+ * Generated from Sudarshana DB
6
+ */
7
+
8
+ const styles = `
9
+ .gooey-wrap { width: 100px; height: 100px; position: relative; filter: url(#goo-sharp); cursor: wait; transition: transform 0.3s; }
10
+ .gooey-wrap:hover { transform: scale(1.1); }
11
+ .blobs { width: 100%; height: 100%; animation: rotate-g 4s linear infinite; }
12
+ .blob-main { position: absolute; top: 35px; left: 35px; width: 30px; height: 30px; background: #fff; border-radius: 50%; transition: background 0.3s; }
13
+ .blob-orbit { position: absolute; top: 10px; left: 40px; width: 20px; height: 20px; background: #fff; border-radius: 50%; animation: orbit-g 2s ease-in-out infinite alternate; transition: background 0.3s; }
14
+ .gooey-wrap:active .blob-main, .gooey-wrap:active .blob-orbit { background: #00ff88; }
15
+ @keyframes rotate-g { to: [object Object]; }
16
+ @keyframes orbit-g { 0%: [object Object]; 100%: [object Object]; }
17
+
18
+ `;
19
+
20
+ export const AdminchoiceLiquidMorphLoader = (props) => {
21
+ let html = `
22
+ <div class="gooey-wrap">
23
+ <svg style="width:0;height:0;position:absolute;"><filter id="goo-sharp"><feGaussianBlur in="SourceGraphic" stdDeviation="10" result="blur"/><feColorMatrix in="blur" values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 20 -9" result="goo"/><feComposite in="SourceGraphic" in2="goo" operator="atop"/></filter></svg>
24
+ <div class="blobs">
25
+ <div class="blob-main"></div>
26
+ <div class="blob-orbit"></div>
27
+ </div>
28
+ </div>
29
+ `;
30
+
31
+ // Inject props
32
+
33
+
34
+ return (
35
+ <div {...(propsList.length === 0 ? props : rest)} className="sudarshana-component-AdminchoiceLiquidMorphLoader">
36
+ <style>{styles}</style>
37
+ <div dangerouslySetInnerHTML={{ __html: html }} />
38
+ </div>
39
+ );
40
+ };
@@ -0,0 +1,39 @@
1
+ import React from 'react';
2
+
3
+ /**
4
+ * AdminChoice - Magnetic Attraction Button
5
+ * Generated from Sudarshana DB
6
+ */
7
+
8
+ const styles = `
9
+ .magnet-core { position: relative; padding: 25px 50px; background: black; border: 1px solid rgba(255,255,255,0.3); border-radius: 100px; color: #fff; font-family: sans-serif; font-weight: 600; cursor: pointer; overflow: hidden; transition: all 0.4s cubic-bezier(0.2, 0.8, 0.2, 1); }
10
+ .magnet-field { position: absolute; top: 50%; left: 50%; width: 0; height: 0; background: #fff; border-radius: 50%; transform: translate(-50%, -50%); transition: width 0.6s cubic-bezier(0.19, 1, 0.22, 1), height 0.6s cubic-bezier(0.19, 1, 0.22, 1); z-index: -1; }
11
+ .magnet-core:hover .magnet-field { width: 350px; height: 350px; }
12
+ .magnet-core:hover { color: #000; border-color: transparent; transform: scale(1.05); }
13
+ .magnet-core:active { transform: scale(0.95); }
14
+ .magnet-ripple { position: absolute; top: 50%; left: 50%; width: 100%; height: 100%; border: 2px solid #fff; border-radius: 100px; transform: translate(-50%, -50%) scale(1); opacity: 0; pointer-events: none; }
15
+ .magnet-core:active .magnet-ripple { animation: mag-ping 0.6s cubic-bezier(0, 0, 0.2, 1); }
16
+ .magnet-text { position: relative; z-index: 2; }
17
+ @keyframes mag-ping { 75%, 100%: [object Object]; 0%: [object Object]; }
18
+
19
+ `;
20
+
21
+ export const AdminchoiceMagneticAttractionButton = (props) => {
22
+ let html = `
23
+ <button class="magnet-core">
24
+ <span class="magnet-text">MAGNETIC</span>
25
+ <div class="magnet-field"></div>
26
+ <div class="magnet-ripple"></div>
27
+ </button>
28
+ `;
29
+
30
+ // Inject props
31
+
32
+
33
+ return (
34
+ <div {...(propsList.length === 0 ? props : rest)} className="sudarshana-component-AdminchoiceMagneticAttractionButton">
35
+ <style>{styles}</style>
36
+ <div dangerouslySetInnerHTML={{ __html: html }} />
37
+ </div>
38
+ );
39
+ };
@@ -0,0 +1,43 @@
1
+ import React from 'react';
2
+
3
+ /**
4
+ * AdminChoice - Noise Glass Card
5
+ * Generated from Sudarshana DB
6
+ */
7
+
8
+ const styles = `
9
+ .grain-card { width: 280px; height: 380px; position: relative; background: rgba(20, 20, 20, 0.6); backdrop-filter: blur(24px) saturate(180%); -webkit-backdrop-filter: blur(24px) saturate(180%); border: 1px solid rgba(255,255,255,0.1); border-radius: 24px; overflow: hidden; cursor: pointer; transition: transform 0.6s cubic-bezier(0.22, 1, 0.36, 1), background 0.6s, box-shadow 0.6s; }
10
+ .grain-bg { position: absolute; inset: -50%; background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 400 400' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)' opacity='0.08'/%3E%3C/svg%3E"); opacity: 0.3; pointer-events: none; transition: opacity 0.6s; }
11
+ .grain-content { position: absolute; inset: 0; padding: 30px; display: flex; flex-direction: column; justify-content: flex-end; color: #fff; z-index: 2; transition: transform 0.6s cubic-bezier(0.22, 1, 0.36, 1); }
12
+ .grain-card:hover { background: rgba(255,255,255,0.15); transform: translateY(-15px) scale(1.02) rotateX(2deg); box-shadow: 0 30px 60px rgba(0,0,0,0.5); }
13
+ .grain-card:hover .grain-bg { opacity: 0.6; }
14
+ .grain-card:hover .grain-content { transform: translateY(-10px); }
15
+ .grain-card:active { transform: translateY(-5px) scale(0.98); box-shadow: 0 10px 30px rgba(0,0,0,0.3); transition: all 0.1s; }
16
+ .badge { align-self: flex-start; padding: 6px 12px; background: #fff; color: #000; border-radius: 100px; font-size: 10px; font-weight: bold; margin-bottom: auto; }
17
+ .grain-content h3 { font-family: arial, sans-serif; font-weight: 900; font-size: 36px; margin: 0 0 10px 0; letter-spacing: -1px; }
18
+ .grain-content p { font-family: monospace; opacity: 0.6; margin: 0; }
19
+
20
+ `;
21
+
22
+ export const AdminchoiceNoiseGlassCard = (props) => {
23
+ let html = `
24
+ <div class="grain-card">
25
+ <div class="grain-bg"></div>
26
+ <div class="grain-content">
27
+ <div class="badge">NEW</div>
28
+ <h3>FROSTED</h3>
29
+ <p>Hyper-realistic Grain</p>
30
+ </div>
31
+ </div>
32
+ `;
33
+
34
+ // Inject props
35
+
36
+
37
+ return (
38
+ <div {...(propsList.length === 0 ? props : rest)} className="sudarshana-component-AdminchoiceNoiseGlassCard">
39
+ <style>{styles}</style>
40
+ <div dangerouslySetInnerHTML={{ __html: html }} />
41
+ </div>
42
+ );
43
+ };
@@ -0,0 +1,35 @@
1
+ import React from 'react';
2
+
3
+ /**
4
+ * AdminChoice - Parallax Image Link
5
+ * Generated from Sudarshana DB
6
+ */
7
+
8
+ const styles = `
9
+ .hover-img-link { position: relative; display: inline-block; text-decoration: none; cursor: none; padding: 10px; }
10
+ .link-text { font-family: times new roman, serif; font-style: italic; font-size: 48px; color: #fff; border-bottom: 1px solid rgba(255,255,255,0.3); transition: all 0.3s; }
11
+ .img-float { position: absolute; top: 50%; left: 100%; width: 200px; height: 140px; background-size: cover; background-position: center; transform: translate(20px, -50%) scale(0) rotate(-10deg); opacity: 0; pointer-events: none; border-radius: 8px; transition: all 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275); }
12
+ .hover-img-link:hover .img-float { opacity: 1; transform: translate(40px, -50%) scale(1) rotate(0deg); }
13
+ .hover-img-link:hover .link-text { opacity: 0.5; letter-spacing: 2px; }
14
+ .hover-img-link:active .link-text { opacity: 0.2; }
15
+
16
+ `;
17
+
18
+ export const AdminchoiceParallaxImageLink = (props) => {
19
+ let html = `
20
+ <a href="#" class="hover-img-link" data-label="VIEW CASE">
21
+ <span class="link-text">ARCHITECTURE</span>
22
+ <div class="img-float" style="background-image: url('https://picsum.photos/300/200?grayscale')"></div>
23
+ </a>
24
+ `;
25
+
26
+ // Inject props
27
+
28
+
29
+ return (
30
+ <div {...(propsList.length === 0 ? props : rest)} className="sudarshana-component-AdminchoiceParallaxImageLink">
31
+ <style>{styles}</style>
32
+ <div dangerouslySetInnerHTML={{ __html: html }} />
33
+ </div>
34
+ );
35
+ };
@@ -0,0 +1,33 @@
1
+ import React from 'react';
2
+
3
+ /**
4
+ * AdminChoice - Reveal Mask Text
5
+ * Generated from Sudarshana DB
6
+ */
7
+
8
+ const styles = `
9
+ .masked-h1 { font-family: impact, sans-serif; font-size: 90px; color: #222; margin: 0; position: relative; cursor: crosshair; user-select: none; line-height: 1; transition: transform 0.4s; }
10
+ .masked-h1::before { content: attr(data-label); position: absolute; top: 0; left: 0; color: transparent; background: linear-gradient(45deg, #ff0055, #0000ff); -webkit-background-clip: text; background-clip: text; clip-path: circle(0% at 50% 50%); transition: clip-path 0.5s cubic-bezier(0.22, 1, 0.36, 1); }
11
+ .masked-h1:hover::before { clip-path: circle(100% at 50% 50%); }
12
+ .masked-h1:hover { transform: scale(1.02); }
13
+ .masked-h1:active { transform: scale(0.98); }
14
+
15
+ `;
16
+
17
+ export const AdminchoiceRevealMaskText = (props) => {
18
+ let html = `
19
+ <h1 class="masked-h1" data-label="CREATIVE">
20
+ CREATIVE
21
+ </h1>
22
+ `;
23
+
24
+ // Inject props
25
+
26
+
27
+ return (
28
+ <div {...(propsList.length === 0 ? props : rest)} className="sudarshana-component-AdminchoiceRevealMaskText">
29
+ <style>{styles}</style>
30
+ <div dangerouslySetInnerHTML={{ __html: html }} />
31
+ </div>
32
+ );
33
+ };
@@ -0,0 +1,39 @@
1
+ import React from 'react';
2
+
3
+ /**
4
+ * AdminChoice - Spotlight Input
5
+ * Generated from Sudarshana DB
6
+ */
7
+
8
+ const styles = `
9
+ .halo-input { position: relative; width: 300px; background: #000; border-radius: 12px; padding: 1px; overflow: visible; transition: transform 0.2s; }
10
+ .halo-input:hover { transform: scale(1.02); }
11
+ .halo-border { position: absolute; top: -100%; left: -100%; width: 300%; height: 300%; background: conic-gradient(from 0deg, transparent 0%, #fff 10%, transparent 20%); animation: halo-spin 3s linear infinite; opacity: 0; transition: opacity 0.3s; pointer-events: none; }
12
+ .halo-glow { position: absolute; inset: 0; background: radial-gradient(circle at 50% 50%, rgba(255,255,255,0.2), transparent 70%); opacity: 0; transition: opacity 0.4s; }
13
+ .halo-input:hover .halo-glow { opacity: 1; }
14
+ .halo-input:focus-within .halo-border { opacity: 1; }
15
+ .halo-input input { position: relative; width: 100%; padding: 16px; background: #111; border: none; color: #fff; border-radius: 11px; outline: none; font-family: monospace; z-index: 2; transition: background 0.3s; }
16
+ .halo-input:hover input { background: #1a1a1a; }
17
+ @keyframes halo-spin { to: [object Object]; }
18
+
19
+ `;
20
+
21
+ export const AdminchoiceSpotlightInput = (props) => {
22
+ let html = `
23
+ <div class="halo-input">
24
+ <input type="email" placeholder="notify@me.com">
25
+ <div class="halo-border"></div>
26
+ <div class="halo-glow"></div>
27
+ </div>
28
+ `;
29
+
30
+ // Inject props
31
+
32
+
33
+ return (
34
+ <div {...(propsList.length === 0 ? props : rest)} className="sudarshana-component-AdminchoiceSpotlightInput">
35
+ <style>{styles}</style>
36
+ <div dangerouslySetInnerHTML={{ __html: html }} />
37
+ </div>
38
+ );
39
+ };
@@ -0,0 +1,38 @@
1
+ import React from 'react';
2
+
3
+ /**
4
+ * Animated Card
5
+ * Generated from Sudarshana DB
6
+ */
7
+
8
+ const styles = `
9
+ .card-anim { border-radius: 12px; overflow: hidden; max-width: 300px; background: white; box-shadow: 0 4px 6px rgba(0,0,0,0.1); transition: transform 0.3s ease, box-shadow 0.3s ease; cursor: pointer; color: #333; }
10
+ .card-anim:hover { transform: translateY(-10px); box-shadow: 0 20px 25px -5px rgba(0,0,0,0.1), 0 10px 10px -5px rgba(0,0,0,0.04); }
11
+ .img-placeholder { height: 150px; background: linear-gradient(120deg, #84fab0 0%, #8fd3f4 100%); }
12
+ .content { padding: 20px; }
13
+ h3 { margin: 0 0 10px 0; }
14
+
15
+ `;
16
+
17
+ export const AnimatedCard = ({ title = "Hover Card", content = "Hover over me to see the effect!", ...rest }) => {
18
+ let html = `
19
+ <div class="card-anim">
20
+ <div class="img-placeholder"></div>
21
+ <div class="content">
22
+ <h3>{{title}}</h3>
23
+ <p>{{content}}</p>
24
+ </div>
25
+ </div>
26
+ `;
27
+
28
+ // Inject props
29
+ html = html.replaceAll('{{title}}', title);
30
+ html = html.replaceAll('{{content}}', content);
31
+
32
+ return (
33
+ <div {...(propsList.length === 0 ? props : rest)} className="sudarshana-component-AnimatedCard">
34
+ <style>{styles}</style>
35
+ <div dangerouslySetInnerHTML={{ __html: html }} />
36
+ </div>
37
+ );
38
+ };
@@ -0,0 +1,42 @@
1
+ import React from 'react';
2
+
3
+ /**
4
+ * Animated Footer
5
+ * Generated from Sudarshana DB
6
+ */
7
+
8
+ const styles = `
9
+ .footer-anim { position: relative; background: #333; color: white; padding: 50px 20px; text-align: center; overflow: hidden; margin-top: 50px; }
10
+ .content { position: relative; z-index: 2; }
11
+ .socials { display: flex; justify-content: center; gap: 20px; margin-bottom: 20px; }
12
+ .soc { width: 40px; height: 40px; border-radius: 50%; background: rgba(255,255,255,0.1); display: flex; align-items: center; justify-content: center; color: white; text-decoration: none; transition: transform 0.3s, background 0.3s; }
13
+ .soc:hover { transform: translateY(-5px) rotate(10deg); background: #6200ea; }
14
+ .wave { position: absolute; top: -50px; left: 0; width: 100%; height: 100px; background: white; border-radius: 0 0 50% 50% / 0 0 100% 100%; transform: scaleX(1.5); }
15
+
16
+ `;
17
+
18
+ export const AnimatedFooter = (props) => {
19
+ let html = `
20
+ <footer class="footer-anim">
21
+ <div class="wave"></div>
22
+ <div class="content">
23
+ <div class="socials">
24
+ <a href="#" class="soc">Tw</a>
25
+ <a href="#" class="soc">In</a>
26
+ <a href="#" class="soc">Fb</a>
27
+ </div>
28
+ <p>Designed with ❤️ by You</p>
29
+ </div>
30
+ </footer>
31
+ `;
32
+
33
+ // Inject props
34
+
35
+
36
+ return (
37
+ <div {...(propsList.length === 0 ? props : rest)} className="sudarshana-component-AnimatedFooter">
38
+ <style>{styles}</style>
39
+ <div dangerouslySetInnerHTML={{ __html: html }} />
40
+ </div>
41
+ );
42
+ };
@@ -0,0 +1,28 @@
1
+ import React from 'react';
2
+
3
+ /**
4
+ * Animated OTP
5
+ * Generated from Sudarshana DB
6
+ */
7
+
8
+ const styles = `
9
+ .otp-anim { display: flex; gap: 12px; }
10
+ input { width: 50px; height: 60px; text-align: center; font-size: 24px; background: #f0f0f0; border: 2px solid transparent; border-radius: 12px; outline: none; transition: all 0.3s cubic-bezier(0.68, -0.55, 0.265, 1.55); color: #333; }
11
+ input:focus { transform: translateY(-5px) scale(1.1); border-color: #6200ea; background: white; box-shadow: 0 10px 20px rgba(98, 0, 234, 0.2); }
12
+ @keyframes shake { 0%, 100%: [object Object]; 20%, 60%: [object Object]; 40%, 80%: [object Object]; }
13
+
14
+ `;
15
+
16
+ export const AnimatedOtp = (props) => {
17
+ let html = `<div class="otp-anim"><input type="text" maxlength="1" placeholder="•" /><input type="text" maxlength="1" placeholder="•" /><input type="text" maxlength="1" placeholder="•" /><input type="text" maxlength="1" placeholder="•" /></div>`;
18
+
19
+ // Inject props
20
+
21
+
22
+ return (
23
+ <div {...(propsList.length === 0 ? props : rest)} className="sudarshana-component-AnimatedOtp">
24
+ <style>{styles}</style>
25
+ <div dangerouslySetInnerHTML={{ __html: html }} />
26
+ </div>
27
+ );
28
+ };
@@ -0,0 +1,34 @@
1
+ import React from 'react';
2
+
3
+ /**
4
+ * Animated TextField
5
+ * Generated from Sudarshana DB
6
+ */
7
+
8
+ const styles = `
9
+ .input-group { position: relative; margin-top: 20px; }
10
+ .input-anim { width: 100%; padding: 10px 0; border: none; border-bottom: 2px solid #999; outline: none; background: transparent; color: #333; transition: border-color 0.3s; }
11
+ .input-anim:focus { border-color: #6200ea; }
12
+ .label-anim { position: absolute; top: 10px; left: 0; color: #999; pointer-events: none; transition: 0.3s ease all; }
13
+ .input-anim:focus ~ .label-anim, .input-anim:not(:placeholder-shown) ~ .label-anim { top: -20px; font-size: 12px; color: #6200ea; }
14
+
15
+ `;
16
+
17
+ export const AnimatedTextfield = ({ label = "Username", ...rest }) => {
18
+ let html = `
19
+ <div class="input-group">
20
+ <input type="text" class="input-anim" placeholder=" " />
21
+ <label class="label-anim">{{label}}</label>
22
+ </div>
23
+ `;
24
+
25
+ // Inject props
26
+ html = html.replaceAll('{{label}}', label);
27
+
28
+ return (
29
+ <div {...(propsList.length === 0 ? props : rest)} className="sudarshana-component-AnimatedTextfield">
30
+ <style>{styles}</style>
31
+ <div dangerouslySetInnerHTML={{ __html: html }} />
32
+ </div>
33
+ );
34
+ };
@@ -0,0 +1,27 @@
1
+ import React from 'react';
2
+
3
+ /**
4
+ * fancy button
5
+ * Generated from Sudarshana DB
6
+ */
7
+
8
+ const styles = `
9
+ .btn-anim { padding: 12px 24px; background: linear-gradient(25deg, #EF8B4A 50%, #FF6E64 40%); color: white; border: none; border-radius: 25px; cursor: wait; font-size: 16px; transition: transform 0.2s, box-shadow 0.2s; box-shadow: 0 3px 5px 2px rgba(255, 105, 135, .3); }
10
+ .btn-anim:hover { transform: scale(1.05); box-shadow: 0 3px 15px 2px rgba(255, 105, 135, .5); }
11
+ .btn-anim:active { transform: scale(0.95); }
12
+
13
+ `;
14
+
15
+ export const FancyButton = ({ label = "yo yes", ...rest }) => {
16
+ let html = `<button class="btn-anim">{{label}}</button>`;
17
+
18
+ // Inject props
19
+ html = html.replaceAll('{{label}}', label);
20
+
21
+ return (
22
+ <div {...(propsList.length === 0 ? props : rest)} className="sudarshana-component-FancyButton">
23
+ <style>{styles}</style>
24
+ <div dangerouslySetInnerHTML={{ __html: html }} />
25
+ </div>
26
+ );
27
+ };
@@ -0,0 +1,47 @@
1
+ import React from 'react';
2
+
3
+ /**
4
+ * Normal Footer
5
+ * Generated from Sudarshana DB
6
+ */
7
+
8
+ const styles = `
9
+ .footer { display: flex; justify-content: space-around; padding: 40px 20px; background: #f8f9fa; color: #333; border-top: 1px solid #eee; }
10
+ .col { display: flex; flex-direction: column; gap: 10px; }
11
+ h4 { margin: 0 0 10px 0; }
12
+ a { text-decoration: none; color: #666; }
13
+ a:hover { color: #000; }
14
+
15
+ `;
16
+
17
+ export const NormalFooter = (props) => {
18
+ let html = `
19
+ <footer class="footer">
20
+ <div class="col">
21
+ <h4>Brand</h4>
22
+ <p>© 2024 All rights reserved.</p>
23
+ </div>
24
+ <div class="col">
25
+ <h4>Links</h4>
26
+ <a href="#">Home</a>
27
+ <a href="#">About</a>
28
+ <a href="#">Contact</a>
29
+ </div>
30
+ <div class="col">
31
+ <h4>Social</h4>
32
+ <a href="#">Twitter</a>
33
+ <a href="#">GitHub</a>
34
+ </div>
35
+ </footer>
36
+ `;
37
+
38
+ // Inject props
39
+
40
+
41
+ return (
42
+ <div {...(propsList.length === 0 ? props : rest)} className="sudarshana-component-NormalFooter">
43
+ <style>{styles}</style>
44
+ <div dangerouslySetInnerHTML={{ __html: html }} />
45
+ </div>
46
+ );
47
+ };
@@ -0,0 +1,26 @@
1
+ import React from 'react';
2
+
3
+ /**
4
+ * Normal OTP
5
+ * Generated from Sudarshana DB
6
+ */
7
+
8
+ const styles = `
9
+ .otp-group { display: flex; gap: 10px; }
10
+ input { width: 40px; height: 40px; text-align: center; font-size: 18px; border: 1px solid #ccc; border-radius: 4px; }
11
+
12
+ `;
13
+
14
+ export const NormalOtp = (props) => {
15
+ let html = `<div class="otp-group"><input type="text" maxlength="1" /><input type="text" maxlength="1" /><input type="text" maxlength="1" /><input type="text" maxlength="1" /></div>`;
16
+
17
+ // Inject props
18
+
19
+
20
+ return (
21
+ <div {...(propsList.length === 0 ? props : rest)} className="sudarshana-component-NormalOtp">
22
+ <style>{styles}</style>
23
+ <div dangerouslySetInnerHTML={{ __html: html }} />
24
+ </div>
25
+ );
26
+ };
@@ -0,0 +1,39 @@
1
+ import React from 'react';
2
+
3
+ /**
4
+ * testing
5
+ * Generated from Sudarshana DB
6
+ */
7
+
8
+ const styles = `
9
+ .brut-nav { display: flex; flex-direction: column; border: 1px solid #fff; width: 220px; background: #712; }
10
+ .brut-link { display: flex; justify-content: space-between; padding: 24px; color: #fff; text-decoration: none; font-family: arial, sans-serif; font-weight: bold; border-bottom: 1px solid #fff; position: relative; overflow: hidden; transition: color 0.3s, padding 0.3s; }
11
+ .brut-link:last-child { border-bottom: none; }
12
+ .brut-link::before { content: ""; position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: #fff; transform: translateX(-101%); transition: transform 0.4s cubic-bezier(0.22, 1, 0.36, 1); z-index: -1; }
13
+ .brut-link:hover { color: #000; padding-left: 34px; }
14
+ .brut-link:hover::before { transform: translateX(0); }
15
+ .brut-link:active { opacity: 0.8; }
16
+ .brut-link span { font-family: monospace; opacity: 0.5; transition: opacity 0.3s; }
17
+ .brut-link:hover span { opacity: 1; }
18
+
19
+ `;
20
+
21
+ export const Testing = (props) => {
22
+ let html = `
23
+ <nav class="brut-nav">
24
+ <a href="#" class="brut-link"><span>01</span> WORK</a>
25
+ <a href="#" class="brut-link"><span>02</span> STUDIO</a>
26
+ <a href="#" class="brut-link"><span>03</span> CONTACT</a>
27
+ </nav>
28
+ `;
29
+
30
+ // Inject props
31
+
32
+
33
+ return (
34
+ <div {...(propsList.length === 0 ? props : rest)} className="sudarshana-component-Testing">
35
+ <style>{styles}</style>
36
+ <div dangerouslySetInnerHTML={{ __html: html }} />
37
+ </div>
38
+ );
39
+ };