@rolemodel/optics 1.2.0 → 1.4.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,188 +2019,182 @@ 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
- .alert-notice, .alert-info, .alert-danger,
2053
- .alert-alert, .alert-warning {
2056
+ .alert {
2054
2057
  display: flex;
2055
2058
  align-items: center;
2056
2059
  padding: var(--op-space-x-small) var(--op-space-medium);
2057
2060
  border-radius: var(--op-radius-medium);
2058
2061
  gap: var(--op-space-small);
2059
- }
2060
- .alert-notice .alert__icon, .alert-info .alert__icon, .alert-danger .alert__icon,
2061
- .alert-alert .alert__icon, .alert-warning .alert__icon {
2062
- /* stylelint-disable scss/at-extend-no-missing-placeholder */
2063
- /* stylelint-enable scss/at-extend-no-missing-placeholder */
2064
- line-height: var(--op-line-height-dense);
2065
- }
2066
- .alert-notice .alert__messages, .alert-info .alert__messages, .alert-danger .alert__messages,
2067
- .alert-alert .alert__messages, .alert-warning .alert__messages {
2068
- display: flex;
2069
- flex: 1;
2070
- flex-direction: column;
2071
- gap: var(--op-space-2x-small);
2072
- }
2073
- .alert-notice .alert__title, .alert-info .alert__title, .alert-danger .alert__title,
2074
- .alert-alert .alert__title, .alert-warning .alert__title {
2075
- font-size: var(--op-font-medium);
2076
- font-weight: var(--op-font-weight-medium);
2077
- }
2078
- .alert-notice .alert__description, .alert-info .alert__description, .alert-danger .alert__description,
2079
- .alert-alert .alert__description, .alert-warning .alert__description {
2080
- font-size: var(--op-font-small);
2081
- }
2082
- .alert--flash.alert-notice, .alert--flash.alert-info, .alert--flash.alert-danger,
2083
- .alert--flash.alert-alert, .alert--flash.alert-warning {
2084
- position: fixed;
2085
- z-index: var(--op-z-index-alert-group);
2086
- top: var(--op-space-large);
2087
- right: var(--op-space-large);
2088
- animation: var(--op-animation-flash);
2089
- }
2090
-
2091
- .alert-warning {
2092
- background-color: var(--op-color-alerts-warning-plus-eight);
2093
- box-shadow: var(--op-border-all) var(--op-color-alerts-warning-base);
2094
- color: var(--op-color-alerts-warning-on-plus-eight);
2095
- }
2096
- .alert-warning .alert__title {
2097
- color: var(--op-color-alerts-warning-on-plus-eight-alt);
2098
- }
2099
- .alert-warning.alert--muted {
2100
- background-color: var(--op-color-alerts-warning-plus-five);
2101
- box-shadow: none;
2102
- color: var(--op-color-alerts-warning-on-plus-five);
2103
- }
2104
- .alert-warning.alert--muted .alert__title {
2105
- color: var(--op-color-alerts-warning-on-plus-five-alt);
2106
- }
2107
- .alert-warning.alert--filled {
2108
- background-color: var(--op-color-alerts-warning-base);
2109
- box-shadow: none;
2110
- color: var(--op-color-alerts-warning-on-base);
2111
- }
2112
- .alert-warning.alert--filled .alert__title {
2113
- color: var(--op-color-alerts-warning-on-base-alt);
2114
- }
2115
-
2116
- .alert-danger,
2117
- .alert-alert {
2118
- background-color: var(--op-color-alerts-danger-plus-eight);
2119
- box-shadow: var(--op-border-all) var(--op-color-alerts-danger-base);
2120
- color: var(--op-color-alerts-danger-on-plus-eight);
2121
- /* stylelint-disable no-descending-specificity */
2122
- /* stylelint-enable no-descending-specificity */
2123
- }
2124
- .alert-danger .alert__title,
2125
- .alert-alert .alert__title {
2126
- color: var(--op-color-alerts-danger-on-plus-eight-alt);
2127
- }
2128
- .alert-danger.alert--muted,
2129
- .alert-alert.alert--muted {
2130
- background-color: var(--op-color-alerts-danger-plus-five);
2131
- box-shadow: none;
2132
- color: var(--op-color-alerts-danger-on-plus-five);
2133
- }
2134
- .alert-danger.alert--muted .alert__title,
2135
- .alert-alert.alert--muted .alert__title {
2136
- color: var(--op-color-alerts-danger-on-plus-five-alt);
2137
- }
2138
- .alert-danger.alert--filled,
2139
- .alert-alert.alert--filled {
2140
- background-color: var(--op-color-alerts-danger-base);
2141
- box-shadow: none;
2142
- color: var(--op-color-alerts-danger-on-base);
2143
- }
2144
- .alert-danger.alert--filled .alert__title,
2145
- .alert-alert.alert--filled .alert__title {
2146
- color: var(--op-color-alerts-danger-on-base-alt);
2147
- }
2148
-
2149
- .alert-info {
2150
- background-color: var(--op-color-alerts-info-plus-eight);
2151
- box-shadow: var(--op-border-all) var(--op-color-alerts-info-base);
2152
- color: var(--op-color-alerts-info-on-plus-eight);
2153
- /* stylelint-disable no-descending-specificity */
2154
- /* stylelint-enable no-descending-specificity */
2155
- }
2156
- .alert-info .alert__title {
2157
- color: var(--op-color-alerts-info-on-plus-eight-alt);
2158
- }
2159
- .alert-info.alert--muted {
2160
- background-color: var(--op-color-alerts-info-plus-five);
2161
- box-shadow: none;
2162
- color: var(--op-color-alerts-info-on-plus-five);
2163
- }
2164
- .alert-info.alert--muted .alert__title {
2165
- color: var(--op-color-alerts-info-on-plus-five-alt);
2166
- }
2167
- .alert-info.alert--filled {
2168
- background-color: var(--op-color-alerts-info-base);
2169
- box-shadow: none;
2170
- color: var(--op-color-alerts-info-on-base);
2171
- }
2172
- .alert-info.alert--filled .alert__title {
2173
- color: var(--op-color-alerts-info-on-base-alt);
2174
- }
2175
-
2176
- .alert-notice {
2177
- background-color: var(--op-color-alerts-notice-plus-eight);
2178
- box-shadow: var(--op-border-all) var(--op-color-alerts-notice-base);
2179
- color: var(--op-color-alerts-notice-on-plus-eight);
2180
- /* stylelint-disable no-descending-specificity */
2181
- /* stylelint-enable no-descending-specificity */
2182
- }
2183
- .alert-notice .alert__title {
2184
- color: var(--op-color-alerts-notice-on-plus-eight-alt);
2185
- }
2186
- .alert-notice.alert--muted {
2187
- background-color: var(--op-color-alerts-notice-plus-five);
2188
- box-shadow: none;
2189
- color: var(--op-color-alerts-notice-on-plus-five);
2190
- }
2191
- .alert-notice.alert--muted .alert__title {
2192
- color: var(--op-color-alerts-notice-on-plus-five-alt);
2193
- }
2194
- .alert-notice.alert--filled {
2195
- background-color: var(--op-color-alerts-notice-base);
2196
- box-shadow: none;
2197
- color: var(--op-color-alerts-notice-on-base);
2198
- }
2199
- .alert-notice.alert--filled .alert__title {
2200
- color: var(--op-color-alerts-notice-on-base-alt);
2062
+ /* Elements */
2063
+ .alert__icon {
2064
+ --op-mso-optical-sizing: 40; /* .icon--large styling */
2065
+ --op-mso-weight: var(--op-font-weight-bold); /* .icon--weight-bold styling */
2066
+ font-size: var(--op-font-large); /* .icon--large styling */
2067
+ line-height: var(--op-line-height-dense);
2068
+ }
2069
+ .alert__messages {
2070
+ display: flex;
2071
+ flex: 1;
2072
+ flex-direction: column;
2073
+ gap: var(--op-space-2x-small);
2074
+ }
2075
+ .alert__title {
2076
+ font-size: var(--op-font-medium);
2077
+ font-weight: var(--op-font-weight-medium);
2078
+ }
2079
+ .alert__description {
2080
+ font-size: var(--op-font-small);
2081
+ }
2082
+ /* Modifiers */
2083
+ &.alert--flash {
2084
+ position: fixed;
2085
+ z-index: var(--op-z-index-alert-group);
2086
+ top: var(--op-space-large);
2087
+ right: var(--op-space-large);
2088
+ animation: var(--op-animation-flash);
2089
+ }
2090
+ &.alert--warning {
2091
+ background-color: var(--op-color-alerts-warning-plus-eight);
2092
+ box-shadow: var(--op-border-all) var(--op-color-alerts-warning-base);
2093
+ color: var(--op-color-alerts-warning-on-plus-eight);
2094
+ .alert__title {
2095
+ color: var(--op-color-alerts-warning-on-plus-eight-alt);
2096
+ }
2097
+ &.alert--muted {
2098
+ background-color: var(--op-color-alerts-warning-plus-five);
2099
+ box-shadow: none;
2100
+ color: var(--op-color-alerts-warning-on-plus-five);
2101
+ .alert__title {
2102
+ color: var(--op-color-alerts-warning-on-plus-five-alt);
2103
+ }
2104
+ }
2105
+ &.alert--filled {
2106
+ background-color: var(--op-color-alerts-warning-base);
2107
+ box-shadow: none;
2108
+ color: var(--op-color-alerts-warning-on-base);
2109
+ .alert__title {
2110
+ color: var(--op-color-alerts-warning-on-base-alt);
2111
+ }
2112
+ }
2113
+ }
2114
+ /* alert--alert is an alias for alert--danger. See Alert.mdx for reasoning. */
2115
+ &.alert--danger,
2116
+ &.alert--alert {
2117
+ background-color: var(--op-color-alerts-danger-plus-eight);
2118
+ box-shadow: var(--op-border-all) var(--op-color-alerts-danger-base);
2119
+ color: var(--op-color-alerts-danger-on-plus-eight);
2120
+ /* stylelint-disable no-descending-specificity */
2121
+ .alert__title {
2122
+ color: var(--op-color-alerts-danger-on-plus-eight-alt);
2123
+ }
2124
+ /* stylelint-enable no-descending-specificity */
2125
+ &.alert--muted {
2126
+ background-color: var(--op-color-alerts-danger-plus-five);
2127
+ box-shadow: none;
2128
+ color: var(--op-color-alerts-danger-on-plus-five);
2129
+ .alert__title {
2130
+ color: var(--op-color-alerts-danger-on-plus-five-alt);
2131
+ }
2132
+ }
2133
+ &.alert--filled {
2134
+ background-color: var(--op-color-alerts-danger-base);
2135
+ box-shadow: none;
2136
+ color: var(--op-color-alerts-danger-on-base);
2137
+ .alert__title {
2138
+ color: var(--op-color-alerts-danger-on-base-alt);
2139
+ }
2140
+ }
2141
+ }
2142
+ &.alert--info {
2143
+ background-color: var(--op-color-alerts-info-plus-eight);
2144
+ box-shadow: var(--op-border-all) var(--op-color-alerts-info-base);
2145
+ color: var(--op-color-alerts-info-on-plus-eight);
2146
+ /* stylelint-disable no-descending-specificity */
2147
+ .alert__title {
2148
+ color: var(--op-color-alerts-info-on-plus-eight-alt);
2149
+ }
2150
+ /* stylelint-enable no-descending-specificity */
2151
+ &.alert--muted {
2152
+ background-color: var(--op-color-alerts-info-plus-five);
2153
+ box-shadow: none;
2154
+ color: var(--op-color-alerts-info-on-plus-five);
2155
+ .alert__title {
2156
+ color: var(--op-color-alerts-info-on-plus-five-alt);
2157
+ }
2158
+ }
2159
+ &.alert--filled {
2160
+ background-color: var(--op-color-alerts-info-base);
2161
+ box-shadow: none;
2162
+ color: var(--op-color-alerts-info-on-base);
2163
+ .alert__title {
2164
+ color: var(--op-color-alerts-info-on-base-alt);
2165
+ }
2166
+ }
2167
+ }
2168
+ &.alert--notice {
2169
+ background-color: var(--op-color-alerts-notice-plus-eight);
2170
+ box-shadow: var(--op-border-all) var(--op-color-alerts-notice-base);
2171
+ color: var(--op-color-alerts-notice-on-plus-eight);
2172
+ /* stylelint-disable no-descending-specificity */
2173
+ .alert__title {
2174
+ color: var(--op-color-alerts-notice-on-plus-eight-alt);
2175
+ }
2176
+ /* stylelint-enable no-descending-specificity */
2177
+ &.alert--muted {
2178
+ background-color: var(--op-color-alerts-notice-plus-five);
2179
+ box-shadow: none;
2180
+ color: var(--op-color-alerts-notice-on-plus-five);
2181
+ .alert__title {
2182
+ color: var(--op-color-alerts-notice-on-plus-five-alt);
2183
+ }
2184
+ }
2185
+ &.alert--filled {
2186
+ background-color: var(--op-color-alerts-notice-base);
2187
+ box-shadow: none;
2188
+ color: var(--op-color-alerts-notice-on-base);
2189
+ .alert__title {
2190
+ color: var(--op-color-alerts-notice-on-base-alt);
2191
+ }
2192
+ }
2193
+ }
2201
2194
  }
2202
2195
 
2203
2196
  .avatar {
2197
+ /* Public API (customizable component options) */
2204
2198
  --_op-avatar-border-radius: var(--op-radius-circle);
2205
2199
  --_op-avatar-inner-border-color: var(--op-color-neutral-minus-max);
2206
2200
  --_op-avatar-outer-border-color: var(--op-color-neutral-base);
@@ -2208,9 +2202,10 @@ small {
2208
2202
  --_op-avatar-outer-border-width: var(--op-border-width-large);
2209
2203
  --_op-avatar-disabled-opacity: var(--op-opacity-disabled);
2210
2204
  --_op-avatar-hover-opacity: var(--op-opacity-overlay);
2211
- --_op-avatar-size-small: calc(8 * var(--op-size-unit));
2212
- --_op-avatar-size-medium: calc(10 * var(--op-size-unit));
2213
- --_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) */
2214
2209
  --__op-avatar-size: var(--_op-avatar-size-large);
2215
2210
  position: relative;
2216
2211
  z-index: 1;
@@ -2221,54 +2216,60 @@ small {
2221
2216
  height: var(--__op-avatar-size);
2222
2217
  min-height: var(--__op-avatar-size);
2223
2218
  border-radius: var(--_op-avatar-border-radius);
2224
- }
2225
- .avatar::before {
2226
- position: absolute;
2227
- z-index: 2;
2228
- content: "";
2229
- inset: 0;
2230
- }
2231
- .avatar::after {
2232
- position: absolute;
2233
- z-index: 3;
2234
- border-radius: var(--_op-avatar-border-radius);
2235
- 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);
2236
- content: "";
2237
- inset: 0;
2238
- }
2239
- .avatar img {
2240
- width: 100%;
2241
- height: 100%;
2242
- object-fit: cover;
2243
- }
2244
- .avatar--disabled.avatar {
2245
- opacity: var(--_op-avatar-disabled-opacity);
2246
- pointer-events: none;
2247
- }
2248
- .avatar:hover:not(div, .avatar--disabled) {
2249
- --_op-avatar-inner-border-color: var(--op-color-primary-base);
2250
- --_op-avatar-outer-border-color: var(--op-color-primary-plus-one);
2251
- cursor: pointer;
2252
- }
2253
- .avatar:hover:not(div, .avatar--disabled)::before {
2254
- background-color: var(--op-color-primary-base);
2255
- opacity: var(--_op-avatar-hover-opacity);
2256
- }
2257
- .avatar:focus, .avatar:focus-visible, .avatar:focus-within {
2258
- outline: none;
2259
- }
2260
- .avatar:focus-visible:not(.avatar--disabled) {
2261
- --_op-avatar-outer-border-color: var(--op-color-primary-base);
2262
- cursor: pointer;
2263
- }
2264
- .avatar--small.avatar {
2265
- --__op-avatar-size: var(--_op-avatar-size-small);
2266
- }
2267
- .avatar--medium.avatar {
2268
- --__op-avatar-size: var(--_op-avatar-size-medium);
2269
- }
2270
- .avatar--large.avatar {
2271
- --__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
+ }
2272
2273
  }
