@loword/loword-design-system 0.0.7 → 0.0.9

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 (126) hide show
  1. package/dist/components/Icon/LucideIcon.d.ts +2 -1
  2. package/dist/components/Icon/LucideIcon.d.ts.map +1 -1
  3. package/dist/components/Icon/LucideIcon.js +2 -2
  4. package/dist/components/LDAutoComplete/AutoCompleteBase.js +1 -1
  5. package/dist/components/LDBreadCrumb/LDBreadCrumb.js +7 -7
  6. package/dist/components/LDButton/LDButton.d.ts +1 -0
  7. package/dist/components/LDButton/LDButton.d.ts.map +1 -1
  8. package/dist/components/LDButton/LDButton.js +3 -3
  9. package/dist/components/LDCarousel/CarouselBase.d.ts +6 -2
  10. package/dist/components/LDCarousel/CarouselBase.d.ts.map +1 -1
  11. package/dist/components/LDCarousel/CarouselBase.js +11 -5
  12. package/dist/components/LDCarousel/LDCarousel.d.ts +9 -2
  13. package/dist/components/LDCarousel/LDCarousel.d.ts.map +1 -1
  14. package/dist/components/LDCarousel/LDCarousel.js +3 -2
  15. package/dist/components/LDCheckbox/FormCheckbox.js +2 -2
  16. package/dist/components/LDCheckbox/FormCheckboxGroup.js +2 -2
  17. package/dist/components/LDCheckbox/LDCheckbox.d.ts.map +1 -1
  18. package/dist/components/LDCheckbox/LDCheckbox.js +7 -1
  19. package/dist/components/LDDatePicker/FormDatePicker.js +2 -2
  20. package/dist/components/LDDatePicker/LDDatePicker.d.ts.map +1 -1
  21. package/dist/components/LDDatePicker/LDDatePicker.js +1 -3
  22. package/dist/components/LDDateRangePicker/FormDateRangePicker.js +2 -2
  23. package/dist/components/LDDateRangePicker/LDDateRangePicker.js +8 -8
  24. package/dist/components/LDFileUpload/FileUploadBase.d.ts +6 -3
  25. package/dist/components/LDFileUpload/FileUploadBase.d.ts.map +1 -1
  26. package/dist/components/LDFileUpload/FileUploadBase.js +28 -11
  27. package/dist/components/LDFileUpload/LDFileUpload.d.ts +2 -0
  28. package/dist/components/LDFileUpload/LDFileUpload.d.ts.map +1 -1
  29. package/dist/components/LDFileUpload/LDFileUpload.js +1 -1
  30. package/dist/components/LDFileUpload/LDFileUploadList.d.ts +2 -0
  31. package/dist/components/LDFileUpload/LDFileUploadList.d.ts.map +1 -1
  32. package/dist/components/LDFileUpload/LDFileUploadList.js +1 -1
  33. package/dist/components/LDFileUpload/LDImageUpload.d.ts +2 -0
  34. package/dist/components/LDFileUpload/LDImageUpload.d.ts.map +1 -1
  35. package/dist/components/LDFileUpload/LDImageUpload.js +1 -1
  36. package/dist/components/LDFileUpload/LDImageUploadList.d.ts +2 -0
  37. package/dist/components/LDFileUpload/LDImageUploadList.d.ts.map +1 -1
  38. package/dist/components/LDFileUpload/LDImageUploadList.js +1 -1
  39. package/dist/components/LDForm/LDForm.d.ts +21 -0
  40. package/dist/components/LDForm/LDForm.d.ts.map +1 -0
  41. package/dist/components/{Form/Form.js → LDForm/LDForm.js} +3 -3
  42. package/dist/components/LDForm/LDFormErrorMessage.d.ts +9 -0
  43. package/dist/components/LDForm/LDFormErrorMessage.d.ts.map +1 -0
  44. package/dist/components/LDForm/LDFormErrorMessage.js +17 -0
  45. package/dist/components/{Form/FormField.d.ts → LDForm/LDFormField.d.ts} +6 -6
  46. package/dist/components/LDForm/LDFormField.d.ts.map +1 -0
  47. package/dist/components/{Form/FormField.js → LDForm/LDFormField.js} +2 -2
  48. package/dist/components/LDInput/LDFormInput.d.ts +15 -0
  49. package/dist/components/LDInput/LDFormInput.d.ts.map +1 -0
  50. package/dist/components/LDInput/{FormInput.js → LDFormInput.js} +12 -7
  51. package/dist/components/LDInput/LDInput.d.ts.map +1 -1
  52. package/dist/components/LDInput/LDInput.js +21 -13
  53. package/dist/components/LDPagination/PaginationBase.d.ts.map +1 -1
  54. package/dist/components/LDPagination/PaginationBase.js +7 -7
  55. package/dist/components/LDPopover/LDPopover.js +3 -3
  56. package/dist/components/LDPopover/PopoverBase.js +1 -1
  57. package/dist/components/LDRadio/FormRadioGroup.js +2 -2
  58. package/dist/components/LDRadio/LDRadio.d.ts.map +1 -1
  59. package/dist/components/LDRadio/LDRadio.js +3 -5
  60. package/dist/components/LDRadio/RadioBase.d.ts.map +1 -1
  61. package/dist/components/LDRadio/RadioBase.js +1 -3
  62. package/dist/components/LDSelect/FormMultiSelect.js +2 -2
  63. package/dist/components/LDSelect/FormSelect.js +2 -2
  64. package/dist/components/LDSelect/LDMultiSelect.js +3 -3
  65. package/dist/components/LDSelect/LDSelect.js +1 -1
  66. package/dist/components/LDTable/LDCollapsibleTanstackTable.d.ts +26 -0
  67. package/dist/components/LDTable/LDCollapsibleTanstackTable.d.ts.map +1 -0
  68. package/dist/components/LDTable/LDCollapsibleTanstackTable.js +38 -0
  69. package/dist/components/LDTable/LDTable.d.ts +5 -1
  70. package/dist/components/LDTable/LDTable.d.ts.map +1 -1
  71. package/dist/components/LDTable/LDTable.js +13 -17
  72. package/dist/components/LDTable/LDTanstackTable.d.ts +15 -13
  73. package/dist/components/LDTable/LDTanstackTable.d.ts.map +1 -1
  74. package/dist/components/LDTable/LDTanstackTable.js +21 -23
  75. package/dist/components/LDTable/TableField.d.ts +17 -5
  76. package/dist/components/LDTable/TableField.d.ts.map +1 -1
  77. package/dist/components/LDTable/TableField.js +16 -6
  78. package/dist/components/LDTeamHistory/LDTeamHistory.d.ts +12 -0
  79. package/dist/components/LDTeamHistory/LDTeamHistory.d.ts.map +1 -0
  80. package/dist/components/LDTeamHistory/LDTeamHistory.js +14 -0
  81. package/dist/components/{LDAnchor/AnchorBase.d.ts → LDTeamHistory/TeamHistoryBase.d.ts} +12 -6
  82. package/dist/components/LDTeamHistory/TeamHistoryBase.d.ts.map +1 -0
  83. package/dist/components/LDTeamHistory/TeamHistoryBase.js +108 -0
  84. package/dist/components/LDTextarea/FormTextarea.d.ts +14 -0
  85. package/dist/components/LDTextarea/FormTextarea.d.ts.map +1 -0
  86. package/dist/components/LDTextarea/FormTextarea.js +10 -0
  87. package/dist/components/LDTextarea/LDTextarea.d.ts +26 -0
  88. package/dist/components/LDTextarea/LDTextarea.d.ts.map +1 -0
  89. package/dist/components/LDTextarea/LDTextarea.js +163 -0
  90. package/dist/components/LDTimePicker/FormTimePicker.js +2 -2
  91. package/dist/components/LDTimePicker/LDTimePicker.js +4 -4
  92. package/dist/components/LDToggleButton/FormToggleButton.js +2 -2
  93. package/dist/components/LDTooltip/TooltipBase.js +1 -1
  94. package/dist/index.css +914 -684
  95. package/dist/index.d.ts +8 -5
  96. package/dist/index.d.ts.map +1 -1
  97. package/dist/index.js +10 -6
  98. package/dist/utils/renderIcon.d.ts +1 -1
  99. package/package.json +23 -21
  100. package/src/styles/carousel.css +54 -7
  101. package/src/styles/components/auto-complete.css +66 -64
  102. package/src/styles/components/badge.css +29 -27
  103. package/src/styles/components/bread-crumb.css +49 -17
  104. package/src/styles/components/button.css +146 -144
  105. package/src/styles/components/icon.css +25 -23
  106. package/src/styles/components/index.css +1 -0
  107. package/src/styles/components/input.css +43 -41
  108. package/src/styles/components/modal.css +14 -12
  109. package/src/styles/components/shared.css +2 -2
  110. package/src/styles/components/spinner.css +25 -23
  111. package/src/styles/components/team-history.css +10 -0
  112. package/src/styles/focus.css +1 -1
  113. package/src/styles/slider.css +58 -54
  114. package/dist/components/Form/Form.d.ts +0 -21
  115. package/dist/components/Form/Form.d.ts.map +0 -1
  116. package/dist/components/Form/FormErrorMessage.d.ts +0 -9
  117. package/dist/components/Form/FormErrorMessage.d.ts.map +0 -1
  118. package/dist/components/Form/FormErrorMessage.js +0 -6
  119. package/dist/components/Form/FormField.d.ts.map +0 -1
  120. package/dist/components/LDAnchor/AnchorBase.d.ts.map +0 -1
  121. package/dist/components/LDAnchor/AnchorBase.js +0 -69
  122. package/dist/components/LDAnchor/LDAnchor.d.ts +0 -10
  123. package/dist/components/LDAnchor/LDAnchor.d.ts.map +0 -1
  124. package/dist/components/LDAnchor/LDAnchor.js +0 -14
  125. package/dist/components/LDInput/FormInput.d.ts +0 -15
  126. package/dist/components/LDInput/FormInput.d.ts.map +0 -1
