playbook_ui 7.13.0 → 7.14.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 (64) hide show
  1. checksums.yaml +4 -4
  2. data/app/helpers/playbook/application_helper.rb +4 -0
  3. data/app/pb_kits/playbook/_playbook.scss +1 -0
  4. data/app/pb_kits/playbook/pb_card/_card.jsx +3 -1
  5. data/app/pb_kits/playbook/pb_card/_card.scss +3 -2
  6. data/app/pb_kits/playbook/pb_card/_card_mixin.scss +6 -0
  7. data/app/pb_kits/playbook/pb_card/card.rb +9 -1
  8. data/app/pb_kits/playbook/pb_card/docs/_card_border_radius.html.erb +53 -0
  9. data/app/pb_kits/playbook/pb_card/docs/_card_border_radius.jsx +71 -0
  10. data/app/pb_kits/playbook/pb_card/docs/_card_border_radius.md +1 -0
  11. data/app/pb_kits/playbook/pb_card/docs/_card_light.md +1 -0
  12. data/app/pb_kits/playbook/pb_card/docs/example.yml +2 -0
  13. data/app/pb_kits/playbook/pb_card/docs/index.js +1 -0
  14. data/app/pb_kits/playbook/pb_filter/Filter/FiltersPopover.jsx +5 -1
  15. data/app/pb_kits/playbook/pb_filter/docs/_filter_close_popover.jsx +61 -0
  16. data/app/pb_kits/playbook/pb_filter/docs/_filter_default.md +1 -0
  17. data/app/pb_kits/playbook/pb_filter/docs/example.yml +1 -0
  18. data/app/pb_kits/playbook/pb_filter/docs/index.js +1 -0
  19. data/app/pb_kits/playbook/pb_form_pill/_form_pill.scss +2 -0
  20. data/app/pb_kits/playbook/pb_image/_image.scss +1 -0
  21. data/app/pb_kits/playbook/pb_layout/docs/_layout_collection.html.erb +4 -4
  22. data/app/pb_kits/playbook/pb_layout/docs/_layout_collection.md +1 -0
  23. data/app/pb_kits/playbook/pb_radio/_radio.scss +1 -0
  24. data/app/pb_kits/playbook/pb_selectable_card/_selectable_card.html.erb +54 -11
  25. data/app/pb_kits/playbook/pb_selectable_card/_selectable_card.jsx +53 -6
  26. data/app/pb_kits/playbook/pb_selectable_card/_selectable_card.scss +48 -9
  27. data/app/pb_kits/playbook/pb_selectable_card/docs/_selectable_card_block.jsx +41 -44
  28. data/app/pb_kits/playbook/pb_selectable_card/docs/_selectable_card_default.html.erb +2 -2
  29. data/app/pb_kits/playbook/pb_selectable_card/docs/_selectable_card_default.jsx +53 -62
  30. data/app/pb_kits/playbook/pb_selectable_card/docs/_selectable_card_image.jsx +43 -53
  31. data/app/pb_kits/playbook/pb_selectable_card/docs/_selectable_card_input.html.erb +105 -0
  32. data/app/pb_kits/playbook/pb_selectable_card/docs/_selectable_card_input.jsx +158 -0
  33. data/app/pb_kits/playbook/pb_selectable_card/docs/_selectable_card_input.md +1 -0
  34. data/app/pb_kits/playbook/pb_selectable_card/docs/_selectable_card_single_select.html.erb +2 -2
  35. data/app/pb_kits/playbook/pb_selectable_card/docs/_selectable_card_single_select.jsx +46 -53
  36. data/app/pb_kits/playbook/pb_selectable_card/docs/example.yml +2 -0
  37. data/app/pb_kits/playbook/pb_selectable_card/docs/index.js +1 -0
  38. data/app/pb_kits/playbook/pb_selectable_card/selectable_card.rb +27 -2
  39. data/app/pb_kits/playbook/pb_selectable_card_icon/_selectable_card_icon.scss +8 -8
  40. data/app/pb_kits/playbook/pb_table/docs/_table_sm.md +2 -0
  41. data/app/pb_kits/playbook/pb_typeahead/_typeahead.html.erb +1 -1
  42. data/app/pb_kits/playbook/pb_typeahead/_typeahead.jsx +6 -1
  43. data/app/pb_kits/playbook/pb_typeahead/_typeahead.scss +38 -2
  44. data/app/pb_kits/playbook/pb_typeahead/components/Control.jsx +1 -0
  45. data/app/pb_kits/playbook/pb_typeahead/components/Option.jsx +8 -3
  46. data/app/pb_kits/playbook/pb_typeahead/docs/{_typeahead_with_context_dark.html.erb → _typeahead_with_context.html.erb} +10 -2
  47. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_pills.html.erb +1 -1
  48. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_pills_async.jsx +13 -1
  49. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_pills_async_custom_options.jsx +111 -0
  50. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_pills_async_custom_options.md +1 -0
  51. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_pills_async_users.html.erb +1 -1
  52. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_pills_async_users.jsx +1 -0
  53. data/app/pb_kits/playbook/pb_typeahead/docs/example.yml +3 -2
  54. data/app/pb_kits/playbook/pb_typeahead/docs/index.js +1 -0
  55. data/app/pb_kits/playbook/pb_typeahead/typeahead.rb +2 -1
  56. data/app/pb_kits/playbook/tokens/_border_radius.scss +21 -7
  57. data/app/pb_kits/playbook/utilities/_max_width.scss +15 -0
  58. data/app/pb_kits/playbook/utilities/_spacing.scss +20 -20
  59. data/app/pb_kits/playbook/utilities/globalProps.js +7 -1
  60. data/lib/playbook.rb +11 -0
  61. data/lib/playbook/engine.rb +15 -0
  62. data/lib/playbook/props.rb +23 -1
  63. data/lib/playbook/version.rb +1 -1
  64. metadata +22 -10
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 339e7eb831a191f85cd95d143b88818216f350a78ec38992e50a90ab1b50be2b
4
- data.tar.gz: 8af38244f70df603708855cb9d470e0fa1643c0f9a0f3bfdfb25adc3fcd8add9
3
+ metadata.gz: afa113290f2904fa0ce5794378b5c8e9ee247d1a213aa5911a339277738e331d
4
+ data.tar.gz: 5be3a1822a72e60809e8bc54e777e78bc8130f4be7f776d579d2a47a2987dfd1
5
5
  SHA512:
6
- metadata.gz: 07e97af69c7e47fcd4bb457134be6f8f61cae1705924542ce55ea0f897224b48d48cd799b6fff456771e43c4abedeb5653a20842373dc2e83d40d7ecab3a1805
7
- data.tar.gz: 842d3bbbdd41bee99ccf142a5b4f64e8f3004cf303a1c5ad20b192570434f73258dc6a95c67f4a981fc0d701a7e9cf9923660cbc603a32f9a9e58628bda75c59
6
+ metadata.gz: dcdb7c84e58b1835cdefd80e7d5e8bfdd29e08a2a16a107ebba9ac66a6b3f704c0eeef5df64db523605bb5cd80167dd17c1691ee5371271ed38e692f92b0fbdc
7
+ data.tar.gz: b0570e9d26ca5cba15edeece70de4db71384a916164f773f48631c6fe4c4389016142b4dd4a8c33e41092f91f778a2a690a069ab95e200892b42b52c58cfdf75
@@ -5,6 +5,10 @@ module Playbook
5
5
  include ::Webpacker::React::Helpers
6
6
  include ::Playbook::PbKitHelper
7
7
 
8
+ def current_webpacker_instance
9
+ Playbook.webpacker
10
+ end
11
+
8
12
  def pb_rails(kit, props: {}, &block)
9
13
  super kit, props: dark_mode_props(props), &block
10
14
  end
@@ -89,3 +89,4 @@
89
89
  @import 'pb_time_stacked/time_stacked';
90
90
  @import 'pb_weekday_stacked/weekday_stacked';
91
91
  @import './utilities/spacing';
92
+ @import './utilities/max_width';
@@ -8,6 +8,7 @@ import { globalProps } from '../utilities/globalProps.js'
8
8
 
