playbook_ui 6.4.2 → 6.5.0

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 (75) 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 -1
  6. data/app/pb_kits/playbook/pb_button/_button.jsx +1 -0
  7. data/app/pb_kits/playbook/pb_button/_button_mixins.scss +1 -1
  8. data/app/pb_kits/playbook/pb_button/docs/_button_default.jsx +3 -7
  9. data/app/pb_kits/playbook/pb_button/docs/_button_default_dark.jsx +3 -0
  10. data/app/pb_kits/playbook/pb_button/docs/_button_link.jsx +2 -0
  11. data/app/pb_kits/playbook/pb_button/docs/_button_loading.jsx +2 -0
  12. data/app/pb_kits/playbook/pb_circle_icon_button/docs/_circle_icon_button_link.html.erb +2 -1
  13. data/app/pb_kits/playbook/pb_date_picker/_date_picker.html.erb +39 -0
  14. data/app/pb_kits/playbook/pb_date_picker/_date_picker.jsx +146 -0
  15. data/app/pb_kits/playbook/pb_date_picker/_date_picker.scss +37 -0
  16. data/app/pb_kits/playbook/pb_date_picker/date_picker.rb +85 -0
  17. data/app/pb_kits/playbook/pb_date_picker/date_picker_helper.js +171 -0
  18. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_dark.html.erb +4 -0
  19. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_dark.jsx +13 -0
  20. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_default.html.erb +1 -0
  21. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_default.jsx +12 -0
  22. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_default_date.html.erb +24 -0
  23. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_default_date.jsx +30 -0
  24. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_disabled.html.erb +43 -0
  25. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_disabled.jsx +48 -0
  26. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_error.html.erb +4 -0
  27. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_error.jsx +13 -0
  28. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_format.html.erb +19 -0
  29. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_format.jsx +25 -0
  30. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_format.md +1 -0
  31. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_hide_icon.html.erb +4 -0
  32. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_hide_icon.jsx +13 -0
  33. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_hooks.html.erb +37 -0
  34. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_hooks.jsx +37 -0
  35. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_hooks.md +1 -0
  36. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_input.html.erb +26 -0
  37. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_input.jsx +32 -0
  38. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_input.md +3 -0
  39. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_label.html.erb +9 -0
  40. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_label.jsx +17 -0
  41. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_label.md +1 -0
  42. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_min_max.html.erb +14 -0
  43. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_min_max.jsx +22 -0
  44. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_range.html.erb +4 -0
  45. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_range.jsx +13 -0
  46. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_read_only.html.erb +4 -0
  47. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_read_only.jsx +13 -0
  48. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_read_only.md +1 -0
  49. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_year_range.html.erb +7 -0
  50. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_year_range.jsx +16 -0
  51. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_year_range.md +1 -0
  52. data/app/pb_kits/playbook/pb_date_picker/docs/_description.md +7 -0
  53. data/app/pb_kits/playbook/pb_date_picker/docs/example.yml +35 -0
  54. data/app/pb_kits/playbook/pb_date_picker/docs/index.js +14 -0
  55. data/app/pb_kits/playbook/pb_date_picker/sass_partials/_calendar_input_icon.scss +32 -0
  56. data/app/pb_kits/playbook/pb_date_picker/sass_partials/_day_styles.scss +53 -0
  57. data/app/pb_kits/playbook/pb_date_picker/sass_partials/_flatpickr_styles.scss +785 -0
  58. data/app/pb_kits/playbook/pb_date_picker/sass_partials/_header_styles.scss +108 -0
  59. data/app/pb_kits/playbook/pb_date_picker/sass_partials/_overrides.scss +44 -0
  60. data/app/pb_kits/playbook/pb_filter/_filter.scss +1 -1
  61. data/app/pb_kits/playbook/pb_form/docs/_form_form_with.html.erb +1 -0
  62. data/app/pb_kits/playbook/pb_form/docs/_form_form_with_validate.html.erb +1 -0
  63. data/app/pb_kits/playbook/pb_form/docs/_form_simple_form.html.erb +2 -0
  64. data/app/pb_kits/playbook/pb_form/docs/_form_simple_form_validate.html.erb +2 -0
  65. data/app/pb_kits/playbook/pb_form/form_builder.rb +1 -0
  66. data/app/pb_kits/playbook/pb_form/form_builder/date_picker_field.rb +20 -0
  67. data/app/pb_kits/playbook/pb_progress_step/progress_step.rb +2 -2
  68. data/app/pb_kits/playbook/pb_progress_step/progress_step_item.rb +0 -1
  69. data/app/pb_kits/playbook/pb_table/table.rb +3 -3
  70. data/app/pb_kits/playbook/pb_text_input/_text_input.html.erb +1 -0
  71. data/app/pb_kits/playbook/pb_text_input/_text_input.jsx +21 -17
  72. data/app/pb_kits/playbook/pb_text_input/text_input.rb +2 -0
  73. data/app/pb_kits/playbook/vendor.js +6 -0
  74. data/lib/playbook/version.rb +1 -1
  75. metadata +50 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 043d8ee7ffc205305e575f5a1b2dbc33a7044509a8907c19b1fdd2496df7995c
