playbook_ui 14.14.0.pre.alpha.PBNTR890typeahead6390 → 14.14.0.pre.alpha.PBNTR892dialogenhancedelement6476

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 (33) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/pb_dialog/dialog.html.erb +5 -6
  3. data/app/pb_kits/playbook/pb_dialog/dialogHelper.js +2 -0
  4. data/app/pb_kits/playbook/pb_dialog/index.js +75 -0
  5. data/app/pb_kits/playbook/pb_overlay/_overlay.scss +13 -0
  6. data/app/pb_kits/playbook/pb_overlay/_overlay.tsx +7 -1
  7. data/app/pb_kits/playbook/pb_overlay/docs/_overlay_hide_scroll_bar.html.erb +11 -0
  8. data/app/pb_kits/playbook/pb_overlay/docs/_overlay_hide_scroll_bar.jsx +37 -0
  9. data/app/pb_kits/playbook/pb_overlay/docs/_overlay_hide_scroll_bar_rails.md +1 -0
  10. data/app/pb_kits/playbook/pb_overlay/docs/_overlay_hide_scroll_bar_react.md +1 -0
  11. data/app/pb_kits/playbook/pb_overlay/docs/example.yml +2 -0
  12. data/app/pb_kits/playbook/pb_overlay/docs/index.js +1 -0
  13. data/app/pb_kits/playbook/pb_overlay/overlay.rb +7 -1
  14. data/app/pb_kits/playbook/pb_overlay/overlay.test.jsx +12 -0
  15. data/app/pb_kits/playbook/pb_title/_title.scss +0 -35
  16. data/app/pb_kits/playbook/pb_title/_title.tsx +1 -10
  17. data/app/pb_kits/playbook/pb_title/docs/_title_default.html.erb +2 -1
  18. data/app/pb_kits/playbook/pb_title/docs/_title_default.jsx +1 -1
  19. data/app/pb_kits/playbook/pb_title/docs/example.yml +0 -2
  20. data/app/pb_kits/playbook/pb_title/docs/index.js +0 -1
  21. data/app/pb_kits/playbook/pb_title/title.rb +1 -10
  22. data/dist/chunks/{_typeahead-DkFE6eZr.js → _typeahead-NXKDTf__.js} +1 -1
  23. data/dist/chunks/{_weekday_stacked-BXq4AGmy.js → _weekday_stacked-DtCYkCXM.js} +2 -2
  24. data/dist/chunks/vendor.js +1 -1
  25. data/dist/playbook-doc.js +1 -1
  26. data/dist/playbook-rails-react-bindings.js +1 -1
  27. data/dist/playbook-rails.js +1 -1
  28. data/dist/playbook.css +1 -1
  29. data/lib/playbook/version.rb +1 -1
  30. metadata +9 -7
  31. data/app/pb_kits/playbook/pb_title/docs/_title_display_size.html.erb +0 -7
  32. data/app/pb_kits/playbook/pb_title/docs/_title_display_size.jsx +0 -54
  33. data/app/pb_kits/playbook/pb_title/docs/_title_display_size.md +0 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 79ef4c9c994877b24ebef9b26576b84fbe3aa48398749c1810a067959e2be4bf
4
- data.tar.gz: 376f12de0c548d39abd3ce11a898d46f38aa8d31c09ceb6eba2651b2cb17b743
3
+ metadata.gz: 87dde43f2e80f2fb326bea47771b1b44f66dc0745458a22d6fdc2da372eaf197
4
+ data.tar.gz: 8434f9863bd44e9ee69f1be53a770e87de0df3002aa69666df787bfd9d2db202
5
5
  SHA512:
