Angular API रेफ़रेंस

@reelkit/angular के कंपोनेंट, directives, services और यूटिलिटी का पूरा रेफ़रेंस।

ReelComponent

Selector: rk-reel

Inputs

Inputटाइपडिफ़ॉल्टविवरण
countnumberज़रूरीस्लाइड की कुल संख्या
direction'vertical' | 'horizontal''vertical'स्क्रॉल की दिशा
size[number, number] | undefinedundefined[width, height] के रूप में चौड़ाई और ऊँचाई। छोड़ने पर ResizeObserver से अपने-आप नापता है
initialIndexnumber0शुरुआती स्लाइड index
loopbooleanfalseअनंत लूप चालू करता है
transitionTransitionTransformFnslideTransitionट्रांज़िशन इफ़ेक्ट का फ़ंक्शन। बिल्ट-इन: slideTransition, fadeTransition, flipTransition, cubeTransition, zoomTransition
transitionDurationnumber300ms में एनिमेशन की अवधि
swipeDistanceFactornumber0.12स्वाइप की सीमा (0-1)
enableGesturesbooleantrueटच/माउस से खींचकर नेविगेशन चालू करता है
enableNavKeysbooleantrueकीबोर्ड की तीर वाली कुंजियों से नेविगेशन चालू करता है
enableWheelbooleanfalseमाउस व्हील से नेविगेशन चालू करता है
wheelDebounceMsnumber200ms में व्हील इवेंट का debounce
rangeExtractor(index: number, count: number) => number[]defaultRangeExtractorकौन-से index रेंडर हों, यह तय करने वाला कस्टम फ़ंक्शन
keyExtractor(index: number, indexInRange: number) => string | numberindex => index@for track expressions के लिए कस्टम key फ़ंक्शन (loop के साथ काम का)
classNamestring''root कंटेनर एलिमेंट पर लगने वाली CSS class
ariaLabelstring'Carousel'carousel क्षेत्र का सुलभ लेबल

Outputs

Outputटाइपविवरण
afterChangeEventEmitter<{ index: number; indexInRange: number }>स्लाइड ट्रांज़िशन पूरा होने के बाद emit होता है
beforeChangeEventEmitter<{ index: number; nextIndex: number; indexInRange: number }>स्लाइड ट्रांज़िशन शुरू होने से पहले emit होता है
slideDragStartEventEmitter<number>खींचने का जेस्चर शुरू होने पर emit होता है
slideDragEndEventEmitter<number>खींचने का जेस्चर ख़त्म होने (छोड़ने) पर emit होता है
slideDragCanceledEventEmitter<number>खींचने का जेस्चर रद्द होने (वापस अपनी जगह) पर emit होता है
apiReadyEventEmitter<ReelApi>view init के बाद एक बार emit होता है और imperative API देता है

ReelApi इंटरफ़ेस

(apiReady) output से मिलता है:

typescript
import { type ReelApi } from '@reelkit/angular';

@Component({ ... })
export class AppComponent {
  api: ReelApi | undefined;

  // In template: (apiReady)="api = $event"

  prev()  { this.api?.prev(); }
  next()  { this.api?.next(); }
  jump(i: number) { this.api?.goTo(i, true); }  // animated
}
मेथडटाइपविवरण
next()() => voidअगली स्लाइड पर जाता है
prev()() => voidपिछली स्लाइड पर जाता है
goTo(index, animate?)(number, boolean?) => Promise<void>किसी खास स्लाइड index पर जाता है
adjust()() => voidस्लाइड की स्थितियाँ दोबारा निकालता है (लेआउट बदलने के बाद काम का)
observe()() => voidकीबोर्ड इवेंट सुनना शुरू करता है
unobserve()() => voidकीबोर्ड इवेंट सुनना बंद करता है

RkReelItemDirective

Selector: [rkReelItem] — rk-reel के अंदर ng-template पर लगाया जाता है।

Template context

html
<ng-template rkReelItem let-i let-indexInRange="indexInRange" let-size="size">
  <!-- $implicit (let-i)  : number         — absolute slide index -->
  <!-- indexInRange        : number         — position in the visible window (0, 1, or 2) -->
  <!-- size                : [number,number] — [width, height] of the container -->
