playbook_ui 14.23.0.pre.alpha.advancedtablefix9082 → 14.23.0.pre.alpha.play1983advancedtabledoubleborder9286

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 (54) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/_playbook.scss +0 -1
  3. data/app/pb_kits/playbook/pb_advanced_table/Components/CustomCell.tsx +7 -6
  4. data/app/pb_kits/playbook/pb_advanced_table/Components/TableActionBar.tsx +10 -10
  5. data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.scss +69 -2
  6. data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.tsx +9 -6
  7. data/app/pb_kits/playbook/pb_advanced_table/advanced_table.rb +12 -2
  8. data/app/pb_kits/playbook/pb_advanced_table/advanced_table_action_bar.js +16 -0
  9. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props.html.erb +6 -1
  10. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props.jsx +21 -6
  11. data/app/pb_kits/playbook/pb_advanced_table/index.js +5 -1
  12. data/app/pb_kits/playbook/pb_advanced_table/scss_partials/advanced_table_sticky_mixin.scss +7 -1
  13. data/app/pb_kits/playbook/pb_advanced_table/table_row.html.erb +2 -2
  14. data/app/pb_kits/playbook/pb_checkbox/checkbox.rb +12 -1
  15. data/app/pb_kits/playbook/pb_checkbox/docs/_checkbox_indeterminate.html.erb +1 -1
  16. data/app/pb_kits/playbook/pb_checkbox/docs/_checkbox_indeterminate_rails.md +2 -1
  17. data/app/pb_kits/playbook/pb_checkbox/index.js +3 -1
  18. data/app/pb_kits/playbook/pb_dropdown/_dropdown.scss +17 -1
  19. data/app/pb_kits/playbook/pb_dropdown/_dropdown.tsx +6 -0
  20. data/app/pb_kits/playbook/pb_dropdown/_dropdown_mixin.scss +36 -0
  21. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_custom_active_style_options.jsx +90 -0
  22. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_custom_active_style_options_react.md +4 -0
  23. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_custom_radio_options.jsx +1 -0
  24. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_custom_radio_options_react.md +1 -1
  25. data/app/pb_kits/playbook/pb_dropdown/docs/example.yml +3 -2
  26. data/app/pb_kits/playbook/pb_dropdown/docs/index.js +2 -1
  27. data/app/pb_kits/playbook/pb_dropdown/dropdown.test.jsx +24 -0
  28. data/app/pb_kits/playbook/pb_dropdown/subcomponents/DropdownOption.tsx +11 -1
  29. data/app/pb_kits/playbook/pb_pagination/_pagination.tsx +4 -0
  30. data/app/pb_kits/playbook/pb_pagination/docs/_pagination_default_rails.md +3 -1
  31. data/app/pb_kits/playbook/pb_pagination/docs/_pagination_default_react.md +3 -1
  32. data/app/pb_kits/playbook/pb_select/select.rb +4 -2
  33. data/app/pb_kits/playbook/pb_table/docs/_table_with_selectable_rows.html.erb +1 -0
  34. data/dist/chunks/_weekday_stacked-9aguRqOv.js +37 -0
  35. data/dist/chunks/vendor.js +1 -1
  36. data/dist/menu.yml +0 -7
  37. data/dist/playbook-doc.js +2 -2
  38. data/dist/playbook-rails-react-bindings.js +1 -1
  39. data/dist/playbook-rails.js +1 -1
  40. data/dist/playbook.css +1 -1
  41. data/lib/playbook/version.rb +1 -1
  42. metadata +6 -14
  43. data/app/pb_kits/playbook/pb_walkthrough/_walkthrough.scss +0 -0
  44. data/app/pb_kits/playbook/pb_walkthrough/_walkthrough.tsx +0 -202
  45. data/app/pb_kits/playbook/pb_walkthrough/docs/_walkthrough_continuous.jsx +0 -69
  46. data/app/pb_kits/playbook/pb_walkthrough/docs/_walkthrough_default.jsx +0 -71
  47. data/app/pb_kits/playbook/pb_walkthrough/docs/_walkthrough_multi_beacon.jsx +0 -110
  48. data/app/pb_kits/playbook/pb_walkthrough/docs/_walkthrough_no_beacon.jsx +0 -76
  49. data/app/pb_kits/playbook/pb_walkthrough/docs/_walkthrough_no_overlay.jsx +0 -76
  50. data/app/pb_kits/playbook/pb_walkthrough/docs/_walkthrough_styled.jsx +0 -76
  51. data/app/pb_kits/playbook/pb_walkthrough/docs/example.yml +0 -10
  52. data/app/pb_kits/playbook/pb_walkthrough/docs/index.js +0 -6
  53. data/app/pb_kits/playbook/pb_walkthrough/walkthrough.test.jsx +0 -34
  54. data/dist/chunks/_weekday_stacked-C16ua8Si.js +0 -61
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b0b8707f27e1d78520568b40d2f13050f404af79a1cbcda223db14444569aa9e
4
- data.tar.gz: 30329a170b42fd317808886d5d6a3c54d0b76ce766e8d425f673388f4f743080
3
+ metadata.gz: 96d0660f857b59986929260adca4f46190602fa97cf19854d6d5caa8a7a997fc
4
+ data.tar.gz: b0e422e432dd215f0c1738f5b2eb3d26be164103b277c274318570bdf4857b97
5
5
  SHA512:
6
- metadata.gz: 95a214937ae321b93e42789ae622c9690ee90b7773be34444f6c659961f39f1ed22a64448b19867419accaaebda7489431bc54d8a9a559a48be8d77a7407f256
7
- data.tar.gz: 89966b80daf0eb0911e9c2232ab75c263d68309b6a18dc5112e599ff0b484bc5eb555cd88603b1ea4b152e1fe82bc44472cfc4e78ae68f6870991a405d254a31
6
+ metadata.gz: 39eb60cbc85b72e9b293b5a0af34eb7c18dc464de9622dcb76f3e2cce7b99f01b6a1be4fb3d5c0506af9f0433f0500de902fde48576355103c16732d73d70a86
7
+ data.tar.gz: a94d811f6303801719cbe279e2dea8ed11ce67c438ef612d4698733d33dec2482e46b0bce0fdb3c4622432d4c670ef3ec83ef633d4cd691122f3d71d7e7757dc
@@ -107,7 +107,6 @@
107
107
  @import 'pb_typeahead/typeahead';
108
108
  @import 'pb_user/user';
109
109
  @import 'pb_user_badge/user_badge';
110
- @import 'pb_walkthrough/walkthrough';
111
110
  @import 'pb_weekday_stacked/weekday_stacked';
112
111
  @import 'pb_empty_state/empty_state';
113
112
  @import 'utilities/mixins';
@@ -20,7 +20,7 @@ interface CustomCellProps {
20
20
  customRenderer?: (row: Row<GenericObject>, value: string | undefined) => React.ReactNode
21
21
  selectableRows?: boolean
22
22
  customStyle?: GenericObject
23
- }
23
+ }
24
24
 