@@ -16,15 +16,13 @@ const labelSizeClasses = {
16
16
  // ── Inner: pill 타입 ──
17
17
  const PillInner = ({ label, ref, ...props }) => {
18
18
  const { checked } = useRadioContext();
19
- return (_jsxs(_Fragment, { children: [_jsx(RadioBase.HiddenInput, { ref: ref, ...props }), _jsxs("div", { className: "relative flex items-center", children: [_jsx(RadioBase.Indicator, { icon: "check", iconSize: 16, className: "absolute left-0", iconClassName: cn('shrink-0 transition-all duration-200 ease-out', checked ? 'opacity-100' : 'opacity-0') }), label && (_jsx(RadioBase.Label, { className: cn('transition-all ld-transition text-nowrap', checked ? 'pl-5' : 'pl-sm pr-sm'), children: label }))] })] }));
19
+ return (_jsxs(_Fragment, { children: [_jsx(RadioBase.HiddenInput, { ref: ref, ...props }), _jsxs("div", { className: "relative flex items-center", children: [_jsx(RadioBase.Indicator, { icon: "check", iconSize: 16, className: "absolute left-0", iconClassName: cn('shrink-0 ld-transition', checked ? 'opacity-100' : 'opacity-0') }), label && (_jsx(RadioBase.Label, { className: cn('ld-transition text-nowrap', checked ? 'pl-5' : 'pl-sm pr-sm'), children: label }))] })] }));
20
20
  };
21
21
  // ── Inner: default 타입 ──
22
22
  const DefaultInner = ({ size, label, ref, ...props }) => {
23
23
  const { checked, disabled } = useRadioContext();
24
- return (_jsxs(_Fragment, { children: [_jsx(RadioBase.HiddenInput, { ref: ref, ...props }), _jsx(RadioBase.Indicator, { icon: "check", iconSize: checkIconSizes[size], className: cn('flex items-center justify-center rounded-full ld-transition outline outline-transparent shrink-0', !disabled &&
25
- (checked
26
- ? 'outline-lb500 bg-lb500'
27
- : 'bg-white outline-neutral300 hover:outline-lb500'), disabled && 'outline-neutral300 bg-neutral300', radioSizeClasses[size]), iconClassName: cn('shrink-0 ld-transition', checked ? (disabled ? 'text-neutral500' : 'text-white') : 'opacity-0') }), label && (_jsx(RadioBase.Label, { className: "text-neutral500", children: label }))] }));
24
+ return (_jsxs(_Fragment, { children: [_jsx(RadioBase.HiddenInput, { ref: ref, ...props }), _jsx(RadioBase.Indicator, { icon: "check", iconSize: checkIconSizes[size], className: cn('flex items-center justify-center rounded-full ld-transition border-2 border-transparent shrink-0', !disabled &&
25
+ (checked ? 'border-lb500 bg-lb500' : 'bg-white border-neutral100'), disabled && 'border-neutral200 bg-mono100', radioSizeClasses[size]), iconClassName: cn('shrink-0 ld-transition', checked ? (disabled ? 'text-neutral500' : 'text-white') : 'opacity-0') }), label && (_jsx(RadioBase.Label, { className: "text-neutral500", children: label }))] }));
28
26
  };
29
27
  const LDRadio = ({ checked, defaultChecked, onCheckedChange, size = 'sm', type = 'default', label, disabled = false, className, style, ref, ...props }) => {
30
28
  if (type === 'pill') {
@@ -1 +1 @@
1
- {"version":3,"file":"RadioBase.d.ts","sourceRoot":"","sources":["../../../src/components/LDRadio/RadioBase.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,SAAS,EACd,KAAK,GAAG,EAIT,MAAM,OAAO,CAAC;AACf,OAAmB,EAAE,KAAK,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAI/D,UAAU,gBAAgB;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,eAAe,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC5C,QAAQ,EAAE,OAAO,CAAC;CACnB;AAID,eAAO,MAAM,eAAe,wBAK3B,CAAC;AAGF,UAAU,SAAS;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC7C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,OAAO,EAAE,OAAO,KAAK,MAAM,CAAC,CAAC;IACpD,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AA4CD,UAAU,gBAAiB,SAAQ,IAAI,CACrC,mBAAmB,CAAC,gBAAgB,CAAC,EACrC,MAAM,GAAG,SAAS,GAAG,UAAU,CAChC;IACC,GAAG,CAAC,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC;CAC7B;AAsBD,UAAU,cAAc;IACtB,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAgBD,UAAU,UAAU;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAMD,eAAO,MAAM,SAAS;gGA3FnB,SAAS;+CAyCsC,gBAAgB;+DAgC/D,cAAc;qCAcuB,UAAU;CASjD,CAAC;AAEF,eAAe,SAAS,CAAC"}
1
+ {"version":3,"file":"RadioBase.d.ts","sourceRoot":"","sources":["../../../src/components/LDRadio/RadioBase.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,SAAS,EACd,KAAK,GAAG,EAIT,MAAM,OAAO,CAAC;AACf,OAAmB,EAAE,KAAK,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAI/D,UAAU,gBAAgB;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,eAAe,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC5C,QAAQ,EAAE,OAAO,CAAC;CACnB;AAID,eAAO,MAAM,eAAe,wBAK3B,CAAC;AAGF,UAAU,SAAS;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC7C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,OAAO,EAAE,OAAO,KAAK,MAAM,CAAC,CAAC;IACpD,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AA0CD,UAAU,gBAAiB,SAAQ,IAAI,CACrC,mBAAmB,CAAC,gBAAgB,CAAC,EACrC,MAAM,GAAG,SAAS,GAAG,UAAU,CAChC;IACC,GAAG,CAAC,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC;CAC7B;AAsBD,UAAU,cAAc;IACtB,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAgBD,UAAU,UAAU;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAMD,eAAO,MAAM,SAAS;gGAzFnB,SAAS;+CAuCsC,gBAAgB;+DAgC/D,cAAc;qCAcuB,UAAU;CASjD,CAAC;AAEF,eAAe,SAAS,CAAC"}
@@ -19,9 +19,7 @@ const Root = ({ checked, defaultChecked = false, onCheckedChange, disabled = fal
19
19
  onCheckedChange?.(val);
20
20
  };
21
21
  const resolvedClassName = typeof className === 'function' ? className(resolved) : className;
22
- return (_jsx(RadioContext, { value: { checked: resolved, onCheckedChange: handleChange, disabled }, children: _jsx("label", { style: style, className: cn('flex flex-row w-fit gap-2.5 shrink-0', disabled
23
- ? 'cursor-not-allowed pointer-events-none'
24
- : 'cursor-pointer', resolvedClassName), children: children }) }));
22
+ return (_jsx(RadioContext, { value: { checked: resolved, onCheckedChange: handleChange, disabled }, children: _jsx("label", { style: style, className: cn('flex flex-row w-fit gap-2.5 shrink-0', disabled ? 'cursor-not-allowed' : 'cursor-pointer', resolvedClassName), children: children }) }));
25
23
  };
26
24
  const HiddenInput = ({ ref, onChange, ...props }) => {
27
25
  const { checked, onCheckedChange, disabled } = useRadioContext();
@@ -1,8 +1,8 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import LDMultiSelect from './LDMultiSelect.js';
4
- import FormField from '../Form/FormField.js';
5
- import FormErrorMessage from '../Form/FormErrorMessage.js';
4
+ import FormField from '../LDForm/LDFormField.js';
5
+ import FormErrorMessage from '../LDForm/LDFormErrorMessage.js';
6
6
  import cn from '../../utils/cn.js';
7
7
  const FormMultiSelect = ({ name, options, variant = 'filled', size = 'sm', block = false, disabled = false, customErrorMessage = '', isHiddenErrorMessage = false, errorClassName, ...props }) => {
8
8
  return (_jsx(FormField, { name: name, options: options, customErrorMessage: customErrorMessage, disabled: disabled, children: ({ field, fieldState }) => (_jsxs("div", { className: cn('relative', block && 'flex flex-1'), children: [_jsx(LDMultiSelect, { ...props, name: name, value: Array.isArray(field.value)
@@ -1,8 +1,8 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import LDSelect from './LDSelect.js';
4
- import FormField from '../Form/FormField.js';
5
- import FormErrorMessage from '../Form/FormErrorMessage.js';
4
+ import FormField from '../LDForm/LDFormField.js';
5
+ import FormErrorMessage from '../LDForm/LDFormErrorMessage.js';
6
6
  import cn from '../../utils/cn.js';
7
7
  const FormSelect = ({ name, options, variant = 'filled', size = 'sm', block = false, disabled = false, customErrorMessage = '', isHiddenErrorMessage = false, errorClassName, ...props }) => {
8
8
  return (_jsx(FormField, { name: name, options: options, customErrorMessage: customErrorMessage, disabled: disabled, children: ({ field, fieldState }) => (_jsxs("div", { className: cn('relative', block && 'flex flex-1'), children: [_jsx(LDSelect, { ...props, name: name, value: field.value ?? '', onChange: field.onChange, "aria-invalid": field['aria-invalid'], "aria-describedby": field['aria-describedby'], variant: variant, color: fieldState.hasError ? 'danger' : 'neutral', size: size, disabled: disabled }), !isHiddenErrorMessage && (_jsx(FormErrorMessage, { error: fieldState.error, disabled: disabled, className: errorClassName }))] })) }));
@@ -10,8 +10,8 @@ const variantColorClasses = {
10
10
  danger: 'bg-tintRed text-neutral100 border-[0.5px] border-transparent data-[state=open]:border-red500',
11
11
  },
12
12
  outline: {
13
- neutral: 'bg-transparent text-neutral100 border border-neutral10 data-[state=open]:border-lb500',
14
- point: 'bg-transparent text-neutral100 border border-neutral10 data-[state=open]:border-lb500',
13
+ neutral: 'bg-transparent text-neutral100 border border-neutral100 data-[state=open]:border-lb500',
14
+ point: 'bg-transparent text-neutral100 border border-neutral100 data-[state=open]:border-lb500',
15
15
  danger: 'bg-transparent text-neutral100 border border-danger100 data-[state=open]:border-red500',
16
16
  },
17
17
  ghost: {
@@ -51,7 +51,7 @@ const LDMultiSelect = ({ items, placeholder = '선택하세요', value = [], onC
51
51
  onChange?.(value.filter((val) => val !== v));
52
52
  }
53
53
  }, className: "ml-1 text-neutral900 hover:text-neutral800 cursor-pointer flex items-center justify-center", children: _jsx(LucideIcon, { name: "x", size: 14 }) })] }, v));
54
- })) }), _jsx(LucideIcon, { name: "chevronDown", size: iconSize, className: "text-neutral40 shrink-0" })] })) }), _jsx(SelectBase.Content, { className: cn('rounded-[5px] bg-mono5 border border-mono200 p-2 flex flex-col gap-[2px]', 'origin-top overflow-hidden ld-transition', contentClassName), openClassName: "max-h-[230px] opacity-100 translate-y-0 overflow-y-auto scrollbar-none", closedClassName: "max-h-0 opacity-0 -translate-y-1 pointer-events-none", children: items.map((opt) => {
54
+ })) }), _jsx(LucideIcon, { name: "chevronDown", size: iconSize, className: "text-neutral500 shrink-0" })] })) }), _jsx(SelectBase.Content, { className: cn('rounded-[5px] bg-mono5 border border-mono200 p-2 flex flex-col gap-[2px]', 'origin-top overflow-hidden ld-transition', contentClassName), openClassName: "max-h-[230px] opacity-100 translate-y-0 overflow-y-auto scrollbar-none", closedClassName: "max-h-0 opacity-0 -translate-y-1 pointer-events-none", children: items.map((opt) => {
55
55
  const isSelected = value.includes(opt.value);
56
56
  return (_jsxs(SelectBase.Item, { value: opt.value, className: cn('cursor-pointer hover:bg-neutral5 py-xs px-sm rounded-[5px] display14 regular transition-all duration-200 outline-none', 'focus:bg-neutral5 focus:ring-1 focus:ring-inset focus:ring-lb500', 'flex items-center gap-2', isSelected && 'bg-neutral5'), children: [_jsx("div", { className: cn('w-4 h-4 rounded border flex items-center justify-center transition-all', isSelected ? 'bg-lb500 border-lb500' : 'border-neutral20'), children: isSelected && (_jsx(LucideIcon, { name: "check", size: 12, className: "text-white" })) }), _jsx(SelectBase.ItemText, { children: opt.label })] }, opt.value));
57
57
  }) })] }));
