playbook_ui 14.15.0.pre.alpha.play1917lodashremoval2of36615 → 14.15.0.pre.rc.0

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 (156) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/pb_advanced_table/Context/AdvancedTableContext.tsx +3 -143
  3. data/app/pb_kits/playbook/pb_advanced_table/SubKits/TableBody.tsx +99 -45
  4. data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.scss +7 -123
  5. data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.tsx +299 -153
  6. data/app/pb_kits/playbook/pb_bar_graph/_bar_graph.tsx +1 -1
  7. data/app/pb_kits/playbook/pb_card/_card.tsx +1 -2
  8. data/app/pb_kits/playbook/pb_circle_chart/_circle_chart.tsx +1 -1
  9. data/app/pb_kits/playbook/pb_date_picker/date_picker.html.erb +1 -4
  10. data/app/pb_kits/playbook/pb_date_picker/date_picker.rb +0 -2
  11. data/app/pb_kits/playbook/pb_dialog/dialog.html.erb +6 -5
  12. data/app/pb_kits/playbook/pb_dialog/dialogHelper.js +0 -2
  13. data/app/pb_kits/playbook/pb_drawer/_drawer.scss +3 -43
  14. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_borders.jsx +3 -3
  15. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_breakpoints.jsx +37 -20
  16. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_default.html.erb +1 -20
  17. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_menu.jsx +6 -6
  18. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_overlay.jsx +0 -1
  19. data/app/pb_kits/playbook/pb_drawer/docs/example.yml +0 -6
  20. data/app/pb_kits/playbook/pb_drawer/drawer.html.erb +12 -20
  21. data/app/pb_kits/playbook/pb_drawer/drawer.rb +1 -49
  22. data/app/pb_kits/playbook/pb_filter/Filter/CurrentFilters.tsx +4 -5
  23. data/app/pb_kits/playbook/pb_filter/Filter/FilterSingle.tsx +2 -2
  24. data/app/pb_kits/playbook/pb_filter/Filter/SortMenu.tsx +1 -2
  25. data/app/pb_kits/playbook/pb_form/docs/_form_form_with_validate.html.erb +2 -2
  26. data/app/pb_kits/playbook/pb_form_pill/_form_pill.scss +2 -9
  27. data/app/pb_kits/playbook/pb_form_pill/_form_pill.tsx +0 -4
  28. data/app/pb_kits/playbook/pb_form_pill/docs/example.yml +0 -2
  29. data/app/pb_kits/playbook/pb_form_pill/docs/index.js +0 -1
  30. data/app/pb_kits/playbook/pb_form_pill/form_pill.rb +1 -7
  31. data/app/pb_kits/playbook/pb_gauge/_gauge.tsx +1 -1
  32. data/app/pb_kits/playbook/pb_lightbox/Carousel/Slide.tsx +1 -1
  33. data/app/pb_kits/playbook/pb_lightbox/Carousel/Slides.tsx +1 -1
  34. data/app/pb_kits/playbook/pb_lightbox/Carousel/Thumbnails.tsx +1 -1
  35. data/app/pb_kits/playbook/pb_line_graph/_line_graph.tsx +1 -1
  36. data/app/pb_kits/playbook/pb_multi_level_select/_multi_level_select.scss +0 -7
  37. data/app/pb_kits/playbook/pb_multi_level_select/_multi_level_select.tsx +3 -13
  38. data/app/pb_kits/playbook/pb_multi_level_select/docs/example.yml +1 -2
  39. data/app/pb_kits/playbook/pb_multi_level_select/docs/index.js +0 -1
  40. data/app/pb_kits/playbook/pb_multi_level_select/multi_level_select.rb +0 -6
  41. data/app/pb_kits/playbook/pb_overlay/_overlay.scss +0 -13
  42. data/app/pb_kits/playbook/pb_overlay/_overlay.tsx +1 -7
  43. data/app/pb_kits/playbook/pb_overlay/docs/example.yml +0 -3
  44. data/app/pb_kits/playbook/pb_overlay/docs/index.js +0 -1
  45. data/app/pb_kits/playbook/pb_overlay/overlay.html.erb +3 -5
  46. data/app/pb_kits/playbook/pb_overlay/overlay.rb +1 -16
  47. data/app/pb_kits/playbook/pb_overlay/overlay.test.jsx +0 -12
  48. data/app/pb_kits/playbook/pb_popover/_popover.tsx +2 -2
  49. data/app/pb_kits/playbook/pb_popover/popover.test.js +1 -1
  50. data/app/pb_kits/playbook/pb_radio/_radio.tsx +74 -85
  51. data/app/pb_kits/playbook/pb_radio/docs/example.yml +1 -2
  52. data/app/pb_kits/playbook/pb_radio/docs/index.js +0 -1
  53. data/app/pb_kits/playbook/pb_radio/radio.test.js +0 -16
  54. data/app/pb_kits/playbook/pb_select/docs/example.yml +0 -1
  55. data/app/pb_kits/playbook/pb_select/docs/index.js +0 -1
  56. data/app/pb_kits/playbook/pb_select/select.html.erb +5 -3
  57. data/app/pb_kits/playbook/pb_select/select.rb +0 -8
  58. data/app/pb_kits/playbook/pb_selectable_card/selectable_card.html.erb +5 -1
  59. data/app/pb_kits/playbook/pb_selectable_card_icon/selectable_card_icon.html.erb +4 -1
  60. data/app/pb_kits/playbook/pb_selectable_icon/selectable_icon.html.erb +5 -1
  61. data/app/pb_kits/playbook/pb_text_input/inputMask.ts +3 -2
  62. data/app/pb_kits/playbook/pb_timeline/_timeline.scss +2 -2
  63. data/app/pb_kits/playbook/pb_title/_title.scss +0 -32
  64. data/app/pb_kits/playbook/pb_title/_title.tsx +1 -10
  65. data/app/pb_kits/playbook/pb_title/docs/_title_default.html.erb +2 -1
  66. data/app/pb_kits/playbook/pb_title/docs/_title_default.jsx +1 -1
  67. data/app/pb_kits/playbook/pb_title/docs/example.yml +0 -2
  68. data/app/pb_kits/playbook/pb_title/docs/index.js +0 -1
  69. data/app/pb_kits/playbook/pb_title/title.rb +1 -10
  70. data/app/pb_kits/playbook/pb_tooltip/_tooltip.scss +3 -0
  71. data/app/pb_kits/playbook/pb_tooltip/_tooltip.tsx +0 -25
  72. data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_icon.erb +10 -0
  73. data/app/pb_kits/playbook/pb_tooltip/docs/example.yml +1 -4
  74. data/app/pb_kits/playbook/pb_tooltip/docs/index.js +0 -1
  75. data/app/pb_kits/playbook/pb_tooltip/index.js +1 -1
  76. data/app/pb_kits/playbook/pb_tooltip/tooltip.rb +2 -10
  77. data/app/pb_kits/playbook/pb_treemap_chart/_treemap_chart.tsx +1 -1
  78. data/app/pb_kits/playbook/pb_typeahead/_typeahead.tsx +5 -51
  79. data/app/pb_kits/playbook/pb_typeahead/components/MultiValue.tsx +1 -5
  80. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_pills_async_custom_options.jsx +1 -1
  81. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_pills_async_users.jsx +1 -1
  82. data/app/pb_kits/playbook/pb_typeahead/docs/example.yml +0 -3
  83. data/app/pb_kits/playbook/pb_typeahead/docs/index.js +0 -1
  84. data/app/pb_kits/playbook/pb_typeahead/index.ts +8 -61
  85. data/app/pb_kits/playbook/pb_typeahead/typeahead.rb +2 -17
  86. data/app/pb_kits/playbook/utilities/object.ts +1 -103
  87. data/app/pb_kits/playbook/utilities/text.ts +1 -1
  88. data/dist/chunks/_typeahead-PqkcDf1H.js +36 -0
  89. data/dist/chunks/_weekday_stacked-BrSrpj7J.js +45 -0
  90. data/dist/chunks/{lib-e7oBFFDo.js → lib-D3us1bGD.js} +2 -2
  91. data/dist/chunks/{pb_form_validation-CMXevI1t.js → pb_form_validation-BpihMSOQ.js} +1 -1
  92. data/dist/chunks/vendor.js +1 -1
  93. data/dist/menu.yml +2 -2
  94. data/dist/playbook-doc.js +1 -1
  95. data/dist/playbook-rails-react-bindings.js +1 -1
  96. data/dist/playbook-rails.js +1 -1
  97. data/dist/playbook.css +1 -1
  98. data/lib/playbook/version.rb +2 -2
  99. metadata +7 -61
  100. data/app/pb_kits/playbook/pb_advanced_table/Components/RegularTableView.tsx +0 -127
  101. data/app/pb_kits/playbook/pb_advanced_table/Components/TableActionBar.tsx +0 -55
  102. data/app/pb_kits/playbook/pb_advanced_table/Components/TablePagination.tsx +0 -33
  103. data/app/pb_kits/playbook/pb_advanced_table/Components/VirtualizedTableView.tsx +0 -275
  104. data/app/pb_kits/playbook/pb_advanced_table/Hooks/useTableActions.ts +0 -66
  105. data/app/pb_kits/playbook/pb_advanced_table/Hooks/useTableState.ts +0 -195
  106. data/app/pb_kits/playbook/pb_advanced_table/Utilities/CellRendererUtils.tsx +0 -73
  107. data/app/pb_kits/playbook/pb_advanced_table/Utilities/RowUtils.ts +0 -52
  108. data/app/pb_kits/playbook/pb_advanced_table/Utilities/TableContainerStyles.ts +0 -80
  109. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_infinite_scroll.jsx +0 -50
  110. data/app/pb_kits/playbook/pb_advanced_table/docs/advanced_table_mock_data_infinite_scroll.json +0 -152002
  111. data/app/pb_kits/playbook/pb_date_picker/index.ts +0 -38
  112. data/app/pb_kits/playbook/pb_dialog/index.js +0 -75
  113. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_behavior.html.erb +0 -8
  114. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_borders.html.erb +0 -33
  115. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_breakpoints.html.erb +0 -0
  116. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_menu.html.erb +0 -24
  117. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_overlay.html.erb +0 -21
  118. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_overlay.md +0 -1
  119. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_sizes.html.erb +0 -49
  120. data/app/pb_kits/playbook/pb_drawer/index.js +0 -257
  121. data/app/pb_kits/playbook/pb_form_pill/docs/_form_pill_wrapped.html.erb +0 -40
  122. data/app/pb_kits/playbook/pb_form_pill/docs/_form_pill_wrapped.jsx +0 -50
  123. data/app/pb_kits/playbook/pb_form_pill/docs/_form_pill_wrapped.md +0 -3
  124. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled.html.erb +0 -72
  125. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled.jsx +0 -91
  126. data/app/pb_kits/playbook/pb_overlay/docs/_overlay_hide_scroll_bar.html.erb +0 -11
  127. data/app/pb_kits/playbook/pb_overlay/docs/_overlay_hide_scroll_bar.jsx +0 -37
  128. data/app/pb_kits/playbook/pb_overlay/docs/_overlay_hide_scroll_bar_rails.md +0 -1
  129. data/app/pb_kits/playbook/pb_overlay/docs/_overlay_hide_scroll_bar_react.md +0 -1
  130. data/app/pb_kits/playbook/pb_overlay/docs/_overlay_vertical_dynamic_multi_directional.html.erb +0 -11
  131. data/app/pb_kits/playbook/pb_overlay/docs/_overlay_vertical_dynamic_multi_directional.md +0 -1
  132. data/app/pb_kits/playbook/pb_overlay/index.js +0 -61
  133. data/app/pb_kits/playbook/pb_radio/docs/_radio_react_hook.jsx +0 -60
  134. data/app/pb_kits/playbook/pb_radio/docs/_radio_react_hook.md +0 -1
  135. data/app/pb_kits/playbook/pb_select/docs/_select_react_hook.jsx +0 -58
  136. data/app/pb_kits/playbook/pb_select/docs/_select_react_hook.md +0 -1
  137. data/app/pb_kits/playbook/pb_select/index.js +0 -38
  138. data/app/pb_kits/playbook/pb_title/docs/_title_display_size.html.erb +0 -7
  139. data/app/pb_kits/playbook/pb_title/docs/_title_display_size.jsx +0 -54
  140. data/app/pb_kits/playbook/pb_title/docs/_title_display_size.md +0 -1
  141. data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_delay_rails.html.erb +0 -39
  142. data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_delay_rails.md +0 -3
  143. data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_icon_rails.html.erb +0 -22
  144. data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_interaction.html.erb +0 -26
  145. data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_sizing.jsx +0 -69
  146. data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_sizing.md +0 -3
  147. data/app/pb_kits/playbook/pb_tooltip/floating_ui.js +0 -282
  148. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_dynamic_options.html.erb +0 -45
  149. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_dynamic_options.md +0 -5
  150. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_dynamic_options_pure_rails.html.erb +0 -33
  151. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_dynamic_options_pure_rails.md +0 -3
  152. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_react_hook.jsx +0 -66
  153. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_react_hook.md +0 -1
  154. data/app/pb_kits/playbook/utilities/object.test.js +0 -237
  155. data/dist/chunks/_typeahead-CdVbIURO.js +0 -36
  156. data/dist/chunks/_weekday_stacked-BSTKfYPJ.js +0 -45
