@blakesteve/roster 2.6.2 β 2.8.0
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 +118 -63
- package/dist/components/atoms/AvatarStrip/AvatarStrip.d.ts +53 -0
- package/dist/components/atoms/CollapsibleDescription/CollapsibleDescription.d.ts +20 -0
- package/dist/components/atoms/LiquidTabs/LiquidTabs.d.ts +39 -0
- package/dist/components/atoms/SegmentBar/SegmentBar.d.ts +30 -0
- package/dist/components/atoms/Tooltip/Tooltip.d.ts +31 -0
- package/dist/components/organisms/Footer/Footer.d.ts +16 -1
- package/dist/index.d.ts +5 -0
- package/dist/roster.cjs.js +13 -13
- package/dist/roster.css +1 -1
- package/dist/roster.es.js +6533 -5004
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -1,113 +1,168 @@
|
|
|
1
|
-
#
|
|
1
|
+
# @blakesteve/roster β¦
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
A production-grade atomic component library built with **React 19**, **TypeScript**, **Tailwind CSS v4**, and **Vite**.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Roster ships a curated set of accessible, theme-aware components organized around the Atomic Design methodology β atoms, molecules, and organisms β each with Storybook documentation and full test coverage.
|
|
6
6
|
|
|
7
|
-
##
|
|
7
|
+
## Features
|
|
8
8
|
|
|
9
|
-
- **
|
|
10
|
-
- **
|
|
11
|
-
- **
|
|
12
|
-
- **
|
|
13
|
-
- **
|
|
14
|
-
- **
|
|
15
|
-
- **Tree-Shakeable:** Import only what you need.
|
|
9
|
+
- **Atomic Design** β components organized as atoms, molecules, and organisms
|
|
10
|
+
- **TypeScript first** β fully typed props with exported variant types for maximum DX
|
|
11
|
+
- **Adaptive dark mode** β class-based toggling (`.dark`) independent of OS preferences
|
|
12
|
+
- **`"use client"` pre-bundled** β all outputs include the directive for seamless Next.js App Router integration
|
|
13
|
+
- **Accessible** β interactive components powered by [`@headlessui/react`](https://headlessui.com) and [`@radix-ui`](https://radix-ui.com)
|
|
14
|
+
- **Tree-shakeable** β import only what you need
|
|
16
15
|
|
|
17
|
-
##
|
|
16
|
+
## Installation
|
|
18
17
|
|
|
19
18
|
```bash
|
|
20
|
-
npm install roster
|
|
21
|
-
# or
|
|
22
|
-
yarn add roster
|
|
19
|
+
npm install @blakesteve/roster
|
|
23
20
|
```
|
|
24
21
|
|
|
25
|
-
|
|
22
|
+
Roster ships pre-compiled CSS β you do not need Tailwind installed in your host app to use it.
|
|
26
23
|
|
|
27
|
-
|
|
24
|
+
### Peer dependencies
|
|
28
25
|
|
|
29
26
|
```json
|
|
30
|
-
|
|
27
|
+
{
|
|
31
28
|
"react": "^19.0.0",
|
|
32
|
-
"react-dom": "^19.0.0"
|
|
33
|
-
"tailwindcss": "^4.0.0"
|
|
29
|
+
"react-dom": "^19.0.0"
|
|
34
30
|
}
|
|
35
31
|
```
|
|
36
32
|
|
|
37
|
-
##
|
|
33
|
+
## Setup
|
|
38
34
|
|
|
39
|
-
|
|
35
|
+
Import Roster's CSS once at the root of your application (`layout.tsx`, `main.tsx`, or `App.tsx`):
|
|
40
36
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
// 1. Required: The structural Tailwind utility classes
|
|
45
|
-
import "roster/dist/roster.css";
|
|
46
|
-
|
|
47
|
-
// 2. Optional: The default MegaSquad color and theme tokens
|
|
48
|
-
// (Omit this file if you are defining your own --roster-* variables in your app's global CSS)
|
|
49
|
-
import "roster/dist/tokens.css";
|
|
37
|
+
```tsx
|
|
38
|
+
// Compiled component styles β always required
|
|
39
|
+
import "@blakesteve/roster/style.css";
|
|
50
40
|
|
|
51
|
-
|
|
41
|
+
// Default design tokens (color palette, spacing, radius)
|
|
42
|
+
// Omit this if you are supplying your own --roster-* CSS variables
|
|
43
|
+
import "@blakesteve/roster/tokens.css";
|
|
44
|
+
```
|
|
52
45
|
|
|
53
|
-
|
|
46
|
+
## Quick start
|
|
54
47
|
|
|
55
48
|
```tsx
|
|
56
|
-
import { Button, Spinner } from "roster";
|
|
49
|
+
import { Button, Spinner } from "@blakesteve/roster";
|
|
57
50
|
|
|
58
51
|
function App() {
|
|
59
52
|
return (
|
|
60
|
-
<div className="
|
|
61
|
-
{
|
|
62
|
-
|
|
63
|
-
Save Changes
|
|
53
|
+
<div className="flex flex-col gap-4 p-4">
|
|
54
|
+
<Button colorScheme="primary" onClick={() => alert("Saved!")}>
|
|
55
|
+
Save changes
|
|
64
56
|
</Button>
|
|
65
57
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
Delete Account
|
|
58
|
+
<Button colorScheme="error" variant="outline">
|
|
59
|
+
Delete account
|
|
69
60
|
</Button>
|
|
70
61
|
|
|
71
|
-
|
|
72
|
-
<Button isLoading>Processing...</Button>
|
|
62
|
+
<Button isLoading>Processingβ¦</Button>
|
|
73
63
|
|
|
74
|
-
|
|
75
|
-
<Spinner size="lg" className="text-accent-500" />
|
|
64
|
+
<Spinner size="lg" />
|
|
76
65
|
</div>
|
|
77
66
|
);
|
|
78
67
|
}
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
## π¨ Development
|
|
68
|
+
```
|
|
82
69
|
|
|
83
|
-
|
|
70
|
+
## Component catalog
|
|
71
|
+
|
|
72
|
+
### Atoms
|
|
73
|
+
|
|
74
|
+
| Component | Description |
|
|
75
|
+
|---|---|
|
|
76
|
+
| `Avatar` | User avatar with image, initials fallback, and optional popover |
|
|
77
|
+
| `Badge` | Status label with semantic color schemes and fill variants |
|
|
78
|
+
| `Button` | Primary interactive element β solid, soft, outline, ghost, link variants |
|
|
79
|
+
| `Card` | Bordered surface container |
|
|
80
|
+
| `Checkbox` | Accessible checkbox with label support |
|
|
81
|
+
| `Disclosure` | Show/hide toggle using HeadlessUI |
|
|
82
|
+
| `Input` | Text input with label, error state, and icon slots |
|
|
83
|
+
| `Link` | Styled anchor with variant support |
|
|
84
|
+
| `Select` | Dropdown selector |
|
|
85
|
+
| `Spinner` | Loading indicator |
|
|
86
|
+
| `Switch` | Toggle switch |
|
|
87
|
+
| `Textarea` | Multi-line text input |
|
|
88
|
+
| `Tooltip` | Radix-powered tooltip β hover/focus on desktop, tap-to-toggle on mobile |
|
|
89
|
+
|
|
90
|
+
### Molecules
|
|
91
|
+
|
|
92
|
+
| Component | Description |
|
|
93
|
+
|---|---|
|
|
94
|
+
| `Accordion` | Collapsible content sections (single or multi-expand) |
|
|
95
|
+
| `Breadcrumbs` | Navigation trail |
|
|
96
|
+
| `CallToAction` | Prominent hero-style CTA block |
|
|
97
|
+
| `EmptyState` | Zero-data placeholder with icon and action slot |
|
|
98
|
+
| `ErrorState` | Error display with retry action |
|
|
99
|
+
| `MatchupCard` | Head-to-head comparison card |
|
|
100
|
+
|
|
101
|
+
### Organisms
|
|
102
|
+
|
|
103
|
+
| Component | Description |
|
|
104
|
+
|---|---|
|
|
105
|
+
| `ActionBar` | Sticky bottom action strip |
|
|
106
|
+
| `Countdown` | Live countdown timer |
|
|
107
|
+
| `DataTable` | Full-featured table with sorting and pagination via TanStack Table |
|
|
108
|
+
| `Dialog` | Modal dialog |
|
|
109
|
+
| `Footer` | Site footer |
|
|
110
|
+
| `Navbar` | Responsive navigation bar with mobile slide-out |
|
|
111
|
+
| `Table` | Static data table |
|
|
112
|
+
|
|
113
|
+
### Hooks
|
|
114
|
+
|
|
115
|
+
| Hook | Description |
|
|
116
|
+
|---|---|
|
|
117
|
+
| `useCountdown` | Countdown timer logic without the UI |
|
|
118
|
+
|
|
119
|
+
## Development
|
|
120
|
+
|
|
121
|
+
Storybook is the component playground. Each component has dedicated stories covering all variants, props, and light/dark mode.
|
|
84
122
|
|
|
85
123
|
```bash
|
|
86
|
-
# Install dependencies
|
|
87
124
|
npm install
|
|
88
|
-
|
|
89
|
-
# Start Storybook
|
|
90
125
|
npm run storybook
|
|
126
|
+
# β http://localhost:6006
|
|
91
127
|
```
|
|
92
128
|
|
|
93
|
-
|
|
129
|
+
## Testing
|
|
94
130
|
|
|
95
|
-
|
|
131
|
+
```bash
|
|
132
|
+
# Unit tests (Vitest + jsdom)
|
|
133
|
+
npm run test:run
|
|
134
|
+
|
|
135
|
+
# Unit tests in watch mode
|
|
136
|
+
npm run test
|
|
137
|
+
|
|
138
|
+
# Storybook interaction tests (Vitest + Playwright)
|
|
139
|
+
npx vitest run --project storybook
|
|
140
|
+
```
|
|
96
141
|
|
|
97
|
-
|
|
142
|
+
## Building
|
|
98
143
|
|
|
99
144
|
```bash
|
|
100
145
|
npm run build
|
|
101
146
|
```
|
|
102
147
|
|
|
103
|
-
|
|
148
|
+
Output in `dist/`:
|
|
149
|
+
|
|
150
|
+
| File | Description |
|
|
151
|
+
|---|---|
|
|
152
|
+
| `roster.es.js` | ES module bundle |
|
|
153
|
+
| `roster.umd.js` | UMD bundle |
|
|
154
|
+
| `roster.css` | Compiled component styles |
|
|
155
|
+
| `tokens.css` | Design token CSS variables |
|
|
156
|
+
| `index.d.ts` | TypeScript definitions |
|
|
157
|
+
|
|
158
|
+
## Contributing
|
|
159
|
+
|
|
160
|
+
Pull requests are welcome. Please:
|
|
104
161
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
- `dist/tokens.css` (Design token CSS variables)
|
|
109
|
-
- `dist/index.d.ts` (Type definitions)
|
|
162
|
+
1. Open an issue or discussion first for significant changes
|
|
163
|
+
2. Follow the existing code style (CVA variants, forwardRef, Storybook stories, unit tests)
|
|
164
|
+
3. Fill out the pull request template checklist before requesting review
|
|
110
165
|
|
|
111
|
-
##
|
|
166
|
+
## License
|
|
112
167
|
|
|
113
|
-
MIT Β© Blake Ball
|
|
168
|
+
MIT Β© [Blake Ball](https://github.com/blakesteve)
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
export type AvatarStripColorScheme = "primary" | "orange" | "teal" | "purple" | "amber" | "success" | "error" | "neutral";
|
|
3
|
+
export interface AvatarStripItem {
|
|
4
|
+
/** Unique identifier. Pass as `excludeKey` to hide this item (e.g. current user). */
|
|
5
|
+
key: string;
|
|
6
|
+
/** Display name β used as the avatar title and the source of the single-letter initials. */
|
|
7
|
+
label: string;
|
|
8
|
+
/** Avatar image URL. Falls back to initials when omitted or when the image fails to load. */
|
|
9
|
+
src?: string;
|
|
10
|
+
/** Background color scheme for the initials avatar. Defaults to `"neutral"`. */
|
|
11
|
+
colorScheme?: AvatarStripColorScheme;
|
|
12
|
+
/** When provided, the avatar is wrapped in an `<a>` tag with this href. */
|
|
13
|
+
href?: string;
|
|
14
|
+
}
|
|
15
|
+
export interface AvatarStripProps {
|
|
16
|
+
/** Ordered list of avatar items. */
|
|
17
|
+
items: AvatarStripItem[];
|
|
18
|
+
/** Maximum number of avatars to show before collapsing into a +N chip. Default: `5`. */
|
|
19
|
+
maxDisplay?: number;
|
|
20
|
+
/**
|
|
21
|
+
* The true total count. When provided, the overflow chip shows
|
|
22
|
+
* `totalCount - visible.length` instead of `items.length - maxDisplay`,
|
|
23
|
+
* keeping the number accurate when the fetched array is a subset of the real total.
|
|
24
|
+
*/
|
|
25
|
+
totalCount?: number;
|
|
26
|
+
/** Remove one item by key before rendering β typically used to hide the current user. */
|
|
27
|
+
excludeKey?: string;
|
|
28
|
+
/** When provided, renders a `β` dismiss button at the leading edge of the strip. */
|
|
29
|
+
onDismiss?: () => void;
|
|
30
|
+
/**
|
|
31
|
+
* Rendered immediately after the overflow chip inside the avatar stack.
|
|
32
|
+
* Use for a ghost-slot CTA, an add-member button, or any custom element
|
|
33
|
+
* that should sit within the `-space-x-2` stack.
|
|
34
|
+
*/
|
|
35
|
+
trailingSlot?: ReactNode;
|
|
36
|
+
/** Rendered to the right of the avatar stack. Accepts any React node. */
|
|
37
|
+
label?: ReactNode;
|
|
38
|
+
/**
|
|
39
|
+
* Tailwind class that sets the ring color around each avatar and the overflow chip.
|
|
40
|
+
* Should match the background the strip is rendered on to produce the cutout stack effect.
|
|
41
|
+
* Default: `"ring-white dark:ring-gray-900"`.
|
|
42
|
+
*/
|
|
43
|
+
ringClass?: string;
|
|
44
|
+
/** Extra classes applied to the outermost `<div>`. */
|
|
45
|
+
className?: string;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* A compact social-proof strip: a stacked row of overlapping avatars with an
|
|
49
|
+
* optional overflow chip, dismiss button, trailing slot, and label area.
|
|
50
|
+
*
|
|
51
|
+
* Returns `null` when there are no visible items and no `trailingSlot`.
|
|
52
|
+
*/
|
|
53
|
+
export declare function AvatarStrip({ items, maxDisplay, totalCount, excludeKey, onDismiss, trailingSlot, label, ringClass, className, }: AvatarStripProps): import("react/jsx-runtime").JSX.Element | null;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
export type CollapsibleDescriptionSize = "sm" | "md" | "lg";
|
|
3
|
+
export interface CollapsibleDescriptionProps {
|
|
4
|
+
/** Content to display. Accepts a string or any React node. */
|
|
5
|
+
children: React.ReactNode;
|
|
6
|
+
/** Controls how many lines are visible before the toggle appears. */
|
|
7
|
+
size?: CollapsibleDescriptionSize;
|
|
8
|
+
/** Label for the expand button. */
|
|
9
|
+
expandLabel?: string;
|
|
10
|
+
/** Label for the collapse button. */
|
|
11
|
+
collapseLabel?: string;
|
|
12
|
+
/** Extra classes applied to the outer wrapper. */
|
|
13
|
+
className?: string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Clamps content to a fixed height and reveals a toggle when it overflows.
|
|
17
|
+
* Uses CSS `mask-image` for the fade-out effect so it works on any background
|
|
18
|
+
* without needing to know the background color.
|
|
19
|
+
*/
|
|
20
|
+
export declare function CollapsibleDescription({ children, size, expandLabel, collapseLabel, className, }: CollapsibleDescriptionProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
export interface TabItem {
|
|
3
|
+
id: string;
|
|
4
|
+
/** Static label, or a render function that receives whether this tab is active. */
|
|
5
|
+
label: ReactNode | ((isActive: boolean) => ReactNode);
|
|
6
|
+
}
|
|
7
|
+
export interface LiquidTabsProps {
|
|
8
|
+
tabs: TabItem[];
|
|
9
|
+
/** The `id` of the currently active tab. */
|
|
10
|
+
activeTab: string;
|
|
11
|
+
/** Called with the new tab `id` when the user selects a different tab. */
|
|
12
|
+
onChange: (id: string) => void;
|
|
13
|
+
/**
|
|
14
|
+
* `"pill"` (default) β floating pill inside a padded container.
|
|
15
|
+
* Width is `w-fit` by default; use `fullWidth` to stretch it.
|
|
16
|
+
* Liquid feel via scaleY squash during the stretch phase.
|
|
17
|
+
*
|
|
18
|
+
* `"filled"` β active tab fills its entire cell; container is always `w-full`.
|
|
19
|
+
* Liquid feel via border-radius morphing (oval during stretch) so the
|
|
20
|
+
* full-height pill never gaps at the container edges.
|
|
21
|
+
*/
|
|
22
|
+
variant?: "pill" | "filled";
|
|
23
|
+
/** Stretch the `pill` variant container to full width with `flex-1` buttons. */
|
|
24
|
+
fullWidth?: boolean;
|
|
25
|
+
/** Extra classes applied to the outer container. */
|
|
26
|
+
className?: string;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Controlled tab strip with a liquid sliding indicator.
|
|
30
|
+
*
|
|
31
|
+
* The pill animation is driven by direct DOM ref manipulation (no setState)
|
|
32
|
+
* to avoid re-renders during the transition. Two-phase motion:
|
|
33
|
+
* 1. Stretch β pill expands to span the gap between old and new tab (130 ms ease-out).
|
|
34
|
+
* 2. Contract β pill snaps to the target tab (160 ms ease-in).
|
|
35
|
+
*
|
|
36
|
+
* `getBoundingClientRect` is used to measure tab positions, so the component
|
|
37
|
+
* must be rendered in a document with a real layout engine to animate.
|
|
38
|
+
*/
|
|
39
|
+
export declare function LiquidTabs({ tabs, activeTab, onChange, variant, fullWidth, className, }: LiquidTabsProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export type SegmentBarSize = "sm" | "md";
|
|
2
|
+
export interface SegmentBarSegment {
|
|
3
|
+
/** Unique identifier for the segment. */
|
|
4
|
+
key: string;
|
|
5
|
+
/** Display label used in the legend and the bar segment's title tooltip. */
|
|
6
|
+
label: string;
|
|
7
|
+
/** Raw vote / count / quantity. Percentages are computed from the total. */
|
|
8
|
+
value: number;
|
|
9
|
+
/** CSS color for the bar segment and legend dot (hex, rgb, hsl, or CSS variable). */
|
|
10
|
+
color: string;
|
|
11
|
+
}
|
|
12
|
+
export interface SegmentBarProps {
|
|
13
|
+
/** Ordered list of segments rendered left to right. */
|
|
14
|
+
segments: SegmentBarSegment[];
|
|
15
|
+
/** Height of the bar track. */
|
|
16
|
+
size?: SegmentBarSize;
|
|
17
|
+
/** Render a dot-and-label legend below the bar. */
|
|
18
|
+
showLegend?: boolean;
|
|
19
|
+
/** Extra classes applied to the outer wrapper. */
|
|
20
|
+
className?: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* A proportional horizontal bar divided into colored segments.
|
|
24
|
+
* Percentages are computed automatically from raw `value` fields.
|
|
25
|
+
* Colors are passed as CSS color strings so any palette works without
|
|
26
|
+
* requiring specific Tailwind classes to be present in the consumer's build.
|
|
27
|
+
*
|
|
28
|
+
* Returns `null` when all segment values sum to zero.
|
|
29
|
+
*/
|
|
30
|
+
export declare function SegmentBar({ segments, size, showLegend, className, }: SegmentBarProps): import("react/jsx-runtime").JSX.Element | null;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
export type TooltipPlacement = "top" | "bottom" | "left" | "right";
|
|
3
|
+
export type TooltipVariant = "dark" | "light";
|
|
4
|
+
export interface TooltipProps {
|
|
5
|
+
/** The tooltip's popup content. Accepts a string or any React node. */
|
|
6
|
+
content: React.ReactNode;
|
|
7
|
+
/** The element that triggers the tooltip on hover, focus, or tap. */
|
|
8
|
+
children: React.ReactNode;
|
|
9
|
+
/** Which side of the trigger the tooltip appears on. Radix auto-flips if there isn't enough room. */
|
|
10
|
+
placement?: TooltipPlacement;
|
|
11
|
+
/** Visual theme for the tooltip bubble. `dark` is the default and works on both light and dark backgrounds. */
|
|
12
|
+
variant?: TooltipVariant;
|
|
13
|
+
/** Milliseconds of hover delay before the tooltip opens (default 300). */
|
|
14
|
+
delayDuration?: number;
|
|
15
|
+
/** Mount the tooltip open β useful for visual stories and testing. */
|
|
16
|
+
defaultOpen?: boolean;
|
|
17
|
+
/** Extra classes applied to the tooltip content bubble. */
|
|
18
|
+
className?: string;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Radix-powered tooltip with a caret arrow and entry animation.
|
|
22
|
+
*
|
|
23
|
+
* - **Desktop:** opens on hover (configurable delay) or keyboard focus.
|
|
24
|
+
* - **Mobile:** tap the trigger to toggle open; tap anywhere else to dismiss.
|
|
25
|
+
* This avoids tooltips getting permanently stuck open on touchscreens.
|
|
26
|
+
*
|
|
27
|
+
* The trigger is wrapped in a focusable `<span>` so any element β including
|
|
28
|
+
* non-interactive ones β can act as a tooltip anchor without breaking
|
|
29
|
+
* Radix's `asChild` forwarding.
|
|
30
|
+
*/
|
|
31
|
+
export declare function Tooltip({ content, children, placement, variant, delayDuration, defaultOpen, className, }: TooltipProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,11 +1,26 @@
|
|
|
1
1
|
import { default as React } from 'react';
|
|
2
2
|
import { VariantProps } from 'class-variance-authority';
|
|
3
3
|
import { footerVariants } from './footer-variants';
|
|
4
|
+
export interface FooterLink {
|
|
5
|
+
label: string;
|
|
6
|
+
href: string;
|
|
7
|
+
}
|
|
4
8
|
export interface FooterProps extends React.HTMLAttributes<HTMLElement>, VariantProps<typeof footerVariants> {
|
|
5
|
-
/**
|
|
9
|
+
/**
|
|
10
|
+
* The company name to display in the copyright notice.
|
|
6
11
|
* @default "Ball Collaborative"
|
|
7
12
|
*/
|
|
8
13
|
companyName?: string;
|
|
14
|
+
/**
|
|
15
|
+
* Optional navigation links rendered as a row above the copyright line.
|
|
16
|
+
* Useful for pages like Privacy Policy, Contact, Terms, etc.
|
|
17
|
+
*/
|
|
18
|
+
links?: FooterLink[];
|
|
19
|
+
/**
|
|
20
|
+
* Router-aware link element (e.g. Next.js `Link`). When provided, each
|
|
21
|
+
* footer link is rendered with this element instead of a plain `<a>` tag.
|
|
22
|
+
*/
|
|
23
|
+
routerElement?: React.ElementType;
|
|
9
24
|
}
|
|
10
25
|
declare const Footer: React.ForwardRefExoticComponent<FooterProps & React.RefAttributes<HTMLElement>>;
|
|
11
26
|
export { Footer };
|
package/dist/index.d.ts
CHANGED
|
@@ -21,6 +21,11 @@ export * from './components/atoms/Switch/Switch';
|
|
|
21
21
|
export * from './components/atoms/Switch/switch-variants';
|
|
22
22
|
export * from './components/atoms/Textarea/Textarea';
|
|
23
23
|
export * from './components/atoms/Textarea/textarea-variants';
|
|
24
|
+
export * from './components/atoms/AvatarStrip/AvatarStrip';
|
|
25
|
+
export * from './components/atoms/LiquidTabs/LiquidTabs';
|
|
26
|
+
export * from './components/atoms/Tooltip/Tooltip';
|
|
27
|
+
export * from './components/atoms/CollapsibleDescription/CollapsibleDescription';
|
|
28
|
+
export * from './components/atoms/SegmentBar/SegmentBar';
|
|
24
29
|
export * from './components/molecules/Accordion/Accordion';
|
|
25
30
|
export * from './components/molecules/Breadcrumbs/Breadcrumbs';
|
|
26
31
|
export * from './components/molecules/Breadcrumbs/breadcrumb-variants';
|