playbook_ui 14.10.0.pre.alpha.PBNTR775formmatingmaskdefaultvalue5137 → 14.10.0.pre.alpha.play1465attempt25272

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 (96) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/pb_advanced_table/Components/TableHeaderCell.tsx +32 -19
  3. data/app/pb_kits/playbook/pb_advanced_table/SubKits/TableBody.tsx +3 -1
  4. data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.scss +35 -3
  5. data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.tsx +32 -18
  6. data/app/pb_kits/playbook/pb_advanced_table/advanced_table.html.erb +1 -1
  7. data/app/pb_kits/playbook/pb_advanced_table/advanced_table.rb +8 -1
  8. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_beta_sort.html.erb +1 -3
  9. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_headers.html.erb +43 -0
  10. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_headers.jsx +60 -0
  11. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_headers.md +1 -0
  12. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_headers_multiple.html.erb +58 -0
  13. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_headers_multiple.jsx +74 -0
  14. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_headers_multiple.md +1 -0
  15. data/app/pb_kits/playbook/pb_advanced_table/docs/example.yml +6 -1
  16. data/app/pb_kits/playbook/pb_advanced_table/docs/index.js +2 -0
  17. data/app/pb_kits/playbook/pb_advanced_table/index.js +143 -95
  18. data/app/pb_kits/playbook/pb_advanced_table/table_body.html.erb +1 -1
  19. data/app/pb_kits/playbook/pb_advanced_table/table_body.rb +50 -8
  20. data/app/pb_kits/playbook/pb_advanced_table/table_header.html.erb +17 -14
  21. data/app/pb_kits/playbook/pb_advanced_table/table_header.rb +78 -0
  22. data/app/pb_kits/playbook/pb_advanced_table/table_row.html.erb +4 -3
  23. data/app/pb_kits/playbook/pb_advanced_table/table_row.rb +7 -2
  24. data/app/pb_kits/playbook/pb_advanced_table/table_subrow_header.html.erb +2 -6
  25. data/app/pb_kits/playbook/pb_card/_card.scss +21 -3
  26. data/app/pb_kits/playbook/pb_card/docs/_card_header.html.erb +18 -0
  27. data/app/pb_kits/playbook/pb_card/docs/_card_header.jsx +40 -0
  28. data/app/pb_kits/playbook/pb_circle_icon_button/_circle_icon_button.tsx +3 -0
  29. data/app/pb_kits/playbook/pb_circle_icon_button/circle_icon_button.html.erb +1 -1
  30. data/app/pb_kits/playbook/pb_circle_icon_button/circle_icon_button.rb +1 -0
  31. data/app/pb_kits/playbook/pb_circle_icon_button/docs/_circle_icon_button_link.html.erb +8 -0
  32. data/app/pb_kits/playbook/pb_circle_icon_button/docs/_circle_icon_button_link.jsx +9 -0
  33. data/app/pb_kits/playbook/pb_circle_icon_button/docs/_circle_icon_button_link.md +1 -0
  34. data/app/pb_kits/playbook/pb_icon_circle/_icon_circle.scss +1 -13
  35. data/app/pb_kits/playbook/pb_section_separator/_section_separator.scss +64 -1
  36. data/app/pb_kits/playbook/pb_section_separator/_section_separator.tsx +3 -1
  37. data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_color.html.erb +10 -0
  38. data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_color.jsx +42 -0
  39. data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_color.md +3 -0
  40. data/app/pb_kits/playbook/pb_section_separator/docs/example.yml +2 -0
  41. data/app/pb_kits/playbook/pb_section_separator/docs/index.js +1 -0
  42. data/app/pb_kits/playbook/pb_section_separator/section_separator.rb +4 -1
  43. data/app/pb_kits/playbook/pb_skeleton_loading/_skeleton_loading.scss +2 -2
  44. data/app/pb_kits/playbook/pb_skeleton_loading/docs/_description.md +3 -0
  45. data/app/pb_kits/playbook/pb_skeleton_loading/docs/_skeleton_loading_border_radius.html.erb +9 -0
  46. data/app/pb_kits/playbook/pb_skeleton_loading/docs/_skeleton_loading_border_radius_rails.md +1 -0
  47. data/app/pb_kits/playbook/pb_skeleton_loading/docs/_skeleton_loading_color.html.erb +7 -0
  48. data/app/pb_kits/playbook/pb_skeleton_loading/docs/_skeleton_loading_default.html.erb +1 -1
  49. data/app/pb_kits/playbook/pb_skeleton_loading/docs/_skeleton_loading_filter.html.erb +119 -0
  50. data/app/pb_kits/playbook/pb_skeleton_loading/docs/_skeleton_loading_filter.jsx +10 -2
  51. data/app/pb_kits/playbook/pb_skeleton_loading/docs/_skeleton_loading_height_width.html.erb +15 -0
  52. data/app/pb_kits/playbook/pb_skeleton_loading/docs/_skeleton_loading_height_width.jsx +6 -2
  53. data/app/pb_kits/playbook/pb_skeleton_loading/docs/_skeleton_loading_height_width_rails.md +3 -0
  54. data/app/pb_kits/playbook/pb_skeleton_loading/docs/_skeleton_loading_layout.html.erb +3 -0
  55. data/app/pb_kits/playbook/pb_skeleton_loading/docs/_skeleton_loading_user.html.erb +63 -0
  56. data/app/pb_kits/playbook/pb_skeleton_loading/docs/_skeleton_loading_user.jsx +11 -3
  57. data/app/pb_kits/playbook/pb_skeleton_loading/docs/example.yml +7 -2
  58. data/app/pb_kits/playbook/pb_skeleton_loading/skeleton_loading.html.erb +8 -12
  59. data/app/pb_kits/playbook/pb_skeleton_loading/skeleton_loading.rb +48 -1
  60. data/app/pb_kits/playbook/pb_table/_table.tsx +67 -18
  61. data/app/pb_kits/playbook/pb_table/docs/_table_sticky_columns.jsx +88 -0
  62. data/app/pb_kits/playbook/pb_table/docs/_table_sticky_columns_react.md +3 -0
  63. data/app/pb_kits/playbook/pb_table/docs/_table_sticky_left_columns.jsx +1 -1
  64. data/app/pb_kits/playbook/pb_table/docs/_table_sticky_left_columns_rails.md +2 -0
  65. data/app/pb_kits/playbook/pb_table/docs/_table_sticky_left_columns_react.md +4 -1
  66. data/app/pb_kits/playbook/pb_table/docs/_table_sticky_right_columns.jsx +87 -0
  67. data/app/pb_kits/playbook/pb_table/docs/_table_sticky_right_columns_react.md +5 -0
  68. data/app/pb_kits/playbook/pb_table/index.ts +17 -17
  69. data/app/pb_kits/playbook/pb_table/styles/_scroll.scss +38 -2
  70. data/app/pb_kits/playbook/pb_table/styles/_sticky_columns.scss +17 -3
  71. data/app/pb_kits/playbook/pb_typeahead/_typeahead.tsx +3 -2
  72. data/app/pb_kits/playbook/pb_typeahead/components/ClearIndicator.tsx +12 -4
  73. data/app/pb_kits/playbook/pb_typeahead/components/Control.tsx +5 -1
  74. data/app/pb_kits/playbook/pb_typeahead/components/IndicatorsContainer.tsx +8 -3
  75. data/app/pb_kits/playbook/pb_typeahead/components/MenuList.tsx +6 -1
  76. data/app/pb_kits/playbook/pb_typeahead/components/Option.tsx +21 -6
  77. data/app/pb_kits/playbook/pb_typeahead/components/Placeholder.tsx +13 -6
  78. data/app/pb_kits/playbook/pb_typeahead/components/ValueContainer.tsx +7 -3
  79. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_custom_menu_list.jsx +2 -0
  80. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_pills_async.jsx +4 -2
  81. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_pills_async_custom_options.jsx +5 -5
  82. data/dist/chunks/{_typeahead-CoIYBETL.js → _typeahead-BhT5aXCY.js} +3 -3
  83. data/dist/chunks/_weekday_stacked-DJOTNDSY.js +45 -0
  84. data/dist/chunks/{lib-sMFo2JZy.js → lib-B7sgJtGS.js} +1 -1
  85. data/dist/chunks/{pb_form_validation-CgvjWbOK.js → pb_form_validation-C5Cc0-1v.js} +1 -1
  86. data/dist/chunks/vendor.js +1 -1
  87. data/dist/menu.yml +1 -1
  88. data/dist/playbook-doc.js +1 -1
  89. data/dist/playbook-rails-react-bindings.js +1 -1
  90. data/dist/playbook-rails.js +1 -1
  91. data/dist/playbook.css +1 -1
  92. data/lib/playbook/version.rb +1 -1
  93. metadata +31 -8
  94. data/dist/chunks/_weekday_stacked-Qj3GFYzA.js +0 -45
  95. /data/app/pb_kits/playbook/pb_skeleton_loading/docs/{_skeleton_loading_border_radius.md → _skeleton_loading_border_radius_react.md} +0 -0
  96. /data/app/pb_kits/playbook/pb_skeleton_loading/docs/{_skeleton_loading_height_width.md → _skeleton_loading_height_width_react.md} +0 -0
