@ngxsmk/theme 3.0.0 → 3.2.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.
@@ -54,10 +54,21 @@
54
54
  --ngxsmk-button-font-weight: 500;
55
55
  --ngxsmk-button-radius: var(--ngxsmk-radius-base);
56
56
  --ngxsmk-button-disabled-opacity: 0.5;
57
+ --ngxsmk-button-border-width: 1px;
58
+ --ngxsmk-button-gap: var(--ngxsmk-space-2);
59
+ --ngxsmk-input-bg: var(--ngxsmk-color-surface);
60
+ --ngxsmk-input-color: var(--ngxsmk-color-on-surface);
61
+ --ngxsmk-input-border: var(--ngxsmk-color-outline-strong);
62
+ --ngxsmk-input-radius: var(--ngxsmk-radius-base);
63
+ --ngxsmk-input-height: var(--ngxsmk-control-height);
64
+ --ngxsmk-input-padding-inline: var(--ngxsmk-space-3);
65
+ --ngxsmk-input-placeholder: var(--ngxsmk-color-on-surface-variant);
57
66
  --ngxsmk-card-bg: var(--ngxsmk-color-surface);
58
67
  --ngxsmk-card-radius: var(--ngxsmk-radius-xl);
59
68
  --ngxsmk-card-shadow: var(--ngxsmk-shadow-sm);
60
69
  --ngxsmk-card-border-color: var(--ngxsmk-color-outline);
70
+ --ngxsmk-card-border-width: 1px;
71
+ --ngxsmk-card-padding: var(--ngxsmk-space-5);
61
72
  --ngxsmk-accordion-bg: var(--ngxsmk-color-surface);
62
73
  --ngxsmk-accordion-radius: var(--ngxsmk-radius-lg);
63
74
  --ngxsmk-accordion-border-color: var(--ngxsmk-color-outline);
@@ -72,6 +83,86 @@
72
83
  --ngxsmk-switch-thumb-size: 0.875rem;
73
84
  --ngxsmk-switch-thumb-bg: var(--ngxsmk-color-surface);
74
85
  --ngxsmk-switch-checked-bg: var(--ngxsmk-color-primary);
