Sha256: 8e12795331354cf068d9fb2937d57a0fc0506860e05513afca240b969e34afa3

Contents?: true

Size: 1.17 KB

Versions: 94

Compression:

Stored size: 1.17 KB

Contents

import {controller, attr} from '@github/catalyst'

@controller
export class ScrollableRegionElement extends HTMLElement {
  @attr hasOverflow = false
  @attr labelledBy = ''

  observer: ResizeObserver

  connectedCallback() {
    this.style.overflow = 'auto'

    this.observer = new ResizeObserver(entries => {
      for (const entry of entries) {
        this.hasOverflow =
          entry.target.scrollHeight > entry.target.clientHeight || entry.target.scrollWidth > entry.target.clientWidth
      }
    })

    this.observer.observe(this)
  }

  disconnectedCallback() {
    this.observer.disconnect()
  }

  attributeChangedCallback(name: string) {
    if (name === 'data-has-overflow') {
      if (this.hasOverflow) {
        this.setAttribute('aria-labelledby', this.labelledBy)
        this.setAttribute('role', 'region')
        this.setAttribute('tabindex', '0')
      } else {
        this.removeAttribute('aria-labelledby')
        this.removeAttribute('role')
        this.removeAttribute('tabindex')
      }
    }
  }
}

declare global {
  interface Window {
    ScrollableRegionElement: typeof ScrollableRegionElement
  }
}

window.ScrollableRegionElement = ScrollableRegionElement

Version data entries

94 entries across 94 versions & 2 rubygems

Version Path
openproject-primer_view_components-0.52.4 app/components/primer/scrollable_region.ts
openproject-primer_view_components-0.52.3 app/components/primer/scrollable_region.ts
primer_view_components-0.36.5 app/components/primer/scrollable_region.ts
openproject-primer_view_components-0.52.2 app/components/primer/scrollable_region.ts
primer_view_components-0.36.4 app/components/primer/scrollable_region.ts
openproject-primer_view_components-0.52.1 app/components/primer/scrollable_region.ts
openproject-primer_view_components-0.52.0 app/components/primer/scrollable_region.ts
primer_view_components-0.36.3 app/components/primer/scrollable_region.ts
openproject-primer_view_components-0.51.0 app/components/primer/scrollable_region.ts
primer_view_components-0.36.2 app/components/primer/scrollable_region.ts
openproject-primer_view_components-0.50.1 app/components/primer/scrollable_region.ts
openproject-primer_view_components-0.50.0 app/components/primer/scrollable_region.ts
primer_view_components-0.36.1 app/components/primer/scrollable_region.ts
primer_view_components-0.36.0 app/components/primer/scrollable_region.ts
openproject-primer_view_components-0.49.2 app/components/primer/scrollable_region.ts
primer_view_components-0.35.2 app/components/primer/scrollable_region.ts
openproject-primer_view_components-0.49.1 app/components/primer/scrollable_region.ts
openproject-primer_view_components-0.49.0 app/components/primer/scrollable_region.ts
primer_view_components-0.35.1 app/components/primer/scrollable_region.ts
primer_view_components-0.35.0 app/components/primer/scrollable_region.ts