playbook_ui 13.20.0.pre.alpha.PBNTR225advancedtablefeedback2375 → 13.20.0.pre.alpha.PLAY12572402

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 (60) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/index.js +1 -1
  3. data/app/pb_kits/playbook/pb_advanced_table/Components/CollapsibleTrail.tsx +6 -1
  4. data/app/pb_kits/playbook/pb_advanced_table/Components/CustomCell.tsx +19 -21
  5. data/app/pb_kits/playbook/pb_advanced_table/Components/SortIconButton.tsx +3 -6
  6. data/app/pb_kits/playbook/pb_advanced_table/Components/SubRowHeaderRow.tsx +8 -12
  7. data/app/pb_kits/playbook/pb_advanced_table/Components/TableHeaderCell.tsx +9 -14
  8. data/app/pb_kits/playbook/pb_advanced_table/Components/ToggleIconButton.tsx +5 -9
  9. data/app/pb_kits/playbook/pb_advanced_table/SubKits/TableBody.tsx +12 -14
  10. data/app/pb_kits/playbook/pb_advanced_table/SubKits/TableHeader.tsx +10 -12
  11. data/app/pb_kits/playbook/pb_advanced_table/Utilities/ExpansionControlHelpers.tsx +2 -3
  12. data/app/pb_kits/playbook/pb_advanced_table/Utilities/types.ts +2 -0
  13. data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.scss +54 -2
  14. data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.tsx +81 -82
  15. data/app/pb_kits/playbook/pb_advanced_table/advanced_table.test.jsx +54 -54
  16. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_collapsible_trail.jsx +7 -7
  17. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_default.jsx +7 -7
  18. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_expanded_control.jsx +7 -7
  19. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_inline_row_loading.jsx +7 -7
  20. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_inline_row_loading.md +1 -1
  21. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_loading.jsx +7 -7
  22. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_sort.jsx +7 -7
  23. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_sort_control.jsx +7 -7
  24. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_subrow_headers.jsx +7 -7
  25. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_options.jsx +7 -7
  26. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props.jsx +7 -7
  27. data/app/pb_kits/playbook/pb_advanced_table/docs/_mock_data.js +1 -1
  28. data/app/pb_kits/playbook/pb_advanced_table/docs/_mock_data_inline_loading.js +1 -1
  29. data/app/pb_kits/playbook/pb_date/docs/_date_alignment_swift.md +26 -6
  30. data/app/pb_kits/playbook/pb_date/docs/_date_default_swift.md +27 -8
  31. data/app/pb_kits/playbook/pb_message/docs/_description.md +1 -1
  32. data/app/pb_kits/playbook/pb_table/_table.tsx +13 -0
  33. data/app/pb_kits/playbook/pb_table/docs/_table_side_highlight.jsx +24 -25
  34. data/app/pb_kits/playbook/pb_table/docs/_table_with_subcomponents.jsx +47 -0
  35. data/app/pb_kits/playbook/pb_table/docs/_table_with_subcomponents.md +5 -5
  36. data/app/pb_kits/playbook/pb_table/docs/_table_with_subcomponents_as_divs.jsx +48 -0
  37. data/app/pb_kits/playbook/pb_table/docs/_table_with_subcomponents_rails.md +7 -0
  38. data/app/pb_kits/playbook/pb_table/docs/example.yml +4 -3
  39. data/app/pb_kits/playbook/pb_table/docs/index.js +2 -0
  40. data/app/pb_kits/playbook/pb_table/subcomponents/_table_body.tsx +64 -0
  41. data/app/pb_kits/playbook/pb_table/subcomponents/_table_cell.tsx +66 -0
  42. data/app/pb_kits/playbook/pb_table/subcomponents/_table_head.tsx +64 -0
  43. data/app/pb_kits/playbook/pb_table/subcomponents/_table_header.tsx +66 -0
  44. data/app/pb_kits/playbook/pb_table/subcomponents/_table_row.tsx +74 -0
  45. data/app/pb_kits/playbook/pb_table/subcomponents/index.tsx +5 -0
  46. data/app/pb_kits/playbook/pb_table/table.test.js +142 -1
  47. data/app/pb_kits/playbook/utilities/_positioning.scss +48 -7
  48. data/app/pb_kits/playbook/utilities/globalProps.ts +23 -1
  49. data/dist/playbook-rails.js +6 -6
  50. data/lib/playbook/bottom.rb +33 -0
  51. data/lib/playbook/classnames.rb +4 -0
  52. data/lib/playbook/kit_base.rb +8 -0
  53. data/lib/playbook/left.rb +33 -0
  54. data/lib/playbook/right.rb +33 -0
  55. data/lib/playbook/top.rb +33 -0
  56. data/lib/playbook/version.rb +1 -1
  57. metadata +19 -8
  58. data/app/pb_kits/playbook/pb_advanced_table/scss_partials/_chrome_styles.scss +0 -13
  59. data/app/pb_kits/playbook/pb_table/_table_row.tsx +0 -47
  60. /data/app/pb_kits/playbook/pb_table/docs/{_table_with_subcomponents.html.erb → _table_with_subcomponents_rails.html.erb} +0 -0
