playbook_ui 14.14.0 → 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 (162) 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 +123 -7
  14. data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.tsx +153 -299
  15. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_infinite_scroll.jsx +50 -0
  16. data/app/pb_kits/playbook/pb_advanced_table/docs/advanced_table_mock_data_infinite_scroll.json +152002 -0
  17. data/app/pb_kits/playbook/pb_card/_card.tsx +2 -1
  18. data/app/pb_kits/playbook/pb_currency/_currency.tsx +46 -31
  19. data/app/pb_kits/playbook/pb_currency/currency.html.erb +15 -8
  20. data/app/pb_kits/playbook/pb_currency/currency.rb +17 -2
  21. data/app/pb_kits/playbook/pb_currency/docs/_currency_null_display.html.erb +22 -0
  22. data/app/pb_kits/playbook/pb_currency/docs/_currency_null_display.jsx +34 -0
  23. data/app/pb_kits/playbook/pb_currency/docs/_currency_null_display_rails.md +1 -0
  24. data/app/pb_kits/playbook/pb_currency/docs/_currency_null_display_react.md +1 -0
  25. data/app/pb_kits/playbook/pb_currency/docs/example.yml +2 -0
  26. data/app/pb_kits/playbook/pb_currency/docs/index.js +2 -1
  27. data/app/pb_kits/playbook/pb_date_picker/date_picker.html.erb +4 -1
  28. data/app/pb_kits/playbook/pb_date_picker/date_picker.rb +2 -0
  29. data/app/pb_kits/playbook/pb_date_picker/index.ts +38 -0
  30. data/app/pb_kits/playbook/pb_dialog/dialog.html.erb +5 -6
  31. data/app/pb_kits/playbook/pb_dialog/dialogHelper.js +2 -0
  32. data/app/pb_kits/playbook/pb_dialog/index.js +75 -0
  33. data/app/pb_kits/playbook/pb_drawer/_drawer.scss +43 -3
  34. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_behavior.html.erb +8 -0
  35. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_borders.html.erb +33 -0
  36. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_borders.jsx +3 -3
  37. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_breakpoints.html.erb +0 -0
  38. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_breakpoints.jsx +20 -37
  39. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_default.html.erb +20 -1
  40. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_menu.html.erb +24 -0
  41. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_menu.jsx +6 -6
  42. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_overlay.html.erb +21 -0
  43. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_overlay.jsx +1 -0
  44. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_overlay.md +1 -0
  45. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_sizes.html.erb +49 -0
  46. data/app/pb_kits/playbook/pb_drawer/docs/example.yml +6 -0
  47. data/app/pb_kits/playbook/pb_drawer/drawer.html.erb +20 -12
  48. data/app/pb_kits/playbook/pb_drawer/drawer.rb +49 -1
  49. data/app/pb_kits/playbook/pb_drawer/index.js +257 -0
  50. data/app/pb_kits/playbook/pb_filter/Filter/CurrentFilters.tsx +5 -4
  51. data/app/pb_kits/playbook/pb_filter/Filter/FilterSingle.tsx +2 -2
  52. data/app/pb_kits/playbook/pb_form/docs/_form_form_with.html.erb +1 -0
  53. data/app/pb_kits/playbook/pb_form/docs/_form_form_with_validate.html.erb +3 -2
  54. data/app/pb_kits/playbook/pb_form_pill/_form_pill.scss +9 -2
  55. data/app/pb_kits/playbook/pb_form_pill/_form_pill.tsx +4 -0
  56. data/app/pb_kits/playbook/pb_form_pill/docs/_form_pill_wrapped.html.erb +40 -0
  57. data/app/pb_kits/playbook/pb_form_pill/docs/_form_pill_wrapped.jsx +50 -0
  58. data/app/pb_kits/playbook/pb_form_pill/docs/_form_pill_wrapped.md +3 -0
  59. data/app/pb_kits/playbook/pb_form_pill/docs/example.yml +2 -0
  60. data/app/pb_kits/playbook/pb_form_pill/docs/index.js +1 -0
  61. data/app/pb_kits/playbook/pb_form_pill/form_pill.rb +7 -1
  62. data/app/pb_kits/playbook/pb_icon_button/_icon_button.tsx +71 -0
  63. data/app/pb_kits/playbook/pb_icon_button/docs/_icon_button_default.jsx +17 -0
  64. data/app/pb_kits/playbook/pb_icon_button/docs/_icon_button_sizes.jsx +61 -0
  65. data/app/pb_kits/playbook/pb_icon_button/docs/example.yml +4 -0
  66. data/app/pb_kits/playbook/pb_icon_button/docs/index.js +2 -0
  67. data/app/pb_kits/playbook/pb_icon_button/icon_button.test.jsx +39 -0
  68. data/app/pb_kits/playbook/pb_multi_level_select/_multi_level_select.scss +7 -0
  69. data/app/pb_kits/playbook/pb_multi_level_select/_multi_level_select.tsx +13 -3
  70. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled.html.erb +72 -0
  71. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled.jsx +91 -0
  72. data/app/pb_kits/playbook/pb_multi_level_select/docs/example.yml +2 -1
  73. data/app/pb_kits/playbook/pb_multi_level_select/docs/index.js +1 -0
  74. data/app/pb_kits/playbook/pb_multi_level_select/multi_level_select.rb +6 -0
  75. data/app/pb_kits/playbook/pb_overlay/_overlay.scss +13 -0
  76. data/app/pb_kits/playbook/pb_overlay/_overlay.tsx +7 -1
  77. data/app/pb_kits/playbook/pb_overlay/docs/_overlay_hide_scroll_bar.html.erb +11 -0
  78. data/app/pb_kits/playbook/pb_overlay/docs/_overlay_hide_scroll_bar.jsx +37 -0
  79. data/app/pb_kits/playbook/pb_overlay/docs/_overlay_hide_scroll_bar_rails.md +1 -0
  80. data/app/pb_kits/playbook/pb_overlay/docs/_overlay_hide_scroll_bar_react.md +1 -0
  81. data/app/pb_kits/playbook/pb_overlay/docs/_overlay_vertical_dynamic_multi_directional.html.erb +11 -0
  82. data/app/pb_kits/playbook/pb_overlay/docs/_overlay_vertical_dynamic_multi_directional.md +1 -0
  83. data/app/pb_kits/playbook/pb_overlay/docs/example.yml +3 -0
  84. data/app/pb_kits/playbook/pb_overlay/docs/index.js +1 -0
  85. data/app/pb_kits/playbook/pb_overlay/index.js +61 -0
  86. data/app/pb_kits/playbook/pb_overlay/overlay.html.erb +5 -3
  87. data/app/pb_kits/playbook/pb_overlay/overlay.rb +16 -1
  88. data/app/pb_kits/playbook/pb_overlay/overlay.test.jsx +12 -0
  89. data/app/pb_kits/playbook/pb_phone_number_input/_phone_number_input.tsx +4 -0
  90. data/app/pb_kits/playbook/pb_phone_number_input/docs/_phone_number_input_default_rails.md +2 -0
  91. data/app/pb_kits/playbook/pb_phone_number_input/docs/example.yml +1 -1
  92. data/app/pb_kits/playbook/pb_popover/_popover.tsx +1 -1
  93. data/app/pb_kits/playbook/pb_progress_step/progress_step_item.html.erb +2 -2
  94. data/app/pb_kits/playbook/pb_radio/_radio.tsx +85 -74
  95. data/app/pb_kits/playbook/pb_radio/docs/_radio_react_hook.jsx +60 -0
  96. data/app/pb_kits/playbook/pb_radio/docs/_radio_react_hook.md +1 -0
  97. data/app/pb_kits/playbook/pb_radio/docs/example.yml +2 -1
  98. data/app/pb_kits/playbook/pb_radio/docs/index.js +1 -0
  99. data/app/pb_kits/playbook/pb_radio/radio.test.js +16 -0
  100. data/app/pb_kits/playbook/pb_select/docs/_select_react_hook.jsx +58 -0
  101. data/app/pb_kits/playbook/pb_select/docs/_select_react_hook.md +1 -0
  102. data/app/pb_kits/playbook/pb_select/docs/example.yml +1 -0
  103. data/app/pb_kits/playbook/pb_select/docs/index.js +1 -0
  104. data/app/pb_kits/playbook/pb_select/index.js +38 -0
  105. data/app/pb_kits/playbook/pb_select/select.html.erb +3 -5
  106. data/app/pb_kits/playbook/pb_select/select.rb +8 -0
  107. data/app/pb_kits/playbook/pb_selectable_card/selectable_card.html.erb +1 -5
  108. data/app/pb_kits/playbook/pb_selectable_card_icon/selectable_card_icon.html.erb +1 -4
  109. data/app/pb_kits/playbook/pb_selectable_icon/selectable_icon.html.erb +1 -5
  110. data/app/pb_kits/playbook/pb_timeline/_timeline.scss +2 -2
  111. data/app/pb_kits/playbook/pb_title/_title.scss +32 -0
  112. data/app/pb_kits/playbook/pb_title/_title.tsx +10 -1
  113. data/app/pb_kits/playbook/pb_title/docs/_title_default.html.erb +1 -2
  114. data/app/pb_kits/playbook/pb_title/docs/_title_default.jsx +1 -1
  115. data/app/pb_kits/playbook/pb_title/docs/_title_display_size.html.erb +7 -0
  116. data/app/pb_kits/playbook/pb_title/docs/_title_display_size.jsx +54 -0
  117. data/app/pb_kits/playbook/pb_title/docs/_title_display_size.md +1 -0
  118. data/app/pb_kits/playbook/pb_title/docs/example.yml +2 -0
  119. data/app/pb_kits/playbook/pb_title/docs/index.js +1 -0
  120. data/app/pb_kits/playbook/pb_title/title.rb +10 -1
  121. data/app/pb_kits/playbook/pb_tooltip/_tooltip.scss +0 -3
  122. data/app/pb_kits/playbook/pb_tooltip/_tooltip.tsx +25 -0
  123. data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_delay_rails.html.erb +39 -0
  124. data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_delay_rails.md +3 -0
  125. data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_interaction.html.erb +26 -0
  126. data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_sizing.jsx +69 -0
  127. data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_sizing.md +3 -0
  128. data/app/pb_kits/playbook/pb_tooltip/docs/example.yml +3 -1
  129. data/app/pb_kits/playbook/pb_tooltip/docs/index.js +1 -0
  130. data/app/pb_kits/playbook/pb_tooltip/floating_ui.js +282 -0
  131. data/app/pb_kits/playbook/pb_tooltip/index.js +2 -2
  132. data/app/pb_kits/playbook/pb_tooltip/tooltip.rb +10 -2
  133. data/app/pb_kits/playbook/pb_typeahead/_typeahead.tsx +36 -2
  134. data/app/pb_kits/playbook/pb_typeahead/components/MultiValue.tsx +5 -1
  135. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_dynamic_options.html.erb +45 -0
  136. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_dynamic_options.md +5 -0
  137. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_dynamic_options_pure_rails.html.erb +33 -0
  138. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_dynamic_options_pure_rails.md +3 -0
  139. data/app/pb_kits/playbook/pb_typeahead/docs/example.yml +2 -0
  140. data/app/pb_kits/playbook/pb_typeahead/index.ts +61 -8
  141. data/app/pb_kits/playbook/pb_typeahead/typeahead.rb +17 -2
  142. data/app/pb_kits/playbook/utilities/object.test.js +99 -0
  143. data/app/pb_kits/playbook/utilities/object.ts +29 -1
  144. data/dist/chunks/_typeahead-Cu4WtFsC.js +36 -0
  145. data/dist/chunks/_weekday_stacked-iCkVKLxW.js +45 -0
  146. data/dist/chunks/lazysizes-B7xYodB-.js +1 -0
  147. data/dist/chunks/{lib-D3us1bGD.js → lib-5OzNgeeu.js} +2 -2
  148. data/dist/chunks/{pb_form_validation-BpihMSOQ.js → pb_form_validation-DGhKbZtO.js} +1 -1
  149. data/dist/chunks/vendor.js +1 -1
  150. data/dist/menu.yml +3 -3
  151. data/dist/playbook-doc.js +1 -1
  152. data/dist/playbook-rails-react-bindings.js +1 -1
  153. data/dist/playbook-rails.js +1 -1
  154. data/dist/playbook.css +1 -1
  155. data/lib/playbook/forms/builder/time_zone_select_field.rb +19 -0
  156. data/lib/playbook/forms/builder.rb +1 -0
  157. data/lib/playbook/version.rb +2 -2
  158. metadata +71 -8
  159. data/dist/chunks/_typeahead-PqkcDf1H.js +0 -36
  160. data/dist/chunks/_weekday_stacked-B_pw5Znc.js +0 -45
  161. data/dist/chunks/lazysizes-DHz07jlL.js +0 -1
  162. /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,40 @@
