@eduboxpro/studio 0.1.15 → 0.1.17

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,5 +1,5 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { InjectionToken, EnvironmentProviders, OnInit, OnDestroy, AfterViewInit, ElementRef, TemplateRef, WritableSignal, Signal } from '@angular/core';
2
+ import { InjectionToken, EnvironmentProviders, OnInit, OnDestroy, TemplateRef, AfterViewInit, ElementRef, WritableSignal, Signal } from '@angular/core';
3
3
  import { Params, IsActiveMatchOptions } from '@angular/router';
4
4
  import { ControlValueAccessor, Validator, AbstractControl, ValidationErrors } from '@angular/forms';
5
5
  import { icons } from 'lucide-angular';
@@ -359,6 +359,26 @@ interface BottomNavigationDefaultsConfig {
359
359
  blur?: boolean;
360
360
  hideOnDesktop?: boolean;
361
361
  }
362
+ /**
363
+ * Card component defaults configuration
364
+ */
365
+ interface CardDefaultsConfig {
366
+ variant?: 'elevated' | 'filled' | 'outlined' | 'ghost';
367
+ size?: 'sm' | 'md' | 'lg';
368
+ color?: 'default' | 'primary' | 'secondary' | 'success' | 'error' | 'warning' | 'neutral';
369
+ radius?: 'none' | 'sm' | 'md' | 'lg' | 'xl';
370
+ shadow?: 'none' | 'sm' | 'md' | 'lg' | 'xl';
371
+ padding?: 'none' | 'sm' | 'md' | 'lg';
372
+ }
373
+ /**
374
+ * Table component defaults configuration
375
+ */
376
+ interface TableDefaultsConfig {
377
+ variant?: 'default' | 'striped' | 'bordered' | 'minimal';
378
+ density?: 'compact' | 'comfortable' | 'spacious';
379
+ hoverable?: boolean;
380
+ stickyHeader?: boolean;
381
+ }
362
382
  /**
363
383
  * Components defaults configuration
364
384
  */
@@ -382,6 +402,8 @@ interface ComponentsConfig {
382
402
  tabs?: TabsDefaultsConfig;
383
403
  modal?: ModalDefaultsConfig;
384
404
  bottomNavigation?: BottomNavigationDefaultsConfig;
405
+ card?: CardDefaultsConfig;
406
+ table?: TableDefaultsConfig;
385
407
  }