86
+ --ngxsmk-checkbox-size: 1.125rem;
87
+ --ngxsmk-checkbox-radius: var(--ngxsmk-radius-sm);
88
+ --ngxsmk-checkbox-border: var(--ngxsmk-color-outline-strong);
89
+ --ngxsmk-checkbox-checked-bg: var(--ngxsmk-color-primary);
90
+ --ngxsmk-badge-radius: var(--ngxsmk-radius-full);
91
+ --ngxsmk-badge-font-weight: 600;
92
+ --ngxsmk-badge-padding-inline: 0.5rem;
93
+ --ngxsmk-badge-padding-block: 0.125rem;
94
+ --ngxsmk-badge-border-mix: 20%;
95
+ --ngxsmk-alert-radius: var(--ngxsmk-radius-lg);
96
+ --ngxsmk-alert-border-mix: 22%;
97
+ --ngxsmk-alert-padding: var(--ngxsmk-space-4);
98
+ --ngxsmk-dialog-radius: var(--ngxsmk-radius-2xl);
99
+ --ngxsmk-dialog-shadow: var(--ngxsmk-shadow-xl);
100
+ --ngxsmk-dialog-bg: var(--ngxsmk-color-surface-elevated);
101
+ --ngxsmk-dialog-backdrop: var(--ngxsmk-color-backdrop);
102
+ --ngxsmk-dialog-blur: 4px;
103
+ --ngxsmk-dialog-max-width: 28rem;
104
+ --ngxsmk-sheet-radius: var(--ngxsmk-radius-xl);
105
+ --ngxsmk-sheet-shadow: var(--ngxsmk-shadow-xl);
106
+ --ngxsmk-sheet-bg: var(--ngxsmk-color-surface-elevated);
107
+ --ngxsmk-sheet-backdrop: var(--ngxsmk-color-backdrop);
108
+ --ngxsmk-sheet-width: 24rem;
109
+ --ngxsmk-lightbox-backdrop: rgb(0 0 0 / 0.9);
110
+ --ngxsmk-lightbox-fg: #ffffff;
111
+ --ngxsmk-lightbox-control-bg: rgb(255 255 255 / 0.12);
112
+ --ngxsmk-lightbox-control-bg-hover: rgb(255 255 255 / 0.22);
113
+ --ngxsmk-toast-radius: var(--ngxsmk-radius-lg);
114
+ --ngxsmk-toast-shadow: var(--ngxsmk-shadow-lg);
115
+ --ngxsmk-toast-bg: var(--ngxsmk-color-surface-elevated);
116
+ --ngxsmk-toast-accent-width: 3px;
117
+ --ngxsmk-table-border: var(--ngxsmk-color-outline);
118
+ --ngxsmk-table-header-bg: color-mix(in srgb, var(--ngxsmk-color-surface-variant) 55%, transparent);
119
+ --ngxsmk-table-row-hover: var(--ngxsmk-color-surface-hover);
120
+ --ngxsmk-table-stripe: color-mix(in srgb, var(--ngxsmk-color-surface-variant) 35%, transparent);
121
+ --ngxsmk-table-drop-indicator: inset 2px 0 0 var(--ngxsmk-color-primary);
122
+ --ngxsmk-table-cell-padding: 0.625rem 0.75rem;
123
+ --ngxsmk-tabs-indicator: 2px;
124
+ --ngxsmk-tabs-radius: var(--ngxsmk-radius-md);
125
+ --ngxsmk-tabs-gap: var(--ngxsmk-space-1);
126
+ --ngxsmk-select-bg: var(--ngxsmk-color-surface);
127
+ --ngxsmk-select-border: var(--ngxsmk-color-outline-strong);
128
+ --ngxsmk-select-radius: var(--ngxsmk-radius-base);
129
+ --ngxsmk-select-list-shadow: var(--ngxsmk-shadow-lg);
130
+ --ngxsmk-select-list-radius: var(--ngxsmk-radius-lg);
131
+ --ngxsmk-menu-bg: var(--ngxsmk-color-surface-elevated);
132
+ --ngxsmk-menu-radius: var(--ngxsmk-radius-lg);
133
+ --ngxsmk-menu-shadow: var(--ngxsmk-shadow-lg);
134
+ --ngxsmk-menu-border: var(--ngxsmk-color-outline);
135
+ --ngxsmk-menu-item-radius: var(--ngxsmk-radius-md);
136
+ --ngxsmk-pagination-size: 2.25rem;
137
+ --ngxsmk-pagination-radius: var(--ngxsmk-radius-md);
138
+ --ngxsmk-form-field-gap: var(--ngxsmk-space-1-5);
139
+ --ngxsmk-form-field-label-weight: 500;
140
+ --ngxsmk-radio-size: 1.125rem;
141
+ --ngxsmk-radio-dot-size: 0.5rem;
142
+ --ngxsmk-radio-border: var(--ngxsmk-color-outline-strong);
143
+ --ngxsmk-data-table-border: var(--ngxsmk-color-outline);
144
+ --ngxsmk-data-table-radius: var(--ngxsmk-radius-md);
145
+ --ngxsmk-data-table-filter-bg: color-mix(in srgb, var(--ngxsmk-color-surface-variant) 40%, transparent);
146
+ --ngxsmk-data-table-filter-label-size: 0.7rem;
147
+ --ngxsmk-data-table-page-size: 2rem;
148
+ --ngxsmk-data-table-loading-height: 3px;
149
+ --ngxsmk-ai-chat-radius: var(--ngxsmk-radius-xl);
150
+ --ngxsmk-ai-chat-border: var(--ngxsmk-color-outline);
151
+ --ngxsmk-ai-chat-bg: var(--ngxsmk-color-surface);
152
+ --ngxsmk-ai-chat-header-bg: var(--ngxsmk-color-surface-variant);
153
+ --ngxsmk-ai-chat-bubble-bg: var(--ngxsmk-color-surface-variant);
154
+ --ngxsmk-ai-chat-bubble-user-bg: var(--ngxsmk-color-primary);
155
+ --ngxsmk-ai-chat-bubble-radius: var(--ngxsmk-radius-lg);
156
+ --ngxsmk-ai-chat-composer-radius: var(--ngxsmk-radius-full);
157
+ --ngxsmk-prompt-radius: var(--ngxsmk-radius-xl);
158
+ --ngxsmk-prompt-border: var(--ngxsmk-color-outline-strong);
159
+ --ngxsmk-prompt-shadow: var(--ngxsmk-shadow-sm);
160
+ --ngxsmk-prompt-bg: var(--ngxsmk-color-surface);
161
+ --ngxsmk-prompt-send-radius: var(--ngxsmk-radius-full);
162
+ --ngxsmk-chat-bubble-radius: var(--ngxsmk-radius-lg);
163
+ --ngxsmk-chat-bubble-bg: var(--ngxsmk-color-surface-container);
164
+ --ngxsmk-chat-bubble-user-bg: var(--ngxsmk-color-primary-container);
165
+ --ngxsmk-chat-bubble-padding: var(--ngxsmk-space-2) var(--ngxsmk-space-3);
75
166
  --ngxsmk-spreadsheet-bg: var(--ngxsmk-color-surface);