1
+ <%
2
+ names = [
3
+ { label: 'Alexander Nathaniel Montgomery', value: 'Alexander Nathaniel Montgomery' },
4
+ { label: 'Isabella Anastasia Wellington', value: 'Isabella Anastasia Wellington' },
5
+ { label: 'Christopher Maximilian Harrington', value: 'Christopher Maximilian Harrington' },
6
+ { label: 'Elizabeth Seraphina Kensington', value: 'Elizabeth Seraphina Kensington' },
7
+ { label: 'Theodore Jonathan Abernathy', value: 'Theodore Jonathan Abernathy' },
8
+ ]
9
+ %>
10
+
11
+ <%= pb_rails("typeahead", props: {
12
+ html_options: { style: { maxWidth: "240px" }},
13
+ id: "typeahead-form-pill",
14
+ is_multi: true,
15
+ options: names,
16
+ label: "Wrapped Within Typeahead",
17
+ pills: true,
18
+ wrapped: true,
19
+ }) %>
20
+
21
+ <%= pb_rails("caption", props: { text: "Form Pill Wrapped Text" }) %>
22
+ <%= pb_rails("card", props: { max_width: "xs" }) do %>
23
+ <%= pb_rails("form_pill", props: {
24
+ name: "Princess Amelia Mignonette Grimaldi Thermopolis Renaldo",
25
+ avatar_url: "https://randomuser.me/api/portraits/women/44.jpg",
26
+ tabindex: 0,
27
+ wrapped: true,
28
+ }) %>
29
+ <%= pb_rails("form_pill", props: {
30
+ icon: "badge-check",
31
+ text: "icon and a very long tag to show wrapped text",
32
+ tabindex: 0,
33
+ wrapped: true,
34
+ }) %>
35
+ <%= pb_rails("form_pill", props: {
36
+ text: "form pill long tag no tooltip show wrapped text",
37
+ tabindex: 0,
38
+ wrapped: true,
39
+ }) %>
40
+ <% end %>
@@ -0,0 +1,50 @@
1
+ import React from 'react'
2
+ import { Card, Caption, FormPill, Typeahead } from 'playbook-ui'
3
+
4
+ const names = [
5
+ { label: 'Alexander Nathaniel Montgomery', value: 'Alexander Nathaniel Montgomery' },
6
+ { label: 'Isabella Anastasia Wellington', value: 'Isabella Anastasia Wellington' },
7
+ { label: 'Christopher Maximilian Harrington', value: 'Christopher Maximilian Harrington' },
8
+ { label: 'Elizabeth Seraphina Kensington', value: 'Elizabeth Seraphina Kensington' },
9
+ { label: 'Theodore Jonathan Abernathy', value: 'Theodore Jonathan Abernathy' },
10
+ ]
11
+
12
+ const FormPillWrapped = (props) => {
13
+ return (
14
+ <>
15
+ <Typeahead
16
+ htmlOptions={{ style: { maxWidth: "240px" } }}
17
+ isMulti
18
+ label="Wrapped Within Typeahead"
19
+ options={names}
20
+ wrapped
21
+ {...props}
22
+ />
23
+ <Caption text="Form Pill Wrapped Text"/>
24
+ <Card maxWidth="xs">
25
+ <FormPill
26
+ avatarUrl="https://randomuser.me/api/portraits/women/44.jpg"
27
+ name="Princess Amelia Mignonette Grimaldi Thermopolis Renaldo"
28
+ onClick={() => alert('Click!')}
29
+ tabIndex={0}
30
+ wrapped
31
+ />
32
+ <FormPill
33
+ icon="badge-check"
34
+ onClick={() => {alert('Click!')}}
35
+ tabIndex={0}
36
+ text="icon and a very long tag to show wrapped text"
37
+ wrapped
38
+ />
39
+ <FormPill
40
+ onClick={() => {alert('Click!')}}
41
+ tabIndex={0}
42
+ text="form pill with a very long tag to show wrapped text"
43
+ wrapped
44
+ />
45
+ </Card>
46
+ </>
47
+ )
48
+ }
49
+
50
+ export default FormPillWrapped
@@ -0,0 +1,3 @@
1
+ For Form Pills with longer text, the `wrapped` prop can be used to wrap the label within each Form Pill.
2
+
3
+ **Note**: Avoid using the `wrapped` and `small` props together, as their styles conflict and may cause functionality issues.
@@ -4,6 +4,7 @@ examples:
4
4
  - form_pill_user: Form Pill User
