@arclux/arc-ui-html 1.4.0 → 1.5.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.
package/css/arc-ui.css CHANGED
@@ -253,7 +253,7 @@
253
253
  }
254
254
 
255
255
  /* arc-avatar */
256
- .arc-avatar { display: inline-flex; }
256
+ .arc-avatar { display: inline-flex; position: relative; }
257
257
 
258
258
  .arc-avatar .avatar {
259
259
  display: inline-flex;
@@ -290,10 +290,36 @@
290
290
  user-select: none;
291
291
  }
292
292
 
293
+ /* Shape variants */
294
+ .arc-avatar[data-shape="square"] .avatar,
295
+ .arc-avatar[data-shape="square"] .avatar__img { border-radius: var(--radius-md); }
296
+ .arc-avatar[data-shape="rounded"] .avatar,
297
+ .arc-avatar[data-shape="rounded"] .avatar__img { border-radius: var(--radius-lg); }
298
+
293
299
  .arc-avatar[data-size="sm"] .avatar__initials { font-size: var(--text-xs); }
294
300
  .arc-avatar[data-size="md"] .avatar__initials { font-size: var(--text-sm); }
295
301
  .arc-avatar[data-size="lg"] .avatar__initials { font-size: var(--text-lg); }
296
302
 
303
+ /* Status indicator */
304
+ .arc-avatar .avatar__status {
305
+ position: absolute;
306
+ bottom: 0;
307
+ right: 0;
308
+ width: 10px;
309
+ height: 10px;
310
+ border-radius: var(--radius-full);
311
+ border: 2px solid var(--bg-deep);
312
+ box-sizing: border-box;
313
+ }
314
+
315
+ .arc-avatar[data-size="sm"] .avatar__status { width: 8px; height: 8px; }
316
+ .arc-avatar[data-size="lg"] .avatar__status { width: 14px; height: 14px; border-width: 3px; }
317
+
318
+ .arc-avatar[data-status="online"] .avatar__status { background: var(--color-success); }
319
+ .arc-avatar[data-status="offline"] .avatar__status { background: var(--text-ghost); }
320
+ .arc-avatar[data-status="busy"] .avatar__status { background: var(--color-error); }
321
+ .arc-avatar[data-status="away"] .avatar__status { background: var(--color-warning); }
322
+
297
323
  @media (prefers-reduced-motion: reduce) {
298
324
  .arc-avatar *,
299
325
  .arc-avatar *::before,
@@ -369,6 +395,10 @@
369
395
  .arc-badge[data-variant="error"]:hover .badge { box-shadow: 0 0 12px rgba(var(--color-error-rgb), 0.15); }
370
396
  .arc-badge[data-variant="info"]:hover .badge { box-shadow: 0 0 12px rgba(var(--color-info-rgb), 0.15); }
371
397
 
398
+ /* Sizes */
399
+ .arc-badge[data-size="sm"] .badge { font-size: calc(var(--text-xs) - 1px); padding: 2px var(--space-xs); }
400
+ .arc-badge[data-size="lg"] .badge { font-size: var(--text-sm); padding: var(--space-sm) var(--space-md); }
401
+
372
402
  @media (prefers-reduced-motion: reduce) {
373
403
  .arc-badge *,
374
404
  .arc-badge *::before,
@@ -379,76 +409,30 @@
379
409
  }
380
410
  }
381
411
 
