@mixtint/primer-view-components 0.78.0 → 0.84.5

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 (71) hide show
  1. package/README.md +20 -1
  2. package/app/assets/javascripts/components/primer/alpha/tree_view/tree_view.d.ts +1 -0
  3. package/app/assets/javascripts/components/primer/open_project/avatar_fallback.d.ts +28 -0
  4. package/app/assets/javascripts/components/primer/primer.d.ts +2 -0
  5. package/app/assets/javascripts/lib/primer/forms/character_counter.d.ts +41 -0
  6. package/app/assets/javascripts/lib/primer/forms/primer_text_area.d.ts +13 -0
  7. package/app/assets/javascripts/lib/primer/forms/primer_text_field.d.ts +2 -0
  8. package/app/assets/javascripts/primer_view_components.js +1 -1
  9. package/app/assets/javascripts/primer_view_components.js.map +1 -1
  10. package/app/assets/styles/primer_view_components.css +343 -22
  11. package/app/assets/styles/primer_view_components.css.map +1 -1
  12. package/app/components/primer/alpha/action_bar_element.js +68 -77
  13. package/app/components/primer/alpha/action_list.css +1 -1
  14. package/app/components/primer/alpha/action_list.js +1 -1
  15. package/app/components/primer/alpha/action_menu/action_menu_element.js +5 -1
  16. package/app/components/primer/alpha/dialog.css +12 -0
  17. package/app/components/primer/alpha/dialog.css.json +2 -1
  18. package/app/components/primer/alpha/segmented_control.js +1 -1
  19. package/app/components/primer/alpha/select_panel_element.js +4 -2
  20. package/app/components/primer/alpha/tab_nav.css +8 -1
  21. package/app/components/primer/alpha/tab_nav.css.json +1 -0
  22. package/app/components/primer/alpha/toggle_switch.js +1 -1
  23. package/app/components/primer/alpha/tool_tip.js +13 -6
  24. package/app/components/primer/alpha/tree_view/tree_view.d.ts +1 -0
  25. package/app/components/primer/alpha/tree_view/tree_view.js +24 -17
  26. package/app/components/primer/alpha/tree_view/tree_view_icon_pair_element.js +1 -1
  27. package/app/components/primer/alpha/tree_view/tree_view_include_fragment_element.js +1 -1
  28. package/app/components/primer/alpha/tree_view/tree_view_sub_tree_node_element.js +25 -2
  29. package/app/components/primer/alpha/x_banner.js +1 -1
  30. package/app/components/primer/beta/avatar_stack.css +21 -31
  31. package/app/components/primer/beta/avatar_stack.css.json +7 -4
  32. package/app/components/primer/beta/blankslate.css +7 -0
  33. package/app/components/primer/beta/blankslate.css.json +1 -0
  34. package/app/components/primer/beta/details_toggle_element.js +1 -1
  35. package/app/components/primer/beta/nav_list.js +1 -1
  36. package/app/components/primer/beta/nav_list_group_element.js +1 -1
  37. package/app/components/primer/beta/state.css +1 -2
  38. package/app/components/primer/beta/timeline_item.css +2 -1
  39. package/app/components/primer/dialog_helper.js +24 -9
  40. package/app/components/primer/open_project/avatar_fallback.d.ts +28 -0
  41. package/app/components/primer/open_project/avatar_fallback.js +105 -0
  42. package/app/components/primer/open_project/avatar_stack.css +29 -0
  43. package/app/components/primer/open_project/avatar_stack.css.json +10 -0
  44. package/app/components/primer/open_project/border_box/collapsible_header.css +72 -10
  45. package/app/components/primer/open_project/border_box/collapsible_header.css.json +9 -2
  46. package/app/components/primer/open_project/inline_message.css +42 -0
  47. package/app/components/primer/open_project/inline_message.css.json +13 -0
  48. package/app/components/primer/open_project/page_header.css +40 -3
  49. package/app/components/primer/open_project/page_header.css.json +8 -1
  50. package/app/components/primer/open_project/pagination.css +87 -0
  51. package/app/components/primer/open_project/pagination.css.json +24 -0
  52. package/app/components/primer/primer.d.ts +2 -0
  53. package/app/components/primer/primer.js +2 -0
  54. package/app/components/primer/scrollable_region.js +1 -1
  55. package/app/lib/primer/forms/character_counter.d.ts +41 -0
  56. package/app/lib/primer/forms/character_counter.js +114 -0
  57. package/app/lib/primer/forms/primer_multi_input.js +1 -1
  58. package/app/lib/primer/forms/primer_text_area.d.ts +13 -0
  59. package/app/lib/primer/forms/primer_text_area.js +53 -0
  60. package/app/lib/primer/forms/primer_text_field.d.ts +2 -0
  61. package/app/lib/primer/forms/primer_text_field.js +17 -3
  62. package/app/lib/primer/forms/toggle_switch_input.js +1 -1
  63. package/package.json +23 -22
  64. package/static/arguments.json +234 -2
  65. package/static/audited_at.json +6 -0
  66. package/static/classes.json +27 -2
  67. package/static/constants.json +66 -1
  68. package/static/form_previews.json +15 -0
  69. package/static/info_arch.json +821 -82
  70. package/static/previews.json +432 -9
  71. package/static/statuses.json +6 -0
@@ -1633,6 +1633,19 @@
1633
1633
  ]
1634
1634
  }
1635
1635
  },
1636
+ {
1637
+ "preview_path": "primer/alpha/action_menu/fullscreen_when_narrow",
1638
+ "name": "fullscreen_when_narrow",
1639
+ "snapshot": "false",
1640
+ "skip_rules": {
1641
+ "wont_fix": [
1642
+ "region"
1643
+ ],
1644
+ "will_fix": [
1645
+ "color-contrast"
1646
+ ]
1647
+ }
1648
+ },
1636
1649
  {
1637
1650
  "preview_path": "primer/alpha/action_menu/sub_menus",
1638
1651
  "name": "sub_menus",
@@ -1674,6 +1687,12 @@
1674
1687
  "default": "N/A",
1675
1688
  "description": "One of `:inside_bottom`, `:inside_center`, `:inside_left`, `:inside_right`, `:inside_top`, `:outside_bottom`, `:outside_left`, `:outside_right`, or `:outside_top`."
1676
1689
  },
1690
+ {
1691
+ "name": "anchor_when_narrow",
1692
+ "type": "Symbol",
1693
+ "default": "N/A",
1694
+ "description": "One of `:bottom`, `:fullscreen`, `:inherit`, `:left`, or `:right`."
1695
+ },
1677
1696
  {
1678
1697
  "name": "menu_id",
1679
1698
  "type": "String",
@@ -1749,6 +1768,12 @@
1749
1768
  "parameters": [],
1750
1769
  "return_types": []
1751
1770
  },
