playbook_ui 14.5.0.pre.alpha.javascriptassets3939 → 14.5.0.pre.alpha.play1586datearea4115

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 (71) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/pb_advanced_table/index.js +60 -0
  3. data/app/pb_kits/playbook/pb_advanced_table/table_header.html.erb +1 -9
  4. data/app/pb_kits/playbook/pb_advanced_table/table_subrow_header.html.erb +1 -9
  5. data/app/pb_kits/playbook/pb_dropdown/_dropdown.tsx +20 -4
  6. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_clear_selection.jsx +45 -0
  7. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_clear_selection.md +1 -0
  8. data/app/pb_kits/playbook/pb_dropdown/docs/example.yml +1 -0
  9. data/app/pb_kits/playbook/pb_dropdown/docs/index.js +1 -0
  10. data/app/pb_kits/playbook/pb_dropdown/subcomponents/DropdownOption.tsx +1 -1
  11. data/app/pb_kits/playbook/pb_dropdown/subcomponents/DropdownTrigger.tsx +2 -2
  12. data/app/pb_kits/playbook/pb_enhanced_element/{element_observer.js → element_observer.ts} +27 -19
  13. data/app/pb_kits/playbook/pb_enhanced_element/{index.js → index.ts} +22 -15
  14. data/app/pb_kits/playbook/pb_filter/Filter/ResultsCount.tsx +4 -2
  15. data/app/pb_kits/playbook/pb_filter/docs/_filter_default.jsx +1 -1
  16. data/app/pb_kits/playbook/pb_form_pill/_form_pill.tsx +9 -1
  17. data/app/pb_kits/playbook/pb_form_pill/docs/_form_pill_truncated_text.html.erb +19 -0
  18. data/app/pb_kits/playbook/pb_form_pill/docs/_form_pill_truncated_text.jsx +27 -0
  19. data/app/pb_kits/playbook/pb_form_pill/docs/_form_pill_truncated_text.md +1 -0
  20. data/app/pb_kits/playbook/pb_form_pill/docs/example.yml +2 -0
  21. data/app/pb_kits/playbook/pb_form_pill/docs/index.js +1 -0
  22. data/app/pb_kits/playbook/pb_multi_level_select/_multi_level_select.tsx +211 -227
  23. data/app/pb_kits/playbook/pb_multi_level_select/context/index.tsx +5 -0
  24. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_default.jsx +1 -1
  25. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_reset.html.erb +93 -0
  26. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_reset.md +1 -0
  27. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_with_children.jsx +105 -0
  28. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_with_children.md +1 -0
  29. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_with_children_with_radios.jsx +106 -0
  30. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_with_children_with_radios.md +1 -0
  31. data/app/pb_kits/playbook/pb_multi_level_select/docs/example.yml +4 -0
  32. data/app/pb_kits/playbook/pb_multi_level_select/docs/index.js +2 -0
  33. data/app/pb_kits/playbook/pb_multi_level_select/multi_level_select_options.tsx +149 -0
  34. data/app/pb_kits/playbook/pb_timeline/_date_area.tsx +38 -0
  35. data/app/pb_kits/playbook/pb_timeline/_detail_area.tsx +29 -0
  36. data/app/pb_kits/playbook/pb_timeline/_item.tsx +59 -23
  37. data/app/pb_kits/playbook/pb_timeline/_node_area.tsx +42 -0
  38. data/app/pb_kits/playbook/pb_timeline/date_area.html.erb +12 -0
  39. data/app/pb_kits/playbook/pb_timeline/date_area.rb +13 -0
  40. data/app/pb_kits/playbook/pb_timeline/detail_area.html.erb +3 -0
  41. data/app/pb_kits/playbook/pb_timeline/detail_area.rb +11 -0
  42. data/app/pb_kits/playbook/pb_timeline/docs/_timeline_with_children.html.erb +43 -0
  43. data/app/pb_kits/playbook/pb_timeline/docs/_timeline_with_children.jsx +72 -0
  44. data/app/pb_kits/playbook/pb_timeline/docs/_timeline_with_children.md +4 -0
  45. data/app/pb_kits/playbook/pb_timeline/docs/example.yml +2 -1
  46. data/app/pb_kits/playbook/pb_timeline/docs/index.js +1 -0
  47. data/app/pb_kits/playbook/pb_timeline/item.html.erb +17 -21
  48. data/app/pb_kits/playbook/pb_timeline/item.rb +4 -0
  49. data/app/pb_kits/playbook/pb_timeline/node_area.html.erb +14 -0
  50. data/app/pb_kits/playbook/pb_timeline/node_area.rb +16 -0
  51. data/app/pb_kits/playbook/pb_timeline/timeline.test.js +84 -0
  52. data/app/pb_kits/playbook/pb_typeahead/_typeahead.tsx +4 -1
  53. data/app/pb_kits/playbook/pb_typeahead/components/MultiValue.tsx +3 -1
  54. data/app/pb_kits/playbook/pb_typeahead/typeahead.rb +3 -1
  55. data/dist/chunks/_typeahead-C9g4qCcE.js +22 -0
  56. data/dist/chunks/_weekday_stacked-C2sJArua.js +45 -0
  57. data/dist/chunks/lib-CEpcaI8y.js +29 -0
  58. data/dist/chunks/{pb_form_validation-8H8TD40J.js → pb_form_validation-D9zkwt2b.js} +1 -1
  59. data/dist/chunks/vendor.js +1 -45
  60. data/dist/playbook-doc.js +1 -1
  61. data/dist/playbook-rails-react-bindings.js +1 -1
  62. data/dist/playbook-rails.js +1 -1
  63. data/lib/playbook/pb_doc_helper.rb +5 -5
  64. data/lib/playbook/version.rb +1 -1
  65. metadata +33 -11
  66. data/dist/chunks/_typeahead-DPGG9h5l.js +0 -65
  67. data/dist/chunks/index-CaXZ6mCT.js +0 -1
  68. data/dist/chunks/index-DfoYI7sS.js +0 -1
  69. data/dist/chunks/lib-ByFv-sq8.js +0 -45
  70. data/dist/mark.js +0 -1
  71. data/dist/playbook-rails-friendly.js +0 -1
