@semantic-components/ui 0.12.0 → 0.13.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.
Files changed (70) hide show
  1. package/fesm2022/semantic-components-ui.mjs +1885 -778
  2. package/fesm2022/semantic-components-ui.mjs.map +1 -1
  3. package/index.d.ts +8 -1
  4. package/lib/components/autocomplete/autocomplete-item.d.ts +2 -2
  5. package/lib/components/button/button.d.ts +6 -5
  6. package/lib/components/checkbox/checkbox.d.ts +1 -1
  7. package/lib/components/cookie-consent/cookie-consent.d.ts +10 -0
  8. package/lib/components/cookie-consent/index.d.ts +1 -0
  9. package/lib/components/editor/actions/editor-redo.d.ts +12 -0
  10. package/lib/components/editor/actions/editor-text-align-center.d.ts +12 -0
  11. package/lib/components/editor/actions/editor-text-align-left.d.ts +12 -0
  12. package/lib/components/editor/actions/editor-text-align-right.d.ts +12 -0
  13. package/lib/components/editor/actions/editor-undo.d.ts +12 -0
  14. package/lib/components/editor/actions/editor-unset-link.d.ts +14 -0
  15. package/lib/components/editor/editor-group.d.ts +7 -0
  16. package/lib/components/editor/editor-toolbar.d.ts +7 -0
  17. package/lib/components/editor/extensions/extension-link.d.ts +0 -1
  18. package/lib/components/editor/extensions/extensions.d.ts +10 -3
  19. package/lib/components/file-upload/drop-zone.d.ts +11 -0
  20. package/lib/components/file-upload/file-card.d.ts +12 -0
  21. package/lib/components/file-upload/file-preview.d.ts +7 -0
  22. package/lib/components/file-upload/file-upload.d.ts +9 -0
  23. package/lib/components/file-upload/file-uploader.d.ts +16 -0
  24. package/lib/components/file-upload/file.d.ts +4 -0
  25. package/lib/components/file-upload/image.d.ts +7 -0
  26. package/lib/components/file-upload/index.d.ts +3 -0
  27. package/lib/components/file-upload/single-file-uploader.d.ts +18 -0
  28. package/lib/components/file-upload/utils.d.ts +4 -0
  29. package/lib/components/input/input.d.ts +3 -3
  30. package/lib/components/menu/menu-checkbox-item.d.ts +1 -1
  31. package/lib/components/menu/menu-group.d.ts +2 -2
  32. package/lib/components/page/index.d.ts +4 -0
  33. package/lib/components/page/page-description.d.ts +7 -0
  34. package/lib/components/page/page-subtitle.d.ts +7 -0
  35. package/lib/components/page/page-title.d.ts +7 -0
  36. package/lib/components/page/section.d.ts +5 -0
  37. package/lib/components/popover/popover-trigger-for.d.ts +3 -3
  38. package/lib/components/radio-group/radio-item.d.ts +15 -17
  39. package/lib/components/scroll-area/scroll-area.d.ts +4 -6
  40. package/lib/components/select/option.d.ts +23 -3
  41. package/lib/components/select/select-state.d.ts +7 -0
  42. package/lib/components/select/select.d.ts +22 -7
  43. package/lib/components/separator/index.d.ts +1 -0
  44. package/lib/components/separator/separator.d.ts +8 -0
  45. package/lib/components/slider/slider.d.ts +1 -1
  46. package/lib/components/tab-group/index.d.ts +4 -0
  47. package/lib/components/tab-group/tab-content.d.ts +7 -0
  48. package/lib/components/tab-group/tab-group.d.ts +11 -0
  49. package/lib/components/tab-group/tab-item.d.ts +5 -0
  50. package/lib/components/tab-group/tab-label.d.ts +7 -0
  51. package/lib/components/time-picker/time-picker.d.ts +5 -1
  52. package/lib/components/toggle-group/index.d.ts +2 -0
  53. package/lib/components/toggle-group/toggle-group-item.d.ts +5 -0
  54. package/lib/components/toggle-group/toggle-group.d.ts +8 -0
  55. package/lib/components/typography/blockquote.d.ts +5 -0
  56. package/lib/components/typography/heading.d.ts +4 -4
  57. package/lib/components/typography/index.d.ts +1 -0
  58. package/lib/utils/index.d.ts +0 -1
  59. package/lib/utils/settings.d.ts +1 -0
  60. package/package.json +5 -6
  61. package/lib/components/editor/extensions/extension-history.d.ts +0 -14
  62. package/lib/components/editor/extensions/extension-text-align.d.ts +0 -16
  63. package/lib/components/editor/toolbar/extensions-group.d.ts +0 -5
  64. package/lib/components/editor/toolbar/extensions-separator.d.ts +0 -7
  65. package/lib/components/select/listbox-option.d.ts +0 -8
  66. package/lib/components/select/listbox.d.ts +0 -7
  67. package/lib/utils/css.d.ts +0 -2
  68. /package/lib/components/{menubar → menu-bar}/index.d.ts +0 -0
  69. /package/lib/components/{menubar → menu-bar}/menu-bar-item.d.ts +0 -0
  70. /package/lib/components/{menubar → menu-bar}/menu-bar.d.ts +0 -0
@@ -1,44 +1,38 @@
1
- import { clsx } from 'clsx';
2
- import { twMerge } from 'tailwind-merge';
3
1
  import * as i0 from '@angular/core';
4
- import { signal, inject, LOCALE_ID, Injectable, input, computed, Component, ViewEncapsulation, ChangeDetectionStrategy, ElementRef, Directive, HostListener, ChangeDetectorRef, viewChild, afterNextRender, forwardRef, ViewContainerRef, contentChildren, model, output, effect, linkedSignal, Injector, booleanAttribute, untracked, viewChildren } from '@angular/core';
2
+ import { signal, inject, LOCALE_ID, Injectable, input, computed, Component, ViewEncapsulation, ChangeDetectionStrategy, ElementRef, Directive, HostListener, ChangeDetectorRef, viewChild, afterNextRender, forwardRef, booleanAttribute, ViewContainerRef, contentChildren, effect, Injector, model, untracked, output, linkedSignal, viewChildren } from '@angular/core';
5
3
  import * as i1 from '@angular/forms';
6
4
  import { FormGroup, FormControl, Validators, ReactiveFormsModule, NG_VALUE_ACCESSOR, FormArray, NgForm, FormGroupDirective, NgControl, FormBuilder, FormsModule } from '@angular/forms';
5
+ import { cn } from '@semantic-components/utils';
7
6
  import { Editor } from '@tiptap/core';
8
7
  import Document from '@tiptap/extension-document';
9
8
  import Heading from '@tiptap/extension-heading';
10
9
  import Paragraph from '@tiptap/extension-paragraph';
11
10
  import Text from '@tiptap/extension-text';
12
11
  import { cva } from 'class-variance-authority';
13
- import { SvgQuoteIcon, SvgBoldIcon, SvgListIcon, SvgCodeIcon, SvgPaletteIcon, SvgHighlighterIcon, SvgUndoIcon, SvgRedoIcon, SvgMinusIcon, SvgItalicIcon, SvgListOrderedIcon, SvgStrikethroughIcon, SvgAlignLeftIcon, SvgAlignRightIcon, SvgAlignCenterIcon, SvgUnderlineIcon, SvgCheckIcon, SvgChevronDownIcon, SvgEllipsisIcon, SvgChevronLeftIcon, SvgChevronsLeftIcon, SvgChevronRightIcon, SvgChevronsRightIcon, SvgCalendarIcon, SvgMoonIcon, SvgSunIcon, SvgXIcon, SvgChevronUpIcon, SvgCircleIcon, SvgDotIcon, SvgSearchIcon, SvgClockIcon } from '@semantic-icons/lucide-icons';
14
- import { Overlay, OverlayModule, OverlayContainer, OverlayConfig } from '@angular/cdk/overlay';
12
+ import { SvgRedoIcon, SvgAlignCenterIcon, SvgAlignLeftIcon, SvgAlignRightIcon, SvgUndoIcon, SvgUnlinkIcon, SvgQuoteIcon, SvgBoldIcon, SvgListIcon, SvgCodeIcon, SvgPaletteIcon, SvgHighlighterIcon, SvgMinusIcon, SvgItalicIcon, SvgListOrderedIcon, SvgStrikethroughIcon, SvgUnderlineIcon, SvgCheckIcon, SvgChevronDownIcon, SvgEllipsisIcon, SvgChevronLeftIcon, SvgChevronsLeftIcon, SvgChevronRightIcon, SvgChevronsRightIcon, SvgCalendarIcon, SvgMoonIcon, SvgSunIcon, SvgXIcon, SvgChevronUpIcon, SvgCircleIcon, SvgDotIcon, SvgSearchIcon, SvgClockIcon, SvgFileTextIcon, SvgUploadIcon, SvgCookieIcon } from '@semantic-icons/lucide-icons';
13
+ import { Overlay, OverlayContainer, OverlayConfig } from '@angular/cdk/overlay';
15
14
  import { ComponentPortal, TemplatePortal } from '@angular/cdk/portal';
16
- import * as i1$5 from '@angular/cdk/menu';
15
+ import { Dialog, DialogRef, DialogModule } from '@angular/cdk/dialog';
16
+ import * as i1$3 from '@angular/cdk/menu';
17
17
  import { CdkMenuTrigger, CdkMenu, CdkMenuItem, CdkContextMenuTrigger, CdkMenuItemCheckbox, CdkMenuGroup, CdkMenuItemRadio, CdkMenuBar } from '@angular/cdk/menu';
18
- import { DialogRef, Dialog, DialogModule } from '@angular/cdk/dialog';
19
- import * as i1$1 from '@angular/cdk/a11y';
20
- import { A11yModule, FocusMonitor, ActiveDescendantKeyManager, _IdGenerator } from '@angular/cdk/a11y';
18
+ import { _IdGenerator, ActiveDescendantKeyManager, FocusMonitor } from '@angular/cdk/a11y';
21
19
  import { Directionality } from '@angular/cdk/bidi';
22
- import { TAB, ESCAPE, hasModifierKey, ENTER } from '@angular/cdk/keycodes';
23
- import { CdkOption, CdkListbox } from '@angular/cdk/listbox';
20
+ import { hasModifierKey, ENTER, TAB, ESCAPE } from '@angular/cdk/keycodes';
24
21
  import { _getEventTarget } from '@angular/cdk/platform';
25
- import * as i1$3 from '@angular/common';
26
- import { NgClass, DOCUMENT, NgTemplateOutlet, CommonModule, AsyncPipe, JsonPipe, NgOptimizedImage } from '@angular/common';
27
- import * as i1$2 from 'ngx-scrollbar';
28
- import { NgScrollbarModule } from 'ngx-scrollbar';
22
+ import * as i1$1 from '@angular/common';
23
+ import { NgClass, DOCUMENT, NgTemplateOutlet, CommonModule, AsyncPipe, JsonPipe } from '@angular/common';
29
24
  import EmblaCarousel from 'embla-carousel';
30
25
  import { coerceBooleanProperty } from '@angular/cdk/coercion';
31
- import * as i1$4 from '@angular/cdk/accordion';
26
+ import * as i1$2 from '@angular/cdk/accordion';
32
27
  import { CdkAccordionModule } from '@angular/cdk/accordion';
33
28
  import { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';
34
- import { Subject, debounceTime } from 'rxjs';
29
+ import { Subject, debounceTime, catchError, throwError } from 'rxjs';
35
30
  import { BreakpointObserver, LayoutModule } from '@angular/cdk/layout';
36
-
37
- function cn(...inputs) {
38
- return twMerge(clsx(inputs));
39
- }
31
+ import { HttpEventType, HttpResponse } from '@angular/common/http';
32
+ import { DataService } from '@semantic-components/supabase';
40
33
 
41
34
  class ScSettings {
35
+ clock = signal('am-pm');
42
36
  dateFormatPattern = signal('');
43
37
  localeId = inject(LOCALE_ID);
44
38
  constructor() {
@@ -75,27 +69,47 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
75
69
  }]
76
70
  }], ctorParameters: () => [] });
77
71
 
72
+ class ScSeparator {
73
+ orientation = input('horizontal');
74
+ class = input('');
75
+ _class = computed(() => cn('block shrink-0 bg-border', this.orientation() === 'horizontal' ? 'h-[1px] w-full' : 'h-full w-[1px]', this.class()));
76
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScSeparator, deps: [], target: i0.ɵɵFactoryTarget.Component });
77
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.5", type: ScSeparator, isStandalone: true, selector: "sc-separator", inputs: { orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null }, class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "_class()" } }, ngImport: i0, template: `
78
+ <ng-content />
79
+ `, isInline: true, styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
80
+ }
81
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScSeparator, decorators: [{
82
+ type: Component,
83
+ args: [{ selector: 'sc-separator', imports: [], template: `
84
+ <ng-content />
85
+ `, host: {
86
+ '[class]': '_class()',
87
+ }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush }]
88
+ }] });
89
+
78
90
  const scHeadingVariants = cva('', {
79
91
  variants: {
80
92
  level: {
81
- 1: 'text-4xl font-extrabold tracking-tight lg:text-5xl',
82
- 2: 'text-3xl font-semibold tracking-tight',
83
- 3: 'text-2xl font-semibold tracking-tight',
84
- 4: 'text-xl font-semibold tracking-tight',
85
- 5: '',
86
- 6: '',
93
+ '1': 'scroll-m-20 text-4xl font-extrabold tracking-tight lg:text-5xl',
94
+ '2': 'scroll-m-20 border-b pb-2 text-3xl font-semibold tracking-tight first:mt-0',
95
+ '3': 'scroll-m-20 text-2xl font-semibold tracking-tight',
96
+ '4': 'scroll-m-20 text-xl font-semibold tracking-tight',
97
+ '5': '',
98
+ '6': '',
87
99
  },
88
100
  },
89
101
  defaultVariants: {
90
- level: 1,
102
+ level: '1',
91
103
  },
92
104
  });
93
105
  class ScHeading {
94
- level = input(1);
95
- class = input('');
96
- classes = computed(() => cn(scHeadingVariants({ level: this.level() }), this.class()));
106
+ level = input('1');
107
+ classInput = input('', {
108
+ alias: 'class',
109
+ });
110
+ class = computed(() => cn(scHeadingVariants({ level: this.level() }), this.classInput()));
97
111
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScHeading, deps: [], target: i0.ɵɵFactoryTarget.Component });
98
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.5", type: ScHeading, isStandalone: true, selector: "h1[sc-heading], h2[sc-heading], h3[sc-heading], h4[sc-heading], h5[sc-heading], h6[sc-heading]", inputs: { level: { classPropertyName: "level", publicName: "level", isSignal: true, isRequired: false, transformFunction: null }, class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, ngImport: i0, template: `
112
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.5", type: ScHeading, isStandalone: true, selector: "h1[sc-heading], h2[sc-heading], h3[sc-heading], h4[sc-heading], h5[sc-heading], h6[sc-heading]", inputs: { level: { classPropertyName: "level", publicName: "level", isSignal: true, isRequired: false, transformFunction: null }, classInput: { classPropertyName: "classInput", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "class()" } }, ngImport: i0, template: `
99
113
  <ng-content />
100
114
  `, isInline: true, styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
101
115
  }
@@ -104,7 +118,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
104
118
  args: [{ selector: 'h1[sc-heading], h2[sc-heading], h3[sc-heading], h4[sc-heading], h5[sc-heading], h6[sc-heading]', imports: [], template: `
105
119
  <ng-content />
106
120
  `, host: {
107
- '[class]': 'classes()',
121
+ '[class]': 'class()',
108
122
  }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush }]
109
123
  }] });
110
124
 
@@ -126,7 +140,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
126
140
  }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush }]
127
141
  }] });
128
142
 
129
- const toggleVariants = cva('inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium ring-offset-background transition-colors hover:bg-muted hover:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_.svg]:pointer-events-none [&_.svg]:size-4 [&_.svg]:shrink-0', {
143
+ class ScBlockquote {
144
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScBlockquote, deps: [], target: i0.ɵɵFactoryTarget.Component });
145
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: ScBlockquote, isStandalone: true, selector: "blockquote[sc-blockquote]", host: { properties: { "class": "classes()" } }, ngImport: i0, template: `
146
+ <ng-content />
147
+ `, isInline: true, styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
148
+ }
149
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScBlockquote, decorators: [{
150
+ type: Component,
151
+ args: [{ selector: 'blockquote[sc-blockquote]', imports: [], template: `
152
+ <ng-content />
153
+ `, host: {
154
+ '[class]': 'classes()',
155
+ }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush }]
156
+ }] });
157
+
158
+ const toggleVariants = cva('inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium ring-offset-background transition-colors hover:bg-muted hover:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0', {
130
159
  variants: {
131
160
  variant: {
132
161
  default: 'bg-transparent',
@@ -298,11 +327,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
298
327
  }] } });
299
328
 
300
329
  class ScExtensions {
330
+ //history extension
331
+ undo = signal(false);
332
+ redo = signal(false);
333
+ history = computed(() => this.undo() || this.redo());
334
+ //link extension
335
+ setLink = signal(false);
336
+ unsetLink = signal(false);
337
+ link = computed(() => this.setLink() || this.unsetLink());
338
+ //text align extension
339
+ textAlignRight = signal(false);
340
+ textAlignLeft = signal(false);
341
+ textAlignCenter = signal(false);
342
+ textAlign = computed(() => this.textAlignRight() || this.textAlignLeft() || this.textAlignCenter());
343
+ //
301
344
  highlight = signal(false);
302
345
  color = signal(false);
303
346
  underline = signal(false);
304
- link = signal(false);
305
- textAlign = signal(false);
306
347
  fontFamily = signal(false);
307
348
  bold = signal(false);
308
349
  youtube = signal(false);
@@ -315,7 +356,6 @@ class ScExtensions {
315
356
  orderedList = signal(false);
316
357
  horizontalRule = signal(false);
317
358
  textStyle = signal(false);
318
- history = signal(false);
319
359
  table = signal(false);
320
360
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScExtensions, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
321
361
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScExtensions, providedIn: 'root' });
@@ -327,270 +367,577 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
327
367
  }]
328
368
  }] });
329
369
 
330
- class ScExtensionBlockquote {
331
- ariaLabel = 'Toggle blockquote';
370
+ class ScEditorRedo {
371
+ ariaLabel = 'Redo';
332
372
  parent = inject(ScEditor, { host: true });
333
373
  extensions = inject(ScExtensions);
334
374
  constructor() {
335
- this.extensions.blockquote.set(true);
375
+ this.extensions.redo.set(true);
336
376
  }
337
377
  get editor() {
338
378
  return this.parent.editor;
339
379
  }
340
- toggleBlockquote() {
341
- this.editor.chain().focus().toggleBlockquote().run();
380
+ redo() {
381
+ this.editor.chain().focus().redo().run();
342
382
  }
343
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScExtensionBlockquote, deps: [], target: i0.ɵɵFactoryTarget.Component });
344
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: ScExtensionBlockquote, isStandalone: true, selector: "sc-extension-blockquote", ngImport: i0, template: `
383
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScEditorRedo, deps: [], target: i0.ɵɵFactoryTarget.Component });
384
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: ScEditorRedo, isStandalone: true, selector: "sc-editor-redo", ngImport: i0, template: `
345
385
  <button
346
386
  [attr.aria-label]="ariaLabel"
347
387
  [scTooltip]="ariaLabel"
348
- (click)="toggleBlockquote()"
388
+ (click)="redo()"
349
389
  sc-toggle
350
390
  variant="outline"
351
391
  type="button"
352
392
  >
353
- <svg-quote-icon />
393
+ <svg-redo-icon />
354
394
  <span class="sr-only">{{ ariaLabel }}</span>
355
395
  </button>
356
- `, isInline: true, styles: [""], dependencies: [{ kind: "directive", type: ScTooltip, selector: "[scTooltip]", inputs: ["scTooltip", "position"] }, { kind: "component", type: ScToggle, selector: "button[sc-toggle]", inputs: ["variant", "size", "class"] }, { kind: "component", type: SvgQuoteIcon, selector: "svg-quote-icon", inputs: ["class", "svgClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
396
+ `, isInline: true, styles: [""], dependencies: [{ kind: "directive", type: ScTooltip, selector: "[scTooltip]", inputs: ["scTooltip", "position"] }, { kind: "component", type: ScToggle, selector: "button[sc-toggle]", inputs: ["variant", "size", "class"] }, { kind: "component", type: SvgRedoIcon, selector: "svg-redo-icon", inputs: ["class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
357
397
  }
358
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScExtensionBlockquote, decorators: [{
398
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScEditorRedo, decorators: [{
359
399
  type: Component,
360
- args: [{ selector: 'sc-extension-blockquote', imports: [ScTooltip, ScToggle, SvgQuoteIcon], template: `
400
+ args: [{ selector: 'sc-editor-redo', imports: [ScTooltip, ScToggle, SvgRedoIcon], template: `
361
401
  <button
362
402
  [attr.aria-label]="ariaLabel"
363
403
  [scTooltip]="ariaLabel"
364
- (click)="toggleBlockquote()"
404
+ (click)="redo()"
365
405
  sc-toggle
366
406
  variant="outline"
367
407
  type="button"
368
408
  >
369
- <svg-quote-icon />
409
+ <svg-redo-icon />
370
410
  <span class="sr-only">{{ ariaLabel }}</span>
371
411
  </button>
372
412
  `, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush }]
373
413
  }], ctorParameters: () => [] });
374
414
 
