openproject-primer_view_components 0.84.5 → 0.86.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.
Files changed (65) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +16 -0
  3. data/app/assets/javascripts/components/primer/open_project/sub_header_element.d.ts +1 -1
  4. data/app/assets/javascripts/primer_view_components.js +1 -1
  5. data/app/assets/javascripts/primer_view_components.js.map +1 -1
  6. data/app/assets/styles/primer_view_components.css +1 -1
  7. data/app/assets/styles/primer_view_components.css.map +1 -1
  8. data/app/components/primer/alpha/select_panel_element.js +2 -2
  9. data/app/components/primer/alpha/select_panel_element.ts +2 -2
  10. data/app/components/primer/alpha/tree_view/leaf_node.html.erb +5 -0
  11. data/app/components/primer/alpha/tree_view/leaf_node.rb +18 -0
  12. data/app/components/primer/alpha/tree_view/node.html.erb +3 -0
  13. data/app/components/primer/alpha/tree_view/node.rb +10 -0
  14. data/app/components/primer/alpha/tree_view/sub_tree_node.html.erb +5 -0
  15. data/app/components/primer/alpha/tree_view/sub_tree_node.rb +18 -0
  16. data/app/components/primer/alpha/tree_view/trailing_action.html.erb +3 -0
  17. data/app/components/primer/alpha/tree_view/trailing_action.rb +18 -0
  18. data/app/components/primer/alpha/tree_view.css +1 -1
  19. data/app/components/primer/alpha/tree_view.css.json +4 -1
  20. data/app/components/primer/alpha/tree_view.css.map +1 -1
  21. data/app/components/primer/alpha/tree_view.pcss +22 -6
  22. data/app/components/primer/open_project/filterable_tree_view/sub_tree.rb +6 -6
  23. data/app/components/primer/open_project/filterable_tree_view.css +1 -0
  24. data/app/components/primer/open_project/filterable_tree_view.css.json +14 -0
  25. data/app/components/primer/open_project/filterable_tree_view.css.map +1 -0
  26. data/app/components/primer/open_project/filterable_tree_view.html.erb +26 -14
  27. data/app/components/primer/open_project/filterable_tree_view.js +294 -5
  28. data/app/components/primer/open_project/filterable_tree_view.pcss +57 -0
  29. data/app/components/primer/open_project/filterable_tree_view.rb +58 -10
  30. data/app/components/primer/open_project/filterable_tree_view.ts +316 -4
  31. data/app/components/primer/open_project/sub_header.css +1 -1
  32. data/app/components/primer/open_project/sub_header.css.json +2 -1
  33. data/app/components/primer/open_project/sub_header.css.map +1 -1
  34. data/app/components/primer/open_project/sub_header.html.erb +11 -8
  35. data/app/components/primer/open_project/sub_header.pcss +14 -7
  36. data/app/components/primer/open_project/sub_header.rb +46 -25
  37. data/app/components/primer/open_project/sub_header_element.d.ts +1 -1
  38. data/app/components/primer/open_project/sub_header_element.js +6 -6
  39. data/app/components/primer/open_project/sub_header_element.ts +5 -10
  40. data/app/components/primer/primer.pcss +1 -0
  41. data/app/controllers/primer/view_components/filterable_tree_view_items_controller.rb +192 -0
  42. data/app/views/primer/view_components/filterable_tree_view_items/_node.html.erb +38 -0
  43. data/app/views/primer/view_components/filterable_tree_view_items/async_form_tree.html.erb +9 -0
  44. data/app/views/primer/view_components/filterable_tree_view_items/index.html.erb +6 -0
  45. data/config/routes.rb +4 -0
  46. data/lib/primer/view_components/version.rb +2 -2
  47. data/previews/primer/alpha/select_panel_preview.rb +0 -27
  48. data/previews/primer/alpha/text_area_preview.rb +0 -1
  49. data/previews/primer/alpha/text_field_preview.rb +0 -1
  50. data/previews/primer/alpha/tree_view_preview/leaf_node_playground.html.erb +4 -0
  51. data/previews/primer/alpha/tree_view_preview.rb +3 -0
  52. data/previews/primer/open_project/filterable_tree_view_preview/async.html.erb +3 -0
  53. data/previews/primer/open_project/filterable_tree_view_preview/async_form_input.html.erb +9 -0
  54. data/previews/primer/open_project/filterable_tree_view_preview/link_nodes.html.erb +18 -0
  55. data/previews/primer/open_project/filterable_tree_view_preview.rb +23 -2
  56. data/previews/primer/open_project/sub_header_preview/quick_filters.html.erb +47 -0
  57. data/previews/primer/open_project/sub_header_preview.rb +23 -1
  58. data/static/arguments.json +28 -0
  59. data/static/audited_at.json +1 -0
  60. data/static/classes.json +9 -0
  61. data/static/constants.json +10 -1
  62. data/static/info_arch.json +189 -30
  63. data/static/previews.json +94 -29
  64. data/static/statuses.json +1 -0
  65. metadata +18 -10
