playbook_ui 16.10.0 → 16.11.0.pre.rc.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 (157) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/_playbook.scss +2 -0
  3. data/app/pb_kits/playbook/pb_checkbox/kit.schema.json +1 -1
  4. data/app/pb_kits/playbook/pb_circle_icon_button/kit.schema.json +1 -1
  5. data/app/pb_kits/playbook/pb_date_time/kit.schema.json +1 -1
  6. data/app/pb_kits/playbook/pb_date_time_stacked/kit.schema.json +1 -1
  7. data/app/pb_kits/playbook/pb_dropdown/_dropdown.scss +114 -0
  8. data/app/pb_kits/playbook/pb_dropdown/_dropdown.tsx +13 -4
  9. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_custom_display_disabled_option.html.erb +93 -0
  10. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_custom_display_disabled_option.jsx +127 -0
  11. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_custom_display_disabled_option.md +1 -0
  12. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_disabled.html.erb +10 -0
  13. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_disabled.jsx +37 -0
  14. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_disabled_option.html.erb +10 -0
  15. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_disabled_option.jsx +37 -0
  16. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_disabled_option.md +1 -0
  17. data/app/pb_kits/playbook/pb_dropdown/docs/example.yml +6 -0
  18. data/app/pb_kits/playbook/pb_dropdown/docs/index.js +3 -0
  19. data/app/pb_kits/playbook/pb_dropdown/dropdown.html.erb +5 -4
  20. data/app/pb_kits/playbook/pb_dropdown/dropdown.rb +6 -1
  21. data/app/pb_kits/playbook/pb_dropdown/dropdown.test.jsx +96 -0
  22. data/app/pb_kits/playbook/pb_dropdown/dropdown_container.html.erb +1 -0
  23. data/app/pb_kits/playbook/pb_dropdown/dropdown_container.rb +2 -0
  24. data/app/pb_kits/playbook/pb_dropdown/dropdown_option.html.erb +2 -2
  25. data/app/pb_kits/playbook/pb_dropdown/dropdown_option.rb +27 -2
  26. data/app/pb_kits/playbook/pb_dropdown/dropdown_trigger.html.erb +4 -2
  27. data/app/pb_kits/playbook/pb_dropdown/dropdown_trigger.rb +2 -0
  28. data/app/pb_kits/playbook/pb_dropdown/hooks/useHandleOnKeydown.tsx +25 -5
  29. data/app/pb_kits/playbook/pb_dropdown/index.js +50 -0
  30. data/app/pb_kits/playbook/pb_dropdown/keyboard_accessibility.js +11 -1
  31. data/app/pb_kits/playbook/pb_dropdown/kit.schema.json +8 -0
  32. data/app/pb_kits/playbook/pb_dropdown/subcomponents/DropdownOption.tsx +15 -4
  33. data/app/pb_kits/playbook/pb_dropdown/subcomponents/DropdownTrigger.tsx +22 -13
  34. data/app/pb_kits/playbook/pb_file_upload/kit.schema.json +1 -1
  35. data/app/pb_kits/playbook/pb_form_group/docs/_playground.json +100 -1
  36. data/app/pb_kits/playbook/pb_form_group/docs/_playground.overrides.json +91 -0
  37. data/app/pb_kits/playbook/pb_full_screen/_full_screen.scss +77 -0
  38. data/app/pb_kits/playbook/pb_full_screen/_full_screen.tsx +183 -0
  39. data/app/pb_kits/playbook/pb_full_screen/docs/_description.md +1 -0
  40. data/app/pb_kits/playbook/pb_full_screen/docs/_full_screen_content_padding.jsx +68 -0
  41. data/app/pb_kits/playbook/pb_full_screen/docs/_full_screen_content_padding.md +1 -0
  42. data/app/pb_kits/playbook/pb_full_screen/docs/_full_screen_custom_trigger.jsx +71 -0
  43. data/app/pb_kits/playbook/pb_full_screen/docs/_full_screen_custom_trigger.md +1 -0
  44. data/app/pb_kits/playbook/pb_full_screen/docs/_full_screen_default.html.erb +3 -0
  45. data/app/pb_kits/playbook/pb_full_screen/docs/_full_screen_default.jsx +63 -0
  46. data/app/pb_kits/playbook/pb_full_screen/docs/_full_screen_default.md +1 -0
  47. data/app/pb_kits/playbook/pb_full_screen/docs/_full_screen_header_text_styling.jsx +68 -0
  48. data/app/pb_kits/playbook/pb_full_screen/docs/_full_screen_header_text_styling.md +1 -0
  49. data/app/pb_kits/playbook/pb_full_screen/docs/_full_screen_sticky_header.jsx +68 -0
  50. data/app/pb_kits/playbook/pb_full_screen/docs/_full_screen_sticky_header.md +1 -0
  51. data/app/pb_kits/playbook/pb_full_screen/docs/_full_screen_table_and_filter.jsx +149 -0
  52. data/app/pb_kits/playbook/pb_full_screen/docs/_full_screen_table_and_filter.md +1 -0
  53. data/app/pb_kits/playbook/pb_full_screen/docs/_playground.json +155 -0
  54. data/app/pb_kits/playbook/pb_full_screen/docs/_playground.overrides.json +137 -0
  55. data/app/pb_kits/playbook/pb_full_screen/docs/example.yml +14 -0
  56. data/app/pb_kits/playbook/pb_full_screen/docs/index.js +6 -0
  57. data/app/pb_kits/playbook/pb_full_screen/full_screen.html.erb +12 -0
  58. data/app/pb_kits/playbook/pb_full_screen/full_screen.rb +11 -0
  59. data/app/pb_kits/playbook/pb_full_screen/full_screen.test.jsx +237 -0
  60. data/app/pb_kits/playbook/pb_full_screen/kit.schema.json +89 -0
  61. data/app/pb_kits/playbook/pb_full_screen/useFullScreen.ts +15 -0
  62. data/app/pb_kits/playbook/pb_icon/_icon.tsx +22 -11
  63. data/app/pb_kits/playbook/pb_icon/icon.rb +5 -2
  64. data/app/pb_kits/playbook/pb_icon/kit.schema.json +3 -5
  65. data/app/pb_kits/playbook/pb_layout/docs/_playground.json +246 -1
  66. data/app/pb_kits/playbook/pb_layout/docs/_playground.overrides.json +188 -0
  67. data/app/pb_kits/playbook/pb_progress_pills/docs/_playground.json +26 -13
  68. data/app/pb_kits/playbook/pb_progress_pills/docs/_playground.overrides.json +24 -6
  69. data/app/pb_kits/playbook/pb_progress_simple/docs/_playground.json +50 -17
  70. data/app/pb_kits/playbook/pb_progress_simple/docs/_playground.overrides.json +41 -7
  71. data/app/pb_kits/playbook/pb_progress_step/docs/_playground.json +218 -1
  72. data/app/pb_kits/playbook/pb_progress_step/docs/_playground.overrides.json +189 -0
  73. data/app/pb_kits/playbook/pb_radio/docs/_playground.json +80 -6
  74. data/app/pb_kits/playbook/pb_radio/docs/_playground.overrides.json +82 -3
  75. data/app/pb_kits/playbook/pb_radio/kit.schema.json +1 -1
  76. data/app/pb_kits/playbook/pb_rich_text_editor/docs/_playground.json +171 -1
  77. data/app/pb_kits/playbook/pb_rich_text_editor/docs/_playground.overrides.json +153 -0
  78. data/app/pb_kits/playbook/pb_select/docs/_playground.json +65 -19
  79. data/app/pb_kits/playbook/pb_select/docs/_playground.overrides.json +54 -14
  80. data/app/pb_kits/playbook/pb_select/kit.schema.json +1 -1
  81. data/app/pb_kits/playbook/pb_selectable_card/docs/_playground.json +75 -82
  82. data/app/pb_kits/playbook/pb_selectable_card/docs/_playground.overrides.json +76 -76
  83. data/app/pb_kits/playbook/pb_selectable_card/kit.schema.json +1 -1
  84. data/app/pb_kits/playbook/pb_selectable_card_icon/docs/_playground.json +128 -1
  85. data/app/pb_kits/playbook/pb_selectable_card_icon/docs/_playground.overrides.json +106 -0
  86. data/app/pb_kits/playbook/pb_selectable_card_icon/kit.schema.json +1 -1
  87. data/app/pb_kits/playbook/pb_selectable_icon/docs/_playground.json +37 -21
  88. data/app/pb_kits/playbook/pb_selectable_icon/docs/_playground.overrides.json +35 -18
  89. data/app/pb_kits/playbook/pb_selectable_icon/kit.schema.json +1 -1
  90. data/app/pb_kits/playbook/pb_selectable_list/docs/_playground.json +174 -12
  91. data/app/pb_kits/playbook/pb_selectable_list/docs/_playground.overrides.json +162 -10
  92. data/app/pb_kits/playbook/pb_skeleton_loading/docs/_playground.json +92 -1
  93. data/app/pb_kits/playbook/pb_skeleton_loading/docs/_playground.overrides.json +80 -0
  94. data/app/pb_kits/playbook/pb_source/docs/_playground.json +88 -1
  95. data/app/pb_kits/playbook/pb_source/docs/_playground.overrides.json +80 -0
  96. data/app/pb_kits/playbook/pb_star_rating/docs/_playground.json +28 -53
  97. data/app/pb_kits/playbook/pb_star_rating/docs/_playground.overrides.json +33 -32
  98. data/app/pb_kits/playbook/pb_star_rating/kit.schema.json +1 -1
  99. data/app/pb_kits/playbook/pb_stat_change/docs/_playground.json +15 -9
  100. data/app/pb_kits/playbook/pb_stat_change/docs/_playground.overrides.json +15 -5
  101. data/app/pb_kits/playbook/pb_stat_value/docs/_playground.json +19 -9
  102. data/app/pb_kits/playbook/pb_stat_value/docs/_playground.overrides.json +18 -7
  103. data/app/pb_kits/playbook/pb_stat_value/kit.schema.json +1 -1
  104. data/app/pb_kits/playbook/pb_table/docs/_playground.json +259 -1
  105. data/app/pb_kits/playbook/pb_table/docs/_playground.overrides.json +176 -0
  106. data/app/pb_kits/playbook/pb_text_input/docs/_playground.json +44 -5
  107. data/app/pb_kits/playbook/pb_text_input/docs/_playground.overrides.json +39 -3
  108. data/app/pb_kits/playbook/pb_text_input/kit.schema.json +2 -2
  109. data/app/pb_kits/playbook/pb_textarea/docs/_playground.json +35 -3
  110. data/app/pb_kits/playbook/pb_textarea/docs/_playground.overrides.json +28 -3
  111. data/app/pb_kits/playbook/pb_time/docs/_playground.json +28 -14
  112. data/app/pb_kits/playbook/pb_time/docs/_playground.overrides.json +26 -13
  113. data/app/pb_kits/playbook/pb_time_picker/docs/_playground.json +36 -30
  114. data/app/pb_kits/playbook/pb_time_picker/docs/_playground.overrides.json +31 -26
  115. data/app/pb_kits/playbook/pb_time_range_inline/docs/_playground.json +86 -1
  116. data/app/pb_kits/playbook/pb_time_range_inline/docs/_playground.overrides.json +69 -0
  117. data/app/pb_kits/playbook/pb_time_stacked/docs/_playground.json +30 -9
  118. data/app/pb_kits/playbook/pb_time_stacked/docs/_playground.overrides.json +30 -9
  119. data/app/pb_kits/playbook/pb_timeline/docs/_playground.json +199 -1
  120. data/app/pb_kits/playbook/pb_timeline/docs/_playground.overrides.json +165 -0
  121. data/app/pb_kits/playbook/pb_timestamp/docs/_playground.json +36 -21
  122. data/app/pb_kits/playbook/pb_timestamp/docs/_playground.overrides.json +35 -20
  123. data/app/pb_kits/playbook/pb_toggle/docs/_playground.json +24 -13
  124. data/app/pb_kits/playbook/pb_toggle/docs/_playground.overrides.json +20 -12
  125. data/app/pb_kits/playbook/pb_toggle/kit.schema.json +1 -1
  126. data/app/pb_kits/playbook/pb_tooltip/docs/_playground.json +42 -23
  127. data/app/pb_kits/playbook/pb_tooltip/docs/_playground.overrides.json +35 -15
  128. data/app/pb_kits/playbook/pb_typeahead/docs/_playground.json +124 -44
  129. data/app/pb_kits/playbook/pb_typeahead/docs/_playground.overrides.json +98 -31
  130. data/app/pb_kits/playbook/pb_typeahead/kit.schema.json +1 -1
  131. data/app/pb_kits/playbook/pb_user/docs/_playground.json +33 -15
  132. data/app/pb_kits/playbook/pb_user/docs/_playground.overrides.json +32 -15
  133. data/app/pb_kits/playbook/pb_user_badge/docs/_playground.json +26 -12
  134. data/app/pb_kits/playbook/pb_user_badge/docs/_playground.overrides.json +26 -9
  135. data/app/pb_kits/playbook/pb_weekday_stacked/docs/_playground.json +32 -5
  136. data/app/pb_kits/playbook/pb_weekday_stacked/docs/_playground.overrides.json +30 -4
  137. data/app/pb_kits/playbook/utilities/_border.scss +262 -0
  138. data/app/pb_kits/playbook/utilities/global-props.schema.json +98 -0
  139. data/app/pb_kits/playbook/utilities/globalProps.ts +83 -1
  140. data/app/pb_kits/playbook/utilities/test/globalProps/border.test.js +66 -0
  141. data/dist/chunks/{_pb_line_graph-plVkeUnU.js → _pb_line_graph-BQrN-uXU.js} +1 -1
  142. data/dist/chunks/_typeahead-CMBaw31o.js +5 -0
  143. data/dist/chunks/globalProps-C04xFof_.js +6 -0
  144. data/dist/chunks/{lib-D9avZHpB.js → lib-BhWFApsB.js} +2 -2
  145. data/dist/chunks/vendor.js +3 -3
  146. data/dist/menu.yml +7 -0
  147. data/dist/playbook-rails-react-bindings.js +1 -1
  148. data/dist/playbook-rails.js +1 -1
  149. data/dist/playbook.css +1 -1
  150. data/lib/playbook/border.rb +87 -0
  151. data/lib/playbook/classnames.rb +1 -0
  152. data/lib/playbook/kit_base.rb +2 -0
  153. data/lib/playbook/pb_forms_global_props_helper.rb +15 -0
  154. data/lib/playbook/version.rb +2 -2
  155. metadata +52 -6
  156. data/dist/chunks/_typeahead-hKgL47y6.js +0 -5
  157. data/dist/chunks/globalProps-D2QbetXQ.js +0 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 463f8e78562bf32966038fc3b60d2399d5b79ed6bd1469e96a22a3cba9b9acfd
