@12-apps/ui 6.45.6 → 6.46.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 (248) hide show
  1. package/dist/_internal/components/data-display/Badge/Badge.js +6 -6
  2. package/dist/_internal/components/data-display/Badge/Badge.styles.js +4 -4
  3. package/dist/_internal/components/data-display/Badge/BadgeContent.js +5 -5
  4. package/dist/_internal/components/data-display/Carousel/Carousel.chrome.js +5 -5
  5. package/dist/_internal/components/data-display/Carousel/Carousel.js +7 -7
  6. package/dist/_internal/components/data-display/Carousel/Carousel.parts.js +4 -4
  7. package/dist/_internal/components/data-display/Carousel/Carousel.styles.js +4 -4
  8. package/dist/_internal/components/data-display/Chart/Chart.js +7 -7
  9. package/dist/_internal/components/data-display/Chart/SpecChart.js +8 -8
  10. package/dist/_internal/components/data-display/Chart/chart-context.js +5 -5
  11. package/dist/_internal/components/data-display/Chart/chart-internals.js +4 -4
  12. package/dist/_internal/components/data-display/Chart/chart-renderers.js +6 -6
  13. package/dist/_internal/components/data-display/DataGrid/DataGrid.js +4 -4
  14. package/dist/_internal/components/data-display/DataGrid/DataGrid.model.js +3 -3
  15. package/dist/_internal/components/data-display/DataViews/DataViewsGrid.js +14 -14
  16. package/dist/_internal/components/data-display/DataViews/DataViewsTableBase.js +15 -15
  17. package/dist/_internal/components/data-display/DataViews/base-list-card-geometry.js +6 -6
  18. package/dist/_internal/components/data-display/DataViews/base-list-card-slots.js +5 -5
  19. package/dist/_internal/components/data-display/DataViews/base-list-card.js +7 -7
  20. package/dist/_internal/components/data-display/DataViews/data-views-display-panel.js +5 -5
  21. package/dist/_internal/components/data-display/DataViews/data-views-display-tabs.js +4 -4
  22. package/dist/_internal/components/data-display/DataViews/data-views-grid-bodies.js +7 -7
  23. package/dist/_internal/components/data-display/DataViews/data-views-grid-parts.js +13 -13
  24. package/dist/_internal/components/data-display/DataViews/data-views-layout-context.js +3 -3
  25. package/dist/_internal/components/data-display/DataViews/data-views-scope-tabs.js +4 -4
  26. package/dist/_internal/components/data-display/DataViews/data-views-shell-toolbar.js +7 -7
  27. package/dist/_internal/components/data-display/DataViews/data-views-toolbar.js +6 -6
  28. package/dist/_internal/components/data-display/DataViews/list-card-rails.js +4 -4
  29. package/dist/_internal/components/data-display/FleetMap/FleetMap.js +5 -5
  30. package/dist/_internal/components/data-display/Sheet/Sheet.body.js +3 -3
  31. package/dist/_internal/components/data-display/Sheet/Sheet.js +5 -5
  32. package/dist/_internal/components/data-display/Sheet/Sheet.styles.js +4 -4
  33. package/dist/_internal/components/data-display/Table/Table.js +3 -3
  34. package/dist/_internal/components/data-display/index.js +22 -22
  35. package/dist/_internal/components/form/Command/Command.js +5 -5
  36. package/dist/_internal/components/form/Command/Command.styles.js +4 -4
  37. package/dist/_internal/components/form/Label/Label.js +5 -5
  38. package/dist/_internal/components/form/Label/Label.styles.js +4 -4
  39. package/dist/_internal/components/form/Menubar/Menubar.item.js +5 -5
  40. package/dist/_internal/components/form/Menubar/Menubar.js +7 -7
  41. package/dist/_internal/components/form/Menubar/Menubar.styles.js +4 -4
  42. package/dist/_internal/components/form/Menubar/Menubar.toolbar.js +6 -6
  43. package/dist/_internal/components/form/RadioGroup/RadioGroup.js +4 -2
  44. package/dist/_internal/components/form/RadioGroup/RadioGroup.variants.js +3 -1
  45. package/dist/_internal/components/form/index.js +13 -13
  46. package/dist/_internal/components/index.js +48 -48
  47. package/dist/_internal/components/layout/Box/Box.js +6 -6
  48. package/dist/_internal/components/layout/SettingCard/SettingCard.js +8 -8
  49. package/dist/_internal/components/layout/SettingCard/SettingCard.parts.js +7 -7
  50. package/dist/_internal/components/layout/SettingCard/SettingGrid.js +8 -8
  51. package/dist/_internal/components/layout/SettingCard/SettingGroup.js +10 -10
  52. package/dist/_internal/components/layout/SettingCard/SettingSwitch.js +9 -9
  53. package/dist/_internal/components/layout/SettingCard/SettingToggle.js +10 -10
  54. package/dist/_internal/components/layout/Stack/Stack.js +7 -7
  55. package/dist/_internal/components/layout/index.js +13 -13
  56. package/dist/_internal/components/navigation/AppHeader/AppHeader.details.js +6 -6
  57. package/dist/_internal/components/navigation/AppHeader/AppHeader.identity.js +4 -4
  58. package/dist/_internal/components/navigation/SectionNav/SectionNav.bar.js +10 -10
  59. package/dist/_internal/components/navigation/SectionNav/SectionNav.js +12 -12
  60. package/dist/_internal/components/navigation/SectionNav/SectionNav.parts.js +7 -7
  61. package/dist/_internal/components/navigation/SectionNav/SectionNav.primary.js +8 -8
  62. package/dist/_internal/components/navigation/SectionNav/SectionNav.rail.js +8 -8
  63. package/dist/_internal/components/navigation/SectionNav/SectionNav.sheet.js +8 -8
  64. package/dist/_internal/components/navigation/SectionNav/__stories__/fixtures.js +3 -3
  65. package/dist/_internal/components/navigation/index.js +16 -16
  66. package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.helpers.js +3 -3
  67. package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.js +3 -3
  68. package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.parts.js +3 -3
  69. package/dist/_internal/components/utility/WorkflowStep/WorkflowStepRow.js +3 -3
  70. package/dist/_internal/components/utility/index.js +3 -3
  71. package/dist/_internal/icons/Icon.js +6 -6
  72. package/dist/_internal/provider/UiProvider.js +5 -5
  73. package/dist/_internal/provider/mui-bridge.js +4 -4
  74. package/dist/_internal/provider/use-ui-theme.js +5 -5
  75. package/dist/_internal/tokens/density-overrides.js +7 -3
  76. package/dist/_internal/tokens/density.js +2 -2
  77. package/dist/charts.js +8 -8
  78. package/dist/{chunk-RNVR3RGV.js → chunk-25OI5W6Y.js} +2 -2
  79. package/dist/{chunk-GHJ2FIJO.js → chunk-4A7PSQB5.js} +3 -3
  80. package/dist/{chunk-YF3VD2KD.js → chunk-4CBM7JNK.js} +2 -2
  81. package/dist/{chunk-L3APNYI5.js → chunk-56QYSVLI.js} +4 -4
  82. package/dist/chunk-5D52CMNX.js +127 -0
  83. package/dist/chunk-5D52CMNX.js.map +1 -0
  84. package/dist/{chunk-5OS5AMC2.js → chunk-5OX6KZIZ.js} +2 -2
  85. package/dist/{chunk-PJVZY2SA.js → chunk-6MN5KOVM.js} +2 -2
  86. package/dist/{chunk-ITBUKGG3.js → chunk-6VKHS2BB.js} +2 -2
  87. package/dist/{chunk-RPKWTFJ2.js → chunk-7PUSFB3T.js} +2 -2
  88. package/dist/{chunk-6OLJ2RAT.js → chunk-AA7QTFMB.js} +2 -2
  89. package/dist/{chunk-H7HEB4UC.js → chunk-AEJ3FFNE.js} +2 -2
  90. package/dist/{chunk-HDVEE4NQ.js → chunk-BIDPJNCG.js} +12 -8
  91. package/dist/chunk-BIDPJNCG.js.map +1 -0
  92. package/dist/{chunk-QGB3DOMV.js → chunk-BU6TCB76.js} +2 -2
  93. package/dist/{chunk-UHGQ74E3.js → chunk-BWURMQWZ.js} +2 -2
  94. package/dist/{chunk-SENCNTMV.js → chunk-BWXPO2SE.js} +3 -3
  95. package/dist/{chunk-6ZWOVUNB.js → chunk-CACBJ4CR.js} +2 -2
  96. package/dist/{chunk-2OP2FYB3.js → chunk-CJPP4OUK.js} +2 -2
  97. package/dist/{chunk-Q5J37WOE.js → chunk-DWG5SEGW.js} +2 -2
  98. package/dist/{chunk-6HTCCWUM.js → chunk-E32YPPF5.js} +2 -2
  99. package/dist/{chunk-A7OQBAR7.js → chunk-E4GTZ26X.js} +2 -2
  100. package/dist/{chunk-Y4ET3NRC.js → chunk-EKWH4LGM.js} +2 -2
  101. package/dist/{chunk-KNAWZM7F.js → chunk-F56VOHFW.js} +2 -2
  102. package/dist/{chunk-IXWIJCS3.js → chunk-H5XKBPKK.js} +2 -2
  103. package/dist/{chunk-SJY4DDG7.js → chunk-HAFLKWWU.js} +2 -2
  104. package/dist/{chunk-TCFBCTZD.js → chunk-HC2AO3RT.js} +2 -2
  105. package/dist/{chunk-CU7ELD43.js → chunk-HISEWACT.js} +2 -2
  106. package/dist/{chunk-XHA2NXLD.js → chunk-HSKLX2NO.js} +2 -2
  107. package/dist/{chunk-FTV5R2UZ.js → chunk-I2STNAIQ.js} +2 -2
  108. package/dist/{chunk-K7PWC44N.js → chunk-J2JWWGMT.js} +4 -4
  109. package/dist/{chunk-YKALXHCS.js → chunk-JTWRI4WD.js} +5 -5
  110. package/dist/{chunk-JWNOM5QT.js → chunk-JUKA4NY5.js} +2 -2
  111. package/dist/{chunk-PSX7DAMV.js → chunk-KYQ4OORF.js} +3 -3
  112. package/dist/{chunk-L6Q2A32O.js → chunk-LQRUTHJY.js} +2 -2
  113. package/dist/{chunk-SRZY6QG3.js → chunk-LTJDZIYR.js} +4 -4
  114. package/dist/{chunk-HYEOKBFV.js → chunk-LUPHXDEU.js} +2 -2
  115. package/dist/{chunk-HAPELHNW.js → chunk-LV2SZFXK.js} +3 -3
  116. package/dist/{chunk-JFL5WT3S.js → chunk-MEYKNJNI.js} +3 -3
  117. package/dist/{chunk-BUAFRLSB.js → chunk-N2XQKTXX.js} +3 -3
  118. package/dist/{chunk-4MGUBSAL.js → chunk-N4HHFYPB.js} +2 -2
  119. package/dist/{chunk-XLQYOBHP.js → chunk-NFTFP6WO.js} +4 -4
  120. package/dist/{chunk-XTDJ2D5A.js → chunk-NRKAJHBB.js} +2 -2
  121. package/dist/{chunk-4T5LD2NV.js → chunk-P2OQ4IGP.js} +2 -2
  122. package/dist/{chunk-O25RFGPX.js → chunk-P3XEF26U.js} +2 -2
  123. package/dist/{chunk-MW7S7WZM.js → chunk-PIUQYYOM.js} +2 -2
  124. package/dist/{chunk-FHWXRHMA.js → chunk-QFJ3JXXP.js} +1 -1
  125. package/dist/{chunk-FHWXRHMA.js.map → chunk-QFJ3JXXP.js.map} +1 -1
  126. package/dist/{chunk-EJMSSDLM.js → chunk-QL7NPQOP.js} +3 -3
  127. package/dist/{chunk-VDSQ5H4Y.js → chunk-QQUNZH3L.js} +2 -2
  128. package/dist/{chunk-PUYJVQ7X.js → chunk-RBLBXJR7.js} +2 -2
  129. package/dist/{chunk-OERKNBKK.js → chunk-RSQYWGMU.js} +2 -2
  130. package/dist/{chunk-VOBVYVPN.js → chunk-RVOYCPKF.js} +2 -2
  131. package/dist/{chunk-LHHV6NXO.js → chunk-RZPYKTOG.js} +2 -2
  132. package/dist/{chunk-6H4TPEMO.js → chunk-SDWOWB6F.js} +6 -1
  133. package/dist/chunk-SDWOWB6F.js.map +1 -0
  134. package/dist/{chunk-CSXK7LH7.js → chunk-ST36ZSAN.js} +2 -2
  135. package/dist/{chunk-6LYRFS5S.js → chunk-T6HVNVFI.js} +2 -2
  136. package/dist/{chunk-2GG5W6LR.js → chunk-TMOC2XUE.js} +8 -4
  137. package/dist/chunk-TMOC2XUE.js.map +1 -0
  138. package/dist/{chunk-SOCZLOPJ.js → chunk-VOG5IVQW.js} +2 -2
  139. package/dist/{chunk-YDIRPKYI.js → chunk-WDQRQIT7.js} +2 -2
  140. package/dist/{chunk-VVFV4MXS.js → chunk-WGNLG2W2.js} +2 -2
  141. package/dist/{chunk-PKXCQKPB.js → chunk-XFAXRMWY.js} +3 -3
  142. package/dist/{chunk-G6T7KRQ3.js → chunk-YDU2YPQA.js} +3 -3
  143. package/dist/{chunk-KRA75CKC.js → chunk-Z3L2EGXW.js} +2 -2
  144. package/dist/{chunk-3WCUGTRH.js → chunk-ZCEXSYAJ.js} +4 -4
  145. package/dist/{chunk-EOKPFMJD.js → chunk-ZCXVTFYQ.js} +2 -2
  146. package/dist/{chunk-PNWGQAXQ.js → chunk-ZL3GCUKC.js} +2 -2
  147. package/dist/{chunk-RPFQQP5S.js → chunk-ZRIWMIHK.js} +2 -2
  148. package/dist/data-display/Badge.js +6 -6
  149. package/dist/data-display/Carousel.js +7 -7
  150. package/dist/data-display/Chart.js +8 -8
  151. package/dist/data-display/DataGrid.js +4 -4
  152. package/dist/data-display/DataViews.js +18 -18
  153. package/dist/data-display/FleetMap.js +5 -5
  154. package/dist/data-display/Sheet.js +5 -5
  155. package/dist/data-display/Table.js +3 -3
  156. package/dist/form/Command.js +5 -5
  157. package/dist/form/Label.js +5 -5
  158. package/dist/form/Menubar.js +7 -7
  159. package/dist/form/RadioGroup.js +4 -2
  160. package/dist/icons.js +6 -6
  161. package/dist/layout/Box.js +6 -6
  162. package/dist/layout/SettingCard.js +13 -13
  163. package/dist/layout/Stack.js +7 -7
  164. package/dist/navigation/AppHeader.js +7 -7
  165. package/dist/navigation/SectionNav.js +12 -12
  166. package/dist/provider.js +6 -6
  167. package/dist/tokens.js +8 -4
  168. package/dist/types/components/form/RadioGroup/RadioGroup.variants.d.ts.map +1 -1
  169. package/dist/types/provider/mui-bridge.d.ts.map +1 -1
  170. package/dist/types/tokens/density-overrides.d.ts +14 -0
  171. package/dist/types/tokens/density-overrides.d.ts.map +1 -1
  172. package/dist/types/tokens/density.d.ts +10 -7
  173. package/dist/types/tokens/density.d.ts.map +1 -1
  174. package/dist/types/tokens/scales.d.ts +1 -1
  175. package/dist/types/tokens/scales.d.ts.map +1 -1
  176. package/dist/utility/WorkflowStep.js +3 -3
  177. package/package.json +1 -1
  178. package/src/components/form/RadioGroup/RadioGroup.variants.tsx +11 -0
  179. package/src/components/form/Switch/Switch.md +26 -0
  180. package/src/provider/mui-bridge.ts +11 -4
  181. package/src/tokens/density-overrides.ts +208 -1
  182. package/src/tokens/density.ts +18 -8
  183. package/src/tokens/scales.ts +9 -3
  184. package/dist/chunk-2GG5W6LR.js.map +0 -1
  185. package/dist/chunk-532XOWZ5.js +0 -59
  186. package/dist/chunk-532XOWZ5.js.map +0 -1
  187. package/dist/chunk-6H4TPEMO.js.map +0 -1
  188. package/dist/chunk-HDVEE4NQ.js.map +0 -1
  189. /package/dist/{chunk-RNVR3RGV.js.map → chunk-25OI5W6Y.js.map} +0 -0
  190. /package/dist/{chunk-GHJ2FIJO.js.map → chunk-4A7PSQB5.js.map} +0 -0
  191. /package/dist/{chunk-YF3VD2KD.js.map → chunk-4CBM7JNK.js.map} +0 -0
  192. /package/dist/{chunk-L3APNYI5.js.map → chunk-56QYSVLI.js.map} +0 -0
  193. /package/dist/{chunk-5OS5AMC2.js.map → chunk-5OX6KZIZ.js.map} +0 -0
  194. /package/dist/{chunk-PJVZY2SA.js.map → chunk-6MN5KOVM.js.map} +0 -0
  195. /package/dist/{chunk-ITBUKGG3.js.map → chunk-6VKHS2BB.js.map} +0 -0
  196. /package/dist/{chunk-RPKWTFJ2.js.map → chunk-7PUSFB3T.js.map} +0 -0
  197. /package/dist/{chunk-6OLJ2RAT.js.map → chunk-AA7QTFMB.js.map} +0 -0
  198. /package/dist/{chunk-H7HEB4UC.js.map → chunk-AEJ3FFNE.js.map} +0 -0
  199. /package/dist/{chunk-QGB3DOMV.js.map → chunk-BU6TCB76.js.map} +0 -0
  200. /package/dist/{chunk-UHGQ74E3.js.map → chunk-BWURMQWZ.js.map} +0 -0
  201. /package/dist/{chunk-SENCNTMV.js.map → chunk-BWXPO2SE.js.map} +0 -0
  202. /package/dist/{chunk-6ZWOVUNB.js.map → chunk-CACBJ4CR.js.map} +0 -0
  203. /package/dist/{chunk-2OP2FYB3.js.map → chunk-CJPP4OUK.js.map} +0 -0
  204. /package/dist/{chunk-Q5J37WOE.js.map → chunk-DWG5SEGW.js.map} +0 -0
  205. /package/dist/{chunk-6HTCCWUM.js.map → chunk-E32YPPF5.js.map} +0 -0
  206. /package/dist/{chunk-A7OQBAR7.js.map → chunk-E4GTZ26X.js.map} +0 -0
  207. /package/dist/{chunk-Y4ET3NRC.js.map → chunk-EKWH4LGM.js.map} +0 -0
  208. /package/dist/{chunk-KNAWZM7F.js.map → chunk-F56VOHFW.js.map} +0 -0
  209. /package/dist/{chunk-IXWIJCS3.js.map → chunk-H5XKBPKK.js.map} +0 -0
  210. /package/dist/{chunk-SJY4DDG7.js.map → chunk-HAFLKWWU.js.map} +0 -0
  211. /package/dist/{chunk-TCFBCTZD.js.map → chunk-HC2AO3RT.js.map} +0 -0
  212. /package/dist/{chunk-CU7ELD43.js.map → chunk-HISEWACT.js.map} +0 -0
  213. /package/dist/{chunk-XHA2NXLD.js.map → chunk-HSKLX2NO.js.map} +0 -0
  214. /package/dist/{chunk-FTV5R2UZ.js.map → chunk-I2STNAIQ.js.map} +0 -0
  215. /package/dist/{chunk-K7PWC44N.js.map → chunk-J2JWWGMT.js.map} +0 -0
  216. /package/dist/{chunk-YKALXHCS.js.map → chunk-JTWRI4WD.js.map} +0 -0
  217. /package/dist/{chunk-JWNOM5QT.js.map → chunk-JUKA4NY5.js.map} +0 -0
  218. /package/dist/{chunk-PSX7DAMV.js.map → chunk-KYQ4OORF.js.map} +0 -0
  219. /package/dist/{chunk-L6Q2A32O.js.map → chunk-LQRUTHJY.js.map} +0 -0
  220. /package/dist/{chunk-SRZY6QG3.js.map → chunk-LTJDZIYR.js.map} +0 -0
  221. /package/dist/{chunk-HYEOKBFV.js.map → chunk-LUPHXDEU.js.map} +0 -0
  222. /package/dist/{chunk-HAPELHNW.js.map → chunk-LV2SZFXK.js.map} +0 -0
  223. /package/dist/{chunk-JFL5WT3S.js.map → chunk-MEYKNJNI.js.map} +0 -0
  224. /package/dist/{chunk-BUAFRLSB.js.map → chunk-N2XQKTXX.js.map} +0 -0
  225. /package/dist/{chunk-4MGUBSAL.js.map → chunk-N4HHFYPB.js.map} +0 -0
  226. /package/dist/{chunk-XLQYOBHP.js.map → chunk-NFTFP6WO.js.map} +0 -0
  227. /package/dist/{chunk-XTDJ2D5A.js.map → chunk-NRKAJHBB.js.map} +0 -0
  228. /package/dist/{chunk-4T5LD2NV.js.map → chunk-P2OQ4IGP.js.map} +0 -0
  229. /package/dist/{chunk-O25RFGPX.js.map → chunk-P3XEF26U.js.map} +0 -0
  230. /package/dist/{chunk-MW7S7WZM.js.map → chunk-PIUQYYOM.js.map} +0 -0
  231. /package/dist/{chunk-EJMSSDLM.js.map → chunk-QL7NPQOP.js.map} +0 -0
  232. /package/dist/{chunk-VDSQ5H4Y.js.map → chunk-QQUNZH3L.js.map} +0 -0
  233. /package/dist/{chunk-PUYJVQ7X.js.map → chunk-RBLBXJR7.js.map} +0 -0
  234. /package/dist/{chunk-OERKNBKK.js.map → chunk-RSQYWGMU.js.map} +0 -0
  235. /package/dist/{chunk-VOBVYVPN.js.map → chunk-RVOYCPKF.js.map} +0 -0
  236. /package/dist/{chunk-LHHV6NXO.js.map → chunk-RZPYKTOG.js.map} +0 -0
  237. /package/dist/{chunk-CSXK7LH7.js.map → chunk-ST36ZSAN.js.map} +0 -0
  238. /package/dist/{chunk-6LYRFS5S.js.map → chunk-T6HVNVFI.js.map} +0 -0
  239. /package/dist/{chunk-SOCZLOPJ.js.map → chunk-VOG5IVQW.js.map} +0 -0
  240. /package/dist/{chunk-YDIRPKYI.js.map → chunk-WDQRQIT7.js.map} +0 -0
  241. /package/dist/{chunk-VVFV4MXS.js.map → chunk-WGNLG2W2.js.map} +0 -0
  242. /package/dist/{chunk-PKXCQKPB.js.map → chunk-XFAXRMWY.js.map} +0 -0
  243. /package/dist/{chunk-G6T7KRQ3.js.map → chunk-YDU2YPQA.js.map} +0 -0
  244. /package/dist/{chunk-KRA75CKC.js.map → chunk-Z3L2EGXW.js.map} +0 -0
  245. /package/dist/{chunk-3WCUGTRH.js.map → chunk-ZCEXSYAJ.js.map} +0 -0
  246. /package/dist/{chunk-EOKPFMJD.js.map → chunk-ZCXVTFYQ.js.map} +0 -0
  247. /package/dist/{chunk-PNWGQAXQ.js.map → chunk-ZL3GCUKC.js.map} +0 -0
  248. /package/dist/{chunk-RPFQQP5S.js.map → chunk-ZRIWMIHK.js.map} +0 -0
