@papillonbits/components 0.6.0 → 0.9.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 (96) hide show
  1. package/build/index.scss +1 -1
  2. package/build/primer/BranchName/branch-name.scss +1 -0
  3. package/build/primer/Button/Button.scss +54 -27
  4. package/build/primer/Dropdown/Dropdown.scss +0 -2
  5. package/build/primer/Form/Checkbox/__tests__/__snapshots__/Checkbox.int.test.js.snap +54 -56
  6. package/build/primer/Form/Input/__tests__/__snapshots__/Input.int.test.js.snap +18 -24
  7. package/build/primer/Form/Radio/__tests__/__snapshots__/Radio.int.test.js.snap +18 -28
  8. package/build/primer/Form/form-control.scss +24 -5
  9. package/build/primer/Form/form-group.scss +13 -2
  10. package/build/primer/Form/form-validation.scss +8 -3
  11. package/build/primer/Form/input-group.scss +18 -0
  12. package/build/primer/Grid/DisplayTable/__tests__/__snapshots__/DisplayTable.int.test.js.snap +82 -82
  13. package/build/primer/Grid/FlexGrid/__tests__/__snapshots__/FlexGrid.int.test.js.snap +4532 -5510
  14. package/build/primer/Icon/Icon.part.js +177 -66
  15. package/build/primer/Icon/Icon.prop.js +62 -25
  16. package/build/primer/Navigation/Menu/Menu.scss +0 -6
  17. package/build/primer/Navigation/Menu/__tests__/__snapshots__/Menu.int.test.js.snap +101 -107
  18. package/build/primer/Navigation/TabNav/TabNav.scss +7 -2
  19. package/build/primer/Navigation/TabNav/__tests__/__snapshots__/TabNav.int.test.js.snap +177 -177
  20. package/build/primer/Navigation/UnderlineNav/UnderlineNav.scss +72 -23
  21. package/build/primer/Navigation/UnderlineNav/__tests__/__snapshots__/UnderlineNav.int.test.js.snap +213 -225
  22. package/build/primer/Pagination/PreviousNext/PreviousNext.scss +0 -1
  23. package/build/primer/Pagination/PreviousNext/__tests__/__snapshots__/PreviousNext.int.test.js.snap +52 -52
  24. package/build/primer/Popover/Popover.scss +1 -2
  25. package/build/primer/SVG/icon/accessibility-16.svg +1 -0
  26. package/build/primer/SVG/icon/alert-fill-12.svg +1 -0
  27. package/build/primer/SVG/icon/apps-16.svg +1 -0
  28. package/build/primer/SVG/icon/bell-fill-16.svg +1 -0
  29. package/build/primer/SVG/icon/check-circle-fill-12.svg +1 -0
  30. package/build/primer/SVG/icon/cloud-16.svg +1 -0
  31. package/build/primer/SVG/icon/cloud-24.svg +1 -0
  32. package/build/primer/SVG/icon/cloud-offline-16.svg +1 -0
  33. package/build/primer/SVG/icon/cloud-offline-24.svg +1 -0
  34. package/build/primer/SVG/icon/code-of-conduct-16.svg +1 -0
  35. package/build/primer/SVG/icon/code-of-conduct-24.svg +1 -0
  36. package/build/primer/SVG/icon/copy-16.svg +1 -0
  37. package/build/primer/SVG/icon/copy-24.svg +1 -1
  38. package/build/primer/SVG/icon/duplicate-16.svg +1 -1
  39. package/build/primer/SVG/icon/duplicate-24.svg +1 -1
  40. package/build/primer/SVG/icon/feed-discussion-16.svg +1 -0
  41. package/build/primer/SVG/icon/feed-forked-16.svg +1 -0
  42. package/build/primer/SVG/icon/feed-heart-16.svg +1 -0
  43. package/build/primer/SVG/icon/feed-merged-16.svg +1 -0
  44. package/build/primer/SVG/icon/feed-person-16.svg +1 -0
  45. package/build/primer/SVG/icon/feed-repo-16.svg +1 -0
  46. package/build/primer/SVG/icon/feed-rocket-16.svg +1 -0
  47. package/build/primer/SVG/icon/feed-star-16.svg +1 -0
  48. package/build/primer/SVG/icon/feed-tag-16.svg +1 -0
  49. package/build/primer/SVG/icon/feed-trophy-16.svg +1 -0
  50. package/build/primer/SVG/icon/file-directory-16.svg +1 -1
  51. package/build/primer/SVG/icon/file-directory-fill-16.svg +1 -0
  52. package/build/primer/SVG/icon/file-directory-open-fill-16.svg +1 -0
  53. package/build/primer/SVG/icon/id-badge-16.svg +1 -0
  54. package/build/primer/SVG/icon/issue-reopened-16.svg +1 -1
  55. package/build/primer/SVG/icon/issue-reopened-24.svg +1 -1
  56. package/build/primer/SVG/icon/iterations-16.svg +1 -0
  57. package/build/primer/SVG/icon/iterations-24.svg +1 -0
  58. package/build/primer/SVG/icon/key-asterisk-16.svg +1 -0
  59. package/build/primer/SVG/icon/log-16.svg +1 -0
  60. package/build/primer/SVG/icon/no-entry-16.svg +1 -1
  61. package/build/primer/SVG/icon/no-entry-fill-12.svg +1 -0
  62. package/build/primer/SVG/icon/{clippy-16.svg → paste-16.svg} +0 -0
  63. package/build/primer/SVG/icon/{clippy-24.svg → paste-24.svg} +0 -0
  64. package/build/primer/SVG/icon/person-fill-16.svg +1 -0
  65. package/build/primer/SVG/icon/person-fill-24.svg +1 -0
  66. package/build/primer/SVG/icon/repo-deleted-16.svg +1 -0
  67. package/build/primer/SVG/icon/repo-locked-16.svg +1 -0
  68. package/build/primer/SVG/icon/{select-single-16.svg → single-select-16.svg} +0 -0
  69. package/build/primer/SVG/icon/sort-asc-16.svg +1 -0
  70. package/build/primer/SVG/icon/sort-asc-24.svg +1 -0
  71. package/build/primer/SVG/icon/sort-desc-16.svg +1 -0
  72. package/build/primer/SVG/icon/sort-desc-24.svg +1 -0
  73. package/build/primer/SVG/icon/stack-16.svg +1 -0
  74. package/build/primer/SVG/icon/stack-24.svg +1 -0
  75. package/build/primer/SVG/icon/tab-external-16.svg +1 -0
  76. package/build/primer/SVG/icon/telescope-fill-16.svg +1 -0
  77. package/build/primer/SVG/icon/telescope-fill-24.svg +1 -0
  78. package/build/primer/SVG/icon/trophy-16.svg +1 -0
  79. package/build/primer/SVG/icon/trophy-24.svg +1 -0
  80. package/build/primer/SVG/icon/upload-24.svg +1 -1
  81. package/build/primer/SVG/icon/webhook-16.svg +1 -0
  82. package/build/primer/SVG/icon/x-circle-fill-12.svg +1 -0
  83. package/build/primer/Toast/Toast.scss +1 -2
  84. package/package.json +5 -5
  85. package/build/primer/SVG/icon/eye-slash-24.svg +0 -1
  86. package/build/primer/SVG/icon/file-symlink-24.svg +0 -1
  87. package/build/primer/SVG/icon/fire-24.svg +0 -1
  88. package/build/primer/SVG/icon/git-fork-24.svg +0 -1
  89. package/build/primer/SVG/icon/index.js +0 -1248
  90. package/build/primer/SVG/icon/insights-24.svg +0 -1
  91. package/build/primer/SVG/icon/octoface-16.svg +0 -1
  92. package/build/primer/SVG/icon/octoface-24.svg +0 -1
  93. package/build/primer/SVG/icon/settings-24.svg +0 -1
  94. package/build/primer/SVG/icon/trashcan-16.svg +0 -1
  95. package/build/primer/SVG/icon/unverifed-24.svg +0 -1
  96. package/build/primer/SVG/index.js +0 -13