@@ -20,6 +20,7 @@ type CircleIconButtonProps = {
20
20
  onClick?: React.MouseEventHandler<HTMLElement>,
21
21
  newWindow?: boolean,
22
22
  type?: 'button' | 'submit' | 'reset' | undefined,
23
+ target?: string
23
24
  variant?: 'primary' | 'secondary' | 'link',
24
25
  }
25
26
 
@@ -36,6 +37,7 @@ const CircleIconButton = (props: CircleIconButtonProps): React.ReactElement => {
36
37
  loading = false,
37
38
  onClick = noop,
38
39
  type,
40
+ target,
39
41
  link,
40
42
  newWindow,
41
43
  variant,
@@ -66,6 +68,7 @@ const CircleIconButton = (props: CircleIconButtonProps): React.ReactElement => {
66
68
  loading={loading}
67
69
  newWindow={newWindow}
68
70
  onClick={onClick}
71
+ target={target}
69
72
  text={null}
70
73
  variant={variant}
71
74
  >
@@ -1,5 +1,5 @@
1
1
  <%= pb_content_tag do %>
2
- <%= pb_rails("button", props: {type: object.type, loading: object.loading, link: object.link, new_window:object.new_window, variant: object.variant, disabled: object.disabled, dark: object.dark}) do %>
2
+ <%= pb_rails("button", props: {type: object.type, loading: object.loading, link: object.link, new_window:object.new_window, variant: object.variant, target: object.target, disabled: object.disabled, dark: object.dark}) do %>
3
3
  <%= pb_rails("icon", props: {icon: object.icon, fixed_width: true, dark: object.dark}) %>
4
4
  <% end %>
5
5
  <% end %>
@@ -17,6 +17,7 @@ module Playbook
17
17
  prop :link
18
18
  prop :new_window, type: Playbook::Props::Boolean,
19
19
  default: false
20
+ prop :target
20
21
  def classname
21
22
  generate_classname("pb_circle_icon_button_kit")
22
23
  end
@@ -10,3 +10,11 @@
10
10
  link: "https://google.com",
11
11
  new_window: true
12
12
  }) %>
