@oalacea/chaosui 0.5.0 → 0.5.1

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 (197) hide show
  1. package/buttons/cta-brutal/css/cta-brutal.module.css +175 -0
  2. package/{components/buttons/cta-brutal → buttons/cta-brutal/css}/index.tsx +25 -3
  3. package/buttons/cta-brutal/tailwind/index.tsx +85 -0
  4. package/buttons/dead-button/css/dead-button.module.css +216 -0
  5. package/buttons/dead-button/tailwind/index.tsx +90 -0
  6. package/buttons/deeper-button/css/deeper-button.module.css +141 -0
  7. package/{components/buttons/deeper-button → buttons/deeper-button/css}/index.tsx +14 -3
  8. package/buttons/deeper-button/tailwind/index.tsx +78 -0
  9. package/buttons/dual-choice/css/dual-choice.module.css +176 -0
  10. package/{components/buttons/dual-choice → buttons/dual-choice/css}/index.tsx +2 -0
  11. package/buttons/dual-choice/tailwind/index.tsx +89 -0
  12. package/{components/buttons/tension-bar → buttons/tension-bar/css}/index.tsx +22 -5
  13. package/buttons/tension-bar/css/tension-bar.module.css +204 -0
  14. package/buttons/tension-bar/tailwind/index.tsx +122 -0
  15. package/decorative/inscription/css/index.tsx +66 -0
  16. package/decorative/inscription/css/inscription.module.css +160 -0
  17. package/decorative/inscription/tailwind/index.tsx +91 -0
  18. package/decorative/ornaments/css/index.tsx +136 -0
  19. package/decorative/ornaments/css/ornaments.module.css +144 -0
  20. package/decorative/ornaments/tailwind/index.tsx +122 -0
  21. package/decorative/rune-symbols/css/index.tsx +116 -0
  22. package/decorative/rune-symbols/css/rune-symbols.module.css +116 -0
  23. package/decorative/rune-symbols/tailwind/index.tsx +108 -0
  24. package/decorative/sheet-music/css/index.tsx +144 -0
  25. package/decorative/sheet-music/css/sheet-music.module.css +152 -0
  26. package/decorative/sheet-music/tailwind/index.tsx +111 -0
  27. package/layout/horizontal-scroll/css/horizontal-scroll.module.css +93 -0
  28. package/{components/layout/horizontal-scroll → layout/horizontal-scroll/css}/index.tsx +41 -5
  29. package/layout/horizontal-scroll/tailwind/index.tsx +108 -0
  30. package/layout/spec-grid/css/index.tsx +103 -0
  31. package/layout/spec-grid/css/spec-grid.module.css +125 -0
  32. package/layout/spec-grid/tailwind/index.tsx +91 -0
  33. package/{components/layout/tower-pricing → layout/tower-pricing/css}/index.tsx +43 -8
  34. package/layout/tower-pricing/css/tower-pricing.module.css +177 -0
  35. package/layout/tower-pricing/tailwind/index.tsx +106 -0
  36. package/layout/tracklist/css/index.tsx +96 -0
  37. package/layout/tracklist/css/tracklist.module.css +141 -0
  38. package/layout/tracklist/tailwind/index.tsx +92 -0
  39. package/{components/layout/void-frame → layout/void-frame/css}/index.tsx +31 -3
  40. package/layout/void-frame/css/void-frame.module.css +141 -0
  41. package/layout/void-frame/tailwind/index.tsx +64 -0
  42. package/navigation/brutal-nav/css/brutal-nav.module.css +178 -0
  43. package/{components/navigation/brutal-nav → navigation/brutal-nav/css}/index.tsx +12 -3
  44. package/navigation/brutal-nav/tailwind/index.tsx +95 -0
  45. package/{components/navigation/progress-dots → navigation/progress-dots/css}/index.tsx +7 -2
  46. package/{components/navigation/progress-dots → navigation/progress-dots/css}/progress-dots.module.css +74 -13
  47. package/navigation/progress-dots/tailwind/index.tsx +105 -0
  48. package/{components/navigation/scattered-nav → navigation/scattered-nav/css}/scattered-nav.module.css +9 -1
  49. package/navigation/scattered-nav/tailwind/index.tsx +77 -0
  50. package/{components/navigation/scroll-indicator → navigation/scroll-indicator/css}/index.tsx +18 -4
  51. package/{components/navigation/scroll-indicator → navigation/scroll-indicator/css}/scroll-indicator.module.css +57 -10
  52. package/navigation/scroll-indicator/tailwind/index.tsx +107 -0
  53. package/{components/navigation/vertical-nav → navigation/vertical-nav/css}/index.tsx +13 -3
  54. package/{components/navigation/vertical-nav → navigation/vertical-nav/css}/vertical-nav.module.css +24 -5
  55. package/navigation/vertical-nav/tailwind/index.tsx +91 -0
  56. package/package.json +8 -33
  57. package/bin/cli.js +0 -308
  58. package/components/backgrounds/light-beams/index.tsx +0 -80
  59. package/components/backgrounds/light-beams/light-beams.module.css +0 -27
  60. package/components/buttons/cta-brutal/cta-brutal.module.css +0 -81
  61. package/components/buttons/dead-button/dead-button.module.css +0 -111
  62. package/components/buttons/deeper-button/deeper-button.module.css +0 -76
  63. package/components/buttons/dual-choice/dual-choice.module.css +0 -90
  64. package/components/buttons/tension-bar/tension-bar.module.css +0 -105
  65. package/components/decorative/coffee-stain/coffee-stain.module.css +0 -24
  66. package/components/decorative/coffee-stain/index.tsx +0 -55
  67. package/components/decorative/ornaments/index.tsx +0 -51
  68. package/components/decorative/ornaments/ornaments.module.css +0 -33
  69. package/components/decorative/rune-symbols/index.tsx +0 -55
  70. package/components/decorative/rune-symbols/rune-symbols.module.css +0 -22
  71. package/components/layout/horizontal-scroll/horizontal-scroll.module.css +0 -30
  72. package/components/layout/spec-grid/index.tsx +0 -56
  73. package/components/layout/spec-grid/spec-grid.module.css +0 -21
  74. package/components/layout/tower-pricing/tower-pricing.module.css +0 -27
  75. package/components/layout/tracklist/index.tsx +0 -45
  76. package/components/layout/tracklist/tracklist.module.css +0 -24
  77. package/components/layout/void-frame/void-frame.module.css +0 -38
  78. package/components/navigation/brutal-nav/brutal-nav.module.css +0 -85
  79. package/components/navigation/hexagon-menu/css/hexagon-menu.module.css +0 -55
  80. package/components/navigation/hexagon-menu/css/index.tsx +0 -35
  81. package/components/navigation/hexagon-menu/tailwind/index.tsx +0 -53
  82. /package/{components/backgrounds → backgrounds}/glow-orbs/glow-orbs.module.css +0 -0
  83. /package/{components/backgrounds → backgrounds}/glow-orbs/index.tsx +0 -0
  84. /package/{components/backgrounds → backgrounds}/noise-canvas/index.tsx +0 -0
  85. /package/{components/backgrounds → backgrounds}/noise-canvas/noise-canvas.module.css +0 -0
  86. /package/{components/backgrounds → backgrounds}/particle-field/index.tsx +0 -0
  87. /package/{components/backgrounds → backgrounds}/particle-field/particle-field.module.css +0 -0
  88. /package/{components/buttons → buttons}/chaos-button/chaos-button.module.css +0 -0
  89. /package/{components/buttons → buttons}/chaos-button/index.tsx +0 -0
  90. /package/{components/buttons/dead-button → buttons/dead-button/css}/index.tsx +0 -0
  91. /package/{components/buttons → buttons}/glitch-button/glitch-button.module.css +0 -0
  92. /package/{components/buttons → buttons}/glitch-button/index.tsx +0 -0
  93. /package/{components/chaos-vars.css → chaos-vars.css} +0 -0
  94. /package/{components/cyber → cyber}/cyber-avatar/css/cyber-avatar.module.css +0 -0
  95. /package/{components/cyber → cyber}/cyber-avatar/css/index.tsx +0 -0
  96. /package/{components/cyber → cyber}/cyber-avatar/tailwind/index.tsx +0 -0
  97. /package/{components/cyber → cyber}/cyber-input/css/cyber-input.module.css +0 -0
  98. /package/{components/cyber → cyber}/cyber-input/css/index.tsx +0 -0
  99. /package/{components/cyber → cyber}/cyber-input/tailwind/index.tsx +0 -0
  100. /package/{components/cyber → cyber}/cyber-loader/css/cyber-loader.module.css +0 -0
  101. /package/{components/cyber → cyber}/cyber-loader/css/index.tsx +0 -0
  102. /package/{components/cyber → cyber}/cyber-loader/tailwind/index.tsx +0 -0
  103. /package/{components/cyber → cyber}/cyber-modal/css/cyber-modal.module.css +0 -0
  104. /package/{components/cyber → cyber}/cyber-modal/css/index.tsx +0 -0
  105. /package/{components/cyber → cyber}/cyber-modal/tailwind/index.tsx +0 -0
  106. /package/{components/cyber → cyber}/cyber-slider/css/cyber-slider.module.css +0 -0
  107. /package/{components/cyber → cyber}/cyber-slider/css/index.tsx +0 -0
  108. /package/{components/cyber → cyber}/cyber-slider/tailwind/index.tsx +0 -0
  109. /package/{components/cyber → cyber}/cyber-tooltip/css/cyber-tooltip.module.css +0 -0
  110. /package/{components/cyber → cyber}/cyber-tooltip/css/index.tsx +0 -0
  111. /package/{components/cyber → cyber}/cyber-tooltip/tailwind/index.tsx +0 -0
  112. /package/{components/effects → effects}/cursor-follower/cursor-follower.module.css +0 -0
  113. /package/{components/effects → effects}/cursor-follower/index.tsx +0 -0
  114. /package/{components/effects → effects}/glitch-image/css/glitch-image.module.css +0 -0
  115. /package/{components/effects → effects}/glitch-image/css/index.tsx +0 -0
  116. /package/{components/effects → effects}/glitch-image/tailwind/index.tsx +0 -0
  117. /package/{components/effects → effects}/glowing-border/css/glowing-border.module.css +0 -0
  118. /package/{components/effects → effects}/glowing-border/css/index.tsx +0 -0
  119. /package/{components/effects → effects}/glowing-border/tailwind/index.tsx +0 -0
  120. /package/{components/effects → effects}/screen-distortion/index.tsx +0 -0
  121. /package/{components/effects → effects}/screen-distortion/screen-distortion.module.css +0 -0
  122. /package/{components/effects → effects}/warning-tape/index.tsx +0 -0
  123. /package/{components/effects → effects}/warning-tape/warning-tape.module.css +0 -0
  124. /package/{components/layout → layout}/data-grid/css/data-grid.module.css +0 -0
  125. /package/{components/layout → layout}/data-grid/css/index.tsx +0 -0
  126. /package/{components/layout → layout}/data-grid/tailwind/index.tsx +0 -0
  127. /package/{components/layout → layout}/hologram-card/css/hologram-card.module.css +0 -0
  128. /package/{components/layout → layout}/hologram-card/css/index.tsx +0 -0
  129. /package/{components/layout → layout}/hologram-card/tailwind/index.tsx +0 -0
  130. /package/{components/navigation/scattered-nav → navigation/scattered-nav/css}/index.tsx +0 -0
  131. /package/{components/neon → neon}/neon-alert/css/index.tsx +0 -0
  132. /package/{components/neon → neon}/neon-alert/css/neon-alert.module.css +0 -0
  133. /package/{components/neon → neon}/neon-alert/tailwind/index.tsx +0 -0
  134. /package/{components/neon → neon}/neon-badge/css/index.tsx +0 -0
  135. /package/{components/neon → neon}/neon-badge/css/neon-badge.module.css +0 -0
  136. /package/{components/neon → neon}/neon-badge/tailwind/index.tsx +0 -0
  137. /package/{components/neon → neon}/neon-button/css/index.tsx +0 -0
  138. /package/{components/neon → neon}/neon-button/css/neon-button.module.css +0 -0
  139. /package/{components/neon → neon}/neon-button/tailwind/index.tsx +0 -0
  140. /package/{components/neon → neon}/neon-divider/css/index.tsx +0 -0
  141. /package/{components/neon → neon}/neon-divider/css/neon-divider.module.css +0 -0
  142. /package/{components/neon → neon}/neon-divider/tailwind/index.tsx +0 -0
  143. /package/{components/neon → neon}/neon-progress/css/index.tsx +0 -0
  144. /package/{components/neon → neon}/neon-progress/css/neon-progress.module.css +0 -0
  145. /package/{components/neon → neon}/neon-progress/tailwind/index.tsx +0 -0
  146. /package/{components/neon → neon}/neon-tabs/css/index.tsx +0 -0
  147. /package/{components/neon → neon}/neon-tabs/css/neon-tabs.module.css +0 -0
  148. /package/{components/neon → neon}/neon-tabs/tailwind/index.tsx +0 -0
  149. /package/{components/neon → neon}/neon-toggle/css/index.tsx +0 -0
  150. /package/{components/neon → neon}/neon-toggle/css/neon-toggle.module.css +0 -0
  151. /package/{components/neon → neon}/neon-toggle/tailwind/index.tsx +0 -0
  152. /package/{components/overlays → overlays}/noise-overlay/index.tsx +0 -0
  153. /package/{components/overlays → overlays}/noise-overlay/noise-overlay.module.css +0 -0
  154. /package/{components/overlays → overlays}/scanlines/index.tsx +0 -0
  155. /package/{components/overlays → overlays}/scanlines/scanlines.module.css +0 -0
  156. /package/{components/overlays → overlays}/static-flicker/index.tsx +0 -0
  157. /package/{components/overlays → overlays}/static-flicker/static-flicker.module.css +0 -0
  158. /package/{components/overlays → overlays}/vignette/index.tsx +0 -0
  159. /package/{components/overlays → overlays}/vignette/vignette.module.css +0 -0
  160. /package/{components/text → text}/ascii-art/css/ascii-art.module.css +0 -0
  161. /package/{components/text → text}/ascii-art/css/index.tsx +0 -0
  162. /package/{components/text → text}/ascii-art/tailwind/index.tsx +0 -0
  163. /package/{components/text → text}/blood-drip/css/blood-drip.module.css +0 -0
  164. /package/{components/text → text}/blood-drip/css/index.tsx +0 -0
  165. /package/{components/text → text}/blood-drip/tailwind/index.tsx +0 -0
  166. /package/{components/text → text}/char-glitch/css/char-glitch.module.css +0 -0
  167. /package/{components/text → text}/char-glitch/css/index.tsx +0 -0
  168. /package/{components/text → text}/char-glitch/tailwind/index.tsx +0 -0
  169. /package/{components/text → text}/countdown-display/css/countdown-display.module.css +0 -0
  170. /package/{components/text → text}/countdown-display/css/index.tsx +0 -0
  171. /package/{components/text → text}/countdown-display/tailwind/index.tsx +0 -0
  172. /package/{components/text → text}/distortion-text/distortion-text.module.css +0 -0
  173. /package/{components/text → text}/distortion-text/index.tsx +0 -0
  174. /package/{components/text → text}/falling-text/falling-text.module.css +0 -0
  175. /package/{components/text → text}/falling-text/index.tsx +0 -0
  176. /package/{components/text → text}/flicker-text/flicker-text.module.css +0 -0
  177. /package/{components/text → text}/flicker-text/index.tsx +0 -0
  178. /package/{components/text → text}/giant-layers/css/giant-layers.module.css +0 -0
  179. /package/{components/text → text}/giant-layers/css/index.tsx +0 -0
  180. /package/{components/text → text}/giant-layers/tailwind/index.tsx +0 -0
  181. /package/{components/text → text}/glitch-text/glitch-text.module.css +0 -0
  182. /package/{components/text → text}/glitch-text/index.tsx +0 -0
  183. /package/{components/text → text}/reveal-text/css/index.tsx +0 -0
  184. /package/{components/text → text}/reveal-text/css/reveal-text.module.css +0 -0
  185. /package/{components/text → text}/reveal-text/tailwind/index.tsx +0 -0
  186. /package/{components/text → text}/rotate-text/css/index.tsx +0 -0
  187. /package/{components/text → text}/rotate-text/css/rotate-text.module.css +0 -0
  188. /package/{components/text → text}/rotate-text/tailwind/index.tsx +0 -0
  189. /package/{components/text → text}/strike-reveal/css/index.tsx +0 -0
  190. /package/{components/text → text}/strike-reveal/css/strike-reveal.module.css +0 -0
  191. /package/{components/text → text}/strike-reveal/tailwind/index.tsx +0 -0
  192. /package/{components/text → text}/terminal-output/css/index.tsx +0 -0
  193. /package/{components/text → text}/terminal-output/css/terminal-output.module.css +0 -0
  194. /package/{components/text → text}/terminal-output/tailwind/index.tsx +0 -0
  195. /package/{components/text → text}/typing-text/css/index.tsx +0 -0
  196. /package/{components/text → text}/typing-text/css/typing-text.module.css +0 -0
  197. /package/{components/text → text}/typing-text/tailwind/index.tsx +0 -0
