@cashdoc/cashdoc-cms-design-system 1.15.2 → 2.0.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/dist/index.es.js +11408 -10716
- package/dist/index.es.js.map +1 -1
- package/dist/index.umd.js +112 -76
- package/dist/index.umd.js.map +1 -1
- package/dist/src/components/Button/Button.d.ts +2 -2
- package/dist/src/components/Button/variants.d.ts +13 -11
- package/dist/src/components/ContentArea/ContentArea.d.ts +32 -0
- package/dist/src/components/ContentArea/index.d.ts +2 -0
- package/dist/src/components/Dropdown/Select.d.ts +1 -1
- package/dist/src/components/FilterToggleGroup/FilterToggleGroup.d.ts +28 -27
- package/dist/src/components/Layout/Layout.d.ts +10 -0
- package/dist/src/components/Layout/index.d.ts +2 -0
- package/dist/src/components/Switch/Switch.d.ts +2 -2
- package/dist/src/components/Tabs/Tabs.d.ts +87 -0
- package/dist/src/components/Tabs/index.d.ts +2 -0
- package/dist/src/components/ToggleButton/variants.d.ts +5 -7
- package/dist/src/components/index.d.ts +3 -0
- package/dist/style.css +1 -1
- package/package.json +2 -1
|
@@ -26,7 +26,7 @@ export type ButtonProps = {} & ButtonHTMLAttributes<HTMLButtonElement> & Variant
|
|
|
26
26
|
*
|
|
27
27
|
* ## Props
|
|
28
28
|
*
|
|
29
|
-
* - `variant`: `default` | `secondary` | `outline` | `ghost` | `link` | `underline`
|
|
29
|
+
* - `variant`: `default` | `secondary` | `outline` | `ghost` | `warning` | `danger` | `link` | `underline`
|
|
30
30
|
* - `size`: `default` | `sm` | `lg` | `icon`
|
|
31
31
|
* - `type`: 기본값 `"button"` — `<form>` 내부에서 의도치 않은 submit을 방지합니다. submit 버튼이 필요하면 `type="submit"`을 명시하세요.
|
|
32
32
|
*
|
|
@@ -74,7 +74,7 @@ export type ButtonProps = {} & ButtonHTMLAttributes<HTMLButtonElement> & Variant
|
|
|
74
74
|
* 
|
|
75
75
|
*/
|
|
76
76
|
declare const Button: import('react').ForwardRefExoticComponent<ButtonHTMLAttributes<HTMLButtonElement> & VariantProps<(props?: ({
|
|
77
|
-
variant?: "default" | "secondary" | "outline" | "ghost" | "link" | "underline" | null | undefined;
|
|
77
|
+
variant?: "default" | "secondary" | "outline" | "ghost" | "warning" | "danger" | "link" | "underline" | null | undefined;
|
|
78
78
|
size?: "default" | "sm" | "lg" | "icon" | null | undefined;
|
|
79
79
|
} & import('class-variance-authority/types').ClassProp) | undefined) => string> & import('react').RefAttributes<HTMLButtonElement>>;
|
|
80
80
|
export { Button };
|
|
@@ -1,19 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* 버튼 컴포넌트의 스타일 variant를 정의합니다.
|
|
3
3
|
*
|
|
4
|
-
* @variant default - 기본
|
|
5
|
-
* @variant secondary - 보조
|
|
6
|
-
* @variant outline -
|
|
7
|
-
* @variant ghost -
|
|
8
|
-
* @variant
|
|
9
|
-
* @variant
|
|
4
|
+
* @variant default - 기본 CTA (다크 뉴트럴 배경)
|
|
5
|
+
* @variant secondary - 보조 액션 (밝은 그레이 배경)
|
|
6
|
+
* @variant outline - 테두리만 (흰색 배경)
|
|
7
|
+
* @variant ghost - 투명 배경, hover시 배경
|
|
8
|
+
* @variant warning - 소프트 위험 액션 (옅은 빨강 배경 + 빨간 텍스트)
|
|
9
|
+
* @variant danger - 강한 파괴적 액션 (빨간 솔리드 배경 + 흰 텍스트)
|
|
10
|
+
* @variant link - 링크 텍스트 (블루)
|
|
11
|
+
* @variant underline - 항상 밑줄 텍스트
|
|
10
12
|
*
|
|
11
|
-
* @size default - 기본
|
|
12
|
-
* @size sm - 작은
|
|
13
|
-
* @size lg - 큰
|
|
14
|
-
* @size icon - 아이콘
|
|
13
|
+
* @size default - 기본 (h-9, 36px)
|
|
14
|
+
* @size sm - 작은 (h-7, 30px)
|
|
15
|
+
* @size lg - 큰 (h-11, 44px)
|
|
16
|
+
* @size icon - 아이콘 정사각형 (36x36)
|
|
15
17
|
*/
|
|
16
18
|
export declare const buttonVariants: (props?: ({
|
|
17
|
-
variant?: "default" | "secondary" | "outline" | "ghost" | "link" | "underline" | null | undefined;
|
|
19
|
+
variant?: "default" | "secondary" | "outline" | "ghost" | "warning" | "danger" | "link" | "underline" | null | undefined;
|
|
18
20
|
size?: "default" | "sm" | "lg" | "icon" | null | undefined;
|
|
19
21
|
} & import('class-variance-authority/types').ClassProp) | undefined) => string;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { ComponentPropsWithoutRef } from 'react';
|
|
2
|
+
import { VariantProps } from 'class-variance-authority';
|
|
3
|
+
|
|
4
|
+
declare const contentAreaVariants: (props?: ({
|
|
5
|
+
padding?: "sm" | "lg" | "none" | "md" | null | undefined;
|
|
6
|
+
} & import('class-variance-authority/types').ClassProp) | undefined) => string;
|
|
7
|
+
export type ContentAreaProps = {
|
|
8
|
+
/**
|
|
9
|
+
* 내부 padding 크기. 자식 컴포넌트가 자체 padding을 가질 때는 `"none"` 사용.
|
|
10
|
+
* `ContentArea.Header` / `ContentArea.Body` / `ContentArea.Footer`를 함께
|
|
11
|
+
* 쓸 경우 항상 `"none"`을 사용하세요.
|
|
12
|
+
* @default "md"
|
|
13
|
+
*/
|
|
14
|
+
padding?: VariantProps<typeof contentAreaVariants>["padding"];
|
|
15
|
+
} & ComponentPropsWithoutRef<"div">;
|
|
16
|
+
export type ContentAreaHeaderProps = ComponentPropsWithoutRef<"header">;
|
|
17
|
+
export type ContentAreaBodyProps = ComponentPropsWithoutRef<"div">;
|
|
18
|
+
export type ContentAreaFooterProps = ComponentPropsWithoutRef<"footer">;
|
|
19
|
+
export declare const ContentArea: import('react').ForwardRefExoticComponent<{
|
|
20
|
+
/**
|
|
21
|
+
* 내부 padding 크기. 자식 컴포넌트가 자체 padding을 가질 때는 `"none"` 사용.
|
|
22
|
+
* `ContentArea.Header` / `ContentArea.Body` / `ContentArea.Footer`를 함께
|
|
23
|
+
* 쓸 경우 항상 `"none"`을 사용하세요.
|
|
24
|
+
* @default "md"
|
|
25
|
+
*/
|
|
26
|
+
padding?: VariantProps<typeof contentAreaVariants>["padding"];
|
|
27
|
+
} & Omit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & import('react').RefAttributes<HTMLDivElement>> & {
|
|
28
|
+
Header: import('react').ForwardRefExoticComponent<Omit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLElement>, HTMLElement>, "ref"> & import('react').RefAttributes<HTMLElement>>;
|
|
29
|
+
Body: import('react').ForwardRefExoticComponent<Omit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & import('react').RefAttributes<HTMLDivElement>>;
|
|
30
|
+
Footer: import('react').ForwardRefExoticComponent<Omit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLElement>, HTMLElement>, "ref"> & import('react').RefAttributes<HTMLElement>>;
|
|
31
|
+
};
|
|
32
|
+
export {};
|
|
@@ -112,4 +112,4 @@ export declare const Select: import('react').ForwardRefExoticComponent<{
|
|
|
112
112
|
} & import('class-variance-authority/types').ClassProp) | undefined) => string> & {
|
|
113
113
|
multiple?: false;
|
|
114
114
|
selectAll?: false;
|
|
115
|
-
}, "
|
|
115
|
+
}, "multiple" | "searchable" | "clearable" | "selectAll"> & import('react').RefAttributes<HTMLButtonElement>>;
|
|
@@ -2,50 +2,51 @@ import { ReactNode } from 'react';
|
|
|
2
2
|
|
|
3
3
|
declare const filterToggleGroupSizeClassMap: {
|
|
4
4
|
readonly sm: {
|
|
5
|
-
readonly item: "
|
|
6
|
-
readonly caption: "text-[10px]
|
|
7
|
-
readonly value: "text-
|
|
8
|
-
readonly label: "text-[
|
|
5
|
+
readonly item: "min-w-[84px] px-3 py-2";
|
|
6
|
+
readonly caption: "text-[10px]";
|
|
7
|
+
readonly value: "text-lg";
|
|
8
|
+
readonly label: "text-[11px] mt-1";
|
|
9
9
|
readonly icon: "[&>svg]:size-3";
|
|
10
10
|
};
|
|
11
11
|
readonly md: {
|
|
12
|
-
readonly item: "
|
|
13
|
-
readonly caption: "text-[
|
|
14
|
-
readonly value: "text-
|
|
15
|
-
readonly label: "text-[
|
|
12
|
+
readonly item: "min-w-24 px-3.5 py-2.5";
|
|
13
|
+
readonly caption: "text-[11px]";
|
|
14
|
+
readonly value: "text-[22px]";
|
|
15
|
+
readonly label: "text-[12px] mt-1.5";
|
|
16
16
|
readonly icon: "[&>svg]:size-3.5";
|
|
17
17
|
};
|
|
18
18
|
readonly lg: {
|
|
19
|
-
readonly item: "
|
|
20
|
-
readonly caption: "text-
|
|
21
|
-
readonly value: "text-
|
|
22
|
-
readonly label: "text-
|
|
19
|
+
readonly item: "min-w-28 px-4 py-3";
|
|
20
|
+
readonly caption: "text-[11px]";
|
|
21
|
+
readonly value: "text-[26px]";
|
|
22
|
+
readonly label: "text-[13px] mt-1.5";
|
|
23
23
|
readonly icon: "[&>svg]:size-4";
|
|
24
24
|
};
|
|
25
25
|
readonly xl: {
|
|
26
|
-
readonly item: "
|
|
27
|
-
readonly caption: "text-
|
|
28
|
-
readonly value: "text-
|
|
29
|
-
readonly label: "text-
|
|
26
|
+
readonly item: "min-w-32 px-[18px] py-3.5";
|
|
27
|
+
readonly caption: "text-[12px]";
|
|
28
|
+
readonly value: "text-[32px]";
|
|
29
|
+
readonly label: "text-[13px] mt-2";
|
|
30
30
|
readonly icon: "[&>svg]:size-5";
|
|
31
31
|
};
|
|
32
32
|
readonly "2xl": {
|
|
33
|
-
readonly item: "
|
|
34
|
-
readonly caption: "text-
|
|
35
|
-
readonly value: "text-
|
|
36
|
-
readonly label: "text-
|
|
33
|
+
readonly item: "min-w-36 px-5 py-4";
|
|
34
|
+
readonly caption: "text-[13px]";
|
|
35
|
+
readonly value: "text-[40px]";
|
|
36
|
+
readonly label: "text-[14px] mt-2";
|
|
37
37
|
readonly icon: "[&>svg]:size-6";
|
|
38
38
|
};
|
|
39
39
|
};
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
readonly
|
|
43
|
-
readonly
|
|
44
|
-
readonly
|
|
45
|
-
readonly
|
|
40
|
+
/** Intent dot color (replaces the previous top color bar). */
|
|
41
|
+
declare const filterToggleGroupIntentDotClassMap: {
|
|
42
|
+
readonly default: "bg-cms-gray-400";
|
|
43
|
+
readonly primary: "bg-cms-primary-200";
|
|
44
|
+
readonly success: "bg-cms-green-500";
|
|
45
|
+
readonly danger: "bg-cms-red-500";
|
|
46
|
+
readonly muted: "bg-cms-gray-400";
|
|
46
47
|
};
|
|
47
48
|
export type FilterToggleGroupSize = keyof typeof filterToggleGroupSizeClassMap;
|
|
48
|
-
export type FilterToggleGroupIntent = keyof typeof
|
|
49
|
+
export type FilterToggleGroupIntent = keyof typeof filterToggleGroupIntentDotClassMap;
|
|
49
50
|
export type FilterToggleGroupItem<T extends string | number> = {
|
|
50
51
|
value: T;
|
|
51
52
|
count: number | string;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ComponentPropsWithoutRef } from 'react';
|
|
2
|
+
|
|
3
|
+
export type LayoutRootProps = ComponentPropsWithoutRef<"div">;
|
|
4
|
+
export type LayoutSidebarProps = ComponentPropsWithoutRef<"aside">;
|
|
5
|
+
export type LayoutMainProps = ComponentPropsWithoutRef<"main">;
|
|
6
|
+
export declare const Layout: {
|
|
7
|
+
Root: import('react').ForwardRefExoticComponent<Omit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & import('react').RefAttributes<HTMLDivElement>>;
|
|
8
|
+
Sidebar: import('react').ForwardRefExoticComponent<Omit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLElement>, HTMLElement>, "ref"> & import('react').RefAttributes<HTMLElement>>;
|
|
9
|
+
Main: import('react').ForwardRefExoticComponent<Omit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLElement>, HTMLElement>, "ref"> & import('react').RefAttributes<HTMLElement>>;
|
|
10
|
+
};
|
|
@@ -3,7 +3,7 @@ import { VariantProps } from 'class-variance-authority';
|
|
|
3
3
|
|
|
4
4
|
import * as SwitchPrimitives from "@radix-ui/react-switch";
|
|
5
5
|
declare const switchVariants: (props?: ({
|
|
6
|
-
variant?: "default" | "green" | "black" | "blue" | "red" | null | undefined;
|
|
6
|
+
variant?: "default" | "primary" | "green" | "black" | "blue" | "red" | null | undefined;
|
|
7
7
|
} & import('class-variance-authority/types').ClassProp) | undefined) => string;
|
|
8
8
|
export type SwitchProps = {
|
|
9
9
|
/**
|
|
@@ -121,6 +121,6 @@ declare const Switch: React.ForwardRefExoticComponent<{
|
|
|
121
121
|
*/
|
|
122
122
|
uncheckedLabel?: React.ReactNode;
|
|
123
123
|
} & Omit<SwitchPrimitives.SwitchProps & React.RefAttributes<HTMLButtonElement>, "ref"> & VariantProps<(props?: ({
|
|
124
|
-
variant?: "default" | "green" | "black" | "blue" | "red" | null | undefined;
|
|
124
|
+
variant?: "default" | "primary" | "green" | "black" | "blue" | "red" | null | undefined;
|
|
125
125
|
} & import('class-variance-authority/types').ClassProp) | undefined) => string> & React.RefAttributes<HTMLButtonElement>>;
|
|
126
126
|
export { Switch };
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { ComponentPropsWithoutRef } from 'react';
|
|
2
|
+
import * as TabsPrimitive from "@radix-ui/react-tabs";
|
|
3
|
+
export type TabsProps = ComponentPropsWithoutRef<typeof TabsPrimitive.Root>;
|
|
4
|
+
export type TabsListProps = ComponentPropsWithoutRef<typeof TabsPrimitive.List>;
|
|
5
|
+
export type TabsTriggerProps = ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>;
|
|
6
|
+
export type TabsContentProps = ComponentPropsWithoutRef<typeof TabsPrimitive.Content>;
|
|
7
|
+
/**
|
|
8
|
+
* 동일한 영역에 여러 콘텐츠 패널을 전환해 보여주는 탭 컴포넌트입니다.
|
|
9
|
+
*
|
|
10
|
+
* Radix UI의 Tabs primitive를 기반으로 구현되어 키보드 내비게이션,
|
|
11
|
+
* ARIA(`role="tablist"`, `role="tab"`, `role="tabpanel"`), focus management가
|
|
12
|
+
* 자동으로 처리됩니다.
|
|
13
|
+
*
|
|
14
|
+
* ## When (언제 사용해야 하는가)
|
|
15
|
+
*
|
|
16
|
+
* **사용해야 하는 경우:**
|
|
17
|
+
* - **하위 카테고리 전환**: "무료 포인트 / 유료 포인트"처럼 동일 컨텍스트에서
|
|
18
|
+
* 2~6개의 분류된 데이터를 전환해 보여줄 때
|
|
19
|
+
* - **단계가 아닌 평행 뷰**: 순서가 없고 상호 배타적인 패널들
|
|
20
|
+
*
|
|
21
|
+
* **사용하지 말아야 하는 경우:**
|
|
22
|
+
* - **순차적 단계**: Wizard/Stepper를 사용하세요.
|
|
23
|
+
* - **단일 옵션 전환 (on/off)**: `Switch`나 `ToggleButton`을 사용하세요.
|
|
24
|
+
* - **다중 선택 필터**: `CountFilterChips`나 `FilterToggleGroup`을 사용하세요.
|
|
25
|
+
* - **7개 이상의 카테고리**: 가독성이 떨어집니다. `Dropdown`이나 `SegmentedControls`의 변형을 검토하세요.
|
|
26
|
+
*
|
|
27
|
+
* ## Layout behavior
|
|
28
|
+
*
|
|
29
|
+
* - **Underline indicator**: 활성 탭 아래 2px 검은색 indicator가 표시되며,
|
|
30
|
+
* `TabsList`의 하단 border와 겹쳐서 그려집니다(`-mb-px`).
|
|
31
|
+
* - **Full Width List**: `TabsList`는 기본적으로 `inline-flex`로
|
|
32
|
+
* 내용만큼만 차지합니다. 전체 너비가 필요하면 `className="w-full"`로 확장.
|
|
33
|
+
*
|
|
34
|
+
* ## Accessibility
|
|
35
|
+
*
|
|
36
|
+
* - 키보드: ←/→ 또는 ↑/↓로 탭 이동, Home/End로 처음/끝, 자동 activation은
|
|
37
|
+
* `activationMode="manual"`로 변경 가능.
|
|
38
|
+
* - ARIA: `role="tablist"`, `role="tab"`, `aria-selected`, `aria-controls`,
|
|
39
|
+
* `role="tabpanel"`이 자동 부여됩니다.
|
|
40
|
+
*
|
|
41
|
+
* ## Example
|
|
42
|
+
*
|
|
43
|
+
* {@tool snippet}
|
|
44
|
+
* 기본 사용:
|
|
45
|
+
*
|
|
46
|
+
* ```tsx
|
|
47
|
+
* <Tabs defaultValue="paid">
|
|
48
|
+
* <TabsList>
|
|
49
|
+
* <TabsTrigger value="free">무료 포인트</TabsTrigger>
|
|
50
|
+
* <TabsTrigger value="paid">유료 포인트</TabsTrigger>
|
|
51
|
+
* </TabsList>
|
|
52
|
+
* <TabsContent value="free">무료 포인트 내역</TabsContent>
|
|
53
|
+
* <TabsContent value="paid">유료 포인트 내역</TabsContent>
|
|
54
|
+
* </Tabs>
|
|
55
|
+
* ```
|
|
56
|
+
*
|
|
57
|
+
* Controlled 사용:
|
|
58
|
+
*
|
|
59
|
+
* ```tsx
|
|
60
|
+
* const [tab, setTab] = useState("paid");
|
|
61
|
+
* <Tabs value={tab} onValueChange={setTab}>
|
|
62
|
+
* ...
|
|
63
|
+
* </Tabs>
|
|
64
|
+
* ```
|
|
65
|
+
* {@end-tool}
|
|
66
|
+
*/
|
|
67
|
+
export declare const Tabs: import('react').ForwardRefExoticComponent<TabsPrimitive.TabsProps & import('react').RefAttributes<HTMLDivElement>>;
|
|
68
|
+
/**
|
|
69
|
+
* 탭 트리거(`TabsTrigger`)들을 담는 컨테이너입니다.
|
|
70
|
+
*
|
|
71
|
+
* 하단 1px gray separator를 그리며, 각 활성 트리거의 검은 indicator가
|
|
72
|
+
* separator 위로 오버랩됩니다.
|
|
73
|
+
*/
|
|
74
|
+
export declare const TabsList: import('react').ForwardRefExoticComponent<Omit<TabsPrimitive.TabsListProps & import('react').RefAttributes<HTMLDivElement>, "ref"> & import('react').RefAttributes<HTMLDivElement>>;
|
|
75
|
+
/**
|
|
76
|
+
* 탭 라벨 버튼입니다. 활성화 시 검은색 underline indicator가 표시됩니다.
|
|
77
|
+
*
|
|
78
|
+
* `value`는 같은 `Tabs` 안의 `TabsContent.value`와 매칭되어야 합니다.
|
|
79
|
+
*/
|
|
80
|
+
export declare const TabsTrigger: import('react').ForwardRefExoticComponent<Omit<TabsPrimitive.TabsTriggerProps & import('react').RefAttributes<HTMLButtonElement>, "ref"> & import('react').RefAttributes<HTMLButtonElement>>;
|
|
81
|
+
/**
|
|
82
|
+
* 탭 콘텐츠 패널입니다.
|
|
83
|
+
*
|
|
84
|
+
* `value`가 활성 탭과 일치하면 표시되며, 그 외에는 DOM에서 숨겨집니다
|
|
85
|
+
* (`forceMount` 사용 시 항상 마운트).
|
|
86
|
+
*/
|
|
87
|
+
export declare const TabsContent: import('react').ForwardRefExoticComponent<Omit<TabsPrimitive.TabsContentProps & import('react').RefAttributes<HTMLDivElement>, "ref"> & import('react').RefAttributes<HTMLDivElement>>;
|
|
@@ -1,15 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* ToggleButton(눌림 상태가 유지되는 박스 토글)의 시각 variant를 정의합니다.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* `pressed` 상태에 따라 채워진(filled) ↔ 외곽선(outline) 스타일이
|
|
6
|
-
* 토글되며 상태가 유지됩니다.
|
|
4
|
+
* v2 family-look: `pressed` 상태는 다크 fill + 좌측 체크 표식으로 표현합니다.
|
|
7
5
|
*
|
|
8
|
-
* @variant default - 회색 톤 (기본). 눌림 상태에서 `cms-gray-
|
|
9
|
-
* @variant primary - 강조 톤. 눌림 상태에서 `cms-primary-
|
|
6
|
+
* @variant default - 회색 톤 (기본). 눌림 상태에서 `cms-gray-900` 외곽선·체크.
|
|
7
|
+
* @variant primary - 강조 톤. 눌림 상태에서 `cms-primary-200` (#FFD200) fill.
|
|
10
8
|
*
|
|
11
|
-
* @size sm - h-
|
|
12
|
-
* @size md - h-
|
|
9
|
+
* @size sm - h-7, text-[12px], px-2.5
|
|
10
|
+
* @size md - h-[34px], text-[13px], px-3.5 (기본)
|
|
13
11
|
*/
|
|
14
12
|
export declare const toggleButtonVariants: (props?: ({
|
|
15
13
|
variant?: "default" | "primary" | null | undefined;
|
|
@@ -26,6 +26,9 @@ export * from './Table';
|
|
|
26
26
|
export * from './ImageUpload';
|
|
27
27
|
export * from './FileUpload';
|
|
28
28
|
export * from './SegmentedControls';
|
|
29
|
+
export * from './Tabs';
|
|
29
30
|
export * from './FilterToggleGroup';
|
|
30
31
|
export * from './CountFilterChips';
|
|
31
32
|
export * from './BarChart';
|
|
33
|
+
export * from './Layout';
|
|
34
|
+
export * from './ContentArea';
|