4
- data.tar.gz: b096a3632bdba7efd17d0c95fcfd22459af97f642558a7ab7e68962794d9f849
3
+ metadata.gz: ace743a234de15aaf9ee6ffb24611f554ee330384f789a8bb480dc88625219de
4
+ data.tar.gz: 0e5e6b5351a5320b6752873019fea60337fbc90241a646036790c80b8d2469a8
5
5
  SHA512:
6
- metadata.gz: 44790a1671535c961f69c03f7f81c2ac60cccede4b9ea40527b52a4f5696cfdd6b96d0c47595bf3cf0e8dee1da6ab9b66409fa22e7bd2ec0325ae3c907744e55
7
- data.tar.gz: e3596b959c27bddff550044d9a8b13c5fa01932ec931d910221b8c1fb30084fb85b5afcdcca5d1d0e940fd4749574aba925f5a730457ec6b3a7a7584ea71cc9f
6
+ metadata.gz: 6fcda84f3ea5e911d96bfa65d56a049004b3b439104873f578609efadbae701904ccac15acdfd87d76e24962a4f4e9cd0ff2f2371eda67d92ace3ce764cc6226
7
+ data.tar.gz: 846e209e5edfed5a2c8e909248b32596ed0c612c35785a90a49642fc11b2d08d4f5ea6dcb3fd8b3dea16ed12b30ca8ea615d622022dbce44f1326812c91b1ba3
@@ -36,6 +36,7 @@
36
36
  @import 'pb_form/form';