@@ -1,6 +1,5 @@
1
1
  examples:
2
2
  rails:
3
- # - table_div: Div
4
3
  - table_sm: Small
5
4
  - table_md: Medium
6
5
  - table_lg: Large
@@ -25,12 +24,11 @@ examples:
25
24
  - table_with_background_kit: Table With Background Kit
26
25
  - table_vertical_border: Vertical Borders
27
26
  - table_striped: Striped Table
28
- - table_with_subcomponents: Table with Sub Components (Table Elements)
27
+ - table_with_subcomponents_rails: Table with Sub Components (Table Elements)
29
28
  - table_with_subcomponents_as_divs: Table with Sub Components (Divs)
30
29
 
31
30
 
32
31
  react:
33
- # - table_div: Div
34
32
  - table_sm: Small
35
33
  - table_md: Medium
36
34
  - table_lg: Large
@@ -54,3 +52,6 @@ examples:
54
52
  - table_with_background_kit: Table With Background Kit
55
53
  - table_vertical_border: Vertical Borders
56
54
  - table_striped: Striped Table
55
+ - table_with_subcomponents: Table with Sub Components (Table Elements)
56
+ - table_with_subcomponents_as_divs: Table with Sub Components (Divs)
57
+
@@ -22,3 +22,5 @@ export { default as TableWithBackgroundKit } from './_table_with_background_kit.
22
22
  export { default as TableVerticalBorder } from './_table_vertical_border.jsx'
23
23
  export { default as TableStriped } from './_table_striped.jsx'
24
24
  export { default as TableDiv } from './_table_div.jsx'
