osi-cards-lib 1.5.41 → 1.5.42

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
@@ -268,11 +268,11 @@ declare const isItemId: typeof isValidItemId;
268
268
  /**
269
269
  * All valid section type identifiers
270
270
  */
271
- type SectionType$1 = 'analytics' | 'brand-colors' | 'chart' | 'contact-card' | 'event' | 'fallback' | 'faq' | 'financials' | 'gallery' | 'info' | 'list' | 'map' | 'network-card' | 'news' | 'overview' | 'product' | 'quotation' | 'social-media' | 'solutions' | 'text-reference' | 'timeline' | 'video';
271
+ type SectionType$1 = 'analytics' | 'brand-colors' | 'chart' | 'contact-card' | 'event' | 'fallback' | 'faq' | 'financials' | 'gallery' | 'info' | 'list' | 'map' | 'network-card' | 'news' | 'overview' | 'product' | 'quotation' | 'social-media' | 'solutions' | 'table' | 'text-reference' | 'timeline' | 'video';
272
272
  /**
273
273
  * Section type aliases (alternative names that resolve to canonical types)
274
274
  */
275
- type SectionTypeAlias = 'metrics' | 'stats' | 'kpi' | 'brands' | 'colors' | 'palette' | 'graph' | 'visualization' | 'calendar' | 'schedule' | 'questions' | 'help' | 'photos' | 'images' | 'table' | 'checklist' | 'locations' | 'press' | 'articles' | 'summary' | 'executive' | 'quote' | 'testimonial' | 'social' | 'socials' | 'services' | 'offerings' | 'reference' | 'text-ref' | 'documentation' | 'history' | 'milestones' | 'videos' | 'media';
275
+ type SectionTypeAlias = 'metrics' | 'stats' | 'kpi' | 'brands' | 'colors' | 'palette' | 'graph' | 'visualization' | 'calendar' | 'schedule' | 'questions' | 'help' | 'photos' | 'images' | 'checklist' | 'data-table' | 'grid' | 'locations' | 'press' | 'articles' | 'summary' | 'executive' | 'quote' | 'testimonial' | 'social' | 'socials' | 'services' | 'offerings' | 'reference' | 'text-ref' | 'documentation' | 'history' | 'milestones' | 'videos' | 'media';
276
276
  /**
277
277
  * All accepted section type values (canonical + aliases)
278
278
  */
@@ -329,6 +329,29 @@ type CardType = 'all' | 'company' | 'contact' | 'opportunity' | 'product' | 'ana
329
329
  */
330
330
  type LayoutPriority = 1 | 2 | 3;
331
331
 
332
+ /**
333
+ * Table column definition
334
+ */
335
+ interface TableColumn {
336
+ key: string;
337
+ label: string;
338
+ type?: 'string' | 'number' | 'date' | 'boolean';
339
+ sortable?: boolean;
340
+ width?: string;
341
+ }
342
+ /**
343
+ * Table row data (key-value pairs matching column keys)
344
+ */
345
+ interface TableRow {
346
+ [key: string]: string | number | boolean | Date | null | undefined;
347
+ }
348
+ /**
349
+ * Table data structure for table sections
350
+ */
351
+ interface TableData {
352
+ columns: TableColumn[];
353
+ rows: TableRow[];
354
+ }
332
355
  interface AICardConfig {
333
356
  id?: string | undefined;
334
357
  cardTitle: string;
@@ -432,6 +455,7 @@ interface CardSection {
432
455
  borderWidth?: number;
433
456
  }[];
434
457
  };
458
+ tableData?: TableData;
435
459
  meta?: Record<string, unknown>;
436
460
  [key: string]: unknown;
437
461
  }