6
- metadata.gz: ebb149d154df6b42083d20bc2ba601d5a769054f450ffbb91276f8dfa8e8d45ffb8cd8937bdf9b1567c5987b7038d01112178c01fe3226ae9fc66326aa0286c6
7
- data.tar.gz: 1caf4d0c776404cea40ee3fd07aa84a42996b59b562c6e86af64afd7869e56ff6ffd5e70b3f6f2f25bc3385fae4bede7e136f663b7a8a94985d87c73ae077744
6
+ metadata.gz: fffef961e834a62003bc28a6ce270f916e63d6e27c306db563b4a3f7a6054dd1f8161cc76799a9056b0efabbebf65943748eca172da7a984697a903027779b62
7
+ data.tar.gz: 3cf6e726483df0b00d9436cb81d4c243e54f95c5be40ce39245a01793f6c266ad34f9e416282ce08991536b78e0c6cf9999e2466ee8c1840b549f348e65e78fc
@@ -1,4 +1,8 @@
1
- <div class="pb_dialog_wrapper_rails <%= object.full_height_style %>" data-overlay-click= <%= object.overlay_close %> >
1
+ <div
2
+ class="pb_dialog_wrapper_rails <%= object.full_height_style %>"
3
+ data-pb-dialog-wrapper="true"
4
+ data-overlay-click= <%= object.overlay_close %>
5
+ >
2
6
  <%= pb_content_tag(:dialog) do %>
3
7
  <% if object.status === "" && object.title %>
4
8
  <%= pb_rails("dialog/dialog_header", props: { title: object.title, id: object.id }) %>
@@ -33,8 +37,3 @@
33
37
  <%= content %>
34
38
  <% end %>
35
39
  </div>
36
-
37
- <%= javascript_tag do %>
38
- window.addEventListener("DOMContentLoaded", () => dialogHelper())
39
- window.addEventListener("turbo:frame-load", () => dialogHelper())
40
- <% end %>
@@ -1,3 +1,5 @@
1
+ // Three places in Nitro depend on this function inside the window scope.
2
+ // Because of this, we will keep this file until we remove this dependency from Nitro.
1
3
  const dialogHelper = () => {
2
4
  const openTrigger = document.querySelectorAll("[data-open-dialog]");
3
5
  const closeTrigger = document.querySelectorAll("[data-close-dialog]");
@@ -0,0 +1,75 @@
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
+ }
@@ -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
  }
@@ -11,6 +11,7 @@ export type OverlayChildrenProps = {
11
11
  dynamic?: boolean,
12
12
  position: string,
13
13
  size: string,
14
+ scrollBarNone?: boolean,
14
15
  }
15
16
 