2273
2274
 
2274
2275
  .badge-notice, .badge-info, .badge-danger, .badge-warning, .badge-primary, .badge {
@@ -2337,30 +2338,34 @@ small {
2337
2338
  }
2338
2339
 
2339
2340
  .breadcrumbs {
2341
+ /* Public API (customizable component options) */
2340
2342
  --_op-breadcrumbs-font-size-small: var(--op-font-x-small);
2341
2343
  --_op-breadcrumbs-font-size-large: var(--op-font-small);
2344
+ /* Private API (component option defaults) */
2342
2345
  --__op-breadcrumbs-font-size: var(--_op-breadcrumbs-font-size-small);
2343
2346
  display: flex;
2344
2347
  flex-wrap: wrap;
2345
2348
  align-items: baseline;
2346
2349
  gap: var(--op-space-x-small);
2347
- }
2348
- .breadcrumbs .breadcrumbs__link {
2349
- font-size: var(--__op-breadcrumbs-font-size);
2350
- text-decoration: none;
2351
- }
2352
- .breadcrumbs .breadcrumbs__link:hover {
2353
- text-decoration: underline;
2354
- }
2355
- .breadcrumbs .breadcrumbs__text {
2356
- font-size: var(--__op-breadcrumbs-font-size);
2357
- font-weight: var(--op-font-weight-bold);
2358
- }
2359
- .breadcrumbs--small.breadcrumbs {
2360
- --__op-breadcrumbs-font-size: var(--_op-breadcrumbs-font-size-small);
2361
- }
2362
- .breadcrumbs--large.breadcrumbs {
2363
- --__op-breadcrumbs-font-size: var(--_op-breadcrumbs-font-size-large);
2350
+ /* Elements */
2351
+ .breadcrumbs__link {
2352
+ font-size: var(--__op-breadcrumbs-font-size);
2353
+ text-decoration: none;
2354
+ &:hover {
2355
+ text-decoration: underline;
2356
+ }
2357
+ }
2358
+ .breadcrumbs__text {
2359
+ font-size: var(--__op-breadcrumbs-font-size);
2360
+ font-weight: var(--op-font-weight-bold);
2361
+ }
2362
+ /* Modifiers */
2363
+ &.breadcrumbs--small {
2364
+ --__op-breadcrumbs-font-size: var(--_op-breadcrumbs-font-size-small);
2365
+ }
2366
+ &.breadcrumbs--large {
2367
+ --__op-breadcrumbs-font-size: var(--_op-breadcrumbs-font-size-large);
2368
+ }
2364
2369
  }
2365
2370
 
2366
2371
  .btn-warning, .btn-destructive,
@@ -2814,7 +2819,8 @@ small {
2814
2819
  justify-content: space-between;
2815
2820
  }
2816
2821
 
2817
- .divider-vertical, .divider {
2822
+ .divider {
2823
+ /* Public API (customizable component options) */
2818
2824
  --_op-divider-vertical-min-height: var(--op-space-large);
2819
2825
  --_op-divider-height-small: var(--op-border-width);
2820
2826
  --_op-divider-height-medium: var(--op-border-width-large);
@@ -2822,40 +2828,42 @@ small {
2822
2828
  --_op-divider-padding-small: var(--op-space-2x-small);
2823
2829
  --_op-divider-padding-medium: var(--op-space-x-small);
2824
2830
  --_op-divider-padding-large: var(--op-space-medium);
2831
+ /* Private API (component option defaults) */
2825
2832
  --__op-divider-height: var(--_op-divider-height-small);
2826
2833
  --__op-divider-padding: 0;
2827
- background-color: var(--op-color-border);
2828
- }
2829
- .divider--small.divider-vertical, .divider--small.divider {
2830
- --__op-divider-height: var(--_op-divider-height-small);
2831
- }
2832
- .divider--medium.divider-vertical, .divider--medium.divider {
2833
- --__op-divider-height: var(--_op-divider-height-medium);
2834
- }
2835
- .divider--large.divider-vertical, .divider--large.divider {
2836
- --__op-divider-height: var(--_op-divider-height-large);
2837
- }
2838
- .divider--spacing-small.divider-vertical, .divider--spacing-small.divider {
2839
- --__op-divider-padding: var(--_op-divider-padding-small);
2840
- }
2841
- .divider--spacing-medium.divider-vertical, .divider--spacing-medium.divider {
2842
- --__op-divider-padding: var(--_op-divider-padding-medium);
2843
- }
2844
- .divider--spacing-large.divider-vertical, .divider--spacing-large.divider {
2845
- --__op-divider-padding: var(--_op-divider-padding-large);
2846
- }
2847
-
2848
- .divider {
2849
2834
  width: 100%;
2850
2835
  height: var(--__op-divider-height);
2851
- margin: var(--__op-divider-padding) 0;
2852
- }
2853
-
2854
- .divider-vertical {
2855
- width: var(--__op-divider-height);
2856
- height: 100%;
2857
- min-height: var(--_op-divider-vertical-min-height);
2858
- margin: 0 var(--__op-divider-padding);
2836
+ background-color: var(--op-color-border);
2837
+ margin-block: var(--__op-divider-padding);
2838
+ margin-inline: 0;
2839
+ /* Size Modifiers */
2840
+ &.divider--small {
2841
+ --__op-divider-height: var(--_op-divider-height-small);
2842
+ }
2843
+ &.divider--medium {
2844
+ --__op-divider-height: var(--_op-divider-height-medium);
2845
+ }
2846
+ &.divider--large {
2847
+ --__op-divider-height: var(--_op-divider-height-large);
2848
+ }
2849
+ /* Spacing Modifiers */
2850
+ &.divider--spacing-small {
2851
+ --__op-divider-padding: var(--_op-divider-padding-small);
2852
+ }
2853
+ &.divider--spacing-medium {
2854
+ --__op-divider-padding: var(--_op-divider-padding-medium);
2855
+ }
2856
+ &.divider--spacing-large {
2857
+ --__op-divider-padding: var(--_op-divider-padding-large);
2858
+ }
2859
+ /* Direction Modifier */
2860
+ &.divider--vertical {
2861
+ width: var(--__op-divider-height);
2862
+ height: 100%;
2863
+ min-height: var(--_op-divider-vertical-min-height);
2864
+ margin-block: 0;
2865
+ margin-inline: var(--__op-divider-padding);
2866
+ }
2859
2867
  }
2860
2868
 
2861
2869
  .form-control {
@@ -3177,8 +3185,7 @@ textarea.form-control:not([type=radio], [type=checkbox]) {
3177
3185
  --op-mso-weight: var(--op-font-weight-semi-bold);
3178
3186
  }
3179
3187
 
3180
- .icon--weight-bold, .sidebar-primary .sidebar__content > * .material-symbols-outlined, .sidebar .sidebar__content > * .material-symbols-outlined, .alert-warning .alert__icon, .alert-danger .alert__icon,
3181
- .alert-alert .alert__icon, .alert-info .alert__icon, .alert-notice .alert__icon {
3188
+ .icon--weight-bold, .sidebar-primary .sidebar__content > * .material-symbols-outlined, .sidebar .sidebar__content > * .material-symbols-outlined {
3182
3189
  --op-mso-weight: var(--op-font-weight-bold);
3183
3190
  }
3184
3191
 
@@ -3199,8 +3206,7 @@ textarea.form-control:not([type=radio], [type=checkbox]) {
3199
3206
  --op-mso-optical-sizing: 20;
3200
3207
  }
3201
3208
 
3202
- .icon--large, .sidebar-primary .sidebar__content > * .material-symbols-outlined, .sidebar .sidebar__content > * .material-symbols-outlined, .alert-warning .alert__icon, .alert-danger .alert__icon,
3203
- .alert-alert .alert__icon, .alert-info .alert__icon, .alert-notice .alert__icon {
3209
+ .icon--large, .sidebar-primary .sidebar__content > * .material-symbols-outlined, .sidebar .sidebar__content > * .material-symbols-outlined {
3204
3210
  font-size: var(--op-font-large);
3205
3211
  --op-mso-optical-sizing: 40;
3206
3212
  }
@@ -3219,8 +3225,7 @@ textarea.form-control:not([type=radio], [type=checkbox]) {
3219
3225
  font-size: var(--op-font-small);
3220
3226
  --op-mso-optical-sizing: 20;
3221
3227
  }
3222
- .custom-icons.icon--large, .sidebar-primary .sidebar__content > * .custom-icons.material-symbols-outlined, .sidebar .sidebar__content > * .custom-icons.material-symbols-outlined, .alert-warning .custom-icons.alert__icon, .alert-danger .custom-icons.alert__icon,
3223
- .alert-alert .custom-icons.alert__icon, .alert-info .custom-icons.alert__icon, .alert-notice .custom-icons.alert__icon {
3228
+ .custom-icons.icon--large, .sidebar-primary .sidebar__content > * .custom-icons.material-symbols-outlined, .sidebar .sidebar__content > * .custom-icons.material-symbols-outlined {
3224
3229
  width: var(--op-font-large);
3225
3230
  height: var(--op-font-large);
3226
3231
  }
@@ -3405,19 +3410,21 @@ dialog.modal.modal--closing::backdrop {
3405
3410
  display: flex;
3406
3411
  align-items: center;
3407
3412
  gap: 0;
3408
- }
3409
- .pagination .form-group {
3410
- align-items: center;
3411
- }
3412
- .pagination .form-group .form-label {
3413
- grid-column: 1;
3414
- }
3415
- .pagination .form-group .form-control {
3416
- grid-column: 2;
3417
- }
3418
- .pagination .pagination__divider {
3419
- height: 100%;
3420
- padding: 0 var(--op-space-x-small);
3413
+ /* Showing Dropdown */
3414
+ .form-group {
3415
+ align-items: center;
3416
+ .form-label {
3417
+ grid-column: 1;
3418
+ }
3419
+ .form-control {
3420
+ grid-column: 2;
3421
+ }
3422
+ }
3423
+ /* ... Gap */
3424
+ .pagination__divider {
3425
+ height: 100%;
3426
+ padding-inline: var(--op-space-x-small);
3427
+ }
3421
3428
  }
3422
3429
 
3423
3430
  .sidebar-primary, .sidebar {
@@ -3578,7 +3585,8 @@ dialog.modal.modal--closing::backdrop {
3578
3585
  }
3579
3586
 
3580
3587
  .side-panel {
3581
- --_op-side-panel-width: calc(54 * var(--op-size-unit));
3588
+ /* Public API (customizable component options) */
3589
+ --_op-side-panel-width: calc(54 * var(--op-size-unit)); /* 216px */
3582
3590
  --_op-side-panel-header-padding: var(--op-space-medium);
3583
3591
  --_op-side-panel-body-padding: var(--op-space-medium);
3584
3592
  --_op-side-panel-footer-padding: var(--op-space-medium);
@@ -3591,70 +3599,80 @@ dialog.modal.modal--closing::backdrop {
3591
3599
  flex-direction: column;
3592
3600
  background-color: var(--op-color-background);
3593
3601
  color: var(--op-color-on-background);
3594
- }
3595
- .side-panel--border-left.side-panel {
3596
- box-shadow: var(--op-border-left) var(--op-color-border);
3597
- }
3598
- .side-panel--border-right.side-panel {
3599
- box-shadow: var(--op-border-right) var(--op-color-border);
3600
- }
3601
- .side-panel--border-left.side-panel--border-right.side-panel {
3602
- box-shadow: var(--op-border-x);
3603
- }
3604
- .side-panel .side-panel__header.side-panel__header--padded {
3605
- padding: var(--_op-side-panel-header-padding);
3606
- }
3607
- .side-panel .side-panel__header.side-panel__header--padded-x {
3608
- padding-inline: var(--_op-side-panel-header-padding);
3609
- }
3610
- .side-panel .side-panel__header.side-panel__header--padded-y {
3611
- padding-block: var(--_op-side-panel-header-padding);
3612
- }
3613
- .side-panel .side-panel__body {
3614
- flex: 1;
3615
- overflow-y: auto;
3616
- }
3617
- .side-panel .side-panel__body.side-panel__body--padded {
3618
- padding: var(--_op-side-panel-body-padding);
3619
- }
3620
- .side-panel .side-panel__body.side-panel__body--padded-x {
3621
- padding-inline: var(--_op-side-panel-body-padding);
3622
- }
3623
- .side-panel .side-panel__body.side-panel__body--padded-y {
3624
- padding-block: var(--_op-side-panel-body-padding);
3625
- }
3626
- .side-panel .side-panel__footer.side-panel__footer--padded {
3627
- padding: var(--_op-side-panel-footer-padding);
3628
- }
3629
- .side-panel .side-panel__footer.side-panel__footer--padded-x {
3630
- padding-inline: var(--_op-side-panel-footer-padding);
3631
- }
3632
- .side-panel .side-panel__footer.side-panel__footer--padded-y {
3633
- padding-block: var(--_op-side-panel-footer-padding);
3634
- }
3635
- .side-panel .side-panel__section.side-panel__section--padded {
3636
- padding: var(--_op-side-panel-section-padding);
3637
- }
3638
- .side-panel .side-panel__section.side-panel__section--padded-x {
3639
- padding-inline: var(--_op-side-panel-section-padding);
3640
- }
3641
- .side-panel .side-panel__section.side-panel__section--padded-y {
3642
- padding-block: var(--_op-side-panel-section-padding);
3602
+ /* Modifiers */
3603
+ &.side-panel--border-left {
3604
+ box-shadow: var(--op-border-left) var(--op-color-border);
3605
+ }
3606
+ &.side-panel--border-right {
3607
+ box-shadow: var(--op-border-right) var(--op-color-border);
3608
+ }
3609
+ &.side-panel--border-left.side-panel--border-right {
3610
+ box-shadow: var(--op-border-x);
3611
+ }
3612
+ /* Elements */
3613
+ .side-panel__header {
3614
+ &.side-panel__header--padded {
3615
+ padding: var(--_op-side-panel-header-padding);
3616
+ }
3617
+ &.side-panel__header--padded-x {
3618
+ padding-inline: var(--_op-side-panel-header-padding);
3619
+ }
3620
+ &.side-panel__header--padded-y {
3621
+ padding-block: var(--_op-side-panel-header-padding);
3622
+ }
3623
+ }
3624
+ .side-panel__body {
3625
+ flex: 1;
3626
+ overflow-y: auto;
3627
+ &.side-panel__body--padded {
3628
+ padding: var(--_op-side-panel-body-padding);
3629
+ }
3630
+ &.side-panel__body--padded-x {
3631
+ padding-inline: var(--_op-side-panel-body-padding);
3632
+ }
3633
+ &.side-panel__body--padded-y {
3634
+ padding-block: var(--_op-side-panel-body-padding);
3635
+ }
3636
+ }
3637
+ .side-panel__footer {
3638
+ &.side-panel__footer--padded {
3639
+ padding: var(--_op-side-panel-footer-padding);
3640
+ }
3641
+ &.side-panel__footer--padded-x {
3642
+ padding-inline: var(--_op-side-panel-footer-padding);
3643
+ }
3644
+ &.side-panel__footer--padded-y {
3645
+ padding-block: var(--_op-side-panel-footer-padding);
3646
+ }
3647
+ }
3648
+ .side-panel__section {
3649
+ &.side-panel__section--padded {
3650
+ padding: var(--_op-side-panel-section-padding);
3651
+ }
3652
+ &.side-panel__section--padded-x {
3653
+ padding-inline: var(--_op-side-panel-section-padding);
3654
+ }
3655
+ &.side-panel__section--padded-y {
3656
+ padding-block: var(--_op-side-panel-section-padding);
3657
+ }
3658
+ }
3643
3659
  }
3644
3660
 
3645
3661
  .spinner {
3662
+ /* Public API (customizable component options) */
3646
3663
  --_op-spinner-indicator-color: var(--op-color-primary-base);
3647
3664
  --_op-spinner-track-color: var(--op-color-neutral-plus-four);
3648
3665
  --_op-spinner-track-width-x-small: var(--op-border-width);
3649
3666
  --_op-spinner-track-width-small: var(--op-border-width-large);
3650
3667
  --_op-spinner-track-width-medium: calc(var(--op-border-width-large) + var(--op-border-width));
3651
3668
  --_op-spinner-track-width-large: var(--op-border-width-x-large);
3652
- --_op-spinner-diameter-x-small: calc(6 * var(--op-size-unit));
3653
- --_op-spinner-diameter-small: calc(10 * var(--op-size-unit));
3654
- --_op-spinner-diameter-medium: calc(15 * var(--op-size-unit));
3655
- --_op-spinner-diameter-large: calc(20 * var(--op-size-unit));
3669
+ --_op-spinner-diameter-x-small: calc(6 * var(--op-size-unit)); /* 24px */
3670
+ --_op-spinner-diameter-small: calc(10 * var(--op-size-unit)); /* 40px */
3671
+ --_op-spinner-diameter-medium: calc(15 * var(--op-size-unit)); /* 60px */
3672
+ --_op-spinner-diameter-large: calc(20 * var(--op-size-unit)); /* 80px */
3656
3673
  --_op-spinner-animation-duration: 0.8s;
3657
3674
  --_op-spinner-animation-timing-function: linear;
3675
+ /* Private API (component option defaults) */
3658
3676
  --__op-spinner-diameter: var(--_op-spinner-diameter-large);
3659
3677
  --__op-spinner-track-width: var(--_op-spinner-track-width-large);
3660
3678
  width: var(--__op-spinner-diameter);
@@ -3663,22 +3681,22 @@ dialog.modal.modal--closing::backdrop {
3663
3681
  border-radius: var(--__op-spinner-diameter);
3664
3682
  border-top-color: var(--_op-spinner-indicator-color);
3665
3683
  animation: spinner var(--_op-spinner-animation-duration) var(--_op-spinner-animation-timing-function) infinite;
3666
- }
3667
- .spinner--x-small.spinner {
3668
- --__op-spinner-diameter: var(--_op-spinner-diameter-x-small);
3669
- --__op-spinner-track-width: var(--_op-spinner-track-width-x-small);
3670
- }
3671
- .spinner--small.spinner {
3672
- --__op-spinner-diameter: var(--_op-spinner-diameter-small);
3673
- --__op-spinner-track-width: var(--_op-spinner-track-width-small);
3674
- }
3675
- .spinner--medium.spinner {
3676
- --__op-spinner-diameter: var(--_op-spinner-diameter-medium);
3677
- --__op-spinner-track-width: var(--_op-spinner-track-width-medium);
3678
- }
3679
- .spinner--large.spinner {
3680
- --__op-spinner-diameter: var(--_op-spinner-diameter-large);
3681
- --__op-spinner-track-width: var(--_op-spinner-track-width-large);
3684
+ &.spinner--x-small {
3685
+ --__op-spinner-diameter: var(--_op-spinner-diameter-x-small);
3686
+ --__op-spinner-track-width: var(--_op-spinner-track-width-x-small);
3687
+ }
3688
+ &.spinner--small {
3689
+ --__op-spinner-diameter: var(--_op-spinner-diameter-small);
3690
+ --__op-spinner-track-width: var(--_op-spinner-track-width-small);
3691
+ }
3692
+ &.spinner--medium {
3693
+ --__op-spinner-diameter: var(--_op-spinner-diameter-medium);
3694
+ --__op-spinner-track-width: var(--_op-spinner-track-width-medium);
3695
+ }
3696
+ &.spinner--large {
3697
+ --__op-spinner-diameter: var(--_op-spinner-diameter-large);
3698
+ --__op-spinner-track-width: var(--_op-spinner-track-width-large);
3699
+ }
3682
3700
  }
3683
3701
 
3684
3702
  @keyframes spinner {
@@ -3687,12 +3705,14 @@ dialog.modal.modal--closing::backdrop {
3687
3705
  }
3688
3706
  }
3689
3707
  .switch {
3690
- --_op-switch-height-small: calc(4 * var(--op-size-unit));
3691
- --_op-switch-height-large: calc(6 * var(--op-size-unit));
3692
- --_op-switch-width-small: calc(7 * var(--op-size-unit));
3693
- --_op-switch-width-large: calc(11 * var(--op-size-unit));
3708
+ /* Public API (allowed to be overridden) */
3709
+ --_op-switch-height-small: calc(4 * var(--op-size-unit)); /* 16px */
3710
+ --_op-switch-height-large: calc(6 * var(--op-size-unit)); /* 24px */
3711
+ --_op-switch-width-small: calc(7 * var(--op-size-unit)); /* 28px */
3712
+ --_op-switch-width-large: calc(11 * var(--op-size-unit)); /* 44px */
3694
3713
  --_op-switch-opacity-disabled: var(--op-opacity-disabled);
3695
3714
  --_op-switch-switch-padding: var(--op-space-2x-small);
3715
+ /* Private API (don't touch these) */
3696
3716
  --__op-switch-width: var(--_op-switch-width-large);
3697
3717
  --__op-switch-height: var(--_op-switch-height-large);
3698
3718
  --__op-switch-switch-size: calc(var(--__op-switch-height) - var(--_op-switch-switch-padding));
@@ -3700,72 +3720,78 @@ dialog.modal.modal--closing::backdrop {
3700
3720
  position: relative;
3701
3721
  display: flex;
3702
3722
  align-items: center;
3703
- }
3704
- .switch input {
3705
- width: 0;
3706
- height: 0;
3707
- margin-right: calc(-1 * var(--op-space-x-small));
3708
- }
3709
- .switch input:disabled {
3710
- visibility: hidden;
3711
- }
3712
- .switch input:disabled + label {
3713
- cursor: not-allowed;
3714
- opacity: var(--_op-switch-opacity-disabled);
3715
- }
3716
- .switch input:checked + label {
3717
- background-color: var(--op-color-primary-base);
3718
- box-shadow: none;
3719
- }
3720
- .switch input:checked + label::after {
3721
- left: calc(100% - var(--__op-switch-half-switch-padding));
3722
- transform: translateX(-100%);
3723
- }
3724
- .switch input:hover + label::after {
3725
- background-color: var(--op-color-primary-plus-five);
3726
- }
3727
- .switch input:focus-visible + label {
3728
- 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);
3729
- }
3730
- .switch input:focus-visible + label::after {
3731
- background-color: var(--op-color-neutral-plus-five);
3732
- box-shadow: var(--op-border-all) var(--op-color-primary-minus-three);
3733
- }
3734
- .switch input:focus-visible:checked + label::after {
3735
- background-color: var(--op-color-primary-plus-six);
3736
- box-shadow: var(--op-border-all) var(--op-color-primary-minus-two);
3737
- }
3738
- .switch label {
3739
- position: relative;
3740
- display: block;
3741
- width: var(--__op-switch-width);
3742
- height: var(--__op-switch-height);
3743
- border-radius: var(--op-radius-pill);
3744
- background: var(--op-color-neutral-base);
3745
- box-shadow: inset var(--op-border-all) var(--op-color-neutral-plus-three);
3746
- text-indent: -9999px;
3747
- }
3748
- .switch label::after {
3749
- position: absolute;
3750
- top: var(--__op-switch-half-switch-padding);
3751
- left: var(--__op-switch-half-switch-padding);
3752
- width: var(--__op-switch-switch-size);
3753
- height: var(--__op-switch-switch-size);
3754
- border-radius: var(--op-radius-circle);
3755
- background-color: var(--op-color-neutral-plus-eight);
3756
- content: "";
3757
- transition: var(--op-transition-input);
3758
- }
3759
- .switch--small.switch {
3760
- --__op-switch-width: var(--_op-switch-width-small);
3761
- --__op-switch-height: var(--_op-switch-height-small);
3762
- }
3763
- .switch--large.switch {
3764
- --__op-switch-width: var(--_op-switch-width-large);
3765
- --__op-switch-height: var(--_op-switch-height-large);
3766
- }
3767
- .switch + label {
3768
- width: fit-content;
3723
+ label {
3724
+ position: relative;
3725
+ display: block;
3726
+ width: var(--__op-switch-width);
3727
+ height: var(--__op-switch-height);
3728
+ border-radius: var(--op-radius-pill);
3729
+ background: var(--op-color-neutral-base);
3730
+ box-shadow: inset var(--op-border-all) var(--op-color-neutral-plus-three);
3731
+ 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 */
3732
+ &::after {
3733
+ position: absolute;
3734
+ width: var(--__op-switch-switch-size);
3735
+ height: var(--__op-switch-switch-size);
3736
+ border-radius: var(--op-radius-circle);
3737
+ background-color: var(--op-color-neutral-plus-eight);
3738
+ content: "";
3739
+ inset-block-start: var(--__op-switch-half-switch-padding);
3740
+ inset-inline-start: var(--__op-switch-half-switch-padding);
3741
+ transition: var(--op-transition-input);
3742
+ }
3743
+ }
3744
+ /* Prevent labels after the toggle being full width */
3745
+ & + label {
3746
+ width: fit-content;
3747
+ }
3748
+ input {
3749
+ width: 0;
3750
+ height: 0;
3751
+ margin-inline-end: calc(-1 * var(--op-space-x-small));
3752
+ &:disabled {
3753
+ visibility: hidden;
3754
+ }
3755
+ &:disabled + label {
3756
+ cursor: not-allowed;
3757
+ opacity: var(--_op-switch-opacity-disabled);
3758
+ }
3759
+ &:checked + label {
3760
+ background-color: var(--op-color-primary-base);
3761
+ box-shadow: none;
3762
+ &::after {
3763
+ left: calc(100% - var(--__op-switch-half-switch-padding));
3764
+ transform: translateX(-100%);
3765
+ }
3766
+ }
3767
+ &:hover + label {
3768
+ &::after {
3769
+ background-color: var(--op-color-primary-plus-five);
3770
+ }
3771
+ }
3772
+ &:focus-visible + label {
3773
+ 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);
3774
+ &::after {
3775
+ background-color: var(--op-color-neutral-plus-five);
3776
+ box-shadow: var(--op-border-all) var(--op-color-primary-minus-three);
3777
+ }
3778
+ }
3779
+ &:focus-visible:checked + label {
3780
+ &::after {
3781
+ background-color: var(--op-color-primary-plus-six);
3782
+ box-shadow: var(--op-border-all) var(--op-color-primary-minus-two);
3783
+ }
3784
+ }
3785
+ }
3786
+ /* Size Modifiers */
3787
+ &.switch--small {
3788
+ --__op-switch-width: var(--_op-switch-width-small);
3789
+ --__op-switch-height: var(--_op-switch-height-small);
3790
+ }
3791
+ &.switch--large {
3792
+ --__op-switch-width: var(--_op-switch-width-large);
3793
+ --__op-switch-height: var(--_op-switch-height-large);
3794
+ }
3769
3795
  }
3770
3796
 
3771
3797
  .tab-group {
@@ -3774,6 +3800,7 @@ dialog.modal.modal--closing::backdrop {
3774
3800
  }
3775
3801
 
3776
3802
  .tab {
3803
+ /* Public API */
3777
3804
  --_op-tab-font-small: var(--op-font-x-small);
3778
3805
  --_op-tab-font-large: var(--op-font-small);
3779
3806
  --_op-tab-padding-small: calc(var(--op-space-2x-small) + var(--op-space-3x-small)) var(--op-space-medium);
@@ -3781,6 +3808,7 @@ dialog.modal.modal--closing::backdrop {
3781
3808
  --_op-tab-indicator-width-small: var(--op-border-width-large);
3782
3809
  --_op-tab-indicator-width-large: var(--op-border-width-x-large);
3783
3810
  --_op-tab-disabled-opacity: var(--op-opacity-disabled);
3811
+ /* Private API */
3784
3812
  --__op-tab-font-size: var(--_op-tab-font-large);
3785
3813
  --__op-tab-padding: var(--_op-tab-padding-large);
3786
3814
  --__op-tab-indicator-width: var(--_op-tab-indicator-width-large);
@@ -3790,38 +3818,45 @@ dialog.modal.modal--closing::backdrop {
3790
3818
  color: var(--op-color-on-background);
3791
3819
  font-size: var(--__op-tab-font-size);
3792
3820
  text-decoration: none;
3793
- }
3794
- .tab--active.tab {
3795
- box-shadow: var(--__op-tab-indicator) var(--op-color-primary-plus-one);
3796
- }
3797
- .tab:focus, .tab:focus-within, .tab:focus-visible {
3798
- outline: none;
3799
- }
3800
- .tab:focus-visible:not(.tab--disabled) {
3801
- z-index: 1;
3802
- box-shadow: var(--op-input-focus-primary);
3803
- }
3804
- .tab:focus-visible:not(.tab--disabled).tab--active {
3805
- box-shadow: var(--__op-tab-indicator) var(--op-color-primary-plus-one), var(--op-input-focus-primary);
3806
- }
3807
- .tab--disabled.tab {
3808
- opacity: var(--_op-tab-disabled-opacity);
3809
- pointer-events: none;
3810
- }
3811
- .tab:hover {
3812
- background-color: var(--op-color-primary-plus-seven);
3813
- box-shadow: var(--__op-tab-indicator) var(--op-color-primary-base);
3814
- color: var(--op-color-primary-on-plus-seven);
3815
- }
3816
- .tab--small.tab {
3817
- --__op-tab-padding: var(--_op-tab-padding-small);
3818
- --__op-tab-font-size: var(--_op-tab-font-small);
3819
- --__op-tab-indicator-width: var(--_op-tab-indicator-width-small);
3820
- }
3821
- .tab--large.tab {
3822
- --__op-tab-padding: var(--_op-tab-padding-large);
3823
- --__op-tab-font-size: var(--_op-tab-font-large);
3824
- --__op-tab-indicator-width: var(--_op-tab-indicator-width-large);
3821
+ &.tab--active {
3822
+ box-shadow: var(--__op-tab-indicator) var(--op-color-primary-plus-one);
3823
+ }
3824
+ /* Focus State */
3825
+ &:focus,
3826
+ &:focus-within,
3827
+ &:focus-visible {
3828
+ outline: none;
3829
+ }
3830
+ /* Hover State */
3831
+ &:hover {
3832
+ background-color: var(--op-color-primary-plus-seven);
3833
+ box-shadow: var(--__op-tab-indicator) var(--op-color-primary-base);
3834
+ color: var(--op-color-primary-on-plus-seven);
3835
+ }
3836
+ /* Focus State */
3837
+ &:focus-visible:not(.tab--disabled) {
3838
+ z-index: 1;
3839
+ box-shadow: var(--op-input-focus-primary);
3840
+ &.tab--active {
3841
+ box-shadow: var(--__op-tab-indicator) var(--op-color-primary-plus-one), var(--op-input-focus-primary);
3842
+ }
3843
+ }
3844
+ /* Disabled State */
3845
+ &.tab--disabled {
3846
+ opacity: var(--_op-tab-disabled-opacity);
3847
+ pointer-events: none;
3848
+ }
3849
+ /* Size Modifiers */
3850
+ &.tab--small {
3851
+ --__op-tab-padding: var(--_op-tab-padding-small);
3852
+ --__op-tab-font-size: var(--_op-tab-font-small);
3853
+ --__op-tab-indicator-width: var(--_op-tab-indicator-width-small);
3854
+ }
3855
+ &.tab--large {
3856
+ --__op-tab-padding: var(--_op-tab-padding-large);
3857
+ --__op-tab-font-size: var(--_op-tab-font-large);
3858
+ --__op-tab-indicator-width: var(--_op-tab-indicator-width-large);
3859
+ }
3825
3860
  }
3826
3861
 
3827
3862
  .table-container, .table-danger, .table-primary, .table {
@@ -4049,50 +4084,54 @@ dialog.modal.modal--closing::backdrop {
4049
4084
  }
4050
4085
 
4051
4086
  .text-pair {
4087
+ /* Public API (customizable component options) */
4052
4088
  --_op-text-pair-font-size-small: var(--op-font-small);
4053
4089
  --_op-text-pair-font-size-medium: var(--op-font-medium);
4054
4090
  --_op-text-pair-font-size-large: var(--op-font-large);
4091
+ /* Private API (component option defaults) */
4055
4092
  --__op-text-pair-title-font-size: var(--_op-text-pair-font-size-medium);
4056
4093
  --__op-text-pair-subtitle-font-size: var(--_op-text-pair-font-size-small);
4057
4094
  display: flex;
4058
4095
  flex-direction: column;
4059
4096
  gap: var(--op-space-x-small);
4060
- }
4061
- .text-pair--inline.text-pair {
4062
- flex-direction: row;
4063
- align-items: baseline;
4064
- }
4065
- .text-pair .text-pair__title {
4066
- font-size: var(--__op-text-pair-title-font-size);
4067
- font-weight: var(--op-font-weight-semi-bold);
4068
- line-height: var(--op-line-height-dense);
4069
- }
4070
- .text-pair .text-pair__title.text-pair__title--small {
4071
- --__op-text-pair-title-font-size: var(--_op-text-pair-font-size-small);
4072
- }
4073
- .text-pair .text-pair__title.text-pair__title--medium {
4074
- --__op-text-pair-title-font-size: var(--_op-text-pair-font-size-medium);
4075
- }
4076
- .text-pair .text-pair__title.text-pair__title--large {
4077
- --__op-text-pair-title-font-size: var(--_op-text-pair-font-size-large);
4078
- }
4079
- .text-pair .text-pair__subtitle {
4080
- font-size: var(--__op-text-pair-subtitle-font-size);
4081
- font-weight: var(--op-font-weight-normal);
4082
- line-height: var(--op-line-height-dense);
4083
- }
4084
- .text-pair .text-pair__subtitle.text-pair__subtitle--small {
4085
- --__op-text-pair-subtitle-font-size: var(--_op-text-pair-font-size-small);
4086
- }
4087
- .text-pair .text-pair__subtitle.text-pair__subtitle--medium {
4088
- --__op-text-pair-subtitle-font-size: var(--_op-text-pair-font-size-medium);
4089
- }
4090
- .text-pair .text-pair__subtitle.text-pair__subtitle--large {
4091
- --__op-text-pair-subtitle-font-size: var(--_op-text-pair-font-size-large);
4097
+ &.text-pair--inline {
4098
+ flex-direction: row;
4099
+ align-items: baseline;
4100
+ }
4101
+ .text-pair__title {
4102
+ font-size: var(--__op-text-pair-title-font-size);
4103
+ font-weight: var(--op-font-weight-semi-bold);
4104
+ line-height: var(--op-line-height-dense);
4105
+ &.text-pair__title--small {
4106
+ --__op-text-pair-title-font-size: var(--_op-text-pair-font-size-small);
4107
+ }
4108
+ &.text-pair__title--medium {
4109
+ --__op-text-pair-title-font-size: var(--_op-text-pair-font-size-medium);
4110
+ }
4111
+ &.text-pair__title--large {
4112
+ --__op-text-pair-title-font-size: var(--_op-text-pair-font-size-large);
4113
+ }
4114
+ }
4115
+ .text-pair__subtitle {
4116
+ font-size: var(--__op-text-pair-subtitle-font-size);
4117
+ font-weight: var(--op-font-weight-normal);
4118
+ line-height: var(--op-line-height-dense);
4119
+ &.text-pair__subtitle--small {
4120
+ --__op-text-pair-subtitle-font-size: var(--_op-text-pair-font-size-small);
4121
+ }
4122
+ &.text-pair__subtitle--medium {
4123
+ --__op-text-pair-subtitle-font-size: var(--_op-text-pair-font-size-medium);
4124
+ }
4125
+ &.text-pair__subtitle--large {
4126
+ --__op-text-pair-subtitle-font-size: var(--_op-text-pair-font-size-large);
4127
+ }
4128
+ }
4092
4129
  }
4093
4130
 
4131
+ /* Inspired by https://blog.logrocket.com/creating-beautiful-tooltips-with-only-css/ */
4094
4132
  [data-tooltip-text] {
4095
- --_op-tooltip-max-width: calc(50 * var(--op-size-unit));
4133
+ /* Public API (customizable component options) */
4134
+ --_op-tooltip-max-width: calc(50 * var(--op-size-unit)); /* 200px */
4096
4135
  --_op-tooltip-padding: var(--op-space-x-small) var(--op-space-medium);
4097
4136
  --_op-tooltip-background-color: var(--op-color-neutral-minus-max);
4098
4137
  --_op-tooltip-text-color: var(--op-color-neutral-on-minus-max);
@@ -4101,92 +4140,109 @@ dialog.modal.modal--closing::backdrop {
4101
4140
  --_op-tooltip-tooltip-radius: var(--op-radius-medium);
4102
4141
  --_op-tooltip-tooltip-font-size: var(--op-font-small);
4103
4142
  position: relative;
4104
- }
4105
- [data-tooltip-text]::before, [data-tooltip-text]::after {
4106
- opacity: var(--op-opacity-none);
4107
- transition: var(--op-transition-tooltip);
4108
- visibility: hidden;
4109
- }
4110
- [data-tooltip-text]::before {
4111
- position: absolute;
4112
- z-index: var(--op-z-index-tooltip);
4113
- display: block;
4114
- width: max-content;
4115
- max-width: var(--_op-tooltip-max-width);
4116
- padding: var(--_op-tooltip-padding);
4117
- border-radius: var(--_op-tooltip-tooltip-radius);
4118
- background-color: var(--_op-tooltip-background-color);
4119
- color: var(--_op-tooltip-text-color);
4120
- content: attr(data-tooltip-text);
4121
- font-family: var(--op-font-family);
4122
- font-size: var(--_op-tooltip-tooltip-font-size);
4123
- overflow-wrap: break-word;
4124
- pointer-events: none;
4125
- text-align: center;
4126
- white-space: normal;
4127
- }
4128
- [data-tooltip-text]::after {
4129
- position: absolute;
4130
- z-index: var(--op-z-index-tooltip);
4131
- border: var(--_op-tooltip-arrow-size) solid var(--_op-tooltip-background-color);
4132
- content: "";
4133
- pointer-events: none;
4134
- }
4135
- [data-tooltip-text]:hover::before, [data-tooltip-text]:hover::after {
4136
- opacity: var(--op-opacity-full);
4137
- visibility: visible;
4138
- }
4139
- [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 {
4140
- left: 50%;
4141
- transform: translateX(-50%);
4142
- }
4143
- [data-tooltip-position=top][data-tooltip-text]::before, [data-tooltip-text]:not([data-tooltip-position])::before {
4144
- bottom: 100%;
4145
- margin-bottom: calc(var(--_op-tooltip-arrow-size) + var(--_op-tooltip-tooltip-offset));
4146
- }
4147
- [data-tooltip-position=top][data-tooltip-text]::after, [data-tooltip-text]:not([data-tooltip-position])::after {
4148
- bottom: 100%;
4149
- border-color: var(--_op-tooltip-background-color) transparent transparent transparent;
4150
- margin-bottom: calc(-1 * var(--_op-tooltip-arrow-size) + var(--_op-tooltip-tooltip-offset));
4151
- }
4152
- [data-tooltip-position=left][data-tooltip-text]::before, [data-tooltip-position=left][data-tooltip-text]::after {
4153
- top: 50%;
4154
- transform: translateY(-50%);
4155
- }
4156
- [data-tooltip-position=left][data-tooltip-text]::before {
4157
- right: 100%;
4158
- margin-right: calc(var(--_op-tooltip-arrow-size) + var(--_op-tooltip-tooltip-offset));
4159
- }
4160
- [data-tooltip-position=left][data-tooltip-text]::after {
4161
- right: 100%;
4162
- border-color: transparent transparent transparent var(--_op-tooltip-background-color);
4163
- margin-right: calc(-1 * var(--_op-tooltip-arrow-size) + var(--_op-tooltip-tooltip-offset));
4164
- }
4165
- [data-tooltip-position=bottom][data-tooltip-text]::before, [data-tooltip-position=bottom][data-tooltip-text]::after {
4166
- left: 50%;
4167
- transform: translateX(-50%);
4168
- }
4169
- [data-tooltip-position=bottom][data-tooltip-text]::before {
4170
- top: 100%;
4171
- margin-top: calc(var(--_op-tooltip-arrow-size) + var(--_op-tooltip-tooltip-offset));
4172
- }
4173
- [data-tooltip-position=bottom][data-tooltip-text]::after {
4174
- top: 100%;
4175
- border-color: transparent transparent var(--_op-tooltip-background-color) transparent;
4176
- margin-top: calc(-1 * var(--_op-tooltip-arrow-size) + var(--_op-tooltip-tooltip-offset));
4177
- }
4178
- [data-tooltip-position=right][data-tooltip-text]::before, [data-tooltip-position=right][data-tooltip-text]::after {
4179
- top: 50%;
4180
- transform: translateY(-50%);
4181
- }
4182
- [data-tooltip-position=right][data-tooltip-text]::before {
4183
- left: 100%;
4184
- margin-left: calc(var(--_op-tooltip-arrow-size) + var(--_op-tooltip-tooltip-offset));
4185
- }
4186
- [data-tooltip-position=right][data-tooltip-text]::after {
4187
- left: 100%;
4188
- border-color: transparent var(--_op-tooltip-background-color) transparent transparent;
4189
- margin-left: calc(-1 * var(--_op-tooltip-arrow-size) + var(--_op-tooltip-tooltip-offset));
4143
+ &::before,
4144
+ &::after {
4145
+ opacity: var(--op-opacity-none);
4146
+ transition: var(--op-transition-tooltip);
4147
+ visibility: hidden;
4148
+ }
4149
+ &::before {
4150
+ position: absolute;
4151
+ z-index: var(--op-z-index-tooltip);
4152
+ display: block;
4153
+ width: max-content;
4154
+ max-width: var(--_op-tooltip-max-width);
4155
+ padding: var(--_op-tooltip-padding);
4156
+ border-radius: var(--_op-tooltip-tooltip-radius);
4157
+ background-color: var(--_op-tooltip-background-color);
4158
+ color: var(--_op-tooltip-text-color);
4159
+ content: attr(data-tooltip-text);
4160
+ font-family: var(--op-font-family); /* Makes tooltips on icons work */
4161
+ font-size: var(--_op-tooltip-tooltip-font-size);
4162
+ overflow-wrap: break-word;
4163
+ pointer-events: none;
4164
+ text-align: center;
4165
+ white-space: normal;
4166
+ }
4167
+ &::after {
4168
+ position: absolute;
4169
+ z-index: var(--op-z-index-tooltip);
4170
+ border: var(--_op-tooltip-arrow-size) solid var(--_op-tooltip-background-color);
4171
+ content: "";
4172
+ pointer-events: none;
4173
+ }
4174
+ &:hover {
4175
+ &::before,
4176
+ &::after {
4177
+ opacity: var(--op-opacity-full);
4178
+ visibility: visible;
4179
+ }
4180
+ }
4181
+ &[data-tooltip-position=top],
4182
+ &:not([data-tooltip-position]) {
4183
+ &::before,
4184
+ &::after {
4185
+ inset-inline-start: 50%;
4186
+ transform: translateX(-50%);
4187
+ }
4188
+ &::before {
4189
+ inset-block-end: 100%;
4190
+ margin-block-end: calc(var(--_op-tooltip-arrow-size) + var(--_op-tooltip-tooltip-offset));
4191
+ }
4192
+ &::after {
4193
+ border-color: var(--_op-tooltip-background-color) transparent transparent transparent;
4194
+ inset-block-end: 100%;
4195
+ margin-block-end: calc(-1 * var(--_op-tooltip-arrow-size) + var(--_op-tooltip-tooltip-offset));
4196
+ }
4197
+ }
4198
+ &[data-tooltip-position=left] {
4199
+ &::before,
4200
+ &::after {
4201
+ inset-block-start: 50%;
4202
+ transform: translateY(-50%);
4203
+ }
4204
+ &::before {
4205
+ inset-inline-end: 100%;
4206
+ margin-inline-end: calc(var(--_op-tooltip-arrow-size) + var(--_op-tooltip-tooltip-offset));
4207
+ }
4208
+ &::after {
4209
+ border-color: transparent transparent transparent var(--_op-tooltip-background-color);
4210
+ inset-inline-end: 100%;
4211
+ margin-inline-end: calc(-1 * var(--_op-tooltip-arrow-size) + var(--_op-tooltip-tooltip-offset));
4212
+ }
4213
+ }
4214
+ &[data-tooltip-position=bottom] {
4215
+ &::before,
4216
+ &::after {
4217
+ inset-inline-start: 50%;
4218
+ transform: translateX(-50%);
4219
+ }
4220
+ &::before {
4221
+ inset-block-start: 100%;
4222
+ margin-block-start: calc(var(--_op-tooltip-arrow-size) + var(--_op-tooltip-tooltip-offset));
4223
+ }
4224
+ &::after {
4225
+ border-color: transparent transparent var(--_op-tooltip-background-color) transparent;
4226
+ inset-block-start: 100%;
4227
+ margin-block-start: calc(-1 * var(--_op-tooltip-arrow-size) + var(--_op-tooltip-tooltip-offset));
4228
+ }
4229
+ }
4230
+ &[data-tooltip-position=right] {
4231
+ &::before,
4232
+ &::after {
4233
+ inset-block-start: 50%;
4234
+ transform: translateY(-50%);
4235
+ }
4236
+ &::before {
4237
+ inset-inline-start: 100%;
4238
+ margin-inline-start: calc(var(--_op-tooltip-arrow-size) + var(--_op-tooltip-tooltip-offset));
4239
+ }
4240
+ &::after {
4241
+ border-color: transparent var(--_op-tooltip-background-color) transparent transparent;
4242
+ inset-inline-start: 100%;
4243
+ margin-inline-start: calc(-1 * var(--_op-tooltip-arrow-size) + var(--_op-tooltip-tooltip-offset));
4244
+ }
4245
+ }
4190
4246
  }
4191
4247
 
4192
4248
  /*# sourceMappingURL=optics.css.map */