playbook_ui 6.4.2 → 6.6.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 (120) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +3 -4
  3. data/app/pb_kits/playbook/_playbook.scss +1 -0
  4. data/app/pb_kits/playbook/data/menu.yml +1 -0
  5. data/app/pb_kits/playbook/index.js +3 -0
  6. data/app/pb_kits/playbook/packs/examples.js +4 -1
  7. data/app/pb_kits/playbook/packs/site_styles/docs/_kit_doc.scss +6 -0
  8. data/app/pb_kits/playbook/pb_button/_button.jsx +1 -0
  9. data/app/pb_kits/playbook/pb_button/_button_mixins.scss +1 -1
  10. data/app/pb_kits/playbook/pb_button/docs/_button_default.jsx +3 -7
  11. data/app/pb_kits/playbook/pb_button/docs/_button_default_dark.jsx +3 -0
  12. data/app/pb_kits/playbook/pb_button/docs/_button_link.jsx +2 -0
  13. data/app/pb_kits/playbook/pb_button/docs/_button_loading.jsx +2 -0
  14. data/app/pb_kits/playbook/pb_circle_icon_button/docs/_circle_icon_button_link.html.erb +2 -1
  15. data/app/pb_kits/playbook/pb_date/date.rb +2 -1
  16. data/app/pb_kits/playbook/pb_date/docs/_date_default.html.erb +8 -1
  17. data/app/pb_kits/playbook/pb_date/docs/_date_timezone.html.erb +51 -0
  18. data/app/pb_kits/playbook/pb_date/docs/_date_timezone.md +6 -0
  19. data/app/pb_kits/playbook/pb_date/docs/_description.md +2 -0
  20. data/app/pb_kits/playbook/pb_date/docs/example.yml +1 -0
  21. data/app/pb_kits/playbook/pb_date_picker/_date_picker.html.erb +39 -0
  22. data/app/pb_kits/playbook/pb_date_picker/_date_picker.jsx +149 -0
  23. data/app/pb_kits/playbook/pb_date_picker/_date_picker.scss +33 -0
  24. data/app/pb_kits/playbook/pb_date_picker/date_picker.rb +85 -0
  25. data/app/pb_kits/playbook/pb_date_picker/date_picker_helper.js +165 -0
  26. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_allow_input.html.erb +4 -0
  27. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_allow_input.jsx +13 -0
  28. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_allow_input.md +1 -0
  29. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_dark.html.erb +4 -0
  30. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_dark.jsx +13 -0
  31. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_default.html.erb +1 -0
  32. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_default.jsx +12 -0
  33. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_default_date.html.erb +24 -0
  34. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_default_date.jsx +30 -0
  35. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_disabled.html.erb +43 -0
  36. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_disabled.jsx +48 -0
  37. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_error.html.erb +4 -0
  38. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_error.jsx +13 -0
  39. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_format.html.erb +19 -0
  40. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_format.jsx +25 -0
  41. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_format.md +1 -0
  42. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_hide_icon.html.erb +4 -0
  43. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_hide_icon.jsx +13 -0
  44. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_hooks.html.erb +37 -0
  45. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_hooks.jsx +37 -0
  46. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_hooks.md +1 -0
  47. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_input.html.erb +26 -0
  48. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_input.jsx +32 -0
  49. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_input.md +3 -0
  50. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_label.html.erb +9 -0
  51. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_label.jsx +17 -0
  52. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_label.md +1 -0
  53. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_min_max.html.erb +14 -0
  54. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_min_max.jsx +22 -0
  55. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_range.html.erb +4 -0
  56. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_range.jsx +13 -0
  57. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_year_range.html.erb +7 -0
  58. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_year_range.jsx +16 -0
  59. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_year_range.md +1 -0
  60. data/app/pb_kits/playbook/pb_date_picker/docs/_description.md +7 -0
  61. data/app/pb_kits/playbook/pb_date_picker/docs/example.yml +35 -0
  62. data/app/pb_kits/playbook/pb_date_picker/docs/index.js +14 -0
  63. data/app/pb_kits/playbook/pb_date_picker/sass_partials/_calendar_input_icon.scss +33 -0
  64. data/app/pb_kits/playbook/pb_date_picker/sass_partials/_day_styles.scss +53 -0
  65. data/app/pb_kits/playbook/pb_date_picker/sass_partials/_flatpickr_styles.scss +785 -0
  66. data/app/pb_kits/playbook/pb_date_picker/sass_partials/_header_styles.scss +108 -0
  67. data/app/pb_kits/playbook/pb_date_picker/sass_partials/_overrides.scss +44 -0
  68. data/app/pb_kits/playbook/pb_filter/_filter.scss +1 -1
  69. data/app/pb_kits/playbook/pb_form/docs/_form_form_with.html.erb +1 -0
  70. data/app/pb_kits/playbook/pb_form/docs/_form_form_with_validate.html.erb +1 -0
  71. data/app/pb_kits/playbook/pb_form/docs/_form_simple_form.html.erb +2 -0
  72. data/app/pb_kits/playbook/pb_form/docs/_form_simple_form_validate.html.erb +2 -0
  73. data/app/pb_kits/playbook/pb_form/form_builder.rb +1 -0
  74. data/app/pb_kits/playbook/pb_form/form_builder/date_picker_field.rb +20 -0
  75. data/app/pb_kits/playbook/pb_progress_step/progress_step.rb +2 -2
  76. data/app/pb_kits/playbook/pb_progress_step/progress_step_item.rb +0 -1
  77. data/app/pb_kits/playbook/pb_table/table.rb +3 -3
  78. data/app/pb_kits/playbook/pb_text_input/_text_input.html.erb +1 -0
  79. data/app/pb_kits/playbook/pb_text_input/_text_input.jsx +21 -17
  80. data/app/pb_kits/playbook/pb_text_input/_text_input.scss +17 -8
  81. data/app/pb_kits/playbook/pb_text_input/text_input.rb +2 -0
  82. data/app/pb_kits/playbook/pb_time/_time.html.erb +23 -17
  83. data/app/pb_kits/playbook/pb_time/_time.jsx +20 -11
  84. data/app/pb_kits/playbook/pb_time/_time.scss +16 -8
  85. data/app/pb_kits/playbook/pb_time/docs/_time_align.html.erb +18 -0
  86. data/app/pb_kits/playbook/pb_time/docs/_time_align.jsx +3 -3
  87. data/app/pb_kits/playbook/pb_time/docs/_time_dark.html.erb +70 -0
  88. data/app/pb_kits/playbook/pb_time/docs/_time_dark.jsx +1 -6
  89. data/app/pb_kits/playbook/pb_time/docs/_time_default.html.erb +47 -3
  90. data/app/pb_kits/playbook/pb_time/docs/_time_default.jsx +33 -4
  91. data/app/pb_kits/playbook/pb_time/docs/_time_sizes.html.erb +11 -0
  92. data/app/pb_kits/playbook/pb_time/docs/_time_sizes.jsx +19 -0
  93. data/app/pb_kits/playbook/pb_time/docs/_time_timestamp.html.erb +3 -1
  94. data/app/pb_kits/playbook/pb_time/docs/_time_timestamp.jsx +0 -7
  95. data/app/pb_kits/playbook/pb_time/docs/_time_timezone.html.erb +37 -0
  96. data/app/pb_kits/playbook/pb_time/docs/_time_timezone.jsx +12 -14
  97. data/app/pb_kits/playbook/pb_time/docs/example.yml +7 -2
  98. data/app/pb_kits/playbook/pb_time/docs/index.js +1 -0
  99. data/app/pb_kits/playbook/pb_time/time.rb +14 -2
  100. data/app/pb_kits/playbook/pb_typeahead/_typeahead.jsx +60 -0
  101. data/app/pb_kits/playbook/pb_typeahead/_typeahead.scss +20 -3
  102. data/app/pb_kits/playbook/pb_typeahead/components/Control.jsx +30 -0
  103. data/app/pb_kits/playbook/pb_typeahead/components/IndicatorsContainer.jsx +13 -0
  104. data/app/pb_kits/playbook/pb_typeahead/components/MenuList.jsx +12 -0
  105. data/app/pb_kits/playbook/pb_typeahead/components/MultiValue.jsx +51 -0
  106. data/app/pb_kits/playbook/pb_typeahead/components/Option.jsx +34 -0
  107. data/app/pb_kits/playbook/pb_typeahead/components/Placeholder.jsx +13 -0
  108. data/app/pb_kits/playbook/pb_typeahead/components/ValueContainer.jsx +13 -0
  109. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_default.jsx +22 -0
  110. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_pills.jsx +29 -0
  111. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_pills_async.jsx +84 -0
  112. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_pills_async_summary.jsx +45 -0
  113. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_pills_async_users.jsx +101 -0
  114. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_pills_summary.jsx +27 -0
  115. data/app/pb_kits/playbook/pb_typeahead/docs/example.yml +8 -2
  116. data/app/pb_kits/playbook/pb_typeahead/docs/index.js +4 -0
  117. data/app/pb_kits/playbook/tokens/_typography.scss +3 -3
  118. data/app/pb_kits/playbook/vendor.js +6 -0
  119. data/lib/playbook/version.rb +1 -1
  120. metadata +73 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 043d8ee7ffc205305e575f5a1b2dbc33a7044509a8907c19b1fdd2496df7995c
