@loword/loword-design-system 0.0.4 → 0.0.6

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 (254) hide show
  1. package/dist/index.css +9 -0
  2. package/package.json +6 -3
  3. package/src/styles/carousel.css +9 -0
  4. package/src/styles/color.css +185 -0
  5. package/src/styles/components/badge.css +41 -0
  6. package/src/styles/components/bread-crumb.css +23 -0
  7. package/src/styles/components/button.css +183 -0
  8. package/src/styles/components/editor.css +147 -0
  9. package/src/styles/components/icon.css +29 -0
  10. package/src/styles/components/index.css +9 -0
  11. package/src/styles/components/input.css +52 -0
  12. package/src/styles/components/modal.css +25 -0
  13. package/src/styles/components/shared.css +52 -0
  14. package/src/styles/components/spinner.css +38 -0
  15. package/src/styles/focus.css +12 -0
  16. package/src/styles/gradient.css +41 -0
  17. package/src/styles/layout.css +19 -0
  18. package/src/styles/motion.css +235 -0
  19. package/src/styles/radius.css +8 -0
  20. package/src/styles/responsive.css +42 -0
  21. package/src/styles/scrollbar.css +59 -0
  22. package/src/styles/slider.css +65 -0
  23. package/src/styles/spacing.css +592 -0
  24. package/src/styles/text-utils.css +7 -0
  25. package/src/styles/typography.css +171 -0
  26. package/src/theme.css +19 -0
  27. package/dist/components/Avatar/Avatar.d.ts +0 -11
  28. package/dist/components/Avatar/Avatar.d.ts.map +0 -1
  29. package/dist/components/Avatar/Avatar.js +0 -24
  30. package/dist/components/Avatar/AvatarBase.d.ts +0 -32
  31. package/dist/components/Avatar/AvatarBase.d.ts.map +0 -1
  32. package/dist/components/Avatar/AvatarBase.js +0 -49
  33. package/dist/components/Badge/Badge.d.ts +0 -25
  34. package/dist/components/Badge/Badge.d.ts.map +0 -1
  35. package/dist/components/Badge/Badge.js +0 -36
  36. package/dist/components/Badge/BadgeBase.d.ts +0 -10
  37. package/dist/components/Badge/BadgeBase.d.ts.map +0 -1
  38. package/dist/components/Badge/BadgeBase.js +0 -9
  39. package/dist/components/BreadCrumb/BreadCrumb.d.ts +0 -17
  40. package/dist/components/BreadCrumb/BreadCrumb.d.ts.map +0 -1
  41. package/dist/components/BreadCrumb/BreadCrumb.js +0 -37
  42. package/dist/components/BreadCrumb/BreadCrumbBase.d.ts +0 -9
  43. package/dist/components/BreadCrumb/BreadCrumbBase.d.ts.map +0 -1
  44. package/dist/components/BreadCrumb/BreadCrumbBase.js +0 -17
  45. package/dist/components/Button/Button.d.ts +0 -26
  46. package/dist/components/Button/Button.d.ts.map +0 -1
  47. package/dist/components/Button/Button.js +0 -102
  48. package/dist/components/Button/ButtonBase.d.ts +0 -5
  49. package/dist/components/Button/ButtonBase.d.ts.map +0 -1
  50. package/dist/components/Button/ButtonBase.js +0 -10
  51. package/dist/components/Button/ButtonSpinner.d.ts +0 -8
  52. package/dist/components/Button/ButtonSpinner.d.ts.map +0 -1
  53. package/dist/components/Button/ButtonSpinner.js +0 -15
  54. package/dist/components/Calendar/Calendar.d.ts +0 -16
  55. package/dist/components/Calendar/Calendar.d.ts.map +0 -1
  56. package/dist/components/Calendar/Calendar.js +0 -75
  57. package/dist/components/Callout/Callout.d.ts +0 -10
  58. package/dist/components/Callout/Callout.d.ts.map +0 -1
  59. package/dist/components/Callout/Callout.js +0 -6
  60. package/dist/components/Callout/CalloutBase.d.ts +0 -18
  61. package/dist/components/Callout/CalloutBase.d.ts.map +0 -1
  62. package/dist/components/Callout/CalloutBase.js +0 -21
  63. package/dist/components/Carousel/Carousel.d.ts +0 -50
  64. package/dist/components/Carousel/Carousel.d.ts.map +0 -1
  65. package/dist/components/Carousel/Carousel.js +0 -22
  66. package/dist/components/Carousel/CarouselBase.d.ts +0 -98
  67. package/dist/components/Carousel/CarouselBase.d.ts.map +0 -1
  68. package/dist/components/Carousel/CarouselBase.js +0 -144
  69. package/dist/components/Checkbox/Checkbox.d.ts +0 -27
  70. package/dist/components/Checkbox/Checkbox.d.ts.map +0 -1
  71. package/dist/components/Checkbox/Checkbox.js +0 -30
  72. package/dist/components/Checkbox/CheckboxBase.d.ts +0 -40
  73. package/dist/components/Checkbox/CheckboxBase.d.ts.map +0 -1
  74. package/dist/components/Checkbox/CheckboxBase.js +0 -57
  75. package/dist/components/Checkbox/CheckboxGroup.d.ts +0 -22
  76. package/dist/components/Checkbox/CheckboxGroup.d.ts.map +0 -1
  77. package/dist/components/Checkbox/CheckboxGroup.js +0 -13
  78. package/dist/components/Checkbox/FormCheckbox.d.ts +0 -14
  79. package/dist/components/Checkbox/FormCheckbox.d.ts.map +0 -1
  80. package/dist/components/Checkbox/FormCheckbox.js +0 -9
  81. package/dist/components/Checkbox/FormCheckboxGroup.d.ts +0 -13
  82. package/dist/components/Checkbox/FormCheckboxGroup.d.ts.map +0 -1
  83. package/dist/components/Checkbox/FormCheckboxGroup.js +0 -9
  84. package/dist/components/DataCalendar/DataCalendar.d.ts +0 -12
  85. package/dist/components/DataCalendar/DataCalendar.d.ts.map +0 -1
  86. package/dist/components/DataCalendar/DataCalendar.js +0 -13
  87. package/dist/components/DataCalendar/DataCalendarBase.d.ts +0 -45
  88. package/dist/components/DataCalendar/DataCalendarBase.d.ts.map +0 -1
  89. package/dist/components/DataCalendar/DataCalendarBase.js +0 -57
  90. package/dist/components/DatePicker/DatePicker.d.ts +0 -34
  91. package/dist/components/DatePicker/DatePicker.d.ts.map +0 -1
  92. package/dist/components/DatePicker/DatePicker.js +0 -44
  93. package/dist/components/DatePicker/FormDatePicker.d.ts +0 -12
  94. package/dist/components/DatePicker/FormDatePicker.d.ts.map +0 -1
  95. package/dist/components/DatePicker/FormDatePicker.js +0 -12
  96. package/dist/components/DateRangePicker/DateRangePicker.d.ts +0 -49
  97. package/dist/components/DateRangePicker/DateRangePicker.d.ts.map +0 -1
  98. package/dist/components/DateRangePicker/DateRangePicker.js +0 -197
  99. package/dist/components/DateRangePicker/FormDateRangePicker.d.ts +0 -12
  100. package/dist/components/DateRangePicker/FormDateRangePicker.d.ts.map +0 -1
  101. package/dist/components/DateRangePicker/FormDateRangePicker.js +0 -10
  102. package/dist/components/Divider/Divider.d.ts +0 -9
  103. package/dist/components/Divider/Divider.d.ts.map +0 -1
  104. package/dist/components/Divider/Divider.js +0 -11
  105. package/dist/components/Divider/DividerBase.d.ts +0 -9
  106. package/dist/components/Divider/DividerBase.d.ts.map +0 -1
  107. package/dist/components/Divider/DividerBase.js +0 -9
  108. package/dist/components/Drawer/Drawer.d.ts +0 -51
  109. package/dist/components/Drawer/Drawer.d.ts.map +0 -1
  110. package/dist/components/Drawer/Drawer.js +0 -30
  111. package/dist/components/Drawer/DrawerBase.d.ts +0 -52
  112. package/dist/components/Drawer/DrawerBase.d.ts.map +0 -1
  113. package/dist/components/Drawer/DrawerBase.js +0 -38
  114. package/dist/components/Editor/Editor.d.ts +0 -12
  115. package/dist/components/Editor/Editor.d.ts.map +0 -1
  116. package/dist/components/Editor/Editor.js +0 -162
  117. package/dist/components/Editor/EditorBase.d.ts +0 -52
  118. package/dist/components/Editor/EditorBase.d.ts.map +0 -1
  119. package/dist/components/Editor/EditorBase.js +0 -89
  120. package/dist/components/Editor/Viewer.d.ts +0 -7
  121. package/dist/components/Editor/Viewer.d.ts.map +0 -1
  122. package/dist/components/Editor/Viewer.js +0 -9
  123. package/dist/components/Editor/extensions.d.ts +0 -6
  124. package/dist/components/Editor/extensions.d.ts.map +0 -1
  125. package/dist/components/Editor/extensions.js +0 -38
  126. package/dist/components/FileUpload/FileUploadBase.d.ts +0 -50
  127. package/dist/components/FileUpload/FileUploadBase.d.ts.map +0 -1
  128. package/dist/components/FileUpload/FileUploadBase.js +0 -102
  129. package/dist/components/Input/FormInput.d.ts +0 -15
  130. package/dist/components/Input/FormInput.d.ts.map +0 -1
  131. package/dist/components/Input/FormInput.js +0 -19
  132. package/dist/components/Input/Input.d.ts +0 -24
  133. package/dist/components/Input/Input.d.ts.map +0 -1
  134. package/dist/components/Input/Input.js +0 -71
  135. package/dist/components/Input/InputBase.d.ts +0 -22
  136. package/dist/components/Input/InputBase.d.ts.map +0 -1
  137. package/dist/components/Input/InputBase.js +0 -17
  138. package/dist/components/LNB/LNBBase.d.ts +0 -82
  139. package/dist/components/LNB/LNBBase.d.ts.map +0 -1
  140. package/dist/components/LNB/LNBBase.js +0 -108
  141. package/dist/components/LoadingDots/LoadingDots.d.ts +0 -8
  142. package/dist/components/LoadingDots/LoadingDots.d.ts.map +0 -1
  143. package/dist/components/LoadingDots/LoadingDots.js +0 -29
  144. package/dist/components/MenuBar/MenuBar.d.ts +0 -21
  145. package/dist/components/MenuBar/MenuBar.d.ts.map +0 -1
  146. package/dist/components/MenuBar/MenuBar.js +0 -33
  147. package/dist/components/MenuBar/MenuBarBase.d.ts +0 -43
  148. package/dist/components/MenuBar/MenuBarBase.d.ts.map +0 -1
  149. package/dist/components/MenuBar/MenuBarBase.js +0 -69
  150. package/dist/components/Modal/Modal.d.ts +0 -51
  151. package/dist/components/Modal/Modal.d.ts.map +0 -1
  152. package/dist/components/Modal/Modal.js +0 -72
  153. package/dist/components/Modal/ModalBase.d.ts +0 -42
  154. package/dist/components/Modal/ModalBase.d.ts.map +0 -1
  155. package/dist/components/Modal/ModalBase.js +0 -30
  156. package/dist/components/Modal/openModal.d.ts +0 -24
  157. package/dist/components/Modal/openModal.d.ts.map +0 -1
  158. package/dist/components/Modal/openModal.js +0 -52
  159. package/dist/components/OTPInput/OTPInput.d.ts +0 -46
  160. package/dist/components/OTPInput/OTPInput.d.ts.map +0 -1
  161. package/dist/components/OTPInput/OTPInput.js +0 -87
  162. package/dist/components/Pagination/Pagination.d.ts +0 -12
  163. package/dist/components/Pagination/Pagination.d.ts.map +0 -1
  164. package/dist/components/Pagination/Pagination.js +0 -5
  165. package/dist/components/Pagination/PaginationBase.d.ts +0 -36
  166. package/dist/components/Pagination/PaginationBase.d.ts.map +0 -1
  167. package/dist/components/Pagination/PaginationBase.js +0 -44
  168. package/dist/components/Pagination/paginationUtils.d.ts +0 -2
  169. package/dist/components/Pagination/paginationUtils.d.ts.map +0 -1
  170. package/dist/components/Pagination/paginationUtils.js +0 -18
  171. package/dist/components/Popover/Popover.d.ts +0 -42
  172. package/dist/components/Popover/Popover.d.ts.map +0 -1
  173. package/dist/components/Popover/Popover.js +0 -31
  174. package/dist/components/Popover/PopoverBase.d.ts +0 -31
  175. package/dist/components/Popover/PopoverBase.d.ts.map +0 -1
  176. package/dist/components/Popover/PopoverBase.js +0 -18
  177. package/dist/components/Radio/FormRadioGroup.d.ts +0 -13
  178. package/dist/components/Radio/FormRadioGroup.d.ts.map +0 -1
  179. package/dist/components/Radio/FormRadioGroup.js +0 -9
  180. package/dist/components/Radio/Radio.d.ts +0 -24
  181. package/dist/components/Radio/Radio.d.ts.map +0 -1
  182. package/dist/components/Radio/Radio.js +0 -39
  183. package/dist/components/Radio/RadioBase.d.ts +0 -38
  184. package/dist/components/Radio/RadioBase.d.ts.map +0 -1
  185. package/dist/components/Radio/RadioBase.js +0 -46
  186. package/dist/components/Radio/RadioGroup.d.ts +0 -22
  187. package/dist/components/Radio/RadioGroup.d.ts.map +0 -1
  188. package/dist/components/Radio/RadioGroup.js +0 -7
  189. package/dist/components/ScrollArea/ScrollArea.d.ts +0 -15
  190. package/dist/components/ScrollArea/ScrollArea.d.ts.map +0 -1
  191. package/dist/components/ScrollArea/ScrollArea.js +0 -10
  192. package/dist/components/Select/FormMultiSelect.d.ts +0 -13
  193. package/dist/components/Select/FormMultiSelect.d.ts.map +0 -1
  194. package/dist/components/Select/FormMultiSelect.js +0 -14
  195. package/dist/components/Select/FormSelect.d.ts +0 -13
  196. package/dist/components/Select/FormSelect.d.ts.map +0 -1
  197. package/dist/components/Select/FormSelect.js +0 -10
  198. package/dist/components/Select/MultiSelect.d.ts +0 -31
  199. package/dist/components/Select/MultiSelect.d.ts.map +0 -1
  200. package/dist/components/Select/MultiSelect.js +0 -59
  201. package/dist/components/Select/Select.d.ts +0 -41
  202. package/dist/components/Select/Select.d.ts.map +0 -1
  203. package/dist/components/Select/Select.js +0 -55
  204. package/dist/components/Select/SelectBase.d.ts +0 -59
  205. package/dist/components/Select/SelectBase.d.ts.map +0 -1
  206. package/dist/components/Select/SelectBase.js +0 -211
  207. package/dist/components/Skeleton/Skeleton.d.ts +0 -10
  208. package/dist/components/Skeleton/Skeleton.d.ts.map +0 -1
  209. package/dist/components/Skeleton/Skeleton.js +0 -8
  210. package/dist/components/Slider/Slider.d.ts +0 -23
  211. package/dist/components/Slider/Slider.d.ts.map +0 -1
  212. package/dist/components/Slider/Slider.js +0 -195
  213. package/dist/components/Spinner/Spinner.d.ts +0 -25
  214. package/dist/components/Spinner/Spinner.d.ts.map +0 -1
  215. package/dist/components/Spinner/Spinner.js +0 -20
  216. package/dist/components/Table/Table.d.ts +0 -34
  217. package/dist/components/Table/Table.d.ts.map +0 -1
  218. package/dist/components/Table/Table.js +0 -29
  219. package/dist/components/Table/TableBase.d.ts +0 -37
  220. package/dist/components/Table/TableBase.d.ts.map +0 -1
  221. package/dist/components/Table/TableBase.js +0 -39
  222. package/dist/components/Table/TableField.d.ts +0 -64
  223. package/dist/components/Table/TableField.d.ts.map +0 -1
  224. package/dist/components/Table/TableField.js +0 -87
  225. package/dist/components/Table/TanstackTable.d.ts +0 -23
  226. package/dist/components/Table/TanstackTable.d.ts.map +0 -1
  227. package/dist/components/Table/TanstackTable.js +0 -35
  228. package/dist/components/TimePicker/FormTimePicker.d.ts +0 -12
  229. package/dist/components/TimePicker/FormTimePicker.d.ts.map +0 -1
  230. package/dist/components/TimePicker/FormTimePicker.js +0 -12
  231. package/dist/components/TimePicker/TimePicker.d.ts +0 -27
  232. package/dist/components/TimePicker/TimePicker.d.ts.map +0 -1
  233. package/dist/components/TimePicker/TimePicker.js +0 -120
  234. package/dist/components/Toast/Toast.d.ts +0 -18
  235. package/dist/components/Toast/Toast.d.ts.map +0 -1
  236. package/dist/components/Toast/Toast.js +0 -42
  237. package/dist/components/Toast/Toaster.d.ts +0 -7
  238. package/dist/components/Toast/Toaster.d.ts.map +0 -1
  239. package/dist/components/Toast/Toaster.js +0 -7
  240. package/dist/components/ToggleButton/FormToggleButton.d.ts +0 -12
  241. package/dist/components/ToggleButton/FormToggleButton.d.ts.map +0 -1
  242. package/dist/components/ToggleButton/FormToggleButton.js +0 -9
  243. package/dist/components/ToggleButton/ToggleButton.d.ts +0 -31
  244. package/dist/components/ToggleButton/ToggleButton.d.ts.map +0 -1
  245. package/dist/components/ToggleButton/ToggleButton.js +0 -42
  246. package/dist/components/ToggleButton/ToggleButtonBase.d.ts +0 -41
  247. package/dist/components/ToggleButton/ToggleButtonBase.d.ts.map +0 -1
  248. package/dist/components/ToggleButton/ToggleButtonBase.js +0 -59
  249. package/dist/components/Tooltip/Tooltip.d.ts +0 -18
  250. package/dist/components/Tooltip/Tooltip.d.ts.map +0 -1
  251. package/dist/components/Tooltip/Tooltip.js +0 -13
  252. package/dist/components/Tooltip/TooltipBase.d.ts +0 -39
  253. package/dist/components/Tooltip/TooltipBase.d.ts.map +0 -1
  254. package/dist/components/Tooltip/TooltipBase.js +0 -46
