npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@memberjunction/ng-container-directives

v5.21.0

Published

DEPRECATED: Angular Container Directives - Fill Container for Auto-Resizing, and plain container for element identification/binding. Will be removed in a future release.

Readme

@memberjunction/ng-container-directives

Angular directives for container management in MemberJunction applications -- mjContainer for dynamic component loading via ViewContainerRef, and mjFillContainer for automatic element resizing to fill parent containers.

Overview

This package provides two essential layout directives. mjContainer exposes a ViewContainerRef for programmatic component creation. mjFillContainer automatically calculates and sets element dimensions based on the parent container, with context-aware behavior that skips resizing inside grids, hidden tabs, or elements marked with mjSkipResize.

graph TD
    A[ContainerDirectivesModule] --> B["mjContainer Directive"]
    A --> C["mjFillContainer Directive"]

    B --> B1["Exposes ViewContainerRef"]
    B --> B2["Dynamic Component Loading"]

    C --> C1["Auto Width/Height Calculation"]
    C --> C2["Window Resize Handling
    (dual debounce)"]
    C --> C3["MJGlobal Manual Resize Events"]
    C --> C4["Context-Aware Skipping
    (grids, hidden tabs, mjSkipResize)"]

    style A fill:#2d6a9f,stroke:#1a4971,color:#fff
    style B fill:#7c5295,stroke:#563a6b,color:#fff
    style C fill:#2d8659,stroke:#1a5c3a,color:#fff

Installation

npm install @memberjunction/ng-container-directives

Usage

Import the Module

import { ContainerDirectivesModule } from '@memberjunction/ng-container-directives';

@NgModule({
  imports: [ContainerDirectivesModule]
})
export class YourModule { }

mjContainer

Exposes a ViewContainerRef for dynamic component loading:

<div mjContainer></div>
import { Container } from '@memberjunction/ng-container-directives';

@Component({
  selector: 'app-dynamic-host',
  template: `<div mjContainer></div>`
})
export class DynamicHostComponent {
  @ViewChild(Container, { static: true }) container!: Container;

  ngOnInit() {
    const ref = this.container.viewContainerRef;
    // ref.createComponent(YourDynamicComponent);
  }
}

mjFillContainer

Automatically resizes an element to fill its parent:

<!-- Fills both width and height (default) -->
<div mjFillContainer>Content</div>

<!-- Custom margins -->
<div mjFillContainer [fillWidth]="true" [fillHeight]="true" [rightMargin]="10" [bottomMargin]="20">
  Content with margins
</div>

<!-- Fill only width -->
<div mjFillContainer [fillWidth]="true" [fillHeight]="false">
  Content that fills width only
</div>

Skipping Resize

<div mjSkipResize>This element will not be resized</div>

Manual Resize Triggering

import { MJGlobal, MJEventType } from '@memberjunction/global';

MJGlobal.Instance.RaiseEvent({
  event: MJEventType.ManualResizeRequest,
  args: null
});

Configuration

mjFillContainer Inputs

| Property | Type | Default | Description | |----------|------|---------|-------------| | fillWidth | boolean | true | Fill the parent's width | | fillHeight | boolean | true | Fill the parent's height | | rightMargin | number | 0 | Right margin in pixels | | bottomMargin | number | 0 | Bottom margin in pixels |

Static Properties

import { FillContainer } from '@memberjunction/ng-container-directives';

// Disable resize globally
FillContainer.DisableResize = true;

// Enable debug logging
FillContainer.OutputDebugInfo = true;

How It Works

  1. Parent detection: Identifies the nearest block-level parent element
  2. Size calculation: Computes dimensions based on parent size, element position, and margins
  3. Event handling: Listens for window resize (dual debounce: 100ms active, 500ms settled) and MJGlobal manual resize events
  4. Context awareness: Automatically skips elements with mjSkipResize, elements inside grids (role="grid"), hidden tabs, or hidden/undisplayed parents

Dependencies

| Package | Description | |---------|-------------| | @memberjunction/core | Core utilities and logging | | @memberjunction/global | Global event system | | rxjs | Event handling and debouncing |

Peer Dependencies

  • @angular/common ^21.x
  • @angular/core ^21.x
  • @angular/router ^21.x

Build

cd packages/Angular/Generic/container-directives
npm run build

License

ISC