1771
+ {
1772
+ "name": "anchor_when_narrow",
1773
+ "description": "Returns the value of attribute anchor_when_narrow.",
1774
+ "parameters": [],
1775
+ "return_types": []
1776
+ },
1752
1777
  {
1753
1778
  "name": "list",
1754
1779
  "description": "Returns the value of attribute list.",
@@ -1927,6 +1952,12 @@
1927
1952
  "default": "`:outside_right`",
1928
1953
  "description": "One of `:inside_bottom`, `:inside_center`, `:inside_left`, `:inside_right`, `:inside_top`, `:outside_bottom`, `:outside_left`, `:outside_right`, or `:outside_top`."
1929
1954
  },
1955
+ {
1956
+ "name": "anchor_when_narrow",
1957
+ "type": "Symbol",
1958
+ "default": "`:inherit`",
1959
+ "description": "One of `:bottom`, `:fullscreen`, `:inherit`, `:left`, or `:right`.."
1960
+ },
1930
1961
  {
1931
1962
  "name": "overlay_arguments",
1932
1963
  "type": "Hash",
@@ -2045,6 +2076,12 @@
2045
2076
  "default": "`:outside_bottom`",
2046
2077
  "description": "One of `:inside_bottom`, `:inside_center`, `:inside_left`, `:inside_right`, `:inside_top`, `:outside_bottom`, `:outside_left`, `:outside_right`, or `:outside_top`."
2047
2078
  },
2079
+ {
2080
+ "name": "anchor_when_narrow",
2081
+ "type": "Symbol",
2082
+ "default": "`:inherit`",
2083
+ "description": "One of `:bottom`, `:fullscreen`, `:inherit`, `:left`, or `:right`.."
2084
+ },
2048
2085
  {
2049
2086
  "name": "dynamic_label",
2050
2087
  "type": "Boolean",
@@ -5119,7 +5156,7 @@
5119
5156
  {
5120
5157
  "fully_qualified_name": "Primer::Alpha::Layout",
5121
5158
  "description": "`Layout` provides foundational patterns for responsive pages.\n`Layout` can be used for simple two-column pages, or it can be nested to provide flexible 3-column experiences.\n On smaller screens, `Layout` uses vertically stacked rows to display content.\n\n`Layout` flows as both column, when there's enough horizontal space to render both `Main` and `Sidebar`side-by-side (on a desktop of tablet device, per instance);\nor it flows as a row, when `Main` and `Sidebar` are stacked vertically (e.g. on a mobile device).\n`Layout` should always work in any screen size.",
5122
- "accessibility_docs": "Keyboard navigation follows the markup order. Decide carefully how the focus order should be be by deciding whether\n`main` or `sidebar` comes first in code. The code order wont affect the visual position.",
5159
+ "accessibility_docs": "Keyboard navigation follows the markup order. Decide carefully how the focus order should be be by deciding whether\n`main` or `sidebar` comes first in code. The code order won't affect the visual position.\n\nWhen using `row_placement: :none` on the sidebar, the sidebar content will be hidden at narrow viewports.\nThis may cause WCAG 1.4.10 Reflow failures if the sidebar contains essential content. Only use `:none`\nwhen the sidebar content is non-essential or available elsewhere on the page.",
5123
5160
  "is_form_component": false,
5124
5161
  "is_published": true,
5125
5162
  "requires_js": false,
@@ -5194,7 +5231,7 @@
5194
5231
  "name": "row_placement",
5195
5232
  "type": "Symbol",
5196
5233
  "default": "N/A",
5197
- "description": "Sidebar placement when `Layout` is in row mode. One of `:end`, `:none`, or `:start`."
5234
+ "description": "Sidebar placement when `Layout` is in row mode. One of `:end`, `:none`, or `:start`. **Note:** Using `:none` hides the sidebar at narrow viewports, which may cause WCAG 1.4.10 Reflow issues if the sidebar contains essential content."
5198
5235
  },
5199
5236
  {
5200
5237
  "name": "system_arguments",
@@ -5802,7 +5839,8 @@
5802
5839
  "snapshot": "true",
5803
5840
  "skip_rules": {
5804
5841
  "wont_fix": [
5805
- "region"
5842
+ "region",
5843
+ "label-title-only"
5806
5844
  ],
5807
5845
  "will_fix": [
5808
5846
  "color-contrast"
@@ -6404,6 +6442,12 @@
6404
6442
  "default": "`:normal`",
6405
6443
  "description": "The anchor offset to give the Overlay. One of `:normal` or `:spacious`."
6406
6444
  },
6445
+ {
6446
+ "name": "anchor_when_narrow",
6447
+ "type": "Symbol",
6448
+ "default": "`:inherit`",
6449
+ "description": "The position of the Overlay when in a narrow viewport. One of `:bottom`, `:fullscreen`, `:inherit`, `:left`, or `:right`."
6450
+ },
6407
6451
  {
6408
6452
  "name": "allow_out_of_bounds",
6409
6453
  "type": "Boolean",
@@ -6549,19 +6593,6 @@
6549
6593
  ]
6550
6594
  }
6551
6595
  },
6552
- {
6553
- "preview_path": "primer/alpha/overlay/menu_no_header",
6554
- "name": "menu_no_header",
6555
- "snapshot": "false",
6556
- "skip_rules": {
6557
- "wont_fix": [
6558
- "region"
6559
- ],
6560
- "will_fix": [
6561
- "color-contrast"
6562
- ]
6563
- }
6564
- },
6565
6596
  {
6566
6597
  "preview_path": "primer/alpha/overlay/middle_of_page",
6567
6598
  "name": "middle_of_page",
@@ -8575,7 +8606,7 @@
8575
8606
  "name": "gap",
8576
8607
  "type": "Symbol",
8577
8608
  "default": "`GapArg::DEFAULT`",
8578
- "description": "Specify the gap between children elements in the stack. One of `nil`, `:condensed`, `:normal`, or `:spacious`."
8609
+ "description": "Specify the gap between children elements in the stack. One of `nil`, `:condensed`, `:none`, `:normal`, or `:spacious`."
8579
8610
  },
8580
8611
  {
8581
8612
  "name": "direction",
@@ -9080,6 +9111,12 @@
9080
9111
  "default": "N/A",
9081
9112
  "description": "When set to `true`, the field will take up all the horizontal space allowed by its container. Defaults to `true`."
9082
9113
  },
9114
+ {
9115
+ "name": "character_limit",
9116
+ "type": "Number",
9117
+ "default": "N/A",
9118
+ "description": "Optional character limit for the input. If provided, a character counter will be displayed below the input."
9119
+ },
9083
9120
  {
9084
9121
  "name": "name",
9085
9122
  "type": "String",
@@ -9314,6 +9351,45 @@
9314
9351
  "color-contrast"
9315
9352
  ]
9316
9353
  }
