@beehexa/design-rules 0.0.0-stage → 2611.3.2

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 (290) hide show
  1. package/README.md +56 -2
  2. package/dist/AGENTS.md +24 -0
  3. package/dist/catalog.json +1814 -0
  4. package/dist/docs/public/_redirects +7 -0
  5. package/dist/docs/public/apple-touch-icon.png +0 -0
  6. package/dist/docs/public/brand/logos/app/apple-touch-icon.png +0 -0
  7. package/dist/docs/public/brand/logos/app/avatar-800.png +0 -0
  8. package/dist/docs/public/brand/logos/app/icon-192.png +0 -0
  9. package/dist/docs/public/brand/logos/app/icon-512.png +0 -0
  10. package/dist/docs/public/brand/logos/app/icon-maskable-512.png +0 -0
  11. package/dist/docs/public/brand/logos/archive/d-550/beehexa-horizontal-1-light.svg +1 -0
  12. package/dist/docs/public/brand/logos/archive/d-550/beehexa-horizontal-2-dark.svg +1 -0
  13. package/dist/docs/public/brand/logos/archive/d-550/beehexa-horizontal-3-white.svg +1 -0
  14. package/dist/docs/public/brand/logos/archive/d-550/beehexa-horizontal-4-graphite.svg +1 -0
  15. package/dist/docs/public/brand/logos/archive/d-550/hexasync-horizontal-1-light.svg +1 -0
  16. package/dist/docs/public/brand/logos/archive/d-550/hexasync-horizontal-2-dark.svg +1 -0
  17. package/dist/docs/public/brand/logos/archive/d-550/hexasync-horizontal-3-white.svg +1 -0
  18. package/dist/docs/public/brand/logos/archive/d-550/hexasync-horizontal-4-graphite.svg +1 -0
  19. package/dist/docs/public/brand/logos/archive/d-550/ui/beehexa-d-550-dark.svg +1 -0
  20. package/dist/docs/public/brand/logos/archive/d-550/ui/beehexa-d-550-light.svg +1 -0
  21. package/dist/docs/public/brand/logos/archive/d-550/ui/beehexa-design-d-550-dark.svg +1 -0
  22. package/dist/docs/public/brand/logos/archive/d-550/ui/beehexa-design-d-550-light.svg +1 -0
  23. package/dist/docs/public/brand/logos/archive/d-550/ui/hexasync-d-550-dark.svg +1 -0
  24. package/dist/docs/public/brand/logos/archive/d-550/ui/hexasync-d-550-light.svg +1 -0
  25. package/dist/docs/public/brand/logos/archive/d-550/ui/png/beehexa-design-d-550-dark@3x.png +0 -0
  26. package/dist/docs/public/brand/logos/archive/d-550/ui/png/beehexa-design-d-550-light@3x.png +0 -0
  27. package/dist/docs/public/brand/logos/beehexa-logo.zip +0 -0
  28. package/dist/docs/public/brand/logos/fig/anatomy-en.png +0 -0
  29. package/dist/docs/public/brand/logos/fig/anatomy-vi.png +0 -0
  30. package/dist/docs/public/brand/logos/fig/beehexa-dark-12.png +0 -0
  31. package/dist/docs/public/brand/logos/fig/beehexa-dark-14.png +0 -0
  32. package/dist/docs/public/brand/logos/fig/beehexa-dark-28.png +0 -0
  33. package/dist/docs/public/brand/logos/fig/beehexa-dark-32.png +0 -0
  34. package/dist/docs/public/brand/logos/fig/beehexa-dark-56.png +0 -0
  35. package/dist/docs/public/brand/logos/fig/beehexa-graphite-28.png +0 -0
  36. package/dist/docs/public/brand/logos/fig/beehexa-graphite-32.png +0 -0
  37. package/dist/docs/public/brand/logos/fig/beehexa-light-14.png +0 -0
  38. package/dist/docs/public/brand/logos/fig/beehexa-light-21.png +0 -0
  39. package/dist/docs/public/brand/logos/fig/beehexa-light-22.png +0 -0
  40. package/dist/docs/public/brand/logos/fig/beehexa-light-24.png +0 -0
  41. package/dist/docs/public/brand/logos/fig/beehexa-light-28.png +0 -0
  42. package/dist/docs/public/brand/logos/fig/beehexa-light-32.png +0 -0
  43. package/dist/docs/public/brand/logos/fig/beehexa-light-36-7c3aed7c3aed.png +0 -0
  44. package/dist/docs/public/brand/logos/fig/beehexa-light-36-swap.png +0 -0
  45. package/dist/docs/public/brand/logos/fig/beehexa-light-36.png +0 -0
  46. package/dist/docs/public/brand/logos/fig/beehexa-light-56.png +0 -0
  47. package/dist/docs/public/brand/logos/fig/beehexa-white-20.png +0 -0
  48. package/dist/docs/public/brand/logos/fig/beehexa-white-32.png +0 -0
  49. package/dist/docs/public/brand/logos/fig/clearspace.png +0 -0
  50. package/dist/docs/public/brand/logos/fig/construction-en.png +0 -0
  51. package/dist/docs/public/brand/logos/fig/construction-vi.png +0 -0
  52. package/dist/docs/public/brand/logos/fig/container-en.png +0 -0
  53. package/dist/docs/public/brand/logos/fig/container-vi.png +0 -0
  54. package/dist/docs/public/brand/logos/fig/hexasync-dark-20.png +0 -0
  55. package/dist/docs/public/brand/logos/fig/hexasync-dark-28.png +0 -0
  56. package/dist/docs/public/brand/logos/fig/hexasync-dark-48.png +0 -0
  57. package/dist/docs/public/brand/logos/fig/hexasync-light-19.png +0 -0
  58. package/dist/docs/public/brand/logos/fig/hexasync-light-28.png +0 -0
  59. package/dist/docs/public/brand/logos/fig/hexasync-light-48.png +0 -0
  60. package/dist/docs/public/brand/logos/fig/icon-graphite-14.png +0 -0
  61. package/dist/docs/public/brand/logos/fig/icon-graphite-16.png +0 -0
  62. package/dist/docs/public/brand/logos/fig/icon-light-16.png +0 -0
  63. package/dist/docs/public/brand/logos/fig/icon-light-24.png +0 -0
  64. package/dist/docs/public/brand/logos/fig/icon-light-48.png +0 -0
  65. package/dist/docs/public/brand/logos/fig/icon-light-92.png +0 -0
  66. package/dist/docs/public/brand/logos/fig/meaning-bee-en.png +0 -0
  67. package/dist/docs/public/brand/logos/fig/meaning-bee-vi.png +0 -0
  68. package/dist/docs/public/brand/logos/fig/meaning-outline-en.png +0 -0
  69. package/dist/docs/public/brand/logos/fig/meaning-outline-vi.png +0 -0
  70. package/dist/docs/public/brand/logos/fig/meaning-stack-en.png +0 -0
  71. package/dist/docs/public/brand/logos/fig/meaning-stack-vi.png +0 -0
  72. package/dist/docs/public/brand/logos/fig/misuse-serif.png +0 -0
  73. package/dist/docs/public/brand/logos/icon/beehexa-icon-graphite.svg +1 -0
  74. package/dist/docs/public/brand/logos/icon/beehexa-icon-white.svg +1 -0
  75. package/dist/docs/public/brand/logos/icon/beehexa-icon-yellow.svg +1 -0
  76. package/dist/docs/public/brand/logos/lockups/beehexa-horizontal-1-light.svg +1 -0
  77. package/dist/docs/public/brand/logos/lockups/beehexa-horizontal-2-dark.svg +1 -0
  78. package/dist/docs/public/brand/logos/lockups/beehexa-horizontal-3-white.svg +1 -0
  79. package/dist/docs/public/brand/logos/lockups/beehexa-horizontal-4-graphite.svg +1 -0
  80. package/dist/docs/public/brand/logos/lockups/hexasync-horizontal-1-light.svg +1 -0
  81. package/dist/docs/public/brand/logos/lockups/hexasync-horizontal-2-dark.svg +1 -0
  82. package/dist/docs/public/brand/logos/lockups/hexasync-horizontal-3-white.svg +1 -0
  83. package/dist/docs/public/brand/logos/lockups/hexasync-horizontal-4-graphite.svg +1 -0
  84. package/dist/docs/public/brand/logos/ui/beehexa-dark.svg +1 -0
  85. package/dist/docs/public/brand/logos/ui/beehexa-design-dark.svg +1 -0
  86. package/dist/docs/public/brand/logos/ui/beehexa-design-light.svg +1 -0
  87. package/dist/docs/public/brand/logos/ui/beehexa-icon-yellow.svg +1 -0
  88. package/dist/docs/public/brand/logos/ui/beehexa-light.svg +1 -0
  89. package/dist/docs/public/brand/logos/ui/hexasync-dark.svg +1 -0
  90. package/dist/docs/public/brand/logos/ui/hexasync-light.svg +1 -0
  91. package/dist/docs/public/brand/logos/ui/png/beehexa-design-dark@3x.png +0 -0
  92. package/dist/docs/public/brand/logos/ui/png/beehexa-design-light@3x.png +0 -0
  93. package/dist/docs/public/favicon.ico +0 -0
  94. package/dist/docs/public/favicon.svg +1 -0
  95. package/dist/docs/public/fonts/LICENSE-Inter.txt +93 -0
  96. package/dist/docs/public/fonts/LICENSE-JetBrainsMono.txt +93 -0
  97. package/dist/docs/public/fonts/inter-latin-ext-opsz-wght-italic.woff2 +0 -0
  98. package/dist/docs/public/fonts/inter-latin-ext-opsz-wght-normal.woff2 +0 -0
  99. package/dist/docs/public/fonts/inter-latin-opsz-wght-italic.woff2 +0 -0
  100. package/dist/docs/public/fonts/inter-latin-opsz-wght-normal.woff2 +0 -0
  101. package/dist/docs/public/fonts/inter-vietnamese-opsz-wght-italic.woff2 +0 -0
  102. package/dist/docs/public/fonts/inter-vietnamese-opsz-wght-normal.woff2 +0 -0
  103. package/dist/docs/public/fonts/jetbrains-mono-latin-ext-wght-normal.woff2 +0 -0
  104. package/dist/docs/public/fonts/jetbrains-mono-latin-wght-normal.woff2 +0 -0
  105. package/dist/docs/public/fonts/jetbrains-mono-vietnamese-wght-normal.woff2 +0 -0
  106. package/dist/docs/public/icon-192.png +0 -0
  107. package/dist/docs/public/icon-512.png +0 -0
  108. package/dist/docs/public/icon-maskable-512.png +0 -0
  109. package/dist/docs/public/robots.txt +4 -0
  110. package/dist/docs/public/site.webmanifest +21 -0
  111. package/dist/docs/scripts/color-pairs.mjs +46 -0
  112. package/dist/docs/scripts/contrast-exceptions.mjs +6 -0
  113. package/dist/docs/scripts/token-utils.d.mts +26 -0
  114. package/dist/docs/scripts/token-utils.mjs +114 -0
  115. package/dist/docs/src/brand/Beehexa-brandguide-full-mar12.pdf +0 -0
  116. package/dist/docs/src/brand/color+typoDirections.pdf +0 -0
  117. package/dist/docs/src/brand/structure-proposal.md +227 -0
  118. package/dist/docs/src/components/ChildPages.astro +25 -0
  119. package/dist/docs/src/components/CodeExample.astro +18 -0
  120. package/dist/docs/src/components/ColorDemo.astro +794 -0
  121. package/dist/docs/src/components/ColorExample.astro +32 -0
  122. package/dist/docs/src/components/ColorSwatch.astro +20 -0
  123. package/dist/docs/src/components/ComponentTabs.astro +21 -0
  124. package/dist/docs/src/components/DocsFooter.astro +25 -0
  125. package/dist/docs/src/components/HelpOptions.astro +20 -0
  126. package/dist/docs/src/components/IconBrowser.astro +257 -0
  127. package/dist/docs/src/components/IconDemo.astro +185 -0
  128. package/dist/docs/src/components/InDevelopment.astro +29 -0
  129. package/dist/docs/src/components/LayoutDemo.astro +384 -0
  130. package/dist/docs/src/components/Logo.astro +25 -0
  131. package/dist/docs/src/components/PhaseTable.astro +22 -0
  132. package/dist/docs/src/components/RoleGuides.astro +48 -0
  133. package/dist/docs/src/components/ShapeDemo.astro +239 -0
  134. package/dist/docs/src/components/ShapePin.astro +22 -0
  135. package/dist/docs/src/components/Sidebar.astro +206 -0
  136. package/dist/docs/src/components/SiteHeader.astro +211 -0
  137. package/dist/docs/src/components/SpacingDemo.astro +172 -0
  138. package/dist/docs/src/components/StatusBadge.astro +22 -0
  139. package/dist/docs/src/components/SystemAreas.astro +29 -0
  140. package/dist/docs/src/components/TableOfContents.astro +47 -0
  141. package/dist/docs/src/components/TokenTable.astro +40 -0
  142. package/dist/docs/src/components/TypeDemo.astro +249 -0
  143. package/dist/docs/src/components/logos/Fig.astro +28 -0
  144. package/dist/docs/src/components/logos/LogoAnatomy.astro +101 -0
  145. package/dist/docs/src/components/logos/LogoClearSpace.astro +81 -0
  146. package/dist/docs/src/components/logos/LogoColourVersions.astro +45 -0
  147. package/dist/docs/src/components/logos/LogoConstruction.astro +84 -0
  148. package/dist/docs/src/components/logos/LogoContainer.astro +84 -0
  149. package/dist/docs/src/components/logos/LogoHero.astro +42 -0
  150. package/dist/docs/src/components/logos/LogoInUse.astro +197 -0
  151. package/dist/docs/src/components/logos/LogoMeanings.astro +75 -0
  152. package/dist/docs/src/components/logos/LogoMinSize.astro +55 -0
  153. package/dist/docs/src/components/logos/LogoMistakes.astro +109 -0
  154. package/dist/docs/src/components/logos/LogoMisuse.astro +96 -0
  155. package/dist/docs/src/components/logos/LogoPair.astro +26 -0
  156. package/dist/docs/src/components/logos/LogoSvg.astro +68 -0
  157. package/dist/docs/src/content/components/button/accessibility.mdx +18 -0
  158. package/dist/docs/src/content/components/button/changelog.mdx +6 -0
  159. package/dist/docs/src/content/components/button/code.mdx +27 -0
  160. package/dist/docs/src/content/components/button/examples.mdx +21 -0
  161. package/dist/docs/src/content/components/button/meta.json +5 -0
  162. package/dist/docs/src/content/components/button/usage.mdx +18 -0
  163. package/dist/docs/src/content/foundations/guidelines/accessibility.mdx +19 -0
  164. package/dist/docs/src/content/foundations/guidelines/content.mdx +25 -0
  165. package/dist/docs/src/content/foundations/index.mdx +9 -0
  166. package/dist/docs/src/content/foundations/styles/border.mdx +89 -0
  167. package/dist/docs/src/content/foundations/styles/color/accessibility.mdx +32 -0
  168. package/dist/docs/src/content/foundations/styles/color/dark-mode.mdx +22 -0
  169. package/dist/docs/src/content/foundations/styles/color/index.mdx +65 -0
  170. package/dist/docs/src/content/foundations/styles/color/palette.mdx +57 -0
  171. package/dist/docs/src/content/foundations/styles/color/tokens.mdx +55 -0
  172. package/dist/docs/src/content/foundations/styles/color/usage.mdx +111 -0
  173. package/dist/docs/src/content/foundations/styles/data-visualization.mdx +11 -0
  174. package/dist/docs/src/content/foundations/styles/elevation.mdx +12 -0
  175. package/dist/docs/src/content/foundations/styles/icons/accessibility.mdx +72 -0
  176. package/dist/docs/src/content/foundations/styles/icons/code.mdx +171 -0
  177. package/dist/docs/src/content/foundations/styles/icons/index.mdx +62 -0
  178. package/dist/docs/src/content/foundations/styles/icons/library.mdx +19 -0
  179. package/dist/docs/src/content/foundations/styles/icons/usage.mdx +100 -0
  180. package/dist/docs/src/content/foundations/styles/illustration.mdx +9 -0
  181. package/dist/docs/src/content/foundations/styles/interaction-states.mdx +49 -0
  182. package/dist/docs/src/content/foundations/styles/layout/app-frame.mdx +81 -0
  183. package/dist/docs/src/content/foundations/styles/layout/breakpoints.mdx +56 -0
  184. package/dist/docs/src/content/foundations/styles/layout/grid.mdx +87 -0
  185. package/dist/docs/src/content/foundations/styles/layout/index.mdx +24 -0
  186. package/dist/docs/src/content/foundations/styles/layout/overlays.mdx +45 -0
  187. package/dist/docs/src/content/foundations/styles/layout/page-widths.mdx +38 -0
  188. package/dist/docs/src/content/foundations/styles/logos/downloads-and-terms.mdx +65 -0
  189. package/dist/docs/src/content/foundations/styles/logos/index.mdx +64 -0
  190. package/dist/docs/src/content/foundations/styles/logos/placement-and-containers.mdx +96 -0
  191. package/dist/docs/src/content/foundations/styles/logos/product-logos.mdx +56 -0
  192. package/dist/docs/src/content/foundations/styles/logos/using-the-logo.mdx +70 -0
  193. package/dist/docs/src/content/foundations/styles/motion.mdx +11 -0
  194. package/dist/docs/src/content/foundations/styles/opacity.mdx +9 -0
  195. package/dist/docs/src/content/foundations/styles/radius.mdx +98 -0
  196. package/dist/docs/src/content/foundations/styles/size-and-density.mdx +41 -0
  197. package/dist/docs/src/content/foundations/styles/spacing.mdx +70 -0
  198. package/dist/docs/src/content/foundations/styles/typography/code.mdx +53 -0
  199. package/dist/docs/src/content/foundations/styles/typography/index.mdx +58 -0
  200. package/dist/docs/src/content/foundations/styles/typography/usage.mdx +144 -0
  201. package/dist/docs/src/content/foundations/styles/typography/vietnamese.mdx +46 -0
  202. package/dist/docs/src/content/foundations/styles/z-index.mdx +9 -0
  203. package/dist/docs/src/content/foundations/tokens/all-tokens.mdx +36 -0
  204. package/dist/docs/src/content/foundations/tokens/index.mdx +27 -0
  205. package/dist/docs/src/content/get-started/content.mdx +14 -0
  206. package/dist/docs/src/content/get-started/design.mdx +30 -0
  207. package/dist/docs/src/content/get-started/develop.mdx +59 -0
  208. package/dist/docs/src/content/get-started/get-help.mdx +19 -0
  209. package/dist/docs/src/content/get-started/index.mdx +50 -0
  210. package/dist/docs/src/content/news/2026-10-16-site-structure.md +15 -0
  211. package/dist/docs/src/content/news/2026-10-20-docs-site.md +13 -0
  212. package/dist/docs/src/content/release-phases/index.mdx +12 -0
  213. package/dist/docs/src/content/tools/ai-agents.mdx +49 -0
  214. package/dist/docs/src/content/tools/ant-design-vue-theme.mdx +138 -0
  215. package/dist/docs/src/content/tools/eslint.mdx +15 -0
  216. package/dist/docs/src/content/tools/index.mdx +7 -0
  217. package/dist/docs/src/content/tools/stylelint.mdx +19 -0
  218. package/dist/docs/src/content-vi/foundations/styles/border.mdx +89 -0
  219. package/dist/docs/src/content-vi/foundations/styles/color/accessibility.mdx +32 -0
  220. package/dist/docs/src/content-vi/foundations/styles/color/dark-mode.mdx +22 -0
  221. package/dist/docs/src/content-vi/foundations/styles/color/index.mdx +65 -0
  222. package/dist/docs/src/content-vi/foundations/styles/color/palette.mdx +57 -0
  223. package/dist/docs/src/content-vi/foundations/styles/color/tokens.mdx +55 -0
  224. package/dist/docs/src/content-vi/foundations/styles/color/usage.mdx +111 -0
  225. package/dist/docs/src/content-vi/foundations/styles/data-visualization.mdx +11 -0
  226. package/dist/docs/src/content-vi/foundations/styles/icons/accessibility.mdx +72 -0
  227. package/dist/docs/src/content-vi/foundations/styles/icons/code.mdx +170 -0
  228. package/dist/docs/src/content-vi/foundations/styles/icons/index.mdx +62 -0
  229. package/dist/docs/src/content-vi/foundations/styles/icons/library.mdx +19 -0
  230. package/dist/docs/src/content-vi/foundations/styles/icons/usage.mdx +100 -0
  231. package/dist/docs/src/content-vi/foundations/styles/illustration.mdx +9 -0
  232. package/dist/docs/src/content-vi/foundations/styles/interaction-states.mdx +49 -0
  233. package/dist/docs/src/content-vi/foundations/styles/layout/app-frame.mdx +77 -0
  234. package/dist/docs/src/content-vi/foundations/styles/layout/breakpoints.mdx +56 -0
  235. package/dist/docs/src/content-vi/foundations/styles/layout/grid.mdx +87 -0
  236. package/dist/docs/src/content-vi/foundations/styles/layout/index.mdx +24 -0
  237. package/dist/docs/src/content-vi/foundations/styles/layout/page-widths.mdx +34 -0
  238. package/dist/docs/src/content-vi/foundations/styles/logos/downloads-and-terms.mdx +65 -0
  239. package/dist/docs/src/content-vi/foundations/styles/logos/index.mdx +64 -0
  240. package/dist/docs/src/content-vi/foundations/styles/logos/placement-and-containers.mdx +96 -0
  241. package/dist/docs/src/content-vi/foundations/styles/logos/product-logos.mdx +56 -0
  242. package/dist/docs/src/content-vi/foundations/styles/logos/using-the-logo.mdx +70 -0
  243. package/dist/docs/src/content-vi/foundations/styles/opacity.mdx +9 -0
  244. package/dist/docs/src/content-vi/foundations/styles/radius.mdx +98 -0
  245. package/dist/docs/src/content-vi/foundations/styles/size-and-density.mdx +41 -0
  246. package/dist/docs/src/content-vi/foundations/styles/spacing.mdx +70 -0
  247. package/dist/docs/src/content-vi/foundations/styles/typography/code.mdx +53 -0
  248. package/dist/docs/src/content-vi/foundations/styles/typography/index.mdx +58 -0
  249. package/dist/docs/src/content-vi/foundations/styles/typography/usage.mdx +144 -0
  250. package/dist/docs/src/content-vi/foundations/styles/typography/vietnamese.mdx +46 -0
  251. package/dist/docs/src/content-vi/foundations/styles/z-index.mdx +9 -0
  252. package/dist/docs/src/content.config.ts +68 -0
  253. package/dist/docs/src/lib/brand.ts +57 -0
  254. package/dist/docs/src/lib/contrast.ts +34 -0
  255. package/dist/docs/src/lib/i18n.ts +152 -0
  256. package/dist/docs/src/lib/icons.ts +46 -0
  257. package/dist/docs/src/lib/logo-geometry.ts +30 -0
  258. package/dist/docs/src/lib/lucide-categories.json +1 -0
  259. package/dist/docs/src/lib/lucide-data.ts +40 -0
  260. package/dist/docs/src/lib/navigation.ts +222 -0
  261. package/dist/docs/src/lib/release-phases.ts +10 -0
  262. package/dist/docs/src/lib/routes.ts +40 -0
  263. package/dist/docs/src/lib/token-descriptions-vi.ts +40 -0
  264. package/dist/docs/src/lib/tokens.ts +67 -0
  265. package/dist/docs/src/lib/tri-grid.ts +28 -0
  266. package/dist/docs/src/styles/chrome.css +122 -0
  267. package/dist/docs/src/styles/color.css +270 -0
  268. package/dist/docs/src/styles/docs.css +323 -0
  269. package/dist/docs/src/styles/global.css +66 -0
  270. package/dist/docs/src/styles/icons.css +135 -0
  271. package/dist/docs/src/styles/layout.css +165 -0
  272. package/dist/docs/src/styles/logos.css +236 -0
  273. package/dist/docs/src/styles/shapes.css +139 -0
  274. package/dist/docs/src/styles/tokens.css +461 -0
  275. package/dist/docs/src/styles/tokens.js +425 -0
  276. package/dist/docs/src/styles/typography.css +91 -0
  277. package/dist/docs/tokens/border.json +26 -0
  278. package/dist/docs/tokens/breakpoints.json +8 -0
  279. package/dist/docs/tokens/color.json +1350 -0
  280. package/dist/docs/tokens/elevation.json +26 -0
  281. package/dist/docs/tokens/layout.json +29 -0
  282. package/dist/docs/tokens/motion.json +12 -0
  283. package/dist/docs/tokens/radius.json +44 -0
  284. package/dist/docs/tokens/size.json +13 -0
  285. package/dist/docs/tokens/spacing.json +18 -0
  286. package/dist/docs/tokens/states.json +12 -0
  287. package/dist/docs/tokens/typography.json +220 -0
  288. package/dist/index.d.ts +19 -0
  289. package/dist/index.js +1823 -0
  290. package/package.json +31 -4
