@kingsimba/nc-ui 0.1.0 → 0.1.2

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/dist/styles.css CHANGED
@@ -2,10 +2,11 @@
2
2
  color-scheme: dark;
3
3
 
4
4
  /* Core colors */
5
- --nc-bg: #151b23;
5
+ --nc-bg: #171e27;
6
6
  --nc-bg-secondary: #1a2332;
7
7
  --nc-bg-tertiary: #232d3d;
8
8
  --nc-bg-quaternary: #2c3847;
9
+ --nc-bg-text: var(--nc-bg);
9
10
  --nc-muted: #7a8a9a;
10
11
  --nc-text: #e8eef6;
11
12
  --nc-text-weak: #6b7280;
@@ -18,7 +19,7 @@
18
19
  /* UI element colors */
19
20
  --nc-border: #1f2937;
20
21
  --nc-button-border: #223042;
21
- --nc-button-bg: #0f1722;
22
+ --nc-button-bg: var(--nc-bg-tertiary);
22
23
  --nc-button-hover: #162332;
23
24
  --nc-button-active: #1d2e42;
24
25
  --nc-overlay-hover: rgba(255, 255, 255, 0.05);
@@ -37,10 +38,11 @@
37
38
  color-scheme: light;
38
39
 
39
40
  /* Core colors */
40
- --nc-bg: #f1f5f9;
41
- --nc-bg-secondary: #ffffff;
42
- --nc-bg-tertiary: #f1f5f9;
43
- --nc-bg-quaternary: #e2e8f0;
41
+ --nc-bg: #dde5ef;
42
+ --nc-bg-secondary: #e8eef5;
43
+ --nc-bg-tertiary: #f8fafc;
44
+ --nc-bg-quaternary: #ffffff;
45
+ --nc-bg-text: var(--nc-bg-quaternary);
44
46
  --nc-muted: #64748b;
45
47
  --nc-text: #1e293b;
46
48
  --nc-text-weak: #64748b;
@@ -53,7 +55,7 @@
53
55
  /* UI element colors */
54
56
  --nc-border: #e2e8f0;
55
57
  --nc-button-border: #cbd5e1;
56
- --nc-button-bg: #f8fafc;
58
+ --nc-button-bg: var(--nc-bg-tertiary);
57
59
  --nc-button-hover: #f1f5f9;
58
60
  --nc-button-active: #e2e8f0;
59
61
  --nc-overlay-hover: rgba(0, 0, 0, 0.05);
@@ -67,6 +69,112 @@
67
69
  --nc-code-comment: #008000;
68
70
  }
69
71
 
