playbook_ui 5.5.0 → 5.5.1.pre.alpha1

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 (43) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/_playbook.scss +1 -0
  3. data/app/pb_kits/playbook/data/menu.yml +1 -0
  4. data/app/pb_kits/playbook/index.js +2 -0
  5. data/app/pb_kits/playbook/packs/examples.js +2 -0
  6. data/app/pb_kits/playbook/pb_body/_body.jsx +2 -2
  7. data/app/pb_kits/playbook/pb_button/_button.jsx +2 -0
  8. data/app/pb_kits/playbook/pb_date_picker/_date_picker.html.erb +36 -0
  9. data/app/pb_kits/playbook/pb_date_picker/_date_picker.jsx +98 -0
  10. data/app/pb_kits/playbook/pb_date_picker/_date_picker.scss +59 -0
  11. data/app/pb_kits/playbook/pb_date_picker/date_picker.rb +38 -0
  12. data/app/pb_kits/playbook/pb_date_picker/date_picker_helper.js +91 -0
  13. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_default.html.erb +1 -0
  14. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_default.jsx +12 -0
  15. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_default_date.html.erb +24 -0
  16. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_default_date.jsx +30 -0
  17. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_disabled.html.erb +43 -0
  18. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_disabled.jsx +48 -0
  19. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_error.html.erb +4 -0
  20. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_error.jsx +13 -0
  21. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_format.html.erb +19 -0
  22. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_format.jsx +25 -0
  23. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_label.html.erb +4 -0
  24. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_label.jsx +13 -0
  25. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_min_max.html.erb +14 -0
  26. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_min_max.jsx +22 -0
  27. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_range.html.erb +4 -0
  28. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_range.jsx +13 -0
  29. data/app/pb_kits/playbook/pb_date_picker/docs/example.yml +23 -0
  30. data/app/pb_kits/playbook/pb_date_picker/docs/index.js +8 -0
  31. data/app/pb_kits/playbook/pb_date_picker/index.js +11 -0
  32. data/app/pb_kits/playbook/pb_filter/docs/_filter_default.html.erb +1 -0
  33. data/app/pb_kits/playbook/pb_form/docs/_form_form_with.html.erb +1 -0
  34. data/app/pb_kits/playbook/pb_form/docs/_form_simple_form.html.erb +3 -1
  35. data/app/pb_kits/playbook/pb_form/form_builder.rb +1 -0
  36. data/app/pb_kits/playbook/pb_form/form_builder/date_picker_field.rb +15 -0
  37. data/app/pb_kits/playbook/pb_time_range_inline/_time_range_inline.html.erb +2 -2
  38. data/app/pb_kits/playbook/pb_time_range_inline/_time_range_inline.jsx +24 -10
  39. data/app/pb_kits/playbook/pb_time_range_inline/_time_range_inline.scss +3 -1
  40. data/app/pb_kits/playbook/pb_time_range_inline/time_range_inline.rb +6 -0
  41. data/app/pb_kits/playbook/vendor.js +4 -0
  42. data/lib/playbook/version.rb +1 -1
  43. metadata +29 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4e2f90404b2cb31a01901577679b4a20f66455a7eff2a5a903bbb473a0473853
4
- data.tar.gz: e5471a16590847efafd3c9cb8d9899944afab8e1efd70bd5fb1e7c446913d331
3
+ metadata.gz: fa66f8cfafaeec93584b7752d2346a2254f856a2994681b09b50d11af8c3ec80
4
+ data.tar.gz: bd0dc3b635736355aa8a08e6d5dd27cca89a5cc550852d248eac2603684b58f2
5
5
  SHA512:
6
- metadata.gz: d43fc99fe13e555b46b98b3dc069b860fddd625471421f38fbee3f8557eb5c8d8fc202cab6670db285e5c306f450f764d230d49678e98c2407b02e77935b431c
7
- data.tar.gz: 7f0cfdaf3777fa7fcd09da1e2b5554f50ec18b07b5183fc5484929c1c415005437423af11756918cfa80ed72f85f5095483710c08ce3e3ece9b5a68da581c76d
6
+ metadata.gz: 13b87a0f669639bb1921b01688146fcea0e13aa08f1b6c94b214a80d3448a9220081b8df7b9e6610f5820dc4a8e591728d789678caca7ac637f719a0a86b0766
7
+ data.tar.gz: 4f213af2da0881139ed2689d9cd384757e34fb8a7780963dd139fbcb1b9a5562ba2eeff4fdda10750a4d95eca7694936887fdcddff65a983b09171594df19ed5
@@ -14,6 +14,7 @@
14
14
  @import 'pb_currency/currency';
15
15
  @import 'pb_dashboard_value/dashboard_value';
16
16
  @import 'pb_date/date';
17
+ @import 'pb_date_picker/date_picker';
17
18
  @import 'pb_date_range_inline/date_range_inline';
18
19
  @import 'pb_date_range_stacked/date_range_stacked';
19
20
  @import 'pb_date_stacked/date_stacked';
@@ -24,6 +24,7 @@ kits:
24
24
  - fixed_confirmation_toast
25
25
  - flex
26
26
  - forms:
27
+ - date_picker
27
28
  - file_upload
28
29
  - form
29
30
  - form_pill
@@ -13,6 +13,7 @@ export Contact from './pb_contact/_contact.jsx'
13
13
  export Currency from './pb_currency/_currency.jsx'
