openproject-primer_view_components 0.86.2 → 0.87.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 (26) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +16 -0
  3. data/app/assets/javascripts/primer_view_components.js +1 -1
  4. data/app/assets/javascripts/primer_view_components.js.map +1 -1
  5. data/app/components/primer/alpha/action_menu/action_menu_element.js +14 -5
  6. data/app/components/primer/alpha/action_menu/action_menu_element.ts +14 -4
  7. data/app/components/primer/alpha/select_panel_element.js +11 -1
  8. data/app/components/primer/alpha/select_panel_element.ts +11 -2
  9. data/app/components/primer/open_project/filterable_tree_view.rb +6 -5
  10. data/app/components/primer/open_project/sub_header/{quick_filter.rb → quick_action_component.rb} +7 -1
  11. data/app/components/primer/open_project/sub_header.html.erb +2 -0
  12. data/app/components/primer/open_project/sub_header.rb +22 -8
  13. data/app/components/primer/open_project/sub_header_element.js +3 -2
  14. data/app/components/primer/open_project/sub_header_element.ts +3 -2
  15. data/lib/primer/view_components/version.rb +2 -2
  16. data/previews/primer/alpha/select_panel_preview/with_dynamic_label.html.erb +1 -1
  17. data/previews/primer/alpha/select_panel_preview/with_dynamic_label_and_aria_prefix.html.erb +1 -1
  18. data/previews/primer/alpha/select_panel_preview.rb +14 -4
  19. data/previews/primer/open_project/filterable_tree_view_preview/custom_no_results_text.html.erb +1 -1
  20. data/previews/primer/open_project/sub_header_preview/quick_filters.html.erb +8 -0
  21. data/static/arguments.json +2 -2
  22. data/static/audited_at.json +1 -1
  23. data/static/constants.json +3 -3
  24. data/static/info_arch.json +3 -3
  25. data/static/statuses.json +1 -1
  26. metadata +2 -2
@@ -469,6 +469,7 @@ _ActionMenuElement_handleItemActivated = function _ActionMenuElement_handleItemA
469
469
  else {
470
470
  // multi-select mode allows unchecking a checked item
471
471
  item.setAttribute('aria-checked', `${checked}`);
472
+ __classPrivateFieldGet(this, _ActionMenuElement_instances, "m", _ActionMenuElement_setDynamicLabel).call(this);
472
473
  }
473
474
  __classPrivateFieldGet(this, _ActionMenuElement_instances, "m", _ActionMenuElement_updateInput).call(this);