382
- /* arc-callout */
383
- .arc-callout { display: block; }
384
-
385
- .arc-callout .callout {
386
- display: flex;
387
- flex-direction: column;
388
- gap: var(--space-sm);
389
- padding: var(--space-md) var(--space-lg);
390
- border-radius: var(--radius-md);
391
- border: 1px solid rgba(var(--_status-rgb), 0.12);
392
- background: rgba(var(--_status-rgb), 0.04);
393
- font-family: var(--font-body);
394
- font-size: var(--text-sm);
395
- line-height: 1.7;
396
- color: var(--text-secondary);
397
- }
398
-
399
- .arc-callout .callout__header {
400
- display: flex;
401
- align-items: center;
402
- gap: var(--space-sm);
403
- }
404
-
405
- .arc-callout .callout__icon {
406
- flex-shrink: 0;
407
- display: flex;
408
- align-items: center;
409
- color: var(--_status-color);
410
- }
411
-
412
- .arc-callout .callout__label {
413
- font-family: var(--font-accent);
414
- font-size: var(--text-xs);
415
- font-weight: 600;
416
- letter-spacing: 1.5px;
417
- text-transform: uppercase;
418
- color: var(--_status-color);
419
- }
420
-
421
- .arc-callout .callout__content {
422
- min-width: 0;
423
- }
424
-
425
- @media (prefers-reduced-motion: reduce) {
426
- .arc-callout *,
427
- .arc-callout *::before,
428
- .arc-callout *::after {
429
- animation-duration: 0.01ms !important;
430
- animation-iteration-count: 1 !important;
431
- transition-duration: 0.01ms !important;
432
- }
433
- }
434
-
435
412
  /* arc-card */
436
413
  .arc-card { display: block; }
437
414
 
438
415
  .arc-card .card { height: 100%; }
439
416
 
