@eduboxpro/studio 0.1.7 → 0.1.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as _angular_core from '@angular/core';
2
2
  import { InjectionToken, EnvironmentProviders, ElementRef, Signal } from '@angular/core';
3
- import { ControlValueAccessor } from '@angular/forms';
3
+ import { ControlValueAccessor, Validator, AbstractControl, ValidationErrors } from '@angular/forms';
4
4
  import { icons } from 'lucide-angular';
5
5
 
6
6
  /**
@@ -198,6 +198,39 @@ interface TextareaDefaultsConfig {
198
198
  showCharCount?: boolean;
199
199
  clearable?: boolean;
200
200
  }
201
+ /**
202
+ * ButtonGroup component defaults configuration
203
+ */
204
+ interface ButtonGroupDefaultsConfig {
205
+ orientation?: 'horizontal' | 'vertical';
206
+ size?: 'sm' | 'md' | 'lg';
207
+ variant?: 'solid' | 'outline' | 'ghost';
208
+ color?: 'primary' | 'secondary' | 'success' | 'error' | 'warning';
209
+ radius?: 'none' | 'sm' | 'md' | 'lg' | 'xl' | 'full';
210
+ }
211
+ /**
212
+ * ButtonToggleGroup component defaults configuration
213
+ */
214
+ interface ButtonToggleGroupDefaultsConfig {
215
+ orientation?: 'horizontal' | 'vertical';
216
+ size?: 'sm' | 'md' | 'lg';
217
+ variant?: 'solid' | 'outline' | 'ghost';
218
+ color?: 'primary' | 'secondary' | 'success' | 'error' | 'warning';
219
+ radius?: 'none' | 'sm' | 'md' | 'lg' | 'xl' | 'full';
220
+ shadow?: 'none' | 'sm' | 'md' | 'lg';
221
+ }
222
+ /**
223
+ * Select component defaults configuration
224
+ */
225
+ interface SelectDefaultsConfig {
226
+ variant?: 'outline' | 'filled' | 'underline';
227
+ size?: 'sm' | 'md' | 'lg';
228
+ radius?: 'none' | 'sm' | 'md' | 'lg' | 'full';
229
+ searchable?: boolean;
230
+ clearable?: boolean;
231
+ maxHeight?: string;
232
+ position?: 'auto' | 'top' | 'bottom';
233
+ }
201
234
  /**
202
235
  * Components defaults configuration
203
236
  */
@@ -208,6 +241,9 @@ interface ComponentsConfig {
208
241
  input?: InputDefaultsConfig;
209
242
  checkbox?: CheckboxDefaultsConfig;
210
243
  textarea?: TextareaDefaultsConfig;
244
+ buttonGroup?: ButtonGroupDefaultsConfig;
245
+ buttonToggleGroup?: ButtonToggleGroupDefaultsConfig;
246
+ select?: SelectDefaultsConfig;
211
247
  }
