softui-css 1.11.0 → 1.12.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/README.md CHANGED
@@ -32,7 +32,7 @@
32
32
 
33
33
  | Feature | Description |
34
34
  |---|---|
35
- | **65+ Components** | Buttons, Cards, Modals, Tables, Tabs, Calendar, Charts, Pricing, and more |
35
+ | **68+ Components** | Buttons, Cards, Modals, Tables, Tabs, Calendar, Charts, Pricing, and more |
36
36
  | **Dark Mode** | Add `data-theme="dark"` and everything adapts |
37
37
  | **Zero Dependencies** | Pure CSS + vanilla JS. No build step required |
38
38
  | **CSS Variables** | Fully customizable via custom properties |
package/dist/softui.css CHANGED
@@ -1,4 +1,4 @@
1
- /*! SoftUI v1.11.0 — A Neumorphic CSS Library */
1
+ /*! SoftUI v1.12.0 — A Neumorphic CSS Library */
2
2
 
3
3
  /* ===========================================
4
4
  CSS Variables / Tokens
@@ -2508,6 +2508,109 @@ a.sui-btn-warning:visited {
2508
2508
  background: var(--sui-danger);
2509
2509
  }
2510
2510
 
2511
+ /* ===========================================
2512
+ Radio Card / Checkbox Card
2513
+ =========================================== */
2514
+ .sui-radio-card,
2515
+ .sui-checkbox-card {
2516
+ position: relative;
2517
+ display: block;
2518
+ cursor: pointer;
2519
+ }
2520
+
2521
+ .sui-radio-card input,
2522
+ .sui-checkbox-card input {
2523
+ position: absolute;
2524
+ opacity: 0;
2525
+ width: 0;
2526
+ height: 0;
2527
+ }
2528
+
2529
+ .sui-radio-card .sui-radio-card-content,
2530
+ .sui-checkbox-card .sui-checkbox-card-content {
2531
+ display: flex;
2532
+ align-items: flex-start;
2533
+ gap: 14px;
2534
+ padding: 16px 20px;
2535
+ background: var(--sui-bg);
2536
+ border-radius: var(--sui-radius-sm);
2537
+ box-shadow: var(--sui-shadow-raised-sm);
2538
+ transition: box-shadow var(--sui-transition-fast), transform var(--sui-transition-fast);
2539
+ }
2540
+
2541
+ .sui-radio-card:hover .sui-radio-card-content,
2542
+ .sui-checkbox-card:hover .sui-checkbox-card-content {
2543
+ transform: translateY(-2px);
2544
+ box-shadow: var(--sui-shadow-raised);
2545
+ }
2546
+
2547
+ .sui-radio-card input:checked ~ .sui-radio-card-content,
2548
+ .sui-checkbox-card input:checked ~ .sui-checkbox-card-content {
2549
+ box-shadow: 0 0 0 2px var(--sui-primary), var(--sui-shadow-raised-sm);
2550
+ }
2551
+
2552
+ /* Check indicator */
2553
+ .sui-radio-card .sui-radio-card-content::before,
2554
+ .sui-checkbox-card .sui-checkbox-card-content::before {
2555
+ content: '';
2556
+ width: 20px;
2557
+ height: 20px;
2558
+ flex-shrink: 0;
2559
+ border-radius: 50%;
2560
+ box-shadow: var(--sui-shadow-inset-sm);
2561
+ background: var(--sui-bg);
2562
+ background-repeat: no-repeat;
2563
+ background-position: center;
2564
+ transition: background-color var(--sui-transition-fast), box-shadow var(--sui-transition-fast);
2565
+ margin-top: 2px;
2566
+ }
2567
+
2568
+ .sui-checkbox-card .sui-checkbox-card-content::before {
2569
+ border-radius: var(--sui-radius-xs);
2570
+ }
2571
+
2572
+ .sui-radio-card input:checked ~ .sui-radio-card-content::before {
2573
+ background-color: var(--sui-primary);
2574
+ box-shadow: none;
2575
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='10' viewBox='0 0 10 10'%3E%3Ccircle cx='5' cy='5' r='3' fill='%23fff'/%3E%3C/svg%3E");
2576
+ background-size: 10px;
2577
+ }
2578
+
2579
+ .sui-checkbox-card input:checked ~ .sui-checkbox-card-content::before {
2580
+ background-color: var(--sui-primary);
2581
+ box-shadow: none;
2582
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%23fff' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'/%3E%3C/svg%3E");
2583
+ background-size: 11px;
2584
+ }
2585
+
2586
+ .sui-radio-card input:focus-visible ~ .sui-radio-card-content,
2587
+ .sui-checkbox-card input:focus-visible ~ .sui-checkbox-card-content {
2588
+ outline: 2px solid var(--sui-primary);
2589
+ outline-offset: 2px;
2590
+ }
2591
+
2592
+ .sui-radio-card input:disabled ~ .sui-radio-card-content,
2593
+ .sui-checkbox-card input:disabled ~ .sui-checkbox-card-content {
2594
+ opacity: 0.5;
2595
+ cursor: not-allowed;
2596
+ transform: none;
2597
+ }
2598
+
2599
+ /* Card body text */
2600
+ .sui-radio-card-title,
2601
+ .sui-checkbox-card-title {
2602
+ font-weight: 600;
2603
+ font-size: 14px;
2604
+ color: var(--sui-text);
2605
+ margin-bottom: 2px;
2606
+ }
2607
+
2608
+ .sui-radio-card-desc,
2609
+ .sui-checkbox-card-desc {
2610
+ font-size: 13px;
2611
+ color: var(--sui-text-muted);
2612
+ }
2613
+
2511
2614
  /* ===========================================
2512
2615
  Badges — Positioned (notification dot)
2513
2616
  =========================================== */