5
5
  - form_pill_size: Form Pill Size
6
6
  - form_pill_truncated_text: Truncated Text
7
+ - form_pill_wrapped: Wrapped Text
7
8
  - form_pill_tag: Form Pill Tag
8
9
  - form_pill_example: Example
9
10
  - form_pill_icon: Form Pill Icon
@@ -13,6 +14,7 @@ examples:
13
14
  - form_pill_user: Form Pill User
14
15
  - form_pill_size: Form Pill Size
15
16
  - form_pill_truncated_text: Truncated Text
17
+ - form_pill_wrapped: Wrapped Text
16
18
  - form_pill_tag: Form Pill Tag
17
19
  - form_pill_example: Example
18
20
  - form_pill_icon: Form Pill Icon
@@ -5,3 +5,4 @@ export { default as FormPillExample } from './_form_pill_example.jsx'
5
5
  export { default as FormPillIcon } from './_form_pill_icon.jsx'
6
6
  export { default as FormPillColors } from './_form_pill_colors.jsx'
7
7
  export { default as FormPillTruncatedText } from './_form_pill_truncated_text.jsx'
8
+ export { default as FormPillWrapped } from './_form_pill_wrapped.jsx'
@@ -16,9 +16,11 @@ module Playbook
16
16
  default: "primary"
