@primer/view-components 0.0.0-pre.2715c38

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/LICENSE.txt +21 -0
  2. package/README.md +17 -0
  3. package/app/assets/javascripts/primer_view_components.js +2 -0
  4. package/app/assets/javascripts/primer_view_components.js.map +1 -0
  5. package/app/assets/styles/primer_view_components.css +1 -0
  6. package/app/assets/styles/primer_view_components.css.map +1 -0
  7. package/app/components/primer/alpha/modal-dialog-element.d.ts +18 -0
  8. package/app/components/primer/alpha/modal-dialog-element.js +142 -0
  9. package/app/components/primer/alpha/toggle-switch-element.d.ts +28 -0
  10. package/app/components/primer/alpha/toggle-switch-element.js +137 -0
  11. package/app/components/primer/alpha/tool-tip-element.d.ts +25 -0
  12. package/app/components/primer/alpha/tool-tip-element.js +366 -0
  13. package/app/components/primer/beta/auto_complete/auto_complete.d.ts +1 -0
  14. package/app/components/primer/beta/auto_complete/auto_complete.js +1 -0
  15. package/app/components/primer/clipboard_copy_component.d.ts +1 -0
  16. package/app/components/primer/clipboard_copy_component.js +43 -0
  17. package/app/components/primer/dropdown/menu.d.ts +1 -0
  18. package/app/components/primer/dropdown/menu.js +1 -0
  19. package/app/components/primer/dropdown.d.ts +1 -0
  20. package/app/components/primer/dropdown.js +1 -0
  21. package/app/components/primer/experimental/action-bar-menu-element.d.ts +31 -0
  22. package/app/components/primer/experimental/action-bar-menu-element.js +334 -0
  23. package/app/components/primer/experimental/action_bar.d.ts +14 -0
  24. package/app/components/primer/experimental/action_bar.js +139 -0
  25. package/app/components/primer/image_crop.d.ts +1 -0
  26. package/app/components/primer/image_crop.js +1 -0
  27. package/app/components/primer/local_time.d.ts +1 -0
  28. package/app/components/primer/local_time.js +1 -0
  29. package/app/components/primer/primer.d.ts +12 -0
  30. package/app/components/primer/primer.js +12 -0
  31. package/app/components/primer/tab_container_component.d.ts +1 -0
  32. package/app/components/primer/tab_container_component.js +1 -0
  33. package/app/components/primer/time_ago_component.d.ts +1 -0
  34. package/app/components/primer/time_ago_component.js +1 -0
  35. package/package.json +81 -0