@@ -7000,6 +7103,39 @@ select.sui-datatable-filter {
7000
7103
  .sui-sheet-backdrop.sui-sheet-static.sui-sheet-shake .sui-sheet-top { transform: translateY(8px); }
7001
7104
  .sui-sheet-backdrop.sui-sheet-static.sui-sheet-shake .sui-sheet-bottom { transform: translateY(-8px); }
7002
7105
 
7106
+ /* Drawer (bottom sheet with drag handle) */
7107
+ .sui-drawer .sui-sheet-bottom {
7108
+ height: auto;
7109
+ max-height: 85vh;
7110
+ transition: transform var(--sui-transition-base) ease;
7111
+ }
7112
+
7113
+ .sui-drawer-handle {
7114
+ display: flex;
7115
+ justify-content: center;
7116
+ padding: 10px 0 6px;
7117
+ cursor: grab;
7118
+ }
7119
+
7120
+ .sui-drawer-handle::after {
7121
+ content: '';
7122
+ width: 36px;
7123
+ height: 4px;
7124
+ border-radius: var(--sui-radius-full);
7125
+ background: var(--sui-bg-dark);
7126
+ }
7127
+
7128
+ .sui-drawer-handle:active { cursor: grabbing; }
7129
+
7130
+ /* Drawer snap points */
7131
+ .sui-drawer .sui-sheet-bottom.sui-drawer-snap-half {
7132
+ height: 50vh;
7133
+ }
7134
+
7135
+ .sui-drawer .sui-sheet-bottom.sui-drawer-snap-full {
7136
+ height: 85vh;
7137
+ }
7138
+
7003
7139
  /* ==============================
7004
7140
  Popover
7005
7141
  ============================== */
@@ -13085,6 +13221,27 @@ select.sui-datatable-filter {
13085
13221
  /* Timeline */
13086
13222
  [dir="rtl"] .sui-timeline-separator { margin-right: 0; margin-left: 16px; }
13087
13223
 
13224
+ /* ===========================================
13225
+ Mask (clip-path shapes)
13226
+ =========================================== */
13227
+ .sui-mask {
13228
+ -webkit-clip-path: var(--sui-mask);
13229
+ clip-path: var(--sui-mask);
13230
+ }
13231
+
13232
+ .sui-mask-circle { --sui-mask: circle(50%); }
13233
+ .sui-mask-squircle { --sui-mask: polygon(50% 0%, 66% 0%, 78% 1%, 87% 4%, 93% 8%, 97% 14%, 99% 22%, 100% 34%, 100% 50%, 100% 66%, 99% 78%, 97% 86%, 93% 92%, 87% 96%, 78% 99%, 66% 100%, 50% 100%, 34% 100%, 22% 99%, 13% 96%, 7% 92%, 3% 86%, 1% 78%, 0% 66%, 0% 50%, 0% 34%, 1% 22%, 3% 14%, 7% 8%, 13% 4%, 22% 1%, 34% 0%); }
13234
+ .sui-mask-heart { --sui-mask: polygon(50% 15%, 43% 6%, 35% 1%, 25% 0%, 15% 3%, 7% 10%, 2% 20%, 0% 32%, 2% 44%, 8% 55%, 16% 65%, 26% 76%, 37% 86%, 50% 100%, 63% 86%, 74% 76%, 84% 65%, 92% 55%, 98% 44%, 100% 32%, 98% 20%, 93% 10%, 85% 3%, 75% 0%, 65% 1%, 57% 6%); }
13235
+ .sui-mask-star { --sui-mask: polygon(50% 0%, 61% 35%, 98% 35%, 68% 57%, 79% 91%, 50% 70%, 21% 91%, 32% 57%, 2% 35%, 39% 35%); }
13236
+ .sui-mask-diamond { --sui-mask: polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%); }
13237
+ .sui-mask-hexagon { --sui-mask: polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%); }
13238
+ .sui-mask-triangle { --sui-mask: polygon(50% 0%, 100% 100%, 0% 100%); }
13239
+ .sui-mask-pentagon { --sui-mask: polygon(50% 0%, 100% 38%, 82% 100%, 18% 100%, 0% 38%); }
13240
+ .sui-mask-octagon { --sui-mask: polygon(29% 0%, 71% 0%, 100% 29%, 100% 71%, 71% 100%, 29% 100%, 0% 71%, 0% 29%); }
13241
+ .sui-mask-cross { --sui-mask: polygon(33% 0%, 67% 0%, 67% 33%, 100% 33%, 100% 67%, 67% 67%, 67% 100%, 33% 100%, 33% 67%, 0% 67%, 0% 33%, 33% 33%); }
13242
+ .sui-mask-shield { --sui-mask: polygon(50% 0%, 100% 12%, 100% 65%, 50% 100%, 0% 65%, 0% 12%); }
13243
+ .sui-mask-parallelogram { --sui-mask: polygon(20% 0%, 100% 0%, 80% 100%, 0% 100%); }
13244
+
13088
13245
  /* ===========================================
13089
13246
  Reduced Motion
13090
13247
  =========================================== */
