playbook_ui 9.10.0 → 9.14.1

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 (119) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/_playbook.scss +1 -0
  3. data/app/pb_kits/playbook/data/menu.yml +26 -22
  4. data/app/pb_kits/playbook/index.js +1 -0
  5. data/app/pb_kits/playbook/pb_background/background.rb +0 -1
  6. data/app/pb_kits/playbook/pb_badge/_badge.jsx +26 -1
  7. data/app/pb_kits/playbook/pb_badge/_badge.scss +1 -1
  8. data/app/pb_kits/playbook/pb_bread_crumbs/_bread_crumb_item.jsx +51 -0
  9. data/app/pb_kits/playbook/pb_bread_crumbs/_bread_crumbs.jsx +49 -0
  10. data/app/pb_kits/playbook/pb_bread_crumbs/_bread_crumbs.scss +55 -0
  11. data/app/pb_kits/playbook/pb_bread_crumbs/bread_crumb_item.html.erb +9 -0
  12. data/app/pb_kits/playbook/pb_bread_crumbs/bread_crumb_item.rb +12 -0
  13. data/app/pb_kits/playbook/pb_bread_crumbs/bread_crumbs.html.erb +7 -0
  14. data/app/pb_kits/playbook/pb_bread_crumbs/bread_crumbs.rb +11 -0
  15. data/app/pb_kits/playbook/pb_bread_crumbs/bread_crumbs.test.js +35 -0
  16. data/app/pb_kits/playbook/pb_bread_crumbs/docs/_bread_crumbs_default.html.erb +17 -0
  17. data/app/pb_kits/playbook/pb_bread_crumbs/docs/_bread_crumbs_default.jsx +56 -0
  18. data/app/pb_kits/playbook/pb_bread_crumbs/docs/_description.md +1 -0
  19. data/app/pb_kits/playbook/pb_bread_crumbs/docs/example.yml +7 -0
  20. data/app/pb_kits/playbook/pb_bread_crumbs/docs/index.js +1 -0
  21. data/app/pb_kits/playbook/pb_button/button.rb +1 -1
  22. data/app/pb_kits/playbook/pb_circle_chart/circle_chart.rb +9 -10
  23. data/app/pb_kits/playbook/pb_circle_icon_button/circle_icon_button.rb +4 -2
  24. data/app/pb_kits/playbook/pb_date_picker/_date_picker.jsx +6 -1
  25. data/app/pb_kits/playbook/pb_date_picker/date_picker_helper.js +3 -0
  26. data/app/pb_kits/playbook/pb_date_stacked/_date_stacked.jsx +45 -11
  27. data/app/pb_kits/playbook/pb_date_stacked/date_stacked.html.erb +17 -6
  28. data/app/pb_kits/playbook/pb_date_stacked/date_stacked.rb +18 -13
  29. data/app/pb_kits/playbook/pb_date_stacked/docs/_date_stacked_bold.html.erb +5 -0
  30. data/app/pb_kits/playbook/pb_date_stacked/docs/_date_stacked_bold.jsx +38 -0
  31. data/app/pb_kits/playbook/pb_date_stacked/docs/example.yml +3 -1
  32. data/app/pb_kits/playbook/pb_date_stacked/docs/index.js +1 -0
  33. data/app/pb_kits/playbook/pb_date_time_stacked/_date_time_stacked.jsx +32 -16
  34. data/app/pb_kits/playbook/pb_date_time_stacked/_date_time_stacked.scss +23 -4
  35. data/app/pb_kits/playbook/pb_date_time_stacked/date_time_stacked.html.erb +12 -8
  36. data/app/pb_kits/playbook/pb_date_time_stacked/date_time_stacked.rb +9 -2
  37. data/app/pb_kits/playbook/pb_date_time_stacked/date_time_stacked.test.js +35 -0
  38. data/app/pb_kits/playbook/pb_date_time_stacked/docs/_date_time_stacked_default.html.erb +8 -1
  39. data/app/pb_kits/playbook/pb_date_time_stacked/docs/_date_time_stacked_default.jsx +19 -1
  40. data/app/pb_kits/playbook/pb_dialog/dialog.test.jsx +1 -1
  41. data/app/pb_kits/playbook/pb_distribution_bar/distribution_bar.rb +2 -2
  42. data/app/pb_kits/playbook/pb_filter/filter.rb +1 -1
  43. data/app/pb_kits/playbook/pb_fixed_confirmation_toast/fixed_confirmation_toast.rb +1 -1
  44. data/app/pb_kits/playbook/pb_flex/_flex.jsx +6 -1
  45. data/app/pb_kits/playbook/pb_flex/flex.rb +4 -4
  46. data/app/pb_kits/playbook/pb_form/form.rb +1 -1
  47. data/app/pb_kits/playbook/pb_form_pill/_form_pill.jsx +12 -2
  48. data/app/pb_kits/playbook/pb_form_pill/_form_pill.scss +19 -0
  49. data/app/pb_kits/playbook/pb_form_pill/docs/_form_pill_size.html.erb +13 -0
  50. data/app/pb_kits/playbook/pb_form_pill/docs/_form_pill_size.jsx +25 -0
  51. data/app/pb_kits/playbook/pb_form_pill/docs/_form_pill_user.html.erb +4 -5
  52. data/app/pb_kits/playbook/pb_form_pill/docs/_form_pill_user.jsx +2 -6
  53. data/app/pb_kits/playbook/pb_form_pill/docs/example.yml +2 -0
  54. data/app/pb_kits/playbook/pb_form_pill/docs/index.js +1 -0
  55. data/app/pb_kits/playbook/pb_form_pill/form_pill.html.erb +1 -1
  56. data/app/pb_kits/playbook/pb_form_pill/form_pill.rb +5 -0
  57. data/app/pb_kits/playbook/pb_icon_stat_value/icon_stat_value.rb +0 -1
  58. data/app/pb_kits/playbook/pb_multiple_users_stacked/_multiple_users_stacked.scss +6 -2
  59. data/app/pb_kits/playbook/pb_passphrase/_passphrase.jsx +14 -11
  60. data/app/pb_kits/playbook/pb_passphrase/_passphrase.scss +18 -13
  61. data/app/pb_kits/playbook/pb_pill/_pill.jsx +1 -0
  62. data/app/pb_kits/playbook/pb_pill/pill.html.erb +1 -1
  63. data/app/pb_kits/playbook/pb_progress_pills/progress_pills.rb +2 -1
  64. data/app/pb_kits/playbook/pb_progress_step/progress_step.rb +1 -1
  65. data/app/pb_kits/playbook/pb_progress_step/progress_step_item.rb +1 -1
  66. data/app/pb_kits/playbook/pb_rich_text_editor/_rich_text_editor.jsx +10 -0
  67. data/app/pb_kits/playbook/pb_rich_text_editor/_rich_text_editor.scss +61 -0
  68. data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_inline.html.erb +6 -0
  69. data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_inline.jsx +16 -0
  70. data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_toolbar_bottom.html.erb +4 -0
  71. data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_toolbar_bottom.jsx +14 -0
  72. data/app/pb_kits/playbook/pb_rich_text_editor/docs/example.yml +4 -0
  73. data/app/pb_kits/playbook/pb_rich_text_editor/docs/index.js +2 -0
  74. data/app/pb_kits/playbook/pb_rich_text_editor/rich_text_editor.rb +9 -2
  75. data/app/pb_kits/playbook/pb_section_separator/_section_separator.jsx +7 -3
  76. data/app/pb_kits/playbook/pb_select/_select.jsx +5 -5
  77. data/app/pb_kits/playbook/pb_selectable_card_icon/selectable_card_icon.rb +1 -1
  78. data/app/pb_kits/playbook/pb_selectable_icon/selectable_icon.rb +1 -1
  79. data/app/pb_kits/playbook/pb_stat_change/stat_change.rb +8 -12
  80. data/app/pb_kits/playbook/pb_text_input/_text_input.jsx +83 -31
  81. data/app/pb_kits/playbook/pb_text_input/_text_input.scss +106 -0
  82. data/app/pb_kits/playbook/pb_text_input/add_on.html.erb +13 -0
  83. data/app/pb_kits/playbook/pb_text_input/add_on.rb +30 -0
  84. data/app/pb_kits/playbook/pb_text_input/docs/_text_input_add_on.html.erb +24 -0
  85. data/app/pb_kits/playbook/pb_text_input/docs/_text_input_add_on.jsx +82 -0
  86. data/app/pb_kits/playbook/pb_text_input/docs/_text_input_custom.html.erb +1 -1
  87. data/app/pb_kits/playbook/pb_text_input/docs/_text_input_inline.html.erb +5 -0
  88. data/app/pb_kits/playbook/pb_text_input/docs/_text_input_inline.jsx +22 -0
  89. data/app/pb_kits/playbook/pb_text_input/docs/example.yml +4 -0
  90. data/app/pb_kits/playbook/pb_text_input/docs/index.js +2 -0
  91. data/app/pb_kits/playbook/pb_text_input/text_input.html.erb +7 -16
  92. data/app/pb_kits/playbook/pb_text_input/text_input.rb +43 -3
  93. data/app/pb_kits/playbook/pb_time_stacked/time_stacked.html.erb +2 -2
  94. data/app/pb_kits/playbook/pb_tooltip/tooltip.rb +1 -1
  95. data/app/pb_kits/playbook/pb_typeahead/_typeahead.jsx +11 -2
  96. data/app/pb_kits/playbook/pb_typeahead/_typeahead.scss +23 -0
  97. data/app/pb_kits/playbook/pb_typeahead/components/MultiValue.jsx +23 -11
  98. data/app/pb_kits/playbook/pb_typeahead/components/Placeholder.jsx +17 -4
  99. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_createable.jsx +25 -0
  100. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_inline.html.erb +36 -0
  101. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_inline.jsx +43 -0
  102. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_multi_kit.html.erb +35 -0
  103. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_multi_kit.jsx +44 -0
  104. data/app/pb_kits/playbook/pb_typeahead/docs/example.yml +5 -0
  105. data/app/pb_kits/playbook/pb_typeahead/docs/index.js +8 -5
  106. data/app/pb_kits/playbook/pb_typeahead/typeahead.html.erb +1 -1
  107. data/app/pb_kits/playbook/pb_typeahead/typeahead.rb +18 -2
  108. data/app/pb_kits/playbook/pb_user_badge/user_badge.rb +1 -1
  109. data/lib/playbook/forms/builder/action_area.rb +2 -2
  110. data/lib/playbook/forms/builder/collection_select_field.rb +2 -2
  111. data/lib/playbook/forms/builder/select_field.rb +1 -1
  112. data/lib/playbook/kit_resolver.rb +1 -1
  113. data/lib/playbook/markdown/template_handler.rb +4 -2
  114. data/lib/playbook/pb_doc_helper.rb +4 -2
  115. data/lib/playbook/props.rb +2 -4
  116. data/lib/playbook/props/base.rb +1 -2
  117. data/lib/playbook/props/nested_props.rb +23 -0
  118. data/lib/playbook/version.rb +2 -1
  119. metadata +62 -29
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b9945857d72557eecdaac3f4cff4f8d02d7941118ea741fa43eb13a7fb8af86f
4
- data.tar.gz: 9a8c82315215fce86c9b34e6418f9a44a4656d7afebc2a0e15a2ec94ba4fdf0b
3
+ metadata.gz: ac52100757b7a77673deacf90cb3c92c2c53e36611bea82739556081a7351f7a
4
+ data.tar.gz: 5cbd39cfdc2c35ee0002a908b2464b29461161a5f366861d733c0d998eea4b9a
5
5
  SHA512:
6
- metadata.gz: f2da5e8f1f95b18fd53919a99c18ff28e2039eb5dd2cb1ce30939db84f1abf46358279a63993e71eb5c2151bfb3812797b49984fab77537ffe5cdf82bc9623d7
7
- data.tar.gz: cf5b9ff8408fb77863c81bb1ddaf4668835f5a97cd926729e743c6845e3c4a283c7148355186c24dcbfb2316b5d0800ef0ada9747387a112828701f27bfef32f
6
+ metadata.gz: 05a9cc1143df406e74845f19004c58c6db3a931f1a9295447930dc9376f17f4c17e81df3795e23308ac7d901b116d847462bc44666ca89b4178d8ed521260a10
7
+ data.tar.gz: 210590e03979d8be499c4f1596f47c9dca835b380efd6a9cfb1b643ebb84c6b7dc921f219e7fb2dce298c1b87591a1cc012c9f3546018778b9a0b1ab8644c3aa
@@ -1,6 +1,7 @@
1
1
  @import 'tokens/fonts';
2
2
  @import 'pb_background/background';
3
3
  @import 'pb_body/body';
4
+ @import 'pb_bread_crumbs/bread_crumbs';
4
5
  @import 'pb_button/button';
5
6
  @import 'pb_button_toolbar/button_toolbar';
