@rolemodel/optics 1.10.0 → 1.12.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.
@@ -2814,38 +2814,79 @@ small {
2814
2814
  }
2815
2815
 
2816
2816
  .form-control {
2817
+ /* Public API (customizable component options) */
2817
2818
  --_op-form-control-height-small: var(--op-input-height-small);
2818
2819
  --_op-form-control-height-medium: var(--op-input-height-medium);
2819
2820
  --_op-form-control-height-large: var(--op-input-height-large);
2820
2821
  --_op-form-control-font-small: var(--op-font-x-small);
2821
2822
  --_op-form-control-font-medium: var(--op-font-small);
2822
2823
  --_op-form-control-font-large: var(--op-font-small);
2824
+ /* Private API (component option defaults) */
2823
2825
  --__op-form-control-height: var(--_op-form-control-height-large);
2824
2826
  --__op-form-control-font-size: var(--_op-form-control-font-large);
2825
2827
  min-width: var(--__op-form-control-height);
2826
2828
  height: var(--__op-form-control-height);
2829
+ /* Size Modifiers */
2830
+ &.form-control--small {
2831
+ --__op-form-control-height: var(--_op-form-control-height-small);
2832
+ --__op-form-control-font-size: var(--_op-form-control-font-small);
2833
+ }
2834
+ &.form-control--medium {
2835
+ --__op-form-control-height: var(--_op-form-control-height-medium);
2836
+ --__op-form-control-font-size: var(--_op-form-control-font-medium);
2837
+ }
2838
+ &.form-control--large {
2839
+ --__op-form-control-height: var(--_op-form-control-height-large);
2840
+ --__op-form-control-font-size: var(--_op-form-control-font-large);
2841
+ }
2842
+ /* Disabled State */
2843
+ &:disabled {
2844
+ cursor: not-allowed;
2845
+ opacity: var(--_op-form-control-opacity-disabled);
2846
+ }
2847
+ /* Readonly State */
2848
+ &[readonly] {
2849
+ padding: 0;
2850
+ background: transparent;
2851
+ box-shadow: none;
2852
+ color: var(--op-color-on-background);
2853
+ pointer-events: none;
2854
+ user-select: none;
2855
+ /* stylelint-disable selector-no-vendor-prefix */
2856
+ &::-webkit-input-placeholder {
2857
+ color: var(--op-color-on-background);
2858
+ }
2859
+ /* stylelint-enable selector-no-vendor-prefix */
2860
+ }
2827
2861
  }
