@12-apps/ui 6.52.1 → 6.54.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 (298) hide show
  1. package/components-catalog.md +1 -1
  2. package/dist/_internal/components/data-display/AlertDialog/AlertDialog.js +2 -1
  3. package/dist/_internal/components/data-display/AlertDialog/AlertDialog.parts.js +9 -0
  4. package/dist/_internal/components/data-display/AlertDialog/AlertDialog.parts.js.map +1 -0
  5. package/dist/_internal/components/data-display/Avatar/Avatar.js +3 -3
  6. package/dist/_internal/components/data-display/Avatar/Avatar.view.js +2 -2
  7. package/dist/_internal/components/data-display/CardKit/use-remove-confirm.js +7 -6
  8. package/dist/_internal/components/data-display/CardKit/use-row-confirm.js +7 -6
  9. package/dist/_internal/components/data-display/Chart/SpecChart.js +3 -3
  10. package/dist/_internal/components/data-display/Chart/chart-spec.js +2 -2
  11. package/dist/_internal/components/data-display/DataViews/DataViewsGrid.js +24 -24
  12. package/dist/_internal/components/data-display/DataViews/DataViewsTableBase.js +33 -32
  13. package/dist/_internal/components/data-display/DataViews/ManageViewsDialog.js +7 -6
  14. package/dist/_internal/components/data-display/DataViews/base-list-card-geometry.js +4 -4
  15. package/dist/_internal/components/data-display/DataViews/base-list-card-slots.js +3 -3
  16. package/dist/_internal/components/data-display/DataViews/base-list-card.js +6 -6
  17. package/dist/_internal/components/data-display/DataViews/data-views-category-pill.js +6 -6
  18. package/dist/_internal/components/data-display/DataViews/data-views-display-panel.js +2 -2
  19. package/dist/_internal/components/data-display/DataViews/data-views-filter-panel.js +9 -9
  20. package/dist/_internal/components/data-display/DataViews/data-views-grid-bodies.js +3 -3
  21. package/dist/_internal/components/data-display/DataViews/data-views-grid-parts.js +21 -21
  22. package/dist/_internal/components/data-display/DataViews/data-views-inline-bar.js +11 -11
  23. package/dist/_internal/components/data-display/DataViews/data-views-more-fields.js +9 -9
  24. package/dist/_internal/components/data-display/DataViews/data-views-more-filters.js +10 -10
  25. package/dist/_internal/components/data-display/DataViews/data-views-range-pill.js +2 -2
  26. package/dist/_internal/components/data-display/DataViews/data-views-shell-toolbar.js +6 -6
  27. package/dist/_internal/components/data-display/DataViews/data-views-table-parts.js +9 -8
  28. package/dist/_internal/components/data-display/DataViews/data-views-toolbar.js +5 -5
  29. package/dist/_internal/components/data-display/DataViews/list-card-rails.js +2 -2
  30. package/dist/_internal/components/data-display/DataViews/use-data-views-state.js +2 -2
  31. package/dist/_internal/components/data-display/FleetMap/FleetBody.js +4 -4
  32. package/dist/_internal/components/data-display/FleetMap/FleetCanvas.js +3 -3
  33. package/dist/_internal/components/data-display/FleetMap/FleetMap.fixtures.js +2 -2
  34. package/dist/_internal/components/data-display/FleetMap/FleetMap.js +5 -5
  35. package/dist/_internal/components/data-display/HoverCard/HoverCard.js +2 -2
  36. package/dist/_internal/components/data-display/InteractiveTooltip/InteractiveTooltip.hooks.js +3 -1
  37. package/dist/_internal/components/data-display/InteractiveTooltip/InteractiveTooltip.js +2 -2
  38. package/dist/_internal/components/data-display/Lightbox/Lightbox.js +3 -3
  39. package/dist/_internal/components/data-display/MapPreview/MapPreview.js +2 -2
  40. package/dist/_internal/components/data-display/Progress/Progress.js +2 -2
  41. package/dist/_internal/components/data-display/Sheet/Sheet.hooks.js +2 -2
  42. package/dist/_internal/components/data-display/Sheet/Sheet.js +4 -4
  43. package/dist/_internal/components/data-display/index.js +29 -28
  44. package/dist/_internal/components/feedback/ConfirmAction/ConfirmAction.js +4 -3
  45. package/dist/_internal/components/feedback/ConfirmAction/ConfirmAction.parts.js +3 -2
  46. package/dist/_internal/components/feedback/ConfirmAction/ConfirmButton.js +5 -4
  47. package/dist/_internal/components/feedback/ConfirmAction/with-confirmation.js +4 -3
  48. package/dist/_internal/components/feedback/index.js +8 -7
  49. package/dist/_internal/components/form/AddressAutocomplete/AddressAutocomplete.hooks.js +2 -2
  50. package/dist/_internal/components/form/AddressAutocomplete/AddressAutocomplete.js +5 -5
  51. package/dist/_internal/components/form/Autocomplete/Autocomplete.js +2 -2
  52. package/dist/_internal/components/form/Calendar/Calendar.hooks.js +2 -2
  53. package/dist/_internal/components/form/Calendar/Calendar.js +3 -3
  54. package/dist/_internal/components/form/CategorySelect/CategoryPanel.js +1 -1
  55. package/dist/_internal/components/form/CategorySelect/CategorySelect.js +4 -4
  56. package/dist/_internal/components/form/Command/Command.js +3 -3
  57. package/dist/_internal/components/form/DateRangePicker/DateRangePicker.js +5 -5
  58. package/dist/_internal/components/form/UploadButton/UploadButton.js +2 -2
  59. package/dist/_internal/components/form/index.js +22 -22
  60. package/dist/_internal/components/form/total-form/Fields/CategoryField.js +5 -5
  61. package/dist/_internal/components/form/total-form/Fields/index.js +9 -9
  62. package/dist/_internal/components/index.js +72 -70
  63. package/dist/_internal/components/layout/ScrollArea/ScrollArea.js +2 -2
  64. package/dist/_internal/components/layout/SettingCard/SettingCard.js +9 -4
  65. package/dist/_internal/components/layout/SettingCard/SettingCard.metrics.js +1 -1
  66. package/dist/_internal/components/layout/SettingCard/SettingCard.parts.js +3 -3
  67. package/dist/_internal/components/layout/SettingCard/SettingCard.styles.js +6 -2
  68. package/dist/_internal/components/layout/SettingCard/SettingCard.summary.js +63 -0
  69. package/dist/_internal/components/layout/SettingCard/SettingCard.summary.js.map +1 -0
  70. package/dist/_internal/components/layout/SettingCard/SettingGrid.js +4 -4
  71. package/dist/_internal/components/layout/SettingCard/SettingGroup.js +10 -5
  72. package/dist/_internal/components/layout/SettingCard/SettingSwitch.js +9 -4
  73. package/dist/_internal/components/layout/SettingCard/SettingToggle.js +10 -5
  74. package/dist/_internal/components/layout/index.js +18 -13
  75. package/dist/_internal/components/navigation/AppHeader/AppHeader.details.js +5 -5
  76. package/dist/_internal/components/navigation/index.js +5 -5
  77. package/dist/_internal/en-US.data-display.js +2 -2
  78. package/dist/_internal/en-US.layout.js +1 -1
  79. package/dist/_internal/pt-BR.data-display.js +2 -2
  80. package/dist/_internal/pt-BR.layout.js +1 -1
  81. package/dist/_internal/user-avatar/user-avatar.js +4 -4
  82. package/dist/charts.js +6 -6
  83. package/dist/{chunk-GXQDWHPN.js → chunk-2CJZLL5Y.js} +2 -2
  84. package/dist/{chunk-57VL5UX7.js → chunk-2JTZWQ25.js} +6 -4
  85. package/dist/chunk-2JTZWQ25.js.map +1 -0
  86. package/dist/{chunk-STTULW2K.js → chunk-2KVWOTEQ.js} +5 -5
  87. package/dist/{chunk-ISW5K72V.js → chunk-2ZRZTGWP.js} +5 -5
  88. package/dist/{chunk-QOLIBVGS.js → chunk-3CIIB74Y.js} +2 -2
  89. package/dist/{chunk-33L26P4J.js → chunk-3ZKGNEP2.js} +5 -3
  90. package/dist/{chunk-33L26P4J.js.map → chunk-3ZKGNEP2.js.map} +1 -1
  91. package/dist/{chunk-2OTBMU5Z.js → chunk-44LYXLW7.js} +7 -7
  92. package/dist/{chunk-OG6LYQ7C.js → chunk-4PFKMNLP.js} +8 -68
  93. package/dist/chunk-4PFKMNLP.js.map +1 -0
  94. package/dist/{chunk-LYVTJLCF.js → chunk-56JF5PZK.js} +4 -4
  95. package/dist/{chunk-5KGABAQB.js → chunk-5752357K.js} +4 -4
  96. package/dist/{chunk-SPZAEMGW.js → chunk-5WX6U34F.js} +4 -4
  97. package/dist/{chunk-QHXMNSOZ.js → chunk-6L6VXRLJ.js} +2 -2
  98. package/dist/{chunk-VVFASSFY.js → chunk-6VGB4OX2.js} +3 -3
  99. package/dist/{chunk-FRP7NM6X.js → chunk-6WZUKV55.js} +2 -2
  100. package/dist/{chunk-QEINKMMX.js → chunk-7C763T3K.js} +2 -2
  101. package/dist/{chunk-PARTZ7XI.js → chunk-7JKDB5J5.js} +4 -4
  102. package/dist/{chunk-G5XHAN56.js → chunk-7WWPKA7Y.js} +3 -3
  103. package/dist/{chunk-3U7WKBMH.js → chunk-AA2X5GOT.js} +5 -3
  104. package/dist/{chunk-3U7WKBMH.js.map → chunk-AA2X5GOT.js.map} +1 -1
  105. package/dist/{chunk-QYV7KLEN.js → chunk-ASGSC5UA.js} +5 -5
  106. package/dist/{chunk-7GQ2ZZBQ.js → chunk-BCTRC6AR.js} +2 -2
  107. package/dist/{chunk-XSHWEUDB.js → chunk-BE5Z36XZ.js} +4 -4
  108. package/dist/{chunk-IC7GHPMK.js → chunk-BFRVMCQM.js} +7 -2
  109. package/dist/chunk-BFRVMCQM.js.map +1 -0
  110. package/dist/{chunk-PM7SI4YT.js → chunk-BJOKL5PQ.js} +5 -5
  111. package/dist/{chunk-PGPPN63I.js → chunk-EMEXXAQI.js} +2 -2
  112. package/dist/{chunk-JUHNEYCH.js → chunk-GCH7CLM4.js} +2 -2
  113. package/dist/{chunk-R6SBP5M5.js → chunk-GOWBYHYW.js} +4 -4
  114. package/dist/{chunk-LZQQ4JXY.js → chunk-HGVPPJKE.js} +8 -8
  115. package/dist/{chunk-HCEJT65A.js → chunk-HKD4TDZP.js} +2 -2
  116. package/dist/{chunk-XNBX3M35.js → chunk-HLCEKWFS.js} +4 -4
  117. package/dist/{chunk-4MGFUPQT.js → chunk-HOJL2GKW.js} +4 -4
  118. package/dist/{chunk-V5ZLUJV7.js → chunk-HRMB72E4.js} +2 -2
  119. package/dist/{chunk-3GVMUASU.js → chunk-HV7HIMMY.js} +2 -2
  120. package/dist/{chunk-CSDVRHUX.js → chunk-HWBKMUMV.js} +4 -4
  121. package/dist/{chunk-KN3WYEH2.js → chunk-IA6F7DU6.js} +4 -4
  122. package/dist/{chunk-BE5FGUJS.js → chunk-IM5SR7G2.js} +2 -2
  123. package/dist/chunk-IQQX3NDO.js +96 -0
  124. package/dist/chunk-IQQX3NDO.js.map +1 -0
  125. package/dist/{chunk-PJVDIUT2.js → chunk-IRNKHHQM.js} +3 -3
  126. package/dist/{chunk-4XET5MWR.js → chunk-KKE4SHRS.js} +2 -2
  127. package/dist/{chunk-ZTTFLIPH.js → chunk-L624DFJV.js} +2 -2
  128. package/dist/{chunk-OYT7YXQL.js → chunk-MGPN5TZE.js} +5 -5
  129. package/dist/{chunk-ERY6D2OV.js → chunk-MWPXKZ7O.js} +4 -4
  130. package/dist/{chunk-SCCE6VWY.js → chunk-N2Z7NHD5.js} +2 -2
  131. package/dist/chunk-N4R6T5K7.js +95 -0
  132. package/dist/chunk-N4R6T5K7.js.map +1 -0
  133. package/dist/{chunk-GNHXFJRR.js → chunk-N6EEY7V3.js} +2 -2
  134. package/dist/{chunk-OEBHWQSX.js → chunk-OESAYTNG.js} +9 -4
  135. package/dist/chunk-OESAYTNG.js.map +1 -0
  136. package/dist/{chunk-4WCDMCIS.js → chunk-PI3GPLE2.js} +2 -2
  137. package/dist/{chunk-XAUKQZJK.js → chunk-QX4LMVL2.js} +2 -2
  138. package/dist/{chunk-S5UY5U73.js → chunk-QYJ25FWM.js} +20 -2
  139. package/dist/{chunk-S5UY5U73.js.map → chunk-QYJ25FWM.js.map} +1 -1
  140. package/dist/{chunk-6PYX6V3R.js → chunk-RJXVVLBO.js} +4 -4
  141. package/dist/{chunk-FRCBJLV5.js → chunk-RKKYSSAV.js} +5 -5
  142. package/dist/{chunk-WF7BZT6V.js → chunk-RR6BIHFX.js} +2 -2
  143. package/dist/{chunk-NGAU6PNB.js → chunk-RRVQVQF7.js} +5 -5
  144. package/dist/{chunk-FWPFCK4D.js → chunk-S6G3CJFP.js} +2 -2
  145. package/dist/{chunk-F33YKDO2.js → chunk-TEST2NBS.js} +5 -5
  146. package/dist/{chunk-BJZOBG24.js → chunk-UJHXEOU3.js} +2 -2
  147. package/dist/{chunk-NKJSYZEU.js → chunk-V32626FV.js} +4 -4
  148. package/dist/{chunk-MLDA44NW.js → chunk-VGXSPUTD.js} +3 -3
  149. package/dist/{chunk-U4QUDFPJ.js → chunk-VKVOP4OK.js} +2 -2
  150. package/dist/{chunk-CTXF22BU.js → chunk-VODKYDC4.js} +5 -5
  151. package/dist/{chunk-DWJH3KXN.js → chunk-WAKGVAOB.js} +4 -4
  152. package/dist/{chunk-3DO5AJCG.js → chunk-WE2LNTR6.js} +12 -5
  153. package/dist/chunk-WE2LNTR6.js.map +1 -0
  154. package/dist/{chunk-SZA44EFA.js → chunk-WOEVBEGJ.js} +4 -4
  155. package/dist/{chunk-EOTV5BLM.js → chunk-WOP2DRMC.js} +2 -2
  156. package/dist/{chunk-E6JRPGMN.js → chunk-X3DVZNZH.js} +2 -2
  157. package/dist/{chunk-MLQYIJTO.js → chunk-XM7QCNZQ.js} +9 -3
  158. package/dist/chunk-XM7QCNZQ.js.map +1 -0
  159. package/dist/{chunk-P35CTP6L.js → chunk-Y3WB66XT.js} +7 -7
  160. package/dist/{chunk-DI46ZEWP.js → chunk-Y5QDXG5N.js} +20 -4
  161. package/dist/chunk-Y5QDXG5N.js.map +1 -0
  162. package/dist/{chunk-TNQDSTIA.js → chunk-Y6C4MYZE.js} +7 -7
  163. package/dist/{chunk-TBZKUZNW.js → chunk-ZPWU7Z6O.js} +3 -3
  164. package/dist/{chunk-QQSRZUT4.js → chunk-ZXEDKRRT.js} +4 -4
  165. package/dist/data-display/AlertDialog.js +2 -1
  166. package/dist/data-display/Avatar.js +3 -3
  167. package/dist/data-display/CardKit.js +14 -13
  168. package/dist/data-display/Chart.js +6 -6
  169. package/dist/data-display/DataViews.js +42 -41
  170. package/dist/data-display/FleetMap.js +5 -5
  171. package/dist/data-display/HoverCard.js +2 -2
  172. package/dist/data-display/InteractiveTooltip.js +2 -2
  173. package/dist/data-display/Lightbox.js +3 -3
  174. package/dist/data-display/MapPreview.js +2 -2
  175. package/dist/data-display/Progress.js +2 -2
  176. package/dist/data-display/Sheet.js +4 -4
  177. package/dist/en-US.js +2 -2
  178. package/dist/feedback/ConfirmAction.js +8 -7
  179. package/dist/form/AddressAutocomplete.js +5 -5
  180. package/dist/form/Autocomplete.js +2 -2
  181. package/dist/form/Calendar.js +3 -3
  182. package/dist/form/CategorySelect.js +4 -4
  183. package/dist/form/Command.js +3 -3
  184. package/dist/form/DateRangePicker.js +10 -10
  185. package/dist/form/UploadButton.js +2 -2
  186. package/dist/form/total-form.js +7 -7
  187. package/dist/layout/ContentToolbar.js +3 -3
  188. package/dist/layout/ScrollArea.js +2 -2
  189. package/dist/layout/SettingCard.js +13 -8
  190. package/dist/locales.js +4 -4
  191. package/dist/navigation/AppHeader.js +5 -5
  192. package/dist/pt-BR.js +2 -2
  193. package/dist/types/components/data-display/AlertDialog/AlertDialog.d.ts.map +1 -1
  194. package/dist/types/components/data-display/AlertDialog/AlertDialog.parts.d.ts +13 -0
  195. package/dist/types/components/data-display/AlertDialog/AlertDialog.parts.d.ts.map +1 -0
  196. package/dist/types/components/data-display/AlertDialog/AlertDialog.types.d.ts +16 -3
  197. package/dist/types/components/data-display/AlertDialog/AlertDialog.types.d.ts.map +1 -1
  198. package/dist/types/components/data-display/InteractiveTooltip/InteractiveTooltip.d.ts.map +1 -1
  199. package/dist/types/components/data-display/InteractiveTooltip/InteractiveTooltip.hooks.d.ts +18 -0
  200. package/dist/types/components/data-display/InteractiveTooltip/InteractiveTooltip.hooks.d.ts.map +1 -1
  201. package/dist/types/components/layout/SettingCard/SettingCard.d.ts.map +1 -1
  202. package/dist/types/components/layout/SettingCard/SettingCard.metrics.d.ts +5 -0
  203. package/dist/types/components/layout/SettingCard/SettingCard.metrics.d.ts.map +1 -1
  204. package/dist/types/components/layout/SettingCard/SettingCard.parts.d.ts +2 -0
  205. package/dist/types/components/layout/SettingCard/SettingCard.parts.d.ts.map +1 -1
  206. package/dist/types/components/layout/SettingCard/SettingCard.styles.d.ts +9 -2
  207. package/dist/types/components/layout/SettingCard/SettingCard.styles.d.ts.map +1 -1
  208. package/dist/types/components/layout/SettingCard/SettingCard.summary.d.ts +33 -0
  209. package/dist/types/components/layout/SettingCard/SettingCard.summary.d.ts.map +1 -0
  210. package/dist/types/components/layout/SettingCard/SettingSwitch.d.ts.map +1 -1
  211. package/dist/types/copy/layout.d.ts +8 -0
  212. package/dist/types/copy/layout.d.ts.map +1 -1
  213. package/dist/types/en-US.layout.d.ts.map +1 -1
  214. package/dist/types/pt-BR.layout.d.ts.map +1 -1
  215. package/dist/user-avatar.js +4 -4
  216. package/package.json +1 -1
  217. package/src/components/data-display/AlertDialog/AlertDialog.md +30 -0
  218. package/src/components/data-display/AlertDialog/AlertDialog.parts.tsx +180 -0
  219. package/src/components/data-display/AlertDialog/AlertDialog.tsx +5 -85
  220. package/src/components/data-display/AlertDialog/AlertDialog.types.ts +17 -3
  221. package/src/components/data-display/InteractiveTooltip/InteractiveTooltip.hooks.ts +36 -0
  222. package/src/components/data-display/InteractiveTooltip/InteractiveTooltip.tsx +7 -2
  223. package/src/components/layout/SettingCard/SettingCard.md +1 -1
  224. package/src/components/layout/SettingCard/SettingCard.metrics.ts +5 -0
  225. package/src/components/layout/SettingCard/SettingCard.parts.tsx +4 -0
  226. package/src/components/layout/SettingCard/SettingCard.styles.ts +17 -5
  227. package/src/components/layout/SettingCard/SettingCard.summary.tsx +100 -0
  228. package/src/components/layout/SettingCard/SettingCard.tsx +6 -2
  229. package/src/components/layout/SettingCard/SettingSwitch.tsx +11 -2
  230. package/src/components/layout/SettingCard/SettingToggle.md +1 -1
  231. package/src/copy/layout.ts +8 -0
  232. package/src/en-US.layout.ts +2 -0
  233. package/src/pt-BR.layout.ts +2 -0
  234. package/dist/chunk-3DO5AJCG.js.map +0 -1
  235. package/dist/chunk-57VL5UX7.js.map +0 -1
  236. package/dist/chunk-DI46ZEWP.js.map +0 -1
  237. package/dist/chunk-IC7GHPMK.js.map +0 -1
  238. package/dist/chunk-MLQYIJTO.js.map +0 -1
  239. package/dist/chunk-OEBHWQSX.js.map +0 -1
  240. package/dist/chunk-OG6LYQ7C.js.map +0 -1
  241. /package/dist/{chunk-GXQDWHPN.js.map → chunk-2CJZLL5Y.js.map} +0 -0
  242. /package/dist/{chunk-STTULW2K.js.map → chunk-2KVWOTEQ.js.map} +0 -0
  243. /package/dist/{chunk-ISW5K72V.js.map → chunk-2ZRZTGWP.js.map} +0 -0
  244. /package/dist/{chunk-QOLIBVGS.js.map → chunk-3CIIB74Y.js.map} +0 -0
  245. /package/dist/{chunk-2OTBMU5Z.js.map → chunk-44LYXLW7.js.map} +0 -0
  246. /package/dist/{chunk-LYVTJLCF.js.map → chunk-56JF5PZK.js.map} +0 -0
  247. /package/dist/{chunk-5KGABAQB.js.map → chunk-5752357K.js.map} +0 -0
  248. /package/dist/{chunk-SPZAEMGW.js.map → chunk-5WX6U34F.js.map} +0 -0
  249. /package/dist/{chunk-QHXMNSOZ.js.map → chunk-6L6VXRLJ.js.map} +0 -0
  250. /package/dist/{chunk-VVFASSFY.js.map → chunk-6VGB4OX2.js.map} +0 -0
  251. /package/dist/{chunk-FRP7NM6X.js.map → chunk-6WZUKV55.js.map} +0 -0
  252. /package/dist/{chunk-QEINKMMX.js.map → chunk-7C763T3K.js.map} +0 -0
  253. /package/dist/{chunk-PARTZ7XI.js.map → chunk-7JKDB5J5.js.map} +0 -0
  254. /package/dist/{chunk-G5XHAN56.js.map → chunk-7WWPKA7Y.js.map} +0 -0
  255. /package/dist/{chunk-QYV7KLEN.js.map → chunk-ASGSC5UA.js.map} +0 -0
  256. /package/dist/{chunk-7GQ2ZZBQ.js.map → chunk-BCTRC6AR.js.map} +0 -0
  257. /package/dist/{chunk-XSHWEUDB.js.map → chunk-BE5Z36XZ.js.map} +0 -0
  258. /package/dist/{chunk-PM7SI4YT.js.map → chunk-BJOKL5PQ.js.map} +0 -0
  259. /package/dist/{chunk-PGPPN63I.js.map → chunk-EMEXXAQI.js.map} +0 -0
  260. /package/dist/{chunk-JUHNEYCH.js.map → chunk-GCH7CLM4.js.map} +0 -0
  261. /package/dist/{chunk-R6SBP5M5.js.map → chunk-GOWBYHYW.js.map} +0 -0
  262. /package/dist/{chunk-LZQQ4JXY.js.map → chunk-HGVPPJKE.js.map} +0 -0
  263. /package/dist/{chunk-HCEJT65A.js.map → chunk-HKD4TDZP.js.map} +0 -0
  264. /package/dist/{chunk-XNBX3M35.js.map → chunk-HLCEKWFS.js.map} +0 -0
  265. /package/dist/{chunk-4MGFUPQT.js.map → chunk-HOJL2GKW.js.map} +0 -0
  266. /package/dist/{chunk-V5ZLUJV7.js.map → chunk-HRMB72E4.js.map} +0 -0
  267. /package/dist/{chunk-3GVMUASU.js.map → chunk-HV7HIMMY.js.map} +0 -0
  268. /package/dist/{chunk-CSDVRHUX.js.map → chunk-HWBKMUMV.js.map} +0 -0
  269. /package/dist/{chunk-KN3WYEH2.js.map → chunk-IA6F7DU6.js.map} +0 -0
  270. /package/dist/{chunk-BE5FGUJS.js.map → chunk-IM5SR7G2.js.map} +0 -0
  271. /package/dist/{chunk-PJVDIUT2.js.map → chunk-IRNKHHQM.js.map} +0 -0
  272. /package/dist/{chunk-4XET5MWR.js.map → chunk-KKE4SHRS.js.map} +0 -0
  273. /package/dist/{chunk-ZTTFLIPH.js.map → chunk-L624DFJV.js.map} +0 -0
  274. /package/dist/{chunk-OYT7YXQL.js.map → chunk-MGPN5TZE.js.map} +0 -0
  275. /package/dist/{chunk-ERY6D2OV.js.map → chunk-MWPXKZ7O.js.map} +0 -0
  276. /package/dist/{chunk-SCCE6VWY.js.map → chunk-N2Z7NHD5.js.map} +0 -0
  277. /package/dist/{chunk-GNHXFJRR.js.map → chunk-N6EEY7V3.js.map} +0 -0
  278. /package/dist/{chunk-4WCDMCIS.js.map → chunk-PI3GPLE2.js.map} +0 -0
  279. /package/dist/{chunk-XAUKQZJK.js.map → chunk-QX4LMVL2.js.map} +0 -0
  280. /package/dist/{chunk-6PYX6V3R.js.map → chunk-RJXVVLBO.js.map} +0 -0
  281. /package/dist/{chunk-FRCBJLV5.js.map → chunk-RKKYSSAV.js.map} +0 -0
  282. /package/dist/{chunk-WF7BZT6V.js.map → chunk-RR6BIHFX.js.map} +0 -0
  283. /package/dist/{chunk-NGAU6PNB.js.map → chunk-RRVQVQF7.js.map} +0 -0
  284. /package/dist/{chunk-FWPFCK4D.js.map → chunk-S6G3CJFP.js.map} +0 -0
  285. /package/dist/{chunk-F33YKDO2.js.map → chunk-TEST2NBS.js.map} +0 -0
  286. /package/dist/{chunk-BJZOBG24.js.map → chunk-UJHXEOU3.js.map} +0 -0
  287. /package/dist/{chunk-NKJSYZEU.js.map → chunk-V32626FV.js.map} +0 -0
  288. /package/dist/{chunk-MLDA44NW.js.map → chunk-VGXSPUTD.js.map} +0 -0
  289. /package/dist/{chunk-U4QUDFPJ.js.map → chunk-VKVOP4OK.js.map} +0 -0
  290. /package/dist/{chunk-CTXF22BU.js.map → chunk-VODKYDC4.js.map} +0 -0
  291. /package/dist/{chunk-DWJH3KXN.js.map → chunk-WAKGVAOB.js.map} +0 -0
  292. /package/dist/{chunk-SZA44EFA.js.map → chunk-WOEVBEGJ.js.map} +0 -0
  293. /package/dist/{chunk-EOTV5BLM.js.map → chunk-WOP2DRMC.js.map} +0 -0
  294. /package/dist/{chunk-E6JRPGMN.js.map → chunk-X3DVZNZH.js.map} +0 -0
  295. /package/dist/{chunk-P35CTP6L.js.map → chunk-Y3WB66XT.js.map} +0 -0
  296. /package/dist/{chunk-TNQDSTIA.js.map → chunk-Y6C4MYZE.js.map} +0 -0
  297. /package/dist/{chunk-TBZKUZNW.js.map → chunk-ZPWU7Z6O.js.map} +0 -0
  298. /package/dist/{chunk-QQSRZUT4.js.map → chunk-ZXEDKRRT.js.map} +0 -0
