@hellboy/ds 0.1.2 → 0.2.7

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 (298) hide show
  1. package/README.md +568 -71
  2. package/{src/style/components/badge → dist/components}/badge.css +9 -25
  3. package/dist/components/badge.d.mts +12 -0
  4. package/dist/components/badge.d.ts +12 -0
  5. package/dist/components/badge.js +42 -0
  6. package/dist/components/badge.mjs +15 -0
  7. package/dist/components/banner.css +280 -0
  8. package/dist/components/banner.d.mts +12 -0
  9. package/dist/components/banner.d.ts +12 -0
  10. package/dist/components/banner.js +184 -0
  11. package/dist/components/banner.mjs +147 -0
  12. package/dist/components/button-group.css +289 -0
  13. package/dist/components/button-group.d.mts +81 -0
  14. package/dist/components/button-group.d.ts +81 -0
  15. package/dist/components/button-group.js +180 -0
  16. package/dist/components/button-group.mjs +143 -0
  17. package/{src/style/components/button → dist/components}/button.css +59 -62
  18. package/dist/components/button.d.mts +57 -0
  19. package/dist/components/button.d.ts +57 -0
  20. package/dist/components/button.js +129 -0
  21. package/dist/components/button.mjs +92 -0
  22. package/{src/style/components/card → dist/components}/card.css +9 -30
  23. package/dist/components/card.d.mts +31 -0
  24. package/dist/components/card.d.ts +31 -0
  25. package/dist/components/card.js +59 -0
  26. package/dist/components/card.mjs +32 -0
  27. package/{src/style → dist}/components/checkbox.css +51 -43
  28. package/dist/components/checkbox.d.mts +31 -0
  29. package/dist/components/checkbox.d.ts +31 -0
  30. package/dist/components/checkbox.js +130 -0
  31. package/dist/components/checkbox.mjs +93 -0
  32. package/{src/style/components/code-block → dist/components}/code-block.css +3 -7
  33. package/dist/components/code-block.d.mts +24 -0
  34. package/dist/components/code-block.d.ts +24 -0
  35. package/dist/components/code-block.js +43 -0
  36. package/dist/components/code-block.mjs +16 -0
  37. package/dist/components/color-control.css +285 -0
  38. package/dist/components/color-control.d.mts +5 -0
  39. package/dist/components/color-control.d.ts +5 -0
  40. package/dist/components/color-control.js +534 -0
  41. package/dist/components/color-control.mjs +497 -0
  42. package/dist/components/dialog.css +930 -0
  43. package/dist/components/dialog.d.mts +32 -0
  44. package/dist/components/dialog.d.ts +32 -0
  45. package/dist/components/dialog.js +1111 -0
  46. package/dist/components/dialog.mjs +1074 -0
  47. package/dist/components/divider.css +356 -0
  48. package/dist/components/divider.d.mts +32 -0
  49. package/dist/components/divider.d.ts +32 -0
  50. package/dist/components/divider.js +344 -0
  51. package/dist/components/divider.mjs +307 -0
  52. package/{src/style/components/drag-handle → dist/components}/drag-handle.css +3 -18
  53. package/dist/components/drag-handle.d.mts +11 -0
  54. package/dist/components/drag-handle.d.ts +11 -0
  55. package/dist/components/drag-handle.js +103 -0
  56. package/dist/components/drag-handle.mjs +66 -0
  57. package/dist/components/drawer.css +1027 -0
  58. package/dist/components/drawer.d.mts +14 -0
  59. package/dist/components/drawer.d.ts +14 -0
  60. package/dist/components/drawer.js +1072 -0
  61. package/dist/components/drawer.mjs +1035 -0
  62. package/dist/components/floating-bar.css +17 -0
  63. package/dist/components/floating-bar.d.mts +25 -0
  64. package/dist/components/floating-bar.d.ts +25 -0
  65. package/dist/components/floating-bar.js +52 -0
  66. package/dist/components/floating-bar.mjs +25 -0
  67. package/dist/components/footer.css +40 -0
  68. package/dist/components/footer.d.mts +8 -0
  69. package/dist/components/footer.d.ts +8 -0
  70. package/dist/components/footer.js +44 -0
  71. package/dist/components/footer.mjs +17 -0
  72. package/dist/components/grid.css +47 -0
  73. package/dist/components/grid.d.mts +27 -0
  74. package/dist/components/grid.d.ts +27 -0
  75. package/dist/components/grid.js +52 -0
  76. package/dist/components/grid.mjs +25 -0
  77. package/dist/components/header.css +1075 -0
  78. package/dist/components/header.d.mts +35 -0
  79. package/dist/components/header.d.ts +35 -0
  80. package/dist/components/header.js +1402 -0
  81. package/dist/components/header.mjs +1365 -0
  82. package/dist/components/hero.css +121 -0
  83. package/dist/components/hero.d.mts +111 -0
  84. package/dist/components/hero.d.ts +111 -0
  85. package/dist/components/hero.js +285 -0
  86. package/dist/components/hero.mjs +248 -0
  87. package/{src/style/components/icons → dist/components}/icons.css +14 -15
  88. package/dist/components/icons.d.mts +104 -0
  89. package/dist/components/icons.d.ts +104 -0
  90. package/dist/components/icons.js +239 -0
  91. package/dist/components/icons.mjs +203 -0
  92. package/{src/style/components/input → dist/components}/input.css +189 -102
  93. package/dist/components/input.d.mts +114 -0
  94. package/dist/components/input.d.ts +114 -0
  95. package/dist/components/input.js +926 -0
  96. package/dist/components/input.mjs +879 -0
  97. package/dist/components/layout.css +551 -0
  98. package/dist/components/layout.d.mts +16 -0
  99. package/dist/components/layout.d.ts +16 -0
  100. package/dist/components/layout.js +387 -0
  101. package/dist/components/layout.mjs +352 -0
  102. package/{src/style/components/list → dist/components}/list.css +47 -41
  103. package/dist/components/list.d.mts +46 -0
  104. package/dist/components/list.d.ts +46 -0
  105. package/dist/components/list.js +124 -0
  106. package/dist/components/list.mjs +96 -0
  107. package/dist/components/navbar.css +706 -0
  108. package/dist/components/navbar.d.mts +56 -0
  109. package/dist/components/navbar.d.ts +56 -0
  110. package/dist/components/navbar.js +994 -0
  111. package/dist/components/navbar.mjs +952 -0
  112. package/{src/style/components/page-index → dist/components}/page-index.css +2 -47
  113. package/dist/components/page-index.d.mts +25 -0
  114. package/dist/components/page-index.d.ts +25 -0
  115. package/dist/components/page-index.js +239 -0
  116. package/dist/components/page-index.mjs +202 -0
  117. package/{src/style/components/page → dist/components}/page.css +4 -15
  118. package/dist/components/page.d.mts +30 -0
  119. package/dist/components/page.d.ts +30 -0
  120. package/dist/components/page.js +40 -0
  121. package/dist/components/page.mjs +13 -0
  122. package/dist/components/popover.css +87 -0
  123. package/dist/components/popover.d.mts +22 -0
  124. package/dist/components/popover.d.ts +22 -0
  125. package/dist/components/popover.js +243 -0
  126. package/dist/components/popover.mjs +206 -0
  127. package/{src/style → dist}/components/radio.css +8 -51
  128. package/dist/components/radio.d.mts +59 -0
  129. package/dist/components/radio.d.ts +59 -0
  130. package/dist/components/radio.js +133 -0
  131. package/dist/components/radio.mjs +95 -0
  132. package/dist/components/section.css +993 -0
  133. package/dist/components/section.d.mts +33 -0
  134. package/dist/components/section.d.ts +33 -0
  135. package/dist/components/section.js +1401 -0
  136. package/dist/components/section.mjs +1364 -0
  137. package/dist/components/select.css +391 -0
  138. package/dist/components/select.d.mts +63 -0
  139. package/dist/components/select.d.ts +63 -0
  140. package/dist/components/select.js +452 -0
  141. package/dist/components/select.mjs +415 -0
  142. package/{src/style/components/slider → dist/components}/slider.css +55 -33
  143. package/dist/components/slider.d.mts +69 -0
  144. package/dist/components/slider.d.ts +69 -0
  145. package/dist/components/slider.js +254 -0
  146. package/dist/components/slider.mjs +217 -0
  147. package/dist/components/switch.css +1081 -0
  148. package/dist/components/switch.d.mts +33 -0
  149. package/dist/components/switch.d.ts +33 -0
  150. package/dist/components/switch.js +1092 -0
  151. package/dist/components/switch.mjs +1055 -0
  152. package/{src/style/components/table → dist/components}/table.css +3 -28
  153. package/dist/components/table.d.mts +42 -0
  154. package/dist/components/table.d.ts +42 -0
  155. package/dist/components/table.js +108 -0
  156. package/dist/components/table.mjs +76 -0
  157. package/dist/components/tag.css +97 -0
  158. package/dist/components/tag.d.mts +12 -0
  159. package/dist/components/tag.d.ts +12 -0
  160. package/dist/components/tag.js +42 -0
  161. package/dist/components/tag.mjs +15 -0
  162. package/dist/components/textarea.css +1359 -0
  163. package/dist/components/textarea.d.mts +84 -0
  164. package/dist/components/textarea.d.ts +84 -0
  165. package/dist/components/textarea.js +1962 -0
  166. package/dist/components/textarea.mjs +1924 -0
  167. package/{src/style/components/theme-control → dist/components}/theme-control.css +3 -7
  168. package/dist/components/theme-control.d.mts +9 -0
  169. package/dist/components/theme-control.d.ts +9 -0
  170. package/dist/components/theme-control.js +235 -0
  171. package/dist/components/theme-control.mjs +200 -0
  172. package/{src/style/components/tooltip → dist/components}/tooltip.css +5 -13
  173. package/dist/components/tooltip.d.mts +12 -0
  174. package/dist/components/tooltip.d.ts +12 -0
  175. package/dist/components/tooltip.js +200 -0
  176. package/dist/components/tooltip.mjs +163 -0
  177. package/dist/icons-Czahnf-r.d.mts +15 -0
  178. package/dist/icons-Czahnf-r.d.ts +15 -0
  179. package/dist/index.css +2915 -2068
  180. package/dist/index.d.mts +144 -721
  181. package/dist/index.d.ts +144 -721
  182. package/dist/index.js +4076 -2282
  183. package/dist/index.mjs +4132 -2366
  184. package/dist/theme.css +34 -34
  185. package/package.json +27 -8
  186. package/dist/index.css.map +0 -1
  187. package/dist/index.js.map +0 -1
  188. package/dist/index.mjs.map +0 -1
  189. package/hellboy-ds-0.1.2.tgz +0 -0
  190. package/src/components/badge/Badge.tsx +0 -29
  191. package/src/components/badge/index.ts +0 -1
  192. package/src/components/banner/Banner.tsx +0 -48
  193. package/src/components/banner/banner.css +0 -44
  194. package/src/components/banner/index.ts +0 -1
  195. package/src/components/button/button.tsx +0 -127
  196. package/src/components/button/index.ts +0 -1
  197. package/src/components/card/card.tsx +0 -57
  198. package/src/components/card/index.ts +0 -1
  199. package/src/components/checkbox/Checkbox.tsx +0 -98
  200. package/src/components/checkbox/index.ts +0 -1
  201. package/src/components/code-block/code-block.tsx +0 -44
  202. package/src/components/code-block/index.ts +0 -1
  203. package/src/components/color-control/color-control.tsx +0 -322
  204. package/src/components/color-control/index.ts +0 -1
  205. package/src/components/drag-handle/DragHandle.tsx +0 -78
  206. package/src/components/drag-handle/index.ts +0 -1
  207. package/src/components/drawer/drawer.tsx +0 -82
  208. package/src/components/drawer/index.ts +0 -1
  209. package/src/components/floating-bar/floating-bar.tsx +0 -52
  210. package/src/components/floating-bar/index.ts +0 -2
  211. package/src/components/footer/footer.tsx +0 -28
  212. package/src/components/footer/index.ts +0 -1
  213. package/src/components/grid/Grid.tsx +0 -53
  214. package/src/components/grid/index.ts +0 -1
  215. package/src/components/header/header.tsx +0 -57
  216. package/src/components/header/index.ts +0 -1
  217. package/src/components/icons/icons.tsx +0 -44
  218. package/src/components/icons/index.ts +0 -1
  219. package/src/components/index.ts +0 -29
  220. package/src/components/input/DatePicker.tsx +0 -133
  221. package/src/components/input/Input.tsx +0 -220
  222. package/src/components/input/InputDate.tsx +0 -10
  223. package/src/components/input/InputDateTime.tsx +0 -10
  224. package/src/components/input/InputEmail.tsx +0 -10
  225. package/src/components/input/InputField.tsx +0 -137
  226. package/src/components/input/InputNumber.tsx +0 -10
  227. package/src/components/input/InputPassword.tsx +0 -10
  228. package/src/components/input/InputSearch.tsx +0 -10
  229. package/src/components/input/InputTel.tsx +0 -10
  230. package/src/components/input/InputText.tsx +0 -10
  231. package/src/components/input/InputTime.tsx +0 -10
  232. package/src/components/input/InputUrl.tsx +0 -10
  233. package/src/components/input/TimePicker.tsx +0 -151
  234. package/src/components/input/index.ts +0 -11
  235. package/src/components/layout/Layout.tsx +0 -244
  236. package/src/components/layout/index.ts +0 -1
  237. package/src/components/list/List.tsx +0 -159
  238. package/src/components/list/index.ts +0 -1
  239. package/src/components/navbar/MenuCategory.tsx +0 -20
  240. package/src/components/navbar/MenuGroup.tsx +0 -288
  241. package/src/components/navbar/MenuItem.tsx +0 -65
  242. package/src/components/navbar/Navbar.tsx +0 -23
  243. package/src/components/navbar/index.ts +0 -4
  244. package/src/components/page/index.ts +0 -1
  245. package/src/components/page/page.tsx +0 -46
  246. package/src/components/page-index/PageIndex.tsx +0 -275
  247. package/src/components/page-index/index.ts +0 -1
  248. package/src/components/popover/index.ts +0 -1
  249. package/src/components/popover/popover.tsx +0 -199
  250. package/src/components/radio/Radio.tsx +0 -176
  251. package/src/components/radio/index.ts +0 -1
  252. package/src/components/section/index.ts +0 -1
  253. package/src/components/section/section.tsx +0 -66
  254. package/src/components/select/Select.tsx +0 -212
  255. package/src/components/select/index.ts +0 -1
  256. package/src/components/slider/Slider.tsx +0 -267
  257. package/src/components/slider/index.ts +0 -1
  258. package/src/components/switch/index.ts +0 -1
  259. package/src/components/switch/switch.tsx +0 -99
  260. package/src/components/table/Table.tsx +0 -147
  261. package/src/components/table/index.ts +0 -1
  262. package/src/components/theme-control/index.ts +0 -1
  263. package/src/components/theme-control/theme-control.tsx +0 -78
  264. package/src/components/tooltip/index.ts +0 -1
  265. package/src/components/tooltip/tooltip.tsx +0 -207
  266. package/src/contexts/NavbarTooltipContext.tsx +0 -48
  267. package/src/contexts/index.ts +0 -1
  268. package/src/foundations/motion.md +0 -136
  269. package/src/index.ts +0 -40
  270. package/src/style/_shared/field.css +0 -69
  271. package/src/style/components/color-control/color-control.css +0 -126
  272. package/src/style/components/drawer/drawer.css +0 -210
  273. package/src/style/components/floating-bar/floating-bar.css +0 -39
  274. package/src/style/components/footer/footer.css +0 -108
  275. package/src/style/components/grid/grid.css +0 -33
  276. package/src/style/components/header/header.css +0 -44
  277. package/src/style/components/layout/layout.css +0 -205
  278. package/src/style/components/navbar/navbar.css +0 -342
  279. package/src/style/components/popover/popover.css +0 -44
  280. package/src/style/components/section/section.css +0 -67
  281. package/src/style/components/select/select.css +0 -143
  282. package/src/style/components/switch/switch.css +0 -267
  283. package/src/style/foundations/global.css +0 -316
  284. package/src/style/foundations/motion.css +0 -164
  285. package/src/style/foundations/spacing.css +0 -51
  286. package/src/style/foundations/typography.css +0 -39
  287. package/src/style/foundations/z-index.css +0 -81
  288. package/src/style/modes/dark.css +0 -146
  289. package/src/style/modes/light.css +0 -147
  290. package/src/style/semantic.css +0 -52
  291. package/src/style/styles.css +0 -51
  292. package/src/style/themes/theme.json +0 -37
  293. package/src/utils/README.md +0 -305
  294. package/src/utils/USER_PREFERENCES.md +0 -558
  295. package/src/utils/theme.ts +0 -127
  296. package/src/utils/user-preferences.ts +0 -577
  297. package/tsconfig.json +0 -25
  298. package/tsup.config.ts +0 -52
