@semantic-components/ui-lab 0.76.0 → 0.77.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,20 +1,18 @@
1
1
  import * as i0 from '@angular/core';
2
- import { input, computed, ChangeDetectionStrategy, ViewEncapsulation, Component, inject, DestroyRef, output, signal, effect, ElementRef, InjectionToken, model, viewChild, Directive, PLATFORM_ID, afterNextRender, TemplateRef, contentChild, ViewChild, ViewContainerRef, Injector, runInInjectionContext, contentChildren, untracked, Injectable, booleanAttribute } from '@angular/core';
2
+ import { input, computed, ChangeDetectionStrategy, ViewEncapsulation, Component, inject, DestroyRef, output, signal, effect, ElementRef, InjectionToken, model, viewChild, Directive, PLATFORM_ID, afterNextRender, TemplateRef, contentChild, Injector, runInInjectionContext, contentChildren, ViewContainerRef, ViewChild, untracked, Injectable, booleanAttribute } from '@angular/core';
3
3
  import { RouterOutlet, Router, NavigationEnd } from '@angular/router';
4
- import { cn, ScSlider, buttonVariants, ScCalendar, SC_FIELD, SC_TIME_PICKER, ScPopoverProvider, ScButton, ScPopoverTrigger, ScPopoverPortal, ScPopover } from '@semantic-components/ui';
5
- import { SiVolumeOffIcon, SiVolumeXIcon, SiVolume1Icon, SiVolume2Icon, SiPipetteIcon, SiSearchIcon, SiChevronRightIcon, SiChevronUpIcon, SiChevronDownIcon, SiChevronsUpDownIcon, SiSlidersVerticalIcon, SiChevronsLeftIcon, SiChevronLeftIcon, SiChevronsRightIcon, SiCalendarIcon, SiXIcon, SiSmileIcon, SiLoaderCircleIcon, SiPlusIcon, SiZoomOutIcon, SiZoomInIcon, SiMinimize2Icon, SiCheckIcon, SiTriangleAlertIcon, SiCircleXIcon, SiMessageSquareIcon, SiInfoIcon, SiCircleCheckIcon, SiTrash2Icon, SiBellIcon, SiMinusIcon, SiEyeIcon, SiEyeOffIcon, SiCircleIcon, SiFileTextIcon, SiRotateCcwIcon, SiRotateCwIcon, SiDownloadIcon, SiPrinterIcon, SiMaximizeIcon, SiMinimizeIcon, SiPhoneIcon, SiGripVerticalIcon, SiClockIcon, SiGlobeIcon } from '@semantic-icons/lucide-icons';
4
+ import { cn, ScSlider, buttonVariants, ScCalendar, ScCalendarHeader, ScCalendarHeading, ScCalendarNext, ScCalendarPrevious, SC_FIELD, SC_TIME_PICKER, ScPopoverProvider, ScButton, ScPopoverTrigger, ScPopoverPortal, ScPopover } from '@semantic-components/ui';
5
+ import { SiVolumeOffIcon, SiVolumeXIcon, SiVolume1Icon, SiVolume2Icon, SiCircleAlertIcon, SiCircleXIcon, SiScanBarcodeIcon, SiSquareIcon, SiSwitchCameraIcon, SiFlashlightIcon, SiPipetteIcon, SiChevronUpIcon, SiChevronDownIcon, SiChevronsUpDownIcon, SiSlidersVerticalIcon, SiChevronsLeftIcon, SiChevronLeftIcon, SiChevronRightIcon, SiChevronsRightIcon, SiCalendarIcon, SiXIcon, SiSmileIcon, SiLoaderCircleIcon, SiPlusIcon, SiZoomOutIcon, SiZoomInIcon, SiMinimize2Icon, SiCheckIcon, SiTriangleAlertIcon, SiMessageSquareIcon, SiInfoIcon, SiCircleCheckIcon, SiTrash2Icon, SiBellIcon, SiMinusIcon, SiEyeIcon, SiEyeOffIcon, SiCircleIcon, SiFileTextIcon, SiRotateCcwIcon, SiRotateCwIcon, SiDownloadIcon, SiPrinterIcon, SiMaximizeIcon, SiMinimizeIcon, SiPhoneIcon, SiGripVerticalIcon, SiClockIcon, SiGlobeIcon } from '@semantic-icons/lucide-icons';
6
6
  import { isPlatformBrowser, NgTemplateOutlet, DOCUMENT } from '@angular/common';
7
7
  import { _IdGenerator, CdkTrapFocus } from '@angular/cdk/a11y';
8
- import * as i1 from '@angular/aria/listbox';
9
- import { Option, Listbox } from '@angular/aria/listbox';
10
- import * as i1$1 from '@angular/cdk/overlay';
11
- import { Overlay, OverlayModule, CdkOverlayOrigin } from '@angular/cdk/overlay';
12
- import { TemplatePortal } from '@angular/cdk/portal';
13
8
  import { Temporal } from '@js-temporal/polyfill';
14
9
  import { DomSanitizer } from '@angular/platform-browser';
10
+ import * as i1 from '@angular/cdk/overlay';
11
+ import { CdkOverlayOrigin, Overlay, OverlayModule } from '@angular/cdk/overlay';
15
12
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
16
13
  import { filter } from 'rxjs';
17
- import * as i1$2 from '@angular/aria/tree';
14
+ import { TemplatePortal } from '@angular/cdk/portal';
15
+ import * as i1$1 from '@angular/aria/tree';
18
16
  import { Tree, TreeItemGroup, TreeItem } from '@angular/aria/tree';
19
17
 
