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.
Files changed (34) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/pb_bar_graph/bar_graph.rb +1 -0
  3. data/app/pb_kits/playbook/pb_body/body.rb +1 -1
  4. data/app/pb_kits/playbook/pb_caption/_caption.html.erb +7 -5
  5. data/app/pb_kits/playbook/pb_caption/docs/_caption_block.html.erb +11 -0
  6. data/app/pb_kits/playbook/pb_caption/docs/_caption_block.jsx +28 -0
  7. data/app/pb_kits/playbook/pb_caption/docs/example.yml +2 -0
  8. data/app/pb_kits/playbook/pb_caption/docs/index.js +1 -0
  9. data/app/pb_kits/playbook/pb_line_graph/line_graph.rb +1 -0
  10. data/app/pb_kits/playbook/pb_time/_time.html.erb +17 -20
  11. data/app/pb_kits/playbook/pb_time/_time.jsx +40 -27
  12. data/app/pb_kits/playbook/pb_time/_time.scss +4 -24
  13. data/app/pb_kits/playbook/pb_time/docs/_time_align.jsx +4 -1
  14. data/app/pb_kits/playbook/pb_time/docs/_time_default.html.erb +11 -11
  15. data/app/pb_kits/playbook/pb_time/docs/_time_default.jsx +13 -1
  16. data/app/pb_kits/playbook/pb_time/docs/_time_sizes.jsx +4 -1
  17. data/app/pb_kits/playbook/pb_time/docs/_time_timestamp.jsx +3 -1
  18. data/app/pb_kits/playbook/pb_time/docs/_time_timezone.jsx +7 -2
  19. data/lib/generators/kit/USAGE +5 -0
  20. data/lib/generators/kit/kit_generator.rb +95 -0
  21. data/lib/generators/kit/templates/kit_example_rails.erb.tt +1 -0
  22. data/lib/generators/kit/templates/kit_example_react.erb.tt +10 -0
  23. data/lib/generators/kit/templates/kit_example_yml.erb.tt +9 -0
  24. data/lib/generators/kit/templates/kit_html.erb.tt +7 -0
  25. data/lib/generators/kit/templates/kit_js.erb.tt +1 -0
  26. data/lib/generators/kit/templates/kit_jsx.erb.tt +68 -0
  27. data/lib/generators/kit/templates/kit_ruby.erb.tt +11 -0
  28. data/lib/generators/kit/templates/kit_ruby_spec.erb.tt +11 -0
  29. data/lib/generators/kit/templates/kit_scss.erb +3 -0
  30. data/lib/playbook/version.rb +1 -1
  31. data/lib/tasks/changelog.rake +14 -0
  32. data/lib/tasks/pb_release.rake +88 -0
  33. data/lib/tasks/playbook_tasks.rake +26 -0
  34. metadata +18 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a644ad03dc97f41965fc81a6eb5bbff2aa79a546b50bc6fb6bac8f08eef363d1
4
- data.tar.gz: 0fe1ca166f29f9f46a805d29744dfe5d385ba04d6eadc77773416b2d374ae99d
3
+ metadata.gz: 9d793fb38923075c62383c618585aebba3516a5573d81ed4a7b7da05bc6ec0e1
4
+ data.tar.gz: 4918ac3b820aedf79c9873f6efcceebf0c555879aefb97ce649c1329af089b43
5
5
  SHA512:
6
- metadata.gz: f03035f54a4e33a6d87e3a011a56890ba0a1fc8f1e90f737e0735bdc3d301603b4de296dd43371870a07f0ad27628d3a3f82f9de7ae6ee9dc2689203a1ef6896
7
- data.tar.gz: 80322b2825772cce53dfb4065d2dac261f9072aaec897d048d98b28ca2567de356c834b8fed975c66282168e0d3037ebd36665b7e4870f0314e95e19434e6833
6
+ metadata.gz: efc9b1216f6970e79c45d992a67c481af899364ab851acf3953d6cf9b5152d69648f562c1086dc8c0fb4b2b20f1249a7a3b5d543d9d495b70d977c49b85caa8a
7
+ data.tar.gz: 9c0d61bc682f99cb0d49265a33aa79d736905d3e62798456e99d2f540f03875d39d788746be370fd8fec7d6a917cec615ccca1b1de17d9e30f5ba58845097efa
@@ -32,6 +32,7 @@ module Playbook
32
32
  def chart_options
