@primer/view-components 0.26.0-rc.88d1e470 → 0.26.0-rc.b29924c9

Sign up to get free protection for your applications and to get access to all the features.
@@ -15,7 +15,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
15
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
16
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
17
17
  };
18
- var _ActionMenuElement_instances, _ActionMenuElement_abortController, _ActionMenuElement_originalLabel, _ActionMenuElement_inputName, _ActionMenuElement_invokerBeingClicked, _ActionMenuElement_softDisableItems, _ActionMenuElement_potentiallyDisallowActivation, _ActionMenuElement_isKeyboardActivation, _ActionMenuElement_isKeyboardActivationViaEnter, _ActionMenuElement_isKeyboardActivationViaSpace, _ActionMenuElement_isMouseActivation, _ActionMenuElement_isActivation, _ActionMenuElement_handleInvokerActivated, _ActionMenuElement_handleDialogItemActivated, _ActionMenuElement_handleItemActivated, _ActionMenuElement_activateItem, _ActionMenuElement_handleIncludeFragmentReplaced, _ActionMenuElement_handleFocusOut, _ActionMenuElement_show, _ActionMenuElement_hide, _ActionMenuElement_isOpen, _ActionMenuElement_setDynamicLabel, _ActionMenuElement_updateInput, _ActionMenuElement_firstItem_get;
18
+ var _ActionMenuElement_instances, _ActionMenuElement_abortController, _ActionMenuElement_originalLabel, _ActionMenuElement_inputName, _ActionMenuElement_invokerBeingClicked, _ActionMenuElement_softDisableItems, _ActionMenuElement_potentiallyDisallowActivation, _ActionMenuElement_isAnchorActivationViaSpace, _ActionMenuElement_isActivation, _ActionMenuElement_handleInvokerActivated, _ActionMenuElement_handleDialogItemActivated, _ActionMenuElement_handleItemActivated, _ActionMenuElement_handleIncludeFragmentReplaced, _ActionMenuElement_handleFocusOut, _ActionMenuElement_show, _ActionMenuElement_hide, _ActionMenuElement_isOpen, _ActionMenuElement_setDynamicLabel, _ActionMenuElement_updateInput, _ActionMenuElement_firstItem_get;
19
19
  import { controller, target } from '@github/catalyst';
20
20
  import '@oddbird/popover-polyfill';
21
21
  const validSelectors = ['[role="menuitem"]', '[role="menuitemcheckbox"]', '[role="menuitemradio"]'];
@@ -152,18 +152,13 @@ let ActionMenuElement = class ActionMenuElement extends HTMLElement {
152
152
  return;
153
153
  }
154
154
  }
155
- __classPrivateFieldGet(this, _ActionMenuElement_instances, "m", _ActionMenuElement_activateItem).call(this, event, item);
156
- __classPrivateFieldGet(this, _ActionMenuElement_instances, "m", _ActionMenuElement_handleItemActivated).call(this, item);
157
- // Pressing the space key on a button or link will cause the page to scroll unless preventDefault()
158
- // is called. While calling preventDefault() appears to have no effect on link navigation, it skips
159
- // form submission. The code below therefore only calls preventDefault() if the button has been
160
- // activated by the space key, and manually submits the form if the button is a submit button.
161
- if (__classPrivateFieldGet(this, _ActionMenuElement_instances, "m", _ActionMenuElement_isKeyboardActivationViaSpace).call(this, event)) {
155
+ // Pressing the space key on a link will cause the page to scroll unless preventDefault() is called.
156
+ // We then click it manually to navigate.
157
+ if (__classPrivateFieldGet(this, _ActionMenuElement_instances, "m", _ActionMenuElement_isAnchorActivationViaSpace).call(this, event)) {
162
158
  event.preventDefault();
163
- if (item.getAttribute('type') === 'submit') {
164
- item.closest('form')?.submit();
165
- }
159
+ item.click();
166
160
  }
161
+ __classPrivateFieldGet(this, _ActionMenuElement_instances, "m", _ActionMenuElement_handleItemActivated).call(this, item);
167
162
  return;
168
163
  }
169
164
  if (event.type === 'include-fragment-replaced') {
@@ -269,26 +264,18 @@ _ActionMenuElement_potentiallyDisallowActivation = function _ActionMenuElement_p
269
264
  }
270
265
  return false;
271
266
  };
