playbook_ui 7.13.0 → 7.14.0

Sign up to get free protection for your applications and to get access to all the features.
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 %>