+
\ No newline at end of file
+ @use "./_notification.scss";
+
diff --git a/src/components/Tabs/_tab.scss b/src/components/Tabs/_tab.scss
index 23a7576..9655fa1 100644
--- a/src/components/Tabs/_tab.scss
+++ b/src/components/Tabs/_tab.scss
@@ -1,33 +1,40 @@
-@use '../../styles/tokens/typography' as *;
+@use "../../styles/tokens/typography" as *;
.tab {
- display: flex;
- align-items: flex-start;
- gap: var(--nds-spacing-xs);
- justify-content: center;
- width: fit-content;
-
- &__item {
- display: flex;
- flex-direction: column;
- align-items: center;
- justify-content: center;
- height: fit-content;
- cursor: pointer;
- padding: var(--nds-spacing-2xs);
- @include text-base;
-
- &--active {
- color: var(--nds-primary);
-
- &::after {
- content: '';
- display: block;
- width: 120%;
- height: 1px;
- background-color: var(--nds-primary);
- border-radius: var(--nds-radius-sm);
- }
- }
+ display: flex;
+ align-items: stretch;
+ gap: var(--nds-spacing-2xs);
+ border-bottom: 1px solid var(--nds-border);
+ width: fit-content;
+ &__item {
+ display: inline-flex;
+ align-items: center;
+ gap: var(--nds-spacing-2xs);
+ padding: var(--nds-spacing-xs) var(--nds-spacing-sm);
+ cursor: pointer;
+ @include text-label;
+ color: var(--nds-neutral);
+ background: transparent;
+ border: none;
+ border-bottom: 2px solid transparent;
+ margin-bottom: -1px;
+ transition:
+ color 130ms ease,
+ border-color 130ms ease;
+ &:hover {
+ color: var(--nds-text);
}
-}
\ No newline at end of file
+ &--active {
+ color: var(--nds-text);
+ border-bottom-color: var(--nds-primary);
+ }
+ }
+}
+.tab__content {
+ padding-top: var(--nds-spacing-md);
+ @include text-base;
+ color: var(--nds-text);
+ &[hidden] {
+ display: none;
+ }
+}
diff --git a/src/components/Toggle/_toggle.scss b/src/components/Toggle/_toggle.scss
index b370de1..2b23e33 100644
--- a/src/components/Toggle/_toggle.scss
+++ b/src/components/Toggle/_toggle.scss
@@ -1,33 +1,13 @@
.toggle {
- background-color: var(--nds-disabled);
- border-radius: var(--nds-radius-full);
- padding: var(--nds-spacing-2xs);
- width: 50px;
- height: 25px;
- display: flex;
- align-items: center;
- justify-content: left;
- cursor: pointer;
- transition: background-color 160ms ease;
- position: relative;
- &-switch {
- color: var(--nds-text);
- width: 15px;
- height: 15px;
- background-color: var(--nds-text);
- border-radius: var(--nds-radius-full);
- position: absolute;
- left: var(--nds-spacing-2xs);
- top: 50%;
- transform: translateY(-50%);
- transition: left 160ms ease, background-color 160ms ease, transform 160ms ease;
- }
- &-active {
- display: flex;
- justify-content: right;
- background-color: var(--nds-primary);
- .toggle-switch {
- left: calc(100% - var(--nds-spacing-2xs) - 15px);
- }
- }
+ --w: 44px; --h: 24px; --pad: 3px;
+ position: relative; width: var(--w); height: var(--h);
+ background-color: var(--nds-disabled); border-radius: var(--nds-radius-full);
+ padding: var(--pad); display: flex; align-items: center; cursor: pointer;
+ transition: background-color 180ms ease;
+ &-switch { width: calc(var(--h) - var(--pad) * 2); height: calc(var(--h) - var(--pad) * 2);
+ background-color: #fff; border-radius: var(--nds-radius-full); box-shadow: var(--nds-shadow-sm);
+ transition: transform 180ms cubic-bezier(.34,1.4,.6,1); }
+ &-active { background-color: var(--nds-primary); }
+ &-active .toggle-switch { transform: translateX(calc(var(--w) - var(--h))); }
}
+toggle-switch:focus-visible .toggle { box-shadow: 0 0 0 3px var(--nds-ring); outline: none; }
\ No newline at end of file
diff --git a/src/components/Toggle/toggle.astro b/src/components/Toggle/toggle.astro
index a9a07ab..b2fc7d3 100644
--- a/src/components/Toggle/toggle.astro
+++ b/src/components/Toggle/toggle.astro
@@ -1,8 +1,6 @@
---
-import { boolean } from 'astro:schema';
-
export interface Props {
- 'data-checked': boolean;
+ 'data-checked'?: boolean | string;
name?: string;
id: string;
}
@@ -10,7 +8,7 @@ export interface Props {
const { 'data-checked': dataChecked = 'false', name = 'toggle', id } = Astro.props;
---
-
+
@@ -35,7 +33,7 @@ const { 'data-checked': dataChecked = 'false', name = 'toggle', id } = Astro.pro
this.dispatchEvent(new CustomEvent('change', {
detail: { checked: this._checked, name: this.dataset.name },
- bubbles: true,
+ bubbles: true,
composed: true,
}));
}
@@ -59,4 +57,4 @@ const { 'data-checked': dataChecked = 'false', name = 'toggle', id } = Astro.pro
\ No newline at end of file
+
diff --git a/src/components/pagination/_pagination.scss b/src/components/pagination/_pagination.scss
index cb6fd0b..c9c40ba 100644
--- a/src/components/pagination/_pagination.scss
+++ b/src/components/pagination/_pagination.scss
@@ -1,6 +1,7 @@
-@use '../../styles/tokens/typography' as *;
+@use "../../styles/tokens/typography" as *;
.pagination {
- display: flex;
- gap: var(--nds-spacing-sm);
-}
\ No newline at end of file
+ display: flex;
+ align-items: center;
+ gap: var(--nds-spacing-2xs);
+}
diff --git a/src/components/pagination/_paginationNumber.scss b/src/components/pagination/_paginationNumber.scss
index b78cb97..fdb9ecf 100644
--- a/src/components/pagination/_paginationNumber.scss
+++ b/src/components/pagination/_paginationNumber.scss
@@ -1,26 +1,30 @@
-@use '../../styles/tokens/typography' as *;
+@use "../../styles/tokens/typography" as *;
.pagination-number {
- width: 30px;
- height: 30px;
- display: flex;
+ min-width: 32px;
+ height: 32px;
+ padding: 0 var(--nds-spacing-2xs);
+ display: inline-flex;
align-items: center;
justify-content: center;
- border-radius: var(--nds-radius-full);
+ border-radius: var(--nds-radius-md);
+ cursor: pointer;
+ @include text-label;
+ color: var(--nds-text);
+ background: transparent;
+ border: 1px solid transparent;
+ transition: all 120ms ease;
+ user-select: none;
&:hover:not(.pagination-number__disabled):not(.pagination-number__selected) {
- background-color: var(--nds-secondary);
- cursor: pointer;
- }
- &:active:not(.pagination-number__disabled):not(.pagination-number__selected) {
- background-color: var(--nds-accent);
- cursor: pointer;
- }
- &__disabled {
- background-color: var(--nds-disabled);
- cursor: not-allowed;
+ border-color: var(--nds-border-strong);
+ background-color: var(--nds-surface-hover);
}
&__selected {
background-color: var(--nds-primary);
- cursor: pointer;
+ color: var(--nds-on-primary);
}
-}
\ No newline at end of file
+ &__disabled {
+ color: var(--nds-disabled);
+ cursor: not-allowed;
+ }
+}
diff --git a/src/components/textField/_textField.scss b/src/components/textField/_textField.scss
index 3f3dcff..795675d 100644
--- a/src/components/textField/_textField.scss
+++ b/src/components/textField/_textField.scss
@@ -42,6 +42,7 @@
min-height: 84px;
padding: var(--nds-spacing-sm);
resize: vertical;
+ width: 100% !important;
line-height: 1.5;
}
&__charCount {
diff --git a/src/layouts/Layout.astro b/src/layouts/Layout.astro
index d7d096b..d7bda3f 100644
--- a/src/layouts/Layout.astro
+++ b/src/layouts/Layout.astro
@@ -1,29 +1,17 @@
---
import '../styles/index.scss';
+interface Props { title?: string; }
+const { title = 'Nova Design System' } = Astro.props;
---
-
-
-
-
-
-
-
- Nova Design System
-
-
-
-
+
+
+
+
+
+ {title}
+
+
+
+
-
-
diff --git a/src/pages/gallery.astro b/src/pages/gallery.astro
new file mode 100644
index 0000000..466c558
--- /dev/null
+++ b/src/pages/gallery.astro
@@ -0,0 +1,1144 @@
+---
+import Layout from "../layouts/Layout.astro";
+
+import Button from "../components/Button/button.astro";
+import Badge from "../components/Badge/badge.astro";
+import Avatar from "../components/Avatar/avatar.astro";
+import Toggle from "../components/Toggle/toggle.astro";
+import Checkbox from "../components/Checkbox/checkbox.astro";
+import Radio from "../components/Radio/radio.astro";
+import TextField from "../components/textField/textField.astro";
+import Select from "../components/Select/select.astro";
+import SelectOption from "../components/Select/selectOption.astro";
+import NumericStepper from "../components/numericStepper/numericStepper.astro";
+import Tab from "../components/Tabs/tab.astro";
+import TabItem from "../components/Tabs/tabItem.astro";
+import TabContent from "../components/Tabs/tabContent.astro";
+import Link from "../components/Link/link.astro";
+import Breadcrumb from "../components/Breadcrumb/breadcrumb.astro";
+import BreadcrumbItem from "../components/Breadcrumb/breadcrumbItem.astro";
+import Pagination from "../components/pagination/pagination.astro";
+import PaginationNumber from "../components/pagination/paginationNumber.astro";
+import Navbar from "../components/Navbar/navbar.astro";
+import Sidebar from "../components/Sidebar/sidebar.astro";
+import SidebarItem from "../components/Sidebar/sidebarItem.astro";
+import Card from "../components/Card/card.astro";
+import ListItem from "../components/ListItem/listItem.astro";
+import ListItemTitle from "../components/ListItem/listItemTitle.astro";
+import ListItemSubtitle from "../components/ListItem/listItemSubtitle.astro";
+import Notification from "../components/Notifications/notification.astro";
+import LoadingBar from "../components/LoadingBar/loadingBar.astro";
+import Tooltip from "../components/Tooltip/tooltip.astro";
+import Modal from "../components/Modal/modal.astro";
+
+import {
+ Arrow2Icon,
+ BinIcon,
+ BurgerIcon,
+ CalendarIcon,
+ CheckIcon,
+ CloseIcon,
+ CodeIcon,
+ CubeIcon,
+ DownloadIcon,
+ FilterIcon,
+ HelpIcon,
+ HomeIcon,
+ LinkIcon,
+ MinusIcon,
+ MoreIcon,
+ OverviewIcon,
+ PlusIcon,
+ ProfileIcon,
+ SearchIcon,
+ SettingsIcon,
+ ShareIcon,
+ ShieldIcon,
+ SortIcon,
+ StatsIcon,
+ UploadIcon,
+} from "../components/Icons/index.ts";
+
+const tones = [
+ "primary",
+ "neutral",
+ "success",
+ "warning",
+ "error",
+ "info",
+] as const;
+const btnTypes = ["primary", "secondary", "ghost", "danger"] as const;
+const sizes = ["sm", "md", "lg"] as const;
+const notifTypes = ["info", "success", "warning", "error"] as const;
+const notifMessages: Record = {
+ info: "Information about the operation.",
+ success: "The operation completed successfully.",
+ warning: "A warning occurred. Please check the details.",
+ error: "An error occurred. Please try again.",
+};
+const tooltipPositions = ["top", "bottom", "left", "right"] as const;
+const iconLib = [
+ { name: "Arrow2", Icon: Arrow2Icon },
+ { name: "Bin", Icon: BinIcon },
+ { name: "Burger", Icon: BurgerIcon },
+ { name: "Calendar", Icon: CalendarIcon },
+ { name: "Check", Icon: CheckIcon },
+ { name: "Close", Icon: CloseIcon },
+ { name: "Code", Icon: CodeIcon },
+ { name: "Cube", Icon: CubeIcon },
+ { name: "Download", Icon: DownloadIcon },
+ { name: "Filter", Icon: FilterIcon },
+ { name: "Help", Icon: HelpIcon },
+ { name: "Home", Icon: HomeIcon },
+ { name: "Link", Icon: LinkIcon },
+ { name: "Minus", Icon: MinusIcon },
+ { name: "More", Icon: MoreIcon },
+ { name: "Overview", Icon: OverviewIcon },
+ { name: "Plus", Icon: PlusIcon },
+ { name: "Profile", Icon: ProfileIcon },
+ { name: "Search", Icon: SearchIcon },
+ { name: "Settings", Icon: SettingsIcon },
+ { name: "Share", Icon: ShareIcon },
+ { name: "Shield", Icon: ShieldIcon },
+ { name: "Sort", Icon: SortIcon },
+ { name: "Stats", Icon: StatsIcon },
+ { name: "Upload", Icon: UploadIcon },
+] as const;
+
+const tokenColors = [
+ "text",
+ "neutral",
+ "background",
+ "surface",
+ "surface-2",
+ "border",
+ "primary",
+ "secondary",
+ "accent",
+ "primary-soft",
+ "success-medium",
+ "warning-medium",
+ "error-medium",
+ "info-medium",
+];
+const spacingScale = [
+ ["3xs", "2"],
+ ["2xs", "4"],
+ ["xs", "8"],
+ ["sm", "12"],
+ ["md", "16"],
+ ["lg", "24"],
+ ["xl", "32"],
+ ["2xl", "48"],
+ ["3xl", "64"],
+];
+const radiusScale = ["xs", "sm", "md", "lg", "xl", "2xl", "full"];
+---
+
+
+
+
+
+
+
+ Nova DS
+ Foundations
+ Button
+ Badge
+ Toggle · Check · Radio
+ TextField
+ Select
+ Numeric stepper
+ Avatar
+ Loading bar
+ List item
+ Link
+ Tabs
+ Breadcrumb
+ Pagination
+ Notification
+ Tooltip
+ Card
+ Navbar · Sidebar
+ Modal
+ Icons
+
+
+
+
+
+ Foundations
+
+ Design tokens — type, color, spacing, radius, elevation.
+
+
+
+
Type scale — Intel One Mono (display) · Geist (UI)
+
+
+ text-5xl Nova 52px
+
+
+ text-4xl Nova 40px
+
+
+ text-3xl Nova 30px
+
+
+ text-2xl Nova 22px
+
+
+ text-xl Nova 18px
+
+
+ text-lg Nova 16px
+
+
+ text-base Nova 14px
+
+
+ text-label Nova 13px 600
+
+
+ text-sm Nova 12px
+
+
+
+
+
+
Color tokens (adapt to theme)
+
+ {
+ tokenColors.map((t) => (
+
+ ))
+ }
+
+
+
+
+
Spacing scale
+
+ {
+ spacingScale.map(([n, px]) => (
+
+
+ spacing-{n} · {px}px
+
+
+
+ ))
+ }
+
+
+
+
+
Radius scale
+
+ {
+ radiusScale.map((n) => (
+
+ {n}
+
+ ))
+ }
+
+
+
+
+
Elevation
+
+ {
+ (["sm", "md", "lg"] as const).map((n) => (
+
+ shadow-{n}
+
+ ))
+ }
+
+
+
+
+
+
+
+
+
+ Badge
+ Tones × soft / solid.
+
+
+
Soft
+
+ {
+ tones.map((t) => (
+
+ {t}
+
+ ))
+ }
+
+
+
+
Solid
+
+ {
+ tones.map((t) => (
+
+ {t}
+
+ ))
+ }
+
+
+
+
+
+
+ Toggle · Checkbox · Radio
+ Selection controls in every state.
+
+
+
Toggle — off / on
+
+
+
+
+
+
+
+
Checkbox — unchecked / checked / disabled
+
+ Unchecked
+ Checked
+ Disabled
+
+
+
+
+
Radio group
+
+ On-demand
+ Reserved
+ Spot
+
+
+
+
+
+
+ TextField
+ Text, email, password, textarea.
+
+
+
+
+
+
+ Select
+ Default and disabled.
+
+
+
Select
+
+
+ Option 1
+ Option 2
+ Option 3
+ Option 4
+ Option 5
+
+
+ Disabled
+
+
+
+
+
+
+
+ Numeric stepper
+ Increment / decrement control.
+
+
+
+
+
+
+ Avatar
+ Photo and initials.
+
+
+
+
+
+
+ Loading bar
+ Determinate and indeterminate.
+
+
+
Known 75% · indeterminate
+
+
+
+
+
+
+
+
+
+ List item
+ Title and subtitle rows.
+
+
+
List
+
+
+ api-gateway
+ Edge routing · eu-west-1
+
+
+ postgres-main
+ Database · eu-west-1
+
+
+ redis-cache
+ Cache · eu-west-1
+
+
+
+
+
+
+
+ Link
+ Inline and external.
+
+
+
Links
+
+ Documentation
+ Open dashboard ↗
+
+
+
+
+
+
+ Tabs
+ Underline tabs with panels (interactive).
+
+
+
Tabs + content
+
+
+ Images
+ Videos
+ Documents
+
+
🖼️ Image gallery content.
+
🎬 Video player here.
+
📄 Document list here.
+
+
+
+
+
+
+ Breadcrumb
+ Hierarchical navigation.
+
+
+
Breadcrumb
+
+
+ Home
+ Services
+ api-gateway
+
+
+
+
+
+
+
+
+
+
+ Notification
+ Info, success, warning and error.
+
+
+
All types
+
+ {
+ notifTypes.map((t) => (
+ {notifMessages[t]}
+ ))
+ }
+
+
+
+
+
+
+
+
+
+ Card
+ With cover, plain and with footer actions.
+
+
+
Cover · plain · with footer
+
+
+
+ Live
+
+
+
+
+
+ Cancel
+ Deploy
+
+
+
+
+
+
+
+
+ Navbar · Sidebar
+ App chrome.
+
+
+
+
+
Sidebar
+
+
+ Overview
+ Metrics
+ Security
+ Settings
+
+
+
+
+
+
+
+ Modal
+
+ Overlay dialog — click to open, Escape or overlay to close.
+
+
+
+
Dialog
+
+ Open modal
+
+
+
+
+ Ship build 4821 to production? This rolls out to all edge regions.
+
+ Cancel
+ Deploy
+
+
+
+
+
+
+ Icons
+ 25 line icons at 16 / 24 / 32 px.
+
+
+
Arrow2 — orientations × 16 / 24 / 32
+
+ {
+ ([16, 24, 32] as const).map((s) => (
+
+
+
+
+
+
+ ))
+ }
+
+
+
+
+
Library — 25 icons at 24px
+
+
+ {
+ iconLib.map(({ name, Icon }) => (
+
+
+ {name}
+
+ ))
+ }
+
+
+
+
+
+
Sizes — 16 / 24 / 32
+
+ {
+ [SearchIcon, SettingsIcon, ShareIcon, DownloadIcon].map(
+ (Icon) => (
+
+ <>
+
+
+
+ >
+
+ ),
+ )
+ }
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/index.astro b/src/pages/index.astro
index 77c640d..f80b721 100644
--- a/src/pages/index.astro
+++ b/src/pages/index.astro
@@ -1,23 +1,45 @@
---
import Layout from '../layouts/Layout.astro';
-import Notification from '../components/Notifications/notification.astro';
+
+// Core
+import Button from '../components/Button/button.astro';
+import Badge from '../components/Badge/badge.astro';
+import Avatar from '../components/Avatar/avatar.astro';
+
+// Forms
import Toggle from '../components/Toggle/toggle.astro';
+import Checkbox from '../components/Checkbox/checkbox.astro';
+import Radio from '../components/Radio/radio.astro';
+import TextField from '../components/textField/textField.astro';
+import Select from '../components/Select/select.astro';
+import SelectOption from '../components/Select/selectOption.astro';
+import NumericStepper from '../components/numericStepper/numericStepper.astro';
+
+// Navigation
import Tab from '../components/Tabs/tab.astro';
import TabItem from '../components/Tabs/tabItem.astro';
import TabContent from '../components/Tabs/tabContent.astro';
-import Button from '../components/Button/button.astro';
import Link from '../components/Link/link.astro';
+import Breadcrumb from '../components/Breadcrumb/breadcrumb.astro';
+import BreadcrumbItem from '../components/Breadcrumb/breadcrumbItem.astro';
+import Pagination from '../components/pagination/pagination.astro';
+import PaginationNumber from '../components/pagination/paginationNumber.astro';
+import Navbar from '../components/Navbar/navbar.astro';
+import Sidebar from '../components/Sidebar/sidebar.astro';
+import SidebarItem from '../components/Sidebar/sidebarItem.astro';
+
+// Data
+import Card from '../components/Card/card.astro';
import ListItem from '../components/ListItem/listItem.astro';
import ListItemTitle from '../components/ListItem/listItemTitle.astro';
import ListItemSubtitle from '../components/ListItem/listItemSubtitle.astro';
+
+// Feedback
+import Notification from '../components/Notifications/notification.astro';
import LoadingBar from '../components/LoadingBar/loadingBar.astro';
-import NumericStepper from '../components/numericStepper/numericStepper.astro';
-import Avatar from '../components/Avatar/avatar.astro';
-import Select from '../components/Select/select.astro';
-import SelectOption from '../components/Select/selectOption.astro';
-import TextField from '../components/textField/textField.astro';
-import Pagination from '../components/pagination/pagination.astro';
-import PaginationNumber from '../components/pagination/paginationNumber.astro';
+import Tooltip from '../components/Tooltip/tooltip.astro';
+import Modal from '../components/Modal/modal.astro';
+
import {
Arrow2Icon, BinIcon, BurgerIcon, CalendarIcon, CheckIcon, CloseIcon,
CodeIcon, CubeIcon, DownloadIcon, FilterIcon, HelpIcon, HomeIcon,
@@ -26,15 +48,204 @@ import {
UploadIcon,
} from '../components/Icons/index.ts';
-const initialChecked = true;
+const tones = ['primary', 'neutral', 'success', 'warning', 'error', 'info'] as const;
+const buttonTypes = ['primary', 'secondary', 'ghost', 'danger'] as const;
+const sizes = ['sm', 'md', 'lg'] as const;
+const libraryIcons = [
+ ['Profile', ProfileIcon], ['Search', SearchIcon], ['Settings', SettingsIcon],
+ ['Home', HomeIcon], ['Overview', OverviewIcon], ['Stats', StatsIcon],
+ ['Share', ShareIcon], ['Shield', ShieldIcon], ['Download', DownloadIcon],
+ ['Upload', UploadIcon], ['Filter', FilterIcon], ['Bin', BinIcon],
+ ['Burger', BurgerIcon], ['Calendar', CalendarIcon], ['Check', CheckIcon],
+ ['Close', CloseIcon], ['Code', CodeIcon], ['Cube', CubeIcon],
+ ['Help', HelpIcon], ['Link', LinkIcon], ['Minus', MinusIcon],
+ ['More', MoreIcon], ['Plus', PlusIcon], ['Sort', SortIcon],
+] as const;
---
-
- Nova Design System
-
+
+
+
+
+
+
+
+
+ Badge
+ Tones × soft / solid.
+ Soft
+ {tones.map((t) => {t} )}
+
+ Solid
+ {tones.map((t) => {t} )}
+
+
+
+
+
+ Toggle · Checkbox · Radio
+ Selection controls in every state.
+
+ Checkbox
+ Unchecked
+ Checked
+ Disabled
+
+ Radio group
+ On-demand
+ Reserved
+ Spot
+
+
+
+
+
+ TextField
+ Text, email, password, textarea.
+
+
+
+
+
+ Select
+ Default and disabled.
+ Select
+
+ Option 1
+ Option 2
+ Option 3
+ Option 4
+ Option 5
+
+
+ Disabled
+
+
+
+
+
+
+ Numeric stepper
+ Increment / decrement control.
+
+
+
+
+
+ Avatar
+ Photo and initials.
+
+
+
+
+
+ Loading bar
+ Determinate and indeterminate.
+ Known 75% · indeterminate
+
+
+
+
+
+
+
+ List item
+ Title and subtitle rows.
+ List
+
+ api-gateway
+ Edge routing · eu-west-1
+
+
+ postgres-main
+ Database · eu-west-1
+
+
+
+
+
+
+ Link
+ Inline and external.
+ Links
+ Documentation
+ Open dashboard
+
+
+
+
+
+ Tabs
+ Underline tabs with panels.
+ Tabs
+
+ Images
+ Videos
+ Documents
+
+
🖼️ Image gallery content.
+
🎬 Video player here.
+
📄 Document list here.
+
+
+
+
+
+ Breadcrumb
+ Hierarchical navigation.
+ Breadcrumb
+
+ Home
+ Services
+ api-gateway
+
+
+
+
+
+
-
-
- Select
-
-
- Option 1
- Option 2
- Option 3
- Option 4
- Option 5
- Option 6
- Option 7
- Option 8
- Option 9
-
-
- Option 1
-
-
-
-
-
- Numeric Stepper
-
-
-
-
-
-
- List Item
-
-
- List Item Title
- List Item Subtitle
-
-
-
-
- Link
-
- Example Link
- Example Link (opens in new tab)
-
-
-
- Button
-
- Primary Button
- Secondary Button
- disabled
-
-
-
- Tabs
-
-
- images
- Videos
- Documents
-
-
- my images
-
-
- Video player here
-
+
+
+ Notification
+ Info, success, warning and error.
+ All types
+ Information about the operation.
+ The operation completed successfully.
+ A warning occurred. Please check the details.
+ An error occurred. Please try again.
+
+
-
- Document list here
-
-
+
+
-
- Toggle
-
-
-
State: {initialChecked ? 'Checked' : 'Unchecked'}
-
+
+
+
+ Card
+ With cover, plain and with footer.
+ Cards
+
+ Live
+
+
+
+
+ Cancel
+ Deploy
+
+
+
-
- Notifications — Error / Warning / Success / Info
-
-
- An error occurred during the operation. Please try again.
-
-
- The operation was completed successfully.
-
-
- A warning occurred during the operation. Please check the details.
-
-
- Information about the operation.
-
-
+
+
+
+ Navbar · Sidebar
+ App chrome.
+
+ Sidebar
+
+ Overview
+ Metrics
+ Security
+ Settings
+
+
-
- Icon — 16 / 24 / 32
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+ Modal
+ Overlay dialog.
+
+
+ Ship build 4821 to production? This rolls out to all edge regions.
+
+ Cancel
+ Deploy
+
+
-
+
+
+
+ Icons
+ Library at 24px, plus arrow orientations and sizes.
+ Arrow — orientations × 16/24/32
+ {[16, 24, 32].map((s) => (
+
+
+
+
+
+
+ ))}
+
+ Library (24px)
+
+ {libraryIcons.map(([name, Icon]) => (
+
{name}
+ ))}
+
+
+ Sizes — 16 / 24 / 32
+ {[SearchIcon, SettingsIcon, ShareIcon, DownloadIcon].map((Icon) => (
+
+
+
+ ))}
+
+
+
-