272
- _ActionMenuElement_isKeyboardActivation = function _ActionMenuElement_isKeyboardActivation(event) {
273
- return __classPrivateFieldGet(this, _ActionMenuElement_instances, "m", _ActionMenuElement_isKeyboardActivationViaEnter).call(this, event) || __classPrivateFieldGet(this, _ActionMenuElement_instances, "m", _ActionMenuElement_isKeyboardActivationViaSpace).call(this, event);
274
- };
275
- _ActionMenuElement_isKeyboardActivationViaEnter = function _ActionMenuElement_isKeyboardActivationViaEnter(event) {
276
- return (event instanceof KeyboardEvent &&
277
- event.type === 'keydown' &&
278
- !(event.ctrlKey || event.altKey || event.metaKey || event.shiftKey) &&
279
- event.key === 'Enter');
280
- };
281
- _ActionMenuElement_isKeyboardActivationViaSpace = function _ActionMenuElement_isKeyboardActivationViaSpace(event) {
282
- return (event instanceof KeyboardEvent &&
267
+ _ActionMenuElement_isAnchorActivationViaSpace = function _ActionMenuElement_isAnchorActivationViaSpace(event) {
268
+ return (event.target instanceof HTMLAnchorElement &&
269
+ event instanceof KeyboardEvent &&
283
270
  event.type === 'keydown' &&
284
271
  !(event.ctrlKey || event.altKey || event.metaKey || event.shiftKey) &&
285
272
  event.key === ' ');
286
273
  };
287
- _ActionMenuElement_isMouseActivation = function _ActionMenuElement_isMouseActivation(event) {
288
- return event instanceof MouseEvent && event.type === 'click';
289
- };
290
274
  _ActionMenuElement_isActivation = function _ActionMenuElement_isActivation(event) {
291
- return __classPrivateFieldGet(this, _ActionMenuElement_instances, "m", _ActionMenuElement_isMouseActivation).call(this, event) || __classPrivateFieldGet(this, _ActionMenuElement_instances, "m", _ActionMenuElement_isKeyboardActivation).call(this, event);
275
+ // Some browsers fire MouseEvents (Firefox) and others fire PointerEvents (Chrome). Activating an item via
276
+ // enter or space counterintuitively fires one of these rather than a KeyboardEvent. Since PointerEvent
277
+ // inherits from MouseEvent, it is enough to check for MouseEvent here.
278
+ return (event instanceof MouseEvent && event.type === 'click') || __classPrivateFieldGet(this, _ActionMenuElement_instances, "m", _ActionMenuElement_isAnchorActivationViaSpace).call(this, event);
292
279
  };
293
280
  _ActionMenuElement_handleInvokerActivated = function _ActionMenuElement_handleInvokerActivated(event) {
294
281
  event.preventDefault();
@@ -363,23 +350,6 @@ _ActionMenuElement_handleItemActivated = function _ActionMenuElement_handleItemA
363
350
  detail: { item: item.parentElement, checked: this.isItemChecked(item.parentElement) },
364
351
  }));
365
352
  };
