@progalaxyelabs/ngx-stonescriptphp-client 1.19.0 → 1.20.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.
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, makeEnvironmentProviders, Injectable, Inject, Optional, EventEmitter, Output, Input, Component } from '@angular/core';
2
+ import { InjectionToken, makeEnvironmentProviders, Injectable, Inject, Optional, EventEmitter, Output, Input, Component, input, output, signal, computed } from '@angular/core';
3
3
  import { BehaviorSubject } from 'rxjs';
4
4
  import * as i3 from '@angular/common';
5
5
  import { CommonModule } from '@angular/common';
@@ -3393,6 +3393,256 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
3393
3393
  type: Input
3394
3394
  }] } });
3395
3395
 
3396
+ class MonthYearPickerComponent {
3397
+ label = input('Select date', ...(ngDevMode ? [{ debugName: "label" }] : []));
3398
+ value = input(null, ...(ngDevMode ? [{ debugName: "value" }] : []));
3399
+ valueChange = output();
3400
+ MONTHS = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
3401
+ 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
3402
+ today = {
3403
+ month: new Date().getMonth(),
3404
+ year: new Date().getFullYear(),
3405
+ };
3406
+ isOpen = signal(false, ...(ngDevMode ? [{ debugName: "isOpen" }] : []));
3407
+ tempMonth = signal(null, ...(ngDevMode ? [{ debugName: "tempMonth" }] : []));
3408
+ tempYear = signal(null, ...(ngDevMode ? [{ debugName: "tempYear" }] : []));
3409
+ yearStart = signal(this.today.year - 4, ...(ngDevMode ? [{ debugName: "yearStart" }] : []));
3410
+ years = computed(() => Array.from({ length: 12 }, (_, i) => this.yearStart() + i), ...(ngDevMode ? [{ debugName: "years" }] : []));
3411
+ displayValue = computed(() => {
3412
+ const v = this.value();
3413
+ return v ? `${this.MONTHS[v.month]} ${v.year}` : '— / —';
3414
+ }, ...(ngDevMode ? [{ debugName: "displayValue" }] : []));
3415
+ preview = computed(() => {
3416
+ const m = this.tempMonth();
3417
+ const y = this.tempYear();
3418
+ if (m !== null && y !== null)
3419
+ return `${this.MONTHS[m]} ${y}`;
3420
+ if (m !== null)
3421
+ return `${this.MONTHS[m]} —`;
3422
+ if (y !== null)
3423
+ return `— ${y}`;
3424
+ return '';
3425
+ }, ...(ngDevMode ? [{ debugName: "preview" }] : []));
3426
+ open() {
3427
+ const v = this.value();
3428
+ this.tempMonth.set(v?.month ?? null);
3429
+ this.tempYear.set(v?.year ?? null);
3430
+ this.isOpen.set(true);
3431
+ }
3432
+ selectMonth(m) { this.tempMonth.set(m); }
3433
+ selectYear(y) { this.tempYear.set(y); }
3434
+ shiftYears(delta) { this.yearStart.update(s => s + delta); }
3435
+ confirm() {
3436
+ const m = this.tempMonth();
3437
+ const y = this.tempYear();
3438
+ if (m === null || y === null)
3439
+ return;
3440
+ this.valueChange.emit({ month: m, year: y });
3441
+ this.isOpen.set(false);
3442
+ }
3443
+ cancel() { this.isOpen.set(false); }
3444
+ isSelectedMonth(m) { return this.tempMonth() === m; }
3445
+ isSelectedYear(y) { return this.tempYear() === y; }
3446
+ isCurrentMonth(m) { return m === this.today.month; }
3447
+ isCurrentYear(y) { return y === this.today.year; }
3448
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: MonthYearPickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3449
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.17", type: MonthYearPickerComponent, isStandalone: true, selector: "nsx-month-year-picker", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChange: "valueChange" }, ngImport: i0, template: `
3450
+ <button
3451
+ type="button"
3452
+ class="btn btn-outline-secondary w-100 d-flex justify-content-between align-items-center"
3453
+ (click)="open()">
3454
+ <span class="font-monospace" [class.text-muted]="!value()">
3455
+ {{ displayValue() }}
3456
+ </span>
3457
+ <small class="text-muted">&#9662;</small>
3458
+ </button>
3459
+
3460
+ @if (isOpen()) {
3461
+ <div class="border rounded mt-1" style="overflow: hidden; position: relative; z-index: 10; background: white;">
3462
+
3463
+ <div class="d-flex justify-content-between align-items-center px-3 py-2 bg-body-tertiary border-bottom">
3464
+ <span class="text-uppercase text-muted fw-semibold" style="font-size: 10px; letter-spacing: .08em;">
3465
+ {{ label() }}
3466
+ </span>
3467
+ <span class="font-monospace fw-semibold">{{ preview() }}</span>
3468
+ </div>
3469
+
3470
+ <div class="px-2 pt-2 pb-1">
3471
+ <div class="text-uppercase text-muted px-1 mb-1" style="font-size: 10px; letter-spacing: .08em;">Month</div>
3472
+ <div class="row row-cols-4 g-1">
3473
+ @for (month of MONTHS; track $index) {
3474
+ <div class="col">
3475
+ <button
3476
+ type="button"
3477
+ class="btn btn-sm w-100"
3478
+ [class.btn-success]="isSelectedMonth($index)"
3479
+ [class.btn-outline-success]="isCurrentMonth($index) && !isSelectedMonth($index)"
3480
+ [class.btn-light]="!isSelectedMonth($index) && !isCurrentMonth($index)"
3481
+ (click)="selectMonth($index)">
3482
+ {{ month }}
3483
+ </button>
3484
+ </div>
3485
+ }
3486
+ </div>
3487
+ </div>
3488
+
3489
+ <div class="px-2 pt-1 pb-2">
3490
+ <div class="text-uppercase text-muted px-1 mb-1" style="font-size: 10px; letter-spacing: .08em;">Year</div>
3491
+ <div class="row row-cols-4 g-1">
3492
+ @for (year of years(); track year) {
3493
+ <div class="col">
3494
+ <button
3495
+ type="button"
3496
+ class="btn btn-sm w-100 font-monospace"
3497
+ [class.btn-success]="isSelectedYear(year)"
3498
+ [class.btn-outline-success]="isCurrentYear(year) && !isSelectedYear(year)"
3499
+ [class.btn-light]="!isSelectedYear(year) && !isCurrentYear(year)"
3500
+ (click)="selectYear(year)">
3501
+ {{ year }}
3502
+ </button>
3503
+ </div>
3504
+ }
3505
+ </div>
3506
+
3507
+ <div class="row g-1 mt-1">
3508
+ <div class="col">
3509
+ <button type="button" class="btn btn-sm btn-light w-100" (click)="shiftYears(-12)">
3510
+ &lsaquo; Earlier
3511
+ </button>
3512
+ </div>
3513
+ <div class="col">
3514
+ <button type="button" class="btn btn-sm btn-light w-100" (click)="shiftYears(12)">
3515
+ Later &rsaquo;
3516
+ </button>
3517
+ </div>
3518
+ </div>
3519
+ </div>
3520
+
3521
+ <div class="row g-0 border-top">
3522
+ <div class="col border-end">
3523
+ <button
3524
+ type="button"
3525
+ class="btn w-100 rounded-0 py-2 fw-semibold text-success"
3526
+ (click)="confirm()">
3527
+ OK
3528
+ </button>
3529
+ </div>
3530
+ <div class="col">
3531
+ <button
3532
+ type="button"
3533
+ class="btn btn-light w-100 rounded-0 py-2"
3534
+ (click)="cancel()">
3535
+ Cancel
3536
+ </button>
3537
+ </div>
3538
+ </div>
3539
+
3540
+ </div>
3541
+ }
3542
+ `, isInline: true });
3543
+ }
3544
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: MonthYearPickerComponent, decorators: [{
3545
+ type: Component,
3546
+ args: [{
3547
+ selector: 'nsx-month-year-picker',
3548
+ standalone: true,
3549
+ template: `
3550
+ <button
3551
+ type="button"
3552
+ class="btn btn-outline-secondary w-100 d-flex justify-content-between align-items-center"
3553
+ (click)="open()">
3554
+ <span class="font-monospace" [class.text-muted]="!value()">
3555
+ {{ displayValue() }}
3556
+ </span>
3557
+ <small class="text-muted">&#9662;</small>
3558
+ </button>
3559
+
3560
+ @if (isOpen()) {
3561
+ <div class="border rounded mt-1" style="overflow: hidden; position: relative; z-index: 10; background: white;">
3562
+
3563
+ <div class="d-flex justify-content-between align-items-center px-3 py-2 bg-body-tertiary border-bottom">
3564
+ <span class="text-uppercase text-muted fw-semibold" style="font-size: 10px; letter-spacing: .08em;">
3565
+ {{ label() }}
3566
+ </span>
3567
+ <span class="font-monospace fw-semibold">{{ preview() }}</span>
3568
+ </div>
3569
+
3570
+ <div class="px-2 pt-2 pb-1">
3571
+ <div class="text-uppercase text-muted px-1 mb-1" style="font-size: 10px; letter-spacing: .08em;">Month</div>
3572
+ <div class="row row-cols-4 g-1">
3573
+ @for (month of MONTHS; track $index) {
3574
+ <div class="col">
3575
+ <button
3576
+ type="button"
3577
+ class="btn btn-sm w-100"
3578
+ [class.btn-success]="isSelectedMonth($index)"
3579
+ [class.btn-outline-success]="isCurrentMonth($index) && !isSelectedMonth($index)"
3580
+ [class.btn-light]="!isSelectedMonth($index) && !isCurrentMonth($index)"
3581
+ (click)="selectMonth($index)">
3582
+ {{ month }}
3583
+ </button>
3584
+ </div>
3585
+ }
3586
+ </div>
3587
+ </div>
3588
+
3589
+ <div class="px-2 pt-1 pb-2">
3590
+ <div class="text-uppercase text-muted px-1 mb-1" style="font-size: 10px; letter-spacing: .08em;">Year</div>
3591
+ <div class="row row-cols-4 g-1">
3592
+ @for (year of years(); track year) {
3593
+ <div class="col">
3594
+ <button
3595
+ type="button"
3596
+ class="btn btn-sm w-100 font-monospace"
3597
+ [class.btn-success]="isSelectedYear(year)"
3598
+ [class.btn-outline-success]="isCurrentYear(year) && !isSelectedYear(year)"
3599
+ [class.btn-light]="!isSelectedYear(year) && !isCurrentYear(year)"
3600
+ (click)="selectYear(year)">
3601
+ {{ year }}
3602
+ </button>
3603
+ </div>
3604
+ }
3605
+ </div>
3606
+
3607
+ <div class="row g-1 mt-1">
3608
+ <div class="col">
3609
+ <button type="button" class="btn btn-sm btn-light w-100" (click)="shiftYears(-12)">
3610
+ &lsaquo; Earlier
3611
+ </button>
3612
+ </div>
3613
+ <div class="col">
3614
+ <button type="button" class="btn btn-sm btn-light w-100" (click)="shiftYears(12)">
3615
+ Later &rsaquo;
3616
+ </button>
3617
+ </div>
3618
+ </div>
3619
+ </div>
3620
+
3621
+ <div class="row g-0 border-top">
3622
+ <div class="col border-end">
3623
+ <button
3624
+ type="button"
3625
+ class="btn w-100 rounded-0 py-2 fw-semibold text-success"
3626
+ (click)="confirm()">
3627
+ OK
3628
+ </button>
3629
+ </div>
3630
+ <div class="col">
3631
+ <button
3632
+ type="button"
3633
+ class="btn btn-light w-100 rounded-0 py-2"
3634
+ (click)="cancel()">
3635
+ Cancel
3636
+ </button>
3637
+ </div>
3638
+ </div>
3639
+
3640
+ </div>
3641
+ }
3642
+ `,
3643
+ }]
3644
+ }], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], valueChange: [{ type: i0.Output, args: ["valueChange"] }] } });
3645
+
3396
3646
  class TenantRegisterComponent {
3397
3647
  auth;
3398
3648
  providerRegistry;
@@ -4283,5 +4533,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
4283
4533
  * Generated bundle index. Do not edit.
4284
4534
  */
4285
4535
 
4286
- export { AUTH_PLUGIN, ApiConnectionService, ApiResponse, AuthPageComponent, AuthService, CsrfService, DbService, FilesService, LogService, LoginDialogComponent, MyEnvironmentModel, ProgalaxyElabsAuth, ProviderRegistryService, RegisterComponent, SigninStatusService, StoneScriptPHPAuth, TenantLoginComponent, TenantLoginDialogComponent, TenantRegisterComponent, TenantRegisterDialogComponent, TokenService, VerifyStatus, provideNgxStoneScriptPhpClient };
4536
+ export { AUTH_PLUGIN, ApiConnectionService, ApiResponse, AuthPageComponent, AuthService, CsrfService, DbService, FilesService, LogService, LoginDialogComponent, MonthYearPickerComponent, MyEnvironmentModel, ProgalaxyElabsAuth, ProviderRegistryService, RegisterComponent, SigninStatusService, StoneScriptPHPAuth, TenantLoginComponent, TenantLoginDialogComponent, TenantRegisterComponent, TenantRegisterDialogComponent, TokenService, VerifyStatus, provideNgxStoneScriptPhpClient };
4287
4537
  //# sourceMappingURL=progalaxyelabs-ngx-stonescriptphp-client.mjs.map