@loword/loword-design-system 0.5.4 → 0.5.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/LDEditor/LDEditor.d.ts +4 -1
- package/dist/components/LDEditor/LDEditor.d.ts.map +1 -1
- package/dist/components/LDEditor/LDEditor.js +23 -13
- package/dist/components/LDSelect/LDSelect.d.ts +4 -2
- package/dist/components/LDSelect/LDSelect.d.ts.map +1 -1
- package/dist/components/LDSelect/LDSelect.js +4 -2
- package/dist/components/LDTable/HeadlessTable.d.ts.map +1 -1
- package/dist/components/LDTable/HeadlessTable.js +9 -3
- package/dist/components/LDTable/LDCollapsibleTanstackTable.d.ts.map +1 -1
- package/dist/components/LDTable/LDCollapsibleTanstackTable.js +3 -0
- package/dist/components/LDTable/LDTanstackTable.d.ts.map +1 -1
- package/dist/components/LDTable/LDTanstackTable.js +6 -1
- package/dist/constants/file.d.ts.map +1 -1
- package/dist/constants/file.js +1 -0
- package/dist/index.css +4 -1
- package/package.json +1 -1
- package/src/styles/components/editor.css +1 -1
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type TMimeType } from '../../constants/file.js';
|
|
1
2
|
export interface LDEditorProps {
|
|
2
3
|
content: string;
|
|
3
4
|
onChange?: (html: string) => void;
|
|
@@ -13,7 +14,9 @@ export interface LDEditorProps {
|
|
|
13
14
|
* 지정하지 않으면 붙여넣은 외부 이미지는 그대로 둔다.
|
|
14
15
|
*/
|
|
15
16
|
allowedImageHosts?: string[];
|
|
17
|
+
/** 툴바 업로드·이미지 붙여넣기에서 허용할 MIME 타입. 지정하지 않으면 기본 허용 형식을 쓴다. */
|
|
18
|
+
allowedExtensions?: TMimeType[];
|
|
16
19
|
}
|
|
17
|
-
declare const LDEditor: ({ content, onChange, className, handleImageUpload, allowedImageHosts, }: LDEditorProps) => import("react/jsx-runtime").JSX.Element;
|
|
20
|
+
declare const LDEditor: ({ content, onChange, className, handleImageUpload, allowedImageHosts, allowedExtensions, }: LDEditorProps) => import("react/jsx-runtime").JSX.Element;
|
|
18
21
|
export default LDEditor;
|
|
19
22
|
//# sourceMappingURL=LDEditor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LDEditor.d.ts","sourceRoot":"","sources":["../../../src/components/LDEditor/LDEditor.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"LDEditor.d.ts","sourceRoot":"","sources":["../../../src/components/LDEditor/LDEditor.tsx"],"names":[],"mappings":"AAwCA,OAAO,EAEL,KAAK,SAAS,EAGf,MAAM,kBAAkB,CAAC;AAqH1B,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0DAA0D;IAC1D,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE;QAC7B,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;KAClB,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC7B;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,4DAA4D;IAC5D,iBAAiB,CAAC,EAAE,SAAS,EAAE,CAAC;CACjC;AAqVD,QAAA,MAAM,QAAQ,GAAI,4FAOf,aAAa,4CAgCf,CAAC;AAkmBF,eAAe,QAAQ,CAAC"}
|
|
@@ -80,9 +80,11 @@ const LDDivider = () => _jsx("div", { className: "mx-1 h-6 w-px bg-neutral200" }
|
|
|
80
80
|
// 두어 줄이 바뀌어도 새 줄이 구분선으로 시작하지 않게 한다.
|
|
81
81
|
const ToolbarGroup = ({ children }) => (_jsx("div", { className: "flex items-center gap-2", children: children }));
|
|
82
82
|
// 검증을 통과하면 업로드한 URL을 반환하고, 실패하면 토스트에 띄울 사유를 담아 throw한다.
|
|
83
|
-
const uploadImageFile = async (file, handleImageUpload) => {
|
|
84
|
-
if (!validAllowedExtensions(file,
|
|
85
|
-
const allowedFiles =
|
|
83
|
+
const uploadImageFile = async (file, handleImageUpload, allowedExtensions = TOOLBAR_ALLOWED_EXTENSIONS) => {
|
|
84
|
+
if (!validAllowedExtensions(file, allowedExtensions)) {
|
|
85
|
+
const allowedFiles = allowedExtensions
|
|
86
|
+
.map((item) => FILE_EXTENSIONS[item].toUpperCase())
|
|
87
|
+
.join(', ');
|
|
86
88
|
throw new Error(`지원하지 않는 파일 형식입니다. ${allowedFiles} 파일만 업로드 가능합니다.`);
|
|
87
89
|
}
|
|
88
90
|
if (!validFileSize(file, TOOLBAR_MAX_SIZE)) {
|
|
@@ -257,7 +259,7 @@ const ImagePaste = Extension.create({
|
|
|
257
259
|
props: {
|
|
258
260
|
decorations: (state) => placeholderKey.getState(state),
|
|
259
261
|
handlePaste: (view, event, slice) => {
|
|
260
|
-
const { handleImageUpload, allowedImageHosts } = getConfig();
|
|
262
|
+
const { handleImageUpload, allowedImageHosts, allowedExtensions } = getConfig();
|
|
261
263
|
if (!handleImageUpload)
|
|
262
264
|
return false;
|
|
263
265
|
const html = event.clipboardData?.getData('text/html') ?? '';
|
|
@@ -284,10 +286,10 @@ const ImagePaste = Extension.create({
|
|
|
284
286
|
? files[0]
|
|
285
287
|
: undefined;
|
|
286
288
|
pasteAfterUpload(view, uploadAll(list.map((src) => isDataUrl(src)
|
|
287
|
-
? dataUrlToFile(src).then((file) => uploadImageFile(file, handleImageUpload))
|
|
289
|
+
? dataUrlToFile(src).then((file) => uploadImageFile(file, handleImageUpload, allowedExtensions))
|
|
288
290
|
: (copiedImage
|
|
289
291
|
? Promise.resolve(copiedImage)
|
|
290
|
-
: urlToFile(src)).then((file) => uploadImageFile(file, handleImageUpload)))).then((srcs) => {
|
|
292
|
+
: urlToFile(src)).then((file) => uploadImageFile(file, handleImageUpload, allowedExtensions)))).then((srcs) => {
|
|
291
293
|
const urls = new Map(list.map((src, index) => [src, srcs[index] ?? null]));
|
|
292
294
|
return new Slice(replaceImages(slice.content, urls), slice.openStart, slice.openEnd);
|
|
293
295
|
}));
|
|
@@ -296,7 +298,7 @@ const ImagePaste = Extension.create({
|
|
|
296
298
|
// Office는 HTML과 함께 선택 영역을 찍은 PNG를 files에 넣는다. HTML이 있으면 파일은 무시한다.
|
|
297
299
|
if (html || !files.length)
|
|
298
300
|
return false;
|
|
299
|
-
pasteAfterUpload(view, uploadAll(files.map((file) => uploadImageFile(file, handleImageUpload))).then((srcs) => {
|
|
301
|
+
pasteAfterUpload(view, uploadAll(files.map((file) => uploadImageFile(file, handleImageUpload, allowedExtensions))).then((srcs) => {
|
|
300
302
|
const nodes = files.flatMap((file, index) => {
|
|
301
303
|
const src = srcs[index];
|
|
302
304
|
return src
|
|
@@ -318,18 +320,26 @@ const ImagePaste = Extension.create({
|
|
|
318
320
|
];
|
|
319
321
|
},
|
|
320
322
|
});
|
|
321
|
-
const LDEditor = ({ content, onChange, className, handleImageUpload, allowedImageHosts, }) => {
|
|
323
|
+
const LDEditor = ({ content, onChange, className, handleImageUpload, allowedImageHosts, allowedExtensions, }) => {
|
|
322
324
|
// 에디터는 첫 렌더의 extensions로 한 번만 만들어진다. 붙여넣기는 최신 props를 ref로 읽는다.
|
|
323
|
-
const pasteConfigRef = useRef({
|
|
325
|
+
const pasteConfigRef = useRef({
|
|
326
|
+
handleImageUpload,
|
|
327
|
+
allowedImageHosts,
|
|
328
|
+
allowedExtensions,
|
|
329
|
+
});
|
|
324
330
|
useEffect(() => {
|
|
325
|
-
pasteConfigRef.current = {
|
|
331
|
+
pasteConfigRef.current = {
|
|
332
|
+
handleImageUpload,
|
|
333
|
+
allowedImageHosts,
|
|
334
|
+
allowedExtensions,
|
|
335
|
+
};
|
|
326
336
|
});
|
|
327
337
|
return (_jsxs(EditorBase.Root, { extensions: [
|
|
328
338
|
...createEditorExtensions(),
|
|
329
339
|
ImagePaste.configure({ getConfig: () => pasteConfigRef.current }),
|
|
330
|
-
], content: content, onChange: onChange, className: className, children: [_jsx(EditorToolbar, { handleImageUpload: handleImageUpload }), _jsx(EditorBase.Content, {})] }));
|
|
340
|
+
], content: content, onChange: onChange, className: className, children: [_jsx(EditorToolbar, { handleImageUpload: handleImageUpload, allowedExtensions: allowedExtensions }), _jsx(EditorBase.Content, {})] }));
|
|
331
341
|
};
|
|
332
|
-
const EditorToolbar = ({ handleImageUpload, }) => {
|
|
342
|
+
const EditorToolbar = ({ handleImageUpload, allowedExtensions, }) => {
|
|
333
343
|
const [linkUrl, setLinkUrl] = useState('');
|
|
334
344
|
const [isMobile, setIsMobile] = useState(false);
|
|
335
345
|
const { editor } = useEditorContext();
|
|
@@ -375,7 +385,7 @@ const EditorToolbar = ({ handleImageUpload, }) => {
|
|
|
375
385
|
return;
|
|
376
386
|
const file = files[0];
|
|
377
387
|
try {
|
|
378
|
-
const src = await uploadImageFile(file, handleImageUpload);
|
|
388
|
+
const src = await uploadImageFile(file, handleImageUpload, allowedExtensions);
|
|
379
389
|
editor.commands.setImage({
|
|
380
390
|
src,
|
|
381
391
|
alt: file.name,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type ComponentProps, type CSSProperties } from 'react';
|
|
1
|
+
import { type ComponentProps, type CSSProperties, type ReactNode } from 'react';
|
|
2
2
|
import SelectBase, { type SelectOption } from '../../components/LDSelect/SelectBase.js';
|
|
3
3
|
import type { Color, Size, Variant } from '../../types/common.js';
|
|
4
4
|
import type { Subset } from '../../types/subset.js';
|
|
@@ -35,6 +35,8 @@ export interface LDSelectProps {
|
|
|
35
35
|
style?: CSSProperties;
|
|
36
36
|
/** 드롭다운 콘텐츠 영역 className */
|
|
37
37
|
contentClassName?: string;
|
|
38
|
+
/** items가 비었을 때 드롭다운에 표시할 내용 */
|
|
39
|
+
emptyMessage?: ReactNode;
|
|
38
40
|
/** 에러 상태 속성 */
|
|
39
41
|
'aria-invalid'?: boolean | 'true' | 'false';
|
|
40
42
|
/** 설명 요소 ID 연결 */
|
|
@@ -63,7 +65,7 @@ export type LDSelectItemTextProps = ComponentProps<typeof SelectBase.ItemText>;
|
|
|
63
65
|
export type LDSelectItemIndicatorProps = ComponentProps<typeof SelectBase.ItemIndicator>;
|
|
64
66
|
export type { SelectOption };
|
|
65
67
|
declare const LDSelect: {
|
|
66
|
-
({ items, placeholder, value, defaultValue, onChange, disabled, name, variant, color, size, align, className, style, contentClassName, "aria-invalid": ariaInvalid, "aria-describedby": ariaDescribedby, }: LDSelectProps): import("react/jsx-runtime").JSX.Element;
|
|
68
|
+
({ items, placeholder, value, defaultValue, onChange, disabled, name, variant, color, size, align, className, style, contentClassName, emptyMessage, "aria-invalid": ariaInvalid, "aria-describedby": ariaDescribedby, }: LDSelectProps): import("react/jsx-runtime").JSX.Element;
|
|
67
69
|
Root: ({ variant, color, size, align, disabled, className, ...props }: LDSelectRootProps) => import("react/jsx-runtime").JSX.Element;
|
|
68
70
|
Trigger: ({ className, ...props }: LDSelectTriggerProps) => import("react/jsx-runtime").JSX.Element;
|
|
69
71
|
Value: ({ className, ...props }: LDSelectValueProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LDSelect.d.ts","sourceRoot":"","sources":["../../../src/components/LDSelect/LDSelect.tsx"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,cAAc,EAEnB,KAAK,aAAa,
|
|
1
|
+
{"version":3,"file":"LDSelect.d.ts","sourceRoot":"","sources":["../../../src/components/LDSelect/LDSelect.tsx"],"names":[],"mappings":"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"}
|
|
@@ -146,12 +146,14 @@ const Item = ({ className, ...props }) => {
|
|
|
146
146
|
const ItemText = SelectBase.ItemText;
|
|
147
147
|
/** 선택된 옵션에만 표시되는 Styled Compound 영역입니다. */
|
|
148
148
|
const ItemIndicator = ({ className, ...props }) => (_jsx(SelectBase.ItemIndicator, { ...props, className: cn('ml-auto', className) }));
|
|
149
|
-
const LDSelect = ({ items, placeholder = '선택해주세요', value, defaultValue, onChange, disabled = false, name, variant, color = 'neutral', size, align = 'left', className, style, contentClassName, 'aria-invalid': ariaInvalid, 'aria-describedby': ariaDescribedby, }) => {
|
|
149
|
+
const LDSelect = ({ items, placeholder = '선택해주세요', value, defaultValue, onChange, disabled = false, name, variant, color = 'neutral', size, align = 'left', className, style, contentClassName, emptyMessage = '데이터가 없습니다.', 'aria-invalid': ariaInvalid, 'aria-describedby': ariaDescribedby, }) => {
|
|
150
150
|
const iconSize = iconSizes[size ?? 'medium'];
|
|
151
151
|
const resolvedValue = items.some((item) => item.value === value)
|
|
152
152
|
? value
|
|
153
153
|
: undefined;
|
|
154
|
-
return (_jsxs(Root, { value: resolvedValue, defaultValue: defaultValue, onChange: onChange, disabled: disabled, name: name, items: items, variant: variant, color: color, size: size, align: align, children: [_jsx(Trigger, { style: style, "aria-invalid": ariaInvalid, "aria-describedby": ariaDescribedby, className: className, children: _jsxs("div", { className: "flex w-full items-center justify-center gap-sm px-3", children: [_jsx(Value, { placeholder: placeholder }), _jsxs("span", { className: "relative shrink-0", style: { width: iconSize, height: iconSize }, children: [_jsx(ChevronDown, { size: iconSize, className: "absolute top-0 left-0 text-neutral500 opacity-100 transition-opacity duration-300 ease-out group-data-[state=open]:opacity-0" }), _jsx(ChevronUp, { size: iconSize, className: "absolute top-0 left-0 text-neutral500 opacity-0 transition-opacity duration-300 ease-out group-data-[state=open]:opacity-100" })] })] }) }), _jsx(Content, { className: contentClassName, children: items.
|
|
154
|
+
return (_jsxs(Root, { value: resolvedValue, defaultValue: defaultValue, onChange: onChange, disabled: disabled, name: name, items: items, variant: variant, color: color, size: size, align: align, children: [_jsx(Trigger, { style: style, "aria-invalid": ariaInvalid, "aria-describedby": ariaDescribedby, className: className, children: _jsxs("div", { className: "flex w-full items-center justify-center gap-sm px-3", children: [_jsx(Value, { placeholder: placeholder }), _jsxs("span", { className: "relative shrink-0", style: { width: iconSize, height: iconSize }, children: [_jsx(ChevronDown, { size: iconSize, className: "absolute top-0 left-0 text-neutral500 opacity-100 transition-opacity duration-300 ease-out group-data-[state=open]:opacity-0" }), _jsx(ChevronUp, { size: iconSize, className: "absolute top-0 left-0 text-neutral500 opacity-0 transition-opacity duration-300 ease-out group-data-[state=open]:opacity-100" })] })] }) }), _jsx(Content, { className: contentClassName, children: items.length === 0 ? (
|
|
155
|
+
// listbox는 option 자식이 필요하다(aria-required-children) — 선택 불가 option으로 둔다.
|
|
156
|
+
_jsx("li", { role: "option", "aria-disabled": "true", "aria-selected": "false", className: cn(itemVariants({ size: size ?? 'medium', selected: false }), 'cursor-default justify-center py-8 text-neutral500 hover:bg-transparent'), children: emptyMessage })) : (items.map((opt) => (_jsx(Item, { value: opt.value, children: _jsx(ItemText, { children: opt.label }) }, opt.value)))) })] }));
|
|
155
157
|
};
|
|
156
158
|
LDSelect.Root = Root;
|
|
157
159
|
LDSelect.Trigger = Trigger;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HeadlessTable.d.ts","sourceRoot":"","sources":["../../../src/components/LDTable/HeadlessTable.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"HeadlessTable.d.ts","sourceRoot":"","sources":["../../../src/components/LDTable/HeadlessTable.tsx"],"names":[],"mappings":"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"}
|
|
@@ -75,7 +75,7 @@ const HeadlessTable = ({ columns, data, rowCount, paginationState, onPageChange,
|
|
|
75
75
|
/**
|
|
76
76
|
* NOTE: <table> root에 넘길 width
|
|
77
77
|
* 컬럼 폭을 전부 합한 값.
|
|
78
|
-
* 하지만, 미지정 컬럼이 하나라도 있으면
|
|
78
|
+
* 하지만, 미지정 컬럼이 하나라도 있으면 width 대신 minWidth
|
|
79
79
|
*
|
|
80
80
|
* table-fixed에서 컬럼 width는 절대 px가 아니라 지분이다.
|
|
81
81
|
*
|
|
@@ -84,8 +84,11 @@ const HeadlessTable = ({ columns, data, rowCount, paginationState, onPageChange,
|
|
|
84
84
|
*
|
|
85
85
|
* "그래서 선언값을 지키려면 테이블 폭을 합계로 고정해 남는 공간을 없애야 한다"
|
|
86
86
|
*
|
|
87
|
-
* [CASE 1] 폭 미지정 컬럼이 있으면 =>
|
|
87
|
+
* [CASE 1] 폭 미지정 컬럼이 있으면 => minWidth만 (w-full 유지)
|
|
88
88
|
* [60, 170, 150, undefined] => 선언값을 유지하고, 미지정 컬럼은 남는 공간을 흡수
|
|
89
|
+
* 남는 공간이 없으면 미지정 컬럼이 0px로 사라지므로, 미지정 컬럼 자리를
|
|
90
|
+
* minSize로 채운 합계를 minWidth로 걸어 그 밑으로는 가로 스크롤로 넘긴다.
|
|
91
|
+
* [60, 170, 150, undefined(minSize 60)] => { minWidth: 440 }
|
|
89
92
|
*
|
|
90
93
|
* [CASE 2] 전부 지정 => 합계를 px로
|
|
91
94
|
* [60, 170, 150, 300] => { width: 680 } 컨테이너가 넓어도 680px에서 멈춘다.
|
|
@@ -95,8 +98,11 @@ const HeadlessTable = ({ columns, data, rowCount, paginationState, onPageChange,
|
|
|
95
98
|
* table-fixed는 테이블 폭을 max(width, 합계)
|
|
96
99
|
* CSS 2.1 §17.5.2.1 fixed table layout
|
|
97
100
|
*/
|
|
101
|
+
// ponytail: 미지정 컬럼이 여럿이면 table-fixed가 남는 공간을 균등 배분하므로 minSize가 서로 다르면 큰 쪽은 자기 minSize보다 좁아질 수 있음. 필요해지면 max(minSize) × 개수로 합산
|
|
98
102
|
const tableStyle = columnWidths.some((w) => w === undefined)
|
|
99
|
-
?
|
|
103
|
+
? {
|
|
104
|
+
minWidth: visibleLeafColumns.reduce((sum, c, i) => sum + (columnWidths[i] ?? c.columnDef.minSize ?? 0), 0),
|
|
105
|
+
} // [CASE 1]
|
|
100
106
|
: { width: columnWidths.reduce((sum, w) => sum + (w ?? 0), 0) }; // [CASE 2]
|
|
101
107
|
const handlePageChange = (page) => {
|
|
102
108
|
table.setPageIndex(page - 1);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LDCollapsibleTanstackTable.d.ts","sourceRoot":"","sources":["../../../src/components/LDTable/LDCollapsibleTanstackTable.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAGjD,OAAsB,EACpB,KAAK,kBAAkB,EACxB,MAAM,oCAAoC,CAAC;AAK5C,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,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,kBAAkB,CAAC,KAAK,EAAE,OAAO,CAAC,EAClC,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,UAAU,CAAC,EAAE,WAAW,CAAC;CAC1B;AAED,QAAA,MAAM,0BAA0B,GAAI,KAAK,EAAE,OAAO,EAAE,4OAiBjD,+BAA+B,CAAC,KAAK,EAAE,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"LDCollapsibleTanstackTable.d.ts","sourceRoot":"","sources":["../../../src/components/LDTable/LDCollapsibleTanstackTable.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAGjD,OAAsB,EACpB,KAAK,kBAAkB,EACxB,MAAM,oCAAoC,CAAC;AAK5C,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,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,kBAAkB,CAAC,KAAK,EAAE,OAAO,CAAC,EAClC,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,UAAU,CAAC,EAAE,WAAW,CAAC;CAC1B;AAED,QAAA,MAAM,0BAA0B,GAAI,KAAK,EAAE,OAAO,EAAE,4OAiBjD,+BAA+B,CAAC,KAAK,EAAE,OAAO,CAAC,4CA6MjD,CAAC;AAEF,eAAe,0BAA0B,CAAC"}
|
|
@@ -21,6 +21,9 @@ const LDCollapsibleTanstackTable = ({ columns, data, rowCount, paginationState,
|
|
|
21
21
|
}) }, hg.id))) }), _jsx(LDTable.Body, { children: rows.map((row) => (
|
|
22
22
|
// 한 행이 본문 행 + 펼침 행 2개로 나뉘므로 key는 Fragment에 붙인다.
|
|
23
23
|
_jsxs(Fragment, { children: [_jsx(LDTable.Row, { selected: row.getIsSelected(), className: cn('relative cursor-pointer', classNames?.row), onClick: () => {
|
|
24
|
+
// NOTE: 셀 텍스트를 드래그로 선택한 뒤의 click은 토글하지 않는다 (토글 리렌더가 선택을 풀어버림)
|
|
25
|
+
if (window.getSelection()?.toString())
|
|
26
|
+
return;
|
|
24
27
|
handleOpenRows(row.id);
|
|
25
28
|
row.toggleSelected();
|
|
26
29
|
}, children: row.getVisibleCells().map((cell, idx) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LDTanstackTable.d.ts","sourceRoot":"","sources":["../../../src/components/LDTable/LDTanstackTable.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAsB,EACpB,KAAK,kBAAkB,EACxB,MAAM,oCAAoC,CAAC;AAW5C,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,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,eAAe;IAC9B,+BAA+B;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,sBAAsB;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,gCAAgC;IAChC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB,CAAC,KAAK,EAAE,OAAO,CAAE,SAAQ,IAAI,CAChE,kBAAkB,CAAC,KAAK,EAAE,OAAO,CAAC,EAClC,UAAU,CACX;IACC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iBAAiB,CAAC,EAAE,SAAS,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,UAAU,CAAC,EAAE,WAAW,CAAC;IACzB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;CACjD;AAED,QAAA,MAAM,eAAe,GAAI,KAAK,EAAE,OAAO,EAAE,0OAiBtC,oBAAoB,CAAC,KAAK,EAAE,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"LDTanstackTable.d.ts","sourceRoot":"","sources":["../../../src/components/LDTable/LDTanstackTable.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAsB,EACpB,KAAK,kBAAkB,EACxB,MAAM,oCAAoC,CAAC;AAW5C,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,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,eAAe;IAC9B,+BAA+B;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,sBAAsB;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,gCAAgC;IAChC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB,CAAC,KAAK,EAAE,OAAO,CAAE,SAAQ,IAAI,CAChE,kBAAkB,CAAC,KAAK,EAAE,OAAO,CAAC,EAClC,UAAU,CACX;IACC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iBAAiB,CAAC,EAAE,SAAS,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,UAAU,CAAC,EAAE,WAAW,CAAC;IACzB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;CACjD;AAED,QAAA,MAAM,eAAe,GAAI,KAAK,EAAE,OAAO,EAAE,0OAiBtC,oBAAoB,CAAC,KAAK,EAAE,OAAO,CAAC,4CAwMtC,CAAC;AAEF,eAAe,eAAe,CAAC"}
|
|
@@ -25,7 +25,12 @@ const LDTanstackTable = ({ columns, data, rowCount, paginationState, onPageChang
|
|
|
25
25
|
});
|
|
26
26
|
};
|
|
27
27
|
const RowComp = enableRowDragging ? SortableRow : PlainRow;
|
|
28
|
-
const bodyRows = rows.map((row) => (_jsx(RowComp, { rowId: row.id, selected: row.getIsSelected(), className: classNames?.row, onClick: () =>
|
|
28
|
+
const bodyRows = rows.map((row) => (_jsx(RowComp, { rowId: row.id, selected: row.getIsSelected(), className: classNames?.row, onClick: () => {
|
|
29
|
+
// NOTE: 셀 텍스트를 드래그로 선택한 뒤의 click은 토글하지 않는다 (토글 리렌더가 선택을 풀어버림)
|
|
30
|
+
if (window.getSelection()?.toString())
|
|
31
|
+
return;
|
|
32
|
+
row.toggleSelected();
|
|
33
|
+
}, children: row.getVisibleCells().map((cell) => {
|
|
29
34
|
const c = getCell(cell);
|
|
30
35
|
return (_jsx(LDTable.Cell, { className: cn(classNames?.cell, c.meta?.cellClassName), children: _jsx("div", { className: cn('flex w-full items-center', c.meta?.headerAlign === 'left'
|
|
31
36
|
? 'justify-start'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../../src/constants/file.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc;;;;CAIjB,CAAC;AAEX,eAAO,MAAM,cAAc;;;CAGjB,CAAC;AAEX,uBAAuB;AACvB,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;CA2BlB,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,MAAM,OAAO,eAAe,CAAC;AACrD,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,SAAS,CAAC,CAAC;AAEjE,eAAO,MAAM,yBAAyB,EAEjC,SAAS,EAAE,CAAC;AAEjB,eAAO,MAAM,0BAA0B,ojBAEtC,CAAC;AAEF,2BAA2B;AAC3B,eAAO,MAAM,0BAA0B,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../../src/constants/file.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc;;;;CAIjB,CAAC;AAEX,eAAO,MAAM,cAAc;;;CAGjB,CAAC;AAEX,uBAAuB;AACvB,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;CA2BlB,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,MAAM,OAAO,eAAe,CAAC;AACrD,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,SAAS,CAAC,CAAC;AAEjE,eAAO,MAAM,yBAAyB,EAEjC,SAAS,EAAE,CAAC;AAEjB,eAAO,MAAM,0BAA0B,ojBAEtC,CAAC;AAEF,2BAA2B;AAC3B,eAAO,MAAM,0BAA0B,EAAE,SAAS,EASjD,CAAC;AAEF,iCAAiC;AACjC,eAAO,MAAM,gBAAgB,QAAwB,CAAC"}
|
package/dist/constants/file.js
CHANGED
package/dist/index.css
CHANGED
|
@@ -2780,6 +2780,9 @@
|
|
|
2780
2780
|
.py-5 {
|
|
2781
2781
|
padding-block: calc(var(--spacing) * 5);
|
|
2782
2782
|
}
|
|
2783
|
+
.py-8 {
|
|
2784
|
+
padding-block: calc(var(--spacing) * 8);
|
|
2785
|
+
}
|
|
2783
2786
|
.py-10 {
|
|
2784
2787
|
padding-block: calc(var(--spacing) * 10);
|
|
2785
2788
|
}
|
|
@@ -5573,7 +5576,7 @@
|
|
|
5573
5576
|
max-width: 100%;
|
|
5574
5577
|
height: auto !important;
|
|
5575
5578
|
display: block;
|
|
5576
|
-
margin:
|
|
5579
|
+
margin: 0 auto;
|
|
5577
5580
|
}
|
|
5578
5581
|
.ProseMirror img[style*='text-align: left'] {
|
|
5579
5582
|
margin-left: 0;
|
package/package.json
CHANGED