@@ -29,9 +29,16 @@ export declare const headerStyles: (theme: Theme) => CSSObject;
29
29
  * take the page's text colour onto its own surface.
30
30
  */
31
31
  export declare const titleStyles: (theme: Theme) => CSSObject;
32
- /** The one line a closed card shows. Long values end in an ellipsis, not a second line. */
32
+ /** The most lines a card's summary shows before the rest goes behind the [i]. */
33
+ export declare const SUMMARY_MAX_LINES = 2;
34
+ /**
35
+ * Two lines at most, cut with an ellipsis. Visual only: the whole sentence stays
36
+ * in the DOM, so a switch that is `aria-describedby` it still reads all of it.
37
+ */
38
+ export declare const clampStyles: CSSObject;
39
+ /** A closed card's value: two lines at most, the rest behind the [i]. */
33
40
  export declare const summaryStyles: (theme: Theme) => CSSObject;
34
- /** A switch card's explanation, which may wrap: it is read, not scanned. */
41
+ /** A switch card's explanation; `SettingSwitchBlock` clamps it (see `clampStyles`). */
35
42
  export declare const descriptionStyles: (theme: Theme) => CSSObject;
36
43
  /** The inactive group's hint: a glyph and the sentence, so it does not read as a second summary. */
37
44
  export declare const hintStyles: (theme: Theme) => CSSObject;