@@ -0,0 +1,42 @@
1
+ import React from 'react'
2
+ import classnames from 'classnames'
3
+ import { buildHtmlProps } from '../utilities/props'
4
+ import { globalProps, GlobalProps } from "../utilities/globalProps"
5
+ import IconCircle from '../pb_icon_circle/_icon_circle'
6
+
7
+ type TimelineNodeAreaProps = {
8
+ icon?: string,
9
+ iconColor?: 'default' | 'royal' | 'blue' | 'purple' | 'teal' | 'red' | 'yellow' | 'green',
10
+ children?: React.ReactNode,
11
+ className?: string,
12
+ htmlOptions?: { [key: string]: any },
13
+ } & GlobalProps
14
+
15
+ const TimelineNodeArea: React.FC<TimelineNodeAreaProps> = ({
16
+ icon = 'user',
17
+ iconColor = 'default',
18
+ children,
19
+ className,
20
+ htmlOptions = {},
21
+ ...props
22
+ }) => {
23
+ const htmlProps = buildHtmlProps(htmlOptions)
24
+ return (
25
+ <div
26
+ {...htmlProps}
27
+ className={classnames('pb_timeline_item_step', globalProps(props), className)}
28
+ >
29
+ {children ? (
30
+ children
31
+ ) : (
32
+ <IconCircle icon={icon}
33
+ size="xs"
34
+ variant={iconColor}
35
+ />
36
+ )}
37
+ <div className="pb_timeline_item_connector" />
38
+ </div>
39
+ )
40
+ }
41
+
42
+ export default TimelineNodeArea
@@ -0,0 +1,12 @@
1
+ <%= pb_content_tag do %>
2
+ <% if object.date.present? %>
3
+ <%= pb_rails("date_stacked", props: {
4
+ date: object.date,
5
+ size: "sm",
6
+ align: "center"
7
+ }) %>
8
+ <% else %>
9
+ <%= content.presence %>
10
+ <% end %>
11
+ <% end %>
12
+
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Playbook
4
+ module PbTimeline
5
+ class DateArea < Playbook::KitBase
6
+ prop :date
7
+
8
+ def classname
9
+ generate_classname("pb_timeline_item_left_block")
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,3 @@
1
+ <%= pb_content_tag do %>
2
+ <%= content.presence %>
3
+ <% end %>
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Playbook
4
+ module PbTimeline
5
+ class DetailArea < Playbook::KitBase
6
+ def classname
7
+ generate_classname("pb_timeline_item_right_block")
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,43 @@
1
+ <%= pb_rails("timeline", props: {orientation: "horizontal", show_date: true}) do %>
2
+ <%= pb_rails("timeline/item", props: { line_style: "solid"}) do |item| %>
3
+
4
+ <% item.date_area do %>
5
+ <%= pb_rails("timeline/date_area") do %>
6
+ <%= pb_rails("title", props: { text: "Any Kit Here", size: 2 }) %>
7
+ <% end %>
8
+ <% end %>
9
+
10
+ <% item.node_area do %>
11
+ <%= pb_rails("timeline/node_area", props: { icon: 'check', icon_color: 'teal' }) %>
12
+ <% end %>
13
+
14
+ <% item.detail_area do %>
15
+ <%= pb_rails("title_detail", props: {
16
+ title: "Jackson Heights",
17
+ detail: "37-27 74th Street"
18
+ }) %>
19
+ <% end %>
20
+ <% end %>
21
+ <%= pb_rails("timeline/item", props: { line_style: "dotted"}) do |item| %>
22
+
23
+ <% item.node_area do %>
24
+ <%= pb_rails("timeline/node_area") do %>
25
+ <%= pb_rails("pill", props: { text: "Any Kit" , variant: "success" }) %>
26
+ <% end %>
27
+ <% end %>
28
+
29
+ <% item.detail_area do %>
30
+ <%= pb_rails("title_detail", props: {
31
+ title: "Greenpoint",
32
+ detail: "81 Gate St Brooklyn"
33
+ }) %>
34
+ <% end %>
35
+ <% end %>
36
+
37
+ <%= pb_rails("timeline/item", props: {icon: "map-marker-alt", icon_color: "purple", date: Date.today+1 }) do |item| %>
38
+ <%= pb_rails("title_detail", props: {
39
+ title: "Society Hill",
40
+ detail: "72 E St Astoria"
41
+ }) %>
42
+ <% end %>
43
+ <% end %>
@@ -0,0 +1,72 @@
1
+ import React from 'react'
2
+
3
+ import Timeline from '../_timeline'
4
+ import TimelineItem from '../_item'
5
+ import TimelineDateArea from '../_date_area'
6
+ import TimelineNodeArea from '../_node_area'
7
+ import TimelineDetailArea from '../_detail_area'
8
+ import Title from '../../pb_title/_title'
9
+ import Pill from '../../pb_pill/_pill'
10
+
11
+ import TitleDetail from '../../pb_title_detail/_title_detail'
12
+
13
+ const TimelineWithChildren = (props) => (
14
+ <div>
15
+ <Timeline orientation="horizontal"
16
+ showDate
17
+ {...props}
18
+ >
19
+ <TimelineItem lineStyle="solid"
20
+ {...props}
21
+ >
22
+ <TimelineDateArea>
23
+ <Title size={2}
24
+ text='Any Kit Here'
25
+ />
26
+ </TimelineDateArea>
27
+ <TimelineNodeArea icon="user"
28
+ iconColor="royal"
29
+ />
30
+ <TimelineDetailArea>
31
+ <TitleDetail detail="37-27 74th Street"
32
+ title="Jackson Heights"
33
+ {...props}
34
+ />
35
+ </TimelineDetailArea>
36
+ </TimelineItem>
37
+
38
+ <TimelineItem lineStyle="dotted"
39
+ {...props}
40
+ >
41
+ <TimelineNodeArea>
42
+ <Pill text="Any Kit"
43
+ variant="success"
44
+ />
45
+ </TimelineNodeArea>
46
+ <TimelineDetailArea>
47
+ <TitleDetail detail="81 Gate St Brooklyn"
48
+ title="Greenpoint"
49
+ {...props}
50
+ />
51
+ </TimelineDetailArea>
52
+ </TimelineItem>
53
+
54
+ <TimelineItem lineStyle="solid"
55
+ {...props}
56
+ >
57
+ <TimelineDateArea date={new Date(new Date().setDate(new Date().getDate() + 1))} />
58
+ <TimelineNodeArea icon="map-marker-alt"
59
+ iconColor="purple"
60
+ />
61
+ <TimelineDetailArea>
62
+ <TitleDetail detail="72 E St Astoria"
63
+ title="Society Hill"
64
+ {...props}
65
+ />
66
+ </TimelineDetailArea>
67
+ </TimelineItem>
68
+ </Timeline>
69
+ </div>
70
+ )
71
+
72
+ export default TimelineWithChildren
@@ -0,0 +1,4 @@
1
+ You can use whatever kit you want for the date area of the timeline item, the node area, and the content area at the bottom or left.
2
+
3
+ Checkout the code in this example to see the children kits in action.
4
+
@@ -4,10 +4,11 @@ examples:
4
4
  - timeline_default: Default