375
- class ScExtensionBold {
376
- ariaLabel = 'Toggle Bold';
415
+ class ScEditorTextAlignCenter {
416
+ ariaLabel = 'Align center';
377
417
  parent = inject(ScEditor, { host: true });
378
418
  extensions = inject(ScExtensions);
379
419
  constructor() {
380
- this.extensions.bold.set(true);
420
+ this.extensions.textAlignCenter.set(true);
381
421
  }
382
422
  get editor() {
383
423
  return this.parent.editor;
384
424
  }
385
- toggleBold() {
386
- this.editor.chain().focus().toggleBold().run();
425
+ setCenterAlign() {
426
+ this.editor.chain().focus().setTextAlign('center').run();
387
427
  }
388
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScExtensionBold, deps: [], target: i0.ɵɵFactoryTarget.Component });
389
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: ScExtensionBold, isStandalone: true, selector: "sc-extension-bold", ngImport: i0, template: `
428
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScEditorTextAlignCenter, deps: [], target: i0.ɵɵFactoryTarget.Component });
429
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: ScEditorTextAlignCenter, isStandalone: true, selector: "sc-editor-text-align-center", ngImport: i0, template: `
390
430
  <button
391
431
  [attr.aria-label]="ariaLabel"
392
432
  [scTooltip]="ariaLabel"
393
- (click)="toggleBold()"
433
+ (click)="setCenterAlign()"
434
+ type="button"
435
+ sc-toggle
436
+ variant="outline"
437
+ >
438
+ <svg-align-center-icon />
439
+ <span class="sr-only">{{ ariaLabel }}</span>
440
+ </button>
441
+ `, isInline: true, styles: [""], dependencies: [{ kind: "directive", type: ScTooltip, selector: "[scTooltip]", inputs: ["scTooltip", "position"] }, { kind: "component", type: SvgAlignCenterIcon, selector: "svg-align-center-icon", inputs: ["class"] }, { kind: "component", type: ScToggle, selector: "button[sc-toggle]", inputs: ["variant", "size", "class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
442
+ }
443
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScEditorTextAlignCenter, decorators: [{
444
+ type: Component,
445
+ args: [{ selector: 'sc-editor-text-align-center', imports: [ScTooltip, SvgAlignCenterIcon, ScToggle], template: `
446
+ <button
447
+ [attr.aria-label]="ariaLabel"
448
+ [scTooltip]="ariaLabel"
449
+ (click)="setCenterAlign()"
450
+ type="button"
394
451
  sc-toggle
395
452
  variant="outline"
453
+ >
454
+ <svg-align-center-icon />
455
+ <span class="sr-only">{{ ariaLabel }}</span>
456
+ </button>
457
+ `, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush }]
458
+ }], ctorParameters: () => [] });
459
+
460
+ class ScEditorTextAlignLeft {
461
+ ariaLabel = 'Align left';
462
+ parent = inject(ScEditor, { host: true });
463
+ extensions = inject(ScExtensions);
464
+ constructor() {
465
+ this.extensions.textAlignLeft.set(true);
466
+ }
467
+ get editor() {
468
+ return this.parent.editor;
469
+ }
470
+ setLeftAlign() {
471
+ this.editor.chain().focus().setTextAlign('left').run();
472
+ }
473
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScEditorTextAlignLeft, deps: [], target: i0.ɵɵFactoryTarget.Component });
474
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: ScEditorTextAlignLeft, isStandalone: true, selector: "sc-editor-text-align-left", ngImport: i0, template: `
475
+ <button
476
+ [attr.aria-label]="ariaLabel"
477
+ [scTooltip]="ariaLabel"
478
+ (click)="setLeftAlign()"
396
479
  type="button"
480
+ sc-toggle
481
+ variant="outline"
397
482
  >
398
- <svg-bold-icon />
483
+ <svg-align-left-icon />
399
484
  <span class="sr-only">{{ ariaLabel }}</span>
400
485
  </button>
401
- `, isInline: true, styles: [""], dependencies: [{ kind: "directive", type: ScTooltip, selector: "[scTooltip]", inputs: ["scTooltip", "position"] }, { kind: "component", type: ScToggle, selector: "button[sc-toggle]", inputs: ["variant", "size", "class"] }, { kind: "component", type: SvgBoldIcon, selector: "svg-bold-icon", inputs: ["class", "svgClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
486
+ `, isInline: true, styles: [""], dependencies: [{ kind: "directive", type: ScTooltip, selector: "[scTooltip]", inputs: ["scTooltip", "position"] }, { kind: "component", type: SvgAlignLeftIcon, selector: "svg-align-left-icon", inputs: ["class"] }, { kind: "component", type: ScToggle, selector: "button[sc-toggle]", inputs: ["variant", "size", "class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
402
487
  }
403
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScExtensionBold, decorators: [{
488
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScEditorTextAlignLeft, decorators: [{
404
489
  type: Component,
405
- args: [{ selector: 'sc-extension-bold', imports: [ScTooltip, ScToggle, SvgBoldIcon], template: `
490
+ args: [{ selector: 'sc-editor-text-align-left', imports: [ScTooltip, SvgAlignLeftIcon, ScToggle], template: `
406
491
  <button
407
492
  [attr.aria-label]="ariaLabel"
408
493
  [scTooltip]="ariaLabel"
409
- (click)="toggleBold()"
494
+ (click)="setLeftAlign()"
495
+ type="button"
410
496
  sc-toggle
411
497
  variant="outline"
498
+ >
499
+ <svg-align-left-icon />
500
+ <span class="sr-only">{{ ariaLabel }}</span>
501
+ </button>
502
+ `, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush }]
503
+ }], ctorParameters: () => [] });
504
+
505
+ class ScEditorTextAlignRight {
506
+ ariaLabel = 'Align right';
507
+ parent = inject(ScEditor, { host: true });
508
+ extensions = inject(ScExtensions);
509
+ constructor() {
510
+ this.extensions.textAlignRight.set(true);
511
+ }
512
+ get editor() {
513
+ return this.parent.editor;
514
+ }
515
+ setRightAlign() {
516
+ this.editor.chain().focus().setTextAlign('right').run();
517
+ }
518
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScEditorTextAlignRight, deps: [], target: i0.ɵɵFactoryTarget.Component });
519
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: ScEditorTextAlignRight, isStandalone: true, selector: "sc-editor-text-align-right", ngImport: i0, template: `
520
+ <button
521
+ [attr.aria-label]="ariaLabel"
522
+ [scTooltip]="ariaLabel"
523
+ (click)="setRightAlign()"
412
524
  type="button"
525
+ sc-toggle
526
+ variant="outline"
413
527
  >
414
- <svg-bold-icon />
528
+ <svg-align-right-icon />
529
+ <span class="sr-only">{{ ariaLabel }}</span>
530
+ </button>
531
+ `, isInline: true, styles: [""], dependencies: [{ kind: "directive", type: ScTooltip, selector: "[scTooltip]", inputs: ["scTooltip", "position"] }, { kind: "component", type: SvgAlignRightIcon, selector: "svg-align-right-icon", inputs: ["class"] }, { kind: "component", type: ScToggle, selector: "button[sc-toggle]", inputs: ["variant", "size", "class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
532
+ }
533
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScEditorTextAlignRight, decorators: [{
534
+ type: Component,
535
+ args: [{ selector: 'sc-editor-text-align-right', imports: [ScTooltip, SvgAlignRightIcon, ScToggle], template: `
536
+ <button
537
+ [attr.aria-label]="ariaLabel"
538
+ [scTooltip]="ariaLabel"
539
+ (click)="setRightAlign()"
540
+ type="button"
541
+ sc-toggle
542
+ variant="outline"
543
+ >
544
+ <svg-align-right-icon />
415
545
  <span class="sr-only">{{ ariaLabel }}</span>
416
546
  </button>
417
547
  `, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush }]
418
548
  }], ctorParameters: () => [] });
419
549
 
420
- class ScExtensionBulletList {
421
- ariaLabel = 'Toggle List';
550
+ class ScEditorUndo {
551
+ ariaLabel = 'Undo';
422
552
  parent = inject(ScEditor, { host: true });
423
553
  extensions = inject(ScExtensions);
424
554
  constructor() {
425
- this.extensions.bulletList.set(true);
555
+ this.extensions.undo.set(true);
426
556
  }
427
557
  get editor() {
428
558
  return this.parent.editor;
429
559
  }
430
- toggleBulletList() {
431
- this.editor.chain().focus().toggleBulletList().run();
560
+ undo() {
561
+ this.editor.chain().focus().undo().run();
432
562
  }
433
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScExtensionBulletList, deps: [], target: i0.ɵɵFactoryTarget.Component });
434
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: ScExtensionBulletList, isStandalone: true, selector: "sc-extension-bullet-list", ngImport: i0, template: `
563
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScEditorUndo, deps: [], target: i0.ɵɵFactoryTarget.Component });
564
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: ScEditorUndo, isStandalone: true, selector: "sc-editor-undo", ngImport: i0, template: `
435
565
  <button
436
566
  [attr.aria-label]="ariaLabel"
437
567
  [scTooltip]="ariaLabel"
438
- (click)="toggleBulletList()"
568
+ (click)="undo()"
439
569
  sc-toggle
440
570
  variant="outline"
441
571
  type="button"
442
572
  >
443
- <svg-list-icon />
573
+ <svg-undo-icon />
444
574
  <span class="sr-only">{{ ariaLabel }}</span>
445
575
  </button>
446
- `, isInline: true, styles: [""], dependencies: [{ kind: "directive", type: ScTooltip, selector: "[scTooltip]", inputs: ["scTooltip", "position"] }, { kind: "component", type: ScToggle, selector: "button[sc-toggle]", inputs: ["variant", "size", "class"] }, { kind: "component", type: SvgListIcon, selector: "svg-list-icon", inputs: ["class", "svgClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
576
+ `, isInline: true, styles: [""], dependencies: [{ kind: "directive", type: ScTooltip, selector: "[scTooltip]", inputs: ["scTooltip", "position"] }, { kind: "component", type: ScToggle, selector: "button[sc-toggle]", inputs: ["variant", "size", "class"] }, { kind: "component", type: SvgUndoIcon, selector: "svg-undo-icon", inputs: ["class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
447
577
  }
448
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScExtensionBulletList, decorators: [{
578
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScEditorUndo, decorators: [{
449
579
  type: Component,
450
- args: [{ selector: 'sc-extension-bullet-list', imports: [ScTooltip, ScToggle, SvgListIcon], template: `
580
+ args: [{ selector: 'sc-editor-undo', imports: [ScTooltip, ScToggle, SvgUndoIcon], template: `
451
581
  <button
452
582
  [attr.aria-label]="ariaLabel"
453
583
  [scTooltip]="ariaLabel"
454
- (click)="toggleBulletList()"
584
+ (click)="undo()"
455
585
  sc-toggle
456
586
  variant="outline"
457
587
  type="button"
458
588
  >
459
- <svg-list-icon />
589
+ <svg-undo-icon />
460
590
  <span class="sr-only">{{ ariaLabel }}</span>
461
591
  </button>
462
592
  `, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush }]
463
593
  }], ctorParameters: () => [] });
464
594
 
465
- class ScExtensionCode {
466
- ariaLabel = 'Format code';
595
+ class ScEditorUnsetLink {
596
+ ariaLabel = 'Unset Link';
467
597
  parent = inject(ScEditor, { host: true });
598
+ dialog = inject(Dialog);
468
599
  extensions = inject(ScExtensions);
469
600
  constructor() {
470
- this.extensions.code.set(true);
601
+ this.extensions.unsetLink.set(true);
471
602
  }
472
603
  get editor() {
473
604
  return this.parent.editor;
474
605
  }
475
- toggleCode() {
476
- this.editor.chain().focus().toggleCode().run();
606
+ unsetLink() {
607
+ this.editor.chain().focus().unsetLink().run();
477
608
  }
478
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScExtensionCode, deps: [], target: i0.ɵɵFactoryTarget.Component });
479
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: ScExtensionCode, isStandalone: true, selector: "sc-extension-code", ngImport: i0, template: `
609
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScEditorUnsetLink, deps: [], target: i0.ɵɵFactoryTarget.Component });
610
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: ScEditorUnsetLink, isStandalone: true, selector: "sc-editor-unset-link", ngImport: i0, template: `
480
611
  <button
481
612
  [attr.aria-label]="ariaLabel"
482
613
  [scTooltip]="ariaLabel"
483
- (click)="toggleCode()"
614
+ (click)="unsetLink()"
484
615
  sc-toggle
485
616
  variant="outline"
486
617
  type="button"
487
618
  >
488
- <svg-code-icon />
619
+ <svg-unlink-icon />
489
620
  <span class="sr-only">{{ ariaLabel }}</span>
490
621
  </button>
491
- `, isInline: true, styles: [""], dependencies: [{ kind: "directive", type: ScTooltip, selector: "[scTooltip]", inputs: ["scTooltip", "position"] }, { kind: "component", type: SvgCodeIcon, selector: "svg-code-icon", inputs: ["class", "svgClass"] }, { kind: "component", type: ScToggle, selector: "button[sc-toggle]", inputs: ["variant", "size", "class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
622
+ `, isInline: true, styles: [""], dependencies: [{ kind: "directive", type: ScTooltip, selector: "[scTooltip]", inputs: ["scTooltip", "position"] }, { kind: "component", type: ScToggle, selector: "button[sc-toggle]", inputs: ["variant", "size", "class"] }, { kind: "component", type: SvgUnlinkIcon, selector: "svg-unlink-icon", inputs: ["class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
492
623
  }
493
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScExtensionCode, decorators: [{
624
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScEditorUnsetLink, decorators: [{
494
625
  type: Component,
495
- args: [{ selector: 'sc-extension-code', imports: [ScTooltip, SvgCodeIcon, ScToggle], template: `
626
+ args: [{ selector: 'sc-editor-unset-link', imports: [ScTooltip, ScToggle, SvgUnlinkIcon], template: `
496
627
  <button
497
628
  [attr.aria-label]="ariaLabel"
498
629
  [scTooltip]="ariaLabel"
499
- (click)="toggleCode()"
630
+ (click)="unsetLink()"
500
631
  sc-toggle
501
632
  variant="outline"
502
633
  type="button"
503
634
  >
504
- <svg-code-icon />
635
+ <svg-unlink-icon />
505
636
  <span class="sr-only">{{ ariaLabel }}</span>
506
637
  </button>
507
638
  `, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush }]
508
639
  }], ctorParameters: () => [] });
509
640
 
510
- const allColors = {
511
- slate: {
512
- 50: '#f8fafc',
513
- 100: '#f1f5f9',
514
- 200: '#e2e8f0',
515
- 300: '#cbd5e1',
516
- 400: '#94a3b8',
517
- 500: '#64748b',
518
- 600: '#475569',
519
- 700: '#334155',
520
- 800: '#1e293b',
521
- 900: '#0f172a',
522
- 950: '#020617',
523
- },
524
- gray: {
525
- 50: '#f9fafb',
526
- 100: '#f3f4f6',
527
- 200: '#e5e7eb',
528
- 300: '#d1d5db',
529
- 400: '#9ca3af',
530
- 500: '#6b7280',
531
- 600: '#4b5563',
532
- 700: '#374151',
533
- 800: '#1f2937',
534
- 900: '#111827',
535
- 950: '#030712',
536
- },
537
- zinc: {
538
- 50: '#fafafa',
539
- 100: '#f4f4f5',
540
- 200: '#e4e4e7',
541
- 300: '#d4d4d8',
542
- 400: '#a1a1aa',
543
- 500: '#71717a',
544
- 600: '#52525b',
545
- 700: '#3f3f46',
546
- 800: '#27272a',
547
- 900: '#18181b',
548
- 950: '#09090b',
549
- },
550
- neutral: {
551
- 50: '#fafafa',
552
- 100: '#f5f5f5',
553
- 200: '#e5e5e5',
554
- 300: '#d4d4d4',
555
- 400: '#a3a3a3',
556
- 500: '#737373',
557
- 600: '#525252',
558
- 700: '#404040',
559
- 800: '#262626',
560
- 900: '#171717',
561
- 950: '#0a0a0a',
562
- },
563
- stone: {
564
- 50: '#fafaf9',
565
- 100: '#f5f5f4',
566
- 200: '#e7e5e4',
567
- 300: '#d6d3d1',
568
- 400: '#a8a29e',
569
- 500: '#78716c',
570
- 600: '#57534e',
571
- 700: '#44403c',
572
- 800: '#292524',
573
- 900: '#1c1917',
574
- 950: '#0c0a09',
575
- },
576
- red: {
577
- 50: '#fef2f2',
578
- 100: '#fee2e2',
579
- 200: '#fecaca',
580
- 300: '#fca5a5',
581
- 400: '#f87171',
582
- 500: '#ef4444',
583
- 600: '#dc2626',
584
- 700: '#b91c1c',
585
- 800: '#991b1b',
586
- 900: '#7f1d1d',
587
- 950: '#450a0a',
588
- },
589
- orange: {
590
- 50: '#fff7ed',
591
- 100: '#ffedd5',
592
- 200: '#fed7aa',
593
- 300: '#fdba74',
641
+ class ScEditorGroup {
642
+ class = input('');
643
+ //TODO change styles
644
+ _class = computed(() => cn('flex flex-wrap items-center gap-1 py-1', this.class()));
645
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScEditorGroup, deps: [], target: i0.ɵɵFactoryTarget.Component });
646
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.5", type: ScEditorGroup, isStandalone: true, selector: "sc-editor-group", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "_class()" } }, ngImport: i0, template: `
647
+ <ng-content />
648
+ `, isInline: true, styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
649
+ }
650
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScEditorGroup, decorators: [{
651
+ type: Component,
652
+ args: [{ selector: 'sc-editor-group', imports: [], template: `
653
+ <ng-content />
654
+ `, host: {
655
+ '[class]': '_class()',
656
+ }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush }]
657
+ }] });
658
+
659
+ class ScEditorToolbar {
660
+ class = input('');
661
+ //TODO change styles to fit shadcn
662
+ _class = computed(() => cn('block border-b px-3 py-1 dark:border-gray-600', this.class()));
663
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScEditorToolbar, deps: [], target: i0.ɵɵFactoryTarget.Component });
664
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.5", type: ScEditorToolbar, isStandalone: true, selector: "sc-editor-toolbar", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "_class()" } }, ngImport: i0, template: `
665
+ <ng-content />
666
+ `, isInline: true, styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
667
+ }
668
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScEditorToolbar, decorators: [{
669
+ type: Component,
670
+ args: [{ selector: 'sc-editor-toolbar', imports: [], template: `
671
+ <ng-content />
672
+ `, host: {
673
+ '[class]': '_class()',
674
+ }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush }]
675
+ }] });
676
+
677
+ class ScExtensionBlockquote {
678
+ ariaLabel = 'Toggle blockquote';
679
+ parent = inject(ScEditor, { host: true });
680
+ extensions = inject(ScExtensions);
681
+ constructor() {
682
+ this.extensions.blockquote.set(true);
683
+ }
684
+ get editor() {
685
+ return this.parent.editor;
686
+ }
687
+ toggleBlockquote() {
688
+ this.editor.chain().focus().toggleBlockquote().run();
689
+ }
690
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScExtensionBlockquote, deps: [], target: i0.ɵɵFactoryTarget.Component });
691
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: ScExtensionBlockquote, isStandalone: true, selector: "sc-extension-blockquote", ngImport: i0, template: `
692
+ <button
693
+ [attr.aria-label]="ariaLabel"
694
+ [scTooltip]="ariaLabel"
695
+ (click)="toggleBlockquote()"
696
+ sc-toggle
697
+ variant="outline"
698
+ type="button"
699
+ >
700
+ <svg-quote-icon />
701
+ <span class="sr-only">{{ ariaLabel }}</span>
702
+ </button>
703
+ `, isInline: true, styles: [""], dependencies: [{ kind: "directive", type: ScTooltip, selector: "[scTooltip]", inputs: ["scTooltip", "position"] }, { kind: "component", type: ScToggle, selector: "button[sc-toggle]", inputs: ["variant", "size", "class"] }, { kind: "component", type: SvgQuoteIcon, selector: "svg-quote-icon", inputs: ["class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
704
+ }
705
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScExtensionBlockquote, decorators: [{
706
+ type: Component,
707
+ args: [{ selector: 'sc-extension-blockquote', imports: [ScTooltip, ScToggle, SvgQuoteIcon], template: `
708
+ <button
709
+ [attr.aria-label]="ariaLabel"
710
+ [scTooltip]="ariaLabel"
711
+ (click)="toggleBlockquote()"
712
+ sc-toggle
713
+ variant="outline"
714
+ type="button"
715
+ >
716
+ <svg-quote-icon />
717
+ <span class="sr-only">{{ ariaLabel }}</span>
718
+ </button>
719
+ `, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush }]
720
+ }], ctorParameters: () => [] });
721
+
722
+ class ScExtensionBold {
723
+ ariaLabel = 'Toggle Bold';
724
+ parent = inject(ScEditor, { host: true });
725
+ extensions = inject(ScExtensions);
726
+ constructor() {
727
+ this.extensions.bold.set(true);
728
+ }
729
+ get editor() {
730
+ return this.parent.editor;
731
+ }
732
+ toggleBold() {
733
+ this.editor.chain().focus().toggleBold().run();
734
+ }
735
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScExtensionBold, deps: [], target: i0.ɵɵFactoryTarget.Component });
736
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: ScExtensionBold, isStandalone: true, selector: "sc-extension-bold", ngImport: i0, template: `
737
+ <button
738
+ [attr.aria-label]="ariaLabel"
739
+ [scTooltip]="ariaLabel"
740
+ (click)="toggleBold()"
741
+ sc-toggle
742
+ variant="outline"
743
+ type="button"
744
+ >
745
+ <svg-bold-icon />
746
+ <span class="sr-only">{{ ariaLabel }}</span>
747
+ </button>
748
+ `, isInline: true, styles: [""], dependencies: [{ kind: "directive", type: ScTooltip, selector: "[scTooltip]", inputs: ["scTooltip", "position"] }, { kind: "component", type: ScToggle, selector: "button[sc-toggle]", inputs: ["variant", "size", "class"] }, { kind: "component", type: SvgBoldIcon, selector: "svg-bold-icon", inputs: ["class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
749
+ }
750
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScExtensionBold, decorators: [{
751
+ type: Component,
752
+ args: [{ selector: 'sc-extension-bold', imports: [ScTooltip, ScToggle, SvgBoldIcon], template: `
753
+ <button
754
+ [attr.aria-label]="ariaLabel"
755
+ [scTooltip]="ariaLabel"
756
+ (click)="toggleBold()"
757
+ sc-toggle
758
+ variant="outline"
759
+ type="button"
760
+ >
761
+ <svg-bold-icon />
762
+ <span class="sr-only">{{ ariaLabel }}</span>
763
+ </button>
764
+ `, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush }]
765
+ }], ctorParameters: () => [] });
766
+
767
+ class ScExtensionBulletList {
768
+ ariaLabel = 'Toggle List';
769
+ parent = inject(ScEditor, { host: true });
770
+ extensions = inject(ScExtensions);
771
+ constructor() {
772
+ this.extensions.bulletList.set(true);
773
+ }
774
+ get editor() {
775
+ return this.parent.editor;
776
+ }
777
+ toggleBulletList() {
778
+ this.editor.chain().focus().toggleBulletList().run();
779
+ }
780
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScExtensionBulletList, deps: [], target: i0.ɵɵFactoryTarget.Component });
781
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: ScExtensionBulletList, isStandalone: true, selector: "sc-extension-bullet-list", ngImport: i0, template: `
782
+ <button
783
+ [attr.aria-label]="ariaLabel"
784
+ [scTooltip]="ariaLabel"
785
+ (click)="toggleBulletList()"
786
+ sc-toggle
787
+ variant="outline"
788
+ type="button"
789
+ >
790
+ <svg-list-icon />
791
+ <span class="sr-only">{{ ariaLabel }}</span>
792
+ </button>
793
+ `, isInline: true, styles: [""], dependencies: [{ kind: "directive", type: ScTooltip, selector: "[scTooltip]", inputs: ["scTooltip", "position"] }, { kind: "component", type: ScToggle, selector: "button[sc-toggle]", inputs: ["variant", "size", "class"] }, { kind: "component", type: SvgListIcon, selector: "svg-list-icon", inputs: ["class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
794
+ }
795
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScExtensionBulletList, decorators: [{
796
+ type: Component,
797
+ args: [{ selector: 'sc-extension-bullet-list', imports: [ScTooltip, ScToggle, SvgListIcon], template: `
798
+ <button
799
+ [attr.aria-label]="ariaLabel"
800
+ [scTooltip]="ariaLabel"
801
+ (click)="toggleBulletList()"
802
+ sc-toggle
803
+ variant="outline"
804
+ type="button"
805
+ >
806
+ <svg-list-icon />
807
+ <span class="sr-only">{{ ariaLabel }}</span>
808
+ </button>
809
+ `, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush }]
810
+ }], ctorParameters: () => [] });
811
+
812
+ class ScExtensionCode {
813
+ ariaLabel = 'Format code';
814
+ parent = inject(ScEditor, { host: true });
815
+ extensions = inject(ScExtensions);
816
+ constructor() {
817
+ this.extensions.code.set(true);
818
+ }
819
+ get editor() {
820
+ return this.parent.editor;
821
+ }
822
+ toggleCode() {
823
+ this.editor.chain().focus().toggleCode().run();
824
+ }
825
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScExtensionCode, deps: [], target: i0.ɵɵFactoryTarget.Component });
826
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: ScExtensionCode, isStandalone: true, selector: "sc-extension-code", ngImport: i0, template: `
827
+ <button
828
+ [attr.aria-label]="ariaLabel"
829
+ [scTooltip]="ariaLabel"
830
+ (click)="toggleCode()"
831
+ sc-toggle
832
+ variant="outline"
833
+ type="button"
834
+ >
835
+ <svg-code-icon />
836
+ <span class="sr-only">{{ ariaLabel }}</span>
837
+ </button>
838
+ `, isInline: true, styles: [""], dependencies: [{ kind: "directive", type: ScTooltip, selector: "[scTooltip]", inputs: ["scTooltip", "position"] }, { kind: "component", type: SvgCodeIcon, selector: "svg-code-icon", inputs: ["class"] }, { kind: "component", type: ScToggle, selector: "button[sc-toggle]", inputs: ["variant", "size", "class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
839
+ }
840
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScExtensionCode, decorators: [{
841
+ type: Component,
842
+ args: [{ selector: 'sc-extension-code', imports: [ScTooltip, SvgCodeIcon, ScToggle], template: `
843
+ <button
844
+ [attr.aria-label]="ariaLabel"
845
+ [scTooltip]="ariaLabel"
846
+ (click)="toggleCode()"
847
+ sc-toggle
848
+ variant="outline"
849
+ type="button"
850
+ >
851
+ <svg-code-icon />
852
+ <span class="sr-only">{{ ariaLabel }}</span>
853
+ </button>
854
+ `, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush }]
855
+ }], ctorParameters: () => [] });
856
+
857
+ const allColors = {
858
+ slate: {
859
+ 50: '#f8fafc',
860
+ 100: '#f1f5f9',
861
+ 200: '#e2e8f0',
862
+ 300: '#cbd5e1',
863
+ 400: '#94a3b8',
864
+ 500: '#64748b',
865
+ 600: '#475569',
866
+ 700: '#334155',
867
+ 800: '#1e293b',
868
+ 900: '#0f172a',
869
+ 950: '#020617',
870
+ },
871
+ gray: {
872
+ 50: '#f9fafb',
873
+ 100: '#f3f4f6',
874
+ 200: '#e5e7eb',
875
+ 300: '#d1d5db',
876
+ 400: '#9ca3af',
877
+ 500: '#6b7280',
878
+ 600: '#4b5563',
879
+ 700: '#374151',
880
+ 800: '#1f2937',
881
+ 900: '#111827',
882
+ 950: '#030712',
883
+ },
884
+ zinc: {
885
+ 50: '#fafafa',
886
+ 100: '#f4f4f5',
887
+ 200: '#e4e4e7',
888
+ 300: '#d4d4d8',
889
+ 400: '#a1a1aa',
890
+ 500: '#71717a',
891
+ 600: '#52525b',
892
+ 700: '#3f3f46',
893
+ 800: '#27272a',
894
+ 900: '#18181b',
895
+ 950: '#09090b',
896
+ },
897
+ neutral: {
898
+ 50: '#fafafa',
899
+ 100: '#f5f5f5',
900
+ 200: '#e5e5e5',
901
+ 300: '#d4d4d4',
902
+ 400: '#a3a3a3',
903
+ 500: '#737373',
904
+ 600: '#525252',
905
+ 700: '#404040',
906
+ 800: '#262626',
907
+ 900: '#171717',
908
+ 950: '#0a0a0a',
909
+ },
910
+ stone: {
911
+ 50: '#fafaf9',
912
+ 100: '#f5f5f4',
913
+ 200: '#e7e5e4',
914
+ 300: '#d6d3d1',
915
+ 400: '#a8a29e',
916
+ 500: '#78716c',
917
+ 600: '#57534e',
918
+ 700: '#44403c',
919
+ 800: '#292524',
920
+ 900: '#1c1917',
921
+ 950: '#0c0a09',
922
+ },
923
+ red: {
924
+ 50: '#fef2f2',
925
+ 100: '#fee2e2',
926
+ 200: '#fecaca',
927
+ 300: '#fca5a5',
928
+ 400: '#f87171',
929
+ 500: '#ef4444',
930
+ 600: '#dc2626',
931
+ 700: '#b91c1c',
932
+ 800: '#991b1b',
933
+ 900: '#7f1d1d',
934
+ 950: '#450a0a',
935
+ },
936
+ orange: {
937
+ 50: '#fff7ed',
938
+ 100: '#ffedd5',
939
+ 200: '#fed7aa',
940
+ 300: '#fdba74',
594
941
  400: '#fb923c',
595
942
  500: '#f97316',
596
943
  600: '#ea580c',
@@ -874,7 +1221,7 @@ class ScExtensionColor {
874
1221
  </button>
875
1222
  </div>
876
1223
  </ng-template>
877
- `, isInline: true, styles: [""], dependencies: [{ kind: "directive", type: CdkMenuTrigger, selector: "[cdkMenuTriggerFor]", inputs: ["cdkMenuTriggerFor", "cdkMenuPosition", "cdkMenuTriggerData"], outputs: ["cdkMenuOpened", "cdkMenuClosed"], exportAs: ["cdkMenuTriggerFor"] }, { kind: "directive", type: CdkMenu, selector: "[cdkMenu]", outputs: ["closed"], exportAs: ["cdkMenu"] }, { kind: "directive", type: CdkMenuItem, selector: "[cdkMenuItem]", inputs: ["cdkMenuItemDisabled", "cdkMenuitemTypeaheadLabel"], outputs: ["cdkMenuItemTriggered"], exportAs: ["cdkMenuItem"] }, { kind: "directive", type: ScTooltip, selector: "[scTooltip]", inputs: ["scTooltip", "position"] }, { kind: "component", type: SvgPaletteIcon, selector: "svg-palette-icon", inputs: ["class", "svgClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
1224
+ `, isInline: true, styles: [""], dependencies: [{ kind: "directive", type: CdkMenuTrigger, selector: "[cdkMenuTriggerFor]", inputs: ["cdkMenuTriggerFor", "cdkMenuPosition", "cdkMenuTriggerData"], outputs: ["cdkMenuOpened", "cdkMenuClosed"], exportAs: ["cdkMenuTriggerFor"] }, { kind: "directive", type: CdkMenu, selector: "[cdkMenu]", outputs: ["closed"], exportAs: ["cdkMenu"] }, { kind: "directive", type: CdkMenuItem, selector: "[cdkMenuItem]", inputs: ["cdkMenuItemDisabled", "cdkMenuitemTypeaheadLabel"], outputs: ["cdkMenuItemTriggered"], exportAs: ["cdkMenuItem"] }, { kind: "directive", type: ScTooltip, selector: "[scTooltip]", inputs: ["scTooltip", "position"] }, { kind: "component", type: SvgPaletteIcon, selector: "svg-palette-icon", inputs: ["class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
878
1225
  }
879
1226
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScExtensionColor, decorators: [{
880
1227
  type: Component,
@@ -1691,7 +2038,7 @@ class ScExtensionHighlight {
1691
2038
  <svg-highlighter-icon />
1692
2039
  <span class="sr-only">{{ ariaLabel }}</span>
1693
2040
  </button>
1694
- `, isInline: true, styles: [""], dependencies: [{ kind: "directive", type: ScTooltip, selector: "[scTooltip]", inputs: ["scTooltip", "position"] }, { kind: "component", type: ScToggle, selector: "button[sc-toggle]", inputs: ["variant", "size", "class"] }, { kind: "component", type: SvgHighlighterIcon, selector: "svg-highlighter-icon", inputs: ["class", "svgClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
2041
+ `, isInline: true, styles: [""], dependencies: [{ kind: "directive", type: ScTooltip, selector: "[scTooltip]", inputs: ["scTooltip", "position"] }, { kind: "component", type: ScToggle, selector: "button[sc-toggle]", inputs: ["variant", "size", "class"] }, { kind: "component", type: SvgHighlighterIcon, selector: "svg-highlighter-icon", inputs: ["class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
1695
2042
  }
1696
2043
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScExtensionHighlight, decorators: [{
1697
2044
  type: Component,
@@ -1710,79 +2057,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
1710
2057
  `, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush }]
1711
2058
  }], ctorParameters: () => [] });
1712
2059
 
1713
- class ScExtensionHistory {
1714
- ariaLabel1 = 'Undo';
1715
- ariaLabel2 = 'Redo';
1716
- parent = inject(ScEditor, { host: true });
1717
- extensions = inject(ScExtensions);
1718
- constructor() {
1719
- this.extensions.history.set(true);
1720
- }
1721
- get editor() {
1722
- return this.parent.editor;
1723
- }
1724
- undo() {
1725
- this.editor.chain().focus().undo().run();
1726
- }
1727
- redo() {
1728
- this.editor.chain().focus().redo().run();
1729
- }
1730
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScExtensionHistory, deps: [], target: i0.ɵɵFactoryTarget.Component });
1731
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: ScExtensionHistory, isStandalone: true, selector: "sc-extension-history", ngImport: i0, template: `
1732
- <button
1733
- [attr.aria-label]="ariaLabel1"
1734
- [scTooltip]="ariaLabel1"
1735
- (click)="undo()"
1736
- sc-toggle
1737
- variant="outline"
1738
- type="button"
1739
- >
1740
- <svg-undo-icon />
1741
- <span class="sr-only">{{ ariaLabel1 }}</span>
1742
- </button>
1743
-
1744
- <button
1745
- [attr.aria-label]="ariaLabel2"
1746
- [scTooltip]="ariaLabel2"
1747
- (click)="redo()"
1748
- sc-toggle
1749
- variant="outline"
1750
- type="button"
1751
- >
1752
- <svg-redo-icon />
1753
- <span class="sr-only">{{ ariaLabel2 }}</span>
1754
- </button>
1755
- `, isInline: true, styles: [""], dependencies: [{ kind: "directive", type: ScTooltip, selector: "[scTooltip]", inputs: ["scTooltip", "position"] }, { kind: "component", type: ScToggle, selector: "button[sc-toggle]", inputs: ["variant", "size", "class"] }, { kind: "component", type: SvgUndoIcon, selector: "svg-undo-icon", inputs: ["class", "svgClass"] }, { kind: "component", type: SvgRedoIcon, selector: "svg-redo-icon", inputs: ["class", "svgClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
1756
- }
1757
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScExtensionHistory, decorators: [{
1758
- type: Component,
1759
- args: [{ selector: 'sc-extension-history', imports: [ScTooltip, ScToggle, SvgUndoIcon, SvgRedoIcon], template: `
1760
- <button
1761
- [attr.aria-label]="ariaLabel1"
1762
- [scTooltip]="ariaLabel1"
1763
- (click)="undo()"
1764
- sc-toggle
1765
- variant="outline"
1766
- type="button"
1767
- >
1768
- <svg-undo-icon />
1769
- <span class="sr-only">{{ ariaLabel1 }}</span>
1770
- </button>
1771
-
1772
- <button
1773
- [attr.aria-label]="ariaLabel2"
1774
- [scTooltip]="ariaLabel2"
1775
- (click)="redo()"
1776
- sc-toggle
1777
- variant="outline"
1778
- type="button"
1779
- >
1780
- <svg-redo-icon />
1781
- <span class="sr-only">{{ ariaLabel2 }}</span>
1782
- </button>
1783
- `, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush }]
1784
- }], ctorParameters: () => [] });
1785
-
1786
2060
  class ScExtensionHorizontalRule {
1787
2061
  ariaLabel = 'Toggle Horizontal Rule';
1788
2062
  parent = inject(ScEditor, { host: true });
@@ -1809,7 +2083,7 @@ class ScExtensionHorizontalRule {
1809
2083
  <svg-minus-icon />
1810
2084
  <span class="sr-only">{{ ariaLabel }}</span>
1811
2085
  </button>
1812
- `, isInline: true, styles: [""], dependencies: [{ kind: "directive", type: ScTooltip, selector: "[scTooltip]", inputs: ["scTooltip", "position"] }, { kind: "component", type: ScToggle, selector: "button[sc-toggle]", inputs: ["variant", "size", "class"] }, { kind: "component", type: SvgMinusIcon, selector: "svg-minus-icon", inputs: ["class", "svgClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
2086
+ `, isInline: true, styles: [""], dependencies: [{ kind: "directive", type: ScTooltip, selector: "[scTooltip]", inputs: ["scTooltip", "position"] }, { kind: "component", type: ScToggle, selector: "button[sc-toggle]", inputs: ["variant", "size", "class"] }, { kind: "component", type: SvgMinusIcon, selector: "svg-minus-icon", inputs: ["class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
1813
2087
  }
1814
2088
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScExtensionHorizontalRule, decorators: [{
1815
2089
  type: Component,
@@ -2183,7 +2457,7 @@ class ScExtensionItalic {
2183
2457
  <svg-italic-icon />
2184
2458
  <span class="sr-only">{{ ariaLabel }}</span>
2185
2459
  </button>
2186
- `, isInline: true, styles: [""], dependencies: [{ kind: "directive", type: ScTooltip, selector: "[scTooltip]", inputs: ["scTooltip", "position"] }, { kind: "component", type: ScToggle, selector: "button[sc-toggle]", inputs: ["variant", "size", "class"] }, { kind: "component", type: SvgItalicIcon, selector: "svg-italic-icon", inputs: ["class", "svgClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
2460
+ `, isInline: true, styles: [""], dependencies: [{ kind: "directive", type: ScTooltip, selector: "[scTooltip]", inputs: ["scTooltip", "position"] }, { kind: "component", type: ScToggle, selector: "button[sc-toggle]", inputs: ["variant", "size", "class"] }, { kind: "component", type: SvgItalicIcon, selector: "svg-italic-icon", inputs: ["class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
2187
2461
  }
2188
2462
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScExtensionItalic, decorators: [{
2189
2463
  type: Component,
@@ -2363,7 +2637,7 @@ class ScExtensionLink {
2363
2637
  dialog = inject(Dialog);
2364
2638
  extensions = inject(ScExtensions);
2365
2639
  constructor() {
2366
- this.extensions.link.set(true);
2640
+ this.extensions.setLink.set(true);
2367
2641
  }
2368
2642
  get editor() {
2369
2643
  return this.parent.editor;
@@ -2380,9 +2654,6 @@ class ScExtensionLink {
2380
2654
  .run();
2381
2655
  });
2382
2656
  }
2383
- removeLink() {
2384
- this.editor.chain().focus().unsetLink().run();
2385
- }
2386
2657
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScExtensionLink, deps: [], target: i0.ɵɵFactoryTarget.Component });
2387
2658
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: ScExtensionLink, isStandalone: true, selector: "sc-extension-link", ngImport: i0, template: `
2388
2659
  <button
@@ -2410,31 +2681,6 @@ class ScExtensionLink {
2410
2681
  </svg>
2411
2682
  <span class="sr-only">Link</span>
2412
2683
  </button>
2413
-
2414
- <button
2415
- class="cursor-pointer rounded p-1.5 text-gray-500 hover:bg-gray-100 hover:text-gray-900 dark:text-gray-400 dark:hover:bg-gray-600 dark:hover:text-white"
2416
- (click)="removeLink()"
2417
- type="button"
2418
- scTooltip="Remove link"
2419
- >
2420
- <svg
2421
- class="size-5"
2422
- aria-hidden="true"
2423
- xmlns="http://www.w3.org/2000/svg"
2424
- width="24"
2425
- height="24"
2426
- fill="none"
2427
- viewBox="0 0 24 24"
2428
- >
2429
- <path
2430
- stroke="currentColor"
2431
- stroke-linecap="round"
2432
- stroke-width="2"
2433
- d="M13.2 9.8a3.4 3.4 0 0 0-4.8 0L5 13.2A3.4 3.4 0 0 0 9.8 18l.3-.3m-.3-4.5a3.4 3.4 0 0 0 4.8 0L18 9.8A3.4 3.4 0 0 0 13.2 5l-1 1m7.4 14-1.8-1.8m0 0L16 16.4m1.8 1.8 1.8-1.8m-1.8 1.8L16 20"
2434
- />
2435
- </svg>
2436
- <span class="sr-only">Remove link</span>
2437
- </button>
2438
2684
  `, isInline: true, styles: [""], dependencies: [{ kind: "directive", type: ScTooltip, selector: "[scTooltip]", inputs: ["scTooltip", "position"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
2439
2685
  }
2440
2686
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScExtensionLink, decorators: [{
@@ -2465,31 +2711,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
2465
2711
  </svg>
2466
2712
  <span class="sr-only">Link</span>
2467
2713
  </button>
2468
-
2469
- <button
2470
- class="cursor-pointer rounded p-1.5 text-gray-500 hover:bg-gray-100 hover:text-gray-900 dark:text-gray-400 dark:hover:bg-gray-600 dark:hover:text-white"
2471
- (click)="removeLink()"
2472
- type="button"
2473
- scTooltip="Remove link"
2474
- >
2475
- <svg
2476
- class="size-5"
2477
- aria-hidden="true"
2478
- xmlns="http://www.w3.org/2000/svg"
2479
- width="24"
2480
- height="24"
2481
- fill="none"
2482
- viewBox="0 0 24 24"
2483
- >
2484
- <path
2485
- stroke="currentColor"
2486
- stroke-linecap="round"
2487
- stroke-width="2"
2488
- d="M13.2 9.8a3.4 3.4 0 0 0-4.8 0L5 13.2A3.4 3.4 0 0 0 9.8 18l.3-.3m-.3-4.5a3.4 3.4 0 0 0 4.8 0L18 9.8A3.4 3.4 0 0 0 13.2 5l-1 1m7.4 14-1.8-1.8m0 0L16 16.4m1.8 1.8 1.8-1.8m-1.8 1.8L16 20"
2489
- />
2490
- </svg>
2491
- <span class="sr-only">Remove link</span>
2492
- </button>
2493
2714
  `, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush }]
2494
2715
  }], ctorParameters: () => [] });
2495
2716
 
@@ -2519,7 +2740,7 @@ class ScExtensionOrderedList {
2519
2740
  <svg-list-ordered-icon />
2520
2741
  <span class="sr-only">{{ ariaLabel }}</span>
2521
2742
  </button>
2522
- `, isInline: true, styles: [""], dependencies: [{ kind: "directive", type: ScTooltip, selector: "[scTooltip]", inputs: ["scTooltip", "position"] }, { kind: "component", type: ScToggle, selector: "button[sc-toggle]", inputs: ["variant", "size", "class"] }, { kind: "component", type: SvgListOrderedIcon, selector: "svg-list-ordered-icon", inputs: ["class", "svgClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
2743
+ `, isInline: true, styles: [""], dependencies: [{ kind: "directive", type: ScTooltip, selector: "[scTooltip]", inputs: ["scTooltip", "position"] }, { kind: "component", type: ScToggle, selector: "button[sc-toggle]", inputs: ["variant", "size", "class"] }, { kind: "component", type: SvgListOrderedIcon, selector: "svg-list-ordered-icon", inputs: ["class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
2523
2744
  }
2524
2745
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScExtensionOrderedList, decorators: [{
2525
2746
  type: Component,
@@ -2696,7 +2917,7 @@ class ScExtensionStrike {
2696
2917
  <svg-strikethrough-icon />
2697
2918
  <span class="sr-only">{{ ariaLabel }}</span>
2698
2919
  </button>
2699
- `, isInline: true, styles: [""], dependencies: [{ kind: "directive", type: ScTooltip, selector: "[scTooltip]", inputs: ["scTooltip", "position"] }, { kind: "component", type: SvgStrikethroughIcon, selector: "svg-strikethrough-icon", inputs: ["class", "svgClass"] }, { kind: "component", type: ScToggle, selector: "button[sc-toggle]", inputs: ["variant", "size", "class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
2920
+ `, isInline: true, styles: [""], dependencies: [{ kind: "directive", type: ScTooltip, selector: "[scTooltip]", inputs: ["scTooltip", "position"] }, { kind: "component", type: SvgStrikethroughIcon, selector: "svg-strikethrough-icon", inputs: ["class"] }, { kind: "component", type: ScToggle, selector: "button[sc-toggle]", inputs: ["variant", "size", "class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
2700
2921
  }
2701
2922
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScExtensionStrike, decorators: [{
2702
2923
  type: Component,
@@ -2911,23 +3132,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
2911
3132
  `, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush }]
2912
3133
  }] });
2913
3134
 
2914
- class ScExtensionsSeparator {
2915
- class = input('');
2916
- classes = computed(() => cn('px-1', this.class()));
2917
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScExtensionsSeparator, deps: [], target: i0.ɵɵFactoryTarget.Component });
2918
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.5", type: ScExtensionsSeparator, isStandalone: true, selector: "sc-extensions-separator", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, ngImport: i0, template: `
2919
- <span class="inline-block h-4 w-px bg-gray-300 dark:bg-gray-600"></span>
2920
- `, isInline: true, styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
2921
- }
2922
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScExtensionsSeparator, decorators: [{
2923
- type: Component,
2924
- args: [{ selector: 'sc-extensions-separator', imports: [], template: `
2925
- <span class="inline-block h-4 w-px bg-gray-300 dark:bg-gray-600"></span>
2926
- `, host: {
2927
- '[class]': 'classes()',
2928
- }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush }]
2929
- }] });
2930
-
2931
3135
  class ScExtensionTable {
2932
3136
  parent = inject(ScEditor, { host: true });
2933
3137
  dialog = inject(Dialog);
@@ -3050,7 +3254,7 @@ class ScExtensionTable {
3050
3254
  <span class="sr-only">Delete table</span>
3051
3255
  </button>
3052
3256
 
3053
- <sc-extensions-separator />
3257
+ <sc-separator class="h5" orientation="vertical" />
3054
3258
 
3055
3259
  <button
3056
3260
  class="cursor-pointer rounded p-1.5 text-gray-500 hover:bg-gray-100 hover:text-gray-900 dark:text-gray-400 dark:hover:bg-gray-600 dark:hover:text-white"
@@ -3130,7 +3334,7 @@ class ScExtensionTable {
3130
3334
  <span class="sr-only">Remove column</span>
3131
3335
  </button>
3132
3336
 
3133
- <sc-extensions-separator />
3337
+ <sc-separator class="h5" orientation="vertical" />
3134
3338
 
3135
3339
  <button
3136
3340
  class="cursor-pointer rounded p-1.5 text-gray-500 hover:bg-gray-100 hover:text-gray-900 dark:text-gray-400 dark:hover:bg-gray-600 dark:hover:text-white"
@@ -3288,7 +3492,7 @@ class ScExtensionTable {
3288
3492
  <span class="sr-only">Merge or split</span>
3289
3493
  </button>
3290
3494
 
3291
- <sc-extensions-separator />
3495
+ <sc-separator class="h5" orientation="vertical" />
3292
3496
 
3293
3497
  <button
3294
3498
  class="cursor-pointer rounded p-1.5 text-gray-500 hover:bg-gray-100 hover:text-gray-900 dark:text-gray-400 dark:hover:bg-gray-600 dark:hover:text-white"
@@ -3393,7 +3597,7 @@ class ScExtensionTable {
3393
3597
  <span class="sr-only">Add cell attribute</span>
3394
3598
  </button>
3395
3599
 
3396
- <sc-extensions-separator />
3600
+ <sc-separator class="h5" orientation="vertical" />
3397
3601
 
3398
3602
  <button
3399
3603
  class="cursor-pointer rounded p-1.5 text-gray-500 hover:bg-gray-100 hover:text-gray-900 dark:text-gray-400 dark:hover:bg-gray-600 dark:hover:text-white"
@@ -3471,11 +3675,11 @@ class ScExtensionTable {
3471
3675
  </svg>
3472
3676
  <span class="sr-only">Next cell</span>
3473
3677
  </button>
3474
- `, isInline: true, styles: [""], dependencies: [{ kind: "directive", type: ScTooltip, selector: "[scTooltip]", inputs: ["scTooltip", "position"] }, { kind: "component", type: ScExtensionsSeparator, selector: "sc-extensions-separator", inputs: ["class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
3678
+ `, isInline: true, styles: [""], dependencies: [{ kind: "directive", type: ScTooltip, selector: "[scTooltip]", inputs: ["scTooltip", "position"] }, { kind: "component", type: ScSeparator, selector: "sc-separator", inputs: ["orientation", "class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
3475
3679
  }
3476
3680
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScExtensionTable, decorators: [{
3477
3681
  type: Component,
3478
- args: [{ selector: 'sc-extension-table', imports: [ScTooltip, ScExtensionsSeparator], template: `
3682
+ args: [{ selector: 'sc-extension-table', imports: [ScTooltip, ScSeparator], template: `
3479
3683
  <button
3480
3684
  class="cursor-pointer rounded p-1.5 text-gray-500 hover:bg-gray-100 hover:text-gray-900 dark:text-gray-400 dark:hover:bg-gray-600 dark:hover:text-white"
3481
3685
  (click)="insertTable()"
@@ -3527,7 +3731,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
3527
3731
  <span class="sr-only">Delete table</span>
3528
3732
  </button>
3529
3733
 
3530
- <sc-extensions-separator />
3734
+ <sc-separator class="h5" orientation="vertical" />
3531
3735
 
3532
3736
  <button
3533
3737
  class="cursor-pointer rounded p-1.5 text-gray-500 hover:bg-gray-100 hover:text-gray-900 dark:text-gray-400 dark:hover:bg-gray-600 dark:hover:text-white"
@@ -3607,7 +3811,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
3607
3811
  <span class="sr-only">Remove column</span>
3608
3812
  </button>
3609
3813
 
3610
- <sc-extensions-separator />
3814
+ <sc-separator class="h5" orientation="vertical" />
3611
3815
 
3612
3816
  <button
3613
3817
  class="cursor-pointer rounded p-1.5 text-gray-500 hover:bg-gray-100 hover:text-gray-900 dark:text-gray-400 dark:hover:bg-gray-600 dark:hover:text-white"
@@ -3765,7 +3969,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
3765
3969
  <span class="sr-only">Merge or split</span>
3766
3970
  </button>
3767
3971
 
3768
- <sc-extensions-separator />
3972
+ <sc-separator class="h5" orientation="vertical" />
3769
3973
 
3770
3974
  <button
3771
3975
  class="cursor-pointer rounded p-1.5 text-gray-500 hover:bg-gray-100 hover:text-gray-900 dark:text-gray-400 dark:hover:bg-gray-600 dark:hover:text-white"
@@ -3870,7 +4074,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
3870
4074
  <span class="sr-only">Add cell attribute</span>
3871
4075
  </button>
3872
4076
 
3873
- <sc-extensions-separator />
4077
+ <sc-separator class="h5" orientation="vertical" />
3874
4078
 
3875
4079
  <button
3876
4080
  class="cursor-pointer rounded p-1.5 text-gray-500 hover:bg-gray-100 hover:text-gray-900 dark:text-gray-400 dark:hover:bg-gray-600 dark:hover:text-white"
@@ -3951,107 +4155,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
3951
4155
  `, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush }]
3952
4156
  }], ctorParameters: () => [] });
3953
4157
 
3954
- class ScExtensionTextAlignAction {
3955
- ariaLabel1 = 'Align left';
3956
- ariaLabel2 = 'Align center';
3957
- ariaLabel3 = 'Align right';
3958
- parent = inject(ScEditor, { host: true });
3959
- extensions = inject(ScExtensions);
3960
- constructor() {
3961
- this.extensions.textAlign.set(true);
3962
- }
3963
- get editor() {
3964
- return this.parent.editor;
3965
- }
3966
- setLeftAlign() {
3967
- this.editor.chain().focus().setTextAlign('left').run();
3968
- }
3969
- setCenterAlign() {
3970
- this.editor.chain().focus().setTextAlign('center').run();
3971
- }
3972
- setRightAlign() {
3973
- this.editor.chain().focus().setTextAlign('right').run();
3974
- }
3975
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScExtensionTextAlignAction, deps: [], target: i0.ɵɵFactoryTarget.Component });
3976
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: ScExtensionTextAlignAction, isStandalone: true, selector: "sc-extension-text-align", ngImport: i0, template: `
3977
- <button
3978
- [attr.aria-label]="ariaLabel1"
3979
- [scTooltip]="ariaLabel1"
3980
- (click)="setLeftAlign()"
3981
- type="button"
3982
- sc-toggle
3983
- variant="outline"
3984
- >
3985
- <svg-align-left-icon />
3986
- <span class="sr-only">{{ ariaLabel1 }}</span>
3987
- </button>
3988
-
3989
- <button
3990
- [attr.aria-label]="ariaLabel2"
3991
- [scTooltip]="ariaLabel2"
3992
- (click)="setCenterAlign()"
3993
- type="button"
3994
- sc-toggle
3995
- variant="outline"
3996
- >
3997
- <svg-align-center-icon />
3998
- <span class="sr-only">{{ ariaLabel2 }}</span>
3999
- </button>
4000
-
4001
- <button
4002
- [attr.aria-label]="ariaLabel3"
4003
- [scTooltip]="ariaLabel3"
4004
- (click)="setRightAlign()"
4005
- type="button"
4006
- sc-toggle
4007
- variant="outline"
4008
- >
4009
- <svg-align-right-icon />
4010
- <span class="sr-only">{{ ariaLabel3 }}</span>
4011
- </button>
4012
- `, isInline: true, styles: [""], dependencies: [{ kind: "directive", type: ScTooltip, selector: "[scTooltip]", inputs: ["scTooltip", "position"] }, { kind: "component", type: SvgAlignLeftIcon, selector: "svg-align-left-icon", inputs: ["class", "svgClass"] }, { kind: "component", type: SvgAlignRightIcon, selector: "svg-align-right-icon", inputs: ["class", "svgClass"] }, { kind: "component", type: SvgAlignCenterIcon, selector: "svg-align-center-icon", inputs: ["class", "svgClass"] }, { kind: "component", type: ScToggle, selector: "button[sc-toggle]", inputs: ["variant", "size", "class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
4013
- }
4014
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScExtensionTextAlignAction, decorators: [{
4015
- type: Component,
4016
- args: [{ selector: 'sc-extension-text-align', imports: [ScTooltip, SvgAlignLeftIcon, SvgAlignRightIcon, SvgAlignCenterIcon, ScToggle], template: `
4017
- <button
4018
- [attr.aria-label]="ariaLabel1"
4019
- [scTooltip]="ariaLabel1"
4020
- (click)="setLeftAlign()"
4021
- type="button"
4022
- sc-toggle
4023
- variant="outline"
4024
- >
4025
- <svg-align-left-icon />
4026
- <span class="sr-only">{{ ariaLabel1 }}</span>
4027
- </button>
4028
-
4029
- <button
4030
- [attr.aria-label]="ariaLabel2"
4031
- [scTooltip]="ariaLabel2"
4032
- (click)="setCenterAlign()"
4033
- type="button"
4034
- sc-toggle
4035
- variant="outline"
4036
- >
4037
- <svg-align-center-icon />
4038
- <span class="sr-only">{{ ariaLabel2 }}</span>
4039
- </button>
4040
-
4041
- <button
4042
- [attr.aria-label]="ariaLabel3"
4043
- [scTooltip]="ariaLabel3"
4044
- (click)="setRightAlign()"
4045
- type="button"
4046
- sc-toggle
4047
- variant="outline"
4048
- >
4049
- <svg-align-right-icon />
4050
- <span class="sr-only">{{ ariaLabel3 }}</span>
4051
- </button>
4052
- `, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush }]
4053
- }], ctorParameters: () => [] });
4054
-
4055
4158
  class ScExtensionTextStyle {
4056
4159
  parent = inject(ScEditor, { host: true });
4057
4160
  extensions = inject(ScExtensions);
@@ -4304,7 +4407,7 @@ class ScExtensionUnderline {
4304
4407
  <svg-underline-icon />
4305
4408
  <span class="sr-only">{{ ariaLabel }}</span>
4306
4409
  </button>
4307
- `, isInline: true, styles: [""], dependencies: [{ kind: "directive", type: ScTooltip, selector: "[scTooltip]", inputs: ["scTooltip", "position"] }, { kind: "component", type: SvgUnderlineIcon, selector: "svg-underline-icon", inputs: ["class", "svgClass"] }, { kind: "component", type: ScToggle, selector: "button[sc-toggle]", inputs: ["variant", "size", "class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
4410
+ `, isInline: true, styles: [""], dependencies: [{ kind: "directive", type: ScTooltip, selector: "[scTooltip]", inputs: ["scTooltip", "position"] }, { kind: "component", type: SvgUnderlineIcon, selector: "svg-underline-icon", inputs: ["class"] }, { kind: "component", type: ScToggle, selector: "button[sc-toggle]", inputs: ["variant", "size", "class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
4308
4411
  }
4309
4412
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScExtensionUnderline, decorators: [{
4310
4413
  type: Component,
@@ -4637,30 +4740,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
4637
4740
  `, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush }]
4638
4741
  }], ctorParameters: () => [] });
4639
4742
 
4640
- class ScExtensionsGroup {
4641
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScExtensionsGroup, deps: [], target: i0.ɵɵFactoryTarget.Component });
4642
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: ScExtensionsGroup, isStandalone: true, selector: "sc-extensions-group", ngImport: i0, template: `
4643
- <div class="flex flex-wrap items-center gap-1 py-1">
4644
- <ng-content />
4645
- </div>
4646
- `, isInline: true, styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
4647
- }
4648
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScExtensionsGroup, decorators: [{
4649
- type: Component,
4650
- args: [{ selector: 'sc-extensions-group', imports: [], template: `
4651
- <div class="flex flex-wrap items-center gap-1 py-1">
4652
- <ng-content />
4653
- </div>
4654
- `, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush }]
4655
- }] });
4656
-
4657
4743
  class ScEditor {
4658
4744
  _cdr = inject(ChangeDetectorRef);
4659
4745
  editorDiv = viewChild.required('editorDiv');
4660
4746
  _value = signal('');
4661
4747
  _isEditable = signal(true);
4662
4748
  class = input('');
4663
- classes = computed(() => cn('', this.class()));
4749
+ //TODO change styles
4750
+ classes = computed(() => cn('block w-full rounded-lg border border-gray-200 bg-gray-50 dark:border-gray-600 dark:bg-gray-700', this.class()));
4664
4751
  editorClass = input('');
4665
4752
  editorClasses = computed(() => cn('mx-auto focus:outline-none', scArticleClasses(), this.editorClass()));
4666
4753
  // eslint-disable-next-line @typescript-eslint/no-empty-function
@@ -4813,58 +4900,60 @@ class ScEditor {
4813
4900
  multi: true,
4814
4901
  },
4815
4902
  ], viewQueries: [{ propertyName: "editorDiv", first: true, predicate: ["editorDiv"], descendants: true, isSignal: true }], ngImport: i0, template: `
4816
- <div
4817
- class="w-full rounded-lg border border-gray-200 bg-gray-50 dark:border-gray-600 dark:bg-gray-700"
4818
- >
4819
- <div class="border-b px-3 py-1 dark:border-gray-600">
4820
- <sc-extensions-group>
4821
- <sc-extension-history />
4822
- <sc-extensions-separator />
4823
- <sc-extension-bold />
4824
- <sc-extension-italic />
4825
- <sc-extension-underline />
4826
- <sc-extension-highlight />
4827
- <sc-extension-link />
4828
- <sc-extension-text-style />
4829
- <sc-extension-color />
4830
- <sc-extension-font-family />
4831
- <sc-extensions-separator />
4832
- <sc-extension-text-align />
4833
- </sc-extensions-group>
4834
-
4835
- <sc-extensions-group>
4836
- <sc-extension-heading />
4837
- <sc-extension-paragraph />
4838
- <sc-extensions-separator />
4839
- <sc-extension-image />
4840
- <sc-extension-youtube />
4841
- <sc-extension-bullet-list />
4842
- <sc-extension-ordered-list />
4843
- <sc-extension-blockquote />
4844
- <sc-extensions-separator />
4845
- <sc-extension-strike />
4846
- <sc-extension-horizontal-rule />
4847
- <sc-extension-code />
4848
- </sc-extensions-group>
4849
-
4850
- <sc-extensions-group>
4851
- <sc-extension-table />
4852
- </sc-extensions-group>
4853
- </div>
4854
-
4855
- <div class="rounded-b-lg bg-white px-4 py-2 dark:bg-gray-800">
4856
- <label class="sr-only" for="wysiwyg-example">Publish post</label>
4857
- <div
4858
- class="block w-full border-0 bg-white px-0 text-sm text-gray-800 focus:ring-0 dark:bg-gray-800 dark:text-white dark:placeholder:text-gray-400"
4859
- #editorDiv
4860
- ></div>
4861
- </div>
4903
+ <sc-editor-toolbar>
4904
+ <sc-editor-group>
4905
+ <sc-editor-undo />
4906
+ <sc-editor-redo />
4907
+ <sc-separator class="h-5" orientation="vertical" />
4908
+ <sc-extension-bold />
4909
+ <sc-extension-italic />
4910
+ <sc-extension-underline />
4911
+ <sc-extension-highlight />
4912
+ <sc-extension-text-style />
4913
+ <sc-extension-color />
4914
+ <sc-extension-font-family />
4915
+ <sc-extension-link />
4916
+ <sc-editor-unset-link />
4917
+ <sc-separator class="h-5" orientation="vertical" />
4918
+ <sc-editor-text-align-left />
4919
+ <sc-editor-text-align-center />
4920
+ <sc-editor-text-align-right />
4921
+ </sc-editor-group>
4922
+
4923
+ <sc-editor-group>
4924
+ <sc-extension-heading />
4925
+ <sc-extension-paragraph />
4926
+ <sc-separator class="h-5" orientation="vertical" />
4927
+ <sc-extension-image />
4928
+ <sc-extension-youtube />
4929
+ <sc-extension-bullet-list />
4930
+ <sc-extension-ordered-list />
4931
+ <sc-extension-blockquote />
4932
+ <sc-separator class="h-5" orientation="vertical" />
4933
+ <sc-extension-strike />
4934
+ <sc-extension-horizontal-rule />
4935
+ <sc-extension-code />
4936
+ </sc-editor-group>
4937
+
4938
+ <sc-editor-group>
4939
+ <sc-extension-table />
4940
+ </sc-editor-group>
4941
+ </sc-editor-toolbar>
4942
+
4943
+ <div class="rounded-b-lg bg-white px-4 py-2 dark:bg-gray-800">
4944
+ <label class="sr-only" for="wysiwyg-example">Publish post</label>
4945
+ <div
4946
+ class="block w-full border-0 bg-white px-0 text-sm text-gray-800 focus:ring-0 dark:bg-gray-800 dark:text-white dark:placeholder:text-gray-400"
4947
+ #editorDiv
4948
+ ></div>
4862
4949
  </div>
4863
- `, isInline: true, styles: [""], dependencies: [{ kind: "component", type: ScExtensionHighlight, selector: "sc-extension-highlight" }, { kind: "component", type: ScExtensionColor, selector: "sc-extension-color" }, { kind: "component", type: ScExtensionBold, selector: "sc-extension-bold" }, { kind: "component", type: ScExtensionUnderline, selector: "sc-extension-underline" }, { kind: "component", type: ScExtensionYoutube, selector: "sc-extension-youtube" }, { kind: "component", type: ScExtensionImage, selector: "sc-extension-image" }, { kind: "component", type: ScExtensionFontFamily, selector: "sc-extension-font-family" }, { kind: "component", type: ScExtensionLink, selector: "sc-extension-link" }, { kind: "component", type: ScExtensionItalic, selector: "sc-extension-italic" }, { kind: "component", type: ScExtensionBlockquote, selector: "sc-extension-blockquote" }, { kind: "component", type: ScExtensionBulletList, selector: "sc-extension-bullet-list" }, { kind: "component", type: ScExtensionOrderedList, selector: "sc-extension-ordered-list" }, { kind: "component", type: ScExtensionTextAlignAction, selector: "sc-extension-text-align" }, { kind: "component", type: ScExtensionTextStyle, selector: "sc-extension-text-style" }, { kind: "component", type: ScExtensionParagraph, selector: "sc-extension-paragraph" }, { kind: "component", type: ScExtensionHistory, selector: "sc-extension-history" }, { kind: "component", type: ScExtensionsSeparator, selector: "sc-extensions-separator", inputs: ["class"] }, { kind: "component", type: ScExtensionsGroup, selector: "sc-extensions-group" }, { kind: "component", type: ScExtensionStrike, selector: "sc-extension-strike" }, { kind: "component", type: ScExtensionHorizontalRule, selector: "sc-extension-horizontal-rule" }, { kind: "component", type: ScExtensionCode, selector: "sc-extension-code" }, { kind: "component", type: ScExtensionHeading, selector: "sc-extension-heading" }, { kind: "component", type: ScExtensionTable, selector: "sc-extension-table" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
4950
+ `, isInline: true, styles: [""], dependencies: [{ kind: "component", type: ScEditorUndo, selector: "sc-editor-undo" }, { kind: "component", type: ScEditorRedo, selector: "sc-editor-redo" }, { kind: "component", type: ScExtensionHighlight, selector: "sc-extension-highlight" }, { kind: "component", type: ScExtensionColor, selector: "sc-extension-color" }, { kind: "component", type: ScExtensionBold, selector: "sc-extension-bold" }, { kind: "component", type: ScExtensionUnderline, selector: "sc-extension-underline" }, { kind: "component", type: ScExtensionYoutube, selector: "sc-extension-youtube" }, { kind: "component", type: ScExtensionImage, selector: "sc-extension-image" }, { kind: "component", type: ScExtensionFontFamily, selector: "sc-extension-font-family" }, { kind: "component", type: ScExtensionLink, selector: "sc-extension-link" }, { kind: "component", type: ScExtensionItalic, selector: "sc-extension-italic" }, { kind: "component", type: ScExtensionBlockquote, selector: "sc-extension-blockquote" }, { kind: "component", type: ScExtensionBulletList, selector: "sc-extension-bullet-list" }, { kind: "component", type: ScExtensionOrderedList, selector: "sc-extension-ordered-list" }, { kind: "component", type: ScExtensionTextStyle, selector: "sc-extension-text-style" }, { kind: "component", type: ScExtensionParagraph, selector: "sc-extension-paragraph" }, { kind: "component", type: ScSeparator, selector: "sc-separator", inputs: ["orientation", "class"] }, { kind: "component", type: ScEditorGroup, selector: "sc-editor-group", inputs: ["class"] }, { kind: "component", type: ScExtensionStrike, selector: "sc-extension-strike" }, { kind: "component", type: ScExtensionHorizontalRule, selector: "sc-extension-horizontal-rule" }, { kind: "component", type: ScExtensionCode, selector: "sc-extension-code" }, { kind: "component", type: ScExtensionHeading, selector: "sc-extension-heading" }, { kind: "component", type: ScExtensionTable, selector: "sc-extension-table" }, { kind: "component", type: ScEditorToolbar, selector: "sc-editor-toolbar", inputs: ["class"] }, { kind: "component", type: ScEditorUnsetLink, selector: "sc-editor-unset-link" }, { kind: "component", type: ScEditorTextAlignRight, selector: "sc-editor-text-align-right" }, { kind: "component", type: ScEditorTextAlignLeft, selector: "sc-editor-text-align-left" }, { kind: "component", type: ScEditorTextAlignCenter, selector: "sc-editor-text-align-center" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
4864
4951
  }
4865
4952
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScEditor, decorators: [{
4866
4953
  type: Component,
4867
4954
  args: [{ selector: 'sc-editor', imports: [
4955
+ ScEditorUndo,
4956
+ ScEditorRedo,
4868
4957
  ScExtensionHighlight,
4869
4958
  ScExtensionColor,
4870
4959
  ScExtensionBold,
@@ -4877,64 +4966,67 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
4877
4966
  ScExtensionBlockquote,
4878
4967
  ScExtensionBulletList,
4879
4968
  ScExtensionOrderedList,
4880
- ScExtensionTextAlignAction,
4881
4969
  ScExtensionTextStyle,
4882
4970
  ScExtensionParagraph,
4883
- ScExtensionHistory,
4884
- ScExtensionsSeparator,
4885
- ScExtensionsGroup,
4971
+ ScSeparator,
4972
+ ScEditorGroup,
4886
4973
  ScExtensionStrike,
4887
4974
  ScExtensionHorizontalRule,
4888
4975
  ScExtensionCode,
4889
4976
  ScExtensionHeading,
4890
4977
  ScExtensionTable,
4978
+ ScEditorToolbar,
4979
+ ScEditorUnsetLink,
4980
+ ScEditorTextAlignRight,
4981
+ ScEditorTextAlignLeft,
4982
+ ScEditorTextAlignCenter,
4891
4983
  ], template: `
4892
- <div
4893
- class="w-full rounded-lg border border-gray-200 bg-gray-50 dark:border-gray-600 dark:bg-gray-700"
4894
- >
4895
- <div class="border-b px-3 py-1 dark:border-gray-600">
4896
- <sc-extensions-group>
4897
- <sc-extension-history />
4898
- <sc-extensions-separator />
4899
- <sc-extension-bold />
4900
- <sc-extension-italic />
4901
- <sc-extension-underline />
4902
- <sc-extension-highlight />
4903
- <sc-extension-link />
4904
- <sc-extension-text-style />
4905
- <sc-extension-color />
4906
- <sc-extension-font-family />
4907
- <sc-extensions-separator />
4908
- <sc-extension-text-align />
4909
- </sc-extensions-group>
4910
-
4911
- <sc-extensions-group>
4912
- <sc-extension-heading />
4913
- <sc-extension-paragraph />
4914
- <sc-extensions-separator />
4915
- <sc-extension-image />
4916
- <sc-extension-youtube />
4917
- <sc-extension-bullet-list />
4918
- <sc-extension-ordered-list />
4919
- <sc-extension-blockquote />
4920
- <sc-extensions-separator />
4921
- <sc-extension-strike />
4922
- <sc-extension-horizontal-rule />
4923
- <sc-extension-code />
4924
- </sc-extensions-group>
4925
-
4926
- <sc-extensions-group>
4927
- <sc-extension-table />
4928
- </sc-extensions-group>
4929
- </div>
4930
-
4931
- <div class="rounded-b-lg bg-white px-4 py-2 dark:bg-gray-800">
4932
- <label class="sr-only" for="wysiwyg-example">Publish post</label>
4933
- <div
4934
- class="block w-full border-0 bg-white px-0 text-sm text-gray-800 focus:ring-0 dark:bg-gray-800 dark:text-white dark:placeholder:text-gray-400"
4935
- #editorDiv
4936
- ></div>
4937
- </div>
4984
+ <sc-editor-toolbar>
4985
+ <sc-editor-group>
4986
+ <sc-editor-undo />
4987
+ <sc-editor-redo />
4988
+ <sc-separator class="h-5" orientation="vertical" />
4989
+ <sc-extension-bold />
4990
+ <sc-extension-italic />
4991
+ <sc-extension-underline />
4992
+ <sc-extension-highlight />
4993
+ <sc-extension-text-style />
4994
+ <sc-extension-color />
4995
+ <sc-extension-font-family />
4996
+ <sc-extension-link />
4997
+ <sc-editor-unset-link />
4998
+ <sc-separator class="h-5" orientation="vertical" />
4999
+ <sc-editor-text-align-left />
5000
+ <sc-editor-text-align-center />
5001
+ <sc-editor-text-align-right />
5002
+ </sc-editor-group>
5003
+
5004
+ <sc-editor-group>
5005
+ <sc-extension-heading />
5006
+ <sc-extension-paragraph />
5007
+ <sc-separator class="h-5" orientation="vertical" />
5008
+ <sc-extension-image />
5009
+ <sc-extension-youtube />
5010
+ <sc-extension-bullet-list />
5011
+ <sc-extension-ordered-list />
5012
+ <sc-extension-blockquote />
5013
+ <sc-separator class="h-5" orientation="vertical" />
5014
+ <sc-extension-strike />
5015
+ <sc-extension-horizontal-rule />
5016
+ <sc-extension-code />
5017
+ </sc-editor-group>
5018
+
5019
+ <sc-editor-group>
5020
+ <sc-extension-table />
5021
+ </sc-editor-group>
5022
+ </sc-editor-toolbar>
5023
+
5024
+ <div class="rounded-b-lg bg-white px-4 py-2 dark:bg-gray-800">
5025
+ <label class="sr-only" for="wysiwyg-example">Publish post</label>
5026
+ <div
5027
+ class="block w-full border-0 bg-white px-0 text-sm text-gray-800 focus:ring-0 dark:bg-gray-800 dark:text-white dark:placeholder:text-gray-400"
5028
+ #editorDiv
5029
+ ></div>
4938
5030
  </div>
4939
5031
  `, host: {
4940
5032
  '[class]': 'classes()',
@@ -4947,7 +5039,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
4947
5039
  ] }]
4948
5040
  }], ctorParameters: () => [] });
4949
5041
 
4950
- const buttonVariants = cva('inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_.svg]:pointer-events-none [&_.svg]:size-4 [&_.svg]:shrink-0', {
5042
+ const buttonVariants = cva('inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0', {
4951
5043
  variants: {
4952
5044
  variant: {
4953
5045
  primary: 'bg-primary text-primary-foreground hover:bg-primary/90',
@@ -4972,93 +5064,131 @@ const buttonVariants = cva('inline-flex items-center justify-center gap-2 whites
4972
5064
  class ScButton {
4973
5065
  variant = input('primary');
4974
5066
  size = input('default');
4975
- class = input('');
4976
- classes = computed(() => cn(buttonVariants({ variant: this.variant(), size: this.size() }), this.class()));
5067
+ classInput = input('', {
5068
+ alias: 'class',
5069
+ });
5070
+ class = computed(() => cn(buttonVariants({ variant: this.variant(), size: this.size() }), this.classInput()));
5071
+ disabled = input(false, {
5072
+ transform: booleanAttribute,
5073
+ });
4977
5074
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScButton, deps: [], target: i0.ɵɵFactoryTarget.Component });
4978
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.5", type: ScButton, isStandalone: true, selector: "button[sc-button], a[sc-button]", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, ngImport: i0, template: `
5075
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.5", type: ScButton, isStandalone: true, selector: "button[sc-button], a[sc-button]", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, classInput: { classPropertyName: "classInput", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "class()", "attr.data-disabled": "disabled()" } }, ngImport: i0, template: `
4979
5076
  <ng-content />
4980
5077
  `, isInline: true, styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
4981
5078
  }
4982
5079
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScButton, decorators: [{
4983
5080
  type: Component,
4984
- args: [{ selector: 'button[sc-button], a[sc-button]', imports: [], template: `
4985
- <ng-content />
4986
- `, host: {
4987
- '[class]': 'classes()',
4988
- }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush }]
4989
- }] });
4990
-
4991
- class ScListbox {
4992
- class = input('');
4993
- classes = computed(() => cn('relative z-50 max-h-96 w-full min-w-32 overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2', this.class()));
4994
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScListbox, deps: [], target: i0.ɵɵFactoryTarget.Component });
4995
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.5", type: ScListbox, isStandalone: true, selector: "ul[sc-listbox]", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, ngImport: i0, template: `
4996
- <ng-content />
4997
- `, isInline: true, styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
4998
- }
4999
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScListbox, decorators: [{
5000
- type: Component,
5001
- args: [{ selector: 'ul[sc-listbox]', imports: [], template: `
5002
- <ng-content />
5003
- `, host: {
5004
- '[class]': 'classes()',
5005
- }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush }]
5006
- }] });
5007
-
5008
- class ScListboxOption {
5009
- class = input('');
5010
- classes = computed(() => cn('relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50', this.class()));
5011
- isSelected = input.required();
5012
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScListboxOption, deps: [], target: i0.ɵɵFactoryTarget.Component });
5013
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.5", type: ScListboxOption, isStandalone: true, selector: "li[sc-listbox-option]", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, isSelected: { classPropertyName: "isSelected", publicName: "isSelected", isSignal: true, isRequired: true, transformFunction: null } }, host: { properties: { "class": "classes()" } }, ngImport: i0, template: `
5014
- @if (isSelected()) {
5015
- <svg-check-icon class="absolute left-2 flex size-4 items-center justify-center" />
5016
- }
5017
-
5018
- <ng-content />
5019
- `, isInline: true, styles: [""], dependencies: [{ kind: "component", type: SvgCheckIcon, selector: "svg-check-icon", inputs: ["class", "svgClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
5020
- }
5021
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScListboxOption, decorators: [{
5022
- type: Component,
5023
- args: [{ selector: 'li[sc-listbox-option]', imports: [SvgCheckIcon], template: `
5024
- @if (isSelected()) {
5025
- <svg-check-icon class="absolute left-2 flex size-4 items-center justify-center" />
5026
- }
5027
-
5081
+ args: [{ selector: 'button[sc-button], a[sc-button]', imports: [], template: `
5028
5082
  <ng-content />
5029
5083
  `, host: {
5030
- '[class]': 'classes()',
5084
+ '[class]': 'class()',
5085
+ '[attr.data-disabled]': 'disabled()',
5031
5086
  }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush }]
5032
5087
  }] });
5033
5088
 
5089
+ class ScSelectState {
5090
+ //1 undefined for init
5091
+ //2 selected value
5092
+ //3 null nothing selected
5093
+ value = signal(undefined);
5094
+ disabled = signal(false);
5095
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScSelectState, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
5096
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScSelectState });
5097
+ }
5098
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScSelectState, decorators: [{
5099
+ type: Injectable
5100
+ }] });
5101
+
5034
5102
  class ScOption {
5103
+ state = inject(ScSelectState);
5104
+ /** The unique ID of the option. */
5105
+ id = signal(inject(_IdGenerator).getId('sc-option-'));
5106
+ classInput = input('', {
5107
+ alias: 'class',
5108
+ });
5109
+ class = computed(() => cn('relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none data-[active=true]:bg-accent data-[active=true]:text-accent-foreground data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50', this.classInput()));
5110
+ isSelected = computed(() => this.value() === this.state.value());
5035
5111
  value = input.required();
5036
5112
  labelEl = viewChild.required('label');
5037
5113
  label = computed(() => {
5038
- return this.labelEl().nativeElement.textContent?.trim();
5114
+ return this.labelEl().nativeElement.textContent?.trim() ?? '';
5115
+ });
5116
+ element = inject(ElementRef);
5117
+ /** Gets the host DOM element. */
5118
+ getHostElement() {
5119
+ return this.element.nativeElement;
5120
+ }
5121
+ active = signal(false);
5122
+ setActiveStyles() {
5123
+ this.active.set(true);
5124
+ }
5125
+ setInactiveStyles() {
5126
+ this.active.set(false);
5127
+ }
5128
+ disabled;
5129
+ getLabel() {
5130
+ return this.label();
5131
+ }
5132
+ disabledByInput = input(false, {
5133
+ alias: 'disabled',
5134
+ transform: booleanAttribute,
5039
5135
  });
5136
+ _disabled = computed(() => this.disabledByInput() || this.disabled || this.state.disabled());
5137
+ toggle() {
5138
+ if (this.isSelected()) {
5139
+ this.deselect();
5140
+ }
5141
+ else {
5142
+ this.select();
5143
+ }
5144
+ }
5145
+ select() {
5146
+ if (this._disabled()) {
5147
+ return;
5148
+ }
5149
+ this.state.value.set(this.value());
5150
+ }
5151
+ deselect() {
5152
+ if (this._disabled()) {
5153
+ return;
5154
+ }
5155
+ this.state.value.set(null);
5156
+ }
5040
5157
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScOption, deps: [], target: i0.ɵɵFactoryTarget.Component });
5041
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "19.0.5", type: ScOption, isStandalone: true, selector: "sc-option", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null } }, viewQueries: [{ propertyName: "labelEl", first: true, predicate: ["label"], descendants: true, isSignal: true }], ngImport: i0, template: `
5158
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.5", type: ScOption, isStandalone: true, selector: "sc-option", inputs: { classInput: { classPropertyName: "classInput", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null }, disabledByInput: { classPropertyName: "disabledByInput", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "mouseover": "setActiveStyles()", "mouseleave": "setInactiveStyles()", "click": "toggle()" }, properties: { "id": "id()", "class": "class()", "attr.data-disabled": "_disabled()", "attr.data-active": "active()" } }, viewQueries: [{ propertyName: "labelEl", first: true, predicate: ["label"], descendants: true, isSignal: true }], ngImport: i0, template: `
5159
+ @if (isSelected()) {
5160
+ <svg-check-icon class="absolute left-2 flex size-4 items-center justify-center" />
5161
+ }
5162
+
5042
5163
  <span #label>
5043
5164
  <ng-content />
5044
5165
  </span>
5045
- `, isInline: true, styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
5166
+ `, isInline: true, styles: [""], dependencies: [{ kind: "component", type: SvgCheckIcon, selector: "svg-check-icon", inputs: ["class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
5046
5167
  }
5047
5168
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScOption, decorators: [{
5048
5169
  type: Component,
5049
- args: [{ selector: 'sc-option', imports: [], template: `
5170
+ args: [{ selector: 'sc-option', imports: [SvgCheckIcon], template: `
5171
+ @if (isSelected()) {
5172
+ <svg-check-icon class="absolute left-2 flex size-4 items-center justify-center" />
5173
+ }
5174
+
5050
5175
  <span #label>
5051
5176
  <ng-content />
5052
5177
  </span>
5053
- `, host: {}, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush }]
5178
+ `, host: {
5179
+ '[id]': 'id()',
5180
+ '[class]': 'class()',
5181
+ '[attr.data-disabled]': '_disabled()',
5182
+ '[attr.data-active]': 'active()',
5183
+ '(mouseover)': 'setActiveStyles()',
5184
+ '(mouseleave)': 'setInactiveStyles()',
5185
+ '(click)': 'toggle()',
5186
+ }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush }]
5054
5187
  }] });
5055
5188
 
5056
5189
  class ScSelect {
5057
- static nextId = 0;
5058
- id = 0;
5059
- _getPanelId() {
5060
- return `panel-${this.id}`;
5061
- }
5190
+ state = inject(ScSelectState);
5191
+ panelId = inject(_IdGenerator).getId('sc-select-panel-');
5062
5192
  _cdr = inject(ChangeDetectorRef);
5063
5193
  _overlay = inject(Overlay);
5064
5194
  _dir = inject(Directionality, { optional: true });
@@ -5068,23 +5198,48 @@ class ScSelect {
5068
5198
  _panelTemplate = viewChild.required('panelTemplate');
5069
5199
  placeholder = input('');
5070
5200
  isOpen = signal(false);
5201
+ options = contentChildren(ScOption);
5202
+ activeDescendant = signal(null);
5071
5203
  constructor() {
5072
- this.id = ++ScSelect.nextId;
5204
+ effect(() => {
5205
+ //init
5206
+ if (this.state.value() === undefined) {
5207
+ this.state.value.set(this.value());
5208
+ }
5209
+ });
5210
+ effect(() => {
5211
+ if (this.value() !== this.state.value()) {
5212
+ this.setValue(this.state.value());
5213
+ }
5214
+ });
5215
+ effect(() => {
5216
+ this.syncSelectedState(this.value(), this.options(), this.options()[0]);
5217
+ });
5218
+ this.keyManager.change.subscribe(() => this.activeDescendant.set(this.keyManager.activeItem?.id() ?? null));
5073
5219
  }
5074
- options = contentChildren(ScOption);
5220
+ /**
5221
+ * Scrolls an option into view.
5222
+ * @param option Option to be scrolled into view.
5223
+ * @param position Position to which to align the option relative to the scrollable container.
5224
+ */
5225
+ scrollOptionIntoView(option, position) {
5226
+ option.getHostElement().scrollIntoView({ block: position, inline: position });
5227
+ }
5228
+ injector = inject(Injector);
5229
+ keyManager = new ActiveDescendantKeyManager(this.options, this.injector)
5230
+ .withHomeAndEnd(true)
5231
+ .withPageUpDown(true)
5232
+ .withVerticalOrientation(true);
5075
5233
  value = model(undefined);
5076
5234
  isDisabled = signal(false);
5077
5235
  writeValue(value) {
5078
5236
  this.value.set(value);
5079
5237
  }
5080
- handleValueChange(v) {
5081
- this.setValue(v[0]);
5082
- this.close();
5083
- }
5084
5238
  setValue(value) {
5085
5239
  this.value.set(value);
5086
5240
  this._onChange(value);
5087
5241
  this._cdr.markForCheck();
5242
+ this.close();
5088
5243
  }
5089
5244
  // eslint-disable-next-line @typescript-eslint/no-empty-function
5090
5245
  _onChange = () => { };
@@ -5166,39 +5321,84 @@ class ScSelect {
5166
5321
  }
5167
5322
  close() {
5168
5323
  if (this.isOpen()) {
5324
+ this.focusOnTrigger();
5169
5325
  this.isOpen.set(false);
5170
5326
  this._overlayRef?.detach();
5171
5327
  }
5172
5328
  }
5329
+ focusOnTrigger() {
5330
+ this.scSelectTrigger().nativeElement.focus();
5331
+ }
5332
+ /**
5333
+ * Synchronizes the internal state of the component based on a specific selected date.
5334
+ * @param value Currently selected date.
5335
+ * @param options Options rendered out in the timepicker.
5336
+ * @param fallback Option to set as active if no option is selected.
5337
+ */
5338
+ syncSelectedState(value, options, fallback) {
5339
+ let hasSelected = false;
5340
+ for (const option of options) {
5341
+ if (value && option.value() === value) {
5342
+ this.scrollOptionIntoView(option, 'center');
5343
+ untracked(() => this.keyManager.setActiveItem(option));
5344
+ hasSelected = true;
5345
+ }
5346
+ }
5347
+ // If no option was selected, we need to reset the key manager since
5348
+ // it might be holding onto an option that no longer exists.
5349
+ if (!hasSelected) {
5350
+ if (fallback) {
5351
+ untracked(() => this.keyManager.setActiveItem(fallback));
5352
+ this.scrollOptionIntoView(fallback, 'center');
5353
+ }
5354
+ else {
5355
+ untracked(() => this.keyManager.setActiveItem(-1));
5356
+ }
5357
+ }
5358
+ }
5173
5359
  /** Handles keyboard events while the overlay is open. */
5174
5360
  _handleKeydown(event) {
5175
- const keyCode = event.keyCode;
5176
- if (keyCode === TAB) {
5361
+ const key = event.key;
5362
+ if (key === 'Tab') {
5177
5363
  this.close();
5178
5364
  }
5179
- else if (keyCode === ESCAPE && !hasModifierKey(event)) {
5365
+ else if (key === 'Escape' && !hasModifierKey(event)) {
5180
5366
  event.preventDefault();
5181
5367
  this.close();
5182
5368
  }
5183
- else if (keyCode === ENTER) {
5184
- //TODO for me it's mean it's was selected
5185
- this.close();
5369
+ else if (key === 'Enter') {
5370
+ event.preventDefault();
5371
+ if (this.keyManager.activeItem) {
5372
+ this.setValue(this.keyManager.activeItem.value() ?? '');
5373
+ }
5374
+ else {
5375
+ this.close();
5376
+ }
5377
+ }
5378
+ else {
5379
+ const previousActive = this.keyManager.activeItem;
5380
+ this.keyManager.onKeydown(event);
5381
+ const currentActive = this.keyManager.activeItem;
5382
+ if (currentActive && currentActive !== previousActive) {
5383
+ this.scrollOptionIntoView(currentActive, 'nearest');
5384
+ }
5186
5385
  }
5187
5386
  }
5188
5387
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScSelect, deps: [], target: i0.ɵɵFactoryTarget.Component });
5189
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.5", type: ScSelect, isStandalone: true, selector: "sc-select", inputs: { placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, providers: [
5388
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "19.0.5", type: ScSelect, isStandalone: true, selector: "sc-select", inputs: { placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, providers: [
5190
5389
  {
5191
5390
  provide: NG_VALUE_ACCESSOR,
5192
5391
  useExisting: forwardRef(() => ScSelect),
5193
5392
  multi: true,
5194
5393
  },
5394
+ ScSelectState,
5195
5395
  ], queries: [{ propertyName: "options", predicate: ScOption, isSignal: true }], viewQueries: [{ propertyName: "scSelectTrigger", first: true, predicate: ["scSelectTrigger"], descendants: true, isSignal: true }, { propertyName: "_panelTemplate", first: true, predicate: ["panelTemplate"], descendants: true, isSignal: true }], ngImport: i0, template: `
5196
5396
  <button
5197
5397
  class="flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1"
5198
5398
  #scSelectTrigger
5199
5399
  [disabled]="isDisabled()"
5200
5400
  [attr.aria-expanded]="_isExpanded()"
5201
- [attr.aria-controls]="_getPanelId()"
5401
+ [attr.aria-controls]="panelId"
5202
5402
  (click)="open()"
5203
5403
  type="button"
5204
5404
  role="combobox"
@@ -5209,43 +5409,24 @@ class ScSelect {
5209
5409
 
5210
5410
  <ng-template #panelTemplate>
5211
5411
  <ul
5212
- [id]="_getPanelId()"
5213
- [cdkTrapFocusAutoCapture]="true"
5214
- (cdkListboxValueChange)="handleValueChange($event.value)"
5215
- sc-listbox
5216
- cdkListbox
5217
- cdkTrapFocus
5412
+ class="relative z-50 max-h-96 w-full min-w-32 overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2"
5413
+ [id]="panelId"
5414
+ role="listbox"
5218
5415
  >
5219
- @for (option of options(); track $index) {
5220
- <li
5221
- [isSelected]="option.value() === this.value()"
5222
- [cdkOption]="option.value()"
5223
- sc-listbox-option
5224
- >
5225
- {{ option.label() }}
5226
- </li>
5227
- }
5416
+ <ng-content />
5228
5417
  </ul>
5229
5418
  </ng-template>
5230
- `, isInline: true, styles: [""], dependencies: [{ kind: "component", type: SvgChevronDownIcon, selector: "svg-chevron-down-icon", inputs: ["class", "svgClass"] }, { kind: "ngmodule", type: OverlayModule }, { kind: "component", type: ScListbox, selector: "ul[sc-listbox]", inputs: ["class"] }, { kind: "component", type: ScListboxOption, selector: "li[sc-listbox-option]", inputs: ["class", "isSelected"] }, { kind: "directive", type: CdkOption, selector: "[cdkOption]", inputs: ["id", "cdkOption", "cdkOptionTypeaheadLabel", "cdkOptionDisabled", "tabindex"], exportAs: ["cdkOption"] }, { kind: "directive", type: CdkListbox, selector: "[cdkListbox]", inputs: ["id", "tabindex", "cdkListboxValue", "cdkListboxMultiple", "cdkListboxDisabled", "cdkListboxUseActiveDescendant", "cdkListboxOrientation", "cdkListboxCompareWith", "cdkListboxNavigationWrapDisabled", "cdkListboxNavigatesDisabledOptions"], outputs: ["cdkListboxValueChange"], exportAs: ["cdkListbox"] }, { kind: "ngmodule", type: A11yModule }, { kind: "directive", type: i1$1.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
5419
+ `, isInline: true, styles: [""], dependencies: [{ kind: "component", type: SvgChevronDownIcon, selector: "svg-chevron-down-icon", inputs: ["class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
5231
5420
  }
5232
5421
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScSelect, decorators: [{
5233
5422
  type: Component,
5234
- args: [{ selector: 'sc-select', imports: [
5235
- SvgChevronDownIcon,
5236
- OverlayModule,
5237
- ScListbox,
5238
- ScListboxOption,
5239
- CdkOption,
5240
- CdkListbox,
5241
- A11yModule,
5242
- ], template: `
5423
+ args: [{ selector: 'sc-select', imports: [SvgChevronDownIcon], template: `
5243
5424
  <button
5244
5425
  class="flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1"
5245
5426
  #scSelectTrigger
5246
5427
  [disabled]="isDisabled()"
5247
5428
  [attr.aria-expanded]="_isExpanded()"
5248
- [attr.aria-controls]="_getPanelId()"
5429
+ [attr.aria-controls]="panelId"
5249
5430
  (click)="open()"
5250
5431
  type="button"
5251
5432
  role="combobox"
@@ -5256,22 +5437,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
5256
5437
 
5257
5438
  <ng-template #panelTemplate>
5258
5439
  <ul
5259
- [id]="_getPanelId()"
5260
- [cdkTrapFocusAutoCapture]="true"
5261
- (cdkListboxValueChange)="handleValueChange($event.value)"
5262
- sc-listbox
5263
- cdkListbox
5264
- cdkTrapFocus
5440
+ class="relative z-50 max-h-96 w-full min-w-32 overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2"
5441
+ [id]="panelId"
5442
+ role="listbox"
5265
5443
  >
5266
- @for (option of options(); track $index) {
5267
- <li
5268
- [isSelected]="option.value() === this.value()"
5269
- [cdkOption]="option.value()"
5270
- sc-listbox-option
5271
- >
5272
- {{ option.label() }}
5273
- </li>
5274
- }
5444
+ <ng-content />
5275
5445
  </ul>
5276
5446
  </ng-template>
5277
5447
  `, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
@@ -5280,6 +5450,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
5280
5450
  useExisting: forwardRef(() => ScSelect),
5281
5451
  multi: true,
5282
5452
  },
5453
+ ScSelectState,
5283
5454
  ] }]
5284
5455
  }], ctorParameters: () => [] });
5285
5456
 
@@ -5317,7 +5488,7 @@ class ScPageItem {
5317
5488
  </a>
5318
5489
  }
5319
5490
  </li>
5320
- `, isInline: true, styles: [""], dependencies: [{ kind: "component", type: ScButton, selector: "button[sc-button], a[sc-button]", inputs: ["variant", "size", "class"] }, { kind: "component", type: SvgEllipsisIcon, selector: "svg-ellipsis-icon", inputs: ["class", "svgClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
5491
+ `, isInline: true, styles: [""], dependencies: [{ kind: "component", type: ScButton, selector: "button[sc-button], a[sc-button]", inputs: ["variant", "size", "class", "disabled"] }, { kind: "component", type: SvgEllipsisIcon, selector: "svg-ellipsis-icon", inputs: ["class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
5321
5492
  }
5322
5493
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScPageItem, decorators: [{
5323
5494
  type: Component,
@@ -5558,7 +5729,7 @@ class ScPaginator {
5558
5729
  }
5559
5730
  </ul>
5560
5731
  </nav>
5561
- `, isInline: true, styles: [""], dependencies: [{ kind: "component", type: ScPageItem, selector: "sc-page-item", inputs: ["currentPage", "page"], outputs: ["pageChanged"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: ScPagination, selector: "nav[sc-pagination]", inputs: ["class"] }, { kind: "component", type: ScButton, selector: "button[sc-button], a[sc-button]", inputs: ["variant", "size", "class"] }, { kind: "component", type: SvgChevronLeftIcon, selector: "svg-chevron-left-icon", inputs: ["class", "svgClass"] }, { kind: "component", type: SvgChevronsLeftIcon, selector: "svg-chevrons-left-icon", inputs: ["class", "svgClass"] }, { kind: "component", type: SvgChevronRightIcon, selector: "svg-chevron-right-icon", inputs: ["class", "svgClass"] }, { kind: "component", type: SvgChevronsRightIcon, selector: "svg-chevrons-right-icon", inputs: ["class", "svgClass"] }, { kind: "component", type: ScSelect, selector: "sc-select", inputs: ["placeholder", "value"], outputs: ["valueChange"] }, { kind: "component", type: ScOption, selector: "sc-option", inputs: ["value"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
5732
+ `, isInline: true, styles: [""], dependencies: [{ kind: "component", type: ScPageItem, selector: "sc-page-item", inputs: ["currentPage", "page"], outputs: ["pageChanged"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: ScPagination, selector: "nav[sc-pagination]", inputs: ["class"] }, { kind: "component", type: ScButton, selector: "button[sc-button], a[sc-button]", inputs: ["variant", "size", "class", "disabled"] }, { kind: "component", type: SvgChevronLeftIcon, selector: "svg-chevron-left-icon", inputs: ["class"] }, { kind: "component", type: SvgChevronsLeftIcon, selector: "svg-chevrons-left-icon", inputs: ["class"] }, { kind: "component", type: SvgChevronRightIcon, selector: "svg-chevron-right-icon", inputs: ["class"] }, { kind: "component", type: SvgChevronsRightIcon, selector: "svg-chevrons-right-icon", inputs: ["class"] }, { kind: "component", type: ScSelect, selector: "sc-select", inputs: ["placeholder", "value"], outputs: ["valueChange"] }, { kind: "component", type: ScOption, selector: "sc-option", inputs: ["class", "value", "disabled"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
5562
5733
  }
5563
5734
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScPaginator, decorators: [{
5564
5735
  type: Component,
@@ -5818,7 +5989,7 @@ class ScMonthDays {
5818
5989
  {{ day.slice(-2) }}
5819
5990
  </button>
5820
5991
  }
5821
- `, isInline: true, styles: [""], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ScButton, selector: "button[sc-button], a[sc-button]", inputs: ["variant", "size", "class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
5992
+ `, isInline: true, styles: [""], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ScButton, selector: "button[sc-button], a[sc-button]", inputs: ["variant", "size", "class", "disabled"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
5822
5993
  }
5823
5994
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScMonthDays, decorators: [{
5824
5995
  type: Component,
@@ -5891,7 +6062,7 @@ class ScMonthYearHeader {
5891
6062
  >
5892
6063
  <svg-chevron-right-icon />
5893
6064
  </button>
5894
- `, isInline: true, styles: [""], dependencies: [{ kind: "component", type: SvgChevronRightIcon, selector: "svg-chevron-right-icon", inputs: ["class", "svgClass"] }, { kind: "component", type: SvgChevronLeftIcon, selector: "svg-chevron-left-icon", inputs: ["class", "svgClass"] }, { kind: "component", type: ScButton, selector: "button[sc-button], a[sc-button]", inputs: ["variant", "size", "class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
6065
+ `, isInline: true, styles: [""], dependencies: [{ kind: "component", type: SvgChevronRightIcon, selector: "svg-chevron-right-icon", inputs: ["class"] }, { kind: "component", type: SvgChevronLeftIcon, selector: "svg-chevron-left-icon", inputs: ["class"] }, { kind: "component", type: ScButton, selector: "button[sc-button], a[sc-button]", inputs: ["variant", "size", "class", "disabled"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
5895
6066
  }
5896
6067
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScMonthYearHeader, decorators: [{
5897
6068
  type: Component,
@@ -6082,7 +6253,7 @@ class ScCalendar {
6082
6253
  <button sc-button type="button">Done</button>
6083
6254
  </div>
6084
6255
  </div>
6085
- `, isInline: true, styles: [""], dependencies: [{ kind: "component", type: ScMonthYearHeader, selector: "sc-month-year-header", inputs: ["class", "monthYear"], outputs: ["monthYearChange"] }, { kind: "component", type: ScMonthDays, selector: "sc-month-days", inputs: ["class", "weekDaysNames", "days", "firstDayMonth", "selectedDay"], outputs: ["selectedDayChange"] }, { kind: "component", type: ScCard, selector: "div[sc-card]", inputs: ["class"] }, { kind: "component", type: ScCardHeader, selector: "div[sc-card-header]", inputs: ["class"] }, { kind: "component", type: ScButton, selector: "button[sc-button], a[sc-button]", inputs: ["variant", "size", "class"] }, { kind: "component", type: ScCardFooter, selector: "div[sc-card-footer]", inputs: ["class"] }, { kind: "component", type: ScCardContent, selector: "div[sc-card-content]", inputs: ["class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
6256
+ `, isInline: true, styles: [""], dependencies: [{ kind: "component", type: ScMonthYearHeader, selector: "sc-month-year-header", inputs: ["class", "monthYear"], outputs: ["monthYearChange"] }, { kind: "component", type: ScMonthDays, selector: "sc-month-days", inputs: ["class", "weekDaysNames", "days", "firstDayMonth", "selectedDay"], outputs: ["selectedDayChange"] }, { kind: "component", type: ScCard, selector: "div[sc-card]", inputs: ["class"] }, { kind: "component", type: ScCardHeader, selector: "div[sc-card-header]", inputs: ["class"] }, { kind: "component", type: ScButton, selector: "button[sc-button], a[sc-button]", inputs: ["variant", "size", "class", "disabled"] }, { kind: "component", type: ScCardFooter, selector: "div[sc-card-footer]", inputs: ["class"] }, { kind: "component", type: ScCardContent, selector: "div[sc-card-content]", inputs: ["class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
6086
6257
  }
6087
6258
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScCalendar, decorators: [{
6088
6259
  type: Component,
@@ -6145,10 +6316,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
6145
6316
 
6146
6317
  const scInputStyles = signal('flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-base ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm');
6147
6318
  class ScInput {
6148
- class = input('');
6149
- classes = computed(() => cn(scInputStyles(), this.class()));
6319
+ classInput = input('', {
6320
+ alias: 'class',
6321
+ });
6322
+ class = computed(() => cn(scInputStyles(), this.classInput()));
6150
6323
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScInput, deps: [], target: i0.ɵɵFactoryTarget.Component });
6151
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.5", type: ScInput, isStandalone: true, selector: "input[sc-input]", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, ngImport: i0, template: `
6324
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.5", type: ScInput, isStandalone: true, selector: "input[sc-input]", inputs: { classInput: { classPropertyName: "classInput", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "class()" } }, ngImport: i0, template: `
6152
6325
  <ng-content />
6153
6326
  `, isInline: true, styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
6154
6327
  }
@@ -6157,7 +6330,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
6157
6330
  args: [{ selector: 'input[sc-input]', imports: [], template: `
6158
6331
  <ng-content />
6159
6332
  `, host: {
6160
- '[class]': 'classes()',
6333
+ '[class]': 'class()',
6161
6334
  }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush }]
6162
6335
  }] });
6163
6336
 
@@ -6332,7 +6505,7 @@ class ScDatePicker {
6332
6505
  <svg-calendar-icon />
6333
6506
  </button>
6334
6507
  <input #input sc-input scDateInput type="text" placeholder="Select date" />
6335
- `, isInline: true, styles: [""], dependencies: [{ kind: "component", type: ScInput, selector: "input[sc-input]", inputs: ["class"] }, { kind: "component", type: SvgCalendarIcon, selector: "svg-calendar-icon", inputs: ["class", "svgClass"] }, { kind: "component", type: ScButton, selector: "button[sc-button], a[sc-button]", inputs: ["variant", "size", "class"] }, { kind: "directive", type: ScDateInput, selector: "[scDateInput]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
6508
+ `, isInline: true, styles: [""], dependencies: [{ kind: "component", type: ScInput, selector: "input[sc-input]", inputs: ["class"] }, { kind: "component", type: SvgCalendarIcon, selector: "svg-calendar-icon", inputs: ["class"] }, { kind: "component", type: ScButton, selector: "button[sc-button], a[sc-button]", inputs: ["variant", "size", "class", "disabled"] }, { kind: "directive", type: ScDateInput, selector: "[scDateInput]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
6336
6509
  }
6337
6510
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScDatePicker, decorators: [{
6338
6511
  type: Component,
@@ -6547,7 +6720,7 @@ class ScThemeToggler {
6547
6720
  <svg-sun-icon />
6548
6721
  }
6549
6722
  </button>
6550
- `, isInline: true, styles: [""], dependencies: [{ kind: "component", type: SvgMoonIcon, selector: "svg-moon-icon", inputs: ["class", "svgClass"] }, { kind: "component", type: SvgSunIcon, selector: "svg-sun-icon", inputs: ["class", "svgClass"] }, { kind: "directive", type: ScTooltip, selector: "[scTooltip]", inputs: ["scTooltip", "position"] }, { kind: "component", type: ScButton, selector: "button[sc-button], a[sc-button]", inputs: ["variant", "size", "class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
6723
+ `, isInline: true, styles: [""], dependencies: [{ kind: "component", type: SvgMoonIcon, selector: "svg-moon-icon", inputs: ["class"] }, { kind: "component", type: SvgSunIcon, selector: "svg-sun-icon", inputs: ["class"] }, { kind: "directive", type: ScTooltip, selector: "[scTooltip]", inputs: ["scTooltip", "position"] }, { kind: "component", type: ScButton, selector: "button[sc-button], a[sc-button]", inputs: ["variant", "size", "class", "disabled"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
6551
6724
  }
6552
6725
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScThemeToggler, decorators: [{
6553
6726
  type: Component,
@@ -6908,7 +7081,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
6908
7081
 
6909
7082
  class ScBreadcrumbSeparator {
6910
7083
  class = input('');
6911
- classes = computed(() => cn('[&>.svg]:w-3.5 [&>.svg]:h-3.5', this.class()));
7084
+ classes = computed(() => cn('[&_svg]:w-3.5 [&_svg]:h-3.5', this.class()));
6912
7085
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScBreadcrumbSeparator, deps: [], target: i0.ɵɵFactoryTarget.Component });
6913
7086
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.5", type: ScBreadcrumbSeparator, isStandalone: true, selector: "li[sc-breadcrumb-separator]", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "presentation" }, properties: { "attr.aria-hidden": "true", "class": "classes()" } }, ngImport: i0, template: `
6914
7087
  <ng-content />
@@ -6932,7 +7105,7 @@ class ScBreadcrumbEllipsis {
6932
7105
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.5", type: ScBreadcrumbEllipsis, isStandalone: true, selector: "span[sc-breadcrumb-ellipsis]", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "presentation" }, properties: { "attr.aria-hidden": "true", "class": "classes()" } }, ngImport: i0, template: `
6933
7106
  <svg-ellipsis-icon class="size-4" />
6934
7107
  <span class="sr-only">More</span>
6935
- `, isInline: true, styles: [""], dependencies: [{ kind: "component", type: SvgEllipsisIcon, selector: "svg-ellipsis-icon", inputs: ["class", "svgClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
7108
+ `, isInline: true, styles: [""], dependencies: [{ kind: "component", type: SvgEllipsisIcon, selector: "svg-ellipsis-icon", inputs: ["class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
6936
7109
  }
6937
7110
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScBreadcrumbEllipsis, decorators: [{
6938
7111
  type: Component,
@@ -6946,6 +7119,37 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
6946
7119
  }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush }]
6947
7120
  }] });
6948
7121
 
7122
+ class ScToggleGroup {
7123
+ type = input('single');
7124
+ class = input('');
7125
+ _class = computed(() => cn('flex items-center justify-center gap-1', this.class()));
7126
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScToggleGroup, deps: [], target: i0.ɵɵFactoryTarget.Component });
7127
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.5", type: ScToggleGroup, isStandalone: true, selector: "sc-toggle-group", inputs: { type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "_class()" } }, ngImport: i0, template: `
7128
+ <ng-content />
7129
+ `, isInline: true, styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
7130
+ }
7131
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScToggleGroup, decorators: [{
7132
+ type: Component,
7133
+ args: [{ selector: 'sc-toggle-group', imports: [], template: `
7134
+ <ng-content />
7135
+ `, host: {
7136
+ '[class]': '_class()',
7137
+ }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush }]
7138
+ }] });
7139
+
7140
+ class ScToggleGroupItem {
7141
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScToggleGroupItem, deps: [], target: i0.ɵɵFactoryTarget.Component });
7142
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: ScToggleGroupItem, isStandalone: true, selector: "sc-toggle-group-item", ngImport: i0, template: `
7143
+ <p>toggle-group-item works!</p>
7144
+ `, isInline: true, styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
7145
+ }
7146
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScToggleGroupItem, decorators: [{
7147
+ type: Component,
7148
+ args: [{ selector: 'sc-toggle-group-item', imports: [], template: `
7149
+ <p>toggle-group-item works!</p>
7150
+ `, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush }]
7151
+ }] });
7152
+
6949
7153
  class ScDialogClose {
6950
7154
  class = input('');
6951
7155
  classes = computed(() => cn('absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground', this.class()));
@@ -7068,7 +7272,7 @@ class ScDialog {
7068
7272
  <button sc-button type="submit">Save changes</button>
7069
7273
  </div>
7070
7274
  </div>
7071
- `, isInline: true, styles: [""], dependencies: [{ kind: "component", type: ScDialogHeader, selector: "div[sc-dialog-header]", inputs: ["class"] }, { kind: "component", type: ScDialogTitle, selector: "h2[sc-dialog-title]", inputs: ["class"] }, { kind: "component", type: ScDialogDescription, selector: "p[sc-dialog-description]", inputs: ["class"] }, { kind: "component", type: ScDialogFooter, selector: "div[sc-dialog-footer]", inputs: ["class"] }, { kind: "component", type: ScDialogClose, selector: "button[sc-dialog-close]", inputs: ["class"] }, { kind: "component", type: SvgXIcon, selector: "svg-x-icon", inputs: ["class", "svgClass"] }, { kind: "component", type: ScDialogContent, selector: "div[sc-dialog-content]", inputs: ["class"] }, { kind: "component", type: ScButton, selector: "button[sc-button], a[sc-button]", inputs: ["variant", "size", "class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
7275
+ `, isInline: true, styles: [""], dependencies: [{ kind: "component", type: ScDialogHeader, selector: "div[sc-dialog-header]", inputs: ["class"] }, { kind: "component", type: ScDialogTitle, selector: "h2[sc-dialog-title]", inputs: ["class"] }, { kind: "component", type: ScDialogDescription, selector: "p[sc-dialog-description]", inputs: ["class"] }, { kind: "component", type: ScDialogFooter, selector: "div[sc-dialog-footer]", inputs: ["class"] }, { kind: "component", type: ScDialogClose, selector: "button[sc-dialog-close]", inputs: ["class"] }, { kind: "component", type: SvgXIcon, selector: "svg-x-icon", inputs: ["class"] }, { kind: "component", type: ScDialogContent, selector: "div[sc-dialog-content]", inputs: ["class"] }, { kind: "component", type: ScButton, selector: "button[sc-button], a[sc-button]", inputs: ["variant", "size", "class", "disabled"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
7072
7276
  }
7073
7277
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScDialog, decorators: [{
7074
7278
  type: Component,
@@ -7101,11 +7305,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
7101
7305
  `, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush }]
7102
7306
  }] });
7103
7307
 
7104
- const alertVariants = cva('relative w-full rounded-lg border p-4 [&>.svg+div]:translate-y-[-3px] [&>.svg]:absolute [&>.svg]:left-4 [&>.svg]:top-4 [&>.svg]:text-foreground [&>.svg~*]:pl-7', {
7308
+ const alertVariants = cva('relative w-full rounded-lg border p-4 [&_svg]:size-4 [&>.svg-host+p]:translate-y-[-3px] [&_svg]:absolute [&_svg]:left-4 [&_svg]:top-4 [&_svg]:text-foreground [&>.svg-host~*]:pl-7', {
7105
7309
  variants: {
7106
7310
  variant: {
7107
7311
  default: 'bg-background text-foreground',
7108
- destructive: 'border-destructive/50 text-destructive dark:border-destructive [&>.svg]:text-destructive',
7312
+ destructive: 'border-destructive/50 text-destructive dark:border-destructive [&_svg]:text-destructive',
7109
7313
  },
7110
7314
  },
7111
7315
  defaultVariants: {
@@ -7274,7 +7478,7 @@ class ScAlertDialog {
7274
7478
  <button sc-button>Continue</button>
7275
7479
  </div>
7276
7480
  </div>
7277
- `, isInline: true, styles: [""], dependencies: [{ kind: "component", type: ScButton, selector: "button[sc-button], a[sc-button]", inputs: ["variant", "size", "class"] }, { kind: "component", type: ScAlertDialogFooter, selector: "div[sc-alert-dialog-footer]", inputs: ["class"] }, { kind: "component", type: ScAlertDialogHeader, selector: "div[sc-alert-dialog-header]", inputs: ["class"] }, { kind: "component", type: scAlertDialogDescription, selector: "p[sc-alert-dialog-description]", inputs: ["class"] }, { kind: "component", type: ScAlertDialogTitle, selector: "h2[sc-alert-dialog-title]", inputs: ["class"] }, { kind: "component", type: ScAlertDialogContent, selector: "div[sc-alert-dialog-content]", inputs: ["class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
7481
+ `, isInline: true, styles: [""], dependencies: [{ kind: "component", type: ScButton, selector: "button[sc-button], a[sc-button]", inputs: ["variant", "size", "class", "disabled"] }, { kind: "component", type: ScAlertDialogFooter, selector: "div[sc-alert-dialog-footer]", inputs: ["class"] }, { kind: "component", type: ScAlertDialogHeader, selector: "div[sc-alert-dialog-header]", inputs: ["class"] }, { kind: "component", type: scAlertDialogDescription, selector: "p[sc-alert-dialog-description]", inputs: ["class"] }, { kind: "component", type: ScAlertDialogTitle, selector: "h2[sc-alert-dialog-title]", inputs: ["class"] }, { kind: "component", type: ScAlertDialogContent, selector: "div[sc-alert-dialog-content]", inputs: ["class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
7278
7482
  }
7279
7483
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScAlertDialog, decorators: [{
7280
7484
  type: Component,
@@ -7339,47 +7543,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
7339
7543
 
7340
7544
  class ScScrollArea {
7341
7545
  host = inject(ElementRef);
7342
- class = input('');
7343
- classes = computed(() => cn('', this.class()));
7344
- visibility = input('native');
7345
- //TODO remove use of ngAfterViewInit
7546
+ classInput = input('', {
7547
+ alias: 'class',
7548
+ });
7549
+ class = computed(() => cn('', this.classInput()));
7346
7550
  ngAfterViewInit() {
7347
7551
  const height = this.host.nativeElement.scrollHeight;
7348
7552
  console.log(height);
7349
7553
  }
7350
7554
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScScrollArea, deps: [], target: i0.ɵɵFactoryTarget.Component });
7351
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.5", type: ScScrollArea, isStandalone: true, selector: "div[sc-scroll-area]", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, visibility: { classPropertyName: "visibility", publicName: "visibility", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, ngImport: i0, template: `
7352
- <ng-scrollbar
7353
- [visibility]="visibility()"
7354
- [style]="{
7355
- '--scrollbar-border-radius': '100px',
7356
- '--scrollbar-padding': '1px',
7357
- '--scrollbar-thumb-color': 'hsl(var(--border))',
7358
- '--scrollbar-thumb-hover-color': 'hsl(var(--border))',
7359
- '--scrollbar-size': '7px',
7360
- }"
7361
- >
7362
- <ng-content />
7363
- </ng-scrollbar>
7364
- `, isInline: true, styles: [""], dependencies: [{ kind: "ngmodule", type: NgScrollbarModule }, { kind: "component", type: i1$2.NgScrollbar, selector: "ng-scrollbar:not([externalViewport])", exportAs: ["ngScrollbar"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
7555
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.5", type: ScScrollArea, isStandalone: true, selector: "div[sc-scroll-area]", inputs: { classInput: { classPropertyName: "classInput", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "class()" } }, ngImport: i0, template: `
7556
+ <ng-content />
7557
+ `, isInline: true, styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
7365
7558
  }
7366
7559
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScScrollArea, decorators: [{
7367
7560
  type: Component,
7368
- args: [{ selector: 'div[sc-scroll-area]', imports: [NgScrollbarModule], template: `
7369
- <ng-scrollbar
7370
- [visibility]="visibility()"
7371
- [style]="{
7372
- '--scrollbar-border-radius': '100px',
7373
- '--scrollbar-padding': '1px',
7374
- '--scrollbar-thumb-color': 'hsl(var(--border))',
7375
- '--scrollbar-thumb-hover-color': 'hsl(var(--border))',
7376
- '--scrollbar-size': '7px',
7377
- }"
7378
- >
7379
- <ng-content />
7380
- </ng-scrollbar>
7561
+ args: [{ selector: 'div[sc-scroll-area]', imports: [], template: `
7562
+ <ng-content />
7381
7563
  `, host: {
7382
- '[class]': 'classes()',
7564
+ '[class]': 'class()',
7383
7565
  }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush }]
7384
7566
  }] });
7385
7567
 
@@ -7456,7 +7638,7 @@ class ScTabs {
7456
7638
  </div>
7457
7639
 
7458
7640
  <ng-content />
7459
- `, isInline: true, styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
7641
+ `, isInline: true, styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
7460
7642
  }
7461
7643
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScTabs, decorators: [{
7462
7644
  type: Component,
@@ -7515,6 +7697,163 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
7515
7697
  }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush }]
7516
7698
  }] });
7517
7699
 
7700
+ class ScTabContent2 {
7701
+ template = viewChild.required('template');
7702
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScTabContent2, deps: [], target: i0.ɵɵFactoryTarget.Component });
7703
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "19.0.5", type: ScTabContent2, isStandalone: true, selector: "sc-tab-content2", viewQueries: [{ propertyName: "template", first: true, predicate: ["template"], descendants: true, isSignal: true }], ngImport: i0, template: `
7704
+ <ng-template #template>
7705
+ <ng-content />
7706
+ </ng-template>
7707
+ `, isInline: true, styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
7708
+ }
7709
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScTabContent2, decorators: [{
7710
+ type: Component,
7711
+ args: [{ selector: 'sc-tab-content2', imports: [], template: `
7712
+ <ng-template #template>
7713
+ <ng-content />
7714
+ </ng-template>
7715
+ `, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush }]
7716
+ }] });
7717
+
7718
+ class ScTabLabel2 {
7719
+ template = viewChild.required('template');
7720
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScTabLabel2, deps: [], target: i0.ɵɵFactoryTarget.Component });
7721
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "19.0.5", type: ScTabLabel2, isStandalone: true, selector: "sc-tab-label2", viewQueries: [{ propertyName: "template", first: true, predicate: ["template"], descendants: true, isSignal: true }], ngImport: i0, template: `
7722
+ <ng-template #template>
7723
+ <ng-content />
7724
+ </ng-template>
7725
+ `, isInline: true, styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
7726
+ }
7727
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScTabLabel2, decorators: [{
7728
+ type: Component,
7729
+ args: [{ selector: 'sc-tab-label2', imports: [], template: `
7730
+ <ng-template #template>
7731
+ <ng-content />
7732
+ </ng-template>
7733
+ `, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, hostDirectives: [] }]
7734
+ }] });
7735
+
7736
+ class ScTabGroup {
7737
+ tabLabels = contentChildren(ScTabLabel2, { descendants: true });
7738
+ tabContents = contentChildren(ScTabContent2, { descendants: true });
7739
+ ngAfterViewInit() {
7740
+ console.log(this.tabLabels());
7741
+ }
7742
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScTabGroup, deps: [], target: i0.ɵɵFactoryTarget.Component });
7743
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.5", type: ScTabGroup, isStandalone: true, selector: "sc-tab-group", queries: [{ propertyName: "tabLabels", predicate: ScTabLabel2, descendants: true, isSignal: true }, { propertyName: "tabContents", predicate: ScTabContent2, descendants: true, isSignal: true }], ngImport: i0, template: `
7744
+ <div class="group relative my-4 flex flex-col space-y-2">
7745
+ <div class="relative mr-auto w-full" dir="ltr" data-orientation="horizontal">
7746
+ <div class="flex items-center justify-between pb-3">
7747
+ <div
7748
+ class="inline-flex h-9 w-full items-center justify-start rounded-none border-b bg-transparent p-0 text-muted-foreground"
7749
+ style="outline: none;"
7750
+ tabindex="0"
7751
+ data-orientation="horizontal"
7752
+ >
7753
+ @for (tab of tabLabels(); track tab) {
7754
+ <ng-container [ngTemplateOutlet]="tab.template()"></ng-container>
7755
+ }
7756
+ </div>
7757
+ </div>
7758
+ <div
7759
+ class="relative mt-2 rounded-md border ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2"
7760
+ id="radix-:r17g:-content-preview"
7761
+ style="animation-duration: 0s;"
7762
+ tabindex="0"
7763
+ data-state="active"
7764
+ data-orientation="horizontal"
7765
+ >
7766
+ <div class="theme-zinc w-full" style="--radius: 0.5rem;">
7767
+ <div class="preview flex min-h-[350px] w-full items-center justify-center p-10">
7768
+ <div
7769
+ class="relative h-72 w-48 overflow-hidden rounded-md border"
7770
+ dir="ltr"
7771
+ style="position: relative; --radix-scroll-area-corner-width: 0px; --radix-scroll-area-corner-height: 0px;"
7772
+ >
7773
+ <div
7774
+ class="size-full rounded-[inherit]"
7775
+ style="overflow: hidden scroll;"
7776
+ data-radix-scroll-area-viewport=""
7777
+ >
7778
+ @for (content of tabContents(); track content) {
7779
+ <ng-container [ngTemplateOutlet]="content.template()"></ng-container>
7780
+ }
7781
+ </div>
7782
+ </div>
7783
+ </div>
7784
+ </div>
7785
+ </div>
7786
+ </div>
7787
+ </div>
7788
+
7789
+ <ng-content />
7790
+ `, isInline: true, styles: [""], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
7791
+ }
7792
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScTabGroup, decorators: [{
7793
+ type: Component,
7794
+ args: [{ selector: 'sc-tab-group', imports: [NgTemplateOutlet], template: `
7795
+ <div class="group relative my-4 flex flex-col space-y-2">
7796
+ <div class="relative mr-auto w-full" dir="ltr" data-orientation="horizontal">
7797
+ <div class="flex items-center justify-between pb-3">
7798
+ <div
7799
+ class="inline-flex h-9 w-full items-center justify-start rounded-none border-b bg-transparent p-0 text-muted-foreground"
7800
+ style="outline: none;"
7801
+ tabindex="0"
7802
+ data-orientation="horizontal"
7803
+ >
7804
+ @for (tab of tabLabels(); track tab) {
7805
+ <ng-container [ngTemplateOutlet]="tab.template()"></ng-container>
7806
+ }
7807
+ </div>
7808
+ </div>
7809
+ <div
7810
+ class="relative mt-2 rounded-md border ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2"
7811
+ id="radix-:r17g:-content-preview"
7812
+ style="animation-duration: 0s;"
7813
+ tabindex="0"
7814
+ data-state="active"
7815
+ data-orientation="horizontal"
7816
+ >
7817
+ <div class="theme-zinc w-full" style="--radius: 0.5rem;">
7818
+ <div class="preview flex min-h-[350px] w-full items-center justify-center p-10">
7819
+ <div
7820
+ class="relative h-72 w-48 overflow-hidden rounded-md border"
7821
+ dir="ltr"
7822
+ style="position: relative; --radix-scroll-area-corner-width: 0px; --radix-scroll-area-corner-height: 0px;"
7823
+ >
7824
+ <div
7825
+ class="size-full rounded-[inherit]"
7826
+ style="overflow: hidden scroll;"
7827
+ data-radix-scroll-area-viewport=""
7828
+ >
7829
+ @for (content of tabContents(); track content) {
7830
+ <ng-container [ngTemplateOutlet]="content.template()"></ng-container>
7831
+ }
7832
+ </div>
7833
+ </div>
7834
+ </div>
7835
+ </div>
7836
+ </div>
7837
+ </div>
7838
+ </div>
7839
+
7840
+ <ng-content />
7841
+ `, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush }]
7842
+ }] });
7843
+
7844
+ class ScTabItem {
7845
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScTabItem, deps: [], target: i0.ɵɵFactoryTarget.Component });
7846
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: ScTabItem, isStandalone: true, selector: "sc-tab-item", ngImport: i0, template: `
7847
+ <ng-content />
7848
+ `, isInline: true, styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
7849
+ }
7850
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScTabItem, decorators: [{
7851
+ type: Component,
7852
+ args: [{ selector: 'sc-tab-item', imports: [], template: `
7853
+ <ng-content />
7854
+ `, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush }]
7855
+ }] });
7856
+
7518
7857
  const toastVariants = cva('group pointer-events-auto relative flex w-full items-center justify-between space-x-4 overflow-hidden rounded-md border p-6 pr-8 shadow-lg transition-all data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)] data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)] data-[swipe=move]:transition-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[swipe=end]:animate-out data-[state=closed]:fade-out-80 data-[state=closed]:slide-out-to-right-full data-[state=open]:slide-in-from-top-full data-[state=open]:sm:slide-in-from-bottom-full', {
7519
7858
  variants: {
7520
7859
  variant: {
@@ -7707,7 +8046,7 @@ class ScToastExample {
7707
8046
  </ol>
7708
8047
 
7709
8048
  -->
7710
- `, isInline: true, styles: [""], dependencies: [{ kind: "component", type: ScToastClose, selector: "button[sc-toast-close]", inputs: ["class"] }, { kind: "component", type: SvgXIcon, selector: "svg-x-icon", inputs: ["class", "svgClass"] }, { kind: "component", type: ScToastAction, selector: "button[sc-toast-action]", inputs: ["class"] }, { kind: "component", type: ScToastDescription, selector: "p[sc-toast-description]", inputs: ["class"] }, { kind: "component", type: ScToastTitle, selector: "h2[sc-toast-title]", inputs: ["class"] }, { kind: "component", type: ScToast, selector: "li[sc-toast]", inputs: ["variant", "class"] }, { kind: "component", type: ScToastContent, selector: "div[sc-toast-content]", inputs: ["class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
8049
+ `, isInline: true, styles: [""], dependencies: [{ kind: "component", type: ScToastClose, selector: "button[sc-toast-close]", inputs: ["class"] }, { kind: "component", type: SvgXIcon, selector: "svg-x-icon", inputs: ["class"] }, { kind: "component", type: ScToastAction, selector: "button[sc-toast-action]", inputs: ["class"] }, { kind: "component", type: ScToastDescription, selector: "p[sc-toast-description]", inputs: ["class"] }, { kind: "component", type: ScToastTitle, selector: "h2[sc-toast-title]", inputs: ["class"] }, { kind: "component", type: ScToast, selector: "li[sc-toast]", inputs: ["variant", "class"] }, { kind: "component", type: ScToastContent, selector: "div[sc-toast-content]", inputs: ["class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
7711
8050
  }
7712
8051
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScToastExample, decorators: [{
7713
8052
  type: Component,
@@ -8070,7 +8409,7 @@ class ScCheckbox {
8070
8409
  } @else if (checked() === true) {
8071
8410
  <svg-check-icon [class]="svgClasses()" />
8072
8411
  }
8073
- `, isInline: true, styles: [""], dependencies: [{ kind: "component", type: SvgCheckIcon, selector: "svg-check-icon", inputs: ["class", "svgClass"] }, { kind: "component", type: SvgMinusIcon, selector: "svg-minus-icon", inputs: ["class", "svgClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
8412
+ `, isInline: true, styles: [""], dependencies: [{ kind: "component", type: SvgCheckIcon, selector: "svg-check-icon", inputs: ["class"] }, { kind: "component", type: SvgMinusIcon, selector: "svg-minus-icon", inputs: ["class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
8074
8413
  }
8075
8414
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScCheckbox, decorators: [{
8076
8415
  type: Component,
@@ -8110,7 +8449,7 @@ class ScAccordion {
8110
8449
  <cdk-accordion>
8111
8450
  <ng-content />
8112
8451
  </cdk-accordion>
8113
- `, isInline: true, styles: [""], dependencies: [{ kind: "ngmodule", type: CdkAccordionModule }, { kind: "directive", type: i1$4.CdkAccordion, selector: "cdk-accordion, [cdkAccordion]", inputs: ["multi"], exportAs: ["cdkAccordion"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
8452
+ `, isInline: true, styles: [""], dependencies: [{ kind: "ngmodule", type: CdkAccordionModule }, { kind: "directive", type: i1$2.CdkAccordion, selector: "cdk-accordion, [cdkAccordion]", inputs: ["multi"], exportAs: ["cdkAccordion"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
8114
8453
  }
8115
8454
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScAccordion, decorators: [{
8116
8455
  type: Component,
@@ -8142,7 +8481,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
8142
8481
 
8143
8482
  class ScAccordionTrigger {
8144
8483
  class = input('');
8145
- classes = computed(() => cn('flex flex-1 items-center justify-between py-4 font-medium transition-all hover:underline [&[data-state=open]>.svg]:rotate-180', this.class()));
8484
+ classes = computed(() => cn('flex flex-1 items-center justify-between py-4 font-medium transition-all hover:underline [&[data-state=open]>svg]:rotate-180', this.class()));
8146
8485
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScAccordionTrigger, deps: [], target: i0.ɵɵFactoryTarget.Component });
8147
8486
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.5", type: ScAccordionTrigger, isStandalone: true, selector: "button[sc-accordion-trigger]", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, ngImport: i0, template: `
8148
8487
  <ng-content />
@@ -8179,7 +8518,7 @@ class ScAccordionItem {
8179
8518
  <ng-content select="sc-accordion-content" />
8180
8519
  }
8181
8520
  </cdk-accordion-item>
8182
- `, isInline: true, styles: [""], dependencies: [{ kind: "ngmodule", type: CdkAccordionModule }, { kind: "directive", type: i1$4.CdkAccordionItem, selector: "cdk-accordion-item, [cdkAccordionItem]", inputs: ["expanded", "disabled"], outputs: ["closed", "opened", "destroyed", "expandedChange"], exportAs: ["cdkAccordionItem"] }, { kind: "component", type: SvgChevronDownIcon, selector: "svg-chevron-down-icon", inputs: ["class", "svgClass"] }, { kind: "component", type: SvgChevronUpIcon, selector: "svg-chevron-up-icon", inputs: ["class", "svgClass"] }, { kind: "component", type: ScAccordionHeader, selector: "h3[sc-accordion-header]", inputs: ["class"] }, { kind: "component", type: ScAccordionTrigger, selector: "button[sc-accordion-trigger]", inputs: ["class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
8521
+ `, isInline: true, styles: [""], dependencies: [{ kind: "ngmodule", type: CdkAccordionModule }, { kind: "directive", type: i1$2.CdkAccordionItem, selector: "cdk-accordion-item, [cdkAccordionItem]", inputs: ["expanded", "disabled"], outputs: ["closed", "opened", "destroyed", "expandedChange"], exportAs: ["cdkAccordionItem"] }, { kind: "component", type: SvgChevronDownIcon, selector: "svg-chevron-down-icon", inputs: ["class"] }, { kind: "component", type: SvgChevronUpIcon, selector: "svg-chevron-up-icon", inputs: ["class"] }, { kind: "component", type: ScAccordionHeader, selector: "h3[sc-accordion-header]", inputs: ["class"] }, { kind: "component", type: ScAccordionTrigger, selector: "button[sc-accordion-trigger]", inputs: ["class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
8183
8522
  }
8184
8523
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScAccordionItem, decorators: [{
8185
8524
  type: Component,
@@ -8443,23 +8782,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
8443
8782
 
8444
8783
  class ScRadioItem {
8445
8784
  state = inject(ScRadioGroupState);
8446
- id = input.required();
8785
+ id = signal(inject(_IdGenerator).getId('sc-radio-item-'));
8786
+ name = computed(() => {
8787
+ return this.state.name();
8788
+ });
8447
8789
  value = input.required();
8448
8790
  checked = computed(() => {
8449
8791
  return this.value() === this.state.selectedValue();
8450
8792
  });
8451
- name = computed(() => {
8452
- return this.state.name();
8793
+ disabledByInput = input(false, {
8794
+ alias: 'disabled',
8795
+ transform: booleanAttribute,
8453
8796
  });
8454
- disabled = input(false);
8455
- class = input('row-start-1 col-start-1');
8456
- classes = computed(() => cn('appearance-none aspect-square h-4 w-4 rounded-full border border-primary text-primary ring-offset-background focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50', this.class()));
8457
- hostClass = input('');
8458
- hostClasses = computed(() => cn('flex items-center space-x-2', this.hostClass()));
8459
- circleHostClass = input('row-start-1 col-start-1 h-4 w-4 flex items-center justify-center');
8460
- circleClass = input('');
8461
- circleClasses = computed(() => cn('h-2.5 w-2.5 fill-primary text-primary', this.circleClass()));
8462
- radioChecked = output();
8797
+ disabled = computed(() => this.disabledByInput() || this.state.disabled());
8798
+ class = input('');
8799
+ _class = computed(() => cn('flex items-center space-x-2', this.class()));
8800
+ inputClass = input('');
8801
+ _inputClass = computed(() => cn('row-start-1 col-start-1', 'appearance-none aspect-square h-4 w-4 rounded-full border border-primary text-primary ring-offset-background focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50', this.inputClass()));
8802
+ svgWrapperClass = input('row-start-1 col-start-1 h-4 w-4 flex items-center justify-center');
8803
+ svgClass = input('');
8804
+ _svgClass = computed(() => cn('h-2.5 w-2.5 fill-primary text-primary', this.svgClass()));
8463
8805
  toggle() {
8464
8806
  if (this.disabled()) {
8465
8807
  return;
@@ -8467,32 +8809,48 @@ class ScRadioItem {
8467
8809
  this.state.selectedValue.set(this.value());
8468
8810
  }
8469
8811
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScRadioItem, deps: [], target: i0.ɵɵFactoryTarget.Component });
8470
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.5", type: ScRadioItem, isStandalone: true, selector: "sc-radio-item", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: true, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, hostClass: { classPropertyName: "hostClass", publicName: "hostClass", isSignal: true, isRequired: false, transformFunction: null }, circleHostClass: { classPropertyName: "circleHostClass", publicName: "circleHostClass", isSignal: true, isRequired: false, transformFunction: null }, circleClass: { classPropertyName: "circleClass", publicName: "circleClass", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { radioChecked: "radioChecked" }, host: { listeners: { "click": "toggle()" }, properties: { "class": "hostClasses()" } }, ngImport: i0, template: `
8812
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.5", type: ScRadioItem, isStandalone: true, selector: "sc-radio-item", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null }, disabledByInput: { classPropertyName: "disabledByInput", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, inputClass: { classPropertyName: "inputClass", publicName: "inputClass", isSignal: true, isRequired: false, transformFunction: null }, svgWrapperClass: { classPropertyName: "svgWrapperClass", publicName: "svgWrapperClass", isSignal: true, isRequired: false, transformFunction: null }, svgClass: { classPropertyName: "svgClass", publicName: "svgClass", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "click": "toggle()" }, properties: { "class": "_class()" } }, ngImport: i0, template: `
8471
8813
  <div class="grid grid-cols-[1fr]">
8472
- <input [id]="id()" [class]="classes()" [disabled]="disabled()" [name]="name()" type="radio" />
8814
+ <input
8815
+ [id]="id()"
8816
+ [class]="_inputClass()"
8817
+ [disabled]="disabled()"
8818
+ [name]="name()"
8819
+ type="radio"
8820
+ />
8473
8821
 
8474
8822
  @if (checked() === true) {
8475
- <svg-circle-icon [class]="circleHostClass()" [svgClass]="circleClasses()" />
8823
+ <span [class]="svgWrapperClass()">
8824
+ <svg-circle-icon [class]="_svgClass()" />
8825
+ </span>
8476
8826
  }
8477
8827
  </div>
8478
8828
 
8479
8829
  <label [for]="id()" sc-label><ng-content /></label>
8480
- `, isInline: true, styles: [""], dependencies: [{ kind: "component", type: SvgCircleIcon, selector: "svg-circle-icon", inputs: ["class", "svgClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
8830
+ `, isInline: true, styles: [""], dependencies: [{ kind: "component", type: SvgCircleIcon, selector: "svg-circle-icon", inputs: ["class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
8481
8831
  }
8482
8832
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScRadioItem, decorators: [{
8483
8833
  type: Component,
8484
8834
  args: [{ selector: 'sc-radio-item', imports: [SvgCircleIcon], template: `
8485
8835
  <div class="grid grid-cols-[1fr]">
8486
- <input [id]="id()" [class]="classes()" [disabled]="disabled()" [name]="name()" type="radio" />
8836
+ <input
8837
+ [id]="id()"
8838
+ [class]="_inputClass()"
8839
+ [disabled]="disabled()"
8840
+ [name]="name()"
8841
+ type="radio"
8842
+ />
8487
8843
 
8488
8844
  @if (checked() === true) {
8489
- <svg-circle-icon [class]="circleHostClass()" [svgClass]="circleClasses()" />
8845
+ <span [class]="svgWrapperClass()">
8846
+ <svg-circle-icon [class]="_svgClass()" />
8847
+ </span>
8490
8848
  }
8491
8849
  </div>
8492
8850
 
8493
8851
  <label [for]="id()" sc-label><ng-content /></label>
8494
8852
  `, host: {
8495
- '[class]': 'hostClasses()',
8853
+ '[class]': '_class()',
8496
8854
  '(click)': 'toggle()',
8497
8855
  }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush }]
8498
8856
  }] });
@@ -8712,7 +9070,7 @@ class ScInputOTPSeparator {
8712
9070
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScInputOTPSeparator, deps: [], target: i0.ɵɵFactoryTarget.Component });
8713
9071
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.5", type: ScInputOTPSeparator, isStandalone: true, selector: "sc-input-otp-separator", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, ngImport: i0, template: `
8714
9072
  <svg-dot-icon />
8715
- `, isInline: true, styles: [""], dependencies: [{ kind: "component", type: SvgDotIcon, selector: "svg-dot-icon", inputs: ["class", "svgClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
9073
+ `, isInline: true, styles: [""], dependencies: [{ kind: "component", type: SvgDotIcon, selector: "svg-dot-icon", inputs: ["class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
8716
9074
  }
8717
9075
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScInputOTPSeparator, decorators: [{
8718
9076
  type: Component,
@@ -9231,33 +9589,33 @@ class ScAspectRatio {
9231
9589
  @if (priority()) {
9232
9590
  <img
9233
9591
  [class]="imageClasses()"
9234
- [ngSrc]="src()"
9592
+ [src]="src()"
9235
9593
  [alt]="alt()"
9236
9594
  [style]="imageStyle()"
9237
9595
  fill
9238
9596
  priority
9239
9597
  />
9240
9598
  } @else {
9241
- <img [class]="imageClasses()" [ngSrc]="src()" [alt]="alt()" [style]="imageStyle()" fill />
9599
+ <img [class]="imageClasses()" [src]="src()" [alt]="alt()" [style]="imageStyle()" fill />
9242
9600
  }
9243
9601
  </div>
9244
- `, isInline: true, styles: [""], dependencies: [{ kind: "directive", type: NgOptimizedImage, selector: "img[ngSrc]", inputs: ["ngSrc", "ngSrcset", "sizes", "width", "height", "loading", "priority", "loaderParams", "disableOptimizedSrcset", "fill", "placeholder", "placeholderConfig", "src", "srcset"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
9602
+ `, isInline: true, styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
9245
9603
  }
9246
9604
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScAspectRatio, decorators: [{
9247
9605
  type: Component,
9248
- args: [{ selector: 'sc-aspect-ratio', imports: [NgOptimizedImage], template: `
9606
+ args: [{ selector: 'sc-aspect-ratio', imports: [], template: `
9249
9607
  <div [class]="wrapperClass()" [style]="wrapperStyle()">
9250
9608
  @if (priority()) {
9251
9609
  <img
9252
9610
  [class]="imageClasses()"
9253
- [ngSrc]="src()"
9611
+ [src]="src()"
9254
9612
  [alt]="alt()"
9255
9613
  [style]="imageStyle()"
9256
9614
  fill
9257
9615
  priority
9258
9616
  />
9259
9617
  } @else {
9260
- <img [class]="imageClasses()" [ngSrc]="src()" [alt]="alt()" [style]="imageStyle()" fill />
9618
+ <img [class]="imageClasses()" [src]="src()" [alt]="alt()" [style]="imageStyle()" fill />
9261
9619
  }
9262
9620
  </div>
9263
9621
  `, host: {
@@ -9550,7 +9908,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
9550
9908
  class ScContextMenuTriggerFor {
9551
9909
  scContextMenuTriggerFor = input.required();
9552
9910
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScContextMenuTriggerFor, deps: [], target: i0.ɵɵFactoryTarget.Directive });
9553
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.0.5", type: ScContextMenuTriggerFor, isStandalone: true, selector: "[scContextMenuTriggerFor]", inputs: { scContextMenuTriggerFor: { classPropertyName: "scContextMenuTriggerFor", publicName: "scContextMenuTriggerFor", isSignal: true, isRequired: true, transformFunction: null } }, hostDirectives: [{ directive: i1$5.CdkContextMenuTrigger, inputs: ["cdkContextMenuTriggerFor", "scContextMenuTriggerFor"] }], ngImport: i0 });
9911
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.0.5", type: ScContextMenuTriggerFor, isStandalone: true, selector: "[scContextMenuTriggerFor]", inputs: { scContextMenuTriggerFor: { classPropertyName: "scContextMenuTriggerFor", publicName: "scContextMenuTriggerFor", isSignal: true, isRequired: true, transformFunction: null } }, hostDirectives: [{ directive: i1$3.CdkContextMenuTrigger, inputs: ["cdkContextMenuTriggerFor", "scContextMenuTriggerFor"] }], ngImport: i0 });
9554
9912
  }
9555
9913
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScContextMenuTriggerFor, decorators: [{
9556
9914
  type: Directive,
@@ -9569,7 +9927,7 @@ class ScMenu {
9569
9927
  class = input('');
9570
9928
  classes = computed(() => cn('my-2 z-50 min-w-[12rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2', this.class()));
9571
9929
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScMenu, deps: [], target: i0.ɵɵFactoryTarget.Component });
9572
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.5", type: ScMenu, isStandalone: true, selector: "div[sc-menu]", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, hostDirectives: [{ directive: i1$5.CdkMenu }], ngImport: i0, template: `
9930
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.5", type: ScMenu, isStandalone: true, selector: "div[sc-menu]", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, hostDirectives: [{ directive: i1$3.CdkMenu }], ngImport: i0, template: `
9573
9931
  <ng-content />
9574
9932
  `, isInline: true, styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
9575
9933
  }
@@ -9639,9 +9997,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
9639
9997
 
9640
9998
  class ScMenuGroup {
9641
9999
  class = input('');
9642
- classes = computed(() => cn('', this.class()));
10000
+ _class = computed(() => cn('', this.class()));
9643
10001
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScMenuGroup, deps: [], target: i0.ɵɵFactoryTarget.Component });
9644
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.5", type: ScMenuGroup, isStandalone: true, selector: "sc-menu-group", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, ngImport: i0, template: `
10002
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.5", type: ScMenuGroup, isStandalone: true, selector: "sc-menu-group", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "_class()" } }, ngImport: i0, template: `
9645
10003
  <ng-content />
9646
10004
  `, isInline: true, styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
9647
10005
  }
@@ -9650,19 +10008,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
9650
10008
  args: [{ selector: 'sc-menu-group', imports: [], template: `
9651
10009
  <ng-content />
9652
10010
  `, host: {
9653
- '[class]': 'classes()',
10011
+ '[class]': '_class()',
9654
10012
  }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush }]
9655
10013
  }] });
9656
10014
 
9657
10015
  class ScMenuItem {
9658
10016
  class = input('');
9659
- classes = computed(() => cn('w-full flex cursor-default gap-2 select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent [&_.svg]:pointer-events-none [&_.svg]:size-4 [&_.svg]:shrink-0', this._inset() && 'pl-8', this.class()));
10017
+ classes = computed(() => cn('w-full flex cursor-default gap-2 select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0', this._inset() && 'pl-8', this.class()));
9660
10018
  _inset = input(false, {
9661
10019
  alias: 'inset',
9662
10020
  transform: booleanAttribute,
9663
10021
  });
9664
10022
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScMenuItem, deps: [], target: i0.ɵɵFactoryTarget.Component });
9665
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.5", type: ScMenuItem, isStandalone: true, selector: "button[sc-menu-item]", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, _inset: { classPropertyName: "_inset", publicName: "inset", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, hostDirectives: [{ directive: i1$5.CdkMenuItem }], ngImport: i0, template: `
10023
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.5", type: ScMenuItem, isStandalone: true, selector: "button[sc-menu-item]", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, _inset: { classPropertyName: "_inset", publicName: "inset", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, hostDirectives: [{ directive: i1$3.CdkMenuItem }], ngImport: i0, template: `
9666
10024
  <ng-content />
9667
10025
  `, isInline: true, styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
9668
10026
  }
@@ -9692,14 +10050,14 @@ class ScMenuCheckboxItem {
9692
10050
  });
9693
10051
  scTriggered = output();
9694
10052
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScMenuCheckboxItem, deps: [], target: i0.ɵɵFactoryTarget.Component });
9695
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.5", type: ScMenuCheckboxItem, isStandalone: true, selector: "button[sc-menu-checkbox-item]", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, scChecked: { classPropertyName: "scChecked", publicName: "scChecked", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { scTriggered: "scTriggered" }, host: { properties: { "class": "classes()" } }, hostDirectives: [{ directive: i1$5.CdkMenuItemCheckbox, inputs: ["cdkMenuItemChecked", "scChecked"], outputs: ["cdkMenuItemTriggered", "scTriggered"] }], ngImport: i0, template: `
10053
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.5", type: ScMenuCheckboxItem, isStandalone: true, selector: "button[sc-menu-checkbox-item]", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, scChecked: { classPropertyName: "scChecked", publicName: "scChecked", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { scTriggered: "scTriggered" }, host: { properties: { "class": "classes()" } }, hostDirectives: [{ directive: i1$3.CdkMenuItemCheckbox, inputs: ["cdkMenuItemChecked", "scChecked"], outputs: ["cdkMenuItemTriggered", "scTriggered"] }], ngImport: i0, template: `
9696
10054
  @if (scChecked()) {
9697
10055
  <span class="absolute left-2 flex size-3.5 items-center justify-center">
9698
10056
  <svg-check-icon class="size-4" />
9699
10057
  </span>
9700
10058
  }
9701
10059
  <ng-content />
9702
- `, isInline: true, styles: [""], dependencies: [{ kind: "component", type: SvgCheckIcon, selector: "svg-check-icon", inputs: ["class", "svgClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
10060
+ `, isInline: true, styles: [""], dependencies: [{ kind: "component", type: SvgCheckIcon, selector: "svg-check-icon", inputs: ["class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
9703
10061
  }
9704
10062
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScMenuCheckboxItem, decorators: [{
9705
10063
  type: Component,
@@ -9725,7 +10083,7 @@ class ScMenuRadioGroup {
9725
10083
  class = input('');
9726
10084
  classes = computed(() => cn('', this.class()));
9727
10085
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScMenuRadioGroup, deps: [], target: i0.ɵɵFactoryTarget.Component });
9728
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.5", type: ScMenuRadioGroup, isStandalone: true, selector: "div[sc-menu-radio-group]", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, hostDirectives: [{ directive: i1$5.CdkMenuGroup }], ngImport: i0, template: `
10086
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.5", type: ScMenuRadioGroup, isStandalone: true, selector: "div[sc-menu-radio-group]", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, hostDirectives: [{ directive: i1$3.CdkMenuGroup }], ngImport: i0, template: `
9729
10087
  <ng-content />
9730
10088
  `, isInline: true, styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
9731
10089
  }
@@ -9743,13 +10101,13 @@ class ScMenuRadioItem {
9743
10101
  classes = computed(() => cn('relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50', this.class()));
9744
10102
  value = input('');
9745
10103
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScMenuRadioItem, deps: [], target: i0.ɵɵFactoryTarget.Component });
9746
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.5", type: ScMenuRadioItem, isStandalone: true, selector: "button[sc-menu-radio-item]", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, hostDirectives: [{ directive: i1$5.CdkMenuItemRadio }], ngImport: i0, template: `
10104
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.5", type: ScMenuRadioItem, isStandalone: true, selector: "button[sc-menu-radio-item]", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, hostDirectives: [{ directive: i1$3.CdkMenuItemRadio }], ngImport: i0, template: `
9747
10105
  <span class="absolute left-2 flex size-3.5 items-center justify-center">
9748
10106
  <svg-circle-icon class="size-2 fill-current" />
9749
10107
  </span>
9750
10108
 
9751
10109
  <ng-content />
9752
- `, isInline: true, styles: [""], dependencies: [{ kind: "component", type: SvgCircleIcon, selector: "svg-circle-icon", inputs: ["class", "svgClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
10110
+ `, isInline: true, styles: [""], dependencies: [{ kind: "component", type: SvgCircleIcon, selector: "svg-circle-icon", inputs: ["class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
9753
10111
  }
9754
10112
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScMenuRadioItem, decorators: [{
9755
10113
  type: Component,
@@ -9767,7 +10125,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
9767
10125
  class ScMenuTriggerFor {
9768
10126
  scMenuTriggerFor = input.required();
9769
10127
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScMenuTriggerFor, deps: [], target: i0.ɵɵFactoryTarget.Directive });
9770
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.0.5", type: ScMenuTriggerFor, isStandalone: true, selector: "[scMenuTriggerFor]", inputs: { scMenuTriggerFor: { classPropertyName: "scMenuTriggerFor", publicName: "scMenuTriggerFor", isSignal: true, isRequired: true, transformFunction: null } }, hostDirectives: [{ directive: i1$5.CdkMenuTrigger, inputs: ["cdkMenuTriggerFor", "scMenuTriggerFor"] }], ngImport: i0 });
10128
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.0.5", type: ScMenuTriggerFor, isStandalone: true, selector: "[scMenuTriggerFor]", inputs: { scMenuTriggerFor: { classPropertyName: "scMenuTriggerFor", publicName: "scMenuTriggerFor", isSignal: true, isRequired: true, transformFunction: null } }, hostDirectives: [{ directive: i1$3.CdkMenuTrigger, inputs: ["cdkMenuTriggerFor", "scMenuTriggerFor"] }], ngImport: i0 });
9771
10129
  }
9772
10130
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScMenuTriggerFor, decorators: [{
9773
10131
  type: Directive,
@@ -9786,7 +10144,7 @@ class ScMenuCheckboxGroup {
9786
10144
  class = input('');
9787
10145
  classes = computed(() => cn('', this.class()));
9788
10146
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScMenuCheckboxGroup, deps: [], target: i0.ɵɵFactoryTarget.Component });
9789
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.5", type: ScMenuCheckboxGroup, isStandalone: true, selector: "div[sc-menu-checkbox-group]", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, hostDirectives: [{ directive: i1$5.CdkMenuGroup }], ngImport: i0, template: `
10147
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.5", type: ScMenuCheckboxGroup, isStandalone: true, selector: "div[sc-menu-checkbox-group]", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, hostDirectives: [{ directive: i1$3.CdkMenuGroup }], ngImport: i0, template: `
9790
10148
  <ng-content />
9791
10149
  `, isInline: true, styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
9792
10150
  }
@@ -9803,7 +10161,7 @@ class ScMenuBar {
9803
10161
  class = input('');
9804
10162
  classes = computed(() => cn('flex h-10 items-center space-x-1 rounded-md border bg-background p-1', this.class()));
9805
10163
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScMenuBar, deps: [], target: i0.ɵɵFactoryTarget.Component });
9806
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.5", type: ScMenuBar, isStandalone: true, selector: "div[sc-menu-bar]", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, hostDirectives: [{ directive: i1$5.CdkMenuBar }], ngImport: i0, template: `
10164
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.5", type: ScMenuBar, isStandalone: true, selector: "div[sc-menu-bar]", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, hostDirectives: [{ directive: i1$3.CdkMenuBar }], ngImport: i0, template: `
9807
10165
  <ng-content />
9808
10166
  `, isInline: true, styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
9809
10167
  }
@@ -9820,7 +10178,7 @@ class ScMenuBarItem {
9820
10178
  class = input('');
9821
10179
  classes = computed(() => cn('flex cursor-default select-none items-center rounded-sm px-3 py-1.5 text-sm font-medium outline-none focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground', this.class()));
9822
10180
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScMenuBarItem, deps: [], target: i0.ɵɵFactoryTarget.Component });
9823
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.5", type: ScMenuBarItem, isStandalone: true, selector: "button[sc-menu-bar-item]", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, hostDirectives: [{ directive: i1$5.CdkMenuItem }], ngImport: i0, template: `
10181
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.5", type: ScMenuBarItem, isStandalone: true, selector: "button[sc-menu-bar-item]", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, hostDirectives: [{ directive: i1$3.CdkMenuItem }], ngImport: i0, template: `
9824
10182
  <ng-content />
9825
10183
  `, isInline: true, styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
9826
10184
  }
@@ -9861,7 +10219,7 @@ class ScCommandInput {
9861
10219
  class="flex h-12 w-full rounded-md bg-transparent py-3 text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50"
9862
10220
  [placeholder]="placeholder()"
9863
10221
  />
9864
- `, isInline: true, styles: [""], dependencies: [{ kind: "component", type: SvgSearchIcon, selector: "svg-search-icon", inputs: ["class", "svgClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
10222
+ `, isInline: true, styles: [""], dependencies: [{ kind: "component", type: SvgSearchIcon, selector: "svg-search-icon", inputs: ["class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
9865
10223
  }
9866
10224
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScCommandInput, decorators: [{
9867
10225
  type: Component,
@@ -9949,7 +10307,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
9949
10307
 
9950
10308
  class ScCommandItem {
9951
10309
  class = input('');
9952
- classes = computed(() => cn("relative flex cursor-default gap-2 select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none data-[disabled=true]:pointer-events-none data-[selected='true']:bg-accent data-[selected=true]:text-accent-foreground data-[disabled=true]:opacity-50 [&_.svg]:pointer-events-none [&_.svg]:size-4 [&_.svg]:shrink-0", this.class()));
10310
+ classes = computed(() => cn("relative flex cursor-default gap-2 select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none data-[disabled=true]:pointer-events-none data-[selected='true']:bg-accent data-[selected=true]:text-accent-foreground data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0", this.class()));
9953
10311
  disabled = input(false, {
9954
10312
  transform: booleanAttribute,
9955
10313
  });
@@ -10090,7 +10448,7 @@ class ScCollapsible {
10090
10448
  }
10091
10449
  </cdk-accordion-item>
10092
10450
  </cdk-accordion>
10093
- `, isInline: true, styles: [""], dependencies: [{ kind: "ngmodule", type: CdkAccordionModule }, { kind: "directive", type: i1$4.CdkAccordion, selector: "cdk-accordion, [cdkAccordion]", inputs: ["multi"], exportAs: ["cdkAccordion"] }, { kind: "directive", type: i1$4.CdkAccordionItem, selector: "cdk-accordion-item, [cdkAccordionItem]", inputs: ["expanded", "disabled"], outputs: ["closed", "opened", "destroyed", "expandedChange"], exportAs: ["cdkAccordionItem"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
10451
+ `, isInline: true, styles: [""], dependencies: [{ kind: "ngmodule", type: CdkAccordionModule }, { kind: "directive", type: i1$2.CdkAccordion, selector: "cdk-accordion, [cdkAccordion]", inputs: ["multi"], exportAs: ["cdkAccordion"] }, { kind: "directive", type: i1$2.CdkAccordionItem, selector: "cdk-accordion-item, [cdkAccordionItem]", inputs: ["expanded", "disabled"], outputs: ["closed", "opened", "destroyed", "expandedChange"], exportAs: ["cdkAccordionItem"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
10094
10452
  }
10095
10453
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScCollapsible, decorators: [{
10096
10454
  type: Component,
@@ -10188,7 +10546,7 @@ class ScSidebarToggler {
10188
10546
  <ng-content />
10189
10547
  <span class="sr-only">Toggle Sidebar</span>
10190
10548
  </button>
10191
- `, isInline: true, styles: [""], dependencies: [{ kind: "component", type: ScButton, selector: "button[sc-button], a[sc-button]", inputs: ["variant", "size", "class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
10549
+ `, isInline: true, styles: [""], dependencies: [{ kind: "component", type: ScButton, selector: "button[sc-button], a[sc-button]", inputs: ["variant", "size", "class", "disabled"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
10192
10550
  }
10193
10551
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScSidebarToggler, decorators: [{
10194
10552
  type: Component,
@@ -10236,7 +10594,7 @@ class ScSidebarMobile {
10236
10594
 
10237
10595
  <ng-content />
10238
10596
  </div>
10239
- `, isInline: true, styles: [""], dependencies: [{ kind: "component", type: ScSidebarToggler, selector: "sc-sidebar-toggler" }, { kind: "component", type: SvgXIcon, selector: "svg-x-icon", inputs: ["class", "svgClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
10597
+ `, isInline: true, styles: [""], dependencies: [{ kind: "component", type: ScSidebarToggler, selector: "sc-sidebar-toggler" }, { kind: "component", type: SvgXIcon, selector: "svg-x-icon", inputs: ["class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
10240
10598
  }
10241
10599
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScSidebarMobile, decorators: [{
10242
10600
  type: Component,
@@ -10398,7 +10756,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
10398
10756
 
10399
10757
  class ScAutocompleteItem {
10400
10758
  class = input('');
10401
- classes = computed(() => cn('relative flex cursor-default gap-2 select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none data-[disabled=true]:pointer-events-none hover:bg-accent hover:text-accent-foreground data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground data-[disabled=true]:opacity-50 [&_.svg]:pointer-events-none [&_.svg]:size-4 [&_.svg]:shrink-0', this.class()));
10759
+ classes = computed(() => cn('relative flex cursor-default gap-2 select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none data-[disabled=true]:pointer-events-none hover:bg-accent hover:text-accent-foreground data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0', this.class()));
10402
10760
  _disabled = input(false, {
10403
10761
  transform: booleanAttribute,
10404
10762
  });
@@ -10425,7 +10783,7 @@ class ScAutocompleteItem {
10425
10783
  @if (isSelected()) {
10426
10784
  <svg-check-icon class="ml-auto" />
10427
10785
  }
10428
- `, isInline: true, styles: [""], dependencies: [{ kind: "component", type: SvgCheckIcon, selector: "svg-check-icon", inputs: ["class", "svgClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
10786
+ `, isInline: true, styles: [""], dependencies: [{ kind: "component", type: SvgCheckIcon, selector: "svg-check-icon", inputs: ["class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
10429
10787
  }
10430
10788
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScAutocompleteItem, decorators: [{
10431
10789
  type: Component,
@@ -10620,7 +10978,7 @@ class ScTimeOption {
10620
10978
  }
10621
10979
 
10622
10980
  <ng-content />
10623
- `, isInline: true, styles: [""], dependencies: [{ kind: "component", type: SvgCheckIcon, selector: "svg-check-icon", inputs: ["class", "svgClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
10981
+ `, isInline: true, styles: [""], dependencies: [{ kind: "component", type: SvgCheckIcon, selector: "svg-check-icon", inputs: ["class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
10624
10982
  }
10625
10983
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScTimeOption, decorators: [{
10626
10984
  type: Component,
@@ -10657,6 +11015,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
10657
11015
  }] });
10658
11016
 
10659
11017
  class ScTimePicker {
11018
+ settings = inject(ScSettings);
11019
+ clock = input(undefined);
11020
+ _clock = computed(() => {
11021
+ if (this.clock() !== undefined) {
11022
+ return this.clock();
11023
+ }
11024
+ return this.settings.clock();
11025
+ });
10660
11026
  class = input('');
10661
11027
  classes = computed(() => cn('flex relative', this.class()));
10662
11028
  _overlay = inject(Overlay);
@@ -10948,11 +11314,11 @@ class ScTimePicker {
10948
11314
  });
10949
11315
  }
10950
11316
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScTimePicker, deps: [], target: i0.ɵɵFactoryTarget.Component });
10951
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.5", type: ScTimePicker, isStandalone: true, selector: "sc-time-picker", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "aria-label", isSignal: true, isRequired: false, transformFunction: null }, ariaLabelledby: { classPropertyName: "ariaLabelledby", publicName: "aria-labelledby", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selected: "selected", opened: "opened", closed: "closed" }, host: { properties: { "class": "classes()" } }, viewQueries: [{ propertyName: "_input", first: true, predicate: ["input"], descendants: true, isSignal: true }, { propertyName: "_panelTemplate", first: true, predicate: ["panelTemplate"], descendants: true, isSignal: true }, { propertyName: "_options", predicate: ScTimeOption, descendants: true, isSignal: true }], ngImport: i0, template: `
11317
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.5", type: ScTimePicker, isStandalone: true, selector: "sc-time-picker", inputs: { clock: { classPropertyName: "clock", publicName: "clock", isSignal: true, isRequired: false, transformFunction: null }, class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "aria-label", isSignal: true, isRequired: false, transformFunction: null }, ariaLabelledby: { classPropertyName: "ariaLabelledby", publicName: "aria-labelledby", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selected: "selected", opened: "opened", closed: "closed" }, host: { properties: { "class": "classes()" } }, viewQueries: [{ propertyName: "_input", first: true, predicate: ["input"], descendants: true, isSignal: true }, { propertyName: "_panelTemplate", first: true, predicate: ["panelTemplate"], descendants: true, isSignal: true }, { propertyName: "_options", predicate: ScTimeOption, descendants: true, isSignal: true }], ngImport: i0, template: `
10952
11318
  <button class="absolute inset-y-0 end-0 pe-4" (click)="open()" sc-button variant="ghost">
10953
11319
  <svg-clock-icon />
10954
11320
  </button>
10955
- <input #input scTimePickerInput type="text" placeholder="Select time" />
11321
+ <input #input scTimePickerInput type="text" placeholder="hh:mm" />
10956
11322
 
10957
11323
  <ng-template #panelTemplate>
10958
11324
  <div
@@ -10969,7 +11335,7 @@ class ScTimePicker {
10969
11335
  }
10970
11336
  </div>
10971
11337
  </ng-template>
10972
- `, isInline: true, styles: [""], dependencies: [{ kind: "component", type: SvgClockIcon, selector: "svg-clock-icon", inputs: ["class", "svgClass"] }, { kind: "component", type: ScButton, selector: "button[sc-button], a[sc-button]", inputs: ["variant", "size", "class"] }, { kind: "component", type: ScTimeOption, selector: "sc-time-option", inputs: ["class", "disabled", "value"], outputs: ["selected"] }, { kind: "directive", type: ScTimePickerInput, selector: "[scTimePickerInput]", inputs: ["class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
11338
+ `, isInline: true, styles: [""], dependencies: [{ kind: "component", type: SvgClockIcon, selector: "svg-clock-icon", inputs: ["class"] }, { kind: "component", type: ScButton, selector: "button[sc-button], a[sc-button]", inputs: ["variant", "size", "class", "disabled"] }, { kind: "component", type: ScTimeOption, selector: "sc-time-option", inputs: ["class", "disabled", "value"], outputs: ["selected"] }, { kind: "directive", type: ScTimePickerInput, selector: "[scTimePickerInput]", inputs: ["class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
10973
11339
  }
10974
11340
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScTimePicker, decorators: [{
10975
11341
  type: Component,
@@ -10977,7 +11343,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
10977
11343
  <button class="absolute inset-y-0 end-0 pe-4" (click)="open()" sc-button variant="ghost">
10978
11344
  <svg-clock-icon />
10979
11345
  </button>
10980
- <input #input scTimePickerInput type="text" placeholder="Select time" />
11346
+ <input #input scTimePickerInput type="text" placeholder="hh:mm" />
10981
11347
 
10982
11348
  <ng-template #panelTemplate>
10983
11349
  <div
@@ -11007,9 +11373,750 @@ function scrollOptionIntoView(option, position) {
11007
11373
  option._getHostElement().scrollIntoView({ block: position, inline: position });
11008
11374
  }
11009
11375
 
11376
+ class ScImage {
11377
+ class = input('');
11378
+ _class = computed(() => cn('', this.class()));
11379
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScImage, deps: [], target: i0.ɵɵFactoryTarget.Component });
11380
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.5", type: ScImage, isStandalone: true, selector: "img[sc-image]", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "_class()" } }, ngImport: i0, template: `
11381
+ <ng-content />
11382
+ `, isInline: true, styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
11383
+ }
11384
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScImage, decorators: [{
11385
+ type: Component,
11386
+ args: [{ selector: 'img[sc-image]', imports: [], template: `
11387
+ <ng-content />
11388
+ `, host: {
11389
+ '[class]': '_class()',
11390
+ }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush }]
11391
+ }] });
11392
+
11393
+ class ScFileUpload {
11394
+ class = input('');
11395
+ _class = computed(() => cn('', this.class()));
11396
+ selectedFile = signal(undefined);
11397
+ handleFileChange(event) {
11398
+ const target = event.target;
11399
+ const files = target.files;
11400
+ console.log(files);
11401
+ const file = files[0];
11402
+ if (file) {
11403
+ const reader = new FileReader();
11404
+ reader.onloadend = () => {
11405
+ this.selectedFile.set(reader.result);
11406
+ };
11407
+ reader.readAsDataURL(file);
11408
+ }
11409
+ }
11410
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScFileUpload, deps: [], target: i0.ɵɵFactoryTarget.Component });
11411
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.5", type: ScFileUpload, isStandalone: true, selector: "sc-file-upload", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "_class()" } }, ngImport: i0, template: `
11412
+ <div class="grid w-full max-w-sm items-center gap-1.5">
11413
+ <label sc-label for="picture">Picture</label>
11414
+ <input id="picture" (change)="handleFileChange($event)" sc-input type="file" />
11415
+ @if (selectedFile()) {
11416
+ <div class="mt-2">
11417
+ <img
11418
+ class="rounded-md"
11419
+ [src]="selectedFile()"
11420
+ sc-image
11421
+ alt="Preview"
11422
+ width="500"
11423
+ height="500"
11424
+ />
11425
+ </div>
11426
+ }
11427
+ </div>
11428
+ `, isInline: true, styles: [""], dependencies: [{ kind: "component", type: ScLabel, selector: "label[sc-label]", inputs: ["class"] }, { kind: "component", type: ScInput, selector: "input[sc-input]", inputs: ["class"] }, { kind: "component", type: ScImage, selector: "img[sc-image]", inputs: ["class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
11429
+ }
11430
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScFileUpload, decorators: [{
11431
+ type: Component,
11432
+ args: [{ selector: 'sc-file-upload', imports: [ScLabel, ScInput, ScImage], template: `
11433
+ <div class="grid w-full max-w-sm items-center gap-1.5">
11434
+ <label sc-label for="picture">Picture</label>
11435
+ <input id="picture" (change)="handleFileChange($event)" sc-input type="file" />
11436
+ @if (selectedFile()) {
11437
+ <div class="mt-2">
11438
+ <img
11439
+ class="rounded-md"
11440
+ [src]="selectedFile()"
11441
+ sc-image
11442
+ alt="Preview"
11443
+ width="500"
11444
+ height="500"
11445
+ />
11446
+ </div>
11447
+ }
11448
+ </div>
11449
+ `, host: {
11450
+ '[class]': '_class()',
11451
+ }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush }]
11452
+ }] });
11453
+
11454
+ class ScDropZone {
11455
+ isDragActive = signal(false);
11456
+ isDisabled = input(false);
11457
+ class = input('');
11458
+ _class = computed(() => cn('group relative grid h-52 w-full cursor-pointer place-items-center rounded-lg border-2 border-dashed border-muted-foreground/25 px-5 py-2.5 text-center transition hover:bg-muted/25', 'ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2', this.isDragActive() && 'border-muted-foreground/50', this.isDisabled() && 'pointer-events-none opacity-60', this.class()));
11459
+ handleDragOver(event) {
11460
+ if (this.isDisabled()) {
11461
+ event.preventDefault();
11462
+ event.stopPropagation();
11463
+ }
11464
+ else {
11465
+ this.isDragActive.set(true);
11466
+ }
11467
+ }
11468
+ handleDragLeave(event) {
11469
+ if (this.isDisabled()) {
11470
+ event.preventDefault();
11471
+ event.stopPropagation();
11472
+ }
11473
+ else {
11474
+ this.isDragActive.set(false);
11475
+ }
11476
+ }
11477
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScDropZone, deps: [], target: i0.ɵɵFactoryTarget.Directive });
11478
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.0.5", type: ScDropZone, isStandalone: true, selector: "[scDropZone]", inputs: { isDisabled: { classPropertyName: "isDisabled", publicName: "isDisabled", isSignal: true, isRequired: false, transformFunction: null }, class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "dragover": "handleDragOver($event)", "dragleave": "handleDragLeave($event)" }, properties: { "class": "_class()" } }, exportAs: ["scDropZone"], ngImport: i0 });
11479
+ }
11480
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScDropZone, decorators: [{
11481
+ type: Directive,
11482
+ args: [{
11483
+ selector: '[scDropZone]',
11484
+ exportAs: 'scDropZone',
11485
+ host: {
11486
+ '[class]': '_class()',
11487
+ '(dragover)': 'handleDragOver($event)',
11488
+ '(dragleave)': 'handleDragLeave($event)',
11489
+ },
11490
+ }]
11491
+ }] });
11492
+
11493
+ class ScFilePreview {
11494
+ file = input.required();
11495
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScFilePreview, deps: [], target: i0.ɵɵFactoryTarget.Component });
11496
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.5", type: ScFilePreview, isStandalone: true, selector: "sc-file-preview", inputs: { file: { classPropertyName: "file", publicName: "file", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `
11497
+ @if (file().file.type.startsWith('image/')) {
11498
+ <img
11499
+ class="aspect-square shrink-0 rounded-md object-cover"
11500
+ [src]="file().preview"
11501
+ [alt]="file().file.name"
11502
+ width="48"
11503
+ height="48"
11504
+ loading="lazy"
11505
+ />
11506
+ } @else {
11507
+ <svg-file-text-icon class="size-10 text-muted-foreground" aria-hidden="true" />
11508
+ }
11509
+ `, isInline: true, styles: [""], dependencies: [{ kind: "component", type: SvgFileTextIcon, selector: "svg-file-text-icon", inputs: ["class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
11510
+ }
11511
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScFilePreview, decorators: [{
11512
+ type: Component,
11513
+ args: [{ selector: 'sc-file-preview', imports: [SvgFileTextIcon], template: `
11514
+ @if (file().file.type.startsWith('image/')) {
11515
+ <img
11516
+ class="aspect-square shrink-0 rounded-md object-cover"
11517
+ [src]="file().preview"
11518
+ [alt]="file().file.name"
11519
+ width="48"
11520
+ height="48"
11521
+ loading="lazy"
11522
+ />
11523
+ } @else {
11524
+ <svg-file-text-icon class="size-10 text-muted-foreground" aria-hidden="true" />
11525
+ }
11526
+ `, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush }]
11527
+ }] });
11528
+
11529
+ function formatBytes(bytes, opts = {}) {
11530
+ const { decimals = 0, sizeType = 'normal' } = opts;
11531
+ const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];
11532
+ const accurateSizes = ['Bytes', 'KiB', 'MiB', 'GiB', 'TiB'];
11533
+ if (bytes === 0)
11534
+ return '0 Byte';
11535
+ const i = Math.floor(Math.log(bytes) / Math.log(1024));
11536
+ return `${(bytes / Math.pow(1024, i)).toFixed(decimals)} ${sizeType === 'accurate' ? (accurateSizes[i] ?? 'Bytes') : (sizes[i] ?? 'Bytes')}`;
11537
+ }
11538
+
11539
+ class ScFileCard {
11540
+ index = input.required();
11541
+ file = input.required();
11542
+ progress = input(undefined);
11543
+ removed = output();
11544
+ formatedSize = computed(() => formatBytes(this.file().file.size));
11545
+ remove() {
11546
+ this.removed.emit(this.index());
11547
+ }
11548
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScFileCard, deps: [], target: i0.ɵɵFactoryTarget.Component });
11549
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.5", type: ScFileCard, isStandalone: true, selector: "sc-file-card", inputs: { index: { classPropertyName: "index", publicName: "index", isSignal: true, isRequired: true, transformFunction: null }, file: { classPropertyName: "file", publicName: "file", isSignal: true, isRequired: true, transformFunction: null }, progress: { classPropertyName: "progress", publicName: "progress", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { removed: "removed" }, ngImport: i0, template: `
11550
+ <div class="relative flex items-center gap-2.5">
11551
+ <div class="flex flex-1 gap-2.5">
11552
+ @if (file().preview) {
11553
+ <sc-file-preview [file]="file()" />
11554
+ }
11555
+
11556
+ <div class="flex w-full flex-col gap-2">
11557
+ <div class="flex flex-col gap-px">
11558
+ <p class="line-clamp-1 text-sm font-medium text-foreground/80">
11559
+ {{ file().file.name }}
11560
+ </p>
11561
+ <p class="text-xs text-muted-foreground">
11562
+ {{ formatedSize() }}
11563
+ </p>
11564
+ </div>
11565
+
11566
+ @let p = progress();
11567
+ @if (p) {
11568
+ <sc-progress [value]="p" />
11569
+ }
11570
+ </div>
11571
+ </div>
11572
+ <div class="flex items-center gap-2">
11573
+ <button
11574
+ class="size-7"
11575
+ (click)="remove()"
11576
+ sc-button
11577
+ type="button"
11578
+ variant="outline"
11579
+ size="icon"
11580
+ >
11581
+ <svg-x-icon class="size-4" aria-hidden="true" />
11582
+ <span class="sr-only">Remove file</span>
11583
+ </button>
11584
+ </div>
11585
+ </div>
11586
+ `, isInline: true, styles: [""], dependencies: [{ kind: "component", type: SvgXIcon, selector: "svg-x-icon", inputs: ["class"] }, { kind: "component", type: ScButton, selector: "button[sc-button], a[sc-button]", inputs: ["variant", "size", "class", "disabled"] }, { kind: "component", type: ScFilePreview, selector: "sc-file-preview", inputs: ["file"] }, { kind: "component", type: ScProgress, selector: "sc-progress", inputs: ["class", "value"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
11587
+ }
11588
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScFileCard, decorators: [{
11589
+ type: Component,
11590
+ args: [{ selector: 'sc-file-card', imports: [SvgXIcon, ScButton, ScFilePreview, ScProgress], template: `
11591
+ <div class="relative flex items-center gap-2.5">
11592
+ <div class="flex flex-1 gap-2.5">
11593
+ @if (file().preview) {
11594
+ <sc-file-preview [file]="file()" />
11595
+ }
11596
+
11597
+ <div class="flex w-full flex-col gap-2">
11598
+ <div class="flex flex-col gap-px">
11599
+ <p class="line-clamp-1 text-sm font-medium text-foreground/80">
11600
+ {{ file().file.name }}
11601
+ </p>
11602
+ <p class="text-xs text-muted-foreground">
11603
+ {{ formatedSize() }}
11604
+ </p>
11605
+ </div>
11606
+
11607
+ @let p = progress();
11608
+ @if (p) {
11609
+ <sc-progress [value]="p" />
11610
+ }
11611
+ </div>
11612
+ </div>
11613
+ <div class="flex items-center gap-2">
11614
+ <button
11615
+ class="size-7"
11616
+ (click)="remove()"
11617
+ sc-button
11618
+ type="button"
11619
+ variant="outline"
11620
+ size="icon"
11621
+ >
11622
+ <svg-x-icon class="size-4" aria-hidden="true" />
11623
+ <span class="sr-only">Remove file</span>
11624
+ </button>
11625
+ </div>
11626
+ </div>
11627
+ `, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush }]
11628
+ }] });
11629
+
11630
+ class ScFileUploader {
11631
+ class = input('');
11632
+ _class = computed(() => cn('relative flex flex-col gap-6 overflow-hidden', this.class()));
11633
+ maxSize = input(1024 * 1024 * 2);
11634
+ maxFiles = input(1);
11635
+ files = signal([]);
11636
+ multiple = computed(() => this.maxFiles() > 1);
11637
+ progresses = input();
11638
+ uploadInfo() {
11639
+ return this.maxFiles() > 1
11640
+ ? ` ${this.maxFiles()} files (up to ${formatBytes(this.maxSize())} each)`
11641
+ : ` a file with ${formatBytes(this.maxSize())}`;
11642
+ }
11643
+ onRemove(index) {
11644
+ if (!this.files)
11645
+ return;
11646
+ this.files.update((files) => files.filter((_, i) => i !== index));
11647
+ }
11648
+ handleFileChange(event) {
11649
+ const target = event.target;
11650
+ const files = target.files;
11651
+ const acceptedFiles = Array.from(files);
11652
+ acceptedFiles.forEach((file) => {
11653
+ const reader = new FileReader();
11654
+ reader.onloadend = () => {
11655
+ const scFile = { file: file, preview: reader.result };
11656
+ this.files.update((files) => [...files, scFile]);
11657
+ };
11658
+ reader.readAsDataURL(file);
11659
+ });
11660
+ }
11661
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScFileUploader, deps: [], target: i0.ɵɵFactoryTarget.Component });
11662
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.5", type: ScFileUploader, isStandalone: true, selector: "sc-file-uploader", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, maxSize: { classPropertyName: "maxSize", publicName: "maxSize", isSignal: true, isRequired: false, transformFunction: null }, maxFiles: { classPropertyName: "maxFiles", publicName: "maxFiles", isSignal: true, isRequired: false, transformFunction: null }, progresses: { classPropertyName: "progresses", publicName: "progresses", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "_class()" } }, ngImport: i0, template: `
11663
+ <!-- Dropzone -->
11664
+ <div #scDropZone="scDropZone" scDropZone>
11665
+ <input
11666
+ class="absolute left-0 top-0 size-full cursor-pointer opacity-0"
11667
+ [multiple]="multiple()"
11668
+ (change)="handleFileChange($event)"
11669
+ accept="image/*"
11670
+ tabindex="-1"
11671
+ type="file"
11672
+ />
11673
+
11674
+ @if (scDropZone.isDragActive()) {
11675
+ <div class="flex flex-col items-center justify-center gap-4 sm:px-5">
11676
+ <div class="rounded-full border border-dashed p-3">
11677
+ <svg-upload-icon class="size-7 text-muted-foreground" aria-hidden="true" />
11678
+ </div>
11679
+ <p class="font-medium text-muted-foreground">Drop the files here</p>
11680
+ </div>
11681
+ } @else {
11682
+ <div class="flex flex-col items-center justify-center gap-4 sm:px-5">
11683
+ <div class="rounded-full border border-dashed p-3">
11684
+ <svg-upload-icon class="size-7 text-muted-foreground" aria-hidden="true" />
11685
+ </div>
11686
+ <div class="flex flex-col gap-px">
11687
+ <p class="font-medium text-muted-foreground">
11688
+ Drag 'n' drop your files here, or click to select files
11689
+ </p>
11690
+ <p class="text-sm text-muted-foreground/70">You can upload {{ uploadInfo() }}</p>
11691
+ </div>
11692
+ </div>
11693
+ }
11694
+ </div>
11695
+ <!-- fin Dropzone -->
11696
+
11697
+ <div class="h-fit w-full px-3">
11698
+ <div class="flex max-h-48 flex-col gap-4">
11699
+ @for (file of files(); track $index; let index = $index) {
11700
+ <sc-file-card
11701
+ [file]="file"
11702
+ [index]="index"
11703
+ [progress]="progresses()?.[file.file.name]"
11704
+ (removed)="onRemove($event)"
11705
+ />
11706
+ }
11707
+ </div>
11708
+ </div>
11709
+ `, isInline: true, styles: [""], dependencies: [{ kind: "component", type: SvgUploadIcon, selector: "svg-upload-icon", inputs: ["class"] }, { kind: "component", type: ScFileCard, selector: "sc-file-card", inputs: ["index", "file", "progress"], outputs: ["removed"] }, { kind: "directive", type: ScDropZone, selector: "[scDropZone]", inputs: ["isDisabled", "class"], exportAs: ["scDropZone"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
11710
+ }
11711
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScFileUploader, decorators: [{
11712
+ type: Component,
11713
+ args: [{ selector: 'sc-file-uploader', imports: [SvgUploadIcon, ScFileCard, ScDropZone], template: `
11714
+ <!-- Dropzone -->
11715
+ <div #scDropZone="scDropZone" scDropZone>
11716
+ <input
11717
+ class="absolute left-0 top-0 size-full cursor-pointer opacity-0"
11718
+ [multiple]="multiple()"
11719
+ (change)="handleFileChange($event)"
11720
+ accept="image/*"
11721
+ tabindex="-1"
11722
+ type="file"
11723
+ />
11724
+
11725
+ @if (scDropZone.isDragActive()) {
11726
+ <div class="flex flex-col items-center justify-center gap-4 sm:px-5">
11727
+ <div class="rounded-full border border-dashed p-3">
11728
+ <svg-upload-icon class="size-7 text-muted-foreground" aria-hidden="true" />
11729
+ </div>
11730
+ <p class="font-medium text-muted-foreground">Drop the files here</p>
11731
+ </div>
11732
+ } @else {
11733
+ <div class="flex flex-col items-center justify-center gap-4 sm:px-5">
11734
+ <div class="rounded-full border border-dashed p-3">
11735
+ <svg-upload-icon class="size-7 text-muted-foreground" aria-hidden="true" />
11736
+ </div>
11737
+ <div class="flex flex-col gap-px">
11738
+ <p class="font-medium text-muted-foreground">
11739
+ Drag 'n' drop your files here, or click to select files
11740
+ </p>
11741
+ <p class="text-sm text-muted-foreground/70">You can upload {{ uploadInfo() }}</p>
11742
+ </div>
11743
+ </div>
11744
+ }
11745
+ </div>
11746
+ <!-- fin Dropzone -->
11747
+
11748
+ <div class="h-fit w-full px-3">
11749
+ <div class="flex max-h-48 flex-col gap-4">
11750
+ @for (file of files(); track $index; let index = $index) {
11751
+ <sc-file-card
11752
+ [file]="file"
11753
+ [index]="index"
11754
+ [progress]="progresses()?.[file.file.name]"
11755
+ (removed)="onRemove($event)"
11756
+ />
11757
+ }
11758
+ </div>
11759
+ </div>
11760
+ `, host: {
11761
+ '[class]': '_class()',
11762
+ }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush }]
11763
+ }] });
11764
+
11765
+ class ScSingleFileUploader {
11766
+ dataService = inject(DataService);
11767
+ class = input('');
11768
+ _class = computed(() => cn('relative flex flex-col gap-6 overflow-hidden', this.class()));
11769
+ file = signal(undefined);
11770
+ fileUrl = computed(() => {
11771
+ const file = this.file();
11772
+ if (file) {
11773
+ return URL.createObjectURL(file);
11774
+ }
11775
+ // return null or undefined
11776
+ return file;
11777
+ });
11778
+ status = linkedSignal({
11779
+ source: this.file,
11780
+ computation: () => {
11781
+ return 'init';
11782
+ },
11783
+ });
11784
+ uploadProgress = signal(0);
11785
+ maxSize = input(1024 * 1024 * 2);
11786
+ uploadInfo() {
11787
+ return ` a file with ${formatBytes(this.maxSize())}`;
11788
+ }
11789
+ handleFileChange(event) {
11790
+ const target = event.target;
11791
+ const files = target.files;
11792
+ const file = files[0];
11793
+ this.file.set(file);
11794
+ }
11795
+ removeFile() {
11796
+ this.file.set(null);
11797
+ }
11798
+ uploadFile() {
11799
+ const file = this.file();
11800
+ if (!file) {
11801
+ //TODO add message error
11802
+ return;
11803
+ }
11804
+ this.status.set('uploading');
11805
+ this.dataService
11806
+ .uploadFile(file)
11807
+ .pipe(catchError((error) => {
11808
+ this.status.set('error');
11809
+ // Quality control catches the problem
11810
+ console.error('Delivery problem:', error);
11811
+ // Send an apology note or fix the issue
11812
+ return throwError(() => new Error('Oops! Something went wrong. Please try again later.'));
11813
+ }))
11814
+ .subscribe((event) => {
11815
+ if (event.type === HttpEventType.UploadProgress) {
11816
+ if (event.total) {
11817
+ this.uploadProgress.set(Math.round((100 * event.loaded) / event.total));
11818
+ }
11819
+ else {
11820
+ console.warn('event.total is undefined');
11821
+ }
11822
+ }
11823
+ else if (event instanceof HttpResponse) {
11824
+ this.uploadProgress.set(100);
11825
+ this.status.set('success');
11826
+ }
11827
+ });
11828
+ }
11829
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScSingleFileUploader, deps: [], target: i0.ɵɵFactoryTarget.Component });
11830
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.5", type: ScSingleFileUploader, isStandalone: true, selector: "sc-single-file-uploader", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, maxSize: { classPropertyName: "maxSize", publicName: "maxSize", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "_class()" } }, ngImport: i0, template: `
11831
+ @if (!fileUrl()) {
11832
+ <!-- Dropzone -->
11833
+ <div #scDropZone="scDropZone" scDropZone>
11834
+ <input
11835
+ class="absolute left-0 top-0 size-full cursor-pointer opacity-0"
11836
+ (change)="handleFileChange($event)"
11837
+ accept="image/*"
11838
+ tabindex="-1"
11839
+ type="file"
11840
+ />
11841
+
11842
+ @if (scDropZone.isDragActive()) {
11843
+ <div class="flex flex-col items-center justify-center gap-4 sm:px-5">
11844
+ <div class="rounded-full border border-dashed p-3">
11845
+ <svg-upload-icon class="size-7 text-muted-foreground" aria-hidden="true" />
11846
+ </div>
11847
+ <p class="font-medium text-muted-foreground">Drop the files here</p>
11848
+ </div>
11849
+ } @else {
11850
+ <div class="flex flex-col items-center justify-center gap-4 sm:px-5">
11851
+ <div class="rounded-full border border-dashed p-3">
11852
+ <svg-upload-icon class="size-7 text-muted-foreground" aria-hidden="true" />
11853
+ </div>
11854
+ <div class="flex flex-col gap-px">
11855
+ <p class="font-medium text-muted-foreground">
11856
+ Drag 'n' drop your files here, or click to select files
11857
+ </p>
11858
+ <p class="text-sm text-muted-foreground/70">You can upload {{ uploadInfo() }}</p>
11859
+ </div>
11860
+ </div>
11861
+ }
11862
+ </div>
11863
+ <!-- fin Dropzone -->
11864
+ }
11865
+
11866
+ <!-- Start Preview Image -->
11867
+ @if (fileUrl()) {
11868
+ <sc-aspect-ratio [src]="fileUrl() ?? ''" ratio="16 / 9" alt="" />
11869
+
11870
+ <p>{{ file()?.name }}</p>
11871
+
11872
+ <sc-progress [value]="uploadProgress()" />
11873
+
11874
+ <div class="flex justify-start gap-3">
11875
+ <button
11876
+ [disabled]="status() === 'uploading'"
11877
+ (click)="removeFile()"
11878
+ sc-button
11879
+ variant="destructive"
11880
+ type="button"
11881
+ >
11882
+ Remove
11883
+ </button>
11884
+
11885
+ @if (status() === 'init' || status() === 'error') {
11886
+ <button
11887
+ [disabled]="status() === 'uploading'"
11888
+ (click)="uploadFile()"
11889
+ sc-button
11890
+ variant="primary"
11891
+ type="button"
11892
+ >
11893
+ Upload
11894
+ </button>
11895
+ }
11896
+
11897
+ @if (status() === 'uploading') {
11898
+ <button sc-button variant="secondary" type="button">Cancel</button>
11899
+ }
11900
+ </div>
11901
+ }
11902
+ <!-- End Preview Image -->
11903
+ `, isInline: true, styles: [""], dependencies: [{ kind: "component", type: ScProgress, selector: "sc-progress", inputs: ["class", "value"] }, { kind: "component", type: SvgUploadIcon, selector: "svg-upload-icon", inputs: ["class"] }, { kind: "directive", type: ScDropZone, selector: "[scDropZone]", inputs: ["isDisabled", "class"], exportAs: ["scDropZone"] }, { kind: "component", type: ScButton, selector: "button[sc-button], a[sc-button]", inputs: ["variant", "size", "class", "disabled"] }, { kind: "component", type: ScAspectRatio, selector: "sc-aspect-ratio", inputs: ["imageClass", "hostClass", "wrapperClass", "ratio", "src", "alt", "priority"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
11904
+ }
11905
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScSingleFileUploader, decorators: [{
11906
+ type: Component,
11907
+ args: [{ selector: 'sc-single-file-uploader', imports: [ScProgress, SvgUploadIcon, ScDropZone, ScButton, ScAspectRatio], template: `
11908
+ @if (!fileUrl()) {
11909
+ <!-- Dropzone -->
11910
+ <div #scDropZone="scDropZone" scDropZone>
11911
+ <input
11912
+ class="absolute left-0 top-0 size-full cursor-pointer opacity-0"
11913
+ (change)="handleFileChange($event)"
11914
+ accept="image/*"
11915
+ tabindex="-1"
11916
+ type="file"
11917
+ />
11918
+
11919
+ @if (scDropZone.isDragActive()) {
11920
+ <div class="flex flex-col items-center justify-center gap-4 sm:px-5">
11921
+ <div class="rounded-full border border-dashed p-3">
11922
+ <svg-upload-icon class="size-7 text-muted-foreground" aria-hidden="true" />
11923
+ </div>
11924
+ <p class="font-medium text-muted-foreground">Drop the files here</p>
11925
+ </div>
11926
+ } @else {
11927
+ <div class="flex flex-col items-center justify-center gap-4 sm:px-5">
11928
+ <div class="rounded-full border border-dashed p-3">
11929
+ <svg-upload-icon class="size-7 text-muted-foreground" aria-hidden="true" />
11930
+ </div>
11931
+ <div class="flex flex-col gap-px">
11932
+ <p class="font-medium text-muted-foreground">
11933
+ Drag 'n' drop your files here, or click to select files
11934
+ </p>
11935
+ <p class="text-sm text-muted-foreground/70">You can upload {{ uploadInfo() }}</p>
11936
+ </div>
11937
+ </div>
11938
+ }
11939
+ </div>
11940
+ <!-- fin Dropzone -->
11941
+ }
11942
+
11943
+ <!-- Start Preview Image -->
11944
+ @if (fileUrl()) {
11945
+ <sc-aspect-ratio [src]="fileUrl() ?? ''" ratio="16 / 9" alt="" />
11946
+
11947
+ <p>{{ file()?.name }}</p>
11948
+
11949
+ <sc-progress [value]="uploadProgress()" />
11950
+
11951
+ <div class="flex justify-start gap-3">
11952
+ <button
11953
+ [disabled]="status() === 'uploading'"
11954
+ (click)="removeFile()"
11955
+ sc-button
11956
+ variant="destructive"
11957
+ type="button"
11958
+ >
11959
+ Remove
11960
+ </button>
11961
+
11962
+ @if (status() === 'init' || status() === 'error') {
11963
+ <button
11964
+ [disabled]="status() === 'uploading'"
11965
+ (click)="uploadFile()"
11966
+ sc-button
11967
+ variant="primary"
11968
+ type="button"
11969
+ >
11970
+ Upload
11971
+ </button>
11972
+ }
11973
+
11974
+ @if (status() === 'uploading') {
11975
+ <button sc-button variant="secondary" type="button">Cancel</button>
11976
+ }
11977
+ </div>
11978
+ }
11979
+ <!-- End Preview Image -->
11980
+ `, host: {
11981
+ '[class]': '_class()',
11982
+ }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush }]
11983
+ }] });
11984
+
11985
+ class ScPageTitle {
11986
+ classInput = input('', {
11987
+ alias: 'class',
11988
+ });
11989
+ class = computed(() => cn('scroll-m-20 text-3xl font-bold tracking-tight', this.classInput()));
11990
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScPageTitle, deps: [], target: i0.ɵɵFactoryTarget.Component });
11991
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.5", type: ScPageTitle, isStandalone: true, selector: "h1[sc-page-title]", inputs: { classInput: { classPropertyName: "classInput", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "class()" } }, ngImport: i0, template: `
11992
+ <ng-content />
11993
+ `, isInline: true, styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
11994
+ }
11995
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScPageTitle, decorators: [{
11996
+ type: Component,
11997
+ args: [{ selector: 'h1[sc-page-title]', imports: [], template: `
11998
+ <ng-content />
11999
+ `, host: {
12000
+ '[class]': 'class()',
12001
+ }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush }]
12002
+ }] });
12003
+
12004
+ class ScPageSubtitle {
12005
+ classInput = input('', {
12006
+ alias: 'class',
12007
+ });
12008
+ class = computed(() => cn('font-heading mt-12 scroll-m-20 border-b pb-2 text-2xl font-semibold tracking-tight first:mt-0', this.classInput()));
12009
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScPageSubtitle, deps: [], target: i0.ɵɵFactoryTarget.Component });
12010
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.5", type: ScPageSubtitle, isStandalone: true, selector: "h2[sc-page-subtitle]", inputs: { classInput: { classPropertyName: "classInput", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "class()" } }, ngImport: i0, template: `
12011
+ <ng-content />
12012
+ `, isInline: true, styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
12013
+ }
12014
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScPageSubtitle, decorators: [{
12015
+ type: Component,
12016
+ args: [{ selector: 'h2[sc-page-subtitle]', imports: [], template: `
12017
+ <ng-content />
12018
+ `, host: {
12019
+ '[class]': 'class()',
12020
+ }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush }]
12021
+ }] });
12022
+
12023
+ class ScPageDescription {
12024
+ classInput = input('', {
12025
+ alias: 'class',
12026
+ });
12027
+ class = computed(() => cn('text-base text-muted-foreground', this.classInput()));
12028
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScPageDescription, deps: [], target: i0.ɵɵFactoryTarget.Component });
12029
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.5", type: ScPageDescription, isStandalone: true, selector: "p[sc-page-description]", inputs: { classInput: { classPropertyName: "classInput", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "class()" } }, ngImport: i0, template: `
12030
+ <ng-content />
12031
+ `, isInline: true, styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
12032
+ }
12033
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScPageDescription, decorators: [{
12034
+ type: Component,
12035
+ args: [{ selector: 'p[sc-page-description]', imports: [], template: `
12036
+ <ng-content />
12037
+ `, host: {
12038
+ '[class]': 'class()',
12039
+ }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush }]
12040
+ }] });
12041
+
12042
+ class Section {
12043
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: Section, deps: [], target: i0.ɵɵFactoryTarget.Component });
12044
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: Section, isStandalone: true, selector: "sc-section", ngImport: i0, template: `
12045
+ <p>section works!</p>
12046
+ `, isInline: true, styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
12047
+ }
12048
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: Section, decorators: [{
12049
+ type: Component,
12050
+ args: [{ selector: 'sc-section', imports: [], template: `
12051
+ <p>section works!</p>
12052
+ `, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush }]
12053
+ }] });
12054
+
12055
+ class ScCookieConsent {
12056
+ open = signal(true);
12057
+ hidden = signal(false);
12058
+ class = signal(cn('fixed z-[200] bottom-0 left-0 right-0 sm:left-4 sm:bottom-4 w-full sm:max-w-md duration-700', !this.open()
12059
+ ? 'transition-[opacity,transform] translate-y-8 opacity-0'
12060
+ : 'transition-[opacity,transform] translate-y-0 opacity-100', this.hidden() && 'hidden'));
12061
+ accept() {
12062
+ console.log('accept');
12063
+ }
12064
+ decline() {
12065
+ console.log('decline');
12066
+ }
12067
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScCookieConsent, deps: [], target: i0.ɵɵFactoryTarget.Component });
12068
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: ScCookieConsent, isStandalone: true, selector: "sc-cookie-consent", ngImport: i0, template: `
12069
+ <div [class]="class()">
12070
+ <div class="m-3 dark:bg-card bg-background border border-border rounded-lg">
12071
+ <div class="flex items-center justify-between p-3">
12072
+ <h1 class="text-lg font-medium">We use cookies</h1>
12073
+ <svg-cookie-icon class="h-[1.2rem] w-[1.2rem]" />
12074
+ </div>
12075
+ <div class="p-3 -mt-2">
12076
+ <p class="text-sm text-left text-muted-foreground">
12077
+ We use cookies to ensure you get the best experience on our website. For more
12078
+ information on how we use cookies, please see our cookie policy.
12079
+ </p>
12080
+ </div>
12081
+ <div class="p-3 flex items-center gap-2 mt-2 border-t">
12082
+ <button class="w-full h-9 rounded-full" (click)="accept()" sc-button>accept</button>
12083
+ <button class="w-full h-9 rounded-full" (click)="decline()" sc-button variant="outline">
12084
+ decline
12085
+ </button>
12086
+ </div>
12087
+ </div>
12088
+ </div>
12089
+ `, isInline: true, styles: [""], dependencies: [{ kind: "component", type: SvgCookieIcon, selector: "svg-cookie-icon", inputs: ["class"] }, { kind: "component", type: ScButton, selector: "button[sc-button], a[sc-button]", inputs: ["variant", "size", "class", "disabled"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
12090
+ }
12091
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ScCookieConsent, decorators: [{
12092
+ type: Component,
12093
+ args: [{ selector: 'sc-cookie-consent', imports: [SvgCookieIcon, ScButton], template: `
12094
+ <div [class]="class()">
12095
+ <div class="m-3 dark:bg-card bg-background border border-border rounded-lg">
12096
+ <div class="flex items-center justify-between p-3">
12097
+ <h1 class="text-lg font-medium">We use cookies</h1>
12098
+ <svg-cookie-icon class="h-[1.2rem] w-[1.2rem]" />
12099
+ </div>
12100
+ <div class="p-3 -mt-2">
12101
+ <p class="text-sm text-left text-muted-foreground">
12102
+ We use cookies to ensure you get the best experience on our website. For more
12103
+ information on how we use cookies, please see our cookie policy.
12104
+ </p>
12105
+ </div>
12106
+ <div class="p-3 flex items-center gap-2 mt-2 border-t">
12107
+ <button class="w-full h-9 rounded-full" (click)="accept()" sc-button>accept</button>
12108
+ <button class="w-full h-9 rounded-full" (click)="decline()" sc-button variant="outline">
12109
+ decline
12110
+ </button>
12111
+ </div>
12112
+ </div>
12113
+ </div>
12114
+ `, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush }]
12115
+ }] });
12116
+
11010
12117
  /**
11011
12118
  * Generated bundle index. Do not edit.
11012
12119
  */
11013
12120
 
11014
- export { FormFieldCustomControlComponent, ScAccordion, ScAccordionContent, ScAccordionHeader, ScAccordionItem, ScAccordionItemDescription, ScAccordionTrigger, ScAlert, ScAlertDescription, ScAlertDialog, ScAlertTitle, ScAspectRatio, ScAutocomplete, ScAvatar, ScBadge, ScBreadcrumb, ScBreadcrumbEllipsis, ScBreadcrumbItem, ScBreadcrumbLink, ScBreadcrumbList, ScBreadcrumbPage, ScBreadcrumbSeparator, ScButton, ScCalendar, ScCard, ScCardContent, ScCardDescription, ScCardFooter, ScCardHeader, ScCardTitle, ScCarousel, ScCarouselContainer, ScCarouselItem, ScCarouselItems, ScCarouselNext, ScCarouselPrevious, ScCheckbox, ScCollapsible, ScCollapsibleContent, ScCollapsibleTrigger, ScCommand, ScCommandDialog, ScCommandEmpty, ScCommandError, ScCommandGroup, ScCommandInput, ScCommandItem, ScCommandList, ScCommandLoading, ScCommandSeparator, ScCommandShortcut, ScContextMenuTriggerFor, ScDataTable, ScDatePicker, ScDialog, ScDialogClose, ScDialogContent, ScDialogDescription, ScDialogFooter, ScDialogHeader, ScDialogTitle, ScEditor, ScFullCalendar, ScHoverCard, ScHoverCardTriggerFor, ScInput, ScInputOTPGroup, ScInputOTPSeparator, ScInputOTPSlot, ScInputOtp, ScLabel, ScMenu, ScMenuBar, ScMenuBarItem, ScMenuCheckboxGroup, ScMenuCheckboxItem, ScMenuGroup, ScMenuItem, ScMenuLabel, ScMenuRadioGroup, ScMenuRadioItem, ScMenuSeparator, ScMenuShortcut, ScMenuTriggerFor, ScNav, ScNavItem, ScNavItemDropdown, ScNavLink, ScNavList, ScOption, ScPaginator, ScPopoverTriggerFor, ScProgress, ScRadioGroup, ScRadioItem, ScScrollArea, ScSelect, ScSettings, ScSheet, ScSheetClose, ScSheetConfig, ScSheetTrigger, ScSidebar, ScSidebarProvider, ScSidebarState, ScSidebarToggler, ScSkeleton, ScSlider, ScSwitch, ScTab, ScTabContent, ScTabLabel, ScTable, ScTableBody, ScTableCaption, ScTableCell, ScTableContainer, ScTableFooter, ScTableHead, ScTableHeader, ScTableRow, ScTabs, ScTextarea, ScThemeToggler, ScTimePicker, ScToast, ScToastExample, ScToggle, ScTooltip, TelInputComponent, TelModel, Toaster, buttonVariants, cn, scInputStyles, scThemeProvider };
12121
+ export { FormFieldCustomControlComponent, ScAccordion, ScAccordionContent, ScAccordionHeader, ScAccordionItem, ScAccordionItemDescription, ScAccordionTrigger, ScAlert, ScAlertDescription, ScAlertDialog, ScAlertTitle, ScArticle, ScAspectRatio, ScAutocomplete, ScAvatar, ScBadge, ScBlockquote, ScBreadcrumb, ScBreadcrumbEllipsis, ScBreadcrumbItem, ScBreadcrumbLink, ScBreadcrumbList, ScBreadcrumbPage, ScBreadcrumbSeparator, ScButton, ScCalendar, ScCard, ScCardContent, ScCardDescription, ScCardFooter, ScCardHeader, ScCardTitle, ScCarousel, ScCarouselContainer, ScCarouselItem, ScCarouselItems, ScCarouselNext, ScCarouselPrevious, ScCheckbox, ScCollapsible, ScCollapsibleContent, ScCollapsibleTrigger, ScCommand, ScCommandDialog, ScCommandEmpty, ScCommandError, ScCommandGroup, ScCommandInput, ScCommandItem, ScCommandList, ScCommandLoading, ScCommandSeparator, ScCommandShortcut, ScContextMenuTriggerFor, ScCookieConsent, ScDataTable, ScDatePicker, ScDialog, ScDialogClose, ScDialogContent, ScDialogDescription, ScDialogFooter, ScDialogHeader, ScDialogTitle, ScEditor, ScFileUpload, ScFileUploader, ScFullCalendar, ScHeading, ScHoverCard, ScHoverCardTriggerFor, ScInput, ScInputOTPGroup, ScInputOTPSeparator, ScInputOTPSlot, ScInputOtp, ScLabel, ScMenu, ScMenuBar, ScMenuBarItem, ScMenuCheckboxGroup, ScMenuCheckboxItem, ScMenuGroup, ScMenuItem, ScMenuLabel, ScMenuRadioGroup, ScMenuRadioItem, ScMenuSeparator, ScMenuShortcut, ScMenuTriggerFor, ScNav, ScNavItem, ScNavItemDropdown, ScNavLink, ScNavList, ScOption, ScPageDescription, ScPageSubtitle, ScPageTitle, ScPaginator, ScPopoverTriggerFor, ScProgress, ScRadioGroup, ScRadioItem, ScScrollArea, ScSelect, ScSeparator, ScSettings, ScSheet, ScSheetClose, ScSheetConfig, ScSheetTrigger, ScSidebar, ScSidebarProvider, ScSidebarState, ScSidebarToggler, ScSingleFileUploader, ScSkeleton, ScSlider, ScSwitch, ScTab, ScTabContent, ScTabContent2, ScTabGroup, ScTabItem, ScTabLabel, ScTabLabel2, ScTable, ScTableBody, ScTableCaption, ScTableCell, ScTableContainer, ScTableFooter, ScTableHead, ScTableHeader, ScTableRow, ScTabs, ScTextarea, ScThemeToggler, ScTimePicker, ScToast, ScToastExample, ScToggle, ScToggleGroup, ScToggleGroupItem, ScTooltip, Section, TelInputComponent, TelModel, Toaster, buttonVariants, scArticleClasses, scInputStyles, scThemeProvider };
11015
12122
  //# sourceMappingURL=semantic-components-ui.mjs.map