openproject-primer_view_components 0.8.0 → 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +21 -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 -0
- data/app/components/primer/open_project/page_header.css.json +10 -0
- data/app/components/primer/open_project/page_header.css.map +1 -0
- data/app/components/primer/open_project/page_header.html.erb +5 -0
- data/app/components/primer/open_project/page_header.pcss +36 -0
- data/app/components/primer/open_project/page_header.rb +59 -0
- data/app/components/primer/primer.pcss +3 -0
- data/app/lib/primer/status/dsl.rb +2 -1
- data/lib/primer/view_components/version.rb +1 -1
- data/previews/primer/open_project/page_header_preview/actions.html.erb +22 -0
- data/previews/primer/open_project/page_header_preview.rb +33 -0
- data/static/classes.json +12 -0
- data/static/previews.json +47 -0
- metadata +12 -4
@@ -0,0 +1 @@
|
|
1
|
+
.PageHeader{border-bottom:var(--borderWidth-thin,max(1px,.0625rem)) solid var(--borderColor-muted,var(--color-border-muted));display:flex;flex-flow:row wrap;justify-content:flex-end;margin-bottom:var(--stack-gap-normal,1rem);padding-bottom:var(--stack-padding-condensed,.5rem)}.PageHeader-title{flex:1 1 auto;order:0}.PageHeader-description{color:var(--fgColor-muted,var(--color-fg-muted));flex:1 100%;font-size:var(--text-body-size-medium,.875rem);order:2}.PageHeader-actions{align-self:center;justify-content:flex-end;margin:var(--base-size-4,.25rem) 0 var(--base-size-4,.25rem) var(--base-size-4,.25rem);order:1}.PageHeader-actions+.PageHeader-description{margin-top:var(--base-size-4,.25rem)}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["page_header.pcss"],"names":[],"mappings":"AAEA,YAIE,gHAAqE,CAHrE,YAAa,CAIb,kBAAmB,CACnB,wBAAyB,CAHzB,0CAAsC,CADtC,mDAKF,CAGA,kBACE,aAAc,CACd,OACF,CAGA,wBAEE,gDAA2B,CAC3B,WAAY,CAFZ,8CAAuC,CAGvC,OACF,CAGA,oBAEE,iBAAkB,CAClB,wBAAyB,CAFzB,sFAAkE,CAGlE,OAKF,CAHE,4CACE,oCACF","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: row wrap;\n justify-content: flex-end; /* Keep actions right aligned. */\n}\n\n/* <h2> sized heading with normal font weight */\n.PageHeader-title {\n flex: 1 1 auto;\n order: 0;\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 order: 2;\n}\n\n/* Add 1 or 2 buttons to the right of the heading */\n.PageHeader-actions {\n margin: var(--base-size-4) 0 var(--base-size-4) var(--base-size-4);\n align-self: center;\n justify-content: flex-end;\n order: 1;\n\n & + .PageHeader-description {\n margin-top: var(--base-size-4);\n }\n}\n"]}
|
@@ -0,0 +1,36 @@
|
|
1
|
+
/* OP PageHeader */
|
2
|
+
|
3
|
+
.PageHeader {
|
4
|
+
display: flex;
|
5
|
+
padding-bottom: var(--stack-padding-condensed);
|
6
|
+
margin-bottom: var(--stack-gap-normal);
|
7
|
+
border-bottom: var(--borderWidth-thin) solid var(--borderColor-muted);
|
8
|
+
flex-flow: row wrap;
|
9
|
+
justify-content: flex-end; /* Keep actions right aligned. */
|
10
|
+
}
|
11
|
+
|
12
|
+
/* <h2> sized heading with normal font weight */
|
13
|
+
.PageHeader-title {
|
14
|
+
flex: 1 1 auto;
|
15
|
+
order: 0;
|
16
|
+
}
|
17
|
+
|
18
|
+
/* One-liner of supporting text */
|
19
|
+
.PageHeader-description {
|
20
|
+
font-size: var(--text-body-size-medium);
|
21
|
+
color: var(--fgColor-muted);
|
22
|
+
flex: 1 100%;
|
23
|
+
order: 2;
|
24
|
+
}
|
25
|
+
|
26
|
+
/* Add 1 or 2 buttons to the right of the heading */
|
27
|
+
.PageHeader-actions {
|
28
|
+
margin: var(--base-size-4) 0 var(--base-size-4) var(--base-size-4);
|
29
|
+
align-self: center;
|
30
|
+
justify-content: flex-end;
|
31
|
+
order: 1;
|
32
|
+
|
33
|
+
& + .PageHeader-description {
|
34
|
+
margin-top: var(--base-size-4);
|
35
|
+
}
|
36
|
+
}
|
@@ -0,0 +1,59 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Primer
|
4
|
+
module OpenProject
|
5
|
+
# A ViewComponent PageHeader inspired by the primer react variant
|
6
|
+
class PageHeader < Primer::Component
|
7
|
+
HEADING_TAG_OPTIONS = [:h1, :h2, :h3, :h4, :h5, :h6].freeze
|
8
|
+
HEADING_TAG_FALLBACK = :h1
|
9
|
+
|
10
|
+
status :open_project
|
11
|
+
|
12
|
+
# The title of the page header
|
13
|
+
#
|
14
|
+
# @param tag [Symbol] <%= one_of(Primer::Beta::Heading::TAG_OPTIONS) %>
|
15
|
+
# @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
|
16
|
+
renders_one :title, lambda { |tag: :h1, **system_arguments|
|
17
|
+
system_arguments[:tag] = fetch_or_fallback(HEADING_TAG_OPTIONS, tag, HEADING_TAG_FALLBACK)
|
18
|
+
system_arguments[:classes] = class_names(system_arguments[:classes], "PageHeader-title")
|
19
|
+
|
20
|
+
Primer::BaseComponent.new(**system_arguments)
|
21
|
+
}
|
22
|
+
|
23
|
+
# Optional description below the title row
|
24
|
+
renders_one :description, lambda { |**system_arguments|
|
25
|
+
deny_tag_argument(**system_arguments)
|
26
|
+
system_arguments[:tag] = :div
|
27
|
+
system_arguments[:classes] = class_names(system_arguments[:classes], "PageHeader-description")
|
28
|
+
|
29
|
+
Primer::BaseComponent.new(**system_arguments)
|
30
|
+
}
|
31
|
+
|
32
|
+
# Actions
|
33
|
+
#
|
34
|
+
# @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
|
35
|
+
renders_one :actions, lambda { |**system_arguments|
|
36
|
+
deny_tag_argument(**system_arguments)
|
37
|
+
system_arguments[:tag] = :div
|
38
|
+
system_arguments[:classes] = class_names(system_arguments[:classes], "PageHeader-actions")
|
39
|
+
|
40
|
+
Primer::BaseComponent.new(**system_arguments)
|
41
|
+
}
|
42
|
+
|
43
|
+
def initialize(**system_arguments)
|
44
|
+
@system_arguments = deny_tag_argument(**system_arguments)
|
45
|
+
|
46
|
+
@system_arguments[:tag] = :header
|
47
|
+
@system_arguments[:classes] =
|
48
|
+
class_names(
|
49
|
+
@system_arguments[:classes],
|
50
|
+
"PageHeader"
|
51
|
+
)
|
52
|
+
end
|
53
|
+
|
54
|
+
def render?
|
55
|
+
title?
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
<%= render(Primer::OpenProject::PageHeader.new) do |component| %>
|
2
|
+
<% component.with_title(tag: :h1) do %>
|
3
|
+
A title
|
4
|
+
<% end %>
|
5
|
+
<% component.with_description do %>
|
6
|
+
A description with actions
|
7
|
+
<% end %>
|
8
|
+
<% component.with_actions do %>
|
9
|
+
<%= render(Primer::Alpha::ActionMenu.new) do |component| %>
|
10
|
+
<% component.with_show_button { "Menu" } %>
|
11
|
+
<% component.with_item(label: "Item", tag: :button, value: "") %>
|
12
|
+
<% component.with_item(
|
13
|
+
label: "Show dialog",
|
14
|
+
tag: :button,
|
15
|
+
content_arguments: { "data-show-dialog-id": "my-dialog" },
|
16
|
+
value: "",
|
17
|
+
scheme: :danger
|
18
|
+
) %>
|
19
|
+
<% end %>
|
20
|
+
<% end %>
|
21
|
+
<% end %>
|
22
|
+
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Primer
|
4
|
+
module OpenProject
|
5
|
+
# @component Primer::OpenProject::PageHeader
|
6
|
+
# @label Page Header
|
7
|
+
class PageHeaderPreview < ViewComponent::Preview
|
8
|
+
# @label Default
|
9
|
+
# @snapshot
|
10
|
+
def default
|
11
|
+
render(Primer::OpenProject::PageHeader.new) do |header|
|
12
|
+
header.with_title { "Hello" }
|
13
|
+
header.with_description { "Last updated 5 minutes ago by XYZ." }
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
|
18
|
+
# @label Playground
|
19
|
+
#
|
20
|
+
def playground
|
21
|
+
render(Primer::OpenProject::PageHeader.new) do |header|
|
22
|
+
header.with_title { "Hello" }
|
23
|
+
header.with_description { "Last updated 5 minutes ago by XYZ." }
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
# @label With actions
|
28
|
+
def actions
|
29
|
+
render_with_template(locals: {})
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
data/static/classes.json
CHANGED
@@ -411,6 +411,18 @@
|
|
411
411
|
"Overlay-header": [
|
412
412
|
"Primer::Alpha::Dialog"
|
413
413
|
],
|
414
|
+
"PageHeader": [
|
415
|
+
"Primer::OpenProject::PageHeader"
|
416
|
+
],
|
417
|
+
"PageHeader-actions": [
|
418
|
+
"Primer::OpenProject::PageHeader"
|
419
|
+
],
|
420
|
+
"PageHeader-description": [
|
421
|
+
"Primer::OpenProject::PageHeader"
|
422
|
+
],
|
423
|
+
"PageHeader-title": [
|
424
|
+
"Primer::OpenProject::PageHeader"
|
425
|
+
],
|
414
426
|
"Popover": [
|
415
427
|
"Primer::Beta::Popover"
|
416
428
|
],
|
data/static/previews.json
CHANGED
@@ -4432,6 +4432,53 @@
|
|
4432
4432
|
}
|
4433
4433
|
]
|
4434
4434
|
},
|
4435
|
+
{
|
4436
|
+
"name": "page_header",
|
4437
|
+
"component": "PageHeader",
|
4438
|
+
"status": "openproject",
|
4439
|
+
"lookup_path": "primer/open_project/page_header",
|
4440
|
+
"examples": [
|
4441
|
+
{
|
4442
|
+
"preview_path": "primer/open_project/page_header/playground",
|
4443
|
+
"name": "playground",
|
4444
|
+
"snapshot": "true",
|
4445
|
+
"skip_rules": {
|
4446
|
+
"wont_fix": [
|
4447
|
+
"region"
|
4448
|
+
],
|
4449
|
+
"will_fix": [
|
4450
|
+
"color-contrast"
|
4451
|
+
]
|
4452
|
+
}
|
4453
|
+
},
|
4454
|
+
{
|
4455
|
+
"preview_path": "primer/open_project/page_header/default",
|
4456
|
+
"name": "default",
|
4457
|
+
"snapshot": "true",
|
4458
|
+
"skip_rules": {
|
4459
|
+
"wont_fix": [
|
4460
|
+
"region"
|
4461
|
+
],
|
4462
|
+
"will_fix": [
|
4463
|
+
"color-contrast"
|
4464
|
+
]
|
4465
|
+
}
|
4466
|
+
},
|
4467
|
+
{
|
4468
|
+
"preview_path": "primer/open_project/page_header/actions",
|
4469
|
+
"name": "actions",
|
4470
|
+
"snapshot": "true",
|
4471
|
+
"skip_rules": {
|
4472
|
+
"wont_fix": [
|
4473
|
+
"region"
|
4474
|
+
],
|
4475
|
+
"will_fix": [
|
4476
|
+
"color-contrast"
|
4477
|
+
]
|
4478
|
+
}
|
4479
|
+
}
|
4480
|
+
]
|
4481
|
+
},
|
4435
4482
|
{
|
4436
4483
|
"name": "popover",
|
4437
4484
|
"component": "Popover",
|
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.9.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: 2023-09-
|
12
|
+
date: 2023-09-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: actionview
|
@@ -45,14 +45,14 @@ dependencies:
|
|
45
45
|
requirements:
|
46
46
|
- - ">="
|
47
47
|
- !ruby/object:Gem::Version
|
48
|
-
version: 19.
|
48
|
+
version: 19.7.0
|
49
49
|
type: :runtime
|
50
50
|
prerelease: false
|
51
51
|
version_requirements: !ruby/object:Gem::Requirement
|
52
52
|
requirements:
|
53
53
|
- - ">="
|
54
54
|
- !ruby/object:Gem::Version
|
55
|
-
version: 19.
|
55
|
+
version: 19.7.0
|
56
56
|
- !ruby/object:Gem::Dependency
|
57
57
|
name: view_component
|
58
58
|
requirement: !ruby/object:Gem::Requirement
|
@@ -746,6 +746,12 @@ files:
|
|
746
746
|
- app/components/primer/layout_component.html.erb
|
747
747
|
- app/components/primer/layout_component.rb
|
748
748
|
- app/components/primer/navigation/tab_component.rb
|
749
|
+
- app/components/primer/open_project/page_header.css
|
750
|
+
- app/components/primer/open_project/page_header.css.json
|
751
|
+
- app/components/primer/open_project/page_header.css.map
|
752
|
+
- app/components/primer/open_project/page_header.html.erb
|
753
|
+
- app/components/primer/open_project/page_header.pcss
|
754
|
+
- app/components/primer/open_project/page_header.rb
|
749
755
|
- app/components/primer/primer.d.ts
|
750
756
|
- app/components/primer/primer.js
|
751
757
|
- app/components/primer/primer.pcss
|
@@ -1110,6 +1116,8 @@ files:
|
|
1110
1116
|
- previews/primer/forms_preview/single_text_field_form.html.erb
|
1111
1117
|
- previews/primer/forms_preview/submit_button_form.html.erb
|
1112
1118
|
- previews/primer/forms_preview/text_field_and_checkbox_form.html.erb
|
1119
|
+
- previews/primer/open_project/page_header_preview.rb
|
1120
|
+
- previews/primer/open_project/page_header_preview/actions.html.erb
|
1113
1121
|
- previews/primer/url_helpers.rb
|
1114
1122
|
- static/arguments.json
|
1115
1123
|
- static/assets/view-components.svg
|