playbook_ui 12.21.0 → 12.22.0.pre.alpha.PBNTR12checkingemptyfilters686

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: 1649557cda106585da9087061c3e7e8017578aed64a96820b78ff08ae29b357a
4
- data.tar.gz: 7969b004419abdc3a207667de30b50439a42559d00ad1c9144755074932aa2e7
3
+ metadata.gz: '050709c25af1935687c3472973acb4fe9e7b3e811a0edcf35fb4f01c3d27193c'
4
+ data.tar.gz: dc4f357e487599331949afd8e95e4ce80285c5223c21cb67c5072af31840bd9d
5
5
  SHA512:
6
- metadata.gz: cad804b80ced6b0f966c72f7e35a02e782898b03ed8b789120ac8662f6c88c293f63f4b5cc5970916bc91aa0be3a182d42d17e365c79ca07b4f5500edf3aa348
7
- data.tar.gz: f8abc54b2526773eb5bdb0244f157a23f27cda78ea88029b59261c4d58938761b0d9eaa9cadce84ea31ffafc23c9a8ff6cb5c09914dcf294b9a74664ab6bddd7
6
+ metadata.gz: a9347203cd3f428e866317f66251b82bce4794a6376e9fe4028000a7c91aefdceb34a0d4856ce2ccae64f3ed783bbbda8ec4a16ea4e798a9d0a3c54e765a254d
7
+ data.tar.gz: 8468890749d6669fe3d560741d272de73464c93effe2e7f86301ddd654fbbe7c5601d7b1d3b438363c0bd0278940c8eeea51686b1509bc518c08c9f5930df0cd
@@ -46,25 +46,29 @@
46
46
 
47
47
  <script>
48
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
- })
49
+ if (htmlButton) {
50
+ htmlButton.addEventListener('click', function() {
51
+ var tempElement = document.createElement('div')
52
+ tempElement.innerHTML = `<%= example_html %>`
53
+ var decodedString = tempElement.textContent || tempElement.innerText;
54
+ copyContent(decodedString)
55
+ })
56
+ }
55
57
 
56
58
  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