@@ -1,10 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import cn from '../../utils/cn.js';
3
- const Root = ({ as, className, children, ref, ...props }) => {
4
- const Component = as ?? 'button';
5
- return (_jsx(Component, { ref: ref, className: cn('relative inline-flex flex-row items-center justify-center', className), ...props, children: children }));
6
- };
7
- export const ButtonBase = {
8
- Root: Root,
9
- };
10
- export default ButtonBase;
@@ -1,8 +0,0 @@
1
- interface ButtonSpinnerProps {
2
- size?: ButtonSpinnerSize;
3
- className?: string;
4
- }
5
- type ButtonSpinnerSize = '2xsmall' | 'xsmall' | 'small' | 'medium' | 'large' | 'xlarge';
6
- declare const ButtonSpinner: ({ size, className }: ButtonSpinnerProps) => import("react/jsx-runtime").JSX.Element;
7
- export default ButtonSpinner;
8
- //# sourceMappingURL=ButtonSpinner.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ButtonSpinner.d.ts","sourceRoot":"","sources":["../../../src/components/Button/ButtonSpinner.tsx"],"names":[],"mappings":"AAGA,UAAU,kBAAkB;IAC1B,IAAI,CAAC,EAAE,iBAAiB,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,KAAK,iBAAiB,GAClB,SAAS,GACT,QAAQ,GACR,OAAO,GACP,QAAQ,GACR,OAAO,GACP,QAAQ,CAAC;AAWb,QAAA,MAAM,aAAa,GAAI,qBAA+B,kBAAkB,4CAMvE,CAAC;AAEF,eAAe,aAAa,CAAC"}
@@ -1,15 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import Spinner from '../Spinner/Spinner.js';
3
- import cn from '../../utils/cn.js';
4
- const sizeClasses = {
5
- '2xsmall': 'spinner-2xs',
6
- xsmall: 'spinner-xs',
7
- small: 'spinner-sm',
8
- medium: 'spinner-md',
9
- large: 'spinner-lg',
10
- xlarge: 'spinner-xl',
11
- };
12
- const ButtonSpinner = ({ size = 'small', className }) => {
13
- return (_jsx(Spinner, { className: cn('shrink-0 text-current', sizeClasses[size], className) }));
14
- };
15
- export default ButtonSpinner;
@@ -1,16 +0,0 @@
1
- import { type DayPickerProps, type Matcher } from 'react-day-picker';
2
- import { type CSSProperties } from 'react';
3
- /** react-day-picker의 DayPickerProps를 확장한 캘린더 props */
4
- type CalendarProps = DayPickerProps & {
5
- /** 추가 CSS 클래스 */
6
- className?: string;
7
- /** 인라인 스타일 */
8
- style?: CSSProperties;
9
- /** 예약 완료된 날짜 (취소선 표시) */
10
- booked?: Matcher | Matcher[];
11
- /** 예약 가능한 날짜 (아래에 점 표시) */
12
- book?: Matcher | Matcher[];
13
- };
14
- declare const Calendar: ({ className, style, classNames, showOutsideDays, captionLayout, formatters, components, booked, book, modifiers, ...props }: CalendarProps) => import("react/jsx-runtime").JSX.Element;
15
- export default Calendar;
16
- //# sourceMappingURL=Calendar.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Calendar.d.ts","sourceRoot":"","sources":["../../../src/components/Calendar/Calendar.tsx"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,cAAc,EACnB,KAAK,OAAO,EACb,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,KAAK,aAAa,EAInB,MAAM,OAAO,CAAC;AAIf,sDAAsD;AACtD,KAAK,aAAa,GAAG,cAAc,GAAG;IACpC,iBAAiB;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc;IACd,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,yBAAyB;IACzB,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,EAAE,CAAC;IAC7B,2BAA2B;IAC3B,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,EAAE,CAAC;CAC5B,CAAC;AAEF,QAAA,MAAM,QAAQ,GAAI,6HAYf,aAAa,4CAsJf,CAAC;AAoEF,eAAe,QAAQ,CAAC"}
@@ -1,75 +0,0 @@
1
- 'use client';
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { DayPicker, getDefaultClassNames, } from 'react-day-picker';
4
- import { useRef, useEffect, } from 'react';
5
- import LucideIcon from '../Icon/LucideIcon.js';
6
- import cn from '../../utils/cn.js';
7
- const Calendar = ({ className, style, classNames, showOutsideDays = true, captionLayout = 'label', formatters, components, booked, book, modifiers, ...props }) => {
8
- // 라이브러리가 기본적으로 사용하는 모든 css 클래스 이름을 담고있는 객체
9
- const defaultClassNames = getDefaultClassNames();
10
- return (_jsx(DayPicker, { showOutsideDays: showOutsideDays, startMonth: new Date(1900, 0), endMonth: new Date(new Date().getFullYear() + 10, 11), style: style, className: cn('bg-white group/calendar p-3 [--cell-size:--spacing(8)] w-fit',
11
- //rtl일때 버튼 아이콘 방향 전환
12
- String.raw `rtl:**:[.rdp-button\_next>svg]:rotate-180`, String.raw `rtl:**:[.rdp-button\_previous>svg]:rotate-180`, className), captionLayout: captionLayout, formatters: {
13
- formatMonthDropdown: (date) => date.toLocaleString('default', { month: 'short' }),
14
- ...formatters,
15
- }, classNames: {
16
- root: cn(defaultClassNames.root),
17
- months: cn('flex gap-4 flex-col md:flex-row relative', defaultClassNames.months),
18
- month: cn('flex flex-col w-full gap-4', defaultClassNames.month),
19
- nav: cn('flex items-center gap-1 w-full absolute top-0 inset-x-0 justify-between', defaultClassNames.nav),
20
- button_previous: cn('inline-flex items-center justify-center rounded-md text-sm font-medium transition-all outline-none hover:bg-neutral-100 hover:text-neutral-900 focus-visible:border-neutral-950 focus-visible:ring-neutral-950/50 focus-visible:ring-[3px]', 'size-(--cell-size) aria-disabled:opacity-50 p-0 select-none cursor-pointer', defaultClassNames.button_previous),
21
- button_next: cn('inline-flex items-center justify-center rounded-md text-sm font-medium transition-all outline-none hover:bg-neutral-100 hover:text-neutral-900 focus-visible:border-neutral-950 focus-visible:ring-neutral-950/50 focus-visible:ring-[3px]', 'size-(--cell-size) aria-disabled:opacity-50 p-0 select-none cursor-pointer', defaultClassNames.button_next),
22
- month_caption: cn('flex items-center justify-center h-(--cell-size) w-full px-(--cell-size)', defaultClassNames.month_caption),
23
- dropdowns: cn('w-full flex items-center text-sm font-medium justify-center h-(--cell-size) gap-1.5', defaultClassNames.dropdowns),
24
- dropdown_root: cn('relative has-focus:border-lb600 border border-neutral-200 shadow-xs has-focus:ring-lb600/50 has-focus:ring-[3px] rounded-md', defaultClassNames.dropdown_root),
25
- dropdown: cn('absolute bg-white inset-0 opacity-0', defaultClassNames.dropdown),
26
- caption_label: cn('select-none font-medium', captionLayout === 'label'
27
- ? 'text-sm'
28
- : cn('rounded-md pl-2 pr-1 flex items-center gap-1 text-sm h-8 [&>svg]:text-neutral-500 [&>svg]:size-3.5'), defaultClassNames.caption_label),
29
- table: 'w-full border-collapse',
30
- weekdays: cn('flex', defaultClassNames.weekdays),
31
- weekday: cn('text-neutral-500 rounded-md flex-1 font-normal text-[0.8rem] select-none', defaultClassNames.weekday),
32
- week: cn('flex w-full mt-2', defaultClassNames.week),
33
- week_number_header: cn('select-none w-(--cell-size)', defaultClassNames.week_number_header),
34
- week_number: cn('text-[0.8rem] select-none text-neutral-500', defaultClassNames.week_number),
35
- day: cn('relative w-full h-full p-0 text-center [&:first-child[data-selected=true]_button]:rounded-l-md [&:last-child[data-selected=true]_button]:rounded-r-md group/day aspect-square select-none', defaultClassNames.day),
36
- range_start: cn('rounded-l-md bg-neutral-100', defaultClassNames.range_start),
37
- range_middle: cn('rounded-none', defaultClassNames.range_middle),
38
- range_end: cn('rounded-r-md bg-neutral-100', defaultClassNames.range_end),
39
- today: cn('bg-lb50 text-lb900 rounded-md data-[selected=true]:rounded-none font-semibold', defaultClassNames.today),
40
- outside: cn('text-neutral-500 aria-selected:text-neutral-500', defaultClassNames.outside),
41
- disabled: cn('text-neutral-500 opacity-50', defaultClassNames.disabled),
42
- hidden: cn('invisible', defaultClassNames.hidden),
43
- ...classNames,
44
- }, modifiers: {
45
- booked,
46
- book,
47
- ...modifiers,
48
- }, components: {
49
- Root: ({ className: rootClassName, rootRef, ...rootProps }) => (_jsx("div", { "data-slot": "calendar", ref: rootRef, className: cn(rootClassName), ...rootProps })),
50
- Chevron: ({ className: chevronClassName, orientation }) => {
51
- const iconName = orientation === 'left'
52
- ? 'chevronLeft'
53
- : orientation === 'right'
54
- ? 'chevronRight'
55
- : 'chevronDown';
56
- return (_jsx(LucideIcon, { name: iconName, className: cn('size-4', chevronClassName) }));
57
- },
58
- DayButton: CalendarDayButton,
59
- WeekNumber: ({ children, ...weekNumberProps }) => (_jsx("td", { ...weekNumberProps, children: _jsx("div", { className: "flex size-(--cell-size) items-center justify-center text-center", children: children }) })),
60
- ...components,
61
- }, ...props }));
62
- };
63
- function CalendarDayButton({ className: btnClassName, day, modifiers, ...btnProps }) {
64
- const defaultClassNames = getDefaultClassNames();
65
- const ref = useRef(null);
66
- useEffect(() => {
67
- if (modifiers.focused)
68
- ref.current?.focus();
69
- }, [modifiers.focused]);
70
- return (_jsxs("button", { ref: ref, type: "button", "data-day": day.date.toLocaleDateString(), "data-selected-single": modifiers.selected &&
71
- !modifiers.range_start &&
72
- !modifiers.range_end &&
73
- !modifiers.range_middle, "data-range-start": modifiers.range_start, "data-range-end": modifiers.range_end, "data-range-middle": modifiers.range_middle, className: cn('relative inline-flex items-center justify-center rounded-md text-sm font-medium transition-all outline-none cursor-pointer', 'hover:bg-lb50 hover:text-lb900', 'focus-visible:border-lb600 focus-visible:ring-lb600/50 focus-visible:ring-[3px]', 'data-[selected-single=true]:bg-lb600 data-[selected-single=true]:text-white', 'data-[range-middle=true]:bg-lb50 data-[range-middle=true]:text-lb900', 'data-[range-start=true]:bg-lb600 data-[range-start=true]:text-white', 'data-[range-end=true]:bg-lb600 data-[range-end=true]:text-white', 'flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 leading-none font-normal', 'group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:ring-lb600/50 group-data-[focused=true]/day:ring-[3px]', 'data-[range-end=true]:rounded-md data-[range-end=true]:rounded-r-md', 'data-[range-middle=true]:rounded-none', 'data-[range-start=true]:rounded-md data-[range-start=true]:rounded-l-md', '[&>span]:text-xs [&>span]:opacity-70', defaultClassNames.day, btnClassName), ...btnProps, children: [_jsx("span", { className: cn('relative z-10', modifiers.booked && 'line-through opacity-40 decoration-current'), children: btnProps.children }), modifiers.book && (_jsx("span", { className: cn('absolute bottom-1.5 size-1 rounded-full bg-lb600', modifiers.selected && 'bg-white') }))] }));
74
- }
75
- export default Calendar;
@@ -1,10 +0,0 @@
1
- import { type ReactNode } from 'react';
2
- interface INoticeProps {
3
- title: string;
4
- description?: string;
5
- button?: ReactNode;
6
- className?: string;
7
- }
8
- declare const Callout: (props: INoticeProps) => import("react/jsx-runtime").JSX.Element;
9
- export default Callout;
10
- //# sourceMappingURL=Callout.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Callout.d.ts","sourceRoot":"","sources":["../../../src/components/Callout/Callout.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,UAAU,YAAY;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,QAAA,MAAM,OAAO,GAAI,OAAO,YAAY,4CAUnC,CAAC;AAEF,eAAe,OAAO,CAAC"}
@@ -1,6 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import CalloutBase from './CalloutBase.js';
3
- const Callout = (props) => {
4
- return (_jsxs(CalloutBase.Root, { className: props.className, children: [_jsxs("div", { className: "flex flex-col gap-xs", children: [_jsx(CalloutBase.Title, { title: props.title }), _jsx(CalloutBase.Description, { description: props.description })] }), props.button] }));
5
- };
6
- export default Callout;
@@ -1,18 +0,0 @@
1
- import { HTMLAttributes, ReactNode, Ref } from 'react';
2
- interface RootProps extends HTMLAttributes<HTMLDivElement> {
3
- children?: ReactNode;
4
- ref?: Ref<HTMLDivElement>;
5
- }
6
- export declare const CalloutBase: {
7
- Root: ({ ref, children, className, ...props }: RootProps) => import("react/jsx-runtime").JSX.Element;
8
- Title: (props: {
9
- title?: string;
10
- className?: string;
11
- }) => import("react/jsx-runtime").JSX.Element | null;
12
- Description: (props: {
13
- description?: string;
14
- className?: string;
15
- }) => import("react/jsx-runtime").JSX.Element | null;
16
- };
17
- export default CalloutBase;
18
- //# sourceMappingURL=CalloutBase.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CalloutBase.d.ts","sourceRoot":"","sources":["../../../src/components/Callout/CalloutBase.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAGvD,UAAU,SAAU,SAAQ,cAAc,CAAC,cAAc,CAAC;IACxD,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,GAAG,CAAC,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;CAC3B;AAqCD,eAAO,MAAM,WAAW;mDAnC8B,SAAS;mBAezC;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE;yBAUhC;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE;CAcvE,CAAC;AAEF,eAAe,WAAW,CAAC"}
@@ -1,21 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import cn from '../../utils/cn.js';
3
- const Root = ({ ref, children, className, ...props }) => {
4
- return (_jsx("div", { ref: ref, className: cn('inline-flex flex-row items-center justify-between bg-tintBlue w-full p-5 rounded-lg', className), ...props, children: children }));
5
- };
6
- const Title = (props) => {
7
- if (!props.title)
8
- return null;
9
- return (_jsx("span", { className: cn('text-lb500 extrabold display16', props.className), children: props.title }));
10
- };
11
- const Description = (props) => {
12
- if (!props.description)
13
- return null;
14
- return (_jsx("span", { className: cn('text-lb500 display14', props.className), children: props.description }));
15
- };
16
- export const CalloutBase = {
17
- Root,
18
- Title,
19
- Description,
20
- };
21
- export default CalloutBase;
@@ -1,50 +0,0 @@
1
- import { type CSSProperties, type ReactNode } from 'react';
2
- import { type CarouselOrientation, type RootProps } from './CarouselBase.js';
3
- export interface CarouselProps {
4
- /** 슬라이드로 렌더링할 노드 배열 */
5
- slides: ReactNode[];
6
- /** 가로/세로 방향. 기본 'horizontal' */
7
- orientation?: CarouselOrientation;
8
- /** 무한 루프. 기본 false */
9
- loop?: boolean;
10
- /** 자동재생(스텝형). true 또는 { delay, stopOnInteraction } */
11
- autoplay?: boolean | {
12
- delay?: number;
13
- stopOnInteraction?: boolean;
14
- };
15
- /** 연속 흐름(Auto Scroll). autoplay와 동시 사용 불가, loop와 함께 권장 */
16
- autoScroll?: RootProps['autoScroll'];
17
- /** 슬라이드 정렬 위치. 기본 'start'(왼쪽 끝 붙음) */
18
- align?: RootProps['align'];
19
- /** 이전/다음 화살표 표시. 기본 true */
20
- showArrows?: boolean;
21
- /** 하단 도트 페이지네이션 표시. 기본 true */
22
- showDots?: boolean;
23
- /** "현재 / 전체" 숫자 표시. 기본 false */
24
- showCounter?: boolean;
25
- /** 슬라이드 한 개의 크기(basis). 기본 '100%' */
26
- slideSize?: string;
27
- /** 슬라이드 사이 간격(Tailwind gap 단위 px). 기본 16 */
28
- gap?: number;
29
- className?: string;
30
- style?: CSSProperties;
31
- /** Viewport에 적용할 클래스 (세로 모드 높이 지정 등) */
32
- viewportClassName?: string;
33
- }
34
- /**
35
- * embla-carousel 기반 기본 캐러셀.
36
- * 고급 커스터마이징이 필요하면 `Carousel.Root` 등 compound API를 직접 조합하세요.
37
- */
38
- declare const Carousel: {
39
- ({ slides, orientation, loop, autoplay, autoScroll, align, showArrows, showDots, showCounter, slideSize, gap, className, style, viewportClassName, }: CarouselProps): import("react/jsx-runtime").JSX.Element;
40
- Root: ({ orientation, loop, autoplay, autoScroll, align, options, gap, className, style, children, }: RootProps) => import("react/jsx-runtime").JSX.Element;
41
- Viewport: ({ className, children }: import("./CarouselBase.js").ViewportProps) => import("react/jsx-runtime").JSX.Element;
42
- Container: ({ className, style, children }: import("./CarouselBase.js").ContainerProps) => import("react/jsx-runtime").JSX.Element;
43
- Slide: ({ size, index, total, className, style, children, }: import("./CarouselBase.js").SlideProps) => import("react/jsx-runtime").JSX.Element;
44
- Prev: ({ className, children, ...props }: import("./CarouselBase.js").NavButtonProps) => import("react/jsx-runtime").JSX.Element;
45
- Next: ({ className, children, ...props }: import("./CarouselBase.js").NavButtonProps) => import("react/jsx-runtime").JSX.Element;
46
- Dots: ({ className, dotClassName }: import("./CarouselBase.js").DotsProps) => import("react/jsx-runtime").JSX.Element;
47
- Counter: ({ className, format }: import("./CarouselBase.js").CounterProps) => import("react/jsx-runtime").JSX.Element;
48
- };
49
- export default Carousel;
50
- //# sourceMappingURL=Carousel.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Carousel.d.ts","sourceRoot":"","sources":["../../../src/components/Carousel/Carousel.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAC3D,OAAqB,EACnB,KAAK,mBAAmB,EACxB,KAAK,SAAS,EACf,MAAM,gBAAgB,CAAC;AAGxB,MAAM,WAAW,aAAa;IAC5B,uBAAuB;IACvB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,gCAAgC;IAChC,WAAW,CAAC,EAAE,mBAAmB,CAAC;IAClC,sBAAsB;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,sDAAsD;IACtD,QAAQ,CAAC,EAAE,OAAO,GAAG;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,iBAAiB,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IACrE,0DAA0D;IAC1D,UAAU,CAAC,EAAE,SAAS,CAAC,YAAY,CAAC,CAAC;IACrC,sCAAsC;IACtC,KAAK,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;IAC3B,4BAA4B;IAC5B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,gCAAgC;IAChC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,qCAAqC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4CAA4C;IAC5C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,wCAAwC;IACxC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;GAGG;AACH,QAAA,MAAM,QAAQ;0JAeX,aAAa;;;;;;;;;CAuDf,CAAC;AAWF,eAAe,QAAQ,CAAC"}
@@ -1,22 +0,0 @@
1
- 'use client';
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import CarouselBase from './CarouselBase.js';
4
- import cn from '../../utils/cn.js';
5
- /**
6
- * embla-carousel 기반 기본 캐러셀.
7
- * 고급 커스터마이징이 필요하면 `Carousel.Root` 등 compound API를 직접 조합하세요.
8
- */
9
- const Carousel = ({ slides, orientation = 'horizontal', loop = false, autoplay = false, autoScroll = false, align = 'start', showArrows = true, showDots = true, showCounter = false, slideSize = '100%', gap = 16, className, style, viewportClassName, }) => {
10
- const isVertical = orientation === 'vertical';
11
- const total = slides.length;
12
- return (_jsx(CarouselBase.Root, { orientation: orientation, loop: loop, autoplay: autoplay, autoScroll: autoScroll, align: align, gap: gap, className: className, style: style, children: _jsxs("div", { className: "flex flex-col gap-3", children: [_jsxs("div", { className: cn('flex items-center gap-3 w-full', isVertical && 'flex-col'), children: [showArrows && _jsx(CarouselBase.Prev, {}), _jsx(CarouselBase.Viewport, { className: cn('w-full', viewportClassName), children: _jsx(CarouselBase.Container, { children: slides.map((slide, i) => (_jsx(CarouselBase.Slide, { size: slideSize, index: i, total: total, children: slide }, i))) }) }), showArrows && _jsx(CarouselBase.Next, {})] }), (showDots || showCounter) && (_jsxs("div", { className: "flex items-center justify-center gap-3", children: [showDots && (_jsx(CarouselBase.Dots, { className: isVertical ? 'flex-col' : undefined })), showCounter && _jsx(CarouselBase.Counter, {})] }))] }) }));
13
- };
14
- Carousel.Root = CarouselBase.Root;
15
- Carousel.Viewport = CarouselBase.Viewport;
16
- Carousel.Container = CarouselBase.Container;
17
- Carousel.Slide = CarouselBase.Slide;
18
- Carousel.Prev = CarouselBase.Prev;
19
- Carousel.Next = CarouselBase.Next;
20
- Carousel.Dots = CarouselBase.Dots;
21
- Carousel.Counter = CarouselBase.Counter;
22
- export default Carousel;
@@ -1,98 +0,0 @@
1
- import { type CSSProperties, type ReactNode } from 'react';
2
- import useEmblaCarousel from 'embla-carousel-react';
3
- import type { EmblaCarouselType, EmblaOptionsType } from 'embla-carousel';
4
- export type CarouselOrientation = 'horizontal' | 'vertical';
5
- interface AutoplayConfig {
6
- /** 자동 전환 간격(ms). 기본 4000 */
7
- delay?: number;
8
- /** 사용자 상호작용 시 자동재생 정지 여부. 기본 false (재개) */
9
- stopOnInteraction?: boolean;
10
- }
11
- interface AutoScrollConfig {
12
- /** 흐르는 속도. 클수록 빠름. 기본 2 */
13
- speed?: number;
14
- /** 진행 방향. 기본 'forward' */
15
- direction?: 'forward' | 'backward';
16
- /** 사용자 상호작용 시 정지 여부. 기본 false (재개) */
17
- stopOnInteraction?: boolean;
18
- /** 마우스 올렸을 때 정지 여부. 기본 false */
19
- stopOnMouseEnter?: boolean;
20
- }
21
- interface CarouselContextType {
22
- emblaRef: ReturnType<typeof useEmblaCarousel>[0];
23
- emblaApi: EmblaCarouselType | undefined;
24
- selectedIndex: number;
25
- scrollSnaps: number[];
26
- canScrollPrev: boolean;
27
- canScrollNext: boolean;
28
- scrollPrev: () => void;
29
- scrollNext: () => void;
30
- scrollTo: (index: number) => void;
31
- orientation: CarouselOrientation;
32
- /** 슬라이드 간 간격(px). embla 공식 방식대로 Container 음수 마진 + Slide 패딩으로 적용 */
33
- gap: number;
34
- }
35
- /** 외부에서 캐러셀 컨트롤(emblaApi)에 접근하고 싶을 때 사용하는 훅 */
36
- export declare const useCarousel: () => CarouselContextType;
37
- export interface RootProps {
38
- orientation?: CarouselOrientation;
39
- loop?: boolean;
40
- /** true 또는 설정 객체를 넘기면 자동재생(스텝형) 활성화 */
41
- autoplay?: boolean | AutoplayConfig;
42
- /** true 또는 설정 객체를 넘기면 연속 흐름(Auto Scroll) 활성화.
43
- * autoplay와 동시 사용 불가 — 설정 시 autoplay보다 우선. loop와 함께 쓰는 것을 권장 */
44
- autoScroll?: boolean | AutoScrollConfig;
45
- /** 선택된 슬라이드가 viewport의 어디에 정렬되는지. 기본 'start'(왼쪽 끝 붙음) */
46
- align?: 'start' | 'center' | 'end';
47
- /** embla 추가 옵션 (dragFree, slidesToScroll 등) */
48
- options?: Omit<EmblaOptionsType, 'loop' | 'axis' | 'align'>;
49
- /** 슬라이드 간 간격(px). 기본 16 */
50
- gap?: number;
51
- className?: string;
52
- style?: CSSProperties;
53
- children?: ReactNode;
54
- }
55
- export interface ViewportProps {
56
- className?: string;
57
- children?: ReactNode;
58
- }
59
- export interface ContainerProps {
60
- className?: string;
61
- style?: CSSProperties;
62
- children?: ReactNode;
63
- }
64
- export interface SlideProps {
65
- /** 슬라이드 크기(basis). 기본 '100%' (한 번에 하나) */
66
- size?: string;
67
- index?: number;
68
- total?: number;
69
- className?: string;
70
- style?: CSSProperties;
71
- children?: ReactNode;
72
- }
73
- export interface NavButtonProps {
74
- className?: string;
75
- children?: ReactNode;
76
- 'aria-label'?: string;
77
- }
78
- export interface DotsProps {
79
- className?: string;
80
- dotClassName?: string;
81
- }
82
- export interface CounterProps {
83
- className?: string;
84
- /** 표시 형식 커스터마이즈. 기본 "3 / 5" */
85
- format?: (current: number, total: number) => string;
86
- }
87
- export declare const CarouselBase: {
88
- Root: ({ orientation, loop, autoplay, autoScroll, align, options, gap, className, style, children, }: RootProps) => import("react/jsx-runtime").JSX.Element;
89
- Viewport: ({ className, children }: ViewportProps) => import("react/jsx-runtime").JSX.Element;
90
- Container: ({ className, style, children }: ContainerProps) => import("react/jsx-runtime").JSX.Element;
91
- Slide: ({ size, index, total, className, style, children, }: SlideProps) => import("react/jsx-runtime").JSX.Element;
92
- Prev: ({ className, children, ...props }: NavButtonProps) => import("react/jsx-runtime").JSX.Element;
93
- Next: ({ className, children, ...props }: NavButtonProps) => import("react/jsx-runtime").JSX.Element;
94
- Dots: ({ className, dotClassName }: DotsProps) => import("react/jsx-runtime").JSX.Element;
95
- Counter: ({ className, format }: CounterProps) => import("react/jsx-runtime").JSX.Element;
96
- };
97
- export default CarouselBase;
98
- //# sourceMappingURL=CarouselBase.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CarouselBase.d.ts","sourceRoot":"","sources":["../../../src/components/Carousel/CarouselBase.tsx"],"names":[],"mappings":"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"}
@@ -1,144 +0,0 @@
1
- 'use client';
2
- import { jsx as _jsx } from "react/jsx-runtime";
3
- import { createContext, useCallback, useContext, useEffect, useState, } from 'react';
4
- import useEmblaCarousel from 'embla-carousel-react';
5
- import Autoplay from 'embla-carousel-autoplay';
6
- import AutoScroll from 'embla-carousel-auto-scroll';
7
- import LucideIcon from '../Icon/LucideIcon.js';
8
- import cn from '../../utils/cn.js';
9
- const CarouselContext = createContext(null);
10
- const useCarouselContext = () => {
11
- const ctx = useContext(CarouselContext);
12
- if (!ctx)
13
- throw new Error('Carousel 하위 컴포넌트는 Root 내부에서 사용해야 합니다.');
14
- return ctx;
15
- };
16
- /** 외부에서 캐러셀 컨트롤(emblaApi)에 접근하고 싶을 때 사용하는 훅 */
17
- export const useCarousel = useCarouselContext;
18
- const Root = ({ orientation = 'horizontal', loop = false, autoplay = false, autoScroll = false, align = 'start', options, gap = 16, className, style, children, }) => {
19
- // 자동 이동 플러그인 조립. autoScroll(연속 흐름)이 설정되면 autoplay(스텝형)보다 우선.
20
- const plugins = [];
21
- if (autoScroll) {
22
- const c = typeof autoScroll === 'object' ? autoScroll : {};
23
- plugins.push(AutoScroll({
24
- speed: c.speed ?? 2,
25
- direction: c.direction ?? 'forward',
26
- stopOnInteraction: c.stopOnInteraction ?? false,
27
- stopOnMouseEnter: c.stopOnMouseEnter ?? false,
28
- }));
29
- }
30
- else if (autoplay) {
31
- const c = typeof autoplay === 'object' ? autoplay : {};
32
- plugins.push(Autoplay({
33
- delay: c.delay ?? 4000,
34
- stopOnInteraction: c.stopOnInteraction ?? false,
35
- }));
36
- }
37
- const [emblaRef, emblaApi] = useEmblaCarousel({
38
- ...options,
39
- align,
40
- loop,
41
- axis: orientation === 'vertical' ? 'y' : 'x',
42
- }, plugins);
43
- const [selectedIndex, setSelectedIndex] = useState(0);
44
- const [scrollSnaps, setScrollSnaps] = useState([]);
45
- const [canScrollPrev, setCanScrollPrev] = useState(false);
46
- const [canScrollNext, setCanScrollNext] = useState(false);
47
- // 슬라이드 선택 변경시 실행되는 함수
48
- const onSelect = useCallback((api) => {
49
- setSelectedIndex(api.selectedScrollSnap());
50
- setCanScrollPrev(api.canScrollPrev());
51
- setCanScrollNext(api.canScrollNext());
52
- }, []);
53
- useEffect(() => {
54
- if (!emblaApi)
55
- return;
56
- setScrollSnaps(emblaApi.scrollSnapList());
57
- //슬라이드 초기 상태 설정
58
- onSelect(emblaApi);
59
- emblaApi.on('select', onSelect);
60
- emblaApi.on('reInit', onSelect);
61
- emblaApi.on('reInit', () => setScrollSnaps(emblaApi.scrollSnapList()));
62
- return () => {
63
- //클린업 함수
64
- emblaApi.off('select', onSelect);
65
- emblaApi.off('reInit', onSelect);
66
- };
67
- }, [emblaApi, onSelect]);
68
- const scrollPrev = useCallback(() => emblaApi?.scrollPrev(), [emblaApi]);
69
- const scrollNext = useCallback(() => emblaApi?.scrollNext(), [emblaApi]);
70
- const scrollTo = useCallback((index) => emblaApi?.scrollTo(index), [emblaApi]);
71
- return (_jsx(CarouselContext.Provider, { value: {
72
- emblaRef,
73
- emblaApi,
74
- selectedIndex,
75
- scrollSnaps,
76
- canScrollPrev,
77
- canScrollNext,
78
- scrollPrev,
79
- scrollNext,
80
- scrollTo,
81
- orientation,
82
- gap,
83
- }, children: _jsx("div", { className: cn('ld-carousel relative', className), style: style, role: "region", "aria-roledescription": "carousel", children: children }) }));
84
- };
85
- const Viewport = ({ className, children }) => {
86
- const { emblaRef } = useCarouselContext();
87
- return (_jsx("div", { ref: emblaRef, className: cn('ld-carousel__viewport', className), children: children }));
88
- };
89
- const Container = ({ className, style, children }) => {
90
- const { orientation, gap } = useCarouselContext();
91
- const isVertical = orientation === 'vertical';
92
- return (_jsx("div", { className: cn('flex', isVertical ? 'flex-col h-full' : 'flex-row', className),
93
- // embla 공식 방식: 간격을 Slide 패딩으로 주고, 첫 칸 패딩만 음수 마진으로 상쇄.
94
- // flex gap과 달리 loop 이음새(마지막↔처음)에도 간격이 유지됨.
95
- style: {
96
- [isVertical ? 'marginTop' : 'marginLeft']: -gap,
97
- ...style,
98
- }, children: children }));
99
- };
100
- const Slide = ({ size = '100%', index, total, className, style, children, }) => {
101
- const { orientation, gap } = useCarouselContext();
102
- const isVertical = orientation === 'vertical';
103
- return (_jsx("div", { role: "group", "aria-roledescription": "slide", "aria-label": index != null && total != null ? `${index + 1} / ${total}` : undefined, className: cn('min-w-0 shrink-0 grow-0', className),
104
- // 간격을 슬라이드 박스의 패딩으로 포함시켜야 embla가 크기를 정확히 재고
105
- // loop 이음새에도 간격이 유지된다 (embla 공식 방식).
106
- style: {
107
- flexBasis: size,
108
- [isVertical ? 'height' : 'width']: size,
109
- [isVertical ? 'paddingTop' : 'paddingLeft']: gap,
110
- ...style,
111
- }, children: children }));
112
- };
113
- const Prev = ({ className, children, ...props }) => {
114
- const { scrollPrev, canScrollPrev, orientation } = useCarouselContext();
115
- return (_jsx("button", { type: "button", onClick: scrollPrev, disabled: !canScrollPrev, "aria-label": props['aria-label'] ?? '이전', className: cn('ld-carousel__nav inline-flex items-center justify-center rounded-full bg-mono50 border border-mono200 w-9 h-9 ld-transition', 'hover:bg-neutral50 disabled:opacity-40 disabled:cursor-not-allowed cursor-pointer', className), children: children ?? (_jsx(LucideIcon, { name: orientation === 'vertical' ? 'chevronUp' : 'chevronLeft', size: 18, className: "text-neutral900" })) }));
116
- };
117
- const Next = ({ className, children, ...props }) => {
118
- const { scrollNext, canScrollNext, orientation } = useCarouselContext();
119
- return (_jsx("button", { type: "button", onClick: scrollNext, disabled: !canScrollNext, "aria-label": props['aria-label'] ?? '다음', className: cn('ld-carousel__nav inline-flex items-center justify-center rounded-full bg-mono50 border border-mono200 w-9 h-9 ld-transition', 'hover:bg-neutral50 disabled:opacity-40 disabled:cursor-not-allowed cursor-pointer', className), children: children ?? (_jsx(LucideIcon, { name: orientation === 'vertical' ? 'chevronDown' : 'chevronRight', size: 18, className: "text-neutral900" })) }));
120
- };
121
- const Dots = ({ className, dotClassName }) => {
122
- const { scrollSnaps, selectedIndex, scrollTo } = useCarouselContext();
123
- return (_jsx("div", { className: cn('flex items-center justify-center gap-2', className), children: scrollSnaps.map((_, i) => {
124
- const isActive = i === selectedIndex;
125
- return (_jsx("button", { type: "button", onClick: () => scrollTo(i), "aria-label": `${i + 1}번째 슬라이드로 이동`, "aria-current": isActive || undefined, className: cn('rounded-full ld-transition cursor-pointer', isActive ? 'w-5 h-2 bg-lb500' : 'w-2 h-2 bg-mono200', dotClassName) }, i));
126
- }) }));
127
- };
128
- const Counter = ({ className, format }) => {
129
- const { selectedIndex, scrollSnaps } = useCarouselContext();
130
- const current = selectedIndex + 1;
131
- const total = scrollSnaps.length;
132
- return (_jsx("span", { "aria-live": "polite", className: cn('display14 regular text-neutral500', className), children: format ? format(current, total) : `${current} / ${total}` }));
133
- };
134
- export const CarouselBase = {
135
- Root,
136
- Viewport,
137
- Container,
138
- Slide,
139
- Prev,
140
- Next,
141
- Dots,
142
- Counter,
143
- };
144
- export default CarouselBase;
@@ -1,27 +0,0 @@
1
- import { type InputHTMLAttributes, type Ref } from 'react';
2
- type CheckboxSize = 'small';
3
- type CheckboxFontSize = 'small' | 'regular';
4
- type CheckboxType = 'default' | 'checkbox' | 'pill';
5
- export interface CheckboxProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'size' | 'value'> {
6
- /** 체크 상태 변경 콜백 (boolean) */
7
- onCheckedChange?: (checked: boolean) => void;
8
- /** input value */
9
- value?: string;
10
- /** 체크 아이콘 크기 프리셋 */
11
- size?: CheckboxSize;
12
- /** 라벨 텍스트 크기 프리셋 */
13
- fontSize?: CheckboxFontSize;
14
- /** 라벨 텍스트 */
15
- label?: string;
16
- /** '필수' 라벨 표시 여부 */
17
- isRequired?: boolean;
18
- /** 체크박스 유형 (default: 체크 아이콘, checkbox: 박스형, pill: 알약형 토글) */
19
- type?: CheckboxType;
20
- /** 라벨과 체크박스 세로 가운데 정렬 */
21
- itemCenter?: boolean;
22
- /** input 요소 ref */
23
- ref?: Ref<HTMLInputElement>;
24
- }
25
- declare const Checkbox: ({ checked, defaultChecked, onCheckedChange, onChange, size, fontSize, label, isRequired, type, itemCenter, disabled, className, style, ref, ...props }: CheckboxProps) => import("react/jsx-runtime").JSX.Element;
26
- export default Checkbox;
27
- //# sourceMappingURL=Checkbox.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Checkbox.d.ts","sourceRoot":"","sources":["../../../src/components/Checkbox/Checkbox.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,mBAAmB,EAAE,KAAK,GAAG,EAAE,MAAM,OAAO,CAAC;AAK3D,KAAK,YAAY,GAAG,OAAO,CAAC;AAC5B,KAAK,gBAAgB,GAAG,OAAO,GAAG,SAAS,CAAC;AAC5C,KAAK,YAAY,GAAG,SAAS,GAAG,UAAU,GAAG,MAAM,CAAC;AAiBpD,MAAM,WAAW,aAAc,SAAQ,IAAI,CACzC,mBAAmB,CAAC,gBAAgB,CAAC,EACrC,MAAM,GAAG,MAAM,GAAG,OAAO,CAC1B;IACC,4BAA4B;IAC5B,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC7C,kBAAkB;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oBAAoB;IACpB,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,oBAAoB;IACpB,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,aAAa;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oBAAoB;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,6DAA6D;IAC7D,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,yBAAyB;IACzB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,mBAAmB;IACnB,GAAG,CAAC,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC;CAC7B;AA8FD,QAAA,MAAM,QAAQ,GAAI,wJAgBf,aAAa,4CAgDf,CAAC;AAEF,eAAe,QAAQ,CAAC"}
@@ -1,30 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import CheckboxBase, { useCheckboxContext } from './CheckboxBase.js';
3
- import cn from '../../utils/cn.js';
4
- const checkIconSizes = {
5
- small: 24,
6
- };
7
- const labelHeight = {
8
- small: 'min-h-6 leading-6',
9
- };
10
- const labelSizeClasses = {
11
- small: 'display14',
12
- regular: 'display16',
13
- };
14
- // ── Inner: Context에서 checked를 읽어 스타일 적용 ──
15
- const PillInner = ({ label, ref, ...props }) => {
16
- const { checked } = useCheckboxContext();
17
- return (_jsxs(_Fragment, { children: [_jsx(CheckboxBase.HiddenInput, { ref: ref, ...props }), _jsxs("div", { className: "relative flex items-center", children: [_jsx(CheckboxBase.Indicator, { icon: "check", iconSize: 16, className: cn('absolute left-0'), iconClassName: cn('shrink-0 transition-all duration-200 ease-out', checked ? 'opacity-100' : 'opacity-0') }), label && (_jsx(CheckboxBase.Label, { className: cn('transition-all ld-transition text-nowrap', checked ? 'pl-5' : 'pl-sm pr-sm'), children: label }))] })] }));
18
- };
19
- const DefaultInner = ({ type, size, label, isRequired, ref, ...props }) => {
20
- const { checked, disabled } = useCheckboxContext();
21
- return (_jsxs(_Fragment, { children: [_jsx(CheckboxBase.HiddenInput, { ref: ref, ...props }), _jsx(CheckboxBase.Indicator, { icon: "check", iconSize: type === 'checkbox' ? 10 : checkIconSizes[size], className: cn('ld-transition', type === 'checkbox' &&
22
- 'border-2 rounded-[5px] border-mono300 p-[3px]', type === 'checkbox' && checked && 'bg-lb500 border-lb500', type === 'checkbox' && disabled && 'bg-mono100 border-mono100', 'peer-focus-visible:ring-2 peer-focus-visible:ring-lb500 peer-focus-visible:ring-offset-2'), iconClassName: cn('shrink-0', checked ? 'ld-transition text-blue400' : 'text-neutral500', type === 'checkbox' && 'text-white') }), isRequired && (_jsx(CheckboxBase.Label, { className: cn('text-blue400 shrink-0 block', labelHeight[size]), children: "\uD544\uC218" })), label && (_jsx(CheckboxBase.Label, { className: cn('text-neutral900 block', labelHeight[size]), children: label }))] }));
23
- };
24
- const Checkbox = ({ checked, defaultChecked, onCheckedChange, onChange, size = 'small', fontSize = 'small', label, isRequired = false, type = 'default', itemCenter = false, disabled = false, className, style, ref, ...props }) => {
25
- if (type === 'pill') {
26
- return (_jsx(CheckboxBase.Root, { checked: checked, defaultChecked: defaultChecked, onCheckedChange: onCheckedChange, disabled: disabled, style: style, className: (c) => cn('items-center gap-2 rounded-full py-sm px-[15px] ld-transition display14 bold', c ? 'bg-tintBlue text-lb500' : 'bg-mono100 text-mono500', disabled && 'opacity-50 cursor-not-allowed', className), children: _jsx(PillInner, { label: label, ref: ref, onChange: onChange, ...props }) }));
27
- }
28
- return (_jsx(CheckboxBase.Root, { checked: checked, defaultChecked: defaultChecked, onCheckedChange: onCheckedChange, disabled: disabled, style: style, className: cn('bold items-start ld-transition', itemCenter && 'items-center', labelSizeClasses[fontSize], className), children: _jsx(DefaultInner, { type: type, size: size, label: label, isRequired: isRequired, ref: ref, onChange: onChange, ...props }) }));
29
- };
30
- export default Checkbox;