playbook_ui 7.4.0.pre.alpha6 → 7.4.1

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 (128) 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 +3 -1
  8. data/app/pb_kits/playbook/data/menu.yml +2 -2
  9. data/app/pb_kits/playbook/index.js +2 -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_date/_date.html.erb +64 -8
  32. data/app/pb_kits/playbook/pb_date/_date.jsx +115 -66
  33. data/app/pb_kits/playbook/pb_date/_date.scss +30 -0
  34. data/app/pb_kits/playbook/pb_date/date.rb +20 -9
  35. data/app/pb_kits/playbook/pb_date/docs/_date_alignment.html.erb +24 -0
  36. data/app/pb_kits/playbook/pb_date/docs/_date_alignment.jsx +35 -0
  37. data/app/pb_kits/playbook/pb_date/docs/_date_default.html.erb +21 -6
  38. data/app/pb_kits/playbook/pb_date/docs/_date_default.jsx +43 -12
  39. data/app/pb_kits/playbook/pb_date/docs/_date_variants.html.erb +27 -0
  40. data/app/pb_kits/playbook/pb_date/docs/_date_variants.jsx +43 -0
  41. data/app/pb_kits/playbook/pb_date/docs/example.yml +4 -0
  42. data/app/pb_kits/playbook/pb_date/docs/index.js +2 -0
  43. data/app/pb_kits/playbook/pb_date_picker/_date_picker.html.erb +19 -14
  44. data/app/pb_kits/playbook/pb_date_time/_date_time.html.erb +31 -0
  45. data/app/pb_kits/playbook/pb_date_time/_date_time.jsx +73 -0
  46. data/app/pb_kits/playbook/pb_date_time/_date_time.scss +26 -0
  47. data/app/pb_kits/playbook/pb_date_time/date_time.rb +29 -0
  48. data/app/pb_kits/playbook/pb_date_time/docs/_date_time_align.html.erb +17 -0
  49. data/app/pb_kits/playbook/pb_date_time/docs/_date_time_align.jsx +35 -0
  50. data/app/pb_kits/playbook/pb_date_time/docs/_date_time_default.html.erb +20 -0
  51. data/app/pb_kits/playbook/pb_date_time/docs/_date_time_default.jsx +38 -0
  52. data/app/pb_kits/playbook/pb_date_time/docs/_date_time_size.html.erb +26 -0
  53. data/app/pb_kits/playbook/pb_date_time/docs/_date_time_size.jsx +75 -0
  54. data/app/pb_kits/playbook/pb_date_time/docs/_description.md +1 -0
  55. data/app/pb_kits/playbook/pb_date_time/docs/example.yml +11 -0
  56. data/app/pb_kits/playbook/pb_date_time/docs/index.js +3 -0
  57. data/app/pb_kits/playbook/pb_flex/_flex.jsx +1 -1
  58. data/app/pb_kits/playbook/pb_flex/_flex.scss +4 -0
  59. data/app/pb_kits/playbook/pb_flex/flex.rb +1 -1
  60. data/app/pb_kits/playbook/pb_form/docs/_form_form_with.html.erb +52 -1
  61. data/app/pb_kits/playbook/pb_form/docs/_form_form_with_validate.html.erb +1 -1
  62. data/app/pb_kits/playbook/pb_form/docs/_form_simple_form.html.erb +1 -1
  63. data/app/pb_kits/playbook/pb_form/docs/_form_simple_form_validate.html.erb +1 -1
  64. data/app/pb_kits/playbook/pb_form/form_builder/date_picker_field.rb +19 -1
  65. data/app/pb_kits/playbook/pb_home_address_street/home_address_street.rb +1 -1
  66. data/app/pb_kits/playbook/pb_list/_list.jsx +2 -9
  67. data/app/pb_kits/playbook/pb_progress_step/_progress_step.jsx +3 -1
  68. data/app/pb_kits/playbook/pb_progress_step/_progress_step.scss +13 -4
  69. data/app/pb_kits/playbook/pb_progress_step/_progress_step_item.html.erb +1 -1
  70. data/app/pb_kits/playbook/pb_progress_step/_progress_step_item.jsx +5 -7
  71. data/app/pb_kits/playbook/pb_progress_step/docs/_progress_step_custom_icon.html.erb +12 -0
  72. data/app/pb_kits/playbook/pb_progress_step/docs/_progress_step_tracker_click_events.jsx +48 -0
  73. data/app/pb_kits/playbook/pb_progress_step/docs/example.yml +2 -0
  74. data/app/pb_kits/playbook/pb_progress_step/docs/index.js +1 -0
  75. data/app/pb_kits/playbook/pb_progress_step/progress_step.rb +5 -3
  76. data/app/pb_kits/playbook/pb_progress_step/progress_step_item.rb +6 -0
  77. data/app/pb_kits/playbook/pb_radio/_radio.jsx +3 -0
  78. data/app/pb_kits/playbook/pb_timestamp/_timestamp.html.erb +13 -1
  79. data/app/pb_kits/playbook/pb_timestamp/_timestamp.jsx +96 -20
  80. data/app/pb_kits/playbook/pb_timestamp/_timestamp.scss +12 -1
  81. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_align.html.erb +69 -0
  82. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_align.jsx +91 -0
  83. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_default.html.erb +21 -1
  84. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_default.jsx +31 -4
  85. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_elapsed.html.erb +14 -0
  86. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_elapsed.jsx +27 -0
  87. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_elapsed_align.html.erb +54 -0
  88. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_elapsed_align.jsx +73 -0
  89. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_timezones.html.erb +59 -0
  90. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_timezones.jsx +74 -0
  91. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_timezones_align.html.erb +177 -0
  92. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_timezones_align.jsx +209 -0
  93. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_updated.html.erb +35 -0
  94. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_updated.jsx +51 -0
  95. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_updated_align.html.erb +123 -0
  96. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_updated_align.jsx +146 -0
  97. data/app/pb_kits/playbook/pb_timestamp/docs/example.yml +14 -0
  98. data/app/pb_kits/playbook/pb_timestamp/docs/index.js +7 -0
  99. data/app/pb_kits/playbook/pb_timestamp/timestamp.rb +67 -1
  100. data/app/pb_kits/playbook/pb_tooltip/_tooltip.scss +46 -19
  101. data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_default.html.erb +46 -10
  102. data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_white.html.erb +4 -4
  103. data/app/pb_kits/playbook/pb_tooltip/tooltip.rb +3 -2
  104. data/app/pb_kits/playbook/pb_typeahead/_typeahead.jsx +14 -2
  105. data/app/pb_kits/playbook/pb_typeahead/components/ClearIndicator.jsx +20 -0
  106. data/app/pb_kits/playbook/pb_typeahead/components/MultiValue.jsx +8 -15
  107. data/app/pb_kits/playbook/pb_typeahead/components/Option.jsx +1 -6
  108. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_pills.html.erb +10 -4
  109. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_pills.md +20 -4
  110. data/app/pb_kits/playbook/pb_typeahead/typeahead.rb +4 -0
  111. data/lib/playbook/version.rb +1 -1
  112. metadata +60 -22
  113. data/app/assets/images/clark.jpg +0 -0
  114. data/app/assets/images/giant.jpg +0 -0
  115. data/app/pb_kits/playbook/pb_selectable_list/_item.jsx +0 -90
  116. data/app/pb_kits/playbook/pb_selectable_list/_selectable_list.html.erb +0 -11
  117. data/app/pb_kits/playbook/pb_selectable_list/_selectable_list.jsx +0 -47
  118. data/app/pb_kits/playbook/pb_selectable_list/_selectable_list.scss +0 -17
  119. data/app/pb_kits/playbook/pb_selectable_list/_selectable_list_item.html.erb +0 -18
  120. data/app/pb_kits/playbook/pb_selectable_list/docs/_description.md +0 -3
  121. data/app/pb_kits/playbook/pb_selectable_list/docs/_selectable_list_checkbox.html.erb +0 -30
  122. data/app/pb_kits/playbook/pb_selectable_list/docs/_selectable_list_checkbox.jsx +0 -32
  123. data/app/pb_kits/playbook/pb_selectable_list/docs/_selectable_list_radio.html.erb +0 -30
  124. data/app/pb_kits/playbook/pb_selectable_list/docs/_selectable_list_radio.jsx +0 -32
  125. data/app/pb_kits/playbook/pb_selectable_list/docs/example.yml +0 -12
  126. data/app/pb_kits/playbook/pb_selectable_list/docs/index.js +0 -2
  127. data/app/pb_kits/playbook/pb_selectable_list/selectable_list.rb +0 -24
  128. 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
  }