20
18
  class ScStackedLayout {
@@ -546,8 +544,7 @@ class ScAudioPlayerProgress {
546
544
  player = inject(SC_AUDIO_PLAYER);
547
545
  classInput = input('', { ...(ngDevMode ? { debugName: "classInput" } : {}), alias: 'class' });
548
546
  class = computed(() => cn('flex items-center gap-2', this.classInput()), ...(ngDevMode ? [{ debugName: "class" }] : []));
549
- onSeek(event) {
550
- const percent = +event.target.value;
547
+ onSeek(percent) {
551
548
  this.player.seek((percent / 100) * this.player.duration());
552
549
  }
553
550
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: ScAudioPlayerProgress, deps: [], target: i0.ɵɵFactoryTarget.Component });
@@ -567,18 +564,16 @@ class ScAudioPlayerProgress {
567
564
  aria-label="Seek"
568
565
  class="absolute inset-0 h-full [&::-moz-range-progress]:transition-[height] group-hover:[&::-moz-range-progress]:h-1.5 [&::-moz-range-track]:transition-[height] group-hover:[&::-moz-range-track]:h-1.5 [&::-webkit-slider-runnable-track]:transition-[height] group-hover:[&::-webkit-slider-runnable-track]:h-1.5"
569
566
  style="--muted: oklch(0 0 0 / 0.1)"
570
- min="0"
571
- max="100"
572
- step="0.1"
567
+ [max]="100"
568
+ [step]="0.1"
573
569
  [value]="player.progressPercent()"
574
- [style.--fill-percent]="player.progressPercent() + '%'"
575
- (input)="onSeek($event)"
570
+ (valueChange)="onSeek($event)"
576
571
  />
577
572
  </div>
578
573
  <span class="text-muted-foreground w-10 text-xs">
579
574
  {{ player.formatTime(player.duration()) }}
580
575
  </span>
581
- `, isInline: true, dependencies: [{ kind: "directive", type: ScSlider, selector: "input[scSlider]", inputs: ["id", "class", "aria-describedby"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
576
+ `, isInline: true, dependencies: [{ kind: "directive", type: ScSlider, selector: "input[scSlider]", inputs: ["value", "min", "max", "step", "id", "class", "aria-describedby"], outputs: ["valueChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
582
577
  }
583
578
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: ScAudioPlayerProgress, decorators: [{
584
579
  type: Component,
@@ -601,12 +596,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
601
596
  aria-label="Seek"
602
597
  class="absolute inset-0 h-full [&::-moz-range-progress]:transition-[height] group-hover:[&::-moz-range-progress]:h-1.5 [&::-moz-range-track]:transition-[height] group-hover:[&::-moz-range-track]:h-1.5 [&::-webkit-slider-runnable-track]:transition-[height] group-hover:[&::-webkit-slider-runnable-track]:h-1.5"
603
598
  style="--muted: oklch(0 0 0 / 0.1)"
604
- min="0"
605
- max="100"
606
- step="0.1"
599
+ [max]="100"
600
+ [step]="0.1"
607
601
  [value]="player.progressPercent()"
608
- [style.--fill-percent]="player.progressPercent() + '%'"
609
- (input)="onSeek($event)"
602
+ (valueChange)="onSeek($event)"
610
603
  />
611
604
  </div>
612
605
  <span class="text-muted-foreground w-10 text-xs">
@@ -772,10 +765,6 @@ class ScAudioPlayerVolume {
772
765
  classInput = input('', { ...(ngDevMode ? { debugName: "classInput" } : {}), alias: 'class' });
773
766
  iconButtonClass = cn(buttonVariants({ variant: 'ghost', size: 'sm' }), 'size-7 rounded-full');
774
767
  class = computed(() => cn('flex items-center justify-center gap-2', this.classInput()), ...(ngDevMode ? [{ debugName: "class" }] : []));
775
- onVolumeChange(event) {
776
- const value = +event.target.value;
777
- this.player.setVolume(value);
778
- }
779
768
  onMaxVolume() {
780
769
  this.player.setVolume(1);
781
770
  }
@@ -801,14 +790,12 @@ class ScAudioPlayerVolume {
801
790
  <input
802
791
  scSlider
803
792
  class="w-24"
804
- min="0"
805
- max="1"
806
- step="0.01"
793
+ [max]="1"
794
+ [step]="0.01"
807
795
  aria-label="Volume"
808
796
  [disabled]="player.isMuted()"
809
797
  [value]="player.volume()"
810
- [style.--fill-percent]="player.volume() * 100 + '%'"
811
- (input)="onVolumeChange($event)"
798
+ (valueChange)="player.setVolume($event)"
812
799
  />
813
800
 
814
801
  <button
@@ -819,7 +806,7 @@ class ScAudioPlayerVolume {
819
806
  >
820
807
  <svg siVolume2Icon class="pointer-events-none size-3.5"></svg>
821
808
  </button>
822
- `, isInline: true, dependencies: [{ kind: "component", type: SiVolumeOffIcon, selector: "svg[siVolumeOffIcon]", inputs: ["ariaHidden", "width", "height", "viewBox", "fill", "stroke", "stroke-width", "stroke-linecap", "stroke-linejoin"] }, { kind: "component", type: SiVolumeXIcon, selector: "svg[siVolumeXIcon]", inputs: ["ariaHidden", "width", "height", "viewBox", "fill", "stroke", "stroke-width", "stroke-linecap", "stroke-linejoin"] }, { kind: "component", type: SiVolume1Icon, selector: "svg[siVolume1Icon]", inputs: ["ariaHidden", "width", "height", "viewBox", "fill", "stroke", "stroke-width", "stroke-linecap", "stroke-linejoin"] }, { kind: "component", type: SiVolume2Icon, selector: "svg[siVolume2Icon]", inputs: ["ariaHidden", "width", "height", "viewBox", "fill", "stroke", "stroke-width", "stroke-linecap", "stroke-linejoin"] }, { kind: "directive", type: ScSlider, selector: "input[scSlider]", inputs: ["id", "class", "aria-describedby"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
809
+ `, isInline: true, dependencies: [{ kind: "component", type: SiVolumeOffIcon, selector: "svg[siVolumeOffIcon]", inputs: ["ariaHidden", "width", "height", "viewBox", "fill", "stroke", "stroke-width", "stroke-linecap", "stroke-linejoin"] }, { kind: "component", type: SiVolumeXIcon, selector: "svg[siVolumeXIcon]", inputs: ["ariaHidden", "width", "height", "viewBox", "fill", "stroke", "stroke-width", "stroke-linecap", "stroke-linejoin"] }, { kind: "component", type: SiVolume1Icon, selector: "svg[siVolume1Icon]", inputs: ["ariaHidden", "width", "height", "viewBox", "fill", "stroke", "stroke-width", "stroke-linecap", "stroke-linejoin"] }, { kind: "component", type: SiVolume2Icon, selector: "svg[siVolume2Icon]", inputs: ["ariaHidden", "width", "height", "viewBox", "fill", "stroke", "stroke-width", "stroke-linecap", "stroke-linejoin"] }, { kind: "directive", type: ScSlider, selector: "input[scSlider]", inputs: ["value", "min", "max", "step", "id", "class", "aria-describedby"], outputs: ["valueChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
823
810
  }
824
811
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: ScAudioPlayerVolume, decorators: [{
825
812
  type: Component,
@@ -853,14 +840,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
853
840
  <input
854
841
  scSlider
855
842
  class="w-24"
856
- min="0"
857
- max="1"
858
- step="0.01"
843
+ [max]="1"
844
+ [step]="0.01"
859
845
  aria-label="Volume"
860
846
  [disabled]="player.isMuted()"
861
847
  [value]="player.volume()"
862
- [style.--fill-percent]="player.volume() * 100 + '%'"
863
- (input)="onVolumeChange($event)"
848
+ (valueChange)="player.setVolume($event)"
864
849
  />
865
850
 
866
851
  <button
@@ -1038,17 +1023,9 @@ class ScBarcodeScanner {
1038
1023
  @if (!isSupported()) {
1039
1024
  <div class="flex flex-col items-center justify-center p-8 text-center">
1040
1025
  <svg
1041
- xmlns="http://www.w3.org/2000/svg"
1042
- viewBox="0 0 24 24"
1043
- fill="none"
1044
- stroke="currentColor"
1045
- stroke-width="2"
1026
+ siCircleAlertIcon
1046
1027
  class="text-muted-foreground mb-4 size-12"
1047
- >
1048
- <circle cx="12" cy="12" r="10" />
1049
- <line x1="12" x2="12" y1="8" y2="12" />
1050
- <line x1="12" x2="12.01" y1="16" y2="16" />
1051
- </svg>
1028
+ ></svg>
1052
1029
  <p class="mb-2 text-lg font-medium">Barcode Scanner Not Supported</p>
1053
1030
  <p class="text-muted-foreground text-sm">
1054
1031
  Your browser doesn't support the Barcode Detection API. Try using
@@ -1057,18 +1034,7 @@ class ScBarcodeScanner {
1057
1034
  </div>
1058
1035
  } @else if (error()) {
1059
1036
  <div class="flex flex-col items-center justify-center p-8 text-center">
1060
- <svg
1061
- xmlns="http://www.w3.org/2000/svg"
1062
- viewBox="0 0 24 24"
1063
- fill="none"
1064
- stroke="currentColor"
1065
- stroke-width="2"
1066
- class="text-destructive mb-4 size-12"
1067
- >
1068
- <circle cx="12" cy="12" r="10" />
1069
- <line x1="15" x2="9" y1="9" y2="15" />
1070
- <line x1="9" x2="15" y1="9" y2="15" />
1071
- </svg>
1037
+ <svg siCircleXIcon class="text-destructive mb-4 size-12"></svg>
1072
1038
  <p class="mb-2 text-lg font-medium">Camera Error</p>
1073
1039
  <p class="text-muted-foreground mb-4 text-sm">{{ error() }}</p>
1074
1040
  <button
@@ -1142,20 +1108,7 @@ class ScBarcodeScanner {
1142
1108
  (click)="startScanning()"
1143
1109
  class="bg-primary text-primary-foreground hover:bg-primary/90 inline-flex items-center gap-2 rounded-md px-4 py-2"
1144
1110
  >
1145
- <svg
1146
- xmlns="http://www.w3.org/2000/svg"
1147
- viewBox="0 0 24 24"
1148
- fill="none"
1149
- stroke="currentColor"
1150
- stroke-width="2"
1151
- class="size-4"
1152
- >
1153
- <path d="M3 7V5a2 2 0 0 1 2-2h2" />
1154
- <path d="M17 3h2a2 2 0 0 1 2 2v2" />
1155
- <path d="M21 17v2a2 2 0 0 1-2 2h-2" />
1156
- <path d="M7 21H5a2 2 0 0 1-2-2v-2" />
1157
- <rect width="10" height="8" x="7" y="8" rx="1" />
1158
- </svg>
1111
+ <svg siScanBarcodeIcon class="size-4"></svg>
1159
1112
  Start Scanning
1160
1113
  </button>
1161
1114
  } @else {
@@ -1164,16 +1117,7 @@ class ScBarcodeScanner {
1164
1117
  (click)="stopScanning()"
1165
1118
  class="hover:bg-accent inline-flex items-center gap-2 rounded-md border px-4 py-2"
1166
1119
  >
1167
- <svg
1168
- xmlns="http://www.w3.org/2000/svg"
1169
- viewBox="0 0 24 24"
1170
- fill="none"
1171
- stroke="currentColor"
1172
- stroke-width="2"
1173
- class="size-4"
1174
- >
1175
- <rect x="6" y="6" width="12" height="12" rx="2" />
1176
- </svg>
1120
+ <svg siSquareIcon class="size-4"></svg>
1177
1121
  Stop
1178
1122
  </button>
1179
1123
  }
@@ -1186,20 +1130,7 @@ class ScBarcodeScanner {
1186
1130
  class="hover:bg-accent rounded-md border p-2"
1187
1131
  aria-label="Switch camera"
1188
1132
  >
1189
- <svg
1190
- xmlns="http://www.w3.org/2000/svg"
1191
- viewBox="0 0 24 24"
1192
- fill="none"
1193
- stroke="currentColor"
1194
- stroke-width="2"
1195
- class="size-5"
1196
- >
1197
- <path d="M11 19H4a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2h5" />
1198
- <path d="M13 5h7a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2h-5" />
1199
- <circle cx="12" cy="12" r="3" />
1200
- <path d="m18 22-3-3 3-3" />
1201
- <path d="m6 2 3 3-3 3" />
1202
- </svg>
1133
+ <svg siSwitchCameraIcon class="size-5"></svg>
1203
1134
  </button>
1204
1135
  }
1205
1136
  </div>
@@ -1216,45 +1147,31 @@ class ScBarcodeScanner {
1216
1147
  "
1217
1148
  aria-label="Toggle flashlight"
1218
1149
  >
1219
- <svg
1220
- xmlns="http://www.w3.org/2000/svg"
1221
- viewBox="0 0 24 24"
1222
- fill="none"
1223
- stroke="currentColor"
1224
- stroke-width="2"
1225
- class="size-5"
1226
- >
1227
- <path
1228
- d="M18 6c0 2-2 2-2 4v10a2 2 0 0 1-2 2h-4a2 2 0 0 1-2-2V10c0-2-2-2-2-4V2h12z"
1229
- />
1230
- <line x1="6" x2="18" y1="6" y2="6" />
1231
- <line x1="12" x2="12" y1="12" y2="12" />
1232
- </svg>
1150
+ <svg siFlashlightIcon class="size-5"></svg>
1233
1151
  </button>
1234
1152
  }
1235
1153
  </div>
1236
1154
  }
1237
1155
  </div>
1238
- `, isInline: true, styles: ["@keyframes scan{0%,to{transform:translateY(0)}50%{transform:translateY(calc(100% - 2px))}}.animate-scan{animation:scan 2s ease-in-out infinite}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
1156
+ `, isInline: true, styles: ["@keyframes scan{0%,to{transform:translateY(0)}50%{transform:translateY(calc(100% - 2px))}}.animate-scan{animation:scan 2s ease-in-out infinite}\n"], dependencies: [{ kind: "component", type: SiCircleAlertIcon, selector: "svg[siCircleAlertIcon]", inputs: ["ariaHidden", "width", "height", "viewBox", "fill", "stroke", "stroke-width", "stroke-linecap", "stroke-linejoin"] }, { kind: "component", type: SiCircleXIcon, selector: "svg[siCircleXIcon]", inputs: ["ariaHidden", "width", "height", "viewBox", "fill", "stroke", "stroke-width", "stroke-linecap", "stroke-linejoin"] }, { kind: "component", type: SiScanBarcodeIcon, selector: "svg[siScanBarcodeIcon]", inputs: ["ariaHidden", "width", "height", "viewBox", "fill", "stroke", "stroke-width", "stroke-linecap", "stroke-linejoin"] }, { kind: "component", type: SiSquareIcon, selector: "svg[siSquareIcon]", inputs: ["ariaHidden", "width", "height", "viewBox", "fill", "stroke", "stroke-width", "stroke-linecap", "stroke-linejoin"] }, { kind: "component", type: SiSwitchCameraIcon, selector: "svg[siSwitchCameraIcon]", inputs: ["ariaHidden", "width", "height", "viewBox", "fill", "stroke", "stroke-width", "stroke-linecap", "stroke-linejoin"] }, { kind: "component", type: SiFlashlightIcon, selector: "svg[siFlashlightIcon]", inputs: ["ariaHidden", "width", "height", "viewBox", "fill", "stroke", "stroke-width", "stroke-linecap", "stroke-linejoin"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
1239
1157
  }
1240
1158
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: ScBarcodeScanner, decorators: [{
1241
1159
  type: Component,
1242
- args: [{ selector: 'sc-barcode-scanner', template: `
1160
+ args: [{ selector: 'sc-barcode-scanner', imports: [
1161
+ SiCircleAlertIcon,
1162
+ SiCircleXIcon,
1163
+ SiScanBarcodeIcon,
1164
+ SiSquareIcon,
1165
+ SiSwitchCameraIcon,
1166
+ SiFlashlightIcon,
1167
+ ], template: `
1243
1168
  <div [class]="containerClass()">
1244
1169
  @if (!isSupported()) {
1245
1170
  <div class="flex flex-col items-center justify-center p-8 text-center">
1246
1171
  <svg
1247
- xmlns="http://www.w3.org/2000/svg"
1248
- viewBox="0 0 24 24"
1249
- fill="none"
1250
- stroke="currentColor"
1251
- stroke-width="2"
1172
+ siCircleAlertIcon
1252
1173
  class="text-muted-foreground mb-4 size-12"
1253
- >
1254
- <circle cx="12" cy="12" r="10" />
1255
- <line x1="12" x2="12" y1="8" y2="12" />
1256
- <line x1="12" x2="12.01" y1="16" y2="16" />
1257
- </svg>
1174
+ ></svg>
1258
1175
  <p class="mb-2 text-lg font-medium">Barcode Scanner Not Supported</p>
1259
1176
  <p class="text-muted-foreground text-sm">
1260
1177
  Your browser doesn't support the Barcode Detection API. Try using
@@ -1263,18 +1180,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
1263
1180
  </div>
1264
1181
  } @else if (error()) {
1265
1182
  <div class="flex flex-col items-center justify-center p-8 text-center">
1266
- <svg
1267
- xmlns="http://www.w3.org/2000/svg"
1268
- viewBox="0 0 24 24"
1269
- fill="none"
1270
- stroke="currentColor"
1271
- stroke-width="2"
1272
- class="text-destructive mb-4 size-12"
1273
- >
1274
- <circle cx="12" cy="12" r="10" />
1275
- <line x1="15" x2="9" y1="9" y2="15" />
1276
- <line x1="9" x2="15" y1="9" y2="15" />
1277
- </svg>
1183
+ <svg siCircleXIcon class="text-destructive mb-4 size-12"></svg>
1278
1184
  <p class="mb-2 text-lg font-medium">Camera Error</p>
1279
1185
  <p class="text-muted-foreground mb-4 text-sm">{{ error() }}</p>
1280
1186
  <button
@@ -1348,20 +1254,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
1348
1254
  (click)="startScanning()"
1349
1255
  class="bg-primary text-primary-foreground hover:bg-primary/90 inline-flex items-center gap-2 rounded-md px-4 py-2"
1350
1256
  >
1351
- <svg
1352
- xmlns="http://www.w3.org/2000/svg"
1353
- viewBox="0 0 24 24"
1354
- fill="none"
1355
- stroke="currentColor"
1356
- stroke-width="2"
1357
- class="size-4"
1358
- >
1359
- <path d="M3 7V5a2 2 0 0 1 2-2h2" />
1360
- <path d="M17 3h2a2 2 0 0 1 2 2v2" />
1361
- <path d="M21 17v2a2 2 0 0 1-2 2h-2" />
1362
- <path d="M7 21H5a2 2 0 0 1-2-2v-2" />
1363
- <rect width="10" height="8" x="7" y="8" rx="1" />
1364
- </svg>
1257
+ <svg siScanBarcodeIcon class="size-4"></svg>
1365
1258
  Start Scanning
1366
1259
  </button>
1367
1260
  } @else {
@@ -1370,16 +1263,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
1370
1263
  (click)="stopScanning()"
1371
1264
  class="hover:bg-accent inline-flex items-center gap-2 rounded-md border px-4 py-2"
1372
1265
  >
1373
- <svg
1374
- xmlns="http://www.w3.org/2000/svg"
1375
- viewBox="0 0 24 24"
1376
- fill="none"
1377
- stroke="currentColor"
1378
- stroke-width="2"
1379
- class="size-4"
1380
- >
1381
- <rect x="6" y="6" width="12" height="12" rx="2" />
1382
- </svg>
1266
+ <svg siSquareIcon class="size-4"></svg>
1383
1267
  Stop
1384
1268
  </button>
1385
1269
  }
@@ -1392,20 +1276,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
1392
1276
  class="hover:bg-accent rounded-md border p-2"
1393
1277
  aria-label="Switch camera"
1394
1278
  >
1395
- <svg
1396
- xmlns="http://www.w3.org/2000/svg"
1397
- viewBox="0 0 24 24"
1398
- fill="none"
1399
- stroke="currentColor"
1400
- stroke-width="2"
1401
- class="size-5"
1402
- >
1403
- <path d="M11 19H4a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2h5" />
1404
- <path d="M13 5h7a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2h-5" />
1405
- <circle cx="12" cy="12" r="3" />
1406
- <path d="m18 22-3-3 3-3" />
1407
- <path d="m6 2 3 3-3 3" />
1408
- </svg>
1279
+ <svg siSwitchCameraIcon class="size-5"></svg>
1409
1280
  </button>
1410
1281
  }
1411
1282
  </div>
@@ -1422,20 +1293,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
1422
1293
  "
1423
1294
  aria-label="Toggle flashlight"
1424
1295
  >
1425
- <svg
1426
- xmlns="http://www.w3.org/2000/svg"
1427
- viewBox="0 0 24 24"
1428
- fill="none"
1429
- stroke="currentColor"
1430
- stroke-width="2"
1431
- class="size-5"
1432
- >
1433
- <path
1434
- d="M18 6c0 2-2 2-2 4v10a2 2 0 0 1-2 2h-4a2 2 0 0 1-2-2V10c0-2-2-2-2-4V2h12z"
1435
- />
1436
- <line x1="6" x2="18" y1="6" y2="6" />
1437
- <line x1="12" x2="12" y1="12" y2="12" />
1438
- </svg>
1296
+ <svg siFlashlightIcon class="size-5"></svg>
1439
1297
  </button>
1440
1298
  }
1441
1299
  </div>
@@ -3227,233 +3085,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
3227
3085
  }]
3228
3086
  }], propDecorators: { classInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
3229
3087
 
3230
- class ScCommand {
3231
- classInput = input('', { ...(ngDevMode ? { debugName: "classInput" } : {}), alias: 'class' });
3232
- /** Current search/filter value */
3233
- value = model('', ...(ngDevMode ? [{ debugName: "value" }] : []));
3234
- class = computed(() => cn('flex h-full w-full flex-col overflow-hidden rounded-md bg-popover text-popover-foreground', this.classInput()), ...(ngDevMode ? [{ debugName: "class" }] : []));
3235
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: ScCommand, deps: [], target: i0.ɵɵFactoryTarget.Component });
3236
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.1", type: ScCommand, isStandalone: true, selector: "div[scCommand]", inputs: { classInput: { classPropertyName: "classInput", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, host: { attributes: { "data-slot": "command" }, properties: { "class": "class()" } }, ngImport: i0, template: `
3237
- <ng-content />
3238
- `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
3239
- }
3240
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: ScCommand, decorators: [{
3241
- type: Component,
3242
- args: [{
3243
- selector: 'div[scCommand]',
3244
- template: `
3245
- <ng-content />
3246
- `,
3247
- host: {
3248
- 'data-slot': 'command',
3249
- '[class]': 'class()',
3250
- },
3251
- encapsulation: ViewEncapsulation.None,
3252
- changeDetection: ChangeDetectionStrategy.OnPush,
3253
- }]
3254
- }], propDecorators: { classInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }] } });
3255
-
3256
- class ScCommandEmpty {
3257
- classInput = input('', { ...(ngDevMode ? { debugName: "classInput" } : {}), alias: 'class' });
3258
- class = computed(() => cn('py-6 text-center text-sm', this.classInput()), ...(ngDevMode ? [{ debugName: "class" }] : []));
3259
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: ScCommandEmpty, deps: [], target: i0.ɵɵFactoryTarget.Directive });
3260
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.1", type: ScCommandEmpty, isStandalone: true, selector: "div[scCommandEmpty]", inputs: { classInput: { classPropertyName: "classInput", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "command-empty" }, properties: { "class": "class()" } }, ngImport: i0 });
3261
- }
3262
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: ScCommandEmpty, decorators: [{
3263
- type: Directive,
3264
- args: [{
3265
- selector: 'div[scCommandEmpty]',
3266
- host: {
3267
- 'data-slot': 'command-empty',
3268
- '[class]': 'class()',
3269
- },
3270
- }]
3271
- }], propDecorators: { classInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
3272
-
3273
- class ScCommandGroup {
3274
- classInput = input('', { ...(ngDevMode ? { debugName: "classInput" } : {}), alias: 'class' });
3275
- heading = input('', ...(ngDevMode ? [{ debugName: "heading" }] : []));
3276
- class = computed(() => cn('overflow-hidden p-1 text-foreground', '**:data-[slot=command-group-heading]:px-2 **:data-[slot=command-group-heading]:py-1.5 **:data-[slot=command-group-heading]:text-xs **:data-[slot=command-group-heading]:font-medium **:data-[slot=command-group-heading]:text-muted-foreground', this.classInput()), ...(ngDevMode ? [{ debugName: "class" }] : []));
3277
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: ScCommandGroup, deps: [], target: i0.ɵɵFactoryTarget.Directive });
3278
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.1", type: ScCommandGroup, isStandalone: true, selector: "div[scCommandGroup]", inputs: { classInput: { classPropertyName: "classInput", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, heading: { classPropertyName: "heading", publicName: "heading", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "command-group", "role": "group" }, properties: { "class": "class()" } }, ngImport: i0 });
3279
- }
3280
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: ScCommandGroup, decorators: [{
3281
- type: Directive,
3282
- args: [{
3283
- selector: 'div[scCommandGroup]',
3284
- host: {
3285
- 'data-slot': 'command-group',
3286
- role: 'group',
3287
- '[class]': 'class()',
3288
- },
3289
- }]
3290
- }], propDecorators: { classInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], heading: [{ type: i0.Input, args: [{ isSignal: true, alias: "heading", required: false }] }] } });
3291
-
3292
- class ScCommandGroupHeading {
3293
- classInput = input('', { ...(ngDevMode ? { debugName: "classInput" } : {}), alias: 'class' });
3294
- class = computed(() => cn('px-2 py-1.5 text-xs font-medium text-muted-foreground', this.classInput()), ...(ngDevMode ? [{ debugName: "class" }] : []));
3295
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: ScCommandGroupHeading, deps: [], target: i0.ɵɵFactoryTarget.Directive });
3296
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.1", type: ScCommandGroupHeading, isStandalone: true, selector: "[scCommandGroupHeading]", inputs: { classInput: { classPropertyName: "classInput", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "command-group-heading" }, properties: { "class": "class()" } }, ngImport: i0 });
3297
- }
3298
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: ScCommandGroupHeading, decorators: [{
3299
- type: Directive,
3300
- args: [{
3301
- selector: '[scCommandGroupHeading]',
3302
- host: {
3303
- 'data-slot': 'command-group-heading',
3304
- '[class]': 'class()',
3305
- },
3306
- }]
3307
- }], propDecorators: { classInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
3308
-
3309
- class ScCommandInput {
3310
- command = inject(ScCommand);
3311
- classInput = input('', { ...(ngDevMode ? { debugName: "classInput" } : {}), alias: 'class' });
3312
- placeholder = input('Search...', ...(ngDevMode ? [{ debugName: "placeholder" }] : []));
3313
- class = computed(() => cn('flex items-center border-b px-3', this.classInput()), ...(ngDevMode ? [{ debugName: "class" }] : []));
3314
- inputClass = computed(() => cn('flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-none', 'placeholder:text-muted-foreground', 'disabled:cursor-not-allowed disabled:opacity-50'), ...(ngDevMode ? [{ debugName: "inputClass" }] : []));
3315
- onInput(event) {
3316
- const input = event.target;
3317
- this.command.value.set(input.value);
3318
- }
3319
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: ScCommandInput, deps: [], target: i0.ɵɵFactoryTarget.Component });
3320
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.1", type: ScCommandInput, isStandalone: true, selector: "div[scCommandInput]", inputs: { classInput: { classPropertyName: "classInput", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "command-input" }, properties: { "class": "class()" } }, ngImport: i0, template: `
3321
- <svg
3322
- siSearchIcon
3323
- class="mr-2 size-4 shrink-0 opacity-50"
3324
- aria-hidden="true"
3325
- ></svg>
3326
- <input
3327
- type="text"
3328
- [class]="inputClass()"
3329
- [placeholder]="placeholder()"
3330
- [value]="command.value()"
3331
- (input)="onInput($event)"
3332
- />
3333
- `, isInline: true, dependencies: [{ kind: "component", type: SiSearchIcon, selector: "svg[siSearchIcon]", inputs: ["ariaHidden", "width", "height", "viewBox", "fill", "stroke", "stroke-width", "stroke-linecap", "stroke-linejoin"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
3334
- }
3335
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: ScCommandInput, decorators: [{
3336
- type: Component,
3337
- args: [{
3338
- selector: 'div[scCommandInput]',
3339
- imports: [SiSearchIcon],
3340
- template: `
3341
- <svg
3342
- siSearchIcon
3343
- class="mr-2 size-4 shrink-0 opacity-50"
3344
- aria-hidden="true"
3345
- ></svg>
3346
- <input
3347
- type="text"
3348
- [class]="inputClass()"
3349
- [placeholder]="placeholder()"
3350
- [value]="command.value()"
3351
- (input)="onInput($event)"
3352
- />
3353
- `,
3354
- host: {
3355
- 'data-slot': 'command-input',
3356
- '[class]': 'class()',
3357
- },
3358
- encapsulation: ViewEncapsulation.None,
3359
- changeDetection: ChangeDetectionStrategy.OnPush,
3360
- }]
3361
- }], propDecorators: { classInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }] } });
3362
-
3363
- class ScCommandItem {
3364
- classInput = input('', { ...(ngDevMode ? { debugName: "classInput" } : {}), alias: 'class' });
3365
- disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : []));
3366
- select = output();
3367
- option = inject(Option);
3368
- elementRef = inject(ElementRef);
3369
- constructor() {
3370
- effect(() => {
3371
- if (this.option.active()) {
3372
- this.elementRef.nativeElement.scrollIntoView({ block: 'nearest' });
3373
- }
3374
- });
3375
- }
3376
- class = computed(() => cn('relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none', 'data-disabled:pointer-events-none data-disabled:opacity-50', 'data-[active=true]:bg-accent data-[active=true]:text-accent-foreground', 'hover:bg-accent hover:text-accent-foreground', '[&>svg]:size-4 [&>svg]:shrink-0', this.classInput()), ...(ngDevMode ? [{ debugName: "class" }] : []));
3377
- onClick() {
3378
- if (!this.disabled()) {
3379
- this.select.emit();
3380
- }
3381
- }
3382
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: ScCommandItem, deps: [], target: i0.ɵɵFactoryTarget.Directive });
3383
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.1", type: ScCommandItem, isStandalone: true, selector: "div[scCommandItem]", inputs: { classInput: { classPropertyName: "classInput", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { select: "select" }, host: { attributes: { "data-slot": "command-item" }, listeners: { "click": "onClick()" }, properties: { "attr.data-disabled": "disabled() || null", "class": "class()" } }, hostDirectives: [{ directive: i1.Option, inputs: ["value", "value", "label", "label"] }], ngImport: i0 });
3384
- }
3385
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: ScCommandItem, decorators: [{
3386
- type: Directive,
3387
- args: [{
3388
- selector: 'div[scCommandItem]',
3389
- hostDirectives: [
3390
- {
3391
- directive: Option,
3392
- inputs: ['value', 'label'],
3393
- },
3394
- ],
3395
- host: {
3396
- 'data-slot': 'command-item',
3397
- '[attr.data-disabled]': 'disabled() || null',
3398
- '[class]': 'class()',
3399
- '(click)': 'onClick()',
3400
- },
3401
- }]
3402
- }], ctorParameters: () => [], propDecorators: { classInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], select: [{ type: i0.Output, args: ["select"] }] } });
3403
-
3404
- class ScCommandList {
3405
- classInput = input('', { ...(ngDevMode ? { debugName: "classInput" } : {}), alias: 'class' });
3406
- class = computed(() => cn('max-h-[300px] overflow-y-auto overflow-x-hidden', this.classInput()), ...(ngDevMode ? [{ debugName: "class" }] : []));
3407
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: ScCommandList, deps: [], target: i0.ɵɵFactoryTarget.Directive });
3408
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.1", type: ScCommandList, isStandalone: true, selector: "div[scCommandList]", inputs: { classInput: { classPropertyName: "classInput", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "command-list" }, properties: { "class": "class()" } }, hostDirectives: [{ directive: i1.Listbox }], ngImport: i0 });
3409
- }
3410
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: ScCommandList, decorators: [{
3411
- type: Directive,
3412
- args: [{
3413
- selector: 'div[scCommandList]',
3414
- hostDirectives: [Listbox],
3415
- host: {
3416
- 'data-slot': 'command-list',
3417
- '[class]': 'class()',
3418
- },
3419
- }]
3420
- }], propDecorators: { classInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
3421
-
3422
- class ScCommandSeparator {
3423
- classInput = input('', { ...(ngDevMode ? { debugName: "classInput" } : {}), alias: 'class' });
3424
- class = computed(() => cn('-mx-1 h-px bg-border', this.classInput()), ...(ngDevMode ? [{ debugName: "class" }] : []));
3425
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: ScCommandSeparator, deps: [], target: i0.ɵɵFactoryTarget.Directive });
3426
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.1", type: ScCommandSeparator, isStandalone: true, selector: "[scCommandSeparator]", inputs: { classInput: { classPropertyName: "classInput", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "command-separator", "role": "separator" }, properties: { "class": "class()" } }, ngImport: i0 });
3427
- }
3428
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: ScCommandSeparator, decorators: [{
3429
- type: Directive,
3430
- args: [{
3431
- selector: '[scCommandSeparator]',
3432
- host: {
3433
- 'data-slot': 'command-separator',
3434
- role: 'separator',
3435
- '[class]': 'class()',
3436
- },
3437
- }]
3438
- }], propDecorators: { classInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
3439
-
3440
- class ScCommandShortcut {
3441
- classInput = input('', { ...(ngDevMode ? { debugName: "classInput" } : {}), alias: 'class' });
3442
- class = computed(() => cn('ml-auto text-xs tracking-widest text-muted-foreground', this.classInput()), ...(ngDevMode ? [{ debugName: "class" }] : []));
3443
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: ScCommandShortcut, deps: [], target: i0.ɵɵFactoryTarget.Directive });
3444
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.1", type: ScCommandShortcut, isStandalone: true, selector: "[scCommandShortcut]", inputs: { classInput: { classPropertyName: "classInput", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "command-shortcut" }, properties: { "class": "class()" } }, ngImport: i0 });
3445
- }
3446
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: ScCommandShortcut, decorators: [{
3447
- type: Directive,
3448
- args: [{
3449
- selector: '[scCommandShortcut]',
3450
- host: {
3451
- 'data-slot': 'command-shortcut',
3452
- '[class]': 'class()',
3453
- },
3454
- }]
3455
- }], propDecorators: { classInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
3456
-
3457
3088
  const DEFAULT_CONFETTI_OPTIONS = {
3458
3089
  particleCount: 100,
3459
3090
  spread: 70,
@@ -3651,427 +3282,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
3651
3282
  `, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:contents}\n"] }]
3652
3283
  }], ctorParameters: () => [], propDecorators: { canvasRef: [{ type: i0.ViewChild, args: ['canvas', { isSignal: true }] }], options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: false }] }], complete: [{ type: i0.Output, args: ["complete"] }] } });
3653
3284
 
3654
- class ScContextMenuContent {
3655
- contextMenu = inject(ScContextMenu);
3656
- classInput = input('', { ...(ngDevMode ? { debugName: "classInput" } : {}), alias: 'class' });
3657
- templateRef;
3658
- class = computed(() => cn('z-50 min-w-32 overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md', 'animate-in fade-in-0 zoom-in-95', this.classInput()), ...(ngDevMode ? [{ debugName: "class" }] : []));
3659
- onKeydown(event) {
3660
- if (event.key === 'Escape') {
3661
- this.contextMenu.closeMenu();
3662
- }
3663
- }
3664
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: ScContextMenuContent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3665
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.1", type: ScContextMenuContent, isStandalone: true, selector: "sc-context-menu-content", inputs: { classInput: { classPropertyName: "classInput", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "templateRef", first: true, predicate: ["contentTemplate"], descendants: true, static: true }], ngImport: i0, template: `
3666
- <ng-template #contentTemplate>
3667
- <div [class]="class()" role="menu" (keydown)="onKeydown($event)">
3668
- <ng-content />
3669
- </div>
3670
- </ng-template>
3671
- `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
3672
- }
3673
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: ScContextMenuContent, decorators: [{
3674
- type: Component,
3675
- args: [{
3676
- selector: 'sc-context-menu-content',
3677
- template: `
3678
- <ng-template #contentTemplate>
3679
- <div [class]="class()" role="menu" (keydown)="onKeydown($event)">
3680
- <ng-content />
3681
- </div>
3682
- </ng-template>
3683
- `,
3684
- encapsulation: ViewEncapsulation.None,
3685
- changeDetection: ChangeDetectionStrategy.OnPush,
3686
- }]
3687
- }], propDecorators: { classInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], templateRef: [{
3688
- type: ViewChild,
3689
- args: ['contentTemplate', { static: true }]
3690
- }] } });
3691
-
3692
- class ScContextMenu {
3693
- overlay = inject(Overlay);
3694
- viewContainerRef = inject(ViewContainerRef);
3695
- classInput = input('', { ...(ngDevMode ? { debugName: "classInput" } : {}), alias: 'class' });
3696
- /** Whether the context menu is open */
3697
- open = signal(false, ...(ngDevMode ? [{ debugName: "open" }] : []));
3698
- /** Position where the context menu should appear */
3699
- position = signal({ x: 0, y: 0 }, ...(ngDevMode ? [{ debugName: "position" }] : []));
3700
- overlayRef = null;
3701
- contentChild = contentChild(ScContextMenuContent, ...(ngDevMode ? [{ debugName: "contentChild" }] : []));
3702
- class = computed(() => cn('relative', this.classInput()), ...(ngDevMode ? [{ debugName: "class" }] : []));
3703
- openAt(x, y, template) {
3704
- this.closeMenu();
3705
- this.position.set({ x, y });
3706
- this.overlayRef = this.overlay.create({
3707
- positionStrategy: this.overlay
3708
- .position()
3709
- .flexibleConnectedTo({ x, y })
3710
- .withPositions([
3711
- {
3712
- originX: 'start',
3713
- originY: 'bottom',
3714
- overlayX: 'start',
3715
- overlayY: 'top',
3716
- },
3717
- {
3718
- originX: 'start',
3719
- originY: 'top',
3720
- overlayX: 'start',
3721
- overlayY: 'bottom',
3722
- },
3723
- {
3724
- originX: 'end',
3725
- originY: 'bottom',
3726
- overlayX: 'end',
3727
- overlayY: 'top',
3728
- },
3729
- {
3730
- originX: 'end',
3731
- originY: 'top',
3732
- overlayX: 'end',
3733
- overlayY: 'bottom',
3734
- },
3735
- ]),
3736
- scrollStrategy: this.overlay.scrollStrategies.close(),
3737
- hasBackdrop: true,
3738
- backdropClass: 'cdk-overlay-transparent-backdrop',
3739
- });
3740
- const portal = new TemplatePortal(template, this.viewContainerRef);
3741
- this.overlayRef.attach(portal);
3742
- this.open.set(true);
3743
- this.overlayRef.backdropClick().subscribe(() => this.closeMenu());
3744
- this.overlayRef.keydownEvents().subscribe((event) => {
3745
- if (event.key === 'Escape') {
3746
- this.closeMenu();
3747
- }
3748
- });
3749
- }
3750
- closeMenu() {
3751
- if (this.overlayRef) {
3752
- this.overlayRef.dispose();
3753
- this.overlayRef = null;
3754
- }
3755
- this.open.set(false);
3756
- }
3757
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: ScContextMenu, deps: [], target: i0.ɵɵFactoryTarget.Component });
3758
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.1", type: ScContextMenu, isStandalone: true, selector: "div[scContextMenu]", inputs: { classInput: { classPropertyName: "classInput", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "context-menu" }, properties: { "class": "class()" } }, queries: [{ propertyName: "contentChild", first: true, predicate: ScContextMenuContent, descendants: true, isSignal: true }], ngImport: i0, template: `
3759
- <ng-content />
3760
- `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
3761
- }
3762
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: ScContextMenu, decorators: [{
3763
- type: Component,
3764
- args: [{
3765
- selector: 'div[scContextMenu]',
3766
- template: `
3767
- <ng-content />
3768
- `,
3769
- host: {
3770
- 'data-slot': 'context-menu',
3771
- '[class]': 'class()',
3772
- },
3773
- encapsulation: ViewEncapsulation.None,
3774
- changeDetection: ChangeDetectionStrategy.OnPush,
3775
- }]
3776
- }], propDecorators: { classInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], contentChild: [{ type: i0.ContentChild, args: [i0.forwardRef(() => ScContextMenuContent), { isSignal: true }] }] } });
3777
-
3778
- class ScContextMenuItem {
3779
- contextMenu = inject(ScContextMenu);
3780
- classInput = input('', { ...(ngDevMode ? { debugName: "classInput" } : {}), alias: 'class' });
3781
- disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : []));
3782
- closeOnSelect = input(true, ...(ngDevMode ? [{ debugName: "closeOnSelect" }] : []));
3783
- select = output();
3784
- class = computed(() => cn('relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none', 'focus:bg-accent focus:text-accent-foreground', 'data-disabled:pointer-events-none data-disabled:opacity-50', '[&>svg]:size-4 [&>svg]:shrink-0', this.classInput()), ...(ngDevMode ? [{ debugName: "class" }] : []));
3785
- onClick() {
3786
- if (this.disabled())
3787
- return;
3788
- this.select.emit();
3789
- if (this.closeOnSelect()) {
3790
- this.contextMenu.closeMenu();
3791
- }
3792
- }
3793
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: ScContextMenuItem, deps: [], target: i0.ɵɵFactoryTarget.Directive });
3794
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.1", type: ScContextMenuItem, isStandalone: true, selector: "[scContextMenuItem]", inputs: { classInput: { classPropertyName: "classInput", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, closeOnSelect: { classPropertyName: "closeOnSelect", publicName: "closeOnSelect", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { select: "select" }, host: { attributes: { "data-slot": "context-menu-item", "role": "menuitem", "tabindex": "-1" }, listeners: { "click": "onClick()", "keydown.enter": "onClick()", "keydown.space": "onClick()" }, properties: { "class": "class()", "attr.data-disabled": "disabled() || null" } }, ngImport: i0 });
3795
- }
3796
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: ScContextMenuItem, decorators: [{
3797
- type: Directive,
3798
- args: [{
3799
- selector: '[scContextMenuItem]',
3800
- host: {
3801
- 'data-slot': 'context-menu-item',
3802
- role: 'menuitem',
3803
- tabindex: '-1',
3804
- '[class]': 'class()',
3805
- '[attr.data-disabled]': 'disabled() || null',
3806
- '(click)': 'onClick()',
3807
- '(keydown.enter)': 'onClick()',
3808
- '(keydown.space)': 'onClick()',
3809
- },
3810
- }]
3811
- }], propDecorators: { classInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], closeOnSelect: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeOnSelect", required: false }] }], select: [{ type: i0.Output, args: ["select"] }] } });
3812
-
3813
- class ScContextMenuLabel {
3814
- classInput = input('', { ...(ngDevMode ? { debugName: "classInput" } : {}), alias: 'class' });
3815
- inset = input(false, ...(ngDevMode ? [{ debugName: "inset" }] : []));
3816
- class = computed(() => cn('px-2 py-1.5 text-sm font-semibold', this.inset() && 'pl-8', this.classInput()), ...(ngDevMode ? [{ debugName: "class" }] : []));
3817
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: ScContextMenuLabel, deps: [], target: i0.ɵɵFactoryTarget.Directive });
3818
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.1", type: ScContextMenuLabel, isStandalone: true, selector: "[scContextMenuLabel]", inputs: { classInput: { classPropertyName: "classInput", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, inset: { classPropertyName: "inset", publicName: "inset", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "context-menu-label" }, properties: { "class": "class()" } }, ngImport: i0 });
3819
- }
3820
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: ScContextMenuLabel, decorators: [{
3821
- type: Directive,
3822
- args: [{
3823
- selector: '[scContextMenuLabel]',
3824
- host: {
3825
- 'data-slot': 'context-menu-label',
3826
- '[class]': 'class()',
3827
- },
3828
- }]
3829
- }], propDecorators: { classInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], inset: [{ type: i0.Input, args: [{ isSignal: true, alias: "inset", required: false }] }] } });
3830
-
3831
- class ScContextMenuSeparator {
3832
- classInput = input('', { ...(ngDevMode ? { debugName: "classInput" } : {}), alias: 'class' });
3833
- class = computed(() => cn('-mx-1 my-1 h-px bg-border', this.classInput()), ...(ngDevMode ? [{ debugName: "class" }] : []));
3834
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: ScContextMenuSeparator, deps: [], target: i0.ɵɵFactoryTarget.Directive });
3835
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.1", type: ScContextMenuSeparator, isStandalone: true, selector: "[scContextMenuSeparator]", inputs: { classInput: { classPropertyName: "classInput", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "context-menu-separator", "role": "separator" }, properties: { "class": "class()" } }, ngImport: i0 });
3836
- }
3837
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: ScContextMenuSeparator, decorators: [{
3838
- type: Directive,
3839
- args: [{
3840
- selector: '[scContextMenuSeparator]',
3841
- host: {
3842
- 'data-slot': 'context-menu-separator',
3843
- role: 'separator',
3844
- '[class]': 'class()',
3845
- },
3846
- }]
3847
- }], propDecorators: { classInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
3848
-
3849
- class ScContextMenuShortcut {
3850
- classInput = input('', { ...(ngDevMode ? { debugName: "classInput" } : {}), alias: 'class' });
3851
- class = computed(() => cn('ml-auto text-xs tracking-widest text-muted-foreground', this.classInput()), ...(ngDevMode ? [{ debugName: "class" }] : []));
3852
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: ScContextMenuShortcut, deps: [], target: i0.ɵɵFactoryTarget.Directive });
3853
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.1", type: ScContextMenuShortcut, isStandalone: true, selector: "[scContextMenuShortcut]", inputs: { classInput: { classPropertyName: "classInput", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "context-menu-shortcut" }, properties: { "class": "class()" } }, ngImport: i0 });
3854
- }
3855
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: ScContextMenuShortcut, decorators: [{
3856
- type: Directive,
3857
- args: [{
3858
- selector: '[scContextMenuShortcut]',
3859
- host: {
3860
- 'data-slot': 'context-menu-shortcut',
3861
- '[class]': 'class()',
3862
- },
3863
- }]
3864
- }], propDecorators: { classInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
3865
-
3866
- class ScContextMenuSub {
3867
- classInput = input('', { ...(ngDevMode ? { debugName: "classInput" } : {}), alias: 'class' });
3868
- /** Whether the submenu is open */
3869
- open = signal(false, ...(ngDevMode ? [{ debugName: "open" }] : []));
3870
- /** Overlay origin registered by the sub-trigger */
3871
- overlayOrigin = null;
3872
- /** Cancel hide function registered by the sub-trigger */
3873
- cancelTriggerHide = null;
3874
- class = computed(() => cn('relative', this.classInput()), ...(ngDevMode ? [{ debugName: "class" }] : []));
3875
- show() {
3876
- this.open.set(true);
3877
- }
3878
- hide() {
3879
- this.open.set(false);
3880
- }
3881
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: ScContextMenuSub, deps: [], target: i0.ɵɵFactoryTarget.Component });
3882
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.1", type: ScContextMenuSub, isStandalone: true, selector: "div[scContextMenuSub]", inputs: { classInput: { classPropertyName: "classInput", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "context-menu-sub" }, properties: { "class": "class()" } }, ngImport: i0, template: `
3883
- <ng-content />
3884
- `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
3885
- }
3886
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: ScContextMenuSub, decorators: [{
3887
- type: Component,
3888
- args: [{
3889
- selector: 'div[scContextMenuSub]',
3890
- template: `
3891
- <ng-content />
3892
- `,
3893
- host: {
3894
- 'data-slot': 'context-menu-sub',
3895
- '[class]': 'class()',
3896
- },
3897
- encapsulation: ViewEncapsulation.None,
3898
- changeDetection: ChangeDetectionStrategy.OnPush,
3899
- }]
3900
- }], propDecorators: { classInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
3901
-
3902
- const positions = [
3903
- {
3904
- originX: 'end',
3905
- originY: 'top',
3906
- overlayX: 'start',
3907
- overlayY: 'top',
3908
- offsetX: 4,
3909
- },
3910
- {
3911
- originX: 'start',
3912
- originY: 'top',
3913
- overlayX: 'end',
3914
- overlayY: 'top',
3915
- offsetX: -4,
3916
- },
3917
- ];
3918
- class ScContextMenuSubContent {
3919
- submenu = inject(ScContextMenuSub);
3920
- classInput = input('', { ...(ngDevMode ? { debugName: "classInput" } : {}), alias: 'class' });
3921
- positions = positions;
3922
- class = computed(() => cn('', this.classInput()), ...(ngDevMode ? [{ debugName: "class" }] : []));
3923
- contentClass = computed(() => cn('z-50 min-w-32 overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg', this.submenu.open()
3924
- ? 'opacity-100 scale-100 transition-[opacity,transform] duration-150 ease-out'
3925
- : 'opacity-0 scale-95 transition-[opacity,transform] duration-150 ease-in'), ...(ngDevMode ? [{ debugName: "contentClass" }] : []));
3926
- onMouseEnter() {
3927
- this.submenu.cancelTriggerHide?.();
3928
- }
3929
- onMouseLeave() {
3930
- this.submenu.hide();
3931
- }
3932
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: ScContextMenuSubContent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3933
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.1", type: ScContextMenuSubContent, isStandalone: true, selector: "div[scContextMenuSubContent]", inputs: { classInput: { classPropertyName: "classInput", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "context-menu-sub-content" }, properties: { "class": "class()" } }, ngImport: i0, template: `
3934
- <ng-template
3935
- cdkConnectedOverlay
3936
- [cdkConnectedOverlayOrigin]="submenu.overlayOrigin!"
3937
- [cdkConnectedOverlayOpen]="submenu.open()"
3938
- [cdkConnectedOverlayPositions]="positions"
3939
- >
3940
- <div
3941
- [class]="contentClass()"
3942
- role="menu"
3943
- (mouseenter)="onMouseEnter()"
3944
- (mouseleave)="onMouseLeave()"
3945
- >
3946
- <ng-content />
3947
- </div>
3948
- </ng-template>
3949
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i1$1.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation", "cdkConnectedOverlayUsePopover", "cdkConnectedOverlayMatchWidth", "cdkConnectedOverlay"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
3950
- }
3951
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: ScContextMenuSubContent, decorators: [{
3952
- type: Component,
3953
- args: [{
3954
- selector: 'div[scContextMenuSubContent]',
3955
- imports: [OverlayModule],
3956
- template: `
3957
- <ng-template
3958
- cdkConnectedOverlay
3959
- [cdkConnectedOverlayOrigin]="submenu.overlayOrigin!"
3960
- [cdkConnectedOverlayOpen]="submenu.open()"
3961
- [cdkConnectedOverlayPositions]="positions"
3962
- >
3963
- <div
3964
- [class]="contentClass()"
3965
- role="menu"
3966
- (mouseenter)="onMouseEnter()"
3967
- (mouseleave)="onMouseLeave()"
3968
- >
3969
- <ng-content />
3970
- </div>
3971
- </ng-template>
3972
- `,
3973
- host: {
3974
- 'data-slot': 'context-menu-sub-content',
3975
- '[class]': 'class()',
3976
- },
3977
- encapsulation: ViewEncapsulation.None,
3978
- changeDetection: ChangeDetectionStrategy.OnPush,
3979
- }]
3980
- }], propDecorators: { classInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
3981
-
3982
- class ScContextMenuSubTrigger {
3983
- submenu = inject(ScContextMenuSub);
3984
- overlayOrigin = inject(CdkOverlayOrigin);
3985
- classInput = input('', { ...(ngDevMode ? { debugName: "classInput" } : {}), alias: 'class' });
3986
- constructor() {
3987
- this.submenu.overlayOrigin = this.overlayOrigin;
3988
- this.submenu.cancelTriggerHide = () => this.cancelHide();
3989
- }
3990
- showTimeout = null;
3991
- hideTimeout = null;
3992
- class = computed(() => cn('flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none', 'focus:bg-accent focus:text-accent-foreground', 'data-[state=open]:bg-accent data-[state=open]:text-accent-foreground', this.classInput()), ...(ngDevMode ? [{ debugName: "class" }] : []));
3993
- onMouseEnter() {
3994
- this.cancelHide();
3995
- this.showTimeout = setTimeout(() => {
3996
- this.submenu.show();
3997
- }, 100);
3998
- }
3999
- onMouseLeave() {
4000
- this.cancelShow();
4001
- this.hideTimeout = setTimeout(() => {
4002
- this.submenu.hide();
4003
- }, 100);
4004
- }
4005
- cancelShow() {
4006
- if (this.showTimeout) {
4007
- clearTimeout(this.showTimeout);
4008
- this.showTimeout = null;
4009
- }
4010
- }
4011
- cancelHide() {
4012
- if (this.hideTimeout) {
4013
- clearTimeout(this.hideTimeout);
4014
- this.hideTimeout = null;
4015
- }
4016
- }
4017
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: ScContextMenuSubTrigger, deps: [], target: i0.ɵɵFactoryTarget.Component });
4018
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.1", type: ScContextMenuSubTrigger, isStandalone: true, selector: "div[scContextMenuSubTrigger]", inputs: { classInput: { classPropertyName: "classInput", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "context-menu-sub-trigger", "role": "menuitem", "aria-haspopup": "menu" }, listeners: { "mouseenter": "onMouseEnter()", "mouseleave": "onMouseLeave()" }, properties: { "attr.aria-expanded": "submenu.open()", "attr.data-state": "submenu.open() ? \"open\" : \"closed\"", "class": "class()" } }, hostDirectives: [{ directive: i1$1.CdkOverlayOrigin }], ngImport: i0, template: `
4019
- <ng-content />
4020
- <svg siChevronRightIcon class="ml-auto size-4" aria-hidden="true"></svg>
4021
- `, isInline: true, dependencies: [{ kind: "component", type: SiChevronRightIcon, selector: "svg[siChevronRightIcon]", inputs: ["ariaHidden", "width", "height", "viewBox", "fill", "stroke", "stroke-width", "stroke-linecap", "stroke-linejoin"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
4022
- }
4023
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: ScContextMenuSubTrigger, decorators: [{
4024
- type: Component,
4025
- args: [{
4026
- selector: 'div[scContextMenuSubTrigger]',
4027
- imports: [SiChevronRightIcon],
4028
- hostDirectives: [CdkOverlayOrigin],
4029
- template: `
4030
- <ng-content />
4031
- <svg siChevronRightIcon class="ml-auto size-4" aria-hidden="true"></svg>
4032
- `,
4033
- host: {
4034
- 'data-slot': 'context-menu-sub-trigger',
4035
- role: 'menuitem',
4036
- 'aria-haspopup': 'menu',
4037
- '[attr.aria-expanded]': 'submenu.open()',
4038
- '[attr.data-state]': 'submenu.open() ? "open" : "closed"',
4039
- '[class]': 'class()',
4040
- '(mouseenter)': 'onMouseEnter()',
4041
- '(mouseleave)': 'onMouseLeave()',
4042
- },
4043
- encapsulation: ViewEncapsulation.None,
4044
- changeDetection: ChangeDetectionStrategy.OnPush,
4045
- }]
4046
- }], ctorParameters: () => [], propDecorators: { classInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
4047
-
4048
- class ScContextMenuTrigger {
4049
- contextMenu = inject(ScContextMenu);
4050
- contentChild = contentChild(ScContextMenuContent, ...(ngDevMode ? [{ debugName: "contentChild" }] : []));
4051
- classInput = input('', { ...(ngDevMode ? { debugName: "classInput" } : {}), alias: 'class' });
4052
- class = computed(() => cn('', this.classInput()), ...(ngDevMode ? [{ debugName: "class" }] : []));
4053
- onContextMenu(event) {
4054
- event.preventDefault();
4055
- const content = this.contentChild();
4056
- if (content?.templateRef) {
4057
- this.contextMenu.openAt(event.clientX, event.clientY, content.templateRef);
4058
- }
4059
- }
4060
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: ScContextMenuTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive });
4061
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "21.2.1", type: ScContextMenuTrigger, isStandalone: true, selector: "[scContextMenuTrigger]", inputs: { classInput: { classPropertyName: "classInput", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "context-menu-trigger" }, listeners: { "contextmenu": "onContextMenu($event)" }, properties: { "class": "class()" } }, queries: [{ propertyName: "contentChild", first: true, predicate: ScContextMenuContent, descendants: true, isSignal: true }], ngImport: i0 });
4062
- }
4063
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: ScContextMenuTrigger, decorators: [{
4064
- type: Directive,
4065
- args: [{
4066
- selector: '[scContextMenuTrigger]',
4067
- host: {
4068
- 'data-slot': 'context-menu-trigger',
4069
- '[class]': 'class()',
4070
- '(contextmenu)': 'onContextMenu($event)',
4071
- },
4072
- }]
4073
- }], propDecorators: { contentChild: [{ type: i0.ContentChild, args: [i0.forwardRef(() => ScContextMenuContent), { isSignal: true }] }], classInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
4074
-
4075
3285
  class ScCountdown {
4076
3286
  destroyRef = inject(DestroyRef);
4077
3287
  classInput = input('', { ...(ngDevMode ? { debugName: "classInput" } : {}), alias: 'class' });
@@ -5145,29 +4355,143 @@ class ScDateRangePicker {
5145
4355
  <div class="p-3">
5146
4356
  @if (showTwoMonths()) {
5147
4357
  <div class="flex gap-4">
5148
- <sc-calendar
4358
+ <div
4359
+ scCalendar
5149
4360
  mode="range"
5150
4361
  [(value)]="value"
5151
4362
  [minDate]="minDate()"
5152
4363
  [maxDate]="maxDate()"
5153
4364
  [disabled]="disabledDates()"
5154
- />
5155
- <sc-calendar
4365
+ #cal1="scCalendar"
4366
+ >
4367
+ <div scCalendarHeader>
4368
+ <button scCalendarPrevious>
4369
+ <svg siChevronLeftIcon class="size-4"></svg>
4370
+ <span class="sr-only">
4371
+ @switch (cal1.viewMode()) {
4372
+ @case ('day') {
4373
+ Go to previous month
4374
+ }
4375
+ @case ('month') {
4376
+ Go to previous year
4377
+ }
4378
+ @case ('year') {
4379
+ Go to previous decade
4380
+ }
4381
+ }
4382
+ </span>
4383
+ </button>
4384
+ <button scCalendarHeading>{{ cal1.heading() }}</button>
4385
+ <button scCalendarNext>
4386
+ <svg siChevronRightIcon class="size-4"></svg>
4387
+ <span class="sr-only">
4388
+ @switch (cal1.viewMode()) {
4389
+ @case ('day') {
4390
+ Go to next month
4391
+ }
4392
+ @case ('month') {
4393
+ Go to next year
4394
+ }
4395
+ @case ('year') {
4396
+ Go to next decade
4397
+ }
4398
+ }
4399
+ </span>
4400
+ </button>
4401
+ </div>
4402
+ </div>
4403
+ <div
4404
+ scCalendar
5156
4405
  mode="range"
5157
4406
  [(value)]="value"
5158
4407
  [minDate]="minDate()"
5159
4408
  [maxDate]="maxDate()"
5160
4409
  [disabled]="disabledDates()"
5161
- />
4410
+ #cal2="scCalendar"
4411
+ >
4412
+ <div scCalendarHeader>
4413
+ <button scCalendarPrevious>
4414
+ <svg siChevronLeftIcon class="size-4"></svg>
4415
+ <span class="sr-only">
4416
+ @switch (cal2.viewMode()) {
4417
+ @case ('day') {
4418
+ Go to previous month
4419
+ }
4420
+ @case ('month') {
4421
+ Go to previous year
4422
+ }
4423
+ @case ('year') {
4424
+ Go to previous decade
4425
+ }
4426
+ }
4427
+ </span>
4428
+ </button>
4429
+ <button scCalendarHeading>{{ cal2.heading() }}</button>
4430
+ <button scCalendarNext>
4431
+ <svg siChevronRightIcon class="size-4"></svg>
4432
+ <span class="sr-only">
4433
+ @switch (cal2.viewMode()) {
4434
+ @case ('day') {
4435
+ Go to next month
4436
+ }
4437
+ @case ('month') {
4438
+ Go to next year
4439
+ }
4440
+ @case ('year') {
4441
+ Go to next decade
4442
+ }
4443
+ }
4444
+ </span>
4445
+ </button>
4446
+ </div>
4447
+ </div>
5162
4448
  </div>
5163
4449
  } @else {
5164
- <sc-calendar
4450
+ <div
4451
+ scCalendar
5165
4452
  mode="range"
5166
4453
  [(value)]="value"
5167
4454
  [minDate]="minDate()"
5168
4455
  [maxDate]="maxDate()"
5169
4456
  [disabled]="disabledDates()"
5170
- />
4457
+ #cal="scCalendar"
4458
+ >
4459
+ <div scCalendarHeader>
4460
+ <button scCalendarPrevious>
4461
+ <svg siChevronLeftIcon class="size-4"></svg>
4462
+ <span class="sr-only">
4463
+ @switch (cal.viewMode()) {
4464
+ @case ('day') {
4465
+ Go to previous month
4466
+ }
4467
+ @case ('month') {
4468
+ Go to previous year
4469
+ }
4470
+ @case ('year') {
4471
+ Go to previous decade
4472
+ }
4473
+ }
4474
+ </span>
4475
+ </button>
4476
+ <button scCalendarHeading>{{ cal.heading() }}</button>
4477
+ <button scCalendarNext>
4478
+ <svg siChevronRightIcon class="size-4"></svg>
4479
+ <span class="sr-only">
4480
+ @switch (cal.viewMode()) {
4481
+ @case ('day') {
4482
+ Go to next month
4483
+ }
4484
+ @case ('month') {
4485
+ Go to next year
4486
+ }
4487
+ @case ('year') {
4488
+ Go to next decade
4489
+ }
4490
+ }
4491
+ </span>
4492
+ </button>
4493
+ </div>
4494
+ </div>
5171
4495
  }
5172
4496
 
5173
4497
  <!-- Footer -->
@@ -5209,7 +4533,7 @@ class ScDateRangePicker {
5209
4533
  @if (dropdownOpen()) {
5210
4534
  <div class="fixed inset-0 z-40" (click)="closeDropdown()"></div>
5211
4535
  }
5212
- `, isInline: true, dependencies: [{ kind: "component", type: ScCalendar, selector: "sc-calendar", inputs: ["class", "mode", "disabled", "minDate", "maxDate", "value"], outputs: ["valueChange"] }, { kind: "component", type: SiCalendarIcon, selector: "svg[siCalendarIcon]", inputs: ["ariaHidden", "width", "height", "viewBox", "fill", "stroke", "stroke-width", "stroke-linecap", "stroke-linejoin"] }, { kind: "component", type: SiXIcon, selector: "svg[siXIcon]", inputs: ["ariaHidden", "width", "height", "viewBox", "fill", "stroke", "stroke-width", "stroke-linecap", "stroke-linejoin"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
4536
+ `, isInline: true, dependencies: [{ kind: "component", type: ScCalendar, selector: "div[scCalendar]", inputs: ["class", "mode", "disabled", "minDate", "maxDate", "value", "ariaLabel", "dayViewLabel", "monthViewLabel", "yearViewLabel", "startOfWeek", "weekDays", "monthLabels", "viewMode"], outputs: ["valueChange"], exportAs: ["scCalendar"] }, { kind: "component", type: ScCalendarHeader, selector: "div[scCalendarHeader]", inputs: ["class"] }, { kind: "directive", type: ScCalendarHeading, selector: "button[scCalendarHeading]", inputs: ["class", "variant", "size"] }, { kind: "directive", type: ScCalendarNext, selector: "button[scCalendarNext]", inputs: ["class", "variant", "size"] }, { kind: "directive", type: ScCalendarPrevious, selector: "button[scCalendarPrevious]", inputs: ["class", "variant", "size"] }, { kind: "component", type: SiCalendarIcon, selector: "svg[siCalendarIcon]", inputs: ["ariaHidden", "width", "height", "viewBox", "fill", "stroke", "stroke-width", "stroke-linecap", "stroke-linejoin"] }, { kind: "component", type: SiChevronLeftIcon, selector: "svg[siChevronLeftIcon]", inputs: ["ariaHidden", "width", "height", "viewBox", "fill", "stroke", "stroke-width", "stroke-linecap", "stroke-linejoin"] }, { kind: "component", type: SiChevronRightIcon, selector: "svg[siChevronRightIcon]", inputs: ["ariaHidden", "width", "height", "viewBox", "fill", "stroke", "stroke-width", "stroke-linecap", "stroke-linejoin"] }, { kind: "component", type: SiXIcon, selector: "svg[siXIcon]", inputs: ["ariaHidden", "width", "height", "viewBox", "fill", "stroke", "stroke-width", "stroke-linecap", "stroke-linejoin"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
5213
4537
  }
5214
4538
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: ScDateRangePicker, decorators: [{
5215
4539
  type: Component,
@@ -5265,29 +4589,143 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
5265
4589
  <div class="p-3">
5266
4590
  @if (showTwoMonths()) {
5267
4591
  <div class="flex gap-4">
5268
- <sc-calendar
4592
+ <div
4593
+ scCalendar
5269
4594
  mode="range"
5270
4595
  [(value)]="value"
5271
4596
  [minDate]="minDate()"
5272
4597
  [maxDate]="maxDate()"
5273
4598
  [disabled]="disabledDates()"
5274
- />
5275
- <sc-calendar
4599
+ #cal1="scCalendar"
4600
+ >
4601
+ <div scCalendarHeader>
4602
+ <button scCalendarPrevious>
4603
+ <svg siChevronLeftIcon class="size-4"></svg>
4604
+ <span class="sr-only">
4605
+ @switch (cal1.viewMode()) {
4606
+ @case ('day') {
4607
+ Go to previous month
4608
+ }
4609
+ @case ('month') {
4610
+ Go to previous year
4611
+ }
4612
+ @case ('year') {
4613
+ Go to previous decade
4614
+ }
4615
+ }
4616
+ </span>
4617
+ </button>
4618
+ <button scCalendarHeading>{{ cal1.heading() }}</button>
4619
+ <button scCalendarNext>
4620
+ <svg siChevronRightIcon class="size-4"></svg>
4621
+ <span class="sr-only">
4622
+ @switch (cal1.viewMode()) {
4623
+ @case ('day') {
4624
+ Go to next month
4625
+ }
4626
+ @case ('month') {
4627
+ Go to next year
4628
+ }
4629
+ @case ('year') {
4630
+ Go to next decade
4631
+ }
4632
+ }
4633
+ </span>
4634
+ </button>
4635
+ </div>
4636
+ </div>
4637
+ <div
4638
+ scCalendar
5276
4639
  mode="range"
5277
4640
  [(value)]="value"
5278
4641
  [minDate]="minDate()"
5279
4642
  [maxDate]="maxDate()"
5280
4643
  [disabled]="disabledDates()"
5281
- />
4644
+ #cal2="scCalendar"
4645
+ >
4646
+ <div scCalendarHeader>
4647
+ <button scCalendarPrevious>
4648
+ <svg siChevronLeftIcon class="size-4"></svg>
4649
+ <span class="sr-only">
4650
+ @switch (cal2.viewMode()) {
4651
+ @case ('day') {
4652
+ Go to previous month
4653
+ }
4654
+ @case ('month') {
4655
+ Go to previous year
4656
+ }
4657
+ @case ('year') {
4658
+ Go to previous decade
4659
+ }
4660
+ }
4661
+ </span>
4662
+ </button>
4663
+ <button scCalendarHeading>{{ cal2.heading() }}</button>
4664
+ <button scCalendarNext>
4665
+ <svg siChevronRightIcon class="size-4"></svg>
4666
+ <span class="sr-only">
4667
+ @switch (cal2.viewMode()) {
4668
+ @case ('day') {
4669
+ Go to next month
4670
+ }
4671
+ @case ('month') {
4672
+ Go to next year
4673
+ }
4674
+ @case ('year') {
4675
+ Go to next decade
4676
+ }
4677
+ }
4678
+ </span>
4679
+ </button>
4680
+ </div>
4681
+ </div>
5282
4682
  </div>
5283
4683
  } @else {
5284
- <sc-calendar
4684
+ <div
4685
+ scCalendar
5285
4686
  mode="range"
5286
4687
  [(value)]="value"
5287
4688
  [minDate]="minDate()"
5288
4689
  [maxDate]="maxDate()"
5289
4690
  [disabled]="disabledDates()"
5290
- />
4691
+ #cal="scCalendar"
4692
+ >
4693
+ <div scCalendarHeader>
4694
+ <button scCalendarPrevious>
4695
+ <svg siChevronLeftIcon class="size-4"></svg>
4696
+ <span class="sr-only">
4697
+ @switch (cal.viewMode()) {
4698
+ @case ('day') {
4699
+ Go to previous month
4700
+ }
4701
+ @case ('month') {
4702
+ Go to previous year
4703
+ }
4704
+ @case ('year') {
4705
+ Go to previous decade
4706
+ }
4707
+ }
4708
+ </span>
4709
+ </button>
4710
+ <button scCalendarHeading>{{ cal.heading() }}</button>
4711
+ <button scCalendarNext>
4712
+ <svg siChevronRightIcon class="size-4"></svg>
4713
+ <span class="sr-only">
4714
+ @switch (cal.viewMode()) {
4715
+ @case ('day') {
4716
+ Go to next month
4717
+ }
4718
+ @case ('month') {
4719
+ Go to next year
4720
+ }
4721
+ @case ('year') {
4722
+ Go to next decade
4723
+ }
4724
+ }
4725
+ </span>
4726
+ </button>
4727
+ </div>
4728
+ </div>
5291
4729
  }
5292
4730
 
5293
4731
  <!-- Footer -->
@@ -5333,7 +4771,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
5333
4771
  host: {
5334
4772
  'data-slot': 'date-range-picker',
5335
4773
  },
5336
- imports: [ScCalendar, SiCalendarIcon, SiXIcon],
4774
+ imports: [
4775
+ ScCalendar,
4776
+ ScCalendarHeader,
4777
+ ScCalendarHeading,
4778
+ ScCalendarNext,
4779
+ ScCalendarPrevious,
4780
+ SiCalendarIcon,
4781
+ SiChevronLeftIcon,
4782
+ SiChevronRightIcon,
4783
+ SiXIcon,
4784
+ ],
5337
4785
  encapsulation: ViewEncapsulation.None,
5338
4786
  changeDetection: ChangeDetectionStrategy.OnPush,
5339
4787
  }]
@@ -8767,40 +8215,21 @@ class ScImageCropperZoomSlider {
8767
8215
  classInput = input('', { ...(ngDevMode ? { debugName: "classInput" } : {}), alias: 'class' });
8768
8216
  class = computed(() => cn('flex items-center gap-2', this.classInput()), ...(ngDevMode ? [{ debugName: "class" }] : []));
8769
8217
  zoomPercentage = computed(() => `${(this.cropper.zoom() * 100).toFixed(0)}%`, ...(ngDevMode ? [{ debugName: "zoomPercentage" }] : []));
8770
- sliderEl = viewChild('sliderEl', ...(ngDevMode ? [{ debugName: "sliderEl" }] : []));
8771
- constructor() {
8772
- effect(() => {
8773
- const zoom = this.cropper.zoom();
8774
- const el = this.sliderEl()?.nativeElement;
8775
- if (!el)
8776
- return;
8777
- el.value = String(zoom);
8778
- const min = parseFloat(el.min) || 0;
8779
- const max = parseFloat(el.max) || 100;
8780
- const percent = ((zoom - min) / (max - min)) * 100;
8781
- el.style.setProperty('--fill-percent', `${percent}%`);
8782
- });
8783
- }
8784
- onInput(event) {
8785
- const value = parseFloat(event.target.value);
8786
- this.cropper.setZoom(value);
8787
- }
8788
8218
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: ScImageCropperZoomSlider, deps: [], target: i0.ɵɵFactoryTarget.Component });
8789
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.1", type: ScImageCropperZoomSlider, isStandalone: true, selector: "[scImageCropperZoomSlider]", inputs: { classInput: { classPropertyName: "classInput", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "image-cropper-zoom-slider" }, properties: { "class": "class()" } }, viewQueries: [{ propertyName: "sliderEl", first: true, predicate: ["sliderEl"], descendants: true, isSignal: true }], ngImport: i0, template: `
8219
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.1", type: ScImageCropperZoomSlider, isStandalone: true, selector: "[scImageCropperZoomSlider]", inputs: { classInput: { classPropertyName: "classInput", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "image-cropper-zoom-slider" }, properties: { "class": "class()" } }, ngImport: i0, template: `
8790
8220
  <input
8791
- #sliderEl
8792
8221
  scSlider
8793
8222
  aria-label="Zoom level"
8794
8223
  [min]="0.1"
8795
8224
  [max]="3"
8796
8225
  [step]="0.1"
8797
8226
  [value]="cropper.zoom()"
8798
- (input)="onInput($event)"
8227
+ (valueChange)="cropper.setZoom($event)"
8799
8228
  />
8800
8229
  <span class="text-muted-foreground min-w-[50px] text-center text-sm">
8801
8230
  {{ zoomPercentage() }}
8802
8231
  </span>
8803
- `, isInline: true, dependencies: [{ kind: "directive", type: ScSlider, selector: "input[scSlider]", inputs: ["id", "class", "aria-describedby"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
8232
+ `, isInline: true, dependencies: [{ kind: "directive", type: ScSlider, selector: "input[scSlider]", inputs: ["value", "min", "max", "step", "id", "class", "aria-describedby"], outputs: ["valueChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
8804
8233
  }
8805
8234
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: ScImageCropperZoomSlider, decorators: [{
8806
8235
  type: Component,
@@ -8809,14 +8238,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
8809
8238
  imports: [ScSlider],
8810
8239
  template: `
8811
8240
  <input
8812
- #sliderEl
8813
8241
  scSlider
8814
8242
  aria-label="Zoom level"
8815
8243
  [min]="0.1"
8816
8244
  [max]="3"
8817
8245
  [step]="0.1"
8818
8246
  [value]="cropper.zoom()"
8819
- (input)="onInput($event)"
8247
+ (valueChange)="cropper.setZoom($event)"
8820
8248
  />
8821
8249
  <span class="text-muted-foreground min-w-[50px] text-center text-sm">
8822
8250
  {{ zoomPercentage() }}
@@ -8829,7 +8257,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
8829
8257
  encapsulation: ViewEncapsulation.None,
8830
8258
  changeDetection: ChangeDetectionStrategy.OnPush,
8831
8259
  }]
8832
- }], ctorParameters: () => [], propDecorators: { classInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], sliderEl: [{ type: i0.ViewChild, args: ['sliderEl', { isSignal: true }] }] } });
8260
+ }], propDecorators: { classInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
8833
8261
 
8834
8262
  class ScImageCropperZoomIn {
8835
8263
  cropper = inject(SC_IMAGE_CROPPER);
@@ -9936,20 +9364,7 @@ class ScKanbanColumn {
9936
9364
  class="text-muted-foreground hover:text-foreground hover:bg-muted/50 flex w-full items-center justify-center gap-1 border-t p-2 text-sm transition-colors"
9937
9365
  (click)="startAddingCard()"
9938
9366
  >
9939
- <svg
9940
- xmlns="http://www.w3.org/2000/svg"
9941
- width="14"
9942
- height="14"
9943
- viewBox="0 0 24 24"
9944
- fill="none"
9945
- stroke="currentColor"
9946
- stroke-width="2"
9947
- stroke-linecap="round"
9948
- stroke-linejoin="round"
9949
- >
9950
- <path d="M5 12h14" />
9951
- <path d="M12 5v14" />
9952
- </svg>
9367
+ <svg siPlusIcon class="size-3.5"></svg>
9953
9368
  Add card
9954
9369
  </button>
9955
9370
  }
@@ -10111,20 +9526,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
10111
9526
  class="text-muted-foreground hover:text-foreground hover:bg-muted/50 flex w-full items-center justify-center gap-1 border-t p-2 text-sm transition-colors"
10112
9527
  (click)="startAddingCard()"
10113
9528
  >
10114
- <svg
10115
- xmlns="http://www.w3.org/2000/svg"
10116
- width="14"
10117
- height="14"
10118
- viewBox="0 0 24 24"
10119
- fill="none"
10120
- stroke="currentColor"
10121
- stroke-width="2"
10122
- stroke-linecap="round"
10123
- stroke-linejoin="round"
10124
- >
10125
- <path d="M5 12h14" />
10126
- <path d="M12 5v14" />
10127
- </svg>
9529
+ <svg siPlusIcon class="size-3.5"></svg>
10128
9530
  Add card
10129
9531
  </button>
10130
9532
  }
@@ -11740,7 +11142,7 @@ class ScNavbar {
11740
11142
  overlayOrigin = inject(CdkOverlayOrigin);
11741
11143
  class = computed(() => cn('flex items-center justify-between', 'w-full px-4 py-3 md:px-6', 'bg-background border-b border-border', this.classInput()), ...(ngDevMode ? [{ debugName: "class" }] : []));
11742
11144
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: ScNavbar, deps: [], target: i0.ɵɵFactoryTarget.Component });
11743
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.1", type: ScNavbar, isStandalone: true, selector: "nav[scNavbar]", inputs: { classInput: { classPropertyName: "classInput", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "navbar" }, properties: { "class": "class()" } }, hostDirectives: [{ directive: i1$1.CdkOverlayOrigin }], ngImport: i0, template: `
11145
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.1", type: ScNavbar, isStandalone: true, selector: "nav[scNavbar]", inputs: { classInput: { classPropertyName: "classInput", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "navbar" }, properties: { "class": "class()" } }, hostDirectives: [{ directive: i1.CdkOverlayOrigin }], ngImport: i0, template: `
11744
11146
  <ng-content />
11745
11147
  `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
11746
11148
  }
@@ -15743,22 +15145,7 @@ class ScPdfViewer {
15743
15145
  <div
15744
15146
  class="bg-destructive/10 flex h-16 w-16 items-center justify-center rounded-full"
15745
15147
  >
15746
- <svg
15747
- xmlns="http://www.w3.org/2000/svg"
15748
- width="32"
15749
- height="32"
15750
- viewBox="0 0 24 24"
15751
- fill="none"
15752
- stroke="currentColor"
15753
- stroke-width="2"
15754
- stroke-linecap="round"
15755
- stroke-linejoin="round"
15756
- class="text-destructive"
15757
- >
15758
- <circle cx="12" cy="12" r="10" />
15759
- <path d="m15 9-6 6" />
15760
- <path d="m9 9 6 6" />
15761
- </svg>
15148
+ <svg siCircleXIcon class="text-destructive size-8"></svg>
15762
15149
  </div>
15763
15150
  <p class="text-foreground text-sm font-medium">
15764
15151
  Failed to load PDF
@@ -15813,26 +15200,7 @@ class ScPdfViewer {
15813
15200
  <div
15814
15201
  class="bg-muted flex h-16 w-16 items-center justify-center rounded-full"
15815
15202
  >
15816
- <svg
15817
- xmlns="http://www.w3.org/2000/svg"
15818
- width="32"
15819
- height="32"
15820
- viewBox="0 0 24 24"
15821
- fill="none"
15822
- stroke="currentColor"
15823
- stroke-width="1.5"
15824
- stroke-linecap="round"
15825
- stroke-linejoin="round"
15826
- class="text-muted-foreground"
15827
- >
15828
- <path
15829
- d="M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"
15830
- />
15831
- <polyline points="14 2 14 8 20 8" />
15832
- <line x1="16" x2="8" y1="13" y2="13" />
15833
- <line x1="16" x2="8" y1="17" y2="17" />
15834
- <line x1="10" x2="8" y1="9" y2="9" />
15835
- </svg>
15203
+ <svg siFileTextIcon class="text-muted-foreground size-8"></svg>
15836
15204
  </div>
15837
15205
  <p class="text-muted-foreground text-sm">No PDF selected</p>
15838
15206
  </div>
@@ -15840,11 +15208,11 @@ class ScPdfViewer {
15840
15208
  }
15841
15209
  </div>
15842
15210
  </div>
15843
- `, isInline: true, styles: [":host{display:block}.fullscreen{position:fixed!important;inset:0!important;z-index:50!important;width:100vw!important;height:100vh!important}\n"], dependencies: [{ kind: "component", type: ScPdfViewerToolbar, selector: "sc-pdf-viewer-toolbar", inputs: ["currentPage", "totalPages", "zoom", "isFullscreen", "toolbarConfig", "class"], outputs: ["prevPage", "nextPage", "goToPage", "zoomIn", "zoomOut", "zoomChange", "rotateLeft", "rotateRight", "download", "print", "toggleFullscreen"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
15211
+ `, isInline: true, styles: [":host{display:block}.fullscreen{position:fixed!important;inset:0!important;z-index:50!important;width:100vw!important;height:100vh!important}\n"], dependencies: [{ kind: "component", type: ScPdfViewerToolbar, selector: "sc-pdf-viewer-toolbar", inputs: ["currentPage", "totalPages", "zoom", "isFullscreen", "toolbarConfig", "class"], outputs: ["prevPage", "nextPage", "goToPage", "zoomIn", "zoomOut", "zoomChange", "rotateLeft", "rotateRight", "download", "print", "toggleFullscreen"] }, { kind: "component", type: SiCircleXIcon, selector: "svg[siCircleXIcon]", inputs: ["ariaHidden", "width", "height", "viewBox", "fill", "stroke", "stroke-width", "stroke-linecap", "stroke-linejoin"] }, { kind: "component", type: SiFileTextIcon, selector: "svg[siFileTextIcon]", inputs: ["ariaHidden", "width", "height", "viewBox", "fill", "stroke", "stroke-width", "stroke-linecap", "stroke-linejoin"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
15844
15212
  }
15845
15213
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: ScPdfViewer, decorators: [{
15846
15214
  type: Component,
15847
- args: [{ selector: 'sc-pdf-viewer', imports: [ScPdfViewerToolbar], template: `
15215
+ args: [{ selector: 'sc-pdf-viewer', imports: [ScPdfViewerToolbar, SiCircleXIcon, SiFileTextIcon], template: `
15848
15216
  <div
15849
15217
  #container
15850
15218
  [class]="containerClass()"
@@ -15897,22 +15265,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
15897
15265
  <div
15898
15266
  class="bg-destructive/10 flex h-16 w-16 items-center justify-center rounded-full"
15899
15267
  >
15900
- <svg
15901
- xmlns="http://www.w3.org/2000/svg"
15902
- width="32"
15903
- height="32"
15904
- viewBox="0 0 24 24"
15905
- fill="none"
15906
- stroke="currentColor"
15907
- stroke-width="2"
15908
- stroke-linecap="round"
15909
- stroke-linejoin="round"
15910
- class="text-destructive"
15911
- >
15912
- <circle cx="12" cy="12" r="10" />
15913
- <path d="m15 9-6 6" />
15914
- <path d="m9 9 6 6" />
15915
- </svg>
15268
+ <svg siCircleXIcon class="text-destructive size-8"></svg>
15916
15269
  </div>
15917
15270
  <p class="text-foreground text-sm font-medium">
15918
15271
  Failed to load PDF
@@ -15967,26 +15320,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
15967
15320
  <div
15968
15321
  class="bg-muted flex h-16 w-16 items-center justify-center rounded-full"
15969
15322
  >
15970
- <svg
15971
- xmlns="http://www.w3.org/2000/svg"
15972
- width="32"
15973
- height="32"
15974
- viewBox="0 0 24 24"
15975
- fill="none"
15976
- stroke="currentColor"
15977
- stroke-width="1.5"
15978
- stroke-linecap="round"
15979
- stroke-linejoin="round"
15980
- class="text-muted-foreground"
15981
- >
15982
- <path
15983
- d="M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"
15984
- />
15985
- <polyline points="14 2 14 8 20 8" />
15986
- <line x1="16" x2="8" y1="13" y2="13" />
15987
- <line x1="16" x2="8" y1="17" y2="17" />
15988
- <line x1="10" x2="8" y1="9" y2="9" />
15989
- </svg>
15323
+ <svg siFileTextIcon class="text-muted-foreground size-8"></svg>
15990
15324
  </div>
15991
15325
  <p class="text-muted-foreground text-sm">No PDF selected</p>
15992
15326
  </div>
@@ -17120,29 +16454,18 @@ class ScQrCodeDownload {
17120
16454
  />
17121
16455
  @if (showDownload()) {
17122
16456
  <button type="button" (click)="download()" [class]="buttonClass()">
17123
- <svg
17124
- xmlns="http://www.w3.org/2000/svg"
17125
- viewBox="0 0 24 24"
17126
- fill="none"
17127
- stroke="currentColor"
17128
- stroke-width="2"
17129
- class="size-4"
17130
- >
17131
- <path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" />
17132
- <polyline points="7 10 12 15 17 10" />
17133
- <line x1="12" x2="12" y1="15" y2="3" />
17134
- </svg>
16457
+ <svg siDownloadIcon class="size-4"></svg>
17135
16458
  {{ downloadLabel() }}
17136
16459
  </button>
17137
16460
  }
17138
16461
  </div>
17139
- `, isInline: true, dependencies: [{ kind: "component", type: ScQrCode, selector: "sc-qr-code", inputs: ["value", "size", "errorCorrectionLevel", "foregroundColor", "backgroundColor", "quietZone", "logo", "logoSize", "ariaLabel", "class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
16462
+ `, isInline: true, dependencies: [{ kind: "component", type: ScQrCode, selector: "sc-qr-code", inputs: ["value", "size", "errorCorrectionLevel", "foregroundColor", "backgroundColor", "quietZone", "logo", "logoSize", "ariaLabel", "class"] }, { kind: "component", type: SiDownloadIcon, selector: "svg[siDownloadIcon]", inputs: ["ariaHidden", "width", "height", "viewBox", "fill", "stroke", "stroke-width", "stroke-linecap", "stroke-linejoin"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
17140
16463
  }
17141
16464
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: ScQrCodeDownload, decorators: [{
17142
16465
  type: Component,
17143
16466
  args: [{
17144
16467
  selector: 'sc-qr-code-download',
17145
- imports: [ScQrCode],
16468
+ imports: [ScQrCode, SiDownloadIcon],
17146
16469
  template: `
17147
16470
  <div [class]="containerClass()">
17148
16471
  <sc-qr-code
@@ -17157,18 +16480,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
17157
16480
  />
17158
16481
  @if (showDownload()) {
17159
16482
  <button type="button" (click)="download()" [class]="buttonClass()">
17160
- <svg
17161
- xmlns="http://www.w3.org/2000/svg"
17162
- viewBox="0 0 24 24"
17163
- fill="none"
17164
- stroke="currentColor"
17165
- stroke-width="2"
17166
- class="size-4"
17167
- >
17168
- <path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" />
17169
- <polyline points="7 10 12 15 17 10" />
17170
- <line x1="12" x2="12" y1="15" y2="3" />
17171
- </svg>
16483
+ <svg siDownloadIcon class="size-4"></svg>
17172
16484
  {{ downloadLabel() }}
17173
16485
  </button>
17174
16486
  }
@@ -21450,7 +20762,7 @@ class ScTree {
21450
20762
  classInput = input('', { ...(ngDevMode ? { debugName: "classInput" } : {}), alias: 'class' });
21451
20763
  class = computed(() => cn('flex flex-col gap-1', this.classInput()), ...(ngDevMode ? [{ debugName: "class" }] : []));
21452
20764
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: ScTree, deps: [], target: i0.ɵɵFactoryTarget.Directive });
21453
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.1", type: ScTree, isStandalone: true, selector: "ul[scTree]", inputs: { classInput: { classPropertyName: "classInput", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "tree" }, properties: { "class": "class()" } }, exportAs: ["scTree"], hostDirectives: [{ directive: i1$2.Tree }], ngImport: i0 });
20765
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.1", type: ScTree, isStandalone: true, selector: "ul[scTree]", inputs: { classInput: { classPropertyName: "classInput", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "tree" }, properties: { "class": "class()" } }, exportAs: ["scTree"], hostDirectives: [{ directive: i1$1.Tree }], ngImport: i0 });
21454
20766
  }
21455
20767
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: ScTree, decorators: [{
21456
20768
  type: Directive,
@@ -21518,7 +20830,7 @@ class ScTreeItem {
21518
20830
  hasChildren = computed(() => !!this.groupContent(), ...(ngDevMode ? [{ debugName: "hasChildren" }] : []));
21519
20831
  class = computed(() => cn('flex flex-col', this.classInput()), ...(ngDevMode ? [{ debugName: "class" }] : []));
21520
20832
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: ScTreeItem, deps: [], target: i0.ɵɵFactoryTarget.Component });
21521
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.1", type: ScTreeItem, isStandalone: true, selector: "li[scTreeItem]", inputs: { classInput: { classPropertyName: "classInput", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "tree-item" }, properties: { "class": "class()", "attr.data-state": "treeItem.expanded() ? \"open\" : \"closed\"" } }, providers: [{ provide: SC_TREE_ITEM, useExisting: ScTreeItem }], queries: [{ propertyName: "groupContent", first: true, predicate: ScTreeItemGroup, descendants: true, isSignal: true }], hostDirectives: [{ directive: i1$2.TreeItem, inputs: ["value", "value", "parent", "parent", "label", "label", "disabled", "disabled", "expanded", "expanded"] }], ngImport: i0, template: `
20833
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.1", type: ScTreeItem, isStandalone: true, selector: "li[scTreeItem]", inputs: { classInput: { classPropertyName: "classInput", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "tree-item" }, properties: { "class": "class()", "attr.data-state": "treeItem.expanded() ? \"open\" : \"closed\"" } }, providers: [{ provide: SC_TREE_ITEM, useExisting: ScTreeItem }], queries: [{ propertyName: "groupContent", first: true, predicate: ScTreeItemGroup, descendants: true, isSignal: true }], hostDirectives: [{ directive: i1$1.TreeItem, inputs: ["value", "value", "parent", "parent", "label", "label", "disabled", "disabled", "expanded", "expanded"] }], ngImport: i0, template: `
21522
20834
  <ng-content />
21523
20835
  `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
21524
20836
  }
@@ -21975,10 +21287,6 @@ class ScVideoPlayerProgress {
21975
21287
  player = inject(SC_VIDEO_PLAYER);
21976
21288
  classInput = input('', { ...(ngDevMode ? { debugName: "classInput" } : {}), alias: 'class' });
21977
21289
  class = computed(() => cn('group relative mb-2 block h-3', this.classInput()), ...(ngDevMode ? [{ debugName: "class" }] : []));
21978
- onSeek(event) {
21979
- const value = +event.target.value;
21980
- this.player.seek(value);
21981
- }
21982
21290
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: ScVideoPlayerProgress, deps: [], target: i0.ɵɵFactoryTarget.Component });
21983
21291
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.1", type: ScVideoPlayerProgress, isStandalone: true, selector: "div[scVideoPlayerProgress]", inputs: { classInput: { classPropertyName: "classInput", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "class()", "style.--primary": "\"oklch(1 0 0)\"", "style.--muted": "\"oklch(1 0 0 / 0.3)\"", "style.--ring": "\"oklch(1 0 0 / 0.5)\"" } }, ngImport: i0, template: `
21984
21292
  <!-- Buffered -->
@@ -21991,14 +21299,12 @@ class ScVideoPlayerProgress {
21991
21299
  scSlider
21992
21300
  class="absolute inset-0 h-full [&::-moz-range-progress]:transition-[height] group-hover:[&::-moz-range-progress]:h-1.5 [&::-moz-range-track]:transition-[height] group-hover:[&::-moz-range-track]:h-1.5 [&::-webkit-slider-runnable-track]:transition-[height] group-hover:[&::-webkit-slider-runnable-track]:h-1.5"
21993
21301
  aria-label="Video progress"
21994
- min="0"
21995
- max="100"
21996
- step="0.1"
21302
+ [max]="100"
21303
+ [step]="0.1"
21997
21304
  [value]="player.progressPercent()"
21998
- [style.--fill-percent]="player.progressPercent() + '%'"
21999
- (input)="onSeek($event)"
21305
+ (valueChange)="player.seek($event)"
22000
21306
  />
22001
- `, isInline: true, dependencies: [{ kind: "directive", type: ScSlider, selector: "input[scSlider]", inputs: ["id", "class", "aria-describedby"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
21307
+ `, isInline: true, dependencies: [{ kind: "directive", type: ScSlider, selector: "input[scSlider]", inputs: ["value", "min", "max", "step", "id", "class", "aria-describedby"], outputs: ["valueChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
22002
21308
  }
22003
21309
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: ScVideoPlayerProgress, decorators: [{
22004
21310
  type: Component,
@@ -22016,12 +21322,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
22016
21322
  scSlider
22017
21323
  class="absolute inset-0 h-full [&::-moz-range-progress]:transition-[height] group-hover:[&::-moz-range-progress]:h-1.5 [&::-moz-range-track]:transition-[height] group-hover:[&::-moz-range-track]:h-1.5 [&::-webkit-slider-runnable-track]:transition-[height] group-hover:[&::-webkit-slider-runnable-track]:h-1.5"
22018
21324
  aria-label="Video progress"
22019
- min="0"
22020
- max="100"
22021
- step="0.1"
21325
+ [max]="100"
21326
+ [step]="0.1"
22022
21327
  [value]="player.progressPercent()"
22023
- [style.--fill-percent]="player.progressPercent() + '%'"
22024
- (input)="onSeek($event)"
21328
+ (valueChange)="player.seek($event)"
22025
21329
  />
22026
21330
  `,
22027
21331
  host: {
@@ -22040,10 +21344,6 @@ class ScVideoPlayerVolume {
22040
21344
  classInput = input('', { ...(ngDevMode ? { debugName: "classInput" } : {}), alias: 'class' });
22041
21345
  class = computed(() => cn('group/volume flex items-center gap-1', this.classInput()), ...(ngDevMode ? [{ debugName: "class" }] : []));
22042
21346
  buttonClass = computed(() => cn(buttonVariants({ variant: 'ghost', size: 'icon' }), 'text-foreground', '[&_svg]:size-5'), ...(ngDevMode ? [{ debugName: "buttonClass" }] : []));
22043
- onVolumeInput(event) {
22044
- const value = +event.target.value;
22045
- this.player.setVolume(value);
22046
- }
22047
21347
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: ScVideoPlayerVolume, deps: [], target: i0.ɵɵFactoryTarget.Component });
22048
21348
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.1", type: ScVideoPlayerVolume, isStandalone: true, selector: "div[scVideoPlayerVolume]", inputs: { classInput: { classPropertyName: "classInput", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "class()", "style.--primary": "\"oklch(1 0 0)\"", "style.--muted": "\"oklch(1 0 0 / 0.3)\"", "style.--ring": "\"oklch(1 0 0 / 0.5)\"" } }, ngImport: i0, template: `
22049
21349
  <button
@@ -22057,15 +21357,13 @@ class ScVideoPlayerVolume {
22057
21357
  <input
22058
21358
  scSlider
22059
21359
  class="h-1 w-0 cursor-pointer opacity-0 transition-all duration-200 group-hover/volume:w-20 group-hover/volume:opacity-100"
22060
- min="0"
22061
- max="1"
22062
- step="0.01"
21360
+ [max]="1"
21361
+ [step]="0.01"
22063
21362
  [value]="player.volume()"
22064
- [style.--fill-percent]="player.volume() * 100 + '%'"
22065
- (input)="onVolumeInput($event)"
21363
+ (valueChange)="player.setVolume($event)"
22066
21364
  aria-label="Volume"
22067
21365
  />
22068
- `, isInline: true, dependencies: [{ kind: "directive", type: ScSlider, selector: "input[scSlider]", inputs: ["id", "class", "aria-describedby"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
21366
+ `, isInline: true, dependencies: [{ kind: "directive", type: ScSlider, selector: "input[scSlider]", inputs: ["value", "min", "max", "step", "id", "class", "aria-describedby"], outputs: ["valueChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
22069
21367
  }
22070
21368
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: ScVideoPlayerVolume, decorators: [{
22071
21369
  type: Component,
@@ -22084,12 +21382,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
22084
21382
  <input
22085
21383
  scSlider
22086
21384
  class="h-1 w-0 cursor-pointer opacity-0 transition-all duration-200 group-hover/volume:w-20 group-hover/volume:opacity-100"
22087
- min="0"
22088
- max="1"
22089
- step="0.01"
21385
+ [max]="1"
21386
+ [step]="0.01"
22090
21387
  [value]="player.volume()"
22091
- [style.--fill-percent]="player.volume() * 100 + '%'"
22092
- (input)="onVolumeInput($event)"
21388
+ (valueChange)="player.setVolume($event)"
22093
21389
  aria-label="Volume"
22094
21390
  />
22095
21391
  `,
@@ -22942,5 +22238,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
22942
22238
  * Generated bundle index. Do not edit.
22943
22239
  */
22944
22240
 
22945
- export { AuthLayout, CHART_COLORS, COUNTRIES, DEFAULT_BREAKPOINTS, DEFAULT_CONFETTI_OPTIONS, DEFAULT_CONFIG, DEFAULT_COUNTER_OPTIONS, DEFAULT_DOCK_OPTIONS, DEFAULT_TOOLBAR_CONFIG, SC_AUDIO_PLAYER, SC_CHART, SC_COLOR_PICKER, SC_DATA_TABLE, SC_IMAGE_COMPARE, SC_IMAGE_CROPPER, SC_LANGUAGE_CONFIG, SC_LIGHTBOX, SC_NOTIFICATION_CENTER, SC_NUMBER_FIELD, SC_PASSWORD_FIELD, SC_PDF_VIEWER, SC_SIGNATURE_PAD, SC_SORTABLE_ITEM, SC_SORTABLE_LIST, SC_STEPPER, SC_STEPPER_ITEM, SC_TAG_INPUT, SC_TIMEZONE_CONFIG, SC_TREE_ITEM, ScAnimatedCounter, ScAudioPlayer, ScAudioPlayerControls, ScAudioPlayerCover, ScAudioPlayerNext, ScAudioPlayerPlay, ScAudioPlayerPrevious, ScAudioPlayerProgress, ScAudioPlayerRepeat, ScAudioPlayerShuffle, ScAudioPlayerTrackInfo, ScAudioPlayerVolume, ScAutoMarquee, ScBarChart, ScBarcodeScanner, ScBarcodeScannerSimple, ScButtonPattern, ScChartContainer, ScChartLegend, ScChartTooltip, ScColorPicker, ScColorPickerArea, ScColorPickerEyeDropper, ScColorPickerHue, ScColorPickerInput, ScColorPickerPreview, ScColorPickerSwatches, ScCommand, ScCommandEmpty, ScCommandGroup, ScCommandGroupHeading, ScCommandInput, ScCommandItem, ScCommandList, ScCommandSeparator, ScCommandShortcut, ScConfetti, ScContextMenu, ScContextMenuContent, ScContextMenuItem, ScContextMenuLabel, ScContextMenuSeparator, ScContextMenuShortcut, ScContextMenuSub, ScContextMenuSubContent, ScContextMenuSubTrigger, ScContextMenuTrigger, ScCountdown, ScCountdownSimple, ScDataTable, ScDataTableBody, ScDataTableCell, ScDataTableColumnToggle, ScDataTableFilter, ScDataTableHead, ScDataTableHeader, ScDataTablePagination, ScDataTableRow, ScDateRangePicker, ScDiffViewer, ScDock, ScDockBadge, ScDockItem, ScDockItems, ScDonutChart, ScEmojiPicker, ScEmojiPickerTrigger, ScImageAnnotator, ScImageCompare, ScImageCompareAfter, ScImageCompareArea, ScImageCompareBefore, ScImageCompareLabel, ScImageCompareSlider, ScImageCropper, ScImageCropperAspectRatio, ScImageCropperCanvas, ScImageCropperDragRegion, ScImageCropperFileInput, ScImageCropperFlipH, ScImageCropperFlipV, ScImageCropperGrid, ScImageCropperHandle, ScImageCropperImage, ScImageCropperOverlay, ScImageCropperPreview, ScImageCropperReset, ScImageCropperRotateLeft, ScImageCropperRotateRight, ScImageCropperSelection, ScImageCropperZoomIn, ScImageCropperZoomOut, ScImageCropperZoomSlider, ScInfiniteScroll, ScInfiniteScrollEnd, ScInfiniteScrollLoader, ScKanbanBoard, ScKanbanCard, ScKanbanColumn, ScLanguageButton, ScLanguageSelect, ScLanguageService, ScLanguageToggle, ScLightboxDirective as ScLightbox, ScLightboxContainer, ScLightboxDirective, ScLightboxGallery, ScLightboxTrigger, ScLineChart, ScMarquee, ScMarqueeClone, ScMarqueeFade, ScMarqueeItem, ScMarqueeText, ScMasonryGrid, ScMasonryItem, ScMentionInput, ScNativeCheckbox, ScNativeDialog, ScNativeDialogBody, ScNativeDialogClose, ScNativeDialogContent, ScNativeDialogDescription, ScNativeDialogFooter, ScNativeDialogHeader, ScNativeDialogProvider, ScNativeDialogTitle, ScNativeDialogTrigger, ScNavbar, ScNavbarActions, ScNavbarBrand, ScNavbarGroup, ScNavbarMobileLink, ScNavbarMobileMenu, ScNavbarMobilePortal, ScNavbarMobileTrigger, ScNavbarProvider, ScNotificationCenterDirective as ScNotificationCenter, ScNotificationCenterContainer, ScNotificationCenterDirective, ScNotificationGroup, ScNotificationItem, ScNumberField, ScNumberFieldDecrement, ScNumberFieldIncrement, ScNumberFieldInput, ScNumberFieldInputGroup, ScNumberFieldScrubArea, ScOrgChart, ScOrgChartNode, ScPasswordField, ScPasswordFieldInput, ScPasswordFieldInputGroup, ScPasswordFieldRequirements, ScPasswordFieldStrength, ScPasswordFieldStrengthBar, ScPasswordFieldToggle, ScPdfViewer, ScPdfViewerContainer, ScPdfViewerContent, ScPdfViewerDownload, ScPdfViewerEmpty, ScPdfViewerError, ScPdfViewerFullscreen, ScPdfViewerLoading, ScPdfViewerNav, ScPdfViewerNextPage, ScPdfViewerPageInfo, ScPdfViewerPrevPage, ScPdfViewerPrint, ScPdfViewerRetry, ScPdfViewerRoot, ScPdfViewerRotateLeft, ScPdfViewerRotateRight, ScPdfViewerSeparator, ScPdfViewerSpacer, ScPdfViewerToolbar$1 as ScPdfViewerToolbar, ScPdfViewerToolbar as ScPdfViewerToolbarLegacy, ScPdfViewerZoom, ScPdfViewerZoomIn, ScPdfViewerZoomOut, ScPdfViewerZoomSelect, ScPhoneInput, ScPhoneInputSimple, ScPieChart, ScQrCode, ScQrCodeDownload, ScSidebarLayout, ScSignaturePad, ScSignaturePadCanvas, ScSignaturePadClearButton, ScSignaturePadColorButton, ScSignaturePadControls, ScSignaturePadToolbar, ScSignaturePadUndoButton, ScSignaturePadWidthButton, ScSortableHandle, ScSortableItem, ScSortableList, ScSortableOverlay, ScSpeedDial, ScSpeedDialAction, ScSpotlight, ScSpotlightActions, ScSpotlightDescription, ScSpotlightTitle, ScStackedLayout, ScStatCard, ScStatCardChange, ScStatCardDescription, ScStatCardIcon, ScStatCardLabel, ScStatCardValue, ScStepper, ScStepperContent, ScStepperDescription, ScStepperItem, ScStepperList, ScStepperNext, ScStepperPrevious, ScStepperSeparator, ScStepperTitle, ScStepperTrigger, ScTagInput, ScTagInputClear, ScTagInputCount, ScTagInputField, ScTagInputTag, ScTheme, ScThemeField, ScThemeSelect, ScThemeToggle, ScTimePickerClock, ScTimeline, ScTimelineConnector, ScTimelineContent, ScTimelineDescription, ScTimelineDot, ScTimelineItem, ScTimelineTime, ScTimelineTitle, ScTimezoneBadge, ScTimezoneButton, ScTimezoneDisplay, ScTimezoneSelect, ScTimezoneService, ScTourGuide, ScTransferList, ScTree, ScTreeItem, ScTreeItemGroup, ScTreeItemIcon, ScTreeItemTrigger, ScTreeItemTriggerIcon, ScVideoPlayer, ScVideoPlayerBigPlay, ScVideoPlayerBufferingIndicator, ScVideoPlayerControls, ScVideoPlayerFullscreen, ScVideoPlayerPip, ScVideoPlayerPlayPause, ScVideoPlayerProgress, ScVideoPlayerSkip, ScVideoPlayerSpacer, ScVideoPlayerSpeed, ScVideoPlayerTime, ScVideoPlayerToolbar, ScVideoPlayerVideo, ScVideoPlayerVolume, ScVirtualList, ScVirtualScroll, TourService, ZOOM_LEVELS, computeDiff, computeWordDiff, createScDateRangePresets, createUnifiedDiff, getCountryByCode, getCountryByDialCode, sizeStyles$1 as sizeStyles, variantStyles$1 as variantStyles };
22241
+ export { AuthLayout, CHART_COLORS, COUNTRIES, DEFAULT_BREAKPOINTS, DEFAULT_CONFETTI_OPTIONS, DEFAULT_CONFIG, DEFAULT_COUNTER_OPTIONS, DEFAULT_DOCK_OPTIONS, DEFAULT_TOOLBAR_CONFIG, SC_AUDIO_PLAYER, SC_CHART, SC_COLOR_PICKER, SC_DATA_TABLE, SC_IMAGE_COMPARE, SC_IMAGE_CROPPER, SC_LANGUAGE_CONFIG, SC_LIGHTBOX, SC_NOTIFICATION_CENTER, SC_NUMBER_FIELD, SC_PASSWORD_FIELD, SC_PDF_VIEWER, SC_SIGNATURE_PAD, SC_SORTABLE_ITEM, SC_SORTABLE_LIST, SC_STEPPER, SC_STEPPER_ITEM, SC_TAG_INPUT, SC_TIMEZONE_CONFIG, SC_TREE_ITEM, ScAnimatedCounter, ScAudioPlayer, ScAudioPlayerControls, ScAudioPlayerCover, ScAudioPlayerNext, ScAudioPlayerPlay, ScAudioPlayerPrevious, ScAudioPlayerProgress, ScAudioPlayerRepeat, ScAudioPlayerShuffle, ScAudioPlayerTrackInfo, ScAudioPlayerVolume, ScAutoMarquee, ScBarChart, ScBarcodeScanner, ScBarcodeScannerSimple, ScButtonPattern, ScChartContainer, ScChartLegend, ScChartTooltip, ScColorPicker, ScColorPickerArea, ScColorPickerEyeDropper, ScColorPickerHue, ScColorPickerInput, ScColorPickerPreview, ScColorPickerSwatches, ScConfetti, ScCountdown, ScCountdownSimple, ScDataTable, ScDataTableBody, ScDataTableCell, ScDataTableColumnToggle, ScDataTableFilter, ScDataTableHead, ScDataTableHeader, ScDataTablePagination, ScDataTableRow, ScDateRangePicker, ScDiffViewer, ScDock, ScDockBadge, ScDockItem, ScDockItems, ScDonutChart, ScEmojiPicker, ScEmojiPickerTrigger, ScImageAnnotator, ScImageCompare, ScImageCompareAfter, ScImageCompareArea, ScImageCompareBefore, ScImageCompareLabel, ScImageCompareSlider, ScImageCropper, ScImageCropperAspectRatio, ScImageCropperCanvas, ScImageCropperDragRegion, ScImageCropperFileInput, ScImageCropperFlipH, ScImageCropperFlipV, ScImageCropperGrid, ScImageCropperHandle, ScImageCropperImage, ScImageCropperOverlay, ScImageCropperPreview, ScImageCropperReset, ScImageCropperRotateLeft, ScImageCropperRotateRight, ScImageCropperSelection, ScImageCropperZoomIn, ScImageCropperZoomOut, ScImageCropperZoomSlider, ScInfiniteScroll, ScInfiniteScrollEnd, ScInfiniteScrollLoader, ScKanbanBoard, ScKanbanCard, ScKanbanColumn, ScLanguageButton, ScLanguageSelect, ScLanguageService, ScLanguageToggle, ScLightboxDirective as ScLightbox, ScLightboxContainer, ScLightboxDirective, ScLightboxGallery, ScLightboxTrigger, ScLineChart, ScMarquee, ScMarqueeClone, ScMarqueeFade, ScMarqueeItem, ScMarqueeText, ScMasonryGrid, ScMasonryItem, ScMentionInput, ScNativeCheckbox, ScNativeDialog, ScNativeDialogBody, ScNativeDialogClose, ScNativeDialogContent, ScNativeDialogDescription, ScNativeDialogFooter, ScNativeDialogHeader, ScNativeDialogProvider, ScNativeDialogTitle, ScNativeDialogTrigger, ScNavbar, ScNavbarActions, ScNavbarBrand, ScNavbarGroup, ScNavbarMobileLink, ScNavbarMobileMenu, ScNavbarMobilePortal, ScNavbarMobileTrigger, ScNavbarProvider, ScNotificationCenterDirective as ScNotificationCenter, ScNotificationCenterContainer, ScNotificationCenterDirective, ScNotificationGroup, ScNotificationItem, ScNumberField, ScNumberFieldDecrement, ScNumberFieldIncrement, ScNumberFieldInput, ScNumberFieldInputGroup, ScNumberFieldScrubArea, ScOrgChart, ScOrgChartNode, ScPasswordField, ScPasswordFieldInput, ScPasswordFieldInputGroup, ScPasswordFieldRequirements, ScPasswordFieldStrength, ScPasswordFieldStrengthBar, ScPasswordFieldToggle, ScPdfViewer, ScPdfViewerContainer, ScPdfViewerContent, ScPdfViewerDownload, ScPdfViewerEmpty, ScPdfViewerError, ScPdfViewerFullscreen, ScPdfViewerLoading, ScPdfViewerNav, ScPdfViewerNextPage, ScPdfViewerPageInfo, ScPdfViewerPrevPage, ScPdfViewerPrint, ScPdfViewerRetry, ScPdfViewerRoot, ScPdfViewerRotateLeft, ScPdfViewerRotateRight, ScPdfViewerSeparator, ScPdfViewerSpacer, ScPdfViewerToolbar$1 as ScPdfViewerToolbar, ScPdfViewerToolbar as ScPdfViewerToolbarLegacy, ScPdfViewerZoom, ScPdfViewerZoomIn, ScPdfViewerZoomOut, ScPdfViewerZoomSelect, ScPhoneInput, ScPhoneInputSimple, ScPieChart, ScQrCode, ScQrCodeDownload, ScSidebarLayout, ScSignaturePad, ScSignaturePadCanvas, ScSignaturePadClearButton, ScSignaturePadColorButton, ScSignaturePadControls, ScSignaturePadToolbar, ScSignaturePadUndoButton, ScSignaturePadWidthButton, ScSortableHandle, ScSortableItem, ScSortableList, ScSortableOverlay, ScSpeedDial, ScSpeedDialAction, ScSpotlight, ScSpotlightActions, ScSpotlightDescription, ScSpotlightTitle, ScStackedLayout, ScStatCard, ScStatCardChange, ScStatCardDescription, ScStatCardIcon, ScStatCardLabel, ScStatCardValue, ScStepper, ScStepperContent, ScStepperDescription, ScStepperItem, ScStepperList, ScStepperNext, ScStepperPrevious, ScStepperSeparator, ScStepperTitle, ScStepperTrigger, ScTagInput, ScTagInputClear, ScTagInputCount, ScTagInputField, ScTagInputTag, ScTheme, ScThemeField, ScThemeSelect, ScThemeToggle, ScTimePickerClock, ScTimeline, ScTimelineConnector, ScTimelineContent, ScTimelineDescription, ScTimelineDot, ScTimelineItem, ScTimelineTime, ScTimelineTitle, ScTimezoneBadge, ScTimezoneButton, ScTimezoneDisplay, ScTimezoneSelect, ScTimezoneService, ScTourGuide, ScTransferList, ScTree, ScTreeItem, ScTreeItemGroup, ScTreeItemIcon, ScTreeItemTrigger, ScTreeItemTriggerIcon, ScVideoPlayer, ScVideoPlayerBigPlay, ScVideoPlayerBufferingIndicator, ScVideoPlayerControls, ScVideoPlayerFullscreen, ScVideoPlayerPip, ScVideoPlayerPlayPause, ScVideoPlayerProgress, ScVideoPlayerSkip, ScVideoPlayerSpacer, ScVideoPlayerSpeed, ScVideoPlayerTime, ScVideoPlayerToolbar, ScVideoPlayerVideo, ScVideoPlayerVolume, ScVirtualList, ScVirtualScroll, TourService, ZOOM_LEVELS, computeDiff, computeWordDiff, createScDateRangePresets, createUnifiedDiff, getCountryByCode, getCountryByDialCode, sizeStyles$1 as sizeStyles, variantStyles$1 as variantStyles };
22946
22242
  //# sourceMappingURL=semantic-components-ui-lab.mjs.map