@@ -1,7 +1,8 @@
1
1
  import { chipClasses } from '@mui/material/Chip/index.js';
2
+ import { switchClasses } from '@mui/material/Switch/index.js';
2
3
  import type { Components, CSSObject, Theme } from '@mui/material/styles/index.js';
3
4
 
4
- import { rem } from './relative';
5
+ import { rem, rems } from './relative';
5
6
 
6
7
  /** The `ownerState` fields `MuiChip`'s two styled slots (root, label) both receive. */
7
8
  interface ChipOwnerStateForOverrides {
@@ -175,3 +176,209 @@ export function chipDensityOverrides(): Components<Theme> {
175
176
  },
176
177
  };
177
178
  }
179
+
180
+ /**
181
+ * CHECKBOX / RADIO / SWITCH GEOMETRY, DENSITY-AWARE (FUT-2767).
182
+ *
183
+ * `Checkbox`/`Radio`/`Switch` are MUI's own components, unwrapped — but
184
+ * **only two of the three `@12-apps/ui` wrappers actually forward their
185
+ * geometry to MUI**, corrected here after an earlier revision of this doc
186
+ * comment claimed all three did.
187
+ *
188
+ * - `Checkbox.tsx`'s `StyledCheckbox` and `RadioGroup.variants.tsx`'s
189
+ * `DefaultRadios` (the ONLY variant rendering a raw `<Radio>` — `cards`/
190
+ * `buttons`/`segments` draw custom controls, outside this ticket) set NO
191
+ * `padding` of their own, so `checkboxRadioDensityOverrides()` reaches
192
+ * both directly — confirmed by a real render, same computed padding as
193
+ * raw `MuiCheckbox`/`MuiRadio` at both densities
194
+ * (`density-overrides.test.stories.tsx`'s `ui-checkbox`/`ui-radio-group`).
195
+ * - `Switch.styles.ts`'s `switchSx` is DIFFERENT: it draws root/switchBase/
196
+ * thumb geometry itself, per instance, from its own `SWITCH_SIZES` table
197
+ * (`Switch.metrics.ts`), every number already through `rem(theme, px)`.
198
+ * `Switch.parts.tsx`'s `StyledSwitch = styled(MuiSwitch, {...})(...)`
199
+ * composes these as an OUTER wrapper class whose nested `& .MuiSwitch-
200
+ * switchBase`/`& .MuiSwitch-thumb` selectors are a TWO-class compound —
201
+ * higher specificity than this file's `MuiSwitch.styleOverrides.
202
+ * switchBase`/`thumb`, which compose onto a single-class generated class.
203
+ * `switchDensityOverrides()` therefore has **NO effect on `@12-apps/ui`'s
204
+ * own `<Switch>`** — it only reaches a raw `@mui/material/Switch` consumer
205
+ * (a host's own `Table.tsx` density-toggle column, say). Not a gap:
206
+ * `switchSx` already reacts to `theme.typography.fontSize` on its own —
207
+ * including the CHECKED thumb's own travel distance, computed as
208
+ * `rem(theme, width - thumbSize - padding * 2)` from the SAME per-instance
209
+ * geometry, so it moves consistently with no help from this file.
210
+ * Confirmed by measurement, both sizes, both states, both densities
211
+ * (`ui-switch-*` cases); documented at `Switch.md`'s "Density" section.
212
+ *
213
+ * **The ticket's open question — does a `MuiSwitchBase` theme override reach
214
+ * `Checkbox`/`Radio` at all? — is NO, verified two ways.** `Checkbox`/`Radio`
215
+ * both render through `internal/SwitchBase.js`'s `SwitchBaseRoot`, which is
216
+ * `styled(ButtonBase, { name: 'MuiSwitchBase' })({ padding: 9, ... })` — with
217
+ * NO `slot` key. `@mui/system`'s `createStyled.js` computes
218
+ * `overridesResolver = defaultOverridesResolver(lowercaseFirstLetter(slot))`,
219
+ * and `defaultOverridesResolver` (`if (!slot) return null`) returns `null`
220
+ * for an absent slot; the styled call itself then only pushes its
221
+ * `styleThemeOverrides` expression `if (componentName && overridesResolver)`
222
+ * — `null` is falsy, so for THIS styled call `theme.components.MuiSwitchBase
223
+ * .styleOverrides` is never read at all. (`variants` is a SEPARATE check,
224
+ * gated on `skipVariantsResolver` rather than `overridesResolver`, which is
225
+ * why the ticket's own two-part specificity proof for Chip's label — probing
226
+ * with `variants` — does not transfer here; `styleOverrides` is what dies.)
227
+ * A render-level probe confirms it: a theme with `components.MuiSwitchBase
228
+ * .styleOverrides.root = { padding: '999px' }`, rendering `<Switch />`,
229
+ * `<Checkbox />` and `<Radio />` through it, leaves EVERY ONE of `.MuiSwitch-
230
+ * switchBase`, `.MuiCheckbox-root` and `.MuiRadio-root` at their unthemed
231
+ * padding (`9px`/`4px` — see below), never `999px`. The Decision's own
232
+ * suggested `MuiSwitchBase` route is therefore the ticket's documented
233
+ * fallback in disguise: this file skips straight to duplicating the override
234
+ * under `MuiCheckbox` and `MuiRadio`, each independently confirmed LIVE by
235
+ * the same probe (`components.MuiCheckbox.styleOverrides.root.padding` DOES
236
+ * reach `.MuiCheckbox-root`, and the same for `MuiRadio`).
237
+ *
238
+ * - `Checkbox`/`Radio` (`internal/SwitchBase.js`, `Checkbox.js`, `Radio.js`):
239
+ * `padding: 9` — constant across `size="small"`/`"medium"` today (neither
240
+ * `CheckboxRoot` nor `RadioRoot` carries a size-conditional padding rule),
241
+ * so ONE `root` override, no `sizeSmall`/`sizeMedium` split, covers both
242
+ * sizes without disturbing the glyph-driven size difference FUT-2585 left
243
+ * alone.
244
+ * - `Switch` (`Switch.js`): root (the track) `width: 34+12*2`, `height:
245
+ * 14+12*2`, `padding: 12` (medium); `switchBase` (the thumb's absolutely-
246
+ * positioned wrapper) — its OWN literal is NOT the `12` the ticket's
247
+ * Decision sketch names (that `12` is `SwitchRoot`'s own padding, a
248
+ * DIFFERENT slot); `switchBase` inherits `internal/SwitchBase.js`'s generic
249
+ * `padding: 9` unmodified at medium (`SwitchSwitchBase`'s own styles never
250
+ * set `padding`), confirmed by the same render probe with NO theme
251
+ * override at all (`.MuiSwitch-switchBase` computed padding: `9px`). This
252
+ * file overrides `MuiSwitch.styleOverrides.switchBase` (a LIVE key —
253
+ * `SwitchSwitchBase = styled(SwitchBase, { name: 'MuiSwitch', slot:
254
+ * 'SwitchBase', ... })` DOES pass a `slot`) with `rem(theme, 9)`, the
255
+ * MEASURED default, not the ticket's `12` — using `12` here would move
256
+ * today's real 9px to 12px at `density: 'normal'`, failing the Done-when's
257
+ * own pixel-identical requirement, so the number is corrected against the
258
+ * probe rather than the sketch. `thumb`: `20×20`, unconditional.
259
+ * - `Switch` `size="small"` (`:82-100`, a `variants` entry on `SwitchRoot`
260
+ * itself): root `width: 40`, `height: 24`, `padding: 7`; a NESTED `&
261
+ * .${switchClasses.switchBase}` selector sets `padding: 4` (not 9); a
262
+ * NESTED `& .${switchClasses.thumb}` selector sets `20×20` down to
263
+ * `16×16`. Both nested rules are baked into `SwitchRoot`'s OWN generated
264
+ * class at TWO-class specificity (the size-small instance's unique class,
265
+ * plus `.MuiSwitch-switchBase`/`.MuiSwitch-thumb`) — exactly the Chip
266
+ * outlined-label shape this file already has above, and the SAME failure
267
+ * mode Lesson 1 warns about: a FLAT `styleOverrides.switchBase`/`thumb`
268
+ * (one class) cannot out-specificity it, so at `size="small"` it would
269
+ * silently keep rendering MUI's unthemed `4px`/`16×16` at every density,
270
+ * the click target and thumb staying full-size while the track around them
271
+ * shrank. Fixed the same way: `sizeSmall`'s OWN nested `& .${switchClasses
272
+ * .switchBase}` / `& .${switchClasses.thumb}` rules, read through
273
+ * `switchClasses` (not a hand-typed selector string) for the same
274
+ * `ClassNameGenerator.configure` reason `chipClasses` is above, inserted
275
+ * as part of the SAME `sizeSmall` override object so they land AFTER
276
+ * `SwitchRoot`'s own baked-in small variant in the generated class's CSS
277
+ * text (later wins at matching two-class specificity) rather than trying
278
+ * to out-specificity it from a different slot.
279
+ *
280
+ * **The checked thumb's own travel distance is a FOURTH literal, found only
281
+ * on adversarial review of the PR this doc comment first shipped in.**
282
+ * `SwitchSwitchBase`'s base style bakes in `&.Mui-checked { transform:
283
+ * translateX(20px) }` (medium), and `SwitchRoot`'s `size: 'small'` variant
284
+ * nests the same at `16px` — both bare, never run through `pxToRem`, so at
285
+ * `density: 'compact'` the checked thumb kept travelling the FULL, unscaled
286
+ * distance while the track around it shrank ×0.9 — a visible overshoot.
287
+ * `switchSwitchBasePadding`/`switchSizeSmall` each now carry their own
288
+ * `&.${switchClasses.checked}` rule (`translateX(rem(theme, 20))`/`rem(theme,
289
+ * 16)`), composed onto the SAME generated class, in the SAME position
290
+ * `padding` already occupies — so it wins by the identical mechanism, not a
291
+ * new one. Proven at the pixel level, both sizes/densities: `switch-md-
292
+ * checked`/`switch-sm-checked` measure the thumb's final position against
293
+ * the track's own edge, not just the transform string.
294
+ *
295
+ * At `density: 'normal'` every number above computes back to the literal it
296
+ * replaces (`rem(theme, 9)` is `0.5625rem`, `9px` at the 16px root — no
297
+ * visible change), the same geometry-neutral guarantee `iconButtonDensity
298
+ * Overrides`/`chipDensityOverrides` give above. The same non-default-
299
+ * `fontSize` caveat those two give applies here unchanged: `rem()` only ever
300
+ * reads `theme.typography.fontSize`, so a host adopting
301
+ * `checkboxRadioDensityOverrides`/`switchDensityOverrides` standalone moves
302
+ * every number here by that one coefficient, same as everything else `rem()`
303
+ * touches.
304
+ */
305
+
306
+ const checkboxRadioRootPadding = ({ theme }: { theme: Theme }): CSSObject => ({ padding: rem(theme, 9) });
307
+
308
+ /**
309
+ * `MuiCheckbox`/`MuiRadio`'s own padding — duplicated under both component
310
+ * keys, the ticket's own documented fallback, since `MuiSwitchBase` cannot
311
+ * reach either (see the module doc comment above). One module-level function
312
+ * shared by both keys, and by `checkboxRadioDensityOverrides()`'s own two
313
+ * calls across the two theme-build paths, for the same identity reason the
314
+ * rest of this file's slots are module-level.
315
+ */
316
+ export function checkboxRadioDensityOverrides(): Components<Theme> {
317
+ return {
318
+ MuiCheckbox: { styleOverrides: { root: checkboxRadioRootPadding } },
319
+ MuiRadio: { styleOverrides: { root: checkboxRadioRootPadding } },
320
+ };
321
+ }
322
+
323
+ const switchRootGeometry = ({ theme }: { theme: Theme }): CSSObject => ({
324
+ width: rems(theme, 34 + 12 * 2),
325
+ height: rems(theme, 14 + 12 * 2),
326
+ padding: rem(theme, 12),
327
+ });
328
+ const switchSwitchBasePadding = ({ theme }: { theme: Theme }): CSSObject => ({
329
+ padding: rem(theme, 9),
330
+ // FUT-2767 (adversarial-review fix) — `SwitchSwitchBase`'s OWN base style
331
+ // (`Switch.js`, medium) bakes in `&.Mui-checked { transform:
332
+ // translateX(20px) }`, a bare literal never run through `pxToRem` — at
333
+ // `density: 'compact'` the track/padding/thumb above all shrink ×0.9 but
334
+ // this offset stayed at a full 20px, so the checked thumb overshot the now-
335
+ // smaller track. Composed onto the SAME generated class as that base style,
336
+ // AFTER it (`createStyled` composes `styleThemeOverrides` after a slot's
337
+ // own base/variants — see the module doc comment), so this nested rule
338
+ // wins at the SAME (two-class, `.<hash>.Mui-checked`) specificity, the same
339
+ // mechanism this function's own `padding` line already relies on.
340
+ [`&.${switchClasses.checked}`]: { transform: `translateX(${rem(theme, 20)})` },
341
+ });
342
+ const switchThumbSize = ({ theme }: { theme: Theme }): CSSObject => ({
343
+ width: rem(theme, 20),
344
+ height: rem(theme, 20),
345
+ });
346
+ const switchSizeSmall = ({ theme }: { theme: Theme }): CSSObject => ({
347
+ width: rem(theme, 40),
348
+ height: rem(theme, 24),
349
+ padding: rem(theme, 7),
350
+ // Higher (two-class) specificity than the flat `switchBase`/`thumb`
351
+ // overrides above, inserted as part of THIS SAME generated class — see the
352
+ // module doc comment for why a flat override cannot reach these at
353
+ // `size="small"` on its own.
354
+ [`& .${switchClasses.switchBase}`]: {
355
+ padding: rem(theme, 4),
356
+ // Same overshoot as medium's, at `size="small"`'s OWN literal
357
+ // (`SwitchRoot`'s baked-in `size: 'small'` variant, `Switch.js`:
358
+ // `translateX(16px)`). Nested one level deeper so the compiled selector
359
+ // is `.<root-hash> .MuiSwitch-switchBase.Mui-checked` — the same THREE-
360
+ // class descendant compound MUI's own baked-in small variant uses for
361
+ // this rule, composed after it in the same generated class, so it wins
362
+ // at matching specificity the same way the sibling `padding: rem(theme,
363
+ // 4)` line above already does.
364
+ [`&.${switchClasses.checked}`]: { transform: `translateX(${rem(theme, 16)})` },
365
+ },
366
+ [`& .${switchClasses.thumb}`]: { width: rem(theme, 16), height: rem(theme, 16) },
367
+ });
368
+
369
+ /**
370
+ * `MuiSwitch`'s own track (root), thumb wrapper (switchBase) and thumb
371
+ * (thumb) geometry, at both sizes MUI has.
372
+ */
373
+ export function switchDensityOverrides(): Components<Theme> {
374
+ return {
375
+ MuiSwitch: {
376
+ styleOverrides: {
377
+ root: switchRootGeometry,
378
+ switchBase: switchSwitchBasePadding,
379
+ thumb: switchThumbSize,
380
+ sizeSmall: switchSizeSmall,
381
+ },
382
+ },
383
+ };
384
+ }
@@ -9,7 +9,12 @@ import {
9
9
  type DensityLevel,
10
10
  type ResolvedDensity,
11
11
  } from './density.core';