16
17
  type OverlayProps = {
@@ -23,6 +24,8 @@ type OverlayProps = {
23
24
  htmlOptions?: { [key: string]: string | number | boolean | (() => void) },
24
25
  id?: string,
25
26
  layout: { [key: string]: string },
27
+ scrollBarNone?: boolean,
28
+
26
29
  }
27
30
 
28
31
  const Overlay = (props: OverlayProps) => {
@@ -36,11 +39,12 @@ const Overlay = (props: OverlayProps) => {
36
39
  htmlOptions = {},
37
40
  id,
38
41
  layout = { "bottom": "full" },
42
+ scrollBarNone = false,
39
43
  } = props
40
44
 
41
45
  const ariaProps = buildAriaProps(aria)
42
46
  const dataProps = buildDataProps(data)
43
- const classes = classnames(buildCss('pb_overlay'), globalProps(props), className)
47
+ const classes = classnames(buildCss('pb_overlay'), { 'overlay-hide-scrollbar': scrollBarNone }, globalProps(props), className )
44
48
  const htmlProps = buildHtmlProps(htmlOptions)
45
49
  const dynamicInlineProps = globalInlineProps(props)
46
50
 
@@ -68,12 +72,14 @@ const Overlay = (props: OverlayProps) => {
68
72
  children,
69
73
  color,
70
74
  position: getPosition(),
75
+ scrollBarNone,
71
76
  size: getSize()
72
77
  }) : OverlayToken({
73
78
  children,
74
79
  color,
75
80
  dynamic: dynamic,
76
81
  position: getPosition(),
82
+ scrollBarNone,
77
83
  size: getSize()
78
84
  })
79
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.
@@ -4,9 +4,11 @@ examples:
4
4
  - overlay_multi_directional: Multi-directional
5
5
  - overlay_vertical_dynamic_multi_directional: Vertical Dynamic Multi-directional
6
6
  - overlay_toggle: Toggle
7
+ - overlay_hide_scroll_bar: Hide Scroll Bar
7
8
 
8
9
  rails:
9
10
  - overlay_default: Default
10
11
  - overlay_multi_directional: Multi-directional
11
12
  - overlay_vertical_dynamic_multi_directional: Vertical Dynamic Multi-directional
12
13
  - overlay_toggle: Toggle
14
+ - overlay_hide_scroll_bar: Hide Scroll Bar
@@ -2,3 +2,4 @@ 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
4
  export { default as OverlayVerticalDynamicMultiDirectional } from './_overlay_vertical_dynamic_multi_directional.jsx'
5
+ export { default as OverlayHideScrollBar } from './_overlay_hide_scroll_bar.jsx'
@@ -10,9 +10,11 @@ module Playbook
10
10
  default: { "bottom": "full" }
11
11
  prop :dynamic, type: Playbook::Props::Boolean,
12
12
  default: false
13
+ prop :scroll_bar_none, type: Playbook::Props::Boolean,
14
+ default: false
13
15
 
14
16
  def classname
15
- generate_classname("pb_overlay")
17
+ generate_classname("pb_overlay", hide_scroll_bar_class)
16
18
  end
17
19
 
18
20
  def position
@@ -114,6 +116,10 @@ module Playbook
114
116
  data.merge!("data-overlay-dynamic" => true) if dynamic
115
117
  data
116
118
  end
119
+
120
+ def hide_scroll_bar_class
121
+ scroll_bar_none ? " overlay-hide-scrollbar" : ""
122
+ end
117
123
  end
118
124
  end
119
125
  end
@@ -64,3 +64,15 @@ test('should render children', () => {
64
64
  const kit = screen.getByTestId(testId)
65
65
  expect(kit).toHaveTextContent(props.children)
66
66
  })
67
+
68
+ test('should add overlay-hide-scrollbar class when scrollBarNone is true', () => {
69
+ const props = {
70
+ children,
71
+ data: { testid: testId },
72
+ scrollBarNone: true
73
+ }
74
+
75
+ render(<Overlay {...props} />)
76
+ const kit = screen.getByTestId(testId)
77
+ expect(kit).toHaveClass('overlay-hide-scrollbar')
78
+ })
@@ -31,41 +31,6 @@
31
31
  @include pb_title_thin;
32
32
  }
33
33
 