@@ -7,7 +7,7 @@ module Primer
7
7
  # @label Playground
8
8
  #
9
9
  # @param expanded [Boolean] toggle
10
- # @param select_variant [Symbol] select [multiple, single]
10
+ # @param select_variant [Symbol] select [multiple, single, none]
11
11
  # @param show_checkbox [Boolean] toggle
12
12
  # @param show_segmented_control [Boolean] toggle
13
13
  def playground(expanded: true, select_variant: :multiple, show_checkbox: true, show_segmented_control: true)
@@ -31,7 +31,7 @@ module Primer
31
31
 
32
32
  # @label Form input
33
33
  #
34
- # @param select_variant [Symbol] select [multiple, single]
34
+ # @param select_variant [Symbol] select [multiple, single, none]
35
35
  # @param expanded [Boolean] toggle
36
36
  def form_input(select_variant: :multiple, expanded: true)
37
37
  render_with_template(locals: {
@@ -114,6 +114,27 @@ module Primer
114
114
  })
115
115
  end
116
116
 
117
+ # @label Async (server-side filtering)
118
+ #
119
+ # @param select_variant [Symbol] select [multiple, single, none]
120
+ def async(select_variant: :single)
121
+ render_with_template(locals: {
122
+ select_variant: select_variant.to_sym
123
+ })
124
+ end
125
+
126
+ # @label Async form input
127
+ def async_form_input
128
+ render_with_template
129
+ end
130
+
131
+ # @label Link nodes
132
+ def link_nodes(expanded: true)
133
+ render_with_template(locals: {
134
+ expanded: coerce_bool(expanded)
135
+ })
136
+ end
137
+
117
138
  # @label Hide checkbox
118
139
  #
119
140
  # @param include_sub_items [Boolean] toggle
@@ -0,0 +1,47 @@
1
+ <%= render(Primer::OpenProject::SubHeader.new(collapsed_search: true)) do |component|
2
+ component.with_filter_input(name: "filter", label: "Filter")
3
+
4
+ component.with_filter_button(mobile_label: "All filters") do
5
+ "All filters"
6
+ end
7
+
8
+ component.with_quick_filter do
9
+ render(Primer::Alpha::SelectPanel.new(title: "Version",
10
+ select_variant: :single,
11
+ fetch_strategy: :local,
12
+ dynamic_label: true,
13
+ dynamic_label_prefix: "Version")) do |panel|
14
+ panel.with_show_button { "Version" }
15
+ panel.with_item(label: "1.0")
16
+ panel.with_item(label: "2.0")
17
+ panel.with_item(label: "2.1")
18
+ end
19
+ end
20
+
21
+ component.with_quick_filter do
22
+ render(Primer::Alpha::SelectPanel.new(title: "Assignee",
23
+ select_variant: :multiple,
24
+ fetch_strategy: :local,
25
+ dynamic_label: true,
26
+ dynamic_label_prefix: "Assignee")) do |panel|
27
+ panel.with_show_button { "Assignee" }
28
+ panel.with_avatar_item(username: "Alice", src: "https://avatars.githubusercontent.com/u/1?v=4")
29
+ panel.with_avatar_item(username: "Bob", src: "https://avatars.githubusercontent.com/u/2?v=4")
30
+ panel.with_avatar_item(username: "Carol", src: "https://avatars.githubusercontent.com/u/3?v=4")
31
+ panel.with_avatar_item(username: "Dave", src: "https://avatars.githubusercontent.com/u/4?v=4")
32
+ panel.with_avatar_item(username: "Eve", src: "https://avatars.githubusercontent.com/u/5?v=4")
33
+ panel.with_avatar_item(username: "Frank", src: "https://avatars.githubusercontent.com/u/6?v=4")
34
+ panel.with_avatar_item(username: "Grace", src: "https://avatars.githubusercontent.com/u/7?v=4")
35
+ panel.with_avatar_item(username: "Heidi", src: "https://avatars.githubusercontent.com/u/8?v=4")
36
+ panel.with_avatar_item(username: "Ivan", src: "https://avatars.githubusercontent.com/u/9?v=4")
37
+ panel.with_avatar_item(username: "Judy", src: "https://avatars.githubusercontent.com/u/10?v=4")
38
+ panel.with_footer(show_divider: true) do
39
+ render(Primer::Beta::Button.new(scheme: :primary)) { "Apply" }
40
+ end
41
+ end
42
+ end
43
+
44
+ component.with_action_button(leading_icon: :plus, label: "Create", scheme: :primary) do
45
+ "Create"
46
+ end
47
+ end %>
@@ -12,6 +12,7 @@ module Primer
12
12
  # @param show_filter_button toggle
