@croquiscom/pds 0.46.1 → 0.47.0

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 (38) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/components/checkbox/Checkbox.d.ts +1 -0
  3. package/dist/components/index.d.ts +1 -0
  4. package/dist/components/pagination/Pagination.d.ts +1 -1
  5. package/dist/components/table/Table.d.ts +69 -0
  6. package/dist/components/table/Table.stories.d.ts +23 -0
  7. package/dist/components/table/TableCol.d.ts +17 -0
  8. package/dist/components/table/TableHeader.d.ts +9 -0
  9. package/dist/components/table/TableRows.d.ts +11 -0
  10. package/dist/components/table/TableSortIndicator.d.ts +8 -0
  11. package/dist/components/table/index.d.ts +2 -0
  12. package/dist/components/table/reducer.d.ts +8 -0
  13. package/dist/components/table/storybook-helper/custom.argTypes.d.ts +39 -0
  14. package/dist/components/table/storybook-helper/index.d.ts +2 -0
  15. package/dist/components/table/storybook-helper/sampleData.d.ts +32 -0
  16. package/dist/components/table/types.d.ts +75 -0
  17. package/dist/components/table/utils.d.ts +8 -0
  18. package/dist/hooks/useUpdateEffect.d.ts +1 -0
  19. package/dist/index.es.js +3 -3
  20. package/dist/index.es.js.map +1 -1
  21. package/dist/index.js +3 -3
  22. package/dist/index.js.map +1 -1
  23. package/dist/locales/en.d.ts +3 -0
  24. package/dist/locales/ja.d.ts +3 -0
  25. package/dist/locales/ko.d.ts +3 -0
  26. package/locales/en.esm.js +3 -0
  27. package/locales/en.esm.js.map +1 -1
  28. package/locales/en.js +3 -0
  29. package/locales/en.js.map +1 -1
  30. package/locales/ja.esm.js +3 -0
  31. package/locales/ja.esm.js.map +1 -1
  32. package/locales/ja.js +3 -0
  33. package/locales/ja.js.map +1 -1
  34. package/locales/ko.esm.js +3 -0
  35. package/locales/ko.esm.js.map +1 -1
  36. package/locales/ko.js +3 -0
  37. package/locales/ko.js.map +1 -1
  38. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,21 @@
1
1
  # @croquiscom/pds
2
2
 
3
+ ## 0.47.0
4
+
5
+ ### Minor Changes
6
+
7
+ - b86657c: Table 컴포넌트 추가
8
+
9
+ ### Patch Changes
10
+
11
+ - f0bb138: feat: build 시 class, function 명 유지되도록 설정 변경
12
+
13
+ ## 0.46.2
14
+
15
+ ### Patch Changes
16
+
17
+ - df895c1: Pagination boundaryCount 오류 수정
18
+
3
19
  ## 0.46.1
4
20
 
5
21
  ### Patch Changes
@@ -2,6 +2,7 @@ import React from 'react';
2
2
  export interface CheckboxProps extends React.InputHTMLAttributes<HTMLInputElement> {
3
3
  checked?: boolean;
4
4
  disabled?: boolean;
5
+ indeterminate?: boolean;
5
6
  onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;
6
7
  }
7
8
  export declare const Checkbox: React.ForwardRefExoticComponent<CheckboxProps & React.RefAttributes<HTMLInputElement>>;
@@ -26,3 +26,4 @@ export * from './date-picker';
26
26
  export * from './time-picker';
27
27
  export * from './pagination';
28
28
  export * from './file-upload';
