playbook_ui 7.1.0.pre.alpha1 → 7.1.0.pre.alpha2

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 (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