@@ -1 +1 @@
1
- {"version":3,"file":"SettingCard.styles.d.ts","sourceRoot":"","sources":["../../../../../src/components/layout/SettingCard/SettingCard.styles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,+BAA+B,CAAC;AAO/E;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,2BAA2B,CAAC;AAE/D,+FAA+F;AAC/F,eAAO,MAAM,YAAY,GACvB,KAAK,OAAO,CAAC,KAAK,CAAC,EACnB,IAAI,OAAO,CAAC,KAAK,CAAC,GAAG,SAAS,KAC7B,OAAO,CAAC,KAAK,CAAgE,CAAC;AAEjF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,aAAa,GAAI,OAAO,KAAK,EAAE,MAAM,OAAO,KAAG,SAgB1D,CAAC;AAEH,mEAAmE;AACnE,eAAO,MAAM,UAAU,GAAI,OAAO,KAAK,KAAG,SAMxC,CAAC;AAEH,eAAO,MAAM,YAAY,GAAI,OAAO,KAAK,KAAG,SAK1C,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,WAAW,GAAI,OAAO,KAAK,KAAG,SAOzC,CAAC;AAEH,2FAA2F;AAC3F,eAAO,MAAM,aAAa,GAAI,OAAO,KAAK,KAAG,SAO3C,CAAC;AAEH,4EAA4E;AAC5E,eAAO,MAAM,iBAAiB,GAAI,OAAO,KAAK,KAAG,SAI/C,CAAC;AAEH,oGAAoG;AACpG,eAAO,MAAM,UAAU,GAAI,OAAO,KAAK,KAAG,SAOxC,CAAC;AAEH,eAAO,MAAM,WAAW,GAAI,OAAO,KAAK,KAAG,SAIzC,CAAC;AAEH,eAAO,MAAM,aAAa,GAAI,OAAO,KAAK,KAAG,SAM3C,CAAC;AAEH,eAAO,MAAM,UAAU,GAAI,OAAO,KAAK,KAAG,SAIxC,CAAC;AAEH;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,GAAI,OAAO,KAAK,EAAE,QAAQ,OAAO,KAAG,SAQ/D,CAAC"}
1
+ {"version":3,"file":"SettingCard.styles.d.ts","sourceRoot":"","sources":["../../../../../src/components/layout/SettingCard/SettingCard.styles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,+BAA+B,CAAC;AAO/E;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,2BAA2B,CAAC;AAE/D,+FAA+F;AAC/F,eAAO,MAAM,YAAY,GACvB,KAAK,OAAO,CAAC,KAAK,CAAC,EACnB,IAAI,OAAO,CAAC,KAAK,CAAC,GAAG,SAAS,KAC7B,OAAO,CAAC,KAAK,CAAgE,CAAC;AAEjF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,aAAa,GAAI,OAAO,KAAK,EAAE,MAAM,OAAO,KAAG,SAgB1D,CAAC;AAEH,mEAAmE;AACnE,eAAO,MAAM,UAAU,GAAI,OAAO,KAAK,KAAG,SAMxC,CAAC;AAEH,eAAO,MAAM,YAAY,GAAI,OAAO,KAAK,KAAG,SAK1C,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,WAAW,GAAI,OAAO,KAAK,KAAG,SAOzC,CAAC;AAEH,iFAAiF;AACjF,eAAO,MAAM,iBAAiB,IAAI,CAAC;AAEnC;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,SAKzB,CAAC;AAEF,yEAAyE;AACzE,eAAO,MAAM,aAAa,GAAI,OAAO,KAAK,KAAG,SAK3C,CAAC;AAEH,uFAAuF;AACvF,eAAO,MAAM,iBAAiB,GAAI,OAAO,KAAK,KAAG,SAI/C,CAAC;AAEH,oGAAoG;AACpG,eAAO,MAAM,UAAU,GAAI,OAAO,KAAK,KAAG,SAOxC,CAAC;AAEH,eAAO,MAAM,WAAW,GAAI,OAAO,KAAK,KAAG,SAIzC,CAAC;AAEH,eAAO,MAAM,aAAa,GAAI,OAAO,KAAK,KAAG,SAM3C,CAAC;AAEH,eAAO,MAAM,UAAU,GAAI,OAAO,KAAK,KAAG,SAIxC,CAAC;AAEH;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,GAAI,OAAO,KAAK,EAAE,QAAQ,OAAO,KAAG,SAQ/D,CAAC"}
@@ -0,0 +1,33 @@
1
+ import React from 'react';
2
+ /**
3
+ * Whether a clamped element is hiding text — measured, never guessed from the
4
+ * string's length, because what fits depends on the width the card is GIVEN.
5
+ * Re-measured whenever the element resizes, so a card that widens drops its [i].
6
+ */
7
+ export declare const useClamped: (content?: unknown) => {
8
+ ref: (node: HTMLElement | null) => void;
9
+ clamped: boolean;
10
+ };
11
+ /**
12
+ * The [i] beside a card's title while its summary is cut: hover shows the whole
13
+ * text, a click or tap pins it — so it works on a phone, where there is no hover.
14
+ */
15
+ export declare const SummaryInfo: React.FC<{
16
+ label: string;
17
+ summary: React.ReactNode;
18
+ dataTestId?: string;
19
+ }>;
20
+ /**
21
+ * The summary's measuring ref, and the [i] for the header while it is cut —
22
+ * `null` when there is no summary, it fits, or `show` is false (an open card).
23
+ */
24
+ export declare const useSummaryInfo: ({ summary, show, label, dataTestId, }: {
25
+ summary: React.ReactNode;
26
+ show?: boolean;
27
+ label: string;
28
+ dataTestId?: string;
29
+ }) => {
30
+ ref: (node: HTMLElement | null) => void;
31
+ info: React.ReactNode;
32
+ };
33
+ //# sourceMappingURL=SettingCard.summary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SettingCard.summary.d.ts","sourceRoot":"","sources":["../../../../../src/components/layout/SettingCard/SettingCard.summary.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAiD,MAAM,OAAO,CAAC;AAStE;;;;GAIG;AACH,eAAO,MAAM,UAAU,GAAI,UAAU,OAAO,KAAG;IAAE,GAAG,EAAE,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAkBzG,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,CAuClG,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,cAAc,GAAI,uCAK5B;IACD,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,KAAG;IAAE,GAAG,EAAE,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC;IAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAA;CAInE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"SettingSwitch.d.ts","sourceRoot":"","sources":["../../../../../src/components/layout/SettingCard/SettingSwitch.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAgB,MAAM,OAAO,CAAC;AAKrC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAGrD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAE9D,wFAAwF;AACxF,MAAM,MAAM,uBAAuB,GAAG,IAAI,CACxC,kBAAkB,EAClB,OAAO,GAAG,cAAc,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,GAAG,MAAM,GAAG,aAAa,GAAG,YAAY,CAC/G,GAAG;IAAE,QAAQ,EAAE,OAAO,CAAA;CAAE,CAAC;AAE1B,mFAAmF;AACnF,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,mBAAmB,QAAO,gBAQtC,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CACvC,uBAAuB,GAAG;IAAE,GAAG,EAAE,gBAAgB,CAAC;IAAC,KAAK,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAA;CAAE,CA8C9F,CAAC"}
1
+ {"version":3,"file":"SettingSwitch.d.ts","sourceRoot":"","sources":["../../../../../src/components/layout/SettingCard/SettingSwitch.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAgB,MAAM,OAAO,CAAC;AAKrC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAIrD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAE9D,wFAAwF;AACxF,MAAM,MAAM,uBAAuB,GAAG,IAAI,CACxC,kBAAkB,EAClB,OAAO,GAAG,cAAc,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,GAAG,MAAM,GAAG,aAAa,GAAG,YAAY,CAC/G,GAAG;IAAE,QAAQ,EAAE,OAAO,CAAA;CAAE,CAAC;AAE1B,mFAAmF;AACnF,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,mBAAmB,QAAO,gBAQtC,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CACvC,uBAAuB,GAAG;IAAE,GAAG,EAAE,gBAAgB,CAAC;IAAC,KAAK,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAA;CAAE,CAsD9F,CAAC"}
@@ -31,6 +31,12 @@ export interface SettingCardCopy {
31
31
  learnMore: string;
32
32
  /** Shown when the save rejected and the host's `formatError` gave no sentence of its own. */
33
33
  saveFailed: string;
34
+ /**
35
+ * The accessible name of the [i] beside the title while the summary is cut to
36
+ * two lines. Optional so a host's own copy object keeps compiling; without it
37
+ * the [i] is named after the card's title.
38
+ */
39
+ moreInfo?: string;
34
40
  }
35
41
  /**
36
42
  * What a switch that saves the moment it flips says about that save — shared
@@ -41,5 +47,7 @@ export interface SettingSwitchCopy {
41
47
  saving: string;
42
48
  /** Shown when the save rejected and the host's `formatError` gave no sentence of its own. */
43
49
  saveFailed: string;
50
+ /** The [i]'s accessible name — see `SettingCardCopy.moreInfo`. */
51
+ moreInfo?: string;
44
52
  }
45
53
  //# sourceMappingURL=layout.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../../src/copy/layout.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,eAAe;IAC9B,kEAAkE;IAClE,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,0DAA0D;IAC1D,YAAY,EAAE,MAAM,CAAC;IACrB,2EAA2E;IAC3E,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,oFAAoF;IACpF,IAAI,EAAE,MAAM,CAAC;IACb,mCAAmC;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,0FAA0F;IAC1F,MAAM,EAAE,MAAM,CAAC;IACf,iEAAiE;IACjE,SAAS,EAAE,MAAM,CAAC;IAClB,6FAA6F;IAC7F,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,+CAA+C;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf,6FAA6F;IAC7F,UAAU,EAAE,MAAM,CAAC;CACpB"}
1
+ {"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../../src/copy/layout.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,eAAe;IAC9B,kEAAkE;IAClE,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,0DAA0D;IAC1D,YAAY,EAAE,MAAM,CAAC;IACrB,2EAA2E;IAC3E,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,oFAAoF;IACpF,IAAI,EAAE,MAAM,CAAC;IACb,mCAAmC;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,0FAA0F;IAC1F,MAAM,EAAE,MAAM,CAAC;IACf,iEAAiE;IACjE,SAAS,EAAE,MAAM,CAAC;IAClB,6FAA6F;IAC7F,UAAU,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,+CAA+C;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf,6FAA6F;IAC7F,UAAU,EAAE,MAAM,CAAC;IACnB,kEAAkE;IAClE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB"}
@@ -1 +1 @@
1
- {"version":3,"file":"en-US.layout.d.ts","sourceRoot":"","sources":["../../src/en-US.layout.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EACV,eAAe,EACf,iBAAiB,EACjB,eAAe,EAChB,MAAM,QAAQ,CAAC;AAEhB,eAAO,MAAM,uBAAuB,EAAE,eAMrC,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,eAOrC,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,iBAGvC,CAAC"}
1
+ {"version":3,"file":"en-US.layout.d.ts","sourceRoot":"","sources":["../../src/en-US.layout.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EACV,eAAe,EACf,iBAAiB,EACjB,eAAe,EAChB,MAAM,QAAQ,CAAC;AAEhB,eAAO,MAAM,uBAAuB,EAAE,eAMrC,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,eAQrC,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,iBAIvC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"pt-BR.layout.d.ts","sourceRoot":"","sources":["../../src/pt-BR.layout.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EACV,eAAe,EACf,iBAAiB,EACjB,eAAe,EAChB,MAAM,QAAQ,CAAC;AAEhB,eAAO,MAAM,uBAAuB,EAAE,eAMrC,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,eAOrC,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,iBAGvC,CAAC"}
1
+ {"version":3,"file":"pt-BR.layout.d.ts","sourceRoot":"","sources":["../../src/pt-BR.layout.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EACV,eAAe,EACf,iBAAiB,EACjB,eAAe,EAChB,MAAM,QAAQ,CAAC;AAEhB,eAAO,MAAM,uBAAuB,EAAE,eAMrC,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,eAQrC,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,iBAIvC,CAAC"}
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  UserAvatar,
3
3
  UserMenu
4
- } from "./chunk-EOTV5BLM.js";
4
+ } from "./chunk-WOP2DRMC.js";
5
5
  import "./chunk-UDQSIRAP.js";
6
- import "./chunk-PGPPN63I.js";
7
- import "./chunk-TNQDSTIA.js";
6
+ import "./chunk-EMEXXAQI.js";
7
+ import "./chunk-Y6C4MYZE.js";
8
+ import "./chunk-MTEQEPNY.js";
8
9
  import "./chunk-6ZZGK5DT.js";
9
10
  import "./chunk-3ZVUNSFF.js";
10
- import "./chunk-MTEQEPNY.js";
11
11
  import "./chunk-VUHLNYAE.js";
12
12
  import "./chunk-2GSIEDGN.js";
13
13
  import "./chunk-WN5PNP6F.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@12-apps/ui",
3
- "version": "6.52.1",
3
+ "version": "6.54.0",
4
4
  "license": "MIT",
5
5
  "packageManager": "pnpm@10.34.5",
6
6
  "type": "module",
@@ -34,6 +34,7 @@ The AlertDialog component provides a modal dialog for alerts, confirmations, and
34
34
  | `showCancel` | `boolean` | true | Whether to show the cancel button |
35
35
  | `confirmDisabled` | `boolean` | false | Whether the confirm button is disabled |
36
36
  | `loading` | `boolean` | false | Shows loading state on confirm button |
37
+ | `emphasis` | `'confirm' \| 'cancel'` | 'confirm' | Which button is filled and takes the primary slot (right, or top when the row stacks). Use `cancel` when the confirm is the loss, e.g. "discard what you wrote?": the confirm becomes the neutral outline, both buttons grow to share the row, and focus opens on the cancel. Ignored when `showCancel` is false |
37
38
 
38
39
  ### Visual Props
39
40
 
@@ -124,6 +125,35 @@ function DeleteConfirmation() {
124
125
  />
125
126
  ```
126
127
 
128
+ ### Steering Toward Cancel
129
+
130
+ When confirming throws work away, make keeping it the primary action: the
131
+ filled cancel takes the primary slot and the confirm becomes the neutral
132
+ outline — primary and neutral, even on the destructive variant.
133
+
134
+ ```tsx
135
+ <AlertDialog
136
+ open={open}
137
+ variant="destructive"
138
+ emphasis="cancel"
139
+ initialFocus="cancel"
140
+ title="Discard this order?"
141
+ description="You have already written 3 items."
142
+ confirmText="Discard"
143
+ cancelText="Keep writing"
144
+ onConfirm={handleDiscard}
145
+ onCancel={() => setOpen(false)}
146
+ onClose={() => setOpen(false)}
147
+ />
148
+ ```
149
+
150
+ ### Button Layout
151
+
152
+ The action row wraps whole buttons and never breaks a label inside one. A pair
153
+ that fits keeps its natural widths, pushed to the right; a pair that does not
154
+ stacks, with the primary on top. With `emphasis="cancel"` the two buttons also
155
+ grow to share the row, so stacked they take its full width.
156
+
127
157
  ### Without Cancel Button
128
158
 
129
159
  ```tsx
@@ -0,0 +1,180 @@
1
+ /**
2
+ * The AlertDialog's action row, kept apart from the dialog shell so each stays
3
+ * inside the complexity budget: which button is filled, where each one sits,
4
+ * and how the row wraps.
5
+ */
6
+ import type { ButtonProps } from '@mui/material/Button/index.js';
7
+ import Button from '@mui/material/Button/index.js';
8
+ import CircularProgress from '@mui/material/CircularProgress/index.js';
9
+ import DialogActions from '@mui/material/DialogActions/index.js';
10
+ import { styled, useTheme } from '@mui/material/styles/index.js';
11
+ import React from 'react';
12
+
13
+ import { rem } from '../../../tokens/relative';
14
+
15
+ import type { AlertDialogProps } from './AlertDialog.types';
16
+
17
+ /**
18
+ * The action row WRAPS WHOLE BUTTONS; it never breaks a label inside one. A pair
19
+ * that did not fit side by side used to squeeze the longer label onto two
20
+ * lines, so one button stood twice as tall as its neighbour. Now the row breaks
21
+ * instead. `wrap-reverse` puts the LAST button — the primary, whichever
22
+ * `emphasis` picks — on top when it stacks, the same slot it holds on the right
23
+ * when the row fits. A pair that fits is laid out exactly as before: natural
24
+ * widths, pushed to the right.
25
+ *
26
+ * `fill` — set only by `emphasis="cancel"` — lets the buttons grow to share the
27
+ * row, and so to take the full width of their line once it stacks. It is not
28
+ * the default because growing also stretches a pair that fits, which would
29
+ * redraw every existing dialog's footer.
30
+ *
31
+ * Rendered with `disableSpacing`: MUI's own spacing is a left margin on every
32
+ * button after the first, which would indent a button that wrapped onto a line
33
+ * of its own. The gaps below replace it, at the same 16px across.
34
+ */
35
+ const StyledDialogActions = styled(DialogActions, {
36
+ shouldForwardProp: (prop) => prop !== 'fill',
37
+ })<{ fill: boolean }>(({ theme, fill }) => ({
38
+ padding: theme.spacing(2, 3, 3, 3),
39
+ flexWrap: 'wrap-reverse',
40
+ columnGap: theme.spacing(2),
41
+ rowGap: theme.spacing(1),
42
+ ...(fill && { '& > .MuiButton-root': { flexGrow: 1 } }),
43
+ }));
44
+
45
+ const confirmButtonColor = (variant: AlertDialogProps['variant']): 'error' | 'primary' =>
46
+ variant === 'destructive' ? 'error' : 'primary';
47
+
48
+ interface ButtonLook {
49
+ variant: ButtonProps['variant'];
50
+ color: ButtonProps['color'];
51
+ }
52
+
53
+ /**
54
+ * How each button is drawn, by `emphasis`: the emphasised one is filled, the
55
+ * other a NEUTRAL outline. Primary / neutral both ways round — a confirm that
56
+ * steps down drops the variant's colour too, so the one filled button is the
57
+ * only coloured thing in the row and the eye has a single place to land.
58
+ */
59
+ const buttonLooks = (
60
+ emphasis: AlertDialogProps['emphasis'],
61
+ variant: AlertDialogProps['variant'],
62
+ ): { cancel: ButtonLook; confirm: ButtonLook } =>
63
+ emphasis === 'cancel'
64
+ ? {
65
+ cancel: { variant: 'contained', color: 'primary' },
66
+ confirm: { variant: 'outlined', color: 'inherit' },
67
+ }
68
+ : {
69
+ cancel: { variant: 'outlined', color: 'inherit' },
70
+ confirm: { variant: 'contained', color: confirmButtonColor(variant) },
71
+ };
72
+
73
+ /**
74
+ * The emphasis that applies: `cancel` only while the cancel is shown. A hidden
75
+ * cancel with the confirm stepped down would leave a dialog with no primary.
76
+ */
77
+ const effectiveEmphasis = (
78
+ emphasis: AlertDialogProps['emphasis'],
79
+ showCancel: boolean,
80
+ ): NonNullable<AlertDialogProps['emphasis']> =>
81
+ emphasis === 'cancel' && showCancel ? 'cancel' : 'confirm';
82
+
83
+ /**
84
+ * Whether the cancel owns focus on open: what `initialFocus` says, and when it
85
+ * says nothing, the emphasised button — so Enter on a steered question keeps
86
+ * the work instead of completing the loss.
87
+ */
88
+ const focusesCancel = (
89
+ initialFocus: AlertDialogProps['initialFocus'],
90
+ emphasis: NonNullable<AlertDialogProps['emphasis']>,
91
+ ): boolean => (initialFocus ?? emphasis) === 'cancel';
92
+
93
+ /** The two buttons in slot order: the emphasised one LAST, the primary slot. */
94
+ const inSlotOrder = (
95
+ emphasis: AlertDialogProps['emphasis'],
96
+ cancel: React.ReactNode,
97
+ confirm: React.ReactNode,
98
+ ): React.ReactNode[] => (emphasis === 'cancel' ? [confirm, cancel] : [cancel, confirm]);
99
+
100
+ /**
101
+ * Action row: the optional cancel button and the (variant-coloured) confirm,
102
+ * with the emphasised one LAST — the primary slot, on the right or, once the
103
+ * row stacks, on top. DOM order is the tab order, so it follows the same rule.
104
+ */
105
+ export function AlertDialogFooter({
106
+ variant,
107
+ cancelText = 'Cancel',
108
+ confirmText = 'Confirm',
109
+ showCancel = true,
110
+ loading = false,
111
+ confirmDisabled = false,
112
+ initialFocus,
113
+ emphasis: asked,
114
+ onCancel,
115
+ onConfirm,
116
+ dataTestId,
117
+ }: Pick<
118
+ AlertDialogProps,
119
+ | 'variant'
120
+ | 'cancelText'
121
+ | 'confirmText'
122
+ | 'showCancel'
123
+ | 'loading'
124
+ | 'confirmDisabled'
125
+ | 'initialFocus'
126
+ | 'emphasis'
127
+ > & {
128
+ onCancel: () => void;
129
+ onConfirm: () => void;
130
+ dataTestId: string;
131
+ }): React.ReactElement {
132
+ const theme = useTheme();
133
+ const emphasis = effectiveEmphasis(asked, showCancel);
134
+ const look = buttonLooks(emphasis, variant);
135
+ const cancelFocused = focusesCancel(initialFocus, emphasis);
136
+ const cancel = showCancel && (
137
+ <Button
138
+ key="cancel"
139
+ onClick={onCancel}
140
+ variant={look.cancel.variant}
141
+ color={look.cancel.color}
142
+ disabled={loading}
143
+ autoFocus={cancelFocused}
144
+ data-testid={`${dataTestId}-cancel-button`}
145
+ >
146
+ {cancelText}
147
+ </Button>
148
+ );
149
+ const confirm = (
150
+ <Button
151
+ key="confirm"
152
+ onClick={onConfirm}
153
+ variant={look.confirm.variant}
154
+ color={look.confirm.color}
155
+ disabled={confirmDisabled || loading}
156
+ startIcon={
157
+ loading ? (
158
+ <CircularProgress
159
+ size={rem(theme, 16)}
160
+ color="inherit"
161
+ data-testid={`${dataTestId}-loading-spinner`}
162
+ />
163
+ ) : undefined
164
+ }
165
+ autoFocus={!cancelFocused}
166
+ data-testid={`${dataTestId}-confirm-button`}
167
+ >
168
+ {confirmText}
169
+ </Button>
170
+ );
171
+ return (
172
+ <StyledDialogActions
173
+ disableSpacing
174
+ fill={emphasis === 'cancel'}
175
+ data-testid={`${dataTestId}-actions`}
176
+ >
177
+ {inSlotOrder(emphasis, cancel, confirm)}
178
+ </StyledDialogActions>
179
+ );
180
+ }
@@ -1,22 +1,19 @@
1
1
  import Close from '@mui/icons-material/Close';
2
2
  import Error from '@mui/icons-material/Error';
3
3
  import Info from '@mui/icons-material/Info';
4
- import type { ButtonProps } from '@mui/material/Button/index.js';
5
- import Button from '@mui/material/Button/index.js';
6
- import CircularProgress from '@mui/material/CircularProgress/index.js';
7
4
  import Dialog from '@mui/material/Dialog/index.js';
8
- import DialogActions from '@mui/material/DialogActions/index.js';
9
5
  import DialogContent from '@mui/material/DialogContent/index.js';
10
6
  import DialogContentText from '@mui/material/DialogContentText/index.js';
11
7
  import DialogTitle from '@mui/material/DialogTitle/index.js';
12
8
  import IconButton from '@mui/material/IconButton/index.js';
13
9
  import Typography from '@mui/material/Typography/index.js';
14
- import { alpha, keyframes, styled, useTheme } from '@mui/material/styles/index.js';
10
+ import { alpha, keyframes, styled } from '@mui/material/styles/index.js';
15
11
  import type { Theme } from '@mui/material/styles/index.js';
16
12
  import React from 'react';
17
13
 
18
14
  import { neutralTones } from '../../../tokens/ink';
19
15
 
16
+ import { AlertDialogFooter } from './AlertDialog.parts';
20
17
  import type { AlertDialogProps } from './AlertDialog.types';
21
18
  import { rem, rems } from '../../../tokens/relative';
22
19
 
@@ -140,11 +137,6 @@ const StyledDialogContent = styled(DialogContent)(({ theme }) => ({
140
137
  paddingBottom: theme.spacing(2),
141
138
  }));
142
139
 
143
- const StyledDialogActions = styled(DialogActions)(({ theme }) => ({
144
- padding: theme.spacing(2, 3, 3, 3),
145
- gap: theme.spacing(1),
146
- }));
147
-
148
140
  const CloseButton = styled(IconButton)(({ theme }) => ({
149
141
  position: 'absolute',
150
142
  right: theme.spacing(1),
@@ -208,11 +200,6 @@ function ariaSlotProps(
208
200
  };
209
201
  }
210
202
 
211
- /** Both variants render a filled confirm; only the colour distinguishes them. */
212
- const CONFIRM_BUTTON_VARIANT: ButtonProps['variant'] = 'contained';
213
- const confirmButtonColor = (variant: AlertDialogProps['variant']): 'error' | 'primary' =>
214
- variant === 'destructive' ? 'error' : 'primary';
215
-
216
203
  /** Title row: the variant icon (unless explicitly suppressed with `null`) + the title. */
217
204
  function AlertDialogHeader({
218
205
  title,
@@ -238,70 +225,6 @@ function AlertDialogHeader({
238
225
  );
239
226
  }
240
227
 
241
- /** Action row: the optional cancel button and the (variant-coloured) confirm. */
242
- function AlertDialogFooter({
243
- variant,
244
- cancelText = 'Cancel',
245
- confirmText = 'Confirm',
246
- showCancel = true,
247
- loading = false,
248
- confirmDisabled = false,
249
- initialFocus = 'confirm',
250
- onCancel,
251
- onConfirm,
252
- dataTestId,
253
- }: Pick<
254
- AlertDialogProps,
255
- | 'variant'
256
- | 'cancelText'
257
- | 'confirmText'
258
- | 'showCancel'
259
- | 'loading'
260
- | 'confirmDisabled'
261
- | 'initialFocus'
262
- > & {
263
- onCancel: () => void;
264
- onConfirm: () => void;
265
- dataTestId: string;
266
- }): React.ReactElement {
267
- const theme = useTheme();
268
- return (
269
- <StyledDialogActions data-testid={`${dataTestId}-actions`}>
270
- {showCancel && (
271
- <Button
272
- onClick={onCancel}
273
- variant="outlined"
274
- color="inherit"
275
- disabled={loading}
276
- autoFocus={initialFocus === 'cancel'}
277
- data-testid={`${dataTestId}-cancel-button`}
278
- >
279
- {cancelText}
280
- </Button>
281
- )}
282
- <Button
283
- onClick={onConfirm}
284
- variant={CONFIRM_BUTTON_VARIANT}
285
- color={confirmButtonColor(variant)}
286
- disabled={confirmDisabled || loading}
287
- startIcon={
288
- loading ? (
289
- <CircularProgress
290
- size={rem(theme, 16)}
291
- color="inherit"
292
- data-testid={`${dataTestId}-loading-spinner`}
293
- />
294
- ) : undefined
295
- }
296
- autoFocus={initialFocus !== 'cancel'}
297
- data-testid={`${dataTestId}-confirm-button`}
298
- >
299
- {confirmText}
300
- </Button>
301
- </StyledDialogActions>
302
- );
303
- }
304
-
305
228
  export const AlertDialog = React.forwardRef<HTMLDivElement, AlertDialogProps>(
306
229
  ({
307
230
  variant = 'default',
@@ -318,6 +241,7 @@ export const AlertDialog = React.forwardRef<HTMLDivElement, AlertDialogProps>(
318
241
  loading,
319
242
  confirmDisabled,
320
243
  initialFocus,
244
+ emphasis,
321
245
  children,
322
246
  onClose,
323
247
  'data-testid': dataTestId = 'alert-dialog',
@@ -348,12 +272,7 @@ export const AlertDialog = React.forwardRef<HTMLDivElement, AlertDialogProps>(
348
272
  <Close />
349
273
  </CloseButton>
350
274
 
351
- <AlertDialogHeader
352
- title={title}
353
- icon={icon}
354
- variant={variant}
355
- dataTestId={dataTestId}
356
- />
275
+ <AlertDialogHeader title={title} icon={icon} variant={variant} dataTestId={dataTestId} />
357
276
 
358
277
  <StyledDialogContent data-testid={`${dataTestId}-content`}>
359
278
  {description && (
@@ -375,6 +294,7 @@ export const AlertDialog = React.forwardRef<HTMLDivElement, AlertDialogProps>(
375
294
  loading={loading}
376
295
  confirmDisabled={confirmDisabled}
377
296
  initialFocus={initialFocus}
297
+ emphasis={emphasis}
378
298
  onCancel={handleCancel}
379
299
  onConfirm={() => onConfirm?.()}
380
300
  dataTestId={dataTestId}
@@ -68,12 +68,26 @@ export interface AlertDialogProps extends Omit<MuiDialogProps, 'variant'> {
68
68
  confirmDisabled?: boolean;
69
69
 
70
70
  /**
71
- * Which button owns focus when the dialog opens. Defaults to `confirm`, which
72
- * is right for an acknowledgement; a destructive dialog should pass `cancel`
73
- * so a stray Enter on the trigger cannot complete the action.
71
+ * Which button owns focus when the dialog opens. Defaults to the emphasised
72
+ * one — `confirm`, unless `emphasis="cancel"` — which is right for an
73
+ * acknowledgement; a destructive dialog should pass `cancel` so a stray Enter
74
+ * on the trigger cannot complete the action.
74
75
  */
75
76
  initialFocus?: 'confirm' | 'cancel';
76
77
 
78
+ /**
79
+ * Which button is the filled, primary one. Defaults to `confirm`. Pass
80
+ * `cancel` when backing out is the action to steer toward — a "discard what
81
+ * you wrote?" question, where the confirm is the loss: cancel is then filled
82
+ * and takes the primary slot (right, or on top once the row stacks), and the
83
+ * confirm steps down to the neutral outline cancel normally wears — primary
84
+ * and neutral, whatever the variant. The two buttons then grow to share the
85
+ * row, so once it stacks each takes its full width; focus opens on the cancel
86
+ * unless `initialFocus` says otherwise. With `showCancel={false}` it has no
87
+ * effect: the confirm keeps its default, filled look.
88
+ */
89
+ emphasis?: 'confirm' | 'cancel';
90
+
77
91
  /**
78
92
  * Optional data-testid attribute for testing
79
93
  */
@@ -97,3 +97,39 @@ export const usePinnedTooltip = ({ clickable, onPin, onUnpin }: PinOptions) => {
97
97
 
98
98
  return { isPinned, isControlledOpen, wrapperRef, handleClick };
99
99
  };
100
+
101
+ type OnOpen = NonNullable<InteractiveTooltipProps['onOpen']>;
102
+ type OnClose = NonNullable<InteractiveTooltipProps['onClose']>;
103
+
104
+ /**
105
+ * The hover half of the tooltip's open state, so the MUI Tooltip is controlled
106
+ * from its first render (FUT-3013). It used to receive `open={undefined}` while
107
+ * hovering and a boolean once pinned, which MUI reports as a component switching
108
+ * from uncontrolled to controlled on the first click. The caller's own
109
+ * onOpen/onClose still run.
110
+ *
111
+ * Unpinning also closes it: the hover listeners are off while pinned, so a
112
+ * hover state left `true` from before the pin would otherwise keep the tooltip
113
+ * open after the click outside that unpinned it.
114
+ */
115
+ export const useHoverOpen = (
116
+ isPinned: boolean,
117
+ onOpen?: OnOpen,
118
+ onClose?: OnClose,
119
+ ): { open: boolean; onOpen: OnOpen; onClose: OnClose } => {
120
+ const [open, setOpen] = useState(false);
121
+ useEffect(() => {
122
+ if (!isPinned) setOpen(false);
123
+ }, [isPinned]);
124
+ return {
125
+ open,
126
+ onOpen: (event) => {
127
+ setOpen(true);
128
+ onOpen?.(event);
129
+ },
130
+ onClose: (event) => {
131
+ setOpen(false);
132
+ onClose?.(event);
133
+ },
134
+ };
135
+ };
@@ -2,7 +2,7 @@ import MuiTooltip from '@mui/material/Tooltip/index.js';
2
2
  import { styled } from '@mui/material/styles/index.js';
3
3
  import React from 'react';
4
4
 
5
- import { resolveTooltipProps, usePinnedTooltip } from './InteractiveTooltip.hooks';
5
+ import { resolveTooltipProps, useHoverOpen, usePinnedTooltip } from './InteractiveTooltip.hooks';
6
6
  import {
7
7
  arrowColor,
8
8
  emphasisStyles,
@@ -58,6 +58,8 @@ export const InteractiveTooltip = React.forwardRef<HTMLDivElement, InteractiveTo
58
58
  onUnpin,
59
59
  className,
60
60
  children,
61
+ onOpen,
62
+ onClose,
61
63
  ...props
62
64
  } = resolveTooltipProps(rawProps);
63
65
 
@@ -66,6 +68,7 @@ export const InteractiveTooltip = React.forwardRef<HTMLDivElement, InteractiveTo
66
68
  onPin,
67
69
  onUnpin,
68
70
  });
71
+ const hover = useHoverOpen(isPinned, onOpen, onClose);
69
72
 
70
73
  // Determine which content to show
71
74
  const tooltipContent = isPinned ? pinnedContent : hoverContent;
@@ -94,7 +97,9 @@ export const InteractiveTooltip = React.forwardRef<HTMLDivElement, InteractiveTo
94
97
  glow={glow}
95
98
  pulse={pulse}
96
99
  title={tooltipContent}
97
- open={isPinned ? isControlledOpen : undefined}
100
+ open={isPinned ? isControlledOpen : hover.open}
101
+ onOpen={hover.onOpen}
102
+ onClose={hover.onClose}
98
103
  enterDelay={isPinned ? 0 : 100}
99
104
  leaveDelay={0}
100
105
  disableHoverListener={isPinned}
@@ -51,7 +51,7 @@ const [draft, setDraft] = useState<number | null>(saved);
51
51
  | `title` | `string` | **required** | The setting's name. A heading, and the accessible name of the card's region. |
52
52
  | `onSave` | `() => void \| Promise<unknown>` | **required** | Persist the draft. See *Saving* below. |
53
53
  | `children` | `ReactNode` | **required** | The form. Rendered only while open. |
54
- | `summary` | `ReactNode` | — | The one line a closed card shows. Ends in an ellipsis rather than wrapping. |
54
+ | `summary` | `ReactNode` | — | What a closed card shows under its title: two lines at most, then an ellipsis. While it is cut, an [i] beside the title shows the whole text (hover, or a click/tap that pins it). |
55
55
  | `status` | `{ label: string; color?: ColorValue }` | — | The pill beside the title. `label` is always shown, so colour never carries the meaning alone. |
56
56
  | `learnMore` | `ReactNode` | — | Longer explanation behind a disclosure in the open card. Omit for no disclosure. |
57
57
  | `onCancel` | `() => void` | — | The card closed without saving. Reset the host's draft here. |
@@ -13,6 +13,11 @@ export const SETTING_CARD = {
13
13
  groupRuleWidth: 2,
14
14
  /** The narrowest a grid column gets by default. */
15
15
  gridMinColumnWidth: 320,
16
+ /** The widest the [i]'s full-summary tooltip gets. */
17
+ infoMaxWidth: 360,
18
+ /** The [i]'s keyboard focus ring: its width, and its gap from the glyph. */
19
+ infoFocusRingWidth: 2,
20
+ infoFocusRingOffset: 2,
16
21
  } as const;
17
22
 
18
23
  /** The grid's default gap, in theme SPACING units (not px): what `sx`'s `gap: 2` means. */