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,47 @@
1
+ .ac-magic-loader {
2
+ position: relative;
3
+ display: flex;
4
+ align-items: center;
5
+ justify-content: center;
6
+ }
7
+
8
+ .ac-loader-ring {
9
+ position: absolute;
10
+ border: 2px solid transparent;
11
+ border-top-color: inherit;
12
+ border-radius: 50%;
13
+ }
14
+
15
+ .ac-ring-outer {
16
+ inset: 0;
17
+ border-width: 2px;
18
+ }
19
+
20
+ .ac-ring-middle {
21
+ inset: 15%;
22
+ border-width: 2px;
23
+ }
24
+
25
+ .ac-ring-inner {
26
+ inset: 30%;
27
+ border-width: 2px;
28
+ }
29
+
30
+ .ac-loader-core {
31
+ width: 6px;
32
+ height: 6px;
33
+ border-radius: 50%;
34
+ animation: ac-core-pulse 1s infinite alternate;
35
+ }
36
+
37
+ @keyframes ac-core-pulse {
38
+ from {
39
+ transform: scale(0.8);
40
+ opacity: 0.5;
41
+ }
42
+
43
+ to {
44
+ transform: scale(1.5);
45
+ opacity: 1;
46
+ }
47
+ }
@@ -0,0 +1,43 @@
1
+ import React from 'react';
2
+ import { motion } from 'framer-motion';
3
+ import clsx from 'clsx';
4
+ import './AcidMagicLoader.css';
5
+
6
+ export interface AcidMagicLoaderProps {
7
+ className?: string;
8
+ size?: number;
9
+ color?: string;
10
+ }
11
+
12
+ export const AcidMagicLoader = ({
13
+ className,
14
+ size = 120,
15
+ color = 'var(--ac-brand)'
16
+ }: AcidMagicLoaderProps) => {
17
+ return (
18
+ <div
19
+ className={clsx('ac-magic-loader', className)}
20
+ style={{ width: size, height: size } as React.CSSProperties}
21
+ >
22
+ <motion.div
23
+ className="ac-loader-ring ac-ring-outer"
24
+ animate={{ rotate: 360 }}
25
+ transition={{ duration: 3, repeat: Infinity, ease: 'linear' }}
26
+ style={{ borderColor: color } as React.CSSProperties}
27
+ />
28
+ <motion.div
29
+ className="ac-loader-ring ac-ring-middle"
30
+ animate={{ rotate: -360 }}
31
+ transition={{ duration: 2, repeat: Infinity, ease: 'linear' }}
32
+ style={{ borderColor: color, opacity: 0.6 } as React.CSSProperties}
33
+ />
34
+ <motion.div
35
+ className="ac-loader-ring ac-ring-inner"
36
+ animate={{ rotate: 360 }}
37
+ transition={{ duration: 1.5, repeat: Infinity, ease: 'linear' }}
38
+ style={{ borderColor: color, opacity: 0.3 } as React.CSSProperties}
39
+ />
40
+ <div className="ac-loader-core" style={{ backgroundColor: color } as React.CSSProperties} />
41
+ </div>
42
+ );
43
+ };
@@ -0,0 +1,59 @@
1
+ .ac-marquee-container {
2
+ overflow: hidden;
3
+ white-space: nowrap;
4
+ width: 100vw;
5
+ margin-left: calc(-50vw + 50%);
6
+ position: relative;
7
+ display: flex;
8
+ align-items: center;
9
+ border-top: 4px solid;
10
+ border-bottom: 4px solid;
11
+ background-color: var(--ac-bg);
12
+ padding: 1rem 0;
13
+ transform: rotate(-2deg) scale(1.05);
14
+ z-index: 10;
15
+ box-shadow: 0 10px 30px rgba(0, 0, 0, 0.8);
16
+ }
17
+
18
+ .ac-marquee-content {
19
+ display: inline-flex;
20
+ will-change: transform;
21
+ }
22
+
23
+ .ac-marquee-text {
24
+ font-family: var(--font-inter);
25
+ font-weight: 900;
26
+ font-size: 4rem;
27
+ line-height: 1;
28
+ text-transform: uppercase;
29
+ padding: 0 2rem;
30
+ letter-spacing: -0.05em;
31
+ -webkit-text-stroke: 2px currentColor;
32
+ color: transparent;
33
+ transition: all 0.3s ease;
34
+ }
35
+
36
+ .ac-marquee-text:hover {
37
+ color: currentColor;
38
+ }
39
+
40
+ /* Colors */
41
+ .ac-marquee-lime {
42
+ border-color: var(--ac-lime);
43
+ color: var(--ac-lime);
44
+ }
45
+
46
+ .ac-marquee-pink {
47
+ border-color: var(--ac-pink);
48
+ color: var(--ac-pink);
49
+ }
50
+
51
+ .ac-marquee-cyan {
52
+ border-color: var(--ac-cyan);
53
+ color: var(--ac-cyan);
54
+ }
55
+
56
+ .ac-marquee-purple {
57
+ border-color: var(--ac-purple);
58
+ color: var(--ac-purple);
59
+ }
@@ -0,0 +1,28 @@
1
+ import clsx from 'clsx';
2
+ import { motion } from 'framer-motion';
3
+ import './AcidMarquee.css';
4
+
5
+ export interface AcidMarqueeProps {
6
+ text: string;
7
+ speed?: number;
8
+ direction?: 'left' | 'right';
9
+ className?: string;
10
+ color?: 'lime' | 'pink' | 'cyan' | 'purple';
11
+ }
12
+
13
+ export const AcidMarquee = ({ text, speed = 20, direction = 'left', className, color = 'lime' }: AcidMarqueeProps) => {
14
+ return (
15
+ <div className={clsx('ac-marquee-container', `ac-marquee-${color}`, className)}>
16
+ <motion.div
17
+ className="ac-marquee-content"
18
+ animate={{ x: direction === 'left' ? ['0%', '-50%'] : ['-50%', '0%'] }}
19
+ transition={{ repeat: Infinity, ease: 'linear', duration: speed }}
20
+ >
21
+ <span className="ac-marquee-text">{text}</span>
22
+ <span className="ac-marquee-text">{text}</span>
23
+ <span className="ac-marquee-text">{text}</span>
24
+ <span className="ac-marquee-text">{text}</span>
25
+ </motion.div>
26
+ </div>
27
+ );
28
+ };
@@ -0,0 +1,118 @@
1
+ .ac-meter-control {
2
+ display: flex;
3
+ flex-direction: column;
4
+ align-items: center;
5
+ gap: 1rem;
6
+ }
7
+
8
+ .ac-meter-label {
9
+ font-family: var(--font-mono);
10
+ font-size: 0.65rem;
11
+ color: var(--ac-text-secondary);
12
+ letter-spacing: 0.1em;
13
+ text-transform: uppercase;
14
+ transform: rotate(-90deg);
15
+ margin-bottom: 2rem;
16
+ white-space: nowrap;
17
+ }
18
+
19
+ .ac-meter-track {
20
+ width: 14px;
21
+ height: 200px;
22
+ background: var(--ac-border-muted);
23
+ border-radius: 9999px;
24
+ position: relative;
25
+ display: flex;
26
+ flex-direction: column;
27
+ justify-content: flex-end;
28
+ }
29
+
30
+ .ac-meter-dot-top {
31
+ position: absolute;
32
+ top: 4px;
33
+ left: 50%;
34
+ transform: translateX(-50%);
35
+ width: 6px;
36
+ height: 6px;
37
+ background: var(--ac-bg);
38
+ border-radius: 50%;
39
+ z-index: 1;
40
+ }
41
+
42
+ .ac-meter-dot-bottom {
43
+ position: absolute;
44
+ bottom: 4px;
45
+ left: 50%;
46
+ transform: translateX(-50%);
47
+ width: 6px;
48
+ height: 6px;
49
+ background: var(--ac-bg);
50
+ /* Punch-hole look */
51
+ border-radius: 50%;
52
+ z-index: 3;
53
+ }
54
+
55
+ .ac-meter-fill {
56
+ width: 100%;
57
+ background: linear-gradient(to top, var(--ac-brand), #ff8a65);
58
+ border-radius: 9999px;
59
+ position: relative;
60
+ z-index: 2;
61
+ }
62
+
63
+ .ac-meter-fill-dot {
64
+ position: absolute;
65
+ top: 4px;
66
+ left: 50%;
67
+ transform: translateX(-50%);
68
+ width: 6px;
69
+ height: 6px;
70
+ background: var(--ac-bg);
71
+ border-radius: 50%;
72
+ }
73
+
74
+ /* Horizontal Style */
75
+ .ac-meter-horizontal {
76
+ flex-direction: row;
77
+ width: 100%;
78
+ max-width: 400px;
79
+ }
80
+
81
+ .ac-meter-horizontal .ac-meter-label {
82
+ transform: none;
83
+ margin-bottom: 0;
84
+ margin-right: 2rem;
85
+ min-width: 80px;
86
+ }
87
+
88
+ .ac-meter-horizontal .ac-meter-track {
89
+ width: 100%;
90
+ height: 14px;
91
+ flex-direction: row;
92
+ justify-content: flex-start;
93
+ }
94
+
95
+ .ac-meter-horizontal .ac-meter-dot-top {
96
+ left: 4px;
97
+ top: 50%;
98
+ transform: translateY(-50%);
99
+ }
100
+
101
+ .ac-meter-horizontal .ac-meter-dot-bottom {
102
+ right: 4px;
103
+ left: auto;
104
+ top: 50%;
105
+ transform: translateY(-50%);
106
+ }
107
+
108
+ .ac-meter-horizontal .ac-meter-fill {
109
+ height: 100%;
110
+ background: linear-gradient(to right, var(--ac-brand), #ff8a65);
111
+ }
112
+
113
+ .ac-meter-horizontal .ac-meter-fill-dot {
114
+ right: 4px;
115
+ left: auto;
116
+ top: 50%;
117
+ transform: translateY(-50%);
118
+ }
@@ -0,0 +1,37 @@
1
+
2
+ import clsx from 'clsx';
3
+ import { motion } from 'framer-motion';
4
+ import './AcidMeter.css';
5
+
6
+ export interface AcidMeterProps {
7
+ value: number; // 0 to 100
8
+ label?: string;
9
+ orientation?: 'vertical' | 'horizontal';
10
+ className?: string;
11
+ }
12
+
13
+ export const AcidMeter = ({ value, label, orientation = 'vertical', className }: AcidMeterProps) => {
14
+ return (
15
+ <div className={clsx('ac-meter-control', `ac-meter-${orientation}`, className)}>
16
+ {label && <div className="ac-meter-label">{label}</div>}
17
+ <div className="ac-meter-track">
18
+ {/* Top Dot Empty */}
19
+ <div className="ac-meter-dot-top" />
20
+
21
+ {/* Fill element */}
22
+ <motion.div
23
+ className="ac-meter-fill"
24
+ initial={orientation === 'vertical' ? { height: 0 } : { width: 0 }}
25
+ whileInView={orientation === 'vertical' ? { height: `${value}%` } : { width: `${value}%` }}
26
+ viewport={{ once: true }}
27
+ transition={{ duration: 1, type: "spring", bounce: 0.3 }}
28
+ >
29
+ <div className="ac-meter-fill-dot" />
30
+ </motion.div>
31
+
32
+ {/* Bottom Dot Fill (anchor) */}
33
+ <div className="ac-meter-dot-bottom" />
34
+ </div>
35
+ </div>
36
+ );
37
+ };
@@ -0,0 +1,142 @@
1
+ .ac-navbar {
2
+ position: fixed;
3
+ top: 0;
4
+ left: 0;
5
+ right: 0;
6
+ z-index: 1000;
7
+ background: var(--ac-bg);
8
+ border-bottom: 2px solid var(--ac-border);
9
+ font-family: var(--font-mono);
10
+ }
11
+
12
+ .ac-navbar-top-bar {
13
+ height: 64px;
14
+ display: flex;
15
+ align-items: center;
16
+ }
17
+
18
+ .ac-navbar-inner {
19
+ display: flex;
20
+ align-items: center;
21
+ justify-content: space-between;
22
+ width: 100%;
23
+ }
24
+
25
+ .ac-navbar-brand {
26
+ display: flex;
27
+ align-items: center;
28
+ gap: 0.75rem;
29
+ text-decoration: none;
30
+ color: var(--ac-text-primary);
31
+ font-weight: 700;
32
+ letter-spacing: -0.02em;
33
+ }
34
+
35
+ .brand-text {
36
+ font-size: 1.1rem;
37
+ display: flex;
38
+ align-items: baseline;
39
+ gap: 0.5rem;
40
+ }
41
+
42
+ .version {
43
+ font-size: 0.6rem;
44
+ color: var(--ac-brand);
45
+ border: 1px solid var(--ac-brand);
46
+ padding: 0 4px;
47
+ border-radius: 2px;
48
+ }
49
+
50
+ .ac-navbar-links {
51
+ display: flex;
52
+ align-items: center;
53
+ gap: 2rem;
54
+ }
55
+
56
+ .ac-navbar-link {
57
+ display: flex;
58
+ align-items: center;
59
+ gap: 0.5rem;
60
+ text-decoration: none;
61
+ color: var(--ac-text-secondary);
62
+ font-size: 0.75rem;
63
+ font-weight: 500;
64
+ letter-spacing: 0.05em;
65
+ padding: 0.5rem 0;
66
+ border-bottom: 2px solid transparent;
67
+ transition: all 0.2s;
68
+ }
69
+
70
+ .ac-navbar-link:hover {
71
+ color: var(--ac-text-primary);
72
+ }
73
+
74
+ .ac-navbar-link.active {
75
+ color: var(--ac-brand);
76
+ border-bottom-color: var(--ac-brand);
77
+ }
78
+
79
+ .ac-navbar-actions {
80
+ display: flex;
81
+ align-items: center;
82
+ gap: 1rem;
83
+ }
84
+
85
+ .ac-btn-icon {
86
+ background: var(--ac-surface);
87
+ border: 1px solid var(--ac-border);
88
+ color: var(--ac-text-primary);
89
+ padding: 0.5rem;
90
+ cursor: pointer;
91
+ display: flex;
92
+ align-items: center;
93
+ justify-content: center;
94
+ transition: all 0.2s;
95
+ }
96
+
97
+ .ac-btn-icon:hover {
98
+ background: var(--ac-border);
99
+ border-color: var(--ac-text-secondary);
100
+ }
101
+
102
+ .ac-navbar-mobile-overlay {
103
+ position: fixed;
104
+ top: 64px;
105
+ left: 0;
106
+ right: 0;
107
+ bottom: 0;
108
+ background: rgba(0, 0, 0, 0.8);
109
+ backdrop-filter: blur(8px);
110
+ z-index: 999;
111
+ }
112
+
113
+ .ac-navbar-mobile-menu {
114
+ background: var(--ac-bg);
115
+ border-bottom: 2px solid var(--ac-border);
116
+ padding: 2rem;
117
+ display: flex;
118
+ flex-direction: column;
119
+ gap: 1.5rem;
120
+ }
121
+
122
+ .ac-mobile-link {
123
+ display: flex;
124
+ align-items: center;
125
+ gap: 1rem;
126
+ text-decoration: none;
127
+ color: var(--ac-text-primary);
128
+ font-size: 1rem;
129
+ font-weight: 600;
130
+ }
131
+
132
+ @media (max-width: 768px) {
133
+ .desktop-only {
134
+ display: none;
135
+ }
136
+ }
137
+
138
+ @media (min-width: 769px) {
139
+ .mobile-only {
140
+ display: none;
141
+ }
142
+ }
@@ -0,0 +1,111 @@
1
+ import React, { useState, useEffect } from 'react';
2
+ import { motion, AnimatePresence } from 'framer-motion';
3
+ import clsx from 'clsx';
4
+ import { Menu, X, Sun, Moon, Github, Cpu, Book, Layout, Terminal } from 'lucide-react';
5
+ import { Link, useLocation } from 'react-router-dom';
6
+ import './AcidNavbar.css';
7
+
8
+ export interface NavItem {
9
+ id: string;
10
+ name: string;
11
+ link: string;
12
+ icon?: React.ReactNode;
13
+ }
14
+
15
+ export const AcidNavbar = () => {
16
+ const [isOpen, setIsOpen] = useState(false);
17
+ const [isDarkMode, setIsDarkMode] = useState(() => {
18
+ return document.documentElement.getAttribute('data-theme') !== 'light';
19
+ });
20
+ const location = useLocation();
21
+
22
+ useEffect(() => {
23
+ document.documentElement.setAttribute('data-theme', isDarkMode ? 'dark' : 'light');
24
+ }, [isDarkMode]);
25
+
26
+ const navItems: NavItem[] = [
27
+ { id: 'home', name: 'HOME', link: '/', icon: <Cpu size={14} /> },
28
+ { id: 'docs', name: 'DOCUMENTATION', link: '/docs', icon: <Book size={14} /> },
29
+ { id: 'components', name: 'LIBRARY', link: '/library', icon: <Layout size={14} /> },
30
+ ];
31
+
32
+ return (
33
+ <header className="ac-navbar">
34
+ <div className="ac-navbar-top-bar">
35
+ <div className="ac-container ac-navbar-inner">
36
+ <div className="ac-navbar-left">
37
+ <Link to="/" className="ac-navbar-brand">
38
+ <Terminal className="text-brand" size={18} />
39
+ <span className="brand-text">ACID_UI <span className="version">v1.2.0</span></span>
40
+ </Link>
41
+ </div>
42
+
43
+ <nav className="ac-navbar-links desktop-only">
44
+ {navItems.map((item) => (
45
+ <Link
46
+ key={item.id}
47
+ to={item.link}
48
+ className={clsx('ac-navbar-link', location.pathname === item.link && 'active')}
49
+ >
50
+ <span className="link-icon">{item.icon}</span>
51
+ <span className="link-text">{item.name}</span>
52
+ </Link>
53
+ ))}
54
+ </nav>
55
+
56
+ <div className="ac-navbar-actions">
57
+ <button
58
+ className="ac-btn-icon"
59
+ onClick={() => setIsDarkMode(!isDarkMode)}
60
+ title="Toggle Theme"
61
+ >
62
+ {isDarkMode ? <Sun size={18} /> : <Moon size={18} />}
63
+ </button>
64
+
65
+ <a
66
+ href="https://github.com"
67
+ target="_blank"
68
+ rel="noreferrer"
69
+ className="ac-btn-icon desktop-only"
70
+ title="GitHub Repository"
71
+ >
72
+ <Github size={18} />
73
+ </a>
74
+
75
+ <button
76
+ className="ac-btn-icon mobile-only"
77
+ onClick={() => setIsOpen(!isOpen)}
78
+ >
79
+ {isOpen ? <X size={20} /> : <Menu size={20} />}
80
+ </button>
81
+ </div>
82
+ </div>
83
+ </div>
84
+
85
+ <AnimatePresence>
86
+ {isOpen && (
87
+ <motion.div
88
+ initial={{ opacity: 0, y: -10 }}
89
+ animate={{ opacity: 1, y: 0 }}
90
+ exit={{ opacity: 0, y: -10 }}
91
+ className="ac-navbar-mobile-overlay"
92
+ >
93
+ <div className="ac-navbar-mobile-menu">
94
+ {navItems.map((item) => (
95
+ <Link
96
+ key={item.id}
97
+ to={item.link}
98
+ className="ac-mobile-link"
99
+ onClick={() => setIsOpen(false)}
100
+ >
101
+ {item.icon}
102
+ <span>{item.name}</span>
103
+ </Link>
104
+ ))}
105
+ </div>
106
+ </motion.div>
107
+ )}
108
+ </AnimatePresence>
109
+ </header>
110
+ );
111
+ };
@@ -0,0 +1,47 @@
1
+ .ac-nav-menu {
2
+ width: fit-content;
3
+ }
4
+
5
+ .ac-nav-list {
6
+ display: flex;
7
+ list-style: none;
8
+ padding: 0;
9
+ margin: 0;
10
+ }
11
+
12
+ .ac-nav-horizontal .ac-nav-list {
13
+ flex-direction: row;
14
+ gap: 2rem;
15
+ }
16
+
17
+ .ac-nav-vertical .ac-nav-list {
18
+ flex-direction: column;
19
+ gap: 0.5rem;
20
+ }
21
+
22
+ .ac-nav-link {
23
+ display: flex;
24
+ flex-direction: column;
25
+ text-decoration: none;
26
+ font-family: var(--font-mono);
27
+ font-size: 0.9rem;
28
+ color: var(--ac-text-secondary);
29
+ transition: color 0.2s;
30
+ position: relative;
31
+ padding: 0.5rem 0;
32
+ }
33
+
34
+ .ac-nav-link:hover {
35
+ color: var(--ac-text-primary);
36
+ }
37
+
38
+ .ac-nav-link.ac-active {
39
+ color: var(--ac-brand);
40
+ }
41
+
42
+ .ac-nav-indicator {
43
+ height: 2px;
44
+ background: var(--ac-brand);
45
+ width: 100%;
46
+ margin-top: 4px;
47
+ }
@@ -0,0 +1,38 @@
1
+ import clsx from 'clsx';
2
+ import './AcidNavigationMenu.css';
3
+
4
+ export interface NavItem {
5
+ label: string;
6
+ href: string;
7
+ active?: boolean;
8
+ }
9
+
10
+ export interface AcidNavigationMenuProps {
11
+ items: NavItem[];
12
+ className?: string;
13
+ orientation?: 'horizontal' | 'vertical';
14
+ }
15
+
16
+ export const AcidNavigationMenu = ({
17
+ items,
18
+ className,
19
+ orientation = 'horizontal'
20
+ }: AcidNavigationMenuProps) => {
21
+ return (
22
+ <nav className={clsx('ac-nav-menu', `ac-nav-${orientation}`, className)}>
23
+ <ul className="ac-nav-list">
24
+ {items.map((item, index) => (
25
+ <li key={index} className="ac-nav-item">
26
+ <a
27
+ href={item.href}
28
+ className={clsx('ac-nav-link', item.active && 'ac-active')}
29
+ >
30
+ <span className="ac-nav-label">{item.label}</span>
31
+ {item.active && <div className="ac-nav-indicator" />}
32
+ </a>
33
+ </li>
34
+ ))}
35
+ </ul>
36
+ </nav>
37
+ );
38
+ };