@eduboxpro/studio 0.1.6 → 0.1.8

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,7 +1,7 @@
1
1
  import * as _angular_core from '@angular/core';
2
2
  import { InjectionToken, EnvironmentProviders, ElementRef, Signal } from '@angular/core';
3
- import { icons } from 'lucide-angular';
4
3
  import { ControlValueAccessor } from '@angular/forms';
4
+ import { icons } from 'lucide-angular';
5
5
 
6
6
  /**
7
7
  * Theme mode: light or dark
@@ -174,6 +174,51 @@ interface InputDefaultsConfig {
174
174
  floatingLabel?: boolean;
175
175
  clearable?: boolean;
176
176
  }
177
+ /**
178
+ * Checkbox component defaults configuration
179
+ */
180
+ interface CheckboxDefaultsConfig {
181
+ size?: 'sm' | 'md' | 'lg';
182
+ color?: 'primary' | 'secondary' | 'success' | 'error';
183
+ variant?: 'default' | 'outlined' | 'filled';
184
+ radius?: 'none' | 'sm' | 'md' | 'lg' | 'full';
185
+ labelPosition?: 'left' | 'right';
186
+ }
187
+ /**
188
+ * Textarea component defaults configuration
189
+ */
190
+ interface TextareaDefaultsConfig {
191
+ variant?: 'outline' | 'filled' | 'underline';
192
+ size?: 'sm' | 'md' | 'lg';
193
+ color?: 'primary' | 'secondary' | 'success' | 'error';
194
+ radius?: 'none' | 'sm' | 'md' | 'lg' | 'full';
195
+ rows?: number;
196
+ autoResize?: boolean;
197
+ resize?: 'none' | 'vertical' | 'horizontal' | 'both';
198
+ showCharCount?: boolean;
199
+ clearable?: boolean;
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
+ }
177
222
  /**
178
223
  * Components defaults configuration
179
224
  */
@@ -182,6 +227,10 @@ interface ComponentsConfig {
182
227
  badge?: BadgeDefaultsConfig;
183
228
  switch?: SwitchDefaultsConfig;
184
229
  input?: InputDefaultsConfig;
230
+ checkbox?: CheckboxDefaultsConfig;
231
+ textarea?: TextareaDefaultsConfig;
232
+ buttonGroup?: ButtonGroupDefaultsConfig;
233
+ buttonToggleGroup?: ButtonToggleGroupDefaultsConfig;
185
234
  }