34
- &[class*=_display] {
35
- font-size: clamp(
36
- 24px,
37
- calc(24px + (128 - 24) * ((100vw - 320px) / (1920 - 320))),
38
- 128px
39
- );
40
- }
41
-
42
- &[class*=_dynamic] {
43
- &[class*=_xs] {
44
- font-size: min(2vw, 5rem);
45
- }
46
-
47
- &[class*=_sm] {
48
- font-size: min(2.5vw, 6rem);
49
- }
50
-
51
- &[class*=_md] {
52
- font-size: min(4vw, 10rem);
53
- }
54
-
55
- &[class*=_lg] {
56
- font-size: min(5vw, 12rem);
57
- }
58
-
59
- &[class*=_xl] {
60
- font-size: min(6vw, 14rem);
61
- }
62
-
63
- &[class*=_xxl] {
64
- font-size: min(8vw, 16rem);
65
- }
66
- }
67
-
68
-
69
34
  @each $size, $size_value in $breakpoints_grid {
70
35
  @for $title_size_value from 1 through 4 {
71
36
  $min_size: map-get($size_value, "min");
@@ -3,7 +3,7 @@ import classnames from 'classnames'
3
3
  import { buildAriaProps, buildCss, buildDataProps, buildHtmlProps } from '../utilities/props'
4
4
  import { deprecatedProps, GlobalProps, globalProps } from '../utilities/globalProps'
5
5
 
6
- type SizeType = 1 | 2 | 3 | 4 | "1" | "2" | "3" | "4" | "display"
6
+ type SizeType = 1 | 2 | 3 | 4 | "1" | "2" | "3" | "4"
7
7
  type SizeResponsiveType = {[key: string]: SizeType}
8
8
 
9
9
  type TitleProps = {
@@ -16,7 +16,6 @@ type TitleProps = {
16
16
  htmlOptions?: {[key: string]: string | number | boolean | (() => void)},
17
17
  id?: string,
18
18
  size?: SizeType | SizeResponsiveType,
19
- displaySize?: null | "xs" | "sm" | "md" | "lg" | "xl" | "xxl",
20
19
  tag?: "h1" | "h2" | "h3" | "h4" | "h5" | "h6" | "div" | "span",
21
20
  text?: string,
22
21
  variant?: null | "link",
@@ -33,7 +32,6 @@ const Title = (props: TitleProps): React.ReactElement => {
33
32
  htmlOptions = {},
34
33
  id,
35
34
  size = 3,
36
- displaySize = null,
37
35
  bold = true,
38
36
  tag = 'h3',
39
37
  text,
@@ -58,16 +56,9 @@ const Title = (props: TitleProps): React.ReactElement => {
58
56
  return css.trim()
59
57
  }
60
58
 
61
- const buildDisplaySize = () => {
62
- if (displaySize) {
63
- return `pb_title_kit_dynamic_${displaySize}`
64
- }
65
- }
66
-
67
59
  const classes = classnames(
68
60
  buildCss('pb_title_kit', isSizeNumberOrString ? `size_${size}` : "", variant, color, getBold),
69
61
  globalProps(props),
70
- buildDisplaySize(),
71
62
  buildResponsiveSizeCss(),
72
63
  className
73
64
  )
@@ -1,9 +1,10 @@
1
1
  <%= pb_rails("title", props: {
2
- margin_bottom: "md"
3
2
  }) do %>
4
3
  Default Title
5
4
  <% end %>
6
5
 
6
+ <br/>
7
+
7
8
  <%= pb_rails("title", props: { text: "Title 1", tag: "h1", size: 1 }) %>
8
9
  <%= pb_rails("title", props: { text: "Title 2", tag: "h2", size: 2 }) %>
9
10
  <%= pb_rails("title", props: { text: "Title 3", tag: "h3", size: 3 }) %>
@@ -6,10 +6,10 @@ const TitleDefault = (props) => {
6
6
  return (
7
7
  <div>
8
8
  <Title
9
- marginBottom='md'
10
9
  text="Default Title"
11
10
  {...props}
12
11
  />
12
+ <br />
13
13
  <Title
14
14
  size={1}
15
15
  tag="h1"
@@ -5,7 +5,6 @@ examples:
5
5
  - title_colors: Colors
6
6
  - title_responsive: Responsive
7
7
  - title_truncate: Truncate
8
- - title_display_size: Display Size
9
8
 
10
9
  react:
11
10
  - title_default: Default UI
@@ -13,4 +12,3 @@ examples:
13
12
  - title_colors: Colors
14
13
  - title_responsive: Responsive
15
14
  - title_truncate: Truncate
16
- - title_display_size: Display Size
@@ -3,4 +3,3 @@ export { default as TitleLightWeight } from './_title_light_weight.jsx'
3
3
  export { default as TitleColors } from './_title_colors.jsx'
4
4
  export { default as TitleResponsive } from './_title_responsive.jsx'
5
5
  export { default as TitleTruncate } from './_title_truncate.jsx'
6
- export { default as TitleDisplaySize } from './_title_display_size.jsx'
@@ -16,15 +16,12 @@ module Playbook
16
16
  default: nil,
17
17
  deprecated: true
18
18
  prop :bold, type: Playbook::Props::Boolean, default: true
19
- prop :display_size, type: Playbook::Props::Enum,
20
- values: [nil, "xs", "sm", "md", "lg", "xl", "xxl"],
21
- default: nil
22
19
 
23
20
  def classname
24
21
  if is_size_responsive
25
22
  generate_classname("pb_title_kit", variant, color, is_bold) + generate_responsive_size_classname
26
23
  else
27
- generate_classname("pb_title_kit", size, variant, color, is_bold) + generate_display_size
24
+ generate_classname("pb_title_kit", size, variant, color, is_bold)
28
25
  end
29
26
  end
30
27
 
@@ -32,12 +29,6 @@ module Playbook
32
29
  bold ? nil : "thin"
33
30
  end
34
31
 
35
- def generate_display_size
36
- return "" if display_size.nil?
37
-
38
- " pb_title_kit_dynamic_#{display_size}"
39
- end
40
-
41
32
  def is_size_responsive
42
33
  try(:size).is_a?(::Hash)
43
34
  end