openproject-primer_view_components 0.8.0 → 0.9.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 +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
|