5
5
  - timeline_vertical: Vertical
6
6
  - timeline_with_date: With Date
7
+ - timeline_with_children: With Children
7
8
 
8
9
 
9
10
  react:
10
11
  - timeline_default: Default
11
12
  - timeline_vertical: Vertical
12
13
  - timeline_with_date: With Date
13
-
14
+ - timeline_with_children: With Children
@@ -1,3 +1,4 @@
1
1
  export { default as TimelineDefault } from './_timeline_default.jsx'
2
2
  export { default as TimelineVertical } from './_timeline_vertical.jsx'
3
3
  export { default as TimelineWithDate } from './_timeline_with_date.jsx'
4
+ export { default as TimelineWithChildren } from './_timeline_with_children.jsx'
@@ -1,25 +1,21 @@
1
1
  <%= pb_content_tag do %>
2
+ <% if date_area %>
3
+ <%= date_area %>
4
+ <% else %>
5
+ <%= pb_rails("timeline/date_area", props: { date: date }) %>
6
+ <% end %>
2
7
 
3
- <div class="pb_timeline_item_left_block">
4
- <% if object.date.present? %>
5
- <%= pb_rails("date_stacked", props: {
6
- date: object.date,
7
- size: "sm",
8
- align: "center"
9
- }) %>
10
- <% end %>
11
- </div>
12
-
13
- <div class="pb_timeline_item_step">
14
- <%= pb_rails("icon_circle", props: {
15
- icon: object.icon,
16
- variant: object.icon_color,
17
- size: "xs"
18
- }) %>
19
- <div class="pb_timeline_item_connector"></div>
20
- </div>
8
+ <% if node_area %>
9
+ <%= node_area %>
10
+ <% else %>
11
+ <%= pb_rails("timeline/node_area", props: { icon: icon, icon_color: icon_color }) %>
12
+ <% end %>
21
13
 
