@rolemodel/optics 2.1.5 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/.github/pull_request_template.md +18 -9
  2. package/.github/workflows/linting.yml +3 -2
  3. package/.github/workflows/publish-storybook.yml +3 -2
  4. package/.github/workflows/release-package.yml +4 -3
  5. package/.node-version +1 -0
  6. package/.prettierignore +1 -0
  7. package/.stylelintrc.json +3 -2
  8. package/.yarn/install-state.gz +0 -0
  9. package/build_token_json.js +5 -4
  10. package/dist/css/addons/panel.css +3 -3
  11. package/dist/css/addons/tom-select.css +5 -5
  12. package/dist/css/components/accordion.css +3 -3
  13. package/dist/css/components/alert.css +2 -2
  14. package/dist/css/components/avatar.css +6 -6
  15. package/dist/css/components/button.css +3 -3
  16. package/dist/css/components/button_group.css +4 -4
  17. package/dist/css/components/card.css +4 -4
  18. package/dist/css/components/confirm-dialog.css +1 -1
  19. package/dist/css/components/divider.css +7 -6
  20. package/dist/css/components/form.css +15 -15
  21. package/dist/css/components/icon.css +4 -4
  22. package/dist/css/components/index.css +1 -0
  23. package/dist/css/components/modal.css +25 -43
  24. package/dist/css/components/navbar.css +6 -4
  25. package/dist/css/components/pagination.css +1 -1
  26. package/dist/css/components/segmented-control.css +135 -0
  27. package/dist/css/components/side_panel.css +4 -4
  28. package/dist/css/components/sidebar.css +11 -8
  29. package/dist/css/components/spinner.css +3 -3
  30. package/dist/css/components/switch.css +8 -8
  31. package/dist/css/components/table.css +3 -3
  32. package/dist/css/components/tooltip.css +2 -2
  33. package/dist/css/core/base.css +3 -4
  34. package/dist/css/core/layout.css +114 -7
  35. package/dist/css/core/tokens/base_tokens.css +18 -11
  36. package/dist/css/core/utilities.css +93 -68
  37. package/dist/css/optics.css +465 -211
  38. package/dist/css/optics.min.css +1 -1
  39. package/dist/package.json +21 -28
  40. package/dist/tokens/tokens.json +1 -1
  41. package/eslint.config.mjs +27 -0
  42. package/package.json +21 -28
  43. package/.eslintrc.json +0 -14
@@ -298,7 +298,8 @@ Noto Sans supports:
298
298
  --op-transition-accordion-content: height 300ms ease, content-visibility 300ms ease allow-discrete;
299
299
  --op-transition-input: all 120ms ease-in;
300
300
  --op-transition-sidebar: all 200ms ease-in-out;
301
- --op-transition-modal: all 300ms ease-in;
301
+ --op-transition-modal-time: 300ms;
302
+ --op-transition-modal: all var(--op-transition-modal-time) ease-in;
302
303
  --op-transition-panel: right 400ms ease-in;
303
304
  --op-transition-tooltip: all 300ms ease-in 300ms;
304
305
 
@@ -392,17 +393,23 @@ Noto Sans supports:
392
393
  */
393
394
  --op-input-inner-focus: inset 0 0 0 var(--op-border-width-large);
394
395
  --op-input-outer-focus: 0 0 0 var(--op-border-width-x-large);
395
- --op-input-focus-primary: var(--op-input-inner-focus) var(--op-color-primary-plus-two),
396
+ --op-input-focus-primary:
397
+ var(--op-input-inner-focus) var(--op-color-primary-plus-two),
396
398
  var(--op-input-outer-focus) var(--op-color-primary-plus-five);
397
- --op-input-focus-neutral: var(--op-input-inner-focus) var(--op-color-neutral-plus-two),
399
+ --op-input-focus-neutral:
400
+ var(--op-input-inner-focus) var(--op-color-neutral-plus-two),
398
401
  var(--op-input-outer-focus) var(--op-color-neutral-plus-five);
399
- --op-input-focus-danger: var(--op-input-inner-focus) var(--op-color-alerts-danger-plus-two),
402
+ --op-input-focus-danger:
403
+ var(--op-input-inner-focus) var(--op-color-alerts-danger-plus-two),
400
404
  var(--op-input-outer-focus) var(--op-color-alerts-danger-plus-five);
401
- --op-input-focus-warning: var(--op-input-inner-focus) var(--op-color-alerts-warning-plus-two),
405
+ --op-input-focus-warning:
406
+ var(--op-input-inner-focus) var(--op-color-alerts-warning-plus-two),
402
407
  var(--op-input-outer-focus) var(--op-color-alerts-warning-plus-five);
403
- --op-input-focus-info: var(--op-input-inner-focus) var(--op-color-alerts-info-plus-two),
408
+ --op-input-focus-info:
409
+ var(--op-input-inner-focus) var(--op-color-alerts-info-plus-two),
404
410
  var(--op-input-outer-focus) var(--op-color-alerts-info-plus-five);
405
- --op-input-focus-notice: var(--op-input-inner-focus) var(--op-color-alerts-notice-plus-two),
411
+ --op-input-focus-notice:
412
+ var(--op-input-inner-focus) var(--op-color-alerts-notice-plus-two),
406
413
  var(--op-input-outer-focus) var(--op-color-alerts-notice-plus-five);
407
414
  }
408
415
  /* Animations */
@@ -412,22 +419,22 @@ Noto Sans supports:
412
419
  Start off the Screen
413
420
  */
414
421
  0% {
415
- right: -100%;
422
+ inset-inline-end: -100%;
416
423
  }
417
424
 
418
425
  /* Animate onto the screen for 0.5s */
419
426
  10% {
420
- right: var(--op-space-large);
427
+ inset-inline-end: var(--op-space-large);
421
428
  }
422
429
 
423
430
  /* Stay on the screen for 3s */
424
431
  70% {
425
- right: var(--op-space-large);
432
+ inset-inline-end: var(--op-space-large);
426
433
  }
427
434
 
428
435
  /* Animate off the screen for 1.5s */
429
436
  100% {
430
- right: -100%;
437
+ inset-inline-end: -100%;
431
438
  }
432
439
  }