76
167
  --ngxsmk-spreadsheet-header-bg: var(--ngxsmk-color-surface-variant);
77
168
  --ngxsmk-spreadsheet-header-color: var(--ngxsmk-color-on-surface-variant);
@@ -100,15 +191,19 @@
100
191
  --ngxsmk-input-group-radius: var(--ngxsmk-radius-md);
101
192
  --ngxsmk-input-group-shadow: none;
102
193
  --ngxsmk-input-group-focus-border: var(--ngxsmk-color-primary);
103
- --ngxsmk-input-group-focus-shadow: 0 0 0 3px color-mix(in srgb, var(--ngxsmk-color-primary) 15%, transparent);
194
+ --ngxsmk-input-group-focus-shadow: var(--ngxsmk-focus-ring);
104
195
  --ngxsmk-input-group-error-border: var(--ngxsmk-color-error);
105
- --ngxsmk-input-group-error-focus-shadow: 0 0 0 3px color-mix(in srgb, var(--ngxsmk-color-error) 15%, transparent);
196
+ --ngxsmk-input-group-error-focus-shadow: var(--ngxsmk-focus-ring-error);
106
197
  --ngxsmk-input-group-success-border: var(--ngxsmk-color-success);
107
198
  --ngxsmk-input-group-warning-border: var(--ngxsmk-color-warning);
108
- --ngxsmk-input-group-height: 2.5rem;
199
+ --ngxsmk-input-group-height: var(--ngxsmk-control-height);
109
200
  --ngxsmk-input-group-padding: 0.75rem;
110
201
  --ngxsmk-input-group-gap: var(--ngxsmk-space-2);
111
202
  --ngxsmk-input-group-font: var(--ngxsmk-font-sans);
203
+ --ngxsmk-heatmap-level-1: color-mix(in srgb, var(--ngxsmk-color-success) 28%, var(--ngxsmk-color-surface-variant));
204
+ --ngxsmk-heatmap-level-2: color-mix(in srgb, var(--ngxsmk-color-success) 52%, var(--ngxsmk-color-surface-variant));
205
+ --ngxsmk-heatmap-level-3: color-mix(in srgb, var(--ngxsmk-color-success) 76%, var(--ngxsmk-color-surface-variant));
206
+ --ngxsmk-heatmap-level-4: var(--ngxsmk-color-success);
112
207
  --ngxsmk-control-height-sm: 2rem;
113
208
  --ngxsmk-control-height-md: 2.5rem;
114
209
  --ngxsmk-control-height-lg: 3rem;
@@ -384,3 +479,369 @@
384
479
  --ngxsmk-duration-slow: 0ms;
385
480
  --ngxsmk-duration-slower: 0ms;
386
481
  }
