@loword/loword-design-system 0.0.6 → 0.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/Icon/LucideIcon.d.ts.map +1 -1
- package/dist/components/Icon/LucideIcon.js +9 -1
- package/dist/components/LDAnchor/AnchorBase.d.ts +24 -0
- package/dist/components/LDAnchor/AnchorBase.d.ts.map +1 -0
- package/dist/components/LDAnchor/AnchorBase.js +69 -0
- package/dist/components/LDAnchor/LDAnchor.d.ts +10 -0
- package/dist/components/LDAnchor/LDAnchor.d.ts.map +1 -0
- package/dist/components/LDAnchor/LDAnchor.js +14 -0
- package/dist/components/LDAutoComplete/AutoCompleteBase.d.ts +36 -0
- package/dist/components/LDAutoComplete/AutoCompleteBase.d.ts.map +1 -0
- package/dist/components/LDAutoComplete/AutoCompleteBase.js +175 -0
- package/dist/components/LDAutoComplete/LDAutoComplete.d.ts +19 -0
- package/dist/components/LDAutoComplete/LDAutoComplete.d.ts.map +1 -0
- package/dist/components/LDAutoComplete/LDAutoComplete.js +7 -0
- package/dist/components/LDEditor/EditorBase.js +1 -1
- package/dist/components/LDEditor/LDEditor.d.ts.map +1 -1
- package/dist/components/LDEditor/LDEditor.js +1 -1
- package/dist/components/LDFileUpload/FileUploadBase.d.ts +52 -0
- package/dist/components/LDFileUpload/FileUploadBase.d.ts.map +1 -0
- package/dist/components/LDFileUpload/FileUploadBase.js +186 -0
- package/dist/components/LDFileUpload/LDFileUpload.d.ts +16 -0
- package/dist/components/LDFileUpload/LDFileUpload.d.ts.map +1 -0
- package/dist/components/LDFileUpload/LDFileUpload.js +8 -0
- package/dist/components/LDFileUpload/LDFileUploadList.d.ts +17 -0
- package/dist/components/LDFileUpload/LDFileUploadList.d.ts.map +1 -0
- package/dist/components/LDFileUpload/LDFileUploadList.js +8 -0
- package/dist/components/LDFileUpload/LDImageUpload.d.ts +16 -0
- package/dist/components/LDFileUpload/LDImageUpload.d.ts.map +1 -0
- package/dist/components/LDFileUpload/LDImageUpload.js +8 -0
- package/dist/components/LDFileUpload/LDImageUploadList.d.ts +17 -0
- package/dist/components/LDFileUpload/LDImageUploadList.d.ts.map +1 -0
- package/dist/components/LDFileUpload/LDImageUploadList.js +8 -0
- package/dist/components/LDInput/LDInput.d.ts +2 -1
- package/dist/components/LDInput/LDInput.d.ts.map +1 -1
- package/dist/components/LDInput/LDInput.js +6 -6
- package/dist/constants/file.d.ts +1 -0
- package/dist/constants/file.d.ts.map +1 -1
- package/dist/constants/file.js +1 -0
- package/dist/index.css +239 -4
- package/dist/index.d.ts +8 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -2
- package/dist/utils/file.d.ts +2 -0
- package/dist/utils/file.d.ts.map +1 -1
- package/dist/utils/file.js +35 -2
- package/package.json +1 -1
- package/src/styles/components/auto-complete.css +72 -0
- package/src/styles/components/index.css +1 -0
- package/dist/components/LDFileUpload/LDFileUploadBase.d.ts +0 -50
- package/dist/components/LDFileUpload/LDFileUploadBase.d.ts.map +0 -1
- package/dist/components/LDFileUpload/LDFileUploadBase.js +0 -102
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
@utility autocomplete-2xs {
|
|
2
|
+
--autocomplete-item-min-height: var(--spacing_32);
|
|
3
|
+
--autocomplete-item-padding-x: var(--spacing_4);
|
|
4
|
+
--autocomplete-item-padding-y: var(--spacing_4);
|
|
5
|
+
--autocomplete-secondary-font-size: var(--text-display10);
|
|
6
|
+
--autocomplete-secondary-line-height: var(--leading-display10);
|
|
7
|
+
--autocomplete-secondary-letter-spacing: var(--tracking-display10);
|
|
8
|
+
@apply display10;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
@utility autocomplete-xs {
|
|
12
|
+
--autocomplete-item-min-height: var(--spacing_40);
|
|
13
|
+
--autocomplete-item-padding-x: var(--spacing_8);
|
|
14
|
+
--autocomplete-item-padding-y: var(--spacing_4);
|
|
15
|
+
--autocomplete-secondary-font-size: var(--text-display10);
|
|
16
|
+
--autocomplete-secondary-line-height: var(--leading-display10);
|
|
17
|
+
--autocomplete-secondary-letter-spacing: var(--tracking-display10);
|
|
18
|
+
@apply display12;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
@utility autocomplete-sm {
|
|
22
|
+
--autocomplete-item-min-height: var(--spacing_60);
|
|
23
|
+
--autocomplete-item-padding-x: var(--spacing_16);
|
|
24
|
+
--autocomplete-item-padding-y: var(--spacing_12);
|
|
25
|
+
--autocomplete-secondary-font-size: var(--text-display12);
|
|
26
|
+
--autocomplete-secondary-line-height: var(--leading-display12);
|
|
27
|
+
--autocomplete-secondary-letter-spacing: var(--tracking-display12);
|
|
28
|
+
@apply display14;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
@utility autocomplete-md {
|
|
32
|
+
--autocomplete-item-min-height: var(--spacing_60);
|
|
33
|
+
--autocomplete-item-padding-x: var(--spacing_16);
|
|
34
|
+
--autocomplete-item-padding-y: var(--spacing_12);
|
|
35
|
+
--autocomplete-secondary-font-size: var(--text-display12);
|
|
36
|
+
--autocomplete-secondary-line-height: var(--leading-display12);
|
|
37
|
+
--autocomplete-secondary-letter-spacing: var(--tracking-display12);
|
|
38
|
+
@apply display14;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
@utility autocomplete-lg {
|
|
42
|
+
--autocomplete-item-min-height: var(--spacing_60);
|
|
43
|
+
--autocomplete-item-padding-x: var(--spacing_16);
|
|
44
|
+
--autocomplete-item-padding-y: var(--spacing_12);
|
|
45
|
+
--autocomplete-secondary-font-size: var(--text-display12);
|
|
46
|
+
--autocomplete-secondary-line-height: var(--leading-display12);
|
|
47
|
+
--autocomplete-secondary-letter-spacing: var(--tracking-display12);
|
|
48
|
+
@apply display14;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
@utility autocomplete-xl {
|
|
52
|
+
--autocomplete-item-min-height: var(--spacing_60);
|
|
53
|
+
--autocomplete-item-padding-x: var(--spacing_16);
|
|
54
|
+
--autocomplete-item-padding-y: var(--spacing_12);
|
|
55
|
+
--autocomplete-secondary-font-size: var(--text-display12);
|
|
56
|
+
--autocomplete-secondary-line-height: var(--leading-display12);
|
|
57
|
+
--autocomplete-secondary-letter-spacing: var(--tracking-display12);
|
|
58
|
+
@apply display14;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
@utility autocomplete-item {
|
|
62
|
+
min-height: var(--autocomplete-item-min-height);
|
|
63
|
+
padding-inline: var(--autocomplete-item-padding-x);
|
|
64
|
+
padding-block: var(--autocomplete-item-padding-y);
|
|
65
|
+
font-weight: var(--font-regular);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
@utility autocomplete-secondary {
|
|
69
|
+
font-size: var(--autocomplete-secondary-font-size);
|
|
70
|
+
line-height: var(--autocomplete-secondary-line-height);
|
|
71
|
+
letter-spacing: var(--autocomplete-secondary-letter-spacing);
|
|
72
|
+
}
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import { Dispatch, type ReactNode, SetStateAction } from 'react';
|
|
2
|
-
import { TMimeType } from '../../constants/file.js';
|
|
3
|
-
import { type LDButtonProps } from '../../components/LDButton/LDButton.js';
|
|
4
|
-
import { IFile } from '../../utils/file.js';
|
|
5
|
-
interface FileUploadContextType {
|
|
6
|
-
recommendedSize?: {
|
|
7
|
-
width: number;
|
|
8
|
-
height: number;
|
|
9
|
-
};
|
|
10
|
-
maxSize: number;
|
|
11
|
-
allowedExtensions: TMimeType[];
|
|
12
|
-
fileList: IFile[];
|
|
13
|
-
setFileList: Dispatch<SetStateAction<IFile[]>>;
|
|
14
|
-
maxFileCount: number;
|
|
15
|
-
}
|
|
16
|
-
export declare const useFileUploadContext: () => FileUploadContextType;
|
|
17
|
-
interface RootProps {
|
|
18
|
-
recommendedSize?: {
|
|
19
|
-
width: number;
|
|
20
|
-
height: number;
|
|
21
|
-
};
|
|
22
|
-
maxSize: number;
|
|
23
|
-
allowedExtensions: TMimeType[];
|
|
24
|
-
fileList: IFile[] | [];
|
|
25
|
-
setFileList: Dispatch<SetStateAction<IFile[] | []>>;
|
|
26
|
-
maxFileCount?: number;
|
|
27
|
-
className?: string;
|
|
28
|
-
children?: ReactNode;
|
|
29
|
-
}
|
|
30
|
-
interface LDInputProps extends LDButtonProps<'button'> {
|
|
31
|
-
onChangeFile: ({ fileName, fileBase64, file, }: {
|
|
32
|
-
fileName: string;
|
|
33
|
-
fileBase64: string;
|
|
34
|
-
file: File;
|
|
35
|
-
}) => Promise<string | void>;
|
|
36
|
-
label?: string;
|
|
37
|
-
}
|
|
38
|
-
export declare const LDFileUploadBase: {
|
|
39
|
-
Root: ({ recommendedSize, maxSize, allowedExtensions, maxFileCount, fileList, setFileList, className, children, }: RootProps) => import("react/jsx-runtime").JSX.Element;
|
|
40
|
-
LDInput: ({ onChangeFile, label, ...props }: LDInputProps) => import("react/jsx-runtime").JSX.Element;
|
|
41
|
-
CardList: ({ emptyContent, className, }: {
|
|
42
|
-
emptyContent?: ReactNode;
|
|
43
|
-
className?: string;
|
|
44
|
-
}) => import("react/jsx-runtime").JSX.Element | null;
|
|
45
|
-
Description: ({ className }: {
|
|
46
|
-
className?: string;
|
|
47
|
-
}) => import("react/jsx-runtime").JSX.Element;
|
|
48
|
-
};
|
|
49
|
-
export default LDFileUploadBase;
|
|
50
|
-
//# sourceMappingURL=LDFileUploadBase.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"LDFileUploadBase.d.ts","sourceRoot":"","sources":["../../../src/components/LDFileUpload/LDFileUploadBase.tsx"],"names":[],"mappings":"AAEA,OAAO,EAEL,QAAQ,EACR,KAAK,SAAS,EACd,cAAc,EAGf,MAAM,OAAO,CAAC;AAEf,OAAO,EAAmB,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAiB,EACf,KAAK,aAAa,EACnB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAGL,KAAK,EAKN,MAAM,kBAAkB,CAAC;AAG1B,UAAU,qBAAqB;IAC7B,eAAe,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,SAAS,EAAE,CAAC;IAC/B,QAAQ,EAAE,KAAK,EAAE,CAAC;IAClB,WAAW,EAAE,QAAQ,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAC/C,YAAY,EAAE,MAAM,CAAC;CACtB;AAID,eAAO,MAAM,oBAAoB,6BAUhC,CAAC;AAEF,UAAU,SAAS;IACjB,eAAe,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,SAAS,EAAE,CAAC;IAC/B,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;IACvB,WAAW,EAAE,QAAQ,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;IACpD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AA8BD,UAAU,YAAa,SAAQ,aAAa,CAAC,QAAQ,CAAC;IACpD,YAAY,EAAE,CAAC,EACb,QAAQ,EACR,UAAU,EACV,IAAI,GACL,EAAE;QACD,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,IAAI,EAAE,IAAI,CAAC;KACZ,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAmJD,eAAO,MAAM,gBAAgB;uHAjL1B,SAAS;iDAoCT,YAAY;6CA2EZ;QACD,YAAY,CAAC,EAAE,SAAS,CAAC;QACzB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB;iCA6CmC;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE;CAuBzD,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
|
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
-
import { createContext, useContext, } from 'react';
|
|
4
|
-
import cn from '../../utils/cn.js';
|
|
5
|
-
import { FILE_EXTENSIONS } from '../../constants/file.js';
|
|
6
|
-
import LDButton from '../../components/LDButton/LDButton.js';
|
|
7
|
-
import { fileToBase64, getFileSizeUnit, isImage, validAllowedExtesions, validFileSize, validImageSize, } from '../../utils/file.js';
|
|
8
|
-
import LDToast from '../../components/LDToast/LDToast.js';
|
|
9
|
-
const FileUploadContext = createContext(null);
|
|
10
|
-
export const useFileUploadContext = () => {
|
|
11
|
-
const fileUploadContext = useContext(FileUploadContext);
|
|
12
|
-
if (!fileUploadContext) {
|
|
13
|
-
throw new Error('LDFileUploadBase 하위 컴포넌트는 Root 내부에서 사용해야 합니다.');
|
|
14
|
-
}
|
|
15
|
-
return fileUploadContext;
|
|
16
|
-
};
|
|
17
|
-
const Root = ({ recommendedSize, maxSize, allowedExtensions, maxFileCount, fileList, setFileList, className, children, }) => {
|
|
18
|
-
// const [file, setFile] = useState<IFile | null>(null);
|
|
19
|
-
return (_jsx(FileUploadContext.Provider, { value: {
|
|
20
|
-
recommendedSize,
|
|
21
|
-
maxSize,
|
|
22
|
-
allowedExtensions,
|
|
23
|
-
maxFileCount: maxFileCount ?? 1,
|
|
24
|
-
fileList,
|
|
25
|
-
setFileList,
|
|
26
|
-
}, children: _jsx("div", { className: cn('w-full', className), children: children }) }));
|
|
27
|
-
};
|
|
28
|
-
const LDInput = ({ onChangeFile, label = '파일 선택', ...props }) => {
|
|
29
|
-
const { allowedExtensions, maxSize, fileList, setFileList, maxFileCount } = useFileUploadContext();
|
|
30
|
-
const getFileError = async (file) => {
|
|
31
|
-
if (!validAllowedExtesions(file, allowedExtensions)) {
|
|
32
|
-
const allowed = allowedExtensions
|
|
33
|
-
.map((item) => FILE_EXTENSIONS[item].toUpperCase())
|
|
34
|
-
.join(', ');
|
|
35
|
-
return `지원하지 않는 파일 형식입니다. ${allowed} 파일만 업로드 가능합니다.`;
|
|
36
|
-
}
|
|
37
|
-
if (!validFileSize(file, maxSize)) {
|
|
38
|
-
return `파일 크기가 너무 큽니다. ${getFileSizeUnit(maxSize)} 이하 파일을 선택해주세요.`;
|
|
39
|
-
}
|
|
40
|
-
if (isImage(file.name) && !(await validImageSize(file))) {
|
|
41
|
-
return '이미지 해상도가 너무 큽니다. 더 작은 크기의 이미지를 선택해주세요.';
|
|
42
|
-
}
|
|
43
|
-
return null;
|
|
44
|
-
};
|
|
45
|
-
const handleFile = async (e) => {
|
|
46
|
-
const files = e.target.files;
|
|
47
|
-
if (!files)
|
|
48
|
-
return;
|
|
49
|
-
for (const file of files) {
|
|
50
|
-
const error = await getFileError(file);
|
|
51
|
-
if (error) {
|
|
52
|
-
LDToast.error(error);
|
|
53
|
-
return;
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
for (const file of files) {
|
|
57
|
-
try {
|
|
58
|
-
const data = await fileToBase64(file);
|
|
59
|
-
const src = await onChangeFile({ ...data, file });
|
|
60
|
-
if (src) {
|
|
61
|
-
setFileList((prev) => [...prev, { ...data, src }]);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
catch (error) {
|
|
65
|
-
if (error instanceof Error) {
|
|
66
|
-
LDToast.error(error.message);
|
|
67
|
-
return;
|
|
68
|
-
}
|
|
69
|
-
LDToast.error('파일 업로드 중 문제가 발생했습니다. 잠시후 다시 시도해주세요.');
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
};
|
|
73
|
-
return (_jsxs(LDButton, { as: "label", ...props, children: [label, _jsx("input", { type: "file", multiple: maxFileCount > 1, onClick: (e) => (e.currentTarget.value = ''), onChange: (e) => handleFile(e), className: "sr-only" })] }));
|
|
74
|
-
};
|
|
75
|
-
const CardList = ({ emptyContent, className, }) => {
|
|
76
|
-
/*
|
|
77
|
-
이미지인 경우
|
|
78
|
-
이미지가 아닌 파일인 경우
|
|
79
|
-
*/
|
|
80
|
-
const { fileList } = useFileUploadContext();
|
|
81
|
-
if (fileList.length <= 0)
|
|
82
|
-
return emptyContent ? _jsx(_Fragment, { children: emptyContent }) : null;
|
|
83
|
-
return (_jsxs(_Fragment, { children: [_jsx(_Fragment, { children: JSON.stringify(fileList, null, 2) }), _jsx(_Fragment, { children: 'length: ' + fileList.length }), _jsx("div", { className: cn('flex flex-row', className), children: fileList?.map((file, idx) => (_jsx("div", { className: "size-12 overflow-hidden", children: _jsx("img", { src: file?.src, alt: file?.fileName, className: "object-cover" }) }, `${file.fileName}_${idx}`))) })] }));
|
|
84
|
-
};
|
|
85
|
-
// const CardList = ({}) => {
|
|
86
|
-
// return <></>;
|
|
87
|
-
// };
|
|
88
|
-
const Description = ({ className }) => {
|
|
89
|
-
const { recommendedSize, maxSize, allowedExtensions } = useFileUploadContext();
|
|
90
|
-
const recommendedSizeText = recommendedSize &&
|
|
91
|
-
`권장 사이즈 ${recommendedSize.width}x${recommendedSize.height}, `;
|
|
92
|
-
const requiredText = `최대 크기 ${getFileSizeUnit(maxSize)}`;
|
|
93
|
-
const extensionsText = ` (${allowedExtensions.map((item) => FILE_EXTENSIONS[item]).join(', ')})`;
|
|
94
|
-
return (_jsxs("p", { className: cn('display14 text-neutral400 semibold', className), children: [recommendedSizeText, requiredText, extensionsText] }));
|
|
95
|
-
};
|
|
96
|
-
export const LDFileUploadBase = {
|
|
97
|
-
Root,
|
|
98
|
-
LDInput,
|
|
99
|
-
CardList,
|
|
100
|
-
Description,
|
|
101
|
-
};
|
|
102
|
-
export default LDFileUploadBase;
|