37
37
  @import 'pb_form_group/form_group';
38
38
  @import 'pb_form_pill/form_pill';
39
+ @import 'pb_full_screen/full_screen';
39
40
  @import 'pb_hashtag/hashtag';
40
41
  @import 'pb_highlight/highlight';
41
42
  @import 'pb_home_address_street/home_address_street';
@@ -128,3 +129,4 @@
128
129
  @import 'utilities/vertical_align';
129
130
  @import 'utilities/height';
130
131
  @import 'utilities/gap';
132
+ @import 'utilities/border';
@@ -106,7 +106,7 @@
106
106
  "platforms": [
107
107
  "rails"
108
108
  ],
109
- "type": "string"
109
+ "type": "GenericObject"
110
110
  },
111
111
  "required": {
112
112
  "platforms": [
@@ -106,7 +106,7 @@
106
106
  "platforms": [
107
107
  "rails"
108
108
  ],
109
- "type": "string"
109
+ "type": "GenericObject"
110
110
  }
111
111
  },
112
112
  "globalProps": true,
@@ -72,7 +72,7 @@
72
72
  "platforms": [
73
73
  "rails"
74
74
  ],
75
- "type": "string"
75
+ "type": "Date"
76
76
  },
77
77
  "timezone": {
78
78
  "platforms": [
@@ -44,7 +44,7 @@
44
44
  "platforms": [
45
45
  "rails"
46
46
  ],
47
- "type": "string"
47
+ "type": "Date"
48
48
  },
49
49
  "timezone": {
50
50
  "platforms": [
@@ -10,6 +10,61 @@
10
10
  @import "./scss_partials/dropdown_animation";
11
11
  @import "dropdown_mixin";
12
12
 
13
+ @mixin dropdown-disabled-typography($color) {
14
+ .pb_body_kit,
15
+ .pb_body_kit_default,
16
+ .pb_body_kit_light,
17
+ .pb_body_kit_lighter,
18
+ .pb_body_kit_link,
19
+ .pb_body_kit_success,
20
+ .pb_body_kit_error,
21
+ .pb_body_kit_neutral,
22
+ .pb_body_kit_positive,
23
+ .pb_body_kit_negative,
24
+ .pb_caption_kit,
25
+ .pb_caption_kit_xs,
26
+ .pb_caption_kit_sm,
27
+ .pb_caption_kit_md,
28
+ .pb_caption_kit_base,
29
+ .pb_caption_kit_lg,
30
+ .pb_caption_kit_xl,
31
+ .pb_title_kit,
32
+ .pb_detail_kit,
33
+ .pb_detail_kit_color_light,
34
+ .pb_detail_kit_color_default,
35
+ .pb_detail_kit_color_lighter,
36
+ .pb_detail_kit_color_link,
37
+ .pb_detail_kit_color_error,
38
+ .pb_detail_kit_color_success,
39
+ .pb_link_kit,
40
+ .pb_link_kit_underline,
41
+ a {
42
+ color: $color !important;
43
+ }
44
+
45
+
46
+ @each $caption-color, $caption-value in $pb_caption_colors {
47
+ .pb_caption_kit_xs_#{$caption-color},
48
+ .pb_caption_kit_sm_#{$caption-color},
49
+ .pb_caption_kit_md_#{$caption-color},
50
+ .pb_caption_kit_base_#{$caption-color},
51
+ .pb_caption_kit_lg_#{$caption-color},
52
+ .pb_caption_kit_xl_#{$caption-color} {
53
+ color: $color !important;
54
+ }
55
+ }
56
+
57
+
58
+ @each $link-color, $link-value in $pb_link_colors {
59
+ .pb_link_kit_#{$link-color},
60
+ .pb_link_kit_#{$link-color}_underline,
61
+ .pb_link_kit_#{$link-color}_disabled,
62
+ .pb_link_kit_#{$link-color}_underline_disabled {
63
+ color: $color !important;
64
+ }
65
+ }
66
+ }
67
+
13
68
  .pb_dropdown_default,
14
69
  .pb_dropdown_subtle,
15
70
  .pb_dropdown_quickpick,
@@ -50,6 +105,17 @@
50
105
  color: $input_text_default;
51
106
  }