14
14
  export DashboardValue from './pb_dashboard_value/_dashboard_value.jsx'
15
15
  export Date from './pb_date/_date.jsx'
16
+ export DatePicker from 'pb_date_picker/_date_picker.jsx'
16
17
  export DateRangeInline from './pb_date_range_inline/_date_range_inline.jsx'
17
18
  export DateRangeStacked from './pb_date_range_stacked/_date_range_stacked.jsx'
18
19
  export DateStacked from './pb_date_stacked/_date_stacked.jsx'
@@ -90,6 +91,7 @@ export dashboardValueSettings from './pb_dashboard_value/dashboardValueSettings'
90
91
 
91
92
  // Other JS/Plugins
92
93
  export pbChart from './plugins/pb_chart.js'
94
+ export datePickerHelper from './pb_date_picker/date_picker_helper.js'
93
95
  export PbTypeahead from './pb_typeahead'
94
96
  export PbPopover from './pb_popover'
95
97
  export PbTable from './pb_table'
@@ -27,6 +27,7 @@ import * as Contact from 'pb_contact/docs'
27
27
  import * as Currency from 'pb_currency/docs'
28
28
  import * as DashboardValue from 'pb_dashboard_value/docs'
29
29
  import * as Date from 'pb_date/docs'
30
+ import * as DatePicker from 'pb_date_picker/docs'
30
31
  import * as DateRangeInline from 'pb_date_range_inline/docs'
31
32
  import * as DateRangeStacked from 'pb_date_range_stacked/docs'
32
33
  import * as DateStacked from 'pb_date_stacked/docs'