@@ -49,7 +49,7 @@ const LDSelect = ({ items, placeholder = '선택하세요', value, defaultValue,
49
49
  (disabled
50
50
  ? disabledVariantClasses[variant]
51
51
  : variantColorClasses[variant][color]), size && sizeClasses[size], disabled && 'cursor-not-allowed disabled:cursor-not-allowed', className), children: _jsxs("div", { className: "flex gap-sm items-center w-full justify-center px-3", children: [_jsx(SelectBase.Value, { placeholder: placeholder, className: "flex flex-1 bold justify-center" }), _jsx(LucideIcon, { name: "chevronDown", size: iconSize, className: "text-neutral500" })] }) }), _jsx(SelectBase.Content, { className: cn('rounded-[5px] bg-white border border-mono100 p-2 flex flex-col gap-3xs', 'origin-top overflow-hidden ld-transition', contentClassName), openClassName: "max-h-[230px] opacity-100 translate-y-0 overflow-y-auto scrollbar-none", closedClassName: "max-h-0 opacity-0 -translate-y-1 pointer-events-none", children: items.map((opt) => (_jsx(SelectBase.Item, { value: opt.value, className: cn('w-full text-left px-3 py-2 rounded-[5px] display14 transition-all cursor-pointer outline-none', 'hover:bg-lb50 hover:text-lb500', 'focus:bg-lb50 focus:text-lb500 focus:ring-1 focus:ring-inset focus:ring-lb500', resolvedValue === opt.value
52
- ? 'bg-neutral10 font-bold text-neutral900'
52
+ ? 'bg-neutral100 font-bold text-neutral900'
53
53
  : 'text-neutral800'), children: _jsx(SelectBase.ItemText, { children: opt.label }) }, opt.value))) })] }));
54
54
  };
55
55
  export default LDSelect;
