primer_view_components 0.1.8 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (209) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +79 -0
  3. data/README.md +1 -1
  4. data/app/assets/javascripts/primer_view_components.js +1 -1
  5. data/app/assets/javascripts/primer_view_components.js.map +1 -1
  6. data/app/assets/styles/primer_view_components.css +1 -3
  7. data/app/assets/styles/primer_view_components.css.map +1 -1
  8. data/app/components/primer/alpha/action_list/item.rb +3 -5
  9. data/app/components/primer/alpha/action_list.css +1 -1
  10. data/app/components/primer/alpha/action_list.css.json +16 -16
  11. data/app/components/primer/alpha/action_list.css.map +1 -1
  12. data/app/components/primer/alpha/action_list.pcss +145 -145
  13. data/app/components/primer/alpha/action_list.rb +30 -15
  14. data/app/components/primer/alpha/action_menu/action_menu_element.d.ts +2 -1
  15. data/app/components/primer/alpha/action_menu/action_menu_element.js +44 -34
  16. data/app/components/primer/alpha/action_menu/action_menu_element.ts +32 -30
  17. data/app/components/primer/alpha/action_menu/list.rb +6 -1
  18. data/app/components/primer/alpha/action_menu.rb +1 -1
  19. data/app/components/primer/alpha/auto_complete.css +1 -1
  20. data/app/components/primer/alpha/auto_complete.css.map +1 -1
  21. data/app/components/primer/alpha/auto_complete.pcss +3 -3
  22. data/app/components/primer/alpha/banner.css +1 -1
  23. data/app/components/primer/alpha/banner.css.map +1 -1
  24. data/app/components/primer/alpha/banner.pcss +11 -11
  25. data/app/components/primer/alpha/button_marketing.css.map +1 -1
  26. data/app/components/primer/alpha/button_marketing.pcss +5 -12
  27. data/app/components/primer/alpha/button_marketing.rb +3 -0
  28. data/app/components/primer/alpha/dialog.css +1 -1
  29. data/app/components/primer/alpha/dialog.css.map +1 -1
  30. data/app/components/primer/alpha/dialog.pcss +36 -36
  31. data/app/components/primer/alpha/dropdown.css +1 -1
  32. data/app/components/primer/alpha/dropdown.css.map +1 -1
  33. data/app/components/primer/alpha/dropdown.pcss +12 -12
  34. data/app/components/primer/alpha/form_control.html.erb +1 -1
  35. data/app/components/primer/alpha/hellip_button.rb +3 -1
  36. data/app/components/primer/alpha/layout.css +1 -1
  37. data/app/components/primer/alpha/layout.css.map +1 -1
  38. data/app/components/primer/alpha/layout.pcss +4 -4
  39. data/app/components/primer/alpha/menu.css +1 -1
  40. data/app/components/primer/alpha/menu.css.map +1 -1
  41. data/app/components/primer/alpha/menu.pcss +21 -21
  42. data/app/components/primer/alpha/modal_dialog.js +17 -4
  43. data/app/components/primer/alpha/modal_dialog.ts +17 -4
  44. data/app/components/primer/alpha/nav_list/item.rb +2 -0
  45. data/app/components/primer/alpha/nav_list.js +6 -0
  46. data/app/components/primer/alpha/nav_list.rb +55 -36
  47. data/app/components/primer/alpha/nav_list.ts +8 -0
  48. data/app/components/primer/alpha/octicon_symbols.html.erb +1 -1
  49. data/app/components/primer/alpha/overlay/header.html.erb +5 -3
  50. data/app/components/primer/alpha/overlay/header.rb +4 -1
  51. data/app/components/primer/alpha/overlay.css +1 -1
  52. data/app/components/primer/alpha/overlay.css.json +1 -2
  53. data/app/components/primer/alpha/overlay.css.map +1 -1
  54. data/app/components/primer/alpha/overlay.pcss +14 -4
  55. data/app/components/primer/alpha/overlay.rb +1 -0
  56. data/app/components/primer/alpha/segmented_control.css +1 -1
  57. data/app/components/primer/alpha/segmented_control.css.map +1 -1
  58. data/app/components/primer/alpha/segmented_control.pcss +24 -33
  59. data/app/components/primer/alpha/tab_nav.css +1 -1
  60. data/app/components/primer/alpha/tab_nav.css.map +1 -1
  61. data/app/components/primer/alpha/tab_nav.pcss +12 -12
  62. data/app/components/primer/alpha/text_field.css +1 -3
  63. data/app/components/primer/alpha/text_field.css.json +1 -0
  64. data/app/components/primer/alpha/text_field.css.map +1 -1
  65. data/app/components/primer/alpha/text_field.pcss +87 -83
  66. data/app/components/primer/alpha/toggle_switch.css +1 -1
  67. data/app/components/primer/alpha/toggle_switch.css.json +11 -11
  68. data/app/components/primer/alpha/toggle_switch.css.map +1 -1
  69. data/app/components/primer/alpha/toggle_switch.d.ts +1 -1
  70. data/app/components/primer/alpha/toggle_switch.html.erb +2 -2
  71. data/app/components/primer/alpha/toggle_switch.js +44 -42
  72. data/app/components/primer/alpha/toggle_switch.pcss +16 -16
  73. data/app/components/primer/alpha/toggle_switch.rb +7 -0
  74. data/app/components/primer/alpha/toggle_switch.ts +50 -41
  75. data/app/components/primer/alpha/underline_nav.css +1 -1
  76. data/app/components/primer/alpha/underline_nav.css.map +1 -1
  77. data/app/components/primer/alpha/underline_nav.pcss +11 -11
  78. data/app/components/primer/beta/auto_complete.rb +1 -1
  79. data/app/components/primer/beta/avatar.css +1 -1
  80. data/app/components/primer/beta/avatar.css.map +1 -1
  81. data/app/components/primer/beta/avatar.pcss +18 -18
  82. data/app/components/primer/beta/avatar_stack.css +1 -1
  83. data/app/components/primer/beta/avatar_stack.css.map +1 -1
  84. data/app/components/primer/beta/avatar_stack.pcss +5 -5
  85. data/app/components/primer/beta/base_button.rb +11 -0
  86. data/app/components/primer/beta/blankslate.css +1 -1
  87. data/app/components/primer/beta/blankslate.css.map +1 -1
  88. data/app/components/primer/beta/blankslate.pcss +16 -16
  89. data/app/components/primer/beta/border_box.css +1 -1
  90. data/app/components/primer/beta/border_box.css.json +1 -1
  91. data/app/components/primer/beta/border_box.css.map +1 -1
  92. data/app/components/primer/beta/border_box.pcss +40 -42
  93. data/app/components/primer/beta/button.css +1 -1
  94. data/app/components/primer/beta/button.css.json +4 -0
  95. data/app/components/primer/beta/button.css.map +1 -1
  96. data/app/components/primer/beta/button.pcss +39 -24
  97. data/app/components/primer/beta/button.rb +3 -0
  98. data/app/components/primer/beta/button_group.css +1 -0
  99. data/app/components/primer/beta/button_group.css.json +14 -0
  100. data/app/components/primer/beta/button_group.css.map +1 -0
  101. data/app/components/primer/beta/button_group.pcss +27 -0
  102. data/app/components/primer/beta/button_group.rb +19 -19
  103. data/app/components/primer/beta/close_button.rb +3 -1
  104. data/app/components/primer/beta/counter.css +1 -1
  105. data/app/components/primer/beta/counter.css.map +1 -1
  106. data/app/components/primer/beta/counter.pcss +5 -5
  107. data/app/components/primer/beta/details.html.erb +6 -2
  108. data/app/components/primer/beta/details.rb +18 -10
  109. data/app/components/primer/beta/flash.css +1 -1
  110. data/app/components/primer/beta/flash.css.map +1 -1
  111. data/app/components/primer/beta/flash.pcss +12 -12
  112. data/app/components/primer/beta/icon_button.rb +7 -3
  113. data/app/components/primer/beta/label.css +1 -1
  114. data/app/components/primer/beta/label.css.map +1 -1
  115. data/app/components/primer/beta/label.pcss +3 -3
  116. data/app/components/primer/beta/popover.css +1 -1
  117. data/app/components/primer/beta/popover.css.map +1 -1
  118. data/app/components/primer/beta/popover.pcss +4 -4
  119. data/app/components/primer/beta/state.css +1 -1
  120. data/app/components/primer/beta/state.css.map +1 -1
  121. data/app/components/primer/beta/state.pcss +7 -7
  122. data/app/components/primer/beta/subhead.css +1 -1
  123. data/app/components/primer/beta/subhead.css.map +1 -1
  124. data/app/components/primer/beta/subhead.pcss +9 -9
  125. data/app/components/primer/beta/timeline_item.css +1 -1
  126. data/app/components/primer/beta/timeline_item.css.map +1 -1
  127. data/app/components/primer/beta/timeline_item.pcss +18 -18
  128. data/app/components/primer/beta/truncate.css +1 -1
  129. data/app/components/primer/beta/truncate.css.map +1 -1
  130. data/app/components/primer/beta/truncate.pcss +1 -1
  131. data/app/components/primer/focus_group.js +8 -13
  132. data/app/components/primer/focus_group.ts +8 -12
  133. data/app/components/primer/primer.d.ts +1 -0
  134. data/app/components/primer/primer.js +1 -0
  135. data/app/components/primer/primer.pcss +1 -0
  136. data/app/components/primer/primer.ts +1 -0
  137. data/lib/postcss_mixins/activeIndicatorLine.pcss +4 -4
  138. data/lib/primer/accessibility.rb +74 -0
  139. data/lib/primer/forms/dsl/input.rb +4 -8
  140. data/lib/primer/forms/dsl/text_field_input.rb +0 -4
  141. data/lib/primer/forms/dsl/toggle_switch_input.rb +4 -0
  142. data/lib/primer/forms/form_control.html.erb +3 -5
  143. data/lib/primer/forms/primer_base_component_wrapper.html.erb +3 -0
  144. data/lib/primer/forms/primer_base_component_wrapper.rb +24 -0
  145. data/lib/primer/forms/toggle_switch.html.erb +3 -3
  146. data/lib/primer/forms/toggle_switch.rb +6 -2
  147. data/lib/primer/forms/toggle_switch_input.js +7 -2
  148. data/lib/primer/forms/toggle_switch_input.ts +9 -2
  149. data/lib/primer/static/generate_info_arch.rb +3 -0
  150. data/lib/primer/static/generate_previews.rb +15 -8
  151. data/lib/primer/view_components/linters/deprecated_components_counter.rb +37 -13
  152. data/lib/primer/view_components/version.rb +2 -2
  153. data/lib/primer/yard/component_manifest.rb +1 -1
  154. data/lib/primer/yard/lookbook_pages_backend.rb +8 -2
  155. data/lib/primer/yard/registry.rb +4 -0
  156. data/previews/pages/forms/03_caption_templates.md.erb +1 -1
  157. data/previews/pages/forms/04_after_content.md.erb +1 -1
  158. data/previews/pages/forms/06_miscellaneous_inputs.md.erb +1 -1
  159. data/previews/pages/forms/07_toggle_switch_forms.md.erb +1 -1
  160. data/previews/primer/alpha/action_menu_preview/two_menus.html.erb +13 -0
  161. data/previews/primer/alpha/action_menu_preview/with_actions.html.erb +21 -0
  162. data/previews/primer/alpha/action_menu_preview.rb +5 -13
  163. data/previews/primer/alpha/button_marketing_preview.rb +3 -2
  164. data/previews/primer/alpha/dialog_preview.rb +4 -3
  165. data/previews/primer/alpha/hellip_button_preview.rb +3 -2
  166. data/previews/primer/alpha/nav_list_preview.rb +1 -1
  167. data/previews/primer/alpha/overlay_preview/middle_of_page_with_relative_container.html.erb +19 -0
  168. data/previews/primer/alpha/overlay_preview.rb +31 -0
  169. data/previews/primer/beta/base_button_preview.rb +9 -2
  170. data/previews/primer/beta/button_group_preview/action_menus.html.erb +8 -0
  171. data/previews/primer/beta/button_group_preview.rb +49 -11
  172. data/previews/primer/beta/button_preview/trailing_counter.html.erb +1 -1
  173. data/previews/primer/beta/button_preview.rb +5 -2
  174. data/previews/primer/beta/close_button_preview.rb +3 -2
  175. data/previews/primer/beta/details_preview.rb +11 -8
  176. data/previews/primer/forms_preview.rb +44 -0
  177. data/static/arguments.json +11 -5
  178. data/static/classes.json +378 -372
  179. data/static/constants.json +0 -1
  180. data/static/info_arch.json +5457 -1364
  181. data/static/previews.json +5197 -1428
  182. metadata +40 -36
  183. data/lib/tasks/docs.rake +0 -185
  184. data/lib/tasks/helpers/ast_processor.rb +0 -44
  185. data/lib/tasks/helpers/ast_traverser.rb +0 -77
  186. data/lib/tasks/primer_view_components.rake +0 -47
  187. data/lib/tasks/static.rake +0 -29
  188. data/lib/tasks/test.rake +0 -83
  189. data/lib/tasks/utilities.rake +0 -109
  190. data/previews/primer/forms/forms_preview.rb +0 -48
  191. /data/previews/primer/{forms/forms_preview → forms_preview}/after_content_form.html.erb +0 -0
  192. /data/previews/primer/{forms/forms_preview → forms_preview}/array_check_box_group_form.html.erb +0 -0
  193. /data/previews/primer/{forms/forms_preview → forms_preview}/caption_template_form.html.erb +0 -0
  194. /data/previews/primer/{forms/forms_preview → forms_preview}/check_box_group_form.html.erb +0 -0
  195. /data/previews/primer/{forms/forms_preview → forms_preview}/check_box_with_nested_form.html.erb +0 -0
  196. /data/previews/primer/{forms/forms_preview → forms_preview}/composed_form.html.erb +0 -0
  197. /data/previews/primer/{forms/forms_preview → forms_preview}/example_toggle_switch_form.html.erb +0 -0
  198. /data/previews/primer/{forms/forms_preview → forms_preview}/horizontal_form.html.erb +0 -0
  199. /data/previews/primer/{forms/forms_preview → forms_preview}/immediate_validation_form.html.erb +0 -0
  200. /data/previews/primer/{forms/forms_preview → forms_preview}/invalid_form.html.erb +0 -0
  201. /data/previews/primer/{forms/forms_preview → forms_preview}/multi_input_form.html.erb +0 -0
  202. /data/previews/primer/{forms/forms_preview → forms_preview}/multi_text_field_form.html.erb +0 -0
  203. /data/previews/primer/{forms/forms_preview → forms_preview}/name_with_question_mark_form.html.erb +0 -0
  204. /data/previews/primer/{forms/forms_preview → forms_preview}/radio_button_group_form.html.erb +0 -0
  205. /data/previews/primer/{forms/forms_preview → forms_preview}/radio_button_with_nested_form.html.erb +0 -0
  206. /data/previews/primer/{forms/forms_preview → forms_preview}/select_form.html.erb +0 -0
  207. /data/previews/primer/{forms/forms_preview → forms_preview}/single_text_field_form.html.erb +0 -0
  208. /data/previews/primer/{forms/forms_preview → forms_preview}/submit_button_form.html.erb +0 -0
  209. /data/previews/primer/{forms/forms_preview → forms_preview}/text_field_and_checkbox_form.html.erb +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["menu.pcss"],"names":[],"mappings":"AAIA,MAGE,4CAA6C,CAC7C,oEAAsE,CACtE,4CAA8C,CAH9C,eAAgB,CADhB,0CAKF,CAEA,WAKE,yEAA2E,CAD3E,6BAA8B,CAF9B,aAAc,CACd,2GAA8G,CAF9G,iBA+EF,CAzEE,uBACE,YAAa,CAEb,sDAKF,CAHE,qDAHA,qDAKA,CAGF,sBACE,eAAgB,CAChB,yDAMF,CAHE,mDAFA,wDAIA,CAGF,iBAEE,4CAA6C,CAD7C,oBAEF,CAEA,kBACE,2CACF,CAEA,sGAIE,4CAA6C,CAD7C,cAYF,CATE,2HAOE,kDAAmD,CAJnD,QAAS,CAGT,UAAW,CAFX,MAAO,CAHP,iBAAkB,CAClB,KAAM,CAGN,SAGF,CAGF,oBAGE,2BAA4B,CAD5B,0CAA4C,CAE5C,iBAAkB,CAHlB,UAIF,CAEA,oBACE,WAAY,CACZ,wCACF,CAEA,yBAEE,+BAAgC,CADhC,WAEF,CAEA,mBACE,UAAW,CACX,yCACF,CAGE,0BACE,4BACF,CAIJ,cAQE,yEAA2E,CAD3E,6BAA8B,CAN9B,aAAc,CAId,iBAAkB,CAClB,gDAAkD,CAFlD,eAAgB,CADhB,YAAa,CADb,2GAsBF,CAdE,oBACE,oBACF,CAEA,0BACE,qDAAuD,CACvD,sDACF,CAEA,yBACE,eAAgB,CAEhB,wDAA0D,CAD1D,yDAEF","file":"menu.css","sourcesContent":["/* menu */\n\n/* A menu on the side of a page, defaults to left side. e.g. github.com/about */\n\n.menu {\n margin-bottom: var(--stack-gap-normal, 16px);\n list-style: none;\n background-color: var(--color-canvas-default);\n border: var(--borderWidth-thin, 1px) solid var(--color-border-default);\n border-radius: var(--borderRadius-medium, 6px);\n}\n\n.menu-item {\n position: relative;\n display: block;\n padding: var(--control-medium-paddingInline-condensed, 8px) var(--control-medium-paddingInline-spacious, 16px);\n color: var(--color-fg-default);\n border-bottom: var(--borderWidth-thin, 1px) solid var(--color-border-muted);\n\n &:first-child {\n border-top: 0;\n border-top-left-radius: var(--borderRadius-medium, 6px);\n border-top-right-radius: var(--borderRadius-medium, 6px);\n\n &::before {\n border-top-left-radius: var(--borderRadius-medium, 6px);\n }\n }\n\n &:last-child {\n border-bottom: 0;\n border-bottom-right-radius: var(--borderRadius-medium, 6px);\n border-bottom-left-radius: var(--borderRadius-medium, 6px);\n\n &::before {\n border-bottom-left-radius: var(--borderRadius-medium, 6px);\n }\n }\n\n &:hover {\n text-decoration: none;\n background-color: var(--color-neutral-subtle);\n }\n\n &:active {\n background-color: var(--color-canvas-subtle);\n }\n\n &.selected,\n &[aria-selected='true'],\n &[aria-current]:not([aria-current='false']) {\n cursor: default;\n background-color: var(--color-menu-bg-active);\n\n &::before {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n width: 2px;\n content: '';\n background-color: var(--color-primer-border-active);\n }\n }\n\n & .octicon {\n width: 16px;\n margin-right: var(--control-medium-gap, 8px);\n color: var(--color-fg-muted);\n text-align: center;\n }\n\n & .Counter {\n float: right;\n margin-left: var(--control-small-gap, 4px);\n }\n\n & .menu-warning {\n float: right;\n color: var(--color-attention-fg);\n }\n\n & .avatar {\n float: left;\n margin-right: var(--control-small-gap, 4px);\n }\n\n &.alert {\n & .Counter {\n color: var(--color-danger-fg);\n }\n }\n}\n\n.menu-heading {\n display: block;\n padding: var(--control-medium-paddingInline-condensed, 8px) var(--control-medium-paddingInline-spacious, 16px);\n margin-top: 0;\n margin-bottom: 0;\n font-size: inherit;\n font-weight: var(--base-text-weight-semibold, 600);\n color: var(--color-fg-default);\n border-bottom: var(--borderWidth-thin, 1px) solid var(--color-border-muted);\n\n &:hover {\n text-decoration: none;\n }\n\n &:first-child {\n border-top-left-radius: var(--borderRadius-medium, 6px);\n border-top-right-radius: var(--borderRadius-medium, 6px);\n }\n\n &:last-child {\n border-bottom: 0;\n border-bottom-right-radius: var(--borderRadius-medium, 6px);\n border-bottom-left-radius: var(--borderRadius-medium, 6px);\n }\n}\n"]}
