playbook_ui 2.9.9 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (155) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/_playbook.scss +10 -4
  3. data/app/pb_kits/playbook/index.js +10 -0
  4. data/app/pb_kits/playbook/kits/pb_circle_icon_button.js +4 -0
  5. data/app/pb_kits/playbook/kits/pb_select.js +4 -0
  6. data/app/pb_kits/playbook/kits/pb_selectable_card.js +4 -0
  7. data/app/pb_kits/playbook/kits/pb_textarea.js +4 -0
  8. data/app/pb_kits/playbook/packs/examples.js +8 -0
  9. data/app/pb_kits/playbook/packs/kits.js +4 -2
  10. data/app/pb_kits/playbook/pb_avatar/_avatar.jsx +1 -1
  11. data/app/pb_kits/playbook/pb_body/_body_mixins.scss +3 -0
  12. data/app/pb_kits/playbook/pb_button/_button.jsx +4 -0
  13. data/app/pb_kits/playbook/pb_card/_card.scss +50 -17
  14. data/app/pb_kits/playbook/pb_circle_icon_button/_circle_icon_button.html.erb +10 -0
  15. data/app/pb_kits/playbook/pb_circle_icon_button/_circle_icon_button.jsx +30 -0
  16. data/app/pb_kits/playbook/pb_circle_icon_button/_circle_icon_button.scss +32 -0
  17. data/app/pb_kits/playbook/pb_circle_icon_button/circle_icon_button.rb +22 -0
  18. data/app/pb_kits/playbook/pb_circle_icon_button/docs/_circle_icon_button_dark.html.erb +29 -0
  19. data/app/pb_kits/playbook/pb_circle_icon_button/docs/_circle_icon_button_dark.jsx +38 -0
  20. data/app/pb_kits/playbook/pb_circle_icon_button/docs/_circle_icon_button_default.html.erb +25 -0
  21. data/app/pb_kits/playbook/pb_circle_icon_button/docs/_circle_icon_button_default.jsx +34 -0
  22. data/app/pb_kits/playbook/pb_circle_icon_button/docs/example.yml +9 -0
  23. data/app/pb_kits/playbook/pb_circle_icon_button/docs/index.js +2 -0
  24. data/app/pb_kits/playbook/pb_dashboard_value/_dashboard_value.html.erb +1 -1
  25. data/app/pb_kits/playbook/pb_dashboard_value/dashboard_value.rb +4 -0
  26. data/app/pb_kits/playbook/pb_date/_date.jsx +51 -17
  27. data/app/pb_kits/playbook/pb_date/docs/_date_default.jsx +10 -2
  28. data/app/pb_kits/playbook/pb_form/_form.scss +11 -0
  29. data/app/pb_kits/playbook/pb_form/_form_form_with.html.erb +3 -0
  30. data/app/pb_kits/playbook/pb_form/_form_simple_form.html.erb +3 -0
  31. data/app/pb_kits/playbook/pb_form/docs/_form_form_with.html.erb +14 -0
  32. data/app/pb_kits/playbook/pb_form/docs/_form_simple_form.html.erb +36 -0
  33. data/app/pb_kits/playbook/pb_form/docs/example.yml +5 -0
  34. data/app/pb_kits/playbook/pb_form/form.rb +28 -0
  35. data/app/pb_kits/playbook/pb_form/form/form_with_form.rb +38 -0
  36. data/app/pb_kits/playbook/pb_form/form/simple_form_form.rb +45 -0
  37. data/app/pb_kits/playbook/pb_form/form_builder.rb +23 -0
  38. data/app/pb_kits/playbook/pb_form/form_builder/action_area.rb +40 -0
  39. data/app/pb_kits/playbook/pb_form/form_builder/form_with_form_builder.rb +11 -0
  40. data/app/pb_kits/playbook/pb_form/form_builder/simple_form_builder.rb +25 -0
  41. data/app/pb_kits/playbook/pb_form/form_builder/text_input_builder.rb +22 -0
  42. data/app/pb_kits/playbook/pb_icon_circle/_icon_circle.jsx +19 -14
  43. data/app/pb_kits/playbook/pb_icon_circle/docs/_icon_circle_color.jsx +19 -0
  44. data/app/pb_kits/playbook/pb_icon_circle/docs/_icon_circle_default.jsx +5 -4
  45. data/app/pb_kits/playbook/pb_icon_circle/docs/_icon_circle_size.jsx +16 -0
  46. data/app/pb_kits/playbook/pb_icon_circle/docs/example.yml +2 -1
  47. data/app/pb_kits/playbook/pb_icon_circle/docs/index.js +2 -0
  48. data/app/pb_kits/playbook/pb_kit/dateTime.js +4 -0
  49. data/app/pb_kits/playbook/pb_layout/_layout.jsx +50 -48
  50. data/app/pb_kits/playbook/pb_layout/_layout.scss +8 -12
  51. data/app/pb_kits/playbook/pb_layout/_layout_mixin.scss +6 -0
  52. data/app/pb_kits/playbook/pb_layout/docs/_layout_colors.html.erb +24 -0
  53. data/app/pb_kits/playbook/pb_layout/docs/_layout_default.jsx +15 -0
  54. data/app/pb_kits/playbook/pb_layout/docs/_layout_sizes.html.erb +32 -0
  55. data/app/pb_kits/playbook/pb_layout/docs/_layout_sizes_dark.html.erb +32 -0
  56. data/app/pb_kits/playbook/pb_layout/docs/_layout_transparent.html.erb +8 -0
  57. data/app/pb_kits/playbook/pb_layout/docs/example.yml +5 -11
  58. data/app/pb_kits/playbook/pb_layout/docs/index.js +1 -1
  59. data/app/pb_kits/playbook/pb_layout/layout.rb +5 -7
  60. data/app/pb_kits/playbook/pb_message/_message.jsx +68 -11
  61. data/app/pb_kits/playbook/pb_message/docs/_message_default.jsx +59 -2
  62. data/app/pb_kits/playbook/pb_section_separator/_section_separator.jsx +23 -16
  63. data/app/pb_kits/playbook/pb_section_separator/_section_separator.scss +15 -6
  64. data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_line.jsx +10 -0
  65. data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_text.jsx +10 -0
  66. data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_text_background.html.erb +1 -0
  67. data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_text_background.jsx +12 -0
  68. data/app/pb_kits/playbook/pb_section_separator/docs/example.yml +4 -2
  69. data/app/pb_kits/playbook/pb_section_separator/docs/index.js +3 -1
  70. data/app/pb_kits/playbook/pb_section_separator/section_separator.rb +4 -1
  71. data/app/pb_kits/playbook/pb_select/_select.html.erb +33 -0
  72. data/app/pb_kits/playbook/pb_select/_select.jsx +110 -0
  73. data/app/pb_kits/playbook/pb_select/_select.scss +50 -0
  74. data/app/pb_kits/playbook/pb_select/docs/_select_blank.html.erb +19 -0
  75. data/app/pb_kits/playbook/pb_select/docs/_select_blank.jsx +30 -0
  76. data/app/pb_kits/playbook/pb_select/docs/_select_custom_select.html.erb +8 -0
  77. data/app/pb_kits/playbook/pb_select/docs/_select_custom_select.jsx +19 -0
  78. data/app/pb_kits/playbook/pb_select/docs/_select_dark.html.erb +24 -0
  79. data/app/pb_kits/playbook/pb_select/docs/_select_dark.jsx +31 -0
  80. data/app/pb_kits/playbook/pb_select/docs/_select_default.html.erb +23 -0
  81. data/app/pb_kits/playbook/pb_select/docs/_select_default.jsx +30 -0
  82. data/app/pb_kits/playbook/pb_select/docs/_select_disabled.html.erb +19 -0
  83. data/app/pb_kits/playbook/pb_select/docs/_select_disabled.jsx +30 -0
  84. data/app/pb_kits/playbook/pb_select/docs/_select_disabled_options.html.erb +33 -0
  85. data/app/pb_kits/playbook/pb_select/docs/_select_disabled_options.jsx +44 -0
  86. data/app/pb_kits/playbook/pb_select/docs/_select_required.html.erb +17 -0
  87. data/app/pb_kits/playbook/pb_select/docs/_select_required.jsx +28 -0
  88. data/app/pb_kits/playbook/pb_select/docs/_select_value_text_same.html.erb +18 -0
  89. data/app/pb_kits/playbook/pb_select/docs/_select_value_text_same.jsx +29 -0
  90. data/app/pb_kits/playbook/pb_select/docs/example.yml +22 -0
  91. data/app/pb_kits/playbook/pb_select/docs/index.js +8 -0
  92. data/app/pb_kits/playbook/pb_select/docs/nitro_theme.gemspec +41 -0
  93. data/app/pb_kits/playbook/pb_select/select.rb +60 -0
  94. data/app/pb_kits/playbook/pb_selectable_card/_selectable_card.html.erb +25 -0
  95. data/app/pb_kits/playbook/pb_selectable_card/_selectable_card.jsx +97 -0
  96. data/app/pb_kits/playbook/pb_selectable_card/_selectable_card.scss +87 -0
  97. data/app/pb_kits/playbook/pb_selectable_card/docs/_selectable_card_block.html.erb +25 -0
  98. data/app/pb_kits/playbook/pb_selectable_card/docs/_selectable_card_block.jsx +48 -0
  99. data/app/pb_kits/playbook/pb_selectable_card/docs/_selectable_card_dark.html.erb +45 -0
  100. data/app/pb_kits/playbook/pb_selectable_card/docs/_selectable_card_dark.jsx +68 -0
  101. data/app/pb_kits/playbook/pb_selectable_card/docs/_selectable_card_default.html.erb +39 -0
  102. data/app/pb_kits/playbook/pb_selectable_card/docs/_selectable_card_default.jsx +67 -0
  103. data/app/pb_kits/playbook/pb_selectable_card/docs/_selectable_card_single_select.html.erb +30 -0
  104. data/app/pb_kits/playbook/pb_selectable_card/docs/_selectable_card_single_select.jsx +54 -0
  105. data/app/pb_kits/playbook/pb_selectable_card/docs/example.yml +13 -0
  106. data/app/pb_kits/playbook/pb_selectable_card/docs/index.js +4 -0
  107. data/app/pb_kits/playbook/pb_selectable_card/selectable_card.rb +51 -0
  108. data/app/pb_kits/playbook/pb_stat_value/_stat_value.html.erb +1 -1
  109. data/app/pb_kits/playbook/pb_stat_value/stat_value.rb +5 -0
  110. data/app/pb_kits/playbook/pb_text_input/_text_input.html.erb +13 -9
  111. data/app/pb_kits/playbook/pb_text_input/_text_input.jsx +12 -6
  112. data/app/pb_kits/playbook/pb_text_input/_text_input.scss +44 -44
  113. data/app/pb_kits/playbook/pb_text_input/docs/_text_input_default.jsx +68 -12
  114. data/app/pb_kits/playbook/pb_textarea/_textarea.html.erb +20 -0
  115. data/app/pb_kits/playbook/pb_textarea/_textarea.jsx +54 -0
  116. data/app/pb_kits/playbook/pb_textarea/_textarea.scss +31 -0
  117. data/app/pb_kits/playbook/pb_textarea/_textarea_mixin.scss +51 -0
  118. data/app/pb_kits/playbook/pb_textarea/docs/_textarea_custom.html.erb +3 -0
  119. data/app/pb_kits/playbook/pb_textarea/docs/_textarea_custom.jsx +16 -0
  120. data/app/pb_kits/playbook/pb_textarea/docs/_textarea_dark.html.erb +9 -0
  121. data/app/pb_kits/playbook/pb_textarea/docs/_textarea_dark.jsx +21 -0
  122. data/app/pb_kits/playbook/pb_textarea/docs/_textarea_default.html.erb +9 -0
  123. data/app/pb_kits/playbook/pb_textarea/docs/_textarea_default.jsx +21 -0
  124. data/app/pb_kits/playbook/pb_textarea/docs/example.yml +15 -0
  125. data/app/pb_kits/playbook/pb_textarea/docs/index.js +3 -0
  126. data/app/pb_kits/playbook/pb_textarea/textarea.rb +30 -0
  127. data/app/pb_kits/playbook/pb_title/_title_mixin.scss +3 -1
  128. data/app/pb_kits/playbook/pb_user/_user.html.erb +3 -1
  129. data/app/pb_kits/playbook/pb_user/_user.jsx +76 -16
  130. data/app/pb_kits/playbook/pb_user/docs/_user_default.jsx +42 -1
  131. data/app/pb_kits/playbook/pb_user/docs/_user_size.jsx +31 -0
  132. data/app/pb_kits/playbook/pb_user/docs/_user_text_only.jsx +24 -0
  133. data/app/pb_kits/playbook/pb_user/docs/_user_vertical_size.jsx +37 -0
  134. data/app/pb_kits/playbook/pb_user/docs/_user_with_territory.html.erb +40 -0
  135. data/app/pb_kits/playbook/pb_user/docs/_user_with_territory.jsx +57 -0
  136. data/app/pb_kits/playbook/pb_user/docs/example.yml +8 -0
  137. data/app/pb_kits/playbook/pb_user/docs/index.js +5 -0
  138. data/app/pb_kits/playbook/pb_user/user.rb +12 -1
  139. data/app/pb_kits/playbook/props.rb +11 -3
  140. data/app/pb_kits/playbook/tokens/_colors.scss +16 -0
  141. data/app/pb_kits/playbook/tokens/_transition.scss +1 -0
  142. data/lib/playbook/version.rb +1 -1
  143. metadata +117 -15
  144. data/app/pb_kits/playbook/pb_layout/docs/_layout_lg.html.erb +0 -4
  145. data/app/pb_kits/playbook/pb_layout/docs/_layout_lg_dark.html.erb +0 -4
  146. data/app/pb_kits/playbook/pb_layout/docs/_layout_md.html.erb +0 -4
  147. data/app/pb_kits/playbook/pb_layout/docs/_layout_md_dark.html.erb +0 -4
  148. data/app/pb_kits/playbook/pb_layout/docs/_layout_sm.html.erb +0 -4
  149. data/app/pb_kits/playbook/pb_layout/docs/_layout_sm_dark.html.erb +0 -4
  150. data/app/pb_kits/playbook/pb_layout/docs/_layout_xl.html.erb +0 -4
  151. data/app/pb_kits/playbook/pb_layout/docs/_layout_xl_dark.html.erb +0 -4
  152. data/app/pb_kits/playbook/pb_layout/docs/_layout_xs.html.erb +0 -4
  153. data/app/pb_kits/playbook/pb_layout/docs/_layout_xs.jsx +0 -15
  154. data/app/pb_kits/playbook/pb_layout/docs/_layout_xs_dark.html.erb +0 -4
  155. data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_default.jsx +0 -10
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Playbook
4
+ module PbForm
5
+ module FormBuilder
6
+ extend ActiveSupport::Concern
7
+
8
+ included do
9
+ prepend(TextInputBuilder.new(:email_field))
10
+ prepend(TextInputBuilder.new(:number_field))
11
+ prepend(TextInputBuilder.new(:search_field))
12
+ prepend(TextInputBuilder.new(:telephone_field))
13
+ prepend(TextInputBuilder.new(:text_field))
14
+ prepend(TextInputBuilder.new(:password_field))
15
+ prepend(TextInputBuilder.new(:url_field))
16
+
17
+ def actions(&block)
18
+ ActionArea.new(self).wrapper(&block)
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Playbook
4
+ module PbForm
5
+ module FormBuilder
6
+ class ActionArea
7
+ def initialize(form_builder)
8
+ self.form_builder = form_builder
9
+ end
10
+
11
+ def submit(value = nil, props: {})
12
+ props[:type] ||= "submit"
13
+ button(value, props: props)
14
+ end
15
+
16
+ def button(value = nil, props:)
17
+ props[:text] ||= value || form_builder.send(:submit_default_value)
18
+
19
+ template.content_tag(:li) do
20
+ template.pb_rails("button", props: props)
21
+ end
22
+ end
23
+
24
+ def wrapper
25
+ template.content_tag(:ol, class: "pb-form-actions") do
26
+ yield self
27
+ end
28
+ end
29
+
30
+ private
31
+
32
+ attr_accessor :form_builder
33
+
34
+ def template
35
+ form_builder.instance_variable_get("@template")
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Playbook
4
+ module PbForm
5
+ module FormBuilder
6
+ class FormWithFormBuilder < ActionView::Helpers::FormBuilder
7
+ include FormBuilder
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ if defined?(SimpleForm)
4
+ module Playbook
5
+ module PbForm
6
+ module FormBuilder
7
+ class SimpleFormBuilder < SimpleForm::FormBuilder
8
+ include FormBuilder
9
+
10
+ def input(attribute_name, options = {}, &block)
11
+ super(
12
+ attribute_name,
13
+ options.merge(label: false, input_html: {
14
+ props: {
15
+ label: true,
16
+ },
17
+ }),
18
+ &block
19
+ )
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Playbook
4
+ module PbForm
5
+ module FormBuilder
6
+ class TextInputBuilder < Module
7
+ def initialize(method_name)
8
+ define_method method_name do |name, props: {}, **options, &block|
9
+ props[:label] = @template.label(@object_name, name) if props[:label] == true
10
+ options = Hash(options)
11
+ options[:skip_default_ids] = false unless options.has_key?(:skip_default_ids)
12
+ input = super(name, **options, &block)
13
+
14
+ @template.pb_rails("text_input", props: props) do
15
+ input
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -1,19 +1,24 @@
1
+ /* @flow */
2
+
1
3
  import React from 'react';