9354
+ },
9355
+ {
9356
+ "preview_path": "primer/alpha/text_area/with_character_limit",
9357
+ "name": "with_character_limit",
9358
+ "snapshot": "interactive",
9359
+ "skip_rules": {
9360
+ "wont_fix": [
9361
+ "region"
9362
+ ],
9363
+ "will_fix": [
9364
+ "color-contrast"
9365
+ ]
9366
+ }
9367
+ },
9368
+ {
9369
+ "preview_path": "primer/alpha/text_area/with_character_limit_over_limit",
9370
+ "name": "with_character_limit_over_limit",
9371
+ "snapshot": "interactive",
9372
+ "skip_rules": {
9373
+ "wont_fix": [
9374
+ "region"
9375
+ ],
9376
+ "will_fix": [
9377
+ "color-contrast"
9378
+ ]
9379
+ }
9380
+ },
9381
+ {
9382
+ "preview_path": "primer/alpha/text_area/with_character_limit_and_caption",
9383
+ "name": "with_character_limit_and_caption",
9384
+ "snapshot": "true",
9385
+ "skip_rules": {
9386
+ "wont_fix": [
9387
+ "region"
9388
+ ],
9389
+ "will_fix": [
9390
+ "color-contrast"
9391
+ ]
9392
+ }
9317
9393
  }
9318
9394
  ],
9319
9395
  "subcomponents": []
@@ -9344,6 +9420,12 @@
9344
9420
  "default": "N/A",
9345
9421
  "description": "When set to `true`, the field will take up all the horizontal space allowed by its container. Defaults to `true`."
9346
9422
  },
9423
+ {
9424
+ "name": "character_limit",
9425
+ "type": "Number",
9426
+ "default": "N/A",
9427
+ "description": "Optional character limit for the input. If provided, a character counter will be displayed below the input."
9428
+ },
9347
9429
  {
9348
9430
  "name": "name",
9349
9431
  "type": "String",
@@ -9614,6 +9696,19 @@
9614
9696
  ]
9615
9697
  }
9616
9698
  },
9699
+ {
9700
+ "preview_path": "primer/alpha/text_field/show_clear_button_with_custom_label",
9701
+ "name": "show_clear_button_with_custom_label",
9702
+ "snapshot": "true",
9703
+ "skip_rules": {
9704
+ "wont_fix": [
9705
+ "region"
9706
+ ],
9707
+ "will_fix": [
9708
+ "color-contrast"
9709
+ ]
9710
+ }
9711
+ },
9617
9712
  {
9618
9713
  "preview_path": "primer/alpha/text_field/full_width",
9619
9714
  "name": "full_width",
@@ -9796,6 +9891,45 @@
9796
9891
  ]
9797
9892
  }
9798
9893
  },
9894
+ {
9895
+ "preview_path": "primer/alpha/text_field/with_character_limit",
9896
+ "name": "with_character_limit",
9897
+ "snapshot": "interactive",
9898
+ "skip_rules": {
9899
+ "wont_fix": [
9900
+ "region"
9901
+ ],
9902
+ "will_fix": [
9903
+ "color-contrast"
9904
+ ]
9905
+ }
9906
+ },
9907
+ {
9908
+ "preview_path": "primer/alpha/text_field/with_character_limit_over_limit",
9909
+ "name": "with_character_limit_over_limit",
9910
+ "snapshot": "interactive",
9911
+ "skip_rules": {
9912
+ "wont_fix": [
9913
+ "region"
9914
+ ],
9915
+ "will_fix": [
9916
+ "color-contrast"
9917
+ ]
9918
+ }
9919
+ },
9920
+ {
9921
+ "preview_path": "primer/alpha/text_field/with_character_limit_and_caption",
9922
+ "name": "with_character_limit_and_caption",
9923
+ "snapshot": "true",
9924
+ "skip_rules": {
9925
+ "wont_fix": [
9926
+ "region"
9927
+ ],
9928
+ "will_fix": [
9929
+ "color-contrast"
9930
+ ]
9931
+ }
9932
+ },
9799
9933
  {
9800
9934
  "preview_path": "primer/alpha/text_field/with_auto_check_ok",
9801
9935
  "name": "with_auto_check_ok",
@@ -9969,6 +10103,12 @@
9969
10103
  "type": "String",
9970
10104
  "default": "`nil`",
9971
10105
  "description": "Custom label to show when the switch is OFF. Defaults to (\"Off\"). Only customize this label if it makes the toggle’s state more meaningful in its specific context. For example, for a \"Show images\" setting, you might use \"Show\" when the switch is OFF."
10106
+ },
10107
+ {
10108
+ "name": "button_type",
10109
+ "type": "Symbol",
10110
+ "default": "`nil`",
10111
+ "description": "The type attribute for the underlying button element. If `nil`, the button will not have a type attribute, which means it will default to \"submit\" if it's inside a form and \"button\" otherwise."
9972
10112
  }
9973
10113
  ],
9974
10114
  "slots": [],
@@ -12291,6 +12431,32 @@
12291
12431
  }
12292
12432
  ],
12293
12433
  "subcomponents": [
12434
+ {
12435
+ "fully_qualified_name": "Primer::Beta::AutoComplete::NoResultItem",
12436
+ "description": "Use `NoResultItem` to display a message when no autocomplete results are found.\nRenders as a simple div inside the overlay, not as a list item.",
12437
+ "accessibility_docs": null,
12438
+ "is_form_component": false,
12439
+ "is_published": true,
12440
+ "requires_js": false,
12441
+ "component": "AutoComplete::NoResultItem",
12442
+ "status": "beta",
12443
+ "a11y_reviewed": false,
12444
+ "short_name": "AutoCompleteNoResultItem",
12445
+ "source": "https://github.com/primer/view_components/tree/main/app/components/primer/beta/auto_complete/no_result_item.rb",
12446
+ "lookbook": "https://primer.style/view-components/lookbook/inspect/primer/beta/auto_complete/no_result_item/default/",
12447
+ "parameters": [
12448
+ {
12449
+ "name": "system_arguments",
12450
+ "type": "Hash",
12451
+ "default": "N/A",
12452
+ "description": "{{link_to_system_arguments_docs}}"
12453
+ }
12454
+ ],
12455
+ "slots": [],
12456
+ "methods": [],
12457
+ "previews": [],
12458
+ "subcomponents": []
12459
+ },
12294
12460
  {
12295
12461
  "fully_qualified_name": "Primer::Beta::AutoComplete::Item",
12296
12462
  "description": "Use `AutoCompleteItem` to list results of an auto-completed search.",
@@ -12383,62 +12549,6 @@
12383
12549
  "methods": [],
12384
12550
  "previews": [],
12385
12551
  "subcomponents": []
12386
- },
12387
- {
12388
- "fully_qualified_name": "Primer::Beta::AutoComplete::NoResultItem",
12389
- "description": "",
12390
- "accessibility_docs": null,
12391
- "is_form_component": false,
12392
- "is_published": true,
12393
- "requires_js": false,
12394
- "component": "AutoComplete::NoResultItem",
12395
- "status": "beta",
12396
- "a11y_reviewed": false,
12397
- "short_name": "AutoCompleteNoResultItem",
12398
- "source": "https://github.com/primer/view_components/tree/main/app/components/primer/beta/auto_complete/no_result_item.rb",
12399
- "lookbook": "https://primer.style/view-components/lookbook/inspect/primer/beta/auto_complete/no_result_item/default/",
12400
- "parameters": [],
12401
- "slots": [
12402
- {
12403
- "name": "leading_visual",
12404
- "description": "The leading visual rendered before the link.",
12405
- "parameters": [
12406
- {
12407
- "name": "kwargs",
12408
- "type": "Hash",
12409
- "default": "N/A",
12410
- "description": "The arguments accepted by {{#link_to_component}}Primer::Beta::Avatar{{/link_to_component}} or {{#link_to_component}}Primer::Beta::Octicon{{/link_to_component}}"
12411
- }
12412
- ]
12413
- },
12414
- {
12415
- "name": "trailing_visual",
12416
- "description": "The trailing visual rendered after the link.",
12417
- "parameters": [
12418
- {
12419
- "name": "kwargs",
12420
- "type": "Hash",
12421
- "default": "N/A",
12422
- "description": "The arguments accepted by {{#link_to_component}}Primer::Beta::Octicon{{/link_to_component}}, {{#link_to_component}}Primer::Beta::Label{{/link_to_component}}, or {{#link_to_component}}Primer::Beta::Counter{{/link_to_component}}"
12423
- }
12424
- ]
12425
- },
12426
- {
12427
- "name": "description",
12428
- "description": "Optional description",
12429
- "parameters": [
12430
- {
12431
- "name": "system_arguments",
12432
- "type": "Hash",
12433
- "default": "N/A",
12434
- "description": "{{link_to_system_arguments_docs}}"
12435
- }
12436
- ]
12437
- }
12438
- ],
12439
- "methods": [],
12440
- "previews": [],
12441
- "subcomponents": []
12442
12552
  }
12443
12553
  ]