386
408
  /**
387
409
  * Main Studio configuration interface
@@ -676,6 +698,183 @@ declare class ButtonGroupComponent {
676
698
  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>;
677
699
  }
678
700
 
701
+ /**
702
+ * Card component types
703
+ */
704
+ type CardVariant = 'elevated' | 'filled' | 'outlined' | 'ghost';
705
+ type CardSize = 'sm' | 'md' | 'lg';
706
+ type CardColor = 'default' | 'primary' | 'secondary' | 'success' | 'error' | 'warning' | 'neutral';
707
+ type CardRadius = 'none' | 'sm' | 'md' | 'lg' | 'xl';
708
+ type CardShadow = 'none' | 'sm' | 'md' | 'lg' | 'xl';
709
+ type CardPadding = 'none' | 'sm' | 'md' | 'lg';
710
+ type CardOrientation = 'vertical' | 'horizontal';
711
+ type CardImagePosition = 'top' | 'left' | 'right' | 'bottom';
712
+
713
+ /**
714
+ * Card component for displaying content in a container
715
+ *
716
+ * @example
717
+ * <studio-card variant="elevated" color="primary">
718
+ * <div card-header>Header</div>
719
+ * <div card-body>Content</div>
720
+ * <div card-footer>Footer</div>
721
+ * </studio-card>
722
+ */
723
+ declare class CardComponent {
724
+ private readonly configService;
725
+ private readonly cardDefaults;
726
+ variantInput: _angular_core.InputSignal<CardVariant | undefined>;
727
+ sizeInput: _angular_core.InputSignal<CardSize | undefined>;
728
+ colorInput: _angular_core.InputSignal<CardColor | undefined>;
729
+ radiusInput: _angular_core.InputSignal<CardRadius | undefined>;
730
+ shadowInput: _angular_core.InputSignal<CardShadow | undefined>;
731
+ paddingInput: _angular_core.InputSignal<CardPadding | undefined>;
732
+ variant: _angular_core.Signal<"ghost" | "filled" | "outlined" | "elevated">;
733
+ size: _angular_core.Signal<"sm" | "md" | "lg">;
734
+ color: _angular_core.Signal<"primary" | "secondary" | "success" | "error" | "warning" | "neutral" | "default">;
735
+ radius: _angular_core.Signal<"sm" | "md" | "lg" | "none" | "xl">;
736
+ shadow: _angular_core.Signal<"sm" | "md" | "lg" | "none" | "xl">;
737
+ padding: _angular_core.Signal<"sm" | "md" | "lg" | "none">;
738
+ orientation: _angular_core.InputSignal<CardOrientation>;
739
+ imagePosition: _angular_core.InputSignal<CardImagePosition>;
740
+ fullWidth: _angular_core.InputSignal<boolean>;
741
+ fullHeight: _angular_core.InputSignal<boolean>;
742
+ title: _angular_core.InputSignal<string | undefined>;
743
+ subtitle: _angular_core.InputSignal<string | undefined>;
744
+ avatar: _angular_core.InputSignal<string | undefined>;
745
+ icon: _angular_core.InputSignal<string | undefined>;
746
+ image: _angular_core.InputSignal<string | undefined>;
747
+ imageAlt: _angular_core.InputSignal<string>;
748
+ imageFit: _angular_core.InputSignal<"cover" | "contain">;
749
+ showHeader: _angular_core.InputSignal<boolean>;
750
+ showMedia: _angular_core.InputSignal<boolean>;
751
+ showFooter: _angular_core.InputSignal<boolean>;
752
+ divider: _angular_core.InputSignal<boolean>;
753
+ hoverable: _angular_core.InputSignal<boolean>;
754
+ pressable: _angular_core.InputSignal<boolean>;
755
+ disabled: _angular_core.InputSignal<boolean>;
756
+ loading: _angular_core.InputSignal<boolean>;
757
+ href: _angular_core.InputSignal<string | undefined>;
758
+ target: _angular_core.InputSignal<"_blank" | "_self" | "_parent" | "_top">;
759
+ blurred: _angular_core.InputSignal<boolean>;
760
+ blurredFooter: _angular_core.InputSignal<boolean>;
761
+ animated: _angular_core.InputSignal<boolean>;
762
+ clicked: _angular_core.OutputEmitterRef<MouseEvent>;
763
+ headerAction: _angular_core.OutputEmitterRef<void>;
764
+ protected headerTemplate: _angular_core.Signal<TemplateRef<any> | undefined>;
765
+ protected headerActionsTemplate: _angular_core.Signal<TemplateRef<any> | undefined>;
766
+ protected mediaTemplate: _angular_core.Signal<TemplateRef<any> | undefined>;
767
+ protected bodyTemplate: _angular_core.Signal<TemplateRef<any> | undefined>;
768
+ protected footerTemplate: _angular_core.Signal<TemplateRef<any> | undefined>;
769
+ protected iconSize: _angular_core.Signal<number>;
770
+ protected hostClasses: _angular_core.Signal<string>;
771
+ protected handleClick(event: MouseEvent): void;
772
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<CardComponent, never>;
773
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CardComponent, "studio-card", 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; }; "paddingInput": { "alias": "padding"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "imagePosition": { "alias": "imagePosition"; "required": false; "isSignal": true; }; "fullWidth": { "alias": "fullWidth"; "required": false; "isSignal": true; }; "fullHeight": { "alias": "fullHeight"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "avatar": { "alias": "avatar"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "image": { "alias": "image"; "required": false; "isSignal": true; }; "imageAlt": { "alias": "imageAlt"; "required": false; "isSignal": true; }; "imageFit": { "alias": "imageFit"; "required": false; "isSignal": true; }; "showHeader": { "alias": "showHeader"; "required": false; "isSignal": true; }; "showMedia": { "alias": "showMedia"; "required": false; "isSignal": true; }; "showFooter": { "alias": "showFooter"; "required": false; "isSignal": true; }; "divider": { "alias": "divider"; "required": false; "isSignal": true; }; "hoverable": { "alias": "hoverable"; "required": false; "isSignal": true; }; "pressable": { "alias": "pressable"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "href": { "alias": "href"; "required": false; "isSignal": true; }; "target": { "alias": "target"; "required": false; "isSignal": true; }; "blurred": { "alias": "blurred"; "required": false; "isSignal": true; }; "blurredFooter": { "alias": "blurredFooter"; "required": false; "isSignal": true; }; "animated": { "alias": "animated"; "required": false; "isSignal": true; }; }, { "clicked": "clicked"; "headerAction": "headerAction"; }, ["headerTemplate", "headerActionsTemplate", "mediaTemplate", "bodyTemplate", "footerTemplate"], ["*"], true, never>;
774
+ }
775
+
776
+ interface ChatMessage {
777
+ id: string;
778
+ content: string;
779
+ userId: string;
780
+ userName: string;
781
+ userAvatar?: string;
782
+ timestamp: Date;
783
+ status?: 'sending' | 'sent' | 'delivered' | 'read' | 'error';
784
+ type?: 'text' | 'system';
785
+ edited?: boolean;
786
+ }
787
+ interface ChatUser {
788
+ id: string;
789
+ name: string;
790
+ avatar?: string;
791
+ online?: boolean;
792
+ }
793
+ type ChatVariant = 'default' | 'compact' | 'minimal' | 'bubbles';
794
+ type ChatSize = 'sm' | 'md' | 'lg';
795
+
796
+ /**
797
+ * Chat component - Flexible chat/messaging component
798
+ *
799
+ * @example
800
+ * <studio-chat
801
+ * [messages]="messages"
802
+ * [currentUserId]="currentUser.id"
803
+ * variant="default"
804
+ * (messageSubmit)="handleMessage($event)"
805
+ * />
806
+ */
807
+ declare class ChatComponent implements AfterViewInit {
808
+ messages: _angular_core.InputSignal<ChatMessage[]>;
809
+ currentUserId: _angular_core.InputSignal<string>;
810
+ variant: _angular_core.InputSignal<ChatVariant>;
811
+ size: _angular_core.InputSignal<ChatSize>;
812
+ height: _angular_core.InputSignal<string>;
813
+ placeholder: _angular_core.InputSignal<string>;
814
+ showAvatars: _angular_core.InputSignal<boolean>;
815
+ showTimestamps: _angular_core.InputSignal<boolean>;
816
+ showUserNames: _angular_core.InputSignal<boolean>;
817
+ enableAutoScroll: _angular_core.InputSignal<boolean>;
818
+ disabled: _angular_core.InputSignal<boolean>;
819
+ class: _angular_core.InputSignal<string>;
820
+ messageSubmit: _angular_core.OutputEmitterRef<{
821
+ content: string;
822
+ }>;
823
+ typing: _angular_core.OutputEmitterRef<boolean>;
824
+ protected messagesContainerRef: _angular_core.Signal<ElementRef<HTMLDivElement> | undefined>;
825
+ protected isScrolledUp: _angular_core.WritableSignal<boolean>;
826
+ protected shouldAutoScroll: _angular_core.WritableSignal<boolean>;
827
+ protected hostClasses: _angular_core.Signal<string>;
828
+ protected isCompact: _angular_core.Signal<boolean>;
829
+ constructor();
830
+ ngAfterViewInit(): void;
831
+ protected onScroll(): void;
832
+ protected onMessageSubmit(event: {
833
+ content: string;
834
+ }): void;
835
+ protected scrollToBottom(): void;
836
+ protected onTyping(typing: boolean): void;
837
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ChatComponent, never>;
838
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ChatComponent, "studio-chat", never, { "messages": { "alias": "messages"; "required": true; "isSignal": true; }; "currentUserId": { "alias": "currentUserId"; "required": true; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "showAvatars": { "alias": "showAvatars"; "required": false; "isSignal": true; }; "showTimestamps": { "alias": "showTimestamps"; "required": false; "isSignal": true; }; "showUserNames": { "alias": "showUserNames"; "required": false; "isSignal": true; }; "enableAutoScroll": { "alias": "enableAutoScroll"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, { "messageSubmit": "messageSubmit"; "typing": "typing"; }, never, never, true, never>;
839
+ }
840
+
841
+ declare class ChatMessageComponent {
842
+ message: _angular_core.InputSignal<ChatMessage>;
843
+ currentUserId: _angular_core.InputSignal<string>;
844
+ showAvatar: _angular_core.InputSignal<boolean>;
845
+ showTimestamp: _angular_core.InputSignal<boolean>;
846
+ showUserName: _angular_core.InputSignal<boolean>;
847
+ compact: _angular_core.InputSignal<boolean>;
848
+ protected isOwn: _angular_core.Signal<boolean>;
849
+ protected hostClasses: _angular_core.Signal<string>;
850
+ protected getInitials(name: string): string;
851
+ protected formatTime(date: Date): string;
852
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ChatMessageComponent, never>;
853
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ChatMessageComponent, "studio-chat-message", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; "currentUserId": { "alias": "currentUserId"; "required": true; "isSignal": true; }; "showAvatar": { "alias": "showAvatar"; "required": false; "isSignal": true; }; "showTimestamp": { "alias": "showTimestamp"; "required": false; "isSignal": true; }; "showUserName": { "alias": "showUserName"; "required": false; "isSignal": true; }; "compact": { "alias": "compact"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
854
+ }
855
+
856
+ declare class ChatInputComponent {
857
+ placeholder: _angular_core.InputSignal<string>;
858
+ disabled: _angular_core.InputSignal<boolean>;
859
+ compact: _angular_core.InputSignal<boolean>;
860
+ messageSubmit: _angular_core.OutputEmitterRef<{
861
+ content: string;
862
+ }>;
863
+ typing: _angular_core.OutputEmitterRef<boolean>;
864
+ protected inputValue: _angular_core.WritableSignal<string>;
865
+ protected textareaRef: _angular_core.Signal<ElementRef<HTMLTextAreaElement> | undefined>;
866
+ private typingTimeout?;
867
+ protected canSend: _angular_core.Signal<boolean>;
868
+ protected hostClasses: _angular_core.Signal<string>;
869
+ constructor();
870
+ protected onKeyDown(event: KeyboardEvent): void;
871
+ protected onInput(): void;
872
+ protected handleSubmit(): void;
873
+ focus(): void;
874
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ChatInputComponent, never>;
875
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ChatInputComponent, "studio-chat-input", never, { "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "compact": { "alias": "compact"; "required": false; "isSignal": true; }; }, { "messageSubmit": "messageSubmit"; "typing": "typing"; }, never, never, true, never>;
876
+ }
877
+
679
878
  /**
680
879
  * Checkbox component for selecting boolean values
681
880
  *
@@ -1897,6 +2096,273 @@ declare class SwitchComponent implements ControlValueAccessor {
1897
2096
  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>;
1898
2097
  }
1899
2098
 
2099
+ /**
2100
+ * Table component types and interfaces
2101
+ * Enterprise-grade type-safe table with full feature set
2102
+ */
2103
+
2104
+ /**
2105
+ * Column definition with type safety
2106
+ */
2107
+ interface TableColumn<T = any> {
2108
+ /** Unique column identifier */
2109
+ key: keyof T | string;
2110
+ /** Column header label */
2111
+ label: string;
2112
+ /** Data accessor function or property path */
2113
+ field?: keyof T | ((row: T) => any);
2114
+ /** Column width (CSS value) */
2115
+ width?: string;
2116
+ /** Minimum column width */
2117
+ minWidth?: string;
2118
+ /** Maximum column width */
2119
+ maxWidth?: string;
2120
+ /** Enable sorting for this column */
2121
+ sortable?: boolean;
2122
+ /** Custom sort comparator */
2123
+ sortFn?: (a: T, b: T, direction: SortDirection) => number;
2124
+ /** Enable filtering */
2125
+ filterable?: boolean;
2126
+ /** Column alignment */
2127
+ align?: 'left' | 'center' | 'right';
2128
+ /** Fixed column (sticky) */
2129
+ fixed?: 'left' | 'right' | false;
2130
+ /** Hide column on mobile */
2131
+ hideOnMobile?: boolean;
2132
+ /** Column priority for responsive (higher = keep visible longer) */
2133
+ priority?: number;
2134
+ /** Custom cell template */
2135
+ cellTemplate?: TemplateRef<TableCellContext<T>>;
2136
+ /** Custom header template */
2137
+ headerTemplate?: TemplateRef<TableHeaderContext<T>>;
2138
+ /** Cell CSS class */
2139
+ cellClass?: string | ((row: T) => string);
2140
+ /** Header CSS class */
2141
+ headerClass?: string;
2142
+ /** Format cell value */
2143
+ formatter?: (value: any, row: T) => string;
2144
+ /** Column is resizable */
2145
+ resizable?: boolean;
2146
+ }
2147
+ /**
2148
+ * Table cell template context
2149
+ */
2150
+ interface TableCellContext<T> {
2151
+ $implicit: any;
2152
+ row: T;
2153
+ column: TableColumn<T>;
2154
+ index: number;
2155
+ }
2156
+ /**
2157
+ * Table header template context
2158
+ */
2159
+ interface TableHeaderContext<T> {
2160
+ column: TableColumn<T>;
2161
+ sorted: boolean;
2162
+ direction: SortDirection | null;
2163
+ }
2164
+ /**
2165
+ * Sort configuration
2166
+ */
2167
+ interface TableSort<T = any> {
2168
+ column: keyof T | string;
2169
+ direction: SortDirection;
2170
+ }
2171
+ type SortDirection = 'asc' | 'desc';
2172
+ /**
2173
+ * Selection mode
2174
+ */
2175
+ type SelectionMode = 'none' | 'single' | 'multiple';
2176
+ /**
2177
+ * Table density/size
2178
+ */
2179
+ type TableDensity = 'compact' | 'comfortable' | 'spacious';
2180
+ /**
2181
+ * Table variant styles
2182
+ */
2183
+ type TableVariant = 'default' | 'striped' | 'bordered' | 'minimal';
2184
+ /**
2185
+ * Row expansion state
2186
+ */
2187
+ interface RowExpansion<T> {
2188
+ row: T;
2189
+ expanded: boolean;
2190
+ }
2191
+ /**
2192
+ * Table state (for external control)
2193
+ */
2194
+ interface TableState<T = any> {
2195
+ /** Currently sorted column */
2196
+ sort?: TableSort<T>;
2197
+ /** Selected row indices or IDs */
2198
+ selection?: Set<number | string>;
2199
+ /** Expanded row indices or IDs */
2200
+ expanded?: Set<number | string>;
2201
+ /** Current page (if using pagination) */
2202
+ page?: number;
2203
+ /** Page size */
2204
+ pageSize?: number;
2205
+ /** Global filter/search value */
2206
+ filter?: string;
2207
+ }
2208
+ /**
2209
+ * Sort event payload
2210
+ */
2211
+ interface SortEvent<T = any> {
2212
+ column: TableColumn<T>;
2213
+ direction: SortDirection;
2214
+ previousDirection: SortDirection | null;
2215
+ }
2216
+ /**
2217
+ * Selection event payload
2218
+ */
2219
+ interface SelectionEvent<T = any> {
2220
+ selected: T[];
2221
+ row?: T;
2222
+ isSelected: boolean;
2223
+ }
2224
+ /**
2225
+ * Row action definition
2226
+ */
2227
+ interface RowAction<T = any> {
2228
+ label: string;
2229
+ icon?: string;
2230
+ handler: (row: T) => void;
2231
+ visible?: (row: T) => boolean;
2232
+ disabled?: (row: T) => boolean;
2233
+ variant?: 'default' | 'danger';
2234
+ divider?: boolean;
2235
+ }
2236
+ /**
2237
+ * Empty state configuration
2238
+ */
2239
+ interface EmptyStateConfig {
2240
+ icon?: string;
2241
+ title?: string;
2242
+ message?: string;
2243
+ action?: {
2244
+ label: string;
2245
+ handler: () => void;
2246
+ };
2247
+ }
2248
+
2249
+ /**
2250
+ * Directive for declarative column definition
2251
+ *
2252
+ * @example
2253
+ * <studio-table-column
2254
+ * key="name"
2255
+ * label="Name"
2256
+ * [sortable]="true">
2257
+ * <ng-template let-row>{{ row.name }}</ng-template>
2258
+ * </studio-table-column>
2259
+ */
2260
+ declare class TableColumnDirective<T = any> {
2261
+ key: keyof T | string;
2262
+ label: string;
2263
+ field?: keyof T | ((row: T) => any);
2264
+ width?: string;
2265
+ minWidth?: string;
2266
+ maxWidth?: string;
2267
+ sortable?: boolean;
2268
+ sortFn?: (a: T, b: T, direction: 'asc' | 'desc') => number;
2269
+ filterable?: boolean;
2270
+ align?: 'left' | 'center' | 'right';
2271
+ fixed?: 'left' | 'right' | false;
2272
+ hideOnMobile?: boolean;
2273
+ priority?: number;
2274
+ cellClass?: string | ((row: T) => string);
2275
+ headerClass?: string;
2276
+ formatter?: (value: any, row: T) => string;
2277
+ resizable?: boolean;
2278
+ template?: TemplateRef<any>;
2279
+ /**
2280
+ * Convert directive inputs to TableColumn config
2281
+ */
2282
+ toColumnConfig(): TableColumn<T>;
2283
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TableColumnDirective<any>, never>;
2284
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<TableColumnDirective<any>, "studio-table-column", never, { "key": { "alias": "key"; "required": true; }; "label": { "alias": "label"; "required": true; }; "field": { "alias": "field"; "required": false; }; "width": { "alias": "width"; "required": false; }; "minWidth": { "alias": "minWidth"; "required": false; }; "maxWidth": { "alias": "maxWidth"; "required": false; }; "sortable": { "alias": "sortable"; "required": false; }; "sortFn": { "alias": "sortFn"; "required": false; }; "filterable": { "alias": "filterable"; "required": false; }; "align": { "alias": "align"; "required": false; }; "fixed": { "alias": "fixed"; "required": false; }; "hideOnMobile": { "alias": "hideOnMobile"; "required": false; }; "priority": { "alias": "priority"; "required": false; }; "cellClass": { "alias": "cellClass"; "required": false; }; "headerClass": { "alias": "headerClass"; "required": false; }; "formatter": { "alias": "formatter"; "required": false; }; "resizable": { "alias": "resizable"; "required": false; }; }, {}, ["template"], never, true, never>;
2285
+ }
2286
+
2287
+ /**
2288
+ * Enterprise-grade Table component with full feature set
2289
+ *
2290
+ * @example
2291
+ * <studio-table
2292
+ * [data]="users"
2293
+ * [columns]="columns"
2294
+ * selectionMode="multiple"
2295
+ * [(selected)]="selectedUsers">
2296
+ * </studio-table>
2297
+ */
2298
+ declare class TableComponent<T = any> {
2299
+ private readonly configService;
2300
+ private readonly tableDefaults;
2301
+ variantInput: _angular_core.InputSignal<TableVariant | undefined>;
2302
+ densityInput: _angular_core.InputSignal<TableDensity | undefined>;
2303
+ variant: _angular_core.Signal<"default" | "minimal" | "bordered" | "striped">;
2304
+ density: _angular_core.Signal<"compact" | "comfortable" | "spacious">;
2305
+ data: _angular_core.InputSignal<T[]>;
2306
+ columns: _angular_core.InputSignal<TableColumn<T>[]>;
2307
+ rowKey: _angular_core.InputSignal<keyof T | ((row: T) => string | number)>;
2308
+ columnDirectives: _angular_core.Signal<readonly TableColumnDirective<any>[]>;
2309
+ selectionMode: _angular_core.InputSignal<SelectionMode>;
2310
+ sortable: _angular_core.InputSignal<boolean>;
2311
+ sortMode: _angular_core.InputSignal<"client" | "server">;
2312
+ hoverable: _angular_core.InputSignal<boolean>;
2313
+ stickyHeader: _angular_core.InputSignal<boolean>;
2314
+ showHeader: _angular_core.InputSignal<boolean>;
2315
+ expandable: _angular_core.InputSignal<boolean>;
2316
+ expandedRowTemplate: _angular_core.Signal<TemplateRef<any> | undefined>;
2317
+ expandMultiple: _angular_core.InputSignal<boolean>;
2318
+ loading: _angular_core.InputSignal<boolean>;
2319
+ loadingRows: _angular_core.InputSignal<number>;
2320
+ emptyState: _angular_core.InputSignal<EmptyStateConfig>;
2321
+ rowActions: _angular_core.InputSignal<RowAction<T>[]>;
2322
+ responsive: _angular_core.InputSignal<boolean>;
2323
+ mobileBreakpoint: _angular_core.InputSignal<number>;
2324
+ selected: _angular_core.ModelSignal<T[]>;
2325
+ sort: _angular_core.ModelSignal<TableSort<T> | null>;
2326
+ expanded: _angular_core.ModelSignal<Set<string | number>>;
2327
+ sortChange: _angular_core.OutputEmitterRef<SortEvent<T>>;
2328
+ selectionChange: _angular_core.OutputEmitterRef<SelectionEvent<T>>;
2329
+ rowClick: _angular_core.OutputEmitterRef<T>;
2330
+ rowDblClick: _angular_core.OutputEmitterRef<T>;
2331
+ protected currentSort: _angular_core.WritableSignal<TableSort<T> | null>;
2332
+ protected selectedRows: _angular_core.WritableSignal<Set<string | number>>;
2333
+ protected expandedRows: _angular_core.WritableSignal<Set<string | number>>;
2334
+ protected finalColumns: _angular_core.Signal<TableColumn<T>[] | TableColumn<any>[]>;
2335
+ protected processedData: _angular_core.Signal<T[]>;
2336
+ protected allSelected: _angular_core.Signal<boolean>;
2337
+ protected someSelected: _angular_core.Signal<boolean>;
2338
+ protected hostClasses: _angular_core.Signal<string>;
2339
+ constructor();
2340
+ sortBy(column: TableColumn<T>, direction?: SortDirection): void;
2341
+ selectRow(row: T): void;
2342
+ selectAll(select: boolean): void;
2343
+ toggleRowExpansion(row: T): void;
2344
+ isRowExpanded(row: T): boolean;
2345
+ isRowSelected(row: T): boolean;
2346
+ getCellValue(row: T, column: TableColumn<T>): any;
2347
+ getHeaderClass(column: TableColumn<T>): string;
2348
+ getCellClass(row: T, column: TableColumn<T>): string;
2349
+ getFullCellClass(row: T, column: TableColumn<T>): string;
2350
+ getCellContext(row: T, column: TableColumn<T>, index: number): TableCellContext<T>;
2351
+ getHeaderContext(column: TableColumn<T>): TableHeaderContext<T>;
2352
+ getSortIcon(column: TableColumn<T>): string;
2353
+ handleRowClick(row: T, event: Event): void;
2354
+ handleRowDblClick(row: T): void;
2355
+ executeRowAction(action: RowAction<T>, row: T, event: Event): void;
2356
+ isActionVisible(action: RowAction<T>, row: T): boolean;
2357
+ isActionDisabled(action: RowAction<T>, row: T): boolean;
2358
+ getRowKey(row: T): string | number;
2359
+ private getSelectedRows;
2360
+ private updateSelectedModel;
2361
+ private applySorting;
2362
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TableComponent<any>, never>;
2363
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TableComponent<any>, "studio-table", never, { "variantInput": { "alias": "variant"; "required": false; "isSignal": true; }; "densityInput": { "alias": "density"; "required": false; "isSignal": true; }; "data": { "alias": "data"; "required": false; "isSignal": true; }; "columns": { "alias": "columns"; "required": false; "isSignal": true; }; "rowKey": { "alias": "rowKey"; "required": false; "isSignal": true; }; "selectionMode": { "alias": "selectionMode"; "required": false; "isSignal": true; }; "sortable": { "alias": "sortable"; "required": false; "isSignal": true; }; "sortMode": { "alias": "sortMode"; "required": false; "isSignal": true; }; "hoverable": { "alias": "hoverable"; "required": false; "isSignal": true; }; "stickyHeader": { "alias": "stickyHeader"; "required": false; "isSignal": true; }; "showHeader": { "alias": "showHeader"; "required": false; "isSignal": true; }; "expandable": { "alias": "expandable"; "required": false; "isSignal": true; }; "expandMultiple": { "alias": "expandMultiple"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "loadingRows": { "alias": "loadingRows"; "required": false; "isSignal": true; }; "emptyState": { "alias": "emptyState"; "required": false; "isSignal": true; }; "rowActions": { "alias": "rowActions"; "required": false; "isSignal": true; }; "responsive": { "alias": "responsive"; "required": false; "isSignal": true; }; "mobileBreakpoint": { "alias": "mobileBreakpoint"; "required": false; "isSignal": true; }; "selected": { "alias": "selected"; "required": false; "isSignal": true; }; "sort": { "alias": "sort"; "required": false; "isSignal": true; }; "expanded": { "alias": "expanded"; "required": false; "isSignal": true; }; }, { "selected": "selectedChange"; "sort": "sortChange"; "expanded": "expandedChange"; "sortChange": "sortChange"; "selectionChange": "selectionChange"; "rowClick": "rowClick"; "rowDblClick": "rowDblClick"; }, ["columnDirectives", "expandedRowTemplate"], never, true, never>;
2364
+ }
2365
+
1900
2366
  type TabsVariant = 'line' | 'pills' | 'enclosed';
1901
2367
  type TabsSize = 'sm' | 'md' | 'lg';
1902
2368
  type TabsOrientation = 'horizontal' | 'vertical';
@@ -2503,5 +2969,5 @@ declare function loadGoogleFonts(fonts: Array<{
2503
2969
  display?: 'auto' | 'block' | 'swap' | 'fallback' | 'optional';
2504
2970
  }>): void;
2505
2971
 
2506
- export { BadgeComponent, BadgeWrapperComponent, BottomNavigationComponent, ButtonComponent, ButtonGroupComponent, ButtonToggleGroupComponent, CheckboxComponent, ColorPickerCompactComponent, ColorPickerComponent, DEFAULT_COLOR_PRESETS, DrawerComponent, DrawerService, DropdownComponent, IconComponent, InputComponent, InspectorComponent, MASK_PRESETS, MaskDirective, MaskEngine, MenuComponent, ModalComponent, NavbarComponent, PopoverComponent, RadioButtonComponent, STUDIO_CONFIG, SelectComponent, SidebarComponent, StudioConfigService, SwitchComponent, TabsComponent, TextareaComponent, ThemeSwitchComponent, TooltipComponent, classNames, isSafeUrl, loadGoogleFont, loadGoogleFonts, provideStudioConfig, provideStudioIcons, sanitizeUrl, withConfigDefault };
2507
- export type { BadgeColor, BadgeDefaultsConfig, BadgeIconPosition, BadgeRadius, BadgeSize, BadgeVariant, BadgeWrapperPosition, BadgeWrapperSize, BottomNavigationDefaultsConfig, BottomNavigationFabPosition, BottomNavigationItem, BottomNavigationLabelMode, BottomNavigationSize, BottomNavigationVariant, ButtonDefaultsConfig, ButtonGroupDefaultsConfig, ButtonToggleGroupDefaultsConfig, ButtonToggleGroupOption, ButtonToggleGroupValue, CheckboxColor, CheckboxDefaultsConfig, CheckboxRadius, CheckboxSize, CheckboxVariant, ColorConfig, ColorFormat, ColorPickerDefaultsConfig, ColorPickerSize, ColorPickerVariant, ColorPreset, ColorSwatchGroup, ColorValue, ComponentsConfig, DrawerAnimationEasing, DrawerCloseButtonPosition, DrawerConfig, DrawerDefaultsConfig, DrawerPosition, DrawerRadius, DrawerRole, DrawerShadowSize, DrawerSize, DropdownDefaultsConfig, DropdownItem, DropdownPosition, HSL, InputDefaultsConfig, InputMode, InputType, InspectorComponentSize, InspectorComponentVariant, InspectorData, InspectorGroup, InspectorGroupDivider, InspectorOption, InspectorParameter, InspectorParameterType, InspectorSection, InspectorSpacing, MaskConfig, MaskPreset, MaskResult, MaskToken, MenuColor, MenuExpandEvent, MenuExpandIconPosition, MenuItem, MenuItemBadgeColor, MenuItemClickEvent, MenuItemCommandEvent, MenuItemIconPosition, MenuItemTarget, MenuItemTooltipPosition, MenuMode, MenuOrientation, MenuRadius, MenuSize, MenuSpacing, MenuVariant, ModalAnimation, ModalDefaultsConfig, ModalPosition, ModalSize, ModalVariant, NavbarColor, NavbarShadow, NavbarSize, NavbarVariant, PopoverAnimation, PopoverBoundary, PopoverConfig, PopoverDefaultsConfig, PopoverPosition, PopoverSize, PopoverTrigger, PopoverVariant, PopoverWidth, RGB, RadioButtonColor, RadioButtonDefaultsConfig, RadioButtonRadius, RadioButtonSize, RadioButtonVariant, SelectDefaultsConfig, SelectDisplayContext, SelectOption, SelectOptionGroup, SelectPosition, SelectSize, SelectVariant, SidebarConfig, SidebarDefaultsConfig, SidebarPosition, SidebarSize, SidebarVariant, StudioConfig, StudioThemeConfig, SwitchDefaultsConfig, TabItem, TabsDefaultsConfig, TabsOrientation, TabsSize, TabsVariant, TextareaColor, TextareaDefaultsConfig, TextareaRadius, TextareaSize, TextareaVariant, ThemeMode, TooltipDefaultsConfig };
2972
+ export { BadgeComponent, BadgeWrapperComponent, BottomNavigationComponent, ButtonComponent, ButtonGroupComponent, ButtonToggleGroupComponent, CardComponent, ChatComponent, ChatInputComponent, ChatMessageComponent, CheckboxComponent, ColorPickerCompactComponent, ColorPickerComponent, DEFAULT_COLOR_PRESETS, DrawerComponent, DrawerService, DropdownComponent, IconComponent, InputComponent, InspectorComponent, MASK_PRESETS, MaskDirective, MaskEngine, MenuComponent, ModalComponent, NavbarComponent, PopoverComponent, RadioButtonComponent, STUDIO_CONFIG, SelectComponent, SidebarComponent, StudioConfigService, SwitchComponent, TableColumnDirective, TableComponent, TabsComponent, TextareaComponent, ThemeSwitchComponent, TooltipComponent, classNames, isSafeUrl, loadGoogleFont, loadGoogleFonts, provideStudioConfig, provideStudioIcons, sanitizeUrl, withConfigDefault };
2973
+ export type { BadgeColor, BadgeDefaultsConfig, BadgeIconPosition, BadgeRadius, BadgeSize, BadgeVariant, BadgeWrapperPosition, BadgeWrapperSize, BottomNavigationDefaultsConfig, BottomNavigationFabPosition, BottomNavigationItem, BottomNavigationLabelMode, BottomNavigationSize, BottomNavigationVariant, ButtonDefaultsConfig, ButtonGroupDefaultsConfig, ButtonToggleGroupDefaultsConfig, ButtonToggleGroupOption, ButtonToggleGroupValue, CardColor, CardDefaultsConfig, CardImagePosition, CardOrientation, CardPadding, CardRadius, CardShadow, CardSize, CardVariant, ChatMessage, ChatSize, ChatUser, ChatVariant, CheckboxColor, CheckboxDefaultsConfig, CheckboxRadius, CheckboxSize, CheckboxVariant, ColorConfig, ColorFormat, ColorPickerDefaultsConfig, ColorPickerSize, ColorPickerVariant, ColorPreset, ColorSwatchGroup, ColorValue, ComponentsConfig, DrawerAnimationEasing, DrawerCloseButtonPosition, DrawerConfig, DrawerDefaultsConfig, DrawerPosition, DrawerRadius, DrawerRole, DrawerShadowSize, DrawerSize, DropdownDefaultsConfig, DropdownItem, DropdownPosition, EmptyStateConfig, HSL, InputDefaultsConfig, InputMode, InputType, InspectorComponentSize, InspectorComponentVariant, InspectorData, InspectorGroup, InspectorGroupDivider, InspectorOption, InspectorParameter, InspectorParameterType, InspectorSection, InspectorSpacing, MaskConfig, MaskPreset, MaskResult, MaskToken, MenuColor, MenuExpandEvent, MenuExpandIconPosition, MenuItem, MenuItemBadgeColor, MenuItemClickEvent, MenuItemCommandEvent, MenuItemIconPosition, MenuItemTarget, MenuItemTooltipPosition, MenuMode, MenuOrientation, MenuRadius, MenuSize, MenuSpacing, MenuVariant, ModalAnimation, ModalDefaultsConfig, ModalPosition, ModalSize, ModalVariant, NavbarColor, NavbarShadow, NavbarSize, NavbarVariant, PopoverAnimation, PopoverBoundary, PopoverConfig, PopoverDefaultsConfig, PopoverPosition, PopoverSize, PopoverTrigger, PopoverVariant, PopoverWidth, RGB, RadioButtonColor, RadioButtonDefaultsConfig, RadioButtonRadius, RadioButtonSize, RadioButtonVariant, RowAction, RowExpansion, SelectDefaultsConfig, SelectDisplayContext, SelectOption, SelectOptionGroup, SelectPosition, SelectSize, SelectVariant, SelectionEvent, SelectionMode, SidebarConfig, SidebarDefaultsConfig, SidebarPosition, SidebarSize, SidebarVariant, SortDirection, SortEvent, StudioConfig, StudioThemeConfig, SwitchDefaultsConfig, TabItem, TableCellContext, TableColumn, TableDefaultsConfig, TableDensity, TableHeaderContext, TableSort, TableState, TableVariant, TabsDefaultsConfig, TabsOrientation, TabsSize, TabsVariant, TextareaColor, TextareaDefaultsConfig, TextareaRadius, TextareaSize, TextareaVariant, ThemeMode, TooltipDefaultsConfig };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eduboxpro/studio",
3
- "version": "0.1.15",
3
+ "version": "0.1.17",
4
4
  "description": "Modern Angular UI library for educational platforms with customizable design system",
5
5
  "keywords": [
6
6
  "angular",