package/README.md CHANGED
@@ -1,111 +1,608 @@
1
- # Hellboy Design System - Core
1
+ # 🔥 @hellboy/ds - Hellboy Design System
2
2
 
3
- Base package for the Hellboy Design System containing foundational components, tokens, and styling utilities.
3
+ > _Where chaos meets precision: A comprehensive, accessible-first design system for modern React applications_
4
4
 
5
- ## 📦 Package Contents
5
+ [![npm version](https://img.shields.io/npm/v/@hellboy/ds.svg)](https://www.npmjs.com/package/@hellboy/ds)
6
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
7
+ [![TypeScript](https://img.shields.io/badge/TypeScript-5.3-blue)](https://www.typescriptlang.org/)
8
+ [![React](https://img.shields.io/badge/React-18%20%7C%2019-blue)](https://reactjs.org/)
6
9
 
7
- ### Tokens
8
- - **Colors**: Primary, neutral, and semantic colors
9
- - **Typography**: Font families, sizes, weights, and line heights
10
- - **Spacing**: Consistent spacing scale
10
+ A complete design system with **42+ production-ready components**, dual theming (light/dark), and comprehensive accessibility features built with React, TypeScript, and modern web standards.
11
11
 
12
- ### Foundations
13
- - **Global Reset**: Base HTML and element resets
14
- - **Utilities**: Helper functions for style injection
12
+ ## ✨ Features
15
13
 
16
- ### Components
17
- - **Button**: Accessible interactive component with multiple variants and sizes (powered by AriaKit)
14
+ - 🎨 **42+ Components** - Buttons, inputs, dialogs, tables, and more
15
+ - 🌓 **Dual Theme System** - Light and dark modes with customizable colors (HSLA-based)
16
+ - ♿ **Accessibility First** - WCAG 2.1 AA compliant with AriaKit primitives
17
+ - 📱 **Desktop Priority** - Optimized for desktop (1024px+), tablet/mobile in roadmap
18
+ - 🎯 **TypeScript Native** - Full type safety and IntelliSense support
19
+ - 🔌 **Auto Dependencies** - Components automatically include all required dependencies
20
+ - 🎭 **150,000+ Icons** - Iconify integration for extensive icon library
21
+ - 📦 **Tree-shakeable** - Import only what you need
22
+ - 🚀 **CSS-First** - Minimal runtime overhead with CSS custom properties
23
+ - 💾 **Persistent Preferences** - User theme and color choices saved locally
18
24
 
19
- ## 🚀 Getting Started
20
-
21
- ### Installation
25
+ ## 🚀 Installation
22
26
 
23
27
  ```bash
24
- npm install @hellboy-ds/core @ariakit/react react react-dom
28
+ npm install @hellboy/ds
29
+
30
+ # Peer dependencies (if not already installed)
31
+ npm install react react-dom
25
32
  ```
26
33
 
27
- ### Usage
34
+ **That's it!** All component dependencies are automatically included in the CSS bundles.
28
35
 
29
- ```tsx
30
- import { Button, injectGlobalStyles } from '@hellboy-ds/core';
36
+ ## 📖 Quick Start
31
37
 
32
- // Inject global styles once at app initialization
33
- injectGlobalStyles();
38
+ ### Basic Usage
39
+
40
+ ```tsx
41
+ import '@hellboy/ds/dist/index.css';
42
+ import { Button, Input, Dialog, Banner, ThemeControl } from '@hellboy/ds';
34
43
 
35
- // Use the Button component
36
44
  export function App() {
37
45
  return (
38
46
  <div>
39
- <Button>Primary Button</Button>
40
- <Button variant="secondary">Secondary Button</Button>
41
- <Button variant="tertiary">Tertiary Button</Button>
42
- <Button size="lg">Large Button</Button>
43
- <Button isLoading>Loading...</Button>
44
- <Button disabled>Disabled Button</Button>
47
+ {/* Theme switcher in top-right corner */}
48
+ <ThemeControl />
49
+
50
+ {/* Components work out of the box */}
51
+ <Banner type="info">
52
+ Welcome to Hellboy Design System!
53
+ </Banner>
54
+
55
+ <Button variant="primary">Primary Action</Button>
56
+ <Input label="Email" type="email" placeholder="you@example.com" />
45
57
  </div>
46
58
  );
47
59
  }
48
60
  ```
49
61
 
50
- ## 🎨 Customization
62
+ ### Advanced: Tree-shaking (Individual Components)
51
63
 
52
- All tokens are exported and can be imported directly:
64
+ Import only specific components to reduce bundle size:
53
65
 
54
66
  ```tsx
55
- import { colors, typography, spacing } from '@hellboy-ds/core';
67
+ // Option 1: Single component import (recommended)
68
+ import '@hellboy/ds/dist/index.css';
69
+ import { Button } from '@hellboy/ds';
56
70
 
57
- // Use tokens in your components
58
- const customStyle = {
59
- color: colors.primary,
60
- fontSize: typography.fontSize.lg,
61
- padding: spacing[4],
62
- };
71
+ // Option 2: Subpath imports (maximum tree-shaking)
72
+ import '@hellboy/ds/components/button/css';
73
+ import { Button } from '@hellboy/ds/components/button';
63
74
  ```
64
75
 
65
- ## 📝 Building
76
+ **Note**: Each component's CSS already includes all its dependencies (foundations, themes, utilities), so you never need to import foundation files manually.
66
77
 
67
- ```bash
68
- npm run build # Build the package
69
- npm run dev # Watch mode
70
- npm run clean # Clean dist directory
78
+ ## 🔌 Auto-Dependency Injection
79
+
80
+ Every component automatically includes everything it needs:
81
+
82
+ ```tsx
83
+ // ✅ This works - button.css includes:
84
+ // - Component styles
85
+ // - Foundation CSS (typography, spacing, colors)
86
+ // - Theme variables (light/dark)
87
+ // - Shared utilities
88
+ import '@hellboy/ds/components/button/css';
89
+ import { Button } from '@hellboy/ds/components/button';
90
+ ```
91
+
92
+ **Zero configuration required!** Just import and use.
93
+
94
+ ## 🧱 Available Components (42+)
95
+
96
+ ### Layout & Structure
97
+ - **Layout** - Main application layout with navigation
98
+ - **Page** - Page wrapper with consistent spacing
99
+ - **Header** - Page headers with titles, subtitles, and tags
100
+ - **Hero** - Hero sections for landing pages
101
+ - **Section** - Content sections with automatic indexing
102
+ - **Grid** - Responsive grid system
103
+ - **Card** - Content cards with variants
104
+ - **Footer** - Page footer component
105
+ - **Divider** - Visual content separators
106
+
107
+ ### Forms & Inputs
108
+ - **Button** - Interactive buttons (4 variants, 4 sizes, icons, loading states)
109
+ - Dependencies: foundations, icons, theme
110
+ - **ButtonGroup** - Grouped button controls
111
+ - **Checkbox** - Accessible checkboxes with label support
112
+ - Dependencies: foundations, theme
113
+ - **Radio** - Radio button groups
114
+ - Dependencies: foundations, theme
115
+ - **Select** - Dropdown selection component
116
+ - Dependencies: foundations, popover, theme
117
+ - **Input** - Text inputs with multiple types
118
+ - `InputText`, `InputEmail`, `InputPassword`, `InputNumber`, `InputTel`, `InputUrl`, `InputSearch`, `InputDate`, `InputTime`, `InputDateTime`
119
+ - Dependencies: foundations, icons, theme, popover (for date/time)
120
+ - **Textarea** - Multi-line text input
121
+ - Dependencies: foundations, theme
122
+ - **RichTextarea** - Rich text editor with formatting toolbar
123
+ - Dependencies: foundations, icons, floatingbar, select, tooltip, theme
124
+ - External: DOMPurify for HTML sanitization
125
+ - **Slider** - Range slider control
126
+ - Dependencies: foundations, theme
127
+ - **Switch** - Toggle switch component
128
+ - Dependencies: foundations, theme
129
+
130
+ ### Navigation
131
+ - **Navbar** - Main navigation bar with routing and tooltips
132
+ - Dependencies: foundations, button, tooltip, backdrop, theme
133
+ - **Breadcrumbs** - Breadcrumb navigation
134
+ - Dependencies: foundations, theme
135
+ - **FloatingBar** - Floating action bar
136
+ - Dependencies: foundations, theme
137
+ - **PageIndex** - Auto-generated page navigation from sections
138
+ - Dependencies: foundations, theme
139
+
140
+ ### Feedback & Display
141
+ - **Badge** - Status and label badges (8 variants)
142
+ - Dependencies: foundations, theme
143
+ - **Tag** - Categorization tags (8 variants, 3 sizes)
144
+ - Dependencies: foundations, theme
145
+ - **Banner** - Alert and notification banners (4 types: info, success, warning, error)
146
+ - Dependencies: foundations, icons, button, theme
147
+ - **Dialog** - Modal dialogs with backdrop
148
+ - Dependencies: foundations, backdrop, theme
149
+ - External: React Portal
150
+ - **Drawer** - Slide-out panel component
151
+ - Dependencies: foundations, backdrop, theme
152
+ - **Tooltip** - Contextual tooltips with auto-positioning
153
+ - Dependencies: foundations, theme
154
+ - External: React Portal
155
+ - **CodeBlock** - Syntax-highlighted code display
156
+ - Dependencies: foundations, button, theme
157
+ - **List** - Structured list component
158
+ - Dependencies: foundations, theme
159
+ - **Table** - Data tables with headers, rows, cells
160
+ - Components: `Table`, `TableContainer`, `TableHead`, `TableBody`, `TableRow`, `TableCell`
161
+ - Dependencies: foundations, theme
162
+
163
+ ### Interactive
164
+ - **ThemeControl** - Theme switcher component (light/dark toggle)
165
+ - Dependencies: foundations, button, theme
166
+ - **ColorControl** - Color customization interface
167
+ - Dependencies: foundations, input, button, theme
168
+ - **DragHandle** - Drag and drop handles
169
+ - Dependencies: foundations, icons, theme
170
+ - **Popover** - Floating popover component with positioning
171
+ - Dependencies: foundations, theme
172
+ - External: React Portal
173
+ - **Icon** - Icon component with Iconify integration
174
+ - Dependencies: foundations
175
+ - External: @iconify/react (150,000+ icons)
176
+
177
+ ### Shared Components
178
+ - **Backdrop** - Modal/dialog backdrop overlay
179
+ - Dependencies: foundations, theme
180
+
181
+ ## 📦 Dependencies
182
+
183
+ ### Included Dependencies (Auto-installed with package)
184
+ ```json
185
+ {
186
+ "@ariakit/react": "^0.4.0", // Accessible component primitives
187
+ "@iconify/react": "^6.0.2", // Icon framework (150,000+ icons)
188
+ "dompurify": "^3.2.2" // HTML sanitization (RichTextarea)
189
+ }
190
+ ```
191
+
192
+ ### Peer Dependencies (Required by your app)
193
+ ```json
194
+ {
195
+ "react": "^18.0.0 || ^19.0.0",
196
+ "react-dom": "^18.0.0 || ^19.0.0"
197
+ }
198
+ ```
199
+
200
+ **Note**: Components automatically handle their CSS dependencies. When you import a component's CSS, it includes all required foundation styles, theme variables, and utilities.
201
+
202
+ ## 🎨 Theme System
203
+
204
+ ### Using Themes
205
+
206
+ ```tsx
207
+ import { setTheme, getTheme, getUserPreferences, setUserPreferences } from '@hellboy/ds';
208
+
209
+ // Get current theme
210
+ const currentTheme = getTheme(); // 'light' | 'dark'
211
+
212
+ // Set theme (persists to localStorage)
213
+ setTheme('dark');
214
+
215
+ // Get all user preferences
216
+ const prefs = getUserPreferences();
217
+ console.log(prefs.theme); // 'light' | 'dark' | 'auto'
218
+
219
+ // Update preferences
220
+ setUserPreferences({
221
+ theme: 'dark',
222
+ colors: {
223
+ primary: { hue: 220, saturation: 70, lightness: 50 }
224
+ }
225
+ });
226
+ ```
227
+
228
+ ### Theme Features
229
+ - 🌓 **Dual Modes**: Light and dark themes included
230
+ - 🎨 **Customizable**: 7 color hues (primary, secondary, accent, success, warning, error, info)
231
+ - 💾 **Persistent**: Preferences saved to localStorage
232
+ - 🔄 **Auto Detection**: Respects system preference (prefers-color-scheme)
233
+ - 📐 **HSLA-based**: Hue, Saturation, Lightness, Alpha for easy customization
234
+
235
+ ### CSS Custom Properties
236
+
237
+ Themes use CSS custom properties that you can override:
238
+
239
+ ```css
240
+ :root {
241
+ /* Color hues (0-360) */
242
+ --primary-hue: 330;
243
+ --secondary-hue: 240;
244
+ --accent-hue: 180;
245
+
246
+ /* Semantic colors */
247
+ --color-primary: hsl(var(--primary-hue), 70%, 50%);
248
+ --color-on-primary: hsl(var(--primary-hue), 70%, 10%);
249
+
250
+ /* Typography */
251
+ --font-family-heading: 'Signika', sans-serif;
252
+ --font-family-body: 'Rubik', sans-serif;
253
+
254
+ /* Spacing scale */
255
+ --spacing-1: 0.25rem; /* 4px */
256
+ --spacing-2: 0.5rem; /* 8px */
257
+ /* ... up to spacing-16 */
258
+ }
71
259
  ```
72
260
 
73
- ## 📋 Features
261
+ ## 🔄 Component API Examples
262
+
263
+ ### Button
264
+
265
+ **Variants:** `primary` | `secondary` | `tertiary` | `ghost`
266
+ **Sizes:** `xs` | `sm` | `md` (default) | `lg`
267
+
268
+ ```tsx
269
+ import { Button } from '@hellboy/ds';
74
270
 
75
- - ✅ Built with AriaKit for accessibility
76
- - ✅ Full ARIA support out of the box
77
- - ✅ CSS-in-JS styling with inline tokens
78
- - ✅ Strongly typed TypeScript components
79
- - ✅ Consistent design tokens system
80
- - ✅ Semantic color palette
81
- - ✅ Responsive and accessible components
82
- - ✅ Loading and disabled states
271
+ // Variants
272
+ <Button variant="primary">Primary</Button>
273
+ <Button variant="secondary">Secondary</Button>
274
+ <Button variant="tertiary">Tertiary</Button>
275
+ <Button variant="ghost">Ghost</Button>
83
276
 
84
- ## 🔄 Component Variants
277
+ // Sizes
278
+ <Button size="xs">Extra Small</Button>
279
+ <Button size="sm">Small</Button>
280
+ <Button size="md">Medium</Button>
281
+ <Button size="lg">Large</Button>
85
282
 
86
- ### Button Variants
87
- - `primary` - Main action button
88
- - `secondary` - Alternative action button
89
- - `tertiary` - Low emphasis action button
283
+ // With icons (150,000+ from Iconify)
284
+ <Button startIcon="mdi:check">Save</Button>
285
+ <Button endIcon="mdi:arrow-right">Next</Button>
286
+ <Button iconOnly aria-label="Settings" startIcon="mdi:cog" />
90
287
 
91
- ### Button Sizes
92
- - `sm` - Small (32px height)
93
- - `md` - Medium (40px height) - default
94
- - `lg` - Large (48px height)
288
+ // States
289
+ <Button isLoading>Saving...</Button>
290
+ <Button disabled>Disabled</Button>
291
+ <Button fullWidth>Full Width</Button>
292
+ ```
95
293
 
96
- ### Button Props
97
- - `variant` - Button style variant
294
+ **Props:**
295
+ - `variant` - Visual style
98
296
  - `size` - Button size
99
297
  - `isLoading` - Show loading spinner
100
- - `disabled` - Disable the button
101
- - `fullWidth` - Make button full width
102
- - All standard AriaKit button attributes are supported
298
+ - `disabled` - Disable interaction
299
+ - `fullWidth` - Expand to container width
300
+ - `startIcon` / `endIcon` - Icon names from Iconify
301
+ - `iconOnly` - Icon-only button (requires `aria-label`)
302
+
303
+ ### Input Components
304
+
305
+ All input types: `InputText`, `InputEmail`, `InputPassword`, `InputNumber`, `InputTel`, `InputUrl`, `InputSearch`, `InputDate`, `InputTime`, `InputDateTime`
306
+
307
+ ```tsx
308
+ import { InputText, InputEmail, InputPassword, InputNumber } from '@hellboy/ds';
309
+
310
+ // Basic inputs
311
+ <InputText label="Name" placeholder="Enter your name" />
312
+ <InputEmail label="Email" required />
313
+ <InputPassword label="Password" />
314
+
315
+ // With states
316
+ <InputText
317
+ label="Username"
318
+ helperText="Choose a unique username"
319
+ error={errors.username}
320
+ />
321
+
322
+ // Number input with constraints
323
+ <InputNumber
324
+ label="Age"
325
+ min={0}
326
+ max={120}
327
+ step={1}
328
+ />
329
+
330
+ // Date/Time pickers
331
+ <InputDate label="Birthday" />
332
+ <InputTime label="Meeting Time" />
333
+ <InputDateTime label="Event Start" />
334
+
335
+ // Sizes
336
+ <InputText size="sm" label="Small" />
337
+ <InputText size="md" label="Medium" />
338
+ <InputText size="lg" label="Large" />
339
+ ```
340
+
341
+ **Props:**
342
+ - `label` - Input label text
343
+ - `helperText` - Helper text below input
344
+ - `error` - Error message (triggers error state)
345
+ - `fullWidth` - Expand to container width
346
+ - `size` - Input size: `sm` | `md` | `lg`
347
+
348
+ ### Textarea
349
+
350
+ ```tsx
351
+ import { Textarea, RichTextarea } from '@hellboy/ds';
352
+
353
+ // Simple textarea
354
+ <Textarea
355
+ label="Comments"
356
+ placeholder="Enter your feedback..."
357
+ rows={4}
358
+ />
359
+
360
+ // Rich text editor
361
+ <RichTextarea
362
+ value={content}
363
+ onChange={setContent}
364
+ placeholder="Start typing..."
365
+ toolbarOptions={['bold', 'italic', 'link', 'orderedList', 'unorderedList']}
366
+ showTopToolbar={true}
367
+ />
368
+ ```
369
+
370
+ ### Banner
371
+
372
+ **Types:** `info` | `success` | `warning` | `error`
373
+
374
+ ```tsx
375
+ import { Banner } from '@hellboy/ds';
376
+
377
+ <Banner type="info">
378
+ This is an informational message.
379
+ </Banner>
380
+
381
+ <Banner type="success" onDismiss={() => console.log('Dismissed')}>
382
+ <strong>Success!</strong> Your changes have been saved.
383
+ </Banner>
384
+
385
+ <Banner type="warning">
386
+ <strong>Warning:</strong> This action cannot be undone.
387
+ </Banner>
388
+
389
+ <Banner type="error">
390
+ <strong>Error:</strong> Something went wrong.
391
+ </Banner>
392
+ ```
393
+
394
+ ### Dialog
395
+
396
+ ```tsx
397
+ import { Dialog, Button } from '@hellboy/ds';
398
+ import { useState } from 'react';
399
+
400
+ function MyComponent() {
401
+ const [isOpen, setIsOpen] = useState(false);
402
+
403
+ return (
404
+ <>
405
+ <Button onClick={() => setIsOpen(true)}>Open Dialog</Button>
406
+
407
+ <Dialog
408
+ open={isOpen}
409
+ onClose={() => setIsOpen(false)}
410
+ title="Confirm Action"
411
+ size="md" // sm | md | lg
412
+ >
413
+ <p>Are you sure you want to continue?</p>
414
+
415
+ <div style={{ display: 'flex', gap: '1rem', marginTop: '1rem' }}>
416
+ <Button variant="secondary" onClick={() => setIsOpen(false)}>
417
+ Cancel
418
+ </Button>
419
+ <Button onClick={() => setIsOpen(false)}>
420
+ Confirm
421
+ </Button>
422
+ </div>
423
+ </Dialog>
424
+ </>
425
+ );
426
+ }
427
+ ```
428
+
429
+ ### Table
430
+
431
+ ```tsx
432
+ import { Table, TableContainer, TableHead, TableBody, TableRow, TableCell } from '@hellboy/ds';
433
+
434
+ <TableContainer>
435
+ <Table bordered striped hover>
436
+ <TableHead>
437
+ <TableRow>
438
+ <TableCell header>ID</TableCell>
439
+ <TableCell header>Name</TableCell>
440
+ <TableCell header>Email</TableCell>
441
+ </TableRow>
442
+ </TableHead>
443
+ <TableBody>
444
+ {users.map(user => (
445
+ <TableRow key={user.id}>
446
+ <TableCell>{user.id}</TableCell>
447
+ <TableCell>{user.name}</TableCell>
448
+ <TableCell>{user.email}</TableCell>
449
+ </TableRow>
450
+ ))}
451
+ </TableBody>
452
+ </Table>
453
+ </TableContainer>
454
+ ```
455
+
456
+ ### Tooltip
457
+
458
+ ```tsx
459
+ import { Tooltip, Button } from '@hellboy/ds';
460
+
461
+ <Tooltip content="This is a helpful tip" placement="top">
462
+ <Button>Hover me</Button>
463
+ </Tooltip>
464
+
465
+ <Tooltip
466
+ content={<strong>Rich content</strong>}
467
+ placement="bottom"
468
+ delay={500}
469
+ >
470
+ <span>Delayed tooltip</span>
471
+ </Tooltip>
472
+ ```
473
+
474
+ ### Tag & Badge
475
+
476
+ ```tsx
477
+ import { Tag, Badge } from '@hellboy/ds';
478
+
479
+ // Tags (8 variants, 3 sizes)
480
+ <Tag variant="primary">Primary</Tag>
481
+ <Tag variant="success" size="sm">Small Success</Tag>
482
+ <Tag variant="warning" size="lg">Large Warning</Tag>
483
+
484
+ // Badges
485
+ <Badge variant="primary">New</Badge>
486
+ <Badge variant="error">5</Badge>
487
+ ```
488
+
489
+ ### Theme Control
490
+
491
+ ```tsx
492
+ import { ThemeControl } from '@hellboy/ds';
493
+
494
+ // Theme switcher component
495
+ <ThemeControl />
496
+
497
+ // Or use programmatically
498
+ import { setTheme, getTheme } from '@hellboy/ds';
499
+
500
+ const currentTheme = getTheme(); // 'light' | 'dark'
501
+ setTheme('dark');
502
+ ```
503
+
504
+ ## 🖥️ Platform Support
505
+
506
+ **Current Focus: Desktop Applications (1024px+)**
507
+
508
+ Hellboy Design System is currently optimized for desktop experiences. All components are designed, tested, and optimized primarily for desktop interfaces.
509
+
510
+ **Roadmap:**
511
+ - 📱 **Tablet Support** (768px - 1023px) - Q2 2026
512
+ - 📲 **Mobile Support** (< 768px) - Q3 2026
513
+ - 🎯 **Responsive Utilities** - Q2 2026
103
514
 
104
515
  ## ♿ Accessibility
105
516
 
106
- All components are built with accessibility in mind:
107
- - Full keyboard navigation support
108
- - ARIA attributes automatically managed
109
- - Screen reader friendly
110
- - Focus management
111
- - Semantic HTML
517
+ Every component is built with accessibility as a core principle:
518
+
519
+ - **WCAG 2.1 AA Compliant** - Color contrast, focus indicators, semantic HTML
520
+ - ⌨️ **Keyboard Navigation** - Full keyboard support with logical tab order
521
+ - 🔊 **Screen Reader Support** - Proper ARIA labels, roles, and live regions
522
+ - 🎯 **Focus Management** - Visible focus indicators respecting user preferences
523
+ - 🏗️ **Semantic HTML** - Native elements enhanced with ARIA when needed
524
+ - 🎨 **Color Contrast** - AA compliant in both light and dark themes
525
+ - ⚡ **Motion Respect** - Honors `prefers-reduced-motion` for animations
526
+ - 🔧 **AriaKit Foundation** - Built on battle-tested accessibility primitives from AriaKit
527
+
528
+ ## 📐 Package Architecture
529
+
530
+ ### Build Output
531
+
532
+ ```
533
+ dist/
534
+ ├── index.css # Complete CSS bundle (~120 KB minified)
535
+ ├── index.js # All components (CommonJS)
536
+ ├── index.mjs # All components (ESM)
537
+ ├── index.d.ts # TypeScript declarations
538
+ ├── theme.css # Theme variables only
539
+ └── components/
540
+ ├── button.js # Button component (CommonJS)
541
+ ├── button.mjs # Button component (ESM)
542
+ ├── button.d.ts # Button TypeScript types
543
+ ├── button.css # Button styles + all dependencies
544
+ └── ... (42 components)
545
+ ```
546
+
547
+ ### Import Patterns
548
+
549
+ ```tsx
550
+ // ✅ Recommended: Full bundle
551
+ import '@hellboy/ds/dist/index.css';
552
+ import { Button, Input, Dialog } from '@hellboy/ds';
553
+
554
+ // ✅ Advanced: Individual components (maximum tree-shaking)
555
+ import '@hellboy/ds/components/button/css';
556
+ import { Button } from '@hellboy/ds/components/button';
557
+
558
+ // ✅ Theme only (if building custom CSS)
559
+ import '@hellboy/ds/dist/theme.css';
560
+ ```
561
+
562
+ **Note**: Each component's CSS file includes all its dependencies, so you never need to manually import foundation files.
563
+
564
+ ## 🚀 Getting Started Examples
565
+
566
+ ### Simple Page
567
+
568
+ ```tsx
569
+ import '@hellboy/ds/dist/index.css';
570
+ import { Button, Input, Banner } from '@hellboy/ds';
571
+
572
+ function App() {
573
+ return (
574
+ <div style={{ padding: '2rem' }}>
575
+ <Banner type="info">Welcome to Hellboy DS!</Banner>
576
+
577
+ <form style={{ marginTop: '1rem' }}>
578
+ <Input label="Email" type="email" />
579
+ <Input label="Password" type="password" />
580
+ <Button type="submit" fullWidth>Sign In</Button>
581
+ </form>
582
+ </div>
583
+ );
584
+ }
585
+ ```
586
+
587
+ ### With Theme Switching
588
+
589
+ ```tsx
590
+ import '@hellboy/ds/dist/index.css';
591
+ import { ThemeControl, Button, Card } from '@hellboy/ds';
592
+
593
+ function App() {
594
+ return (
595
+ <div style={{ padding: '2rem' }}>
596
+ <div style={{ position: 'fixed', top: '1rem', right: '1rem' }}>
597
+ <ThemeControl />
598
+ </div>
599
+
600
+ <Card>
601
+ <h1>My App</h1>
602
+ <p>Theme automatically applies to all components!</p>
603
+ <Button>Click me</Button>
604
+ </Card>
605
+ </div>
606
+ );
607
+ }
608
+ ```