13
+ <br/>
14
+ <%= pb_rails("circle_icon_button", props: {
15
+ icon: "info",
16
+ variant: "secondary",
17
+ aria: { label: "Link to Playbook in new window" },
18
+ link: "https://playbook.powerapp.cloud/",
19
+ target: "child"
20
+ }) %>
@@ -21,6 +21,15 @@ const CircleIconButtonLink = (props) => (
21
21
  {...props}
22
22
  />
23
23
 
24
+ <br/>
25
+
26
+ <CircleIconButton
27
+ aria={{ label: "Link to Playbook in new window" }}
28
+ icon="info"
29
+ link="https://playbook.powerapp.cloud/"
30
+ target="child"
31
+ variant="secondary"
32
+ />
24
33
  </div>
25
34
  )
26
35
 
@@ -0,0 +1 @@
1
+ The `link` prop accepts a string that is used as an href value and causes the button to act as a link. The default behavior of a link is to open in the current window. You can optionally alter the link behavior by adding the `newWindow` prop (boolean), which will open the link in a new window, or by calling the `target` prop, which accepts `_self`, `_blank`, `_parent`, `_top`, `child`, or any string, allowing you to specify any link target.
@@ -14,16 +14,6 @@ $pb_icon_circle_sizes: (
14
14
  "xl": 100px,
15
15
  );
16
16
 
17
- @mixin svg_size($name, $match, $adjust) {
18
- @if $name == $match {
19
- $svg_xy: $adjust;
20
- & > svg {
21
- width: #{$svg_xy};
22
- height: #{$svg_xy};
23
- }
24
- }
25
- }
26
-
27
17
  [class^=pb_icon_circle_kit] {
28
18
  display: flex;
29
19
  justify-content: center;
@@ -57,13 +47,11 @@ $pb_icon_circle_sizes: (
57
47
  border-radius: $size/2;
58
48
  background: $silver;
59
49
  color: $text_lt_light;
60
- font-size: $size * 0.38;
50
+ font-size: if($name == "xxs", $size - 6px, $size * 0.38);
61
51
  line-height: $size;
62
52
  flex-shrink: 0;
63
53
  flex-grow: 0;
64
54
  flex-basis: $size;
65
-
66
- @include svg_size($name, "xxs", $size - 6px);
67
55
  }
68
56
  }
69
57
 
@@ -3,6 +3,11 @@
3
3
  @import "../tokens/opacity";
4
4
  @import "./section_separator_mixin";
5
5
 