33
33
  {
34
34
  id: id,
35
+ className: classname,
35
36
  chartData: chart_data,
36
37
  type: chart_type,
37
38
  title: title,
@@ -5,7 +5,7 @@ module Playbook
5
5
  class Body
6
6
  include Playbook::Props
7
7
  include ActionView::Helpers
8
-
8
+
9
9
  partial "pb_body/body"
10
10
 
11
11
  prop :color, type: Playbook::Props::Enum,
@@ -1,5 +1,7 @@
1
- <%= content_tag(object.tag, object.text,
2
- id: object.id,
3
- data: object.data,
4
- class: object.classname,
5
- aria: object.aria) %>
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,11 @@
1
+ <%= pb_rails("caption") do %>
2
+ Block
3
+ <% end %>
4
+
5
+ <%= pb_rails("caption", props: { size: 'lg' }) do %>
6
+ Large Block
7
+ <% end %>
8
+
9
+ <%= pb_rails("caption", props: { size: 'xs' }) do %>
10
+ Subcaption Block
11
+ <% 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
@@ -1,5 +1,7 @@
1
1
  examples:
2
2
  rails:
3
3
  - caption_light: Default
4
+ - caption_block: Block
4
5
  react:
5
6
  - caption_light: Default
7
+ - caption_block: Block
@@ -1,2 +1,3 @@
1
1
  export { default as CaptionLight } from './_caption_light.jsx'
2
2
  export { default as CaptionVariants } from './_caption_variants.jsx'
3
+ export { default as CaptionBlock } from './_caption_block.jsx'
@@ -32,6 +32,7 @@ module Playbook
32
32
  def chart_options
33
33
  {
34
34
  id: id,
35
+ className: classname,
35
36
  chartData: chart_data,
36
37
  type: chart_type,
37
38
  title: title,
@@ -2,39 +2,36 @@
2
2
  id: object.id,
3
3
  data: object.data,
4
4
  class: object.classname) do %>
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
- %>
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, size: "lg" }) %>
14
+ <%= pb_rails("icon", props: { icon: "clock", fixed_width: true }) %>
15
15
  <% end %>
16
16
  <% end %>
17
- <%= pb_rails("caption", props: { tag: "span", text: object.format_time_string, size: "lg" }) %>
17
+ <%= pb_rails("body", props: { tag: "span", text: object.format_time_string, classname: "pb_time" }) %>
18
18
  <% if object.show_timezone %>
19
- <%= content_tag(:span, class: "pb_time_timezone") do %>
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
- <%= pb_rails("body", props: { color: "light", tag: "span", text: object.format_time_string }) do %>
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
- <%= content_tag(:span) do %>
32
- <%= object.format_time_string %>
33
- <% if object.show_timezone %>
34
- <%= content_tag(:span, class: "pb_time_timezone") do %>
35
- <%= object.pb_date_time.to_timezone.upcase %>
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
- <span className="pb_body_kit">
37
- <If condition={showIcon}>
38
- <Body
39
- color="light"
40
- tag="span"
41
- >
42
- <Icon
43
- fixedWidth
44
- icon="clock"
45
- size={size === 'md' ? 'lg' : 'sm'}
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
- </Body>
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.toTimeWithMeridian()}
64
+ text={dateTimestamp.toTimezone()}
57
65
  />
58
- <Else />
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
- size="lg"
76
+ color="light"
61
77
  tag="span"
62
- text={dateTimestamp.toTimeWithMeridian()}
78
+ text={dateTimestamp.toTimezone()}
63
79
  />
64
80
  </If>
65
- <If condition={timeZone !== undefined}>
66
- <span className="pb_time_timezone">{dateTimestamp.toTimezone()}</span>
67
- </If>
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*=_md] {
32
- [class^=pb_caption_kit] {
33
- color: $text_lt_default;
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/Chicago"
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
- timezone: "America/Chicago"
25
+ time: "2012-08-02T15:49:29Z",
26
+ timezone: "America/New_York"
27
27
  }) %>
28
28
 
29
- <br>
30
- <br>
29
+ <br>
30
+ <br>
31
31
 
32
- <%= pb_rails("time", props: {
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 TimeTimeZone = () => {
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 TimeTimeZone
62
+ export default TimeTimezone
@@ -0,0 +1,5 @@
1
+ Description:
2
+ Create a new Playbook kit
3
+
4
+ Example:
5
+ rails g kit "button"
@@ -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,10 @@
1
+ import React from 'react'
2
+ import { <%= @kit_name_pascal %> } from '../../'
3
+
4
+ const <%= @kit_name_pascal %>Default = () => (
5
+ <div>
6
+ <<%= @kit_name_pascal %> />
7
+ </div>
8
+ )
9
+
10
+ export default <%= @kit_name_pascal %>Default
@@ -0,0 +1,9 @@
1
+ examples:
2
+ <% if @rails_kit %>
3
+ rails:
4
+ - <%= @kit_name_underscore %>_default: Default
5
+ <% end %>
6
+ <% if @react_kit %>
7
+ react:
8
+ - <%= @kit_name_underscore %>_default: Default
9
+ <% end %>
@@ -0,0 +1,7 @@
1
+ <%%= content_tag(:div,
2
+ aria: object.aria,
3
+ class: object.classname,
4
+ data: object.data,
5
+ id: object.id) do %>
6
+ <span><%= @kit_name_uppercase %> CONTENT</span>
7
+ <%% end %>
@@ -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
+ module Playbook
4
+ module Pb<%= @kit_name_pascal %>
5
+ class <%= @kit_name_pascal %>
6
+ include Playbook::Props
7
+
8
+ partial "<%= "pb_#{@kit_name_underscore}/#{@kit_name_underscore}" %>"
9
+ end
10
+ end
11
+ end
@@ -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
@@ -0,0 +1,3 @@
1
+ <%= ".pb_#{@kit_name_underscore}" %> {
2
+
3
+ }
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module Playbook
3
- VERSION = "7.1.0.pre.alpha1"
3
+ VERSION = "7.1.0.pre.alpha2"
4
4
  end
@@ -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.alpha1
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-09 00:00:00.000000000 Z
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