@openproject/primer-view-components 0.82.1 → 0.83.0-rc.0d7454d16

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 (35) hide show
  1. package/app/assets/javascripts/primer_view_components.js +1 -1
  2. package/app/assets/javascripts/primer_view_components.js.map +1 -1
  3. package/app/assets/styles/primer_view_components.css +1 -1
  4. package/app/assets/styles/primer_view_components.css.map +1 -1
  5. package/app/components/primer/alpha/action_bar_element.js +68 -77
  6. package/app/components/primer/alpha/action_list.js +1 -1
  7. package/app/components/primer/alpha/action_menu/action_menu_element.js +1 -1
  8. package/app/components/primer/alpha/dialog.css +1 -1
  9. package/app/components/primer/alpha/dialog.css.json +2 -1
  10. package/app/components/primer/alpha/segmented_control.js +1 -1
  11. package/app/components/primer/alpha/select_panel_element.js +3 -1
  12. package/app/components/primer/alpha/toggle_switch.js +1 -1
  13. package/app/components/primer/alpha/tool_tip.js +1 -1
  14. package/app/components/primer/alpha/tree_view/tree_view.js +1 -1
  15. package/app/components/primer/alpha/tree_view/tree_view_icon_pair_element.js +1 -1
  16. package/app/components/primer/alpha/tree_view/tree_view_include_fragment_element.js +1 -1
  17. package/app/components/primer/alpha/tree_view/tree_view_sub_tree_node_element.js +25 -2
  18. package/app/components/primer/alpha/x_banner.js +1 -1
  19. package/app/components/primer/beta/blankslate.css +1 -1
  20. package/app/components/primer/beta/blankslate.css.json +1 -0
  21. package/app/components/primer/beta/details_toggle_element.js +1 -1
  22. package/app/components/primer/beta/nav_list.js +1 -1
  23. package/app/components/primer/beta/nav_list_group_element.js +1 -1
  24. package/app/components/primer/dialog_helper.js +24 -9
  25. package/app/components/primer/scrollable_region.js +1 -1
  26. package/app/lib/primer/forms/primer_multi_input.js +1 -1
  27. package/app/lib/primer/forms/primer_text_area.js +1 -1
  28. package/app/lib/primer/forms/primer_text_field.js +1 -1
  29. package/app/lib/primer/forms/toggle_switch_input.js +1 -1
  30. package/package.json +5 -4
  31. package/static/arguments.json +38 -1
  32. package/static/classes.json +3 -0
  33. package/static/constants.json +17 -0
  34. package/static/info_arch.json +77 -58
  35. package/static/previews.json +13 -0
@@ -15,7 +15,7 @@ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (
15
15
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
16
16
  return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
17
17
  };
18
- var _ActionBarElement_instances, _ActionBarElement_focusZoneAbortController, _ActionBarElement_firstItem_get, _ActionBarElement_showItem, _ActionBarElement_hideItem, _ActionBarElement_menuItems_get, _ActionBarElement_eachItem;
18
+ var _ActionBarElement_instances, _ActionBarElement_focusZoneAbortController, _ActionBarElement_pendingUpdate, _ActionBarElement_performUpdate, _ActionBarElement_firstItem_get, _ActionBarElement_showItem, _ActionBarElement_hideItem, _ActionBarElement_menuItems_get;
19
19
  import { controller, targets, target } from '@github/catalyst';
20
20
  import { focusZone, FocusKeys } from '@primer/behaviors';
