openproject-primer_view_components 0.69.1 → 0.69.2

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 (90) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +10 -0
  3. data/app/assets/styles/primer_view_components.css +1 -1
  4. data/app/assets/styles/primer_view_components.css.map +1 -1
  5. data/app/components/primer/alpha/segmented_control.css +1 -1
  6. data/app/components/primer/alpha/segmented_control.css.map +1 -1
  7. data/app/components/primer/beta/button.css +1 -1
  8. data/app/components/primer/beta/button.css.map +1 -1
  9. data/app/components/primer/beta/truncate.css +1 -1
  10. data/app/components/primer/beta/truncate.css.map +1 -1
  11. data/app/components/primer/open_project/flex_layout.rb +0 -2
  12. data/app/components/primer/open_project/grid_layout.rb +0 -2
  13. data/app/components/primer/open_project/tree_view.rb +1 -1
  14. data/app/controllers/primer/view_components/action_menu_controller.rb +52 -0
  15. data/app/controllers/primer/view_components/application_controller.rb +10 -0
  16. data/app/controllers/primer/view_components/auto_check_controller.rb +41 -0
  17. data/app/controllers/primer/view_components/auto_complete_test_controller.rb +55 -0
  18. data/app/controllers/primer/view_components/form_handler_controller.rb +31 -0
  19. data/app/controllers/primer/view_components/include_fragment_controller.rb +17 -0
  20. data/app/controllers/primer/view_components/multi_controller.rb +15 -0
  21. data/app/controllers/primer/view_components/nav_list_items_controller.rb +28 -0
  22. data/app/controllers/primer/view_components/select_panel_items_controller.rb +122 -0
  23. data/app/controllers/primer/view_components/toggle_switch_controller.rb +48 -0
  24. data/app/controllers/primer/view_components/tree_view_items.json +293 -0
  25. data/app/controllers/primer/view_components/tree_view_items_controller.rb +55 -0
  26. data/app/forms/auto_complete_form.rb +1 -1
  27. data/app/forms/immediate_validation_form.rb +3 -3
  28. data/app/lib/primer/forms/dsl/text_field_input.rb +1 -1
  29. data/app/views/primer/view_components/action_menu/deferred.html.erb +13 -0
  30. data/app/views/primer/view_components/action_menu/deferred_preload.html.erb +5 -0
  31. data/app/views/primer/view_components/action_menu/form_action.html.erb +2 -0
  32. data/app/views/primer/view_components/action_menu/landing.html.erb +3 -0
  33. data/app/views/primer/view_components/auto_check/_error_message.html.erb +1 -0
  34. data/app/views/primer/view_components/auto_check/_success_message.html.erb +1 -0
  35. data/app/views/primer/view_components/auto_check/_warning_message.html.erb +4 -0
  36. data/app/views/primer/view_components/auto_complete_test/index.html.erb +15 -0
  37. data/app/views/primer/view_components/auto_complete_test/no_results.html.erb +16 -0
  38. data/app/views/primer/view_components/form_handler/form_action.html.erb +1 -0
  39. data/app/views/primer/view_components/include_fragment/deferred.html.erb +3 -0
  40. data/app/views/primer/view_components/nav_list_items/index.html.erb +3 -0
  41. data/app/views/primer/view_components/select_panel_items/index.html.erb +15 -0
  42. data/app/views/primer/view_components/tree_view_items/async_alpha.html_fragment.erb +23 -0
  43. data/app/views/primer/view_components/tree_view_items/index.html_fragment.erb +24 -0
  44. data/lib/primer/view_components/engine.rb +4 -0
  45. data/lib/primer/view_components/version.rb +1 -1
  46. data/previews/primer/alpha/action_menu_preview/multiple_select_form.html.erb +1 -1
  47. data/previews/primer/alpha/action_menu_preview/single_select_form.html.erb +1 -1
  48. data/previews/primer/alpha/action_menu_preview/single_select_form_items.html.erb +2 -2
  49. data/previews/primer/alpha/action_menu_preview/with_actions.html.erb +2 -2
  50. data/previews/primer/alpha/action_menu_preview/with_deferred_content.html.erb +2 -2
  51. data/previews/primer/alpha/action_menu_preview.rb +1 -1
  52. data/previews/primer/alpha/auto_complete_preview.rb +6 -6
  53. data/previews/primer/alpha/dialog_preview.rb +1 -1
  54. data/previews/primer/alpha/include_fragment_preview.rb +2 -2
  55. data/previews/primer/alpha/select_panel_preview/custom_loading_description.html.erb +1 -1
  56. data/previews/primer/alpha/select_panel_preview/custom_loading_label.html.erb +1 -1
  57. data/previews/primer/alpha/select_panel_preview/eventually_local_fetch.html.erb +1 -1
  58. data/previews/primer/alpha/select_panel_preview/eventually_local_fetch_initial_failure.html.erb +1 -1
  59. data/previews/primer/alpha/select_panel_preview/eventually_local_fetch_no_results.html.erb +1 -1
  60. data/previews/primer/alpha/select_panel_preview/multiselect_form.html.erb +1 -1
  61. data/previews/primer/alpha/select_panel_preview/playground.html.erb +1 -1
  62. data/previews/primer/alpha/select_panel_preview/remote_fetch.html.erb +1 -1
  63. data/previews/primer/alpha/select_panel_preview/remote_fetch_filter_failure.html.erb +1 -1
  64. data/previews/primer/alpha/select_panel_preview/remote_fetch_form.html.erb +2 -2
  65. data/previews/primer/alpha/select_panel_preview/remote_fetch_initial_failure.html.erb +1 -1
  66. data/previews/primer/alpha/select_panel_preview/remote_fetch_no_results.html.erb +1 -1
  67. data/previews/primer/alpha/select_panel_preview/single_select_form.html.erb +1 -1
  68. data/previews/primer/alpha/text_field_preview/input_group_leading_action_menu.html.erb +1 -1
  69. data/previews/primer/alpha/text_field_preview.rb +3 -3
  70. data/previews/primer/alpha/toggle_switch_preview.rb +11 -11
  71. data/previews/primer/beta/auto_complete_preview/with_submit_button.html.erb +1 -1
  72. data/previews/primer/beta/auto_complete_preview.rb +18 -18
  73. data/previews/primer/beta/nav_list_preview.rb +2 -2
  74. data/previews/primer/forms_preview/action_menu_form.html.erb +1 -1
  75. data/previews/primer/forms_preview/auto_complete_form.html.erb +1 -1
  76. data/previews/primer/forms_preview/example_toggle_switch_form.html.erb +2 -2
  77. data/previews/primer/forms_preview/multi_input_form.html.erb +1 -1
  78. data/previews/primer/forms_preview/select_form.html.erb +1 -1
  79. data/previews/primer/open_project/danger_dialog_preview/with_form_builder_form_test.html.erb +1 -1
  80. data/previews/primer/open_project/danger_dialog_preview/with_form_test.html.erb +1 -1
  81. data/previews/primer/open_project/file_tree_view_preview/playground.html.erb +1 -1
  82. data/previews/primer/open_project/tree_view_preview/async_alpha.html.erb +1 -1
  83. data/previews/primer/open_project/tree_view_preview/loading_failure.html.erb +1 -1
  84. data/previews/primer/open_project/tree_view_preview/loading_skeleton.html.erb +1 -1
  85. data/previews/primer/open_project/tree_view_preview/loading_spinner.html.erb +1 -1
  86. data/previews/primer/open_project/tree_view_preview/playground.html.erb +1 -1
  87. data/previews/primer/url_helpers.rb +1 -0
  88. data/static/arguments.json +16 -48
  89. data/static/info_arch.json +728 -2182
  90. metadata +29 -2
