playbook_ui 14.14.0.pre.rc.5 → 14.15.0.pre.alpha.PBNTR900phonenumberinputhidden6593

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 (182) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/pb_advanced_table/Components/RegularTableView.tsx +127 -0
  3. data/app/pb_kits/playbook/pb_advanced_table/Components/TableActionBar.tsx +55 -0
  4. data/app/pb_kits/playbook/pb_advanced_table/Components/TablePagination.tsx +33 -0
  5. data/app/pb_kits/playbook/pb_advanced_table/Components/VirtualizedTableView.tsx +275 -0
  6. data/app/pb_kits/playbook/pb_advanced_table/Context/AdvancedTableContext.tsx +143 -3
  7. data/app/pb_kits/playbook/pb_advanced_table/Hooks/useTableActions.ts +66 -0
  8. data/app/pb_kits/playbook/pb_advanced_table/Hooks/useTableState.ts +195 -0
  9. data/app/pb_kits/playbook/pb_advanced_table/SubKits/TableBody.tsx +45 -99
  10. data/app/pb_kits/playbook/pb_advanced_table/Utilities/CellRendererUtils.tsx +73 -0
  11. data/app/pb_kits/playbook/pb_advanced_table/Utilities/RowUtils.ts +52 -0
  12. data/app/pb_kits/playbook/pb_advanced_table/Utilities/TableContainerStyles.ts +80 -0
  13. data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.scss +126 -7
  14. data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.tsx +153 -298
  15. data/app/pb_kits/playbook/pb_advanced_table/advanced_table.rb +8 -1
  16. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_headers_custom_cell.jsx +75 -0
  17. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_infinite_scroll.jsx +50 -0
  18. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props.html.erb +1 -1
  19. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props_rails.md +3 -1
  20. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props_react.md +1 -1
  21. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props_sticky_header.html.erb +33 -0
  22. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props_sticky_header_rails.md +3 -0
  23. data/app/pb_kits/playbook/pb_advanced_table/docs/advanced_table_mock_data_infinite_scroll.json +152002 -0
  24. data/app/pb_kits/playbook/pb_advanced_table/docs/example.yml +2 -0
  25. data/app/pb_kits/playbook/pb_advanced_table/docs/index.js +2 -1
  26. data/app/pb_kits/playbook/pb_card/_card.tsx +2 -1
  27. data/app/pb_kits/playbook/pb_checkbox/_checkbox.tsx +17 -8
  28. data/app/pb_kits/playbook/pb_checkbox/checkbox.test.js +16 -0
  29. data/app/pb_kits/playbook/pb_checkbox/docs/_checkbox_react_hook.jsx +69 -0
  30. data/app/pb_kits/playbook/pb_checkbox/docs/_checkbox_react_hook.md +1 -0
  31. data/app/pb_kits/playbook/pb_checkbox/docs/example.yml +2 -1
  32. data/app/pb_kits/playbook/pb_checkbox/docs/index.js +1 -0
  33. data/app/pb_kits/playbook/pb_currency/_currency.tsx +46 -31
  34. data/app/pb_kits/playbook/pb_currency/currency.html.erb +15 -8
  35. data/app/pb_kits/playbook/pb_currency/currency.rb +17 -2
  36. data/app/pb_kits/playbook/pb_currency/docs/_currency_null_display.html.erb +22 -0
  37. data/app/pb_kits/playbook/pb_currency/docs/_currency_null_display.jsx +34 -0
  38. data/app/pb_kits/playbook/pb_currency/docs/_currency_null_display_rails.md +1 -0
  39. data/app/pb_kits/playbook/pb_currency/docs/_currency_null_display_react.md +1 -0
  40. data/app/pb_kits/playbook/pb_currency/docs/example.yml +2 -0
  41. data/app/pb_kits/playbook/pb_currency/docs/index.js +2 -1
  42. data/app/pb_kits/playbook/pb_date_picker/date_picker.html.erb +4 -1
  43. data/app/pb_kits/playbook/pb_date_picker/date_picker.rb +2 -0
  44. data/app/pb_kits/playbook/pb_date_picker/index.ts +38 -0
  45. data/app/pb_kits/playbook/pb_dialog/dialog.html.erb +5 -6
  46. data/app/pb_kits/playbook/pb_dialog/dialogHelper.js +2 -0
  47. data/app/pb_kits/playbook/pb_dialog/index.js +75 -0
  48. data/app/pb_kits/playbook/pb_drawer/_drawer.scss +43 -3
  49. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_behavior.html.erb +8 -0
  50. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_borders.html.erb +33 -0
  51. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_borders.jsx +3 -3
  52. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_breakpoints.html.erb +0 -0
  53. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_breakpoints.jsx +20 -37
  54. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_default.html.erb +20 -1
  55. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_menu.html.erb +24 -0
  56. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_menu.jsx +6 -6
  57. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_overlay.html.erb +21 -0
  58. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_overlay.jsx +1 -0
  59. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_overlay.md +1 -0
  60. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_sizes.html.erb +49 -0
  61. data/app/pb_kits/playbook/pb_drawer/docs/example.yml +6 -0
  62. data/app/pb_kits/playbook/pb_drawer/drawer.html.erb +20 -12
  63. data/app/pb_kits/playbook/pb_drawer/drawer.rb +49 -1
  64. data/app/pb_kits/playbook/pb_drawer/index.js +257 -0
  65. data/app/pb_kits/playbook/pb_filter/Filter/CurrentFilters.tsx +5 -4
  66. data/app/pb_kits/playbook/pb_filter/Filter/FilterSingle.tsx +2 -2
  67. data/app/pb_kits/playbook/pb_form/docs/_form_form_with.html.erb +1 -0
  68. data/app/pb_kits/playbook/pb_form/docs/_form_form_with_validate.html.erb +3 -2
  69. data/app/pb_kits/playbook/pb_form_pill/_form_pill.scss +9 -2
  70. data/app/pb_kits/playbook/pb_form_pill/_form_pill.tsx +4 -0
  71. data/app/pb_kits/playbook/pb_form_pill/docs/_form_pill_wrapped.html.erb +40 -0
  72. data/app/pb_kits/playbook/pb_form_pill/docs/_form_pill_wrapped.jsx +50 -0
  73. data/app/pb_kits/playbook/pb_form_pill/docs/_form_pill_wrapped.md +3 -0
  74. data/app/pb_kits/playbook/pb_form_pill/docs/example.yml +2 -0
  75. data/app/pb_kits/playbook/pb_form_pill/docs/index.js +1 -0
  76. data/app/pb_kits/playbook/pb_form_pill/form_pill.rb +7 -1
  77. data/app/pb_kits/playbook/pb_icon_button/_icon_button.tsx +71 -0
  78. data/app/pb_kits/playbook/pb_icon_button/docs/_icon_button_default.jsx +17 -0
  79. data/app/pb_kits/playbook/pb_icon_button/docs/_icon_button_sizes.jsx +61 -0
  80. data/app/pb_kits/playbook/pb_icon_button/docs/example.yml +4 -0
  81. data/app/pb_kits/playbook/pb_icon_button/docs/index.js +2 -0
  82. data/app/pb_kits/playbook/pb_icon_button/icon_button.test.jsx +39 -0
  83. data/app/pb_kits/playbook/pb_multi_level_select/_multi_level_select.scss +7 -0
  84. data/app/pb_kits/playbook/pb_multi_level_select/_multi_level_select.tsx +13 -3
  85. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled.html.erb +72 -0
  86. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled.jsx +91 -0
  87. data/app/pb_kits/playbook/pb_multi_level_select/docs/example.yml +2 -1
  88. data/app/pb_kits/playbook/pb_multi_level_select/docs/index.js +1 -0
  89. data/app/pb_kits/playbook/pb_multi_level_select/multi_level_select.rb +6 -0
  90. data/app/pb_kits/playbook/pb_overlay/_overlay.scss +13 -0
  91. data/app/pb_kits/playbook/pb_overlay/_overlay.tsx +11 -1
  92. data/app/pb_kits/playbook/pb_overlay/docs/_overlay_hide_scroll_bar.html.erb +11 -0
  93. data/app/pb_kits/playbook/pb_overlay/docs/_overlay_hide_scroll_bar.jsx +37 -0
  94. data/app/pb_kits/playbook/pb_overlay/docs/_overlay_hide_scroll_bar_rails.md +1 -0
  95. data/app/pb_kits/playbook/pb_overlay/docs/_overlay_hide_scroll_bar_react.md +1 -0
  96. data/app/pb_kits/playbook/pb_overlay/docs/_overlay_vertical_dynamic_multi_directional.html.erb +11 -0
  97. data/app/pb_kits/playbook/pb_overlay/docs/_overlay_vertical_dynamic_multi_directional.jsx +37 -0
  98. data/app/pb_kits/playbook/pb_overlay/docs/_overlay_vertical_dynamic_multi_directional.md +1 -0
  99. data/app/pb_kits/playbook/pb_overlay/docs/_overlay_vertical_dynamic_multi_directional_react.md +1 -0
  100. data/app/pb_kits/playbook/pb_overlay/docs/example.yml +4 -0
  101. data/app/pb_kits/playbook/pb_overlay/docs/index.js +2 -0
  102. data/app/pb_kits/playbook/pb_overlay/index.js +61 -0
  103. data/app/pb_kits/playbook/pb_overlay/overlay.html.erb +5 -3
  104. data/app/pb_kits/playbook/pb_overlay/overlay.rb +16 -1
  105. data/app/pb_kits/playbook/pb_overlay/overlay.test.jsx +12 -0
  106. data/app/pb_kits/playbook/pb_overlay/subcomponents/_overlay_token.tsx +48 -10
  107. data/app/pb_kits/playbook/pb_phone_number_input/_phone_number_input.tsx +4 -0
  108. data/app/pb_kits/playbook/pb_phone_number_input/docs/_phone_number_input_default_rails.md +2 -0
  109. data/app/pb_kits/playbook/pb_phone_number_input/docs/example.yml +1 -1
  110. data/app/pb_kits/playbook/pb_popover/_popover.tsx +1 -1
  111. data/app/pb_kits/playbook/pb_progress_pills/progress_pills.html.erb +1 -6
  112. data/app/pb_kits/playbook/pb_progress_simple/progress_simple.html.erb +1 -5
  113. data/app/pb_kits/playbook/pb_progress_step/progress_step.html.erb +1 -5
  114. data/app/pb_kits/playbook/pb_progress_step/progress_step_item.html.erb +3 -7
  115. data/app/pb_kits/playbook/pb_radio/_radio.tsx +85 -74
  116. data/app/pb_kits/playbook/pb_radio/docs/_radio_react_hook.jsx +60 -0
  117. data/app/pb_kits/playbook/pb_radio/docs/_radio_react_hook.md +1 -0
  118. data/app/pb_kits/playbook/pb_radio/docs/example.yml +2 -1
  119. data/app/pb_kits/playbook/pb_radio/docs/index.js +1 -0
  120. data/app/pb_kits/playbook/pb_radio/radio.html.erb +6 -11
  121. data/app/pb_kits/playbook/pb_radio/radio.test.js +16 -0
  122. data/app/pb_kits/playbook/pb_select/docs/_select_react_hook.jsx +58 -0
  123. data/app/pb_kits/playbook/pb_select/docs/_select_react_hook.md +1 -0
  124. data/app/pb_kits/playbook/pb_select/docs/example.yml +1 -0
  125. data/app/pb_kits/playbook/pb_select/docs/index.js +1 -0
  126. data/app/pb_kits/playbook/pb_select/index.js +38 -0
  127. data/app/pb_kits/playbook/pb_select/select.html.erb +3 -5
  128. data/app/pb_kits/playbook/pb_select/select.rb +8 -0
  129. data/app/pb_kits/playbook/pb_selectable_card/selectable_card.html.erb +1 -5
  130. data/app/pb_kits/playbook/pb_selectable_card_icon/selectable_card_icon.html.erb +1 -4
  131. data/app/pb_kits/playbook/pb_selectable_icon/selectable_icon.html.erb +1 -5
  132. data/app/pb_kits/playbook/pb_timeline/_timeline.scss +2 -2
  133. data/app/pb_kits/playbook/pb_title/_title.scss +32 -0
  134. data/app/pb_kits/playbook/pb_title/_title.tsx +10 -1
  135. data/app/pb_kits/playbook/pb_title/docs/_title_default.html.erb +1 -2
  136. data/app/pb_kits/playbook/pb_title/docs/_title_default.jsx +1 -1
  137. data/app/pb_kits/playbook/pb_title/docs/_title_display_size.html.erb +7 -0
  138. data/app/pb_kits/playbook/pb_title/docs/_title_display_size.jsx +54 -0
  139. data/app/pb_kits/playbook/pb_title/docs/_title_display_size.md +1 -0
  140. data/app/pb_kits/playbook/pb_title/docs/example.yml +2 -0
  141. data/app/pb_kits/playbook/pb_title/docs/index.js +1 -0
  142. data/app/pb_kits/playbook/pb_title/title.rb +10 -1
  143. data/app/pb_kits/playbook/pb_tooltip/_tooltip.scss +0 -3
  144. data/app/pb_kits/playbook/pb_tooltip/_tooltip.tsx +25 -0
  145. data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_delay_rails.html.erb +39 -0
  146. data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_delay_rails.md +3 -0
  147. data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_interaction.html.erb +26 -0
  148. data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_sizing.jsx +69 -0
  149. data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_sizing.md +3 -0
  150. data/app/pb_kits/playbook/pb_tooltip/docs/example.yml +3 -1
  151. data/app/pb_kits/playbook/pb_tooltip/docs/index.js +1 -0
  152. data/app/pb_kits/playbook/pb_tooltip/floating_ui.js +282 -0
  153. data/app/pb_kits/playbook/pb_tooltip/index.js +2 -2
  154. data/app/pb_kits/playbook/pb_tooltip/tooltip.rb +10 -2
  155. data/app/pb_kits/playbook/pb_typeahead/_typeahead.tsx +36 -2
  156. data/app/pb_kits/playbook/pb_typeahead/components/MultiValue.tsx +5 -1
  157. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_dynamic_options.html.erb +45 -0
  158. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_dynamic_options.md +5 -0
  159. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_dynamic_options_pure_rails.html.erb +33 -0
  160. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_dynamic_options_pure_rails.md +3 -0
  161. data/app/pb_kits/playbook/pb_typeahead/docs/example.yml +2 -0
  162. data/app/pb_kits/playbook/pb_typeahead/index.ts +61 -8
  163. data/app/pb_kits/playbook/pb_typeahead/typeahead.rb +17 -2
  164. data/app/pb_kits/playbook/utilities/object.test.js +99 -0
  165. data/app/pb_kits/playbook/utilities/object.ts +29 -1
  166. data/dist/chunks/_typeahead-Cu4WtFsC.js +36 -0
  167. data/dist/chunks/_weekday_stacked-iCkVKLxW.js +45 -0
  168. data/dist/chunks/{lib-D3us1bGD.js → lib-5OzNgeeu.js} +2 -2
  169. data/dist/chunks/{pb_form_validation-BpihMSOQ.js → pb_form_validation-DGhKbZtO.js} +1 -1
  170. data/dist/chunks/vendor.js +1 -1
  171. data/dist/menu.yml +3 -3
  172. data/dist/playbook-doc.js +1 -1
  173. data/dist/playbook-rails-react-bindings.js +1 -1
  174. data/dist/playbook-rails.js +1 -1
  175. data/dist/playbook.css +1 -1
  176. data/lib/playbook/forms/builder/time_zone_select_field.rb +19 -0
  177. data/lib/playbook/forms/builder.rb +1 -0
  178. data/lib/playbook/version.rb +2 -2
  179. metadata +77 -7
  180. data/dist/chunks/_typeahead-CAIQfP7X.js +0 -36
  181. data/dist/chunks/_weekday_stacked-DstwbGUv.js +0 -45
  182. /data/app/pb_kits/playbook/pb_phone_number_input/docs/{_phone_number_input_default.html.erb → _phone_number_input_default_rails.html.erb} +0 -0