@@ -1,38 +0,0 @@
1
- import PbEnhancedElement from "../pb_enhanced_element";
2
-
3
- const DATE_PICKER_WRAPPER_SELECTOR = '[data-pb-date-picker]';
4
- const SELECT_VALIDATION_MESSAGE_CLASS = '.pb_body_kit_negative';
5
-
6
- export default class PbDatePicker extends PbEnhancedElement {
7
- static get selector() {
8
- return DATE_PICKER_WRAPPER_SELECTOR;
9
- }
10
-
11
- connect() {
12
- this.setValidationMessage();
13
- }
14
-
15
- setValidationMessage() {
16
- const validationMessage = this.element.dataset?.validationMessage;
17
- const inputElement = this.element.querySelector("input");
18
-
19
- if (validationMessage) {
20
- const setErrorTextContent = (text, timeout) => {
21
- setTimeout(() => {
22
- const errorMessageElement = this.element.querySelector(SELECT_VALIDATION_MESSAGE_CLASS);
23
- if (errorMessageElement) {
24
- errorMessageElement.textContent = text;
25
- } else {
26
- setErrorTextContent(text, 100);
27
- }
28
- }, timeout);
29
- };
30
-
31
- inputElement.addEventListener("change", (e) => {
32
- if (!e.target.checkValidity()) {
33
- setErrorTextContent(validationMessage, 300);
34
- }
35
- });
36
- }
37
- }
38
- }
@@ -1,75 +0,0 @@
1
- import PbEnhancedElement from "../pb_enhanced_element";
2
-
3
- const DIALOG_WRAPPER_SELECTOR = "[data-pb-dialog-wrapper]";
4
-
5
- export default class PbDialog extends PbEnhancedElement {
6
- static get selector() {
7
- return DIALOG_WRAPPER_SELECTOR;
8
- }
9
-
10
- connect() {
11
- window.addEventListener("DOMContentLoaded", () => this.setupDialog())
12
- window.addEventListener("turbo:frame-load", () => this.setupDialog())
13
- }
14
-
15
- setupDialog() {
16
- const openTrigger = document.querySelectorAll("[data-open-dialog]");
17
- const closeTrigger = document.querySelectorAll("[data-close-dialog]");
18
- const dialogs = document.querySelectorAll(".pb_dialog_rails")
19
-
20
- const loadingButton = document.querySelector('[data-disable-with="Loading"]');
21
- if (loadingButton) {
22
- loadingButton.addEventListener("click", function () {
23
- const okayLoadingButton = document.querySelector('[data-disable-with="Loading"]');
24
- const cancelButton = document.querySelector('[data-disable-cancel-with="Loading"]');
25
- let currentClass = okayLoadingButton.className;
26
- let cancelClass = cancelButton ? cancelButton.className : "";
27
-
28
- let newClass = currentClass.replace("_enabled", "_disabled_loading");
29
- let newCancelClass = cancelClass.replace("_enabled", "_disabled");
30
-
31
- // Disable the buttons
32
- okayLoadingButton.disabled = true;
33
- if (cancelButton) cancelButton.disabled = true;
34
-
35
- okayLoadingButton.className = newClass;
36
- if (cancelButton) cancelButton.className = newCancelClass;
37
- });
38
- }
39
-
40
- openTrigger.forEach((open) => {
41
- open.addEventListener("click", () => {
42
- var openTriggerData = open.dataset.openDialog;
43
- var targetDialog = document.getElementById(openTriggerData)
44
- if (targetDialog.open) return;
45
- targetDialog.showModal();
46
- });
47
- });
48
-
49
- closeTrigger.forEach((close) => {
50
- close.addEventListener("click", () => {
51
- var closeTriggerData = close.dataset.closeDialog;
52
- document.getElementById(closeTriggerData).close();
53
- });
54
- });
55
-
56
- // Close dialog box on outside click
57
- dialogs.forEach((dialogElement) => {
58
- dialogElement.addEventListener("mousedown", (event) => {
59
- const dialogParentDataset = dialogElement.parentElement.dataset
60
- if (dialogParentDataset.overlayClick === "overlay_close") return
61
-
62
- const dialogModal = event.target.getBoundingClientRect()
63
- const clickedOutsideDialogModal = event.clientX < dialogModal.left ||
64
- event.clientX > dialogModal.right ||
65
- event.clientY < dialogModal.top ||
66
- event.clientY > dialogModal.bottom
67
-
68
- if (clickedOutsideDialogModal) {
69
- dialogElement.close()
70
- event.stopPropagation()
71
- }
72
- })
73
- })
74
- }
75
- }
@@ -1,8 +0,0 @@
1
- <%= pb_rails("button", props: { text: "Push Drawer", margin_right: "sm", data: {"open-drawer": "drawer-3"} }) %>
2
-
3
- <%= pb_rails("drawer", props: {
4
- id:"drawer-3",
5
- behavior: "push"
6
- }) do %>
7
- Test me (Push Behavior)
8
- <% end %>
@@ -1,33 +0,0 @@
1
- <%= pb_rails("flex") do %>
2
- <%= pb_rails("button", props: { text: "Drawer with border right", margin_right: "sm", data: {"open-drawer": "drawer-12"} }) %>
3
-
4
- <%= pb_rails("drawer", props: {
5
- id:"drawer-12",
6
- overlay: false,
7
- border: "right"
8
- }) do %>
9
- Test me (Border Right)
10
- <% end %>
11
-
12
-
13
- <%= pb_rails("button", props: { text: "Drawer with border left", margin_right: "sm", data: {"open-drawer": "drawer-13"} }) %>
14
-
15
- <%= pb_rails("drawer", props: {
16
- id:"drawer-13",
17
- overlay: false,
18
- border: "left"
19
- }) do %>
20
- Test me (Border Left)
21
- <% end %>
22
-
23
- <%= pb_rails("button", props: { text: "Drawer with border full", data: {"open-drawer": "drawer-14"} }) %>
24
-
25
- <%= pb_rails("drawer", props: {
26
- id:"drawer-14",
27
- overlay: false,
28
- border: "full"
29
- }) do %>
30
- Test me (Border Full)
31
- <% end %>
32
- <% end %>
33
-
@@ -1,24 +0,0 @@
1
- <%= pb_rails("button", props: { padding: "xs", margin_right: "sm", data: {"open-drawer": "drawer-4"} }) do %>
2
- <%= pb_rails("icon", props: { icon: "bars", size: "2x" }) %>
3
- <% end %>
4
-
5
- <%= pb_rails("drawer", props: {
6
- id:"drawer-4",
7
- within_element: true,
8
- placement: "bottom",
9
- breakpoint: "md",
10
- size: "full"
11
- }) do %>
12
- <%= pb_rails("nav", props: { display: {xl: "none", lg: "none", md: "none", sm: "block" } }) do %>
13
- <%= pb_rails("nav/item", props: { text: "Photos", link: "#" }) %>
14
- <%= pb_rails("nav/item", props: { text: "Music", link: "#" }) %>
15
- <%= pb_rails("nav/item", props: { text: "Video", link: "#", active: true }) %>
16
- <%= pb_rails("nav/item", props: { text: "Files", link: "#" }) %>
17
- <% end %>
18
- <%= pb_rails("nav", props: { display: {md: "block", sm: "none", xs: "none" }, orientation: "horizontal" }) do %>
19
- <%= pb_rails("nav/item", props: { text: "About", link: "#" }) %>
20
- <%= pb_rails("nav/item", props: { text: "Case Studies", link: "#", active: true }) %>
21
- <%= pb_rails("nav/item", props: { text: "Service ", link: "#" }) %>
22
- <%= pb_rails("nav/item", props: { text: "Contacts", link: "#" }) %>
23
- <% end %>
24
- <% end %>
@@ -1,21 +0,0 @@
1
- <%= pb_rails("flex") do %>
2
- <%= pb_rails("button", props: { text: "No Overlay Drawer", margin_right: "sm", data: {"open-drawer": "drawer-10"} }) %>
3
-
4
- <%= pb_rails("drawer", props: {
5
- id:"drawer-10",
6
- overlay: false
7
- }) do %>
8
- Test me (No Overlay)
9
- <% end %>
10
-
11
-
12
- <%= pb_rails("button", props: { text: "Overlay Drawer", data: {"open-drawer": "drawer-11"} }) %>
13
-
14
- <%= pb_rails("drawer", props: {
15
- id:"drawer-11",
16
- placement: "right"
17
- }) do %>
18
- Test me (Has Overlay)
19
- <% end %>
20
- <% end %>
21
-
@@ -1 +0,0 @@
1
- Click the button to close the drawer when there is no overlay.
@@ -1,49 +0,0 @@
1
- <%= pb_rails("flex") do %>
2
- <%= pb_rails("button", props: { text: "XS Drawer", margin_right: "sm", data: {"open-drawer": "drawer-5"} }) %>
3
-
4
- <%= pb_rails("drawer", props: {
5
- id:"drawer-5",
6
- size: "xs"
7
- }) do %>
8
- XS
9
- <% end %>
10
-
11
- <%= pb_rails("button", props: { text: "SM Drawer", margin_right: "sm", data: {"open-drawer": "drawer-6"} }) %>
12
-
13
- <%= pb_rails("drawer", props: {
14
- id:"drawer-6",
15
- size: "sm",
16
- placement: "right"
17
- }) do %>
18
- This is a small drawer
19
- <% end %>
20
-
21
- <%= pb_rails("button", props: { text: "MD Drawer", margin_right: "sm", data: {"open-drawer": "drawer-7"} }) %>
22
-
23
- <%= pb_rails("drawer", props: {
24
- id:"drawer-7",
25
- size: "md"
26
- }) do %>
27
- This is a medium drawer
28
- <% end %>
29
-
30
- <%= pb_rails("button", props: { text: "LG Drawer", margin_right: "sm", data: {"open-drawer": "drawer-8"} }) %>
31
-
32
- <%= pb_rails("drawer", props: {
33
- id:"drawer-8",
34
- size: "lg",
35
- placement: "right"
36
- }) do %>
37
- This is a large drawer
38
- <% end %>
39
-
40
- <%= pb_rails("button", props: { text: "XL Drawer", margin_right: "sm", data: {"open-drawer": "drawer-9"} }) %>
41
-
42
- <%= pb_rails("drawer", props: {
43
- id:"drawer-9",
44
- size: "xl"
45
- }) do %>
46
- This is an extra large drawer
47
- <% end %>
48
- <% end %>
49
-
@@ -1,257 +0,0 @@
1
- import PbEnhancedElement from "../pb_enhanced_element"
2
-
3
- export default class PbDrawer extends PbEnhancedElement {
4
- static get selector() {
5
- return ".pb_drawer_wrapper"
6
- }
7
-
8
- connect() {
9
- this.handleToggleClick = this.handleToggleClick.bind(this)
10
- this.handleOutsideClick = this.handleOutsideClick.bind(this)
11
- this.handleResize = this.handleResize.bind(this)
12
-
13
- this._toggleTriggers = Array.from(document.querySelectorAll("[data-open-drawer]"))
14
- this._toggleTriggers.forEach(el => {
15
- el.addEventListener("click", this.handleToggleClick)
16
- })
17
-
18
- this._wrappers = Array.from(document.querySelectorAll(".pb_drawer_wrapper"))
19
- this._wrappers.forEach(el => {
20
- el.addEventListener("mousedown", this.handleOutsideClick)
21
- })
22
-
23
- this._withinElementDrawers = Array.from(
24
- document.querySelectorAll(".pb_drawer_within_element_rails[data-breakpoint]")
25
- )
26
-
27
- window.addEventListener("resize", this.handleResize)
28
- this.handleResize()
29
- }
30
-
31
- disconnect() {
32
- this._toggleTriggers.forEach(el => {
33
- el.removeEventListener("click", this.handleToggleClick)
34
- })
35
- this._wrappers.forEach(el => {
36
- el.removeEventListener("mousedown", this.handleOutsideClick)
37
- })
38
- window.removeEventListener("resize", this.handleResize)
39
- }
40
-
41
- getOverlay(wrapper) {
42
- if (wrapper.id && wrapper.id.startsWith("drawer-wrapper-")) {
43
- const overlayId = wrapper.id.replace("drawer-wrapper-", "drawer-overlay-")
44
- return document.getElementById(overlayId)
45
- }
46
- return wrapper.querySelector(".pb_drawer_overlay") || wrapper.querySelector(".pb_drawer_no_overlay")
47
- }
48
-
49
- handleToggleClick(event) {
50
- const trigger = event.currentTarget
51
- const drawerId = trigger.dataset.openDrawer
52
- const dialog = document.getElementById(drawerId)
53
- if (!dialog) return
54
-
55
- if (dialog.classList.contains("pb_drawer_within_element_rails")) {
56
- if (dialog.classList.contains("open")) {
57
- this.closeWithinElementDrawer(dialog)
58
- dialog.dataset.manualOpen = "false"
59
- } else {
60
- this.openWithinElementDrawer(dialog)
61
- dialog.dataset.manualOpen = "true"
62
- }
63
- return
64
- }
65
-
66
- const wrapperId = `drawer-wrapper-${drawerId}`
67
- const wrapper = document.getElementById(wrapperId)
68
- if (!wrapper) return
69
-
70
- if (wrapper !== this.element) return
71
-
72
- if (wrapper.classList.contains("open")) {
73
- this.closeDrawer(wrapper, dialog)
74
- wrapper.dataset.manualOpen = "false"
75
- } else {
76
- this.openDrawer(wrapper, dialog)
77
- wrapper.dataset.manualOpen = "true"
78
- }
79
- }
80
-
81
- openWithinElementDrawer(dialog) {
82
- if (dialog.classList.contains("open")) return
83
- dialog.style.maxHeight = "0px"
84
- dialog.offsetHeight
85
- dialog.classList.add("open")
86
- // Get trigger's height and add it to the final height
87
- const trigger = document.querySelector(`[data-open-drawer="${dialog.id}"]`)
88
- const triggerHeight = trigger ? trigger.offsetHeight : 0
89
- const finalHeight = (dialog.scrollHeight + triggerHeight) + "px"
90
- dialog.style.maxHeight = finalHeight
91
- dialog.addEventListener("transitionend", function handleOpenEnd(e) {
92
- if (e.propertyName === "max-height") {
93
- dialog.style.maxHeight = "none"
94
- dialog.removeEventListener("transitionend", handleOpenEnd)
95
- }
96
- })
97
- }
98
-
99
- closeWithinElementDrawer(dialog) {
100
- if (!dialog.classList.contains("open")) return
101
- const currentHeight = dialog.scrollHeight
102
- dialog.style.maxHeight = currentHeight + "px"
103
- dialog.offsetHeight
104
- dialog.classList.remove("open")
105
- dialog.style.maxHeight = "0px"
106
- dialog.addEventListener("transitionend", function handleCloseEnd(e) {
107
- if (e.propertyName === "max-height") {
108
- dialog.removeEventListener("transitionend", handleCloseEnd)
109
- dialog.style.maxHeight = "0px"
110
- }
111
- })
112
- }
113
-
114
- openDrawer(wrapper, dialog) {
115
- const behavior = wrapper.dataset.behavior
116
- const size = wrapper.dataset.size
117
- const placement = wrapper.dataset.placement
118
- this.handlePushOpen(behavior, size, placement)
119
-
120
- wrapper.style.display = ""
121
- const overlay = this.getOverlay(wrapper)
122
- if (overlay) overlay.style.display = ""
123
-
124
- wrapper.classList.add("open")
125
- dialog.classList.add("open")
126
- }
127
-
128
- closeDrawer(wrapper, dialog) {
129
- const behavior = wrapper.dataset.behavior
130
- this.handlePushClose(behavior)
131
-
132
- if (wrapper.className.includes("open")) wrapper.style.display = "none"
133
- const overlay = this.getOverlay(wrapper)
134
- if (overlay && wrapper.className.includes("open")) overlay.style.display = "none"
135
-
136
- wrapper.classList.remove("open")
137
- dialog.classList.remove("open")
138
- }
139
-
140
- handleOutsideClick(event) {
141
- const wrapper = event.currentTarget
142
- const dialog = wrapper.querySelector(".pb_drawer")
143
- const overlay = this.getOverlay(wrapper)
144
-
145
- if (dialog && dialog.classList.contains("pb_drawer_within_element_rails")) {
146
- return
147
- }
148
-
149
- if (wrapper.dataset.overlayClick === "overlay_close" && event.target === overlay) {
150
- this.closeDrawer(wrapper, dialog)
151
- event.stopPropagation()
152
- return
153
- }
154
-
155
- const dialogRect = dialog.getBoundingClientRect()
156
- const clickedOutside =
157
- event.clientX < dialogRect.left ||
158
- event.clientX > dialogRect.right ||
159
- event.clientY < dialogRect.top ||
160
- event.clientY > dialogRect.bottom
161
-
162
- if (clickedOutside) {
163
- this.closeDrawer(wrapper, dialog)
164
- event.stopPropagation()
165
- }
166
- }
167
-
168
- handleResize() {
169
- const breakpointValues = {
170
- none: 0,
171
- xs: 575,
172
- sm: 768,
173
- md: 992,
174
- lg: 1200,
175
- xl: 1400,
176
- }
177
-
178
- // Process wrappers
179
- this._wrappers.forEach(wrapper => {
180
- const bp = wrapper.dataset.breakpoint || "none"
181
- if (bp === "none") return
182
-
183
- const threshold = breakpointValues[bp] || 0
184
- const dialog = wrapper.querySelector(".pb_drawer")
185
- const trigger = dialog ? document.querySelector(`[data-open-drawer="${dialog.id}"]`) : null
186
-
187
- if (window.innerWidth >= threshold) {
188
- if (!wrapper.classList.contains("open")) {
189
- this.openDrawer(wrapper, dialog)
190
- }
191
- if (trigger) trigger.style.display = "none"
192
- } else {
193
- if (trigger) trigger.style.display = ""
194
- if (wrapper.classList.contains("open") && wrapper.dataset.manualOpen !== "true") {
195
- this.closeDrawer(wrapper, dialog)
196
- }
197
- }
198
- })
199
-
200
- // Process within element drawers
201
- this._withinElementDrawers.forEach(drawer => {
202
- const bp = drawer.dataset.breakpoint || "none"
203
- if (bp === "none") return
204
-
205
- const threshold = breakpointValues[bp] || 0
206
- const trigger = document.querySelector(`[data-open-drawer="${drawer.id}"]`)
207
-
208
- if (window.innerWidth >= threshold) {
209
- if (!drawer.classList.contains("open")) {
210
- this.openWithinElementDrawer(drawer)
211
- }
212
- if (trigger) trigger.style.display = "none"
213
- } else {
214
- if (trigger) trigger.style.display = ""
215
- if (drawer.classList.contains("open") && drawer.dataset.manualOpen !== "true") {
216
- this.closeWithinElementDrawer(drawer)
217
- }
218
- }
219
- })
220
- }
221
-
222
- handlePushOpen(behavior, size, placement) {
223
- if (behavior !== "push") return
224
-
225
- const sizeMap = {
226
- xl: "365px",
227
- lg: "300px",
228
- md: "250px",
229
- sm: "200px",
230
- xs: "64px",
231
- full: "100%",
232
- }
233
-
234
- const body = document.querySelector("body")
235
- if (!body) return
236
-
237
- if (placement === "left") {
238
- body.style.cssText = `margin-left: ${sizeMap[size]} !important; margin-right: '' !important;`
239
- } else if (placement === "right") {
240
- body.style.cssText = `margin-right: ${sizeMap[size]} !important; margin-left: '' !important;`
241
- }
242
- body.classList.add("PBDrawer__Body--open")
243
- }
244
-
245
- handlePushClose(behavior) {
246
- if (behavior !== "push") return
247
-
248
- const body = document.querySelector("body")
249
- if (!body) return
250
-
251
- if (body.classList.contains("PBDrawer__Body--open")) {
252
- body.classList.add("PBDrawer__Body--close")
253
- }
254
- body.style.cssText = ""
255
- body.classList.remove("PBDrawer__Body--open")
256
- }
257
- }
@@ -1,40 +0,0 @@
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 %>
@@ -1,50 +0,0 @@
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
@@ -1,3 +0,0 @@
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.
@@ -1,72 +0,0 @@
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
- }) %>