openproject-primer_view_components 0.89.1 → 0.90.1
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 +50 -0
- 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/alpha/action_bar.css +1 -1
- data/app/components/primer/alpha/action_bar.css.map +1 -1
- data/app/components/primer/alpha/action_bar.pcss +0 -3
- data/app/components/primer/alpha/action_list.css +1 -1
- data/app/components/primer/alpha/action_list.css.json +4 -10
- data/app/components/primer/alpha/action_list.css.map +1 -1
- data/app/components/primer/alpha/action_list.pcss +0 -2
- data/app/components/primer/alpha/auto_complete.css +1 -1
- data/app/components/primer/alpha/auto_complete.css.json +2 -4
- data/app/components/primer/alpha/auto_complete.css.map +1 -1
- data/app/components/primer/alpha/auto_complete.pcss +3 -10
- data/app/components/primer/alpha/banner.css +1 -1
- data/app/components/primer/alpha/banner.css.map +1 -1
- data/app/components/primer/alpha/banner.pcss +0 -1
- data/app/components/primer/alpha/button_marketing.css +1 -1
- data/app/components/primer/alpha/button_marketing.css.map +1 -1
- data/app/components/primer/alpha/button_marketing.pcss +4 -4
- data/app/components/primer/alpha/dialog.css +1 -1
- data/app/components/primer/alpha/dialog.css.json +2 -1
- data/app/components/primer/alpha/dialog.css.map +1 -1
- data/app/components/primer/alpha/dialog.pcss +4 -1
- data/app/components/primer/alpha/dropdown.css +1 -1
- data/app/components/primer/alpha/dropdown.css.map +1 -1
- data/app/components/primer/alpha/layout.css +1 -1
- data/app/components/primer/alpha/layout.css.json +10 -14
- data/app/components/primer/alpha/layout.css.map +1 -1
- data/app/components/primer/alpha/layout.pcss +3 -1
- data/app/components/primer/alpha/menu.css +1 -1
- data/app/components/primer/alpha/menu.css.map +1 -1
- data/app/components/primer/alpha/menu.pcss +0 -6
- data/app/components/primer/alpha/overlay.css +1 -1
- data/app/components/primer/alpha/overlay.css.map +1 -1
- data/app/components/primer/alpha/segmented_control.css +1 -1
- data/app/components/primer/alpha/segmented_control.css.json +1 -2
- data/app/components/primer/alpha/segmented_control.css.map +1 -1
- data/app/components/primer/alpha/segmented_control.pcss +0 -2
- data/app/components/primer/alpha/select_panel.css +1 -1
- data/app/components/primer/alpha/select_panel.css.map +1 -1
- data/app/components/primer/alpha/select_panel_element.ts +1 -1
- data/app/components/primer/alpha/skeleton_box.css +1 -1
- data/app/components/primer/alpha/skeleton_box.css.map +1 -1
- data/app/components/primer/alpha/stack.css +1 -1
- data/app/components/primer/alpha/stack.css.map +1 -1
- data/app/components/primer/alpha/tab_nav.css +1 -1
- data/app/components/primer/alpha/tab_nav.css.map +1 -1
- data/app/components/primer/alpha/tab_nav.pcss +0 -5
- data/app/components/primer/alpha/text_field.css +1 -1
- data/app/components/primer/alpha/text_field.css.json +2 -2
- data/app/components/primer/alpha/text_field.css.map +1 -1
- data/app/components/primer/alpha/text_field.pcss +14 -7
- data/app/components/primer/alpha/toggle_switch.css +1 -1
- data/app/components/primer/alpha/toggle_switch.css.map +1 -1
- data/app/components/primer/alpha/toggle_switch.pcss +8 -6
- data/app/components/primer/alpha/tree_view/sub_tree_node.rb +1 -1
- data/app/components/primer/alpha/tree_view/tree_view_icon_pair_element.js +1 -1
- data/app/components/primer/alpha/tree_view/tree_view_icon_pair_element.ts +1 -1
- data/app/components/primer/alpha/tree_view/visual.rb +1 -1
- data/app/components/primer/alpha/tree_view.css +1 -1
- data/app/components/primer/alpha/tree_view.css.json +2 -2
- data/app/components/primer/alpha/tree_view.css.map +1 -1
- data/app/components/primer/alpha/tree_view.pcss +1 -0
- data/app/components/primer/alpha/underline_nav.css +1 -1
- data/app/components/primer/alpha/underline_nav.css.map +1 -1
- data/app/components/primer/alpha/underline_nav.pcss +0 -3
- data/app/components/primer/base_component.rb +1 -0
- data/app/components/primer/beta/avatar.css +1 -1
- data/app/components/primer/beta/avatar.css.map +1 -1
- data/app/components/primer/beta/avatar_stack.css +1 -1
- data/app/components/primer/beta/avatar_stack.css.map +1 -1
- data/app/components/primer/beta/blankslate.css +1 -1
- data/app/components/primer/beta/blankslate.css.map +1 -1
- data/app/components/primer/beta/blankslate.pcss +2 -53
- data/app/components/primer/beta/border_box.css +1 -1
- data/app/components/primer/beta/border_box.css.map +1 -1
- data/app/components/primer/beta/border_box.rb +18 -7
- data/app/components/primer/beta/breadcrumbs.css +1 -1
- data/app/components/primer/beta/breadcrumbs.css.json +2 -1
- data/app/components/primer/beta/breadcrumbs.css.map +1 -1
- data/app/components/primer/beta/breadcrumbs.pcss +6 -5
- data/app/components/primer/beta/button.css +1 -1
- data/app/components/primer/beta/button.css.map +1 -1
- data/app/components/primer/beta/button.pcss +0 -1
- data/app/components/primer/beta/button_group.css +1 -1
- data/app/components/primer/beta/button_group.css.map +1 -1
- data/app/components/primer/beta/button_group.rb +1 -1
- data/app/components/primer/beta/counter.css +1 -1
- data/app/components/primer/beta/counter.css.map +1 -1
- data/app/components/primer/beta/flash.css +1 -1
- data/app/components/primer/beta/flash.css.map +1 -1
- data/app/components/primer/beta/label.css +1 -1
- data/app/components/primer/beta/label.css.map +1 -1
- data/app/components/primer/beta/link.css +1 -1
- data/app/components/primer/beta/link.css.map +1 -1
- data/app/components/primer/beta/popover.css +1 -1
- data/app/components/primer/beta/popover.css.json +22 -16
- data/app/components/primer/beta/popover.css.map +1 -1
- data/app/components/primer/beta/popover.pcss +132 -101
- data/app/components/primer/beta/progress_bar.css +1 -1
- data/app/components/primer/beta/progress_bar.css.map +1 -1
- data/app/components/primer/beta/state.css +1 -1
- data/app/components/primer/beta/state.css.map +1 -1
- data/app/components/primer/beta/state.pcss +0 -1
- data/app/components/primer/beta/subhead.css +1 -1
- data/app/components/primer/beta/subhead.css.map +1 -1
- data/app/components/primer/beta/subhead.pcss +0 -2
- data/app/components/primer/beta/timeline_item.css +1 -1
- data/app/components/primer/beta/timeline_item.css.map +1 -1
- data/app/components/primer/beta/timeline_item.pcss +0 -5
- data/app/components/primer/beta/truncate.css +1 -1
- data/app/components/primer/beta/truncate.css.map +1 -1
- data/app/components/primer/beta/truncate.pcss +0 -1
- data/app/components/primer/component.rb +16 -0
- data/app/components/primer/dialog_helper.js +10 -1
- data/app/components/primer/dialog_helper.ts +16 -1
- data/app/components/primer/open_project/border_box/collapsible_header.css +1 -1
- data/app/components/primer/open_project/border_box/collapsible_header.css.json +1 -3
- data/app/components/primer/open_project/border_box/collapsible_header.css.map +1 -1
- data/app/components/primer/open_project/border_box/collapsible_header.html.erb +1 -1
- data/app/components/primer/open_project/border_box/collapsible_header.pcss +3 -1
- data/app/components/primer/open_project/border_box/collapsible_header.rb +10 -9
- data/app/components/primer/open_project/border_grid.css +1 -1
- data/app/components/primer/open_project/border_grid.css.map +1 -1
- data/app/components/primer/open_project/border_grid.pcss +11 -9
- data/app/components/primer/open_project/collapsible.d.ts +1 -1
- data/app/components/primer/open_project/collapsible.js +8 -4
- data/app/components/primer/open_project/collapsible.ts +10 -4
- data/app/components/primer/open_project/collapsible_section.html.erb +6 -10
- data/app/components/primer/open_project/collapsible_section.rb +8 -0
- data/app/components/primer/open_project/drag_handle.css +1 -1
- data/app/components/primer/open_project/drag_handle.css.map +1 -1
- data/app/components/primer/open_project/filterable_tree_view.css +1 -1
- data/app/components/primer/open_project/filterable_tree_view.css.map +1 -1
- data/app/components/primer/open_project/filterable_tree_view.html.erb +9 -5
- data/app/components/primer/open_project/filterable_tree_view.pcss +2 -0
- data/app/components/primer/open_project/filterable_tree_view.rb +9 -1
- data/app/components/primer/open_project/inline_message.css +1 -1
- data/app/components/primer/open_project/inline_message.css.map +1 -1
- data/app/components/primer/open_project/page_header/dialog.rb +1 -1
- data/app/components/primer/open_project/page_header/menu.rb +1 -1
- data/app/components/primer/open_project/page_header.css +1 -1
- data/app/components/primer/open_project/page_header.css.map +1 -1
- data/app/components/primer/open_project/page_header.pcss +2 -0
- data/app/components/primer/open_project/pagination.css +1 -1
- data/app/components/primer/open_project/pagination.css.map +1 -1
- data/app/components/primer/open_project/pagination.pcss +4 -1
- data/app/components/primer/open_project/side_panel/section.css +1 -1
- data/app/components/primer/open_project/side_panel/section.css.map +1 -1
- data/app/components/primer/open_project/side_panel/section.pcss +3 -3
- data/app/components/primer/open_project/sub_header.css +1 -1
- data/app/components/primer/open_project/sub_header.css.map +1 -1
- data/app/lib/primer/forms/acts_as_component.rb +1 -1
- data/app/lib/primer/forms/dsl/input.rb +5 -1
- data/app/lib/primer/forms/toggle_switch_form.rb +1 -1
- data/app/lib/primer/safe_href_helper.rb +36 -0
- data/lib/primer/form_components.rb +1 -1
- data/lib/primer/static/generate_previews.rb +1 -1
- data/lib/primer/view_components/version.rb +1 -1
- data/previews/primer/beta/border_box_preview.rb +3 -3
- data/previews/primer/open_project/collapsible_section_preview/with_link_in_title.html.erb +6 -0
- data/previews/primer/open_project/collapsible_section_preview.rb +9 -0
- data/previews/primer/open_project/filterable_tree_view_preview/async_custom_loading_indicator.html.erb +9 -0
- data/previews/primer/open_project/filterable_tree_view_preview.rb +7 -0
- data/static/arguments.json +12 -0
- data/static/classes.json +21 -0
- data/static/classnames.cjs +507 -0
- data/static/classnames.d.ts +2 -0
- data/static/classnames.js +509 -0
- data/static/info_arch.json +46 -2
- data/static/previews.json +2394 -2368
- metadata +9 -48
- data/app/assets/javascripts/components/primer/alpha/action_bar_element.d.ts +0 -17
- data/app/assets/javascripts/components/primer/alpha/action_list.d.ts +0 -16
- data/app/assets/javascripts/components/primer/alpha/action_menu/action_menu_element.d.ts +0 -49
- data/app/assets/javascripts/components/primer/alpha/action_menu/action_menu_focus_zone_stack.d.ts +0 -17
- data/app/assets/javascripts/components/primer/alpha/dropdown/menu.d.ts +0 -1
- data/app/assets/javascripts/components/primer/alpha/dropdown.d.ts +0 -1
- data/app/assets/javascripts/components/primer/alpha/modal_dialog.d.ts +0 -18
- data/app/assets/javascripts/components/primer/alpha/segmented_control.d.ts +0 -12
- data/app/assets/javascripts/components/primer/alpha/select_panel_element.d.ts +0 -65
- data/app/assets/javascripts/components/primer/alpha/tab_container.d.ts +0 -1
- data/app/assets/javascripts/components/primer/alpha/toggle_switch.d.ts +0 -34
- data/app/assets/javascripts/components/primer/alpha/tool_tip.d.ts +0 -27
- data/app/assets/javascripts/components/primer/alpha/tree_view/tree_view.d.ts +0 -47
- data/app/assets/javascripts/components/primer/alpha/tree_view/tree_view_icon_pair_element.d.ts +0 -15
- data/app/assets/javascripts/components/primer/alpha/tree_view/tree_view_include_fragment_element.d.ts +0 -9
- data/app/assets/javascripts/components/primer/alpha/tree_view/tree_view_roving_tab_index.d.ts +0 -3
- data/app/assets/javascripts/components/primer/alpha/tree_view/tree_view_sub_tree_node_element.d.ts +0 -47
- data/app/assets/javascripts/components/primer/alpha/x_banner.d.ts +0 -18
- data/app/assets/javascripts/components/primer/anchored_position.d.ts +0 -27
- data/app/assets/javascripts/components/primer/beta/auto_complete/auto_complete.d.ts +0 -1
- data/app/assets/javascripts/components/primer/beta/clipboard_copy.d.ts +0 -1
- data/app/assets/javascripts/components/primer/beta/details_toggle_element.d.ts +0 -40
- data/app/assets/javascripts/components/primer/beta/nav_list.d.ts +0 -20
- data/app/assets/javascripts/components/primer/beta/nav_list_group_element.d.ts +0 -19
- data/app/assets/javascripts/components/primer/beta/relative_time.d.ts +0 -1
- data/app/assets/javascripts/components/primer/dialog_helper.d.ts +0 -15
- data/app/assets/javascripts/components/primer/focus_group.d.ts +0 -19
- data/app/assets/javascripts/components/primer/open_project/avatar_fallback.d.ts +0 -28
- data/app/assets/javascripts/components/primer/open_project/border_box/collapsible_header.d.ts +0 -11
- data/app/assets/javascripts/components/primer/open_project/collapsible.d.ts +0 -13
- data/app/assets/javascripts/components/primer/open_project/collapsible_section.d.ts +0 -10
- data/app/assets/javascripts/components/primer/open_project/danger_dialog_form_helper.d.ts +0 -18
- data/app/assets/javascripts/components/primer/open_project/filterable_tree_view.d.ts +0 -29
- data/app/assets/javascripts/components/primer/open_project/page_header_element.d.ts +0 -9
- data/app/assets/javascripts/components/primer/open_project/sub_header_element.d.ts +0 -17
- data/app/assets/javascripts/components/primer/open_project/zen_mode_button.d.ts +0 -18
- data/app/assets/javascripts/components/primer/primer.d.ts +0 -42
- data/app/assets/javascripts/components/primer/scrollable_region.d.ts +0 -13
- data/app/assets/javascripts/components/primer/shared_events.d.ts +0 -26
- data/app/assets/javascripts/components/primer/utils.d.ts +0 -1
- data/app/assets/javascripts/lib/primer/forms/character_counter.d.ts +0 -41
- data/app/assets/javascripts/lib/primer/forms/primer_multi_input.d.ts +0 -10
- data/app/assets/javascripts/lib/primer/forms/primer_text_area.d.ts +0 -13
- data/app/assets/javascripts/lib/primer/forms/primer_text_field.d.ts +0 -30
- data/app/assets/javascripts/lib/primer/forms/toggle_switch_input.d.ts +0 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["collapsible_header.pcss"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["collapsible_header.pcss"],"names":[],"mappings":"AAIA,mBACE,aAAc,CACd,2CAA4C,CAC5C,0BACF,CAEA,wCACE,2BAA4B,CAC5B,4BAA6B,CAC7B,8CAOF,CALE,6EAGE,YACF,CAGF,+BACE,cAAe,CACf,wBAAiB,CAAjB,gBAAiB,CACjB,YAAa,CACb,gBAAiB,CACjB,kBAAmB,CACnB,kCAAmC,CACnC,0BAA2B,CAC3B,eAKF,CAHE,kDACE,MACF,CAGF,wDACE,+BACE,qBAAsB,CACtB,sBACF,CAEA,kEACE,YACF,CAEA,+BACE,UACF,CACF,CAGE,8DACE,qBAAsB,CACtB,sBACF,CAEA,gGACE,YACF,CAEA,8DACE,gBAAiB,CACjB,kBAAmB,CACnB,kBAAmB,CACnB,UACF,CAGF,8BACE,cAAe,CACf,YAAa,CACb,kBAAmB,CACnB,8BAA+B,CAC/B,eAAgB,CAChB,cACF,CAEA,+BACE,MAAO,CACP,WAAY,CACZ,eAAgB,CAChB,sBAAuB,CACvB,kBAAmB,CACnB,wBAAiB,CAAjB,gBACF","file":"collapsible_header.css","sourcesContent":["/* CSS for BorderBox::CollapsibleHeader */\n\n/* stylelint-disable selector-nested-pattern -- component nests descendant class selectors (and `.X > &`) inside container queries, not &-prefixed selectors */\n\n.CollapsibleHeader {\n display: block;\n container-name: collapsible-header-container;\n container-type: inline-size;\n}\n\n.Box:has(.CollapsibleHeader--collapsed) {\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n border-bottom-width: var(--borderWidth-thicker);\n\n & .Box-list,\n & .Box-body,\n & .Box-footer {\n display: none;\n }\n}\n\n.CollapsibleHeader-triggerArea {\n cursor: pointer;\n user-select: none;\n display: flex;\n flex-wrap: nowrap;\n align-items: center;\n column-gap: var(--stack-gap-normal);\n row-gap: var(--base-size-4);\n overflow: hidden;\n\n .CollapsibleHeader > & {\n flex: 1;\n }\n}\n\n@container collapsible-header-container (width < 544px) {\n .CollapsibleHeader-triggerArea {\n flex-direction: column;\n align-items: flex-start;\n }\n\n .CollapsibleHeader[data-collapsed] .CollapsibleHeader-description {\n display: none;\n }\n\n .CollapsibleHeader-description {\n width: 100%;\n }\n}\n\n.CollapsibleHeader--multi-line {\n .CollapsibleHeader-triggerArea {\n flex-direction: column;\n align-items: flex-start;\n }\n\n &.CollapsibleHeader[data-collapsed] .CollapsibleHeader-description {\n display: none;\n }\n\n .CollapsibleHeader-description {\n overflow: visible;\n text-overflow: clip;\n white-space: normal;\n width: 100%;\n }\n}\n\n.CollapsibleHeader-title-line {\n flex-basis: 66%;\n display: flex;\n align-items: center;\n gap: var(--stack-gap-condensed);\n overflow: hidden;\n max-width: 100%;\n}\n\n.CollapsibleHeader-description {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n user-select: text;\n}\n"]}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
<% if count? %>
|
|
6
6
|
<%= count %>
|
|
7
7
|
<% end %>
|
|
8
|
-
<%= render(Primer::
|
|
8
|
+
<%= render(Primer::Beta::Button.new(**@toggle_button_arguments)) do %>
|
|
9
9
|
<%= render(Primer::Beta::Octicon.new(icon: "chevron-up", hidden: @collapsed, data: { target: "collapsible-header.arrowUp" })) %>
|
|
10
10
|
<%= render(Primer::Beta::Octicon.new(icon: "chevron-down", hidden: !@collapsed, data: { target: "collapsible-header.arrowDown" })) %>
|
|
11
11
|
<% end %>
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
/* CSS for BorderBox::CollapsibleHeader */
|
|
2
2
|
|
|
3
|
+
/* stylelint-disable selector-nested-pattern -- component nests descendant class selectors (and `.X > &`) inside container queries, not &-prefixed selectors */
|
|
4
|
+
|
|
3
5
|
.CollapsibleHeader {
|
|
4
6
|
display: block;
|
|
5
7
|
container-name: collapsible-header-container;
|
|
@@ -60,7 +62,7 @@
|
|
|
60
62
|
|
|
61
63
|
.CollapsibleHeader-description {
|
|
62
64
|
overflow: visible;
|
|
63
|
-
text-overflow:
|
|
65
|
+
text-overflow: clip;
|
|
64
66
|
white-space: normal;
|
|
65
67
|
width: 100%;
|
|
66
68
|
}
|
|
@@ -16,6 +16,7 @@ module Primer
|
|
|
16
16
|
# @param tag [Symbol] <%= one_of(Primer::OpenProject::BorderBox::CollapsibleHeader::TITLE_TAG_OPTIONS) %>
|
|
17
17
|
# @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
|
|
18
18
|
renders_one :title, lambda { |tag: TITLE_TAG_DEFAULT, **system_arguments|
|
|
19
|
+
system_arguments[:id] ||= @heading_id
|
|
19
20
|
system_arguments[:classes] = class_names(
|
|
20
21
|
system_arguments[:classes],
|
|
21
22
|
"CollapsibleHeader-title",
|
|
@@ -29,7 +30,6 @@ module Primer
|
|
|
29
30
|
#
|
|
30
31
|
# @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
|
|
31
32
|
renders_one :count, lambda { |**system_arguments|
|
|
32
|
-
system_arguments[:mr] ||= 2
|
|
33
33
|
system_arguments[:scheme] ||= :primary
|
|
34
34
|
system_arguments[:classes] = class_names(
|
|
35
35
|
system_arguments[:classes],
|
|
@@ -65,6 +65,7 @@ module Primer
|
|
|
65
65
|
|
|
66
66
|
@collapsed = collapsed
|
|
67
67
|
@collapsible_id = collapsible_id
|
|
68
|
+
@heading_id = "#{id}-heading"
|
|
68
69
|
|
|
69
70
|
@system_arguments = deny_tag_argument(**system_arguments)
|
|
70
71
|
@system_arguments[:tag] = :"collapsible-header"
|
|
@@ -87,16 +88,16 @@ module Primer
|
|
|
87
88
|
end
|
|
88
89
|
|
|
89
90
|
@trigger_area_arguments = { tag: :div }
|
|
90
|
-
@trigger_area_arguments[:role] = "button"
|
|
91
|
-
@trigger_area_arguments[:tabindex] = 0
|
|
92
91
|
@trigger_area_arguments[:classes] = "CollapsibleHeader-triggerArea"
|
|
93
|
-
@trigger_area_arguments[:aria] = {
|
|
94
|
-
controls: @collapsible_id,
|
|
95
|
-
expanded: !@collapsed
|
|
96
|
-
}
|
|
97
92
|
@trigger_area_arguments[:data] = {
|
|
98
|
-
|
|
99
|
-
|
|
93
|
+
action: "click:collapsible-header#toggle"
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
@toggle_button_arguments = {
|
|
97
|
+
scheme: :invisible,
|
|
98
|
+
type: :button,
|
|
99
|
+
data: { target: "collapsible-header.triggerElement", "collapsible-toggle": "" },
|
|
100
|
+
aria: { expanded: !@collapsed, controls: @collapsible_id, labelledby: @heading_id }
|
|
100
101
|
}
|
|
101
102
|
end
|
|
102
103
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.BorderGrid{
|
|
1
|
+
.BorderGrid{display:table;width:100%;margin-top:calc(var(--base-size-16)*-1);margin-bottom:calc(var(--base-size-16)*-1);table-layout:fixed;border-collapse:collapse;border-style:hidden}.BorderGrid .BorderGrid-cell{padding-top:var(--base-size-16);padding-bottom:var(--base-size-16)}.BorderGrid--spacious{margin-top:calc(var(--base-size-24)*-1);margin-bottom:calc(var(--base-size-24)*-1)}.BorderGrid--spacious .BorderGrid-cell{padding-top:var(--base-size-24);padding-bottom:var(--base-size-24)}.BorderGrid-row{display:table-row}.BorderGrid-cell{display:table-cell;border:var(--borderWidth-thin) solid var(--borderColor-muted)}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["border_grid.pcss"],"names":[],"mappings":"AAEA,
|
|
1
|
+
{"version":3,"sources":["border_grid.pcss"],"names":[],"mappings":"AAEA,YACI,aAAc,CACd,UAAW,CACX,uCAA0C,CAC1C,0CAA6C,CAC7C,kBAAmB,CAEnB,wBAAyB,CAEzB,mBACJ,CAEA,6BACI,+BAAgC,CAChC,kCACJ,CAEA,sBACI,uCAA0C,CAC1C,0CACJ,CAEA,uCACI,+BAAgC,CAChC,kCACJ,CAEA,gBACI,iBACJ,CAEA,iBACI,kBAAmB,CACnB,6DACJ","file":"border_grid.css","sourcesContent":["/* CSS for BorderGrid */\n\n.BorderGrid {\n display: table;\n width: 100%;\n margin-top: calc(-1 * var(--base-size-16));\n margin-bottom: calc(-1 * var(--base-size-16));\n table-layout: fixed;\n /* stylelint-disable-next-line primer/borders -- table border-collapse keyword, not a border size */\n border-collapse: collapse;\n /* stylelint-disable-next-line primer/borders -- table border-style keyword, not a border size */\n border-style: hidden\n}\n\n.BorderGrid .BorderGrid-cell {\n padding-top: var(--base-size-16);\n padding-bottom: var(--base-size-16)\n}\n\n.BorderGrid--spacious {\n margin-top: calc(-1 * var(--base-size-24));\n margin-bottom: calc(-1 * var(--base-size-24))\n}\n\n.BorderGrid--spacious .BorderGrid-cell {\n padding-top: var(--base-size-24);\n padding-bottom: var(--base-size-24)\n}\n\n.BorderGrid-row {\n display: table-row\n}\n\n.BorderGrid-cell {\n display: table-cell;\n border: var(--borderWidth-thin) solid var(--borderColor-muted)\n}\n"]}
|
|
@@ -3,26 +3,28 @@
|
|
|
3
3
|
.BorderGrid {
|
|
4
4
|
display: table;
|
|
5
5
|
width: 100%;
|
|
6
|
-
margin-top: -
|
|
7
|
-
margin-bottom: -
|
|
6
|
+
margin-top: calc(-1 * var(--base-size-16));
|
|
7
|
+
margin-bottom: calc(-1 * var(--base-size-16));
|
|
8
8
|
table-layout: fixed;
|
|
9
|
+
/* stylelint-disable-next-line primer/borders -- table border-collapse keyword, not a border size */
|
|
9
10
|
border-collapse: collapse;
|
|
11
|
+
/* stylelint-disable-next-line primer/borders -- table border-style keyword, not a border size */
|
|
10
12
|
border-style: hidden
|
|
11
13
|
}
|
|
12
14
|
|
|
13
15
|
.BorderGrid .BorderGrid-cell {
|
|
14
|
-
padding-top:
|
|
15
|
-
padding-bottom:
|
|
16
|
+
padding-top: var(--base-size-16);
|
|
17
|
+
padding-bottom: var(--base-size-16)
|
|
16
18
|
}
|
|
17
19
|
|
|
18
20
|
.BorderGrid--spacious {
|
|
19
|
-
margin-top: -
|
|
20
|
-
margin-bottom: -
|
|
21
|
+
margin-top: calc(-1 * var(--base-size-24));
|
|
22
|
+
margin-bottom: calc(-1 * var(--base-size-24))
|
|
21
23
|
}
|
|
22
24
|
|
|
23
25
|
.BorderGrid--spacious .BorderGrid-cell {
|
|
24
|
-
padding-top:
|
|
25
|
-
padding-bottom:
|
|
26
|
+
padding-top: var(--base-size-24);
|
|
27
|
+
padding-bottom: var(--base-size-24)
|
|
26
28
|
}
|
|
27
29
|
|
|
28
30
|
.BorderGrid-row {
|
|
@@ -31,5 +33,5 @@
|
|
|
31
33
|
|
|
32
34
|
.BorderGrid-cell {
|
|
33
35
|
display: table-cell;
|
|
34
|
-
border:
|
|
36
|
+
border: var(--borderWidth-thin) solid var(--borderColor-muted)
|
|
35
37
|
}
|
|
@@ -5,7 +5,7 @@ export declare abstract class CollapsibleElement extends HTMLElement {
|
|
|
5
5
|
collapsibleElements: HTMLElement[];
|
|
6
6
|
collapsed: boolean;
|
|
7
7
|
toggleViaKeyboard(event: KeyboardEvent): void;
|
|
8
|
-
toggle(): void;
|
|
8
|
+
toggle(event?: Event): void;
|
|
9
9
|
attributeChangedCallback(name: string): void;
|
|
10
10
|
hideAll(): void;
|
|
11
11
|
expandAll(): void;
|
|
@@ -5,7 +5,6 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
5
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
6
|
};
|
|
7
7
|
import { attr, target, targets } from '@github/catalyst';
|
|
8
|
-
// eslint-disable-next-line custom-elements/expose-class-on-global
|
|
9
8
|
export class CollapsibleElement extends HTMLElement {
|
|
10
9
|
constructor() {
|
|
11
10
|
super(...arguments);
|
|
@@ -13,11 +12,16 @@ export class CollapsibleElement extends HTMLElement {
|
|
|
13
12
|
}
|
|
14
13
|
toggleViaKeyboard(event) {
|
|
15
14
|
if (event.code === 'Enter' || event.code === 'Space') {
|
|
16
|
-
|
|
17
|
-
this.toggle();
|
|
15
|
+
this.toggle(event);
|
|
18
16
|
}
|
|
19
17
|
}
|
|
20
|
-
toggle() {
|
|
18
|
+
toggle(event) {
|
|
19
|
+
if (event &&
|
|
20
|
+
event.target instanceof Element &&
|
|
21
|
+
!event.target.closest('[data-collapsible-toggle]') &&
|
|
22
|
+
event.target.closest('a, button'))
|
|
23
|
+
return;
|
|
24
|
+
event?.preventDefault();
|
|
21
25
|
this.collapsed = !this.collapsed;
|
|
22
26
|
}
|
|
23
27
|
attributeChangedCallback(name) {
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import {attr, target, targets} from '@github/catalyst'
|
|
2
2
|
|
|
3
|
-
// eslint-disable-next-line custom-elements/expose-class-on-global
|
|
4
3
|
export abstract class CollapsibleElement extends HTMLElement {
|
|
5
4
|
@target arrowDown: Element
|
|
6
5
|
@target arrowUp: Element
|
|
@@ -11,12 +10,19 @@ export abstract class CollapsibleElement extends HTMLElement {
|
|
|
11
10
|
|
|
12
11
|
toggleViaKeyboard(event: KeyboardEvent) {
|
|
13
12
|
if (event.code === 'Enter' || event.code === 'Space') {
|
|
14
|
-
|
|
15
|
-
this.toggle()
|
|
13
|
+
this.toggle(event)
|
|
16
14
|
}
|
|
17
15
|
}
|
|
18
16
|
|
|
19
|
-
toggle() {
|
|
17
|
+
toggle(event?: Event) {
|
|
18
|
+
if (
|
|
19
|
+
event &&
|
|
20
|
+
event.target instanceof Element &&
|
|
21
|
+
!event.target.closest('[data-collapsible-toggle]') &&
|
|
22
|
+
event.target.closest('a, button')
|
|
23
|
+
)
|
|
24
|
+
return
|
|
25
|
+
event?.preventDefault()
|
|
20
26
|
this.collapsed = !this.collapsed
|
|
21
27
|
}
|
|
22
28
|
|
|
@@ -2,23 +2,19 @@
|
|
|
2
2
|
<%= render(Primer::OpenProject::FlexLayout.new) do |flex| %>
|
|
3
3
|
<%= flex.with_row(classes: "CollapsibleSection--triggerArea",
|
|
4
4
|
id: @title_id,
|
|
5
|
-
|
|
6
|
-
role: "button",
|
|
7
|
-
data: {
|
|
8
|
-
action: "click:collapsible-section#toggle keydown:collapsible-section#toggleViaKeyboard",
|
|
9
|
-
target: "collapsible-section.triggerElement"
|
|
10
|
-
},
|
|
11
|
-
aria: { expanded: !@collapsed, controls: @content_id }) do %>
|
|
5
|
+
data: { action: "click:collapsible-section#toggle" }) do %>
|
|
12
6
|
<%= render(Primer::OpenProject::FlexLayout.new(display: :flex, align_items: :center)) do |header| %>
|
|
13
|
-
<%= header.with_column do %>
|
|
7
|
+
<%= header.with_column(id: @heading_id) do %>
|
|
14
8
|
<%= title %>
|
|
15
9
|
<% end %>
|
|
16
10
|
<%= header.with_column do %>
|
|
17
11
|
<%= caption %>
|
|
18
12
|
<% end %>
|
|
19
13
|
<%= header.with_column do %>
|
|
20
|
-
<%= render(Primer::Beta::
|
|
21
|
-
|
|
14
|
+
<%= render(Primer::Beta::Button.new(**@toggle_button_arguments)) do %>
|
|
15
|
+
<%= render(Primer::Beta::Octicon.new(icon: "chevron-up", hidden: @collapsed, data: { target: "collapsible-section.arrowUp" })) %>
|
|
16
|
+
<%= render(Primer::Beta::Octicon.new(icon: "chevron-down", hidden: !@collapsed, data: { target: "collapsible-section.arrowDown" })) %>
|
|
17
|
+
<% end %>
|
|
22
18
|
<% end %>
|
|
23
19
|
<%= header.with_column(flex: 1, text_align: :right) do %>
|
|
24
20
|
<%= additional_information %>
|
|
@@ -53,6 +53,7 @@ module Primer
|
|
|
53
53
|
def initialize(id: self.class.generate_id, collapsed: false, **system_arguments)
|
|
54
54
|
@title_id = "#{id}-title"
|
|
55
55
|
@content_id = "#{id}-content"
|
|
56
|
+
@heading_id = "#{id}-heading"
|
|
56
57
|
@collapsed = collapsed
|
|
57
58
|
|
|
58
59
|
@system_arguments = deny_tag_argument(**system_arguments)
|
|
@@ -66,6 +67,13 @@ module Primer
|
|
|
66
67
|
|
|
67
68
|
@system_arguments[:data] ||= {}
|
|
68
69
|
@system_arguments[:data][:collapsed] = true if @collapsed
|
|
70
|
+
|
|
71
|
+
@toggle_button_arguments = {
|
|
72
|
+
scheme: :invisible,
|
|
73
|
+
type: :button,
|
|
74
|
+
data: { target: "collapsible-section.triggerElement", "collapsible-toggle": "" },
|
|
75
|
+
aria: { expanded: !@collapsed, controls: @content_id, labelledby: @heading_id }
|
|
76
|
+
}
|
|
69
77
|
end
|
|
70
78
|
|
|
71
79
|
private
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.DragHandle{color:var(--fgColor-muted)
|
|
1
|
+
.DragHandle{cursor:move;color:var(--fgColor-muted)}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["drag_handle.pcss"],"names":[],"mappings":"AAEA,
|
|
1
|
+
{"version":3,"sources":["drag_handle.pcss"],"names":[],"mappings":"AAEA,YACI,WAAY,CACZ,0BACJ","file":"drag_handle.css","sourcesContent":["/* CSS for DragHandle */\n\n.DragHandle {\n cursor: move;\n color: var(--fgColor-muted);\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
filterable-tree-view{display:flex;flex-direction:column;max-height:inherit
|
|
1
|
+
filterable-tree-view{display:flex;flex-direction:column;overflow:hidden;max-height:inherit}.FilterableTreeViewLayout{flex:1;min-height:0}.FilterableTreeViewTreeContainer{flex:1;min-height:0;overflow-y:auto}::highlight(primer-filterable-tree-view-search-results){background-color:var(--display-yellow-scale-2)}filterable-tree-view mark{background-color:var(--display-yellow-scale-2);color:inherit}.FilterableTreeViewLoadingSkeleton{display:none}filterable-tree-view[data-loading] .FilterableTreeViewLoadingSkeleton{display:block}filterable-tree-view[data-loading] [data-target~="filterable-tree-view.noResultsMessage"],filterable-tree-view[data-loading] tree-view{display:none}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["filterable_tree_view.pcss"],"names":[],"mappings":"AAYA,qBACE,YAAa,CACb,qBAAsB,
|
|
1
|
+
{"version":3,"sources":["filterable_tree_view.pcss"],"names":[],"mappings":"AAYA,qBACE,YAAa,CACb,qBAAsB,CACtB,eAAgB,CAChB,kBACF,CAEA,0BACE,MAAO,CACP,YACF,CAEA,iCACE,MAAO,CACP,YAAa,CACb,eACF,CAGA,wDAEE,8CACF,CAIA,0BAEE,8CAA+C,CAC/C,aACF,CAGA,mCACE,YACF,CAIA,sEACE,aACF,CAEA,uIAEE,YACF","file":"filterable_tree_view.css","sourcesContent":["/* CSS for FilterableTreeView */\n\n/* Scroll layout\n *\n * The filterable-tree-view element itself acts as a flex column container.\n * The toolbar (input, segmented control, checkbox) is fixed at the top.\n * Only the tree area scrolls. The consumer is responsible for setting a\n * height or max-height on the filterable-tree-view element (or its parent)\n * to activate scrolling.\n */\n\n/* stylelint-disable-next-line selector-max-type */\nfilterable-tree-view {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n max-height: inherit;\n}\n\n.FilterableTreeViewLayout {\n flex: 1;\n min-height: 0;\n}\n\n.FilterableTreeViewTreeContainer {\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n}\n\n/* Highlight style for CSS Custom Highlight API */\n::highlight(primer-filterable-tree-view-search-results) {\n /* stylelint-disable-next-line primer/no-display-colors, primer/colors -- intentional yellow search-match highlight; no Primer semantic token exists for this */\n background-color: var(--display-yellow-scale-2);\n}\n\n/* Fallback: <mark> elements used when CSS Custom Highlight API is unavailable */\n/* stylelint-disable-next-line selector-max-type */\nfilterable-tree-view mark {\n /* stylelint-disable-next-line primer/no-display-colors, primer/colors -- intentional yellow search-match highlight; no Primer semantic token exists for this */\n background-color: var(--display-yellow-scale-2);\n color: inherit;\n}\n\n/* Loading skeleton */\n.FilterableTreeViewLoadingSkeleton {\n display: none;\n}\n\n/* stylelint-disable selector-no-qualifying-type */\n/* stylelint-disable selector-max-type */\nfilterable-tree-view[data-loading] .FilterableTreeViewLoadingSkeleton {\n display: block;\n}\n\nfilterable-tree-view[data-loading] tree-view,\nfilterable-tree-view[data-loading] [data-target~=\"filterable-tree-view.noResultsMessage\"] {\n display: none;\n}\n"]}
|
|
@@ -28,11 +28,15 @@
|
|
|
28
28
|
<% end %>
|
|
29
29
|
<% end %>
|
|
30
30
|
<div class="FilterableTreeViewLoadingSkeleton" aria-hidden="true">
|
|
31
|
-
<%
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
31
|
+
<% if loading_indicator? %>
|
|
32
|
+
<%= loading_indicator %>
|
|
33
|
+
<% else %>
|
|
34
|
+
<% [0, 8, 8, 16, 8, 0, 8, 8].each do |indent| %>
|
|
35
|
+
<span class="TreeViewSkeletonItemContainerStyle" style="padding-left: <%= indent %>px">
|
|
36
|
+
<%= render(Primer::Alpha::SkeletonBox.new(width: "16px")) %>
|
|
37
|
+
<%= render(Primer::Alpha::SkeletonBox.new(classes: "TreeItemSkeletonTextStyles")) %>
|
|
38
|
+
</span>
|
|
39
|
+
<% end %>
|
|
36
40
|
<% end %>
|
|
37
41
|
</div>
|
|
38
42
|
<%= render(@tree_view) %>
|
|
@@ -30,12 +30,14 @@ filterable-tree-view {
|
|
|
30
30
|
|
|
31
31
|
/* Highlight style for CSS Custom Highlight API */
|
|
32
32
|
::highlight(primer-filterable-tree-view-search-results) {
|
|
33
|
+
/* stylelint-disable-next-line primer/no-display-colors, primer/colors -- intentional yellow search-match highlight; no Primer semantic token exists for this */
|
|
33
34
|
background-color: var(--display-yellow-scale-2);
|
|
34
35
|
}
|
|
35
36
|
|
|
36
37
|
/* Fallback: <mark> elements used when CSS Custom Highlight API is unavailable */
|
|
37
38
|
/* stylelint-disable-next-line selector-max-type */
|
|
38
39
|
filterable-tree-view mark {
|
|
40
|
+
/* stylelint-disable-next-line primer/no-display-colors, primer/colors -- intentional yellow search-match highlight; no Primer semantic token exists for this */
|
|
39
41
|
background-color: var(--display-yellow-scale-2);
|
|
40
42
|
color: inherit;
|
|
41
43
|
}
|
|
@@ -133,11 +133,19 @@ module Primer
|
|
|
133
133
|
# ```erb
|
|
134
134
|
# <%= render(Primer::OpenProject::FilterableTreeView.new(
|
|
135
135
|
# src: my_path
|
|
136
|
-
# )) %>
|
|
136
|
+
# )) do |tree_view| %>
|
|
137
|
+
# <% tree_view.with_loading_indicator do %>
|
|
138
|
+
# <%= render(Primer::Beta::Spinner.new) %>
|
|
139
|
+
# <% end %>
|
|
140
|
+
# <% end %>
|
|
137
141
|
# ```
|
|
138
142
|
class FilterableTreeView < Primer::Component
|
|
139
143
|
delegate :with_leaf, :with_sub_tree, to: :@tree_view
|
|
140
144
|
|
|
145
|
+
# An optional loading indicator shown while an async filter request is in progress. When omitted, a skeleton
|
|
146
|
+
# loader is rendered. This slot is only used when `src` is set.
|
|
147
|
+
renders_one :loading_indicator
|
|
148
|
+
|
|
141
149
|
SUPPORTED_SELECT_VARIANTS = %i[multiple single none].freeze
|
|
142
150
|
|
|
143
151
|
DEFAULT_FILTER_INPUT_ARGUMENTS = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.InlineMessage{
|
|
1
|
+
.InlineMessage{display:grid;font-size:var(--inline-message-fontSize);line-height:var(--inline-message-lineHeight);color:var(--inline-message-fgColor);column-gap:.5rem;grid-template-columns:auto 1fr;align-items:start}.InlineMessage[data-size=small]{--inline-message-fontSize:var(--text-body-size-small);--inline-message-lineHeight:var(--text-body-lineHeight-small,1.6666)}.InlineMessage[data-size=medium]{--inline-message-fontSize:var(--text-body-size-medium);--inline-message-lineHeight:var(--text-body-lineHeight-medium,1.4285)}.InlineMessage[data-variant=warning]{--inline-message-fgColor:var(--fgColor-attention)}.InlineMessage[data-variant=critical]{--inline-message-fgColor:var(--fgColor-danger)}.InlineMessage[data-variant=success]{--inline-message-fgColor:var(--fgColor-success)}.InlineMessage[data-variant=unavailable]{--inline-message-fgColor:var(--fgColor-muted)}.InlineMessageIcon{min-height:calc(var(--inline-message-lineHeight)*var(--inline-message-fontSize))}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["inline_message.pcss"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"sources":["inline_message.pcss"],"names":[],"mappings":"AAAA,eACE,YAAa,CAEb,wCAAyC,CAEzC,4CAA6C,CAE7C,mCAAoC,CACpC,gBAAkB,CAClB,8BAA+B,CAC/B,iBA2BF,CAzBE,gCACE,qDAAsD,CACtD,oEACF,CAEA,iCACE,sDAAuD,CACvD,qEACF,CAEA,qCACE,iDACF,CAEA,sCACE,8CACF,CAEA,qCACE,+CACF,CAEA,yCACE,6CACF,CAGF,mBACE,gFACF","file":"inline_message.css","sourcesContent":[".InlineMessage {\n display: grid;\n /* stylelint-disable-next-line primer/typography */\n font-size: var(--inline-message-fontSize);\n /* stylelint-disable-next-line primer/typography */\n line-height: var(--inline-message-lineHeight);\n /* stylelint-disable-next-line primer/colors */\n color: var(--inline-message-fgColor);\n column-gap: 0.5rem;\n grid-template-columns: auto 1fr;\n align-items: start;\n\n &[data-size='small'] {\n --inline-message-fontSize: var(--text-body-size-small);\n --inline-message-lineHeight: var(--text-body-lineHeight-small, 1.6666);\n }\n\n &[data-size='medium'] {\n --inline-message-fontSize: var(--text-body-size-medium);\n --inline-message-lineHeight: var(--text-body-lineHeight-medium, 1.4285);\n }\n\n &[data-variant='warning'] {\n --inline-message-fgColor: var(--fgColor-attention);\n }\n\n &[data-variant='critical'] {\n --inline-message-fgColor: var(--fgColor-danger);\n }\n\n &[data-variant='success'] {\n --inline-message-fgColor: var(--fgColor-success);\n }\n\n &[data-variant='unavailable'] {\n --inline-message-fgColor: var(--fgColor-muted);\n }\n}\n\n.InlineMessageIcon {\n min-height: calc(var(--inline-message-lineHeight) * var(--inline-message-fontSize));\n}"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.PageHeader{
|
|
1
|
+
.PageHeader{display:flex;padding-bottom:var(--base-size-8);margin-bottom:var(--base-size-16);border-bottom:var(--borderWidth-thin) solid var(--borderColor-muted);flex-flow:column}.PageHeader--withTabNav{border-bottom:none;padding-bottom:0;margin-bottom:0}.PageHeader-contextBar{height:var(--control-small-size)}.PageHeader-contextBar,.PageHeader-titleBar{display:flex;flex-flow:row;justify-content:flex-end;align-items:center;margin-bottom:var(--base-size-8)}.PageHeader-title{font-size:var(--text-title-size-medium);flex:1 1 auto}.PageHeader-title--large{font-size:var(--text-title-size-large)}.PageHeader-description{font-size:var(--text-body-size-medium);color:var(--fgColor-muted);flex:1 auto}.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{justify-content:flex-end;display:flex;align-items:center}.PageHeader-breadcrumbs{display:block;width:100%}.PageHeader-leadingAction{margin-top:var(--base-size-2);margin-right:var(--base-size-4)}.PageHeader-parentLink{flex:1 1 auto}@media screen and (min-width:543.98px){.PageHeader--noBreadcrumb .PageHeader-contextBar{display:none}}.PageHeader--noBreadcrumb .PageHeader-titleBar{line-height:var(--control-small-size)}.PageHeader--noBreadcrumb .PageHeader-actions{height:var(--control-small-size)}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["page_header.pcss"],"names":[],"mappings":"AAEA,
|
|
1
|
+
{"version":3,"sources":["page_header.pcss"],"names":[],"mappings":"AAEA,YACE,YAAa,CACb,iCAAkC,CAClC,iCAAkC,CAClC,oEAAqE,CACrE,gBACF,CAEA,wBACE,kBAAmB,CACnB,gBAAiB,CACjB,eACF,CAEA,uBAME,gCACF,CAEA,4CARE,YAAa,CACb,aAAc,CACd,wBAAyB,CACzB,kBAAmB,CACnB,gCAUF,CAEA,kBACE,uCAAwC,CACxC,aACF,CAEA,yBACE,sCACF,CAGA,wBACE,sCAAuC,CACvC,0BAA2B,CAC3B,WACF,CAGA,4CAEE,iCAA0B,CAA1B,yBACF,CAEA,sBACE,aACF,CAEA,yCACE,qBACF,CAEA,gDACE,iCACF,CAEA,oBACE,wBAAyB,CACzB,YAAa,CACb,kBACF,CAEA,wBACE,aAAc,CACd,UACF,CAEA,0BACE,6BAA8B,CAC9B,+BACF,CAEA,uBACE,aACF,CAGA,uCACE,iDACE,YACF,CACF,CAIE,+CAEE,qCACF,CAEA,8CACE,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/* stylelint-disable-next-line selector-max-type -- description holds rich text; links can only be targeted by the `a` type selector */\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 and actions height with the toggle menu button for proper vertical alignment */\n.PageHeader--noBreadcrumb {\n & .PageHeader-titleBar {\n /* stylelint-disable-next-line primer/typography -- control size var intentionally matches the toggle-menu button height for vertical alignment */\n line-height: var(--control-small-size);\n }\n\n & .PageHeader-actions {\n height: var(--control-small-size);\n }\n}"]}
|
|
@@ -47,6 +47,7 @@
|
|
|
47
47
|
flex: 1 auto;
|
|
48
48
|
}
|
|
49
49
|
|
|
50
|
+
/* stylelint-disable-next-line selector-max-type -- description holds rich text; links can only be targeted by the `a` type selector */
|
|
50
51
|
.PageHeader-description--underlined-links a {
|
|
51
52
|
/* Ensure the accessibility is met, given that the description is written in light grey */
|
|
52
53
|
text-decoration: underline;
|
|
@@ -94,6 +95,7 @@
|
|
|
94
95
|
/* Match the title bar and actions height with the toggle menu button for proper vertical alignment */
|
|
95
96
|
.PageHeader--noBreadcrumb {
|
|
96
97
|
& .PageHeader-titleBar {
|
|
98
|
+
/* stylelint-disable-next-line primer/typography -- control size var intentionally matches the toggle-menu button height for vertical alignment */
|
|
97
99
|
line-height: var(--control-small-size);
|
|
98
100
|
}
|
|
99
101
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.Page{
|
|
1
|
+
.Page{min-width:var(--base-size-32);height:var(--base-size-32);padding:var(--base-size-8) var(--base-size-6);margin-right:var(--base-size-4);color:var(--fgColor-default);white-space:nowrap;vertical-align:middle;cursor:pointer;border-radius:var(--borderRadius-medium);transition:background-color .2s cubic-bezier(.3,0,.5,1);display:inline-flex;align-items:center;justify-content:center}.Page[rel=next]>svg,.Page[rel=prev]>svg{height:var(--base-size-16);width:var(--base-size-16)}.Page[rel=prev]>svg{margin-inline-end:var(--base-size-4)}.Page[rel=next]>svg{margin-inline-start:var(--base-size-4)}.Page:last-child{margin-right:0}.Page:focus,.Page:hover{-webkit-text-decoration:none;text-decoration:none;background-color:var(--control-transparent-bgColor-hover);outline:0;transition-duration:.1s}.Page:focus-visible{outline:2px solid var(--bgColor-accent-emphasis)}.Page:active{border-color:var(--borderColor-muted)}.Page[rel=next],.Page[rel=prev]{color:var(--fgColor-accent)}.Page[aria-current],.Page[aria-current]:hover{color:var(--fgColor-onEmphasis);background-color:var(--bgColor-accent-emphasis);border-color:#0000}.Page[aria-current]:focus-visible{outline:2px solid var(--bgColor-accent-emphasis);box-shadow:inset 0 0 0 var(--base-size-2) var(--fgColor-onEmphasis)}.Page[aria-hidden],.Page[aria-hidden]:hover,.Page[role=presentation],.Page[role=presentation]:hover{color:var(--fgColor-disabled);cursor:default;background-color:initial}.PaginationContainer{margin:var(--base-size-16) 0;text-align:center}@media (max-width:543.98px){.Page:not([rel=prev]):not([rel=next]){display:none}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["pagination.pcss"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["pagination.pcss"],"names":[],"mappings":"AAEA,MACE,6BAA8B,CAC9B,0BAA2B,CAC3B,6CAA8C,CAC9C,+BAAgC,CAChC,4BAA6B,CAC7B,kBAAmB,CACnB,qBAAsB,CACtB,cAAe,CACf,wCAAyC,CACzC,uDAA8D,CAC9D,mBAAoB,CACpB,kBAAmB,CACnB,sBACF,CAEA,wCAEE,0BAA2B,CAC3B,yBACF,CAEA,oBACE,oCACF,CAEA,oBACE,sCACF,CAEA,iBACE,cACF,CAEA,wBAEE,4BAAqB,CAArB,oBAAqB,CACrB,yDAA0D,CAC1D,SAAU,CACV,uBACF,CAEA,oBACE,gDACF,CAEA,aACE,qCACF,CAEA,gCAEE,2BACF,CAEA,8CAEE,+BAAgC,CAChC,+CAAgD,CAChD,kBACF,CAEA,kCACE,gDAAiD,CAEjD,mEACF,CAEA,oGAIE,6BAA8B,CAC9B,cAAe,CACf,wBACF,CAEA,qBACE,4BAA6B,CAC7B,iBACF,CAEA,4BACE,sCACE,YACF,CACF","file":"pagination.css","sourcesContent":["/* stylelint-disable selector-max-type -- pagination arrows are styled via `.Page[rel] > svg`; the svg icon can only be targeted by its type selector */\n\n.Page {\n min-width: var(--base-size-32);\n height: var(--base-size-32);\n padding: var(--base-size-8) var(--base-size-6);\n margin-right: var(--base-size-4);\n color: var(--fgColor-default);\n white-space: nowrap;\n vertical-align: middle;\n cursor: pointer;\n border-radius: var(--borderRadius-medium);\n transition: background-color 0.2s cubic-bezier(0.3, 0, 0.5, 1);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n.Page[rel='prev'] > svg,\n.Page[rel='next'] > svg {\n height: var(--base-size-16);\n width: var(--base-size-16);\n}\n\n.Page[rel='prev'] > svg {\n margin-inline-end: var(--base-size-4);\n}\n\n.Page[rel='next'] > svg {\n margin-inline-start: var(--base-size-4);\n}\n\n.Page:last-child {\n margin-right: 0;\n}\n\n.Page:hover,\n.Page:focus {\n text-decoration: none;\n background-color: var(--control-transparent-bgColor-hover);\n outline: 0;\n transition-duration: 0.1s;\n}\n\n.Page:focus-visible {\n outline: 2px solid var(--bgColor-accent-emphasis);\n}\n\n.Page:active {\n border-color: var(--borderColor-muted);\n}\n\n.Page[rel='prev'],\n.Page[rel='next'] {\n color: var(--fgColor-accent);\n}\n\n.Page[aria-current],\n.Page[aria-current]:hover {\n color: var(--fgColor-onEmphasis);\n background-color: var(--bgColor-accent-emphasis);\n border-color: transparent;\n}\n\n.Page[aria-current]:focus-visible {\n outline: 2px solid var(--bgColor-accent-emphasis);\n /* stylelint-disable-next-line primer/box-shadow -- custom focus-ring built from Primer size/color primitives; no single Primer box-shadow token matches */\n box-shadow: inset 0 0 0 var(--base-size-2) var(--fgColor-onEmphasis);\n}\n\n.Page[aria-hidden],\n.Page[aria-hidden]:hover,\n.Page[role='presentation'],\n.Page[role='presentation']:hover {\n color: var(--fgColor-disabled);\n cursor: default;\n background-color: transparent;\n}\n\n.PaginationContainer {\n margin: var(--base-size-16) 0;\n text-align: center;\n}\n\n@media (max-width: 543.98px){\n .Page:not([rel='prev']):not([rel='next']) {\n display: none;\n }\n}\n"]}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
/* stylelint-disable selector-max-type -- pagination arrows are styled via `.Page[rel] > svg`; the svg icon can only be targeted by its type selector */
|
|
2
|
+
|
|
1
3
|
.Page {
|
|
2
4
|
min-width: var(--base-size-32);
|
|
3
5
|
height: var(--base-size-32);
|
|
@@ -7,7 +9,7 @@
|
|
|
7
9
|
white-space: nowrap;
|
|
8
10
|
vertical-align: middle;
|
|
9
11
|
cursor: pointer;
|
|
10
|
-
border-radius: var(--borderRadius-medium
|
|
12
|
+
border-radius: var(--borderRadius-medium);
|
|
11
13
|
transition: background-color 0.2s cubic-bezier(0.3, 0, 0.5, 1);
|
|
12
14
|
display: inline-flex;
|
|
13
15
|
align-items: center;
|
|
@@ -62,6 +64,7 @@
|
|
|
62
64
|
|
|
63
65
|
.Page[aria-current]:focus-visible {
|
|
64
66
|
outline: 2px solid var(--bgColor-accent-emphasis);
|
|
67
|
+
/* stylelint-disable-next-line primer/box-shadow -- custom focus-ring built from Primer size/color primitives; no single Primer box-shadow token matches */
|
|
65
68
|
box-shadow: inset 0 0 0 var(--base-size-2) var(--fgColor-onEmphasis);
|
|
66
69
|
}
|
|
67
70
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.SidePanel-sectionHeader{align-items:center;
|
|
1
|
+
.SidePanel-sectionHeader{display:flex;align-items:center;height:32px;margin-bottom:var(--base-size-8)}.SidePanel-sectionCounter{margin-left:var(--base-size-8)}.SidePanel-sectionAction{justify-content:right;flex:1;display:flex}.SidePanel-sectionContent,.SidePanel-sectionDescription{margin-top:0}:is(.SidePanel-sectionContent,.SidePanel-sectionDescription):not(:last-child){margin-bottom:var(--base-size-16)}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["section.pcss"],"names":[],"mappings":"AAEA,
|
|
1
|
+
{"version":3,"sources":["section.pcss"],"names":[],"mappings":"AAEA,yBACE,YAAa,CACb,kBAAmB,CACnB,WAAY,CACZ,gCACF,CAEA,0BACE,8BACF,CAEA,yBACE,qBAAsB,CACtB,MAAO,CACP,YACF,CAEA,wDAEE,YAKF,CAHE,8EACE,iCACF","file":"section.css","sourcesContent":["/* CSS for OpenProject::SidePanel::Section */\n\n.SidePanel-sectionHeader {\n display: flex;\n align-items: center;\n height: 32px;\n margin-bottom: var(--base-size-8);\n}\n\n.SidePanel-sectionCounter {\n margin-left: var(--base-size-8);\n}\n\n.SidePanel-sectionAction {\n justify-content: right;\n flex: 1;\n display: flex;\n}\n\n.SidePanel-sectionContent,\n.SidePanel-sectionDescription {\n margin-top: 0;\n\n &:not(:last-child) {\n margin-bottom: var(--base-size-16);\n }\n}\n"]}
|
|
@@ -4,11 +4,11 @@
|
|
|
4
4
|
display: flex;
|
|
5
5
|
align-items: center;
|
|
6
6
|
height: 32px;
|
|
7
|
-
margin-bottom:
|
|
7
|
+
margin-bottom: var(--base-size-8);
|
|
8
8
|
}
|
|
9
9
|
|
|
10
10
|
.SidePanel-sectionCounter {
|
|
11
|
-
margin-left:
|
|
11
|
+
margin-left: var(--base-size-8);
|
|
12
12
|
}
|
|
13
13
|
|
|
14
14
|
.SidePanel-sectionAction {
|
|
@@ -22,6 +22,6 @@
|
|
|
22
22
|
margin-top: 0;
|
|
23
23
|
|
|
24
24
|
&:not(:last-child) {
|
|
25
|
-
margin-bottom:
|
|
25
|
+
margin-bottom: var(--base-size-16);
|
|
26
26
|
}
|
|
27
27
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.SubHeader{
|
|
1
|
+
.SubHeader{display:grid;grid-template-areas:"left middle right" "bottom bottom bottom";grid-template-columns:auto 1fr auto;align-items:baseline;margin-bottom:var(--base-size-16)}.SubHeader-rightPane{grid-area:right;display:flex;align-items:center;column-gap:12px}.SubHeader-middlePane{grid-area:middle;text-align:center;white-space:nowrap}.SubHeader-bottomPane{grid-area:bottom}.SubHeader-leftPane{grid-area:left;display:flex;align-items:center;flex-wrap:wrap;row-gap:var(--base-size-16);width:100%}:is(.SubHeader-leftPane [class*=FormControl-input-width--]):not(.FormControl-input-width--auto){width:100vw}.SubHeader-filterContainer{display:flex;flex-basis:max-content;width:100%;gap:8px}.SubHeader-filterInput_hiddenClearButton+.FormControl-input-trailingAction{display:none}@media (max-width:767.98px){.SubHeader{grid-template-areas:"left right" "middle middle" "bottom bottom";grid-template-columns:1fr auto}.SubHeader--expandedSearch{grid-template-areas:"left left" "middle middle" "bottom bottom"}.SubHeader--expandedSearch .SubHeader-hiddenOnExpand{display:none!important}.SubHeader--emptyLeftPane{grid-template-areas:"middle middle right" "bottom bottom bottom";grid-template-columns:auto 1fr auto}.SubHeader--emptyLeftPane .SubHeader-middlePane{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.SubHeader-middlePane{text-align:left}.SubHeader-middlePane:has(>*){margin-top:var(--base-size-16)}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["sub_header.pcss"],"names":[],"mappings":"AAEA,
|
|
1
|
+
{"version":3,"sources":["sub_header.pcss"],"names":[],"mappings":"AAEA,WACI,YAAa,CACb,8DAA+D,CAC/D,mCAAoC,CACpC,oBAAqB,CACrB,iCACJ,CAEA,qBACI,eAAgB,CAChB,YAAa,CACb,kBAAmB,CACnB,eACJ,CAEA,sBACI,gBAAiB,CACjB,iBAAkB,CAClB,kBACJ,CAEA,sBACI,gBACJ,CAEA,oBACI,cAAe,CACf,YAAa,CACb,kBAAmB,CACnB,cAAe,CACf,2BAA4B,CAC5B,UASJ,CAJQ,gGACI,WACJ,CAIR,2BACI,YAAa,CACb,sBAAuB,CACvB,UAAW,CACX,OACJ,CAEA,2EACE,YACF,CAEA,4BACI,WACI,gEAAiE,CACjE,8BACJ,CAEA,2BACI,+DACJ,CAEA,qDACI,sBACJ,CAEA,0BACI,gEAAiE,CACjE,mCACJ,CAEA,gDACI,kBAAmB,CACnB,sBAAuB,CACvB,eACJ,CAEA,sBACI,eACJ,CAEA,8BACI,8BACJ,CACJ","file":"sub_header.css","sourcesContent":["/* CSS for SubHeader */\n\n.SubHeader {\n display: grid;\n grid-template-areas: \"left middle right\" \"bottom bottom bottom\";\n grid-template-columns: auto 1fr auto;\n align-items: baseline;\n margin-bottom: var(--base-size-16);\n}\n\n.SubHeader-rightPane {\n grid-area: right;\n display: flex;\n align-items: center;\n column-gap: 12px;\n}\n\n.SubHeader-middlePane {\n grid-area: middle;\n text-align: center;\n white-space: nowrap;\n}\n\n.SubHeader-bottomPane {\n grid-area: bottom;\n}\n\n.SubHeader-leftPane {\n grid-area: left;\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n row-gap: var(--base-size-16);\n width: 100%;\n\n /* Since the container is not full width (due to the grid around it)\n we want it to grow, and then be limited by the max-width of the \"FormControl-input-width--xy\" class */\n & [class*='FormControl-input-width--'] {\n &:not(.FormControl-input-width--auto) {\n width: 100vw;\n }\n }\n}\n\n.SubHeader-filterContainer {\n display: flex;\n flex-basis: max-content;\n width: 100%;\n gap: 8px;\n}\n\n.SubHeader-filterInput_hiddenClearButton + .FormControl-input-trailingAction {\n display: none;\n}\n\n@media (max-width: 767.98px) {\n .SubHeader {\n grid-template-areas: \"left right\" \"middle middle\" \"bottom bottom\";\n grid-template-columns: 1fr auto;\n }\n\n .SubHeader--expandedSearch {\n grid-template-areas: \"left left\" \"middle middle\" \"bottom bottom\";\n }\n\n .SubHeader--expandedSearch .SubHeader-hiddenOnExpand {\n display: none !important;\n }\n\n .SubHeader--emptyLeftPane {\n grid-template-areas: \"middle middle right\" \"bottom bottom bottom\";\n grid-template-columns: auto 1fr auto;\n }\n\n .SubHeader--emptyLeftPane .SubHeader-middlePane {\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n }\n\n .SubHeader-middlePane {\n text-align: left;\n }\n\n .SubHeader-middlePane:has(> *) {\n margin-top: var(--base-size-16);\n }\n}\n"]}
|
|
@@ -10,7 +10,7 @@ module Primer
|
|
|
10
10
|
module InstanceMethods
|
|
11
11
|
delegate :render, :content_tag, :output_buffer, :capture, to: :@view_context
|
|
12
12
|
|
|
13
|
-
def render_in(view_context, &block)
|
|
13
|
+
def render_in(view_context, **_kwargs, &block)
|
|
14
14
|
@view_context = view_context
|
|
15
15
|
before_render
|
|
16
16
|
perform_render(&block)
|
|
@@ -76,7 +76,6 @@ module Primer
|
|
|
76
76
|
@input_arguments = system_arguments
|
|
77
77
|
@input_arguments.delete(:id) unless @input_arguments[:id].present?
|
|
78
78
|
@label_arguments = @input_arguments.delete(:label_arguments) || {}
|
|
79
|
-
@label_arguments[:for] = id if id.present?
|
|
80
79
|
|
|
81
80
|
@label_arguments[:class] = class_names(
|
|
82
81
|
@label_arguments[:class],
|
|
@@ -121,6 +120,11 @@ module Primer
|
|
|
121
120
|
end
|
|
122
121
|
# rubocop:enable Style/IfUnlessModifier
|
|
123
122
|
|
|
123
|
+
# Only set `for` when the id is known. Otherwise leave it unset so
|
|
124
|
+
# Rails generates the scoped id for both label and input; passing
|
|
125
|
+
# `for: nil` would suppress that and drop the association.
|
|
126
|
+
@label_arguments[:for] = @input_arguments[:id] if @input_arguments[:id].present?
|
|
127
|
+
|
|
124
128
|
# Whether or not to wrap the component in a FormControl, which renders a
|
|
125
129
|
# label above and validation message beneath the input.
|
|
126
130
|
@form_control = @input_arguments.delete(:form_control) { true }
|
|
@@ -69,7 +69,7 @@ module Primer
|
|
|
69
69
|
# assumes the presence of a builder so we create our own here. A builder
|
|
70
70
|
# cannot be constructed without a corresponding view context, which is why
|
|
71
71
|
# we have to override render_in and can't create it in the initializer.
|
|
72
|
-
def render_in(view_context, &block)
|
|
72
|
+
def render_in(view_context, **_kwargs, &block)
|
|
73
73
|
@builder = Primer::Forms::Builder.new(
|
|
74
74
|
nil, nil, view_context, {}
|
|
75
75
|
)
|