6
7
  @import 'pb_caption/caption';
@@ -1,7 +1,12 @@
1
1
  kits:
2
- - avatar
3
- - avatar_action_button
2
+ - avatars:
3
+ - avatar
4
+ - avatar_action_button
5
+ - multiple_users
6
+ - multiple_users_stacked
7
+ - user
4
8
  - background
9
+ - bread_crumbs
5
10
  - buttons:
6
11
  - button
7
12
  - button_toolbar
@@ -18,7 +23,6 @@ kits:
18
23
  - dialog
19
24
  - filter
20
25
  - fixed_confirmation_toast
21
- - flex
22
26
  - forms:
23
27
  - checkbox
24
28
  - date_picker
@@ -36,19 +40,19 @@ kits:
36
40
  - selectable_list
37
41
  - text_input
38
42
  - textarea
39
- - typeahead
40
43
  - toggle
44
+ - typeahead
41
45
  - highlight
42
46
  - icon
43
47
  - icon_circle
44
48
  - icon_stat_value
45
49
  - icon_value
46
50
  - image
47
- - layout
51
+ - layouts:
52
+ - flex
53
+ - layout
48
54
  - list
49
55
  - loading_inline
50
- - multiple_users
51
- - multiple_users_stacked
52
56
  - nav
53
57
  - tags:
54
58
  - badge
@@ -60,11 +64,22 @@ kits:
60
64
  - progress_simple
61
65
  - progress_step
62
66
  - section_separator
63
- - source
64
67
  - star_rating
65
- - stat_change
66
68
  - table
67
69
  - timeline
70
+ - time_and_date:
71
+ - date
72
+ - date_range_inline
73
+ - date_range_stacked
74
+ - date_stacked
75
+ - date_time
76
+ - date_time_stacked
77
+ - date_year_stacked
78
+ - time
79
+ - time_range_inline
80
+ - time_stacked
81
+ - timestamp
82
+ - weekday_stacked
68
83
  - tooltip
69
84
  - typography:
70
85
  - body
@@ -74,26 +89,15 @@ kits:
74
89
  - contact
75
90
  - currency
76
91
  - dashboard_value
77
- - date
78
- - date_range_inline
79
- - date_range_stacked
80
- - date_stacked
81
- - date_time
82
- - date_time_stacked
83
- - date_year_stacked
84
92
  - home_address_street
85
93
  - label_pill
86
94
  - label_value
87
95
  - message
88
96
  - person
89
97
  - person_contact
98
+ - source
99
+ - stat_change
90
100
  - stat_value
91
- - time
92
- - time_stacked
93
- - timestamp
94
- - time_range_inline
95
101
  - title_count
96
102
  - title_detail
97
- - weekday_stacked
98
- - user
99
103
  - user_badge
@@ -10,6 +10,7 @@ export Background from './pb_background/_background.jsx'
10
10
  export Badge from './pb_badge/_badge.jsx'
11
11
  export BarGraph from './pb_bar_graph/_bar_graph.jsx'
12
12
  export Body from './pb_body/_body.jsx'
13
+ export BreadCrumbs from './pb_bread_crumbs/_bread_crumbs.jsx'
13
14
  export Button from './pb_button/_button.jsx'
14
15
  export ButtonToolbar from './pb_button_toolbar/_button_toolbar.jsx'
15
16
  export Caption from './pb_caption/_caption.jsx'
@@ -12,7 +12,6 @@ module Playbook
12
12
  values: %w[h1 h2 h3 h4 h5 h6 p div span],
13
13
  default: "div"
14
14
 
15
-
16
15
  def classname
17
16
  generate_classname("pb_background_kit", image_classname, background_color_classname, separator: " ")
18
17
  end
@@ -3,6 +3,7 @@
3
3
  import React from 'react'
4
4
  import classnames from 'classnames'
5
5
  import { globalProps } from '../utilities/globalProps.js'
6
+ import { Icon } from '../'
6
7
 