@@ -0,0 +1,61 @@
1
+ import React from 'react'
2
+ import { IconButton, Flex } from 'playbook-ui'
3
+
4
+ const IconButtonSizes = (props) => (
5
+ <div>
6
+ <Flex align="center">
7
+ <IconButton
8
+ {...props}
9
+ size="lg"
10
+ />
11
+ <span>Large</span>
12
+ </Flex>
13
+ <Flex align="center">
14
+ <IconButton
15
+ {...props}
16
+ size="sm"
17
+ />
18
+ <span>Small</span>
19
+ </Flex>
20
+ <Flex align="center">
21
+ <IconButton
22
+ {...props}
23
+ size="xs"
24
+ />
25
+ <span>XSmall</span>
26
+ </Flex>
27
+ <Flex
28
+ align="center"
29
+ marginTop="md"
30
+ >
31
+ <IconButton
32
+ {...props}
33
+ size="1x"
34
+ />
35
+ <span>1x</span>
36
+ </Flex>
37
+ <Flex align="center">
38
+ <IconButton
39
+ {...props}
40
+ size="2x"
41
+ />
42
+ <span>2x</span>
43
+ </Flex>
44
+ <Flex align="center">
45
+ <IconButton
46
+ {...props}
47
+ size="3x"
48
+ />
49
+ <span>3x</span>
50
+ </Flex>
51
+ <Flex align="center">
52
+ <IconButton
53
+ {...props}
54
+ size="4x"
55
+ />
56
+ <span>4x</span>
57
+ </Flex>
58
+ </div>
59
+ )
60
+
61
+ export default IconButtonSizes
@@ -3,3 +3,7 @@ examples:
3
3
  rails:
4
4
  - icon_button_default: Default
5
5
  - icon_button_sizes: Sizes
6
+
7
+ react:
8
+ - icon_button_default: Default
9
+ - icon_button_sizes: Sizes
@@ -0,0 +1,2 @@
1
+ export { default as IconButtonDefault } from './_icon_button_default.jsx'
2
+ export { default as IconButtonSizes } from './_icon_button_sizes.jsx'
@@ -0,0 +1,39 @@
1
+ import { ensureAccessible, renderKit } from '../utilities/test-utils'
2
+
3
+ import { IconButton } from 'playbook-ui'
4
+
5
+ const props = {
6
+ data: { testid: 'default', icon: 'plus' }
7
+ }
8
+
9
+ test('default test', () => {
10
+ const kit = renderKit(IconButton, props)
11
+
12
+ expect(kit).toBeInTheDocument()
13
+ expect(kit).toHaveClass('pb_icon_button_kit_default')
14
+
15
+ const iconElement = kit.querySelector('.icon_button_icon')
16
+ expect(iconElement).toBeInTheDocument()
17
+ })
18
+
19
+ it("should be accessible", async () => {
20
+ ensureAccessible(IconButton, props)
21
+ })
22
+
23
+ test('passes link variant prop', () => {
24
+ const kit = renderKit(IconButton, { ...props, variant: "link" })
25
+ expect(kit).toBeInTheDocument()
26
+ expect(kit).toHaveClass('pb_icon_button_kit_link')
27
+ })
28
+
29
+ test('should set button type to "submit" when htmlType prop is passed', () => {
30
+ const kit = renderKit(IconButton, { ...props, htmlType: 'submit' })
31
+ const buttonElement = kit.querySelector('button')
32
+ expect(buttonElement).toHaveAttribute('type', 'submit')
33
+ })
34
+
35
+ test('passes custom classname', () => {
36
+ const kit = renderKit(IconButton, { ...props, className: "extra_class" })
37
+ expect(kit).toBeInTheDocument()
38
+ expect(kit).toHaveClass('pb_icon_button_kit_default extra_class')
39
+ })
@@ -42,6 +42,13 @@
42
42
  outline: none;