22
- <div class="pb_timeline_item_right_block">
23
- <%= content.presence %>
24
- </div>
14
+ <% if detail_area %>
15
+ <%= detail_area %>
16
+ <% else %>
17
+ <%= pb_rails("timeline/detail_area") do %>
18
+ <%= content %>
19
+ <% end %>
20
+ <% end %>
25
21
  <% end %>
@@ -13,6 +13,10 @@ module Playbook
13
13
  values: %w[solid dotted],
14
14
  default: "solid"
15
15
 
16
+ renders_one :date_area
17
+ renders_one :node_area
18
+ renders_one :detail_area
19
+
16
20
  def classname
17
21
  generate_classname("pb_timeline_item_kit", line_style)
18
22
  end
@@ -0,0 +1,14 @@
1
+ <%= pb_content_tag do %>
2
+ <% if object.icon.present? %>
3
+ <%= pb_rails("icon_circle", props: {
4
+ icon: object.icon,
5
+ variant: object.icon_color,
6
+ size: "xs"
7
+ }) %>
8
+ <% else %>
9
+ <%= content.presence %>
10
+ <% end %>
11
+ <div class="pb_timeline_item_connector"></div>
12
+ <% end %>
13
+
14
+
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Playbook
4
+ module PbTimeline
5
+ class NodeArea < Playbook::KitBase
6
+ prop :icon, type: Playbook::Props::String
7
+ prop :icon_color, type: Playbook::Props::Enum,
8
+ values: %w[default royal blue purple teal red yellow green],
9
+ default: "default"
10
+
11
+ def classname
12
+ generate_classname("pb_timeline_item_step")
13
+ end
14
+ end
15
+ end
16
+ end
@@ -2,6 +2,10 @@ import React from 'react'
2
2
  import { render, screen } from '../utilities/test-utils'
