playbook_ui 14.0.0.pre.alpha.updateviewcomponentgem3527 → 14.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (95) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/pb_advanced_table/Components/TableHeaderCell.tsx +2 -5
  3. data/app/pb_kits/playbook/pb_advanced_table/SubKits/TableBody.tsx +20 -24
  4. data/app/pb_kits/playbook/pb_advanced_table/SubKits/TableHeader.tsx +12 -17
  5. data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.scss +1 -86
  6. data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.tsx +1 -5
  7. data/app/pb_kits/playbook/pb_advanced_table/advanced_table.test.jsx +0 -30
  8. data/app/pb_kits/playbook/pb_advanced_table/docs/example.yml +0 -1
  9. data/app/pb_kits/playbook/pb_advanced_table/docs/index.js +1 -2
  10. data/app/pb_kits/playbook/pb_avatar/_avatar.scss +30 -0
  11. data/app/pb_kits/playbook/pb_avatar/_avatar.tsx +1 -19
  12. data/app/pb_kits/playbook/pb_avatar/avatar.rb +1 -44
  13. data/app/pb_kits/playbook/pb_avatar/avatar.test.js +0 -17
  14. data/app/pb_kits/playbook/pb_date_picker/docs/_description.md +1 -3
  15. data/app/pb_kits/playbook/pb_fixed_confirmation_toast/_fixed_confirmation_toast.scss +1 -1
  16. data/app/pb_kits/playbook/pb_form/docs/_form_form_with.html.erb +0 -1
  17. data/app/pb_kits/playbook/pb_icon/_icon.tsx +0 -3
  18. data/app/pb_kits/playbook/pb_icon/icon.rb +0 -2
  19. data/app/pb_kits/playbook/pb_icon_circle/_icon_circle.tsx +1 -2
  20. data/app/pb_kits/playbook/pb_icon_circle/icon_circle.rb +2 -2
  21. data/app/pb_kits/playbook/pb_icon_stat_value/_icon_stat_value.scss +11 -0
  22. data/app/pb_kits/playbook/pb_icon_stat_value/_icon_stat_value.tsx +2 -3
  23. data/app/pb_kits/playbook/pb_icon_stat_value/docs/_icon_stat_value_color.html.erb +0 -1
  24. data/app/pb_kits/playbook/pb_icon_stat_value/icon_stat_value.rb +2 -2
  25. data/app/pb_kits/playbook/pb_icon_stat_value/icon_stat_value.test.js +4 -5
  26. data/app/pb_kits/playbook/pb_nav/_horizontal_nav.scss +1 -1
  27. data/app/pb_kits/playbook/pb_online_status/_online_status.scss +5 -52
  28. data/app/pb_kits/playbook/pb_online_status/_online_status.tsx +1 -6
  29. data/app/pb_kits/playbook/pb_online_status/_online_status_mixins.scss +32 -0
  30. data/app/pb_kits/playbook/pb_online_status/docs/example.yml +2 -6
  31. data/app/pb_kits/playbook/pb_online_status/docs/index.js +0 -2
  32. data/app/pb_kits/playbook/pb_online_status/online_status.rb +1 -11
  33. data/app/pb_kits/playbook/pb_overlay/docs/example.yml +2 -4
  34. data/app/pb_kits/playbook/pb_overlay/docs/index.js +0 -1
  35. data/app/pb_kits/playbook/pb_star_rating/_star_rating.scss +6 -83
  36. data/app/pb_kits/playbook/pb_star_rating/docs/example.yml +1 -3
  37. data/app/pb_kits/playbook/pb_star_rating/index.js +4 -73
  38. data/app/pb_kits/playbook/pb_star_rating/star_rating.html.erb +1 -1
  39. data/app/pb_kits/playbook/pb_star_rating/star_rating.rb +2 -2
  40. data/app/pb_kits/playbook/pb_star_rating/stars/utils.tsx +1 -5
  41. data/app/pb_kits/playbook/pb_star_rating/subcomponents/_star_rating_interactive.tsx +21 -50
  42. data/app/pb_kits/playbook/pb_table/_table.tsx +1 -1
  43. data/app/pb_kits/playbook/pb_table/index.ts +4 -4
  44. data/app/pb_kits/playbook/pb_table/subcomponents/_table_body.tsx +1 -1
  45. data/app/pb_kits/playbook/pb_table/subcomponents/_table_cell.tsx +1 -1
  46. data/app/pb_kits/playbook/pb_table/subcomponents/_table_head.tsx +1 -1
  47. data/app/pb_kits/playbook/pb_table/subcomponents/_table_header.tsx +1 -1
  48. data/app/pb_kits/playbook/pb_table/subcomponents/_table_row.tsx +1 -1
  49. data/app/pb_kits/playbook/pb_table/table.test.js +0 -2
  50. data/app/pb_kits/playbook/pb_text_input/_text_input.tsx +1 -1
  51. data/app/pb_kits/playbook/pb_text_input/docs/_text_input_default.jsx +1 -1
  52. data/app/pb_kits/playbook/pb_textarea/_textarea.tsx +27 -45
  53. data/app/pb_kits/playbook/pb_textarea/index.ts +3 -3
  54. data/app/pb_kits/playbook/pb_time/_time.tsx +3 -3
  55. data/app/pb_kits/playbook/pb_time_range_inline/_time_range_inline.tsx +1 -1
  56. data/app/pb_kits/playbook/pb_timeline/_item.tsx +1 -1
  57. data/app/pb_kits/playbook/pb_timeline/_timeline.tsx +1 -1
  58. data/app/pb_kits/playbook/pb_title_detail/_title_detail.tsx +10 -10
  59. data/app/pb_kits/playbook/pb_toggle/_toggle.tsx +1 -1
  60. data/app/pb_kits/playbook/pb_tooltip/_tooltip.tsx +2 -2
  61. data/app/pb_kits/playbook/pb_treemap_chart/_treemap_chart.tsx +2 -1
  62. data/app/pb_kits/playbook/pb_treemap_chart/treemapChart.test.js +0 -2
  63. data/app/pb_kits/playbook/pb_typeahead/_typeahead.tsx +2 -2
  64. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_multi_kit.html.erb +1 -1
  65. data/app/pb_kits/playbook/pb_typeahead/typeahead.rb +0 -1
  66. data/app/pb_kits/playbook/pb_user/_user.tsx +1 -1
  67. data/app/pb_kits/playbook/pb_user_badge/_user_badge.tsx +6 -6
  68. data/app/pb_kits/playbook/pb_user_badge/badges/million-dollar.tsx +235 -236
  69. data/app/pb_kits/playbook/pb_user_badge/badges/veteran.tsx +1 -1
  70. data/app/pb_kits/playbook/pb_walkthrough/_walkthrough.tsx +63 -68
  71. data/app/pb_kits/playbook/pb_weekday_stacked/_weekday_stacked.tsx +1 -1
  72. data/app/pb_kits/playbook/utilities/_positioning.scss +15 -26
  73. data/dist/chunks/_typeahead-COUJ88EA.js +22 -0
  74. data/dist/chunks/_weekday_stacked-BAkwel5p.js +45 -0
  75. data/dist/chunks/{lib-BE0Z3F7x.js → lib-Bf_E03gc.js} +1 -1
  76. data/dist/chunks/{pb_form_validation-TzZQ0Flx.js → pb_form_validation-D0dhqeN2.js} +1 -1
  77. data/dist/chunks/vendor.js +1 -1
  78. data/dist/playbook-doc.js +1 -1
  79. data/dist/playbook-rails-react-bindings.js +1 -1
  80. data/dist/playbook-rails.js +1 -1
  81. data/dist/playbook.css +1 -1
  82. data/lib/playbook/version.rb +2 -2
  83. metadata +12 -21
  84. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_responsive.jsx +0 -67
  85. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_responsive.md +0 -1
  86. data/app/pb_kits/playbook/pb_online_status/docs/_online_status_no_border.html.erb +0 -1
  87. data/app/pb_kits/playbook/pb_online_status/docs/_online_status_no_border.jsx +0 -14
  88. data/app/pb_kits/playbook/pb_online_status/docs/_online_status_size.html.erb +0 -3
  89. data/app/pb_kits/playbook/pb_online_status/docs/_online_status_size.jsx +0 -25
  90. data/app/pb_kits/playbook/pb_online_status/online_status.test.js +0 -31
  91. data/app/pb_kits/playbook/pb_overlay/docs/_overlay_toggle.html.erb +0 -61
  92. data/app/pb_kits/playbook/pb_overlay/docs/_overlay_toggle.jsx +0 -70
  93. data/app/pb_kits/playbook/pb_overlay/docs/_overlay_toggle.md +0 -1
  94. data/dist/chunks/_typeahead-D-4y9pbv.js +0 -22
  95. data/dist/chunks/_weekday_stacked-D5SswkOC.js +0 -45
