@kushagradhawan/kookie-ui 0.1.26 → 0.1.28

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 (52) hide show
  1. package/components.css +183 -44
  2. package/dist/cjs/components/grid.props.d.ts +36 -0
  3. package/dist/cjs/components/grid.props.d.ts.map +1 -1
  4. package/dist/cjs/components/grid.props.js +1 -1
  5. package/dist/cjs/components/grid.props.js.map +3 -3
  6. package/dist/cjs/components/scroll-area.js.map +1 -1
  7. package/dist/cjs/components/sidebar.d.ts +1 -1
  8. package/dist/cjs/components/sidebar.d.ts.map +1 -1
  9. package/dist/cjs/components/sidebar.js +1 -1
  10. package/dist/cjs/components/sidebar.js.map +2 -2
  11. package/dist/cjs/components/sidebar.props.d.ts +2 -2
  12. package/dist/cjs/components/sidebar.props.js +1 -1
  13. package/dist/cjs/components/sidebar.props.js.map +2 -2
  14. package/dist/cjs/props/layout.props.d.ts +34 -0
  15. package/dist/cjs/props/layout.props.d.ts.map +1 -1
  16. package/dist/cjs/props/layout.props.js +1 -1
  17. package/dist/cjs/props/layout.props.js.map +3 -3
  18. package/dist/esm/components/grid.props.d.ts +36 -0
  19. package/dist/esm/components/grid.props.d.ts.map +1 -1
  20. package/dist/esm/components/grid.props.js +1 -1
  21. package/dist/esm/components/grid.props.js.map +3 -3
  22. package/dist/esm/components/scroll-area.js.map +1 -1
  23. package/dist/esm/components/sidebar.d.ts +1 -1
  24. package/dist/esm/components/sidebar.d.ts.map +1 -1
  25. package/dist/esm/components/sidebar.js +1 -1
  26. package/dist/esm/components/sidebar.js.map +2 -2
  27. package/dist/esm/components/sidebar.props.d.ts +2 -2
  28. package/dist/esm/components/sidebar.props.js +1 -1
  29. package/dist/esm/components/sidebar.props.js.map +2 -2
  30. package/dist/esm/props/layout.props.d.ts +34 -0
  31. package/dist/esm/props/layout.props.d.ts.map +1 -1
  32. package/dist/esm/props/layout.props.js +1 -1
  33. package/dist/esm/props/layout.props.js.map +3 -3
  34. package/layout/utilities.css +366 -12
  35. package/layout.css +366 -12
  36. package/package.json +1 -1
  37. package/src/components/grid.props.tsx +58 -0
  38. package/src/components/scroll-area.tsx +2 -2
  39. package/src/components/sidebar.css +260 -66
  40. package/src/components/sidebar.props.tsx +2 -2
  41. package/src/components/sidebar.tsx +2 -2
  42. package/src/props/layout.props.ts +38 -0
  43. package/src/styles/tokens/radius.css +1 -1
  44. package/src/styles/utilities/align-content.css +33 -0
  45. package/src/styles/utilities/align-self.css +2 -2
  46. package/src/styles/utilities/justify-items.css +21 -0
  47. package/src/styles/utilities/justify-self.css +21 -0
  48. package/src/styles/utilities/layout.css +3 -0
  49. package/styles.css +550 -57
  50. package/tokens/base.css +1 -1
  51. package/tokens.css +1 -1
  52. package/utilities.css +366 -12
@@ -75,7 +75,7 @@
75
75
  flex: 1;
76
76
  }
77
77
 
78
- .rt-SidebarContainer:where(.rt-variant-surface) {
78
+ .rt-SidebarContainer:where(.rt-variant-outline) {
79
79
  background-color: var(--color-panel);
80
80
  backdrop-filter: var(--backdrop-filter-panel);
81
81
 
@@ -303,7 +303,7 @@
303
303
  border: none;
304
304
  width: 100%;
305
305
  text-align: left;
306
- border-radius: var(--radius-2); /* Will be overridden by size-specific radius */
306
+ /* No default border radius - inherited from size-specific rules */
307
307
 
308
308
  /* Transitions - inherit from base menu */
309
309
  transition: var(--transition-menu);
@@ -580,9 +580,6 @@
580
580
  }
581
581
  }