4
- data.tar.gz: 7c38d3f71179c5f552836a74d7bb85c84035a304d3190b90f3a5d0a9be043a46
3
+ metadata.gz: 7aacc8a728ea6fd1e2c6b488b60372046190c1b8bc352c574156b70504f4d467
4
+ data.tar.gz: 8ea081b09cab41543fb85684ff221923c771378dc36aca624ebe267da990c336
5
5
  SHA512:
6
- metadata.gz: 6c4ba1186d30795d4dc2a85ab19fe898b9ef043d1cb42e0db2aea26df4b7a0ea34ffd3e39f7272db76deb03533777d34798c3e1f9aac0a514d4d0133d3dbac2c
7
- data.tar.gz: f6a7e045c41272b2a13c2035fe0b2100d792ab969f2cfd968008646b2c0c1a51bcd5ee467c831a4aba06a24fdebf7c662e7845e8d0e4f41af6af6e2d67070b80
6
+ metadata.gz: 1378adf616298af5873b341f3097cb8c59619c566f9d98eebfe179514f1da519083cbc47b708193054123ad196c0bfff8d98b6be6e7a9b3828241b6bcf916a96
7
+ data.tar.gz: b66e0d31fce9704a5470168ba435a91ac5e82554e1957c1d5852f50dbc09b18536606b8461a647eaa9f49e8608a15b4d9b31d40da07ceef75de1098c17a4029f
data/README.md CHANGED
@@ -35,10 +35,9 @@ To run the tests, do `bin/test`. To launch a shell in the container run `make sh
35
35
 
36
36
  See [docs/upgrade-guide](./docs/upgrade-guide)
37
37
 
38
- ### Nitro & Releases
38
+ ### Releases
39
39
 
40
- * [Integrating Playbook Kits into Nitro Components](https://github.com/powerhome/playbook/wiki/Integrating-Playbook-Kits-into-Nitro-Components)
41
- * [Creating Releases](https://github.com/powerhome/playbook/wiki/Releasing-a-New-Version)
40
+ * [Playbook Releases](https://github.com/powerhome/playbook/wiki/Playbook-Releases)
42
41
 
43
42
  ### Development Environment
44
43
 
@@ -63,4 +62,4 @@ See [docs/upgrade-guide](./docs/upgrade-guide)
63
62
  5. When finished, inside of the directory you want to test with playbook, run `yarn unlink playbook-ui`.
64
63
  6. Inside of your Playbook repository, run `yarn unlink`.
65
64
 
66
- Keep in mind: Styles are brought in from playbook through the rails gem, so you will not be able to test scss updates with yarn linking.
65
+ Keep in mind: Styles are brought in from playbook through the rails gem, so you will not be able to test scss updates with yarn linking.
@@ -15,6 +15,7 @@
15
15
  @import 'pb_currency/currency';
16
16
  @import 'pb_dashboard_value/dashboard_value';
17
17
  @import 'pb_date/date';
18
+ @import 'pb_date_picker/date_picker';
18
19
  @import 'pb_date_range_inline/date_range_inline';
19
20
  @import 'pb_date_range_stacked/date_range_stacked';
20
21
  @import 'pb_date_stacked/date_stacked';
@@ -25,6 +25,7 @@ kits:
25
25
  - fixed_confirmation_toast
26
26
  - flex
27
27
  - forms:
28
+ - date_picker
28
29
  - file_upload
29
30
  - form
30
31
  - form_pill
@@ -14,6 +14,7 @@ export Contact from './pb_contact/_contact.jsx'
14
14
  export Currency from './pb_currency/_currency.jsx'
15
15
  export DashboardValue from './pb_dashboard_value/_dashboard_value.jsx'
16
16
  export Date from './pb_date/_date.jsx'
17
+ export DatePicker from './pb_date_picker/_date_picker.jsx'
17
18
  export DateRangeInline from './pb_date_range_inline/_date_range_inline.jsx'
18
19
  export DateRangeStacked from './pb_date_range_stacked/_date_range_stacked.jsx'
19
20
  export DateStacked from './pb_date_stacked/_date_stacked.jsx'
@@ -79,6 +80,7 @@ export Title from './pb_title/_title.jsx'
79
80
  export TitleCount from './pb_title_count/_title_count.jsx'
80
81
  export TitleDetail from './pb_title_detail/_title_detail.jsx'
81
82
  export Toggle from './pb_toggle/_toggle.jsx'
83
+ export Typeahead from './pb_typeahead/_typeahead.jsx'
82
84
  export User from './pb_user/_user.jsx'
83
85
  export UserBadge from './pb_user_badge/_user_badge.jsx'
84
86
  export WeekdayStacked from './pb_weekday_stacked/_weekday_stacked.jsx'
@@ -91,6 +93,7 @@ export dashboardValueSettings from './pb_dashboard_value/dashboardValueSettings'
91
93
 
92
94
  // Other JS/Plugins
93
95
  export pbChart from './plugins/pb_chart.js'
96
+ export datePickerHelper from './pb_date_picker/date_picker_helper.js'
94
97
  export PbTypeahead from './pb_typeahead'
95
98
  export PbPopover from './pb_popover'
96
99
  export PbTable from './pb_table'
@@ -28,6 +28,7 @@ import * as Contact from 'pb_contact/docs'
28
28
  import * as Currency from 'pb_currency/docs'
29
29
  import * as DashboardValue from 'pb_dashboard_value/docs'
30
30
  import * as Date from 'pb_date/docs'
31
+ import * as DatePicker from 'pb_date_picker/docs'
31
32
  import * as DateRangeInline from 'pb_date_range_inline/docs'
32
33
  import * as DateRangeStacked from 'pb_date_range_stacked/docs'
33
34
  import * as DateStacked from 'pb_date_stacked/docs'
@@ -87,6 +88,7 @@ import * as TimeRangeInline from 'pb_time_range_inline/docs'
87
88
  import * as Title from 'pb_title/docs'
88
89
  import * as TitleCount from 'pb_title_count/docs'
89
90
  import * as TitleDetail from 'pb_title_detail/docs'
91
+ import * as Typeahead from 'pb_typeahead/docs'
90
92
  import * as Toggle from 'pb_toggle/docs'
91
93
  import * as User from 'pb_user/docs'
92
94
  import * as UserBadge from 'pb_user_badge/docs'
@@ -108,6 +110,7 @@ WebpackerReact.setup({
108
110
  ...Currency,
109
111
  ...DashboardValue,
110
112
  ...Date,
113
+ ...DatePicker,
111
114
  ...DateRangeInline,
112
115
  ...DateRangeStacked,
113
116
  ...DateStacked,
@@ -167,9 +170,9 @@ WebpackerReact.setup({
167
170
  ...Title,
168
171
  ...TitleCount,
169
172
  ...TitleDetail,
173
+ ...Typeahead,
170
174
  ...Toggle,
171
175
  ...User,
172
176
  ...UserBadge,
173
177
  ...WeekdayStacked,
174
178
  })
175
-
@@ -52,6 +52,12 @@
52
52
  top: 0;
53
53
  left: 0;
54
54
  }
55
+
56
+ code {
57
+ background-color: rgba($text_lt_lighter, 0.35);
58
+ border-radius: 5px;
59
+ padding: 2px;
60
+ }
55
61
  }
56
62
 
57
63
  .pb--codeControls {
@@ -97,6 +97,7 @@ const Button = (props: ButtonPropTypes) => {
97
97
  <span className="pb_button_content">
98
98
  <If condition={icon !== null}>
99
99
  <i className={`pb_icon_kit far fa-${icon} fa-fw`} />
100
+ {' '}
100
101
  </If>
101
102
  <span>{text || children}</span>
102
103
  </span>
@@ -148,7 +148,7 @@ $pb_button_border_width: 0px;
148
148
 
149
149
  // Dark Link =============
150
150
  @mixin pb_button_link_dark {
151
- @include pb_button($transparent, $primary_action);
151
+ @include pb_button($transparent, $white);
152
152
 
153
153
  @media (hover:hover) {
154
154
  &:hover {
@@ -4,26 +4,22 @@ import { Button } from '../../'
4
4
  const ButtonDefault = () => (
5
5
  <div>
6
6
  <Button
7
- dark
8
- marginRight="xl"
9
7
  onClick={() => alert('button clicked!')}
10
8
  text="Button Primary"
11
9
  />
10
+ {' '}
12
11
  <Button
13
12
  onClick={() => alert('button clicked!')}
14
13
  text="Button Secondary"
15
14
  variant="secondary"
16
15
  />
16
+ {' '}
17
17
  <Button
18
18
  onClick={() => alert('button clicked!')}
19
19
  text="Button Link"
20
20
  variant="link"
21
21
  />
22
- <Button
23
- disabled
24
- onClick={() => alert('button clicked!')}
25
- text="Button Disabled"
26
- />
22
+ {' '}
27
23
  <Button
28
24
  disabled
29
25
  onClick={() => alert('button clicked!')}
@@ -7,16 +7,19 @@ const ButtonDefaultDark = () => (
7
7
  dark
8
8
  text="Button Primary"
9
9
  />
10
+ {' '}
10
11
  <Button
11
12
  dark
12
13
  text="Button Secondary"
13
14
  variant="secondary"
14
15
  />
16
+ {' '}
15
17
  <Button
16
18
  dark
17
19
  text="Button Link"
18
20
  variant="link"
19
21
  />
22
+ {' '}
20
23
  <Button
21
24
  dark
22
25
  disabled
@@ -7,11 +7,13 @@ const ButtonLink = () => (
7
7
  link="https://google.com"
8
8
  text="A Tag Button"
9
9
  />
10
+ {' '}
10
11
  <Button
11
12
  link="https://google.com"
12
13
  newWindow
13
14
  text="Open in New Window"
14
15
  />
16
+ {' '}
15
17
  <Button
16
18
  disabled
17
19
  link="https://google.com"
@@ -7,11 +7,13 @@ const ButtonLoading = () => (
7
7
  loading
8
8
  text="Button Primary"
9
9
  />
10
+ {' '}
10
11
  <Button
11
12
  loading
12
13
  text="Button Secondary"
13
14
  variant="secondary"
14
15
  />
16
+ {' '}
15
17
  <Button
16
18
  loading
17
19
  text="A Tag Button Disabled"
@@ -3,8 +3,9 @@
3
3
  icon: "search",
4
4
  link: "https://google.com"
5
5
  }) %>
6
+ <br/>
6
7
  <%= pb_rails("circle_icon_button", props: {
7
- variant: "primary",
8
+ variant: "secondary",
8
9
  icon: "window",
9
10
  link: "https://google.com",
10
11
  new_window: true
@@ -13,6 +13,7 @@ module Playbook
13
13
  prop :size, type: Playbook::Props::Enum,
14
14
  values: %w[lg sm xs],
15
15
  default: "sm"
16
+ prop :timezone, default: "America/New_York"
16
17
 
17
18
  def classname
18
19
  generate_classname("pb_date_kit")
@@ -33,7 +34,7 @@ module Playbook
33
34
  private
34
35
 
35
36
  def pb_date_time
36
- Playbook::PbKit::PbDateTime.new(date)
37
+ Playbook::PbKit::PbDateTime.new(date, timezone)
37
38
  end
38
39
  end
39
40
  end
@@ -12,6 +12,13 @@
12
12
  <br>
13
13
 
14
14
  <%= pb_rails("date", props: {
15
- date: "2012-08-02T15:49:29Z",
15
+ date: DateTime.now,
16
+ timezone: "Asia/Tokyo"
17
+ }) %>
18
+
19
+ <br>
20
+
21
+ <%= pb_rails("date", props: {
22
+ date: Date.new(2010, 11, 12),
16
23
  size: "xs"
17
24
  }) %>
@@ -0,0 +1,51 @@
1
+ <%= pb_rails("caption", props: { text: "East Coast (Default)"}) %>
2
+ <%= pb_rails("date", props: {
3
+ date: DateTime.now,
4
+ timezone: "America/New_York"
5
+ }) %>
6
+
7
+ <br>
8
+
9
+ <%= pb_rails("caption", props: { text: "West Coast"}) %>
10
+ <%= pb_rails("date", props: {
11
+ date: DateTime.now,
12
+ timezone: "America/Los_Angeles"
13
+ }) %>
14
+
15
+ <br>
16
+
17
+ <%= pb_rails("caption", props: { text: "Toyko, Japan"}) %>
18
+ <%= pb_rails("date", props: {
19
+ date: DateTime.now,
20
+ timezone: "Asia/Tokyo"
21
+ }) %>
22
+
23
+ <br>
24
+
25
+ <%= pb_rails("caption", props: { text: "Anti-pattern example"}) %>
26
+
27
+ <%= pb_rails("date", props: {
28
+ date: Date.today,
29
+ timezone: "Australia/Sydney"
30
+ }) %>
31
+ <%= pb_rails("body", props: { text: "Date.today ignores Timezone"}) %>
32
+
33
+ <br>
34
+
35
+ <%= pb_rails("caption", props: { text: "DateTime respects Timezone"}) %>
36
+
37
+ <%= pb_rails("date", props: {
38
+ date: DateTime.now,
39
+ timezone: "Australia/Sydney"
40
+ }) %>
41
+
42
+ <%= pb_rails("body", props: { text: "'.now' in Australia is tomorrow (if you're EST after 10am)"}) %>
43
+
44
+ <br>
45
+
46
+ <%= pb_rails("caption", props: { text: "String Dates"}) %>
47
+ <%= pb_rails("date", props: {
48
+ date: "2012-08-02T00:49:29Z",
49
+ }) %>
50
+
51
+ <%= pb_rails("body", props: { text: "Defaults to UTC, then changes due to EST Timezone."}) %>
@@ -0,0 +1,6 @@
1
+ Depending on the data you send to the `date` prop you might have unexpected results due to ruby `Date` and `DateTime` classes.
2
+
3
+ Don't care about timezones? Use `Date`.
4
+
5
+ If you need a date that recognizes a timezone, especially when paired with the [Time kit](/kits/time), leverage `DateTime`.
6
+
@@ -1 +1,3 @@
1
1
  Use to display the date. Year will not display if it is the current year.
2
+
3
+ `DateTime` defaults to the "America/New_York" timezone. `Date` ignores timezone.
@@ -2,6 +2,7 @@ examples:
2
2
 
3
3
  rails:
4
4
  - date_default: Default
5
+ - date_timezone: Timezones
5
6
 
6
7
 
7
8
  react:
@@ -0,0 +1,39 @@
1
+ <%= content_tag(:div,
2
+ aria: object.aria,
3
+ class: object.classname + object.error_class,
4
+ data: object.data,
5
+ id: object.id) do %>
6
+ <div class="input_wrapper">
7
+ <%= pb_rails("text_input", props: {
8
+ aria: object.input_aria,
9
+ autocomplete: false,
10
+ dark: object.dark,
11
+ data: object.input_data,
12
+ disabled: object.disable_input,
13
+ error: object.error,
14
+ id: object.picker_id,
15
+ label: object.hide_label ? nil : object.label,
16
+ name: object.name,
17
+ placeholder: object.placeholder,
18
+ required: object.required,
19
+ type: object.type
20
+ }) %>
21
+ <% if !object.hide_icon %>
22
+ <div
23
+ class="<%= object.icon_wrapper_class %>"
24
+ id="cal-icon-<%= object.picker_id %>"
25
+ >
26
+ <%= pb_rails("icon", props: {
27
+ classname: "cal_icon",
28
+ icon: "calendar-alt"
29
+ }) %>
30
+ </div>
31
+ <% end %>
32
+ </div>
33
+
34
+ <%= javascript_tag do %>
35
+ window.addEventListener("DOMContentLoaded", () => {
36
+ datePickerHelper(<%= object.date_picker_config %>)
37
+ })
38
+ <% end %>
39
+ <% end %>
@@ -0,0 +1,149 @@
1
+ /* @flow */
2
+
3
+ import React, { useEffect } from 'react'
4
+ import classnames from 'classnames'
5
+ import { buildAriaProps, buildCss, buildDataProps } from '../utilities/props'
6
+ import { globalProps } from '../utilities/globalProps.js'
7
+ import { Icon, TextInput } from '../'
8
+ import datePickerHelper from './date_picker_helper.js'
9
+
10
+ type DatePickerProps = {
11
+ allowInput?: Boolean,
12
+ aria?: object,
13
+ className?: String,
14
+ dark?: Boolean,
15
+ data?: object,
16
+ defaultDate?: String,
17
+ disableDate?: Array,
18
+ disableInput?: Boolean,
19
+ disableRange?: Array,
20
+ disableWeekdays?: Array,
21
+ error?: String,
22
+ format?: String,
23
+ hideIcon?: Boolean,
24
+ hideLabel?: Boolean,
25
+ id?: String,
26
+ inputAria?: object,
27
+ inputData?: object,
28
+ label?: String,
29
+ maxDate: String,
30
+ minDate: String,
31
+ mode?: String,
32
+ name: String,
33
+ onChange: (String) => void,
34
+ pickerId?: String,
35
+ placeholder?: String,
36
+ type?: String,
37
+ yearRange?: Array,
38
+ }
39
+ const DatePicker = (props: DatePickerProps) => {
40
+ const {
41
+ allowInput = false,
42
+ aria = {},
43
+ className,
44
+ dark = false,
45
+ data = {},
46
+ defaultDate = '',
47
+ disableDate = null,
48
+ disableInput,
49
+ disableRange = null,
50
+ disableWeekdays = null,
51
+ error,
52
+ format = 'm/d/Y',
53
+ hideIcon = false,
54
+ hideLabel = false,
55
+ id,
56
+ inputAria,
57
+ inputData,
58
+ label = 'Date Picker',
59
+ maxDate,
60
+ minDate,
61
+ mode = 'single',
62
+ name,
63
+ onChange = () => {},
64
+ pickerId,
65
+ placeholder,
66
+ type,
67
+ yearRange = [ 1900, 2100 ],
68
+ } = props
69
+
70
+ const ariaProps = buildAriaProps(aria)
71
+ const dataProps = buildDataProps(data)
72
+ const classes = classnames(
73
+ buildCss('pb_date_picker_kit'),
74
+ className,
75
+ globalProps(props),
76
+ error ? 'error' : null,
77
+ )
78
+
79
+ useEffect(() => {
80
+ datePickerHelper({
81
+ allowInput: allowInput,
82
+ defaultDate: defaultDate,
83
+ disableDate: disableDate,
84
+ disableRange: disableRange,
85
+ disableWeekdays: disableWeekdays,
86
+ format: format,
87
+ hideIcon: hideIcon,
88
+ maxDate: maxDate,
89
+ minDate: minDate,
90
+ mode: mode,
91
+ pickerId: pickerId,
92
+ yearRange: yearRange,
93
+ })
94
+ }, [])
95
+
96
+ const iconWrapperClass = () => {
97
+ let base = 'cal_icon_wrapper'
98
+ if (dark){
99
+ base += ' dark'
100
+ }
101
+ if (hideLabel){
102
+ base += ' no_label_shift'
103
+ }
104
+ if (error){
105
+ base += ' error'
106
+ }
107
+ return base
108
+ }
109
+
110
+ return (
111
+ <div
112
+ {...ariaProps}
113
+ {...dataProps}
114
+ className={classes}
115
+ id={id}
116
+ >
117
+ {className}
118
+ <div className="input_wrapper">
119
+ <TextInput
120
+ aria={inputAria}
121
+ autoComplete="off"
122
+ dark={dark}
123
+ data={inputData}
124
+ disabled={disableInput}
125
+ error={error}
126
+ id={pickerId}
127
+ label={hideLabel ? null : label}
128
+ name={name}
129
+ onChange={onChange}
130
+ placeholder={placeholder}
131
+ type={type}
132
+ />
133
+ <If condition={!hideIcon}>
134
+ <div
135
+ className={iconWrapperClass()}
136
+ id={`cal-icon-${pickerId}`}
137
+ >
138
+ <Icon
139
+ className="cal_icon"
140
+ icon="calendar-alt"
141
+ />
142
+ </div>
143
+ </If>
144
+ </div>
145
+ </div>
146
+ )
147
+ }
148
+
149
+ export default DatePicker