@overdoser/react-toolkit 0.0.6 → 0.0.8

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.
Files changed (48) hide show
  1. package/AGENTS.md +15 -0
  2. package/components/Button/Button.d.ts +13 -0
  3. package/components/Chart/AreaChart.d.ts +85 -0
  4. package/components/Chart/Axis.d.ts +30 -0
  5. package/components/Chart/BarChart.d.ts +111 -0
  6. package/components/Chart/ChartContainer.d.ts +33 -0
  7. package/components/Chart/ChartLegend.d.ts +9 -0
  8. package/components/Chart/ChartTooltip.d.ts +32 -0
  9. package/components/Chart/LineChart.d.ts +112 -0
  10. package/components/Chart/PieChart.d.ts +100 -0
  11. package/components/Chart/RadarChart.d.ts +86 -0
  12. package/components/Chart/Sparkline.d.ts +31 -0
  13. package/components/Chart/TradingChart.d.ts +89 -0
  14. package/components/Chart/index.d.ts +18 -0
  15. package/components/Chart/scales.d.ts +21 -0
  16. package/components/Chart/trading/indicators.d.ts +28 -0
  17. package/components/Chart/trading/period.d.ts +19 -0
  18. package/components/Chart/trading/types.d.ts +122 -0
  19. package/components/Chart/types.d.ts +60 -0
  20. package/components/Chart/useChartDimensions.d.ts +12 -0
  21. package/components/Popover/Popover.d.ts +16 -1
  22. package/index.css +1 -1
  23. package/index.d.ts +2 -0
  24. package/index.js +3427 -1110
  25. package/llms.txt +373 -2
  26. package/manifest.json +307 -3
  27. package/package.json +1 -1
  28. package/recipes/dashboard-charts.tsx +123 -0
  29. package/recipes/interactive-area-chart.tsx +226 -0
  30. package/recipes/interactive-bar-chart.tsx +211 -0
  31. package/recipes/interactive-line-chart.tsx +221 -0
  32. package/recipes/interactive-pie-chart.tsx +191 -0
  33. package/recipes/trading-chart.tsx +188 -0
  34. package/components/Button/Button.stories.d.ts +0 -17
  35. package/components/Dropdown/Dropdown.stories.d.ts +0 -8
  36. package/components/Form/Form.stories.d.ts +0 -11
  37. package/components/Link/Link.stories.d.ts +0 -9
  38. package/components/List/List.stories.d.ts +0 -9
  39. package/components/Modal/Modal.stories.d.ts +0 -9
  40. package/components/Popover/Popover.stories.d.ts +0 -9
  41. package/components/Table/Table.stories.d.ts +0 -20
  42. package/components/Typography/Typography.stories.d.ts +0 -15
  43. package/components/inputs/Checkbox/Checkbox.stories.d.ts +0 -9
  44. package/components/inputs/Input/Input.stories.d.ts +0 -13
  45. package/components/inputs/Radio/Radio.stories.d.ts +0 -7
  46. package/components/inputs/Select/Select.stories.d.ts +0 -18
  47. package/components/inputs/Textarea/Textarea.stories.d.ts +0 -10
  48. package/test-setup.d.ts +0 -0