@@ -1587,7 +1611,7 @@ declare class ActionFactory {
1587
1611
  /**
1588
1612
  * Section types supported by the library
1589
1613
  */
1590
- type SectionType = 'analytics' | 'brand-colors' | 'chart' | 'contact-card' | 'event' | 'fallback' | 'financials' | 'info' | 'list' | 'map' | 'network-card' | 'news' | 'overview' | 'product' | 'quotation' | 'social-media' | 'solutions' | 'text-reference';
1614
+ type SectionType = 'analytics' | 'brand-colors' | 'chart' | 'contact-card' | 'event' | 'fallback' | 'financials' | 'info' | 'list' | 'map' | 'network-card' | 'news' | 'overview' | 'product' | 'quotation' | 'social-media' | 'solutions' | 'table' | 'text-reference';
1591
1615
  /**
1592
1616
  * Section metadata
1593
1617
  */
@@ -1900,6 +1924,17 @@ interface ListSection extends BaseSectionProps {
1900
1924
  /** List style */
1901
1925
  listStyle?: 'bullet' | 'numbered' | 'none';
1902
1926
  }
1927
+ /**
1928
+ * Table Section - displays structured tabular data
1929
+ */
1930
+ interface TableSection extends BaseSectionProps {
1931
+ type: 'table';
1932
+ tableData: TableData;
1933
+ fields?: never;
1934
+ items?: never;
1935
+ chartData?: never;
1936
+ chartType?: never;
1937
+ }
1903
1938
  /**
1904
1939
  * Network Card Section - displays network connections
1905
1940
  */
@@ -2062,7 +2097,7 @@ interface FallbackSection extends BaseSectionProps {
2062
2097
  * Use this type when you need exhaustive type checking for section handling.
2063
2098
  * TypeScript will ensure all section types are handled in switch statements.
2064
2099
  */
2065
- type DiscriminatedSection = InfoSection | AnalyticsSection | ContactCardSection | NetworkCardSection | MapSection | FinancialsSection | EventSection | ListSection | ChartSection | ProductSection | SolutionsSection | OverviewSection | QuotationSection | TextReferenceSection | BrandColorsSection | NewsSection | SocialMediaSection | TimelineSection | GallerySection | FaqSection | VideoSection | FallbackSection;
2100
+ type DiscriminatedSection = InfoSection | AnalyticsSection | ContactCardSection | NetworkCardSection | MapSection | FinancialsSection | EventSection | ListSection | TableSection | ChartSection | ProductSection | SolutionsSection | OverviewSection | QuotationSection | TextReferenceSection | BrandColorsSection | NewsSection | SocialMediaSection | TimelineSection | GallerySection | FaqSection | VideoSection | FallbackSection;
2066
2101
  /**
2067
2102
  * Type guard for Info Section
2068
2103
  */
@@ -2179,6 +2214,7 @@ type SectionTypeMap = {
2179
2214
  financials: FinancialsSection;
2180
2215
  event: EventSection;
2181
2216
  list: ListSection;
2217
+ table: TableSection;
2182
2218
  chart: ChartSection;
2183
2219
  product: ProductSection;
2184
2220
  solutions: SolutionsSection;
@@ -3524,6 +3560,7 @@ interface SectionManifestEntry {
3524
3560
  usesFields: boolean;
3525
3561
  usesItems: boolean;
3526
3562
  usesChartData?: boolean;
3563
+ usesTableData?: boolean;
3527
3564
  defaultColumns: number;
3528
3565
  supportsCollapse: boolean;
3529
3566
  requiresExternalLib?: string;
@@ -8671,6 +8708,7 @@ declare class MasonryGridComponent implements AfterViewInit, OnChanges, OnDestro
8671
8708
  private resizeObserver?;
8672
8709
  private resizeThrottleTimeout?;
8673
8710
  private lastWidth;
8711
+ private lastContainerWidth;
8674
8712
  private layoutVersion;
8675
8713
  private itemResizeObservers;
8676
8714
  private absolutePositionUpdateRafId;
@@ -8680,6 +8718,9 @@ declare class MasonryGridComponent implements AfterViewInit, OnChanges, OnDestro
8680
8718
  private readonly HEIGHT_THRESHOLD;
8681
8719
  private initialLayoutPollingTimeout?;
8682
8720
  private itemElements;
8721
+ private cachedPadding;
8722
+ private isFirstCalculation;
8723
+ private isFirstPositioning;
8683
8724
  ngAfterViewInit(): void;
8684
8725
  ngOnChanges(changes: SimpleChanges): void;
8685
8726
  ngOnDestroy(): void;
@@ -8715,7 +8756,22 @@ declare class MasonryGridComponent implements AfterViewInit, OnChanges, OnDestro
8715
8756
  */
8716
8757
  private determineLayoutVariant;
8717
8758
  private applyLayout;
8759
+ /**
8760
+ * Validate layout prerequisites (padding and gap) before calculations
8761
+ * Returns validation status and values
8762
+ */
8763
+ private validateLayoutPrerequisites;
8764
+ /**
8765
+ * Get container padding with fallback to CSS variable if computed style returns 0
8766
+ * Reads padding from parent .ai-card-surface element (not from masonry container)
8767
+ * Caches padding value to avoid repeated calculations
8768
+ */
8718
8769
  private getContainerPadding;
8770
+ /**
8771
+ * Read padding value from CSS variable --osi-card-padding
8772
+ * Handles various formats: "16px", "var(--other-var)", etc.
8773
+ */
8774
+ private getPaddingFromCSSVariable;
8719
8775
  private setupResizeObserver;
8720
8776
  trackBySection: (index: number, item: SectionWithSpan) => string;
8721
8777
  onSectionEvent(event: SectionRenderEvent): void;
@@ -8755,6 +8811,7 @@ declare class MasonryGridComponent implements AfterViewInit, OnChanges, OnDestro
8755
8811
  /**
8756
8812
  * Ensure initial layout is calculated with retry mechanism if width is invalid
8757
8813
  * Simplified: Single RAF + one timeout retry
8814
+ * Also validates padding before layout calculation
8758
8815
  */
8759
8816
  private ensureInitialLayout;
8760
8817
  static ɵfac: i0.ɵɵFactoryDeclaration<MasonryGridComponent, never>;
@@ -10184,17 +10241,39 @@ declare class BrandColorsSectionComponent extends BaseSectionComponent implement
10184
10241
  *
10185
10242
  * Note: Requires Chart.js to be installed.
10186
10243
  */
10187
- declare class ChartSectionComponent extends BaseSectionComponent implements AfterViewInit, OnDestroy, OnInit {
10244
+ declare class ChartSectionComponent extends BaseSectionComponent implements AfterViewInit, OnDestroy, OnInit, OnChanges {
10188
10245
  private readonly layoutService;
10189
10246
  ngOnInit(): void;
10190
10247
  chartCanvas?: ElementRef<HTMLCanvasElement>;
10191
10248
  private chartInstance;
10249
+ protected chartLibraryLoaded: boolean;
10250
+ protected chartError: string | null;
10251
+ private previousChartType;
10252
+ private previousChartDataHash;
10253
+ private isRendering;
10192
10254
  ngAfterViewInit(): void;
10193
10255
  ngOnDestroy(): void;
10256
+ ngOnChanges(changes: SimpleChanges): void;
10194
10257
  /**
10195
10258
  * Render chart using Chart.js (if available)
10196
10259
  */
10197
10260
  private renderChart;
10261
+ /**
10262
+ * Update existing chart with new data
10263
+ */
10264
+ private updateChart;
10265
+ /**
10266
+ * Detect if chart data contains revenue/monetary values
10267
+ */
10268
+ private detectRevenueData;
10269
+ /**
10270
+ * Get chart options with enhanced configuration
10271
+ */
10272
+ private getChartOptions;
10273
+ /**
10274
+ * Format value as currency
10275
+ */
10276
+ private formatCurrency;
10198
10277
  /**
10199
10278
  * Destroy chart instance
10200
10279
  */
@@ -11619,11 +11698,11 @@ declare function packWithZeroGapsGuarantee(sections: CardSection[], columns?: nu
11619
11698
  * Do not edit manually - generated by scripts/generate-version.js
11620
11699
  *
11621
11700
  * Source of truth: version.config.json
11622
- * Last synced: 2025-12-15T18:48:03.906Z
11701
+ * Last synced: 2025-12-15T21:37:02.720Z
11623
11702
  */
11624
- declare const VERSION = "1.5.41";
11625
- declare const BUILD_DATE = "2025-12-15T18:48:03.906Z";
11626
- declare const BUILD_HASH = "6071ff4";
11703
+ declare const VERSION = "1.5.42";
11704
+ declare const BUILD_DATE = "2025-12-15T21:37:02.720Z";
11705
+ declare const BUILD_HASH = "afbe823";
11627
11706
  declare const BUILD_BRANCH = "main";
11628
11707
  interface VersionInfo {
11629
11708
  version: string;
@@ -11656,4 +11735,4 @@ declare function isProductionBuild(): boolean;
11656
11735
  declare function isPrerelease(): boolean;
11657
11736
 
11658
11737
  export { AICardRendererComponent, ALL_SECTION_TYPES, ANIMATION_PRESETS, ANIMATION_TIMING, AccessibilityService, ActionFactory, AnalyticsSectionComponent, AutoUnsubscribe, BORDER_RADIUS, BREAKPOINTS, BUILD_BRANCH, BUILD_DATE, BUILD_HASH, BadgeComponent, BaseSectionComponent, BrandColorsSectionComponent, BrandedIds, CARD_SIZES, CARD_SPACING, COLUMNS_BY_BREAKPOINT, CONTAINER_CONFIG, CSS_ISOLATION_MODE, CachedSectionNormalizationService, CardActionsComponent, CardBodyComponent, CardFacadeService, CardFactory, CardFooterComponent, CardHeaderComponent, CardPreviewComponent, CardSectionListComponent, CardSkeletonComponent, CardStreamingIndicatorComponent, CardTypeGuards, CardUtil, ChartSectionComponent, ContactCardSectionComponent, CopyToClipboardDirective, DECORATED_SECTION_COMPONENTS, DEFAULT_ACCESSIBILITY_CONFIG, DEFAULT_ANIMATION_CONFIG, DEFAULT_CSS_ISOLATION_MODE, DEFAULT_ERROR_CONFIG, DEFAULT_GRID_CONFIG, DEFAULT_LAYOUT_CONFIG, DEFAULT_LOADING_MESSAGES, DEFAULT_LOGGING_CONFIG, DEFAULT_OSI_CARDS_FULL_CONFIG, DEFAULT_OSI_THEME_CONFIG, DEFAULT_STREAMING_CONFIG, DEFAULT_THEME, DEFAULT_THEME_CONFIG, DynamicSectionLoaderService, EASING, EMPTY_STATE_CONFIG, EmailHandlerService, EmptyStateComponent, ErrorBoundaryComponent, ErrorTrackingService, EventBusService, EventMiddlewareService, EventSectionComponent, FEATURE_FLAG_META, FeatureFlagsService, FieldFactory, FinancialsSectionComponent, FlipAnimator, GRID_CONFIG, I18nService, ICON_SIZE, IconService, InfoSectionComponent, ItemFactory, KeyboardShortcutsService, LayoutCalculationService, LayoutError, LayoutStateManager, LayoutWorkerService, LazyRenderDirective, ListSectionComponent, LogValidationErrors, LoggerService, LucideIconsModule, MANIFEST_META, MASONRY_CONFIG, MagneticTiltService, MapSectionComponent, MasonryGridComponent, Memoize, MemoizeLRU, MemoizeTTL, NetworkCardSectionComponent, NewsSectionComponent, OSICardsError, OSICardsStreamingService, OSI_ACCESSIBILITY_CONFIG, OSI_ANIMATION_CONFIG, ICONS as OSI_CARDS_ICONS, OSI_CUSTOM_SECTIONS, OSI_ERROR_CONFIG, OSI_EVENTS, OSI_FEATURE_FLAGS, OSI_FULL_CONFIG, OSI_LAYOUT_CONFIG, OSI_LOGGING_CONFIG, OSI_STREAMING_CONFIG, OSI_THEME_CONFIG, OSI_THEME_CONFIG_TOKEN, ObjectPool, OsiCardsComponent, OsiCardsContainerComponent, OsiThemeDirective, OverviewSectionComponent, PARTICLE_CONFIG, PLACEHOLDER_TEXT, PUBLIC_SECTION_TYPES, PerfectBinPacker, PluginRegistrationError, PresetFactory, ProductSectionComponent, ProgressBarComponent, QuotationSectionComponent, RequiredFieldError, SCOPED_ANIMATION_SERVICE, SCOPED_SELECTION_SERVICE, SCOPED_STATE_SERVICE, SECTION_MANIFEST, SECTION_METADATA, SECTION_TYPE_ALIASES, SHADOWS, SKELETON_CONFIG, SPACING, STAGGER_DELAYS, STREAMING_CONFIG, STREAMING_PROGRESS, STREAMING_STAGES, ScopedAnimationService, ScopedSelectionService, ScopedStateService, SectionComponent, SectionFactory$1 as SectionConfigFactory, SectionDesignDirective, SectionFactory, SectionHeaderComponent, SectionNormalizationService, SectionPluginRegistry, SectionRenderError, SectionRendererComponent, SectionUtilsService, SocialMediaSectionComponent, SolutionsSectionComponent, StreamingError, StreamingParseError, StreamingTimeoutError, SubscriptionTracker, TILT_CONFIG, TextReferenceSectionComponent, ThemeService, ToastService, TooltipDirective, TrendIndicatorComponent, UnknownSectionTypeError, VERSION, VERSION_INFO, ValidationError, WorkerError, Z_INDEX, assertNever, calculateChunkDelay, calculateColumnWidth, calculateColumns, createActionClickEvent, createActionId, createAnalyticsDashboard, createAnalyticsPreset, createCardId, createCardInteractionEvent, createCompanyCard, createCompanyPreset, createContactCard, createContactPreset, createEmail, createEnhancedCompanyCard, createFieldClickEvent, createFieldId, createFlipList, createHexColor, createItemClickEvent, createItemId, createLogger, createMilliseconds, createPercentage, createPixels, createPluginId, createSafeAsyncFunction, createSafeFunction, createSectionId, createSectionRenderedEvent, createStreamingStateEvent, createThemeChangeEvent, createUrl, debounce, generateActionId, generateCardId, generateFieldId, generateItemId, generateSectionId, generateStreamingId, getAnimationTiming, getBuildInfo, getColumnsForBreakpoint, getCurrentBreakpoint, getEasing, getManifestEntry, getPreferredColumns, getPublicSectionTypes, getRandomLoadingMessage, getRegisteredComponent, getRegisteredSectionComponents, getRegisteredSectionTypes, getSectionMetadata, getSectionsRequiringExternalLibs, getShortVersion, getUserMessage, getVersionString, hasChartData, hasFields, hasItems, hasRegisteredComponent, isAnalyticsSection, isBrandColorsSection, isCardId, isChartSection, isContactCardSection, isDesktopViewport, isEventSection, isFallbackSection, isFieldId, isFinancialsSection, isInfoSection, isItemId, isListSection, isMapSection, isMobileViewport, isNetworkCardSection, isNewsSection, isOSIActionClickEvent, isOSICardInteractionEvent, isOSICardsError, isOSIFieldClickEvent, isOSIItemClickEvent, isOverviewSection, isPrerelease, isProductSection, isProductionBuild, isQuotationSection, isSectionId, isSocialMediaSection, isSolutionsSection, isStreamingPlaceholder, isTabletViewport, isTextReferenceSection, isValidCardId, isValidEmail, isValidFieldId, isValidHexColor, isValidItemId, isValidPercentage, isValidSectionId, isValidSectionType, isValidUrl, packWithZeroGapsGuarantee, prefersReducedMotion, provideLucideIcons, provideOSICardsTheme, provideOsiCards, provideOsiCardsAdvanced, provideOsiCardsCore, provideOsiCardsMinimal, provideOsiCardsTesting, provideScopedAnimationService, provideScopedSelectionService, provideScopedStateService, recordPositions, resolveColumnSpan, resolveSectionType, throttle, tryCatch, useErrorBoundary, validateField, validateSection, wrapError };
11659
- export type { AICardConfig, ActionClickEventDetail, ActionId, AgentActionEvent, AnalyticsDashboardOptions, AnalyticsSection, AnimationItemState, AnimationState, AnimationTrigger, AsyncTransformer, BadgeSize, BadgeVariant, BaseSectionProps, BrandColorsSection, Breakpoint, CSSIsolationMode, Capitalize, CardAction, CardActionVariant, CardBuilder, CardBusEvent, CardChangeType, CardEvent$1 as CardEvent, CardField, CardId, CardInteractionEventDetail, CardItem, CardSection, CardUpdate, CardUpdatePayload, ChartData, ChartSection, ChartType, ColorSchemePreference, CompanyCardOptions, ComplexityLevel, ContactCardOptions, ContactCardSection, DeepMutable, DeepPartial, DeepReadonly, DeepRequired, Discriminant, DiscriminatedSection, Email, EmailConfig$1 as EmailConfig, EmailContact, ErrorBoundaryOptions, ErrorBoundaryState, ErrorSeverity, EventFilter, EventHandler, EventMiddleware, EventSection, EventTransformer, ExcludeByType, Extend, ExtractSectionType, FallbackSection, FaqSection, FeatureFlagKey, FeatureFlagsConfig, FieldClickEventDetail, FieldFormat, FieldId, FieldPriority, FieldStatus, FieldUpdatePayload, FieldValue, FilterByType, FinancialsSection, FlipConfig, FlipState, GallerySection, GetDiscriminatedSection, GridConfig, Head, HexColor, IdentifiedCard, IdentifiedField, IdentifiedItem, IdentifiedSection, ImmutableCardConfig, ImmutableSection, InfoSection, ItemClickEventDetail, ItemId, KebabCase, KeyboardShortcut, KeysOfType, Last, LayoutConfig, LayoutLogEntry, LayoutPhase, LayoutResult, LayoutState, LayoutStatistics, LazyRenderOptions, ListSection, LogEntry, LogLevel, MailCardAction, MapSection, MasonryLayoutInfo, Maybe, Merge, Milliseconds, MinimalCardConfig, MousePosition, NetworkCardSection, NewCardConfig, NewsSection, Nullable, OSIAccessibilityConfig, OSIActionClickEvent, OSIAnimationConfig, OSICardInteractionEvent, OSICardsFullConfig, OSICardsThemeConfig, OSIErrorConfig, OSIEventDetail, OSIEventName, OSIFieldClickEvent, OSIItemClickEvent, OSILayoutConfig, OSILoggingConfig, OSISectionRegistration, OSISectionRenderedEvent, OSIStreamingConfig, OSIStreamingStateEvent, OSIThemeChangeEvent, OSIThemeConfig, OmitByType, Optional, OptionalFields, OsiCardsConfig, OverviewSection, PackingAlgorithm, Parameters$1 as Parameters, Percentage, PerformanceLevel, PickByType, PickDefined, Pixels, PluginId, Position, PositionedSection, PreferredColumns$2 as PreferredColumns, PrefixKeys, PriorityBand$1 as PriorityBand, ProductSection, ProgressBarVariant, QuestionActionEvent, QuotationSection, RegisteredSectionPlugin, Replace, RequiredFields, ReturnType$1 as ReturnType, SectionBuilder, SectionComponentOptions, SectionFields, SectionId, SectionItems, SectionManifestEntry, SectionMetadata, SectionOf, SectionOrientation, SectionPlugin, SectionPluginConfig, SectionPluginMetadata, SectionRenderEvent, SectionRenderedEventDetail, SectionType, SectionTypeAlias, SectionTypeInput, SectionTypeMap, SectionTypeOf, SectionUpdatePayload, SkeletonSection, SkeletonSectionType, SocialMediaSection, SolutionsSection, StateSnapshot, StreamingConfig, StreamingState, StreamingStateEventDetail, SuffixKeys, SupportedLocale, Tail, TextReferenceSection, ThemeChangeEventDetail, ThemeId, ThemeMode, ThemePreset, ThemeServiceConfig, TiltCalculations, TimelineSection, Toast, TrackedError, Transformer, TrendDirection, Tuple, TypedEvent, Uncapitalize, Url, ValidationResult$1 as ValidationResult, ValidationSchema, Validator, VersionInfo, VideoSection };
11738
+ export type { AICardConfig, ActionClickEventDetail, ActionId, AgentActionEvent, AnalyticsDashboardOptions, AnalyticsSection, AnimationItemState, AnimationState, AnimationTrigger, AsyncTransformer, BadgeSize, BadgeVariant, BaseSectionProps, BrandColorsSection, Breakpoint, CSSIsolationMode, Capitalize, CardAction, CardActionVariant, CardBuilder, CardBusEvent, CardChangeType, CardEvent$1 as CardEvent, CardField, CardId, CardInteractionEventDetail, CardItem, CardSection, CardUpdate, CardUpdatePayload, ChartData, ChartSection, ChartType, ColorSchemePreference, CompanyCardOptions, ComplexityLevel, ContactCardOptions, ContactCardSection, DeepMutable, DeepPartial, DeepReadonly, DeepRequired, Discriminant, DiscriminatedSection, Email, EmailConfig$1 as EmailConfig, EmailContact, ErrorBoundaryOptions, ErrorBoundaryState, ErrorSeverity, EventFilter, EventHandler, EventMiddleware, EventSection, EventTransformer, ExcludeByType, Extend, ExtractSectionType, FallbackSection, FaqSection, FeatureFlagKey, FeatureFlagsConfig, FieldClickEventDetail, FieldFormat, FieldId, FieldPriority, FieldStatus, FieldUpdatePayload, FieldValue, FilterByType, FinancialsSection, FlipConfig, FlipState, GallerySection, GetDiscriminatedSection, GridConfig, Head, HexColor, IdentifiedCard, IdentifiedField, IdentifiedItem, IdentifiedSection, ImmutableCardConfig, ImmutableSection, InfoSection, ItemClickEventDetail, ItemId, KebabCase, KeyboardShortcut, KeysOfType, Last, LayoutConfig, LayoutLogEntry, LayoutPhase, LayoutResult, LayoutState, LayoutStatistics, LazyRenderOptions, ListSection, LogEntry, LogLevel, MailCardAction, MapSection, MasonryLayoutInfo, Maybe, Merge, Milliseconds, MinimalCardConfig, MousePosition, NetworkCardSection, NewCardConfig, NewsSection, Nullable, OSIAccessibilityConfig, OSIActionClickEvent, OSIAnimationConfig, OSICardInteractionEvent, OSICardsFullConfig, OSICardsThemeConfig, OSIErrorConfig, OSIEventDetail, OSIEventName, OSIFieldClickEvent, OSIItemClickEvent, OSILayoutConfig, OSILoggingConfig, OSISectionRegistration, OSISectionRenderedEvent, OSIStreamingConfig, OSIStreamingStateEvent, OSIThemeChangeEvent, OSIThemeConfig, OmitByType, Optional, OptionalFields, OsiCardsConfig, OverviewSection, PackingAlgorithm, Parameters$1 as Parameters, Percentage, PerformanceLevel, PickByType, PickDefined, Pixels, PluginId, Position, PositionedSection, PreferredColumns$2 as PreferredColumns, PrefixKeys, PriorityBand$1 as PriorityBand, ProductSection, ProgressBarVariant, QuestionActionEvent, QuotationSection, RegisteredSectionPlugin, Replace, RequiredFields, ReturnType$1 as ReturnType, SectionBuilder, SectionComponentOptions, SectionFields, SectionId, SectionItems, SectionManifestEntry, SectionMetadata, SectionOf, SectionOrientation, SectionPlugin, SectionPluginConfig, SectionPluginMetadata, SectionRenderEvent, SectionRenderedEventDetail, SectionType, SectionTypeAlias, SectionTypeInput, SectionTypeMap, SectionTypeOf, SectionUpdatePayload, SkeletonSection, SkeletonSectionType, SocialMediaSection, SolutionsSection, StateSnapshot, StreamingConfig, StreamingState, StreamingStateEventDetail, SuffixKeys, SupportedLocale, TableSection, Tail, TextReferenceSection, ThemeChangeEventDetail, ThemeId, ThemeMode, ThemePreset, ThemeServiceConfig, TiltCalculations, TimelineSection, Toast, TrackedError, Transformer, TrendDirection, Tuple, TypedEvent, Uncapitalize, Url, ValidationResult$1 as ValidationResult, ValidationSchema, Validator, VersionInfo, VideoSection };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "osi-cards-lib",
3
- "version": "1.5.41",
3
+ "version": "1.5.42",
4
4
  "description": "Standalone OSI Cards library for Angular applications with CSS Layer support for easy style overrides",
5
5
  "keywords": [
6
6
  "angular",
@@ -169,3 +169,4 @@ if (require.main === module) {
169
169
  module.exports = { updateAngularJson, findAngularJson };
170
170
 
171
171
 
172
+
@@ -106,7 +106,7 @@
106
106
  // Section-specific sizing
107
107
  --section-card-min-height: 110px;
108
108
  --section-card-compact-height: 90px;
109
- --section-header-gap: var(--spacing-md);
109
+ --section-header-gap: 2px;
110
110
  --section-content-gap: var(--spacing-sm);
111
111
  --section-card-gap: var(--spacing-md);
112
112
  --section-card-padding: var(--spacing-md);
@@ -3,7 +3,7 @@
3
3
  * ============================================================================
4
4
  * Standardized badge styling across all sections and card types.
5
5
  * Replaces multiple inconsistent badge patterns with unified design.
6
- *
6
+ *
7
7
  * Design Spec:
8
8
  * - Height: ~20-22px (auto with padding)
9
9
  * - Padding: 4px 8px (vertical horizontal)
@@ -275,7 +275,6 @@
275
275
 
276
276
  @media (max-width: 768px) {
277
277
  .badge {
278
- font-size: 0.5625rem; /* 9px on mobile */
279
278
  padding: 3px 6px;
280
279
 
281
280
  lucide-icon,
@@ -14,7 +14,10 @@ app-card-actions {
14
14
  margin-top: var(--space-3) !important;
15
15
  margin-left: var(--space-1) !important;
16
16
  margin-right: var(--space-1) !important;
17
+ padding-top: 0 !important;
17
18
  padding-bottom: var(--osi-card-padding) !important;
19
+ padding-left: 8px !important;
20
+ padding-right: 8px !important;
18
21
  }
19
22
 
20
23
  // Base Button Styles
@@ -23,7 +23,7 @@
23
23
  /* Pure CSS Grid - browser handles all positioning */
24
24
  display: grid;
25
25
  grid-template-columns: repeat(var(--masonry-columns, 4), 1fr);
26
- gap: var(--masonry-gap, 12px);
26
+ gap: var(--masonry-gap, 8px);
27
27
  width: 100%;
28
28
  min-height: 0;
29
29
  align-items: start;
@@ -2,17 +2,11 @@
2
2
  AI Card Styles - Unified with Docs App
3
3
  =================================================================== */
4
4
 
5
- /* Host element styles - transparent container with padding */
5
+ /* Host element styles - transparent container without padding (padding is on .ai-card-surface) */
6
6
  :host {
7
7
  display: block;
8
- padding: var(--osi-card-padding);
9
8
  background: transparent !important;
10
9
  background-color: transparent !important;
11
-
12
- /* Responsive: reduce padding on mobile */
13
- @media (max-width: 480px) {
14
- padding: var(--osi-card-padding-mobile);
15
- }
16
10
  }
17
11
 
18
12
  .ai-card-surface {
@@ -51,11 +45,11 @@
51
45
  box-shadow: var(--osi-card-shadow) !important;
52
46
 
53
47
  /* Padding - card-specific spacing */
54
- padding: var(--osi-card-padding, 16px) !important;
55
- padding-top: var(--osi-card-padding, 16px) !important;
56
- padding-bottom: var(--osi-card-padding, 16px) !important;
57
- padding-left: var(--osi-card-padding, 16px) !important;
58
- padding-right: var(--osi-card-padding, 16px) !important;
48
+ padding: var(--osi-card-padding, 8px) !important;
49
+ padding-top: var(--osi-card-padding, 8px) !important;
50
+ padding-bottom: var(--osi-card-padding, 8px) !important;
51
+ padding-left: var(--osi-card-padding, 8px) !important;
52
+ padding-right: var(--osi-card-padding, 8px) !important;
59
53
 
60
54
  /* Border radius - card-specific (larger than sections) */
61
55
  border-radius: var(--osi-card-border-radius) !important;
@@ -488,7 +482,7 @@
488
482
  margin-bottom: 0 !important;
489
483
  display: flex;
490
484
  flex-direction: column;
491
- gap: var(--osi-card-body-gap, 12px) !important; /* Constant gap between sections */
485
+ gap: var(--osi-card-body-gap, 8px) !important; /* Constant gap between sections */
492
486
  min-height: 0;
493
487
  max-width: 100%;
494
488
  box-sizing: border-box !important;
@@ -81,7 +81,7 @@
81
81
 
82
82
  // Section description text
83
83
  @mixin section-description-text {
84
- font-size: var(--section-description-font-size, 0.8rem);
84
+ font-size: var(--section-description-font-size, calc(0.8rem - 1px));
85
85
  font-weight: 400;
86
86
  color: var(--card-text-secondary, #{$foreground-60});
87
87
  line-height: 1.4;
@@ -73,7 +73,7 @@ $spacing-scale: (
73
73
  // Section-specific sizing - BALANCED for good UX
74
74
  --section-card-min-height: 110px; // Comfortable (was 120px, not 90px)
75
75
  --section-card-compact-height: 90px; // Compact variant
76
- --section-header-gap: var(--spacing-md); // 12px - comfortable readability
76
+ --section-header-gap: 2px; // Reduced gap between title and subtitle
77
77
  --section-content-gap: var(--spacing-sm); // 8px - good separation
78
78
  --section-card-gap: var(--spacing-md); // 12px - visual breathing room
79
79
  --section-card-padding: var(--spacing-md); // 12px - comfortable
@@ -46,7 +46,7 @@
46
46
  .masonry-item & {
47
47
  display: flex !important;
48
48
  flex-direction: column !important;
49
- gap: var(--osi-section-gap, 12px) !important;
49
+ gap: var(--osi-section-gap, 8px) !important;
50
50
  height: auto !important;
51
51
  }
52
52
  }
@@ -357,6 +357,7 @@
357
357
  box-sizing: border-box !important;
358
358
  display: flex !important;
359
359
  flex-direction: column !important;
360
+ padding: 4px !important;
360
361
  }
361
362
 
362
363
  /* Ensure FAQ section specifically resizes properly */
@@ -339,7 +339,7 @@ article.ai-card-surface {
339
339
  /* Section card variables */
340
340
  --section-card-min-height: 110px;
341
341
  --section-card-compact-height: 90px;
342
- --section-header-gap: var(--spacing-md);
342
+ --section-header-gap: 2px;
343
343
  --section-content-gap: var(--spacing-sm);
344
344
  --section-card-gap: var(--spacing-md);
345
345
  --section-card-padding: var(--spacing-md);
@@ -299,7 +299,7 @@ $osi-use-important: true !default;
299
299
  /// @param {Length} $gap - Gap between items
300
300
  @mixin osi-grid(
301
301
  $min-width: var(--section-grid-min-width, 200px),
302
- $gap: var(--section-card-gap, 12px)
302
+ $gap: var(--section-card-gap, 8px)
303
303
  ) {
304
304
  @include display(grid);
305
305
  @include grid-columns(repeat(auto-fit, minmax($min-width, 1fr)));
@@ -315,7 +315,7 @@ $osi-use-important: true !default;
315
315
 
316
316
  /// Flex column stack for vertical lists
317
317
  /// @param {Length} $gap - Gap between items
318
- @mixin osi-stack($gap: var(--section-stack-gap, 12px)) {
318
+ @mixin osi-stack($gap: var(--section-stack-gap, 8px)) {
319
319
  @include display(flex);
320
320
  @include flex-direction(column);
321
321
  @include gap($gap);
@@ -326,7 +326,7 @@ $osi-use-important: true !default;
326
326
  /// Fixed column grid
327
327
  /// @param {Number} $columns - Number of columns
328
328
  /// @param {Length} $gap - Gap between items
329
- @mixin osi-grid-fixed($columns: 2, $gap: var(--section-card-gap, 12px)) {
329
+ @mixin osi-grid-fixed($columns: 2, $gap: var(--section-card-gap, 8px)) {
330
330
  @include display(grid);
331
331
  @include grid-columns(repeat($columns, 1fr));
332
332
  @include gap($gap);
@@ -17,7 +17,7 @@
17
17
  --osi-spacing-3xl: 48px;
18
18
 
19
19
  // Section-specific spacing (More compact by default)
20
- --osi-section-header-gap: var(--osi-spacing-sm); // 8px (was 12px)
20
+ --osi-section-header-gap: 2px; // Reduced gap between title and subtitle
21
21
  --osi-section-padding: var(--osi-spacing-sm); // 8px (was 12px)
22
22
  --osi-section-gap: var(--osi-spacing-md); // 12px (was 16px)
23
23
  --osi-item-padding: var(--osi-spacing-sm); // 8px (was 12px)
@@ -16,24 +16,16 @@
16
16
  font-weight: var(--osi-font-semibold); // 600
17
17
  line-height: var(--osi-leading-snug); // 1.375
18
18
  color: var(--osi-foreground);
19
-
20
- @include mobile {
21
- font-size: var(--osi-text-sm); // Keep same on mobile
22
- }
23
19
  }
24
20
 
25
21
  // Item labels (small uppercase text)
26
22
  @mixin unified-item-label {
27
- font-size: 0.7rem; // 11.2px - Compact
23
+ font-size: 0.7rem; // 11.2px - Compact, fixed size
28
24
  font-weight: var(--osi-font-medium); // 500
29
25
  line-height: var(--osi-leading-tight); // 1.25
30
26
  color: var(--osi-muted-foreground);
31
27
  text-transform: uppercase;
32
28
  letter-spacing: 0.04em;
33
-
34
- @include mobile {
35
- font-size: 0.65rem; // 10.4px on mobile
36
- }
37
29
  }
38
30
 
39
31
  // Item values (prominent text/numbers)
@@ -42,10 +34,6 @@
42
34
  font-weight: var(--osi-font-semibold); // 600
43
35
  line-height: var(--osi-leading-normal); // 1.5
44
36
  color: var(--osi-foreground);
45
-
46
- @include mobile {
47
- font-size: var(--osi-text-sm); // Keep same on mobile
48
- }
49
37
  }
50
38
 
51
39
  // Item descriptions (secondary text)
@@ -54,25 +42,16 @@
54
42
  font-weight: var(--osi-font-normal); // 400
55
43
  line-height: var(--osi-leading-relaxed); // 1.625
56
44
  color: var(--osi-muted-foreground);
57
-
58
- @include mobile {
59
- font-size: var(--osi-text-xs); // Keep same on mobile
60
- line-height: var(--osi-leading-normal); // Tighter on mobile
61
- }
62
45
  }
63
46
 
64
47
  // Number displays (metrics, analytics)
65
48
  @mixin unified-number-display {
66
- font-size: var(--osi-text-xl); // 24px - Compact (was 30px)
49
+ font-size: var(--osi-text-xl); // 24px - Fixed size for all screen sizes
67
50
  font-weight: var(--osi-font-bold); // 700
68
51
  line-height: 1;
69
52
  letter-spacing: var(--osi-tracking-tight);
70
53
  font-variant-numeric: tabular-nums;
71
54
  color: var(--osi-foreground);
72
-
73
- @include mobile {
74
- font-size: var(--osi-text-lg); // 20px on mobile
75
- }
76
55
  }
77
56
 
78
57
  // ═══════════════════════════════════════════════════════════════════
@@ -17,7 +17,7 @@
17
17
  display: grid !important;
18
18
  grid-template-columns: repeat(auto-fill, minmax(var(--section-grid-min-width, 260px), 1fr));
19
19
  grid-template-rows: masonry;
20
- gap: var(--section-card-gap, 12px);
20
+ gap: var(--section-card-gap, 8px);
21
21
  align-tracks: stretch;
22
22
 
23
23
  /* Native masonry doesn't need absolute positioning */
@@ -292,12 +292,6 @@
292
292
  }
293
293
  }
294
294
 
295
- .masonry-item[data-priority="2"],
296
- .masonry-item[data-priority="3"] {
297
- /* Priority 2 and 3 sections - no special border, use unified styling */
298
- /* Left accent border removed for consistency */
299
- }
300
-
301
295
  /* Flex grow sections - expand to fill space */
302
296
  .masonry-item--flex-grow {
303
297
  flex-grow: 1 !important;
@@ -559,17 +553,17 @@
559
553
  }
560
554
 
561
555
  .masonry-skeleton--single {
562
- width: calc((100% - var(--masonry-gap, 12px) * 3) / 4);
556
+ width: calc((100% - var(--masonry-gap, 8px) * 3) / 4);
563
557
  height: 180px;
564
558
  }
565
559
 
566
560
  .masonry-skeleton--double {
567
- width: calc((100% - var(--masonry-gap, 12px) * 3) / 4 * 2 + var(--masonry-gap, 12px));
561
+ width: calc((100% - var(--masonry-gap, 8px) * 3) / 4 * 2 + var(--masonry-gap, 8px));
568
562
  height: 200px;
569
563
  }
570
564
 
571
565
  .masonry-skeleton--triple {
572
- width: calc((100% - var(--masonry-gap, 12px) * 3) / 4 * 3 + var(--masonry-gap, 12px) * 2);
566
+ width: calc((100% - var(--masonry-gap, 8px) * 3) / 4 * 3 + var(--masonry-gap, 8px) * 2);
573
567
  height: 220px;
574
568
  }
575
569
 
@@ -466,15 +466,14 @@ $breakpoints: (
466
466
  @mixin osi-card-typography($variant: "demo") {
467
467
  // Both demo and integration now use the same compact values
468
468
  // Section Titles
469
- --section-title-font-size: 0.92rem;
469
+ --section-title-font-size: calc(0.92rem - 6px);
470
470
  --section-title-font-weight: 700;
471
471
  --section-title-letter-spacing: -0.02em;
472
472
  --section-title-line-height: 1.3;
473
473
  --section-title-text-shadow: 0 1px 2px rgba(0, 0, 0, 0.08);
474
474
 
475
475
  // Card Header Title (main card title - larger)
476
- --card-header-title-font-size: 1.25rem; /* 20px - main card header (reduced by 2px from 22px) */
477
- --card-header-title-font-size-mobile: 1rem; /* 16px - mobile (reduced by 2px from 18px) */
476
+ --card-header-title-font-size: 1rem; /* 16px - fixed size for all screen sizes */
478
477
  --card-header-title-font-weight: 700;
479
478
  --card-header-title-letter-spacing: -0.02em;
480
479
  --card-header-title-line-height: 1.3;
@@ -526,23 +525,23 @@ $breakpoints: (
526
525
 
527
526
  /// Generate card layout tokens
528
527
  @mixin osi-card-layout() {
529
- --card-main-padding: 16px;
528
+ --card-main-padding: 8px;
530
529
  --card-padding-vertical: 12px;
531
- --card-padding-horizontal: 16px;
532
- --card-padding: 16px;
530
+ --card-padding-horizontal: 12px;
531
+ --card-padding: 12px;
533
532
  --card-padding-large: 20px;
534
533
  --section-padding: 12px;
535
- --section-container-padding: 12px;
534
+ --section-container-padding: 16px;
536
535
  --card-min-height: auto;
537
536
  --card-gap: 6px;
538
537
  --card-gap-large: 10px;
539
538
  --card-nested-gap: 3px;
540
- --section-header-gap: 3px;
539
+ --section-header-gap: 2px;
541
540
  --section-header-padding-bottom: 0px;
542
541
  --section-title-margin-bottom: 0;
543
542
  --card-border-radius: 12px;
544
543
  --card-border-radius-large: 16px;
545
- --section-card-gap: 12px;
544
+ --section-card-gap: 8px;
546
545
  --section-card-border-radius: 10px;
547
546
 
548
547
  // Element gaps within cards
@@ -649,11 +648,11 @@ $breakpoints: (
649
648
  --osi-card-shadow-fullscreen: none;
650
649
 
651
650
  // Card Spacing - Padding
652
- --osi-card-padding: var(--card-main-padding, 16px);
653
- --osi-card-padding-top: var(--card-main-padding, 16px);
654
- --osi-card-padding-bottom: var(--card-main-padding, 16px);
655
- --osi-card-padding-left: var(--card-main-padding, 16px);
656
- --osi-card-padding-right: var(--card-main-padding, 16px);
651
+ --osi-card-padding: var(--card-main-padding, 8px);
652
+ --osi-card-padding-top: var(--card-main-padding, 8px);
653
+ --osi-card-padding-bottom: var(--card-main-padding, 8px);
654
+ --osi-card-padding-left: var(--card-main-padding, 8px);
655
+ --osi-card-padding-right: var(--card-main-padding, 8px);
657
656
  --osi-card-padding-mobile: 4px; // Fixed padding - no responsive behavior
658
657
 
659
658
  // Card Spacing - Margins
@@ -663,9 +662,9 @@ $breakpoints: (
663
662
  --osi-card-margin-right: 0;
664
663
 
665
664
  // Card Spacing - Gaps
666
- --osi-card-gap: var(--section-card-gap, 12px);
667
- --osi-card-body-gap: var(--space-3, 12px);
668
- --osi-card-grid-gap: var(--section-card-gap, 12px);
665
+ --osi-card-gap: var(--section-card-gap, 8px);
666
+ --osi-card-body-gap: var(--space-4, 8px);
667
+ --osi-card-grid-gap: var(--section-card-gap, 8px);
669
668
 
670
669
  // Card Border Radius
671
670
  --osi-card-border-radius: var(--card-border-radius);
@@ -801,7 +800,7 @@ $breakpoints: (
801
800
  --osi-section-border-radius: var(--section-card-border-radius);
802
801
 
803
802
  // Section Typography
804
- --osi-section-title-font-size: var(--section-title-font-size, 1.1rem);
803
+ --osi-section-title-font-size: calc(1.1rem - 4px);
805
804
  --osi-section-title-font-weight: var(--section-title-font-weight, 700);
806
805
  --osi-section-title-letter-spacing: var(--section-title-letter-spacing, -0.02em);
807
806
  --osi-section-title-line-height: var(--section-title-line-height, 1.3);