3
3
 
4
4
  import Timeline from './_timeline'
5
+ import TimelineItem from './_item'
6
+ import TimelineDateArea from './_date_area'
7
+ import TimelineNodeArea from './_node_area'
8
+ import TimelineDetailArea from './_detail_area'
5
9
  import TitleDetail from '../pb_title_detail/_title_detail'
6
10
 
7
11
  const testId = 'timeline'
@@ -43,18 +47,91 @@ const TimelineDefault = (props) => (
43
47
  </>
44
48
  )
45
49
 
50
+ const TimelineWithChildren = (props) => (
51
+ <>
52
+ <Timeline
53
+ className={className}
54
+ data={{ testid: testId }}
55
+ orientation="horizontal"
56
+ showDate
57
+ {...props}
58
+ >
59
+ <TimelineItem lineStyle="solid"
60
+ {...props}
61
+ >
62
+ <TimelineDateArea date={new Date()} />
63
+ <TimelineNodeArea icon="user"
64
+ iconColor="royal"
65
+ />
66
+ <TimelineDetailArea>
67
+ <TitleDetail
68
+ detail="37-27 74th Street"
69
+ title="Jackson Heights"
70
+ {...props}
71
+ />
72
+ </TimelineDetailArea>
73
+ </TimelineItem>
74
+
75
+ <TimelineItem lineStyle="dotted"
76
+ {...props}
77
+ >
78
+ <TimelineNodeArea icon="check"
79
+ iconColor="teal"
80
+ />
81
+ <TimelineDetailArea>
82
+ <TitleDetail
83
+ detail="81 Gate St Brooklyn"
84
+ title="Greenpoint"
85
+ {...props}
86
+ />
87
+ </TimelineDetailArea>
88
+ </TimelineItem>
89
+
90
+ <TimelineItem lineStyle="solid"
91
+ {...props}
92
+ >
93
+ <TimelineDateArea
94
+ date={new Date(new Date().setDate(new Date().getDate() + 1))}
95
+ />
96
+ <TimelineNodeArea icon="map-marker-alt"
97
+ iconColor="purple"
98
+ />
99
+ <TimelineDetailArea>
100
+ <TitleDetail
101
+ detail="72 E St Astoria"
102
+ title="Society Hill"
103
+ {...props}
104
+ />
105
+ </TimelineDetailArea>
106
+ </TimelineItem>
107
+ </Timeline>
108
+ </>
109
+ )
110
+
46
111
  test('should pass data prop', () => {
47
112
  render(<TimelineDefault />)
48
113
  const kit = screen.getByTestId(testId)
49
114
  expect(kit).toBeInTheDocument()
50
115
  })
