playbook_ui 13.2.0 → 13.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/pb_kits/playbook/_playbook.scss +1 -0
- data/app/pb_kits/playbook/pb_body/_body.scss +5 -0
- data/app/pb_kits/playbook/pb_body/_body.tsx +4 -1
- data/app/pb_kits/playbook/pb_body/_body_mixins.scss +19 -0
- data/app/pb_kits/playbook/pb_body/body.rb +8 -1
- data/app/pb_kits/playbook/pb_button/button.html.erb +2 -2
- data/app/pb_kits/playbook/pb_button/button.rb +3 -0
- data/app/pb_kits/playbook/pb_collapsible/child_kits/CollapsibleMain.tsx +5 -1
- data/app/pb_kits/playbook/pb_kit/dateTime.ts +54 -23
- data/app/pb_kits/playbook/pb_table/docs/_table_header.html.erb +54 -0
- data/app/pb_kits/playbook/pb_table/docs/_table_header.md +1 -0
- data/app/pb_kits/playbook/pb_table/docs/_table_two_actions.jsx +3 -3
- data/app/pb_kits/playbook/pb_table/docs/example.yml +1 -0
- data/app/pb_kits/playbook/pb_table/styles/_all.scss +1 -0
- data/app/pb_kits/playbook/pb_table/styles/_table_header.scss +31 -0
- data/app/pb_kits/playbook/pb_table/table_header.html.erb +64 -0
- data/app/pb_kits/playbook/pb_table/table_header.rb +53 -0
- data/app/pb_kits/playbook/pb_timestamp/_timestamp.tsx +14 -7
- data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_unstyled.html.erb +21 -0
- data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_unstyled.jsx +36 -0
- data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_unstyled.md +1 -0
- data/app/pb_kits/playbook/pb_timestamp/docs/example.yml +3 -1
- data/app/pb_kits/playbook/pb_timestamp/docs/index.js +1 -0
- data/app/pb_kits/playbook/pb_timestamp/timestamp.html.erb +5 -1
- data/app/pb_kits/playbook/pb_timestamp/timestamp.rb +3 -1
- data/app/pb_kits/playbook/pb_title/_title.scss +8 -4
- data/app/pb_kits/playbook/pb_title/_title.tsx +4 -1
- data/app/pb_kits/playbook/pb_title/_title_mixin.scss +19 -0
- data/app/pb_kits/playbook/pb_title/title.rb +9 -2
- data/app/pb_kits/playbook/tokens/_spacing.scss +1 -1
- data/app/pb_kits/playbook/tokens/_text_align.scss +18 -0
- data/app/pb_kits/playbook/utilities/_hover.scss +4 -0
- data/app/pb_kits/playbook/utilities/_max_width.scss +4 -0
- data/app/pb_kits/playbook/utilities/_spacing.scss +92 -49
- data/app/pb_kits/playbook/utilities/_text_align.scss +3 -0
- data/app/pb_kits/playbook/utilities/globalProps.ts +30 -2
- data/dist/playbook-rails.js +5 -5
- data/lib/playbook/classnames.rb +1 -0
- data/lib/playbook/hover.rb +6 -2
- data/lib/playbook/kit_base.rb +2 -0
- data/lib/playbook/spacing.rb +13 -4
- data/lib/playbook/text_align.rb +37 -0
- data/lib/playbook/version.rb +2 -2
- metadata +13 -2
@@ -21,6 +21,8 @@ module Playbook
|
|
21
21
|
prop :show_user, type: Playbook::Props::Boolean,
|
22
22
|
default: false
|
23
23
|
prop :timezone, default: "America/New_York"
|
24
|
+
prop :unstyled, type: Playbook::Props::Boolean,
|
25
|
+
default: false
|
24
26
|
prop :variant, type: Playbook::Props::Enum,
|
25
27
|
values: %w[default elapsed updated],
|
26
28
|
default: "default"
|
@@ -29,7 +31,7 @@ module Playbook
|
|
29
31
|
generate_classname("pb_timestamp_kit", variant_class, align)
|
30
32
|
end
|
31
33
|
|
32
|
-
def
|
34
|
+
def timestamp_text
|
33
35
|
case variant
|
34
36
|
when "updated"
|
35
37
|
format_updated_string
|
@@ -27,14 +27,14 @@
|
|
27
27
|
@include title_colors;
|
28
28
|
}
|
29
29
|
|
30
|
-
&.dark {
|
31
|
-
@include pb_title_dark;
|
32
|
-
}
|
33
|
-
|
34
30
|
&[class*=_thin] {
|
35
31
|
@include pb_title_thin;
|
36
32
|
}
|
37
33
|
|
34
|
+
&[class*=_truncate] {
|
35
|
+
@include title_truncate;
|
36
|
+
}
|
37
|
+
|
38
38
|
@each $size, $size_value in $breakpoints_grid {
|
39
39
|
@each $title_size_value in [1, 2, 3, 4] {
|
40
40
|
$min_size: map-get($size_value, "min");
|
@@ -46,9 +46,13 @@
|
|
46
46
|
@else if $title_size_value == 3 { @include pb_title_3; }
|
47
47
|
@else if $title_size_value == 4 { @include pb_title_4; }
|
48
48
|
@include title_colors;
|
49
|
+
@include title_truncate;
|
49
50
|
@if $title_size_value != 4 { @include pb_title_bold; }
|
50
51
|
}
|
51
52
|
}
|
52
53
|
}
|
53
54
|
}
|
55
|
+
&.dark {
|
56
|
+
@include pb_title_dark;
|
57
|
+
}
|
54
58
|
}
|
@@ -17,6 +17,7 @@ type TitleProps = {
|
|
17
17
|
size?: SizeType | SizeResponsiveType,
|
18
18
|
tag?: "h1" | "h2" | "h3" | "h4" | "h5" | "h6" | "div" | "span",
|
19
19
|
text?: string,
|
20
|
+
truncate?: null | '1' | '2' | '3' | '4' | '5',
|
20
21
|
variant?: null | "link",
|
21
22
|
} & GlobalProps
|
22
23
|
|
@@ -33,12 +34,14 @@ const Title = (props: TitleProps): React.ReactElement => {
|
|
33
34
|
bold = true,
|
34
35
|
tag = 'h3',
|
35
36
|
text,
|
37
|
+
truncate = null,
|
36
38
|
variant = null,
|
37
39
|
} = props
|
38
40
|
|
39
41
|
const ariaProps: {[key: string]: string | number} = buildAriaProps(aria)
|
40
42
|
const dataProps: {[key: string]: string | number} = buildDataProps(data)
|
41
43
|
const getBold = bold ? '' : 'thin'
|
44
|
+
const isTruncated = truncate ? `truncate_${truncate}` : null
|
42
45
|
const isSizeNumberOrString = typeof size === "number" || typeof size === "string"
|
43
46
|
|
44
47
|
const buildResponsiveSizeCss = () => {
|
@@ -54,7 +57,7 @@ const Title = (props: TitleProps): React.ReactElement => {
|
|
54
57
|
}
|
55
58
|
|
56
59
|
const classes = classnames(
|
57
|
-
buildCss('pb_title_kit', isSizeNumberOrString ? `size_${size}` : "", variant, color, getBold),
|
60
|
+
buildCss('pb_title_kit', isSizeNumberOrString ? `size_${size}` : "", variant, color, getBold, isTruncated),
|
58
61
|
globalProps(props),
|
59
62
|
buildResponsiveSizeCss(),
|
60
63
|
className
|
@@ -15,4 +15,23 @@ $pb_title_colors: (
|
|
15
15
|
color: $color
|
16
16
|
}
|
17
17
|
}
|
18
|
+
}
|
19
|
+
|
20
|
+
$pb_title_truncate: (
|
21
|
+
truncate_1: 1,
|
22
|
+
truncate_2: 2,
|
23
|
+
truncate_3: 3,
|
24
|
+
truncate_4: 4,
|
25
|
+
truncate_5: 5
|
26
|
+
);
|
27
|
+
|
28
|
+
@mixin title_truncate {
|
29
|
+
@each $name, $number in $pb_title_truncate {
|
30
|
+
&[class*=_#{$name}] {
|
31
|
+
overflow: hidden;
|
32
|
+
display: -webkit-box;
|
33
|
+
-webkit-line-clamp: $number;
|
34
|
+
-webkit-box-orient: vertical;
|
35
|
+
}
|
36
|
+
}
|
18
37
|
}
|
@@ -16,12 +16,15 @@ module Playbook
|
|
16
16
|
default: nil,
|
17
17
|
deprecated: true
|
18
18
|
prop :bold, type: Playbook::Props::Boolean, default: true
|
19
|
+
prop :truncate, type: Playbook::Props::Enum,
|
20
|
+
values: [nil, "1", "2", "3", "4", "5"],
|
21
|
+
default: nil
|
19
22
|
|
20
23
|
def classname
|
21
24
|
if is_size_responsive
|
22
|
-
generate_classname("pb_title_kit", variant, color, is_bold) + generate_responsive_size_classname
|
25
|
+
generate_classname("pb_title_kit", variant, color, is_bold, is_truncated) + generate_responsive_size_classname
|
23
26
|
else
|
24
|
-
generate_classname("pb_title_kit", size, variant, color, is_bold)
|
27
|
+
generate_classname("pb_title_kit", size, variant, color, is_bold, is_truncated)
|
25
28
|
end
|
26
29
|
end
|
27
30
|
|
@@ -29,6 +32,10 @@ module Playbook
|
|
29
32
|
bold ? nil : "thin"
|
30
33
|
end
|
31
34
|
|
35
|
+
def is_truncated
|
36
|
+
truncate ? "truncate_#{truncate}" : nil
|
37
|
+
end
|
38
|
+
|
32
39
|
def is_size_responsive
|
33
40
|
try(:size).is_a?(::Hash)
|
34
41
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
$text_align_start: start !default;
|
2
|
+
$text_align_end: end !default;
|
3
|
+
$text_align_left: left !default;
|
4
|
+
$text_align_right: right !default;
|
5
|
+
$text_align_center: center !default;
|
6
|
+
$text_align_justify: justify !default;
|
7
|
+
$text_align_justify_all: justify-all !default;
|
8
|
+
$text_align_match_parent: match-parent !default;
|
9
|
+
$text_align: (
|
10
|
+
start: $text_align_start,
|
11
|
+
end: $text_align_end,
|
12
|
+
left: $text_align_left,
|
13
|
+
right: $text_align_right,
|
14
|
+
center: $text_align_center,
|
15
|
+
justify: $text_align_justify,
|
16
|
+
justify_all: $text_align_justify_all,
|
17
|
+
match_parent: $text_align_match_parent
|
18
|
+
);
|
@@ -1,69 +1,112 @@
|
|
1
1
|
@import "../tokens/spacing";
|
2
2
|
|
3
3
|
$space_classes: (
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
4
|
+
xxs: $space_xxs,
|
5
|
+
xs: $space_xs,
|
6
|
+
sm: $space_sm,
|
7
|
+
md: $space_md,
|
8
|
+
lg: $space_lg,
|
9
|
+
xl: $space_xl,
|
10
|
+
none: 0,
|
11
11
|
auto: auto,
|
12
12
|
initial: initial,
|
13
13
|
inherit: inherit
|
14
14
|
);
|
15
15
|
|
16
16
|
$positions: (
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
17
|
+
m: "margin",
|
18
|
+
mr: "margin-right",
|
19
|
+
ml: "margin-left",
|
20
|
+
mt: "margin-top",
|
21
|
+
mb: "margin-bottom",
|
22
|
+
mx: ("margin-left", "margin-right"),
|
23
|
+
my: ("margin-top", "margin-bottom"),
|
24
|
+
p: "padding",
|
25
|
+
pr: "padding-right",
|
26
|
+
pl: "padding-left",
|
27
|
+
pt: "padding-top",
|
28
|
+
pb: "padding-bottom",
|
29
|
+
px: ("padding-left", "padding-right"),
|
30
|
+
py: ("padding-top", "padding-bottom")
|
31
31
|
);
|
32
32
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
33
|
+
$break_methods: (
|
34
|
+
at: "break_at",
|
35
|
+
on: "break_on",
|
36
|
+
);
|
37
|
+
|
38
|
+
@each $position_name,
|
39
|
+
$position in $positions {
|
40
|
+
|
41
|
+
@each $space_name,
|
42
|
+
$space in $space_classes {
|
43
|
+
.#{$position_name}_#{$space_name} {
|
44
|
+
@if type-of($position)=="list" {
|
45
|
+
@each $coordinate in $position {
|
46
|
+
#{$coordinate}: #{$space} !important;
|
47
|
+
}
|
48
|
+
}
|
49
|
+
|
50
|
+
@else {
|
51
|
+
#{$position}: #{$space} !important;
|
52
|
+
}
|
53
|
+
}
|
54
|
+
}
|
46
55
|
}
|
47
56
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
57
|
+
// Generate media queries
|
58
|
+
@each $size,
|
59
|
+
$size_value in $breakpoints_grid {
|
60
|
+
|
61
|
+
@each $position_name,
|
62
|
+
$position in $positions {
|
63
|
+
|
64
|
+
@each $break_method,
|
65
|
+
$method in $break_methods {
|
66
|
+
|
67
|
+
@each $space_name,
|
68
|
+
$space in $space_classes {
|
69
|
+
$min_size: map-get($size_value, "min");
|
70
|
+
$max_size: map-get($size_value, "max");
|
71
|
+
|
72
|
+
.break_#{$break_method}_#{$size}\:#{$position_name}_#{$space_name} {
|
73
|
+
@if type-of($position) == "list" {
|
74
|
+
@if $break_method == "on" {
|
75
|
+
@each $coordinate in $position {
|
76
|
+
@include break_on($min_size, $max_size) {
|
77
|
+
#{$coordinate}: #{$space} !important;
|
78
|
+
}
|
79
|
+
}
|
80
|
+
}
|
81
|
+
|
82
|
+
@else {
|
83
|
+
@each $coordinate in $position {
|
84
|
+
@if ($max_size != null) {
|
85
|
+
@include break_at($max_size) {
|
86
|
+
#{$coordinate}: #{$space} !important;
|
87
|
+
}
|
88
|
+
}
|
58
89
|
}
|
59
90
|
}
|
60
91
|
}
|
92
|
+
|
61
93
|
@else {
|
62
|
-
@
|
63
|
-
|
94
|
+
@if $break_method == "on" {
|
95
|
+
@include break_on($min_size, $max_size) {
|
96
|
+
#{$position}: #{$space} !important;
|
97
|
+
}
|
98
|
+
}
|
99
|
+
|
100
|
+
@else {
|
101
|
+
@if ($max_size != null) {
|
102
|
+
@include break_at($max_size) {
|
103
|
+
#{$position}: #{$space} !important;
|
104
|
+
}
|
105
|
+
}
|
64
106
|
}
|
65
107
|
}
|
66
|
-
|
67
|
-
|
68
|
-
|
108
|
+
}
|
109
|
+
}
|
110
|
+
}
|
111
|
+
}
|
69
112
|
}
|
@@ -62,6 +62,7 @@ type FlexWrap = {
|
|
62
62
|
|
63
63
|
type Hover = Shadow & {
|
64
64
|
background?: string,
|
65
|
+
color?: string,
|
65
66
|
scale?: "sm" | "md" | "lg"
|
66
67
|
}
|
67
68
|
|
@@ -85,6 +86,8 @@ type Margin = {
|
|
85
86
|
marginX?: AllSizes,
|
86
87
|
marginY?: AllSizes,
|
87
88
|
margin?: AllSizes,
|
89
|
+
break?: string,
|
90
|
+
default?: string
|
88
91
|
}
|
89
92
|
|
90
93
|
type MaxWidth = {
|
@@ -107,6 +110,8 @@ type Padding = {
|
|
107
110
|
paddingX?: AllSizes,
|
108
111
|
paddingY?: AllSizes,
|
109
112
|
padding?: AllSizes,
|
113
|
+
break?: string,
|
114
|
+
default?: string
|
110
115
|
}
|
111
116
|
|
112
117
|
type Position = {
|
@@ -119,6 +124,10 @@ type Shadow = {
|
|
119
124
|
|
120
125
|
type Space = "spaceBetween" | "spaceAround" | "spaceEvenly"
|
121
126
|
|
127
|
+
type TextAlign = {
|
128
|
+
textAlign?: "start" | "end" | "left" | "right" | "center" | "justify" | "justifyAll" | "matchParent",
|
129
|
+
}
|
130
|
+
|
122
131
|
type ZIndexType = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10
|
123
132
|
type ZIndexResponsiveType = {[key: string]: ZIndexType}
|
124
133
|
type ZIndex = {
|
@@ -130,7 +139,7 @@ export type GlobalProps = AlignContent & AlignItems & AlignSelf &
|
|
130
139
|
BorderRadius & Cursor & Dark & Display & DisplaySizes & Flex & FlexDirection &
|
131
140
|
FlexGrow & FlexShrink & FlexWrap & JustifyContent & JustifySelf &
|
132
141
|
LineHeight & Margin & MaxWidth & NumberSpacing & Order & Padding &
|
133
|
-
Position & Shadow & ZIndex & { hover?: string };
|
142
|
+
Position & Shadow & TextAlign & ZIndex & { hover?: string };
|
134
143
|
|
135
144
|
const getResponsivePropClasses = (prop: {[key: string]: string}, classPrefix: string) => {
|
136
145
|
const keys: string[] = Object.keys(prop)
|
@@ -149,6 +158,7 @@ const PROP_CATEGORIES: {[key:string]: (props: {[key: string]: any}) => string} =
|
|
149
158
|
css += hover.shadow ? `hover_shadow_${hover.shadow} ` : '';
|
150
159
|
css += hover.background ? `hover_background_${hover.background } ` : '';
|
151
160
|
css += hover.scale ? `hover_scale_${hover.scale} ` : '';
|
161
|
+
css += hover.color ? `hover_color_${hover.color } ` : '';
|
152
162
|
return css;
|
153
163
|
},
|
154
164
|
|
@@ -186,13 +196,24 @@ const PROP_CATEGORIES: {[key:string]: (props: {[key: string]: any}) => string} =
|
|
186
196
|
padding,
|
187
197
|
};
|
188
198
|
|
199
|
+
const screenSizeValues = ["xs", "sm", "md", "lg", "xl"]
|
200
|
+
|
189
201
|
function handleObjectValue(properties: Margin | Padding, prefix: string) {
|
190
202
|
let classResult = '';
|
191
203
|
|
204
|
+
const breakValue = properties.break || "on";
|
205
|
+
const defaultValue = properties.default || null;
|
206
|
+
|
192
207
|
Object.entries(properties).forEach(([key, value]) => {
|
193
|
-
|
208
|
+
if (screenSizeValues.includes(key)) {
|
209
|
+
classResult += `break_${breakValue}_${key}:${prefix}_${value} `;
|
210
|
+
}
|
194
211
|
});
|
195
212
|
|
213
|
+
if (defaultValue) {
|
214
|
+
classResult += `${prefix}_${defaultValue} `;
|
215
|
+
}
|
216
|
+
|
196
217
|
return classResult;
|
197
218
|
}
|
198
219
|
|
@@ -377,6 +398,13 @@ const PROP_CATEGORIES: {[key:string]: (props: {[key: string]: any}) => string} =
|
|
377
398
|
css += position && position !== 'static' ? `position_${position}` : ''
|
378
399
|
return css
|
379
400
|
},
|
401
|
+
textAlignProps: ({ textAlign }: TextAlign) => {
|
402
|
+
if (typeof textAlign === 'object') {
|
403
|
+
return getResponsivePropClasses(textAlign, 'text_align')
|
404
|
+
} else {
|
405
|
+
return textAlign ? `text_align_${textAlign} ` : ''
|
406
|
+
}
|
407
|
+
}
|
380
408
|
}
|
381
409
|
|
382
410
|
type DefaultProps = {[key: string]: string} | Record<string, unknown>
|