diff --git a/.changeset/dropdown-hover-only.md b/.changeset/dropdown-hover-only.md new file mode 100644 index 000000000..0331ca3aa --- /dev/null +++ b/.changeset/dropdown-hover-only.md @@ -0,0 +1,5 @@ +--- +'@tiny-design/react': patch +--- + +Normalize Dropdown overlay menus to hover-only feedback and align grouped popup item styling with the rest of the dropdown menu. diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 000000000..f52a834ad --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,45 @@ +# Repository Guidelines + +## Project Structure & Module Organization +This repository is a `pnpm` workspace managed with Turborepo. Core packages live under `packages/`: + +- `packages/react`: main React component library (`src/`, component styles, demos, and Jest tests) +- `packages/icons`, `packages/tokens`, `packages/cli`, `packages/mcp`, `packages/charts`: supporting packages +- `apps/docs`: Vite-powered documentation site and Playwright visual tests + +Common root config lives in `turbo.json`, `eslint.config.mjs`, `.prettierrc`, and `.stylelintrc`. Changesets are stored in `.changeset/`. + +## Build, Test, and Development Commands +- `pnpm install`: install workspace dependencies; Node `>=22` is required. +- `pnpm dev`: run workspace dev tasks through Turbo; primarily used for the docs app. +- `pnpm build`: build all packages. +- `pnpm test`: run package test suites through Turbo. +- `pnpm test:visual`: run Playwright visual tests from `apps/docs/tests/visual`. +- `pnpm lint`: run ESLint across workspace packages. +- `pnpm lint:style`: run Stylelint for SCSS sources. + +For package-specific work, prefer filtering: +`pnpm --filter @tiny-design/react test` or `pnpm --filter @tiny-design/react lint`. + +## Coding Style & Naming Conventions +Use TypeScript with 2-space indentation, semicolons, single quotes, and `printWidth: 100` per `.prettierrc`. Run Prettier before submitting changes. + +React source lives mainly in `packages/react/src`. Follow existing component patterns: +- component folders in kebab-case, for example `packages/react/src/date-picker/` +- public exports in each component `index.tsx` and again in `packages/react/src/index.ts` +- SCSS class names prefixed with `ty-` + +Linting uses ESLint 9 for TypeScript/React and Stylelint for SCSS. + +## Testing Guidelines +Jest is used for unit tests; place tests in `src/__tests__/` or the package’s existing test location and name files `*.test.ts` or `*.test.tsx`. Use Playwright for docs visual regression coverage. + +Run: +- `pnpm test` +- `pnpm --filter @tiny-design/react test:coverage` +- `pnpm test:visual` + +## Commit & Pull Request Guidelines +Recent history favors short Conventional Commit-style subjects such as `fix(react): ...`, `feat(button): ...`, or `chore: ...`. Keep commits focused and imperative. + +PRs should include a clear summary, linked issue when applicable, and screenshots or visual diffs for UI/docs changes. Add or update tests for behavioral changes. For user-facing package changes, create a changeset with `pnpm changeset` and commit the generated file. diff --git a/apps/docs/src/containers/home/home.scss b/apps/docs/src/containers/home/home.scss index 71a74153e..e2bbdbbf2 100755 --- a/apps/docs/src/containers/home/home.scss +++ b/apps/docs/src/containers/home/home.scss @@ -11,6 +11,13 @@ } .home { + --home-surface-base: color-mix(in srgb, var(--ty-color-bg-elevated) 90%, var(--ty-color-primary) 10%); + --home-surface-soft: color-mix(in srgb, var(--ty-color-fill) 86%, var(--ty-color-primary) 14%); + --home-surface-strong: color-mix(in srgb, var(--ty-color-bg-elevated) 76%, var(--ty-color-primary) 24%); + --home-border-strong: color-mix(in srgb, var(--ty-color-border-secondary) 68%, var(--ty-color-primary) 32%); + --home-border-soft: color-mix(in srgb, var(--ty-color-border-secondary) 84%, var(--ty-color-primary) 16%); + --home-shadow-ambient: color-mix(in srgb, var(--ty-color-primary) 18%, transparent); + --home-shadow-depth: color-mix(in srgb, var(--ty-color-text) 10%, transparent); padding-top: $header-height; position: relative; overflow: hidden; @@ -47,9 +54,9 @@ &__hero { position: relative; z-index: 1; - max-width: 960px; + max-width: 1200px; margin: 0 auto; - padding: 100px 40px 60px; + padding: 84px 40px 44px; text-align: center; } @@ -88,7 +95,7 @@ background: linear-gradient( 135deg, var(--ty-color-primary) 0%, - color-mix(in srgb, var(--ty-color-primary) 60%, #8B5CF6) 100% + color-mix(in srgb, var(--ty-color-primary) 62%, var(--ty-color-info)) 100% ); -webkit-background-clip: text; -webkit-text-fill-color: transparent; @@ -99,13 +106,14 @@ font-size: clamp(16px, 2vw, 20px); color: var(--ty-color-text-secondary); line-height: 1.6; - margin: 20px auto 0; - max-width: 520px; + margin: 18px auto 0; + max-width: 660px; } &__hero-actions { - margin-top: 36px; + margin-top: 28px; justify-content: center; + flex-wrap: wrap; } &__btn-primary { @@ -126,7 +134,7 @@ display: flex; justify-content: center; gap: 48px; - margin-top: 64px; + margin-top: 36px; animation: fadeInUp 0.6s ease 0.2s both; } @@ -188,41 +196,402 @@ line-height: 1.6; } - // ─── Component Showcase ─── - &__showcase-grid { + &__product-shell { display: grid; - grid-template-columns: repeat(3, 1fr); + grid-template-columns: 260px minmax(0, 1fr); + gap: 18px; + margin-top: 28px; + padding: 18px; + border-radius: 30px; + border: 1px solid var(--home-border-strong); + background: + linear-gradient(180deg, var(--home-surface-base) 0%, var(--home-surface-soft) 100%); + box-shadow: + 0 32px 120px var(--home-shadow-ambient), + 0 16px 40px var(--home-shadow-depth); + overflow: hidden; + text-align: left; + } + + &__product-sidebar, + &__product-main { + min-width: 0; + } + + &__product-sidebar { + padding: 18px; + border-radius: 22px; + background: + linear-gradient(180deg, var(--home-surface-strong) 0%, var(--home-surface-base) 100%); + border: 1px solid var(--home-border-strong); + box-shadow: inset 0 1px 0 color-mix(in srgb, var(--ty-color-bg-elevated) 60%, transparent); + } + + &__product-brand { + display: flex; + align-items: center; gap: 12px; + + strong, + span { + display: block; + } + + strong { + font-size: 15px; + color: var(--ty-color-text); + } + + span { + margin-top: 2px; + font-size: 12px; + color: var(--ty-color-text-secondary); + } } - &__showcase-card { - padding: 20px; + &__product-nav { + display: flex; + flex-direction: column; + gap: 8px; + margin-top: 24px; + } + + &__product-nav-item { + display: flex; + align-items: center; + gap: 10px; + width: 100%; + padding: 12px 14px; + border: 1px solid transparent; border-radius: 14px; - border: 1px solid var(--ty-color-border-secondary); - background: var(--ty-color-bg-elevated); - transition: border-color 0.2s, box-shadow 0.2s; - animation: fadeInUp 0.5s ease both; + background: transparent; + color: var(--ty-color-text-secondary); + cursor: pointer; + font: inherit; + transition: all 0.2s ease; &:hover { - border-color: var(--ty-color-border); - box-shadow: 0 4px 20px rgba(0, 0, 0, 0.04); + background: color-mix(in srgb, var(--ty-color-bg-elevated) 80%, transparent); + color: var(--ty-color-text); } - &_wide { - grid-column: span 2; + &_active { + border-color: color-mix(in srgb, var(--ty-color-primary) 16%, transparent); + background: color-mix(in srgb, var(--ty-color-fill) 76%, var(--ty-color-primary) 24%); + color: var(--ty-color-text); } } - &__showcase-label { - display: block; + &__product-sidebar-card { + margin-top: 22px; + border-color: var(--home-border-soft); + background: var(--home-surface-soft); + box-shadow: none; + + .ty-card__body { + padding: 20px; + } + + .ty-typography { + margin: 12px 0 16px; + font-size: 13px; + line-height: 1.6; + color: var(--ty-color-text-secondary); + } + } + + &__product-sidebar-kicker { font-size: 11px; font-weight: 700; + letter-spacing: 0.08em; text-transform: uppercase; - letter-spacing: 0.06em; color: var(--ty-color-text-tertiary); + } + + &__product-swatches { + display: flex; + gap: 10px; + margin-top: 14px; + } + + &__product-swatch { + width: 16px; + height: 16px; + border-radius: 50%; + box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--ty-color-text) 10%, transparent); + + &_primary { background: var(--ty-color-primary); } + &_info { background: var(--ty-color-info); } + &_success { background: var(--ty-color-success); } + &_warning { background: var(--ty-color-warning); } + } + + &__avatar { + color: #fff; + + &_primary { background: var(--ty-color-primary); } + &_info { background: var(--ty-color-info); } + &_success { background: var(--ty-color-success); } + } + + &__product-main { + padding: 6px; + position: relative; + + &::before { + content: ''; + position: absolute; + inset: 0; + border-radius: 22px; + background: + radial-gradient(circle at top right, color-mix(in srgb, var(--ty-color-primary) 14%, transparent), transparent 36%); + pointer-events: none; + } + } + + &__product-descriptions { + margin-top: 16px; + } + + &__product-topbar { + display: flex; + align-items: center; + justify-content: space-between; + gap: 16px; + margin-bottom: 16px; + } + + &__product-search { + flex: 1; + } + + &__product-metrics { + display: grid; + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 12px; + margin-bottom: 12px; + } + + &__product-metric, + &__product-panel, + &__scenario-card, + &__coverage-card { + border-radius: 20px; + box-shadow: none; + } + + &__product-metric { + border-color: var(--home-border-soft); + background: var(--home-surface-soft); + + .ty-card__body { + display: flex; + flex-direction: column; + gap: 12px; + } + + .ty-statistic__content { + font-family: $font-display; + font-size: 28px; + line-height: 1; + } + } + + &__product-pills { + display: flex; + gap: 8px; + flex-wrap: wrap; + } + + &__product-panels { + display: grid; + grid-template-columns: 1.55fr 1fr; + gap: 12px; + } + + &__product-panel { + min-width: 0; + border-color: var(--home-border-soft); + background: var(--home-surface-base); + + .ty-card__header { + align-items: center; + font-family: $font-display; + font-size: 18px; + letter-spacing: -0.01em; + background: transparent; + } + + .ty-card__body { + display: flex; + flex-direction: column; + gap: 16px; + } + } + + &__product-panel_wide { + .ty-tabs { + margin-bottom: 4px; + } + } + + &__product-panel_activity { + margin-top: 12px; + + .ty-card__body { + gap: 0; + } + + .ty-timeline { + margin: 0; + } + } + + &__product-activity-item { + display: flex; + flex-direction: column; + gap: 4px; + padding-bottom: 6px; + + strong { + font-size: 13px; + color: var(--ty-color-text); + } + + span { + font-size: 12px; + line-height: 1.6; + color: var(--ty-color-text-secondary); + } + } + + &__scenario-grid { + display: grid; + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 16px; + } + + &__scenario-card { + min-height: 280px; + border-color: var(--home-border-soft); + background: + linear-gradient(180deg, var(--home-surface-base) 0%, var(--ty-color-bg-elevated) 100%); + transition: transform 0.2s ease, border-color 0.2s ease, box-shadow 0.2s ease; + + .ty-card__body { + display: flex; + flex-direction: column; + justify-content: space-between; + min-height: 280px; + padding: 24px; + } + + &:hover { + transform: translateY(-3px); + border-color: var(--ty-color-border); + box-shadow: 0 18px 40px color-mix(in srgb, var(--ty-color-text) 8%, transparent); + } + } + + &__scenario-kicker { + display: inline-flex; margin-bottom: 14px; } + &__scenario-title.ty-typography { + margin: 0; + font-family: $font-display; + font-size: 24px; + line-height: 1.1; + letter-spacing: -0.02em; + color: var(--ty-color-text); + } + + &__scenario-desc.ty-typography { + margin: 12px 0 0; + font-size: 14px; + line-height: 1.7; + color: var(--ty-color-text-secondary); + } + + &__scenario-preview { + display: flex; + flex-direction: column; + gap: 14px; + margin-top: 24px; + padding: 18px; + border-radius: 16px; + background: var(--home-surface-soft); + border: 1px solid var(--home-border-soft); + } + + &__scenario-preview { + .ty-statistic__content { + font-family: $font-display; + font-size: 30px; + line-height: 1; + } + } + + &__scenario-bars { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + align-items: end; + min-height: 120px; + + span { + display: block; + border-radius: 999px 999px 10px 10px; + background: linear-gradient(180deg, color-mix(in srgb, var(--ty-color-primary) 70%, var(--ty-color-bg-elevated)) 0%, var(--ty-color-primary) 100%); + } + } + + &__coverage-grid { + display: grid; + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 14px; + } + + &__coverage-card { + border: 1px solid var(--home-border-soft); + background: var(--home-surface-base); + + .ty-card__body { + padding: 22px; + } + } + + &__coverage-title.ty-typography { + margin: 0; + font-family: $font-display; + font-size: 20px; + color: var(--ty-color-text); + } + + &__coverage-desc.ty-typography { + margin: 10px 0 0; + font-size: 14px; + line-height: 1.7; + color: var(--ty-color-text-secondary); + } + + &__coverage-summary { + grid-column: 1 / -1; + display: flex; + align-items: center; + justify-content: space-between; + gap: 16px; + padding: 22px 2px 0; + + span { + max-width: 720px; + font-size: 14px; + line-height: 1.7; + color: var(--ty-color-text-secondary); + } + } + // ─── Code Example ─── &__code-split { display: grid; @@ -449,7 +818,7 @@ &:hover { border-color: var(--ty-color-border); - box-shadow: 0 2px 12px rgba(0, 0, 0, 0.04); + box-shadow: 0 2px 12px color-mix(in srgb, var(--ty-color-text) 8%, transparent); } code { @@ -536,7 +905,7 @@ &:hover { border-color: var(--ty-color-border); - box-shadow: 0 4px 16px rgba(0, 0, 0, 0.06); + box-shadow: 0 4px 16px color-mix(in srgb, var(--ty-color-text) 10%, transparent); transform: translateY(-2px); } @@ -549,7 +918,7 @@ width: 20px; height: 20px; border-radius: 50%; - border: 1px solid rgba(0, 0, 0, 0.08); + border: 1px solid color-mix(in srgb, var(--ty-color-text) 10%, transparent); } &__marquee-name { @@ -567,6 +936,27 @@ // ─── Responsive ─── @media (max-width: $size-xl) { + &__product-shell { + grid-template-columns: 1fr; + } + + &__product-sidebar { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 18px; + align-items: start; + } + + &__product-nav, + &__product-sidebar-card { + margin-top: 0; + } + + &__scenario-grid, + &__coverage-grid { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + &__features-row { grid-template-columns: repeat(2, 1fr); } @@ -574,7 +964,7 @@ @media (max-width: $size-md) { &__hero { - padding: 60px 24px 40px; + padding: 56px 24px 32px; } &__hero-stats { @@ -582,19 +972,36 @@ flex-wrap: wrap; } - &__hero-stat-value { font-size: 24px; } - - &__section { padding: 48px 0; } - &__section-inner { padding: 0 24px; } + &__product-shell { + margin-top: 24px; + padding: 14px; + border-radius: 22px; + } - &__showcase-grid { + &__product-sidebar { grid-template-columns: 1fr; + padding: 16px; + border-radius: 18px; } - &__showcase-card_wide { - grid-column: span 1; + &__product-topbar, + &__coverage-summary { + flex-direction: column; + align-items: stretch; + } + + &__product-metrics, + &__product-panels, + &__scenario-grid, + &__coverage-grid { + grid-template-columns: 1fr; } + &__hero-stat-value { font-size: 24px; } + + &__section { padding: 48px 0; } + &__section-inner { padding: 0 24px; } + &__code-split { grid-template-columns: 1fr; } @@ -608,7 +1015,7 @@ @media (max-width: $size-sm) { &__hero { - padding: 40px 20px 30px; + padding: 36px 20px 26px; } &__hero-badge { @@ -622,7 +1029,7 @@ &__hero-stats { gap: 16px 28px; - margin-top: 40px; + margin-top: 28px; } &__hero-stat-value { font-size: 22px; } @@ -634,6 +1041,19 @@ &__section-title { font-size: 22px; } &__section-subtitle { font-size: 14px; } + &__product-metric .ty-statistic__content { + font-size: 24px; + } + + &__scenario-card, + &__coverage-card { + border-radius: 16px; + } + + &__scenario-title { + font-size: 20px; + } + &__code-block { border-radius: 10px; } @@ -689,7 +1109,7 @@ @media (max-width: $size-xs) { &__hero { - padding: 32px 16px 24px; + padding: 28px 16px 22px; } &__hero-heading { font-size: 28px; } @@ -713,15 +1133,24 @@ &__section-inner { padding: 0 12px; } &__section-header { margin-bottom: 24px; } - &__showcase-card { - padding: 16px; - border-radius: 10px; - } - &__features-row { gap: 10px; } + &__product-shell { + padding: 10px; + border-radius: 16px; + } + + &__product-main { + padding: 0; + } + + &__scenario-card .ty-card__body { + min-height: auto; + padding: 18px; + } + &__cta-install { flex-direction: column; gap: 8px; diff --git a/apps/docs/src/containers/home/index.tsx b/apps/docs/src/containers/home/index.tsx index c466d24f7..3add76b6c 100755 --- a/apps/docs/src/containers/home/index.tsx +++ b/apps/docs/src/containers/home/index.tsx @@ -7,12 +7,14 @@ import { LightCodeTheme, DarkCodeTheme } from '../../components/demo-block/code- import * as TinyDesign from '@tiny-design/react'; import * as TinyIcons from '@tiny-design/icons'; import { - Button, Flex, Tag, Switch, Badge, Avatar, Progress, Rate, Input, Tabs, - Slider, Tooltip, Checkbox, Radio, Keyboard, useTheme, + Button, Flex, Tag, Badge, Avatar, Progress, Rate, Input, Tabs, + Tooltip, Checkbox, Keyboard, useTheme, Card, Heading, Paragraph, + Statistic, Descriptions, Table, Timeline, } from '@tiny-design/react'; import { - IconGithub, IconSearch, IconCheckmark, - IconColorlens, IconCode, IconPuzzle, IconAccessible, + IconGithub, IconSearch, IconCheckmark, IconArrowRight, + IconColorlens, IconStructure, IconCheckCircle, IconFire, IconStatistics, + IconSettings, IconCalendar, IconComment, IconCreditCard, } from '@tiny-design/icons'; import { Footer } from './footer'; import { ThemeShowcase } from './theme-showcase'; @@ -23,127 +25,269 @@ import logoSvg from '../../assets/logo/logo.svg'; const { repository } = pkg; -// ─── Component Showcase Section ─── -const ComponentShowcase = (): React.ReactElement => { - const [switchVal, setSwitchVal] = useState(true); - const [sliderVal, setSliderVal] = useState(40); +const productRows = [ + { key: '1', name: 'Acme Inc.', owner: 'Design', status: Healthy }, + { key: '2', name: 'Northstar', owner: 'Growth', status: Review }, + { key: '3', name: 'Helio', owner: 'Ops', status: Live }, +]; + +const categoryGroups = [ + { title: 'Foundation', items: 'Button, Icon, Typography, Link' }, + { title: 'Layout', items: 'Flex, Grid, Split, Space' }, + { title: 'Navigation', items: 'Tabs, Menu, Breadcrumb, Pagination' }, + { title: 'Forms', items: 'Input, Select, Date Picker, Checkbox' }, + { title: 'Data Display', items: 'Card, Table, Timeline, Charts' }, + { title: 'Feedback', items: 'Modal, Notification, Tooltip, Drawer' }, +]; + +const activityItems = [ + { key: '1', color: 'var(--ty-color-success)', title: 'Theme tokens synced', desc: 'Studio Bloom updated across docs and dashboard previews.' }, + { key: '2', color: 'var(--ty-color-info)', title: 'Checkout flow reviewed', desc: 'Input, validation, and action states passed the latest visual pass.' }, + { key: '3', color: 'var(--ty-color-primary)', title: 'Release candidate prepared', desc: '86+ components bundled for the next internal release.' }, +]; + +const ProductPreview = ({ s }: { s: any }): React.ReactElement => { const [rateVal, setRateVal] = useState(4); return ( -
- {/* Card 1: Buttons */} -
- Buttons - - - - - - - - -
- - {/* Card 2: Tags */} -
- Tags - - Default - #f50 - Success - Warning - Danger - Info - +
+
+
+ logo +
+ Tiny UI + {s.home.preview.workspace} +
+
+
+ + + +
+ + +
{s.home.preview.activeTheme}
+
+ + + + +
+ + {s.home.preview.themeValue} + {s.home.preview.tokensValue} + + {s.home.preview.themeHint} + +
+
- {/* Card 3: Toggle & Slider */} -
- Controls - - - - - {switchVal ? 'Enabled' : 'Disabled'} - +
+
+ } + className="home__product-search" + /> + + +
- - {/* Card 4: Avatars & Badge */} -
- Avatars - - - A - B - C - D - E - - - U - - -
- - {/* Card 5: Input */} -
- Input - } /> -
- - {/* Card 6: Progress & Rate */} -
- Feedback - - - - -
+
- {/* Card 7: Tabs */} -
- Tabs - -
+
+ + + + + + + + + +
+ Stable + Typed +
+
+
+ + + + + + +
- {/* Card 8: Checkbox & Radio */} -
- Selection - - Remember me - - Option A - Option B - - -
+
+ {s.home.preview.live}} + variant="outlined"> + + + + + + + } + variant="outlined"> + + + + + {s.home.preview.form.updates} + + + + + - {/* Card 9: Keyboard & Tooltip */} -
- Misc - - - K - - - - + {s.home.preview.activityTag}} + variant="outlined"> + + + {activityItems.map((item) => ( + +
+ {item.title} + {item.desc} +
+
+ ))} +
+
+
); }; +const ScenarioShowcase = ({ s }: { s: any }): React.ReactElement => ( +
+ + +
+ {s.home.scenarios.dashboard.kicker} + {s.home.scenarios.dashboard.title} + {s.home.scenarios.dashboard.desc} +
+
+ +
+ + + + + +
+
+
+
+ + + +
+ {s.home.scenarios.forms.kicker} + {s.home.scenarios.forms.title} + {s.home.scenarios.forms.desc} +
+
+ + } /> + + Validated + Typed + Draft + +
+
+
+ + + +
+ {s.home.scenarios.content.kicker} + {s.home.scenarios.content.title} + {s.home.scenarios.content.desc} +
+
+ + + A + B + C + + + + + + +
+
+
+
+); + +const CategoryCoverage = ({ s }: { s: any }): React.ReactElement => ( +
+ {categoryGroups.map((group) => ( + + + {group.title} + {group.items} + + + ))} +
+ {s.home.coverage.summary} + +
+
+); + // ─── Live Code Example Section ─── const INITIAL_CODE = `import { Button, Flex, Tag } from '@tiny-design/react'; @@ -315,11 +459,11 @@ const HomePage = (): React.ReactElement => {
logo - Tiny UI for React + {s.home.badge}

