playbook_ui 7.4.0.pre.alpha4 → 7.4.0.pre.alpha5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (146) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/images/github-brands.svg +1 -0
  3. data/app/assets/images/landing-background.svg +36 -0
  4. data/app/assets/images/landing-image.svg +203 -0
  5. data/app/assets/images/{pb.logo.svg → pb-logo.svg} +2 -2
  6. data/app/assets/images/pb-white-logo.svg +15 -0
  7. data/app/pb_kits/playbook/_playbook.scss +4 -1
  8. data/app/pb_kits/playbook/data/menu.yml +3 -2
  9. data/app/pb_kits/playbook/index.js +3 -2
  10. data/app/pb_kits/playbook/pb_background/_background.html.erb +14 -0
  11. data/app/pb_kits/playbook/pb_background/_background.jsx +63 -0
  12. data/app/pb_kits/playbook/pb_background/_background.scss +35 -0
  13. data/app/pb_kits/playbook/pb_background/background.rb +35 -0
  14. data/app/pb_kits/playbook/pb_background/docs/_background_dark.html.erb +3 -0
  15. data/app/pb_kits/playbook/pb_background/docs/_background_dark.jsx +13 -0
  16. data/app/pb_kits/playbook/pb_background/docs/_background_gradient.html.erb +3 -0
  17. data/app/pb_kits/playbook/pb_background/docs/_background_gradient.jsx +13 -0
  18. data/app/pb_kits/playbook/pb_background/docs/_background_image.html.erb +13 -0
  19. data/app/pb_kits/playbook/pb_background/docs/_background_image.jsx +30 -0
  20. data/app/pb_kits/playbook/pb_background/docs/_background_light.html.erb +3 -0
  21. data/app/pb_kits/playbook/pb_background/docs/_background_light.jsx +13 -0
  22. data/app/pb_kits/playbook/pb_background/docs/_background_white.html.erb +3 -0
  23. data/app/pb_kits/playbook/pb_background/docs/_background_white.jsx +14 -0
  24. data/app/pb_kits/playbook/pb_background/docs/_description.md +1 -0
  25. data/app/pb_kits/playbook/pb_background/docs/example.yml +15 -0
  26. data/app/pb_kits/playbook/pb_background/docs/index.js +6 -0
  27. data/app/pb_kits/playbook/pb_checkbox/_checkbox.html.erb +2 -3
  28. data/app/pb_kits/playbook/pb_checkbox/_checkbox.jsx +1 -2
  29. data/app/pb_kits/playbook/pb_checkbox/checkbox.rb +1 -4
  30. data/app/pb_kits/playbook/pb_checkbox/docs/_checkbox_default.html.erb +2 -5
  31. data/app/pb_kits/playbook/pb_collapsible/_collapsible.html.erb +9 -0
  32. data/app/pb_kits/playbook/pb_collapsible/_collapsible.jsx +77 -0
  33. data/app/pb_kits/playbook/pb_collapsible/_collapsible.scss +17 -0
  34. data/app/pb_kits/playbook/pb_collapsible/child_kits/CollapsibleContent.jsx +40 -0
  35. data/app/pb_kits/playbook/pb_collapsible/child_kits/CollapsibleMain.jsx +58 -0
  36. data/app/pb_kits/playbook/pb_collapsible/child_kits/_collapsible_content.html.erb +7 -0
  37. data/app/pb_kits/playbook/pb_collapsible/child_kits/_collapsible_main.html.erb +16 -0
  38. data/app/pb_kits/playbook/pb_collapsible/collapsible.rb +15 -0
  39. data/app/pb_kits/playbook/pb_collapsible/collapsible_content.rb +21 -0
  40. data/app/pb_kits/playbook/pb_collapsible/collapsible_main.rb +24 -0
  41. data/app/pb_kits/playbook/pb_collapsible/docs/_collapsible_dark.html.erb +10 -0
  42. data/app/pb_kits/playbook/pb_collapsible/docs/_collapsible_dark.jsx +17 -0
  43. data/app/pb_kits/playbook/pb_collapsible/docs/_collapsible_default.html.erb +10 -0
  44. data/app/pb_kits/playbook/pb_collapsible/docs/_collapsible_default.jsx +19 -0
  45. data/app/pb_kits/playbook/pb_collapsible/docs/example.yml +9 -0
  46. data/app/pb_kits/playbook/pb_collapsible/docs/index.js +2 -0
  47. data/app/pb_kits/playbook/pb_collapsible/index.js +82 -0
  48. data/app/pb_kits/playbook/pb_date/_date.html.erb +64 -8
  49. data/app/pb_kits/playbook/pb_date/_date.jsx +115 -66
  50. data/app/pb_kits/playbook/pb_date/_date.scss +30 -0
  51. data/app/pb_kits/playbook/pb_date/date.rb +20 -9
  52. data/app/pb_kits/playbook/pb_date/docs/_date_alignment.html.erb +24 -0
  53. data/app/pb_kits/playbook/pb_date/docs/_date_alignment.jsx +35 -0
  54. data/app/pb_kits/playbook/pb_date/docs/_date_default.html.erb +21 -6
  55. data/app/pb_kits/playbook/pb_date/docs/_date_default.jsx +43 -12
  56. data/app/pb_kits/playbook/pb_date/docs/_date_variants.html.erb +27 -0
  57. data/app/pb_kits/playbook/pb_date/docs/_date_variants.jsx +43 -0
  58. data/app/pb_kits/playbook/pb_date/docs/example.yml +4 -0
  59. data/app/pb_kits/playbook/pb_date/docs/index.js +2 -0
  60. data/app/pb_kits/playbook/pb_date_picker/_date_picker.html.erb +19 -14
  61. data/app/pb_kits/playbook/pb_date_time/_date_time.html.erb +31 -0
  62. data/app/pb_kits/playbook/pb_date_time/_date_time.jsx +73 -0
  63. data/app/pb_kits/playbook/pb_date_time/_date_time.scss +26 -0
  64. data/app/pb_kits/playbook/pb_date_time/date_time.rb +29 -0
  65. data/app/pb_kits/playbook/pb_date_time/docs/_date_time_align.html.erb +17 -0
  66. data/app/pb_kits/playbook/pb_date_time/docs/_date_time_align.jsx +35 -0
  67. data/app/pb_kits/playbook/pb_date_time/docs/_date_time_default.html.erb +20 -0
  68. data/app/pb_kits/playbook/pb_date_time/docs/_date_time_default.jsx +38 -0
  69. data/app/pb_kits/playbook/pb_date_time/docs/_date_time_size.html.erb +26 -0
  70. data/app/pb_kits/playbook/pb_date_time/docs/_date_time_size.jsx +75 -0
  71. data/app/pb_kits/playbook/pb_date_time/docs/_description.md +1 -0
  72. data/app/pb_kits/playbook/pb_date_time/docs/example.yml +11 -0
  73. data/app/pb_kits/playbook/pb_date_time/docs/index.js +3 -0
  74. data/app/pb_kits/playbook/pb_flex/_flex.jsx +1 -1
  75. data/app/pb_kits/playbook/pb_flex/_flex.scss +4 -0
  76. data/app/pb_kits/playbook/pb_flex/flex.rb +1 -1
  77. data/app/pb_kits/playbook/pb_form/docs/_form_form_with.html.erb +52 -1
  78. data/app/pb_kits/playbook/pb_form/docs/_form_form_with_validate.html.erb +1 -1
  79. data/app/pb_kits/playbook/pb_form/docs/_form_simple_form.html.erb +1 -1
  80. data/app/pb_kits/playbook/pb_form/docs/_form_simple_form_validate.html.erb +1 -1
  81. data/app/pb_kits/playbook/pb_form/form_builder/date_picker_field.rb +19 -1
  82. data/app/pb_kits/playbook/pb_home_address_street/home_address_street.rb +1 -1
  83. data/app/pb_kits/playbook/pb_list/_list.jsx +2 -9
  84. data/app/pb_kits/playbook/pb_progress_step/_progress_step.jsx +3 -1
  85. data/app/pb_kits/playbook/pb_progress_step/_progress_step.scss +13 -4
  86. data/app/pb_kits/playbook/pb_progress_step/_progress_step_item.html.erb +1 -1
  87. data/app/pb_kits/playbook/pb_progress_step/_progress_step_item.jsx +5 -7
  88. data/app/pb_kits/playbook/pb_progress_step/docs/_progress_step_custom_icon.html.erb +12 -0
  89. data/app/pb_kits/playbook/pb_progress_step/docs/_progress_step_tracker_click_events.jsx +48 -0
  90. data/app/pb_kits/playbook/pb_progress_step/docs/example.yml +2 -0
  91. data/app/pb_kits/playbook/pb_progress_step/docs/index.js +1 -0
  92. data/app/pb_kits/playbook/pb_progress_step/progress_step.rb +5 -3
  93. data/app/pb_kits/playbook/pb_progress_step/progress_step_item.rb +6 -0
  94. data/app/pb_kits/playbook/pb_radio/_radio.jsx +3 -0
  95. data/app/pb_kits/playbook/pb_timestamp/_timestamp.html.erb +13 -1
  96. data/app/pb_kits/playbook/pb_timestamp/_timestamp.jsx +96 -20
  97. data/app/pb_kits/playbook/pb_timestamp/_timestamp.scss +12 -1
  98. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_align.html.erb +69 -0
  99. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_align.jsx +91 -0
  100. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_default.html.erb +21 -1
  101. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_default.jsx +31 -4
  102. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_elapsed.html.erb +14 -0
  103. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_elapsed.jsx +27 -0
  104. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_elapsed_align.html.erb +54 -0
  105. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_elapsed_align.jsx +73 -0
  106. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_timezones.html.erb +59 -0
  107. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_timezones.jsx +74 -0
  108. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_timezones_align.html.erb +177 -0
  109. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_timezones_align.jsx +209 -0
  110. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_updated.html.erb +35 -0
  111. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_updated.jsx +51 -0
  112. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_updated_align.html.erb +123 -0
  113. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_updated_align.jsx +146 -0
  114. data/app/pb_kits/playbook/pb_timestamp/docs/example.yml +14 -0
  115. data/app/pb_kits/playbook/pb_timestamp/docs/index.js +7 -0
  116. data/app/pb_kits/playbook/pb_timestamp/timestamp.rb +67 -1
  117. data/app/pb_kits/playbook/pb_tooltip/_tooltip.scss +46 -19
  118. data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_default.html.erb +46 -10
  119. data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_white.html.erb +4 -4
  120. data/app/pb_kits/playbook/pb_tooltip/tooltip.rb +3 -2
  121. data/app/pb_kits/playbook/pb_typeahead/_typeahead.jsx +14 -2
  122. data/app/pb_kits/playbook/pb_typeahead/components/ClearIndicator.jsx +20 -0
  123. data/app/pb_kits/playbook/pb_typeahead/components/MultiValue.jsx +8 -15
  124. data/app/pb_kits/playbook/pb_typeahead/components/Option.jsx +1 -6
  125. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_pills.html.erb +10 -4
  126. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_pills.md +20 -4
  127. data/app/pb_kits/playbook/pb_typeahead/typeahead.rb +4 -0
  128. data/app/pb_kits/playbook/vendor.js +3 -0
  129. data/lib/playbook/version.rb +1 -1
  130. metadata +76 -21
  131. data/app/assets/images/clark.jpg +0 -0
  132. data/app/assets/images/giant.jpg +0 -0
  133. data/app/pb_kits/playbook/pb_selectable_list/_item.jsx +0 -90
  134. data/app/pb_kits/playbook/pb_selectable_list/_selectable_list.html.erb +0 -11
  135. data/app/pb_kits/playbook/pb_selectable_list/_selectable_list.jsx +0 -47
  136. data/app/pb_kits/playbook/pb_selectable_list/_selectable_list.scss +0 -17
  137. data/app/pb_kits/playbook/pb_selectable_list/_selectable_list_item.html.erb +0 -18
  138. data/app/pb_kits/playbook/pb_selectable_list/docs/_description.md +0 -3
  139. data/app/pb_kits/playbook/pb_selectable_list/docs/_selectable_list_checkbox.html.erb +0 -44
  140. data/app/pb_kits/playbook/pb_selectable_list/docs/_selectable_list_checkbox.jsx +0 -44
  141. data/app/pb_kits/playbook/pb_selectable_list/docs/_selectable_list_radio.html.erb +0 -44
  142. data/app/pb_kits/playbook/pb_selectable_list/docs/_selectable_list_radio.jsx +0 -44
  143. data/app/pb_kits/playbook/pb_selectable_list/docs/example.yml +0 -12
  144. data/app/pb_kits/playbook/pb_selectable_list/docs/index.js +0 -2
  145. data/app/pb_kits/playbook/pb_selectable_list/selectable_list.rb +0 -24
  146. data/app/pb_kits/playbook/pb_selectable_list/selectable_list_item.rb +0 -28