1
+ {"version":3,"sources":["menu.pcss"],"names":[],"mappings":"AAIA,MAGE,4CAA6C,CAC7C,kFAAiE,CACjE,4CAAyC,CAHzC,eAAgB,CADhB,0CAKF,CAEA,WAKE,uFAAsE,CADtE,6BAA8B,CAF9B,aAAc,CACd,6GAAmG,CAFnG,iBA+EF,CAzEE,uBACE,YAAa,CAEb,sDAKF,CAHE,qDAHA,qDAKA,CAGF,sBACE,eAAgB,CAChB,yDAMF,CAHE,mDAFA,wDAIA,CAGF,iBAEE,4CAA6C,CAD7C,oBAEF,CAEA,kBACE,2CACF,CAEA,sGAIE,4CAA6C,CAD7C,cAYF,CATE,2HAOE,kDAAmD,CAJnD,QAAS,CAGT,UAAW,CAFX,MAAO,CAHP,iBAAkB,CAClB,KAAM,CAGN,SAGF,CAGF,oBAGE,2BAA4B,CAD5B,4CAAuC,CAEvC,iBAAkB,CAHlB,UAIF,CAEA,oBACE,WAAY,CACZ,2CACF,CAEA,yBAEE,+BAAgC,CADhC,WAEF,CAEA,mBACE,UAAW,CACX,4CACF,CAGE,0BACE,4BACF,CAIJ,cAQE,uFAAsE,CADtE,6BAA8B,CAN9B,aAAc,CAId,iBAAkB,CAClB,gDAA6C,CAF7C,eAAgB,CADhB,YAAa,CADb,6GAsBF,CAdE,oBACE,oBACF,CAEA,0BACE,qDAAkD,CAClD,sDACF,CAEA,yBACE,eAAgB,CAEhB,wDAAqD,CADrD,yDAEF","file":"menu.css","sourcesContent":["/* menu */\n\n/* A menu on the side of a page, defaults to left side. e.g. github.com/about */\n\n.menu {\n margin-bottom: var(--stack-gap-normal);\n list-style: none;\n background-color: var(--color-canvas-default);\n border: var(--borderWidth-thin) solid var(--color-border-default);\n border-radius: var(--borderRadius-medium);\n}\n\n.menu-item {\n position: relative;\n display: block;\n padding: var(--control-medium-paddingInline-condensed) var(--control-medium-paddingInline-spacious);\n color: var(--color-fg-default);\n border-bottom: var(--borderWidth-thin) solid var(--color-border-muted);\n\n &:first-child {\n border-top: 0;\n border-top-left-radius: var(--borderRadius-medium);\n border-top-right-radius: var(--borderRadius-medium);\n\n &::before {\n border-top-left-radius: var(--borderRadius-medium);\n }\n }\n\n &:last-child {\n border-bottom: 0;\n border-bottom-right-radius: var(--borderRadius-medium);\n border-bottom-left-radius: var(--borderRadius-medium);\n\n &::before {\n border-bottom-left-radius: var(--borderRadius-medium);\n }\n }\n\n &:hover {\n text-decoration: none;\n background-color: var(--color-neutral-subtle);\n }\n\n &:active {\n background-color: var(--color-canvas-subtle);\n }\n\n &.selected,\n &[aria-selected='true'],\n &[aria-current]:not([aria-current='false']) {\n cursor: default;\n background-color: var(--color-menu-bg-active);\n\n &::before {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n width: 2px;\n content: '';\n background-color: var(--color-primer-border-active);\n }\n }\n\n & .octicon {\n width: 16px;\n margin-right: var(--control-medium-gap);\n color: var(--color-fg-muted);\n text-align: center;\n }\n\n & .Counter {\n float: right;\n margin-left: var(--control-small-gap);\n }\n\n & .menu-warning {\n float: right;\n color: var(--color-attention-fg);\n }\n\n & .avatar {\n float: left;\n margin-right: var(--control-small-gap);\n }\n\n &.alert {\n & .Counter {\n color: var(--color-danger-fg);\n }\n }\n}\n\n.menu-heading {\n display: block;\n padding: var(--control-medium-paddingInline-condensed) var(--control-medium-paddingInline-spacious);\n margin-top: 0;\n margin-bottom: 0;\n font-size: inherit;\n font-weight: var(--base-text-weight-semibold);\n color: var(--color-fg-default);\n border-bottom: var(--borderWidth-thin) solid var(--color-border-muted);\n\n &:hover {\n text-decoration: none;\n }\n\n &:first-child {\n border-top-left-radius: var(--borderRadius-medium);\n border-top-right-radius: var(--borderRadius-medium);\n }\n\n &:last-child {\n border-bottom: 0;\n border-bottom-right-radius: var(--borderRadius-medium);\n border-bottom-left-radius: var(--borderRadius-medium);\n }\n}\n"]}
@@ -3,37 +3,37 @@
3
3
  /* A menu on the side of a page, defaults to left side. e.g. github.com/about */
