playbook_ui 14.9.0.pre.alpha.PLAY1660reactdropzone5020 → 14.9.0.pre.alpha.PLAY1731inputmasking4866
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.
- checksums.yaml +4 -4
- data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_custom.jsx +49 -53
- data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_custom_rails.html.erb +36 -29
- data/app/pb_kits/playbook/pb_collapsible/_collapsible.tsx +4 -9
- data/app/pb_kits/playbook/pb_collapsible/child_kits/CollapsibleContent.tsx +2 -2
- data/app/pb_kits/playbook/pb_collapsible/child_kits/CollapsibleMain.tsx +2 -2
- data/app/pb_kits/playbook/pb_drawer/_drawer.tsx +2 -2
- data/app/pb_kits/playbook/pb_file_upload/_file_upload.tsx +15 -24
- data/app/pb_kits/playbook/pb_file_upload/docs/_file_upload_accept.jsx +1 -3
- data/app/pb_kits/playbook/pb_file_upload/docs/_file_upload_custom_description.jsx +1 -4
- data/app/pb_kits/playbook/pb_file_upload/docs/_file_upload_max_size.jsx +1 -1
- data/app/pb_kits/playbook/pb_layout/_layout.tsx +11 -30
- data/app/pb_kits/playbook/pb_link/_link.scss +3 -3
- data/app/pb_kits/playbook/pb_skeleton_loading/docs/_skeleton_loading_height_width.jsx +0 -2
- data/app/pb_kits/playbook/pb_skeleton_loading/docs/example.yml +1 -2
- data/app/pb_kits/playbook/pb_skeleton_loading/docs/index.js +0 -2
- data/app/pb_kits/playbook/pb_table/docs/example.yml +0 -5
- data/app/pb_kits/playbook/pb_table/docs/index.js +0 -5
- data/app/pb_kits/playbook/pb_table/index.ts +26 -100
- data/app/pb_kits/playbook/pb_table/styles/_all.scss +1 -2
- data/app/pb_kits/playbook/pb_table/subcomponents/_table_row.tsx +1 -106
- data/app/pb_kits/playbook/pb_table/table.html.erb +1 -1
- data/app/pb_kits/playbook/pb_table/table.rb +2 -17
- data/app/pb_kits/playbook/pb_text_input/inputMask.ts +1 -1
- data/dist/chunks/_typeahead-Cx7J1O_I.js +22 -0
- data/dist/chunks/_weekday_stacked-Z6CSak-K.js +45 -0
- data/dist/chunks/{lib-CuCy3_xO.js → lib-SyD3buPZ.js} +3 -3
- data/dist/chunks/{pb_form_validation-D37k10a0.js → pb_form_validation-Dt8UJgrJ.js} +1 -1
- data/dist/chunks/vendor.js +1 -1
- data/dist/menu.yml +1 -1
- data/dist/playbook-doc.js +1 -1
- data/dist/playbook-rails-react-bindings.js +1 -1
- data/dist/playbook-rails.js +1 -1
- data/dist/playbook.css +1 -1
- data/lib/playbook/version.rb +1 -1
- metadata +6 -20
- data/app/pb_kits/playbook/pb_skeleton_loading/docs/_skeleton_loading_filter.jsx +0 -166
- data/app/pb_kits/playbook/pb_skeleton_loading/docs/_skeleton_loading_user.jsx +0 -89
- data/app/pb_kits/playbook/pb_table/docs/_table_sticky_left_columns.html.erb +0 -95
- data/app/pb_kits/playbook/pb_table/docs/_table_with_collapsible.jsx +0 -75
- data/app/pb_kits/playbook/pb_table/docs/_table_with_collapsible.md +0 -1
- data/app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_with_custom_click.jsx +0 -108
- data/app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_with_custom_click.md +0 -2
- data/app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_with_custom_content.jsx +0 -94
- data/app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_with_custom_content.md +0 -0
- data/app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_with_nested_rows.jsx +0 -83
- data/app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_with_nested_rows.md +0 -3
- data/app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_with_nested_table.jsx +0 -120
- data/app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_with_nested_table.md +0 -1
- data/app/pb_kits/playbook/pb_table/styles/_collapsible.scss +0 -35
- data/dist/chunks/_typeahead-CZ_5SxHq.js +0 -36
- data/dist/chunks/_weekday_stacked-D345GDEZ.js +0 -45
@@ -1,106 +1,32 @@
|
|
1
1
|
import PbEnhancedElement from '../pb_enhanced_element'
|
2
2
|
|
3
3
|
export default class PbTable extends PbEnhancedElement {
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
//
|
14
|
-
|
15
|
-
|
16
|
-
const
|
17
|
-
|
18
|
-
|
19
|
-
for (let i = 0; i < colSpan; i++) {
|
20
|
-
headers.push(header.textContent.replace(/\r?\n|\r/, ''));
|
21
|
-
}
|
22
|
-
});
|
23
|
-
// for each row in tbody
|
24
|
-
[].forEach.call(table.querySelectorAll('tbody tr'), (row: HTMLTableRowElement) => {
|
25
|
-
// for each cell
|
26
|
-
[].forEach.call(row.cells, (cell: HTMLTableCellElement, headerIndex: number) => {
|
27
|
-
// apply the attribute
|
28
|
-
cell.setAttribute('data-title', headers[headerIndex])
|
29
|
-
})
|
30
|
-
})
|
31
|
-
});
|
32
|
-
|
33
|
-
// New sticky columns logic
|
34
|
-
this.initStickyColumns();
|
35
|
-
}
|
36
|
-
|
37
|
-
private initStickyColumns(): void {
|
38
|
-
// Find tables with sticky-left-column class
|
39
|
-
const tables = document.querySelectorAll('.sticky-left-column');
|
40
|
-
|
41
|
-
tables.forEach((table) => {
|
42
|
-
// Extract sticky left column IDs by looking at the component's class
|
43
|
-
const classList = Array.from(table.classList);
|
44
|
-
|
45
|
-
// Look for classes in the format sticky-left-column-{ids}
|
46
|
-
const stickyColumnClass = classList.find(cls => cls.startsWith('sticky-columns-'));
|
47
|
-
if (stickyColumnClass) {
|
48
|
-
// Extract the IDs from the class name
|
49
|
-
this.stickyLeftColumns = stickyColumnClass
|
50
|
-
.replace('sticky-columns-', '')
|
51
|
-
.split('-');
|
52
|
-
|
53
|
-
if (this.stickyLeftColumns.length > 0) {
|
54
|
-
this.handleStickyColumnsRef = this.handleStickyColumns.bind(this);
|
55
|
-
this.handleStickyColumns();
|
56
|
-
window.addEventListener('resize', this.handleStickyColumnsRef);
|
57
|
-
}
|
4
|
+
static get selector(): string {
|
5
|
+
return '.table-responsive-collapse'
|
6
|
+
}
|
7
|
+
|
8
|
+
connect(): void {
|
9
|
+
const tables = document.querySelectorAll('.table-responsive-collapse');
|
10
|
+
|
11
|
+
// Each Table
|
12
|
+
[].forEach.call(tables, (table: HTMLTableElement) => {
|
13
|
+
// Header Titles
|
14
|
+
const headers: string[] = [];
|
15
|
+
[].forEach.call(table.querySelectorAll('th'), (header: HTMLTableCellElement) => {
|
16
|
+
const colSpan = header.colSpan
|
17
|
+
for (let i = 0; i < colSpan; i++) {
|
18
|
+
headers.push(header.textContent.replace(/\r?\n|\r/, ''));
|
58
19
|
}
|
59
20
|
});
|
60
|
-
}
|
61
|
-
|
62
|
-
private handleStickyColumns(): void {
|
63
|
-
let accumulatedWidth = 0;
|
64
21
|
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
header.classList.remove('sticky-shadow');
|
77
|
-
} else {
|
78
|
-
header.classList.remove('with-border');
|
79
|
-
header.classList.add('sticky-shadow');
|
80
|
-
}
|
81
|
-
|
82
|
-
accumulatedWidth += (header as HTMLElement).offsetWidth;
|
83
|
-
}
|
84
|
-
|
85
|
-
cells.forEach((cell) => {
|
86
|
-
cell.classList.add('sticky');
|
87
|
-
(cell as HTMLElement).style.left = `${accumulatedWidth - (header as HTMLElement).offsetWidth}px`;
|
88
|
-
|
89
|
-
if (!isLastColumn) {
|
90
|
-
cell.classList.add('with-border');
|
91
|
-
cell.classList.remove('sticky-shadow');
|
92
|
-
} else {
|
93
|
-
cell.classList.remove('with-border');
|
94
|
-
cell.classList.add('sticky-shadow');
|
95
|
-
}
|
96
|
-
});
|
97
|
-
});
|
98
|
-
}
|
99
|
-
|
100
|
-
// Cleanup method to remove event listener
|
101
|
-
disconnect(): void {
|
102
|
-
if (this.handleStickyColumnsRef) {
|
103
|
-
window.removeEventListener('resize', this.handleStickyColumnsRef);
|
104
|
-
}
|
105
|
-
}
|
106
|
-
}
|
22
|
+
// for each row in tbody
|
23
|
+
[].forEach.call(table.querySelectorAll('tbody tr'), (row: HTMLTableRowElement) => {
|
24
|
+
// for each cell
|
25
|
+
[].forEach.call(row.cells, (cell: HTMLTableCellElement, headerIndex: number) => {
|
26
|
+
// apply the attribute
|
27
|
+
cell.setAttribute('data-title', headers[headerIndex])
|
28
|
+
})
|
29
|
+
})
|
30
|
+
})
|
31
|
+
}
|
32
|
+
}
|
@@ -7,21 +7,14 @@ import {
|
|
7
7
|
buildHtmlProps,
|
8
8
|
} from "../../utilities/props";
|
9
9
|
import { globalProps } from "../../utilities/globalProps";
|
10
|
-
import Collapsible from "../../pb_collapsible/_collapsible";
|
11
|
-
import useCollapsible from "../../pb_collapsible/useCollapsible";
|
12
10
|
|
13
11
|
type TableRowPropTypes = {
|
14
12
|
aria?: { [key: string]: string };
|
15
13
|
children: React.ReactNode[] | React.ReactNode;
|
16
14
|
className: string;
|
17
|
-
collapsible?: boolean;
|
18
|
-
collapsibleContent?: React.ReactNode[] | React.ReactNode;
|
19
|
-
collapsibleSideHighlight?: boolean;
|
20
15
|
data?: { [key: string]: string };
|
21
|
-
dark?: boolean;
|
22
16
|
htmlOptions?: { [key: string]: string | number | boolean | (() => void) };
|
23
17
|
id?: string;
|
24
|
-
toggleCellId?: string;
|
25
18
|
sideHighlightColor: string;
|
26
19
|
tag?: "table" | "div";
|
27
20
|
};
|
@@ -30,15 +23,10 @@ const TableRow = (props: TableRowPropTypes): React.ReactElement => {
|
|
30
23
|
const {
|
31
24
|
aria = {},
|
32
25
|
children,
|
33
|
-
collapsible,
|
34
|
-
collapsibleContent,
|
35
|
-
collapsibleSideHighlight = true,
|
36
26
|
className,
|
37
27
|
data = {},
|
38
|
-
dark = false,
|
39
28
|
htmlOptions = {},
|
40
29
|
id,
|
41
|
-
toggleCellId,
|
42
30
|
sideHighlightColor = "none",
|
43
31
|
tag = "table",
|
44
32
|
} = props;
|
@@ -48,110 +36,17 @@ const TableRow = (props: TableRowPropTypes): React.ReactElement => {
|
|
48
36
|
const htmlProps = buildHtmlProps(htmlOptions);
|
49
37
|
const sideHighlightClass =
|
50
38
|
sideHighlightColor != "" ? `side_highlight_${sideHighlightColor}` : null;
|
51
|
-
|
52
|
-
const [isCollapsed, setIsCollapsed] = useCollapsible(true);
|
53
|
-
|
54
|
-
const collapsibleRow = collapsible && isCollapsed === true ? "collapsible_table_row" : null;
|
55
39
|
const classes = classnames(
|
56
40
|
buildCss("pb_table_row_kit", sideHighlightClass),
|
57
41
|
"pb_table_tr",
|
58
|
-
collapsibleRow,
|
59
42
|
globalProps(props),
|
60
43
|
className
|
61
44
|
);
|
62
45
|
const isTableTag = tag === "table";
|
63
46
|
|
64
|
-
// const [isCollapsed, setIsCollapsed] = useCollapsible(true);
|
65
|
-
|
66
|
-
const colSpan = React.Children.count(children);
|
67
|
-
|
68
|
-
const handleRowClick = (event: React.MouseEvent) => {
|
69
|
-
if (toggleCellId) {
|
70
|
-
const target = event.target as HTMLElement;
|
71
|
-
const clickedCell = target.closest(`#${toggleCellId}`);
|
72
|
-
const isIconClick =
|
73
|
-
target instanceof SVGElement &&
|
74
|
-
(target.matches("svg.pb_custom_icon") || target.closest("svg.pb_custom_icon"));
|
75
|
-
|
76
|
-
if (clickedCell || isIconClick) {
|
77
|
-
setIsCollapsed(!isCollapsed);
|
78
|
-
}
|
79
|
-
} else {
|
80
|
-
setIsCollapsed(!isCollapsed);
|
81
|
-
}
|
82
|
-
};
|
83
|
-
|
84
47
|
return (
|
85
48
|
<>
|
86
|
-
{
|
87
|
-
isTableTag ? (
|
88
|
-
<>
|
89
|
-
<tr
|
90
|
-
{...ariaProps}
|
91
|
-
{...dataProps}
|
92
|
-
{...htmlProps}
|
93
|
-
className={classes}
|
94
|
-
id={id}
|
95
|
-
onClick={(e)=>handleRowClick(e)}
|
96
|
-
style={{ cursor: toggleCellId ? "default" : "pointer" }}
|
97
|
-
>
|
98
|
-
{children}
|
99
|
-
</tr>
|
100
|
-
<tr>
|
101
|
-
<Collapsible
|
102
|
-
collapsed={isCollapsed}
|
103
|
-
dark={dark}
|
104
|
-
htmlOptions={{ colSpan: colSpan }}
|
105
|
-
padding="none"
|
106
|
-
tag="td"
|
107
|
-
>
|
108
|
-
<tr/>
|
109
|
-
<Collapsible.Content
|
110
|
-
className={collapsibleSideHighlight ? `table_collapsible_side_highlight` : ''}
|
111
|
-
dark={dark}
|
112
|
-
margin="none"
|
113
|
-
padding="none"
|
114
|
-
>
|
115
|
-
{collapsibleContent}
|
116
|
-
</Collapsible.Content>
|
117
|
-
</Collapsible>
|
118
|
-
</tr>
|
119
|
-
</>
|
120
|
-
) : (
|
121
|
-
<>
|
122
|
-
<div
|
123
|
-
{...ariaProps}
|
124
|
-
{...dataProps}
|
125
|
-
{...htmlProps}
|
126
|
-
className={classes}
|
127
|
-
id={id}
|
128
|
-
onClick={handleRowClick}
|
129
|
-
style={{ cursor: "pointer" }}
|
130
|
-
>
|
131
|
-
{children}
|
132
|
-
</div>
|
133
|
-
<tr>
|
134
|
-
<Collapsible
|
135
|
-
collapsed={isCollapsed}
|
136
|
-
dark={dark}
|
137
|
-
htmlOptions={{ colSpan: colSpan }}
|
138
|
-
padding="none"
|
139
|
-
tag="td"
|
140
|
-
>
|
141
|
-
<tr/>
|
142
|
-
<Collapsible.Content
|
143
|
-
className={collapsibleSideHighlight ? `table_collapsible_side_highlight` : ''}
|
144
|
-
dark={dark}
|
145
|
-
margin="none"
|
146
|
-
padding="none"
|
147
|
-
>
|
148
|
-
{collapsibleContent}
|
149
|
-
</Collapsible.Content>
|
150
|
-
</Collapsible>
|
151
|
-
</tr>
|
152
|
-
</>
|
153
|
-
)
|
154
|
-
) : isTableTag ? (
|
49
|
+
{isTableTag ? (
|
155
50
|
<tr
|
156
51
|
{...ariaProps}
|
157
52
|
{...dataProps}
|
@@ -23,8 +23,6 @@ module Playbook
|
|
23
23
|
prop :text
|
24
24
|
prop :sticky, type: Playbook::Props::Boolean,
|
25
25
|
default: false
|
26
|
-
prop :sticky_left_column, type: Playbook::Props::Array,
|
27
|
-
default: []
|
28
26
|
prop :vertical_border, type: Playbook::Props::Boolean,
|
29
27
|
default: false
|
30
28
|
prop :striped, type: Playbook::Props::Boolean,
|
@@ -39,8 +37,8 @@ module Playbook
|
|
39
37
|
def classname
|
40
38
|
generate_classname(
|
41
39
|
"pb_table", "table-#{size}", single_line_class, dark_class,
|
42
|
-
disable_hover_class, container_class, data_table_class, sticky_class,
|
43
|
-
|
40
|
+
disable_hover_class, container_class, data_table_class, sticky_class, collapse_class,
|
41
|
+
vertical_border_class, striped_class, outer_padding_class,
|
44
42
|
"table-responsive-#{responsive}", separator: " "
|
45
43
|
)
|
46
44
|
end
|
@@ -75,19 +73,6 @@ module Playbook
|
|
75
73
|
sticky ? "sticky-header" : nil
|
76
74
|
end
|
77
75
|
|
78
|
-
def sticky_left_column_class
|
79
|
-
if sticky_left_column.empty?
|
80
|
-
nil
|
81
|
-
else
|
82
|
-
sticky_col_classname = "sticky-left-column sticky-columns"
|
83
|
-
sticky_left_column.each do |id|
|
84
|
-
sticky_col_classname += "-#{id}"
|
85
|
-
end
|
86
|
-
|
87
|
-
sticky_col_classname
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
76
|
def striped_class
|
92
77
|
striped ? "striped" : nil
|
93
78
|
end
|
@@ -43,7 +43,7 @@ export const INPUTMASKS: InputMaskDictionary = {
|
|
43
43
|
currency: {
|
44
44
|
format: formatCurrency,
|
45
45
|
// eslint-disable-next-line no-useless-escape
|
46
|
-
pattern: '
|
46
|
+
pattern: '^\$\d{1,3}(?:,\d{3})*(?:\.\d{2})?$',
|
47
47
|
placeholder: '$0.00',
|
48
48
|
},
|
49
49
|
zipCode: {
|