Package Exports
- @useloops/design-system-19
- @useloops/design-system-19/BrandCore
- @useloops/design-system-19/BrandCore/Icon
- @useloops/design-system-19/Marketing
- @useloops/design-system-19/Marketing/PlanFeatureTable
- @useloops/design-system-19/Marketing/PlanTierCard
- @useloops/design-system-19/Marketing/TickGroup
- @useloops/design-system-19/Platform
- @useloops/design-system-19/Platform/AIInsight
- @useloops/design-system-19/Platform/AISummary
- @useloops/design-system-19/Platform/AIWrittenByLockUp
- @useloops/design-system-19/Platform/AiContentContainer
- @useloops/design-system-19/Platform/AssetItem
- @useloops/design-system-19/Platform/AuthContainerSurface
- @useloops/design-system-19/Platform/ClipboardCopyingOverlay
- @useloops/design-system-19/Platform/CommentCard
- @useloops/design-system-19/Platform/DataPointInfo
- @useloops/design-system-19/Platform/DemographicSelectionSection
- @useloops/design-system-19/Platform/EmojiListItem
- @useloops/design-system-19/Platform/EmojiQuestionEditorOption
- @useloops/design-system-19/Platform/EmptyStateCard
- @useloops/design-system-19/Platform/ExtendedTestStatus
- @useloops/design-system-19/Platform/FilterCount
- @useloops/design-system-19/Platform/FilterGroupAccordion
- @useloops/design-system-19/Platform/FilterPyramidGraph
- @useloops/design-system-19/Platform/FilterRow
- @useloops/design-system-19/Platform/FilteredItemsCard
- @useloops/design-system-19/Platform/ForgotYourPassword
- @useloops/design-system-19/Platform/GraphBar
- @useloops/design-system-19/Platform/Header
- @useloops/design-system-19/Platform/KpiDataPopover
- @useloops/design-system-19/Platform/KpiIndicator
- @useloops/design-system-19/Platform/LinkExpired
- @useloops/design-system-19/Platform/LoginForm
- @useloops/design-system-19/Platform/LoopItem
- @useloops/design-system-19/Platform/LoopItemEmpty
- @useloops/design-system-19/Platform/MFACodeVerify
- @useloops/design-system-19/Platform/Navigation
- @useloops/design-system-19/Platform/OnboardingCard
- @useloops/design-system-19/Platform/PaginationControl
- @useloops/design-system-19/Platform/ProjectItem
- @useloops/design-system-19/Platform/QuestionBlock
- @useloops/design-system-19/Platform/QuestionLabel
- @useloops/design-system-19/Platform/QuestionSelector
- @useloops/design-system-19/Platform/ResetPassword
- @useloops/design-system-19/Platform/SearchInput
- @useloops/design-system-19/Platform/SectionHeader
- @useloops/design-system-19/Platform/SentimentArrow
- @useloops/design-system-19/Platform/SignUpForm
- @useloops/design-system-19/Platform/SliderGraph
- @useloops/design-system-19/Platform/Tab
- @useloops/design-system-19/Platform/TestItem
- @useloops/design-system-19/Platform/TestKPICard
- @useloops/design-system-19/Platform/TestStatus
- @useloops/design-system-19/Platform/VideoControls
- @useloops/design-system-19/WebCore
- @useloops/design-system-19/WebCore/Accordion
- @useloops/design-system-19/WebCore/AnnualController
- @useloops/design-system-19/WebCore/AuthFormHeader
- @useloops/design-system-19/WebCore/Avatar
- @useloops/design-system-19/WebCore/AvatarGroup
- @useloops/design-system-19/WebCore/Badge
- @useloops/design-system-19/WebCore/BrandBadge
- @useloops/design-system-19/WebCore/Breadcrumb
- @useloops/design-system-19/WebCore/BulletGraphic
- @useloops/design-system-19/WebCore/Button
- @useloops/design-system-19/WebCore/ButtonBase
- @useloops/design-system-19/WebCore/Checkbox
- @useloops/design-system-19/WebCore/CheckboxGroup
- @useloops/design-system-19/WebCore/ColorBackgroundContainer
- @useloops/design-system-19/WebCore/CreatableAutocomplete
- @useloops/design-system-19/WebCore/CustomField
- @useloops/design-system-19/WebCore/Differential
- @useloops/design-system-19/WebCore/DropdownMenu
- @useloops/design-system-19/WebCore/EmojiWrapper
- @useloops/design-system-19/WebCore/ExpandableTypographyClamp
- @useloops/design-system-19/WebCore/Flag
- @useloops/design-system-19/WebCore/FormControlLabel
- @useloops/design-system-19/WebCore/FormGenerator
- @useloops/design-system-19/WebCore/GridOverlay
- @useloops/design-system-19/WebCore/Html
- @useloops/design-system-19/WebCore/HtmlParser
- @useloops/design-system-19/WebCore/IconButton
- @useloops/design-system-19/WebCore/IconButtonBase
- @useloops/design-system-19/WebCore/IconButtonGroup
- @useloops/design-system-19/WebCore/Image
- @useloops/design-system-19/WebCore/InputFieldBase
- @useloops/design-system-19/WebCore/InputLabel
- @useloops/design-system-19/WebCore/InputLabelBase
- @useloops/design-system-19/WebCore/InputLabelHelp
- @useloops/design-system-19/WebCore/Label
- @useloops/design-system-19/WebCore/Likert
- @useloops/design-system-19/WebCore/Link
- @useloops/design-system-19/WebCore/Loader
- @useloops/design-system-19/WebCore/Logo
- @useloops/design-system-19/WebCore/LoopsAiButton
- @useloops/design-system-19/WebCore/Markdown
- @useloops/design-system-19/WebCore/Menu
- @useloops/design-system-19/WebCore/ModalLayout
- @useloops/design-system-19/WebCore/NavigationButton
- @useloops/design-system-19/WebCore/Nudge
- @useloops/design-system-19/WebCore/NumberField
- @useloops/design-system-19/WebCore/Pill
- @useloops/design-system-19/WebCore/Popper
- @useloops/design-system-19/WebCore/PoweredByWatermarkLogo
- @useloops/design-system-19/WebCore/Progress
- @useloops/design-system-19/WebCore/ProgressBar
- @useloops/design-system-19/WebCore/Radio
- @useloops/design-system-19/WebCore/RadioGroup
- @useloops/design-system-19/WebCore/Rank
- @useloops/design-system-19/WebCore/RankItem
- @useloops/design-system-19/WebCore/RichTextField
- @useloops/design-system-19/WebCore/Select
- @useloops/design-system-19/WebCore/Skeleton
- @useloops/design-system-19/WebCore/Slider
- @useloops/design-system-19/WebCore/SortableList
- @useloops/design-system-19/WebCore/StarRating
- @useloops/design-system-19/WebCore/Surface
- @useloops/design-system-19/WebCore/Switch
- @useloops/design-system-19/WebCore/TextBarDivider
- @useloops/design-system-19/WebCore/TextField
- @useloops/design-system-19/WebCore/Textarea
- @useloops/design-system-19/WebCore/Toast
- @useloops/design-system-19/WebCore/Tooltip
- @useloops/design-system-19/WebCore/TrialCard
- @useloops/design-system-19/WebCore/Typography
- @useloops/design-system-19/WebCore/UserMenu
- @useloops/design-system-19/WebCore/VideoModal
- @useloops/design-system-19/package.json
- @useloops/design-system-19/theme
- @useloops/design-system-19/utils
Readme
@useloops/design-system
The design system for the Loops platform and marketing website.
Generating new components
New components can be generated using npm run component
.
Synchronising icons with Figma
- Create a personal access token in Figma in Settings > Security > Personal access tokens
- Create
.env
file inscripts/useloops-icon-generator/.env
- Install packages:
cd scripts/useloops-icon-generator && npm install
- Run
npm run icons
from the root dir - Check the Brand Core/Icons story in storybook, verify expected icons have been updated
Importing from @useloops/design-system
This package now supports both barrel imports and individual component imports for better tree-shaking and reduced bundle sizes.
Import Methods
1. Barrel Import (Default - imports everything)
import { Button, Avatar, Typography } from '@useloops/design-system';
2. System-Level Imports
Import all components from a specific system:
// WebCore components
import { Button, Avatar, Typography } from '@useloops/design-system/WebCore';
// Platform components
import { Navigation, Header, KpiIndicator } from '@useloops/design-system/Platform';
// BrandCore
import { Icon } from '@useloops/design-system/BrandCore';
// Marketing components
import { PlanTierCard, TickGroup } from '@useloops/design-system/Marketing';
// Theme
import { ThemeProvider, useTheme } from '@useloops/design-system/theme';
// Utils
import { emailValidation, passwordValidation } from '@useloops/design-system/utils';
3. Individual Component Imports (Best for tree-shaking)
Import components individually for optimal bundle size:
import Button from '@useloops/design-system/WebCore/Button';
import Avatar from '@useloops/design-system/WebCore/Avatar';
import Typography from '@useloops/design-system/WebCore/Typography';
import TextField from '@useloops/design-system/WebCore/TextField';
// Platform components
import Navigation from '@useloops/design-system/Platform/Navigation';
import KpiIndicator from '@useloops/design-system/Platform/KpiIndicator';
// BrandCore components
import Icon from '@useloops/design-system/BrandCore/Icon';
// Marketing components
import PlanTierCard from '@useloops/design-system/Marketing/PlanTierCard';
Benefits of Individual Imports
- Smaller Bundle Size: Only include the components you actually use
- Faster Build Times: Less code to process during bundling
- Better Tree-Shaking: Modern bundlers can more easily eliminate unused code
- Clearer Dependencies: Explicitly see which components are being used
Migration Guide
To migrate from barrel imports to individual imports:
Before:
import { Button, Avatar, Typography, TextField } from '@useloops/design-system';
After (Option 1 - System Level):
import { Button, Avatar, Typography, TextField } from '@useloops/design-system/WebCore';
After (Option 2 - Individual):
import Button from '@useloops/design-system/WebCore/Button';
import Avatar from '@useloops/design-system/WebCore/Avatar';
import Typography from '@useloops/design-system/WebCore/Typography';
import TextField from '@useloops/design-system/WebCore/TextField';
Available Systems
- BrandCore: Brand-specific components (Icon)
- Marketing: Marketing page components (PlanTierCard, TickGroup, PlanFeatureTable)
- Platform: Platform-specific components (Navigation, Header, KpiIndicator, etc.)
- WebCore: Core web components (Button, Avatar, TextField, Typography, etc.)
- theme: Theme configuration and provider
- utils: Utility functions and validation helpers
TypeScript Support
All import methods include full TypeScript support with proper type definitions:
import Button, { ButtonProps } from '@useloops/design-system/WebCore/Button';
import { ThemeProvider } from '@useloops/design-system/theme';