@lukasmurdock/remix-ui-styles 0.1.0 → 0.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.
Files changed (2) hide show
  1. package/package.json +2 -2
  2. package/src/components.css +1028 -70
package/package.json CHANGED
@@ -1,11 +1,11 @@
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.1.0",
4
+ "version": "0.2.0",
5
5
  "license": "MIT",
6
6
  "repository": {
7
7
  "type": "git",
8
- "url": "git+https://github.com/lukasmurdock/remix-frame-ui.git"
8
+ "url": "https://github.com/LukasMurdock/remix-frame-ui"
9
9
  },
10
10
  "homepage": "https://github.com/lukasmurdock/remix-frame-ui#readme",
11
11
  "bugs": {
@@ -1070,6 +1070,92 @@
1070
1070
  color: color-mix(in srgb, var(--rf-text-default) 70%, transparent);
1071
1071
  }
1072
1072
 
1073
+ .rf-typography-heading {
1074
+ margin: 0;
1075
+ color: var(--rf-text-default);
1076
+ font-weight: 650;
1077
+ line-height: 1.2;
1078
+ letter-spacing: -0.01em;
1079
+ text-wrap: balance;
1080
+ }
1081
+
1082
+ h1.rf-typography-heading {
1083
+ font-size: clamp(2rem, 1.5rem + 2vw, 3rem);
1084
+ line-height: 1.1;
1085
+ }
1086
+
1087
+ h2.rf-typography-heading {
1088
+ font-size: clamp(1.65rem, 1.25rem + 1.2vw, 2.25rem);
1089
+ }
1090
+
1091
+ h3.rf-typography-heading {
1092
+ font-size: clamp(1.35rem, 1.1rem + 0.9vw, 1.7rem);
1093
+ }
1094
+
1095
+ h4.rf-typography-heading {
1096
+ font-size: clamp(1.15rem, 1.02rem + 0.5vw, 1.35rem);
1097
+ }
1098
+
1099
+ h5.rf-typography-heading {
1100
+ font-size: 1rem;
1101
+ }
1102
+
1103
+ h6.rf-typography-heading {
1104
+ font-size: 0.92rem;
1105
+ text-transform: uppercase;
1106
+ letter-spacing: 0.06em;
1107
+ }
1108
+
1109
+ .rf-typography-text {
1110
+ margin: 0;
1111
+ color: color-mix(in srgb, var(--rf-text-default) 92%, transparent);
1112
+ line-height: 1.6;
1113
+ max-width: 70ch;
1114
+ text-wrap: pretty;
1115
+ }
1116
+
1117
+ small.rf-typography-text {
1118
+ font-size: 0.875rem;
1119
+ }
1120
+
1121
+ .rf-typography-text[data-truncate="true"] {
1122
+ display: block;
1123
+ max-width: 100%;
1124
+ overflow: hidden;
1125
+ white-space: nowrap;
1126
+ text-overflow: ellipsis;
1127
+ }
1128
+
1129
+ .rf-typography-pre {
1130
+ margin: 0;
1131
+ border: 1px solid color-mix(in srgb, var(--rf-border-default) 75%, transparent);
1132
+ border-radius: 0.75rem;
1133
+ background: color-mix(in srgb, var(--rf-surface-default) 92%, var(--rf-color-gray-100));
1134
+ color: color-mix(in srgb, var(--rf-text-default) 92%, transparent);
1135
+ padding: 0.8rem 0.95rem;
1136
+ overflow-x: auto;
1137
+ }
1138
+
1139
+ .rf-typography-code {
1140
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
1141
+ font-size: 0.875em;
1142
+ line-height: 1.45;
1143
+ border-radius: 0.4rem;
1144
+ background: color-mix(in srgb, var(--rf-color-gray-100) 80%, var(--rf-surface-default));
1145
+ color: color-mix(in srgb, var(--rf-brand-default) 72%, var(--rf-text-default));
1146
+ padding: 0.16em 0.38em;
1147
+ }
1148
+
1149
+ .rf-typography-pre .rf-typography-code {
1150
+ display: block;
1151
+ border-radius: 0;
1152
+ background: transparent;
1153
+ color: inherit;
1154
+ padding: 0;
1155
+ font-size: 0.9rem;
1156
+ white-space: pre;
1157
+ }
1158
+
1073
1159
  .rf-app-provider {
1074
1160
  min-width: 0;
1075
1161
  }
@@ -1516,6 +1602,118 @@
1516
1602
  font-size: 0.82rem;
1517
1603
  }
1518
1604
 