582
582
 
583
- .rt-SidebarGroupContent {
584
- /* No styling - purely semantic container */
585
- }
586
583
 
587
584
  /***************************************************************************************************
588
585
  * *
@@ -627,6 +624,7 @@
627
624
  line-height: var(--line-height-1);
628
625
  letter-spacing: var(--letter-spacing-1);
629
626
  border-radius: var(--radius-1);
627
+ font-weight: var(--font-weight-medium); /* Add this line */
630
628
 
631
629
  /* stylelint-disable-next-line selector-max-type */
632
630
  & :where(svg) {
@@ -652,6 +650,8 @@
652
650
  line-height: var(--line-height-2);
653
651
  letter-spacing: var(--letter-spacing-2);
654
652
  border-radius: var(--radius-2);
653
+ font-weight: var(--font-weight-medium); /* Add this line */
654
+
655
655
 
656
656
  /* stylelint-disable-next-line selector-max-type */
657
657
  & :where(svg) {
@@ -710,15 +710,65 @@
710
710
  --backdrop-filter-components: blur(var(--backdrop-blur-components));
711
711
  }
712
712
  }
713
- }
713
+ &:where(.rt-variant-surface) {
714
+ /* Base state: neutral gray background (maintains sidebar neutrality) */
715
+ background-color: var(--gray-1);
716
+
717
+ /* Theme-level translucent override */
718
+ :where([data-panel-background='translucent']) & {
719
+ background-color: var(--gray-a1);
720
+ backdrop-filter: var(--backdrop-filter-panel);
721
+ }
714
722
 
715
- /* Floating shadows - only for ghost variant */
716
- .rt-SidebarContainer:where(.rt-variant-ghost) {
717
- :where(.rt-SidebarRoot[data-type="floating"]) & {
718
- box-shadow: var(--shadow-4);
723
+ /* Component-level overrides (higher specificity) */
724
+ &:where([data-panel-background='solid']) {
725
+ background-color: var(--gray-1);
726
+ backdrop-filter: none;
727
+ --backdrop-filter-panel: none;
728
+ --backdrop-filter-components: none;
729
+ }
730
+
731
+ &:where([data-panel-background='translucent']) {
732
+ background-color: var(--gray-a1);
733
+ backdrop-filter: var(--backdrop-filter-panel);
734
+ --backdrop-filter-panel: blur(var(--backdrop-blur-panel));
735
+ --backdrop-filter-components: blur(var(--backdrop-blur-components));
736
+ }
737
+
738
+ /* Inset border like Card surface variant */
739
+ /* Floating sidebars get full inset border */
740
+ :where(.rt-SidebarRoot[data-type="floating"]) & {
741
+ box-shadow: inset 0 0 0 1px var(--gray-6);
742
+
743
+ /* Theme-level translucent override */
744
+ :where([data-panel-background='translucent']) & {
745
+ box-shadow: inset 0 0 0 1px var(--gray-a6);
746
+ }
747
+ }
748
+
749
+ /* Non-floating sidebars get border only on the content-facing side */
750
+ :where(.rt-SidebarRoot[data-type="sidebar"][data-side="left"]) & {
751
+ box-shadow: inset -1px 0 0 0 var(--gray-6);
752
+
753
+ /* Theme-level translucent override */
754
+ :where([data-panel-background='translucent']) & {
755
+ box-shadow: inset -1px 0 0 0 var(--gray-a6);
756
+ }
757
+ }
758
+
759
+ :where(.rt-SidebarRoot[data-type="sidebar"][data-side="right"]) & {
760
+ box-shadow: inset 1px 0 0 0 var(--gray-6);
761
+
762
+ /* Theme-level translucent override */
763
+ :where([data-panel-background='translucent']) & {
764
+ box-shadow: inset 1px 0 0 0 var(--gray-a6);
765
+ }
766
+ }
719
767
  }
720
768
  }
721
769
 
770
+ /* Ghost variant should have no shadows or background - it's truly transparent */
771
+
722
772
  /* Menu Button Variants - Independent of Container */
723
773
 
724
774
  /* Menu Variant: Solid - EXACT match to base menu */
@@ -975,75 +1025,233 @@
975
1025
  }