2828
- .form-control--small.form-control {
2829
- --__op-form-control-height: var(--_op-form-control-height-small);
2830
- --__op-form-control-font-size: var(--_op-form-control-font-small);
2831
- }
2832
- .form-control--medium.form-control {
2833
- --__op-form-control-height: var(--_op-form-control-height-medium);
2834
- --__op-form-control-font-size: var(--_op-form-control-font-medium);
2835
- }
2836
- .form-control--large.form-control {
2837
- --__op-form-control-height: var(--_op-form-control-height-large);
2838
- --__op-form-control-font-size: var(--_op-form-control-font-large);
2862
+
2863
+ /* Radio or Checkbox Form Control */
2864
+ .form-control:is([type=radio], [type=checkbox]) {
2865
+ /* Public API (customizable component options) */
2866
+ --_op-form-control-height-small: var(--op-space-medium);
2867
+ --_op-form-control-height-medium: var(--op-space-large);
2868
+ --_op-form-control-height-large: var(--op-space-x-large);
2869
+ width: var(--__op-form-control-height);
2870
+ height: var(--__op-form-control-height);
2871
+ align-self: center;
2872
+ margin: 0;
2873
+ accent-color: var(--op-color-primary-base);
2874
+ cursor: pointer;
2875
+ & + label {
2876
+ align-self: center;
2877
+ }
2839
2878
  }
2840
2879
 
2880
+ /* Any Form Control that is not a radio or checkbox */
2841
2881
  .form-control:not([type=radio], [type=checkbox]) {
2882
+ /* Public API (customizable component options) */
2842
2883
  --_op-form-control-opacity-disabled: var(--op-opacity-disabled);
2884
+ /* Private API (component option defaults) */
2843
2885
  --__op-form-control-border-color: var(--op-color-neutral-plus-four);
2844
2886
  display: block;
2845
2887
  width: 100%;
2846
2888
  min-width: var(--__op-form-control-height);
2847
2889
  height: var(--__op-form-control-height);
2848
- padding: var(--op-space-2x-small) var(--op-space-x-small) var(--op-space-2x-small) var(--op-space-small);
2849
2890
  border: none;
2850
2891
  border-radius: var(--op-radius-medium);
2851
2892
  appearance: none;
@@ -2855,124 +2896,96 @@ small {
2855
2896
  cursor: text;
2856
2897
  font-size: var(--__op-form-control-font-size);
2857
2898
  line-height: var(--op-line-height-base);
2858
- }
2859
- .form-control:hover:not(:disabled, [readonly]):not([type=radio], [type=checkbox]) {
2860
- box-shadow: var(--op-border-all) var(--op-color-primary-plus-three);
2861
- }
2862
- .form-control:focus:not([type=radio], [type=checkbox]), .form-control:focus-within:not([type=radio], [type=checkbox]), .form-control:focus-visible:not([type=radio], [type=checkbox]) {
2863
- outline: none;
2864
- }
2865
- .form-control:focus-visible:not([readonly]):not([type=radio], [type=checkbox]) {
2866
- background-color: var(--op-color-primary-plus-seven);
2867
- box-shadow: var(--op-input-focus-primary);
2868
- color: var(--op-color-primary-on-plus-seven);
2869
- }
2870
- .form-control--no-border.form-control:not([type=radio], [type=checkbox]) {
2871
- background-color: transparent;
2872
- box-shadow: none;
2873
- color: var(--op-color-primary-on-plus-max);
2874
- }
2875
- .form-control--no-border.form-control:focus-visible:not([readonly]):not([type=radio], [type=checkbox]) {
2876
- background-color: var(--op-color-primary-plus-seven);
2877
- box-shadow: var(--op-input-focus-primary);
2878
- color: var(--op-color-primary-on-plus-seven);
2879
- }
2880
- .form-control--no-border.form-control:hover:not(:disabled, [readonly]):not([type=radio], [type=checkbox]) {
2881
- background-color: var(--op-color-primary-plus-eight);
2882
- box-shadow: inset var(--op-border-all) var(--op-color-primary-plus-two);
2883
- color: var(--op-color-primary-on-plus-eight);
2899
+ padding-block: var(--op-space-2x-small);
2900
+ padding-inline: var(--op-space-small) var(--op-space-x-small);
2901
+ /* Focus State */
2902
+ &:focus,
2903
+ &:focus-within,
2904
+ &:focus-visible {
2905
+ outline: none;
2906
+ }
2907
+ /* Hover State */
2908
+ &:hover:not(:disabled, [readonly]) {
2909
+ box-shadow: var(--op-border-all) var(--op-color-primary-plus-three);
2910
+ }
2911
+ &:focus-visible:not([readonly]) {
2912
+ background-color: var(--op-color-primary-plus-seven);
2913
+ box-shadow: var(--op-input-focus-primary);
2914
+ color: var(--op-color-primary-on-plus-seven);
2915
+ }
2916
+ /* Borderless State */
2917
+ &.form-control--no-border {
2918
+ background-color: transparent;
2919
+ box-shadow: none;
2920
+ color: var(--op-color-primary-on-plus-max);
2921
+ &:focus-visible:not([readonly]) {
2922
+ background-color: var(--op-color-primary-plus-seven);
2923
+ box-shadow: var(--op-input-focus-primary);
2924
+ color: var(--op-color-primary-on-plus-seven);
2925
+ }
2926
+ /* Borderless + Hover State */
2927
+ &:hover:not(:disabled, [readonly]) {
2928
+ background-color: var(--op-color-primary-plus-eight);
2929
+ box-shadow: inset var(--op-border-all) var(--op-color-primary-plus-two);
2930
+ color: var(--op-color-primary-on-plus-eight);
2931
+ }
2932
+ }
2884
2933
  }
2885
2934
 
2886
- .form-control[type=radio], .form-control[type=checkbox] {
2887
- --_op-form-control-height-small: var(--op-space-medium);
2888
- --_op-form-control-height-medium: var(--op-space-large);
2889
- --_op-form-control-height-large: var(--op-space-x-large);
2890
- width: var(--__op-form-control-height);
2891
- height: var(--__op-form-control-height);
2892
- align-self: center;
2893
- margin: 0;
2894
- accent-color: var(--op-color-primary-base);
2935
+ /* Color Form Control */
2936
+ .form-control[type=color] {
2937
+ padding: var(--op-space-2x-small);
2895
2938
  cursor: pointer;
2939
+ &::-webkit-color-swatch-wrapper {
2940
+ padding: 0;
2941
+ }
2942
+ &::-webkit-color-swatch {
2943
+ border: none;
2944
+ border-radius: var(--op-radius-medium);
2945
+ }
2896
2946
  }
2897
- .form-control[type=radio] + label, .form-control[type=checkbox] + label {
2898
- align-self: center;
2947
+
2948
+ /* File Form Control */
2949
+ .form-control[type=file] {
2950
+ padding-block: 0;
2951
+ &::file-selector-button {
2952
+ --__op-btn-base-height: var(--op-input-height-small);
2953
+ --__op-btn-height: var(--__op-btn-base-height);
2954
+ display: inline-flex;
2955
+ min-height: var(--__op-btn-height);
2956
+ align-items: center;
2957
+ justify-content: center;
2958
+ border: none;
2959
+ border-radius: var(--op-radius-medium);
2960
+ appearance: none;
2961
+ background-color: var(--op-color-neutral-plus-eight);
2962
+ box-shadow: inset var(--op-border-all) var(--op-color-neutral-plus-four);
2963
+ color: var(--op-color-neutral-on-plus-eight);
2964
+ cursor: pointer;
2965
+ font-size: var(--op-font-x-small);
2966
+ font-weight: var(--op-font-weight-normal);
2967
+ gap: var(--op-space-x-small);
2968
+ margin-block: calc(var(--__op-form-control-height) / 2 - var(--__op-btn-height) / 2);
2969
+ padding-block: 0;
2970
+ padding-inline: var(--op-space-x-small);
2971
+ text-align: center;
2972
+ text-decoration: none;
2973
+ transition: var(--op-transition-input);
2974
+ white-space: nowrap;
2975
+ }
2976
+ &.form-control--small::file-selector-button {
2977
+ --__op-btn-height: calc(var(--__op-btn-base-height) - var(--op-space-x-small));
2978
+ }
2899
2979
  }
2900
2980
 
2901
2981
  select.form-control:not([multiple], [type=radio], [type=checkbox]) {
2902
- padding-right: var(--op-space-3x-large);
2903
2982
  appearance: none;
2904
2983
  background-image: var(--op-encoded-images-dropdown-arrow);
2905
2984
  background-position: center right;
2906
2985
  background-position-x: calc(100% - (var(--op-space-3x-large) / 2 - var(--op-encoded-images-dropdown-arrow-width) / 2));
2907
2986
  background-repeat: no-repeat;
2908
2987
  cursor: pointer;
2909
- }
2910
-
2911
- .form-label {
2912
- color: var(--op-color-on-background);
2913
- font-size: var(--op-font-x-small);
2914
- font-weight: var(--op-font-weight-normal);
2915
- letter-spacing: var(--op-letter-spacing-label);
2916
- line-height: var(--op-line-height-base);
2917
- }
2918
-
2919
- .form-control[type=color] {
2920
- padding: var(--op-space-2x-small);
2921
- cursor: pointer;
2922
- }
2923
- .form-control[type=color]::-webkit-color-swatch-wrapper {
2924
- padding: 0;
2925
- }
2926
- .form-control[type=color]::-webkit-color-swatch {
2927
- border: none;
2928
- border-radius: var(--op-radius-medium);
2929
- }
2930
- .form-control[type=file] {
2931
- padding-block: 0;
2932
- }
2933
- .form-control[type=file]::file-selector-button {
2934
- --__op-btn-base-height: var(--op-input-height-small);
2935
- --__op-btn-height: var(--__op-btn-base-height);
2936
- display: inline-flex;
2937
- min-height: var(--__op-btn-height);
2938
- align-items: center;
2939
- justify-content: center;
2940
- padding: 0 var(--op-space-x-small);
2941
- border: none;
2942
- border-radius: var(--op-radius-medium);
2943
- appearance: none;
2944
- background-color: var(--op-color-neutral-plus-eight);
2945
- box-shadow: inset var(--op-border-all) var(--op-color-neutral-plus-four);
2946
- color: var(--op-color-neutral-on-plus-eight);
2947
- cursor: pointer;
2948
- font-size: var(--op-font-x-small);
2949
- font-weight: var(--op-font-weight-normal);
2950
- gap: var(--op-space-x-small);
2951
- margin-block: calc(var(--__op-form-control-height) / 2 - var(--__op-btn-height) / 2);
2952
- text-align: center;
2953
- text-decoration: none;
2954
- transition: var(--op-transition-input);
2955
- white-space: nowrap;
2956
- }
2957
- .form-control[type=file].form-control--small::file-selector-button {
2958
- --__op-btn-height: calc(var(--__op-btn-base-height) - var(--op-space-x-small));
2959
- }
2960
- .form-control:disabled {
2961
- cursor: not-allowed;
2962
- opacity: var(--_op-form-control-opacity-disabled);
2963
- }
2964
- .form-control[readonly] {
2965
- padding: 0;
2966
- background: transparent;
2967
- box-shadow: none;
2968
- color: var(--op-color-on-background);
2969
- pointer-events: none;
2970
- user-select: none;
2971
- /* stylelint-disable selector-no-vendor-prefix */
2972
- /* stylelint-enable selector-no-vendor-prefix */
2973
- }
2974
- .form-control[readonly]::-webkit-input-placeholder {
2975
- color: var(--op-color-on-background);
2988
+ padding-inline-end: var(--op-space-3x-large);
2976
2989
  }
2977
2990
 
2978
2991
  select.form-control[multiple] {
@@ -2985,49 +2998,12 @@ textarea.form-control:not([type=radio], [type=checkbox]) {
2985
2998
  min-height: var(--__op-form-control-height);
2986
2999
  }
2987
3000
 
2988
- .form-group--error {
2989
- /* stylelint-disable no-descending-specificity */
2990
- /* stylelint-enable no-descending-specificity */
2991
- }
2992
- .form-group--error .form-control {
2993
- box-shadow: var(--op-border-all) var(--op-color-alerts-danger-base);
2994
- }
2995
- .form-group--error .form-control[type=radio], .form-group--error .form-control[type=checkbox] {
2996
- box-shadow: none;
2997
- }
2998
- .form-group--error .form-control[type=radio] + label, .form-group--error .form-control[type=checkbox] + label {
2999
- color: var(--op-color-alerts-danger-minus-three);
3000
- font-weight: var(--op-font-weight-bold);
3001
- }
3002
- .form-group--error .form-control:hover:not(:disabled, [readonly]) {
3003
- background-color: var(--op-color-alerts-danger-plus-seven);
3004
- box-shadow: var(--op-border-all) var(--op-color-alerts-danger-minus-two);
3005
- color: var(--op-color-alerts-danger-on-plus-seven);
3006
- }
3007
- .form-group--error .form-control[readonly] {
3008
- box-shadow: none;
3009
- }
3010
- .form-group--error .form-control:focus-visible:not([readonly]) {
3011
- background-color: var(--op-color-alerts-danger-plus-seven);
3012
- box-shadow: var(--op-input-focus-danger);
3013
- color: var(--op-color-alerts-danger-on-plus-seven);
3014
- }
3015
- .form-group--error .form-control.form-control--no-border {
3016
- border-radius: 0;
3017
- box-shadow: var(--op-border-bottom) var(--op-color-alerts-danger-base);
3018
- }
3019
- .form-group--error .form-control.form-control--no-border[readonly] {
3020
- box-shadow: none;
3021
- }
3022
- .form-group--error .form-control.form-control--no-border:focus-visible:not([readonly]) {
3023
- background-color: var(--op-color-alerts-danger-plus-seven);
3024
- box-shadow: var(--op-border-bottom) var(--op-color-alerts-danger-base);
3025
- color: var(--op-color-alerts-danger-on-plus-seven);
3026
- }
3027
- .form-group--error .form-control.form-control--no-border:hover:not(:disabled, [readonly]) {
3028
- background-color: var(--op-color-alerts-danger-plus-eight);
3029
- box-shadow: var(--op-border-bottom) var(--op-color-alerts-danger-base);
3030
- color: var(--op-color-alerts-danger-on-plus-eight);
3001
+ .form-label {
3002
+ color: var(--op-color-on-background);
3003
+ font-size: var(--op-font-x-small);
3004
+ font-weight: var(--op-font-weight-normal);
3005
+ letter-spacing: var(--op-letter-spacing-label);
3006
+ line-height: var(--op-line-height-base);
3031
3007
  }
3032
3008
 
3033
3009
  .form-error {
@@ -3045,59 +3021,114 @@ textarea.form-control:not([type=radio], [type=checkbox]) {
3045
3021
  .form-error-summary {
3046
3022
  padding: var(--op-space-large);
3047
3023
  border-radius: var(--op-radius-large);
3048
- margin-bottom: var(--op-space-large);
3049
3024
  background-color: var(--op-color-alerts-danger-plus-seven);
3050
3025
  box-shadow: var(--op-border-all) var(--op-color-alerts-danger-on-plus-seven);
3051
3026
  color: var(--op-color-alerts-danger-on-plus-seven);
3052
- }
3053
- .form-error-summary h2 {
3054
- font-size: var(--op-font-medium);
3055
- }
3056
- .form-error-summary ul {
3057
- margin-bottom: 0;
3027
+ margin-block-end: var(--op-space-large);
3028
+ h2 {
3029
+ font-size: var(--op-font-medium);
3030
+ }
3031
+ ul {
3032
+ margin-block-end: 0;
3033
+ }
3058
3034
  }
3059
3035
 
3060
3036
  .form-group {
3061
3037
  display: grid;
3062
3038
  align-content: baseline;
3063
- padding: var(--op-space-small) 0;
3064
3039
  gap: var(--op-space-x-small);
3065
3040
  grid-auto-rows: auto;
3066
3041
  grid-template-columns: auto 1fr;
3042
+ padding-block: var(--op-space-small) 0;
3043
+ padding-inline: 0;
3044
+ /* Group Alignment */
3067
3045
  /* stylelint-disable no-descending-specificity */
3046
+ .form-label,
3047
+ .form-error,
3048
+ .form-hint,
3049
+ .form-control:not([type=radio], [type=checkbox]) {
3050
+ grid-column: 1/3;
3051
+ }
3068
3052
  /* stylelint-enable no-descending-specificity */
3069
- }
3070
- .form-group .form-label,
3071
- .form-group .form-error,
3072
- .form-group .form-hint,
3073
- .form-group .form-control:not([type=radio], [type=checkbox]) {
3074
- grid-column: 1/3;
3075
- }
3076
- .form-group .form-control[type=radio],
3077
- .form-group .form-control[type=checkbox] {
3078
- grid-column: 1/1;
3079
- }
3080
- .form-group .form-control[type=radio] + .form-label,
3081
- .form-group .form-control[type=checkbox] + .form-label {
3082
- grid-column: 2/3;
3083
- grid-row: 1;
3053
+ .form-control[type=radio],
3054
+ .form-control[type=checkbox] {
3055
+ grid-column: 1/1;
3056
+ & + .form-label {
3057
+ grid-column: 2/3;
3058
+ grid-row: 1;
3059
+ }
3060
+ }
3084
3061
  }
3085
3062
 
3086
3063
  .form-group--inline {
3087
3064
  align-items: center;
3065
+ /* Group Alignment */
3088
3066
  /* stylelint-disable no-descending-specificity */
3067
+ .form-label {
3068
+ grid-column: unset;
3069
+ }
3070
+ .form-error,
3071
+ .form-hint {
3072
+ grid-column: 1/3;
3073
+ }
3074
+ .form-control:not([type=radio], [type=checkbox]),
3075
+ .switch {
3076
+ grid-column: unset;
3077
+ }
3089
3078
  /* stylelint-enable no-descending-specificity */
3090
3079
  }
3091
- .form-group--inline .form-label {
3092
- grid-column: unset;
3093
- }
3094
- .form-group--inline .form-error,
3095
- .form-group--inline .form-hint {
3096
- grid-column: 1/3;
3097
- }
3098
- .form-group--inline .form-control:not([type=radio], [type=checkbox]),
3099
- .form-group--inline .switch {
3100
- grid-column: unset;
3080
+
3081
+ .form-group--error {
3082
+ /* stylelint-disable no-descending-specificity */
3083
+ .form-control {
3084
+ box-shadow: var(--op-border-all) var(--op-color-alerts-danger-base);
3085
+ &[type=radio],
3086
+ &[type=checkbox] {
3087
+ box-shadow: none;
3088
+ & + label {
3089
+ color: var(--op-color-alerts-danger-minus-three);
3090
+ font-weight: var(--op-font-weight-bold);
3091
+ }
3092
+ }
3093
+ /* Error + Hover State */
3094
+ &:hover:not(:disabled, [readonly]) {
3095
+ background-color: var(--op-color-alerts-danger-plus-seven);
3096
+ box-shadow: var(--op-border-all) var(--op-color-alerts-danger-minus-two);
3097
+ color: var(--op-color-alerts-danger-on-plus-seven);
3098
+ }
3099
+ /* Readonly State */
3100
+ &[readonly] {
3101
+ box-shadow: none;
3102
+ }
3103
+ /* Error + Focus State */
3104
+ &:focus-visible:not([readonly]) {
3105
+ background-color: var(--op-color-alerts-danger-plus-seven);
3106
+ box-shadow: var(--op-input-focus-danger);
3107
+ color: var(--op-color-alerts-danger-on-plus-seven);
3108
+ }
3109
+ /* Borderless State */
3110
+ &.form-control--no-border {
3111
+ border-radius: 0;
3112
+ box-shadow: var(--op-border-bottom) var(--op-color-alerts-danger-base);
3113
+ /* Readonly State */
3114
+ &[readonly] {
3115
+ box-shadow: none;
3116
+ }
3117
+ /* Borderless + Focus State */
3118
+ &:focus-visible:not([readonly]) {
3119
+ background-color: var(--op-color-alerts-danger-plus-seven);
3120
+ box-shadow: var(--op-border-bottom) var(--op-color-alerts-danger-base);
3121
+ color: var(--op-color-alerts-danger-on-plus-seven);
3122
+ }
3123
+ /* Borderless + Hover State */
3124
+ &:hover:not(:disabled, [readonly]) {
3125
+ background-color: var(--op-color-alerts-danger-plus-eight);
3126
+ box-shadow: var(--op-border-bottom) var(--op-color-alerts-danger-base);
3127
+ color: var(--op-color-alerts-danger-on-plus-eight);
3128
+ }
3129
+ }
3130
+ }
3131
+ /* stylelint-enable no-descending-specificity */
3101
3132
  }
3102
3133
 
3103
3134
  .material-symbols-outlined,
@@ -3132,7 +3163,7 @@ textarea.form-control:not([type=radio], [type=checkbox]) {
3132
3163
  --op-mso-weight: var(--op-font-weight-semi-bold);
3133
3164
  }
3134
3165
 
3135
- .icon--weight-bold, .sidebar-primary .sidebar__content > * .material-symbols-outlined, .sidebar .sidebar__content > * .material-symbols-outlined {
3166
+ .icon--weight-bold {
3136
3167
  --op-mso-weight: var(--op-font-weight-bold);
3137
3168
  }
3138
3169
 
@@ -3153,7 +3184,7 @@ textarea.form-control:not([type=radio], [type=checkbox]) {
3153
3184
  --op-mso-optical-sizing: 20;
3154
3185
  }
3155
3186
 
3156
- .icon--large, .sidebar-primary .sidebar__content > * .material-symbols-outlined, .sidebar .sidebar__content > * .material-symbols-outlined {
3187
+ .icon--large {
3157
3188
  font-size: var(--op-font-large);
3158
3189
  --op-mso-optical-sizing: 40;
3159
3190
  }
@@ -3172,7 +3203,7 @@ textarea.form-control:not([type=radio], [type=checkbox]) {
3172
3203
  font-size: var(--op-font-small);
3173
3204
  --op-mso-optical-sizing: 20;
3174
3205
  }
3175
- .custom-icons.icon--large, .sidebar-primary .sidebar__content > * .custom-icons.material-symbols-outlined, .sidebar .sidebar__content > * .custom-icons.material-symbols-outlined {
3206
+ .custom-icons.icon--large {
3176
3207
  width: var(--op-font-large);
3177
3208
  height: var(--op-font-large);
3178
3209
  }
@@ -3387,21 +3418,27 @@ dialog.modal {
3387
3418
  }
3388
3419
  }
3389
3420
 
3390
- .sidebar-primary, .sidebar {
3421
+ .sidebar {
3422
+ /* Public API (customizable component options) */
3423
+ /* Normal */
3391
3424
  --_op-sidebar-background-color: var(--op-color-neutral-plus-eight);
3392
3425
  --_op-sidebar-text-color: var(--op-color-neutral-on-plus-eight);
3393
3426
  --_op-sidebar-border-color: var(--op-color-neutral-plus-four);
3394
- --_op-sidebar-rail-width: calc(22 * var(--op-size-unit));
3395
- --_op-sidebar-compact-width: calc(42 * var(--op-size-unit));
3396
- --_op-sidebar-drawer-width: calc(54 * var(--op-size-unit));
3397
- --_op-sidebar-rail-brand-width: calc(19 * var(--op-size-unit));
3398
- --_op-sidebar-compact-brand-width: calc(24 * var(--op-size-unit));
3399
- --_op-sidebar-drawer-brand-width: calc(24 * var(--op-size-unit));
3427
+ /* Width */
3428
+ --_op-sidebar-rail-width: calc(22 * var(--op-size-unit)); /* 88px */
3429
+ --_op-sidebar-compact-width: calc(42 * var(--op-size-unit)); /* 168px */
3430
+ --_op-sidebar-drawer-width: calc(54 * var(--op-size-unit)); /* 216px */
3431
+ --_op-sidebar-rail-brand-width: calc(19 * var(--op-size-unit)); /* 76px */
3432
+ --_op-sidebar-compact-brand-width: calc(24 * var(--op-size-unit)); /* 96px */
3433
+ --_op-sidebar-drawer-brand-width: calc(24 * var(--op-size-unit)); /* 96px */
3434
+ /* Spacing */
3400
3435
  --_op-sidebar-spacing: calc(var(--op-space-2x-large) + var(--op-space-2x-small));
3401
3436
  --_op-sidebar-brand-spacing: var(--op-space-medium);
3402
3437
  --_op-sidebar-content-spacing: var(--op-space-x-small);
3403
3438
  --_op-sidebar-content-item-spacing: var(--op-space-2x-small);
3439
+ /* Animation */
3404
3440
  --_op-sidebar-transition: var(--op-transition-sidebar);
3441
+ /* Private API (component option defaults) */
3405
3442
  --__op-sidebar-width: var(--_op-sidebar-drawer-width);
3406
3443
  --__op-sidebar-brand-width: var(--_op-sidebar-drawer-brand-width);
3407
3444
  z-index: var(--op-z-index-sidebar);
@@ -3414,135 +3451,89 @@ dialog.modal {
3414
3451
  color: var(--_op-sidebar-text-color);
3415
3452
  overflow-y: auto;
3416
3453
  transition: var(--_op-sidebar-transition);
3417
- }
3418
- .sidebar-primary .sidebar__brand, .sidebar .sidebar__brand {
3419
- height: var(--__op-sidebar-brand-width);
3420
- padding: var(--_op-sidebar-brand-spacing);
3421
- margin: 0 auto;
3422
- }
3423
- .sidebar-primary .sidebar__brand img, .sidebar .sidebar__brand img {
3424
- height: 100%;
3425
- }
3426
- .sidebar-primary .sidebar__content, .sidebar .sidebar__content {
3427
- display: flex;
3428
- flex-direction: column;
3429
- flex-grow: 1;
3430
- padding: 0 var(--_op-sidebar-content-spacing);
3431
- gap: var(--_op-sidebar-content-item-spacing);
3432
- }
3433
- .sidebar-primary .sidebar__content > *, .sidebar .sidebar__content > * {
3434
- justify-content: flex-start;
3435
- }
3436
- .sidebar-primary .sidebar__content > * .material-symbols-outlined, .sidebar .sidebar__content > * .material-symbols-outlined {
3437
- /* stylelint-disable scss/at-extend-no-missing-placeholder */
3438
- /* stylelint-enable scss/at-extend-no-missing-placeholder */
3439
- }
3440
- .sidebar-primary .sidebar__content.sidebar__content--start, .sidebar .sidebar__content.sidebar__content--start {
3441
- justify-content: start;
3442
- }
3443
- .sidebar-primary .sidebar__content.sidebar__content--center, .sidebar .sidebar__content.sidebar__content--center {
3444
- justify-content: center;
3445
- }
3446
- .sidebar-primary .sidebar__content.sidebar__content--end, .sidebar .sidebar__content.sidebar__content--end {
3447
- justify-content: end;
3448
- }
3449
- .sidebar--padded.sidebar-primary, .sidebar--padded.sidebar {
3450
- padding: var(--_op-sidebar-spacing) 0;
3451
- }
3452
- .sidebar--drawer.sidebar-primary:not(.sidebar--responsive), .sidebar--drawer.sidebar:not(.sidebar--responsive) {
3453
- --__op-sidebar-width: var(--_op-sidebar-drawer-width);
3454
- --__op-sidebar-brand-width: var(--_op-sidebar-drawer-brand-width);
3455
- }
3456
- @media (width > 1024px) {
3457
- .sidebar--drawer.sidebar--responsive.sidebar-primary, .sidebar--drawer.sidebar--responsive.sidebar {
3458
- --__op-sidebar-width: var(--_op-sidebar-drawer-width);
3459
- --__op-sidebar-brand-width: var(--_op-sidebar-drawer-brand-width);
3454
+ /* Elements */
3455
+ .sidebar__brand {
3456
+ height: var(--__op-sidebar-brand-width);
3457
+ padding: var(--_op-sidebar-brand-spacing);
3458
+ margin-inline: auto;
3459
+ img {
3460
+ height: 100%;
3461
+ }
3460
3462
  }
3461
- }
3462
- @media (width <= 1024px) {
3463
- .sidebar--drawer.sidebar--responsive.sidebar-primary, .sidebar--drawer.sidebar--responsive.sidebar {
3464
- --__op-sidebar-width: var(--_op-sidebar-rail-width);
3465
- --__op-sidebar-brand-width: var(--_op-sidebar-rail-brand-width);
3463
+ .sidebar__content {
3464
+ display: flex;
3465
+ flex-direction: column;
3466
+ flex-grow: 1;
3467
+ gap: var(--_op-sidebar-content-item-spacing);
3468
+ padding-inline: var(--_op-sidebar-content-spacing);
3469
+ > * {
3470
+ justify-content: flex-start;
3471
+ .material-symbols-outlined {
3472
+ --op-mso-optical-sizing: 40;
3473
+ --op-mso-weight: var(--op-font-weight-bold);
3474
+ font-size: var(--op-font-large);
3475
+ }
3476
+ }
3477
+ &.sidebar__content--start {
3478
+ justify-content: start;
3479
+ }
3480
+ &.sidebar__content--center {
3481
+ justify-content: center;
3482
+ }
3483
+ &.sidebar__content--end {
3484
+ justify-content: end;
3485
+ }
3466
3486
  }
3467
- .sidebar--drawer.sidebar--responsive.sidebar-primary .sidebar__content, .sidebar--drawer.sidebar--responsive.sidebar .sidebar__content {
3468
- align-items: center;
3487
+ /* Modifiers */
3488
+ &.sidebar--padded {
3489
+ padding-block: var(--_op-sidebar-spacing);
3469
3490
  }
3470
- .sidebar--drawer.sidebar--responsive.sidebar-primary .sidebar__content > *, .sidebar--drawer.sidebar--responsive.sidebar .sidebar__content > * {
3471
- width: var(--__op-btn-height);
3472
- min-width: var(--__op-btn-height);
3473
- justify-content: center;
3474
- padding: 0;
3475
- font-size: 0;
3476
- gap: 0;
3491
+ /* Drawer Modifier */
3492
+ &.sidebar--drawer {
3493
+ /* Private API */
3494
+ --__op-sidebar-width: var(--_op-sidebar-drawer-width);
3495
+ --__op-sidebar-brand-width: var(--_op-sidebar-drawer-brand-width);
3477
3496
  }
3478
- }
3479
- .sidebar--compact.sidebar-primary:not(.sidebar--responsive), .sidebar--compact.sidebar:not(.sidebar--responsive) {
3480
- --__op-sidebar-width: var(--_op-sidebar-compact-width);
3481
- --__op-sidebar-brand-width: var(--_op-sidebar-compact-brand-width);
3482
- }
3483
- .sidebar--compact.sidebar-primary:not(.sidebar--responsive) .sidebar__content > *, .sidebar--compact.sidebar:not(.sidebar--responsive) .sidebar__content > * {
3484
- flex-direction: column;
3485
- padding: var(--op-space-small);
3486
- gap: var(--op-space-3x-small);
3487
- }
3488
- @media (width > 1024px) {
3489
- .sidebar--compact.sidebar--responsive.sidebar-primary, .sidebar--compact.sidebar--responsive.sidebar {
3497
+ /* Compact Modifier */
3498
+ &.sidebar--compact {
3499
+ /* Private API (component option defaults) */
3490
3500
  --__op-sidebar-width: var(--_op-sidebar-compact-width);
3491
3501
  --__op-sidebar-brand-width: var(--_op-sidebar-compact-brand-width);
3502
+ /* Elements */
3503
+ .sidebar__content {
3504
+ > * {
3505
+ /* Need to get icon-with-label behavior */
3506
+ flex-direction: column;
3507
+ padding: var(--op-space-small);
3508
+ gap: var(--op-space-3x-small);
3509
+ }
3510
+ }
3492
3511
  }
3493
- .sidebar--compact.sidebar--responsive.sidebar-primary .sidebar__content > *, .sidebar--compact.sidebar--responsive.sidebar .sidebar__content > * {
3494
- flex-direction: column;
3495
- padding: var(--op-space-small);
3496
- gap: var(--op-space-3x-small);
3497
- }
3498
- }
3499
- @media (width <= 1024px) {
3500
- .sidebar--compact.sidebar--responsive.sidebar-primary, .sidebar--compact.sidebar--responsive.sidebar {
3512
+ &.sidebar--rail {
3513
+ /* Private API (component option defaults) */
3501
3514
  --__op-sidebar-width: var(--_op-sidebar-rail-width);
3502
3515
  --__op-sidebar-brand-width: var(--_op-sidebar-rail-brand-width);
3516
+ /* Elements */
3517
+ .sidebar__content {
3518
+ align-items: center;
3519
+ > * {
3520
+ /* Need to get icon behavior */
3521
+ width: var(--__op-btn-height);
3522
+ min-width: var(--__op-btn-height);
3523
+ justify-content: center;
3524
+ padding: 0;
3525
+ font-size: 0;
3526
+ gap: 0;
3527
+ }
3528
+ }
3503
3529
  }
3504
- .sidebar--compact.sidebar--responsive.sidebar-primary .sidebar__content, .sidebar--compact.sidebar--responsive.sidebar .sidebar__content {
3505
- align-items: center;
3506
- }
3507
- .sidebar--compact.sidebar--responsive.sidebar-primary .sidebar__content > *, .sidebar--compact.sidebar--responsive.sidebar .sidebar__content > * {
3508
- width: var(--__op-btn-height);
3509
- min-width: var(--__op-btn-height);
3510
- justify-content: center;
3511
- padding: 0;
3512
- font-size: 0;
3513
- gap: 0;
3530
+ /* Primary */
3531
+ .sidebar--primary {
3532
+ --_op-sidebar-background-color: var(--op-color-primary-plus-six);
3533
+ --_op-sidebar-text-color: var(--op-color-primary-on-plus-six);
3534
+ --_op-sidebar-border-color: var(--op-color-primary-plus-four);
3514
3535
  }
3515
3536
  }
3516
- .sidebar--rail.sidebar-primary, .sidebar--rail.sidebar {
3517
- --__op-sidebar-width: var(--_op-sidebar-rail-width);
3518
- --__op-sidebar-brand-width: var(--_op-sidebar-rail-brand-width);
3519
- }
3520
- .sidebar--rail.sidebar-primary .sidebar__content, .sidebar--rail.sidebar .sidebar__content {
3521
- align-items: center;
3522
- }
3523
- .sidebar--rail.sidebar-primary .sidebar__content > *, .sidebar--rail.sidebar .sidebar__content > * {
3524
- width: var(--__op-btn-height);
3525
- min-width: var(--__op-btn-height);
3526
- justify-content: center;
3527
- padding: 0;
3528
- font-size: 0;
3529
- gap: 0;
3530
- }
3531
- .sidebar--compact.sidebar-primary, .sidebar--compact.sidebar {
3532
- --__op-sidebar-width: var(--_op-sidebar-compact-width);
3533
- --__op-sidebar-brand-width: var(--_op-sidebar-compact-brand-width);
3534
- }
3535
- .sidebar--compact.sidebar-primary .sidebar__content > *, .sidebar--compact.sidebar .sidebar__content > * {
3536
- flex-direction: column;
3537
- padding: var(--op-space-small);
3538
- gap: var(--op-space-3x-small);
3539
- }
3540
-
3541
- .sidebar-primary {
3542
- --_op-sidebar-background-color: var(--op-color-primary-plus-six);
3543
- --_op-sidebar-text-color: var(--op-color-primary-on-plus-six);
3544
- --_op-sidebar-border-color: var(--op-color-primary-plus-four);
3545
- }
3546
3537
 
3547
3538
  .side-panel {
3548
3539
  /* Public API (customizable component options) */