@@ -107,6 +108,7 @@ WebpackerReact.setup({
107
108
  ...Currency,
108
109
  ...DashboardValue,
109
110
  ...Date,
111
+ ...DatePicker,
110
112
  ...DateRangeInline,
111
113
  ...DateRangeStacked,
112
114
  ...DateStacked,
@@ -40,11 +40,11 @@ const Body = (props: BodyProps) => {
40
40
  const ariaProps = buildAriaProps(aria)
41
41
  const dataProps = buildDataProps(data)
42
42
  const classes = classnames(
43
- className,
44
43
  buildCss('pb_body_kit', color, status, {
45
44
  dark: dark,
46
45
  }),
47
- spacing(props)
46
+ spacing(props),
47
+ className
48
48
  )
49
49
  const Tag = `${tag}`
50
50
 
@@ -72,6 +72,7 @@ const Button = (props: ButtonPropTypes) => {
72
72
  const {
73
73
  children,
74
74
  className,
75
+ disabled,
75
76
  icon = null,
76
77
  id,
77
78
  loading = false,
@@ -120,6 +121,7 @@ const Button = (props: ButtonPropTypes) => {
120
121
  <button
121
122
  {...buttonAria}
122
123
  className={css}
124
+ disabled={disabled}
123
125
  id={id}
124
126
  onClick={onClick}
125
127
  type={htmlType}
@@ -0,0 +1,36 @@
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
+ <%= pb_rails("caption", props: { text: object.label }) %>
7
+ <div class="input_wrapper">
8
+ <input
9
+ autocomplete="off"
10
+ id="<%= object.picker_id %>"
11
+ />
12
+ <% if object.error %>
13
+ <%= pb_rails("body", props: {
14
+ status: "negative",
15
+ text: object.error
16
+ }) %>
17
+ <% end %>
18
+ </div>
19
+
20
+ <%= javascript_tag do %>
21
+ document.addEventListener("DOMContentLoaded", () => {
22
+ datePickerHelper({
23
+ defaultDate: "<%= object.default_date %>",
24
+ disableDate: <%=raw object.disable_date %>,
25
+ disableRange: <%=raw object.disable_range.to_json %>,
26
+ disableWeekdays: <%=raw object.disable_weekdays %>,
27
+ format: "<%= object.format %>",
28
+ maxDate: "<%= object.max_date %>",
29
+ minDate: "<%= object.min_date %>",
30
+ mode: "<%= object.mode %>",
31
+ pickerId: "<%= object.picker_id %>",
32
+ propModel: "rails"
33
+ })
34
+ })
35
+ <% end %>
36
+ <% end %>
@@ -0,0 +1,98 @@
1
+ /* @flow */
2
+
3
+ import React, { useEffect } from 'react'
4
+ import classnames from 'classnames'
5
+ import { buildAriaProps, buildCss, buildDataProps } from '../utilities/props'
6
+ import { spacing } from '../utilities/spacing.js'
7
+ import flatpickr from 'flatpickr'
8
+ import { Body, Caption } from '../'
9
+ import datePickerHelper from './date_picker_helper.js'
10
+
11
+ type DatePickerProps = {
12
+ aria?: object,
13
+ className?: String,
14
+ data?: object,
15
+ defaultDate?: String,
16
+ disableDate?: Array,
17
+ disableRange?: Array,
18
+ disableWeekdays?: Array,
19
+ error?: String,
20
+ format?: String,
21
+ id?: String,
22
+ label?: String,
23
+ maxDate: String,
24
+ minDate: String,
25
+ mode?: String,
26
+ pickerId?: String,
27
+ }
28
+ const DatePicker = (props: DatePickerProps) => {
29
+ const {
30
+ aria = {},
31
+ className,
32
+ data = {},
33
+ defaultDate = '',
34
+ disableDate = null,
35
+ disableRange = null,
36
+ disableWeekdays = null,
37
+ error,
38
+ format = 'm/d/Y',
39
+ id,
40
+ label = 'Date Picker',
41
+ maxDate,
42
+ minDate,
43
+ mode = 'single',
44
+ pickerId,
45
+ } = props
46
+
47
+ const ariaProps = buildAriaProps(aria)
48
+ const dataProps = buildDataProps(data)
49
+ const classes = classnames(
50
+ buildCss('pb_date_picker'),
51
+ className,
52
+ spacing(props),
53
+ error ? 'error' : null,
54
+ )
55
+
56
+ useEffect(() => {
57
+ datePickerHelper({
58
+ defaultDate: defaultDate,
59
+ disableDate: disableDate,
60
+ disableRange: disableRange,
61
+ disableWeekdays: disableWeekdays,
62
+ format: format,
63
+ maxDate: maxDate,
64
+ minDate: minDate,
65
+ mode: mode,
66
+ pickerId: pickerId,
67
+ propModel: 'React',
68
+ })
69
+ }, [])
70
+
71
+ return (
72
+ <div
73
+ {...ariaProps}
74
+ {...dataProps}
75
+ className={classes}
76
+ id={id}
77
+ >
78
+ {className}
79
+ <Caption
80
+ text={label}
81
+ />
82
+ <div className="input_wrapper">
83
+ <input
84
+ autoComplete="off"
85
+ id={pickerId}
86
+ />
87
+ <If condition={error}>
88
+ <Body
89
+ status="negative"
90
+ text={error}
91
+ />
92
+ </If>
93
+ </div>
94
+ </div>
95
+ )
96
+ }
97
+
98
+ export default DatePicker
@@ -0,0 +1,59 @@
1
+ @import "../../../../node_modules/flatpickr/dist/flatpickr.min.css";
2
+ @import "../pb_textarea/textarea_mixin";
3
+ @import "../pb_title/title_mixin";
4
+ @import "../tokens/colors";
5
+ @import "../pb_caption/caption_mixin";
6
+
7
+ [class^=pb_date_picker] {
8
+ // input styles
9
+ [class^=pb_caption_kit] {
10
+ margin-bottom: $space_xs;
11
+ display: block;
12
+ }
13
+ .input_wrapper {
14
+ margin-bottom: $space_sm;
15
+
16
+ .flatpickr-wrapper {
17
+ display: block;
18
+ input::placeholder {
19
+ @include pb_body_light;
20
+ }
21
+
22
+ > input:first-child {
23
+ @include pb_textarea_light;
24
+ @include pb_title_4;
25
+ overflow: hidden;
26
+ }
27
+
28
+ input:focus, input:-webkit-autofill:focus {
29
+ @include pb_textarea_focus;
30
+ -webkit-box-shadow: 0 0 0px 1000px $focus_input_light inset;
31
+ transition: background-color 5000s ease-in-out 0s;
32
+ }
33
+ }
34
+ }
35
+
36
+ &.error {
37
+ [class^=pb_body_kit] {
38
+ margin-top: $space_xs / 2;
39
+ }
40
+ .flatpickr-wrapper {
41
+ > input:first-child {
42
+ border-color: $error;
43
+ }
44
+ }
45
+ }
46
+ }
47
+
48
+ // date-picker styles
49
+
50
+ div.flatpickr-weekdays {
51
+ margin-top: 5px;
52
+ }
53
+ span.flatpickr-weekday {
54
+ @include caption;
55
+ }
56
+
57
+ .pb_popover_body {
58
+ overflow: visible !important;
59
+ }
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Playbook
4
+ module PbDatePicker
5
+ class DatePicker
6
+ include Playbook::Props
7
+
8
+ partial "pb_date_picker/date_picker"
9
+
10
+ prop :default_date, type: Playbook::Props::String,
11
+ default: ""
12
+ prop :disable_date, type: Playbook::Props::Array,
13
+ default: []
14
+ prop :disable_range, type: Playbook::Props::Array,
15
+ default: []
16
+ prop :disable_weekdays, type: Playbook::Props::Array,
17
+ default: []
18
+ prop :error, type: Playbook::Props::String
19
+ prop :format, type: Playbook::Props::String,
20
+ default: "m/d/Y"
21
+ prop :label, type: Playbook::Props::String,
22
+ default: "Date Picker"
23
+ prop :max_date, type: Playbook::Props::String
24
+ prop :min_date, type: Playbook::Props::String
25
+ prop :mode, type: Playbook::Props::String,
26
+ default: "single"
27
+ prop :picker_id, type: Playbook::Props::String
28
+
29
+ def classname
30
+ generate_classname("pb_date_picker")
31
+ end
32
+
33
+ def error_class
34
+ error ? "error" : ""
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,91 @@
1
+ import flatpickr from 'flatpickr'
2
+
3
+ const datePickerHelper = (config) => {
4
+ const {
5
+ defaultDate,
6
+ disableDate,
7
+ disableRange,
8
+ disableWeekdays,
9
+ format,
10
+ maxDate,
11
+ minDate,
12
+ mode,
13
+ pickerId,
14
+ propModel,
15
+ } = config
16
+
17
+ const defaultDateGetter = () => {
18
+ if (defaultDate !== '') {
19
+ if (propModel === 'rails' && defaultDate.includes('[') == true) {
20
+ return JSON.parse(defaultDate.replace(/&quot;/g, '"'))
21
+ } else if (defaultDate === 'blank') {
22
+ return ''
23
+ } else {
24
+ return defaultDate
25
+ }
26
+ }
27
+ if (mode === 'single' && defaultDate === '') {
28
+ return new Date()
29
+ } else if (mode === 'range' && defaultDate === '') {
30
+ const today = new Date()
31
+ const tomorrow = new Date(today)
32
+ tomorrow.setDate(tomorrow.getDate() + 1)
33
+ return [today, tomorrow]
34
+ }
35
+ }
36
+ const disabledParser = () => {
37
+ if (disableDate && disableDate.length > 0) {
38
+ return disableDate
39
+ } else if (disableRange && disableRange.length > 0) {
40
+ return disableRange
41
+ } else {
42
+ return []
43
+ }
44
+ }
45
+
46
+ flatpickr(`#${pickerId}`, {
47
+ allowInput: true,
48
+ dateFormat: format,
49
+ defaultDate: defaultDateGetter(),
50
+ disable: disableWeekdays && disableWeekdays.length > 0 ? [
51
+ (date) => {
52
+ const weekdayObj = {
53
+ Sunday: 0,
54
+ Monday: 1,
55
+ Tuesday: 2,
56
+ Wednesday: 3,
57
+ Thursday: 4,
58
+ Friday: 5,
59
+ Saturday: 6,
60
+ }
61
+ return (
62
+ // try to refactor with for loop
63
+ date.getDay() === weekdayObj[disableWeekdays[0]] ||
64
+ date.getDay() === weekdayObj[disableWeekdays[1]] ||
65
+ date.getDay() === weekdayObj[disableWeekdays[2]] ||
66
+ date.getDay() === weekdayObj[disableWeekdays[3]] ||
67
+ date.getDay() === weekdayObj[disableWeekdays[4]] ||
68
+ date.getDay() === weekdayObj[disableWeekdays[5]] ||
69
+ date.getDay() === weekdayObj[disableWeekdays[6]]
70
+ )
71
+ },
72
+ ] : disabledParser(),
73
+ maxDate: maxDate,
74
+ minDate: minDate,
75
+ mode: mode,
76
+ static: true,
77
+ })
78
+
79
+ document.querySelector(`#${pickerId}`).addEventListener('input', (e) => {
80
+ const picker = document.querySelector(`#${pickerId}`)._flatpickr
81
+ picker.input.setAttribute('value', e.target.value)
82
+ const variant = picker.config.mode
83
+ if (variant === 'single' && e.target.value.split('').length === 10) {
84
+ picker.setDate(e.target.value)
85
+ } else if (variant === 'range' && e.target.value.split('').length === 24) {
86
+ picker.setDate(e.target.value)
87
+ }
88
+ })
89
+ }
90
+
91
+ export default datePickerHelper
@@ -0,0 +1 @@
1
+ <%= pb_rails("date_picker", props: { picker_id: "date-picker-default" }) %>
@@ -0,0 +1,12 @@
1
+ import React from 'react'
2
+ import { DatePicker } from '../../'
3
+
4
+ const DatePickerDefault = () => (
5
+ <div>
6
+ <DatePicker
7
+ pickerId="date-picker-default"
8
+ />
9
+ </div>
10
+ )
11
+
12
+ export default DatePickerDefault
@@ -0,0 +1,24 @@
1
+ <%= pb_rails("date_picker", props: {
2
+ default_date: "07/31/2020",
3
+ label: "Default Date String",
4
+ picker_id: "date-picker-default-date1"
5
+ }) %>
6
+
7
+ <%= pb_rails("date_picker", props: {
8
+ default_date: (Date.today + 2).httpdate,
9
+ label: "Default Date Dynamic",
10
+ picker_id: "date-picker-default-date2"
11
+ }) %>
12
+
13
+ <%= pb_rails("date_picker", props: {
14
+ default_date: [(Date.today).httpdate, (Date.today + 7).httpdate],
15
+ label: "Default Date Range",
16
+ mode: "range",
17
+ picker_id: "date-picker-default-date3"
18
+ }) %>
19
+
20
+ <%= pb_rails("date_picker", props: {
21
+ default_date: "blank",
22
+ label: "Blank",
23
+ picker_id: "date-picker-default-date4"
24
+ }) %>
@@ -0,0 +1,30 @@
1
+ import React from 'react'
2
+ import { DatePicker } from '../../'
3
+
4
+ const DatePickerDefaultDate = () => (
5
+ <div>
6
+ <DatePicker
7
+ defaultDate="07/31/2020"
8
+ label="Default Date String"
9
+ pickerId="date-picker-default-date1"
10
+ />
11
+ <DatePicker
12
+ defaultDate={new Date().fp_incr(1)}
13
+ label="Default Date Dynamic"
14
+ pickerId="date-picker-default-date2"
15
+ />
16
+ <DatePicker
17
+ defaultDate={[new Date().fp_incr(1), new Date().fp_incr(3)]}
18
+ label="Default Date Range"
19
+ mode="range"
20
+ pickerId="date-picker-default-date3"
21
+ />
22
+ <DatePicker
23
+ defaultDate="blank"
24
+ label="Blank"
25
+ pickerId="date-picker-default-date4"
26
+ />
27
+ </div>
28
+ )
29
+
30
+ export default DatePickerDefaultDate
@@ -0,0 +1,43 @@
1
+ <%= pb_rails("date_picker", props: {
2
+ disable_date: [(Date.today + 1).httpdate],
3
+ label: "Disable Single Date",
4
+ picker_id: "single-disabled-date"
5
+ }) %>
6
+
7
+ <%= pb_rails("date_picker", props: {
8
+ disable_date: [(Date.today + 1).httpdate, (Date.today + 3).httpdate],
9
+ label: "Disable Multiple Dates",
10
+ picker_id: "multiple-disabled-dates"
11
+ }) %>
12
+
13
+ <%= pb_rails("date_picker", props: {
14
+ disable_range: [
15
+ {
16
+ from: (Date.today + 1).httpdate,
17
+ to: (Date.today + 7).httpdate,
18
+ },
19
+ ],
20
+ label: "Disable Single Range",
21
+ picker_id: "single-date-range"
22
+ }) %>
23
+
24
+ <%= pb_rails("date_picker", props: {
25
+ disable_range: [
26
+ {
27
+ from: (Date.today + 1).httpdate,
28
+ to: (Date.today + 3).httpdate,
29
+ },
30
+ {
31
+ from: (Date.today + 7).httpdate,
32
+ to: (Date.today + 14).httpdate,
33
+ },
34
+ ],
35
+ label: "Disable Multiple Ranges",
36
+ picker_id: "multiple-date-ranges"
37
+ }) %>
38
+
39
+ <%= pb_rails("date_picker", props: {
40
+ disable_weekdays: ['Sunday', 'Saturday'],
41
+ label: "Disable Weekdays",
42
+ picker_id: "disabled-weekdays"
43
+ }) %>
@@ -0,0 +1,48 @@
1
+ import React from 'react'
2
+ import { DatePicker } from '../../'
3
+
4
+ const DatePickerDisabled = () => (
5
+ <div>
6
+ <DatePicker
7
+ disableDate={[new Date().fp_incr(1)]}
8
+ label="Disable Single Date"
9
+ pickerId="single-disabled-date"
10
+ />
11
+ <DatePicker
12
+ disableDate={[new Date().fp_incr(1), new Date().fp_incr(3)]}
13
+ label="Disable Multiple Dates"
14
+ pickerId="multiple-disabled-dates"
15
+ />
16
+ <DatePicker
17
+ disableRange={[
18
+ {
19
+ from: new Date().fp_incr(1),
20
+ to: new Date().fp_incr(7),
21
+ },
22
+ ]}
23
+ label="Disable Single Range"
24
+ pickerId="single-date-range"
25
+ />
26
+ <DatePicker
27
+ disableRange={[
28
+ {
29
+ from: new Date().fp_incr(1),
30
+ to: new Date().fp_incr(3),
31
+ },
32
+ {
33
+ from: new Date().fp_incr(7),
34
+ to: new Date().fp_incr(14),
35
+ },
36
+ ]}
37
+ label="Disable Multiple Ranges"
38
+ pickerId="multiple-date-ranges"
39
+ />
40
+ <DatePicker
41
+ disableWeekdays={['Sunday', 'Saturday']}
42
+ label="Disable Weekdays"
43
+ pickerId="disabled-weekdays"
44
+ />
45
+ </div>
46
+ )
47
+
48
+ export default DatePickerDisabled
@@ -0,0 +1,4 @@
1
+ <%= pb_rails("date_picker", props: {
2
+ error: "Invalid date. Please pick a valid date.",
3
+ picker_id: "date-picker-error"
4
+ }) %>
@@ -0,0 +1,13 @@
1
+ import React from 'react'
2
+ import { DatePicker } from '../../'
3
+
4
+ const DatePickerError = () => (
5
+ <div>
6
+ <DatePicker
7
+ error="Invalid date. Please pick a valid date."
8
+ pickerId="date-picker-error"
9
+ />
10
+ </div>
11
+ )
12
+
13
+ export default DatePickerError
@@ -0,0 +1,19 @@
1
+ <%= pb_rails("date_picker", props: {
2
+ format: "m-d-Y",
3
+ picker_id: "date-picker-format1"
4
+ }) %>
5
+
6
+ <%= pb_rails("date_picker", props: {
7
+ format: "m/d/y",
8
+ picker_id: "date-picker-format2"
9
+ }) %>
10
+
11
+ <%= pb_rails("date_picker", props: {
12
+ format: "n-j-y",
13
+ picker_id: "date-picker-format3"
14
+ }) %>
15
+
16
+ <%= pb_rails("date_picker", props: {
17
+ format: "Y-d-m",
18
+ picker_id: "date-picker-format4"
19
+ }) %>
@@ -0,0 +1,25 @@
1
+ import React from 'react'
2
+ import { DatePicker } from '../../'
3
+
4
+ const DatePickerFormat = () => (
5
+ <div>
6
+ <DatePicker
7
+ format="m-d-Y"
8
+ pickerId="date-picker-format1"
9
+ />
10
+ <DatePicker
11
+ format="m/d/y"
12
+ pickerId="date-picker-format2"
13
+ />
14
+ <DatePicker
15
+ format="n-j-y"
16
+ pickerId="date-picker-format3"
17
+ />
18
+ <DatePicker
19
+ format="Y-d-m"
20
+ pickerId="date-picker-format4"
21
+ />
22
+ </div>
23
+ )
24
+
25
+ export default DatePickerFormat
@@ -0,0 +1,4 @@
1
+ <%= pb_rails("date_picker", props: {
2
+ label: "Your Label Here",
3
+ picker_id: "date-picker-label"
4
+ }) %>
@@ -0,0 +1,13 @@
1
+ import React from 'react'
2
+ import { DatePicker } from '../../'
3
+
4
+ const DatePickerLabel = () => (
5
+ <div>
6
+ <DatePicker
7
+ label="Your Label Here"
8
+ pickerId="date-picker-label"
9
+ />
10
+ </div>
11
+ )
12
+
13
+ export default DatePickerLabel
@@ -0,0 +1,14 @@
1
+ <%= pb_rails("date_picker", props: {
2
+ label: "Dynamic dates.",
3
+ max_date: (Date.today + 3).httpdate,
4
+ min_date: (Date.today - 3).httpdate,
5
+ picker_id: "date-picker-min-max1"
6
+ }) %>
7
+
8
+ <%= pb_rails("date_picker", props: {
9
+ format: "m/d/Y",
10
+ label: "Absolute formatted dates.",
11
+ max_date: "10/20/2020",
12
+ min_date: "10/10/2020",
13
+ picker_id: "date-picker-min-max2"
14
+ }) %>
@@ -0,0 +1,22 @@
1
+ import React from 'react'
2
+ import { DatePicker } from '../../'
3
+
4
+ const DatePickerMinMax = () => (
5
+ <div>
6
+ <DatePicker
7
+ label="Dynamic dates using flatpickr increment function."
8
+ maxDate={new Date().fp_incr(3)}
9
+ minDate={new Date().fp_incr(-3)}
10
+ pickerId="date-picker-min-max1"
11
+ />
12
+ <DatePicker
13
+ format="m/d/Y"
14
+ label="Absolute formatted dates."
15
+ maxDate="10/20/2020"
16
+ minDate="10/10/2020"
17
+ pickerId="date-picker-min-max2"
18
+ />
19
+ </div>
20
+ )
21
+
22
+ export default DatePickerMinMax
@@ -0,0 +1,4 @@
1
+ <%= pb_rails("date_picker", props: {
2
+ mode: "range",
3
+ picker_id: "date-picker-range"
4
+ }) %>
@@ -0,0 +1,13 @@
1
+ import React from 'react'
2
+ import { DatePicker } from '../../'
3
+
4
+ const DatePickerRange = () => (
5
+ <div>
6
+ <DatePicker
7
+ mode="range"
8
+ pickerId="date-picker-range"
9
+ />
10
+ </div>
11
+ )
12
+
13
+ export default DatePickerRange
@@ -0,0 +1,23 @@
1
+ examples:
2
+
3
+ rails:
4
+ - date_picker_default: Default
5
+ - date_picker_default_date: Default Date
6
+ - date_picker_label: Label
7
+ - date_picker_range: Range
8
+ - date_picker_format: Format
9
+ - date_picker_disabled: Disabled Dates
10
+ - date_picker_min_max: Min Max
11
+ - date_picker_error: Error
12
+
13
+
14
+ react:
15
+ - date_picker_default: Default
16
+ - date_picker_default_date: Default Date
17
+ - date_picker_label: Label
18
+ - date_picker_range: Range
19
+ - date_picker_format: Format
20
+ - date_picker_disabled: Disabled Dates
21
+ - date_picker_min_max: Min Max
22
+ - date_picker_error: Error
23
+
@@ -0,0 +1,8 @@
1
+ export { default as DatePickerDefault } from './_date_picker_default.jsx'
2
+ export { default as DatePickerDefaultDate } from './_date_picker_default_date.jsx'
3
+ export { default as DatePickerLabel } from './_date_picker_label.jsx'
4
+ export { default as DatePickerRange } from './_date_picker_range.jsx'
5
+ export { default as DatePickerFormat } from './_date_picker_format.jsx'
6
+ export { default as DatePickerDisabled } from './_date_picker_disabled.jsx'
7
+ export { default as DatePickerMinMax } from './_date_picker_min_max.jsx'
8
+ export { default as DatePickerError } from './_date_picker_error.jsx'
@@ -0,0 +1,11 @@
1
+ import PbEnhancedElement from '../pb_enhanced_element'
2
+
3
+ export default class PbDatePicker extends PbEnhancedElement {
4
+ static get selector() {
5
+ return '[data-pb-date-picker-kit]'
6
+ }
7
+
8
+ connect() {
9
+ this.element.addEventListener('keydown', (event) => this.handleKeydown(event))
10
+ }
11
+ }
@@ -30,6 +30,7 @@
30
30
  <%= pb_rails("form", props: { form_system_options: { scope: :example, method: :get } }) do |form| %>
31
31
  <%= form.text_field :example_text_field, props: { label: true } %>
32
32
  <%= form.collection_select :example_collection_select, example_collection, :value, :name, props: { label: true } %>
33
+ <%= form.date_picker :example_date_picker %>
33
34
 
34
35
  <%= form.actions do |action| %>
35
36
  <%= action.submit props: { text: "Apply", data: { disable_with: "<i class='far fa-spinner fa-spin mr-3'></i>Searching...".html_safe },}%>
@@ -24,6 +24,7 @@
24
24
  <%= form.text_area :example_text_area, props: { label: true } %>
25
25
  <%= form.select :example_select, [ ["Yes", 1], ["No", 2] ], props: { label: true } %>
26
26
  <%= form.collection_select :example_collection_select, example_collection, :value, :name, props: { label: true } %>
27
+ <%= form.date_picker :example_date_picker, props: { picker_id: 'date-picker', default_date: 'blank' } %>
27
28
 
28
29
  <%= form.actions do |action| %>
29
30
  <%= action.submit %>
@@ -13,7 +13,8 @@
13
13
  :example_url_field,
14
14
  :example_text_area,
15
15
  :example_select_field,
16
- :example_collection_select_field
16
+ :example_collection_select_field,
17
+ :example_date_picker
17
18
 
18
19
 
19
20
  def self.model_name
@@ -49,6 +50,7 @@
49
50
  <%= form.input :example_text_area, as: :text %>
50
51
  <%= form.select :example_select_field, [["Yes", 1], ["No", 2]], props: { label: true } %>
51
52
  <%= form.collection_select :example_collection_select_field, example_collection, :value, :name, props: { label: true } %>
53
+ <%= form.date_picker :example_date_picker, props: { picker_id: 'date-picker', default_date: 'blank' } %>
52
54
 
53
55
  <%= form.actions do |action| %>
54
56
  <%= action.submit %>
@@ -17,6 +17,7 @@ module Playbook
17
17
  prepend(TypeaheadField)
18
18
  prepend(SelectField)
19
19
  prepend(CollectionSelectField)
20
+ prepend(DatePickerField)
20
21
 
21
22
  def actions(&block)
22
23
  ActionArea.new(self).wrapper(&block)
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Playbook
4
+ module PbForm
5
+ module FormBuilder
6
+ module DatePickerField
7
+ def date_picker(name, props: {})
8
+ props[:name] = name
9
+
10
+ @template.pb_rails("date_picker", props: props)
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -4,10 +4,10 @@
4
4
  class: object.classname) do %>
5
5
  <div class="pb_time_range_inline_wrapper">
6
6
  <% if object.icon == true %>
7
- <%= pb_rails(object.text_kit, props: { tag: "span", dark: object.dark, text: pb_rails("icon", props: { icon: "clock", dark: object.dark, classname:"pb_time_range_inline_icon", fixed_width: true, size: object.size }) }) %>
7
+ <%= pb_rails(object.text_kit, props: { tag: "span", dark: object.dark, color: object.icon_color, text: pb_rails("icon", props: { icon: "clock", dark: object.dark, classname:"pb_time_range_inline_icon", fixed_width: true, size: object.size }) }) %>
8
8
  <% end %>
9
9
  <%= pb_rails(object.text_kit, props: { tag: "span", dark: object.dark, text: object.format_start_time_string }) %>
10
- <%= pb_rails(object.text_kit, props: { tag: "span", dark: object.dark, classname:"pb_time_range_inline_dash", text: "" }) %>
10
+ <%= pb_rails(object.text_kit, props: { tag: "span", dark: object.dark, color: object.icon_color, classname:"pb_time_range_inline_arrow", text: pb_rails("icon", props: { icon: "long-arrow-right", fixed_width: true, classname:"pb_time_range_inline_arrow"}) }) %>
11
11
  <%= pb_rails(object.text_kit, props: { tag: "span", dark: object.dark, text: object.format_end_time_string }) %>
12
12
  <% if object.timezone == true %>
13
13
  <%= pb_rails(object.text_kit, props: { tag: "span", color: object.text_timezone_color, classname:"pb_time_range_inline_timezone", text: object.pb_date_end_time.to_timezone.upcase }) %>
@@ -45,19 +45,33 @@ const TimeRangeInline = (props: TimeRangeInlineProps) => {
45
45
  startTime,
46
46
  endTime,
47
47
  } = props
48
- const separator = `${'—'}`
48
+ const separator = (
49
+ <Body color="light">
50
+ <Icon
51
+ className="pb_time_range_inline_arrow"
52
+ dark={dark}
53
+ fixedWidth
54
+ icon="long-arrow-right"
55
+ />
56
+ </Body>
57
+ )
49
58
 
50
59
  const iconContent = () => {
51
60
  return (
52
61
  <If condition={icon}>
53
- <Icon
54
- className="pb_time_range_inline_icon"
55
- dark={dark}
56
- fixedWidth
57
- icon="clock"
58
- size={size}
62
+ <Body
63
+ color="light"
59
64
  tag="span"
60
- />
65
+ >
66
+ <Icon
67
+ className="pb_time_range_inline_icon"
68
+ dark={dark}
69
+ fixedWidth
70
+ icon="clock"
71
+ size={size}
72
+ tag="span"
73
+ />
74
+ </Body>
61
75
  </If>
62
76
  )
63
77
  }
@@ -80,7 +94,7 @@ const TimeRangeInline = (props: TimeRangeInlineProps) => {
80
94
  </time>
81
95
  </Caption>
82
96
  <Caption
83
- className="pb_time_range_inline_dash"
97
+ className="pb_time_range_inline_arrow"
84
98
  dark={dark}
85
99
  tag="span"
86
100
  >
@@ -119,7 +133,7 @@ const TimeRangeInline = (props: TimeRangeInlineProps) => {
119
133
  </time>
120
134
  </Body>
121
135
  <Body
122
- className="pb_time_range_inline_dash"
136
+ className="pb_time_range_inline_arrow"
123
137
  dark={dark}
124
138
  tag="span"
125
139
  >
@@ -1,3 +1,4 @@
1
+
1
2
  [class^=pb_time_range_inline_kit] {
2
3
  &[class*=_center] {
3
4
  & > [class^=pb_caption],
@@ -19,7 +20,8 @@
19
20
  }
20
21
  [class^=pb_time_range_inline_wrapper] {
21
22
  display: flex;
22
- [class*=pb_time_range_inline_dash] {
23
+ align-items: center;
24
+ [class*=pb_time_range_inline_arrow] {
23
25
  margin-left: 4px;
24
26
  margin-right: 4px;
25
27
  }
@@ -53,6 +53,12 @@ module Playbook
53
53
  nil
54
54
  end
55
55
 
56
+ def icon_color
57
+ return "light" if size == "sm"
58
+
59
+ nil
60
+ end
61
+
56
62
  def text_kit
57
63
  case size
58
64
  when "xs"
@@ -5,6 +5,10 @@ window.pbChart = pbChart
5
5
  // Forms
6
6
  import './pb_form/pb_form_validation'
7
7
 
8
+ // Date Picker
9
+ import datePickerHelper from './pb_date_picker/date_picker_helper.js'
10
+ window.datePickerHelper = datePickerHelper
11
+
8
12
  // Lazy image loading
9
13
  import 'lazysizes'
10
14
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Playbook
4
- VERSION = "5.5.0"
4
+ VERSION = "5.5.1.pre.alpha1"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: playbook_ui
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.5.0
4
+ version: 5.5.1.pre.alpha1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Power UX
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2020-07-24 00:00:00.000000000 Z
12
+ date: 2020-07-30 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: actionpack
@@ -662,6 +662,30 @@ files:
662
662
  - app/pb_kits/playbook/pb_date/docs/_description.md
663
663
  - app/pb_kits/playbook/pb_date/docs/example.yml
664
664
  - app/pb_kits/playbook/pb_date/docs/index.js
665
+ - app/pb_kits/playbook/pb_date_picker/_date_picker.html.erb
666
+ - app/pb_kits/playbook/pb_date_picker/_date_picker.jsx
667
+ - app/pb_kits/playbook/pb_date_picker/_date_picker.scss
668
+ - app/pb_kits/playbook/pb_date_picker/date_picker.rb
669
+ - app/pb_kits/playbook/pb_date_picker/date_picker_helper.js
670
+ - app/pb_kits/playbook/pb_date_picker/docs/_date_picker_default.html.erb
671
+ - app/pb_kits/playbook/pb_date_picker/docs/_date_picker_default.jsx
672
+ - app/pb_kits/playbook/pb_date_picker/docs/_date_picker_default_date.html.erb
673
+ - app/pb_kits/playbook/pb_date_picker/docs/_date_picker_default_date.jsx
674
+ - app/pb_kits/playbook/pb_date_picker/docs/_date_picker_disabled.html.erb
675
+ - app/pb_kits/playbook/pb_date_picker/docs/_date_picker_disabled.jsx
676
+ - app/pb_kits/playbook/pb_date_picker/docs/_date_picker_error.html.erb
677
+ - app/pb_kits/playbook/pb_date_picker/docs/_date_picker_error.jsx
678
+ - app/pb_kits/playbook/pb_date_picker/docs/_date_picker_format.html.erb
679
+ - app/pb_kits/playbook/pb_date_picker/docs/_date_picker_format.jsx
680
+ - app/pb_kits/playbook/pb_date_picker/docs/_date_picker_label.html.erb
681
+ - app/pb_kits/playbook/pb_date_picker/docs/_date_picker_label.jsx
682
+ - app/pb_kits/playbook/pb_date_picker/docs/_date_picker_min_max.html.erb
683
+ - app/pb_kits/playbook/pb_date_picker/docs/_date_picker_min_max.jsx
684
+ - app/pb_kits/playbook/pb_date_picker/docs/_date_picker_range.html.erb
685
+ - app/pb_kits/playbook/pb_date_picker/docs/_date_picker_range.jsx
686
+ - app/pb_kits/playbook/pb_date_picker/docs/example.yml
687
+ - app/pb_kits/playbook/pb_date_picker/docs/index.js
688
+ - app/pb_kits/playbook/pb_date_picker/index.js
665
689
  - app/pb_kits/playbook/pb_date_range_inline/_date_range_inline.html.erb
666
690
  - app/pb_kits/playbook/pb_date_range_inline/_date_range_inline.jsx
667
691
  - app/pb_kits/playbook/pb_date_range_inline/_date_range_inline.scss
@@ -827,6 +851,7 @@ files:
827
851
  - app/pb_kits/playbook/pb_form/form_builder.rb
828
852
  - app/pb_kits/playbook/pb_form/form_builder/action_area.rb
829
853
  - app/pb_kits/playbook/pb_form/form_builder/collection_select_field.rb
854
+ - app/pb_kits/playbook/pb_form/form_builder/date_picker_field.rb
830
855
  - app/pb_kits/playbook/pb_form/form_builder/form_field_builder.rb
831
856
  - app/pb_kits/playbook/pb_form/form_builder/form_with_form_builder.rb
832
857
  - app/pb_kits/playbook/pb_form/form_builder/select_field.rb
@@ -1816,9 +1841,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
1816
1841
  version: '0'
1817
1842
  required_rubygems_version: !ruby/object:Gem::Requirement
1818
1843
  requirements:
1819
- - - ">="
1844
+ - - ">"
1820
1845
  - !ruby/object:Gem::Version
1821
- version: '0'
1846
+ version: 1.3.1
1822
1847
  requirements: []
1823
1848
  rubyforge_project:
1824
1849
  rubygems_version: 2.7.3