1605
+ .rf-tab-bar {
1606
+ width: min(100%, 36rem);
1607
+ border: 1px solid var(--rf-border-default);
1608
+ border-radius: 0.85rem;
1609
+ background: var(--rf-surface-default);
1610
+ color: var(--rf-text-default);
1611
+ box-shadow: 0 8px 24px color-mix(in srgb, var(--rf-surface-inverse) 8%, transparent);
1612
+ }
1613
+
1614
+ .rf-tab-bar-list {
1615
+ margin: 0;
1616
+ padding: 0.25rem;
1617
+ list-style: none;
1618
+ display: grid;
1619
+ grid-template-columns: repeat(var(--rf-tab-bar-count, 4), minmax(0, 1fr));
1620
+ gap: 0.2rem;
1621
+ }
1622
+
1623
+ .rf-tab-bar-item {
1624
+ min-width: 0;
1625
+ }
1626
+
1627
+ .rf-tab-bar-button {
1628
+ width: 100%;
1629
+ min-height: 3.1rem;
1630
+ border: 0;
1631
+ border-radius: 0.65rem;
1632
+ background: transparent;
1633
+ color: color-mix(in srgb, var(--rf-text-default) 80%, transparent);
1634
+ display: grid;
1635
+ grid-template-rows: auto auto;
1636
+ justify-items: center;
1637
+ align-content: center;
1638
+ gap: 0.12rem;
1639
+ padding: 0.42rem 0.3rem;
1640
+ cursor: pointer;
1641
+ position: relative;
1642
+ transition: background 150ms ease;
1643
+ }
1644
+
1645
+ .rf-tab-bar-button:hover {
1646
+ background: color-mix(in srgb, var(--rf-brand-default) 8%, var(--rf-surface-default));
1647
+ }
1648
+
1649
+ .rf-tab-bar-item[data-active="true"] .rf-tab-bar-button,
1650
+ .rf-tab-bar-button[aria-current="page"] {
1651
+ background: color-mix(in srgb, var(--rf-brand-default) 14%, var(--rf-surface-default));
1652
+ color: color-mix(in srgb, var(--rf-brand-default) 80%, var(--rf-text-default));
1653
+ font-weight: 600;
1654
+ }
1655
+
1656
+ .rf-tab-bar-item[data-disabled="true"] .rf-tab-bar-button,
1657
+ .rf-tab-bar-button:disabled {
1658
+ cursor: not-allowed;
1659
+ color: color-mix(in srgb, var(--rf-text-default) 46%, transparent);
1660
+ }
1661
+
1662
+ .rf-tab-bar-icon {
1663
+ font-size: 1.05rem;
1664
+ line-height: 1;
1665
+ min-height: 1rem;
1666
+ display: inline-flex;
1667
+ align-items: center;
1668
+ justify-content: center;
1669
+ }
1670
+
1671
+ .rf-tab-bar-label {
1672
+ font-size: 0.74rem;
1673
+ line-height: 1.25;
1674
+ text-align: center;
1675
+ max-width: 100%;
1676
+ overflow: hidden;
1677
+ text-overflow: ellipsis;
1678
+ white-space: nowrap;
1679
+ }
1680
+
1681
+ .rf-tab-bar-badge {
1682
+ position: absolute;
1683
+ top: 0.14rem;
1684
+ right: 0.18rem;
1685
+ min-width: 1rem;
1686
+ height: 1rem;
1687
+ border-radius: 999px;
1688
+ border: 1px solid var(--rf-surface-default);
1689
+ background: var(--rf-danger-default);
1690
+ color: var(--rf-color-white);
1691
+ font-size: 0.64rem;
1692
+ line-height: 1;
1693
+ display: inline-flex;
1694
+ align-items: center;
1695
+ justify-content: center;
1696
+ padding-inline: 0.22rem;
1697
+ }
1698
+
1699
+ .rf-tab-bar[data-compact="true"] .rf-tab-bar-button {
1700
+ min-height: 2.65rem;
1701
+ gap: 0.08rem;
1702
+ padding: 0.3rem 0.24rem;
1703
+ }
1704
+
1705
+ .rf-tab-bar[data-compact="true"] .rf-tab-bar-icon {
1706
+ font-size: 0.92rem;
1707
+ }
1708
+
1709
+ .rf-tab-bar[data-compact="true"] .rf-tab-bar-label {
1710
+ font-size: 0.68rem;
1711
+ }
1712
+
1713
+ .rf-tab-bar[data-safe-area="true"] {
1714
+ padding-bottom: max(0.2rem, env(safe-area-inset-bottom));
1715
+ }
1716
+
1519
1717
  .rf-tree {
1520
1718
  margin: 0;
1521
1719
  padding: 0;
@@ -2839,114 +3037,604 @@
2839
3037
  background: color-mix(in srgb, var(--rf-surface-default) 96%, var(--rf-color-gray-50));
2840
3038
  }
2841
3039
 
