@loword/loword-design-system 0.0.2 → 0.0.4

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 (263) hide show
  1. package/README.md +77 -3
  2. package/dist/components/BreadCrumb/BreadCrumb.d.ts +17 -0
  3. package/dist/components/BreadCrumb/BreadCrumb.d.ts.map +1 -0
  4. package/dist/components/BreadCrumb/BreadCrumb.js +37 -0
  5. package/dist/components/BreadCrumb/BreadCrumbBase.d.ts +9 -0
  6. package/dist/components/BreadCrumb/BreadCrumbBase.d.ts.map +1 -0
  7. package/dist/components/BreadCrumb/BreadCrumbBase.js +17 -0
  8. package/dist/components/Button/ButtonSpinner.d.ts +1 -2
  9. package/dist/components/Button/ButtonSpinner.d.ts.map +1 -1
  10. package/dist/components/Button/ButtonSpinner.js +3 -2
  11. package/dist/components/Callout/Callout.d.ts +10 -0
  12. package/dist/components/Callout/Callout.d.ts.map +1 -0
  13. package/dist/components/Callout/Callout.js +6 -0
  14. package/dist/components/Callout/CalloutBase.d.ts +18 -0
  15. package/dist/components/Callout/CalloutBase.d.ts.map +1 -0
  16. package/dist/components/Callout/CalloutBase.js +21 -0
  17. package/dist/components/Divider/Divider.d.ts +9 -0
  18. package/dist/components/Divider/Divider.d.ts.map +1 -0
  19. package/dist/components/Divider/Divider.js +11 -0
  20. package/dist/components/Divider/DividerBase.d.ts +9 -0
  21. package/dist/components/Divider/DividerBase.d.ts.map +1 -0
  22. package/dist/components/Divider/DividerBase.js +9 -0
  23. package/dist/components/FileUpload/FileUploadBase.d.ts +5 -5
  24. package/dist/components/FileUpload/FileUploadBase.d.ts.map +1 -1
  25. package/dist/components/FileUpload/FileUploadBase.js +4 -4
  26. package/dist/components/Form/FormField.d.ts +2 -2
  27. package/dist/components/LDAvatar/AvatarBase.d.ts +32 -0
  28. package/dist/components/LDAvatar/AvatarBase.d.ts.map +1 -0
  29. package/dist/components/LDAvatar/AvatarBase.js +49 -0
  30. package/dist/components/LDAvatar/LDAvatar.d.ts +11 -0
  31. package/dist/components/LDAvatar/LDAvatar.d.ts.map +1 -0
  32. package/dist/components/LDAvatar/LDAvatar.js +24 -0
  33. package/dist/components/LDBadge/BadgeBase.d.ts +10 -0
  34. package/dist/components/LDBadge/BadgeBase.d.ts.map +1 -0
  35. package/dist/components/LDBadge/BadgeBase.js +9 -0
  36. package/dist/components/LDBadge/LDBadge.d.ts +25 -0
  37. package/dist/components/LDBadge/LDBadge.d.ts.map +1 -0
  38. package/dist/components/LDBadge/LDBadge.js +36 -0
  39. package/dist/components/LDBreadCrumb/BreadCrumbBase.d.ts +9 -0
  40. package/dist/components/LDBreadCrumb/BreadCrumbBase.d.ts.map +1 -0
  41. package/dist/components/LDBreadCrumb/BreadCrumbBase.js +17 -0
  42. package/dist/components/LDBreadCrumb/LDBreadCrumb.d.ts +17 -0
  43. package/dist/components/LDBreadCrumb/LDBreadCrumb.d.ts.map +1 -0
  44. package/dist/components/LDBreadCrumb/LDBreadCrumb.js +37 -0
  45. package/dist/components/LDButton/ButtonBase.d.ts +5 -0
  46. package/dist/components/LDButton/ButtonBase.d.ts.map +1 -0
  47. package/dist/components/LDButton/ButtonBase.js +10 -0
  48. package/dist/components/LDButton/ButtonSpinner.d.ts +8 -0
  49. package/dist/components/LDButton/ButtonSpinner.d.ts.map +1 -0
  50. package/dist/components/LDButton/ButtonSpinner.js +15 -0
  51. package/dist/components/LDButton/LDButton.d.ts +26 -0
  52. package/dist/components/LDButton/LDButton.d.ts.map +1 -0
  53. package/dist/components/LDButton/LDButton.js +102 -0
  54. package/dist/components/LDCalendar/LDCalendar.d.ts +16 -0
  55. package/dist/components/LDCalendar/LDCalendar.d.ts.map +1 -0
  56. package/dist/components/LDCalendar/LDCalendar.js +75 -0
  57. package/dist/components/LDCallout/CalloutBase.d.ts +18 -0
  58. package/dist/components/LDCallout/CalloutBase.d.ts.map +1 -0
  59. package/dist/components/LDCallout/CalloutBase.js +21 -0
  60. package/dist/components/LDCallout/LDCallout.d.ts +10 -0
  61. package/dist/components/LDCallout/LDCallout.d.ts.map +1 -0
  62. package/dist/components/LDCallout/LDCallout.js +6 -0
  63. package/dist/components/LDCarousel/CarouselBase.d.ts +98 -0
  64. package/dist/components/LDCarousel/CarouselBase.d.ts.map +1 -0
  65. package/dist/components/LDCarousel/CarouselBase.js +144 -0
  66. package/dist/components/LDCarousel/LDCarousel.d.ts +50 -0
  67. package/dist/components/LDCarousel/LDCarousel.d.ts.map +1 -0
  68. package/dist/components/LDCarousel/LDCarousel.js +22 -0
  69. package/dist/components/LDCheckbox/CheckboxBase.d.ts +40 -0
  70. package/dist/components/LDCheckbox/CheckboxBase.d.ts.map +1 -0
  71. package/dist/components/LDCheckbox/CheckboxBase.js +57 -0
  72. package/dist/components/LDCheckbox/FormCheckbox.d.ts +14 -0
  73. package/dist/components/LDCheckbox/FormCheckbox.d.ts.map +1 -0
  74. package/dist/components/LDCheckbox/FormCheckbox.js +9 -0
  75. package/dist/components/LDCheckbox/FormCheckboxGroup.d.ts +13 -0
  76. package/dist/components/LDCheckbox/FormCheckboxGroup.d.ts.map +1 -0
  77. package/dist/components/LDCheckbox/FormCheckboxGroup.js +9 -0
  78. package/dist/components/LDCheckbox/LDCheckbox.d.ts +27 -0
  79. package/dist/components/LDCheckbox/LDCheckbox.d.ts.map +1 -0
  80. package/dist/components/LDCheckbox/LDCheckbox.js +30 -0
  81. package/dist/components/LDCheckbox/LDCheckboxGroup.d.ts +22 -0
  82. package/dist/components/LDCheckbox/LDCheckboxGroup.d.ts.map +1 -0
  83. package/dist/components/LDCheckbox/LDCheckboxGroup.js +13 -0
  84. package/dist/components/LDDataCalendar/DataCalendarBase.d.ts +45 -0
  85. package/dist/components/LDDataCalendar/DataCalendarBase.d.ts.map +1 -0
  86. package/dist/components/LDDataCalendar/DataCalendarBase.js +57 -0
  87. package/dist/components/LDDataCalendar/LDDataCalendar.d.ts +12 -0
  88. package/dist/components/LDDataCalendar/LDDataCalendar.d.ts.map +1 -0
  89. package/dist/components/LDDataCalendar/LDDataCalendar.js +13 -0
  90. package/dist/components/LDDatePicker/FormDatePicker.d.ts +12 -0
  91. package/dist/components/LDDatePicker/FormDatePicker.d.ts.map +1 -0
  92. package/dist/components/LDDatePicker/FormDatePicker.js +12 -0
  93. package/dist/components/LDDatePicker/LDDatePicker.d.ts +34 -0
  94. package/dist/components/LDDatePicker/LDDatePicker.d.ts.map +1 -0
  95. package/dist/components/LDDatePicker/LDDatePicker.js +44 -0
  96. package/dist/components/LDDateRangePicker/FormDateRangePicker.d.ts +12 -0
  97. package/dist/components/LDDateRangePicker/FormDateRangePicker.d.ts.map +1 -0
  98. package/dist/components/LDDateRangePicker/FormDateRangePicker.js +10 -0
  99. package/dist/components/LDDateRangePicker/LDDateRangePicker.d.ts +49 -0
  100. package/dist/components/LDDateRangePicker/LDDateRangePicker.d.ts.map +1 -0
  101. package/dist/components/LDDateRangePicker/LDDateRangePicker.js +197 -0
  102. package/dist/components/LDDivider/DividerBase.d.ts +9 -0
  103. package/dist/components/LDDivider/DividerBase.d.ts.map +1 -0
  104. package/dist/components/LDDivider/DividerBase.js +9 -0
  105. package/dist/components/LDDivider/LDDivider.d.ts +9 -0
  106. package/dist/components/LDDivider/LDDivider.d.ts.map +1 -0
  107. package/dist/components/LDDivider/LDDivider.js +11 -0
  108. package/dist/components/LDDrawer/DrawerBase.d.ts +52 -0
  109. package/dist/components/LDDrawer/DrawerBase.d.ts.map +1 -0
  110. package/dist/components/LDDrawer/DrawerBase.js +38 -0
  111. package/dist/components/LDDrawer/LDDrawer.d.ts +51 -0
  112. package/dist/components/LDDrawer/LDDrawer.d.ts.map +1 -0
  113. package/dist/components/LDDrawer/LDDrawer.js +30 -0
  114. package/dist/components/LDEditor/EditorBase.d.ts +52 -0
  115. package/dist/components/LDEditor/EditorBase.d.ts.map +1 -0
  116. package/dist/components/LDEditor/EditorBase.js +89 -0
  117. package/dist/components/LDEditor/LDEditor.d.ts +12 -0
  118. package/dist/components/LDEditor/LDEditor.d.ts.map +1 -0
  119. package/dist/components/LDEditor/LDEditor.js +162 -0
  120. package/dist/components/LDEditor/LDViewer.d.ts +7 -0
  121. package/dist/components/LDEditor/LDViewer.d.ts.map +1 -0
  122. package/dist/components/LDEditor/LDViewer.js +9 -0
  123. package/dist/components/LDEditor/extensions.d.ts +6 -0
  124. package/dist/components/LDEditor/extensions.d.ts.map +1 -0
  125. package/dist/components/LDEditor/extensions.js +38 -0
  126. package/dist/components/LDFileUpload/LDFileUploadBase.d.ts +50 -0
  127. package/dist/components/LDFileUpload/LDFileUploadBase.d.ts.map +1 -0
  128. package/dist/components/LDFileUpload/LDFileUploadBase.js +102 -0
  129. package/dist/components/LDInput/FormInput.d.ts +15 -0
  130. package/dist/components/LDInput/FormInput.d.ts.map +1 -0
  131. package/dist/components/LDInput/FormInput.js +19 -0
  132. package/dist/components/LDInput/InputBase.d.ts +22 -0
  133. package/dist/components/LDInput/InputBase.d.ts.map +1 -0
  134. package/dist/components/LDInput/InputBase.js +17 -0
  135. package/dist/components/LDInput/LDInput.d.ts +24 -0
  136. package/dist/components/LDInput/LDInput.d.ts.map +1 -0
  137. package/dist/components/LDInput/LDInput.js +71 -0
  138. package/dist/components/LDLNB/LDLNBBase.d.ts +82 -0
  139. package/dist/components/LDLNB/LDLNBBase.d.ts.map +1 -0
  140. package/dist/components/LDLNB/LDLNBBase.js +108 -0
  141. package/dist/components/LDLoadingDots/LDLoadingDots.d.ts +8 -0
  142. package/dist/components/LDLoadingDots/LDLoadingDots.d.ts.map +1 -0
  143. package/dist/components/LDLoadingDots/LDLoadingDots.js +29 -0
  144. package/dist/components/LDMenuBar/LDMenuBar.d.ts +21 -0
  145. package/dist/components/LDMenuBar/LDMenuBar.d.ts.map +1 -0
  146. package/dist/components/LDMenuBar/LDMenuBar.js +33 -0
  147. package/dist/components/LDMenuBar/MenuBarBase.d.ts +43 -0
  148. package/dist/components/LDMenuBar/MenuBarBase.d.ts.map +1 -0
  149. package/dist/components/LDMenuBar/MenuBarBase.js +69 -0
  150. package/dist/components/LDModal/LDModal.d.ts +51 -0
  151. package/dist/components/LDModal/LDModal.d.ts.map +1 -0
  152. package/dist/components/LDModal/LDModal.js +72 -0
  153. package/dist/components/LDModal/ModalBase.d.ts +42 -0
  154. package/dist/components/LDModal/ModalBase.d.ts.map +1 -0
  155. package/dist/components/LDModal/ModalBase.js +30 -0
  156. package/dist/components/LDModal/openModal.d.ts +24 -0
  157. package/dist/components/LDModal/openModal.d.ts.map +1 -0
  158. package/dist/components/LDModal/openModal.js +52 -0
  159. package/dist/components/LDOTPInput/LDOTPInput.d.ts +46 -0
  160. package/dist/components/LDOTPInput/LDOTPInput.d.ts.map +1 -0
  161. package/dist/components/LDOTPInput/LDOTPInput.js +87 -0
  162. package/dist/components/LDPagination/LDPagination.d.ts +12 -0
  163. package/dist/components/LDPagination/LDPagination.d.ts.map +1 -0
  164. package/dist/components/LDPagination/LDPagination.js +5 -0
  165. package/dist/components/LDPagination/PaginationBase.d.ts +36 -0
  166. package/dist/components/LDPagination/PaginationBase.d.ts.map +1 -0
  167. package/dist/components/LDPagination/PaginationBase.js +44 -0
  168. package/dist/components/LDPagination/paginationUtils.d.ts +2 -0
  169. package/dist/components/LDPagination/paginationUtils.d.ts.map +1 -0
  170. package/dist/components/LDPagination/paginationUtils.js +18 -0
  171. package/dist/components/LDPopover/LDPopover.d.ts +42 -0
  172. package/dist/components/LDPopover/LDPopover.d.ts.map +1 -0
  173. package/dist/components/LDPopover/LDPopover.js +31 -0
  174. package/dist/components/LDPopover/PopoverBase.d.ts +31 -0
  175. package/dist/components/LDPopover/PopoverBase.d.ts.map +1 -0
  176. package/dist/components/LDPopover/PopoverBase.js +18 -0
  177. package/dist/components/LDRadio/FormRadioGroup.d.ts +13 -0
  178. package/dist/components/LDRadio/FormRadioGroup.d.ts.map +1 -0
  179. package/dist/components/LDRadio/FormRadioGroup.js +9 -0
  180. package/dist/components/LDRadio/LDRadio.d.ts +24 -0
  181. package/dist/components/LDRadio/LDRadio.d.ts.map +1 -0
  182. package/dist/components/LDRadio/LDRadio.js +39 -0
  183. package/dist/components/LDRadio/LDRadioGroup.d.ts +22 -0
  184. package/dist/components/LDRadio/LDRadioGroup.d.ts.map +1 -0
  185. package/dist/components/LDRadio/LDRadioGroup.js +7 -0
  186. package/dist/components/LDRadio/RadioBase.d.ts +38 -0
  187. package/dist/components/LDRadio/RadioBase.d.ts.map +1 -0
  188. package/dist/components/LDRadio/RadioBase.js +46 -0
  189. package/dist/components/LDScrollArea/LDScrollArea.d.ts +15 -0
  190. package/dist/components/LDScrollArea/LDScrollArea.d.ts.map +1 -0
  191. package/dist/components/LDScrollArea/LDScrollArea.js +10 -0
  192. package/dist/components/LDSelect/FormMultiSelect.d.ts +13 -0
  193. package/dist/components/LDSelect/FormMultiSelect.d.ts.map +1 -0
  194. package/dist/components/LDSelect/FormMultiSelect.js +14 -0
  195. package/dist/components/LDSelect/FormSelect.d.ts +13 -0
  196. package/dist/components/LDSelect/FormSelect.d.ts.map +1 -0
  197. package/dist/components/LDSelect/FormSelect.js +10 -0
  198. package/dist/components/LDSelect/LDMultiSelect.d.ts +31 -0
  199. package/dist/components/LDSelect/LDMultiSelect.d.ts.map +1 -0
  200. package/dist/components/LDSelect/LDMultiSelect.js +59 -0
  201. package/dist/components/LDSelect/LDSelect.d.ts +41 -0
  202. package/dist/components/LDSelect/LDSelect.d.ts.map +1 -0
  203. package/dist/components/LDSelect/LDSelect.js +55 -0
  204. package/dist/components/LDSelect/SelectBase.d.ts +59 -0
  205. package/dist/components/LDSelect/SelectBase.d.ts.map +1 -0
  206. package/dist/components/LDSelect/SelectBase.js +211 -0
  207. package/dist/components/LDSkeleton/LDSkeleton.d.ts +10 -0
  208. package/dist/components/LDSkeleton/LDSkeleton.d.ts.map +1 -0
  209. package/dist/components/LDSkeleton/LDSkeleton.js +8 -0
  210. package/dist/components/LDSlider/LDSlider.d.ts +23 -0
  211. package/dist/components/LDSlider/LDSlider.d.ts.map +1 -0
  212. package/dist/components/LDSlider/LDSlider.js +195 -0
  213. package/dist/components/LDSpinner/LDSpinner.d.ts +25 -0
  214. package/dist/components/LDSpinner/LDSpinner.d.ts.map +1 -0
  215. package/dist/components/LDSpinner/LDSpinner.js +20 -0
  216. package/dist/components/LDTable/LDTable.d.ts +34 -0
  217. package/dist/components/LDTable/LDTable.d.ts.map +1 -0
  218. package/dist/components/LDTable/LDTable.js +29 -0
  219. package/dist/components/LDTable/LDTanstackTable.d.ts +23 -0
  220. package/dist/components/LDTable/LDTanstackTable.d.ts.map +1 -0
  221. package/dist/components/LDTable/LDTanstackTable.js +35 -0
  222. package/dist/components/LDTable/TableBase.d.ts +37 -0
  223. package/dist/components/LDTable/TableBase.d.ts.map +1 -0
  224. package/dist/components/LDTable/TableBase.js +39 -0
  225. package/dist/components/LDTable/TableField.d.ts +64 -0
  226. package/dist/components/LDTable/TableField.d.ts.map +1 -0
  227. package/dist/components/LDTable/TableField.js +87 -0
  228. package/dist/components/LDTimePicker/FormTimePicker.d.ts +12 -0
  229. package/dist/components/LDTimePicker/FormTimePicker.d.ts.map +1 -0
  230. package/dist/components/LDTimePicker/FormTimePicker.js +12 -0
  231. package/dist/components/LDTimePicker/LDTimePicker.d.ts +27 -0
  232. package/dist/components/LDTimePicker/LDTimePicker.d.ts.map +1 -0
  233. package/dist/components/LDTimePicker/LDTimePicker.js +120 -0
  234. package/dist/components/LDToast/LDToast.d.ts +18 -0
  235. package/dist/components/LDToast/LDToast.d.ts.map +1 -0
  236. package/dist/components/LDToast/LDToast.js +42 -0
  237. package/dist/components/LDToast/LDToaster.d.ts +7 -0
  238. package/dist/components/LDToast/LDToaster.d.ts.map +1 -0
  239. package/dist/components/LDToast/LDToaster.js +7 -0
  240. package/dist/components/LDToggleButton/FormToggleButton.d.ts +12 -0
  241. package/dist/components/LDToggleButton/FormToggleButton.d.ts.map +1 -0
  242. package/dist/components/LDToggleButton/FormToggleButton.js +9 -0
  243. package/dist/components/LDToggleButton/LDToggleButton.d.ts +31 -0
  244. package/dist/components/LDToggleButton/LDToggleButton.d.ts.map +1 -0
  245. package/dist/components/LDToggleButton/LDToggleButton.js +42 -0
  246. package/dist/components/LDToggleButton/ToggleButtonBase.d.ts +41 -0
  247. package/dist/components/LDToggleButton/ToggleButtonBase.d.ts.map +1 -0
  248. package/dist/components/LDToggleButton/ToggleButtonBase.js +59 -0
  249. package/dist/components/LDTooltip/LDTooltip.d.ts +18 -0
  250. package/dist/components/LDTooltip/LDTooltip.d.ts.map +1 -0
  251. package/dist/components/LDTooltip/LDTooltip.js +13 -0
  252. package/dist/components/LDTooltip/TooltipBase.d.ts +39 -0
  253. package/dist/components/LDTooltip/TooltipBase.d.ts.map +1 -0
  254. package/dist/components/LDTooltip/TooltipBase.js +46 -0
  255. package/dist/components/LNB/LNBBase.js +2 -2
  256. package/dist/components/Spinner/Spinner.d.ts +1 -1
  257. package/dist/components/Spinner/Spinner.d.ts.map +1 -1
  258. package/dist/components/Spinner/Spinner.js +1 -1
  259. package/dist/index.css +115 -13
  260. package/dist/index.d.ts +52 -49
  261. package/dist/index.d.ts.map +1 -1
  262. package/dist/index.js +88 -82
  263. package/package.json +1 -1