433
440
  :root {
@@ -1934,8 +1941,8 @@ html {
1934
1941
  }
1935
1942
  body {
1936
1943
  overflow: auto;
1937
- height: 100vh;
1938
1944
  background: var(--op-color-background);
1945
+ block-size: 100vh;
1939
1946
  color: var(--op-color-on-background);
1940
1947
  font-size: var(--op-font-medium);
1941
1948
  }
@@ -1976,9 +1983,8 @@ h3,
1976
1983
  h4,
1977
1984
  h5,
1978
1985
  h6 {
1979
- margin-top: 0;
1980
- margin-bottom: var(--op-space-small);
1981
1986
  font-weight: var(--op-font-weight-normal);
1987
+ margin-block: 0 var(--op-space-small);
1982
1988
  }
1983
1989
  h1 {
1984
1990
  font-size: var(--op-font-3x-large);
@@ -1999,17 +2005,17 @@ h6 {
1999
2005
  font-size: var(--op-font-x-small);
2000
2006
  }
2001
2007
  p {
2002
- margin-bottom: var(--op-space-small);
2003
2008
  font-size: var(--op-font-medium);
2009
+ margin-block-end: var(--op-space-small);
2004
2010
  }
2005
2011
  small {
2006
2012
  font-size: var(--op-font-small);
2007
2013
  }
2008
2014
  .app-with-sidebar {
2009
2015
  display: grid;
2010
- width: 100%;
2011
- height: 100vh;
2016
+ block-size: 100vh;
2012
2017
  grid-template-columns: auto 1fr auto;
2018
+ inline-size: 100%;
2013
2019
  }
2014
2020
  .app-body {
2015
2021
  display: flex;
@@ -2019,39 +2025,145 @@ small {
2019
2025
  .app__header {
2020
2026
  position: sticky;
2021
2027
  z-index: var(--op-z-index-header);
2022
- top: 0;
2023
2028
  flex-grow: 0;
2024
2029
  flex-shrink: 0;
2030
+ inset-block-start: 0;
2025
2031
  }
2026
2032
  .app__content {
2027
- width: 100%;
2028
- max-width: var(--op-breakpoint-medium);
2029
2033
  flex-grow: 1;
2030
2034
  padding: 0 var(--op-space-large);
2031
2035
  margin: 0 auto;
2036
+ inline-size: 100%;
2037
+ max-inline-size: var(--op-breakpoint-medium);
2032
2038
  }
2033
2039
  .app__content-no-margin {
2034
- width: 100%;
2035
2040
  flex-grow: 1;
2036
2041
  padding: 0 var(--op-space-large);
2042
+ inline-size: 100%;
2037
2043
  overflow-y: auto;
2038
2044
  }
2039
2045
  .app__footer {
2040
2046
  position: sticky;
2041
2047
  z-index: var(--op-z-index-footer);
2042
- bottom: 0;
2043
2048
  flex-grow: 0;
2044
2049
  flex-shrink: 0;
2050
+ inset-block-end: 0;
2051
+ }
2052
+ /*
2053
+ <html lang='en'>
2054
+ <head>...</head>
2055
+ <body class="op-page">
2056
+ <div class="op-page__sidebar">...</div>
2057
+ <div class="op-page__main">
2058
+ <div class="op-page__main-header">...</div>
2059
+ <div class="op-page__main-content">...</div>
2060
+ <div class="op-page__main-footer">...</div>
2061
+ </div>
2062
+ <div class="op-page__sidebar op-page__sidebar--right">...</div>
2063
+ </body>
2064
+ </html>
2065
+ */
2066
+ :root:has(.op-page) {
2067
+ /* Reset existing Optics layout */
2068
+ overflow: unset;
2069
+
2070
+ body {
2071
+ overflow: unset;
2072
+ }
2073
+
2074
+ /* New Layout */
2075
+ html,
2076
+ body {
2077
+ padding: 0;
2078
+ margin: 0;
2079
+ block-size: 100%;
2080
+ min-block-size: 100%;
2081
+ }
2082
+ }
2083
+ .op-page {
2084
+ display: grid;
2085
+ grid-template-areas: 'sidebar-left main sidebar-right';
2086
+ grid-template-columns: minmax(0, auto) minmax(0, 1fr) minmax(0, auto);
2087
+ min-block-size: 100dvh;
2088
+
2089
+ .op-page__sidebar {
2090
+ grid-area: sidebar-left;
2091
+
2092
+ &.op-page__sidebar--right {
2093
+ grid-area: sidebar-right;
2094
+ }
2095
+ }
2096
+
2097
+ .op-page__main {
2098
+ grid-area: main;
2099
+ }
2100
+
2101
+ .op-page__sidebar {
2102
+ position: sticky;
2103
+ z-index: var(--op-z-index-sidebar);
2104
+ block-size: 100dvh;
2105
+ inset-block-start: 0;
2106
+ max-block-size: 100dvh;
2107
+
2108
+ > * {
2109
+ block-size: 100%;
2110
+ }
2111
+ }
2112
+
2113
+ .op-page__main {
2114
+ display: grid;
2115
+ grid-template-areas:
2116
+ 'main-header'
2117
+ 'main-content'
2118
+ 'main-footer';
2119
+ grid-template-columns: minmax(0, 1fr);
2120
+ grid-template-rows: minmax(0, auto) minmax(0, 1fr) minmax(0, auto);
2121
+ min-block-size: 100%;
2122
+
2123
+ .op-page__main-header {
2124
+ grid-area: main-header;
2125
+ }
2126
+
2127
+ .op-page__main-content {
2128
+ grid-area: main-content;
2129
+ }
2130
+
2131
+ .op-page__main-footer {
2132
+ grid-area: main-footer;
2133
+ }
2134
+
2135
+ .op-page__main-header {
2136
+ position: sticky;
2137
+ z-index: var(--op-z-index-header);
2138
+ inset-block-start: 0;
2139
+ }
2140
+
2141
+ .op-page__main-content {
2142
+ inline-size: 100%;
2143
+ margin-inline: auto;
2144
+ max-inline-size: var(--op-breakpoint-medium);
2145
+ padding-block: var(--op-space-medium);
2146
+ padding-inline: var(--op-space-large);
2147
+ }
2148
+
2149
+ .op-page__main-footer {
2150
+ position: sticky;
2151
+ z-index: var(--op-z-index-footer);
2152
+ inset-block-end: 0;
2153
+ }
2154
+ }
2045
2155
  }
2046
2156
  /* Container Properties */
2047
2157
  .container {
2048
- width: 100%;
2049
- max-width: var(--op-breakpoint-medium);
2050
- padding: 0 var(--op-space-large);
2051
- margin: 0 auto;
2158
+ inline-size: 100%;
2159
+ margin-block: 0;
2160
+ margin-inline: auto;
2161
+ max-inline-size: var(--op-breakpoint-medium);
2162
+ padding-block: 0;
2163
+ padding-inline: var(--op-space-large);
2052
2164
  }
2053
2165
  .container--sm {
2054
- max-width: var(--op-breakpoint-small);
2166
+ max-inline-size: var(--op-breakpoint-small);
2055
2167
  }
2056
2168
  .container--md-padding {
2057
2169
  padding: 0 var(--op-space-medium);
@@ -2060,38 +2172,38 @@ small {
2060
2172
  padding: 0 var(--op-space-small);
2061
2173
  }
2062
2174
  .container--xs {
2063
- max-width: var(--op-breakpoint-x-small);
2175
+ max-inline-size: var(--op-breakpoint-x-small);
2064
2176
  }
2065
2177
  /* Width Properties */
2066
2178
  .full-width {
2067
- width: 100%;
2179
+ inline-size: 100%;
2068
2180
  }
2069
2181
  .half-width {
2070
- width: 50%;
2182
+ inline-size: 50%;
2071
2183
  }
2072
2184
  .four-fifths-width {
2073
- width: calc(100% * 4 / 5);
2185
+ inline-size: calc(100% * 4 / 5);
2074
2186
  }
2075
2187
  .three-fifths-width {
2076
- width: calc(100% * 3 / 5);
2188
+ inline-size: calc(100% * 3 / 5);
2077
2189
  }
2078
2190
  .two-fifths-width {
2079
- width: calc(100% * 2 / 5);
2191
+ inline-size: calc(100% * 2 / 5);
2080
2192
  }
2081
2193
  .one-fifth-width {
2082
- width: calc(100% * 1 / 5);
2194
+ inline-size: calc(100% * 1 / 5);
2083
2195
  }
2084
2196
  .three-quarters-width {
2085
- width: calc(100% * 3 / 4);
2197
+ inline-size: calc(100% * 3 / 4);
2086
2198
  }
2087
2199
  .one-quarter-width {
2088
- width: calc(100% * 1 / 4);
2200
+ inline-size: calc(100% * 1 / 4);
2089
2201
  }
2090
2202
  .two-thirds-width {
2091
- width: calc(100% * 2 / 3);
2203
+ inline-size: calc(100% * 2 / 3);
2092
2204
  }
2093
2205
  .one-third-width {
2094
- width: calc(100% * 1 / 3);
2206
+ inline-size: calc(100% * 1 / 3);
2095
2207
  }
2096
2208
  /* Flex Properties */
2097
2209
  .flex {
@@ -2196,13 +2308,13 @@ small {
2196
2308
  }
2197
2309
  /* Text Alignment */
2198
2310
  .text-left {
2199
- text-align: left;
2311
+ text-align: start;
2200
2312
  }
2201
2313
  .text-center {
2202
2314
  text-align: center;
2203
2315
  }
2204
2316
  .text-right {
2205
- text-align: right;
2317
+ text-align: end;
2206
2318
  }
2207
2319
  .text-justify {
2208
2320
  text-align: justify;
@@ -2231,129 +2343,117 @@ small {
2231
2343
  }
2232
2344
  /* Vertical Margin */
2233
2345
  .margin-y-xl {
2234
- margin-top: var(--op-space-x-large);
2235
- margin-bottom: var(--op-space-x-large);
2346
+ margin-block: var(--op-space-x-large);
2236
2347
  }
2237
2348
  .margin-y-lg {
2238
- margin-top: var(--op-space-large);
2239
- margin-bottom: var(--op-space-large);
2349
+ margin-block: var(--op-space-large);
2240
2350
  }
2241
2351
  .margin-y-md {
2242
- margin-top: var(--op-space-medium);
2243
- margin-bottom: var(--op-space-medium);
2352
+ margin-block: var(--op-space-medium);
2244
2353
  }
2245
2354
  .margin-y-sm {
2246
- margin-top: var(--op-space-small);
2247
- margin-bottom: var(--op-space-small);
2355
+ margin-block: var(--op-space-small);
2248
2356
  }
2249
2357
  .margin-y-xs {
2250
- margin-top: var(--op-space-x-small);
2251
- margin-bottom: var(--op-space-x-small);
2358
+ margin-block: var(--op-space-x-small);
2252
2359
  }
2253
2360
  .margin-y-none {
2254
- margin-top: 0;
2255
- margin-bottom: 0;
2361
+ margin-block: 0;
2256
2362
  }
2257
2363
  /* Horizontal Margin */
2258
2364
  .margin-x-xl {
2259
- margin-right: var(--op-space-x-large);
2260
- margin-left: var(--op-space-x-large);
2365
+ margin-inline: var(--op-space-x-large);
2261
2366
  }
2262
2367
  .margin-x-lg {
2263
- margin-right: var(--op-space-large);
2264
- margin-left: var(--op-space-large);
2368
+ margin-inline: var(--op-space-large);
2265
2369
  }
2266
2370
  .margin-x-md {
2267
- margin-right: var(--op-space-medium);
2268
- margin-left: var(--op-space-medium);
2371
+ margin-inline: var(--op-space-medium);
2269
2372
  }
2270
2373
  .margin-x-sm {
2271
- margin-right: var(--op-space-small);
2272
- margin-left: var(--op-space-small);
2374
+ margin-inline: var(--op-space-small);
2273
2375
  }
2274
2376
  .margin-x-xs {
2275
- margin-right: var(--op-space-x-small);
2276
- margin-left: var(--op-space-x-small);
2377
+ margin-inline: var(--op-space-x-small);
2277
2378
  }
2278
2379
  .margin-x-none {
2279
- margin-right: 0;
2280
- margin-left: 0;
2380
+ margin-inline: 0;
2281
2381
  }
2282
2382
  /* Top Margin */
2283
2383
  .margin-top-xl {
2284
- margin-top: var(--op-space-x-large);
2384
+ margin-block-start: var(--op-space-x-large);
2285
2385
  }
2286
2386
  .margin-top-lg {
2287
- margin-top: var(--op-space-large);
2387
+ margin-block-start: var(--op-space-large);
2288
2388
  }
2289
2389
  .margin-top-md {
2290
- margin-top: var(--op-space-medium);
2390
+ margin-block-start: var(--op-space-medium);
2291
2391
  }
2292
2392
  .margin-top-sm {
2293
- margin-top: var(--op-space-small);
2393
+ margin-block-start: var(--op-space-small);
2294
2394
  }
2295
2395
  .margin-top-xs {
2296
- margin-top: var(--op-space-x-small);
2396
+ margin-block-start: var(--op-space-x-small);
2297
2397
  }
2298
2398
  .margin-top-none {
2299
- margin-top: 0;
2399
+ margin-block-start: 0;
2300
2400
  }
2301
2401
  /* Bottom Margin */
2302
2402
  .margin-bottom-xl {
2303
- margin-bottom: var(--op-space-x-large);
2403
+ margin-block-end: var(--op-space-x-large);
2304
2404
  }
2305
2405
  .margin-bottom-lg {
2306
- margin-bottom: var(--op-space-large);
2406
+ margin-block-end: var(--op-space-large);
2307
2407
  }
2308
2408
  .margin-bottom-md {
2309
- margin-bottom: var(--op-space-medium);
2409
+ margin-block-end: var(--op-space-medium);
2310
2410
  }
2311
2411
  .margin-bottom-sm {
2312
- margin-bottom: var(--op-space-small);
2412
+ margin-block-end: var(--op-space-small);
2313
2413
  }
2314
2414
  .margin-bottom-xs {
2315
- margin-bottom: var(--op-space-x-small);
2415
+ margin-block-end: var(--op-space-x-small);
2316
2416
  }
2317
2417
  .margin-bottom-none {
2318
- margin-bottom: 0;
2418
+ margin-block-end: 0;
2319
2419
  }
2320
2420
  /* Right Margin */
2321
2421
  .margin-right-xl {
2322
- margin-right: var(--op-space-x-large);
2422
+ margin-inline-end: var(--op-space-x-large);
2323
2423
  }
2324
2424
  .margin-right-lg {
2325
- margin-right: var(--op-space-large);
2425
+ margin-inline-end: var(--op-space-large);
2326
2426
  }
2327
2427
  .margin-right-md {
2328
- margin-right: var(--op-space-medium);
2428
+ margin-inline-end: var(--op-space-medium);
2329
2429
  }
2330
2430
  .margin-right-sm {
2331
- margin-right: var(--op-space-small);
2431
+ margin-inline-end: var(--op-space-small);
2332
2432
  }
2333
2433
  .margin-right-xs {
2334
- margin-right: var(--op-space-x-small);
2434
+ margin-inline-end: var(--op-space-x-small);
2335
2435
  }
2336
2436
  .margin-right-none {
2337
- margin-left: 0;
2437
+ margin-inline-start: 0;
2338
2438
  }
2339
2439
  /* Left Margin */
2340
2440
  .margin-left-xl {
2341
- margin-left: var(--op-space-x-large);
2441
+ margin-inline-start: var(--op-space-x-large);
2342
2442
  }
2343
2443
  .margin-left-lg {
2344
- margin-left: var(--op-space-large);
2444
+ margin-inline-start: var(--op-space-large);
2345
2445
  }
2346
2446
  .margin-left-md {
2347
- margin-left: var(--op-space-medium);
2447
+ margin-inline-start: var(--op-space-medium);
2348
2448
  }
2349
2449
  .margin-left-sm {
2350
- margin-left: var(--op-space-small);
2450
+ margin-inline-start: var(--op-space-small);
2351
2451
  }
2352
2452
  .margin-left-xs {
2353
- margin-left: var(--op-space-x-small);
2453
+ margin-inline-start: var(--op-space-x-small);
2354
2454
  }
2355
2455
  .margin-left-none {
2356
- margin-left: 0;
2456
+ margin-inline-start: 0;
2357
2457
  }
2358
2458
  /*
2359
2459
  Accessibility
@@ -2363,10 +2463,38 @@ small {
2363
2463
  .sr-only {
2364
2464
  position: absolute !important;
2365
2465
  overflow: hidden;
2366
- width: 1px;
2367
- height: 1px;
2466
+ block-size: 1px;
2368
2467
  clip: rect(1px 1px 1px 1px);
2369
2468
  clip: rect(1px, 1px, 1px, 1px);
2469
+ inline-size: 1px;
2470
+ }
2471
+ /* Advanced Layout Utilities */
2472
+ /* Equivalent to .flex.flex-col.gap-md */
2473
+ .op-stack {
2474
+ display: flex;
2475
+ flex-direction: column;
2476
+ }
2477
+ :where(.op-stack) {
2478
+ gap: var(--op-space-medium);
2479
+ }
2480
+ /* Equivalent to .flex.flex-wrap.items-center.gap-md */
2481
+ .op-cluster {
2482
+ display: flex;
2483
+ flex-wrap: wrap;
2484
+ }
2485
+ :where(.op-cluster) {
2486
+ align-items: center;
2487
+ gap: var(--op-space-medium);
2488
+ }
2489
+ /* Equivalent to .flex.flex-wrap.items-center.justify-between.gap-md */
2490
+ .op-split {
2491
+ display: flex;
2492
+ flex-wrap: wrap;
2493
+ justify-content: space-between;
2494
+ }
2495
+ :where(.op-split) {
2496
+ align-items: center;
2497
+ gap: var(--op-space-medium);
2370
2498
  }
2371
2499
  /* Components */
2372
2500
  .accordion {
@@ -2380,11 +2508,11 @@ small {
2380
2508
 
2381
2509
  summary {
2382
2510
  display: grid;
2383
- min-height: var(--_op-accordion-summary-min-height);
2384
2511
  align-items: center;
2385
2512
  cursor: pointer;
2386
2513
  gap: var(--op-space-2x-small);
2387
2514
  grid-template-columns: auto 1fr auto;
2515
+ min-block-size: var(--_op-accordion-summary-min-height);
2388
2516
 
2389
2517
  &::marker,
2390
2518
  &::-webkit-details-marker {
@@ -2409,7 +2537,7 @@ small {
2409
2537
  }
2410
2538
 
2411
2539
  &::details-content {
2412
- height: 0;
2540
+ block-size: 0;
2413
2541
  transition: var(--op-transition-accordion-content);
2414
2542
  }
2415
2543
 
@@ -2419,7 +2547,7 @@ small {
2419
2547
  }
2420
2548
 
2421
2549
  &::details-content {
2422
- height: auto;
2550
+ block-size: auto;
2423
2551
  }
2424
2552
  }
2425
2553
 
@@ -2473,9 +2601,9 @@ small {
2473
2601
  &.alert--flash {
2474
2602
  position: fixed;
2475
2603
  z-index: var(--op-z-index-alert-group);
2476
- top: var(--op-space-large);
2477
- right: var(--op-space-large);
2478
2604
  animation: var(--op-animation-flash);
2605
+ inset-block-start: var(--op-space-large);
2606
+ inset-inline-end: var(--op-space-large);
2479
2607
  }
2480
2608
 
2481
2609
  &.alert--warning {
@@ -2626,11 +2754,11 @@ small {
2626
2754
  z-index: 1;
2627
2755
  display: block;
2628
2756
  overflow: hidden;
2629
- width: var(--__op-avatar-size);
2630
- min-width: var(--__op-avatar-size);
2631
- height: var(--__op-avatar-size);
2632
- min-height: var(--__op-avatar-size);
2633
2757
  border-radius: var(--_op-avatar-border-radius);
2758
+ block-size: var(--__op-avatar-size);
2759
+ inline-size: var(--__op-avatar-size);
2760
+ min-block-size: var(--__op-avatar-size);
2761
+ min-inline-size: var(--__op-avatar-size);
2634
2762
 
2635
2763
  &::before {
2636
2764
  position: absolute;
@@ -2651,8 +2779,8 @@ small {
2651
2779
  }
2652
2780
 
2653
2781
  img {
2654
- width: 100%;
2655
- height: 100%;
2782
+ block-size: 100%;
2783
+ inline-size: 100%;
2656
2784
  object-fit: cover;
2657
2785
  }
2658
2786
 
@@ -2829,7 +2957,6 @@ small {
2829
2957
  --__op-btn-padding: var(--_op-btn-padding-large);
2830
2958
 
2831
2959
  display: inline-flex;
2832
- min-height: var(--__op-btn-height);
2833
2960
  align-items: center;
2834
2961
  justify-content: center;
2835
2962
  padding: var(--__op-btn-padding);
@@ -2842,6 +2969,7 @@ small {
2842
2969
  font-size: var(--__op-btn-font-size);
2843
2970
  font-weight: var(--op-font-weight-normal);
2844
2971
  gap: var(--op-space-x-small);
2972
+ min-block-size: var(--__op-btn-height);
2845
2973
  text-align: center;
2846
2974
  text-decoration: none;
2847
2975
  transition: var(--op-transition-input);
@@ -2905,9 +3033,9 @@ small {
2905
3033
 
2906
3034
  /* Icon Modifier */
2907
3035
  &.btn--icon {
2908
- width: var(--__op-btn-height);
2909
- min-width: var(--__op-btn-height);
2910
3036
  padding: 0;
3037
+ inline-size: var(--__op-btn-height);
3038
+ min-inline-size: var(--__op-btn-height);
2911
3039
  }
2912
3040
 
2913
3041
  /* Icon With Label Modifier */
@@ -3116,13 +3244,13 @@ small {
3116
3244
  }
3117
3245
 
3118
3246
  &:first-child:not(:last-child) {
3119
- border-bottom-right-radius: 0;
3120
- border-top-right-radius: 0;
3247
+ border-end-end-radius: 0;
3248
+ border-start-end-radius: 0;
3121
3249
  }
3122
3250
 
3123
3251
  &:last-child:not(:first-child) {
3124
- border-bottom-left-radius: 0;
3125
- border-top-left-radius: 0;
3252
+ border-end-start-radius: 0;
3253
+ border-start-start-radius: 0;
3126
3254
  }
3127
3255
  }
3128
3256
  }
@@ -3182,8 +3310,8 @@ small {
3182
3310
  }
3183
3311
 
3184
3312
  .card__header {
3185
- border-top-left-radius: var(--_op-card-radius);
3186
- border-top-right-radius: var(--_op-card-radius);
3313
+ border-start-end-radius: var(--_op-card-radius);
3314
+ border-start-start-radius: var(--_op-card-radius);
3187
3315
 
3188
3316
  h1,
3189
3317
  h2,
@@ -3196,8 +3324,8 @@ small {
3196
3324
  }
3197
3325
 
3198
3326
  .card__footer {
3199
- border-bottom-left-radius: var(--_op-card-radius);
3200
- border-bottom-right-radius: var(--_op-card-radius);
3327
+ border-end-end-radius: var(--_op-card-radius);
3328
+ border-end-start-radius: var(--_op-card-radius);
3201
3329
  }
3202
3330
  }
3203
3331
  .confirm-dialog-wrapper {
@@ -3245,13 +3373,13 @@ small {
3245
3373
  --_op-confirm-dialog-width: calc(100 * var(--op-size-unit)); /* 400px */
3246
3374
 
3247
3375
  z-index: var(--op-z-index-dialog-content);
3248
- width: var(--_op-confirm-dialog-width);
3249
3376
  border-radius: var(--op-radius-medium);
3250
3377
  background-color: var(--op-color-background);
3251
3378
  box-shadow: var(--op-border-all) var(--op-color-border);
3252
3379
  color: var(--op-color-on-background);
3253
3380
  contain: paint;
3254
3381
  font-size: var(--op-font-medium);
3382
+ inline-size: var(--_op-confirm-dialog-width);
3255
3383
  line-height: var(--op-line-height-base);
3256
3384
  opacity: var(--op-opacity-none);
3257
3385
  transform: scale(0.7);
@@ -3330,12 +3458,12 @@ small {
3330
3458
  /* Private API (component option defaults) */
3331
3459
  --__op-divider-height: var(--_op-divider-height-small);
3332
3460
  --__op-divider-padding: 0;
3333
-
3334
- width: 100%;
3335
- height: var(--__op-divider-height);
3336
3461
  background-color: var(--op-color-border);
3462
+ block-size: var(--__op-divider-height);
3463
+ inline-size: 100%;
3337
3464
  margin-block: var(--__op-divider-padding);
3338
3465
  margin-inline: 0;
3466
+ min-block-size: var(--__op-divider-height);
3339
3467
 
3340
3468
  /* Size Modifiers */
3341
3469
  &.divider--small {
@@ -3365,11 +3493,12 @@ small {
3365
3493
 
3366
3494
  /* Direction Modifier */
3367
3495
  &.divider--vertical {
3368
- width: var(--__op-divider-height);
3369
- height: 100%;
3370
- min-height: var(--_op-divider-vertical-min-height);
3496
+ block-size: 100%;
3497
+ inline-size: var(--__op-divider-height);
3371
3498
  margin-block: 0;
3372
3499
  margin-inline: var(--__op-divider-padding);
3500
+ min-block-size: var(--_op-divider-vertical-min-height);
3501
+ min-inline-size: var(--__op-divider-height);
3373
3502
  }
3374
3503
  }
3375
3504
  .form-control {
@@ -3384,9 +3513,8 @@ small {
3384
3513
  /* Private API (component option defaults) */
3385
3514
  --__op-form-control-height: var(--_op-form-control-height-large);
3386
3515
  --__op-form-control-font-size: var(--_op-form-control-font-large);
3387
-
3388
- min-width: var(--__op-form-control-height);
3389
- height: var(--__op-form-control-height);
3516
+ block-size: var(--__op-form-control-height);
3517
+ min-inline-size: var(--__op-form-control-height);
3390
3518
 
3391
3519
  /* Size Modifiers */
3392
3520
  &.form-control--small {
@@ -3433,12 +3561,12 @@ small {
3433
3561
  --_op-form-control-height-medium: var(--op-space-large);
3434
3562
  --_op-form-control-height-large: var(--op-space-x-large);
3435
3563
 
3436
- width: var(--__op-form-control-height);
3437
- height: var(--__op-form-control-height);
3438
3564
  align-self: center;
3439
3565
  margin: 0;
3440
3566
  accent-color: var(--op-color-primary-base);
3567
+ block-size: var(--__op-form-control-height);
3441
3568
  cursor: pointer;
3569
+ inline-size: var(--__op-form-control-height);
3442
3570
 
3443
3571
  & + label {
3444
3572
  align-self: center;
@@ -3453,18 +3581,18 @@ small {
3453
3581
  --__op-form-control-border-color: var(--op-color-neutral-plus-four);
3454
3582
 
3455
3583
  display: block;
3456
- width: 100%;
3457
- min-width: var(--__op-form-control-height);
3458
- height: var(--__op-form-control-height);
3459
3584
  border: none;
3460
3585
  border-radius: var(--op-radius-medium);
3461
3586
  appearance: none;
3462
3587
  background-color: var(--op-color-neutral-plus-eight);
3588
+ block-size: var(--__op-form-control-height);
3463
3589
  box-shadow: var(--op-border-all) var(--__op-form-control-border-color);
3464
3590
  color: var(--op-color-neutral-on-plus-eight);
3465
3591
  cursor: text;
3466
3592
  font-size: var(--__op-form-control-font-size);
3593
+ inline-size: 100%;
3467
3594
  line-height: var(--op-line-height-base);
3595
+ min-inline-size: var(--__op-form-control-height);
3468
3596
  padding-block: var(--op-space-2x-small);
3469
3597
  padding-inline: var(--op-space-small) var(--op-space-x-small);
3470
3598
 
@@ -3529,7 +3657,6 @@ small {
3529
3657
  --__op-btn-height: var(--__op-btn-base-height);
3530
3658
 
3531
3659
  display: inline-flex;
3532
- min-height: var(--__op-btn-height);
3533
3660
  align-items: center;
3534
3661
  justify-content: center;
3535
3662
  border: none;
@@ -3543,6 +3670,7 @@ small {
3543
3670
  font-weight: var(--op-font-weight-normal);
3544
3671
  gap: var(--op-space-x-small);
3545
3672
  margin-block: calc((var(--__op-form-control-height) / 2) - (var(--__op-btn-height) / 2));
3673
+ min-block-size: var(--__op-btn-height);
3546
3674
  padding-block: 0;
3547
3675
  padding-inline: var(--op-space-x-small);
3548
3676
  text-align: center;
@@ -3567,12 +3695,12 @@ select.form-control:not([multiple], [type='radio'], [type='checkbox']) {
3567
3695
  padding-inline-end: var(--op-space-3x-large);
3568
3696
  }
3569
3697
  select.form-control[multiple] {
3570
- min-height: calc(2 * var(--__op-form-control-height));
3698
+ min-block-size: calc(2 * var(--__op-form-control-height));
3571
3699
  }
3572
3700
  textarea.form-control:not([type='radio'], [type='checkbox']) {
3573
- max-width: 100%;
3574
- height: calc(2 * var(--__op-form-control-height));
3575
- min-height: var(--__op-form-control-height);
3701
+ block-size: calc(2 * var(--__op-form-control-height));
3702
+ max-inline-size: 100%;
3703
+ min-block-size: var(--__op-form-control-height);
3576
3704
  }
3577
3705
  .form-label {
3578
3706
  color: var(--op-color-on-background);
@@ -3582,9 +3710,9 @@ textarea.form-control:not([type='radio'], [type='checkbox']) {
3582
3710
  line-height: var(--op-line-height-base);
3583
3711
  }
3584
3712
  .form-error {
3585
- width: fit-content;
3586
3713
  color: var(--op-color-alerts-danger-base);
3587
3714
  font-size: var(--op-font-x-small);
3715
+ inline-size: fit-content;
3588
3716
  }
3589
3717
  .form-hint {
3590
3718
  display: block;
@@ -3621,7 +3749,8 @@ textarea.form-control:not([type='radio'], [type='checkbox']) {
3621
3749
  .form-label,
3622
3750
  .form-error,
3623
3751
  .form-hint,
3624
- .form-control:not([type='radio'], [type='checkbox']) {
3752
+ .form-control:not([type='radio'], [type='checkbox']),
3753
+ .segmented-control {
3625
3754
  grid-column: 1 / 3;
3626
3755
  }
3627
3756
  /* stylelint-enable no-descending-specificity */
@@ -3754,10 +3883,10 @@ textarea.form-control:not([type='radio'], [type='checkbox']) {
3754
3883
  --__op-icon-optical-size: var(--_op-icon-optical-size-medium);
3755
3884
 
3756
3885
  display: inline-block;
3757
- width: var(--__op-icon-font-size);
3758
- height: var(--__op-icon-font-size);
3886
+ block-size: var(--__op-icon-font-size);
3759
3887
  font-size: var(--__op-icon-font-size);
3760
3888
  font-weight: var(--__op-icon-weight);
3889
+ inline-size: var(--__op-icon-font-size);
3761
3890
  line-height: var(--op-line-height-densest);
3762
3891
  vertical-align: middle;
3763
3892
 
@@ -3833,8 +3962,8 @@ textarea.form-control:not([type='radio'], [type='checkbox']) {
3833
3962
  /* Custom SVG Icons app specific */
3834
3963
  .custom-icons {
3835
3964
  svg {
3836
- width: 100%;
3837
- height: 100%;
3965
+ block-size: 100%;
3966
+ inline-size: 100%;
3838
3967
  }
3839
3968
  }
3840
3969
  .modal-wrapper {
@@ -3879,20 +4008,19 @@ textarea.form-control:not([type='radio'], [type='checkbox']) {
3879
4008
  }
3880
4009
  }
3881
4010
  }
3882
- /* stylelint-disable no-descending-specificity */
3883
4011
  .modal {
3884
4012
  /* Public API (customizable component options) */
3885
4013
  --_op-modal-width: calc(141 * var(--op-size-unit)); /* 564px */
3886
4014
  --_op-modal-max-height: calc(125 * var(--op-size-unit)); /* 500px */
3887
4015
 
3888
4016
  z-index: var(--op-z-index-dialog-content);
3889
- width: var(--_op-modal-width);
3890
4017
  border-radius: var(--op-radius-medium);
3891
4018
  background-color: var(--op-color-background);
3892
4019
  box-shadow: var(--op-border-all) var(--op-color-border);
3893
4020
  color: var(--op-color-on-background);
3894
4021
  contain: paint;
3895
4022
  font-size: var(--op-font-medium);
4023
+ inline-size: var(--_op-modal-width);
3896
4024
  line-height: var(--op-line-height-base);
3897
4025
  opacity: var(--op-opacity-none);
3898
4026
  transform: scale(0.7);
@@ -3913,8 +4041,8 @@ textarea.form-control:not([type='radio'], [type='checkbox']) {
3913
4041
  }
3914
4042
 
3915
4043
  .modal__body {
3916
- max-height: var(--_op-modal-max-height);
3917
4044
  box-shadow: var(--op-border-all) var(--op-color-border);
4045
+ max-block-size: var(--_op-modal-max-height);
3918
4046
  overflow-y: auto;
3919
4047
  }
3920
4048
 
@@ -3925,59 +4053,45 @@ textarea.form-control:not([type='radio'], [type='checkbox']) {
3925
4053
  gap: var(--op-space-small);
3926
4054
  }
3927
4055
  }
3928
- /* stylelint-enable no-descending-specificity */
3929
4056
  dialog.modal {
3930
- position: fixed;
3931
- display: block;
3932
4057
  padding: 0;
3933
4058
  border: none;
3934
- inset: 0;
4059
+ overscroll-behavior: contain;
4060
+ transform: scale(0.7);
4061
+ transition:
4062
+ display var(--op-transition-modal-time) allow-discrete,
4063
+ overlay var(--op-transition-modal-time) allow-discrete,
4064
+ transform var(--op-transition-modal-time),
4065
+ opacity var(--op-transition-modal-time);
3935
4066
 
3936
4067
  &::backdrop {
3937
- /* The Dialog backdrop does not inheret from :root so these need to be duplicated here. */
3938
- --op-color-black: hsl(0deg 0% 0%);
3939
- --_op-modal-backdrop-active-opacity: 0.5;
3940
- --op-opacity-none: 0;
3941
- --op-opacity-full: 1;
3942
-
3943
- animation: show-backdrop 300ms ease-in;
3944
- background: var(--op-color-black);
3945
- opacity: var(--_op-modal-backdrop-active-opacity);
4068
+ overflow: hidden;
4069
+ background-color: var(--op-color-black);
4070
+ opacity: var(--op-opacity-none);
4071
+ overscroll-behavior: contain;
4072
+ transition:
4073
+ display var(--op-transition-modal-time) allow-discrete,
4074
+ overlay var(--op-transition-modal-time) allow-discrete,
4075
+ transform var(--op-transition-modal-time),
4076
+ opacity var(--op-transition-modal-time);
3946
4077
  }
3947
4078
 
3948
4079
  &[open] {
3949
4080
  opacity: var(--op-opacity-full);
3950
4081
  transform: scale(1);
3951
- }
3952
-
3953
- &.modal--closing {
3954
- opacity: var(--op-opacity-none);
3955
- transform: scale(0.7);
3956
4082
 
3957
4083
  &::backdrop {
3958
- animation: hide-backdrop 300ms ease-in;
3959
- opacity: var(--op-opacity-none);
4084
+ opacity: var(--op-opacity-half);
3960
4085
  }
3961
4086
  }
3962
4087
  }
3963
- /* Using the Dialog element */
3964
- /* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dialog */
3965
- @keyframes show-backdrop {
3966
- from {
3967
- opacity: var(--op-opacity-none);
3968
- }
3969
-
3970
- to {
3971
- opacity: var(--_op-modal-backdrop-active-opacity);
3972
- }
3973
- }
3974
- @keyframes hide-backdrop {
3975
- from {
3976
- opacity: var(--_op-modal-backdrop-active-opacity);
3977
- }
4088
+ @starting-style {
4089
+ dialog.modal[open] {
4090
+ transform: scale(0.7);
3978
4091
 
3979
- to {
3980
- opacity: var(--op-opacity-none);
4092
+ &::backdrop {
4093
+ opacity: var(--op-opacity-none);
4094
+ }
3981
4095
  }
3982
4096
  }
3983
4097
  .navbar {
@@ -3998,18 +4112,20 @@ dialog.modal {
3998
4112
  align-items: center;
3999
4113
  padding: var(--op-space-small) var(--_op-navbar-horizontal-spacing);
4000
4114
  background-color: var(--_op-navbar-background-color);
4001
- box-shadow: var(--op-border-bottom) var(--_op-navbar-border-color);
4115
+ box-shadow:
4116
+ var(--op-border-top) var(--_op-navbar-border-color),
4117
+ var(--op-border-bottom) var(--_op-navbar-border-color);
4002
4118
  color: var(--_op-navbar-text-color);
4003
4119
  gap: var(--_op-navbar-content-spacing);
4004
4120
 
4005
4121
  /* Elements */
4006
4122
 
4007
4123
  .navbar__brand {
4008
- height: var(--_op-navbar-brand-height);
4009
- margin-right: var(--_op-navbar-horizontal-spacing);
4124
+ block-size: var(--_op-navbar-brand-height);
4125
+ margin-inline-end: var(--_op-navbar-horizontal-spacing);
4010
4126
 
4011
4127
  img {
4012
- height: 100%;
4128
+ block-size: 100%;
4013
4129
  }
4014
4130
  }
4015
4131
 
@@ -4060,10 +4176,145 @@ dialog.modal {
4060
4176
 
4061
4177
  /* ... Gap */
4062
4178
  .pagination__divider {
4063
- height: 100%;
4179
+ block-size: 100%;
4064
4180
  padding-inline: var(--op-space-x-small);
4065
4181
  }
4066
4182
  }
4183
+ .segmented-control {
4184
+ --op-input-inner-focus: 0 0 0 var(--op-border-width-large);
4185
+ --op-input-focus-primary:
4186
+ var(--op-input-inner-focus) var(--op-color-primary-plus-two),
4187
+ var(--op-input-outer-focus) var(--op-color-primary-plus-five);
4188
+
4189
+ /* Public API (customizable component options) */
4190
+ --_op-segmented-control-height-small: var(--op-input-height-small);
4191
+ --_op-segmented-control-height-medium: var(--op-input-height-medium);
4192
+ --_op-segmented-control-height-large: var(--op-input-height-large);
4193
+
4194
+ --_op-segmented-control-font-small: var(--op-font-x-small);
4195
+ --_op-segmented-control-font-medium: var(--op-font-small);
4196
+ --_op-segmented-control-font-large: var(--op-font-small);
4197
+
4198
+ --_op-segmented-control-label-padding-small: var(--op-space-x-small);
4199
+ --_op-segmented-control-label-padding-medium: var(--op-space-small);
4200
+ --_op-segmented-control-label-padding-large: var(--op-space-small);
4201
+
4202
+ --_op-segmented-control-label-gap-small: var(--op-space-3x-small);
4203
+ --_op-segmented-control-label-gap-medium: var(--op-space-2x-small);
4204
+ --_op-segmented-control-label-gap-large: var(--op-space-2x-small);
4205
+
4206
+ --_op-segmented-control-color-icon-default: var(--op-color-neutral-on-plus-eight-alt);
4207
+ --_op-segmented-control-color-icon-active: light-dark(
4208
+ var(--op-color-primary-plus-four),
4209
+ var(--op-color-primary-minus-six)
4210
+ );
4211
+
4212
+ /* Private API (component option defaults) */
4213
+ --__op-segmented-control-height: var(--_op-segmented-control-height-large);
4214
+ --__op-segmented-control-font-size: var(--_op-segmented-control-font-large);
4215
+ --__op-segmented-control-label-padding: var(--_op-segmented-control-label-padding-large);
4216
+ --__op-segmented-control-label-gap: var(--_op-segmented-control-label-gap-large);
4217
+ --__op-segmented-control-color-icon: var(--_op-segmented-control-color-icon-default);
4218
+
4219
+ position: relative;
4220
+ display: grid;
4221
+ padding: var(--op-space-2x-small);
4222
+ border-radius: var(--op-radius-medium);
4223
+ background-color: var(--op-color-neutral-plus-eight);
4224
+ block-size: var(--__op-segmented-control-height);
4225
+ box-shadow: var(--op-border-all) var(--op-color-border);
4226
+ color: var(--op-color-neutral-on-plus-eight);
4227
+ font-size: var(--__op-segmented-control-font-size);
4228
+ gap: var(--op-space-2x-small);
4229
+ grid-auto-flow: column;
4230
+ inline-size: fit-content;
4231
+
4232
+ &.segmented-control--full-width {
4233
+ inline-size: 100%;
4234
+ }
4235
+
4236
+ .icon {
4237
+ color: var(--__op-segmented-control-color-icon);
4238
+ }
4239
+
4240
+ .segmented-control__input {
4241
+ position: absolute;
4242
+ overflow: hidden;
4243
+ padding: 0;
4244
+ border-width: 0;
4245
+ margin: -1px;
4246
+ block-size: 1px;
4247
+ clip: rect(0, 0, 0, 0);
4248
+ inline-size: 1px;
4249
+ white-space: nowrap;
4250
+
4251
+ /* Selected Option */
4252
+ &:checked + .segmented-control__label {
4253
+ --__op-segmented-control-color-icon: var(--_op-segmented-control-color-icon-active);
4254
+
4255
+ background-color: var(--op-color-primary-plus-one);
4256
+ color: var(--op-color-primary-on-plus-one);
4257
+ }
4258
+
4259
+ &:focus-visible {
4260
+ + .segmented-control__label {
4261
+ box-shadow: var(--op-input-focus-primary);
4262
+ }
4263
+ }
4264
+ }
4265
+
4266
+ .segmented-control__label {
4267
+ display: inline-flex;
4268
+ align-items: center;
4269
+ justify-content: center;
4270
+ border-radius: var(--op-radius-small);
4271
+ gap: var(--__op-segmented-control-label-gap);
4272
+ padding-inline: var(--__op-segmented-control-label-padding);
4273
+ white-space: nowrap;
4274
+
4275
+ &:hover {
4276
+ background-color: var(--op-color-neutral-plus-five);
4277
+ color: var(--op-color-neutral-on-plus-five);
4278
+ }
4279
+ }
4280
+
4281
+ /* Size Modifiers */
4282
+ &.segmented-control--small {
4283
+ --__op-segmented-control-height: var(--_op-segmented-control-height-small);
4284
+ --__op-segmented-control-font-size: var(--_op-segmented-control-font-small);
4285
+ --__op-segmented-control-label-padding: var(--_op-segmented-control-label-padding-small);
4286
+ --__op-segmented-control-label-gap: var(--_op-segmented-control-label-gap-small);
4287
+
4288
+ .icon {
4289
+ --__op-icon-font-size: var(--_op-icon-font-size-small);
4290
+ --__op-icon-optical-size: var(--_op-icon-optical-size-small);
4291
+ }
4292
+ }
4293
+
4294
+ &.segmented-control--medium {
4295
+ --__op-segmented-control-height: var(--_op-segmented-control-height-medium);
4296
+ --__op-segmented-control-font-size: var(--_op-segmented-control-font-medium);
4297
+ --__op-segmented-control-label-padding: var(--_op-segmented-control-label-padding-medium);
4298
+ --__op-segmented-control-label-gap: var(--_op-segmented-control-label-gap-medium);
4299
+
4300
+ .icon {
4301
+ --__op-icon-font-size: var(--_op-icon-font-size-medium);
4302
+ --__op-icon-optical-size: var(--_op-icon-optical-size-medium);
4303
+ }
4304
+ }
4305
+
4306
+ &.segmented-control--large {
4307
+ --__op-segmented-control-height: var(--_op-segmented-control-height-large);
4308
+ --__op-segmented-control-font-size: var(--_op-segmented-control-font-large);
4309
+ --__op-segmented-control-label-padding: var(--_op-segmented-control-label-padding-large);
4310
+ --__op-segmented-control-label-gap: var(--_op-segmented-control-label-gap-large);
4311
+
4312
+ .icon {
4313
+ --__op-icon-font-size: var(--_op-icon-font-size-medium);
4314
+ --__op-icon-optical-size: var(--_op-icon-optical-size-medium);
4315
+ }
4316
+ }
4317
+ }
4067
4318
  .sidebar {
4068
4319
  /* Public API (customizable component options) */
4069
4320
 
@@ -4095,23 +4346,25 @@ dialog.modal {
4095
4346
 
4096
4347
  z-index: var(--op-z-index-sidebar);
4097
4348
  display: flex;
4098
- width: var(--__op-sidebar-width);
4099
- min-width: var(--__op-sidebar-width);
4100
4349
  flex-direction: column;
4101
4350
  background-color: var(--_op-sidebar-background-color);
4102
- box-shadow: var(--op-border-right) var(--_op-sidebar-border-color);
4351
+ box-shadow:
4352
+ var(--op-border-left) var(--_op-sidebar-border-color),
4353
+ var(--op-border-right) var(--_op-sidebar-border-color);
4103
4354
  color: var(--_op-sidebar-text-color);
4355
+ inline-size: var(--__op-sidebar-width);
4356
+ min-inline-size: var(--__op-sidebar-width);
4104
4357
  overflow-y: auto;
4105
4358
  transition: var(--_op-sidebar-transition);
4106
4359
 
4107
4360
  /* Elements */
4108
4361
  .sidebar__brand {
4109
- height: var(--__op-sidebar-brand-width);
4110
4362
  padding: var(--_op-sidebar-brand-spacing);
4363
+ block-size: var(--__op-sidebar-brand-width);
4111
4364
  margin-inline: auto;
4112
4365
 
4113
4366
  img {
4114
- height: 100%;
4367
+ block-size: 100%;
4115
4368
  }
4116
4369
  }
4117
4370
 
@@ -4184,13 +4437,14 @@ dialog.modal {
4184
4437
  align-items: center;
4185
4438
 
4186
4439
  > * {
4187
- /* Need to get icon behavior */
4188
- width: var(--__op-btn-height);
4189
- min-width: var(--__op-btn-height);
4190
4440
  justify-content: center;
4191
4441
  padding: 0;
4192
4442
  font-size: 0;
4193
4443
  gap: 0;
4444
+
4445
+ /* Need to get icon behavior */
4446
+ inline-size: var(--__op-btn-height);
4447
+ min-inline-size: var(--__op-btn-height);
4194
4448
  }
4195
4449
  }
4196
4450
  }
@@ -4211,13 +4465,13 @@ dialog.modal {
4211
4465
  --_op-side-panel-section-padding: var(--op-space-medium);
4212
4466
 
4213
4467
  display: flex;
4214
- width: var(--_op-side-panel-width);
4215
- min-width: var(--_op-side-panel-width);
4216
- height: 100vh;
4217
- max-height: 100%;
4218
4468
  flex-direction: column;
4219
4469
  background-color: var(--op-color-background);
4470
+ block-size: 100vh;
4220
4471
  color: var(--op-color-on-background);
4472
+ inline-size: var(--_op-side-panel-width);
4473
+ max-block-size: 100%;
4474
+ min-inline-size: var(--_op-side-panel-width);
4221
4475
 
4222
4476
  /* Modifiers */
4223
4477
  &.side-panel--border-left {
@@ -4311,12 +4565,12 @@ dialog.modal {
4311
4565
  --__op-spinner-diameter: var(--_op-spinner-diameter-large);
4312
4566
  --__op-spinner-track-width: var(--_op-spinner-track-width-large);
4313
4567
 
4314
- width: var(--__op-spinner-diameter);
4315
- height: var(--__op-spinner-diameter);
4316
4568
  border: var(--__op-spinner-track-width) solid var(--_op-spinner-track-color);
4317
4569
  border-radius: var(--__op-spinner-diameter);
4318
- border-top-color: var(--_op-spinner-indicator-color);
4319
4570
  animation: spinner var(--_op-spinner-animation-duration) var(--_op-spinner-animation-timing-function) infinite;
4571
+ block-size: var(--__op-spinner-diameter);
4572
+ border-block-start-color: var(--_op-spinner-indicator-color);
4573
+ inline-size: var(--__op-spinner-diameter);
4320
4574
 
4321
4575
  &.spinner--x-small {
4322
4576
  --__op-spinner-diameter: var(--_op-spinner-diameter-x-small);
@@ -4365,20 +4619,20 @@ dialog.modal {
4365
4619
  label {
4366
4620
  position: relative;
4367
4621
  display: block;
4368
- width: var(--__op-switch-width);
4369
- height: var(--__op-switch-height);
4370
4622
  border-radius: var(--op-radius-pill);
4371
4623
  background: var(--op-color-neutral-base);
4624
+ block-size: var(--__op-switch-height);
4372
4625
  box-shadow: inset var(--op-border-all) var(--op-color-neutral-plus-three);
4626
+ inline-size: var(--__op-switch-width);
4373
4627
  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 */
4374
4628
 
4375
4629
  &::after {
4376
4630
  position: absolute;
4377
- width: var(--__op-switch-switch-size);
4378
- height: var(--__op-switch-switch-size);
4379
4631
  border-radius: var(--op-radius-circle);
4380
4632
  background-color: var(--op-color-neutral-plus-eight);
4633
+ block-size: var(--__op-switch-switch-size);
4381
4634
  content: '';
4635
+ inline-size: var(--__op-switch-switch-size);
4382
4636
  inset-block-start: var(--__op-switch-half-switch-padding);
4383
4637
  inset-inline-start: var(--__op-switch-half-switch-padding);
4384
4638
  transition: var(--op-transition-input);
@@ -4387,12 +4641,12 @@ dialog.modal {
4387
4641
 
4388
4642
  /* Prevent labels after the toggle being full width */
4389
4643
  & + label {
4390
- width: fit-content;
4644
+ inline-size: fit-content;
4391
4645
  }
4392
4646
 
4393
4647
  input {
4394
- width: 0;
4395
- height: 0;
4648
+ block-size: 0;
4649
+ inline-size: 0;
4396
4650
  margin-inline-end: calc(-1 * var(--op-space-x-small));
4397
4651
 
4398
4652
  &:disabled {
@@ -4409,7 +4663,7 @@ dialog.modal {
4409
4663
  box-shadow: none;
4410
4664
 
4411
4665
  &::after {
4412
- left: calc(100% - var(--__op-switch-half-switch-padding));
4666
+ inset-inline-start: calc(100% - var(--__op-switch-half-switch-padding));
4413
4667
  transform: translateX(-100%);
4414
4668
  }
4415
4669
  }
@@ -4538,11 +4792,11 @@ dialog.modal {
4538
4792
  /* These allow for overriding specific padding versions easier. */
4539
4793
  --__op-table-cell-height: var(--_op-table-cell-height-default);
4540
4794
 
4541
- width: 100%;
4542
4795
  border-radius: var(--op-radius-medium);
4543
4796
  border-collapse: collapse;
4544
4797
  box-shadow: var(--op-border-all) var(--op-color-border);
4545
4798
  contain: paint;
4799
+ inline-size: 100%;
4546
4800
  table-layout: auto;
4547
4801
 
4548
4802
  /* Elements */
@@ -4560,7 +4814,7 @@ dialog.modal {
4560
4814
 
4561
4815
  th {
4562
4816
  font-weight: var(--op-font-weight-semi-bold);
4563
- text-align: left;
4817
+ text-align: start;
4564
4818
  }
4565
4819
 
4566
4820
  tbody,
@@ -4571,7 +4825,7 @@ dialog.modal {
4571
4825
 
4572
4826
  th,
4573
4827
  td {
4574
- height: var(--__op-table-cell-height);
4828
+ block-size: var(--__op-table-cell-height);
4575
4829
  font-size: var(--op-font-small);
4576
4830
  padding-block: var(--op-space-2x-small);
4577
4831
  padding-inline: var(--op-space-small);
@@ -4906,8 +5160,6 @@ dialog.modal {
4906
5160
  position: absolute;
4907
5161
  z-index: var(--op-z-index-tooltip);
4908
5162
  display: block;
4909
- width: max-content;
4910
- max-width: var(--_op-tooltip-max-width);
4911
5163
  padding: var(--_op-tooltip-padding);
4912
5164
  border-radius: var(--_op-tooltip-tooltip-radius);
4913
5165
  background-color: var(--_op-tooltip-background-color);
@@ -4915,6 +5167,8 @@ dialog.modal {
4915
5167
  content: attr(data-tooltip-text);
4916
5168
  font-family: var(--op-font-family); /* Makes tooltips on icons work */
4917
5169
  font-size: var(--_op-tooltip-tooltip-font-size);
5170
+ inline-size: max-content;
5171
+ max-inline-size: var(--_op-tooltip-max-width);
4918
5172
  overflow-wrap: break-word;
4919
5173
  pointer-events: none;
4920
5174
  text-align: center;