@gravionlabs/helix-ui 22.2.1 → 22.2.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/styles.css CHANGED
@@ -1224,6 +1224,183 @@
1224
1224
  gap: var(--h-card-body-gap);
1225
1225
  }
1226
1226
 
1227
+ /* carousel */
1228
+ /*
1229
+ * Carousel: `<hx-carousel>`, from the `--h-carousel-*` tokens. The track is a flex row (column when vertical) that
1230
+ * slides with a transform; items outside the viewport stay in the DOM but are inert. The previous/next buttons are
1231
+ * neutral icon buttons on the content tokens, the indicators a tablist of pills.
1232
+ */
1233
+ .hx-carousel {
1234
+ display: block;
1235
+ }
1236
+
1237
+ .hx-carousel-header:empty,
1238
+ .hx-carousel-footer:empty {
1239
+ display: none;
1240
+ }
1241
+
1242
+ .hx-carousel-content {
1243
+ display: flex;
1244
+ align-items: center;
1245
+ gap: var(--h-carousel-content-gap);
1246
+ }
1247
+
1248
+ .hx-carousel-viewport {
1249
+ flex: 1 1 auto;
1250
+ min-width: 0;
1251
+ overflow: hidden;
1252
+ outline-color: transparent;
1253
+ border-radius: var(--h-content-border-radius);
1254
+ }
1255
+
1256
+ .hx-carousel-viewport:focus-visible {
1257
+ outline: var(--h-focus-ring-width) var(--h-focus-ring-style) var(--h-focus-ring-color);
1258
+ outline-offset: var(--h-focus-ring-offset);
1259
+ box-shadow: var(--h-focus-ring-shadow);
1260
+ }
1261
+
1262
+ .hx-carousel-track {
1263
+ display: flex;
1264
+ transition: transform var(--h-carousel-transition-duration) ease;
1265
+ }
1266
+
1267
+ .hx-carousel-item {
1268
+ flex: 0 0 auto;
1269
+ box-sizing: border-box;
1270
+ min-width: 0;
1271
+ }
1272
+
1273
+ .hx-carousel-vertical .hx-carousel-content {
1274
+ flex-direction: column;
1275
+ }
1276
+
1277
+ .hx-carousel-vertical .hx-carousel-viewport {
1278
+ width: 100%;
1279
+ }
1280
+
1281
+ .hx-carousel-vertical .hx-carousel-track {
1282
+ flex-direction: column;
1283
+ height: 100%;
1284
+ }
1285
+
1286
+ .hx-carousel-button {
1287
+ display: inline-flex;
1288
+ align-items: center;
1289
+ justify-content: center;
1290
+ flex: none;
1291
+ width: 2.5rem;
1292
+ height: 2.5rem;
1293
+ padding: 0;
1294
+ border: 0;
1295
+ border-radius: 50%;
1296
+ background: transparent;
1297
+ color: var(--h-text-muted-color);
1298
+ cursor: pointer;
1299
+ outline-color: transparent;
1300
+ transition: background var(--h-carousel-transition-duration), color var(--h-carousel-transition-duration);
1301
+ }
1302
+
1303
+ .hx-carousel-button:hover:not(:disabled) {
1304
+ background: var(--h-content-hover-background);
1305
+ color: var(--h-text-hover-muted-color);
1306
+ }
1307
+
1308
+ .hx-carousel-button:focus-visible {
1309
+ outline: var(--h-focus-ring-width) var(--h-focus-ring-style) var(--h-focus-ring-color);
1310
+ outline-offset: var(--h-focus-ring-offset);
1311
+ box-shadow: var(--h-focus-ring-shadow);
1312
+ }
1313
+
1314
+ .hx-carousel-button:disabled {
1315
+ opacity: 0.4;
1316
+ cursor: default;
1317
+ }
1318
+
1319
+ .hx-carousel-prev::before {
1320
+ display: inline-block;
1321
+ flex: none;
1322
+ width: 1.25rem;
1323
+ height: 1.25rem;
1324
+ background: currentcolor;
1325
+ mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m15 6-6 6 6 6'/%3E%3C/svg%3E") center/contain no-repeat;
1326
+ -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m15 6-6 6 6 6'/%3E%3C/svg%3E") center/contain no-repeat;
1327
+ content: "";
1328
+ }
1329
+
1330
+ .hx-carousel-next::before {
1331
+ display: inline-block;
1332
+ flex: none;
1333
+ width: 1.25rem;
1334
+ height: 1.25rem;
1335
+ background: currentcolor;
1336
+ mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m9 6 6 6-6 6'/%3E%3C/svg%3E") center/contain no-repeat;
1337
+ -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m9 6 6 6-6 6'/%3E%3C/svg%3E") center/contain no-repeat;
1338
+ content: "";
1339
+ }
1340
+
1341
+ .hx-carousel-vertical .hx-carousel-prev::before {
1342
+ display: inline-block;
1343
+ flex: none;
1344
+ width: 1.25rem;
1345
+ height: 1.25rem;
1346
+ background: currentcolor;
1347
+ mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 15 6-6 6 6'/%3E%3C/svg%3E") center/contain no-repeat;
1348
+ -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 15 6-6 6 6'/%3E%3C/svg%3E") center/contain no-repeat;
1349
+ }
1350
+
1351
+ .hx-carousel-vertical .hx-carousel-next::before {
1352
+ display: inline-block;
1353
+ flex: none;
1354
+ width: 1.25rem;
1355
+ height: 1.25rem;
1356
+ background: currentcolor;
1357
+ mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E") center/contain no-repeat;
1358
+ -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E") center/contain no-repeat;
1359
+ }
1360
+
1361
+ .hx-carousel-indicators {
1362
+ display: flex;
1363
+ flex-wrap: wrap;
1364
+ justify-content: center;
1365
+ gap: var(--h-carousel-indicator-list-gap);
1366
+ padding: var(--h-carousel-indicator-list-padding);
1367
+ }
1368
+
1369
+ .hx-carousel-indicator {
1370
+ width: var(--h-carousel-indicator-width);
1371
+ height: var(--h-carousel-indicator-height);
1372
+ padding: 0;
1373
+ border: 0;
1374
+ border-radius: var(--h-carousel-indicator-border-radius);
1375
+ background: var(--h-carousel-indicator-background);
1376
+ cursor: pointer;
1377
+ outline-color: transparent;
1378
+ transition: background var(--h-carousel-transition-duration);
1379
+ }
1380
+
1381
+ .hx-carousel-indicator:hover {
1382
+ background: var(--h-carousel-indicator-hover-background);
1383
+ }
1384
+
1385
+ .hx-carousel-indicator-active,
1386
+ .hx-carousel-indicator-active:hover {
1387
+ background: var(--h-carousel-indicator-active-background);
1388
+ }
1389
+
1390
+ .hx-carousel-indicator:focus-visible {
1391
+ outline: var(--h-carousel-indicator-focus-ring-width) var(--h-carousel-indicator-focus-ring-style) var(--h-carousel-indicator-focus-ring-color);
1392
+ outline-offset: var(--h-carousel-indicator-focus-ring-offset);
1393
+ box-shadow: var(--h-carousel-indicator-focus-ring-shadow);
1394
+ }
1395
+
1396
+ @media (prefers-reduced-motion: reduce) {
1397
+ .hx-carousel-track,
1398
+ .hx-carousel-button,
1399
+ .hx-carousel-indicator {
1400
+ transition: none;
1401
+ }
1402
+ }
1403
+
1227
1404
  /* chart */
