@croquiscom/pds 0.46.2 → 0.47.1

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 (40) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/dist/components/checkbox/Checkbox.d.ts +1 -0
  3. package/dist/components/date-picker/DateRangePicker.d.ts +8 -2
  4. package/dist/components/date-picker/DateRangePicker.stories.d.ts +3 -1
  5. package/dist/components/date-picker/DateRangePreset.d.ts +2 -2
  6. package/dist/components/index.d.ts +1 -0
  7. package/dist/components/table/Table.d.ts +69 -0
  8. package/dist/components/table/Table.stories.d.ts +23 -0
  9. package/dist/components/table/TableCol.d.ts +17 -0
  10. package/dist/components/table/TableHeader.d.ts +9 -0
  11. package/dist/components/table/TableRows.d.ts +11 -0
  12. package/dist/components/table/TableSortIndicator.d.ts +8 -0
  13. package/dist/components/table/index.d.ts +2 -0
  14. package/dist/components/table/reducer.d.ts +8 -0
  15. package/dist/components/table/storybook-helper/custom.argTypes.d.ts +39 -0
  16. package/dist/components/table/storybook-helper/index.d.ts +2 -0
  17. package/dist/components/table/storybook-helper/sampleData.d.ts +32 -0
  18. package/dist/components/table/types.d.ts +75 -0
  19. package/dist/components/table/utils.d.ts +8 -0
  20. package/dist/hooks/useUpdateEffect.d.ts +1 -0
  21. package/dist/index.es.js +3 -3
  22. package/dist/index.es.js.map +1 -1
  23. package/dist/index.js +3 -3
  24. package/dist/index.js.map +1 -1
  25. package/dist/locales/en.d.ts +3 -0
  26. package/dist/locales/ja.d.ts +3 -0
  27. package/dist/locales/ko.d.ts +3 -0
  28. package/locales/en.esm.js +3 -0
  29. package/locales/en.esm.js.map +1 -1
  30. package/locales/en.js +3 -0
  31. package/locales/en.js.map +1 -1
  32. package/locales/ja.esm.js +3 -0
  33. package/locales/ja.esm.js.map +1 -1
  34. package/locales/ja.js +3 -0
  35. package/locales/ja.js.map +1 -1
  36. package/locales/ko.esm.js +3 -0
  37. package/locales/ko.esm.js.map +1 -1
  38. package/locales/ko.js +3 -0
  39. package/locales/ko.js.map +1 -1
  40. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,27 @@
1
1
  # @croquiscom/pds
2
2
 
3
+ ## 0.47.1
4
+
5
+ ### Patch Changes
6
+
7
+ - 2201206: DateRangePicker RadioGroup DatePreset 지원 추가
8
+
9
+ ## BreakPoint
10
+
11
+ - DateRangePicker DatePreset 팝오버 요소 외부에서 제공되는 RadioGroup 추가되었습니다.
12
+ - DatePreset 해당 항목을 선택하면 현재 들고 있는 상태를 버리고, onChange(start, end)로 바뀐 값을 내보낸 뒤 팝업을 닫습니다.
13
+ - currentMonth는 range.to 날짜 기준으로 세팅됩니다.
14
+
15
+ ## 0.47.0
16
+
17
+ ### Minor Changes
18
+
19
+ - b86657c: Table 컴포넌트 추가
20
+
21
+ ### Patch Changes
22
+
23
+ - f0bb138: feat: build 시 class, function 명 유지되도록 설정 변경
24
+
3
25
  ## 0.46.2
4
26
 
5
27
  ### 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>>;
@@ -3,6 +3,7 @@ import { DateRange } from 'react-day-picker';
3
3
  import { Duration } from 'date-fns';
4
4
  import { DatePickerBaseProps } from './DatePicker';
5
5
  export type DatePresetItem = {
6
+ id: number;
6
7
  label: string;
7
8
  range: [Date, Date];
8
9
  };
@@ -10,10 +11,15 @@ export type DatePreset = DatePresetItem[];
10
11
  export type Dates = DateRange;
11
12
  export interface DateRangePickerProps extends DatePickerBaseProps {
12
13
  /**
13
- * 좌측 DatePreset 사용 유무
14
+ * 좌측 팝오버 DatePreset 사용 유무
14
15
  * @default false
15
16
  */
16
17
  showDatePreset?: boolean;
18
+ /**
19
+ * RadioGroup DatePreset 사용 유무
20
+ * @default false
21
+ */
22
+ showRadioGroupDatePreset?: boolean;
17
23
  /**
18
24
  * [Dates Type](https://github.com/gpbl/react-day-picker/blob/master/packages/react-day-picker/src/types/Matchers.ts#L73)
19
25
  */
@@ -36,4 +42,4 @@ export interface DateRangePickerProps extends DatePickerBaseProps {
36
42
  numberOfMonths?: number;
37
43
  onChange?: (start: Dates['from'], end: Dates['to']) => void;
38
44
  }
39
- export declare const DateRangePicker: ({ width, error, disabled, className, showDatePreset, dates, maxDate, minDate, maxRange, numberOfMonths, showRemoveButton, opened: openProp, customDatePreset, onOpen, onClose, onChange, }: DateRangePickerProps) => JSX.Element;
45
+ export declare const DateRangePicker: ({ width, error, disabled, className, showDatePreset, showRadioGroupDatePreset, dates, maxDate, minDate, maxRange, numberOfMonths, showRemoveButton, opened: openProp, customDatePreset, onOpen, onClose, onChange, }: DateRangePickerProps) => JSX.Element;
@@ -1,6 +1,6 @@
1
1
  /// <reference types="react" />
2
2
  import { ComponentMeta } from '@storybook/react';
3
- declare const _default: ComponentMeta<({ width, error, disabled, className, showDatePreset, dates, maxDate, minDate, maxRange, numberOfMonths, showRemoveButton, opened: openProp, customDatePreset, onOpen, onClose, onChange, }: import("./DateRangePicker").DateRangePickerProps) => JSX.Element>;
3
+ declare const _default: ComponentMeta<({ width, error, disabled, className, showDatePreset, showRadioGroupDatePreset, dates, maxDate, minDate, maxRange, numberOfMonths, showRemoveButton, opened: openProp, customDatePreset, onOpen, onClose, onChange, }: import("./DateRangePicker").DateRangePickerProps) => JSX.Element>;
4
4
  export default _default;
5
5
  export declare const Base: any;
6
6
  export declare const Disabled: any;
@@ -11,3 +11,5 @@ export declare const MinDate: any;
11
11
  export declare const MaxDate: any;
12
12
  export declare const MaxRange: any;
13
13
  export declare const WithDatePreset: any;
14
+ export declare const WithRadioGroupDatePreset: any;
15
+ export declare const WithAllDatePreset: any;
@@ -1,8 +1,8 @@
1
1
  /// <reference types="react" />
2
2
  import { DatePreset, DatePresetItem } from './DateRangePicker';
3
3
  export interface DateRangePresetProps {
4
- selected?: DatePresetItem['label'];
4
+ selected?: DatePresetItem['id'];
5
5
  items: DatePreset;
6
- onChange?: ({ label, range }: DatePresetItem) => void;
6
+ onChange?: ({ label, range, id }: DatePresetItem) => void;
7
7
  }
8
8
  export declare const DataRangePreset: ({ selected, items, onChange }: DateRangePresetProps) => JSX.Element;
@@ -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';
@@ -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;