@primer/view-components 0.16.0-rc.c533c149 → 0.16.0-rc.e938d510
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.
- package/app/assets/javascripts/app/components/primer/alpha/modal_dialog.d.ts +18 -0
- package/app/assets/javascripts/app/components/primer/primer.d.ts +2 -1
- package/app/assets/javascripts/app/components/primer/scrollable_region.d.ts +13 -0
- package/app/assets/javascripts/primer_view_components.js +1 -1
- package/app/assets/javascripts/primer_view_components.js.map +1 -1
- package/app/assets/styles/primer_view_components.css +1 -1
- package/app/assets/styles/primer_view_components.css.map +1 -1
- package/app/components/primer/alpha/action_menu/action_menu_element.js +0 -25
- package/app/components/primer/alpha/dialog.css +1 -1
- package/app/components/primer/alpha/dialog.css.json +0 -2
- package/app/components/primer/alpha/modal_dialog.d.ts +18 -0
- package/app/components/primer/alpha/modal_dialog.js +186 -0
- package/app/components/primer/alpha/overlay.css +1 -1
- package/app/components/primer/alpha/overlay.css.json +1 -2
- package/app/components/primer/primer.d.ts +2 -1
- package/app/components/primer/primer.js +2 -1
- package/app/components/primer/scrollable_region.d.ts +13 -0
- package/app/components/primer/scrollable_region.js +52 -0
- package/package.json +2 -2
- package/app/assets/javascripts/app/components/primer/dialog_helper.d.ts +0 -15
- package/app/components/primer/dialog_helper.d.ts +0 -15
- package/app/components/primer/dialog_helper.js +0 -77
@@ -303,7 +303,6 @@ _ActionMenuElement_handleInvokerActivated = function _ActionMenuElement_handleIn
|
|
303
303
|
}
|
304
304
|
};
|
305
305
|
_ActionMenuElement_handleDialogItemActivated = function _ActionMenuElement_handleDialogItemActivated(event, dialog) {
|
306
|
-
var _a;
|
307
306
|
this.querySelector('.ActionListWrap').style.display = 'none';
|
308
307
|
const dialog_controller = new AbortController();
|
309
308
|
const { signal } = dialog_controller;
|
@@ -313,31 +312,7 @@ _ActionMenuElement_handleDialogItemActivated = function _ActionMenuElement_handl
|
|
313
312
|
if (__classPrivateFieldGet(this, _ActionMenuElement_instances, "m", _ActionMenuElement_isOpen).call(this)) {
|
314
313
|
__classPrivateFieldGet(this, _ActionMenuElement_instances, "m", _ActionMenuElement_hide).call(this);
|
315
314
|
}
|
316
|
-
const activeElement = this.ownerDocument.activeElement;
|
317
|
-
const lostFocus = this.ownerDocument.activeElement === this.ownerDocument.body;
|
318
|
-
const focusInClosedMenu = this.contains(activeElement);
|
319
|
-
if (lostFocus || focusInClosedMenu) {
|
320
|
-
setTimeout(() => { var _a; return (_a = this.invokerElement) === null || _a === void 0 ? void 0 : _a.focus(); }, 0);
|
321
|
-
}
|
322
315
|
};
|
323
|
-
// At this point, the dialog is about to open. When it opens, all other popovers (incuding
|
324
|
-
// this ActionMenu) will be closed. We listen to the toggle event here, which will fire when
|
325
|
-
// the menu is closed and manually re-open it. When the menu is re-opened, it gets added to
|
326
|
-
// the top of the popover stack. Only the item at the top of the stack will close when the
|
327
|
-
// escape key is pressed, so we add another beforetoggle listener. When the escape key is
|
328
|
-
// pressed, the listener is invoked, which manually closes the dialog. Closing the dialog
|
329
|
-
// causes the dialog's close event to fire, which
|
330
|
-
(_a = this.popoverElement) === null || _a === void 0 ? void 0 : _a.addEventListener('toggle', (toggleEvent) => {
|
331
|
-
var _a;
|
332
|
-
if (toggleEvent.newState === 'closed') {
|
333
|
-
__classPrivateFieldGet(this, _ActionMenuElement_instances, "m", _ActionMenuElement_show).call(this);
|
334
|
-
(_a = this.popoverElement) === null || _a === void 0 ? void 0 : _a.addEventListener('beforetoggle', (beforeToggleEvent) => {
|
335
|
-
if (beforeToggleEvent.newState === 'closed') {
|
336
|
-
dialog.close();
|
337
|
-
}
|
338
|
-
}, { signal });
|
339
|
-
}
|
340
|
-
}, { signal, once: true });
|
341
316
|
dialog.addEventListener('close', handleDialogClose, { signal });
|
342
317
|
dialog.addEventListener('cancel', handleDialogClose, { signal });
|
343
318
|
};
|
@@ -1 +1 @@
|
|
1
|
-
dialog.Overlay:not([open]){display:none}dialog.Overlay{color:var(--fgColor-default,var(--color-fg-default))}.Overlay--hidden{display:none!important}.Overlay--visibilityHidden{height:0;opacity:0;overflow:hidden;visibility:hidden}.Overlay{background-color:var(--overlay-bgColor,var(--color-canvas-overlay));border-radius:var(--borderRadius-large,.75rem);box-shadow:var(--shadow-floating-small,var(--color-overlay-shadow));display:flex;flex-direction:column;max-height:min(calc(100vh - 2rem),var(--overlay-height));min-width:192px;opacity:1;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--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)}@media screen and (prefers-reduced-motion:no-preference){.Overlay.Overlay--motion-scaleFade{animation:Overlay--motion-scaleFade .2s cubic-bezier(.33,1,.68,1) 0s 1 normal none running}}@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,var(--color-fg-default));z-index:1}.Overlay-header.Overlay-header--divided{box-shadow:inset 0 calc(var(--borderWidth-thin,max(1px, .0625rem))*-1) var(--borderColor-default,var(--color-border-default));padding-bottom:var(--stack-padding-condensed,.5rem)}.Overlay-header.Overlay-header--divided+.Overlay-body{padding-top:var(--stack-padding-normal,1rem)}.Overlay-header.Overlay-header--large .Overlay-headerContentWrap .Overlay-titleWrap{gap:var(--stack-gap-condensed,.5rem)}.Overlay-header.Overlay-header--large .Overlay-headerContentWrap .Overlay-titleWrap .Overlay-title{font-size:var(--text-title-size-medium,1.25rem)}.Overlay-header.Overlay-header--large .Overlay-headerContentWrap .Overlay-titleWrap .Overlay-description{font-size:var(--text-body-size-medium,.875rem)}.Overlay-header .Overlay-headerContentWrap{align-items:flex-start;display:flex;gap:var(--stack-gap-condensed,.5rem);padding:var(--stack-gap-condensed,.5rem) var(--stack-gap-condensed,.5rem) 0 var(--stack-gap-condensed,.5rem)}.Overlay-header .Overlay-headerContentWrap .Overlay-actionWrap{display:flex;flex-direction:row;gap:var(--stack-gap-condensed,.5rem)}.Overlay-header .Overlay-headerContentWrap .Overlay-titleWrap{display:flex;flex-direction:column;flex-grow:1;gap:var(--control-small-gap,.25rem);padding:calc(var(--stack-gap-condensed,.5rem)*.75) 0 calc(var(--stack-gap-condensed,.5rem)*.75) var(--stack-gap-condensed,.5rem)}.Overlay-header .Overlay-headerContentWrap .Overlay-titleWrap .Overlay-title{font-size:var(--text-body-size-medium,.875rem);font-weight:var(--base-text-weight-semibold,600);margin:0}.Overlay-header .Overlay-headerContentWrap .Overlay-titleWrap .Overlay-description{color:var(--fgColor-muted,var(--color-fg-muted));font-size:var(--text-body-size-small,.75rem);font-weight:var(--base-text-weight-normal,400);margin:0}.Overlay-body{flex-grow:1;font-size:var(--text-body-size-medium,.875rem);overflow-y:auto;padding:var(--stack-padding-normal,1rem);padding-top:0;scrollbar-width:thin}.Overlay-body.Overlay-body--paddingCondensed{padding:var(--stack-padding-condensed,.5rem);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,1rem) var(--stack-padding-normal,1rem) var(--stack-padding-normal,1rem);z-index:1}.Overlay-footer.Overlay-footer--divided{box-shadow:inset 0 var(--borderWidth-thin,max(1px,.0625rem)) var(--borderColor-default,var(--color-border-default));padding-top:var(--stack-padding-normal,1rem)}.Overlay-footer.Overlay-footer--alignStart{gap:var(--stack-gap-condensed,.5rem);justify-content:flex-start}.Overlay-footer.Overlay-footer--alignCenter{gap:var(--stack-gap-condensed,.5rem);justify-content:center}.Overlay-footer.Overlay-footer--alignEnd{gap:var(--stack-gap-condensed,.5rem);justify-content:flex-end}.Overlay-closeButton{align-self:flex-start;background-color:initial;border:var(--borderWidth-thin,max(1px,.0625rem)) solid #0000;border-radius:var(--borderRadius-medium,.375rem);color:var(--fgColor-muted,var(--color-fg-muted));cursor:pointer;display:grid;flex-shrink:0;height:var(--base-size-32,2rem);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,2rem)}.Overlay-closeButton:focus,.Overlay-closeButton:hover{background-color:var(--button-default-bgColor-hover,var(--color-btn-hover-bg));border:var(--borderWidth-thin,max(1px,.0625rem)) solid var(--control-bgColor-hover,var(--color-btn-hover-bg))}.Overlay-closeButton.close-button{border:var(--borderWidth-thin,max(1px,.0625rem)) solid #0000}.Overlay-backdrop--center{align-items:center;background-color:var(--overlay-backdrop-bgColor,var(--color-neutral-muted));bottom:0;display:flex;justify-content:center;left:0;position:fixed;right:0;top:0;z-index:999}.Overlay-backdrop--anchor{background-color:initial;position:absolute;z-index:999}.Overlay-backdrop--side{background-color:var(--overlay-backdrop-bgColor,var(--color-neutral-muted));bottom:0;display:flex;left:0;position:fixed;right:0;top:0;z-index:999}.Overlay-backdrop--side,.Overlay-backdrop--side.Overlay-backdrop--placement-left{align-items:center;justify-content:left}.Overlay-backdrop--side.Overlay-backdrop--placement-left>.Overlay{border-radius:var(--borderRadius-large,.75rem);border-bottom-left-radius:0;border-top-left-radius:0;height:100vh;max-height:unset}@media screen and (prefers-reduced-motion:no-preference){.Overlay-backdrop--side.Overlay-backdrop--placement-left>.Overlay{animation:Overlay--motion-slideInRight .25s cubic-bezier(.33,1,.68,1) 0s 1 normal none running}}.Overlay-backdrop--side.Overlay-backdrop--placement-right{align-items:center;justify-content:right}.Overlay-backdrop--side.Overlay-backdrop--placement-right>.Overlay{border-radius:var(--borderRadius-large,.75rem);border-bottom-right-radius:0;border-top-right-radius:0;height:100vh;max-height:unset}@media screen and (prefers-reduced-motion:no-preference){.Overlay-backdrop--side.Overlay-backdrop--placement-right>.Overlay{animation:Overlay--motion-slideInLeft .25s cubic-bezier(.33,1,.68,1) 0s 1 normal none running}}.Overlay-backdrop--side.Overlay-backdrop--placement-bottom{align-items:end;justify-content:center}.Overlay-backdrop--side.Overlay-backdrop--placement-bottom>.Overlay{border-radius:var(--borderRadius-large,.75rem);border-bottom-left-radius:0;border-bottom-right-radius:0;height:auto;max-height:calc(100vh - 2rem);width:100vw}@media screen and (prefers-reduced-motion:no-preference){.Overlay-backdrop--side.Overlay-backdrop--placement-bottom>.Overlay{animation:Overlay--motion-slideUp .25s cubic-bezier(.33,1,.68,1) 0s 1 normal none running}}.Overlay-backdrop--side.Overlay-backdrop--placement-top{align-items:start;justify-content:center}.Overlay-backdrop--side.Overlay-backdrop--placement-top>.Overlay{border-radius:var(--borderRadius-large,.75rem);border-top-left-radius:0;border-top-right-radius:0}@media screen and (prefers-reduced-motion:no-preference){.Overlay-backdrop--side.Overlay-backdrop--placement-top>.Overlay{animation:Overlay--motion-slideDown .25s cubic-bezier(.33,1,.68,1) 0s 1 normal none running}}.Overlay-backdrop--full{background-color:var(--overlay-backdrop-bgColor,var(--color-neutral-muted));bottom:0;display:flex;left:0;position:fixed;right:0;top:0;z-index:999}.Overlay-backdrop--full .Overlay{border-radius:unset!important;flex-grow:1;height:100%;max-height:100vh;max-width:100vw;width:100%}@media (max-width:767px){.Overlay-backdrop--center-whenNarrow{align-items:center;background-color:var(--overlay-backdrop-bgColor,var(--color-neutral-muted));bottom:0;display:flex;justify-content:center;left:0;position:fixed;right:0;top:0;z-index:999}.Overlay-backdrop--anchor-whenNarrow{background-color:initial;position:absolute;z-index:999}.Overlay-backdrop--side-whenNarrow{background-color:var(--overlay-backdrop-bgColor,var(--color-neutral-muted));bottom:0;display:flex;left:0;position:fixed;right:0;top:0;z-index:999}.Overlay-backdrop--side-whenNarrow,.Overlay-backdrop--side-whenNarrow.Overlay-backdrop--placement-left-whenNarrow{align-items:center;justify-content:left}.Overlay-backdrop--side-whenNarrow.Overlay-backdrop--placement-left-whenNarrow>.Overlay-whenNarrow{border-radius:var(--borderRadius-large,.75rem);border-bottom-left-radius:0;border-top-left-radius:0;height:100vh;max-height:unset}@media screen and (prefers-reduced-motion:no-preference){.Overlay-backdrop--side-whenNarrow.Overlay-backdrop--placement-left-whenNarrow>.Overlay-whenNarrow{animation:Overlay--motion-slideInRight .25s cubic-bezier(.33,1,.68,1) 0s 1 normal none running}}.Overlay-backdrop--side-whenNarrow.Overlay-backdrop--placement-right-whenNarrow{align-items:center;justify-content:right}.Overlay-backdrop--side-whenNarrow.Overlay-backdrop--placement-right-whenNarrow>.Overlay-whenNarrow{border-radius:var(--borderRadius-large,.75rem);border-bottom-right-radius:0;border-top-right-radius:0;height:100vh;max-height:unset}@media screen and (prefers-reduced-motion:no-preference){.Overlay-backdrop--side-whenNarrow.Overlay-backdrop--placement-right-whenNarrow>.Overlay-whenNarrow{animation:Overlay--motion-slideInLeft .25s cubic-bezier(.33,1,.68,1) 0s 1 normal none running}}.Overlay-backdrop--side-whenNarrow.Overlay-backdrop--placement-bottom-whenNarrow{align-items:end;justify-content:center}.Overlay-backdrop--side-whenNarrow.Overlay-backdrop--placement-bottom-whenNarrow>.Overlay-whenNarrow{border-radius:var(--borderRadius-large,.75rem);border-bottom-left-radius:0;border-bottom-right-radius:0;height:auto;max-height:calc(100vh - 2rem);width:100vw}@media screen and (prefers-reduced-motion:no-preference){.Overlay-backdrop--side-whenNarrow.Overlay-backdrop--placement-bottom-whenNarrow>.Overlay-whenNarrow{animation:Overlay--motion-slideUp .25s cubic-bezier(.33,1,.68,1) 0s 1 normal none running}}.Overlay-backdrop--side-whenNarrow.Overlay-backdrop--placement-top-whenNarrow{align-items:start;justify-content:center}.Overlay-backdrop--side-whenNarrow.Overlay-backdrop--placement-top-whenNarrow>.Overlay-whenNarrow{border-radius:var(--borderRadius-large,.75rem);border-top-left-radius:0;border-top-right-radius:0}@media screen and (prefers-reduced-motion:no-preference){.Overlay-backdrop--side-whenNarrow.Overlay-backdrop--placement-top-whenNarrow>.Overlay-whenNarrow{animation:Overlay--motion-slideDown .25s cubic-bezier(.33,1,.68,1) 0s 1 normal none running}}.Overlay-backdrop--full-whenNarrow{background-color:var(--overlay-backdrop-bgColor,var(--color-neutral-muted));bottom:0;display:flex;left:0;position:fixed;right:0;top:0;z-index:999}.Overlay-backdrop--full-whenNarrow .Overlay{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
|
+
.Overlay--hidden{display:none!important}.Overlay--visibilityHidden{height:0;opacity:0;overflow:hidden;visibility:hidden}.Overlay{background-color:var(--overlay-bgColor,var(--color-canvas-overlay));border-radius:var(--borderRadius-large,.75rem);box-shadow:var(--shadow-floating-small,var(--color-overlay-shadow));display:flex;flex-direction:column;max-height:min(calc(100vh - 2rem),var(--overlay-height));min-width:192px;opacity:1;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--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)}@media screen and (prefers-reduced-motion:no-preference){.Overlay.Overlay--motion-scaleFade{animation:Overlay--motion-scaleFade .2s cubic-bezier(.33,1,.68,1) 0s 1 normal none running}}@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,var(--color-fg-default));z-index:1}.Overlay-header.Overlay-header--divided{box-shadow:inset 0 calc(var(--borderWidth-thin,max(1px, .0625rem))*-1) var(--borderColor-default,var(--color-border-default));padding-bottom:var(--stack-padding-condensed,.5rem)}.Overlay-header.Overlay-header--divided+.Overlay-body{padding-top:var(--stack-padding-normal,1rem)}.Overlay-header.Overlay-header--large .Overlay-headerContentWrap .Overlay-titleWrap{gap:var(--stack-gap-condensed,.5rem)}.Overlay-header.Overlay-header--large .Overlay-headerContentWrap .Overlay-titleWrap .Overlay-title{font-size:var(--text-title-size-medium,1.25rem)}.Overlay-header.Overlay-header--large .Overlay-headerContentWrap .Overlay-titleWrap .Overlay-description{font-size:var(--text-body-size-medium,.875rem)}.Overlay-header .Overlay-headerContentWrap{align-items:flex-start;display:flex;gap:var(--stack-gap-condensed,.5rem);padding:var(--stack-gap-condensed,.5rem) var(--stack-gap-condensed,.5rem) 0 var(--stack-gap-condensed,.5rem)}.Overlay-header .Overlay-headerContentWrap .Overlay-actionWrap{display:flex;flex-direction:row;gap:var(--stack-gap-condensed,.5rem)}.Overlay-header .Overlay-headerContentWrap .Overlay-titleWrap{display:flex;flex-direction:column;flex-grow:1;gap:var(--control-small-gap,.25rem);padding:calc(var(--stack-gap-condensed,.5rem)*.75) 0 calc(var(--stack-gap-condensed,.5rem)*.75) var(--stack-gap-condensed,.5rem)}.Overlay-header .Overlay-headerContentWrap .Overlay-titleWrap .Overlay-title{font-size:var(--text-body-size-medium,.875rem);font-weight:var(--base-text-weight-semibold,600);margin:0}.Overlay-header .Overlay-headerContentWrap .Overlay-titleWrap .Overlay-description{color:var(--fgColor-muted,var(--color-fg-muted));font-size:var(--text-body-size-small,.75rem);font-weight:var(--base-text-weight-normal,400);margin:0}.Overlay-body{flex-grow:1;font-size:var(--text-body-size-medium,.875rem);overflow-y:auto;padding:var(--stack-padding-normal,1rem);padding-top:0;scrollbar-width:thin}.Overlay-body.Overlay-body--paddingCondensed{padding:var(--stack-padding-condensed,.5rem);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,1rem) var(--stack-padding-normal,1rem) var(--stack-padding-normal,1rem);z-index:1}.Overlay-footer.Overlay-footer--divided{box-shadow:inset 0 var(--borderWidth-thin,max(1px,.0625rem)) var(--borderColor-default,var(--color-border-default));padding-top:var(--stack-padding-normal,1rem)}.Overlay-footer.Overlay-footer--alignStart{gap:var(--stack-gap-condensed,.5rem);justify-content:flex-start}.Overlay-footer.Overlay-footer--alignCenter{gap:var(--stack-gap-condensed,.5rem);justify-content:center}.Overlay-footer.Overlay-footer--alignEnd{gap:var(--stack-gap-condensed,.5rem);justify-content:flex-end}.Overlay-closeButton{align-self:flex-start;background-color:initial;border:var(--borderWidth-thin,max(1px,.0625rem)) solid #0000;border-radius:var(--borderRadius-medium,.375rem);color:var(--fgColor-muted,var(--color-fg-muted));cursor:pointer;display:grid;flex-shrink:0;height:var(--base-size-32,2rem);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,2rem)}.Overlay-closeButton:focus,.Overlay-closeButton:hover{background-color:var(--button-default-bgColor-hover,var(--color-btn-hover-bg));border:var(--borderWidth-thin,max(1px,.0625rem)) solid var(--control-bgColor-hover,var(--color-btn-hover-bg))}.Overlay-closeButton.close-button{border:var(--borderWidth-thin,max(1px,.0625rem)) solid #0000}.Overlay-backdrop--center{align-items:center;background-color:var(--overlay-backdrop-bgColor,var(--color-neutral-muted));bottom:0;display:flex;justify-content:center;left:0;position:fixed;right:0;top:0;z-index:999}.Overlay-backdrop--anchor{background-color:initial;position:absolute;z-index:999}.Overlay-backdrop--side{background-color:var(--overlay-backdrop-bgColor,var(--color-neutral-muted));bottom:0;display:flex;left:0;position:fixed;right:0;top:0;z-index:999}.Overlay-backdrop--side,.Overlay-backdrop--side.Overlay-backdrop--placement-left{align-items:center;justify-content:left}.Overlay-backdrop--side.Overlay-backdrop--placement-left>.Overlay{border-radius:var(--borderRadius-large,.75rem);border-bottom-left-radius:0;border-top-left-radius:0;height:100vh;max-height:unset}@media screen and (prefers-reduced-motion:no-preference){.Overlay-backdrop--side.Overlay-backdrop--placement-left>.Overlay{animation:Overlay--motion-slideInRight .25s cubic-bezier(.33,1,.68,1) 0s 1 normal none running}}.Overlay-backdrop--side.Overlay-backdrop--placement-right{align-items:center;justify-content:right}.Overlay-backdrop--side.Overlay-backdrop--placement-right>.Overlay{border-radius:var(--borderRadius-large,.75rem);border-bottom-right-radius:0;border-top-right-radius:0;height:100vh;max-height:unset}@media screen and (prefers-reduced-motion:no-preference){.Overlay-backdrop--side.Overlay-backdrop--placement-right>.Overlay{animation:Overlay--motion-slideInLeft .25s cubic-bezier(.33,1,.68,1) 0s 1 normal none running}}.Overlay-backdrop--side.Overlay-backdrop--placement-bottom{align-items:end;justify-content:center}.Overlay-backdrop--side.Overlay-backdrop--placement-bottom>.Overlay{border-radius:var(--borderRadius-large,.75rem);border-bottom-left-radius:0;border-bottom-right-radius:0;height:auto;max-height:calc(100vh - 2rem);width:100vw}@media screen and (prefers-reduced-motion:no-preference){.Overlay-backdrop--side.Overlay-backdrop--placement-bottom>.Overlay{animation:Overlay--motion-slideUp .25s cubic-bezier(.33,1,.68,1) 0s 1 normal none running}}.Overlay-backdrop--side.Overlay-backdrop--placement-top{align-items:start;justify-content:center}.Overlay-backdrop--side.Overlay-backdrop--placement-top>.Overlay{border-radius:var(--borderRadius-large,.75rem);border-top-left-radius:0;border-top-right-radius:0}@media screen and (prefers-reduced-motion:no-preference){.Overlay-backdrop--side.Overlay-backdrop--placement-top>.Overlay{animation:Overlay--motion-slideDown .25s cubic-bezier(.33,1,.68,1) 0s 1 normal none running}}.Overlay-backdrop--full{background-color:var(--overlay-backdrop-bgColor,var(--color-neutral-muted));bottom:0;display:flex;left:0;position:fixed;right:0;top:0;z-index:999}.Overlay-backdrop--full .Overlay{border-radius:unset!important;flex-grow:1;height:100%;max-height:100vh;max-width:100vw;width:100%}@media (max-width:767px){.Overlay-backdrop--center-whenNarrow{align-items:center;background-color:var(--overlay-backdrop-bgColor,var(--color-neutral-muted));bottom:0;display:flex;justify-content:center;left:0;position:fixed;right:0;top:0;z-index:999}.Overlay-backdrop--anchor-whenNarrow{background-color:initial;position:absolute;z-index:999}.Overlay-backdrop--side-whenNarrow{background-color:var(--overlay-backdrop-bgColor,var(--color-neutral-muted));bottom:0;display:flex;left:0;position:fixed;right:0;top:0;z-index:999}.Overlay-backdrop--side-whenNarrow,.Overlay-backdrop--side-whenNarrow.Overlay-backdrop--placement-left-whenNarrow{align-items:center;justify-content:left}.Overlay-backdrop--side-whenNarrow.Overlay-backdrop--placement-left-whenNarrow>.Overlay-whenNarrow{border-radius:var(--borderRadius-large,.75rem);border-bottom-left-radius:0;border-top-left-radius:0;height:100vh;max-height:unset}@media screen and (prefers-reduced-motion:no-preference){.Overlay-backdrop--side-whenNarrow.Overlay-backdrop--placement-left-whenNarrow>.Overlay-whenNarrow{animation:Overlay--motion-slideInRight .25s cubic-bezier(.33,1,.68,1) 0s 1 normal none running}}.Overlay-backdrop--side-whenNarrow.Overlay-backdrop--placement-right-whenNarrow{align-items:center;justify-content:right}.Overlay-backdrop--side-whenNarrow.Overlay-backdrop--placement-right-whenNarrow>.Overlay-whenNarrow{border-radius:var(--borderRadius-large,.75rem);border-bottom-right-radius:0;border-top-right-radius:0;height:100vh;max-height:unset}@media screen and (prefers-reduced-motion:no-preference){.Overlay-backdrop--side-whenNarrow.Overlay-backdrop--placement-right-whenNarrow>.Overlay-whenNarrow{animation:Overlay--motion-slideInLeft .25s cubic-bezier(.33,1,.68,1) 0s 1 normal none running}}.Overlay-backdrop--side-whenNarrow.Overlay-backdrop--placement-bottom-whenNarrow{align-items:end;justify-content:center}.Overlay-backdrop--side-whenNarrow.Overlay-backdrop--placement-bottom-whenNarrow>.Overlay-whenNarrow{border-radius:var(--borderRadius-large,.75rem);border-bottom-left-radius:0;border-bottom-right-radius:0;height:auto;max-height:calc(100vh - 2rem);width:100vw}@media screen and (prefers-reduced-motion:no-preference){.Overlay-backdrop--side-whenNarrow.Overlay-backdrop--placement-bottom-whenNarrow>.Overlay-whenNarrow{animation:Overlay--motion-slideUp .25s cubic-bezier(.33,1,.68,1) 0s 1 normal none running}}.Overlay-backdrop--side-whenNarrow.Overlay-backdrop--placement-top-whenNarrow{align-items:start;justify-content:center}.Overlay-backdrop--side-whenNarrow.Overlay-backdrop--placement-top-whenNarrow>.Overlay-whenNarrow{border-radius:var(--borderRadius-large,.75rem);border-top-left-radius:0;border-top-right-radius:0}@media screen and (prefers-reduced-motion:no-preference){.Overlay-backdrop--side-whenNarrow.Overlay-backdrop--placement-top-whenNarrow>.Overlay-whenNarrow{animation:Overlay--motion-slideDown .25s cubic-bezier(.33,1,.68,1) 0s 1 normal none running}}.Overlay-backdrop--full-whenNarrow{background-color:var(--overlay-backdrop-bgColor,var(--color-neutral-muted));bottom:0;display:flex;left:0;position:fixed;right:0;top:0;z-index:999}.Overlay-backdrop--full-whenNarrow .Overlay{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%)}}
|
@@ -0,0 +1,18 @@
|
|
1
|
+
export declare class ModalDialogElement extends HTMLElement {
|
2
|
+
#private;
|
3
|
+
openButton: HTMLButtonElement | null;
|
4
|
+
get open(): boolean;
|
5
|
+
set open(value: boolean);
|
6
|
+
get showButtons(): NodeList;
|
7
|
+
connectedCallback(): void;
|
8
|
+
show(): void;
|
9
|
+
close(closedNotCancelled?: boolean): void;
|
10
|
+
}
|
11
|
+
declare global {
|
12
|
+
interface Window {
|
13
|
+
ModalDialogElement: typeof ModalDialogElement;
|
14
|
+
}
|
15
|
+
interface HTMLElementTagNameMap {
|
16
|
+
'modal-dialog': ModalDialogElement;
|
17
|
+
}
|
18
|
+
}
|
@@ -0,0 +1,186 @@
|
|
1
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
2
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
3
|
+
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");
|
4
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
5
|
+
};
|
6
|
+
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
7
|
+
if (kind === "m") throw new TypeError("Private method is not writable");
|
8
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
9
|
+
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");
|
10
|
+
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
11
|
+
};
|
12
|
+
var _ModalDialogElement_instances, _ModalDialogElement_focusAbortController, _ModalDialogElement_overlayBackdrop_get, _ModalDialogElement_keydown;
|
13
|
+
import { focusTrap } from '@primer/behaviors';
|
14
|
+
import { getFocusableChild } from '@primer/behaviors/utils';
|
15
|
+
function focusIfNeeded(elem) {
|
16
|
+
if (document.activeElement !== elem) {
|
17
|
+
elem === null || elem === void 0 ? void 0 : elem.focus();
|
18
|
+
}
|
19
|
+
}
|
20
|
+
const overlayStack = [];
|
21
|
+
function clickHandler(event) {
|
22
|
+
const target = event.target;
|
23
|
+
const button = target === null || target === void 0 ? void 0 : target.closest('button');
|
24
|
+
if (!button || button.hasAttribute('disabled') || button.getAttribute('aria-disabled') === 'true')
|
25
|
+
return;
|
26
|
+
// If the user is clicking a valid dialog trigger
|
27
|
+
let dialogId = button === null || button === void 0 ? void 0 : button.getAttribute('data-show-dialog-id');
|
28
|
+
if (dialogId) {
|
29
|
+
event.stopPropagation();
|
30
|
+
const dialog = document.getElementById(dialogId);
|
31
|
+
if (dialog instanceof ModalDialogElement) {
|
32
|
+
dialog.openButton = button;
|
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();
|
38
|
+
return;
|
39
|
+
}
|
40
|
+
}
|
41
|
+
if (!overlayStack.length)
|
42
|
+
return;
|
43
|
+
dialogId = button.getAttribute('data-close-dialog-id') || button.getAttribute('data-submit-dialog-id');
|
44
|
+
if (dialogId) {
|
45
|
+
const dialog = document.getElementById(dialogId);
|
46
|
+
if (dialog instanceof ModalDialogElement) {
|
47
|
+
const dialogIndex = overlayStack.findIndex(ele => ele.id === dialogId);
|
48
|
+
overlayStack.splice(dialogIndex, 1);
|
49
|
+
dialog.close(button.hasAttribute('data-submit-dialog-id'));
|
50
|
+
}
|
51
|
+
}
|
52
|
+
}
|
53
|
+
function keydownHandler(event) {
|
54
|
+
if (!(event instanceof KeyboardEvent) ||
|
55
|
+
event.type !== 'keydown' ||
|
56
|
+
event.key !== 'Enter' ||
|
57
|
+
event.ctrlKey ||
|
58
|
+
event.altKey ||
|
59
|
+
event.metaKey ||
|
60
|
+
event.shiftKey)
|
61
|
+
return;
|
62
|
+
clickHandler(event);
|
63
|
+
}
|
64
|
+
function mousedownHandler(event) {
|
65
|
+
const target = event.target;
|
66
|
+
if (target === null || target === void 0 ? void 0 : target.closest('button'))
|
67
|
+
return;
|
68
|
+
// Find the top level dialog that is open.
|
69
|
+
const topLevelDialog = overlayStack[overlayStack.length - 1];
|
70
|
+
if (!topLevelDialog)
|
71
|
+
return;
|
72
|
+
// Check if the mousedown happened outside the boundary of the top level dialog
|
73
|
+
const mouseDownOutsideDialog = !target.closest(`#${topLevelDialog.getAttribute('id')}`);
|
74
|
+
// Only close dialog if it's a click outside the dialog and the dialog has a button?
|
75
|
+
if (mouseDownOutsideDialog) {
|
76
|
+
target.ownerDocument.addEventListener('mouseup', (upEvent) => {
|
77
|
+
if (upEvent.target === target) {
|
78
|
+
overlayStack.pop();
|
79
|
+
topLevelDialog.close();
|
80
|
+
}
|
81
|
+
}, { once: true });
|
82
|
+
}
|
83
|
+
}
|
84
|
+
export class ModalDialogElement extends HTMLElement {
|
85
|
+
constructor() {
|
86
|
+
super(...arguments);
|
87
|
+
_ModalDialogElement_instances.add(this);
|
88
|
+
//TODO: Do we remove the abortController from focusTrap?
|
89
|
+
_ModalDialogElement_focusAbortController.set(this, new AbortController());
|
90
|
+
}
|
91
|
+
get open() {
|
92
|
+
return this.hasAttribute('open');
|
93
|
+
}
|
94
|
+
set open(value) {
|
95
|
+
var _a, _b, _c, _d;
|
96
|
+
if (value) {
|
97
|
+
if (this.open)
|
98
|
+
return;
|
99
|
+
this.setAttribute('open', '');
|
100
|
+
this.setAttribute('aria-disabled', 'false');
|
101
|
+
document.body.style.paddingRight = `${window.innerWidth - document.body.clientWidth}px`;
|
102
|
+
document.body.style.overflow = 'hidden';
|
103
|
+
(_a = __classPrivateFieldGet(this, _ModalDialogElement_instances, "a", _ModalDialogElement_overlayBackdrop_get)) === null || _a === void 0 ? void 0 : _a.classList.remove('Overlay--hidden');
|
104
|
+
if (__classPrivateFieldGet(this, _ModalDialogElement_focusAbortController, "f").signal.aborted) {
|
105
|
+
__classPrivateFieldSet(this, _ModalDialogElement_focusAbortController, new AbortController(), "f");
|
106
|
+
}
|
107
|
+
focusTrap(this, this.querySelector('[autofocus]'), __classPrivateFieldGet(this, _ModalDialogElement_focusAbortController, "f").signal);
|
108
|
+
overlayStack.push(this);
|
109
|
+
}
|
110
|
+
else {
|
111
|
+
if (!this.open)
|
112
|
+
return;
|
113
|
+
this.removeAttribute('open');
|
114
|
+
this.setAttribute('aria-disabled', 'true');
|
115
|
+
(_b = __classPrivateFieldGet(this, _ModalDialogElement_instances, "a", _ModalDialogElement_overlayBackdrop_get)) === null || _b === void 0 ? void 0 : _b.classList.add('Overlay--hidden');
|
116
|
+
document.body.style.paddingRight = '0';
|
117
|
+
document.body.style.overflow = 'initial';
|
118
|
+
__classPrivateFieldGet(this, _ModalDialogElement_focusAbortController, "f").abort();
|
119
|
+
// if #openButton is a child of a menu, we need to focus a suitable child of the menu
|
120
|
+
// element since it is expected for the menu to close on click
|
121
|
+
const menu = ((_c = this.openButton) === null || _c === void 0 ? void 0 : _c.closest('details')) || ((_d = this.openButton) === null || _d === void 0 ? void 0 : _d.closest('action-menu'));
|
122
|
+
if (menu) {
|
123
|
+
focusIfNeeded(getFocusableChild(menu));
|
124
|
+
}
|
125
|
+
else {
|
126
|
+
focusIfNeeded(this.openButton);
|
127
|
+
}
|
128
|
+
this.openButton = null;
|
129
|
+
}
|
130
|
+
}
|
131
|
+
get showButtons() {
|
132
|
+
// Dialogs may also be opened from any arbitrary button with a matching show-dialog-id data attribute
|
133
|
+
return document.querySelectorAll(`button[data-show-dialog-id='${this.id}']`);
|
134
|
+
}
|
135
|
+
connectedCallback() {
|
136
|
+
if (!this.hasAttribute('role'))
|
137
|
+
this.setAttribute('role', 'dialog');
|
138
|
+
document.addEventListener('click', clickHandler);
|
139
|
+
document.addEventListener('keydown', keydownHandler);
|
140
|
+
document.addEventListener('mousedown', mousedownHandler);
|
141
|
+
this.addEventListener('keydown', e => __classPrivateFieldGet(this, _ModalDialogElement_instances, "m", _ModalDialogElement_keydown).call(this, e));
|
142
|
+
}
|
143
|
+
show() {
|
144
|
+
this.open = true;
|
145
|
+
}
|
146
|
+
close(closedNotCancelled = false) {
|
147
|
+
if (this.open === false)
|
148
|
+
return;
|
149
|
+
const eventType = closedNotCancelled ? 'close' : 'cancel';
|
150
|
+
const dialogEvent = new Event(eventType);
|
151
|
+
this.dispatchEvent(dialogEvent);
|
152
|
+
this.open = false;
|
153
|
+
}
|
154
|
+
}
|
155
|
+
_ModalDialogElement_focusAbortController = new WeakMap(), _ModalDialogElement_instances = new WeakSet(), _ModalDialogElement_overlayBackdrop_get = function _ModalDialogElement_overlayBackdrop_get() {
|
156
|
+
var _a;
|
157
|
+
if ((_a = this.parentElement) === null || _a === void 0 ? void 0 : _a.hasAttribute('data-modal-dialog-overlay')) {
|
158
|
+
return this.parentElement;
|
159
|
+
}
|
160
|
+
return null;
|
161
|
+
}, _ModalDialogElement_keydown = function _ModalDialogElement_keydown(event) {
|
162
|
+
if (!(event instanceof KeyboardEvent))
|
163
|
+
return;
|
164
|
+
if (event.isComposing)
|
165
|
+
return;
|
166
|
+
if (!this.open)
|
167
|
+
return;
|
168
|
+
switch (event.key) {
|
169
|
+
case 'Escape':
|
170
|
+
this.close();
|
171
|
+
event.preventDefault();
|
172
|
+
event.stopPropagation();
|
173
|
+
break;
|
174
|
+
case 'Enter': {
|
175
|
+
const target = event.target;
|
176
|
+
if (target.getAttribute('data-close-dialog-id') === this.id) {
|
177
|
+
event.stopPropagation();
|
178
|
+
}
|
179
|
+
break;
|
180
|
+
}
|
181
|
+
}
|
182
|
+
};
|
183
|
+
if (!window.customElements.get('modal-dialog')) {
|
184
|
+
window.ModalDialogElement = ModalDialogElement;
|
185
|
+
window.customElements.define('modal-dialog', ModalDialogElement);
|
186
|
+
}
|
@@ -1 +1 @@
|
|
1
|
-
anchored-position[popover]{border-width:0;min-width:192px;overflow:visible;padding:0;position:absolute}
|
1
|
+
anchored-position[popover]{border-width:0;min-width:192px;overflow:visible;padding:0;position:absolute}anchored-position:not(.Overlay){background:none}.Overlay[popover]:not(:popover-open){display:none}anchored-position.not-anchored::backdrop{background-color:var(--overlay-backdrop-bgColor,var(--color-neutral-muted))}@media (forced-colors:active){.Overlay{outline:1px solid #0000}}
|
@@ -2,9 +2,10 @@ import '@github/include-fragment-element';
|
|
2
2
|
import './alpha/action_bar_element';
|
3
3
|
import './alpha/dropdown';
|
4
4
|
import './anchored_position';
|
5
|
-
import './dialog_helper';
|
6
5
|
import './focus_group';
|
6
|
+
import './scrollable_region';
|
7
7
|
import './alpha/image_crop';
|
8
|
+
import './alpha/modal_dialog';
|
8
9
|
import './beta/nav_list';
|
9
10
|
import './beta/nav_list_group_element';
|
10
11
|
import './alpha/segmented_control';
|
@@ -2,9 +2,10 @@ import '@github/include-fragment-element';
|
|
2
2
|
import './alpha/action_bar_element';
|
3
3
|
import './alpha/dropdown';
|
4
4
|
import './anchored_position';
|
5
|
-
import './dialog_helper';
|
6
5
|
import './focus_group';
|
6
|
+
import './scrollable_region';
|
7
7
|
import './alpha/image_crop';
|
8
|
+
import './alpha/modal_dialog';
|
8
9
|
import './beta/nav_list';
|
9
10
|
import './beta/nav_list_group_element';
|
10
11
|
import './alpha/segmented_control';
|
@@ -0,0 +1,13 @@
|
|
1
|
+
export declare class ScrollableRegionElement extends HTMLElement {
|
2
|
+
hasOverflow: boolean;
|
3
|
+
labelledBy: string;
|
4
|
+
observer: ResizeObserver;
|
5
|
+
connectedCallback(): void;
|
6
|
+
disconnectedCallback(): void;
|
7
|
+
attributeChangedCallback(name: string): void;
|
8
|
+
}
|
9
|
+
declare global {
|
10
|
+
interface Window {
|
11
|
+
ScrollableRegionElement: typeof ScrollableRegionElement;
|
12
|
+
}
|
13
|
+
}
|
@@ -0,0 +1,52 @@
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
6
|
+
};
|
7
|
+
import { controller, attr } from '@github/catalyst';
|
8
|
+
let ScrollableRegionElement = class ScrollableRegionElement extends HTMLElement {
|
9
|
+
constructor() {
|
10
|
+
super(...arguments);
|
11
|
+
this.hasOverflow = false;
|
12
|
+
this.labelledBy = '';
|
13
|
+
}
|
14
|
+
connectedCallback() {
|
15
|
+
this.style.overflow = 'auto';
|
16
|
+
this.observer = new ResizeObserver(entries => {
|
17
|
+
for (const entry of entries) {
|
18
|
+
this.hasOverflow =
|
19
|
+
entry.target.scrollHeight > entry.target.clientHeight || entry.target.scrollWidth > entry.target.clientWidth;
|
20
|
+
}
|
21
|
+
});
|
22
|
+
this.observer.observe(this);
|
23
|
+
}
|
24
|
+
disconnectedCallback() {
|
25
|
+
this.observer.disconnect();
|
26
|
+
}
|
27
|
+
attributeChangedCallback(name) {
|
28
|
+
if (name === 'data-has-overflow') {
|
29
|
+
if (this.hasOverflow) {
|
30
|
+
this.setAttribute('aria-labelledby', this.labelledBy);
|
31
|
+
this.setAttribute('role', 'region');
|
32
|
+
this.setAttribute('tabindex', '0');
|
33
|
+
}
|
34
|
+
else {
|
35
|
+
this.removeAttribute('aria-labelledby');
|
36
|
+
this.removeAttribute('role');
|
37
|
+
this.removeAttribute('tabindex');
|
38
|
+
}
|
39
|
+
}
|
40
|
+
}
|
41
|
+
};
|
42
|
+
__decorate([
|
43
|
+
attr
|
44
|
+
], ScrollableRegionElement.prototype, "hasOverflow", void 0);
|
45
|
+
__decorate([
|
46
|
+
attr
|
47
|
+
], ScrollableRegionElement.prototype, "labelledBy", void 0);
|
48
|
+
ScrollableRegionElement = __decorate([
|
49
|
+
controller
|
50
|
+
], ScrollableRegionElement);
|
51
|
+
export { ScrollableRegionElement };
|
52
|
+
window.ScrollableRegionElement = ScrollableRegionElement;
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@primer/view-components",
|
3
|
-
"version": "0.16.0-rc.
|
3
|
+
"version": "0.16.0-rc.e938d510",
|
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",
|
@@ -62,7 +62,7 @@
|
|
62
62
|
"@github/markdownlint-github": "^0.6.0",
|
63
63
|
"@github/prettier-config": "0.0.6",
|
64
64
|
"@playwright/test": "^1.35.1",
|
65
|
-
"@primer/css": "
|
65
|
+
"@primer/css": "21.1.0",
|
66
66
|
"@primer/primitives": "7.15.4",
|
67
67
|
"@primer/stylelint-config": "^12.7.2",
|
68
68
|
"@rollup/plugin-node-resolve": "^15.2.3",
|
@@ -1,15 +0,0 @@
|
|
1
|
-
export declare class DialogHelperElement extends HTMLElement {
|
2
|
-
#private;
|
3
|
-
get dialog(): HTMLDialogElement | null;
|
4
|
-
connectedCallback(): void;
|
5
|
-
disconnectedCallback(): void;
|
6
|
-
handleEvent(event: MouseEvent): void;
|
7
|
-
}
|
8
|
-
declare global {
|
9
|
-
interface Window {
|
10
|
-
DialogHelperElement: typeof DialogHelperElement;
|
11
|
-
}
|
12
|
-
interface HTMLElementTagNameMap {
|
13
|
-
'dialog-helper': DialogHelperElement;
|
14
|
-
}
|
15
|
-
}
|
@@ -1,15 +0,0 @@
|
|
1
|
-
export declare class DialogHelperElement extends HTMLElement {
|
2
|
-
#private;
|
3
|
-
get dialog(): HTMLDialogElement | null;
|
4
|
-
connectedCallback(): void;
|
5
|
-
disconnectedCallback(): void;
|
6
|
-
handleEvent(event: MouseEvent): void;
|
7
|
-
}
|
8
|
-
declare global {
|
9
|
-
interface Window {
|
10
|
-
DialogHelperElement: typeof DialogHelperElement;
|
11
|
-
}
|
12
|
-
interface HTMLElementTagNameMap {
|
13
|
-
'dialog-helper': DialogHelperElement;
|
14
|
-
}
|
15
|
-
}
|
@@ -1,77 +0,0 @@
|
|
1
|
-
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
2
|
-
if (kind === "m") throw new TypeError("Private method is not writable");
|
3
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
4
|
-
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");
|
5
|
-
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
6
|
-
};
|
7
|
-
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
8
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
9
|
-
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
10
|
-
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
11
|
-
};
|
12
|
-
var _DialogHelperElement_abortController;
|
13
|
-
function dialogInvokerButtonHandler(event) {
|
14
|
-
const target = event.target;
|
15
|
-
const button = target === null || target === void 0 ? void 0 : target.closest('button');
|
16
|
-
if (!button || button.hasAttribute('disabled') || button.getAttribute('aria-disabled') === 'true')
|
17
|
-
return;
|
18
|
-
// If the user is clicking a valid dialog trigger
|
19
|
-
let dialogId = button === null || button === void 0 ? void 0 : button.getAttribute('data-show-dialog-id');
|
20
|
-
if (dialogId) {
|
21
|
-
event.stopPropagation();
|
22
|
-
const dialog = document.getElementById(dialogId);
|
23
|
-
if (dialog instanceof HTMLDialogElement) {
|
24
|
-
dialog.showModal();
|
25
|
-
// A buttons default behaviour in some browsers it to send a pointer event
|
26
|
-
// If the behaviour is allowed through the dialog will be shown but then
|
27
|
-
// quickly hidden- as if it were never shown. This prevents that.
|
28
|
-
event.preventDefault();
|
29
|
-
}
|
30
|
-
}
|
31
|
-
dialogId = button.getAttribute('data-close-dialog-id') || button.getAttribute('data-submit-dialog-id');
|
32
|
-
if (dialogId) {
|
33
|
-
const dialog = document.getElementById(dialogId);
|
34
|
-
if (dialog instanceof HTMLDialogElement && dialog.open) {
|
35
|
-
dialog.close();
|
36
|
-
}
|
37
|
-
}
|
38
|
-
}
|
39
|
-
export class DialogHelperElement extends HTMLElement {
|
40
|
-
constructor() {
|
41
|
-
super(...arguments);
|
42
|
-
_DialogHelperElement_abortController.set(this, null);
|
43
|
-
}
|
44
|
-
get dialog() {
|
45
|
-
return this.querySelector('dialog');
|
46
|
-
}
|
47
|
-
connectedCallback() {
|
48
|
-
const { signal } = (__classPrivateFieldSet(this, _DialogHelperElement_abortController, new AbortController(), "f"));
|
49
|
-
document.addEventListener('click', dialogInvokerButtonHandler);
|
50
|
-
document.addEventListener('click', this, { signal });
|
51
|
-
}
|
52
|
-
disconnectedCallback() {
|
53
|
-
var _a;
|
54
|
-
(_a = __classPrivateFieldGet(this, _DialogHelperElement_abortController, "f")) === null || _a === void 0 ? void 0 : _a.abort();
|
55
|
-
}
|
56
|
-
handleEvent(event) {
|
57
|
-
const target = event.target;
|
58
|
-
const dialog = this.dialog;
|
59
|
-
if (!(dialog === null || dialog === void 0 ? void 0 : dialog.open))
|
60
|
-
return;
|
61
|
-
if ((target === null || target === void 0 ? void 0 : target.closest('dialog')) !== dialog)
|
62
|
-
return;
|
63
|
-
const rect = dialog.getBoundingClientRect();
|
64
|
-
const clickWasInsideDialog = rect.top <= event.clientY &&
|
65
|
-
event.clientY <= rect.top + rect.height &&
|
66
|
-
rect.left <= event.clientX &&
|
67
|
-
event.clientX <= rect.left + rect.width;
|
68
|
-
if (!clickWasInsideDialog) {
|
69
|
-
dialog.close();
|
70
|
-
}
|
71
|
-
}
|
72
|
-
}
|
73
|
-
_DialogHelperElement_abortController = new WeakMap();
|
74
|
-
if (!window.customElements.get('dialog-helper')) {
|
75
|
-
window.DialogHelperElement = DialogHelperElement;
|
76
|
-
window.customElements.define('dialog-helper', DialogHelperElement);
|
77
|
-
}
|