@mixtint/primer-view-components 0.72.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 (234) hide show
  1. package/LICENSE.txt +21 -0
  2. package/README.md +30 -0
  3. package/app/assets/images/loading_indicator.svg +1 -0
  4. package/app/assets/javascripts/components/primer/alpha/action_bar_element.d.ts +17 -0
  5. package/app/assets/javascripts/components/primer/alpha/action_list.d.ts +16 -0
  6. package/app/assets/javascripts/components/primer/alpha/action_menu/action_menu_element.d.ts +49 -0
  7. package/app/assets/javascripts/components/primer/alpha/action_menu/action_menu_focus_zone_stack.d.ts +17 -0
  8. package/app/assets/javascripts/components/primer/alpha/dropdown/menu.d.ts +1 -0
  9. package/app/assets/javascripts/components/primer/alpha/dropdown.d.ts +1 -0
  10. package/app/assets/javascripts/components/primer/alpha/modal_dialog.d.ts +18 -0
  11. package/app/assets/javascripts/components/primer/alpha/segmented_control.d.ts +12 -0
  12. package/app/assets/javascripts/components/primer/alpha/select_panel_element.d.ts +65 -0
  13. package/app/assets/javascripts/components/primer/alpha/tab_container.d.ts +1 -0
  14. package/app/assets/javascripts/components/primer/alpha/toggle_switch.d.ts +34 -0
  15. package/app/assets/javascripts/components/primer/alpha/tool_tip.d.ts +27 -0
  16. package/app/assets/javascripts/components/primer/alpha/tree_view/tree_view.d.ts +42 -0
  17. package/app/assets/javascripts/components/primer/alpha/tree_view/tree_view_icon_pair_element.d.ts +15 -0
  18. package/app/assets/javascripts/components/primer/alpha/tree_view/tree_view_include_fragment_element.d.ts +9 -0
  19. package/app/assets/javascripts/components/primer/alpha/tree_view/tree_view_roving_tab_index.d.ts +3 -0
  20. package/app/assets/javascripts/components/primer/alpha/tree_view/tree_view_sub_tree_node_element.d.ts +45 -0
  21. package/app/assets/javascripts/components/primer/alpha/x_banner.d.ts +18 -0
  22. package/app/assets/javascripts/components/primer/anchored_position.d.ts +27 -0
  23. package/app/assets/javascripts/components/primer/beta/auto_complete/auto_complete.d.ts +1 -0
  24. package/app/assets/javascripts/components/primer/beta/clipboard_copy.d.ts +1 -0
  25. package/app/assets/javascripts/components/primer/beta/details_toggle_element.d.ts +40 -0
  26. package/app/assets/javascripts/components/primer/beta/nav_list.d.ts +20 -0
  27. package/app/assets/javascripts/components/primer/beta/nav_list_group_element.d.ts +19 -0
  28. package/app/assets/javascripts/components/primer/beta/relative_time.d.ts +1 -0
  29. package/app/assets/javascripts/components/primer/dialog_helper.d.ts +15 -0
  30. package/app/assets/javascripts/components/primer/focus_group.d.ts +19 -0
  31. package/app/assets/javascripts/components/primer/open_project/border_box/collapsible_header.d.ts +11 -0
  32. package/app/assets/javascripts/components/primer/open_project/collapsible.d.ts +13 -0
  33. package/app/assets/javascripts/components/primer/open_project/collapsible_section.d.ts +10 -0
  34. package/app/assets/javascripts/components/primer/open_project/danger_dialog_form_helper.d.ts +14 -0
  35. package/app/assets/javascripts/components/primer/open_project/filterable_tree_view.d.ts +29 -0
  36. package/app/assets/javascripts/components/primer/open_project/page_header_element.d.ts +9 -0
  37. package/app/assets/javascripts/components/primer/open_project/sub_header_element.d.ts +17 -0
  38. package/app/assets/javascripts/components/primer/open_project/zen_mode_button.d.ts +18 -0
  39. package/app/assets/javascripts/components/primer/primer.d.ts +40 -0
  40. package/app/assets/javascripts/components/primer/scrollable_region.d.ts +13 -0
  41. package/app/assets/javascripts/components/primer/shared_events.d.ts +26 -0
  42. package/app/assets/javascripts/components/primer/utils.d.ts +1 -0
  43. package/app/assets/javascripts/lib/primer/forms/primer_multi_input.d.ts +10 -0
  44. package/app/assets/javascripts/lib/primer/forms/primer_text_field.d.ts +28 -0
  45. package/app/assets/javascripts/lib/primer/forms/toggle_switch_input.d.ts +5 -0
  46. package/app/assets/javascripts/primer_view_components.js +2 -0
  47. package/app/assets/javascripts/primer_view_components.js.map +1 -0
  48. package/app/assets/styles/primer_view_components.css +7336 -0
  49. package/app/assets/styles/primer_view_components.css.map +1 -0
  50. package/app/components/primer/alpha/action_bar.css +49 -0
  51. package/app/components/primer/alpha/action_bar.css.json +14 -0
  52. package/app/components/primer/alpha/action_bar_element.d.ts +17 -0
  53. package/app/components/primer/alpha/action_bar_element.js +170 -0
  54. package/app/components/primer/alpha/action_list.css +526 -0
  55. package/app/components/primer/alpha/action_list.css.json +117 -0
  56. package/app/components/primer/alpha/action_list.d.ts +16 -0
  57. package/app/components/primer/alpha/action_list.js +70 -0
  58. package/app/components/primer/alpha/action_menu/action_menu_element.d.ts +49 -0
  59. package/app/components/primer/alpha/action_menu/action_menu_element.js +591 -0
  60. package/app/components/primer/alpha/action_menu/action_menu_focus_zone_stack.d.ts +17 -0
  61. package/app/components/primer/alpha/action_menu/action_menu_focus_zone_stack.js +62 -0
  62. package/app/components/primer/alpha/auto_complete.css +131 -0
  63. package/app/components/primer/alpha/auto_complete.css.json +21 -0
  64. package/app/components/primer/alpha/banner.css +146 -0
  65. package/app/components/primer/alpha/banner.css.json +26 -0
  66. package/app/components/primer/alpha/button_marketing.css +183 -0
  67. package/app/components/primer/alpha/button_marketing.css.json +30 -0
  68. package/app/components/primer/alpha/dialog.css +377 -0
  69. package/app/components/primer/alpha/dialog.css.json +66 -0
  70. package/app/components/primer/alpha/dropdown/menu.d.ts +1 -0
  71. package/app/components/primer/alpha/dropdown/menu.js +1 -0
  72. package/app/components/primer/alpha/dropdown.css +296 -0
  73. package/app/components/primer/alpha/dropdown.css.json +40 -0
  74. package/app/components/primer/alpha/dropdown.d.ts +1 -0
  75. package/app/components/primer/alpha/dropdown.js +1 -0
  76. package/app/components/primer/alpha/layout.css +374 -0
  77. package/app/components/primer/alpha/layout.css.json +74 -0
  78. package/app/components/primer/alpha/menu.css +124 -0
  79. package/app/components/primer/alpha/menu.css.json +26 -0
  80. package/app/components/primer/alpha/modal_dialog.d.ts +18 -0
  81. package/app/components/primer/alpha/modal_dialog.js +187 -0
  82. package/app/components/primer/alpha/overlay.css +25 -0
  83. package/app/components/primer/alpha/overlay.css.json +12 -0
  84. package/app/components/primer/alpha/segmented_control.css +161 -0
  85. package/app/components/primer/alpha/segmented_control.css.json +31 -0
  86. package/app/components/primer/alpha/segmented_control.d.ts +12 -0
  87. package/app/components/primer/alpha/segmented_control.js +59 -0
  88. package/app/components/primer/alpha/select_panel.css +10 -0
  89. package/app/components/primer/alpha/select_panel.css.json +7 -0
  90. package/app/components/primer/alpha/select_panel_element.d.ts +65 -0
  91. package/app/components/primer/alpha/select_panel_element.js +988 -0
  92. package/app/components/primer/alpha/skeleton_box.css +36 -0
  93. package/app/components/primer/alpha/skeleton_box.css.json +6 -0
  94. package/app/components/primer/alpha/stack.css +266 -0
  95. package/app/components/primer/alpha/stack.css.json +94 -0
  96. package/app/components/primer/alpha/stack_item.css +27 -0
  97. package/app/components/primer/alpha/stack_item.css.json +12 -0
  98. package/app/components/primer/alpha/tab_container.d.ts +1 -0
  99. package/app/components/primer/alpha/tab_container.js +1 -0
  100. package/app/components/primer/alpha/tab_nav.css +112 -0
  101. package/app/components/primer/alpha/tab_nav.css.json +22 -0
  102. package/app/components/primer/alpha/text_field.css +838 -0
  103. package/app/components/primer/alpha/text_field.css.json +134 -0
  104. package/app/components/primer/alpha/toggle_switch.css +230 -0
  105. package/app/components/primer/alpha/toggle_switch.css.json +40 -0
  106. package/app/components/primer/alpha/toggle_switch.d.ts +34 -0
  107. package/app/components/primer/alpha/toggle_switch.js +179 -0
  108. package/app/components/primer/alpha/tool_tip.d.ts +27 -0
  109. package/app/components/primer/alpha/tool_tip.js +443 -0
  110. package/app/components/primer/alpha/tree_view/tree_view.d.ts +42 -0
  111. package/app/components/primer/alpha/tree_view/tree_view.js +391 -0
  112. package/app/components/primer/alpha/tree_view/tree_view_icon_pair_element.d.ts +15 -0
  113. package/app/components/primer/alpha/tree_view/tree_view_icon_pair_element.js +62 -0
  114. package/app/components/primer/alpha/tree_view/tree_view_include_fragment_element.d.ts +9 -0
  115. package/app/components/primer/alpha/tree_view/tree_view_include_fragment_element.js +28 -0
  116. package/app/components/primer/alpha/tree_view/tree_view_roving_tab_index.d.ts +3 -0
  117. package/app/components/primer/alpha/tree_view/tree_view_roving_tab_index.js +130 -0
  118. package/app/components/primer/alpha/tree_view/tree_view_sub_tree_node_element.d.ts +45 -0
  119. package/app/components/primer/alpha/tree_view/tree_view_sub_tree_node_element.js +429 -0
  120. package/app/components/primer/alpha/tree_view.css +396 -0
  121. package/app/components/primer/alpha/tree_view.css.json +52 -0
  122. package/app/components/primer/alpha/underline_nav.css +150 -0
  123. package/app/components/primer/alpha/underline_nav.css.json +26 -0
  124. package/app/components/primer/alpha/x_banner.d.ts +18 -0
  125. package/app/components/primer/alpha/x_banner.js +51 -0
  126. package/app/components/primer/anchored_position.d.ts +27 -0
  127. package/app/components/primer/anchored_position.js +159 -0
  128. package/app/components/primer/beta/auto_complete/auto_complete.d.ts +1 -0
  129. package/app/components/primer/beta/auto_complete/auto_complete.js +1 -0
  130. package/app/components/primer/beta/avatar.css +77 -0
  131. package/app/components/primer/beta/avatar.css.json +17 -0
  132. package/app/components/primer/beta/avatar_stack.css +145 -0
  133. package/app/components/primer/beta/avatar_stack.css.json +28 -0
  134. package/app/components/primer/beta/blankslate.css +168 -0
  135. package/app/components/primer/beta/blankslate.css.json +23 -0
  136. package/app/components/primer/beta/border_box.css +218 -0
  137. package/app/components/primer/beta/border_box.css.json +54 -0
  138. package/app/components/primer/beta/breadcrumbs.css +29 -0
  139. package/app/components/primer/beta/breadcrumbs.css.json +9 -0
  140. package/app/components/primer/beta/button.css +359 -0
  141. package/app/components/primer/beta/button.css.json +86 -0
  142. package/app/components/primer/beta/button_group.css +20 -0
  143. package/app/components/primer/beta/button_group.css.json +12 -0
  144. package/app/components/primer/beta/clipboard_copy.d.ts +1 -0
  145. package/app/components/primer/beta/clipboard_copy.js +58 -0
  146. package/app/components/primer/beta/counter.css +38 -0
  147. package/app/components/primer/beta/counter.css.json +10 -0
  148. package/app/components/primer/beta/details_toggle_element.d.ts +40 -0
  149. package/app/components/primer/beta/details_toggle_element.js +65 -0
  150. package/app/components/primer/beta/flash.css +152 -0
  151. package/app/components/primer/beta/flash.css.json +27 -0
  152. package/app/components/primer/beta/label.css +109 -0
  153. package/app/components/primer/beta/label.css.json +24 -0
  154. package/app/components/primer/beta/link.css +79 -0
  155. package/app/components/primer/beta/link.css.json +19 -0
  156. package/app/components/primer/beta/nav_list.d.ts +20 -0
  157. package/app/components/primer/beta/nav_list.js +192 -0
  158. package/app/components/primer/beta/nav_list_group_element.d.ts +19 -0
  159. package/app/components/primer/beta/nav_list_group_element.js +111 -0
  160. package/app/components/primer/beta/popover.css +215 -0
  161. package/app/components/primer/beta/popover.css.json +33 -0
  162. package/app/components/primer/beta/progress_bar.css +27 -0
  163. package/app/components/primer/beta/progress_bar.css.json +10 -0
  164. package/app/components/primer/beta/relative_time.d.ts +1 -0
  165. package/app/components/primer/beta/relative_time.js +1 -0
  166. package/app/components/primer/beta/state.css +59 -0
  167. package/app/components/primer/beta/state.css.json +13 -0
  168. package/app/components/primer/beta/subhead.css +64 -0
  169. package/app/components/primer/beta/subhead.css.json +14 -0
  170. package/app/components/primer/beta/timeline_item.css +106 -0
  171. package/app/components/primer/beta/timeline_item.css.json +16 -0
  172. package/app/components/primer/beta/truncate.css +30 -0
  173. package/app/components/primer/beta/truncate.css.json +12 -0
  174. package/app/components/primer/dialog_helper.d.ts +15 -0
  175. package/app/components/primer/dialog_helper.js +132 -0
  176. package/app/components/primer/focus_group.d.ts +19 -0
  177. package/app/components/primer/focus_group.js +163 -0
  178. package/app/components/primer/open_project/border_box/collapsible_header.css +21 -0
  179. package/app/components/primer/open_project/border_box/collapsible_header.css.json +11 -0
  180. package/app/components/primer/open_project/border_box/collapsible_header.d.ts +11 -0
  181. package/app/components/primer/open_project/border_box/collapsible_header.js +21 -0
  182. package/app/components/primer/open_project/border_grid.css +35 -0
  183. package/app/components/primer/open_project/border_grid.css.json +11 -0
  184. package/app/components/primer/open_project/collapsible.d.ts +13 -0
  185. package/app/components/primer/open_project/collapsible.js +67 -0
  186. package/app/components/primer/open_project/collapsible_section.css +5 -0
  187. package/app/components/primer/open_project/collapsible_section.css.json +6 -0
  188. package/app/components/primer/open_project/collapsible_section.d.ts +10 -0
  189. package/app/components/primer/open_project/collapsible_section.js +16 -0
  190. package/app/components/primer/open_project/danger_dialog_form_helper.d.ts +14 -0
  191. package/app/components/primer/open_project/danger_dialog_form_helper.js +54 -0
  192. package/app/components/primer/open_project/drag_handle.css +6 -0
  193. package/app/components/primer/open_project/drag_handle.css.json +6 -0
  194. package/app/components/primer/open_project/filterable_tree_view.d.ts +29 -0
  195. package/app/components/primer/open_project/filterable_tree_view.js +409 -0
  196. package/app/components/primer/open_project/input_group.css +22 -0
  197. package/app/components/primer/open_project/input_group.css.json +12 -0
  198. package/app/components/primer/open_project/page_header.css +87 -0
  199. package/app/components/primer/open_project/page_header.css.json +20 -0
  200. package/app/components/primer/open_project/page_header_element.d.ts +9 -0
  201. package/app/components/primer/open_project/page_header_element.js +23 -0
  202. package/app/components/primer/open_project/side_panel/section.css +27 -0
  203. package/app/components/primer/open_project/side_panel/section.css.json +11 -0
  204. package/app/components/primer/open_project/sub_header.css +80 -0
  205. package/app/components/primer/open_project/sub_header.css.json +17 -0
  206. package/app/components/primer/open_project/sub_header_element.d.ts +17 -0
  207. package/app/components/primer/open_project/sub_header_element.js +76 -0
  208. package/app/components/primer/open_project/zen_mode_button.d.ts +18 -0
  209. package/app/components/primer/open_project/zen_mode_button.js +64 -0
  210. package/app/components/primer/primer.d.ts +40 -0
  211. package/app/components/primer/primer.js +40 -0
  212. package/app/components/primer/scrollable_region.d.ts +13 -0
  213. package/app/components/primer/scrollable_region.js +52 -0
  214. package/app/components/primer/shared_events.d.ts +26 -0
  215. package/app/components/primer/shared_events.js +1 -0
  216. package/app/components/primer/truncate.css +23 -0
  217. package/app/components/primer/truncate.css.json +13 -0
  218. package/app/components/primer/utils.d.ts +1 -0
  219. package/app/components/primer/utils.js +16 -0
  220. package/app/lib/primer/forms/primer_multi_input.d.ts +10 -0
  221. package/app/lib/primer/forms/primer_multi_input.js +44 -0
  222. package/app/lib/primer/forms/primer_text_field.d.ts +28 -0
  223. package/app/lib/primer/forms/primer_text_field.js +119 -0
  224. package/app/lib/primer/forms/toggle_switch_input.d.ts +5 -0
  225. package/app/lib/primer/forms/toggle_switch_input.js +34 -0
  226. package/package.json +103 -0
  227. package/static/arguments.json +6472 -0
  228. package/static/audited_at.json +173 -0
  229. package/static/classes.json +781 -0
  230. package/static/constants.json +1972 -0
  231. package/static/form_previews.json +118 -0
  232. package/static/info_arch.json +21331 -0
  233. package/static/previews.json +9436 -0
  234. package/static/statuses.json +173 -0