25
25
  export const CustomCell = ({
26
26
  getValue,
@@ -35,7 +35,7 @@ export const CustomCell = ({
35
35
 
36
36
  const handleOnExpand = (row: Row<GenericObject>) => {
37
37
  onRowToggleClick && onRowToggleClick(row);
38
-
38
+
39
39
  if (!expandedControl) {
40
40
  setExpanded({ ...expanded, [row.id]: !row.getIsExpanded() });
41
41
  }
@@ -46,8 +46,8 @@ export const CustomCell = ({
46
46
 
47
47
  return (
48
48
  <div style={{ paddingLeft: `${row.depth * 1.25}em`}}>
49
- <Flex
50
- alignItems="center"
49
+ <Flex
50
+ alignItems="center"
51
51
  columnGap="xs"
52
52
  justify="start"
53
53
  orientation="row"
@@ -71,11 +71,12 @@ export const CustomCell = ({
71
71
  >
72
72
  {row.getIsExpanded() ? (
73
73
  <Icon cursor="pointer"
74
- icon="circle-play-down"
74
+ icon="circle-play"
75
+ rotation={90}
75
76
  />
76
77
  ) : (
77
78
  <Icon cursor="pointer"
78
- icon="circle-play"
79
+ icon="circle-play"
79
80
  />
80
81
  )}
81
82
  </button>
@@ -112,7 +112,7 @@ const TableActionBar: React.FC<TableActionBarProps> = ({
112
112
  paddingBottom="xs"
113
113
  text={node.label}
114
114
  />
115
- <Flex flexDirection="column"
115
+ <Flex flexDirection="column"
116
116
  paddingLeft="lg"
117
117
  >
118
118
  {node?.children?.map((child) =>
@@ -141,8 +141,8 @@ const TableActionBar: React.FC<TableActionBarProps> = ({
141
141
  setShowPopover(!shouldClose)
142
142
 
143
143
  const popoverReference = (
144
- <Tooltip
145
- placement="top"
144
+ <Tooltip
145
+ placement="top"
146
146
  text="Column Configuration"
147
147
  >
148
148
  <div onClick={togglePopover}>
@@ -170,8 +170,8 @@ const TableActionBar: React.FC<TableActionBarProps> = ({
170
170
  >
171
171
  {type === "row-selection" ? (
172
172
  <>
173
- <Caption color="light"
174
- paddingLeft="xs"
173
+ <Caption color="light"
174
+ paddingLeft="xs"
175
175
  size="xs"
176
176
  >
177
177
  {selectedCount} Selected
@@ -188,15 +188,15 @@ const TableActionBar: React.FC<TableActionBarProps> = ({
188
188
  zIndex={3}
189
189
  >
190
190
  <>
191
- <Caption
192
- paddingY="sm"
191
+ <Caption
192
+ paddingY="sm"
193
193
  text="Columns Config"
194
- textAlign="center"
194
+ textAlign="center"
195
195
  />
196
196
  <SectionSeparator paddingBottom="xs" />
197
197
  {tree.map((node: VisibilityNode) => (
198
- <Flex cursor="pointer"
199
- flexDirection="column"
198
+ <Flex cursor="pointer"
199
+ flexDirection="column"
200
200
  key={node.id}
201
201
  paddingX="xs"
202
202
  >
@@ -124,13 +124,65 @@
124
124
  -ms-overflow-style: none !important;
125
125
  scrollbar-width: none !important;
126
126
  }
127
-
127
+
128
+ // When action bar is hidden, ensure proper border radius for header corners
129
+ &.hidden-action-bar {
130
+ .pb_advanced_table_header {
131
+ > tr:first-child {
132
+ th:first-child {
133
+ border-top-left-radius: 4px !important;
134
+ }
135
+ th:last-child {
136
+ border-top-right-radius: 4px !important;
137
+ }
138
+ }
139
+ }
140
+
141
+ // Also handle the case when there are multiple header rows
142
+ .pb_advanced_table_header {
143
+ > tr:first-child {
144
+ th:first-child,
145
+ .table-header-cells:first-child,
146
+ .table-header-cells-custom:first-child {
147
+ border-top-left-radius: 4px !important;
148
+ }
149
+ th:last-child,
150
+ .table-header-cells:last-child,
151
+ .table-header-cells-custom:last-child {
152
+ border-top-right-radius: 4px !important;
153
+ }
154
+ }
155
+ }
156
+ }
157
+
158
+ // When action bar is shown, remove border radius from header
159
+ .row-selection-actions-card.is-visible ~ * .pb_advanced_table_header,
160
+ .row-selection-actions-card.show-action-card ~ * .pb_advanced_table_header {
161
+ > tr:first-child {
162
+ th:first-child,
163
+ th:last-child,
164
+ .table-header-cells:first-child,
165
+ .table-header-cells:last-child,
166
+ .table-header-cells-custom:first-child,
167
+ .table-header-cells-custom:last-child {
168
+ border-top-left-radius: 0 !important;
169
+ border-top-right-radius: 0 !important;
170
+ }
171
+ }
172
+ }
173
+
128
174
 
129
175
  .row-selection-actions-card {
130
176
  border-bottom-right-radius: 0px !important;
131
177
  border-bottom-left-radius: 0px !important;
132
178
  border-bottom-color: transparent;
133
179
  transition: height 300ms ease;
180
+
181
+ &.is-visible,
182
+ &.show-action-card {
183
+ border-top-left-radius: 4px !important;
184
+ border-top-right-radius: 4px !important;
185
+ }
134
186
  }
135
187
  .table-header-cells:first-child {
136
188
  min-width: 180px;
@@ -915,4 +967,19 @@
915
967
  // Outside of the pb_advanced_table class for popover
916
968
  .pb-advanced-table-popover-option:hover {
917
969
  background-color: $bg_light;
918
- }
970
+ }
971
+ // Removes borders when Wrapped inside the Card Kit
972
+ [class^=pb_card_kit] > .pb_advanced_table .pb_advanced_table_body .last-cell,
973
+ [class^=pb_card_kit] > .pb_advanced_table .pb_advanced_table_header .last-header-cell,
974
+ [class^=pb_card_kit] > .pb_advanced_table .pb_advanced_table_body tr td:last-child,
975
+ [class^=pb_card_kit] > .pb_advanced_table .pb_advanced_table_header tr th:last-child {
976
+ border-right: none !important;
977
+ }
978
+
979
+ // Removes borders when Wrapped inside the Card Kit
980
+ [class^=pb_card_kit] > .pb_advanced_table tr:last-child,
981
+ [class^=pb_card_kit] > .pb_advanced_table .last-row-cell {
982
+ td {
983
+ border-bottom: none !important;
984
+ }
985
+ }
@@ -218,10 +218,10 @@ const AdvancedTable = (props: AdvancedTableProps) => {
218
218
  )
219
219
 
220
220
  return (
221
- <Card
221
+ <Card
222
222
  borderNone
223
223
  borderRadius="none"
224
- className="advanced-table-fullscreen-header"
224
+ className="advanced-table-fullscreen-header"
225
225
  {...props}
226
226
  >
227
227
  <Flex justify="end">
@@ -250,6 +250,10 @@ const AdvancedTable = (props: AdvancedTableProps) => {
250
250
  const ariaProps = buildAriaProps(aria);
251
251
  const dataProps = buildDataProps(data);
252
252
  const htmlProps = buildHtmlProps(htmlOptions);
253
+
254
+ // Visibility flag for action bar
255
+ const isActionBarVisible = (selectableRows && showActionsBar && selectedRowsLength > 0) || columnVisibilityControl;
256
+
253
257
  const classes = classnames(
254
258
  buildCss("pb_advanced_table"),
255
259
  `advanced-table-responsive-${responsive}`,
@@ -257,6 +261,8 @@ const AdvancedTable = (props: AdvancedTableProps) => {
257
261
  {
258
262
  'advanced-table-fullscreen': isFullscreen,
259
263
  'advanced-table-allow-fullscreen': allowFullScreen,
264
+ // Add the hidden-action-bar class when action bar functionality exists but is not visible
265
+ 'hidden-action-bar': (selectableRows || columnVisibilityControl) && !isActionBarVisible,
260
266
  },
261
267
  {'advanced-table-sticky-left-columns': stickyLeftColumn && stickyLeftColumn.length > 0},
262
268
  columnGroupBorderColor ? `column-group-border-${columnGroupBorderColor}` : '',
@@ -270,9 +276,6 @@ const AdvancedTable = (props: AdvancedTableProps) => {
270
276
  ? getVirtualizedContainerStyles(maxHeight)
271
277
  : {};
272
278
 
273
- // Visibility flag for action bar
274
- const isActionBarVisible = (selectableRows && showActionsBar && selectedRowsLength > 0) || columnVisibilityControl;
275
-
276
279
  // The actual Main <Table /> element
277
280
  const tableElement = (
278
281
  <Table
@@ -288,7 +291,7 @@ const AdvancedTable = (props: AdvancedTableProps) => {
288
291
  ) : (
289
292
  <>
290
293
  <TableHeader />
291
- <TableBody
294
+ <TableBody
292
295
  isFetching={isFetching}
293
296
  />
294
297
  </>
@@ -35,7 +35,12 @@ module Playbook
35
35
  default: []
36
36
 
37
37
  def classname
38
- additional_classes = [responsive_classname, max_height_classname, hide_scroll_bar_class]
38
+ additional_classes = [
39
+ responsive_classname,
40
+ max_height_classname,
41
+ hide_scroll_bar_class,
42
+ hidden_action_bar_class,
43
+ ]
39
44
  additional_classes << "column-group-border-#{column_group_border_color}" if column_group_border_color != "none"
40
45
  generate_classname("pb_advanced_table", *additional_classes, separator: " ")
41
46
  end
@@ -49,7 +54,12 @@ module Playbook
49
54
  end
50
55
 
51
56
  def hide_scroll_bar_class
52
- scroll_bar_none ? "advanced-table-hide-scrollbar " : ""
57
+ scroll_bar_none ? "advanced-table-hide-scrollbar" : ""
58
+ end
59
+
60
+ def hidden_action_bar_class
61
+ # Add hidden-action-bar class when action bar functionality is enabled but not currently visible
62
+ selectable_rows && !is_action_bar_visible ? "hidden-action-bar" : ""
53
63
  end
54
64
 
55
65
  def selected_rows
@@ -1,4 +1,7 @@
1
1
  function showActionBar(actionBar, selectedCount) {
2
+ // Get container
3
+ const tableContainer = actionBar.closest('.pb_advanced_table');
4
+
2
5
  // Show action bar directly
3
6
  actionBar.style.height = "auto";
4
7
  actionBar.style.overflow = "visible";
@@ -8,6 +11,11 @@ function showActionBar(actionBar, selectedCount) {
8
11
  actionBar.classList.remove("p_none");
9
12
  actionBar.classList.add("p_xs", "is-visible", "show-action-card");
10
13
 
14
+ // Remove hidden-action-bar class when action bar is shown
15
+ if (tableContainer) {
16
+ tableContainer.classList.remove("hidden-action-bar");
17
+ }
18
+
11
19
  // Update the count
12
20
  const countElement = actionBar.querySelector(".selected-count");
13
21
  if (countElement) {
@@ -16,12 +24,20 @@ function showActionBar(actionBar, selectedCount) {
16
24
  }
17
25
 
18
26
  function hideActionBar(actionBar) {
27
+ // Get container
28
+ const tableContainer = actionBar.closest('.pb_advanced_table');
29
+
19
30
  // Hide action bar directly
20
31
  actionBar.style.height = "0px";
21
32
  actionBar.style.overflow = "hidden";
22
33
  actionBar.style.opacity = "0";
23
34
  actionBar.classList.add("p_none");
24
35
  actionBar.classList.remove("p_xs", "is-visible", "show-action-card");
36
+
37
+ // Add hidden-action-bar class when action bar is hidden
38
+ if (tableContainer) {
39
+ tableContainer.classList.add("hidden-action-bar");
40
+ }
25
41
  }
26
42
 
27
43
  export function updateSelectionActionBar(table, selectedCount) {
@@ -29,5 +29,10 @@
29
29
  label: "Graduated Students",
30
30
  }
31
31
  ] %>
32
+ <%= pb_rails("card", props: { margin_bottom: "md" }) do %>
33
+ <%= pb_rails("advanced_table", props: { id: "table_props_table", table_data: @table_data, column_definitions: column_definitions, table_props: { container: false, vertical_border: true }}) %>
34
+ <% end %>
32
35
 
33
- <%= pb_rails("advanced_table", props: { id: "table_props_table", table_data: @table_data, column_definitions: column_definitions, table_props: { vertical_border: true, container: false }}) %>
36
+ <%= pb_rails("card", props: { padding: "none" }) do %>
37
+ <%= pb_rails("advanced_table", props: { id: "table_props_table_2", padding: "none", table_data: @table_data, column_definitions: column_definitions, table_props: { container: false, vertical_border: true }}) %>
38
+ <% end %>
@@ -1,5 +1,6 @@
1
1
  import React from "react"
2
2
  import AdvancedTable from '../../pb_advanced_table/_advanced_table'
3
+ import { Card } from "playbook-ui"
3
4
  import MOCK_DATA from "./advanced_table_mock_data.json"
4
5
 
5
6
  const AdvancedTableTableProps = (props) => {
@@ -42,12 +43,26 @@ const AdvancedTableTableProps = (props) => {
42
43
 
43
44
  return (
44
45
  <div>
45
- <AdvancedTable
46
- columnDefinitions={columnDefinitions}
47
- tableData={MOCK_DATA}
48
- tableProps={tableProps}
49
- {...props}
50
- />
46
+ <Card padding="md">
47
+ <AdvancedTable
48
+ columnDefinitions={columnDefinitions}
49
+ tableData={MOCK_DATA}
50
+ tableProps={tableProps}
51
+ {...props}
52
+ />
53
+ </Card>
54
+
55
+ <Card
56
+ marginTop="md"
57
+ padding="none"
58
+ >
59
+ <AdvancedTable
60
+ columnDefinitions={columnDefinitions}
61
+ tableData={MOCK_DATA}
62
+ tableProps={tableProps}
63
+ {...props}
64
+ />
65
+ </Card>
51
66
  </div>
52
67
  )
53
68
  }
@@ -314,12 +314,16 @@ export default class PbAdvancedTable extends PbEnhancedElement {
314
314
  "tr.is-visible, tr:not(.toggle-content)"
315
315
  );
316
316
 
317
- visibleRows.forEach((row) => row.classList.remove("last-visible-row"));
317
+ visibleRows.forEach((row) => {
318
+ row.classList.remove("last-visible-row");
319
+ row.classList.remove("last-row-cell");
320
+ });
318
321
 
319
322
  const lastVisibleRow = visibleRows[visibleRows.length - 1];
320
323
 
321
324
  if (lastVisibleRow) {
322
325
  lastVisibleRow.classList.add("last-visible-row");
326
+ lastVisibleRow.classList.add("last-row-cell");
323
327
  }
324
328
  }
325
329
  }
@@ -79,8 +79,14 @@
79
79
  left: 0;
80
80
  border-radius: unset;
81
81
  z-index: 5;
82
- }
83
82
 
83
+ // Add proper border radius when action bar is visible
84
+ &.is-visible,
85
+ &.show-action-card {
86
+ border-top-left-radius: 4px !important;
87
+ border-top-right-radius: 4px !important;
88
+ }
89
+ }
84
90
  .checkbox-cell {
85
91
  display: table-cell !important;
86
92
  }
@@ -39,11 +39,11 @@
39
39
  style="color: <%= button_color %>"
40
40
  >
41
41
  <%= pb_rails("icon", props: { id: "advanced-table_open_icon", icon: "circle-play", cursor: "pointer" }) %>
42
- <%= pb_rails("icon", props: { id: "advanced-table_close_icon", icon: "circle-play-down", cursor: "pointer" }) %>
42
+ <%= pb_rails("icon", props: { id: "advanced-table_close_icon", icon: "circle-play", cursor: "pointer", rotation: 90 }) %>
43
43
  </button>
44
44
  <% end %>
45
45
  <% end %>
46
- <%= pb_rails("flex/flex_item") do %>
46
+ <%= pb_rails("flex/flex_item") do %>
47
47
  <% if column[:custom_renderer].present? %>
48
48
  <%= raw(column[:custom_renderer].call(object.row, custom_renderer_value(column, index))) %>
49
49
  <% elsif index.zero? %>
@@ -6,6 +6,8 @@ module Playbook
6
6
  prop :error, type: Playbook::Props::Boolean, default: false
7
7
  prop :checked, type: Playbook::Props::Boolean, default: false
8
8
  prop :indeterminate_main, type: Playbook::Props::Boolean, default: false
9
+ prop :indeterminate_main_labels, type: Playbook::Props::Array,
10
+ default: []
9
11
  prop :indeterminate_parent
10
12
  prop :text
11
13
  prop :value
@@ -49,10 +51,19 @@ module Playbook
49
51
  end
50
52
 
51
53
  def data
52
- Hash(prop(:data)).merge(
54
+ base_data = Hash(prop(:data)).merge(
53
55
  pb_checkbox_indeterminate_main: indeterminate_main,
54
56
  pb_checkbox_indeterminate_parent: indeterminate_parent
55
57
  )
58
+
59
+ if indeterminate_main && indeterminate_main_labels.size == 2
60
+ base_data.merge!(
61
+ pb_checkbox_indeterminate_main_label_check: indeterminate_main_labels[0],
62
+ pb_checkbox_indeterminate_main_label_uncheck: indeterminate_main_labels[1]
63
+ )
64
+ end
65
+
66
+ base_data
56
67
  end
57
68
 
58
69
  private
@@ -9,10 +9,10 @@
9
9
  <tr>
10
10
  <th>
11
11
  <%= pb_rails("checkbox", props: {
12
- text: "Uncheck All",
13
12
  value: "checkbox-value",
14
13
  name: "main-checkbox",
15
14
  indeterminate_main: true,
15
+ indeterminate_main_labels: ["Check All Ice Cream", "Uncheck All Ice Cream"],
16
16
  id: "indeterminate-checkbox"
17
17
  }) %>
18
18
  </th>
@@ -1 +1,2 @@
1
- If you want to use indeterminate, "check/uncheck all" checkboxes, add `indeterminate_main: true` and an `id` to the main checkbox. Then, add an `indeterminate_parent` prop with the main checkbox's `id` to the children checkboxes.
1
+ If you want to use indeterminate, "check/uncheck all" checkboxes, add `indeterminate_main: true` and an `id` to the main checkbox. Then, add an `indeterminate_parent` prop with the main checkbox's `id` to the children checkboxes.
2
+ If you want to customize the main checkbox labels, set an array `indeterminate_main_labels` with "Check All" and "Uncheck All" labels.
@@ -23,7 +23,9 @@ export default class PbCheckbox extends PbEnhancedElement {
23
23
  mainCheckbox.checked = checkedCount > 0;
24
24
 
25
25
  // Determine the main checkbox label based on the number of checked checkboxes
26
- const text = checkedCount === 0 ? 'Check All' : 'Uncheck All';
26
+ const checkAllLabel = mainCheckboxWrapper.dataset.pbCheckboxIndeterminateMainLabelCheck ?? 'Check All'
27
+ const uncheckAllLabel = mainCheckboxWrapper.dataset.pbCheckboxIndeterminateMainLabelUncheck ?? 'Uncheck All'
28
+ const text = checkedCount === 0 ? checkAllLabel : uncheckAllLabel;
27
29
 
28
30
  // Determine the icon class to add and remove based on the number of checked checkboxes
29
31
  const iconClassToAdd = checkedCount === 0 ? 'pb_checkbox_checkmark' : 'pb_checkbox_indeterminate';
@@ -8,6 +8,7 @@
8
8
  @import "../pb_textarea/textarea_mixin";
9
9
 
10
10
  @import "./scss_partials/dropdown_animation";
11
+ @import "dropdown_mixin";
11
12
 
12
13
  [class*="pb_dropdown"] {
13
14
  .dropdown_wrapper {
@@ -98,9 +99,23 @@
98
99
  [class^="pb_title_kit"], a {
99
100
  color: $white !important;
100
101
  }
102
+ border-bottom: 1px solid $border_light;
101
103
  &:hover {
102
- background-color: $product_1_background !important;
104
+ background-color: $product_1_background;
105
+ }
106
+
107
+ // activeStyle font color map
108
+ @each $name, $color in $font-colors {
109
+ &.font-#{$name} {
110
+ @include apply-font-color($color);
111
+ }
103
112
  }
113
+ // activeStyle background color map (no difference between selected and selected+hover custom colors)
114
+ @each $name, $bg in $background-colors {
115
+ &.bg-#{$name} {
116
+ background-color: $bg;
117
+ }
118
+ }
104
119
  }
105
120
  }
106
121
 
@@ -267,6 +282,7 @@
267
282
  }
268
283
  &[class*="selected"] {
269
284
  background-color: $primary;
285
+ border-bottom: rgba($white, 0.15);
270
286
  }
271
287
  }
272
288
  }
@@ -39,6 +39,10 @@ type DropdownProps = {
39
39
  options: GenericObject;
40
40
  separators?: boolean;
41
41
  variant?: "default" | "subtle";
42
+ activeStyle?: {
43
+ backgroundColor?: string;
44
+ fontColor?: string;
45
+ };
42
46
  };
43
47
 
44
48
  interface DropdownComponent
@@ -69,6 +73,7 @@ let Dropdown = (props: DropdownProps, ref: any): React.ReactElement | null => {
69
73
  options,
70
74
  separators = true,
71
75
  variant = "default",
76
+ activeStyle,
72
77
  } = props;
73
78
 
74
79
  const ariaProps = buildAriaProps(aria);
@@ -251,6 +256,7 @@ let Dropdown = (props: DropdownProps, ref: any): React.ReactElement | null => {
251
256
  >
252
257
  <DropdownContext.Provider
253
258
  value={{
259
+ activeStyle,
254
260
  autocomplete,
255
261
  dropdownContainerRef,
256
262
  filteredOptions,
@@ -0,0 +1,36 @@
1
+ @import "../tokens/colors";
2
+
3
+ // activeStyle fontColor sass map to go through text colors + set of custom colors
4
+ $custom-font-colors: (
5
+ primary: $primary
6
+ );
7
+
8
+ $merged-font-colors: map-merge($text_colors, $custom-font-colors);
9
+
10
+ $font-colors: ();
11
+
12
+ @each $key, $val in $merged-font-colors {
13
+ $font-colors: map-merge($font-colors, ($key: $val));
14
+ }
15
+
16
+ @mixin apply-font-color($color) {
17
+ color: $color;
18
+
19
+ [class^="pb_body"],
20
+ [class^="pb_title_kit"],
21
+ a {
22
+ color: $color !important;
23
+ }
24
+ }
25
+
26
+ // activeStyle backgroundColor map (set of custom colors)
27
+ $custom-background-colors: (
28
+ "bg_light": $bg_light,
29
+ "white": $white,
30
+ );
31
+
32
+ $background-colors: ();
33
+
34
+ @each $key, $val in $custom-background-colors {
35
+ $background-colors: map-merge($background-colors, ($key: $val));
36
+ }