@lukasmurdock/remix-ui-styles 0.3.0 → 0.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/README.md CHANGED
@@ -20,3 +20,26 @@ import "@lukasmurdock/remix-ui-styles/src/index.css"
20
20
  - `primitives`
21
21
  - `patterns`
22
22
  - `components`
23
+
24
+ ## Stable DataTable contract
25
+
26
+ DataTable styling hooks are semver-stable in this package:
27
+
28
+ - `data-part` hooks: `wrapper`, `header`, `row`, `sort-indicator`, `footer`, and related table parts
29
+ - `--rf-data-table-*` CSS variables, including:
30
+ - `--rf-data-table-header-bg`
31
+ - `--rf-data-table-cell-padding-y`
32
+ - `--rf-data-table-cell-padding-x`
33
+ - `--rf-data-table-row-selected-bg`
34
+ - `--rf-data-table-footer-border`
35
+
36
+ ```css
37
+ .rf-data-table-wrap {
38
+ --rf-data-table-header-bg: color-mix(in srgb, var(--rf-brand-default) 8%, var(--rf-surface-default));
39
+ --rf-data-table-cell-padding-y: 0.625rem;
40
+ }
41
+
42
+ .rf-data-table-wrap [data-part="sort-indicator"] {
43
+ opacity: 1;
44
+ }
45
+ ```
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@lukasmurdock/remix-ui-styles",
3
3
  "description": "Layered CSS tokens, primitives, and component styles for Remix Frame UI.",
4
- "version": "0.3.0",
4
+ "version": "0.5.0",
5
5
  "license": "MIT",