@@ -1,218 +1,218 @@
1
1
  // Jest Snapshot v1, https://goo.gl/fbAQLP
2
2
 
3
3
  exports[`<TabNav /> Render must match inactive() 1`] = `
4
- <div
5
- className="tabnav tabnav-inactive"
6
- >
7
- <nav
8
- aria-label="Foo bar"
9
- className="tabnav-tabs"
4
+ <div>
5
+ <div
6
+ class="tabnav tabnav-inactive"
10
7
  >
11
- <a
12
- aria-current="page"
13
- className="tabnav-tab"
14
- href="#url"
15
- onClick={[Function]}
16
- >
17
- Foo tab
18
- </a>
19
- <a
20
- className="tabnav-tab"
21
- href="#url"
22
- onClick={[Function]}
23
- >
24
- Bar tab
25
- </a>
26
- </nav>
8
+ <nav
9
+ aria-label="Foo bar"
10
+ class="tabnav-tabs"
11
+ >
12
+ <a
13
+ aria-current="page"
14
+ class="tabnav-tab"
15
+ href="#url"
16
+ >
17
+ Foo tab
18
+ </a>
19
+ <a
20
+ class="tabnav-tab"
21
+ href="#url"
22
+ >
23
+ Bar tab
24
+ </a>
25
+ </nav>
26
+ </div>
27
27
  </div>
28
28
  `;
