playbook_ui_docs 14.9.0.pre.alpha.PLAY16264818 → 14.9.0.pre.alpha.PLAY16264952

Sign up to get free protection for your applications and to get access to all the features.
Files changed (23) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_custom.jsx +53 -49
  3. data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_custom_rails.html.erb +29 -36
  4. data/app/pb_kits/playbook/pb_bread_crumbs/docs/_bread_crumbs_default.jsx +6 -0
  5. data/app/pb_kits/playbook/pb_checkbox/docs/_checkbox_form.jsx +138 -0
  6. data/app/pb_kits/playbook/pb_checkbox/docs/example.yml +7 -6
  7. data/app/pb_kits/playbook/pb_checkbox/docs/index.js +1 -0
  8. data/app/pb_kits/playbook/pb_select/docs/_select_form.jsx +1 -0
  9. data/app/pb_kits/playbook/pb_table/docs/_table_sticky_left_columns.html.erb +95 -0
  10. data/app/pb_kits/playbook/pb_table/docs/_table_with_collapsible.jsx +75 -0
  11. data/app/pb_kits/playbook/pb_table/docs/_table_with_collapsible.md +1 -0
  12. data/app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_with_custom_click.jsx +108 -0
  13. data/app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_with_custom_click.md +2 -0
  14. data/app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_with_custom_content.jsx +94 -0
  15. data/app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_with_custom_content.md +0 -0
  16. data/app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_with_nested_rows.jsx +83 -0
  17. data/app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_with_nested_rows.md +3 -0
  18. data/app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_with_nested_table.jsx +120 -0
  19. data/app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_with_nested_table.md +1 -0
  20. data/app/pb_kits/playbook/pb_table/docs/example.yml +5 -0
  21. data/app/pb_kits/playbook/pb_table/docs/index.js +5 -0
  22. data/dist/playbook-doc.js +1 -1
  23. metadata +14 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5db0c76bd6ac888d211e3b5213e5f6926669edaf064d364c236c52e8286e4326
4
- data.tar.gz: 7b63bdcb87aaaf41211b0bd254350da776161d453504ac3e82e55ee79243b0bb
3
+ metadata.gz: b467fbcae42be9e319abfbe8598c7faac4e81b90c8b0e9e917f2e10cc80e88a3
4
+ data.tar.gz: 509c4072db236dfab4715bcab6a0b781b01bd72521366a0f57389fa847d9df32
5
5
  SHA512:
6
- metadata.gz: 6042b450ad6db13c1206d7e42babf09c7989db65b91048e1e12c9b9eb1a5c0e3b33044107ac903a69b61490695cc3891a1bfaff578773f5a034b980ff06b5f50
7
- data.tar.gz: b4c8cd83fc92a4f9b016be33e6606396202f4ed3941ee16ee60726b63d1599d96c1cddcc766a47b746d47d302858a246144760376ce2291067b25861418a3ecc
6
+ metadata.gz: b0b6b3151f01ea063e24f2bad4c8358fcdb9e9f7b2339bed8dc8767c15bfdccbe37c8fd5607e2dc64aa7fadfa8d5438e598efb0b582e2b84525521a13c04edc8
7
+ data.tar.gz: a1798e5a109c940e7133ac624b9a22bf3a93267d4fead3b7647ab9849c3b97327d510c4f1664b1b31683e288ada514679bb506c1dfff047854d0bb8ee360094a
@@ -1,66 +1,70 @@
1
1
  import React from 'react'
2
-
2
+ import ReactDOMServer from 'react-dom/server'
3
3
  import BarGraph from '../_bar_graph'
4
+ import Icon from '../../pb_icon/_icon'
5
+
6
+ const chartData = [
7
+ {
8
+ name: 'Role',
9
+ data: [0, 200, 300, 654, 656],
10
+ },
11
+ {
12
+ name: 'Company',
13
+ data: [150, 524, 320, 440, 500],
14
+ },
15
+ ]
4
16
 
