@semantic-components/ui-lab 0.73.0 → 0.74.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -10,5 +10,5 @@ Experimental and extended UI components and layouts for the Semantic Components
10
10
  ## Usage
11
11
 
12
12
  ```ts
13
- import { ScAlert, ScTable, ScSidebar } from '@semantic-components/ui-lab';
13
+ import { ScAlert, ScSidebar, ScTable } from '@semantic-components/ui-lab';
14
14
  ```
@@ -567,6 +567,7 @@ class ScAudioPlayerProgress {
567
567
  <!-- Seek slider -->
568
568
  <input
569
569
  scSlider
570
+ aria-label="Seek"
570
571
  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"
571
572
  style="--muted: oklch(0 0 0 / 0.1)"
572
573
  min="0"
@@ -580,7 +581,7 @@ class ScAudioPlayerProgress {
580
581
  <span class="text-muted-foreground w-10 text-xs">
581
582
  {{ player.formatTime(player.duration()) }}
582
583
  </span>
583
- `, isInline: true, dependencies: [{ kind: "directive", type: ScSlider, selector: "input[scSlider]", inputs: ["id", "class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
584
+ `, isInline: true, dependencies: [{ kind: "directive", type: ScSlider, selector: "input[scSlider]", inputs: ["id", "class", "aria-describedby"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
584
585
  }
585
586
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ScAudioPlayerProgress, decorators: [{
586
587
  type: Component,
@@ -600,6 +601,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
600
601
  <!-- Seek slider -->
601
602
  <input
602
603
  scSlider
604
+ aria-label="Seek"
603
605
  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"
604
606
  style="--muted: oklch(0 0 0 / 0.1)"
605
607
  min="0"
@@ -820,7 +822,7 @@ class ScAudioPlayerVolume {
820
822
  >
821
823
  <svg siVolume2Icon class="pointer-events-none size-3.5"></svg>
822
824
  </button>
823
- `, 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"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
825
+ `, 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 });
824
826
  }
825
827
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ScAudioPlayerVolume, decorators: [{
826
828
  type: Component,
@@ -8915,7 +8917,7 @@ class ScImageCropperSelection {
8915
8917
  }
8916
8918
  }
8917
8919
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ScImageCropperSelection, deps: [], target: i0.ɵɵFactoryTarget.Directive });
8918
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.0", type: ScImageCropperSelection, isStandalone: true, selector: "[scImageCropperSelection]", inputs: { classInput: { classPropertyName: "classInput", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "image-cropper-selection", "tabindex": "0", "role": "slider", "aria-label": "Crop selection" }, listeners: { "keydown": "onKeyDown($event)" }, properties: { "class": "class()", "style.left.px": "cropper.cropArea().x", "style.top.px": "cropper.cropArea().y", "style.width.px": "cropper.cropArea().width", "style.height.px": "cropper.cropArea().height" } }, ngImport: i0 });
8920
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.0", type: ScImageCropperSelection, isStandalone: true, selector: "[scImageCropperSelection]", inputs: { classInput: { classPropertyName: "classInput", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "image-cropper-selection", "tabindex": "0", "role": "group", "aria-label": "Crop selection", "aria-roledescription": "crop region" }, listeners: { "keydown": "onKeyDown($event)" }, properties: { "class": "class()", "style.left.px": "cropper.cropArea().x", "style.top.px": "cropper.cropArea().y", "style.width.px": "cropper.cropArea().width", "style.height.px": "cropper.cropArea().height" } }, ngImport: i0 });
8919
8921
  }
8920
8922
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ScImageCropperSelection, decorators: [{
8921
8923
  type: Directive,
@@ -8929,8 +8931,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
8929
8931
  '[style.width.px]': 'cropper.cropArea().width',
8930
8932
  '[style.height.px]': 'cropper.cropArea().height',
8931
8933
  tabindex: '0',
8932
- role: 'slider',
8934
+ role: 'group',
8933
8935
  'aria-label': 'Crop selection',
8936
+ 'aria-roledescription': 'crop region',
8934
8937
  '(keydown)': 'onKeyDown($event)',
8935
8938
  },
8936
8939
  }]
@@ -9107,6 +9110,7 @@ class ScImageCropperZoomSlider {
9107
9110
  <input
9108
9111
  #sliderEl
9109
9112
  scSlider
9113
+ aria-label="Zoom level"
9110
9114
  [min]="0.1"
9111
9115
  [max]="3"
9112
9116
  [step]="0.1"
@@ -9116,7 +9120,7 @@ class ScImageCropperZoomSlider {
9116
9120
  <span class="text-muted-foreground min-w-[50px] text-center text-sm">
9117
9121
  {{ zoomPercentage() }}
9118
9122
  </span>
9119
- `, isInline: true, dependencies: [{ kind: "directive", type: ScSlider, selector: "input[scSlider]", inputs: ["id", "class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
9123
+ `, isInline: true, dependencies: [{ kind: "directive", type: ScSlider, selector: "input[scSlider]", inputs: ["id", "class", "aria-describedby"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
9120
9124
  }
9121
9125
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ScImageCropperZoomSlider, decorators: [{
9122
9126
  type: Component,
@@ -9127,6 +9131,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
9127
9131
  <input
9128
9132
  #sliderEl
9129
9133
  scSlider
9134
+ aria-label="Zoom level"
9130
9135
  [min]="0.1"
9131
9136
  [max]="3"
9132
9137
  [step]="0.1"
@@ -9415,30 +9420,30 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
9415
9420
  }]
9416
9421
  }] });
9417
9422
 
9418
- class ScInfiniteScrollLoader {
9419
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ScInfiniteScrollLoader, deps: [], target: i0.ɵɵFactoryTarget.Directive });
9420
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.0", type: ScInfiniteScrollLoader, isStandalone: true, selector: "[scInfiniteScrollLoader]", host: { attributes: { "data-slot": "infinite-scroll-loader" } }, ngImport: i0 });
9423
+ class ScInfiniteScrollEnd {
9424
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ScInfiniteScrollEnd, deps: [], target: i0.ɵɵFactoryTarget.Directive });
9425
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.0", type: ScInfiniteScrollEnd, isStandalone: true, selector: "[scInfiniteScrollEnd]", host: { attributes: { "data-slot": "infinite-scroll-end" } }, ngImport: i0 });
9421
9426
  }