@@ -0,0 +1,293 @@
1
+ {
2
+ "children": {
3
+ "primer": {
4
+ "children": {
5
+ "alpha": {
6
+ "children": {
7
+ "action_bar": {
8
+ "children": {},
9
+ "files": [
10
+ "divider.rb",
11
+ "item.rb"
12
+ ]
13
+ },
14
+ "action_list": {
15
+ "children": {},
16
+ "files": [
17
+ "divider.rb",
18
+ "form_wrapper.rb",
19
+ "heading.rb",
20
+ "item.rb"
21
+ ]
22
+ },
23
+ "action_menu": {
24
+ "children": {},
25
+ "files": [
26
+ "action_menu_element.ts",
27
+ "group.rb",
28
+ "heading.rb",
29
+ "list.rb",
30
+ "list_wrapper.rb"
31
+ ]
32
+ },
33
+ "auto_complete": {
34
+ "children": {},
35
+ "files": [
36
+ "item.rb"
37
+ ]
38
+ },
39
+ "dialog": {
40
+ "children": {},
41
+ "files": [
42
+ "body.rb",
43
+ "footer.rb",
44
+ "header.rb"
45
+ ]
46
+ },
47
+ "dropdown": {
48
+ "children": {},
49
+ "files": [
50
+ "menu.rb",
51
+ "menu.ts"
52
+ ]
53
+ },
54
+ "file_tree_view": {
55
+ "children": {},
56
+ "files": [
57
+ "directory_item.rb",
58
+ "file_item.rb"
59
+ ]
60
+ },
61
+ "nav_list": {
62
+ "children": {},
63
+ "files": [
64
+ "divider.rb",
65
+ "group.rb",
66
+ "heading.rb",
67
+ "item.rb"
68
+ ]
69
+ },
70
+ "navigation": {
71
+ "children": {},
72
+ "files": [
73
+ "tab.rb"
74
+ ]
75
+ },
76
+ "overlay": {
77
+ "children": {},
78
+ "files": [
79
+ "body.rb",
80
+ "footer.rb",
81
+ "header.rb"
82
+ ]
83
+ },
84
+ "segmented_control": {
85
+ "children": {},
86
+ "files": [
87
+ "item.rb"
88
+ ]
89
+ },
90
+ "tree_view": {
91
+ "children": {},
92
+ "files": [
93
+ "icon.rb",
94
+ "icon_pair.rb",
95
+ "item.rb",
96
+ "leaf_item.rb",
97
+ "spinner_loader.rb",
98
+ "sub_tree.rb",
99
+ "sub_tree_container.rb",
100
+ "sub_tree_item.rb",
101
+ "tree_view_icon_pair_element.ts",
102
+ "tree_view_sub_tree_item_element.ts",
103
+ "visual.rb"
104
+ ]
105
+ }
106
+ },
107
+ "files": [
108
+ "action_bar.pcss",
109
+ "action_bar.rb",
110
+ "action_bar_element.ts",
111
+ "action_list.pcss",
112
+ "action_list.rb",
113
+ "action_list.ts",
114
+ "action_menu.rb",
115
+ "auto_complete.pcss",
116
+ "auto_complete.rb",
117
+ "banner.pcss",
118
+ "banner.rb",
119
+ "button_marketing.pcss",
120
+ "button_marketing.rb",
121
+ "check_box.rb",
122
+ "check_box_group.rb",
123
+ "dialog.pcss",
124
+ "dialog.rb",
125
+ "dropdown.pcss",
126
+ "dropdown.rb",
127
+ "dropdown.ts",
128
+ "file_tree_view.rb",
129
+ "form_button.rb",
130
+ "form_control.rb",
131
+ "hellip_button.rb",
132
+ "hidden_text_expander.rb",
133
+ "image.rb",
134
+ "layout.pcss",
135
+ "layout.rb",
136
+ "menu.pcss",
137
+ "menu.rb",
138
+ "modal_dialog.ts",
139
+ "multi_input.rb",
140
+ "nav_list.rb",
141
+ "octicon_symbols.rb",
142
+ "overlay.pcss",
143
+ "overlay.rb",
144
+ "radio_button.rb",
145
+ "radio_button_group.rb",
146
+ "segmented_control.pcss",
147
+ "segmented_control.rb",
148
+ "segmented_control.ts",
149
+ "select.rb",
150
+ "select_panel.pcss",
151
+ "select_panel.rb",
152
+ "select_panel_element.ts",
153
+ "stack.pcss",
154
+ "stack.rb",
155
+ "stack_item.pcss",
156
+ "stack_item.rb",
157
+ "submit_button.rb",
158
+ "tab_container.rb",
159
+ "tab_container.ts",
160
+ "tab_nav.pcss",
161
+ "tab_nav.rb",
162
+ "tab_panels.rb",
163
+ "text_area.rb",
164
+ "text_field.pcss",
165
+ "text_field.rb",
166
+ "toggle_switch.pcss",
167
+ "toggle_switch.rb",
168
+ "toggle_switch.ts",
169
+ "tool_tip.ts",
170
+ "tooltip.rb",
171
+ "tree_view.pcss",
172
+ "tree_view.rb",
173
+ "underline_nav.pcss",
174
+ "underline_nav.rb",
175
+ "underline_panels.rb",
176
+ "x_banner.ts"
177
+ ]
178
+ },
179
+ "beta": {
180
+ "children": {
181
+ "auto_complete": {
182
+ "children": {},
183
+ "files": [
184
+ "auto_complete.ts",
185
+ "item.rb",
186
+ "no_result_item.rb"
187
+ ]
188
+ },
189
+ "border_box": {
190
+ "children": {},
191
+ "files": [
192
+ "header.rb"
193
+ ]
194
+ },
195
+ "nav_list": {
196
+ "children": {},
197
+ "files": [
198
+ "divider.rb",
199
+ "group.rb",
200
+ "heading.rb",
201
+ "item.rb"
202
+ ]
203
+ }
204
+ },
205
+ "files": [
206
+ "auto_complete.rb",
207
+ "avatar.pcss",
208
+ "avatar.rb",
209
+ "avatar_stack.pcss",
210
+ "avatar_stack.rb",
211
+ "base_button.rb",
212
+ "blankslate.pcss",
213
+ "blankslate.rb",
214
+ "border_box.pcss",
215
+ "border_box.rb",
216
+ "breadcrumbs.pcss",
217
+ "breadcrumbs.rb",
218
+ "button.pcss",
219
+ "button.rb",
220
+ "button_group.pcss",
221
+ "button_group.rb",
222
+ "clipboard_copy.rb",
223
+ "clipboard_copy.ts",
224
+ "clipboard_copy_button.rb",
225
+ "close_button.rb",
226
+ "counter.pcss",
227
+ "counter.rb",
228
+ "details.rb",
229
+ "details_toggle_element.ts",
230
+ "flash.pcss",
231
+ "flash.rb",
232
+ "heading.rb",
233
+ "icon_button.rb",
234
+ "label.pcss",
235
+ "label.rb",
236
+ "link.pcss",
237
+ "link.rb",
238
+ "markdown.rb",
239
+ "nav_list.rb",
240
+ "nav_list.ts",
241
+ "nav_list_group_element.ts",
242
+ "octicon.rb",
243
+ "popover.pcss",
244
+ "popover.rb",
245
+ "progress_bar.pcss",
246
+ "progress_bar.rb",
247
+ "relative_time.rb",
248
+ "relative_time.ts",
249
+ "spinner.rb",
250
+ "state.pcss",
251
+ "state.rb",
252
+ "subhead.pcss",
253
+ "subhead.rb",
254
+ "text.rb",
255
+ "timeline_item.pcss",
256
+ "timeline_item.rb",
257
+ "truncate.pcss",
258
+ "truncate.rb"
259
+ ]
260
+ },
261
+ "navigation": {
262
+ "children": {},
263
+ "files": [
264
+ "tab_component.rb"
265
+ ]
266
+ }
267
+ },
268
+ "files": [
269
+ "anchored_position.ts",
270
+ "base_component.rb",
271
+ "blankslate_component.rb",
272
+ "box.rb",
273
+ "button_component.rb",
274
+ "component.rb",
275
+ "conditional_wrapper.rb",
276
+ "content.rb",
277
+ "dialog_helper.ts",
278
+ "focus_group.ts",
279
+ "icon_button.rb",
280
+ "layout_component.rb",
281
+ "primer.pcss",
282
+ "primer.ts",
283
+ "responsive_arg.rb",
284
+ "scrollable_region.ts",
285
+ "shared_events.ts",
286
+ "tooltip.rb",
287
+ "truncate.pcss",
288
+ "truncate.rb",
289
+ "utils.ts"
290
+ ]
291
+ }
292
+ }
293
+ }
@@ -0,0 +1,55 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "json"
4
+
5
+
6
+ module Primer
7
+ module ViewComponents
8
+ # :nodoc:
9
+ # :nocov:
10
+ class TreeViewItemsController < ApplicationController
11
+ TREE = JSON.parse(File.read(File.join(__dir__, "tree_view_items.json"))).freeze
12
+
13
+ def index
14
+ # delay a bit so loading spinners, etc can be seen
15
+ sleep 1
16
+
17
+ if params[:fail] == "true"
18
+ head :internal_server_error and return
19
+ end
20
+
21
+ path = JSON.parse(params[:path])
22
+ node = path.inject(TREE) do |current, segment|
23
+ current["children"][segment]
24
+ end
25
+
26
+ entries = (
27
+ node["children"].keys.map { |label| [label, :directory] } +
28
+ node["files"].map { |label| [label, :file] }
29
+ )
30
+
31
+ entries.sort_by!(&:first)
32
+
33
+ render(
34
+ locals: {
35
+ entries: entries,
36
+ path: path,
37
+ loader: (params[:loader] || :spinner).to_sym,
38
+ select_variant: (params[:select_variant] || :none).to_sym
39
+ }
40
+ )
41
+ end
42
+
43
+ def async_alpha
44
+ # delay a bit so loading spinners, etc can be seen
45
+ sleep 1
46
+
47
+ render(
48
+ locals: {
49
+ action_menu_expanded: params[:action_menu_expanded] == "true"
50
+ }
51
+ )
52
+ end
53
+ end
54
+ end
55
+ end
@@ -9,7 +9,7 @@ class AutoCompleteForm < ApplicationForm
9
9
  name: :fruit,