12444
12554
  },
@@ -12486,6 +12596,12 @@
12486
12596
  "default": "`nil`",
12487
12597
  "description": "The URL to link to. If used, component will be wrapped by an `<a>` tag."
12488
12598
  },
12599
+ {
12600
+ "name": "tooltip",
12601
+ "type": "String",
12602
+ "default": "`nil`",
12603
+ "description": "Tooltip text to display on hover when href is provided."
12604
+ },
12489
12605
  {
12490
12606
  "name": "system_arguments",
12491
12607
  "type": "Hash",
@@ -12700,6 +12816,12 @@
12700
12816
  "default": "`false`",
12701
12817
  "description": "Whether to add a tooltip to the stack or not."
12702
12818
  },
12819
+ {
12820
+ "name": "disable_expand",
12821
+ "type": "Boolean",
12822
+ "default": "`false`",
12823
+ "description": "Whether to disable the expand behavior on hover. If true, avatars will not expand."
12824
+ },
12703
12825
  {
12704
12826
  "name": "body_arguments",
12705
12827
  "type": "Hash",
@@ -12845,6 +12967,32 @@
12845
12967
  "color-contrast"
12846
12968
  ]
12847
12969
  }
12970
+ },
12971
+ {
12972
+ "preview_path": "primer/beta/avatar_stack/with_individual_tooltips",
12973
+ "name": "with_individual_tooltips",
12974
+ "snapshot": "false",
12975
+ "skip_rules": {
12976
+ "wont_fix": [
12977
+ "region"
12978
+ ],
12979
+ "will_fix": [
12980
+ "color-contrast"
12981
+ ]
12982
+ }
12983
+ },
12984
+ {
12985
+ "preview_path": "primer/beta/avatar_stack/with_disabled_expand",
12986
+ "name": "with_disabled_expand",
12987
+ "snapshot": "false",
12988
+ "skip_rules": {
12989
+ "wont_fix": [
12990
+ "region"
12991
+ ],
12992
+ "will_fix": [
12993
+ "color-contrast"
12994
+ ]
12995
+ }
12848
12996
  }
12849
12997
  ],
12850
12998
  "subcomponents": []
@@ -17121,6 +17269,12 @@
17121
17269
  "default": "`TIMEZONENAME_DEFAULT`",
17122
17270
  "description": "What format the time zone should take. One of `nil`, `:long`, `:long_generic`, `:long_offset`, `:short`, `:short_generic`, or `:short_offset`."
17123
17271
  },
17272
+ {
17273
+ "name": "time_zone",
17274
+ "type": "String",
17275
+ "default": "`nil`",
17276
+ "description": "The IANA time zone identifier to use for formatting (e.g., \"America/New_York\")."
17277
+ },
17124
17278
  {
17125
17279
  "name": "threshold",
17126
17280
  "type": "String",
@@ -18672,31 +18826,373 @@
18672
18826
  "subcomponents": []
18673
18827
  },