13
13
  # @param show_action_button toggle
14
14
  # @param show_clear_button toggle
15
+ # @param collapsed_search toggle
15
16
  # @param text text
16
17
  # @param value text
17
18
  def playground(
@@ -19,10 +20,11 @@ module Primer
19
20
  show_clear_button: true,
20
21
  show_filter_button: true,
21
22
  show_action_button: true,
23
+ collapsed_search: false,
22
24
  text: nil,
23
25
  value: nil
24
26
  )
25
- render(Primer::OpenProject::SubHeader.new) do |component|
27
+ render(Primer::OpenProject::SubHeader.new(collapsed_search: collapsed_search)) do |component|
26
28
  component.with_filter_input(
27
29
  name: "filter",
28
30
  label: "Filter",
@@ -98,6 +100,26 @@ module Primer
98
100
  end
99
101
  end
100
102
 
103
+ # @label With collapsed search
104
+ def collapsed_search
105
+ render(Primer::OpenProject::SubHeader.new(collapsed_search: true)) do |component|
106
+ component.with_filter_input(name: "filter", label: "Filter")
107
+ component.with_filter_button do |button|
108
+ button.with_trailing_visual_counter(count: "15")
109
+ "Filter"
110
+ end
111
+
112
+ component.with_action_button(leading_icon: :plus, label: "Create", scheme: :primary) do
113
+ "Create"
114
+ end
115
+ end
116
+ end
117
+
118
+ # @label With QuickFilters
119
+ def quick_filters
120
+ render_with_template(locals: {})
121
+ end
122
+
101
123
  # @label With a custom area below
102
124
  def bottom_pane
103
125
  render_with_template(locals: {})
@@ -3757,6 +3757,22 @@
3757
3757
  }
3758
3758
  ]
3759
3759
  },