@@ -0,0 +1,22 @@
1
+ import { type InputHTMLAttributes, type ReactNode, type Ref } from 'react';
2
+ interface RootProps {
3
+ block?: boolean;
4
+ className?: string;
5
+ style?: React.CSSProperties;
6
+ children?: ReactNode;
7
+ }
8
+ interface FieldProps extends InputHTMLAttributes<HTMLInputElement> {
9
+ ref?: Ref<HTMLInputElement>;
10
+ }
11
+ interface AddonProps {
12
+ position?: 'left' | 'right';
13
+ className?: string;
14
+ children?: ReactNode;
15
+ }
16
+ export declare const InputBase: {
17
+ Root: ({ block, className, style, children }: RootProps) => import("react/jsx-runtime").JSX.Element;
18
+ Field: ({ ref, ...props }: FieldProps) => import("react/jsx-runtime").JSX.Element;
19
+ Addon: ({ position, className, children }: AddonProps) => import("react/jsx-runtime").JSX.Element;
20
+ };
21
+ export default InputBase;
22
+ //# sourceMappingURL=InputBase.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InputBase.d.ts","sourceRoot":"","sources":["../../../src/components/LDInput/InputBase.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,mBAAmB,EAAE,KAAK,SAAS,EAAE,KAAK,GAAG,EAAE,MAAM,OAAO,CAAC;AAI3E,UAAU,SAAS;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAcD,UAAU,UAAW,SAAQ,mBAAmB,CAAC,gBAAgB,CAAC;IAChE,GAAG,CAAC,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC;CAC7B;AAOD,UAAU,UAAU;IAClB,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAgBD,eAAO,MAAM,SAAS;kDAzCuC,SAAS;+BAgBpC,UAAU;+CAWgB,UAAU;CAkBrE,CAAC;AAEF,eAAe,SAAS,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import cn from '../../utils/cn.js';
3
+ const Root = ({ block = false, className, style, children }) => {
4
+ return (_jsx("div", { style: style, className: cn('relative flex group', block && 'w-full', className), children: children }));
5
+ };
6
+ const Field = ({ ref, ...props }) => {
7
+ return _jsx("input", { ref: ref, ...props });
8
+ };
9
+ const Addon = ({ position = 'right', className, children }) => {
10
+ return (_jsx("span", { className: cn('absolute top-1/2 -translate-y-1/2 flex items-center', position === 'left' ? 'left-0' : 'right-0', className), children: children }));
11
+ };
12
+ export const InputBase = {
13
+ Root,
14
+ Field,
15
+ Addon,
16
+ };
17
+ export default InputBase;
@@ -0,0 +1,24 @@
1
+ import { type InputHTMLAttributes, type ReactNode, type Ref } from 'react';
2
+ type InputVariant = 'filled' | 'outline' | 'ghost';
3
+ type InputColor = 'neutral' | 'point' | 'danger';
4
+ type InputSize = 'xSmall' | 'small' | 'medium' | 'large' | 'big' | 'xLarge';
5
+ export declare const iconSizes: Record<InputSize, number>;
6
+ export interface LDInputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'color' | 'size'> {
7
+ /** 입력 필드 스타일 유형 */
8
+ variant?: InputVariant;
9
+ /** 색상 테마 */
10
+ color?: InputColor;
11
+ /** 입력 필드 높이 및 폰트 크기 프리셋 */
12
+ size?: InputSize;
13
+ /** 비밀번호 표시/숨김 토글 버튼 */
14
+ showPasswordToggle?: boolean;
15
+ /** true 시 너비 100% */
16
+ block?: boolean;
17
+ /** 우측 부가 요소 (아이콘 등) */
18
+ rightAddon?: ReactNode;
19
+ /** input 요소 ref */
20
+ ref?: Ref<HTMLInputElement>;
21
+ }
22
+ declare const LDInput: ({ variant, color, size, showPasswordToggle, block, type, disabled, className, style, rightAddon, ref, ...props }: LDInputProps) => import("react/jsx-runtime").JSX.Element;
23
+ export default LDInput;
24
+ //# sourceMappingURL=LDInput.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LDInput.d.ts","sourceRoot":"","sources":["../../../src/components/LDInput/LDInput.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,SAAS,EACd,KAAK,GAAG,EACT,MAAM,OAAO,CAAC;AAMf,KAAK,YAAY,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,CAAC;AACnD,KAAK,UAAU,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;AACjD,KAAK,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,KAAK,GAAG,QAAQ,CAAC;AAqD5E,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAO/C,CAAC;AAGF,MAAM,WAAW,YAAa,SAAQ,IAAI,CACxC,mBAAmB,CAAC,gBAAgB,CAAC,EACrC,OAAO,GAAG,MAAM,CACjB;IACC,mBAAmB;IACnB,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,YAAY;IACZ,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,2BAA2B;IAC3B,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,uBAAuB;IACvB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,qBAAqB;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,uBAAuB;IACvB,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,mBAAmB;IACnB,GAAG,CAAC,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC;CAC7B;AAED,QAAA,MAAM,OAAO,GAAI,kHAad,YAAY,4CAuEd,CAAC;AAEF,eAAe,OAAO,CAAC"}
@@ -0,0 +1,71 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState, } from 'react';
3
+ import InputBase from './InputBase.js';
4
+ import LucideIcon from '../Icon/LucideIcon.js';
5
+ import cn from '../../utils/cn.js';
6
+ // ── 스타일 매핑 ──
7
+ const variantColorClasses = {
8
+ filled: {
9
+ neutral: 'bg-mono100 text-neutral900 outline-2 outline-transparent focus:bg-tintBlue focus:outline-lb500',
10
+ point: 'bg-mono100 text-neutral900 outline-2 outline-transparent focus:bg-tintBlue focus:outline-lb500',
11
+ danger: 'bg-tintRed text-neutral900 outline-2 outline-red500',
12
+ },
13
+ outline: {
14
+ neutral: 'bg-transparent text-neutral900 border border-mono200 focus:border-lb500',
15
+ point: 'bg-transparent text-neutral900 border border-mono200 focus:border-lb500',
16
+ danger: 'bg-transparent text-neutral900 border border-danger100 focus:border-red500',
17
+ },
18
+ ghost: {
19
+ neutral: 'bg-transparent text-neutral900 outline-2 outline-transparent hover:bg-mono50 focus:bg-mono100 focus:outline-lb500',
20
+ point: 'bg-transparent text-neutral900 outline-2 outline-transparent hover:bg-mono50 focus:bg-mono100 focus:outline-lb500',
21
+ danger: 'bg-transparent text-danger500 outline-2 outline-transparent hover:bg-tintRed focus:bg-tintRed focus:outline-red500',
22
+ },
23
+ };
24
+ const disabledVariantClasses = {
25
+ filled: 'bg-mono100 text-mono400',
26
+ outline: 'bg-transparent text-mono400 border border-mono200',
27
+ ghost: 'bg-transparent text-mono400',
28
+ };
29
+ const sizeClasses = {
30
+ xSmall: 'input-2xs',
31
+ small: 'input-xs',
32
+ medium: 'input-sm',
33
+ large: 'input-md',
34
+ big: 'input-lg',
35
+ xLarge: 'input-xl',
36
+ };
37
+ const addonRightPaddingClasses = {
38
+ xSmall: 'pr-8',
39
+ small: 'pr-8',
40
+ medium: 'pr-8',
41
+ large: 'pr-10',
42
+ big: 'pr-11',
43
+ xLarge: 'pr-12',
44
+ };
45
+ export const iconSizes = {
46
+ xSmall: 10,
47
+ small: 12,
48
+ medium: 14,
49
+ large: 16,
50
+ big: 18,
51
+ xLarge: 20,
52
+ };
53
+ const LDInput = ({ variant, color = 'neutral', size, showPasswordToggle = false, block = false, type = 'text', disabled = false, className, style, rightAddon, ref, ...props }) => {
54
+ const [passwordVisible, setPasswordVisible] = useState(false);
55
+ const resolvedType = showPasswordToggle
56
+ ? passwordVisible
57
+ ? 'text'
58
+ : 'password'
59
+ : type;
60
+ const iconSize = iconSizes[size ?? 'medium'];
61
+ const passwordToggleAddon = showPasswordToggle ? (_jsx("button", { type: "button", "aria-label": passwordVisible ? '비밀번호 숨기기' : '비밀번호 표시', "aria-pressed": passwordVisible, onClick: () => setPasswordVisible(!passwordVisible), disabled: disabled, className: cn('text-neutral40 ld-transition', disabled ? 'cursor-not-allowed' : 'cursor-pointer hover:text-lb500'), children: _jsx(LucideIcon, { name: passwordVisible ? 'eye' : 'eyeOff', size: iconSize }) })) : null;
62
+ const resolvedRightAddon = rightAddon ?? passwordToggleAddon;
63
+ const { width, height, minWidth, maxWidth, minHeight, maxHeight, ...fieldStyle } = style ?? {};
64
+ const rootStyle = { width, height, minWidth, maxWidth, minHeight, maxHeight };
65
+ const fieldClassName = cn('w-full bold placeholder-mono400 ld-transition outline-none', variant &&
66
+ (disabled
67
+ ? disabledVariantClasses[variant]
68
+ : variantColorClasses[variant][color]), size && !height && sizeClasses[size], height && 'h-full', disabled && 'cursor-not-allowed', 'read-only:cursor-not-allowed', resolvedRightAddon && size && addonRightPaddingClasses[size], className);
69
+ return (_jsxs(InputBase.Root, { block: block, style: rootStyle, children: [_jsx(InputBase.Field, { ref: ref, type: resolvedType, disabled: disabled, className: fieldClassName, style: fieldStyle, ...props }), resolvedRightAddon && (_jsx(InputBase.Addon, { position: "right", className: "right-2.5 text-neutral40", children: resolvedRightAddon }))] }));
70
+ };
71
+ export default LDInput;
@@ -0,0 +1,82 @@
1
+ import type { ElementType, ReactNode } from 'react';
2
+ export interface INavTab {
3
+ label: string;
4
+ path: string;
5
+ icon?: ReactNode;
6
+ isNotScroll?: boolean;
7
+ }
8
+ export interface INavItem {
9
+ label: string;
10
+ tabs?: INavTab[];
11
+ noSlider?: boolean;
12
+ }
13
+ interface ProviderProps {
14
+ children: ReactNode;
15
+ isMobile: boolean;
16
+ items?: INavItem[];
17
+ pathname?: string;
18
+ defaultCollapsed?: boolean;
19
+ }
20
+ interface RootProps {
21
+ children: ReactNode;
22
+ className?: string;
23
+ }
24
+ interface TriggerProps {
25
+ className?: string;
26
+ }
27
+ interface HeaderProps {
28
+ name?: string;
29
+ email?: string;
30
+ profileImage?: string | null;
31
+ handleLogout?: () => void;
32
+ }
33
+ interface ContentProps {
34
+ children: ReactNode;
35
+ className?: string;
36
+ }
37
+ interface GroupProps {
38
+ children: ReactNode;
39
+ label?: string;
40
+ noSlider?: boolean;
41
+ }
42
+ interface MenuProps {
43
+ children: ReactNode;
44
+ label?: string;
45
+ noSlider?: boolean;
46
+ tabCount?: number;
47
+ }
48
+ interface MenuItemProps {
49
+ as?: ElementType;
50
+ href: string;
51
+ isActive?: boolean;
52
+ children: ReactNode;
53
+ icon?: ReactNode;
54
+ className?: string;
55
+ [key: string]: unknown;
56
+ }
57
+ interface MenuSubProps {
58
+ children: ReactNode;
59
+ className?: string;
60
+ }
61
+ interface MenuSubItemProps {
62
+ as?: ElementType;
63
+ href: string;
64
+ isActive?: boolean;
65
+ children: ReactNode;
66
+ className?: string;
67
+ [key: string]: unknown;
68
+ }
69
+ declare const LDLNBBase: {
70
+ Provider: ({ children, isMobile, items, pathname, defaultCollapsed, }: ProviderProps) => import("react/jsx-runtime").JSX.Element;
71
+ Root: ({ children, className }: RootProps) => import("react/jsx-runtime").JSX.Element;
72
+ Trigger: ({ className }: TriggerProps) => import("react/jsx-runtime").JSX.Element | null;
73
+ Header: ({ name, email, profileImage, handleLogout }: HeaderProps) => import("react/jsx-runtime").JSX.Element;
74
+ Content: ({ children, className }: ContentProps) => import("react/jsx-runtime").JSX.Element;
75
+ Group: ({ children, label, noSlider }: GroupProps) => import("react/jsx-runtime").JSX.Element;
76
+ Menu: ({ children, label, noSlider, tabCount }: MenuProps) => import("react/jsx-runtime").JSX.Element;
77
+ MenuItem: ({ as: Comp, href, isActive, children, icon, className, ...rest }: MenuItemProps) => import("react/jsx-runtime").JSX.Element;
78
+ MenuSub: ({ children, className }: MenuSubProps) => import("react/jsx-runtime").JSX.Element | null;
79
+ MenuSubItem: ({ as: Comp, href, isActive, children, className, ...rest }: MenuSubItemProps) => import("react/jsx-runtime").JSX.Element;
80
+ };
81
+ export default LDLNBBase;
82
+ //# sourceMappingURL=LDLNBBase.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LDLNBBase.d.ts","sourceRoot":"","sources":["../../../src/components/LDLNB/LDLNBBase.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAapD,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AA0BD,UAAU,aAAa;IACrB,QAAQ,EAAE,SAAS,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAyDD,UAAU,SAAS;IACjB,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA2BD,UAAU,YAAY;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA0BD,UAAU,WAAW;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;CAC3B;AAqCD,UAAU,YAAY;IACpB,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAkBD,UAAU,UAAU;IAClB,QAAQ,EAAE,SAAS,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAqCD,UAAU,SAAS;IACjB,QAAQ,EAAE,SAAS,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AA6BD,UAAU,aAAa;IACrB,EAAE,CAAC,EAAE,WAAW,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,SAAS,CAAC;IACpB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAiCD,UAAU,YAAY;IACpB,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAYD,UAAU,gBAAgB;IACxB,EAAE,CAAC,EAAE,WAAW,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AA2BD,QAAA,MAAM,SAAS;2EA/UZ,aAAa;oCAsDuB,SAAS;6BA6BhB,YAAY;0DA+BiB,WAAW;uCAwC9B,YAAY;2CAsBR,UAAU;oDA0CG,SAAS;iFA6CjE,aAAa;uCA4B0B,YAAY;8EA0BnD,gBAAgB;CA6BlB,CAAC;AAEF,eAAe,SAAS,CAAC"}
@@ -0,0 +1,108 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { createContext, useContext, useEffect, useState } from 'react';
4
+ import { ChevronDown, PanelLeftClose, PanelLeftOpen, LogOut, } from 'lucide-react';
5
+ import cn from '../../utils/cn.js';
6
+ import { isActivePath } from '../../utils/utils.js';
7
+ import LDAvatar from '../LDAvatar/LDAvatar.js';
8
+ const LNBContext = createContext(null);
9
+ const useLNBContext = () => {
10
+ const ctx = useContext(LNBContext);
11
+ if (!ctx)
12
+ throw new Error('LDLNBBase 서브컴포넌트는 LDLNBBase.Provider 내부에서 사용해야 합니다.');
13
+ return ctx;
14
+ };
15
+ const Provider = ({ children, isMobile, items = [], pathname = '', defaultCollapsed = false, }) => {
16
+ const [collapsed, setCollapsed] = useState(defaultCollapsed);
17
+ const [openGroups, setOpenGroups] = useState([]);
18
+ const toggleCollapsed = () => setCollapsed((prev) => !prev);
19
+ const toggleGroup = (label) => {
20
+ setOpenGroups((prev) => prev.includes(label) ? prev.filter((g) => g !== label) : [...prev, label]);
21
+ };
22
+ const isGroupOpen = (label) => openGroups.includes(label);
23
+ useEffect(() => {
24
+ if (!isMobile)
25
+ return;
26
+ if (pathname === '/') {
27
+ setOpenGroups([]);
28
+ return;
29
+ }
30
+ const matchedLabel = items.find((item) => item.tabs?.some((tab) => isActivePath(pathname, tab.path)))?.label;
31
+ if (matchedLabel && !openGroups.includes(matchedLabel)) {
32
+ setOpenGroups((prev) => [...prev, matchedLabel]);
33
+ }
34
+ // 라우트(pathname) 변경 시에만 그룹 펼침을 동기화하려는 의도이므로 다른 의존성은 제외함.
35
+ // eslint-disable-next-line react-hooks/exhaustive-deps
36
+ }, [pathname]);
37
+ return (_jsx(LNBContext, { value: {
38
+ isMobile,
39
+ collapsed,
40
+ toggleCollapsed,
41
+ openGroups,
42
+ toggleGroup,
43
+ isGroupOpen,
44
+ }, children: children }));
45
+ };
46
+ const Root = ({ children, className }) => {
47
+ const { collapsed } = useLNBContext();
48
+ return (_jsx("div", { className: cn('relative mobile:w-full ld-transition', collapsed ? 'w-[60px]' : 'w-[300px]', className), children: _jsx("div", { className: cn('w-full h-full bg-mono50 mobile:bg-white', 'h-[calc(100vh-64px)] mobile:h-auto mobile:overflow-hidden', 'overflow-y-auto p-sm flex flex-col gap-md mobile:py-0 scrollbar-hide scrollbar-hover'), children: children }) }));
49
+ };
50
+ const Trigger = ({ className }) => {
51
+ const { isMobile, collapsed, toggleCollapsed } = useLNBContext();
52
+ const Icon = collapsed ? PanelLeftOpen : PanelLeftClose;
53
+ if (isMobile)
54
+ return null;
55
+ return (_jsx("button", { type: "button", onClick: toggleCollapsed, className: cn('absolute -right-10 top-0 z-10', 'flex items-center justify-center w-10 h-10', 'text-neutral500', 'hover:text-mono900 ld-transition cursor-pointer', className), "aria-label": collapsed ? '사이드바 펼치기' : '사이드바 접기', children: _jsx(Icon, { size: 16 }) }));
56
+ };
57
+ const Header = ({ name, email, profileImage, handleLogout }) => {
58
+ const { collapsed } = useLNBContext();
59
+ return (_jsxs("div", { className: cn('w-full flex gap-sm items-center rounded-[10px] ld-transition overflow-hidden', collapsed
60
+ ? 'p-xs justify-center border-transparent'
61
+ : 'p-md mobile:p-sm border border-neutral100'), children: [_jsx(LDAvatar, { size: "md", src: profileImage }), !collapsed && (_jsxs(_Fragment, { children: [_jsxs("div", { className: "flex flex-col gap-xs flex-1 min-w-0", children: [_jsx("span", { className: "display16 bold truncate", children: name ?? '' }), _jsx("span", { className: "display14 text-neutral500 truncate", children: email ?? '' })] }), handleLogout && (_jsx(LogOut, { size: 12, className: "cursor-pointer flex-shrink-0", onClick: handleLogout }))] }))] }));
62
+ };
63
+ const Content = ({ children, className }) => (_jsxs(_Fragment, { children: [_jsx("div", { className: "w-full border-b border-neutral100" }), _jsx("div", { className: cn('flex flex-col gap-md mobile:overflow-y-auto mobile:h-[calc(62dvh-111px)]', className), children: children })] }));
64
+ const Group = ({ children, label, noSlider }) => {
65
+ const { isMobile, collapsed, toggleGroup, isGroupOpen } = useLNBContext();
66
+ const open = label ? isGroupOpen(label) : true;
67
+ return (_jsxs("div", { className: "flex flex-col gap-sm w-full items-start", children: [label && !collapsed && (_jsxs("div", { className: cn('w-full flex', isMobile && 'cursor-pointer justify-between'), onClick: () => !noSlider && isMobile && toggleGroup(label), children: [_jsx("span", { className: "display14 text-neutral500", children: label }), _jsx("div", { className: cn(isMobile &&
68
+ 'transition-transform duration-300 ease-out flex items-center justify-center w-5 h-5 flex-shrink-0', isMobile && open ? 'rotate-180' : 'rotate-0', !isMobile && 'hidden', noSlider && 'hidden'), children: _jsx(ChevronDown, { size: 14, className: "text-neutral500" }) })] })), children] }));
69
+ };
70
+ const Menu = ({ children, label, noSlider, tabCount = 0 }) => {
71
+ const { isMobile, isGroupOpen } = useLNBContext();
72
+ const open = label ? isGroupOpen(label) : true;
73
+ const visible = (label && open) || !label || noSlider;
74
+ return (_jsx("div", { className: cn('flex flex-col w-full gap-sm opacity-100', isMobile && 'overflow-hidden ld-transition', visible ? 'opacity-100' : isMobile && 'opacity-0'), style: {
75
+ height: isMobile
76
+ ? visible
77
+ ? `calc(40px * ${tabCount} + 10px * ${tabCount > 0 ? tabCount - 1 : 0})`
78
+ : '0'
79
+ : 'auto',
80
+ }, children: children }));
81
+ };
82
+ const MenuItem = ({ as: Comp = 'a', href, isActive, children, icon, className, ...rest }) => {
83
+ const { collapsed } = useLNBContext();
84
+ return (_jsxs(Comp, { href: href, className: cn('flex gap-sm w-full items-center p-sm display16 mobile:display14 bold mobile:medium', 'text-neutral500 cursor-pointer hover:bg-mono300 rounded-[5px] hover:text-mono900 ld-transition', collapsed && 'justify-center', isActive &&
85
+ 'bg-tintBlue text-blue400 hover:bg-tintBlue hover:text-blue400', className), ...rest, children: [icon && _jsx("span", { className: "flex-shrink-0", children: icon }), !collapsed && children] }));
86
+ };
87
+ const MenuSub = ({ children, className }) => {
88
+ const { collapsed } = useLNBContext();
89
+ if (collapsed)
90
+ return null;
91
+ return (_jsx("div", { className: cn('flex flex-col w-full gap-sm pl-sm', className), children: children }));
92
+ };
93
+ const MenuSubItem = ({ as: Comp = 'a', href, isActive, children, className, ...rest }) => (_jsx(Comp, { href: href, className: cn('flex gap-sm w-full items-center p-sm display14 medium', 'text-neutral500 cursor-pointer hover:bg-mono300 rounded-[5px] hover:text-mono900 ld-transition', isActive &&
94
+ 'bg-tintBlue text-blue400 hover:bg-tintBlue hover:text-blue400', className), ...rest, children: children }));
95
+ // ── Export ──
96
+ const LDLNBBase = {
97
+ Provider,
98
+ Root,
99
+ Trigger,
100
+ Header,
101
+ Content,
102
+ Group,
103
+ Menu,
104
+ MenuItem,
105
+ MenuSub,
106
+ MenuSubItem,
107
+ };
108
+ export default LDLNBBase;
@@ -0,0 +1,8 @@
1
+ interface LDLoadingDotsProps {
2
+ size?: LoadingDotsSize;
3
+ className?: string;
4
+ }
5
+ type LoadingDotsSize = '2xsmall' | 'xsmall' | 'small' | 'medium' | 'large' | 'xlarge';
6
+ declare const LDLoadingDots: ({ size, className }: LDLoadingDotsProps) => import("react/jsx-runtime").JSX.Element;
7
+ export default LDLoadingDots;
8
+ //# sourceMappingURL=LDLoadingDots.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LDLoadingDots.d.ts","sourceRoot":"","sources":["../../../src/components/LDLoadingDots/LDLoadingDots.tsx"],"names":[],"mappings":"AAEA,UAAU,kBAAkB;IAC1B,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,KAAK,eAAe,GAChB,SAAS,GACT,QAAQ,GACR,OAAO,GACP,QAAQ,GACR,OAAO,GACP,QAAQ,CAAC;AAEb,QAAA,MAAM,aAAa,GAAI,qBAA+B,kBAAkB,4CA4CvE,CAAC;AAEF,eAAe,aAAa,CAAC"}
@@ -0,0 +1,29 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import cn from '../../utils/cn.js';
3
+ const LDLoadingDots = ({ size = 'small', className }) => {
4
+ const sizeMap = {
5
+ '2xsmall': 2,
6
+ xsmall: 2,
7
+ small: 2,
8
+ medium: 2,
9
+ large: 3,
10
+ xlarge: 4,
11
+ };
12
+ return (_jsxs("div", { className: cn('flex items-center justify-center gap-1', className), style: { height: sizeMap[size] }, children: [_jsx("div", { className: "bg-current rounded-full animate-pulse", style: {
13
+ width: sizeMap[size],
14
+ height: sizeMap[size],
15
+ animationDelay: '0ms',
16
+ animationDuration: '1000ms',
17
+ } }), _jsx("div", { className: "bg-current rounded-full animate-pulse", style: {
18
+ width: sizeMap[size],
19
+ height: sizeMap[size],
20
+ animationDelay: '200ms',
21
+ animationDuration: '1000ms',
22
+ } }), _jsx("div", { className: "bg-current rounded-full animate-pulse", style: {
23
+ width: sizeMap[size],
24
+ height: sizeMap[size],
25
+ animationDelay: '400ms',
26
+ animationDuration: '1000ms',
27
+ } })] }));
28
+ };
29
+ export default LDLoadingDots;
@@ -0,0 +1,21 @@
1
+ import type { ComponentProps } from 'react';
2
+ import MenuBarBase from './MenuBarBase.js';
3
+ declare const LDMenuBar: {
4
+ Root: ({ className, ...props }: ComponentProps<typeof MenuBarBase.Root>) => import("react/jsx-runtime").JSX.Element;
5
+ Logo: ({ className, ...props }: ComponentProps<typeof MenuBarBase.Logo>) => import("react/jsx-runtime").JSX.Element;
6
+ Nav: ({ className, ...props }: ComponentProps<typeof MenuBarBase.Nav>) => import("react/jsx-runtime").JSX.Element;
7
+ Item: ({ className, ...props }: ComponentProps<typeof MenuBarBase.Item>) => import("react/jsx-runtime").JSX.Element;
8
+ Trigger: ({ className, ...props }: ComponentProps<typeof MenuBarBase.Trigger>) => import("react/jsx-runtime").JSX.Element;
9
+ Content: {
10
+ ({ className, ...props }: ComponentProps<typeof MenuBarBase.Content>): import("react/jsx-runtime").JSX.Element;
11
+ displayName: string;
12
+ };
13
+ MegaContent: {
14
+ ({ className, ...props }: ComponentProps<typeof MenuBarBase.Content>): import("react/jsx-runtime").JSX.Element;
15
+ displayName: string;
16
+ };
17
+ Actions: ({ className, ...props }: ComponentProps<typeof MenuBarBase.Actions>) => import("react/jsx-runtime").JSX.Element;
18
+ Separator: ({ className, }: ComponentProps<typeof MenuBarBase.Separator>) => import("react/jsx-runtime").JSX.Element;
19
+ };
20
+ export default LDMenuBar;
21
+ //# sourceMappingURL=LDMenuBar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LDMenuBar.d.ts","sourceRoot":"","sources":["../../../src/components/LDMenuBar/LDMenuBar.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAE5C,OAAO,WAAW,MAAM,eAAe,CAAC;AAkHxC,QAAA,MAAM,SAAS;oCA1GZ,cAAc,CAAC,OAAO,WAAW,CAAC,IAAI,CAAC;oCAcvC,cAAc,CAAC,OAAO,WAAW,CAAC,IAAI,CAAC;mCAUvC,cAAc,CAAC,OAAO,WAAW,CAAC,GAAG,CAAC;oCAUtC,cAAc,CAAC,OAAO,WAAW,CAAC,IAAI,CAAC;uCAOvC,cAAc,CAAC,OAAO,WAAW,CAAC,OAAO,CAAC;;kCAgB1C,cAAc,CAAC,OAAO,WAAW,CAAC,OAAO,CAAC;;;;kCAgB1C,cAAc,CAAC,OAAO,WAAW,CAAC,OAAO,CAAC;;;uCAoB1C,cAAc,CAAC,OAAO,WAAW,CAAC,OAAO,CAAC;gCAS1C,cAAc,CAAC,OAAO,WAAW,CAAC,SAAS,CAAC;CAc9C,CAAC;AAEF,eAAe,SAAS,CAAC"}
@@ -0,0 +1,33 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import cn from '../../utils/cn.js';
4
+ import MenuBarBase from './MenuBarBase.js';
5
+ // 스타일 래퍼: Base 골격에 디자인 토큰 클래스를 입혀 재노출.
6
+ // className을 주면 cn으로 머지되어 소비측 오버라이드 우선.
7
+ const Root = ({ className, ...props }) => (_jsx(MenuBarBase.Root, { className: cn('relative flex items-center justify-between w-full h-[64px] min-h-[64px]', 'px-md gap-10 bg-white border-b border-mono100 sticky top-0 z-50', className), ...props }));
8
+ const Logo = ({ className, ...props }) => (_jsx(MenuBarBase.Logo, { className: cn('flex items-center shrink-0', className), ...props }));
9
+ const Nav = ({ className, ...props }) => (_jsx(MenuBarBase.Nav, { className: cn('flex flex-1 items-center justify-start gap-xs', className), ...props }));
10
+ const Item = ({ className, ...props }) => (_jsx(MenuBarBase.Item, { className: className, ...props }));
11
+ const Trigger = ({ className, ...props }) => (_jsx(MenuBarBase.Trigger, { className: cn('flex items-center gap-xs px-sm py-xs rounded-[5px] cursor-pointer', 'display16 bold text-mono700 hover:bg-mono100 hover:text-mono900 ld-transition', 'aria-expanded:bg-tintBlue aria-expanded:text-blue400', className), ...props }));
12
+ // item 모드: 항목 바로 아래 작은 드롭다운
13
+ const Content = ({ className, ...props }) => (_jsx(MenuBarBase.Content, { className: cn('absolute top-full left-0 mt-xs min-w-[180px] z-50', 'flex flex-col gap-xs p-xs rounded-[8px] bg-white border border-mono100 shadow-lg', className), ...props }));
14
+ // mega 모드: 헤더 전체 폭 패널 + 뒤쪽 딤(클릭 시 닫기)
15
+ // fixed로 부모 li(relative)를 벗어나 뷰포트(=헤더) 전체 폭을 차지. top-16 = 헤더 높이 64px.
16
+ const MegaContent = ({ className, ...props }) => (_jsx(MenuBarBase.Content, { backdrop: true, backdropClassName: "fixed left-0 right-0 top-16 bottom-0 z-40 bg-black/40", className: cn('fixed left-0 right-0 top-16 z-50', 'p-lg bg-white border-b border-mono100 shadow-lg', className), ...props }));
17
+ // Item의 드롭다운 자동 판정이 래퍼를 통과하도록 Base와 동일한 displayName 부여
18
+ Content.displayName = MenuBarBase.Content.displayName;
19
+ MegaContent.displayName = MenuBarBase.Content.displayName;
20
+ const Actions = ({ className, ...props }) => (_jsx(MenuBarBase.Actions, { className: cn('flex items-center gap-sm shrink-0', className), ...props }));
21
+ const Separator = ({ className, }) => (_jsx(MenuBarBase.Separator, { className: cn('w-px h-5 bg-mono200', className) }));
22
+ const LDMenuBar = {
23
+ Root,
24
+ Logo,
25
+ Nav,
26
+ Item,
27
+ Trigger,
28
+ Content,
29
+ MegaContent,
30
+ Actions,
31
+ Separator,
32
+ };
33
+ export default LDMenuBar;
@@ -0,0 +1,43 @@
1
+ import type { ElementType, ReactNode } from 'react';
2
+ interface RootProps {
3
+ children: ReactNode;
4
+ className?: string;
5
+ trigger?: 'hover' | 'click';
6
+ }
7
+ interface SlotProps {
8
+ children?: ReactNode;
9
+ className?: string;
10
+ }
11
+ interface ItemProps {
12
+ value: string;
13
+ children: ReactNode;
14
+ className?: string;
15
+ }
16
+ interface TriggerProps {
17
+ as?: ElementType;
18
+ children: ReactNode;
19
+ className?: string;
20
+ [key: string]: unknown;
21
+ }
22
+ interface ContentProps extends SlotProps {
23
+ /** 뒤쪽 딤 + 클릭 시 닫기 */
24
+ backdrop?: boolean;
25
+ backdropClassName?: string;
26
+ }
27
+ declare const MenuBarBase: {
28
+ Root: ({ children, className, trigger }: RootProps) => import("react/jsx-runtime").JSX.Element;
29
+ Logo: ({ children, className }: SlotProps) => import("react/jsx-runtime").JSX.Element;
30
+ Nav: ({ children, className }: SlotProps) => import("react/jsx-runtime").JSX.Element;
31
+ Item: ({ value, children, className }: ItemProps) => import("react/jsx-runtime").JSX.Element;
32
+ Trigger: ({ as: Comp, children, className, ...rest }: TriggerProps) => import("react/jsx-runtime").JSX.Element;
33
+ Content: {
34
+ ({ children, className, backdrop, backdropClassName, }: ContentProps): import("react/jsx-runtime").JSX.Element | null;
35
+ displayName: string;
36
+ };
37
+ Actions: ({ children, className }: SlotProps) => import("react/jsx-runtime").JSX.Element;
38
+ Separator: ({ className }: {
39
+ className?: string;
40
+ }) => import("react/jsx-runtime").JSX.Element;
41
+ };
42
+ export default MenuBarBase;
43
+ //# sourceMappingURL=MenuBarBase.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MenuBarBase.d.ts","sourceRoot":"","sources":["../../../src/components/LDMenuBar/MenuBarBase.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AA0CpD,UAAU,SAAS;IACjB,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;CAC7B;AAqBD,UAAU,SAAS;IACjB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAmBD,UAAU,SAAS;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA0BD,UAAU,YAAY;IACpB,EAAE,CAAC,EAAE,WAAW,CAAC;IACjB,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAuCD,UAAU,YAAa,SAAQ,SAAS;IACtC,qBAAqB;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AA0BD,QAAA,MAAM,WAAW;6CAjJyC,SAAS;oCAwB5B,SAAS;mCAIV,SAAS;2CAmBD,SAAS;0DAoCpD,YAAY;;gEA2CZ,YAAY;;;uCA9F2B,SAAS;+BAIjB;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE;CAsHvD,CAAC;AAEF,eAAe,WAAW,CAAC"}
@@ -0,0 +1,69 @@
1
+ 'use client';
2
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Children, createContext, isValidElement, useContext, useState, } from 'react';
4
+ import cn from '../../utils/cn.js';
5
+ const CONTENT_NAME = 'MenuBarContent';
6
+ const MenuBarContext = createContext(null);
7
+ const useMenuBarContext = () => {
8
+ const ctx = useContext(MenuBarContext);
9
+ if (!ctx)
10
+ throw new Error('MenuBarBase 서브컴포넌트는 MenuBarBase.Root 내부에서 사용해야 합니다.');
11
+ return ctx;
12
+ };
13
+ const ItemContext = createContext(null);
14
+ const useItemContext = () => {
15
+ const ctx = useContext(ItemContext);
16
+ if (!ctx)
17
+ throw new Error('MenuBarBase.Trigger / Content는 MenuBarBase.Item 내부에서 사용해야 합니다.');
18
+ return ctx;
19
+ };
20
+ const Root = ({ children, className, trigger = 'hover' }) => {
21
+ const [openValue, setOpenValue] = useState(null);
22
+ const isOpen = (v) => openValue === v;
23
+ return (_jsx(MenuBarContext, { value: { openValue, setOpenValue, isOpen, trigger }, children: _jsx("header", { className: className, onMouseLeave: trigger === 'hover' ? () => setOpenValue(null) : undefined, children: children }) }));
24
+ };
25
+ const Logo = ({ children, className }) => (_jsx("div", { className: className, children: children }));
26
+ const Nav = ({ children, className }) => (_jsx("ul", { className: className, children: children }));
27
+ const Actions = ({ children, className }) => (_jsx("div", { className: className, children: children }));
28
+ const Separator = ({ className }) => (_jsx("span", { "aria-hidden": true, className: className }));
29
+ const Item = ({ value, children, className }) => {
30
+ const { trigger, setOpenValue } = useMenuBarContext();
31
+ // Content 존재 여부로 드롭다운 항목인지 자동 판정 (스타일 래퍼도 같은 displayName을 가짐)
32
+ const hasContent = Children.toArray(children).some((c) => isValidElement(c) &&
33
+ c.type?.displayName === CONTENT_NAME);
34
+ const hoverProps = trigger === 'hover' && hasContent
35
+ ? { onMouseEnter: () => setOpenValue(value) }
36
+ : {};
37
+ return (_jsx(ItemContext, { value: { value, hasContent }, children: _jsx("li", { className: cn('relative', className), ...hoverProps, children: children }) }));
38
+ };
39
+ const Trigger = ({ as: Comp = 'button', children, className, ...rest }) => {
40
+ const { trigger, setOpenValue, isOpen } = useMenuBarContext();
41
+ const { value, hasContent } = useItemContext();
42
+ // 드롭다운 없는 항목 → 순수 링크/버튼 (토글 안 함)
43
+ if (!hasContent) {
44
+ return (_jsx(Comp, { className: className, ...rest, children: children }));
45
+ }
46
+ const handleClick = trigger === 'click'
47
+ ? () => setOpenValue(isOpen(value) ? null : value)
48
+ : undefined;
49
+ return (_jsx(Comp, { type: Comp === 'button' ? 'button' : undefined, "aria-expanded": isOpen(value), onClick: handleClick, className: className, ...rest, children: children }));
50
+ };
51
+ const Content = ({ children, className, backdrop, backdropClassName, }) => {
52
+ const { isOpen, setOpenValue } = useMenuBarContext();
53
+ const { value } = useItemContext();
54
+ if (!isOpen(value))
55
+ return null;
56
+ return (_jsxs(_Fragment, { children: [backdrop && (_jsx("div", { "aria-hidden": true, onClick: () => setOpenValue(null), className: backdropClassName })), _jsx("div", { className: className, children: children })] }));
57
+ };
58
+ Content.displayName = CONTENT_NAME;
59
+ const MenuBarBase = {
60
+ Root,
61
+ Logo,
62
+ Nav,
63
+ Item,
64
+ Trigger,
65
+ Content,
66
+ Actions,
67
+ Separator,
68
+ };
69
+ export default MenuBarBase;
@@ -0,0 +1,51 @@
1
+ import { type ReactNode } from 'react';
2
+ export type ModalSize = 'small' | 'medium' | 'large' | 'xlarge';
3
+ export interface ModalButtons {
4
+ direction?: 'row' | 'column';
5
+ list?: ModalButton[];
6
+ }
7
+ export interface ModalButton<T = unknown> {
8
+ /** 버튼 텍스트 */
9
+ label: string;
10
+ /** 버튼 식별 값 (onButtonClick에 전달) */
11
+ value: T;
12
+ /** 버튼 스타일 유형 */
13
+ variant?: 'solid' | 'outline' | 'ghost';
14
+ /** 버튼 색상 테마 */
15
+ color?: 'neutral' | 'point' | 'danger';
16
+ /** 클릭 핸들러 (false 반환 시 모달 닫힘 방지) */
17
+ onClick?: () => void | boolean | Promise<void | boolean>;
18
+ }
19
+ export interface LDModalProps {
20
+ /** 모달 열림 상태 (제어 컴포넌트) */
21
+ open?: boolean;
22
+ /** 초기 열림 상태 (비제어 컴포넌트) */
23
+ defaultOpen?: boolean;
24
+ /** 열림 상태 변경 시 호출되는 콜백 */
25
+ onOpenChange?: (open: boolean) => void;
26
+ /** 서브 타이틀 (title 위에 표시) */
27
+ name?: string;
28
+ /** 모달 제목 */
29
+ title?: string;
30
+ /** 모달 설명 텍스트 */
31
+ description?: string;
32
+ /** 본문 콘텐츠 */
33
+ children?: ReactNode;
34
+ /** 모달 너비 프리셋 */
35
+ size?: ModalSize;
36
+ /** 너비 직접 지정 (size보다 우선) */
37
+ icon?: 'success' | 'fail';
38
+ /** 하단 버튼 목록 */
39
+ buttons?: ModalButtons;
40
+ /** 스크롤 동작 */
41
+ scrollBehavior?: 'inside' | 'outside';
42
+ /** 추가 CSS 클래스 (모달 패널에 적용) */
43
+ className?: string;
44
+ /** 인라인 스타일 (모달 패널에 적용) */
45
+ style?: React.CSSProperties;
46
+ /** 버튼 클릭 시 해당 버튼의 value를 전달하는 콜백 */
47
+ onButtonClick?: (value: unknown) => void;
48
+ }
49
+ declare const LDModal: ({ open, defaultOpen, onOpenChange, name, title, description, children, size, icon, buttons, scrollBehavior, className, style, onButtonClick, }: LDModalProps) => import("react/jsx-runtime").JSX.Element;
50
+ export default LDModal;
51
+ //# sourceMappingURL=LDModal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LDModal.d.ts","sourceRoot":"","sources":["../../../src/components/LDModal/LDModal.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAU,MAAM,OAAO,CAAC;AAO/C,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEhE,MAAM,WAAW,YAAY;IAC3B,SAAS,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC;IAC7B,IAAI,CAAC,EAAE,WAAW,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,OAAO;IACtC,aAAa;IACb,KAAK,EAAE,MAAM,CAAC;IACd,kCAAkC;IAClC,KAAK,EAAE,CAAC,CAAC;IACT,gBAAgB;IAChB,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC;IACxC,eAAe;IACf,KAAK,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;IACvC,mCAAmC;IACnC,OAAO,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,GAAG,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC;CAC1D;AAED,MAAM,WAAW,YAAY;IAC3B,yBAAyB;IACzB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,0BAA0B;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,yBAAyB;IACzB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,2BAA2B;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa;IACb,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,gBAAgB;IAChB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,2BAA2B;IAC3B,IAAI,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IAC1B,eAAe;IACf,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,aAAa;IACb,cAAc,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IACtC,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0BAA0B;IAC1B,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,oCAAoC;IACpC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CAC1C;AA6CD,QAAA,MAAM,OAAO,GAAI,gJAed,YAAY,4CA0Jd,CAAC;AAEF,eAAe,OAAO,CAAC"}