9422
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ScInfiniteScrollLoader, decorators: [{
9427
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ScInfiniteScrollEnd, decorators: [{
9423
9428
  type: Directive,
9424
9429
  args: [{
9425
- selector: '[scInfiniteScrollLoader]',
9430
+ selector: '[scInfiniteScrollEnd]',
9426
9431
  host: {
9427
- 'data-slot': 'infinite-scroll-loader',
9432
+ 'data-slot': 'infinite-scroll-end',
9428
9433
  },
9429
9434
  }]
9430
9435
  }] });
9431
9436
 
9432
- class ScInfiniteScrollEnd {
9433
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ScInfiniteScrollEnd, deps: [], target: i0.ɵɵFactoryTarget.Directive });
9434
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.0", type: ScInfiniteScrollEnd, isStandalone: true, selector: "[scInfiniteScrollEnd]", host: { attributes: { "data-slot": "infinite-scroll-end" } }, ngImport: i0 });
9437
+ class ScInfiniteScrollLoader {
9438
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ScInfiniteScrollLoader, deps: [], target: i0.ɵɵFactoryTarget.Directive });
9439
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.0", type: ScInfiniteScrollLoader, isStandalone: true, selector: "[scInfiniteScrollLoader]", host: { attributes: { "data-slot": "infinite-scroll-loader" } }, ngImport: i0 });
9435
9440
  }
9436
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ScInfiniteScrollEnd, decorators: [{
9441
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ScInfiniteScrollLoader, decorators: [{
9437
9442
  type: Directive,
9438
9443
  args: [{
9439
- selector: '[scInfiniteScrollEnd]',
9444
+ selector: '[scInfiniteScrollLoader]',
9440
9445
  host: {
9441
- 'data-slot': 'infinite-scroll-end',
9446
+ 'data-slot': 'infinite-scroll-loader',
9442
9447
  },
9443
9448
  }]
9444
9449
  }] });
@@ -9695,6 +9700,49 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
9695
9700
  }]
9696
9701
  }], propDecorators: { classInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: false }] }], itemHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemHeight", required: false }] }], overscan: [{ type: i0.Input, args: [{ isSignal: true, alias: "overscan", required: false }] }], trackByFn: [{ type: i0.Input, args: [{ isSignal: true, alias: "trackByFn", required: false }] }] } });
9697
9702
 