@@ -0,0 +1,191 @@
1
+ import { useMemo, useState } from 'react';
2
+ import {
3
+ Button,
4
+ Dropdown,
5
+ PieChart,
6
+ Typography,
7
+ } from '@overdoser/react-toolkit';
8
+
9
+ interface RegionRow extends Record<string, unknown> {
10
+ region: string;
11
+ value: number;
12
+ fill: string;
13
+ }
14
+
15
+ // Same regional breakdown computed for two different metrics. The selector
16
+ // picks which metric is shown — all slices stay visible.
17
+ const data = {
18
+ desktop: [
19
+ { region: 'NA', value: 420, fill: 'var(--crk-chart-1)' },
20
+ { region: 'EU', value: 340, fill: 'var(--crk-chart-2)' },
21
+ { region: 'APAC', value: 280, fill: 'var(--crk-chart-3)' },
22
+ { region: 'LATAM', value: 110, fill: 'var(--crk-chart-4)' },
23
+ { region: 'Other', value: 60, fill: 'var(--crk-chart-5)' },
24
+ ],
25
+ mobile: [
26
+ { region: 'NA', value: 280, fill: 'var(--crk-chart-1)' },
27
+ { region: 'EU', value: 410, fill: 'var(--crk-chart-2)' },
28
+ { region: 'APAC', value: 520, fill: 'var(--crk-chart-3)' },
29
+ { region: 'LATAM', value: 220, fill: 'var(--crk-chart-4)' },
30
+ { region: 'Other', value: 90, fill: 'var(--crk-chart-5)' },
31
+ ],
32
+ } satisfies Record<string, RegionRow[]>;
33
+
34
+ const METRICS = [
35
+ { value: 'desktop', label: 'Desktop' },
36
+ { value: 'mobile', label: 'Mobile' },
37
+ ] as const;
38
+ type MetricValue = (typeof METRICS)[number]['value'];
39
+
40
+ const Chevron = ({ direction }: { direction: 'left' | 'right' }) => (
41
+ <svg
42
+ viewBox="0 0 24 24"
43
+ width="14"
44
+ height="14"
45
+ fill="none"
46
+ stroke="currentColor"
47
+ strokeWidth={2.5}
48
+ strokeLinecap="round"
49
+ strokeLinejoin="round"
50
+ aria-hidden="true"
51
+ >
52
+ <polyline points={direction === 'left' ? '15 18 9 12 15 6' : '9 18 15 12 9 6'} />
53
+ </svg>
54
+ );
55
+
56
+ function PieFor({ metric }: { metric: MetricValue }) {
57
+ const rows = data[metric];
58
+ const total = useMemo(() => rows.reduce((s, r) => s + r.value, 0), [rows]);
59
+ return (
60
+ <PieChart
61
+ data={rows}
62
+ nameKey="region"
63
+ valueKey="value"
64
+ colorKey="fill"
65
+ innerRadius="60%"
66
+ centerLabel={
67
+ <>
68
+ <div style={{ fontSize: 24, fontWeight: 700 }}>{total.toLocaleString()}</div>
69
+ <div style={{ fontSize: 12, color: 'var(--crk-color-text-muted)' }}>Total</div>
70
+ </>
71
+ }
72
+ />
73
+ );
74
+ }
75
+
76
+ // ─── Variant 1: Tiles ──────────────────────────────────────────────────────
77
+
78
+ export function InteractivePieChartTiles() {
79
+ const [metric, setMetric] = useState<MetricValue>('desktop');
80
+ return (
81
+ <div style={panelStyle}>
82
+ <div
83
+ style={{
84
+ display: 'grid',
85
+ gridTemplateColumns: `repeat(${METRICS.length}, 1fr)`,
86
+ borderBottom: '1px solid var(--crk-color-border)',
87
+ }}
88
+ >
89
+ {METRICS.map((m) => {
90
+ const isActive = metric === m.value;
91
+ const total = data[m.value].reduce((s, r) => s + r.value, 0);
92
+ return (
93
+ <button
94
+ key={m.value}
95
+ type="button"
96
+ onClick={() => setMetric(m.value)}
97
+ style={{
98
+ padding: 16,
99
+ textAlign: 'left',
100
+ background: isActive ? 'var(--crk-color-primary-light)' : 'transparent',
101
+ border: 'none',
102
+ borderLeft: '4px solid',
103
+ borderLeftColor: isActive ? 'var(--crk-color-primary)' : 'transparent',
104
+ cursor: 'pointer',
105
+ }}
106
+ >
107
+ <Typography variant="span" color="muted">{m.label}</Typography>
108
+ <div style={{ fontSize: 'var(--crk-font-size-2xl)', fontWeight: 600 }}>
109
+ {total.toLocaleString()}
110
+ </div>
111
+ </button>
112
+ );
113
+ })}
114
+ </div>
115
+ <div style={{ padding: 16 }}>
116
+ <PieFor metric={metric} />
117
+ </div>
118
+ </div>
119
+ );
120
+ }
121
+
122
+ // ─── Variant 2: Navigator ──────────────────────────────────────────────────
123
+
124
+ export function InteractivePieChartNavigator() {
125
+ const [index, setIndex] = useState(0);
126
+ const metric = METRICS[index];
127
+ const step = (delta: number) =>
128
+ setIndex((i) => (i + delta + METRICS.length) % METRICS.length);
129
+ return (
130
+ <div style={panelStyle}>
131
+ <div
132
+ style={{
133
+ display: 'flex',
134
+ alignItems: 'center',
135
+ justifyContent: 'space-between',
136
+ padding: 12,
137
+ borderBottom: '1px solid var(--crk-color-border)',
138
+ }}
139
+ >
140
+ <Button variant="ghost" size="sm" iconOnly onClick={() => step(-1)} aria-label="Previous metric">
141
+ <Chevron direction="left" />
142
+ </Button>
143
+ <Typography variant="span" weight="medium">{metric.label}</Typography>
144
+ <Button variant="ghost" size="sm" iconOnly onClick={() => step(1)} aria-label="Next metric">
145
+ <Chevron direction="right" />
146
+ </Button>
147
+ </div>
148
+ <div style={{ padding: 16 }}>
149
+ <PieFor metric={metric.value} />
150
+ </div>
151
+ </div>
152
+ );
153
+ }
154
+
155
+ // ─── Variant 3: Dropdown ───────────────────────────────────────────────────
156
+
157
+ export function InteractivePieChartDropdown() {
158
+ const [metric, setMetric] = useState<MetricValue>('desktop');
159
+ return (
160
+ <div style={panelStyle}>
161
+ <div
162
+ style={{
163
+ display: 'flex',
164
+ alignItems: 'center',
165
+ gap: 12,
166
+ padding: 12,
167
+ borderBottom: '1px solid var(--crk-color-border)',
168
+ }}
169
+ >
170
+ <Typography variant="span" color="muted">Metric</Typography>
171
+ <div style={{ width: 180 }}>
172
+ <Dropdown
173
+ options={METRICS.map((m) => ({ value: m.value, label: m.label }))}
174
+ value={metric}
175
+ onChange={(v) => setMetric(v as MetricValue)}
176
+ />
177
+ </div>
178
+ </div>
179
+ <div style={{ padding: 16 }}>
180
+ <PieFor metric={metric} />
181
+ </div>
182
+ </div>
183
+ );
184
+ }
185
+
186
+ const panelStyle: React.CSSProperties = {
187
+ border: '1px solid var(--crk-color-border)',
188
+ borderRadius: 12,
189
+ overflow: 'hidden',
190
+ background: 'var(--crk-color-bg)',
191
+ };
@@ -0,0 +1,188 @@
1
+ import { useEffect, useMemo, useRef, useState } from 'react';
2
+ import {
3
+ Dropdown,
4
+ TradingChart,
5
+ type Bar,
6
+ type Datafeed,
7
+ type IndicatorConfig,
8
+ type Resolution,
9
+ type SubscribeBarsArgs,
10
+ type SubscriptionHandle,
11
+ } from '@overdoser/react-toolkit';
12
+
13
+ // ─── Minimal in-memory datafeed adapter ────────────────────────────────────
14
+ //
15
+ // Replace `generateBars` and the `subscribeBars` interval with calls to your
16
+ // REST/WebSocket layer. The shape (`getBars` → bars, `subscribeBars` → onTick,
17
+ // `unsubscribeBars`) mirrors the TradingView Charting Library so adapters
18
+ // from that ecosystem port over with minimal change.
19
+
20
+ interface Subscription {
21
+ args: SubscribeBarsArgs;
22
+ timer: ReturnType<typeof setInterval>;
23
+ }
24
+
25
+ function createMemoryDatafeed(opts: { intervalSec: number; startPrice?: number; seed?: number }): Datafeed {
26
+ const intervalSec = opts.intervalSec;
27
+ const subscriptions = new Map<symbol, Subscription>();
28
+ let seed = opts.seed ?? 1;
29
+ const rng = () => {
30
+ seed = (seed * 9301 + 49297) % 233280;
31
+ return seed / 233280;
32
+ };
33
+
34
+ const generateBars = (count: number, endTime: number, startPrice: number): Bar[] => {
35
+ let p = startPrice;
36
+ const out: Bar[] = [];
37
+ const start = endTime - count * intervalSec;
38
+ for (let i = 0; i < count; i++) {
39
+ const change = (rng() - 0.5) * p * 0.02;
40
+ const open = p;
41
+ const close = Math.max(0.01, open + change);
42
+ const high = Math.max(open, close) + rng() * Math.abs(change);
43
+ const low = Math.min(open, close) - rng() * Math.abs(change);
44
+ out.push({
45
+ time: start + i * intervalSec,
46
+ open,
47
+ high,
48
+ low,
49
+ close,
50
+ volume: Math.floor(rng() * 10000 + 1000),
51
+ });
52
+ p = close;
53
+ }
54
+ return out;
55
+ };
56
+
57
+ return {
58
+ async getBars({ from, to, countBack }) {
59
+ const count = countBack ?? Math.ceil((to - from) / intervalSec);
60
+ return generateBars(count, to, opts.startPrice ?? 100);
61
+ },
62
+ subscribeBars(args) {
63
+ const handle = Symbol('memdf');
64
+ let last: Bar | null = null;
65
+ const timer = setInterval(() => {
66
+ const now = Math.floor(Date.now() / 1000);
67
+ const bucketStart = Math.floor(now / intervalSec) * intervalSec;
68
+ if (!last || last.time !== bucketStart) {
69
+ const open = last ? last.close : 100;
70
+ last = { time: bucketStart, open, high: open, low: open, close: open, volume: 0 };
71
+ } else {
72
+ const change = (rng() - 0.5) * last.close * 0.003;
73
+ const close = Math.max(0.01, last.close + change);
74
+ last = {
75
+ ...last,
76
+ close,
77
+ high: Math.max(last.high, close),
78
+ low: Math.min(last.low, close),
79
+ volume: (last.volume ?? 0) + Math.floor(rng() * 500),
80
+ };
81
+ }
82
+ args.onTick(last);
83
+ }, 1000);
84
+ subscriptions.set(handle, { args, timer });
85
+ return handle;
86
+ },
87
+ unsubscribeBars(handle) {
88
+ const sub = subscriptions.get(handle as symbol);
89
+ if (sub) {
90
+ clearInterval(sub.timer);
91
+ subscriptions.delete(handle as symbol);
92
+ }
93
+ },
94
+ };
95
+ }
96
+
97
+ // ─── Recipe: full-stack trading chart with controls ────────────────────────
98
+
99
+ const RESOLUTIONS: Array<{ value: Resolution; label: string }> = [
100
+ { value: '1', label: '1m' },
101
+ { value: '5', label: '5m' },
102
+ { value: '15', label: '15m' },
103
+ { value: '60', label: '1h' },
104
+ { value: '240', label: '4h' },
105
+ { value: 'D', label: '1D' },
106
+ ];
107
+
108
+ const RESOLUTION_TO_SECONDS: Record<string, number> = {
109
+ '1': 60,
110
+ '5': 300,
111
+ '15': 900,
112
+ '60': 3600,
113
+ '240': 14400,
114
+ D: 86400,
115
+ };
116
+
117
+ /**
118
+ * Drop-in trading chart with resolution selector and the full indicator stack
119
+ * (two EMAs, Bollinger Bands, RSI, Volume). The `useDatafeed` hook keeps the
120
+ * datafeed adapter scoped to the current resolution; swap it for your real
121
+ * adapter and the rest of the recipe works unchanged.
122
+ */
123
+ export function TradingChartRecipe() {
124
+ const [resolution, setResolution] = useState<Resolution>('60');
125
+ const datafeed = useDatafeed(resolution);
126
+
127
+ const indicators: IndicatorConfig[] = useMemo(
128
+ () => [
129
+ { type: 'ema', period: 12, color: 'var(--crk-chart-2)' },
130
+ { type: 'ema', period: 26, color: 'var(--crk-chart-3)' },
131
+ { type: 'bollinger', period: 20, stdDev: 2, color: 'var(--crk-chart-4)' },
132
+ { type: 'rsi', period: 14 },
133
+ { type: 'volume' },
134
+ ],
135
+ [],
136
+ );
137
+
138
+ return (
139
+ <div style={{ border: '1px solid var(--crk-color-border)', borderRadius: 12, overflow: 'hidden' }}>
140
+ <div
141
+ style={{
142
+ display: 'flex',
143
+ alignItems: 'center',
144
+ gap: 12,
145
+ padding: 12,
146
+ borderBottom: '1px solid var(--crk-color-border)',
147
+ }}
148
+ >
149
+ <span style={{ color: 'var(--crk-color-text-muted)' }}>Interval</span>
150
+ <div style={{ width: 140 }}>
151
+ <Dropdown
152
+ options={RESOLUTIONS.map((r) => ({ value: r.value, label: r.label }))}
153
+ value={resolution}
154
+ onChange={(v) => setResolution(v as Resolution)}
155
+ />
156
+ </div>
157
+ </div>
158
+ <TradingChart
159
+ datafeed={datafeed}
160
+ symbol="DEMO"
161
+ resolution={resolution}
162
+ height={560}
163
+ indicators={indicators}
164
+ />
165
+ </div>
166
+ );
167
+ }
168
+
169
+ function useDatafeed(resolution: Resolution): Datafeed {
170
+ const ref = useRef<Datafeed | null>(null);
171
+ const [, force] = useState(0);
172
+
173
+ useEffect(() => {
174
+ const intervalSec = RESOLUTION_TO_SECONDS[resolution] ?? 60;
175
+ ref.current = createMemoryDatafeed({ intervalSec, startPrice: 100 });
176
+ force((n) => n + 1);
177
+ }, [resolution]);
178
+
179
+ // Stable reference; only the underlying datafeed swaps on resolution change.
180
+ return useMemo(
181
+ () => ({
182
+ getBars: (args) => ref.current!.getBars(args),
183
+ subscribeBars: (args) => ref.current!.subscribeBars(args),
184
+ unsubscribeBars: (handle: SubscriptionHandle) => ref.current?.unsubscribeBars(handle),
185
+ }),
186
+ [],
187
+ );
188
+ }
@@ -1,17 +0,0 @@
1
- import { Meta, StoryObj } from '@storybook/react';
2
- import { Button } from './Button';
3
- declare const meta: Meta<typeof Button>;
4
- export default meta;
5
- type Story = StoryObj<typeof Button>;
6
- export declare const Primary: Story;
7
- export declare const Secondary: Story;
8
- export declare const Danger: Story;
9
- export declare const Ghost: Story;
10
- export declare const LoadingDots: Story;
11
- export declare const LoadingShimmer: Story;
12
- export declare const LoadingBorder: Story;
13
- export declare const LoadingAllStyles: Story;
14
- export declare const Small: Story;
15
- export declare const Large: Story;
16
- export declare const FullWidth: Story;
17
- export declare const AllVariants: Story;
@@ -1,8 +0,0 @@
1
- import { Meta, StoryObj } from '@storybook/react';
2
- import { Dropdown } from './Dropdown';
3
- declare const meta: Meta<typeof Dropdown>;
4
- export default meta;
5
- type Story = StoryObj<typeof Dropdown>;
6
- export declare const Default: Story;
7
- export declare const AlignRight: Story;
8
- export declare const WithDisabledItem: Story;
@@ -1,11 +0,0 @@
1
- import { Meta, StoryObj } from '@storybook/react';
2
- import { Form } from './Form';
3
- declare const meta: Meta<typeof Form>;
4
- export default meta;
5
- type Story = StoryObj<typeof Form>;
6
- export declare const Default: Story;
7
- export declare const WithValidation: Story;
8
- export declare const WithLoadingSubmit: Story;
9
- export declare const AllInputs: Story;
10
- export declare const WithFormErrors: Story;
11
- export declare const InlineFields: Story;
@@ -1,9 +0,0 @@
1
- import { Meta, StoryObj } from '@storybook/react';
2
- import { Link } from './Link';
3
- declare const meta: Meta<typeof Link>;
4
- export default meta;
5
- type Story = StoryObj<typeof Link>;
6
- export declare const Default: Story;
7
- export declare const Muted: Story;
8
- export declare const Danger: Story;
9
- export declare const External: Story;
@@ -1,9 +0,0 @@
1
- import { Meta, StoryObj } from '@storybook/react';
2
- import { List } from './List';
3
- declare const meta: Meta<typeof List>;
4
- export default meta;
5
- type Story = StoryObj<typeof List>;
6
- export declare const Unordered: Story;
7
- export declare const Ordered: Story;
8
- export declare const NoStyle: Story;
9
- export declare const Spacing: Story;
@@ -1,9 +0,0 @@
1
- import { Meta, StoryObj } from '@storybook/react';
2
- import { Modal } from './Modal';
3
- declare const meta: Meta<typeof Modal>;
4
- export default meta;
5
- type Story = StoryObj<typeof Modal>;
6
- export declare const Default: Story;
7
- export declare const Small: Story;
8
- export declare const Large: Story;
9
- export declare const NoBackdropClose: Story;
@@ -1,9 +0,0 @@
1
- import { Meta, StoryObj } from '@storybook/react';
2
- import { Popover } from './Popover';
3
- declare const meta: Meta<typeof Popover>;
4
- export default meta;
5
- type Story = StoryObj<typeof Popover>;
6
- export declare const Bottom: Story;
7
- export declare const Top: Story;
8
- export declare const Left: Story;
9
- export declare const Right: Story;
@@ -1,20 +0,0 @@
1
- import { Meta, StoryObj } from '@storybook/react';
2
- import { Table } from './Table';
3
- type User = {
4
- id: number;
5
- name: string;
6
- email: string;
7
- age: number;
8
- role: string;
9
- };
10
- declare const meta: Meta<typeof Table<User>>;
11
- export default meta;
12
- type Story = StoryObj<typeof Table<User>>;
13
- export declare const Default: Story;
14
- export declare const Striped: Story;
15
- export declare const Hoverable: Story;
16
- export declare const Compact: Story;
17
- export declare const MultiSort: Story;
18
- export declare const WithPagination: Story;
19
- export declare const ServerSideSort: Story;
20
- export declare const Empty: Story;
@@ -1,15 +0,0 @@
1
- import { Meta, StoryObj } from '@storybook/react';
2
- import { Typography } from './Typography';
3
- declare const meta: Meta<typeof Typography>;
4
- export default meta;
5
- type Story = StoryObj<typeof Typography>;
6
- export declare const Heading1: Story;
7
- export declare const Heading2: Story;
8
- export declare const Heading3: Story;
9
- export declare const Heading4: Story;
10
- export declare const Heading5: Story;
11
- export declare const Heading6: Story;
12
- export declare const Paragraph: Story;
13
- export declare const Muted: Story;
14
- export declare const Truncated: Story;
15
- export declare const AllVariants: Story;
@@ -1,9 +0,0 @@
1
- import { Meta, StoryObj } from '@storybook/react';
2
- import { Checkbox } from './Checkbox';
3
- declare const meta: Meta<typeof Checkbox>;
4
- export default meta;
5
- type Story = StoryObj<typeof Checkbox>;
6
- export declare const Default: Story;
7
- export declare const Checked: Story;
8
- export declare const Indeterminate: Story;
9
- export declare const Disabled: Story;
@@ -1,13 +0,0 @@
1
- import { Meta, StoryObj } from '@storybook/react';
2
- import { Input } from './Input';
3
- declare const meta: Meta<typeof Input>;
4
- export default meta;
5
- type Story = StoryObj<typeof Input>;
6
- export declare const Default: Story;
7
- export declare const Small: Story;
8
- export declare const Large: Story;
9
- export declare const WithError: Story;
10
- export declare const WithPrefix: Story;
11
- export declare const WithSuffix: Story;
12
- export declare const WithPrefixAndSuffix: Story;
13
- export declare const Disabled: Story;
@@ -1,7 +0,0 @@
1
- import { Meta, StoryObj } from '@storybook/react';
2
- import { RadioGroup } from './Radio';
3
- declare const meta: Meta<typeof RadioGroup>;
4
- export default meta;
5
- type Story = StoryObj<typeof RadioGroup>;
6
- export declare const Default: Story;
7
- export declare const WithDefault: Story;
@@ -1,18 +0,0 @@
1
- import { Meta, StoryObj } from '@storybook/react';
2
- import { Select } from './Select';
3
- declare const meta: Meta<typeof Select>;
4
- export default meta;
5
- type Story = StoryObj<typeof Select>;
6
- export declare const Default: Story;
7
- export declare const WithPlaceholder: Story;
8
- export declare const WithError: Story;
9
- export declare const Disabled: Story;
10
- export declare const Searchable: Story;
11
- export declare const SearchableSizes: Story;
12
- export declare const SearchableWithError: Story;
13
- export declare const SearchableDisabled: Story;
14
- export declare const MultiSelect: Story;
15
- export declare const MultiSelectPreselected: Story;
16
- export declare const MultiSelectSizes: Story;
17
- export declare const MultiSelectDisabled: Story;
18
- export declare const MultiSelectWithError: Story;
@@ -1,10 +0,0 @@
1
- import { Meta, StoryObj } from '@storybook/react';
2
- import { Textarea } from './Textarea';
3
- declare const meta: Meta<typeof Textarea>;
4
- export default meta;
5
- type Story = StoryObj<typeof Textarea>;
6
- export declare const Default: Story;
7
- export declare const Small: Story;
8
- export declare const Large: Story;
9
- export declare const WithError: Story;
10
- export declare const NoResize: Story;
package/test-setup.d.ts DELETED
File without changes