17
17
  prop :tabindex
18
18
  prop :icon
19
+ prop :wrapped, type: Playbook::Props::Boolean,
20
+ default: false
19
21
 
20
22
  def classname
21
- generate_classname("pb_form_pill_kit", color, icon_class, name, text, text_transform)
23
+ generate_classname("pb_form_pill_kit", color, icon_class, name, text, text_transform, wrapped_class)
22
24
  end
23
25
 
24
26
  def display_text
@@ -36,6 +38,10 @@ module Playbook
36
38
  def close_icon_size
37
39
  size == "small" ? "xs" : "sm"
38
40
  end
41
+
42
+ def wrapped_class
43
+ wrapped ? "wrapped" : nil
44
+ end
39
45
  end
40
46
  end
41
47
  end
@@ -0,0 +1,71 @@
1
+
2
+ import React from 'react'
3
+ import classnames from 'classnames'
4
+ import { buildAriaProps, buildCss, buildDataProps } from '../utilities/props'
5
+ import { globalProps } from '../utilities/globalProps'
6
+
7
+ import Button from '../pb_button/_button'
8
+ import Icon from '../pb_icon/_icon'
9
+ import { IconSizes } from "../pb_icon/_icon"
10
+
11
+ type IconButtonProps = {
12
+ aria?: { [key: string]: string },
13
+ className?: string,
14
+ data?: { [key: string]: string },
15
+ htmlType?: 'submit' | 'reset' | 'button' | undefined,
16
+ icon?: string,
17
+ id?: string,
18
+ link?: string,
19
+ newWindow?: boolean,
20
+ size?: IconSizes,
21
+ target?: string,
22
+ variant?: 'default' | 'link',
23
+ }
24
+
25
+ const IconButton = (props: IconButtonProps) => {
26
+ const {
27
+ aria = {},
28
+ className,
29
+ data = {},
30
+ htmlType = 'button',
31
+ icon = 'bars',
32
+ id,
33
+ link,
34
+ newWindow = false,
35
+ size = "2x",
36
+ target,
37
+ variant = "default",
38
+ } = props
39
+
40
+ const ariaProps = buildAriaProps(aria)
41
+ const dataProps = buildDataProps(data)
42
+ const classes = classnames(buildCss('pb_icon_button_kit', variant), globalProps(props), className)
43
+
44
+ return (
45
+ <div
46
+ {...ariaProps}
47
+ {...dataProps}
48
+ className={classes}
49
+ id={id}
50
+ >
51
+ <Button
52
+ borderRadius="lg"
53
+ htmlType={htmlType}
54
+ link={link}
55
+ newWindow={newWindow}
56
+ target={target}
57
+ >
58
+ <Icon
59
+ className="icon_button_icon"
60
+ fixedWidth
61
+ icon={icon}
62
+ paddingX="xxs"
63
+ paddingY="xs"
64
+ size={size}
65
+ />
66
+ </Button>
67
+ </div>
68
+ )
69
+ }
70
+
71
+ export default IconButton
@@ -0,0 +1,17 @@
1
+ import React from 'react'
2
+ import { IconButton } from 'playbook-ui'
3
+
4
+ const IconButtonDefault = (props) => (
5
+ <div>
6
+ <IconButton
7
+ {...props}
8
+ />
9
+ <IconButton
10
+ {...props}
11
+ marginTop="md"
12
+ variant="link"
13
+ />
14
+ </div>
15
+ )
16
+
17
+ export default IconButtonDefault
@@ -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
  }