9
9
  type CardPropTypes = {
10
10
  borderNone?: boolean,
11
+ borderRadius?: "xs" | "sm" | "md" | "lg" | "xl" | "none" | "rounded",
11
12
  children: array<React.ReactNode> | React.ReactNode,
12
13
  className?: string,
13
14
  highlight?: {
@@ -62,6 +63,7 @@ const Body = (props: CardBodyProps) => {
62
63
  const Card = (props: CardPropTypes) => {
63
64
  const {
64
65
  borderNone = false,
66
+ borderRadius = 'md',
65
67
  children,
66
68
  className,
67
69
  highlight = {},
@@ -70,7 +72,7 @@ const Card = (props: CardPropTypes) => {
70
72
  padding = 'md',
71
73
  } = props
72
74
  const borderCSS = borderNone == true ? 'border_none' : ''
73
- const cardCss = buildCss('pb_card_kit', `shadow_${shadow}`, `${borderCSS}`, {
75
+ const cardCss = buildCss('pb_card_kit', `shadow_${shadow}`, `${borderCSS}`, `border_radius_${borderRadius}`, {
74
76
  selected,
75
77
  deselected: !selected,
76
78
  [`highlight_${highlight.position}`]: highlight.position,
@@ -3,6 +3,7 @@
3
3
 
4
4
  [class^=pb_card_kit] {
5
5
  @include pb_card;
6
+ overflow: auto;
6
7
 
7
8
  &[class*=_selected] {
8
9
  @include pb_card_selected;
@@ -26,7 +27,7 @@
26
27
  flex-basis: auto;
27
28
  min-height: 1px;
28
29
  border: 0;
29
- border-radius: $pb_card_header_border_radius $pb_card_header_border_radius 0px 0px;
30
+ border-radius: $pb_card_header_border_radius $pb_card_header_border_radius 0px 0px;
30
31
  @each $color_name, $color_value in $pb_card_header_colors {
31
32
  &[class*=_#{$color_name}] {
32
33
  @include pb_card_header_color($color_value);
@@ -44,7 +45,7 @@
44
45
  min-height: 1px;
45
46
  border: 0;
46
47
  }
47
-
48
+
48
49
  @each $name, $shadow in $box_shadows {
49
50
  &[class*=_#{$name}] {
50
51
  box-shadow: $shadow;
@@ -50,6 +50,12 @@ $pb_card_padding:(
50
50
  box-shadow: $shadow;
51
51
  }
52
52
  }
53
+
54
+ @each $name, $radius in $border_radius {
55
+ &[class*=_#{$name}] {
56
+ border-radius: $radius;
57
+ }
58
+ }
53
59
  }
54
60
 
55
61
  @mixin pb_card_dark {
@@ -15,6 +15,9 @@ module Playbook
15
15
  default: {}
16
16
  prop :border_none, type: Playbook::Props::Boolean,
17
17
  default: false
18
+ prop :border_radius, type: Playbook::Props::Enum,
19
+ values: %w[xs sm md lg xl none rounded],
20
+ default: "md"
18
21
 
19
22
  def classname
20
23
  generate_classname("pb_card_kit",
@@ -22,7 +25,8 @@ module Playbook
22
25
  shadow_class,
23
26
  highlight_position_class,
24
27
  highlight_color_class,
25
- border_class)
28
+ border_class,
29
+ border_radius_class)
26
30
  end
27
31
 
28
32
  def body_padding
@@ -55,6 +59,10 @@ module Playbook
55
59
  def border_class
56
60
  border_none == true ? "border_none" : nil
57
61
  end
62
+
63
+ def border_radius_class
64
+ border_radius != "md" ? "border_radius_#{border_radius}" : nil
65
+ end
58
66
  end
59
67
  end
60
68
  end
@@ -0,0 +1,53 @@
1
+ <%= pb_rails("card", props: {
2
+ border_radius: "rounded"
3
+ }) do %>
4
+ Rounded (1000px)
5
+ <% end %>
6
+
7
+ <br>
8
+
9
+ <%= pb_rails("card", props: {
10
+ border_radius: "xl"
11
+ }) do %>
12
+ Extra large (16px)
13
+ <% end %>
14
+
15
+ <br>
16
+
17
+ <%= pb_rails("card", props: {
18
+ border_radius: "lg"
19
+ }) do %>
20
+ Large (8px)
21
+ <% end %>
22
+
23
+ <br>
24
+
25
+ <%= pb_rails("card", props: {
26
+ border_radius: "md"
27
+ }) do %>
28
+ Medium (6px)
29
+ <% end %>
30
+
31
+ <br>
32
+
33
+ <%= pb_rails("card", props: {
34
+ border_radius: "sm"
35
+ }) do %>
36
+ Small (4px)
37
+ <% end %>
38
+
39
+ <br>
40
+
41
+ <%= pb_rails("card", props: {
42
+ border_radius: "xs"
43
+ }) do %>
44
+ Extra small (4px)
45
+ <% end %>
46
+
47
+ <br>
48
+
49
+ <%= pb_rails("card", props: {
50
+ border_radius: "none"
51
+ }) do %>
52
+ None
53
+ <% end %>
@@ -0,0 +1,71 @@
1
+ import React from 'react'
2
+ import Card from '../_card.jsx'
3
+
4
+ const CardLight = (props) => {
5
+ return (
6
+ <div>
7
+ <Card
8
+ borderRadius="rounded"
9
+ {...props}
10
+ >
11
+ {'Rounded (1000px)'}
12
+ </Card>
13
+
14
+ <br />
15
+
16
+ <Card
17
+ borderRadius="xl"
18
+ {...props}
19
+ >
20
+ {'Extra large (16px)'}
21
+ </Card>
22
+
23
+ <br />
24
+
25
+ <Card
26
+ borderRadius="lg"
27
+ {...props}
28
+ >
29
+ {'Large (8px)'}
30
+ </Card>
31
+
32
+ <br />
33
+
34
+ <Card
35
+ borderRadius="md"
36
+ {...props}
37
+ >
38
+ {'Medium (6px)'}
39
+ </Card>
40
+
41
+ <br />
42
+
43
+ <Card
44
+ borderRadius="sm"
45
+ {...props}
46
+ >
47
+ {'Small (4px)'}
48
+ </Card>
49
+
50
+ <br />
51
+
52
+ <Card
53
+ borderRadius="xs"
54
+ {...props}
55
+ >
56
+ {'Extra small (4px)'}
57
+ </Card>
58
+
59
+ <br />
60
+
61
+ <Card
62
+ borderRadius="none"
63
+ {...props}
64
+ >
65
+ {'None'}
66
+ </Card>
67
+ </div>
68
+ )
69
+ }
70
+
71
+ export default CardLight
@@ -0,0 +1 @@
1
+ `border_radius_md` is the card kit default
@@ -0,0 +1 @@
1
+ Card can leverage the max-width property. Learn more in our <a href="https://playbook.powerapp.cloud/visual_guidelines" target="_blank">visual guidelines.</a>
@@ -9,6 +9,7 @@ examples:
9
9
  - card_content: Content Size
10
10
  - card_separator: Separator Card
11
11
  - card_border_none: No Border
12
+ - card_border_radius: Border Radius
12
13
  react:
13
14
  - card_light: Default
14
15
  - card_highlight: Highlight Cards
@@ -19,3 +20,4 @@ examples:
19
20
  - card_content: Content Size
20
21
  - card_separator: Separator Card
21
22
  - card_border_none: No Border
23
+ - card_border_radius: Border Radius
@@ -7,3 +7,4 @@ export { default as CardShadow } from './_card_shadow.jsx'
7
7
  export { default as CardContent } from './_card_content.jsx'
8
8
  export { default as CardSeparator } from './_card_separator.jsx'
9
9
  export { default as CardBorderNone } from './_card_border_none.jsx'
10
+ export { default as CardBorderRadius } from './_card_border_radius.jsx'
@@ -28,7 +28,11 @@ const FiltersPopover = ({ children, dark, minWidth }: FiltersPopoverProps) => {
28
28
  shouldClosePopover={updateHide}
29
29
  show={!hide}
30
30
  >
31
- <div className="pb-form">{children}</div>
31
+ <div className="pb-form">
32
+ {typeof children === 'function'
33
+ ? children({ closePopover: () => (updateHide(true)) })
34
+ : children}
35
+ </div>
32
36
  </PbReactPopover>
33
37
  )
34
38
  }
@@ -0,0 +1,61 @@
1
+ import React from 'react'
2
+ import { Button, Filter, Flex, Select, TextInput } from '../../'
3
+
4
+ const FilterClosePopover = (props) => {
5
+ const options = [
6
+ { value: 'USA' },
7
+ { value: 'Canada' },
8
+ { value: 'Brazil' },
9
+ { value: 'Philippines' },
10
+ { value: 'A Galaxy Far Far Away Like Really Far Away' },
11
+ ]
12
+
13
+ return (
14
+ <Filter
15
+ {...props}
16
+ filters={{
17
+ 'Full Name': 'John Wick',
18
+ 'City': 'San Francisco',
19
+ }}
20
+ results={1}
21
+ sortOptions={{
22
+ popularity: 'Popularity',
23
+ // eslint-disable-next-line
24
+ manager_title: 'Manager\'s Title',
25
+ // eslint-disable-next-line
26
+ manager_name: 'Manager\'s Name',
27
+ }}
28
+ sortValue={[{ name: 'popularity', dir: 'desc' }]}
29
+ >
30
+ {({ closePopover }) => (
31
+ <form>
32
+ <TextInput
33
+ label="Full Name"
34
+ placeholder="Enter name"
35
+ />
36
+
37
+ <Select
38
+ blankSelection="Select One..."
39
+ label="Territory"
40
+ name="location"
41
+ options={options}
42
+ />
43
+ <Flex
44
+ spacing="between"
45
+ >
46
+ <Button
47
+ onClick={closePopover}
48
+ text="Apply"
49
+ />
50
+ <Button
51
+ text="Clear"
52
+ variant="secondary"
53
+ />
54
+ </Flex>
55
+ </form>
56
+ )}
57
+ </Filter>
58
+ )
59
+ }
60
+
61
+ export default FilterClosePopover
@@ -0,0 +1 @@
1
+ Filter can leverage the max-width property. Learn more in our <a href="https://playbook.powerapp.cloud/visual_guidelines" target="_blank">visual guidelines.</a>
@@ -17,3 +17,4 @@ examples:
17
17
  - filter_only: Filter Only
18
18
  - sort_only: Sort Only
19
19
  - filter_min_width: Min Width for Popover Inside of Filter
20
+ - filter_close_popover: Close Popover
@@ -5,3 +5,4 @@ export { default as FilterNoBackground } from './_filter_no_background.jsx'
5
5
  export { default as FilterOnly } from './_filter_only.jsx'
6
6
  export { default as SortOnly } from './_sort_only.jsx'
7
7
  export { default as FilterMinWidth } from './_filter_min_width.jsx'
8
+ export { default as FilterClosePopover } from './_filter_close_popover.jsx'
@@ -18,6 +18,8 @@ $form_pill_colors: (
18
18
  padding: 0 $space-sm/3;
19
19
  height: $pb_form_pill_height;
20
20
  border-radius: $pb_form_pill_height/2;
21
+ margin-bottom: 2px;
22
+ margin-top: 2px;
21
23
  cursor: pointer;
22
24
  @each $color_name, $color_value in $form_pill_colors {
23
25
  &[class*=_#{$color_name}] {
@@ -11,6 +11,7 @@ $image-sizes: (
11
11
 
12
12
  [class^=pb_image_kit] {
13
13
  position: relative;
14
+ object-fit: cover;
14
15
 
15
16
  @each $name, $size in $image-sizes {
16
17
  &[class*=_#{$name}] {
@@ -2,7 +2,7 @@
2
2
  <%= pb_rails("layout/body") do %>
3
3
 
4
4
  <%= pb_rails("card" ) do %>
5
- Card content
5
+ Card content
6
6
  <% end %>
7
7
  <%= pb_rails("card") do %>
8
8
  <%= pb_rails("title", props: { text: "Title 4", tag: "h4", size: 4 }) %>
@@ -26,10 +26,10 @@
26
26
  <%= pb_rails("title", props: { text: "Title 1", tag: "h1", size: 1 }) %>
27
27
  <% end %>
28
28
  <%= pb_rails("card" ) do %>
29
- Card content
29
+ Card content
30
30
  <% end %>
31
31
  <%= pb_rails("card") do %>
32
- Card content
32
+ Card content
33
33
  <% end %>
34
34
  <%= pb_rails("user", props: {
35
35
  name: "Anna Black",
@@ -40,7 +40,7 @@
40
40
  avatar_url: "https://randomuser.me/api/portraits/women/44.jpg"
41
41
  }) %>
42
42
  <%= pb_rails("card" ) do %>
43
- Card content
43
+ Card content
44
44
  <% end %>
45
45
  <%= pb_rails("card" ) do %>
46
46
  <%= pb_rails("title", props: { text: "Title 4", tag: "h4", size: 4 }) %>
@@ -0,0 +1 @@
1
+ Layout can leverage the max-width property. Learn more in our <a href="https://playbook.powerapp.cloud/visual_guidelines" target="_blank">visual guidelines.</a>
@@ -11,6 +11,7 @@
11
11
  width: 22px;
12
12
  min-width: 22px;
13
13
  height: 22px;
14
+ box-sizing: border-box;
14
15
  border-radius: 1000px;
15
16
  border: 2px solid $border_light;
16
17
  margin-right: $space_xs;
@@ -9,17 +9,60 @@
9
9
  <%= radio_button_tag(object.name, object.value, object.checked, object.additional_input_options) %>
10
10
  <% end %>
11
11
 
12
- <label for="<%= object.input_id_present %>">
13
- <% if object.children.nil? %>
14
- <%= pb_rails("body", props: { text: object.text }) %>
15
- <% else %>
16
- <%= capture(&object.children) %>
17
- <% end %>
18
- <% if object.icon %>
19
- <div class="pb_selectable_card_circle">
20
- <%= pb_rails("icon", props: { icon: "check", fixed_width: true }) %>
21
- </div>
22
- <% end %>
12
+ <label class="<%= object.label_class %>" for="<%= object.input_id_present %>">
13
+ <div class="buffer">
14
+ <% if object.variant == "display_input" %>
15
+ <%= pb_rails("flex", props: { vertical: "center" }) do %>
16
+ <%= pb_rails("flex", props: {
17
+ orientation: "column",
18
+ padding: "sm",
19
+ padding_right: "xs",
20
+ vertical: "center",
21
+ }) do %>
22
+ <%= pb_rails(object.input, props: { text: "" }) do %>
23
+ <input <%= object.is_checked %> <%= object.is_disabled %> id="checkbox-styled" name="<%= object.name %>-display" type="<%= object.input %>">
24
+ <% end %>
25
+ <% end %>
26
+ <div class="separator"></div>
27
+ <%= pb_rails("card/card_body", props: { padding: "sm" }) do %>
28
+ <% if object.children.nil? %>
29
+ <%= pb_rails("body", props: { text: object.text }) %>
30
+ <% else %>
31
+ <%= capture(&object.children) %>
32
+ <% end %>
33
+ <% end %>
34
+ <% end %>
35
+ <% else %>
36
+ <% if object.children.nil? %>
37
+ <%= pb_rails("body", props: { text: object.text }) %>
38
+ <% else %>
39
+ <%= capture(&object.children) %>
40
+ <% end %>
41
+ <% if object.icon %>
42
+ <div class="pb_selectable_card_circle">
43
+ <%= pb_rails("icon", props: { icon: "check", fixed_width: true }) %>
44
+ </div>
45
+ <% end %>
46
+ <% end %>
47
+ </div>
23
48
  </label>
24
49
 
50
+ <% if object.variant == "display_input" %>
51
+ <script>
52
+ var outerCheckbox = document.querySelector("input#<%= object.input_id || object.name %>")
53
+ var innerCheckbox = outerCheckbox.parentElement.querySelector("input#checkbox-styled")
54
+
55
+ outerCheckbox.addEventListener("change", () => {
56
+ const outerCheckbox = document.querySelector("input#<%= object.input_id || object.name %>")
57
+ const innerCheckbox = outerCheckbox.parentElement.querySelector("input#checkbox-styled")
58
+ innerCheckbox.checked = outerCheckbox.checked
59
+ })
60
+
61
+ innerCheckbox.addEventListener("change", () => {
62
+ const outerCheckbox = document.querySelector("input#<%= object.input_id || object.name %>")
63
+ const innerCheckbox = outerCheckbox.parentElement.querySelector("input#checkbox-styled")
64
+ outerCheckbox.checked = innerCheckbox.checked
65
+ })
66
+ </script>
67
+ <% end %>
25
68
  <% end %>