6
6
  "repository": {
7
7
  "type": "git",
@@ -234,6 +234,39 @@
234
234
  .rf-error {
235
235
  color: var(--rf-danger-default);
236
236
  font-size: 0.875rem;
237
+ font-weight: 600;
238
+ margin: 0;
239
+ }
240
+
241
+ .rf-form-error-summary {
242
+ border: 1px solid var(--rf-danger-default);
243
+ border-left-width: 0.35rem;
244
+ border-radius: 0.5rem;
245
+ background: color-mix(in srgb, var(--rf-danger-default) 8%, var(--rf-surface-default));
246
+ padding: 0.75rem;
247
+ margin-bottom: 0.75rem;
248
+ }
249
+
250
+ .rf-form-error-summary-title {
251
+ margin: 0;
252
+ font-size: 1rem;
253
+ }
254
+
255
+ .rf-form-error-summary-list {
256
+ margin: 0.5rem 0 0;
257
+ padding-left: 1.25rem;
258
+ display: grid;
259
+ gap: 0.3rem;
260
+ }
261
+
262
+ .rf-form-error-summary-item {
263
+ margin: 0;
264
+ }
265
+
266
+ .rf-form-error-summary-link {
267
+ color: inherit;
268
+ text-decoration-thickness: 2px;
269
+ text-underline-offset: 2px;
237
270
  }
238
271
 
239
272
  .rf-form-layout {
@@ -268,10 +301,14 @@
268
301
  .rf-form-layout-actions {
269
302
  display: flex;
270
303
  gap: 0.5rem;
271
- justify-content: flex-end;
304
+ justify-content: flex-start;
272
305
  flex-wrap: wrap;
273
306
  }
274
307
 
308
+ .rf-form-layout-actions[data-align="end"] {
309
+ justify-content: flex-end;
310
+ }
311
+
275
312
  .rf-form-fieldset {
276
313
  margin: 0;
277
314
  border: 1px solid var(--rf-border-default);
@@ -301,6 +338,13 @@
301
338
  grid-template-columns: repeat(2, minmax(0, 1fr));
302
339
  }
303
340
 
341
+ @media (max-width: 768px) {
342
+ .rf-form-layout .rf-form-layout-fields,
343
+ .rf-form-fieldset .rf-form-fieldset-fields {
344
+ grid-template-columns: minmax(0, 1fr);
345
+ }
346
+ }
347
+
304
348
  .rf-form-message {
305
349
  margin: 0;
306
350
  font-size: 0.875rem;
@@ -2544,36 +2588,88 @@
2544
2588
  background: color-mix(in srgb, var(--rf-surface-default) 92%, var(--rf-color-gray-100));
2545
2589
  }
2546
2590
 
2591
+ .rf-data-table-wrap,
2592
+ .rf-data-table-loading,
2593
+ .rf-data-table-error {
2594
+ --rf-data-table-border-color: var(--rf-border-default);
2595
+ --rf-data-table-border-radius: 0.875rem;
2596
+ --rf-data-table-background: var(--rf-surface-default);
2597
+ --rf-data-table-min-width: 680px;
2598
+ --rf-data-table-header-bg: color-mix(in srgb, var(--rf-color-gray-100) 80%, var(--rf-surface-default));
2599
+ --rf-data-table-cell-border-color: color-mix(in srgb, var(--rf-border-default) 70%, transparent);
2600
+ --rf-data-table-cell-padding-y: 0.75rem;
2601
+ --rf-data-table-cell-padding-x: 1rem;
2602
+ --rf-data-table-caption-padding-top: 0.875rem;
2603
+ --rf-data-table-caption-padding-bottom: 0.4rem;
2604
+ --rf-data-table-caption-padding-x: 1rem;
2605
+ --rf-data-table-row-hover-bg: color-mix(in srgb, var(--rf-brand-default) 5%, var(--rf-surface-default));
2606
+ --rf-data-table-row-selected-bg: color-mix(in srgb, var(--rf-brand-default) 9%, var(--rf-surface-default));
2607
+ --rf-data-table-sort-indicator-size: 0.85rem;
2608
+ --rf-data-table-sort-indicator-opacity: 0.75;
2609
+ --rf-data-table-selection-column-width: 2.75rem;
2610
+ --rf-data-table-footer-border: color-mix(in srgb, var(--rf-border-default) 70%, transparent);
2611
+ --rf-data-table-footer-padding-y: 0.65rem;
2612
+ --rf-data-table-footer-padding-x: 0.875rem;
2613
+ --rf-data-table-pagination-font-size: 0.84rem;
2614
+ --rf-data-table-pagination-text: color-mix(in srgb, var(--rf-text-default) 72%, transparent);
2615
+ }
2616
+
2547
2617
  .rf-data-table-wrap {
2548
- border: 1px solid var(--rf-border-default);
2549
- border-radius: 0.875rem;
2550
- background: var(--rf-surface-default);
2618
+ border: 1px solid var(--rf-data-table-border-color);
2619
+ border-radius: var(--rf-data-table-border-radius);
2620
+ background: var(--rf-data-table-background);
2551
2621
  overflow: clip;
2552
2622
  display: grid;
2553
2623
  }
2554
2624
 
2625
+ .rf-data-table-wrap[data-density="compact"] {
2626
+ --rf-data-table-cell-padding-y: 0.5rem;
2627
+ --rf-data-table-cell-padding-x: 0.75rem;
2628
+ --rf-data-table-footer-padding-y: 0.5rem;
2629
+ --rf-data-table-footer-padding-x: 0.75rem;
2630
+ }
2631
+
2632
+ .rf-data-table-wrap[data-density="comfortable"] {
2633
+ --rf-data-table-cell-padding-y: 0.95rem;
2634
+ --rf-data-table-cell-padding-x: 1.125rem;
2635
+ --rf-data-table-footer-padding-y: 0.8rem;
2636
+ --rf-data-table-footer-padding-x: 1rem;
2637
+ }
2638
+
2639
+ .rf-data-table-wrap[data-surface="flat"] {
2640
+ --rf-data-table-border-radius: 0;
2641
+ }
2642
+
2643
+ .rf-data-table-wrap[data-surface="none"] {
2644
+ --rf-data-table-border-color: transparent;
2645
+ --rf-data-table-border-radius: 0;
2646
+ --rf-data-table-background: transparent;
2647
+ border: 0;
2648
+ }
2649
+
2555
2650
  .rf-data-table {
2556
2651
  width: 100%;
2557
2652
  border-collapse: collapse;
2558
- min-width: 680px;
2653
+ min-width: var(--rf-data-table-min-width);
2559
2654
  }
2560
2655
 
2561
2656
  .rf-data-table caption {
2562
2657
  text-align: left;
2563
2658
  font-weight: 600;
2564
- padding: 0.875rem 1rem 0.4rem;
2659
+ padding: var(--rf-data-table-caption-padding-top) var(--rf-data-table-caption-padding-x)
2660
+ var(--rf-data-table-caption-padding-bottom);
2565
2661
  }
2566
2662
 
2567
2663
  .rf-data-table th,
2568
2664
  .rf-data-table td {
2569
- border-top: 1px solid color-mix(in srgb, var(--rf-border-default) 70%, transparent);
2570
- padding: 0.75rem 1rem;
2665
+ border-top: 1px solid var(--rf-data-table-cell-border-color);
2666
+ padding: var(--rf-data-table-cell-padding-y) var(--rf-data-table-cell-padding-x);
2571
2667
  text-align: left;
2572
2668
  vertical-align: top;
2573
2669
  }
2574
2670
 
2575
2671
  .rf-data-table th {
2576
- background: color-mix(in srgb, var(--rf-color-gray-100) 80%, var(--rf-surface-default));
2672
+ background: var(--rf-data-table-header-bg);
2577
2673
  font-weight: 600;
2578
2674
  border-top: 0;
2579
2675
  }
@@ -2594,22 +2690,35 @@
2594
2690
  background: transparent;
2595
2691
  color: inherit;
2596
2692
  font: inherit;
2693
+ line-height: 1.2;
2597
2694
  cursor: pointer;
2598
2695
  padding: 0;
2599
2696
  }
2600
2697
 
2601
2698
  .rf-data-table-sort-indicator {
2602
- font-size: 0.85rem;
2603
- opacity: 0.75;
2699
+ display: inline-flex;
2700
+ align-items: center;
2701
+ justify-content: center;
2702
+ min-width: 1.15em;
2703
+ font-size: var(--rf-data-table-sort-indicator-size);
2704
+ opacity: var(--rf-data-table-sort-indicator-opacity);
2604
2705
  }
2605
2706
 
2606
2707
  .rf-data-table-select-col {
2607
- width: 2.75rem;
2708
+ width: var(--rf-data-table-selection-column-width);
2608
2709
  text-align: center;
2609
2710
  }
2610
2711
 
2712
+ .rf-data-table [data-part="row"][data-interactive="true"] {
2713
+ cursor: pointer;
2714
+ }
2715
+
2716
+ .rf-data-table [data-part="row"][data-interactive="true"]:hover {
2717
+ background: var(--rf-data-table-row-hover-bg);
2718
+ }
2719
+
2611
2720
  .rf-data-table tbody tr[data-selected="true"] {
2612
- background: color-mix(in srgb, var(--rf-brand-default) 9%, var(--rf-surface-default));
2721
+ background: var(--rf-data-table-row-selected-bg);
2613
2722
  }
2614
2723
 
2615
2724
  .rf-data-table-empty {
@@ -2619,16 +2728,30 @@
2619
2728
 
2620
2729
  .rf-data-table-loading,
2621
2730
  .rf-data-table-error {
2622
- border: 1px solid var(--rf-border-default);
2623
- border-radius: 0.875rem;
2731
+ border: 1px solid var(--rf-data-table-border-color);
2732
+ border-radius: var(--rf-data-table-border-radius);
2624
2733
  padding: 1rem;
2625
2734
  color: color-mix(in srgb, var(--rf-text-default) 70%, transparent);
2626
- background: color-mix(in srgb, var(--rf-surface-default) 92%, var(--rf-color-gray-100));
2735
+ background: color-mix(in srgb, var(--rf-data-table-background) 92%, var(--rf-color-gray-100));
2736
+ }
2737
+
2738
+ .rf-data-table-loading[data-surface="flat"],
2739
+ .rf-data-table-error[data-surface="flat"] {
2740
+ --rf-data-table-border-radius: 0;
2741
+ }
2742
+
2743
+ .rf-data-table-loading[data-surface="none"],
2744
+ .rf-data-table-error[data-surface="none"] {
2745
+ --rf-data-table-border-color: transparent;
2746
+ --rf-data-table-border-radius: 0;
2747
+ --rf-data-table-background: transparent;
2748
+ border: 0;
2749
+ padding: 0;
2627
2750
  }
2628
2751
 
2629
2752
  .rf-data-table-footer {
2630
- border-top: 1px solid color-mix(in srgb, var(--rf-border-default) 70%, transparent);
2631
- padding: 0.65rem 0.875rem;
2753
+ border-top: 1px solid var(--rf-data-table-footer-border);
2754
+ padding: var(--rf-data-table-footer-padding-y) var(--rf-data-table-footer-padding-x);
2632
2755
  display: flex;
2633
2756
  justify-content: space-between;
2634
2757
  align-items: center;
@@ -2637,8 +2760,8 @@
2637
2760
  }
2638
2761
 
2639
2762
  .rf-data-table-pagination-status {
2640
- font-size: 0.84rem;
2641
- color: color-mix(in srgb, var(--rf-text-default) 72%, transparent);
2763
+ font-size: var(--rf-data-table-pagination-font-size);
2764
+ color: var(--rf-data-table-pagination-text);
2642
2765
  }
2643
2766
 
2644
2767
  .rf-data-table-pagination-actions {
package/src/patterns.css CHANGED
@@ -12,4 +12,11 @@
12
12
  color: var(--rf-text-default);
13
13
  background: var(--rf-surface-default);
14
14
  }
15
+
16
+ .rf-input-base[aria-invalid="true"],
17
+ .rf-field :is(select, input, textarea)[aria-invalid="true"] {
18
+ border-color: var(--rf-danger-default);
19
+ border-width: 2px;
20
+ padding-inline: calc(0.75rem - 1px);
21
+ }
15
22
  }