5
- const chartData = [{
6
- name: 'Installation',
7
- data: [1475, 200, 3000, 654, 656],
8
- }, {
9
- name: 'Manufacturing',
10
- data: [4434, 524, 2320, 440, 500],
11
- }, {
12
- name: 'Sales & Distribution',
13
- data: [3387, 743, 1344, 434, 440],
14
- }, {
15
- name: 'Project Development',
16
- data: [3227, 878, 999, 780, 1000],
17
- }, {
18
- name: 'Other',
19
- data: [1111, 677, 3245, 500, 200],
20
- }]
17
+ const renderIcon = (iconName, color) => {
18
+ return ReactDOMServer.renderToStaticMarkup(
19
+ <Icon
20
+ color={color}
21
+ icon={iconName}
22
+ />)
23
+ };
21
24
 
22
25
  const barGraphOptions = {
23
- subtitle: {
24
- text: "Overwritten subtitle",
25
- style: {
26
- color: "red"
27
- }
26
+ yAxis: {
27
+ tickInterval: 5,
28
28
  },
29
29
  xAxis: {
30
- labels: {
31
- useHTML: true,
32
- formatter: function() {
33
- switch (this.value) {
34
- case 'Jan':
35
- return `<i class="far fa-apple-whole"></i> ${this.value}`
36
- case 'Feb':
37
- return `<i class="far fa-strawberry"></i> ${this.value}`
38
- case 'Mar':
39
- return `<i class="far fa-lemon"></i> ${this.value}`
40
- case 'Apr':
41
- return `<i class="far fa-pear"></i> ${this.value}`
42
- case 'May':
43
- return `<i class="far fa-peach"></i> ${this.value}`
44
- default:
45
- return ''
46
- }
47
- }
48
- }
49
- }
30
+ categories: ['1', '2', '3', '4', '5'],
31
+ labels: {
32
+ useHTML: true,
33
+ formatter: function () {
34
+ switch (this.value) {
35
+ case '1':
36
+ return `${renderIcon('frown', 'error')}`;
37
+ case '2':
38
+ return `${renderIcon('frown', 'warning')}`;
39
+ case '3':
40
+ return `${renderIcon('frown-open', 'neutral')}`;
41
+ case '4':
42
+ return `${renderIcon('smile', 'category_7')}`;
43
+ case '5':
44
+ return `${renderIcon('smile-beam', 'success')}`;
45
+ default:
46
+ return ''
47
+ }
48
+ },
49
+ style: {
50
+ fontSize: '1.4em',
51
+ },
52
+ y: 42,
53
+ },
54
+ },
55
+ legend: {
56
+ itemMarginTop: 62,
57
+ },
50
58
  }
51
59
 
