playbook_ui 8.2.0.pre.alpha3 → 8.2.1.pre.alpha3

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: 30941eb0f16c5ea56d646c08cdcdcd5338423bc2d09787995ec11d82725a5cf5
4
- data.tar.gz: b31ecc30e83182a59de76eeba28a6973b0f9b5dcea13d8c37fabc9959ee0fe18
3
+ metadata.gz: 30573f9f9ccd3ee419efd4270fea9fb7a6246039e03a876a334649ab9f949300
4
+ data.tar.gz: 3a8a59438669a37adeec50666af7943b89e972a3d5d35da94f260ed09e261a50
5
5
  SHA512:
6
- metadata.gz: 0cd98f212aaee69b433a737a3fb49520a8d4d48d2f0f32268c493c14da2672b9808910e11011d11ee883bee8b0756252c43c0b146016ad490598d70b904f522f
7
- data.tar.gz: 6e8177d180817e06d691f83e377d3a63f93bc367bcb1af0fe051fedc2735a8445142faecd2fab8418fda777d1f243637f8859c36cd2b2cdc270355cc2fe5a063
6
+ metadata.gz: 97e8cbed019e5cd16b0964e3db90bdaba0d06a39d10067b98f9db044f7fd7711d25c6713b87dac7b43f80620548ec6ec36fda72e146b01d7f4bf91bbd084b905
7
+ data.tar.gz: 64e21047fb78875448cbdaeb2fa6d0a782bfa58327eb2d3028679c07b16bd20a6b8d3644adb16388332e6b5f398c7667fa585488934577e5e2e3a432988fa4d8
data/Rakefile CHANGED
@@ -4,29 +4,12 @@ rescue LoadError
4
4
  puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
5
5
  end
6
6
 
7
- require 'rdoc/task'
8
-
9
- RDoc::Task.new(:rdoc) do |rdoc|
10
- rdoc.rdoc_dir = 'rdoc'
11
- rdoc.title = 'Playbook'
12
- rdoc.options << '--line-numbers'
13
- rdoc.rdoc_files.include('README.md')
14
- rdoc.rdoc_files.include('lib/**/*.rb')
15
- end
16
-
17
7
  APP_RAKEFILE = File.expand_path("spec/dummy/Rakefile", __dir__)
18
8
  load 'rails/tasks/engine.rake'
19
-
20
9
  load 'rails/tasks/statistics.rake'
21
10
 
22
11
  require 'bundler/gem_tasks'
23
12
 
24
- require 'rake/testtask'
25
-
26
- Rake::TestTask.new(:test) do |t|
27
- t.libs << 'test'
28
- t.pattern = 'spec/**/*_spec.rb'
29
- t.verbose = false
30
- end
13
+ Dir["private/tasks/*.rake"].each(&method(:load))
31
14
 
32
15
  task default: :test
@@ -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
  }