</ng-template>
Variableटाइपविवरण
$implicit (let-i)numberस्लाइड का पूर्ण index (0 से count-1 तक)
indexInRangenumberदिखने वाली विंडो में स्थिति (0, 1 या 2)
size[number, number]पिक्सेल में [width, height] के रूप में स्लाइडर का मौजूदा आकार

ReelIndicatorComponent

Selector: rk-reel-indicator

Inputs

Inputटाइपडिफ़ॉल्टविवरण
countnumber | undefinedautoआइटम की कुल संख्या। parent rk-reel के अंदर होने पर उसके context से अपने-आप जुड़ती है; अकेले इस्तेमाल करने पर साफ़ तौर पर पास करें
activenumber | undefinedautoमौजूदा सक्रिय index। parent rk-reel के अंदर होने पर उसके context से अपने-आप जुड़ता है; अकेले इस्तेमाल करने पर साफ़ तौर पर पास करें
direction'vertical' | 'horizontal''vertical'इंडिकेटर की दिशा
radiusnumber3पिक्सेल में बिंदु का radius
visiblenumber5एक साथ दिखने वाले सामान्य आकार के बिंदुओं की अधिकतम संख्या
gapnumber4पिक्सेल में बिंदुओं के बीच की दूरी
activeColorstring'#fff'सक्रिय बिंदु का रंग
inactiveColorstring'rgba(255,255,255,0.5)'निष्क्रिय बिंदु का रंग
edgeScalenumber0.5किनारे पर overflow वाले बिंदुओं का scale
classNamestring''इंडिकेटर कंटेनर पर लगने वाली कस्टम CSS class
tablistLabelstring'Slide navigation'tablist landmark का सुलभ लेबल

Outputs

Outputटाइपविवरण
dotClickEventEmitter<number>बिंदु पर क्लिक होने पर emit होता है; बिंदु का index देता है

RK_REEL_CONTEXT

rk-reel अपने descendants को जो InjectionToken<ReelContextValue> देता है। rk-reel-indicator अपने-आप जुड़ने के लिए अंदर से इसे इस्तेमाल करता है। जिन कस्टम कंपोनेंट को स्लाइडर context चाहिए, उनमें इसे inject करें।

typescript
import { inject } from '@angular/core';
import { RK_REEL_CONTEXT } from '@reelkit/angular';

@Component({ ... })
export class MyCustomControl {
  private readonly ctx = inject(RK_REEL_CONTEXT, { optional: true });

  jump(index: number) {
    this.ctx?.goTo(index, true);
  }
}
प्रॉपर्टीटाइपविवरण
indexSignal<number>मौजूदा स्लाइड का reactive index
countSignal<number>आइटम की reactive कुल गिनती
goTo(index: number, animate?: boolean) => Promise<void>प्रोग्राम से किसी स्लाइड पर ले जाता है

BodyLockService

reference गिनने वाला body scroll lock। एक साथ कई कॉल करने वाले (जैसे lightbox और modal दोनों खुले हों) अलग-अलग lock/unlock कर सकते हैं — body तभी पहले जैसा होता है जब आख़िरी कॉल करने वाला उसे छोड़ता है। root पर उपलब्ध — कहीं भी inject करें।

typescript
import { inject } from '@angular/core';
import { BodyLockService } from '@reelkit/angular';

@Component({ ... })
export class OverlayComponent {
  private readonly bodyLock = inject(BodyLockService);

  open() { this.bodyLock.lock(); }
  close() { this.bodyLock.unlock(); }
}
सदस्यटाइपविवरण
lockedboolean (getter)body अभी lock है या नहीं
lock()() => voidbody का स्क्रॉल lock करता है और scrollbar की चौड़ाई की भरपाई लगाता है
unlock()() => voidbody के स्क्रॉल की मूल styles वापस लाता है

SoundStateService

media चलाने वाले overlay की muted और disabled स्थिति, Angular signals के रूप में। इसे root पर नहीं, बल्कि उस component पर provide करें जिसके पास media है — तब हर overlay अपनी अलग स्थिति रखता है। reelkit का हर Angular overlay यही सेवा इस्तेमाल करता है — @reelkit/angular-reel-player भी वही class दोबारा export करता है, इसलिए वहाँ से किया गया पुराना import वैसे ही चलता रहता है।

lightbox अपवाद है: सेवा को <rk-lightbox-overlay> के ऊपर provide करें, क्योंकि उसका video slide आपके अपने template से render होता है और overlay के भीतर बने instance को कभी नहीं देख पाएगा।