51
116
 
117
+ test('should pass data prop using children', () => {
118
+ render(<TimelineWithChildren />)
119
+ const kit = screen.getByTestId(testId)
120
+ expect(kit).toBeInTheDocument()
121
+ })
122
+
52
123
  test('should pass className prop', () => {
53
124
  render(<TimelineDefault />)
54
125
  const kit = screen.getByTestId(testId)
55
126
  expect(kit).toHaveClass(className)
56
127
  })
57
128
 
129
+ test('should pass className prop with children', () => {
130
+ render(<TimelineWithChildren />)
131
+ const kit = screen.getByTestId(testId)
132
+ expect(kit).toHaveClass(className)
133
+ })
134
+
58
135
  test('should pass aria prop', () => {
59
136
  render(<TimelineDefault />)
60
137
  const kit = screen.getByTestId(testId)
@@ -86,3 +163,10 @@ test('should pass showDate prop', () => {
86
163
  const kit = screen.getByTestId(testId)
87
164
  expect(kit).toHaveClass('pb_timeline_kit__horizontal__with_date')
88
165
  })
166
+
167
+ test('should pass showDate prop with Children', () => {
168
+ const props = { showDate: true }
169
+ render(<TimelineWithChildren {...props} />)
170
+ const kit = screen.getByTestId(testId)
171
+ expect(kit).toHaveClass('pb_timeline_kit__horizontal__with_date')
172
+ })
@@ -136,12 +136,15 @@ const Typeahead = ({
136
136
  }
137
137
  }
138
138
 
139
+ const filteredProps: TypeaheadProps = {...props}
140
+ delete filteredProps.truncate
141
+
139
142
  const dataProps = buildDataProps(data)
140
143
  const htmlProps = buildHtmlProps(htmlOptions)
141
144
  const classes = classnames(
142
145
  'pb_typeahead_kit react-select',
143
146
  `mb_${marginBottom}`,
144
- globalProps(props),
147
+ globalProps(filteredProps),
145
148
  className
146
149
  )
147
150
 
@@ -16,7 +16,7 @@ type Props = {
16
16
  const MultiValue = (props: Props) => {
17
17
  const { removeProps } = props
18
18
  const { imageUrl, label } = props.data
19
- const { dark, multiKit, pillColor } = props.selectProps
19
+ const { dark, multiKit, pillColor, truncate } = props.selectProps
20
20
 
21
21
  const formPillProps = {
22
22
  marginRight: 'xs',
@@ -51,6 +51,7 @@ const MultiValue = (props: Props) => {
51
51
  name={label}
52
52
  size={multiKit === 'smallPill' ? 'small' : ''}
53
53
  text=''
54
+ truncate={truncate}
54
55
  {...props}
55
56
  />
56
57
  }
@@ -64,6 +65,7 @@ const MultiValue = (props: Props) => {
64
65
  name=''
65
66
  size={multiKit === 'smallPill' ? 'small' : ''}
66
67
  text={label}
68
+ truncate={truncate}
67
69
  {...props}
68
70
  />
69
71
  }
@@ -65,10 +65,10 @@ module Playbook
65
65
  def typeahead_react_options
66
66
  base_options = {
67
67
  className: classname,
68
- pillColor: pill_color,
69
68
  dark: dark,
70
69
  defaultValue: default_options,
71
70
  error: error,
71
+ htmlOptions: html_options,
72
72
  id: id,
73
73
  inline: inline,
74
74
  isMulti: is_multi,
@@ -77,8 +77,10 @@ module Playbook
77
77
  multiKit: multi_kit,
78
78
  name: name,
79
79
  options: options,
80
+ pillColor: pill_color,
80
81
  placeholder: placeholder,
81
82
  plusIcon: plus_icon,
83
+ truncate: truncate,
82
84
  }
83
85
 
84
86
  base_options[:getOptionLabel] = get_option_label if get_option_label.present?