@@ -0,0 +1,26 @@
1
+ import { type ReactNode } from 'react';
2
+ import { type TableFieldProps, type Pageable } from './TableField.js';
3
+ export type { Pageable };
4
+ export interface IClassNames {
5
+ wrapper?: string;
6
+ toolbar?: string;
7
+ pagination?: string;
8
+ root?: string;
9
+ thead?: string;
10
+ headRow?: string;
11
+ headCell?: string;
12
+ tbody?: string;
13
+ row?: string;
14
+ cell?: string;
15
+ }
16
+ export interface LDCollapsibleTanstackTableProps<TData, TColumn> extends Omit<TableFieldProps<TData, TColumn>, 'children'> {
17
+ title?: string;
18
+ rightSideContents?: ReactNode;
19
+ emptyMessage?: string | ReactNode;
20
+ collapsibleContent: (row: TData) => ReactNode;
21
+ stickyHeader?: boolean;
22
+ classNames?: IClassNames;
23
+ }
24
+ declare const LDCollapsibleTanstackTable: <TData, TColumn>({ columns, data, pageable, paginationState, onPageChange, sortingState, enableRowSelection, enableMultiRowSelection, enableToggleAllRowsSelection, rowSelectionState, openRowsState, getRowId, rightSideContents, title, emptyMessage, collapsibleContent, stickyHeader, classNames, }: LDCollapsibleTanstackTableProps<TData, TColumn>) => import("react/jsx-runtime").JSX.Element;
25
+ export default LDCollapsibleTanstackTable;
26
+ //# sourceMappingURL=LDCollapsibleTanstackTable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LDCollapsibleTanstackTable.d.ts","sourceRoot":"","sources":["../../../src/components/LDTable/LDCollapsibleTanstackTable.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAmB,EAAE,KAAK,eAAe,EAAE,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAC;AAM/E,YAAY,EAAE,QAAQ,EAAE,CAAC;AACzB,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,+BAA+B,CAAC,KAAK,EAAE,OAAO,CAAE,SAAQ,IAAI,CAC3E,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC,EAC/B,UAAU,CACX;IACC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iBAAiB,CAAC,EAAE,SAAS,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,kBAAkB,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,SAAS,CAAC;IAC9C,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,WAAW,CAAC;CAC1B;AAED,QAAA,MAAM,0BAA0B,GAAI,KAAK,EAAE,OAAO,EAAE,wRAmBjD,+BAA+B,CAAC,KAAK,EAAE,OAAO,CAAC,4CAqMjD,CAAC;AAEF,eAAe,0BAA0B,CAAC"}
@@ -0,0 +1,38 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { ArrowUp, ArrowDown, ChevronDown, ChevronUp } from 'lucide-react';
4
+ import TableField from './TableField.js';
5
+ import LDTable from './LDTable.js';
6
+ import LDPagination from '../LDPagination/LDPagination.js';
7
+ import cn from '../../utils/cn.js';
8
+ const LDCollapsibleTanstackTable = ({ columns, data, pageable, paginationState, onPageChange, sortingState, enableRowSelection, enableMultiRowSelection, enableToggleAllRowsSelection, rowSelectionState, openRowsState, getRowId, rightSideContents, title, emptyMessage, collapsibleContent, stickyHeader = false, classNames, }) => {
9
+ return (_jsx(TableField, { columns: columns, data: data, pageable: pageable, paginationState: paginationState, onPageChange: onPageChange, sortingState: sortingState, enableRowSelection: enableRowSelection, enableMultiRowSelection: enableMultiRowSelection, rowSelectionState: rowSelectionState, enableToggleAllRowsSelection: enableToggleAllRowsSelection, openRowsState: openRowsState, getRowId: getRowId, children: ({ headerGroups, rows, isEmpty, currentPage, totalPages, onPageChange: handlePageChange, getHeader, getCell, openRows, handleOpenRows, }) => {
10
+ const paginationFooter = pageable && totalPages > 0 ? (_jsx(LDPagination, { currentPage: currentPage, totalPages: totalPages, onPageChange: handlePageChange, className: classNames?.pagination })) : null;
11
+ return (_jsxs(LDTable, { title: title, totalCount: pageable?.totalCount, rightSideContents: rightSideContents, isEmpty: isEmpty, emptyMessage: emptyMessage, columnCount: columns.length, footer: paginationFooter, classNames: {
12
+ ...classNames,
13
+ wrapper: cn('overflow-x-auto relative', classNames?.wrapper),
14
+ root: cn('w-auto min-w-full', classNames?.root),
15
+ }, children: [_jsx(LDTable.Header, { className: cn(classNames?.thead, stickyHeader &&
16
+ 'sticky top-0 bg-mono100 z-10 border-b border-neutral100'), children: headerGroups.map((hg) => (_jsx(LDTable.HeaderRow, { className: cn('group w-full', classNames?.headRow), children: hg.headers.map((header, idx) => {
17
+ const h = getHeader(header);
18
+ return (_jsxs(LDTable.HeaderCell, { className: cn('relative overflow-hidden', h.canSort && 'cursor-pointer', classNames?.headCell), style: { width: h.size }, onClick: h.toggleSortingHandler, children: [_jsxs("span", { className: cn('flex items-center gap-0.5 align-middle', h.meta?.headerAlign === 'right'
19
+ ? 'justify-end'
20
+ : h.meta?.headerAlign === 'left'
21
+ ? 'justify-start'
22
+ : 'justify-center'), children: [_jsx("span", { className: "truncate min-w-0", style: { maxWidth: h.size }, children: h.renderHeader() }), h.isSorted === 'asc' && (_jsx(ArrowUp, { className: "size-3 shrink-0" })), h.isSorted === 'desc' && (_jsx(ArrowDown, { className: "size-3 shrink-0" }))] }), header.column.getCanResize() && (_jsx("div", { onMouseDown: h.resizeHandler, onTouchStart: h.resizeHandler, onClick: (e) => e.stopPropagation(), className: cn('absolute right-0 top-0 h-full w-5 group-hover:cursor-col-resize touch-none select-none opacity-0 group-hover:opacity-100 ld-transition flex justify-center', idx === hg.headers.length - 1 && 'justify-end'), children: _jsx("div", { className: "h-full w-1 bg-neutral200" }) }))] }, h.id));
23
+ }) }, hg.id))) }), _jsx(LDTable.Body, { children: rows.map((row) => (_jsxs(_Fragment, { children: [_jsxs(LDTable.Row, { selected: row.getIsSelected(), className: cn('relative cursor-pointer', classNames?.row), onClick: () => {
24
+ handleOpenRows(row.id);
25
+ row.toggleSelected();
26
+ }, children: [row.getVisibleCells().map((cell) => {
27
+ const c = getCell(cell);
28
+ return (_jsx(LDTable.Cell, { className: classNames?.cell, children: _jsx("div", { className: cn('flex items-center gap-1', c.meta?.headerAlign === 'left'
29
+ ? 'justify-start'
30
+ : c.meta?.headerAlign === 'right'
31
+ ? 'justify-end'
32
+ : 'justify-center'), style: { maxWidth: c.size }, children: _jsx("span", { className: "truncate", children: c.renderCell() }) }) }, c.id));
33
+ }), _jsx(ChevronUp, { className: cn('text-neutral700 absolute top-1/2 -translate-1/2 right-5 shrink-0 size-5', openRows[row.id] ? 'opacity-0' : 'opacity-100') }), _jsx(ChevronDown, { className: cn('text-neutral700 absolute top-1/2 -translate-1/2 right-5 shrink-0 size-5', !openRows[row.id] ? 'opacity-0' : 'opacity-100') })] }, row.id), _jsx(LDTable.Row, { className: cn('h-auto border-0 bg-neutral50', openRows[row.id] && 'border-b'), children: _jsx(LDTable.Cell, { colSpan: columns.length, className: "px-5", children: _jsx("div", { className: cn('grid ld-transition', openRows[row.id]
34
+ ? 'grid-rows-[1fr]'
35
+ : 'grid-rows-[0fr]'), children: _jsx("div", { className: "overflow-hidden", children: collapsibleContent(row.original) }) }) }) })] }))) })] }));
36
+ } }));
37
+ };
38
+ export default LDCollapsibleTanstackTable;
@@ -1,4 +1,5 @@
1
1
  import { type ReactNode, type CSSProperties } from 'react';