9703
+ class ScOptFieldSlotCaret {
9704
+ classInput = input('', { ...(ngDevMode ? { debugName: "classInput" } : {}), alias: 'class' });
9705
+ class = computed(() => cn('pointer-events-none absolute inset-0 flex items-center justify-center', this.classInput()), ...(ngDevMode ? [{ debugName: "class" }] : []));
9706
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ScOptFieldSlotCaret, deps: [], target: i0.ɵɵFactoryTarget.Component });
9707
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.0", type: ScOptFieldSlotCaret, isStandalone: true, selector: "div[scOptFieldSlotCaret]", inputs: { classInput: { classPropertyName: "classInput", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "opt-field-slot-caret" }, properties: { "class": "class()" } }, ngImport: i0, template: `
9708
+ <div class="animate-caret-blink bg-foreground h-4 w-px"></div>
9709
+ `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
9710
+ }
9711
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ScOptFieldSlotCaret, decorators: [{
9712
+ type: Component,
9713
+ args: [{
9714
+ selector: 'div[scOptFieldSlotCaret]',
9715
+ host: {
9716
+ 'data-slot': 'opt-field-slot-caret',
9717
+ '[class]': 'class()',
9718
+ },
9719
+ template: `
9720
+ <div class="animate-caret-blink bg-foreground h-4 w-px"></div>
9721
+ `,
9722
+ encapsulation: ViewEncapsulation.None,
9723
+ changeDetection: ChangeDetectionStrategy.OnPush,
9724
+ }]
9725
+ }], propDecorators: { classInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
9726
+
9727
+ class ScOptFieldSlotChar {
9728
+ classInput = input('', { ...(ngDevMode ? { debugName: "classInput" } : {}), alias: 'class' });
9729
+ char = input('', ...(ngDevMode ? [{ debugName: "char" }] : []));
9730
+ class = computed(() => cn('pointer-events-none', this.classInput()), ...(ngDevMode ? [{ debugName: "class" }] : []));
9731
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ScOptFieldSlotChar, deps: [], target: i0.ɵɵFactoryTarget.Directive });
9732
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.0", type: ScOptFieldSlotChar, isStandalone: true, selector: "span[scOptFieldSlotChar]", inputs: { classInput: { classPropertyName: "classInput", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, char: { classPropertyName: "char", publicName: "char", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "opt-field-slot-char" }, properties: { "class": "class()", "textContent": "char()" } }, ngImport: i0 });
9733
+ }
9734
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ScOptFieldSlotChar, decorators: [{
9735
+ type: Directive,
9736
+ args: [{
9737
+ selector: 'span[scOptFieldSlotChar]',
9738
+ host: {
9739
+ 'data-slot': 'opt-field-slot-char',
9740
+ '[class]': 'class()',
9741
+ '[textContent]': 'char()',
9742
+ },
9743
+ }]
9744
+ }], propDecorators: { classInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], char: [{ type: i0.Input, args: [{ isSignal: true, alias: "char", required: false }] }] } });
9745
+
9698
9746
  class ScOptFieldSlotInput {
9699
9747
  elementRef = inject((ElementRef));
9700
9748
  classInput = input('', { ...(ngDevMode ? { debugName: "classInput" } : {}), alias: 'class' });
@@ -9742,49 +9790,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
9742
9790
  }]
9743
9791
  }], propDecorators: { classInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], inputChange: [{ type: i0.Output, args: ["inputChange"] }], keydownEvent: [{ type: i0.Output, args: ["keydownEvent"] }], focused: [{ type: i0.Output, args: ["focused"] }] } });
9744
9792
 
9745
- class ScOptFieldSlotCaret {
9746
- classInput = input('', { ...(ngDevMode ? { debugName: "classInput" } : {}), alias: 'class' });
9747
- class = computed(() => cn('pointer-events-none absolute inset-0 flex items-center justify-center', this.classInput()), ...(ngDevMode ? [{ debugName: "class" }] : []));
9748
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ScOptFieldSlotCaret, deps: [], target: i0.ɵɵFactoryTarget.Component });
9749
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.0", type: ScOptFieldSlotCaret, isStandalone: true, selector: "div[scOptFieldSlotCaret]", inputs: { classInput: { classPropertyName: "classInput", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "opt-field-slot-caret" }, properties: { "class": "class()" } }, ngImport: i0, template: `
9750
- <div class="animate-caret-blink bg-foreground h-4 w-px"></div>
9751
- `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
9752
- }
9753
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ScOptFieldSlotCaret, decorators: [{
9754
- type: Component,
9755
- args: [{
9756
- selector: 'div[scOptFieldSlotCaret]',
9757
- host: {
9758
- 'data-slot': 'opt-field-slot-caret',
9759
- '[class]': 'class()',
9760
- },
9761
- template: `
9762
- <div class="animate-caret-blink bg-foreground h-4 w-px"></div>
9763
- `,
9764
- encapsulation: ViewEncapsulation.None,
9765
- changeDetection: ChangeDetectionStrategy.OnPush,
9766
- }]
9767
- }], propDecorators: { classInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
9768
-
9769
- class ScOptFieldSlotChar {
9770
- classInput = input('', { ...(ngDevMode ? { debugName: "classInput" } : {}), alias: 'class' });
9771
- char = input('', ...(ngDevMode ? [{ debugName: "char" }] : []));
9772
- class = computed(() => cn('pointer-events-none', this.classInput()), ...(ngDevMode ? [{ debugName: "class" }] : []));
9773
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ScOptFieldSlotChar, deps: [], target: i0.ɵɵFactoryTarget.Directive });
9774
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.0", type: ScOptFieldSlotChar, isStandalone: true, selector: "span[scOptFieldSlotChar]", inputs: { classInput: { classPropertyName: "classInput", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, char: { classPropertyName: "char", publicName: "char", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "opt-field-slot-char" }, properties: { "class": "class()", "textContent": "char()" } }, ngImport: i0 });
9775
- }
9776
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ScOptFieldSlotChar, decorators: [{
9777
- type: Directive,
9778
- args: [{
9779
- selector: 'span[scOptFieldSlotChar]',
9780
- host: {
9781
- 'data-slot': 'opt-field-slot-char',
9782
- '[class]': 'class()',
9783
- '[textContent]': 'char()',
9784
- },
9785
- }]
9786
- }], propDecorators: { classInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], char: [{ type: i0.Input, args: [{ isSignal: true, alias: "char", required: false }] }] } });
9787
-
9788
9793
  class ScOptFieldSlot {
9789
9794
  optField = inject(ScOptField);
9790
9795
  inputComponent = viewChild.required(ScOptFieldSlotInput);
@@ -9900,6 +9905,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
9900
9905
  class ScOptField {
9901
9906
  elementRef = inject((ElementRef));
9902
9907
  id = input(inject(_IdGenerator).getId('sc-opt-field-'), ...(ngDevMode ? [{ debugName: "id" }] : []));
9908
+ descriptionIds = signal([], ...(ngDevMode ? [{ debugName: "descriptionIds" }] : []));
9903
9909
  role = computed(() => {
9904
9910
  const tagName = this.elementRef.nativeElement.tagName;
9905
9911
  return tagName === 'LABEL' ? null : 'group';
@@ -14054,6 +14060,7 @@ const SC_NUMBER_FIELD = new InjectionToken('SC_NUMBER_FIELD');
14054
14060
  class ScNumberField {
14055
14061
  elementRef = inject((ElementRef));
14056
14062
  id = input(inject(_IdGenerator).getId('sc-number-field-'), ...(ngDevMode ? [{ debugName: "id" }] : []));
14063
+ descriptionIds = signal([], ...(ngDevMode ? [{ debugName: "descriptionIds" }] : []));
14057
14064
  role = computed(() => {
14058
14065
  const tagName = this.elementRef.nativeElement.tagName;
14059
14066
  return tagName === 'LABEL' ? null : 'group';
@@ -14299,7 +14306,7 @@ class ScNumberFieldInput {
14299
14306
  }
14300
14307
  }
14301
14308
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ScNumberFieldInput, deps: [], target: i0.ɵɵFactoryTarget.Component });
14302
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.0", type: ScNumberFieldInput, isStandalone: true, selector: "input[scNumberFieldInput]", inputs: { classInput: { classPropertyName: "classInput", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "number-field-input", "type": "text", "inputmode": "decimal" }, listeners: { "input": "onInput($event)", "blur": "onBlur()", "keydown": "onKeydown($event)" }, properties: { "class": "class()", "value": "displayValue()", "disabled": "numberField.disabled()", "attr.aria-valuemin": "numberField.min()", "attr.aria-valuemax": "numberField.max()", "attr.aria-valuenow": "numberField.value()" } }, ngImport: i0, template: ``, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
14309
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.0", type: ScNumberFieldInput, isStandalone: true, selector: "input[scNumberFieldInput]", inputs: { classInput: { classPropertyName: "classInput", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "number-field-input", "type": "text", "inputmode": "decimal", "role": "spinbutton" }, listeners: { "input": "onInput($event)", "blur": "onBlur()", "keydown": "onKeydown($event)" }, properties: { "class": "class()", "value": "displayValue()", "disabled": "numberField.disabled()", "attr.aria-valuemin": "numberField.min()", "attr.aria-valuemax": "numberField.max()", "attr.aria-valuenow": "numberField.value()" } }, ngImport: i0, template: ``, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
14303
14310
  }
14304
14311
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ScNumberFieldInput, decorators: [{
14305
14312
  type: Component,
@@ -14310,6 +14317,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
14310
14317
  'data-slot': 'number-field-input',
14311
14318
  type: 'text',
14312
14319
  inputmode: 'decimal',
14320
+ role: 'spinbutton',
14313
14321
  '[class]': 'class()',
14314
14322
  '[value]': 'displayValue()',
14315
14323
  '[disabled]': 'numberField.disabled()',
@@ -14712,6 +14720,7 @@ const SC_PASSWORD_FIELD = new InjectionToken('SC_PASSWORD_FIELD');
14712
14720
  class ScPasswordField {
14713
14721
  elementRef = inject((ElementRef));
14714
14722
  id = input(inject(_IdGenerator).getId('sc-password-field-'), ...(ngDevMode ? [{ debugName: "id" }] : []));
14723
+ descriptionIds = signal([], ...(ngDevMode ? [{ debugName: "descriptionIds" }] : []));
14715
14724
  role = computed(() => {
14716
14725
  const tagName = this.elementRef.nativeElement.tagName;
14717
14726
  return tagName === 'LABEL' ? null : 'group';
@@ -14803,16 +14812,20 @@ class ScPasswordFieldInput {
14803
14812
  field = inject(SC_FIELD);
14804
14813
  passwordField = inject(SC_PASSWORD_FIELD);
14805
14814
  classInput = input('', { ...(ngDevMode ? { debugName: "classInput" } : {}), alias: 'class' });
14815
+ ariaDescribedByInput = input('', { ...(ngDevMode ? { debugName: "ariaDescribedByInput" } : {}), alias: 'aria-describedby' });
14806
14816
  placeholder = input('', ...(ngDevMode ? [{ debugName: "placeholder" }] : []));
14807
14817
  readonly = input(false, ...(ngDevMode ? [{ debugName: "readonly" }] : []));
14808
14818
  autocomplete = input('current-password', ...(ngDevMode ? [{ debugName: "autocomplete" }] : []));
14819
+ ariaDescribedBy = computed(() => this.ariaDescribedByInput() ||
14820
+ this.field.descriptionIds().join(' ') ||
14821
+ null, ...(ngDevMode ? [{ debugName: "ariaDescribedBy" }] : []));
14809
14822
  class = computed(() => cn('flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 pr-10 text-sm shadow-sm transition-colors', 'file:border-0 file:bg-transparent file:text-sm file:font-medium', 'placeholder:text-muted-foreground', 'focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring', 'disabled:cursor-not-allowed disabled:opacity-50', this.classInput()), ...(ngDevMode ? [{ debugName: "class" }] : []));
14810
14823
  onInput(event) {
14811
14824
  const input = event.target;
14812
14825
  this.passwordField.setValue(input.value);
14813
14826
  }
14814
14827
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ScPasswordFieldInput, deps: [], target: i0.ɵɵFactoryTarget.Component });
14815
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.0", type: ScPasswordFieldInput, isStandalone: true, selector: "input[scPasswordFieldInput]", inputs: { classInput: { classPropertyName: "classInput", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, autocomplete: { classPropertyName: "autocomplete", publicName: "autocomplete", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "password-field-input" }, listeners: { "input": "onInput($event)" }, properties: { "id": "field.id()", "type": "passwordField.visible() ? \"text\" : \"password\"", "class": "class()", "value": "passwordField.value()", "disabled": "passwordField.disabled()", "attr.aria-invalid": "passwordField.invalid()", "readonly": "readonly()", "placeholder": "placeholder()", "autocomplete": "autocomplete()" } }, ngImport: i0, template: ``, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
14828
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.0", type: ScPasswordFieldInput, isStandalone: true, selector: "input[scPasswordFieldInput]", inputs: { classInput: { classPropertyName: "classInput", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, ariaDescribedByInput: { classPropertyName: "ariaDescribedByInput", publicName: "aria-describedby", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, autocomplete: { classPropertyName: "autocomplete", publicName: "autocomplete", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-slot": "password-field-input" }, listeners: { "input": "onInput($event)" }, properties: { "id": "field.id()", "type": "passwordField.visible() ? \"text\" : \"password\"", "class": "class()", "value": "passwordField.value()", "disabled": "passwordField.disabled()", "attr.aria-invalid": "passwordField.invalid()", "attr.aria-describedby": "ariaDescribedBy()", "readonly": "readonly()", "placeholder": "placeholder()", "autocomplete": "autocomplete()" } }, ngImport: i0, template: ``, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
14816
14829
  }
14817
14830
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ScPasswordFieldInput, decorators: [{
14818
14831
  type: Component,
@@ -14827,6 +14840,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
14827
14840
  '[value]': 'passwordField.value()',
14828
14841
  '[disabled]': 'passwordField.disabled()',
14829
14842
  '[attr.aria-invalid]': 'passwordField.invalid()',
14843
+ '[attr.aria-describedby]': 'ariaDescribedBy()',
14830
14844
  '[readonly]': 'readonly()',
14831
14845
  '[placeholder]': 'placeholder()',
14832
14846
  '[autocomplete]': 'autocomplete()',
@@ -14835,7 +14849,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
14835
14849
  encapsulation: ViewEncapsulation.None,
14836
14850
  changeDetection: ChangeDetectionStrategy.OnPush,
14837
14851
  }]
14838
- }], propDecorators: { classInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], autocomplete: [{ type: i0.Input, args: [{ isSignal: true, alias: "autocomplete", required: false }] }] } });
14852
+ }], propDecorators: { classInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], ariaDescribedByInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-describedby", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], autocomplete: [{ type: i0.Input, args: [{ isSignal: true, alias: "autocomplete", required: false }] }] } });
14839
14853
 
14840
14854
  class ScPasswordFieldToggle {
14841
14855
  passwordField = inject(SC_PASSWORD_FIELD);
@@ -18364,6 +18378,7 @@ const SC_RATING_FIELD = new InjectionToken('SC_RATING_FIELD');
18364
18378
  class ScRatingField {
18365
18379
  elementRef = inject((ElementRef));
18366
18380
  id = input(inject(_IdGenerator).getId('sc-rating-field-'), ...(ngDevMode ? [{ debugName: "id" }] : []));
18381
+ descriptionIds = signal([], ...(ngDevMode ? [{ debugName: "descriptionIds" }] : []));
18367
18382
  role = computed(() => {
18368
18383
  const tagName = this.elementRef.nativeElement.tagName;
18369
18384
  return tagName === 'LABEL' ? null : 'group';
@@ -18839,6 +18854,7 @@ class ScSignaturePadCanvas {
18839
18854
  // CSS/Tailwind only sets display size, which causes stretching and poor drawing quality.
18840
18855
  width = input(400, ...(ngDevMode ? [{ debugName: "width" }] : []));
18841
18856
  height = input(200, ...(ngDevMode ? [{ debugName: "height" }] : []));
18857
+ ariaLabel = input('Signature pad', { ...(ngDevMode ? { debugName: "ariaLabel" } : {}), alias: 'aria-label' });
18842
18858
  classInput = input('', { ...(ngDevMode ? { debugName: "classInput" } : {}), alias: 'class' });
18843
18859
  // Two-way binding
18844
18860
  value = model('', ...(ngDevMode ? [{ debugName: "value" }] : []));
@@ -18982,7 +18998,7 @@ class ScSignaturePadCanvas {
18982
18998
  this.signatureChange.emit(dataURL);
18983
18999
  }
18984
19000
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ScSignaturePadCanvas, deps: [], target: i0.ɵɵFactoryTarget.Component });
18985
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.0", type: ScSignaturePadCanvas, isStandalone: true, selector: "canvas[scSignaturePadCanvas]", inputs: { width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null }, 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", signatureChange: "signatureChange", strokeEnd: "strokeEnd" }, host: { attributes: { "data-slot": "signature-pad-canvas", "role": "img" }, listeners: { "mousedown": "onPointerDown($event)", "mousemove": "onPointerMove($event)", "mouseup": "onPointerUp()", "mouseleave": "onPointerUp()", "touchstart": "onTouchStart($event)", "touchmove": "onTouchMove($event)", "touchend": "onPointerUp()" }, properties: { "class": "class()", "width": "width()", "height": "height()" } }, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
19001
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.0", type: ScSignaturePadCanvas, isStandalone: true, selector: "canvas[scSignaturePadCanvas]", inputs: { width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "aria-label", isSignal: true, isRequired: false, transformFunction: null }, 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", signatureChange: "signatureChange", strokeEnd: "strokeEnd" }, host: { attributes: { "data-slot": "signature-pad-canvas", "role": "img" }, listeners: { "mousedown": "onPointerDown($event)", "mousemove": "onPointerMove($event)", "mouseup": "onPointerUp()", "mouseleave": "onPointerUp()", "touchstart": "onTouchStart($event)", "touchmove": "onTouchMove($event)", "touchend": "onPointerUp()" }, properties: { "class": "class()", "width": "width()", "height": "height()", "attr.aria-label": "ariaLabel()" } }, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
18986
19002
  }
18987
19003
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ScSignaturePadCanvas, decorators: [{
18988
19004
  type: Component,
@@ -18995,6 +19011,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
18995
19011
  '[width]': 'width()',
18996
19012
  '[height]': 'height()',
18997
19013
  role: 'img',
19014
+ '[attr.aria-label]': 'ariaLabel()',
18998
19015
  '(mousedown)': 'onPointerDown($event)',
18999
19016
  '(mousemove)': 'onPointerMove($event)',
19000
19017
  '(mouseup)': 'onPointerUp()',
@@ -19006,7 +19023,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
19006
19023
  encapsulation: ViewEncapsulation.None,
19007
19024
  changeDetection: ChangeDetectionStrategy.OnPush,
19008
19025
  }]
19009
- }], ctorParameters: () => [], propDecorators: { width: [{ type: i0.Input, args: [{ isSignal: true, alias: "width", required: false }] }], height: [{ type: i0.Input, args: [{ isSignal: true, alias: "height", required: false }] }], 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"] }], signatureChange: [{ type: i0.Output, args: ["signatureChange"] }], strokeEnd: [{ type: i0.Output, args: ["strokeEnd"] }] } });
19026
+ }], ctorParameters: () => [], propDecorators: { width: [{ type: i0.Input, args: [{ isSignal: true, alias: "width", required: false }] }], height: [{ type: i0.Input, args: [{ isSignal: true, alias: "height", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-label", required: false }] }], 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"] }], signatureChange: [{ type: i0.Output, args: ["signatureChange"] }], strokeEnd: [{ type: i0.Output, args: ["strokeEnd"] }] } });
19010
19027
 
19011
19028
  class ScSignaturePadControls {
19012
19029
  classInput = input('', { ...(ngDevMode ? { debugName: "classInput" } : {}), alias: 'class' });
@@ -19116,8 +19133,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
19116
19133
  class ScSignaturePadColorButton {
19117
19134
  signaturePad = inject(SC_SIGNATURE_PAD);
19118
19135
  color = input.required(...(ngDevMode ? [{ debugName: "color" }] : []));
19119
- ariaLabel = input('', ...(ngDevMode ? [{ debugName: "ariaLabel" }] : []));
19136
+ ariaLabelInput = input('', { ...(ngDevMode ? { debugName: "ariaLabelInput" } : {}), alias: 'aria-label' });
19120
19137
  classInput = input('', { ...(ngDevMode ? { debugName: "classInput" } : {}), alias: 'class' });
19138
+ ariaLabel = computed(() => this.ariaLabelInput() || `Pen color ${this.color()}`, ...(ngDevMode ? [{ debugName: "ariaLabel" }] : []));
19121
19139
  isActive = computed(() => this.signaturePad.penColor() === this.color(), ...(ngDevMode ? [{ debugName: "isActive" }] : []));
19122
19140
  class = computed(() => cn('inline-flex items-center justify-center size-8 rounded-md border border-input bg-background hover:bg-accent hover:text-accent-foreground transition-colors', 'disabled:pointer-events-none disabled:opacity-50', 'data-active:border-primary data-active:bg-primary/10', this.classInput()), ...(ngDevMode ? [{ debugName: "class" }] : []));
19123
19141
  onClick() {
@@ -19126,7 +19144,7 @@ class ScSignaturePadColorButton {
19126
19144
  this.signaturePad.penColor.set(this.color());
19127
19145
  }
19128
19146
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ScSignaturePadColorButton, deps: [], target: i0.ɵɵFactoryTarget.Component });
19129
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.0", type: ScSignaturePadColorButton, isStandalone: true, selector: "button[scSignaturePadPenColor]", inputs: { color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: true, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, classInput: { classPropertyName: "classInput", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "type": "button" }, listeners: { "click": "onClick()" }, properties: { "class": "class()", "attr.aria-label": "ariaLabel()", "attr.data-active": "isActive() || null", "disabled": "signaturePad.disabled() || null" } }, ngImport: i0, template: '<ng-content />', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
19147
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.0", type: ScSignaturePadColorButton, isStandalone: true, selector: "button[scSignaturePadPenColor]", inputs: { color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: true, transformFunction: null }, ariaLabelInput: { classPropertyName: "ariaLabelInput", publicName: "aria-label", isSignal: true, isRequired: false, transformFunction: null }, classInput: { classPropertyName: "classInput", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "type": "button" }, listeners: { "click": "onClick()" }, properties: { "class": "class()", "attr.aria-label": "ariaLabel()", "attr.data-active": "isActive() || null", "disabled": "signaturePad.disabled() || null" } }, ngImport: i0, template: '<ng-content />', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
19130
19148
  }
19131
19149
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ScSignaturePadColorButton, decorators: [{
19132
19150
  type: Component,
@@ -19144,13 +19162,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
19144
19162
  encapsulation: ViewEncapsulation.None,
19145
19163
  changeDetection: ChangeDetectionStrategy.OnPush,
19146
19164
  }]
19147
- }], propDecorators: { color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: true }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], classInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
19165
+ }], propDecorators: { color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: true }] }], ariaLabelInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-label", required: false }] }], classInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
19148
19166
 
19149
19167
  class ScSignaturePadWidthButton {
19150
19168
  signaturePad = inject(SC_SIGNATURE_PAD);
19151
19169
  width = input.required(...(ngDevMode ? [{ debugName: "width" }] : []));
19152
- ariaLabel = input('', ...(ngDevMode ? [{ debugName: "ariaLabel" }] : []));
19170
+ ariaLabelInput = input('', { ...(ngDevMode ? { debugName: "ariaLabelInput" } : {}), alias: 'aria-label' });
19153
19171
  classInput = input('', { ...(ngDevMode ? { debugName: "classInput" } : {}), alias: 'class' });
19172
+ ariaLabel = computed(() => this.ariaLabelInput() || `Pen width ${this.width()}`, ...(ngDevMode ? [{ debugName: "ariaLabel" }] : []));
19154
19173
  isActive = computed(() => this.signaturePad.penWidth() === this.width(), ...(ngDevMode ? [{ debugName: "isActive" }] : []));
19155
19174
  class = computed(() => cn('inline-flex items-center justify-center size-8 rounded-md border border-input bg-background hover:bg-accent hover:text-accent-foreground transition-colors', 'disabled:pointer-events-none disabled:opacity-50', 'data-active:border-primary data-active:bg-primary/10', this.classInput()), ...(ngDevMode ? [{ debugName: "class" }] : []));
19156
19175
  onClick() {
@@ -19159,7 +19178,7 @@ class ScSignaturePadWidthButton {
19159
19178
  this.signaturePad.penWidth.set(this.width());
19160
19179
  }
19161
19180
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ScSignaturePadWidthButton, deps: [], target: i0.ɵɵFactoryTarget.Component });
19162
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.0", type: ScSignaturePadWidthButton, isStandalone: true, selector: "button[scSignaturePadPenWidth]", inputs: { width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: true, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, classInput: { classPropertyName: "classInput", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "type": "button" }, listeners: { "click": "onClick()" }, properties: { "class": "class()", "attr.aria-label": "ariaLabel()", "attr.data-active": "isActive() || null", "disabled": "signaturePad.disabled() || null" } }, ngImport: i0, template: '<ng-content />', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
19181
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.0", type: ScSignaturePadWidthButton, isStandalone: true, selector: "button[scSignaturePadPenWidth]", inputs: { width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: true, transformFunction: null }, ariaLabelInput: { classPropertyName: "ariaLabelInput", publicName: "aria-label", isSignal: true, isRequired: false, transformFunction: null }, classInput: { classPropertyName: "classInput", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "type": "button" }, listeners: { "click": "onClick()" }, properties: { "class": "class()", "attr.aria-label": "ariaLabel()", "attr.data-active": "isActive() || null", "disabled": "signaturePad.disabled() || null" } }, ngImport: i0, template: '<ng-content />', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
19163
19182
  }
19164
19183
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ScSignaturePadWidthButton, decorators: [{
19165
19184
  type: Component,
@@ -19177,7 +19196,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
19177
19196
  encapsulation: ViewEncapsulation.None,
19178
19197
  changeDetection: ChangeDetectionStrategy.OnPush,
19179
19198
  }]
19180
- }], propDecorators: { width: [{ type: i0.Input, args: [{ isSignal: true, alias: "width", required: true }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], classInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
19199
+ }], propDecorators: { width: [{ type: i0.Input, args: [{ isSignal: true, alias: "width", required: true }] }], ariaLabelInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-label", required: false }] }], classInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
19181
19200
 
19182
19201
  // Token for sortable list context
19183
19202
  const SC_SORTABLE_LIST = new InjectionToken('SC_SORTABLE_LIST');
@@ -21082,6 +21101,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
21082
21101
  class ScThemeField {
21083
21102
  elementRef = inject((ElementRef));
21084
21103
  id = input(inject(_IdGenerator).getId('sc-theme-field-'), ...(ngDevMode ? [{ debugName: "id" }] : []));
21104
+ descriptionIds = signal([], ...(ngDevMode ? [{ debugName: "descriptionIds" }] : []));
21085
21105
  classInput = input('', { ...(ngDevMode ? { debugName: "classInput" } : {}), alias: 'class' });
21086
21106
  role = computed(() => {
21087
21107
  const tagName = this.elementRef.nativeElement.tagName;
@@ -23590,6 +23610,7 @@ class ScVideoPlayerProgress {
23590
23610
  <input
23591
23611
  scSlider
23592
23612
  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"
23613
+ aria-label="Video progress"
23593
23614
  min="0"
23594
23615
  max="100"
23595
23616
  step="0.1"
@@ -23597,7 +23618,7 @@ class ScVideoPlayerProgress {
23597
23618
  [style.--fill-percent]="player.progressPercent() + '%'"
23598
23619
  (input)="onSeek($event)"
23599
23620
  />
23600
- `, isInline: true, dependencies: [{ kind: "directive", type: ScSlider, selector: "input[scSlider]", inputs: ["id", "class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
23621
+ `, isInline: true, dependencies: [{ kind: "directive", type: ScSlider, selector: "input[scSlider]", inputs: ["id", "class", "aria-describedby"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
23601
23622
  }
23602
23623
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ScVideoPlayerProgress, decorators: [{
23603
23624
  type: Component,
@@ -23614,6 +23635,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
23614
23635
  <input
23615
23636
  scSlider
23616
23637
  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"
23638
+ aria-label="Video progress"
23617
23639
  min="0"
23618
23640
  max="100"
23619
23641
  step="0.1"
@@ -23663,7 +23685,7 @@ class ScVideoPlayerVolume {
23663
23685
  (input)="onVolumeInput($event)"
23664
23686
  aria-label="Volume"
23665
23687
  />
23666
- `, isInline: true, dependencies: [{ kind: "directive", type: ScSlider, selector: "input[scSlider]", inputs: ["id", "class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
23688
+ `, isInline: true, dependencies: [{ kind: "directive", type: ScSlider, selector: "input[scSlider]", inputs: ["id", "class", "aria-describedby"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
23667
23689
  }
23668
23690
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ScVideoPlayerVolume, decorators: [{
23669
23691
  type: Component,