playbook_ui 12.20.0 → 12.21.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 86c4aefb2ca62f0357facbacd990e8ef9283fe061b307b2b3a48d9a44aae93bd
4
- data.tar.gz: d46b8bcadd416bed1be375a1a60789b9e82ed3998a7e94d511f183a887e13654
3
+ metadata.gz: 1649557cda106585da9087061c3e7e8017578aed64a96820b78ff08ae29b357a
4
+ data.tar.gz: 7969b004419abdc3a207667de30b50439a42559d00ad1c9144755074932aa2e7
5
5
  SHA512:
6
- metadata.gz: 9f016eb2b9946595c6bc70b9b48bd7faffe5249084040bc5a0046fa4b9c08fb006a245c5b570a296bc130795b1e510701a0e765c0018ca66dd322bf56619ea96
7
- data.tar.gz: e08f975d11599e129cf94ce4f4c91f965708fe984565e46538f8dd254577bee99e59cc26d2d8c51948bbcc3488ccf61d7be997ae9ffd3a60ac23e9ea0a616727
6
+ metadata.gz: cad804b80ced6b0f966c72f7e35a02e782898b03ed8b789120ac8662f6c88c293f63f4b5cc5970916bc91aa0be3a182d42d17e365c79ca07b4f5500edf3aa348
7
+ data.tar.gz: f8abc54b2526773eb5bdb0244f157a23f27cda78ea88029b59261c4d58938761b0d9eaa9cadce84ea31ffafc23c9a8ff6cb5c09914dcf294b9a74664ab6bddd7
@@ -15,31 +15,56 @@
15
15
  <div id="code-wrapper">
16
16
  <div class="pb--codeControls">
17
17
  <ul>
18
- <% if type == "rails" %>
18
+ <% hide_button = type == "rails" ? 'flex' : 'none' %>
19
19
  <li>
20
- <a href="#" id="copy-<%= example_key %>-trigger" onclick="copyOnClick(`<%= example_html %>`, `copy-<%= example_key %>`)">
21
- Copy HTML
22
- </a>
20
+ <%= pb_rails("button", props: { id:"copy-html-#{example_key}", icon: "copy", text: "Copy HTML", variant: "link", size: "sm", display: hide_button }) %>
23
21
  </li>
24
- <% end %>
25
22
  <li>
26
- <a href="#" id="toggle-open" data-toggle="code_example">Code Example</a>
23
+ <%= pb_rails("button", props: { icon: "code", id:"toggle-open-opened", text: "Close Code", variant: "link", size: "sm", display: "none" }) %>
24
+ <%= pb_rails("button", props: { icon: "code", id:"toggle-open-closed", text: "Show Code", variant: "link", size: "sm" }) %>
27
25
  </li>
28
26
  </ul>
29
27
  </div>
30
28
  <div class="pb--codeCopy" data-action="toggle" data-togglable="code_example" style="display: none" >
31
29
  <%= pb_rails("section_separator", props: { dark: dark })%>
32
- <a href="#" id="toggle-close" data-toggle="false" class="pb--close-toggle">Close</a>
30
+ <a href="#" style="padding: 16px 0px 22px 0px;" id="copy-code-<%= example_key %>" class="pb--copy-code" onclick="copyOnClick(`<%= source %>`, `copy-code-<%= example_key %>`)">
31
+ <%= pb_rails("button", props: { id: "copy-button-#{example_key}", text: "Copy Code", size: "sm", icon: "copy" }) %>
32
+ </a>
33
33
  <pre class="highlight"><%= raw rouge(source, highlighter) %></pre>
34
34
  </div>
35
+ <%= pb_rails("popover", props: {
36
+ trigger_element_id: "copy-button-#{example_key}",
37
+ tooltip_id: "tooltip-#{example_key}",
38
+ offset: true,
39
+ position: "bottom"
40
+ }) do %>
41
+ Code Copied
42
+ <% end %>
35
43
  </div>
36
44
  <% end %>
37
45
  <% end %>
38
46
 
39
47
  <script>