25
+ export { default as TableWithSubcomponents } from './_table_with_subcomponents.jsx'
26
+ export { default as TableWithSubcomponentsAsDivs } from './_table_with_subcomponents_as_divs.jsx'
@@ -0,0 +1,64 @@
1
+ import React from "react";
2
+ import classnames from "classnames";
3
+ import {
4
+ buildAriaProps,
5
+ buildDataProps,
6
+ buildHtmlProps,
7
+ } from "../../utilities/props";
8
+ import { globalProps } from "../../utilities/globalProps";
9
+
10
+ type TableBodyPropTypes = {
11
+ aria?: { [key: string]: string };
12
+ children: React.ReactNode[] | React.ReactNode;
13
+ className: string;
14
+ data?: { [key: string]: string };
15
+ htmlOptions?: { [key: string]: string | number | boolean | (() => void) };
16
+ id?: string;
17
+ tag?: "table" | "div";
18
+ };
19
+
20
+ const TableBody = (props: TableBodyPropTypes) => {
21
+ const {
22
+ aria = {},
23
+ children,
24
+ className,
25
+ data = {},
26
+ htmlOptions = {},
27
+ id,
28
+ tag = "table",
29
+ } = props;
30
+
31
+ const ariaProps = buildAriaProps(aria);
32
+ const dataProps = buildDataProps(data);
33
+ const htmlProps = buildHtmlProps(htmlOptions);
34
+ const classes = classnames("pb_table_tbody", globalProps(props), className);
35
+ const isTableTag = tag === "table";
36
+
37
+ return (
38
+ <>
39
+ {isTableTag ? (
40
+ <tbody
41
+ {...ariaProps}
42
+ {...dataProps}
43
+ {...htmlProps}
44
+ className={classes}
45
+ id={id}
46
+ >
47
+ {children}
48
+ </tbody>
49
+ ) : (
50
+ <div
51
+ {...ariaProps}
52
+ {...dataProps}
53
+ {...htmlProps}
54
+ className={classes}
55
+ id={id}
56
+ >
57
+ {children}
58
+ </div>
59
+ )}
60
+ </>
61
+ );
62
+ };
63
+
64
+ export default TableBody;
@@ -0,0 +1,66 @@
1
+ import React from "react";
2
+ import classnames from "classnames";
3
+ import {
4
+ buildAriaProps,
5
+ buildDataProps,
6
+ buildHtmlProps,
7
+ } from "../../utilities/props";
8
+ import { globalProps } from "../../utilities/globalProps";
9
+
10
+ type TableCellPropTypes = {
11
+ aria?: { [key: string]: string };
12
+ children: React.ReactNode[] | React.ReactNode;
13
+ className: string;
14
+ data?: { [key: string]: string };
15
+ htmlOptions?: { [key: string]: string | number | boolean | (() => void) };
16
+ id?: string;
17
+ tag?: "table" | "div";
18
+ text?: string
19
+ };
20
+
21
+ const TableCell = (props: TableCellPropTypes) => {
22
+ const {
23
+ aria = {},
24
+ children,
25
+ className,
26
+ data = {},
27
+ htmlOptions = {},
28
+ id,
29
+ tag = "table",
30
+ text,
31
+ } = props;
32
+
33
+ const ariaProps = buildAriaProps(aria);
34
+ const dataProps = buildDataProps(data);
35
+ const htmlProps = buildHtmlProps(htmlOptions);
36
+ const classes = classnames("pb_table_td", globalProps(props), className);
37
+ const isTableTag = tag === "table";
38
+
39
+ return (
40
+ <>
41
+ {isTableTag ? (
42
+ <td
43
+ {...ariaProps}
44
+ {...dataProps}
45
+ {...htmlProps}
46
+ className={classes}
47
+ id={id}
48
+ >
49
+ {text || children}
50
+ </td>
51
+ ) : (
52
+ <div
53
+ {...ariaProps}
54
+ {...dataProps}
55
+ {...htmlProps}
56
+ className={classes}
57
+ id={id}
58
+ >
59
+ {text || children}
60
+ </div>
61
+ )}
62
+ </>
63
+ );
64
+ };
65
+
66
+ export default TableCell;
@@ -0,0 +1,64 @@
1
+ import React from "react";
2
+ import classnames from "classnames";
3
+ import {
4
+ buildAriaProps,
5
+ buildDataProps,
6
+ buildHtmlProps,
7
+ } from "../../utilities/props";
8
+ import { globalProps } from "../../utilities/globalProps";
9
+
10
+ type TableHeadPropTypes = {
11
+ aria?: { [key: string]: string };
12
+ children: React.ReactNode[] | React.ReactNode;
13
+ className: string;
14
+ data?: { [key: string]: string };
15
+ htmlOptions?: { [key: string]: string | number | boolean | (() => void) };
16
+ id?: string;
17
+ tag?: "table" | "div";
18
+ };
19
+
20
+ const TableHead = (props: TableHeadPropTypes) => {
21
+ const {
22
+ aria = {},
23
+ children,
24
+ className,
25
+ data = {},
26
+ htmlOptions = {},
27
+ id,
28
+ tag = "table",
29
+ } = props;
30
+
31
+ const ariaProps = buildAriaProps(aria);
32
+ const dataProps = buildDataProps(data);
33
+ const htmlProps = buildHtmlProps(htmlOptions);
34
+ const classes = classnames("pb_table_thead", globalProps(props), className);
35
+ const isTableTag = tag === "table";
36
+
37
+ return (
38
+ <>
39
+ {isTableTag ? (
40
+ <thead
41
+ {...ariaProps}
42
+ {...dataProps}
43
+ {...htmlProps}
44
+ className={classes}
45
+ id={id}
46
+ >
47
+ {children}
48
+ </thead>
49
+ ) : (
50
+ <div
51
+ {...ariaProps}
52
+ {...dataProps}
53
+ {...htmlProps}
54
+ className={classes}
55
+ id={id}
56
+ >
57
+ {children}
58
+ </div>
59
+ )}
60
+ </>
61
+ );
62
+ };
63
+
64
+ export default TableHead;
@@ -0,0 +1,66 @@
1
+ import React from "react";
2
+ import classnames from "classnames";
3
+ import {
4
+ buildAriaProps,
5
+ buildDataProps,
6
+ buildHtmlProps,
7
+ } from "../../utilities/props";
8
+ import { globalProps } from "../../utilities/globalProps";
9
+
10
+ type TableHeaderPropTypes = {
11
+ aria?: { [key: string]: string };
12
+ children: React.ReactNode[] | React.ReactNode;
13
+ className: string;
14
+ data?: { [key: string]: string };
15
+ htmlOptions?: { [key: string]: string | number | boolean | (() => void) };
16
+ id?: string;
17
+ tag?: "table" | "div";
18
+ text?: string;
19
+ };
20
+
21
+ const TableHeader = (props: TableHeaderPropTypes) => {
22
+ const {
23
+ aria = {},
24
+ children,
25
+ className,
26
+ data = {},
27
+ htmlOptions = {},
28
+ id,
29
+ tag = "table",
30
+ text
31
+ } = props;
32
+
33
+ const ariaProps = buildAriaProps(aria);
34
+ const dataProps = buildDataProps(data);
35
+ const htmlProps = buildHtmlProps(htmlOptions);
36
+ const classes = classnames("pb_table_th", globalProps(props), className);
37
+ const isTableTag = tag === "table";
38
+
39
+ return (
40
+ <>
41
+ {isTableTag ? (
42
+ <th
43
+ {...ariaProps}
44
+ {...dataProps}
45
+ {...htmlProps}
46
+ className={classes}
47
+ id={id}
48
+ >
49
+ {text || children}
50
+ </th>
51
+ ) : (
52
+ <div
53
+ {...ariaProps}
54
+ {...dataProps}
55
+ {...htmlProps}
56
+ className={classes}
57
+ id={id}
58
+ >
59
+ {text || children}
60
+ </div>
61
+ )}
62
+ </>
63
+ );
64
+ };
65
+
66
+ export default TableHeader;
@@ -0,0 +1,74 @@
1
+ import React from "react";
2
+ import classnames from "classnames";
3
+ import {
4
+ buildAriaProps,
5
+ buildCss,
6
+ buildDataProps,
7
+ buildHtmlProps,
8
+ } from "../../utilities/props";
9
+ import { globalProps } from "../../utilities/globalProps";
10
+
11
+ type TableRowPropTypes = {
12
+ aria?: { [key: string]: string };
13
+ children: React.ReactNode[] | React.ReactNode;
14
+ className: string;
15
+ data?: { [key: string]: string };
16
+ htmlOptions?: { [key: string]: string | number | boolean | (() => void) };
17
+ id?: string;
18
+ sideHighlightColor: string;
19
+ tag?: "table" | "div";
20
+ };
21
+
22
+ const TableRow = (props: TableRowPropTypes) => {
23
+ const {
24
+ aria = {},
25
+ children,
26
+ className,
27
+ data = {},
28
+ htmlOptions = {},
29
+ id,
30
+ sideHighlightColor = "none",
31
+ tag = "table",
32
+ } = props;
33
+
34
+ const ariaProps = buildAriaProps(aria);
35
+ const dataProps = buildDataProps(data);
36
+ const htmlProps = buildHtmlProps(htmlOptions);
37
+ const sideHighlightClass =
38
+ sideHighlightColor != "" ? `side_highlight_${sideHighlightColor}` : null;
39
+ const classes = classnames(
40
+ buildCss("pb_table_row_kit", sideHighlightClass),
41
+ "pb_table_tr",
42
+ globalProps(props),
43
+ className
44
+ );
45
+ const isTableTag = tag === "table";
46
+
47
+ return (
48
+ <>
49
+ {isTableTag ? (
50
+ <tr
51
+ {...ariaProps}
52
+ {...dataProps}
53
+ {...htmlProps}
54
+ className={classes}
55
+ id={id}
56
+ >
57
+ {children}
58
+ </tr>
59
+ ) : (
60
+ <div
61
+ {...ariaProps}
62
+ {...dataProps}
63
+ {...htmlProps}
64
+ className={classes}
65
+ id={id}
66
+ >
67
+ {children}
68
+ </div>
69
+ )}
70
+ </>
71
+ );
72
+ };
73
+
74
+ export default TableRow;
@@ -0,0 +1,5 @@
1
+ export { default as TableHead } from './_table_head';
2
+ export { default as TableHeader } from './_table_header';
3
+ export { default as TableBody } from './_table_body';
4
+ export { default as TableRow } from './_table_row';
5
+ export { default as TableCell } from './_table_cell';
@@ -1,7 +1,58 @@
1
- import { ensureAccessible, renderKit } from "../utilities/test-utils"
1
+ import React from "react";
2
+ import { ensureAccessible, renderKit, render, screen } from "../utilities/test-utils"
2
3
 