4
- data.tar.gz: 7c38d3f71179c5f552836a74d7bb85c84035a304d3190b90f3a5d0a9be043a46
3
+ metadata.gz: 9abf95612efac0b8a04b431ccb4f430c0cb70ce3f31aaa3b09645ef945bdc979
4
+ data.tar.gz: bc0bcf2f8394a0350ce32a508bf40bd4dc9330d1f0aa56799677a1d892f58072
5
5
  SHA512:
6
- metadata.gz: 6c4ba1186d30795d4dc2a85ab19fe898b9ef043d1cb42e0db2aea26df4b7a0ea34ffd3e39f7272db76deb03533777d34798c3e1f9aac0a514d4d0133d3dbac2c
7
- data.tar.gz: f6a7e045c41272b2a13c2035fe0b2100d792ab969f2cfd968008646b2c0c1a51bcd5ee467c831a4aba06a24fdebf7c662e7845e8d0e4f41af6af6e2d67070b80
6
+ metadata.gz: e46b996ef8cbf16390ff72d30696591ba8e11c3904e346ad0ad5b49b5bfe1cc0ea5eb5b44e15bc94084280e0b52b9ac6f63b17ff58031346567f571ac3b695ff
7
+ data.tar.gz: 4b11ef993b8fc7ecf3b9864ecc357823ee741bd83d999c40c243111eab87790116433e0d68d970a561d576e922e341efe7ee32fb770c2f1734a30c8b110b4187
@@ -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'
@@ -91,6 +92,7 @@ export dashboardValueSettings from './pb_dashboard_value/dashboardValueSettings'
91
92
 
92
93
  // Other JS/Plugins
93
94
  export pbChart from './plugins/pb_chart.js'
95
+ export datePickerHelper from './pb_date_picker/date_picker_helper.js'
94
96
  export PbTypeahead from './pb_typeahead'
95
97
  export PbPopover from './pb_popover'
96
98
  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'