186
235
  /**
187
236
  * Main Studio configuration interface
@@ -324,6 +373,194 @@ declare class ButtonComponent {
324
373
  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>;
325
374
  }
326
375
 
376
+ declare class ButtonGroupComponent {
377
+ private readonly elementRef;
378
+ private readonly configService;
379
+ private readonly groupDefaults;
380
+ orientationInput: _angular_core.InputSignal<"vertical" | "horizontal" | undefined>;
381
+ sizeInput: _angular_core.InputSignal<"sm" | "md" | "lg" | undefined>;
382
+ variantInput: _angular_core.InputSignal<"solid" | "outline" | "ghost" | undefined>;
383
+ colorInput: _angular_core.InputSignal<"primary" | "secondary" | "success" | "error" | "warning" | undefined>;
384
+ radiusInput: _angular_core.InputSignal<"sm" | "md" | "lg" | "none" | "xl" | "full" | undefined>;
385
+ orientation: _angular_core.Signal<"vertical" | "horizontal">;
386
+ size: _angular_core.Signal<"sm" | "md" | "lg" | undefined>;
387
+ variant: _angular_core.Signal<"solid" | "outline" | "ghost" | undefined>;
388
+ color: _angular_core.Signal<"primary" | "secondary" | "success" | "error" | "warning" | undefined>;
389
+ radius: _angular_core.Signal<"sm" | "md" | "lg" | "none" | "xl" | "full" | undefined>;
390
+ attached: _angular_core.InputSignal<boolean>;
391
+ fullWidth: _angular_core.InputSignal<boolean>;
392
+ disabled: _angular_core.InputSignal<boolean>;
393
+ spacing: _angular_core.InputSignal<"sm" | "md" | "lg" | "none" | "xs">;
394
+ align: _angular_core.InputSignal<"center" | "start" | "end" | "stretch">;
395
+ ariaLabel: _angular_core.InputSignal<string | undefined>;
396
+ role: _angular_core.InputSignal<string>;
397
+ protected hostClasses: _angular_core.Signal<string>;
398
+ constructor();
399
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ButtonGroupComponent, never>;
400
+ 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>;
401
+ }
402
+
403
+ /**
404
+ * Checkbox component for selecting boolean values
405
+ *
406
+ * @example
407
+ * <studio-checkbox
408
+ * [(ngModel)]="accepted"
409
+ * label="I accept terms and conditions"
410
+ * (changed)="onAccept($event)"
411
+ * />
412
+ */
413
+ declare class CheckboxComponent implements ControlValueAccessor {
414
+ private readonly configService;
415
+ private readonly checkboxDefaults;
416
+ /**
417
+ * Size of the checkbox
418
+ */
419
+ size: _angular_core.InputSignal<CheckboxSize>;
420
+ /**
421
+ * Color scheme
422
+ */
423
+ color: _angular_core.InputSignal<CheckboxColor>;
424
+ /**
425
+ * Visual variant
426
+ */
427
+ variant: _angular_core.InputSignal<CheckboxVariant>;
428
+ /**
429
+ * Border radius
430
+ */
431
+ radius: _angular_core.InputSignal<CheckboxRadius>;
432
+ /**
433
+ * Label text
434
+ */
435
+ label: _angular_core.InputSignal<string | undefined>;
436
+ /**
437
+ * Label position relative to checkbox
438
+ */
439
+ labelPosition: _angular_core.InputSignal<"left" | "right">;
440
+ /**
441
+ * Additional description text
442
+ */
443
+ description: _angular_core.InputSignal<string | undefined>;
444
+ /**
445
+ * Helper text
446
+ */
447
+ hint: _angular_core.InputSignal<string | undefined>;
448
+ /**
449
+ * Required field
450
+ */
451
+ required: _angular_core.InputSignal<boolean>;
452
+ /**
453
+ * Error state
454
+ */
455
+ error: _angular_core.InputSignal<boolean>;
456
+ /**
457
+ * Error message
458
+ */
459
+ errorMessage: _angular_core.InputSignal<string | undefined>;
460
+ /**
461
+ * Disabled state
462
+ */
463
+ disabled: _angular_core.InputSignal<boolean>;
464
+ /**
465
+ * Readonly state
466
+ */
467
+ readonly: _angular_core.InputSignal<boolean>;
468
+ /**
469
+ * Indeterminate state (for "select all" checkboxes)
470
+ */
471
+ indeterminate: _angular_core.InputSignal<boolean>;
472
+ /**
473
+ * Name attribute for form control
474
+ */
475
+ name: _angular_core.InputSignal<string | undefined>;
476
+ /**
477
+ * Tab index
478
+ */
479
+ tabIndex: _angular_core.InputSignal<number>;
480
+ /**
481
+ * Value for checkbox groups
482
+ */
483
+ value: _angular_core.InputSignal<any>;
484
+ /**
485
+ * Emitted when checkbox state changes
486
+ */
487
+ changed: _angular_core.OutputEmitterRef<boolean>;
488
+ /**
489
+ * Internal checked state
490
+ */
491
+ protected internalChecked: _angular_core.WritableSignal<boolean>;
492
+ /**
493
+ * Internal focus state
494
+ */
495
+ protected isFocused: _angular_core.WritableSignal<boolean>;
496
+ /**
497
+ * Unique ID for accessibility
498
+ */
499
+ protected checkboxId: _angular_core.WritableSignal<string>;
500
+ /**
501
+ * Host CSS classes
502
+ */
503
+ protected hostClasses: _angular_core.Signal<{
504
+ [x: string]: boolean;
505
+ 'studio-checkbox-wrapper': boolean;
506
+ 'studio-checkbox-wrapper--disabled': boolean;
507
+ 'studio-checkbox-wrapper--error': boolean;
508
+ 'studio-checkbox-wrapper--focused': boolean;
509
+ 'studio-checkbox-wrapper--label-left': boolean;
510
+ }>;
511
+ /**
512
+ * Checkbox element CSS classes
513
+ */
514
+ protected checkboxClasses: _angular_core.Signal<{
515
+ [x: string]: boolean;
516
+ 'studio-checkbox': boolean;
517
+ 'studio-checkbox--checked': boolean;
518
+ 'studio-checkbox--indeterminate': boolean;
519
+ 'studio-checkbox--disabled': boolean;
520
+ 'studio-checkbox--error': boolean;
521
+ }>;
522
+ /**
523
+ * Show error message
524
+ */
525
+ protected showError: _angular_core.Signal<string | false | undefined>;
526
+ /**
527
+ * Show hint
528
+ */
529
+ protected showHint: _angular_core.Signal<string | false | undefined>;
530
+ /**
531
+ * ARIA checked state
532
+ */
533
+ protected ariaChecked: _angular_core.Signal<"mixed" | "true" | "false">;
534
+ private onChange;
535
+ private onTouched;
536
+ writeValue(value: boolean): void;
537
+ registerOnChange(fn: (value: boolean) => void): void;
538
+ registerOnTouched(fn: () => void): void;
539
+ setDisabledState(isDisabled: boolean): void;
540
+ /**
541
+ * Handle checkbox toggle
542
+ */
543
+ protected handleChange(event: Event): void;
544
+ /**
545
+ * Handle focus
546
+ */
547
+ protected handleFocus(): void;
548
+ /**
549
+ * Handle blur
550
+ */
551
+ protected handleBlur(): void;
552
+ /**
553
+ * Handle label click
554
+ */
555
+ protected handleLabelClick(event: Event): void;
556
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<CheckboxComponent, never>;
557
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CheckboxComponent, "studio-checkbox", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "radius": { "alias": "radius"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "labelPosition": { "alias": "labelPosition"; "required": false; "isSignal": true; }; "description": { "alias": "description"; "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; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "indeterminate": { "alias": "indeterminate"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "tabIndex": { "alias": "tabIndex"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "changed": "changed"; }, never, never, true, never>;
558
+ }
559
+ type CheckboxSize = 'sm' | 'md' | 'lg';
560
+ type CheckboxColor = 'primary' | 'secondary' | 'success' | 'error';
561
+ type CheckboxVariant = 'default' | 'outlined' | 'filled';
562
+ type CheckboxRadius = 'none' | 'sm' | 'md' | 'lg' | 'full';
563
+
327
564
  /**
328
565
  * Icon component with Lucide icons support
329
566
  *
@@ -491,6 +728,274 @@ declare class SwitchComponent {
491
728
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SwitchComponent, "studio-switch", never, { "checked": { "alias": "checked"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "labelPosition": { "alias": "labelPosition"; "required": false; "isSignal": true; }; "showIcons": { "alias": "showIcons"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "sizeInput": { "alias": "size"; "required": false; "isSignal": true; }; "colorInput": { "alias": "color"; "required": false; "isSignal": true; }; }, { "checked": "checkedChange"; "checkedChange": "checkedChange"; }, never, never, true, never>;
492
729
  }
493
730
 
731
+ /**
732
+ * Textarea component for multi-line text input
733
+ *
734
+ * @example
735
+ * <studio-textarea
736
+ * [(ngModel)]="message"
737
+ * label="Your message"
738
+ * placeholder="Enter your message..."
739
+ * [rows]="4"
740
+ * />
741
+ */
742
+ declare class TextareaComponent implements ControlValueAccessor {
743
+ private readonly configService;
744
+ private readonly textareaDefaults;
745
+ variant: _angular_core.InputSignal<TextareaVariant>;
746
+ size: _angular_core.InputSignal<TextareaSize>;
747
+ color: _angular_core.InputSignal<TextareaColor>;
748
+ radius: _angular_core.InputSignal<TextareaRadius>;
749
+ /**
750
+ * Label text
751
+ */
752
+ label: _angular_core.InputSignal<string | undefined>;
753
+ /**
754
+ * Floating label (moves up when focused/filled)
755
+ */
756
+ floatingLabel: _angular_core.InputSignal<boolean>;
757
+ /**
758
+ * Placeholder text
759
+ */
760
+ placeholder: _angular_core.InputSignal<string | undefined>;
761
+ /**
762
+ * Helper text
763
+ */
764
+ hint: _angular_core.InputSignal<string | undefined>;
765
+ /**
766
+ * Number of visible text rows
767
+ */
768
+ rows: _angular_core.InputSignal<number>;
769
+ /**
770
+ * Minimum rows for auto-resize
771
+ */
772
+ minRows: _angular_core.InputSignal<number | undefined>;
773
+ /**
774
+ * Maximum rows for auto-resize
775
+ */
776
+ maxRows: _angular_core.InputSignal<number | undefined>;
777
+ /**
778
+ * Enable auto-resize based on content
779
+ */
780
+ autoResize: _angular_core.InputSignal<boolean>;
781
+ /**
782
+ * Resize behavior
783
+ */
784
+ resize: _angular_core.InputSignal<"none" | "vertical" | "horizontal" | "both">;
785
+ /**
786
+ * Maximum character length
787
+ */
788
+ maxLength: _angular_core.InputSignal<number | undefined>;
789
+ /**
790
+ * Show character counter
791
+ */
792
+ showCharCount: _angular_core.InputSignal<boolean>;
793
+ /**
794
+ * Character counter position
795
+ */
796
+ charCountPosition: _angular_core.InputSignal<"bottom-right" | "bottom-left">;
797
+ /**
798
+ * Required field
799
+ */
800
+ required: _angular_core.InputSignal<boolean>;
801
+ /**
802
+ * Minimum character length
803
+ */
804
+ minLength: _angular_core.InputSignal<number | undefined>;
805
+ /**
806
+ * Error state
807
+ */
808
+ error: _angular_core.InputSignal<boolean>;
809
+ /**
810
+ * Error message
811
+ */
812
+ errorMessage: _angular_core.InputSignal<string | undefined>;
813
+ /**
814
+ * Disabled state
815
+ */
816
+ disabled: _angular_core.InputSignal<boolean>;
817
+ /**
818
+ * Readonly state
819
+ */
820
+ readonly: _angular_core.InputSignal<boolean>;
821
+ /**
822
+ * Full width (100% of parent)
823
+ */
824
+ fullWidth: _angular_core.InputSignal<boolean>;
825
+ /**
826
+ * Name attribute for form control
827
+ */
828
+ name: _angular_core.InputSignal<string | undefined>;
829
+ /**
830
+ * Autocomplete attribute
831
+ */
832
+ autocomplete: _angular_core.InputSignal<string | undefined>;
833
+ /**
834
+ * Spellcheck attribute
835
+ */
836
+ spellcheck: _angular_core.InputSignal<boolean>;
837
+ /**
838
+ * Show clear button
839
+ */
840
+ clearable: _angular_core.InputSignal<boolean>;
841
+ /**
842
+ * Loading state
843
+ */
844
+ loading: _angular_core.InputSignal<boolean>;
845
+ /**
846
+ * Emitted when value changes
847
+ */
848
+ changed: _angular_core.OutputEmitterRef<string>;
849
+ /**
850
+ * Emitted on focus
851
+ */
852
+ focused: _angular_core.OutputEmitterRef<FocusEvent>;
853
+ /**
854
+ * Emitted on blur
855
+ */
856
+ blurred: _angular_core.OutputEmitterRef<FocusEvent>;
857
+ /**
858
+ * Emitted on key press
859
+ */
860
+ keyPressed: _angular_core.OutputEmitterRef<KeyboardEvent>;
861
+ /**
862
+ * Internal value
863
+ */
864
+ protected internalValue: _angular_core.WritableSignal<string>;
865
+ /**
866
+ * Internal focus state
867
+ */
868
+ protected isFocused: _angular_core.WritableSignal<boolean>;
869
+ /**
870
+ * Unique ID for accessibility
871
+ */
872
+ protected textareaId: _angular_core.WritableSignal<string>;
873
+ /**
874
+ * Textarea element reference
875
+ */
876
+ protected textareaEl: _angular_core.Signal<ElementRef<HTMLTextAreaElement> | undefined>;
877
+ protected hostClasses: _angular_core.Signal<string>;
878
+ /**
879
+ * Textarea element CSS classes
880
+ */
881
+ protected textareaClasses: _angular_core.Signal<string>;
882
+ /**
883
+ * Show error message
884
+ */
885
+ protected showError: _angular_core.Signal<string | false | undefined>;
886
+ /**
887
+ * Show hint
888
+ */
889
+ protected showHint: _angular_core.Signal<string | false | undefined>;
890
+ /**
891
+ * Character count text
892
+ */
893
+ protected charCountText: _angular_core.Signal<string>;
894
+ /**
895
+ * Is character limit exceeded
896
+ */
897
+ protected isCharLimitExceeded: _angular_core.Signal<boolean>;
898
+ /**
899
+ * Computed placeholder (empty if floating label)
900
+ */
901
+ protected computedPlaceholder: _angular_core.Signal<string | undefined>;
902
+ /**
903
+ * Show floating label in "up" position
904
+ */
905
+ protected showFloatingLabelUp: _angular_core.Signal<boolean>;
906
+ private onChange;
907
+ private onTouched;
908
+ writeValue(value: string): void;
909
+ registerOnChange(fn: (value: string) => void): void;
910
+ registerOnTouched(fn: () => void): void;
911
+ setDisabledState(isDisabled: boolean): void;
912
+ constructor();
913
+ /**
914
+ * Handle textarea input
915
+ */
916
+ protected handleInput(event: Event): void;
917
+ /**
918
+ * Handle focus
919
+ */
920
+ protected handleFocus(event: FocusEvent): void;
921
+ /**
922
+ * Handle blur
923
+ */
924
+ protected handleBlur(event: FocusEvent): void;
925
+ /**
926
+ * Handle key press
927
+ */
928
+ protected handleKeyPress(event: KeyboardEvent): void;
929
+ /**
930
+ * Clear textarea value
931
+ */
932
+ protected handleClear(): void;
933
+ /**
934
+ * Adjust textarea height for auto-resize
935
+ */
936
+ private adjustHeightIfNeeded;
937
+ /**
938
+ * Adjust textarea height based on content
939
+ */
940
+ private adjustHeight;
941
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TextareaComponent, never>;
942
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TextareaComponent, "studio-textarea", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "radius": { "alias": "radius"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "floatingLabel": { "alias": "floatingLabel"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "rows": { "alias": "rows"; "required": false; "isSignal": true; }; "minRows": { "alias": "minRows"; "required": false; "isSignal": true; }; "maxRows": { "alias": "maxRows"; "required": false; "isSignal": true; }; "autoResize": { "alias": "autoResize"; "required": false; "isSignal": true; }; "resize": { "alias": "resize"; "required": false; "isSignal": true; }; "maxLength": { "alias": "maxLength"; "required": false; "isSignal": true; }; "showCharCount": { "alias": "showCharCount"; "required": false; "isSignal": true; }; "charCountPosition": { "alias": "charCountPosition"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "minLength": { "alias": "minLength"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "errorMessage": { "alias": "errorMessage"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "fullWidth": { "alias": "fullWidth"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "autocomplete": { "alias": "autocomplete"; "required": false; "isSignal": true; }; "spellcheck": { "alias": "spellcheck"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; }, { "changed": "changed"; "focused": "focused"; "blurred": "blurred"; "keyPressed": "keyPressed"; }, never, never, true, never>;
943
+ }
944
+ type TextareaVariant = 'outline' | 'filled' | 'underline';
945
+ type TextareaSize = 'sm' | 'md' | 'lg';
946
+ type TextareaColor = 'primary' | 'secondary' | 'success' | 'error';
947
+ type TextareaRadius = 'none' | 'sm' | 'md' | 'lg' | 'full';
948
+
949
+ interface ButtonToggleGroupOption {
950
+ value: string | number;
951
+ label: string;
952
+ icon?: string;
953
+ disabled?: boolean;
954
+ ariaLabel?: string;
955
+ }
956
+ type ButtonToggleGroupValue = string | number | (string | number)[];
957
+
958
+ declare class ButtonToggleGroupComponent implements ControlValueAccessor {
959
+ private readonly configService;
960
+ private readonly toggleGroupDefaults;
961
+ private onChange;
962
+ private onTouched;
963
+ value: _angular_core.ModelSignal<ButtonToggleGroupValue>;
964
+ options: _angular_core.InputSignal<ButtonToggleGroupOption[]>;
965
+ multiple: _angular_core.InputSignal<boolean>;
966
+ allowEmpty: _angular_core.InputSignal<boolean>;
967
+ orientationInput: _angular_core.InputSignal<"vertical" | "horizontal" | undefined>;
968
+ sizeInput: _angular_core.InputSignal<"sm" | "md" | "lg" | undefined>;
969
+ variantInput: _angular_core.InputSignal<"solid" | "outline" | "ghost" | undefined>;
970
+ colorInput: _angular_core.InputSignal<"primary" | "secondary" | "success" | "error" | "warning" | undefined>;
971
+ radiusInput: _angular_core.InputSignal<"sm" | "md" | "lg" | "none" | "xl" | "full" | undefined>;
972
+ shadowInput: _angular_core.InputSignal<"sm" | "md" | "lg" | "none" | undefined>;
973
+ orientation: _angular_core.Signal<"vertical" | "horizontal">;
974
+ size: _angular_core.Signal<"sm" | "md" | "lg">;
975
+ variant: _angular_core.Signal<"solid" | "outline" | "ghost">;
976
+ color: _angular_core.Signal<"primary" | "secondary" | "success" | "error" | "warning">;
977
+ radius: _angular_core.Signal<"sm" | "md" | "lg" | "none" | "xl" | "full">;
978
+ shadow: _angular_core.Signal<"sm" | "md" | "lg" | "none">;
979
+ attached: _angular_core.InputSignal<boolean>;
980
+ fullWidth: _angular_core.InputSignal<boolean>;
981
+ disabled: _angular_core.InputSignal<boolean>;
982
+ spacing: _angular_core.InputSignal<"sm" | "md" | "lg" | "none" | "xs">;
983
+ align: _angular_core.InputSignal<"center" | "start" | "end" | "stretch">;
984
+ showIcons: _angular_core.InputSignal<boolean>;
985
+ iconPosition: _angular_core.InputSignal<"left" | "right" | "only">;
986
+ ariaLabel: _angular_core.InputSignal<string | undefined>;
987
+ valueChange: _angular_core.OutputEmitterRef<ButtonToggleGroupValue>;
988
+ protected hostClasses: _angular_core.Signal<string>;
989
+ protected isSelected(optionValue: string | number): boolean;
990
+ protected handleToggle(optionValue: string | number): void;
991
+ writeValue(val: ButtonToggleGroupValue): void;
992
+ registerOnChange(fn: (value: ButtonToggleGroupValue) => void): void;
993
+ registerOnTouched(fn: () => void): void;
994
+ setDisabledState(isDisabled: boolean): void;
995
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ButtonToggleGroupComponent, never>;
996
+ 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>;
997
+ }
998
+
494
999
  /**
495
1000
  * Theme toggle switch with sun/moon icons
496
1001
  *
@@ -608,5 +1113,5 @@ declare function loadGoogleFonts(fonts: Array<{
608
1113
  display?: 'auto' | 'block' | 'swap' | 'fallback' | 'optional';
609
1114
  }>): void;
610
1115
 
611
- export { BadgeComponent, ButtonComponent, IconComponent, InputComponent, STUDIO_CONFIG, StudioConfigService, SwitchComponent, ThemeSwitchComponent, classNames, isSafeUrl, loadGoogleFont, loadGoogleFonts, provideStudioConfig, provideStudioIcons, sanitizeUrl, withConfigDefault };
612
- export type { BadgeDefaultsConfig, ButtonDefaultsConfig, ColorConfig, ComponentsConfig, InputDefaultsConfig, InputMode, InputType, StudioConfig, StudioThemeConfig, SwitchDefaultsConfig, ThemeMode };
1116
+ export { BadgeComponent, ButtonComponent, ButtonGroupComponent, ButtonToggleGroupComponent, CheckboxComponent, IconComponent, InputComponent, STUDIO_CONFIG, StudioConfigService, SwitchComponent, TextareaComponent, ThemeSwitchComponent, classNames, isSafeUrl, loadGoogleFont, loadGoogleFonts, provideStudioConfig, provideStudioIcons, sanitizeUrl, withConfigDefault };
1117
+ export type { BadgeDefaultsConfig, ButtonDefaultsConfig, ButtonGroupDefaultsConfig, ButtonToggleGroupDefaultsConfig, ButtonToggleGroupOption, ButtonToggleGroupValue, CheckboxColor, CheckboxDefaultsConfig, CheckboxRadius, CheckboxSize, CheckboxVariant, ColorConfig, ComponentsConfig, InputDefaultsConfig, InputMode, InputType, 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.6",
3
+ "version": "0.1.8",
4
4
  "description": "Modern Angular UI library for educational platforms with customizable design system",
5
5
  "keywords": [
6
6
  "angular",
@@ -20,10 +20,14 @@ studio-input,
20
20
  studio-badge,
21
21
  studio-switch,
22
22
  studio-theme-switch,
23
+ studio-checkbox,
24
+ studio-textarea,
23
25
  studio-button *,
24
26
  studio-input *,
25
27
  studio-badge *,
26
28
  studio-switch *,
27
- studio-theme-switch * {
29
+ studio-theme-switch *,
30
+ studio-checkbox *,
31
+ studio-textarea * {
28
32
  font-family: var(--studio-font-family) !important;
29
33
  }