3
4
  import Table from "./_table"
4
5
 
6
+ const DivsTable = () => {
7
+ return (
8
+ <>
9
+ <Table
10
+ data={{testid: "table"}}
11
+ size="sm"
12
+ tag="div"
13
+ >
14
+ <Table.Head tag="div">
15
+ <Table.Row tag="div">
16
+ <Table.Header tag="div">{"Column 1"}</Table.Header>
17
+ <Table.Header tag="div">{"Column 2"}</Table.Header>
18
+ </Table.Row>
19
+ </Table.Head>
20
+ <Table.Body tag="div">
21
+ <Table.Row tag="div">
22
+ <Table.Cell tag="div">{"Value 1"}</Table.Cell>
23
+ <Table.Cell tag="div">{"Value 2"}</Table.Cell>
24
+ </Table.Row>
25
+ </Table.Body>
26
+ </Table>
27
+ </>
28
+ );
29
+ };
30
+
31
+ const TableTagTable = () => {
32
+ return (
33
+ <>
34
+ <Table
35
+ data={{testid: "table"}}
36
+ size="sm"
37
+ >
38
+ <Table.Head>
39
+ <Table.Row>
40
+ <Table.Header>{"Column 1"}</Table.Header>
41
+ <Table.Header>{"Column 2"}</Table.Header>
42
+ </Table.Row>
43
+ </Table.Head>
44
+ <Table.Body>
45
+ <Table.Row>
46
+ <Table.Cell>{"Value 1"}</Table.Cell>
47
+ <Table.Cell>{"Value 2"}</Table.Cell>
48
+ </Table.Row>
49
+ </Table.Body>
50
+ </Table>
51
+ </>
52
+ );
53
+ };
54
+
55
+
5
56
  const props = {
6
57
  data: { testid: "table" },
7
58
  sticky: false
@@ -20,3 +71,93 @@ test("when striped is true", () => {
20
71
  const kit = renderKit(Table, props, { striped: true })
21
72
  expect(kit).toHaveClass("pb_table table-sm table-responsive-collapse table-card striped table-collapse-sm")
22
73
  })
74
+
75
+ test("Renders Table.Head subkit for Div Table", () => {
76
+ render (<DivsTable/>)
77
+
78
+ const kit = screen.getByTestId("table")
79
+ const head = kit.querySelector(".pb_table_thead")
80
+ expect(head).toBeInTheDocument()
81
+ expect(head.tagName).toBe("DIV")
82
+ })
83
+
84
+ test("Renders Table.Header subkit for Div Table", () => {
85
+ render (<DivsTable/>)
86
+
87
+ const kit = screen.getByTestId("table")
88
+ const head = kit.querySelector(".pb_table_th")
89
+ expect(head).toBeInTheDocument()
90
+ expect(head.tagName).toBe("DIV")
91
+ })
92
+
93
+ test("Renders Table.Body subkit for Div Table", () => {
94
+ render (<DivsTable/>)
95
+
96
+ const kit = screen.getByTestId("table")
97
+ const head = kit.querySelector(".pb_table_tbody")
98
+ expect(head).toBeInTheDocument()
99
+ expect(head.tagName).toBe("DIV")
100
+ })
101
+
102
+ test("Renders Table.Row subkit for Div Table", () => {
103
+ render (<DivsTable/>)
104
+
105
+ const kit = screen.getByTestId("table")
106
+ const head = kit.querySelector(".pb_table_tr")
107
+ expect(head).toBeInTheDocument()
108
+ expect(head.tagName).toBe("DIV")
109
+ })
110
+
111
+ test("Renders Table.Cell subkit for Div Table", () => {
112
+ render (<DivsTable/>)
113
+
114
+ const kit = screen.getByTestId("table")
115
+ const head = kit.querySelector(".pb_table_td")
116
+ expect(head).toBeInTheDocument()
117
+ expect(head.tagName).toBe("DIV")
118
+ })
119
+
120
+ test("Renders Table.Head subkit for HTML Table elements Table", () => {
121
+ render (<TableTagTable/>)
122
+
123
+ const kit = screen.getByTestId("table")
124
+ const head = kit.querySelector(".pb_table_thead")
125
+ expect(head).toBeInTheDocument()
126
+ expect(head.tagName).toBe("THEAD")
127
+ })
128
+
129
+ test("Renders Table.Header subkit for HTML Table elements Table", () => {
130
+ render (<TableTagTable/>)
131
+
132
+ const kit = screen.getByTestId("table")
133
+ const head = kit.querySelector(".pb_table_th")
134
+ expect(head).toBeInTheDocument()
135
+ expect(head.tagName).toBe("TH")
136
+ })
137
+
138
+ test("Renders Table.Body subkit for HTML Table elements Table", () => {
139
+ render (<TableTagTable/>)
140
+
141
+ const kit = screen.getByTestId("table")
142
+ const head = kit.querySelector(".pb_table_tbody")
143
+ expect(head).toBeInTheDocument()
144
+ expect(head.tagName).toBe("TBODY")
145
+ })
146
+
147
+ test("Renders Table.Row subkit for HTML Table elements Table", () => {
148
+ render (<TableTagTable/>)
149
+
150
+ const kit = screen.getByTestId("table")
151
+ const head = kit.querySelector(".pb_table_tr")
152
+ expect(head).toBeInTheDocument()
153
+ expect(head.tagName).toBe("TR")
154
+ })
155
+
156
+ test("Renders Table.Cell subkit for HTML Table elements Table", () => {
157
+ render (<TableTagTable/>)
158
+
159
+ const kit = screen.getByTestId("table")
160
+ const head = kit.querySelector(".pb_table_td")
161
+ expect(head).toBeInTheDocument()
162
+ expect(head.tagName).toBe("TD")
163
+ })
@@ -21,44 +21,85 @@
21
21
  .z_index_1 {
22
22
  z-index: 100;
23
23
  }
24
+
24
25
  .z_index_2 {
25
26
  z-index: 200;
26
27
  }
28
+
27
29
  .z_index_3 {
28
30
  z-index: 300;
29
31
  }
32
+
30
33
  .z_index_4 {
31
34
  z-index: 400;
32
35
  }
36
+
33
37
  .z_index_5 {
34
38
  z-index: 500;
35
39
  }
40
+
36
41
  .z_index_6 {
37
42
  z-index: 600;
38
43
  }
44
+
39
45
  .z_index_7 {
40
46
  z-index: 700;
41
47
  }
48
+
42
49
  .z_index_8 {
43
50
  z-index: 800;
44
51
  }
52
+
45
53
  .z_index_9 {
46
54
  z-index: 900;
47
55
  }
56
+
48
57
  .z_index_10 {
49
58
  z-index: 1000;
50
59
  }
51
60
 
52
61
  $zIndex_values: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10;
53
-
62
+
54
63
  @each $size, $size_value in $breakpoints_grid {
55
64
  @each $zIndex_value in $zIndex_values {
56
- $min_size: map-get($size_value, "min");
57
- $max_size: map-get($size_value, "max");
58
- .z_index_#{$size}_#{$zIndex_value} {
59
- @include break_on($min_size, $max_size) {
60
- z-index: #{$zIndex_value * 100} !important;
61
- }
65
+ $min_size: map-get($size_value, "min");
66
+ $max_size: map-get($size_value, "max");
67
+
68
+ .z_index_#{$size}_#{$zIndex_value} {
69
+ @include break_on($min_size, $max_size) {
70
+ z-index: #{$zIndex_value * 100} !important;
71
+ }
72
+ }
73
+ }
74
+ }
75
+
76
+ $space_classes: (
77
+ xxs: $space_xxs,
78
+ xs: $space_xs,
79
+ sm: $space_sm,
80
+ md: $space_md,
81
+ lg: $space_lg,
82
+ xl: $space_xl,
83
+ 0: 0,
84
+ auto: auto,
85
+ initial: initial,
86
+ inherit: inherit
87
+ );
88
+
89
+ $positions: "top", "right", "bottom", "left";
90
+
91
+ @each $position in $positions {
92
+ @each $space_name, $space in $space_classes {
93
+ .#{$position}_#{$space_name} {
94
+ @if $space_name == "0" {
95
+ #{$position}: 0 !important;
96
+ }
97
+ @else if $space_name == "auto" or $space_name == "initial" or $space_name == "inherit" {
98
+ #{$position}: #{$space} !important;
99
+ }
100
+ @else {
101
+ #{$position}: #{-$space} !important;
62
102
  }
103
+ }
63
104
  }