482
+
483
+ /* ==========================================================================
484
+ Component styles for directive-based primitives (button, input).
485
+ Source: packages/core/styles/*.css — regenerate with `npm run theme:css`.
486
+ ========================================================================== */
487
+
488
+ /* ---- @ngxsmk/core/styles/button.css ---- */
489
+ .ngxsmk-button {
490
+ --_bg: var(--ngxsmk-button-bg, var(--ngxsmk-color-primary));
491
+ --_fg: var(--ngxsmk-button-color, var(--ngxsmk-color-on-primary));
492
+ --_radius: var(--ngxsmk-button-radius, var(--ngxsmk-radius-base));
493
+
494
+ display: inline-flex;
495
+ align-items: center;
496
+ justify-content: center;
497
+ gap: var(--ngxsmk-button-gap, var(--ngxsmk-space-2));
498
+ border: var(--ngxsmk-button-border-width, 1px) solid transparent;
499
+ border-radius: var(--_radius);
500
+ background: var(--_bg);
501
+ color: var(--_fg);
502
+ font-family: var(--ngxsmk-button-font-family, var(--ngxsmk-font-sans));
503
+ font-size: var(--ngxsmk-text-label-lg-size);
504
+ font-weight: var(--ngxsmk-button-font-weight, 500);
505
+ line-height: var(--ngxsmk-text-label-lg-line);
506
+ cursor: pointer;
507
+ user-select: none;
508
+ text-decoration: none;
509
+ white-space: nowrap;
510
+ touch-action: manipulation;
511
+ -webkit-tap-highlight-color: transparent;
512
+ transition:
513
+ background-color var(--ngxsmk-duration-fast) var(--ngxsmk-ease-out),
514
+ border-color var(--ngxsmk-duration-fast) var(--ngxsmk-ease-out),
515
+ color var(--ngxsmk-duration-fast) var(--ngxsmk-ease-out),
516
+ transform var(--ngxsmk-duration-fast) var(--ngxsmk-ease-out);
517
+ }
518
+
519
+ .ngxsmk-button:focus-visible {
520
+ outline: none;
521
+ box-shadow: var(--ngxsmk-focus-ring);
522
+ }
523
+
524
+ .ngxsmk-button:focus {
525
+ outline: none;
526
+ }
527
+
528
+ .ngxsmk-button[disabled] {
529
+ opacity: var(--ngxsmk-button-disabled-opacity, 0.5);
530
+ pointer-events: none;
531
+ }
532
+
533
+ .ngxsmk-button[data-size='sm'] {
534
+ min-height: var(--ngxsmk-control-height-sm, 2rem);
535
+ padding: 0 var(--ngxsmk-space-3);
536
+ font-size: var(--ngxsmk-text-label-md-size);
537
+ }
538
+
539
+ .ngxsmk-button[data-size='md'] {
540
+ min-height: var(--ngxsmk-control-height-md, 2.5rem);
541
+ padding: 0 var(--ngxsmk-space-4);
542
+ font-size: var(--ngxsmk-text-label-lg-size);
543
+ }
544
+
545
+ .ngxsmk-button[data-size='lg'] {
546
+ min-height: var(--ngxsmk-control-height-lg, 3rem);
547
+ padding: 0 var(--ngxsmk-space-6);
548
+ font-size: var(--ngxsmk-text-body-lg-size);
549
+ }
550
+
551
+ .ngxsmk-button[data-icon-only][data-size='sm'] {
552
+ width: var(--ngxsmk-control-height-sm, 2rem);
553
+ min-width: var(--ngxsmk-control-height-sm, 2rem);
554
+ padding: 0;
555
+ }
556
+ .ngxsmk-button[data-icon-only][data-size='md'] {
557
+ width: var(--ngxsmk-control-height-md, 2.5rem);
558
+ min-width: var(--ngxsmk-control-height-md, 2.5rem);
559
+ padding: 0;
560
+ }
561
+ .ngxsmk-button[data-icon-only][data-size='lg'] {
562
+ width: var(--ngxsmk-control-height-lg, 3rem);
563
+ min-width: var(--ngxsmk-control-height-lg, 3rem);
564
+ padding: 0;
565
+ }
566
+
567
+ .ngxsmk-button[data-variant='primary']:hover {
568
+ background: var(--ngxsmk-color-primary-hover);
569
+ transform: var(--ngxsmk-hover-lift);
570
+ }
571
+ .ngxsmk-button[data-variant='primary']:active {
572
+ background: var(--ngxsmk-color-primary-active);
573
+ transform: var(--ngxsmk-press-scale);
574
+ }
575
+
576
+ .ngxsmk-button[data-variant='secondary'] {
577
+ background: var(--ngxsmk-color-surface-variant);
578
+ color: var(--ngxsmk-color-on-surface);
579
+ }
580
+ .ngxsmk-button[data-variant='secondary']:hover {
581
+ background: var(--ngxsmk-color-outline-strong);
582
+ transform: var(--ngxsmk-hover-lift);
583
+ }
584
+ .ngxsmk-button[data-variant='secondary']:active {
585
+ transform: var(--ngxsmk-press-scale);
586
+ }
587
+
588
+ .ngxsmk-button[data-variant='outline'] {
589
+ background: transparent;
590
+ border-color: var(--ngxsmk-color-outline-strong);
591
+ color: var(--ngxsmk-color-on-surface);
592
+ }
593
+ .ngxsmk-button[data-variant='outline']:hover {
594
+ background: var(--ngxsmk-color-surface-hover);
595
+ transform: var(--ngxsmk-hover-lift);
596
+ }
597
+ .ngxsmk-button[data-variant='outline']:active {
598
+ transform: var(--ngxsmk-press-scale);
599
+ }
600
+
601
+ .ngxsmk-button[data-variant='ghost'] {
602
+ background: transparent;
603
+ color: var(--ngxsmk-color-on-surface);
604
+ }
605
+ .ngxsmk-button[data-variant='ghost']:hover {
606
+ background: var(--ngxsmk-color-surface-hover);
607
+ transform: var(--ngxsmk-hover-lift);
608
+ }
609
+ .ngxsmk-button[data-variant='ghost']:active {
610
+ transform: var(--ngxsmk-press-scale);
611
+ }
612
+
613
+ .ngxsmk-button[data-variant='destructive'] {
614
+ background: var(--ngxsmk-color-error);
615
+ color: var(--ngxsmk-color-on-error);
616
+ }
617
+ .ngxsmk-button[data-variant='destructive']:hover {
618
+ background: color-mix(in srgb, var(--ngxsmk-color-error) 88%, black);
619
+ transform: var(--ngxsmk-hover-lift);
620
+ }
621
+ .ngxsmk-button[data-variant='destructive']:active {
622
+ transform: var(--ngxsmk-press-scale);
623
+ }
624
+
625
+ .ngxsmk-button[data-variant='link'] {
626
+ min-height: auto;
627
+ background: transparent;
628
+ color: var(--ngxsmk-color-primary);
629
+ padding: 0;
630
+ border-color: transparent;
631
+ }
632
+ .ngxsmk-button[data-variant='link']:hover {
633
+ text-decoration: underline;
634
+ transform: none;
635
+ }
636
+ .ngxsmk-button[data-variant='link']:active {
637
+ transform: none;
638
+ }
639
+
640
+ .ngxsmk-button__spinner {
641
+ width: 1em;
642
+ height: 1em;
643
+ border: 2px solid currentColor;
644
+ border-right-color: transparent;
645
+ border-radius: var(--ngxsmk-radius-full);
646
+ animation: ngxsmk-button-spin 0.6s linear infinite;
647
+ }
648
+
649
+ @keyframes ngxsmk-button-spin {
650
+ to {
651
+ transform: rotate(360deg);
652
+ }
653
+ }
654
+
655
+ /* FAB Styles */
656
+ .ngxsmk-fab {
657
+ display: inline-flex;
658
+ align-items: center;
659
+ justify-content: center;
660
+ border-radius: var(--ngxsmk-radius-full);
661
+ border: none;
662
+ cursor: pointer;
663
+ font-family: var(--ngxsmk-font-sans);
664
+ font-weight: 500;
665
+ box-shadow: var(--ngxsmk-shadow-lg);
666
+ transition:
667
+ transform var(--ngxsmk-motion-duration) var(--ngxsmk-motion-ease),
668
+ box-shadow var(--ngxsmk-motion-duration) var(--ngxsmk-motion-ease),
669
+ background-color var(--ngxsmk-motion-duration) var(--ngxsmk-motion-ease),
670
+ color var(--ngxsmk-motion-duration) var(--ngxsmk-motion-ease);
671
+ box-sizing: border-box;
672
+ text-decoration: none;
673
+ }
674
+
675
+ .ngxsmk-fab:focus {
676
+ outline: none;
677
+ }
678
+ .ngxsmk-fab:focus-visible {
679
+ outline: none;
680
+ box-shadow: var(--ngxsmk-shadow-lg), var(--ngxsmk-focus-ring);
681
+ }
682
+
683
+ .ngxsmk-fab[data-size='sm'] {
684
+ width: 2.5rem;
685
+ height: 2.5rem;
686
+ }
687
+ .ngxsmk-fab[data-size='md'] {
688
+ width: 3.5rem;
689
+ height: 3.5rem;
690
+ }
691
+ .ngxsmk-fab[data-size='lg'] {
692
+ width: 4.5rem;
693
+ height: 4.5rem;
694
+ }
695
+
696
+ .ngxsmk-fab[data-extended] {
697
+ width: auto;
698
+ padding: 0 var(--ngxsmk-space-4);
699
+ gap: var(--ngxsmk-space-2);
700
+ }
701
+ .ngxsmk-fab[data-extended][data-size='sm'] {
702
+ height: 2.5rem;
703
+ }
704
+ .ngxsmk-fab[data-extended][data-size='md'] {
705
+ height: 3.5rem;
706
+ }
707
+ .ngxsmk-fab[data-extended][data-size='lg'] {
708
+ height: 4.5rem;
709
+ }
710
+
711
+ .ngxsmk-fab[data-variant='primary'] {
712
+ background: var(--ngxsmk-color-primary);
713
+ color: var(--ngxsmk-color-on-primary);
714
+ }
715
+ .ngxsmk-fab[data-variant='primary']:hover {
716
+ background: var(--ngxsmk-color-primary-hover);
717
+ transform: var(--ngxsmk-hover-lift);
718
+ }
719
+ .ngxsmk-fab[data-variant='primary']:active {
720
+ background: var(--ngxsmk-color-primary-active);
721
+ transform: var(--ngxsmk-press-scale);
722
+ }
723
+
724
+ .ngxsmk-fab[data-variant='secondary'] {
725
+ background: var(--ngxsmk-color-secondary);
726
+ color: var(--ngxsmk-color-on-secondary);
727
+ }
728
+ .ngxsmk-fab[data-variant='secondary']:hover {
729
+ background: var(--ngxsmk-color-secondary-hover);
730
+ transform: var(--ngxsmk-hover-lift);
731
+ }
732
+ .ngxsmk-fab[data-variant='secondary']:active {
733
+ background: var(--ngxsmk-color-secondary-active);
734
+ transform: var(--ngxsmk-press-scale);
735
+ }
736
+
737
+ .ngxsmk-fab[data-position] {
738
+ position: fixed;
739
+ z-index: var(--ngxsmk-z-popover, 1500);
740
+ }
741
+ .ngxsmk-fab[data-position='bottom-right'] {
742
+ bottom: calc(
743
+ var(--ngxsmk-space-6) + var(--ngxsmk-safe-area-bottom, env(safe-area-inset-bottom, 0px))
744
+ );
745
+ right: calc(
746
+ var(--ngxsmk-space-6) + var(--ngxsmk-safe-area-right, env(safe-area-inset-right, 0px))
747
+ );
748
+ }
749
+ .ngxsmk-fab[data-position='bottom-left'] {
750
+ bottom: calc(
751
+ var(--ngxsmk-space-6) + var(--ngxsmk-safe-area-bottom, env(safe-area-inset-bottom, 0px))
752
+ );
753
+ left: calc(var(--ngxsmk-space-6) + var(--ngxsmk-safe-area-left, env(safe-area-inset-left, 0px)));
754
+ }
755
+ .ngxsmk-fab[data-position='top-right'] {
756
+ top: calc(var(--ngxsmk-space-6) + var(--ngxsmk-safe-area-top, env(safe-area-inset-top, 0px)));
757
+ right: calc(
758
+ var(--ngxsmk-space-6) + var(--ngxsmk-safe-area-right, env(safe-area-inset-right, 0px))
759
+ );
760
+ }
761
+ .ngxsmk-fab[data-position='top-left'] {
762
+ top: calc(var(--ngxsmk-space-6) + var(--ngxsmk-safe-area-top, env(safe-area-inset-top, 0px)));
763
+ left: calc(var(--ngxsmk-space-6) + var(--ngxsmk-safe-area-left, env(safe-area-inset-left, 0px)));
764
+ }
765
+
766
+ .ngxsmk-fab[disabled] {
767
+ opacity: 0.6;
768
+ pointer-events: none;
769
+ box-shadow: none;
770
+ }
771
+
772
+ /* ---- @ngxsmk/core/styles/input.css ---- */
773
+ input[ngxsmkInput],
774
+ textarea[ngxsmkInput] {
775
+ display: block;
776
+ width: 100%;
777
+ box-sizing: border-box;
778
+ border: 1px solid var(--ngxsmk-input-border, var(--ngxsmk-color-outline-strong));
779
+ border-radius: var(--ngxsmk-input-radius, var(--ngxsmk-radius-base));
780
+ background: var(--ngxsmk-input-bg, var(--ngxsmk-color-surface));
781
+ color: var(--ngxsmk-input-color, var(--ngxsmk-color-on-surface));
782
+ font-family: var(--ngxsmk-font-sans);
783
+ font-size: var(--ngxsmk-text-body-md-size);
784
+ line-height: var(--ngxsmk-text-body-md-line);
785
+ touch-action: manipulation;
786
+ -webkit-tap-highlight-color: transparent;
787
+ transition:
788
+ border-color var(--ngxsmk-duration-fast) var(--ngxsmk-ease-out),
789
+ box-shadow var(--ngxsmk-duration-fast) var(--ngxsmk-ease-out),
790
+ background-color var(--ngxsmk-duration-fast) var(--ngxsmk-ease-out);
791
+ outline: none;
792
+ }
793
+
794
+ @media (max-width: 640px) {
795
+ input[ngxsmkInput],
796
+ textarea[ngxsmkInput] {
797
+ font-size: 16px;
798
+ }
799
+ }
800
+
801
+ input[ngxsmkInput] {
802
+ height: var(--ngxsmk-input-height, var(--ngxsmk-control-height));
803
+ padding: 0 var(--ngxsmk-input-padding-inline, var(--ngxsmk-space-3));
804
+ }
805
+
806
+ textarea[ngxsmkInput] {
807
+ min-height: 5rem;
808
+ padding: var(--ngxsmk-space-2) var(--ngxsmk-input-padding-inline, var(--ngxsmk-space-3));
809
+ resize: vertical;
810
+ }
811
+
812
+ input[ngxsmkInput]:hover:not(:disabled):not([aria-invalid='true']),
813
+ textarea[ngxsmkInput]:hover:not(:disabled):not([aria-invalid='true']) {
814
+ border-color: var(--ngxsmk-color-ring);
815
+ }
816
+
817
+ input[ngxsmkInput]:focus,
818
+ textarea[ngxsmkInput]:focus {
819
+ border-color: var(--ngxsmk-color-ring);
820
+ box-shadow: var(--ngxsmk-focus-ring);
821
+ }
822
+
823
+ input[ngxsmkInput][aria-invalid='true'],
824
+ textarea[ngxsmkInput][aria-invalid='true'],
825
+ input[ngxsmkInput].ng-invalid.ng-touched,
826
+ textarea[ngxsmkInput].ng-invalid.ng-touched {
827
+ border-color: var(--ngxsmk-color-error);
828
+ }
829
+
830
+ input[ngxsmkInput][aria-invalid='true']:focus,
831
+ textarea[ngxsmkInput][aria-invalid='true']:focus,
832
+ input[ngxsmkInput].ng-invalid.ng-touched:focus,
833
+ textarea[ngxsmkInput].ng-invalid.ng-touched:focus {
834
+ box-shadow: var(--ngxsmk-focus-ring-error);
835
+ }
836
+
837
+ input[ngxsmkInput]:disabled,
838
+ textarea[ngxsmkInput]:disabled {
839
+ opacity: var(--ngxsmk-opacity-disabled);
840
+ cursor: not-allowed;
841
+ background: var(--ngxsmk-color-surface-variant);
842
+ }
843
+
844
+ input[ngxsmkInput]::placeholder,
845
+ textarea[ngxsmkInput]::placeholder {
846
+ color: var(--ngxsmk-input-placeholder, var(--ngxsmk-color-on-surface-variant));
847
+ }