playbook_ui 14.5.0.pre.alpha.PLAY1485selectablecardoverflowoutlinebug4216 → 14.5.0.pre.alpha.PLAY1486highchartscssdrivenPOC3930

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 (123) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.tsx +7 -25
  3. data/app/pb_kits/playbook/pb_advanced_table/docs/example.yml +0 -2
  4. data/app/pb_kits/playbook/pb_advanced_table/docs/index.js +0 -1
  5. data/app/pb_kits/playbook/pb_advanced_table/index.js +0 -60
  6. data/app/pb_kits/playbook/pb_advanced_table/table_header.html.erb +9 -1
  7. data/app/pb_kits/playbook/pb_advanced_table/table_subrow_header.html.erb +9 -1
  8. data/app/pb_kits/playbook/pb_bar_graph/_bar_graph.scss +54 -0
  9. data/app/pb_kits/playbook/pb_bar_graph/_bar_graph.tsx +5 -184
  10. data/app/pb_kits/playbook/pb_bar_graph/barGraph.test.js +1 -1
  11. data/app/pb_kits/playbook/pb_card/_card.tsx +1 -5
  12. data/app/pb_kits/playbook/pb_card/_card_mixin.scss +2 -1
  13. data/app/pb_kits/playbook/pb_circle_chart/_circle_chart.tsx +5 -216
  14. data/app/pb_kits/playbook/pb_circle_chart/circleChart.test.js +1 -1
  15. data/app/pb_kits/playbook/pb_dialog/_dialog.tsx +1 -5
  16. data/app/pb_kits/playbook/pb_dialog/docs/_dialog_loading.html.erb +7 -30
  17. data/app/pb_kits/playbook/pb_dialog/docs/_dialog_loading.md +2 -0
  18. data/app/pb_kits/playbook/pb_dropdown/_dropdown.scss +3 -84
  19. data/app/pb_kits/playbook/pb_dropdown/_dropdown.tsx +5 -28
  20. data/app/pb_kits/playbook/pb_dropdown/docs/example.yml +0 -5
  21. data/app/pb_kits/playbook/pb_dropdown/docs/index.js +0 -3
  22. data/app/pb_kits/playbook/pb_dropdown/dropdown.rb +1 -10
  23. data/app/pb_kits/playbook/pb_dropdown/subcomponents/DropdownOption.tsx +1 -1
  24. data/app/pb_kits/playbook/pb_dropdown/subcomponents/DropdownTrigger.tsx +2 -2
  25. data/app/pb_kits/playbook/pb_filter/Filter/FilterDouble.tsx +0 -2
  26. data/app/pb_kits/playbook/pb_filter/Filter/FilterSingle.tsx +0 -2
  27. data/app/pb_kits/playbook/pb_filter/Filter/FiltersPopover.tsx +1 -4
  28. data/app/pb_kits/playbook/pb_filter/Filter/ResultsCount.tsx +2 -4
  29. data/app/pb_kits/playbook/pb_filter/docs/_filter_default.jsx +1 -1
  30. data/app/pb_kits/playbook/pb_filter/docs/example.yml +0 -3
  31. data/app/pb_kits/playbook/pb_filter/docs/index.js +0 -1
  32. data/app/pb_kits/playbook/pb_filter/filter.html.erb +2 -2
  33. data/app/pb_kits/playbook/pb_filter/filter.rb +0 -2
  34. data/app/pb_kits/playbook/pb_flex/_flex.tsx +1 -3
  35. data/app/pb_kits/playbook/pb_flex/_flex_item.tsx +2 -8
  36. data/app/pb_kits/playbook/pb_flex/flex_item.html.erb +6 -3
  37. data/app/pb_kits/playbook/pb_flex/flex_item.rb +2 -7
  38. data/app/pb_kits/playbook/pb_form/docs/example.yml +0 -1
  39. data/app/pb_kits/playbook/pb_form/form.rb +0 -2
  40. data/app/pb_kits/playbook/pb_form_pill/_form_pill.tsx +1 -9
  41. data/app/pb_kits/playbook/pb_form_pill/docs/example.yml +0 -2
  42. data/app/pb_kits/playbook/pb_form_pill/docs/index.js +0 -1
  43. data/app/pb_kits/playbook/pb_gantt_chart/_gantt_chart.tsx +3 -64
  44. data/app/pb_kits/playbook/pb_gauge/_gauge.tsx +5 -203
  45. data/app/pb_kits/playbook/pb_gauge/gauge.test.js +1 -1
  46. data/app/pb_kits/playbook/pb_line_graph/_line_graph.tsx +5 -154
  47. data/app/pb_kits/playbook/pb_line_graph/lineGraph.test.js +1 -1
  48. data/app/pb_kits/playbook/pb_multi_level_select/_multi_level_select.tsx +227 -211
  49. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_default.jsx +1 -1
  50. data/app/pb_kits/playbook/pb_multi_level_select/docs/example.yml +0 -4
  51. data/app/pb_kits/playbook/pb_multi_level_select/docs/index.js +0 -2
  52. data/app/pb_kits/playbook/pb_multiple_users_stacked/_multiple_users_stacked.scss +65 -169
  53. data/app/pb_kits/playbook/pb_multiple_users_stacked/_multiple_users_stacked.test.js +5 -5
  54. data/app/pb_kits/playbook/pb_multiple_users_stacked/_multiple_users_stacked.tsx +9 -15
  55. data/app/pb_kits/playbook/pb_multiple_users_stacked/docs/example.yml +0 -2
  56. data/app/pb_kits/playbook/pb_multiple_users_stacked/docs/index.js +0 -1
  57. data/app/pb_kits/playbook/pb_multiple_users_stacked/multiple_users_stacked.html.erb +6 -28
  58. data/app/pb_kits/playbook/pb_multiple_users_stacked/multiple_users_stacked.rb +1 -31
  59. data/app/pb_kits/playbook/pb_phone_number_input/_phone_number_input.scss +18 -86
  60. data/app/pb_kits/playbook/pb_phone_number_input/_phone_number_input.tsx +6 -15
  61. data/app/pb_kits/playbook/pb_phone_number_input/docs/_phone_number_input_preferred_countries.md +1 -1
  62. data/app/pb_kits/playbook/pb_phone_number_input/intlTelInput.scss +931 -849
  63. data/app/pb_kits/playbook/pb_phone_number_input/types.d.ts +1 -4
  64. data/app/pb_kits/playbook/pb_popover/_popover.tsx +2 -6
  65. data/app/pb_kits/playbook/pb_popover/docs/_popover_default.html.erb +1 -1
  66. data/app/pb_kits/playbook/pb_popover/popover.rb +1 -3
  67. data/app/pb_kits/playbook/pb_selectable_card/_selectable_card.scss +1 -67
  68. data/app/pb_kits/playbook/pb_selectable_card/_selectable_card.tsx +0 -1
  69. data/app/pb_kits/playbook/pb_selectable_card/selectable_card.html.erb +1 -1
  70. data/app/pb_kits/playbook/pb_selectable_card/selectable_card.rb +1 -5
  71. data/app/pb_kits/playbook/pb_treemap_chart/_treemap_chart.tsx +5 -113
  72. data/app/pb_kits/playbook/pb_treemap_chart/treemapChart.test.js +1 -1
  73. data/app/pb_kits/playbook/pb_typeahead/_typeahead.tsx +1 -4
  74. data/app/pb_kits/playbook/pb_typeahead/components/MultiValue.tsx +1 -3
  75. data/app/pb_kits/playbook/pb_typeahead/typeahead.rb +1 -3
  76. data/app/pb_kits/playbook/utilities/globalPropNames.mjs +0 -3
  77. data/app/pb_kits/playbook/utilities/globalProps.ts +2 -39
  78. data/dist/chunks/_typeahead-BywvWGAm.js +22 -0
  79. data/dist/chunks/_weekday_stacked-5OGZKZeo.js +45 -0
  80. data/dist/chunks/lib-DMOmCoAX.js +29 -0
  81. data/dist/chunks/{pb_form_validation-BkWGwJsl.js → pb_form_validation-Dna2I7fw.js} +1 -1
  82. data/dist/chunks/vendor.js +1 -1
  83. data/dist/playbook-doc.js +1 -1
  84. data/dist/playbook-rails-react-bindings.js +1 -1
  85. data/dist/playbook-rails.js +1 -1
  86. data/dist/playbook.css +1 -1
  87. data/lib/playbook/kit_base.rb +1 -21
  88. data/lib/playbook/pb_doc_helper.rb +5 -5
  89. data/lib/playbook/pb_forms_helper.rb +1 -3
  90. data/lib/playbook/version.rb +1 -1
  91. metadata +6 -35
  92. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_custom_cell.jsx +0 -72
  93. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_custom_cell.md +0 -5
  94. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_clear_selection.jsx +0 -45
  95. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_clear_selection.md +0 -1
  96. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_separators_hidden.html.erb +0 -9
  97. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_separators_hidden.jsx +0 -33
  98. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_subtle_variant.html.erb +0 -10
  99. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_subtle_variant.jsx +0 -34
  100. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_subtle_variant.md +0 -1
  101. data/app/pb_kits/playbook/pb_filter/docs/_filter_popover_props.html.erb +0 -41
  102. data/app/pb_kits/playbook/pb_filter/docs/_filter_popover_props.jsx +0 -71
  103. data/app/pb_kits/playbook/pb_filter/docs/_filter_popover_props_rails.md +0 -1
  104. data/app/pb_kits/playbook/pb_filter/docs/_filter_popover_props_react.md +0 -1
  105. data/app/pb_kits/playbook/pb_form/docs/_form_form_with_loading.html.erb +0 -39
  106. data/app/pb_kits/playbook/pb_form/docs/_form_form_with_loading.md +0 -1
  107. data/app/pb_kits/playbook/pb_form/formHelper.js +0 -27
  108. data/app/pb_kits/playbook/pb_form_pill/docs/_form_pill_truncated_text.html.erb +0 -19
  109. data/app/pb_kits/playbook/pb_form_pill/docs/_form_pill_truncated_text.jsx +0 -27
  110. data/app/pb_kits/playbook/pb_form_pill/docs/_form_pill_truncated_text.md +0 -1
  111. data/app/pb_kits/playbook/pb_multi_level_select/context/index.tsx +0 -5
  112. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_reset.html.erb +0 -93
  113. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_reset.md +0 -1
  114. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_with_children.jsx +0 -105
  115. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_with_children.md +0 -1
  116. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_with_children_with_radios.jsx +0 -106
  117. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_with_children_with_radios.md +0 -1
  118. data/app/pb_kits/playbook/pb_multi_level_select/multi_level_select_options.tsx +0 -149
  119. data/app/pb_kits/playbook/pb_multiple_users_stacked/docs/_multiple_users_stacked_size.html.erb +0 -336
  120. data/app/pb_kits/playbook/pb_multiple_users_stacked/docs/_multiple_users_stacked_size.jsx +0 -97
  121. data/dist/chunks/_typeahead-BhHnXJjy.js +0 -22
  122. data/dist/chunks/_weekday_stacked-B9Sy5PN8.js +0 -45
  123. data/dist/chunks/lib-D-mTv-kp.js +0 -29