21
21
  const instersectionObserver = new IntersectionObserver(entries => {
@@ -35,27 +35,21 @@ const resizeObserver = new ResizeObserver(entries => {
35
35
  }
36
36
  });
37
37
  // These are definitely used, but eslint is dumb apparently
38
- var ItemType;
39
- (function (ItemType) {
40
- ItemType[ItemType["Item"] = 0] = "Item";
41
- ItemType[ItemType["Divider"] = 1] = "Divider";
42
- })(ItemType || (ItemType = {}));
43
38
  let ActionBarElement = class ActionBarElement extends HTMLElement {
44
39
  constructor() {
45
40
  super(...arguments);
46
41
  _ActionBarElement_instances.add(this);
47
42
  _ActionBarElement_focusZoneAbortController.set(this, null);
43
+ _ActionBarElement_pendingUpdate.set(this, false);
48
44
  }
49
45
  connectedCallback() {
50
46
  resizeObserver.observe(this);
51
47
  instersectionObserver.observe(this);
52
- requestAnimationFrame(() => {
53
- // This overflow visible is needed for browsers that don't support PopoverElement
54
- // to ensure the menu and tooltips are visible when the action bar is in a collapsed state
55
- // once popover is fully supported we can remove this.style.overflow = 'visible'
56
- this.style.overflow = 'visible';
57
- this.update();
58
- });
48
+ // This overflow visible is needed for browsers that don't support PopoverElement
49
+ // to ensure the menu and tooltips are visible when the action bar is in a collapsed state
50
+ // once popover is fully supported we can remove this.style.overflow = 'visible'
51
+ this.style.overflow = 'visible';
52
+ this.update();
59
53
  }
60
54
  disconnectedCallback() {
61
55
  resizeObserver.unobserve(this);
@@ -69,75 +63,81 @@ let ActionBarElement = class ActionBarElement extends HTMLElement {
69
63
  }
70
64
  }
71
65
  update() {
72
- const firstItem = __classPrivateFieldGet(this, _ActionBarElement_instances, "a", _ActionBarElement_firstItem_get);
73
- if (!firstItem)
66
+ if (__classPrivateFieldGet(this, _ActionBarElement_pendingUpdate, "f"))
74
67
  return;
75
- const firstItemTop = firstItem.getBoundingClientRect().top;
76
- let previousItemType = null;
77
- __classPrivateFieldGet(this, _ActionBarElement_instances, "m", _ActionBarElement_eachItem).call(this, (item, index, type) => {
78
- const itemTop = item.getBoundingClientRect().top;
79
- if (type === ItemType.Item) {
80
- if (itemTop > firstItemTop) {
81
- __classPrivateFieldGet(this, _ActionBarElement_instances, "m", _ActionBarElement_hideItem).call(this, index);
82
- if (this.moreMenu.hidden) {
83
- this.moreMenu.hidden = false;
84
- }
85
- if (previousItemType === ItemType.Divider) {
86
- __classPrivateFieldGet(this, _ActionBarElement_instances, "m", _ActionBarElement_hideItem).call(this, index - 1);
87
- }
88
- }
89
- else {
90
- __classPrivateFieldGet(this, _ActionBarElement_instances, "m", _ActionBarElement_showItem).call(this, index);
91
- if (index === this.items.length - 1) {
92
- this.moreMenu.hidden = true;
93
- }
94
- if (previousItemType === ItemType.Divider) {
95
- __classPrivateFieldGet(this, _ActionBarElement_instances, "m", _ActionBarElement_showItem).call(this, index - 1);
96
- }
97
- }
98
- }
99
- previousItemType = type;
100
- return true;
68
+ __classPrivateFieldSet(this, _ActionBarElement_pendingUpdate, true, "f");
69
+ requestAnimationFrame(() => {
70
+ __classPrivateFieldSet(this, _ActionBarElement_pendingUpdate, false, "f");
71
+ __classPrivateFieldGet(this, _ActionBarElement_instances, "m", _ActionBarElement_performUpdate).call(this);
101
72
  });
102
- if (__classPrivateFieldGet(this, _ActionBarElement_focusZoneAbortController, "f")) {
103
- __classPrivateFieldGet(this, _ActionBarElement_focusZoneAbortController, "f").abort();
104
- }
105
- __classPrivateFieldSet(this, _ActionBarElement_focusZoneAbortController, focusZone(this, {
106
- bindKeys: FocusKeys.ArrowHorizontal | FocusKeys.HomeAndEnd,
107
- focusOutBehavior: 'wrap',
108
- focusableElementFilter: element => {
109
- const idx = this.items.indexOf(element.parentElement);
110
- const elementIsVisibleItem = idx > -1 && this.items[idx].style.visibility === 'visible';
111
- const elementIsVisibleActionMenuInvoker = element === this.moreMenu.invokerElement && !this.moreMenu.hidden;
112
- return elementIsVisibleItem || elementIsVisibleActionMenuInvoker;
113
- },
114
- }), "f");
115
73
  }
116
74
  };
117
75
  _ActionBarElement_focusZoneAbortController = new WeakMap();
76
+ _ActionBarElement_pendingUpdate = new WeakMap();
118
77
  _ActionBarElement_instances = new WeakSet();
119
- _ActionBarElement_firstItem_get = function _ActionBarElement_firstItem_get() {
120
- let foundItem = null;
121
- __classPrivateFieldGet(this, _ActionBarElement_instances, "m", _ActionBarElement_eachItem).call(this, (item, _index, type) => {
122
- if (type === ItemType.Item) {
123
- foundItem = item;
124
- return false;
78
+ _ActionBarElement_performUpdate = function _ActionBarElement_performUpdate() {
79
+ const firstItem = __classPrivateFieldGet(this, _ActionBarElement_instances, "a", _ActionBarElement_firstItem_get);
80
+ if (!firstItem)
81
+ return;
82
+ const baseTop = firstItem.getBoundingClientRect().top;
83
+ const cachedMenuItems = __classPrivateFieldGet(this, _ActionBarElement_instances, "a", _ActionBarElement_menuItems_get);
84
+ // Snapshot geometry in one pass before mutating the DOM
85
+ const snapshots = Array.from(this.items, el => ({
86
+ top: el.getBoundingClientRect().top,
87
+ isDivider: el.classList.contains('ActionBar-divider'),
88
+ }));
89
+ // Apply visibility changes after all reads are complete
90
+ let prevWasDivider = false;
91
+ for (let n = 0; n < snapshots.length; n++) {
92
+ const snap = snapshots[n];
93
+ if (snap.isDivider) {
94
+ prevWasDivider = true;
95
+ continue;
96
+ }
97
+ if (snap.top > baseTop) {
98
+ __classPrivateFieldGet(this, _ActionBarElement_instances, "m", _ActionBarElement_hideItem).call(this, n, cachedMenuItems);
99
+ if (this.moreMenu.hidden)
100
+ this.moreMenu.hidden = false;
101
+ if (prevWasDivider)
102
+ __classPrivateFieldGet(this, _ActionBarElement_instances, "m", _ActionBarElement_hideItem).call(this, n - 1, cachedMenuItems);
103
+ }
104
+ else {
105
+ __classPrivateFieldGet(this, _ActionBarElement_instances, "m", _ActionBarElement_showItem).call(this, n, cachedMenuItems);
106
+ if (n === this.items.length - 1)
107
+ this.moreMenu.hidden = true;
108
+ if (prevWasDivider)
109
+ __classPrivateFieldGet(this, _ActionBarElement_instances, "m", _ActionBarElement_showItem).call(this, n - 1, cachedMenuItems);
125
110
  }
126
- return true;
127
- });
128
- return foundItem;
111
+ prevWasDivider = false;
112
+ }
113
+ if (__classPrivateFieldGet(this, _ActionBarElement_focusZoneAbortController, "f")) {
114
+ __classPrivateFieldGet(this, _ActionBarElement_focusZoneAbortController, "f").abort();
115
+ }
116
+ __classPrivateFieldSet(this, _ActionBarElement_focusZoneAbortController, focusZone(this, {
117
+ bindKeys: FocusKeys.ArrowHorizontal | FocusKeys.HomeAndEnd,
118
+ focusOutBehavior: 'wrap',
119
+ focusableElementFilter: element => {
120
+ const idx = this.items.indexOf(element.parentElement);
121
+ const elementIsVisibleItem = idx > -1 && this.items[idx].style.visibility === 'visible';
122
+ const elementIsVisibleActionMenuInvoker = element === this.moreMenu.invokerElement && !this.moreMenu.hidden;
123
+ return elementIsVisibleItem || elementIsVisibleActionMenuInvoker;
124
+ },
125
+ }), "f");
126
+ };
127
+ _ActionBarElement_firstItem_get = function _ActionBarElement_firstItem_get() {
128
+ return this.items.find(el => !el.classList.contains('ActionBar-divider')) ?? null;
129
129
  };
130
- _ActionBarElement_showItem = function _ActionBarElement_showItem(index) {
130
+ _ActionBarElement_showItem = function _ActionBarElement_showItem(index, menuItems) {
131
131
  const item = this.items[index];
132
- const menuItem = __classPrivateFieldGet(this, _ActionBarElement_instances, "a", _ActionBarElement_menuItems_get)[index];
132
+ const menuItem = menuItems[index];
133
133
  if (!item || !menuItem)
134
134
  return;
135
135
  item.style.setProperty('visibility', 'visible');
136
136
  menuItem.hidden = true;
137
137
  };
138
- _ActionBarElement_hideItem = function _ActionBarElement_hideItem(index) {
138
+ _ActionBarElement_hideItem = function _ActionBarElement_hideItem(index, menuItems) {
139
139
  const item = this.items[index];
140
- const menuItem = __classPrivateFieldGet(this, _ActionBarElement_instances, "a", _ActionBarElement_menuItems_get)[index];
140
+ const menuItem = menuItems[index];
141
141
  if (!item || !menuItem)
142
142
  return;
143
143
  item.style.setProperty('visibility', 'hidden');
@@ -146,15 +146,6 @@ _ActionBarElement_hideItem = function _ActionBarElement_hideItem(index) {
146
146
  _ActionBarElement_menuItems_get = function _ActionBarElement_menuItems_get() {
147
147
  return this.moreMenu.querySelectorAll('[role="menu"] > li');
148
148
  };
149
- _ActionBarElement_eachItem = function _ActionBarElement_eachItem(callback) {
150
- for (let i = 0; i < this.items.length; i++) {
151
- const item = this.items[i];
152
- const type = item.classList.contains('ActionBar-divider') ? ItemType.Divider : ItemType.Item;
153
- if (!callback(item, i, type)) {
154
- break;
155
- }
156
- }
157
- };
158
149
  __decorate([
159
150
  targets
160
151
  ], ActionBarElement.prototype, "items", void 0);
@@ -165,6 +156,6 @@ __decorate([
165
156
  target
166
157
  ], ActionBarElement.prototype, "moreMenu", void 0);
167
158
  ActionBarElement = __decorate([
168
- controller
159
+ controller('action-bar')
169
160
  ], ActionBarElement);
170
161
  window.ActionBarElement = ActionBarElement;
@@ -65,6 +65,6 @@ let ActionListElement = class ActionListElement extends HTMLElement {
65
65
  };
66
66
  _ActionListElement_truncationObserver = new WeakMap();
67
67
  ActionListElement = __decorate([
68
- controller
68
+ controller('action-list')
69
69
  ], ActionListElement);
70
70
  export { ActionListElement };
@@ -582,7 +582,7 @@ __decorate([
582
582
  target
583
583
  ], ActionMenuElement.prototype, "list", void 0);
584
584
  ActionMenuElement = ActionMenuElement_1 = __decorate([
585
- controller
585
+ controller('action-menu')
586
586
  ], ActionMenuElement);
587
587
  export { ActionMenuElement };
588
588
  if (!window.customElements.get('action-menu')) {
@@ -1 +1 @@
1
- @property --dialog-scrollgutter{initial-value:0;inherits:false;syntax:"<length>"}body:has(dialog:modal.Overlay--disableScroll){overflow:hidden!important;padding-right:var(--dialog-scrollgutter)!important}dialog.Overlay:not([open]){display:none}.Overlay--hidden{display:none!important}.Overlay--visibilityHidden{height:0;opacity:0;overflow:hidden;visibility:hidden}@supports not selector(:popover-open){[popover]:not(.\:popover-open){display:none}}.Overlay{background-color:var(--overlay-bgColor);border:0;border-radius:var(--borderRadius-large);box-shadow:var(--shadow-floating-small);color:var(--fgColor-default);display:flex;flex-direction:column;inset:0;margin:auto;max-height:min(calc(100vh - 2rem),var(--overlay-height));min-width:192px;opacity:1;padding:0;position:static;white-space:normal;width:min(var(--overlay-width),100vw - 2rem)}.Overlay.Overlay--size-auto{max-height:calc(100vh - 2rem);max-width:calc(100vw - 2rem);min-width:192px}.Overlay.Overlay--size-full{height:100vh;width:100vw}.Overlay.Overlay--size-xsmall{--overlay-width:192px;max-height:calc(100vh - 2rem)}.Overlay.Overlay--size-small{--overlay-height:256px;--overlay-width:320px}.Overlay.Overlay--size-small-portrait{--overlay-height:432px;--overlay-width:320px}.Overlay.Overlay--size-medium{--overlay-height:320px;--overlay-width:480px}.Overlay.Overlay--size-medium-portrait{--overlay-height:600px;--overlay-width:480px}.Overlay.Overlay--size-large{--overlay-height:432px;--overlay-width:640px}.Overlay.Overlay--size-xlarge{--overlay-height:600px;--overlay-width:960px}.Overlay.Overlay--height-auto{height:auto}.Overlay.Overlay--placement-left,.Overlay.Overlay--placement-right{height:100%;max-height:unset;position:fixed}@media screen and (prefers-reduced-motion:no-preference){.Overlay.Overlay--motion-scaleFade,.Overlay.Overlay--placement-left,.Overlay.Overlay--placement-right{animation:Overlay--motion-scaleFade .2s cubic-bezier(.33,1,.68,1) 0s 1 normal none running}}.Overlay.Overlay--placement-left{animation-name:Overlay--motion-slideInRight;border-bottom-left-radius:0;border-top-left-radius:0;inset:0 auto 0 0}.Overlay.Overlay--placement-right{animation-name:Overlay--motion-slideInLeft;border-bottom-right-radius:0;border-top-right-radius:0;inset:0 0 0 auto}.Overlay.Overlay--height-xsmall{height:min(192px,100vh - 2rem)}.Overlay.Overlay--height-small{height:min(256px,100vh - 2rem)}.Overlay.Overlay--height-medium{height:min(320px,100vh - 2rem)}.Overlay.Overlay--height-large{height:min(432px,100vh - 2rem)}.Overlay.Overlay--height-xlarge{height:min(600px,100vh - 2rem)}.Overlay.Overlay--width-auto{width:auto}.Overlay.Overlay--width-small{width:min(256px,100vw - 2rem)}.Overlay.Overlay--width-medium{width:min(320px,100vw - 2rem)}.Overlay.Overlay--width-large{width:min(480px,100vw - 2rem)}.Overlay.Overlay--width-xlarge{width:min(640px,100vw - 2rem)}.Overlay.Overlay--width-xxlarge{width:min(960px,100vw - 2rem)}.Overlay:modal{position:fixed}@keyframes Overlay--motion-scaleFade{0%{opacity:0;transform:scale(.5)}to{opacity:1;transform:scale(1)}}.Overlay-form{flex-grow:1;overflow:auto}.Overlay-form,.Overlay-header{display:flex;flex-direction:column}.Overlay-header{color:var(--fgColor-default);z-index:1}.Overlay-header.Overlay-header--divided{box-shadow:inset 0 calc(var(--borderWidth-thin)*-1) var(--borderColor-default);padding-bottom:var(--stack-padding-condensed)}:is(.Overlay-header.Overlay-header--large .Overlay-headerContentWrap) .Overlay-titleWrap{gap:var(--stack-gap-condensed)}:is(:is(.Overlay-header.Overlay-header--large .Overlay-headerContentWrap) .Overlay-titleWrap) .Overlay-title{font-size:var(--text-title-size-medium)}:is(:is(.Overlay-header.Overlay-header--large .Overlay-headerContentWrap) .Overlay-titleWrap) .Overlay-description{font-size:var(--text-body-size-medium)}.Overlay-header .Overlay-headerContentWrap{align-items:flex-start;display:flex;gap:var(--stack-gap-condensed);padding:var(--stack-gap-condensed) var(--stack-gap-condensed) 0 var(--stack-gap-condensed)}:is(.Overlay-header .Overlay-headerContentWrap) .Overlay-actionWrap{display:flex;flex-direction:row;gap:var(--stack-gap-condensed)}:is(.Overlay-header .Overlay-headerContentWrap) .Overlay-titleWrap{display:flex;flex-direction:column;flex-grow:1;gap:var(--control-small-gap);padding:calc(var(--stack-gap-condensed)*.75) 0 calc(var(--stack-gap-condensed)*.75) var(--stack-gap-condensed)}:is(:is(.Overlay-header .Overlay-headerContentWrap) .Overlay-titleWrap) .Overlay-title{font-size:var(--text-body-size-medium);font-weight:var(--base-text-weight-semibold);margin:0}:is(:is(.Overlay-header .Overlay-headerContentWrap) .Overlay-titleWrap) .Overlay-description{color:var(--fgColor-muted);font-size:var(--text-body-size-small);font-weight:var(--base-text-weight-normal);margin:0}.Overlay-headerFilter{padding:var(--stack-gap-condensed) var(--stack-gap-condensed) 0 var(--stack-gap-condensed)}.Overlay-body{flex-grow:1;font-size:var(--text-body-size-medium);overflow-y:auto;padding:var(--stack-padding-normal);scrollbar-width:thin}.Overlay-body.Overlay-body--paddingCondensed{padding:var(--stack-padding-condensed);padding-top:0}.Overlay-body.Overlay-body--paddingNone{padding:0}.Overlay-footer{display:flex;flex-direction:row;flex-shrink:0;flex-wrap:wrap;padding:0 var(--stack-padding-normal) var(--stack-padding-normal) var(--stack-padding-normal);z-index:1}.Overlay-footer.Overlay-footer--divided{box-shadow:inset 0 var(--borderWidth-thin) var(--borderColor-default);padding-top:var(--stack-padding-normal)}.Overlay-footer.Overlay-footer--alignStart{gap:var(--stack-gap-condensed);justify-content:flex-start}.Overlay-footer.Overlay-footer--alignCenter{gap:var(--stack-gap-condensed);justify-content:center}.Overlay-footer.Overlay-footer--alignEnd{gap:var(--stack-gap-condensed);justify-content:flex-end}.Overlay-closeButton{align-self:flex-start;background-color:initial;border:var(--borderWidth-thin) solid #0000;border-radius:var(--borderRadius-medium);color:var(--fgColor-muted);cursor:pointer;display:grid;flex-shrink:0;height:var(--base-size-32);padding:0;place-content:center;position:relative;transition:.2s cubic-bezier(.3,0,.5,1);transition-property:color,background-color,border-color;-webkit-user-select:none;user-select:none;width:var(--base-size-32)}.Overlay-closeButton:focus,.Overlay-closeButton:hover{background-color:var(--button-default-bgColor-hover);border:var(--borderWidth-thin) solid var(--control-bgColor-hover)}.Overlay-closeButton.close-button{border:var(--borderWidth-thin) solid #0000}.Overlay--full{border-radius:unset!important;flex-grow:1;height:100%;max-height:100vh;max-width:100vw;width:100%}@media (max-width:767px){.Overlay--placement-right-whenNarrow,.Overlay.Overlay--placement-left-whenNarrow{height:100%;max-height:100vh;position:fixed}.Overlay.Overlay--placement-left-whenNarrow{animation-name:Overlay--motion-slideInLeft;border-bottom-left-radius:0;border-top-left-radius:0;inset:0 auto 0 0}.Overlay.Overlay--placement-right-whenNarrow{animation-name:Overlay--motion-slideInLeft;border-bottom-right-radius:0;border-top-right-radius:0;inset:0 0 0 auto}.Overlay.Overlay--placement-bottom-whenNarrow{animation-name:Overlay--motion-slideUp;border-bottom-left-radius:0;border-bottom-right-radius:0;inset:auto 0 0;max-width:100vw;width:100%}.Overlay--full-whenNarrow{border-radius:unset!important;flex-grow:1;height:100%;max-height:100vh;max-width:100vw;width:100%}}@keyframes Overlay--motion-slideDown{0%{transform:translateY(-100%)}}@keyframes Overlay--motion-slideUp{0%{transform:translateY(100%)}}@keyframes Overlay--motion-slideInRight{0%{transform:translateX(-100%)}}@keyframes Overlay--motion-slideInLeft{0%{transform:translateX(100%)}}
1
+ @property --dialog-scrollgutter{initial-value:0;inherits:false;syntax:"<length>"}body:has(dialog:modal.Overlay--disableScroll){overflow:hidden!important;padding-right:var(--dialog-scrollgutter)!important}dialog.Overlay:not([open]){display:none}.Overlay--hidden{display:none!important}.Overlay--visibilityHidden{height:0;opacity:0;overflow:hidden;visibility:hidden}@supports not selector(:popover-open){[popover]:not(.\:popover-open){display:none}}.Overlay{background-color:var(--overlay-bgColor);border:0;border-radius:var(--borderRadius-large);box-shadow:var(--shadow-floating-small);color:var(--fgColor-default);display:flex;flex-direction:column;inset:0;margin:auto;max-height:min(calc(100vh - 2rem),var(--overlay-height));min-width:192px;opacity:1;padding:0;position:static;white-space:normal;width:min(var(--overlay-width),100vw - 2rem)}.Overlay.Overlay--size-auto{max-height:calc(100vh - 2rem);max-width:calc(100vw - 2rem);min-width:192px}.Overlay.Overlay--size-full{height:100vh;width:100vw}.Overlay.Overlay--size-xsmall{--overlay-width:192px;max-height:calc(100vh - 2rem)}.Overlay.Overlay--size-small{--overlay-height:256px;--overlay-width:320px}.Overlay.Overlay--size-small-portrait{--overlay-height:432px;--overlay-width:320px}.Overlay.Overlay--size-medium{--overlay-height:320px;--overlay-width:480px}.Overlay.Overlay--size-medium-portrait{--overlay-height:600px;--overlay-width:480px}.Overlay.Overlay--size-large{--overlay-height:432px;--overlay-width:640px}.Overlay.Overlay--size-xlarge{--overlay-height:600px;--overlay-width:960px}.Overlay.Overlay--height-auto{height:auto}.Overlay.Overlay--placement-left,.Overlay.Overlay--placement-right{height:100%;max-height:unset;position:fixed}@media screen and (prefers-reduced-motion:no-preference){.Overlay.Overlay--motion-scaleFade,.Overlay.Overlay--placement-left,.Overlay.Overlay--placement-right{animation:Overlay--motion-scaleFade .2s cubic-bezier(.33,1,.68,1) 0s 1 normal none running}}.Overlay.Overlay--placement-left{animation-name:Overlay--motion-slideInRight;border-bottom-left-radius:0;border-top-left-radius:0;inset:0 auto 0 0}.Overlay.Overlay--placement-right{animation-name:Overlay--motion-slideInLeft;border-bottom-right-radius:0;border-top-right-radius:0;inset:0 0 0 auto}.Overlay.Overlay--height-xsmall{height:min(192px,100vh - 2rem)}.Overlay.Overlay--height-small{height:min(256px,100vh - 2rem)}.Overlay.Overlay--height-medium{height:min(320px,100vh - 2rem)}.Overlay.Overlay--height-large{height:min(432px,100vh - 2rem)}.Overlay.Overlay--height-xlarge{height:min(600px,100vh - 2rem)}.Overlay.Overlay--width-auto{width:auto}.Overlay.Overlay--width-small{width:min(256px,100vw - 2rem)}.Overlay.Overlay--width-medium{width:min(320px,100vw - 2rem)}.Overlay.Overlay--width-large{width:min(480px,100vw - 2rem)}.Overlay.Overlay--width-xlarge{width:min(640px,100vw - 2rem)}.Overlay.Overlay--width-xxlarge{width:min(960px,100vw - 2rem)}.Overlay:modal{position:fixed}@keyframes Overlay--motion-scaleFade{0%{opacity:0;transform:scale(.5)}to{opacity:1;transform:scale(1)}}.Overlay-form{flex-grow:1;overflow:auto}.Overlay-form,.Overlay-header{display:flex;flex-direction:column}.Overlay-header{color:var(--fgColor-default);z-index:1}.Overlay-header.Overlay-header--divided{box-shadow:inset 0 calc(var(--borderWidth-thin)*-1) var(--borderColor-default);padding-bottom:var(--stack-padding-condensed)}:is(.Overlay-header.Overlay-header--large .Overlay-headerContentWrap) .Overlay-titleWrap{gap:var(--stack-gap-condensed)}:is(:is(.Overlay-header.Overlay-header--large .Overlay-headerContentWrap) .Overlay-titleWrap) .Overlay-title{font-size:var(--text-title-size-medium)}:is(:is(.Overlay-header.Overlay-header--large .Overlay-headerContentWrap) .Overlay-titleWrap) .Overlay-description{font-size:var(--text-body-size-medium)}.Overlay-header .Overlay-headerContentWrap{align-items:flex-start;display:flex;gap:var(--stack-gap-condensed);padding:var(--stack-gap-condensed) var(--stack-gap-condensed) 0 var(--stack-gap-condensed)}:is(.Overlay-header .Overlay-headerContentWrap) .Overlay-actionWrap{display:flex;flex-direction:row;gap:var(--stack-gap-condensed)}:is(.Overlay-header .Overlay-headerContentWrap) .Overlay-titleWrap{display:flex;flex-direction:column;flex-grow:1;gap:var(--control-small-gap);padding:calc(var(--stack-gap-condensed)*.75) 0 calc(var(--stack-gap-condensed)*.75) var(--stack-gap-condensed)}:is(:is(.Overlay-header .Overlay-headerContentWrap) .Overlay-titleWrap) .Overlay-title{font-size:var(--text-body-size-medium);font-weight:var(--base-text-weight-semibold);margin:0}:is(:is(.Overlay-header .Overlay-headerContentWrap) .Overlay-titleWrap) .Overlay-description{color:var(--fgColor-muted);font-size:var(--text-body-size-small);font-weight:var(--base-text-weight-normal);margin:0}.Overlay-headerFilter{padding:var(--stack-gap-condensed) var(--stack-gap-condensed) 0 var(--stack-gap-condensed)}.Overlay-body{flex-grow:1;font-size:var(--text-body-size-medium);overflow-y:auto;padding:var(--stack-padding-normal);scrollbar-width:thin}.Overlay-body.Overlay-body--paddingCondensed{padding:var(--stack-padding-condensed);padding-top:0}.Overlay-body.Overlay-body--paddingNone{padding:0}.Overlay-footer{display:flex;flex-direction:row;flex-shrink:0;flex-wrap:wrap;padding:0 var(--stack-padding-normal) var(--stack-padding-normal) var(--stack-padding-normal);z-index:1}.Overlay-footer.Overlay-footer--divided{box-shadow:inset 0 var(--borderWidth-thin) var(--borderColor-default);padding-top:var(--stack-padding-normal)}.Overlay-footer.Overlay-footer--alignStart{gap:var(--stack-gap-condensed);justify-content:flex-start}.Overlay-footer.Overlay-footer--alignCenter{gap:var(--stack-gap-condensed);justify-content:center}.Overlay-footer.Overlay-footer--alignEnd{gap:var(--stack-gap-condensed);justify-content:flex-end}.Overlay-closeButton{align-self:flex-start;background-color:initial;border:var(--borderWidth-thin) solid #0000;border-radius:var(--borderRadius-medium);color:var(--fgColor-muted);cursor:pointer;display:grid;flex-shrink:0;height:var(--base-size-32);padding:0;place-content:center;position:relative;transition:.2s cubic-bezier(.3,0,.5,1);transition-property:color,background-color,border-color;-webkit-user-select:none;user-select:none;width:var(--base-size-32)}.Overlay-closeButton:focus,.Overlay-closeButton:hover{background-color:var(--button-default-bgColor-hover);border:var(--borderWidth-thin) solid var(--control-bgColor-hover)}.Overlay-closeButton.close-button{border:var(--borderWidth-thin) solid #0000}.Overlay--full{border-radius:unset!important;flex-grow:1;height:100%;max-height:100vh;max-width:100vw;width:100%}@media (max-width:767px){.Overlay--placement-right-whenNarrow,.Overlay.Overlay--placement-left-whenNarrow{height:100%;max-height:100vh;position:fixed}.Overlay.Overlay--placement-left-whenNarrow{animation-name:Overlay--motion-slideInLeft;border-bottom-left-radius:0;border-top-left-radius:0;inset:0 auto 0 0}.Overlay.Overlay--placement-right-whenNarrow{animation-name:Overlay--motion-slideInLeft;border-bottom-right-radius:0;border-top-right-radius:0;inset:0 0 0 auto}.Overlay.Overlay--placement-bottom-whenNarrow{animation-name:Overlay--motion-slideUp;border-bottom-left-radius:0;border-bottom-right-radius:0;inset:auto 0 0;max-width:100vw;width:100%}.Overlay--full-whenNarrow{border-radius:unset!important;flex-grow:1;height:100%;max-height:100vh;max-width:100vw;width:100%}.Overlay--fullscreen-whenNarrow{border-radius:unset!important;height:100vh;left:0;margin:0;max-height:none!important;max-width:none!important;position:fixed;top:0;width:100vw}}@keyframes Overlay--motion-slideDown{0%{transform:translateY(-100%)}}@keyframes Overlay--motion-slideUp{0%{transform:translateY(100%)}}@keyframes Overlay--motion-slideInRight{0%{transform:translateX(-100%)}}@keyframes Overlay--motion-slideInLeft{0%{transform:translateX(100%)}}
@@ -61,6 +61,7 @@
61
61
  ".Overlay.Overlay--placement-left-whenNarrow",
62
62
  ".Overlay.Overlay--placement-right-whenNarrow",
63
63
  ".Overlay.Overlay--placement-bottom-whenNarrow",
64
- ".Overlay--full-whenNarrow"
64
+ ".Overlay--full-whenNarrow",
65
+ ".Overlay--fullscreen-whenNarrow"
65
66
  ]
66
67
  }
@@ -50,7 +50,7 @@ __decorate([
50
50
  targets
51
51
  ], SegmentedControlElement.prototype, "items", void 0);
52
52
  SegmentedControlElement = __decorate([
53
- controller
53
+ controller('segmented-control')
54
54
  ], SegmentedControlElement);
55
55
  export { SegmentedControlElement };
56
56
  if (!window.customElements.get('segmented-control')) {
@@ -775,6 +775,8 @@ _SelectPanelElement_performFilteringLocally = function _SelectPanelElement_perfo
775
775
  return __classPrivateFieldGet(this, _SelectPanelElement_instances, "a", _SelectPanelElement_fetchStrategy_get) === FetchStrategy.LOCAL || __classPrivateFieldGet(this, _SelectPanelElement_instances, "a", _SelectPanelElement_fetchStrategy_get) === FetchStrategy.EVENTUALLY_LOCAL;
776
776
  };
777
777
  _SelectPanelElement_handleInvokerActivated = function _SelectPanelElement_handleInvokerActivated(event) {
778
+ // Let listeners observe the invoker was clicked
779
+ this.invokerElement?.dispatchEvent(new CustomEvent('invokerClicked', { bubbles: true }));
778
780
  event.preventDefault();
779
781
  // eslint-disable-next-line no-restricted-syntax
780
782
  event.stopPropagation();
@@ -987,7 +989,7 @@ __decorate([
987
989
  target
988
990
  ], SelectPanelElement.prototype, "liveRegion", void 0);
989
991
  SelectPanelElement = __decorate([
990
- controller
992
+ controller('select-panel')
991
993
  ], SelectPanelElement);
992
994
  export { SelectPanelElement };
993
995
  if (!window.customElements.get('select-panel')) {
@@ -171,7 +171,7 @@ __decorate([
171
171
  attr
172
172
  ], ToggleSwitchElement.prototype, "turbo", void 0);
173
173
  ToggleSwitchElement = __decorate([
174
- controller
174
+ controller('toggle-switch')
175
175
  ], ToggleSwitchElement);
176
176
  if (!window.customElements.get('toggle-switch')) {
177
177
  window.ToggleSwitchElement = ToggleSwitchElement;
@@ -99,7 +99,7 @@ class ToolTipElement extends HTMLElement {
99
99
  border-radius: var(--borderRadius-medium);
100
100
  border: 0 !important;
101
101
  opacity: 0;
102
- max-width: var(--overlay-width-small);
102
+ max-width: min(var(--overlay-width-small), 100vw);
103
103
  word-wrap: break-word;
104
104
  white-space: normal;
105
105
  width: max-content !important;
@@ -440,7 +440,7 @@ __decorate([
440
440
  target
441
441
  ], TreeViewElement.prototype, "formInputPrototype", void 0);
442
442
  TreeViewElement = __decorate([
443
- controller
443
+ controller('tree-view')
444
444
  ], TreeViewElement);
445
445
  export { TreeViewElement };
446
446
  if (!window.customElements.get('tree-view')) {
@@ -53,7 +53,7 @@ __decorate([
53
53
  target
54
54
  ], TreeViewIconPairElement.prototype, "collapsedIcon", void 0);
55
55
  TreeViewIconPairElement = __decorate([
56
- controller
56
+ controller('tree-view-icon-pair')
57
57
  ], TreeViewIconPairElement);
58
58
  export { TreeViewIconPairElement };
59
59
  if (!window.customElements.get('tree-view-icon-pair')) {
@@ -19,7 +19,7 @@ let TreeViewIncludeFragmentElement = class TreeViewIncludeFragmentElement extend
19
19
  }
20
20
  };
21
21
  TreeViewIncludeFragmentElement = __decorate([
22
- controller
22
+ controller('tree-view-include-fragment')
23
23
  ], TreeViewIncludeFragmentElement);
24
24
  export { TreeViewIncludeFragmentElement };
25
25
  if (!window.customElements.get('tree-view-include-fragment')) {
@@ -15,7 +15,7 @@ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (
15
15
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
16
16
  return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
17
17
  };
18
- var _TreeViewSubTreeNodeElement_instances, _TreeViewSubTreeNodeElement_expanded, _TreeViewSubTreeNodeElement_loadingState, _TreeViewSubTreeNodeElement_abortController, _TreeViewSubTreeNodeElement_activeElementIsLoader, _TreeViewSubTreeNodeElement_handleToggleEvent, _TreeViewSubTreeNodeElement_handleIncludeFragmentEvent, _TreeViewSubTreeNodeElement_handleRetryButtonEvent, _TreeViewSubTreeNodeElement_handleKeyboardEvent, _TreeViewSubTreeNodeElement_handleCheckboxEvent, _TreeViewSubTreeNodeElement_update, _TreeViewSubTreeNodeElement_checkboxElement_get;
18
+ var _TreeViewSubTreeNodeElement_instances, _TreeViewSubTreeNodeElement_expanded, _TreeViewSubTreeNodeElement_loadingState, _TreeViewSubTreeNodeElement_abortController, _TreeViewSubTreeNodeElement_activeElementIsLoader, _TreeViewSubTreeNodeElement_handleToggleEvent, _TreeViewSubTreeNodeElement_handleIncludeFragmentEvent, _TreeViewSubTreeNodeElement_handleRetryButtonEvent, _TreeViewSubTreeNodeElement_handleKeyboardEvent, _TreeViewSubTreeNodeElement_handleCheckboxEvent, _TreeViewSubTreeNodeElement_update, _TreeViewSubTreeNodeElement_isIncludeFragment, _TreeViewSubTreeNodeElement_checkboxElement_get;
19
19
  import { controller, target } from '@github/catalyst';
20
20
  import { observeMutationsUntilConditionMet } from '../../utils';
21
21
  let TreeViewSubTreeNodeElement = class TreeViewSubTreeNodeElement extends HTMLElement {
@@ -140,6 +140,10 @@ let TreeViewSubTreeNodeElement = class TreeViewSubTreeNodeElement extends HTMLEl
140
140
  // sub-tree and no node in the entire tree can be focused
141
141
  const previousNode = this.subTree.querySelector("[tabindex='0']");
142
142
  previousNode?.setAttribute('tabindex', '-1');
143
+ // Also check if the subtree element itself is an include-fragment with role="treeitem" and has focus
144
+ if (__classPrivateFieldGet(this, _TreeViewSubTreeNodeElement_instances, "m", _TreeViewSubTreeNodeElement_isIncludeFragment).call(this) && this.subTree.getAttribute('tabindex') === '0') {
145
+ this.subTree.setAttribute('tabindex', '-1');
146
+ }
143
147
  this.node.setAttribute('tabindex', '0');
144
148
  this.treeView.dispatchEvent(new CustomEvent('treeViewNodeCollapsed', {
145
149
  bubbles: true,
@@ -251,6 +255,10 @@ _TreeViewSubTreeNodeElement_handleIncludeFragmentEvent = function _TreeViewSubTr
251
255
  // request succeeded but element has not yet been replaced
252
256
  case 'include-fragment-replace':
253
257
  __classPrivateFieldSet(this, _TreeViewSubTreeNodeElement_activeElementIsLoader, document.activeElement === this.loadingIndicator.closest('[role=treeitem]'), "f");
258
+ // Also check if the include-fragment itself has focus (when it has role="treeitem")
259
+ if (!__classPrivateFieldGet(this, _TreeViewSubTreeNodeElement_activeElementIsLoader, "f") && document.activeElement === this.subTree && __classPrivateFieldGet(this, _TreeViewSubTreeNodeElement_instances, "m", _TreeViewSubTreeNodeElement_isIncludeFragment).call(this)) {
260
+ __classPrivateFieldSet(this, _TreeViewSubTreeNodeElement_activeElementIsLoader, true, "f");
261
+ }
254
262
  this.loadingState = 'success';
255
263
  break;
256
264
  case 'include-fragment-replaced':
@@ -354,6 +362,13 @@ _TreeViewSubTreeNodeElement_update = function _TreeViewSubTreeNodeElement_update
354
362
  if (this.expanded) {
355
363
  if (this.subTree)
356
364
  this.subTree.hidden = false;
365
+ if (__classPrivateFieldGet(this, _TreeViewSubTreeNodeElement_instances, "m", _TreeViewSubTreeNodeElement_isIncludeFragment).call(this)) {
366
+ this.subTree.setAttribute('role', 'treeitem');
367
+ // Ensure the include-fragment can participate in roving tab index
368
+ if (!this.subTree.hasAttribute('tabindex')) {
369
+ this.subTree.setAttribute('tabindex', '-1');
370
+ }
371
+ }
357
372
  this.node.setAttribute('aria-expanded', 'true');
358
373
  this.treeView?.expandAncestorsForNode(this);
359
374
  if (this.iconPair) {
@@ -367,6 +382,11 @@ _TreeViewSubTreeNodeElement_update = function _TreeViewSubTreeNodeElement_update
367
382
  else {
368
383
  if (this.subTree)
369
384
  this.subTree.hidden = true;
385
+ if (__classPrivateFieldGet(this, _TreeViewSubTreeNodeElement_instances, "m", _TreeViewSubTreeNodeElement_isIncludeFragment).call(this)) {
386
+ this.subTree.removeAttribute('role');
387
+ // Remove tabindex when role is removed
388
+ this.subTree.removeAttribute('tabindex');
389
+ }
370
390
  this.node.setAttribute('aria-expanded', 'false');
371
391
  if (this.iconPair) {
372
392
  this.iconPair.showCollapsed();
@@ -397,6 +417,9 @@ _TreeViewSubTreeNodeElement_update = function _TreeViewSubTreeNodeElement_update
397
417
  this.loadingFailureMessage.hidden = true;
398
418
  }
399
419
  };
420
+ _TreeViewSubTreeNodeElement_isIncludeFragment = function _TreeViewSubTreeNodeElement_isIncludeFragment() {
421
+ return this.subTree?.getAttribute('data-target')?.includes('tree-view-sub-tree-node.includeFragment') ?? false;
422
+ };
400
423
  _TreeViewSubTreeNodeElement_checkboxElement_get = function _TreeViewSubTreeNodeElement_checkboxElement_get() {
401
424
  return this.querySelector('.TreeViewItemCheckbox');
402
425
  };
@@ -431,7 +454,7 @@ __decorate([
431
454
  target
432
455
  ], TreeViewSubTreeNodeElement.prototype, "retryButton", void 0);
433
456
  TreeViewSubTreeNodeElement = __decorate([
434
- controller
457
+ controller('tree-view-sub-tree-node')
435
458
  ], TreeViewSubTreeNodeElement);
436
459
  export { TreeViewSubTreeNodeElement };
437
460
  if (!window.customElements.get('tree-view-sub-tree-node')) {
@@ -43,7 +43,7 @@ __decorate([
43
43
  target
44
44
  ], XBannerElement.prototype, "titleText", void 0);
45
45
  XBannerElement = __decorate([
46
- controller
46
+ controller('x-banner')
47
47
  ], XBannerElement);
48
48
  if (!window.customElements.get('x-banner')) {
49
49
  window.XBannerElement = XBannerElement;
@@ -1 +1 @@
1
- .blankslate-container{container-type:inline-size;width:100%}.blankslate{--blankslate-outer-padding-block:var(--base-size-32);--blankslate-outer-padding-inline:var(--base-size-32);padding:var(--blankslate-outer-padding-block) var(--blankslate-outer-padding-inline);position:relative;text-align:center}.blankslate p{color:var(--fgColor-muted);font-size:var(--text-body-size-large);margin:auto;max-width:56rem}.blankslate code{background:var(--bgColor-default);border:var(--borderWidth-thin) solid var(--borderColor-muted);border-radius:var(--borderRadius-medium);font-size:var(--text-body-size-medium);padding:var(--base-size-2) var(--base-size-4) var(--base-size-4)}.blankslate img{height:56px;width:56px}.blankslate-icon{color:var(--fgColor-muted);margin-bottom:var(--stack-gap-condensed);margin-left:var(--control-small-gap);margin-right:var(--control-small-gap)}.blankslate-image{margin-bottom:var(--stack-gap-normal)}.blankslate-heading{font-size:var(--text-title-size-medium);font-weight:var(--text-title-weight-medium);margin-bottom:var(--base-size-4)}.blankslate-action{margin-top:var(--stack-gap-normal)}.blankslate-action:first-of-type{margin-top:var(--stack-gap-spacious)}.blankslate-action:last-of-type{margin-bottom:var(--stack-gap-condensed)}.blankslate-capped{border-radius:0 0 var(--borderRadius-medium) var(--borderRadius-medium)}.blankslate-spacious{--blankslate-outer-padding-block:var(--base-size-80);--blankslate-outer-padding-inline:var(--base-size-40)}.blankslate-narrow{margin:0 auto;max-width:485px}.blankslate-large img{height:80px;width:80px}.blankslate-large h3{font-size:24px;margin:var(--stack-gap-normal) 0}.blankslate-large p{font-size:var(--text-body-size-large)}.blankslate-clean-background{border:0}@container (max-width: 34rem){.blankslate{--blankslate-outer-padding-block:var(--base-size-20);--blankslate-outer-padding-inline:var(--base-size-20)}.blankslate-spacious{--blankslate-outer-padding-block:var(--base-size-44);--blankslate-outer-padding-inline:var(--base-size-28)}.blankslate-icon{margin-bottom:var(--stack-gap-condensed)}.blankslate-heading{font-size:var(--text-title-size-small)}.blankslate p{font-size:var(--text-body-size-medium)}.blankslate-action{margin-top:var(--stack-gap-condensed)}.blankslate-action:first-of-type{margin-top:var(--stack-gap-normal)}.blankslate-action:last-of-type{margin-bottom:calc(var(--stack-gap-condensed)/2)}}
1
+ .blankslate-container{container-type:inline-size;width:100%}.blankslate{--blankslate-outer-padding-block:var(--base-size-32);--blankslate-outer-padding-inline:var(--base-size-32);padding:var(--blankslate-outer-padding-block) var(--blankslate-outer-padding-inline);position:relative;text-align:center}.blankslate p{color:var(--fgColor-muted);font-size:var(--text-body-size-large);margin:auto;max-width:56rem}.blankslate code{background:var(--bgColor-default);border:var(--borderWidth-thin) solid var(--borderColor-muted);border-radius:var(--borderRadius-medium);font-size:var(--text-body-size-medium);padding:var(--base-size-2) var(--base-size-4) var(--base-size-4)}.blankslate img{height:56px;width:56px}.blankslate-icon{color:var(--fgColor-muted);margin-bottom:var(--stack-gap-condensed);margin-left:var(--control-small-gap);margin-right:var(--control-small-gap)}.blankslate-image{margin-bottom:var(--stack-gap-normal)}.blankslate-heading{font-size:var(--text-title-size-medium);font-weight:var(--text-title-weight-medium);margin-bottom:var(--base-size-4);text-wrap:balance}.blankslate-description{text-wrap:balance}.blankslate-action{margin-top:var(--stack-gap-normal)}.blankslate-action:first-of-type{margin-top:var(--stack-gap-spacious)}.blankslate-action:last-of-type{margin-bottom:var(--stack-gap-condensed)}.blankslate-capped{border-radius:0 0 var(--borderRadius-medium) var(--borderRadius-medium)}.blankslate-spacious{--blankslate-outer-padding-block:var(--base-size-80);--blankslate-outer-padding-inline:var(--base-size-40)}.blankslate-narrow{margin:0 auto;max-width:485px}.blankslate-large img{height:80px;width:80px}.blankslate-large h3{font-size:24px;margin:var(--stack-gap-normal) 0}.blankslate-large p{font-size:var(--text-body-size-large)}.blankslate-clean-background{border:0}@container (max-width: 34rem){.blankslate{--blankslate-outer-padding-block:var(--base-size-20);--blankslate-outer-padding-inline:var(--base-size-20)}.blankslate-spacious{--blankslate-outer-padding-block:var(--base-size-44);--blankslate-outer-padding-inline:var(--base-size-28)}.blankslate-icon{margin-bottom:var(--stack-gap-condensed)}.blankslate-heading{font-size:var(--text-title-size-small)}.blankslate p{font-size:var(--text-body-size-medium)}.blankslate-action{margin-top:var(--stack-gap-condensed)}.blankslate-action:first-of-type{margin-top:var(--stack-gap-normal)}.blankslate-action:last-of-type{margin-bottom:calc(var(--stack-gap-condensed)/2)}}
@@ -9,6 +9,7 @@
9
9
  ".blankslate-icon",
10
10
  ".blankslate-image",
11
11
  ".blankslate-heading",
12
+ ".blankslate-description",
12
13
  ".blankslate-action",
13
14
  ".blankslate-action:first-of-type",
14
15
  ".blankslate-action:last-of-type",
@@ -60,6 +60,6 @@ __decorate([
60
60
  target
61
61
  ], DetailsToggleElement.prototype, "summaryTarget", void 0);
62
62
  DetailsToggleElement = __decorate([
63
- controller
63
+ controller('details-toggle')
64
64
  ], DetailsToggleElement);
65
65
  window.DetailsToggleElement = DetailsToggleElement;
@@ -187,6 +187,6 @@ __decorate([
187
187
  target
188
188
  ], NavListElement.prototype, "topLevelList", void 0);
189
189
  NavListElement = __decorate([
190
- controller
190
+ controller('nav-list')
191
191
  ], NavListElement);
192
192
  export { NavListElement };
@@ -105,7 +105,7 @@ __decorate([
105
105
  targets
106
106
  ], NavListGroupElement.prototype, "focusMarkers", void 0);
107
107
  NavListGroupElement = __decorate([
108
- controller
108
+ controller('nav-list-group')
109
109
  ], NavListGroupElement);
110
110
  export { NavListGroupElement };
111
111
  window.NavListGroupElement = NavListGroupElement;
@@ -10,6 +10,11 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
10
10
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
11
11
  };
12
12
  var _DialogHelperElement_instances, _DialogHelperElement_abortController, _DialogHelperElement_handleDialogOpenAttribute;
13
+ function setScrollGutter(doc) {
14
+ if (doc.body.style.getPropertyValue('--dialog-scrollgutter'))
15
+ return;
16
+ doc.body.style.setProperty('--dialog-scrollgutter', `${window.innerWidth - doc.body.clientWidth}px`);
17
+ }
13
18
  function dialogInvokerButtonHandler(event) {
14
19
  const target = event.target;
15
20
  const button = target?.closest('button');
@@ -20,25 +25,35 @@ function dialogInvokerButtonHandler(event) {
20
25
  if (dialogId) {
21
26
  const dialog = document.getElementById(dialogId);
22
27
  if (dialog instanceof HTMLDialogElement) {
28
+ setScrollGutter(dialog.ownerDocument);
23
29
  dialog.showModal();
24
30
  // A buttons default behaviour in some browsers it to send a pointer event
25
31
  // If the behaviour is allowed through the dialog will be shown but then
26
32
  // quickly hidden- as if it were never shown. This prevents that.
27
33
  event.preventDefault();
28
- // In some older browsers, such as Chrome 122, when a top layer element (such as a dialog)
29
- // opens from within a popover, the "hide all popovers" internal algorithm runs, hiding
30
- // any popover that is currently open, regardless of whether or not another top layer element,
31
- // such as a <dialog> is nested inside.
32
- // See https://github.com/whatwg/html/issues/9998.
33
- // This is fixed by https://github.com/whatwg/html/pull/10116, but while we still support browsers
34
- // that present this bug, we must undo the work they did to hide ancestral popovers of the dialog:
34
+ // When a <dialog> is opened with showModal() from inside a popover with popover="auto",
35
+ // there are two related issues:
36
+ //
37
+ // 1. In older browsers (e.g. Chrome 122), the "hide all popovers" algorithm runs when a
38
+ // top layer element opens, closing any ancestor popover. We must re-open those popovers.
39
+ // See https://github.com/whatwg/html/issues/9998,
40
+ // fixed by https://github.com/whatwg/html/pull/10116.
41
+ //
42
+ // 2. In newer browsers where the popover stays open, the popover="auto" behavior still
43
+ // interferes with the native <dialog> focus trap, causing focus to escape the dialog
44
+ // when tabbing past the last focusable element. Converting the popover to "manual"
45
+ // prevents this interference.
46
+ //
47
+ // In both cases, the fix is the same: convert ancestor auto popovers to manual.
35
48
  let node = button;
36
49
  let fixed = false;
37
50
  while (node) {
38
- node = node.parentElement?.closest('[popover]:not(:popover-open)');
51
+ node = node.parentElement?.closest('[popover]');
39
52
  if (node && node.popover === 'auto') {
40
53
  node.classList.add('dialog-inside-popover-fix');
41
54
  node.popover = 'manual';
55
+ // Changing popover from "auto" to "manual" closes the popover,
56
+ // so we need to re-show it regardless of whether it was previously open.
42
57
  node.showPopover();
43
58
  fixed = true;
44
59
  }
@@ -83,7 +98,6 @@ export class DialogHelperElement extends HTMLElement {
83
98
  const { signal } = (__classPrivateFieldSet(this, _DialogHelperElement_abortController, new AbortController(), "f"));
84
99
  document.addEventListener('click', dialogInvokerButtonHandler, true);
85
100
  document.addEventListener('click', this, { signal });
86
- this.ownerDocument.body.style.setProperty('--dialog-scrollgutter', `${window.innerWidth - this.ownerDocument.body.clientWidth}px`);
87
101
  new MutationObserver(records => {
88
102
  for (const record of records) {
89
103
  if (record.target === this.dialog) {
@@ -123,6 +137,7 @@ _DialogHelperElement_abortController = new WeakMap(), _DialogHelperElement_insta
123
137
  // eslint-disable-next-line no-restricted-syntax
124
138
  this.dialog.addEventListener('close', e => e.stopImmediatePropagation(), { once: true });
125
139
  this.dialog.close();
140
+ setScrollGutter(this.dialog.ownerDocument);
126
141
  this.dialog.showModal();
127
142
  }
128
143
  };
@@ -46,7 +46,7 @@ __decorate([
46
46
  attr
47
47
  ], ScrollableRegionElement.prototype, "labelledBy", void 0);
48
48
  ScrollableRegionElement = __decorate([
49
- controller
49
+ controller('scrollable-region')
50
50
  ], ScrollableRegionElement);
51
51
  export { ScrollableRegionElement };
52
52
  window.ScrollableRegionElement = ScrollableRegionElement;
@@ -35,7 +35,7 @@ __decorate([
35
35
  targets
36
36
  ], PrimerMultiInputElement.prototype, "fields", void 0);
37
37
  PrimerMultiInputElement = __decorate([
38
- controller
38
+ controller('primer-multi-input')
39
39
  ], PrimerMultiInputElement);
40
40
  export { PrimerMultiInputElement };
41
41
  if (!window.customElements.get('primer-multi-input')) {
@@ -44,7 +44,7 @@ __decorate([
44
44
  target
45
45
  ], PrimerTextAreaElement.prototype, "characterLimitSrElement", void 0);
46
46
  PrimerTextAreaElement = __decorate([
47
- controller
47
+ controller('primer-text-area')
48
48
  ], PrimerTextAreaElement);
49
49
  export { PrimerTextAreaElement };
50
50
  if (!window.customElements.get('primer-text-area')) {
@@ -128,6 +128,6 @@ __decorate([
128
128
  target
129
129
  ], PrimerTextFieldElement.prototype, "characterLimitSrElement", void 0);
130
130
  PrimerTextFieldElement = __decorate([
131
- controller
131
+ controller('primer-text-field')
132
132
  ], PrimerTextFieldElement);
133
133
  export { PrimerTextFieldElement };
@@ -29,6 +29,6 @@ __decorate([
29
29
  target
30
30
  ], ToggleSwitchInputElement.prototype, "validationMessageElement", void 0);
31
31
  ToggleSwitchInputElement = __decorate([
32
- controller
32
+ controller('toggle-switch-input')
33
33
  ], ToggleSwitchInputElement);
34
34
  export { ToggleSwitchInputElement };