52
107
  }
108
+
109
+ .dropdown_input:disabled {
110
+ background-color: $input_background_disabled;
111
+ color: $input_text_disabled;
112
+ cursor: default;
113
+ }
114
+
115
+ .dropdown_input:disabled::placeholder {
116
+ color: $input_text_disabled;
117
+ }
118
+
53
119
  &:focus {
54
120
  box-shadow: 0px 0px 0 1px $status_border_primary !important;
55
121
  outline: unset;
@@ -145,6 +211,20 @@
145
211
  }
146
212
  }
147
213
  }
214
+
215
+ // Disabled state
216
+ &.disabled {
217
+ cursor: not-allowed;
218
+ // background-color: $input_background_disabled;
219
+ color: $input_text_disabled;
220
+ border-color: $input_border_disabled;
221
+ pointer-events: none;
222
+ @include dropdown-disabled-typography($input_text_disabled);
223
+ &:hover,
224
+ &:focus {
225
+ background-color: $input_background_disabled;
226
+ }
227
+ }
148
228
  }
149
229
 
150
230
  .dropdown_option_wrapper {
@@ -376,6 +456,40 @@
376
456
  background-color: $primary;
377
457
  border-bottom: rgba($white, 0.15);
378
458
  }
459
+
460
+ &.disabled {
461
+ cursor: not-allowed;
462
+ background-color: $input_background_disabled_dark;
463
+ color: $input_text_disabled_dark;
464
+ border-color: $input_border_disabled_dark;
465
+ pointer-events: none;
466
+ @include dropdown-disabled-typography($input_text_disabled_dark);
467
+ &:hover,
468
+ &:focus {
469
+ background-color: $input_background_disabled_dark;
470
+ }
471
+ }
472
+ }
473
+ }
474
+ }
475
+
476
+ &.disabled {
477
+ .dropdown_wrapper {
478
+ .dropdown_trigger_wrapper,
479
+ .dropdown_trigger_wrapper_focus,
480
+ .dropdown_trigger_wrapper_focus_select_only,
481
+ .dropdown_trigger_wrapper_select_only {
482
+ background-color: $input_background_disabled;
483
+ box-shadow: none !important;
484
+ cursor: default !important;
485
+ opacity: 0.5;
486
+ pointer-events: none;
487
+
488
+ input {
489
+ background-color: $input_background_disabled;
490
+ color: $input_text_disabled;
491
+ cursor: default !important;
492
+ }
379
493
  }
380
494
  }
381
495
  }