29
29
 
30
30
  exports[`<TabNav /> Render must match regular() 1`] = `
31
- <div
32
- className="tabnav"
33
- >
34
- <nav
35
- aria-label="Foo bar"
36
- className="tabnav-tabs"
31
+ <div>
32
+ <div
33
+ class="tabnav"
37
34
  >
38
- <a
39
- aria-current="page"
40
- className="tabnav-tab"
41
- href="#url"
42
- onClick={[Function]}
43
- >
44
- Foo tab
45
- </a>
46
- <a
47
- className="tabnav-tab"
48
- href="#url"
49
- onClick={[Function]}
50
- >
51
- Bar tab
52
- </a>
53
- </nav>
35
+ <nav
36
+ aria-label="Foo bar"
37
+ class="tabnav-tabs"
38
+ >
39
+ <a
40
+ aria-current="page"
41
+ class="tabnav-tab"
42
+ href="#url"
43
+ >
44
+ Foo tab
45
+ </a>
46
+ <a
47
+ class="tabnav-tab"
48
+ href="#url"
49
+ >
50
+ Bar tab
51
+ </a>
52
+ </nav>
53
+ </div>
54
54
  </div>
55
55
  `;
56
56
 
57
57
  exports[`<TabNav /> Render must match withButtonActions() 1`] = `
58
- <div
59
- className="tabnav"
60
- >
61
- <a
62
- className="btn btn-sm float-right"
63
- href="#url"
64
- role="button"
65
- >
66
- Button
67
- </a>
68
- <nav
69
- aria-label="Foo bar"
70
- className="tabnav-tabs"
58
+ <div>
59
+ <div
60
+ class="tabnav"
71
61
  >
72
62
  <a
73
- aria-current="page"
74
- className="tabnav-tab"
75
- href="#url"
76
- onClick={[Function]}
77
- >
78
- Foo tab
79
- </a>
80
- <a
81
- className="tabnav-tab"
82
- href="#url"
83
- onClick={[Function]}
84
- >
85
- Bar tab
86
- </a>
87
- </nav>
63
+ class="btn btn-sm float-right"
64
+ href="#url"
65
+ role="button"
66
+ >
67
+ Button
68
+ </a>
69
+ <nav
70
+ aria-label="Foo bar"
71
+ class="tabnav-tabs"
72
+ >
73
+ <a
74
+ aria-current="page"
75
+ class="tabnav-tab"
76
+ href="#url"
77
+ >
78
+ Foo tab
79
+ </a>
80
+ <a
81
+ class="tabnav-tab"
82
+ href="#url"
83
+ >
84
+ Bar tab
85
+ </a>
86
+ </nav>
87
+ </div>
88
88
  </div>
89
89
  `;