3760
+ {
3761
+ "component": "TreeView::TrailingAction",
3762
+ "status": "alpha",
3763
+ "a11y_reviewed": false,
3764
+ "short_name": "TreeViewTrailingAction",
3765
+ "source": "https://github.com/primer/view_components/tree/main/app/components/primer/alpha/tree_view/trailing_action.rb",
3766
+ "lookbook": "https://primer.style/view-components/lookbook/inspect/primer/alpha/tree_view/trailing_action/default/",
3767
+ "parameters": [
3768
+ {
3769
+ "name": "action",
3770
+ "type": "ViewComponent::Base",
3771
+ "default": "N/A",
3772
+ "description": "A component or other renderable to use as the action button etc."
3773
+ }
3774
+ ]
3775
+ },
3760
3776
  {
3761
3777
  "component": "TreeView::Visual",
3762
3778
  "status": "alpha",
@@ -6151,6 +6167,12 @@
6151
6167
  "source": "https://github.com/primer/view_components/tree/main/app/components/primer/open_project/filterable_tree_view.rb",
6152
6168
  "lookbook": "https://primer.style/view-components/lookbook/inspect/primer/open_project/filterable_tree_view/default/",
6153
6169
  "parameters": [
6170
+ {
6171
+ "name": "src",
6172
+ "type": "String",
6173
+ "default": "`nil`",
6174
+ "description": "URL of the server endpoint that returns a filtered `<tree-view>` HTML fragment. When set, activates async (server-side) filtering mode. See \"Async loading strategy\" above."
6175
+ },
6154
6176
  {
6155
6177
  "name": "tree_view_arguments",
6156
6178
  "type": "Hash",
@@ -6473,6 +6495,12 @@
6473
6495
  "source": "https://github.com/primer/view_components/tree/main/app/components/primer/open_project/sub_header.rb",
6474
6496
  "lookbook": "https://primer.style/view-components/lookbook/inspect/primer/open_project/sub_header/default/",
6475
6497
  "parameters": [
6498
+ {
6499
+ "name": "collapsed_search",
6500
+ "type": "Boolean",
6501
+ "default": "`false`",
6502
+ "description": "When true, the search bar starts collapsed as an icon button on all screen sizes. Clicking expands it."
6503
+ },
6476
6504
  {
6477
6505
  "name": "system_arguments",
6478
6506
  "type": "Hash",
@@ -84,6 +84,7 @@
84
84
  "Primer::Alpha::TreeView::SubTree": "",
85
85
  "Primer::Alpha::TreeView::SubTreeContainer": "",
86
86
  "Primer::Alpha::TreeView::SubTreeNode": "",
87
+ "Primer::Alpha::TreeView::TrailingAction": "",
87
88
  "Primer::Alpha::TreeView::Visual": "",
88
89
  "Primer::Alpha::UnderlineNav": "",
89
90
  "Primer::Alpha::UnderlinePanels": "",
data/static/classes.json CHANGED
@@ -271,6 +271,15 @@
271
271
  "DragHandle": [
272
272
  "Primer::OpenProject::DragHandle"
273
273
  ],
274
+ "FilterableTreeViewLayout": [
275
+ "Primer::OpenProject::FilterableTreeView"
276
+ ],
277
+ "FilterableTreeViewLoadingSkeleton": [
278
+ "Primer::OpenProject::FilterableTreeView"
279
+ ],
280
+ "FilterableTreeViewTreeContainer": [
281
+ "Primer::OpenProject::FilterableTreeView"
282
+ ],
274
283
  "FormControl": [
275
284
  "Primer::Alpha::TextField"
276
285
  ],
@@ -852,6 +852,7 @@
852
852
  "SubTree": "Primer::Alpha::TreeView::SubTree",
853
853
  "SubTreeContainer": "Primer::Alpha::TreeView::SubTreeContainer",
854
854
  "SubTreeNode": "Primer::Alpha::TreeView::SubTreeNode",
855
+ "TrailingAction": "Primer::Alpha::TreeView::TrailingAction",
855
856
  "Visual": "Primer::Alpha::TreeView::Visual"
856
857
  },
857
858
  "Primer::Alpha::TreeView::Icon": {
@@ -918,6 +919,9 @@
918
919
  "descendants"
919
920
  ]
920
921
  },
922
+ "Primer::Alpha::TreeView::TrailingAction": {
923
+ "GeneratedSlotMethods": "Primer::Alpha::TreeView::TrailingAction::GeneratedSlotMethods"
924
+ },
921
925
  "Primer::Alpha::TreeView::Visual": {
922
926
  "GeneratedSlotMethods": "Primer::Alpha::TreeView::Visual::GeneratedSlotMethods"
923
927
  },
@@ -1820,6 +1824,11 @@
1820
1824
  "label": "No results"
1821
1825
  },
1822
1826
  "GeneratedSlotMethods": "Primer::OpenProject::FilterableTreeView::GeneratedSlotMethods",
1827
+ "SUPPORTED_SELECT_VARIANTS": [
1828
+ "multiple",
1829
+ "single",
1830
+ "none"
1831
+ ],
1823
1832
  "SubTree": "Primer::OpenProject::FilterableTreeView::SubTree"
1824
1833
  },
1825
1834
  "Primer::OpenProject::FilterableTreeView::SubTree": {
@@ -1978,8 +1987,8 @@
1978
1987
  "none",
1979
1988
  "flex"
1980
1989
  ],
1990
+ "FILTER_EXPAND_BUTTON_TARGET_SELECTOR": "sub-header.filterExpandButton",
1981
1991
  "GeneratedSlotMethods": "Primer::OpenProject::SubHeader::GeneratedSlotMethods",
1982
- "HIDDEN_FILTER_TARGET_SELECTOR": "sub-header.hiddenItemsOnExpandedFilter",
1983
1992
  "MOBILE_ACTIONS_DISPLAY": [
1984
1993
  "flex",
1985
1994
  "none"