@@ -1,221 +1,10 @@
1
- import React, { useEffect, useState } from "react";
2
- import classnames from "classnames";
3
- import HighchartsReact from "highcharts-react-official";
4
- import highchartsMore from "highcharts/highcharts-more";
5
-
6
- import Highcharts from "highcharts";
7
-
8
- import { highchartsTheme } from "../pb_dashboard/pbChartsLightTheme";
9
- import { highchartsDarkTheme } from "../pb_dashboard/pbChartsDarkTheme";
10
- import mapColors from "../pb_dashboard/pbChartsColorsHelper";
11
- import { globalProps } from "../utilities/globalProps";
12
- import { buildAriaProps, buildDataProps, buildHtmlProps } from "../utilities/props";
13
- import { merge } from 'lodash'
14
-
15
- type CircleChartProps = {
16
- align?: "left" | "right" | "center";
17
- aria: { [key: string]: string };
18
- chartData?: [];
19
- children?: Node;
20
- className?: string;
21
- colors?: string[];
22
- customOptions?: Partial<Highcharts.Options>;
23
- dark?: boolean;
24
- data?: {[key: string]: string},
25
- dataLabelHtml?: string;
26
- dataLabels?: boolean;
27
- height?: string;
28
- htmlOptions?: { [key: string]: string | number | boolean | (() => void) };
29
- id?: string;
30
- innerSize?: "sm" | "md" | "lg" | "none";
31
- legend?: boolean;
32
- maxPointSize?: number;
33
- minPointSize?: number;
34
- rounded?: boolean;
35
- startAngle?: number;
36
- style?: string;
37
- title?: string;
38
- tooltipHtml: string;
39
- useHtml?: boolean;
40
- zMin?: number;
41
- layout?: "horizontal" | "vertical" | "proximate";
42
- verticalAlign?: "top" | "middle" | "bottom";
43
- x?: number;
44
- y?: number;
45
- borderColor?: string;
46
- borderWidth?: number;
47
- };
48
-
49
-
50
-
51
- const alignBlockElement = (event: any) => {
52
- const itemToMove = document.querySelector<HTMLElement>(
53
- `#wrapper-circle-chart-${event.target.renderTo.id} .pb-circle-chart-block`
54
- );
55
- const chartContainer = document.querySelector(`#${event.target.renderTo.id}`);
56
-
57
- if (itemToMove !== null && chartContainer !== null) {
58
- itemToMove.style.height = `${event.target.chartHeight}px`;
59
- itemToMove.style.width = `${event.target.chartWidth}px`;
60
- if (chartContainer.firstChild !== null) {
61
- chartContainer.firstChild.before(itemToMove);
62
- }
63
- }
64
- };
65
-
66
- const CircleChart = ({
67
- align = "center",
68
- aria = {},
69
- rounded = false,
70
- borderColor = rounded ? null : "",
71
- borderWidth = rounded ? 20 : null,
72
- chartData,
73
- children,
74
- className,
75
- colors = [],
76
- customOptions = {},
77
- dark = false,
78
- data = {},
79
- dataLabelHtml = "<div>{point.name}</div>",
80
- dataLabels = false,
81
- height,
82
- htmlOptions = {},
83
- id,
84
- innerSize = "md",
85
- legend = false,
86
- maxPointSize = null,
87
- minPointSize = null,
88
- startAngle = null,
89
- style = "pie",
90
- title,
91
- tooltipHtml,
92
- useHtml = false,
93
- zMin = null,
94
- layout = "horizontal",
95
- verticalAlign = "bottom",
96
- x = 0,
97
- y = 0,
98
- ...props
99
- }: CircleChartProps) => {
100
- const ariaProps = buildAriaProps(aria);
101
- const dataProps = buildDataProps(data)
102
- const htmlProps = buildHtmlProps(htmlOptions);
103
- highchartsMore(Highcharts);
104
-
105
- const setupTheme = () => {
106
- dark
107
- ? Highcharts.setOptions(highchartsDarkTheme)
108
- : Highcharts.setOptions(highchartsTheme);
109
- };
110
- setupTheme();
111
-
112
- Highcharts.setOptions({
113
- tooltip: {
114
- headerFormat: null,
115
- pointFormat: tooltipHtml ? tooltipHtml : '<span style="font-weight: bold; color:{point.color};">●</span>{point.name}: ' + "<b>{point.y}</b>",
116
- useHTML: useHtml,
117
- },
118
- });
119
-
120
- const innerSizes = { sm: "35%", md: "50%", lg: "85%", none: "0%" };
121
- const innerSizeFormat = (size: "sm" | "md" | "lg" | "none") =>
122
- innerSizes[size];
123
-
124
-
125
- const filteredProps: any = {...props};
126
- delete filteredProps.verticalAlign;
127
-
128
- const [options, setOptions] = useState({});
129
-
130
- useEffect(() => {
131
- const formattedChartData = chartData.map((obj: any) => {
132
- obj.y = obj.value;
133
- delete obj.value;
134
- return obj;
135
- });
136
-
137
- const staticOptions = {
138
- title: {
139
- text: title,
140
- },
141
- chart: {
142
- height: height,
143
- type: style,
144
- events: {
145
- render: (event: any) => alignBlockElement(event),
146
- redraw: (event: any) => alignBlockElement(event),
147
- },
148
- },
149
-
150
- legend: {
151
- align: align,
152
- verticalAlign: verticalAlign,
153
- layout: layout,
154
- x: x,
155
- y: y,
156
- },
157
- plotOptions: {
158
- pie: {
159
- colors:
160
- colors.length > 0 ? mapColors(colors) : highchartsTheme.colors,
161
- dataLabels: {
162
- enabled: dataLabels,
163
- connectorShape: "straight",
164
- connectorWidth: 3,
165
- format: dataLabelHtml,
166
- },
167
- showInLegend: legend,
168
- },
169
- },
170
- series: [
171
- {
172
- minPointSize: minPointSize,
173
- maxPointSize: maxPointSize,
174
- innerSize: borderWidth == 20 ? "100%" : innerSizeFormat(innerSize),
175
- data: formattedChartData,
176
- zMin: zMin,
177
- startAngle: startAngle,
178
- borderWidth: borderWidth,
179
- borderColor: borderColor,
180
- },
181
- ],
182
- credits: false,
183
- };
184
- setOptions(merge(staticOptions, customOptions));
185
- }, [chartData]);
186
-
1
+ import React from 'react';
187
2
 
3
+ const CircleChart: React.FC = () => {
188
4
  return (
189
- <>
190
- {children ? (
191
- <div id={`wrapper-circle-chart-${id}`}>
192
- <HighchartsReact
193
- containerProps={{
194
- className: classnames("pb_circle_chart", globalProps(filteredProps)),
195
- id: id,
196
- ...ariaProps,
197
- ...dataProps,
198
- ...htmlProps,
199
- }}
200
- highcharts={Highcharts}
201
- options={options}
202
- />
203
- <div className="pb-circle-chart-block">{children}</div>
204
- </div>
205
- ) : (
206
- <HighchartsReact
207
- containerProps={{
208
- className: classnames("pb_circle_chart", globalProps(filteredProps)),
209
- id: id,
210
- ...ariaProps,
211
- ...dataProps,
212
- ...htmlProps,
213
- }}
214
- highcharts={Highcharts}
215
- options={options}
216
- />
217
- )}
218
- </>
5
+ <div>
6
+ This is a simple div component.
7
+ </div>
219
8
  );
220
9
  };
221
10
 
@@ -17,7 +17,7 @@ afterEach(() => {
17
17
 
18
18
  const testId = 'circlechart1';
19
19
 
20
- test('uses exact classname', () => {
20
+ test.skip('uses exact classname', () => {
21
21
  const data = [
22
22
  {
23
23
  name: 'Waiting for Calls',
@@ -6,7 +6,7 @@ import classnames from "classnames";
6
6
  import Modal from "react-modal";
7
7
 
8
8
  import { buildAriaProps, buildCss, buildDataProps, buildHtmlProps } from "../utilities/props";
9
- import { globalProps, globalInlineProps } from "../utilities/globalProps";
9
+ import { globalProps } from "../utilities/globalProps";
10
10
 
11
11
  import Body from "../pb_body/_body";
12
12
  import Button from "../pb_button/_button";
@@ -91,8 +91,6 @@ const Dialog = (props: DialogProps): React.ReactElement => {
91
91
  beforeClose: "pb_dialog_overlay_before_close",
92
92
  };
93
93
 
94
- const dynamicInlineProps = globalInlineProps(props);
95
-
96
94
  const classes = classnames(
97
95
  buildCss("pb_dialog_wrapper"),
98
96
  globalProps(props),
@@ -186,7 +184,6 @@ const Dialog = (props: DialogProps): React.ReactElement => {
186
184
  overlayClassName={overlayClassNames}
187
185
  portalClassName={portalClassName}
188
186
  shouldCloseOnOverlayClick={shouldCloseOnOverlayClick && !loading}
189
- style={{ content: dynamicInlineProps }}
190
187
  >
191
188
  <>
192
189
  {title && !status ? <Dialog.Header>{title}</Dialog.Header> : null}
@@ -195,7 +192,6 @@ const Dialog = (props: DialogProps): React.ReactElement => {
195
192
  <Dialog.Body
196
193
  className="dialog_status_text_align"
197
194
  padding="md"
198
-
199
195
  >
200
196
  <Flex align="center"
201
197
  orientation="column"
@@ -1,36 +1,13 @@
1
1
  <%= pb_rails("button", props: { text: "Open Dialog", data: {"open-dialog": "dialog-loading"} }) %>
2
2
 
3
- <%= pb_rails("dialog", props: {
4
- id:"dialog-loading",
5
- size: "sm",
6
- title: "Loading Example",
7
- text: "Make a loading request?",
8
- cancel_button: "Cancel Button",
3
+ <%= pb_rails("dialog", props: {
4
+ id:"dialog-loading",
5
+ size: "sm",
6
+ title: "Loading Exmaple",
7
+ text: "Make a loading request?",
8
+ cancel_button: "Cancel Button",
9
9
  cancel_button_id: "cancel-button-loading",
10
- confirm_button: "Okay",
10
+ confirm_button: "Okay",
11
11
  confirm_button_id: "confirm-button-loading",
12
12
  loading: true,
13
13
  }) %>
14
-
15
- <script>
16
- const loadingButton = document.querySelector('[data-disable-with="Loading"]');
17
- if (loadingButton) {
18
- loadingButton.addEventListener("click", function() {
19
- const okayLoadingButton = document.querySelector('[data-disable-with="Loading"]');
20
- const cancelButton = document.querySelector('[data-disable-cancel-with="Loading"]');
21
- let currentClass = okayLoadingButton.className;
22
- let cancelClass = cancelButton ? cancelButton.className : "";
23
-
24
- setTimeout(function() {
25
- okayLoadingButton.disabled = false;
26
- okayLoadingButton.className = currentClass.replace("_disabled_loading", "_enabled");
27
-
28
- if (cancelButton) {
29
- cancelButton.disabled = false;
30
- cancelButton.className = cancelClass.replace("_disabled", "_enabled");
31
- }
32
- }, 5000);
33
-
34
- });
35
- }
36
- </script>
@@ -1 +1,3 @@
1
1
  Pressing the "Okay" button will trigger a loading state where the button content is replaced by a spinner icon and both buttons are disabled.
2
+
3
+ Currently, the loading state cannot be undone and will require a page refresh to reset the dialog.
@@ -69,21 +69,15 @@
69
69
  padding-bottom: $space_xs;
70
70
  cursor: pointer;
71
71
  &:hover {
72
- background-color: $bg_light;
72
+ background-color: $border_light;
73
73
  }
74
74
 
75
75
  &[class*="_focused"] {
76
- background-color: $bg_light;
76
+ background-color: $border_light;
77
77
  }
78
78
 
79
79
  &[class*="_list"] {
80
80
  border-bottom: 1px solid $border_light;
81
-
82
- &:hover, &:focus {
83
- .pb_body_kit {
84
- color: $primary;
85
- }
86
- }
87
81
  }
88
82
  &[class*="selected"] {
89
83
  background-color: $primary;
@@ -93,7 +87,7 @@
93
87
  color: $white !important;
94
88
  }
95
89
  &:hover {
96
- background-color: $product_1_background !important;
90
+ background-color: $primary !important;
97
91
  }
98
92
  }
99
93
  }
@@ -131,81 +125,6 @@
131
125
  }
132
126
  }
133
127
 
134
- &.separators_hidden {
135
- .dropdown_wrapper {
136
- .pb_dropdown_container {
137
-
138
- [class*="pb_dropdown_option"] {
139
- border: none;
140
- }
141
- }
142
- }
143
- }
144
-
145
- &.subtle {
146
- .dropdown_wrapper {
147
- .pb_dropdown_container {
148
-
149
- [class*="pb_dropdown_option"]:first-child {
150
- margin-top: $space_xs;
151
- }
152
-
153
- [class*="pb_dropdown_option"]:last-child {
154
- margin-bottom: $space_xs;
155
- }
156
-
157
- [class*="pb_dropdown_option"] {
158
- margin: $space_xs;
159
- padding: $space_xs;
160
- border-radius: $border_radius_md;
161
- border-bottom: none;
162
- position: relative;
163
-
164
- &::after {
165
- content: "";
166
- position: absolute;
167
- left: -$space_xs;
168
- right: -$space_xs;
169
- bottom: -4.5px;
170
- height: 1px;
171
- background: $border_light;
172
- }
173
- }
174
-
175
- [class*="pb_dropdown_option"]:last-child::after {
176
- display: none;
177
- }
178
- }
179
- }
180
-
181
- &.separators_hidden {
182
- .dropdown_wrapper {
183
- .pb_dropdown_container {
184
- [class*="pb_dropdown_option"]:first-child {
185
- margin-top: $space_xs;
186
- }
187
-
188
- [class*="pb_dropdown_option"]:last-child {
189
- margin-bottom: $space_xs;
190
- }
191
-
192
- [class*="pb_dropdown_option"] {
193
- padding: $space_xxs $space_xs;
194
- margin: $space_xxs $space_xs;
195
-
196
- &::after {
197
- height: 0px;
198
- }
199
-
200
- &[class*="selected"] {
201
- border-bottom: none;
202
- }
203
- }
204
- }
205
- }
206
- }
207
- }
208
-
209
128
  &.dark {
210
129
  .dropdown_wrapper {
211
130
  [class*="dropdown_trigger_wrapper"] {
@@ -1,4 +1,4 @@
1
- import React, { useState, useRef, useEffect, forwardRef, useImperativeHandle } from "react";
1
+ import React, { useState, useRef, useEffect } from "react";
2
2
  import classnames from "classnames";
3
3
  import { buildAriaProps, buildCss, buildDataProps, buildHtmlProps } from "../utilities/props";
4
4
  import { globalProps } from "../utilities/globalProps";
@@ -35,19 +35,10 @@ type DropdownProps = {
35
35
  label?: string;
36
36
  onSelect?: (arg: GenericObject) => null;
37
37
  options: GenericObject;
38
- separators: boolean;
39
38
  triggerRef?: any;
40
- variant?: "default" | "subtle";
41
39
  };
42
40
 
43
- interface DropdownComponent
44
- extends React.ForwardRefExoticComponent<DropdownProps & React.RefAttributes<unknown>> {
45
- Option: typeof DropdownOption;
46
- Trigger: typeof DropdownTrigger;
47
- Container: typeof DropdownContainer;
48
- }
49
-
50
- const Dropdown = forwardRef((props: DropdownProps, ref: any) => {
41
+ const Dropdown = (props: DropdownProps) => {
51
42
  const {
52
43
  aria = {},
53
44
  autocomplete = false,
@@ -64,20 +55,15 @@ const Dropdown = forwardRef((props: DropdownProps, ref: any) => {
64
55
  label,
65
56
  onSelect,
66
57
  options,
67
- separators = true,
68
- triggerRef,
69
- variant = "default",
58
+ triggerRef
70
59
  } = props;
71
60
 
72
61
  const ariaProps = buildAriaProps(aria);
73
62
  const dataProps = buildDataProps(data);
74
63
  const htmlProps = buildHtmlProps(htmlOptions);
75
- const separatorsClass = separators ? '' : 'separators_hidden'
76
64
  const classes = classnames(
77
65
  buildCss("pb_dropdown"),
78
66
  globalProps(props),
79
- variant,
80
- separatorsClass,
81
67
  className
82
68
  );
83
69
 
@@ -139,7 +125,7 @@ const Dropdown = forwardRef((props: DropdownProps, ref: any) => {
139
125
  const filteredOptions = optionsWithBlankSelection?.filter((option: GenericObject) => {
140
126
  const label = typeof option.label === 'string' ? option.label.toLowerCase() : option.label;
141
127
  return String(label).toLowerCase().includes(filterItem.toLowerCase());
142
- });
128
+ });
143
129
 
144
130
  // For keyboard accessibility: Set focus within dropdown to selected item if it exists
145
131
  useEffect(() => {
@@ -189,14 +175,6 @@ const Dropdown = forwardRef((props: DropdownProps, ref: any) => {
189
175
  dark
190
176
  });
191
177
 
192
- useImperativeHandle(ref, () => ({
193
- clearSelected: () => {
194
- setSelected({});
195
- setFilterItem("");
196
- setIsDropDownClosed(true);
197
- onSelect && onSelect(null);
198
- },
199
- }));
200
178
 
201
179
  return (
202
180
  <div {...ariaProps}
@@ -280,9 +258,8 @@ const Dropdown = forwardRef((props: DropdownProps, ref: any) => {
280
258
  </DropdownContext.Provider>
281
259
  </div>
282
260
  )
283
- }) as DropdownComponent
261
+ };
284
262
 
285
- Dropdown.displayName = "Dropdown";
286
263
  Dropdown.Option = DropdownOption;
287
264
  Dropdown.Trigger = DropdownTrigger;
288
265
  Dropdown.Container = DropdownContainer;
@@ -1,7 +1,6 @@
1
1
  examples:
2
2
  rails:
3
3
  - dropdown_default: Default
4
- - dropdown_subtle_variant: Subtle Variant
5
4
  - dropdown_subcomponent_structure_rails: Subcomponent Structure
6
5
  - dropdown_with_label: With Label
7
6
  - dropdown_with_custom_options_rails: Custom Options
@@ -11,11 +10,9 @@ examples:
11
10
  - dropdown_error: Dropdown with Error
12
11
  - dropdown_default_value: Default Value
13
12
  - dropdown_blank_selection: Blank Selection
14
- - dropdown_separators_hidden: Separators Hidden
15
13
 
16
14
  react:
17
15
  - dropdown_default: Default
18
- - dropdown_subtle_variant: Subtle Variant
19
16
  - dropdown_subcomponent_structure: Subcomponent Structure
20
17
  - dropdown_with_label: With Label
21
18
  - dropdown_with_custom_options: Custom Options
@@ -25,8 +22,6 @@ examples:
25
22
  - dropdown_error: Dropdown with Error
26
23
  - dropdown_default_value: Default Value
27
24
  - dropdown_blank_selection: Blank Selection
28
- - dropdown_clear_selection: Clear Selection
29
- - dropdown_separators_hidden: Separators Hidden
30
25
  # - dropdown_with_autocomplete: Autocomplete
31
26
  # - dropdown_with_autocomplete_and_custom_display: Autocomplete with Custom Display
32
27
  # - dropdown_with_external_control: useDropdown Hook
@@ -12,6 +12,3 @@ export { default as DropdownSubcomponentStructure } from './_dropdown_subcompone
12
12
  export { default as DropdownError } from './_dropdown_error.jsx'
13
13
  export { default as DropdownDefaultValue } from './_dropdown_default_value.jsx'
14
14
  export { default as DropdownBlankSelection } from './_dropdown_blank_selection.jsx'
15
- export { default as DropdownClearSelection } from './_dropdown_clear_selection.jsx'
16
- export { default as DropdownSubtleVariant } from './_dropdown_subtle_variant.jsx'
17
- export { default as DropdownSeparatorsHidden } from './_dropdown_separators_hidden.jsx'
@@ -13,18 +13,13 @@ module Playbook
13
13
  prop :default_value
14
14
  prop :blank_selection, type: Playbook::Props::String,
15
15
  default: ""
16
- prop :variant, type: Playbook::Props::Enum,
17
- values: %w[default subtle],
18
- default: "default"
19
- prop :separators, type: Playbook::Props::Boolean,
20
- default: true
21
16
 
22
17
  def data
23
18
  Hash(prop(:data)).merge(pb_dropdown: true)
24
19
  end
25
20
 
26
21
  def classname
27
- generate_classname("pb_dropdown", variant, separators_class, separator: " ")
22
+ generate_classname("pb_dropdown")
28
23
  end
29
24
 
30
25
  private
@@ -37,10 +32,6 @@ module Playbook
37
32
  default_value.present? ? default_value.transform_keys(&:to_s)["id"] : ""
38
33
  end
39
34
 
40
- def separators_class
41
- separators ? "" : "separators_hidden"
42
- end
43
-
44
35
  def options_with_blank
45
36
  blank_selection.present? ? [{ id: "", value: "", label: blank_selection }] + options : options
46
37
  end
@@ -62,7 +62,7 @@ const DropdownOption = (props: DropdownOptionProps) => {
62
62
  const focusedClass = isFocused && "focused";
63
63
 
64
64
  const selectedClass = `${
65
- selected?.label === option.label
65
+ selected.label === option.label
66
66
  ? "selected"
67
67
  : "list"
68
68
  }`;
@@ -73,7 +73,7 @@ const DropdownTrigger = (props: DropdownTriggerProps) => {
73
73
  !autocomplete && "select_only"
74
74
  );
75
75
 
76
- const customDisplayPlaceholder = selected?.label ? (
76
+ const customDisplayPlaceholder = selected.label ? (
77
77
  <b>{selected.label}</b>
78
78
  ) : autocomplete ? (
79
79
  ""
@@ -83,7 +83,7 @@ const DropdownTrigger = (props: DropdownTriggerProps) => {
83
83
  "Select..."
84
84
  );
85
85
 
86
- const defaultDisplayPlaceholder = selected?.label
86
+ const defaultDisplayPlaceholder = selected.label
87
87
  ? selected.label
88
88
  : autocomplete
89
89
  ? ""
@@ -34,7 +34,6 @@ const FilterDouble = ({
34
34
  maxHeight,
35
35
  minWidth,
36
36
  placement,
37
- popoverProps,
38
37
  ...bgProps
39
38
  }: FilterDoubleProps): React.ReactElement => (
40
39
  <FilterBackground
@@ -50,7 +49,6 @@ const FilterDouble = ({
50
49
  maxHeight={maxHeight}
51
50
  minWidth={minWidth}
52
51
  placement={placement}
53
- popoverProps={popoverProps}
54
52
  >
55
53
  {children}
56
54
  </FiltersPopover>
@@ -33,7 +33,6 @@ const FilterSingle = ({
33
33
  maxHeight,
34
34
  minWidth,
35
35
  placement,
36
- popoverProps,
37
36
  ...bgProps
38
37
  }: FilterSingleProps): React.ReactElement => {
39
38
  return (
@@ -53,7 +52,6 @@ const FilterSingle = ({
53
52
  maxHeight={maxHeight}
54
53
  minWidth={minWidth}
55
54
  placement={placement}
56
- popoverProps={popoverProps}
57
55
  >
58
56
  {children}
59
57
  </FiltersPopover>
@@ -2,7 +2,6 @@ import React, { ReactNode, useState } from 'react'
2
2
 
3
3
  import CircleIconButton from '../../pb_circle_icon_button/_circle_icon_button'
4
4
  import PbReactPopover from '../../pb_popover/_popover'
5
- import { GenericObject } from '../../types'
6
5
 
7
6
  type FiltersPopoverProps = {
8
7
  children?: React.ReactChild[] | React.ReactChild | (({closePopover}: {closePopover: () => void}) => ReactNode),
@@ -10,9 +9,8 @@ type FiltersPopoverProps = {
10
9
  maxHeight?: string,
11
10
  minWidth?: string,
12
11
  placement?: "top" | "right" | "bottom" | "left" | "top-start" | "top-end" | "bottom-start" | "bottom-end" | "right-start" | "right-end" | "left-start" | "left-end",
13
- popoverProps?: GenericObject,
14
12
  }
15
- const FiltersPopover = ({ children, dark, maxHeight, minWidth, placement = "bottom-start", popoverProps }: FiltersPopoverProps): React.ReactElement => {
13
+ const FiltersPopover = ({ children, dark, maxHeight, minWidth, placement = "bottom-start" }: FiltersPopoverProps): React.ReactElement => {
16
14
  const [hide, updateHide] = useState(true)
17
15
  const toggle = () => updateHide(!hide)
18
16
 
@@ -35,7 +33,6 @@ const FiltersPopover = ({ children, dark, maxHeight, minWidth, placement = "bott
35
33
  reference={filterButton}
36
34
  shouldClosePopover={updateHide}
37
35
  show={!hide}
38
- {...popoverProps}
39
36
  >
40
37
  <div className="pb-form">
41
38
  {typeof children === 'function'