@@ -25,6 +25,8 @@ type DatePickerProps = {
25
25
  id?: String,
26
26
  inputAria?: object,
27
27
  inputData?: object,
28
+ inputOnChange?: (String) => void,
29
+ inputValue?: any,
28
30
  label?: String,
29
31
  maxDate: String,
30
32
  minDate: String,
@@ -55,6 +57,8 @@ const DatePicker = (props: DatePickerProps) => {
55
57
  id,
56
58
  inputAria,
57
59
  inputData,
60
+ inputOnChange,
61
+ inputValue,
58
62
  label = 'Date Picker',
59
63
  maxDate,
60
64
  minDate,
@@ -114,7 +118,6 @@ const DatePicker = (props: DatePickerProps) => {
114
118
  className={classes}
115
119
  id={id}
116
120
  >
117
- {className}
118
121
  <div className="input_wrapper">
119
122
  <TextInput
120
123
  aria={inputAria}
@@ -126,7 +129,9 @@ const DatePicker = (props: DatePickerProps) => {
126
129
  id={pickerId}
127
130
  label={hideLabel ? null : label}
128
131
  name={name}
132
+ onChange={inputOnChange}
129
133
  placeholder={placeholder}
134
+ value={inputValue}
130
135
  />
131
136
  <If condition={!hideIcon}>
132
137
  <div
@@ -166,6 +166,9 @@ const datePickerHelper = (config) => {
166
166
  picker.input.style.caretColor = 'transparent'
167
167
  picker.input.style.cursor = 'pointer'
168
168
  }
169
+
170
+ // Fix event bubbling bug on wrapper
171
+ document.querySelector(`#${pickerId}`).parentElement.addEventListener('click', (e) => e.stopPropagation())
169
172
  }
170
173
 
171
174
  export default datePickerHelper
@@ -1,6 +1,6 @@
1
1
  /* @flow */
2
2
 
3
- import React from 'react'
3
+ import React, { forwardRef } from 'react'
4
4
  import classnames from 'classnames'
5
5
  import { buildCss } from '../utilities/props'
6
6
  import { globalProps } from '../utilities/globalProps.js'
@@ -22,11 +22,12 @@ type FlexProps = {
22
22
  wrap?: boolean,
23
23
  }
24
24
 
25
- const Flex = (props: FlexProps) => {
25
+ const Flex = (props: FlexProps, ref: React.ElementRef<"div">) => {
26
26
  const {
27
27
  align = 'none',
28
28
  children,
29
29
  className,
30
+ id,
30
31
  inline = false,
31
32
  horizontal = 'left',
32
33
  justify = 'none',
@@ -70,10 +71,12 @@ const Flex = (props: FlexProps) => {
70
71
  globalProps(props),
71
72
  className
72
73
  )}
74
+ id={id}
75
+ ref={ref}
73
76
  >
74
77
  {children}
75
78
  </div>
76
79
  )
77
80
  }
78
81
 
79
- export default Flex
82
+ export default forwardRef(Flex)
@@ -14,7 +14,7 @@
14
14
  %>
15
15
 
16
16
  <%= pb_rails("form/form_with", props: {
17
- options: { scope: :example, method: :get, url: "" },
17
+ scope: :example, method: :get, url: "",
18
18
  validate: true
19
19
  }) do |form| %>
20
20
  <%= form.text_field :example_text_field, props: { label: true, required: true } %>
@@ -16,6 +16,7 @@ module Playbook
16
16
 
17
17
  def form_options
18
18
  {
19
+ url: "",
19
20
  id: id,
20
21
  aria: aria,
21
22
  class: classname,
@@ -1,6 +1,6 @@
1
1
  /* @flow */
2
2
 
3
- import React, { useEffect, useRef } from 'react'
3
+ import React, { forwardRef, useEffect, useRef } from 'react'
4
4
  import classnames from 'classnames'
5
5
  import useFocus from './useFocus.js'
6
6
  import Trix from 'trix'
@@ -22,7 +22,7 @@ type RichTextEditorProps = {
22
22
  value?: string,
23
23
  }
24
24
 
25
- const RichTextEditor = (props: RichTextEditorProps) => {
25
+ const RichTextEditor = (props: RichTextEditorProps, ref: React.ElementRef<"input">) => {
26
26
  const {
27
27
  aria = {},
28
28
  className,
@@ -120,6 +120,7 @@ const RichTextEditor = (props: RichTextEditorProps) => {
120
120
  <input
121
121
  id={id}
122
122
  name={name}
123
+ ref={ref}
123
124
  type="hidden"
124
125
  value={value}
125
126
  />
@@ -133,4 +134,4 @@ const RichTextEditor = (props: RichTextEditorProps) => {
133
134
  )
134
135
  }
135
136
 
136
- export default RichTextEditor
137
+ export default forwardRef(RichTextEditor)
@@ -19,6 +19,7 @@ type TextInputProps = {
19
19
  id?: string,
20
20
  name: string,
21
21
  label: string,
22
+ onBlur: (String) => void,
22
23
  onChange: (String) => void,
23
24
  placeholder: string,
24
25
  required?: boolean,
@@ -41,6 +42,7 @@ const TextInput = (
41
42
  id,
42
43
  name,
43
44
  label,
45
+ onBlur = () => {},
44
46
  onChange = () => {},
45
47
  placeholder,
46
48
  required,
@@ -79,6 +81,7 @@ const TextInput = (
79
81
  disabled={disabled}
80
82
  id={id}
81
83
  name={name}
84
+ onBlur={onBlur}
82
85
  onChange={onChange}
83
86
  placeholder={placeholder}
84
87
  ref={ref}
@@ -24,6 +24,7 @@ type TextareaProps = {
24
24
  required?: boolean,
25
25
  rows?: number,
26
26
  resize: 'none' | 'both' | 'horizontal' | 'vertical' | 'auto',
27
+ onBlur?: InputCallback<HTMLTextAreaElement>,
27
28
  onChange?: InputCallback<HTMLTextAreaElement>,
28
29
  }
29
30
 
@@ -37,6 +38,7 @@ const Textarea = ({
37
38
  label,
38
39
  maxCharacters,
39
40
  name,
41
+ onBlur = () => {},
40
42
  onChange = () => {},
41
43
  placeholder,
42
44
  required,
@@ -75,6 +77,7 @@ const Textarea = ({
75
77
  className="pb_textarea_kit"
76
78
  disabled={disabled}
77
79
  name={name}
80
+ onBlur={onBlur}
78
81
  onChange={onChange}
79
82
  placeholder={placeholder}
80
83
  ref={ref}
@@ -3,12 +3,14 @@
3
3
  import React from 'react'
4
4
  import Select from 'react-select'
5
5
  import AsyncSelect from 'react-select/async'
6
+ import CreateableSelect from 'react-select/creatable'
6
7
  import { get } from 'lodash'
7
8
  import { globalProps } from '../utilities/globalProps.js'
8
9
 
9
10
  import Control from './components/Control'
10
11
  import ClearIndicator from './components/ClearIndicator'
11
12
  import IndicatorsContainer from './components/IndicatorsContainer'
13
+ import Input from './components/Input'
12
14
  import MenuList from './components/MenuList'
13
15
  import MultiValue from './components/MultiValue'
14
16
  import Option from './components/Option'
@@ -26,6 +28,7 @@ import { noop } from '../utilities/props'
26
28
 
27
29
  type Props = {
28
30
  async?: boolean,
31
+ createable?: boolean,
29
32
  dark?: boolean,
30
33
  label?: string,
31
34
  loadOptions?: noop | string,
@@ -41,12 +44,14 @@ type Props = {
41
44
 
42
45
  const Typeahead = (props: Props) => {
43
46
  const selectProps = {
47
+ badges: false,
44
48
  cacheOptions: true,
45
49
  components: {
46
50
  Control,
47
51
  ClearIndicator,
48
52
  IndicatorsContainer,
49
53
  IndicatorSeparator: null,
54
+ Input,
50
55
  MenuList,
51
56
  MultiValue,
52
57
  Option,
@@ -58,6 +63,8 @@ const Typeahead = (props: Props) => {
58
63
  isClearable: true,
59
64
  isSearchable: true,
60
65
  name,
66
+ onCreate: () => {},
67
+ plusIcon: false,
61
68
  ...props,
62
69
  }
63
70
 
@@ -65,7 +72,8 @@ const Typeahead = (props: Props) => {
65
72
  if (typeof(props.getOptionLabel) === 'string') selectProps.getOptionLabel = get(window, props.getOptionLabel)
66
73
  if (typeof(props.getOptionValue) === 'string') selectProps.getOptionValue = get(window, props.getOptionValue)
67
74
 
68
- const Tag = props.async ? AsyncSelect : Select
75
+ let Tag = props.async ? AsyncSelect : Select
76
+ if (props.createable) Tag = CreateableSelect
69
77
 
70
78
  const handleOnChange = (data, { action, option, removedValue }) => {
71
79
  if (action === 'select-option') {
@@ -148,4 +148,13 @@
148
148
  box-sizing: border-box;
149
149
  }
150
150
  }
151
+
152
+ .typeahead-plus-icon {
153
+ color: $neutral;
154
+ }
155
+
156
+ [class^=pb_badge_kit] span {
157
+ line-height: 16.5px;
158
+ letter-spacing: normal;
159
+ }
151
160
  }
@@ -0,0 +1,43 @@
1
+ /* @flow */
2
+
3
+ import React, { useEffect, useRef } from 'react'
4
+ import { components } from 'react-select'
5
+ import { Flex, Icon } from '../../'
6
+
7
+ const Input = (props: any) => {
8
+ const { plusIcon } = props.selectProps
9
+ const inputWrapper = useRef(null)
10
+
11
+ if (plusIcon) {
12
+ useEffect(() => {
13
+ const plusIcon = inputWrapper.current.querySelector('.typeahead-plus-icon')
14
+ const values = props.selectProps.value
15
+ if (!values || values.length == 0){
16
+ const offset = inputWrapper.current.parentElement.querySelector('.placeholder').clientWidth
17
+ plusIcon.style.marginLeft = `${offset + 2}px`
18
+ } else {
19
+ plusIcon.style.marginLeft = '0px'
20
+ }
21
+ })
22
+ }
23
+
24
+ return (
25
+ <Flex
26
+ align="center"
27
+ ref={inputWrapper}
28
+ >
29
+ <If condition={plusIcon}>
30
+ <Icon
31
+ className="typeahead-plus-icon"
32
+ icon="plus"
33
+ />
34
+ </If>
35
+ <components.Input
36
+ className="input"
37
+ {...props}
38
+ />
39
+ </Flex>
40
+ )
41
+ }
42
+
43
+ export default Input
@@ -3,7 +3,7 @@
3
3
  import React from 'react'
4
4
  import { components } from 'react-select'
5
5
 
6
- import { FormPill } from '../../'
6
+ import { Badge, FormPill } from '../../'
7
7
 
8
8
  type Props = {
9
9
  data: object,
@@ -15,6 +15,7 @@ type Props = {
15
15
  const MultiValue = (props: Props) => {
16
16
  const { removeProps } = props
17
17
  const { imageUrl, label } = props.data
18
+ const { badges } = props.selectProps
18
19
 
19
20
  const formPillProps = {
20
21
  marginRight: 'xs',
@@ -28,19 +29,28 @@ const MultiValue = (props: Props) => {
28
29
  className="text_input_multivalue_container"
29
30
  {...props}
30
31
  >
31
- <If condition={imageUrl}>
32
- <FormPill
33
- avatarUrl={imageUrl}
32
+ <If condition={badges}>
33
+ <Badge
34
34
  closeProps={removeProps}
35
- marginRight="xs"
36
- name={label}
37
- />
38
- <Else />
39
- <FormPill
40
- closeProps={removeProps}
41
- marginRight="xs"
35
+ removeIcon
42
36
  text={label}
37
+ variant="primary"
43
38
  />
39
+ <Else />
40
+ <If condition={imageUrl}>
41
+ <FormPill
42
+ avatarUrl={imageUrl}
43
+ closeProps={removeProps}
44
+ marginRight="xs"
45
+ name={label}
46
+ />
47
+ <Else />
48
+ <FormPill
49
+ closeProps={removeProps}
50
+ marginRight="xs"
51
+ text={label}
52
+ />
53
+ </If>
44
54
  </If>
45
55
  </components.MultiValueContainer>
46
56
  )
@@ -13,6 +13,7 @@ const options = [
13
13
  const TypeaheadDefault = (props) => {
14
14
  return (
15
15
  <Typeahead
16
+ // badges
16
17
  label="Colors"
17
18
  options={options}
18
19
  {...props}
@@ -3,7 +3,7 @@
3
3
  import React from 'react'
4
4
  import { Typeahead } from '../..'
5
5
 
6
- const options = [
6
+ const initOptions = [
7
7
  { label: 'Windows', value: '#FFA500' },
8
8
  { label: 'Siding', value: '#FF0000' },
9
9
  { label: 'Doors', value: '#00FF00' },
@@ -11,13 +11,18 @@ const options = [
11
11
  ]
12
12
 
13
13
  const TypeaheadWithPills = (props) => {
14
+ // const [values, setValues] = useState([])
14
15
  return (
15
16
  <>
16
17
  <Typeahead
18
+ badges
19
+ createable
17
20
  isMulti
18
21
  label="Colors"
19
- options={options}
20
- placeholder=""
22
+ // onChange={(value) => console.log(value)}
23
+ options={initOptions}
24
+ placeholder="Placeholder"
25
+ plusIcon
21
26
  {...props}
22
27
  />
23
28
  </>
@@ -7,8 +7,8 @@ examples:
7
7
  - typeahead_with_pills_async_users: With Pills (Async Data w/ Users)
8
8
 
9
9
  react:
10
- - typeahead_default: Default
10
+ # - typeahead_default: Default
11
11
  - typeahead_with_pills: With Pills
12
- - typeahead_with_pills_async: With Pills (Async Data)
13
- - typeahead_with_pills_async_users: With Pills (Async Data w/ Users)
14
- - typeahead_with_pills_async_custom_options: With Pills (Async Data w/ Custom Options)
12
+ # - typeahead_with_pills_async: With Pills (Async Data)
13
+ # - typeahead_with_pills_async_users: With Pills (Async Data w/ Users)
14
+ # - typeahead_with_pills_async_custom_options: With Pills (Async Data w/ Custom Options)
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Playbook
4
- VERSION = "8.2.0.pre.alpha3"
4
+ VERSION = "8.2.1.pre.alpha3"
5
5
  end
6
6
 
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: playbook_ui
3
3
  version: !ruby/object:Gem::Version
4
- version: 8.2.0.pre.alpha3
4
+ version: 8.2.1.pre.alpha3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Power UX
8
8
  - Power Devs
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2021-03-15 00:00:00.000000000 Z
12
+ date: 2021-03-31 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: actionpack
@@ -17,27 +17,27 @@ dependencies:
17
17
  requirements:
18
18
  - - ">="
19
19
  - !ruby/object:Gem::Version
20
- version: 5.2.4.5
20
+ version: 5.2.4.4
21
21
  - - "<"
22
22
  - !ruby/object:Gem::Version
23
- version: '6.0'
23
+ version: '7.0'
24
24
  type: :runtime
25
25
  prerelease: false
26
26
  version_requirements: !ruby/object:Gem::Requirement
27
27
  requirements:
28
28
  - - ">="
29
29
  - !ruby/object:Gem::Version
30
- version: 5.2.4.5
30
+ version: 5.2.4.4
31
31
  - - "<"
32
32
  - !ruby/object:Gem::Version
33
- version: '6.0'
33
+ version: '7.0'
34
34
  - !ruby/object:Gem::Dependency
35
35
  name: actionview
36
36
  requirement: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: 5.2.4.5
40
+ version: 5.2.4.4
41
41
  - - "<"
42
42
  - !ruby/object:Gem::Version
43
43
  version: '7.0'
@@ -47,7 +47,7 @@ dependencies:
47
47
  requirements:
48
48
  - - ">="
49
49
  - !ruby/object:Gem::Version
50
- version: 5.2.4.5
50
+ version: 5.2.4.4
51
51
  - - "<"
52
52
  - !ruby/object:Gem::Version
53
53
  version: '7.0'
@@ -57,7 +57,7 @@ dependencies:
57
57
  requirements:
58
58
  - - ">="
59
59
  - !ruby/object:Gem::Version
60
- version: 5.2.4.5
60
+ version: 5.2.4.4
61
61
  - - "<"
62
62
  - !ruby/object:Gem::Version
63
63
  version: '7.0'
@@ -67,24 +67,10 @@ dependencies:
67
67
  requirements:
68
68
  - - ">="
69
69
  - !ruby/object:Gem::Version
70
- version: 5.2.4.5
70
+ version: 5.2.4.4
71
71
  - - "<"
72
72
  - !ruby/object:Gem::Version
73
73
  version: '7.0'
74
- - !ruby/object:Gem::Dependency
75
- name: github_changelog_generator
76
- requirement: !ruby/object:Gem::Requirement
77
- requirements:
78
- - - '='
79
- - !ruby/object:Gem::Version
80
- version: 1.15.2
81
- type: :runtime
82
- prerelease: false
83
- version_requirements: !ruby/object:Gem::Requirement
84
- requirements:
85
- - - '='
86
- - !ruby/object:Gem::Version
87
- version: 1.15.2
88
74
  - !ruby/object:Gem::Dependency
89
75
  name: react-rails
90
76
  requirement: !ruby/object:Gem::Requirement
@@ -253,6 +239,20 @@ dependencies:
253
239
  - - '='
254
240
  - !ruby/object:Gem::Version
255
241
  version: 11.0.0
242
+ - !ruby/object:Gem::Dependency
243
+ name: github_changelog_generator
244
+ requirement: !ruby/object:Gem::Requirement
245
+ requirements:
246
+ - - '='
247
+ - !ruby/object:Gem::Version
248
+ version: 1.15.2
249
+ type: :development
250
+ prerelease: false
251
+ version_requirements: !ruby/object:Gem::Requirement
252
+ requirements:
253
+ - - '='
254
+ - !ruby/object:Gem::Version
255
+ version: 1.15.2
256
256
  - !ruby/object:Gem::Dependency
257
257
  name: overcommit
258
258
  requirement: !ruby/object:Gem::Requirement
@@ -1961,6 +1961,7 @@ files:
1961
1961
  - app/pb_kits/playbook/pb_typeahead/components/ClearIndicator.jsx
1962
1962
  - app/pb_kits/playbook/pb_typeahead/components/Control.jsx
1963
1963
  - app/pb_kits/playbook/pb_typeahead/components/IndicatorsContainer.jsx
1964
+ - app/pb_kits/playbook/pb_typeahead/components/Input.jsx
1964
1965
  - app/pb_kits/playbook/pb_typeahead/components/MenuList.jsx
1965
1966
  - app/pb_kits/playbook/pb_typeahead/components/MultiValue.jsx
1966
1967
  - app/pb_kits/playbook/pb_typeahead/components/Option.jsx
@@ -2103,7 +2104,7 @@ homepage: http://playbook.powerapp.cloud
2103
2104
  licenses:
2104
2105
  - MIT
2105
2106
  metadata: {}
2106
- post_install_message:
2107
+ post_install_message:
2107
2108
  rdoc_options: []
2108
2109
  require_paths:
2109
2110
  - lib
@@ -2119,7 +2120,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
2119
2120
  version: 1.3.1
2120
2121
  requirements: []
2121
2122
  rubygems_version: 3.1.4
2122
- signing_key:
2123
+ signing_key:
2123
2124
  specification_version: 4
2124
2125
  summary: Playbook Design System
2125
2126
  test_files: []