@@ -108,6 +109,7 @@ WebpackerReact.setup({
108
109
  ...Currency,
109
110
  ...DashboardValue,
110
111
  ...Date,
112
+ ...DatePicker,
111
113
  ...DateRangeInline,
112
114
  ...DateRangeStacked,
113
115
  ...DateStacked,
@@ -172,4 +174,3 @@ WebpackerReact.setup({
172
174
  ...UserBadge,
173
175
  ...WeekdayStacked,
174
176
  })
175
-
@@ -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
@@ -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,146 @@
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
+ aria?: object,
12
+ className?: String,
13
+ dark?: Boolean,
14
+ data?: object,
15
+ defaultDate?: String,
16
+ disableDate?: Array,
17
+ disableInput?: Boolean,
18
+ disableRange?: Array,
19
+ disableWeekdays?: Array,
20
+ error?: String,
21
+ format?: String,
22
+ hideIcon?: Boolean,
23
+ hideLabel?: Boolean,
24
+ id?: String,
25
+ inputAria?: object,
26
+ inputData?: object,
27
+ label?: String,
28
+ maxDate: String,
29
+ minDate: String,
30
+ mode?: String,
31
+ name: String,
32
+ pickerId?: String,
33
+ placeholder?: String,
34
+ readOnly?: Boolean,
35
+ type?: String,
36
+ yearRange?: Array,
37
+ }
38
+ const DatePicker = (props: DatePickerProps) => {
39
+ const {
40
+ aria = {},
41
+ className,
42
+ dark = false,
43
+ data = {},
44
+ defaultDate = '',
45
+ disableDate = null,
46
+ disableInput,
47
+ disableRange = null,
48
+ disableWeekdays = null,
49
+ error,
50
+ format = 'm/d/Y',
51
+ hideIcon = false,
52
+ hideLabel = false,
53
+ id,
54
+ inputAria,
55
+ inputData,
56
+ label = 'Date Picker',
57
+ maxDate,
58
+ minDate,
59
+ mode = 'single',
60
+ name,
61
+ pickerId,
62
+ placeholder,
63
+ readOnly = false,
64
+ type,
65
+ yearRange = [ 1900, 2100 ],
66
+ } = props
67
+
68
+ const ariaProps = buildAriaProps(aria)
69
+ const dataProps = buildDataProps(data)
70
+ const classes = classnames(
71
+ buildCss('pb_date_picker_kit'),
72
+ className,
73
+ globalProps(props),
74
+ error ? 'error' : null,
75
+ )
76
+
77
+ useEffect(() => {
78
+ datePickerHelper({
79
+ defaultDate: defaultDate,
80
+ disableDate: disableDate,
81
+ disableRange: disableRange,
82
+ disableWeekdays: disableWeekdays,
83
+ format: format,
84
+ hideIcon: hideIcon,
85
+ maxDate: maxDate,
86
+ minDate: minDate,
87
+ mode: mode,
88
+ pickerId: pickerId,
89
+ readOnly: readOnly,
90
+ yearRange: yearRange,
91
+ })
92
+ }, [])
93
+
94
+ const iconWrapperClass = () => {
95
+ let base = 'cal_icon_wrapper'
96
+ if (dark){
97
+ base += ' dark'
98
+ }
99
+ if (hideLabel){
100
+ base += ' no_label_shift'
101
+ }
102
+ if (error){
103
+ base += ' error'
104
+ }
105
+ return base
106
+ }
107
+
108
+ return (
109
+ <div
110
+ {...ariaProps}
111
+ {...dataProps}
112
+ className={classes}
113
+ id={id}
114
+ >
115
+ {className}
116
+ <div className="input_wrapper">
117
+ <TextInput
118
+ aria={inputAria}
119
+ autoComplete="off"
120
+ dark={dark}
121
+ data={inputData}
122
+ disabled={disableInput}
123
+ error={error}
124
+ id={pickerId}
125
+ label={hideLabel ? null : label}
126
+ name={name}
127
+ placeholder={placeholder}
128
+ type={type}
129
+ />
130
+ <If condition={!hideIcon}>
131
+ <div
132
+ className={iconWrapperClass()}
133
+ id={`cal-icon-${pickerId}`}
134
+ >
135
+ <Icon
136
+ className="cal_icon"
137
+ icon="calendar-alt"
138
+ />
139
+ </div>
140
+ </If>
141
+ </div>
142
+ </div>
143
+ )
144
+ }
145
+
146
+ export default DatePicker
@@ -0,0 +1,37 @@
1
+ @import "../pb_caption/caption_mixin";
2
+ @import "../pb_textarea/textarea_mixin";
3
+ @import "../tokens/colors";
4
+ @import "./sass_partials/flatpickr_styles";
5
+
6
+ [class^=pb_date_picker_kit] {
7
+ .input_wrapper {
8
+ margin-bottom: $space_sm;
9
+ position: relative;
10
+ @import "./sass_partials/calendar_input_icon";
11
+ @import "./sass_partials/day_styles";
12
+ @import "./sass_partials/header_styles";
13
+ @import "./sass_partials/overrides";
14
+
15
+ .flatpickr-wrapper {
16
+ display: block;
17
+ .text_input.flatpickr-input {
18
+ text-overflow: ellipsis;
19
+ padding-right: $space_xl + 10 !important;
20
+ }
21
+ // Calendar Shadow and Border
22
+ .flatpickr-calendar {
23
+ box-shadow: $shadow_deeper;
24
+ border: 1px solid $border_light;
25
+ }
26
+ // Hide Caret
27
+ .flatpickr-calendar:before,
28
+ .flatpickr-calendar:after {
29
+ content: none;
30
+ }
31
+ }
32
+ }
33
+ }
34
+ // Ensures picker remains visible inside filter kit
35
+ .pb_popover_body {
36
+ overflow: visible !important;
37
+ }
@@ -0,0 +1,85 @@
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 :dark, type: Playbook::Props::Boolean,
11
+ default: false
12
+ prop :default_date, type: Playbook::Props::String,
13
+ default: ""
14
+ prop :disable_date, type: Playbook::Props::Array,
15
+ default: []
16
+ prop :disable_input, type: Playbook::Props::Boolean,
17
+ default: false
18
+ prop :disable_range, type: Playbook::Props::Array,
19
+ default: []
20
+ prop :disable_weekdays, type: Playbook::Props::Array,
21
+ default: []
22
+ prop :error, type: Playbook::Props::String
23
+ prop :format, type: Playbook::Props::String,
24
+ default: "m/d/Y"
25
+ prop :hide_icon, type: Playbook::Props::Boolean,
26
+ default: false
27
+ prop :hide_label, type: Playbook::Props::Boolean,
28
+ default: false
29
+ prop :label, type: Playbook::Props::String,
30
+ default: "Date Picker"
31
+ prop :input_aria, type: Playbook::Props::Hash,
32
+ default: {}
33
+ prop :input_data, type: Playbook::Props::Hash,
34
+ default: {}
35
+ prop :max_date, type: Playbook::Props::String
36
+ prop :min_date, type: Playbook::Props::String
37
+ prop :name, type: Playbook::Props::String
38
+ prop :mode, type: Playbook::Props::String,
39
+ default: "single"
40
+ prop :picker_id, type: Playbook::Props::String,
41
+ required: true
42
+ prop :placeholder, type: Playbook::Props::String
43
+ prop :read_only, type: Playbook::Props::Boolean,
44
+ default: false
45
+ prop :required, type: Playbook::Props::Boolean,
46
+ default: false
47
+ prop :type, type: Playbook::Props::String
48
+ prop :year_range, type: Playbook::Props::Array,
49
+ default: [1900, 2100]
50
+
51
+ def classname
52
+ generate_classname("pb_date_picker_kit")
53
+ end
54
+
55
+ def date_picker_config
56
+ {
57
+ defaultDate: default_date,
58
+ disableDate: disable_date,
59
+ disableRange: disable_range,
60
+ disableWeekdays: disable_weekdays,
61
+ format: format,
62
+ hideIcon: hide_icon,
63
+ maxDate: max_date,
64
+ minDate: min_date,
65
+ mode: mode,
66
+ pickerId: picker_id,
67
+ readOnly: read_only,
68
+ yearRange: year_range,
69
+ }.to_json.html_safe
70
+ end
71
+
72
+ def error_class
73
+ error ? " error" : ""
74
+ end
75
+
76
+ def icon_wrapper_class
77
+ class_string = "cal_icon_wrapper"
78
+ class_string += " dark" if dark
79
+ class_string += " no_label_shift" if hide_label
80
+ class_string += error_class
81
+ class_string
82
+ end
83
+ end
84
+ end
85
+ end