@@ -13097,4 +13254,46 @@ select.sui-datatable-filter {
13097
13254
  }
13098
13255
  }
13099
13256
 
13257
+ /* ===========================================
13258
+ Print Styles
13259
+ =========================================== */
13260
+ @media print {
13261
+ body {
13262
+ background: #fff !important;
13263
+ color: #000 !important;
13264
+ }
13265
+
13266
+ .sui-navbar, .sui-sidebar, .sui-dock, .sui-speed-dial,
13267
+ .sui-modal-backdrop, .sui-sheet-backdrop, .sui-toast-container,
13268
+ .sui-tour-overlay, .sui-tour-tooltip, .sui-command-dialog,
13269
+ .sui-tooltip, .sui-popover-content, .sui-dropdown-menu,
13270
+ .sui-context-menu {
13271
+ display: none !important;
13272
+ }
13273
+
13274
+ *, *::before, *::after {
13275
+ box-shadow: none !important;
13276
+ text-shadow: none !important;
13277
+ }
13278
+
13279
+ .sui-card, .sui-stat, .sui-alert, .sui-table {
13280
+ border: 1px solid #ddd !important;
13281
+ break-inside: avoid;
13282
+ }
13283
+
13284
+ .sui-btn {
13285
+ border: 1px solid #999 !important;
13286
+ }
13287
+
13288
+ a[href]::after {
13289
+ content: " (" attr(href) ")";
13290
+ font-size: 0.85em;
13291
+ color: #666;
13292
+ }
13293
+
13294
+ a.sui-btn::after, a.sui-navbar-link::after, a.sui-page-link::after {
13295
+ content: none;
13296
+ }
13297
+ }
13298
+
13100
13299