playbook_ui 13.2.0 → 13.4.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.
- 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>
|