@@ -93,6 +93,7 @@ type DropdownProps = {
93
93
  closeOnClick?: "outside" | "inside" | "any";
94
94
  constrainHeight?: boolean;
95
95
  customQuickPickDates?: CustomQuickPickDates;
96
+ disabled?: boolean;
96
97
  formPillProps?: GenericObject;
97
98
  dark?: boolean;
98
99
  data?: { [key: string]: string };
@@ -139,6 +140,7 @@ let Dropdown = (props: DropdownProps, ref: any): React.ReactElement | null => {
139
140
  dark = false,
140
141
  data = {},
141
142
  defaultValue = {},
143
+ disabled = false,
142
144
  error,
143
145
  htmlOptions = {},
144
146
  id,
@@ -164,6 +166,7 @@ let Dropdown = (props: DropdownProps, ref: any): React.ReactElement | null => {
164
166
  const separatorsClass = separators ? '' : 'separators_hidden'
165
167
  const classes = classnames(
166
168
  buildCss("pb_dropdown", variant, separatorsClass),
169
+ disabled && "disabled",
167
170
  globalProps(props),
168
171
  className
169
172
  );
@@ -174,7 +177,7 @@ let Dropdown = (props: DropdownProps, ref: any): React.ReactElement | null => {
174
177
  : (options || []);
175
178
  // ----------------------------------------------------------
176
179
 
177
- const [isDropDownClosed, setIsDropDownClosed, toggleDropdown] = useDropdown(isClosed);
180
+ const [isDropDownClosed, setIsDropDownClosed, toggleDropdown] = useDropdown(disabled ? true : isClosed);
178
181
 
179
182
  // Use a suffix for the trigger ID to avoid conflict with the outer div's id
180
183
  const sanitizeForId = (str: string) =>
@@ -228,6 +231,7 @@ let Dropdown = (props: DropdownProps, ref: any): React.ReactElement | null => {
228
231
 
229
232
  const handleLabelClick = (e: React.MouseEvent) => {
230
233
  e.stopPropagation();
234
+ if (disabled) return;
231
235
  if (selectId) {
232
236
  const trigger = document.getElementById(selectId);
233
237
  if (trigger) trigger.focus();
@@ -269,8 +273,8 @@ let Dropdown = (props: DropdownProps, ref: any): React.ReactElement | null => {
269
273
 
270
274
  // dropdown to toggle with external control
271
275
  useEffect(() => {
272
- setIsDropDownClosed(isClosed)
273
- }, [isClosed])
276
+ setIsDropDownClosed(disabled ? true : isClosed)
277
+ }, [disabled, isClosed])
274
278
 
275
279
  const blankSelectionOption: GenericObject = blankSelection ? [{ label: blankSelection, value: "" }] : [];
276
280
  const optionsWithBlankSelection = blankSelectionOption.concat(dropdownOptions);
@@ -330,12 +334,14 @@ let Dropdown = (props: DropdownProps, ref: any): React.ReactElement | null => {
330
334
 
331
335
 
332
336
  const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {
337
+ if (disabled) return;
333
338
  setFilterItem(e.target.value);
334
339
  setIsDropDownClosed(false);
335
340
  };
336
341
 
337
342
 
338
343
  const handleOptionClick = (clickedItem: GenericObject) => {
344
+ if (disabled) return;
339
345
  const shouldCloseOnClick = closeOnClick === "any" || closeOnClick === "inside";
340
346
 
341
347
  if (multiSelect) {
@@ -378,11 +384,13 @@ let Dropdown = (props: DropdownProps, ref: any): React.ReactElement | null => {
378
384
  };
379
385
 
380
386
  const handleWrapperClick = () => {
387
+ if (disabled) return;
381
388
  autocomplete && inputRef?.current?.focus();
382
389
  toggleDropdown();
383
390
  };
384
391
 
385
392
  const handleBackspace = () => {
393
+ if (disabled) return;
386
394
  if (multiSelect) {
387
395
  setSelected([]);
388
396
  onSelect && onSelect([]);
@@ -502,6 +510,7 @@ let Dropdown = (props: DropdownProps, ref: any): React.ReactElement | null => {
502
510
  blankSelection,
503
511
  clearable,
504
512
  dropdownContainerRef,
513
+ disabled,
505
514
  error,
506
515
  errorId,
507
516
  filterItem,
@@ -564,7 +573,7 @@ let Dropdown = (props: DropdownProps, ref: any): React.ReactElement | null => {
564
573
  }
565
574
  }, 0);
566
575
  }}
567
- onFocus={() => setIsInputFocused(true)}
576
+ onFocus={() => !disabled && setIsInputFocused(true)}
568
577
  ref={dropdownRef}
569
578
  >
570
579
  {children ? (
@@ -0,0 +1,93 @@
1
+ <%
2
+ options = [
3
+ {
4
+ label: "Jasper Furniss",
5
+ value: "jasperFurniss",
6
+ territory: "PHL",
7
+ title: "Lead UX Engineer",
8
+ id: "jasper-furniss",
9
+ status: "Offline"
10
+ },
11
+ {
12
+ label: "Ramon Ruiz",
13
+ value: "ramonRuiz",
14
+ territory: "PHL",
15
+ title: "Senior UX Designer",
16
+ id: "ramon-ruiz",
17
+ status: "Unavailable",
18
+ disabled: true
19
+ },
20
+ {
21
+ label: "Carlos Lima",
22
+ value: "carlosLima",
23
+ territory: "PHL",
24
+ title: "Nitro Developer",
25
+ id: "carlos-lima",
26
+ status: "Online"
27
+ },
28
+ {
29
+ label: "Courtney Long",
30
+ value: "courtneyLong",
31
+ territory: "PHL",
32
+ title: "Lead UX Designer",
33
+ id: "courtney-long",
34
+ status: "Online"
35
+ }
36
+ ]
37
+ %>
38
+
39
+ <%
40
+ custom_display = capture do
41
+ pb_rails("flex", props: { align: "center" }) do
42
+ concat(pb_rails("avatar", props: { name: "", size: "xs", id: "dropdown-avatar" }))
43
+ concat(pb_rails("body", props: { text: "", size: "xs", margin_x: "xs", id: "dropdown-avatar-name" }))
44
+ concat(pb_rails("badge", props: { text: "", id: "dropdown-avatar-status" }))
45
+ end
46
+ end
47
+ %>
48
+
49
+ <%= pb_rails("dropdown", props: { id: "user-dropdown-disabled-options", options: options }) do %>
50
+ <%= pb_rails("dropdown/dropdown_trigger", props: { placeholder: "Select a User", custom_display: custom_display }) %>
51
+ <%= pb_rails("dropdown/dropdown_container") do %>
52
+ <% options.each do |option| %>
53
+ <%= pb_rails("dropdown/dropdown_option", props: { option: option }) do %>
54
+ <%= pb_rails("flex", props: { align: "center", justify: "between" }) do %>
55
+ <%= pb_rails("flex/flex_item") do %>
56
+ <%= pb_rails("user", props: { name: option[:label], align: "left", avatar: true, orientation: "horizontal", territory: option[:territory], title: option[:title] }) %>
57
+ <% end %>
58
+ <%= pb_rails("flex/flex_item") do %>
59
+ <%= pb_rails("badge", props: { rounded: true, dark: true, text: option[:status], variant: option[:status] == "Offline" ? "neutral" : option[:status] == "Online" ? "success" : "warning" }) %>
60
+ <% end %>
61
+ <% end %>
62
+ <% end %>
63
+ <% end %>
64
+ <% end %>
65
+ <% end %>
66
+
67
+ <script>
68
+ document.addEventListener("pb:dropdown:selected", (e) => {
69
+ if (e.target.id !== "user-dropdown-disabled-options") return;
70
+
71
+ const option = e.detail;
72
+ const dropdown = e.target;
73
+ const display = dropdown.querySelector("[data-dropdown-trigger-custom-display]");
74
+ if (!display) return;
75
+
76
+ const nameEl = display.querySelector("#dropdown-avatar-name");
77
+ if (nameEl) nameEl.textContent = option.label;
78
+
79
+ const avatarWrapper = display.querySelector("#dropdown-avatar .avatar_wrapper");
80
+ if (avatarWrapper) {
81
+ const initials = (option.label[0] + option.label.split(" ").pop()[0]).toUpperCase();
82
+ avatarWrapper.dataset.name = option.label;
83
+ avatarWrapper.setAttribute("data-initials", initials);
84
+ }
85
+
86
+ const badgeEl = display.querySelector("#dropdown-avatar-status");
87
+ const variant = option.status === "Online" ? "success" : option.status === "Offline" ? "neutral" : "warning";
88
+ if (badgeEl) {
89
+ badgeEl.querySelector("span").textContent = option.status;
90
+ badgeEl.className = `pb_badge_kit_${variant}`;
91
+ }
92
+ });
93
+ </script>
@@ -0,0 +1,127 @@
1
+ import React, { useState } from 'react'
2
+
3
+ import Dropdown from '../../pb_dropdown/_dropdown'
4
+ import Badge from '../../pb_badge/_badge'
5
+ import Flex from '../../pb_flex/_flex'
6
+ import FlexItem from '../../pb_flex/_flex_item'
7
+ import Avatar from '../../pb_avatar/_avatar'
8
+ import User from '../../pb_user/_user'
9
+ import Body from '../../pb_body/_body'
10
+
11
+ const DropdownCustomDisplayDisabledOption = (props) => {
12
+ const [selectedOption, setSelectedOption] = useState();
13
+
14
+ const options = [
15
+ {
16
+ label: "Jasper Furniss",
17
+ value: "jasperFurniss",
18
+ territory: "PHL",
19
+ title: "Lead UX Engineer",
20
+ id: "jasper-furniss",
21
+ status: "Offline"
22
+ },
23
+ {
24
+ label: "Ramon Ruiz",
25
+ value: "ramonRuiz",
26
+ territory: "PHL",
27
+ title: "Senior UX Designer",
28
+ id: "ramon-ruiz",
29
+ status: "Unavailable",
30
+ disabled: true
31
+ },
32
+ {
33
+ label: "Carlos Lima",
34
+ value: "carlosLima",
35
+ territory: "PHL",
36
+ title: "Nitro Developer",
37
+ id: "carlos-lima",
38
+ status: "Online"
39
+ },
40
+ {
41
+ label: "Courtney Long",
42
+ value: "courtneyLong",
43
+ territory: "PHL",
44
+ title: "Lead UX Designer",
45
+ id: "courtney-long",
46
+ status: "Online"
47
+ }
48
+ ];
49
+
50
+ const CustomDisplay = () => {
51
+ return (
52
+ <>
53
+ {
54
+ selectedOption && (
55
+ <Flex align="center">
56
+ <Avatar
57
+ name={selectedOption.label}
58
+ size="xs"
59
+ />
60
+ <Body
61
+ marginX="xs"
62
+ text={selectedOption.label}
63
+ />
64
+ <Badge
65
+ text={selectedOption.status}
66
+ variant={selectedOption.status == "Offline" ? "neutral" : selectedOption.status == "Online" ? "success" : "warning"}
67
+ />
68
+ </Flex>
69
+ )
70
+ }
71
+ </>
72
+ )
73
+ };
74
+
75
+
76
+ return (
77
+ <div>
78
+ <Dropdown
79
+ onSelect={(selectedItem) => setSelectedOption(selectedItem)}
80
+ options={options}
81
+ {...props}
82
+ >
83
+ <Dropdown.Trigger customDisplay={<CustomDisplay/>}
84
+ placeholder="Select a User"
85
+ />
86
+ {options.map((option) => (
87
+ <Dropdown.Option key={option.id}
88
+ option={option}
89
+ >
90
+ <Flex
91
+ align="center"
92
+ justify="between"
93
+ >
94
+ <FlexItem>
95
+ <User
96
+ align="left"
97
+ avatar
98
+ name={option.label}
99
+ orientation="horizontal"
100
+ territory={option.territory}
101
+ title={option.title}
102
+ />
103
+ </FlexItem>
104
+ <FlexItem>
105
+ <Badge dark
106
+ rounded
107
+ text={option.status}
108
+ variant={`${
109
+ option.status === "Offline"
110
+ ? "neutral"
111
+ : option.status === "Unavailable"
112
+ ? "warning"
113
+ : option.status === "Online"
114
+ ? "success"
115
+ : "warning"
116
+ }`}
117
+ />
118
+ </FlexItem>
119
+ </Flex>
120
+ </Dropdown.Option>
121
+ ))}
122
+ </Dropdown>
123
+ </div>
124
+ )
125
+ }
126
+
127
+ export default DropdownCustomDisplayDisabledOption
@@ -0,0 +1 @@
1
+ To disable individual items in the `options`, include `disabled: true` within the object on the option that you want disabled. See the code snippet below for an example of how to do this.
@@ -0,0 +1,10 @@
1
+ <%
2
+ options = [
3
+ { label: 'United States', value: 'unitedStates', id: 'us' },
4
+ { label: 'Canada', value: 'canada', id: 'ca' },
5
+ { label: 'Pakistan', value: 'pakistan', id: 'pk' },
6
+ ]
7
+
8
+ %>
9
+
10
+ <%= pb_rails("dropdown", props: {id: "dropdown-disabled", disabled: true,label: "Default Dropdown", options: options}) %>
@@ -0,0 +1,37 @@
1
+ import React from 'react'
2
+ import Dropdown from '../_dropdown'
3
+
4
+ const DropdownDisabled = (props) => {
5
+
6
+ const options = [
7
+ {
8
+ label: "United States",
9
+ value: "unitedStates",
10
+ id: "us"
11
+ },
12
+ {
13
+ label: "Canada",
14
+ value: "canada",
15
+ id: "ca"
16
+ },
17
+ {
18
+ label: "Pakistan",
19
+ value: "pakistan",
20
+ id: "pk"
21
+ }
22
+ ];
23
+
24
+
25
+ return (
26
+ <div>
27
+ <Dropdown
28
+ disabled
29
+ label="Default Dropdown"
30
+ options={options}
31
+ {...props}
32
+ />
33
+ </div>
34
+ )
35
+ }
36
+
37
+ export default DropdownDisabled
@@ -0,0 +1,10 @@
1
+ <%
2
+ options = [
3
+ { label: "Available Option", value: "available", id: "available-option" },
4
+ { label: "Coming Soon", value: "coming-soon", id: "coming-soon", disabled: true },
5
+ { label: "Another Available", value: "another-available", id: "another-available" },
6
+ { label: "Locked Feature", value: "locked-feature", id: "locked-feature", disabled: true },
7
+ ]
8
+ %>
9
+
10
+ <%= pb_rails("dropdown", props: { label: "Disabled Options", options: options }) %>
@@ -0,0 +1,37 @@
1
+ import React, { useState } from 'react'
2
+
3
+ import Dropdown from '../../pb_dropdown/_dropdown'
4
+ import Caption from '../../pb_caption/_caption'
5
+
6
+ const DropdownDisabledOption = (props) => {
7
+ const [selectedOption, setSelectedOption] = useState()
8
+
9
+ const options = [
10
+ { label: 'Available Option', value: 'available', id: 'available-option' },
11
+ { label: 'Coming Soon', value: 'coming-soon', id: 'coming-soon', disabled: true },
12
+ { label: 'Another Available', value: 'another-available', id: 'another-available' },
13
+ { label: 'Locked Feature', value: 'locked-feature', id: 'locked-feature', disabled: true },
14
+ ]
15
+
16
+ return (
17
+ <div>
18
+ <Caption
19
+ text="Select an option. Disabled options remain visible but cannot be selected."
20
+ />
21
+ <Dropdown
22
+ onSelect={(selectedItem) => setSelectedOption(selectedItem)}
23
+ options={options}
24
+ placeholder="Choose an option"
25
+ {...props}
26
+ />
27
+ {selectedOption && (
28
+ <Caption
29
+ marginTop="xs"
30
+ text={`Selected: ${selectedOption.label}`}
31
+ />
32
+ )}
33
+ </div>
34
+ )
35
+ }
36
+
37
+ export default DropdownDisabledOption
@@ -0,0 +1 @@
1
+ To disable individual items in the `options`, include `disabled: true` within the object on the option that you want disabled. See the code snippet below for an example of how to do this.
@@ -6,12 +6,14 @@ examples:
6
6
  - dropdown_multi_select_with_autocomplete: Multi Select with Autocomplete
7
7
  - dropdown_multi_select_display_rails: Multi Select with Form Pill Props
8
8
  - dropdown_subtle_variant: Subtle Variant
9
+ - dropdown_disabled_option: Disabled Option
9
10
  - dropdown_subcomponent_structure_rails: Subcomponent Structure
10
11
  - dropdown_with_autocomplete_with_subcomponents: Autocomplete with Subcomponent Structure
11
12
  - dropdown_with_label: With Label
12
13
  - dropdown_with_custom_options_rails: Custom Options
13
14
  - dropdown_multi_select_with_custom_options: Multi Select with Custom Options
14
15
  - dropdown_with_custom_display_rails: Custom Display
16
+ - dropdown_custom_display_disabled_option: Custom Display Disabled Option
15
17
  - dropdown_with_custom_trigger_rails: Custom Trigger
16
18
  - dropdown_with_search_rails: Custom Trigger Dropdown with Search
17
19
  - dropdown_with_custom_padding: Custom Option Padding
@@ -33,6 +35,7 @@ examples:
33
35
  - dropdown_quickpick_with_date_pickers_rails: Quick Pick with Date Pickers
34
36
  - dropdown_quickpick_with_date_pickers_default_rails: Quick Pick with Date Pickers (Default Value)
35
37
  - dropdown_required_indicator: Required Indicator
38
+ - dropdown_disabled: Disabled Input
36
39
  - dropdown_custom_event_type: Custom Event Type
37
40
 
38
41
  react:
@@ -42,10 +45,12 @@ examples:
42
45
  - dropdown_multi_select_with_autocomplete: Multi Select with Autocomplete
43
46
  - dropdown_multi_select_display: Multi Select with Form Pill Props
44
47
  - dropdown_subtle_variant: Subtle Variant
48
+ - dropdown_disabled_option: Disabled Option
45
49
  - dropdown_subcomponent_structure: Subcomponent Structure
46
50
  - dropdown_with_autocomplete_with_subcomponents: Autocomplete with Subcomponent Structure
47
51
  - dropdown_with_label: With Label
48
52
  - dropdown_with_custom_options: Custom Options
53
+ - dropdown_custom_display_disabled_option: Custom Display Disabled Option
49
54
  - dropdown_multi_select_with_custom_options: Multi Select with Custom Options
50
55
  - dropdown_with_custom_display: Custom Display
51
56
  - dropdown_with_custom_trigger: Custom Trigger
@@ -71,3 +76,4 @@ examples:
71
76
  - dropdown_quickpick_custom: Quick Pick Variant (Custom Quick Pick Dates)
72
77
  - dropdown_quickpick_with_date_pickers: Quick Pick Variant with Date Pickers
73
78
  - dropdown_required_indicator: Required Indicator
79
+ - dropdown_disabled: Disabled Input
@@ -33,3 +33,6 @@ export { default as DropdownWithClearable } from './_dropdown_with_clearable.jsx
33
33
  export { default as DropdownWithConstrainHeight } from './_dropdown_with_constrain_height.jsx'
34
34
  export { default as DropdownClosingOptions } from './_dropdown_closing_options.jsx'
35
35
  export { default as DropdownRequiredIndicator } from "./_dropdown_required_indicator.jsx";
36
+ export { default as DropdownDisabledOption } from "./_dropdown_disabled_option.jsx";
37
+ export { default as DropdownCustomDisplayDisabledOption } from "./_dropdown_custom_display_disabled_option.jsx";
38
+ export { default as DropdownDisabled } from "./_dropdown_disabled.jsx";