@@ -38,7 +38,7 @@ module Playbook
38
38
  end
39
39
 
40
40
  def address_house_style
41
- "#{address.titleize} #{separator} #{house_style}"
41
+ "#{address&.titleize} #{separator} #{house_style}"
42
42
  end
43
43
 
44
44
  def address_house_style2
@@ -17,9 +17,7 @@ type ListProps = {
17
17
  ordered: boolean,
18
18
  role?: string,
19
19
  tabIndex?: string,
20
- text?: string,
21
20
  size?: string,
22
- variant?: string,
23
21
  xpadding: boolean,
24
22
  }
25
23
 
@@ -38,8 +36,6 @@ const List = (props: ListProps) => {
38
36
  size = '',
39
37
  tabIndex,
40
38
  xpadding = false,
41
- variant,
42
- text,
43
39
  } = props
44
40
 
45
41
  const layoutClass = {
@@ -48,9 +44,6 @@ const List = (props: ListProps) => {
48
44
  default: '',
49
45
  }
50
46
 
51
- const childrenWithProps = React.Children.map(children, (child) => {
52
- return React.cloneElement(child, { text, variant })
53
- })
54
47
  const ariaProps = buildAriaProps(aria)
55
48
  const dataProps = buildDataProps(data)
56
49
  const classes = classnames(
@@ -77,7 +70,7 @@ const List = (props: ListProps) => {
77
70
  role={role}
78
71
  tabIndex={tabIndex}
79
72
  >
80
- {childrenWithProps}
73
+ {children}
81
74
  </ol>
82
75
  <Else />
83
76
  <ul
@@ -88,7 +81,7 @@ const List = (props: ListProps) => {
88
81
  role={role}
89
82
  tabIndex={tabIndex}
90
83
  >
91
- {childrenWithProps}
84
+ {children}
92
85
  </ul>
93
86
  </If>
94
87
  </div>
@@ -12,6 +12,7 @@ type ProgressStepProps = {
12
12
  children?: array<React.ReactChild>,
13
13
  orientation?: "horizontal" | "vertical",
14
14
  icon?: boolean,
15
+ showIcon?: boolean,
15
16
  variant?: string,
16
17
  color?: string,
17
18
  }
@@ -23,9 +24,10 @@ const ProgressStep = (props: ProgressStepProps) => {
23
24
  color,
24
25
  orientation = 'horizontal',
25
26
  icon = false,
27
+ showIcon = false,
26
28
  variant,
27
29
  } = props
28
- const iconStyle = icon === true ? 'icon' : ''
30
+ const iconStyle = icon === true || showIcon === true ? 'icon' : ''
29
31
  const progressStepCss = buildCss(
30
32
  'pb_progress_step_kit',
31
33
  orientation,
@@ -151,8 +151,11 @@
151
151
  .circle{
152
152
  height: 24px;
153
153
  width: 24px;
154
- border: $primary solid 6px;
154
+ border: $primary solid $border_rad_light;
155
155
  background-color: rgba($white, $opacity_8);
156
+ svg {
157
+ color: darken($primary,25%);
158
+ }
156
159
  }
157
160
  &::before {
158
161
  background-color: $primary;
@@ -249,10 +252,16 @@
249
252
  }
250
253
  }
251
254
  //End of Vertical
255
+ &[class*=icon]{
256
+ [class*=progress_step_item][class*=_complete],
257
+ [class*=progress_step_item][class*=_active] {
258
+ [class*=box] .circle svg {
259
+ opacity: 1;
260
+
261
+ }
262
+ }
263
+ }
252
264
 
253
- &[class*=icon] [class*=_complete] svg{
254
- opacity: 1;
255
- }
256
265
 
257
266
  &[class*=dark] {
258
267
  [class*=progress_step_item]{
@@ -4,7 +4,7 @@
4
4
  class: object.classname) do %>
5
5
  <div class="box">
6
6
  <div class="circle">
7
- <%= pb_rails("icon", props: { icon: "check", size: "xs" }) %>
7
+ <%= pb_rails("icon", props: { icon: object.icon, size: "xs" }) if object.icon.present? %>
8
8
  </div>
9
9
  <div class="content">
10
10
  <%= capture(&object.children) %>
@@ -7,14 +7,16 @@ import { Icon } from '..'
7
7
 
8
8
  type ProgressStepItemProps = {
9
9
  className?: string,
10
- status?: 'complete' | 'active' | 'inactive' | 'hidden',
10
+ status?: "complete" | "active" | "inactive" | "hidden",
11
11
  children?: React.Node,
12
+ icon?: string,
12
13
  }
13
14
 
14
15
  const ProgressStepItem = ({
15
16
  className,
16
17
  status = 'inactive',
17
18
  children,
19
+ icon = 'check',
18
20
  }: ProgressStepItemProps) => {
19
21
  const progressStepItem = buildCss('pb_progress_step_item', status)
20
22
 
@@ -22,13 +24,9 @@ const ProgressStepItem = ({
22
24
  <li className={classnames(progressStepItem, className)}>
23
25
  <div className="box">
24
26
  <div className="circle">
25
- <Icon
26
- icon="check"
27
- />
28
- </div>
29
- <div className="content">
30
- {children}
27
+ <Icon icon={icon} />
31
28
  </div>
29
+ <div className="content">{children}</div>
32
30
  </div>
33
31
  </li>
34
32
  )
@@ -0,0 +1,12 @@
1
+ <br><br>
2
+ <%= pb_rails("progress_step",props:{ variant:"tracker", icon:true}) do %>
3
+ <%= pb_rails("progress_step/progress_step_item", props: {status: "complete"}) do %>
4
+ <%= pb_rails("caption", props:{text: "Ordered"})%>
5
+ <% end %>
6
+ <%= pb_rails("progress_step/progress_step_item", props: {status: "active", icon: "exclamation-triangle"}) do %>
7
+ <%= pb_rails("caption", props:{text: "Shipped"})%>
8
+ <% end %>
9
+ <%= pb_rails("progress_step/progress_step_item", props: {status: "inactive"}) do %>
10
+ <%= pb_rails("caption", props:{text: "Delivered"})%>
11
+ <% end %>
12
+ <% end %>
@@ -0,0 +1,48 @@
1
+ import React, { useState } from 'react'
2
+ import ProgressStep from '../_progress_step.jsx'
3
+ import ProgressStepItem from '../_progress_step_item.jsx'
4
+ import { Button, Caption } from '../../'
5
+ const ProgressStepTrackerClickEvents = (props) => {
6
+ const [warning, setWarning] = useState(false)
7
+ const showWarning = warning == true
8
+ const WarningIcon = (
9
+ <ProgressStepItem
10
+ icon="exclamation-triangle"
11
+ key={Math.random()}
12
+ status="active"
13
+ >
14
+ <Caption>{'Shipped'}</Caption>
15
+ </ProgressStepItem>
16
+ )
17
+ const CheckedIcon = (
18
+ <ProgressStepItem
19
+ key={Math.random()}
20
+ status="active"
21
+ >
22
+ <Caption>{'Shipped'}</Caption>
23
+ </ProgressStepItem>
24
+ )
25
+ return (
26
+ <div>
27
+ <Button onClick={() => setWarning(!warning)}>{'Toggle State'}</Button>
28
+ <br />
29
+ <br />
30
+ <br />
31
+ <ProgressStep
32
+ icon
33
+ variant="tracker"
34
+ {...props}
35
+ >
36
+ <ProgressStepItem status="complete">
37
+ <Caption>{'Ordered'}</Caption>
38
+ </ProgressStepItem>
39
+ {showWarning ? WarningIcon : CheckedIcon}
40
+ <ProgressStepItem status="inactive">
41
+ <Caption>{'Delivered'}</Caption>
42
+ </ProgressStepItem>
43
+ </ProgressStep>
44
+ </div>
45
+ )
46
+ }
47
+
48
+ export default ProgressStepTrackerClickEvents
@@ -3,9 +3,11 @@ examples:
3
3
  - progress_step_default: Default
4
4
  - progress_step_vertical: Vertical
5
5
  - progress_step_tracker: Tracker
6
+ - progress_step_custom_icon: Custom Icon
6
7
 
7
8
 
8
9
  react:
9
10
  - progress_step_default: Default
10
11
  - progress_step_vertical: Vertical
11
12
  - progress_step_tracker: Tracker
13
+ - progress_step_tracker_click_events: Using State
@@ -1,3 +1,4 @@
1
1
  export { default as ProgressStepDefault } from './_progress_step_default.jsx'
2
2
  export { default as ProgressStepVertical } from './_progress_step_vertical.jsx'
3
3
  export { default as ProgressStepTracker } from './_progress_step_tracker.jsx'
4
+ export { default as ProgressStepTrackerClickEvents } from './_progress_step_tracker_click_events.jsx'
@@ -12,12 +12,14 @@ module Playbook
12
12
  default: "horizontal"
13
13
  prop :icon, type: Playbook::Props::Boolean,
14
14
  default: false
15
+ prop :show_icon, type: Playbook::Props::Boolean,
16
+ default: false
15
17
  prop :variant, type: Playbook::Props::Enum,
16
18
  values: %w[default tracker],
17
19
  default: "default"
18
20
  prop :color, type: Playbook::Props::Enum,
19
- values: %w[primary info],
20
- default: "primary"
21
+ values: %w[primary info],
22
+ default: "primary"
21
23
  def classname
22
24
  generate_classname("pb_progress_step_kit", orientation, icon_class, variant_class, color_class)
23
25
  end
@@ -25,7 +27,7 @@ module Playbook
25
27
  private
26
28
 
27
29
  def icon_class
28
- icon === true ? "icon" : nil
30
+ icon === true || show_icon === true ? "icon" : nil
29
31
  end
30
32
 
31
33
  def variant_class
@@ -11,6 +11,12 @@ module Playbook
11
11
  values: %w[complete active inactive hidden],
12
12
  default: "inactive"
13
13
 
14
+ prop :icon, required: false, default: "check"
15
+
16
+ def name_icon
17
+ icon ? icon : "check"
18
+ end
19
+
14
20
  def classname
15
21
  generate_classname("pb_progress_step_item", status)
16
22
  end
@@ -19,6 +19,7 @@ type RadioProps = {
19
19
  label: String,
20
20
  name: String,
21
21
  value: String,
22
+ text: String,
22
23
  onChange: (Boolean)=>void,
23
24
  }
24
25
 
@@ -32,6 +33,7 @@ const Radio = ({
32
33
  id,
33
34
  label,
34
35
  name = 'radio_name',
36
+ text = 'Radio Text',
35
37
  value = 'radio_text',
36
38
  onChange = () => {},
37
39
  ...props
@@ -55,6 +57,7 @@ const Radio = ({
55
57
  id={id}
56
58
  name={name}
57
59
  onChange={onChange}
60
+ text={text}
58
61
  type="radio"
59
62
  value={value}
60
63
  />
@@ -2,5 +2,17 @@
2
2
  id: object.id,
3
3
  data: object.data,
4
4
  class: object.classname) do %>
5
- <%= pb_rails("caption", props: { text: object.text, tag: 'span', size: 'xs' }) %>
5
+
6
+ <% case object.variant
7
+ when "updated" %>
8
+ <%= pb_rails("caption", props: { text: object.format_updated_string, size: 'xs', dark: object.dark }) %>
9
+ <% when "elapsed" %>
10
+ <%= pb_rails("caption", props: { text: object.format_updated_string, size: 'xs', dark: object.dark }) %>
11
+ <% else %>
12
+ <% if object.show_date %>
13
+ <%= pb_rails("caption", props: { text: object.format_datetime_string, size: 'xs', dark: object.dark }) %>
14
+ <% else %>
15
+ <%= pb_rails("caption", props: { text: object.format_time_string, size: 'xs', dark: object.dark }) %>
16
+ <% end %>
17
+ <% end %>
6
18
  <% end %>
@@ -2,36 +2,112 @@
2
2
 
3
3
  import React from 'react'
4
4
  import classnames from 'classnames'
5
-
5
+ import DateTime from '../pb_kit/dateTime.js'
6
+ import { buildCss } from '../utilities/props'
6
7
  import { Caption } from '../'
7
-
8
- import { buildCss, buildDataProps } from '../utilities/props'
9
-
10
8
  import { globalProps } from '../utilities/globalProps.js'
11
9
 
12
10
  type TimestampProps = {
11
+ align?: "left" | "center" | "right",
12
+ className?: string | array<string>,
13
+ dark?: boolean,
14
+ data?: string,
15
+ text: string,
16
+ timestamp: string,
17
+ timezone: string,
13
18
  id?: string,
14
- data?: object,
15
- className?: string,
16
- text?: string,
19
+ showDate?: boolean,
20
+ showUser?: boolean,
21
+ showTimezone?: boolean,
22
+ variant?: "default" | "elapsed" | "updated"
17
23
  }
18
24
 
19
25
  const Timestamp = (props: TimestampProps) => {
20
- const { id, className, data = {}, text } = props
21
- const dataProps = buildDataProps(data)
22
- const pbCss = buildCss('pb_timestamp_kit')
26
+ const {
27
+ align = 'left',
28
+ className,
29
+ dark = false,
30
+ text,
31
+ timestamp,
32
+ timezone,
33
+ showDate = true,
34
+ showUser = false,
35
+ showTimezone = false,
36
+ variant = 'default',
37
+ } = props
38
+ const classes = classnames(
39
+ buildCss('pb_timestamp_kit', align, {
40
+ dark: dark,
41
+ variant: variant,
42
+ }),
43
+ globalProps(props),
44
+ className
45
+ )
46
+
47
+ const currentYear = new Date().getFullYear().toString()
48
+ const dateTimestamp = new DateTime({ value: timestamp, zone: timezone })
49
+ const dateDisplay = dateTimestamp.toMonth() + ' ' + dateTimestamp.toDay()
50
+ const timeDisplay = dateTimestamp.toHour() + ':' + dateTimestamp.toMinute() + dateTimestamp.toMeridian()
51
+
52
+ var fullTimeDisplay = function fullTimeDisplay(dateTimestamp, timeDisplay, timezone, showTimezone) {
53
+ if (showTimezone == 'true' && timezone.length > 0) {
54
+ timeDisplay = timeDisplay + ' ' + dateTimestamp.toTimezone()
55
+ }
56
+ return timeDisplay
57
+ }
58
+
59
+ var fullDateDisplay = function fullDateDisplay(dateTimestamp, currentYear, dateDisplay, timezone, showTimezone) {
60
+ var fullDisplay = dateTimestamp.toMonth() + ' ' + dateTimestamp.toDay()
61
+ if (dateTimestamp.toYear() > currentYear) {
62
+ fullDisplay = fullDisplay + ', ' + dateTimestamp.toYear().toString()
63
+ }
64
+ return fullDisplay + ' \u00b7 ' + fullTimeDisplay(dateTimestamp, timeDisplay, timezone, showTimezone)
65
+ }
66
+
67
+ var fullElapsedDisplay = function fullElapsedDisplay(showUser, text, dateTimestamp){
68
+ var userDisplay = (showUser == 'true' && text.length > 0) ? ' by ' + text : ''
69
+ return 'Last updated' + userDisplay + ' ' + dateTimestamp.value.fromNow()
70
+ }
71
+
72
+ var fullUpdatedDisplay = function fullUpdatedDisplay(showUser, text, timeDisplay, timezone, showTimezone){
73
+ var userDisplay = (showUser == 'true' && text.length > 0) ? ' by ' + text : ''
74
+ return 'Last updated' + userDisplay + ' at ' + fullTimeDisplay(dateTimestamp, timeDisplay, timezone, showTimezone)
75
+ }
23
76
 
24
77
  return (
25
- <div
26
- {...dataProps}
27
- className={classnames(pbCss, globalProps(props), className)}
28
- id={id}
29
- >
30
- <Caption
31
- size="xs"
32
- tag="span"
33
- text={text}
34
- />
78
+ <div className={classes}>
79
+ <div className="pb_timestamp_kit">
80
+ <If condition={variant == 'updated'}>
81
+ <Caption
82
+ dark={dark}
83
+ size="xs"
84
+ text={fullUpdatedDisplay(showUser, text, timeDisplay, timezone, showTimezone)}
85
+ />
86
+ </If>
87
+ <If condition={variant == 'elapsed'}>
88
+ <Caption
89
+ dark={dark}
90
+ size="xs"
91
+ text={fullElapsedDisplay(showUser, text, dateTimestamp)}
92
+ />
93
+ </If>
94
+ <If condition={variant == 'default'}>
95
+ <If condition={showDate == 'true'}>
96
+ <Caption
97
+ dark={dark}
98
+ size="xs"
99
+ text={fullDateDisplay(dateTimestamp, currentYear, dateDisplay, timezone, showTimezone)}
100
+ />
101
+ </If>
102
+ <If condition={showDate == 'false'}>
103
+ <Caption
104
+ dark={dark}
105
+ size="xs"
106
+ text={timeDisplay}
107
+ />
108
+ </If>
109
+ </If>
110
+ </div>
35
111
  </div>
36
112
  )
37
113
  }