typescript
import { inject } from '@angular/core';
import { SoundStateService } from '@reelkit/angular';

@Component({
  // Provide it on the component that owns the media, so two overlays
  // on one page never share a muted state.
  providers: [SoundStateService],
  // ...
})
export class OverlayComponent {
  readonly soundState = inject(SoundStateService);

  // Use in template:
  // [muted]="soundState.muted()"
  // [hidden]="soundState.disabled()"
  // (click)="soundState.toggle()"
}
सदस्यटाइपविवरण
muted()Signal<boolean>अभी आवाज़ बंद है या नहीं। शुरुआत muted से होती है
disabled()Signal<boolean>जब तक आवाज़ पर नियंत्रण संभव नहीं, तब तक true और sound button छिपा रहता है। इसे overlay तय करता है — RkReelPlayerOverlayComponent इसे तब उठाता है जब slide में वीडियो न हो या वह बदल रहा हो
controllerSoundController (getter)नीचे मौजूद core का SoundController — इसे syncMutedToVideo को दें ताकि <video> muted स्थिति के साथ चलता रहे
toggle()() => voidmuted स्थिति बदलता है
setDisabled()(value: boolean) => voidतय करता है कि अभी आवाज़ पर नियंत्रण है या नहीं
reset()() => voidशुरुआती स्थिति लौटाता है: muted, disabled नहीं

सिग्नल ब्रिज यूटिलिटी

core signal सिस्टम (@reelkit/core) को Angular के अपने signal API से जोड़ने वाले यूटिलिटी फ़ंक्शन। ReelComponent अंदर से इन्हें इस्तेमाल करता है; कस्टम फ़्रेमवर्क इंटीग्रेशन के लिए भी उपलब्ध हैं।

फ़ंक्शनSignatureविवरण
toAngularSignal(source: Subscribable<T>, destroyRef: DestroyRef) => Signal<T>core के Subscribable को read-only Angular Signal से जोड़ता है
animatedSignalBridge(source: AnimatedValue, zone: NgZone, cdRef: ChangeDetectorRef, destroyRef: DestroyRef) => Signal<number>core की एनिमेटेड value को Angular Signal से जोड़ता है, जो zone के बाहर requestAnimationFrame से अपडेट होता है
typescript
import { DestroyRef, inject } from '@angular/core';
import { toAngularSignal } from '@reelkit/angular';
import { createSliderController } from '@reelkit/core';

// Custom component using low-level signal bridge
const destroyRef = inject(DestroyRef);
const controller = createSliderController({ count: 10 }, {});
const index = toAngularSignal(controller.state.index, destroyRef);

createOverlayUrlState

OverlayUrlStateOptions

किसी overlay के लिए URL-स्टेट कंट्रोलर बनाता है, जिसे आप <rk-lightbox-url-overlay> को उसके [controller] input के रूप में देते हैं। इसे injection context में कॉल करें — field initialiser या constructor में; यह तुरंत जुड़ता है और DestroyRef से छूटता है। पूरी जानकारी: Angular Lightbox पेज पर URL स्टेट।

विकल्पटाइपडिफ़ॉल्टविवरण
paramstringrequiredसक्रिय स्लाइड रखने वाला query parameter, जैसे photo।
adapterUrlAdapterHistory APIपढ़ने और लिखने के लिए नेविगेशन सिस्टम। routing वाले ऐप में Router पर आधारित adapter पास करें, ताकि Router की location पुरानी न पड़े।
codecUrlCodec<Id>requiredwire का रूप: parameter के टेक्स्ट से स्थिर पहचान तक। मेल खाती जोड़ी के रूप में locator के साथ चलता है — डिफ़ॉल्ट ?photo=3 गैलरी के लिए ...urlIndexKey(() => images().length) spread करें, या अपना दें ताकि क्रम बदलने पर भी bookmark काम करे।
locatorUrlLocator<Id>requiredपहचान को स्थिति से जोड़ता है और उसकी वैधता खुद संभालता है: locate (sync), locateAsync (पेज वाली गैलरी के लिए async विकल्प), identify (writes)।

createRouterUrlAdapter

@reelkit/angular/ng-router-url-adapter