@@ -0,0 +1,79 @@
1
+ /* Links */
2
+
3
+ .Link {
4
+ color: var(--fgColor-accent);
5
+ -webkit-text-decoration: none;
6
+ text-decoration: none;
7
+ }
8
+
9
+ .Link:hover {
10
+ -webkit-text-decoration: underline;
11
+ text-decoration: underline;
12
+ cursor: pointer;
13
+ }
14
+
15
+ .Link:focus {
16
+ -webkit-text-decoration: underline;
17
+ text-decoration: underline;
18
+ }
19
+
20
+ .Link:focus,.Link:focus-visible {
21
+ outline-offset: 0;
22
+ }
23
+
24
+ .Link--underline {
25
+ -webkit-text-decoration: underline;
26
+ text-decoration: underline;
27
+ }
28
+
29
+ .Link--primary {
30
+ color: var(--fgColor-default) !important;
31
+ }
32
+
33
+ .Link--primary:hover {
34
+ color: var(--fgColor-accent) !important;
35
+ }
36
+
37
+ .Link--secondary {
38
+ color: var(--fgColor-muted) !important;
39
+ }
40
+
41
+ .Link--secondary:hover {
42
+ color: var(--fgColor-accent) !important;
43
+ }
44
+
45
+ .Link--muted {
46
+ color: var(--fgColor-muted) !important;
47
+ }
48
+
49
+ .Link--muted:hover {
50
+ color: var(--fgColor-accent) !important;
51
+ -webkit-text-decoration: none;
52
+ text-decoration: none;
53
+ }
54
+
55
+ /* Set the link color only on hover
56
+ Useful when you want only part of a link to turn blue on hover */
57
+
58
+ .Link--onHover:hover {
59
+ color: var(--fgColor-accent) !important;
60
+ -webkit-text-decoration: underline;
61
+ text-decoration: underline;
62
+ cursor: pointer;
63
+ }
64
+
65
+ /* When using a color utility class inside of a link class
66
+ color should change with link on hover. */
67
+
68
+ :is(.Link--secondary,.Link--primary,.Link--muted):hover [class*='color-fg'] {
69
+ color: inherit !important;
70
+ }
71
+
72
+ .Link-content {
73
+ display: inline-flex;
74
+ align-items: center;
75
+ /* stylelint-disable-next-line primer/typography */
76
+ line-height: normal;
77
+ gap: var(--base-size-4);
78
+ text-decoration: inherit;
79
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "name": "beta/link",
3
+ "selectors": [
4
+ ".Link",
5
+ ".Link:hover",
6
+ ".Link:focus",
7
+ ".Link:focus-visible",
8
+ ".Link--underline",
9
+ ".Link--primary",
10
+ ".Link--primary:hover",
11
+ ".Link--secondary",
12
+ ".Link--secondary:hover",
13
+ ".Link--muted",
14
+ ".Link--muted:hover",
15
+ ".Link--onHover:hover",
16
+ ":is(.Link--secondary,.Link--primary,.Link--muted):hover [class*='color-fg']",
17
+ ".Link-content"
18
+ ]
19
+ }
@@ -0,0 +1,20 @@
1
+ export declare class NavListElement extends HTMLElement {
2
+ #private;
3
+ items: HTMLElement[];
4
+ topLevelList: HTMLElement;
5
+ connectedCallback(): void;
6
+ disconnectedCallback(): void;
7
+ selectItemById(itemId: string | null): boolean;
8
+ selectItemByHref(href: string | null): boolean;
9
+ selectItemByCurrentLocation(): boolean;
10
+ expandItem(item: HTMLElement): void;
11
+ collapseItem(item: HTMLElement): void;
12
+ itemIsExpanded(item: HTMLElement | null): boolean;
13
+ handleItemWithSubItemClick(e: Event): void;
14
+ handleItemWithSubItemKeydown(e: KeyboardEvent): void;
15
+ }
16
+ declare global {
17
+ interface Window {
18
+ NavListElement: typeof NavListElement;
19
+ }
20
+ }
@@ -0,0 +1,192 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
8
+ if (kind === "m") throw new TypeError("Private method is not writable");
9
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
10
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
11
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
12
+ };
13
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
14
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
15
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
16
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
17
+ };
18
+ var _NavListElement_instances, _NavListElement_truncationObserver, _NavListElement_findSelectedNavItemById, _NavListElement_findSelectedNavItemByHref, _NavListElement_findSelectedNavItemByCurrentLocation, _NavListElement_select, _NavListElement_deselect, _NavListElement_findParentMenu;
19
+ import { controller, target, targets } from '@github/catalyst';
20
+ import { ActionListTruncationObserver } from '../alpha/action_list';
21
+ let NavListElement = class NavListElement extends HTMLElement {
22
+ constructor() {
23
+ super(...arguments);
24
+ _NavListElement_instances.add(this);
25
+ _NavListElement_truncationObserver.set(this, void 0);
26
+ }
27
+ connectedCallback() {
28
+ // groups are wrapped in <action-list>, which handles resizing on its own
29
+ if (this.topLevelList) {
30
+ __classPrivateFieldSet(this, _NavListElement_truncationObserver, new ActionListTruncationObserver(this.topLevelList), "f");
31
+ }
32
+ }
33
+ disconnectedCallback() {
34
+ if (this.topLevelList) {
35
+ __classPrivateFieldGet(this, _NavListElement_truncationObserver, "f").unobserve(this.topLevelList);
36
+ }
37
+ }
38
+ selectItemById(itemId) {
39
+ if (!itemId)
40
+ return false;
41
+ const selectedItem = __classPrivateFieldGet(this, _NavListElement_instances, "m", _NavListElement_findSelectedNavItemById).call(this, itemId);
42
+ if (selectedItem) {
43
+ __classPrivateFieldGet(this, _NavListElement_instances, "m", _NavListElement_select).call(this, selectedItem);
44
+ return true;
45
+ }
46
+ return false;
47
+ }
48
+ selectItemByHref(href) {
49
+ if (!href)
50
+ return false;
51
+ const selectedItem = __classPrivateFieldGet(this, _NavListElement_instances, "m", _NavListElement_findSelectedNavItemByHref).call(this, href);
52
+ if (selectedItem) {
53
+ __classPrivateFieldGet(this, _NavListElement_instances, "m", _NavListElement_select).call(this, selectedItem);
54
+ return true;
55
+ }
56
+ return false;
57
+ }
58
+ selectItemByCurrentLocation() {
59
+ const selectedItem = __classPrivateFieldGet(this, _NavListElement_instances, "m", _NavListElement_findSelectedNavItemByCurrentLocation).call(this);
60
+ if (selectedItem) {
61
+ __classPrivateFieldGet(this, _NavListElement_instances, "m", _NavListElement_select).call(this, selectedItem);
62
+ return true;
63
+ }
64
+ return false;
65
+ }
66
+ // expand collapsible item onClick
67
+ expandItem(item) {
68
+ item.nextElementSibling?.removeAttribute('data-hidden');
69
+ item.setAttribute('aria-expanded', 'true');
70
+ }
71
+ collapseItem(item) {
72
+ item.nextElementSibling?.setAttribute('data-hidden', '');
73
+ item.setAttribute('aria-expanded', 'false');
74
+ item.focus();
75
+ }
76
+ itemIsExpanded(item) {
77
+ if (item?.tagName === 'A') {
78
+ return true;
79
+ }
80
+ return item?.getAttribute('aria-expanded') === 'true';
81
+ }
82
+ // expand/collapse item
83
+ handleItemWithSubItemClick(e) {
84
+ const el = e.target;
85
+ if (!(el instanceof HTMLElement))
86
+ return;
87
+ const button = el.closest('button');
88
+ if (!button)
89
+ return;
90
+ if (this.itemIsExpanded(button)) {
91
+ this.collapseItem(button);
92
+ }
93
+ else {
94
+ this.expandItem(button);
95
+ }
96
+ /* eslint-disable-next-line no-restricted-syntax */
97
+ e.stopPropagation();
98
+ }
99
+ // collapse item
100
+ handleItemWithSubItemKeydown(e) {
101
+ const el = e.currentTarget;
102
+ if (!(el instanceof HTMLElement))
103
+ return;
104
+ let button = el.closest('button');
105
+ if (!button) {
106
+ const button_id = el.getAttribute('aria-labelledby');
107
+ if (button_id) {
108
+ button = document.getElementById(button_id);
109
+ }
110
+ else {
111
+ return;
112
+ }
113
+ }
114
+ if (this.itemIsExpanded(button) && e.key === 'Escape') {
115
+ this.collapseItem(button);
116
+ }
117
+ /* eslint-disable-next-line no-restricted-syntax */
118
+ e.stopPropagation();
119
+ }
120
+ };
121
+ _NavListElement_truncationObserver = new WeakMap();
122
+ _NavListElement_instances = new WeakSet();
123
+ _NavListElement_findSelectedNavItemById = function _NavListElement_findSelectedNavItemById(itemId) {
124
+ // First we compare the selected link to data-item-id for each nav item
125
+ for (const navItem of this.items) {
126
+ if (navItem.classList.contains('ActionListItem--hasSubItem')) {
127
+ continue;
128
+ }
129
+ const keys = navItem.getAttribute('data-item-id')?.split(' ') || [];
130
+ if (keys.includes(itemId)) {
131
+ return navItem;
132
+ }
133
+ }
134
+ return null;
135
+ };
136
+ _NavListElement_findSelectedNavItemByHref = function _NavListElement_findSelectedNavItemByHref(href) {
137
+ // If we didn't find a match, we compare the selected link to the href of each nav item
138
+ const selectedNavItem = this.querySelector(`.ActionListContent[href="${href}"]`);
139
+ if (selectedNavItem) {
140
+ return selectedNavItem.closest('.ActionListItem');
141
+ }
142
+ return null;
143
+ };
144
+ _NavListElement_findSelectedNavItemByCurrentLocation = function _NavListElement_findSelectedNavItemByCurrentLocation() {
145
+ return __classPrivateFieldGet(this, _NavListElement_instances, "m", _NavListElement_findSelectedNavItemByHref).call(this, window.location.pathname);
146
+ };
147
+ _NavListElement_select = function _NavListElement_select(navItem) {
148
+ const currentlySelectedItem = this.querySelector('.ActionListItem--navActive');
149
+ if (currentlySelectedItem)
150
+ __classPrivateFieldGet(this, _NavListElement_instances, "m", _NavListElement_deselect).call(this, currentlySelectedItem);
151
+ navItem.classList.add('ActionListItem--navActive');
152
+ if (navItem.children.length > 0) {
153
+ navItem.children[0].setAttribute('aria-current', 'page');
154
+ }
155
+ const parentMenu = __classPrivateFieldGet(this, _NavListElement_instances, "m", _NavListElement_findParentMenu).call(this, navItem);
156
+ if (parentMenu) {
157
+ this.expandItem(parentMenu);
158
+ parentMenu.classList.add('ActionListContent--hasActiveSubItem');
159
+ }
160
+ };
161
+ _NavListElement_deselect = function _NavListElement_deselect(navItem) {
162
+ navItem.classList.remove('ActionListItem--navActive');
163
+ if (navItem.children.length > 0) {
164
+ navItem.children[0].removeAttribute('aria-current');
165
+ }
166
+ const parentMenu = __classPrivateFieldGet(this, _NavListElement_instances, "m", _NavListElement_findParentMenu).call(this, navItem);
167
+ if (parentMenu) {
168
+ this.collapseItem(parentMenu);
169
+ parentMenu.classList.remove('ActionListContent--hasActiveSubItem');
170
+ }
171
+ };
172
+ _NavListElement_findParentMenu = function _NavListElement_findParentMenu(navItem) {
173
+ if (!navItem.classList.contains('ActionListItem--subItem'))
174
+ return null;
175
+ const parent = navItem.closest('li.ActionListItem--hasSubItem')?.querySelector('button.ActionListContent');
176
+ if (parent) {
177
+ return parent;
178
+ }
179
+ else {
180
+ return null;
181
+ }
182
+ };
183
+ __decorate([
184
+ targets
185
+ ], NavListElement.prototype, "items", void 0);
186
+ __decorate([
187
+ target
188
+ ], NavListElement.prototype, "topLevelList", void 0);
189
+ NavListElement = __decorate([
190
+ controller
191
+ ], NavListElement);
192
+ export { NavListElement };
@@ -0,0 +1,19 @@
1
+ export declare class NavListGroupElement extends HTMLElement {
2
+ #private;
3
+ showMoreItem: HTMLElement;
4
+ focusMarkers: HTMLElement[];
5
+ connectedCallback(): void;
6
+ get showMoreDisabled(): boolean;
7
+ set showMoreDisabled(value: boolean);
8
+ set currentPage(value: number);
9
+ get currentPage(): number;
10
+ get totalPages(): number;
11
+ get paginationSrc(): string;
12
+ private showMore;
13
+ private setShowMoreItemState;
14
+ }
15
+ declare global {
16
+ interface Window {
17
+ NavListGroupElement: typeof NavListGroupElement;
18
+ }
19
+ }
@@ -0,0 +1,111 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
8
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
9
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
10
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
11
+ };
12
+ var _NavListGroupElement_instances, _NavListGroupElement_parseHTML, _NavListGroupElement_truncateObserver;
13
+ import { controller, target, targets } from '@github/catalyst';
14
+ import { ActionListTruncationObserver } from '../alpha/action_list';
15
+ let NavListGroupElement = class NavListGroupElement extends HTMLElement {
16
+ constructor() {
17
+ super(...arguments);
18
+ _NavListGroupElement_instances.add(this);
19
+ _NavListGroupElement_truncateObserver.set(this, new ActionListTruncationObserver(this));
20
+ }
21
+ connectedCallback() {
22
+ this.setShowMoreItemState();
23
+ }
24
+ get showMoreDisabled() {
25
+ return this.showMoreItem.hasAttribute('aria-disabled');
26
+ }
27
+ set showMoreDisabled(value) {
28
+ if (value) {
29
+ this.showMoreItem.setAttribute('aria-disabled', 'true');
30
+ }
31
+ else {
32
+ this.showMoreItem.removeAttribute('aria-disabled');
33
+ }
34
+ this.showMoreItem.classList.toggle('disabled', value);
35
+ }
36
+ set currentPage(value) {
37
+ this.showMoreItem.setAttribute('data-current-page', value.toString());
38
+ }
39
+ get currentPage() {
40
+ return parseInt(this.showMoreItem.getAttribute('data-current-page')) || 1;
41
+ }
42
+ get totalPages() {
43
+ return parseInt(this.showMoreItem.getAttribute('data-total-pages')) || 1;
44
+ }
45
+ get paginationSrc() {
46
+ return this.showMoreItem.getAttribute('src') || '';
47
+ }
48
+ async showMore(e) {
49
+ e.preventDefault();
50
+ if (this.showMoreDisabled)
51
+ return;
52
+ this.showMoreDisabled = true;
53
+ let html;
54
+ try {
55
+ const paginationURL = new URL(this.paginationSrc, window.location.origin);
56
+ this.currentPage++;
57
+ paginationURL.searchParams.append('page', this.currentPage.toString());
58
+ const response = await fetch(paginationURL);
59
+ if (!response.ok)
60
+ return;
61
+ html = await response.text();
62
+ if (this.currentPage === this.totalPages) {
63
+ this.showMoreItem.hidden = true;
64
+ }
65
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
66
+ }
67
+ catch (err) {
68
+ // Ignore network errors
69
+ this.showMoreDisabled = false;
70
+ this.currentPage--;
71
+ return;
72
+ }
73
+ const fragment = __classPrivateFieldGet(this, _NavListGroupElement_instances, "m", _NavListGroupElement_parseHTML).call(this, document, html);
74
+ fragment?.querySelector('li > a')?.setAttribute('data-targets', 'nav-list-group.focusMarkers');
75
+ const listId = e.target.closest('button').getAttribute('data-list-id');
76
+ const list = document.getElementById(listId);
77
+ list.append(fragment);
78
+ this.focusMarkers.pop()?.focus();
79
+ this.showMoreDisabled = false;
80
+ }
81
+ setShowMoreItemState() {
82
+ if (!this.showMoreItem) {
83
+ return;
84
+ }
85
+ if (this.currentPage < this.totalPages) {
86
+ this.showMoreItem.hidden = false;
87
+ }
88
+ else {
89
+ this.showMoreItem.hidden = true;
90
+ }
91
+ }
92
+ };
93
+ _NavListGroupElement_truncateObserver = new WeakMap();
94
+ _NavListGroupElement_instances = new WeakSet();
95
+ _NavListGroupElement_parseHTML = function _NavListGroupElement_parseHTML(document, html) {
96
+ const template = document.createElement('template');
97
+ // eslint-disable-next-line github/no-inner-html
98
+ template.innerHTML = html;
99
+ return document.importNode(template.content, true);
100
+ };
101
+ __decorate([
102
+ target
103
+ ], NavListGroupElement.prototype, "showMoreItem", void 0);
104
+ __decorate([
105
+ targets
106
+ ], NavListGroupElement.prototype, "focusMarkers", void 0);
107
+ NavListGroupElement = __decorate([
108
+ controller
109
+ ], NavListGroupElement);
110
+ export { NavListGroupElement };
111
+ window.NavListGroupElement = NavListGroupElement;
@@ -0,0 +1,215 @@
1
+ /* stylelint-disable primer/spacing */
2
+
3
+ /* Popover */
4
+
5
+ .Popover {
6
+ position: absolute;
7
+ z-index: 100;
8
+ }
9
+
10
+ .Popover-message {
11
+ position: relative;
12
+ width: 232px;
13
+ margin-right: auto;
14
+ margin-left: auto;
15
+ background-color: var(--overlay-bgColor);
16
+ border: var(--borderWidth-thin) solid var(--borderColor-default);
17
+ border-radius: var(--borderRadius-medium);
18
+
19
+ /* adding !important to override utility classes used in dotcom */
20
+ box-shadow: var(--shadow-floating-legacy, var(--color-shadow-large)) !important;
21
+
22
+ /* Carets */
23
+ }
24
+
25
+ .Popover-message::before,.Popover-message::after {
26
+ position: absolute;
27
+ left: 50%;
28
+ display: inline-block;
29
+ content: '';
30
+ }
31
+
32
+ .Popover-message::before {
33
+ top: -16px;
34
+ margin-left: -9px;
35
+ /* stylelint-disable-next-line primer/borders */
36
+ border: 8px solid transparent;
37
+ border-bottom-color: var(--borderColor-default);
38
+ }
39
+
40
+ .Popover-message::after {
41
+ top: -14px;
42
+ margin-left: -8px;
43
+ /* stylelint-disable-next-line primer/borders */
44
+ border: 7px solid transparent;
45
+ /* stylelint-disable-next-line primer/colors */
46
+ border-bottom-color: var(--overlay-bgColor);
47
+ }
48
+
49
+ /* No caret */
50
+
51
+ .Popover-message--no-caret::before,.Popover-message--no-caret::after {
52
+ display: none;
53
+ }
54
+
55
+ /* Bottom-oriented carets */
56
+
57
+ :is(.Popover-message--bottom,.Popover-message--bottom-right,.Popover-message--bottom-left)::before,:is(.Popover-message--bottom,.Popover-message--bottom-right,.Popover-message--bottom-left)::after {
58
+ top: auto;
59
+ border-bottom-color: transparent;
60
+ }
61
+
62
+ :is(.Popover-message--bottom,.Popover-message--bottom-right,.Popover-message--bottom-left)::before {
63
+ bottom: -16px;
64
+ border-top-color: var(--borderColor-default);
65
+ }
66
+
67
+ :is(.Popover-message--bottom,.Popover-message--bottom-right,.Popover-message--bottom-left)::after {
68
+ bottom: -14px;
69
+ /* stylelint-disable-next-line primer/colors */
70
+ border-top-color: var(--overlay-bgColor);
71
+ }
72
+
73
+ /* Top and Bottom: Right-oriented carets */
74
+
75
+ .Popover-message--top-right,
76
+ .Popover-message--bottom-right {
77
+ right: -9px;
78
+ margin-right: 0;
79
+ }
80
+
81
+ :is(.Popover-message--top-right,.Popover-message--bottom-right)::before,:is(.Popover-message--top-right,.Popover-message--bottom-right)::after {
82
+ left: auto;
83
+ margin-left: 0;
84
+ }
85
+
86
+ :is(.Popover-message--top-right,.Popover-message--bottom-right)::before {
87
+ right: var(--base-size-20);
88
+ }
89
+
90
+ :is(.Popover-message--top-right,.Popover-message--bottom-right)::after {
91
+ right: var(--base-size-20);
92
+ margin-right: 1px;
93
+ }
94
+
95
+ /* Top and Bottom: Left-oriented carets */
96
+
97
+ .Popover-message--top-left,
98
+ .Popover-message--bottom-left {
99
+ left: -9px;
100
+ margin-left: 0;
101
+ }
102
+
103
+ :is(.Popover-message--top-left,.Popover-message--bottom-left)::before,:is(.Popover-message--top-left,.Popover-message--bottom-left)::after {
104
+ left: var(--base-size-24);
105
+ margin-left: 0;
106
+ }
107
+
108
+ :is(.Popover-message--top-left,.Popover-message--bottom-left)::after {
109
+ left: var(--base-size-24);
110
+ margin-left: 1px;
111
+ }
112
+
113
+ /* Right- and Left-oriented carets */
114
+
115
+ :is(.Popover-message--right,.Popover-message--right-top,.Popover-message--right-bottom,.Popover-message--left,.Popover-message--left-top,.Popover-message--left-bottom)::before,:is(.Popover-message--right,.Popover-message--right-top,.Popover-message--right-bottom,.Popover-message--left,.Popover-message--left-top,.Popover-message--left-bottom)::after {
116
+ top: 50%;
117
+ left: auto;
118
+ margin-left: 0;
119
+ border-bottom-color: transparent;
120
+ }
121
+
122
+ :is(.Popover-message--right,.Popover-message--right-top,.Popover-message--right-bottom,.Popover-message--left,.Popover-message--left-top,.Popover-message--left-bottom)::before {
123
+ margin-top: -9px;
124
+ }
125
+
126
+ :is(.Popover-message--right,.Popover-message--right-top,.Popover-message--right-bottom,.Popover-message--left,.Popover-message--left-top,.Popover-message--left-bottom)::after {
127
+ margin-top: -8px;
128
+ }
129
+
130
+ /* Right-oriented carets */
131
+
132
+ :is(.Popover-message--right,.Popover-message--right-top,.Popover-message--right-bottom)::before {
133
+ right: -16px;
134
+ border-left-color: var(--borderColor-default);
135
+ }
136
+
137
+ :is(.Popover-message--right,.Popover-message--right-top,.Popover-message--right-bottom)::after {
138
+ right: -14px;
139
+ /* stylelint-disable-next-line primer/colors */
140
+ border-left-color: var(--overlay-bgColor);
141
+ }
142
+
143
+ /* Left-oriented carets */
144
+
145
+ :is(.Popover-message--left,.Popover-message--left-top,.Popover-message--left-bottom)::before {
146
+ left: -16px;
147
+ border-right-color: var(--borderColor-default);
148
+ }
149
+
150
+ :is(.Popover-message--left,.Popover-message--left-top,.Popover-message--left-bottom)::after {
151
+ left: -14px;
152
+ margin-bottom: 1px;
153
+ /* stylelint-disable-next-line primer/colors */
154
+ border-right-color: var(--overlay-bgColor);
155
+ }
156
+
157
+ /* Right and Left: Top-oriented carets */
158
+
159
+ :is(.Popover-message--right-top,.Popover-message--left-top)::before,:is(.Popover-message--right-top,.Popover-message--left-top)::after {
160
+ top: var(--base-size-24);
161
+ }
162
+
163
+ /* Right and Left: Bottom-oriented carets */
164
+
165
+ :is(.Popover-message--right-bottom,.Popover-message--left-bottom)::before,:is(.Popover-message--right-bottom,.Popover-message--left-bottom)::after {
166
+ top: auto;
167
+ }
168
+
169
+ :is(.Popover-message--right-bottom,.Popover-message--left-bottom)::before {
170
+ bottom: var(--base-size-16);
171
+ }
172
+
173
+ :is(.Popover-message--right-bottom,.Popover-message--left-bottom)::after {
174
+ bottom: var(--base-size-16);
175
+ margin-bottom: 1px;
176
+ }
177
+
178
+ @media (min-width: 544px) {
179
+ .Popover-message--large {
180
+ min-width: 320px;
181
+ }
182
+ }
183
+
184
+ /* Responsive Popover
185
+ ** For < md it will show full-width anchored to the bottom */
186
+
187
+ @media (max-width: 767.98px) {
188
+ .Popover {
189
+ position: fixed;
190
+ top: auto !important;
191
+ right: 0 !important;
192
+ bottom: 0 !important;
193
+ left: 0 !important;
194
+ }
195
+
196
+ .Popover-message {
197
+ top: auto;
198
+ right: auto;
199
+ bottom: auto;
200
+ left: auto;
201
+ width: auto !important;
202
+ margin: var(--stack-gap-condensed);
203
+ }
204
+
205
+ /* Increase tap area for touch input */
206
+ .Popover-message > .btn-octicon {
207
+ padding: var(--control-medium-paddingInline-normal) !important;
208
+ }
209
+
210
+ /* Remove caret */
211
+ .Popover-message::after,
212
+ .Popover-message::before {
213
+ display: none;
214
+ }
215
+ }
@@ -0,0 +1,33 @@
1
+ {
2
+ "name": "beta/popover",
3
+ "selectors": [
4
+ ".Popover",
5
+ ".Popover-message",
6
+ ".Popover-message::before",
7
+ ".Popover-message::after",
8
+ ".Popover-message--no-caret::before",
9
+ ".Popover-message--no-caret::after",
10
+ ":is(.Popover-message--bottom,.Popover-message--bottom-right,.Popover-message--bottom-left)::before",
11
+ ":is(.Popover-message--bottom,.Popover-message--bottom-right,.Popover-message--bottom-left)::after",
12
+ ".Popover-message--top-right",
13
+ ".Popover-message--bottom-right",
14
+ ":is(.Popover-message--top-right,.Popover-message--bottom-right)::before",
15
+ ":is(.Popover-message--top-right,.Popover-message--bottom-right)::after",
16
+ ".Popover-message--top-left",
17
+ ".Popover-message--bottom-left",
18
+ ":is(.Popover-message--top-left,.Popover-message--bottom-left)::before",
19
+ ":is(.Popover-message--top-left,.Popover-message--bottom-left)::after",
20
+ ":is(.Popover-message--right,.Popover-message--right-top,.Popover-message--right-bottom,.Popover-message--left,.Popover-message--left-top,.Popover-message--left-bottom)::before",
21
+ ":is(.Popover-message--right,.Popover-message--right-top,.Popover-message--right-bottom,.Popover-message--left,.Popover-message--left-top,.Popover-message--left-bottom)::after",
22
+ ":is(.Popover-message--right,.Popover-message--right-top,.Popover-message--right-bottom)::before",
23
+ ":is(.Popover-message--right,.Popover-message--right-top,.Popover-message--right-bottom)::after",
24
+ ":is(.Popover-message--left,.Popover-message--left-top,.Popover-message--left-bottom)::before",
25
+ ":is(.Popover-message--left,.Popover-message--left-top,.Popover-message--left-bottom)::after",
26
+ ":is(.Popover-message--right-top,.Popover-message--left-top)::before",
27
+ ":is(.Popover-message--right-top,.Popover-message--left-top)::after",
28
+ ":is(.Popover-message--right-bottom,.Popover-message--left-bottom)::before",
29
+ ":is(.Popover-message--right-bottom,.Popover-message--left-bottom)::after",
30
+ ".Popover-message--large",
31
+ ".Popover-message > .btn-octicon"
32
+ ]
33
+ }