10
10
  label: "Fruit",
11
11
  caption: "Please enter your favorite fruit",
12
- src: Primer::UrlHelpers.autocomplete_index_path,
12
+ src: Primer::UrlHelpers.primer_view_components.autocomplete_index_path,
13
13
  validation_message: "Something went wrong"
14
14
  )
15
15
 
@@ -8,14 +8,14 @@ class ImmediateValidationForm < ApplicationForm
8
8
  name: :has_error,
9
9
  label: "Will have error",
10
10
  caption: "Every time this checks with the server, it returns an error",
11
- auto_check_src: @view_context.example_check_error_path
11
+ auto_check_src: @view_context.primer_view_components.example_check_error_path
12
12
  )
13
13
 
14
14
  validation_form.text_field(
15
15
  name: :no_error,
16
16
  label: "Will not error",
17
17
  caption: "Will not have an error when it checks the server",
18
- auto_check_src: @view_context.example_check_ok_path,
18
+ auto_check_src: @view_context.primer_view_components.example_check_ok_path,
19
19
  validation_message: "This message will go away once you type something"
20
20
  )
21
21
 
@@ -23,7 +23,7 @@ class ImmediateValidationForm < ApplicationForm
23
23
  name: :random_error,
24
24
  label: "Random error or success",
25
25
  caption: "Server checks will randomly respond with errors or success",