90
90
 
91
91
  exports[`<TabNav /> Render must match withLinkActions() 1`] = `
92
- <div
93
- className="tabnav"
94
- >
92
+ <div>
95
93
  <div
96
- className="float-right"
94
+ class="tabnav"
97
95
  >
98
- <a
99
- className="tabnav-extra"
100
- href="#url"
101
- >
102
- Tabnav extra link
103
- </a>
104
- <a
105
- className="tabnav-extra"
106
- href="#url"
107
- >
108
- Tabnav extra link
109
- </a>
96
+ <div
97
+ class="float-right"
98
+ >
99
+ <a
100
+ class="tabnav-extra"
101
+ href="#url"
102
+ >
103
+ Tabnav extra link
104
+ </a>
105
+ <a
106
+ class="tabnav-extra"
107
+ href="#url"
108
+ >
109
+ Tabnav extra link
110
+ </a>
111
+ </div>
112
+ <nav
113
+ aria-label="Foo bar"
114
+ class="tabnav-tabs"
115
+ >
116
+ <a
117
+ aria-current="page"
118
+ class="tabnav-tab"
119
+ href="#url"
120
+ >
121
+ Foo tab
122
+ </a>
123
+ <a
124
+ class="tabnav-tab"
125
+ href="#url"
126
+ >
127
+ Bar tab
128
+ </a>
129
+ </nav>
110
130
  </div>
111
- <nav
112
- aria-label="Foo bar"
113
- className="tabnav-tabs"
114
- >
115
- <a
116
- aria-current="page"
117
- className="tabnav-tab"
118
- href="#url"
119
- onClick={[Function]}
120
- >
121
- Foo tab
122
- </a>
123
- <a
124
- className="tabnav-tab"
125
- href="#url"
126
- onClick={[Function]}
127
- >
128
- Bar tab
129
- </a>
130
- </nav>
131
131
  </div>
132
132
  `;
133
133
 
134
134
  exports[`<TabNav /> Render must match withMixedEnabledVisibleItems() 1`] = `
135
- <div
136
- className="tabnav"
137
- >
138
- <nav
139
- aria-label="Foo bar"
140
- className="tabnav-tabs"
135
+ <div>
136
+ <div
137
+ class="tabnav"
141
138
  >
142
- <a
143
- aria-current="page"
144
- className="tabnav-tab"
145
- href="#url"
146
- onClick={[Function]}
147
- >
148
- Foo tab
149
- </a>
150
- <a
151
- className="tabnav-tab"
152
- href="#url"
153
- onClick={[Function]}
154
- >
155
- Bar tab
156
- </a>
157
- </nav>
139
+ <nav
140
+ aria-label="Foo bar"
141
+ class="tabnav-tabs"
142
+ >
143
+ <a
144
+ aria-current="page"
145
+ class="tabnav-tab"
146
+ href="#url"
147
+ >
148
+ Foo tab
149
+ </a>
150
+ <a
151
+ class="tabnav-tab"
152
+ href="#url"
153
+ >
154
+ Bar tab
155
+ </a>
156
+ </nav>
157
+ </div>
158
158
  </div>
159
159
  `;
160
160
 