440
- /* Suppress hover effect when no href */
441
- .arc-card:not([data-href]) .card:hover {
417
+ /* Suppress hover effect when no href and not interactive */
418
+ .arc-card(:not([href]):not([interactive])) .card:hover {
442
419
  background: var(--border-subtle);
443
420
  }
444
- .arc-card:not([data-href]) .card:hover .card__inner {
421
+ .arc-card(:not([href]):not([interactive])) .card:hover .card__inner {
445
422
  box-shadow: none;
446
423
  }
447
424
 
425
+ .arc-card[interactive] .card { cursor: pointer; }
426
+
448
427
  .arc-card .card__inner {
449
428
  padding: var(--space-xl) var(--space-lg);
450
429
  }
451
430
 
431
+ /* Padding variants */
432
+ .arc-card[data-padding="none"] .card__inner { padding: 0; }
433
+ .arc-card[data-padding="sm"] .card__inner { padding: var(--space-md) var(--space-sm); }
434
+ .arc-card[data-padding="lg"] .card__inner { padding: var(--space-2xl) var(--space-xl); }
435
+
452
436
  .arc-card .card__body {
453
437
  flex: 1;
454
438
  }
@@ -798,6 +782,33 @@
798
782
  background: linear-gradient(180deg, transparent, rgba(var(--text-primary-rgb),0.35), transparent);
799
783
  }
800
784
 
785
+ /* Labeled divider */
786
+ .arc-divider .divider--labeled {
787
+ display: flex;
788
+ align-items: center;
789
+ gap: var(--space-md);
790
+ height: auto;
791
+ background: none !important;
792
+ box-shadow: none !important;
793
+ }
794
+
795
+ .arc-divider .divider__line {
796
+ flex: 1;
797
+ height: 1px;
798
+ background: var(--gradient-divider);
799
+ }
800
+
801
+ .arc-divider .divider__label {
802
+ font-family: var(--font-accent);
803
+ font-size: var(--text-xs);
804
+ font-weight: 600;
805
+ letter-spacing: 1.5px;
806
+ text-transform: uppercase;
807
+ color: var(--text-muted);
808
+ white-space: nowrap;
809
+ flex-shrink: 0;
810
+ }
811
+
801
812
  @keyframes divider-shimmer {
802
813
  0%, 100% { background-position: 200% 0; }
803
814
  50% { background-position: -100% 0; }
@@ -1282,6 +1293,12 @@
1282
1293
  border-radius: var(--radius-md);
1283
1294
  }
1284
1295
 
1296
+ .arc-skeleton .skeleton-group {
1297
+ display: flex;
1298
+ flex-direction: column;
1299
+ gap: var(--space-sm);
1300
+ }
1301
+
1285
1302
  @media (prefers-reduced-motion: reduce) {
1286
1303
  .arc-skeleton *,
1287
1304
  .arc-skeleton *::before,
@@ -1415,6 +1432,25 @@
1415
1432
  color: var(--text-muted);
1416
1433
  }
1417
1434
 
1435
+ .arc-stat .stat__trend {
1436
+ display: inline-flex;
1437
+ align-items: center;
1438
+ gap: 4px;
1439
+ font-family: var(--font-mono);
1440
+ font-size: var(--text-sm);
1441
+ font-weight: 500;
1442
+ margin-top: var(--space-xs);
1443
+ }
1444
+
1445
+ .arc-stat[data-trend="up"] .stat__trend { color: var(--color-success); }
1446
+ .arc-stat[data-trend="down"] .stat__trend { color: var(--color-error); }
1447
+ .arc-stat[data-trend="neutral"] .stat__trend { color: var(--text-muted); }
1448
+
1449
+ .arc-stat .stat__trend-arrow {
1450
+ width: 12px;
1451
+ height: 12px;
1452
+ }
1453
+
1418
1454
  /* arc-stepper */
1419
1455
  .arc-stepper { display: block; }
1420
1456
 
@@ -1885,7 +1921,27 @@
1885
1921
 
1886
1922
  /* arc-button */
1887
1923
  .arc-button { display: inline-flex; }
1888
- .arc-button[disabled] { pointer-events: none; }
1924
+ .arc-button[disabled],
1925
+ .arc-button[loading] { pointer-events: none; }
1926
+
1927
+ .arc-button[loading] .btn { opacity: 0.7; }
1928
+
1929
+ .arc-button .btn__spinner {
1930
+ display: none;
1931
+ width: 14px;
1932
+ height: 14px;
1933
+ border: 2px solid currentColor;
1934
+ border-top-color: transparent;
1935
+ border-radius: var(--radius-full);
1936
+ animation: arc-btn-spin 600ms linear infinite;
1937
+ }
1938
+
1939
+ .arc-button[loading] .btn__spinner { display: inline-block; }
1940
+ .arc-button[loading] .btn__label { opacity: 0.6; }
1941
+
1942
+ @keyframes arc-btn-spin {
1943
+ to { transform: rotate(360deg); }
1944
+ }
1889
1945
 
1890
1946
  .arc-button .btn {
1891
1947
  display: inline-flex;
@@ -2113,6 +2169,12 @@
2113
2169
  margin-bottom: var(--space-sm);
2114
2170
  }
2115
2171
 
2172
+ /* Center alignment */
2173
+ .arc-footer[data-align="center"] .footer { text-align: center; }
2174
+ .arc-footer[data-align="center"] .footer__columns { justify-items: center; }
2175
+ .arc-footer[data-align="center"] .footer__social { justify-content: center; }
2176
+ .arc-footer[data-align="center"] .footer__legal { text-align: center; }
2177
+
2116
2178
  .arc-footer .footer__legal {
2117
2179
  padding-top: var(--space-md);
2118
2180
  border-top: 1px solid var(--border-subtle);
@@ -2145,6 +2207,15 @@
2145
2207
  text-underline-offset: 3px;
2146
2208
  }
2147
2209
 
2210
+ /* Underline variants */
2211
+ .arc-link[data-underline="always"] .link {
2212
+ text-decoration: underline;
2213
+ text-underline-offset: 3px;
2214
+ }
2215
+ .arc-link[data-underline="never"] .link:hover {
2216
+ text-decoration: none;
2217
+ }
2218
+
2148
2219
  .arc-link[data-variant="muted"] .link {
2149
2220
  color: var(--text-muted);
2150
2221
  }
@@ -2461,9 +2532,17 @@
2461
2532
  padding-inline: var(--space-lg);
2462
2533
  }
2463
2534
 
2464
- .arc-container[narrow] .container {
2465
- max-width: var(--max-width-sm);
2466
- }
2535
+ .arc-container[narrow] .container,
2536
+ .arc-container[data-size="sm"] .container { max-width: var(--max-width-sm); }
2537
+ .arc-container[data-size="md"] .container { max-width: var(--max-width); }
2538
+ .arc-container[data-size="lg"] .container { max-width: 1400px; }
2539
+ .arc-container[data-size="xl"] .container { max-width: 1600px; }
2540
+ .arc-container[data-size="full"] .container { max-width: none; }
2541
+
2542
+ /* Padding variants */
2543
+ .arc-container[data-padding="none"] .container { padding-inline: 0; }
2544
+ .arc-container[data-padding="sm"] .container { padding-inline: var(--space-sm); }
2545
+ .arc-container[data-padding="lg"] .container { padding-inline: var(--space-xl); }
2467
2546
 