package/bin/cli.js DELETED
@@ -1,308 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- import { Command } from 'commander';
4
- import pc from 'picocolors';
5
- import prompts from 'prompts';
6
- import fs from 'fs-extra';
7
- import path from 'path';
8
- import { fileURLToPath } from 'url';
9
-
10
- const __filename = fileURLToPath(import.meta.url);
11
- const __dirname = path.dirname(__filename);
12
- const COMPONENTS_DIR = path.join(__dirname, '..', 'components');
13
-
14
- // Component registry
15
- const COMPONENTS = {
16
- // Overlays
17
- 'noise-overlay': { category: 'overlays', description: 'SVG fractal noise texture overlay', status: 'ready' },
18
- 'scanlines': { category: 'overlays', description: 'CRT-style horizontal scanlines', status: 'ready' },
19
- 'vignette': { category: 'overlays', description: 'Dark edges radial gradient', status: 'ready' },
20
- 'static-flicker': { category: 'overlays', description: 'Animated noise with flicker effect', status: 'ready' },
21
-
22
- // Text effects
23
- 'glitch-text': { category: 'text', description: 'RGB split glitch text effect', status: 'ready' },
24
- 'flicker-text': { category: 'text', description: 'Text that flickers randomly', status: 'ready' },
25
- 'distortion-text': { category: 'text', description: 'Wave/shake/skew/blur text effects', status: 'ready' },
26
- 'falling-text': { category: 'text', description: 'Letters falling in cascade', status: 'ready' },
27
- 'typing-text': { category: 'text', description: 'Terminal typing effect', status: 'ready' },
28
- 'char-glitch': { category: 'text', description: 'Per-character glitch effect', status: 'ready' },
29
- 'reveal-text': { category: 'text', description: 'Text reveal on scroll', status: 'ready' },
30
- 'strike-reveal': { category: 'text', description: 'Strikethrough then reveal', status: 'ready' },
31
- 'giant-layers': { category: 'text', description: 'Giant text with 3D shadow layers', status: 'ready' },
32
- 'blood-drip': { category: 'text', description: 'Dripping blood effect letters', status: 'ready' },
33
- 'rotate-text': { category: 'text', description: 'Vertical rotating text', status: 'ready' },
34
- 'ascii-art': { category: 'text', description: 'Styled ASCII art block', status: 'ready' },
35
- 'countdown-display': { category: 'text', description: 'Stylized countdown timer', status: 'ready' },
36
- 'terminal-output': { category: 'text', description: 'Terminal block with prompt', status: 'ready' },
37
-
38
- // Buttons
39
- 'glitch-button': { category: 'buttons', description: 'Button with glitch hover effect', status: 'ready' },
40
- 'chaos-button': { category: 'buttons', description: 'Chaotic animated button with debris', status: 'ready' },
41
- 'dead-button': { category: 'buttons', description: 'Destroyed/glitched button with layers', status: 'ready' },
42
- 'deeper-button': { category: 'buttons', description: 'Go deeper style descent button', status: 'ready' },
43
- 'dual-choice': { category: 'buttons', description: 'Yes/No dual button choice', status: 'ready' },
44
- 'cta-brutal': { category: 'buttons', description: 'Brutalist CTA button', status: 'ready' },
45
- 'tension-bar': { category: 'buttons', description: 'Dramatic tension/progress bar', status: 'ready' },
46
-
47
- // Backgrounds
48
- 'noise-canvas': { category: 'backgrounds', description: 'Animated noise canvas background', status: 'ready' },
49
- 'light-beams': { category: 'backgrounds', description: 'Vertical colored light beams', status: 'ready' },
50
- 'glow-orbs': { category: 'backgrounds', description: 'Floating blurred orbs', status: 'ready' },
51
- 'particle-field': { category: 'backgrounds', description: 'Drifting particle background', status: 'ready' },
52
-
53
- // Effects
54
- 'warning-tape': { category: 'effects', description: 'Scrolling warning tape banner', status: 'ready' },
55
- 'cursor-follower': { category: 'effects', description: 'Custom cursor with trail', status: 'ready' },
56
- 'screen-distortion': { category: 'effects', description: 'Full screen distortion effect', status: 'ready' },
57
- 'glowing-border': { category: 'effects', description: 'Glowing border container with pulse', status: 'ready' },
58
- 'glitch-image': { category: 'effects', description: 'Image with RGB glitch on hover', status: 'ready' },
59
-
60
- // Neon components
61
- 'neon-button': { category: 'neon', description: 'Button with neon glow effect', status: 'ready' },
62
- 'neon-badge': { category: 'neon', description: 'Luminous status badges', status: 'ready' },
63
- 'neon-progress': { category: 'neon', description: 'Glowing progress bar with shimmer', status: 'ready' },
64
- 'neon-toggle': { category: 'neon', description: 'On/off switch with neon glow', status: 'ready' },
65
- 'neon-alert': { category: 'neon', description: 'Alert notifications with neon style', status: 'ready' },
66
- 'neon-tabs': { category: 'neon', description: 'Tab navigation with glow effect', status: 'ready' },
67
- 'neon-divider': { category: 'neon', description: 'Luminous section dividers', status: 'ready' },
68
-
69
- // Cyber components
70
- 'cyber-input': { category: 'cyber', description: 'Input with animated border glow', status: 'ready' },
71
- 'cyber-loader': { category: 'cyber', description: 'Futuristic spinners and loaders', status: 'ready' },
72
- 'cyber-modal': { category: 'cyber', description: 'Modal with scanlines and glow', status: 'ready' },
73
- 'cyber-avatar': { category: 'cyber', description: 'Avatar with neon border and status', status: 'ready' },
74
- 'cyber-slider': { category: 'cyber', description: 'Slider with neon track and thumb', status: 'ready' },
75
- 'cyber-tooltip': { category: 'cyber', description: 'Terminal-style tooltips', status: 'ready' },
76
-
77
- // Layout components
78
- 'hologram-card': { category: 'layout', description: 'Holographic card with scanlines', status: 'ready' },
79
- 'data-grid': { category: 'layout', description: 'Terminal-style data table', status: 'ready' },
80
- 'horizontal-scroll': { category: 'layout', description: 'Horizontal scrolling panels', status: 'ready' },
81
- 'void-frame': { category: 'layout', description: 'Frame with decorative corners', status: 'ready' },
82
- 'tower-pricing': { category: 'layout', description: 'Vertical stacked pricing cards', status: 'ready' },
83
- 'spec-grid': { category: 'layout', description: 'Terminal-style specs grid', status: 'ready' },
84
- 'tracklist': { category: 'layout', description: 'Music tracklist component', status: 'ready' },
85
-
86
- // Navigation
87
- 'hexagon-menu': { category: 'navigation', description: 'Honeycomb hexagon menu', status: 'ready' },
88
- 'scattered-nav': { category: 'navigation', description: 'Scattered fragment navigation', status: 'ready' },
89
- 'vertical-nav': { category: 'navigation', description: 'Vertical nav with glyphs', status: 'ready' },
90
- 'brutal-nav': { category: 'navigation', description: 'Brutalist chaotic navigation', status: 'ready' },
91
- 'progress-dots': { category: 'navigation', description: 'Section progress indicator', status: 'ready' },
92
- 'scroll-indicator': { category: 'navigation', description: 'Vertical scroll indicator', status: 'ready' },
93
-
94
- // Decorative
95
- 'rune-symbols': { category: 'decorative', description: 'Animated runic symbols', status: 'ready' },
96
- 'ornaments': { category: 'decorative', description: 'Medieval ornaments', status: 'ready' },
97
- 'coffee-stain': { category: 'decorative', description: 'Coffee stain/aged paper effect', status: 'ready' },
98
- 'sheet-music': { category: 'decorative', description: 'Floating music notes', status: 'ready' },
99
- 'inscription': { category: 'decorative', description: 'Stone carved inscription', status: 'ready' },
100
- };
101
-
102
- const program = new Command();
103
-
104
- program
105
- .name('chaos-ui')
106
- .description('Add glitch & noise components to your project')
107
- .version('0.1.0');
108
-
109
- // LIST command
110
- program
111
- .command('list')
112
- .description('List all available components')
113
- .action(() => {
114
- console.log(pc.bold('\n🗡️ Chaos UI Components\n'));
115
-
116
- const categories = {};
117
- for (const [name, info] of Object.entries(COMPONENTS)) {
118
- if (!categories[info.category]) categories[info.category] = [];
119
- categories[info.category].push({ name, ...info });
120
- }
121
-
122
- for (const [category, components] of Object.entries(categories)) {
123
- console.log(pc.cyan(` ${category}/`));
124
- for (const comp of components) {
125
- console.log(` ${pc.white(comp.name.padEnd(20))} ${pc.dim(comp.description)}`);
126
- }
127
- console.log();
128
- }
129
- });
130
-
131
- // ADD command
132
- program
133
- .command('add [component]')
134
- .description('Add a component to your project')
135
- .option('-d, --dir <path>', 'Target directory', './components/chaos')
136
- .option('-v, --variant <type>', 'Styling variant: css or tailwind', 'css')
137
- .option('-y, --yes', 'Skip confirmation')
138
- .action(async (componentName, options) => {
139
- const variant = options.variant.toLowerCase();
140
- if (!['css', 'tailwind'].includes(variant)) {
141
- console.log(pc.red(`\n✗ Invalid variant "${variant}". Use 'css' or 'tailwind'.\n`));
142
- return;
143
- }
144
-
145
- // If no component specified, show interactive picker
146
- if (!componentName) {
147
- const choices = Object.entries(COMPONENTS).map(([name, info]) => ({
148
- title: name,
149
- description: info.description,
150
- value: name,
151
- }));
152
-
153
- const response = await prompts([
154
- {
155
- type: 'autocomplete',
156
- name: 'component',
157
- message: 'Which component?',
158
- choices,
159
- suggest: (input, choices) =>
160
- choices.filter(c => c.title.includes(input) || c.description.toLowerCase().includes(input.toLowerCase()))
161
- },
162
- {
163
- type: 'select',
164
- name: 'variant',
165
- message: 'Styling variant?',
166
- choices: [
167
- { title: 'CSS Modules', value: 'css' },
168
- { title: 'Tailwind', value: 'tailwind' },
169
- ],
170
- initial: variant === 'tailwind' ? 1 : 0,
171
- }
172
- ]);
173
-
174
- if (!response.component) {
175
- console.log(pc.dim('Cancelled.'));
176
- return;
177
- }
178
- componentName = response.component;
179
- options.variant = response.variant || variant;
180
- }
181
-
182
- // Validate component exists
183
- if (!COMPONENTS[componentName]) {
184
- console.log(pc.red(`\n✗ Component "${componentName}" not found.`));
185
- console.log(pc.dim(` Run ${pc.white('chaos-ui list')} to see available components.\n`));
186
- return;
187
- }
188
-
189
- const info = COMPONENTS[componentName];
190
- const baseDir = path.join(COMPONENTS_DIR, info.category, componentName);
191
-
192
- // Check if component has variant subdirs or is legacy (flat structure)
193
- const variantDir = path.join(baseDir, options.variant);
194
- const hasVariants = fs.existsSync(path.join(baseDir, 'css')) || fs.existsSync(path.join(baseDir, 'tailwind'));
195
- const sourceDir = hasVariants ? variantDir : baseDir;
196
- const targetDir = path.resolve(options.dir, info.category);
197
-
198
- // Check source exists
199
- if (!fs.existsSync(sourceDir)) {
200
- if (hasVariants) {
201
- console.log(pc.yellow(`\n⚠ Variant "${options.variant}" not available for "${componentName}".`));
202
- const available = [];
203
- if (fs.existsSync(path.join(baseDir, 'css'))) available.push('css');
204
- if (fs.existsSync(path.join(baseDir, 'tailwind'))) available.push('tailwind');
205
- console.log(pc.dim(` Available variants: ${available.join(', ')}\n`));
206
- } else {
207
- console.log(pc.yellow(`\n⚠ Component "${componentName}" is not yet implemented.`));
208
- console.log(pc.dim(' Coming soon!\n'));
209
- }
210
- return;
211
- }
212
-
213
- // Confirm
214
- if (!options.yes) {
215
- const variantLabel = hasVariants ? ` (${pc.magenta(options.variant)})` : '';
216
- const confirm = await prompts({
217
- type: 'confirm',
218
- name: 'value',
219
- message: `Add ${pc.cyan(componentName)}${variantLabel} to ${pc.dim(targetDir)}?`,
220
- initial: true,
221
- });
222
-
223
- if (!confirm.value) {
224
- console.log(pc.dim('Cancelled.'));
225
- return;
226
- }
227
- }
228
-
229
- // Copy files
230
- try {
231
- await fs.ensureDir(targetDir);
232
- await fs.copy(sourceDir, path.join(targetDir, componentName));
233
-
234
- console.log(pc.green(`\n✓ Added ${componentName}`) + (hasVariants ? pc.magenta(` (${options.variant})`) : ''));
235
- console.log(pc.dim(` → ${path.join(targetDir, componentName)}\n`));
236
-
237
- // Show usage hint
238
- const pascalName = componentName
239
- .split('-')
240
- .map(s => s.charAt(0).toUpperCase() + s.slice(1))
241
- .join('');
242
-
243
- console.log(pc.dim(' Import:'));
244
- console.log(pc.white(` import { ${pascalName} } from './components/chaos/${info.category}/${componentName}';\n`));
245
-
246
- } catch (err) {
247
- console.log(pc.red(`\n✗ Failed to add component: ${err.message}\n`));
248
- }
249
- });
250
-
251
- // INIT command
252
- program
253
- .command('init')
254
- .description('Initialize chaos-ui in your project')
255
- .action(async () => {
256
- console.log(pc.bold('\n🗡️ Initializing Chaos UI...\n'));
257
-
258
- const response = await prompts([
259
- {
260
- type: 'select',
261
- name: 'framework',
262
- message: 'Framework?',
263
- choices: [
264
- { title: 'React', value: 'react' },
265
- { title: 'Vue', value: 'vue' },
266
- { title: 'Vanilla (HTML/CSS/JS)', value: 'vanilla' },
267
- ],
268
- },
269
- {
270
- type: 'select',
271
- name: 'styling',
272
- message: 'Styling?',
273
- choices: [
274
- { title: 'CSS Modules', value: 'css-modules' },
275
- { title: 'Plain CSS', value: 'css' },
276
- { title: 'Tailwind (with CSS vars)', value: 'tailwind' },
277
- ],
278
- },
279
- {
280
- type: 'text',
281
- name: 'dir',
282
- message: 'Components directory?',
283
- initial: './components/chaos',
284
- },
285
- ]);
286
-
287
- if (!response.framework) {
288
- console.log(pc.dim('Cancelled.'));
289
- return;
290
- }
291
-
292
- // Create config file
293
- const config = {
294
- framework: response.framework,
295
- styling: response.styling,
296
- componentsDir: response.dir,
297
- };
298
-
299
- await fs.writeJson('./chaos-ui.json', config, { spaces: 2 });
300
- await fs.ensureDir(response.dir);
301
-
302
- console.log(pc.green('\n✓ Initialized!'));
303
- console.log(pc.dim(` Config: ${pc.white('./chaos-ui.json')}`));
304
- console.log(pc.dim(` Components: ${pc.white(response.dir)}\n`));
305
- console.log(pc.dim(` Run ${pc.white('chaos-ui add <component>')} to add components.\n`));
306
- });
307
-
308
- program.parse();
@@ -1,80 +0,0 @@
1
- 'use client';
2
-
3
- import { forwardRef, HTMLAttributes } from 'react';
4
- import styles from './light-beams.module.css';
5
-
6
- export interface LightBeamsProps extends HTMLAttributes<HTMLDivElement> {
7
- /** Array of beam colors */
8
- colors?: string[];
9
- /** Number of beams */
10
- count?: number;
11
- /** Beam width in pixels */
12
- beamWidth?: number;
13
- /** Beam opacity (0-1) */
14
- opacity?: number;
15
- /** Animation duration range [min, max] in seconds */
16
- durationRange?: [number, number];
17
- /** Fixed or absolute positioning */
18
- position?: 'fixed' | 'absolute';
19
- }
20
-
21
- export const LightBeams = forwardRef<HTMLDivElement, LightBeamsProps>(
22
- (
23
- {
24
- colors = ['#7c3aed', '#06b6d4', '#ec4899', '#10b981', '#f59e0b'],
25
- count = 5,
26
- beamWidth = 2,
27
- opacity = 0.15,
28
- durationRange = [15, 25],
29
- position = 'fixed',
30
- className,
31
- style,
32
- ...props
33
- },
34
- ref
35
- ) => {
36
- const beams = Array.from({ length: count }, (_, i) => {
37
- const duration = durationRange[0] + Math.random() * (durationRange[1] - durationRange[0]);
38
- const delay = Math.random() * -duration;
39
- const color = colors[i % colors.length];
40
- const positionX = ((i + 1) / (count + 1)) * 100;
41
-
42
- return {
43
- id: i,
44
- duration,
45
- delay,
46
- color,
47
- positionX,
48
- };
49
- });
50
-
51
- return (
52
- <div
53
- ref={ref}
54
- className={`${styles.container} ${className || ''}`}
55
- style={{ position, ...style }}
56
- aria-hidden="true"
57
- {...props}
58
- >
59
- {beams.map((beam) => (
60
- <div
61
- key={beam.id}
62
- className={styles.beam}
63
- style={{
64
- left: `${beam.positionX}%`,
65
- width: beamWidth,
66
- background: `linear-gradient(180deg, transparent, ${beam.color}, transparent)`,
67
- opacity,
68
- animationDuration: `${beam.duration}s`,
69
- animationDelay: `${beam.delay}s`,
70
- }}
71
- />
72
- ))}
73
- </div>
74
- );
75
- }
76
- );
77
-
78
- LightBeams.displayName = 'LightBeams';
79
-
80
- export default LightBeams;
@@ -1,27 +0,0 @@
1
- .container {
2
- inset: 0;
3
- width: 100%;
4
- height: 100%;
5
- overflow: hidden;
6
- pointer-events: none;
7
- z-index: 1;
8
- }
9
-
10
- .beam {
11
- position: absolute;
12
- top: 0;
13
- height: 100%;
14
- filter: blur(1px);
15
- animation: beam-move 20s ease-in-out infinite;
16
- }
17
-
18
- @keyframes beam-move {
19
- 0%, 100% {
20
- transform: translateX(-50px) skewX(-5deg);
21
- opacity: 0.1;
22
- }
23
- 50% {
24
- transform: translateX(50px) skewX(5deg);
25
- opacity: 0.2;
26
- }
27
- }
@@ -1,81 +0,0 @@
1
- /* cta-brutal - CTA style brutaliste */
2
- .button {
3
- display: inline-flex;
4
- align-items: center;
5
- justify-content: center;
6
- gap: 1rem;
7
- padding: 1.5rem 3rem;
8
- background: var(--chaos-blood, #ff0040);
9
- color: var(--chaos-void, #0a0a0a);
10
- font-family: var(--chaos-font-display, 'Bebas Neue', sans-serif);
11
- font-size: 1.5rem;
12
- letter-spacing: 0.1em;
13
- text-transform: uppercase;
14
- text-decoration: none;
15
- border: none;
16
- cursor: pointer;
17
- position: relative;
18
- transition: all 0.15s;
19
- clip-path: polygon(0 0, 100% 0, 95% 100%, 0 100%);
20
- }
21
-
22
- .button:hover {
23
- transform: translate(-2px, -2px);
24
- box-shadow: 4px 4px 0 var(--chaos-bone, #e8e8e8);
25
- }
26
-
27
- .button:active {
28
- transform: translate(0, 0);
29
- box-shadow: none;
30
- }
31
-
32
- .icon { font-size: 1.2em; transition: transform 0.3s; }
33
- .button:hover .icon { transform: translateX(5px); }
34
-
35
- .variantOutline {
36
- background: transparent;
37
- border: 3px solid var(--chaos-blood, #ff0040);
38
- color: var(--chaos-blood, #ff0040);
39
- clip-path: none;
40
- }
41
-
42
- .variantOutline:hover {
43
- background: var(--chaos-blood, #ff0040);
44
- color: var(--chaos-void, #0a0a0a);
45
- }
46
-
47
- .variantGold { background: var(--chaos-gold, #c9a227); }
48
- .variantGold:hover { box-shadow: 4px 4px 0 var(--chaos-gold-dark, #8b7017); }
49
-
50
- .variantInverse { background: var(--chaos-bone, #e8e8e8); color: var(--chaos-void, #0a0a0a); }
51
- .variantInverse:hover { box-shadow: 4px 4px 0 var(--chaos-blood, #ff0040); }
52
-
53
- .sizeSm { padding: 0.8rem 1.5rem; font-size: 1rem; }
54
- .sizeLg { padding: 2rem 4rem; font-size: 2rem; }
55
- .sizeXl { padding: 2.5rem 5rem; font-size: 2.5rem; }
56
-
57
- .fullWidth { width: 100%; clip-path: none; }
58
- .disabled { opacity: 0.5; cursor: not-allowed; pointer-events: none; }
59
-
60
- .loading { position: relative; color: transparent; }
61
- .loading::after {
62
- content: '';
63
- position: absolute;
64
- width: 1.5em;
65
- height: 1.5em;
66
- border: 2px solid currentColor;
67
- border-top-color: transparent;
68
- border-radius: 50%;
69
- animation: spin 0.8s linear infinite;
70
- }
71
-
72
- @keyframes spin { to { transform: rotate(360deg); } }
73
-
74
- .shake:hover { animation: shake 0.1s infinite; }
75
-
76
- @keyframes shake {
77
- 0%, 100% { transform: translate(-2px, -2px); }
78
- 25% { transform: translate(-1px, -3px); }
79
- 50% { transform: translate(-3px, -1px); }
80
- 75% { transform: translate(-2px, -2px); }
81
- }
@@ -1,111 +0,0 @@
1
- /* dead-button - Bouton détruit/glitché avec layers */
2
- .container {
3
- position: relative;
4
- width: 280px;
5
- height: 60px;
6
- animation: btnShake 0.1s infinite;
7
- cursor: not-allowed;
8
- }
9
-
10
- .container:hover { animation: btnShakeHard 0.05s infinite; }
11
-
12
- @keyframes btnShake {
13
- 0%, 100% { transform: translate(0); }
14
- 25% { transform: translate(0.5px, 0.5px); }
15
- 50% { transform: translate(-0.5px, -0.5px); }
16
- 75% { transform: translate(0.5px, -0.5px); }
17
- }
18
-
19
- @keyframes btnShakeHard {
20
- 0%, 100% { transform: translate(0) rotate(0); }
21
- 25% { transform: translate(2px, 1px) rotate(0.5deg); }
22
- 50% { transform: translate(-1px, -2px) rotate(-0.5deg); }
23
- 75% { transform: translate(1px, -1px) rotate(0.3deg); }
24
- }
25
-
26
- .clean {
27
- position: absolute;
28
- inset: 0;
29
- background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
30
- border-radius: 16px;
31
- display: flex;
32
- align-items: center;
33
- justify-content: center;
34
- gap: 0.8rem;
35
- font-weight: 600;
36
- font-size: 1rem;
37
- color: white;
38
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
39
- box-shadow: 0 4px 15px rgba(102, 126, 234, 0.4);
40
- letter-spacing: 0.02em;
41
- }
42
-
43
- .gradient2 { background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%); box-shadow: 0 4px 15px rgba(245, 87, 108, 0.4); }
44
- .gradient3 { background: linear-gradient(135deg, #4facfe 0%, #00f2fe 100%); box-shadow: 0 4px 15px rgba(79, 172, 254, 0.4); }
45
- .gradient4 { background: linear-gradient(135deg, #fa709a 0%, #fee140 100%); box-shadow: 0 4px 15px rgba(250, 112, 154, 0.4); }
46
-
47
- .icon { font-size: 1.1rem; }
48
-
49
- .destroy {
50
- position: absolute;
51
- inset: 0;
52
- background: repeating-linear-gradient(90deg, transparent, transparent 2px, rgba(255, 0, 64, 0.1) 2px, rgba(255, 0, 64, 0.1) 4px),
53
- repeating-linear-gradient(0deg, transparent, transparent 3px, rgba(0, 0, 0, 0.3) 3px, rgba(0, 0, 0, 0.3) 4px);
54
- border-radius: 16px;
55
- mix-blend-mode: multiply;
56
- }
57
-
58
- .noise {
59
- position: absolute;
60
- inset: 0;
61
- border-radius: 16px;
62
- background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)'/%3E%3C/svg%3E");
63
- opacity: 0.15;
64
- mix-blend-mode: overlay;
65
- animation: noiseMove 0.2s steps(5) infinite;
66
- }
67
-
68
- @keyframes noiseMove {
69
- 0% { transform: translate(0, 0); }
70
- 20% { transform: translate(-2px, 1px); }
71
- 40% { transform: translate(1px, -1px); }
72
- 60% { transform: translate(2px, 2px); }
73
- 80% { transform: translate(-1px, -2px); }
74
- 100% { transform: translate(0, 0); }
75
- }
76
-
77
- .glitch1, .glitch2 { position: absolute; inset: 0; border-radius: 16px; pointer-events: none; }
78
- .glitch1 { background: var(--chaos-blood, #ff0040); mix-blend-mode: color-dodge; opacity: 0; animation: glitchSlice1 3s infinite; }
79
- .glitch2 { background: cyan; mix-blend-mode: color-dodge; opacity: 0; animation: glitchSlice2 3s infinite; }
80
-
81
- @keyframes glitchSlice1 {
82
- 0%, 89%, 91%, 93%, 95%, 100% { opacity: 0; clip-path: inset(0 0 100% 0); }
83
- 90% { opacity: 0.8; clip-path: inset(20% 0 60% 0); transform: translateX(-5px); }
84
- 92% { opacity: 0.6; clip-path: inset(50% 0 30% 0); transform: translateX(3px); }
85
- 94% { opacity: 0.7; clip-path: inset(70% 0 10% 0); transform: translateX(-2px); }
86
- }
87
-
88
- @keyframes glitchSlice2 {
89
- 0%, 89%, 91%, 93%, 95%, 100% { opacity: 0; clip-path: inset(0 0 100% 0); }
90
- 90% { opacity: 0.5; clip-path: inset(30% 0 50% 0); transform: translateX(4px); }
91
- 92% { opacity: 0.4; clip-path: inset(10% 0 70% 0); transform: translateX(-3px); }
92
- 94% { opacity: 0.6; clip-path: inset(60% 0 20% 0); transform: translateX(5px); }
93
- }
94
-
95
- .container::after {
96
- content: '';
97
- position: absolute;
98
- top: 50%;
99
- left: -10px;
100
- right: -10px;
101
- height: 3px;
102
- background: var(--chaos-blood, #ff0040);
103
- transform: rotate(-3deg);
104
- box-shadow: 0 0 10px var(--chaos-blood, #ff0040);
105
- }
106
-
107
- .noStrike::after { display: none; }
108
- .sizeSm { width: 200px; height: 45px; }
109
- .sizeSm .clean { font-size: 0.85rem; border-radius: 12px; }
110
- .sizeLg { width: 340px; height: 70px; }
111
- .sizeLg .clean { font-size: 1.2rem; border-radius: 20px; }
@@ -1,76 +0,0 @@
1
- /* deeper-button - Bouton "aller plus loin" style descent */
2
- .button {
3
- padding: 2rem 4rem;
4
- background: transparent;
5
- border: 2px solid var(--chaos-blood, #ff0040);
6
- color: var(--chaos-blood, #ff0040);
7
- font-family: var(--chaos-font-display, 'Bebas Neue', sans-serif);
8
- font-size: 1.5rem;
9
- text-decoration: none;
10
- position: relative;
11
- overflow: hidden;
12
- transition: all 0.3s;
13
- letter-spacing: 0.1em;
14
- cursor: pointer;
15
- display: inline-block;
16
- text-transform: uppercase;
17
- }
18
-
19
- .button::before {
20
- content: '';
21
- position: absolute;
22
- top: 0;
23
- left: -100%;
24
- width: 100%;
25
- height: 100%;
26
- background: var(--chaos-blood, #ff0040);
27
- transition: left 0.3s;
28
- z-index: -1;
29
- }
30
-
31
- .button:hover { color: var(--chaos-void, #0a0a0a); }
32
- .button:hover::before { left: 0; }
33
-
34
- .arrow {
35
- display: inline-block;
36
- margin-left: 1rem;
37
- transition: transform 0.3s;
38
- }
39
-
40
- .button:hover .arrow { animation: arrowBounce 0.5s ease-in-out infinite; }
41
-
42
- @keyframes arrowBounce {
43
- 0%, 100% { transform: translateY(0); }
44
- 50% { transform: translateY(5px); }
45
- }
46
-
47
- .variantGold { border-color: var(--chaos-gold, #c9a227); color: var(--chaos-gold, #c9a227); }
48
- .variantGold::before { background: var(--chaos-gold, #c9a227); }
49
- .variantGold:hover { color: var(--chaos-void, #0a0a0a); }
50
-
51
- .variantOutline { border-width: 1px; }
52
- .variantOutline:hover { border-width: 2px; }
53
-
54
- .variantGhost { border-color: transparent; border-bottom-color: var(--chaos-blood, #ff0040); }
55
- .variantGhost::before { display: none; }
56
- .variantGhost:hover { color: var(--chaos-blood, #ff0040); border-color: var(--chaos-blood, #ff0040); }
57
-
58
- .sizeSm { padding: 1rem 2rem; font-size: 1rem; }
59
- .sizeLg { padding: 2.5rem 5rem; font-size: 2rem; }
60
-
61
- .pulsing { animation: pulse 2s ease-in-out infinite; }
62
-
63
- @keyframes pulse {
64
- 0%, 100% { box-shadow: 0 0 0 0 rgba(255, 0, 64, 0.4); }
65
- 50% { box-shadow: 0 0 0 15px rgba(255, 0, 64, 0); }
66
- }
67
-
68
- .variantGold.pulsing { animation: pulseGold 2s ease-in-out infinite; }
69
-
70
- @keyframes pulseGold {
71
- 0%, 100% { box-shadow: 0 0 0 0 rgba(201, 162, 39, 0.4); }
72
- 50% { box-shadow: 0 0 0 15px rgba(201, 162, 39, 0); }
73
- }
74
-
75
- .iconLeft { margin-right: 1rem; }
76
- .iconRight { margin-left: 1rem; }