7
8
  import {
8
9
  buildAriaProps,
@@ -13,8 +14,15 @@ import {
13
14
  type BadgeProps = {
14
15
  aria?: object,
15
16
  className?: string,
17
+ closeProps?: {
18
+ onClick?: EventHandler,
19
+ onMouseDown?: EventHandler,
20
+ onTouchEnd?: EventHandler,
21
+ },
16
22
  data?: object,
17
23
  id?: string,
24
+ removeIcon?: Boolean,
25
+ removeOnClick?: EventHandler,
18
26
  rounded?: boolean,
19
27
  text?: string,
20
28
  variant?: "error" | "info" | "neutral" | "primary" | "success" | "warning",
@@ -23,8 +31,11 @@ const Badge = (props: BadgeProps) => {
23
31
  const {
24
32
  aria = {},
25
33
  className,
34
+ closeProps = {},
26
35
  data = {},
27
36
  id,
37
+ removeIcon = false,
38
+ removeOnClick = () => {},
28
39
  rounded = false,
29
40
  text,
30
41
  variant = 'neutral',
@@ -44,7 +55,21 @@ const Badge = (props: BadgeProps) => {
44
55
  className={css}
45
56
  id={id}
46
57
  >
47
- <span>{text}</span>
58
+ <span>
59
+ {text}
60
+ <If condition={removeIcon}>
61
+ <span
62
+ onClick={removeOnClick}
63
+ style={{ cursor: 'pointer' }}
64
+ {...closeProps}
65
+ >
66
+ <Icon
67
+ fixedWidth
68
+ icon="times"
69
+ />
70
+ </span>
71
+ </If>
72
+ </span>
48
73
  </div>
49
74
  )
50
75
  }
@@ -15,9 +15,9 @@
15
15
  border-width: 1px;
16
16
  border-style: solid;
17
17
  border-color: $card_light;
18
+ white-space: nowrap;
18
19
 
19
20
  span {
20
- transform: translateY(1px);
21
21
  display: inline-block;
22
22
  font-size: $font_smaller - 1;
23
23
  font-weight: $bolder;
@@ -0,0 +1,51 @@
1
+ /* @flow */
2
+
3
+ import React from 'react'
4
+ import classnames from 'classnames'
5
+ import { globalProps } from '../utilities/globalProps.js'
6
+
7
+ import {
8
+ buildAriaProps,
9
+ buildCss,
10
+ buildDataProps,
11
+ } from '../utilities/props'
12
+
13
+ type BreadCrumbItemProps = {
14
+ aria?: object,
15
+ className?: string,
16
+ data?: object,
17
+ id?: string,
18
+ component?: element
19
+ }
20
+ const BreadCrumbItem = (props: BreadCrumbItemProps) => {
21
+ const {
22
+ aria = {},
23
+ className,
24
+ data = {},
25
+ id,
26
+ component = 'a',
27
+ ...rest
28
+ } = props
29
+ const ariaProps = buildAriaProps(aria)
30
+ const dataProps = buildDataProps(data)
31
+ const css = classnames(
32
+ buildCss('pb_bread_crumb_item_kit'),
33
+ globalProps(props),
34
+ className
35
+ )
36
+ const Component = component || 'span'
37
+ return (
38
+ <div
39
+ {...ariaProps}
40
+ {...dataProps}
41
+ className={css}
42
+ id={id}
43
+ >
44
+ <Component
45
+ className="pb_bread_crumb_item"
46
+ {...rest}
47
+ />
48
+ </div>
49
+ )
50
+ }
51
+ export default BreadCrumbItem
@@ -0,0 +1,49 @@
1
+ /* @flow */
2
+
3
+ import React from 'react'
4
+ import classnames from 'classnames'
5
+ import { globalProps } from '../utilities/globalProps.js'
6
+
7
+ import {
8
+ buildAriaProps,
9
+ buildCss,
10
+ buildDataProps,
11
+ } from '../utilities/props'
12
+
13
+ type BreadCrumbsProps = {
14
+ aria?: object,
15
+ className?: string,
16
+ data?: object,
17
+ id?: string,
18
+ text?: string,
19
+ children?: node
20
+ }
21
+ const BreadCrumbs = (props: BreadCrumbsProps) => {
22
+ const {
23
+ aria = { label: 'Breadcrumb Navigation' },
24
+ className,
25
+ data = {},
26
+ id,
27
+ children,
28
+ } = props
29
+ const ariaProps = buildAriaProps(aria)
30
+ const dataProps = buildDataProps(data)
31
+ const css = classnames(
32
+ buildCss('pb_bread_crumbs_kit'),
33
+ globalProps(props),
34
+ className
35
+ )
36
+
37
+ return (
38
+ <nav
39
+ {...ariaProps}
40
+ {...dataProps}
41
+ className={css}
42
+ id={id}
43
+ >
44
+ {children}
45
+ </nav>
46
+ )
47
+ }
48
+
49
+ export default BreadCrumbs
@@ -0,0 +1,55 @@
1
+ @import "../tokens/border_radius";
2
+ @import "../tokens/colors";
3
+ @import "../tokens/opacity";
4
+ @import "../tokens/spacing";
5
+ @import "../tokens/typography";
6
+
7
+ [class^=pb_bread_crumbs_kit] {
8
+ $pb_badge_height: 18px;
9
+
10
+ display: inline-flex;
11
+ align-items: center;
12
+ justify-content: center;
13
+ border-radius: $border_rad_light;
14
+ padding: 0 $space_xs/2;
15
+ border-width: 1px;
16
+ border-style: solid;
17
+ border-color: $card_light;
18
+
19
+ svg {
20
+ margin-right: 8px;
21
+ }
22
+ .pb_bread_crumb_item {
23
+ display: flex;
24
+ flex-direction: row;
25
+ align-items: center;
26
+
27
+ }
28
+ .pb_bread_crumb_item_kit {
29
+ display: flex;
30
+ flex-direction: row;
31
+ align-items: center;
32
+ }
33
+ .pb_bread_crumb_item_kit:not(:last-child):after {
34
+ content: '/';
35
+ padding-left: 8px;
36
+ padding-right: 8px;
37
+ }
38
+
39
+ @each $color_name, $color_value in $status_colors {
40
+ &[class*=_#{$color_name}] {
41
+ background: rgba($color_value, $opacity_1);
42
+ color: map-get($status_color_text, $color_name);
43
+ }
44
+ }
45
+
46
+ &.dark {
47
+ border-width: 0;
48
+
49
+ @each $color_name, $color_value in $status_colors {
50
+ &[class*=_#{$color_name}] {
51
+ background: rgba(mix($bg_dark, $color_value, 10%), $opacity_2);
52
+ }
53
+ }
54
+ }
55
+ }
@@ -0,0 +1,9 @@
1
+ <%= content_tag(:div,
2
+ id: object.id,
3
+ data: object.data,
4
+ class: object.classname,
5
+ aria: object.aria) do%>
6
+ <%= content_tag(object.link ? 'a' : 'span', class: 'bread_crumb_item', href: object.link) do %>
7
+ <%= content.presence %>
8
+ <% end %>
9
+ <%end%>
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Playbook
4
+ module PbBreadCrumbs
5
+ class BreadCrumbItem < Playbook::KitBase
6
+ prop :link, type: Playbook::Props::String
7
+ def classname
8
+ generate_classname("pb_bread_crumb_item_kit")
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,7 @@
1
+ <%= content_tag(:nav,
2
+ aria: object.aria,
3
+ id: object.id,
4
+ data: object.data,
5
+ class: object.classname) do %>
6
+ <%= content.presence %>
7
+ <% end %>
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Playbook
4
+ module PbBreadCrumbs
5
+ class BreadCrumbs < Playbook::KitBase
6
+ def classname
7
+ generate_classname("pb_bread_crumbs_kit")
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,35 @@
1
+ import React from 'react'
2
+ import { render, screen } from '../utilities/test-utils'
3
+ import BreadCrumbs from './_bread_crumbs'
4
+ import BreadCrumbItem from './_bread_crumb_item'
5
+ import { Icon, Title } from '../'
6
+
7
+ it('should render bread crumbs', () => {
8
+ const testId = 'breadCrumbs'
9
+ render(
10
+ <BreadCrumbs
11
+ data={{ testid: testId }}
12
+ name={name}
13
+ >
14
+ <Icon
15
+ icon="home"
16
+ size="1x"
17
+ />
18
+ <BreadCrumbItem
19
+ dark
20
+ href="/home"
21
+ >
22
+ <Title
23
+ size="4"
24
+ tag="span"
25
+ text="Home"
26
+ />
27
+ </BreadCrumbItem>
28
+ </BreadCrumbs>
29
+ )
30
+ const kit = screen.getByTestId(testId)
31
+ const label = screen.getByText('Home')
32
+
33
+ expect(kit).toHaveClass('pb_bread_crumbs_kit')
34
+ expect(label).toHaveTextContent('Home')
35
+ })