@ngxsmk/theme 3.0.0 → 3.1.0

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.
@@ -338,9 +338,9 @@ function resolveTheme(config) {
338
338
  fontFamily: { ...DEFAULT_FONT_FAMILY, ...config.typography?.fontFamily },
339
339
  typography: DEFAULT_TYPOGRAPHY,
340
340
  spacing: SPACING,
341
- radius: RADIUS,
341
+ radius: { ...RADIUS, ...(config.radiusScale ?? {}) },
342
342
  radiusBase: config.borderRadius ?? 'md',
343
- shadow: SHADOW,
343
+ shadow: { ...SHADOW, ...(config.shadowScale ?? {}) },
344
344
  duration: DURATION,
345
345
  easing: EASING,
346
346
  zIndex: Z_INDEX,
@@ -371,12 +371,25 @@ const COMPONENT_TOKEN_DEFAULTS = {
371
371
  '--ngxsmk-button-font-weight': '500',
372
372
  '--ngxsmk-button-radius': 'var(--ngxsmk-radius-base)',
373
373
  '--ngxsmk-button-disabled-opacity': '0.5',
374
+ '--ngxsmk-button-border-width': '1px',
375
+ '--ngxsmk-button-gap': 'var(--ngxsmk-space-2)',
376
+ },
377
+ input: {
378
+ '--ngxsmk-input-bg': 'var(--ngxsmk-color-surface)',
379
+ '--ngxsmk-input-color': 'var(--ngxsmk-color-on-surface)',
380
+ '--ngxsmk-input-border': 'var(--ngxsmk-color-outline-strong)',
381
+ '--ngxsmk-input-radius': 'var(--ngxsmk-radius-base)',
382
+ '--ngxsmk-input-height': 'var(--ngxsmk-control-height)',
383
+ '--ngxsmk-input-padding-inline': 'var(--ngxsmk-space-3)',
384
+ '--ngxsmk-input-placeholder': 'var(--ngxsmk-color-on-surface-variant)',
374
385
  },
375
386
  card: {
376
387
  '--ngxsmk-card-bg': 'var(--ngxsmk-color-surface)',
377
388
  '--ngxsmk-card-radius': 'var(--ngxsmk-radius-xl)',
378
389
  '--ngxsmk-card-shadow': 'var(--ngxsmk-shadow-sm)',
379
390
  '--ngxsmk-card-border-color': 'var(--ngxsmk-color-outline)',
391
+ '--ngxsmk-card-border-width': '1px',
392
+ '--ngxsmk-card-padding': 'var(--ngxsmk-space-5)',
380
393
  },
381
394
  accordion: {
382
395
  '--ngxsmk-accordion-bg': 'var(--ngxsmk-color-surface)',
@@ -398,6 +411,122 @@ const COMPONENT_TOKEN_DEFAULTS = {
398
411
  '--ngxsmk-switch-thumb-bg': 'var(--ngxsmk-color-surface)',
399
412
  '--ngxsmk-switch-checked-bg': 'var(--ngxsmk-color-primary)',
400
413
  },
414
+ checkbox: {
415
+ '--ngxsmk-checkbox-size': '1.125rem',
416
+ '--ngxsmk-checkbox-radius': 'var(--ngxsmk-radius-sm)',
417
+ '--ngxsmk-checkbox-border': 'var(--ngxsmk-color-outline-strong)',
418
+ '--ngxsmk-checkbox-checked-bg': 'var(--ngxsmk-color-primary)',
419
+ },
420
+ badge: {
421
+ '--ngxsmk-badge-radius': 'var(--ngxsmk-radius-full)',
422
+ '--ngxsmk-badge-font-weight': '600',
423
+ '--ngxsmk-badge-padding-inline': '0.5rem',
424
+ '--ngxsmk-badge-padding-block': '0.125rem',
425
+ '--ngxsmk-badge-border-mix': '20%',
426
+ },
427
+ alert: {
428
+ '--ngxsmk-alert-radius': 'var(--ngxsmk-radius-lg)',
429
+ '--ngxsmk-alert-border-mix': '22%',
430
+ '--ngxsmk-alert-padding': 'var(--ngxsmk-space-4)',
431
+ },
432
+ dialog: {
433
+ '--ngxsmk-dialog-radius': 'var(--ngxsmk-radius-2xl)',
434
+ '--ngxsmk-dialog-shadow': 'var(--ngxsmk-shadow-xl)',
435
+ '--ngxsmk-dialog-bg': 'var(--ngxsmk-color-surface-elevated)',
436
+ '--ngxsmk-dialog-backdrop': 'var(--ngxsmk-color-backdrop)',
437
+ '--ngxsmk-dialog-blur': '4px',
438
+ '--ngxsmk-dialog-max-width': '28rem',
439
+ },
440
+ sheet: {
441
+ '--ngxsmk-sheet-radius': 'var(--ngxsmk-radius-xl)',
442
+ '--ngxsmk-sheet-shadow': 'var(--ngxsmk-shadow-xl)',
443
+ '--ngxsmk-sheet-bg': 'var(--ngxsmk-color-surface-elevated)',
444
+ '--ngxsmk-sheet-backdrop': 'var(--ngxsmk-color-backdrop)',
445
+ '--ngxsmk-sheet-width': '24rem',
446
+ },
447
+ lightbox: {
448
+ '--ngxsmk-lightbox-backdrop': 'rgb(0 0 0 / 0.9)',
449
+ '--ngxsmk-lightbox-fg': '#ffffff',
450
+ '--ngxsmk-lightbox-control-bg': 'rgb(255 255 255 / 0.12)',
451
+ '--ngxsmk-lightbox-control-bg-hover': 'rgb(255 255 255 / 0.22)',
452
+ },
453
+ toast: {
454
+ '--ngxsmk-toast-radius': 'var(--ngxsmk-radius-lg)',
455
+ '--ngxsmk-toast-shadow': 'var(--ngxsmk-shadow-lg)',
456
+ '--ngxsmk-toast-bg': 'var(--ngxsmk-color-surface-elevated)',
457
+ '--ngxsmk-toast-accent-width': '3px',
458
+ },
459
+ table: {
460
+ '--ngxsmk-table-border': 'var(--ngxsmk-color-outline)',
461
+ '--ngxsmk-table-header-bg': 'color-mix(in srgb, var(--ngxsmk-color-surface-variant) 55%, transparent)',
462
+ '--ngxsmk-table-row-hover': 'var(--ngxsmk-color-surface-hover)',
463
+ '--ngxsmk-table-stripe': 'color-mix(in srgb, var(--ngxsmk-color-surface-variant) 35%, transparent)',
464
+ '--ngxsmk-table-drop-indicator': 'inset 2px 0 0 var(--ngxsmk-color-primary)',
465
+ '--ngxsmk-table-cell-padding': '0.625rem 0.75rem',
466
+ },
467
+ tabs: {
468
+ '--ngxsmk-tabs-indicator': '2px',
469
+ '--ngxsmk-tabs-radius': 'var(--ngxsmk-radius-md)',
470
+ '--ngxsmk-tabs-gap': 'var(--ngxsmk-space-1)',
471
+ },
472
+ select: {
473
+ '--ngxsmk-select-bg': 'var(--ngxsmk-color-surface)',
474
+ '--ngxsmk-select-border': 'var(--ngxsmk-color-outline-strong)',
475
+ '--ngxsmk-select-radius': 'var(--ngxsmk-radius-base)',
476
+ '--ngxsmk-select-list-shadow': 'var(--ngxsmk-shadow-lg)',
477
+ '--ngxsmk-select-list-radius': 'var(--ngxsmk-radius-lg)',
478
+ },
479
+ menu: {
480
+ '--ngxsmk-menu-bg': 'var(--ngxsmk-color-surface-elevated)',
481
+ '--ngxsmk-menu-radius': 'var(--ngxsmk-radius-lg)',
482
+ '--ngxsmk-menu-shadow': 'var(--ngxsmk-shadow-lg)',
483
+ '--ngxsmk-menu-border': 'var(--ngxsmk-color-outline)',
484
+ '--ngxsmk-menu-item-radius': 'var(--ngxsmk-radius-md)',
485
+ },
486
+ pagination: {
487
+ '--ngxsmk-pagination-size': '2.25rem',
488
+ '--ngxsmk-pagination-radius': 'var(--ngxsmk-radius-md)',
489
+ },
490
+ formField: {
491
+ '--ngxsmk-form-field-gap': 'var(--ngxsmk-space-1-5)',
492
+ '--ngxsmk-form-field-label-weight': '500',
493
+ },
494
+ radio: {
495
+ '--ngxsmk-radio-size': '1.125rem',
496
+ '--ngxsmk-radio-dot-size': '0.5rem',
497
+ '--ngxsmk-radio-border': 'var(--ngxsmk-color-outline-strong)',
498
+ },
499
+ dataTable: {
500
+ '--ngxsmk-data-table-border': 'var(--ngxsmk-color-outline)',
501
+ '--ngxsmk-data-table-radius': 'var(--ngxsmk-radius-md)',
502
+ '--ngxsmk-data-table-filter-bg': 'color-mix(in srgb, var(--ngxsmk-color-surface-variant) 40%, transparent)',
503
+ '--ngxsmk-data-table-filter-label-size': '0.7rem',
504
+ '--ngxsmk-data-table-page-size': '2rem',
505
+ '--ngxsmk-data-table-loading-height': '3px',
506
+ },
507
+ aiChat: {
508
+ '--ngxsmk-ai-chat-radius': 'var(--ngxsmk-radius-xl)',
509
+ '--ngxsmk-ai-chat-border': 'var(--ngxsmk-color-outline)',
510
+ '--ngxsmk-ai-chat-bg': 'var(--ngxsmk-color-surface)',
511
+ '--ngxsmk-ai-chat-header-bg': 'var(--ngxsmk-color-surface-variant)',
512
+ '--ngxsmk-ai-chat-bubble-bg': 'var(--ngxsmk-color-surface-variant)',
513
+ '--ngxsmk-ai-chat-bubble-user-bg': 'var(--ngxsmk-color-primary)',
514
+ '--ngxsmk-ai-chat-bubble-radius': 'var(--ngxsmk-radius-lg)',
515
+ '--ngxsmk-ai-chat-composer-radius': 'var(--ngxsmk-radius-full)',
516
+ },
517
+ promptInput: {
518
+ '--ngxsmk-prompt-radius': 'var(--ngxsmk-radius-xl)',
519
+ '--ngxsmk-prompt-border': 'var(--ngxsmk-color-outline-strong)',
520
+ '--ngxsmk-prompt-shadow': 'var(--ngxsmk-shadow-sm)',
521
+ '--ngxsmk-prompt-bg': 'var(--ngxsmk-color-surface)',
522
+ '--ngxsmk-prompt-send-radius': 'var(--ngxsmk-radius-full)',
523
+ },
524
+ chatBubble: {
525
+ '--ngxsmk-chat-bubble-radius': 'var(--ngxsmk-radius-lg)',
526
+ '--ngxsmk-chat-bubble-bg': 'var(--ngxsmk-color-surface-container)',
527
+ '--ngxsmk-chat-bubble-user-bg': 'var(--ngxsmk-color-primary-container)',
528
+ '--ngxsmk-chat-bubble-padding': 'var(--ngxsmk-space-2) var(--ngxsmk-space-3)',
529
+ },
401
530
  spreadsheet: {
402
531
  '--ngxsmk-spreadsheet-bg': 'var(--ngxsmk-color-surface)',
403
532
  '--ngxsmk-spreadsheet-header-bg': 'var(--ngxsmk-color-surface-variant)',
@@ -429,16 +558,22 @@ const COMPONENT_TOKEN_DEFAULTS = {
429
558
  '--ngxsmk-input-group-radius': 'var(--ngxsmk-radius-md)',
430
559
  '--ngxsmk-input-group-shadow': 'none',
431
560
  '--ngxsmk-input-group-focus-border': 'var(--ngxsmk-color-primary)',
432
- '--ngxsmk-input-group-focus-shadow': '0 0 0 3px color-mix(in srgb, var(--ngxsmk-color-primary) 15%, transparent)',
561
+ '--ngxsmk-input-group-focus-shadow': 'var(--ngxsmk-focus-ring)',
433
562
  '--ngxsmk-input-group-error-border': 'var(--ngxsmk-color-error)',
434
- '--ngxsmk-input-group-error-focus-shadow': '0 0 0 3px color-mix(in srgb, var(--ngxsmk-color-error) 15%, transparent)',
563
+ '--ngxsmk-input-group-error-focus-shadow': 'var(--ngxsmk-focus-ring-error)',
435
564
  '--ngxsmk-input-group-success-border': 'var(--ngxsmk-color-success)',
436
565
  '--ngxsmk-input-group-warning-border': 'var(--ngxsmk-color-warning)',
437
- '--ngxsmk-input-group-height': '2.5rem',
566
+ '--ngxsmk-input-group-height': 'var(--ngxsmk-control-height)',
438
567
  '--ngxsmk-input-group-padding': '0.75rem',
439
568
  '--ngxsmk-input-group-gap': 'var(--ngxsmk-space-2)',
440
569
  '--ngxsmk-input-group-font': 'var(--ngxsmk-font-sans)',
441
570
  },
571
+ heatmap: {
572
+ '--ngxsmk-heatmap-level-1': 'color-mix(in srgb, var(--ngxsmk-color-success) 28%, var(--ngxsmk-color-surface-variant))',
573
+ '--ngxsmk-heatmap-level-2': 'color-mix(in srgb, var(--ngxsmk-color-success) 52%, var(--ngxsmk-color-surface-variant))',
574
+ '--ngxsmk-heatmap-level-3': 'color-mix(in srgb, var(--ngxsmk-color-success) 76%, var(--ngxsmk-color-surface-variant))',
575
+ '--ngxsmk-heatmap-level-4': 'var(--ngxsmk-color-success)',
576
+ },
442
577
  };
443
578
  /** Tokens that do not change between light and dark mode. */
444
579
  function staticVars(theme) {
@@ -763,6 +898,9 @@ const neutralPreset = {
763
898
  /**
764
899
  * Default preset: Emerald green. This preset generates the prebuilt
765
900
  * `ngxsmk.css` stylesheet shipped with @ngxsmk/theme.
901
+ *
902
+ * **Classic contract:** keep this visually stable for existing consumers.
903
+ * Premium Ink lives in `inkPreset` / `ngxsmk.ink.css` as an opt-in.
766
904
  */
767
905
  const emeraldPreset = {
768
906
  name: 'emerald',
@@ -772,11 +910,174 @@ const rosePreset = {
772
910
  name: 'rose',
773
911
  brand: { primary: '#E11D48' },
774
912
  };
913
+ /**
914
+ * Cool graphite neutrals for the Ink & precision look. Independent of the
915
+ * Classic `DEFAULT_NEUTRAL` so emerald/violet/rose stay unchanged.
916
+ */
917
+ const INK_NEUTRAL = {
918
+ 50: '#F6F7F8',
919
+ 100: '#EBEDF0',
920
+ 200: '#D5D8DE',
921
+ 300: '#B0B5BF',
922
+ 400: '#7E8491',
923
+ 500: '#5A606C',
924
+ 600: '#454954',
925
+ 700: '#33363E',
926
+ 800: '#1C1E24',
927
+ 900: '#12141A',
928
+ 950: '#0A0B0E',
929
+ };
930
+ /**
931
+ * Opt-in premium preset: Ink & precision.
932
+ * Generates `ngxsmk.ink.css`. Does not replace the default `ngxsmk.css`.
933
+ *
934
+ * Consumers:
935
+ * ```css
936
+ * @import '@ngxsmk/theme/styles/ngxsmk.ink.css';
937
+ * ```
938
+ * or `theme.applyTheme(inkPreset)`.
939
+ */
940
+ const inkPreset = {
941
+ name: 'ink',
942
+ brand: { primary: '#0F766E' },
943
+ neutral: INK_NEUTRAL,
944
+ typography: {
945
+ fontFamily: {
946
+ sans: "'Geist Sans', 'Geist Sans Fallback', system-ui, -apple-system, sans-serif",
947
+ mono: "'Geist Mono', 'Geist Mono Fallback', monospace",
948
+ },
949
+ },
950
+ borderRadius: 'md',
951
+ radiusScale: {
952
+ sm: '0.1875rem', // 3px
953
+ md: '0.375rem', // 6px — element base
954
+ lg: '0.5rem', // 8px — cards / popovers
955
+ xl: '0.625rem', // 10px
956
+ '2xl': '0.75rem', // 12px
957
+ '3xl': '1rem', // 16px — page surfaces (was 28px in Classic)
958
+ },
959
+ shadowScale: {
960
+ sm: '0 0 0 1px rgb(0 0 0 / 0.04), 0 1px 2px rgb(0 0 0 / 0.04)',
961
+ md: '0 0 0 1px rgb(0 0 0 / 0.04), 0 1px 2px rgb(0 0 0 / 0.05), 0 4px 10px rgb(0 0 0 / 0.05)',
962
+ lg: '0 0 0 1px rgb(0 0 0 / 0.05), 0 2px 4px rgb(0 0 0 / 0.05), 0 10px 28px rgb(0 0 0 / 0.08)',
963
+ xl: '0 0 0 1px rgb(0 0 0 / 0.05), 0 4px 8px rgb(0 0 0 / 0.06), 0 18px 40px rgb(0 0 0 / 0.1)',
964
+ '2xl': '0 0 0 1px rgb(0 0 0 / 0.06), 0 8px 16px rgb(0 0 0 / 0.08), 0 28px 56px rgb(0 0 0 / 0.12)',
965
+ },
966
+ overrides: {
967
+ light: {
968
+ // Graphite canvas — quieter than Classic cool-blue wash.
969
+ '--ngxsmk-color-background': '#F4F5F7',
970
+ '--ngxsmk-color-surface': '#FFFFFF',
971
+ '--ngxsmk-color-surface-elevated': '#FFFFFF',
972
+ '--ngxsmk-color-surface-overlay': '#FFFFFF',
973
+ '--ngxsmk-color-surface-variant': '#EBEDF0',
974
+ '--ngxsmk-color-on-background': '#0A0B0E',
975
+ '--ngxsmk-color-on-surface': '#0A0B0E',
976
+ '--ngxsmk-color-on-surface-variant': '#5A606C',
977
+ '--ngxsmk-color-surface-hover': 'rgb(10 11 14 / 0.04)',
978
+ '--ngxsmk-color-surface-active': 'rgb(10 11 14 / 0.08)',
979
+ '--ngxsmk-color-outline': 'rgb(10 11 14 / 0.1)',
980
+ '--ngxsmk-color-outline-strong': '#D5D8DE',
981
+ '--ngxsmk-color-outline-variant': 'rgb(10 11 14 / 0.06)',
982
+ '--ngxsmk-color-outline-subtle': 'rgb(10 11 14 / 0.05)',
983
+ '--ngxsmk-color-backdrop': 'rgb(10 11 14 / 0.48)',
984
+ '--ngxsmk-color-ring': '#0F766E',
985
+ // Precision focus — tighter than Classic double ring.
986
+ '--ngxsmk-shadow-focus': '0 0 0 1px #FFFFFF, 0 0 0 3px color-mix(in srgb, #0F766E 55%, transparent)',
987
+ // Density.
988
+ '--ngxsmk-control-height': '2.25rem',
989
+ '--ngxsmk-control-height-sm': '1.875rem',
990
+ '--ngxsmk-control-height-md': '2.25rem',
991
+ '--ngxsmk-control-height-lg': '2.75rem',
992
+ // Component chrome — border-first, no float.
993
+ '--ngxsmk-hover-lift': 'none',
994
+ '--ngxsmk-button-font-weight': '600',
995
+ '--ngxsmk-button-radius': 'var(--ngxsmk-radius-md)',
996
+ '--ngxsmk-input-border': 'var(--ngxsmk-color-outline)',
997
+ '--ngxsmk-input-height': 'var(--ngxsmk-control-height)',
998
+ '--ngxsmk-input-group-height': '2.25rem',
999
+ '--ngxsmk-input-group-border': 'var(--ngxsmk-color-outline)',
1000
+ '--ngxsmk-card-shadow': 'none',
1001
+ '--ngxsmk-card-radius': 'var(--ngxsmk-radius-lg)',
1002
+ '--ngxsmk-card-border-width': '1px',
1003
+ '--ngxsmk-dialog-radius': 'var(--ngxsmk-radius-lg)',
1004
+ '--ngxsmk-dialog-blur': '8px',
1005
+ '--ngxsmk-sheet-radius': 'var(--ngxsmk-radius-lg)',
1006
+ '--ngxsmk-toast-radius': 'var(--ngxsmk-radius-md)',
1007
+ '--ngxsmk-toast-accent-width': '2px',
1008
+ '--ngxsmk-select-border': 'var(--ngxsmk-color-outline)',
1009
+ '--ngxsmk-menu-radius': 'var(--ngxsmk-radius-md)',
1010
+ '--ngxsmk-pagination-size': '2rem',
1011
+ '--ngxsmk-pagination-radius': 'var(--ngxsmk-radius-md)',
1012
+ '--ngxsmk-table-header-bg': 'color-mix(in srgb, var(--ngxsmk-color-surface-variant) 70%, transparent)',
1013
+ '--ngxsmk-badge-font-weight': '650',
1014
+ '--ngxsmk-progress-height': '0.375rem',
1015
+ // Forms — denser labels, quieter group chrome.
1016
+ '--ngxsmk-form-field-gap': 'var(--ngxsmk-space-1)',
1017
+ '--ngxsmk-form-field-label-weight': '600',
1018
+ '--ngxsmk-input-group-radius': 'var(--ngxsmk-radius-md)',
1019
+ '--ngxsmk-input-group-padding': '0.625rem',
1020
+ '--ngxsmk-radio-border': 'var(--ngxsmk-color-outline)',
1021
+ // Data table — ops density.
1022
+ '--ngxsmk-data-table-radius': 'var(--ngxsmk-radius-md)',
1023
+ '--ngxsmk-data-table-filter-bg': 'color-mix(in srgb, var(--ngxsmk-color-surface-variant) 55%, transparent)',
1024
+ '--ngxsmk-data-table-page-size': '1.875rem',
1025
+ '--ngxsmk-data-table-loading-height': '2px',
1026
+ // AI surfaces — border-first console, no soft float.
1027
+ '--ngxsmk-ai-chat-radius': 'var(--ngxsmk-radius-lg)',
1028
+ '--ngxsmk-ai-chat-header-bg': 'var(--ngxsmk-color-surface)',
1029
+ '--ngxsmk-ai-chat-bubble-bg': 'var(--ngxsmk-color-surface-variant)',
1030
+ '--ngxsmk-ai-chat-bubble-radius': 'var(--ngxsmk-radius-md)',
1031
+ '--ngxsmk-ai-chat-composer-radius': 'var(--ngxsmk-radius-md)',
1032
+ '--ngxsmk-prompt-radius': 'var(--ngxsmk-radius-lg)',
1033
+ '--ngxsmk-prompt-border': 'var(--ngxsmk-color-outline)',
1034
+ '--ngxsmk-prompt-shadow': 'none',
1035
+ '--ngxsmk-prompt-send-radius': 'var(--ngxsmk-radius-md)',
1036
+ '--ngxsmk-chat-bubble-radius': 'var(--ngxsmk-radius-md)',
1037
+ '--ngxsmk-chat-bubble-padding': 'var(--ngxsmk-space-2) var(--ngxsmk-space-3)',
1038
+ },
1039
+ dark: {
1040
+ '--ngxsmk-color-background': '#0A0B0E',
1041
+ '--ngxsmk-color-surface': '#12141A',
1042
+ '--ngxsmk-color-surface-elevated': '#1C1E24',
1043
+ '--ngxsmk-color-surface-overlay': '#1C1E24',
1044
+ '--ngxsmk-color-surface-container': '#12141A',
1045
+ '--ngxsmk-color-surface-variant': '#1C1E24',
1046
+ '--ngxsmk-color-surface-1': '#12141A',
1047
+ '--ngxsmk-color-surface-2': '#1C1E24',
1048
+ '--ngxsmk-color-outline': 'rgb(246 247 248 / 0.12)',
1049
+ '--ngxsmk-color-outline-strong': 'rgb(246 247 248 / 0.18)',
1050
+ '--ngxsmk-color-outline-variant': 'rgb(246 247 248 / 0.08)',
1051
+ '--ngxsmk-color-backdrop': 'rgb(0 0 0 / 0.62)',
1052
+ '--ngxsmk-shadow-focus': '0 0 0 1px #12141A, 0 0 0 3px color-mix(in srgb, #2DD4BF 50%, transparent)',
1053
+ '--ngxsmk-hover-lift': 'none',
1054
+ '--ngxsmk-control-height': '2.25rem',
1055
+ '--ngxsmk-control-height-sm': '1.875rem',
1056
+ '--ngxsmk-control-height-md': '2.25rem',
1057
+ '--ngxsmk-control-height-lg': '2.75rem',
1058
+ '--ngxsmk-button-font-weight': '600',
1059
+ '--ngxsmk-card-shadow': 'none',
1060
+ '--ngxsmk-card-radius': 'var(--ngxsmk-radius-lg)',
1061
+ '--ngxsmk-dialog-radius': 'var(--ngxsmk-radius-lg)',
1062
+ '--ngxsmk-input-border': 'var(--ngxsmk-color-outline)',
1063
+ '--ngxsmk-select-border': 'var(--ngxsmk-color-outline)',
1064
+ '--ngxsmk-form-field-label-weight': '600',
1065
+ '--ngxsmk-input-group-height': '2.25rem',
1066
+ '--ngxsmk-ai-chat-radius': 'var(--ngxsmk-radius-lg)',
1067
+ '--ngxsmk-ai-chat-header-bg': 'var(--ngxsmk-color-surface)',
1068
+ '--ngxsmk-prompt-shadow': 'none',
1069
+ '--ngxsmk-prompt-border': 'var(--ngxsmk-color-outline)',
1070
+ '--ngxsmk-prompt-send-radius': 'var(--ngxsmk-radius-md)',
1071
+ '--ngxsmk-data-table-filter-bg': 'color-mix(in srgb, var(--ngxsmk-color-surface-variant) 70%, transparent)',
1072
+ },
1073
+ },
1074
+ };
775
1075
  const presets = {
776
1076
  violet: violetPreset,
777
1077
  neutral: neutralPreset,
778
1078
  emerald: emeraldPreset,
779
1079
  rose: rosePreset,
1080
+ ink: inkPreset,
780
1081
  };
781
1082
 
782
1083
  /**
@@ -1019,9 +1320,7 @@ class NgxThemeInjectorService {
1019
1320
  const resolved = resolveTheme(config);
1020
1321
  const lightVars = ionicVarsAdapter.vars(resolved);
1021
1322
  const darkVars = ionicVarsAdapter.darkVars ? ionicVarsAdapter.darkVars(resolved) : undefined;
1022
- if (style) {
1023
- style.textContent = this.buildAdapterCss('ionic', lightVars, darkVars);
1024
- }
1323
+ style.textContent = this.buildAdapterCss('ionic', lightVars, darkVars);
1025
1324
  }
1026
1325
  /** Remove a runtime-applied theme, falling back to the build-time CSS. */
1027
1326
  clearTheme() {
@@ -1159,5 +1458,5 @@ function provideNgxsmkIonicTheme(config) {
1159
1458
  * Generated bundle index. Do not edit.
1160
1459
  */
1161
1460
 
1162
- export { CONTROL_HEIGHT, CONTROL_HEIGHTS, DEFAULT_FONT_FAMILY, DEFAULT_NEUTRAL, DEFAULT_SEMANTIC, DEFAULT_TYPOGRAPHY, DURATION, EASING, FONT_WEIGHT, ICON_SIZE, LEADING, NgxThemeInjectorService, NgxsmkThemeService, OPACITY, RADIUS, SAFE_AREA, SHADOW, SPACING, TOUCH_TARGET_MIN, TRACKING, Z_INDEX, buildThemeCss, cssVarsAdapter, defineConfig, deriveScale, emeraldPreset, hexToOklch, ionicVarsAdapter, neutralPreset, oklchToHex, presets, provideNgxsmkIonicTheme, resolveTheme, rosePreset, rotateHue, shiftLightness, violetPreset };
1461
+ export { CONTROL_HEIGHT, CONTROL_HEIGHTS, DEFAULT_FONT_FAMILY, DEFAULT_NEUTRAL, DEFAULT_SEMANTIC, DEFAULT_TYPOGRAPHY, DURATION, EASING, FONT_WEIGHT, ICON_SIZE, LEADING, NgxThemeInjectorService, NgxsmkThemeService, OPACITY, RADIUS, SAFE_AREA, SHADOW, SPACING, TOUCH_TARGET_MIN, TRACKING, Z_INDEX, buildThemeCss, cssVarsAdapter, defineConfig, deriveScale, emeraldPreset, hexToOklch, inkPreset, ionicVarsAdapter, neutralPreset, oklchToHex, presets, provideNgxsmkIonicTheme, resolveTheme, rosePreset, rotateHue, shiftLightness, violetPreset };
1163
1462
  //# sourceMappingURL=ngxsmk-theme.mjs.map