40
- function copyOnClick(content, elementID) {
41
- copyContent(content)
42
- }
43
-
48
+ var htmlButton = document.getElementById('<%= "copy-html-#{example_key}" %>')
49
+ htmlButton.addEventListener('click', function() {
50
+ var tempElement = document.createElement('div')
51
+ tempElement.innerHTML = `<%= example_html %>`
52
+ var decodedString = tempElement.textContent || tempElement.innerText;
53
+ copyContent(decodedString)
54
+ })
55
+
56
+ var button = document.getElementById('<%= "copy-button-#{example_key}" %>')
57
+ button.addEventListener('click', function() {
58
+ var tempElement = document.createElement('div')
59
+ tempElement.innerHTML = `<%= source %>`
60
+ var decodedString = tempElement.textContent || tempElement.innerText;
61
+ copyContent(decodedString)
62
+ var fadeAwayDiv = document.getElementById("<%= "tooltip-#{example_key}" %>")
63
+ setTimeout(function() {
64
+ fadeAwayDiv.classList.remove('show')
65
+ }, 3000)
66
+ setTimeout(function() {
67
+ fadeAwayDiv.classList.add('hide')
68
+ }, 3001)
69
+ })
44
70
  </script>
45
-
@@ -3,57 +3,99 @@
3
3
  @import "../tokens/border_radius";
4
4
  @import "../tokens/shadows";
5
5
  @import "../tokens/spacing";
6
+ @import "../tokens/typography";
7
+ @import "../tokens/line_height";
6
8
 
7
9
  .pb_multi_level_select {
10
+ font-family: $font-family-base;
11
+
12
+ .search {
13
+ font-family: $font-family-base;
14
+ }
15
+
8
16
  .dropdown {
9
17
  width: 100%;
10
18
  .search {
11
19
  border-bottom: none;
12
20
  }
13
21
 
22
+ .toggle {
23
+ padding: 0px $space_xs + 1;
24
+ }
25
+ .node.tree {
26
+ display: flex;
27
+ align-items: center;
28
+ }
29
+
30
+ .node-label {
31
+ line-height: $lh_tight;
32
+ color: $text_lt_default;
33
+ font-size: $text_default;
34
+ font-weight: $regular;
35
+ font-family: $font-family-base;
36
+ }
37
+
38
+ .checkbox-item {
39
+ height: $space_sm;
40
+ width: $space_sm;
41
+ }
42
+
14
43
  .toggle.expanded:after {
15
44
  border-style: solid;
16
45
  border-width: 0.1em 0.1em 0 0;
17
46
  content: "";
18
47
  display: inline-block;
19
- height: 0.6em;
20
- left: 0.1em;
48
+ height: 0.8em;
21
49
  position: relative;
22
50
  vertical-align: top;
23
- width: 0.6em;
24
- top: 10px;
51
+ width: 0.8em;
52
+ top: 7px;
25
53
  transform: rotate(135deg);
26
54
  font-size: 0.5em;
27
55
  }
56
+ .toggle.expanded:hover {
57
+ background-color: rgba(0, 86, 207, 0.1);
58
+ border-radius: $border_radius_rounded;
59
+ &::after {
60
+ color: $primary;
61
+ }
62
+ }
28
63
  .toggle.collapsed:after {
29
64
  border-style: solid;
30
65
  border-width: 0.1em 0.1em 0 0;
31
66
  content: "";
32
67
  display: inline-block;
33
- height: 0.6em;
34
- left: 0.1em;
68
+ height: 0.8em;
69
+ right: 0.1em;
35
70
  position: relative;
36
71
  vertical-align: top;
37
- width: 0.6em;
38
- top: 10px;
72
+ width: 0.8em;
73
+ top: 7px;
39
74
  font-size: 0.5em;
40
-
41
75
  transform: rotate(45deg);
42
- top: 12px;
76
+ top: 9px;
77
+ }
78
+
79
+ .toggle.collapsed:hover {
80
+ background-color: rgba(0, 86, 207, 0.1);
81
+ border-radius: $border_radius_rounded;
82
+ &::after {
83
+ color: $primary;
84
+ }
43
85
  }
44
86
 
45
87
  .tag {
46
- height: 37px;
88
+ height: fit-content;
47
89
  display: inline-flex;
48
90
  justify-content: center;
49
91
  align-items: center;
50
- padding: 0 $space_xxs 0 $space_xs;
51
- border-radius: 18px;
92
+ padding: $space_xxs $space_xxs $space_xxs $space_xs;
93
+ border-radius: $border_radius_xl + 2;
52
94
  background-color: rgba($primary, 0.1);
53
95
  color: $primary;
54
96
  border: none;
55
- font-size: 16px;
56
- font-weight: 700;
97
+ font-size: $font_smaller;
98
+ font-weight: $bolder;
57
99
 
58
100
  .tag-remove {
59
101
  color: $primary;
@@ -1,17 +1,15 @@
1
- /* @flow */
2
1
  import React from 'react'
3
2
  import classnames from 'classnames'
4
3
  import { buildAriaProps, buildCss, buildDataProps } from '../utilities/props'
5
4
  import { globalProps } from '../utilities/globalProps'
6
- import Veteran from './badges/veteran.jsx';
7
- import MillionDollar from './badges/million-dollar.jsx';
8
-
5
+ import Veteran from './badges/veteran'
6
+ import MillionDollar from './badges/million-dollar';
9
7
 
10
8
  type UserBadgeProps = {
11
- aria?: object,
9
+ aria?: {[key: string]: string},
12
10
  badge?: "million-dollar" | "veteran",
13
11
  className?: string,
14
- data?: object,
12
+ data?: {[key: string]: string},
15
13
  id?: string,
16
14
  size?: "sm" | "md" | "lg",
17
15
  }
@@ -37,10 +35,10 @@ const UserBadge = (props: UserBadgeProps) => {
37
35
 
38
36
  return (
39
37
  <div
40
- {...ariaProps}
41
- {...dataProps}
42
- className={classes}
43
- id={id}
38
+ {...ariaProps}
39
+ {...dataProps}
40
+ className={classes}
41
+ id={id}
44
42
  >
45
43
  <div className="pb_user_badge_wrapper">
46
44
  {image}
@@ -48,4 +46,5 @@ const UserBadge = (props: UserBadgeProps) => {
48
46
  </div>
49
47
  )
50
48
  }
49
+
51
50
  export default UserBadge
@@ -0,0 +1,358 @@
1
+ import * as React from "react"
2
+
3
+ const MillionDollar = () => (
4
+ <svg
5
+ viewBox="0 0 242.9 242.9"
6
+ xmlSpace="preserve"
7
+ xmlns="http://www.w3.org/2000/svg"
8
+ >
9
+ <circle cx={121.5}
10
+ cy={121.5}
11
+ r={121.5}
12
+ />
13
+ <linearGradient
14
+ gradientUnits="userSpaceOnUse"
15
+ id="a"
16
+ x1={42.483}
17
+ x2={200.309}
18
+ y1={35.645}
19
+ y2={35.645}
20
+ >
21
+ <stop
22
+ offset={0}
23
+ style={{
24
+ stopColor: "#e6b711",
25
+ }}
26
+ />
27
+ <stop
28
+ offset={0.128}
29
+ style={{
30
+ stopColor: "#eac23c",
31
+ }}
32
+ />
33
+ <stop
34
+ offset={0.278}
35
+ style={{
36
+ stopColor: "#ec6",
37
+ }}
38
+ />
39
+ <stop
40
+ offset={0.413}
41
+ style={{
42
+ stopColor: "#f1d485",
43
+ }}
44
+ />
45
+ <stop
46
+ offset={0.527}
47
+ style={{
48
+ stopColor: "#f2d998",
49
+ }}
50
+ />
51
+ <stop
52
+ offset={0.607}
53
+ style={{
54
+ stopColor: "#f3db9f",
55
+ }}
56
+ />
57
+ <stop
58
+ offset={1}
59
+ style={{
60
+ stopColor: "#e6b711",
61
+ }}
62
+ />
63
+ </linearGradient>
64
+ <path
65
+ d="M56.4 53.8c16.9-16.2 39.8-26.2 65-26.2 25.2 0 48.1 10 64.9 26.2h14c-19.1-22.2-47.4-36.3-78.9-36.3-31.5 0-59.8 14.1-78.9 36.3h13.9z"
66
+ style={{
67
+ fill: "url(#a)",
68
+ }}
69
+ />
70
+ <linearGradient
71
+ gradientUnits="userSpaceOnUse"
72
+ id="b"
73
+ x1={17.407}
74
+ x2={44.897}
75
+ y1={132.179}
76
+ y2={132.179}
77
+ >
78
+ <stop
79
+ offset={0}
80
+ style={{
81
+ stopColor: "#e6b711",
82
+ }}
83
+ />
84
+ <stop
85
+ offset={0.128}
86
+ style={{
87
+ stopColor: "#eac23c",
88
+ }}
89
+ />
90
+ <stop
91
+ offset={0.278}
92
+ style={{
93
+ stopColor: "#ec6",
94
+ }}
95
+ />
96
+ <stop
97
+ offset={0.413}
98
+ style={{
99
+ stopColor: "#f1d485",
100
+ }}
101
+ />
102
+ <stop
103
+ offset={0.527}
104
+ style={{
105
+ stopColor: "#f2d998",
106
+ }}
107
+ />
108
+ <stop
109
+ offset={0.607}
110
+ style={{
111
+ stopColor: "#f3db9f",
112
+ }}
113
+ />
114
+ <stop
115
+ offset={1}
116
+ style={{
117
+ stopColor: "#e6b711",
118
+ }}
119
+ />
120
+ </linearGradient>
121
+ <path
122
+ d="M44.9 175.7c-10.9-15.3-17.3-34-17.3-54.2 0-14.1 3.1-27.5 8.8-39.5H25.3c-5 12.2-7.8 25.5-7.8 39.5 0 22.7 7.3 43.8 19.8 60.9l7.6-6.7z"
123
+ style={{
124
+ fill: "url(#b)",
125
+ }}
126
+ />
127
+ <linearGradient
128
+ gradientUnits="userSpaceOnUse"
129
+ id="c"
130
+ x1={52.914}
131
+ x2={189.715}
132
+ y1={212.573}
133
+ y2={212.573}
134
+ >
135
+ <stop
136
+ offset={0}
137
+ style={{
138
+ stopColor: "#e6b711",
139
+ }}
140
+ />
141
+ <stop
142
+ offset={0.128}
143
+ style={{
144
+ stopColor: "#eac23c",
145
+ }}
146
+ />
147
+ <stop
148
+ offset={0.278}
149
+ style={{
150
+ stopColor: "#ec6",
151
+ }}
152
+ />
153
+ <stop
154
+ offset={0.413}
155
+ style={{
156
+ stopColor: "#f1d485",
157
+ }}
158
+ />
159
+ <stop
160
+ offset={0.527}
161
+ style={{
162
+ stopColor: "#f2d998",
163
+ }}
164
+ />
165
+ <stop
166
+ offset={0.607}
167
+ style={{
168
+ stopColor: "#f3db9f",
169
+ }}
170
+ />
171
+ <stop
172
+ offset={1}
173
+ style={{
174
+ stopColor: "#e6b711",
175
+ }}
176
+ />
177
+ </linearGradient>
178
+ <path
179
+ d="M173 199.8c-14.8 9.8-32.5 15.5-51.6 15.5s-37-5.8-51.8-15.6H52.9c18.3 16.1 42.3 25.8 68.5 25.8 26.1 0 50-9.7 68.3-25.7H173z"
180
+ style={{
181
+ fill: "url(#c)",
182
+ }}
183
+ />
184
+ <linearGradient
185
+ gradientUnits="userSpaceOnUse"
186
+ id="d"
187
+ x1={31.123}
188
+ x2={207.766}
189
+ y1={136.159}
190
+ y2={136.159}
191
+ >
192
+ <stop
193
+ offset={0}
194
+ style={{
195
+ stopColor: "#e6b711",
196
+ }}
197
+ />
198
+ <stop
199
+ offset={0.128}
200
+ style={{
201
+ stopColor: "#eac23c",
202
+ }}
203
+ />
204
+ <stop
205
+ offset={0.278}
206
+ style={{
207
+ stopColor: "#ec6",
208
+ }}
209
+ />
210
+ <stop
211
+ offset={0.413}
212
+ style={{
213
+ stopColor: "#f1d485",
214
+ }}
215
+ />
216
+ <stop
217
+ offset={0.527}
218
+ style={{
219
+ stopColor: "#f2d998",
220
+ }}
221
+ />
222
+ <stop
223
+ offset={0.607}
224
+ style={{
225
+ stopColor: "#f3db9f",
226
+ }}
227
+ />
228
+ <stop
229
+ offset={1}
230
+ style={{
231
+ stopColor: "#e6b711",
232
+ }}
233
+ />
234
+ </linearGradient>
235
+ <path
236
+ d="M139.2 193v-1.8c5-.4 10.2-.5 13.4-5 3.8-5.2 3.2-15.4 3.2-21.5V78.5l-47.3 120.4L61.2 81.2v61.1c0 13.6.5 35.1 12.5 44.2 4.3 3.2 9 3.9 14.2 4.7v1.8H31.1v-1.8c1.6-.4 3.2-.7 4.8-1.1 22.6-5.7 22.9-32.4 22.9-51.1v-37.8c0-6.1.5-13.3-3.2-18.5-4.5-6.1-13.4-7.2-20.4-7.5v-1.8H96l29.6 75.4 29.9-75.4h52.3v1.8c-4.8.4-10.2.9-13.4 5-3.8 4.8-3.2 15.9-3.2 21.9v62.5c0 6.3-.7 16.1 3.2 21.5 3.2 4.3 6.2 4.7 11.2 5v1.8h-66.4z"
237
+ style={{
238
+ fill: "url(#d)",
239
+ }}
240
+ />
241
+ <linearGradient
242
+ gradientUnits="userSpaceOnUse"
243
+ id="e"
244
+ x1={30.453}
245
+ x2={213.794}
246
+ y1={63.629}
247
+ y2={63.629}
248
+ >
249
+ <stop
250
+ offset={0}
251
+ style={{
252
+ stopColor: "#e6b711",
253
+ }}
254
+ />
255
+ <stop
256
+ offset={0.128}
257
+ style={{
258
+ stopColor: "#eac23c",
259
+ }}
260
+ />
261
+ <stop
262
+ offset={0.278}
263
+ style={{
264
+ stopColor: "#ec6",
265
+ }}
266
+ />
267
+ <stop
268
+ offset={0.413}
269
+ style={{
270
+ stopColor: "#f1d485",
271
+ }}
272
+ />
273
+ <stop
274
+ offset={0.527}
275
+ style={{
276
+ stopColor: "#f2d998",
277
+ }}
278
+ />
279
+ <stop
280
+ offset={0.607}
281
+ style={{
282
+ stopColor: "#f3db9f",
283
+ }}
284
+ />
285
+ <stop
286
+ offset={1}
287
+ style={{
288
+ stopColor: "#e6b711",
289
+ }}
290
+ />
291
+ </linearGradient>
292
+ <path
293
+ d="M30.5 60.6h183.3v6.1H30.5z"
294
+ style={{
295
+ fill: "url(#e)",
296
+ }}
297
+ />
298
+ <linearGradient
299
+ gradientUnits="userSpaceOnUse"
300
+ id="f"
301
+ x1={196.676}
302
+ x2={225.538}
303
+ y1={132.923}
304
+ y2={132.923}
305
+ >
306
+ <stop
307
+ offset={0}
308
+ style={{
309
+ stopColor: "#e6b711",
310
+ }}
311
+ />
312
+ <stop
313
+ offset={0.128}
314
+ style={{
315
+ stopColor: "#eac23c",
316
+ }}
317
+ />
318
+ <stop
319
+ offset={0.278}
320
+ style={{
321
+ stopColor: "#ec6",
322
+ }}
323
+ />
324
+ <stop
325
+ offset={0.413}
326
+ style={{
327
+ stopColor: "#f1d485",
328
+ }}
329
+ />
330
+ <stop
331
+ offset={0.527}
332
+ style={{
333
+ stopColor: "#f2d998",
334
+ }}
335
+ />
336
+ <stop
337
+ offset={0.607}
338
+ style={{
339
+ stopColor: "#f3db9f",
340
+ }}
341
+ />
342
+ <stop
343
+ offset={1}
344
+ style={{
345
+ stopColor: "#e6b711",
346
+ }}
347
+ />
348
+ </linearGradient>
349
+ <path
350
+ d="M196.7 177.5c11.5-15.6 18.7-35.2 18.7-56 0-14.1-3.1-27.5-8.8-39.5h11.1c5 12.2 7.8 25.5 7.8 39.5 0 23.4-7.8 45-20.9 62.4l-7.9-6.4z"
351
+ style={{
352
+ fill: "url(#f)",
353
+ }}
354
+ />
355
+ </svg>
356
+ )
357
+
358
+ export default MillionDollar
@@ -0,0 +1,27 @@
1
+ import * as React from "react"
2
+
3
+ const Veteran = () => (
4
+ <svg
5
+ viewBox="0 0 200 250"
6
+ xmlSpace="preserve"
7
+ xmlns="http://www.w3.org/2000/svg"
8
+ >
9
+ <path
10
+ d="M198.4 71.5V71c-.2-1.2-1.4-2.1-1.4-2.1L103.2 2.7c-.7-.4-1-.6-1.6-.6-1.3 0-2.3 1-2.3 2.3v67.1h-.6v29.6h99.8l-.1-29.6z"
11
+ fill="#004876"
12
+ />
13
+ <path
14
+ d="M172.9 159.2c-31.4 23-33.2 24.3-33.2 24.3l-40.5 3.2v-29.4l73.7 1.9z"
15
+ fill="#FFF"
16
+ />
17
+ <path
18
+ d="M99.3 125.4V33.5L1.6 102.7l-.1.1c-1 .7-1.5 1.8-1.5 3v67.4c0 1.2.6 2.3 1.5 3l.1.1 93.5 66.3c1.7 1.2 4.1 0 4.1-2.1v-28.9l40.5-28-40.5.7v-25h73.7l25.4-16.9.2-16.8H99.3z"
19
+ fill="#BB2432"
20
+ />
21
+ <path d="M99.3 101.1h99.3v24.3H99.3z"
22
+ fill="#FFF"
23
+ />
24
+ </svg>
25
+ )
26
+
27
+ export default Veteran
@@ -0,0 +1,67 @@
1
+ import React from 'react'
2
+ import { render, screen } from '../utilities/test-utils'
3
+
4
+ import UserBadge from './_user_badge'
5
+
6
+ const testId = 'userBadge'
7
+ const className = 'custom-class-name'
8
+
9
+ const UserBadgeDefault = (props) => (
10
+ <>
11
+ <UserBadge
12
+ aria={{ label: testId }}
13
+ className={className}
14
+ data={{ testid: testId }}
15
+ id={testId}
16
+ {...props}
17
+ />
18
+ </>
19
+ )
20
+
21
+ test('should pass data prop', () => {
22
+ render(<UserBadgeDefault />)
23
+ const kit = screen.getByTestId(testId)
24
+ expect(kit).toBeInTheDocument()
25
+ })
26
+
27
+ test('should pass className prop', () => {
28
+ render(<UserBadgeDefault />)
29
+ const kit = screen.getByTestId(testId)
30
+ expect(kit).toHaveClass(className)
31
+ })
32
+
33
+ test('should pass aria prop', () => {
34
+ render(<UserBadgeDefault />)
35
+ const kit = screen.getByTestId(testId)
36
+ expect(kit).toHaveAttribute('aria-label', testId)
37
+ })
38
+
39
+ test('should pass id prop', () => {
40
+ render(<UserBadgeDefault />)
41
+ const kit = screen.getByTestId(testId)
42
+ expect(kit).toHaveProperty('id', testId)
43
+ })
44
+
45
+ test('should be million-dollar badge by default', () => {
46
+ render(<UserBadgeDefault />)
47
+ const kit = screen.getByTestId(testId)
48
+ expect(kit).toContainHTML('<circle cx="121.5" cy="121.5" r="121.5" />')
49
+ })
50
+
51
+ test('should pass badge prop', () => {
52
+ render(<UserBadgeDefault badge="veteran" />)
53
+ const kit = screen.getByTestId(testId)
54
+ expect(kit).not.toContainHTML('<circle cx="121.5" cy="121.5" r="121.5" />')
55
+ })
56
+
57
+ test('should be md size by default', () => {
58
+ render(<UserBadgeDefault />)
59
+ const kit = screen.getByTestId(testId)
60
+ expect(kit).toHaveClass('pb_user_badge_kit_md')
61
+ })
62
+
63
+ test('should pass size prop', () => {
64
+ render(<UserBadgeDefault size="sm" />)
65
+ const kit = screen.getByTestId(testId)
66
+ expect(kit).toHaveClass('pb_user_badge_kit_sm')
67
+ })