26
- auto_check_src: @view_context.example_check_random_path
26
+ auto_check_src: @view_context.primer_view_components.example_check_random_path
27
27
  )
28
28
  end
29
29
  end
@@ -20,7 +20,7 @@ module Primer
20
20
  @leading_visual = system_arguments.delete(:leading_visual)
21
21
  @trailing_visual = system_arguments.delete(:trailing_visual)
22
22
  @leading_spinner = !!system_arguments.delete(:leading_spinner)
23
- @clear_button_id = system_arguments.delete(:clear_button_id)
23
+ @clear_button_id = system_arguments.delete(:clear_button_id) || SecureRandom.uuid
24
24
  @inset = system_arguments.delete(:inset)
25
25
  @monospace = system_arguments.delete(:monospace)
26
26
  @auto_check_src = system_arguments.delete(:auto_check_src)
@@ -0,0 +1,13 @@
1
+ <%= render(Primer::Alpha::ActionMenu::List.new(menu_id: "deferred")) do |list| %>
2
+ <% list.with_item(label: "Copy link", value: "", autofocus: true) %>
3
+ <% list.with_item(label: "Quote reply", value: "") %>
4
+ <% list.with_item(label: "Reference in new issue", value: "") %>
5
+ <% list.with_item(
6
+ label: "Show dialog",
7
+ tag: :button,
8
+ # this dialog is rendered by demo/app/views/action_menu/deferred.html.erb
9
+ content_arguments: { "data-show-dialog-id": "my-dialog" },
10
+ value: "",
11
+ scheme: :danger
12
+ ) %>
13
+ <% end %>
@@ -0,0 +1,5 @@
1
+ <%= render(Primer::Alpha::ActionMenu::List.new(menu_id: "deferred-preload")) do |list| %>
2
+ <% list.with_item(label: "Copy link", value: "", autofocus: true) %>
3
+ <% list.with_item(label: "Quote reply", value: "") %>
4
+ <% list.with_item(label: "Reference in new issue", value: "") %>
5
+ <% end %>
@@ -0,0 +1,2 @@
1
+ You selected <%= @value.inspect %><br>
2
+ Other params sent to server: <%= @other_params.inspect %>
@@ -0,0 +1,3 @@
1
+ <div class="action-menu-landing-page">
2
+ Hello world!
3
+ </div>
@@ -0,0 +1 @@
1
+ The name <code><%= input_value %></code> is already taken.
@@ -0,0 +1 @@
1
+ The name <code><%= input_value %></code> is available.
@@ -0,0 +1,4 @@
1
+ The name <strong><%= input_value %></strong> is available.
2
+ <div class="color-fg-muted">
3
+ The name can only contain ASCII letters, digits, and the characters <code>.</code>, <code>-</code> and <code>_</code>.
4
+ </div>
@@ -0,0 +1,15 @@
1
+ <%# erblint:counter DeprecatedComponentsCounter 2 %>
2
+ <% @fruit_list.each do |fruit| %>
3
+ <% if params['version'] == "alpha" %>
4
+ <%= render(Primer::Alpha::AutoComplete::Item.new(value: fruit)) { fruit } %>
5
+ <% else %>
6
+ <%= render(Primer::Beta::AutoComplete::Item.new(value: fruit)) do |component| %>
7
+ <% if @visual_type == "leading" %>
8
+ <% component.with_leading_visual_icon(icon: :"mark-github") %>
9
+ <% elsif @visual_type == "trailing" %>
10
+ <% component.with_trailing_visual_icon(icon: :"mark-github") %>
11
+ <% end %>
12
+ <%= fruit %>
13
+ <% end %>
14
+ <% end %>
15
+ <% end %>
@@ -0,0 +1,16 @@
1
+ <% if @fruit_list.length > 0 %>
2
+ <% @fruit_list.each do |fruit| %>
3
+ <%= render(Primer::Beta::AutoComplete::Item.new(value: fruit)) do |component| %>
4
+ <% if @visual_type == "leading" %>
5
+ <% component.with_leading_visual_icon(icon: :"mark-github") %>
6
+ <% elsif @visual_type == "trailing" %>
7
+ <% component.with_trailing_visual_icon(icon: :"mark-github") %>
8
+ <% end %>
9
+ <%= fruit %>
10
+ <% end %>
11
+ <% end %>
12
+ <% else %>
13
+ <%= render(Primer::Beta::AutoComplete::NoResultItem.new) do %>
14
+ No results!
15
+ <% end %>
16
+ <% end %>
@@ -0,0 +1 @@
1
+ Params sent to server: <%= @form_params.inspect %>
@@ -0,0 +1,3 @@
1
+ <div>
2
+ Hello world!
3
+ </div>
@@ -0,0 +1,3 @@
1
+ <% @data.each do |item_arguments| %>
2
+ <%= render(Primer::Beta::NavList::Item.new(list: @list, **item_arguments)) %>
3
+ <% end %>
@@ -0,0 +1,15 @@
1
+ <% unless results.empty? %>
2
+ <%= render(Primer::Alpha::SelectPanel::ItemList.new(
3
+ select_variant: (params[:select_variant] || :multiple).to_sym,
4
+ aria: {
5
+ label: "options",
6
+ },
7
+ )) do |list| %>
8
+ <% results.each do |result| %>
9
+ <% list.with_item(content_arguments: { data: { value: result[:value] } }, active: result[:selected] || false) do |item| %>
10
+ <% item.with_description { result[:description] } %>
11
+ <%= result[:title] %>
12
+ <% end %>
13
+ <% end %>
14
+ <% end %>
15
+ <% end %>
@@ -0,0 +1,23 @@
1
+ <%= render(Primer::OpenProject::TreeView::SubTree.new(path: ["primer"], node_variant: :div)) do |tree| %>
2
+ <% tree.with_sub_tree(label: "alpha") do |sub_tree| %>
3
+ <% sub_tree.with_leading_visual_icons do |icons| %>
4
+ <% icons.with_expanded_icon(icon: :"file-directory-open-fill", color: :accent) %>
5
+ <% icons.with_collapsed_icon(icon: :"file-directory-fill", color: :accent) %>
6
+ <% end %>
7
+
8
+ <% sub_tree.with_sub_tree(label: "action_menu", expanded: action_menu_expanded) do |sub_tree| %>
9
+ <% sub_tree.with_leading_visual_icons do |icons| %>
10
+ <% icons.with_expanded_icon(icon: :"file-directory-open-fill", color: :accent) %>
11
+ <% icons.with_collapsed_icon(icon: :"file-directory-fill", color: :accent) %>
12
+ <% end %>
13
+
14
+ <% sub_tree.with_leaf(label: "group.rb") do |item| %>
15
+ <% item.with_leading_visual_icon(icon: :file) %>
16
+ <% end %>
17
+
18
+ <% sub_tree.with_leaf(label: "heading.rb") do |item| %>
19
+ <% item.with_leading_visual_icon(icon: :file) %>
20
+ <% end %>
21
+ <% end %>
22
+ <% end %>
23
+ <% end %>
@@ -0,0 +1,24 @@
1
+ <%= render(Primer::OpenProject::TreeView::SubTree.new(path: path, select_variant: select_variant, node_variant: :div)) do |tree| %>
2
+ <% next if params[:empty] == "true" %>
3
+ <% entries.each do |label, type| %>
4
+ <% case type %>
5
+ <% when :directory %>
6
+ <% tree.with_sub_tree(label: label, select_variant: select_variant) do |sub_tree| %>
7
+ <% sub_tree.with_leading_visual_icons do |icons| %>
8
+ <% icons.with_expanded_icon(icon: :"file-directory-open-fill", color: :accent) %>
9
+ <% icons.with_collapsed_icon(icon: :"file-directory-fill", color: :accent) %>
10
+ <% end %>
11
+
12
+ <% if loader == :skeleton %>
13
+ <% sub_tree.with_loading_skeleton(src: primer_view_components.tree_view_items_path(loader: "skeleton", select_variant: select_variant)) %>
14
+ <% else %>
15
+ <% sub_tree.with_loading_spinner(src: primer_view_components.tree_view_items_path(loader: "spinner", select_variant: select_variant)) %>
16
+ <% end %>
17
+ <% end %>
18
+ <% when :file %>
19
+ <% tree.with_leaf(label: label, select_variant: select_variant) do |item| %>
20
+ <% item.with_leading_visual_icon(icon: :file) %>
21
+ <% end %>
22
+ <% end %>
23
+ <% end %>
24
+ <% end %>
@@ -27,6 +27,10 @@ module Primer
27
27
  config.primer_view_components.validate_class_names = !Rails.env.production?