- Build beautiful interfaces - with less effort + {s.home.heroTitle} + {s.home.heroAccent}

{s.home.subtitle}

@@ -330,6 +474,13 @@ const HomePage = (): React.ReactElement => { onClick={() => navigate('/guide')}> {s.home.getStarted} +
))} + - {/* ─── Component Showcase ─── */} + {/* ─── Scenario Showcase ─── */}

{s.home.showcase.title}

{s.home.showcase.subtitle}

- +
@@ -379,25 +531,26 @@ const HomePage = (): React.ReactElement => {

{s.home.designPrinciple}

+

{s.home.designPrincipleDesc}

} + icon={} title={s.home.features.themeable} desc={s.home.features.themeableDesc} /> } + icon={} title={s.home.features.elegant} desc={s.home.features.elegantDesc} /> } + icon={} title={s.home.features.composable} desc={s.home.features.composableDesc} /> } + icon={} title={s.home.features.accessible} desc={s.home.features.accessibleDesc} /> @@ -405,6 +558,16 @@ const HomePage = (): React.ReactElement => {
+
+
+
+

{s.home.coverage.title}

+

{s.home.coverage.subtitle}

+
+ +
+
+ {/* ─── CTA ─── */} diff --git a/apps/docs/src/containers/theme-studio/index.tsx b/apps/docs/src/containers/theme-studio/index.tsx index d3e9bc6ac..7cbe93946 100644 --- a/apps/docs/src/containers/theme-studio/index.tsx +++ b/apps/docs/src/containers/theme-studio/index.tsx @@ -148,12 +148,6 @@ const ThemeStudioPage = (): React.ReactElement => { @@ -301,7 +279,7 @@ function CardsPreview(): React.ReactElement { -
+
@@ -318,26 +296,26 @@ function CardsPreview(): React.ReactElement {
-
+