@@ -9,8 +9,8 @@ module Playbook
9
9
  values: %w[sm md lg],
10
10
  default: "sm"
11
11
  prop :variant, type: Playbook::Props::Enum,
12
- values: %w[default royal blue purple teal red yellow green orange lighter],
13
- default: "lighter"
12
+ values: %w[default royal blue purple teal red yellow green orange],
13
+ default: "default"
14
14
 
15
15
  prop :orientation, type: Playbook::Props::Enum,
16
16
  values: %w[vertical horizontal],
@@ -18,7 +18,7 @@ describe("IconStatValue Kit", () => {
18
18
  )
19
19
 
20
20
  const kit = screen.getByTestId(testId)
21
- expect(kit).toHaveClass("pb_icon_stat_value_kit_horizontal_sm_lighter")
21
+ expect(kit).toHaveClass("pb_icon_stat_value_kit_horizontal_sm_default")
22
22
  })
23
23
 
24
24
  test("renders icon", () => {
@@ -101,7 +101,7 @@ describe("IconStatValue Kit", () => {
101
101
  )
102
102
 
103
103
  const kit = screen.getByTestId(testId)
104
- expect(kit).toHaveClass(`pb_icon_stat_value_kit_horizontal_${sizeProp}_lighter`)
104
+ expect(kit).toHaveClass(`pb_icon_stat_value_kit_horizontal_${sizeProp}_default`)
105
105
 
106
106
  cleanup()
107
107
  })
@@ -115,8 +115,7 @@ describe("IconStatValue Kit", () => {
115
115
  "teal",
116
116
  "red",
117
117
  "yellow",
118
- "green",
119
- "lighter"].forEach(
118
+ "green"].forEach(
120
119
  (colorProp) => {
121
120
  render(
122
121
  <IconStatValue
@@ -149,7 +148,7 @@ describe("IconStatValue Kit", () => {
149
148
  )
150
149
 
151
150
  const kit = screen.getByTestId(testId)
152
- expect(kit).toHaveClass("pb_icon_stat_value_kit_vertical_sm_lighter")
151
+ expect(kit).toHaveClass("pb_icon_stat_value_kit_vertical_sm_default")
153
152
  })
154
153
 
155
154
  })
@@ -11,7 +11,7 @@ $selector: ".pb_nav_list";
11
11
  [class^="pb_nav_list"][class*="_horizontal"] {
12
12
  .pb_nav_wrapper {
13
13
  display: flex;
14
- align-items: end;
14
+ align-items: center;
15
15
  padding: 0;
16
16
  margin: 0;
17
17
  list-style: none;
@@ -1,58 +1,11 @@
1
- @import "../tokens/colors";
2
-
3
- $pb_online_status_size: 8px;
4
- $pb_online_status_border: 2px;
5
- $pb_online_status_sizes: (
6
- "sm": 8px,
7
- "md": 10px,
8
- "lg": 12px,
9
- );
10
-
11
- $pb_online_status_statuses: (
12
- online: $success,
13
- away: $warning,
14
- offline: $neutral,
15
- success: $success,
16
- warning: $warning,
17
- error: $error,
18
- info: $info,
19
- neutral: $neutral,
20
- primary: $primary,
21
- );
1
+ @import "online_status_mixins";
22
2
 
23
3
  [class^=pb_online_status_kit] {
24
- box-sizing: content-box;
25
- width: $pb_online_status_size;
26
- height: $pb_online_status_size;
27
- flex-basis: $pb_online_status_size;
28
- flex-grow: 0;
29
- flex-shrink: 0;
30
- border-width: $pb_online_status_border;
31
- border-color: $white;
32
- border-style: solid;
33
- border-radius: 50%;
34
- background: $neutral;
35
-
36
- &.dark {
37
- border-color: $bg_dark;
38
- }
4
+ @include pb_online_status;
39
5
 
40
6
  @each $status_name, $status_value in $pb_online_status_statuses {
41
- &[class*=_#{$status_name}] {
42
- background: $status_value;
7
+ &[class*=_#{$status_name}] {
8
+ @include pb_online_status($status_value);
43
9
  }
44
10
  }
45
-
46
- @each $size, $value in $pb_online_status_sizes {
47
- &[class*=_size_#{$size}] {
48
- width: $value;
49
- height: $value;
50
- flex-basis: $value;
51
- }
52
- }
53
-
54
- &[class*=_no_border] {
55
- border-width: 0;
56
- border-style: none;
57
- }
58
- }
11
+ }
@@ -11,8 +11,6 @@ type OnlineStatusProps = {
11
11
  htmlOptions?: {[key: string]: string | number | boolean | (() => void)},
12
12
  id?: string,
13
13
  status?: "away" | "error" | "info" | "neutral" | "offline" |"online" | "primary"| "success" | "warning",
14
- size?: "sm" | "md" | "lg",
15
- noBorder?: boolean,
16
14
  } & GlobalProps
17
15
 
18
16
  const OnlineStatus = (props: OnlineStatusProps) => {
@@ -23,8 +21,6 @@ const OnlineStatus = (props: OnlineStatusProps) => {
23
21
  htmlOptions = {},
24
22
  id,
25
23
  status = 'offline',
26
- size = 'sm',
27
- noBorder = false,
28
24
  } = props
29
25
 
30
26
  aria.label = status
@@ -32,8 +28,7 @@ const OnlineStatus = (props: OnlineStatusProps) => {
32
28
  const ariaProps = buildAriaProps(aria)
33
29
  const dataProps = buildDataProps(data)
34
30
  const htmlProps = buildHtmlProps(htmlOptions)
35
- const getBorder = noBorder ? 'no_border' : ''
36
- const classes = classnames(buildCss('pb_online_status_kit', status, getBorder, "size", size), globalProps(props), className)
31
+ const classes = classnames(buildCss('pb_online_status_kit', status), globalProps(props), className)
37
32
 
38
33
  return (
39
34
  <div
@@ -0,0 +1,32 @@
1
+ @import "../tokens/colors";
2
+
3
+ $pb_online_status_size: 10px;
4
+ $pb_online_status_border: 2px;
5
+
6
+ $pb_online_status_statuses: (
7
+ online: $success,
8
+ away: $warning,
9
+ offline: $neutral,
10
+ success: $success,
11
+ warning: $warning,
12
+ error: $error,
13
+ info: $info,
14
+ neutral: $neutral,
15
+ primary: $primary,
16
+ );
17
+
18
+ @mixin pb_online_status($background: $neutral) {
19
+ &.dark {
20
+ border-color: $bg_dark;
21
+ }
22
+ width: $pb_online_status_size;
23
+ height: $pb_online_status_size;
24
+ flex-basis: $pb_online_status_size;
25
+ flex-grow: 0;
26
+ flex-shrink: 0;
27
+ border-width: $pb_online_status_border;
28
+ border-color: $white;
29
+ border-style: solid;
30
+ border-radius: 50%;
31
+ background: $background;
32
+ }
@@ -1,12 +1,8 @@
1
1
  examples:
2
2
 
3
3
  rails:
4
- - online_status_default: Colors
5
- - online_status_size: Size
6
- - online_status_no_border: No Border
4
+ - online_status_default: Default
7
5
 
8
6
 
9
7
  react:
10
- - online_status_default: Colors
11
- - online_status_size: Size
12
- - online_status_no_border: No Border
8
+ - online_status_default: Default
@@ -1,3 +1 @@
1
1
  export { default as OnlineStatusDefault } from './_online_status_default.jsx'
2
- export { default as OnlineStatusSize } from './_online_status_size.jsx'
3
- export { default as OnlineStatusNoBorder } from './_online_status_no_border.jsx'
@@ -7,18 +7,8 @@ module Playbook
7
7
  values: %w[online offline away success warning error info neutral primary],
8
8
  default: "offline"
9
9
 
10
- prop :size, type: Playbook::Props::Enum,
11
- values: %w[sm md lg],
12
- default: "sm"
13
-
14
- prop :no_border, type: Playbook::Props::Boolean, default: false
15
-
16
10
  def classname
17
- generate_classname("pb_online_status_kit", status, is_no_border, "size", size)
18
- end
19
-
20
- def is_no_border
21
- no_border ? "no_border" : nil
11
+ generate_classname("pb_online_status_kit", status)
22
12
  end
23
13
  end
24
14
  end
@@ -2,9 +2,7 @@ examples:
2
2
  react:
3
3
  - overlay_default: Default
4
4
  - overlay_multi_directional: Multi-directional
5
- - overlay_toggle: Toggle
6
5
 
7
6
  rails:
8
- - overlay_default: Default
9
- - overlay_multi_directional: Multi-directional
10
- - overlay_toggle: Toggle
7
+ - overlay_default: Default
8
+ - overlay_multi_directional: Multi-directional
@@ -1,3 +1,2 @@
1
1
  export { default as OverlayDefault } from './_overlay_default.jsx'
2
2
  export { default as OverlayMultiDirectional } from './_overlay_multi_directional.jsx'
3
- export { default as OverlayToggle } from './_overlay_toggle.jsx'
@@ -9,10 +9,10 @@
9
9
  justify-content: flex-start;
10
10
 
11
11
  path {
12
- &.subtle_star_dark {
12
+ &.suble_star_dark {
13
13
  fill: $text_dk_default;
14
14
  }
15
- &.subtle_star_light {
15
+ &.suble_star_light {
16
16
  fill: $text_lt_default;
17
17
  }
18
18
  &.outline_star_dark {
@@ -49,10 +49,9 @@
49
49
 
50
50
  $star-styles: (
51
51
  yellow_star: (color: $yellow),
52
- primary_star_light: (color: $royal),
53
- primary_star_dark: (color: $active_dark),
54
- subtle_star_light: (color: $text_lt_default),
55
- subtle_star_dark: (color: $text_dk_default),
52
+ primary_star: (color: $royal),
53
+ suble_star_light: (color: $text_lt_default),
54
+ suble_star_dark: (color: $text_dk_default),
56
55
  empty_star_dark: (color: $border_dark),
57
56
  empty_star_light: (color: $border_light),
58
57
  outline_empty_star_dark: (color: transparent),
@@ -112,89 +111,13 @@
112
111
  }
113
112
  }
114
113
  }
115
-
116
- // Interactivity
117
- path {
118
- transition: fill 0.2s
119
- }
120
- // Rails selected styles
121
- .interactive-star-icon {
122
- cursor: pointer;
123
- }
124
114
  .yellow-star-selected {
125
115
  color: $yellow;
126
116
  }
127
117
  .primary-star-selected {
128
118
  color: $royal
129
119
  }
130
- .subtle-star-selected {
120
+ .suble-star-selected {
131
121
  color: $text_lt_default;
132
122
  }
133
- &.dark {
134
- .primary-star-selected {
135
- color: $active_dark;
136
- }
137
- .subtle-star-selected {
138
- color: $text_dk_default;
139
- }
140
- }
141
- // React selected styles
142
- &.star-selected {
143
- path {
144
- animation: growColor 0.3s forwards;
145
- }
146
- .yellow-star-selected {
147
- color: $yellow;
148
- }
149
- .primary-star-selected {
150
- color: $royal;
151
- }
152
- .subtle-star-selected {
153
- color: $text_lt_default;
154
- }
155
- &.dark {
156
- .primary-star-selected {
157
- color: $active_dark;
158
- }
159
- .subtle-star-selected {
160
- color: $text_dk_default;
161
- }
162
- }
163
- }
164
- // Hover styles
165
- .star-hovered {
166
- path {
167
- fill: mix($primary, $white, 20%);
168
- }
169
- }
170
- &.dark{
171
- .star-hovered {
172
- path {
173
- fill: mix($active_dark, $bg_dark, 50%);
174
- }
175
- }
176
- }
177
- // Focus styles
178
- .pb_custom_icon {
179
- &:focus {
180
- outline: none;
181
- }
182
- &:focus-visible {
183
- border-radius: 2px;
184
- outline: 1px solid $primary;
185
- outline-offset: 2px;
186
- }
187
- }
188
- &.dark {
189
- .pb_custom_icon {
190
- &:focus {
191
- outline: none;
192
- }
193
- &:focus-visible {
194
- border-radius: 2px;
195
- outline: 1px solid $active_dark;
196
- outline-offset: 2px;
197
- }
198
- }
199
- }
200
123
  }
@@ -6,7 +6,6 @@ examples:
6
6
  - star_rating_hide: Layout Options
7
7
  - star_rating_number_config: Number Config
8
8
  - star_rating_size_options: Size Options
9
- - star_rating_interactive: Interactive
10
9
 
11
10
  react:
12
11
  - star_rating_default: Default
@@ -14,5 +13,4 @@ examples:
14
13
  - star_rating_background_options: Background Options
15
14
  - star_rating_hide: Layout Options
16
15
  - star_rating_number_config: Number Config
17
- - star_rating_size_options: Size Options
18
- - star_rating_interactive: Interactive
16
+ - star_rating_size_options: Size Options
@@ -14,29 +14,6 @@ export default class PbStarRating extends PbEnhancedElement {
14
14
  this.updateStarColors(clickedStarId);
15
15
  this.updateHiddenInputValue(clickedStarId);
16
16
  });
17
-
18
- document.querySelectorAll(STAR_RATING_SELECTOR).forEach(star => {
19
- star.addEventListener("mouseenter", (event) => {
20
- const hoveredStarId = event.currentTarget.id
21
- this.updateStarHoverColors(hoveredStarId);
22
- })
23
-
24
- star.addEventListener("mouseleave", () => {
25
- this.removeStarHoverColors();
26
- })
27
-
28
- star.addEventListener("keydown", (event) => {
29
- if (event.key === 'Enter' || event.key === ' ') {
30
- event.preventDefault();
31
- this.handleStarClick(star.id);
32
- }
33
- })
34
- })
35
- }
36
-
37
- handleStarClick(starId) {
38
- this.updateStarColors(starId);
39
- this.updateHiddenInputValue(starId);
40
17
  }
41
18
 
42
19
  updateStarColors(clickedStarId) {
@@ -50,21 +27,16 @@ export default class PbStarRating extends PbEnhancedElement {
50
27
  if (starId <= clickedStarId) {
51
28
  if (star.classList.contains("yellow_star")) {
52
29
  icon.classList.add("yellow-star-selected");
53
- } else if (star.classList.contains("primary_star_light")) {
30
+ } else if (star.classList.contains("primary_star")) {
54
31
  icon.classList.add("primary-star-selected");
55
- } else if (star.classList.contains("primary_star_dark")) {
56
- icon.classList.add("primary-star-selected");
57
- } else if (star.classList.contains("subtle_star_light")) {
58
- icon.classList.add("subtle-star-selected");
59
- } else if (star.classList.contains("subtle_star_dark")) {
60
- icon.classList.add("subtle-star-selected");
32
+ } else if (star.classList.contains("suble_star_light")) {
33
+ icon.classList.add("suble-star-selected");
61
34
  } else {
62
35
  icon.classList.add("yellow-star-selected");
63
36
  }
64
37
  } else {
65
- icon.classList.remove("yellow-star-selected", "primary-star-selected", "subtle-star-selected");
38
+ icon.classList.remove("yellow-star-selected", "primary-star-selected", "suble-star-selected");
66
39
  }
67
- icon.classList.remove("star-hovered");
68
40
  }
69
41
  });
70
42
  }
@@ -75,45 +47,4 @@ export default class PbStarRating extends PbEnhancedElement {
75
47
  hiddenInput.value = value;
76
48
  }
77
49
  }
78
-
79
- updateStarHoverColors(hoveredStarId) {
80
- const allStars = document.querySelectorAll(STAR_RATING_SELECTOR);
81
-
82
- allStars.forEach(star => {
83
- const starId = star.id;
84
- const icon = star.querySelector(".interactive-star-icon");
85
-
86
- if (icon) {
87
- if (starId <= hoveredStarId) {
88
- if (!icon.classList.contains("yellow-star-selected") &&
89
- !icon.classList.contains("primary-star-selected") &&
90
- !icon.classList.contains("subtle-star-selected")) {
91
- icon.classList.add("star-hovered");
92
- }
93
- } else {
94
- icon.classList.remove("star-hovered");
95
- }
96
- }
97
- });
98
- }
99
-
100
-
101
- removeStarHoverColors() {
102
- const allStars = document.querySelectorAll(STAR_RATING_SELECTOR);
103
-
104
- allStars.forEach(star => {
105
- const icon = star.querySelector(".interactive-star-icon");
106
- if (icon) {
107
- if (!icon.classList.contains("yellow-star-selected") &&
108
- !icon.classList.contains("primary-star-selected") &&
109
- !icon.classList.contains("subtle-star-selected")) {
110
- icon.classList.remove("star-hovered");
111
- }
112
- }
113
- });
114
- }
115
-
116
- isStarSelected() {
117
- return document.querySelectorAll(".yellow-star-selected, .primary-star-selected, .subtle-star-selected").length > 0;
118
- }
119
50
  }
@@ -47,7 +47,7 @@
47
47
  <%= pb_rails("flex", props: { orientation: "row" }) do %>
48
48
  <% object.denominator.times do |index| %>
49
49
  <div data-pb-star-rating id="<%= index + 1 %>" class="<%= star_color %>">
50
- <%= pb_rails("icon", props: { classname: "#{background_star_color} pb_star_#{size} interactive-star-icon", custom_icon: Playbook::Engine.root.join(background_star_path), tabindex: 0 } ) %>
50
+ <%= pb_rails("icon", props: { classname: "#{background_star_color} pb_star_#{size} interactive-star-icon", custom_icon: Playbook::Engine.root.join(background_star_path)} ) %>
51
51
  </div>
52
52
  <% end %>
53
53
  <% end %>
@@ -52,9 +52,9 @@ module Playbook
52
52
  when "yellow"
53
53
  "yellow_star"
54
54
  when "primary"
55
- dark ? "primary_star_dark" : "primary_star_light"
55
+ "primary_star"
56
56
  when "subtle"
57
- dark ? "subtle_star_dark" : "subtle_star_light"
57
+ dark ? "suble_star_dark" : "suble_star_light"
58
58
  end
59
59
  end
60
60
 
@@ -53,11 +53,7 @@ const starOutline = (
53
53
  )
54
54
 
55
55
  export const getStarIconObject = (backgroundType: string, color: string, dark: boolean, size: string) => {
56
- const colorClassName = color === "subtle"
57
- ? (dark ? "suble_star_dark" : "suble_star_light")
58
- : color === "primary"
59
- ? (dark ? "primary_star_dark" : "primary_star_light")
60
- : `${color}_star`
56
+ const colorClassName = color === "subtle" ? (dark ? "suble_star_dark" : "suble_star_light") : `${color}_star`
61
57
  const backgroundClassName = backgroundType === "outline" ? (dark ? "outline_empty_star_dark" : "outline_empty_star_light") : (dark ? "empty_star_dark" : "empty_star_light")
62
58
 
63
59
  return {
@@ -23,69 +23,40 @@ const StarRatingInteractive = (props: StarRatingInteractiveProps) => {
23
23
  size,
24
24
  } = props
25
25
  const [interactiveStarValue, setInteractiveStarValue] = useState(0)
26
- const [hoverStarValue, setHoverStarValue] = useState<number | null>(null)
27
26
  const starIcon = getStarIconObject(backgroundType, colorOption, dark, size)
28
27
 
29
28
  const handleOnClick = (interactiveStarValue: number) => {
30
29
  setInteractiveStarValue(interactiveStarValue)
31
30
  onClick && onClick(interactiveStarValue)
32
31
  }
33
- const handleMouseEnter = (value: number) => {
34
- setHoverStarValue(value);
35
- }
36
- const handleMouseLeave = () => {
37
- setHoverStarValue(null);
38
- }
39
- const handleOnKeyDown = (event: React.KeyboardEvent<HTMLDivElement>, starIndex: number) => {
40
- if (event.key === 'Enter' || event.key === ' ') {
41
- event.preventDefault()
42
- handleOnClick(starIndex)
43
- }
44
- }
45
32
 
46
33
  return (
47
34
  <Flex className="star_flex_area">
48
- {[...Array(denominator)].map((_, index) => {
49
- const starIndex = index + 1
50
- const isFilled = starIndex <= interactiveStarValue
51
- const isHovered = hoverStarValue !== null && starIndex > interactiveStarValue && starIndex <= hoverStarValue
52
-
53
- const baseClass = dark
54
- ? starIcon[backgroundType].className.replace("empty_star_light", "empty_star_dark")
55
- : starIcon[backgroundType].className
56
-
57
- let starClass = baseClass
58
- if (isFilled) {
59
- starClass = starClass.replace(/(empty_star_light|empty_star_dark)/, '')
60
- starClass += ` ${starIcon[colorOption].className}`
61
- }
62
- if (isHovered) {
63
- starClass += " star-hovered"
64
- }
65
- if (isFilled && starIndex === interactiveStarValue) {
66
- starClass += " star-selected"
67
- }
68
-
69
- return (
70
- <div
71
- key={index}
72
- onKeyDown={(event) => handleOnKeyDown(event, starIndex)}
73
- >
35
+ {[...Array(denominator)].map((_, index) => (
36
+ <React.Fragment key={index}>
37
+ {index + 1 <= interactiveStarValue && (
74
38
  <Icon
75
- className={starClass.trim()}
39
+ className={starIcon[colorOption].className}
76
40
  cursor="pointer"
77
- customIcon={starIcon[backgroundType].icon as unknown as { [key: string]: SVGElement }}
78
- htmlOptions={{
79
- onClick: () => handleOnClick(starIndex),
80
- onMouseEnter: () => handleMouseEnter(starIndex),
81
- onMouseLeave: () => handleMouseLeave(),
82
- }}
41
+ customIcon={starIcon[colorOption].icon as unknown as { [key: string]: SVGElement }}
42
+ htmlOptions={{ onClick: () => handleOnClick(index + 1) }}
83
43
  icon=""
84
- tabIndex={0}
85
44
  />
86
- </div>
87
- );
88
- })}
45
+ )}
46
+
47
+ {index + 1 > interactiveStarValue && (
48
+ <React.Fragment key={index}>
49
+ <Icon
50
+ className={starIcon[backgroundType].className}
51
+ cursor="pointer"
52
+ customIcon={starIcon[backgroundType].icon as unknown as { [key: string]: SVGElement }}
53
+ htmlOptions={{ onClick: () => handleOnClick(index + 1) }}
54
+ icon=""
55
+ />
56
+ </React.Fragment>
57
+ )}
58
+ </React.Fragment>
59
+ ))}
89
60
  </Flex>
90
61
  )
91
62
  }
@@ -33,7 +33,7 @@ type TableProps = {
33
33
  verticalBorder?: boolean,
34
34
  } & GlobalProps
35
35
 
36
- const Table = (props: TableProps): React.ReactElement => {
36
+ const Table = (props: TableProps) => {
37
37
  const {
38
38
  aria = {},
39
39
  children,
@@ -1,19 +1,19 @@
1
1
  import PbEnhancedElement from '../pb_enhanced_element'
2
2
 
3
3
  export default class PbTable extends PbEnhancedElement {
4
- static get selector(): string {
4
+ static get selector() {
5
5
  return '.table-responsive-collapse'
6
6
  }
7
7
 
8
- connect(): void {
8
+ connect() {
9
9
  const tables = document.querySelectorAll('.table-responsive-collapse');
10
10
 
11
11
  // Each Table
12
12
  [].forEach.call(tables, (table: HTMLTableElement) => {
13
13
  // Header Titles
14
- const headers: string[] = [];
14
+ let headers: string[] = [];
15
15
  [].forEach.call(table.querySelectorAll('th'), (header: HTMLTableCellElement) => {
16
- const colSpan = header.colSpan
16
+ let colSpan = header.colSpan
17
17
  for (let i = 0; i < colSpan; i++) {
18
18
  headers.push(header.textContent.replace(/\r?\n|\r/, ''));
19
19
  }
@@ -17,7 +17,7 @@ type TableBodyPropTypes = {
17
17
  tag?: "table" | "div";
18
18
  };
19
19
 
20
- const TableBody = (props: TableBodyPropTypes): React.ReactElement => {
20
+ const TableBody = (props: TableBodyPropTypes) => {
21
21
  const {
22
22
  aria = {},
23
23
  children,
@@ -18,7 +18,7 @@ type TableCellPropTypes = {
18
18
  text?: string
19
19
  };
20
20
 
21
- const TableCell = (props: TableCellPropTypes): React.ReactElement => {
21
+ const TableCell = (props: TableCellPropTypes) => {
22
22
  const {
23
23
  aria = {},
24
24
  children,
@@ -17,7 +17,7 @@ type TableHeadPropTypes = {
17
17
  tag?: "table" | "div";
18
18
  };
19
19
 
20
- const TableHead = (props: TableHeadPropTypes): React.ReactElement => {
20
+ const TableHead = (props: TableHeadPropTypes) => {
21
21
  const {
22
22
  aria = {},
23
23
  children,