- })
59
+ if (button) {
60
+ button.addEventListener('click', function() {
61
+ var tempElement = document.createElement('div')
62
+ tempElement.innerHTML = `<%= source %>`
63
+ var decodedString = tempElement.textContent || tempElement.innerText;
64
+ copyContent(decodedString)
65
+ var fadeAwayDiv = document.getElementById("<%= "tooltip-#{example_key}" %>")
66
+ setTimeout(function() {
67
+ fadeAwayDiv.classList.remove('show')
68
+ }, 3000)
69
+ setTimeout(function() {
70
+ fadeAwayDiv.classList.add('hide')
71
+ }, 3001)
72
+ })
73
+ }
70
74
  </script>
@@ -27,7 +27,7 @@ const CurrentFilters = ({ dark, filters }: CurrentFiltersProps): React.ReactElem
27
27
  color="light"
28
28
  paddingLeft="xs"
29
29
  size={4}
30
- tag="h4"
30
+ tag="span"
31
31
  text="No Filter Selected"
32
32
  />
33
33
  </div>
@@ -9,22 +9,23 @@
9
9
  <div class="maskContainer">
10
10
  <div class="filters">
11
11
  <div class="left_gradient"></div>
12
- <% object.filters.each do |filter| %>
13
- <% if filter[:name] == "" %>
14
- <div>
15
- <%= pb_rails("body", props: {
16
- color: "light",
17
- padding_left: "xs",
18
- size: 4,
19
- tag:"h4",
20
- text: "No Filter Selected"
21
- }) %>
22
- </div>
23
- <% else %>
24
- <div class="filter">
25
- <%= pb_rails("caption", props: { text: filter[:name]}) %>
26
- <%= pb_rails("title", props: { size: 4, tag:"h4", text: filter[:value]}) %>
12
+ <% if object.filters&.none? { |filter| filter[:name].present? } %>
13
+ <div>
14
+ <%= pb_rails("body", props: {
15
+ color: "light",
16
+ padding_left: "xs",
17
+ size: 4,
18
+ tag:"span",
19
+ text: "No Filter Selected"
20
+ }) %>
27
21
  </div>
22
+ <% end %>
23
+ <% object.filters&.each do |filter| %>
24
+ <% if filter[:name].present? %>
25
+ <div class="filter">
26
+ <%= pb_rails("caption", props: { text: filter[:name]}) %>
27
+ <%= pb_rails("title", props: { size: 4, tag:"h4", text: filter[:value]}) %>
28
+ </div>
28
29
  <% end %>
29
30
  <% end %>
30
31
  <div class="right_gradient"></div>
@@ -0,0 +1,69 @@
1
+ import React, { useState } from 'react'
2
+
3
+ import Flex from '../../pb_flex/_flex'
4
+ import PbReactPopover from '../../pb_popover/_popover'
5
+ import Icon from '../../pb_icon/_icon'
6
+ import Nav from '../../pb_nav/_nav'
7
+ import NavItem from '../../pb_nav/_item'
8
+
9
+ const MoreExtensionsDropdown = ({extensions}: any) => {
10
+ const [showPopover, setShowPopover] = useState(false)
11
+
12
+ const handleTogglePopover = () => {
13
+ setShowPopover(true)
14
+ }
15
+
16
+ const handlePopoverClose = (shouldClosePopover: boolean) => {
17
+ setShowPopover(!shouldClosePopover)
18
+ }
19
+
20
+
21
+ const popoverReference = (
22
+ <button
23
+ className="toolbar_button"
24
+ onClick={handleTogglePopover}
25
+ >
26
+ <Flex
27
+ align="center"
28
+ className="toolbar_button_icon"
29
+ justify="center"
30
+ >
31
+ <Icon icon="ellipsis" size="lg" />
32
+ </Flex>
33
+ </button>
34
+
35
+ );
36
+
37
+ return (
38
+ <PbReactPopover
39
+ closeOnClick='outside'
40
+ padding='none'
41
+ placement="bottom"
42
+ reference={popoverReference}
43
+ shouldClosePopover={handlePopoverClose}
44
+ show={showPopover}
45
+ >
46
+ <Nav
47
+ paddingTop={extensions.length > 1 ? "xs" : "none"}
48
+ paddingBottom={extensions.length > 1 ? "xs" : "none"}
49
+ variant="subtle"
50
+ >
51
+ {extensions && extensions.map(({ icon, text, onclick, isActive}:any, index:number) => (
52
+ <NavItem
53
+ cursor="pointer"
54
+ className={`pb_tiptap_toolbar_dropdown_list_item ${isActive ? "is-active" : ""}`}
55
+ iconLeft={icon}
56
+ key={`${text}_${index}`}
57
+ margin='none'
58
+ onClick={()=> {onclick(); setShowPopover(false)}}
59
+ text={text}
60
+ paddingTop='xxs'
61
+ paddingBottom='xxs'
62
+ />
63
+ ))}
64
+ </Nav>
65
+ </PbReactPopover>
66
+ )
67
+ }
68
+
69
+ export default MoreExtensionsDropdown
@@ -9,8 +9,9 @@ import ToolbarDropdown from "./ToolbarDropdown";
9
9
  import ToolbarNodes from "./ToolbarNodes";
10
10
  import { ToolbarTypes } from "./EditorTypes";
11
11
  import ToolbarHistoryItems from "./ToolbarHistory";
12
+ import MoreExtensionsDropdown from "./MoreExtensionsDropdown";
12
13
 
13
- const EditorToolbar = ({ editor }:any) => {
14
+ const EditorToolbar = ({ editor, extensions }:any) => {
14
15
  const toolbaritems = [
15
16
  {
16
17
  icon: "bold",
@@ -51,10 +52,16 @@ const EditorToolbar = ({ editor }:any) => {
51
52
  )}
52
53
  <SectionSeparator orientation="vertical" />
53
54
  <ToolbarNodes editor={editor} />
55
+ {
56
+ extensions && (
57
+ <>
58
+ <MoreExtensionsDropdown extensions={extensions}/>
59
+ </>
60
+ )
61
+ }
54
62
  </FlexItem>
55
63
  <ToolbarHistoryItems editor={editor} />
56
64
  </Flex>
57
- {/* <SectionSeparator /> */}
58
65
  </Background>
59
66
  );
60
67
  };
@@ -98,7 +98,17 @@ const popoverReference = (
98
98
  activeCount === 2 ? (
99
99
  activeItems[1]
100
100
  ) : (
101
+ activeCount === 1 ? (
101
102
  activeItems[0] || null
103
+ ) : (
104
+ <Flex align="center" key="paragraph" gap="xs">
105
+ <Icon icon="paragraph" size="lg" />
106
+ <div>Paragraph</div>
107
+ <Flex className={showPopover ? "fa-flip-vertical" : ""} display="inline_flex">
108
+ <Icon fixedWidth icon="angle-down" margin-left="xs" />
109
+ </Flex>
110
+ </Flex>
111
+ )
102
112
  )
103
113
  }
104
114
  </Button>
@@ -35,7 +35,8 @@ type RichTextEditorProps = {
35
35
  data?: { [key: string]: string },
36
36
  focus?: boolean,
37
37
  id?: string,
38
- inline?: boolean,
38
+ inline?: boolean,
39
+ extensions?: { [key: string]: string }[],
39
40
  name?: string,
40
41
  onChange: (html: string, text: string) => void,
41
42
  placeholder?: string,
@@ -56,6 +57,7 @@ const RichTextEditor = (props: RichTextEditorProps) => {
56
57
  data = {},
57
58
  focus = false,
58
59
  inline = false,
60
+ extensions,
59
61
  name,
60
62
  onChange = noop,
61
63
  placeholder,
@@ -162,7 +164,7 @@ const RichTextEditor = (props: RichTextEditorProps) => {
162
164
  {
163
165
  advancedEditor ? (
164
166
  <div className='pb_rich_text_editor_advanced_container'>
165
- <EditorToolbar editor={advancedEditor}/>
167
+ <EditorToolbar extensions={extensions} editor={advancedEditor}/>
166
168
  { children }
167
169
  </div>
168
170
  ) : (
@@ -0,0 +1,55 @@
1
+ import React from 'react'
2
+ import { RichTextEditor } from '../..'
3
+ import { useEditor, EditorContent } from "@tiptap/react"
4
+ import StarterKit from "@tiptap/starter-kit"
5
+ import Link from '@tiptap/extension-link'
6
+
7
+ import HorizontalRule from "@tiptap/extension-horizontal-rule"
8
+ import Highlight from '@tiptap/extension-highlight'
9
+
10
+
11
+ const RichTextEditorMoreExtensions = (props) => {
12
+
13
+ const editor = useEditor({
14
+ extensions: [
15
+ StarterKit,
16
+ Link,
17
+ HorizontalRule,
18
+ Highlight.configure({ multicolor: true })
19
+ ],
20
+ content:"Add your text here. You can format your text, add links, quotes, and bullets."
21
+ })
22
+ if (!editor) {
23
+ return null
24
+ }
25
+
26
+ const ExtensionsList = [
27
+ {
28
+ icon: "horizontal-rule",
29
+ isActive: editor.isActive("horizontalRule"),
30
+ text: "Horizontal Rule",
31
+ onclick: () => editor.chain().focus().setHorizontalRule().run(),
32
+ },
33
+ {
34
+ icon: "highlighter",
35
+ isActive: editor.isActive("highlight"),
36
+ text: "Highlighter",
37
+ onclick: () => editor.chain().focus().toggleHighlight().run(),
38
+ }
39
+ ]
40
+
41
+
42
+ return (
43
+ <div>
44
+ <RichTextEditor
45
+ advancedEditor={editor}
46
+ extensions={ExtensionsList}
47
+ {...props}
48
+ >
49
+ <EditorContent editor={editor}/>
50
+ </RichTextEditor>
51
+ </div>
52
+ )
53
+ }
54
+
55
+ export default RichTextEditorMoreExtensions
@@ -0,0 +1,12 @@
1
+ This variant allows you to optionally include any of [Tiptap’s 53 extensions](https://tiptap.dev/extensions) within any advanced editor by using the `extensions` prop.
2
+
3
+ __NOTE__: In order to leverage this prop, you __must__ install the extension you need in your project, import it and pass it to the extensions array as shown in this example with the HorizontalRule and the Highlight extensions.
4
+
5
+ In order to add the extension to the editor toolbar, create an array of objects (as shown in the ExtensionsList array in the example below). Each object in this array should include:
6
+
7
+ `icon`: the icon to display within the toolbar dropdown (any Fontawesome icons can be used)
8
+ `isActive`: sets the extension to active within the dropdown, when applicable
9
+ `text`: the label within the toolbar dropdown
10
+ `onclick`: initializes the extension when it’s clicked within the dropdown (snytax varies with extension, see Tiptap's docs for more information)
11
+
12
+ This array can then be passed to the `extensions` prop and all extensions in the array will be rendered in the ellipsis dropdown.
@@ -14,6 +14,7 @@ examples:
14
14
  react:
15
15
  - rich_text_editor_default: Default
16
16
  - rich_text_editor_advanced_default: Advanced Default
17
+ - rich_text_editor_more_extensions: Advanced (Extra Extensions)
17
18
  - rich_text_editor_simple: Simple
18
19
  - rich_text_editor_attributes: Attributes
19
20
  - rich_text_editor_focus: Focus
@@ -7,4 +7,5 @@ export { default as RichTextEditorTemplates } from './_rich_text_editor_template
7
7
  export { default as RichTextEditorToolbarBottom } from './_rich_text_editor_toolbar_bottom.jsx'
8
8
  export { default as RichTextEditorInline } from './_rich_text_editor_inline.jsx'
9
9
  export { default as RichTextEditorPreview } from './_rich_text_editor_preview.jsx'
10
- export { default as RichTextEditorAdvancedDefault } from './_rich_text_editor_advanced_default.jsx'
10
+ export { default as RichTextEditorAdvancedDefault } from './_rich_text_editor_advanced_default.jsx'
11
+ export { default as RichTextEditorMoreExtensions } from './_rich_text_editor_more_extensions.jsx'
@@ -12,18 +12,17 @@ import DateTime from '../pb_kit/dateTime'
12
12
 
13
13
  type WeekdayStackedProps = {
14
14
  align?: "left" | "center" | "right",
15
- aria?: object,
15
+ aria?: {[key:string]:string },
16
16
  className?: string,
17
17
  dark?: boolean,
18
18
  data?: object,
19
- date: date,
19
+ date: Date,
20
20
  id?: string,
21
21
  variant?: "day_only" | "month_day" | "expanded",
22
22
  compact?: boolean,
23
- id?: string,
24
23
  }
25
24
 
26
- const getDayOfWeek = (value, compact) => {
25
+ const getDayOfWeek = (value: Date | string, compact: boolean) => {
27
26
  const dateTime = new DateTime({ value })
28
27
  if (compact) {
29
28
  return dateTime.toDayAbbr()
@@ -32,7 +31,7 @@ const getDayOfWeek = (value, compact) => {
32
31
  }
33
32
  }
34
33
 
35
- const getFormattedDate = (value, variant) => {
34
+ const getFormattedDate = (value: Date | string, variant: "day_only" | "month_day" | "expanded") => {
36
35
  const dateTime = new DateTime({ value })
37
36
  if (variant === 'day_only') {
38
37
  return dateTime.toDay()
@@ -0,0 +1,105 @@
1
+ import React from "react";
2
+ import { render, screen } from "../utilities/test-utils";
3
+
4
+ import WeekdayStacked from "./_weekday_stacked";
5
+
6
+ const TEST_DATE = "01/01/2020 00:00:000 GMT-0500";
7
+ jest.setSystemTime(new Date(TEST_DATE));
8
+ const testId = "weekdaystacked-kit";
9
+ const realDate = Date;
10
+
11
+ beforeEach(() => {
12
+ global.Date.now = jest.fn(() => new Date(TEST_DATE));
13
+ });
14
+
15
+ afterEach(() => {
16
+ global.Date = realDate;
17
+ });
18
+
19
+ describe("WeekdayStacked Kit", () => {
20
+ test("renders className", () => {
21
+ render(
22
+ <WeekdayStacked
23
+ data={{ testid: testId }}
24
+ />
25
+ );
26
+
27
+ const kit = screen.getByTestId(testId);
28
+ expect(kit).toHaveClass("pb_weekday_stacked_kit_left");
29
+ });
30
+
31
+ test("renders Caption with weekday", () => {
32
+ render(
33
+ <WeekdayStacked
34
+ data={{ testid: testId }}
35
+ />
36
+ );
37
+
38
+ const kit = screen.getByTestId(testId);
39
+ const text = kit.querySelector(".pb_caption_kit_md");
40
+ expect(text.textContent).toEqual("Wed")
41
+ });
42
+
43
+ test("renders Title with date", () => {
44
+ render(
45
+ <WeekdayStacked
46
+ data={{ testid: testId }}
47
+ />
48
+ );
49
+
50
+ const kit = screen.getByTestId(testId);
51
+ const text = kit.querySelector(".pb_title_kit_size_4");
52
+ expect(text.textContent).toEqual("1/1")
53
+ });
54
+
55
+ test("renders compact prop", () => {
56
+ render(
57
+ <WeekdayStacked
58
+ compact
59
+ data={{ testid: testId }}
60
+ />
61
+ );
62
+
63
+ const kit = screen.getByTestId(testId);
64
+ const text = kit.querySelector(".pb_caption_kit_md");
65
+ expect(text.textContent).toEqual("W")
66
+ });
67
+
68
+ test("renders align prop", () => {
69
+ render(
70
+ <WeekdayStacked
71
+ align="left"
72
+ data={{ testid: testId }}
73
+ />
74
+ );
75
+
76
+ const kit = screen.getByTestId(testId);
77
+ expect(kit).toHaveClass("pb_weekday_stacked_kit_left")
78
+ });
79
+
80
+ test("renders day_only variant prop", () => {
81
+ render(
82
+ <WeekdayStacked
83
+ data={{ testid: testId }}
84
+ variant="day_only"
85
+ />
86
+ );
87
+
88
+ const kit = screen.getByTestId(testId);
89
+ const text = kit.querySelector(".pb_title_kit_size_4");
90
+ expect(text.textContent).toEqual("1")
91
+ });
92
+
93
+ test("renders expanded variant prop", () => {
94
+ render(
95
+ <WeekdayStacked
96
+ data={{ testid: testId }}
97
+ variant="expanded"
98
+ />
99
+ );
100
+
101
+ const kit = screen.getByTestId(testId);
102
+ const text = kit.querySelector(".pb_title_kit_size_4");
103
+ expect(text.textContent).toEqual("Jan 1")
104
+ });
105
+ });
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Playbook
4
- PREVIOUS_VERSION = "12.20.0"
5
- VERSION = "12.21.0"
4
+ PREVIOUS_VERSION = "12.22.0"
5
+ VERSION = "12.22.0.pre.alpha.PBNTR12checkingemptyfilters686"
6
6
  end
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: 12.21.0
4
+ version: 12.22.0.pre.alpha.PBNTR12checkingemptyfilters686
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: 2023-05-16 00:00:00.000000000 Z
12
+ date: 2023-05-19 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: actionpack
@@ -1721,6 +1721,7 @@ files:
1721
1721
  - app/pb_kits/playbook/pb_radio/radio.test.js
1722
1722
  - app/pb_kits/playbook/pb_rich_text_editor/TipTap/EditorButton.tsx
1723
1723
  - app/pb_kits/playbook/pb_rich_text_editor/TipTap/EditorTypes.ts
1724
+ - app/pb_kits/playbook/pb_rich_text_editor/TipTap/MoreExtensionsDropdown.tsx
1724
1725
  - app/pb_kits/playbook/pb_rich_text_editor/TipTap/Toolbar.tsx
1725
1726
  - app/pb_kits/playbook/pb_rich_text_editor/TipTap/ToolbarDropdown.tsx
1726
1727
  - app/pb_kits/playbook/pb_rich_text_editor/TipTap/ToolbarHistory.tsx
@@ -1740,6 +1741,8 @@ files:
1740
1741
  - app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_focus.jsx
1741
1742
  - app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_inline.html.erb
1742
1743
  - app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_inline.jsx
1744
+ - app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_more_extensions.jsx
1745
+ - app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_more_extensions.md
1743
1746
  - app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_preview.html.erb
1744
1747
  - app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_preview.jsx
1745
1748
  - app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_simple.html.erb
@@ -2347,8 +2350,8 @@ files:
2347
2350
  - app/pb_kits/playbook/pb_walkthrough/docs/example.yml
2348
2351
  - app/pb_kits/playbook/pb_walkthrough/docs/index.js
2349
2352
  - app/pb_kits/playbook/pb_walkthrough/walkthrough.test.jsx
2350
- - app/pb_kits/playbook/pb_weekday_stacked/_weekday_stacked.jsx
2351
2353
  - app/pb_kits/playbook/pb_weekday_stacked/_weekday_stacked.scss
2354
+ - app/pb_kits/playbook/pb_weekday_stacked/_weekday_stacked.tsx
2352
2355
  - app/pb_kits/playbook/pb_weekday_stacked/docs/_weekday_stacked_compact.html.erb
2353
2356
  - app/pb_kits/playbook/pb_weekday_stacked/docs/_weekday_stacked_compact.jsx
2354
2357
  - app/pb_kits/playbook/pb_weekday_stacked/docs/_weekday_stacked_default.html.erb
@@ -2359,6 +2362,7 @@ files:
2359
2362
  - app/pb_kits/playbook/pb_weekday_stacked/docs/index.js
2360
2363
  - app/pb_kits/playbook/pb_weekday_stacked/weekday_stacked.html.erb
2361
2364
  - app/pb_kits/playbook/pb_weekday_stacked/weekday_stacked.rb
2365
+ - app/pb_kits/playbook/pb_weekday_stacked/weekday_stacked.test.jsx
2362
2366
  - app/pb_kits/playbook/playbook-doc.js
2363
2367
  - app/pb_kits/playbook/playbook-rails-react-bindings.js
2364
2368
  - app/pb_kits/playbook/playbook-rails.js
@@ -2487,7 +2491,7 @@ homepage: http://playbook.powerapp.cloud
2487
2491
  licenses:
2488
2492
  - ISC
2489
2493
  metadata: {}
2490
- post_install_message:
2494
+ post_install_message:
2491
2495
  rdoc_options: []
2492
2496
  require_paths:
2493
2497
  - lib
@@ -2498,12 +2502,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
2498
2502
  version: '0'
2499
2503
  required_rubygems_version: !ruby/object:Gem::Requirement
2500
2504
  requirements:
2501
- - - ">="
2505
+ - - ">"
2502
2506
  - !ruby/object:Gem::Version
2503
- version: '0'
2507
+ version: 1.3.1
2504
2508
  requirements: []
2505
2509
  rubygems_version: 3.3.7
2506
- signing_key:
2510
+ signing_key:
2507
2511
  specification_version: 4
2508
2512
  summary: Playbook Design System
2509
2513
  test_files: []