@panelwave/player 1.0.1 → 1.1.0

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/index.d.ts CHANGED
@@ -1603,6 +1603,31 @@ interface ExtraImage {
1603
1603
  interface Paywall {
1604
1604
  /** Array of paywall rules */
1605
1605
  rules?: PaywallRule[];
1606
+ /**
1607
+ * Display info for the products / subscription tiers the rules reference by
1608
+ * id (format 1.6) — labels, descriptions and prices of the Buy / Subscribe
1609
+ * options (optional)
1610
+ */
1611
+ products?: PaywallProduct[];
1612
+ }
1613
+ /**
1614
+ * One product or subscription tier from the host's catalogue (format 1.6).
1615
+ * Informational: the rules decide what unlocks what.
1616
+ */
1617
+ interface PaywallProduct {
1618
+ /** Id referenced by requiredProductIds / requireEntitlement / subscriptionTiers */
1619
+ id: string;
1620
+ /** Localized product name (optional) */
1621
+ name?: LocalizedString;
1622
+ /** Localized product description (optional) */
1623
+ description?: LocalizedString;
1624
+ /** Display price (optional) */
1625
+ price?: {
1626
+ amount: number;
1627
+ currency: string;
1628
+ };
1629
+ /** One-time purchase or subscription tier (optional, informational) */
1630
+ type?: 'purchase' | 'subscription';
1606
1631
  }
1607
1632
  /**
1608
1633
  * Paywall rule
@@ -1628,7 +1653,7 @@ interface PaywallRule {
1628
1653
  entitlementType?: string;
1629
1654
  /** Tiers that satisfy a subscription rule; empty/absent = any tier (optional) */
1630
1655
  subscriptionTiers?: string[];
1631
- /** Products that satisfy a purchase rule; empty/absent = any purchase (optional) */
1656
+ /** Products that unlock a purchase rule, any one suffices (format 1.6); absent = requireEntitlement key / any purchase (optional) */
1632
1657
  requiredProductIds?: string[];
1633
1658
  /** Embedded price for display in the paywall overlay (CMS) (optional) */
1634
1659
  price?: {
@@ -2189,6 +2214,21 @@ interface PaywallGate {
2189
2214
  reason: string;
2190
2215
  /** Preview information (optional) */
2191
2216
  preview?: PreviewInfo;
2217
+ /** Id of the manifest paywall rule that raised the gate (optional) */
2218
+ ruleId?: string;
2219
+ /**
2220
+ * Machine-readable lock reason (optional): `subscription_required`,
2221
+ * `purchase_required`, `age_verification_required` or
2222
+ * `entitlement_required`. The overlay translates it; `reason` stays the
2223
+ * English sentence for hosts.
2224
+ */
2225
+ lockReason?: string;
2226
+ /**
2227
+ * What the reader can buy to pass the gate, derived from the rule
2228
+ * (product ids / subscription tiers, name, price). The built-in overlay
2229
+ * renders them as Buy / Subscribe buttons.
2230
+ */
2231
+ options?: PurchaseInfo[];
2192
2232
  }
2193
2233
  /**
2194
2234
  * Preview information for gated content
@@ -2209,8 +2249,8 @@ interface PurchaseInfo {
2209
2249
  productId: string;
2210
2250
  /** Product name */
2211
2251
  name: string;
2212
- /** Price with currency */
2213
- price: {
2252
+ /** Price with currency (optional: not every rule carries one) */
2253
+ price?: {
2214
2254
  amount: number;
2215
2255
  currency: string;
2216
2256
  };
@@ -4154,12 +4194,22 @@ declare class TrackingService {
4154
4194
  * free preview.
4155
4195
  * - Panel-scoped rules gate exactly their `targetPanelIds` — preview does NOT
4156
4196
  * override an explicit panel gate.
4197
+ * - Chapter-scoped rules gate only the panels of their chapter(s) (`refId`);
4198
+ * their free preview counts panels WITHIN that chapter. They take
4199
+ * precedence over a work gate for those panels.
4200
+ * - Extras-scoped rules never gate panels — they gate the extras block named
4201
+ * by `refId` (see `isExtraLocked`).
4157
4202
  * - A gated panel unlocks when the gating rule's requirement is satisfied by
4158
4203
  * the reader's entitlement snapshot.
4159
4204
  */
4160
4205
 
4161
4206
  type EvaluatorEntitlementType = 'free' | 'subscription' | 'purchase' | 'age_gate';
4162
- type EvaluatorScope = 'global' | 'work' | 'chapter' | 'panel';
4207
+ /**
4208
+ * `global` is NOT in the schema's scope enum (work | chapter | panel |
4209
+ * extras). It is still accepted as an alias of `work` so old manifests and
4210
+ * CMS-internal rules keep gating; nothing in the player emits it.
4211
+ */
4212
+ type EvaluatorScope = 'global' | 'work' | 'chapter' | 'panel' | 'extras';
4163
4213
  /** The rule shape the evaluator needs (a superset of the manifest rule). */
4164
4214
  interface EvaluatorRule {
4165
4215
  id: string;
@@ -4170,12 +4220,28 @@ interface EvaluatorRule {
4170
4220
  subscriptionTiers?: string[];
4171
4221
  /** Products that satisfy a purchase rule; empty/absent = any purchase. */
4172
4222
  requiredProductIds?: string[];
4173
- /** Minimum age for an age_gate rule (default 18). */
4223
+ /**
4224
+ * Minimum age. For an `age_gate` rule it is the whole requirement (default
4225
+ * 18); on any other rule it is an extra check ON TOP OF the entitlement
4226
+ * (schema `ageGate`): the reader needs both.
4227
+ */
4174
4228
  minimumAge?: number;
4175
4229
  /** Free-preview length for work/global rules (panels in reading order). */
4176
4230
  previewPanelCount?: number;
4177
4231
  /** Panels gated by a panel-scoped rule. */
4178
4232
  targetPanelIds?: string[];
4233
+ /** Chapters (chapter scope) or extras blocks (extras scope) the rule gates — the manifest's `refId`. */
4234
+ targetIds?: string[];
4235
+ /** Reader-facing rule name and description (CMS), for purchase options. */
4236
+ name?: string;
4237
+ description?: string;
4238
+ /** Display price (CMS). */
4239
+ price?: {
4240
+ amount: number;
4241
+ currency: string;
4242
+ };
4243
+ /** The manifest's raw `requireEntitlement` key. */
4244
+ entitlementKey?: string;
4179
4245
  }
4180
4246
  /** What the reader "has" — the shape payments produce and the player consumes. */
4181
4247
  interface EntitlementSnapshot {
@@ -4189,6 +4255,10 @@ interface EntitlementSnapshot {
4189
4255
  interface PanelRef {
4190
4256
  id: string;
4191
4257
  index: number;
4258
+ /** Chapter the panel belongs to (enables chapter-scoped rules). */
4259
+ chapterId?: string;
4260
+ /** Reading-order index within its chapter (chapter-rule preview counting). */
4261
+ chapterIndex?: number;
4192
4262
  }
4193
4263
  type LockReason = 'subscription_required' | 'purchase_required' | 'age_verification_required' | null;
4194
4264
  interface AccessDecision {
@@ -4201,7 +4271,10 @@ interface AccessDecision {
4201
4271
  /** True when access exists only because the panel is inside the free preview. */
4202
4272
  preview: boolean;
4203
4273
  }
4204
- /** Does the reader's snapshot satisfy this rule's requirement? */
4274
+ /**
4275
+ * Does the reader's snapshot satisfy this rule's requirement? A rule with a
4276
+ * `minimumAge` needs the age AND its entitlement.
4277
+ */
4205
4278
  declare function satisfiesRule(rule: EvaluatorRule, entitlement: EntitlementSnapshot): boolean;
4206
4279
  /** The active work/global rule (first one wins — mirrors the CMS content map). */
4207
4280
  declare function findWorkGateRule(rules: EvaluatorRule[]): EvaluatorRule | null;
@@ -4209,6 +4282,8 @@ declare function findWorkGateRule(rules: EvaluatorRule[]): EvaluatorRule | null;
4209
4282
  * Evaluate one panel against the rules for a given reader snapshot.
4210
4283
  */
4211
4284
  declare function evaluatePanelAccess(rules: EvaluatorRule[], entitlement: EntitlementSnapshot, panel: PanelRef): AccessDecision;
4285
+ /** Is the extras block `extraId` locked by an extras-scoped rule? */
4286
+ declare function isExtraLocked(rules: EvaluatorRule[], entitlement: EntitlementSnapshot, extraId: string): boolean;
4212
4287
  /** Evaluate a whole work (panels in reading order). */
4213
4288
  declare function evaluateWorkAccess(rules: EvaluatorRule[], entitlement: EntitlementSnapshot, panels: PanelRef[]): AccessDecision[];
4214
4289
  /** A snapshot with no entitlements — what an anonymous first-time reader has. */
@@ -4222,12 +4297,19 @@ declare const ANONYMOUS_READER: EntitlementSnapshot;
4222
4297
  * `minimumAge` written by the CMS exporter. Prefer the CMS names and fall
4223
4298
  * back to the originals, so a manifest from either era gates identically.
4224
4299
  *
4225
- * A rule with `minimumAge`/`ageGate` but no recognised entitlement type is an
4226
- * age gate — that is the only sane reading of a rule that names an age.
4300
+ * `ageGate` / `minimumAge` is an age check ON TOP OF the entitlement (schema
4301
+ * semantics). Only a rule that declares no entitlement at all but names an
4302
+ * age becomes a pure age gate; a custom marker plus an age stays a purchase
4303
+ * (or subscription) gate that also requires the age.
4227
4304
  */
4228
4305
  declare function fromManifestRule(rule: PaywallRule, index: number): EvaluatorRule;
4229
4306
  /** Normalise every rule in a manifest. Returns [] when the work has no paywall. */
4230
4307
  declare function rulesFromManifest(manifest: PanelWaveManifest | null): EvaluatorRule[];
4308
+ /** Chapter id and within-chapter index per panel id (chapter-rule previews). */
4309
+ declare function chapterOrderFromManifest(manifest: PanelWaveManifest | null): Map<string, {
4310
+ chapterId: string;
4311
+ chapterIndex: number;
4312
+ }>;
4231
4313
  /**
4232
4314
  * Global reading order for preview counting: chapters in array order, and
4233
4315
  * within a chapter the panel declaration order.
@@ -4262,11 +4344,15 @@ declare function toEntitlementStatus(decision: AccessDecision, entitlement: Enti
4262
4344
  declare class PaywallService {
4263
4345
  private rules;
4264
4346
  private readingOrder;
4347
+ private chapterOrder;
4265
4348
  private manifest;
4349
+ private products;
4266
4350
  private snapshotSubject;
4267
4351
  readonly snapshot$: Observable<EntitlementSnapshot>;
4268
4352
  /** Load the rules and reading order from a manifest. Safe to call repeatedly. */
4269
4353
  setManifest(manifest: PanelWaveManifest | null): void;
4354
+ /** `paywall.products` by id (format 1.6); the first entry wins on duplicate ids. */
4355
+ static productsFromManifest(manifest: PanelWaveManifest | null): Map<string, PaywallProduct>;
4270
4356
  /** Replace what the reader owns (after sign-in, or a completed purchase). */
4271
4357
  setSnapshot(snapshot: EntitlementSnapshot | null | undefined): void;
4272
4358
  getSnapshot(): EntitlementSnapshot;
@@ -4282,16 +4368,34 @@ declare class PaywallService {
4282
4368
  * must not be handed out as a free sample.
4283
4369
  */
4284
4370
  evaluate(panelId: string): AccessDecision;
4371
+ /** Is this extras block locked by an extras-scoped rule the reader does not satisfy? */
4372
+ isExtraLocked(extraId: string): boolean;
4285
4373
  /** Convenience: may the reader open this panel? */
4286
4374
  canAccess(panelId: string): boolean;
4287
4375
  /**
4288
4376
  * Describe the gate blocking a panel, or null when it is not gated.
4289
4377
  * The shape is the player's existing `PaywallGate`, so the overlay needs
4290
- * no changes to render it.
4378
+ * no changes to render it. `locale` picks the language of product names
4379
+ * and descriptions from `paywall.products` (fallback: the work's default
4380
+ * locale).
4291
4381
  */
4292
- gateFor(panelId: string): PaywallGate | null;
4382
+ gateFor(panelId: string, locale?: LocaleCode): PaywallGate | null;
4383
+ /**
4384
+ * What the reader can buy to pass a rule: one option per required product
4385
+ * (purchase) or per subscription tier (subscription). Without explicit
4386
+ * ids, the rule's `requireEntitlement` key names the product, else the
4387
+ * rule id. Age gates and free rules offer nothing to buy.
4388
+ *
4389
+ * Labels (format 1.6): an option whose id has an entry in
4390
+ * `paywall.products` takes that entry's localized name, description and
4391
+ * price. Otherwise it falls back to the rule's name (a single option) or
4392
+ * the bare id (several options), and to the rule's description and price.
4393
+ */
4394
+ static purchaseOptions(rule: EvaluatorRule, products?: ReadonlyMap<string, PaywallProduct>, locale?: LocaleCode, fallbackLocale?: LocaleCode): PurchaseInfo[];
4293
4395
  /** The rule that gates a panel, for callers that need its price or name. */
4294
4396
  ruleFor(panelId: string): EvaluatorRule | null;
4397
+ /** The work's default locale (product-label fallback). */
4398
+ private get defaultLocale();
4295
4399
  /** Reset to a manifest-less, entitlement-less state. */
4296
4400
  clear(): void;
4297
4401
  /**
@@ -5345,9 +5449,10 @@ declare class PaywallOverlayComponent {
5345
5449
  */
5346
5450
  getMessage(): string;
5347
5451
  /**
5348
- * Handle purchase option selection
5452
+ * Handle purchase option selection: `purchase` carries the product id,
5453
+ * `action` is 'subscribe' for a subscription option, else 'purchase'.
5349
5454
  */
5350
- onPurchaseOption(productId: string): void;
5455
+ onPurchaseOption(option: PurchaseInfo): void;
5351
5456
  /**
5352
5457
  * Handle login action
5353
5458
  */
@@ -5444,6 +5549,8 @@ interface AgeVerificationResult {
5444
5549
  * Modal overlay for age verification
5445
5550
  */
5446
5551
  declare class AgeGateComponent {
5552
+ /** Optional: the gate is a public component and works (in English) without ngx-translate. */
5553
+ private readonly translate;
5447
5554
  /**
5448
5555
  * Visibility state
5449
5556
  */
@@ -5490,6 +5597,8 @@ declare class AgeGateComponent {
5490
5597
  * Get warning message
5491
5598
  */
5492
5599
  getWarningMessage(): string;
5600
+ /** Translate an `age_gate.*` UI string (English fallback). */
5601
+ t(key: string, params?: Record<string, unknown>): string;
5493
5602
  /**
5494
5603
  * Handle verification submit
5495
5604
  */
@@ -5506,8 +5615,9 @@ declare class AgeGateComponent {
5506
5615
  * Calculate age from birth date
5507
5616
  */
5508
5617
  private calculateAge;
5618
+ private monthCache?;
5509
5619
  /**
5510
- * Get month options
5620
+ * Month options, named in the current locale (Intl; cached per locale).
5511
5621
  */
5512
5622
  getMonthOptions(): {
5513
5623
  value: string;
@@ -5537,12 +5647,18 @@ declare class AgeGateComponent {
5537
5647
  interface BranchChoice {
5538
5648
  /** The graph edge this choice traverses. */
5539
5649
  edge: Edge;
5540
- /** Reader-facing label (edge label → target panel title → "Option N"). */
5650
+ /**
5651
+ * Reader-facing label (edge label → target panel title). Empty: the
5652
+ * chooser shows a translated "Option N".
5653
+ */
5541
5654
  label: string;
5542
5655
  /** Position in the offered list (0-based), stable for tracking. */
5543
5656
  index: number;
5544
5657
  }
5545
5658
  declare class BranchChooserComponent {
5659
+ private readonly translate;
5660
+ /** Translate a `branch_chooser.*` UI string (English fallback). */
5661
+ t(key: string, params?: Record<string, unknown>): string;
5546
5662
  /** Visible state */
5547
5663
  visible: boolean;
5548
5664
  /** Current locale (labels are already resolved by the shell). */
@@ -5582,7 +5698,7 @@ interface EntitlementAdapter {
5582
5698
  * Player Shell Component
5583
5699
  * Main orchestrator for the PanelWave player
5584
5700
  */
5585
- declare class PlayerShellComponent implements OnInit, OnDestroy {
5701
+ declare class PlayerShellComponent implements OnInit, OnChanges, OnDestroy {
5586
5702
  /**
5587
5703
  * Manifest to load
5588
5704
  */
@@ -5614,12 +5730,16 @@ declare class PlayerShellComponent implements OnInit, OnDestroy {
5614
5730
  /** Bearer token identifying the reader to `entitlementEndpoint`. */
5615
5731
  readerToken?: string;
5616
5732
  /**
5617
- * Emitted when a reader acts on the paywall overlay. The host owns
5618
- * checkout — the player never talks to a payment provider itself.
5733
+ * Emitted when a reader acts on the paywall overlay: `purchase` /
5734
+ * `subscribe` (with the chosen option's `productId` — a product id or a
5735
+ * subscription tier), `login` or `dismiss`. The host owns checkout — the
5736
+ * player never talks to a payment provider itself; call
5737
+ * `refreshEntitlements()` (or pass a new `entitlementSnapshot`) afterwards.
5619
5738
  */
5620
5739
  paywallAction: EventEmitter<{
5621
5740
  action: PaywallAction;
5622
5741
  gate: PaywallGate;
5742
+ productId?: string;
5623
5743
  }>;
5624
5744
  /**
5625
5745
  * Emitted after the reader answers an `age_gate` rule's overlay (verified or
@@ -5802,6 +5922,8 @@ declare class PlayerShellComponent implements OnInit, OnDestroy {
5802
5922
  */
5803
5923
  paywallGate: PaywallGate | null;
5804
5924
  paywallVisible: boolean;
5925
+ /** Product id / tier of the overlay option the reader just picked. */
5926
+ paywallProductId?: string;
5805
5927
  /** Adapter built from `entitlementEndpoint`, when the host supplied one. */
5806
5928
  private httpEntitlement?;
5807
5929
  /**
@@ -5978,10 +6100,30 @@ declare class PlayerShellComponent implements OnInit, OnDestroy {
5978
6100
  private readonly translationService;
5979
6101
  private readonly canvasCamera;
5980
6102
  private readonly paywallService;
6103
+ /** ngOnInit ran: later input changes are live updates, not initial values. */
6104
+ private initialized;
6105
+ /** The state subscriptions are set up once per instance, not per (re)load. */
6106
+ private stateSubscribed;
5981
6107
  /**
5982
6108
  * Initialize component
5983
6109
  */
5984
6110
  ngOnInit(): void;
6111
+ /**
6112
+ * Inputs changed after init. The first round (before ngOnInit) is skipped:
6113
+ * ngOnInit reads every input itself, so nothing loads twice.
6114
+ */
6115
+ ngOnChanges(changes: SimpleChanges): void;
6116
+ /**
6117
+ * Reload the work from the current `manifest` / `manifestUrl` inputs
6118
+ * (also the error screen's Retry). Story state of the previous load —
6119
+ * position, variables except persistent ones, open overlays, autoplay —
6120
+ * is reset; the analytics session of the previous work is closed.
6121
+ */
6122
+ reload(): Promise<void>;
6123
+ /** Content locale + GUI language follow `locale`. */
6124
+ private applyLocale;
6125
+ /** Apply a changed `viewModeOverride` to the running view. */
6126
+ private applyViewModeOverride;
5985
6127
  /**
5986
6128
  * Cleanup on destroy
5987
6129
  */
@@ -6069,8 +6211,11 @@ declare class PlayerShellComponent implements OnInit, OnDestroy {
6069
6211
  * @param transition - Optional transition to render for this panel change
6070
6212
  * (already resolved against the outputPresets default). Omitted for
6071
6213
  * non-adjacent jumps (TOC, initial load), which swap instantly.
6214
+ * @param mutations - Variable mutations of the traversed edge. Applied only
6215
+ * once the navigation is allowed (after the paywall / age gate), so a
6216
+ * blocked attempt never changes story state.
6072
6217
  */
6073
- navigateToPanel(chapterId: string, panelId: string, transition?: Transition, cameraMove?: CameraMove): Promise<void>;
6218
+ navigateToPanel(chapterId: string, panelId: string, transition?: Transition, cameraMove?: CameraMove, mutations?: Mutation[]): Promise<void>;
6074
6219
  /**
6075
6220
  * Rebuild the flat variable context handed to the viewport/canvas for
6076
6221
  * hotspot visibleIf evaluation. New object identity per call so OnPush
@@ -6176,6 +6321,8 @@ declare class PlayerShellComponent implements OnInit, OnDestroy {
6176
6321
  * Toolbar event handlers
6177
6322
  */
6178
6323
  onToggleView(): void;
6324
+ /** Land the canvas camera on the current panel (entering canvas view). */
6325
+ private jumpCameraToCurrentPanel;
6179
6326
  /**
6180
6327
  * Tap on a placed panel in canvas view. Traverses the matching out-edge of
6181
6328
  * the current panel when its condition passes (the graph still gates
@@ -6184,6 +6331,12 @@ declare class PlayerShellComponent implements OnInit, OnDestroy {
6184
6331
  * state.
6185
6332
  */
6186
6333
  onCanvasPanelTap(panelId: string): void;
6334
+ /**
6335
+ * The manifest actually loaded — from `manifest` or fetched via
6336
+ * `manifestUrl`. Everything that lists the work (ToC, thumbnails) binds to
6337
+ * this, never to the `manifest` input, which is unset for URL loading.
6338
+ */
6339
+ get loadedManifest(): PanelWaveManifest | undefined;
6187
6340
  /** Balloon defaults for the canvas stage (same source as the viewport). */
6188
6341
  get manifestBalloonConfig(): BalloonConfig | null;
6189
6342
  /** Manifest characters for speech-bubble styling in canvas view. */
@@ -6452,9 +6605,15 @@ declare class PlayerShellComponent implements OnInit, OnDestroy {
6452
6605
  private restoreSocialState;
6453
6606
  /** `bookmarked` is true only while the reader is ON the bookmarked panel. */
6454
6607
  private syncBookmarkFlag;
6455
- /** More than one edge leaves the current panel — the toolbar shows "Choices". */
6608
+ /**
6609
+ * At least two paths out of the current panel are open right now (edge
6610
+ * conditions evaluated exactly like the chooser does) — the toolbar shows
6611
+ * "Choices". A closed conditional edge does not count.
6612
+ */
6456
6613
  get hasBranchesAhead(): boolean;
6457
- /** Outgoing edges whose conditions pass right now, with reader-facing labels. */
6614
+ /** Outgoing edges of the current panel whose conditions pass right now. */
6615
+ private openEdges;
6616
+ /** Open outgoing edges with reader-facing labels. */
6458
6617
  private computeBranchChoices;
6459
6618
  private branchLabel;
6460
6619
  private localizedText;
@@ -7185,5 +7344,5 @@ declare class PlayerComponent {
7185
7344
  static ɵcmp: i0.ɵɵComponentDeclaration<PlayerComponent, "pw-player", never, {}, {}, never, never, true, never>;
7186
7345
  }
7187
7346
 
7188
- export { ANONYMOUS_READER, ActionModalComponent, AgeGateComponent, AudioEngineService, BranchChooserComponent, CANVAS_PANEL_BUDGET, CanvasCameraService, CanvasStageComponent, ComicBalloon, DEFAULT_BALLOON_CONFIG, DEFAULT_STALL_TIMEOUT_MS, DEFAULT_VIDEO_MUTED, DEFAULT_VIDEO_PLAY_MODE, DEFAULT_VIDEO_START_MODE, EntitlementError, EntitlementService, ExportService, FlowEngineService, HotspotActionService, HotspotsOverlayComponent, HttpEntitlementAdapter, ImageCacheService, ManifestService, MockEntitlementAdapter, NullEntitlementAdapter, PANEL_AUDIO_LEAVE_FADE_MS, PanelAudioService, PaywallOverlayComponent, PaywallService, PlayerComponent, PlayerEvent, PlayerService, PlayerShellComponent, PlayerStateService, PluginHostService, PluginSandboxComponent, PreloadService, PwIconComponent, RESERVED_NAMESPACES, SpeechBubblesComponent, TrackingService, TranslationService, UserGestureService, VISIBILITY_THRESHOLD, VariableStoreService, VideoControllerService, VideoLayerComponent, VideoSequencerService, VisibilityService, applyVariantOverrides, balloonConfigToRenderOptions, balloonConfigToTailOptions, busForRole, createBalloon, evaluatePanelAccess, evaluateWorkAccess, findWorkGateRule, fromManifestRule, mergeBalloonConfig, readingOrderFromManifest, resolveMuted, resolvePanelVariant, resolvePanels, resolvePlayMode, resolveStartMode, resolveVideoConfig, rulesFromManifest, satisfiesRule, selectVariant, toEntitlementStatus };
7189
- export type { AccessDecision, AgeVerificationResult, AssetBase, AssetCatalogItem, AssetCatalogItemAudio, AssetCatalogItemImage, AssetCatalogItemJson, AssetCatalogItemPluginPayload, AssetCatalogItemSubtitle, AssetCatalogItemVector, AssetCatalogItemVideo, AssetCategory, AssetCommon, AssetRef, AssetReference, AssetVariant, Assets, AudioLayer, AudioRole, AudioTrack, AudioVariant, BalloonConfig, BalloonConfigOverride, BalloonOptions, BalloonRenderResult, BalloonType, Bookmark, BoundingBox, BranchChoice, BubbleStyle, BubbleTail, CameraMove, CameraMovePath, CameraState, CameraZoomProfile, CanvasBackground, CanvasCameraPolicy, CanvasDecoration, CanvasFitMode, CanvasFreeRoam, CanvasLayout, CanvasOverviewPolicy, CanvasPlacement, CanvasRevealMode, Chapter, Character$1 as Character, ContentWarning, Creator, DecisionEvent, DeepLinkTarget, DeviceVariables, Edge, EffectiveVideoConfig, EntitlementAdapter$1 as EntitlementAdapter, EntitlementContext, EntitlementErrorCode, EntitlementSnapshot, EntitlementSnapshotResponse, EntitlementStatus, EntitlementVariables, ErrorEvent$1 as ErrorEvent, EvaluatorEntitlementType, EvaluatorRule, EvaluatorScope, ExtraImage, ExtraItem, Extras, FormatView, Graph, HideBorderConfig, Hotspot, HotspotAction, HotspotCircle, HotspotGoToAction, HotspotOpenExtrasAction, HotspotOpenModalAction, HotspotPluginEventAction, HotspotPolygon, HotspotRect, HotspotSetVariablesAction, HotspotShape, HotspotUiEffect, HttpEntitlementAdapterConfig, ImageLayer, ImageVariant, JsonLogic, JsonLogicExpression, JsonValue, JsonVariant, Layer, LayerKind, LayerViewMode, LocaleCode, LocalizedString, LockReason, Meta, Mutation, MutationOperation, NavigationPath, NodeMetadata, NormalizedPoint, NormalizedRect, OutputFormat, OutputPreset, OverlayState, Page, PageLayout, Panel, PanelAudioRole, PanelAudioTrack, PanelChangeEvent, PanelPartial, PanelPlacement, PanelRef, PanelVariant, PanelWaveManifest, PanelwaveHeader, Paywall, PaywallAction, PaywallEvent, PaywallGate$1 as PaywallGate, PaywallRule, PlaybackState, PlayerError, PlayerErrorCode, PlayerEventData, PlayerOptions, PlayerPreferences, PlayerState, PlayerStatistics, PluginInstance$1 as PluginInstance, PluginLayer, PreferenceVariables, PreloadItem, PreloadPriority, PreloadSettings, PreloadStatus$1 as PreloadStatus, PreviewInfo, PurchaseInfo, ReadingProgress, ResolvedPanel, ResolvedPanelAudio, SequenceAudioTrack, SequencedVideo, SequencedVideoInfo, Settings, SpeechBubble, StagePlacement, SubtitleVariant, TailConfig, TailCurve, TailOptions, TextLayer, TextStyle, Tracking, TrackingConfig$1 as TrackingConfig, TrackingEvent, Transform, Transition, TraversalOptions, TraversalResult, UIDefaults, UISettings, UserInfo, UserVariables, VariableChangeEvent, VariableContext, VariableDefinition, VariableMutation, VariableScope, VariableStore, VariableType, VariableValidationResult, Variables, VariantContext, VectorVariant, VideoEvent, VideoLayer, VideoPlayMode, VideoPoster, VideoStartMode, VideoState, VideoStatus, VideoTrackingPayload, VideoTrigger, VideoVariant, ViewMode, ViewportState, VisibilityChange, WorldPoint, WorldRect };
7347
+ export { ANONYMOUS_READER, ActionModalComponent, AgeGateComponent, AudioEngineService, BranchChooserComponent, CANVAS_PANEL_BUDGET, CanvasCameraService, CanvasStageComponent, ComicBalloon, DEFAULT_BALLOON_CONFIG, DEFAULT_STALL_TIMEOUT_MS, DEFAULT_VIDEO_MUTED, DEFAULT_VIDEO_PLAY_MODE, DEFAULT_VIDEO_START_MODE, EntitlementError, EntitlementService, ExportService, FlowEngineService, HotspotActionService, HotspotsOverlayComponent, HttpEntitlementAdapter, ImageCacheService, ManifestService, MockEntitlementAdapter, NullEntitlementAdapter, PANEL_AUDIO_LEAVE_FADE_MS, PanelAudioService, PaywallOverlayComponent, PaywallService, PlayerComponent, PlayerEvent, PlayerService, PlayerShellComponent, PlayerStateService, PluginHostService, PluginSandboxComponent, PreloadService, PwIconComponent, RESERVED_NAMESPACES, SpeechBubblesComponent, TrackingService, TranslationService, UserGestureService, VISIBILITY_THRESHOLD, VariableStoreService, VideoControllerService, VideoLayerComponent, VideoSequencerService, VisibilityService, applyVariantOverrides, balloonConfigToRenderOptions, balloonConfigToTailOptions, busForRole, chapterOrderFromManifest, createBalloon, evaluatePanelAccess, evaluateWorkAccess, findWorkGateRule, fromManifestRule, isExtraLocked, mergeBalloonConfig, readingOrderFromManifest, resolveMuted, resolvePanelVariant, resolvePanels, resolvePlayMode, resolveStartMode, resolveVideoConfig, rulesFromManifest, satisfiesRule, selectVariant, toEntitlementStatus };
7348
+ export type { AccessDecision, AgeVerificationResult, AssetBase, AssetCatalogItem, AssetCatalogItemAudio, AssetCatalogItemImage, AssetCatalogItemJson, AssetCatalogItemPluginPayload, AssetCatalogItemSubtitle, AssetCatalogItemVector, AssetCatalogItemVideo, AssetCategory, AssetCommon, AssetRef, AssetReference, AssetVariant, Assets, AudioLayer, AudioRole, AudioTrack, AudioVariant, BalloonConfig, BalloonConfigOverride, BalloonOptions, BalloonRenderResult, BalloonType, Bookmark, BoundingBox, BranchChoice, BubbleStyle, BubbleTail, CameraMove, CameraMovePath, CameraState, CameraZoomProfile, CanvasBackground, CanvasCameraPolicy, CanvasDecoration, CanvasFitMode, CanvasFreeRoam, CanvasLayout, CanvasOverviewPolicy, CanvasPlacement, CanvasRevealMode, Chapter, Character$1 as Character, ContentWarning, Creator, DecisionEvent, DeepLinkTarget, DeviceVariables, Edge, EffectiveVideoConfig, EntitlementAdapter$1 as EntitlementAdapter, EntitlementContext, EntitlementErrorCode, EntitlementSnapshot, EntitlementSnapshotResponse, EntitlementStatus, EntitlementVariables, ErrorEvent$1 as ErrorEvent, EvaluatorEntitlementType, EvaluatorRule, EvaluatorScope, ExtraImage, ExtraItem, Extras, FormatView, Graph, HideBorderConfig, Hotspot, HotspotAction, HotspotCircle, HotspotGoToAction, HotspotOpenExtrasAction, HotspotOpenModalAction, HotspotPluginEventAction, HotspotPolygon, HotspotRect, HotspotSetVariablesAction, HotspotShape, HotspotUiEffect, HttpEntitlementAdapterConfig, ImageLayer, ImageVariant, JsonLogic, JsonLogicExpression, JsonValue, JsonVariant, Layer, LayerKind, LayerViewMode, LocaleCode, LocalizedString, LockReason, Meta, Mutation, MutationOperation, NavigationPath, NodeMetadata, NormalizedPoint, NormalizedRect, OutputFormat, OutputPreset, OverlayState, Page, PageLayout, Panel, PanelAudioRole, PanelAudioTrack, PanelChangeEvent, PanelPartial, PanelPlacement, PanelRef, PanelVariant, PanelWaveManifest, PanelwaveHeader, Paywall, PaywallAction, PaywallEvent, PaywallGate$1 as PaywallGate, PaywallProduct, PaywallRule, PlaybackState, PlayerError, PlayerErrorCode, PlayerEventData, PlayerOptions, PlayerPreferences, PlayerState, PlayerStatistics, PluginInstance$1 as PluginInstance, PluginLayer, PreferenceVariables, PreloadItem, PreloadPriority, PreloadSettings, PreloadStatus$1 as PreloadStatus, PreviewInfo, PurchaseInfo, ReadingProgress, ResolvedPanel, ResolvedPanelAudio, SequenceAudioTrack, SequencedVideo, SequencedVideoInfo, Settings, SpeechBubble, StagePlacement, SubtitleVariant, TailConfig, TailCurve, TailOptions, TextLayer, TextStyle, Tracking, TrackingConfig$1 as TrackingConfig, TrackingEvent, Transform, Transition, TraversalOptions, TraversalResult, UIDefaults, UISettings, UserInfo, UserVariables, VariableChangeEvent, VariableContext, VariableDefinition, VariableMutation, VariableScope, VariableStore, VariableType, VariableValidationResult, Variables, VariantContext, VectorVariant, VideoEvent, VideoLayer, VideoPlayMode, VideoPoster, VideoStartMode, VideoState, VideoStatus, VideoTrackingPayload, VideoTrigger, VideoVariant, ViewMode, ViewportState, VisibilityChange, WorldPoint, WorldRect };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@panelwave/player",
3
- "version": "1.0.1",
3
+ "version": "1.1.0",
4
4
  "description": "Open-source Angular library for PanelWave interactive graphic novels",
5
5
  "keywords": [
6
6
  "angular",
@@ -180,7 +180,11 @@
180
180
  "sign_in": "Anmelden, um fortzufahren",
181
181
  "go_back": "Zurück",
182
182
  "maybe_later": "Vielleicht später",
183
- "secure_payment": "Sichere Zahlungsabwicklung"
183
+ "secure_payment": "Sichere Zahlungsabwicklung",
184
+ "reason_subscription_required": "Dieser Teil der Geschichte ist im Abo enthalten.",
185
+ "reason_purchase_required": "Dieser Teil der Geschichte ist käuflich erhältlich.",
186
+ "reason_age_verification_required": "Dieser Inhalt ist altersbeschränkt. Bestätige dein Alter, um fortzufahren.",
187
+ "reason_entitlement_required": "Für diesen Inhalt ist eine Berechtigung erforderlich."
184
188
  },
185
189
  "loading": {
186
190
  "text": "PanelWave wird geladen..."
@@ -191,5 +195,26 @@
191
195
  },
192
196
  "common": {
193
197
  "esc": "Esc"
198
+ },
199
+ "age_gate": {
200
+ "title": "Altersprüfung erforderlich",
201
+ "close": "Schließen",
202
+ "warning": "Dieser Inhalt ist nur für Personen ab {{age}} Jahren freigegeben.",
203
+ "prompt": "Bitte gib dein Geburtsdatum ein:",
204
+ "month": "Monat",
205
+ "day": "Tag",
206
+ "year": "Jahr",
207
+ "verify": "Alter bestätigen",
208
+ "privacy": "Deine Angaben sind privat und werden nicht gespeichert.",
209
+ "error_incomplete": "Bitte gib dein vollständiges Geburtsdatum ein.",
210
+ "error_month": "Bitte gib einen gültigen Monat ein (1-12).",
211
+ "error_day": "Bitte gib einen gültigen Tag ein (1-{{max}}).",
212
+ "error_year": "Bitte gib ein gültiges Jahr ein (1900-{{max}}).",
213
+ "error_too_young": "Du musst mindestens {{age}} Jahre alt sein, um diesen Inhalt zu sehen."
214
+ },
215
+ "branch_chooser": {
216
+ "title": "Wähle deinen Weg",
217
+ "close": "Schließen",
218
+ "option": "Option {{n}}"
194
219
  }
195
220
  }
@@ -180,7 +180,11 @@
180
180
  "sign_in": "Sign In to Continue",
181
181
  "go_back": "Go Back",
182
182
  "maybe_later": "Maybe Later",
183
- "secure_payment": "Secure payment processing"
183
+ "secure_payment": "Secure payment processing",
184
+ "reason_subscription_required": "This part of the story is included with a subscription.",
185
+ "reason_purchase_required": "This part of the story is available to buy.",
186
+ "reason_age_verification_required": "This content is age-restricted. Confirm your age to continue.",
187
+ "reason_entitlement_required": "This content requires an entitlement to access."
184
188
  },
185
189
  "loading": {
186
190
  "text": "Loading PanelWave..."
@@ -191,5 +195,26 @@
191
195
  },
192
196
  "common": {
193
197
  "esc": "Esc"
198
+ },
199
+ "age_gate": {
200
+ "title": "Age Verification Required",
201
+ "close": "Close",
202
+ "warning": "This content is restricted to users {{age}} years of age or older.",
203
+ "prompt": "Please enter your birth date:",
204
+ "month": "Month",
205
+ "day": "Day",
206
+ "year": "Year",
207
+ "verify": "Verify Age",
208
+ "privacy": "Your information is private and will not be stored.",
209
+ "error_incomplete": "Please enter your complete birth date.",
210
+ "error_month": "Please enter a valid month (1-12).",
211
+ "error_day": "Please enter a valid day (1-{{max}}).",
212
+ "error_year": "Please enter a valid year (1900-{{max}}).",
213
+ "error_too_young": "You must be at least {{age}} years old to access this content."
214
+ },
215
+ "branch_chooser": {
216
+ "title": "Choose your path",
217
+ "close": "Close",
218
+ "option": "Option {{n}}"
194
219
  }
195
220
  }