6
+ $merge_kits1: map-merge($status_colors, $category_colors);
7
+ $merge_kits2: map-merge($merge_kits1, $product_colors);
8
+ $merge_kits3: map-merge($merge_kits2, $text_colors);
9
+ $section_selector_colors: map-merge($merge_kits3, $data_colors);
10
+
6
11
  $section_colors_light: (
7
12
  background: $bg_light,
8
13
  card: $card_light,
@@ -19,8 +24,11 @@ $section_colors_dark: (
19
24
  align-items: center;
20
25
  position: relative;
21
26
  span {
22
- padding: 0 $space_xs;
27
+ padding: 0;
23
28
  display: flex;
29
+ [class*="pb_caption_kit"] {
30
+ padding: 0 $space_xs;
31
+ }
24
32
  }
25
33
  &::before {
26
34
  content: "";
@@ -34,12 +42,40 @@ $section_colors_dark: (
34
42
  flex: 1;
35
43
  @include section_separator_horizontal;
36
44
  }
45
+ @each $color_name, $color_value in $section_selector_colors {
46
+ &[class*="color_#{$color_name}"] {
47
+ &::before, &::after {
48
+ background: $color_value;
49
+ }
50
+
51
+ &[class*=_vertical] {
52
+ &::after {
53
+ background: $color_value;
54
+ }
55
+ }
56
+ &[class*=_dashed] {
57
+ &::before, &::after {
58
+ border: 1px dashed $color_value;
59
+ }
60
+ &[class*=_vertical] {
61
+ &::after {
62
+ border: 1px dashed $color_value;
63
+ background: none;
64
+ }
65
+ }
66
+ }
67
+ }
68
+ }
69
+
37
70
  &[class*=_horizontal] {
38
71
  justify-content: center;
39
72
  }
40
73
  &[class*=_vertical] {
41
74
  margin-left: $space_xs;
42
75
  margin-right: $space_xs;
76
+ &::before {
77
+ display: none;
78
+ }
43
79
  &::after {
44
80
  @include section_separator_vertical(false);
45
81
  }
@@ -54,6 +90,33 @@ $section_colors_dark: (
54
90
  // Dark =========================
55
91
 
56
92
  &.dark {
93
+ @each $color_name, $color_value in $section_selector_colors {
94
+ &[class*="color_#{$color_name}"] {
95
+ &::before, &::after {
96
+ background: $color_value;
97
+ }
98
+
99
+ &[class*=_vertical] {
100
+ &::after {
101
+ @include section_separator_vertical(false);
102
+ background: $color_value;
103
+ }
104
+ }
105
+
106
+ &[class*=_dashed] {
107
+ &::before, &::after {
108
+ border: 1px dashed $color_value;
109
+ background: none;
110
+ }
111
+ &[class*=_vertical] {
112
+ &::after {
113
+ border: 1px dashed $color_value;
114
+ background: none;
115
+ }
116
+ }
117
+ }
118
+ }
119
+ }
57
120
  &::before {
58
121
  @include section_separator_horizontal(true);
59
122
  }
@@ -10,6 +10,7 @@ type SectionSeparatorProps = {
10
10
  aria?: { [key: string]: string; },
11
11
  children?: React.ReactChild[] | React.ReactChild,
12
12
  className?: string,
13
+ color?: "default" | "primary",
13
14
  dark?: boolean,
14
15
  data?: { [key: string]: string; },
15
16
  htmlOptions?: {[key: string]: string | number | boolean | (() => void)},
@@ -25,6 +26,7 @@ const SectionSeparator = (props: SectionSeparatorProps): React.ReactElement => {
25
26
  aria = {},
26
27
  children,
27
28
  className,
29
+ color ="default",
28
30
  data = {},
29
31
  htmlOptions = {},
30
32
  id,
@@ -37,7 +39,7 @@ const SectionSeparator = (props: SectionSeparatorProps): React.ReactElement => {
37
39
  const ariaProps = buildAriaProps(aria)
38
40
  const dataProps = buildDataProps(data)
39
41
  const htmlProps = buildHtmlProps(htmlOptions)
40
- const classes = classnames(buildCss('pb_section_separator_kit', variant, orientation, lineStyle === "dashed" ? lineStyle : ""), globalProps(props), className)
42
+ const classes = classnames(buildCss('pb_section_separator_kit', variant, orientation, lineStyle === "dashed" ? lineStyle : "", color !== "default" ? `color_${color}` : ''), globalProps(props), className)
41
43
  const dynamicInlineProps = globalInlineProps(props)
42
44
 
43
45
  return (
@@ -0,0 +1,10 @@
1
+ <%= pb_rails("section_separator", props: { text: "Default Separator" }) %>
2
+ <%= pb_rails("section_separator", props: { color: "primary", text: "Primary Separator" }) %>
3
+ <%= pb_rails("section_separator", props: { color: "primary", line_style: "dashed", text: "Primary Dashed Separator" }) %>
4
+ <%= pb_rails("section_separator", props: { color: "primary" }) do %>
5
+ <%= pb_rails("flex", props: { padding: "xs" }) do %>
6
+ <%= pb_rails("icon", props: { color: "primary", icon: "arrow-down" }) %>
7
+ <%= pb_rails("detail", props: { text: "Children", size: "sm", color: "link" }) %>
8
+ <% end %>
9
+ <% end %>
10
+
@@ -0,0 +1,42 @@
1
+ import React from "react"
2
+ import { SectionSeparator, Flex, Detail, Icon } from "playbook-ui"
3
+
4
+ const children = (
5
+ <Flex padding="xs">
6
+ <Icon color="primary"
7
+ icon="arrow-down"
8
+ />
9
+ <Detail
10
+ color="link"
11
+ size="sm"
12
+ text="Children"
13
+ />
14
+ </Flex>
15
+ )
16
+
17
+ const SectionSeparatorColor = (props) => {
18
+ return (
19
+ <div>
20
+ <SectionSeparator text="Default Separator"
21
+ {...props}
22
+ />
23
+ <SectionSeparator color="primary"
24
+ text="Primary Separator"
25
+ {...props}
26
+ />
27
+ <SectionSeparator
28
+ color="primary"
29
+ lineStyle="dashed"
30
+ text="Primary Dashed Separator"
31
+ {...props}
32
+ />
33
+ <SectionSeparator color="primary"
34
+ {...props}
35
+ >
36
+ {children}
37
+ </SectionSeparator>
38
+ </div>
39
+ )
40
+ }
41
+
42
+ export default SectionSeparatorColor
@@ -0,0 +1,3 @@
1
+ Pass "primary" to the `color` prop to change any section separator color.
2
+
3
+ **NOTE:** Passing `children` overrides any content provided via the `text` prop. The `color` prop does not affect the `text` prop's color, and the color of `children` is determined by the children's individual props. For greater control over text color customization, consider using a separator with `children`.
@@ -6,6 +6,7 @@ examples:
6
6
  - section_separator_text: Text Separator
7
7
  - section_separator_vertical: Vertical
8
8
  - section_separator_children: Children
9
+ - section_separator_color: Color
9
10
 
10
11
  react:
11
12
  - section_separator_line: Line Separator
@@ -13,6 +14,7 @@ examples:
13
14
  - section_separator_text: Text Separator
14
15
  - section_separator_vertical: Vertical
15
16
  - section_separator_children: Children
17
+ - section_separator_color: Color
16
18
 
17
19
  swift:
18
20
  - section_separator_line_swift: Line Separator
@@ -3,3 +3,4 @@ export { default as SectionSeparatorText } from './_section_separator_text.jsx'
3
3
  export { default as SectionSeparatorVertical } from './_section_separator_vertical.jsx'
4
4
  export { default as SectionSeparatorDashed } from './_section_separator_dashed.jsx'
5
5
  export { default as SectionSeparatorChildren } from './_section_separator_children.jsx'
6
+ export { default as SectionSeparatorColor } from './_section_separator_color.jsx'
@@ -3,6 +3,9 @@
3
3
  module Playbook
4
4
  module PbSectionSeparator
5
5
  class SectionSeparator < Playbook::KitBase
6
+ prop :color, type: Playbook::Props::Enum,
7
+ values: %w[default primary],
8
+ default: "default"
6
9
  prop :text
7
10
  prop :variant, type: Playbook::Props::Enum,
8
11
  values: %w[card background],
@@ -17,7 +20,7 @@ module Playbook
17
20
  default: "solid"
18
21
 
19
22
  def classname
20
- generate_classname("pb_section_separator_kit", variant, orientation, line_style == "dashed" ? "dashed" : nil)
23
+ generate_classname("pb_section_separator_kit", variant, orientation, line_style == "dashed" ? "dashed" : nil, color != "default" ? "color_#{color}" : nil)
21
24
  end
22
25
 
23
26
  private
@@ -1,8 +1,8 @@
1
1
  @import 'skeleton_loading_mixins';
2
2
 
3
3
  .pb_skeleton_loading {
4
- display: "flex";
5
- flex-direction: "column";
4
+ display: flex;
5
+ flex-direction: column;
6
6
  height: 100%;
7
7
  .color_default {
8
8
  @include skeleton-shimmer($silver);
@@ -0,0 +1,3 @@
1
+ The Skeleton Loading kit can be used an intermediate loading state to give users a visual indication that content is loading.
2
+
3
+ **Please Note**: this kit is not meant to be integrated interally within other Playbook kits as a loading prop; rather, it can be used to create a composite of the section/kit/page with loading intermediataries, as demonstrated in the the "example component" doc examples.
@@ -0,0 +1,9 @@
1
+ <%= pb_rails("flex", props: { justify: "evenly" }) do %>
2
+ <%= pb_rails("skeleton_loading", props: { border_radius: "rounded", height: "50px", width: "100px"}) %>
3
+ <%= pb_rails("skeleton_loading", props: { border_radius: "xl", height: "50px", width: "100px"}) %>
4
+ <%= pb_rails("skeleton_loading", props: { border_radius: "lg", height: "50px", width: "100px"}) %>
5
+ <%= pb_rails("skeleton_loading", props: { border_radius: "md", height: "50px", width: "100px"}) %>
6
+ <%= pb_rails("skeleton_loading", props: { height: "50px", width: "100px"}) %>
7
+ <%= pb_rails("skeleton_loading", props: { border_radius: "xs", height: "50px", width: "100px"}) %>
8
+ <%= pb_rails("skeleton_loading", props: { border_radius: "none", height: "50px", width: "100px"}) %>
9
+ <% end %>
@@ -0,0 +1 @@
1
+ The `border_radius` prop accepts all of our [BorderRadius](https://playbook.powerapp.cloud/visual_guidelines/border_radius) tokens, with `sm` as default.
@@ -0,0 +1,7 @@
1
+ <%= pb_rails("card", props: { border_none: true }) do %>
2
+ <%= pb_rails("skeleton_loading") %>
3
+ <% end %>
4
+
5
+ <%= pb_rails("card", props: { background: "light", border_none: true }) do %>
6
+ <%= pb_rails("skeleton_loading", props: { color: "white" }) %>
7
+ <% end %>
@@ -1 +1 @@
1
- <%= pb_rails("skeleton_loading") %>
1
+ <%= pb_rails("skeleton_loading") %>
@@ -0,0 +1,119 @@
1
+ <%= pb_rails("button", props: { id: "toggle-filter-button", margin_bottom: "md", text: "Show Filter", variant: "secondary" }) %>
2
+
3
+ <div id="skeleton-loading-filter-content">
4
+ <%= pb_rails("card", props: { margin_bottom: "lg" }) do %>
5
+ <%= pb_rails("flex", props: { align_items: "center", justify: "between", orientation: "row" }) do %>
6
+ <%= pb_rails("flex", props: { align_items: "center", justify: "start", orientation: "row" }) do %>
7
+ <%= pb_rails("skeleton_loading", props: { border_radius: "rounded", height: "40px", margin_right: "sm", width: "40px" }) %>
8
+ <%= pb_rails("skeleton_loading", props: { height: "16px", margin_right: "md", width: "80px" }) %>
9
+ <% end %>
10
+ <%= pb_rails("flex", props: { align_items: "center", justify: "end", orientation: "row" }) do %>
11
+ <%= pb_rails("skeleton_loading", props: { height: "18px", width: "120px" }) %>
12
+ <% end %>
13
+ <% end %>
14
+ <% end %>
15
+
16
+ <%= pb_rails("skeleton_loading", props: { height: "127px", width: "100%" }) %>
17
+ </div>
18
+
19
+ <div id="filter-content" style="display: none;">
20
+ <%= pb_rails("filter", props: {
21
+ margin_bottom: "xl",
22
+ min_width: "360px",
23
+ id: "2",
24
+ filters: [
25
+ { name: "name", value: "John Wick" }
26
+ ],
27
+ sort_menu: [
28
+ { item: "Popularity", link: "?q[sorts]=managers_popularity+asc", active: true, direction: "desc" },
29
+ { item: "Mananger's Title", link: "?q[sorts]=managers_title+asc", active: false },
30
+ { item: "Manager's Name", link: "?q[sorts]=managers_name+asc", active: false },
31
+ ],
32
+ results: 546,
33
+ template: "single"
34
+ }) do %>
35
+ <% example_collection = [
36
+ OpenStruct.new(name: "USA", value: 1),
37
+ OpenStruct.new(name: "Canada", value: 2),
38
+ OpenStruct.new(name: "Brazil", value: 3),
39
+ OpenStruct.new(name: "Philippines", value: 4),
40
+ OpenStruct.new(name: "A galaxy far far away...", value: 5)
41
+ ] %>
42
+
43
+ <%= pb_rails("form", props: { form_system_options: { scope: :example, method: :get } }) do |form| %>
44
+ <%= form.text_field :example_text_field, props: { label: true } %>
45
+ <%= form.collection_select :example_collection_select, example_collection, :value, :name, props: { label: true } %>
46
+
47
+ <%= form.actions do |action| %>
48
+ <%= action.submit props: {
49
+ text: "Apply",
50
+ data: {
51
+ disable_with: "pb_rails('icon', props: { icon: 'spinner', spin: true, fixed_width: true })Searching...".html_safe
52
+ },}%>
53
+ <%= action.button props: { type: "reset", text: "Clear", variant: "secondary" } %>
54
+ <% end %>
55
+ <% end %>
56
+ <% end %>
57
+
58
+ <%= pb_rails("filter", props: {
59
+ min_width: "360px",
60
+ id: "1",
61
+ filters: [
62
+ { name: "name", value: "John Wick" },
63
+ { name: "city", value: "San Francisco"}
64
+ ],
65
+ sort_menu: [
66
+ { item: "Popularity", link: "?q[sorts]=managers_popularity+asc", active: true, direction: "desc" },
67
+ { item: "Mananger's Title", link: "?q[sorts]=managers_title+asc", active: false },
68
+ { item: "Manager's Name", link: "?q[sorts]=managers_name+asc", active: false },
69
+ ],
70
+ template: "default",
71
+ results: 1,
72
+ }) do %>
73
+ <% example_collection = [
74
+ OpenStruct.new(name: "USA", value: 1),
75
+ OpenStruct.new(name: "Canada", value: 2),
76
+ OpenStruct.new(name: "Brazil", value: 3),
77
+ OpenStruct.new(name: "Philippines", value: 4),
78
+ OpenStruct.new(name: "A galaxy far far away...", value: 5)
79
+ ] %>
80
+ <%= pb_rails("form", props: { form_system_options: { scope: :example, method: :get } }) do |form| %>
81
+ <%= form.text_field :example_text_field, props: { label: true } %>
82
+ <%= form.collection_select :example_collection_select, example_collection, :value, :name, props: { label: true } %>
83
+
84
+ <%= form.actions do |action| %>
85
+ <%= action.submit props: {
86
+ text: "Apply",
87
+ data: {
88
+ disable_with: "pb_rails('icon', props: { icon: 'spinner', spin: true, fixed_width: true })Searching...".html_safe
89
+ },}%>
90
+ <%= action.button props: { type: "reset", text: "Clear", variant: "secondary" } %>
91
+ <% end %>
92
+ <% end %>
93
+ <% end %>
94
+ </div>
95
+
96
+ <script>
97
+ document.addEventListener("DOMContentLoaded", function() {
98
+ const toggleButton = document.getElementById('toggle-filter-button')
99
+ const skeletonFilterContentDiv = document.getElementById('skeleton-loading-filter-content')
100
+ const filterContentDiv = document.getElementById('filter-content')
101
+ const secondFilterContentDiv = document.getElementById('second-filter-content')
102
+
103
+ let isLoading = true
104
+
105
+ toggleButton.addEventListener('click', function() {
106
+ isLoading = !isLoading
107
+
108
+ if (isLoading) {
109
+ skeletonFilterContentDiv.style.display = 'block'
110
+ filterContentDiv.style.display = 'none'
111
+ toggleButton.textContent = 'Show Filter'
112
+ } else {
113
+ skeletonFilterContentDiv.style.display = 'none'
114
+ filterContentDiv.style.display = 'block'
115
+ toggleButton.textContent = 'Show Skeleton Loading'
116
+ }
117
+ })
118
+ })
119
+ </script>
@@ -1,4 +1,4 @@
1
- import React from 'react';
1
+ import React, { useState } from 'react';
2
2
  import { Button, Card, Filter, Flex, Select, SkeletonLoading, TextInput } from "playbook-ui";
3
3
 
4
4
  const SortingChangeCallback = (sortOptions) => {
@@ -6,7 +6,8 @@ const SortingChangeCallback = (sortOptions) => {
6
6
  }
7
7
 
8
8
  const SkeletonLoadingFilter = (props) => {
9
- const isLoading = true
9
+ const [isLoading, setIsLoading] = useState(true)
10
+ const toggleLoading = () => setIsLoading((prev) => !prev)
10
11
 
11
12
  const options = [
12
13
  { value: 'USA' },
@@ -18,6 +19,13 @@ const SkeletonLoadingFilter = (props) => {
18
19
 
19
20
  return (
20
21
  <div>
22
+ <Button
23
+ marginBottom="md"
24
+ onClick={toggleLoading}
25
+ variant="secondary"
26
+ >
27
+ {isLoading ? "Show Filter" : "Show Skeleton Loading"}
28
+ </Button>
21
29
  <div>
22
30
  {isLoading ? (
23
31
  <Card
@@ -0,0 +1,15 @@
1
+ <%= pb_rails("skeleton_loading", props: { height: "100px", width: "50%" }) %>
2
+
3
+ <%= pb_rails("skeleton_loading", props: { gap: "md", height: "20px", margin_y: "md", stack: 3, width: "50px" }) %>
4
+
5
+ <%= pb_rails("card", props: { height: "200px", margin_bottom: "md", padding: "none", width: "100%" }) do %>
6
+ <%= pb_rails("skeleton_loading", props: { border_radius: "md", gap: "xl", height: "50%", width: "300px" }) %>
7
+ <% end %>
8
+
9
+ <%= pb_rails("card", props: { height: "200px", margin_bottom: "md", padding: "none", width: "100%" }) do %>
10
+ <%= pb_rails("skeleton_loading", props: { border_radius: "md", gap: "xl", height: "30%", stack: 2, width: "70%" }) %>
11
+ <% end %>
12
+
13
+ <%= pb_rails("skeleton_loading", props: { height: "150px", margin_y: "md", width: "150px" }) %>
14
+
15
+ <%= pb_rails("skeleton_loading", props: { border_radius: "rounded", height: "150px", width: "150px" }) %>
@@ -17,9 +17,11 @@ const SkeletonLoadingHeightWidth = (props) => (
17
17
  width="50px"
18
18
  {...props}
19
19
  />
20
- <Card htmlOptions={{ style: { height: '200px', width: '100%' }}}
20
+ <Card
21
+ height='200px'
21
22
  marginBottom="md"
22
23
  padding="none"
24
+ width='100%'
23
25
  {...props}
24
26
  >
25
27
  <SkeletonLoading
@@ -30,8 +32,10 @@ const SkeletonLoadingHeightWidth = (props) => (
30
32
  {...props}
31
33
  />
32
34
  </Card>
33
- <Card htmlOptions={{ style: { height: '200px', width: '100%' }}}
35
+ <Card
36
+ height='200px'
34
37
  padding="none"
38
+ width='100%'
35
39
  {...props}
36
40
  >
37
41
  <SkeletonLoading
@@ -0,0 +1,3 @@
1
+ The `height` and `width` props accept pixel and percentage values. If using a percentage for `height`, the parent container must have a set height.
2
+
3
+ Set the `height` and `width` props to the same value to make a square. A `rounded` border_radius will make a square a circle. If using percentages to make a square, your parent container must also be a square.
@@ -0,0 +1,3 @@
1
+ <%= pb_rails("skeleton_loading", props: { stack: 5 }) %>
2
+
3
+ <%= pb_rails("skeleton_loading", props: { gap: "md", padding_top: "xl", stack: 3 }) %>
@@ -0,0 +1,63 @@
1
+ <%= pb_rails("button", props: { id: "toggle-user-button", margin_bottom: "md", text: "Show User", variant: "secondary" }) %>
2
+
3
+ <div id="skeleton-loading-user-content">
4
+ <%= pb_rails("flex", props: { align_items: "center" }) do %>
5
+ <%= pb_rails("skeleton_loading", props: { border_radius: "rounded", height: "38px", padding_right: "sm", width: "38px"}) %>
6
+ <%= pb_rails("skeleton_loading", props: { gap: "xxs", height: "18px", stack: 2, width: "161px"}) %>
7
+ <% end %>
8
+ <%= pb_rails("flex", props: { align_items: "start", padding_top: "md" }) do %>
9
+ <%= pb_rails("flex", props: { align_items: "center", flex_direction: "column" }) do %>
10
+ <%= pb_rails("skeleton_loading", props: { border_radius: "rounded", height: "100px", padding_bottom: "xs", width: "100px"}) %>
11
+ <%= pb_rails("skeleton_loading", props: { height: "32px", padding_bottom: "xxs", width: "144px"}) %>
12
+ <%= pb_rails("skeleton_loading", props: { height: "21px", width: "164px"}) %>
13
+ <% end %>
14
+ <% end %>
15
+ </div>
16
+
17
+ <div id="user-content" style="display: none;">
18
+ <div>
19
+ <%= pb_rails("user", props: {
20
+ name: "Anna Black",
21
+ title: "Remodeling Consultant",
22
+ orientation: "horizontal",
23
+ align: "left",
24
+ avatar_url: "https://randomuser.me/api/portraits/women/44.jpg"
25
+ }) %>
26
+ </div>
27
+ <div>
28
+ <%= pb_rails("flex", props: { align_items: "start", padding_top: "md" }) do %>
29
+ <%= pb_rails("user", props: {
30
+ name: "Anna Black",
31
+ title: "Remodeling Consultant",
32
+ orientation: "vertical",
33
+ align: "center",
34
+ size: "lg",
35
+ avatar_url: "https://randomuser.me/api/portraits/women/44.jpg"
36
+ }) %>
37
+ <% end %>
38
+ </div>
39
+ </div>
40
+
41
+ <script>
42
+ document.addEventListener("DOMContentLoaded", function() {
43
+ const toggleButton = document.getElementById('toggle-user-button')
44
+ const skeletonUserContentDiv = document.getElementById('skeleton-loading-user-content')
45
+ const userContentDiv = document.getElementById('user-content')
46
+
47
+ let isLoading = true
48
+
49
+ toggleButton.addEventListener('click', function() {
50
+ isLoading = !isLoading
51
+
52
+ if (isLoading) {
53
+ skeletonUserContentDiv.style.display = 'block'
54
+ userContentDiv.style.display = 'none'
55
+ toggleButton.textContent = 'Show User'
56
+ } else {
57
+ skeletonUserContentDiv.style.display = 'none'
58
+ userContentDiv.style.display = 'block'
59
+ toggleButton.textContent = 'Show Skeleton Loading'
60
+ }
61
+ })
62
+ })
63
+ </script>