72
+ /* ===== REUSABLE PUBLIC STYLES ===== */
73
+
74
+ /* Typography - Headings */
75
+ h1, .h1 { font-size: 2rem; font-weight: 700; color: var(--nc-text); margin: 0.5em 0 0.5em 0; line-height: 1.2; }
76
+ h1:first-child, .h1:first-child { margin-top: 0; }
77
+ h2, .h2 { font-size: 1.5rem; font-weight: 600; color: var(--nc-text); margin: 0.5em 0 0.5em 0; line-height: 1.3; }
78
+ h2:first-child, .h2:first-child { margin-top: 0; }
79
+ h3, .h3 { font-size: 1.25rem; font-weight: 600; color: var(--nc-text); margin: 0.4em 0 0.4em 0; line-height: 1.4; }
80
+ h3:first-child, .h3:first-child { margin-top: 0; }
81
+ h4, .h4 { font-size: 1rem; font-weight: 600; color: var(--nc-text); margin: 0.4em 0 0.4em 0; line-height: 1.4; }
82
+ h4:first-child, .h4:first-child { margin-top: 0; }
83
+
84
+ /* Text colors */
85
+ p.weak { color: var(--nc-text-weak); }
86
+ p.weaker { color: var(--nc-text-weaker); }
87
+
88
+ /* Inline code */
89
+ code, .code {
90
+ font-family: 'SF Mono', 'Menlo', 'Monaco', 'Consolas', monospace;
91
+ font-size: 0.875em;
92
+ padding: 2px 6px;
93
+ border-radius: 4px;
94
+ background: var(--nc-bg-tertiary);
95
+ color: var(--nc-text);
96
+ border: 1px solid var(--nc-border);
97
+ }
98
+
99
+ /* Code block */
100
+ .code-block {
101
+ font-family: 'SF Mono', 'Menlo', 'Monaco', 'Consolas', monospace;
102
+ font-size: 13px;
103
+ padding: 16px;
104
+ border-radius: 8px;
105
+ background: var(--nc-bg-tertiary);
106
+ color: var(--nc-text);
107
+ border: 1px solid var(--nc-border);
108
+ overflow-x: auto;
109
+ white-space: pre;
110
+ line-height: 1.5;
111
+ }
112
+
113
+ /* Tags */
114
+ .tag {
115
+ display: inline-flex;
116
+ align-items: center;
117
+ padding: 4px 10px;
118
+ border-radius: 9999px;
119
+ font-size: 12px;
120
+ font-weight: 500;
121
+ background: var(--nc-bg-tertiary);
122
+ color: var(--nc-text);
123
+ border: 1px solid var(--nc-border);
124
+ }
125
+
126
+ .tag.red { background: rgba(239, 68, 68, 0.15); color: #f87171; border-color: rgba(239, 68, 68, 0.3); }
127
+ .tag.yellow { background: rgba(245, 158, 11, 0.15); color: #fbbf24; border-color: rgba(245, 158, 11, 0.3); }
128
+ .tag.green { background: rgba(34, 197, 94, 0.15); color: #4ade80; border-color: rgba(34, 197, 94, 0.3); }
129
+ .tag.blue { background: rgba(59, 130, 246, 0.15); color: #60a5fa; border-color: rgba(59, 130, 246, 0.3); }
130
+
131
+ /* Light theme tag adjustments */
132
+ :root.light .tag.red { color: #dc2626; }
133
+ :root.light .tag.yellow { color: #d97706; }
134
+ :root.light .tag.green { color: #16a34a; }
135
+ :root.light .tag.blue { color: #2563eb; }
136
+
137
+ /* Block container */
138
+ .block {
139
+ padding: 16px;
140
+ border-radius: 8px;
141
+ background: var(--nc-bg-quaternary);
142
+ border: 1px solid var(--nc-border);
143
+ margin: 16px 0;
144
+ position: relative;
145
+ }
146
+
147
+ .block.icon { padding-left: 44px; }
148
+
149
+ .block.icon::before {
150
+ position: absolute;
151
+ left: 14px;
152
+ top: 16px;
153
+ font-size: 18px;
154
+ line-height: 1;
155
+ }
156
+
157
+ .block.note { background: rgba(59, 130, 246, 0.1); border-color: rgba(59, 130, 246, 0.3); }
158
+ .block.note.icon::before { content: "ℹ️"; }
159
+
160
+ .block.warning { background: rgba(245, 158, 11, 0.1); border-color: rgba(245, 158, 11, 0.3); }
161
+ .block.warning.icon::before { content: "⚠️"; }
162
+
163
+ .block.danger { background: rgba(239, 68, 68, 0.1); border-color: rgba(239, 68, 68, 0.3); }
164
+ .block.danger.icon::before { content: "🚨"; }
165
+
166
+ .block.dashed { border-style: dashed; border-width: 2px; }
167
+
168
+ /* Paragraph */
169
+ p { margin: 0.5em 0; color: var(--nc-text); }
170
+ p:first-child { margin-top: 0; }
171
+
172
+ /* Lists */
173
+ ul, ol { margin: 0.5em 0; padding-left: 1.5em; color: var(--nc-text); }
174
+ ul.no-dots { list-style-type: none; padding-left: 0; }
175
+ li { margin: 0.75em 0; }
176
+ li::marker { color: var(--nc-text-weak); }
177
+
70
178
  /* Button component */
71
179
  .nc-button {
72
180
  padding: 9px 14px;
@@ -109,7 +217,7 @@
109
217
  .nc-button.nc-ghost:active { background: var(--nc-button-active); transform: scale(0.97); }
110
218
 
111
219
  .nc-button.nc-small { padding: 2px 10px; font-size: 12px; margin: 0; border-radius: 6px; height: 32px; }
112
- .nc-button.nc-large { padding: 12px 14px; font-size: 16px; min-height: 60px; font-weight: bold; }
220
+ .nc-button.nc-large { padding: 10px 24px; font-size: 16px; min-height: 60px; font-weight: bold; }
113
221
  .nc-button.nc-text-selectable { user-select: text; -webkit-user-select: text; text-transform: none; }
114
222
 
115
223
  /* Disabled state */
@@ -122,16 +230,21 @@
122
230
 
123
231
  /* Activity Indicator */
124
232
  .nc-activity-indicator {
125
- border: 2px solid transparent;
126
- border-top-color: var(--nc-primary);
127
- border-radius: 50%;
128
- animation: nc-spin 0.8s linear infinite;
233
+ animation: nc-spin 2s linear infinite;
129
234
  box-sizing: border-box;
235
+ color: var(--nc-primary);
130
236
  }
131
237
 
132
- .nc-activity-indicator.nc-small { width: 16px; height: 16px; border-width: 2px; }
133
- .nc-activity-indicator.nc-default { width: 24px; height: 24px; border-width: 2.5px; }
134
- .nc-activity-indicator.nc-large { width: 32px; height: 32px; border-width: 3px; }
238
+ .nc-activity-indicator.nc-small { width: 16px; height: 16px; }
239
+ .nc-activity-indicator.nc-default { width: 24px; height: 24px; }
240
+ .nc-activity-indicator.nc-large { width: 32px; height: 32px; }
241
+
242
+ .nc-activity-indicator-circle {
243
+ stroke: currentColor;
244
+ stroke-dasharray: 1, 150;
245
+ stroke-dashoffset: 0;
246
+ animation: nc-dash 1.5s ease-in-out infinite;
247
+ }
135
248
 
136
249
  /* Overlay mode - covers parent element (parent must have position: relative) */
137
250
  .nc-activity-indicator-overlay {
@@ -152,6 +265,21 @@
152
265
  }
153
266
  }
154
267
 
268
+ @keyframes nc-dash {
269
+ 0% {
270
+ stroke-dasharray: 1, 150;
271
+ stroke-dashoffset: 0;
272
+ }
273
+ 50% {
274
+ stroke-dasharray: 90, 150;
275
+ stroke-dashoffset: -35;
276
+ }
277
+ 100% {
278
+ stroke-dasharray: 90, 150;
279
+ stroke-dashoffset: -124;
280
+ }
281
+ }
282
+
155
283
  /* Input component */
156
284
  .nc-input {
157
285
  background: var(--nc-button-bg);
@@ -500,7 +628,8 @@ input[type="number"] { -moz-appearance: textfield; appearance: textfield; }
500
628
  .nc-slider:disabled::-moz-range-thumb { cursor: not-allowed; }
501
629
 
502
630
  /* ListGroup component */
503
- .nc-list-group { margin-bottom: 0; }
631
+ .nc-list-group { margin-bottom: 0; margin-top: 16px; }
632
+ .nc-list-group:first-child { margin-top: 0; }
504
633
  .nc-list-group:last-child { margin-bottom: 16px; }
505
634
 
506
635
  .nc-list-group-title {
@@ -517,7 +646,7 @@ input[type="number"] { -moz-appearance: textfield; appearance: textfield; }
517
646
  }
518
647
 
519
648
  .nc-list-group-content {
520
- background: var(--nc-button-bg);
649
+ background: var(--nc-bg-tertiary);
521
650
  border: 1px solid var(--nc-border);
522
651
  border-radius: 8px;
523
652
  overflow: hidden;
@@ -541,7 +670,39 @@ input[type="number"] { -moz-appearance: textfield; appearance: textfield; }
541
670
  .nc-list-group-title-tools { display: flex; gap: 8px; }
542
671
 
543
672
  /* Tabs component */
544
- .nc-tab-container { border-bottom: 1px solid var(--nc-border); }
673
+ .nc-tab-container {
674
+ position: relative;
675
+ display: flex;
676
+ align-items: center;
677
+ border-bottom: 1px solid var(--nc-border);
678
+ background: var(--nc-bg-secondary);
679
+ }
680
+
681
+ .nc-tab-scroll-wrapper {
682
+ position: relative;
683
+ display: flex;
684
+ flex: 1;
685
+ min-width: 0;
686
+ overflow: hidden;
687
+ }
688
+
689
+ .nc-tab-scroll {
690
+ display: flex;
691
+ align-items: center;
692
+ overflow-x: auto;
693
+ overflow-y: hidden;
694
+ scrollbar-width: none;
695
+ -ms-overflow-style: none;
696
+ flex: 1;
697
+ min-width: 0;
698
+ }
699
+
700
+ .nc-tab-scroll::-webkit-scrollbar { display: none; }
701
+
702
+ .nc-tab-scroll.nc-multiline {
703
+ flex-wrap: wrap;
704
+ overflow-x: visible;
705
+ }
545
706
 
546
707
  .nc-tab-item {
547
708
  padding: 12px 16px;
@@ -553,11 +714,125 @@ input[type="number"] { -moz-appearance: textfield; appearance: textfield; }
553
714
  border-bottom: 2px solid transparent;
554
715
  text-transform: uppercase;
555
716
  letter-spacing: 0.5px;
717
+ white-space: nowrap;
718
+ flex-shrink: 0;
556
719
  }
557
720
 
721
+ .nc-tab-scroll.nc-multiline .nc-tab-item { flex-shrink: 1; }
722
+
558
723
  .nc-tab-item:hover { color: var(--nc-text); }
559
724
  .nc-tab-item.nc-active { color: var(--nc-primary); border-bottom-color: var(--nc-primary); }
560
725
 
726
+ .nc-tab-toolbar {
727
+ display: flex;
728
+ gap: 8px;
729
+ align-items: center;
730
+ padding: 0 12px;
731
+ flex-shrink: 0;
732
+ border-left: 1px solid var(--nc-border);
733
+ }
734
+
735
+ .nc-tab-scroll-indicator {
736
+ position: absolute;
737
+ top: 0;
738
+ bottom: 0;
739
+ width: 40px;
740
+ pointer-events: none;
741
+ z-index: 10;
742
+ display: flex;
743
+ align-items: center;
744
+ justify-content: center;
745
+ color: var(--nc-text-weak);
746
+ }
747
+
748
+ .nc-tab-scroll-indicator.nc-left {
749
+ left: 0;
750
+ background: linear-gradient(to right, var(--nc-bg-secondary) 20%, transparent);
751
+ justify-content: flex-start;
752
+ padding-left: 4px;
753
+ }
754
+
755
+ .nc-tab-scroll-indicator.nc-right {
756
+ right: 0;
757
+ background: linear-gradient(to left, var(--nc-bg-secondary) 20%, transparent);
758
+ justify-content: flex-end;
759
+ padding-right: 4px;
760
+ }
761
+
762
+ /* Vertical tabs */
763
+ .nc-tab-container.nc-vertical {
764
+ flex-direction: column;
765
+ align-items: stretch;
766
+ border-bottom: none;
767
+ }
768
+
769
+ .nc-tab-container.nc-verticalLeft {
770
+ border-right: 1px solid var(--nc-border);
771
+ }
772
+
773
+ .nc-tab-container.nc-verticalRight {
774
+ border-left: 1px solid var(--nc-border);
775
+ }
776
+
777
+ .nc-tab-container.nc-vertical .nc-tab-scroll {
778
+ flex-direction: column;
779
+ overflow-x: hidden;
780
+ overflow-y: auto;
781
+ padding: 8px;
782
+ gap: 4px;
783
+ }
784
+
785
+ .nc-tab-container.nc-vertical .nc-tab-item {
786
+ padding: 10px 12px;
787
+ font-size: 14px;
788
+ border-bottom: none;
789
+ border-radius: 4px;
790
+ text-transform: none;
791
+ letter-spacing: normal;
792
+ width: 100%;
793
+ }
794
+
795
+ .nc-tab-container.nc-verticalLeft .nc-tab-item {
796
+ text-align: left;
797
+ }
798
+
799
+ .nc-tab-container.nc-verticalRight .nc-tab-item {
800
+ text-align: right;
801
+ }
802
+
803
+ .nc-tab-container.nc-vertical .nc-tab-item:hover {
804
+ background: var(--nc-bg-tertiary);
805
+ }
806
+
807
+ .nc-tab-container.nc-vertical .nc-tab-item.nc-active {
808
+ background: var(--nc-primary);
809
+ color: white;
810
+ }
811
+
812
+ .nc-tab-container.nc-vertical .nc-tab-scroll-indicator {
813
+ left: 0;
814
+ right: 0;
815
+ width: auto;
816
+ height: 40px;
817
+ flex-direction: column;
818
+ }
819
+
820
+ .nc-tab-container.nc-vertical .nc-tab-scroll-indicator.nc-top {
821
+ top: 0;
822
+ bottom: auto;
823
+ background: linear-gradient(to bottom, var(--nc-bg-secondary) 20%, transparent);
824
+ justify-content: flex-start;
825
+ padding-top: 4px;
826
+ }
827
+
828
+ .nc-tab-container.nc-vertical .nc-tab-scroll-indicator.nc-bottom {
829
+ bottom: 0;
830
+ top: auto;
831
+ background: linear-gradient(to top, var(--nc-bg-secondary) 20%, transparent);
832
+ justify-content: flex-end;
833
+ padding-bottom: 4px;
834
+ }
835
+
561
836
  /* Toggle component */
562
837
  .nc-toggle {
563
838
  position: relative;
@@ -864,4 +1139,93 @@ input[type="number"] { -moz-appearance: textfield; appearance: textfield; }
864
1139
  .nc-token-constant { color: var(--nc-code-null) !important; }
865
1140
  .nc-token-number { color: var(--nc-code-number) !important; }
866
1141
  .nc-token-atrule { color: var(--nc-code-key) !important; }
867
- .nc-token-comment { color: var(--nc-code-comment) !important; }
1142
+ .nc-token-comment { color: var(--nc-code-comment) !important; }
1143
+
1144
+ /* ===== NOTIFICATION COMPONENT ===== */
1145
+ .nc-notification {
1146
+ min-width: 320px;
1147
+ max-width: 400px;
1148
+ background: var(--nc-bg-tertiary);
1149
+ border: 1px solid var(--nc-border);
1150
+ border-radius: 8px;
1151
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
1152
+ overflow: hidden;
1153
+ }
1154
+
1155
+ .nc-notification-content {
1156
+ display: flex;
1157
+ align-items: flex-start;
1158
+ padding: 12px 16px;
1159
+ gap: 12px;
1160
+ }
1161
+
1162
+ .nc-notification-body {
1163
+ flex: 1;
1164
+ min-width: 0;
1165
+ }
1166
+
1167
+ .nc-notification-title {
1168
+ font-weight: 600;
1169
+ font-size: 14px;
1170
+ color: var(--nc-text);
1171
+ margin-bottom: 4px;
1172
+ }
1173
+
1174
+ .nc-notification-message {
1175
+ font-size: 13px;
1176
+ color: var(--nc-text-weak);
1177
+ line-height: 1.4;
1178
+ word-wrap: break-word;
1179
+ }
1180
+
1181
+ .nc-notification-dismiss {
1182
+ flex-shrink: 0;
1183
+ background: none;
1184
+ border: none;
1185
+ padding: 4px;
1186
+ cursor: pointer;
1187
+ color: var(--nc-text-weak);
1188
+ border-radius: 4px;
1189
+ display: flex;
1190
+ align-items: center;
1191
+ justify-content: center;
1192
+ transition: background-color 150ms ease, color 150ms ease;
1193
+ }
1194
+
1195
+ .nc-notification-dismiss:hover {
1196
+ background: var(--nc-overlay-hover);
1197
+ color: var(--nc-text);
1198
+ }
1199
+
1200
+ /* Notification type variants */
1201
+ .nc-notification-success {
1202
+ border-left: 3px solid var(--nc-success);
1203
+ }
1204
+
1205
+ .nc-notification-success .nc-notification-title {
1206
+ color: var(--nc-success);
1207
+ }
1208
+
1209
+ .nc-notification-danger {
1210
+ border-left: 3px solid var(--nc-danger);
1211
+ }
1212
+
1213
+ .nc-notification-danger .nc-notification-title {
1214
+ color: var(--nc-danger);
1215
+ }
1216
+
1217
+ .nc-notification-warning {
1218
+ border-left: 3px solid var(--nc-warning);
1219
+ }
1220
+
1221
+ .nc-notification-warning .nc-notification-title {
1222
+ color: var(--nc-warning);
1223
+ }
1224
+
1225
+ .nc-notification-info {
1226
+ border-left: 3px solid var(--nc-primary);
1227
+ }
1228
+
1229
+ .nc-notification-info .nc-notification-title {
1230
+ color: var(--nc-primary);
1231
+ }