@@ -0,0 +1 @@
1
+ :root{--primer-duration-fast:80ms;--primer-easing-easeInOut:cubic-bezier(0.65,0,0.35,1)}.Button{align-items:center;background-color:transparent;border:1px solid;border:var(--primer-borderWidth-thin,1px) solid;border-color:transparent;border-radius:6px;border-radius:var(--primer-borderRadius-medium,6px);color:var(--color-btn-text);cursor:pointer;display:flex;flex-direction:row;font-size:14px;font-size:var(--primer-text-body-size-medium,14px);font-weight:500;font-weight:var(--base-text-weight-medium,500);gap:8px;gap:var(--primer-control-medium-gap,8px);height:32px;height:var(--primer-control-medium-size,32px);justify-content:space-between;padding:0 12px;padding:0 var(--primer-control-medium-paddingInline-normal,12px);position:relative;text-align:center;transition:80ms cubic-bezier(.65,0,.35,1);transition:var(--primer-duration-fast) var(--primer-easing-easeInOut);transition-property:color,fill,background-color,border-color;-webkit-user-select:none;-moz-user-select:none;user-select:none}@media (pointer:course){.Button:before{content:"";height:100%;left:50%;min-height:48px;min-width:48px;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%);width:100%}}.Button:hover{transition-duration:80ms;transition-duration:var(--primer-duration-fast)}.Button.Button--active,.Button:active{transition:none}.Button.Button--disabled,.Button:disabled,.Button[aria-disabled=true]{box-shadow:none;cursor:not-allowed}.Button-withTooltip{display:inline-block;position:relative}a.Button,summary.Button{display:inline-flex}a.Button:hover,summary.Button:hover{text-decoration:none}.Button-content{align-items:center;display:grid;flex:1 0 auto;grid-template-areas:"leadingVisual text trailingVisual";grid-template-columns:-webkit-min-content minmax(0,auto) -webkit-min-content;grid-template-columns:min-content minmax(0,auto) min-content;place-content:center}.Button-content>:not(:last-child){margin-right:8px;margin-right:var(--primer-control-medium-gap,8px)}.Button-content--alignStart{justify-content:start}.Button-visual{display:flex;pointer-events:none}.Button-label{grid-area:text;line-height:1.42857;line-height:var(--primer-text-body-lineHeight-medium,1.42857);white-space:nowrap}.Button-leadingVisual{grid-area:leadingVisual}.Button-trailingVisual{grid-area:trailingVisual}.Button-trailingAction{margin-right:-4px;margin-right:calc(var(--base-size-4, 4px)*-1)}.Button--small{font-size:12px;font-size:var(--primer-text-body-size-small,12px);gap:4px;gap:var(--primer-control-small-gap,4px);height:28px;height:var(--primer-control-small-size,28px);padding:0 12px;padding:0 var(--primer-control-small-paddingInline-normal,12px);.Button-label{line-height:1.66667;line-height:var(--primer-text-body-lineHeight-small,1.66667)}.Button-content>:not(:last-child){margin-right:4px;margin-right:var(--primer-control-small-gap,4px)}}.Button--large{gap:8px;gap:var(--primer-control-large-gap,8px);height:40px;height:var(--primer-control-large-size,40px);padding:0 12px;padding:0 var(--primer-control-large-paddingInline-normal,12px);.Button-label{line-height:1.5;line-height:var(--primer-text-body-lineHeight-large,1.5)}.Button-content>:not(:last-child){margin-right:8px;margin-right:var(--primer-control-large-gap,8px)}}.Button--fullWidth{width:100%}.Button--primary{fill:var(--color-btn-primary-icon);background-color:var(--color-btn-primary-bg);border-color:var(--color-btn-primary-border);box-shadow:var(--color-btn-primary-shadow),var(--color-btn-primary-inset-shadow);color:var(--color-btn-primary-text)}.Button--primary:hover{background-color:var(--color-btn-primary-hover-bg);border-color:var(--color-btn-primary-hover-border)}.Button--primary:focus{box-shadow:inset 0 0 0 3px var(--color-fg-on-emphasis);outline:2px solid var(--color-accent-fg);outline-offset:-2px}.Button--primary:focus:not(:focus-visible){box-shadow:none;outline:1px solid transparent}.Button--primary:focus-visible{box-shadow:inset 0 0 0 3px var(--color-fg-on-emphasis);outline:2px solid var(--color-accent-fg);outline-offset:-2px}.Button--primary.Button--pressed,.Button--primary:active,.Button--primary[aria-pressed=true]{background-color:var(--color-btn-primary-selected-bg);box-shadow:var(--color-btn-primary-selected-shadow)}.Button--primary.Button--disabled,.Button--primary:disabled,.Button--primary[aria-disabled=true]{fill:var(--color-btn-primary-disabled-text);background-color:var(--color-btn-primary-disabled-bg);border-color:var(--color-btn-primary-disabled-border);color:var(--color-btn-primary-disabled-text)}.Button--secondary{fill:var(--color-fg-muted);background-color:var(--color-btn-bg);border-color:var(--color-btn-border);box-shadow:var(--color-btn-shadow),var(--color-btn-inset-shadow);color:var(--color-btn-text)}.Button--secondary:hover{background-color:var(--color-btn-hover-bg);border-color:var(--color-btn-hover-border)}.Button--secondary.Button--active,.Button--secondary:active{background-color:var(--color-btn-active-bg);border-color:var(--color-btn-active-border)}.Button--secondary.Button--pressed,.Button--secondary[aria-pressed=true]{background-color:var(--color-btn-selected-bg);box-shadow:var(--color-primer-shadow-inset)}.Button--secondary.Button--disabled,.Button--secondary:disabled,.Button--secondary[aria-disabled=true]{fill:var(--color-primer-fg-disabled);background-color:var(--color-btn-bg);border-color:var(--color-btn-border);color:var(--color-primer-fg-disabled)}.Button--invisible{fill:var(--color-fg-default);border:none;color:var(--color-fg-default)}.Button--invisible:hover{background-color:var(--color-action-list-item-default-hover-bg)}.Button--invisible.Button--active,.Button--invisible.Button--pressed,.Button--invisible:active,.Button--invisible[aria-pressed=true]{background-color:var(--color-action-list-item-default-active-bg)}.Button--invisible.Button--disabled,.Button--invisible:disabled,.Button--invisible[aria-disabled=true]{fill:var(--color-primer-fg-disabled);background-color:var(--color-btn-bg);border-color:var(--color-btn-border);color:var(--color-primer-fg-disabled)}.Button--invisible{.Button-label:not(:only-child){color:var(--color-btn-text)}.Button-content:not(:only-child){.Button-label{color:var(--color-btn-text)}}}.Button--danger{fill:var(--color-btn-danger-icon);background-color:var(--color-btn-bg);border-color:var(--color-btn-border);box-shadow:var(--color-btn-shadow),var(--color-btn-inset-shadow);color:var(--color-btn-danger-text)}.Button--danger:hover{fill:var(--color-btn-danger-hover-text);background-color:var(--color-btn-danger-hover-bg);border-color:var(--color-btn-danger-hover-border);box-shadow:var(--color-btn-danger-hover-shadow),var(--color-btn-danger-hover-inset-shadow);color:var(--color-btn-danger-hover-text)}.Button--danger.Button--pressed,.Button--danger:active,.Button--danger[aria-pressed=true]{fill:var(--color-btn-danger-selected-text);background-color:var(--color-btn-danger-selected-bg);border-color:var(--color-btn-danger-selected-border);box-shadow:var(--color-btn-danger-selected-shadow);color:var(--color-btn-danger-selected-text)}.Button--danger.disabled,.Button--danger:disabled,.Button--danger[aria-disabled=true]{fill:var(--color-btn-danger-disabled-text);background-color:var(--color-btn-danger-disabled-bg);border-color:var(--color-btn-border);color:var(--color-btn-danger-disabled-text)}.Button--iconOnly{display:grid;padding:initial;place-content:center;width:32px;width:var(--primer-control-medium-size,32px)}.Button--iconOnly.Button--small{width:28px;width:var(--primer-control-small-size,28px)}.Button--iconOnly.Button--large{width:40px;width:var(--primer-control-large-size,40px)}@media (pointer:coarse){.Button--iconOnly{position:relative}.Button--iconOnly:before{content:"";height:44px;height:var(--primer-control-minTarget-coarse,44px);left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%);width:44px;width:var(--primer-control-minTarget-coarse,44px)}}.ActionBar{align-items:center;display:flex;justify-content:end;position:relative}.ActionBar-divider{border-left:var(--primer-borderWidth-thin,1px) solid var(--color-border-subtle);height:16px;height:calc(var(--primer-control-medium-size, 32px)/2);margin:0 8px;margin:0 var(--primer-control-medium-gap,8px)}@media (pointer:coarse){.ActionBar{gap:12px;gap:var(--primer-controlStack-medium-gap-spacious,12px)}.ActionBar--small{gap:16px;gap:var(--primer-controlStack-small-gap-spacious,16px)}.ActionBar--large{gap:4px;gap:var(--base-size-4,4px)}}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../components/primer/beta/button.pcss","<no source>","../../../lib/postcss_mixins/focusOutlineOnEmphasis.pcss","../../components/primer/experimental/action_bar.pcss"],"names":[],"mappings":"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","file":"primer_view_components.css","sourcesContent":["/* CSS for Button */\n/* temporary, pre primitives release */\n:root {\n --primer-duration-fast: 80ms;\n --primer-easing-easeInOut: cubic-bezier(0.65, 0, 0.35, 1);\n}\n\n/* base button */\n.Button {\n position: relative;\n font-size: var(--primer-text-body-size-medium, 14px);\n font-weight: var(--base-text-weight-medium, 500);\n cursor: pointer;\n user-select: none;\n background-color: transparent;\n border: var(--primer-borderWidth-thin, 1px) solid;\n border-color: transparent;\n border-radius: var(--primer-borderRadius-medium, 6px);\n color: var(--color-btn-text);\n transition: var(--primer-duration-fast) var(--primer-easing-easeInOut);\n transition-property: color, fill, background-color, border-color;\n text-align: center;\n height: var(--primer-control-medium-size, 32px);\n padding: 0 var(--primer-control-medium-paddingInline-normal, 12px);\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n gap: var(--primer-control-medium-gap, 8px);\n\n /* mobile friendly sizing */\n @media (pointer: course) {\n &::before {\n @mixin minTouchTarget 48px, 48px;\n }\n }\n\n /* base states */\n\n &:hover {\n transition-duration: var(--primer-duration-fast);\n }\n\n &:active,\n &.Button--active {\n transition: none;\n }\n\n &:disabled,\n &.Button--disabled,\n &[aria-disabled='true'] {\n cursor: not-allowed;\n box-shadow: none;\n }\n\n /* &:focus {\n @mixin focusOutline;\n } */\n}\n\n.Button-withTooltip {\n position: relative;\n display: inline-block;\n}\n\na.Button,\nsummary.Button {\n display: inline-flex;\n\n &:hover {\n text-decoration: none;\n }\n}\n\n/* wrap grid content to allow trailingAction to lock-right */\n.Button-content {\n flex: 1 0 auto;\n display: grid;\n grid-template-areas: 'leadingVisual text trailingVisual';\n grid-template-columns: min-content minmax(0, auto) min-content;\n align-items: center;\n place-content: center;\n /* padding-bottom: 1px; optical alignment for firefox */\n\n & > :not(:last-child) {\n margin-right: var(--primer-control-medium-gap, 8px);\n }\n}\n\n/* center child elements for fullWidth */\n.Button-content--alignStart {\n justify-content: start;\n}\n\n/* button child elements */\n\n/* align svg */\n.Button-visual {\n display: flex;\n pointer-events: none; /* allow click handler to work, avoiding visuals */\n}\n\n.Button-label {\n grid-area: text;\n white-space: nowrap;\n line-height: var(--primer-text-body-lineHeight-medium, calc(20/14));\n}\n\n.Button-leadingVisual {\n grid-area: leadingVisual;\n}\n\n.Button-trailingVisual {\n grid-area: trailingVisual;\n}\n\n.Button-trailingAction {\n margin-right: calc(var(--base-size-4, 4px) * -1);\n}\n\n/* sizes */\n\n.Button--small {\n font-size: var(--primer-text-body-size-small, 12px);\n height: var(--primer-control-small-size, 28px);\n padding: 0 var(--primer-control-small-paddingInline-normal, 12px);\n gap: var(--primer-control-small-gap, 4px);\n\n .Button-label {\n line-height: var(--primer-text-body-lineHeight-small, calc(20/12));\n }\n\n .Button-content {\n & > :not(:last-child) {\n margin-right: var(--primer-control-small-gap, 4px);\n }\n }\n}\n\n.Button--large {\n height: var(--primer-control-large-size, 40px);\n padding: 0 var(--primer-control-large-paddingInline-normal, 12px);\n gap: var(--primer-control-large-gap, 8px);\n\n .Button-label {\n line-height: var(--primer-text-body-lineHeight-large, calc(48/32));\n }\n\n .Button-content {\n & > :not(:last-child) {\n margin-right: var(--primer-control-large-gap, 8px);\n }\n }\n}\n\n.Button--fullWidth {\n width: 100%;\n}\n\n/* variants */\n\n/* primary */\n.Button--primary {\n color: var(--color-btn-primary-text);\n fill: var(--color-btn-primary-icon);\n background-color: var(--color-btn-primary-bg);\n border-color: var(--color-btn-primary-border);\n box-shadow: var(--color-btn-primary-shadow), var(--color-btn-primary-inset-shadow);\n\n &:hover {\n background-color: var(--color-btn-primary-hover-bg);\n border-color: var(--color-btn-primary-hover-border);\n }\n\n /* fallback :focus state */\n &:focus {\n @mixin focusOutlineOnEmphasis;\n\n /* remove fallback :focus if :focus-visible is supported */\n &:not(:focus-visible) {\n outline: solid 1px transparent;\n box-shadow: none;\n }\n }\n\n /* default focus state */\n &:focus-visible {\n @mixin focusOutlineOnEmphasis;\n }\n\n &:active,\n &[aria-pressed='true'],\n &.Button--pressed {\n background-color: var(--color-btn-primary-selected-bg);\n box-shadow: var(--color-btn-primary-selected-shadow);\n }\n\n &:disabled,\n &.Button--disabled,\n &[aria-disabled='true'] {\n color: var(--color-btn-primary-disabled-text);\n background-color: var(--color-btn-primary-disabled-bg);\n border-color: var(--color-btn-primary-disabled-border);\n fill: var(--color-btn-primary-disabled-text);\n }\n}\n\n/* default (secondary) */\n.Button--secondary {\n color: var(--color-btn-text);\n fill: var(--color-fg-muted); /* help this */\n background-color: var(--color-btn-bg);\n border-color: var(--color-btn-border);\n box-shadow: var(--color-btn-shadow), var(--color-btn-inset-shadow);\n\n &:hover {\n background-color: var(--color-btn-hover-bg);\n border-color: var(--color-btn-hover-border);\n }\n\n &:active,\n &.Button--active {\n background-color: var(--color-btn-active-bg);\n border-color: var(--color-btn-active-border);\n }\n\n &[aria-pressed='true'],\n &.Button--pressed {\n background-color: var(--color-btn-selected-bg);\n box-shadow: var(--color-primer-shadow-inset);\n }\n\n &:disabled,\n &.Button--disabled,\n &[aria-disabled='true'] {\n color: var(--color-primer-fg-disabled);\n background-color: var(--color-btn-bg);\n border-color: var(--color-btn-border);\n fill: var(--color-primer-fg-disabled);\n }\n}\n\n/* link color without svg */\n.Button--invisible {\n color: var(--color-fg-default);\n fill: var(--color-fg-default);\n border: none;\n\n &:hover {\n background-color: var(--color-action-list-item-default-hover-bg);\n }\n\n &[aria-pressed='true'],\n &:active,\n &.Button--active,\n &.Button--pressed {\n background-color: var(--color-action-list-item-default-active-bg);\n /* box-shadow: var(--color-primer-shadow-inset); */\n }\n\n &:disabled,\n &.Button--disabled,\n &[aria-disabled='true'] {\n color: var(--color-primer-fg-disabled);\n background-color: var(--color-btn-bg);\n border-color: var(--color-btn-border);\n fill: var(--color-primer-fg-disabled);\n }\n\n /* if visual is present, muted label color */\n .Button-label:not(:only-child) {\n color: var(--color-btn-text);\n }\n\n /* if trailingAction is present, muted label color */\n .Button-content:not(:only-child) {\n .Button-label {\n color: var(--color-btn-text);\n }\n }\n}\n\n/* danger */\n.Button--danger {\n color: var(--color-btn-danger-text);\n fill: var(--color-btn-danger-icon);\n background-color: var(--color-btn-bg);\n border-color: var(--color-btn-border);\n box-shadow: var(--color-btn-shadow), var(--color-btn-inset-shadow);\n\n &:hover {\n color: var(--color-btn-danger-hover-text);\n fill: var(--color-btn-danger-hover-text);\n background-color: var(--color-btn-danger-hover-bg);\n border-color: var(--color-btn-danger-hover-border);\n box-shadow: var(--color-btn-danger-hover-shadow), var(--color-btn-danger-hover-inset-shadow);\n }\n\n &:active,\n &[aria-pressed='true'],\n &.Button--pressed {\n color: var(--color-btn-danger-selected-text);\n fill: var(--color-btn-danger-selected-text);\n background-color: var(--color-btn-danger-selected-bg);\n border-color: var(--color-btn-danger-selected-border);\n box-shadow: var(--color-btn-danger-selected-shadow);\n }\n\n &:disabled,\n &.disabled,\n &[aria-disabled='true'] {\n color: var(--color-btn-danger-disabled-text);\n fill: var(--color-btn-danger-disabled-text);\n background-color: var(--color-btn-danger-disabled-bg);\n border-color: var(--color-btn-border);\n }\n}\n\n.Button--iconOnly {\n display: grid;\n place-content: center;\n padding: unset;\n width: var(--primer-control-medium-size, 32px);\n\n &.Button--small {\n width: var(--primer-control-small-size, 28px);\n }\n\n &.Button--large {\n width: var(--primer-control-large-size, 40px);\n }\n\n /* Increase touch target */\n @media (pointer: coarse) {\n position: relative;\n\n &::before {\n position: absolute;\n top: 50%;\n left: 50%;\n height: var(--primer-control-minTarget-coarse, 44px);\n width: var(--primer-control-minTarget-coarse, 44px);\n content: '';\n transform: translateX(-50%) translateY(-50%);\n }\n }\n}\n",null,"/* outline with fg box-shadow for buttons */\n@define-mixin focusOutlineOnEmphasis $outlineOffset: -2px, $outlineColor: var(--color-accent-fg) {\n outline: 2px solid $outlineColor;\n outline-offset: $outlineOffset;\n box-shadow: inset 0 0 0 3px var(--color-fg-on-emphasis);\n}\n","/* CSS for ActionBar */\n\n.ActionBar {\n display: flex;\n align-items: center;\n justify-content: end;\n position: relative;\n}\n\n/* Divider */\n\n.ActionBar-divider {\n margin: 0 var(--primer-control-medium-gap, 8px);\n height: calc(var(--primer-control-medium-size, 32px) / 2);\n border-left: var(--primer-borderWidth-thin, 1px) solid var(--color-border-subtle);\n}\n\n/* Increase spacing so touch targets don't overlap */\n\n@media (pointer: coarse) {\n .ActionBar {\n gap: var(--primer-controlStack-medium-gap-spacious, 12px);\n }\n\n .ActionBar--small {\n gap: var(--primer-controlStack-small-gap-spacious, 16px);\n }\n\n .ActionBar--large {\n gap: var(--base-size-4, 4px);\n }\n}\n"]}
@@ -0,0 +1,18 @@
1
+ export declare class ModalDialogElement extends HTMLElement {
2
+ #private;
3
+ get open(): boolean;
4
+ set open(value: boolean);
5
+ get showButtons(): NodeList;
6
+ connectedCallback(): void;
7
+ disconnectedCallback(): 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,142 @@
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_abortController, _ModalDialogElement_openButton, _ModalDialogElement_shouldTryLoadingFragment, _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
+ export class ModalDialogElement extends HTMLElement {
21
+ constructor() {
22
+ super(...arguments);
23
+ _ModalDialogElement_instances.add(this);
24
+ //TODO: Do we remove the abortController from focusTrap?
25
+ _ModalDialogElement_focusAbortController.set(this, new AbortController());
26
+ _ModalDialogElement_abortController.set(this, null);
27
+ _ModalDialogElement_openButton.set(this, void 0);
28
+ _ModalDialogElement_shouldTryLoadingFragment.set(this, true);
29
+ }
30
+ get open() {
31
+ return this.hasAttribute('open');
32
+ }
33
+ set open(value) {
34
+ var _a, _b, _c, _d;
35
+ if (value) {
36
+ if (this.open)
37
+ return;
38
+ this.setAttribute('open', '');
39
+ (_a = __classPrivateFieldGet(this, _ModalDialogElement_instances, "a", _ModalDialogElement_overlayBackdrop_get)) === null || _a === void 0 ? void 0 : _a.classList.remove('Overlay--hidden');
40
+ document.body.style.overflow = 'hidden';
41
+ if (__classPrivateFieldGet(this, _ModalDialogElement_focusAbortController, "f").signal.aborted) {
42
+ __classPrivateFieldSet(this, _ModalDialogElement_focusAbortController, new AbortController(), "f");
43
+ }
44
+ focusTrap(this, undefined, __classPrivateFieldGet(this, _ModalDialogElement_focusAbortController, "f").signal);
45
+ }
46
+ else {
47
+ if (!this.open)
48
+ return;
49
+ this.removeAttribute('open');
50
+ (_b = __classPrivateFieldGet(this, _ModalDialogElement_instances, "a", _ModalDialogElement_overlayBackdrop_get)) === null || _b === void 0 ? void 0 : _b.classList.add('Overlay--hidden');
51
+ document.body.style.overflow = 'initial';
52
+ __classPrivateFieldGet(this, _ModalDialogElement_focusAbortController, "f").abort();
53
+ // if #openButton is a child of a menu, we need to focus a suitable child of the menu
54
+ // element since it is expected for the menu to close on click
55
+ const menu = ((_c = __classPrivateFieldGet(this, _ModalDialogElement_openButton, "f")) === null || _c === void 0 ? void 0 : _c.closest('details')) || ((_d = __classPrivateFieldGet(this, _ModalDialogElement_openButton, "f")) === null || _d === void 0 ? void 0 : _d.closest('action-menu'));
56
+ if (menu) {
57
+ focusIfNeeded(getFocusableChild(menu));
58
+ }
59
+ else {
60
+ focusIfNeeded(__classPrivateFieldGet(this, _ModalDialogElement_openButton, "f"));
61
+ }
62
+ __classPrivateFieldSet(this, _ModalDialogElement_openButton, undefined, "f");
63
+ }
64
+ }
65
+ get showButtons() {
66
+ // Dialogs may also be opened from any arbitrary button with a matching show-dialog-id data attribute
67
+ return document.querySelectorAll(`button[data-show-dialog-id='${this.id}']`);
68
+ }
69
+ connectedCallback() {
70
+ if (!this.hasAttribute('role'))
71
+ this.setAttribute('role', 'dialog');
72
+ const { signal } = (__classPrivateFieldSet(this, _ModalDialogElement_abortController, new AbortController(), "f"));
73
+ this.ownerDocument.addEventListener('click', event => {
74
+ const target = event.target;
75
+ const clickOutsideDialog = target.closest(this.tagName) !== this;
76
+ const button = target === null || target === void 0 ? void 0 : target.closest('button');
77
+ // go over this logic:
78
+ if (!button) {
79
+ if (clickOutsideDialog) {
80
+ // This click is outside the dialog
81
+ this.close();
82
+ }
83
+ return;
84
+ }
85
+ let dialogId = button.getAttribute('data-close-dialog-id');
86
+ if (dialogId === this.id) {
87
+ this.close();
88
+ }
89
+ dialogId = button.getAttribute('data-submit-dialog-id');
90
+ if (dialogId === this.id) {
91
+ this.close(true);
92
+ }
93
+ dialogId = button.getAttribute('data-show-dialog-id');
94
+ if (dialogId === this.id) {
95
+ event.stopPropagation();
96
+ __classPrivateFieldSet(this, _ModalDialogElement_openButton, button, "f");
97
+ this.show();
98
+ }
99
+ }, { signal });
100
+ this.addEventListener('keydown', e => __classPrivateFieldGet(this, _ModalDialogElement_instances, "m", _ModalDialogElement_keydown).call(this, e));
101
+ }
102
+ disconnectedCallback() {
103
+ var _a;
104
+ (_a = __classPrivateFieldGet(this, _ModalDialogElement_abortController, "f")) === null || _a === void 0 ? void 0 : _a.abort();
105
+ }
106
+ show() {
107
+ this.open = true;
108
+ }
109
+ close(closedNotCancelled = false) {
110
+ if (this.open === false)
111
+ return;
112
+ const eventType = closedNotCancelled ? 'close' : 'cancel';
113
+ const dialogEvent = new Event(eventType);
114
+ this.dispatchEvent(dialogEvent);
115
+ this.open = false;
116
+ }
117
+ }
118
+ _ModalDialogElement_focusAbortController = new WeakMap(), _ModalDialogElement_abortController = new WeakMap(), _ModalDialogElement_openButton = new WeakMap(), _ModalDialogElement_shouldTryLoadingFragment = new WeakMap(), _ModalDialogElement_instances = new WeakSet(), _ModalDialogElement_overlayBackdrop_get = function _ModalDialogElement_overlayBackdrop_get() {
119
+ var _a;
120
+ if ((_a = this.parentElement) === null || _a === void 0 ? void 0 : _a.hasAttribute('data-modal-dialog-overlay')) {
121
+ return this.parentElement;
122
+ }
123
+ return null;
124
+ }, _ModalDialogElement_keydown = function _ModalDialogElement_keydown(event) {
125
+ if (!(event instanceof KeyboardEvent))
126
+ return;
127
+ if (event.isComposing)
128
+ return;
129
+ switch (event.key) {
130
+ case 'Escape':
131
+ if (this.open) {
132
+ this.close();
133
+ event.preventDefault();
134
+ event.stopPropagation();
135
+ }
136
+ break;
137
+ }
138
+ };
139
+ if (!window.customElements.get('modal-dialog')) {
140
+ window.ModalDialogElement = ModalDialogElement;
141
+ window.customElements.define('modal-dialog', ModalDialogElement);
142
+ }
@@ -0,0 +1,28 @@
1
+ export declare class ToggleSwitchElement extends HTMLElement {
2
+ switch: HTMLElement;
3
+ loadingSpinner: HTMLElement;
4
+ errorIcon: HTMLElement;
5
+ get src(): string | null;
6
+ get csrf(): string | null;
7
+ get csrfField(): string;
8
+ isRemote(): boolean;
9
+ toggle(): void;
10
+ turnOn(): void;
11
+ turnOff(): void;
12
+ isOn(): boolean;
13
+ isOff(): boolean;
14
+ isDisabled(): boolean;
15
+ disable(): void;
16
+ enable(): void;
17
+ private performToggle;
18
+ private setLoadingState;
19
+ private setSuccessState;
20
+ private setErrorState;
21
+ private setFinishedState;
22
+ private check;
23
+ }
24
+ declare global {
25
+ interface Window {
26
+ ToggleSwitchElement: typeof ToggleSwitchElement;
27
+ }
28
+ }
@@ -0,0 +1,137 @@
1
+ /* eslint-disable custom-elements/expose-class-on-global */
2
+ /* eslint-disable custom-elements/define-tag-after-class-definition */
3
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
4
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
5
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
6
+ 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;
7
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
8
+ };
9
+ import { controller, target } from '@github/catalyst';
10
+ import { debounce } from '@github/mini-throttle/decorators';
11
+ let ToggleSwitchElement = class ToggleSwitchElement extends HTMLElement {
12
+ get src() {
13
+ const src = this.getAttribute('src');
14
+ if (!src)
15
+ return null;
16
+ const link = this.ownerDocument.createElement('a');
17
+ link.href = src;
18
+ return link.href;
19
+ }
20
+ get csrf() {
21
+ const csrfElement = this.querySelector('[data-csrf]');
22
+ return this.getAttribute('csrf') || (csrfElement instanceof HTMLInputElement && csrfElement.value) || null;
23
+ }
24
+ get csrfField() {
25
+ // the authenticity token is passed into the element and is not generated in js land
26
+ return this.getAttribute('csrf-field') || 'authenticity_token';
27
+ }
28
+ isRemote() {
29
+ return this.src != null;
30
+ }
31
+ toggle() {
32
+ if (this.isRemote()) {
33
+ this.setLoadingState();
34
+ this.check();
35
+ }
36
+ else {
37
+ this.performToggle();
38
+ }
39
+ }
40
+ turnOn() {
41
+ if (this.isDisabled()) {
42
+ return;
43
+ }
44
+ this.switch.setAttribute('aria-checked', 'true');
45
+ this.classList.add('ToggleSwitch--checked');
46
+ }
47
+ turnOff() {
48
+ if (this.isDisabled()) {
49
+ return;
50
+ }
51
+ this.switch.setAttribute('aria-checked', 'false');
52
+ this.classList.remove('ToggleSwitch--checked');
53
+ }
54
+ isOn() {
55
+ return this.switch.getAttribute('aria-checked') === 'true';
56
+ }
57
+ isOff() {
58
+ return !this.isOn();
59
+ }
60
+ isDisabled() {
61
+ return this.switch.getAttribute('aria-disabled') === 'true';
62
+ }
63
+ disable() {
64
+ this.switch.setAttribute('aria-disabled', 'true');
65
+ }
66
+ enable() {
67
+ this.switch.setAttribute('aria-disabled', 'false');
68
+ }
69
+ performToggle() {
70
+ if (this.isOn()) {
71
+ this.turnOff();
72
+ }
73
+ else {
74
+ this.turnOn();
75
+ }
76
+ }
77
+ setLoadingState() {
78
+ this.disable();
79
+ this.errorIcon.setAttribute('hidden', 'hidden');
80
+ this.loadingSpinner.removeAttribute('hidden');
81
+ }
82
+ setSuccessState() {
83
+ this.setFinishedState(false);
84
+ }
85
+ setErrorState() {
86
+ this.setFinishedState(true);
87
+ }
88
+ setFinishedState(error) {
89
+ if (error) {
90
+ this.errorIcon.removeAttribute('hidden');
91
+ }
92
+ this.loadingSpinner.setAttribute('hidden', 'hidden');
93
+ this.enable();
94
+ }
95
+ async check() {
96
+ const body = new FormData();
97
+ if (this.csrf) {
98
+ body.append(this.csrfField, this.csrf);
99
+ }
100
+ body.append('value', this.isOn() ? '1' : '0');
101
+ try {
102
+ if (!this.src)
103
+ throw new Error('invalid src');
104
+ const response = await fetch(this.src, {
105
+ credentials: 'same-origin',
106
+ method: 'POST',
107
+ body
108
+ });
109
+ if (response.ok) {
110
+ this.setSuccessState();
111
+ this.performToggle();
112
+ }
113
+ else {
114
+ this.setErrorState();
115
+ }
116
+ }
117
+ catch (error) {
118
+ this.setErrorState();
119
+ }
120
+ }
121
+ };
122
+ __decorate([
123
+ target
124
+ ], ToggleSwitchElement.prototype, "switch", void 0);
125
+ __decorate([
126
+ target
127
+ ], ToggleSwitchElement.prototype, "loadingSpinner", void 0);
128
+ __decorate([
129
+ target
130
+ ], ToggleSwitchElement.prototype, "errorIcon", void 0);
131
+ __decorate([
132
+ debounce(300)
133
+ ], ToggleSwitchElement.prototype, "check", null);
134
+ ToggleSwitchElement = __decorate([
135
+ controller
136
+ ], ToggleSwitchElement);
137
+ export { ToggleSwitchElement };
@@ -0,0 +1,25 @@
1
+ declare type Direction = 'n' | 's' | 'e' | 'w' | 'ne' | 'se' | 'nw' | 'sw';
2
+ declare class ToolTipElement extends HTMLElement {
3
+ #private;
4
+ styles(): string;
5
+ get htmlFor(): string;
6
+ set htmlFor(value: string);
7
+ get type(): 'description' | 'label';
8
+ set type(value: 'description' | 'label');
9
+ get direction(): Direction;
10
+ set direction(value: Direction);
11
+ get control(): HTMLElement | null;
12
+ set hiddenFromView(value: true | false);
13
+ get hiddenFromView(): true | false;
14
+ connectedCallback(): void;
15
+ disconnectedCallback(): void;
16
+ handleEvent(event: Event): void;
17
+ static observedAttributes: string[];
18
+ attributeChangedCallback(name: string): void;
19
+ }
20
+ declare global {
21
+ interface Window {
22
+ ToolTipElement: typeof ToolTipElement;
23
+ }
24
+ }
25
+ export {};