@crossangle-org/cs-ui 0.2.5 → 0.2.7
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/components/accordion/cs-accordion.js +116 -0
- package/dist/components/accordion/cs-accordion.js.map +1 -0
- package/dist/components/alert-dialog/cs-alert-dialog.js +148 -0
- package/dist/components/alert-dialog/cs-alert-dialog.js.map +1 -0
- package/dist/components/avatar/cs-avatar.js +44 -0
- package/dist/components/avatar/cs-avatar.js.map +1 -0
- package/dist/components/badge/cs-badge.js +40 -0
- package/dist/components/badge/cs-badge.js.map +1 -0
- package/dist/components/box/cs-box.js +37 -0
- package/dist/components/box/cs-box.js.map +1 -0
- package/dist/components/button/cs-button.js +91 -0
- package/dist/components/button/cs-button.js.map +1 -0
- package/dist/components/calendar/cs-calendar.js +199 -0
- package/dist/components/calendar/cs-calendar.js.map +1 -0
- package/dist/components/card/cs-card.js +95 -0
- package/dist/components/card/cs-card.js.map +1 -0
- package/dist/components/chart/cs-chart.js +88 -0
- package/dist/components/chart/cs-chart.js.map +1 -0
- package/dist/components/checkbox/cs-checkbox.js +55 -0
- package/dist/components/checkbox/cs-checkbox.js.map +1 -0
- package/dist/components/code-block/cs-code-block.js +39 -0
- package/dist/components/code-block/cs-code-block.js.map +1 -0
- package/dist/components/code-block/cs-code-highlighter.js +59 -0
- package/dist/components/code-block/cs-code-highlighter.js.map +1 -0
- package/dist/components/collapsible/cs-collapsible.js +36 -0
- package/dist/components/collapsible/cs-collapsible.js.map +1 -0
- package/dist/components/date-picker/cs-date-picker.js +25 -0
- package/dist/components/date-picker/cs-date-picker.js.map +1 -0
- package/dist/components/dialog/cs-dialog.js +131 -0
- package/dist/components/dialog/cs-dialog.js.map +1 -0
- package/dist/components/drawer/cs-drawer.js +131 -0
- package/dist/components/drawer/cs-drawer.js.map +1 -0
- package/dist/components/dropdown-menu/cs-dropdown-menu.js +247 -0
- package/dist/components/dropdown-menu/cs-dropdown-menu.js.map +1 -0
- package/dist/components/dropzone/cs-dropzone.js +147 -0
- package/dist/components/dropzone/cs-dropzone.js.map +1 -0
- package/dist/components/empty/cs-empty.js +107 -0
- package/dist/components/empty/cs-empty.js.map +1 -0
- package/dist/components/field/cs-field.js +218 -0
- package/dist/components/field/cs-field.js.map +1 -0
- package/dist/components/input/cs-input-group.js +207 -0
- package/dist/components/input/cs-input-group.js.map +1 -0
- package/dist/components/input/cs-input.js +40 -0
- package/dist/components/input/cs-input.js.map +1 -0
- package/dist/components/label/cs-label.js +26 -0
- package/dist/components/label/cs-label.js.map +1 -0
- package/dist/components/navigation-menu/cs-navigation-menu.js +214 -0
- package/dist/components/navigation-menu/cs-navigation-menu.js.map +1 -0
- package/dist/components/pagination/cs-pagination.js +124 -0
- package/dist/components/pagination/cs-pagination.js.map +1 -0
- package/dist/components/popover/cs-popover.js +60 -0
- package/dist/components/popover/cs-popover.js.map +1 -0
- package/dist/components/progress/cs-progress.js +62 -0
- package/dist/components/progress/cs-progress.js.map +1 -0
- package/dist/components/scroll-area/cs-scroll-area.js +61 -0
- package/dist/components/scroll-area/cs-scroll-area.js.map +1 -0
- package/dist/components/select/cs-select.js +195 -0
- package/dist/components/select/cs-select.js.map +1 -0
- package/dist/components/select/cs-simple-select.js +32 -0
- package/dist/components/select/cs-simple-select.js.map +1 -0
- package/dist/components/separator/cs-separator.js +28 -0
- package/dist/components/separator/cs-separator.js.map +1 -0
- package/dist/components/sheet/cs-sheet.js +128 -0
- package/dist/components/sheet/cs-sheet.js.map +1 -0
- package/dist/components/sidebar/cs-sidebar.js +657 -0
- package/dist/components/sidebar/cs-sidebar.js.map +1 -0
- package/dist/components/skeleton/cs-skeleton.js +32 -0
- package/dist/components/skeleton/cs-skeleton.js.map +1 -0
- package/dist/components/sonner/cs-sonner.js +76 -0
- package/dist/components/sonner/cs-sonner.js.map +1 -0
- package/dist/components/spinner/cs-spinner.js +34 -0
- package/dist/components/spinner/cs-spinner.js.map +1 -0
- package/dist/components/switch/cs-switch.js +38 -0
- package/dist/components/switch/cs-switch.js.map +1 -0
- package/dist/components/table/cs-data-base-table.js +108 -0
- package/dist/components/table/cs-data-base-table.js.map +1 -0
- package/dist/components/table/cs-data-table.js +32 -0
- package/dist/components/table/cs-data-table.js.map +1 -0
- package/dist/components/table/cs-skeleton-table.js +41 -0
- package/dist/components/table/cs-skeleton-table.js.map +1 -0
- package/dist/components/table/cs-table.js +120 -0
- package/dist/components/table/cs-table.js.map +1 -0
- package/dist/components/tabs/cs-simple-tabs.js +24 -0
- package/dist/components/tabs/cs-simple-tabs.js.map +1 -0
- package/dist/components/tabs/cs-tabs.js +114 -0
- package/dist/components/tabs/cs-tabs.js.map +1 -0
- package/dist/components/toggle/cs-toggle-group.js +65 -0
- package/dist/components/toggle/cs-toggle-group.js.map +1 -0
- package/dist/components/toggle/cs-toggle.js +46 -0
- package/dist/components/toggle/cs-toggle.js.map +1 -0
- package/dist/components/tooltip/cs-simple-tooltip.js +16 -0
- package/dist/components/tooltip/cs-simple-tooltip.js.map +1 -0
- package/dist/components/tooltip/cs-tooltip.js +72 -0
- package/dist/components/tooltip/cs-tooltip.js.map +1 -0
- package/dist/constants/cs-chart-option.constant.js +105 -0
- package/dist/constants/cs-chart-option.constant.js.map +1 -0
- package/dist/cs-ui.css +73 -108
- package/dist/hooks/use-accordion.js +54 -0
- package/dist/hooks/use-accordion.js.map +1 -0
- package/dist/hooks/use-infinite-scroll.js +40 -0
- package/dist/hooks/use-infinite-scroll.js.map +1 -0
- package/dist/hooks/use-laptop.js +20 -0
- package/dist/hooks/use-laptop.js.map +1 -0
- package/dist/hooks/use-mobile.js +20 -0
- package/dist/hooks/use-mobile.js.map +1 -0
- package/dist/index.d.ts +19 -6
- package/dist/index.js +287 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/chart.util.js +48 -0
- package/dist/lib/chart.util.js.map +1 -0
- package/dist/lib/style.util.js +19 -0
- package/dist/lib/style.util.js.map +1 -0
- package/dist/lib/utils.js +27 -0
- package/dist/lib/utils.js.map +1 -0
- package/package.json +4 -5
- package/dist/index.cjs.js +0 -147659
- package/dist/index.cjs.js.map +0 -1
- package/dist/index.es.js +0 -147624
- package/dist/index.es.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cs-simple-select.js","sources":["../../../src/components/select/cs-simple-select.tsx"],"sourcesContent":["import { ComponentProps, forwardRef } from 'react'\nimport { cn } from '../../lib/utils'\nimport { CsSelect, CsSelectContent, CsSelectItem, CsSelectTrigger, CsSelectValue } from './cs-select'\n\n/**\n * CsSimpleSelect 스타일 시스템 (Design Token Reference)\n *\n * CsSelect의 래퍼 컴포넌트입니다.\n * 상세한 토큰 매핑은 CsSelect 문서를 참조하세요.\n *\n * ## Figma Token → Props 매핑\n * | Figma 토큰 패턴 | Props |\n * |----------------|-------|\n * | `select/solid/*` | `triggerProps.variant=\"solid\"` (기본) |\n * | `select/outline/*` | `triggerProps.variant=\"outline\"` |\n * | `select/size/*` | `triggerProps.size` |\n *\n * ## CsSelect와의 차이점\n * - 단순 리스트 선택에 최적화 (그룹, 구분선 미지원)\n * - list prop으로 옵션 배열 전달\n * - Form 호환 onChange 지원\n *\n * @see CsSelect - 그룹, 구분선 등 복잡한 조합 필요 시 직접 사용\n */\n\n/**\n * CS Design System 간편 셀렉트\n *\n * 단순 리스트 선택을 위한 래퍼 컴포넌트.\n * 복잡한 구조(그룹, 구분선)가 필요하면 CsSelect 직접 사용.\n *\n * @example 기본\n * ```tsx\n * <CsSimpleSelect\n * list={[\n * { value: 'apple', label: 'Apple' },\n * { value: 'banana', label: 'Banana' },\n * ]}\n * placeholder=\"과일 선택...\"\n * onValueChange={(value) => console.log(value)}\n * />\n * ```\n *\n * @example 크기 변경\n * ```tsx\n * <CsSimpleSelect\n * list={options}\n * triggerProps={{ size: 'small' }}\n * />\n * ```\n *\n * @example Form 호환 (react-hook-form 등)\n * ```tsx\n * <CsSimpleSelect\n * list={options}\n * onChange={(e) => form.setValue('field', e.target.value)}\n * />\n * ```\n *\n * @example 제어 컴포넌트\n * ```tsx\n * <CsSimpleSelect\n * list={options}\n * value={selected}\n * onValueChange={setSelected}\n * />\n * ```\n */\n\n/**\n * 옵션 아이템 타입\n */\ninterface CsSimpleSelectItemProps {\n /** 옵션의 실제 값 (form 전송/상태 저장용) */\n value: string\n /** 옵션의 표시 텍스트 */\n label: string\n /** 선택 불가능 여부 */\n disabled?: boolean\n}\n\n/**\n * CsSimpleSelect Props\n */\ninterface CsSimpleSelectProps extends Omit<ComponentProps<typeof CsSelect>, 'children'> {\n /**\n * 옵션 리스트 (필수)\n * @example [{ value: 'kr', label: '한국' }, { value: 'us', label: '미국' }]\n */\n list: CsSimpleSelectItemProps[]\n\n /**\n * 플레이스홀더 텍스트\n * 값이 선택되지 않았을 때 표시\n */\n placeholder?: string\n\n /**\n * 트리거 버튼 props\n * size, variant, className 등 CsSelectTrigger에 전달\n */\n triggerProps?: ComponentProps<typeof CsSelectTrigger>\n\n /**\n * 드롭다운 콘텐츠 props\n * align, side, className 등 CsSelectContent에 전달\n */\n contentProps?: ComponentProps<typeof CsSelectContent>\n\n className?: string\n\n /**\n * 선택 콜백 (deprecated, onValueChange 사용 권장)\n */\n onSelect?: (value: string) => void\n\n /**\n * 값 변경 콜백 (권장)\n */\n onValueChange?: (value: string) => void\n\n /**\n * Form 호환용 onChange\n * react-hook-form 등과 연동 시 사용\n * @example onChange={(e) => form.setValue('field', e.target.value)}\n */\n onChange?: (event: { target: { value: string } }) => void\n}\n\nconst CsSimpleSelect = forwardRef<HTMLButtonElement, CsSimpleSelectProps>(\n ({\n list,\n placeholder,\n triggerProps,\n contentProps,\n className,\n onSelect,\n onValueChange,\n onChange,\n ...props\n }, ref) => {\n const handleValueChange = (newValue: string) => {\n onSelect?.(newValue)\n onValueChange?.(newValue)\n onChange?.({ target: { value: newValue } })\n }\n return (\n <CsSelect onValueChange={handleValueChange} {...props}>\n <CsSelectTrigger ref={ref} {...triggerProps} className={cn(triggerProps?.className, className)}>\n <CsSelectValue placeholder={placeholder} />\n </CsSelectTrigger>\n <CsSelectContent {...contentProps}>\n {list.map((item) => (\n <CsSelectItem key={item.value} value={item.value} disabled={item.disabled}>\n {item.label}\n </CsSelectItem>\n ))}\n </CsSelectContent>\n </CsSelect>\n )\n }\n)\nCsSimpleSelect.displayName = 'CsSimpleSelect'\n\nexport { CsSimpleSelect, type CsSimpleSelectProps, type CsSimpleSelectItemProps }"],"names":[],"mappings":";;;;AAiIA,MAAM,iBAAiB;AAAA,EACrB,CAAC;AAAA,IACC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EAAA,GACF,QAAQ;AACT,UAAM,oBAAoB,CAAC,aAAqB;AAC9C,iBAAW,QAAQ;AACnB,sBAAgB,QAAQ;AACxB,iBAAW,EAAE,QAAQ,EAAE,OAAO,SAAA,GAAY;AAAA,IAC5C;AACA,WACE,qBAAC,UAAA,EAAS,eAAe,mBAAoB,GAAG,OAC9C,UAAA;AAAA,MAAA,oBAAC,iBAAA,EAAgB,KAAW,GAAG,cAAc,WAAW,GAAG,cAAc,WAAW,SAAS,GAC3F,UAAA,oBAAC,eAAA,EAAc,aAA0B,GAC3C;AAAA,MACA,oBAAC,mBAAiB,GAAG,cAClB,eAAK,IAAI,CAAC,SACT,oBAAC,cAAA,EAA8B,OAAO,KAAK,OAAO,UAAU,KAAK,UAC9D,eAAK,MAAA,GADW,KAAK,KAExB,CACD,EAAA,CACH;AAAA,IAAA,GACF;AAAA,EAEJ;AACF;AACA,eAAe,cAAc;"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
import * as SeparatorPrimitive from "@radix-ui/react-separator";
|
|
4
|
+
import { cn } from "../../lib/utils.js";
|
|
5
|
+
function CsSeparator({
|
|
6
|
+
className,
|
|
7
|
+
orientation = "horizontal",
|
|
8
|
+
decorative = true,
|
|
9
|
+
...props
|
|
10
|
+
}) {
|
|
11
|
+
return /* @__PURE__ */ jsx(
|
|
12
|
+
SeparatorPrimitive.Root,
|
|
13
|
+
{
|
|
14
|
+
"data-slot": "separator",
|
|
15
|
+
decorative,
|
|
16
|
+
orientation,
|
|
17
|
+
className: cn(
|
|
18
|
+
"bg-(--separator-border) shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px",
|
|
19
|
+
className
|
|
20
|
+
),
|
|
21
|
+
...props
|
|
22
|
+
}
|
|
23
|
+
);
|
|
24
|
+
}
|
|
25
|
+
export {
|
|
26
|
+
CsSeparator
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=cs-separator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cs-separator.js","sources":["../../../src/components/separator/cs-separator.tsx"],"sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport * as SeparatorPrimitive from \"@radix-ui/react-separator\"\n\nimport { cn } from \"../../lib/utils\"\n\n/**\n * CsSeparator 스타일 시스템 (Design Token Reference)\n *\n * ## Figma Token → Props 매핑\n * | Figma 토큰 패턴 | Props |\n * |----------------|-------|\n * | `separator/border` | 구분선 색상 |\n *\n * ## Props 옵션\n * | prop | 값 | 설명 |\n * |------|-----|------|\n * | orientation | `horizontal` | 수평 구분선 (기본) |\n * | orientation | `vertical` | 수직 구분선 |\n * | decorative | `true` | 장식용 (기본, 스크린리더 무시) |\n * | decorative | `false` | 의미 있는 구분선 |\n *\n * ## CSS Variables\n * ```css\n * --separator-border\n * ```\n *\n * @see {@link https://www.radix-ui.com/primitives/docs/components/separator | Radix Separator}\n */\n\n/**\n * CsSeparator Props\n */\ntype CsSeparatorProps = React.ComponentProps<typeof SeparatorPrimitive.Root> & {\n /**\n * 구분선 방향\n * - `horizontal`: 수평 (기본) - 섹션 구분\n * - `vertical`: 수직 - 인라인 항목 구분\n * @default 'horizontal'\n */\n orientation?: 'horizontal' | 'vertical'\n /**\n * 장식용 여부\n * true면 스크린리더가 무시\n * @default true\n */\n decorative?: boolean\n}\n\n/**\n * CS Design System 구분선 컴포넌트\n *\n * 콘텐츠 영역을 시각적으로 분리하는 얇은 선.\n * 섹션 구분, 메뉴 항목 구분 등에 사용되며, 수평/수직 방향을 지원합니다.\n *\n * ## 사용 시나리오\n * - 섹션 구분: 카드 내 헤더/본문 분리 (수평)\n * - 메뉴 항목 구분: 드롭다운 메뉴의 그룹 분리 (수평)\n * - 인라인 구분: 버튼 사이, 텍스트 사이 (수직)\n * - 리스트 항목 구분: 항목 간 경계 표시 (수평)\n *\n * @example 수평 구분선 (기본)\n * ```tsx\n * <CsSeparator />\n * ```\n *\n * @example 수직 구분선\n * ```tsx\n * <div className=\"flex items-center h-5\">\n * <span>항목1</span>\n * <CsSeparator orientation=\"vertical\" className=\"mx-2\" />\n * <span>항목2</span>\n * </div>\n * ```\n *\n * @example 섹션 구분\n * ```tsx\n * <CsCard>\n * <CsCardHeader>...</CsCardHeader>\n * <CsSeparator />\n * <CsCardContent>...</CsCardContent>\n * </CsCard>\n * ```\n */\nfunction CsSeparator({\n className,\n orientation = \"horizontal\",\n decorative = true,\n ...props\n}: CsSeparatorProps) {\n return (\n <SeparatorPrimitive.Root\n data-slot=\"separator\"\n decorative={decorative}\n orientation={orientation}\n className={cn(\n \"bg-(--separator-border) shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { CsSeparator, type CsSeparatorProps }\n"],"names":[],"mappings":";;;;AAqFqB,SACnB,YAAA;AAAA,EACA;AAAA,EACA,cAAa;AAAA,EACb,aAAG;AAAA,EACL,GAAqB;AACnB;AACE,SAAoB;AAAA,IAAnB,mBAAA;AAAA,IAAA;AAAA,MAEC,aAAA;AAAA,MACA;AAAA,MACA;AAAA,MAAW,WACT;AAAA,QACA;AAAA,QACF;AAAA,MACC;AAAA,MAAG,GAAA;AAAA,IACN;AAAA,EAEJ;;"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import * as SheetPrimitive from "@radix-ui/react-dialog";
|
|
4
|
+
import { XIcon } from "lucide-react";
|
|
5
|
+
import { cn } from "../../lib/utils.js";
|
|
6
|
+
function CsSheet({ ...props }) {
|
|
7
|
+
return /* @__PURE__ */ jsx(SheetPrimitive.Root, { "data-slot": "sheet", ...props });
|
|
8
|
+
}
|
|
9
|
+
function CsSheetTrigger({
|
|
10
|
+
...props
|
|
11
|
+
}) {
|
|
12
|
+
return /* @__PURE__ */ jsx(SheetPrimitive.Trigger, { "data-slot": "sheet-trigger", ...props });
|
|
13
|
+
}
|
|
14
|
+
function CsSheetClose({
|
|
15
|
+
...props
|
|
16
|
+
}) {
|
|
17
|
+
return /* @__PURE__ */ jsx(SheetPrimitive.Close, { "data-slot": "sheet-close", ...props });
|
|
18
|
+
}
|
|
19
|
+
function CsSheetPortal({
|
|
20
|
+
...props
|
|
21
|
+
}) {
|
|
22
|
+
return /* @__PURE__ */ jsx(SheetPrimitive.Portal, { "data-slot": "sheet-portal", ...props });
|
|
23
|
+
}
|
|
24
|
+
function CsSheetOverlay({
|
|
25
|
+
className,
|
|
26
|
+
...props
|
|
27
|
+
}) {
|
|
28
|
+
return /* @__PURE__ */ jsx(
|
|
29
|
+
SheetPrimitive.Overlay,
|
|
30
|
+
{
|
|
31
|
+
"data-slot": "sheet-overlay",
|
|
32
|
+
className: cn(
|
|
33
|
+
"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50",
|
|
34
|
+
className
|
|
35
|
+
),
|
|
36
|
+
...props
|
|
37
|
+
}
|
|
38
|
+
);
|
|
39
|
+
}
|
|
40
|
+
function CsSheetContent({
|
|
41
|
+
className,
|
|
42
|
+
children,
|
|
43
|
+
side = "right",
|
|
44
|
+
...props
|
|
45
|
+
}) {
|
|
46
|
+
return /* @__PURE__ */ jsxs(CsSheetPortal, { children: [
|
|
47
|
+
/* @__PURE__ */ jsx(CsSheetOverlay, {}),
|
|
48
|
+
/* @__PURE__ */ jsxs(
|
|
49
|
+
SheetPrimitive.Content,
|
|
50
|
+
{
|
|
51
|
+
"data-slot": "sheet-content",
|
|
52
|
+
className: cn(
|
|
53
|
+
"bg-background data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 flex flex-col gap-4 transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500",
|
|
54
|
+
side === "right" && "data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right inset-y-0 right-0 h-full w-3/4 sm:max-w-sm",
|
|
55
|
+
side === "left" && "data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 left-0 h-full w-3/4 sm:max-w-sm",
|
|
56
|
+
side === "top" && "data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 h-auto",
|
|
57
|
+
side === "bottom" && "data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 h-auto",
|
|
58
|
+
className
|
|
59
|
+
),
|
|
60
|
+
...props,
|
|
61
|
+
children: [
|
|
62
|
+
children,
|
|
63
|
+
/* @__PURE__ */ jsxs(SheetPrimitive.Close, { className: "ring-offset-background focus:ring-ring data-[state=open]:bg-secondary absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none", children: [
|
|
64
|
+
/* @__PURE__ */ jsx(XIcon, { className: "size-4" }),
|
|
65
|
+
/* @__PURE__ */ jsx("span", { className: "sr-only", children: "Close" })
|
|
66
|
+
] })
|
|
67
|
+
]
|
|
68
|
+
}
|
|
69
|
+
)
|
|
70
|
+
] });
|
|
71
|
+
}
|
|
72
|
+
function CsSheetHeader({ className, ...props }) {
|
|
73
|
+
return /* @__PURE__ */ jsx(
|
|
74
|
+
"div",
|
|
75
|
+
{
|
|
76
|
+
"data-slot": "sheet-header",
|
|
77
|
+
className: cn("flex flex-col gap-1.5 p-4", className),
|
|
78
|
+
...props
|
|
79
|
+
}
|
|
80
|
+
);
|
|
81
|
+
}
|
|
82
|
+
function CsSheetFooter({ className, ...props }) {
|
|
83
|
+
return /* @__PURE__ */ jsx(
|
|
84
|
+
"div",
|
|
85
|
+
{
|
|
86
|
+
"data-slot": "sheet-footer",
|
|
87
|
+
className: cn("mt-auto flex flex-col gap-2 p-4", className),
|
|
88
|
+
...props
|
|
89
|
+
}
|
|
90
|
+
);
|
|
91
|
+
}
|
|
92
|
+
function CsSheetTitle({
|
|
93
|
+
className,
|
|
94
|
+
...props
|
|
95
|
+
}) {
|
|
96
|
+
return /* @__PURE__ */ jsx(
|
|
97
|
+
SheetPrimitive.Title,
|
|
98
|
+
{
|
|
99
|
+
"data-slot": "sheet-title",
|
|
100
|
+
className: cn("text-foreground font-semibold", className),
|
|
101
|
+
...props
|
|
102
|
+
}
|
|
103
|
+
);
|
|
104
|
+
}
|
|
105
|
+
function CsSheetDescription({
|
|
106
|
+
className,
|
|
107
|
+
...props
|
|
108
|
+
}) {
|
|
109
|
+
return /* @__PURE__ */ jsx(
|
|
110
|
+
SheetPrimitive.Description,
|
|
111
|
+
{
|
|
112
|
+
"data-slot": "sheet-description",
|
|
113
|
+
className: cn("text-muted-foreground text-sm", className),
|
|
114
|
+
...props
|
|
115
|
+
}
|
|
116
|
+
);
|
|
117
|
+
}
|
|
118
|
+
export {
|
|
119
|
+
CsSheet,
|
|
120
|
+
CsSheetClose,
|
|
121
|
+
CsSheetContent,
|
|
122
|
+
CsSheetDescription,
|
|
123
|
+
CsSheetFooter,
|
|
124
|
+
CsSheetHeader,
|
|
125
|
+
CsSheetTitle,
|
|
126
|
+
CsSheetTrigger
|
|
127
|
+
};
|
|
128
|
+
//# sourceMappingURL=cs-sheet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cs-sheet.js","sources":["../../../src/components/sheet/cs-sheet.tsx"],"sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport * as SheetPrimitive from \"@radix-ui/react-dialog\"\nimport { XIcon } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\n\n/**\n * CS Design System Sheet 컴포넌트\n *\n * 화면 좌우 가장자리에서 슬라이드되어 나타나는 패널 컴포넌트.\n * 설정 메뉴, 필터 옵션, 사이드바 등에 사용되며, 모달 오버레이를 포함합니다.\n *\n * ## 사용 시나리오\n * - 설정 패널: 사용자 설정, 앱 환경설정 (측면에서 슬라이드)\n * - 필터 메뉴: 검색 필터, 정렬 옵션 (우측에서 슬라이드)\n * - 내비게이션 메뉴: 모바일 사이드바 (좌측에서 슬라이드)\n * - 상세 정보: 항목 세부사항 (측면 패널로 표시)\n *\n * ## 유사 컴포넌트와의 차이\n * - **CsDrawer**: 하단에서 슬라이드 (모바일 최적화, 간단한 옵션)\n * - **CsDialog**: 화면 중앙 모달 (복잡한 폼, 정보 표시)\n * - Sheet는 측면 슬라이드, Drawer는 하단 슬라이드, Dialog는 중앙 모달\n *\n * ## 컴포넌트 구성\n * | 컴포넌트 | 역할 |\n * |----------|------|\n * | CsSheet | Root 컨테이너 |\n * | CsSheetTrigger | 열기 버튼 |\n * | CsSheetContent | 실제 패널 (side 지정) |\n * | CsSheetHeader/Footer | 레이아웃 영역 |\n * | CsSheetTitle/Description | 접근성용 텍스트 |\n * | CsSheetClose | 닫기 버튼 |\n *\n * @example 기본 사용\n * ```tsx\n * <CsSheet>\n * <CsSheetTrigger asChild>\n * <CsButton>Open</CsButton>\n * </CsSheetTrigger>\n * <CsSheetContent side=\"right\">\n * <CsSheetHeader>\n * <CsSheetTitle>제목</CsSheetTitle>\n * <CsSheetDescription>설명</CsSheetDescription>\n * </CsSheetHeader>\n * <div>내용</div>\n * </CsSheetContent>\n * </CsSheet>\n * ```\n *\n * @example 왼쪽 시트\n * ```tsx\n * <CsSheetContent side=\"left\">...</CsSheetContent>\n * ```\n *\n * @see {@link https://www.radix-ui.com/primitives/docs/components/dialog | Radix Dialog}\n */\nfunction CsSheet({ ...props }: React.ComponentProps<typeof SheetPrimitive.Root>) {\n return <SheetPrimitive.Root data-slot=\"sheet\" {...props} />\n}\n\n/** 시트 열기 트리거 */\nfunction CsSheetTrigger({\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Trigger>) {\n return <SheetPrimitive.Trigger data-slot=\"sheet-trigger\" {...props} />\n}\n\n/** 시트 닫기 버튼 */\nfunction CsSheetClose({\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Close>) {\n return <SheetPrimitive.Close data-slot=\"sheet-close\" {...props} />\n}\n\n/** 시트 포탈 (DOM 최상위에 렌더링) */\nfunction CsSheetPortal({\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Portal>) {\n return <SheetPrimitive.Portal data-slot=\"sheet-portal\" {...props} />\n}\n\n/** 시트 배경 오버레이 */\nfunction CsSheetOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Overlay>) {\n return (\n <SheetPrimitive.Overlay\n data-slot=\"sheet-overlay\"\n className={cn(\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50\",\n className\n )}\n {...props}\n />\n )\n}\n\n/**\n * Sheet 패널 컨텐츠\n *\n * @param side - 패널 위치 (top | right | bottom | left). 기본값: right\n */\nfunction CsSheetContent({\n className,\n children,\n side = \"right\",\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Content> & {\n side?: \"top\" | \"right\" | \"bottom\" | \"left\"\n}) {\n return (\n <CsSheetPortal>\n <CsSheetOverlay />\n <SheetPrimitive.Content\n data-slot=\"sheet-content\"\n className={cn(\n \"bg-background data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 flex flex-col gap-4 transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500\",\n side === \"right\" &&\n \"data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right inset-y-0 right-0 h-full w-3/4 sm:max-w-sm\",\n side === \"left\" &&\n \"data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 left-0 h-full w-3/4 sm:max-w-sm\",\n side === \"top\" &&\n \"data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 h-auto\",\n side === \"bottom\" &&\n \"data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 h-auto\",\n className\n )}\n {...props}\n >\n {children}\n <SheetPrimitive.Close className=\"ring-offset-background focus:ring-ring data-[state=open]:bg-secondary absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none\">\n <XIcon className=\"size-4\" />\n <span className=\"sr-only\">Close</span>\n </SheetPrimitive.Close>\n </SheetPrimitive.Content>\n </CsSheetPortal>\n )\n}\n\n/** 시트 상단 헤더 영역 */\nfunction CsSheetHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-header\"\n className={cn(\"flex flex-col gap-1.5 p-4\", className)}\n {...props}\n />\n )\n}\n\n/** 시트 하단 푸터 영역 */\nfunction CsSheetFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-footer\"\n className={cn(\"mt-auto flex flex-col gap-2 p-4\", className)}\n {...props}\n />\n )\n}\n\n/** 시트 제목 (접근성 필수) */\nfunction CsSheetTitle({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Title>) {\n return (\n <SheetPrimitive.Title\n data-slot=\"sheet-title\"\n className={cn(\"text-foreground font-semibold\", className)}\n {...props}\n />\n )\n}\n\n/** 시트 설명 (접근성 필수) */\nfunction CsSheetDescription({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Description>) {\n return (\n <SheetPrimitive.Description\n data-slot=\"sheet-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n )\n}\n\nexport {\n CsSheet,\n CsSheetTrigger,\n CsSheetClose,\n CsSheetContent,\n CsSheetHeader,\n CsSheetFooter,\n CsSheetTitle,\n CsSheetDescription,\n}\n"],"names":[],"mappings":";;;;;AA2DE,SAAA,QAAA,EAAA,GAAA,SAAQ;AACV,SAAA,oBAAA,eAAA,MAAA,EAAA,aAAA,SAAA,GAAA,MAAA,CAAA;AAGA;AAAwB,SACnB,eAAA;AAAA,EACL,GAAwD;AACtD,GAAA;AACF,SAAA,oBAAA,eAAA,SAAA,EAAA,aAAA,iBAAA,GAAA,MAAA,CAAA;AAGA;AAAsB,SACjB,aAAA;AAAA,EACL,GAAsD;AACpD,GAAA;AACF,SAAA,oBAAA,eAAA,OAAA,EAAA,aAAA,eAAA,GAAA,MAAA,CAAA;AAGA;AAAuB,SAClB,cAAA;AAAA,EACL,GAAuD;AACrD,GAAA;AACF,SAAA,oBAAA,eAAA,QAAA,EAAA,aAAA,gBAAA,GAAA,MAAA,CAAA;AAGA;AAAwB,SACtB,eAAA;AAAA,EACA;AAAA,EACF,GAAwD;AACtD;AACE,SAAgB;AAAA,IAAf,eAAA;AAAA,IAAA;AAAA,MAEC,aAAW;AAAA,MAAA,WACT;AAAA,QACA;AAAA,QACF;AAAA,MACC;AAAA,MAAG,GAAA;AAAA,IACN;AAAA,EAEJ;AAOA;AAAwB,SACtB,eAAA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAG;AAAA,EACL,GAEG;AACD;AAEI,SAAC,qBAAA,eAAe,EAAA,UAAA;AAAA,IAChB,oBAAA,gBAAA,CAAA,CAAA;AAAA,IAAC;AAAA,MAAA,eAAA;AAAA,MAAA;AAAA,QAEC,aAAW;AAAA,QAAA,WACT;AAAA,UACA;AAAA,UAEA,SAAS,WACP;AAAA,UACF,SAAS,UACP;AAAA,UACF,SAAS,SAAA;AAAA,UAET,SAAA,YAAA;AAAA,UACF;AAAA,QACC;AAAA,QAEA;QAAA,UAAA;AAAA,UAAA;AAAA,UAEC,qBAAA,eAAO,OAAU,EAAA,WAAS,8OAAA,UAAA;AAAA,YAC1B,oBAAC,OAAA,EAAA,WAAK,SAAU,CAAA;AAAA,YAClB,oBAAA,QAAA,EAAA,WAAA,WAAA,UAAA,QAAA,CAAA;AAAA,UAAA,EAAA,CAAA;AAAA,QAAA;AAAA,MAAA;AAAA;EAIR,EAAA,CAAA;AAGA;AACE,yBACE,WAAA,GAAA,MAAA,GAAA;AAAA,SAAC;AAAA,IAAA;AAAA,IAAA;AAAA,MAEC,aAAW;AAAA,MACV,WAAG,GAAA,6BAAA,SAAA;AAAA,MAAA,GAAA;AAAA,IACN;AAAA,EAEJ;AAGA;AACE,yBACE,WAAA,GAAA,MAAA,GAAA;AAAA,SAAC;AAAA,IAAA;AAAA,IAAA;AAAA,MAEC,aAAW;AAAA,MACV,WAAG,GAAA,mCAAA,SAAA;AAAA,MAAA,GAAA;AAAA,IACN;AAAA,EAEJ;AAGA;AAAsB,SACpB,aAAA;AAAA,EACA;AAAA,EACF,GAAsD;AACpD;AACE,SAAgB;AAAA,IAAf,eAAA;AAAA,IAAA;AAAA,MAEC,aAAW;AAAA,MACV,WAAG,GAAA,iCAAA,SAAA;AAAA,MAAA,GAAA;AAAA,IACN;AAAA,EAEJ;AAGA;AAA4B,SAC1B,mBAAA;AAAA,EACA;AAAA,EACF,GAA4D;AAC1D;AACE,SAAgB;AAAA,IAAf,eAAA;AAAA,IAAA;AAAA,MAEC,aAAW;AAAA,MACV,WAAG,GAAA,iCAAA,SAAA;AAAA,MAAA,GAAA;AAAA,IACN;AAAA,EAEJ;;"}
|