acidui-core 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 (194) hide show
  1. package/README.md +127 -0
  2. package/eslint.config.js +23 -0
  3. package/git +0 -0
  4. package/index.html +13 -0
  5. package/package.json +38 -0
  6. package/public/vite.svg +1 -0
  7. package/src/App.css +8 -0
  8. package/src/App.tsx +26 -0
  9. package/src/assets/react.svg +1 -0
  10. package/src/cli/main.mjs +209 -0
  11. package/src/components/AcidAccordion.css +52 -0
  12. package/src/components/AcidAccordion.tsx +72 -0
  13. package/src/components/AcidAlert.css +86 -0
  14. package/src/components/AcidAlert.tsx +52 -0
  15. package/src/components/AcidAnimatedNotification.css +103 -0
  16. package/src/components/AcidAnimatedNotification.tsx +62 -0
  17. package/src/components/AcidAspectRatio.css +16 -0
  18. package/src/components/AcidAspectRatio.tsx +21 -0
  19. package/src/components/AcidAuroraText.css +49 -0
  20. package/src/components/AcidAuroraText.tsx +19 -0
  21. package/src/components/AcidAvatar.css +70 -0
  22. package/src/components/AcidAvatar.tsx +32 -0
  23. package/src/components/AcidBadge.css +54 -0
  24. package/src/components/AcidBadge.tsx +27 -0
  25. package/src/components/AcidBentoGrid.css +98 -0
  26. package/src/components/AcidBentoGrid.tsx +68 -0
  27. package/src/components/AcidBorderBeam.css +27 -0
  28. package/src/components/AcidBorderBeam.tsx +37 -0
  29. package/src/components/AcidBreadcrumb.css +36 -0
  30. package/src/components/AcidBreadcrumb.tsx +35 -0
  31. package/src/components/AcidButton.css +97 -0
  32. package/src/components/AcidButton.tsx +29 -0
  33. package/src/components/AcidCalendar.css +136 -0
  34. package/src/components/AcidCalendar.tsx +144 -0
  35. package/src/components/AcidCard.css +42 -0
  36. package/src/components/AcidCard.tsx +26 -0
  37. package/src/components/AcidCarousel.css +166 -0
  38. package/src/components/AcidCarousel.tsx +168 -0
  39. package/src/components/AcidChart.css +132 -0
  40. package/src/components/AcidChart.tsx +198 -0
  41. package/src/components/AcidCheckbox.css +64 -0
  42. package/src/components/AcidCheckbox.tsx +58 -0
  43. package/src/components/AcidCodeBlock.css +51 -0
  44. package/src/components/AcidCodeBlock.tsx +25 -0
  45. package/src/components/AcidCodeDisplay.css +79 -0
  46. package/src/components/AcidCodeDisplay.tsx +42 -0
  47. package/src/components/AcidCollapsible.css +54 -0
  48. package/src/components/AcidCollapsible.tsx +56 -0
  49. package/src/components/AcidCommand.css +207 -0
  50. package/src/components/AcidCommand.tsx +149 -0
  51. package/src/components/AcidConfettiButton.tsx +37 -0
  52. package/src/components/AcidContextMenu.css +84 -0
  53. package/src/components/AcidContextMenu.tsx +111 -0
  54. package/src/components/AcidCountUp.css +54 -0
  55. package/src/components/AcidCountUp.tsx +66 -0
  56. package/src/components/AcidDialog.css +124 -0
  57. package/src/components/AcidDialog.tsx +89 -0
  58. package/src/components/AcidDivider.css +44 -0
  59. package/src/components/AcidDivider.tsx +28 -0
  60. package/src/components/AcidDock.css +74 -0
  61. package/src/components/AcidDock.tsx +65 -0
  62. package/src/components/AcidDragOrderList.css +45 -0
  63. package/src/components/AcidDragOrderList.tsx +58 -0
  64. package/src/components/AcidDrawer.css +64 -0
  65. package/src/components/AcidDrawer.tsx +55 -0
  66. package/src/components/AcidDropdown.css +103 -0
  67. package/src/components/AcidDropdown.tsx +87 -0
  68. package/src/components/AcidDynamicNavbar.css +273 -0
  69. package/src/components/AcidDynamicNavbar.tsx +157 -0
  70. package/src/components/AcidElectroBorder.css +141 -0
  71. package/src/components/AcidElectroBorder.tsx +53 -0
  72. package/src/components/AcidFloatingNavbar.css +152 -0
  73. package/src/components/AcidFloatingNavbar.tsx +111 -0
  74. package/src/components/AcidForm.css +78 -0
  75. package/src/components/AcidForm.tsx +45 -0
  76. package/src/components/AcidGlassFolder.css +111 -0
  77. package/src/components/AcidGlassFolder.tsx +34 -0
  78. package/src/components/AcidGradientButton.css +99 -0
  79. package/src/components/AcidGradientButton.tsx +37 -0
  80. package/src/components/AcidGridBox.css +61 -0
  81. package/src/components/AcidGridBox.tsx +26 -0
  82. package/src/components/AcidIconBox.css +42 -0
  83. package/src/components/AcidIconBox.tsx +18 -0
  84. package/src/components/AcidInput.css +99 -0
  85. package/src/components/AcidInput.tsx +27 -0
  86. package/src/components/AcidInputOtp.css +57 -0
  87. package/src/components/AcidInputOtp.tsx +102 -0
  88. package/src/components/AcidLabel.css +26 -0
  89. package/src/components/AcidLabel.tsx +18 -0
  90. package/src/components/AcidLayout.css +42 -0
  91. package/src/components/AcidLayout.tsx +35 -0
  92. package/src/components/AcidLink.css +26 -0
  93. package/src/components/AcidLink.tsx +19 -0
  94. package/src/components/AcidMagicCard.css +27 -0
  95. package/src/components/AcidMagicCard.tsx +49 -0
  96. package/src/components/AcidMagicLoader.css +47 -0
  97. package/src/components/AcidMagicLoader.tsx +43 -0
  98. package/src/components/AcidMarquee.css +59 -0
  99. package/src/components/AcidMarquee.tsx +28 -0
  100. package/src/components/AcidMeter.css +118 -0
  101. package/src/components/AcidMeter.tsx +37 -0
  102. package/src/components/AcidNavbar.css +142 -0
  103. package/src/components/AcidNavbar.tsx +111 -0
  104. package/src/components/AcidNavigationMenu.css +47 -0
  105. package/src/components/AcidNavigationMenu.tsx +38 -0
  106. package/src/components/AcidPagination.css +57 -0
  107. package/src/components/AcidPagination.tsx +51 -0
  108. package/src/components/AcidProgress.css +57 -0
  109. package/src/components/AcidProgress.tsx +40 -0
  110. package/src/components/AcidRadioGroup.css +98 -0
  111. package/src/components/AcidRadioGroup.tsx +70 -0
  112. package/src/components/AcidResizable.css +34 -0
  113. package/src/components/AcidResizable.tsx +46 -0
  114. package/src/components/AcidRippleButton.css +34 -0
  115. package/src/components/AcidRippleButton.tsx +61 -0
  116. package/src/components/AcidRippleLoader.css +23 -0
  117. package/src/components/AcidRippleLoader.tsx +40 -0
  118. package/src/components/AcidScrollArea.css +28 -0
  119. package/src/components/AcidScrollArea.tsx +21 -0
  120. package/src/components/AcidScrollList.css +107 -0
  121. package/src/components/AcidScrollList.tsx +58 -0
  122. package/src/components/AcidScrollReveal.tsx +29 -0
  123. package/src/components/AcidScrollStack.css +46 -0
  124. package/src/components/AcidScrollStack.tsx +54 -0
  125. package/src/components/AcidSelect.css +144 -0
  126. package/src/components/AcidSelect.tsx +108 -0
  127. package/src/components/AcidSeparator.css +15 -0
  128. package/src/components/AcidSeparator.tsx +24 -0
  129. package/src/components/AcidSheet.css +99 -0
  130. package/src/components/AcidSheet.tsx +68 -0
  131. package/src/components/AcidShineButton.css +36 -0
  132. package/src/components/AcidShineButton.tsx +24 -0
  133. package/src/components/AcidShinyText.css +22 -0
  134. package/src/components/AcidShinyText.tsx +20 -0
  135. package/src/components/AcidSidebar.css +152 -0
  136. package/src/components/AcidSidebar.tsx +44 -0
  137. package/src/components/AcidSkeleton.css +61 -0
  138. package/src/components/AcidSkeleton.tsx +29 -0
  139. package/src/components/AcidSlider.css +89 -0
  140. package/src/components/AcidSlider.tsx +87 -0
  141. package/src/components/AcidSolidCard.css +55 -0
  142. package/src/components/AcidSolidCard.tsx +35 -0
  143. package/src/components/AcidStackList.css +59 -0
  144. package/src/components/AcidStackList.tsx +38 -0
  145. package/src/components/AcidStepList.css +35 -0
  146. package/src/components/AcidStepList.tsx +31 -0
  147. package/src/components/AcidSwitch.css +48 -0
  148. package/src/components/AcidSwitch.tsx +48 -0
  149. package/src/components/AcidTable.css +60 -0
  150. package/src/components/AcidTable.tsx +44 -0
  151. package/src/components/AcidTabs.css +102 -0
  152. package/src/components/AcidTabs.tsx +47 -0
  153. package/src/components/AcidTerminalCard.css +63 -0
  154. package/src/components/AcidTerminalCard.tsx +35 -0
  155. package/src/components/AcidTextMarquee.css +30 -0
  156. package/src/components/AcidTextMarquee.tsx +37 -0
  157. package/src/components/AcidTextarea.tsx +32 -0
  158. package/src/components/AcidTimeline.css +129 -0
  159. package/src/components/AcidTimeline.tsx +59 -0
  160. package/src/components/AcidToast.css +77 -0
  161. package/src/components/AcidToast.tsx +72 -0
  162. package/src/components/AcidToggle.css +73 -0
  163. package/src/components/AcidToggle.tsx +56 -0
  164. package/src/components/AcidToggleGroup.css +61 -0
  165. package/src/components/AcidToggleGroup.tsx +76 -0
  166. package/src/components/AcidTooltip.css +81 -0
  167. package/src/components/AcidTooltip.tsx +44 -0
  168. package/src/components/AcidTopLoader.css +24 -0
  169. package/src/components/AcidTopLoader.tsx +61 -0
  170. package/src/components/AcidTopStickyBar.css +99 -0
  171. package/src/components/AcidTopStickyBar.tsx +51 -0
  172. package/src/components/AcidTrialButton.css +55 -0
  173. package/src/components/AcidTrialButton.tsx +26 -0
  174. package/src/components/AcidTrustedUsers.css +59 -0
  175. package/src/components/AcidTrustedUsers.tsx +46 -0
  176. package/src/components/AcidTypewriterInput.css +37 -0
  177. package/src/components/AcidTypewriterInput.tsx +31 -0
  178. package/src/components/AcidTypingText.tsx +32 -0
  179. package/src/components/AcidVideoText.css +35 -0
  180. package/src/components/AcidVideoText.tsx +25 -0
  181. package/src/data/sidebar.ts +135 -0
  182. package/src/data/snippets.ts +13 -0
  183. package/src/index.css +136 -0
  184. package/src/main.tsx +13 -0
  185. package/src/pages/Docs.css +604 -0
  186. package/src/pages/Docs.tsx +2347 -0
  187. package/src/pages/Landing.css +342 -0
  188. package/src/pages/Landing.tsx +216 -0
  189. package/src/pages/Library.css +426 -0
  190. package/src/pages/Library.tsx +254 -0
  191. package/tsconfig.app.json +28 -0
  192. package/tsconfig.json +7 -0
  193. package/tsconfig.node.json +26 -0
  194. package/vite.config.ts +7 -0