28
28
  config.primer_view_components.raise_on_invalid_aria = false
29
29
 
30
+ initializer "primer_view_components.mime_types" do
31
+ Mime::Type.register "text/fragment+html", :html_fragment
32
+ end
33
+
30
34
  initializer "primer_view_components.assets" do |app|
31
35
  app.config.assets.precompile += %w[primer_view_components] if app.config.respond_to?(:assets)
32
36
  end
@@ -6,7 +6,7 @@ module Primer
6
6
  module VERSION
7
7
  MAJOR = 0
8
8
  MINOR = 69
9
- PATCH = 1
9
+ PATCH = 2
10
10
 
11
11
  STRING = [MAJOR, MINOR, PATCH].join(".")
12
12
  end
@@ -1,4 +1,4 @@
1
- <%= form_with(url: action_menu_form_action_path(format: route_format)) do |f| %>
1
+ <%= form_with(url: primer_view_components.action_menu_form_action_path(format: route_format)) do |f| %>
2
2
  <% content = -> (base) do %>
3
3
  <% base.with_item(label: "Fast forward", data: { value: "fast_forward" }) %>
4
4
  <% base.with_item(label: "Recursive", data: { value: "recursive" }) %>
@@ -1,4 +1,4 @@
1
- <%= form_with(url: action_menu_form_action_path(format: route_format)) do |f| %>
1
+ <%= form_with(url: primer_view_components.action_menu_form_action_path(format: route_format)) do |f| %>
2
2
  <%= render(Primer::Alpha::ActionMenu.new(select_variant: :single, dynamic_label: true, dynamic_label_prefix: "Strategy", form_arguments: { builder: f, name: "foo" })) do |menu| %>