976
1026
  }
977
1027
 
978
- /* Ensure menu items inherit proper theming and spacing for sidebar */
1028
+ /* Add balanced spacing for sidebar menu items while preserving base menu border radius */
979
1029
  .rt-SidebarContent :where(.rt-BaseMenuItem) {
980
- border-radius: var(--radius-2);
981
- margin-bottom: var(--space-1);
1030
+ margin-top: calc(var(--space-1) / 2);
1031
+ margin-bottom: calc(var(--space-1) / 2);
982
1032
  }
983
1033
 
984
- /* Collapsible behavior - INSTANT TOGGLE APPROACH */
1034
+ /* Collapsible behavior - ICON-ONLY MODE APPROACH */
985
1035
  .rt-SidebarRoot:where([data-collapsible="icon"]) {
986
1036
  /* No transitions - instant state changes for better UX */
987
1037
  transition: none;
988
- overflow: hidden; /* Prevent content from spilling out when width is 0 */
1038
+ overflow: visible; /* Allow content to be visible */
989
1039
  flex-shrink: 0; /* Don't let flex container shrink this */
990
1040
  }
991
1041
 
992
- /* Exception: floating ghost sidebars need visible overflow for shadows */
993
- .rt-SidebarContainer:where(.rt-variant-ghost[data-collapsible="icon"][data-type="floating"]) {
994
- overflow: visible !important; /* Allow shadows to show - override the hidden overflow */
1042
+ /* Icon-only width - size-specific space tokens */
1043
+ :where(.radix-themes) {
1044
+ --sidebar-icon-width-1: calc(var(--space-9) + var(--space-1)); /* Size 1: 36px */
1045
+ --sidebar-icon-width-2: calc(var(--space-9) + var(--space-3)); /* Size 2: 76px */
995
1046
  }
996
1047
 
997
- /* Collapsed state - instant width change, no layout escape */
1048
+ /* Icon-only collapsed state - show narrow sidebar with icons only */
998
1049
  .rt-SidebarRoot:where([data-collapsible="icon"][data-state="collapsed"]) {
999
- width: 0;
1000
- min-width: 0; /* Allow width to go to 0 */
1001
- opacity: 0; /* Hide content for accessibility */
1002
- pointer-events: none; /* Disable interactions */
1003
- /* Keep in layout flow - no position changes */
1050
+ opacity: 1; /* Keep visible */
1051
+ pointer-events: auto; /* Keep interactive */
1052
+
1053
+ /* Size-specific widths */
1054
+ &:where(.rt-r-size-1) {
1055
+ width: var(--sidebar-icon-width-1);
1056
+ min-width: var(--sidebar-icon-width-1);
1057
+ }
1058
+
1059
+ &:where(.rt-r-size-2) {
1060
+ width: var(--sidebar-icon-width-2);
1061
+ min-width: var(--sidebar-icon-width-2);
1062
+ }
1004
1063
  }
1005
1064
 
1006
- /* Expanded state */
1065
+ /* Expanded state - full width */
1007
1066
  .rt-SidebarRoot:where([data-collapsible="icon"][data-state="expanded"]) {
1008
1067
  width: var(--sidebar-width);
1009
- min-width: var(--sidebar-width); /* Prevent shrinking */
1068
+ min-width: var(--sidebar-width);
1010
1069
  opacity: 1;
1011
1070
  pointer-events: auto;
1012
1071
  }
1013
1072
 
1014
- /* Container locking for stable layouts */
1073
+ /* Container sizing for icon mode */
1074
+ .rt-SidebarContainer:where([data-collapsible="icon"]) {
1075
+ /* Allow dynamic width based on state */
1076
+ width: 100%;
1077
+ min-width: 0;
1078
+ flex-shrink: 0;
1079
+ }
1080
+
1081
+ /* Content adjustments for icon mode */
1082
+ .rt-SidebarContent:where([data-collapsible="icon"]) {
1083
+ /* Allow content to shrink in icon mode */
1084
+ width: 100%;
1085
+ min-width: 0;
1086
+ flex-shrink: 0;
1087
+ }
1088
+
1089
+ /* Hide text content in collapsed icon mode */
1015
1090
  .rt-SidebarRoot:where([data-collapsible="icon"][data-state="collapsed"]) {
1016
- /* Ensure the collapsed sidebar doesn't affect sibling layout */
1017
- flex-basis: 0;
1018
- width: 0;
1091
+ /* Style menu buttons for icon-only mode */
1092
+ & :where(.rt-SidebarMenuButton) {
1093
+ justify-content: center;
1094
+ flex-direction: column;
1095
+ padding: var(--space-2) var(--space-1);
1096
+ gap: var(--space-1);
1097
+ min-height: auto;
1098
+
1099
+ /* Show text spans as small labels under icons */
1100
+ /* stylelint-disable-next-line selector-max-type */
1101
+ & :where(span) {
1102
+ display: block;
1103
+ font-size: var(--font-size-0);
1104
+ line-height: var(--line-height-0);
1105
+ color: var(--gray-a10);
1106
+ text-align: center;
1107
+ font-weight: var(--font-weight-medium);
1108
+ max-width: 100%;
1109
+ overflow: hidden;
1110
+ text-overflow: ellipsis;
1111
+ white-space: nowrap;
1112
+ }
1113
+ }
1114
+
1115
+ /* ------------------------------------------------------------------------------------------ */
1116
+ /* Dynamic width calculation for labels inside collapsed icon sidebar */
1117
+ /* ------------------------------------------------------------------------------------------ */
1118
+
1119
+ /* Compute usable label width based on sidebar icon width minus menu and item paddings */
1120
+ &:where(.rt-r-size-1) {
1121
+ /* Group labels (no button padding) */
1122
+ --sidebar-group-label-width: calc(var(--sidebar-icon-width-1) - (var(--space-2) * 2));
1123
+ /* Button labels (inside menu buttons, subtract button padding) */
1124
+ --sidebar-button-label-width: calc(var(--sidebar-group-label-width) - (var(--space-1) * 2));
1125
+ }
1126
+
1127
+ &:where(.rt-r-size-2) {
1128
+ --sidebar-group-label-width: calc(var(--sidebar-icon-width-2) - (var(--space-2) * 2));
1129
+ --sidebar-button-label-width: calc(var(--sidebar-group-label-width) - (var(--space-1) * 2));
1130
+ }
1131
+
1132
+ /* Apply the computed width to both group labels and the spans inside icon buttons */
1133
+ & :where(.rt-SidebarGroupLabel) {
1134
+ max-width: var(--sidebar-group-label-width);
1135
+ }
1136
+
1137
+ /* stylelint-disable-next-line selector-max-type */
1138
+ & :where(.rt-SidebarMenuButton span) {
1139
+ max-width: var(--sidebar-button-label-width);
1140
+ min-width: 0; /* allow shrinking */
1141
+ overflow: hidden;
1142
+ text-overflow: ellipsis;
1143
+ white-space: nowrap;
1144
+ color: var(--gray-a12);
1145
+ font-weight: var(--font-weight-medium);
1146
+ }
1147
+
1148
+ /* stylelint-disable selector-max-type, selector-max-specificity */
1149
+ &.rt-menu-variant-solid :where(.rt-SidebarMenuButton[data-highlighted] span),
1150
+ &.rt-menu-variant-solid :where(.rt-SidebarMenuButton[data-active] span) {
1151
+ color: var(--accent-contrast) !important;
1152
+ }
1153
+
1154
+ /* stylelint-enable selector-max-type, selector-max-specificity */
1155
+
1156
+ /* Size-specific overrides no longer needed – allow full width */
1157
+ /* The general label/span rules below already handle ellipsis and overflow */
1158
+
1159
+ /* Show group labels as small text instead of separators */
1160
+ :where(.rt-SidebarGroupLabel) {
1161
+ /* Use block display to make text-overflow ellipsis work reliably */
1162
+ display: block;
1163
+ text-align: center;
1164
+ min-width: 0;
1165
+ min-height: auto; /* Remove inherited min-height constraint */
1166
+ max-width: var(--sidebar-group-label-width);
1167
+ font-size: var(--font-size-0);
1168
+ line-height: var(--line-height-0);
1169
+ color: var(--gray-a9);
1170
+ font-weight: var(--font-weight-medium);
1171
+ padding: var(--space-1) var(--space-1);
1172
+ margin: var(--space-2) 0 var(--space-1) 0;
1173
+ overflow: hidden;
1174
+ text-overflow: ellipsis;
1175
+ white-space: nowrap;
1176
+
1177
+ /* Hide label for the first group if you prefer */
1178
+ :where(.rt-SidebarGroup:first-child) & {
1179
+ margin-top: 0;
1180
+ }
1181
+ }
1182
+
1183
+ /* Hide badges and shortcuts */
1184
+ :where(.rt-SidebarMenuBadge),
1185
+ :where(.rt-SidebarMenuShortcut) {
1186
+ display: none;
1187
+ }
1188
+
1189
+ /* Keep sub-menu trigger icons hidden in icon mode, but preserve accordion functionality */
1190
+ :where(.rt-SidebarMenuSubTriggerIcon) {
1191
+ display: none;
1192
+ }
1193
+
1194
+ /* Remove nested styling from sub-menu list to make items look like top-level */
1195
+ :where(.rt-SidebarMenuSubList) {
1196
+ padding-left: 0; /* Remove indentation */
1197
+ border-left: none; /* Remove border */
1198
+ margin-left: 0; /* Remove margin */
1199
+ }
1200
+
1201
+ /* Tighter menu padding for icon-only mode */
1202
+ :where(.rt-SidebarMenu) {
1203
+ padding: var(--space-2);
1204
+ }
1019
1205
  }
1020
1206
 
1021
- .rt-SidebarRoot:where([data-collapsible="icon"][data-state="expanded"]) {
1022
- flex-basis: var(--sidebar-width);
1023
- width: var(--sidebar-width);
1207
+ /* Icon size remapping for collapsed state - make icons more prominent */
1208
+ .rt-SidebarRoot:where([data-collapsible="icon"][data-state="collapsed"]) {
1209
+ /* Size 1 → use much larger icons (size 3 equivalent) */
1210
+ &:where(.rt-r-size-1) {
1211
+ /* stylelint-disable-next-line selector-max-type */
1212
+ & :where(.rt-SidebarMenuButton svg) {
1213
+ width: var(--content-icon-size-2) !important; /* ~19px instead of ~14px */
1214
+ height: var(--content-icon-size-2) !important;
1215
+ color: currentColor !important; /* Ensure icon color is visible */
1216
+ }
1217
+ }
1218
+
1219
+ /* Size 2 → use largest icons (size 4 equivalent) */
1220
+ &:where(.rt-r-size-2) {
1221
+ /* stylelint-disable-next-line selector-max-type */
1222
+ & :where(.rt-SidebarMenuButton svg) {
1223
+ width: var(--content-icon-size-3) !important; /* 20px instead of 16px */
1224
+ height: var(--content-icon-size-3) !important;
1225
+ color: currentColor !important; /* Ensure icon color is visible */
1226
+ }
1227
+ }
1024
1228
  }
1025
1229
 
1026
- /* Floating sidebars: Similar approach but can fully hide */
1230
+ /* Floating sidebars in icon mode */
1027
1231
  .rt-SidebarRoot:where([data-collapsible="icon"][data-type="floating"]) {
1028
1232
  /* Same instant approach */
1029
1233
  transition: none;
1030
- overflow: hidden; /* Default: prevent spillover */
1234
+ overflow: visible; /* Allow content to be visible outside container */
1031
1235
  flex-shrink: 0;
1032
1236
  }
1033
1237
 
1034
- /* Exception: floating ghost sidebars need visible overflow for shadows */
1035
- .rt-SidebarRoot:where([data-collapsible="icon"][data-type="floating"]:has(.rt-variant-ghost)) {
1036
- overflow: visible; /* Allow shadows to show */
1037
- }
1038
-
1039
- /* Collapsed state - instant width change, no layout escape */
1040
- .rt-SidebarRoot:where([data-collapsible="icon"][data-state="collapsed"]) {
1041
- width: 0;
1042
- min-width: 0;
1043
- opacity: 0;
1044
- pointer-events: none;
1045
- /* For floating, we can add margin to create visual separation when expanded */
1046
- margin: 0;
1238
+ /* Floating collapsed state */
1239
+ .rt-SidebarRoot:where([data-collapsible="icon"][data-type="floating"][data-state="collapsed"]) {
1240
+ opacity: 1;
1241
+ pointer-events: auto;
1242
+ /* Keep floating margins but adjust for smaller width */
1243
+ margin: var(--space-2);
1244
+
1245
+ /* Size-specific widths */
1246
+ &:where(.rt-r-size-1) {
1247
+ width: var(--sidebar-icon-width-1);
1248
+ min-width: var(--sidebar-icon-width-1);
1249
+ }
1250
+
1251
+ &:where(.rt-r-size-2) {
1252
+ width: var(--sidebar-icon-width-2);
1253
+ min-width: var(--sidebar-icon-width-2);
1254
+ }
1047
1255
  }
1048
1256
 
1049
1257
  .rt-SidebarRoot:where([data-collapsible="icon"][data-type="floating"][data-state="expanded"]) {
@@ -1053,31 +1261,17 @@
1053
1261
  pointer-events: auto;
1054
1262
  /* Restore floating margins */
1055
1263
  margin: var(--space-2);
1056
- /* Remove the width override - let margin work naturally */
1057
- }
1058
-
1059
- /* Content protection - prevent internal reflow */
1060
- .rt-SidebarContainer:where([data-collapsible="icon"]) {
1061
- /* Lock the content size to prevent internal shifting */
1062
- width: var(--sidebar-width);
1063
- min-width: var(--sidebar-width);
1064
- flex-shrink: 0;
1065
1264
  }
1066
1265
 
1067
- .rt-SidebarContent:where([data-collapsible="icon"]) {
1068
- /* Prevent content from reflowing */
1069
- width: 100%;
1070
- min-width: var(--sidebar-width);
1071
- flex-shrink: 0;
1072
- }
1266
+ /* Ghost sidebars have no shadows or background, so no special overflow handling needed */
1073
1267
 
1074
- /* Mobile responsive behavior - hide completely */
1268
+ /* Mobile responsive behavior - hide completely on mobile regardless of icon mode */
1075
1269
  @media (max-width: 768px) {
1076
- .rt-SidebarRoot {
1270
+ .rt-SidebarRoot:where([data-collapsible="icon"]) {
1077
1271
  display: none;
1078
1272
  }
1079
1273
 
1080
- .rt-SidebarRoot:where([data-state="expanded"]) {
1274
+ .rt-SidebarRoot:where([data-collapsible="icon"][data-state="expanded"]) {
1081
1275
  display: flex;
1082
1276
  position: fixed;
1083
1277
  top: 0;
@@ -14,7 +14,7 @@ export {
14
14
 
15
15
  // Sidebar container props
16
16
  const sizes = ['1', '2'] as const;
17
- const variants = ['soft', 'surface', 'ghost'] as const;
17
+ const variants = ['soft', 'outline', 'surface', 'ghost'] as const;
18
18
  const menuVariants = ['solid', 'soft'] as const;
19
19
  const types = ['sidebar', 'floating'] as const;
20
20
  const sides = ['left', 'right'] as const;
@@ -23,7 +23,7 @@ const collapsibleModes = ['offcanvas', 'icon', 'none'] as const;
23
23
  const sidebarPropDefs = {
24
24
  ...asChildPropDef,
25
25
  size: { type: 'enum', className: 'rt-r-size', values: sizes, default: '2', responsive: true },
26
- variant: { type: 'enum', className: 'rt-variant', values: variants, default: 'surface' },
26
+ variant: { type: 'enum', className: 'rt-variant', values: variants, default: 'outline' },
27
27
  menuVariant: {
28
28
  type: 'enum',
29
29
  className: 'rt-menu-variant',
@@ -40,7 +40,7 @@ type SidebarContextProps = {
40
40
  toggleSidebar: () => void;
41
41
  side: 'left' | 'right';
42
42
  type: 'sidebar' | 'floating';
43
- variant: 'soft' | 'surface' | 'ghost';
43
+ variant: 'soft' | 'outline' | 'surface' | 'ghost';
44
44
  menuVariant: 'solid' | 'soft';
45
45
  collapsible: 'offcanvas' | 'icon' | 'none';
46
46
  size: '1' | '2';
@@ -298,7 +298,7 @@ const SidebarContent = React.forwardRef<HTMLDivElement, SidebarContentProps>(
298
298
  } = context || {};
299
299
 
300
300
  return (
301
- <ScrollArea type="auto">
301
+ <ScrollArea type="hover">
302
302
  <div
303
303
  {...props}
304
304
  ref={forwardedRef}
@@ -10,6 +10,8 @@ const positionValues = ['static', 'relative', 'absolute', 'fixed', 'sticky'] as
10
10
  const positionEdgeValues = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '-1', '-2', '-3', '-4', '-5', '-6', '-7', '-8', '-9'] as const;
11
11
  const flexShrinkValues = ['0', '1'] as const;
12
12
  const flexGrowValues = ['0', '1'] as const;
13
+ const alignSelfValues = ['start', 'center', 'end', 'baseline', 'stretch'] as const;
14
+ const justifySelfValues = ['start', 'center', 'end', 'baseline', 'stretch'] as const;
13
15
 
14
16
  const layoutPropDefs = {
15
17
  ...paddingPropDefs,
@@ -358,6 +360,40 @@ const layoutPropDefs = {
358
360
  customProperties: ['--grid-row-end'],
359
361
  responsive: true,
360
362
  },
363
+ /**
364
+ * Sets the CSS **align-self** property.
365
+ * Supports a subset of the corresponding CSS values and responsive objects.
366
+ *
367
+ * @example
368
+ * alignSelf="center"
369
+ * alignSelf={{ sm: 'start', lg: 'center' }}
370
+ *
371
+ * @link
372
+ * https://developer.mozilla.org/en-US/docs/Web/CSS/align-self
373
+ */
374
+ alignSelf: {
375
+ type: 'enum',
376
+ className: 'rt-r-as',
377
+ values: alignSelfValues,
378
+ responsive: true,
379
+ },
380
+ /**
381
+ * Sets the CSS **justify-self** property.
382
+ * Supports a subset of the corresponding CSS values and responsive objects.
383
+ *
384
+ * @example
385
+ * justifySelf="center"
386
+ * justifySelf={{ sm: 'start', lg: 'center' }}
387
+ *
388
+ * @link
389
+ * https://developer.mozilla.org/en-US/docs/Web/CSS/justify-self
390
+ */
391
+ justifySelf: {
392
+ type: 'enum',
393
+ className: 'rt-r-js',
394
+ values: justifySelfValues,
395
+ responsive: true,
396
+ },
361
397
  } satisfies {
362
398
  position: PropDef<(typeof positionValues)[number]>;
363
399
  inset: PropDef<(typeof positionEdgeValues)[number]>;
@@ -378,6 +414,8 @@ const layoutPropDefs = {
378
414
  gridRowStart: PropDef<string>;
379
415
  gridRowEnd: PropDef<string>;
380
416
  gridArea: PropDef<string>;
417
+ alignSelf: PropDef<(typeof alignSelfValues)[number]>;
418
+ justifySelf: PropDef<(typeof justifySelfValues)[number]>;
381
419
  };
382
420
 
383
421
  // Use all of the imported prop defs to ensure that JSDoc works
@@ -1,5 +1,5 @@
1
1
  [data-radius] {
2
- --radius-1: calc(8px * var(--scaling) * var(--radius-factor));
2
+ --radius-1: calc(7px * var(--scaling) * var(--radius-factor));
3
3
  --radius-2: calc(10px * var(--scaling) * var(--radius-factor));
4
4
  --radius-3: calc(12px * var(--scaling) * var(--radius-factor));
5
5
  --radius-4: calc(14px * var(--scaling) * var(--radius-factor));
@@ -0,0 +1,33 @@
1
+ @breakpoints {
2
+ .rt-r-ac-start {
3
+ align-content: start;
4
+ }
5
+
6
+ .rt-r-ac-center {
7
+ align-content: center;
8
+ }
9
+
10
+ .rt-r-ac-end {
11
+ align-content: end;
12
+ }
13
+
14
+ .rt-r-ac-baseline {
15
+ align-content: baseline;
16
+ }
17
+
18
+ .rt-r-ac-stretch {
19
+ align-content: stretch;
20
+ }
21
+
22
+ .rt-r-ac-space-between {
23
+ align-content: space-between;
24
+ }
25
+
26
+ .rt-r-ac-space-around {
27
+ align-content: space-around;
28
+ }
29
+
30
+ .rt-r-ac-space-evenly {
31
+ align-content: space-evenly;
32
+ }
33
+ }
@@ -1,6 +1,6 @@
1
1
  @breakpoints {
2
2
  .rt-r-as-start {
3
- align-self: flex-start;
3
+ align-self: start;
4
4
  }
5
5
 
6
6
  .rt-r-as-center {
@@ -8,7 +8,7 @@
8
8
  }
9
9
 
10
10
  .rt-r-as-end {
11
- align-self: flex-end;
11
+ align-self: end;
12
12
  }
13
13
 
14
14
  .rt-r-as-baseline {
@@ -0,0 +1,21 @@
1
+ @breakpoints {
2
+ .rt-r-ji-start {
3
+ justify-items: start;
4
+ }
5
+
6
+ .rt-r-ji-center {
7
+ justify-items: center;
8
+ }
9
+
10
+ .rt-r-ji-end {
11
+ justify-items: end;
12
+ }
13
+
14
+ .rt-r-ji-baseline {
15
+ justify-items: baseline;
16
+ }
17
+
18
+ .rt-r-ji-stretch {
19
+ justify-items: stretch;
20
+ }
21
+ }
@@ -0,0 +1,21 @@
1
+ @breakpoints {
2
+ .rt-r-js-start {
3
+ justify-self: start;
4
+ }
5
+
6
+ .rt-r-js-center {
7
+ justify-self: center;
8
+ }
9
+
10
+ .rt-r-js-end {
11
+ justify-self: end;
12
+ }
13
+
14
+ .rt-r-js-baseline {
15
+ justify-self: baseline;
16
+ }
17
+
18
+ .rt-r-js-stretch {
19
+ justify-self: stretch;
20
+ }
21
+ }
@@ -1,5 +1,6 @@
1
1
  @import '../breakpoints.css';
2
2
 
3
+ @import './align-content.css';
3
4
  @import './align-items.css';
4
5
  @import './align-self.css';
5
6
  @import './display.css';
@@ -25,6 +26,8 @@
25
26
  @import './max-height.css';
26
27
  @import './inset.css';
27
28
  @import './justify-content.css';
29
+ @import './justify-items.css';
30
+ @import './justify-self.css';
28
31
  @import './margin.css';
29
32
  @import './overflow.css';
30
33
  @import './padding.css';