161
161
  exports[`<TabNav /> Render must match withNavigation() 1`] = `
162
- <div
163
- className="tabnav"
164
- >
165
- <nav
166
- aria-label="Foo bar"
167
- className="tabnav-tabs"
162
+ <div>
163
+ <div
164
+ class="tabnav"
168
165
  >
169
- <a
170
- aria-current="page"
171
- className="tabnav-tab"
172
- href="#url"
173
- onClick={[Function]}
174
- >
175
- Foo tab
176
- </a>
177
- <a
178
- className="tabnav-tab"
179
- href="#url"
180
- onClick={[Function]}
181
- >
182
- Bar tab
183
- </a>
184
- </nav>
166
+ <nav
167
+ aria-label="Foo bar"
168
+ class="tabnav-tabs"
169
+ >
170
+ <a
171
+ aria-current="page"
172
+ class="tabnav-tab"
173
+ href="#url"
174
+ >
175
+ Foo tab
176
+ </a>
177
+ <a
178
+ class="tabnav-tab"
179
+ href="#url"
180
+ >
181
+ Bar tab
182
+ </a>
183
+ </nav>
184
+ </div>
185
185
  </div>
186
186
  `;
187
187
 
188
188
  exports[`<TabNav /> Render must match withTextActions() 1`] = `
189
- <div
190
- className="tabnav"
191
- >
189
+ <div>
192
190
  <div
193
- className="tabnav-extra float-right"
191
+ class="tabnav"
194
192
  >
195
- Tabnav widget text here.
193
+ <div
194
+ class="tabnav-extra float-right"
195
+ >
196
+ Tabnav widget text here.
197
+ </div>
198
+ <nav
199
+ aria-label="Foo bar"
200
+ class="tabnav-tabs"
201
+ >
202
+ <a
203
+ aria-current="page"
204
+ class="tabnav-tab"
205
+ href="#url"
206
+ >
207
+ Foo tab
208
+ </a>
209
+ <a
210
+ class="tabnav-tab"
211
+ href="#url"
212
+ >
213
+ Bar tab
214
+ </a>
215
+ </nav>
196
216
  </div>
197
- <nav
198
- aria-label="Foo bar"
199
- className="tabnav-tabs"
200
- >
201
- <a
202
- aria-current="page"
203
- className="tabnav-tab"
204
- href="#url"
205
- onClick={[Function]}
206
- >
207
- Foo tab
208
- </a>
209
- <a
210
- className="tabnav-tab"
211
- href="#url"
212
- onClick={[Function]}
213
- >
214
- Bar tab
215
- </a>
216
- </nav>
217
217
  </div>
218
218
  `;
@@ -2,54 +2,107 @@
2
2
  @import '../../../index.scss';
3
3
 
4
4
  // stylelint-disable no-descending-specificity
5
+ $nav-height: $spacer-3 * 3 !default; // 48px
5
6
 
6
7
  .UnderlineNav {
7
8
  display: flex;
9
+ min-height: $nav-height;
8
10
  overflow-x: auto;
9
11
  overflow-y: hidden;
10
12
  // stylelint-disable-next-line primer/box-shadow
11
13
  box-shadow: inset 0 -1px 0 var(--color-border-muted);
14
+ -webkit-overflow-scrolling: auto;
12
15
  justify-content: space-between;
16
+
17
+ .Counter {
18
+ margin-left: $spacer-2;
19
+ color: var(--color-fg-default);
20
+ background-color: var(--color-neutral-muted);
21
+
22
+ &--primary {
23
+ color: var(--color-fg-on-emphasis);
24
+ background-color: var(--color-neutral-emphasis);
25
+ }
26
+ }
13
27
  }
14
28
 
15
29
  .UnderlineNav-body {
16
30
  display: flex;
31
+ align-items: center;
32
+ gap: $spacer-2;
33
+ list-style: none;
17
34
  }
18
35
 
