commons-shared-web-ui 0.0.23 → 0.0.25

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
@@ -6,7 +6,7 @@ import { FormGroup, FormBuilder, FormArray, FormControl, ValidatorFn, ControlVal
6
6
  import { HttpClient, HttpHeaders } from '@angular/common/http';
7
7
  import * as i3$2 from '@angular/router';
8
8
  import { Router, ActivatedRoute } from '@angular/router';
9
- import { Observable, Subject } from 'rxjs';
9
+ import { BehaviorSubject, Subject, Observable } from 'rxjs';
10
10
  import * as i2 from '@angular/material/snack-bar';
11
11
  import { MatSnackBar, MatSnackBarRef } from '@angular/material/snack-bar';
12
12
  import { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';
@@ -921,7 +921,10 @@ declare class SmartFormController {
921
921
  labels: any;
922
922
  /** Custom label keys for form actions (Next, Submit, Add, etc.) */
923
923
  actionLabels?: FormLabels;
924
- private fieldSubjects;
924
+ fieldSubjects: Map<string, BehaviorSubject<any>>;
925
+ fileAdded$: Subject<any>;
926
+ fileUploadFinished$: Subject<any>;
927
+ fileRemoved$: Subject<any>;
925
928
  initialize(initialData: {
926
929
  [key: string]: any;
927
930
  }): void;
@@ -1013,6 +1016,9 @@ declare class SmartFormComponent implements OnInit, OnChanges, OnDestroy {
1013
1016
  valueChange: EventEmitter<{
1014
1017
  [key: string]: any;
1015
1018
  }>;
1019
+ fileAdded: EventEmitter<any>;
1020
+ fileUploadFinished: EventEmitter<any>;
1021
+ fileRemoved: EventEmitter<any>;
1016
1022
  formSchema: FormSchema;
1017
1023
  formGroup: FormGroup;
1018
1024
  fieldList: FieldConfig[];
@@ -1072,7 +1078,7 @@ declare class SmartFormComponent implements OnInit, OnChanges, OnDestroy {
1072
1078
  private getButtonByActionKind;
1073
1079
  private navigateTo;
1074
1080
  static ɵfac: i0.ɵɵFactoryDeclaration<SmartFormComponent, never>;
1075
- static ɵcmp: i0.ɵɵComponentDeclaration<SmartFormComponent, "lib-smart-form", never, { "formJson": { "alias": "formJson"; "required": false; }; "initialValues": { "alias": "initialValues"; "required": false; }; "enableDraftAutoSave": { "alias": "enableDraftAutoSave"; "required": false; }; "labels": { "alias": "labels"; "required": false; }; "mode": { "alias": "mode"; "required": false; }; }, { "submit": "submit"; "draftSave": "draftSave"; "actionClick": "actionClick"; "valueChange": "valueChange"; }, never, never, false, never>;
1081
+ static ɵcmp: i0.ɵɵComponentDeclaration<SmartFormComponent, "lib-smart-form", never, { "formJson": { "alias": "formJson"; "required": false; }; "initialValues": { "alias": "initialValues"; "required": false; }; "enableDraftAutoSave": { "alias": "enableDraftAutoSave"; "required": false; }; "labels": { "alias": "labels"; "required": false; }; "mode": { "alias": "mode"; "required": false; }; }, { "submit": "submit"; "draftSave": "draftSave"; "actionClick": "actionClick"; "valueChange": "valueChange"; "fileAdded": "fileAdded"; "fileUploadFinished": "fileUploadFinished"; "fileRemoved": "fileRemoved"; }, never, never, false, never>;
1076
1082
  }
1077
1083
 
1078
1084
  declare class FormSectionComponent implements OnInit, OnDestroy {
@@ -1845,7 +1851,7 @@ interface RadioConfig {
1845
1851
  disabled?: boolean;
1846
1852
  required?: boolean;
1847
1853
  labelPosition?: 'before' | 'after';
1848
- color?: 'primary' | 'accent' | 'warn';
1854
+ color?: 'primary' | 'warning' | 'danger' | 'success' | 'accent' | 'warn' | string;
1849
1855
  layout?: 'vertical' | 'horizontal';
1850
1856
  gap?: string;
1851
1857
  labelColor?: string;
@@ -1872,7 +1878,7 @@ declare class RadioComponent implements ControlValueAccessor, OnInit {
1872
1878
  disabled: boolean;
1873
1879
  required: boolean;
1874
1880
  labelPosition: 'before' | 'after';
1875
- color: 'primary' | 'accent' | 'warn';
1881
+ color: 'primary' | 'warning' | 'danger' | 'success' | 'accent' | 'warn' | string;
1876
1882
  layout: 'vertical' | 'horizontal';
1877
1883
  labels: RadioLabels;
1878
1884
  gap?: string;
@@ -1904,8 +1910,9 @@ declare class RadioComponent implements ControlValueAccessor, OnInit {
1904
1910
  registerOnChange(fn: any): void;
1905
1911
  registerOnTouched(fn: any): void;
1906
1912
  setDisabledState(isDisabled: boolean): void;
1907
- onRadioChange(event: any): void;
1913
+ onRadioChange(option: RadioOption): void;
1908
1914
  private getStyleValue;
1915
+ private getThemeColor;
1909
1916
  get wrapperStyles(): {
1910
1917
  [key: string]: string | undefined;
1911
1918
  };
@@ -1922,7 +1929,7 @@ interface ToggleConfig {
1922
1929
  disabled?: boolean;
1923
1930
  required?: boolean;
1924
1931
  labelPosition?: 'before' | 'after';
1925
- color?: string;
1932
+ color?: 'primary' | 'warning' | 'danger' | 'success' | string;
1926
1933
  uncheckedColor?: string;
1927
1934
  checkedColor?: string;
1928
1935
  thumbColor?: string;
@@ -1976,6 +1983,7 @@ declare class ToggleComponent implements ControlValueAccessor, OnInit, OnChanges
1976
1983
  setDisabledState(isDisabled: boolean): void;
1977
1984
  onToggleChange(event: any): void;
1978
1985
  private getStyleValue;
1986
+ private getThemeColor;
1979
1987
  get wrapperStyles(): {
1980
1988
  [key: string]: string | undefined;
1981
1989
  };
@@ -2339,6 +2347,8 @@ declare class ButtonDropdownComponent {
2339
2347
  declare class ConfirmationModalComponent implements OnInit, OnDestroy {
2340
2348
  config: ConfirmationModalConfig;
2341
2349
  isOpen: boolean;
2350
+ confirmDisabled: boolean;
2351
+ confirmLoading: boolean;
2342
2352
  confirm: EventEmitter<void>;
2343
2353
  cancel: EventEmitter<void>;
2344
2354
  close: EventEmitter<void>;
@@ -2346,6 +2356,7 @@ declare class ConfirmationModalComponent implements OnInit, OnDestroy {
2346
2356
  private defaultConfig;
2347
2357
  mergedConfig: ConfirmationModalConfig;
2348
2358
  private previousActiveElement;
2359
+ private isSubmitting;
2349
2360
  ngOnInit(): void;
2350
2361
  ngOnChanges(): void;
2351
2362
  private updateConfig;
@@ -2364,7 +2375,7 @@ declare class ConfirmationModalComponent implements OnInit, OnDestroy {
2364
2375
  getIconValue(icon: any): string;
2365
2376
  getIconColor(icon: any): string | undefined;
2366
2377
  static ɵfac: i0.ɵɵFactoryDeclaration<ConfirmationModalComponent, never>;
2367
- static ɵcmp: i0.ɵɵComponentDeclaration<ConfirmationModalComponent, "cc-confirmation-modal", never, { "config": { "alias": "config"; "required": false; }; "isOpen": { "alias": "isOpen"; "required": false; }; }, { "confirm": "confirm"; "cancel": "cancel"; "close": "close"; "showCodeSnippet": "showCodeSnippet"; }, never, ["*", "[cc-modal-footer]"], false, never>;
2378
+ static ɵcmp: i0.ɵɵComponentDeclaration<ConfirmationModalComponent, "cc-confirmation-modal", never, { "config": { "alias": "config"; "required": false; }; "isOpen": { "alias": "isOpen"; "required": false; }; "confirmDisabled": { "alias": "confirmDisabled"; "required": false; }; "confirmLoading": { "alias": "confirmLoading"; "required": false; }; }, { "confirm": "confirm"; "cancel": "cancel"; "close": "close"; "showCodeSnippet": "showCodeSnippet"; }, never, ["*", "[cc-modal-footer]"], false, never>;
2368
2379
  }
2369
2380
 
2370
2381
  declare class ConfirmationModalModule {
@@ -3128,7 +3139,7 @@ interface TableFilter {
3128
3139
  }
3129
3140
  interface TableActionItem {
3130
3141
  label: string;
3131
- type: 'api' | 'callback' | 'route';
3142
+ type: 'api' | 'callback' | 'route' | 'delete';
3132
3143
  icon?: string;
3133
3144
  apiUrl?: string;
3134
3145
  apiMethod?: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';
@@ -3136,6 +3147,15 @@ interface TableActionItem {
3136
3147
  confirmationNeeded?: boolean;
3137
3148
  confirmationMessage?: string;
3138
3149
  callback?: (row: any) => void;
3150
+ /** Config for native 'delete' action type — drives the built-in confirmation modal */
3151
+ deleteConfig?: {
3152
+ apiUrl: string;
3153
+ idField?: string;
3154
+ modalTitle?: string;
3155
+ modalMessage?: string;
3156
+ confirmLabel?: string;
3157
+ cancelLabel?: string;
3158
+ };
3139
3159
  }
3140
3160
  interface TableAction {
3141
3161
  label: string;
@@ -3182,7 +3202,7 @@ interface QueryParamsConfig {
3182
3202
  }
3183
3203
  interface TableConfig {
3184
3204
  columns: TableColumn[];
3185
- apiUrl: string;
3205
+ apiUrl?: string;
3186
3206
  apiMethod?: 'GET' | 'POST';
3187
3207
  apiPayload?: any;
3188
3208
  dataResponsePath?: string;
@@ -3220,6 +3240,22 @@ interface TableLabels {
3220
3240
  itemsPerPageLabel?: string;
3221
3241
  defaultConfirmationMessage?: string;
3222
3242
  }
3243
+ /**
3244
+ * Emitted by the SmartTableComponent when operating in external-data mode
3245
+ * (i.e. when [tableData] input is provided by the parent).
3246
+ * The parent is responsible for fetching updated data based on this event
3247
+ * and providing it back via [tableData] and [totalItemsCount].
3248
+ */
3249
+ interface TableDataChangeEvent {
3250
+ page: number;
3251
+ pageSize: number;
3252
+ sortBy?: string;
3253
+ orderBy?: 'ASC' | 'DESC';
3254
+ searchTerm?: string;
3255
+ filters?: {
3256
+ [key: string]: any;
3257
+ };
3258
+ }
3223
3259
 
3224
3260
  declare class SmartTableComponent implements OnInit, OnChanges, AfterViewInit, OnDestroy {
3225
3261
  private http;
@@ -3227,6 +3263,18 @@ declare class SmartTableComponent implements OnInit, OnChanges, AfterViewInit, O
3227
3263
  private cdr;
3228
3264
  private ngZone;
3229
3265
  config: TableConfig;
3266
+ /**
3267
+ * External data mode: pass table rows directly from the parent.
3268
+ * When this input is provided, the component will NOT make any internal API calls.
3269
+ * Instead, it emits sortChange / pageChange / searchChange / filterChange events
3270
+ * so the parent can fetch and supply updated data.
3271
+ */
3272
+ tableData?: any[];
3273
+ /**
3274
+ * Total number of items — used by the pagination component when operating in
3275
+ * external-data mode. Must be kept in sync by the parent.
3276
+ */
3277
+ totalItemsCount?: number;
3230
3278
  action: EventEmitter<{
3231
3279
  action: TableAction;
3232
3280
  row: any;
@@ -3241,6 +3289,12 @@ declare class SmartTableComponent implements OnInit, OnChanges, AfterViewInit, O
3241
3289
  row: any;
3242
3290
  column: string;
3243
3291
  }>;
3292
+ /** Emitted in external-data mode when the user changes the sort column/direction. */
3293
+ sortChange: EventEmitter<TableDataChangeEvent>;
3294
+ /** Emitted in external-data mode when the user changes the page or page size. */
3295
+ pageChange: EventEmitter<TableDataChangeEvent>;
3296
+ /** Emitted in external-data mode when the user types in the search box. */
3297
+ searchChange: EventEmitter<TableDataChangeEvent>;
3244
3298
  data: any[];
3245
3299
  totalItems: number;
3246
3300
  currentPage: number;
@@ -3249,6 +3303,7 @@ declare class SmartTableComponent implements OnInit, OnChanges, AfterViewInit, O
3249
3303
  key: string;
3250
3304
  direction: 'ASC' | 'DESC';
3251
3305
  };
3306
+ private isSortActive;
3252
3307
  activeFilters: {
3253
3308
  [key: string]: any;
3254
3309
  };
@@ -3259,6 +3314,14 @@ declare class SmartTableComponent implements OnInit, OnChanges, AfterViewInit, O
3259
3314
  };
3260
3315
  hasStickyColumns: boolean;
3261
3316
  openDropdownId: string | null;
3317
+ /** Viewport-relative position used to render the dropdown as position:fixed. */
3318
+ dropdownPosition: {
3319
+ top: number;
3320
+ right: number;
3321
+ };
3322
+ deleteModalOpen: boolean;
3323
+ deleteModalConfig: any;
3324
+ private pendingDeleteAction;
3262
3325
  searchSubject: Subject<string>;
3263
3326
  stickyHeaders: QueryList<ElementRef>;
3264
3327
  private resizeObserver;
@@ -3276,8 +3339,17 @@ declare class SmartTableComponent implements OnInit, OnChanges, AfterViewInit, O
3276
3339
  onSort(col: TableColumn): void;
3277
3340
  onSearch(event: Event): void;
3278
3341
  onFilterChange(key: string, event: Event): void;
3342
+ /**
3343
+ * Assembles the current table state into a `TableDataChangeEvent` object.
3344
+ * Emitted to the parent in external-data mode so it can fetch and supply new data.
3345
+ */
3346
+ private buildChangeEvent;
3279
3347
  onAction(action: TableAction, row: any): void;
3280
3348
  onActionItemClick(item: any, row: any, event: Event): void;
3349
+ private openDeleteConfirmModal;
3350
+ deleteModalMessage: string;
3351
+ onDeleteConfirm(): void;
3352
+ onDeleteCancel(): void;
3281
3353
  onTopAction(action: TableAction): void;
3282
3354
  private executeApiAction;
3283
3355
  onSelectAll(event: Event): void;
@@ -3297,12 +3369,12 @@ declare class SmartTableComponent implements OnInit, OnChanges, AfterViewInit, O
3297
3369
  toggleDropdown(id: string, event: Event): void;
3298
3370
  closeDropdown(): void;
3299
3371
  static ɵfac: i0.ɵɵFactoryDeclaration<SmartTableComponent, never>;
3300
- static ɵcmp: i0.ɵɵComponentDeclaration<SmartTableComponent, "lib-smart-table", never, { "config": { "alias": "config"; "required": false; }; }, { "action": "action"; "topAction": "topAction"; "filterChange": "filterChange"; "rowSelect": "rowSelect"; "columnClick": "columnClick"; }, never, never, false, never>;
3372
+ static ɵcmp: i0.ɵɵComponentDeclaration<SmartTableComponent, "lib-smart-table", never, { "config": { "alias": "config"; "required": false; }; "tableData": { "alias": "tableData"; "required": false; }; "totalItemsCount": { "alias": "totalItemsCount"; "required": false; }; }, { "action": "action"; "topAction": "topAction"; "filterChange": "filterChange"; "rowSelect": "rowSelect"; "columnClick": "columnClick"; "sortChange": "sortChange"; "pageChange": "pageChange"; "searchChange": "searchChange"; }, never, never, false, never>;
3301
3373
  }
3302
3374
 
3303
3375
  declare class SmartTableModule {
3304
3376
  static ɵfac: i0.ɵɵFactoryDeclaration<SmartTableModule, never>;
3305
- static ɵmod: i0.ɵɵNgModuleDeclaration<SmartTableModule, [typeof SmartTableComponent], [typeof i2$1.CommonModule, typeof i3$1.FormsModule, typeof PaginationModule, typeof ButtonModule, typeof MaterialModule], [typeof SmartTableComponent]>;
3377
+ static ɵmod: i0.ɵɵNgModuleDeclaration<SmartTableModule, [typeof SmartTableComponent], [typeof i2$1.CommonModule, typeof i3$1.FormsModule, typeof PaginationModule, typeof ButtonModule, typeof MaterialModule, typeof ConfirmationModalModule], [typeof SmartTableComponent]>;
3306
3378
  static ɵinj: i0.ɵɵInjectorDeclaration<SmartTableModule>;
3307
3379
  }
3308
3380
 
@@ -3356,4 +3428,4 @@ declare class SnackbarModule {
3356
3428
  }
3357
3429
 
3358
3430
  export { AlertComponent, AlertModule, ButtonComponent, ButtonDropdownComponent, ButtonDropdownModule, ButtonModule, CheckboxComponent, ConfigurableFormComponent, configurableForm_examples_d as ConfigurableFormExamples, ConfigurableFormModule, ConfirmationModalComponent, ConfirmationModalModule, DEFAULT_ITEMS_PER_PAGE, DEFAULT_PAGE_SIZE_OPTIONS, DEFAULT_SIDE_NAV_TOOLTIP_POSITION, DatepickerComponent, DropdownComponent, ExpressionService, FieldConfiguratorComponent, FieldSelectionComponent, FilterComponent, FilterModule, FilterSidebarComponent, FilterSidebarModule, FormBuilderModule, FormComponentsModule, InputComponent, MaterialModule, NAV_ORIENTATION_DEFAULT, NAV_VARIANT_DEFAULT, NavComponent, NavModule, PAGINATION_THEME_DARK, PAGINATION_THEME_DEFAULT, PaginationComponent, PaginationModule, RadioComponent, SearchComponent, SharedUiModule, SideNavComponent, SideNavModule, SmartFormComponent, SmartFormController, smartForm_examples_d as SmartFormExamples, SmartFormModule, SmartTableComponent, SmartTableModule, SnackbarComponent, SnackbarModule, SnackbarService, StringUtils, SummaryCardComponent, SummaryCardModule, ToggleComponent, ValidationUtils, appendBaseUrlRecursively, clearLocalStorage, clearSessionStorage, getLocalStorageItem, getSessionStorageItem, removeLocalStorageItem, removeSessionStorageItem, setLocalStorageItem, setSessionStorageItem, translateConfig };
3359
- export type { AlertLabels, AlertVariant, AttachmentConfig, ButtonLabels, ButtonVariant, CheckboxConfig, CheckboxLabels, CheckboxOption, ConfirmationModalConfig, DateConfig, DatePickerConfig, DatepickerLabels, DropdownAction, DropdownConfig, DropdownLabels, DropdownOption, EmailConfig, FieldConfig, FieldType, FilterChangeEvent, FilterConfig, FilterItem, FilterItemType, FilterOutput, FilterSearchConfig, FilterSidebarChangeEvent, FilterSidebarConfig, FilterSidebarOutput, FormConfig, FormField, FormOption, FormSchema, FormSection, GeneratedConfig, IconInput, InputConfig, InputLabels, InputType, JsonFieldConfig, JsonFormConfig, KeyType, LengthConstraint, LocationConfig, NavItem, NavStyleConfig, NestedStringConfig, NumberConfig, OptionConfig, OptionDTO, OptionItem, PaginationConfig, PaginationLabels, PhoneConfig, QueryParamsConfig, RadioConfig, RadioLabels, RadioOption, RangeConfig, RatingConfig, SearchConfig, SearchLabels, SectionConfig, SideNavItem, SideNavSection, SideNavStyleConfig, SnackbarConfig, SnackbarVariant, StepperConfig, SubmitConfig, SummaryCardConfig, SummaryCardLabels, SummaryCardMeta, TableAction, TableActionItem, TableColumn, TableConfig, TableFilter, TableFilterChangeEvent, TableFilterColumn, TableFilterConfig, TableFilterItem, TableFilterLabels, TableFilterOutput, TableLabels, TableOption, TableTheme, TextConfig, ToggleConfig, ToggleLabels, UIConfig, UISubType, UIType, UploadedFile, ValidationResult, ValidationRules };
3431
+ export type { AlertLabels, AlertVariant, AttachmentConfig, ButtonLabels, ButtonVariant, CheckboxConfig, CheckboxLabels, CheckboxOption, ConfirmationModalConfig, DateConfig, DatePickerConfig, DatepickerLabels, DropdownAction, DropdownConfig, DropdownLabels, DropdownOption, EmailConfig, FieldConfig, FieldType, FilterChangeEvent, FilterConfig, FilterItem, FilterItemType, FilterOutput, FilterSearchConfig, FilterSidebarChangeEvent, FilterSidebarConfig, FilterSidebarOutput, FormConfig, FormField, FormOption, FormSchema, FormSection, GeneratedConfig, IconInput, InputConfig, InputLabels, InputType, JsonFieldConfig, JsonFormConfig, KeyType, LengthConstraint, LocationConfig, NavItem, NavStyleConfig, NestedStringConfig, NumberConfig, OptionConfig, OptionDTO, OptionItem, PaginationConfig, PaginationLabels, PhoneConfig, QueryParamsConfig, RadioConfig, RadioLabels, RadioOption, RangeConfig, RatingConfig, SearchConfig, SearchLabels, SectionConfig, SideNavItem, SideNavSection, SideNavStyleConfig, SnackbarConfig, SnackbarVariant, StepperConfig, SubmitConfig, SummaryCardConfig, SummaryCardLabels, SummaryCardMeta, TableAction, TableActionItem, TableColumn, TableConfig, TableDataChangeEvent, TableFilter, TableFilterChangeEvent, TableFilterColumn, TableFilterConfig, TableFilterItem, TableFilterLabels, TableFilterOutput, TableLabels, TableOption, TableTheme, TextConfig, ToggleConfig, ToggleLabels, UIConfig, UISubType, UIType, UploadedFile, ValidationResult, ValidationRules };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "commons-shared-web-ui",
3
- "version": "0.0.23",
3
+ "version": "0.0.25",
4
4
  "peerDependencies": {
5
5
  "@angular/animations": "20.3.15",
6
6
  "@angular/cdk": "20.2.14",
@@ -13,7 +13,7 @@ $default-confirmation-modal-config: (
13
13
  // 24px
14
14
  header-border-bottom: 0.0625rem solid #E5E7EB,
15
15
  // 1px
16
- title-font-size: 1.25rem,
16
+ title-font-size: 0.875rem,
17
17
  // 20px
18
18
  title-font-weight: 600,
19
19
  title-color: #111827,
@@ -1,4 +1,5 @@
1
1
  @use 'sass:map';
2
+ @use '../confirmation-modal/confirmation-modal.theme' as confirmation-modal;
2
3
 
3
4
  // Default Smart Table Theme
4
5
  $smart-table-theme-defaults: (
@@ -215,4 +216,7 @@ $smart-table-theme-defaults: (
215
216
 
216
217
  // --- Misc ---
217
218
  --st-sort-icon-size: #{map.get($theme, sort-icon-size)};
219
+
220
+ // --- Confirmation Modal (bundled so delete modal renders correctly) ---
221
+ @include confirmation-modal.confirmation-modal-theme();
218
222
  }
@@ -0,0 +1,250 @@
1
+ /* utilities.scss */
2
+
3
+ /* Display Classes */
4
+ .d-flex { display: flex; }
5
+ .d-inline-flex { display: inline-flex; }
6
+ .d-grid { display: grid; }
7
+ .d-block { display: block; }
8
+ .d-none { display: none; }
9
+
10
+ /* Flexbox Directions & Wraps */
11
+ .flex-column { flex-direction: column; }
12
+ .flex-row { flex-direction: row; }
13
+ .flex-row-reverse { flex-direction: row-reverse; }
14
+ .flex-wrap { flex-wrap: wrap; }
15
+ .flex-1 { flex: 1; }
16
+
17
+ /* Alignments */
18
+ .align-items-center { align-items: center; }
19
+ .align-items-start { align-items: flex-start; }
20
+ .align-items-end { align-items: flex-end; }
21
+ .justify-content-center { justify-content: center; }
22
+ .justify-content-between { justify-content: space-between; }
23
+ .justify-content-start { justify-content: flex-start; }
24
+ .justify-content-end { justify-content: flex-end; }
25
+
26
+ /* Grid */
27
+ .grid-cols-12 { grid-template-columns: repeat(12, 1fr); }
28
+
29
+ /* Width & Height (Percentages) */
30
+ .w-100 { width: 100%; }
31
+ .h-100 { height: 100%; }
32
+
33
+ /* Positioning */
34
+ .position-relative { position: relative; }
35
+ .position-absolute { position: absolute; }
36
+
37
+ /* Text Alignment */
38
+ .text-center { text-align: center; }
39
+ .text-left { text-align: left; }
40
+ .text-right { text-align: right; }
41
+
42
+ /* Fonts */
43
+ .font-poppins { font-family: var(--cc-sf-font-family, 'Poppins', sans-serif); }
44
+ .font-weight-400 { font-weight: 400; }
45
+ .font-weight-500 { font-weight: 500; }
46
+ .font-weight-600 { font-weight: 600; }
47
+
48
+ .text-13 { font-size: 13px; }
49
+ .text-14 { font-size: 14px; }
50
+ .text-16 { font-size: 16px; }
51
+
52
+ /* Colors (from variables) */
53
+ .color-white { color: #ffffff; }
54
+ .color-dark { color: #111827; }
55
+ .color-gray { color: #6B7280; }
56
+ .color-error { color: var(--cc-sf-error-text-color, #DC2626); }
57
+ .bg-white { background-color: #ffffff; }
58
+ .bg-transparent { background-color: transparent; }
59
+
60
+ /* Margins */
61
+ .m-0 { margin: 0; }
62
+ .mt-4 { margin-top: 4px; }
63
+ .mt-8 { margin-top: 8px; }
64
+ .mt-10 { margin-top: 10px; }
65
+ .mt-12 { margin-top: 12px; }
66
+ .mt-16 { margin-top: 16px; }
67
+ .mt-20 { margin-top: 20px; }
68
+ .mt-24 { margin-top: 24px; }
69
+
70
+ .mb-0 { margin-bottom: 0px; }
71
+ .mb-4 { margin-bottom: 4px; }
72
+ .mb-8 { margin-bottom: 8px; }
73
+ .mb-10 { margin-bottom: 10px; }
74
+ .mb-12 { margin-bottom: 12px; }
75
+ .mb-16 { margin-bottom: 16px; }
76
+ .mb-20 { margin-bottom: 20px; }
77
+ .mb-24 { margin-bottom: 24px; }
78
+
79
+ .ml-16 { margin-left: 16px; }
80
+ .ml-20 { margin-left: 20px; }
81
+
82
+ /* Paddings */
83
+ .p-0 { padding: 0; }
84
+ .p-16 { padding: 16px; }
85
+ .p-20 { padding: 20px; }
86
+ .p-24 { padding: 24px; }
87
+ .pt-20 { padding-top: 20px; }
88
+ .pb-10 { padding-bottom: 10px; }
89
+
90
+ /* Gaps */
91
+ .gap-4 { gap: 4px; }
92
+ .gap-6 { gap: 6px; }
93
+ .gap-8 { gap: 8px; }
94
+ .gap-10 { gap: 10px; }
95
+ .gap-12 { gap: 12px; }
96
+ .gap-16 { gap: 16px; }
97
+ .gap-20 { gap: 20px; }
98
+
99
+ /* Border Radius */
100
+ .rounded-4 { border-radius: 4px; }
101
+ .rounded-6 { border-radius: 6px; }
102
+ .rounded-8 { border-radius: 8px; }
103
+ .rounded-10 { border-radius: 10px; }
104
+ .rounded-12 { border-radius: 12px; }
105
+ .rounded-20 { border-radius: 20px; }
106
+ .rounded-24 { border-radius: 24px; }
107
+ .rounded-50 { border-radius: 50%; }
108
+
109
+ /* Utilities */
110
+ .cursor-pointer { cursor: pointer; }
111
+ .overflow-hidden { overflow: hidden; }
112
+ .resize-vertical { resize: vertical; }
113
+ .box-sizing-border { box-sizing: border-box; }
114
+
115
+ /* Form Auto Extracted Utilities 2 */
116
+ .border-none { border: none !important; }
117
+ .mb-16px { margin-bottom: var(--cc-sf-grid-gap, 16px) !important; }
118
+ .c-DC2626 { color: var(--cc-sf-label-required-color, #DC2626) !important; }
119
+ .ml-0-125rem { margin-left: 0.125rem !important; }
120
+ .fs-0-875rem { font-size: 0.875rem !important; }
121
+ .c-111827 { color: var(--cc-sf-label-color, #111827) !important; }
122
+ .br-7px { border-radius: var(--cc-sf-input-radius, 7px) !important; }
123
+ .c-6B7280 { color: var(--cc-sf-hint-color, #6B7280) !important; }
124
+ .fs-0-75rem { font-size: var(--cc-sf-error-text-size, 0.75rem) !important; }
125
+ .b-none { background: none !important; }
126
+ .p-32px-24px { padding: 32px 24px !important; }
127
+ .us-none { user-select: none !important; }
128
+ .c-1E293B { color: var(--cc-sf-label-color, #1E293B) !important; }
129
+ .c-3B82F6 { color: var(--cc-sf-chip-selected-bg, #3B82F6) !important; }
130
+ .fs-0-78rem { font-size: 0.78rem !important; }
131
+ .p-10px-14px { padding: 10px 14px !important; }
132
+ .fs-0-85rem { font-size: 0.85rem !important; }
133
+ .fs-0-72rem { font-size: 0.72rem !important; }
134
+ .c-94A3B8 { color: #94A3B8 !important; }
135
+ .p-4px { padding: 4px !important; }
136
+ .br-8px { border-radius: var(--cc-sf-input-radius, 8px) !important; }
137
+ .bc-F3F4F6 { background-color: var(--cc-sf-input-disabled-bg, #F3F4F6) !important; }
138
+ .br-none { border-right: none !important; }
139
+ .bl-none { border-left: none !important; }
140
+ .pe-none { pointer-events: none !important; }
141
+ .fs-1-1rem { font-size: 1.1rem !important; }
142
+ .c-9CA3AF { color: var(--cc-sf-hint-color, #9CA3AF) !important; }
143
+ .pl-2-4rem { padding-left: 2.4rem !important; }
144
+ .fs-0-8125rem { font-size: 0.8125rem !important; }
145
+ .ls-none { list-style: none !important; }
146
+ .br-12px { border-radius: var(--mu-carousel-radius, 12px) !important; }
147
+ .b-FFFAF1 { background: var(--cc-sf-dropzone-bg, #FFFAF1) !important; }
148
+ .fs-18px { font-size: 18px !important; }
149
+ .b-FEF2F2 { background: var(--cc-sf-error-bg, #FEF2F2) !important; }
150
+
151
+ /* Form Auto Extracted Utilities 3 */
152
+ .bc-DC2626 { border-color: var(--cc-sf-error-border, #DC2626) !important; }
153
+ .c-202124 { color: var(--cc-sf-label-color, #202124) !important; }
154
+ .fs-18px { font-size: var(--cc-sf-label-size, 18px) !important; }
155
+ .mb-0-5rem { margin-bottom: 0.5rem !important; }
156
+ .pt-0-625rem { padding-top: var(--cc-sf-input-padding-y, 0.625rem) !important; }
157
+ .pb-0-625rem { padding-bottom: var(--cc-sf-input-padding-y, 0.625rem) !important; }
158
+ .pl-16px { padding-left: var(--cc-sf-input-padding-x, 16px) !important; }
159
+ .pr-16px { padding-right: var(--cc-sf-input-padding-x, 16px) !important; }
160
+ .bc-ffffff { background-color: var(--cc-sf-section-bg, #ffffff) !important; }
161
+ .b-1px-solid-D1D5DB { border: 1px solid var(--cc-sf-input-border, #D1D5DB) !important; }
162
+ .fs-0-75rem { font-size: 0.75rem !important; }
163
+ .c-1F2937 { color: var(--cc-sf-section-label-color, #1F2937) !important; }
164
+ .p-6px-14px { padding: var(--cc-sf-chip-padding, 6px 14px) !important; }
165
+ .b-ffffff { background: var(--loc-suggestion-bg, #ffffff) !important; }
166
+ .c-374151 { color: var(--cc-sf-label-color, #374151) !important; }
167
+ .br-20px { border-radius: var(--cc-sf-chip-radius, 20px) !important; }
168
+ .fs-0-875rem { font-size: var(--cc-sf-btn-font-size, 0.875rem) !important; }
169
+ .bc-D1D5DB { background-color: var(--cc-sf-switch-track-off, #D1D5DB) !important; }
170
+ .pr-2-75rem { padding-right: 2.75rem !important; }
171
+ .p-0-25rem { padding: 0.25rem !important; }
172
+ .p-0-625rem-0-875rem { padding: var(--cc-sf-generated-padding, 0.625rem 0.875rem) !important; }
173
+ .b-F3F4F6 { background: var(--cc-sf-generated-bg, #F3F4F6) !important; }
174
+ .b-1px-solid-E5E7EB { border: 1px solid var(--cc-sf-input-disabled-border, #E5E7EB) !important; }
175
+ .br-8px { border-radius: var(--cc-sf-uploaded-item-radius, 8px) !important; }
176
+ .c-6B7280 { color: var(--ms-desc-color, #6B7280) !important; }
177
+ .mb-20px { margin-bottom: var(--cc-sf-section-gap, 20px) !important; }
178
+ .br-10px { border-radius: var(--cc-sf-input-radius, 10px) !important; }
179
+ .p-20px { padding: var(--cc-sf-section-padding, 20px) !important; }
180
+ .fs-1rem { font-size: 1rem !important; }
181
+ .m-0-0-16px-0 { margin: 0 0 16px 0 !important; }
182
+ .bb-2px-solid-E5E7EB { border-bottom: var(--cc-sf-section-label-border, 2px solid #E5E7EB) !important; }
183
+ .p-16px { padding: var(--cc-sf-instance-padding, 16px) !important; }
184
+ .b-F9FAFB { background: var(--loc-tba-bg, #F9FAFB) !important; }
185
+ .bb-1px-dashed-D1D5DB { border-bottom: var(--cc-sf-instance-divider, 1px dashed #D1D5DB) !important; }
186
+ .c-4B5563 { color: var(--cc-sf-instance-num-color, #4B5563) !important; }
187
+ .fs-0-8125rem { font-size: var(--cc-sf-hint-size, 0.8125rem) !important; }
188
+ .pb-0 { padding-bottom: 0 !important; }
189
+ .p-18px-24px { padding: 18px 24px !important; }
190
+ .c-111827 { color: var(--ms-title-color, #111827) !important; }
191
+ .bt-1px-solid-E5E7EB { border-top: 1px solid #E5E7EB !important; }
192
+ .p-4px-10px { padding: 4px 10px !important; }
193
+ .b-FFF5F5 { background: var(--cc-sf-btn-remove-bg, #FFF5F5) !important; }
194
+ .c-E53E3E { color: var(--loc-delete-color, #E53E3E) !important; }
195
+ .b-1px-solid-FED7D7 { border: var(--cc-sf-btn-remove-border, 1px solid #FED7D7) !important; }
196
+ .br-4px { border-radius: var(--cc-sf-btn-remove-radius, 4px) !important; }
197
+ .p-8px-16px { padding: 8px 16px !important; }
198
+ .b-transparent { background: var(--cc-sf-btn-add-bg, transparent) !important; }
199
+ .c-3B82F6 { color: var(--cc-sf-input-focus-border, #3B82F6) !important; }
200
+ .b-1px-dashed-CBD5E1 { border: var(--cc-sf-btn-add-border, 1px dashed #CBD5E1) !important; }
201
+ .br-6px { border-radius: var(--cc-sf-btn-add-radius, 6px) !important; }
202
+ .b-1-5px-dashed-CBD5E1 { border: var(--cc-sf-dropzone-border, 1.5px dashed #CBD5E1) !important; }
203
+ .br-12px { border-radius: var(--cc-sf-dropzone-radius, 12px) !important; }
204
+ .bc-FFFAF1 { background-color: var(--cc-sf-dropzone-bg, #FFFAF1) !important; }
205
+ .c-94A3B8 { color: var(--cc-sf-uploaded-remove-color, #94A3B8) !important; }
206
+ .fs-0-9rem { font-size: var(--cc-sf-input-font-size, 0.9rem) !important; }
207
+ .c-64748B { color: var(--cc-sf-dropzone-hint-color, #64748B) !important; }
208
+ .b-1px-solid-E2E8F0 { border: var(--cc-sf-uploaded-item-border, 1px solid #E2E8F0) !important; }
209
+ .b-2px-solid-E2E8F0 { border: 2px solid #E2E8F0 !important; }
210
+ .pr-3-5rem { padding-right: 3.5rem !important; }
211
+ .p-0-0-875rem { padding: 0 0.875rem !important; }
212
+ .bc-FFFFFF { background-color: var(--cc-sf-input-bg, #FFFFFF) !important; }
213
+ .b-1-5px-solid-D1D5DB { border: var(--cc-sf-input-border, 1.5px solid #D1D5DB) !important; }
214
+ .mb-0-75rem { margin-bottom: 0.75rem !important; }
215
+ .mt-6px { margin-top: 6px !important; }
216
+ .pr-2-4rem { padding-right: 2.4rem !important; }
217
+ .p-0-2rem { padding: 0.2rem !important; }
218
+ .fs-1-35rem { font-size: 1.35rem !important; }
219
+ .p-4px-12px { padding: 4px 12px !important; }
220
+ .b-111827 { background: var(--cc-sf-label-color, #111827) !important; }
221
+ .b-2px-dashed-CBD5E1 { border: 2px dashed var(--cc-sf-dropzone-border, #CBD5E1) !important; }
222
+ .fs-52px { font-size: 52px !important; }
223
+ .p-12px-16px { padding: 12px 16px !important; }
224
+ .bb-1px-solid-F3F4F6 { border-bottom: 1px solid var(--cc-sf-input-disabled-border, #F3F4F6) !important; }
225
+ .b-0F172A { background: var(--mu-carousel-bg, #0F172A) !important; }
226
+ .b-3px-solid-rgba-255-255-255-0-15 { border: 3px solid rgba(255, 255, 255, 0.15) !important; }
227
+ .b-rgba-255-255-255-0-85 { background: rgba(255, 255, 255, 0.85) !important; }
228
+ .b-rgba-0-0-0-0-55 { background: rgba(0, 0, 0, 0.55) !important; }
229
+ .b-rgba-255-255-255-0-45 { background: rgba(255, 255, 255, 0.45) !important; }
230
+ .pb-4px { padding-bottom: 4px !important; }
231
+ .b-2px-solid-transparent { border: 2px solid transparent !important; }
232
+ .b-E2E8F0 { background: var(--mu-thumb-bg, #E2E8F0) !important; }
233
+ .b-1E293B { background: #1E293B !important; }
234
+ .c-EF4444 { color: #EF4444 !important; }
235
+ .b-rgba-0-0-0-0-5 { background: rgba(0, 0, 0, 0.5) !important; }
236
+ .br-16px { border-radius: var(--mu-modal-radius, 16px) !important; }
237
+ .p-24px-28px { padding: 24px 28px !important; }
238
+ .bb-1px-solid-E5E7EB { border-bottom: 1px solid var(--cc-sf-input-disabled-border, #E5E7EB) !important; }
239
+ .fs-1-25rem { font-size: 1.25rem !important; }
240
+ .p-48px-24px { padding: 48px 24px !important; }
241
+ .b-3px-solid-E2E8F0 { border: 3px solid #E2E8F0 !important; }
242
+ .p-16px-24px { padding: 16px 24px !important; }
243
+ .p-28px { padding: 28px !important; }
244
+ .b-3px-solid-transparent { border: 3px solid transparent !important; }
245
+ .b-rgba-59-130-246-0-12 { background: rgba(59, 130, 246, 0.12) !important; }
246
+ .p-20px-28px { padding: 20px 28px !important; }
247
+ .c-1A56DB { color: var(--loc-add-color, #1A56DB) !important; }
248
+ .b-1px-dashed-D1D5DB { border: 1px dashed var(--cc-sf-input-disabled-border, #D1D5DB) !important; }
249
+ .fs-40px { font-size: 40px !important; }
250
+ .c-9CA3AF { color: var(--loc-tba-icon-color, #9CA3AF) !important; }