1228
1405
  /*
1229
1406
  * Chart: `<hx-chart>`. Layout only: the colours, grid and font are handed to chart.js from the semantic tokens by the
@@ -2772,6 +2949,417 @@
2772
2949
  }
2773
2950
  }
2774
2951
 
2952
+ /* galleria */
2953
+ /*
2954
+ * Galleria: `<hx-galleria>`, from the `--h-galleria-*` tokens. The stage is a black box with the picture, the
2955
+ * previous/next buttons and the caption laid over it; the thumbnails are a tablist in a strip with their own
2956
+ * scroll buttons. Full screen is the same box in a CDK dialog over a dark backdrop.
2957
+ */
2958
+ .hx-galleria-host {
2959
+ display: block;
2960
+ }
2961
+
2962
+ .hx-galleria {
2963
+ display: block;
2964
+ overflow: hidden;
2965
+ border: var(--h-galleria-border-width) solid var(--h-galleria-border-color);
2966
+ border-radius: var(--h-galleria-border-radius);
2967
+ background: var(--h-content-background);
2968
+ }
2969
+
2970
+ .hx-galleria-content {
2971
+ display: flex;
2972
+ flex-direction: column;
2973
+ }
2974
+
2975
+ .hx-galleria-thumbnails-top .hx-galleria-content {
2976
+ flex-direction: column-reverse;
2977
+ }
2978
+
2979
+ .hx-galleria-thumbnails-left .hx-galleria-content {
2980
+ flex-direction: row-reverse;
2981
+ }
2982
+
2983
+ .hx-galleria-thumbnails-right .hx-galleria-content {
2984
+ flex-direction: row;
2985
+ }
2986
+
2987
+ .hx-galleria-stage {
2988
+ position: relative;
2989
+ flex: 1 1 auto;
2990
+ min-width: 0;
2991
+ min-height: 0;
2992
+ display: flex;
2993
+ align-items: center;
2994
+ justify-content: center;
2995
+ background: rgb(0, 0, 0);
2996
+ outline-color: transparent;
2997
+ }
2998
+
2999
+ .hx-galleria-stage:focus-visible {
3000
+ outline: var(--h-focus-ring-width) var(--h-focus-ring-style) var(--h-focus-ring-color);
3001
+ outline-offset: calc(-1 * var(--h-focus-ring-width));
3002
+ }
3003
+
3004
+ .hx-galleria-item {
3005
+ display: flex;
3006
+ align-items: center;
3007
+ justify-content: center;
3008
+ width: 100%;
3009
+ height: 100%;
3010
+ }
3011
+
3012
+ .hx-galleria-image {
3013
+ display: block;
3014
+ max-width: 100%;
3015
+ max-height: 100%;
3016
+ object-fit: contain;
3017
+ }
3018
+
3019
+ .hx-galleria-nav {
3020
+ position: absolute;
3021
+ top: 50%;
3022
+ transform: translateY(-50%);
3023
+ display: inline-flex;
3024
+ align-items: center;
3025
+ justify-content: center;
3026
+ width: var(--h-galleria-nav-button-size);
3027
+ height: var(--h-galleria-nav-button-size);
3028
+ padding: 0;
3029
+ border: 0;
3030
+ background: var(--h-galleria-nav-button-background);
3031
+ color: var(--h-galleria-nav-button-color);
3032
+ cursor: pointer;
3033
+ outline-color: transparent;
3034
+ transition: background var(--h-galleria-transition-duration), color var(--h-galleria-transition-duration);
3035
+ }
3036
+
3037
+ .hx-galleria-prev {
3038
+ inset-inline-start: var(--h-galleria-nav-button-gutter);
3039
+ border-radius: var(--h-galleria-nav-button-prev-border-radius);
3040
+ }
3041
+
3042
+ .hx-galleria-next {
3043
+ inset-inline-end: var(--h-galleria-nav-button-gutter);
3044
+ border-radius: var(--h-galleria-nav-button-next-border-radius);
3045
+ }
3046
+
3047
+ .hx-galleria-nav:hover:not(:disabled) {
3048
+ background: var(--h-galleria-nav-button-hover-background);
3049
+ color: var(--h-galleria-nav-button-hover-color);
3050
+ }
3051
+
3052
+ .hx-galleria-nav:focus-visible {
3053
+ outline: var(--h-galleria-nav-button-focus-ring-width) var(--h-galleria-nav-button-focus-ring-style) var(--h-galleria-nav-button-focus-ring-color);
3054
+ outline-offset: var(--h-galleria-nav-button-focus-ring-offset);
3055
+ box-shadow: var(--h-galleria-nav-button-focus-ring-shadow);
3056
+ }
3057
+
3058
+ .hx-galleria-nav:disabled {
3059
+ opacity: 0.4;
3060
+ cursor: default;
3061
+ }
3062
+
3063
+ .hx-galleria-prev::before {
3064
+ display: inline-block;
3065
+ flex: none;
3066
+ width: var(--h-galleria-nav-icon-size);
3067
+ height: var(--h-galleria-nav-icon-size);
3068
+ background: currentcolor;
3069
+ mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m15 6-6 6 6 6'/%3E%3C/svg%3E") center/contain no-repeat;
3070
+ -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m15 6-6 6 6 6'/%3E%3C/svg%3E") center/contain no-repeat;
3071
+ content: "";
3072
+ }
3073
+
3074
+ .hx-galleria-next::before {
3075
+ display: inline-block;
3076
+ flex: none;
3077
+ width: var(--h-galleria-nav-icon-size);
3078
+ height: var(--h-galleria-nav-icon-size);
3079
+ background: currentcolor;
3080
+ mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m9 6 6 6-6 6'/%3E%3C/svg%3E") center/contain no-repeat;
3081
+ -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m9 6 6 6-6 6'/%3E%3C/svg%3E") center/contain no-repeat;
3082
+ content: "";
3083
+ }
3084
+
3085
+ .hx-galleria-caption {
3086
+ position: absolute;
3087
+ inset-inline: 0;
3088
+ bottom: 0;
3089
+ padding: var(--h-galleria-caption-padding);
3090
+ background: var(--h-galleria-caption-background);
3091
+ color: var(--h-galleria-caption-color);
3092
+ }
3093
+
3094
+ .hx-galleria-caption-title {
3095
+ font-weight: 600;
3096
+ }
3097
+
3098
+ .hx-galleria-indicators {
3099
+ position: absolute;
3100
+ inset-inline: 0;
3101
+ bottom: 0;
3102
+ display: flex;
3103
+ justify-content: center;
3104
+ gap: var(--h-galleria-indicator-list-gap);
3105
+ padding: var(--h-galleria-indicator-list-padding);
3106
+ background: var(--h-galleria-inset-indicator-list-background);
3107
+ }
3108
+
3109
+ .hx-galleria-caption ~ .hx-galleria-indicators {
3110
+ background: transparent;
3111
+ }
3112
+
3113
+ .hx-galleria-indicator {
3114
+ width: var(--h-galleria-indicator-button-width);
3115
+ height: var(--h-galleria-indicator-button-height);
3116
+ padding: 0;
3117
+ border: 0;
3118
+ border-radius: var(--h-galleria-indicator-button-border-radius);
3119
+ background: var(--h-galleria-inset-indicator-button-background);
3120
+ cursor: pointer;
3121
+ outline-color: transparent;
3122
+ }
3123
+
3124
+ .hx-galleria-indicator:hover {
3125
+ background: var(--h-galleria-inset-indicator-button-hover-background);
3126
+ }
3127
+
3128
+ .hx-galleria-indicator-active,
3129
+ .hx-galleria-indicator-active:hover {
3130
+ background: var(--h-galleria-inset-indicator-button-active-background);
3131
+ }
3132
+
3133
+ .hx-galleria-indicator:focus-visible {
3134
+ outline: var(--h-galleria-indicator-button-focus-ring-width) var(--h-galleria-indicator-button-focus-ring-style) var(--h-galleria-indicator-button-focus-ring-color);
3135
+ outline-offset: var(--h-galleria-indicator-button-focus-ring-offset);
3136
+ box-shadow: var(--h-galleria-indicator-button-focus-ring-shadow);
3137
+ }
3138
+
3139
+ .hx-galleria-thumbnails {
3140
+ display: flex;
3141
+ align-items: center;
3142
+ gap: var(--h-galleria-thumbnail-nav-button-gutter);
3143
+ padding: var(--h-galleria-thumbnails-content-padding);
3144
+ background: var(--h-galleria-thumbnails-content-background);
3145
+ }
3146
+
3147
+ .hx-galleria-thumbnails-left .hx-galleria-thumbnails,
3148
+ .hx-galleria-thumbnails-right .hx-galleria-thumbnails {
3149
+ flex-direction: column;
3150
+ }
3151
+
3152
+ .hx-galleria-thumbnail-list {
3153
+ display: flex;
3154
+ flex: 1 1 auto;
3155
+ min-width: 0;
3156
+ justify-content: center;
3157
+ gap: 0.5rem;
3158
+ overflow: hidden;
3159
+ }
3160
+
3161
+ .hx-galleria-thumbnails-left .hx-galleria-thumbnail-list,
3162
+ .hx-galleria-thumbnails-right .hx-galleria-thumbnail-list {
3163
+ flex-direction: column;
3164
+ }
3165
+
3166
+ .hx-galleria-thumbnail {
3167
+ flex: 0 1 auto;
3168
+ min-width: 0;
3169
+ padding: 0.125rem;
3170
+ border: 0;
3171
+ border-radius: var(--h-content-border-radius);
3172
+ background: transparent;
3173
+ cursor: pointer;
3174
+ opacity: 0.6;
3175
+ outline-color: transparent;
3176
+ transition: opacity var(--h-galleria-transition-duration);
3177
+ }
3178
+
3179
+ .hx-galleria-thumbnail:hover,
3180
+ .hx-galleria-thumbnail-active {
3181
+ opacity: 1;
3182
+ }
3183
+
3184
+ .hx-galleria-thumbnail-active {
3185
+ box-shadow: 0 0 0 2px var(--h-primary-color);
3186
+ }
3187
+
3188
+ .hx-galleria-thumbnail:focus-visible {
3189
+ outline: var(--h-focus-ring-width) var(--h-focus-ring-style) var(--h-focus-ring-color);
3190
+ outline-offset: var(--h-focus-ring-offset);
3191
+ }
3192
+
3193
+ .hx-galleria-thumbnail-image {
3194
+ display: block;
3195
+ height: 4rem;
3196
+ width: auto;
3197
+ max-width: 100%;
3198
+ border-radius: calc(var(--h-content-border-radius) - 2px);
3199
+ object-fit: cover;
3200
+ }
3201
+
3202
+ .hx-galleria-thumbnail-nav {
3203
+ display: inline-flex;
3204
+ align-items: center;
3205
+ justify-content: center;
3206
+ flex: none;
3207
+ width: var(--h-galleria-thumbnail-nav-button-size);
3208
+ height: var(--h-galleria-thumbnail-nav-button-size);
3209
+ padding: 0;
3210
+ border: 0;
3211
+ border-radius: var(--h-galleria-thumbnail-nav-button-border-radius);
3212
+ background: transparent;
3213
+ color: var(--h-galleria-thumbnail-nav-button-color);
3214
+ cursor: pointer;
3215
+ outline-color: transparent;
3216
+ }
3217
+
3218
+ .hx-galleria-thumbnail-nav:hover:not(:disabled) {
3219
+ background: var(--h-galleria-thumbnail-nav-button-hover-background);
3220
+ color: var(--h-galleria-thumbnail-nav-button-hover-color);
3221
+ }
3222
+
3223
+ .hx-galleria-thumbnail-nav:focus-visible {
3224
+ outline: var(--h-galleria-thumbnail-nav-button-focus-ring-width) var(--h-galleria-thumbnail-nav-button-focus-ring-style) var(--h-galleria-thumbnail-nav-button-focus-ring-color);
3225
+ outline-offset: var(--h-galleria-thumbnail-nav-button-focus-ring-offset);
3226
+ box-shadow: var(--h-galleria-thumbnail-nav-button-focus-ring-shadow);
3227
+ }
3228
+
3229
+ .hx-galleria-thumbnail-nav:disabled {
3230
+ opacity: 0.4;
3231
+ cursor: default;
3232
+ }
3233
+
3234
+ .hx-galleria-thumbnail-prev::before {
3235
+ display: inline-block;
3236
+ flex: none;
3237
+ width: var(--h-galleria-thumbnail-nav-button-icon-size);
3238
+ height: var(--h-galleria-thumbnail-nav-button-icon-size);
3239
+ background: currentcolor;
3240
+ mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m15 6-6 6 6 6'/%3E%3C/svg%3E") center/contain no-repeat;
3241
+ -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m15 6-6 6 6 6'/%3E%3C/svg%3E") center/contain no-repeat;
3242
+ content: "";
3243
+ }
3244
+
3245
+ .hx-galleria-thumbnail-next::before {
3246
+ display: inline-block;
3247
+ flex: none;
3248
+ width: var(--h-galleria-thumbnail-nav-button-icon-size);
3249
+ height: var(--h-galleria-thumbnail-nav-button-icon-size);
3250
+ background: currentcolor;
3251
+ mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m9 6 6 6-6 6'/%3E%3C/svg%3E") center/contain no-repeat;
3252
+ -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m9 6 6 6-6 6'/%3E%3C/svg%3E") center/contain no-repeat;
3253
+ content: "";
3254
+ }
3255
+
3256
+ .hx-galleria-thumbnails-left .hx-galleria-thumbnail-prev::before,
3257
+ .hx-galleria-thumbnails-right .hx-galleria-thumbnail-prev::before {
3258
+ display: inline-block;
3259
+ flex: none;
3260
+ width: var(--h-galleria-thumbnail-nav-button-icon-size);
3261
+ height: var(--h-galleria-thumbnail-nav-button-icon-size);
3262
+ background: currentcolor;
3263
+ mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 15 6-6 6 6'/%3E%3C/svg%3E") center/contain no-repeat;
3264
+ -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 15 6-6 6 6'/%3E%3C/svg%3E") center/contain no-repeat;
3265
+ }
3266
+
3267
+ .hx-galleria-thumbnails-left .hx-galleria-thumbnail-next::before,
3268
+ .hx-galleria-thumbnails-right .hx-galleria-thumbnail-next::before {
3269
+ display: inline-block;
3270
+ flex: none;
3271
+ width: var(--h-galleria-thumbnail-nav-button-icon-size);
3272
+ height: var(--h-galleria-thumbnail-nav-button-icon-size);
3273
+ background: currentcolor;
3274
+ mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E") center/contain no-repeat;
3275
+ -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E") center/contain no-repeat;
3276
+ }
3277
+
3278
+ /* full screen: the box fills the dialog pane over a dark backdrop */
3279
+ .hx-galleria-backdrop {
3280
+ background: rgba(0, 0, 0, 0.9);
3281
+ }
3282
+
3283
+ .hx-galleria-panel {
3284
+ display: flex;
3285
+ }
3286
+
3287
+ .hx-galleria-fullscreen {
3288
+ position: relative;
3289
+ display: flex;
3290
+ flex-direction: column;
3291
+ width: 100%;
3292
+ height: 100%;
3293
+ border: 0;
3294
+ border-radius: 0;
3295
+ background: transparent;
3296
+ }
3297
+
3298
+ .hx-galleria-fullscreen .hx-galleria-content {
3299
+ flex: 1 1 auto;
3300
+ min-height: 0;
3301
+ }
3302
+
3303
+ .hx-galleria-fullscreen .hx-galleria-stage {
3304
+ background: transparent;
3305
+ }
3306
+
3307
+ .hx-galleria-fullscreen .hx-galleria-thumbnails {
3308
+ background: transparent;
3309
+ }
3310
+
3311
+ .hx-galleria-fullscreen .hx-galleria-image {
3312
+ max-height: calc(100vh - 8rem);
3313
+ }
3314
+
3315
+ .hx-galleria-close {
3316
+ position: absolute;
3317
+ top: var(--h-galleria-close-button-gutter);
3318
+ inset-inline-end: var(--h-galleria-close-button-gutter);
3319
+ z-index: 1;
3320
+ display: inline-flex;
3321
+ align-items: center;
3322
+ justify-content: center;
3323
+ width: var(--h-galleria-close-button-size);
3324
+ height: var(--h-galleria-close-button-size);
3325
+ padding: 0;
3326
+ border: 0;
3327
+ border-radius: var(--h-galleria-close-button-border-radius);
3328
+ background: var(--h-galleria-close-button-background);
3329
+ color: var(--h-galleria-close-button-color);
3330
+ cursor: pointer;
3331
+ outline-color: transparent;
3332
+ }
3333
+
3334
+ .hx-galleria-close:hover {
3335
+ background: var(--h-galleria-close-button-hover-background);
3336
+ color: var(--h-galleria-close-button-hover-color);
3337
+ }
3338
+
3339
+ .hx-galleria-close:focus-visible {
3340
+ outline: var(--h-galleria-close-button-focus-ring-width) var(--h-galleria-close-button-focus-ring-style) var(--h-galleria-close-button-focus-ring-color);
3341
+ outline-offset: var(--h-galleria-close-button-focus-ring-offset);
3342
+ box-shadow: var(--h-galleria-close-button-focus-ring-shadow);
3343
+ }
3344
+
3345
+ .hx-galleria-close::before {
3346
+ display: inline-block;
3347
+ flex: none;
3348
+ width: var(--h-galleria-close-button-icon-size);
3349
+ height: var(--h-galleria-close-button-icon-size);
3350
+ background: currentcolor;
3351
+ mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 6l12 12M18 6 6 18'/%3E%3C/svg%3E") center/contain no-repeat;
3352
+ -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 6l12 12M18 6 6 18'/%3E%3C/svg%3E") center/contain no-repeat;
3353
+ content: "";
3354
+ }
3355
+
3356
+ @media (prefers-reduced-motion: reduce) {
3357
+ .hx-galleria-nav,
3358
+ .hx-galleria-thumbnail {
3359
+ transition: none;
3360
+ }
3361
+ }
3362
+
2775
3363
  /* icon-field */