2
+ import { IClassNames } from '../LDTable/LDTanstackTable.js';
2
3
  export interface LDTableProps {
3
4
  /** 테이블 콘텐츠 (LDTable.Header, LDTable.Body 등) */
4
5
  children: ReactNode;
@@ -7,6 +8,7 @@ export interface LDTableProps {
7
8
  /** 전체 데이터 건수 (타이틀 옆에 표시) */
8
9
  totalCount?: number;
9
10
  /** 타이틀 우측에 배치할 요소 (버튼, 필터 등) */
11
+ rightSideContents?: ReactNode;
10
12
  /** 테이블 상단에 배치할 요소 */
11
13
  /** 테이블 하단에 배치할 요소 (LDPagination 등) */
12
14
  footer?: ReactNode;
@@ -18,9 +20,11 @@ export interface LDTableProps {
18
20
  columnCount?: number;
19
21
  className?: string;
20
22
  style?: CSSProperties;
23
+ /** 외부 래퍼 classNames */
24
+ classNames?: IClassNames;
21
25
  }
22
26
  declare const LDTable: {
23
- ({ children, title, totalCount, footer, isEmpty, emptyMessage, columnCount, className, style, }: LDTableProps): import("react/jsx-runtime").JSX.Element;
27
+ ({ children, title, rightSideContents, footer, isEmpty, emptyMessage, columnCount, style, classNames, }: LDTableProps): import("react/jsx-runtime").JSX.Element;
24
28
  Header: ({ className, children, ...props }: React.HTMLAttributes<HTMLTableSectionElement>) => import("react/jsx-runtime").JSX.Element;
25
29
  HeaderRow: ({ className, children, ...props }: React.HTMLAttributes<HTMLTableRowElement>) => import("react/jsx-runtime").JSX.Element;
26
30
  HeaderCell: ({ className, children, ...props }: React.ThHTMLAttributes<HTMLTableCellElement>) => import("react/jsx-runtime").JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"LDTable.d.ts","sourceRoot":"","sources":["../../../src/components/LDTable/LDTable.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAI3D,MAAM,WAAW,YAAY;IAC3B,+CAA+C;IAC/C,QAAQ,EAAE,SAAS,CAAC;IACpB,iBAAiB;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4BAA4B;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,gCAAgC;IAGhC,qBAAqB;IAGrB,sCAAsC;IACtC,MAAM,CAAC,EAAE,SAAS,CAAC;IAQnB,mBAAmB;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,uBAAuB;IACvB,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAElC,wBAAwB;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;CAOvB;AAED,QAAA,MAAM,OAAO;qGAgBV,YAAY;gDAmCZ,KAAK,CAAC,cAAc,CAAC,uBAAuB,CAAC;mDAgB7C,KAAK,CAAC,cAAc,CAAC,mBAAmB,CAAC;oDAUzC,KAAK,CAAC,gBAAgB,CAAC,oBAAoB,CAAC;8CAa5C,KAAK,CAAC,cAAc,CAAC,uBAAuB,CAAC;6CAU7C,KAAK,CAAC,cAAc,CAAC,mBAAmB,CAAC,GAAG;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE;8CAgBlE,KAAK,CAAC,gBAAgB,CAAC,oBAAoB,CAAC;CAxE9C,CAAC;AAqFF,eAAe,OAAO,CAAC"}
1
+ {"version":3,"file":"LDTable.d.ts","sourceRoot":"","sources":["../../../src/components/LDTable/LDTable.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAG3D,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAEzD,MAAM,WAAW,YAAY;IAC3B,+CAA+C;IAC/C,QAAQ,EAAE,SAAS,CAAC;IACpB,iBAAiB;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4BAA4B;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,gCAAgC;IAChC,iBAAiB,CAAC,EAAE,SAAS,CAAC;IAE9B,qBAAqB;IAGrB,sCAAsC;IACtC,MAAM,CAAC,EAAE,SAAS,CAAC;IAQnB,mBAAmB;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,uBAAuB;IACvB,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAElC,wBAAwB;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;IAEtB,uBAAuB;IACvB,UAAU,CAAC,EAAE,WAAW,CAAC;CAC1B;AAED,QAAA,MAAM,OAAO;6GAUV,YAAY;gDAsEZ,KAAK,CAAC,cAAc,CAAC,uBAAuB,CAAC;mDAgB7C,KAAK,CAAC,cAAc,CAAC,mBAAmB,CAAC;oDAUzC,KAAK,CAAC,gBAAgB,CAAC,oBAAoB,CAAC;8CAa5C,KAAK,CAAC,cAAc,CAAC,uBAAuB,CAAC;6CAU7C,KAAK,CAAC,cAAc,CAAC,mBAAmB,CAAC,GAAG;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE;8CAgBlE,KAAK,CAAC,gBAAgB,CAAC,oBAAoB,CAAC;CArG9C,CAAC;AAqHF,eAAe,OAAO,CAAC"}
@@ -1,25 +1,21 @@
1
- import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import TableBase from './TableBase.js';
3
3
  import cn from '../../utils/cn.js';
4
- const LDTable = ({ children, title, totalCount,
5
- // rightSideContents,
6
- // tableTop,
7
- footer,
8
- // scrollable = false,
9
- // scrollMinWidth = '1440px',
10
- isEmpty = false, emptyMessage = '조회하신 데이터가 없습니다.', columnCount, className, style,
11
- // wrapperClassName,
12
- // wrapperStyle,
13
- }) => {
14
- return (_jsxs("div", { className: cn('flex flex-col justify-between h-full gap-sm'), children: [title && (_jsxs("h3", { className: "whitespace-nowrap display16 bold", children: [title, totalCount !== undefined && ` (${totalCount.toLocaleString()})`] })), _jsxs(TableBase.Root, { className: cn('w-full', className), style: style, children: [children, isEmpty && columnCount && (_jsx(TableBase.Body, { children: _jsx(TableBase.Row, { children: _jsx(TableBase.Cell, { colSpan: columnCount, className: "text-center h-24 py-24", children: emptyMessage }) }) }))] }), footer] }));
4
+ const LDTable = ({ children, title, rightSideContents, footer, isEmpty = false, emptyMessage = '조회하신 데이터가 없습니다.', columnCount, style, classNames, }) => {
5
+ return (_jsxs("div", { className: cn('flex flex-col justify-between h-full gap-md', classNames?.wrapper), children: [_jsx(Toolbar, { title: title, rightSideContents: rightSideContents, className: classNames?.toolbar }), _jsxs(TableBase.Root, { className: cn('relative w-full', classNames?.root), style: style, children: [children, isEmpty && columnCount && (_jsx(TableBase.Body, { className: classNames?.tbody, children: _jsx(TableBase.Row, { className: classNames?.row, children: _jsx(TableBase.Cell, { colSpan: columnCount, className: cn('h-48 text-center'), children: emptyMessage }) }) }))] }), footer] }));
6
+ };
7
+ const Toolbar = ({ title, rightSideContents, className, }) => {
8
+ if (!title && !rightSideContents)
9
+ return null;
10
+ return (_jsxs("div", { className: cn('flex-wrap gap-sm flex flex-row items-center', title ? 'justify-between' : 'justify-end', className), children: [title && _jsx("h3", { className: "whitespace-nowrap display16 bold", children: title }), rightSideContents && (_jsx("div", { className: "flex flex-row items-center gap-sm", children: rightSideContents }))] }));
15
11
  };
16
12
  // ── Styled Sub-components ──
17
- const Header = ({ className, children, ...props }) => (_jsx(TableBase.Header, { className: cn('border-b border-neutral700 bg-mono100 hover:bg-mono200 ld-transition', className), ...props, children: children }));
18
- const HeaderRow = ({ className, children, ...props }) => (_jsx(TableBase.HeaderRow, { className: cn('bg-neutral5', className), ...props, children: children }));
19
- const HeaderCell = ({ className, children, ...props }) => (_jsx(TableBase.HeaderCell, { className: cn('px-4 py-3 text-left display12 regular', className), ...props, children: children }));
13
+ const Header = ({ className, children, ...props }) => (_jsx(TableBase.Header, { className: cn('h-9 border-b border-neutral700 bg-mono100 hover:bg-mono200 ld-transition', className), ...props, children: children }));
14
+ const HeaderRow = ({ className, children, ...props }) => (_jsx(TableBase.HeaderRow, { className: className, ...props, children: children }));
15
+ const HeaderCell = ({ className, children, ...props }) => (_jsx(TableBase.HeaderCell, { className: cn('px-5 display12 regular', className), ...props, children: children }));
20
16
  const Body = ({ className, children, ...props }) => (_jsx(TableBase.Body, { className: className, ...props, children: children }));
21
- const Row = ({ className, children, ...props }) => (_jsx(TableBase.Row, { className: cn('border-b border-neutral100 hover:bg-black/3 ld-transition', className), ...props, children: children }));
22
- const Cell = ({ className, children, ...props }) => (_jsx(TableBase.Cell, { className: cn('px-4 py-3 display14', className), ...props, children: children }));
17
+ const Row = ({ className, children, ...props }) => (_jsx(TableBase.Row, { className: cn('h-13 border-b border-neutral100 hover:bg-mono50 ld-transition', className), ...props, children: children }));
18
+ const Cell = ({ className, children, ...props }) => (_jsx(TableBase.Cell, { className: cn('px-5 display14 regular', className), ...props, children: children }));
23
19
  LDTable.Header = Header;
24
20
  LDTable.HeaderRow = HeaderRow;
25
21
  LDTable.HeaderCell = HeaderCell;
@@ -1,23 +1,25 @@
1
- import { type ReactNode, type CSSProperties } from 'react';
1
+ import { type ReactNode } from 'react';
2
2
  import { type TableFieldProps, type Pageable } from './TableField.js';
3
3
  export type { Pageable };
4
+ export interface IClassNames {
5
+ wrapper?: string;
6
+ toolbar?: string;
7
+ pagination?: string;
8
+ root?: string;
9
+ thead?: string;
10
+ headRow?: string;
11
+ headCell?: string;
12
+ tbody?: string;
13
+ row?: string;
14
+ cell?: string;
15
+ }
4
16
  export interface LDTanstackTableProps<TData, TColumn> extends Omit<TableFieldProps<TData, TColumn>, 'children'> {
5
17
  title?: string;
6
18
  rightSideContents?: ReactNode;
7
- tableTop?: ReactNode;
8
- showPagination?: boolean;
9
19
  emptyMessage?: string | ReactNode;
10
- scrollable?: boolean;
11
20
  stickyHeader?: boolean;
12
- className?: string;
13
- wrapperClassName?: string;
14
- wrapperStyle?: CSSProperties;
15
- headerClassName?: string;
16
- theadClassName?: string;
17
- rowClassName?: string;
18
- cellClassName?: string;
19
- paginationClassName?: string;
21
+ classNames?: IClassNames;
20
22
  }
21
- declare const LDTanstackTable: <TData, TColumn>({ columns, data, pageable, paginationState, onPageChange, sortingState, enableRowSelection, enableMultiRowSelection, rowSelectionState, enableToggleAllRowsSelection, getRowId, title, showPagination, emptyMessage, stickyHeader, className, headerClassName, theadClassName, rowClassName, cellClassName, paginationClassName, }: LDTanstackTableProps<TData, TColumn>) => import("react/jsx-runtime").JSX.Element;
23
+ declare const LDTanstackTable: <TData, TColumn>({ columns, data, pageable, paginationState, onPageChange, sortingState, enableRowSelection, enableMultiRowSelection, enableToggleAllRowsSelection, rowSelectionState, getRowId, rightSideContents, title, emptyMessage, stickyHeader, classNames, }: LDTanstackTableProps<TData, TColumn>) => import("react/jsx-runtime").JSX.Element;
22
24
  export default LDTanstackTable;
23
25
  //# sourceMappingURL=LDTanstackTable.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"LDTanstackTable.d.ts","sourceRoot":"","sources":["../../../src/components/LDTable/LDTanstackTable.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAE3D,OAAmB,EAAE,KAAK,eAAe,EAAE,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAC;AAM/E,YAAY,EAAE,QAAQ,EAAE,CAAC;AAEzB,MAAM,WAAW,oBAAoB,CAAC,KAAK,EAAE,OAAO,CAAE,SAAQ,IAAI,CAChE,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC,EAC/B,UAAU,CACX;IAEC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iBAAiB,CAAC,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,EAAE,SAAS,CAAC;IAGrB,cAAc,CAAC,EAAE,OAAO,CAAC;IAGzB,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC;IAGvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,aAAa,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,QAAA,MAAM,eAAe,GAAI,KAAK,EAAE,OAAO,EAAE,oUAwBtC,oBAAoB,CAAC,KAAK,EAAE,OAAO,CAAC,4CA+HtC,CAAC;AAEF,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"LDTanstackTable.d.ts","sourceRoot":"","sources":["../../../src/components/LDTable/LDTanstackTable.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAmB,EAAE,KAAK,eAAe,EAAE,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAC;AAM/E,YAAY,EAAE,QAAQ,EAAE,CAAC;AACzB,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,oBAAoB,CAAC,KAAK,EAAE,OAAO,CAAE,SAAQ,IAAI,CAChE,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC,EAC/B,UAAU,CACX;IACC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iBAAiB,CAAC,EAAE,SAAS,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,WAAW,CAAC;CAC1B;AAED,QAAA,MAAM,eAAe,GAAI,KAAK,EAAE,OAAO,EAAE,qPAiBtC,oBAAoB,CAAC,KAAK,EAAE,OAAO,CAAC,4CA4JtC,CAAC;AAEF,eAAe,eAAe,CAAC"}
@@ -5,31 +5,29 @@ import TableField from './TableField.js';
5
5
  import LDTable from './LDTable.js';
6
6
  import LDPagination from '../LDPagination/LDPagination.js';
7
7
  import cn from '../../utils/cn.js';
8
- const LDTanstackTable = ({
9
- // TableField props
10
- columns, data, pageable, paginationState, onPageChange, sortingState, enableRowSelection, enableMultiRowSelection, rowSelectionState, enableToggleAllRowsSelection, getRowId,
11
- // 프레젠테이션 props
12
- title, showPagination = true, emptyMessage, stickyHeader = false, className, headerClassName, theadClassName, rowClassName, cellClassName, paginationClassName, }) => {
13
- return (_jsx(TableField, { columns: columns, data: data, pageable: pageable, paginationState: paginationState, onPageChange: onPageChange, sortingState: sortingState, enableRowSelection: enableRowSelection, enableMultiRowSelection: enableMultiRowSelection, rowSelectionState: rowSelectionState, enableToggleAllRowsSelection: enableToggleAllRowsSelection, getRowId: getRowId, children: ({ headerGroups, rows, isEmpty, currentPage, totalPages, toggleAllRowsSelected, onPageChange: handlePageChange, getHeader, getCell, }) => {
14
- const paginationFooter = showPagination && !isEmpty && pageable && totalPages > 0 ? (_jsx(LDPagination, { currentPage: currentPage, totalPages: totalPages, onPageChange: handlePageChange, className: paginationClassName })) : null;
15
- return (_jsxs(LDTable, { title: title, totalCount: pageable?.totalCount,
16
- // rightSideContents={rightSideContents}
17
- // tableTop={tableTop}
18
- // scrollable={scrollable}
19
- isEmpty: isEmpty, emptyMessage: emptyMessage, columnCount: columns.length, footer: paginationFooter, className: className, children: [_jsx(LDTable.Header, { className: cn('hover:bg-mono11 ld-transition', theadClassName), children: headerGroups.map((hg) => (_jsx(LDTable.HeaderRow, { className: "w-full", onClick: toggleAllRowsSelected, children: hg.headers.map((header) => {
8
+ const LDTanstackTable = ({ columns, data, pageable, paginationState, onPageChange, sortingState, enableRowSelection, enableMultiRowSelection, enableToggleAllRowsSelection, rowSelectionState, getRowId, rightSideContents, title, emptyMessage, stickyHeader = false, classNames, }) => {
9
+ return (_jsx(TableField, { columns: columns, data: data, pageable: pageable, paginationState: paginationState, onPageChange: onPageChange, sortingState: sortingState, enableRowSelection: enableRowSelection, enableMultiRowSelection: enableMultiRowSelection, rowSelectionState: rowSelectionState, enableToggleAllRowsSelection: enableToggleAllRowsSelection, getRowId: getRowId, children: ({ headerGroups, rows, isEmpty, currentPage, totalPages, onPageChange: handlePageChange, getHeader, getCell, }) => {
10
+ const paginationFooter = pageable && totalPages > 0 ? (_jsx(LDPagination, { currentPage: currentPage, totalPages: totalPages, onPageChange: handlePageChange, className: classNames?.pagination })) : null;
11
+ return (_jsxs(LDTable, { title: title, totalCount: pageable?.totalCount, rightSideContents: rightSideContents, isEmpty: isEmpty, emptyMessage: emptyMessage, columnCount: columns.length, footer: paginationFooter, classNames: {
12
+ ...classNames,
13
+ wrapper: cn('overflow-x-auto relative', classNames?.wrapper),
14
+ root: cn('w-auto min-w-full', classNames?.root),
15
+ }, children: [_jsx(LDTable.Header, { className: cn(classNames?.thead, stickyHeader &&
16
+ 'sticky top-0 bg-mono100 z-10 border-b border-neutral100'), children: headerGroups.map((hg) => (_jsx(LDTable.HeaderRow, { className: cn('group w-full', classNames?.headRow), children: hg.headers.map((header, idx) => {
20
17
  const h = getHeader(header);
21
- return (_jsxs(LDTable.HeaderCell, { className: cn('relative h-9', headerClassName, stickyHeader &&
22
- 'sticky top-0 bg-mono10 z-10 border-b border-neutral10', h.canSort && 'cursor-pointer', h.meta
23
- ?.headerAlign === 'left'
24
- ? 'text-left'
25
- : h.meta
26
- ?.headerAlign === 'right'
27
- ? 'text-right'
28
- : 'text-center'), style: { width: h.size }, onClick: h.toggleSortingHandler, children: [h.renderHeader(), h.isSorted === 'asc' && (_jsx(ArrowUp, { className: "inline-block w-3 h-3 ml-1 align-middle" })), h.isSorted === 'desc' && (_jsx(ArrowDown, { className: "inline-block w-3 h-3 ml-1 align-middle" }))] }, h.id));
29
- }) }, hg.id))) }), !isEmpty && (_jsx(LDTable.Body, { children: rows.map((row) => (_jsx(LDTable.Row, { selected: row.getIsSelected(), className: cn('hover:bg-black/3 ld-transition h-13', rowClassName), onClick: () => row.toggleSelected(), children: row.getVisibleCells().map((cell) => {
18
+ return (_jsxs(LDTable.HeaderCell, { className: cn('relative overflow-hidden', h.canSort && 'cursor-pointer', classNames?.headCell), style: { width: h.size }, onClick: h.toggleSortingHandler, children: [_jsxs("span", { className: cn('flex items-center gap-0.5 align-middle', h.meta?.headerAlign === 'right'
19
+ ? 'justify-end'
20
+ : h.meta?.headerAlign === 'left'
21
+ ? 'justify-start'
22
+ : 'justify-center'), children: [_jsx("span", { className: "truncate min-w-0", style: { maxWidth: h.size }, children: h.renderHeader() }), h.isSorted === 'asc' && (_jsx(ArrowUp, { className: "size-3 shrink-0" })), h.isSorted === 'desc' && (_jsx(ArrowDown, { className: "size-3 shrink-0" }))] }), header.column.getCanResize() && (_jsx("div", { onMouseDown: h.resizeHandler, onTouchStart: h.resizeHandler, onClick: (e) => e.stopPropagation(), className: cn('absolute right-0 top-0 h-full w-5 group-hover:cursor-col-resize touch-none select-none opacity-0 group-hover:opacity-100 ld-transition flex justify-center', idx === hg.headers.length - 1 && 'justify-end'), children: _jsx("div", { className: "h-full w-1 bg-neutral200" }) }))] }, h.id));
23
+ }) }, hg.id))) }), _jsx(LDTable.Body, { children: rows.map((row) => (_jsx(LDTable.Row, { selected: row.getIsSelected(), className: classNames?.row, onClick: () => row.toggleSelected(), children: row.getVisibleCells().map((cell) => {
30
24
  const c = getCell(cell);
31
- return (_jsx(LDTable.Cell, { className: cellClassName, children: c.renderCell() }, c.id));
32
- }) }, row.id))) }))] }));
25
+ return (_jsx(LDTable.Cell, { className: classNames?.cell, children: _jsx("div", { className: cn('truncate', c.meta?.headerAlign === 'left'
26
+ ? 'text-left'
27
+ : c.meta?.headerAlign === 'right'
28
+ ? 'text-right'
29
+ : 'text-center'), style: { maxWidth: c.size }, children: c.renderCell() }) }, c.id));
30
+ }) }, row.id))) })] }));
33
31
  } }));
34
32
  };
35
33
  export default LDTanstackTable;
@@ -1,5 +1,8 @@
1
1
  import { type ReactNode, type Dispatch, type SetStateAction } from 'react';
2
- import { flexRender, type ColumnDef, type RowSelectionState, type PaginationState, type SortingState, type Row, type HeaderGroup, type Header, type Cell } from '@tanstack/react-table';
2
+ import { type ColumnDef, type RowSelectionState, type PaginationState, type SortingState, type Row, type HeaderGroup, type Header, type Cell, type Table } from '@tanstack/react-table';
3
+ export interface TableColumnMeta {
4
+ headerAlign?: 'left' | 'center' | 'right';
5
+ }
3
6
  export interface Pageable<T> {
4
7
  data: T[];
5
8
  page?: number;
@@ -9,6 +12,7 @@ export interface Pageable<T> {
9
12
  hasNext?: boolean;
10
13
  hasPrev?: boolean;
11
14
  }
15
+ export type TOpenRowState = Record<string | number, boolean>;
12
16
  export interface TableFieldProps<TData, TColumn> {
13
17
  /** 컬럼 정의 */
14
18
  columns: ColumnDef<TData, TColumn>[];
@@ -32,33 +36,41 @@ export interface TableFieldProps<TData, TColumn> {
32
36
  ];
33
37
  enableToggleAllRowsSelection?: boolean;
34
38
  getRowId?: (row: TData, index: number) => string;
39
+ openRowsState?: [
40
+ TOpenRowState,
41
+ React.Dispatch<React.SetStateAction<TOpenRowState>>
42
+ ];
35
43
  /** render props */
36
44
  children: (props: TableFieldRenderProps<TData>) => ReactNode;
37
45
  }
38
46
  export interface TableFieldRenderProps<TData> {
47
+ table: Table<TData>;
39
48
  headerGroups: HeaderGroup<TData>[];
40
49
  rows: Row<TData>[];
41
50
  isEmpty: boolean;
42
51
  currentPage: number;
43
52
  totalPages: number;
44
- toggleAllRowsSelected: () => void;
45
53
  setPageIndex: (index: number) => void;
46
54
  onPageChange: (page: number) => void;
47
- flexRender: typeof flexRender;
48
55
  getHeader: (header: Header<TData, unknown>) => {
49
56
  id: string;
50
57
  canSort: boolean;
51
58
  isSorted: false | 'asc' | 'desc';
52
59
  size: number;
53
60
  toggleSortingHandler: ((event: unknown) => void) | undefined;
61
+ resizeHandler: (event: unknown) => void;
54
62
  renderHeader: () => ReactNode;
55
- meta: Record<string, unknown> | undefined;
63
+ meta: TableColumnMeta | undefined;
56
64
  };
57
65
  getCell: (cell: Cell<TData, unknown>) => {
58
66
  id: string;
67
+ size: number;
59
68
  renderCell: () => ReactNode;
69
+ meta: TableColumnMeta | undefined;
60
70
  };
71
+ openRows: TOpenRowState;
72
+ handleOpenRows: (id: number | string) => void;
61
73
  }
62
- declare const TableField: <TData, TColumn>({ columns, data, pageable, paginationState, onPageChange, sortingState, enableRowSelection, enableMultiRowSelection, rowSelectionState, enableToggleAllRowsSelection, getRowId, children, }: TableFieldProps<TData, TColumn>) => ReactNode;
74
+ declare const TableField: <TData, TColumn>({ columns, data, pageable, paginationState, onPageChange, sortingState, enableRowSelection, enableMultiRowSelection, rowSelectionState, openRowsState, getRowId, children, }: TableFieldProps<TData, TColumn>) => ReactNode;
63
75
  export default TableField;
64
76
  //# sourceMappingURL=TableField.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TableField.d.ts","sourceRoot":"","sources":["../../../src/components/LDTable/TableField.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TableField.d.ts","sourceRoot":"","sources":["../../../src/components/LDTable/TableField.tsx"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  'use client';
2
2
  import { useReactTable, getCoreRowModel, getSortedRowModel, flexRender, } from '@tanstack/react-table';
3
3
  import { useRouter, useSearchParams, usePathname } from 'next/navigation';
4
- const TableField = ({ columns, data, pageable, paginationState, onPageChange, sortingState, enableRowSelection = false, enableMultiRowSelection = false, rowSelectionState, enableToggleAllRowsSelection = false, getRowId, children, }) => {
4
+ const TableField = ({ columns, data, pageable, paginationState, onPageChange, sortingState, enableRowSelection = false, enableMultiRowSelection = false, rowSelectionState, openRowsState, getRowId, children, }) => {
5
5
  const router = useRouter();
6
6
  const searchParams = useSearchParams();
7
7
  const pathname = usePathname();
@@ -14,11 +14,18 @@ const TableField = ({ columns, data, pageable, paginationState, onPageChange, so
14
14
  undefined,
15
15
  ];
16
16
  const [sorting, setSorting] = sortingState ?? [[], () => { }];
17
+ const [openRows, setOpenRows] = openRowsState ?? [{}, () => { }];
17
18
  const processedColumns = columns.map((col) => ({
18
19
  ...col,
19
20
  enableSorting: col.enableSorting ?? false,
20
21
  sortDescFirst: col.sortDescFirst ?? false,
21
22
  }));
23
+ const handleOpenRows = (id) => {
24
+ setOpenRows((prev) => ({
25
+ ...prev,
26
+ [id]: !prev[id],
27
+ }));
28
+ };
22
29
  const table = useReactTable({
23
30
  columns: processedColumns,
24
31
  data,
@@ -37,6 +44,8 @@ const TableField = ({ columns, data, pageable, paginationState, onPageChange, so
37
44
  rowCount: pageable?.totalCount,
38
45
  onSortingChange: setSorting,
39
46
  getSortedRowModel: getSortedRowModel(),
47
+ columnResizeMode: 'onChange',
48
+ columnResizeDirection: 'ltr',
40
49
  });
41
50
  const headerGroups = table.getHeaderGroups();
42
51
  const rows = table.getRowModel().rows;
@@ -60,28 +69,29 @@ const TableField = ({ columns, data, pageable, paginationState, onPageChange, so
60
69
  isSorted: header.column.getIsSorted(),
61
70
  size: header.getSize(),
62
71
  toggleSortingHandler: header.column.getToggleSortingHandler(),
72
+ resizeHandler: header.getResizeHandler(),
63
73
  renderHeader: () => flexRender(header.column.columnDef.header, header.getContext()),
64
74
  meta: header.column.columnDef.meta,
65
75
  });
66
76
  const getCell = (cell) => ({
67
77
  id: cell.id,
78
+ size: cell.column.getSize(),
68
79
  renderCell: () => flexRender(cell.column.columnDef.cell, cell.getContext()),
80
+ meta: cell.column.columnDef.meta,
69
81
  });
70
82
  return children({
83
+ table,
71
84
  headerGroups,
72
85
  rows,
73
86
  isEmpty,
74
87
  currentPage,
75
88
  totalPages,
76
- toggleAllRowsSelected: () => {
77
- if (enableToggleAllRowsSelection)
78
- table.toggleAllRowsSelected();
79
- },
80
89
  setPageIndex: (index) => table.setPageIndex(index),
81
90
  onPageChange: handlePageChange,
82
- flexRender,
83
91
  getHeader,
84
92
  getCell,
93
+ openRows,
94
+ handleOpenRows,
85
95
  });
86
96
  };
87
97
  export default TableField;
@@ -0,0 +1,12 @@
1
+ import { NavigationClassNames, type TeamHistoryItem } from './TeamHistoryBase.js';
2
+ export interface LDTeamHistoryProps {
3
+ items: TeamHistoryItem[];
4
+ className?: string;
5
+ sectionsClassName?: string;
6
+ sectionClassName?: string;
7
+ isRootWindow?: boolean;
8
+ navigationClassNames?: NavigationClassNames;
9
+ }
10
+ declare const LDTeamHistory: (props: LDTeamHistoryProps) => import("react/jsx-runtime").JSX.Element;
11
+ export default LDTeamHistory;
12
+ //# sourceMappingURL=LDTeamHistory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LDTeamHistory.d.ts","sourceRoot":"","sources":["../../../src/components/LDTeamHistory/LDTeamHistory.tsx"],"names":[],"mappings":"AAGA,OAAwB,EACtB,oBAAoB,EACpB,KAAK,eAAe,EACrB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;CAC7C;AAED,QAAA,MAAM,aAAa,GAAI,OAAO,kBAAkB,4CAwC/C,CAAC;AAEF,eAAe,aAAa,CAAC"}
@@ -0,0 +1,14 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import cn from '../../utils/cn.js';
4
+ import TeamHistoryBase from './TeamHistoryBase.js';
5
+ const LDTeamHistory = (props) => {
6
+ return (_jsxs(TeamHistoryBase.Root, { items: props.items, className: cn('relative flex w-full items-start gap-10', props.className), isRootWindow: props.isRootWindow, children: [_jsx(TeamHistoryBase.Navigation, { classNames: {
7
+ root: cn('sticky top-[calc(50vh-var(--ld-team-history-navigation-offset,0px))] flex h-fit w-auto shrink-0 flex-col text-center', props.navigationClassNames?.root),
8
+ item: cn('flex flex-row items-center justify-end gap-md cursor-pointer w-full', props.navigationClassNames?.item),
9
+ label: cn('display18 semibold flex items-center text-lb100 ld-transition data-[active=true]:text-lb500', props.navigationClassNames?.label),
10
+ dot: cn('size-2 rounded-full bg-lb100 outline-lb500 ld-transition data-[active=true]:bg-transparent data-[active=true]:outline-3', props.navigationClassNames?.dot),
11
+ line: cn('h-20 w-0.5 mr-0.75 bg-lb100 ld-transition data-[active=true]:bg-lb500', props.navigationClassNames?.line),
12
+ } }), _jsx(TeamHistoryBase.Sections, { rootClassName: cn('flex flex-1 flex-col items-start gap-10', props.sectionsClassName), sectionClassName: cn('flex flex-col', props.sectionClassName) })] }));
13
+ };
14
+ export default LDTeamHistory;
@@ -1,8 +1,13 @@
1
1
  import { type ReactNode } from 'react';
2
+ export interface TeamHistoryItem {
3
+ target: string;
4
+ section: ReactNode;
5
+ }
2
6
  interface RootProps {
3
- targets: string[];
4
- sections: ReactNode[];
7
+ items: TeamHistoryItem[];
5
8
  children?: ReactNode;
9
+ className?: string;
10
+ isRootWindow?: boolean;
6
11
  }
7
12
  export interface NavigationClassNames {
8
13
  root?: string;
@@ -11,14 +16,15 @@ export interface NavigationClassNames {
11
16
  dot?: string;
12
17
  line?: string;
13
18
  }
14
- export declare const AnchorBase: {
19
+ export declare const TeamHistoryBase: {
15
20
  Root: (props: RootProps) => import("react/jsx-runtime").JSX.Element;
16
21
  Navigation: ({ classNames }: {
17
22
  classNames?: NavigationClassNames;
18
23
  }) => import("react/jsx-runtime").JSX.Element;
19
- Sections: ({ sectionClassName }: {
24
+ Sections: ({ rootClassName, sectionClassName, }: {
25
+ rootClassName?: string;
20
26
  sectionClassName?: string;
21
27
  }) => import("react/jsx-runtime").JSX.Element;
22
28
  };
23
- export default AnchorBase;
24
- //# sourceMappingURL=AnchorBase.d.ts.map
29
+ export default TeamHistoryBase;
30
+ //# sourceMappingURL=TeamHistoryBase.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TeamHistoryBase.d.ts","sourceRoot":"","sources":["../../../src/components/LDTeamHistory/TeamHistoryBase.tsx"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,SAAS,EAMf,MAAM,OAAO,CAAC;AASf,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,SAAS,CAAC;CACpB;AAqCD,UAAU,SAAS;IACjB,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAkED,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAuFD,eAAO,MAAM,eAAe;kBA7JP,SAAS;iCAwEM;QAAE,UAAU,CAAC,EAAE,oBAAoB,CAAA;KAAE;qDA8DtE;QACD,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;KAC3B;CAwBA,CAAC;AAEF,eAAe,eAAe,CAAC"}