openproject-primer_view_components 0.29.0 → 0.29.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +6 -0
- data/app/assets/javascripts/app/components/primer/open_project/page_header_element.d.ts +0 -2
- data/app/assets/javascripts/primer_view_components.js +1 -1
- data/app/assets/javascripts/primer_view_components.js.map +1 -1
- data/app/assets/styles/primer_view_components.css +1 -1
- data/app/assets/styles/primer_view_components.css.map +1 -1
- data/app/components/primer/open_project/page_header.css +1 -1
- data/app/components/primer/open_project/page_header.css.json +0 -1
- data/app/components/primer/open_project/page_header.css.map +1 -1
- data/app/components/primer/open_project/page_header.html.erb +2 -0
- data/app/components/primer/open_project/page_header.pcss +0 -10
- data/app/components/primer/open_project/page_header.rb +53 -36
- data/app/components/primer/open_project/page_header_element.d.ts +0 -2
- data/app/components/primer/open_project/page_header_element.js +1 -16
- data/app/components/primer/open_project/page_header_element.ts +1 -16
- data/app/components/primer/open_project/zen_mode_button.html.erb +1 -0
- data/app/components/primer/open_project/zen_mode_button.rb +2 -0
- data/lib/primer/view_components/version.rb +1 -1
- data/previews/primer/open_project/page_header_preview.rb +15 -0
- data/static/classes.json +0 -3
- data/static/constants.json +1 -1
- data/static/info_arch.json +13 -0
- data/static/previews.json +13 -0
- metadata +2 -2
@@ -1 +1 @@
|
|
1
|
-
.PageHeader{border-bottom:var(--borderWidth-thin) solid var(--borderColor-muted);display:flex;flex-flow:column;margin-bottom:var(--stack-gap-normal);padding-bottom:var(--stack-padding-condensed)}.PageHeader-contextBar{margin-bottom:var(--base-size-8)}.PageHeader-contextBar,.PageHeader-titleBar{align-items:center;display:flex;flex-flow:row;justify-content:flex-end}.PageHeader-titleBar{margin-bottom:var(--space-xsmall)}.PageHeader-title{flex:1 1 auto;font-size:var(--text-title-size-medium);font-weight:var(--base-text-weight-normal)}.PageHeader-title--large{font-size:var(--text-title-size-large)}.PageHeader-description{color:var(--fgColor-muted);flex:1 100%;font-size:var(--text-body-size-medium)}.PageHeader-actions{align-items:center;display:flex;justify-content:flex-end}
|
1
|
+
.PageHeader{border-bottom:var(--borderWidth-thin) solid var(--borderColor-muted);display:flex;flex-flow:column;margin-bottom:var(--stack-gap-normal);padding-bottom:var(--stack-padding-condensed)}.PageHeader-contextBar{margin-bottom:var(--base-size-8)}.PageHeader-contextBar,.PageHeader-titleBar{align-items:center;display:flex;flex-flow:row;justify-content:flex-end}.PageHeader-titleBar{margin-bottom:var(--space-xsmall)}.PageHeader-title{flex:1 1 auto;font-size:var(--text-title-size-medium);font-weight:var(--base-text-weight-normal)}.PageHeader-title--large{font-size:var(--text-title-size-large)}.PageHeader-description{color:var(--fgColor-muted);flex:1 100%;font-size:var(--text-body-size-medium)}.PageHeader-actions{align-items:center;display:flex;justify-content:flex-end}.PageHeader-breadcrumbs{display:block;width:100%}.PageHeader-leadingAction{margin-right:var(--base-size-4);margin-top:2px}.PageHeader-parentLink{flex:1 1 auto}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["page_header.pcss"],"names":[],"mappings":"AAEA,YAIE,oEAAqE,CAHrE,YAAa,CAIb,gBAAiB,CAFjB,qCAAsC,CADtC,6CAIF,CAEA,uBAKE,gCACF,CAEA,4CAJE,kBAAmB,CAHnB,YAAa,CACb,aAAc,CACd,wBAWF,CANA,qBAKE,iCACF,CAEA,kBAGE,aAAc,CAFd,uCAAwC,CACxC,0CAEF,CAEA,yBACE,sCACF,CAGA,wBAEE,0BAA2B,CAC3B,WAAY,CAFZ,sCAGF,CAEA,oBAGE,kBAAmB,CADnB,YAAa,CADb,wBAGF,
|
1
|
+
{"version":3,"sources":["page_header.pcss"],"names":[],"mappings":"AAEA,YAIE,oEAAqE,CAHrE,YAAa,CAIb,gBAAiB,CAFjB,qCAAsC,CADtC,6CAIF,CAEA,uBAKE,gCACF,CAEA,4CAJE,kBAAmB,CAHnB,YAAa,CACb,aAAc,CACd,wBAWF,CANA,qBAKE,iCACF,CAEA,kBAGE,aAAc,CAFd,uCAAwC,CACxC,0CAEF,CAEA,yBACE,sCACF,CAGA,wBAEE,0BAA2B,CAC3B,WAAY,CAFZ,sCAGF,CAEA,oBAGE,kBAAmB,CADnB,YAAa,CADb,wBAGF,CAEA,wBACE,aAAc,CACd,UACF,CAEA,0BAEE,+BAAgC,CADhC,cAEF,CAEA,uBACE,aACF","file":"page_header.css","sourcesContent":["/* OP PageHeader */\n\n.PageHeader {\n display: flex;\n padding-bottom: var(--stack-padding-condensed);\n margin-bottom: var(--stack-gap-normal);\n border-bottom: var(--borderWidth-thin) solid var(--borderColor-muted);\n flex-flow: column;\n}\n\n.PageHeader-contextBar {\n display: flex;\n flex-flow: row;\n justify-content: flex-end;\n align-items: center;\n margin-bottom: var(--base-size-8);\n}\n\n.PageHeader-titleBar {\n display: flex;\n flex-flow: row;\n justify-content: flex-end;\n align-items: center; /* Keep back button vertically aligned. */\n margin-bottom: var(--space-xsmall);\n}\n\n.PageHeader-title {\n font-size: var(--text-title-size-medium);\n font-weight: var(--base-text-weight-normal);\n flex: 1 1 auto;\n}\n\n.PageHeader-title--large {\n font-size: var(--text-title-size-large);\n}\n\n/* One-liner of supporting text */\n.PageHeader-description {\n font-size: var(--text-body-size-medium);\n color: var(--fgColor-muted);\n flex: 1 100%;\n}\n\n.PageHeader-actions {\n justify-content: flex-end;\n display: flex;\n align-items: center;\n}\n\n.PageHeader-breadcrumbs {\n display: block;\n width: 100%;\n}\n\n.PageHeader-leadingAction {\n margin-top: 2px; /* to center align with label */\n margin-right: var(--base-size-4);\n}\n\n.PageHeader-parentLink {\n flex: 1 1 auto;\n}\n"]}
|
@@ -8,6 +8,8 @@
|
|
8
8
|
<% menu.with_show_button(icon: :"kebab-horizontal", size: :small, "aria-label": @mobile_menu_label) %>
|
9
9
|
<% @desktop_menu_block.call(menu) unless @desktop_menu_block.nil? %>
|
10
10
|
<% end %>
|
11
|
+
<% elsif actions.length == 1 && @mobile_action.present? %>
|
12
|
+
<%= render(@mobile_action) { |el| @mobile_action_block.call(el) unless @mobile_action_block.nil?} %>
|
11
13
|
<% end %>
|
12
14
|
</div>
|
13
15
|
<% end %>
|
@@ -47,16 +47,6 @@
|
|
47
47
|
align-items: center;
|
48
48
|
}
|
49
49
|
|
50
|
-
.PageHeader--singleAction .PageHeader-action {
|
51
|
-
@media (max-width: 543.98px) {
|
52
|
-
position: absolute;
|
53
|
-
top: 10px;
|
54
|
-
|
55
|
-
/* Normally, the actions are hidden on mobile, except for this special case of a single action */
|
56
|
-
display: flex !important;
|
57
|
-
}
|
58
|
-
}
|
59
|
-
|
60
50
|
.PageHeader-breadcrumbs {
|
61
51
|
display: block;
|
62
52
|
width: 100%;
|
@@ -21,7 +21,7 @@ module Primer
|
|
21
21
|
].freeze
|
22
22
|
|
23
23
|
DEFAULT_ACTION_SCHEME = :default
|
24
|
-
|
24
|
+
MOBILE_ACTIONS_DISPLAY = [:flex, :none].freeze
|
25
25
|
|
26
26
|
DEFAULT_LEADING_ACTION_DISPLAY = [:none, :flex].freeze
|
27
27
|
DEFAULT_BREADCRUMBS_DISPLAY = [:none, :flex].freeze
|
@@ -58,32 +58,37 @@ module Primer
|
|
58
58
|
#
|
59
59
|
# @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
|
60
60
|
renders_many :actions, types: {
|
61
|
-
icon_button: lambda { |icon:, mobile_icon:, label:, scheme: DEFAULT_ACTION_SCHEME, **system_arguments|
|
61
|
+
icon_button: lambda { |icon:, mobile_icon:, label:, scheme: DEFAULT_ACTION_SCHEME, **system_arguments, &block|
|
62
62
|
deny_tag_argument(**system_arguments)
|
63
63
|
|
64
|
-
system_arguments =
|
64
|
+
system_arguments[:icon] = icon
|
65
|
+
system_arguments[:"aria-label"] ||= label
|
66
|
+
system_arguments = set_action_arguments(system_arguments, scheme: scheme)
|
65
67
|
|
66
|
-
|
68
|
+
component = Primer::Beta::IconButton
|
69
|
+
create_mobile_alternatives(component, mobile_icon, label, scheme, **system_arguments, &block)
|
67
70
|
|
68
|
-
|
71
|
+
component.new(**system_arguments)
|
69
72
|
},
|
70
|
-
button: lambda { |mobile_icon:, mobile_label:, scheme: DEFAULT_ACTION_SCHEME, **system_arguments|
|
73
|
+
button: lambda { |mobile_icon:, mobile_label:, scheme: DEFAULT_ACTION_SCHEME, **system_arguments, &block|
|
71
74
|
deny_tag_argument(**system_arguments)
|
72
75
|
|
73
|
-
system_arguments = set_action_arguments(system_arguments, scheme: scheme
|
76
|
+
system_arguments = set_action_arguments(system_arguments, scheme: scheme)
|
74
77
|
|
75
|
-
|
78
|
+
component = Primer::Beta::Button
|
79
|
+
create_mobile_alternatives(component, mobile_icon, mobile_label, scheme, **system_arguments, &block)
|
76
80
|
|
77
|
-
|
81
|
+
component.new(**system_arguments)
|
78
82
|
},
|
79
|
-
zen_mode_button: lambda { |mobile_icon: Primer::OpenProject::ZenModeButton::ZEN_MODE_BUTTON_ICON, mobile_label: Primer::OpenProject::ZenModeButton::ZEN_MODE_BUTTON_LABEL, **system_arguments|
|
83
|
+
zen_mode_button: lambda { |mobile_icon: Primer::OpenProject::ZenModeButton::ZEN_MODE_BUTTON_ICON, mobile_label: Primer::OpenProject::ZenModeButton::ZEN_MODE_BUTTON_LABEL, **system_arguments, &block|
|
80
84
|
deny_tag_argument(**system_arguments)
|
81
85
|
|
82
|
-
system_arguments = set_action_arguments(system_arguments, scheme: DEFAULT_ACTION_SCHEME
|
86
|
+
system_arguments = set_action_arguments(system_arguments, scheme: DEFAULT_ACTION_SCHEME)
|
83
87
|
|
84
|
-
|
88
|
+
component = Primer::OpenProject::ZenModeButton
|
89
|
+
create_mobile_alternatives(component, mobile_icon, mobile_label, DEFAULT_ACTION_SCHEME, **system_arguments, &block)
|
85
90
|
|
86
|
-
|
91
|
+
component.new(**system_arguments)
|
87
92
|
},
|
88
93
|
|
89
94
|
link: lambda { |mobile_icon:, mobile_label:, scheme: DEFAULT_ACTION_SCHEME, **system_arguments|
|
@@ -109,29 +114,31 @@ module Primer
|
|
109
114
|
renders: lambda { |**system_arguments, &block|
|
110
115
|
deny_tag_argument(**system_arguments)
|
111
116
|
|
112
|
-
system_arguments[:menu_arguments] = set_action_arguments(system_arguments[:menu_arguments])
|
113
117
|
system_arguments[:button_arguments] ||= {}
|
114
|
-
system_arguments[:button_arguments][:
|
115
|
-
system_arguments[:button_arguments][:data][:targets] = "page-header.actionItems"
|
118
|
+
system_arguments[:button_arguments] = set_action_arguments(system_arguments[:button_arguments])
|
116
119
|
|
117
120
|
# Add the options individually to the mobile menu in the template
|
118
121
|
@desktop_menu_block = block
|
119
122
|
|
120
|
-
Primer::OpenProject::PageHeader::Menu
|
123
|
+
component = Primer::OpenProject::PageHeader::Menu
|
124
|
+
create_mobile_single_action(component, **system_arguments, &block)
|
125
|
+
|
126
|
+
component.new(**system_arguments)
|
121
127
|
},
|
122
128
|
},
|
123
129
|
dialog: {
|
124
|
-
renders: lambda { |mobile_icon:, mobile_label:, **system_arguments|
|
130
|
+
renders: lambda { |mobile_icon:, mobile_label:, **system_arguments, &block|
|
125
131
|
deny_tag_argument(**system_arguments)
|
126
132
|
|
127
133
|
# The id will be automatically calculated for the trigger button, so we have to behave the same, for the mobile click to work
|
128
134
|
system_arguments[:button_arguments] ||= {}
|
129
135
|
system_arguments[:button_arguments][:id] = "dialog-show-#{system_arguments[:dialog_arguments][:id]}"
|
130
|
-
system_arguments[:button_arguments] = set_action_arguments(system_arguments[:button_arguments]
|
136
|
+
system_arguments[:button_arguments] = set_action_arguments(system_arguments[:button_arguments])
|
131
137
|
|
132
|
-
|
138
|
+
component = Primer::OpenProject::PageHeader::Dialog
|
139
|
+
create_mobile_alternatives(component, mobile_icon, mobile_label, :default, **system_arguments, &block)
|
133
140
|
|
134
|
-
|
141
|
+
component.new(**system_arguments)
|
135
142
|
},
|
136
143
|
},
|
137
144
|
}
|
@@ -212,7 +219,7 @@ module Primer
|
|
212
219
|
)
|
213
220
|
|
214
221
|
@mobile_action_menu = Primer::Alpha::ActionMenu.new(
|
215
|
-
display:
|
222
|
+
display: MOBILE_ACTIONS_DISPLAY,
|
216
223
|
anchor_align: :end
|
217
224
|
)
|
218
225
|
end
|
@@ -224,15 +231,6 @@ module Primer
|
|
224
231
|
title? && breadcrumbs?
|
225
232
|
end
|
226
233
|
|
227
|
-
def before_render
|
228
|
-
@system_arguments[:classes] = class_names(
|
229
|
-
@system_arguments[:classes],
|
230
|
-
"PageHeader--singleAction": !render_mobile_menu?
|
231
|
-
)
|
232
|
-
|
233
|
-
content
|
234
|
-
end
|
235
|
-
|
236
234
|
def render_mobile_menu?
|
237
235
|
actions.count > 1
|
238
236
|
end
|
@@ -242,26 +240,32 @@ module Primer
|
|
242
240
|
def set_action_arguments(system_arguments, scheme: nil, button_action: false)
|
243
241
|
system_arguments[:ml] ||= 2
|
244
242
|
system_arguments[:display] = [:none, :flex]
|
243
|
+
system_arguments[:size] = :medium
|
245
244
|
system_arguments[:scheme] = scheme unless scheme.nil?
|
246
245
|
system_arguments[:classes] = class_names(
|
247
246
|
system_arguments[:classes],
|
248
247
|
"PageHeader-action",
|
249
248
|
)
|
250
|
-
if button_action
|
251
|
-
system_arguments[:data] ||= {}
|
252
|
-
system_arguments[:data][:targets] = "page-header.actionItems"
|
253
|
-
end
|
254
249
|
|
255
250
|
system_arguments[:id] ||= self.class.generate_id
|
256
251
|
system_arguments
|
257
252
|
end
|
258
253
|
|
254
|
+
def create_mobile_alternatives(component, mobile_icon, mobile_label, scheme, **system_arguments, &block)
|
255
|
+
# All actions should collapse into a single actionMenu on mobile
|
256
|
+
add_option_to_mobile_menu(system_arguments, mobile_icon, mobile_label, scheme)
|
257
|
+
|
258
|
+
# Except for single actions, which remain as they are, just smaller.
|
259
|
+
create_mobile_single_action(component, **system_arguments, &block)
|
260
|
+
end
|
261
|
+
|
259
262
|
def add_option_to_mobile_menu(system_arguments, mobile_icon, mobile_label, scheme)
|
260
263
|
unless mobile_icon.nil? || mobile_label.nil?
|
261
264
|
# In action menus, only :default and :danger are allowed
|
262
265
|
scheme = DEFAULT_ACTION_SCHEME unless scheme == :danger
|
263
266
|
|
264
|
-
|
267
|
+
id = system_arguments[:button_arguments].present? ? system_arguments[:button_arguments][:id] : system_arguments[:id]
|
268
|
+
with_menu_item(id: id, label: mobile_label, scheme: scheme) do |c|
|
265
269
|
c.with_leading_visual_icon(icon: mobile_icon)
|
266
270
|
end
|
267
271
|
end
|
@@ -281,6 +285,19 @@ module Primer
|
|
281
285
|
)
|
282
286
|
end
|
283
287
|
|
288
|
+
def create_mobile_single_action(component, **system_arguments, &block)
|
289
|
+
# Single actions shall not collapse into an action menu on mobile, but keep their state.
|
290
|
+
# However the position and size will change
|
291
|
+
unless render_mobile_menu?
|
292
|
+
mobile_options = system_arguments[:button_arguments].present? ?
|
293
|
+
{ button_arguments: { display: MOBILE_ACTIONS_DISPLAY, size: :small } } :
|
294
|
+
{ display: MOBILE_ACTIONS_DISPLAY, size: :small }
|
295
|
+
|
296
|
+
@mobile_action = component.new(**system_arguments.deep_merge(mobile_options))
|
297
|
+
@mobile_action_block = block
|
298
|
+
end
|
299
|
+
end
|
300
|
+
|
284
301
|
# transform anchor tag strings to {href, text} objects
|
285
302
|
# e.g "\u003ca href=\"/admin\"\u003eAdministration\u003c/a\u003e"
|
286
303
|
def anchor_string_to_object(html_string)
|
@@ -4,20 +4,8 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
4
4
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
5
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
6
6
|
};
|
7
|
-
import { controller
|
7
|
+
import { controller } from '@github/catalyst';
|
8
8
|
let PageHeaderElement = class PageHeaderElement extends HTMLElement {
|
9
|
-
connectedCallback() {
|
10
|
-
for (const item of this.actionItems) {
|
11
|
-
/*
|
12
|
-
If there is only one action to be shown, we show that instead of the mobile action menu. However, the buttons should be the smaller button variant.
|
13
|
-
Unfortunately, the `size` attribute does not support responsive attributes and the .pcss syntax does not support inheritance between classes.
|
14
|
-
So we have to add the class manually here.
|
15
|
-
*/
|
16
|
-
if (window.innerWidth <= 544) {
|
17
|
-
item.classList.add('Button--small');
|
18
|
-
}
|
19
|
-
}
|
20
|
-
}
|
21
9
|
menuItemClick(event) {
|
22
10
|
const currentTarget = event.currentTarget;
|
23
11
|
const id = currentTarget?.getAttribute('data-for');
|
@@ -26,9 +14,6 @@ let PageHeaderElement = class PageHeaderElement extends HTMLElement {
|
|
26
14
|
}
|
27
15
|
}
|
28
16
|
};
|
29
|
-
__decorate([
|
30
|
-
targets
|
31
|
-
], PageHeaderElement.prototype, "actionItems", void 0);
|
32
17
|
PageHeaderElement = __decorate([
|
33
18
|
controller
|
34
19
|
], PageHeaderElement);
|
@@ -1,22 +1,7 @@
|
|
1
|
-
import {controller
|
1
|
+
import {controller} from '@github/catalyst'
|
2
2
|
|
3
3
|
@controller
|
4
4
|
class PageHeaderElement extends HTMLElement {
|
5
|
-
@targets actionItems: HTMLElement[]
|
6
|
-
|
7
|
-
connectedCallback() {
|
8
|
-
for (const item of this.actionItems) {
|
9
|
-
/*
|
10
|
-
If there is only one action to be shown, we show that instead of the mobile action menu. However, the buttons should be the smaller button variant.
|
11
|
-
Unfortunately, the `size` attribute does not support responsive attributes and the .pcss syntax does not support inheritance between classes.
|
12
|
-
So we have to add the class manually here.
|
13
|
-
*/
|
14
|
-
if (window.innerWidth <= 544) {
|
15
|
-
item.classList.add('Button--small')
|
16
|
-
}
|
17
|
-
}
|
18
|
-
}
|
19
|
-
|
20
5
|
menuItemClick(event: Event) {
|
21
6
|
const currentTarget = event.currentTarget as HTMLButtonElement
|
22
7
|
|
@@ -120,6 +120,21 @@ module Primer
|
|
120
120
|
end
|
121
121
|
end
|
122
122
|
|
123
|
+
|
124
|
+
# @label With a single action
|
125
|
+
# The single action will not be transformed into a menu on mobile, but remains in a smaller variant
|
126
|
+
def single_action
|
127
|
+
render(Primer::OpenProject::PageHeader.new) do |component|
|
128
|
+
component.with_title { "Great news" }
|
129
|
+
component.with_breadcrumbs([{ href: "/foo", text: "Foo" }, { href: "/bar", text: "Bar" }, "Baz"])
|
130
|
+
|
131
|
+
component.with_action_button(mobile_icon: "plus", mobile_label: "Meeting", scheme: :primary) do |button|
|
132
|
+
button.with_leading_visual_icon(icon: "plus")
|
133
|
+
"Meeting"
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
123
138
|
# @label With leading action (on wide)
|
124
139
|
# **Leading action** is only shown on **wide screens** by default.
|
125
140
|
# If you want to override that behaviour please use the system_argument: **display**
|
data/static/classes.json
CHANGED
data/static/constants.json
CHANGED
data/static/info_arch.json
CHANGED
@@ -16689,6 +16689,19 @@
|
|
16689
16689
|
]
|
16690
16690
|
}
|
16691
16691
|
},
|
16692
|
+
{
|
16693
|
+
"preview_path": "primer/open_project/page_header/single_action",
|
16694
|
+
"name": "single_action",
|
16695
|
+
"snapshot": "false",
|
16696
|
+
"skip_rules": {
|
16697
|
+
"wont_fix": [
|
16698
|
+
"region"
|
16699
|
+
],
|
16700
|
+
"will_fix": [
|
16701
|
+
"color-contrast"
|
16702
|
+
]
|
16703
|
+
}
|
16704
|
+
},
|
16692
16705
|
{
|
16693
16706
|
"preview_path": "primer/open_project/page_header/leading_action",
|
16694
16707
|
"name": "leading_action",
|
data/static/previews.json
CHANGED
@@ -5274,6 +5274,19 @@
|
|
5274
5274
|
]
|
5275
5275
|
}
|
5276
5276
|
},
|
5277
|
+
{
|
5278
|
+
"preview_path": "primer/open_project/page_header/single_action",
|
5279
|
+
"name": "single_action",
|
5280
|
+
"snapshot": "false",
|
5281
|
+
"skip_rules": {
|
5282
|
+
"wont_fix": [
|
5283
|
+
"region"
|
5284
|
+
],
|
5285
|
+
"will_fix": [
|
5286
|
+
"color-contrast"
|
5287
|
+
]
|
5288
|
+
}
|
5289
|
+
},
|
5277
5290
|
{
|
5278
5291
|
"preview_path": "primer/open_project/page_header/leading_action",
|
5279
5292
|
"name": "leading_action",
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: openproject-primer_view_components
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.29.
|
4
|
+
version: 0.29.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- GitHub Open Source
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2024-04-
|
12
|
+
date: 2024-04-26 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: actionview
|