Example dev setup (boilerplate) to use DOMQL. You can also check the live editor Playground.
- Clone the repo
git clone git@github.com:symbo-ls/starter-kit.git
- Install scripts
yarn
- Run the project
yarn start
All design system tokens live in smbls/designSystem/.
| File | Purpose |
|---|---|
COLOR.js |
Named color palette |
GRADIENT.js |
Gradient definitions (empty by default) |
THEME.js |
Semantic surface themes (document, dialog, field, primary…) |
FONT.js |
Custom font faces |
FONT_FAMILY.js |
Font family stacks |
TYPOGRAPHY.js |
Type scale configuration |
SPACING.js |
Spacing scale configuration |
TIMING.js |
Easing curves |
CLASS.js |
Utility CSS class overrides (empty by default) |
GRID.js |
Grid presets (empty by default) |
SHAPE.js |
Shape/border-radius presets (empty by default) |
ANIMATION.js |
Named keyframe animations |
MEDIA.js |
Custom media query breakpoints |
CASES.js |
Conditional cases (environment flags) |
RESET.js |
Global CSS reset overrides (empty by default) |
Named hex values and semantic adaptive colors used everywhere via color, background, borderColor, and theme props.
| Token | Value | Usage |
|---|---|---|
green |
#389d34 |
Success states |
red |
#e15c55 |
Warning/error states |
yellow |
#EDCB38 |
Attention states |
orange |
#e97c16 |
Accent states |
blue |
#0474f2 |
Primary interactive color |
phosphorus |
#4db852 |
Alternate success |
black |
black |
Pure black |
white |
#ffffff |
Pure white |
gray |
#4e4e50 |
Neutral mid-tone base |
codGray |
#171717 |
Near-black page background |
solitude |
#e5f1ff |
Light blue tint |
anakiwa |
#a3cdfd |
Light blue accent |
concrete |
#f2f2f2 |
Light neutral |
transparent |
rgba(0,0,0,0) |
Fully transparent |
These tokens resolve to different values in dark and light mode automatically via the theme system.
| Token | Dark value | Light value | Usage |
|---|---|---|---|
title |
gray 1 −168 (near-white) |
gray 1 +168 (near-black) |
Primary text |
caption |
gray 1 −68 |
gray 1 +68 |
Secondary/meta text |
paragraph |
gray 1 −42 |
gray 1 +42 |
Body copy |
disabled |
gray 1 −26 |
gray 1 +26 |
Disabled state text |
line |
gray 1 −16 |
gray 1 +16 |
Dividers and borders |
The gray X ±Y notation is a Symbols color function: start from gray at opacity X, then lighten or darken by Y steps.
Text: { color: 'blue' } // static color
Caption: { color: 'caption' } // adaptive semantic color
Box: { background: 'gray 0.1' } // inline tintThemes define paired background + color (and optional effects) for dark and light modes. Apply with theme: 'name' on any element.
The page root surface.
| Mode | Background | Text |
|---|---|---|
| dark | codGray (#171717) |
title |
| light | gray 1 +168 (near-white) |
title |
Page: { extends: 'Flex', theme: 'document', minHeight: '100dvh' }Elevated card or panel surface, with glass blur.
| Mode | Background | Text | Blur |
|---|---|---|---|
| dark | gray 0.95 −68 |
title |
blur(3px) |
| light | gray .95 +150 |
title |
blur(3px) |
Card: { extends: 'Flex', theme: 'dialog', round: 'A', padding: 'A' }Higher elevation than dialog, used for active/selected states in tab bars.
| Mode | Background | Text |
|---|---|---|
| dark | gray 1 +68 |
title |
| light | gray 0.95 +140 |
title |
Tab: { '.isActive': { theme: 'dialog-elevated' } }Input control surface.
| Mode | Background | Text | Placeholder |
|---|---|---|---|
| dark | gray 0.95 −65 |
white |
white 1 −78 |
| light | transparent | black |
gray 1 −68 |
Input: { theme: 'field' }Slightly elevated input variant, used inside dialog panels.
| Mode | Background | Text |
|---|---|---|
| dark | gray 1 −16 |
title |
| light | gray 1 −96 |
title |
Main call-to-action color (blue background, white text).
Button: { theme: 'primary', text: 'Save' }Destructive or alert state (red background, white text).
Badge: { theme: 'warning', text: 'Error' }Positive confirmation state (green background, white text).
No background, inherits current text color.
Button: { theme: 'transparent', text: 'Cancel' }Transparent background with a 1 px border.
| Mode | Border |
|---|---|
| dark | 1px solid #4e4e50 |
| light | 1px solid #a3cdfd |
Resets both color and background to none.
Declares custom font faces loaded via the design system's useFontImport option.
| Font | Weight | Variable |
|---|---|---|
AvenirNext_Variable |
400 | yes |
The variable font covers all weights from a single file and is the default UI font.
Controls the font-size scale (fontSize tokens).
{ '@default': { base: 16, ratio: 1.25, range: [-5, 12], subSequence: true } }| Token | Approx size |
|---|---|
W4–W1 |
~8–10 px |
W–Z |
~10–16 px |
A–B |
~16–24 px |
B1–C |
~28–40 px |
C1–C2 |
~48–64 px |
Heading: { fontSize: 'C' }
Caption: { fontSize: 'Z2' }Controls the spacing scale (padding, margin, gap, width, height, boxSize, etc.).
{ '@default': { base: 16, ratio: 1.618, range: [-5, 15] } }| Token | Approx value | Common use |
|---|---|---|
W2–W |
2–4 px | Micro gaps, offsets |
X4–X |
4–6 px | Icon padding, tight gaps |
Z4–Z |
10–16 px | Compact padding |
A–A4 |
16–26 px | Default padding, gutters |
B–B4 |
26–42 px | Section padding |
C–C4 |
42–68 px | Container padding, avatar sizes |
D–F |
68–178 px | Large sections, max-widths |
G–H |
178–288 px | Wide containers |
Compound tokens use + (e.g. A+W2). Shorthand follows CSS rules; use - to skip a side:
Box: { padding: 'A B2' } // vertical A, horizontal B2
Flex: { gap: 'Z' } // ~16 px
Avatar: { boxSize: 'C2' } // ~68 px square
margin: '- - - auto' // left margin only| Token | Value | Character |
|---|---|---|
defaultBezier |
cubic-bezier(.29, .67, .51, .97) |
Smooth ease-out |
Box: { transition: 'B defaultBezier', transitionProperty: 'opacity, transform' }| Name | Use |
|---|---|
fadeInUp |
Entrance (opacity 0 + translateY → visible) |
fadeOutDown |
Exit (visible → opacity 0 + translateY) |
marquee |
Scrolling ticker (translateX 0 → −50%) |
Modal: { animation: 'fadeInUp B defaultBezier' }
Ticker: { animation: 'marquee 8s linear infinite' }| Token | Query |
|---|---|
mobileL |
min-width: 480px |
tabletSm |
min-width: 728px |
Grid: {
columns: '1fr',
'@tabletSm': { columns: 'repeat(2, 1fr)' },
'@mobileL': { columns: 'repeat(3, 1fr)' }
}| Case | Condition |
|---|---|
isSafari |
true when the browser is Safari (not Chrome/Android) |
Element: { $isSafari: { top: 'Z2', right: 'Z2' } }Set in smbls/designSystem/index.js:
| Flag | Default | Effect |
|---|---|---|
useReset |
true |
Apply a CSS reset |
useVariable |
true |
Emit CSS custom properties for all tokens |
useFontImport |
true |
Load FONT entries via @font-face |
useIconSprite |
true |
Inline the ICONS SVG sprite into the DOM |
useSvgSprite |
true |
Inline any SVG sprite definitions |
useDefaultConfig |
true |
Merge the smbls default design system config |
useDocumentTheme |
true |
Apply document theme to <html> |
verbose |
false |
Suppress design system debug output |
// Spacing shorthand
padding: 'A' // all sides
padding: 'A B' // vertical | horizontal
padding: 'A B C D' // top | right | bottom | left
margin: '- - - auto' // '-' skips a side
// Color modifier syntax
'gray 0.95 -68' // gray at 95% opacity, darkened 68 steps
'gray 1 +168' // gray at full opacity, lightened 168 steps
// Dark/light mode targeting
Box: {
'@dark': { background: 'codGray' },
'@light': { background: 'concrete' }
}
// Responsive overrides
Grid: {
columns: 'repeat(4, 1fr)',
'@tabletSm': { columns: 'repeat(2, 1fr)' },
'@mobileL': { columns: '1fr' }
}Built-in atoms are the primitive HTML wrappers available on every element.
Text→<span>Box→<div>Flex→<div>(flexbox)Grid→<div>(CSS grid)Link→<a>Input→<input>Radio→<input>Checkbox→<input>Svg→<svg>Icon→<svg>(icon sprite)IconText→<div>Button→<button>Img→<img>Iframe→<iframe>Video→<video>
Higher-level components shipped in the UI kit, composed from atoms:
AvatarButtonDialogDropdownIconInputLinkNotificationRangeSelectTooltip
All components use flattened props (no props wrapper) and onX events.
Primary use: inline text content.
Common props: text, color, fontSize, fontWeight, lineHeight, letterSpacing, textTransform, textDecoration, textAlign, maxWidth, overflow, whiteSpace
Text: { text: 'Hello', fontSize: 'B', color: 'title' }Primary use: generic container.
Common props: padding, margin, border, borderRadius, background, shadow, width, height, minWidth, maxWidth, minHeight, maxHeight, position, inset, overflow, zIndex
Box: { padding: 'A B', background: 'surface', borderRadius: 'B' }Primary use: layout container using flexbox.
Common props: flow / flexFlow, align / flexAlign, alignItems, justifyContent, gap, flex, wrap
Flex: { flow: 'y', align: 'center space-between', gap: 'B' }Primary use: layout container using CSS grid.
Common props: columns / gridTemplateColumns, rows / gridTemplateRows, gap, columnGap, rowGap, gridAutoFlow
Grid: { columns: 'repeat(3, 1fr)', gap: 'A' }Primary use: navigation or external link.
Common props: href, target, rel, text, color, textDecoration, onClick
Link: { text: 'Docs', href: '/docs' }Primary use: text input.
Common props: type, name, value, placeholder, required, disabled, onInput, onChange, onKeydown, padding, background, border, round
Input: { type: 'text', name: 'title', placeholder: 'Enter title' }Primary use: selectable inputs.
Common props: name, value, checked, disabled, onChange
Checkbox: { name: 'agree', checked: true }Primary use: raw SVG container.
Common props: html (inline SVG markup), width, height, viewBox, fill, stroke
Svg: { html: '<path d="..." />', viewBox: '0 0 24 24' }Primary use: icon from sprite.
Common props: name (sprite symbol id), size / boxSize, color
Icon: { name: 'chevronRight', boxSize: 'A' }Primary use: icon + text combo.
Common props: icon, text, gap, align, color
IconText: { icon: 'search', text: 'Search', gap: 'Z' }Primary use: actionable control.
Common props: text, icon, type, disabled, theme, padding, round, onClick, onSubmit
Button: { text: 'Save', theme: 'primary', type: 'submit' }Primary use: image element.
Common props: src, alt, loading, width, height, boxSize, objectFit
Img: { src: '/logo.png', alt: 'Logo', boxSize: 'B' }Primary use: embedded content.
Common props: src, title, allow, sandbox, width, height, border
Iframe: { src: 'https://example.com', width: '100%', height: '300px' }Primary use: video player.
Common props: src, poster, controls, autoplay, muted, loop, width, height, objectFit
Video: { src: '/demo.mp4', controls: true, width: '100%' }All atoms support:
@mediakeys (e.g.@mobile)- pseudo selectors (e.g.
:hover,:active) - conditional cases (e.g.
.isActive,!isActive) childPropsfor one-level child overrideschildrenarrays or nested object treesonInit,onRender,onUpdate,onStateUpdate
All components in smbls/components and how their properties are commonly used.
H1→<h1>H2→<h2>H3→<h3>H4→<h4>H5→<h5>H6→<h6>P→<p>Caption→<span>(small label text)Headline→<span>(large emphasis text)Subhead→<span>(subheading text)Footnote→<span>(footer reference text)Strong→<strong>Italic→<em>U→<u>
All typography components accept a text prop.
Primary use: semantic section headings.
Common props: text, color, fontSize, fontWeight, lineHeight
H2: { text: 'Section title' }Primary use: body paragraph text.
Common props: text, color, fontSize, lineHeight, maxWidth
P: { text: 'A short description goes here.' }Primary use: small labels, hints, and metadata text.
Common props: text, color, fontSize, opacity
Caption: { text: 'Updated 3 days ago' }Primary use: display-size headings, sub-sections, and footnotes.
Headline: { text: 'Welcome back' }
Subhead: { text: 'Manage your workspace' }
Footnote: { text: '* Prices are subject to change' }Primary use: inline text emphasis.
Strong: { text: 'Important' }
Italic: { text: 'Note:' }
U: { text: 'Terms of service' }Hr→<hr>HrLegend→<div>(line with centered text)
Primary use: visual horizontal rule between sections.
Hr: { minWidth: 'F' }Primary use: divider with a centered label, commonly used between form sections.
HrLegend: { text: 'Or' }IconButton— icon-only circular buttonIconButtonSet— group of icon buttonsCounterButton— button with notification badgeCounterIconButton— icon button with positioned badgeIconCounterButton— button with icon and counter side-by-sideUploadButton— text button that opens file pickerUploadIconButton— icon button that opens file pickerSubmitButton— form submit buttonButtonSet— group of buttonsConfirmationButtons— yes/no pairImgButton— image as buttonImgHeadingButton— image and heading as buttonInputButton— email input with action button
Primary use: compact circular button that shows only an icon.
Common props: Icon.name, theme (default: 'dialog'), fontSize, padding, round
IconButton: { Icon: { name: 'plus' }, theme: 'dialog' }Primary use: row of icon buttons.
IconButtonSet: {
childExtend: 'IconButton',
children: [{ Icon: { name: 'edit' } }, { Icon: { name: 'trash' } }]
}Primary use: button that shows a notification count badge.
CounterButton: {
Span: { text: 'Messages' },
NotificationCounter: { text: '7' }
}Primary use: icon button with an absolutely positioned counter badge.
CounterIconButton: { Icon: { name: 'bell' }, NotificationCounter: { text: '3' } }Primary use: button combining an icon, label, and counter.
IconCounterButton: {
Icon: { name: 'inbox' },
Span: { text: 'Inbox' },
NotificationCounter: { text: '12' }
}UploadButton: { text: 'Choose file' }
UploadIconButton: { Icon: { name: 'upload' } }SubmitButton: { value: 'Create account' }ButtonSet: {
children: [{ text: 'Cancel' }, { text: 'Save', theme: 'primary' }]
}ConfirmationButtons: {
children: [{ text: 'Cancel' }, { text: 'Delete', theme: 'danger' }]
}Primary use: inline email or text input with a submit button.
InputButton: {
Input: { placeholder: 'Enter your email' },
Button: { text: 'Sign up' }
}Avatar— single avatar imageAvatarSet— overlapping group of avatarsAvatarStatus— avatar with online/offline dotAvatarParagraph— avatar + paragraphAvatarHeading— avatar + headingAvatarHgroup— avatar + heading groupAvatarBadgeHgroup— avatar + heading + badgeAvatarHgroupIconButton— avatar + heading + icon buttonAvatarHgroupSelect— avatar + heading + selectAvatarSelectPicker— avatar inside label with selectAvatarChatPreview— avatar + message previewAvatarStatusChatPreview— avatar with status + message previewAvatarSetChatPreview— avatar group + message preview
Common props: boxSize (default: 'C2'), src, alt
Avatar: { boxSize: 'C2' }AvatarSet: { children: [{}, {}, {}] }AvatarStatus: { Avatar: { boxSize: 'C' }, StatusDot: { theme: 'success' } }AvatarHgroup: { H: { text: 'Nika Tomadze' }, P: { text: 'Product Designer' } }AvatarBadgeHgroup: {
H: { text: 'Nika Tomadze' },
Badge: { text: 'Admin', theme: 'primary' }
}Primary use: chat list item with avatar, message preview, and timestamp.
AvatarChatPreview: {
H: { text: 'Design Team' },
P: { text: 'Can you join us today?' },
Value: { text: '2:20' }
}Badge— colored label badgeBadgeCaption— caption + badgeBadgeParagraph— paragraph + badgeNotificationCounter— circular number badgeNotCounterParagraph— paragraph + counter
Common props: text, theme (default: 'warning'), round, padding
Badge: { text: 'New', theme: 'primary' }BadgeCaption: { Caption: { text: 'Status' }, Badge: { text: 'Active', theme: 'success' } }NotificationCounter: { text: '5', theme: 'primary' }NotCounterParagraph: { P: { text: 'New messages arrived' }, NotificationCounter: { text: '3' } }Field— input with optional iconFieldCaption— labeled field with captionIconInput— input with icon overlayFixedNumberField— 4-digit code inputCardNumberField— 4×4-digit card number entryGroup— form section with titleGroupField— labeled form fieldsetSelect— native selectSelectPicker— styled select with chevron iconSelectField— field-styled selectSelectHgroup— select with heading descriptionNumberPicker— increment/decrement number inputSearch— search input with iconSearchDropdown— searchable filterable dropdownTextareaIconButton— textarea with send button
Common props: Input.placeholder, Input.type, Input.round, Icon.icon, theme (default: 'field')
Field: { Input: { placeholder: 'Enter your name' }, Icon: { icon: 'user' } }FieldCaption: {
Caption: { text: 'Email address' },
Field: { Input: { placeholder: 'you@example.com' } }
}IconInput: { Input: { placeholder: 'Search…' }, Icon: { name: 'search' } }Primary use: OTP/PIN entry (FixedNumberField) or full card number (CardNumberField).
FixedNumberField: { Input: { placeholder: '0000' } }
CardNumberField: { children: [{}, {}, {}, {}] }Group: { Title: { text: 'Personal info' }, flow: 'y', gap: 'A' }SelectPicker: {
Select: {
children: [{ text: 'Option A', value: 'a' }, { text: 'Option B', value: 'b' }]
}
}SelectHgroup: {
H: { text: 'Language' },
P: { text: 'Choose your preferred language' },
SelectPicker: {}
}NumberPicker: { Value: { text: '{{ currentValue }}' } }Search: { Input: { placeholder: 'Search…' } }SearchDropdown: { state: { data: ['New York', 'Los Angeles', 'Chicago'] } }TextareaIconButton: {
Textarea: { placeholder: 'Write a message…' },
IconButton: { Icon: { name: 'send' } }
}Composition components pair a primary element (heading, icon, image) with text content or controls.
ButtonHeading— heading + buttonButtonHgroup— heading group + buttonButtonParagraph— paragraph + buttonIconHeading— icon + headingIconButtonHeading— heading + icon buttonIconButtonHgroup— heading group + icon buttonIconHgroup— icon + heading groupImgHeading— image + headingImgHgroup— image + heading groupImgHeadingButton— image + heading as buttonValueHeading— heading + unit/value on rightIcontextLink— icon + text as linkIconTextSet— list of icon + text pairsSectionHeader— section header with icon buttons
ButtonHeading: {
H: { tag: 'h5', text: 'Team members' },
Button: { text: 'Invite', theme: 'primary' }
}ButtonHgroup: {
H: { text: 'Upgrade plan' },
P: { text: 'Get access to all features' },
Button: { text: 'Upgrade' }
}ButtonParagraph: { P: { text: "Didn't receive the code?" }, Button: { text: 'Resend' } }IconHeading: { Icon: { name: 'star', fontSize: 'C' }, H: { tag: 'h5', text: 'Featured' } }IconHgroup: {
Icon: { name: 'logo', display: 'block' },
H: { text: 'Symbols' },
P: { text: 'Design system toolkit' }
}ValueHeading: {
H: { tag: 'h6', text: 'Revenue' },
UnitValue: { Unit: { text: '$' }, Value: { text: '1,200' } }
}IcontextLink: { Icon: { name: 'twitter', fontSize: 'B' }, text: 'Follow on Twitter' }IconTextSet: {
children: [
{ Icon: { name: 'phone' }, text: '+1 (555) 123-4567' },
{ Icon: { name: 'mail' }, text: 'hello@example.com' }
]
}SectionHeader: {
Hgroup: { H: { text: 'Recent activity' } },
IconButtonSet: { children: [{ Icon: { name: 'filter' } }] }
}Selection components come in three flavors — Check, Radio, Toggle — each available in caption, heading group, and list variants.
CheckCaption/RadioCaption/ToggleCaption— selectable item with short labelCheckCaptionList/RadioCaptionList/ToggleCaptionList— stacked list of caption itemsCheckHgroup/RadioHgroup/ToggleHgroup— selectable item with title + descriptionCheckHgroupList/RadioHgroupList/ToggleHgroupList— stacked list of hgroup itemsCheckStep/RadioStep— step in a stepper flow with progress barCheckStepSet/RadioSteps— full stepper with multiple stepsRadioMark— standalone custom radio circle visual
CheckCaption: { Caption: { text: 'Accept terms' } }
RadioCaption: { Caption: { text: 'Option A' } }
ToggleCaption: { Caption: { text: 'Enable notifications' } }CheckHgroup: { H: { text: 'Weekly digest' }, P: { text: 'Receive a summary every Monday' } }ToggleHgroupList: {
children: [
{ H: { text: 'Email alerts' }, P: { text: 'Sent daily' } },
{ H: { text: 'Push notifications' }, P: { text: 'Instant' } }
]
}RadioSteps: {
children: [
{ H6: { text: 'Account info' }, RadioMark: { isActive: true } },
{ H6: { text: 'Payment' } },
{ H6: { text: 'Confirm' } }
]
}Progress— linear progress barCircleProgress— circular progress indicatorValueProgress— progress bar + unit/valueValueCircleProgress— circular progress + centered valueProgressStepSet— multiple progress bars for stepsHgroupSteps— heading group with step progress barsStatusDot— small colored status dotStars— 5-star rating
Common props: value (0–1), height, minWidth, round, theme
Progress: { value: 0.6, height: 'X', round: 'Y' }CircleProgress: { value: 0.73, boxSize: 'D' }ValueProgress: {
Progress: { value: 0.73 },
UnitValue: { Value: { text: '73' }, Unit: { text: '%' } }
}ProgressStepSet: { children: [{ value: 1 }, { value: 0.4 }, { value: 0 }] }HgroupSteps: {
H: { text: 'Getting started' },
P: { text: 'Complete these steps' },
ProgressStepSet: { children: [{ value: 1 }, { value: 0.5 }, { value: 0 }] }
}StatusDot: { theme: 'success' }Stars: { children: [{ name: 'star' }, { name: 'star' }, { name: 'star' }, { name: 'star' }, { name: 'star' }] }Link— hyperlinkLinkSet— navigation list of linksLinkHgroup— heading group + linkLinkParagraph— paragraph + inline linkIcontextLink— icon + text link (see Composition)Breadcrumb— breadcrumb pathNavigationDots— dot-based carousel indicatorNavigationArrows— previous/next arrow buttonsPagination— numbered page controlsTabSet— tab bar navigationScrollableList— scrollable menu list
Link: { text: 'Read more', href: '/article' }LinkSet: {
tag: 'nav',
children: [{ text: 'Home', href: '/' }, { text: 'Docs', href: '/docs' }]
}LinkHgroup: {
H: { text: 'Tbilisi' },
P: { text: 'Georgia' },
Link: { text: 'Get directions', href: '#' }
}LinkParagraph: {
P: { text: 'By continuing you agree to our' },
Link: { text: 'Privacy Policy', href: '/privacy', textDecoration: 'underline' }
}NavigationDots: { children: [{}, { isActive: true }, {}] }NavigationArrows: {
children: [{ Icon: { name: 'chevronLeft' } }, { Icon: { name: 'chevronRight' } }]
}Pagination: {
Flex: { children: [{ text: '1', isActive: true }, { text: '2' }, { text: '3' }] }
}TabSet: {
children: [{ text: 'Overview', isActive: true }, { text: 'Details' }, { text: 'Reviews' }]
}ScrollableList: {
Flex: { maxHeight: 'D2', children: [{ text: 'Item One' }, { text: 'Item Two' }] }
}Modal— modal dialog containerMessageModal— modal with a message heading and bodyAccordion— expandable/collapsible section
Modal: {
Hgroup: { H: { text: 'Confirm action' } },
IconButton: { Icon: { name: 'x' } }
}MessageModal: {
Hgroup: {
H: { text: 'Account deleted' },
P: { text: 'Your account has been permanently removed.' }
}
}Common props: ButtonParagraph.P.text (header), P.text (body), state.activeAccordion
Accordion: {
ButtonParagraph: { P: { text: 'How does billing work?' } },
P: { text: 'You are billed monthly…' }
}UnitValue— unit + value pair (price, stat, etc.)BulletCaption— caption with colored bullet dotStoryCard— large image card with overlaid contentListingItem— post/listing row itemPackageFeatureItem— feature row in a pricing cardUserNavbar— user profile row in navbarLayerSimple— card with title and checklistLoadingGif— animated loading indicator
UnitValue: { Unit: { text: '$' }, Value: { text: '99' } }BulletCaption: { text: 'Orders', ':before': { background: 'blue' } }UserNavbar: { H: { text: 'Nika Tomadze' }, P: { text: 'Product Designer' } }LayerSimple: {
Title: { text: 'Today' },
Flex: { children: [{ Icon: { icon: 'check' }, Span: { text: 'Morning standup' } }] }
}LoadingGif: { opacity: '.5', boxSize: 'B' }Primary use: custom scrollbar track with optional arrow navigation.
Scrollbar: { NavigationArrows: {} }All default components inherit the same cross-cutting capabilities as built-in atoms:
@mediakeys (e.g.@mobile)- pseudo selectors (e.g.
:hover,:focus) - conditional cases (e.g.
.isActive,!isDisabled) childPropsfor one-level child overrideschildrenarrays or nested object treesonInit,onRender,onUpdate,onStateUpdatestatefor local component state