64
105
  }
@@ -118,6 +118,22 @@ type Position = {
118
118
  position?: "relative" | "absolute" | "fixed" | "sticky" | "static",
119
119
  }
120
120
 
121
+ type Top = {
122
+ top?: Sizes,
123
+ }
124
+
125
+ type Right = {
126
+ right?: Sizes,
127
+ }
128
+
129
+ type Bottom = {
130
+ bottom?: Sizes,
131
+ }
132
+
133
+ type Left = {
134
+ left?: Sizes,
135
+ }
136
+
121
137
  type Shadow = {
122
138
  shadow?: "none" | "deep" | "deeper" | "deepest",
123
139
  }
@@ -151,7 +167,7 @@ export type GlobalProps = AlignContent & AlignItems & AlignSelf &
151
167
  BorderRadius & Cursor & Dark & Display & DisplaySizes & Flex & FlexDirection &
152
168
  FlexGrow & FlexShrink & FlexWrap & JustifyContent & JustifySelf &
153
169
  LineHeight & Margin & MaxWidth & NumberSpacing & Order & Overflow & Padding &
154
- Position & Shadow & TextAlign & Truncate & ZIndex & { hover?: string };
170
+ Position & Shadow & TextAlign & Truncate & ZIndex & { hover?: string } & Top & Right & Bottom & Left;
155
171
 
156
172
  const getResponsivePropClasses = (prop: {[key: string]: string}, classPrefix: string) => {
157
173
  const keys: string[] = Object.keys(prop)
@@ -424,6 +440,12 @@ const PROP_CATEGORIES: {[key:string]: (props: {[key: string]: any}) => string} =
424
440
  css += position && position !== 'static' ? `position_${position}` : ''
425
441
  return css
426
442
  },
443
+
444
+ topProps: ({ top }: Top) => top ? `top_${top}` : '',
445
+ rightProps: ({ right }: Right) => right ? `right_${right}` : '',
446
+ bottomProps: ({ bottom }: Bottom) => bottom ? `bottom_${bottom}` : '',
447
+ leftProps: ({ left }: Left) => left ? `left_${left}` : '',
448
+
427
449
  textAlignProps: ({ textAlign }: TextAlign) => {
428
450
  if (typeof textAlign === 'object') {
429
451
  return getResponsivePropClasses(textAlign, 'text_align')