playbook_ui 7.1.0.pre.alpha1 → 7.1.0.pre.alpha2
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/pb_bar_graph/bar_graph.rb +1 -0
- data/app/pb_kits/playbook/pb_body/body.rb +1 -1
- data/app/pb_kits/playbook/pb_caption/_caption.html.erb +7 -5
- data/app/pb_kits/playbook/pb_caption/docs/_caption_block.html.erb +11 -0
- data/app/pb_kits/playbook/pb_caption/docs/_caption_block.jsx +28 -0
- data/app/pb_kits/playbook/pb_caption/docs/example.yml +2 -0
- data/app/pb_kits/playbook/pb_caption/docs/index.js +1 -0
- data/app/pb_kits/playbook/pb_line_graph/line_graph.rb +1 -0
- data/app/pb_kits/playbook/pb_time/_time.html.erb +17 -20
- data/app/pb_kits/playbook/pb_time/_time.jsx +40 -27
- data/app/pb_kits/playbook/pb_time/_time.scss +4 -24
- data/app/pb_kits/playbook/pb_time/docs/_time_align.jsx +4 -1
- data/app/pb_kits/playbook/pb_time/docs/_time_default.html.erb +11 -11
- data/app/pb_kits/playbook/pb_time/docs/_time_default.jsx +13 -1
- data/app/pb_kits/playbook/pb_time/docs/_time_sizes.jsx +4 -1
- data/app/pb_kits/playbook/pb_time/docs/_time_timestamp.jsx +3 -1
- data/app/pb_kits/playbook/pb_time/docs/_time_timezone.jsx +7 -2
- data/lib/generators/kit/USAGE +5 -0
- data/lib/generators/kit/kit_generator.rb +95 -0
- data/lib/generators/kit/templates/kit_example_rails.erb.tt +1 -0
- data/lib/generators/kit/templates/kit_example_react.erb.tt +10 -0
- data/lib/generators/kit/templates/kit_example_yml.erb.tt +9 -0
- data/lib/generators/kit/templates/kit_html.erb.tt +7 -0
- data/lib/generators/kit/templates/kit_js.erb.tt +1 -0
- data/lib/generators/kit/templates/kit_jsx.erb.tt +68 -0
- data/lib/generators/kit/templates/kit_ruby.erb.tt +11 -0
- data/lib/generators/kit/templates/kit_ruby_spec.erb.tt +11 -0
- data/lib/generators/kit/templates/kit_scss.erb +3 -0
- data/lib/playbook/version.rb +1 -1
- data/lib/tasks/changelog.rake +14 -0
- data/lib/tasks/pb_release.rake +88 -0
- data/lib/tasks/playbook_tasks.rake +26 -0
- metadata +18 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9d793fb38923075c62383c618585aebba3516a5573d81ed4a7b7da05bc6ec0e1
|
4
|
+
data.tar.gz: 4918ac3b820aedf79c9873f6efcceebf0c555879aefb97ce649c1329af089b43
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: efc9b1216f6970e79c45d992a67c481af899364ab851acf3953d6cf9b5152d69648f562c1086dc8c0fb4b2b20f1249a7a3b5d543d9d495b70d977c49b85caa8a
|
7
|
+
data.tar.gz: 9c0d61bc682f99cb0d49265a33aa79d736905d3e62798456e99d2f540f03875d39d788746be370fd8fec7d6a917cec615ccca1b1de17d9e30f5ba58845097efa
|
@@ -1,5 +1,7 @@
|
|
1
|
-
<%= content_tag(object.tag,
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
1
|
+
<%= content_tag(object.tag,
|
2
|
+
aria: object.aria,
|
3
|
+
id: object.id,
|
4
|
+
data: object.data,
|
5
|
+
class: object.classname) do %>
|
6
|
+
<%= object.children.present? ? capture(&object.children) : object.text %>
|
7
|
+
<% end %>
|
@@ -0,0 +1,28 @@
|
|
1
|
+
import React from 'react'
|
2
|
+
import { Caption } from '../../'
|
3
|
+
|
4
|
+
const CaptionBlock = (props) => {
|
5
|
+
return (
|
6
|
+
<div>
|
7
|
+
<Caption {...props}>
|
8
|
+
{'Block'}
|
9
|
+
</Caption>
|
10
|
+
|
11
|
+
<Caption
|
12
|
+
{...props}
|
13
|
+
size="lg"
|
14
|
+
>
|
15
|
+
{'Large Block'}
|
16
|
+
</Caption>
|
17
|
+
|
18
|
+
<Caption
|
19
|
+
{...props}
|
20
|
+
size="xs"
|
21
|
+
>
|
22
|
+
{'Subcaption Block'}
|
23
|
+
</Caption>
|
24
|
+
</div>
|
25
|
+
)
|
26
|
+
}
|
27
|
+
|
28
|
+
export default CaptionBlock
|
@@ -2,39 +2,36 @@
|
|
2
2
|
id: object.id,
|
3
3
|
data: object.data,
|
4
4
|
class: object.classname) do %>
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
5
|
+
<%
|
6
|
+
# convert deprecated prop values
|
7
|
+
size = object.size
|
8
|
+
size = "sm" if object.size == "xs"
|
9
|
+
size = "md" if object.size == "lg"
|
10
|
+
%>
|
11
11
|
<% if size == "md" %>
|
12
12
|
<% if object.show_icon %>
|
13
13
|
<%= pb_rails("body", props: { color: "light", tag: "span"}) do %>
|
14
|
-
<%= pb_rails("icon", props: { icon: "clock", fixed_width: true
|
14
|
+
<%= pb_rails("icon", props: { icon: "clock", fixed_width: true }) %>
|
15
15
|
<% end %>
|
16
16
|
<% end %>
|
17
|
-
<%= pb_rails("
|
17
|
+
<%= pb_rails("body", props: { tag: "span", text: object.format_time_string, classname: "pb_time" }) %>
|
18
18
|
<% if object.show_timezone %>
|
19
|
-
<%=
|
20
|
-
<%= object.pb_date_time.to_timezone.upcase %>
|
21
|
-
<% end %>
|
19
|
+
<%= pb_rails("body", props: { color: "light", tag: "span", text: object.pb_date_time.to_timezone.upcase }) %>
|
22
20
|
<% end %>
|
23
21
|
<% else %>
|
24
22
|
<% if object.show_icon %>
|
25
23
|
<%= pb_rails("body", props: { color: "light", tag: "span"}) do %>
|
26
|
-
<%= pb_rails("icon", props: { icon: "clock", fixed_width: true }) %>
|
24
|
+
<%= pb_rails("icon", props: { icon: "clock", fixed_width: true, size: "sm" }) %>
|
27
25
|
<% end %>
|
28
26
|
<% end %>
|
29
|
-
|
27
|
+
|
28
|
+
<%= pb_rails("caption", props: { color: "light", tag: "span", text: object.format_time_string }) do %>
|
30
29
|
<%= content_tag(:time, datetime: object.pb_date_time.to_iso) do %>
|
31
|
-
<%=
|
32
|
-
|
33
|
-
|
34
|
-
<%=
|
35
|
-
|
36
|
-
<% end %>
|
37
|
-
<% end %>
|
30
|
+
<%= object.format_time_string %>
|
31
|
+
<% if object.show_timezone %>
|
32
|
+
<span class="pb_time_timezone">
|
33
|
+
<%= object.pb_date_time.to_timezone.upcase %>
|
34
|
+
</span>
|
38
35
|
<% end %>
|
39
36
|
<% end %>
|
40
37
|
<% end %>
|
@@ -18,11 +18,12 @@ type TimeProps = {
|
|
18
18
|
id?: string,
|
19
19
|
showIcon?: boolean,
|
20
20
|
size?: 'md' | 'sm',
|
21
|
+
showTimezone?: boolean,
|
21
22
|
timeZone?: string,
|
22
23
|
}
|
23
24
|
|
24
25
|
const Time = (props: TimeProps) => {
|
25
|
-
const { align, className, date, showIcon, size, timeZone } = props
|
26
|
+
const { align, className, date, showIcon, size, timeZone, showTimezone = true } = props
|
26
27
|
const classes = classnames(
|
27
28
|
buildCss('pb_time_kit', align, size),
|
28
29
|
globalProps(props),
|
@@ -33,41 +34,53 @@ const Time = (props: TimeProps) => {
|
|
33
34
|
|
34
35
|
return (
|
35
36
|
<div className={classes}>
|
36
|
-
<
|
37
|
-
<
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
37
|
+
<If condition={showIcon}>
|
38
|
+
<Body
|
39
|
+
color="light"
|
40
|
+
tag="span"
|
41
|
+
>
|
42
|
+
<Icon
|
43
|
+
fixedWidth
|
44
|
+
icon="clock"
|
45
|
+
size={size === 'md' ? '' : 'sm'}
|
46
|
+
/>
|
47
|
+
</Body>
|
48
|
+
{' '}
|
49
|
+
</If>
|
50
|
+
|
51
|
+
<time dateTime={date}>
|
52
|
+
<span>
|
53
|
+
<If condition={size === 'md'}>
|
54
|
+
<Body
|
55
|
+
className="pb_time"
|
56
|
+
tag="span"
|
57
|
+
text={dateTimestamp.toTimeWithMeridian()}
|
46
58
|
/>
|
47
|
-
|
48
|
-
|
49
|
-
</If>
|
50
|
-
<time dateTime={date}>
|
51
|
-
<span>
|
52
|
-
<If condition={size !== 'md'}>
|
59
|
+
{' '}
|
60
|
+
<If condition={showTimezone}>
|
53
61
|
<Body
|
54
62
|
color="light"
|
55
63
|
tag="span"
|
56
|
-
text={dateTimestamp.
|
64
|
+
text={dateTimestamp.toTimezone()}
|
57
65
|
/>
|
58
|
-
|
66
|
+
</If>
|
67
|
+
<Else />
|
68
|
+
<Caption
|
69
|
+
color="light"
|
70
|
+
tag="span"
|
71
|
+
text={dateTimestamp.toTimeWithMeridian()}
|
72
|
+
/>
|
73
|
+
{' '}
|
74
|
+
<If condition={showTimezone}>
|
59
75
|
<Caption
|
60
|
-
|
76
|
+
color="light"
|
61
77
|
tag="span"
|
62
|
-
text={dateTimestamp.
|
78
|
+
text={dateTimestamp.toTimezone()}
|
63
79
|
/>
|
64
80
|
</If>
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
</span>
|
69
|
-
</time>
|
70
|
-
</span>
|
81
|
+
</If>
|
82
|
+
</span>
|
83
|
+
</time>
|
71
84
|
</div>
|
72
85
|
)
|
73
86
|
}
|
@@ -5,8 +5,6 @@
|
|
5
5
|
@import "../pb_caption/caption";
|
6
6
|
|
7
7
|
[class^=pb_time_kit] {
|
8
|
-
letter-spacing: $lspace_looser;
|
9
|
-
text-transform: uppercase;
|
10
8
|
&[class*=_center] {
|
11
9
|
text-align: center;
|
12
10
|
}
|
@@ -15,10 +13,6 @@
|
|
15
13
|
text-align: right;
|
16
14
|
}
|
17
15
|
|
18
|
-
[class^=pb_body] {
|
19
|
-
font-weight: $bold !important;
|
20
|
-
}
|
21
|
-
|
22
16
|
[class^=pb_time_timezone] {
|
23
17
|
color: $text_lt_light;
|
24
18
|
font-weight: $bold;
|
@@ -28,26 +22,12 @@
|
|
28
22
|
}
|
29
23
|
}
|
30
24
|
|
31
|
-
&[class*=
|
32
|
-
|
33
|
-
|
34
|
-
letter-spacing: $lspace_tight;
|
35
|
-
text-transform: capitalize;
|
36
|
-
}
|
37
|
-
[class^=pb_time_timezone] {
|
38
|
-
color: $text_lt_light;
|
39
|
-
font-size: $font-large !important;
|
40
|
-
font-weight: $regular;
|
41
|
-
letter-spacing: $lspace_tight;
|
25
|
+
&[class*=dark] {
|
26
|
+
& * {
|
27
|
+
@include caption_dark;
|
42
28
|
}
|
43
|
-
|
44
|
-
|
45
|
-
&.dark {
|
46
|
-
[class^=pb_caption_kit] {
|
29
|
+
.pb_time {
|
47
30
|
color: $text_dk_default;
|
48
31
|
}
|
49
|
-
[class^=pb_body_kit] {
|
50
|
-
color: $text_dk_light;
|
51
|
-
}
|
52
32
|
}
|
53
33
|
}
|
@@ -1,24 +1,27 @@
|
|
1
1
|
import React from 'react'
|
2
2
|
import Time from '../_time.jsx'
|
3
3
|
|
4
|
-
const TimeAlign = () => {
|
4
|
+
const TimeAlign = (props) => {
|
5
5
|
return (
|
6
6
|
<div>
|
7
7
|
<Time
|
8
8
|
date={new Date()}
|
9
9
|
size="md"
|
10
|
+
{...props}
|
10
11
|
/>
|
11
12
|
<br />
|
12
13
|
<Time
|
13
14
|
align="center"
|
14
15
|
date={new Date()}
|
15
16
|
size="md"
|
17
|
+
{...props}
|
16
18
|
/>
|
17
19
|
<br />
|
18
20
|
<Time
|
19
21
|
align="right"
|
20
22
|
date={new Date()}
|
21
23
|
size="md"
|
24
|
+
{...props}
|
22
25
|
/>
|
23
26
|
</div>
|
24
27
|
)
|
@@ -1,38 +1,38 @@
|
|
1
1
|
<%= pb_rails("time", props: {
|
2
2
|
show_timezone: false,
|
3
|
-
time: Time.now
|
3
|
+
time: Time.now
|
4
4
|
}) %>
|
5
5
|
|
6
6
|
<br>
|
7
7
|
|
8
8
|
<%= pb_rails("time", props: {
|
9
9
|
time: DateTime.now,
|
10
|
-
timezone: "America/
|
10
|
+
timezone: "America/New_York"
|
11
11
|
}) %>
|
12
12
|
|
13
13
|
<br>
|
14
14
|
|
15
15
|
<%= pb_rails("time", props: {
|
16
|
-
time: "2012-08-02T15:49:29Z",
|
17
16
|
show_icon: true,
|
18
17
|
show_timezone: false,
|
18
|
+
time: "2012-08-02T15:49:29Z",
|
19
19
|
}) %>
|
20
20
|
|
21
21
|
<br>
|
22
22
|
|
23
23
|
<%= pb_rails("time", props: {
|
24
|
-
time: "2012-08-02T15:49:29Z",
|
25
24
|
show_icon: true,
|
26
|
-
|
25
|
+
time: "2012-08-02T15:49:29Z",
|
26
|
+
timezone: "America/New_York"
|
27
27
|
}) %>
|
28
28
|
|
29
|
-
|
30
|
-
|
29
|
+
<br>
|
30
|
+
<br>
|
31
31
|
|
32
|
-
|
33
|
-
time: Time.now,
|
34
|
-
size: "md",
|
32
|
+
<%= pb_rails("time", props: {
|
35
33
|
show_timezone: false,
|
34
|
+
size: "md",
|
35
|
+
time: Time.now,
|
36
36
|
}) %>
|
37
37
|
|
38
38
|
<br>
|
@@ -47,8 +47,8 @@
|
|
47
47
|
|
48
48
|
<%= pb_rails("time", props: {
|
49
49
|
show_icon: true,
|
50
|
-
size: "md",
|
51
50
|
show_timezone: false,
|
51
|
+
size: "md",
|
52
52
|
time: "2012-08-02T15:49:29Z",
|
53
53
|
}) %>
|
54
54
|
|
@@ -1,45 +1,56 @@
|
|
1
1
|
import React from 'react'
|
2
2
|
import Time from '../_time.jsx'
|
3
3
|
|
4
|
-
const TimeDefault = () => {
|
4
|
+
const TimeDefault = (props) => {
|
5
5
|
return (
|
6
6
|
<div>
|
7
7
|
<Time
|
8
8
|
date={new Date().getTime()}
|
9
|
+
showTimezone={false}
|
10
|
+
{...props}
|
9
11
|
/>
|
10
12
|
<br />
|
11
13
|
<Time
|
12
14
|
date={new Date()}
|
13
15
|
timeZone="America/New_York"
|
16
|
+
{...props}
|
14
17
|
/>
|
15
18
|
<br />
|
16
19
|
<Time
|
17
20
|
date={new Date().getTime()}
|
18
21
|
showIcon
|
22
|
+
showTimezone={false}
|
23
|
+
{...props}
|
19
24
|
/>
|
20
25
|
<br />
|
21
26
|
<Time
|
22
27
|
date={new Date()}
|
23
28
|
showIcon
|
24
29
|
timeZone="America/New_York"
|
30
|
+
{...props}
|
25
31
|
/>
|
26
32
|
<br />
|
27
33
|
<br />
|
28
34
|
<Time
|
29
35
|
date={new Date()}
|
36
|
+
showTimezone={false}
|
30
37
|
size="md"
|
38
|
+
{...props}
|
31
39
|
/>
|
32
40
|
<br />
|
33
41
|
<Time
|
34
42
|
date={new Date()}
|
35
43
|
size="md"
|
36
44
|
timeZone="America/New_York"
|
45
|
+
{...props}
|
37
46
|
/>
|
38
47
|
<br />
|
39
48
|
<Time
|
40
49
|
date={new Date()}
|
41
50
|
showIcon
|
51
|
+
showTimezone={false}
|
42
52
|
size="md"
|
53
|
+
{...props}
|
43
54
|
/>
|
44
55
|
<br />
|
45
56
|
<Time
|
@@ -47,6 +58,7 @@ const TimeDefault = () => {
|
|
47
58
|
showIcon
|
48
59
|
size="md"
|
49
60
|
timeZone="America/New_York"
|
61
|
+
{...props}
|
50
62
|
/>
|
51
63
|
</div>
|
52
64
|
)
|
@@ -1,16 +1,19 @@
|
|
1
1
|
import React, { Fragment } from 'react'
|
2
2
|
import Time from '../_time.jsx'
|
3
3
|
|
4
|
-
const TimeSizes = () => {
|
4
|
+
const TimeSizes = (props) => {
|
5
5
|
return (
|
6
6
|
<Fragment>
|
7
7
|
<Time
|
8
8
|
date={new Date()}
|
9
|
+
{...props}
|
9
10
|
/>
|
10
11
|
<br />
|
11
12
|
<Time
|
12
13
|
date={new Date()}
|
13
14
|
size="md"
|
15
|
+
timeZone="America/New_York"
|
16
|
+
{...props}
|
14
17
|
/>
|
15
18
|
</Fragment>
|
16
19
|
)
|
@@ -1,12 +1,13 @@
|
|
1
1
|
import React from 'react'
|
2
2
|
import Time from '../_time.jsx'
|
3
3
|
|
4
|
-
const TimeStamp = () => {
|
4
|
+
const TimeStamp = (props) => {
|
5
5
|
return (
|
6
6
|
<div>
|
7
7
|
<Time
|
8
8
|
date={new Date()}
|
9
9
|
size="sm"
|
10
|
+
{...props}
|
10
11
|
/>
|
11
12
|
|
12
13
|
<br />
|
@@ -14,6 +15,7 @@ const TimeStamp = () => {
|
|
14
15
|
<Time
|
15
16
|
date={new Date().getTime()}
|
16
17
|
size="sm"
|
18
|
+
{...props}
|
17
19
|
/>
|
18
20
|
</div>
|
19
21
|
)
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import React from 'react'
|
2
2
|
import Time from '../_time.jsx'
|
3
3
|
|
4
|
-
const
|
4
|
+
const TimeTimezone = (props) => {
|
5
5
|
const zones = {
|
6
6
|
east: 'America/New_York',
|
7
7
|
central: 'America/Chicago',
|
@@ -16,6 +16,7 @@ const TimeTimeZone = () => {
|
|
16
16
|
date={new Date()}
|
17
17
|
size="md"
|
18
18
|
timeZone={zones.east}
|
19
|
+
{...props}
|
19
20
|
/>
|
20
21
|
|
21
22
|
<br />
|
@@ -24,6 +25,7 @@ const TimeTimeZone = () => {
|
|
24
25
|
<Time
|
25
26
|
date={new Date()}
|
26
27
|
timeZone={zones.central}
|
28
|
+
{...props}
|
27
29
|
/>
|
28
30
|
|
29
31
|
<br />
|
@@ -32,6 +34,7 @@ const TimeTimeZone = () => {
|
|
32
34
|
<Time
|
33
35
|
date={new Date()}
|
34
36
|
timeZone={zones.mountain}
|
37
|
+
{...props}
|
35
38
|
/>
|
36
39
|
|
37
40
|
<br />
|
@@ -40,6 +43,7 @@ const TimeTimeZone = () => {
|
|
40
43
|
<Time
|
41
44
|
date={new Date()}
|
42
45
|
timeZone={zones.west}
|
46
|
+
{...props}
|
43
47
|
/>
|
44
48
|
|
45
49
|
<br />
|
@@ -48,10 +52,11 @@ const TimeTimeZone = () => {
|
|
48
52
|
<Time
|
49
53
|
date={new Date()}
|
50
54
|
timeZone={zones.asia}
|
55
|
+
{...props}
|
51
56
|
/>
|
52
57
|
|
53
58
|
</div>
|
54
59
|
)
|
55
60
|
}
|
56
61
|
|
57
|
-
export default
|
62
|
+
export default TimeTimezone
|
@@ -0,0 +1,95 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class KitGenerator < Rails::Generators::NamedBase
|
4
|
+
desc "This generator creates a new Playbook Kit"
|
5
|
+
source_root File.expand_path("templates", __dir__)
|
6
|
+
class_option :props, type: :array, default: []
|
7
|
+
|
8
|
+
def create_templates
|
9
|
+
kit_name = name.strip.downcase
|
10
|
+
@kit_name_uppercase = kit_name.upcase
|
11
|
+
@kit_name_lowercase = kit_name
|
12
|
+
@kit_name_capitalize = kit_name.capitalize
|
13
|
+
@kit_name_underscore = kit_name.parameterize.underscore
|
14
|
+
@kit_name_pascal = kit_name.titleize.gsub(/\s+/, "")
|
15
|
+
|
16
|
+
kit_props = options[:props].concat(%w[id:string classname:string data:object aria:object])
|
17
|
+
@kit_props = kit_props.map { |hash| [hash.partition(":").first, hash.partition(":").last] }.to_h
|
18
|
+
@kit_props = @kit_props.sort.to_h
|
19
|
+
@unique_props = @kit_props.symbolize_keys.without(:id, :classname, :data, :aria)
|
20
|
+
|
21
|
+
@kit_class_init = []
|
22
|
+
@kit_props.each do |key, _val|
|
23
|
+
@kit_class_init.push("#{key.parameterize.underscore}: default_configuration".to_sym)
|
24
|
+
end
|
25
|
+
|
26
|
+
@kit_class_val = []
|
27
|
+
@kit_props.each do |key, _value|
|
28
|
+
@kit_class_val.push("self.configured_#{key.parameterize.underscore} = #{key.parameterize.underscore}")
|
29
|
+
end
|
30
|
+
|
31
|
+
full_kit_directory = "app/pb_kits/playbook/pb_#{@kit_name_underscore}"
|
32
|
+
|
33
|
+
# Check if kit already exists =======================
|
34
|
+
if File.directory?(full_kit_directory)
|
35
|
+
say_status "#{@kit_name_capitalize} kit already exists.",
|
36
|
+
"Please choose another name or manually make changes to the existing kit.",
|
37
|
+
:red
|
38
|
+
return
|
39
|
+
else
|
40
|
+
# Add kit to Playbook menu ==========================
|
41
|
+
open("app/pb_kits/playbook/data/menu.yml", "a") do |f|
|
42
|
+
f.puts " - #{@kit_name_underscore}"
|
43
|
+
end
|
44
|
+
say_status "complete",
|
45
|
+
"#{@kit_name_capitalize} kit added to Playbook menu.",
|
46
|
+
:green
|
47
|
+
|
48
|
+
# Generate SCSS files ==============================
|
49
|
+
template "kit_scss.erb", "#{full_kit_directory}/_#{@kit_name_underscore}.scss"
|
50
|
+
open("app/pb_kits/playbook/_playbook.scss", "a") do |f|
|
51
|
+
f.puts "\n@" + "import " + "\'" + "pb_#{@kit_name_underscore}/#{@kit_name_underscore}" + "\';"
|
52
|
+
end
|
53
|
+
say_status "complete",
|
54
|
+
"#{@kit_name_capitalize} kit stylesheet successfully created and imported.",
|
55
|
+
:green
|
56
|
+
|
57
|
+
# Ask user if Rails version should be generated ======
|
58
|
+
if yes?("Create RAILS #{@kit_name_underscore} kit? (y/N)")
|
59
|
+
@rails_kit = true
|
60
|
+
template "kit_ruby.erb", "#{full_kit_directory}/#{@kit_name_underscore}.rb"
|
61
|
+
template "kit_html.erb", "#{full_kit_directory}/_#{@kit_name_underscore}.html.erb"
|
62
|
+
template "kit_example_rails.erb", "#{full_kit_directory}/docs/_#{@kit_name_underscore}_default.html.erb"
|
63
|
+
template "kit_ruby_spec.erb", "spec/pb_kits/playbook/kits/#{@kit_name_underscore}_spec.rb"
|
64
|
+
say_status "complete",
|
65
|
+
"#{@kit_name_capitalize} rails kit successfully created.",
|
66
|
+
:green
|
67
|
+
end
|
68
|
+
|
69
|
+
# Ask user if React version should be generated ======
|
70
|
+
if yes?("Create REACT #{@kit_name_pascal} kit? (y/N)")
|
71
|
+
@react_kit = true
|
72
|
+
template "kit_jsx.erb", "#{full_kit_directory}/_#{@kit_name_underscore}.jsx"
|
73
|
+
template "kit_example_react.erb", "#{full_kit_directory}/docs/_#{@kit_name_underscore}_default.jsx"
|
74
|
+
template "kit_js.erb", "#{full_kit_directory}/docs/index.js"
|
75
|
+
|
76
|
+
# Import kit examples ===========================
|
77
|
+
append_to_file("app/pb_kits/playbook/packs/react-examples.js") do
|
78
|
+
"import * as #{@kit_name_pascal} from 'pb_#{@kit_name_underscore}/docs'\nWebpackerReact.setup(#{@kit_name_pascal})\n"
|
79
|
+
end
|
80
|
+
append_to_file("app/pb_kits/playbook/index.js") do
|
81
|
+
"\nexport #{@kit_name_pascal} from 'pb_#{@kit_name_underscore}/_#{@kit_name_underscore}.jsx'"
|
82
|
+
end
|
83
|
+
|
84
|
+
say_status "complete",
|
85
|
+
"#{@kit_name_capitalize} react kit successfully created.",
|
86
|
+
:green
|
87
|
+
end
|
88
|
+
|
89
|
+
# Create kit example.yml
|
90
|
+
template "kit_example_yml.erb", "#{full_kit_directory}/docs/example.yml"
|
91
|
+
|
92
|
+
`rubocop --safe-auto-correct #{full_kit_directory}`
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
<%%= pb_rails("<%= @kit_name_underscore %>") %>
|
@@ -0,0 +1 @@
|
|
1
|
+
export { default as <%= @kit_name_pascal %>Default } from './_<%= @kit_name_underscore %>_default.jsx'
|
@@ -0,0 +1,68 @@
|
|
1
|
+
<%
|
2
|
+
break_lines = lambda do |list, spaces = 2, separator = ","|
|
3
|
+
list.join("#{separator}\n#{" " * spaces}") + separator
|
4
|
+
end
|
5
|
+
|
6
|
+
type_name = "#{@kit_name_pascal}Props"
|
7
|
+
|
8
|
+
props_types = @kit_props.map do |key, val|
|
9
|
+
prop_name = key == "classname" ? "className" : key.camelize(:lower)
|
10
|
+
prop_type = case val
|
11
|
+
when "enum", "one_of" then "'option_1' | 'option_2'"
|
12
|
+
when "boolean", "bool" then "boolean"
|
13
|
+
when "object", "obj" then "object"
|
14
|
+
else "string"
|
15
|
+
end
|
16
|
+
|
17
|
+
"#{prop_name}?: #{prop_type}"
|
18
|
+
end
|
19
|
+
puts props_types.inspect
|
20
|
+
|
21
|
+
props_names = @kit_props.keys.map do |key|
|
22
|
+
case key
|
23
|
+
when "classname" || "className"
|
24
|
+
"className"
|
25
|
+
when "aria"
|
26
|
+
"aria = {}"
|
27
|
+
when "data"
|
28
|
+
"data = {}"
|
29
|
+
else
|
30
|
+
key
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
%>
|
35
|
+
|
36
|
+
/* @flow */
|
37
|
+
|
38
|
+
import React from 'react'
|
39
|
+
import classnames from 'classnames'
|
40
|
+
import { buildAriaProps, buildCss, buildDataProps } from '../utilities/props'
|
41
|
+
import { globalProps } from '../utilities/globalProps.js'
|
42
|
+
|
43
|
+
type <%= type_name %> = {
|
44
|
+
<%= break_lines.call(props_types) %>
|
45
|
+
}
|
46
|
+
|
47
|
+
const <%= @kit_name_pascal %> = (props: <%= type_name %>) => {
|
48
|
+
const {
|
49
|
+
<%= break_lines.call(props_names) %>
|
50
|
+
} = props
|
51
|
+
|
52
|
+
const ariaProps = buildAriaProps(aria)
|
53
|
+
const dataProps = buildDataProps(data)
|
54
|
+
const classes = classnames(buildCss('pb_<%= @kit_name_underscore %>'), globalProps(props), className)
|
55
|
+
|
56
|
+
return (
|
57
|
+
<div
|
58
|
+
{...ariaProps}
|
59
|
+
{...dataProps}
|
60
|
+
className={classes}
|
61
|
+
id={id}
|
62
|
+
>
|
63
|
+
{className}
|
64
|
+
</div>
|
65
|
+
)
|
66
|
+
}
|
67
|
+
|
68
|
+
export default <%= @kit_name_pascal %>
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "../../../../app/pb_kits/playbook/pb_<%= @kit_name_underscore %>/<%= @kit_name_underscore %>"
|
4
|
+
|
5
|
+
RSpec.describe Playbook::Pb<%= @kit_name_capitalize %>::<%= @kit_name_capitalize %> do
|
6
|
+
subject { Playbook::Pb<%= @kit_name_capitalize %>::<%= @kit_name_capitalize %> }
|
7
|
+
|
8
|
+
it { is_expected.to define_partial }
|
9
|
+
|
10
|
+
# Do not leave this file blank. Use other spec files for example tests.
|
11
|
+
end
|
data/lib/playbook/version.rb
CHANGED
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'github_changelog_generator/task'
|
2
|
+
|
3
|
+
GitHubChangelogGenerator::RakeTask.new :changelog do |config|
|
4
|
+
config.user = 'powerhome'
|
5
|
+
config.project = 'playbook'
|
6
|
+
config.since_tag = Playbook::VERSION
|
7
|
+
config.header = ''
|
8
|
+
config.issues = false
|
9
|
+
config.base = 'CHANGELOG.md'
|
10
|
+
config.enhancement_prefix = '**Kit Enhancements:**'
|
11
|
+
config.bug_prefix = '**Fixed Bugs:**'
|
12
|
+
config.max_issues = 75
|
13
|
+
config.add_sections = {"New Kits":{"prefix":"**New Kits:**","labels":["new kit"]},"Improvements": {"prefix":"**Improvements:**","labels":["improvement"]},"Breaking": {"prefix":"**Breaking Changes:**","labels":["breaking"]}}
|
14
|
+
end
|
@@ -0,0 +1,88 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
namespace :pb_release do
|
4
|
+
desc "Update the version number in preparation to release"
|
5
|
+
task version: :environment do
|
6
|
+
puts "\n"
|
7
|
+
puts "*" * 20 + " Create New Playbook Release " + "*" * 20
|
8
|
+
ack = "\nFirst, before creating a new version please make sure you are familiar with SemVer guidlines: "
|
9
|
+
ack += "\nhttps://semver.org/#semantic-versioning-specification-semver. "
|
10
|
+
ack += "\n\nDoing so will ensure the proper version is selected for the release. "
|
11
|
+
ack += "\nSee also: https://github.com/powerhome/playbook/wiki/Releasing-a-New-Version#determining-the-version."
|
12
|
+
ack += "\n\nReady to start? y/N"
|
13
|
+
STDOUT.puts ack
|
14
|
+
agreed = STDIN.gets.chomp.downcase
|
15
|
+
|
16
|
+
if agreed == "y"
|
17
|
+
old_version = Playbook::VERSION
|
18
|
+
STDOUT.puts "What would you like the next release number to be? Currently #{old_version}"
|
19
|
+
new_version = STDIN.gets.chomp
|
20
|
+
puts "Ok great, let's make version #{new_version}"
|
21
|
+
puts "\n\n"
|
22
|
+
|
23
|
+
# Update package.json
|
24
|
+
package = File.read("package.json")
|
25
|
+
new_package = package.gsub(/"version": "#{old_version}",/, "\"version\": \"#{new_version}\",")
|
26
|
+
File.open("package.json", "w") { |file| file.puts new_package }
|
27
|
+
puts "Updated package.json"
|
28
|
+
|
29
|
+
# Update version.rb
|
30
|
+
version_rb = File.read("lib/playbook/version.rb")
|
31
|
+
new_version_rb = version_rb.gsub(/VERSION = "#{old_version}".freeze/, "VERSION = \"#{new_version}\".freeze")
|
32
|
+
File.open("lib/playbook/version.rb", "w") { |file| file.puts new_version_rb }
|
33
|
+
puts "Updated lib/playbook/version.rb"
|
34
|
+
|
35
|
+
# Update gemfile.lock
|
36
|
+
gemfile = File.read("Gemfile.lock")
|
37
|
+
new_gemfile = gemfile.gsub(/playbook_ui \(#{Regexp.escape(old_version)}\)/, "playbook_ui (#{new_version})")
|
38
|
+
File.open("Gemfile.lock", "w") { |file| file.puts new_gemfile }
|
39
|
+
puts "Updated Gemfile.lock"
|
40
|
+
puts "\n\n"
|
41
|
+
|
42
|
+
puts "\nCreating dist files"
|
43
|
+
`yarn release`
|
44
|
+
|
45
|
+
puts "Commit your changes and create a PR to merge to master"
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
desc "Publish to RubyGems, NPM, and Create a Tag"
|
50
|
+
task push: :environment do
|
51
|
+
version = Playbook::VERSION
|
52
|
+
puts "You about to release version #{version}. Is that correct? (y/N)"
|
53
|
+
input = STDIN.gets.chomp
|
54
|
+
raise Nope unless input.downcase == "y"
|
55
|
+
|
56
|
+
# RubyGems
|
57
|
+
puts "\nCreating Gem..."
|
58
|
+
`gem build playbook_ui.gemspec`
|
59
|
+
puts "\nPushing to RubyGems..."
|
60
|
+
`gem push playbook_ui-#{version}.gem`
|
61
|
+
puts "\nPushed to RubyGems. Now lets clean up..."
|
62
|
+
`rm -rf playbook_ui-*.gem`
|
63
|
+
|
64
|
+
# NPM
|
65
|
+
puts "\nGenerating distribution files"
|
66
|
+
`docker-compose run web yarn release`
|
67
|
+
puts "\nOrganizing distribution files"
|
68
|
+
`rm dist/playbook-rails.css && mv dist/playbook-react.css dist/playbook.css`
|
69
|
+
puts "\nCreating NPM package..."
|
70
|
+
`npm pack`
|
71
|
+
puts "\nPublishing to NPM..."
|
72
|
+
`npm publish playbook-ui-#{version}.tgz`
|
73
|
+
puts "\nPublished to NPM. Now lets clean up..."
|
74
|
+
`rm -rf playbook-ui-*.tgz`
|
75
|
+
|
76
|
+
# Tags
|
77
|
+
puts "\nPushed to NPM. Now lets create a tag..."
|
78
|
+
puts "\nWrite a brief tag release description. You can edit this later on GitHub."
|
79
|
+
description = STDIN.gets.chomp
|
80
|
+
puts "\nCreating Tag..."
|
81
|
+
`git tag -a #{version} -m "#{description}"`
|
82
|
+
puts "\nPushing Tag to GitHub..."
|
83
|
+
`git push origin #{version}`
|
84
|
+
|
85
|
+
puts "\n\n"
|
86
|
+
puts "Complete! Don't forget to add your release notes https://github.com/powerhome/playbook/releases/tag/#{version}"
|
87
|
+
end
|
88
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "webpacker"
|
4
|
+
|
5
|
+
namespace :playbook do
|
6
|
+
namespace :webpacker do
|
7
|
+
desc "Install deps with yarn"
|
8
|
+
task :yarn_install do
|
9
|
+
Dir.chdir(File.join(__dir__, "../..")) do
|
10
|
+
system "yarn install --no-progress --production"
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
desc "Compile JavaScript packs using webpack for production with digests"
|
15
|
+
task compile: %i[yarn_install environment] do
|
16
|
+
::Webpacker.with_node_env("production") do
|
17
|
+
if Playbook.webpacker.commands.compile
|
18
|
+
# Successful compilation!
|
19
|
+
else
|
20
|
+
# Failed compilation
|
21
|
+
exit!
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: playbook_ui
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 7.1.0.pre.
|
4
|
+
version: 7.1.0.pre.alpha2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Power UX
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2020-10-
|
12
|
+
date: 2020-10-14 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: actionpack
|
@@ -530,6 +530,8 @@ files:
|
|
530
530
|
- app/pb_kits/playbook/pb_caption/_caption.scss
|
531
531
|
- app/pb_kits/playbook/pb_caption/_caption_mixin.scss
|
532
532
|
- app/pb_kits/playbook/pb_caption/caption.rb
|
533
|
+
- app/pb_kits/playbook/pb_caption/docs/_caption_block.html.erb
|
534
|
+
- app/pb_kits/playbook/pb_caption/docs/_caption_block.jsx
|
533
535
|
- app/pb_kits/playbook/pb_caption/docs/_caption_light.html.erb
|
534
536
|
- app/pb_kits/playbook/pb_caption/docs/_caption_light.jsx
|
535
537
|
- app/pb_kits/playbook/pb_caption/docs/_caption_variants.html.erb
|
@@ -1836,10 +1838,24 @@ files:
|
|
1836
1838
|
- app/pb_kits/playbook/vendor.js
|
1837
1839
|
- fonts/fontawesome-min.js
|
1838
1840
|
- fonts/regular-min.js
|
1841
|
+
- lib/generators/kit/USAGE
|
1842
|
+
- lib/generators/kit/kit_generator.rb
|
1843
|
+
- lib/generators/kit/templates/kit_example_rails.erb.tt
|
1844
|
+
- lib/generators/kit/templates/kit_example_react.erb.tt
|
1845
|
+
- lib/generators/kit/templates/kit_example_yml.erb.tt
|
1846
|
+
- lib/generators/kit/templates/kit_html.erb.tt
|
1847
|
+
- lib/generators/kit/templates/kit_js.erb.tt
|
1848
|
+
- lib/generators/kit/templates/kit_jsx.erb.tt
|
1849
|
+
- lib/generators/kit/templates/kit_ruby.erb.tt
|
1850
|
+
- lib/generators/kit/templates/kit_ruby_spec.erb.tt
|
1851
|
+
- lib/generators/kit/templates/kit_scss.erb
|
1839
1852
|
- lib/playbook.rb
|
1840
1853
|
- lib/playbook/engine.rb
|
1841
1854
|
- lib/playbook/version.rb
|
1842
1855
|
- lib/playbook_ui.rb
|
1856
|
+
- lib/tasks/changelog.rake
|
1857
|
+
- lib/tasks/pb_release.rake
|
1858
|
+
- lib/tasks/playbook_tasks.rake
|
1843
1859
|
homepage: http://playbook.powerapp.cloud
|
1844
1860
|
licenses:
|
1845
1861
|
- MIT
|