@@ -0,0 +1,55 @@
1
+ ---
2
+ title: Tokens
3
+ description: How colour token names are built, every role token with its light and dark value, how to use them in code, and how to ask for a new one.
4
+ order: 4
5
+ ---
6
+ import ColorDemo from '../../../../components/ColorDemo.astro';
7
+
8
+ **Every colour token name says what is painted, what it means, how strong it is and what is happening.**
9
+
10
+ ## How names are built
11
+
12
+ `color.{property}.{role}.{emphasis}.{state}`. A part is left out when it is the default.
13
+
14
+ <ColorDemo kind="anatomy" />
15
+
16
+ | Part | Values |
17
+ |---|---|
18
+ | Property | `text`, `icon`, `link`, `surface`, `background`, `border`, `skeleton` |
19
+ | Role | `neutral` (left out), `brand`, `danger`, `warning`, `success`, `info`, `inverse`, `disabled`; surfaces: `page`, `subtle`, `inverse`, `scrim` |
20
+ | Emphasis | Text: default, `subtle`, `subtlest`. Fills: `subtle`, default, `bold`. Borders: default, `bold` |
21
+ | State | `hover`, `pressed`, `selected`, `focus` |
22
+
23
+ `color.background.danger.bold.hover` is the solid danger fill on hover. Two names name the fill under the text instead of a role: `text.on-bold` (on any solid status fill) and `text.on-brand` (on the brand yellow).
24
+
25
+ In CSS, write `--bh-` and the name with dots as hyphens: `color.text.subtle` is `var(--bh-color-text-subtle)`.
26
+
27
+ Use role tokens. The [palette](/foundations/styles/color/palette/) feeds them and is never used directly (see [How colour works](/foundations/styles/color/#how-colour-works)).
28
+
29
+ ## Text and icons
30
+
31
+ <ColorDemo kind="roles" group="text" />
32
+
33
+ <ColorDemo kind="roles" group="icon" />
34
+
35
+ ## Surfaces
36
+
37
+ <ColorDemo kind="roles" group="surface" />
38
+
39
+ ## Backgrounds
40
+
41
+ <ColorDemo kind="roles" group="background" />
42
+
43
+ ## Borders
44
+
45
+ <ColorDemo kind="roles" group="border" />
46
+
47
+ ## Missing a token
48
+
49
+ 1. Check [Find the token](/foundations/styles/color/usage/#find-the-token) and the list below.
50
+ 2. Ask the design system team. Say where you need it, and propose a name from the four parts that points at a step with the right job (fill at 3, border at 7, text at 11).
51
+ 3. The team checks its contrast in both themes and adds it. Use it only after it is released.
52
+
53
+ ## All colour tokens
54
+
55
+ <ColorDemo kind="tokens" />
@@ -0,0 +1,111 @@
1
+ ---
2
+ title: Usage
3
+ description: Which token to use for each part of a screen, how status, emphasis and states are coloured, and what not to do.
4
+ order: 2
5
+ ---
6
+ import ColorDemo from '../../../../components/ColorDemo.astro';
7
+
8
+ **Pick a token by what you are painting and what it means, not by how it looks.**
9
+
10
+ <ColorDemo kind="example" />
11
+
12
+ ## Find the token
13
+
14
+ | I need | Use |
15
+ |---|---|
16
+ | Page background | `surface.page` |
17
+ | Card, panel, dialog | `surface`, edge `border` |
18
+ | Sidebar, table header, quiet area | `surface.subtle` |
19
+ | Body text, headings, labels | `text` |
20
+ | Descriptions, secondary table columns, navigation | `text.subtle` |
21
+ | Metadata, timestamps, helper text, breadcrumbs | `text.subtlest` |
22
+ | Placeholder | `text.subtlest` |
23
+ | Link | `link`; on hover `link.hover` |
24
+ | Icon next to text | `icon`; less important `icon.subtle` |
25
+ | Divider, card edge | `border` |
26
+ | Edge of an input, checkbox or select | `border.bold` |
27
+ | Keyboard focus ring | `border.focus`, 2 px, 2 px away |
28
+ | Primary button | `background.neutral.bold`, `text.inverse` |
29
+ | Default button | `surface`, `border`, `text`; on hover `background.neutral.subtle.hover` |
30
+ | Destructive button | `background.danger.bold`, `text.on-bold` |
31
+ | Row or menu item on hover | `background.neutral.subtle.hover` |
32
+ | Selected row, tab or menu item | `background.selected` and a second cue |
33
+ | Current page in the navigation | `border.selected` bar, `background.selected`, `aria-current="page"` |
34
+ | Error under a field | `text.danger`, `icon.danger` |
35
+ | Banner for a status | `background.{role}.subtle`, `border.{role}.subtle`, `text`, `icon.{role}` |
36
+ | Status in a table row | A [label](#labels) |
37
+ | Tooltip, toast | `surface.inverse`, `text.inverse` |
38
+ | Layer behind a dialog or drawer | `surface.scrim` |
39
+ | Loading placeholder | `skeleton`, sheen `skeleton.subtle` |
40
+ | Code block | `code.background`, `code.text` |
41
+ | Brand note | `background.brand.subtle`, `border.brand.subtle` |
42
+ | Disabled control | `background.disabled`, `text.disabled`, `border.disabled` |
43
+
44
+ Not in the table? Build the name from its four parts (see [Tokens](/foundations/styles/color/tokens/)). If no token exists, ask for one; don't pick the nearest colour.
45
+
46
+ ## Surfaces and backgrounds
47
+
48
+ **Surfaces are the layers of a screen; backgrounds fill the things on them.**
49
+
50
+ <ColorDemo kind="surfaces" />
51
+
52
+ `surface.scrim` goes behind dialogs and drawers only, one layer, at its own opacity.
53
+
54
+ ## Emphasis
55
+
56
+ <ColorDemo kind="emphasis" />
57
+
58
+ ## Status
59
+
60
+ **Every status is one of five roles. Pick by what the person needs to do, and always say it in words.**
61
+
62
+ ### Choosing a status
63
+
64
+ | Role | Use when | HexaSync examples |
65
+ |---|---|---|
66
+ | Info | Something is happening or worth knowing; no action needed. | Syncing, queued, importing |
67
+ | Success | It worked. | Synced, connected, completed |
68
+ | Warning | It works now but needs attention soon. | Partial sync, token expires in 3 days, rate limited |
69
+ | Danger | It failed or is blocked, or the action destroys something. | Failed, disconnected, delete |
70
+ | Neutral | Nothing is happening and nothing is wrong. | Paused, draft, skipped, archived |
71
+
72
+ Warning is orange, not yellow: yellow is the brand. There is no sixth level; say the difference in words ("Failed 3 times").
73
+
74
+ ### Status colours
75
+
76
+ <ColorDemo kind="status" />
77
+
78
+ <ColorDemo kind="banners" />
79
+
80
+ <ColorDemo kind="dodont" item="warning" />
81
+
82
+ ### Labels
83
+
84
+ <ColorDemo kind="labels" />
85
+
86
+ | | Label | State label |
87
+ |---|---|---|
88
+ | Looks | Outline in the role's `border`, text in its `text` | Fill in the role's `bold`, text and icon in `text.on-bold` |
89
+ | Size | 20 px, padding 6 px; large 24 px, 8 px | 32 px, padding 12 px |
90
+ | Use | Many per screen: table rows, tags | One per page: the status the page is about |
91
+
92
+ ## Interaction states
93
+
94
+ **Add `.hover` or `.pressed` to the token at rest; never use opacity or an overlay.**
95
+
96
+ <ColorDemo kind="states" />
97
+
98
+ | State | Use |
99
+ |---|---|
100
+ | Hover, pressed | The rest token plus `.hover` or `.pressed` |
101
+ | Selected | `background.selected` and a second cue |
102
+ | Focus | 2 px `border.focus` ring, 2 px away |
103
+ | Disabled | `background.disabled`, `text.disabled`, `border.disabled` |
104
+
105
+ On a row or menu item each state sits one step further from the background: hover, then selected, then selected on hover. A hovered row is always lighter than a selected one, so it never looks selected.
106
+
107
+ More on [Interaction states](/foundations/styles/interaction-states/).
108
+
109
+ ## Buttons
110
+
111
+ <ColorDemo kind="actions" />
@@ -0,0 +1,11 @@
1
+ ---
2
+ title: "Data visualization"
3
+ description: "Colours, type and rules for charts, KPI tiles and other data displays."
4
+ order: 13
5
+ planned:
6
+ - "A chart palette for series, with contrast in light and dark"
7
+ - "Status colours in charts"
8
+ - "Chart types and when to use each"
9
+ - "Axis, legend, tooltip and number formats"
10
+ - "Accessible charts: not by colour alone, text alternatives"
11
+ ---
@@ -0,0 +1,12 @@
1
+ ---
2
+ title: Elevation
3
+ description: Shadows that show which surfaces sit above others.
4
+ order: 8
5
+ ---
6
+ import TokenTable from '../../../components/TokenTable.astro';
7
+
8
+ - `elevation.shadow.raised`: cards that sit on the page.
9
+ - `elevation.shadow.overlay`: dropdowns, popovers and dialogs that float above content.
10
+
11
+ ## Tokens
12
+ <TokenTable prefix="elevation" />
@@ -0,0 +1,72 @@
1
+ ---
2
+ title: Accessibility
3
+ description: How icons get a name or stay silent, why icon-only buttons need a tooltip, and the contrast and target size icons must meet.
4
+ order: 3
5
+ ---
6
+ import IconDemo from '../../../../components/IconDemo.astro';
7
+
8
+ **An icon is either decorative and hidden, or it has a name. A clickable icon is always inside a button or a link of at least 24 × 24.**
9
+
10
+ | Check | Rule | WCAG 2.2 |
11
+ |---|---|---|
12
+ | Decorative icon | Hidden with `aria-hidden="true"` | 1.1.1 |
13
+ | Icon-only button or link | Has a name (`aria-label`) and a matching tooltip | 1.1.1, 2.5.3, 4.1.2 |
14
+ | Icon that carries meaning | 3:1 contrast or more with its background | 1.4.11 |
15
+ | Status | Written in words, never icon or colour alone | 1.4.1 |
16
+ | Target | 24 × 24 or more; 32 × 32 icon buttons in products | 2.5.8 |
17
+
18
+ ## Decorative icons
19
+
20
+ **When text sits next to the icon, the icon is decorative.** Hide it, so screen readers read the label once.
21
+
22
+ Lucide does this for you: an icon with no `aria-label`, `aria-labelledby`, `role` or `title` gets `aria-hidden="true"`. Don’t add a label to an icon that already has text next to it.
23
+
24
+ <IconDemo kind="dodont" item="decorative" />
25
+
26
+ ## Icon-only buttons
27
+
28
+ **Name the button, not the icon.** Put the name on the `<button>` or `<a>` with `aria-label`. The icon inside stays hidden.
29
+
30
+ - The name says what happens: “Delete store”, not “Trash” or “Icon”.
31
+ - Add a tooltip with the same words, on hover and on keyboard focus. The tooltip must start with the button’s name, so speech input users can say what they see (WCAG 2.5.3).
32
+ - Use an icon-only button only for well-known actions. See [Icon and label](/foundations/styles/icons/usage/#icon-and-label).
33
+
34
+ ```html
35
+ <button type="button" aria-label="Settings">
36
+ <svg aria-hidden="true">…</svg>
37
+ </button>
38
+ ```
39
+
40
+ <IconDemo kind="dodont" item="tooltip" />
41
+
42
+ ## Meaningful icons on their own
43
+
44
+ When an icon is the only sign of something, such as a status icon in a narrow table column, give the icon itself a name: `role="img"` and `aria-label="Failed"`. Prefer writing the status in words.
45
+
46
+ ## Contrast
47
+
48
+ **Icons that carry meaning need 3:1 against their background** (WCAG 1.4.11). Every `color.icon.*` token meets 3:1 on the backgrounds it is paired with, in light and dark; the build checks it. Decorative icons and icons in disabled controls have no minimum.
49
+
50
+ See every pair in [Color › Accessibility](/foundations/styles/color/accessibility/).
51
+
52
+ ## Target size
53
+
54
+ **Anything you can click is at least 24 × 24** (WCAG 2.5.8). In Beehexa products, icon buttons are 32 × 32 with a 16 px icon. The icon is never the only thing to click.
55
+
56
+ <IconDemo kind="target" />
57
+
58
+ <IconDemo kind="dodont" item="target" />
59
+
60
+ ## Keyboard and focus
61
+
62
+ - The button or link gets focus, never the icon. Don’t add `tabindex` to an `<svg>`.
63
+ - The focus ring goes around the whole 32 × 32 button.
64
+ - A tooltip opens on focus as well as hover, and closes with Escape.
65
+
66
+ ## Checklist
67
+
68
+ - Every icon next to text is hidden from screen readers.
69
+ - Every icon-only button has a name and a tooltip with the same words.
70
+ - No status is shown by an icon or colour alone.
71
+ - Meaningful icons reach 3:1; the token already does if you use the right one.
72
+ - Every clickable icon sits in a target of 24 × 24 or more.
@@ -0,0 +1,171 @@
1
+ ---
2
+ title: Code
3
+ description: How Vue products install, import, size, colour and label Lucide icons, with short notes for React and Astro.
4
+ order: 4
5
+ ---
6
+
7
+ **Products use Lucide directly. Install the Lucide package for your framework, pin the version and import each icon by name.**
8
+
9
+ ## Packages
10
+
11
+ | Framework | Package | Version |
12
+ |---|---|---|
13
+ | Vue, for Beehexa products | `@lucide/vue` | 1.62.0 |
14
+ | React | `lucide-react` | 1.62.0 |
15
+
16
+ Every product uses the same Lucide version as this site, so the icons match the [Library](/foundations/styles/icons/library/). The icons are bundled into the app at build time. There is no request to a CDN.
17
+
18
+ ## Install
19
+
20
+ ```bash
21
+ npm install @lucide/vue@1.62.0 --save-exact
22
+ ```
23
+
24
+ Pin the exact version, with no `^` or `~`. A new Lucide version can change a shape or rename an icon, so raise the version on purpose. See [Updating Lucide](#updating-lucide).
25
+
26
+ ## Import
27
+
28
+ Import each icon by name. Names are the Library names in PascalCase: `refresh-cw` becomes `RefreshCw`. Only the icons you import end up in the bundle.
29
+
30
+ ```vue
31
+ <script setup lang="ts">
32
+ import { RefreshCw } from '@lucide/vue';
33
+ </script>
34
+
35
+ <template>
36
+ <button type="button" class="bh-button">
37
+ <RefreshCw :size="16" />
38
+ Sync now
39
+ </button>
40
+ </template>
41
+ ```
42
+
43
+ Don’t import the whole set with `import * as`. It puts every icon in the bundle.
44
+
45
+ ## Default size
46
+
47
+ Lucide draws icons at 24 px. Beehexa products use 16 px by default. Set it once in the root component:
48
+
49
+ ```vue
50
+ <!-- App.vue -->
51
+ <script setup lang="ts">
52
+ import { setLucideProps } from '@lucide/vue';
53
+
54
+ setLucideProps({ size: 16 });
55
+ </script>
56
+ ```
57
+
58
+ Then set `size` only for a 20, 24 or 32 px icon.
59
+
60
+ ## Props
61
+
62
+ | Prop | Lucide default | Beehexa rule |
63
+ |---|---|---|
64
+ | `size` | 24 | 16 by default. 20, 24 or 32 only where Usage says so. Nothing else. |
65
+ | `color` | `currentColor` | Leave it. Set the colour on the parent with an icon colour token. |
66
+ | `stroke-width` | 2 | Don’t change it. |
67
+ | `non-scaling-stroke` | `false` | Don’t turn it on. Don’t use its older name, absolute-stroke-width, either. |
68
+ | `aria-label` | none | Only for a meaningful icon on its own, together with the img role. |
69
+
70
+ ## Size
71
+
72
+ Use the `size` prop, or set the size in CSS on the `svg`. Both keep the stroke in scale.
73
+
74
+ ```vue
75
+ <RefreshCw :size="20" />
76
+ ```
77
+
78
+ ## Colour
79
+
80
+ ```css
81
+ .sync-status {
82
+ color: var(--bh-color-icon-success);
83
+ }
84
+ ```
85
+
86
+ ```vue
87
+ <span class="sync-status"><CircleCheck /> Synced</span>
88
+ ```
89
+
90
+ ## Spacing
91
+
92
+ Set the gap on the control, from its size: 4 px (`space.050`) with a 16 px icon in small and default controls, 8 px (`space.100`) with a 20 or 24 px icon. See [Usage › Spacing](/foundations/styles/icons/usage/#spacing).
93
+
94
+ ```css
95
+ .bh-button {
96
+ display: inline-flex;
97
+ align-items: center;
98
+ gap: var(--bh-space-050);
99
+ }
100
+ .bh-button.is-large {
101
+ gap: var(--bh-space-100);
102
+ }
103
+ ```
104
+
105
+ ## Accessibility
106
+
107
+ Lucide hides an icon from screen readers with `aria-hidden="true"`, unless you give it an `aria-*`, `role` or `title` prop. Name icon-only buttons on the button, and add a tooltip with the same text.
108
+
109
+ ```vue
110
+ <a-tooltip title="Settings">
111
+ <button type="button" class="icon-button" aria-label="Settings">
112
+ <Settings />
113
+ </button>
114
+ </a-tooltip>
115
+ ```
116
+
117
+ A meaningful icon on its own gets a role and a label, which also removes `aria-hidden`:
118
+
119
+ ```vue
120
+ <CircleX role="img" aria-label="Failed" />
121
+ ```
122
+
123
+ ## Inside Ant Design Vue
124
+
125
+ Put the icon in the `icon` slot and add the `anticon` class, so Ant Design Vue lines it up like its own icons.
126
+
127
+ ```vue
128
+ <a-button>
129
+ <template #icon><Plus class="anticon" /></template>
130
+ Add store
131
+ </a-button>
132
+ ```
133
+
134
+ ## React
135
+
136
+ `lucide-react` has the same icons and props, in camelCase. Set the default size once with `LucideProvider`.
137
+
138
+ ```tsx
139
+ import { LucideProvider, RefreshCw } from 'lucide-react';
140
+
141
+ <LucideProvider size={16}>
142
+ <button type="button">
143
+ <RefreshCw />
144
+ Sync now
145
+ </button>
146
+ </LucideProvider>
147
+ ```
148
+
149
+ ## Astro
150
+
151
+ beehexa.design uses `@lucide/astro`. Import each icon from its own file, so the build stays fast:
152
+
153
+ ```astro
154
+ ---
155
+ import Search from '@lucide/astro/icons/search';
156
+ ---
157
+ <button class="icon-button" type="button" aria-label="Search">
158
+ <Search size={20} />
159
+ </button>
160
+ ```
161
+
162
+
163
+ ## Custom icons
164
+
165
+ Lucide covers what Beehexa needs today. If an icon is ever missing, draw it on Lucide’s 24 px grid with the same stroke and caps, name it in kebab-case with a `bh-` prefix, and add it to the library.
166
+
167
+ ## Updating Lucide
168
+
169
+ 1. Read the Lucide release notes for renamed or changed icons.
170
+ 2. Check that every icon in [Common actions](/foundations/styles/icons/usage/#common-actions) still exists.
171
+ 3. Raise the pinned version in the product, and ask the design system team to update the Library, so it shows the same icons.
@@ -0,0 +1,62 @@
1
+ ---
2
+ title: Icons
3
+ description: Beehexa products use Lucide, an open-source set of outline icons, directly. A few rules cover size, colour, spacing, labels and accessibility.
4
+ order: 11
5
+ sidebarLabel: Overview
6
+ ---
7
+ import IconDemo from '../../../../components/IconDemo.astro';
8
+
9
+ Icons help people scan a screen and recognise an action. In Beehexa products they never replace words: a status is written, and most actions have a label.
10
+
11
+ Beehexa uses **[Lucide](https://lucide.dev)**: about 1,900 outline icons on a 24 × 24 grid, under the ISC licence. Products import Lucide directly. There is no Beehexa icon package. We add usage rules on top.
12
+
13
+ <IconDemo kind="sizes" />
14
+
15
+ ## Principles
16
+
17
+ ### Words first
18
+
19
+ An icon supports a label. Use an icon on its own only for an action everyone knows, such as close, search or more, and give it a name and a tooltip.
20
+
21
+ ### One icon, one meaning
22
+
23
+ The same idea always has the same icon, in every product. Sync is `refresh-cw` everywhere. See the [common actions](/foundations/styles/icons/usage/#common-actions).
24
+
25
+ ### Outline only
26
+
27
+ Lucide has no filled icons. Show a selected item with the selected background and an indicator bar, not with a different icon.
28
+
29
+ ### Colour follows the text
30
+
31
+ An icon takes the colour of the text next to it. Use a status colour only when the icon shows that status.
32
+
33
+ ## The rules at a glance
34
+
35
+ | Rule | Value |
36
+ |---|---|
37
+ | Icon set | Lucide, outline only |
38
+ | Sizes | 16 (default), 20 (next to 16 px text, toolbars), 24 (icon on its own), 32 (empty states only) |
39
+ | Stroke | Lucide’s default, scaled with the icon: 1.33 px at 16, 1.67 at 20, 2 at 24 |
40
+ | Grid | 24 × 24, at least 1 unit of padding, round caps and joins |
41
+ | Colour | `currentColor`, with the `color.icon.*` tokens |
42
+ | Next to text | Centred on the first line. The gap follows the text size: 4 px next to 14 px text or smaller, 8 px next to 16 px text or larger |
43
+ | Labels | Icon with a label by default; icon-only for well-known actions, with a name and a tooltip |
44
+ | Decorative icons | Hidden from screen readers (`aria-hidden="true"`) |
45
+ | Contrast | 3:1 or more for icons that carry meaning (WCAG 1.4.11) |
46
+ | Target | 24 × 24 or more (WCAG 2.5.8); icon buttons in products are 32 × 32 |
47
+ | Names | One name per meaning, kebab-case, such as `circle-check` |
48
+ | Package | Lucide for Vue 1.62.0, pinned, imported by name |
49
+ | Right to left | Not needed: products are in Vietnamese and English |
50
+
51
+ ## In this section
52
+
53
+ | Page | What is in it |
54
+ |---|---|
55
+ | [Library](/foundations/styles/icons/library/) | Every icon. Search, filter and copy a name. |
56
+ | [Usage](/foundations/styles/icons/usage/) | Size, stroke, colour, text alignment, labels, and the icon for each common action. |
57
+ | [Accessibility](/foundations/styles/icons/accessibility/) | Names, decorative icons, tooltips, contrast and target size. |
58
+ | [Code](/foundations/styles/icons/code/) | Installing, importing, sizing and labelling Lucide icons in Vue, with notes for React and Astro. |
59
+
60
+ ## Licence
61
+
62
+ Lucide is © Lucide Contributors and released under the [ISC licence](https://lucide.dev/license). Parts of it come from Feather, © Cole Bemis, under the MIT licence. Both allow commercial use. Keep the licence notice when you ship the icons. The Lucide package keeps it for you.
@@ -0,0 +1,19 @@
1
+ ---
2
+ title: Library
3
+ description: Every Lucide icon Beehexa can use. Search by name or tag, filter by category, switch the size and click an icon to copy its name.
4
+ order: 1
5
+ ---
6
+ import IconBrowser from '../../../../components/IconBrowser.astro';
7
+
8
+ **Click an icon to copy its name.** Names are kebab-case, such as `circle-check`. In Vue the same icon is `CircleCheck`.
9
+
10
+ Before you pick an icon, check [Common actions](/foundations/styles/icons/usage/#common-actions): if the meaning is listed there, use that icon. The library opens on the category **Common actions**, which shows only those icons; a search looks through every icon, and **All** lists them all. They are Lucide icons chosen for common Beehexa actions. None is redrawn or renamed.
11
+
12
+ <IconBrowser />
13
+
14
+ ## Using the library
15
+
16
+ - Search matches icon names first, then the tags Lucide gives each icon. “Sync” finds `refresh-cw`.
17
+ - The size switch shows 16, 20 and 24 px. Products use 16 px by default.
18
+ - With the keyboard: Tab to the icons, move with the arrow keys, Home and End, and press Enter to copy.
19
+ - Don’t see what you need? Search by meaning as well as by name. Two icons that each make sense alone rarely make a good third one. See [Custom icons](/foundations/styles/icons/code/#custom-icons).
@@ -0,0 +1,100 @@
1
+ ---
2
+ title: Usage
3
+ description: Which size to use, how stroke, colour and alignment work next to text, when an icon needs a label, and the one icon for each common Beehexa action.
4
+ order: 2
5
+ ---
6
+ import IconDemo from '../../../../components/IconDemo.astro';
7
+ import ColorDemo from '../../../../components/ColorDemo.astro';
8
+
9
+ **Use 16 px icons in the colour of the text, with a label, and the same icon for the same meaning everywhere.**
10
+
11
+ ## Sizes
12
+
13
+ **Pick the size from the text next to the icon.**
14
+
15
+ | Size | Use it for |
16
+ |---|---|
17
+ | 16 px | Default. Buttons, menus, tables, form fields, next to 14 px text. |
18
+ | 20 px | Next to 16 px text, in toolbars and in the page header. |
19
+ | 24 px | An icon on its own, such as a status in a card or a small empty state. |
20
+ | 32 px | Empty states only. |
21
+
22
+ Don’t use other sizes. Don’t scale an icon to fit a box: change the box.
23
+
24
+ <IconDemo kind="dodont" item="size" />
25
+
26
+ ## Stroke
27
+
28
+ **Keep Lucide’s stroke.** It is 2 units on the 24 grid and scales with the icon: 1.33 px at 16, 1.67 px at 20, 2 px at 24. Don’t set `stroke-width` or `absoluteStrokeWidth`. A fixed 2 px stroke fills in the small details of a 16 px icon.
29
+
30
+ <IconDemo kind="dodont" item="stroke" />
31
+
32
+ ## Colour
33
+
34
+ **An icon takes the colour of its text.** Icons draw with `currentColor`, so an icon in a button or a link is right without extra code. Set a colour only with a `color.icon.*` token:
35
+
36
+ <ColorDemo kind="roles" group="icon" />
37
+
38
+ - Status icons use the status token, such as `icon.danger`, and always sit next to the status in words.
39
+ - Never give an icon a colour to decorate it, and never use the brand yellow for an icon.
40
+
41
+ <IconDemo kind="dodont" item="colour" />
42
+
43
+ ## Alignment with text
44
+
45
+ **Centre the icon on the line height of the text.** Use `display: flex; align-items: center`. Next to several lines, centre the icon on the first line.
46
+
47
+ <IconDemo kind="align" />
48
+
49
+ <IconDemo kind="dodont" item="align" />
50
+
51
+ ## Spacing
52
+
53
+ **The gap between an icon and its text follows the text size: 4 px next to 14 px text or smaller, 8 px next to 16 px text or larger.**
54
+
55
+ | Text | Icon | Gap | Token | Where |
56
+ |---|---|---|---|---|
57
+ | 12 or 14 px | 16 px | 4 px | `space.050` | Small and default controls, menus, tabs, table cells |
58
+ | 16 px or larger | 20 or 24 px | 8 px | `space.100` | Large controls, toolbars, the page header, a status in a card |
59
+
60
+ Set the gap on the control with `gap`, not with a margin on the icon.
61
+
62
+ <IconDemo kind="spacing" />
63
+
64
+ ## Icon and label
65
+
66
+ **Give an icon a label by default.** The label says what happens; the icon helps people find it again.
67
+
68
+ Use an icon on its own only when all three are true:
69
+
70
+ - The action is well known: close, search, add, edit, delete, copy, refresh, settings, filter, more, menu.
71
+ - Space is tight, such as a table row or a toolbar.
72
+ - The button has a name (`aria-label`) and a tooltip with the same words. See [Accessibility](/foundations/styles/icons/accessibility/).
73
+
74
+ <IconDemo kind="dodont" item="label" />
75
+
76
+ ## Selected state
77
+
78
+ **Lucide icons are outline only.** Show a selected item with `background.selected` and the indicator bar, not by filling the icon.
79
+
80
+ <IconDemo kind="dodont" item="selected" />
81
+
82
+ ## Common actions
83
+
84
+ **One icon per meaning.** Use this icon whenever you show one of these actions or objects, in every product. If a meaning is missing, ask before you choose one, so it is added here.
85
+
86
+ <IconDemo kind="actions" />
87
+
88
+ <IconDemo kind="dodont" item="meaning" />
89
+
90
+ ## Do and don’t
91
+
92
+ | Do | Don’t |
93
+ |---|---|
94
+ | Use 16, 20, 24 or 32 px. | Scale icons to other sizes. |
95
+ | Keep the icon in the text colour. | Colour icons to decorate. |
96
+ | Add a label to most icons. | Use an unfamiliar icon on its own. |
97
+ | Use the same icon for the same meaning. | Use a different icon in each product. |
98
+ | Use outline icons with a selected background. | Fill an icon to show it is selected. |
99
+ | Write the status next to a status icon. | Let an icon or its colour carry the status alone. |
100
+ | Use one icon per button. | Combine two icons into one action. |
@@ -0,0 +1,9 @@
1
+ ---
2
+ title: "Illustration"
3
+ description: "Diagrams, illustrations and images that explain Beehexa products."
4
+ order: 14
5
+ planned:
6
+ - "When to use a diagram, an illustration or a screenshot"
7
+ - "The diagram style from the brand guide: structured, built on the hexagon grid"
8
+ - "Empty states and onboarding images"
9
+ ---