366
- _ActionMenuElement_activateItem = function _ActionMenuElement_activateItem(event, item) {
367
- const eventWillActivateByDefault = (event instanceof MouseEvent && event.type === 'click') ||
368
- (event instanceof KeyboardEvent &&
369
- event.type === 'keydown' &&
370
- !(event.ctrlKey || event.altKey || event.metaKey || event.shiftKey) &&
371
- event.key === 'Enter');
372
- // if the event will result in activating the current item by default, i.e. is a
373
- // mouse click or keyboard enter, bail out
374
- if (eventWillActivateByDefault)
375
- return;
376
- // otherwise, event will not result in activation by default, so we stop it and
377
- // simulate a click
378
- /* eslint-disable-next-line no-restricted-syntax */
379
- event.stopPropagation();
380
- const elem = item;
381
- elem.click();
382
- };
383
353
  _ActionMenuElement_handleIncludeFragmentReplaced = function _ActionMenuElement_handleIncludeFragmentReplaced() {
384
354
  if (__classPrivateFieldGet(this, _ActionMenuElement_instances, "a", _ActionMenuElement_firstItem_get))
385
355
  __classPrivateFieldGet(this, _ActionMenuElement_instances, "a", _ActionMenuElement_firstItem_get).focus();
@@ -1 +1 @@
1
- .tabnav{border-bottom:var(--borderWidth-thin) solid var(--borderColor-default);margin-bottom:var(--stack-gap-normal);margin-top:0}.tabnav-tabs{display:flex;margin-bottom:calc(var(--borderWidth-thin)*-1);overflow:auto}.tabnav::part(tablist-wrapper){border-bottom:var(--borderWidth-thin) solid var(--borderColor-default);margin-bottom:var(--stack-gap-normal)}.tabnav-tab{background-color:initial;border:var(--borderWidth-thin) solid #0000;border-bottom:0;color:var(--fgColor-muted);display:inline-block;flex-shrink:0;font-size:var(--text-body-size-medium);line-height:23px;padding:var(--base-size-8) var(--control-medium-paddingInline-spacious);-webkit-text-decoration:none;text-decoration:none;transition:color .2s cubic-bezier(.3,0,.5,1)}.tabnav-tab.selected,.tabnav-tab[aria-current]:not([aria-current=false]),.tabnav-tab[aria-selected=true]{background-color:var(--bgColor-default);border-color:var(--borderColor-default);border-radius:var(--borderRadius-medium) var(--borderRadius-medium) 0 0;color:var(--fgColor-default)}.tabnav-tab.selected .octicon,.tabnav-tab[aria-current]:not([aria-current=false]) .octicon,.tabnav-tab[aria-selected=true] .octicon{color:inherit}.tabnav-tab:hover{color:var(--fgColor-default);-webkit-text-decoration:none;text-decoration:none;transition-duration:.1s}.tabnav-tab:focus,.tabnav-tab:focus-visible{border-radius:var(--borderRadius-medium) var(--borderRadius-medium) 0 0!important;outline-offset:-6px}.tabnav-tab .octicon,.tabnav-tab:active{color:var(--fgColor-muted)}.tabnav-tab .octicon{margin-right:var(--control-small-gap)}.tabnav-tab .Counter{color:inherit;margin-left:var(--control-small-gap)}tab-container .tabnav-tab{margin-bottom:-1px}.tabnav-extra{color:var(--fgColor-muted);display:inline-block;font-size:var(--text-body-size-small);margin-left:10px;padding-top:10px}.tabnav-extra>.octicon{margin-right:2px}a.tabnav-extra:hover{color:var(--fgColor-accent);-webkit-text-decoration:none;text-decoration:none}.tabnav-btn{margin-left:var(--controlStack-medium-gap-condensed)}
1
+ .tabnav{border-bottom:var(--borderWidth-thin) solid var(--borderColor-default);margin-bottom:var(--stack-gap-normal);margin-top:0}.tabnav-tabs{display:flex;margin-bottom:calc(var(--borderWidth-thin)*-1);overflow:hidden}.tabnav::part(tablist-wrapper){border-bottom:var(--borderWidth-thin) solid var(--borderColor-default);margin-bottom:var(--stack-gap-normal)}.tabnav-tab{background-color:initial;border:var(--borderWidth-thin) solid #0000;border-bottom:0;color:var(--fgColor-muted);display:inline-block;flex-shrink:0;font-size:var(--text-body-size-medium);line-height:23px;padding:var(--base-size-8) var(--control-medium-paddingInline-spacious);-webkit-text-decoration:none;text-decoration:none;transition:color .2s cubic-bezier(.3,0,.5,1)}.tabnav-tab.selected,.tabnav-tab[aria-current]:not([aria-current=false]),.tabnav-tab[aria-selected=true]{background-color:var(--bgColor-default);border-color:var(--borderColor-default);border-radius:var(--borderRadius-medium) var(--borderRadius-medium) 0 0;color:var(--fgColor-default)}.tabnav-tab.selected .octicon,.tabnav-tab[aria-current]:not([aria-current=false]) .octicon,.tabnav-tab[aria-selected=true] .octicon{color:inherit}.tabnav-tab:hover{color:var(--fgColor-default);-webkit-text-decoration:none;text-decoration:none;transition-duration:.1s}.tabnav-tab:focus,.tabnav-tab:focus-visible{border-radius:var(--borderRadius-medium) var(--borderRadius-medium) 0 0!important;outline-offset:-6px}.tabnav-tab .octicon,.tabnav-tab:active{color:var(--fgColor-muted)}.tabnav-tab .octicon{margin-right:var(--control-small-gap)}.tabnav-tab .Counter{color:inherit;margin-left:var(--control-small-gap)}tab-container .tabnav-tab{margin-bottom:-1px}.tabnav-extra{color:var(--fgColor-muted);display:inline-block;font-size:var(--text-body-size-small);margin-left:10px;padding-top:10px}.tabnav-extra>.octicon{margin-right:2px}a.tabnav-extra:hover{color:var(--fgColor-accent);-webkit-text-decoration:none;text-decoration:none}.tabnav-btn{margin-left:var(--controlStack-medium-gap-condensed)}
@@ -1 +1,28 @@
1
1
  import '@github/auto-check-element';
2
+ import type { AutoCheckErrorEvent, AutoCheckSuccessEvent } from '@github/auto-check-element';
3
+ declare global {
4
+ interface HTMLElementEventMap {
5
+ 'auto-check-success': AutoCheckSuccessEvent;
6
+ 'auto-check-error': AutoCheckErrorEvent;
7
+ }
8
+ }
9
+ export declare class PrimerTextFieldElement extends HTMLElement {
10
+ #private;
11
+ inputElement: HTMLInputElement;
12
+ validationElement: HTMLElement;
13
+ validationMessageElement: HTMLElement;
14
+ validationSuccessIcon: HTMLElement;
15
+ validationErrorIcon: HTMLElement;
16
+ leadingVisual: HTMLElement;
17
+ leadingSpinner: HTMLElement;
18
+ connectedCallback(): void;
19
+ disconnectedCallback(): void;
20
+ clearContents(): void;
21
+ clearError(): void;
22
+ setValidationMessage(message: string): void;
23
+ toggleValidationStyling(isError: boolean): void;
24
+ setSuccess(message: string): void;
25
+ setError(message: string): void;
26
+ showLeadingSpinner(): void;
27
+ hideLeadingSpinner(): void;
28
+ }
@@ -1,3 +1,4 @@
1
+ /* eslint-disable custom-elements/expose-class-on-global */
1
2
  var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
3
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
4
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
@@ -18,10 +19,7 @@ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (
18
19
  var _PrimerTextFieldElement_abortController;
19
20
  import '@github/auto-check-element';
20
21
  import { controller, target } from '@github/catalyst';
21
- // eslint-disable-next-line custom-elements/expose-class-on-global
22
- let PrimerTextFieldElement =
23
- // eslint-disable-next-line no-unused-vars, @typescript-eslint/no-unused-vars
24
- class PrimerTextFieldElement extends HTMLElement {
22
+ let PrimerTextFieldElement = class PrimerTextFieldElement extends HTMLElement {
25
23
  constructor() {
26
24
  super(...arguments);
27
25
  _PrimerTextFieldElement_abortController.set(this, void 0);
@@ -83,6 +81,14 @@ class PrimerTextFieldElement extends HTMLElement {
83
81
  this.setValidationMessage(message);
84
82
  this.validationElement.hidden = false;
85
83
  }
84
+ showLeadingSpinner() {
85
+ this.leadingSpinner?.removeAttribute('hidden');
86
+ this.leadingVisual?.setAttribute('hidden', '');
87
+ }
88
+ hideLeadingSpinner() {
89
+ this.leadingSpinner?.setAttribute('hidden', '');
90
+ this.leadingVisual?.removeAttribute('hidden');
91
+ }
86
92
  };
87
93
  _PrimerTextFieldElement_abortController = new WeakMap();
88
94
  __decorate([
@@ -100,7 +106,13 @@ __decorate([
100
106
  __decorate([
101
107
  target
102
108
  ], PrimerTextFieldElement.prototype, "validationErrorIcon", void 0);
109
+ __decorate([
110
+ target
111
+ ], PrimerTextFieldElement.prototype, "leadingVisual", void 0);
112
+ __decorate([
113
+ target
114
+ ], PrimerTextFieldElement.prototype, "leadingSpinner", void 0);
103
115
  PrimerTextFieldElement = __decorate([
104
116
  controller
105
- // eslint-disable-next-line no-unused-vars, @typescript-eslint/no-unused-vars
106
117
  ], PrimerTextFieldElement);
118
+ export { PrimerTextFieldElement };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@primer/view-components",
3
- "version": "0.26.0-rc.88d1e470",
3
+ "version": "0.26.0-rc.b29924c9",
4
4
  "description": "ViewComponents for the Primer Design System",
5
5
  "main": "app/assets/javascripts/primer_view_components.js",
6
6
  "module": "app/components/primer/primer.js",
@@ -67,14 +67,14 @@
67
67
  "@primer/stylelint-config": "^12.7.2",
68
68
  "@rollup/plugin-node-resolve": "^15.2.3",
69
69
  "@rollup/plugin-typescript": "^8.3.3",
70
- "@typescript-eslint/eslint-plugin": "^7.0.0",
71
- "@typescript-eslint/parser": "^6.0.0",
70
+ "@typescript-eslint/eslint-plugin": "^7.0.1",
71
+ "@typescript-eslint/parser": "^7.0.1",
72
72
  "axe-core": "^4.7.1",
73
73
  "chokidar-cli": "^3.0.0",
74
74
  "cssnano": "^7.0.1",
75
75
  "eslint": "^8.23.1",
76
76
  "eslint-plugin-custom-elements": "^0.0.8",
77
- "eslint-plugin-github": "^4.9.2",
77
+ "eslint-plugin-github": "^5.0.1",
78
78
  "eslint-plugin-prettier": "^5.0.0",
79
79
  "markdownlint-cli2": "^0.13.0",
80
80
  "mocha": "^10.0.0",
@@ -84,7 +84,7 @@
84
84
  "postcss-import": "^16.0.0",
85
85
  "postcss-mixins": "^10.0.0",
86
86
  "postcss-preset-env": "^9.3.0",
87
- "prettier": "3.3.0",
87
+ "prettier": "^3.3.2",
88
88
  "rollup": "^2.79.1",
89
89
  "rollup-plugin-terser": "^7.0.2",
90
90
  "stylelint": "^16.1.0",
@@ -2752,6 +2752,12 @@
2752
2752
  "default": "N/A",
2753
2753
  "description": "Renders a leading visual icon before the text field's cursor. The hash will be passed to Primer's [Octicon](/components/beta/octicon) component."
2754
2754
  },
2755
+ {
2756
+ "name": "leading_spinner",
2757
+ "type": "Boolean",
2758
+ "default": "N/A",
2759
+ "description": "If `true`, a leading spinner will be included in the markup. The spinner can be shown via the `showLeadingSpinner()` JavaScript method, and hidden via `hideLeadingSpinner()`. If this argument is `true`, a leading visual must also be provided."
2760
+ },
2755
2761
  {
2756
2762
  "name": "show_clear_button",
2757
2763
  "type": "Boolean",
@@ -4276,12 +4282,6 @@
4276
4282
  "default": "`box-sizing: content-box; color: var(--color-icon-primary);`",
4277
4283
  "description": "Custom element styles."
4278
4284
  },
4279
- {
4280
- "name": "sr_text",
4281
- "type": "String",
4282
- "default": "Loading",
4283
- "description": "Screen reader only text, added unless aria-label is set."
4284
- },
4285
4285
  {
4286
4286
  "name": "system_arguments",
4287
4287
  "type": "Hash",
@@ -1220,6 +1220,7 @@
1220
1220
  },
1221
1221
  "Primer::Beta::Spinner": {
1222
1222
  "DEFAULT_SIZE": "medium",
1223
+ "DEFAULT_SR_TEXT": "Loading",
1223
1224
  "DEFAULT_STYLE": "box-sizing: content-box; color: var(--color-icon-primary);",
1224
1225
  "SIZE_MAPPINGS": {
1225
1226
  "small": 16,
@@ -8143,6 +8143,12 @@
8143
8143
  "default": "N/A",
8144
8144
  "description": "Renders a leading visual icon before the text field's cursor. The hash will be passed to Primer's {{#link_to_component}}Primer::Beta::Octicon{{/link_to_component}} component."
8145
8145
  },
8146
+ {
8147
+ "name": "leading_spinner",
8148
+ "type": "Boolean",
8149
+ "default": "N/A",
8150
+ "description": "If `true`, a leading spinner will be included in the markup. The spinner can be shown via the `showLeadingSpinner()` JavaScript method, and hidden via `hideLeadingSpinner()`. If this argument is `true`, a leading visual must also be provided."
8151
+ },
8146
8152
  {
8147
8153
  "name": "show_clear_button",
8148
8154
  "type": "Boolean",