29
+ export * from './table';
@@ -2,7 +2,7 @@ import { HTMLAttributes } from 'react';
2
2
  export interface PaginationProps extends HTMLAttributes<HTMLUListElement> {
3
3
  disabled?: boolean;
4
4
  /**
5
- * 전체 페이지 갯수, 음수 또는 undefined일 경우 렌더되지 않습니다.
5
+ * 전체 페이지 갯수, 음수일 경우 렌더되지 않습니다.
6
6
  */
7
7
  totalPages: number;
8
8
  currentPage: number;
@@ -0,0 +1,69 @@
1
+ import React, { Key, ReactElement, PropsWithChildren, Ref } from 'react';
2
+ import { SortDirection, Scroll, TableColumnsType, TableRowsType } from './types';
3
+ export interface TableProps<DataType> {
4
+ className?: string;
5
+ /**
6
+ * 테이블 컬럼 목록
7
+ * - useMemo를 통한 메모이제이션된 값을 권장합니다.
8
+ */
9
+ columns: TableColumnsType<DataType>;
10
+ /**
11
+ * 테이블 로우 목록
12
+ * - useMemo를 통한 메모이제이션된 값을 권장합니다.
13
+ */
14
+ rows: TableRowsType<DataType>;
15
+ /**
16
+ * 테이블 스크롤 영역 너비/높이를 지정할 수 있습니다.
17
+ * - { x: number | string, y: number | string }
18
+ * - x: 가로 스크롤을 설정하고 스크롤 영역의 너비를 지정합니다.
19
+ * - y: 세로 스크롤을 설정하고 스크롤 영역의 높이를 지정합니다.
20
+ */
21
+ scroll?: Scroll;
22
+ /**
23
+ * 테이블 Loading 여부
24
+ * @default false
25
+ */
26
+ loading?: boolean;
27
+ /**
28
+ * 테이블 헤더 고정 여부, 세로 스크롤 발생시 고정됩니다.
29
+ * @default false
30
+ */
31
+ stickyHeader?: boolean;
32
+ /**
33
+ * Sort 대상 컬럼 아이디
34
+ */
35
+ sortBy?: string;
36
+ /**
37
+ * Sort 정렬 기준
38
+ */
39
+ sortDirection?: SortDirection;
40
+ /**
41
+ * Row Selection 사용 유무
42
+ * - true일 경우 각 테이블 로우는 고유 key가 존재해야 합니다.
43
+ */
44
+ selectableRows?: boolean;
45
+ /**
46
+ * Table 데이터가 없을 경우 노출되는 텍스트를 지정할 수 있습니다.
47
+ * @default '데이터가 없습니다'
48
+ */
49
+ noDataText?: string;
50
+ /**
51
+ * 테이블 로우 호버 스타일 사용 유무, 스펙아웃될 예정입니다.
52
+ * - rowspan to highlight all relevant rows 이슈 처리전 임시 props
53
+ * @default true
54
+ */
55
+ cellHoverStyle?: boolean;
56
+ /**
57
+ * Sort 이벤트, 대상 Column 아이디를 전달합니다.
58
+ */
59
+ onSortBy?: (sortBy: string) => void;
60
+ /**
61
+ * Select 이벤트, 선택된 rows, rows key 리스트를 전달합니다.
62
+ */
63
+ onSelectRows?: (selectedRowKeys: Key[], selectedRows: TableRowsType<DataType>) => void;
64
+ }
65
+ export declare const Table: <DataType extends object = any>(props: TableProps<DataType> & {
66
+ children?: React.ReactNode;
67
+ } & {
68
+ ref?: Ref<HTMLTableElement>;
69
+ }) => ReactElement;
@@ -0,0 +1,23 @@
1
+ import React from 'react';
2
+ import { ComponentMeta } from '@storybook/react';
3
+ declare const _default: ComponentMeta<(<DataType_1 extends object = any>(props: import("./Table").TableProps<DataType_1> & {
4
+ children?: React.ReactNode;
5
+ } & {
6
+ ref?: React.Ref<HTMLTableElement>;
7
+ }) => React.ReactElement<any, string | React.JSXElementConstructor<any>>)>;
8
+ export default _default;
9
+ export declare const Base: any;
10
+ export declare const ColumnAlignAndWidth: any;
11
+ export declare const CustomColumnCell: any;
12
+ export declare const CustomRowCell: any;
13
+ export declare const Loading: any;
14
+ export declare const NoData: any;
15
+ export declare const CustomNoDataText: any;
16
+ export declare const ColumnGroup: any;
17
+ export declare const CellRowSpan: any;
18
+ export declare const ColumnFixed: any;
19
+ export declare const StickyHeader: any;
20
+ export declare const Scroll: any;
21
+ export declare const Selection: any;
22
+ export declare const Sort: any;
23
+ export declare const WithPagination: any;
@@ -0,0 +1,17 @@
1
+ import React from 'react';
2
+ import { TableColumnBase, SortDirection } from './types';
3
+ export declare const COLUMNS_MIN_WIDTH = 48;
4
+ interface TableColProps extends TableColumnBase {
5
+ id: string;
6
+ fixedColWidth?: number;
7
+ stickyHeader?: boolean;
8
+ sortBy?: string;
9
+ sortDirection?: SortDirection;
10
+ onClick?: (sortBy: string) => void;
11
+ }
12
+ export declare const TableCol: React.ForwardRefExoticComponent<TableColProps & React.RefAttributes<HTMLTableCellElement>>;
13
+ export declare const TableColumn: import("@emotion/styled").StyledComponent<{
14
+ theme?: import("@emotion/react").Theme;
15
+ as?: React.ElementType<any>;
16
+ } & Omit<TableColProps, "id" | "text">, React.DetailedHTMLProps<React.ThHTMLAttributes<HTMLTableHeaderCellElement>, HTMLTableHeaderCellElement>, {}>;
17
+ export {};
@@ -0,0 +1,9 @@
1
+ /// <reference types="react" />
2
+ import { SelectRowsAction, TableRowsType } from './types';
3
+ import { TableProps } from './Table';
4
+ export interface TableHeaderProps<DataType> extends Pick<TableProps<DataType>, 'columns' | 'rows' | 'stickyHeader' | 'sortBy' | 'sortDirection' | 'onSortBy' | 'selectableRows'> {
5
+ allSelected?: boolean;
6
+ selectedRows?: TableRowsType<DataType>;
7
+ onSelectedRows?: (action: SelectRowsAction<DataType>) => void;
8
+ }
9
+ export declare const TableHeader: <DataType extends object = any>({ columns, rows, stickyHeader, sortBy, sortDirection, allSelected, selectedRows, selectableRows, onSelectedRows, onSortBy, }: TableHeaderProps<DataType>) => JSX.Element;
@@ -0,0 +1,11 @@
1
+ /// <reference types="react" />
2
+ import { TableProps } from './Table';
3
+ import { TableRowsType, SelectRowAction } from './types';
4
+ interface TableRowsProps<DataType> extends Pick<TableProps<DataType>, 'columns' | 'rows' | 'noDataText' | 'loading' | 'selectableRows' | 'cellHoverStyle'> {
5
+ tableContainerAttribute: number;
6
+ allSelected?: boolean;
7
+ selectedRows?: TableRowsType<DataType>;
8
+ onSelectedRow?: (action: SelectRowAction<DataType>) => void;
9
+ }
10
+ export declare const TableRows: <DataType extends object = any>({ columns, rows, loading, selectableRows, selectedRows, noDataText, cellHoverStyle, tableContainerAttribute, onSelectedRow, }: TableRowsProps<DataType>) => JSX.Element;
11
+ export {};
@@ -0,0 +1,8 @@
1
+ /// <reference types="react" />
2
+ import { SortDirection } from './types';
3
+ interface TableSortIndicatorProps {
4
+ isSorted: boolean;
5
+ sortDirection: SortDirection;
6
+ }
7
+ export declare const TableSortIndicator: ({ isSorted, sortDirection }: TableSortIndicatorProps) => JSX.Element;
8
+ export {};
@@ -0,0 +1,2 @@
1
+ export * from './Table';
2
+ export * from './types';
@@ -0,0 +1,8 @@
1
+ /// <reference types="react" />
2
+ import { TableState, TableAction } from './types';
3
+ export declare function tableReducer<DataType>(state: TableState<DataType>, action: TableAction<DataType>): {
4
+ allSelected: boolean;
5
+ selectedRows: import("./types").TableRowsType<DataType>;
6
+ selectedRowsKey: import("react").Key[];
7
+ selectableRows?: boolean;
8
+ };
@@ -0,0 +1,39 @@
1
+ import { Key } from 'react';
2
+ import { TableColumnBase, TableColumnsType, CellProps } from '../types';
3
+ /** storybook table type helper용 컴포넌트 */
4
+ export interface HelperTableColumnTypeProps<DataType> extends TableColumnBase {
5
+ /**
6
+ * 테이블 컬럼 unique id
7
+ * - Row data object와 연결할 key name으로 사용됩니다.
8
+ */
9
+ id: string;
10
+ /**
11
+ * 테이블 셀 rowSpan 속성, hidden 여부를 지정할 수 있습니다.
12
+ * - (row: DataType, index: index) => ({ rowSpan: number, hidden: boolean })
13
+ */
14
+ cellAttributes?: CellProps<DataType>;
15
+ }
16
+ export declare const HelperTableColumnType: <DataType extends object = any>(props: HelperTableColumnTypeProps<DataType>) => any;
17
+ export interface HelperTableColumnGroupTypeProps<DataType> extends TableColumnBase {
18
+ /**
19
+ * 테이블 컬럼 그룹
20
+ * - 상위 컬럼은 id 속성이 없습니다.
21
+ * - 매칭할 row 데이터 key 속성은 각 group 하위 컬럼 id입니다.
22
+ */
23
+ columnGroup?: TableColumnsType<DataType>;
24
+ /**
25
+ * 테이블 셀 rowSpan 속성, hidden 여부를 지정할 수 있습니다.
26
+ * - (row: DataType, index: index) => ({ rowSpan: number, hidden: boolean })
27
+ */
28
+ cellAttributes?: CellProps<DataType>;
29
+ }
30
+ export declare const HelperTableColumnGroupType: <DataType extends object = any>(props: HelperTableColumnGroupTypeProps<DataType>) => any;
31
+ export interface HelperTableRowsTypeProps {
32
+ /**
33
+ * Key: number | string
34
+ * - 테이블 로우 데이터 unique key값, selectableRows가 true일 경우 필수로 존재해야합니다.
35
+ * - DataType & { key: Key }
36
+ */
37
+ key?: Key;
38
+ }
39
+ export declare const HelperTableRowsType: (props: HelperTableRowsTypeProps) => any;
@@ -0,0 +1,2 @@
1
+ export * from './custom.argTypes';
2
+ export * from './sampleData';
@@ -0,0 +1,32 @@
1
+ import { Key, ReactNode } from 'react';
2
+ import { TableColumnsType, TableRowsType } from '../index';
3
+ export interface DataType {
4
+ key?: Key;
5
+ id: number;
6
+ name: string;
7
+ engName?: string;
8
+ code: number;
9
+ date: string;
10
+ price: string;
11
+ amount: number;
12
+ }
13
+ export interface DataTypeReactNode {
14
+ id: ReactNode;
15
+ name: ReactNode;
16
+ code: ReactNode;
17
+ date: ReactNode;
18
+ price: ReactNode;
19
+ amount: ReactNode;
20
+ }
21
+ export declare const columns: TableColumnsType<DataType | DataTypeReactNode>;
22
+ export declare const rows: TableRowsType<DataType>;
23
+ export declare const customColumns: TableColumnsType<DataType | DataTypeReactNode>;
24
+ export declare const customColumnCell: TableColumnsType<DataType | DataTypeReactNode>;
25
+ export declare const customRowCell: TableRowsType<DataTypeReactNode>;
26
+ export declare const groupColumns: TableColumnsType<DataType>;
27
+ export declare const groupRows: TableRowsType<DataType>;
28
+ export declare const RowSpanColumns: TableColumnsType<DataType | DataTypeReactNode>;
29
+ export declare const RowSpanRows: TableRowsType<DataType | DataTypeReactNode>;
30
+ export declare const fixedColumns: TableColumnsType<DataType | DataTypeReactNode>;
31
+ export declare const selectionRows: TableRowsType<DataType>;
32
+ export declare const sortColumns: TableColumnsType<DataType>;
@@ -0,0 +1,75 @@
1
+ import { Key, ReactNode, TdHTMLAttributes } from 'react';
2
+ import { CSSValueWithLength } from '../../styles';
3
+ export type SortDirection = 'asc' | 'desc' | 'default';
4
+ export type ColumnAlign = 'left' | 'right' | 'center';
5
+ export type Scroll = {
6
+ x?: CSSValueWithLength;
7
+ y?: CSSValueWithLength;
8
+ };
9
+ export type CellProps<DataType> = (row: DataType, index?: number) => Pick<TdHTMLAttributes<any>, 'rowSpan'> & {
10
+ hidden?: boolean;
11
+ };
12
+ export type TableColumnBase = {
13
+ /**
14
+ * 테이블 컬럼 텍스트
15
+ */
16
+ text: ReactNode;
17
+ /**
18
+ * Column Sort 여부
19
+ */
20
+ sortable?: boolean;
21
+ /**
22
+ * Column 너비를 지정할 수 있습니다.
23
+ */
24
+ width?: number;
25
+ /**
26
+ * 가로 스크롤 발생시 Column 고정 여부
27
+ * - true일 경우 width값 지정이 필수 입니다.
28
+ * - columnGroup이 있을 경우 적용되지 않습니다.
29
+ */
30
+ fixed?: boolean;
31
+ /**
32
+ * 컬럼 정렬을 지정할 수 있습니다.
33
+ * @default left
34
+ */
35
+ align?: ColumnAlign;
36
+ /**
37
+ * 셀 정렬을 지정할 수 있습니다.
38
+ * - 지정하지 않을 경우 컬럼 정렬값을 따릅니다.
39
+ * @default left
40
+ */
41
+ cellAlign?: ColumnAlign;
42
+ };
43
+ export interface TableColumnType<DataType> extends TableColumnBase {
44
+ id: Extract<keyof DataType, string>;
45
+ /**
46
+ * 테이블 셀 rowSpan 속성, hidden 여부를 지정할 수 있습니다.
47
+ * - (row: DataType, index: index) => ({ rowSpan: number, hidden: boolean })
48
+ */
49
+ cellAttributes?: CellProps<DataType>;
50
+ }
51
+ export interface TableColumnGroupType<DataType> extends Omit<TableColumnType<DataType>, 'id'> {
52
+ columnGroup: TableColumnsType<DataType>;
53
+ }
54
+ export type TableColumnsType<DataType = unknown> = Array<TableColumnType<DataType> | TableColumnGroupType<DataType>>;
55
+ export type TableRowType<DataType> = DataType & {
56
+ key?: Key;
57
+ };
58
+ export type TableRowsType<DataType = unknown> = Array<TableRowType<DataType>>;
59
+ export interface TableState<DataType = unknown> {
60
+ allSelected?: boolean;
61
+ selectableRows?: boolean;
62
+ selectedRowsKey?: Key[];
63
+ selectedRows?: TableRowsType<DataType>;
64
+ }
65
+ export interface SelectRowsAction<DataType> {
66
+ type: 'SELECT_ROWS';
67
+ rows: TableRowsType<DataType>;
68
+ }
69
+ export interface SelectRowAction<DataType> {
70
+ type: 'SELECT_ROW';
71
+ row: TableRowType<DataType>;
72
+ selected: boolean;
73
+ totalRowCount: number;
74
+ }
75
+ export type TableAction<DataType> = SelectRowsAction<DataType> | SelectRowAction<DataType>;
@@ -0,0 +1,8 @@
1
+ import { TableColumnsType } from './types';
2
+ export interface UseTableColumnsProps<DataType> {
3
+ columns: TableColumnsType<DataType>;
4
+ }
5
+ export declare function getColGroup<DataType>({ columns }: UseTableColumnsProps<DataType>): any[];
6
+ export declare function getGroupColumns<DataType>({ columns }: UseTableColumnsProps<DataType>): TableColumnsType<DataType>;
7
+ export declare function getFlattenColumns<DataType>({ columns }: UseTableColumnsProps<DataType>): TableColumnsType<DataType>;
8
+ export declare function getFixedMergeColumn<DataType>(columns: TableColumnsType<DataType>, selectableRows: boolean, columnCount: number): number;
@@ -0,0 +1 @@
1
+ export declare const useUpdateEffect: (callback: () => void, dependencies?: Array<unknown>) => void;