2842
- @media (max-width: 640px) {
2843
- .rf-drawer-panel {
2844
- width: 100vw;
2845
- }
3040
+ .rf-action-sheet-portal {
3041
+ position: relative;
3042
+ z-index: 999;
2846
3043
  }
2847
3044
 
2848
- @keyframes rf-fade-in {
2849
- from {
2850
- opacity: 0;
2851
- }
2852
-
2853
- to {
2854
- opacity: 1;
2855
- }
3045
+ .rf-action-sheet-backdrop {
3046
+ position: fixed;
3047
+ inset: 0;
3048
+ background: color-mix(in srgb, var(--rf-surface-inverse) 38%, transparent);
3049
+ display: grid;
3050
+ align-items: end;
3051
+ padding: 0.75rem;
3052
+ backdrop-filter: blur(1.5px);
3053
+ animation: rf-fade-in 140ms ease-out;
2856
3054
  }
2857
3055
 
2858
- @keyframes rf-scale-in {
2859
- from {
2860
- opacity: 0;
2861
- transform: translateY(6px) scale(0.98);
2862
- }
2863
-
2864
- to {
2865
- opacity: 1;
2866
- transform: translateY(0) scale(1);
2867
- }
3056
+ .rf-action-sheet {
3057
+ width: min(100%, 32rem);
3058
+ margin-inline: auto;
3059
+ display: grid;
3060
+ gap: 0.55rem;
2868
3061
  }
2869
3062
 
2870
- .rf-flex {
2871
- display: flex;
2872
- flex-direction: row;
2873
- align-items: stretch;
2874
- justify-content: flex-start;
2875
- flex-wrap: nowrap;
2876
- gap: var(--rf-flex-gap, 0.75rem);
3063
+ .rf-action-sheet-panel {
3064
+ border: 1px solid var(--rf-border-default);
3065
+ border-radius: 0.95rem;
3066
+ background: var(--rf-surface-default);
3067
+ color: var(--rf-text-default);
3068
+ overflow: hidden;
3069
+ box-shadow: 0 20px 42px color-mix(in srgb, var(--rf-surface-inverse) 22%, transparent);
3070
+ animation: rf-slide-in-up 170ms ease-out;
2877
3071
  }
2878
3072
 
2879
- .rf-flex[data-direction="column"] {
2880
- flex-direction: column;
3073
+ .rf-action-sheet-header {
3074
+ display: grid;
3075
+ gap: 0.25rem;
3076
+ padding: 0.9rem 1rem;
3077
+ border-bottom: 1px solid var(--rf-border-default);
3078
+ background: color-mix(in srgb, var(--rf-surface-default) 96%, var(--rf-color-gray-50));
2881
3079
  }
2882
3080
 
2883
- .rf-flex[data-align="start"] {
2884
- align-items: flex-start;
3081
+ .rf-action-sheet-title {
3082
+ margin: 0;
3083
+ font-size: 1rem;
3084
+ line-height: 1.3;
2885
3085
  }
2886
3086
 
2887
- .rf-flex[data-align="center"] {
2888
- align-items: center;
3087
+ .rf-action-sheet-description {
3088
+ margin: 0;
3089
+ font-size: 0.875rem;
3090
+ color: color-mix(in srgb, var(--rf-text-default) 75%, transparent);
2889
3091
  }
2890
3092
 
2891
- .rf-flex[data-align="end"] {
2892
- align-items: flex-end;
3093
+ .rf-action-sheet-actions {
3094
+ display: grid;
2893
3095
  }
2894
3096
 
2895
- .rf-flex[data-align="baseline"] {
2896
- align-items: baseline;
3097
+ .rf-action-sheet-action {
3098
+ width: 100%;
3099
+ border: 0;
3100
+ border-top: 1px solid var(--rf-border-default);
3101
+ background: transparent;
3102
+ color: inherit;
3103
+ text-align: left;
3104
+ padding: 0.8rem 1rem;
3105
+ min-height: 2.8rem;
3106
+ display: grid;
3107
+ gap: 0.2rem;
3108
+ cursor: pointer;
2897
3109
  }
2898
3110
 
2899
- .rf-flex[data-justify="start"] {
2900
- justify-content: flex-start;
3111
+ .rf-action-sheet-actions > .rf-action-sheet-action:first-child {
3112
+ border-top: 0;
2901
3113
  }
2902
3114
 
2903
- .rf-flex[data-justify="center"] {
2904
- justify-content: center;
3115
+ .rf-action-sheet-action:hover {
3116
+ background: color-mix(in srgb, var(--rf-surface-inverse) 4%, var(--rf-surface-default));
2905
3117
  }
2906
3118
 
2907
- .rf-flex[data-justify="end"] {
2908
- justify-content: flex-end;
3119
+ .rf-action-sheet-action:disabled {
3120
+ cursor: not-allowed;
3121
+ color: color-mix(in srgb, var(--rf-text-default) 44%, transparent);
3122
+ background: transparent;
2909
3123
  }
2910
3124
 
2911
- .rf-flex[data-justify="between"] {
2912
- justify-content: space-between;
3125
+ .rf-action-sheet-action[data-destructive="true"] {
3126
+ color: color-mix(in srgb, var(--rf-danger-default) 72%, var(--rf-text-default));
2913
3127
  }
2914
3128
 
2915
- .rf-flex[data-justify="around"] {
2916
- justify-content: space-around;
3129
+ .rf-action-sheet-action-label {
3130
+ font-size: 0.95rem;
3131
+ font-weight: 600;
3132
+ line-height: 1.35;
2917
3133
  }
2918
3134
 
2919
- .rf-flex[data-justify="evenly"] {
2920
- justify-content: space-evenly;
3135
+ .rf-action-sheet-action-description {
3136
+ font-size: 0.825rem;
3137
+ line-height: 1.3;
3138
+ color: color-mix(in srgb, var(--rf-text-default) 70%, transparent);
2921
3139
  }
2922
3140
 
2923
- .rf-flex[data-wrap="wrap"] {
2924
- flex-wrap: wrap;
3141
+ .rf-action-sheet-cancel {
3142
+ width: 100%;
3143
+ border: 1px solid var(--rf-border-default);
3144
+ border-radius: 0.95rem;
3145
+ background: var(--rf-surface-default);
3146
+ color: var(--rf-text-default);
3147
+ font-weight: 600;
3148
+ min-height: 2.75rem;
3149
+ padding: 0.65rem 0.9rem;
3150
+ cursor: pointer;
3151
+ box-shadow: 0 12px 24px color-mix(in srgb, var(--rf-surface-inverse) 12%, transparent);
2925
3152
  }
2926
3153
 
2927
- .rf-flex[data-inline="true"] {
2928
- display: inline-flex;
3154
+ .rf-action-sheet-cancel:hover {
3155
+ background: color-mix(in srgb, var(--rf-surface-inverse) 4%, var(--rf-surface-default));
2929
3156
  }
2930
3157
 
2931
- .rf-space {
2932
- display: flex;
2933
- flex-direction: row;
2934
- align-items: center;
2935
- gap: 0.75rem;
3158
+ .rf-image-viewer-portal {
3159
+ position: relative;
3160
+ z-index: 998;
2936
3161
  }
2937
3162
 
2938
- .rf-space[data-direction="vertical"] {
2939
- flex-direction: column;
2940
- align-items: stretch;
3163
+ .rf-image-viewer-backdrop {
3164
+ position: fixed;
3165
+ inset: 0;
3166
+ background: color-mix(in srgb, var(--rf-surface-inverse) 68%, transparent);
3167
+ display: grid;
3168
+ place-items: center;
3169
+ padding: 0.75rem;
3170
+ backdrop-filter: blur(1.5px);
3171
+ animation: rf-fade-in 140ms ease-out;
2941
3172
  }
2942
3173
 
2943
- .rf-space[data-size="xs"] {
2944
- gap: 0.25rem;
3174
+ .rf-image-viewer-backdrop[hidden] {
3175
+ display: none;
2945
3176
  }
2946
3177
 
2947
- .rf-space[data-size="sm"] {
2948
- gap: 0.5rem;
2949
- }
3178
+ .rf-image-viewer {
3179
+ width: min(100%, 56rem);
3180
+ max-height: calc(100vh - 1.5rem);
3181
+ border: 1px solid color-mix(in srgb, var(--rf-border-default) 72%, transparent);
3182
+ border-radius: 0.9rem;
3183
+ background: color-mix(in srgb, var(--rf-surface-default) 94%, var(--rf-color-gray-100));
3184
+ color: var(--rf-text-default);
3185
+ display: grid;
3186
+ grid-template-rows: auto minmax(0, 1fr);
3187
+ box-shadow: 0 24px 56px color-mix(in srgb, var(--rf-surface-inverse) 36%, transparent);
3188
+ overflow: hidden;
3189
+ animation: rf-scale-in 170ms ease-out;
3190
+ }
3191
+
3192
+ .rf-image-viewer-header {
3193
+ display: flex;
3194
+ align-items: center;
3195
+ justify-content: space-between;
3196
+ gap: 0.6rem;
3197
+ padding: 0.65rem 0.8rem;
3198
+ border-bottom: 1px solid color-mix(in srgb, var(--rf-border-default) 82%, transparent);
3199
+ background: color-mix(in srgb, var(--rf-surface-default) 94%, var(--rf-color-gray-50));
3200
+ }
3201
+
3202
+ .rf-image-viewer-counter {
3203
+ margin: 0;
3204
+ font-size: 0.84rem;
3205
+ line-height: 1.25;
3206
+ color: color-mix(in srgb, var(--rf-text-default) 76%, transparent);
3207
+ }
3208
+
3209
+ .rf-image-viewer-close {
3210
+ border: 1px solid var(--rf-border-default);
3211
+ border-radius: 0.55rem;
3212
+ min-height: 2.05rem;
3213
+ padding: 0.3rem 0.65rem;
3214
+ background: var(--rf-surface-default);
3215
+ color: var(--rf-text-default);
3216
+ font-size: 0.82rem;
3217
+ cursor: pointer;
3218
+ }
3219
+
3220
+ .rf-image-viewer-stage {
3221
+ display: grid;
3222
+ grid-template-columns: auto minmax(0, 1fr) auto;
3223
+ align-items: center;
3224
+ gap: 0.65rem;
3225
+ min-height: 0;
3226
+ padding: 0.75rem;
3227
+ }
3228
+
3229
+ .rf-image-viewer-nav {
3230
+ border: 1px solid var(--rf-border-default);
3231
+ border-radius: 0.65rem;
3232
+ min-width: 3.1rem;
3233
+ min-height: 2.5rem;
3234
+ padding: 0.35rem 0.55rem;
3235
+ background: color-mix(in srgb, var(--rf-surface-default) 95%, var(--rf-color-gray-100));
3236
+ color: var(--rf-text-default);
3237
+ font-size: 0.8rem;
3238
+ cursor: pointer;
3239
+ }
3240
+
3241
+ .rf-image-viewer-nav:disabled {
3242
+ cursor: not-allowed;
3243
+ color: color-mix(in srgb, var(--rf-text-default) 45%, transparent);
3244
+ }
3245
+
3246
+ .rf-image-viewer-frame {
3247
+ margin: 0;
3248
+ min-height: 0;
3249
+ width: 100%;
3250
+ display: grid;
3251
+ place-items: center;
3252
+ border: 1px solid color-mix(in srgb, var(--rf-border-default) 78%, transparent);
3253
+ border-radius: 0.75rem;
3254
+ background: color-mix(in srgb, var(--rf-surface-inverse) 82%, var(--rf-color-black));
3255
+ overflow: hidden;
3256
+ }
3257
+
3258
+ .rf-image-viewer-image {
3259
+ width: 100%;
3260
+ max-height: calc(100vh - 10rem);
3261
+ object-fit: contain;
3262
+ display: block;
3263
+ background: color-mix(in srgb, var(--rf-surface-default) 20%, transparent);
3264
+ }
3265
+
3266
+ .rf-image-viewer-empty {
3267
+ margin: 0;
3268
+ padding: 2rem 1rem;
3269
+ font-size: 0.9rem;
3270
+ color: color-mix(in srgb, var(--rf-color-white) 85%, transparent);
3271
+ text-align: center;
3272
+ }
3273
+
3274
+ .rf-floating-panel {
3275
+ position: fixed;
3276
+ left: 0;
3277
+ right: 0;
3278
+ z-index: 980;
3279
+ width: min(100%, 36rem);
3280
+ margin-inline: auto;
3281
+ height: min(var(--rf-floating-panel-height, 17.5rem), calc(100vh - 0.5rem));
3282
+ border: 1px solid var(--rf-border-default);
3283
+ background: var(--rf-surface-default);
3284
+ color: var(--rf-text-default);
3285
+ display: grid;
3286
+ grid-template-rows: auto minmax(0, 1fr);
3287
+ box-shadow: 0 22px 44px color-mix(in srgb, var(--rf-surface-inverse) 24%, transparent);
3288
+ transition: height 190ms ease;
3289
+ overscroll-behavior: contain;
3290
+ }
3291
+
3292
+ .rf-floating-panel[data-placement="bottom"] {
3293
+ bottom: 0;
3294
+ border-bottom-width: 0;
3295
+ border-top-left-radius: 0.95rem;
3296
+ border-top-right-radius: 0.95rem;
3297
+ }
3298
+
3299
+ .rf-floating-panel[data-placement="top"] {
3300
+ top: 0;
3301
+ border-top-width: 0;
3302
+ border-bottom-left-radius: 0.95rem;
3303
+ border-bottom-right-radius: 0.95rem;
3304
+ }
3305
+
3306
+ .rf-floating-panel[data-dragging="true"] {
3307
+ transition: none;
3308
+ user-select: none;
3309
+ }
3310
+
3311
+ .rf-floating-panel-handle {
3312
+ min-height: 1.9rem;
3313
+ border: 0;
3314
+ border-bottom: 1px solid color-mix(in srgb, var(--rf-border-default) 74%, transparent);
3315
+ display: flex;
3316
+ align-items: center;
3317
+ justify-content: center;
3318
+ background: color-mix(in srgb, var(--rf-surface-default) 95%, var(--rf-color-gray-50));
3319
+ cursor: ns-resize;
3320
+ touch-action: none;
3321
+ }
3322
+
3323
+ .rf-floating-panel-handle:focus-visible {
3324
+ outline: 2px solid var(--rf-brand-default);
3325
+ outline-offset: -2px;
3326
+ }
3327
+
3328
+ .rf-floating-panel-handle-bar {
3329
+ width: 2.2rem;
3330
+ height: 0.3rem;
3331
+ border-radius: 999px;
3332
+ background: color-mix(in srgb, var(--rf-text-default) 36%, transparent);
3333
+ }
3334
+
3335
+ .rf-floating-panel-body {
3336
+ padding: 0.85rem 1rem 1rem;
3337
+ overflow: auto;
3338
+ display: grid;
3339
+ gap: 0.75rem;
3340
+ align-content: start;
3341
+ touch-action: pan-y;
3342
+ }
3343
+
3344
+ .rf-pull-to-refresh {
3345
+ width: min(100%, 36rem);
3346
+ border: 1px solid var(--rf-border-default);
3347
+ border-radius: 0.85rem;
3348
+ background: var(--rf-surface-default);
3349
+ color: var(--rf-text-default);
3350
+ overflow: hidden;
3351
+ position: relative;
3352
+ --rf-pull-to-refresh-offset: 0px;
3353
+ --rf-pull-to-refresh-threshold: 72px;
3354
+ }
3355
+
3356
+ .rf-pull-to-refresh-indicator {
3357
+ position: absolute;
3358
+ inset-inline: 0;
3359
+ top: 0;
3360
+ min-height: 2.6rem;
3361
+ display: flex;
3362
+ align-items: center;
3363
+ justify-content: center;
3364
+ padding: 0.45rem 0.75rem;
3365
+ transform: translateY(calc(var(--rf-pull-to-refresh-offset) - 100%));
3366
+ pointer-events: none;
3367
+ }
3368
+
3369
+ .rf-pull-to-refresh-label {
3370
+ font-size: 0.825rem;
3371
+ font-weight: 600;
3372
+ line-height: 1.25;
3373
+ color: color-mix(in srgb, var(--rf-text-default) 75%, transparent);
3374
+ }
3375
+
3376
+ .rf-pull-to-refresh[data-status="can-release"] .rf-pull-to-refresh-label {
3377
+ color: color-mix(in srgb, var(--rf-brand-default) 70%, var(--rf-text-default));
3378
+ }
3379
+
3380
+ .rf-pull-to-refresh[data-status="refreshing"] .rf-pull-to-refresh-label {
3381
+ color: color-mix(in srgb, var(--rf-brand-default) 78%, var(--rf-text-default));
3382
+ }
3383
+
3384
+ .rf-pull-to-refresh[data-status="complete"] .rf-pull-to-refresh-label {
3385
+ color: color-mix(in srgb, var(--rf-brand-default) 75%, var(--rf-text-default));
3386
+ }
3387
+
3388
+ .rf-pull-to-refresh-scroll {
3389
+ transform: translateY(var(--rf-pull-to-refresh-offset));
3390
+ transition: transform 180ms ease;
3391
+ max-height: 18rem;
3392
+ overflow: auto;
3393
+ overscroll-behavior: contain;
3394
+ padding: 0.85rem 1rem 1rem;
3395
+ display: grid;
3396
+ gap: 0.75rem;
3397
+ align-content: start;
3398
+ touch-action: pan-y;
3399
+ }
3400
+
3401
+ .rf-pull-to-refresh[data-dragging="true"] .rf-pull-to-refresh-scroll {
3402
+ transition: none;
3403
+ user-select: none;
3404
+ }
3405
+
3406
+ .rf-infinite-scroll {
3407
+ width: min(100%, 36rem);
3408
+ border: 1px solid var(--rf-border-default);
3409
+ border-radius: 0.75rem;
3410
+ background: var(--rf-surface-default);
3411
+ color: var(--rf-text-default);
3412
+ overflow: hidden;
3413
+ display: grid;
3414
+ grid-template-rows: minmax(0, 1fr) auto;
3415
+ }
3416
+
3417
+ .rf-infinite-scroll-viewport {
3418
+ max-height: 18rem;
3419
+ overflow: auto;
3420
+ overscroll-behavior: contain;
3421
+ padding: 0.85rem 1rem 0.7rem;
3422
+ display: grid;
3423
+ gap: 0.75rem;
3424
+ align-content: start;
3425
+ touch-action: pan-y;
3426
+ }
3427
+
3428
+ .rf-infinite-scroll-footer {
3429
+ border-top: 1px solid color-mix(in srgb, var(--rf-border-default) 84%, transparent);
3430
+ min-height: 2.2rem;
3431
+ display: flex;
3432
+ align-items: center;
3433
+ justify-content: center;
3434
+ padding: 0.4rem 0.75rem 0.55rem;
3435
+ background: color-mix(in srgb, var(--rf-surface-default) 96%, var(--rf-color-gray-50));
3436
+ }
3437
+
3438
+ .rf-infinite-scroll-status {
3439
+ font-size: 0.8125rem;
3440
+ font-weight: 600;
3441
+ line-height: 1.25;
3442
+ color: color-mix(in srgb, var(--rf-text-default) 72%, transparent);
3443
+ }
3444
+
3445
+ .rf-infinite-scroll[data-state="loading"] .rf-infinite-scroll-status {
3446
+ color: color-mix(in srgb, var(--rf-brand-default) 75%, var(--rf-text-default));
3447
+ }
3448
+
3449
+ .rf-infinite-scroll[data-state="complete"] .rf-infinite-scroll-status {
3450
+ color: color-mix(in srgb, var(--rf-text-default) 64%, transparent);
3451
+ }
3452
+
3453
+ .rf-swipe-action {
3454
+ position: relative;
3455
+ width: min(100%, 36rem);
3456
+ border: 1px solid var(--rf-border-default);
3457
+ border-radius: 0.75rem;
3458
+ background: var(--rf-surface-default);
3459
+ color: var(--rf-text-default);
3460
+ overflow: hidden;
3461
+ }
3462
+
3463
+ .rf-swipe-action-actions {
3464
+ position: absolute;
3465
+ inset-block: 0;
3466
+ display: flex;
3467
+ z-index: 0;
3468
+ }
3469
+
3470
+ .rf-swipe-action-actions[data-side="start"] {
3471
+ left: 0;
3472
+ }
3473
+
3474
+ .rf-swipe-action-actions[data-side="end"] {
3475
+ right: 0;
3476
+ }
3477
+
3478
+ .rf-swipe-action-actions[data-interactive="false"] {
3479
+ pointer-events: none;
3480
+ }
3481
+
3482
+ .rf-swipe-action-button {
3483
+ width: var(--rf-swipe-action-width, 72px);
3484
+ min-width: var(--rf-swipe-action-width, 72px);
3485
+ border: 0;
3486
+ border-inline-start: 1px solid color-mix(in srgb, var(--rf-border-default) 84%, transparent);
3487
+ background: color-mix(in srgb, var(--rf-brand-default) 12%, var(--rf-surface-default));
3488
+ color: color-mix(in srgb, var(--rf-text-default) 90%, transparent);
3489
+ font-size: 0.81rem;
3490
+ font-weight: 600;
3491
+ line-height: 1.2;
3492
+ padding: 0.6rem 0.45rem;
3493
+ cursor: pointer;
3494
+ display: inline-flex;
3495
+ align-items: center;
3496
+ justify-content: center;
3497
+ text-align: center;
3498
+ }
3499
+
3500
+ .rf-swipe-action-actions[data-side="start"] .rf-swipe-action-button {
3501
+ border-inline-start: 0;
3502
+ border-inline-end: 1px solid color-mix(in srgb, var(--rf-border-default) 84%, transparent);
3503
+ }
3504
+
3505
+ .rf-swipe-action-button[data-destructive="true"] {
3506
+ background: color-mix(in srgb, var(--rf-danger-default) 14%, var(--rf-surface-default));
3507
+ color: color-mix(in srgb, var(--rf-danger-default) 78%, var(--rf-text-default));
3508
+ }
3509
+
3510
+ .rf-swipe-action-button:disabled {
3511
+ cursor: not-allowed;
3512
+ background: color-mix(in srgb, var(--rf-surface-inverse) 5%, var(--rf-surface-default));
3513
+ color: color-mix(in srgb, var(--rf-text-default) 45%, transparent);
3514
+ }
3515
+
3516
+ .rf-swipe-action-content {
3517
+ position: relative;
3518
+ z-index: 1;
3519
+ background: var(--rf-surface-default);
3520
+ transform: translateX(var(--rf-swipe-action-offset, 0px));
3521
+ transition: transform 180ms ease;
3522
+ touch-action: pan-y;
3523
+ }
3524
+
3525
+ .rf-swipe-action[data-dragging="true"] .rf-swipe-action-content {
3526
+ transition: none;
3527
+ user-select: none;
3528
+ }
3529
+
3530
+ @media (max-width: 640px) {
3531
+ .rf-drawer-panel {
3532
+ width: 100vw;
3533
+ }
3534
+ }
3535
+
3536
+ @keyframes rf-fade-in {
3537
+ from {
3538
+ opacity: 0;
3539
+ }
3540
+
3541
+ to {
3542
+ opacity: 1;
3543
+ }
3544
+ }
3545
+
3546
+ @keyframes rf-scale-in {
3547
+ from {
3548
+ opacity: 0;
3549
+ transform: translateY(6px) scale(0.98);
3550
+ }
3551
+
3552
+ to {
3553
+ opacity: 1;
3554
+ transform: translateY(0) scale(1);
3555
+ }
3556
+ }
3557
+
3558
+ .rf-flex {
3559
+ display: flex;
3560
+ flex-direction: row;
3561
+ align-items: stretch;
3562
+ justify-content: flex-start;
3563
+ flex-wrap: nowrap;
3564
+ gap: var(--rf-flex-gap, 0.75rem);
3565
+ }
3566
+
3567
+ .rf-flex[data-direction="column"] {
3568
+ flex-direction: column;
3569
+ }
3570
+
3571
+ .rf-flex[data-align="start"] {
3572
+ align-items: flex-start;
3573
+ }
3574
+
3575
+ .rf-flex[data-align="center"] {
3576
+ align-items: center;
3577
+ }
3578
+
3579
+ .rf-flex[data-align="end"] {
3580
+ align-items: flex-end;
3581
+ }
3582
+
3583
+ .rf-flex[data-align="baseline"] {
3584
+ align-items: baseline;
3585
+ }
3586
+
3587
+ .rf-flex[data-justify="start"] {
3588
+ justify-content: flex-start;
3589
+ }
3590
+
3591
+ .rf-flex[data-justify="center"] {
3592
+ justify-content: center;
3593
+ }
3594
+
3595
+ .rf-flex[data-justify="end"] {
3596
+ justify-content: flex-end;
3597
+ }
3598
+
3599
+ .rf-flex[data-justify="between"] {
3600
+ justify-content: space-between;
3601
+ }
3602
+
3603
+ .rf-flex[data-justify="around"] {
3604
+ justify-content: space-around;
3605
+ }
3606
+
3607
+ .rf-flex[data-justify="evenly"] {
3608
+ justify-content: space-evenly;
3609
+ }
3610
+
3611
+ .rf-flex[data-wrap="wrap"] {
3612
+ flex-wrap: wrap;
3613
+ }
3614
+
3615
+ .rf-flex[data-inline="true"] {
3616
+ display: inline-flex;
3617
+ }
3618
+
3619
+ .rf-space {
3620
+ display: flex;
3621
+ flex-direction: row;
3622
+ align-items: center;
3623
+ gap: 0.75rem;
3624
+ }
3625
+
3626
+ .rf-space[data-direction="vertical"] {
3627
+ flex-direction: column;
3628
+ align-items: stretch;
3629
+ }
3630
+
3631
+ .rf-space[data-size="xs"] {
3632
+ gap: 0.25rem;
3633
+ }
3634
+
3635
+ .rf-space[data-size="sm"] {
3636
+ gap: 0.5rem;
3637
+ }
2950
3638
 
2951
3639
  .rf-space[data-size="md"] {
2952
3640
  gap: 0.75rem;
@@ -3122,8 +3810,7 @@
3122
3810
  }
3123
3811
 
3124
3812
  .rf-collapse[open] {
3125
- border-color: color-mix(in srgb, var(--rf-brand-default) 38%, var(--rf-border-default));
3126
- box-shadow: 0 4px 12px color-mix(in srgb, var(--rf-brand-default) 10%, transparent);
3813
+ border-color: var(--rf-border-default);
3127
3814
  }
3128
3815
 
3129
3816
  .rf-collapse-trigger::-webkit-details-marker {
@@ -3322,6 +4009,255 @@
3322
4009
  color: color-mix(in srgb, var(--rf-text-default) 75%, transparent);
3323
4010
  }
3324
4011
 
4012
+ .rf-image-uploader {
4013
+ width: 100%;
4014
+ max-width: 42rem;
4015
+ }
4016
+
4017
+ .rf-image-uploader-list {
4018
+ margin: 0;
4019
+ padding: 0;
4020
+ list-style: none;
4021
+ display: grid;
4022
+ grid-template-columns: 1fr;
4023
+ gap: 0.75rem;
4024
+ }
4025
+
4026
+ .rf-image-uploader .rf-image-uploader-list,
4027
+ .rf-image-uploader .rf-image-uploader-list > li {
4028
+ list-style: none !important;
4029
+ margin: 0;
4030
+ }
4031
+
4032
+ .rf-image-uploader .rf-image-uploader-list > li::marker {
4033
+ content: "";
4034
+ }
4035
+
4036
+ .rf-image-uploader-item {
4037
+ border: 1px solid var(--rf-border-default);
4038
+ border-radius: 0.9rem;
4039
+ background: var(--rf-surface-default);
4040
+ color: var(--rf-text-default);
4041
+ padding: 0.5rem;
4042
+ display: grid;
4043
+ gap: 0.3rem;
4044
+ align-content: start;
4045
+ min-width: 0;
4046
+ box-shadow: 0 1px 2px color-mix(in srgb, var(--rf-color-gray-900) 9%, transparent);
4047
+ transition:
4048
+ border-color 0.2s ease,
4049
+ box-shadow 0.2s ease;
4050
+ }
4051
+
4052
+ .rf-image-uploader-thumb {
4053
+ margin: 0;
4054
+ border-radius: 0.7rem;
4055
+ overflow: hidden;
4056
+ border: 1px solid color-mix(in srgb, var(--rf-border-default) 78%, transparent);
4057
+ background: color-mix(in srgb, var(--rf-surface-default) 84%, var(--rf-color-gray-100));
4058
+ aspect-ratio: 4 / 3;
4059
+ display: grid;
4060
+ place-items: center;
4061
+ margin-bottom: 0.08rem;
4062
+ }
4063
+
4064
+ .rf-image-uploader-image {
4065
+ width: 100%;
4066
+ height: 100%;
4067
+ object-fit: cover;
4068
+ display: block;
4069
+ transition: transform 0.2s ease;
4070
+ }
4071
+
4072
+ .rf-image-uploader-preview {
4073
+ border: 0;
4074
+ background: transparent;
4075
+ display: block;
4076
+ width: 100%;
4077
+ height: 100%;
4078
+ margin: 0;
4079
+ padding: 0;
4080
+ cursor: pointer;
4081
+ border-radius: inherit;
4082
+ overflow: hidden;
4083
+ }
4084
+
4085
+ .rf-image-uploader-preview:focus-visible {
4086
+ outline: 2px solid color-mix(in srgb, var(--rf-brand-default) 68%, white);
4087
+ outline-offset: 2px;
4088
+ }
4089
+
4090
+ .rf-image-uploader-preview:hover .rf-image-uploader-image,
4091
+ .rf-image-uploader-preview:focus-visible .rf-image-uploader-image {
4092
+ transform: scale(1.02);
4093
+ }
4094
+
4095
+ .rf-image-uploader-empty {
4096
+ font-size: 0.78rem;
4097
+ color: color-mix(in srgb, var(--rf-text-default) 64%, transparent);
4098
+ }
4099
+
4100
+ .rf-image-uploader-name {
4101
+ margin: 0;
4102
+ margin-top: 0.03rem;
4103
+ font-size: 0.82rem;
4104
+ font-weight: 600;
4105
+ line-height: 1.3;
4106
+ overflow: hidden;
4107
+ text-overflow: ellipsis;
4108
+ white-space: nowrap;
4109
+ }
4110
+
4111
+ .rf-image-uploader-status {
4112
+ margin: 0;
4113
+ font-size: 0.7rem;
4114
+ font-weight: 600;
4115
+ line-height: 1.25;
4116
+ letter-spacing: 0.01em;
4117
+ color: color-mix(in srgb, var(--rf-text-default) 78%, transparent);
4118
+ border: 1px solid color-mix(in srgb, var(--rf-border-default) 80%, transparent);
4119
+ background: color-mix(in srgb, var(--rf-surface-default) 92%, var(--rf-color-gray-100));
4120
+ border-radius: 999px;
4121
+ padding: 0.14rem 0.42rem;
4122
+ display: inline-flex;
4123
+ justify-self: start;
4124
+ margin-top: 0.03rem;
4125
+ }
4126
+
4127
+ .rf-image-uploader-item[data-uploading="true"] .rf-image-uploader-status {
4128
+ color: color-mix(in srgb, var(--rf-brand-default) 82%, var(--rf-text-default));
4129
+ border-color: color-mix(in srgb, var(--rf-brand-default) 46%, var(--rf-border-default));
4130
+ background: color-mix(in srgb, var(--rf-brand-default) 12%, var(--rf-surface-default));
4131
+ }
4132
+
4133
+ .rf-image-uploader-item[data-error="true"] .rf-image-uploader-status {
4134
+ color: color-mix(in srgb, var(--rf-danger-default) 84%, var(--rf-text-default));
4135
+ border-color: color-mix(in srgb, var(--rf-danger-default) 46%, var(--rf-border-default));
4136
+ background: color-mix(in srgb, var(--rf-danger-default) 10%, var(--rf-surface-default));
4137
+ }
4138
+
4139
+ .rf-image-uploader-remove {
4140
+ border: 1px solid var(--rf-border-default);
4141
+ border-radius: 0.58rem;
4142
+ min-height: 1.9rem;
4143
+ padding: 0.24rem 0.52rem;
4144
+ background: color-mix(in srgb, var(--rf-surface-default) 94%, var(--rf-color-gray-50));
4145
+ color: color-mix(in srgb, var(--rf-text-default) 84%, transparent);
4146
+ font-size: 0.74rem;
4147
+ font-weight: 600;
4148
+ cursor: pointer;
4149
+ width: 100%;
4150
+ text-align: center;
4151
+ justify-self: stretch;
4152
+ margin-top: 0.06rem;
4153
+ transition:
4154
+ border-color 0.2s ease,
4155
+ background-color 0.2s ease;
4156
+ }
4157
+
4158
+ .rf-image-uploader-add-wrap {
4159
+ border: 0;
4160
+ background: transparent;
4161
+ box-shadow: none;
4162
+ padding: 0;
4163
+ gap: 0;
4164
+ align-self: start;
4165
+ }
4166
+
4167
+ .rf-image-uploader-remove[data-variant="danger"] {
4168
+ border-color: color-mix(in srgb, var(--rf-danger-default) 38%, var(--rf-border-default));
4169
+ color: color-mix(in srgb, var(--rf-danger-default) 74%, var(--rf-text-default));
4170
+ }
4171
+
4172
+ .rf-image-uploader-remove[data-variant="neutral"] {
4173
+ border-color: color-mix(in srgb, var(--rf-brand-default) 34%, var(--rf-border-default));
4174
+ color: color-mix(in srgb, var(--rf-brand-default) 74%, var(--rf-text-default));
4175
+ }
4176
+
4177
+ .rf-image-uploader-add-wrap[data-hidden="true"] {
4178
+ display: none;
4179
+ }
4180
+
4181
+ .rf-image-uploader-add {
4182
+ border: 1px dashed color-mix(in srgb, var(--rf-border-default) 88%, transparent);
4183
+ border-radius: 0.9rem;
4184
+ min-height: 7rem;
4185
+ background: color-mix(in srgb, var(--rf-surface-default) 92%, var(--rf-color-gray-50));
4186
+ display: grid;
4187
+ gap: 0.35rem;
4188
+ align-content: start;
4189
+ justify-items: start;
4190
+ padding: 0.65rem;
4191
+ cursor: pointer;
4192
+ transition:
4193
+ border-color 0.2s ease,
4194
+ background-color 0.2s ease;
4195
+ }
4196
+
4197
+ .rf-image-uploader-add[data-disabled="true"] {
4198
+ cursor: not-allowed;
4199
+ opacity: 0.72;
4200
+ }
4201
+
4202
+ .rf-image-uploader-add:not([data-disabled="true"]):hover,
4203
+ .rf-image-uploader-add:not([data-disabled="true"]):focus-within {
4204
+ border-color: color-mix(in srgb, var(--rf-brand-default) 62%, var(--rf-border-default));
4205
+ background: color-mix(in srgb, var(--rf-brand-default) 7%, var(--rf-surface-default));
4206
+ }
4207
+
4208
+ .rf-image-uploader-add-icon {
4209
+ inline-size: 1.75rem;
4210
+ block-size: 1.75rem;
4211
+ border-radius: 999px;
4212
+ border: 1px solid color-mix(in srgb, var(--rf-brand-default) 38%, var(--rf-border-default));
4213
+ background: color-mix(in srgb, var(--rf-brand-default) 10%, var(--rf-surface-default));
4214
+ color: color-mix(in srgb, var(--rf-brand-default) 78%, var(--rf-text-default));
4215
+ display: grid;
4216
+ place-items: center;
4217
+ font-size: 1rem;
4218
+ font-weight: 700;
4219
+ }
4220
+
4221
+ .rf-image-uploader-add-label {
4222
+ font-size: 0.87rem;
4223
+ font-weight: 600;
4224
+ line-height: 1.25;
4225
+ }
4226
+
4227
+ .rf-image-uploader-count {
4228
+ font-size: 0.75rem;
4229
+ color: color-mix(in srgb, var(--rf-text-default) 70%, transparent);
4230
+ justify-self: start;
4231
+ }
4232
+
4233
+ .rf-image-uploader-input {
4234
+ width: 0.1px;
4235
+ height: 0.1px;
4236
+ opacity: 0;
4237
+ position: absolute;
4238
+ pointer-events: none;
4239
+ margin: -1px;
4240
+ padding: 0;
4241
+ border: 0;
4242
+ overflow: hidden;
4243
+ clip: rect(0 0 0 0);
4244
+ clip-path: inset(50%);
4245
+ white-space: nowrap;
4246
+ appearance: none;
4247
+ }
4248
+
4249
+ @media (min-width: 32rem) {
4250
+ .rf-image-uploader-list {
4251
+ grid-template-columns: repeat(2, minmax(10rem, 1fr));
4252
+ }
4253
+ }
4254
+
4255
+ @media (min-width: 48rem) {
4256
+ .rf-image-uploader-list {
4257
+ grid-template-columns: repeat(3, minmax(11rem, 1fr));
4258
+ }
4259
+ }
4260
+
3325
4261
  @keyframes rf-slide-in-right {
3326
4262
  from {
3327
4263
  transform: translateX(14px);
@@ -3346,6 +4282,18 @@
3346
4282
  }
3347
4283
  }
3348
4284
 
4285
+ @keyframes rf-slide-in-up {
4286
+ from {
4287
+ transform: translateY(14px);
4288
+ opacity: 0.7;
4289
+ }
4290
+
4291
+ to {
4292
+ transform: translateY(0);
4293
+ opacity: 1;
4294
+ }
4295
+ }
4296
+
3349
4297
  @keyframes rf-skeleton-pulse {
3350
4298
  0%,
3351
4299
  100% {
@@ -3368,9 +4316,19 @@
3368
4316
  .rf-dialog-panel,
3369
4317
  .rf-drawer-backdrop,
3370
4318
  .rf-drawer-panel,
4319
+ .rf-image-viewer-backdrop,
4320
+ .rf-image-viewer,
4321
+ .rf-action-sheet-backdrop,
4322
+ .rf-action-sheet-panel,
4323
+ .rf-floating-panel,
4324
+ .rf-pull-to-refresh-scroll,
4325
+ .rf-infinite-scroll-viewport,
4326
+ .rf-tab-bar-button,
4327
+ .rf-swipe-action-content,
3371
4328
  .rf-skeleton[data-animated="true"] .rf-skeleton-line,
3372
4329
  .rf-spinner-dot {
3373
4330
  animation: none;
4331
+ transition: none;
3374
4332
  }
3375
4333
  }
3376
4334
  }