19
36
  .UnderlineNav-item {
20
- padding: $spacer-2 $spacer-3;
37
+ position: relative;
38
+ display: flex;
39
+ padding: 0 $spacer-2;
21
40
  font-size: $body-font-size;
22
41
  // stylelint-disable-next-line primer/typography
23
42
  line-height: 30px;
24
43
  color: var(--color-fg-default);
25
44
  text-align: center;
26
45
  white-space: nowrap;
46
+ cursor: pointer;
27
47
  background-color: transparent;
28
48
  border: 0;
29
- // stylelint-disable-next-line primer/borders
30
- border-bottom: 2px $border-style transparent;
49
+ border-radius: $border-radius;
50
+ align-items: center;
31
51
 
32
52
  &:hover,
33
- &:focus {
53
+ &:focus,
54
+ &:focus-visible {
34
55
  color: var(--color-fg-default);
35
56
  text-decoration: none;
36
57
  border-bottom-color: var(--color-neutral-muted);
37
- outline: 1px dotted transparent; // Support Firefox custom colors
38
- outline-offset: -1px;
58
+ outline-offset: -2px;
39
59
  transition: border-bottom-color 0.12s ease-out;
40
60
  }
41
61
 
62
+ // renders a visibly hidden "copy" of the label in bold, reserving box space for when label becomes bold on selected
63
+ [data-content]::before {
64
+ display: block;
65
+ height: 0;
66
+ font-weight: $font-weight-bold;
67
+ visibility: hidden;
68
+ content: attr(data-content);
69
+ }
70
+
71
+ // increase touch target area
72
+ &::before {
73
+ @include minTouchTarget($min-height: $nav-height);
74
+ }
75
+
76
+ // hover state was "sticking" on mobile after click
77
+ @media (pointer: fine) {
78
+ &:hover {
79
+ color: var(--color-fg-default);
80
+ text-decoration: none;
81
+ background: var(--color-action-list-item-default-hover-bg);
82
+ transition: background 0.12s ease-out;
83
+ }
84
+ }
85
+
42
86
  &.selected,
43
87
  &[role='tab'][aria-selected='true'],
44
88
  &[aria-current]:not([aria-current='false']) {
45
89
  font-weight: $font-weight-bold;
46
90
  color: var(--color-fg-default);
47
91
  border-bottom-color: var(--color-primer-border-active);
48
- outline: 1px dotted transparent; // Support Firefox custom colors
49
- outline-offset: -1px;
92
+ outline-offset: -8px;
50
93
 
51
- .UnderlineNav-octicon {
52
- color: var(--color-fg-muted);
94
+ // current/selected underline
95
+ &::after {
96
+ position: absolute;
97
+ right: 50%;
98
+ // 48px total height / 2 (24px) + 1px
99
+ bottom: calc(50% - 25px);
100
+ width: 100%;
101
+ height: 2px;
102
+ content: '';
103
+ background: var(--color-primer-border-active);
104
+ border-radius: $border-radius;
105
+ transform: translate(50%, -50%);
53
106
  }
54
107
  }
55
108
  }
@@ -68,22 +121,18 @@
68
121
 
69
122
  .UnderlineNav--full {
70
123
  display: block;
71
- }
72
124
 
73
- .UnderlineNav-octicon {
74
- margin-right: $spacer-1;
75
- color: var(--color-fg-subtle);
125
+ // required for underline to align with additional wrapper element
126
+ .UnderlineNav-body {
127
+ min-height: $nav-height;
128
+ }
76
129
  }
77
130
 
78
- .UnderlineNav .Counter {
79
- margin-left: $spacer-1;
80
- color: var(--color-fg-default);
81
- background-color: var(--color-neutral-muted);
82
-
83
- &--primary {
84
- color: var(--color-fg-on-emphasis);
85
- background-color: var(--color-neutral-emphasis);
86
- }
131
+ .UnderlineNav-octicon {
132
+ display: inline !important;
133
+ margin-right: $spacer-2;
134
+ color: var(--color-fg-muted);
135
+ fill: var(--color-fg-muted);
87
136
  }
88
137
 
89
138
  .UnderlineNav-container {