12
- import { chipDensityOverrides, iconButtonDensityOverrides } from './density-overrides';
12
+ import {
13
+ checkboxRadioDensityOverrides,
14
+ chipDensityOverrides,
15
+ iconButtonDensityOverrides,
16
+ switchDensityOverrides,
17
+ } from './density-overrides';
13
18
  import { fieldOverrides, mergeMuiComponents } from './field-height';
14
19
  import { DEFAULT_FIELD_RADIUS } from './field-radius.core';
15
20
 
@@ -72,13 +77,16 @@ export function useDensity(): ResolvedDensity {
72
77
  * their own layout off.
73
78
  *
74
79
  * `components` is the matching MUI-native override (`fieldOverrides`, plus
75
- * FUT-2766's `iconButtonDensityOverrides`/`chipDensityOverrides`) for a HOST's
76
- * own bare `TextField`/`Select`/`IconButton`/`Chip`, mirroring
77
- * `muiThemeOptionsFrom`'s own `components: mergeMuiComponents(...)`. It
78
- * carries ONLY the overrides this function knows about (`MuiOutlinedInput`'s
79
- * `root`, `input` and `notchedOutline`; `MuiInputLabel`'s `outlined`;
80
- * `MuiIconButton`'s `root`/`sizeSmall`/`sizeLarge`; `MuiChip`'s
81
- * `root`/`sizeSmall`/`label`/`labelSmall`) — a host with ITS OWN overrides for
80
+ * FUT-2766's `iconButtonDensityOverrides`/`chipDensityOverrides` and
81
+ * FUT-2767's `checkboxRadioDensityOverrides`/`switchDensityOverrides`) for a
82
+ * HOST's own bare `TextField`/`Select`/`IconButton`/`Chip`/`Checkbox`/
83
+ * `Radio`/`Switch`, mirroring `muiThemeOptionsFrom`'s own `components:
84
+ * mergeMuiComponents(...)`. It carries ONLY the overrides this function knows
85
+ * about (`MuiOutlinedInput`'s `root`, `input` and `notchedOutline`;
86
+ * `MuiInputLabel`'s `outlined`; `MuiIconButton`'s `root`/`sizeSmall`/
87
+ * `sizeLarge`; `MuiChip`'s `root`/`sizeSmall`/`label`/`labelSmall`;
88
+ * `MuiCheckbox`'s and `MuiRadio`'s `root`; `MuiSwitch`'s
89
+ * `root`/`switchBase`/`thumb`/`sizeSmall`) — a host with ITS OWN overrides for
82
90
  * OTHER components merges them in with
83
91
  * `mergeMuiComponents(densityThemeOptions(density).components, hostOverrides)`,
84
92
  * which keeps a component only ONE side touches untouched. For a component
@@ -137,6 +145,8 @@ export function densityThemeOptions(
137
145
  fieldOverrides(fieldRadius, fieldHeight),
138
146
  iconButtonDensityOverrides(),
139
147
  chipDensityOverrides(),
148
+ checkboxRadioDensityOverrides(),
149
+ switchDensityOverrides(),
140
150
  ),
141
151
  };
142
152
  }
@@ -50,9 +50,15 @@ export {
50
50
  useDensity,
51
51
  } from './density';
52
52
  // The IconButton/Chip geometry overrides density threads through both
53
- // consumption paths (FUT-2766) — exported standalone too, for a host that
54
- // wants JUST these two components' overrides without the rest of density.
55
- export { chipDensityOverrides, iconButtonDensityOverrides } from './density-overrides';
53
+ // consumption paths (FUT-2766), and Checkbox/Radio/Switch's (FUT-2767) —
54
+ // exported standalone too, for a host that wants just these components'
55
+ // overrides without the rest of density.
56
+ export {
57
+ checkboxRadioDensityOverrides,
58
+ chipDensityOverrides,
59
+ iconButtonDensityOverrides,
60
+ switchDensityOverrides,
61
+ } from './density-overrides';
56
62
 
57
63
  export interface Accent {
58
64
  main: string;
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/tokens/density.ts"],"sourcesContent":["import { useTheme } from '@mui/material/styles/index.js';\nimport type { ThemeOptions } from '@mui/material/styles/index.js';\n\nimport {\n densityFieldHeight,\n densityFontSize,\n densitySpacingUnit,\n resolveDensityFactor,\n type DensityLevel,\n type ResolvedDensity,\n} from './density.core';\nimport { chipDensityOverrides, iconButtonDensityOverrides } from './density-overrides';\nimport { fieldOverrides, mergeMuiComponents } from './field-height';\nimport { DEFAULT_FIELD_RADIUS } from './field-radius.core';\n\n/**\n * DENSITY ON THE WEB: the MUI theme channel, the reader, and the standalone\n * entry point for a host that never calls `createUiTheme`/`UiProvider`.\n *\n * The argument for one density knob, the factor table and its precedence are\n * in `./density.core.ts`.\n */\n\nexport {\n DEFAULT_DENSITY,\n DENSITY_FACTOR,\n densityFieldHeight,\n densityFontSize,\n densitySpacingUnit,\n resolveDensityFactor,\n type DensityLevel,\n type ResolvedDensity,\n} from './density.core';\n\ndeclare module '@mui/material/styles' {\n interface Theme {\n /** The density this theme renders at. See `@12-apps/ui/tokens`' `useDensity`. */\n density?: ResolvedDensity;\n }\n interface ThemeOptions {\n /** The density this theme renders at. See `@12-apps/ui/tokens`' `useDensity`. */\n density?: ResolvedDensity;\n }\n}\n\n/**\n * The theme's resolved density — a plain theme read, not a step-shifting\n * resolver (`size` stays hierarchy; see `./density.core.ts`). A `styleOverrides`\n * callback already gets `{ theme }` and can read `theme.density` directly;\n * this is for a component that needs the level in its own render logic\n * (`Table`/`DataGrid`/`DataViews` each read it once to source their own\n * `density` prop's default).\n *\n * Falls back to `resolveDensityFactor()` (`'normal'`, factor `1`) for a bare\n * MUI theme built without `createUiTheme`/`muiThemeOptionsFrom`.\n */\nexport function useDensity(): ResolvedDensity {\n return useTheme().density ?? resolveDensityFactor();\n}\n\n/**\n * The density factor as a MUI `ThemeOptions` fragment, for a host that builds\n * `createTheme()` directly and never calls `createUiTheme`/`UiProvider` — the\n * same precedence `resolveDensityFactor` gives `createUiTheme`, so the two\n * consumption paths agree on `typography`/`spacing`/`fieldHeight`/`components`\n * (FUT-2764's Design section), not just the first two. `fieldHeight` matters\n * on its own: `Input`/`Select`/`Button` each read `theme.fieldHeight` directly\n * (`Input.tsx`, `Select.tsx`, `Button.styles.ts`'s `buttonSize`), so a fragment\n * that carried only `typography`/`spacing` left every field standing at the\n * DEFAULT height (2.5) at every density on this path — the two paths would\n * agree on the type scale and disagree on the one number three components key\n * their own layout off.\n *\n * `components` is the matching MUI-native override (`fieldOverrides`, plus\n * FUT-2766's `iconButtonDensityOverrides`/`chipDensityOverrides`) for a HOST's\n * own bare `TextField`/`Select`/`IconButton`/`Chip`, mirroring\n * `muiThemeOptionsFrom`'s own `components: mergeMuiComponents(...)`. It\n * carries ONLY the overrides this function knows about (`MuiOutlinedInput`'s\n * `root`, `input` and `notchedOutline`; `MuiInputLabel`'s `outlined`;\n * `MuiIconButton`'s `root`/`sizeSmall`/`sizeLarge`; `MuiChip`'s\n * `root`/`sizeSmall`/`label`/`labelSmall`) — a host with ITS OWN overrides for\n * OTHER components merges them in with\n * `mergeMuiComponents(densityThemeOptions(density).components, hostOverrides)`,\n * which keeps a component only ONE side touches untouched. For a component\n * BOTH sides style, the merge is by INNER key (`root`/`input`/…): a key only\n * one side sets survives from that side, but a key BOTH set is replaced\n * WHOLESALE by whichever source is passed LAST — not deep-merged — so a host\n * wanting to ADD to, say, `MuiOutlinedInput`'s `root` alongside the radius\n * override needs to write that one key's object out in full itself.\n *\n * `fieldRadius` (3rd argument, optional) exists because density does NOT touch\n * the field's CORNER — this is only for a host that already draws its OWN,\n * non-default radius and wants `components` to match it instead of clashing;\n * it defaults\n * to the same {@link DEFAULT_FIELD_RADIUS} `createUiTheme` itself falls back\n * to when a host names no `fieldRadius`, so the two paths still agree with no\n * argument passed at all — the existing 2-argument call keeps working\n * unchanged.\n *\n * **Where to spread it — the first `createTheme()` call, not a later layering\n * one.** `createTheme(options, ...args)` (`createThemeNoVars.js`) only runs\n * `createSpacing`/`createTypography` on `options`, the FIRST argument; every\n * later argument is deep-merged onto the theme those two already built, with\n * no such reprocessing. So a host with a base theme and a SECOND, layering\n * `createTheme()` call on top of it — exactly the shape a two-theme host uses,\n * `createTheme(outer, { palette: { ... } })` — must apply density at the\n * FIRST call (where the base itself is built), never spread onto `outer` in\n * the second one:\n *\n * ```ts\n * // RIGHT — density goes into the base's OWN construction. The second,\n * // layering call is unaffected: it never restates spacing/typography/\n * // fieldHeight/components itself, so `theme.spacing`/`pxToRem`/`fieldHeight`\n * // carry over from `base` UNCHANGED, already correctly scaled.\n * const base = createTheme({ palette: { primary: { main }, ... }, ...densityThemeOptions('compact') });\n * const themed = createTheme(base, { palette: { primary: { main: brand } } });\n *\n * // WRONG — a second, layering argument onto an ALREADY-BUILT theme is\n * // deepmerged with no reprocessing: `spacing`/`typography.fontSize` would\n * // overwrite the already-resolved `theme.spacing` function/`pxToRem` ratio\n * // instead of rescaling them.\n * createTheme(outer, { ...densityThemeOptions('compact') });\n * ```\n */\nexport function densityThemeOptions(\n density: DensityLevel | number,\n factors?: Partial<Record<DensityLevel, number>>,\n fieldRadius: number = DEFAULT_FIELD_RADIUS,\n): Pick<ThemeOptions, 'typography' | 'spacing' | 'fieldHeight' | 'components'> {\n const { factor } = resolveDensityFactor(density, factors);\n const fieldHeight = densityFieldHeight(factor);\n return {\n typography: { fontSize: densityFontSize(factor) },\n spacing: densitySpacingUnit(factor),\n fieldHeight,\n components: mergeMuiComponents(\n fieldOverrides(fieldRadius, fieldHeight),\n iconButtonDensityOverrides(),\n chipDensityOverrides(),\n ),\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA,SAAS,gBAAgB;AAwDlB,SAAS,aAA8B;AAC5C,SAAO,SAAS,EAAE,WAAW,qBAAqB;AACpD;AAkEO,SAAS,oBACd,SACA,SACA,cAAsB,sBACuD;AAC7E,QAAM,EAAE,OAAO,IAAI,qBAAqB,SAAS,OAAO;AACxD,QAAM,cAAc,mBAAmB,MAAM;AAC7C,SAAO;AAAA,IACL,YAAY,EAAE,UAAU,gBAAgB,MAAM,EAAE;AAAA,IAChD,SAAS,mBAAmB,MAAM;AAAA,IAClC;AAAA,IACA,YAAY;AAAA,MACV,eAAe,aAAa,WAAW;AAAA,MACvC,2BAA2B;AAAA,MAC3B,qBAAqB;AAAA,IACvB;AAAA,EACF;AACF;","names":[]}
@@ -1,59 +0,0 @@
1
- import {
2
- rem
3
- } from "./chunk-YKCAJ2TN.js";
4
-
5
- // src/tokens/density-overrides.ts
6
- import { chipClasses } from "@mui/material/Chip/index.js";
7
- var iconButtonRootPadding = ({ theme }) => ({ padding: rem(theme, 8) });
8
- var iconButtonSmallPadding = ({ theme }) => ({ padding: rem(theme, 5) });
9
- var iconButtonLargePadding = ({ theme }) => ({ padding: rem(theme, 12) });
10
- function iconButtonDensityOverrides() {
11
- return {
12
- MuiIconButton: {
13
- styleOverrides: {
14
- root: iconButtonRootPadding,
15
- sizeSmall: iconButtonSmallPadding,
16
- sizeLarge: iconButtonLargePadding
17
- }
18
- }
19
- };
20
- }
21
- var CHIP_OUTLINED_LABEL_PADDING = { medium: 11, small: 7 };
22
- var chipRootHeight = ({
23
- theme,
24
- ownerState
25
- }) => {
26
- const style = { height: rem(theme, 32) };
27
- if (ownerState?.variant === "outlined") {
28
- const px = CHIP_OUTLINED_LABEL_PADDING[ownerState.size === "small" ? "small" : "medium"];
29
- style[`& .${chipClasses.label}`] = { paddingLeft: rem(theme, px), paddingRight: rem(theme, px) };
30
- }
31
- return style;
32
- };
33
- var chipSmallHeight = ({ theme }) => ({ height: rem(theme, 24) });
34
- var chipLabelPadding = ({ theme }) => ({
35
- paddingLeft: rem(theme, 12),
36
- paddingRight: rem(theme, 12)
37
- });
38
- var chipLabelSmallPadding = ({ theme }) => ({
39
- paddingLeft: rem(theme, 8),
40
- paddingRight: rem(theme, 8)
41
- });
42
- function chipDensityOverrides() {
43
- return {
44
- MuiChip: {
45
- styleOverrides: {
46
- root: chipRootHeight,
47
- sizeSmall: chipSmallHeight,
48
- label: chipLabelPadding,
49
- labelSmall: chipLabelSmallPadding
50
- }
51
- }
52
- };
53
- }
54
-
55
- export {
56
- iconButtonDensityOverrides,
57
- chipDensityOverrides
58
- };
59
- //# sourceMappingURL=chunk-532XOWZ5.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/tokens/density-overrides.ts"],"sourcesContent":["import { chipClasses } from '@mui/material/Chip/index.js';\nimport type { Components, CSSObject, Theme } from '@mui/material/styles/index.js';\n\nimport { rem } from './relative';\n\n/** The `ownerState` fields `MuiChip`'s two styled slots (root, label) both receive. */\ninterface ChipOwnerStateForOverrides {\n variant?: 'filled' | 'outlined';\n size?: 'small' | 'medium';\n}\n\n/**\n * ICONBUTTON / CHIP GEOMETRY, DENSITY-AWARE (FUT-2766).\n *\n * Both are MUI's own components, unwrapped: `@12-apps/ui` has no\n * `components/*` subpath for `IconButton`, and its `Chip` wrapper\n * (`components/data-display/Chip`) hands the drawing to `MuiChip` and adds\n * only hover/selection/transition `sx` — no geometry of its own (unlike\n * `Button`, which already draws every dimension through `rem()`,\n * `components/form/Button/Button.styles.ts`). So both draw MUI's OWN fixed-px\n * padding/height, verified against the installed `@mui/material@6.5.0` source:\n *\n * - `IconButton` (`node_modules/@mui/material/IconButton/IconButton.js`):\n * `padding: 8` on the root (medium, the default), `padding: 5` at\n * `size=\"small\"`, `padding: 12` at `size=\"large\"`. The icon's own `fontSize`\n * is already relative (`pxToRem(18/24/28)`) — only `padding` was the gap.\n * - `Chip` (`node_modules/@mui/material/Chip/Chip.js`): `height: 32` on the\n * root (medium, the default), `height: 24` at `size=\"small\"`. The label's\n * own side padding is a SEPARATE slot (`name: 'MuiChip', slot: 'Label'`,\n * override key `label`/`labelSmall`) at `paddingLeft`/`paddingRight: 12`\n * default, `8` at `size=\"small\"` — restated in this package's own\n * `Chip.metrics.ts` (`CHIP_SIZES`), which both renderers already read.\n *\n * Neither dimension moved when `theme.typography.fontSize` changed (they are\n * not written through `pxToRem`), so at `density: 'compact'` an\n * `IconButton`/`Chip` next to a now-smaller `Button` looked unchanged — the\n * visual regression FUT-2764 exists to fix. `rem(theme, px)` is the same\n * helper `Button.styles.ts` already uses, so `padding`/`height` move exactly\n * as far as `theme.typography.fontSize`'s coefficient does, and are\n * geometry-neutral at `density: 'normal'`: `rem(theme, 8)` at the unchanged\n * `fontSize: 14` renders to the same computed px as the literal `8` it\n * replaces.\n *\n * **The OUTLINED chip's own label padding (`11`/`7`, one px tighter than\n * filled's `12`/`8`) is a SEPARATE number this file must not clobber** — a\n * bug an earlier revision of this file had (a `styleOverrides.label`/\n * `labelSmall` of `12`/`8` unconditionally wins for EVERY variant, because\n * `ChipLabel`'s own `overridesResolver` (`Chip.js`) returns\n * `[styles.label, styles[label${size}]]` with no variant check at all, and\n * `@mui/system`'s `createStyled` composes `styleThemeOverrides` AFTER the\n * slot's own base styles/variants — so a theme `styleOverrides.label` always\n * outranks `ChipLabel`'s own baked-in `{ props: { variant: 'outlined' },\n * style: { paddingLeft: 11, ... } }`, at ANY density, not just a scaled one).\n * Fixed by putting the outlined fix on the ROOT slot instead, as a nested\n * `.MuiChip-label` selector inside `styleOverrides.root` itself, keyed on\n * `ownerState.variant`/`.size` — proven correct two ways: (1) a probe render\n * confirmed the naive `components.MuiChip.variants` route CANNOT reach the\n * label slot at all — `createStyled`'s `skipVariantsResolver` defaults to\n * `true` for every slot but `'Root'`, so a theme-level `variants` entry is\n * simply never evaluated for `ChipLabel`, proven by rendering an outlined\n * Chip against a `components.MuiChip.variants` entry set to an absurd\n * `999px` and reading `.MuiChip-label`'s OWN computed style: still `11px`,\n * untouched — while the SAME entry DOES leak onto `.MuiChip-root` (`999px`),\n * confirming theme `variants` is a ROOT-slot-only mechanism for this\n * component; (2) a nested `.MuiChip-label` selector written from the ROOT\n * slot is a HIGHER-specificity rule (two classes, `0,2,0`) than the label's\n * own single-class rule (`0,1,0`), so it wins regardless of source order —\n * the same technique `ChipRoot`'s OWN style already uses for its avatar/\n * icon/delete-icon sub-parts (`& .${chipClasses.avatar}`, etc., in\n * `Chip.js`), and read through the SAME `chipClasses` MUI's own `Chip.js`\n * generates the real DOM class from, not a hand-typed copy of it.\n *\n * **That same higher specificity also outranks a HOST's own theming.** A\n * host writing `theme.components.MuiChip.styleOverrides.label` for its own\n * reasons (`0,1,0`) does not win against the outlined rule here (`0,2,0`) —\n * not a bug specific to this file, `ChipLabel`'s OWN baked-in outlined\n * variant already outranked a plain `styleOverrides.label` the same way,\n * before this file existed. A host that needs to change OUTLINED label\n * padding specifically cannot do it through `styleOverrides.label`/\n * `labelSmall` at all; it reaches it through `sx` (a per-instance override,\n * highest specificity of all) or its OWN `MuiChip.styleOverrides.root`\n * function written out in full — `mergeMuiComponents` replaces `root`\n * WHOLESALE when both sides set it (see `./density.ts`'s own doc comment),\n * so a host adding to it must restate `chipRootHeight`'s own height logic\n * alongside its outlined-label change, not merely add a sibling key.\n *\n * The avatar/icon/delete-icon sub-slots (margins, sizes) and IconButton's\n * `edge=\"start\"`/`\"end\"` negative margins are DELIBERATELY untouched by this\n * file — real override keys exist, but none is in the ticket's Done-when nor\n * exercised by a call site this initiative is chasing, so they stay MUI's\n * own literals at every density (including `compact`/`comfortable` — they do\n * NOT scale here; a future ticket that needs them scaled adds its own\n * override, the way `field-height.ts`'s siblings each own one slot).\n *\n * A host that adopts `iconButtonDensityOverrides`/`chipDensityOverrides`\n * standalone (the `@12-apps/ui/tokens` export, no density channel involved)\n * sees the SAME scaling from its own `typography.fontSize` alone — `rem()`\n * only ever reads that one theme number, so a theme with a non-default\n * `fontSize` (set directly, with no `density` in the picture at all) moves\n * these numbers exactly as it moves everything else written through `rem()`.\n *\n * Each slot below is a MODULE-LEVEL function, not a closure built fresh inside\n * `iconButtonDensityOverrides`/`chipDensityOverrides` — the same reason\n * `field-height.ts`'s `restingEdge` is one: two themes built from the same\n * options (the `muiThemeOptionsFrom` and `densityThemeOptions` paths, in\n * particular) must compare equal, and a fresh arrow function per call would\n * make them differ on nothing but identity.\n */\n\nconst iconButtonRootPadding = ({ theme }: { theme: Theme }): CSSObject => ({ padding: rem(theme, 8) });\nconst iconButtonSmallPadding = ({ theme }: { theme: Theme }): CSSObject => ({ padding: rem(theme, 5) });\nconst iconButtonLargePadding = ({ theme }: { theme: Theme }): CSSObject => ({ padding: rem(theme, 12) });\n\n/** `MuiIconButton`'s own padding, at every size MUI has. */\nexport function iconButtonDensityOverrides(): Components<Theme> {\n return {\n MuiIconButton: {\n styleOverrides: {\n root: iconButtonRootPadding,\n sizeSmall: iconButtonSmallPadding,\n sizeLarge: iconButtonLargePadding,\n },\n },\n };\n}\n\n/** MUI's own outlined-label paddings (`ChipLabel`'s baked-in `variants`, `Chip.js`). */\nconst CHIP_OUTLINED_LABEL_PADDING = { medium: 11, small: 7 } as const;\n\nconst chipRootHeight = ({\n theme,\n ownerState,\n}: {\n theme: Theme;\n ownerState?: ChipOwnerStateForOverrides;\n}): CSSObject => {\n const style: CSSObject = { height: rem(theme, 32) };\n if (ownerState?.variant === 'outlined') {\n const px = CHIP_OUTLINED_LABEL_PADDING[ownerState.size === 'small' ? 'small' : 'medium'];\n // Higher CSS specificity than `.MuiChip-label`'s own single-class rule\n // (two classes vs one) — wins over `chipLabelPadding`/`chipLabelSmallPadding`\n // below regardless of stylesheet insertion order. See the module doc\n // comment for why this must live here and not on the label slot itself.\n // `chipClasses.label`, not a hand-typed `.MuiChip-label` string — the same\n // module `Chip.js`'s own root style reads for its avatar/icon/delete-icon\n // selectors, so this tracks whatever `Chip.js` itself puts on the label\n // element rather than a separately-maintained copy of it. A host that\n // calls `ClassNameGenerator.configure` before any `MuiChip` module loads\n // renames the real class; a literal string would silently stop matching\n // it, `chipClasses.label` cannot.\n style[`& .${chipClasses.label}`] = { paddingLeft: rem(theme, px), paddingRight: rem(theme, px) };\n }\n return style;\n};\nconst chipSmallHeight = ({ theme }: { theme: Theme }): CSSObject => ({ height: rem(theme, 24) });\nconst chipLabelPadding = ({ theme }: { theme: Theme }): CSSObject => ({\n paddingLeft: rem(theme, 12),\n paddingRight: rem(theme, 12),\n});\nconst chipLabelSmallPadding = ({ theme }: { theme: Theme }): CSSObject => ({\n paddingLeft: rem(theme, 8),\n paddingRight: rem(theme, 8),\n});\n\n/** `MuiChip`'s own height (root) and label side padding (label), at both sizes MUI has. */\nexport function chipDensityOverrides(): Components<Theme> {\n return {\n MuiChip: {\n styleOverrides: {\n root: chipRootHeight,\n sizeSmall: chipSmallHeight,\n label: chipLabelPadding,\n labelSmall: chipLabelSmallPadding,\n },\n },\n };\n}\n"],"mappings":";;;;;AAAA,SAAS,mBAAmB;AA6G5B,IAAM,wBAAwB,CAAC,EAAE,MAAM,OAAoC,EAAE,SAAS,IAAI,OAAO,CAAC,EAAE;AACpG,IAAM,yBAAyB,CAAC,EAAE,MAAM,OAAoC,EAAE,SAAS,IAAI,OAAO,CAAC,EAAE;AACrG,IAAM,yBAAyB,CAAC,EAAE,MAAM,OAAoC,EAAE,SAAS,IAAI,OAAO,EAAE,EAAE;AAG/F,SAAS,6BAAgD;AAC9D,SAAO;AAAA,IACL,eAAe;AAAA,MACb,gBAAgB;AAAA,QACd,MAAM;AAAA,QACN,WAAW;AAAA,QACX,WAAW;AAAA,MACb;AAAA,IACF;AAAA,EACF;AACF;AAGA,IAAM,8BAA8B,EAAE,QAAQ,IAAI,OAAO,EAAE;AAE3D,IAAM,iBAAiB,CAAC;AAAA,EACtB;AAAA,EACA;AACF,MAGiB;AACf,QAAM,QAAmB,EAAE,QAAQ,IAAI,OAAO,EAAE,EAAE;AAClD,MAAI,YAAY,YAAY,YAAY;AACtC,UAAM,KAAK,4BAA4B,WAAW,SAAS,UAAU,UAAU,QAAQ;AAYvF,UAAM,MAAM,YAAY,KAAK,EAAE,IAAI,EAAE,aAAa,IAAI,OAAO,EAAE,GAAG,cAAc,IAAI,OAAO,EAAE,EAAE;AAAA,EACjG;AACA,SAAO;AACT;AACA,IAAM,kBAAkB,CAAC,EAAE,MAAM,OAAoC,EAAE,QAAQ,IAAI,OAAO,EAAE,EAAE;AAC9F,IAAM,mBAAmB,CAAC,EAAE,MAAM,OAAoC;AAAA,EACpE,aAAa,IAAI,OAAO,EAAE;AAAA,EAC1B,cAAc,IAAI,OAAO,EAAE;AAC7B;AACA,IAAM,wBAAwB,CAAC,EAAE,MAAM,OAAoC;AAAA,EACzE,aAAa,IAAI,OAAO,CAAC;AAAA,EACzB,cAAc,IAAI,OAAO,CAAC;AAC5B;AAGO,SAAS,uBAA0C;AACxD,SAAO;AAAA,IACL,SAAS;AAAA,MACP,gBAAgB;AAAA,QACd,MAAM;AAAA,QACN,WAAW;AAAA,QACX,OAAO;AAAA,QACP,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AACF;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/form/RadioGroup/RadioGroup.variants.tsx"],"sourcesContent":["import Box from '@mui/material/Box/index.js';\nimport ButtonBase from '@mui/material/ButtonBase/index.js';\nimport Card from '@mui/material/Card/index.js';\nimport CardContent from '@mui/material/CardContent/index.js';\nimport FormControlLabel from '@mui/material/FormControlLabel/index.js';\nimport FormLabel from '@mui/material/FormLabel/index.js';\nimport Radio from '@mui/material/Radio/index.js';\nimport MuiRadioGroup from '@mui/material/RadioGroup/index.js';\nimport Typography from '@mui/material/Typography/index.js';\nimport { styled } from '@mui/material/styles/index.js';\nimport React from 'react';\n\nimport {\n buttonRadioSx,\n formLabelSx,\n radioCardSx,\n segmentButtonSx,\n segmentContainerSx,\n} from './RadioGroup.styles';\nimport type { SurfaceFlags } from './RadioGroup.styles';\nimport type { RadioOption, RadioGroupProps } from './RadioGroup.types';\n\nconst StyledFormLabel = styled(FormLabel, {\n shouldForwardProp: (prop) => !['glass', 'error'].includes(prop as string),\n})<{ glass?: boolean; error?: boolean }>(({ theme, glass, error }) => ({\n ...formLabelSx(theme, glass, error),\n}));\n\nconst StyledRadioCard = styled(Card, {\n shouldForwardProp: (prop) =>\n !['selected', 'customColor', 'glass', 'gradient', 'glow', 'customSize', 'animated'].includes(\n prop as string,\n ),\n})<SurfaceFlags>(({ theme, ...flags }) => ({ ...radioCardSx(theme, flags) }));\n\nconst StyledButtonRadio = styled(ButtonBase, {\n shouldForwardProp: (prop) =>\n !['selected', 'customColor', 'glass', 'gradient', 'customSize', 'animated'].includes(\n prop as string,\n ),\n})<SurfaceFlags>(({ theme, ...flags }) => ({ ...buttonRadioSx(theme, flags) }));\n\nconst StyledSegmentContainer = styled(Box, {\n shouldForwardProp: (prop) => !['glass', 'customColor'].includes(prop as string),\n})<{ glass?: boolean; customColor?: string }>(({ theme, glass, customColor }) => ({\n ...segmentContainerSx(theme, glass, customColor),\n}));\n\nconst StyledSegmentButton = styled(ButtonBase, {\n shouldForwardProp: (prop) =>\n !['selected', 'customColor', 'customSize', 'animated'].includes(prop as string),\n})<SurfaceFlags>(({ theme, ...flags }) => ({ ...segmentButtonSx(theme, flags) }));\n\n\nexport interface VariantProps {\n options: RadioOption[];\n value?: unknown;\n color: NonNullable<RadioGroupProps['color']>;\n size: NonNullable<RadioGroupProps['size']>;\n direction: NonNullable<RadioGroupProps['direction']>;\n showDescriptions: boolean;\n glass: boolean;\n gradient: boolean;\n glow: boolean;\n dataTestId?: string;\n onSelect: (option: RadioOption) => void;\n /** Only the default variant hands its ref and extra props to MUI's group. */\n groupRef?: React.Ref<HTMLDivElement>;\n onChange?: RadioGroupProps['onChange'];\n rest?: Record<string, unknown>;\n}\n\n/** `${dataTestId}-${suffix}`, or nothing when the caller supplied no id. */\nexport const testId = (base: string | undefined, suffix: string) =>\n base ? `${base}-${suffix}` : undefined;\n\n/**\n * MUI's Radio has no `danger`; this component's palette calls the error colour\n * that, so the name is translated at the boundary.\n */\nconst muiRadioColor = (color: string) =>\n color === 'danger'\n ? 'error'\n : (color as 'primary' | 'secondary' | 'success' | 'warning' | 'error');\n\n/** An option's icon beside its label, the run every variant but `cards` uses. */\nconst OptionLabel: React.FC<{ option: RadioOption; testIdValue?: string }> = ({\n option,\n testIdValue,\n}) => (\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }} data-testid={testIdValue}>\n {option.icon}\n {option.label}\n </Box>\n);\n\nexport const DefaultRadios: React.FC<VariantProps> = ({\n options,\n value,\n color,\n direction,\n showDescriptions,\n dataTestId,\n groupRef,\n onChange,\n rest,\n}) => (\n <MuiRadioGroup\n ref={groupRef}\n value={value}\n onChange={onChange}\n {...rest}\n sx={{ flexDirection: direction, gap: 1 }}\n data-testid={testId(dataTestId, 'group')}\n >\n {options.map((option, index) => (\n <FormControlLabel\n key={option.value}\n value={option.value}\n disabled={option.disabled}\n data-testid={testId(dataTestId, `option-${index}`)}\n control={\n <Radio\n color={muiRadioColor(color)}\n data-testid={testId(dataTestId, `radio-${index}`)}\n />\n }\n label={\n <Box\n sx={{ display: 'flex', alignItems: 'center', gap: 1 }}\n data-testid={testId(dataTestId, `label-${index}`)}\n >\n {option.icon}\n <Box>\n <Typography>{option.label}</Typography>\n {option.description && showDescriptions && (\n <Typography variant=\"caption\" color=\"text.secondary\">\n {option.description}\n </Typography>\n )}\n </Box>\n </Box>\n }\n />\n ))}\n </MuiRadioGroup>\n);\n\nexport interface CardBodyProps {\n option: RadioOption;\n index: number;\n isSelected: boolean;\n color: string;\n showDescriptions: boolean;\n dataTestId?: string;\n}\n\n/** A card's contents: the icon, the label, and the optional description under it. */\nexport const CardBody: React.FC<CardBodyProps> = ({\n option,\n index,\n isSelected,\n color,\n showDescriptions,\n dataTestId,\n}) => (\n <CardContent sx={{ p: 2, '&:last-child': { pb: 2 } }}>\n <Box sx={{ display: 'flex', alignItems: 'flex-start', gap: 2 }}>\n {option.icon && (\n <Box sx={{ mt: 0.5, color: isSelected ? `${color}.main` : 'text.secondary' }}>\n {option.icon}\n </Box>\n )}\n <Box sx={{ flex: 1 }}>\n <Typography\n variant=\"subtitle1\"\n fontWeight={600}\n color={isSelected ? `${color}.main` : 'text.primary'}\n data-testid={testId(dataTestId, `label-${index}`)}\n >\n {option.label}\n </Typography>\n {option.description && showDescriptions && (\n <Typography variant=\"body2\" color=\"text.secondary\" sx={{ mt: 0.5 }}>\n {option.description}\n </Typography>\n )}\n </Box>\n </Box>\n </CardContent>\n);\n\nexport { OptionLabel };\n\nexport const CardRadios: React.FC<VariantProps> = ({\n options, value, color, size, direction, showDescriptions, glass, gradient, glow, dataTestId, onSelect,\n}) => (\n <Box\n sx={{ display: 'flex', flexDirection: direction, gap: 2 }}\n data-testid={testId(dataTestId, 'container')}\n >\n {options.map((option, index) => (\n <StyledRadioCard\n key={option.value}\n selected={value === option.value}\n customColor={color}\n glass={glass}\n gradient={gradient}\n glow={glow}\n customSize={size}\n animated\n data-testid={testId(dataTestId, `card-${index}`)}\n onClick={() => onSelect(option)}\n >\n <CardBody\n option={option}\n index={index}\n isSelected={value === option.value}\n color={color}\n showDescriptions={showDescriptions}\n dataTestId={dataTestId}\n />\n </StyledRadioCard>\n ))}\n </Box>\n);\n\nexport const ButtonRadios: React.FC<VariantProps> = ({\n options, value, color, size, direction, glass, gradient, dataTestId, onSelect,\n}) => (\n <Box\n sx={{ display: 'flex', flexDirection: direction, gap: 1, flexWrap: 'wrap' }}\n data-testid={testId(dataTestId, 'container')}\n >\n {options.map((option, index) => (\n <StyledButtonRadio\n key={option.value}\n selected={value === option.value}\n customColor={color}\n glass={glass}\n gradient={gradient}\n customSize={size}\n animated\n disabled={option.disabled}\n data-testid={testId(dataTestId, `button-${index}`)}\n onClick={() => onSelect(option)}\n >\n <OptionLabel option={option} testIdValue={testId(dataTestId, `label-${index}`)} />\n </StyledButtonRadio>\n ))}\n </Box>\n);\n\nexport const SegmentRadios: React.FC<VariantProps> = ({\n options, value, color, size, glass, dataTestId, onSelect,\n}) => (\n <StyledSegmentContainer\n glass={glass}\n customColor={color}\n data-testid={testId(dataTestId, 'container')}\n >\n {options.map((option, index) => (\n <StyledSegmentButton\n key={option.value}\n selected={value === option.value}\n customColor={color}\n customSize={size}\n animated\n disabled={option.disabled}\n data-testid={testId(dataTestId, `segment-${index}`)}\n onClick={() => onSelect(option)}\n >\n <OptionLabel option={option} testIdValue={testId(dataTestId, `label-${index}`)} />\n </StyledSegmentButton>\n ))}\n </StyledSegmentContainer>\n);\n\n/** The group's own label, which can carry the glass treatment independently. */\nexport const GroupLabel: React.FC<{\n glass?: boolean;\n error?: boolean;\n dataTestId?: string;\n children: React.ReactNode;\n}> = ({ glass, error, dataTestId, children }) => (\n <StyledFormLabel glass={glass} error={error} data-testid={testId(dataTestId, 'label')}>\n {children}\n </StyledFormLabel>\n);\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/provider/mui-bridge.ts"],"sourcesContent":["import type { PaletteColor, Theme, ThemeOptions } from '@mui/material/styles/index.js';\n\nimport { cssLengthToPx, cssTrackingToEm } from '../tokens/css-units';\nimport { chipDensityOverrides, iconButtonDensityOverrides } from '../tokens/density-overrides';\nimport { densityFontSize, resolveDensityFactor } from '../tokens/density';\nimport { resolveFieldHeight } from '../tokens/field-height.core';\nimport { fieldOverrides, mergeMuiComponents } from '../tokens/field-height';\nimport { fieldRadius } from '../tokens/field-radius';\nimport { accentFor } from '../tokens/scales';\nimport {\n FONT_WEIGHTS,\n TYPE_SIZES,\n WEB_FONT_FAMILY,\n WEB_MONOSPACE_FONT_FAMILY,\n type UiHeadingStep,\n type UiPaletteColor,\n type UiTheme,\n} from '../tokens/theme';\nimport { HEADING_LEVELS, headingMetrics, type HeadingLevel } from '../tokens/typography';\n\n/**\n * THE TWO DIRECTIONS BETWEEN MUI'S THEME AND OURS. Web only.\n *\n * `uiThemeFromMui` is how a web component — or a shared style resolver such\n * as `box-layout.ts` — reads the host's MUI theme in the neutral shape the\n * native renderer reads natively. `muiThemeOptionsFrom` is the reverse, for\n * a host that has a `UiTheme` and no MUI theme yet: `UiProvider` on the web is\n * a MUI `ThemeProvider` fed by it.\n *\n * Both are field-by-field on purpose. A spread would carry MUI's extra keys\n * across and the native side would silently depend on one.\n */\n\nconst slot = (color: PaletteColor): UiPaletteColor => ({\n main: color.main,\n light: color.light,\n dark: color.dark,\n contrastText: color.contrastText,\n});\n\nfunction headingSteps(theme: Theme): Record<HeadingLevel, UiHeadingStep> {\n return Object.fromEntries(\n HEADING_LEVELS.map((level) => {\n const metrics = headingMetrics(theme, level);\n return [\n level,\n {\n fontSize: cssLengthToPx(metrics.fontSize, 16),\n lineHeight: metrics.lineHeight,\n letterSpacing: cssTrackingToEm(metrics.letterSpacing),\n normalWeight: metrics.normalWeight,\n },\n ];\n }),\n ) as Record<HeadingLevel, UiHeadingStep>;\n}\n\n/** The host's MUI theme in the shape the native renderer reads. */\nexport function uiThemeFromMui(theme: Theme): UiTheme {\n const { palette } = theme;\n const unit = cssLengthToPx(theme.spacing(1), 8);\n const md = cssLengthToPx(theme.shape.borderRadius, 4);\n\n return {\n mode: palette.mode,\n palette: {\n mode: palette.mode,\n primary: slot(palette.primary),\n secondary: slot(palette.secondary),\n success: slot(palette.success),\n warning: slot(palette.warning),\n info: slot(palette.info),\n danger: slot(palette.error),\n neutral: accentFor(theme, 'neutral'),\n text: {\n primary: palette.text.primary,\n secondary: palette.text.secondary,\n disabled: palette.text.disabled,\n },\n background: { default: palette.background.default, paper: palette.background.paper },\n divider: palette.divider,\n action: {\n active: palette.action.active,\n hover: palette.action.hover,\n selected: palette.action.selected,\n disabled: palette.action.disabled,\n disabledBackground: palette.action.disabledBackground,\n focus: palette.action.focus,\n },\n grey: {\n 50: palette.grey[50],\n 100: palette.grey[100],\n 200: palette.grey[200],\n 300: palette.grey[300],\n 400: palette.grey[400],\n 500: palette.grey[500],\n 600: palette.grey[600],\n 700: palette.grey[700],\n 800: palette.grey[800],\n 900: palette.grey[900],\n },\n },\n spacing: (units: number) => units * unit,\n spacingUnit: unit,\n radius: { sm: md / 2, md, lg: md * 2, xl: md * 4, full: 9999, field: fieldRadius(theme) },\n fieldHeight: resolveFieldHeight(theme.fieldHeight),\n // A bare MUI theme (never built through `createUiTheme`/`muiThemeOptionsFrom`)\n // carries no `theme.density` — read back as `'normal'`, factor `1`.\n density: theme.density ?? resolveDensityFactor(),\n typography: {\n fontFamily: theme.typography.fontFamily ?? WEB_FONT_FAMILY,\n monospaceFontFamily: WEB_MONOSPACE_FONT_FAMILY,\n sizes: TYPE_SIZES,\n weights: FONT_WEIGHTS,\n heading: headingSteps(theme),\n },\n zIndex: {\n appBar: theme.zIndex.appBar,\n drawer: theme.zIndex.drawer,\n modal: theme.zIndex.modal,\n snackbar: theme.zIndex.snackbar,\n tooltip: theme.zIndex.tooltip,\n },\n };\n}\n\n/** A `UiTheme` as the options MUI's `createTheme` builds the same palette from. */\nexport function muiThemeOptionsFrom(ui: UiTheme): ThemeOptions {\n const { palette } = ui;\n return {\n palette: {\n mode: palette.mode,\n primary: { ...palette.primary },\n secondary: { ...palette.secondary },\n success: { ...palette.success },\n warning: { ...palette.warning },\n info: { ...palette.info },\n error: { ...palette.danger },\n text: { ...palette.text },\n background: { ...palette.background },\n divider: palette.divider,\n action: { ...palette.action },\n grey: { ...palette.grey },\n },\n shape: { borderRadius: ui.radius.md },\n fieldRadius: ui.radius.field,\n fieldHeight: ui.fieldHeight,\n // Additive: children 3/4 (FUT-2767/2768) each add one more source here as\n // their own geometry overrides land — this PR (FUT-2766) adds IconButton's\n // and Chip's.\n components: mergeMuiComponents(\n fieldOverrides(ui.radius.field, ui.fieldHeight),\n iconButtonDensityOverrides(),\n chipDensityOverrides(),\n ),\n spacing: ui.spacingUnit,\n density: ui.density,\n typography: {\n fontFamily: ui.typography.fontFamily ?? WEB_FONT_FAMILY,\n // MUI multiplies every `pxToRem` size by `fontSize / 14` — the lever a\n // density mode moves (`./tokens/relative.ts`). `htmlFontSize` stays\n // untouched: that is a reader's own zoom/accessibility setting, not this.\n fontSize: densityFontSize(ui.density.factor),\n },\n zIndex: { ...ui.zIndex },\n };\n}\n"],"mappings":"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","names":[]}