@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.
- package/README.md +56 -2
- package/dist/AGENTS.md +24 -0
- package/dist/catalog.json +1814 -0
- package/dist/docs/public/_redirects +7 -0
- package/dist/docs/public/apple-touch-icon.png +0 -0
- package/dist/docs/public/brand/logos/app/apple-touch-icon.png +0 -0
- package/dist/docs/public/brand/logos/app/avatar-800.png +0 -0
- package/dist/docs/public/brand/logos/app/icon-192.png +0 -0
- package/dist/docs/public/brand/logos/app/icon-512.png +0 -0
- package/dist/docs/public/brand/logos/app/icon-maskable-512.png +0 -0
- package/dist/docs/public/brand/logos/archive/d-550/beehexa-horizontal-1-light.svg +1 -0
- package/dist/docs/public/brand/logos/archive/d-550/beehexa-horizontal-2-dark.svg +1 -0
- package/dist/docs/public/brand/logos/archive/d-550/beehexa-horizontal-3-white.svg +1 -0
- package/dist/docs/public/brand/logos/archive/d-550/beehexa-horizontal-4-graphite.svg +1 -0
- package/dist/docs/public/brand/logos/archive/d-550/hexasync-horizontal-1-light.svg +1 -0
- package/dist/docs/public/brand/logos/archive/d-550/hexasync-horizontal-2-dark.svg +1 -0
- package/dist/docs/public/brand/logos/archive/d-550/hexasync-horizontal-3-white.svg +1 -0
- package/dist/docs/public/brand/logos/archive/d-550/hexasync-horizontal-4-graphite.svg +1 -0
- package/dist/docs/public/brand/logos/archive/d-550/ui/beehexa-d-550-dark.svg +1 -0
- package/dist/docs/public/brand/logos/archive/d-550/ui/beehexa-d-550-light.svg +1 -0
- package/dist/docs/public/brand/logos/archive/d-550/ui/beehexa-design-d-550-dark.svg +1 -0
- package/dist/docs/public/brand/logos/archive/d-550/ui/beehexa-design-d-550-light.svg +1 -0
- package/dist/docs/public/brand/logos/archive/d-550/ui/hexasync-d-550-dark.svg +1 -0
- package/dist/docs/public/brand/logos/archive/d-550/ui/hexasync-d-550-light.svg +1 -0
- package/dist/docs/public/brand/logos/archive/d-550/ui/png/beehexa-design-d-550-dark@3x.png +0 -0
- package/dist/docs/public/brand/logos/archive/d-550/ui/png/beehexa-design-d-550-light@3x.png +0 -0
- package/dist/docs/public/brand/logos/beehexa-logo.zip +0 -0
- package/dist/docs/public/brand/logos/fig/anatomy-en.png +0 -0
- package/dist/docs/public/brand/logos/fig/anatomy-vi.png +0 -0
- package/dist/docs/public/brand/logos/fig/beehexa-dark-12.png +0 -0
- package/dist/docs/public/brand/logos/fig/beehexa-dark-14.png +0 -0
- package/dist/docs/public/brand/logos/fig/beehexa-dark-28.png +0 -0
- package/dist/docs/public/brand/logos/fig/beehexa-dark-32.png +0 -0
- package/dist/docs/public/brand/logos/fig/beehexa-dark-56.png +0 -0
- package/dist/docs/public/brand/logos/fig/beehexa-graphite-28.png +0 -0
- package/dist/docs/public/brand/logos/fig/beehexa-graphite-32.png +0 -0
- package/dist/docs/public/brand/logos/fig/beehexa-light-14.png +0 -0
- package/dist/docs/public/brand/logos/fig/beehexa-light-21.png +0 -0
- package/dist/docs/public/brand/logos/fig/beehexa-light-22.png +0 -0
- package/dist/docs/public/brand/logos/fig/beehexa-light-24.png +0 -0
- package/dist/docs/public/brand/logos/fig/beehexa-light-28.png +0 -0
- package/dist/docs/public/brand/logos/fig/beehexa-light-32.png +0 -0
- package/dist/docs/public/brand/logos/fig/beehexa-light-36-7c3aed7c3aed.png +0 -0
- package/dist/docs/public/brand/logos/fig/beehexa-light-36-swap.png +0 -0
- package/dist/docs/public/brand/logos/fig/beehexa-light-36.png +0 -0
- package/dist/docs/public/brand/logos/fig/beehexa-light-56.png +0 -0
- package/dist/docs/public/brand/logos/fig/beehexa-white-20.png +0 -0
- package/dist/docs/public/brand/logos/fig/beehexa-white-32.png +0 -0
- package/dist/docs/public/brand/logos/fig/clearspace.png +0 -0
- package/dist/docs/public/brand/logos/fig/construction-en.png +0 -0
- package/dist/docs/public/brand/logos/fig/construction-vi.png +0 -0
- package/dist/docs/public/brand/logos/fig/container-en.png +0 -0
- package/dist/docs/public/brand/logos/fig/container-vi.png +0 -0
- package/dist/docs/public/brand/logos/fig/hexasync-dark-20.png +0 -0
- package/dist/docs/public/brand/logos/fig/hexasync-dark-28.png +0 -0
- package/dist/docs/public/brand/logos/fig/hexasync-dark-48.png +0 -0
- package/dist/docs/public/brand/logos/fig/hexasync-light-19.png +0 -0
- package/dist/docs/public/brand/logos/fig/hexasync-light-28.png +0 -0
- package/dist/docs/public/brand/logos/fig/hexasync-light-48.png +0 -0
- package/dist/docs/public/brand/logos/fig/icon-graphite-14.png +0 -0
- package/dist/docs/public/brand/logos/fig/icon-graphite-16.png +0 -0
- package/dist/docs/public/brand/logos/fig/icon-light-16.png +0 -0
- package/dist/docs/public/brand/logos/fig/icon-light-24.png +0 -0
- package/dist/docs/public/brand/logos/fig/icon-light-48.png +0 -0
- package/dist/docs/public/brand/logos/fig/icon-light-92.png +0 -0
- package/dist/docs/public/brand/logos/fig/meaning-bee-en.png +0 -0
- package/dist/docs/public/brand/logos/fig/meaning-bee-vi.png +0 -0
- package/dist/docs/public/brand/logos/fig/meaning-outline-en.png +0 -0
- package/dist/docs/public/brand/logos/fig/meaning-outline-vi.png +0 -0
- package/dist/docs/public/brand/logos/fig/meaning-stack-en.png +0 -0
- package/dist/docs/public/brand/logos/fig/meaning-stack-vi.png +0 -0
- package/dist/docs/public/brand/logos/fig/misuse-serif.png +0 -0
- package/dist/docs/public/brand/logos/icon/beehexa-icon-graphite.svg +1 -0
- package/dist/docs/public/brand/logos/icon/beehexa-icon-white.svg +1 -0
- package/dist/docs/public/brand/logos/icon/beehexa-icon-yellow.svg +1 -0
- package/dist/docs/public/brand/logos/lockups/beehexa-horizontal-1-light.svg +1 -0
- package/dist/docs/public/brand/logos/lockups/beehexa-horizontal-2-dark.svg +1 -0
- package/dist/docs/public/brand/logos/lockups/beehexa-horizontal-3-white.svg +1 -0
- package/dist/docs/public/brand/logos/lockups/beehexa-horizontal-4-graphite.svg +1 -0
- package/dist/docs/public/brand/logos/lockups/hexasync-horizontal-1-light.svg +1 -0
- package/dist/docs/public/brand/logos/lockups/hexasync-horizontal-2-dark.svg +1 -0
- package/dist/docs/public/brand/logos/lockups/hexasync-horizontal-3-white.svg +1 -0
- package/dist/docs/public/brand/logos/lockups/hexasync-horizontal-4-graphite.svg +1 -0
- package/dist/docs/public/brand/logos/ui/beehexa-dark.svg +1 -0
- package/dist/docs/public/brand/logos/ui/beehexa-design-dark.svg +1 -0
- package/dist/docs/public/brand/logos/ui/beehexa-design-light.svg +1 -0
- package/dist/docs/public/brand/logos/ui/beehexa-icon-yellow.svg +1 -0
- package/dist/docs/public/brand/logos/ui/beehexa-light.svg +1 -0
- package/dist/docs/public/brand/logos/ui/hexasync-dark.svg +1 -0
- package/dist/docs/public/brand/logos/ui/hexasync-light.svg +1 -0
- package/dist/docs/public/brand/logos/ui/png/beehexa-design-dark@3x.png +0 -0
- package/dist/docs/public/brand/logos/ui/png/beehexa-design-light@3x.png +0 -0
- package/dist/docs/public/favicon.ico +0 -0
- package/dist/docs/public/favicon.svg +1 -0
- package/dist/docs/public/fonts/LICENSE-Inter.txt +93 -0
- package/dist/docs/public/fonts/LICENSE-JetBrainsMono.txt +93 -0
- package/dist/docs/public/fonts/inter-latin-ext-opsz-wght-italic.woff2 +0 -0
- package/dist/docs/public/fonts/inter-latin-ext-opsz-wght-normal.woff2 +0 -0
- package/dist/docs/public/fonts/inter-latin-opsz-wght-italic.woff2 +0 -0
- package/dist/docs/public/fonts/inter-latin-opsz-wght-normal.woff2 +0 -0
- package/dist/docs/public/fonts/inter-vietnamese-opsz-wght-italic.woff2 +0 -0
- package/dist/docs/public/fonts/inter-vietnamese-opsz-wght-normal.woff2 +0 -0
- package/dist/docs/public/fonts/jetbrains-mono-latin-ext-wght-normal.woff2 +0 -0
- package/dist/docs/public/fonts/jetbrains-mono-latin-wght-normal.woff2 +0 -0
- package/dist/docs/public/fonts/jetbrains-mono-vietnamese-wght-normal.woff2 +0 -0
- package/dist/docs/public/icon-192.png +0 -0
- package/dist/docs/public/icon-512.png +0 -0
- package/dist/docs/public/icon-maskable-512.png +0 -0
- package/dist/docs/public/robots.txt +4 -0
- package/dist/docs/public/site.webmanifest +21 -0
- package/dist/docs/scripts/color-pairs.mjs +46 -0
- package/dist/docs/scripts/contrast-exceptions.mjs +6 -0
- package/dist/docs/scripts/token-utils.d.mts +26 -0
- package/dist/docs/scripts/token-utils.mjs +114 -0
- package/dist/docs/src/brand/Beehexa-brandguide-full-mar12.pdf +0 -0
- package/dist/docs/src/brand/color+typoDirections.pdf +0 -0
- package/dist/docs/src/brand/structure-proposal.md +227 -0
- package/dist/docs/src/components/ChildPages.astro +25 -0
- package/dist/docs/src/components/CodeExample.astro +18 -0
- package/dist/docs/src/components/ColorDemo.astro +794 -0
- package/dist/docs/src/components/ColorExample.astro +32 -0
- package/dist/docs/src/components/ColorSwatch.astro +20 -0
- package/dist/docs/src/components/ComponentTabs.astro +21 -0
- package/dist/docs/src/components/DocsFooter.astro +25 -0
- package/dist/docs/src/components/HelpOptions.astro +20 -0
- package/dist/docs/src/components/IconBrowser.astro +257 -0
- package/dist/docs/src/components/IconDemo.astro +185 -0
- package/dist/docs/src/components/InDevelopment.astro +29 -0
- package/dist/docs/src/components/LayoutDemo.astro +384 -0
- package/dist/docs/src/components/Logo.astro +25 -0
- package/dist/docs/src/components/PhaseTable.astro +22 -0
- package/dist/docs/src/components/RoleGuides.astro +48 -0
- package/dist/docs/src/components/ShapeDemo.astro +239 -0
- package/dist/docs/src/components/ShapePin.astro +22 -0
- package/dist/docs/src/components/Sidebar.astro +206 -0
- package/dist/docs/src/components/SiteHeader.astro +211 -0
- package/dist/docs/src/components/SpacingDemo.astro +172 -0
- package/dist/docs/src/components/StatusBadge.astro +22 -0
- package/dist/docs/src/components/SystemAreas.astro +29 -0
- package/dist/docs/src/components/TableOfContents.astro +47 -0
- package/dist/docs/src/components/TokenTable.astro +40 -0
- package/dist/docs/src/components/TypeDemo.astro +249 -0
- package/dist/docs/src/components/logos/Fig.astro +28 -0
- package/dist/docs/src/components/logos/LogoAnatomy.astro +101 -0
- package/dist/docs/src/components/logos/LogoClearSpace.astro +81 -0
- package/dist/docs/src/components/logos/LogoColourVersions.astro +45 -0
- package/dist/docs/src/components/logos/LogoConstruction.astro +84 -0
- package/dist/docs/src/components/logos/LogoContainer.astro +84 -0
- package/dist/docs/src/components/logos/LogoHero.astro +42 -0
- package/dist/docs/src/components/logos/LogoInUse.astro +197 -0
- package/dist/docs/src/components/logos/LogoMeanings.astro +75 -0
- package/dist/docs/src/components/logos/LogoMinSize.astro +55 -0
- package/dist/docs/src/components/logos/LogoMistakes.astro +109 -0
- package/dist/docs/src/components/logos/LogoMisuse.astro +96 -0
- package/dist/docs/src/components/logos/LogoPair.astro +26 -0
- package/dist/docs/src/components/logos/LogoSvg.astro +68 -0
- package/dist/docs/src/content/components/button/accessibility.mdx +18 -0
- package/dist/docs/src/content/components/button/changelog.mdx +6 -0
- package/dist/docs/src/content/components/button/code.mdx +27 -0
- package/dist/docs/src/content/components/button/examples.mdx +21 -0
- package/dist/docs/src/content/components/button/meta.json +5 -0
- package/dist/docs/src/content/components/button/usage.mdx +18 -0
- package/dist/docs/src/content/foundations/guidelines/accessibility.mdx +19 -0
- package/dist/docs/src/content/foundations/guidelines/content.mdx +25 -0
- package/dist/docs/src/content/foundations/index.mdx +9 -0
- package/dist/docs/src/content/foundations/styles/border.mdx +89 -0
- package/dist/docs/src/content/foundations/styles/color/accessibility.mdx +32 -0
- package/dist/docs/src/content/foundations/styles/color/dark-mode.mdx +22 -0
- package/dist/docs/src/content/foundations/styles/color/index.mdx +65 -0
- package/dist/docs/src/content/foundations/styles/color/palette.mdx +57 -0
- package/dist/docs/src/content/foundations/styles/color/tokens.mdx +55 -0
- package/dist/docs/src/content/foundations/styles/color/usage.mdx +111 -0
- package/dist/docs/src/content/foundations/styles/data-visualization.mdx +11 -0
- package/dist/docs/src/content/foundations/styles/elevation.mdx +12 -0
- package/dist/docs/src/content/foundations/styles/icons/accessibility.mdx +72 -0
- package/dist/docs/src/content/foundations/styles/icons/code.mdx +171 -0
- package/dist/docs/src/content/foundations/styles/icons/index.mdx +62 -0
- package/dist/docs/src/content/foundations/styles/icons/library.mdx +19 -0
- package/dist/docs/src/content/foundations/styles/icons/usage.mdx +100 -0
- package/dist/docs/src/content/foundations/styles/illustration.mdx +9 -0
- package/dist/docs/src/content/foundations/styles/interaction-states.mdx +49 -0
- package/dist/docs/src/content/foundations/styles/layout/app-frame.mdx +81 -0
- package/dist/docs/src/content/foundations/styles/layout/breakpoints.mdx +56 -0
- package/dist/docs/src/content/foundations/styles/layout/grid.mdx +87 -0
- package/dist/docs/src/content/foundations/styles/layout/index.mdx +24 -0
- package/dist/docs/src/content/foundations/styles/layout/overlays.mdx +45 -0
- package/dist/docs/src/content/foundations/styles/layout/page-widths.mdx +38 -0
- package/dist/docs/src/content/foundations/styles/logos/downloads-and-terms.mdx +65 -0
- package/dist/docs/src/content/foundations/styles/logos/index.mdx +64 -0
- package/dist/docs/src/content/foundations/styles/logos/placement-and-containers.mdx +96 -0
- package/dist/docs/src/content/foundations/styles/logos/product-logos.mdx +56 -0
- package/dist/docs/src/content/foundations/styles/logos/using-the-logo.mdx +70 -0
- package/dist/docs/src/content/foundations/styles/motion.mdx +11 -0
- package/dist/docs/src/content/foundations/styles/opacity.mdx +9 -0
- package/dist/docs/src/content/foundations/styles/radius.mdx +98 -0
- package/dist/docs/src/content/foundations/styles/size-and-density.mdx +41 -0
- package/dist/docs/src/content/foundations/styles/spacing.mdx +70 -0
- package/dist/docs/src/content/foundations/styles/typography/code.mdx +53 -0
- package/dist/docs/src/content/foundations/styles/typography/index.mdx +58 -0
- package/dist/docs/src/content/foundations/styles/typography/usage.mdx +144 -0
- package/dist/docs/src/content/foundations/styles/typography/vietnamese.mdx +46 -0
- package/dist/docs/src/content/foundations/styles/z-index.mdx +9 -0
- package/dist/docs/src/content/foundations/tokens/all-tokens.mdx +36 -0
- package/dist/docs/src/content/foundations/tokens/index.mdx +27 -0
- package/dist/docs/src/content/get-started/content.mdx +14 -0
- package/dist/docs/src/content/get-started/design.mdx +30 -0
- package/dist/docs/src/content/get-started/develop.mdx +59 -0
- package/dist/docs/src/content/get-started/get-help.mdx +19 -0
- package/dist/docs/src/content/get-started/index.mdx +50 -0
- package/dist/docs/src/content/news/2026-10-16-site-structure.md +15 -0
- package/dist/docs/src/content/news/2026-10-20-docs-site.md +13 -0
- package/dist/docs/src/content/release-phases/index.mdx +12 -0
- package/dist/docs/src/content/tools/ai-agents.mdx +49 -0
- package/dist/docs/src/content/tools/ant-design-vue-theme.mdx +138 -0
- package/dist/docs/src/content/tools/eslint.mdx +15 -0
- package/dist/docs/src/content/tools/index.mdx +7 -0
- package/dist/docs/src/content/tools/stylelint.mdx +19 -0
- package/dist/docs/src/content-vi/foundations/styles/border.mdx +89 -0
- package/dist/docs/src/content-vi/foundations/styles/color/accessibility.mdx +32 -0
- package/dist/docs/src/content-vi/foundations/styles/color/dark-mode.mdx +22 -0
- package/dist/docs/src/content-vi/foundations/styles/color/index.mdx +65 -0
- package/dist/docs/src/content-vi/foundations/styles/color/palette.mdx +57 -0
- package/dist/docs/src/content-vi/foundations/styles/color/tokens.mdx +55 -0
- package/dist/docs/src/content-vi/foundations/styles/color/usage.mdx +111 -0
- package/dist/docs/src/content-vi/foundations/styles/data-visualization.mdx +11 -0
- package/dist/docs/src/content-vi/foundations/styles/icons/accessibility.mdx +72 -0
- package/dist/docs/src/content-vi/foundations/styles/icons/code.mdx +170 -0
- package/dist/docs/src/content-vi/foundations/styles/icons/index.mdx +62 -0
- package/dist/docs/src/content-vi/foundations/styles/icons/library.mdx +19 -0
- package/dist/docs/src/content-vi/foundations/styles/icons/usage.mdx +100 -0
- package/dist/docs/src/content-vi/foundations/styles/illustration.mdx +9 -0
- package/dist/docs/src/content-vi/foundations/styles/interaction-states.mdx +49 -0
- package/dist/docs/src/content-vi/foundations/styles/layout/app-frame.mdx +77 -0
- package/dist/docs/src/content-vi/foundations/styles/layout/breakpoints.mdx +56 -0
- package/dist/docs/src/content-vi/foundations/styles/layout/grid.mdx +87 -0
- package/dist/docs/src/content-vi/foundations/styles/layout/index.mdx +24 -0
- package/dist/docs/src/content-vi/foundations/styles/layout/page-widths.mdx +34 -0
- package/dist/docs/src/content-vi/foundations/styles/logos/downloads-and-terms.mdx +65 -0
- package/dist/docs/src/content-vi/foundations/styles/logos/index.mdx +64 -0
- package/dist/docs/src/content-vi/foundations/styles/logos/placement-and-containers.mdx +96 -0
- package/dist/docs/src/content-vi/foundations/styles/logos/product-logos.mdx +56 -0
- package/dist/docs/src/content-vi/foundations/styles/logos/using-the-logo.mdx +70 -0
- package/dist/docs/src/content-vi/foundations/styles/opacity.mdx +9 -0
- package/dist/docs/src/content-vi/foundations/styles/radius.mdx +98 -0
- package/dist/docs/src/content-vi/foundations/styles/size-and-density.mdx +41 -0
- package/dist/docs/src/content-vi/foundations/styles/spacing.mdx +70 -0
- package/dist/docs/src/content-vi/foundations/styles/typography/code.mdx +53 -0
- package/dist/docs/src/content-vi/foundations/styles/typography/index.mdx +58 -0
- package/dist/docs/src/content-vi/foundations/styles/typography/usage.mdx +144 -0
- package/dist/docs/src/content-vi/foundations/styles/typography/vietnamese.mdx +46 -0
- package/dist/docs/src/content-vi/foundations/styles/z-index.mdx +9 -0
- package/dist/docs/src/content.config.ts +68 -0
- package/dist/docs/src/lib/brand.ts +57 -0
- package/dist/docs/src/lib/contrast.ts +34 -0
- package/dist/docs/src/lib/i18n.ts +152 -0
- package/dist/docs/src/lib/icons.ts +46 -0
- package/dist/docs/src/lib/logo-geometry.ts +30 -0
- package/dist/docs/src/lib/lucide-categories.json +1 -0
- package/dist/docs/src/lib/lucide-data.ts +40 -0
- package/dist/docs/src/lib/navigation.ts +222 -0
- package/dist/docs/src/lib/release-phases.ts +10 -0
- package/dist/docs/src/lib/routes.ts +40 -0
- package/dist/docs/src/lib/token-descriptions-vi.ts +40 -0
- package/dist/docs/src/lib/tokens.ts +67 -0
- package/dist/docs/src/lib/tri-grid.ts +28 -0
- package/dist/docs/src/styles/chrome.css +122 -0
- package/dist/docs/src/styles/color.css +270 -0
- package/dist/docs/src/styles/docs.css +323 -0
- package/dist/docs/src/styles/global.css +66 -0
- package/dist/docs/src/styles/icons.css +135 -0
- package/dist/docs/src/styles/layout.css +165 -0
- package/dist/docs/src/styles/logos.css +236 -0
- package/dist/docs/src/styles/shapes.css +139 -0
- package/dist/docs/src/styles/tokens.css +461 -0
- package/dist/docs/src/styles/tokens.js +425 -0
- package/dist/docs/src/styles/typography.css +91 -0
- package/dist/docs/tokens/border.json +26 -0
- package/dist/docs/tokens/breakpoints.json +8 -0
- package/dist/docs/tokens/color.json +1350 -0
- package/dist/docs/tokens/elevation.json +26 -0
- package/dist/docs/tokens/layout.json +29 -0
- package/dist/docs/tokens/motion.json +12 -0
- package/dist/docs/tokens/radius.json +44 -0
- package/dist/docs/tokens/size.json +13 -0
- package/dist/docs/tokens/spacing.json +18 -0
- package/dist/docs/tokens/states.json +12 -0
- package/dist/docs/tokens/typography.json +220 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.js +1823 -0
- package/package.json +31 -4
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Giao diện tối
|
|
3
|
+
description: Giao diện tối hoạt động thế nào, những gì thay đổi và những điều không bao giờ làm ở giao diện tối.
|
|
4
|
+
order: 5
|
|
5
|
+
---
|
|
6
|
+
import ColorDemo from '../../../../components/ColorDemo.astro';
|
|
7
|
+
|
|
8
|
+
**Viết mỗi token một lần; giao diện sẽ đổi giá trị.**
|
|
9
|
+
|
|
10
|
+
<ColorDemo kind="themes" />
|
|
11
|
+
|
|
12
|
+
## Cách hoạt động
|
|
13
|
+
|
|
14
|
+
Mỗi token màu có một giá trị sáng và một giá trị tối dưới cùng tên. Giao diện chọn giá trị; code và thiết kế của bạn chỉ gọi tên token một lần. Giá trị tối của mọi bậc trong bảng màu có ở trang [Bảng màu](/vi/foundations/styles/color/palette/), của mọi role token có ở trang [Token](/vi/foundations/styles/color/tokens/).
|
|
15
|
+
|
|
16
|
+
## Thiết kế cho giao diện tối
|
|
17
|
+
|
|
18
|
+
- Không tự đặt màu tối riêng, không chọn màu theo giao diện trong code.
|
|
19
|
+
- Bề mặt càng nổi lên càng sáng: nền trang tối nhất, card sáng hơn một bậc.
|
|
20
|
+
- Nút chính chuyển sang màu sáng, và các nền đặc của trạng thái sáng lên với chữ tối bên trên.
|
|
21
|
+
- Kiểm tra mọi màn hình ở cả hai giao diện trước khi phát hành.
|
|
22
|
+
- Logo dùng bản dành cho nền tối (xem [Logo](/vi/foundations/styles/logos/)).
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Màu sắc
|
|
3
|
+
description: Ba màu thương hiệu và một bộ token màu, mỗi token một việc, cho chữ, icon, bề mặt, nền, viền và trạng thái, ở cả giao diện sáng và tối.
|
|
4
|
+
order: 1
|
|
5
|
+
sidebarLabel: Tổng quan
|
|
6
|
+
---
|
|
7
|
+
import ColorDemo from '../../../../components/ColorDemo.astro';
|
|
8
|
+
|
|
9
|
+
Màu trong sản phẩm Beehexa chủ yếu là xám ghi và trắng. Màu vàng đánh dấu thương hiệu, bốn màu chức năng đánh dấu trạng thái. Bạn không bao giờ chọn màu theo mã màu. Bạn chọn token theo việc nó làm, như `color.text` hay `color.background.danger.bold`, và token đó đúng ở cả giao diện sáng lẫn tối.
|
|
10
|
+
|
|
11
|
+
<ColorDemo kind="balance" />
|
|
12
|
+
|
|
13
|
+
## Màu thương hiệu
|
|
14
|
+
|
|
15
|
+
<ColorDemo kind="brand" />
|
|
16
|
+
|
|
17
|
+
## Bảng màu
|
|
18
|
+
|
|
19
|
+
Sáu thang màu, mỗi thang mười hai bậc, cho giao diện sáng và tối. Màu xám ghi thương hiệu là bậc graphite 12 ở giao diện sáng. Màu vàng thương hiệu là bậc yellow 7 ở giao diện sáng và yellow 11 ở giao diện tối. Xem mọi giá trị ở trang [Bảng màu](/vi/foundations/styles/color/palette/).
|
|
20
|
+
|
|
21
|
+
<ColorDemo kind="ramps" />
|
|
22
|
+
|
|
23
|
+
## Màu hoạt động thế nào
|
|
24
|
+
|
|
25
|
+
Màu chia làm ba tầng. Bạn chỉ dùng tầng giữa.
|
|
26
|
+
|
|
27
|
+
| Tầng | Ví dụ | Ai dùng |
|
|
28
|
+
|---|---|---|
|
|
29
|
+
| Bảng màu | `color.graphite.11` | Không ai dùng trực tiếp. Tầng này cấp giá trị cho role token. |
|
|
30
|
+
| Role token | `color.text.subtle` | Mọi sản phẩm và component. |
|
|
31
|
+
| Component token | `color.code.background` | Chỉ khi không có role token nào phù hợp. |
|
|
32
|
+
|
|
33
|
+
Role token là token đặt tên theo vai trò của màu. Danh sách role token ở trang [Token](/vi/foundations/styles/color/tokens/). Cách chọn token ở trang [Cách dùng](/vi/foundations/styles/color/usage/).
|
|
34
|
+
|
|
35
|
+
## Nguyên tắc
|
|
36
|
+
|
|
37
|
+
### Xám ghi làm phần việc chính, vàng là điểm nhấn
|
|
38
|
+
|
|
39
|
+
Chữ, icon, đường kẻ và nút chính đều màu xám ghi. Màu vàng chỉ dùng cho logo, vạch chỉ trang hiện tại, phần tô nổi bật và ghi chú thương hiệu. Màu vàng không bao giờ dùng cho chữ hay nút: trên nền trắng nó chỉ đạt 1.85:1.
|
|
40
|
+
|
|
41
|
+
<ColorDemo kind="dodont" item="yellow" />
|
|
42
|
+
|
|
43
|
+
### Màu phải có nghĩa
|
|
44
|
+
|
|
45
|
+
Đỏ, cam, xanh lá và xanh dương nghĩa là nguy hiểm, cảnh báo, thành công và thông tin. Không dùng chúng để trang trí hay để gây chú ý.
|
|
46
|
+
|
|
47
|
+
<ColorDemo kind="dodont" item="meaning" />
|
|
48
|
+
|
|
49
|
+
### Không chỉ dựa vào màu
|
|
50
|
+
|
|
51
|
+
Ghi trạng thái bằng chữ và thêm icon. Đánh dấu mục được chọn bằng một dấu hiệu thứ hai ngoài màu. Người mù màu và người dùng trình đọc màn hình không nhận được thông tin từ màu.
|
|
52
|
+
|
|
53
|
+
<ColorDemo kind="dodont" item="alone" />
|
|
54
|
+
|
|
55
|
+
### Dùng đúng token cho đúng việc
|
|
56
|
+
|
|
57
|
+
Chỉ dùng role token. Không dùng mã hex, không dùng một bậc của thang màu như `color.graphite.11`. Nếu không có token phù hợp, hãy đề nghị thêm token mới.
|
|
58
|
+
|
|
59
|
+
<ColorDemo kind="dodont" item="tokens" />
|
|
60
|
+
|
|
61
|
+
### Mỗi màn hình một nút chính
|
|
62
|
+
|
|
63
|
+
Nút chính màu xám ghi. Mọi nút khác là nút mặc định. Không có nút màu vàng.
|
|
64
|
+
|
|
65
|
+
<ColorDemo kind="dodont" item="primary" />
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Bảng màu
|
|
3
|
+
description: Mọi màu trong hệ thống, gồm sáu thang màu mười hai bậc ở giao diện sáng và tối, công dụng của từng thang, từng bậc và độ tương phản mỗi bậc bảo đảm.
|
|
4
|
+
order: 3
|
|
5
|
+
---
|
|
6
|
+
import ColorDemo from '../../../../components/ColorDemo.astro';
|
|
7
|
+
|
|
8
|
+
**Bảng màu cấp giá trị cho role token. Sản phẩm dùng role token, không bao giờ dùng trực tiếp một bậc của bảng màu.**
|
|
9
|
+
|
|
10
|
+
Sáu thang màu, mỗi thang mười hai bậc. Rê chuột lên một ô màu để xem tên token.
|
|
11
|
+
|
|
12
|
+
<ColorDemo kind="palette" />
|
|
13
|
+
|
|
14
|
+
## Công dụng của từng thang
|
|
15
|
+
|
|
16
|
+
| Thang | Dùng cho | Không dùng cho |
|
|
17
|
+
|---|---|---|
|
|
18
|
+
| Graphite | Mọi thứ không mang nghĩa riêng: chữ, icon, đường kẻ, bề mặt, nút chính | — |
|
|
19
|
+
| Yellow | Thương hiệu: logo, vạch chỉ trang hiện tại, phần tô nổi bật, ghi chú thương hiệu | Chữ, nút, cảnh báo |
|
|
20
|
+
| Blue | Thông tin, link, viền focus | Trang trí |
|
|
21
|
+
| Green | Thành công | Mọi việc khác |
|
|
22
|
+
| Orange | Cảnh báo | Mọi việc khác |
|
|
23
|
+
| Red | Nguy hiểm | Mọi việc khác |
|
|
24
|
+
|
|
25
|
+
Không có tím, hồng hay xanh ngọc. Biểu đồ chưa có bảng màu riêng: hãy hỏi trước khi tô màu cho biểu đồ.
|
|
26
|
+
|
|
27
|
+
## Công dụng của từng bậc
|
|
28
|
+
|
|
29
|
+
**Mỗi bậc có một việc, giống nhau ở mọi thang.**
|
|
30
|
+
|
|
31
|
+
<ColorDemo kind="steps" />
|
|
32
|
+
|
|
33
|
+
- **Bậc 1–2:** nền trang và nền bề mặt.
|
|
34
|
+
- **Bậc 3–5:** nền component khi nghỉ, khi hover và khi nhấn hoặc được chọn.
|
|
35
|
+
- **Bậc 6–8:** viền và đường phân cách, từ nhạt tới đậm.
|
|
36
|
+
- **Bậc 9–10:** nền đặc, như nền của nút, và màu hover của chúng.
|
|
37
|
+
- **Bậc 11–12:** chữ và icon. 11 là chữ phụ, 12 là chữ mặc định.
|
|
38
|
+
|
|
39
|
+
Graphite là màu của chữ trung tính, nên đầu tối của thang có ba mức chữ thay vì hai: 12 mặc định, 11 chữ phụ, 10 chữ mức ba. Bậc 9 là viền của control và bậc 8 là chữ bị vô hiệu hoá.
|
|
40
|
+
|
|
41
|
+
Yellow là ngoại lệ duy nhất: nền thương hiệu của nó là bậc 7, chính là màu vàng thương hiệu, với chữ graphite bên trên. Sản phẩm không dùng màu vàng cho nền khác hay cho chữ.
|
|
42
|
+
|
|
43
|
+
## Sáng và tối
|
|
44
|
+
|
|
45
|
+
**Mỗi bậc có một giá trị sáng và một giá trị tối dưới cùng một tên.**
|
|
46
|
+
|
|
47
|
+
`color.graphite.12` là màu chữ ở cả hai giao diện. Role token tự đổi theo giao diện, nên màn hình không bao giờ phải tự chọn màu tối. Ở giao diện tối, nền đặc (bậc 9 và 10) sáng hơn ở giao diện sáng, nên chữ trên đó là chữ tối: dùng `text.on-bold`.
|
|
48
|
+
|
|
49
|
+
## Độ tương phản được bảo đảm
|
|
50
|
+
|
|
51
|
+
Ở cả hai giao diện:
|
|
52
|
+
|
|
53
|
+
- Ở blue, green, orange và red, chữ trên nền đặc (bậc 9 và 10) đạt 4.5:1 với `text.on-bold`: trắng ở giao diện sáng, tối ở giao diện tối.
|
|
54
|
+
- Chữ bậc 11 đạt 4.5:1 trên mọi nền nó được ghép cặp.
|
|
55
|
+
- Ở graphite, bậc 10, 11 và 12 đều đạt 4.5:1 khi làm chữ; bậc 9 đạt 3:1 khi làm viền của control.
|
|
56
|
+
|
|
57
|
+
Xem các cặp màu ở trang [Khả năng tiếp cận](/foundations/styles/color/accessibility/).
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Token
|
|
3
|
+
description: Cách đặt tên token màu, mọi role token với giá trị ở giao diện sáng và tối, cách dùng trong code và cách đề nghị thêm token mới.
|
|
4
|
+
order: 4
|
|
5
|
+
---
|
|
6
|
+
import ColorDemo from '../../../../components/ColorDemo.astro';
|
|
7
|
+
|
|
8
|
+
**Tên mỗi token màu cho biết nó tô cái gì, mang nghĩa gì, đậm nhạt ra sao và đang ở trạng thái nào.**
|
|
9
|
+
|
|
10
|
+
## Cách đặt tên
|
|
11
|
+
|
|
12
|
+
`color.{property}.{role}.{emphasis}.{state}`. Phần nào là mặc định thì bỏ đi.
|
|
13
|
+
|
|
14
|
+
<ColorDemo kind="anatomy" />
|
|
15
|
+
|
|
16
|
+
| Phần | Giá trị |
|
|
17
|
+
|---|---|
|
|
18
|
+
| Property (thứ được tô) | `text`, `icon`, `link`, `surface`, `background`, `border`, `skeleton` |
|
|
19
|
+
| Role (vai trò) | `neutral` (bỏ đi), `brand`, `danger`, `warning`, `success`, `info`, `inverse`, `disabled`; với surface: `page`, `subtle`, `inverse`, `scrim` |
|
|
20
|
+
| Emphasis (mức nhấn) | Chữ: mặc định, `subtle`, `subtlest`. Nền: `subtle`, mặc định, `bold`. Viền: mặc định, `bold` |
|
|
21
|
+
| State (trạng thái) | `hover`, `pressed`, `selected`, `focus` |
|
|
22
|
+
|
|
23
|
+
`color.background.danger.bold.hover` là nền đặc màu nguy hiểm khi hover. Có hai tên gọi theo nền nằm dưới chữ thay vì theo vai trò: `text.on-bold` (trên mọi nền đặc của trạng thái) và `text.on-brand` (trên màu vàng thương hiệu).
|
|
24
|
+
|
|
25
|
+
Trong CSS, viết `--bh-` rồi đến tên token, thay dấu chấm bằng dấu gạch ngang: `color.text.subtle` là `var(--bh-color-text-subtle)`.
|
|
26
|
+
|
|
27
|
+
Hãy dùng role token. [Bảng màu](/vi/foundations/styles/color/palette/) cấp giá trị cho role token và không bao giờ được dùng trực tiếp (xem [Màu hoạt động thế nào](/vi/foundations/styles/color/#màu-hoạt-động-thế-nào)).
|
|
28
|
+
|
|
29
|
+
## Chữ và icon
|
|
30
|
+
|
|
31
|
+
<ColorDemo kind="roles" group="text" />
|
|
32
|
+
|
|
33
|
+
<ColorDemo kind="roles" group="icon" />
|
|
34
|
+
|
|
35
|
+
## Bề mặt
|
|
36
|
+
|
|
37
|
+
<ColorDemo kind="roles" group="surface" />
|
|
38
|
+
|
|
39
|
+
## Nền
|
|
40
|
+
|
|
41
|
+
<ColorDemo kind="roles" group="background" />
|
|
42
|
+
|
|
43
|
+
## Viền
|
|
44
|
+
|
|
45
|
+
<ColorDemo kind="roles" group="border" />
|
|
46
|
+
|
|
47
|
+
## Thiếu token
|
|
48
|
+
|
|
49
|
+
1. Xem bảng [Tìm token](/vi/foundations/styles/color/usage/#tìm-token) và danh sách bên dưới.
|
|
50
|
+
2. Hỏi đội design system. Cho biết bạn cần token ở đâu, và đề xuất một tên ghép từ bốn phần, trỏ tới một bậc có đúng công dụng (nền ở bậc 3, viền ở bậc 7, chữ ở bậc 11).
|
|
51
|
+
3. Đội sẽ kiểm tra độ tương phản ở cả hai giao diện rồi thêm token. Chỉ dùng token sau khi nó được phát hành.
|
|
52
|
+
|
|
53
|
+
## Mọi token màu
|
|
54
|
+
|
|
55
|
+
<ColorDemo kind="tokens" />
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Cách dùng
|
|
3
|
+
description: Dùng token nào cho từng phần của màn hình, cách tô màu trạng thái, mức nhấn và trạng thái tương tác, và những điều không được làm.
|
|
4
|
+
order: 2
|
|
5
|
+
---
|
|
6
|
+
import ColorDemo from '../../../../components/ColorDemo.astro';
|
|
7
|
+
|
|
8
|
+
**Chọn token theo thứ bạn đang tô và ý nghĩa của nó, không chọn theo vẻ ngoài.**
|
|
9
|
+
|
|
10
|
+
<ColorDemo kind="example" />
|
|
11
|
+
|
|
12
|
+
## Tìm token
|
|
13
|
+
|
|
14
|
+
| Tôi cần | Dùng |
|
|
15
|
+
|---|---|
|
|
16
|
+
| Nền trang | `surface.page` |
|
|
17
|
+
| Card, panel, dialog | `surface`, viền `border` |
|
|
18
|
+
| Sidebar, header của bảng, vùng nền nhạt | `surface.subtle` |
|
|
19
|
+
| Chữ nội dung, tiêu đề, nhãn | `text` |
|
|
20
|
+
| Mô tả, cột phụ của bảng, điều hướng | `text.subtle` |
|
|
21
|
+
| Metadata, mốc thời gian, chữ hướng dẫn, breadcrumb | `text.subtlest` |
|
|
22
|
+
| Placeholder | `text.subtlest` |
|
|
23
|
+
| Link | `link`; khi hover `link.hover` |
|
|
24
|
+
| Icon cạnh chữ | `icon`; icon ít quan trọng hơn `icon.subtle` |
|
|
25
|
+
| Đường phân cách, viền card | `border` |
|
|
26
|
+
| Viền của ô nhập, checkbox hoặc select | `border.bold` |
|
|
27
|
+
| Viền focus khi dùng bàn phím | `border.focus`, dày 2 px, cách 2 px |
|
|
28
|
+
| Nút chính | `background.neutral.bold`, `text.inverse` |
|
|
29
|
+
| Nút mặc định | `surface`, `border`, `text`; khi hover `background.neutral.subtle.hover` |
|
|
30
|
+
| Nút cho hành động xoá, huỷ | `background.danger.bold`, `text.on-bold` |
|
|
31
|
+
| Dòng hoặc mục menu khi hover | `background.neutral.subtle.hover` |
|
|
32
|
+
| Dòng, tab hoặc mục menu được chọn | `background.selected` và một dấu hiệu thứ hai |
|
|
33
|
+
| Trang hiện tại trong thanh điều hướng | Vạch `border.selected`, `background.selected`, `aria-current="page"` |
|
|
34
|
+
| Lỗi dưới một trường nhập | `text.danger`, `icon.danger` |
|
|
35
|
+
| Banner báo trạng thái | `background.{role}.subtle`, `border.{role}.subtle`, `text`, `icon.{role}` |
|
|
36
|
+
| Trạng thái trong một dòng của bảng | Một [nhãn](#nhãn) |
|
|
37
|
+
| Tooltip, toast | `surface.inverse`, `text.inverse` |
|
|
38
|
+
| Lớp phủ sau dialog hoặc drawer | `surface.scrim` |
|
|
39
|
+
| Khung chờ khi đang tải | `skeleton`, vệt sáng `skeleton.subtle` |
|
|
40
|
+
| Khối code | `code.background`, `code.text` |
|
|
41
|
+
| Ghi chú thương hiệu | `background.brand.subtle`, `border.brand.subtle` |
|
|
42
|
+
| Control bị vô hiệu | `background.disabled`, `text.disabled`, `border.disabled` |
|
|
43
|
+
|
|
44
|
+
Không có trong bảng? Ghép tên từ bốn phần của nó (xem [Token](/vi/foundations/styles/color/tokens/)). Nếu chưa có token, hãy đề nghị thêm. Không chọn màu gần giống.
|
|
45
|
+
|
|
46
|
+
## Bề mặt và nền
|
|
47
|
+
|
|
48
|
+
**Bề mặt (surface) là các lớp của màn hình. Nền (background) tô cho những thứ nằm trên đó.**
|
|
49
|
+
|
|
50
|
+
<ColorDemo kind="surfaces" />
|
|
51
|
+
|
|
52
|
+
`surface.scrim` chỉ nằm sau dialog và drawer, một lớp duy nhất, với độ mờ riêng của nó.
|
|
53
|
+
|
|
54
|
+
## Mức nhấn
|
|
55
|
+
|
|
56
|
+
<ColorDemo kind="emphasis" />
|
|
57
|
+
|
|
58
|
+
## Trạng thái
|
|
59
|
+
|
|
60
|
+
**Mỗi trạng thái thuộc một trong năm vai trò. Chọn theo việc người dùng cần làm, và luôn nói rõ bằng chữ.**
|
|
61
|
+
|
|
62
|
+
### Chọn trạng thái
|
|
63
|
+
|
|
64
|
+
| Vai trò | Dùng khi | Ví dụ trong HexaSync |
|
|
65
|
+
|---|---|---|
|
|
66
|
+
| Thông tin (info) | Có việc đang diễn ra hoặc đáng biết; không cần làm gì. | Đang đồng bộ, đang chờ, đang nhập |
|
|
67
|
+
| Thành công (success) | Đã chạy tốt. | Đã đồng bộ, đã kết nối, đã xong |
|
|
68
|
+
| Cảnh báo (warning) | Đang chạy nhưng sắp cần xử lý. | Đồng bộ một phần, token hết hạn sau 3 ngày, bị giới hạn tần suất |
|
|
69
|
+
| Nguy hiểm (danger) | Bị lỗi hoặc bị chặn, hoặc hành động sẽ xoá mất dữ liệu. | Lỗi, mất kết nối, xoá |
|
|
70
|
+
| Trung tính (neutral) | Không có gì đang chạy và không có gì sai. | Tạm dừng, nháp, bỏ qua, lưu trữ |
|
|
71
|
+
|
|
72
|
+
Cảnh báo dùng màu cam, không dùng màu vàng, vì màu vàng là màu thương hiệu. Không có mức thứ sáu; hãy nói rõ khác biệt bằng chữ ("Lỗi 3 lần").
|
|
73
|
+
|
|
74
|
+
### Màu trạng thái
|
|
75
|
+
|
|
76
|
+
<ColorDemo kind="status" />
|
|
77
|
+
|
|
78
|
+
<ColorDemo kind="banners" />
|
|
79
|
+
|
|
80
|
+
<ColorDemo kind="dodont" item="warning" />
|
|
81
|
+
|
|
82
|
+
### Nhãn
|
|
83
|
+
|
|
84
|
+
<ColorDemo kind="labels" />
|
|
85
|
+
|
|
86
|
+
| | Nhãn | Nhãn trạng thái |
|
|
87
|
+
|---|---|---|
|
|
88
|
+
| Hình thức | Viền theo `border` của vai trò, chữ theo `text` của vai trò | Nền theo `bold` của vai trò, chữ và icon theo `text.on-bold` |
|
|
89
|
+
| Kích thước | Cao 20 px, padding 6 px; cỡ lớn 24 px, 8 px | Cao 32 px, padding 12 px |
|
|
90
|
+
| Dùng | Nhiều nhãn trên một màn hình: dòng trong bảng, tag | Một nhãn trên mỗi trang: trạng thái chính của trang đó |
|
|
91
|
+
|
|
92
|
+
## Trạng thái tương tác
|
|
93
|
+
|
|
94
|
+
**Thêm `.hover` hoặc `.pressed` vào token ở trạng thái nghỉ. Không dùng độ mờ (opacity) hay lớp phủ.**
|
|
95
|
+
|
|
96
|
+
<ColorDemo kind="states" />
|
|
97
|
+
|
|
98
|
+
| Trạng thái | Dùng |
|
|
99
|
+
|---|---|
|
|
100
|
+
| Hover, nhấn | Token ở trạng thái nghỉ, thêm `.hover` hoặc `.pressed` |
|
|
101
|
+
| Được chọn | `background.selected` và một dấu hiệu thứ hai |
|
|
102
|
+
| Focus | Viền `border.focus` dày 2 px, cách 2 px |
|
|
103
|
+
| Vô hiệu | `background.disabled`, `text.disabled`, `border.disabled` |
|
|
104
|
+
|
|
105
|
+
Với dòng hoặc mục menu, mỗi trạng thái cách nền thêm một bậc: hover, rồi được chọn, rồi được chọn khi hover. Dòng đang hover luôn nhạt hơn dòng được chọn, nên không bao giờ trông như đang được chọn.
|
|
106
|
+
|
|
107
|
+
Xem thêm ở trang [Trạng thái tương tác](/vi/foundations/styles/interaction-states/).
|
|
108
|
+
|
|
109
|
+
## Nút
|
|
110
|
+
|
|
111
|
+
<ColorDemo kind="actions" />
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Biểu đồ dữ liệu"
|
|
3
|
+
description: "Màu, chữ và quy tắc cho biểu đồ, ô KPI và các cách hiển thị dữ liệu khác."
|
|
4
|
+
order: 13
|
|
5
|
+
planned:
|
|
6
|
+
- "Bảng màu cho các chuỗi dữ liệu, đủ tương phản ở light và dark"
|
|
7
|
+
- "Màu trạng thái trong biểu đồ"
|
|
8
|
+
- "Các loại biểu đồ và khi nào dùng"
|
|
9
|
+
- "Trục, chú giải, tooltip và định dạng số"
|
|
10
|
+
- "Biểu đồ dễ tiếp cận: không chỉ dựa vào màu, có phần mô tả bằng chữ"
|
|
11
|
+
---
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Khả năng tiếp cận
|
|
3
|
+
description: Icon được đặt tên hoặc giữ im lặng thế nào, vì sao nút chỉ có icon cần tooltip, và mức tương phản cùng vùng bấm icon phải đạt.
|
|
4
|
+
order: 3
|
|
5
|
+
---
|
|
6
|
+
import IconDemo from '../../../../components/IconDemo.astro';
|
|
7
|
+
|
|
8
|
+
**Icon hoặc là trang trí và bị ẩn, hoặc có tên. Icon bấm được luôn nằm trong một nút hoặc link cỡ ít nhất 24 × 24.**
|
|
9
|
+
|
|
10
|
+
| Kiểm tra | Quy tắc | WCAG 2.2 |
|
|
11
|
+
|---|---|---|
|
|
12
|
+
| Icon trang trí | Ẩn bằng `aria-hidden="true"` | 1.1.1 |
|
|
13
|
+
| Nút hoặc link chỉ có icon | Có tên (`aria-label`) và tooltip cùng nội dung | 1.1.1, 2.5.3, 4.1.2 |
|
|
14
|
+
| Icon mang nghĩa | Tương phản từ 3:1 trở lên với nền | 1.4.11 |
|
|
15
|
+
| Trạng thái | Viết bằng chữ, không bao giờ chỉ dùng icon hay màu | 1.4.1 |
|
|
16
|
+
| Vùng bấm | Từ 24 × 24 trở lên; nút icon trong sản phẩm là 32 × 32 | 2.5.8 |
|
|
17
|
+
|
|
18
|
+
## Icon trang trí
|
|
19
|
+
|
|
20
|
+
**Khi có chữ đứng cạnh, icon chỉ là trang trí.** Ẩn nó đi để trình đọc màn hình chỉ đọc nhãn một lần.
|
|
21
|
+
|
|
22
|
+
Lucide làm sẵn việc này: icon không có `aria-label`, `aria-labelledby`, `role` hay `title` sẽ được gắn `aria-hidden="true"`. Không thêm nhãn cho icon đã có chữ bên cạnh.
|
|
23
|
+
|
|
24
|
+
<IconDemo kind="dodont" item="decorative" />
|
|
25
|
+
|
|
26
|
+
## Nút chỉ có icon
|
|
27
|
+
|
|
28
|
+
**Đặt tên cho nút, không đặt cho icon.** Gắn tên lên `<button>` hoặc `<a>` bằng `aria-label`. Icon bên trong vẫn ẩn.
|
|
29
|
+
|
|
30
|
+
- Tên nói điều gì sẽ xảy ra: "Xoá cửa hàng", không phải "Thùng rác" hay "Icon".
|
|
31
|
+
- Thêm tooltip cùng nội dung, hiện khi rê chuột và khi focus bằng bàn phím. Tooltip phải bắt đầu bằng tên của nút, để người dùng điều khiển bằng giọng nói đọc đúng những gì họ thấy (WCAG 2.5.3).
|
|
32
|
+
- Chỉ dùng nút chỉ có icon cho thao tác quen thuộc. Xem [Icon và nhãn](/vi/foundations/styles/icons/usage/#icon-và-nhãn).
|
|
33
|
+
|
|
34
|
+
```html
|
|
35
|
+
<button type="button" aria-label="Cài đặt">
|
|
36
|
+
<svg aria-hidden="true">…</svg>
|
|
37
|
+
</button>
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
<IconDemo kind="dodont" item="tooltip" />
|
|
41
|
+
|
|
42
|
+
## Icon mang nghĩa đứng riêng
|
|
43
|
+
|
|
44
|
+
Khi icon là dấu hiệu duy nhất của một điều gì đó, như icon trạng thái trong cột bảng hẹp, hãy đặt tên cho chính icon: `role="img"` và `aria-label="Thất bại"`. Nên ưu tiên viết trạng thái bằng chữ.
|
|
45
|
+
|
|
46
|
+
## Độ tương phản
|
|
47
|
+
|
|
48
|
+
**Icon mang nghĩa cần tương phản 3:1 với nền** (WCAG 1.4.11). Mọi token `color.icon.*` đều đạt 3:1 trên các nền đi kèm, ở cả giao diện sáng và tối. Icon trang trí và icon trong control bị vô hiệu không có mức tối thiểu.
|
|
49
|
+
|
|
50
|
+
Xem mọi cặp màu ở [Màu sắc › Khả năng tiếp cận](/vi/foundations/styles/color/accessibility/).
|
|
51
|
+
|
|
52
|
+
## Vùng bấm
|
|
53
|
+
|
|
54
|
+
**Mọi thứ bấm được có cỡ ít nhất 24 × 24** (WCAG 2.5.8). Trong sản phẩm Beehexa, nút icon cỡ 32 × 32 với icon 16 px. Icon không bao giờ là thứ duy nhất để bấm.
|
|
55
|
+
|
|
56
|
+
<IconDemo kind="target" />
|
|
57
|
+
|
|
58
|
+
<IconDemo kind="dodont" item="target" />
|
|
59
|
+
|
|
60
|
+
## Bàn phím và focus
|
|
61
|
+
|
|
62
|
+
- Nút hoặc link nhận focus, không phải icon. Không thêm `tabindex` cho `<svg>`.
|
|
63
|
+
- Vòng focus bao quanh toàn bộ nút 32 × 32.
|
|
64
|
+
- Tooltip mở khi focus cũng như khi rê chuột, và đóng bằng phím Escape.
|
|
65
|
+
|
|
66
|
+
## Danh sách kiểm tra
|
|
67
|
+
|
|
68
|
+
- Mọi icon cạnh chữ đều ẩn khỏi trình đọc màn hình.
|
|
69
|
+
- Mọi nút chỉ có icon đều có tên và tooltip cùng nội dung.
|
|
70
|
+
- Không trạng thái nào chỉ được thể hiện bằng icon hay màu.
|
|
71
|
+
- Icon mang nghĩa đạt 3:1; dùng đúng token là đã đạt.
|
|
72
|
+
- Mọi icon bấm được nằm trong vùng bấm từ 24 × 24 trở lên.
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Code
|
|
3
|
+
description: Sản phẩm Vue cài đặt, import, đặt cỡ, tô màu và đặt tên icon Lucide thế nào, kèm ghi chú ngắn cho React và Astro.
|
|
4
|
+
order: 4
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
**Sản phẩm dùng Lucide trực tiếp. Cài gói Lucide cho framework của bạn, cố định phiên bản và import từng icon theo tên.**
|
|
8
|
+
|
|
9
|
+
## Gói
|
|
10
|
+
|
|
11
|
+
| Framework | Gói | Phiên bản |
|
|
12
|
+
|---|---|---|
|
|
13
|
+
| Vue, cho sản phẩm Beehexa | `@lucide/vue` | 1.62.0 |
|
|
14
|
+
| React | `lucide-react` | 1.62.0 |
|
|
15
|
+
|
|
16
|
+
Mọi sản phẩm dùng cùng phiên bản Lucide với trang này, nên icon khớp với [Thư viện](/vi/foundations/styles/icons/library/). Icon được đóng gói vào ứng dụng lúc build. Không có request nào tới CDN.
|
|
17
|
+
|
|
18
|
+
## Cài đặt
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
npm install @lucide/vue@1.62.0 --save-exact
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Cố định đúng phiên bản, không dùng `^` hay `~`. Phiên bản Lucide mới có thể đổi hình hoặc đổi tên icon, nên chỉ nâng phiên bản khi có chủ đích. Xem [Cập nhật Lucide](#cập-nhật-lucide).
|
|
25
|
+
|
|
26
|
+
## Import
|
|
27
|
+
|
|
28
|
+
Import từng icon theo tên. Tên là tên trong Thư viện viết kiểu PascalCase: `refresh-cw` thành `RefreshCw`. Chỉ những icon bạn import mới nằm trong 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
|
+
Đồng bộ ngay
|
|
39
|
+
</button>
|
|
40
|
+
</template>
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Không import cả bộ bằng `import * as`. Cách đó đưa mọi icon vào bundle.
|
|
44
|
+
|
|
45
|
+
## Cỡ mặc định
|
|
46
|
+
|
|
47
|
+
Lucide vẽ icon ở cỡ 24 px. Sản phẩm Beehexa mặc định dùng 16 px. Đặt một lần ở component gốc:
|
|
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
|
+
Sau đó chỉ đặt `size` cho icon 20, 24 hoặc 32 px.
|
|
59
|
+
|
|
60
|
+
## Props
|
|
61
|
+
|
|
62
|
+
| Prop | Mặc định của Lucide | Quy tắc Beehexa |
|
|
63
|
+
|---|---|---|
|
|
64
|
+
| `size` | 24 | Mặc định 16. Chỉ dùng 20, 24 hoặc 32 ở chỗ trang Cách dùng cho phép. Không dùng cỡ khác. |
|
|
65
|
+
| `color` | `currentColor` | Để nguyên. Đặt màu ở phần tử cha bằng token màu icon. |
|
|
66
|
+
| `stroke-width` | 2 | Không đổi. |
|
|
67
|
+
| `non-scaling-stroke` | `false` | Không bật. Cũng không dùng tên cũ của nó là absolute-stroke-width. |
|
|
68
|
+
| `aria-label` | không có | Chỉ cho icon mang nghĩa đứng riêng, đi cùng role img. |
|
|
69
|
+
|
|
70
|
+
## Cỡ
|
|
71
|
+
|
|
72
|
+
Dùng prop `size`, hoặc đặt cỡ bằng CSS trên `svg`. Cả hai cách đều giữ nét đúng tỉ lệ.
|
|
73
|
+
|
|
74
|
+
```vue
|
|
75
|
+
<RefreshCw :size="20" />
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## Màu
|
|
79
|
+
|
|
80
|
+
```css
|
|
81
|
+
.sync-status {
|
|
82
|
+
color: var(--bh-color-icon-success);
|
|
83
|
+
}
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
```vue
|
|
87
|
+
<span class="sync-status"><CircleCheck /> Đã đồng bộ</span>
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## Khoảng cách
|
|
91
|
+
|
|
92
|
+
Đặt khoảng cách trên control, theo cỡ của nó: 4 px (`space.050`) với icon 16 px trong control cỡ nhỏ và mặc định, 8 px (`space.100`) với icon 20 hoặc 24 px. Xem [Cách dùng › Khoảng cách](/vi/foundations/styles/icons/usage/#khoảng-cách).
|
|
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
|
+
## Khả năng tiếp cận
|
|
106
|
+
|
|
107
|
+
Lucide ẩn icon khỏi trình đọc màn hình bằng `aria-hidden="true"`, trừ khi bạn truyền prop `aria-*`, `role` hoặc `title`. Đặt tên cho nút chỉ có icon trên chính nút đó, và thêm tooltip cùng nội dung.
|
|
108
|
+
|
|
109
|
+
```vue
|
|
110
|
+
<a-tooltip title="Cài đặt">
|
|
111
|
+
<button type="button" class="icon-button" aria-label="Cài đặt">
|
|
112
|
+
<Settings />
|
|
113
|
+
</button>
|
|
114
|
+
</a-tooltip>
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
Icon mang nghĩa đứng riêng được gắn role và nhãn, việc này cũng bỏ `aria-hidden`:
|
|
118
|
+
|
|
119
|
+
```vue
|
|
120
|
+
<CircleX role="img" aria-label="Thất bại" />
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
## Trong Ant Design Vue
|
|
124
|
+
|
|
125
|
+
Đặt icon vào slot `icon` và thêm class `anticon`, để Ant Design Vue căn nó như icon của chính nó.
|
|
126
|
+
|
|
127
|
+
```vue
|
|
128
|
+
<a-button>
|
|
129
|
+
<template #icon><Plus class="anticon" /></template>
|
|
130
|
+
Thêm cửa hàng
|
|
131
|
+
</a-button>
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
## React
|
|
135
|
+
|
|
136
|
+
`lucide-react` có cùng icon và props, viết kiểu camelCase. Đặt cỡ mặc định một lần bằng `LucideProvider`.
|
|
137
|
+
|
|
138
|
+
```tsx
|
|
139
|
+
import { LucideProvider, RefreshCw } from 'lucide-react';
|
|
140
|
+
|
|
141
|
+
<LucideProvider size={16}>
|
|
142
|
+
<button type="button">
|
|
143
|
+
<RefreshCw />
|
|
144
|
+
Đồng bộ ngay
|
|
145
|
+
</button>
|
|
146
|
+
</LucideProvider>
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
## Astro
|
|
150
|
+
|
|
151
|
+
beehexa.design dùng `@lucide/astro`. Import từng icon từ file riêng của nó để build luôn nhanh:
|
|
152
|
+
|
|
153
|
+
```astro
|
|
154
|
+
---
|
|
155
|
+
import Search from '@lucide/astro/icons/search';
|
|
156
|
+
---
|
|
157
|
+
<button class="icon-button" type="button" aria-label="Tìm kiếm">
|
|
158
|
+
<Search size={20} />
|
|
159
|
+
</button>
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
## Icon tự vẽ
|
|
163
|
+
|
|
164
|
+
Lucide đáp ứng đủ những gì Beehexa cần hiện nay. Nếu có lúc thiếu icon, hãy vẽ trên lưới 24 px của Lucide với cùng nét và đầu nét, đặt tên kiểu kebab-case với tiền tố `bh-`, và thêm vào thư viện.
|
|
165
|
+
|
|
166
|
+
## Cập nhật Lucide
|
|
167
|
+
|
|
168
|
+
1. Đọc ghi chú phát hành của Lucide để biết icon nào bị đổi tên hoặc đổi hình.
|
|
169
|
+
2. Kiểm tra mọi icon trong [Thao tác thường gặp](/vi/foundations/styles/icons/usage/#thao-tác-thường-gặp) vẫn còn.
|
|
170
|
+
3. Nâng phiên bản đã cố định trong sản phẩm, và báo nhóm design system cập nhật Thư viện để hiện đúng các icon đó.
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Icon
|
|
3
|
+
description: Sản phẩm Beehexa dùng trực tiếp Lucide, một bộ icon nét mở nguồn. Vài quy tắc về cỡ, màu, khoảng cách, nhãn và khả năng tiếp cận.
|
|
4
|
+
order: 11
|
|
5
|
+
sidebarLabel: Tổng quan
|
|
6
|
+
---
|
|
7
|
+
import IconDemo from '../../../../components/IconDemo.astro';
|
|
8
|
+
|
|
9
|
+
Icon giúp người dùng lướt nhanh màn hình và nhận ra một thao tác. Trong sản phẩm Beehexa, icon không bao giờ thay cho chữ: trạng thái được viết ra, và hầu hết thao tác đều có nhãn.
|
|
10
|
+
|
|
11
|
+
Beehexa dùng **[Lucide](https://lucide.dev)**: khoảng 1.900 icon nét trên lưới 24 × 24, theo giấy phép ISC. Sản phẩm import Lucide trực tiếp. Không có gói icon riêng của Beehexa. Chúng tôi chỉ thêm quy tắc sử dụng.
|
|
12
|
+
|
|
13
|
+
<IconDemo kind="sizes" />
|
|
14
|
+
|
|
15
|
+
## Nguyên tắc
|
|
16
|
+
|
|
17
|
+
### Chữ trước
|
|
18
|
+
|
|
19
|
+
Icon hỗ trợ cho nhãn. Chỉ dùng icon đứng riêng cho thao tác ai cũng biết, như đóng, tìm kiếm hoặc thêm, và luôn đặt tên cùng tooltip cho nó.
|
|
20
|
+
|
|
21
|
+
### Một icon, một nghĩa
|
|
22
|
+
|
|
23
|
+
Cùng một ý luôn dùng cùng một icon, trong mọi sản phẩm. Đồng bộ luôn là `refresh-cw`. Xem [thao tác thường gặp](/vi/foundations/styles/icons/usage/#thao-tác-thường-gặp).
|
|
24
|
+
|
|
25
|
+
### Chỉ dùng icon nét
|
|
26
|
+
|
|
27
|
+
Lucide không có icon tô đặc. Thể hiện mục đang chọn bằng nền "đã chọn" và thanh chỉ báo, không đổi sang icon khác.
|
|
28
|
+
|
|
29
|
+
### Màu theo chữ
|
|
30
|
+
|
|
31
|
+
Icon lấy màu của chữ bên cạnh. Chỉ dùng màu trạng thái khi chính icon đó thể hiện trạng thái.
|
|
32
|
+
|
|
33
|
+
## Tóm tắt quy tắc
|
|
34
|
+
|
|
35
|
+
| Quy tắc | Giá trị |
|
|
36
|
+
|---|---|
|
|
37
|
+
| Bộ icon | Lucide, chỉ icon nét |
|
|
38
|
+
| Cỡ | 16 (mặc định), 20 (cạnh chữ 16 px, thanh công cụ), 24 (icon đứng riêng), 32 (chỉ cho trạng thái trống) |
|
|
39
|
+
| Nét | Mặc định của Lucide, co giãn theo icon: 1,33 px ở cỡ 16, 1,67 ở cỡ 20, 2 ở cỡ 24 |
|
|
40
|
+
| Lưới | 24 × 24, chừa ít nhất 1 đơn vị, đầu nét và góc nối bo tròn |
|
|
41
|
+
| Màu | `currentColor`, với các token `color.icon.*` |
|
|
42
|
+
| Cạnh chữ | Căn giữa theo dòng đầu tiên. Khoảng cách theo cỡ chữ: 4 px cạnh chữ 14 px trở xuống, 8 px cạnh chữ 16 px trở lên |
|
|
43
|
+
| Nhãn | Mặc định icon đi kèm nhãn; chỉ dùng icon đứng riêng cho thao tác quen thuộc, có tên và tooltip |
|
|
44
|
+
| Icon trang trí | Ẩn khỏi trình đọc màn hình (`aria-hidden="true"`) |
|
|
45
|
+
| Độ tương phản | Từ 3:1 trở lên với icon mang nghĩa (WCAG 1.4.11) |
|
|
46
|
+
| Vùng bấm | Từ 24 × 24 trở lên (WCAG 2.5.8); nút icon trong sản phẩm là 32 × 32 |
|
|
47
|
+
| Tên | Mỗi nghĩa một tên, kebab-case, như `circle-check` |
|
|
48
|
+
| Gói | Lucide cho Vue 1.62.0, cố định phiên bản, import theo tên |
|
|
49
|
+
| Viết từ phải sang trái | Không cần: sản phẩm dùng tiếng Việt và tiếng Anh |
|
|
50
|
+
|
|
51
|
+
## Trong mục này
|
|
52
|
+
|
|
53
|
+
| Trang | Nội dung |
|
|
54
|
+
|---|---|
|
|
55
|
+
| [Thư viện](/vi/foundations/styles/icons/library/) | Mọi icon. Tìm, lọc và sao chép tên. |
|
|
56
|
+
| [Cách dùng](/vi/foundations/styles/icons/usage/) | Cỡ, nét, màu, căn với chữ, nhãn, và icon cho từng thao tác thường gặp. |
|
|
57
|
+
| [Khả năng tiếp cận](/vi/foundations/styles/icons/accessibility/) | Tên, icon trang trí, tooltip, độ tương phản và vùng bấm. |
|
|
58
|
+
| [Code](/vi/foundations/styles/icons/code/) | Cài đặt, import, đặt cỡ và đặt tên icon Lucide trong Vue, kèm ghi chú cho React và Astro. |
|
|
59
|
+
|
|
60
|
+
## Giấy phép
|
|
61
|
+
|
|
62
|
+
Lucide thuộc © Lucide Contributors và phát hành theo [giấy phép ISC](https://lucide.dev/license). Một phần lấy từ Feather, © Cole Bemis, theo giấy phép MIT. Cả hai đều cho phép dùng thương mại. Giữ lại thông báo giấy phép khi phát hành icon. Gói Lucide đã giữ sẵn cho bạn.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Thư viện
|
|
3
|
+
description: Mọi icon Lucide Beehexa được dùng. Tìm theo tên hoặc thẻ, lọc theo nhóm, đổi cỡ và bấm vào icon để sao chép tên.
|
|
4
|
+
order: 1
|
|
5
|
+
---
|
|
6
|
+
import IconBrowser from '../../../../components/IconBrowser.astro';
|
|
7
|
+
|
|
8
|
+
**Bấm vào icon để sao chép tên.** Tên viết kiểu kebab-case, như `circle-check`. Trong Vue, icon đó là `CircleCheck`.
|
|
9
|
+
|
|
10
|
+
Trước khi chọn icon, xem [Thao tác thường gặp](/vi/foundations/styles/icons/usage/#thao-tác-thường-gặp): nếu nghĩa bạn cần đã có ở đó, dùng đúng icon đó. Thư viện mở sẵn nhóm **Thao tác thường gặp**, chỉ hiện các icon này; ô tìm kiếm tìm trong toàn bộ icon, chọn **Tất cả** để xem hết. Đó là icon Lucide được chọn cho các thao tác thường gặp ở Beehexa, không cái nào bị vẽ lại hay đổi tên.
|
|
11
|
+
|
|
12
|
+
<IconBrowser />
|
|
13
|
+
|
|
14
|
+
## Dùng thư viện
|
|
15
|
+
|
|
16
|
+
- Ô tìm kiếm khớp tên icon trước, sau đó tới các thẻ Lucide gắn cho từng icon. Gõ "sync" sẽ ra `refresh-cw`.
|
|
17
|
+
- Nút đổi cỡ hiện 16, 20 và 24 px. Sản phẩm mặc định dùng 16 px.
|
|
18
|
+
- Dùng bàn phím: nhấn Tab để vào lưới icon, di chuyển bằng phím mũi tên, Home và End, nhấn Enter để sao chép.
|
|
19
|
+
- Không thấy icon cần tìm? Tìm theo nghĩa, không chỉ theo tên. Ghép hai icon có nghĩa riêng hiếm khi thành một icon thứ ba tốt. Xem [Icon tự vẽ](/vi/foundations/styles/icons/code/#icon-tự-vẽ).
|