18674
18828
  {
18675
- "fully_qualified_name": "Primer::OpenProject::BorderBox::CollapsibleHeader",
18676
- "description": "A component to be used inside Primer::Beta::BorderBox.\nIt will toggle the visibility of the complete Box body",
18829
+ "fully_qualified_name": "Primer::OpenProject::AvatarStack",
18830
+ "description": "OpenProject-specific AvatarStack that extends Primer::Beta::AvatarStack\nto support avatar fallbacks with initials.\n\nUses a different slot name (avatar_with_fallbacks) to avoid conflicts with the parent's avatars slot.",
18677
18831
  "accessibility_docs": null,
18678
18832
  "is_form_component": false,
18679
18833
  "is_published": true,
18680
18834
  "requires_js": false,
18681
- "component": "OpenProject::BorderBox::CollapsibleHeader",
18835
+ "component": "OpenProject::AvatarStack",
18682
18836
  "status": "open_project",
18683
18837
  "a11y_reviewed": false,
18684
- "short_name": "OpenProjectBorderBoxCollapsibleHeader",
18685
- "source": "https://github.com/primer/view_components/tree/main/app/components/primer/open_project/border_box/collapsible_header.rb",
18686
- "lookbook": "https://primer.style/view-components/lookbook/inspect/primer/open_project/border_box/collapsible_header/default/",
18687
- "parameters": [
18838
+ "short_name": "OpenProjectAvatarStack",
18839
+ "source": "https://github.com/primer/view_components/tree/main/app/components/primer/open_project/avatar_stack.rb",
18840
+ "lookbook": "https://primer.style/view-components/lookbook/inspect/primer/open_project/avatar_stack/default/",
18841
+ "parameters": [],
18842
+ "slots": [
18688
18843
  {
18689
- "name": "id",
18690
- "type": "String",
18844
+ "name": "avatar_with_fallbacks",
18845
+ "description": "Required list of stacked avatars with fallback support.",
18846
+ "parameters": [
18847
+ {
18848
+ "name": "kwargs",
18849
+ "type": "Hash",
18850
+ "default": "N/A",
18851
+ "description": "The same arguments as {{#link_to_component}}Primer::OpenProject::AvatarWithFallback{{/link_to_component}}."
18852
+ }
18853
+ ]
18854
+ }
18855
+ ],
18856
+ "methods": [
18857
+ {
18858
+ "name": "avatars",
18859
+ "description": "Alias avatar_with_fallbacks as avatars for use in the template",
18860
+ "parameters": [],
18861
+ "return_types": []
18862
+ }
18863
+ ],
18864
+ "previews": [
18865
+ {
18866
+ "preview_path": "primer/open_project/avatar_stack/playground",
18867
+ "name": "playground",
18868
+ "snapshot": "false",
18869
+ "skip_rules": {
18870
+ "wont_fix": [
18871
+ "region"
18872
+ ],
18873
+ "will_fix": [
18874
+ "color-contrast"
18875
+ ]
18876
+ }
18877
+ },
18878
+ {
18879
+ "preview_path": "primer/open_project/avatar_stack/default",
18880
+ "name": "default",
18881
+ "snapshot": "true",
18882
+ "skip_rules": {
18883
+ "wont_fix": [
18884
+ "region"
18885
+ ],
18886
+ "will_fix": [
18887
+ "color-contrast"
18888
+ ]
18889
+ }
18890
+ },
18891
+ {
18892
+ "preview_path": "primer/open_project/avatar_stack/with_fallback_avatars",
18893
+ "name": "with_fallback_avatars",
18894
+ "snapshot": "true",
18895
+ "skip_rules": {
18896
+ "wont_fix": [
18897
+ "region"
18898
+ ],
18899
+ "will_fix": [
18900
+ "color-contrast"
18901
+ ]
18902
+ }
18903
+ },
18904
+ {
18905
+ "preview_path": "primer/open_project/avatar_stack/mixed_avatars",
18906
+ "name": "mixed_avatars",
18907
+ "snapshot": "false",
18908
+ "skip_rules": {
18909
+ "wont_fix": [
18910
+ "region"
18911
+ ],
18912
+ "will_fix": [
18913
+ "color-contrast"
18914
+ ]
18915
+ }
18916
+ },
18917
+ {
18918
+ "preview_path": "primer/open_project/avatar_stack/align_right_with_fallbacks",
18919
+ "name": "align_right_with_fallbacks",
18920
+ "snapshot": "false",
18921
+ "skip_rules": {
18922
+ "wont_fix": [
18923
+ "region"
18924
+ ],
18925
+ "will_fix": [
18926
+ "color-contrast"
18927
+ ]
18928
+ }
18929
+ },
18930
+ {
18931
+ "preview_path": "primer/open_project/avatar_stack/with_tooltip_and_fallbacks",
18932
+ "name": "with_tooltip_and_fallbacks",
18933
+ "snapshot": "false",
18934
+ "skip_rules": {
18935
+ "wont_fix": [
18936
+ "region"
18937
+ ],
18938
+ "will_fix": [
18939
+ "color-contrast"
18940
+ ]
18941
+ }
18942
+ }
18943
+ ],
18944
+ "subcomponents": []
18945
+ },
18946
+ {
18947
+ "fully_qualified_name": "Primer::OpenProject::AvatarWithFallback",
18948
+ "description": "OpenProject-specific Avatar component that extends Primer::Beta::Avatar\nto support fallback rendering with initials when no image source is provided.\n\nUses a \"fallback first\" pattern for flicker-free loading:\n1. Always renders fallback SVG as initial <img> src (visible immediately)\n2. Client-side JS test-loads the real URL in background\n3. On success, swaps to real image; on failure, fallback stays visible\n\nThis approach is inspired by OpenProject's Angular PrincipalRendererService.",
18949
+ "accessibility_docs": null,
18950
+ "is_form_component": false,
18951
+ "is_published": true,
18952
+ "requires_js": false,
18953
+ "component": "OpenProject::AvatarWithFallback",
18954
+ "status": "open_project",
18955
+ "a11y_reviewed": false,
18956
+ "short_name": "OpenProjectAvatarWithFallback",
18957
+ "source": "https://github.com/primer/view_components/tree/main/app/components/primer/open_project/avatar_with_fallback.rb",
18958
+ "lookbook": "https://primer.style/view-components/lookbook/inspect/primer/open_project/avatar_with_fallback/default/",
18959
+ "parameters": [
18960
+ {
18961
+ "name": "src",
18962
+ "type": "String",
18963
+ "default": "`nil`",
18964
+ "description": "The source URL of the avatar image. When provided, JavaScript will test-load it in the background and swap to it on success. When nil or blank, only the fallback SVG is displayed."
18965
+ },
18966
+ {
18967
+ "name": "alt",
18968
+ "type": "String",
18969
+ "default": "`nil`",
18970
+ "description": "Alt text for the avatar. Used for accessibility and to generate initials for the fallback SVG."
18971
+ },
18972
+ {
18973
+ "name": "size",
18974
+ "type": "Integer",
18975
+ "default": "`20`",
18976
+ "description": "One of `16`, `20`, `24`, `32`, `40`, `48`, `64`, or `80`."
18977
+ },
18978
+ {
18979
+ "name": "shape",
18980
+ "type": "Symbol",
18981
+ "default": "`:circle`",
18982
+ "description": "Shape of the avatar. One of `:circle` or `:square`."
18983
+ },
18984
+ {
18985
+ "name": "href",
18986
+ "type": "String",
18987
+ "default": "`nil`",
18988
+ "description": "The URL to link to. If used, component will be wrapped by an `<a>` tag."
18989
+ },
18990
+ {
18991
+ "name": "unique_id",
18992
+ "type": "String, Integer",
18993
+ "default": "`nil`",
18994
+ "description": "Unique identifier for generating consistent avatar colors across renders."
18995
+ },
18996
+ {
18997
+ "name": "system_arguments",
18998
+ "type": "Hash",
18999
+ "default": "N/A",
19000
+ "description": "{{link_to_system_arguments_docs}}"
19001
+ }
19002
+ ],
19003
+ "slots": [],
19004
+ "methods": [],
19005
+ "previews": [
19006
+ {
19007
+ "preview_path": "primer/open_project/avatar_with_fallback/playground",
19008
+ "name": "playground",
19009
+ "snapshot": "false",
19010
+ "skip_rules": {
19011
+ "wont_fix": [
19012
+ "region"
19013
+ ],
19014
+ "will_fix": [
19015
+ "color-contrast"
19016
+ ]
19017
+ }
19018
+ },
19019
+ {
19020
+ "preview_path": "primer/open_project/avatar_with_fallback/default",
19021
+ "name": "default",
19022
+ "snapshot": "true",
19023
+ "skip_rules": {
19024
+ "wont_fix": [
19025
+ "region"
19026
+ ],
19027
+ "will_fix": [
19028
+ "color-contrast"
19029
+ ]
19030
+ }
19031
+ },
19032
+ {
19033
+ "preview_path": "primer/open_project/avatar_with_fallback/with_image",
19034
+ "name": "with_image",
19035
+ "snapshot": "true",
19036
+ "skip_rules": {
19037
+ "wont_fix": [
19038
+ "region"
19039
+ ],
19040
+ "will_fix": [
19041
+ "color-contrast"
19042
+ ]
19043
+ }
19044
+ },
19045
+ {
19046
+ "preview_path": "primer/open_project/avatar_with_fallback/fallback_default",
19047
+ "name": "fallback_default",
19048
+ "snapshot": "true",
19049
+ "skip_rules": {
19050
+ "wont_fix": [
19051
+ "region"
19052
+ ],
19053
+ "will_fix": [
19054
+ "color-contrast"
19055
+ ]
19056
+ }
19057
+ },
19058
+ {
19059
+ "preview_path": "primer/open_project/avatar_with_fallback/fallback_single_name",
19060
+ "name": "fallback_single_name",
19061
+ "snapshot": "true",
19062
+ "skip_rules": {
19063
+ "wont_fix": [
19064
+ "region"
19065
+ ],
19066
+ "will_fix": [
19067
+ "color-contrast"
19068
+ ]
19069
+ }
19070
+ },
19071
+ {
19072
+ "preview_path": "primer/open_project/avatar_with_fallback/fallback_multiple",
19073
+ "name": "fallback_multiple",
19074
+ "snapshot": "false",
19075
+ "skip_rules": {
19076
+ "wont_fix": [
19077
+ "region"
19078
+ ],
19079
+ "will_fix": [
19080
+ "color-contrast"
19081
+ ]
19082
+ }
19083
+ },
19084
+ {
19085
+ "preview_path": "primer/open_project/avatar_with_fallback/fallback_sizes",
19086
+ "name": "fallback_sizes",
19087
+ "snapshot": "false",
19088
+ "skip_rules": {
19089
+ "wont_fix": [
19090
+ "region"
19091
+ ],
19092
+ "will_fix": [
19093
+ "color-contrast"
19094
+ ]
19095
+ }
19096
+ },
19097
+ {
19098
+ "preview_path": "primer/open_project/avatar_with_fallback/fallback_square",
19099
+ "name": "fallback_square",
19100
+ "snapshot": "true",
19101
+ "skip_rules": {
19102
+ "wont_fix": [
19103
+ "region"
19104
+ ],
19105
+ "will_fix": [
19106
+ "color-contrast"
19107
+ ]
19108
+ }
19109
+ },
19110
+ {
19111
+ "preview_path": "primer/open_project/avatar_with_fallback/fallback_as_link",
19112
+ "name": "fallback_as_link",
19113
+ "snapshot": "false",
19114
+ "skip_rules": {
19115
+ "wont_fix": [
19116
+ "region"
19117
+ ],
19118
+ "will_fix": [
19119
+ "color-contrast"
19120
+ ]
19121
+ }
19122
+ },
19123
+ {
19124
+ "preview_path": "primer/open_project/avatar_with_fallback/broken_image_404",
19125
+ "name": "broken_image_404",
19126
+ "snapshot": "true",
19127
+ "skip_rules": {
19128
+ "wont_fix": [
19129
+ "region"
19130
+ ],
19131
+ "will_fix": [
19132
+ "color-contrast"
19133
+ ]
19134
+ }
19135
+ },
19136
+ {
19137
+ "preview_path": "primer/open_project/avatar_with_fallback/multiple_broken_images",
19138
+ "name": "multiple_broken_images",
19139
+ "snapshot": "false",
19140
+ "skip_rules": {
19141
+ "wont_fix": [
19142
+ "region"
19143
+ ],
19144
+ "will_fix": [
19145
+ "color-contrast"
19146
+ ]
19147
+ }
19148
+ }
19149
+ ],
19150
+ "subcomponents": []
19151
+ },
19152
+ {
19153
+ "fully_qualified_name": "Primer::OpenProject::BorderBox::CollapsibleHeader",
19154
+ "description": "A component to be used inside Primer::Beta::BorderBox.\nIt will toggle the visibility of the complete Box body",
19155
+ "accessibility_docs": null,
19156
+ "is_form_component": false,
19157
+ "is_published": true,
19158
+ "requires_js": false,
19159
+ "component": "OpenProject::BorderBox::CollapsibleHeader",
19160
+ "status": "open_project",
19161
+ "a11y_reviewed": false,
19162
+ "short_name": "OpenProjectBorderBoxCollapsibleHeader",
19163
+ "source": "https://github.com/primer/view_components/tree/main/app/components/primer/open_project/border_box/collapsible_header.rb",
19164
+ "lookbook": "https://primer.style/view-components/lookbook/inspect/primer/open_project/border_box/collapsible_header/default/",
19165
+ "parameters": [
19166
+ {
19167
+ "name": "id",
19168
+ "type": "String",
18691
19169
  "default": "`self.class.generate_id`",
18692
19170
  "description": "The unique ID of the collapsible header."
18693
19171
  },
19172
+ {
19173
+ "name": "box",
19174
+ "type": "Primer::Beta::BorderBox",
19175
+ "default": "`nil`",
19176
+ "description": "Deprecated. Previously used to reference the parent BorderBox."
19177
+ },
18694
19178
  {
18695
19179
  "name": "collapsed",
18696
19180
  "type": "Boolean",
18697
19181
  "default": "`false`",
18698
19182
  "description": "Whether the header is collapsed on initial render."
18699
19183
  },
19184
+ {
19185
+ "name": "collapsible_id",
19186
+ "type": "String",
19187
+ "default": "`nil`",
19188
+ "description": "The id or ids of the elements that will be collapsed. This should include the BorderBox's list, body and footer. This will be required in future versions."
19189
+ },
19190
+ {
19191
+ "name": "multi_line",
19192
+ "type": "Boolean",
19193
+ "default": "`true`",
19194
+ "description": "Whether the description is on its own line and can wrap across multiple lines."
19195
+ },
18700
19196
  {
18701
19197
  "name": "system_arguments",
18702
19198
  "type": "Hash",
@@ -18709,6 +19205,12 @@
18709
19205
  "name": "title",
18710
19206
  "description": "Required title",
18711
19207
  "parameters": [
19208
+ {
19209
+ "name": "tag",
19210
+ "type": "Symbol",
19211
+ "default": "N/A",
19212
+ "description": "One of `:h1`, `:h2`, `:h3`, `:h4`, `:h5`, or `:h6`."
19213
+ },
18712
19214
  {
18713
19215
  "name": "system_arguments",
18714
19216
  "type": "Hash",
@@ -19377,6 +19879,18 @@
19377
19879
  "source": "https://github.com/primer/view_components/tree/main/app/components/primer/open_project/drag_handle.rb",
19378
19880
  "lookbook": "https://primer.style/view-components/lookbook/inspect/primer/open_project/drag_handle/default/",
19379
19881
  "parameters": [
19882
+ {
19883
+ "name": "size",
19884
+ "type": "Symbol",
19885
+ "default": "`:small`",
19886
+ "description": "One of `:medium`, `:small`, or `:xsmall`."
19887
+ },
19888
+ {
19889
+ "name": "label",
19890
+ "type": "String",
19891
+ "default": "`I18n.t(\"drag_handle.button_drag\")`",
19892
+ "description": "String that can be read by assistive technology. A label should be short and concise. See the accessibility section for more information."
19893
+ },
19380
19894
  {
19381
19895
  "name": "system_arguments",
19382
19896
  "type": "Hash",
@@ -19680,6 +20194,83 @@
19680
20194
  ],
19681
20195
  "subcomponents": []
19682
20196
  },
20197
+ {
20198
+ "fully_qualified_name": "Primer::OpenProject::Fieldset",
20199
+ "description": "A low-level component for building fieldsets with unopinionated styling.\n\nThis component is not designed to be used directly, but rather a primitive for\nauthors of other components and form controls.",
20200
+ "accessibility_docs": null,
20201
+ "is_form_component": false,
20202
+ "is_published": true,
20203
+ "requires_js": false,
20204
+ "component": "OpenProject::Fieldset",
20205
+ "status": "open_project",
20206
+ "a11y_reviewed": false,
20207
+ "short_name": "OpenProjectFieldset",
20208
+ "source": "https://github.com/primer/view_components/tree/main/app/components/primer/open_project/fieldset.rb",
20209
+ "lookbook": "https://primer.style/view-components/lookbook/inspect/primer/open_project/fieldset/default/",
20210
+ "parameters": [
20211
+ {
20212
+ "name": "legend_text",
20213
+ "type": "String",
20214
+ "default": "`nil`",
20215
+ "description": "A legend should be short and concise. The String will also be read by assistive technology."
20216
+ },
20217
+ {
20218
+ "name": "visually_hide_legend",
20219
+ "type": "Boolean",
20220
+ "default": "`false`",
20221
+ "description": "Controls if the legend is visible. If `true`, screen reader only text will be added."
20222
+ },
20223
+ {
20224
+ "name": "system_arguments",
20225
+ "type": "Hash",
20226
+ "default": "N/A",
20227
+ "description": "{{link_to_system_arguments_docs}}"
20228
+ }
20229
+ ],
20230
+ "slots": [
20231
+ {
20232
+ "name": "legend",
20233
+ "description": null,
20234
+ "parameters": []
20235
+ }
20236
+ ],
20237
+ "methods": [
20238
+ {
20239
+ "name": "legend_text",
20240
+ "description": "Returns the value of attribute legend_text.",
20241
+ "parameters": [],
20242
+ "return_types": []
20243
+ }
20244
+ ],
20245
+ "previews": [],
20246
+ "subcomponents": []
20247
+ },
20248
+ {
20249
+ "fully_qualified_name": "Primer::OpenProject::Fieldset::LegendComponent",
20250
+ "description": "",
20251
+ "accessibility_docs": null,
20252
+ "is_form_component": false,
20253
+ "is_published": true,
20254
+ "requires_js": false,
20255
+ "component": "OpenProject::Fieldset::Legend",
20256
+ "status": "open_project",
20257
+ "a11y_reviewed": false,
20258
+ "short_name": "OpenProjectFieldsetLegend",
20259
+ "source": "https://github.com/primer/view_components/tree/main/app/components/primer/open_project/fieldset/legend_component.rb",
20260
+ "lookbook": "https://primer.style/view-components/lookbook/inspect/primer/open_project/fieldset/legend/default/",
20261
+ "parameters": [],
20262
+ "slots": [],
20263
+ "methods": [
20264
+ {
20265
+ "name": "text",
20266
+ "description": "Returns the value of attribute text.",
20267
+ "parameters": [],
20268
+ "return_types": []
20269
+ }
20270
+ ],
20271
+ "previews": [],
20272
+ "subcomponents": []
20273
+ },
19683
20274
  {
19684
20275
  "fully_qualified_name": "Primer::OpenProject::FilterableTreeView",
19685
20276
  "description": "A TreeView and associated filter controls for searching nested hierarchies.\n\n## Filter controls\n\n`FilterableTreeView`s can be filtered using two controls, both present in the toolbar above the tree:\n\n1. A free-form query string from a text input field.\n2. A `SegmentedControl` with two options (by default):\n 1. The \"Selected\" option causes the component to only show checked nodes, provided they also satisfy the other\n filter criteria described here.\n 2. The \"All\" option causes the component to show all nodes, provided they also satisfy the other filter\n criteria described here.\n\n## Custom filter modes\n\nIn addition to the default filter modes of `'all'` and `'selected'` described above, `FilterableTreeView` supports\nadding custom filter modes. Adding a filter mode will cause its label to appear in the `SegmentedControl` in the\ntoolbar, and will be passed as the third argument to the filter function (see below).\n\nHere's how to add a custom filter mode in addition to the default ones:\n\n```erb\n<%= render(Primer::OpenProject::FilterableTreeView.new) do |tree_view| %>\n <%# remove this line to prevent adding the default modes %>\n <% tree_view.with_default_filter_modes %>\n <% tree_view.with_filter_mode(name: \"Custom\", system_arguments)\n<% end %>\n```\n\n## Filter behavior\n\nBy default, matching node text is identified by looking for an exact substring match, operating on a lowercased\nversion of both the query string and the node text. For more information, and to provide a customized filter\nfunction, please see the section titled \"Customizing the filter function\" below.\n\nNodes that match the filter appear as normal; nodes that do not match are presented as follows:\n\n1. Leaf nodes are hidden.\n2. Sub-tree nodes with no matching children are hidden.\n3. Sub-tree nodes with at least one matching child are disabled but still visible.\n\n## Checking behavior\n\nBy default, checking a node in a `FilterableTreeView` checks only that node (i.e. no child nodes are checked).\nTo aide in checking children in deeply nested or highly populated hierarchies, a third control exists in the\ntoolbar: the \"Include sub-items\" check box. If this feature is turned on, checking sub-tree nodes causes all\nchildren, both leaf and sub-tree nodes, to also be checked recursively. Moreover, turning this feature on will\ncause the children of any previously checked nodes to be checked recursively. Unchecking a node while in\n\"Include sub-items\" mode will restore that sub-tree and all its children to their previously checked state, so as\nnot to permanently override a user's selections. Unchecking the \"Include sub-items\" check box has a similar effect,\ni.e. restores all previous user selections under currently checked sub-trees.\n\n## JavaScript API\n\n`FilterableTreeView` does not yet have an extensive JavaScript API, but this may change in the future as the\ncomponent is further developed to fit additional use-cases.\n\n### Customizing the filter function\n\nThe filter function can be customized by setting the value of the `filterFn` property to a function with the\nfollowing signature:\n\n```typescript\nexport type FilterFn = (node: HTMLElement, query: string, filterMode?: string) => Range[] | null\n```\n\nThis function will be called once for each node in the tree every time filter controls change (i.e. when the\nfilter mode or query string are altered). The function is called with the following arguments:\n\n|Argument |Description |\n|:-----------|:----------------------------------------------------------------|\n|`node` |The HTML node element, i.e. the element with `role=treeitem` set.|\n|`query` |The query string. |\n|`filterMode`|The filter mode, either `'all'` or `'selected'`. |\n\nThe component expects the filter function to return specific values depending on the type of match:\n\n1. No match - return `null`\n2. Match but no highlights (eg. when the query string is empty) - return an empty array\n3. Match with highlights - return a non-empty array of `Range` objects\n\nExample:\n\n```javascript\nconst filterableTreeView = document.querySelector('filterable-tree-view')\nfilterableTreeView.filterFn = (node, query, filterMode) => {\n // custom filter implementation here\n}\n```\n\nYou can read about `Range` objects here: https://developer.mozilla.org/en-US/docs/Web/API/Range.\n\nFor a complete example demonstrating how to implement a working filter function complete with range highlighting,\nsee the default filter function available in the `FilterableTreeViewElement` JavaScript class, which is part of\nthe Primer source code.\n\n### Events\n\nCurrently `FilterableTreeView` does not emit any events aside from the events already emitted by the `TreeView`\ncomponent.",
@@ -20172,6 +20763,71 @@
20172
20763
  ],
20173
20764
  "subcomponents": []
20174
20765
  },
20766
+ {
20767
+ "fully_qualified_name": "Primer::OpenProject::InlineMessage",
20768
+ "description": "A simple component to render warning text.\n\nThe warning text is rendered in the \"attention\" Primer color and\nuses a leading alert Octicon for additional emphasis. This component\nis designed to be used \"inline\", e.g. table cells, and in places\nwhere a Banner component might be overkill.",
20769
+ "accessibility_docs": null,
20770
+ "is_form_component": false,
20771
+ "is_published": true,
20772
+ "requires_js": false,
20773
+ "component": "OpenProject::InlineMessage",
20774
+ "status": "open_project",
20775
+ "a11y_reviewed": false,
20776
+ "short_name": "OpenProjectInlineMessage",
20777
+ "source": "https://github.com/primer/view_components/tree/main/app/components/primer/open_project/inline_message.rb",
20778
+ "lookbook": "https://primer.style/view-components/lookbook/inspect/primer/open_project/inline_message/default/",
20779
+ "parameters": [
20780
+ {
20781
+ "name": "scheme",
20782
+ "type": "Symbol",
20783
+ "default": "N/A",
20784
+ "description": "One of `:critical`, `:success`, `:unavailable`, or `:warning`."
20785
+ },
20786
+ {
20787
+ "name": "size",
20788
+ "type": "Symbol",
20789
+ "default": "`:medium`",
20790
+ "description": "One of `:medium` or `:small`."
20791
+ },
20792
+ {
20793
+ "name": "system_arguments",
20794
+ "type": "Hash",
20795
+ "default": "N/A",
20796
+ "description": "{{link_to_system_arguments_docs}}"
20797
+ }
20798
+ ],
20799
+ "slots": [],
20800
+ "methods": [],
20801
+ "previews": [
20802
+ {
20803
+ "preview_path": "primer/open_project/inline_message/default",
20804
+ "name": "default",
20805
+ "snapshot": "true",
20806
+ "skip_rules": {
20807
+ "wont_fix": [
20808
+ "region"
20809
+ ],
20810
+ "will_fix": [
20811
+ "color-contrast"
20812
+ ]
20813
+ }
20814
+ },
20815
+ {
20816
+ "preview_path": "primer/open_project/inline_message/playground",
20817
+ "name": "playground",
20818
+ "snapshot": "false",
20819
+ "skip_rules": {
20820
+ "wont_fix": [
20821
+ "region"
20822
+ ],
20823
+ "will_fix": [
20824
+ "color-contrast"
20825
+ ]
20826
+ }
20827
+ }
20828
+ ],
20829
+ "subcomponents": []
20830
+ },
20175
20831
  {
20176
20832
  "fully_qualified_name": "Primer::OpenProject::InputGroup",
20177
20833
  "description": "`InputGroup` is composed of a text field input with a trailing action",
@@ -20753,6 +21409,89 @@
20753
21409
  "previews": [],
20754
21410
  "subcomponents": []
20755
21411
  },
21412
+ {
21413
+ "fully_qualified_name": "Primer::OpenProject::Pagination",
21414
+ "description": "",
21415
+ "accessibility_docs": null,
21416
+ "is_form_component": false,
21417
+ "is_published": true,
21418
+ "requires_js": false,
21419
+ "component": "OpenProject::Pagination",
21420
+ "status": "open_project",
21421
+ "a11y_reviewed": false,
21422
+ "short_name": "OpenProjectPagination",
21423
+ "source": "https://github.com/primer/view_components/tree/main/app/components/primer/open_project/pagination.rb",
21424
+ "lookbook": "https://primer.style/view-components/lookbook/inspect/primer/open_project/pagination/default/",
21425
+ "parameters": [],
21426
+ "slots": [],
21427
+ "methods": [
21428
+ {
21429
+ "name": "page_count",
21430
+ "description": "Returns the value of attribute page_count.",
21431
+ "parameters": [],
21432
+ "return_types": []
21433
+ },
21434
+ {
21435
+ "name": "current_page",
21436
+ "description": "Returns the value of attribute current_page.",
21437
+ "parameters": [],
21438
+ "return_types": []
21439
+ },
21440
+ {
21441
+ "name": "href_builder",
21442
+ "description": "Returns the value of attribute href_builder.",
21443
+ "parameters": [],
21444
+ "return_types": []
21445
+ },
21446
+ {
21447
+ "name": "margin_page_count",
21448
+ "description": "Returns the value of attribute margin_page_count.",
21449
+ "parameters": [],
21450
+ "return_types": []
21451
+ },
21452
+ {
21453
+ "name": "show_pages",
21454
+ "description": "Returns the value of attribute show_pages.",
21455
+ "parameters": [],
21456
+ "return_types": []
21457
+ },
21458
+ {
21459
+ "name": "surrounding_page_count",
21460
+ "description": "Returns the value of attribute surrounding_page_count.",
21461
+ "parameters": [],
21462
+ "return_types": []
21463
+ }
21464
+ ],
21465
+ "previews": [
21466
+ {
21467
+ "preview_path": "primer/open_project/pagination/playground",
21468
+ "name": "playground",
21469
+ "snapshot": "false",
21470
+ "skip_rules": {
21471
+ "wont_fix": [
21472
+ "region"
21473
+ ],
21474
+ "will_fix": [
21475
+ "color-contrast"
21476
+ ]
21477
+ }
21478
+ },
21479
+ {
21480
+ "preview_path": "primer/open_project/pagination/default",
21481
+ "name": "default",
21482
+ "snapshot": "true",
21483
+ "skip_rules": {
21484
+ "wont_fix": [
21485
+ "region"
21486
+ ],
21487
+ "will_fix": [
21488
+ "color-contrast"
21489
+ ]
21490
+ }
21491
+ }
21492
+ ],
21493
+ "subcomponents": []
21494
+ },
20756
21495
  {
20757
21496
  "fully_qualified_name": "Primer::OpenProject::SidePanel",
20758
21497
  "description": "Add a general description of component here\nAdd additional usage considerations or best practices that may aid the user to use the component correctly.",