@rolemodel/optics 1.3.0 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2019,34 +2019,38 @@ small {
2019
2019
  }
2020
2020
 
2021
2021
  .accordion {
2022
- --_op-accordion-summary-min-height: calc(8 * var(--op-size-unit));
2023
- }
2024
- .accordion summary {
2025
- display: grid;
2026
- min-height: var(--_op-accordion-summary-min-height);
2027
- align-items: center;
2028
- cursor: pointer;
2029
- gap: var(--op-space-2x-small);
2030
- grid-template-columns: auto 1fr auto;
2031
- }
2032
- .accordion summary::marker, .accordion summary::-webkit-details-marker {
2033
- display: none;
2034
- content: "";
2035
- }
2036
- .accordion summary .accordion__label {
2037
- color: var(--op-color-neutral-on-plus-max);
2038
- font-size: var(--op-font-x-small);
2039
- font-weight: var(--op-font-weight-semi-bold);
2040
- }
2041
- .accordion summary .accordion__marker {
2042
- --op-mso-optical-sizing: 48;
2043
- font-size: var(--op-font-x-large);
2044
- justify-self: flex-end;
2045
- transition: var(--op-transition-accordion);
2046
- user-select: none;
2047
- }
2048
- [open].accordion summary .accordion__marker {
2049
- rotate: 0.25turn;
2022
+ /* Public API (customizable component options) */
2023
+ --_op-accordion-summary-min-height: calc(8 * var(--op-size-unit)); /* 32px */
2024
+ summary {
2025
+ display: grid;
2026
+ min-height: var(--_op-accordion-summary-min-height);
2027
+ align-items: center;
2028
+ cursor: pointer;
2029
+ gap: var(--op-space-2x-small);
2030
+ grid-template-columns: auto 1fr auto;
2031
+ &::marker,
2032
+ &::-webkit-details-marker {
2033
+ display: none;
2034
+ content: "";
2035
+ }
2036
+ .accordion__label {
2037
+ color: var(--op-color-neutral-on-plus-max);
2038
+ font-size: var(--op-font-x-small);
2039
+ font-weight: var(--op-font-weight-semi-bold);
2040
+ }
2041
+ .accordion__marker {
2042
+ --op-mso-optical-sizing: 48;
2043
+ font-size: var(--op-font-x-large);
2044
+ justify-self: flex-end;
2045
+ transition: var(--op-transition-accordion);
2046
+ user-select: none;
2047
+ }
2048
+ }
2049
+ &[open] {
2050
+ summary .accordion__marker {
2051
+ rotate: 0.25turn;
2052
+ }
2053
+ }
2050
2054
  }
2051
2055
 
