@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/fesm2022/eduboxpro-studio.mjs +821 -5
- package/fesm2022/eduboxpro-studio.mjs.map +1 -1
- package/index.d.ts +508 -3
- package/package.json +1 -1
- package/src/styles/studio.scss +5 -1
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
package/src/styles/studio.scss
CHANGED
|
@@ -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
|
}
|