@@ -0,0 +1,81 @@
1
+ .ac-tooltip-wrapper {
2
+ position: relative;
3
+ display: inline-flex;
4
+ }
5
+
6
+ .ac-tooltip {
7
+ position: absolute;
8
+ background: var(--ac-surface);
9
+ border: 1px solid var(--ac-border-bright);
10
+ padding: 0.5rem 0.75rem;
11
+ border-radius: var(--ac-radius-sm);
12
+ z-index: 1100;
13
+ pointer-events: none;
14
+ font-family: var(--font-mono);
15
+ font-size: 0.75rem;
16
+ color: var(--ac-text-primary);
17
+ white-space: nowrap;
18
+ box-shadow: 0 10px 20px rgba(0, 0, 0, 0.3);
19
+ }
20
+
21
+ .ac-tooltip-arrow {
22
+ position: absolute;
23
+ width: 8px;
24
+ height: 8px;
25
+ background: var(--ac-surface);
26
+ border: 1px solid var(--ac-border-bright);
27
+ transform: rotate(45deg);
28
+ }
29
+
30
+ /* Positions */
31
+ .ac-tooltip-top {
32
+ bottom: calc(100% + 10px);
33
+ left: 50%;
34
+ }
35
+
36
+ .ac-tooltip-top .ac-tooltip-arrow {
37
+ bottom: -5px;
38
+ left: 50%;
39
+ transform: translateX(-50%) rotate(45deg);
40
+ border-top: none;
41
+ border-left: none;
42
+ }
43
+
44
+ .ac-tooltip-bottom {
45
+ top: calc(100% + 10px);
46
+ left: 50%;
47
+ }
48
+
49
+ .ac-tooltip-bottom .ac-tooltip-arrow {
50
+ top: -5px;
51
+ left: 50%;
52
+ transform: translateX(-50%) rotate(45deg);
53
+ border-bottom: none;
54
+ border-right: none;
55
+ }
56
+
57
+ .ac-tooltip-left {
58
+ right: calc(100% + 10px);
59
+ top: 50%;
60
+ }
61
+
62
+ .ac-tooltip-left .ac-tooltip-arrow {
63
+ right: -5px;
64
+ top: 50%;
65
+ transform: translateY(-50%) rotate(45deg);
66
+ border-bottom: none;
67
+ border-left: none;
68
+ }
69
+
70
+ .ac-tooltip-right {
71
+ left: calc(100% + 10px);
72
+ top: 50%;
73
+ }
74
+
75
+ .ac-tooltip-right .ac-tooltip-arrow {
76
+ left: -5px;
77
+ top: 50%;
78
+ transform: translateY(-50%) rotate(45deg);
79
+ border-top: none;
80
+ border-right: none;
81
+ }
@@ -0,0 +1,44 @@
1
+ import React, { useState } from 'react';
2
+ import { motion, AnimatePresence } from 'framer-motion';
3
+ import clsx from 'clsx';
4
+ import './AcidTooltip.css';
5
+
6
+ export interface AcidTooltipProps {
7
+ content: React.ReactNode;
8
+ children: React.ReactNode;
9
+ position?: 'top' | 'bottom' | 'left' | 'right';
10
+ className?: string;
11
+ }
12
+
13
+ export const AcidTooltip = ({
14
+ content,
15
+ children,
16
+ position = 'top',
17
+ className
18
+ }: AcidTooltipProps) => {
19
+ const [isVisible, setIsVisible] = useState(false);
20
+
21
+ return (
22
+ <div
23
+ className="ac-tooltip-wrapper"
24
+ onMouseEnter={() => setIsVisible(true)}
25
+ onMouseLeave={() => setIsVisible(false)}
26
+ >
27
+ {children}
28
+ <AnimatePresence>
29
+ {isVisible && (
30
+ <motion.div
31
+ initial={{ opacity: 0, scale: 0.95, x: (position === 'top' || position === 'bottom') ? '-50%' : 0, y: (position === 'left' || position === 'right') ? '-50%' : 0 }}
32
+ animate={{ opacity: 1, scale: 1, x: (position === 'top' || position === 'bottom') ? '-50%' : 0, y: (position === 'left' || position === 'right') ? '-50%' : 0 }}
33
+ exit={{ opacity: 0, scale: 0.95 }}
34
+ transition={{ duration: 0.1 }}
35
+ className={clsx('ac-tooltip', `ac-tooltip-${position}`, className)}
36
+ >
37
+ {content}
38
+ <div className="ac-tooltip-arrow" />
39
+ </motion.div>
40
+ )}
41
+ </AnimatePresence>
42
+ </div>
43
+ );
44
+ };
@@ -0,0 +1,24 @@
1
+ .ac-top-loader-container {
2
+ position: fixed;
3
+ top: 0;
4
+ left: 0;
5
+ width: 100%;
6
+ z-index: 99999;
7
+ pointer-events: none;
8
+ overflow: hidden;
9
+ }
10
+
11
+ .ac-top-loader-bar {
12
+ height: 100%;
13
+ box-shadow: 0 0 10px rgba(var(--ac-brand-rgb), 0.5);
14
+ }
15
+
16
+ .ac-top-loader-glow {
17
+ position: absolute;
18
+ right: 0;
19
+ top: 0;
20
+ height: 100%;
21
+ width: 100px;
22
+ filter: blur(8px);
23
+ opacity: 0.8;
24
+ }
@@ -0,0 +1,61 @@
1
+ import { useEffect, useState } from 'react';
2
+ import { motion, AnimatePresence } from 'framer-motion';
3
+ import './AcidTopLoader.css';
4
+
5
+ export interface AcidTopLoaderProps {
6
+ visible?: boolean;
7
+ color?: string;
8
+ height?: number;
9
+ speed?: number;
10
+ }
11
+
12
+ export const AcidTopLoader = ({
13
+ visible = false,
14
+ color = 'var(--ac-brand)',
15
+ height = 3,
16
+ speed = 0.5
17
+ }: AcidTopLoaderProps) => {
18
+ const [progress, setProgress] = useState(0);
19
+
20
+ useEffect(() => {
21
+ let timer: ReturnType<typeof setInterval>;
22
+ if (visible) {
23
+ const resetTimer = setTimeout(() => setProgress(0), 0);
24
+ timer = setInterval(() => {
25
+ setProgress(prev => {
26
+ if (prev >= 90) return prev;
27
+ return prev + (Math.random() * 5);
28
+ });
29
+ }, 300);
30
+ return () => {
31
+ clearTimeout(resetTimer);
32
+ clearInterval(timer);
33
+ };
34
+ } else {
35
+ setProgress(100);
36
+ }
37
+ }, [visible]);
38
+
39
+ return (
40
+ <AnimatePresence>
41
+ {visible && (
42
+ <motion.div
43
+ initial={{ opacity: 0 }}
44
+ animate={{ opacity: 1 }}
45
+ exit={{ opacity: 0, transition: { delay: 0.2 } }}
46
+ className="ac-top-loader-container"
47
+ style={{ height }}
48
+ >
49
+ <motion.div
50
+ className="ac-top-loader-bar"
51
+ style={{ background: color }}
52
+ initial={{ width: '0%' }}
53
+ animate={{ width: `${progress}%` }}
54
+ transition={{ duration: speed }}
55
+ />
56
+ <div className="ac-top-loader-glow" style={{ backgroundColor: color }} />
57
+ </motion.div>
58
+ )}
59
+ </AnimatePresence>
60
+ );
61
+ };
@@ -0,0 +1,99 @@
1
+ .ac-sticky-bar {
2
+ position: sticky;
3
+ top: 0;
4
+ left: 0;
5
+ width: 100%;
6
+ z-index: 1000;
7
+ display: flex;
8
+ align-items: center;
9
+ justify-content: space-between;
10
+ padding: 0.5rem 1.5rem;
11
+ background: var(--ac-surface);
12
+ border-bottom: 1px solid var(--ac-border-muted);
13
+ backdrop-filter: blur(8px);
14
+ overflow: hidden;
15
+ }
16
+
17
+ .ac-sticky-bar-info {
18
+ border-bottom-color: var(--ac-brand);
19
+ }
20
+
21
+ .ac-sticky-bar-warning {
22
+ border-bottom-color: #ffbd2e;
23
+ }
24
+
25
+ .ac-sticky-bar-error {
26
+ border-bottom-color: #ff5f56;
27
+ }
28
+
29
+ .ac-sticky-bar-content {
30
+ display: flex;
31
+ align-items: center;
32
+ gap: 12px;
33
+ }
34
+
35
+ .ac-sticky-bar-icon {
36
+ color: var(--ac-brand);
37
+ }
38
+
39
+ .ac-sticky-bar-info .ac-sticky-bar-icon {
40
+ color: var(--ac-brand);
41
+ }
42
+
43
+ .ac-sticky-bar-warning .ac-sticky-bar-icon {
44
+ color: #ffbd2e;
45
+ }
46
+
47
+ .ac-sticky-bar-error .ac-sticky-bar-icon {
48
+ color: #ff5f56;
49
+ }
50
+
51
+ .ac-sticky-bar-text {
52
+ font-size: 0.75rem;
53
+ font-family: var(--font-mono);
54
+ color: var(--ac-text-primary);
55
+ letter-spacing: 0.02em;
56
+ }
57
+
58
+ .ac-sticky-bar-close {
59
+ background: transparent;
60
+ border: none;
61
+ color: var(--ac-text-muted);
62
+ cursor: pointer;
63
+ padding: 4px;
64
+ transition: color 0.15s;
65
+ display: flex;
66
+ align-items: center;
67
+ }
68
+
69
+ .ac-sticky-bar-close:hover {
70
+ color: var(--ac-brand);
71
+ }
72
+
73
+ .ac-sticky-bar-scanline {
74
+ position: absolute;
75
+ top: 0;
76
+ left: 0;
77
+ width: 100%;
78
+ height: 1px;
79
+ background: rgba(var(--ac-brand-rgb), 0.2);
80
+ box-shadow: 0 0 10px var(--ac-brand);
81
+ animation: ac-sticky-scan 3s linear infinite;
82
+ pointer-events: none;
83
+ }
84
+
85
+ @keyframes ac-sticky-scan {
86
+ from {
87
+ transform: translateY(-10px);
88
+ opacity: 0;
89
+ }
90
+
91
+ 50% {
92
+ opacity: 0.5;
93
+ }
94
+
95
+ to {
96
+ transform: translateY(50px);
97
+ opacity: 0;
98
+ }
99
+ }
@@ -0,0 +1,51 @@
1
+ import { useState } from 'react';
2
+ import { motion } from 'framer-motion';
3
+ import { AlertCircle, X } from 'lucide-react';
4
+ import clsx from 'clsx';
5
+ import './AcidTopStickyBar.css';
6
+
7
+ export interface AcidTopStickyBarProps {
8
+ message: string;
9
+ type?: 'info' | 'warning' | 'error';
10
+ onClose?: () => void;
11
+ className?: string;
12
+ }
13
+
14
+ export const AcidTopStickyBar = ({
15
+ message,
16
+ type = 'info',
17
+ onClose,
18
+ className
19
+ }: AcidTopStickyBarProps) => {
20
+ const [isVisible, setIsVisible] = useState(true);
21
+
22
+ if (!isVisible) return null;
23
+
24
+ const Icon = type === 'error' ? AlertCircle : AlertCircle; // Simplified for now
25
+
26
+ return (
27
+ <motion.div
28
+ initial={{ y: -50, opacity: 0 }}
29
+ animate={{ y: 0, opacity: 1 }}
30
+ exit={{ y: -50, opacity: 0 }}
31
+ className={clsx('ac-sticky-bar', `ac-sticky-bar-${type}`, className)}
32
+ >
33
+ <div className="ac-sticky-bar-content">
34
+ <Icon size={14} className="ac-sticky-bar-icon" />
35
+ <span className="ac-sticky-bar-text">{message}</span>
36
+ </div>
37
+ {onClose && (
38
+ <button
39
+ className="ac-sticky-bar-close"
40
+ onClick={() => {
41
+ setIsVisible(false);
42
+ onClose();
43
+ }}
44
+ >
45
+ <X size={14} />
46
+ </button>
47
+ )}
48
+ <div className="ac-sticky-bar-scanline" />
49
+ </motion.div>
50
+ );
51
+ };
@@ -0,0 +1,55 @@
1
+ .ac-trial-btn {
2
+ position: relative;
3
+ background: #fff;
4
+ color: #000;
5
+ border: none;
6
+ padding: 0.75rem 2rem;
7
+ border-radius: 8px;
8
+ cursor: pointer;
9
+ font-family: var(--font-mono);
10
+ display: flex;
11
+ flex-direction: column;
12
+ align-items: center;
13
+ gap: 2px;
14
+ transition: transform 0.2s, box-shadow 0.2s;
15
+ box-shadow: 0 4px 14px rgba(255, 255, 255, 0.1);
16
+ }
17
+
18
+ .ac-trial-btn:hover {
19
+ transform: translateY(-2px);
20
+ box-shadow: 0 6px 20px rgba(255, 255, 255, 0.2);
21
+ }
22
+
23
+ .ac-trial-main {
24
+ display: flex;
25
+ align-items: center;
26
+ gap: 0.5rem;
27
+ font-weight: 800;
28
+ font-size: 1rem;
29
+ }
30
+
31
+ .ac-trial-secondary {
32
+ font-size: 0.6rem;
33
+ opacity: 0.6;
34
+ font-weight: 500;
35
+ letter-spacing: 0.1em;
36
+ }
37
+
38
+ .ac-trial-icon {
39
+ color: #f59e0b;
40
+ }
41
+
42
+ .ac-trial-glow {
43
+ position: absolute;
44
+ inset: -2px;
45
+ background: linear-gradient(45deg, #f59e0b, #ef4444, #3b82f6);
46
+ border-radius: inherit;
47
+ z-index: -1;
48
+ opacity: 0;
49
+ transition: opacity 0.3s;
50
+ filter: blur(8px);
51
+ }
52
+
53
+ .ac-trial-btn:hover .ac-trial-glow {
54
+ opacity: 0.4;
55
+ }
@@ -0,0 +1,26 @@
1
+ import React from 'react';
2
+ import clsx from 'clsx';
3
+ import { Sparkles } from 'lucide-react';
4
+ import './AcidTrialButton.css';
5
+
6
+ export interface AcidTrialButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
7
+ secondaryText?: string;
8
+ }
9
+
10
+ export const AcidTrialButton = ({
11
+ children,
12
+ className,
13
+ secondaryText = 'NO_CREDIT_CARD_REQUIRED',
14
+ ...props
15
+ }: AcidTrialButtonProps) => {
16
+ return (
17
+ <button className={clsx('ac-trial-btn', className)} {...props}>
18
+ <div className="ac-trial-main">
19
+ <Sparkles size={16} className="ac-trial-icon" />
20
+ <span>{children}</span>
21
+ </div>
22
+ {secondaryText && <span className="ac-trial-secondary">{secondaryText}</span>}
23
+ <div className="ac-trial-glow" />
24
+ </button>
25
+ );
26
+ };
@@ -0,0 +1,59 @@
1
+ .ac-trusted-container {
2
+ width: 100%;
3
+ padding: 3rem 0;
4
+ }
5
+
6
+ .ac-trusted-header {
7
+ display: flex;
8
+ align-items: center;
9
+ gap: 20px;
10
+ margin-bottom: 3rem;
11
+ }
12
+
13
+ .ac-trusted-line {
14
+ flex: 1;
15
+ height: 1px;
16
+ background: var(--ac-border-muted);
17
+ }
18
+
19
+ .ac-trusted-title {
20
+ font-size: 0.65rem;
21
+ font-family: var(--font-mono);
22
+ color: var(--ac-text-muted);
23
+ letter-spacing: 0.2em;
24
+ white-space: nowrap;
25
+ }
26
+
27
+ .ac-trusted-grid {
28
+ display: grid;
29
+ grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
30
+ gap: 2rem;
31
+ align-items: center;
32
+ }
33
+
34
+ .ac-trusted-item {
35
+ display: flex;
36
+ flex-direction: column;
37
+ align-items: center;
38
+ gap: 12px;
39
+ filter: grayscale(100%);
40
+ opacity: 0.6;
41
+ transition: all 0.3s;
42
+ cursor: default;
43
+ }
44
+
45
+ .ac-trusted-item:hover {
46
+ opacity: 1;
47
+ }
48
+
49
+ .ac-trusted-logo {
50
+ font-size: 2rem;
51
+ color: var(--ac-text-primary);
52
+ }
53
+
54
+ .ac-trusted-name {
55
+ font-size: 0.6rem;
56
+ font-family: var(--font-mono);
57
+ color: var(--ac-text-muted);
58
+ text-transform: uppercase;
59
+ }
@@ -0,0 +1,46 @@
1
+ import React from 'react';
2
+ import { motion } from 'framer-motion';
3
+ import clsx from 'clsx';
4
+ import './AcidTrustedUsers.css';
5
+
6
+ export interface TrustedUser {
7
+ id: string;
8
+ logo: React.ReactNode;
9
+ name: string;
10
+ }
11
+
12
+ export interface AcidTrustedUsersProps {
13
+ users: TrustedUser[];
14
+ title?: string;
15
+ className?: string;
16
+ }
17
+
18
+ export const AcidTrustedUsers = ({
19
+ users,
20
+ title = "TRUSTED_NODES",
21
+ className
22
+ }: AcidTrustedUsersProps) => {
23
+ return (
24
+ <div className={clsx('ac-trusted-container', className)}>
25
+ <div className="ac-trusted-header">
26
+ <div className="ac-trusted-line" />
27
+ <span className="ac-trusted-title">{title}</span>
28
+ <div className="ac-trusted-line" />
29
+ </div>
30
+ <div className="ac-trusted-grid">
31
+ {users.map((user) => (
32
+ <motion.div
33
+ key={user.id}
34
+ whileHover={{ scale: 1.05, filter: 'grayscale(0%)' }}
35
+ className="ac-trusted-item"
36
+ >
37
+ <div className="ac-trusted-logo">
38
+ {user.logo}
39
+ </div>
40
+ <span className="ac-trusted-name">{user.name}</span>
41
+ </motion.div>
42
+ ))}
43
+ </div>
44
+ </div>
45
+ );
46
+ };
@@ -0,0 +1,37 @@
1
+ .ac-typewriter-input-wrap {
2
+ display: flex;
3
+ flex-direction: column;
4
+ gap: 0.5rem;
5
+ width: 100%;
6
+ }
7
+
8
+ .ac-typewriter-label {
9
+ font-family: var(--font-mono);
10
+ font-size: 0.8rem;
11
+ color: var(--ac-brand);
12
+ letter-spacing: 0.1em;
13
+ }
14
+
15
+ .ac-cursor {
16
+ animation: cursor-blink 1s step-end infinite;
17
+ }
18
+
19
+ .ac-typewriter-field {
20
+ background: #000;
21
+ border: 1px solid var(--ac-border-muted);
22
+ padding: 0.75rem 1rem;
23
+ color: white;
24
+ font-family: var(--font-mono);
25
+ outline: none;
26
+ transition: border-color 0.2s;
27
+ }
28
+
29
+ .ac-typewriter-field:focus {
30
+ border-color: var(--ac-brand);
31
+ }
32
+
33
+ @keyframes cursor-blink {
34
+ 50% {
35
+ opacity: 0;
36
+ }
37
+ }
@@ -0,0 +1,31 @@
1
+ import React, { useState, useEffect } from 'react';
2
+ import clsx from 'clsx';
3
+ import './AcidTypewriterInput.css';
4
+
5
+ export interface AcidTypewriterInputProps extends React.InputHTMLAttributes<HTMLInputElement> {
6
+ label: string;
7
+ typingSpeed?: number;
8
+ }
9
+
10
+ export const AcidTypewriterInput = ({ label, typingSpeed = 100, className, ...props }: AcidTypewriterInputProps) => {
11
+ const [displayText, setDisplayText] = useState('');
12
+
13
+ useEffect(() => {
14
+ let i = 0;
15
+ const interval = setInterval(() => {
16
+ setDisplayText(label.slice(0, i + 1));
17
+ i++;
18
+ if (i >= label.length) clearInterval(interval);
19
+ }, typingSpeed);
20
+ return () => clearInterval(interval);
21
+ }, [label, typingSpeed]);
22
+
23
+ return (
24
+ <div className={clsx('ac-typewriter-input-wrap', className)}>
25
+ <label className="ac-typewriter-label">
26
+ {displayText}<span className="ac-cursor">_</span>
27
+ </label>
28
+ <input className="ac-typewriter-field" {...props} />
29
+ </div>
30
+ );
31
+ };
@@ -0,0 +1,32 @@
1
+ import { useState, useEffect } from 'react';
2
+ import clsx from 'clsx';
3
+
4
+ export interface AcidTypingTextProps {
5
+ text: string;
6
+ speed?: number;
7
+ className?: string;
8
+ onComplete?: () => void;
9
+ }
10
+
11
+ export const AcidTypingText = ({ text, speed = 50, className, onComplete }: AcidTypingTextProps) => {
12
+ const [displayed, setDisplayed] = useState('');
13
+
14
+ useEffect(() => {
15
+ let i = 0;
16
+ const timer = setInterval(() => {
17
+ setDisplayed(text.slice(0, i + 1));
18
+ i++;
19
+ if (i >= text.length) {
20
+ clearInterval(timer);
21
+ if (onComplete) onComplete();
22
+ }
23
+ }, speed);
24
+ return () => clearInterval(timer);
25
+ }, [text, speed, onComplete]);
26
+
27
+ return (
28
+ <span className={clsx('ac-typing-text', className)}>
29
+ {displayed}<span className="ac-typing-cursor" style={{ visibility: displayed.length < text.length ? 'visible' : 'hidden' }}>|</span>
30
+ </span>
31
+ );
32
+ };
@@ -0,0 +1,35 @@
1
+ .ac-video-text-container {
2
+ position: relative;
3
+ width: 100%;
4
+ height: 300px;
5
+ display: flex;
6
+ align-items: center;
7
+ justify-content: center;
8
+ background: #000;
9
+ overflow: hidden;
10
+ }
11
+
12
+ .ac-video-text-bg {
13
+ position: absolute;
14
+ width: 100%;
15
+ height: 100%;
16
+ object-fit: cover;
17
+ z-index: 1;
18
+ }
19
+
20
+ .ac-video-text-mask {
21
+ position: relative;
22
+ z-index: 2;
23
+ font-size: 8rem;
24
+ font-weight: 900;
25
+ margin: 0;
26
+ text-transform: uppercase;
27
+ color: #000;
28
+ background: #fff;
29
+ mix-blend-mode: screen;
30
+ width: 100%;
31
+ height: 100%;
32
+ display: flex;
33
+ align-items: center;
34
+ justify-content: center;
35
+ }