Angular Router पर आधारित UrlAdapter। routing वाले ऐप में इसे createOverlayUrlState के adapter विकल्प के रूप में पास करें, ताकि नेविगेशन की सच्चाई का अकेला स्रोत Router ही रहे — Router के पीछे history.pushState लिखने से उसकी location पुरानी पड़ जाती है और उसका अगला नेविगेशन parameter गिरा देता है। Writes सिर्फ़ query को छूते हैं, इसलिए path, fragment और ?tag=a&tag=b जैसी दोहराई गई keys बिना बदले साथ चलती हैं। हर बदलाव बताता है कि Router ने उसी पेज पर push किया, replace किया या history में आगे-पीछे गया, इसलिए routerLink से खुली गैलरी back के एक कदम से बंद होती है। इसे injection context में कॉल करें; router की subscription DestroyRef से छूटती है।

यह अपने अलग subpath से आता है, इसलिए बिना routing वाला ऐप @angular/router को कभी अपने बंडल में नहीं खींचता। @angular/router एक वैकल्पिक peer dependency है।

typescript
import { createRouterUrlAdapter } from '@reelkit/angular/ng-router-url-adapter';

protected readonly photo = createOverlayUrlState({
  param: 'photo',
  adapter: createRouterUrlAdapter(),
  ...urlIndexKey(() => this.images().length),
});

सुलभता

<rk-reel> aria-roledescription="carousel" के साथ role="region" के रूप में रेंडर होता है। क्षेत्र को स्क्रीन रीडर के लिए नाम देने के लिए ariaLabel input सेट करें। एक polite live region हर स्लाइड बदलने पर "Slide N of M" बोलता है। निष्क्रिय स्लाइडों को inert attribute मिलता है, ताकि फ़ोकस और सहायक तकनीक का नेविगेशन उन्हें छोड़ दे।

<rk-reel-indicator> बिंदुओं पर roving tabindex के साथ role="tablist" के रूप में रेंडर होता है; तीर वाली कुंजियाँ फ़ोकस खिसकाती हैं और Enter या Space स्लाइड सक्रिय करता है।

<rk-reel> के आसपास अपना modal बना रहे हैं? फ़ोकस लौटाने और रोकने के लिए captureFocusForReturn, createFocusTrap और getFocusableElements @reelkit/angular से भी export होते हैं।

पैकेज exports

@reelkit/angular के सारे सार्वजनिक exports:

typescript
// Components & directives
import {
  ReelComponent,
  ReelIndicatorComponent,
  RkReelItemDirective,
  RkSwipeToCloseDirective,
} from '@reelkit/angular';

// Types
import type {
  ReelApi,
  ReelContextValue,
  RkReelItemContext,
  CoreSignal,
  Subscribable,
  AnimatedValue,
  RangeExtractor,
  SliderDirection,
  Disposer,
  DisposableList,
  GestureController,
  SliderController,
  ContentLoadingController,
  ContentPreloader,
  ContentPreloaderConfig,
  SoundController,
  BodyLock,
  TransitionTransformFn,
  SlideTransformStyle,
  SwipeToCloseDirection,
} from '@reelkit/angular';

// Context
import { RK_REEL_CONTEXT } from '@reelkit/angular';

// Services
import { BodyLockService, SoundStateService } from '@reelkit/angular';

// Signal bridges
import { toAngularSignal, animatedSignalBridge } from '@reelkit/angular';

// Core re-exports
import {
  // Signals & reactivity
  createSignal, createComputed, reaction, batch,

  // Transitions
  slideTransition, fadeTransition, flipTransition,
  cubeTransition, zoomTransition, getSlideProgress,

  // Content loading & preloading
  createContentLoadingController, createContentPreloader,

  // Sound
  createSoundController, syncMutedToVideo,

  // Fullscreen
  fullscreenSignal, requestFullscreen, exitFullscreen,

  // DOM & cleanup
  observeDomEvent, createDisposableList, createBodyLock, sharedBodyLock,

  // Size detection
  observeElementSize, getViewportSize, observeViewportSize,
  isMobileWidth, fitAspectRatio, isTouchDevice,

  // Autoplay & download
  createTimerController, createSlideshowController, downloadFile,

  // Focus management
  captureFocusForReturn, createFocusTrap, getFocusableElements,

  // Slider & gestures
  createSliderController, createGestureController,
  defaultRangeExtractor, createDefaultKeyExtractorForLoop,

  // Video
  captureFrame, createSharedVideo,

  // Utilities
  animate, noop, clamp, abs, first, last, extractRange,
} from '@reelkit/angular';