3
3
  <% menu.with_show_button { "Strategy" } %>
4
4
  <% menu.with_item(label: "Fast forward", data: { value: "fast_forward" }) %>
@@ -1,7 +1,7 @@
1
1
  <% contents = -> (menu) do %>
2
2
  <% menu.with_item(
3
3
  label: "Repository",
4
- href: action_menu_form_action_path(format: route_format),
4
+ href: primer_view_components.action_menu_form_action_path(format: route_format),
5
5
  form_arguments: {
6
6
  method: :post,
7
7
  inputs: [{
@@ -15,7 +15,7 @@
15
15
  ) %>
16
16
  <% menu.with_item(
17
17
  label: "Date",
18
- href: action_menu_form_action_path(format: route_format),
18
+ href: primer_view_components.action_menu_form_action_path(format: route_format),
19
19
  form_arguments: {
20
20
  method: :post,
21
21
  inputs: [{
@@ -10,11 +10,11 @@
10
10
  <% component.with_show_button { "Trigger" } %>
11
11
  <% contents = -> (base) do %>
12
12
  <% base.with_item(label: "Alert", tag: :button, id: "alert-item", disabled: disable_items) %>
13
- <% base.with_item(label: "Navigate", tag: :a, content_arguments: { href: action_menu_landing_path }, disabled: disable_items) %>
13
+ <% base.with_item(label: "Navigate", tag: :a, content_arguments: { href: primer_view_components.action_menu_landing_path }, disabled: disable_items) %>
14
14
  <% base.with_item(label: "Copy text", tag: :"clipboard-copy", content_arguments: { value: "Text to copy" }, disabled: disable_items) %>
15
15
  <% base.with_item(
16
16
  label: "Submit form",
17
- href: action_menu_form_action_path(format: route_format),
17
+ href: primer_view_components.action_menu_form_action_path(format: route_format),
18
18
  form_arguments: {
19
19
  name: "foo", value: "bar", method: :post
20
20
  },
@@ -1,10 +1,10 @@
1
1
  <% if nest_in_sub_menu %>
2
2
  <%= render(Primer::Alpha::ActionMenu.new) do |menu| %>
3
3
  <% menu.with_show_button { "Menu with deferred content" } %>
4
- <% menu.with_sub_menu_item(label: "Sub-menu", menu_id: "deferred", src: action_menu_deferred_path) %>
4
+ <% menu.with_sub_menu_item(label: "Sub-menu", menu_id: "deferred", src: primer_view_components.action_menu_deferred_path) %>
5
5
  <% end %>
6
6
  <% else %>
7
- <%= render(Primer::Alpha::ActionMenu.new(menu_id: "deferred", src: action_menu_deferred_path)) do |menu| %>
7
+ <%= render(Primer::Alpha::ActionMenu.new(menu_id: "deferred", src: primer_view_components.action_menu_deferred_path)) do |menu| %>
8
8
  <% menu.with_show_button { "Menu with deferred content" } %>
9
9
  <% end %>
10
10
  <% end %>
@@ -310,7 +310,7 @@ module Primer
310
310
  # @label With deferred preloaded content
311
311
  #
312
312
  def with_deferred_preloaded_content
313
- render(Primer::Alpha::ActionMenu.new(menu_id: "deferred-preload", preload: true, src: UrlHelpers.action_menu_deferred_preload_path)) do |menu|
313
+ render(Primer::Alpha::ActionMenu.new(menu_id: "deferred-preload", preload: true, src: UrlHelpers.primer_view_components.action_menu_deferred_preload_path)) do |menu|
314
314
  menu.with_show_button { "Menu with deferred and preloaded content" }
315
315
  end
316
316
  end