474
475
  this.dispatchEvent(new CustomEvent('itemActivated', {
@@ -498,21 +499,29 @@ _ActionMenuElement_isOpen = function _ActionMenuElement_isOpen() {
498
499
  return this.popoverElement?.matches(':popover-open');
499
500
  };
500
501
  _ActionMenuElement_setDynamicLabel = function _ActionMenuElement_setDynamicLabel() {
501
- if (this.selectVariant !== 'single')
502
- return;
503
502
  if (!this.dynamicLabel)
504
503
  return;
505
504
  const invokerLabel = this.invokerLabel;
506
505
  if (!invokerLabel)
507
506
  return;
508
507
  __classPrivateFieldSet(this, _ActionMenuElement_originalLabel, __classPrivateFieldGet(this, _ActionMenuElement_originalLabel, "f") || (invokerLabel.textContent || ''), "f");
509
- const itemLabel = this.querySelector('[aria-checked=true] .ActionListItem-label');
508
+ let itemLabel;
509
+ if (this.selectVariant === 'single') {
510
+ itemLabel = this.querySelector('[aria-checked=true] .ActionListItem-label')?.textContent?.trim();
511
+ }
512
+ else if (this.selectVariant === 'multiple') {
513
+ itemLabel = Array.from(this.querySelectorAll(`[aria-checked=true] .ActionListItem-label`))
514
+ .map(label => (label.textContent || '').trim())
515
+ .filter(Boolean)
516
+ .join(', ');
517
+ }
518
+ itemLabel || (itemLabel = __classPrivateFieldGet(this, _ActionMenuElement_originalLabel, "f"));
510
519
  if (itemLabel && this.dynamicLabel) {
511
520
  const prefixSpan = document.createElement('span');
512
521
  prefixSpan.classList.add('color-fg-muted');
513
522
  const contentSpan = document.createElement('span');
514
- prefixSpan.textContent = this.dynamicLabelPrefix;
515
- contentSpan.textContent = itemLabel.textContent || '';
523
+ prefixSpan.textContent = this.dynamicLabelPrefix ? `${this.dynamicLabelPrefix} ` : '';
524
+ contentSpan.textContent = itemLabel;
516
525
  invokerLabel.replaceChildren(prefixSpan, contentSpan);
517
526
  }
518
527
  else {
@@ -455,6 +455,8 @@ export class ActionMenuElement extends HTMLElement {
455
455
  } else {
456
456
  // multi-select mode allows unchecking a checked item
457
457
  item.setAttribute('aria-checked', `${checked}`)
458
+
459
+ this.#setDynamicLabel()
458
460
  }
459
461
 
460
462
  this.#updateInput()
@@ -497,18 +499,26 @@ export class ActionMenuElement extends HTMLElement {
497
499
  }
498
500
 
499
501
  #setDynamicLabel() {
500
- if (this.selectVariant !== 'single') return
501
502
  if (!this.dynamicLabel) return
502
503
  const invokerLabel = this.invokerLabel
503
504
  if (!invokerLabel) return
504
505
  this.#originalLabel ||= invokerLabel.textContent || ''
505
- const itemLabel = this.querySelector('[aria-checked=true] .ActionListItem-label')
506
+ let itemLabel: string | undefined
507
+ if (this.selectVariant === 'single') {
508
+ itemLabel = this.querySelector('[aria-checked=true] .ActionListItem-label')?.textContent?.trim()
509
+ } else if (this.selectVariant === 'multiple') {
510
+ itemLabel = Array.from(this.querySelectorAll(`[aria-checked=true] .ActionListItem-label`))
511
+ .map(label => (label.textContent || '').trim())
512
+ .filter(Boolean)
513
+ .join(', ')
514
+ }
515
+ itemLabel ||= this.#originalLabel
506
516
  if (itemLabel && this.dynamicLabel) {
507
517
  const prefixSpan = document.createElement('span')
508
518
  prefixSpan.classList.add('color-fg-muted')
509
519
  const contentSpan = document.createElement('span')
510
- prefixSpan.textContent = this.dynamicLabelPrefix
511
- contentSpan.textContent = itemLabel.textContent || ''
520
+ prefixSpan.textContent = this.dynamicLabelPrefix ? `${this.dynamicLabelPrefix} ` : ''
521
+ contentSpan.textContent = itemLabel
512
522
  invokerLabel.replaceChildren(prefixSpan, contentSpan)
513
523
  } else {
514
524
  invokerLabel.textContent = this.#originalLabel
@@ -866,6 +866,7 @@ _SelectPanelElement_handleItemActivated = function _SelectPanelElement_handleIte
866
866
  else {
867
867
  __classPrivateFieldGet(this, _SelectPanelElement_instances, "m", _SelectPanelElement_removeSelectedItem).call(this, item);
868
868
  }
869
+ __classPrivateFieldGet(this, _SelectPanelElement_instances, "m", _SelectPanelElement_setDynamicLabel).call(this);
869
870
  }
870
871
  __classPrivateFieldGet(this, _SelectPanelElement_instances, "m", _SelectPanelElement_updateInput).call(this);
871
872
  __classPrivateFieldGet(this, _SelectPanelElement_instances, "m", _SelectPanelElement_updateTabIndices).call(this);
@@ -885,7 +886,16 @@ _SelectPanelElement_setDynamicLabel = function _SelectPanelElement_setDynamicLab
885
886
  if (!invokerLabel)
886
887
  return;
887
888
  __classPrivateFieldSet(this, _SelectPanelElement_originalLabel, __classPrivateFieldGet(this, _SelectPanelElement_originalLabel, "f") || (invokerLabel.textContent || ''), "f");
888
- const itemLabel = this.querySelector(`[${this.ariaSelectionType}=true] .ActionListItem-label`)?.textContent || __classPrivateFieldGet(this, _SelectPanelElement_originalLabel, "f");
889
+ let itemLabel;
890
+ if (this.selectVariant === 'single') {
891
+ itemLabel = this.querySelector(`[${this.ariaSelectionType}=true] .ActionListItem-label`)?.textContent;
892
+ }
893
+ else if (this.selectVariant === 'multiple') {
894
+ itemLabel = Array.from(this.querySelectorAll(`[${this.ariaSelectionType}=true] .ActionListItem-label`))
895
+ .map(label => label.textContent?.trim() ?? '')
896
+ .join(', ');
897
+ }
898
+ itemLabel || (itemLabel = __classPrivateFieldGet(this, _SelectPanelElement_originalLabel, "f"));
889
899
  if (itemLabel) {
890
900
  const prefixSpan = document.createElement('span');
891
901
  prefixSpan.classList.add('color-fg-muted');
@@ -916,6 +916,8 @@ export class SelectPanelElement extends HTMLElement {
916
916
  } else {
917
917
  this.#removeSelectedItem(item)
918
918
  }
919
+
920
+ this.#setDynamicLabel()
919
921
  }
920
922
 
921
923
  this.#updateInput()
@@ -952,8 +954,15 @@ export class SelectPanelElement extends HTMLElement {
952
954
  const invokerLabel = this.invokerLabel
953
955
  if (!invokerLabel) return
954
956
  this.#originalLabel ||= invokerLabel.textContent || ''
955
- const itemLabel =
956
- this.querySelector(`[${this.ariaSelectionType}=true] .ActionListItem-label`)?.textContent || this.#originalLabel
957
+ let itemLabel: string | undefined
958
+ if (this.selectVariant === 'single') {
959
+ itemLabel = this.querySelector(`[${this.ariaSelectionType}=true] .ActionListItem-label`)?.textContent
960
+ } else if (this.selectVariant === 'multiple') {
961
+ itemLabel = Array.from(this.querySelectorAll(`[${this.ariaSelectionType}=true] .ActionListItem-label`))
962
+ .map(label => label.textContent?.trim() ?? '')
963
+ .join(', ')
964
+ }
965
+ itemLabel ||= this.#originalLabel
957
966
  if (itemLabel) {
958
967
  const prefixSpan = document.createElement('span')
959
968
  prefixSpan.classList.add('color-fg-muted')
@@ -199,10 +199,10 @@ module Primer
199
199
  src: nil,
200
200
  tree_view_arguments: {},
201
201
  form_arguments: {},
202
- filter_input_arguments: DEFAULT_FILTER_INPUT_ARGUMENTS.dup,
203
- filter_mode_control_arguments: DEFAULT_FILTER_MODE_CONTROL_ARGUMENTS.dup,
204
- include_sub_items_check_box_arguments: DEFAULT_INCLUDE_SUB_ITEMS_CHECK_BOX_ARGUMENTS.dup,
205
- no_results_node_arguments: DEFAULT_NO_RESULTS_NODE_ARGUMENTS.dup,
202
+ filter_input_arguments: {},
203
+ filter_mode_control_arguments: {},
204
+ include_sub_items_check_box_arguments: {},
205
+ no_results_node_arguments: {},
206
206
  **system_arguments
207
207
  )
208
208
  @tree_view_arguments = tree_view_arguments.dup
@@ -218,6 +218,7 @@ module Primer
218
218
  **tree_view_arguments
219
219
  )
220
220
 
221
+ filter_input_arguments = filter_input_arguments.reverse_merge(DEFAULT_FILTER_INPUT_ARGUMENTS)
221
222
  filter_input_arguments[:data] = merge_data(
222
223
  filter_input_arguments, {
223
224
  data: { target: "filterable-tree-view.filterInput" }
@@ -250,7 +251,7 @@ module Primer
250
251
  @system_arguments[:tag] = :"filterable-tree-view"
251
252
  @system_arguments[:src] = src if src
252
253
 
253
- @no_results_node_arguments = no_results_node_arguments
254
+ @no_results_node_arguments = no_results_node_arguments.reverse_merge(DEFAULT_NO_RESULTS_NODE_ARGUMENTS)
254
255
  end
255
256
 
256
257
  def with_default_filter_modes
@@ -5,11 +5,17 @@ module Primer
5
5
  # Thin wrapper for quick filter slots that defers BaseComponent construction to render time,
6
6
  # allowing system arguments (e.g. display) to be mutated in before_render.
7
7
  # Do not use standalone
8
- class SubHeader::QuickFilter < Primer::Component
8
+ class SubHeader::QuickActionComponent < Primer::Component
9
9
  status :open_project
10
10
 
11
11
  def initialize(**system_arguments)
12
12
  @system_arguments = system_arguments
13
+ system_arguments[:tag] = :div
14
+ system_arguments[:mr] ||= 2
15
+ system_arguments[:classes] = class_names(
16
+ "SubHeader-hiddenOnExpand",
17
+ system_arguments[:classes]
18
+ )
13
19
  end
14
20
 
15
21
  def merge_system_arguments!(**other_arguments)
@@ -7,6 +7,8 @@
7
7
 
8
8
  <%= render @collapsed_filter_trigger if @collapsed_filter_trigger.present? %>
9
9
 
10
+ <%= quick_sort %>
11
+ <%= quick_group %>
10
12
  <% quick_filters.each do |quick_filter| %>
11
13
  <%= quick_filter %>
12
14
  <% end %>
@@ -101,7 +101,7 @@ module Primer
101
101
  system_arguments[:data][:action] += " input:sub-header#toggleFilterInputClearButton focus:sub-header#toggleFilterInputClearButton"
102
102
  end
103
103
 
104
- trigger_display = @collapsed_search ? :inline_flex : [:inline_flex, :none]
104
+ trigger_display = @collapsed_search ? :inline_flex : [:inline_flex, :inline_flex, :none]
105
105
 
106
106
  @collapsed_filter_trigger = Primer::Beta::IconButton.new(icon: system_arguments[:leading_visual][:icon],
107
107
  display: trigger_display,
@@ -170,15 +170,27 @@ module Primer
170
170
  }
171
171
  }
172
172
 
173
- # Quick filters shown in the left pane next to the search bar (0–5 items).
174
- # Hidden on mobile. Requires all_filters_button to be set when used.
173
+ # A slot for a generic sorting component. Will be rendered next to the search input
174
+ renders_one :quick_sort, lambda { |**kwargs|
175
+ deny_tag_argument(**kwargs)
176
+
177
+ QuickActionComponent.new(**kwargs)
178
+ }
179
+
180
+ # A slot for a generic sorting component. Will be rendered next to the sorting button
181
+ renders_one :quick_group, lambda { |**kwargs|
182
+ deny_tag_argument(**kwargs)
183
+
184
+ QuickActionComponent.new(**kwargs)
185
+ }
186
+
187
+ # Quick filters shown in the left pane next to the search bar (0–5 items total across all types).
188
+ # Hidden on smaller screens when more than one `quick_filter` is provided. Requires `filter_button` when using more than one `quick_filter`.
175
189
  # Supports ActionMenus, Buttons, IconButtons, SelectPanels, and SegmentedControls inside the block.
176
190
  renders_many :quick_filters, lambda { |**kwargs|
177
191
  deny_tag_argument(**kwargs)
178
- kwargs[:tag] = :div
179
- kwargs[:mr] ||= 2
180
192
 
181
- QuickFilter.new(**kwargs)
193
+ QuickActionComponent.new(**kwargs)
182
194
  }
183
195
 
184
196
  renders_one :segmented_control, lambda { |**system_arguments, &block|
@@ -234,12 +246,14 @@ module Primer
234
246
  end
235
247
 
236
248
  def before_render
249
+ all_quick_actions = [quick_sort, quick_group].compact + quick_filters
250
+
237
251
  if quick_filters.size > 1 && filter_button.nil?
238
252
  raise ArgumentError, "You must provide a filter_button when using quick_filters."
239
253
  end
240
254
 
241
255
  if quick_filters.size > 5
242
- raise ArgumentError, "SubHeader supports a maximum of 5 quick_filters, got #{quick_filters.size}."
256
+ raise ArgumentError, "SubHeader supports a maximum of 5 quick_filters, got #{all_quick_actions.size}."
243
257
  end
244
258
 
245
259
  if quick_filters.size > 1
@@ -250,7 +264,7 @@ module Primer
250
264
 
251
265
  @system_arguments[:classes] = class_names(
252
266
  @system_arguments[:classes],
253
- "SubHeader--emptyLeftPane" => !segmented_control? && !filter_button && !filter_input && quick_filters.empty?
267
+ "SubHeader--emptyLeftPane" => !segmented_control? && !filter_button && !filter_input && all_quick_actions.empty?
254
268
  )
255
269
  end
256
270
 
@@ -24,9 +24,10 @@ let SubHeaderElement = class SubHeaderElement extends HTMLElement {
24
24
  }
25
25
  expandFilterInput() {
26
26
  for (const item of this.shownItemsOnExpandedFilter) {
27
- item.classList.remove('d-none');
27
+ item.classList.remove('d-none', 'd-sm-none');
28
28
  }
29
29
  for (const item of this.filterExpandButton) {
30
+ item.classList.remove('d-inline-flex', 'd-sm-inline-flex');
30
31
  item.classList.add('d-none');
31
32
  }
32
33
  this.classList.add('SubHeader--expandedSearch');
@@ -37,7 +38,7 @@ let SubHeaderElement = class SubHeaderElement extends HTMLElement {
37
38
  item.classList.remove('d-none');
38
39
  }
39
40
  for (const item of this.shownItemsOnExpandedFilter) {
40
- item.classList.add('d-none');
41
+ item.classList.add('d-none', 'd-sm-none');
41
42
  }
42
43
  this.classList.remove('SubHeader--expandedSearch');
43
44
  }
@@ -29,9 +29,10 @@ class SubHeaderElement extends HTMLElement {
29
29
 
30
30
  expandFilterInput() {
31
31
  for (const item of this.shownItemsOnExpandedFilter) {
32
- item.classList.remove('d-none')
32
+ item.classList.remove('d-none', 'd-sm-none')
33
33
  }
34
34
  for (const item of this.filterExpandButton) {
35
+ item.classList.remove('d-inline-flex', 'd-sm-inline-flex')
35
36
  item.classList.add('d-none')
36
37
  }
37
38
  this.classList.add('SubHeader--expandedSearch')
@@ -43,7 +44,7 @@ class SubHeaderElement extends HTMLElement {
43
44
  item.classList.remove('d-none')
44
45
  }
45
46
  for (const item of this.shownItemsOnExpandedFilter) {
46
- item.classList.add('d-none')
47
+ item.classList.add('d-none', 'd-sm-none')
47
48
  }
48
49
  this.classList.remove('SubHeader--expandedSearch')
49
50
  }
@@ -5,8 +5,8 @@ module Primer
5
5
  module ViewComponents
6
6
  module VERSION
7
7
  MAJOR = 0
8
- MINOR = 86
9
- PATCH = 2
8
+ MINOR = 87
9
+ PATCH = 0
10
10
 
11
11
  STRING = [MAJOR, MINOR, PATCH].join(".")
12
12
  end
@@ -4,7 +4,7 @@
4
4
  data: { interaction_subject: subject_id },
5
5
  id: "with_avatar_items",
6
6
  title: "Select users",
7
- select_variant: :single,
7
+ select_variant: select_variant,
8
8
  fetch_strategy: :local,
9
9
  dynamic_label: true,
10
10
  dynamic_label_prefix: "Item",
@@ -4,7 +4,7 @@
4
4
  data: { interaction_subject: subject_id },
5
5
  id: "with_avatar_items",
6
6
  title: "Select users",
7
- select_variant: :single,
7
+ select_variant: select_variant,
8
8
  fetch_strategy: :local,
9
9
  dynamic_label: true,
10
10
  dynamic_label_prefix: "Item",
@@ -144,15 +144,25 @@ module Primer
144
144
  # @label With dynamic label
145
145
  #
146
146
  # @param open_on_load toggle
147
- def with_dynamic_label(open_on_load: false)
148
- render_with_template(locals: { open_on_load: open_on_load })
147
+ # @param select_variant [Symbol] select [single, multiple]
148
+ def with_dynamic_label(open_on_load: false, select_variant: :single)
149
+ render_with_template(locals: {
150
+ open_on_load: open_on_load,
151
+ # .to_sym workaround for https://github.com/lookbook-hq/lookbook/issues/640
152
+ select_variant: select_variant.to_sym
153
+ })
149
154
  end
150
155
 
151
156
  # @label With dynamic label and aria prefix
152
157
  #
153
158
  # @param open_on_load toggle
154
- def with_dynamic_label_and_aria_prefix(open_on_load: false)
155
- render_with_template(locals: { open_on_load: open_on_load })
159
+ # @param select_variant [Symbol] select [single, multiple]
160
+ def with_dynamic_label_and_aria_prefix(open_on_load: false, select_variant: :single)
161
+ render_with_template(locals: {
162
+ open_on_load: open_on_load,
163
+ # .to_sym workaround for https://github.com/lookbook-hq/lookbook/issues/640
164
+ select_variant: select_variant.to_sym
165
+ })
156
166
  end
157
167
 
158
168
  # @!endgroup
@@ -1,5 +1,5 @@
1
1
  <%= render(Primer::OpenProject::FilterableTreeView.new(
2
- filter_input_arguments: {placeholder: "Search me!", name: "filter", label: "Filter", visually_hide_label: true},
2
+ filter_input_arguments: {placeholder: "Search me!", visually_hide_label: true},
3
3
  no_results_node_arguments: { label: "All wizards and witches have left the building" })) do |tree| %>
4
4
  <% tree.with_sub_tree(label: "Students", expanded: expanded) do |hogwarts| %>
5
5
  <% hogwarts.with_sub_tree(label: "Ravenclaw", expanded: expanded) do |ravenclaw| %>
@@ -5,6 +5,14 @@
5
5
  "All filters"
6
6
  end
7
7
 
8
+ component.with_quick_sort do
9
+ render(Primer::Beta::IconButton.new(icon: :"sort-desc", "aria-label": "Sort"))
10
+ end
11
+
12
+ component.with_quick_group do
13
+ render(Primer::Beta::IconButton.new(icon: :rows, "aria-label": "Group"))
14
+ end
15
+
8
16
  component.with_quick_filter do
9
17
  render(Primer::Alpha::SegmentedControl.new("aria-label": "File view")) do |component|
10
18
  component.with_item(label: "Monthly", selected: true)
@@ -6600,10 +6600,10 @@
6600
6600
  ]
6601
6601
  },
6602
6602
  {
6603
- "component": "OpenProject::SubHeader::QuickFilter",
6603
+ "component": "OpenProject::SubHeader::QuickActionComponent",
6604
6604
  "status": "open_project",
6605
6605
  "a11y_reviewed": false,
6606
- "short_name": "OpenProjectSubHeaderQuickFilter",
6606
+ "short_name": "OpenProjectSubHeaderQuickActionComponent",
6607
6607
  "source": "https://github.com/primer/view_components/tree/main/app/components/primer/open_project/sub_header/quick_filter.rb",
6608
6608
  "lookbook": "https://primer.style/view-components/lookbook/inspect/primer/open_project/sub_header/quick_filter/default/",
6609
6609
  "parameters": []
@@ -173,7 +173,7 @@
173
173
  "Primer::OpenProject::SubHeader::Button": "",
174
174
  "Primer::OpenProject::SubHeader::ButtonGroup": "",
175
175
  "Primer::OpenProject::SubHeader::Menu": "",
176
- "Primer::OpenProject::SubHeader::QuickFilter": "",
176
+ "Primer::OpenProject::SubHeader::QuickActionComponent": "",
177
177
  "Primer::OpenProject::SubHeader::SegmentedControl": "2023-02-01",
178
178
  "Primer::OpenProject::ZenModeButton": "",
179
179
  "Primer::Tooltip": "",
@@ -1996,7 +1996,7 @@
1996
1996
  "none"
1997
1997
  ],
1998
1998
  "Menu": "Primer::OpenProject::SubHeader::Menu",
1999
- "QuickFilter": "Primer::OpenProject::SubHeader::QuickFilter",
1999
+ "QuickActionComponent": "Primer::OpenProject::SubHeader::QuickActionComponent",
2000
2000
  "SHOWN_FILTER_TARGET_SELECTOR": "sub-header.shownItemsOnExpandedFilter",
2001
2001
  "SegmentedControl": "Primer::OpenProject::SubHeader::SegmentedControl"
2002
2002
  },
@@ -2009,8 +2009,8 @@
2009
2009
  "Primer::OpenProject::SubHeader::Menu": {
2010
2010
  "GeneratedSlotMethods": "Primer::OpenProject::SubHeader::Menu::GeneratedSlotMethods"
2011
2011
  },
2012
- "Primer::OpenProject::SubHeader::QuickFilter": {
2013
- "GeneratedSlotMethods": "Primer::OpenProject::SubHeader::QuickFilter::GeneratedSlotMethods"
2012
+ "Primer::OpenProject::SubHeader::QuickActionComponent": {
2013
+ "GeneratedSlotMethods": "Primer::OpenProject::SubHeader::QuickActionComponent::GeneratedSlotMethods"
2014
2014
  },
2015
2015
  "Primer::OpenProject::SubHeader::SegmentedControl": {
2016
2016
  "GeneratedSlotMethods": "Primer::OpenProject::SubHeader::SegmentedControl::GeneratedSlotMethods"
@@ -22108,16 +22108,16 @@
22108
22108
  "subcomponents": []
22109
22109
  },
22110
22110
  {
22111
- "fully_qualified_name": "Primer::OpenProject::SubHeader::QuickFilter",
22111
+ "fully_qualified_name": "Primer::OpenProject::SubHeader::QuickActionComponent",
22112
22112
  "description": "Thin wrapper for quick filter slots that defers BaseComponent construction to render time,\nallowing system arguments (e.g. display) to be mutated in before_render.\nDo not use standalone",
22113
22113
  "accessibility_docs": null,
22114
22114
  "is_form_component": false,
22115
22115
  "is_published": true,
22116
22116
  "requires_js": false,
22117
- "component": "OpenProject::SubHeader::QuickFilter",
22117
+ "component": "OpenProject::SubHeader::QuickActionComponent",
22118
22118
  "status": "open_project",
22119
22119
  "a11y_reviewed": false,
22120
- "short_name": "OpenProjectSubHeaderQuickFilter",
22120
+ "short_name": "OpenProjectSubHeaderQuickActionComponent",
22121
22121
  "source": "https://github.com/primer/view_components/tree/main/app/components/primer/open_project/sub_header/quick_filter.rb",
22122
22122
  "lookbook": "https://primer.style/view-components/lookbook/inspect/primer/open_project/sub_header/quick_filter/default/",
22123
22123
  "parameters": [],
data/static/statuses.json CHANGED
@@ -173,7 +173,7 @@
173
173
  "Primer::OpenProject::SubHeader::Button": "open_project",
174
174
  "Primer::OpenProject::SubHeader::ButtonGroup": "open_project",
175
175
  "Primer::OpenProject::SubHeader::Menu": "open_project",
176
- "Primer::OpenProject::SubHeader::QuickFilter": "open_project",
176
+ "Primer::OpenProject::SubHeader::QuickActionComponent": "open_project",
177
177
  "Primer::OpenProject::SubHeader::SegmentedControl": "open_project",
178
178
  "Primer::OpenProject::ZenModeButton": "open_project",
179
179
  "Primer::Tooltip": "deprecated",
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: openproject-primer_view_components
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.86.2
4
+ version: 0.87.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - GitHub Open Source
@@ -689,7 +689,7 @@ files:
689
689
  - app/components/primer/open_project/sub_header/button.rb
690
690
  - app/components/primer/open_project/sub_header/button_group.rb
691
691
  - app/components/primer/open_project/sub_header/menu.rb
692
- - app/components/primer/open_project/sub_header/quick_filter.rb
692
+ - app/components/primer/open_project/sub_header/quick_action_component.rb
693
693
  - app/components/primer/open_project/sub_header/segmented_control.rb
694
694
  - app/components/primer/open_project/sub_header_element.d.ts
695
695
  - app/components/primer/open_project/sub_header_element.js