2468
2547
  /* arc-dashboard-grid */
2469
2548
  .arc-dashboard-grid {
@@ -2860,6 +2939,19 @@
2860
2939
  animation: spinner-dash 1.4s ease-in-out infinite;
2861
2940
  }
2862
2941
 
2942
+ .arc-progress .progress__header {
2943
+ display: flex;
2944
+ justify-content: space-between;
2945
+ align-items: baseline;
2946
+ margin-bottom: var(--space-xs);
2947
+ }
2948
+
2949
+ .arc-progress .progress__value {
2950
+ font-family: var(--font-mono);
2951
+ font-size: var(--text-xs);
2952
+ color: var(--text-muted);
2953
+ }
2954
+
2863
2955
  @keyframes progress-indeterminate {
2864
2956
  0% { transform: translateX(-100%); }
2865
2957
  100% { transform: translateX(400%); }
package/css/avatar.css CHANGED
@@ -1,7 +1,7 @@
1
1
  /* Auto-generated by @arclux/prism — do not edit manually */
2
2
 
3
3
  /* arc-avatar */
4
- .arc-avatar { display: inline-flex; }
4
+ .arc-avatar { display: inline-flex; position: relative; }
5
5
 
6
6
  .arc-avatar .avatar {
7
7
  display: inline-flex;
@@ -38,10 +38,36 @@
38
38
  user-select: none;
39
39
  }
40
40
 
41
+ /* Shape variants */
42
+ .arc-avatar[data-shape="square"] .avatar,
43
+ .arc-avatar[data-shape="square"] .avatar__img { border-radius: var(--radius-md); }
44
+ .arc-avatar[data-shape="rounded"] .avatar,
45
+ .arc-avatar[data-shape="rounded"] .avatar__img { border-radius: var(--radius-lg); }
46
+
41
47
  .arc-avatar[data-size="sm"] .avatar__initials { font-size: var(--text-xs); }
42
48
  .arc-avatar[data-size="md"] .avatar__initials { font-size: var(--text-sm); }
43
49
  .arc-avatar[data-size="lg"] .avatar__initials { font-size: var(--text-lg); }
44
50
 
51
+ /* Status indicator */
52
+ .arc-avatar .avatar__status {
53
+ position: absolute;
54
+ bottom: 0;
55
+ right: 0;
56
+ width: 10px;
57
+ height: 10px;
58
+ border-radius: var(--radius-full);
59
+ border: 2px solid var(--bg-deep);
60
+ box-sizing: border-box;
61
+ }
62
+
63
+ .arc-avatar[data-size="sm"] .avatar__status { width: 8px; height: 8px; }
64
+ .arc-avatar[data-size="lg"] .avatar__status { width: 14px; height: 14px; border-width: 3px; }
65
+
66
+ .arc-avatar[data-status="online"] .avatar__status { background: var(--color-success); }
67
+ .arc-avatar[data-status="offline"] .avatar__status { background: var(--text-ghost); }
68
+ .arc-avatar[data-status="busy"] .avatar__status { background: var(--color-error); }
69
+ .arc-avatar[data-status="away"] .avatar__status { background: var(--color-warning); }
70
+
45
71
  @media (prefers-reduced-motion: reduce) {
46
72
  .arc-avatar *,
47
73
  .arc-avatar *::before,
package/css/badge.css CHANGED
@@ -65,6 +65,10 @@
65
65
  .arc-badge[data-variant="error"]:hover .badge { box-shadow: 0 0 12px rgba(var(--color-error-rgb), 0.15); }
66
66
  .arc-badge[data-variant="info"]:hover .badge { box-shadow: 0 0 12px rgba(var(--color-info-rgb), 0.15); }
67
67
 
68
+ /* Sizes */
69
+ .arc-badge[data-size="sm"] .badge { font-size: calc(var(--text-xs) - 1px); padding: 2px var(--space-xs); }
70
+ .arc-badge[data-size="lg"] .badge { font-size: var(--text-sm); padding: var(--space-sm) var(--space-md); }
71
+
68
72
  @media (prefers-reduced-motion: reduce) {
69
73
  .arc-badge *,
70
74
  .arc-badge *::before,
package/css/button.css CHANGED
@@ -2,7 +2,27 @@
2
2
 
3
3
  /* arc-button */
4
4
  .arc-button { display: inline-flex; }
5
- .arc-button[disabled] { pointer-events: none; }
5
+ .arc-button[disabled],
6
+ .arc-button[loading] { pointer-events: none; }
7
+
8
+ .arc-button[loading] .btn { opacity: 0.7; }
9
+
10
+ .arc-button .btn__spinner {
11
+ display: none;
12
+ width: 14px;
13
+ height: 14px;
14
+ border: 2px solid currentColor;
15
+ border-top-color: transparent;
16
+ border-radius: var(--radius-full);
17
+ animation: arc-btn-spin 600ms linear infinite;
18
+ }
19
+
20
+ .arc-button[loading] .btn__spinner { display: inline-block; }
21
+ .arc-button[loading] .btn__label { opacity: 0.6; }
22
+
23
+ @keyframes arc-btn-spin {
24
+ to { transform: rotate(360deg); }
25
+ }
6
26
 
7
27
  .arc-button .btn {
8
28
  display: inline-flex;
package/css/card.css CHANGED
@@ -5,18 +5,25 @@
5
5
 
6
6
  .arc-card .card { height: 100%; }
7
7
 
8
- /* Suppress hover effect when no href */
9
- .arc-card:not([data-href]) .card:hover {
8
+ /* Suppress hover effect when no href and not interactive */
9
+ .arc-card(:not([href]):not([interactive])) .card:hover {
10
10
  background: var(--border-subtle);
11
11
  }
12
- .arc-card:not([data-href]) .card:hover .card__inner {
12
+ .arc-card(:not([href]):not([interactive])) .card:hover .card__inner {
13
13
  box-shadow: none;
14
14
  }
15
15
 
16
+ .arc-card[interactive] .card { cursor: pointer; }
17
+
16
18
  .arc-card .card__inner {
17
19
  padding: var(--space-xl) var(--space-lg);
18
20
  }
19
21
 
22
+ /* Padding variants */
23
+ .arc-card[data-padding="none"] .card__inner { padding: 0; }
24
+ .arc-card[data-padding="sm"] .card__inner { padding: var(--space-md) var(--space-sm); }
25
+ .arc-card[data-padding="lg"] .card__inner { padding: var(--space-2xl) var(--space-xl); }
26
+
20
27
  .arc-card .card__body {
21
28
  flex: 1;
22
29
  }
package/css/container.css CHANGED
@@ -10,6 +10,14 @@
10
10
  padding-inline: var(--space-lg);
11
11
  }
12
12
 
13
- .arc-container[narrow] .container {
14
- max-width: var(--max-width-sm);
15
- }
13
+ .arc-container[narrow] .container,
14
+ .arc-container[data-size="sm"] .container { max-width: var(--max-width-sm); }
15
+ .arc-container[data-size="md"] .container { max-width: var(--max-width); }
16
+ .arc-container[data-size="lg"] .container { max-width: 1400px; }
17
+ .arc-container[data-size="xl"] .container { max-width: 1600px; }
18
+ .arc-container[data-size="full"] .container { max-width: none; }
19
+
20
+ /* Padding variants */
21
+ .arc-container[data-padding="none"] .container { padding-inline: 0; }
22
+ .arc-container[data-padding="sm"] .container { padding-inline: var(--space-sm); }
23
+ .arc-container[data-padding="lg"] .container { padding-inline: var(--space-xl); }
package/css/divider.css CHANGED
@@ -118,6 +118,33 @@
118
118
  background: linear-gradient(180deg, transparent, rgba(var(--text-primary-rgb),0.35), transparent);
119
119
  }
120
120
 
121
+ /* Labeled divider */
122
+ .arc-divider .divider--labeled {
123
+ display: flex;
124
+ align-items: center;
125
+ gap: var(--space-md);
126
+ height: auto;
127
+ background: none !important;
128
+ box-shadow: none !important;
129
+ }
130
+
131
+ .arc-divider .divider__line {
132
+ flex: 1;
133
+ height: 1px;
134
+ background: var(--gradient-divider);
135
+ }
136
+
137
+ .arc-divider .divider__label {
138
+ font-family: var(--font-accent);
139
+ font-size: var(--text-xs);
140
+ font-weight: 600;
141
+ letter-spacing: 1.5px;
142
+ text-transform: uppercase;
143
+ color: var(--text-muted);
144
+ white-space: nowrap;
145
+ flex-shrink: 0;
146
+ }
147
+
121
148
  @keyframes divider-shimmer {
122
149
  0%, 100% { background-position: 200% 0; }
123
150
  50% { background-position: -100% 0; }
package/css/footer.css CHANGED
@@ -52,6 +52,12 @@
52
52
  margin-bottom: var(--space-sm);
53
53
  }
54
54
 
55
+ /* Center alignment */
56
+ .arc-footer[data-align="center"] .footer { text-align: center; }
57
+ .arc-footer[data-align="center"] .footer__columns { justify-items: center; }
58
+ .arc-footer[data-align="center"] .footer__social { justify-content: center; }
59
+ .arc-footer[data-align="center"] .footer__legal { text-align: center; }
60
+
55
61
  .arc-footer .footer__legal {
56
62
  padding-top: var(--space-md);
57
63
  border-top: 1px solid var(--border-subtle);
package/css/link.css CHANGED
@@ -25,6 +25,15 @@
25
25
  text-underline-offset: 3px;
26
26
  }
27
27
 
28
+ /* Underline variants */
29
+ .arc-link[data-underline="always"] .link {
30
+ text-decoration: underline;
31
+ text-underline-offset: 3px;
32
+ }
33
+ .arc-link[data-underline="never"] .link:hover {
34
+ text-decoration: none;
35
+ }
36
+
28
37
  .arc-link[data-variant="muted"] .link {
29
38
  color: var(--text-muted);
30
39
  }
package/css/progress.css CHANGED
@@ -72,6 +72,19 @@
72
72
  animation: spinner-dash 1.4s ease-in-out infinite;
73
73
  }
74
74
 
75
+ .arc-progress .progress__header {
76
+ display: flex;
77
+ justify-content: space-between;
78
+ align-items: baseline;
79
+ margin-bottom: var(--space-xs);
80
+ }
81
+
82
+ .arc-progress .progress__value {
83
+ font-family: var(--font-mono);
84
+ font-size: var(--text-xs);
85
+ color: var(--text-muted);
86
+ }
87
+
75
88
  @keyframes progress-indeterminate {
76
89
  0% { transform: translateX(-100%); }
77
90
  100% { transform: translateX(400%); }
package/css/skeleton.css CHANGED
@@ -33,6 +33,12 @@
33
33
  border-radius: var(--radius-md);
34
34
  }
35
35
 
36
+ .arc-skeleton .skeleton-group {
37
+ display: flex;
38
+ flex-direction: column;
39
+ gap: var(--space-sm);
40
+ }
41
+
36
42
  @media (prefers-reduced-motion: reduce) {
37
43
  .arc-skeleton *,
38
44
  .arc-skeleton *::before,
package/css/stat.css CHANGED
@@ -40,3 +40,22 @@
40
40
  text-transform: uppercase;
41
41
  color: var(--text-muted);
42
42
  }
43
+
44
+ .arc-stat .stat__trend {
45
+ display: inline-flex;
46
+ align-items: center;
47
+ gap: 4px;
48
+ font-family: var(--font-mono);
49
+ font-size: var(--text-sm);
50
+ font-weight: 500;
51
+ margin-top: var(--space-xs);
52
+ }
53
+
54
+ .arc-stat[data-trend="up"] .stat__trend { color: var(--color-success); }
55
+ .arc-stat[data-trend="down"] .stat__trend { color: var(--color-error); }
56
+ .arc-stat[data-trend="neutral"] .stat__trend { color: var(--text-muted); }
57
+
58
+ .arc-stat .stat__trend-arrow {
59
+ width: 12px;
60
+ height: 12px;
61
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@arclux/arc-ui-html",
3
- "version": "1.4.0",
3
+ "version": "1.5.0",
4
4
  "description": "ARC UI — Standalone CSS and HTML examples for vanilla projects. Auto-generated by @arclux/prism.",
5
5
  "license": "MIT",
6
6
  "type": "module",