43
43
  }
44
44
  }
45
+
46
+ &:has(input:disabled) {
47
+ background-color: shade($white, 5%);
48
+ box-shadow: none;
49
+ cursor: default;
50
+ opacity: 0.5;
51
+ }
45
52
  }
46
53
  }
47
54
  .dropdown_menu {
@@ -27,6 +27,7 @@ type MultiLevelSelectProps = {
27
27
  aria?: { [key: string]: string }
28
28
  className?: string
29
29
  data?: { [key: string]: string }
30
+ disabled?: boolean
30
31
  htmlOptions?: {[key: string]: string | number | boolean | (() => void)},
31
32
  id?: string
32
33
  inputDisplay?: "pills" | "none"
@@ -37,6 +38,7 @@ type MultiLevelSelectProps = {
37
38
  onSelect?: (prop: { [key: string]: any }) => void
38
39
  selectedIds?: string[] | any
39
40
  variant?: "multi" | "single"
41
+ wrapped?: boolean
40
42
  pillColor?: "primary" | "neutral" | "success" | "warning" | "error" | "info" | "data_1" | "data_2" | "data_3" | "data_4" | "data_5" | "data_6" | "data_7" | "data_8" | "windows" | "siding" | "roofing" | "doors" | "gutters" | "solar" | "insulation" | "accessories",
41
43
  } & GlobalProps
42
44
 
@@ -45,6 +47,7 @@ const MultiLevelSelect = (props: MultiLevelSelectProps) => {
45
47
  aria = {},
46
48
  className,
47
49
  data = {},
50
+ disabled = false,
48
51
  htmlOptions = {},
49
52
  id,
50
53
  inputDisplay = "pills",
@@ -56,6 +59,7 @@ const MultiLevelSelect = (props: MultiLevelSelectProps) => {
56
59
  selectedIds,
57
60
  variant = "multi",
58
61
  children,
62
+ wrapped,
59
63
  pillColor = "primary"
60
64
  } = props
61
65
 
@@ -292,7 +296,8 @@ const MultiLevelSelect = (props: MultiLevelSelectProps) => {
292
296
  const handleInputWrapperClick = (e: any) => {
293
297
  if (
294
298
  e.target.id === "multiselect_input" ||
295
- e.target.classList.contains("pb_form_pill_tag")
299
+ e.target.classList.contains("pb_form_pill_tag") ||
300
+ disabled
296
301
  ) {
297
302
  return;
298
303
  }
@@ -421,16 +426,17 @@ const MultiLevelSelect = (props: MultiLevelSelectProps) => {
421
426
  handledropdownItemClick,
422
427
  filterItem,
423
428
  }}>
424
- <div className="wrapper"
429
+ <div className="wrapper"
425
430
  ref={dropdownRef}
426
431
  >
427
- <div className="input_wrapper"
432
+ <div className="input_wrapper"
428
433
  onClick={handleInputWrapperClick}
429
434
  >
430
435
  <div className="input_inner_container">
431
436
  {variant === "single" && defaultReturn.length !== 0
432
437
  ? defaultReturn.map((selectedItem) => (
433
438
  <input
439
+ disabled={disabled}
434
440
  key={selectedItem.id}
435
441
  name={`${name}[]`}
436
442
  type="hidden"
@@ -444,6 +450,7 @@ const MultiLevelSelect = (props: MultiLevelSelectProps) => {
444
450
  {returnAllSelected && returnedArray.length !== 0
445
451
  ? returnedArray.map((item) => (
446
452
  <input
453
+ disabled={disabled}
447
454
  key={item.id}
448
455
  name={`${name}[]`}
449
456
  type="hidden"
@@ -461,6 +468,7 @@ const MultiLevelSelect = (props: MultiLevelSelectProps) => {
461
468
  key={index}
462
469
  onClick={(event: any) => handlePillClose(event, item)}
463
470
  text={item.label}
471
+ wrapped={wrapped}
464
472
  />
465
473
  ))
466
474
  : null}
@@ -474,6 +482,7 @@ const MultiLevelSelect = (props: MultiLevelSelectProps) => {
474
482
  key={index}
475
483
  onClick={(event: any) => handlePillClose(event, item)}
476
484
  text={item.label}
485
+ wrapped={wrapped}
477
486
  />
478
487
  ))
479
488
  : null}
@@ -489,6 +498,7 @@ const MultiLevelSelect = (props: MultiLevelSelectProps) => {
489
498
  )}
490
499
 
491
500
  <input
501
+ disabled={disabled}
492
502
  id="multiselect_input"
493
503
  onChange={(e) => {
494
504
  variant === "single"
@@ -0,0 +1,72 @@
1
+ <% treeData = [{
2
+ label: "Power Home Remodeling",
3
+ value: "Power Home Remodeling",
4
+ id: "100",
5
+ expanded: true,
6
+ children: [
7
+ {
8
+ label: "People",
9
+ value: "People",
10
+ id: "101",
11
+ expanded: true,
12
+ children: [
13
+ {
14
+ label: "Talent Acquisition",
15
+ value: "Talent Acquisition",
16
+ id: "102",
17
+ },
18
+ {
19
+ label: "Business Affairs",
20
+ value: "Business Affairs",
21
+ id: "103",
22
+ children: [
23
+ {
24
+ label: "Initiatives",
25
+ value: "Initiatives",
26
+ id: "104",
27
+ },
28
+ {
29
+ label: "Learning & Development",
30
+ value: "Learning & Development",
31
+ id: "105",
32
+ },
33
+ ],
34
+ },
35
+ {
36
+ label: "People Experience",
37
+ value: "People Experience",
38
+ id: "106",
39
+ },
40
+ ],
41
+ },
42
+ {
43
+ label: "Contact Center",
44
+ value: "Contact Center",
45
+ id: "107",
46
+ children: [
47
+ {
48
+ label: "Appointment Management",
49
+ value: "Appointment Management",
50
+ id: "108",
51
+ },
52
+ {
53
+ label: "Customer Service",
54
+ value: "Customer Service",
55
+ id: "109",
56
+ },
57
+ {
58
+ label: "Energy",
59
+ value: "Energy",
60
+ id: "110",
61
+ },
62
+ ],
63
+ },
64
+ ],
65
+ }] %>
66
+
67
+ <%= pb_rails("multi_level_select", props: {
68
+ disabled: true,
69
+ id: "multi-level-select-default-rails",
70
+ name: "my_array",
71
+ tree_data: treeData
72
+ }) %>
@@ -0,0 +1,91 @@
1
+ import React from "react";
2
+ import MultiLevelSelect from "../_multi_level_select";
3
+
4
+ const treeData = [
5
+ {
6
+ label: "Power Home Remodeling",
7
+ value: "Power Home Remodeling",
8
+ id: "powerhome1",
9
+ expanded: true,
10
+ children: [
11
+ {
12
+ label: "People",
13
+ value: "People",
14
+ id: "people1",
15
+ expanded: true,
16
+ children: [
17
+ {
18
+ label: "Talent Acquisition",
19
+ value: "Talent Acquisition",
20
+ id: "talent1",
21
+ },
22
+ {
23
+ label: "Business Affairs",
24
+ value: "Business Affairs",
25
+ id: "business1",
26
+ children: [
27
+ {
28
+ label: "Initiatives",
29
+ value: "Initiatives",
30
+ id: "initiative1",
31
+ },
32
+ {
33
+ label: "Learning & Development",
34
+ value: "Learning & Development",
35
+ id: "development1",
36
+ },
37
+ ],
38
+ },
39
+ {
40
+ label: "People Experience",
41
+ value: "People Experience",
42
+ id: "experience1",
43
+ },
44
+ ],
45
+ },
46
+ {
47
+ label: "Contact Center",
48
+ value: "Contact Center",
49
+ id: "contact1",
50
+ children: [
51
+ {
52
+ label: "Appointment Management",
53
+ value: "Appointment Management",
54
+ id: "appointment1",
55
+ },
56
+ {
57
+ label: "Customer Service",
58
+ value: "Customer Service",
59
+ id: "customer1",
60
+ },
61
+ {
62
+ label: "Energy",
63
+ value: "Energy",
64
+ id: "energy1",
65
+ },
66
+ ],
67
+ },
68
+ ],
69
+ },
70
+ ];
71
+
72
+ const MultiLevelSelectDisabled = (props) => {
73
+ return (
74
+ <>
75
+ <MultiLevelSelect
76
+ disabled
77
+ id='multiselect-default'
78
+ onSelect={(selectedNodes) =>
79
+ console.log(
80
+ "Selected Items",
81
+ selectedNodes
82
+ )
83
+ }
84
+ treeData={treeData}
85
+ {...props}
86
+ />
87
+ </>
88
+ )
89
+ };
90
+
91
+ export default MultiLevelSelectDisabled
@@ -8,6 +8,7 @@ examples:
8
8
  - multi_level_select_with_form: With Form
9
9
  - multi_level_select_color: With Pills (Custom Color)
10
10
  - multi_level_select_reset: Reset Selection
11
+ - multi_level_select_disabled: Disabled
11
12
 
12
13
  react:
13
14
  - multi_level_select_default: Default
@@ -18,4 +19,4 @@ examples:
18
19
  - multi_level_select_color: With Pills (Custom Color)
19
20
  - multi_level_select_with_children: Checkboxes With Children
20
21
  - multi_level_select_with_children_with_radios: Single Select With Children
21
-
22
+ - multi_level_select_disabled: Disabled
@@ -6,3 +6,4 @@ export { default as MultiLevelSelectSelectedIdsReact } from "./_multi_level_sele
6
6
  export { default as MultiLevelSelectColor } from './_multi_level_select_color.jsx'
7
7
  export { default as MultiLevelSelectWithChildren } from './_multi_level_select_with_children.jsx'
8
8
  export { default as MultiLevelSelectWithChildrenWithRadios } from './_multi_level_select_with_children_with_radios.jsx'
9
+ export { default as MultiLevelSelectDisabled } from './_multi_level_select_disabled.jsx'
@@ -22,6 +22,10 @@ module Playbook
22
22
  prop :pill_color, type: Playbook::Props::Enum,
23
23
  values: %w[primary neutral success warning error info data_1 data_2 data_3 data_4 data_5 data_6 data_7 data_8 windows siding roofing doors gutters solar insulation accessories],
24
24
  default: "primary"
25
+ prop :wrapped, type: Playbook::Props::Boolean,
26
+ default: false
27
+ prop :disabled, type: Playbook::Props::Boolean,
28
+ default: false
25
29
 
26
30
  def classname
27
31
  generate_classname("pb_multi_level_select")
@@ -29,6 +33,7 @@ module Playbook
29
33
 
30
34
  def multi_level_select_options
31
35
  {
36
+ disabled: disabled,
32
37
  id: id,
33
38
  inputDisplay: input_display,
34
39
  name: name,
@@ -38,6 +43,7 @@ module Playbook
38
43
  input_name: input_name,
39
44
  variant: variant,
40
45
  pillColor: pill_color,
46
+ wrapped: wrapped,
41
47
  }
42
48
  end
43
49
  end
@@ -69,4 +69,17 @@ $overlay_colors: (
69
69
  pointer-events: none;
70
70
  z-index: 1;
71
71
  }
72
+
73
+ &.overlay-hide-scrollbar {
74
+ & [class*="overflow_x_auto"],
75
+ & [class*="overflow_y_auto"],
76
+ & [class*="overflow_auto"] {
77
+ &::-webkit-scrollbar {
78
+ display: none !important;
79
+ }
80
+
81
+ -ms-overflow-style: none !important;
82
+ scrollbar-width: none !important;
83
+ }
84
+ }
72
85
  }
@@ -8,8 +8,10 @@ import OverlayToken from './subcomponents/_overlay_token'
8
8
  export type OverlayChildrenProps = {
9
9
  children: React.ReactNode[] | React.ReactNode,
10
10
  color: "card_light" | "bg_light" | "card_dark" | "bg_dark",
11
+ dynamic?: boolean,
11
12
  position: string,
12
13
  size: string,
14
+ scrollBarNone?: boolean,
13
15
  }
14
16
 
15
17
  type OverlayProps = {
@@ -18,9 +20,12 @@ type OverlayProps = {
18
20
  children: React.ReactNode[] | React.ReactNode,
19
21
  color: "card_light" | "bg_light" | "card_dark" | "bg_dark",
20
22
  data?: { [key: string]: string },
23
+ dynamic?: false,
21
24
  htmlOptions?: { [key: string]: string | number | boolean | (() => void) },
22
25
  id?: string,
23
26
  layout: { [key: string]: string },
27
+ scrollBarNone?: boolean,
28
+
24
29
  }
25
30
 
26
31
  const Overlay = (props: OverlayProps) => {
@@ -30,14 +35,16 @@ const Overlay = (props: OverlayProps) => {
30
35
  children,
31
36
  color = "card_light",
32
37
  data = {},
38
+ dynamic = false,
33
39
  htmlOptions = {},
34
40
  id,
35
41
  layout = { "bottom": "full" },
42
+ scrollBarNone = false,
36
43
  } = props
37
44
 
38
45
  const ariaProps = buildAriaProps(aria)
39
46
  const dataProps = buildDataProps(data)
40
- const classes = classnames(buildCss('pb_overlay'), globalProps(props), className)
47
+ const classes = classnames(buildCss('pb_overlay'), { 'overlay-hide-scrollbar': scrollBarNone }, globalProps(props), className )
41
48
  const htmlProps = buildHtmlProps(htmlOptions)
42
49
  const dynamicInlineProps = globalInlineProps(props)
43
50
 
@@ -65,11 +72,14 @@ const Overlay = (props: OverlayProps) => {
65
72
  children,
66
73
  color,
67
74
  position: getPosition(),
75
+ scrollBarNone,
68
76
  size: getSize()
69
77
  }) : OverlayToken({
70
78
  children,
71
79
  color,
80
+ dynamic: dynamic,
72
81
  position: getPosition(),
82
+ scrollBarNone,
73
83
  size: getSize()
74
84
  })
75
85
  }
@@ -0,0 +1,11 @@
1
+ <%= pb_rails("overlay", props: { layout: { "x": "xl" }, color: "card_light", scroll_bar_none: true }) do %>
2
+ <%= pb_rails("flex", props: { column_gap: "lg", orientation: "row", overflow_x: "auto" }) do %>
3
+ <% 15.times do %>
4
+ <%= pb_rails("flex/flex_item") do %>
5
+ <%= pb_rails("card") do %>
6
+ Card content
7
+ <% end %>
8
+ <% end %>
9
+ <% end %>
10
+ <% end %>
11
+ <% end %>
@@ -0,0 +1,37 @@
1
+ import React from 'react'
2
+ import {
3
+ Overlay,
4
+ Card,
5
+ Flex,
6
+ FlexItem,
7
+ } from 'playbook-ui'
8
+
9
+ const InlineCardsExample = () => {
10
+ return (
11
+ <Flex
12
+ columnGap="lg"
13
+ orientation="row"
14
+ overflowX="auto"
15
+ >
16
+ {Array.from({ length: 15 }, (_, index) => (
17
+ <FlexItem key={index}>
18
+ <Card>{"Card Content"}</Card>
19
+ </FlexItem>
20
+ ))}
21
+ </Flex>
22
+ )
23
+ }
24
+
25
+ const OverlayHideScrollBar = () => (
26
+ <>
27
+ <Overlay
28
+ color="card_light"
29
+ layout={{"x": "xl"}}
30
+ scrollBarNone
31
+ >
32
+ <InlineCardsExample />
33
+ </Overlay>
34
+ </>
35
+ )
36
+
37
+ export default OverlayHideScrollBar
@@ -0,0 +1 @@
1
+ Pass the `scroll_bar_none` prop to hide the scrollbar from view. This is particularly helpful for small containers where the scrollbar may occupy too much space.
@@ -0,0 +1 @@
1
+ Pass the `scrollBarNone` prop to hide the scrollbar from view. This is particularly helpful for small containers where the scrollbar may occupy too much space.
@@ -0,0 +1,11 @@
1
+ <%= pb_rails("overlay", props: { layout: { "x": "xl" }, color: "card_light", dynamic: true }) do %>
2
+ <%= pb_rails("flex", props: { column_gap: "lg", orientation: "row", overflow_x: "auto" }) do %>
3
+ <% 15.times do %>
4
+ <%= pb_rails("flex/flex_item") do %>
5
+ <%= pb_rails("card") do %>
6
+ Card content
7
+ <% end %>
8
+ <% end %>
9
+ <% end %>
10
+ <% end %>
11
+ <% end %>
@@ -0,0 +1,37 @@
1
+ import React, { forwardRef } from 'react'
2
+ import {
3
+ Overlay,
4
+ Card,
5
+ Flex,
6
+ FlexItem,
7
+ } from 'playbook-ui'
8
+
9
+ const InlineCardsExample = forwardRef(function InlineCardsExample(ref) {
10
+ return (
11
+ <Flex
12
+ columnGap="lg"
13
+ orientation="row"
14
+ ref={ref}
15
+ >
16
+ {Array.from({ length: 15 }, (_, index) => (
17
+ <FlexItem key={index}>
18
+ <Card>{"Card Content"}</Card>
19
+ </FlexItem>
20
+ ))}
21
+ </Flex>
22
+ )
23
+ })
24
+
25
+ const OverlayVerticalDynamicMultiDirectional = () => (
26
+ <>
27
+ <Overlay
28
+ color="card_light"
29
+ dynamic
30
+ layout={{"x": "xl"}}
31
+ >
32
+ <InlineCardsExample />
33
+ </Overlay>
34
+ </>
35
+ )
36
+
37
+ export default OverlayVerticalDynamicMultiDirectional
@@ -0,0 +1 @@
1
+ Pass the `dynamic` prop to make the overlay render while the scrollbar isn't at either end on the scrollbar.
@@ -0,0 +1 @@
1
+ Pass the `dynamic` prop to make the overlay render while the scrollbar isn't at either end on the scrollbar. You must also add a `ref` to the child that's being passed through the Overlay.
@@ -2,9 +2,13 @@ examples:
2
2
  react:
3
3
  - overlay_default: Default
4
4
  - overlay_multi_directional: Multi-directional
5
+ - overlay_vertical_dynamic_multi_directional: Vertical Dynamic Multi-directional
5
6
  - overlay_toggle: Toggle
7
+ - overlay_hide_scroll_bar: Hide Scroll Bar
6
8
 
7
9
  rails:
8
10
  - overlay_default: Default
9
11
  - overlay_multi_directional: Multi-directional
12
+ - overlay_vertical_dynamic_multi_directional: Vertical Dynamic Multi-directional
10
13
  - overlay_toggle: Toggle
14
+ - overlay_hide_scroll_bar: Hide Scroll Bar
@@ -1,3 +1,5 @@
1
1
  export { default as OverlayDefault } from './_overlay_default.jsx'
2
2
  export { default as OverlayMultiDirectional } from './_overlay_multi_directional.jsx'
3
3
  export { default as OverlayToggle } from './_overlay_toggle.jsx'
4
+ export { default as OverlayVerticalDynamicMultiDirectional } from './_overlay_vertical_dynamic_multi_directional.jsx'
5
+ export { default as OverlayHideScrollBar } from './_overlay_hide_scroll_bar.jsx'