4
4
 
5
5
  .menu {
6
- margin-bottom: var(--stack-gap-normal, 16px);
6
+ margin-bottom: var(--stack-gap-normal);
7
7
  list-style: none;
8
8
  background-color: var(--color-canvas-default);
9
- border: var(--borderWidth-thin, 1px) solid var(--color-border-default);
10
- border-radius: var(--borderRadius-medium, 6px);
9
+ border: var(--borderWidth-thin) solid var(--color-border-default);
10
+ border-radius: var(--borderRadius-medium);
11
11
  }
12
12
 
13
13
  .menu-item {
14
14
  position: relative;
15
15
  display: block;
16
- padding: var(--control-medium-paddingInline-condensed, 8px) var(--control-medium-paddingInline-spacious, 16px);
16
+ padding: var(--control-medium-paddingInline-condensed) var(--control-medium-paddingInline-spacious);
17
17
  color: var(--color-fg-default);
18
- border-bottom: var(--borderWidth-thin, 1px) solid var(--color-border-muted);
18
+ border-bottom: var(--borderWidth-thin) solid var(--color-border-muted);
19
19
 
20
20
  &:first-child {
21
21
  border-top: 0;
22
- border-top-left-radius: var(--borderRadius-medium, 6px);
23
- border-top-right-radius: var(--borderRadius-medium, 6px);
22
+ border-top-left-radius: var(--borderRadius-medium);
23
+ border-top-right-radius: var(--borderRadius-medium);
24
24
 
25
25
  &::before {
26
- border-top-left-radius: var(--borderRadius-medium, 6px);
26
+ border-top-left-radius: var(--borderRadius-medium);
27
27
  }
28
28
  }
29
29
 
30
30
  &:last-child {
31
31
  border-bottom: 0;
32
- border-bottom-right-radius: var(--borderRadius-medium, 6px);
33
- border-bottom-left-radius: var(--borderRadius-medium, 6px);
32
+ border-bottom-right-radius: var(--borderRadius-medium);
33
+ border-bottom-left-radius: var(--borderRadius-medium);
34
34
 
35
35
  &::before {
36
- border-bottom-left-radius: var(--borderRadius-medium, 6px);
36
+ border-bottom-left-radius: var(--borderRadius-medium);
37
37
  }
38
38
  }
39
39
 
@@ -65,14 +65,14 @@
65
65
 
66
66
  & .octicon {
67
67
  width: 16px;
68
- margin-right: var(--control-medium-gap, 8px);
68
+ margin-right: var(--control-medium-gap);
69
69
  color: var(--color-fg-muted);
70
70
  text-align: center;
71
71
  }
72
72
 
73
73
  & .Counter {
74
74
  float: right;
75
- margin-left: var(--control-small-gap, 4px);
75
+ margin-left: var(--control-small-gap);
76
76
  }
77
77
 
78
78
  & .menu-warning {
@@ -82,7 +82,7 @@
82
82
 
83
83
  & .avatar {
84
84
  float: left;
85
- margin-right: var(--control-small-gap, 4px);
85
+ margin-right: var(--control-small-gap);
86
86
  }
87
87
 
88
88
  &.alert {
@@ -94,26 +94,26 @@
94
94
 
95
95
  .menu-heading {
96
96
  display: block;
97
- padding: var(--control-medium-paddingInline-condensed, 8px) var(--control-medium-paddingInline-spacious, 16px);
97
+ padding: var(--control-medium-paddingInline-condensed) var(--control-medium-paddingInline-spacious);
98
98
  margin-top: 0;
99
99
  margin-bottom: 0;
100
100
  font-size: inherit;
101
- font-weight: var(--base-text-weight-semibold, 600);
101
+ font-weight: var(--base-text-weight-semibold);
102
102
  color: var(--color-fg-default);
103
- border-bottom: var(--borderWidth-thin, 1px) solid var(--color-border-muted);
103
+ border-bottom: var(--borderWidth-thin) solid var(--color-border-muted);
104
104
 
105
105
  &:hover {
106
106
  text-decoration: none;
107
107
  }
108
108
 
109
109
  &:first-child {
110
- border-top-left-radius: var(--borderRadius-medium, 6px);
111
- border-top-right-radius: var(--borderRadius-medium, 6px);
110
+ border-top-left-radius: var(--borderRadius-medium);
111
+ border-top-right-radius: var(--borderRadius-medium);
112
112
  }
113
113
 
114
114
  &:last-child {
115
115
  border-bottom: 0;
116
- border-bottom-right-radius: var(--borderRadius-medium, 6px);
117
- border-bottom-left-radius: var(--borderRadius-medium, 6px);
116
+ border-bottom-right-radius: var(--borderRadius-medium);
117
+ border-bottom-left-radius: var(--borderRadius-medium);
118
118
  }
119
119
  }
@@ -21,7 +21,7 @@ const overlayStack = [];
21
21
  function clickHandler(event) {
22
22
  const target = event.target;
23
23
  const button = target === null || target === void 0 ? void 0 : target.closest('button');
24
- if (!button)
24
+ if (!button || button.hasAttribute('disabled') || button.getAttribute('aria-disabled') === 'true')
25
25
  return;
26
26
  // If the user is clicking a valid dialog trigger
27
27
  let dialogId = button === null || button === void 0 ? void 0 : button.getAttribute('data-show-dialog-id');
@@ -31,6 +31,10 @@ function clickHandler(event) {
31
31
  if (dialog instanceof ModalDialogElement) {
32
32
  dialog.openButton = button;
33
33
  dialog.show();
34
+ // A buttons default behaviour in some browsers it to send a pointer event
35
+ // If the behaviour is allowed through the dialog will be shown but then
36
+ // quickly hidden- as if it were never shown. This prevents that.
37
+ event.preventDefault();
34
38
  return;
35
39
  }
36
40
  }
@@ -96,6 +100,7 @@ export class ModalDialogElement extends HTMLElement {
96
100
  if (this.open)
97
101
  return;
98
102
  this.setAttribute('open', '');
103
+ this.setAttribute('aria-disabled', 'false');
99
104
  (_a = __classPrivateFieldGet(this, _ModalDialogElement_instances, "a", _ModalDialogElement_overlayBackdrop_get)) === null || _a === void 0 ? void 0 : _a.classList.remove('Overlay--hidden');
100
105
  document.body.style.paddingRight = `${window.innerWidth - document.body.clientWidth}px`;
101
106
  document.body.style.overflow = 'hidden';
@@ -109,6 +114,7 @@ export class ModalDialogElement extends HTMLElement {
109
114
  if (!this.open)
110
115
  return;
111
116
  this.removeAttribute('open');
117
+ this.setAttribute('aria-disabled', 'true');
112
118
  (_b = __classPrivateFieldGet(this, _ModalDialogElement_instances, "a", _ModalDialogElement_overlayBackdrop_get)) === null || _b === void 0 ? void 0 : _b.classList.add('Overlay--hidden');
113
119
  document.body.style.paddingRight = '0';
114
120
  document.body.style.overflow = 'initial';
@@ -160,14 +166,21 @@ _ModalDialogElement_focusAbortController = new WeakMap(), _ModalDialogElement_in
160
166
  return;
161
167
  if (event.isComposing)
162
168
  return;
169
+ if (!this.open)
170
+ return;
163
171
  switch (event.key) {
164
172
  case 'Escape':
165
- if (this.open) {
166
- this.close();
167
- event.preventDefault();
173
+ this.close();
174
+ event.preventDefault();
175
+ event.stopPropagation();
176
+ break;
177
+ case 'Enter': {
178
+ const target = event.target;
179
+ if (target.getAttribute('data-close-dialog-id') === this.id) {
168
180
  event.stopPropagation();
169
181
  }
170
182
  break;
183
+ }
171
184
  }
172
185
  };
173
186
  if (!window.customElements.get('modal-dialog')) {
@@ -13,7 +13,7 @@ function clickHandler(event: Event) {
13
13
  const target = event.target as HTMLElement
14
14
  const button = target?.closest('button')
15
15
 
16
- if (!button) return
16
+ if (!button || button.hasAttribute('disabled') || button.getAttribute('aria-disabled') === 'true') return
17
17
 
18
18
  // If the user is clicking a valid dialog trigger
19
19
  let dialogId = button?.getAttribute('data-show-dialog-id')
@@ -23,6 +23,10 @@ function clickHandler(event: Event) {
23
23
  if (dialog instanceof ModalDialogElement) {
24
24
  dialog.openButton = button
25
25
  dialog.show()
26
+ // A buttons default behaviour in some browsers it to send a pointer event
27
+ // If the behaviour is allowed through the dialog will be shown but then
28
+ // quickly hidden- as if it were never shown. This prevents that.
29
+ event.preventDefault()
26
30
  return
27
31
  }
28
32
  }
@@ -96,6 +100,7 @@ export class ModalDialogElement extends HTMLElement {
96
100
  if (value) {
97
101
  if (this.open) return
98
102
  this.setAttribute('open', '')
103
+ this.setAttribute('aria-disabled', 'false')
99
104
  this.#overlayBackdrop?.classList.remove('Overlay--hidden')
100
105
  document.body.style.paddingRight = `${window.innerWidth - document.body.clientWidth}px`
101
106
  document.body.style.overflow = 'hidden'
@@ -107,6 +112,7 @@ export class ModalDialogElement extends HTMLElement {
107
112
  } else {
108
113
  if (!this.open) return
109
114
  this.removeAttribute('open')
115
+ this.setAttribute('aria-disabled', 'true')
110
116
  this.#overlayBackdrop?.classList.add('Overlay--hidden')
111
117
  document.body.style.paddingRight = '0'
112
118
  document.body.style.overflow = 'initial'
@@ -161,15 +167,22 @@ export class ModalDialogElement extends HTMLElement {
161
167
  #keydown(event: Event) {
162
168
  if (!(event instanceof KeyboardEvent)) return
163
169
  if (event.isComposing) return
170
+ if (!this.open) return
164
171
 
165
172
  switch (event.key) {
166
173
  case 'Escape':
167
- if (this.open) {
168
- this.close()
169
- event.preventDefault()
174
+ this.close()
175
+ event.preventDefault()
176
+ event.stopPropagation()
177
+ break
178
+ case 'Enter': {
179
+ const target = event.target as HTMLElement
180
+
181
+ if (target.getAttribute('data-close-dialog-id') === this.id) {
170
182
  event.stopPropagation()
171
183
  }
172
184
  break
185
+ }
173
186
  }
174
187
  }
175
188
  }
@@ -80,6 +80,8 @@ module Primer
80
80
  )
81
81
  end
82
82
 
83
+ @content_arguments[:"aria-current"] = "page" if active?
84
+
83
85
  super
84
86
 
85
87
  raise "Cannot render a trailing action for an item with subitems" if items.present? && trailing_action.present?
@@ -203,6 +203,9 @@ _NavListElement_instances = new WeakSet(), _NavListElement_parseHTML = function
203
203
  if (currentlySelectedItem)
204
204
  __classPrivateFieldGet(this, _NavListElement_instances, "m", _NavListElement_deselect).call(this, currentlySelectedItem);
205
205
  navItem.classList.add('ActionListItem--navActive');
206
+ if (navItem.children.length > 0) {
207
+ navItem.children[0].setAttribute('aria-current', 'page');
208
+ }
206
209
  const parentMenu = __classPrivateFieldGet(this, _NavListElement_instances, "m", _NavListElement_findParentMenu).call(this, navItem);
207
210
  if (parentMenu) {
208
211
  this.expandItem(parentMenu);
@@ -210,6 +213,9 @@ _NavListElement_instances = new WeakSet(), _NavListElement_parseHTML = function
210
213
  }
211
214
  }, _NavListElement_deselect = function _NavListElement_deselect(navItem) {
212
215
  navItem.classList.remove('ActionListItem--navActive');
216
+ if (navItem.children.length > 0) {
217
+ navItem.children[0].removeAttribute('aria-current');
218
+ }
213
219
  const parentMenu = __classPrivateFieldGet(this, _NavListElement_instances, "m", _NavListElement_findParentMenu).call(this, navItem);
214
220
  if (parentMenu) {
215
221
  this.collapseItem(parentMenu);
@@ -30,43 +30,62 @@ module Primer
30
30
  ).with_content(title)
31
31
  }
32
32
 
33
- # Groups. Each group is a list of links and a (required) heading.
33
+ # @!parse
34
+ # # Adds an item to the list.
35
+ # #
36
+ # # @param system_arguments [Hash] The arguments accepted by <%= link_to_component(Primer::Alpha::NavList::Item) %>.
37
+ # def with_group(**system_arguments, &block)
38
+ # end
39
+
40
+ # @!parse
41
+ # # Adds a group to the list. A group is a list of links and a (required) heading.
42
+ # #
43
+ # # @param system_arguments [Hash] The arguments accepted by <%= link_to_component(Primer::Alpha::NavList::Group) %>.
44
+ # def with_group(**system_arguments, &block)
45
+ # end
46
+
47
+ # @!parse
48
+ # # Adds a divider to the list. Dividers visually separate items and groups.
49
+ # #
50
+ # # @param system_arguments [Hash] The arguments accepted by <%= link_to_component(Primer::Alpha::ActionList::Divider) %>.
51
+ # def with_divider(**system_arguments, &block)
52
+ # end
53
+
54
+ # Items. Items can be individual items, dividers, or groups. See the documentation for `#with_item`, `#with_divider`, and `#with_group` respectively for more information.
34
55
  #
35
- # @param system_arguments [Hash] The arguments accepted by <%= link_to_component(Primer::Alpha::NavList::Group) %>.
36
- def with_group(**system_arguments, &block)
37
- # This is a giant hack that should be removed when groups/items can be combined and converted into a polymorphic slot.
38
- # This feature needs to land in view_component first: https://github.com/ViewComponent/view_component/pull/1652
39
- set_slot(
40
- :items,
41
- { renderable: Primer::Alpha::NavList::Group, collection: true },
42
- selected_item_id: @selected_item_id,
43
- **system_arguments,
44
- &block
45
- )
46
- end
47
-
48
- # Adds a divider to the list of items.
49
- #
50
- # @param system_arguments [Hash] The arguments accepted by <%= link_to_component(Primer::Alpha::ActionList::Divider) %>.
51
- def with_divider(**system_arguments, &block)
52
- # This is a giant hack that should be removed when :items can be converted into a polymorphic slot.
53
- # This feature needs to land in view_component first: https://github.com/ViewComponent/view_component/pull/1652
54
- set_slot(:items, { renderable: Primer::Alpha::NavList::Divider, collection: true }, **system_arguments, &block)
55
- end
56
-
57
- # Items.
58
- #
59
- # @param system_arguments [Hash] The arguments accepted by <%= link_to_component(Primer::Alpha::NavList::Item) %>.
60
- renders_many :items, lambda { |component_klass: Primer::Alpha::NavList::Item, **system_arguments, &block|
61
- # dummy group just so we have something to pass as the list: argument below
62
- @top_level_group ||= Primer::Alpha::NavList::Group.new(selected_item_id: @selected_item_id)
63
-
64
- component_klass.new(
65
- list: @top_level_group,
66
- selected_item_id: @selected_item_id,
67
- **system_arguments,
68
- &block
69
- )
56
+ renders_many :items, types: {
57
+ item: {
58
+ renders: lambda { |component_klass: Primer::Alpha::NavList::Item, **system_arguments, &block|
59
+ # dummy group just so we have something to pass as the list: argument below
60
+ @top_level_group ||= Primer::Alpha::NavList::Group.new(selected_item_id: @selected_item_id)
61
+
62
+ component_klass.new(
63
+ list: @top_level_group,
64
+ selected_item_id: @selected_item_id,
65
+ **system_arguments,
66
+ &block
67
+ )
68
+ },
69
+
70
+ as: :item
71
+ },
72
+
73
+ divider: {
74
+ renders: Primer::Alpha::NavList::Divider,
75
+ as: :divider
76
+ },
77
+
78
+ group: {
79
+ renders: lambda { |**system_arguments, &block|
80
+ Primer::Alpha::NavList::Group.new(
81
+ selected_item_id: @selected_item_id,
82
+ **system_arguments,
83
+ &block
84
+ )
85
+ },
86
+
87
+ as: :group
88
+ }
70
89
  }
71
90
 
72
91
  # @example Items and headings
@@ -220,6 +220,10 @@ export class NavListElement extends HTMLElement {
220
220
 
221
221
  navItem.classList.add('ActionListItem--navActive')
222
222
 
223
+ if (navItem.children.length > 0) {
224
+ navItem.children[0].setAttribute('aria-current', 'page')
225
+ }
226
+
223
227
  const parentMenu = this.#findParentMenu(navItem)
224
228
 
225
229
  if (parentMenu) {
@@ -231,6 +235,10 @@ export class NavListElement extends HTMLElement {
231
235
  #deselect(navItem: HTMLElement) {
232
236
  navItem.classList.remove('ActionListItem--navActive')
233
237
 
238
+ if (navItem.children.length > 0) {
239
+ navItem.children[0].removeAttribute('aria-current')
240
+ }
241
+
234
242
  const parentMenu = this.#findParentMenu(navItem)
235
243
 
236
244
  if (parentMenu) {
@@ -1,3 +1,3 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" hidden>
1
+ <svg xmlns="http://www.w3.org/2000/svg" hidden> <%# erblint:disable GitHub::Accessibility::SvgHasAccessibleText %>
2
2
  <%= symbol_tags %>
3
3
  </svg>
@@ -8,8 +8,10 @@
8
8
  <h2 class="Overlay-description"><%= @subtitle %></h2>
9
9
  <% end %>
10
10
  </div>
11
- <div class="Overlay-actionWrap">
12
- <%= render Primer::Beta::CloseButton.new(classes: "Overlay-closeButton", "popoverhidetarget": @id) %>
13
- </div>
11
+ <% if @overlay_id %>
12
+ <div class="Overlay-actionWrap">
13
+ <%= render Primer::Beta::CloseButton.new(classes: "Overlay-closeButton", "popovertarget": @overlay_id, "popovertargetaction": "hide") %>
14
+ </div>
15
+ <% end %>
14
16
  </div>
15
17
  <% end %>
@@ -14,7 +14,8 @@ module Primer
14
14
  SIZE_OPTIONS = SIZE_MAPPINGS.keys
15
15
 
16
16
  # @param title [String] Describes the content of the Overlay.
17
- # @param subtitle [String] Provides dditional context for the Overlay, also setting the `aria-describedby` attribute.
17
+ # @param subtitle [String] Provides additional context for the Overlay, also setting the `aria-describedby` attribute.
18
+ # @param overlay_id [String] Provides the id of the overlay element so the close button can close it
18
19
  # @param size [Symbol] The size of the Header. <%= one_of(Primer::Alpha::Overlay::Header::SIZE_OPTIONS) %>
19
20
  # @param divider [Boolean] Show a divider between the header and body.
20
21
  # @param visually_hide_title [Boolean] Visually hide the `title` while maintaining a label for assistive technologies.
@@ -22,12 +23,14 @@ module Primer
22
23
  def initialize(
23
24
  id:,
24
25
  title:,
26
+ overlay_id: nil,
25
27
  subtitle: nil,
26
28
  size: DEFAULT_SIZE,
27
29
  divider: false,
28
30
  visually_hide_title: false,
29
31
  **system_arguments
30
32
  )
33
+ @overlay_id = overlay_id
31
34
  @id = id
32
35
  @title = title
33
36
  @subtitle = subtitle
@@ -1 +1 @@
1
- .Overlay[popover]{border-width:0;min-width:192px;padding:0;position:absolute}.Overlay[popover]:not(:open){display:none}anchored-position{display:block}
1
+ .Overlay[popover]{border-width:0;inset:auto;min-width:192px;padding:0;position:absolute}.Overlay[popover]:not(.\:popover-open){display:none}@supports selector(:popover-open){.Overlay[popover]:not(.\:popover-open){display:revert}}@supports selector(:open){.Overlay[popover]:not(.\:popover-open){display:revert}}
@@ -2,7 +2,6 @@
2
2
  "name": "alpha/overlay",
3
3
  "selectors": [
4
4
  ".Overlay[popover]",
5
- ".Overlay[popover]:not(:open)",
6
- "anchored-position"
5
+ ".Overlay[popover]:not(.\\:popover-open)"
7
6
  ]
8
7
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["overlay.pcss"],"names":[],"mappings":"AAAA,kBACE,cAAe,CAGf,eAAgB,CAFhB,SAAU,CACV,iBAEF,CAGA,6BACE,YACF,CAEA,kBACE,aACF","file":"overlay.css","sourcesContent":[".Overlay[popover] {\n border-width: 0;\n padding: 0;\n position: absolute;\n min-width: 192px;\n}\n\n/* stylelint-disable-next-line selector-pseudo-class-no-unknown */\n.Overlay[popover]:not(:open) {\n display: none;\n}\n\nanchored-position {\n display: block;\n}\n"]}
1
+ {"version":3,"sources":["overlay.pcss"],"names":[],"mappings":"AAAA,kBACE,cAAe,CAIf,UAAW,CADX,eAAgB,CAFhB,SAAU,CACV,iBAGF,CAEA,uCACE,YACF,CAGA,kCACE,uCACE,cACF,CACF,CAGA,0BACE,uCACI,cACJ,CACF","file":"overlay.css","sourcesContent":[".Overlay[popover] {\n border-width: 0;\n padding: 0;\n position: absolute;\n min-width: 192px;\n inset: auto;\n}\n\n.Overlay[popover]:not(.\\:popover-open) {\n display: none;\n}\n\n/* This reverts the declaration above for native popover, where `:popover-open` is supported */\n@supports selector(:popover-open) {\n .Overlay[popover]:not(.\\:popover-open) {\n display: revert;\n }\n}\n\n/* This reverts the declaration above for native popover, where `:open` is supported (Chrome 113, Safari TP) */\n@supports selector(:open) {\n .Overlay[popover]:not(.\\:popover-open) {\n display: revert;\n }\n}\n"]}
@@ -3,13 +3,23 @@
3
3
  padding: 0;
4
4
  position: absolute;
5
5
  min-width: 192px;
6
+ inset: auto;
6
7
  }
7
8
 
8
- /* stylelint-disable-next-line selector-pseudo-class-no-unknown */
9
- .Overlay[popover]:not(:open) {
9
+ .Overlay[popover]:not(.\:popover-open) {
10
10
  display: none;
11
11
  }
12
12
 
13
- anchored-position {
14
- display: block;
13
+ /* This reverts the declaration above for native popover, where `:popover-open` is supported */
14
+ @supports selector(:popover-open) {
15
+ .Overlay[popover]:not(.\:popover-open) {
16
+ display: revert;
17
+ }
18
+ }
19
+
20
+ /* This reverts the declaration above for native popover, where `:open` is supported (Chrome 113, Safari TP) */
21
+ @supports selector(:open) {
22
+ .Overlay[popover]:not(.\:popover-open) {
23
+ display: revert;
24
+ }
15
25
  }
@@ -94,6 +94,7 @@ module Primer
94
94
  # @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
95
95
  renders_one :header, lambda { |divider: false, size: :medium, visually_hide_title: @visually_hide_title, **system_arguments|
96
96
  Primer::Alpha::Overlay::Header.new(
97
+ overlay_id: @id,
97
98
  id: title_id,
98
99
  title: @title,
99
100
  subtitle: @subtitle,
@@ -1 +1 @@
1
- .SegmentedControl{background-color:var(--color-segmented-control-bg);border-radius:var(--borderRadius-medium,6px);display:inline-flex;list-style:none}.SegmentedControl-item{border:var(--borderWidth-thin,max(1px,.0625rem)) solid #0000;border-radius:var(--borderRadius-medium,6px);display:inline-flex;padding:var(--control-xsmall-paddingInline-condensed,4px);position:relative}.SegmentedControl-item.SegmentedControl-item--selected{background-color:var(--color-segmented-control-button-bg);border-color:var(--color-segmented-control-button-selected-border)}.SegmentedControl-item.SegmentedControl-item--selected .Button{font-weight:var(--base-text-weight-semibold,600)}.SegmentedControl-item.SegmentedControl-item--selected .Button:hover{background-color:initial}.SegmentedControl-item.SegmentedControl-item--selected:before{border-color:#0000!important}.SegmentedControl-item.SegmentedControl-item--selected+.SegmentedControl-item:before{border-color:#0000}.SegmentedControl-item .Button-label[data-content]:before{content:attr(data-content);display:block;font-weight:var(--base-text-weight-semibold,600);height:0;visibility:hidden}.SegmentedControl-item:not(:first-child):before{border-left:var(--borderWidth-thin,max(1px,.0625rem)) solid var(--color-border-default);content:"";inset:0 0 0 -1px;margin-bottom:var(--control-medium-paddingBlock,6px);margin-top:var(--control-medium-paddingBlock,6px);position:absolute}.SegmentedControl-item .Button{border:0;color:var(--color-btn-text);font-weight:var(--base-text-weight-normal,400);transition:none}.SegmentedControl-item .Button:focus-visible{border-radius:calc(var(--borderRadius-medium, 6px) - 5px);outline-offset:calc(var(--control-xsmall-paddingInline-condensed, 4px) - var(--borderWidth-thin, 1px))}.SegmentedControl-item .Button--small{height:calc(var(--control-small-size, 28px) - var(--control-xsmall-paddingInline-condensed, 4px)*2 - var(--borderWidth-thin, 1px)*2);padding:0 calc(var(--control-small-paddingInline-condensed, 8px) - var(--control-xsmall-paddingInline-condensed, 4px))}.SegmentedControl-item .Button--small.Button--iconOnly{width:calc(var(--control-medium-size, 32px) - var(--control-xsmall-paddingInline-condensed, 4px)*2 - var(--borderWidth-thin, 1px)*2)}.SegmentedControl-item .Button--small.Button--iconOnly:before{content:"";height:100%;left:50%;min-height:var(--control-medium-size,32px);min-width:var(--control-medium-size,32px);position:absolute;top:50%;transform:translateX(-50%) translateY(-50%);width:100%}.SegmentedControl-item .Button--medium{height:calc(var(--control-medium-size, 32px) - var(--control-xsmall-paddingInline-condensed, 4px)*2 - var(--borderWidth-thin, 1px)*2);padding:0 calc(var(--control-medium-paddingInline-normal, 12px) - var(--control-xsmall-paddingInline-condensed, 4px))}.SegmentedControl-item .Button--medium.Button--iconOnly{width:calc(var(--control-medium-size, 32px) - var(--control-xsmall-paddingInline-condensed, 4px)*2 - var(--borderWidth-thin, 1px)*2)}.SegmentedControl-item .Button--medium.Button--iconOnly:before{content:"";height:100%;left:50%;min-height:var(--control-medium-size,32px);min-width:var(--control-medium-size,32px);position:absolute;top:50%;transform:translateX(-50%) translateY(-50%);width:100%}.SegmentedControl-item .Button--large{height:calc(var(--control-large-size, 40px) - var(--control-xsmall-paddingInline-condensed, 4px)*2 - var(--borderWidth-thin, 1px)*2);padding:0 calc(var(--control-large-paddingInline-spacious, 16px) - var(--control-xsmall-paddingInline-condensed, 4px))}.SegmentedControl-item .Button--large.Button--iconOnly{width:calc(var(--control-large-size, 40px) - var(--control-xsmall-paddingInline-condensed, 4px)*2 - var(--borderWidth-thin, 1px)*2)}.SegmentedControl-item .Button--large.Button--iconOnly:before{content:"";height:100%;left:50%;min-height:var(--control-large-size,40px);min-width:var(--control-large-size,40px);position:absolute;top:50%;transform:translateX(-50%) translateY(-50%);width:100%}.SegmentedControl-item .Button--iconOnly{padding:initial}.SegmentedControl-item .Button--invisible.Button--invisible-noVisuals .Button-label{color:var(--color-btn-text)}.SegmentedControl--fullWidth{display:flex}.SegmentedControl--fullWidth .SegmentedControl-item{flex:1;justify-content:center}.SegmentedControl--fullWidth .Button--iconOnly,.SegmentedControl--fullWidth .Button-withTooltip{width:100%}
1
+ .SegmentedControl{background-color:var(--color-segmented-control-bg);border-radius:var(--borderRadius-medium,6px);display:inline-flex;list-style:none}.SegmentedControl-item{border:var(--borderWidth-thin,max(1px,.0625rem)) solid #0000;border-radius:var(--borderRadius-medium,6px);display:inline-flex;padding:var(--control-xsmall-paddingInline-condensed,.25rem);position:relative}.SegmentedControl-item.SegmentedControl-item--selected{background-color:var(--color-segmented-control-button-bg);border-color:var(--color-segmented-control-button-selected-border)}.SegmentedControl-item.SegmentedControl-item--selected .Button{font-weight:var(--base-text-weight-semibold,600)}.SegmentedControl-item.SegmentedControl-item--selected .Button:hover{background-color:initial}.SegmentedControl-item.SegmentedControl-item--selected:before{border-color:#0000!important}.SegmentedControl-item.SegmentedControl-item--selected+.SegmentedControl-item:before{border-color:#0000}.SegmentedControl-item .Button-label[data-content]:before{content:attr(data-content);display:block;font-weight:var(--base-text-weight-semibold,600);height:0;visibility:hidden}.SegmentedControl-item:not(:first-child):before{border-left:var(--borderWidth-thin,max(1px,.0625rem)) solid var(--color-border-default);content:"";inset:0 0 0 -1px;margin-bottom:var(--control-medium-paddingBlock,.375rem);margin-top:var(--control-medium-paddingBlock,.375rem);position:absolute}.SegmentedControl-item .Button{border:0;color:var(--color-btn-text);font-weight:var(--base-text-weight-normal,400);transition:none}.SegmentedControl-item .Button:focus-visible{border-radius:calc(var(--borderRadius-medium,6px) - 5px);outline-offset:calc(var(--control-xsmall-paddingInline-condensed,.25rem) - var(--borderWidth-thin,max(1px, .0625rem)))}.SegmentedControl-item .Button--small{height:calc(var(--control-small-size,1.75rem) - var(--control-xsmall-paddingInline-condensed,.25rem)*2 - var(--borderWidth-thin,max(1px, .0625rem))*2);padding:0 calc(var(--control-small-paddingInline-condensed,.5rem) - var(--control-xsmall-paddingInline-condensed,.25rem))}.SegmentedControl-item .Button--small.Button--iconOnly{width:calc(var(--control-medium-size,2rem) - var(--control-xsmall-paddingInline-condensed,.25rem)*2 - var(--borderWidth-thin,max(1px, .0625rem))*2)}.SegmentedControl-item .Button--small.Button--iconOnly:before{content:"";height:100%;left:50%;min-height:var(--control-medium-size,2rem);min-width:var(--control-medium-size,2rem);position:absolute;top:50%;transform:translateX(-50%) translateY(-50%);width:100%}.SegmentedControl-item .Button--medium{height:calc(var(--control-medium-size,2rem) - var(--control-xsmall-paddingInline-condensed,.25rem)*2 - var(--borderWidth-thin,max(1px, .0625rem))*2);padding:0 calc(var(--control-medium-paddingInline-normal,.75rem) - var(--control-xsmall-paddingInline-condensed,.25rem))}.SegmentedControl-item .Button--medium.Button--iconOnly{width:calc(var(--control-medium-size,2rem) - var(--control-xsmall-paddingInline-condensed,.25rem)*2 - var(--borderWidth-thin,max(1px, .0625rem))*2)}.SegmentedControl-item .Button--medium.Button--iconOnly:before{content:"";height:100%;left:50%;min-height:var(--control-medium-size,2rem);min-width:var(--control-medium-size,2rem);position:absolute;top:50%;transform:translateX(-50%) translateY(-50%);width:100%}.SegmentedControl-item .Button--large{height:calc(var(--control-large-size,2.5rem) - var(--control-xsmall-paddingInline-condensed,.25rem)*2 - var(--borderWidth-thin,max(1px, .0625rem))*2);padding:0 calc(var(--control-large-paddingInline-spacious,1rem) - var(--control-xsmall-paddingInline-condensed,.25rem))}.SegmentedControl-item .Button--large.Button--iconOnly{width:calc(var(--control-large-size,2.5rem) - var(--control-xsmall-paddingInline-condensed,.25rem)*2 - var(--borderWidth-thin,max(1px, .0625rem))*2)}.SegmentedControl-item .Button--large.Button--iconOnly:before{content:"";height:100%;left:50%;min-height:var(--control-large-size,2.5rem);min-width:var(--control-large-size,2.5rem);position:absolute;top:50%;transform:translateX(-50%) translateY(-50%);width:100%}.SegmentedControl-item .Button--iconOnly{padding:initial}.SegmentedControl-item .Button--invisible.Button--invisible-noVisuals .Button-label{color:var(--color-btn-text)}.SegmentedControl--fullWidth{display:flex}.SegmentedControl--fullWidth .SegmentedControl-item{flex:1;justify-content:center}.SegmentedControl--fullWidth .Button--iconOnly,.SegmentedControl--fullWidth .Button-withTooltip{width:100%}
@@ -1 +1 @@
1
- {"version":3,"sources":["segmented_control.pcss","<no source>"],"names":[],"mappings":"AAEA,kBAGE,kDAAmD,CACnD,4CAA8C,CAH9C,mBAAoB,CACpB,eAGF,CAEA,uBAGE,4DAAsE,CACtE,4CAA8C,CAF9C,mBAAoB,CAGpB,yDAA2D,CAJ3D,iBAiIF,CA1HE,uDACE,yDAA0D,CAC1D,kEAiBF,CAfE,+DACE,gDAKF,CAHE,qEACE,wBACF,CAGF,8DACE,4BACF,CAEA,qFACE,kBACF,CAIF,0DAKE,0BAA2B,CAJ3B,aAAc,CAEd,gDAAkD,CADlD,QAAS,CAET,iBAEF,CAIE,gDAME,uFAA2F,CAD3F,UAAW,CAHX,gBAAiB,CAEjB,oDAAsD,CADtD,iDAAmD,CAFnD,iBAMF,CAIF,+BACE,QAAS,CAGT,2BAA4B,CAF5B,8CAAgD,CAChD,eAOF,CAJE,6CAEE,yDAA0D,CAD1D,sGAEF,CAGF,sCACE,oIAGC,CACD,sHAaF,CAVE,uDACE,oIAQF,CAFI,8DCvFR,WAAA,YAAA,SAAA,2CAAA,0CAAA,kBAAA,QAAA,4CAAA,UDuFgG,CAK9F,uCACE,qIAGC,CACD,qHAaF,CAVE,wDACE,oIAQF,CAFI,+DC3GR,WAAA,YAAA,SAAA,2CAAA,0CAAA,kBAAA,QAAA,4CAAA,UD2GgG,CAK9F,sCACE,oIAGC,CACD,sHAaF,CAVE,uDACE,mIAQF,CAFI,8DC/HR,WAAA,YAAA,SAAA,0CAAA,yCAAA,kBAAA,QAAA,4CAAA,UD+H8F,CAK5F,yCACE,eACF,CAEA,oFACE,2BACF,CAIF,6BACE,YAYF,CAVE,oDACE,MAAO,CACP,sBACF,CAGA,gGAEE,UACF","file":"segmented_control.css","sourcesContent":["/* SegmentedControl */\n\n.SegmentedControl {\n display: inline-flex;\n list-style: none;\n background-color: var(--color-segmented-control-bg);\n border-radius: var(--borderRadius-medium, 6px);\n}\n\n.SegmentedControl-item {\n position: relative;\n display: inline-flex;\n border: var(--borderWidth-thin, max(1px, 0.0625rem)) solid transparent;\n border-radius: var(--borderRadius-medium, 6px);\n padding: var(--control-xsmall-paddingInline-condensed, 4px);\n\n /* Selected ---------------------------------------- */\n &.SegmentedControl-item--selected {\n background-color: var(--color-segmented-control-button-bg);\n border-color: var(--color-segmented-control-button-selected-border);\n\n & .Button {\n font-weight: var(--base-text-weight-semibold, 600);\n\n &:hover {\n background-color: transparent;\n }\n }\n\n &::before {\n border-color: transparent !important;\n }\n\n & + .SegmentedControl-item::before {\n border-color: transparent;\n }\n }\n\n /* renders a visibly hidden \"copy\" of the text in bold, reserving box space for when text becomes bold on selected */\n & .Button-label[data-content]::before {\n display: block;\n height: 0;\n font-weight: var(--base-text-weight-semibold, 600);\n visibility: hidden;\n content: attr(data-content);\n }\n\n /* Separator lines */\n &:not(:first-child) {\n &::before {\n position: absolute;\n inset: 0 0 0 -1px;\n margin-top: var(--control-medium-paddingBlock, 6px);\n margin-bottom: var(--control-medium-paddingBlock, 6px);\n content: '';\n border-left: var(--borderWidth-thin, max(1px, 0.0625rem)) solid var(--color-border-default);\n }\n }\n\n /* Button ----------------------------------------- */\n & .Button {\n border: 0;\n font-weight: var(--base-text-weight-normal, 400);\n transition: none;\n color: var(--color-btn-text);\n\n &:focus-visible {\n outline-offset: calc(var(--control-xsmall-paddingInline-condensed, 4px) - var(--borderWidth-thin, 1px));\n border-radius: calc(var(--borderRadius-medium, 6px) - 5px);\n }\n }\n\n & .Button--small {\n height: calc(\n var(--control-small-size, 28px) - var(--control-xsmall-paddingInline-condensed, 4px) * 2 -\n var(--borderWidth-thin, 1px) * 2\n );\n padding: 0\n calc(var(--control-small-paddingInline-condensed, 8px) - var(--control-xsmall-paddingInline-condensed, 4px));\n\n &.Button--iconOnly {\n width: calc(\n var(--control-medium-size, 32px) - var(--control-xsmall-paddingInline-condensed, 4px) * 2 -\n var(--borderWidth-thin, 1px) * 2\n );\n\n &::before {\n @mixin minTouchTarget var(--control-medium-size, 32px), var(--control-medium-size, 32px);\n }\n }\n }\n\n & .Button--medium {\n height: calc(\n var(--control-medium-size, 32px) - var(--control-xsmall-paddingInline-condensed, 4px) * 2 -\n var(--borderWidth-thin, 1px) * 2\n );\n padding: 0\n calc(var(--control-medium-paddingInline-normal, 12px) - var(--control-xsmall-paddingInline-condensed, 4px));\n\n &.Button--iconOnly {\n width: calc(\n var(--control-medium-size, 32px) - var(--control-xsmall-paddingInline-condensed, 4px) * 2 -\n var(--borderWidth-thin, 1px) * 2\n );\n\n &::before {\n @mixin minTouchTarget var(--control-medium-size, 32px), var(--control-medium-size, 32px);\n }\n }\n }\n\n & .Button--large {\n height: calc(\n var(--control-large-size, 40px) - var(--control-xsmall-paddingInline-condensed, 4px) * 2 -\n var(--borderWidth-thin, 1px) * 2\n );\n padding: 0\n calc(var(--control-large-paddingInline-spacious, 16px) - var(--control-xsmall-paddingInline-condensed, 4px));\n\n &.Button--iconOnly {\n width: calc(\n var(--control-large-size, 40px) - var(--control-xsmall-paddingInline-condensed, 4px) * 2 -\n var(--borderWidth-thin, 1px) * 2\n );\n\n &::before {\n @mixin minTouchTarget var(--control-large-size, 40px), var(--control-large-size, 40px);\n }\n }\n }\n\n & .Button--iconOnly {\n padding: initial;\n }\n\n & .Button--invisible.Button--invisible-noVisuals .Button-label {\n color: var(--color-btn-text);\n }\n}\n\n/* fullWidth */\n.SegmentedControl--fullWidth {\n display: flex;\n\n & .SegmentedControl-item {\n flex: 1;\n justify-content: center;\n }\n\n /* is .Button-withTooltip used anywhere? can't find use of it */\n & .Button--iconOnly,\n & .Button-withTooltip {\n width: 100%;\n }\n}\n",null]}
1
+ {"version":3,"sources":["segmented_control.pcss","<no source>"],"names":[],"mappings":"AAEA,kBAGE,kDAAmD,CACnD,4CAAyC,CAHzC,mBAAoB,CACpB,eAGF,CAEA,uBAGE,4DAAiD,CACjD,4CAAyC,CAFzC,mBAAoB,CAGpB,4DAAsD,CAJtD,iBAwHF,CAjHE,uDACE,yDAA0D,CAC1D,kEAiBF,CAfE,+DACE,gDAKF,CAHE,qEACE,wBACF,CAGF,8DACE,4BACF,CAEA,qFACE,kBACF,CAIF,0DAKE,0BAA2B,CAJ3B,aAAc,CAEd,gDAA6C,CAD7C,QAAS,CAET,iBAEF,CAIE,gDAME,uFAAsE,CADtE,UAAW,CAHX,gBAAiB,CAEjB,wDAAiD,CADjD,qDAA8C,CAF9C,iBAMF,CAIF,+BACE,QAAS,CAGT,2BAA4B,CAF5B,8CAA2C,CAC3C,eAOF,CAJE,6CAEE,wDAAqD,CADrD,sHAEF,CAGF,sCACE,sJAEC,CACD,yHAWF,CATE,uDACE,mJAOF,CAFI,8DCpFR,WAAA,YAAA,SAAA,2CAAA,0CAAA,kBAAA,QAAA,4CAAA,UDoFoF,CAKlF,uCACE,oJAEC,CACD,wHAWF,CATE,wDACE,mJAOF,CAFI,+DCrGR,WAAA,YAAA,SAAA,2CAAA,0CAAA,kBAAA,QAAA,4CAAA,UDqGoF,CAKlF,sCACE,qJAEC,CACD,uHAWF,CATE,uDACE,oJAOF,CAFI,8DCtHR,WAAA,YAAA,SAAA,4CAAA,2CAAA,kBAAA,QAAA,4CAAA,UDsHkF,CAKhF,yCACE,eACF,CAEA,oFACE,2BACF,CAIF,6BACE,YAYF,CAVE,oDACE,MAAO,CACP,sBACF,CAGA,gGAEE,UACF","file":"segmented_control.css","sourcesContent":["/* SegmentedControl */\n\n.SegmentedControl {\n display: inline-flex;\n list-style: none;\n background-color: var(--color-segmented-control-bg);\n border-radius: var(--borderRadius-medium);\n}\n\n.SegmentedControl-item {\n position: relative;\n display: inline-flex;\n border: var(--borderWidth-thin) solid transparent;\n border-radius: var(--borderRadius-medium);\n padding: var(--control-xsmall-paddingInline-condensed);\n\n /* Selected ---------------------------------------- */\n &.SegmentedControl-item--selected {\n background-color: var(--color-segmented-control-button-bg);\n border-color: var(--color-segmented-control-button-selected-border);\n\n & .Button {\n font-weight: var(--base-text-weight-semibold);\n\n &:hover {\n background-color: transparent;\n }\n }\n\n &::before {\n border-color: transparent !important;\n }\n\n & + .SegmentedControl-item::before {\n border-color: transparent;\n }\n }\n\n /* renders a visibly hidden \"copy\" of the text in bold, reserving box space for when text becomes bold on selected */\n & .Button-label[data-content]::before {\n display: block;\n height: 0;\n font-weight: var(--base-text-weight-semibold);\n visibility: hidden;\n content: attr(data-content);\n }\n\n /* Separator lines */\n &:not(:first-child) {\n &::before {\n position: absolute;\n inset: 0 0 0 -1px;\n margin-top: var(--control-medium-paddingBlock);\n margin-bottom: var(--control-medium-paddingBlock);\n content: '';\n border-left: var(--borderWidth-thin) solid var(--color-border-default);\n }\n }\n\n /* Button ----------------------------------------- */\n & .Button {\n border: 0;\n font-weight: var(--base-text-weight-normal);\n transition: none;\n color: var(--color-btn-text);\n\n &:focus-visible {\n outline-offset: calc(var(--control-xsmall-paddingInline-condensed) - var(--borderWidth-thin));\n border-radius: calc(var(--borderRadius-medium) - 5px);\n }\n }\n\n & .Button--small {\n height: calc(\n var(--control-small-size) - var(--control-xsmall-paddingInline-condensed) * 2 - var(--borderWidth-thin) * 2\n );\n padding: 0 calc(var(--control-small-paddingInline-condensed) - var(--control-xsmall-paddingInline-condensed));\n\n &.Button--iconOnly {\n width: calc(\n var(--control-medium-size) - var(--control-xsmall-paddingInline-condensed) * 2 - var(--borderWidth-thin) * 2\n );\n\n &::before {\n @mixin minTouchTarget var(--control-medium-size), var(--control-medium-size);\n }\n }\n }\n\n & .Button--medium {\n height: calc(\n var(--control-medium-size) - var(--control-xsmall-paddingInline-condensed) * 2 - var(--borderWidth-thin) * 2\n );\n padding: 0 calc(var(--control-medium-paddingInline-normal) - var(--control-xsmall-paddingInline-condensed));\n\n &.Button--iconOnly {\n width: calc(\n var(--control-medium-size) - var(--control-xsmall-paddingInline-condensed) * 2 - var(--borderWidth-thin) * 2\n );\n\n &::before {\n @mixin minTouchTarget var(--control-medium-size), var(--control-medium-size);\n }\n }\n }\n\n & .Button--large {\n height: calc(\n var(--control-large-size) - var(--control-xsmall-paddingInline-condensed) * 2 - var(--borderWidth-thin) * 2\n );\n padding: 0 calc(var(--control-large-paddingInline-spacious) - var(--control-xsmall-paddingInline-condensed));\n\n &.Button--iconOnly {\n width: calc(\n var(--control-large-size) - var(--control-xsmall-paddingInline-condensed) * 2 - var(--borderWidth-thin) * 2\n );\n\n &::before {\n @mixin minTouchTarget var(--control-large-size), var(--control-large-size);\n }\n }\n }\n\n & .Button--iconOnly {\n padding: initial;\n }\n\n & .Button--invisible.Button--invisible-noVisuals .Button-label {\n color: var(--color-btn-text);\n }\n}\n\n/* fullWidth */\n.SegmentedControl--fullWidth {\n display: flex;\n\n & .SegmentedControl-item {\n flex: 1;\n justify-content: center;\n }\n\n /* is .Button-withTooltip used anywhere? can't find use of it */\n & .Button--iconOnly,\n & .Button-withTooltip {\n width: 100%;\n }\n}\n",null]}