2776
3364
  /*
2777
3365
  * Icon field: `<hx-icon-field>` around an `hx-input` and an `[hx-input-icon]` element. The icon is placed
@@ -2833,6 +3421,216 @@
2833
3421
  padding-inline-end: calc(var(--hx-icon-field-x) * 2 + 1em);
2834
3422
  }
2835
3423
 
3424
+ /* image */
3425
+ /*
3426
+ * Image: `<hx-image>`, from the `--h-image-*` tokens. Inline it is the picture with, when `preview` is set, a button
3427
+ * over it that shows a mask and an eye on hover and focus. The preview is a CDK dialog over a dark backdrop with a
3428
+ * floating toolbar (rotate, zoom, close); the picture turns and scales with a transform.
3429
+ */
3430
+ .hx-image {
3431
+ position: relative;
3432
+ display: inline-block;
3433
+ line-height: 0;
3434
+ }
3435
+
3436
+ .hx-image-img {
3437
+ display: block;
3438
+ max-width: 100%;
3439
+ }
3440
+
3441
+ /* with a preview the picture itself hints at the click */
3442
+ .hx-image-preview .hx-image-img {
3443
+ cursor: zoom-in;
3444
+ }
3445
+
3446
+ .hx-image-preview-mask {
3447
+ position: absolute;
3448
+ inset: 0;
3449
+ display: flex;
3450
+ align-items: center;
3451
+ justify-content: center;
3452
+ padding: 0;
3453
+ border: 0;
3454
+ background: transparent;
3455
+ color: var(--h-image-preview-mask-color);
3456
+ cursor: pointer;
3457
+ opacity: 0;
3458
+ outline-color: transparent;
3459
+ transition: opacity var(--h-image-transition-duration);
3460
+ }
3461
+
3462
+ .hx-image-preview-mask:hover,
3463
+ .hx-image-preview-mask:focus-visible {
3464
+ background: var(--h-image-preview-mask-background);
3465
+ opacity: 1;
3466
+ }
3467
+
3468
+ .hx-image-preview-mask:focus-visible {
3469
+ outline: var(--h-focus-ring-width) var(--h-focus-ring-style) var(--h-focus-ring-color);
3470
+ outline-offset: calc(-1 * var(--h-focus-ring-width));
3471
+ }
3472
+
3473
+ .hx-image-preview-icon {
3474
+ display: inline-block;
3475
+ flex: none;
3476
+ width: var(--h-image-preview-icon-size);
3477
+ height: var(--h-image-preview-icon-size);
3478
+ background: currentcolor;
3479
+ mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M2.5 12S6 5.5 12 5.5 21.5 12 21.5 12 18 18.5 12 18.5 2.5 12 2.5 12ZM15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z'/%3E%3C/svg%3E") center/contain no-repeat;
3480
+ -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M2.5 12S6 5.5 12 5.5 21.5 12 21.5 12 18 18.5 12 18.5 2.5 12 2.5 12ZM15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z'/%3E%3C/svg%3E") center/contain no-repeat;
3481
+ }
3482
+
3483
+ /* the preview overlay */
3484
+ .hx-image-backdrop {
3485
+ background: rgba(0, 0, 0, 0.9);
3486
+ }
3487
+
3488
+ .hx-image-panel {
3489
+ display: flex;
3490
+ }
3491
+
3492
+ .hx-image-overlay {
3493
+ position: relative;
3494
+ display: flex;
3495
+ flex: 1 1 auto;
3496
+ width: 100%;
3497
+ height: 100%;
3498
+ }
3499
+
3500
+ .hx-image-stage {
3501
+ display: flex;
3502
+ flex: 1 1 auto;
3503
+ align-items: center;
3504
+ justify-content: center;
3505
+ overflow: auto;
3506
+ padding: 1rem;
3507
+ }
3508
+
3509
+ .hx-image-original {
3510
+ display: block;
3511
+ max-width: calc(100vw - 2rem);
3512
+ max-height: calc(100vh - 2rem);
3513
+ object-fit: contain;
3514
+ transition: transform var(--h-image-transition-duration);
3515
+ }
3516
+
3517
+ .hx-image-toolbar {
3518
+ position: absolute;
3519
+ top: var(--h-image-toolbar-position-top);
3520
+ right: var(--h-image-toolbar-position-right);
3521
+ bottom: var(--h-image-toolbar-position-bottom);
3522
+ left: var(--h-image-toolbar-position-left);
3523
+ z-index: 1;
3524
+ display: flex;
3525
+ gap: var(--h-image-toolbar-gap);
3526
+ padding: var(--h-image-toolbar-padding);
3527
+ border: var(--h-image-toolbar-border-width) solid var(--h-image-toolbar-border-color);
3528
+ border-radius: var(--h-image-toolbar-border-radius);
3529
+ background: var(--h-image-toolbar-background);
3530
+ backdrop-filter: blur(var(--h-image-toolbar-blur));
3531
+ }
3532
+
3533
+ .hx-image-close-only {
3534
+ position: absolute;
3535
+ top: var(--h-image-toolbar-position-top);
3536
+ right: var(--h-image-toolbar-position-right);
3537
+ z-index: 1;
3538
+ }
3539
+
3540
+ .hx-image-action {
3541
+ display: inline-flex;
3542
+ align-items: center;
3543
+ justify-content: center;
3544
+ width: var(--h-image-action-size);
3545
+ height: var(--h-image-action-size);
3546
+ padding: 0;
3547
+ border: 0;
3548
+ border-radius: var(--h-image-action-border-radius);
3549
+ background: transparent;
3550
+ color: var(--h-image-action-color);
3551
+ cursor: pointer;
3552
+ outline-color: transparent;
3553
+ transition: background var(--h-image-transition-duration), color var(--h-image-transition-duration);
3554
+ }
3555
+
3556
+ .hx-image-action:hover:not(:disabled) {
3557
+ background: var(--h-image-action-hover-background);
3558
+ color: var(--h-image-action-hover-color);
3559
+ }
3560
+
3561
+ .hx-image-action:focus-visible {
3562
+ outline: var(--h-image-action-focus-ring-width) var(--h-image-action-focus-ring-style) var(--h-image-action-focus-ring-color);
3563
+ outline-offset: var(--h-image-action-focus-ring-offset);
3564
+ box-shadow: var(--h-image-action-focus-ring-shadow);
3565
+ }
3566
+
3567
+ .hx-image-action:disabled {
3568
+ opacity: 0.4;
3569
+ cursor: default;
3570
+ }
3571
+
3572
+ .hx-image-action::before {
3573
+ content: "";
3574
+ }
3575
+
3576
+ .hx-image-rotate-left::before {
3577
+ display: inline-block;
3578
+ flex: none;
3579
+ width: var(--h-image-action-icon-size);
3580
+ height: var(--h-image-action-icon-size);
3581
+ background: currentcolor;
3582
+ mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4.5 12a7.5 7.5 0 1 0 2.2-5.3L4.5 9M4.5 4v5h5'/%3E%3C/svg%3E") center/contain no-repeat;
3583
+ -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4.5 12a7.5 7.5 0 1 0 2.2-5.3L4.5 9M4.5 4v5h5'/%3E%3C/svg%3E") center/contain no-repeat;
3584
+ }
3585
+
3586
+ .hx-image-rotate-right::before {
3587
+ display: inline-block;
3588
+ flex: none;
3589
+ width: var(--h-image-action-icon-size);
3590
+ height: var(--h-image-action-icon-size);
3591
+ background: currentcolor;
3592
+ mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M19.5 12a7.5 7.5 0 1 1-2.2-5.3L19.5 9M19.5 4v5h-5'/%3E%3C/svg%3E") center/contain no-repeat;
3593
+ -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M19.5 12a7.5 7.5 0 1 1-2.2-5.3L19.5 9M19.5 4v5h-5'/%3E%3C/svg%3E") center/contain no-repeat;
3594
+ }
3595
+
3596
+ .hx-image-zoom-out::before {
3597
+ display: inline-block;
3598
+ flex: none;
3599
+ width: var(--h-image-action-icon-size);
3600
+ height: var(--h-image-action-icon-size);
3601
+ background: currentcolor;
3602
+ mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M17.5 11a6.5 6.5 0 1 1-13 0 6.5 6.5 0 0 1 13 0ZM16 16l4.5 4.5M8.5 11h5'/%3E%3C/svg%3E") center/contain no-repeat;
3603
+ -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M17.5 11a6.5 6.5 0 1 1-13 0 6.5 6.5 0 0 1 13 0ZM16 16l4.5 4.5M8.5 11h5'/%3E%3C/svg%3E") center/contain no-repeat;
3604
+ }
3605
+
3606
+ .hx-image-zoom-in::before {
3607
+ display: inline-block;
3608
+ flex: none;
3609
+ width: var(--h-image-action-icon-size);
3610
+ height: var(--h-image-action-icon-size);
3611
+ background: currentcolor;
3612
+ mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M17.5 11a6.5 6.5 0 1 1-13 0 6.5 6.5 0 0 1 13 0ZM16 16l4.5 4.5M11 8.5v5M8.5 11h5'/%3E%3C/svg%3E") center/contain no-repeat;
3613
+ -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M17.5 11a6.5 6.5 0 1 1-13 0 6.5 6.5 0 0 1 13 0ZM16 16l4.5 4.5M11 8.5v5M8.5 11h5'/%3E%3C/svg%3E") center/contain no-repeat;
3614
+ }
3615
+
3616
+ .hx-image-close::before {
3617
+ display: inline-block;
3618
+ flex: none;
3619
+ width: var(--h-image-action-icon-size);
3620
+ height: var(--h-image-action-icon-size);
3621
+ background: currentcolor;
3622
+ mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 6l12 12M18 6 6 18'/%3E%3C/svg%3E") center/contain no-repeat;
3623
+ -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 6l12 12M18 6 6 18'/%3E%3C/svg%3E") center/contain no-repeat;
3624
+ }
3625
+
3626
+ @media (prefers-reduced-motion: reduce) {
3627
+ .hx-image-preview-mask,
3628
+ .hx-image-original,
3629
+ .hx-image-action {
3630
+ transition: none;
3631
+ }
3632
+ }
3633
+
2836
3634
  /* input-group */
2837
3635
  /*
2838
3636
  * Input group: `<hx-input-group>` joins fields, selects, number fields, buttons and `<hx-input-group-addon>`