2052
2056
  .alert {
@@ -2190,6 +2194,7 @@ small {
2190
2194
  }
2191
2195
 
2192
2196
  .avatar {
2197
+ /* Public API (customizable component options) */
2193
2198
  --_op-avatar-border-radius: var(--op-radius-circle);
2194
2199
  --_op-avatar-inner-border-color: var(--op-color-neutral-minus-max);
2195
2200
  --_op-avatar-outer-border-color: var(--op-color-neutral-base);
@@ -2197,9 +2202,10 @@ small {
2197
2202
  --_op-avatar-outer-border-width: var(--op-border-width-large);
2198
2203
  --_op-avatar-disabled-opacity: var(--op-opacity-disabled);
2199
2204
  --_op-avatar-hover-opacity: var(--op-opacity-overlay);
2200
- --_op-avatar-size-small: calc(8 * var(--op-size-unit));
2201
- --_op-avatar-size-medium: calc(10 * var(--op-size-unit));
2202
- --_op-avatar-size-large: calc(14 * var(--op-size-unit));
2205
+ --_op-avatar-size-small: calc(8 * var(--op-size-unit)); /* 32px */
2206
+ --_op-avatar-size-medium: calc(10 * var(--op-size-unit)); /* 40px */
2207
+ --_op-avatar-size-large: calc(14 * var(--op-size-unit)); /* 56px */
2208
+ /* Private API (component option defaults) */
2203
2209
  --__op-avatar-size: var(--_op-avatar-size-large);
2204
2210
  position: relative;
2205
2211
  z-index: 1;
@@ -2210,61 +2216,66 @@ small {
2210
2216
  height: var(--__op-avatar-size);
2211
2217
  min-height: var(--__op-avatar-size);
2212
2218
  border-radius: var(--_op-avatar-border-radius);
2213
- }
2214
- .avatar::before {
2215
- position: absolute;
2216
- z-index: 2;
2217
- content: "";
2218
- inset: 0;
2219
- }
2220
- .avatar::after {
2221
- position: absolute;
2222
- z-index: 3;
2223
- border-radius: var(--_op-avatar-border-radius);
2224
- box-shadow: inset 0 0 0 var(--_op-avatar-outer-border-width) var(--_op-avatar-outer-border-color), inset 0 0 0 var(--_op-avatar-inner-border-width) var(--_op-avatar-inner-border-color);
2225
- content: "";
2226
- inset: 0;
2227
- }
2228
- .avatar img {
2229
- width: 100%;
2230
- height: 100%;
2231
- object-fit: cover;
2232
- }
2233
- .avatar--disabled.avatar {
2234
- opacity: var(--_op-avatar-disabled-opacity);
2235
- pointer-events: none;
2236
- }
2237
- .avatar:hover:not(div, .avatar--disabled) {
2238
- --_op-avatar-inner-border-color: var(--op-color-primary-base);
2239
- --_op-avatar-outer-border-color: var(--op-color-primary-plus-one);
2240
- cursor: pointer;
2241
- }
2242
- .avatar:hover:not(div, .avatar--disabled)::before {
2243
- background-color: var(--op-color-primary-base);
2244
- opacity: var(--_op-avatar-hover-opacity);
2245
- }
2246
- .avatar:focus, .avatar:focus-visible, .avatar:focus-within {
2247
- outline: none;
2248
- }
2249
- .avatar:focus-visible:not(.avatar--disabled) {
2250
- --_op-avatar-outer-border-color: var(--op-color-primary-base);
2251
- cursor: pointer;
2252
- }
2253
- .avatar--small.avatar {
2254
- --__op-avatar-size: var(--_op-avatar-size-small);
2255
- }
2256
- .avatar--medium.avatar {
2257
- --__op-avatar-size: var(--_op-avatar-size-medium);
2258
- }
2259
- .avatar--large.avatar {
2260
- --__op-avatar-size: var(--_op-avatar-size-large);
2219
+ &::before {
2220
+ position: absolute;
2221
+ z-index: 2;
2222
+ content: "";
2223
+ inset: 0;
2224
+ }
2225
+ &::after {
2226
+ position: absolute;
2227
+ z-index: 3;
2228
+ border-radius: var(--_op-avatar-border-radius);
2229
+ box-shadow: inset 0 0 0 var(--_op-avatar-outer-border-width) var(--_op-avatar-outer-border-color), inset 0 0 0 var(--_op-avatar-inner-border-width) var(--_op-avatar-inner-border-color);
2230
+ content: "";
2231
+ inset: 0;
2232
+ }
2233
+ img {
2234
+ width: 100%;
2235
+ height: 100%;
2236
+ object-fit: cover;
2237
+ }
2238
+ /* Disabled State */
2239
+ &.avatar--disabled {
2240
+ opacity: var(--_op-avatar-disabled-opacity);
2241
+ pointer-events: none;
2242
+ }
2243
+ /* Focus State */
2244
+ &:focus,
2245
+ &:focus-visible,
2246
+ &:focus-within {
2247
+ outline: none;
2248
+ }
2249
+ /* Hover State */
2250
+ &:hover:not(div, .avatar--disabled) {
2251
+ --_op-avatar-inner-border-color: var(--op-color-primary-base);
2252
+ --_op-avatar-outer-border-color: var(--op-color-primary-plus-one);
2253
+ cursor: pointer;
2254
+ &::before {
2255
+ background-color: var(--op-color-primary-base);
2256
+ opacity: var(--_op-avatar-hover-opacity);
2257
+ }
2258
+ }
2259
+ &:focus-visible:not(.avatar--disabled) {
2260
+ --_op-avatar-outer-border-color: var(--op-color-primary-base);
2261
+ cursor: pointer;
2262
+ }
2263
+ /* Size Modifiers */
2264
+ &.avatar--small {
2265
+ --__op-avatar-size: var(--_op-avatar-size-small);
2266
+ }
2267
+ &.avatar--medium {
2268
+ --__op-avatar-size: var(--_op-avatar-size-medium);
2269
+ }
2270
+ &.avatar--large {
2271
+ --__op-avatar-size: var(--_op-avatar-size-large);
2272
+ }
2261
2273
  }
2262
2274
 
2263
- .badge-notice, .badge-info, .badge-danger, .badge-warning, .badge-primary, .badge {
2275
+ .badge {
2264
2276
  display: inline-flex;
2265
2277
  align-items: center;
2266
2278
  justify-content: center;
2267
- padding: var(--op-space-2x-small) var(--op-space-x-small);
2268
2279
  border-radius: var(--op-radius-medium);
2269
2280
  background-color: var(--op-color-neutral-base);
2270
2281
  color: var(--op-color-neutral-on-base);
@@ -2274,82 +2285,85 @@ small {
2274
2285
  gap: var(--op-space-x-small);
2275
2286
  letter-spacing: var(--op-letter-spacing-label);
2276
2287
  line-height: var(--op-line-height-dense);
2288
+ padding-block: var(--op-space-2x-small);
2289
+ padding-inline: var(--op-space-x-small);
2277
2290
  user-select: none;
2278
2291
  white-space: nowrap;
2279
- }
2280
- .badge-notice .material-symbols-outlined, .badge-info .material-symbols-outlined, .badge-danger .material-symbols-outlined, .badge-warning .material-symbols-outlined, .badge-primary .material-symbols-outlined, .badge .material-symbols-outlined {
2281
- font-size: var(--op-font-small);
2282
- }
2283
- .badge--pill.badge-notice, .badge--pill.badge-info, .badge--pill.badge-danger, .badge--pill.badge-warning, .badge--pill.badge-primary, .badge--pill.badge {
2284
- border-radius: var(--op-radius-pill);
2285
- }
2286
- .badge--notification-right.badge-notice, .badge--notification-right.badge-info, .badge--notification-right.badge-danger, .badge--notification-right.badge-warning, .badge--notification-right.badge-primary, .badge--notification-right.badge {
2287
- position: absolute;
2288
- top: 0;
2289
- box-shadow: 0 0 0 var(--op-border-width-large) var(--op-color-neutral-plus-max);
2290
- pointer-events: none;
2291
- right: 0;
2292
- transform: translateY(-50%) translateX(50%);
2293
- }
2294
- .badge--notification-left.badge-notice, .badge--notification-left.badge-info, .badge--notification-left.badge-danger, .badge--notification-left.badge-warning, .badge--notification-left.badge-primary, .badge--notification-left.badge {
2295
- position: absolute;
2296
- top: 0;
2297
- box-shadow: 0 0 0 var(--op-border-width-large) var(--op-color-neutral-plus-max);
2298
- pointer-events: none;
2299
- left: 0;
2300
- transform: translateY(-50%) translateX(-50%);
2301
- }
2302
-
2303
- .badge-primary {
2304
- background-color: var(--op-color-primary-base);
2305
- color: var(--op-color-primary-on-base);
2306
- }
2307
-
2308
- .badge-warning {
2309
- background-color: var(--op-color-alerts-warning-base);
2310
- color: var(--op-color-alerts-warning-on-base);
2311
- }
2312
-
2313
- .badge-danger {
2314
- background-color: var(--op-color-alerts-danger-base);
2315
- color: var(--op-color-alerts-danger-on-base);
2316
- }
2317
-
2318
- .badge-info {
2319
- background-color: var(--op-color-alerts-info-base);
2320
- color: var(--op-color-alerts-info-on-base);
2321
- }
2322
-
2323
- .badge-notice {
2324
- background-color: var(--op-color-alerts-notice-base);
2325
- color: var(--op-color-alerts-notice-on-base);
2292
+ /* Elements */
2293
+ .material-symbols-outlined {
2294
+ font-size: var(--op-font-small);
2295
+ }
2296
+ /* Modifiers */
2297
+ &.badge--primary {
2298
+ background-color: var(--op-color-primary-base);
2299
+ color: var(--op-color-primary-on-base);
2300
+ }
2301
+ &.badge--warning {
2302
+ background-color: var(--op-color-alerts-warning-base);
2303
+ color: var(--op-color-alerts-warning-on-base);
2304
+ }
2305
+ &.badge--danger {
2306
+ background-color: var(--op-color-alerts-danger-base);
2307
+ color: var(--op-color-alerts-danger-on-base);
2308
+ }
2309
+ &.badge--info {
2310
+ background-color: var(--op-color-alerts-info-base);
2311
+ color: var(--op-color-alerts-info-on-base);
2312
+ }
2313
+ &.badge--notice {
2314
+ background-color: var(--op-color-alerts-notice-base);
2315
+ color: var(--op-color-alerts-notice-on-base);
2316
+ }
2317
+ &.badge--pill {
2318
+ border-radius: var(--op-radius-pill);
2319
+ }
2320
+ &.badge--notification-right {
2321
+ position: absolute;
2322
+ box-shadow: 0 0 0 var(--op-border-width-large) var(--op-color-neutral-plus-max);
2323
+ inset-block-start: 0;
2324
+ inset-inline-end: 0;
2325
+ pointer-events: none;
2326
+ transform: translateY(-50%) translateX(50%);
2327
+ }
2328
+ &.badge--notification-left {
2329
+ position: absolute;
2330
+ box-shadow: 0 0 0 var(--op-border-width-large) var(--op-color-neutral-plus-max);
2331
+ inset-block-start: 0;
2332
+ inset-inline-start: 0;
2333
+ pointer-events: none;
2334
+ transform: translateY(-50%) translateX(-50%);
2335
+ }
2326
2336
  }
2327
2337
 
2328
2338
  .breadcrumbs {
2339
+ /* Public API (customizable component options) */
2329
2340
  --_op-breadcrumbs-font-size-small: var(--op-font-x-small);
2330
2341
  --_op-breadcrumbs-font-size-large: var(--op-font-small);
2342
+ /* Private API (component option defaults) */
2331
2343
  --__op-breadcrumbs-font-size: var(--_op-breadcrumbs-font-size-small);
2332
2344
  display: flex;
2333
2345
  flex-wrap: wrap;
2334
2346
  align-items: baseline;
2335
2347
  gap: var(--op-space-x-small);
2336
- }
2337
- .breadcrumbs .breadcrumbs__link {
2338
- font-size: var(--__op-breadcrumbs-font-size);
2339
- text-decoration: none;
2340
- }
2341
- .breadcrumbs .breadcrumbs__link:hover {
2342
- text-decoration: underline;
2343
- }
2344
- .breadcrumbs .breadcrumbs__text {
2345
- font-size: var(--__op-breadcrumbs-font-size);
2346
- font-weight: var(--op-font-weight-bold);
2347
- }
2348
- .breadcrumbs--small.breadcrumbs {
2349
- --__op-breadcrumbs-font-size: var(--_op-breadcrumbs-font-size-small);
2350
- }
2351
- .breadcrumbs--large.breadcrumbs {
2352
- --__op-breadcrumbs-font-size: var(--_op-breadcrumbs-font-size-large);
2348
+ /* Elements */
2349
+ .breadcrumbs__link {
2350
+ font-size: var(--__op-breadcrumbs-font-size);
2351
+ text-decoration: none;
2352
+ &:hover {
2353
+ text-decoration: underline;
2354
+ }
2355
+ }
2356
+ .breadcrumbs__text {
2357
+ font-size: var(--__op-breadcrumbs-font-size);
2358
+ font-weight: var(--op-font-weight-bold);
2359
+ }
2360
+ /* Modifiers */
2361
+ &.breadcrumbs--small {
2362
+ --__op-breadcrumbs-font-size: var(--_op-breadcrumbs-font-size-small);
2363
+ }
2364
+ &.breadcrumbs--large {
2365
+ --__op-breadcrumbs-font-size: var(--_op-breadcrumbs-font-size-large);
2366
+ }
2353
2367
  }
2354
2368
 
2355
2369
  .btn-warning, .btn-destructive,
@@ -2803,7 +2817,8 @@ small {
2803
2817
  justify-content: space-between;
2804
2818
  }
2805
2819
 
2806
- .divider-vertical, .divider {
2820
+ .divider {
2821
+ /* Public API (customizable component options) */
2807
2822
  --_op-divider-vertical-min-height: var(--op-space-large);
2808
2823
  --_op-divider-height-small: var(--op-border-width);
2809
2824
  --_op-divider-height-medium: var(--op-border-width-large);
@@ -2811,40 +2826,42 @@ small {
2811
2826
  --_op-divider-padding-small: var(--op-space-2x-small);
2812
2827
  --_op-divider-padding-medium: var(--op-space-x-small);
2813
2828
  --_op-divider-padding-large: var(--op-space-medium);
2829
+ /* Private API (component option defaults) */
2814
2830
  --__op-divider-height: var(--_op-divider-height-small);
2815
2831
  --__op-divider-padding: 0;
2816
- background-color: var(--op-color-border);
2817
- }
2818
- .divider--small.divider-vertical, .divider--small.divider {
2819
- --__op-divider-height: var(--_op-divider-height-small);
2820
- }
2821
- .divider--medium.divider-vertical, .divider--medium.divider {
2822
- --__op-divider-height: var(--_op-divider-height-medium);
2823
- }
2824
- .divider--large.divider-vertical, .divider--large.divider {
2825
- --__op-divider-height: var(--_op-divider-height-large);
2826
- }
2827
- .divider--spacing-small.divider-vertical, .divider--spacing-small.divider {
2828
- --__op-divider-padding: var(--_op-divider-padding-small);
2829
- }
2830
- .divider--spacing-medium.divider-vertical, .divider--spacing-medium.divider {
2831
- --__op-divider-padding: var(--_op-divider-padding-medium);
2832
- }
2833
- .divider--spacing-large.divider-vertical, .divider--spacing-large.divider {
2834
- --__op-divider-padding: var(--_op-divider-padding-large);
2835
- }
2836
-
2837
- .divider {
2838
2832
  width: 100%;
2839
2833
  height: var(--__op-divider-height);
2840
- margin: var(--__op-divider-padding) 0;
2841
- }
2842
-
2843
- .divider-vertical {
2844
- width: var(--__op-divider-height);
2845
- height: 100%;
2846
- min-height: var(--_op-divider-vertical-min-height);
2847
- margin: 0 var(--__op-divider-padding);
2834
+ background-color: var(--op-color-border);
2835
+ margin-block: var(--__op-divider-padding);
2836
+ margin-inline: 0;
2837
+ /* Size Modifiers */
2838
+ &.divider--small {
2839
+ --__op-divider-height: var(--_op-divider-height-small);
2840
+ }
2841
+ &.divider--medium {
2842
+ --__op-divider-height: var(--_op-divider-height-medium);
2843
+ }
2844
+ &.divider--large {
2845
+ --__op-divider-height: var(--_op-divider-height-large);
2846
+ }
2847
+ /* Spacing Modifiers */
2848
+ &.divider--spacing-small {
2849
+ --__op-divider-padding: var(--_op-divider-padding-small);
2850
+ }
2851
+ &.divider--spacing-medium {
2852
+ --__op-divider-padding: var(--_op-divider-padding-medium);
2853
+ }
2854
+ &.divider--spacing-large {
2855
+ --__op-divider-padding: var(--_op-divider-padding-large);
2856
+ }
2857
+ /* Direction Modifier */
2858
+ &.divider--vertical {
2859
+ width: var(--__op-divider-height);
2860
+ height: 100%;
2861
+ min-height: var(--_op-divider-vertical-min-height);
2862
+ margin-block: 0;
2863
+ margin-inline: var(--__op-divider-padding);
2864
+ }
2848
2865
  }
2849
2866
 
2850
2867
  .form-control {
@@ -3391,19 +3408,21 @@ dialog.modal.modal--closing::backdrop {
3391
3408
  display: flex;
3392
3409
  align-items: center;
3393
3410
  gap: 0;
3394
- }
3395
- .pagination .form-group {
3396
- align-items: center;
3397
- }
3398
- .pagination .form-group .form-label {
3399
- grid-column: 1;
3400
- }
3401
- .pagination .form-group .form-control {
3402
- grid-column: 2;
3403
- }
3404
- .pagination .pagination__divider {
3405
- height: 100%;
3406
- padding: 0 var(--op-space-x-small);
3411
+ /* Showing Dropdown */
3412
+ .form-group {
3413
+ align-items: center;
3414
+ .form-label {
3415
+ grid-column: 1;
3416
+ }
3417
+ .form-control {
3418
+ grid-column: 2;
3419
+ }
3420
+ }
3421
+ /* ... Gap */
3422
+ .pagination__divider {
3423
+ height: 100%;
3424
+ padding-inline: var(--op-space-x-small);
3425
+ }
3407
3426
  }
3408
3427
 
3409
3428
  .sidebar-primary, .sidebar {
@@ -3564,7 +3583,8 @@ dialog.modal.modal--closing::backdrop {
3564
3583
  }
3565
3584
 
3566
3585
  .side-panel {
3567
- --_op-side-panel-width: calc(54 * var(--op-size-unit));
3586
+ /* Public API (customizable component options) */
3587
+ --_op-side-panel-width: calc(54 * var(--op-size-unit)); /* 216px */
3568
3588
  --_op-side-panel-header-padding: var(--op-space-medium);
3569
3589
  --_op-side-panel-body-padding: var(--op-space-medium);
3570
3590
  --_op-side-panel-footer-padding: var(--op-space-medium);
@@ -3577,70 +3597,80 @@ dialog.modal.modal--closing::backdrop {
3577
3597
  flex-direction: column;
3578
3598
  background-color: var(--op-color-background);
3579
3599
  color: var(--op-color-on-background);
3580
- }
3581
- .side-panel--border-left.side-panel {
3582
- box-shadow: var(--op-border-left) var(--op-color-border);
3583
- }
3584
- .side-panel--border-right.side-panel {
3585
- box-shadow: var(--op-border-right) var(--op-color-border);
3586
- }
3587
- .side-panel--border-left.side-panel--border-right.side-panel {
3588
- box-shadow: var(--op-border-x);
3589
- }
3590
- .side-panel .side-panel__header.side-panel__header--padded {
3591
- padding: var(--_op-side-panel-header-padding);
3592
- }
3593
- .side-panel .side-panel__header.side-panel__header--padded-x {
3594
- padding-inline: var(--_op-side-panel-header-padding);
3595
- }
3596
- .side-panel .side-panel__header.side-panel__header--padded-y {
3597
- padding-block: var(--_op-side-panel-header-padding);
3598
- }
3599
- .side-panel .side-panel__body {
3600
- flex: 1;
3601
- overflow-y: auto;
3602
- }
3603
- .side-panel .side-panel__body.side-panel__body--padded {
3604
- padding: var(--_op-side-panel-body-padding);
3605
- }
3606
- .side-panel .side-panel__body.side-panel__body--padded-x {
3607
- padding-inline: var(--_op-side-panel-body-padding);
3608
- }
3609
- .side-panel .side-panel__body.side-panel__body--padded-y {
3610
- padding-block: var(--_op-side-panel-body-padding);
3611
- }
3612
- .side-panel .side-panel__footer.side-panel__footer--padded {
3613
- padding: var(--_op-side-panel-footer-padding);
3614
- }
3615
- .side-panel .side-panel__footer.side-panel__footer--padded-x {
3616
- padding-inline: var(--_op-side-panel-footer-padding);
3617
- }
3618
- .side-panel .side-panel__footer.side-panel__footer--padded-y {
3619
- padding-block: var(--_op-side-panel-footer-padding);
3620
- }
3621
- .side-panel .side-panel__section.side-panel__section--padded {
3622
- padding: var(--_op-side-panel-section-padding);
3623
- }
3624
- .side-panel .side-panel__section.side-panel__section--padded-x {
3625
- padding-inline: var(--_op-side-panel-section-padding);
3626
- }
3627
- .side-panel .side-panel__section.side-panel__section--padded-y {
3628
- padding-block: var(--_op-side-panel-section-padding);
3600
+ /* Modifiers */
3601
+ &.side-panel--border-left {
3602
+ box-shadow: var(--op-border-left) var(--op-color-border);
3603
+ }
3604
+ &.side-panel--border-right {
3605
+ box-shadow: var(--op-border-right) var(--op-color-border);
3606
+ }
3607
+ &.side-panel--border-left.side-panel--border-right {
3608
+ box-shadow: var(--op-border-x);
3609
+ }
3610
+ /* Elements */
3611
+ .side-panel__header {
3612
+ &.side-panel__header--padded {
3613
+ padding: var(--_op-side-panel-header-padding);
3614
+ }
3615
+ &.side-panel__header--padded-x {
3616
+ padding-inline: var(--_op-side-panel-header-padding);
3617
+ }
3618
+ &.side-panel__header--padded-y {
3619
+ padding-block: var(--_op-side-panel-header-padding);
3620
+ }
3621
+ }
3622
+ .side-panel__body {
3623
+ flex: 1;
3624
+ overflow-y: auto;
3625
+ &.side-panel__body--padded {
3626
+ padding: var(--_op-side-panel-body-padding);
3627
+ }
3628
+ &.side-panel__body--padded-x {
3629
+ padding-inline: var(--_op-side-panel-body-padding);
3630
+ }
3631
+ &.side-panel__body--padded-y {
3632
+ padding-block: var(--_op-side-panel-body-padding);
3633
+ }
3634
+ }
3635
+ .side-panel__footer {
3636
+ &.side-panel__footer--padded {
3637
+ padding: var(--_op-side-panel-footer-padding);
3638
+ }
3639
+ &.side-panel__footer--padded-x {
3640
+ padding-inline: var(--_op-side-panel-footer-padding);
3641
+ }
3642
+ &.side-panel__footer--padded-y {
3643
+ padding-block: var(--_op-side-panel-footer-padding);
3644
+ }
3645
+ }
3646
+ .side-panel__section {
3647
+ &.side-panel__section--padded {
3648
+ padding: var(--_op-side-panel-section-padding);
3649
+ }
3650
+ &.side-panel__section--padded-x {
3651
+ padding-inline: var(--_op-side-panel-section-padding);
3652
+ }
3653
+ &.side-panel__section--padded-y {
3654
+ padding-block: var(--_op-side-panel-section-padding);
3655
+ }
3656
+ }
3629
3657
  }
3630
3658
 
3631
3659
  .spinner {
3660
+ /* Public API (customizable component options) */
3632
3661
  --_op-spinner-indicator-color: var(--op-color-primary-base);
3633
3662
  --_op-spinner-track-color: var(--op-color-neutral-plus-four);
3634
3663
  --_op-spinner-track-width-x-small: var(--op-border-width);
3635
3664
  --_op-spinner-track-width-small: var(--op-border-width-large);
3636
3665
  --_op-spinner-track-width-medium: calc(var(--op-border-width-large) + var(--op-border-width));
3637
3666
  --_op-spinner-track-width-large: var(--op-border-width-x-large);
3638
- --_op-spinner-diameter-x-small: calc(6 * var(--op-size-unit));
3639
- --_op-spinner-diameter-small: calc(10 * var(--op-size-unit));
3640
- --_op-spinner-diameter-medium: calc(15 * var(--op-size-unit));
3641
- --_op-spinner-diameter-large: calc(20 * var(--op-size-unit));
3667
+ --_op-spinner-diameter-x-small: calc(6 * var(--op-size-unit)); /* 24px */
3668
+ --_op-spinner-diameter-small: calc(10 * var(--op-size-unit)); /* 40px */
3669
+ --_op-spinner-diameter-medium: calc(15 * var(--op-size-unit)); /* 60px */
3670
+ --_op-spinner-diameter-large: calc(20 * var(--op-size-unit)); /* 80px */
3642
3671
  --_op-spinner-animation-duration: 0.8s;
3643
3672
  --_op-spinner-animation-timing-function: linear;
3673
+ /* Private API (component option defaults) */
3644
3674
  --__op-spinner-diameter: var(--_op-spinner-diameter-large);
3645
3675
  --__op-spinner-track-width: var(--_op-spinner-track-width-large);
3646
3676
  width: var(--__op-spinner-diameter);
@@ -3649,22 +3679,22 @@ dialog.modal.modal--closing::backdrop {
3649
3679
  border-radius: var(--__op-spinner-diameter);
3650
3680
  border-top-color: var(--_op-spinner-indicator-color);
3651
3681
  animation: spinner var(--_op-spinner-animation-duration) var(--_op-spinner-animation-timing-function) infinite;
3652
- }
3653
- .spinner--x-small.spinner {
3654
- --__op-spinner-diameter: var(--_op-spinner-diameter-x-small);
3655
- --__op-spinner-track-width: var(--_op-spinner-track-width-x-small);
3656
- }
3657
- .spinner--small.spinner {
3658
- --__op-spinner-diameter: var(--_op-spinner-diameter-small);
3659
- --__op-spinner-track-width: var(--_op-spinner-track-width-small);
3660
- }
3661
- .spinner--medium.spinner {
3662
- --__op-spinner-diameter: var(--_op-spinner-diameter-medium);
3663
- --__op-spinner-track-width: var(--_op-spinner-track-width-medium);
3664
- }
3665
- .spinner--large.spinner {
3666
- --__op-spinner-diameter: var(--_op-spinner-diameter-large);
3667
- --__op-spinner-track-width: var(--_op-spinner-track-width-large);
3682
+ &.spinner--x-small {
3683
+ --__op-spinner-diameter: var(--_op-spinner-diameter-x-small);
3684
+ --__op-spinner-track-width: var(--_op-spinner-track-width-x-small);
3685
+ }
3686
+ &.spinner--small {
3687
+ --__op-spinner-diameter: var(--_op-spinner-diameter-small);
3688
+ --__op-spinner-track-width: var(--_op-spinner-track-width-small);
3689
+ }
3690
+ &.spinner--medium {
3691
+ --__op-spinner-diameter: var(--_op-spinner-diameter-medium);
3692
+ --__op-spinner-track-width: var(--_op-spinner-track-width-medium);
3693
+ }
3694
+ &.spinner--large {
3695
+ --__op-spinner-diameter: var(--_op-spinner-diameter-large);
3696
+ --__op-spinner-track-width: var(--_op-spinner-track-width-large);
3697
+ }
3668
3698
  }
3669
3699
 
3670
3700
  @keyframes spinner {
@@ -3673,12 +3703,14 @@ dialog.modal.modal--closing::backdrop {
3673
3703
  }
3674
3704
  }
3675
3705
  .switch {
3676
- --_op-switch-height-small: calc(4 * var(--op-size-unit));
3677
- --_op-switch-height-large: calc(6 * var(--op-size-unit));
3678
- --_op-switch-width-small: calc(7 * var(--op-size-unit));
3679
- --_op-switch-width-large: calc(11 * var(--op-size-unit));
3706
+ /* Public API (allowed to be overridden) */
3707
+ --_op-switch-height-small: calc(4 * var(--op-size-unit)); /* 16px */
3708
+ --_op-switch-height-large: calc(6 * var(--op-size-unit)); /* 24px */
3709
+ --_op-switch-width-small: calc(7 * var(--op-size-unit)); /* 28px */
3710
+ --_op-switch-width-large: calc(11 * var(--op-size-unit)); /* 44px */
3680
3711
  --_op-switch-opacity-disabled: var(--op-opacity-disabled);
3681
3712
  --_op-switch-switch-padding: var(--op-space-2x-small);
3713
+ /* Private API (don't touch these) */
3682
3714
  --__op-switch-width: var(--_op-switch-width-large);
3683
3715
  --__op-switch-height: var(--_op-switch-height-large);
3684
3716
  --__op-switch-switch-size: calc(var(--__op-switch-height) - var(--_op-switch-switch-padding));
@@ -3686,72 +3718,78 @@ dialog.modal.modal--closing::backdrop {
3686
3718
  position: relative;
3687
3719
  display: flex;
3688
3720
  align-items: center;
3689
- }
3690
- .switch input {
3691
- width: 0;
3692
- height: 0;
3693
- margin-right: calc(-1 * var(--op-space-x-small));
3694
- }
3695
- .switch input:disabled {
3696
- visibility: hidden;
3697
- }
3698
- .switch input:disabled + label {
3699
- cursor: not-allowed;
3700
- opacity: var(--_op-switch-opacity-disabled);
3701
- }
3702
- .switch input:checked + label {
3703
- background-color: var(--op-color-primary-base);
3704
- box-shadow: none;
3705
- }
3706
- .switch input:checked + label::after {
3707
- left: calc(100% - var(--__op-switch-half-switch-padding));
3708
- transform: translateX(-100%);
3709
- }
3710
- .switch input:hover + label::after {
3711
- background-color: var(--op-color-primary-plus-five);
3712
- }
3713
- .switch input:focus-visible + label {
3714
- box-shadow: 0 0 0 var(--op-border-width-large) var(--op-color-primary-plus-six), inset var(--op-border-all) var(--op-color-primary-minus-three);
3715
- }
3716
- .switch input:focus-visible + label::after {
3717
- background-color: var(--op-color-neutral-plus-five);
3718
- box-shadow: var(--op-border-all) var(--op-color-primary-minus-three);
3719
- }
3720
- .switch input:focus-visible:checked + label::after {
3721
- background-color: var(--op-color-primary-plus-six);
3722
- box-shadow: var(--op-border-all) var(--op-color-primary-minus-two);
3723
- }
3724
- .switch label {
3725
- position: relative;
3726
- display: block;
3727
- width: var(--__op-switch-width);
3728
- height: var(--__op-switch-height);
3729
- border-radius: var(--op-radius-pill);
3730
- background: var(--op-color-neutral-base);
3731
- box-shadow: inset var(--op-border-all) var(--op-color-neutral-plus-three);
3732
- text-indent: -9999px;
3733
- }
3734
- .switch label::after {
3735
- position: absolute;
3736
- top: var(--__op-switch-half-switch-padding);
3737
- left: var(--__op-switch-half-switch-padding);
3738
- width: var(--__op-switch-switch-size);
3739
- height: var(--__op-switch-switch-size);
3740
- border-radius: var(--op-radius-circle);
3741
- background-color: var(--op-color-neutral-plus-eight);
3742
- content: "";
3743
- transition: var(--op-transition-input);
3744
- }
3745
- .switch--small.switch {
3746
- --__op-switch-width: var(--_op-switch-width-small);
3747
- --__op-switch-height: var(--_op-switch-height-small);
3748
- }
3749
- .switch--large.switch {
3750
- --__op-switch-width: var(--_op-switch-width-large);
3751
- --__op-switch-height: var(--_op-switch-height-large);
3752
- }
3753
- .switch + label {
3754
- width: fit-content;
3721
+ label {
3722
+ position: relative;
3723
+ display: block;
3724
+ width: var(--__op-switch-width);
3725
+ height: var(--__op-switch-height);
3726
+ border-radius: var(--op-radius-pill);
3727
+ background: var(--op-color-neutral-base);
3728
+ box-shadow: inset var(--op-border-all) var(--op-color-neutral-plus-three);
3729
+ text-indent: -9999px; /* Normally text would not be put in the label, but this hides it in case you do put text in the label */
3730
+ &::after {
3731
+ position: absolute;
3732
+ width: var(--__op-switch-switch-size);
3733
+ height: var(--__op-switch-switch-size);
3734
+ border-radius: var(--op-radius-circle);
3735
+ background-color: var(--op-color-neutral-plus-eight);
3736
+ content: "";
3737
+ inset-block-start: var(--__op-switch-half-switch-padding);
3738
+ inset-inline-start: var(--__op-switch-half-switch-padding);
3739
+ transition: var(--op-transition-input);
3740
+ }
3741
+ }
3742
+ /* Prevent labels after the toggle being full width */
3743
+ & + label {
3744
+ width: fit-content;
3745
+ }
3746
+ input {
3747
+ width: 0;
3748
+ height: 0;
3749
+ margin-inline-end: calc(-1 * var(--op-space-x-small));
3750
+ &:disabled {
3751
+ visibility: hidden;
3752
+ }
3753
+ &:disabled + label {
3754
+ cursor: not-allowed;
3755
+ opacity: var(--_op-switch-opacity-disabled);
3756
+ }
3757
+ &:checked + label {
3758
+ background-color: var(--op-color-primary-base);
3759
+ box-shadow: none;
3760
+ &::after {
3761
+ left: calc(100% - var(--__op-switch-half-switch-padding));
3762
+ transform: translateX(-100%);
3763
+ }
3764
+ }
3765
+ &:hover + label {
3766
+ &::after {
3767
+ background-color: var(--op-color-primary-plus-five);
3768
+ }
3769
+ }
3770
+ &:focus-visible + label {
3771
+ box-shadow: 0 0 0 var(--op-border-width-large) var(--op-color-primary-plus-six), inset var(--op-border-all) var(--op-color-primary-minus-three);
3772
+ &::after {
3773
+ background-color: var(--op-color-neutral-plus-five);
3774
+ box-shadow: var(--op-border-all) var(--op-color-primary-minus-three);
3775
+ }
3776
+ }
3777
+ &:focus-visible:checked + label {
3778
+ &::after {
3779
+ background-color: var(--op-color-primary-plus-six);
3780
+ box-shadow: var(--op-border-all) var(--op-color-primary-minus-two);
3781
+ }
3782
+ }
3783
+ }
3784
+ /* Size Modifiers */
3785
+ &.switch--small {
3786
+ --__op-switch-width: var(--_op-switch-width-small);
3787
+ --__op-switch-height: var(--_op-switch-height-small);
3788
+ }
3789
+ &.switch--large {
3790
+ --__op-switch-width: var(--_op-switch-width-large);
3791
+ --__op-switch-height: var(--_op-switch-height-large);
3792
+ }
3755
3793
  }
3756
3794
 
3757
3795
  .tab-group {
@@ -3760,6 +3798,7 @@ dialog.modal.modal--closing::backdrop {
3760
3798
  }
3761
3799
 
3762
3800
  .tab {
3801
+ /* Public API */
3763
3802
  --_op-tab-font-small: var(--op-font-x-small);
3764
3803
  --_op-tab-font-large: var(--op-font-small);
3765
3804
  --_op-tab-padding-small: calc(var(--op-space-2x-small) + var(--op-space-3x-small)) var(--op-space-medium);
@@ -3767,6 +3806,7 @@ dialog.modal.modal--closing::backdrop {
3767
3806
  --_op-tab-indicator-width-small: var(--op-border-width-large);
3768
3807
  --_op-tab-indicator-width-large: var(--op-border-width-x-large);
3769
3808
  --_op-tab-disabled-opacity: var(--op-opacity-disabled);
3809
+ /* Private API */
3770
3810
  --__op-tab-font-size: var(--_op-tab-font-large);
3771
3811
  --__op-tab-padding: var(--_op-tab-padding-large);
3772
3812
  --__op-tab-indicator-width: var(--_op-tab-indicator-width-large);
@@ -3776,38 +3816,45 @@ dialog.modal.modal--closing::backdrop {
3776
3816
  color: var(--op-color-on-background);
3777
3817
  font-size: var(--__op-tab-font-size);
3778
3818
  text-decoration: none;
3779
- }
3780
- .tab--active.tab {
3781
- box-shadow: var(--__op-tab-indicator) var(--op-color-primary-plus-one);
3782
- }
3783
- .tab:focus, .tab:focus-within, .tab:focus-visible {
3784
- outline: none;
3785
- }
3786
- .tab:focus-visible:not(.tab--disabled) {
3787
- z-index: 1;
3788
- box-shadow: var(--op-input-focus-primary);
3789
- }
3790
- .tab:focus-visible:not(.tab--disabled).tab--active {
3791
- box-shadow: var(--__op-tab-indicator) var(--op-color-primary-plus-one), var(--op-input-focus-primary);
3792
- }
3793
- .tab--disabled.tab {
3794
- opacity: var(--_op-tab-disabled-opacity);
3795
- pointer-events: none;
3796
- }
3797
- .tab:hover {
3798
- background-color: var(--op-color-primary-plus-seven);
3799
- box-shadow: var(--__op-tab-indicator) var(--op-color-primary-base);
3800
- color: var(--op-color-primary-on-plus-seven);
3801
- }
3802
- .tab--small.tab {
3803
- --__op-tab-padding: var(--_op-tab-padding-small);
3804
- --__op-tab-font-size: var(--_op-tab-font-small);
3805
- --__op-tab-indicator-width: var(--_op-tab-indicator-width-small);
3806
- }
3807
- .tab--large.tab {
3808
- --__op-tab-padding: var(--_op-tab-padding-large);
3809
- --__op-tab-font-size: var(--_op-tab-font-large);
3810
- --__op-tab-indicator-width: var(--_op-tab-indicator-width-large);
3819
+ &.tab--active {
3820
+ box-shadow: var(--__op-tab-indicator) var(--op-color-primary-plus-one);
3821
+ }
3822
+ /* Focus State */
3823
+ &:focus,
3824
+ &:focus-within,
3825
+ &:focus-visible {
3826
+ outline: none;
3827
+ }
3828
+ /* Hover State */
3829
+ &:hover {
3830
+ background-color: var(--op-color-primary-plus-seven);
3831
+ box-shadow: var(--__op-tab-indicator) var(--op-color-primary-base);
3832
+ color: var(--op-color-primary-on-plus-seven);
3833
+ }
3834
+ /* Focus State */
3835
+ &:focus-visible:not(.tab--disabled) {
3836
+ z-index: 1;
3837
+ box-shadow: var(--op-input-focus-primary);
3838
+ &.tab--active {
3839
+ box-shadow: var(--__op-tab-indicator) var(--op-color-primary-plus-one), var(--op-input-focus-primary);
3840
+ }
3841
+ }
3842
+ /* Disabled State */
3843
+ &.tab--disabled {
3844
+ opacity: var(--_op-tab-disabled-opacity);
3845
+ pointer-events: none;
3846
+ }
3847
+ /* Size Modifiers */
3848
+ &.tab--small {
3849
+ --__op-tab-padding: var(--_op-tab-padding-small);
3850
+ --__op-tab-font-size: var(--_op-tab-font-small);
3851
+ --__op-tab-indicator-width: var(--_op-tab-indicator-width-small);
3852
+ }
3853
+ &.tab--large {
3854
+ --__op-tab-padding: var(--_op-tab-padding-large);
3855
+ --__op-tab-font-size: var(--_op-tab-font-large);
3856
+ --__op-tab-indicator-width: var(--_op-tab-indicator-width-large);
3857
+ }
3811
3858
  }
3812
3859
 
3813
3860
  .table-container, .table-danger, .table-primary, .table {
@@ -3904,7 +3951,7 @@ dialog.modal.modal--closing::backdrop {
3904
3951
  overflow-y: auto;
3905
3952
  }
3906
3953
 
3907
- .tag-notice, .tag-info, .tag-warning, .tag-danger, .tag-primary, .tag-readonly {
3954
+ .tag {
3908
3955
  display: inline-flex;
3909
3956
  align-items: center;
3910
3957
  justify-content: center;
@@ -3918,167 +3965,183 @@ dialog.modal.modal--closing::backdrop {
3918
3965
  line-height: var(--op-line-height-dense);
3919
3966
  user-select: none;
3920
3967
  white-space: nowrap;
3921
- }
3922
- .tag-notice .tag__label, .tag-info .tag__label, .tag-warning .tag__label, .tag-danger .tag__label, .tag-primary .tag__label, .tag-readonly .tag__label {
3923
- padding-inline: var(--op-space-2x-small);
3924
- }
3925
- .tag-notice .btn--icon, .tag-info .btn--icon, .tag-warning .btn--icon, .tag-danger .btn--icon, .tag-primary .btn--icon, .tag-readonly .btn--icon {
3926
- --__op-btn-height: var(--op-font-medium);
3927
- }
3928
- .tag-notice .btn--icon:hover, .tag-info .btn--icon:hover, .tag-warning .btn--icon:hover, .tag-danger .btn--icon:hover, .tag-primary .btn--icon:hover, .tag-readonly .btn--icon:hover {
3929
- background-color: var(--op-color-neutral-minus-three);
3930
- box-shadow: none;
3931
- color: var(--op-color-neutral-on-minus-three);
3932
- }
3933
- .tag-notice .btn--icon:focus-visible, .tag-info .btn--icon:focus-visible, .tag-warning .btn--icon:focus-visible, .tag-danger .btn--icon:focus-visible, .tag-primary .btn--icon:focus-visible, .tag-readonly .btn--icon:focus-visible {
3934
- background-color: var(--op-color-neutral-base);
3935
- box-shadow: var(--op-input-focus-neutral);
3936
- color: var(--op-color-neutral-on-base);
3937
- }
3938
-
3939
- .tag-primary {
3940
- background-color: var(--op-color-primary-base);
3941
- color: var(--op-color-primary-on-base);
3942
- }
3943
- .tag-primary .btn--icon {
3944
- color: var(--op-color-primary-on-base);
3945
- }
3946
- .tag-primary .btn--icon:hover {
3947
- background-color: var(--op-color-primary-minus-three);
3948
- box-shadow: none;
3949
- color: var(--op-color-primary-on-minus-three);
3950
- }
3951
- .tag-primary .btn--icon:focus-visible {
3952
- background-color: var(--op-color-primary-base);
3953
- box-shadow: var(--op-input-focus-primary);
3954
- color: var(--op-color-primary-on-base);
3955
- }
3956
-
3957
- .tag-danger {
3958
- background-color: var(--op-color-alerts-danger-base);
3959
- color: var(--op-color-alerts-danger-on-base);
3960
- /* stylelint-disable no-descending-specificity */
3961
- /* stylelint-enable no-descending-specificity */
3962
- }
3963
- .tag-danger .btn--icon {
3964
- color: var(--op-color-alerts-danger-on-base);
3965
- }
3966
- .tag-danger .btn--icon:hover {
3967
- background-color: var(--op-color-alerts-danger-minus-three);
3968
- box-shadow: none;
3969
- color: var(--op-color-alerts-danger-on-minus-three);
3970
- }
3971
- .tag-danger .btn--icon:focus-visible {
3972
- background-color: var(--op-color-alerts-danger-base);
3973
- box-shadow: var(--op-input-focus-danger);
3974
- color: var(--op-color-alerts-danger-on-base);
3975
- }
3976
-
3977
- .tag-warning {
3978
- background-color: var(--op-color-alerts-warning-base);
3979
- color: var(--op-color-alerts-warning-on-base);
3980
- /* stylelint-disable no-descending-specificity */
3981
- /* stylelint-enable no-descending-specificity */
3982
- }
3983
- .tag-warning .btn--icon {
3984
- color: var(--op-color-alerts-warning-on-base);
3985
- }
3986
- .tag-warning .btn--icon:hover {
3987
- background-color: var(--op-color-alerts-warning-minus-three);
3988
- box-shadow: none;
3989
- color: var(--op-color-alerts-warning-on-minus-three);
3990
- }
3991
- .tag-warning .btn--icon:focus-visible {
3992
- background-color: var(--op-color-alerts-warning-base);
3993
- box-shadow: var(--op-input-focus-warning);
3994
- color: var(--op-color-alerts-warning-on-base);
3995
- }
3996
-
3997
- .tag-info {
3998
- background-color: var(--op-color-alerts-info-base);
3999
- color: var(--op-color-alerts-info-on-base);
4000
- /* stylelint-disable no-descending-specificity */
4001
- /* stylelint-enable no-descending-specificity */
4002
- }
4003
- .tag-info .btn--icon {
4004
- color: var(--op-color-alerts-info-on-base);
4005
- }
4006
- .tag-info .btn--icon:hover {
4007
- background-color: var(--op-color-alerts-info-minus-three);
4008
- box-shadow: none;
4009
- color: var(--op-color-alerts-info-on-minus-three);
4010
- }
4011
- .tag-info .btn--icon:focus-visible {
4012
- background-color: var(--op-color-alerts-info-base);
4013
- box-shadow: var(--op-input-focus-info);
4014
- color: var(--op-color-alerts-info-on-base);
4015
- }
4016
-
4017
- .tag-notice {
4018
- background-color: var(--op-color-alerts-notice-base);
4019
- color: var(--op-color-alerts-notice-on-base);
4020
- /* stylelint-disable no-descending-specificity */
4021
- /* stylelint-enable no-descending-specificity */
4022
- }
4023
- .tag-notice .btn--icon {
4024
- color: var(--op-color-alerts-notice-on-base);
4025
- }
4026
- .tag-notice .btn--icon:hover {
4027
- background-color: var(--op-color-alerts-notice-minus-three);
4028
- box-shadow: none;
4029
- color: var(--op-color-alerts-notice-on-minus-three);
4030
- }
4031
- .tag-notice .btn--icon:focus-visible {
4032
- background-color: var(--op-color-alerts-notice-base);
4033
- box-shadow: var(--op-input-focus-notice);
4034
- color: var(--op-color-alerts-notice-on-base);
3968
+ /* Elements */
3969
+ .tag__label {
3970
+ padding-inline: var(--op-space-2x-small);
3971
+ }
3972
+ .btn--icon {
3973
+ --__op-btn-height: var(--op-font-medium);
3974
+ /* Hover State */
3975
+ &:hover {
3976
+ background-color: var(--op-color-neutral-minus-three);
3977
+ box-shadow: none;
3978
+ color: var(--op-color-neutral-on-minus-three);
3979
+ }
3980
+ /* Focus State */
3981
+ &:focus-visible {
3982
+ background-color: var(--op-color-neutral-base);
3983
+ box-shadow: var(--op-input-focus-neutral);
3984
+ color: var(--op-color-neutral-on-base);
3985
+ }
3986
+ }
3987
+ /* Modifiers */
3988
+ &.tag--read-only {
3989
+ /* This is here for consistency */
3990
+ }
3991
+ &.tag--primary {
3992
+ background-color: var(--op-color-primary-base);
3993
+ color: var(--op-color-primary-on-base);
3994
+ .btn--icon {
3995
+ color: var(--op-color-primary-on-base);
3996
+ /* Hover State */
3997
+ &:hover {
3998
+ background-color: var(--op-color-primary-minus-three);
3999
+ box-shadow: none;
4000
+ color: var(--op-color-primary-on-minus-three);
4001
+ }
4002
+ /* Focus State */
4003
+ &:focus-visible {
4004
+ background-color: var(--op-color-primary-base);
4005
+ box-shadow: var(--op-input-focus-primary);
4006
+ color: var(--op-color-primary-on-base);
4007
+ }
4008
+ }
4009
+ }
4010
+ &.tag--danger {
4011
+ background-color: var(--op-color-alerts-danger-base);
4012
+ color: var(--op-color-alerts-danger-on-base);
4013
+ /* stylelint-disable no-descending-specificity */
4014
+ .btn--icon {
4015
+ color: var(--op-color-alerts-danger-on-base);
4016
+ /* Hover State */
4017
+ &:hover {
4018
+ background-color: var(--op-color-alerts-danger-minus-three);
4019
+ box-shadow: none;
4020
+ color: var(--op-color-alerts-danger-on-minus-three);
4021
+ }
4022
+ /* Focus State */
4023
+ &:focus-visible {
4024
+ background-color: var(--op-color-alerts-danger-base);
4025
+ box-shadow: var(--op-input-focus-danger);
4026
+ color: var(--op-color-alerts-danger-on-base);
4027
+ }
4028
+ }
4029
+ /* stylelint-enable no-descending-specificity */
4030
+ }
4031
+ &.tag--warning {
4032
+ background-color: var(--op-color-alerts-warning-base);
4033
+ color: var(--op-color-alerts-warning-on-base);
4034
+ /* stylelint-disable no-descending-specificity */
4035
+ .btn--icon {
4036
+ color: var(--op-color-alerts-warning-on-base);
4037
+ /* Hover State */
4038
+ &:hover {
4039
+ background-color: var(--op-color-alerts-warning-minus-three);
4040
+ box-shadow: none;
4041
+ color: var(--op-color-alerts-warning-on-minus-three);
4042
+ }
4043
+ /* Focus State */
4044
+ &:focus-visible {
4045
+ background-color: var(--op-color-alerts-warning-base);
4046
+ box-shadow: var(--op-input-focus-warning);
4047
+ color: var(--op-color-alerts-warning-on-base);
4048
+ }
4049
+ }
4050
+ /* stylelint-enable no-descending-specificity */
4051
+ }
4052
+ &.tag--info {
4053
+ background-color: var(--op-color-alerts-info-base);
4054
+ color: var(--op-color-alerts-info-on-base);
4055
+ /* stylelint-disable no-descending-specificity */
4056
+ .btn--icon {
4057
+ color: var(--op-color-alerts-info-on-base);
4058
+ /* Hover State */
4059
+ &:hover {
4060
+ background-color: var(--op-color-alerts-info-minus-three);
4061
+ box-shadow: none;
4062
+ color: var(--op-color-alerts-info-on-minus-three);
4063
+ }
4064
+ /* Focus State */
4065
+ &:focus-visible {
4066
+ background-color: var(--op-color-alerts-info-base);
4067
+ box-shadow: var(--op-input-focus-info);
4068
+ color: var(--op-color-alerts-info-on-base);
4069
+ }
4070
+ }
4071
+ /* stylelint-enable no-descending-specificity */
4072
+ }
4073
+ &.tag--notice {
4074
+ background-color: var(--op-color-alerts-notice-base);
4075
+ color: var(--op-color-alerts-notice-on-base);
4076
+ /* stylelint-disable no-descending-specificity */
4077
+ .btn--icon {
4078
+ color: var(--op-color-alerts-notice-on-base);
4079
+ /* Hover State */
4080
+ &:hover {
4081
+ background-color: var(--op-color-alerts-notice-minus-three);
4082
+ box-shadow: none;
4083
+ color: var(--op-color-alerts-notice-on-minus-three);
4084
+ }
4085
+ /* Focus State */
4086
+ &:focus-visible {
4087
+ background-color: var(--op-color-alerts-notice-base);
4088
+ box-shadow: var(--op-input-focus-notice);
4089
+ color: var(--op-color-alerts-notice-on-base);
4090
+ }
4091
+ }
4092
+ /* stylelint-enable no-descending-specificity */
4093
+ }
4035
4094
  }
4036
4095
 
4037
4096
  .text-pair {
4097
+ /* Public API (customizable component options) */
4038
4098
  --_op-text-pair-font-size-small: var(--op-font-small);
4039
4099
  --_op-text-pair-font-size-medium: var(--op-font-medium);
4040
4100
  --_op-text-pair-font-size-large: var(--op-font-large);
4101
+ /* Private API (component option defaults) */
4041
4102
  --__op-text-pair-title-font-size: var(--_op-text-pair-font-size-medium);
4042
4103
  --__op-text-pair-subtitle-font-size: var(--_op-text-pair-font-size-small);
4043
4104
  display: flex;
4044
4105
  flex-direction: column;
4045
4106
  gap: var(--op-space-x-small);
4046
- }
4047
- .text-pair--inline.text-pair {
4048
- flex-direction: row;
4049
- align-items: baseline;
4050
- }
4051
- .text-pair .text-pair__title {
4052
- font-size: var(--__op-text-pair-title-font-size);
4053
- font-weight: var(--op-font-weight-semi-bold);
4054
- line-height: var(--op-line-height-dense);
4055
- }
4056
- .text-pair .text-pair__title.text-pair__title--small {
4057
- --__op-text-pair-title-font-size: var(--_op-text-pair-font-size-small);
4058
- }
4059
- .text-pair .text-pair__title.text-pair__title--medium {
4060
- --__op-text-pair-title-font-size: var(--_op-text-pair-font-size-medium);
4061
- }
4062
- .text-pair .text-pair__title.text-pair__title--large {
4063
- --__op-text-pair-title-font-size: var(--_op-text-pair-font-size-large);
4064
- }
4065
- .text-pair .text-pair__subtitle {
4066
- font-size: var(--__op-text-pair-subtitle-font-size);
4067
- font-weight: var(--op-font-weight-normal);
4068
- line-height: var(--op-line-height-dense);
4069
- }
4070
- .text-pair .text-pair__subtitle.text-pair__subtitle--small {
4071
- --__op-text-pair-subtitle-font-size: var(--_op-text-pair-font-size-small);
4072
- }
4073
- .text-pair .text-pair__subtitle.text-pair__subtitle--medium {
4074
- --__op-text-pair-subtitle-font-size: var(--_op-text-pair-font-size-medium);
4075
- }
4076
- .text-pair .text-pair__subtitle.text-pair__subtitle--large {
4077
- --__op-text-pair-subtitle-font-size: var(--_op-text-pair-font-size-large);
4107
+ &.text-pair--inline {
4108
+ flex-direction: row;
4109
+ align-items: baseline;
4110
+ }
4111
+ .text-pair__title {
4112
+ font-size: var(--__op-text-pair-title-font-size);
4113
+ font-weight: var(--op-font-weight-semi-bold);
4114
+ line-height: var(--op-line-height-dense);
4115
+ &.text-pair__title--small {
4116
+ --__op-text-pair-title-font-size: var(--_op-text-pair-font-size-small);
4117
+ }
4118
+ &.text-pair__title--medium {
4119
+ --__op-text-pair-title-font-size: var(--_op-text-pair-font-size-medium);
4120
+ }
4121
+ &.text-pair__title--large {
4122
+ --__op-text-pair-title-font-size: var(--_op-text-pair-font-size-large);
4123
+ }
4124
+ }
4125
+ .text-pair__subtitle {
4126
+ font-size: var(--__op-text-pair-subtitle-font-size);
4127
+ font-weight: var(--op-font-weight-normal);
4128
+ line-height: var(--op-line-height-dense);
4129
+ &.text-pair__subtitle--small {
4130
+ --__op-text-pair-subtitle-font-size: var(--_op-text-pair-font-size-small);
4131
+ }
4132
+ &.text-pair__subtitle--medium {
4133
+ --__op-text-pair-subtitle-font-size: var(--_op-text-pair-font-size-medium);
4134
+ }
4135
+ &.text-pair__subtitle--large {
4136
+ --__op-text-pair-subtitle-font-size: var(--_op-text-pair-font-size-large);
4137
+ }
4138
+ }
4078
4139
  }
4079
4140
 
4141
+ /* Inspired by https://blog.logrocket.com/creating-beautiful-tooltips-with-only-css/ */
4080
4142
  [data-tooltip-text] {
4081
- --_op-tooltip-max-width: calc(50 * var(--op-size-unit));
4143
+ /* Public API (customizable component options) */
4144
+ --_op-tooltip-max-width: calc(50 * var(--op-size-unit)); /* 200px */
4082
4145
  --_op-tooltip-padding: var(--op-space-x-small) var(--op-space-medium);
4083
4146
  --_op-tooltip-background-color: var(--op-color-neutral-minus-max);
4084
4147
  --_op-tooltip-text-color: var(--op-color-neutral-on-minus-max);
@@ -4087,92 +4150,109 @@ dialog.modal.modal--closing::backdrop {
4087
4150
  --_op-tooltip-tooltip-radius: var(--op-radius-medium);
4088
4151
  --_op-tooltip-tooltip-font-size: var(--op-font-small);
4089
4152
  position: relative;
4090
- }
4091
- [data-tooltip-text]::before, [data-tooltip-text]::after {
4092
- opacity: var(--op-opacity-none);
4093
- transition: var(--op-transition-tooltip);
4094
- visibility: hidden;
4095
- }
4096
- [data-tooltip-text]::before {
4097
- position: absolute;
4098
- z-index: var(--op-z-index-tooltip);
4099
- display: block;
4100
- width: max-content;
4101
- max-width: var(--_op-tooltip-max-width);
4102
- padding: var(--_op-tooltip-padding);
4103
- border-radius: var(--_op-tooltip-tooltip-radius);
4104
- background-color: var(--_op-tooltip-background-color);
4105
- color: var(--_op-tooltip-text-color);
4106
- content: attr(data-tooltip-text);
4107
- font-family: var(--op-font-family);
4108
- font-size: var(--_op-tooltip-tooltip-font-size);
4109
- overflow-wrap: break-word;
4110
- pointer-events: none;
4111
- text-align: center;
4112
- white-space: normal;
4113
- }
4114
- [data-tooltip-text]::after {
4115
- position: absolute;
4116
- z-index: var(--op-z-index-tooltip);
4117
- border: var(--_op-tooltip-arrow-size) solid var(--_op-tooltip-background-color);
4118
- content: "";
4119
- pointer-events: none;
4120
- }
4121
- [data-tooltip-text]:hover::before, [data-tooltip-text]:hover::after {
4122
- opacity: var(--op-opacity-full);
4123
- visibility: visible;
4124
- }
4125
- [data-tooltip-position=top][data-tooltip-text]::before, [data-tooltip-position=top][data-tooltip-text]::after, [data-tooltip-text]:not([data-tooltip-position])::before, [data-tooltip-text]:not([data-tooltip-position])::after {
4126
- left: 50%;
4127
- transform: translateX(-50%);
4128
- }
4129
- [data-tooltip-position=top][data-tooltip-text]::before, [data-tooltip-text]:not([data-tooltip-position])::before {
4130
- bottom: 100%;
4131
- margin-bottom: calc(var(--_op-tooltip-arrow-size) + var(--_op-tooltip-tooltip-offset));
4132
- }
4133
- [data-tooltip-position=top][data-tooltip-text]::after, [data-tooltip-text]:not([data-tooltip-position])::after {
4134
- bottom: 100%;
4135
- border-color: var(--_op-tooltip-background-color) transparent transparent transparent;
4136
- margin-bottom: calc(-1 * var(--_op-tooltip-arrow-size) + var(--_op-tooltip-tooltip-offset));
4137
- }
4138
- [data-tooltip-position=left][data-tooltip-text]::before, [data-tooltip-position=left][data-tooltip-text]::after {
4139
- top: 50%;
4140
- transform: translateY(-50%);
4141
- }
4142
- [data-tooltip-position=left][data-tooltip-text]::before {
4143
- right: 100%;
4144
- margin-right: calc(var(--_op-tooltip-arrow-size) + var(--_op-tooltip-tooltip-offset));
4145
- }
4146
- [data-tooltip-position=left][data-tooltip-text]::after {
4147
- right: 100%;
4148
- border-color: transparent transparent transparent var(--_op-tooltip-background-color);
4149
- margin-right: calc(-1 * var(--_op-tooltip-arrow-size) + var(--_op-tooltip-tooltip-offset));
4150
- }
4151
- [data-tooltip-position=bottom][data-tooltip-text]::before, [data-tooltip-position=bottom][data-tooltip-text]::after {
4152
- left: 50%;
4153
- transform: translateX(-50%);
4154
- }
4155
- [data-tooltip-position=bottom][data-tooltip-text]::before {
4156
- top: 100%;
4157
- margin-top: calc(var(--_op-tooltip-arrow-size) + var(--_op-tooltip-tooltip-offset));
4158
- }
4159
- [data-tooltip-position=bottom][data-tooltip-text]::after {
4160
- top: 100%;
4161
- border-color: transparent transparent var(--_op-tooltip-background-color) transparent;
4162
- margin-top: calc(-1 * var(--_op-tooltip-arrow-size) + var(--_op-tooltip-tooltip-offset));
4163
- }
4164
- [data-tooltip-position=right][data-tooltip-text]::before, [data-tooltip-position=right][data-tooltip-text]::after {
4165
- top: 50%;
4166
- transform: translateY(-50%);
4167
- }
4168
- [data-tooltip-position=right][data-tooltip-text]::before {
4169
- left: 100%;
4170
- margin-left: calc(var(--_op-tooltip-arrow-size) + var(--_op-tooltip-tooltip-offset));
4171
- }
4172
- [data-tooltip-position=right][data-tooltip-text]::after {
4173
- left: 100%;
4174
- border-color: transparent var(--_op-tooltip-background-color) transparent transparent;
4175
- margin-left: calc(-1 * var(--_op-tooltip-arrow-size) + var(--_op-tooltip-tooltip-offset));
4153
+ &::before,
4154
+ &::after {
4155
+ opacity: var(--op-opacity-none);
4156
+ transition: var(--op-transition-tooltip);
4157
+ visibility: hidden;
4158
+ }
4159
+ &::before {
4160
+ position: absolute;
4161
+ z-index: var(--op-z-index-tooltip);
4162
+ display: block;
4163
+ width: max-content;
4164
+ max-width: var(--_op-tooltip-max-width);
4165
+ padding: var(--_op-tooltip-padding);
4166
+ border-radius: var(--_op-tooltip-tooltip-radius);
4167
+ background-color: var(--_op-tooltip-background-color);
4168
+ color: var(--_op-tooltip-text-color);
4169
+ content: attr(data-tooltip-text);
4170
+ font-family: var(--op-font-family); /* Makes tooltips on icons work */
4171
+ font-size: var(--_op-tooltip-tooltip-font-size);
4172
+ overflow-wrap: break-word;
4173
+ pointer-events: none;
4174
+ text-align: center;
4175
+ white-space: normal;
4176
+ }
4177
+ &::after {
4178
+ position: absolute;
4179
+ z-index: var(--op-z-index-tooltip);
4180
+ border: var(--_op-tooltip-arrow-size) solid var(--_op-tooltip-background-color);
4181
+ content: "";
4182
+ pointer-events: none;
4183
+ }
4184
+ &:hover {
4185
+ &::before,
4186
+ &::after {
4187
+ opacity: var(--op-opacity-full);
4188
+ visibility: visible;
4189
+ }
4190
+ }
4191
+ &[data-tooltip-position=top],
4192
+ &:not([data-tooltip-position]) {
4193
+ &::before,
4194
+ &::after {
4195
+ inset-inline-start: 50%;
4196
+ transform: translateX(-50%);
4197
+ }
4198
+ &::before {
4199
+ inset-block-end: 100%;
4200
+ margin-block-end: calc(var(--_op-tooltip-arrow-size) + var(--_op-tooltip-tooltip-offset));
4201
+ }
4202
+ &::after {
4203
+ border-color: var(--_op-tooltip-background-color) transparent transparent transparent;
4204
+ inset-block-end: 100%;
4205
+ margin-block-end: calc(-1 * var(--_op-tooltip-arrow-size) + var(--_op-tooltip-tooltip-offset));
4206
+ }
4207
+ }
4208
+ &[data-tooltip-position=left] {
4209
+ &::before,
4210
+ &::after {
4211
+ inset-block-start: 50%;
4212
+ transform: translateY(-50%);
4213
+ }
4214
+ &::before {
4215
+ inset-inline-end: 100%;
4216
+ margin-inline-end: calc(var(--_op-tooltip-arrow-size) + var(--_op-tooltip-tooltip-offset));
4217
+ }
4218
+ &::after {
4219
+ border-color: transparent transparent transparent var(--_op-tooltip-background-color);
4220
+ inset-inline-end: 100%;
4221
+ margin-inline-end: calc(-1 * var(--_op-tooltip-arrow-size) + var(--_op-tooltip-tooltip-offset));
4222
+ }
4223
+ }
4224
+ &[data-tooltip-position=bottom] {
4225
+ &::before,
4226
+ &::after {
4227
+ inset-inline-start: 50%;
4228
+ transform: translateX(-50%);
4229
+ }
4230
+ &::before {
4231
+ inset-block-start: 100%;
4232
+ margin-block-start: calc(var(--_op-tooltip-arrow-size) + var(--_op-tooltip-tooltip-offset));
4233
+ }
4234
+ &::after {
4235
+ border-color: transparent transparent var(--_op-tooltip-background-color) transparent;
4236
+ inset-block-start: 100%;
4237
+ margin-block-start: calc(-1 * var(--_op-tooltip-arrow-size) + var(--_op-tooltip-tooltip-offset));
4238
+ }
4239
+ }
4240
+ &[data-tooltip-position=right] {
4241
+ &::before,
4242
+ &::after {
4243
+ inset-block-start: 50%;
4244
+ transform: translateY(-50%);
4245
+ }
4246
+ &::before {
4247
+ inset-inline-start: 100%;
4248
+ margin-inline-start: calc(var(--_op-tooltip-arrow-size) + var(--_op-tooltip-tooltip-offset));
4249
+ }
4250
+ &::after {
4251
+ border-color: transparent var(--_op-tooltip-background-color) transparent transparent;
4252
+ inset-inline-start: 100%;
4253
+ margin-inline-start: calc(-1 * var(--_op-tooltip-arrow-size) + var(--_op-tooltip-tooltip-offset));
4254
+ }
4255
+ }
4176
4256
  }
4177
4257
 
4178
4258
  /*# sourceMappingURL=optics.css.map */