52
- const BarGraphCustom = (props) => (
60
+ const BarGraphCustom = () => (
53
61
  <div>
54
62
  <BarGraph
55
- axisTitle="Number of Employees"
56
63
  chartData={chartData}
57
64
  customOptions={barGraphOptions}
58
- id="bar-custom"
59
- subTitle="Subtitle to replace"
65
+ id="happiness-dashboard"
66
+ legend
60
67
  title="Bar Graph with Custom Overrides"
61
- xAxisCategories={['Jan', 'Feb', 'Mar', 'Apr', 'May']}
62
- yAxisMin={0}
63
- {...props}
64
68
  />
65
69
  </div>
66
70
  )
@@ -1,49 +1,42 @@
1
1
  <% data = [{
2
- name: 'Installation',
3
- data: [1475,200,3000,654,656]
2
+ name: 'Role',
3
+ data: [0, 200, 300, 654, 656],
4
4
  }, {
5
- name: 'Manufacturing',
6
- data: [4434,524,2320,440,500]
7
- }, {
8
- name: 'Sales & Distribution',
9
- data: [3387,743,1344,434,440,]
10
- }, {
11
- name: 'Project Development',
12
- data: [3227,878,999,780,1000]
13
- }, {
14
- name: 'Other',
15
- data: [1111,677,3245,500,200]
5
+ name: 'Company',
6
+ data: [150, 524, 320, 440, 500],
16
7
  }] %>
17
8
 
18
9
  <% bar_graph_options = {
19
- customOptions: {
20
- subtitle: {
21
- text: "Overwritten subtitle",
22
- style: {
23
- color: "red"
24
- }
10
+ customOptions: {
11
+ yAxis: {
12
+ tickInterval: 5,
13
+ },
14
+ xAxis: {
15
+ categories: [
16
+ raw(pb_rails("icon", props: { icon: "frown", color: "error", size: "2x" })),
17
+ raw(pb_rails("icon", props: { icon: "frown", color: "warning", size: "2x" })),
18
+ raw(pb_rails("icon", props: { icon: "frown-open", color: "neutral", size: "2x" })),
19
+ raw(pb_rails("icon", props: { icon: "smile", color: "category_7", size: "2x" })),
20
+ raw(pb_rails("icon", props: { icon: "smile-beam", color: "success", size: "2x" }))
21
+ ],
22
+ labels: {
23
+ useHTML: true,
24
+ sytle: {
25
+ fontSize: '1.4em',
25
26
  },
26
- xAxis: {
27
- categories: [
28
- '<i class="far fa-apple-whole"></i> Jan',
29
- '<i class="far fa-strawberry"></i> Feb',
30
- '<i class="far fa-lemon"></i> Mar',
31
- '<i class="far fa-pear"></i> Apr',
32
- '<i class="far fa-peach"></i> May'
33
- ],
34
- labels: {
35
- useHTML: true,
36
- }
37
- }
38
- }
27
+ y: 42,
28
+ },
29
+ },
30
+ legend: {
31
+ itemMarginTop: 62,
32
+ },
33
+ }
39
34
  } %>
40
35
 
41
36
  <%= pb_rails("bar_graph", props: {
42
- axis_title: 'Number of Employees',
43
37
  chart_data: data,
44
38
  id: "bar-default",
45
- y_axis_min: 0,
46
- subtitle: 'Subtitle to replace',
39
+ legend: true,
47
40
  title: 'Bar Graph with Custom Overrides',
48
41
  custom_options: bar_graph_options
49
- }) %>
42
+ }) %>
@@ -13,6 +13,7 @@ const BreadCrumbsDefault = (props) => {
13
13
  <Icon
14
14
  icon="home"
15
15
  size="1x"
16
+ {...props}
16
17
  />
17
18
  <BreadCrumbItem
18
19
  {...props}
@@ -22,11 +23,13 @@ const BreadCrumbsDefault = (props) => {
22
23
  size="4"
23
24
  tag="span"
24
25
  text="Home"
26
+ {...props}
25
27
  />
26
28
  </BreadCrumbItem>
27
29
  <Icon
28
30
  icon="users"
29
31
  size="1x"
32
+ {...props}
30
33
  />
31
34
  <Link
32
35
  {...props}
@@ -36,17 +39,20 @@ const BreadCrumbsDefault = (props) => {
36
39
  size="4"
37
40
  tag="span"
38
41
  text="Users"
42
+ {...props}
39
43
  />
40
44
  </Link>
41
45
  <Icon
42
46
  icon="user"
43
47
  size="1x"
48
+ {...props}
44
49
  />
45
50
  <Link {...props}>
46
51
  <Title
47
52
  size="4"
48
53
  tag="span"
49
54
  text="User"
55
+ {...props}
50
56
  />
51
57
  </Link>
52
58
  </BreadCrumbs>
@@ -0,0 +1,138 @@
1
+ import React from "react"
2
+ import { useForm } from "react-hook-form"
3
+ import { Checkbox, Card, Body, Button } from "playbook-ui"
4
+
5
+ const CheckboxForm = () => {
6
+ const {
7
+ register,
8
+ handleSubmit,
9
+ formState: { errors },
10
+ watch,
11
+ } = useForm({
12
+ defaultValues: {
13
+ termsAccepted: false,
14
+ newsletter: false,
15
+ interests: [],
16
+ preferences: {
17
+ emailUpdates: false,
18
+ smsUpdates: false,
19
+ pushNotifications: false,
20
+ },
21
+ },
22
+ })
23
+
24
+ const onSubmit = (data) => {
25
+ console.log("Form submitted:", data)
26
+ }
27
+
28
+ const formValues = watch()
29
+
30
+ return (
31
+ <div>
32
+ <Card padding='md'>
33
+ <form onSubmit={handleSubmit(onSubmit)}>
34
+ <div>
35
+ <Body marginBottom='xs'
36
+ text='Terms and Conditions'
37
+ />
38
+ <Checkbox
39
+ error={errors.termsAccepted?.message}
40
+ name='termsAccepted'
41
+ register={register}
42
+ rules={{
43
+ required: "You must accept the terms and conditions",
44
+ }}
45
+ text='I accept the terms and conditions'
46
+ />
47
+ </div>
48
+ <div className='mt-4'>
49
+ <Body marginBottom='xs'
50
+ text='Newsletter Subscription'
51
+ />
52
+ <Checkbox
53
+ name='newsletter'
54
+ register={register}
55
+ text='Subscribe to our newsletter'
56
+ />
57
+ </div>
58
+ <div className='mt-4'>
59
+ <Body marginBottom='xs'
60
+ text='Your Interests'
61
+ />
62
+ <Checkbox
63
+ error={errors.interests?.message}
64
+ name='interests'
65
+ register={register}
66
+ rules={{
67
+ validate: (value) => {
68
+ const selectedInterests = Object.values(value).filter(Boolean)
69
+ return (
70
+ selectedInterests.length >= 1 ||
71
+ "Please select at least one interest"
72
+ )
73
+ },
74
+ }}
75
+ text='Technology'
76
+ value='technology'
77
+ />
78
+ <Checkbox
79
+ name='interests'
80
+ register={register}
81
+ text='Design'
82
+ value='design'
83
+ />
84
+ <Checkbox
85
+ name='interests'
86
+ register={register}
87
+ text='Business'
88
+ value='business'
89
+ />
90
+ <Checkbox
91
+ name='interests'
92
+ register={register}
93
+ text='Marketing'
94
+ value='marketing'
95
+ />
96
+ </div>
97
+ <div className='mt-4'>
98
+ <Body marginBottom='xs'
99
+ text='Communication Preferences'
100
+ />
101
+ <Checkbox
102
+ name='preferences.emailUpdates'
103
+ register={register}
104
+ text='Email Updates'
105
+ />
106
+ <Checkbox
107
+ name='preferences.smsUpdates'
108
+ register={register}
109
+ text='SMS Updates'
110
+ />
111
+ <Checkbox
112
+ name='preferences.pushNotifications'
113
+ register={register}
114
+ text='Push Notifications'
115
+ />
116
+ </div>
117
+ <Button
118
+ htmlType="submit"
119
+ marginTop='lg'
120
+ text='Submit'
121
+ type='submit'
122
+ variant='primary'
123
+ />
124
+ </form>
125
+ <Card marginTop='lg'>
126
+ <Body text='Current Form Values:'
127
+ variant='bold'
128
+ />
129
+ <pre style={{ marginTop: "8px", color: "white" }}>
130
+ {JSON.stringify(formValues, null, 2)}
131
+ </pre>
132
+ </Card>
133
+ </Card>
134
+ </div>
135
+ )
136
+ }
137
+
138
+ export default CheckboxForm
@@ -9,12 +9,13 @@ examples:
9
9
  - checkbox_disabled: Disabled Checkbox
10
10
 
11
11
  react:
12
- - checkbox_default: Default
13
- - checkbox_checked: Load as checked
14
- - checkbox_custom: Custom Checkbox
15
- - checkbox_error: Default w/ Error
16
- - checkbox_indeterminate: Indeterminate Checkbox
17
- - checkbox_disabled: Disabled Checkbox
12
+ - checkbox_default: Default
13
+ - checkbox_checked: Load as checked
14
+ - checkbox_custom: Custom Checkbox
15
+ - checkbox_error: Default w/ Error
16
+ - checkbox_indeterminate: Indeterminate Checkbox
17
+ - checkbox_disabled: Disabled Checkbox
18
+ - checkbox_form: Checkbox Form
18
19
 
19
20
  swift:
20
21
  - checkbox_default_swift: Default
@@ -4,3 +4,4 @@ export { default as CheckboxError } from './_checkbox_error.jsx'
4
4
  export { default as CheckboxChecked } from './_checkbox_checked.jsx'
5
5
  export { default as CheckboxIndeterminate } from './_checkbox_indeterminate.jsx'
6
6
  export { default as CheckboxDisabled } from './_checkbox_disabled.jsx'
7
+ export { default as CheckboxForm } from './_checkbox_form.jsx'
@@ -81,6 +81,7 @@ const SelectForm = (props) => {
81
81
  />
82
82
 
83
83
  <Button
84
+ htmlType="submit"
84
85
  marginTop="lg"
85
86
  text="Submit"
86
87
  type="submit"
@@ -0,0 +1,95 @@
1
+ <%= pb_rails("table", props: { size: "md", responsive: "scroll", sticky_left_column: ["1", "2", "3"] }) do %>
2
+ <thead>
3
+ <tr>
4
+ <th id="1">Column 1</th>
5
+ <th id="2">Column 2</th>
6
+ <th id="3">Column 3</th>
7
+ <th>Column 4</th>
8
+ <th>Column 5</th>
9
+ <th>Column 6</th>
10
+ <th>Column 7</th>
11
+ <th>Column 8</th>
12
+ <th>Column 9</th>
13
+ <th>Column 10</th>
14
+ <th>Column 11</th>
15
+ <th>Column 12</th>
16
+ <th>Column 13</th>
17
+ <th>Column 14</th>
18
+ <th>Column 15</th>
19
+ </tr>
20
+ </thead>
21
+ <tbody>
22
+ <tr>
23
+ <td id="1">Value 1</td>
24
+ <td id="2">Value 2</td>
25
+ <td id="3">Value 3</td>
26
+ <td>Value 4</td>
27
+ <td>Value 5</td>
28
+ <td>Column 6</td>
29
+ <td>Column 7</td>
30
+ <td>Column 8</td>
31
+ <td>Column 9</td>
32
+ <td>Column 10</td>
33
+ <td>Column 11</td>
34
+ <td>Column 12</td>
35
+ <td>Column 13</td>
36
+ <td>Column 14</td>
37
+ <td>Column 15</td>
38
+
39
+ </tr>
40
+ <tr>
41
+ <td id="1">Value 1</td>
42
+ <td id="2">Value 2</td>
43
+ <td id="3">Value 3</td>
44
+ <td>Value 4</td>
45
+ <td>Value 5</td>
46
+ <td>Column 6</td>
47
+ <td>Column 7</td>
48
+ <td>Column 8</td>
49
+ <td>Column 9</td>
50
+ <td>Column 10</td>
51
+ <td>Column 11</td>
52
+ <td>Column 12</td>
53
+ <td>Column 13</td>
54
+ <td>Column 14</td>
55
+ <td>Column 15</td>
56
+
57
+ </tr>
58
+ <tr>
59
+ <td id="1">Value 1</td>
60
+ <td id="2">Value 2</td>
61
+ <td id="3">Value 3</td>
62
+ <td>Value 4</td>
63
+ <td>Value 5</td>
64
+ <td>Column 6</td>
65
+ <td>Column 7</td>
66
+ <td>Column 8</td>
67
+ <td>Column 9</td>
68
+ <td>Column 10</td>
69
+ <td>Column 11</td>
70
+ <td>Column 12</td>
71
+ <td>Column 13</td>
72
+ <td>Column 14</td>
73
+ <td>Column 15</td>
74
+
75
+ </tr>
76
+ <tr>
77
+ <td id="1">Value 1</td>
78
+ <td id="2">Value 2</td>
79
+ <td id="3">Value 3</td>
80
+ <td>Value 4</td>
81
+ <td>Value 5</td>
82
+ <td>Column 6</td>
83
+ <td>Column 7</td>
84
+ <td>Column 8</td>
85
+ <td>Column 9</td>
86
+ <td>Column 10</td>
87
+ <td>Column 11</td>
88
+ <td>Column 12</td>
89
+ <td>Column 13</td>
90
+ <td>Column 14</td>
91
+ <td>Column 15</td>
92
+
93
+ </tr>
94
+ </tbody>
95
+ <% end %>
@@ -0,0 +1,75 @@
1
+ import React from 'react'
2
+ import { Table, Icon, Body, Card } from 'playbook-ui'
3
+
4
+ const TableWithCollapsible = (props) => {
5
+
6
+ const Content = () => {
7
+ return (
8
+ <Card
9
+ borderNone
10
+ borderRadius="none"
11
+ padding="md"
12
+ {...props}
13
+ >
14
+ <Body {...props}>Nested content inside a Table Row</Body>
15
+ </Card>
16
+ );
17
+ };
18
+
19
+ return (
20
+ <Table
21
+ size="sm"
22
+ {...props}
23
+ >
24
+ <Table.Head>
25
+ <Table.Row>
26
+ <Table.Header>{'Column 1'}</Table.Header>
27
+ <Table.Header>{'Column 2'}</Table.Header>
28
+ <Table.Header>{'Column 3'}</Table.Header>
29
+ <Table.Header>{'Column 4'}</Table.Header>
30
+ <Table.Header>{'Column 5'}</Table.Header>
31
+ <Table.Header>{''}</Table.Header>
32
+ </Table.Row>
33
+
34
+ </Table.Head>
35
+ <Table.Body>
36
+ <Table.Row collapsible
37
+ collapsibleContent={<Content/>}
38
+ {...props}
39
+ >
40
+ <Table.Cell>{'Value 1'}</Table.Cell>
41
+ <Table.Cell>{'Value 2'}</Table.Cell>
42
+ <Table.Cell>{'Value 3'}</Table.Cell>
43
+ <Table.Cell>{'Value 4'}</Table.Cell>
44
+ <Table.Cell>{'Value 5'}</Table.Cell>
45
+ <Table.Cell textAlign="right">{
46
+ <Icon
47
+ color="primary"
48
+ fixedWidth
49
+ icon="chevron-down"
50
+ />}
51
+ </Table.Cell>
52
+
53
+ </Table.Row>
54
+ <Table.Row>
55
+ <Table.Cell>{'Value 1'}</Table.Cell>
56
+ <Table.Cell>{'Value 2'}</Table.Cell>
57
+ <Table.Cell>{'Value 3'}</Table.Cell>
58
+ <Table.Cell>{'Value 4'}</Table.Cell>
59
+ <Table.Cell>{'Value 5'}</Table.Cell>
60
+ <Table.Cell>{''}</Table.Cell>
61
+ </Table.Row>
62
+ <Table.Row>
63
+ <Table.Cell>{'Value 1'}</Table.Cell>
64
+ <Table.Cell>{'Value 2'}</Table.Cell>
65
+ <Table.Cell>{'Value 3'}</Table.Cell>
66
+ <Table.Cell>{'Value 4'}</Table.Cell>
67
+ <Table.Cell>{'Value 5'}</Table.Cell>
68
+ <Table.Cell>{''}</Table.Cell>
69
+ </Table.Row>
70
+ </Table.Body>
71
+ </Table>
72
+ )
73
+ }
74
+
75
+ export default TableWithCollapsible
@@ -0,0 +1 @@
1
+ The `collapsible` prop can be used on any Table Row to add a collapsible area. Use the additional `collapsibleContent` prop to add any content to the collapsible Row.