2
- import PropTypes from "prop-types";
4
+ import {Icon} from "../";
3
5
 
4
- const propTypes = {
5
- className: PropTypes.string,
6
- id: PropTypes.string
6
+ const IconCircleProps = {
7
+ className: String,
8
+ icon: String,
9
+ id: String,
10
+ size: String,
11
+ variant: String,
7
12
  };
8
13
 
9
- class IconCircle extends React.Component {
10
- render() {
11
- return (
12
- <h1>{`Coming Soon...`}</h1>
13
- )
14
- }
15
- }
16
-
17
- IconCircle.propTypes = propTypes;
14
+ const IconCircle = ({
15
+ icon,
16
+ size='md',
17
+ variant='default'
18
+ }: IconCircleProps) => (
19
+ <div className={`pb_icon_circle_kit_${size}_${variant}`}>
20
+ <Icon icon={icon} />
21
+ </div>
22
+ )
18
23
 
19
- export default IconCircle;
24
+ export default IconCircle
@@ -0,0 +1,19 @@
1
+ import React from 'react'
2
+ import classnames from 'classnames'
3
+ import {IconCircle} from '../../'
4
+
5
+ function IconCircleColor() {
6
+ return (
7
+ <div>
8
+ <IconCircle icon="rocket" size="sm" variant="royal" /><br />
9
+ <IconCircle icon="rocket" size="sm" variant="blue" /><br />
10
+ <IconCircle icon="rocket" size="sm" variant="purple" /><br />
11
+ <IconCircle icon="rocket" size="sm" variant="teal" /><br />
12
+ <IconCircle icon="rocket" size="sm" variant="red" /><br />
13
+ <IconCircle icon="rocket" size="sm" variant="yellow" /><br />
14
+ <IconCircle icon="rocket" size="sm" variant="green" />
15
+ </div>
16
+ )
17
+ }
18
+
19
+ export default IconCircleColor;
@@ -1,12 +1,13 @@
1
- import React from "react"
2
- import {IconCircle} from "../../"
1
+ import React from 'react'
2
+ import classnames from 'classnames'
3
+ import {IconCircle} from '../../'
3
4
 
4
5
  function IconCircleDefault() {
5
6
  return (
6
7
  <div>
7
- <IconCircle />
8
+ <IconCircle icon="rocket" size="md"/>
8
9
  </div>
9
10
  )
10
11
  }
11
12
 
12
- export default IconCircleDefault
13
+ export default IconCircleDefault;
@@ -0,0 +1,16 @@
1
+ import React from 'react'
2
+ import classnames from 'classnames'
3
+ import {IconCircle} from '../..'
4
+
5
+ function IconCircleSize() {
6
+ return (
7
+ <div>
8
+ <IconCircle icon="rocket" size="sm"/><br />
9
+ <IconCircle icon="rocket" size="md"/><br />
10
+ <IconCircle icon="rocket" size="lg"/><br />
11
+ <IconCircle icon="rocket" size="xl"/>
12
+ </div>
13
+ )
14
+ }
15
+
16
+ export default IconCircleSize;
@@ -5,6 +5,7 @@ examples:
5
5
  - icon_circle_sizes: Size
6
6
  - icon_circle_color: Color
7
7
 
8
-
9
8
  react:
10
9
  - icon_circle_default: Default
10
+ - icon_circle_size: Size
11
+ - icon_circle_color: Color
@@ -1 +1,3 @@
1
+ export {default as IconCircleColor} from './_icon_circle_color.jsx';
1
2
  export {default as IconCircleDefault} from './_icon_circle_default.jsx';
3
+ export {default as IconCircleSize} from './_icon_circle_size.jsx';
@@ -39,6 +39,10 @@ export default class DateTime {
39
39
  return this.value.strftime("%e")
40
40
  }
41
41
 
42
+ toWeekday() {
43
+ return this.value.strftime("%a")
44
+ }
45
+
42
46
  toIso() {
43
47
  return this.value.toISOString();
44
48
  }
@@ -1,54 +1,56 @@
1
- import React, { Component } from "react";
2
- import PropTypes from "prop-types";
1
+ /* @flow */
3
2
 
4
- const propTypes = {
5
- position: PropTypes.oneOf(["left", "right"]),
6
- transparent: PropTypes.bool,
7
- size: PropTypes.oneOf(["xs", "sm", "md", "base", "lg", "xl"]),
8
- collapse: PropTypes.oneOf(["xs", "sm", "md", "lg", "xl"]),
9
- full: PropTypes.bool,
10
- dark: PropTypes.bool,
11
- children: PropTypes.oneOfType([
12
- PropTypes.arrayOf(PropTypes.node),
13
- PropTypes.node
14
- ])
15
- };
3
+ import React from 'react'
4
+ import classnames from 'classnames'
16
5
 
17
- const defaultProps = {
18
- position: "left",
19
- transparent: false,
20
- size: "base",
21
- collapse: "md",
22
- full: false,
23
- dark: false
24
- };
6
+ import {
7
+ buildAriaProps,
8
+ buildDataProps,
9
+ buildCss,
10
+ } from '../utilities/props'
25
11
 
26
- class Layout extends Component {
27
- render() {
28
- const {
29
- position,
30
- transparent,
31
- size,
32
- collapse,
33
- full,
34
- dark,
35
- children
36
- } = this.props;
37
- const dark_class = dark === true ? "_dark" : ""
38
- const transparent_class = transparent === true ? "_transparent" : ""
39
- const full_class = full === true ? " full" : ""
40
- const size_class = "_"+size
41
- const position_class = "_"+position
42
- const collapse_class = " layout"+position_class+"_collapse_"+collapse
43
- return (
44
- <div className={`pb_layout${size_class}${position_class}${dark_class}${transparent_class}${full_class}${collapse_class}`}>
45
- {children}
46
- </div>
47
- );
48
- }
12
+ type LayoutProps = {
13
+ aria?: object,
14
+ children?: Array<React.ReactChild>,
15
+ collapse?: 'xs' | 'sm' | 'md' | 'lg' | 'xl',
16
+ dark?: Boolean,
17
+ data?: object,
18
+ full?: Boolean,
19
+ position?: 'left' | 'right',
20
+ size?: 'xs' | 'sm' | 'md' | 'base' | 'lg' | 'xl',
21
+ transparent?: Boolean
49
22
  }
50
23
 
51
- Layout.propTypes = propTypes;
52
- Layout.defaultProps = defaultProps;
24
+ const Layout = ({
25
+ aria = {},
26
+ children,
27
+ collapse = 'md',
28
+ dark = false,
29
+ data = {},
30
+ full = false,
31
+ gradient = false,
32
+ position = 'left',
33
+ transparent = false,
34
+ size = 'base'
35
+ }: LayoutProps) => {
36
+ const ariaProps = buildAriaProps(aria)
37
+ const dataProps = buildDataProps(data)
53
38
 
54
- export default Layout;
39
+ const collapse_class = 'layout'+position_class+'_collapse_'+collapse;
40
+ const css = buildCss({
41
+ 'pb_layout_kit': true,
42
+ [size]: true,
43
+ [position]: true,
44
+ 'dark': dark === true,
45
+ 'transparent': transparent === true,
46
+ 'full': full === true
47
+ })
48
+
49
+ return (
50
+ <div {...ariaProps} {...dataProps} className={classnames(css, collapse_class)}>
51
+ {children}
52
+ </div>
53
+ )
54
+ }
55
+
56
+ export default Layout
@@ -3,8 +3,7 @@
3
3
  @import "../tokens/screen_sizes";
4
4
  @import "./layout_mixin";
5
5
 
6
- .pb_layout {
7
-
6
+ [class^=pb_layout_kit] {
8
7
  $layout_sizes: (
9
8
  "xs": 64px,
10
9
  "sm": 200px,
@@ -19,16 +18,17 @@
19
18
  $colors: (
20
19
  "light",
21
20
  "dark",
21
+ "gradient",
22
22
  "transparent",
23
23
  );
24
24
 
25
25
  // Sections
26
- &_section {
26
+ &[class*=_section] {
27
27
  padding: $space_sm $space_xl;
28
- &_border {
28
+ &[class*=_border] {
29
29
  padding: $space_sm $space_xl;
30
30
  border-bottom: 1px solid $border_light;
31
- &_margin {
31
+ &[class*=_margin] {
32
32
  margin: $space_sm $space_xl;
33
33
  border-bottom: 1px solid $border_light;
34
34
  }
@@ -37,16 +37,12 @@
37
37
 
38
38
  // sidebar and Body
39
39
  @each $name, $size in $layout_sizes {
40
- &_#{$name} {
40
+ &[class*=_size_#{$name}] {
41
41
  @each $position in $positions {
42
- &_#{$position} {
42
+ &[class*=_#{$position}] {
43
43
  @each $color in $colors {
44
- @if $color == "light" {
44
+ &[class*=_#{$color}] {
45
45
  @include layout_settings($size, $position, $color, "#{&}");
46
- } @else {
47
- &_#{$color} {
48
- @include layout_settings($size, $position, $color, "#{&}");
49
- }
50
46
  }
51
47
  }
52
48
  }
@@ -36,6 +36,9 @@
36
36
  @if $color == 'dark' {
37
37
  background: $bg_dark;
38
38
  border-color: $border_dark;
39
+ } @else if $color == 'gradient' {
40
+ border-color: $border_dark;
41
+ @include gradient;
39
42
  } @else if $color == 'transparent' {
40
43
  border-color: transparent;
41
44
  } @else {
@@ -49,6 +52,9 @@
49
52
  @if $color == 'dark' {
50
53
  background: $bg_dark;
51
54
  border-color: $border_dark;
55
+ } @else if $color == 'gradient' {
56
+ border-color: $border_dark;
57
+ @include gradient;
52
58
  } @else if $color == 'transparent' {
53
59
  border-color: transparent;
54
60
  } @else {
@@ -0,0 +1,24 @@
1
+ <%= pb_rails("layout", props: {position: "left", size: "sm", collapse: "md"}) do %>
2
+ <%= pb_rails("layout/sidebar") do %>
3
+ <%= pb_rails("body", props: { text: "Light" }) %>
4
+ <% end %>
5
+ <%= pb_rails("layout/body") do %> Body <% end %>
6
+ <% end %>
7
+
8
+ <br/><br/>
9
+
10
+ <%= pb_rails("layout", props: {position: "left", size: "sm", collapse: "md", variant: "dark"}) do %>
11
+ <%= pb_rails("layout/sidebar") do %>
12
+ <%= pb_rails("body", props: { text: "Dark", dark: true }) %>
13
+ <% end %>
14
+ <%= pb_rails("layout/body") do %> Body <% end %>
15
+ <% end %>
16
+
17
+ <br/><br/>
18
+
19
+ <%= pb_rails("layout", props: {position: "left", size: "sm", collapse: "md", variant: "gradient"}) do %>
20
+ <%= pb_rails("layout/sidebar") do %>
21
+ <%= pb_rails("body", props: { text: "Gradient", dark: true }) %>
22
+ <% end %>
23
+ <%= pb_rails("layout/body") do %> Body <% end %>
24
+ <% end %>