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,52 @@
1
+ import React from 'react';
2
+ import clsx from 'clsx';
3
+ import { motion } from 'framer-motion';
4
+ import { AlertCircle, AlertTriangle, CheckCircle, Info, X } from 'lucide-react';
5
+ import './AcidAlert.css';
6
+
7
+ export type AcidAlertVariant = 'info' | 'success' | 'warning' | 'error';
8
+
9
+ export interface AcidAlertProps {
10
+ variant?: AcidAlertVariant;
11
+ title?: string;
12
+ children: React.ReactNode;
13
+ onClose?: () => void;
14
+ className?: string;
15
+ icon?: boolean;
16
+ }
17
+
18
+ const icons = {
19
+ info: <Info size={18} />,
20
+ success: <CheckCircle size={18} />,
21
+ warning: <AlertTriangle size={18} />,
22
+ error: <AlertCircle size={18} />,
23
+ };
24
+
25
+ export const AcidAlert = ({
26
+ variant = 'info',
27
+ title,
28
+ children,
29
+ onClose,
30
+ className,
31
+ icon = true
32
+ }: AcidAlertProps) => {
33
+ return (
34
+ <motion.div
35
+ initial={{ opacity: 0, x: -10 }}
36
+ animate={{ opacity: 1, x: 0 }}
37
+ exit={{ opacity: 0, x: 10 }}
38
+ className={clsx('ac-alert', `ac-alert-${variant}`, className)}
39
+ >
40
+ {icon && <div className="ac-alert-icon">{icons[variant]}</div>}
41
+ <div className="ac-alert-content">
42
+ {title && <h5 className="ac-alert-title">{title}</h5>}
43
+ <div className="ac-alert-description">{children}</div>
44
+ </div>
45
+ {onClose && (
46
+ <button className="ac-alert-close" onClick={onClose}>
47
+ <X size={16} />
48
+ </button>
49
+ )}
50
+ </motion.div>
51
+ );
52
+ };
@@ -0,0 +1,103 @@
1
+ .ac-notification-stack {
2
+ display: flex;
3
+ flex-direction: column;
4
+ gap: 12px;
5
+ z-index: 9999;
6
+ pointer-events: none;
7
+ width: 360px;
8
+ max-width: calc(100vw - 4rem);
9
+ }
10
+
11
+ .ac-notification {
12
+ position: relative;
13
+ display: flex;
14
+ gap: 16px;
15
+ background: rgba(0, 0, 0, 0.85);
16
+ backdrop-filter: blur(12px);
17
+ border: 1px solid var(--ac-border-muted);
18
+ padding: 1rem;
19
+ border-radius: 8px;
20
+ pointer-events: auto;
21
+ overflow: hidden;
22
+ box-shadow: 0 10px 30px rgba(0, 0, 0, 0.4);
23
+ }
24
+
25
+ .ac-notification-icon {
26
+ flex-shrink: 0;
27
+ width: 32px;
28
+ height: 32px;
29
+ display: flex;
30
+ align-items: center;
31
+ justify-content: center;
32
+ background: rgba(var(--ac-brand-rgb), 0.1);
33
+ border: 1px solid rgba(var(--ac-brand-rgb), 0.2);
34
+ border-radius: 6px;
35
+ color: var(--ac-brand);
36
+ }
37
+
38
+ .ac-notification-content {
39
+ flex: 1;
40
+ min-width: 0;
41
+ }
42
+
43
+ .ac-notification-header {
44
+ display: flex;
45
+ justify-content: space-between;
46
+ align-items: center;
47
+ margin-bottom: 4px;
48
+ }
49
+
50
+ .ac-notification-title {
51
+ font-size: 0.75rem;
52
+ font-weight: 700;
53
+ font-family: var(--font-mono);
54
+ color: var(--ac-text-primary);
55
+ letter-spacing: 0.05em;
56
+ text-transform: uppercase;
57
+ }
58
+
59
+ .ac-notification-time {
60
+ font-size: 0.6rem;
61
+ color: var(--ac-text-muted);
62
+ font-family: var(--font-mono);
63
+ }
64
+
65
+ .ac-notification-message {
66
+ font-size: 0.75rem;
67
+ color: var(--ac-text-secondary);
68
+ line-height: 1.4;
69
+ margin: 0;
70
+ }
71
+
72
+ .ac-notification-close {
73
+ background: transparent;
74
+ border: none;
75
+ color: var(--ac-text-muted);
76
+ cursor: pointer;
77
+ padding: 2px;
78
+ transition: color 0.15s;
79
+ height: fit-content;
80
+ }
81
+
82
+ .ac-notification-close:hover {
83
+ color: var(--ac-brand);
84
+ }
85
+
86
+ .ac-notification-border {
87
+ position: absolute;
88
+ bottom: 0;
89
+ left: 0;
90
+ height: 2px;
91
+ background: var(--ac-brand);
92
+ animation: ac-notification-progress 5s linear forwards;
93
+ }
94
+
95
+ @keyframes ac-notification-progress {
96
+ from {
97
+ width: 100%;
98
+ }
99
+
100
+ to {
101
+ width: 0%;
102
+ }
103
+ }
@@ -0,0 +1,62 @@
1
+ import React from 'react';
2
+ import { motion, AnimatePresence } from 'framer-motion';
3
+ import { Bell, X } from 'lucide-react';
4
+ import clsx from 'clsx';
5
+ import './AcidAnimatedNotification.css';
6
+
7
+ export interface AcidNotification {
8
+ id: string;
9
+ title: string;
10
+ message: string;
11
+ time?: string;
12
+ icon?: React.ReactNode;
13
+ }
14
+
15
+ export interface AcidAnimatedNotificationProps {
16
+ notifications: AcidNotification[];
17
+ onDismiss?: (id: string) => void;
18
+ className?: string;
19
+ }
20
+
21
+ export const AcidAnimatedNotification = ({
22
+ notifications,
23
+ onDismiss,
24
+ className
25
+ }: AcidAnimatedNotificationProps) => {
26
+ return (
27
+ <div className={clsx('ac-notification-stack', className)}>
28
+ <AnimatePresence mode="popLayout">
29
+ {notifications.map((n) => (
30
+ <motion.div
31
+ key={n.id}
32
+ layout
33
+ initial={{ opacity: 0, x: 50, scale: 0.9 }}
34
+ animate={{ opacity: 1, x: 0, scale: 1 }}
35
+ exit={{ opacity: 0, scale: 0.9, transition: { duration: 0.2 } }}
36
+ className="ac-notification"
37
+ >
38
+ <div className="ac-notification-icon">
39
+ {n.icon || <Bell size={18} />}
40
+ </div>
41
+ <div className="ac-notification-content">
42
+ <div className="ac-notification-header">
43
+ <span className="ac-notification-title">{n.title}</span>
44
+ {n.time && <span className="ac-notification-time">{n.time}</span>}
45
+ </div>
46
+ <p className="ac-notification-message">{n.message}</p>
47
+ </div>
48
+ {onDismiss && (
49
+ <button
50
+ className="ac-notification-close"
51
+ onClick={() => onDismiss(n.id)}
52
+ >
53
+ <X size={14} />
54
+ </button>
55
+ )}
56
+ <div className="ac-notification-border" />
57
+ </motion.div>
58
+ ))}
59
+ </AnimatePresence>
60
+ </div>
61
+ );
62
+ };
@@ -0,0 +1,16 @@
1
+ .ac-aspect-ratio {
2
+ position: relative;
3
+ width: 100%;
4
+ }
5
+
6
+ .ac-aspect-ratio-content {
7
+ position: absolute;
8
+ top: 0;
9
+ right: 0;
10
+ bottom: 0;
11
+ left: 0;
12
+ overflow: hidden;
13
+ display: flex;
14
+ align-items: center;
15
+ justify-content: center;
16
+ }
@@ -0,0 +1,21 @@
1
+ import React from 'react';
2
+ import clsx from 'clsx';
3
+ import './AcidAspectRatio.css';
4
+
5
+ export interface AcidAspectRatioProps extends React.HTMLAttributes<HTMLDivElement> {
6
+ ratio?: number;
7
+ }
8
+
9
+ export const AcidAspectRatio = ({ ratio = 16 / 9, children, className, ...props }: AcidAspectRatioProps) => {
10
+ return (
11
+ <div
12
+ className={clsx('ac-aspect-ratio', className)}
13
+ style={{ paddingBottom: `${(1 / ratio) * 100}%` }}
14
+ {...props}
15
+ >
16
+ <div className="ac-aspect-ratio-content">
17
+ {children}
18
+ </div>
19
+ </div>
20
+ );
21
+ };
@@ -0,0 +1,49 @@
1
+ .ac-aurora-text {
2
+ position: relative;
3
+ display: inline-block;
4
+ color: var(--ac-text-primary);
5
+ font-weight: 800;
6
+ }
7
+
8
+ .ac-aurora-overlay {
9
+ position: absolute;
10
+ inset: 0;
11
+ color: transparent;
12
+ -webkit-text-stroke: 0px transparent;
13
+ background: linear-gradient(to right,
14
+ #f43f5e,
15
+ #fb923c,
16
+ #facc15,
17
+ #4ade80,
18
+ #2dd4bf,
19
+ #3b82f6,
20
+ #a855f7,
21
+ #ec4899,
22
+ #f43f5e);
23
+ background-size: 200% auto;
24
+ background-clip: text;
25
+ -webkit-background-clip: text;
26
+ filter: blur(8px);
27
+ opacity: 0.6;
28
+ animation: aurora-flow 8s linear infinite;
29
+ }
30
+
31
+ .ac-aurora-low .ac-aurora-overlay {
32
+ filter: blur(12px);
33
+ opacity: 0.3;
34
+ }
35
+
36
+ .ac-aurora-high .ac-aurora-overlay {
37
+ filter: blur(6px);
38
+ opacity: 0.8;
39
+ }
40
+
41
+ @keyframes aurora-flow {
42
+ 0% {
43
+ background-position: 0% center;
44
+ }
45
+
46
+ 100% {
47
+ background-position: 200% center;
48
+ }
49
+ }
@@ -0,0 +1,19 @@
1
+ import React from 'react';
2
+ import clsx from 'clsx';
3
+ import './AcidAuroraText.css';
4
+
5
+ export interface AcidAuroraTextProps {
6
+ children: React.ReactNode;
7
+ className?: string;
8
+ style?: React.CSSProperties;
9
+ intensity?: 'low' | 'medium' | 'high';
10
+ }
11
+
12
+ export const AcidAuroraText = ({ children, className, style, intensity = 'medium' }: AcidAuroraTextProps) => {
13
+ return (
14
+ <span className={clsx('ac-aurora-text', `ac-aurora-${intensity}`, className)} style={style}>
15
+ {children}
16
+ <span className="ac-aurora-overlay" aria-hidden="true">{children}</span>
17
+ </span>
18
+ );
19
+ };
@@ -0,0 +1,70 @@
1
+ .ac-avatar {
2
+ position: relative;
3
+ display: flex;
4
+ align-items: center;
5
+ justify-content: center;
6
+ background: var(--ac-surface);
7
+ border: 1px solid var(--ac-border-muted);
8
+ overflow: hidden;
9
+ flex-shrink: 0;
10
+ }
11
+
12
+ .ac-avatar-img {
13
+ width: 100%;
14
+ height: 100%;
15
+ object-fit: cover;
16
+ }
17
+
18
+ .ac-avatar-fallback {
19
+ font-family: var(--font-mono);
20
+ font-weight: 700;
21
+ color: var(--ac-text-muted);
22
+ font-size: 0.9rem;
23
+ }
24
+
25
+ /* Sizes */
26
+ .ac-avatar-sm {
27
+ width: 32px;
28
+ height: 32px;
29
+ }
30
+
31
+ .ac-avatar-md {
32
+ width: 44px;
33
+ height: 44px;
34
+ }
35
+
36
+ .ac-avatar-lg {
37
+ width: 64px;
38
+ height: 64px;
39
+ }
40
+
41
+ .ac-avatar-xl {
42
+ width: 96px;
43
+ height: 96px;
44
+ }
45
+
46
+ /* Shapes */
47
+ .ac-avatar-circle {
48
+ border-radius: 50%;
49
+ }
50
+
51
+ .ac-avatar-square {
52
+ border-radius: var(--ac-radius-sm);
53
+ }
54
+
55
+ .ac-avatar-industrial {
56
+ clip-path: polygon(10% 0, 100% 0, 100% 90%, 90% 100%, 0 100%, 0 10%);
57
+ }
58
+
59
+ .ac-avatar-status {
60
+ position: absolute;
61
+ bottom: 0;
62
+ right: 0;
63
+ width: 25%;
64
+ height: 25%;
65
+ background: #4caf50;
66
+ border: 2px solid var(--ac-bg);
67
+ border-radius: 50%;
68
+ display: none;
69
+ /* Optional: Toggle on if active */
70
+ }
@@ -0,0 +1,32 @@
1
+
2
+ import clsx from 'clsx';
3
+ import './AcidAvatar.css';
4
+
5
+ export interface AcidAvatarProps {
6
+ src?: string;
7
+ fallback?: string;
8
+ size?: 'sm' | 'md' | 'lg' | 'xl';
9
+ shape?: 'square' | 'circle' | 'industrial';
10
+ className?: string;
11
+ }
12
+
13
+ export const AcidAvatar = ({
14
+ src,
15
+ fallback = '?',
16
+ size = 'md',
17
+ shape = 'industrial',
18
+ className
19
+ }: AcidAvatarProps) => {
20
+ return (
21
+ <div className={clsx('ac-avatar', `ac-avatar-${size}`, `ac-avatar-${shape}`, className)}>
22
+ {src ? (
23
+ <img src={src} alt="Avatar" className="ac-avatar-img" />
24
+ ) : (
25
+ <div className="ac-avatar-fallback">
26
+ {fallback.substring(0, 2).toUpperCase()}
27
+ </div>
28
+ )}
29
+ <div className="ac-avatar-status" />
30
+ </div>
31
+ );
32
+ };
@@ -0,0 +1,54 @@
1
+ .ac-badge {
2
+ display: inline-flex;
3
+ align-items: center;
4
+ justify-content: center;
5
+ font-family: var(--font-mono);
6
+ font-weight: 700;
7
+ white-space: nowrap;
8
+ text-transform: uppercase;
9
+ letter-spacing: 0.05em;
10
+ border-radius: var(--ac-radius-sm);
11
+ transition: all 0.2s ease;
12
+ }
13
+
14
+ /* Sizes */
15
+ .ac-badge-sm {
16
+ padding: 0 0.4rem;
17
+ font-size: 0.65rem;
18
+ height: 18px;
19
+ }
20
+
21
+ .ac-badge-md {
22
+ padding: 0 0.6rem;
23
+ font-size: 0.75rem;
24
+ height: 24px;
25
+ }
26
+
27
+ .ac-badge-lg {
28
+ padding: 0 0.8rem;
29
+ font-size: 0.85rem;
30
+ height: 30px;
31
+ }
32
+
33
+ /* Variants */
34
+ .ac-badge-solid {
35
+ background: var(--ac-text-primary);
36
+ color: var(--ac-bg);
37
+ }
38
+
39
+ .ac-badge-outline {
40
+ background: transparent;
41
+ color: var(--ac-text-primary);
42
+ border: 1px solid var(--ac-border-bright);
43
+ }
44
+
45
+ .ac-badge-subtle {
46
+ background: var(--ac-surface);
47
+ color: var(--ac-text-secondary);
48
+ border: 1px solid var(--ac-border-muted);
49
+ }
50
+
51
+ .ac-badge-brand {
52
+ background: var(--ac-brand);
53
+ color: #fff;
54
+ }
@@ -0,0 +1,27 @@
1
+ import React from 'react';
2
+ import clsx from 'clsx';
3
+ import './AcidBadge.css';
4
+
5
+ export interface AcidBadgeProps extends React.HTMLAttributes<HTMLSpanElement> {
6
+ variant?: 'solid' | 'outline' | 'subtle' | 'brand';
7
+ size?: 'sm' | 'md' | 'lg';
8
+ }
9
+
10
+ export const AcidBadge = React.forwardRef<HTMLSpanElement, AcidBadgeProps>(
11
+ ({ className, variant = 'solid', size = 'md', children, ...props }, ref) => {
12
+ return (
13
+ <span
14
+ ref={ref}
15
+ className={clsx(
16
+ 'ac-badge',
17
+ `ac-badge-${variant}`,
18
+ `ac-badge-${size}`,
19
+ className
20
+ )}
21
+ {...props}
22
+ >
23
+ {children}
24
+ </span>
25
+ );
26
+ }
27
+ );
@@ -0,0 +1,98 @@
1
+ .ac-bento-grid {
2
+ display: grid;
3
+ grid-template-columns: repeat(var(--bento-cols, 4), 1fr);
4
+ grid-auto-rows: minmax(160px, auto);
5
+ gap: 1.5rem;
6
+ width: 100%;
7
+ }
8
+
9
+ .ac-bento-item {
10
+ position: relative;
11
+ background: var(--ac-surface);
12
+ border: 1px solid var(--ac-border-muted);
13
+ border-radius: 12px;
14
+ display: flex;
15
+ flex-direction: column;
16
+ overflow: hidden;
17
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
18
+ }
19
+
20
+ .ac-bento-item:hover {
21
+ border-color: var(--ac-brand);
22
+ transform: translateY(-2px);
23
+ box-shadow: 0 10px 30px -10px rgba(0, 0, 0, 0.5);
24
+ }
25
+
26
+ .ac-bento-content {
27
+ flex: 1;
28
+ position: relative;
29
+ overflow: hidden;
30
+ }
31
+
32
+ .ac-bento-footer {
33
+ padding: 1.25rem;
34
+ background: linear-gradient(to top, rgba(0, 0, 0, 0.4), transparent);
35
+ display: flex;
36
+ align-items: center;
37
+ gap: 12px;
38
+ z-index: 1;
39
+ }
40
+
41
+ .ac-bento-icon {
42
+ color: var(--ac-brand);
43
+ display: flex;
44
+ align-items: center;
45
+ justify-content: center;
46
+ }
47
+
48
+ .ac-bento-text {
49
+ display: flex;
50
+ flex-direction: column;
51
+ }
52
+
53
+ .ac-bento-title {
54
+ font-size: 0.875rem;
55
+ font-weight: 700;
56
+ margin: 0;
57
+ color: var(--ac-text-primary);
58
+ letter-spacing: 0.05em;
59
+ }
60
+
61
+ .ac-bento-desc {
62
+ font-size: 0.75rem;
63
+ margin: 4px 0 0 0;
64
+ color: var(--ac-text-muted);
65
+ }
66
+
67
+ .ac-bento-corner {
68
+ position: absolute;
69
+ top: -10px;
70
+ right: -10px;
71
+ width: 20px;
72
+ height: 20px;
73
+ background: var(--ac-brand);
74
+ transform: rotate(45deg);
75
+ opacity: 0;
76
+ transition: opacity 0.3s;
77
+ }
78
+
79
+ .ac-bento-item:hover .ac-bento-corner {
80
+ opacity: 0.5;
81
+ }
82
+
83
+ @media (max-width: 1024px) {
84
+ .ac-bento-grid {
85
+ grid-template-columns: repeat(2, 1fr);
86
+ }
87
+ }
88
+
89
+ @media (max-width: 640px) {
90
+ .ac-bento-grid {
91
+ grid-template-columns: 1fr;
92
+ }
93
+
94
+ .ac-bento-item {
95
+ grid-column: span 1 !important;
96
+ grid-row: span 1 !important;
97
+ }
98
+ }
@@ -0,0 +1,68 @@
1
+ import React from 'react';
2
+ import clsx from 'clsx';
3
+ import './AcidBentoGrid.css';
4
+
5
+ export interface AcidBentoGridProps {
6
+ children: React.ReactNode;
7
+ className?: string;
8
+ cols?: number;
9
+ }
10
+
11
+ export const AcidBentoGrid = ({
12
+ children,
13
+ className,
14
+ cols = 4
15
+ }: AcidBentoGridProps) => {
16
+ return (
17
+ <div
18
+ className={clsx('ac-bento-grid', className)}
19
+ style={{ '--bento-cols': cols } as React.CSSProperties}
20
+ >
21
+ {children}
22
+ </div>
23
+ );
24
+ };
25
+
26
+ export interface AcidBentoItemProps {
27
+ children?: React.ReactNode;
28
+ title?: string;
29
+ description?: string;
30
+ icon?: React.ReactNode;
31
+ className?: string;
32
+ colSpan?: number;
33
+ rowSpan?: number;
34
+ }
35
+
36
+ export const AcidBentoItem = ({
37
+ children,
38
+ title,
39
+ description,
40
+ icon,
41
+ className,
42
+ colSpan = 1,
43
+ rowSpan = 1
44
+ }: AcidBentoItemProps) => {
45
+ return (
46
+ <div
47
+ className={clsx('ac-bento-item', className)}
48
+ style={{
49
+ gridColumn: `span ${colSpan}`,
50
+ gridRow: `span ${rowSpan}`
51
+ } as React.CSSProperties}
52
+ >
53
+ {children && (
54
+ <div className="ac-bento-content">
55
+ {children}
56
+ </div>
57
+ )}
58
+ <div className="ac-bento-footer">
59
+ {icon && <div className="ac-bento-icon">{icon}</div>}
60
+ <div className="ac-bento-text">
61
+ {title && <h3 className="ac-bento-title">{title}</h3>}
62
+ {description && <p className="ac-bento-desc">{description}</p>}
63
+ </div>
64
+ </div>
65
+ <div className="ac-bento-corner" />
66
+ </div>
67
+ );
68
+ };