212
248
  /**
213
249
  * Main Studio configuration interface
@@ -350,6 +386,33 @@ declare class ButtonComponent {
350
386
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<ButtonComponent, "studio-button", never, { "variantInput": { "alias": "variant"; "required": false; "isSignal": true; }; "sizeInput": { "alias": "size"; "required": false; "isSignal": true; }; "colorInput": { "alias": "color"; "required": false; "isSignal": true; }; "radiusInput": { "alias": "radius"; "required": false; "isSignal": true; }; "shadowInput": { "alias": "shadow"; "required": false; "isSignal": true; }; "compactInput": { "alias": "compact"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "loadingText": { "alias": "loadingText"; "required": false; "isSignal": true; }; "fullWidth": { "alias": "fullWidth"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "iconPosition": { "alias": "iconPosition"; "required": false; "isSignal": true; }; "href": { "alias": "href"; "required": false; "isSignal": true; }; "target": { "alias": "target"; "required": false; "isSignal": true; }; "badge": { "alias": "badge"; "required": false; "isSignal": true; }; "badgeColor": { "alias": "badgeColor"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "clicked": "clicked"; }, never, ["*"], true, never>;
351
387
  }
352
388
 
389
+ declare class ButtonGroupComponent {
390
+ private readonly elementRef;
391
+ private readonly configService;
392
+ private readonly groupDefaults;
393
+ orientationInput: _angular_core.InputSignal<"vertical" | "horizontal" | undefined>;
394
+ sizeInput: _angular_core.InputSignal<"sm" | "md" | "lg" | undefined>;
395
+ variantInput: _angular_core.InputSignal<"solid" | "outline" | "ghost" | undefined>;
396
+ colorInput: _angular_core.InputSignal<"primary" | "secondary" | "success" | "error" | "warning" | undefined>;
397
+ radiusInput: _angular_core.InputSignal<"sm" | "md" | "lg" | "none" | "xl" | "full" | undefined>;
398
+ orientation: _angular_core.Signal<"vertical" | "horizontal">;
399
+ size: _angular_core.Signal<"sm" | "md" | "lg" | undefined>;
400
+ variant: _angular_core.Signal<"solid" | "outline" | "ghost" | undefined>;
401
+ color: _angular_core.Signal<"primary" | "secondary" | "success" | "error" | "warning" | undefined>;
402
+ radius: _angular_core.Signal<"sm" | "md" | "lg" | "none" | "xl" | "full" | undefined>;
403
+ attached: _angular_core.InputSignal<boolean>;
404
+ fullWidth: _angular_core.InputSignal<boolean>;
405
+ disabled: _angular_core.InputSignal<boolean>;
406
+ spacing: _angular_core.InputSignal<"sm" | "md" | "lg" | "none" | "xs">;
407
+ align: _angular_core.InputSignal<"center" | "start" | "end" | "stretch">;
408
+ ariaLabel: _angular_core.InputSignal<string | undefined>;
409
+ role: _angular_core.InputSignal<string>;
410
+ protected hostClasses: _angular_core.Signal<string>;
411
+ constructor();
412
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ButtonGroupComponent, never>;
413
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ButtonGroupComponent, "studio-button-group", never, { "orientationInput": { "alias": "orientation"; "required": false; "isSignal": true; }; "sizeInput": { "alias": "size"; "required": false; "isSignal": true; }; "variantInput": { "alias": "variant"; "required": false; "isSignal": true; }; "colorInput": { "alias": "color"; "required": false; "isSignal": true; }; "radiusInput": { "alias": "radius"; "required": false; "isSignal": true; }; "attached": { "alias": "attached"; "required": false; "isSignal": true; }; "fullWidth": { "alias": "fullWidth"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "spacing": { "alias": "spacing"; "required": false; "isSignal": true; }; "align": { "alias": "align"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "role": { "alias": "role"; "required": false; "isSignal": true; }; }, {}, never, ["studio-button"], true, never>;
414
+ }
415
+
353
416
  /**
354
417
  * Checkbox component for selecting boolean values
355
418
  *
@@ -649,6 +712,104 @@ declare class InputComponent implements ControlValueAccessor {
649
712
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<InputComponent, "studio-input", never, { "variantInput": { "alias": "variant"; "required": false; "isSignal": true; }; "sizeInput": { "alias": "size"; "required": false; "isSignal": true; }; "radiusInput": { "alias": "radius"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "inputmode": { "alias": "inputmode"; "required": false; "isSignal": true; }; "autocomplete": { "alias": "autocomplete"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "maxLength": { "alias": "maxLength"; "required": false; "isSignal": true; }; "minLength": { "alias": "minLength"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "pattern": { "alias": "pattern"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "floatingLabel": { "alias": "floatingLabel"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "errorMessage": { "alias": "errorMessage"; "required": false; "isSignal": true; }; "prefixIcon": { "alias": "prefixIcon"; "required": false; "isSignal": true; }; "suffixIcon": { "alias": "suffixIcon"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "showPasswordToggle": { "alias": "showPasswordToggle"; "required": false; "isSignal": true; }; "fullWidth": { "alias": "fullWidth"; "required": false; "isSignal": true; }; "autoFocus": { "alias": "autoFocus"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; "focused": "focused"; "blurred": "blurred"; "cleared": "cleared"; "entered": "entered"; }, never, never, true, never>;
650
713
  }
651
714
 
715
+ interface SelectOption<T = any> {
716
+ label: string;
717
+ value: T;
718
+ disabled?: boolean;
719
+ icon?: string;
720
+ description?: string;
721
+ group?: string;
722
+ metadata?: Record<string, any>;
723
+ }
724
+ interface SelectOptionGroup<T = any> {
725
+ label: string;
726
+ options: SelectOption<T>[];
727
+ disabled?: boolean;
728
+ }
729
+ type SelectVariant = 'outline' | 'filled' | 'underline';
730
+ type SelectSize = 'sm' | 'md' | 'lg';
731
+ type SelectPosition = 'auto' | 'top' | 'bottom';
732
+ interface SelectDisplayContext<T = any> {
733
+ option: SelectOption<T>;
734
+ selected: boolean;
735
+ highlighted: boolean;
736
+ }
737
+
738
+ declare class SelectComponent<T = any> implements ControlValueAccessor {
739
+ private readonly configService;
740
+ private readonly selectDefaults;
741
+ protected readonly triggerEl: _angular_core.Signal<ElementRef<HTMLButtonElement> | undefined>;
742
+ protected readonly dropdownEl: _angular_core.Signal<ElementRef<HTMLDivElement> | undefined>;
743
+ variantInput: _angular_core.InputSignal<SelectVariant | undefined>;
744
+ sizeInput: _angular_core.InputSignal<SelectSize | undefined>;
745
+ radiusInput: _angular_core.InputSignal<"sm" | "md" | "lg" | "none" | "full" | undefined>;
746
+ variant: _angular_core.Signal<"outline" | "filled" | "underline">;
747
+ size: _angular_core.Signal<"sm" | "md" | "lg">;
748
+ radius: _angular_core.Signal<"sm" | "md" | "lg" | "none" | "full">;
749
+ options: _angular_core.InputSignal<SelectOption<T>[] | SelectOptionGroup<T>[]>;
750
+ placeholder: _angular_core.InputSignal<string>;
751
+ multiple: _angular_core.InputSignal<boolean>;
752
+ searchable: _angular_core.InputSignal<boolean>;
753
+ clearable: _angular_core.InputSignal<boolean>;
754
+ disabled: _angular_core.InputSignal<boolean>;
755
+ loading: _angular_core.InputSignal<boolean>;
756
+ label: _angular_core.InputSignal<string | undefined>;
757
+ floatingLabel: _angular_core.InputSignal<boolean>;
758
+ hint: _angular_core.InputSignal<string | undefined>;
759
+ error: _angular_core.InputSignal<boolean>;
760
+ errorMessage: _angular_core.InputSignal<string | undefined>;
761
+ required: _angular_core.InputSignal<boolean>;
762
+ prefixIcon: _angular_core.InputSignal<string | undefined>;
763
+ suffixIcon: _angular_core.InputSignal<string>;
764
+ fullWidth: _angular_core.InputSignal<boolean>;
765
+ maxHeight: _angular_core.InputSignal<string>;
766
+ position: _angular_core.InputSignal<SelectPosition>;
767
+ searchPlaceholder: _angular_core.InputSignal<string>;
768
+ valueChange: _angular_core.OutputEmitterRef<T | T[] | null>;
769
+ searchChange: _angular_core.OutputEmitterRef<string>;
770
+ opened: _angular_core.OutputEmitterRef<void>;
771
+ closed: _angular_core.OutputEmitterRef<void>;
772
+ optionSelected: _angular_core.OutputEmitterRef<SelectOption<T>>;
773
+ protected isOpen: _angular_core.WritableSignal<boolean>;
774
+ protected searchQuery: _angular_core.WritableSignal<string>;
775
+ protected selectedValue: _angular_core.WritableSignal<T | T[] | null>;
776
+ protected highlightedIndex: _angular_core.WritableSignal<number>;
777
+ protected isFocused: _angular_core.WritableSignal<boolean>;
778
+ protected isTouched: _angular_core.WritableSignal<boolean>;
779
+ protected generatedId: string;
780
+ private onChange;
781
+ private onTouched;
782
+ constructor();
783
+ protected flattenedOptions: _angular_core.Signal<SelectOption<T>[]>;
784
+ protected filteredOptions: _angular_core.Signal<SelectOption<T>[]>;
785
+ protected selectedOptions: _angular_core.Signal<SelectOption<T> | SelectOption<T>[] | null>;
786
+ protected displayValue: _angular_core.Signal<string>;
787
+ protected hasValue: _angular_core.Signal<boolean>;
788
+ protected hostClasses: _angular_core.Signal<string>;
789
+ protected toggle(): void;
790
+ protected close(): void;
791
+ protected selectOption(option: SelectOption<T>): void;
792
+ protected clear(event: Event): void;
793
+ protected isSelected(option: SelectOption<T>): boolean;
794
+ protected handleSearch(event: Event): void;
795
+ protected handleKeydown(event: KeyboardEvent): void;
796
+ private highlightNext;
797
+ private highlightPrevious;
798
+ private selectHighlighted;
799
+ private compareValues;
800
+ private isOptionGroup;
801
+ private focusSearchInput;
802
+ private clickOutsideListener?;
803
+ private setupClickOutside;
804
+ private cleanupClickOutside;
805
+ writeValue(value: T | T[]): void;
806
+ registerOnChange(fn: any): void;
807
+ registerOnTouched(fn: any): void;
808
+ setDisabledState(isDisabled: boolean): void;
809
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SelectComponent<any>, never>;
810
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SelectComponent<any>, "studio-select", never, { "variantInput": { "alias": "variant"; "required": false; "isSignal": true; }; "sizeInput": { "alias": "size"; "required": false; "isSignal": true; }; "radiusInput": { "alias": "radius"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": true; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "searchable": { "alias": "searchable"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "floatingLabel": { "alias": "floatingLabel"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "errorMessage": { "alias": "errorMessage"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "prefixIcon": { "alias": "prefixIcon"; "required": false; "isSignal": true; }; "suffixIcon": { "alias": "suffixIcon"; "required": false; "isSignal": true; }; "fullWidth": { "alias": "fullWidth"; "required": false; "isSignal": true; }; "maxHeight": { "alias": "maxHeight"; "required": false; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; "searchChange": "searchChange"; "opened": "opened"; "closed": "closed"; "optionSelected": "optionSelected"; }, never, never, true, never>;
811
+ }
812
+
652
813
  /**
653
814
  * Toggle switch component with customizable size and color
654
815
  *
@@ -896,6 +1057,56 @@ type TextareaSize = 'sm' | 'md' | 'lg';
896
1057
  type TextareaColor = 'primary' | 'secondary' | 'success' | 'error';
897
1058
  type TextareaRadius = 'none' | 'sm' | 'md' | 'lg' | 'full';
898
1059
 
1060
+ interface ButtonToggleGroupOption {
1061
+ value: string | number;
1062
+ label: string;
1063
+ icon?: string;
1064
+ disabled?: boolean;
1065
+ ariaLabel?: string;
1066
+ }
1067
+ type ButtonToggleGroupValue = string | number | (string | number)[];
1068
+
1069
+ declare class ButtonToggleGroupComponent implements ControlValueAccessor {
1070
+ private readonly configService;
1071
+ private readonly toggleGroupDefaults;
1072
+ private onChange;
1073
+ private onTouched;
1074
+ value: _angular_core.ModelSignal<ButtonToggleGroupValue>;
1075
+ options: _angular_core.InputSignal<ButtonToggleGroupOption[]>;
1076
+ multiple: _angular_core.InputSignal<boolean>;
1077
+ allowEmpty: _angular_core.InputSignal<boolean>;
1078
+ orientationInput: _angular_core.InputSignal<"vertical" | "horizontal" | undefined>;
1079
+ sizeInput: _angular_core.InputSignal<"sm" | "md" | "lg" | undefined>;
1080
+ variantInput: _angular_core.InputSignal<"solid" | "outline" | "ghost" | undefined>;
1081
+ colorInput: _angular_core.InputSignal<"primary" | "secondary" | "success" | "error" | "warning" | undefined>;
1082
+ radiusInput: _angular_core.InputSignal<"sm" | "md" | "lg" | "none" | "xl" | "full" | undefined>;
1083
+ shadowInput: _angular_core.InputSignal<"sm" | "md" | "lg" | "none" | undefined>;
1084
+ orientation: _angular_core.Signal<"vertical" | "horizontal">;
1085
+ size: _angular_core.Signal<"sm" | "md" | "lg">;
1086
+ variant: _angular_core.Signal<"solid" | "outline" | "ghost">;
1087
+ color: _angular_core.Signal<"primary" | "secondary" | "success" | "error" | "warning">;
1088
+ radius: _angular_core.Signal<"sm" | "md" | "lg" | "none" | "xl" | "full">;
1089
+ shadow: _angular_core.Signal<"sm" | "md" | "lg" | "none">;
1090
+ attached: _angular_core.InputSignal<boolean>;
1091
+ fullWidth: _angular_core.InputSignal<boolean>;
1092
+ disabled: _angular_core.InputSignal<boolean>;
1093
+ spacing: _angular_core.InputSignal<"sm" | "md" | "lg" | "none" | "xs">;
1094
+ align: _angular_core.InputSignal<"center" | "start" | "end" | "stretch">;
1095
+ showIcons: _angular_core.InputSignal<boolean>;
1096
+ iconPosition: _angular_core.InputSignal<"left" | "right" | "only">;
1097
+ ariaLabel: _angular_core.InputSignal<string | undefined>;
1098
+ valueChange: _angular_core.OutputEmitterRef<ButtonToggleGroupValue>;
1099
+ protected hostClasses: _angular_core.Signal<string>;
1100
+ protected isSelected(optionValue: string | number): boolean;
1101
+ protected handleToggle(optionValue: string | number): void;
1102
+ writeValue(val: ButtonToggleGroupValue): void;
1103
+ registerOnChange(fn: (value: ButtonToggleGroupValue) => void): void;
1104
+ registerOnTouched(fn: () => void): void;
1105
+ setDisabledState(isDisabled: boolean): void;
1106
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ButtonToggleGroupComponent, never>;
1107
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ButtonToggleGroupComponent, "studio-button-toggle-group", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": true; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "allowEmpty": { "alias": "allowEmpty"; "required": false; "isSignal": true; }; "orientationInput": { "alias": "orientation"; "required": false; "isSignal": true; }; "sizeInput": { "alias": "size"; "required": false; "isSignal": true; }; "variantInput": { "alias": "variant"; "required": false; "isSignal": true; }; "colorInput": { "alias": "color"; "required": false; "isSignal": true; }; "radiusInput": { "alias": "radius"; "required": false; "isSignal": true; }; "shadowInput": { "alias": "shadow"; "required": false; "isSignal": true; }; "attached": { "alias": "attached"; "required": false; "isSignal": true; }; "fullWidth": { "alias": "fullWidth"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "spacing": { "alias": "spacing"; "required": false; "isSignal": true; }; "align": { "alias": "align"; "required": false; "isSignal": true; }; "showIcons": { "alias": "showIcons"; "required": false; "isSignal": true; }; "iconPosition": { "alias": "iconPosition"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "valueChange": "valueChange"; }, never, never, true, never>;
1108
+ }
1109
+
899
1110
  /**
900
1111
  * Theme toggle switch with sun/moon icons
901
1112
  *
@@ -915,6 +1126,78 @@ declare class ThemeSwitchComponent {
915
1126
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<ThemeSwitchComponent, "studio-theme-switch", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "showLabel": { "alias": "showLabel"; "required": false; "isSignal": true; }; "iconOnly": { "alias": "iconOnly"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
916
1127
  }
917
1128
 
1129
+ declare class MaskDirective implements Validator {
1130
+ private readonly el;
1131
+ private readonly renderer;
1132
+ private readonly destroyRef;
1133
+ readonly mask: _angular_core.InputSignalWithTransform<string, string>;
1134
+ readonly maskPlaceholder: _angular_core.InputSignal<string>;
1135
+ readonly maskGuide: _angular_core.InputSignal<boolean>;
1136
+ readonly maskShowOnHover: _angular_core.InputSignal<boolean>;
1137
+ readonly maskShowOnFocus: _angular_core.InputSignal<boolean>;
1138
+ readonly maskClearIncomplete: _angular_core.InputSignal<boolean>;
1139
+ readonly maskAutoUnmask: _angular_core.InputSignal<boolean>;
1140
+ private readonly config;
1141
+ private readonly engine;
1142
+ readonly isComplete: _angular_core.WritableSignal<boolean>;
1143
+ readonly isActive: _angular_core.WritableSignal<boolean>;
1144
+ private onChange;
1145
+ private onTouched;
1146
+ constructor();
1147
+ onInput(event: InputEvent): void;
1148
+ onFocus(): void;
1149
+ onBlur(): void;
1150
+ onPaste(event: ClipboardEvent): void;
1151
+ writeValue(value: string): void;
1152
+ registerOnChange(fn: (value: string) => void): void;
1153
+ registerOnTouched(fn: () => void): void;
1154
+ validate(control: AbstractControl): ValidationErrors | null;
1155
+ private updatePlaceholder;
1156
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<MaskDirective, never>;
1157
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<MaskDirective, "input[studioMask]", never, { "mask": { "alias": "studioMask"; "required": false; "isSignal": true; }; "maskPlaceholder": { "alias": "maskPlaceholder"; "required": false; "isSignal": true; }; "maskGuide": { "alias": "maskGuide"; "required": false; "isSignal": true; }; "maskShowOnHover": { "alias": "maskShowOnHover"; "required": false; "isSignal": true; }; "maskShowOnFocus": { "alias": "maskShowOnFocus"; "required": false; "isSignal": true; }; "maskClearIncomplete": { "alias": "maskClearIncomplete"; "required": false; "isSignal": true; }; "maskAutoUnmask": { "alias": "maskAutoUnmask"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1158
+ }
1159
+
1160
+ interface MaskConfig {
1161
+ pattern: string;
1162
+ placeholder?: string;
1163
+ guide?: boolean;
1164
+ showOnHover?: boolean;
1165
+ showOnFocus?: boolean;
1166
+ clearIncomplete?: boolean;
1167
+ autoUnmask?: boolean;
1168
+ }
1169
+ interface MaskToken {
1170
+ type: 'digit' | 'letter' | 'alphanumeric' | 'any' | 'mixed' | 'static';
1171
+ char?: string;
1172
+ pattern?: RegExp;
1173
+ optional?: boolean;
1174
+ }
1175
+ interface MaskResult {
1176
+ value: string;
1177
+ raw: string;
1178
+ cursor: number;
1179
+ isComplete: boolean;
1180
+ }
1181
+ type MaskPreset = 'phone' | 'phone-ru' | 'phone-kz' | 'date' | 'datetime' | 'time' | 'card' | 'inn' | 'snils' | 'passport-ru';
1182
+
1183
+ declare class MaskEngine {
1184
+ private readonly config;
1185
+ private readonly tokens;
1186
+ private readonly patterns;
1187
+ constructor(config: MaskConfig);
1188
+ process(value: string, cursorPos?: number): MaskResult;
1189
+ getPlaceholder(): string;
1190
+ private parsePattern;
1191
+ private getTokenType;
1192
+ private applyMask;
1193
+ private extractRaw;
1194
+ private applyGuide;
1195
+ private calculateCursor;
1196
+ private checkComplete;
1197
+ }
1198
+
1199
+ declare const MASK_PRESETS: Record<MaskPreset, MaskConfig>;
1200
+
918
1201
  /**
919
1202
  * Checks if URL is safe for navigation
920
1203
  *
@@ -1013,5 +1296,5 @@ declare function loadGoogleFonts(fonts: Array<{
1013
1296
  display?: 'auto' | 'block' | 'swap' | 'fallback' | 'optional';
1014
1297
  }>): void;
1015
1298
 
1016
- export { BadgeComponent, ButtonComponent, CheckboxComponent, IconComponent, InputComponent, STUDIO_CONFIG, StudioConfigService, SwitchComponent, TextareaComponent, ThemeSwitchComponent, classNames, isSafeUrl, loadGoogleFont, loadGoogleFonts, provideStudioConfig, provideStudioIcons, sanitizeUrl, withConfigDefault };
1017
- export type { BadgeDefaultsConfig, ButtonDefaultsConfig, CheckboxColor, CheckboxDefaultsConfig, CheckboxRadius, CheckboxSize, CheckboxVariant, ColorConfig, ComponentsConfig, InputDefaultsConfig, InputMode, InputType, StudioConfig, StudioThemeConfig, SwitchDefaultsConfig, TextareaColor, TextareaDefaultsConfig, TextareaRadius, TextareaSize, TextareaVariant, ThemeMode };
1299
+ export { BadgeComponent, ButtonComponent, ButtonGroupComponent, ButtonToggleGroupComponent, CheckboxComponent, IconComponent, InputComponent, MASK_PRESETS, MaskDirective, MaskEngine, STUDIO_CONFIG, SelectComponent, StudioConfigService, SwitchComponent, TextareaComponent, ThemeSwitchComponent, classNames, isSafeUrl, loadGoogleFont, loadGoogleFonts, provideStudioConfig, provideStudioIcons, sanitizeUrl, withConfigDefault };
1300
+ export type { BadgeDefaultsConfig, ButtonDefaultsConfig, ButtonGroupDefaultsConfig, ButtonToggleGroupDefaultsConfig, ButtonToggleGroupOption, ButtonToggleGroupValue, CheckboxColor, CheckboxDefaultsConfig, CheckboxRadius, CheckboxSize, CheckboxVariant, ColorConfig, ComponentsConfig, InputDefaultsConfig, InputMode, InputType, MaskConfig, MaskPreset, MaskResult, MaskToken, SelectDefaultsConfig, SelectDisplayContext, SelectOption, SelectOptionGroup, SelectPosition, SelectSize, SelectVariant, StudioConfig, StudioThemeConfig, SwitchDefaultsConfig, TextareaColor, TextareaDefaultsConfig, TextareaRadius, TextareaSize, TextareaVariant, ThemeMode };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eduboxpro/studio",
3
- "version": "0.1.7",
3
+ "version": "0.1.9",
4
4
  "description": "Modern Angular UI library for educational platforms with customizable design system",
5
5
  "keywords": [
6
6
  "angular",