openproject-primer_view_components 0.76.0 → 0.77.0
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +6 -0
- 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 +3 -1
- data/app/components/primer/open_project/page_header.css.map +1 -1
- data/app/components/primer/open_project/page_header.pcss +12 -0
- data/app/components/primer/open_project/page_header.rb +8 -4
- data/lib/primer/view_components/version.rb +1 -1
- data/previews/primer/open_project/page_header_preview.rb +26 -10
- data/static/classes.json +3 -0
- data/static/info_arch.json +22 -9
- data/static/previews.json +21 -8
- metadata +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
.PageHeader{border-bottom:var(--borderWidth-thin) solid var(--borderColor-muted);display:flex;flex-flow:column;margin-bottom:var(--base-size-16);padding-bottom:var(--base-size-8)}.PageHeader--withTabNav{border-bottom:none;margin-bottom:0;padding-bottom:0}.PageHeader-contextBar{height:var(--control-small-size)}.PageHeader-contextBar,.PageHeader-titleBar{align-items:center;display:flex;flex-flow:row;justify-content:flex-end;margin-bottom:var(--base-size-8)}.PageHeader-title{flex:1 1 auto;font-size:var(--text-title-size-medium)}.PageHeader-title--large{font-size:var(--text-title-size-large)}.PageHeader-description{color:var(--fgColor-muted);flex:1 auto;font-size:var(--text-body-size-medium)}.PageHeader-description--underlined-links a{-webkit-text-decoration:underline;text-decoration:underline}.PageHeader-tabNavBar{overflow:auto}.PageHeader-tabNavBar .PageHeader-tabNav{min-width:max-content}.PageHeader--withTabNav .PageHeader-description{margin-bottom:var(--base-size-16)}.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:var(--base-size-2)}.PageHeader-parentLink{flex:1 1 auto}
|
|
1
|
+
.PageHeader{border-bottom:var(--borderWidth-thin) solid var(--borderColor-muted);display:flex;flex-flow:column;margin-bottom:var(--base-size-16);padding-bottom:var(--base-size-8)}.PageHeader--withTabNav{border-bottom:none;margin-bottom:0;padding-bottom:0}.PageHeader-contextBar{height:var(--control-small-size)}.PageHeader-contextBar,.PageHeader-titleBar{align-items:center;display:flex;flex-flow:row;justify-content:flex-end;margin-bottom:var(--base-size-8)}.PageHeader-title{flex:1 1 auto;font-size:var(--text-title-size-medium)}.PageHeader-title--large{font-size:var(--text-title-size-large)}.PageHeader-description{color:var(--fgColor-muted);flex:1 auto;font-size:var(--text-body-size-medium)}.PageHeader-description--underlined-links a{-webkit-text-decoration:underline;text-decoration:underline}.PageHeader-tabNavBar{overflow:auto}.PageHeader-tabNavBar .PageHeader-tabNav{min-width:max-content}.PageHeader--withTabNav .PageHeader-description{margin-bottom:var(--base-size-16)}.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:var(--base-size-2)}.PageHeader-parentLink{flex:1 1 auto}@media screen and (min-width:543.98px){.PageHeader--noBreadcrumb .PageHeader-contextBar{display:none}}.PageHeader--noBreadcrumb .PageHeader-titleBar{height:var(--control-small-size)}
|
|
@@ -15,6 +15,8 @@
|
|
|
15
15
|
".PageHeader-actions",
|
|
16
16
|
".PageHeader-breadcrumbs",
|
|
17
17
|
".PageHeader-leadingAction",
|
|
18
|
-
".PageHeader-parentLink"
|
|
18
|
+
".PageHeader-parentLink",
|
|
19
|
+
".PageHeader--noBreadcrumb .PageHeader-contextBar",
|
|
20
|
+
".PageHeader--noBreadcrumb .PageHeader-titleBar"
|
|
19
21
|
]
|
|
20
22
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["page_header.pcss"],"names":[],"mappings":"AAEA,YAIE,oEAAqE,CAHrE,YAAa,CAIb,gBAAiB,CAFjB,iCAAkC,CADlC,iCAIF,CAEA,wBACE,kBAAmB,CAEnB,eAAgB,CADhB,gBAEF,CAEA,uBAME,gCACF,CAEA,4CALE,kBAAmB,CAHnB,YAAa,CACb,aAAc,CACd,wBAAyB,CAEzB,gCAUF,CAEA,kBAEE,aAAc,CADd,uCAEF,CAEA,yBACE,sCACF,CAGA,wBAEE,0BAA2B,CAC3B,WAAY,CAFZ,sCAGF,CAEA,4CAEE,iCAA0B,CAA1B,yBACF,CAEA,sBACE,aACF,CAEA,yCACE,qBACF,CAEA,gDACE,iCACF,CAEA,oBAGE,kBAAmB,CADnB,YAAa,CADb,wBAGF,CAEA,wBACE,aAAc,CACd,UACF,CAEA,0BAEE,+BAAgC,CADhC,6BAEF,CAEA,uBACE,aACF","file":"page_header.css","sourcesContent":["/* OP PageHeader */\n\n.PageHeader {\n display: flex;\n padding-bottom: var(--base-size-8);\n margin-bottom: var(--base-size-16);\n border-bottom: var(--borderWidth-thin) solid var(--borderColor-muted);\n flex-flow: column;\n}\n\n.PageHeader--withTabNav {\n border-bottom: none;\n padding-bottom: 0;\n margin-bottom: 0;\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 height: var(--control-small-size);\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(--base-size-8);\n}\n\n.PageHeader-title {\n font-size: var(--text-title-size-medium);\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 auto;\n}\n\n.PageHeader-description--underlined-links a {\n /* Ensure the accessibility is met, given that the description is written in light grey */\n text-decoration: underline;\n}\n\n.PageHeader-tabNavBar {\n overflow: auto;\n}\n\n.PageHeader-tabNavBar .PageHeader-tabNav {\n min-width: max-content;\n}\n\n.PageHeader--withTabNav .PageHeader-description {\n margin-bottom: var(--base-size-16);\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: var(--base-size-2); /* to center align with label */\n margin-right: var(--base-size-4);\n}\n\n.PageHeader-parentLink {\n flex: 1 1 auto;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["page_header.pcss"],"names":[],"mappings":"AAEA,YAIE,oEAAqE,CAHrE,YAAa,CAIb,gBAAiB,CAFjB,iCAAkC,CADlC,iCAIF,CAEA,wBACE,kBAAmB,CAEnB,eAAgB,CADhB,gBAEF,CAEA,uBAME,gCACF,CAEA,4CALE,kBAAmB,CAHnB,YAAa,CACb,aAAc,CACd,wBAAyB,CAEzB,gCAUF,CAEA,kBAEE,aAAc,CADd,uCAEF,CAEA,yBACE,sCACF,CAGA,wBAEE,0BAA2B,CAC3B,WAAY,CAFZ,sCAGF,CAEA,4CAEE,iCAA0B,CAA1B,yBACF,CAEA,sBACE,aACF,CAEA,yCACE,qBACF,CAEA,gDACE,iCACF,CAEA,oBAGE,kBAAmB,CADnB,YAAa,CADb,wBAGF,CAEA,wBACE,aAAc,CACd,UACF,CAEA,0BAEE,+BAAgC,CADhC,6BAEF,CAEA,uBACE,aACF,CAGA,uCACE,iDACE,YACF,CACF,CAGA,+CACE,gCACF","file":"page_header.css","sourcesContent":["/* OP PageHeader */\n\n.PageHeader {\n display: flex;\n padding-bottom: var(--base-size-8);\n margin-bottom: var(--base-size-16);\n border-bottom: var(--borderWidth-thin) solid var(--borderColor-muted);\n flex-flow: column;\n}\n\n.PageHeader--withTabNav {\n border-bottom: none;\n padding-bottom: 0;\n margin-bottom: 0;\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 height: var(--control-small-size);\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(--base-size-8);\n}\n\n.PageHeader-title {\n font-size: var(--text-title-size-medium);\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 auto;\n}\n\n.PageHeader-description--underlined-links a {\n /* Ensure the accessibility is met, given that the description is written in light grey */\n text-decoration: underline;\n}\n\n.PageHeader-tabNavBar {\n overflow: auto;\n}\n\n.PageHeader-tabNavBar .PageHeader-tabNav {\n min-width: max-content;\n}\n\n.PageHeader--withTabNav .PageHeader-description {\n margin-bottom: var(--base-size-16);\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: var(--base-size-2); /* to center align with label */\n margin-right: var(--base-size-4);\n}\n\n.PageHeader-parentLink {\n flex: 1 1 auto;\n}\n\n/* Hide the context bar on desktop when no breadcrumb is visible */\n@media screen and (min-width: 543.98px) {\n .PageHeader--noBreadcrumb .PageHeader-contextBar {\n display: none;\n }\n}\n\n/* Match the title bar height with the toggle menu button for proper vertical alignment */\n.PageHeader--noBreadcrumb .PageHeader-titleBar {\n height: var(--control-small-size);\n}"]}
|
|
@@ -83,3 +83,15 @@
|
|
|
83
83
|
.PageHeader-parentLink {
|
|
84
84
|
flex: 1 1 auto;
|
|
85
85
|
}
|
|
86
|
+
|
|
87
|
+
/* Hide the context bar on desktop when no breadcrumb is visible */
|
|
88
|
+
@media screen and (min-width: 543.98px) {
|
|
89
|
+
.PageHeader--noBreadcrumb .PageHeader-contextBar {
|
|
90
|
+
display: none;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/* Match the title bar height with the toggle menu button for proper vertical alignment */
|
|
95
|
+
.PageHeader--noBreadcrumb .PageHeader-titleBar {
|
|
96
|
+
height: var(--control-small-size);
|
|
97
|
+
}
|
|
@@ -40,7 +40,6 @@ module Primer
|
|
|
40
40
|
"PageHeader-title",
|
|
41
41
|
"PageHeader-title--#{variant}"
|
|
42
42
|
)
|
|
43
|
-
|
|
44
43
|
Primer::OpenProject::PageHeader::Title.new(state: @state, **system_arguments)
|
|
45
44
|
}
|
|
46
45
|
|
|
@@ -181,12 +180,17 @@ module Primer
|
|
|
181
180
|
Primer::Beta::IconButton.new(icon: icon, **system_arguments)
|
|
182
181
|
}
|
|
183
182
|
|
|
184
|
-
#
|
|
185
|
-
#
|
|
186
|
-
#
|
|
183
|
+
# Using PageHeader without breadcrumbs is only recommended in special cases.
|
|
184
|
+
# In doubt, please check the PageHeader component documentation.
|
|
187
185
|
# @param items [Array<String, Hash>] Items is an array of strings, hash {href, text} or an anchor tag string
|
|
188
186
|
# @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
|
|
189
187
|
renders_one :breadcrumbs, lambda { |items, selected_item_font_weight: :bold, **system_arguments|
|
|
188
|
+
if items.nil?
|
|
189
|
+
# No breadcrumbs → mark the PageHeader with a special class
|
|
190
|
+
@system_arguments[:classes] = class_names(@system_arguments[:classes], "PageHeader--noBreadcrumb")
|
|
191
|
+
return
|
|
192
|
+
end
|
|
193
|
+
|
|
190
194
|
system_arguments[:classes] = class_names(system_arguments[:classes], "PageHeader-breadcrumbs")
|
|
191
195
|
system_arguments[:display] ||= DEFAULT_BREADCRUMBS_DISPLAY
|
|
192
196
|
|
|
@@ -191,6 +191,32 @@ module Primer
|
|
|
191
191
|
end
|
|
192
192
|
end
|
|
193
193
|
|
|
194
|
+
# @label Without breadcrumbs
|
|
195
|
+
# A PageHeader example that renders without breadcrumbs.
|
|
196
|
+
# This should only be done for *entry pages* (such as overview pages).
|
|
197
|
+
# In case of doubt, please check with the Dream team.
|
|
198
|
+
def without_breadcrumbs
|
|
199
|
+
render(Primer::OpenProject::PageHeader.new) do |header|
|
|
200
|
+
header.with_title { "Hello" }
|
|
201
|
+
header.with_breadcrumbs(nil)
|
|
202
|
+
header.with_description { "This PageHeader does not have any breadcrumbs." }
|
|
203
|
+
header.with_action_button(mobile_icon: "star", mobile_label: "Star") do |button|
|
|
204
|
+
button.with_leading_visual_icon(icon: "star")
|
|
205
|
+
"Star"
|
|
206
|
+
end
|
|
207
|
+
end
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
# @label With skipable breadcrumb items
|
|
211
|
+
def skip_breadcrumb_item
|
|
212
|
+
render(Primer::OpenProject::PageHeader.new) do |component|
|
|
213
|
+
component.with_title { "Resize me to mobile screen size" }
|
|
214
|
+
component.with_breadcrumbs([{ href: "/foo", text: "Foo" },
|
|
215
|
+
{ href: "/bar", text: "Bar", skip_for_mobile: true },
|
|
216
|
+
"Baz"])
|
|
217
|
+
end
|
|
218
|
+
end
|
|
219
|
+
|
|
194
220
|
# @label With tab nav
|
|
195
221
|
#
|
|
196
222
|
def tab_nav
|
|
@@ -257,16 +283,6 @@ module Primer
|
|
|
257
283
|
end
|
|
258
284
|
end
|
|
259
285
|
|
|
260
|
-
# @label With skipable breadcrumb items
|
|
261
|
-
def skip_breadcrumb_item
|
|
262
|
-
render(Primer::OpenProject::PageHeader.new) do |component|
|
|
263
|
-
component.with_title { "Resize me to mobile screen size" }
|
|
264
|
-
component.with_breadcrumbs([{ href: "/foo", text: "Foo" },
|
|
265
|
-
{ href: "/bar", text: "Bar", skip_for_mobile: true },
|
|
266
|
-
"Baz"])
|
|
267
|
-
end
|
|
268
|
-
end
|
|
269
|
-
|
|
270
286
|
# @label With a link in the description
|
|
271
287
|
def description
|
|
272
288
|
render_with_template(template: "primer/open_project/page_header_preview/description")
|
data/static/classes.json
CHANGED
data/static/info_arch.json
CHANGED
|
@@ -20376,7 +20376,7 @@
|
|
|
20376
20376
|
},
|
|
20377
20377
|
{
|
|
20378
20378
|
"name": "breadcrumbs",
|
|
20379
|
-
"description": "
|
|
20379
|
+
"description": "Using PageHeader without breadcrumbs is only recommended in special cases.\nIn doubt, please check the PageHeader component documentation.",
|
|
20380
20380
|
"parameters": [
|
|
20381
20381
|
{
|
|
20382
20382
|
"name": "items",
|
|
@@ -20564,8 +20564,8 @@
|
|
|
20564
20564
|
}
|
|
20565
20565
|
},
|
|
20566
20566
|
{
|
|
20567
|
-
"preview_path": "primer/open_project/page_header/
|
|
20568
|
-
"name": "
|
|
20567
|
+
"preview_path": "primer/open_project/page_header/without_breadcrumbs",
|
|
20568
|
+
"name": "without_breadcrumbs",
|
|
20569
20569
|
"snapshot": "false",
|
|
20570
20570
|
"skip_rules": {
|
|
20571
20571
|
"wont_fix": [
|
|
@@ -20577,8 +20577,8 @@
|
|
|
20577
20577
|
}
|
|
20578
20578
|
},
|
|
20579
20579
|
{
|
|
20580
|
-
"preview_path": "primer/open_project/page_header/
|
|
20581
|
-
"name": "
|
|
20580
|
+
"preview_path": "primer/open_project/page_header/skip_breadcrumb_item",
|
|
20581
|
+
"name": "skip_breadcrumb_item",
|
|
20582
20582
|
"snapshot": "false",
|
|
20583
20583
|
"skip_rules": {
|
|
20584
20584
|
"wont_fix": [
|
|
@@ -20590,8 +20590,8 @@
|
|
|
20590
20590
|
}
|
|
20591
20591
|
},
|
|
20592
20592
|
{
|
|
20593
|
-
"preview_path": "primer/open_project/page_header/
|
|
20594
|
-
"name": "
|
|
20593
|
+
"preview_path": "primer/open_project/page_header/tab_nav",
|
|
20594
|
+
"name": "tab_nav",
|
|
20595
20595
|
"snapshot": "false",
|
|
20596
20596
|
"skip_rules": {
|
|
20597
20597
|
"wont_fix": [
|
|
@@ -20603,8 +20603,21 @@
|
|
|
20603
20603
|
}
|
|
20604
20604
|
},
|
|
20605
20605
|
{
|
|
20606
|
-
"preview_path": "primer/open_project/page_header/
|
|
20607
|
-
"name": "
|
|
20606
|
+
"preview_path": "primer/open_project/page_header/segmented_control",
|
|
20607
|
+
"name": "segmented_control",
|
|
20608
|
+
"snapshot": "false",
|
|
20609
|
+
"skip_rules": {
|
|
20610
|
+
"wont_fix": [
|
|
20611
|
+
"region"
|
|
20612
|
+
],
|
|
20613
|
+
"will_fix": [
|
|
20614
|
+
"color-contrast"
|
|
20615
|
+
]
|
|
20616
|
+
}
|
|
20617
|
+
},
|
|
20618
|
+
{
|
|
20619
|
+
"preview_path": "primer/open_project/page_header/segmented_control_mobile_icons",
|
|
20620
|
+
"name": "segmented_control_mobile_icons",
|
|
20608
20621
|
"snapshot": "false",
|
|
20609
20622
|
"skip_rules": {
|
|
20610
20623
|
"wont_fix": [
|
data/static/previews.json
CHANGED
|
@@ -6184,8 +6184,8 @@
|
|
|
6184
6184
|
}
|
|
6185
6185
|
},
|
|
6186
6186
|
{
|
|
6187
|
-
"preview_path": "primer/open_project/page_header/
|
|
6188
|
-
"name": "
|
|
6187
|
+
"preview_path": "primer/open_project/page_header/without_breadcrumbs",
|
|
6188
|
+
"name": "without_breadcrumbs",
|
|
6189
6189
|
"snapshot": "false",
|
|
6190
6190
|
"skip_rules": {
|
|
6191
6191
|
"wont_fix": [
|
|
@@ -6197,8 +6197,8 @@
|
|
|
6197
6197
|
}
|
|
6198
6198
|
},
|
|
6199
6199
|
{
|
|
6200
|
-
"preview_path": "primer/open_project/page_header/
|
|
6201
|
-
"name": "
|
|
6200
|
+
"preview_path": "primer/open_project/page_header/skip_breadcrumb_item",
|
|
6201
|
+
"name": "skip_breadcrumb_item",
|
|
6202
6202
|
"snapshot": "false",
|
|
6203
6203
|
"skip_rules": {
|
|
6204
6204
|
"wont_fix": [
|
|
@@ -6210,8 +6210,8 @@
|
|
|
6210
6210
|
}
|
|
6211
6211
|
},
|
|
6212
6212
|
{
|
|
6213
|
-
"preview_path": "primer/open_project/page_header/
|
|
6214
|
-
"name": "
|
|
6213
|
+
"preview_path": "primer/open_project/page_header/tab_nav",
|
|
6214
|
+
"name": "tab_nav",
|
|
6215
6215
|
"snapshot": "false",
|
|
6216
6216
|
"skip_rules": {
|
|
6217
6217
|
"wont_fix": [
|
|
@@ -6223,8 +6223,21 @@
|
|
|
6223
6223
|
}
|
|
6224
6224
|
},
|
|
6225
6225
|
{
|
|
6226
|
-
"preview_path": "primer/open_project/page_header/
|
|
6227
|
-
"name": "
|
|
6226
|
+
"preview_path": "primer/open_project/page_header/segmented_control",
|
|
6227
|
+
"name": "segmented_control",
|
|
6228
|
+
"snapshot": "false",
|
|
6229
|
+
"skip_rules": {
|
|
6230
|
+
"wont_fix": [
|
|
6231
|
+
"region"
|
|
6232
|
+
],
|
|
6233
|
+
"will_fix": [
|
|
6234
|
+
"color-contrast"
|
|
6235
|
+
]
|
|
6236
|
+
}
|
|
6237
|
+
},
|
|
6238
|
+
{
|
|
6239
|
+
"preview_path": "primer/open_project/page_header/segmented_control_mobile_icons",
|
|
6240
|
+
"name": "segmented_control_mobile_icons",
|
|
6228
6241
|
"snapshot": "false",
|
|
6229
6242
|
"skip_rules": {
|
|
6230
6243
|
"wont_fix": [
|
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.
|
|
4
|
+
version: 0.77.0
|
|
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: 2025-11-
|
|
12
|
+
date: 2025-11-05 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: actionview
|