@12-apps/ui 6.36.0 → 6.37.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 (558) hide show
  1. package/dist/_internal/components/data-display/CardKit/CardKebab.js +3 -3
  2. package/dist/_internal/components/data-display/CardKit/use-remove-confirm.js +3 -3
  3. package/dist/_internal/components/data-display/CardKit/use-row-confirm.js +3 -3
  4. package/dist/_internal/components/data-display/DataViews/DataViewsGrid.js +36 -36
  5. package/dist/_internal/components/data-display/DataViews/DataViewsTableBase.js +48 -48
  6. package/dist/_internal/components/data-display/DataViews/DeleteViewDialog.js +3 -3
  7. package/dist/_internal/components/data-display/DataViews/ManageViewsDialog.js +4 -4
  8. package/dist/_internal/components/data-display/DataViews/SaveViewModal.js +9 -9
  9. package/dist/_internal/components/data-display/DataViews/base-card.js +2 -2
  10. package/dist/_internal/components/data-display/DataViews/base-list-card-geometry.js +7 -7
  11. package/dist/_internal/components/data-display/DataViews/base-list-card-gutters.js +2 -2
  12. package/dist/_internal/components/data-display/DataViews/base-list-card-slots.js +6 -6
  13. package/dist/_internal/components/data-display/DataViews/base-list-card.js +10 -10
  14. package/dist/_internal/components/data-display/DataViews/data-views-category-pill.js +11 -11
  15. package/dist/_internal/components/data-display/DataViews/data-views-columns.js +4 -4
  16. package/dist/_internal/components/data-display/DataViews/data-views-display-panel.js +9 -9
  17. package/dist/_internal/components/data-display/DataViews/data-views-display-tabs.js +5 -5
  18. package/dist/_internal/components/data-display/DataViews/data-views-empty.js +3 -3
  19. package/dist/_internal/components/data-display/DataViews/data-views-export.js +3 -3
  20. package/dist/_internal/components/data-display/DataViews/data-views-filter-panel.js +12 -12
  21. package/dist/_internal/components/data-display/DataViews/data-views-grid-bodies.js +10 -10
  22. package/dist/_internal/components/data-display/DataViews/data-views-grid-helpers.js +3 -3
  23. package/dist/_internal/components/data-display/DataViews/data-views-grid-parts.js +33 -33
  24. package/dist/_internal/components/data-display/DataViews/data-views-inline-bar.js +15 -15
  25. package/dist/_internal/components/data-display/DataViews/data-views-layout-context.js +4 -4
  26. package/dist/_internal/components/data-display/DataViews/data-views-more-filters.js +3 -3
  27. package/dist/_internal/components/data-display/DataViews/data-views-scope-tabs.js +5 -5
  28. package/dist/_internal/components/data-display/DataViews/data-views-select-all-strip.js +3 -3
  29. package/dist/_internal/components/data-display/DataViews/data-views-shell-toolbar.js +13 -13
  30. package/dist/_internal/components/data-display/DataViews/data-views-table-parts.js +12 -12
  31. package/dist/_internal/components/data-display/DataViews/data-views-toolbar.js +12 -12
  32. package/dist/_internal/components/data-display/DataViews/data-views-view-nav.js +3 -3
  33. package/dist/_internal/components/data-display/DataViews/list-card-rails.js +5 -5
  34. package/dist/_internal/components/data-display/DataViews/use-data-views-state.js +5 -5
  35. package/dist/_internal/components/data-display/FleetMap/FleetMap.js +2 -2
  36. package/dist/_internal/components/data-display/index.js +2 -2
  37. package/dist/_internal/components/feedback/ConfirmAction/ConfirmButton.js +3 -3
  38. package/dist/_internal/components/feedback/NotificationStatusNotice/NotificationStatusNotice.js +3 -3
  39. package/dist/_internal/components/feedback/index.js +4 -4
  40. package/dist/_internal/components/form/AddressAutocomplete/AddressAutocomplete.js +6 -6
  41. package/dist/_internal/components/form/AddressAutocomplete/AddressAutocompleteField.js +4 -4
  42. package/dist/_internal/components/form/AddressAutocomplete/AddressFallbackField.js +3 -2
  43. package/dist/_internal/components/form/AddressAutocomplete/AddressInputField.js +3 -2
  44. package/dist/_internal/components/form/AddressAutocomplete/AddressSuggestionsPaper.js +2 -1
  45. package/dist/_internal/components/form/AddressAutocomplete/AddressTextField.js +2 -1
  46. package/dist/_internal/components/form/Autocomplete/Autocomplete.js +3 -2
  47. package/dist/_internal/components/form/Autocomplete/Autocomplete.parts.js +2 -1
  48. package/dist/_internal/components/form/Button/Button.js +2 -2
  49. package/dist/_internal/components/form/Button/Button.styles.js +1 -1
  50. package/dist/_internal/components/form/CategorySelect/CategoryPanel.js +6 -6
  51. package/dist/_internal/components/form/CategorySelect/CategoryPanelFoot.js +2 -2
  52. package/dist/_internal/components/form/CategorySelect/CategoryPanelHead.js +2 -2
  53. package/dist/_internal/components/form/CategorySelect/CategoryPanelList.js +3 -3
  54. package/dist/_internal/components/form/CategorySelect/CategoryPanelSurface.js +2 -1
  55. package/dist/_internal/components/form/CategorySelect/CategoryRows.js +2 -2
  56. package/dist/_internal/components/form/CategorySelect/CategorySelect.js +10 -10
  57. package/dist/_internal/components/form/CategorySelect/CategorySelect.styles.js +1 -1
  58. package/dist/_internal/components/form/CategorySelect/CategoryTrigger.js +2 -2
  59. package/dist/_internal/components/form/CepField/CepField.js +4 -4
  60. package/dist/_internal/components/form/Checkbox/Checkbox.js +1 -1
  61. package/dist/_internal/components/form/CodeEditor/CodeEditor.helpers.js +1 -1
  62. package/dist/_internal/components/form/CodeEditor/CodeEditor.js +2 -2
  63. package/dist/_internal/components/form/Command/Command.hooks.js +1 -1
  64. package/dist/_internal/components/form/Command/Command.js +4 -4
  65. package/dist/_internal/components/form/Command/Command.parts.js +2 -1
  66. package/dist/_internal/components/form/Command/Command.styles.js +1 -1
  67. package/dist/_internal/components/form/CreatableSelect/CreatableSelect.js +2 -2
  68. package/dist/_internal/components/form/DateRangePicker/DateRangePicker.js +2 -2
  69. package/dist/_internal/components/form/DateRangePicker/DateRangePickerQuickList.js +1 -1
  70. package/dist/_internal/components/form/Form/Form.js +1 -1
  71. package/dist/_internal/components/form/HeaderActions/HeaderActions.js +1 -1
  72. package/dist/_internal/components/form/Input/Input.js +3 -2
  73. package/dist/_internal/components/form/Input/Input.styles.js +2 -1
  74. package/dist/_internal/components/form/InputOTP/InputOTP.js +2 -2
  75. package/dist/_internal/components/form/InputOTP/InputOTP.styles.js +1 -1
  76. package/dist/_internal/components/form/Label/Label.js +2 -2
  77. package/dist/_internal/components/form/Label/Label.styles.js +1 -1
  78. package/dist/_internal/components/form/Menubar/Menubar.item.js +2 -2
  79. package/dist/_internal/components/form/Menubar/Menubar.js +4 -4
  80. package/dist/_internal/components/form/Menubar/Menubar.styles.js +1 -1
  81. package/dist/_internal/components/form/Menubar/Menubar.toolbar.js +3 -3
  82. package/dist/_internal/components/form/PasswordStrength/PasswordStrength.js +1 -1
  83. package/dist/_internal/components/form/PhoneInput/PhoneInput.js +1 -1
  84. package/dist/_internal/components/form/RadioGroup/RadioGroup.animations.js +2 -1
  85. package/dist/_internal/components/form/RadioGroup/RadioGroup.js +4 -4
  86. package/dist/_internal/components/form/RadioGroup/RadioGroup.styles.js +2 -2
  87. package/dist/_internal/components/form/RadioGroup/RadioGroup.variants.js +3 -3
  88. package/dist/_internal/components/form/RichTextEditor/RichTextEditor.js +2 -2
  89. package/dist/_internal/components/form/RichTextEditor/RichTextEditorToolbar.js +2 -1
  90. package/dist/_internal/components/form/SearchPalette/SearchPalette.js +2 -2
  91. package/dist/_internal/components/form/SearchPalette/SearchPalette.parts.js +1 -1
  92. package/dist/_internal/components/form/Select/Select.js +2 -1
  93. package/dist/_internal/components/form/Slider/Slider.animations.js +2 -1
  94. package/dist/_internal/components/form/Slider/Slider.js +3 -3
  95. package/dist/_internal/components/form/Slider/Slider.styles.js +2 -2
  96. package/dist/_internal/components/form/Switch/Switch.animations.js +2 -1
  97. package/dist/_internal/components/form/Switch/Switch.js +4 -4
  98. package/dist/_internal/components/form/Switch/Switch.parts.js +3 -3
  99. package/dist/_internal/components/form/Switch/Switch.styles.js +2 -2
  100. package/dist/_internal/components/form/Textarea/Textarea.js +2 -2
  101. package/dist/_internal/components/form/Textarea/Textarea.styles.js +2 -1
  102. package/dist/_internal/components/form/Textarea/TextareaRichEditor.js +12 -11
  103. package/dist/_internal/components/form/Textarea/TextareaRichEditor.js.map +1 -1
  104. package/dist/_internal/components/form/Toggle/Toggle.js +2 -2
  105. package/dist/_internal/components/form/Toggle/Toggle.styles.js +1 -1
  106. package/dist/_internal/components/form/ToggleGroup/ToggleGroup.js +1 -1
  107. package/dist/_internal/components/form/UploadButton/UploadButton.js +2 -2
  108. package/dist/_internal/components/form/UploadButton/UploadButton.parts.js +1 -1
  109. package/dist/_internal/components/form/index.js +56 -56
  110. package/dist/_internal/components/form/total-form/Fields/CategoryField.js +11 -11
  111. package/dist/_internal/components/form/total-form/Fields/CepField.js +5 -5
  112. package/dist/_internal/components/form/total-form/Fields/SelectField.js +3 -3
  113. package/dist/_internal/components/form/total-form/Fields/TextField.js +4 -4
  114. package/dist/_internal/components/form/total-form/Fields/ToggleField.js +3 -3
  115. package/dist/_internal/components/form/total-form/Fields/index.js +21 -21
  116. package/dist/_internal/components/form/total-form/FormContainer.js +2 -2
  117. package/dist/_internal/components/form/total-form/SubmitButton.js +3 -3
  118. package/dist/_internal/components/index.js +63 -63
  119. package/dist/_internal/components/layout/Dashboard/Dashboard.js +3 -3
  120. package/dist/_internal/components/layout/Dashboard/DashboardParts.js +2 -2
  121. package/dist/_internal/components/layout/index.js +3 -3
  122. package/dist/_internal/components/navigation/AppHeader/AppHeader.details.js +3 -3
  123. package/dist/_internal/components/navigation/index.js +3 -3
  124. package/dist/_internal/social-login-button/social-login-button.js +3 -3
  125. package/dist/_internal/user-avatar/user-avatar.js +3 -3
  126. package/dist/{chunk-343OLRFT.js → chunk-2BIVCYTO.js} +4 -4
  127. package/dist/{chunk-KH25WUSX.js → chunk-2EAAWOZ2.js} +4 -4
  128. package/dist/chunk-2EAAWOZ2.js.map +1 -0
  129. package/dist/{chunk-PNLM35GU.js → chunk-2JNHWKQK.js} +5 -5
  130. package/dist/{chunk-IWOVENC3.js → chunk-2XX45PC5.js} +2 -2
  131. package/dist/{chunk-RZ2C5CAW.js → chunk-2ZIHZLF5.js} +2 -2
  132. package/dist/{chunk-ZW5K4XCQ.js → chunk-34BZXJGT.js} +6 -6
  133. package/dist/{chunk-CHFHILTM.js → chunk-35S6QI5G.js} +2 -2
  134. package/dist/{chunk-KCAW6HRO.js → chunk-3AOQBR7N.js} +2 -2
  135. package/dist/{chunk-GVLZZCSX.js → chunk-4B5XUQQS.js} +3 -3
  136. package/dist/{chunk-ADHMNIWS.js → chunk-4CXEWFKO.js} +2 -2
  137. package/dist/{chunk-J4NXTSJY.js → chunk-4JFL62K3.js} +4 -4
  138. package/dist/chunk-4JFL62K3.js.map +1 -0
  139. package/dist/{chunk-XLYFOBBT.js → chunk-4PRZLII7.js} +19 -16
  140. package/dist/chunk-4PRZLII7.js.map +1 -0
  141. package/dist/{chunk-AMTFP7QA.js → chunk-4RDJMIWL.js} +16 -13
  142. package/dist/chunk-4RDJMIWL.js.map +1 -0
  143. package/dist/{chunk-PYIASGI7.js → chunk-4RWPGWJW.js} +39 -39
  144. package/dist/chunk-4RWPGWJW.js.map +1 -0
  145. package/dist/chunk-4T6UIYJB.js +77 -0
  146. package/dist/chunk-4T6UIYJB.js.map +1 -0
  147. package/dist/{chunk-HBICO6AX.js → chunk-4WNFOBTH.js} +26 -24
  148. package/dist/chunk-4WNFOBTH.js.map +1 -0
  149. package/dist/{chunk-JJSZP3TW.js → chunk-57JLS55D.js} +5 -5
  150. package/dist/{chunk-ZZM3DOEK.js → chunk-5HDYTTE7.js} +2 -2
  151. package/dist/{chunk-GEXM6DNR.js → chunk-5KGABAQB.js} +2 -2
  152. package/dist/{chunk-3A22SBIU.js → chunk-67O4GPJJ.js} +8 -4
  153. package/dist/chunk-67O4GPJJ.js.map +1 -0
  154. package/dist/{chunk-D5X4FRYX.js → chunk-6JNQLW5L.js} +2 -2
  155. package/dist/{chunk-NSJVQ5YJ.js → chunk-6KKQHJE7.js} +9 -4
  156. package/dist/chunk-6KKQHJE7.js.map +1 -0
  157. package/dist/{chunk-D2HKCPEH.js → chunk-6LOGBWLG.js} +9 -5
  158. package/dist/chunk-6LOGBWLG.js.map +1 -0
  159. package/dist/{chunk-TOXTJ7MU.js → chunk-6RLCBNDV.js} +8 -5
  160. package/dist/chunk-6RLCBNDV.js.map +1 -0
  161. package/dist/{chunk-K7WSPGI7.js → chunk-6WLHEZXI.js} +7 -7
  162. package/dist/chunk-6WLHEZXI.js.map +1 -0
  163. package/dist/{chunk-KJK2Q35C.js → chunk-75LOTMSN.js} +2 -2
  164. package/dist/{chunk-A6AKFPIQ.js → chunk-7EH4D6FU.js} +2 -2
  165. package/dist/{chunk-6SKXV236.js → chunk-7EM4THID.js} +9 -8
  166. package/dist/chunk-7EM4THID.js.map +1 -0
  167. package/dist/{chunk-7ZG7T2YN.js → chunk-7GHYCQCJ.js} +3 -3
  168. package/dist/{chunk-U4H6MGVE.js → chunk-A5UYPUS2.js} +7 -5
  169. package/dist/chunk-A5UYPUS2.js.map +1 -0
  170. package/dist/{chunk-QIKPGMMO.js → chunk-AER4245J.js} +2 -2
  171. package/dist/{chunk-2PBT2HQH.js → chunk-AUSUCZYR.js} +25 -24
  172. package/dist/chunk-AUSUCZYR.js.map +1 -0
  173. package/dist/{chunk-4CTLEUK3.js → chunk-AYLEZM6T.js} +2 -2
  174. package/dist/{chunk-JFBEZXNL.js → chunk-BAQBUKDU.js} +2 -2
  175. package/dist/{chunk-RQ5HZDBV.js → chunk-BN742L2M.js} +14 -8
  176. package/dist/chunk-BN742L2M.js.map +1 -0
  177. package/dist/{chunk-RKI3MRKX.js → chunk-BW62QQAG.js} +2 -2
  178. package/dist/{chunk-7EQCZO56.js → chunk-C3LZ3OGJ.js} +11 -11
  179. package/dist/chunk-C3LZ3OGJ.js.map +1 -0
  180. package/dist/{chunk-UL7L6MFT.js → chunk-C55AWF3U.js} +4 -4
  181. package/dist/{chunk-ST4YYVUK.js → chunk-C5RQBTRZ.js} +7 -3
  182. package/dist/chunk-C5RQBTRZ.js.map +1 -0
  183. package/dist/{chunk-GGWICBJD.js → chunk-CPAJYJUD.js} +2 -2
  184. package/dist/{chunk-5TJRJSJY.js → chunk-CQLPDY2J.js} +3 -3
  185. package/dist/{chunk-5UTAEHSB.js → chunk-CQPFSEJB.js} +2 -2
  186. package/dist/{chunk-SN2YMCTL.js → chunk-CS3KOKL3.js} +2 -2
  187. package/dist/{chunk-2HVNPWFV.js → chunk-D6KL74KI.js} +4 -10
  188. package/dist/chunk-D6KL74KI.js.map +1 -0
  189. package/dist/{chunk-TTAP5XFX.js → chunk-DJYL2LC6.js} +8 -3
  190. package/dist/chunk-DJYL2LC6.js.map +1 -0
  191. package/dist/{chunk-TQ2557I5.js → chunk-DUNG7D4B.js} +23 -25
  192. package/dist/chunk-DUNG7D4B.js.map +1 -0
  193. package/dist/{chunk-LWRI6HGT.js → chunk-ECNJGROX.js} +21 -19
  194. package/dist/chunk-ECNJGROX.js.map +1 -0
  195. package/dist/{chunk-FXNYV5Z6.js → chunk-F6D6HXZU.js} +3 -3
  196. package/dist/{chunk-7DN4UXJ3.js → chunk-FERUQ7OB.js} +14 -14
  197. package/dist/chunk-FERUQ7OB.js.map +1 -0
  198. package/dist/{chunk-TQBRWZA4.js → chunk-FFOQZRFC.js} +2 -2
  199. package/dist/{chunk-GXCOXJS3.js → chunk-FNG33MKA.js} +3 -3
  200. package/dist/{chunk-YH37X6JT.js → chunk-FNRPQE2D.js} +26 -25
  201. package/dist/chunk-FNRPQE2D.js.map +1 -0
  202. package/dist/{chunk-5SJWDABY.js → chunk-G3XLFQ2Z.js} +44 -43
  203. package/dist/chunk-G3XLFQ2Z.js.map +1 -0
  204. package/dist/{chunk-GW64UQXI.js → chunk-GHXFCMFP.js} +2 -2
  205. package/dist/{chunk-L3B36HA5.js → chunk-GRDPGHQJ.js} +2 -2
  206. package/dist/{chunk-6SS5C74Q.js → chunk-GS3RP2QE.js} +2 -2
  207. package/dist/{chunk-B2VXP2B2.js → chunk-GZT7MLLO.js} +2 -2
  208. package/dist/{chunk-AK2HOD6B.js → chunk-H5BEWPEY.js} +2 -2
  209. package/dist/{chunk-DY4BP5WA.js → chunk-HNPWZ3W2.js} +4 -4
  210. package/dist/{chunk-SYVNWXVW.js → chunk-HU7TX7RB.js} +3 -3
  211. package/dist/{chunk-WNUZK7NS.js → chunk-HVXIOIM5.js} +10 -8
  212. package/dist/chunk-HVXIOIM5.js.map +1 -0
  213. package/dist/{chunk-WPA26LXA.js → chunk-IKLOIONQ.js} +3 -3
  214. package/dist/{chunk-BXAL7OIS.js → chunk-JC22FNFA.js} +89 -88
  215. package/dist/chunk-JC22FNFA.js.map +1 -0
  216. package/dist/{chunk-DMWSXWCZ.js → chunk-JL75FJRG.js} +4 -4
  217. package/dist/{chunk-ZAFFKQQU.js → chunk-JLQGRZMN.js} +2 -2
  218. package/dist/{chunk-ZMC3N23A.js → chunk-JSD5TFDK.js} +6 -6
  219. package/dist/{chunk-NE6XUN5Z.js → chunk-JU4MSYYH.js} +2 -2
  220. package/dist/{chunk-OWA7GPWR.js → chunk-KN5J3NEZ.js} +6 -5
  221. package/dist/chunk-KN5J3NEZ.js.map +1 -0
  222. package/dist/{chunk-4GYEIWQP.js → chunk-LNHYBA4B.js} +11 -10
  223. package/dist/chunk-LNHYBA4B.js.map +1 -0
  224. package/dist/{chunk-QY4XNTNG.js → chunk-LP3JCXER.js} +4 -4
  225. package/dist/chunk-LP3JCXER.js.map +1 -0
  226. package/dist/{chunk-YBTC4XNO.js → chunk-LT4NEKXB.js} +3 -3
  227. package/dist/{chunk-WVC3BG6J.js → chunk-LXT3X33C.js} +11 -6
  228. package/dist/chunk-LXT3X33C.js.map +1 -0
  229. package/dist/{chunk-6KL2CJBO.js → chunk-MNHIK2OR.js} +2 -2
  230. package/dist/{chunk-CWDV64TD.js → chunk-N5GVW6RO.js} +5 -4
  231. package/dist/chunk-N5GVW6RO.js.map +1 -0
  232. package/dist/{chunk-JFEEV3XI.js → chunk-NB3FGWU4.js} +2 -2
  233. package/dist/{chunk-2UCLUDEB.js → chunk-NCPWLHZT.js} +2 -2
  234. package/dist/{chunk-DZNMS2SH.js → chunk-NDNYD4FG.js} +5 -5
  235. package/dist/{chunk-5IXHJXJX.js → chunk-NIF4IXQU.js} +5 -2
  236. package/dist/chunk-NIF4IXQU.js.map +1 -0
  237. package/dist/{chunk-EFV5QJNM.js → chunk-ORRI6FMN.js} +17 -14
  238. package/dist/chunk-ORRI6FMN.js.map +1 -0
  239. package/dist/{chunk-UFLTL2RJ.js → chunk-PH36XEB3.js} +2 -2
  240. package/dist/{chunk-4LQZH4PU.js → chunk-PMOEG36E.js} +2 -2
  241. package/dist/{chunk-EXZSHZRS.js → chunk-PWZHCBG3.js} +3 -3
  242. package/dist/{chunk-EFVOT3G5.js → chunk-PZ7PU4AP.js} +2 -2
  243. package/dist/{chunk-I62ALI7F.js → chunk-Q73PTVNO.js} +2 -2
  244. package/dist/{chunk-V74PXUQN.js → chunk-QEG3P5D4.js} +9 -9
  245. package/dist/{chunk-7LIXQZBG.js → chunk-QI5CRSOW.js} +3 -3
  246. package/dist/{chunk-V3LOHY4N.js → chunk-QKPD322X.js} +2 -2
  247. package/dist/{chunk-HAQMKV5P.js → chunk-QXSW3CNN.js} +15 -9
  248. package/dist/chunk-QXSW3CNN.js.map +1 -0
  249. package/dist/{chunk-LMXWI3DD.js → chunk-QYY37ECA.js} +5 -2
  250. package/dist/chunk-QYY37ECA.js.map +1 -0
  251. package/dist/{chunk-VECWMANF.js → chunk-RDCHT2WN.js} +7 -4
  252. package/dist/chunk-RDCHT2WN.js.map +1 -0
  253. package/dist/{chunk-35ETD7ML.js → chunk-RIEV4VXF.js} +9 -5
  254. package/dist/chunk-RIEV4VXF.js.map +1 -0
  255. package/dist/{chunk-PWF32ILG.js → chunk-SJO3K7SB.js} +3 -3
  256. package/dist/{chunk-TU3EGIKB.js → chunk-SSS64KYB.js} +3 -3
  257. package/dist/{chunk-SQYC57ZN.js → chunk-SYN46YL6.js} +2 -2
  258. package/dist/{chunk-DHBYO7AO.js → chunk-TCV3N44E.js} +2 -2
  259. package/dist/{chunk-E6RYO4QZ.js → chunk-THMT3G3L.js} +21 -15
  260. package/dist/chunk-THMT3G3L.js.map +1 -0
  261. package/dist/{chunk-JCBIPBGZ.js → chunk-TU5A2CV7.js} +19 -12
  262. package/dist/chunk-TU5A2CV7.js.map +1 -0
  263. package/dist/{chunk-YESTO24O.js → chunk-TXEN3QJ4.js} +8 -3
  264. package/dist/chunk-TXEN3QJ4.js.map +1 -0
  265. package/dist/{chunk-DVGBFT6O.js → chunk-UAVSBSV5.js} +2 -2
  266. package/dist/{chunk-B7BNNSM2.js → chunk-UZ6AUTE6.js} +4 -4
  267. package/dist/{chunk-4WQ3YXQL.js → chunk-VT5HQ2AD.js} +2 -2
  268. package/dist/{chunk-IBGX6H4J.js → chunk-VURQZBFH.js} +8 -4
  269. package/dist/chunk-VURQZBFH.js.map +1 -0
  270. package/dist/{chunk-7BZTZ2WG.js → chunk-VY2BMSHN.js} +8 -7
  271. package/dist/chunk-VY2BMSHN.js.map +1 -0
  272. package/dist/{chunk-SX3MEC3Q.js → chunk-VZIB5W5L.js} +2 -2
  273. package/dist/{chunk-HC5ZSCRG.js → chunk-W5TI46QN.js} +18 -14
  274. package/dist/chunk-W5TI46QN.js.map +1 -0
  275. package/dist/{chunk-X2AKLDPW.js → chunk-WE3LJPRN.js} +2 -2
  276. package/dist/{chunk-SE6ERQY5.js → chunk-WVZBYTIK.js} +6 -2
  277. package/dist/chunk-WVZBYTIK.js.map +1 -0
  278. package/dist/{chunk-CSSCGM27.js → chunk-X3OWMTLO.js} +1 -2
  279. package/dist/chunk-X3OWMTLO.js.map +1 -0
  280. package/dist/{chunk-CMK4DJDR.js → chunk-XLTHZI5W.js} +28 -20
  281. package/dist/chunk-XLTHZI5W.js.map +1 -0
  282. package/dist/{chunk-FZ4YTEP2.js → chunk-XR46FSOH.js} +2 -2
  283. package/dist/{chunk-CJHP6E34.js → chunk-YAFBUYVW.js} +9 -6
  284. package/dist/chunk-YAFBUYVW.js.map +1 -0
  285. package/dist/{chunk-6DN4ZULV.js → chunk-YOKUDQIJ.js} +1 -2
  286. package/dist/chunk-YOKUDQIJ.js.map +1 -0
  287. package/dist/{chunk-GE2EKMDT.js → chunk-YZ2DMP23.js} +4 -4
  288. package/dist/{chunk-GE2EKMDT.js.map → chunk-YZ2DMP23.js.map} +1 -1
  289. package/dist/{chunk-65CEXQ4L.js → chunk-Z6WSW6B4.js} +11 -7
  290. package/dist/chunk-Z6WSW6B4.js.map +1 -0
  291. package/dist/{chunk-XWWFBH2G.js → chunk-ZXSWXE6U.js} +8 -5
  292. package/dist/chunk-ZXSWXE6U.js.map +1 -0
  293. package/dist/data-display/CardKit.js +4 -4
  294. package/dist/data-display/DataViews.js +54 -54
  295. package/dist/data-display/FleetMap.js +2 -2
  296. package/dist/feedback/ConfirmAction.js +3 -3
  297. package/dist/feedback/NotificationStatusNotice.js +3 -3
  298. package/dist/form/AddressAutocomplete.js +6 -6
  299. package/dist/form/Autocomplete.js +3 -2
  300. package/dist/form/Button.js +2 -2
  301. package/dist/form/CategorySelect.js +10 -10
  302. package/dist/form/CepField.js +4 -4
  303. package/dist/form/Checkbox.js +1 -1
  304. package/dist/form/CodeEditor.js +2 -2
  305. package/dist/form/Command.js +4 -4
  306. package/dist/form/CreatableSelect.js +2 -2
  307. package/dist/form/DateRangePicker.js +2 -2
  308. package/dist/form/Form.js +1 -1
  309. package/dist/form/HeaderActions.js +1 -1
  310. package/dist/form/Input.js +3 -2
  311. package/dist/form/InputOTP.js +2 -2
  312. package/dist/form/Label.js +2 -2
  313. package/dist/form/Menubar.js +4 -4
  314. package/dist/form/PasswordStrength.js +1 -1
  315. package/dist/form/PhoneInput.js +1 -1
  316. package/dist/form/RadioGroup.js +4 -4
  317. package/dist/form/RichTextEditor.js +2 -2
  318. package/dist/form/SearchPalette.js +2 -2
  319. package/dist/form/Select.js +2 -1
  320. package/dist/form/Slider.js +3 -3
  321. package/dist/form/Switch.js +4 -4
  322. package/dist/form/Textarea.js +2 -2
  323. package/dist/form/Toggle.js +2 -2
  324. package/dist/form/ToggleGroup.js +1 -1
  325. package/dist/form/UploadButton.js +2 -2
  326. package/dist/form/total-form.js +25 -25
  327. package/dist/layout/Dashboard.js +3 -3
  328. package/dist/navigation/AppHeader.js +3 -3
  329. package/dist/social-login-button.js +3 -3
  330. package/dist/types/components/form/AddressAutocomplete/AddressFallbackField.d.ts.map +1 -1
  331. package/dist/types/components/form/AddressAutocomplete/AddressInputField.d.ts.map +1 -1
  332. package/dist/types/components/form/AddressAutocomplete/AddressSuggestionsPaper.d.ts.map +1 -1
  333. package/dist/types/components/form/AddressAutocomplete/AddressTextField.d.ts.map +1 -1
  334. package/dist/types/components/form/Autocomplete/Autocomplete.parts.d.ts.map +1 -1
  335. package/dist/types/components/form/Button/Button.styles.d.ts +1 -1
  336. package/dist/types/components/form/Button/Button.styles.d.ts.map +1 -1
  337. package/dist/types/components/form/CategorySelect/CategoryPanelFoot.d.ts.map +1 -1
  338. package/dist/types/components/form/CategorySelect/CategoryPanelHead.d.ts.map +1 -1
  339. package/dist/types/components/form/CategorySelect/CategoryPanelList.d.ts.map +1 -1
  340. package/dist/types/components/form/CategorySelect/CategoryPanelSurface.d.ts.map +1 -1
  341. package/dist/types/components/form/CategorySelect/CategoryRows.d.ts.map +1 -1
  342. package/dist/types/components/form/CategorySelect/CategorySelect.styles.d.ts +26 -24
  343. package/dist/types/components/form/CategorySelect/CategorySelect.styles.d.ts.map +1 -1
  344. package/dist/types/components/form/CategorySelect/CategoryTrigger.d.ts.map +1 -1
  345. package/dist/types/components/form/Checkbox/Checkbox.d.ts.map +1 -1
  346. package/dist/types/components/form/CodeEditor/CodeEditor.helpers.d.ts +1 -1
  347. package/dist/types/components/form/CodeEditor/CodeEditor.helpers.d.ts.map +1 -1
  348. package/dist/types/components/form/CodeEditor/CodeEditor.types.d.ts +1 -1
  349. package/dist/types/components/form/CodeEditor/CodeEditor.types.d.ts.map +1 -1
  350. package/dist/types/components/form/Command/Command.d.ts.map +1 -1
  351. package/dist/types/components/form/Command/Command.hooks.d.ts +1 -1
  352. package/dist/types/components/form/Command/Command.hooks.d.ts.map +1 -1
  353. package/dist/types/components/form/Command/Command.parts.d.ts.map +1 -1
  354. package/dist/types/components/form/CreatableSelect/CreatableSelect.d.ts.map +1 -1
  355. package/dist/types/components/form/DateRangePicker/DateRangePicker.d.ts.map +1 -1
  356. package/dist/types/components/form/DateRangePicker/DateRangePickerQuickList.d.ts.map +1 -1
  357. package/dist/types/components/form/Form/Form.d.ts.map +1 -1
  358. package/dist/types/components/form/HeaderActions/HeaderActions.d.ts.map +1 -1
  359. package/dist/types/components/form/Input/Input.d.ts.map +1 -1
  360. package/dist/types/components/form/Input/Input.styles.d.ts.map +1 -1
  361. package/dist/types/components/form/Label/Label.styles.d.ts +2 -2
  362. package/dist/types/components/form/Label/Label.styles.d.ts.map +1 -1
  363. package/dist/types/components/form/Menubar/Menubar.toolbar.d.ts +1 -1
  364. package/dist/types/components/form/Menubar/Menubar.toolbar.d.ts.map +1 -1
  365. package/dist/types/components/form/PasswordStrength/PasswordStrength.d.ts.map +1 -1
  366. package/dist/types/components/form/RadioGroup/RadioGroup.animations.d.ts +3 -2
  367. package/dist/types/components/form/RadioGroup/RadioGroup.animations.d.ts.map +1 -1
  368. package/dist/types/components/form/RadioGroup/RadioGroup.styles.d.ts.map +1 -1
  369. package/dist/types/components/form/RichTextEditor/RichTextEditor.d.ts.map +1 -1
  370. package/dist/types/components/form/RichTextEditor/RichTextEditorToolbar.d.ts.map +1 -1
  371. package/dist/types/components/form/SearchPalette/SearchPalette.parts.d.ts +1 -1
  372. package/dist/types/components/form/SearchPalette/SearchPalette.parts.d.ts.map +1 -1
  373. package/dist/types/components/form/Select/Select.d.ts.map +1 -1
  374. package/dist/types/components/form/Slider/Slider.animations.d.ts +2 -1
  375. package/dist/types/components/form/Slider/Slider.animations.d.ts.map +1 -1
  376. package/dist/types/components/form/Slider/Slider.styles.d.ts.map +1 -1
  377. package/dist/types/components/form/Switch/Switch.animations.d.ts +2 -1
  378. package/dist/types/components/form/Switch/Switch.animations.d.ts.map +1 -1
  379. package/dist/types/components/form/Switch/Switch.styles.d.ts.map +1 -1
  380. package/dist/types/components/form/Textarea/Textarea.d.ts.map +1 -1
  381. package/dist/types/components/form/Textarea/Textarea.styles.d.ts +1 -1
  382. package/dist/types/components/form/Textarea/Textarea.styles.d.ts.map +1 -1
  383. package/dist/types/components/form/Toggle/Toggle.d.ts.map +1 -1
  384. package/dist/types/components/form/Toggle/Toggle.styles.d.ts.map +1 -1
  385. package/dist/types/components/form/ToggleGroup/ToggleGroup.d.ts.map +1 -1
  386. package/dist/types/components/form/UploadButton/UploadButton.parts.d.ts.map +1 -1
  387. package/dist/user-avatar.js +3 -3
  388. package/package.json +1 -1
  389. package/src/components/form/AddressAutocomplete/AddressFallbackField.tsx +5 -1
  390. package/src/components/form/AddressAutocomplete/AddressInputField.tsx +36 -29
  391. package/src/components/form/AddressAutocomplete/AddressSuggestionsPaper.tsx +4 -2
  392. package/src/components/form/AddressAutocomplete/AddressTextField.tsx +4 -3
  393. package/src/components/form/Autocomplete/Autocomplete.parts.tsx +10 -7
  394. package/src/components/form/Button/Button.styles.ts +28 -25
  395. package/src/components/form/Button/Button.tsx +2 -2
  396. package/src/components/form/CategorySelect/CategoryPanelFoot.tsx +5 -4
  397. package/src/components/form/CategorySelect/CategoryPanelHead.tsx +13 -12
  398. package/src/components/form/CategorySelect/CategoryPanelList.tsx +3 -2
  399. package/src/components/form/CategorySelect/CategoryPanelSurface.tsx +2 -1
  400. package/src/components/form/CategorySelect/CategoryRows.tsx +4 -3
  401. package/src/components/form/CategorySelect/CategorySelect.styles.ts +98 -96
  402. package/src/components/form/CategorySelect/CategoryTrigger.tsx +5 -2
  403. package/src/components/form/Checkbox/Checkbox.tsx +21 -15
  404. package/src/components/form/CodeEditor/CodeEditor.helpers.ts +0 -2
  405. package/src/components/form/CodeEditor/CodeEditor.md +1 -1
  406. package/src/components/form/CodeEditor/CodeEditor.tsx +5 -5
  407. package/src/components/form/CodeEditor/CodeEditor.types.ts +1 -1
  408. package/src/components/form/Command/Command.hooks.ts +0 -2
  409. package/src/components/form/Command/Command.parts.tsx +7 -2
  410. package/src/components/form/Command/Command.styles.ts +11 -11
  411. package/src/components/form/Command/Command.tsx +14 -5
  412. package/src/components/form/CreatableSelect/CreatableSelect.tsx +12 -8
  413. package/src/components/form/DateRangePicker/DateRangePicker.tsx +10 -8
  414. package/src/components/form/DateRangePicker/DateRangePickerQuickList.tsx +8 -4
  415. package/src/components/form/Form/Form.tsx +6 -10
  416. package/src/components/form/HeaderActions/HeaderActions.tsx +2 -1
  417. package/src/components/form/Input/Input.styles.ts +17 -16
  418. package/src/components/form/Input/Input.tsx +4 -2
  419. package/src/components/form/InputOTP/InputOTP.styles.ts +3 -3
  420. package/src/components/form/Label/Label.styles.ts +8 -8
  421. package/src/components/form/Menubar/Menubar.item.tsx +2 -2
  422. package/src/components/form/Menubar/Menubar.styles.ts +13 -13
  423. package/src/components/form/Menubar/Menubar.toolbar.tsx +4 -2
  424. package/src/components/form/PasswordStrength/PasswordStrength.tsx +19 -18
  425. package/src/components/form/PhoneInput/PhoneInput.tsx +9 -9
  426. package/src/components/form/RadioGroup/RadioGroup.animations.ts +9 -6
  427. package/src/components/form/RadioGroup/RadioGroup.styles.ts +45 -43
  428. package/src/components/form/RichTextEditor/RichTextEditor.tsx +7 -6
  429. package/src/components/form/RichTextEditor/RichTextEditorToolbar.tsx +3 -1
  430. package/src/components/form/SearchPalette/SearchPalette.parts.tsx +8 -6
  431. package/src/components/form/Select/Select.tsx +14 -12
  432. package/src/components/form/Slider/Slider.animations.ts +7 -4
  433. package/src/components/form/Slider/Slider.styles.ts +43 -42
  434. package/src/components/form/Switch/Switch.animations.ts +7 -4
  435. package/src/components/form/Switch/Switch.parts.tsx +2 -2
  436. package/src/components/form/Switch/Switch.styles.ts +26 -22
  437. package/src/components/form/Textarea/Textarea.styles.ts +13 -12
  438. package/src/components/form/Textarea/Textarea.tsx +28 -22
  439. package/src/components/form/Textarea/TextareaRichEditor.tsx +10 -10
  440. package/src/components/form/Toggle/Toggle.styles.ts +29 -26
  441. package/src/components/form/Toggle/Toggle.tsx +5 -2
  442. package/src/components/form/ToggleGroup/ToggleGroup.tsx +18 -15
  443. package/src/components/form/UploadButton/UploadButton.parts.tsx +6 -5
  444. package/dist/chunk-2HVNPWFV.js.map +0 -1
  445. package/dist/chunk-2PBT2HQH.js.map +0 -1
  446. package/dist/chunk-35ETD7ML.js.map +0 -1
  447. package/dist/chunk-3A22SBIU.js.map +0 -1
  448. package/dist/chunk-4GYEIWQP.js.map +0 -1
  449. package/dist/chunk-5IXHJXJX.js.map +0 -1
  450. package/dist/chunk-5SJWDABY.js.map +0 -1
  451. package/dist/chunk-65CEXQ4L.js.map +0 -1
  452. package/dist/chunk-6DN4ZULV.js.map +0 -1
  453. package/dist/chunk-6M33XQLZ.js +0 -70
  454. package/dist/chunk-6M33XQLZ.js.map +0 -1
  455. package/dist/chunk-6SKXV236.js.map +0 -1
  456. package/dist/chunk-7BZTZ2WG.js.map +0 -1
  457. package/dist/chunk-7DN4UXJ3.js.map +0 -1
  458. package/dist/chunk-7EQCZO56.js.map +0 -1
  459. package/dist/chunk-AMTFP7QA.js.map +0 -1
  460. package/dist/chunk-BXAL7OIS.js.map +0 -1
  461. package/dist/chunk-CJHP6E34.js.map +0 -1
  462. package/dist/chunk-CMK4DJDR.js.map +0 -1
  463. package/dist/chunk-CSSCGM27.js.map +0 -1
  464. package/dist/chunk-CWDV64TD.js.map +0 -1
  465. package/dist/chunk-D2HKCPEH.js.map +0 -1
  466. package/dist/chunk-E6RYO4QZ.js.map +0 -1
  467. package/dist/chunk-EFV5QJNM.js.map +0 -1
  468. package/dist/chunk-HAQMKV5P.js.map +0 -1
  469. package/dist/chunk-HBICO6AX.js.map +0 -1
  470. package/dist/chunk-HC5ZSCRG.js.map +0 -1
  471. package/dist/chunk-IBGX6H4J.js.map +0 -1
  472. package/dist/chunk-J4NXTSJY.js.map +0 -1
  473. package/dist/chunk-JCBIPBGZ.js.map +0 -1
  474. package/dist/chunk-K7WSPGI7.js.map +0 -1
  475. package/dist/chunk-KH25WUSX.js.map +0 -1
  476. package/dist/chunk-LMXWI3DD.js.map +0 -1
  477. package/dist/chunk-LWRI6HGT.js.map +0 -1
  478. package/dist/chunk-NSJVQ5YJ.js.map +0 -1
  479. package/dist/chunk-OWA7GPWR.js.map +0 -1
  480. package/dist/chunk-PYIASGI7.js.map +0 -1
  481. package/dist/chunk-QY4XNTNG.js.map +0 -1
  482. package/dist/chunk-RQ5HZDBV.js.map +0 -1
  483. package/dist/chunk-SE6ERQY5.js.map +0 -1
  484. package/dist/chunk-ST4YYVUK.js.map +0 -1
  485. package/dist/chunk-TOXTJ7MU.js.map +0 -1
  486. package/dist/chunk-TQ2557I5.js.map +0 -1
  487. package/dist/chunk-TTAP5XFX.js.map +0 -1
  488. package/dist/chunk-U4H6MGVE.js.map +0 -1
  489. package/dist/chunk-VECWMANF.js.map +0 -1
  490. package/dist/chunk-WNUZK7NS.js.map +0 -1
  491. package/dist/chunk-WVC3BG6J.js.map +0 -1
  492. package/dist/chunk-XLYFOBBT.js.map +0 -1
  493. package/dist/chunk-XWWFBH2G.js.map +0 -1
  494. package/dist/chunk-YESTO24O.js.map +0 -1
  495. package/dist/chunk-YH37X6JT.js.map +0 -1
  496. /package/dist/{chunk-343OLRFT.js.map → chunk-2BIVCYTO.js.map} +0 -0
  497. /package/dist/{chunk-PNLM35GU.js.map → chunk-2JNHWKQK.js.map} +0 -0
  498. /package/dist/{chunk-IWOVENC3.js.map → chunk-2XX45PC5.js.map} +0 -0
  499. /package/dist/{chunk-RZ2C5CAW.js.map → chunk-2ZIHZLF5.js.map} +0 -0
  500. /package/dist/{chunk-ZW5K4XCQ.js.map → chunk-34BZXJGT.js.map} +0 -0
  501. /package/dist/{chunk-CHFHILTM.js.map → chunk-35S6QI5G.js.map} +0 -0
  502. /package/dist/{chunk-KCAW6HRO.js.map → chunk-3AOQBR7N.js.map} +0 -0
  503. /package/dist/{chunk-GVLZZCSX.js.map → chunk-4B5XUQQS.js.map} +0 -0
  504. /package/dist/{chunk-ADHMNIWS.js.map → chunk-4CXEWFKO.js.map} +0 -0
  505. /package/dist/{chunk-JJSZP3TW.js.map → chunk-57JLS55D.js.map} +0 -0
  506. /package/dist/{chunk-ZZM3DOEK.js.map → chunk-5HDYTTE7.js.map} +0 -0
  507. /package/dist/{chunk-GEXM6DNR.js.map → chunk-5KGABAQB.js.map} +0 -0
  508. /package/dist/{chunk-D5X4FRYX.js.map → chunk-6JNQLW5L.js.map} +0 -0
  509. /package/dist/{chunk-KJK2Q35C.js.map → chunk-75LOTMSN.js.map} +0 -0
  510. /package/dist/{chunk-A6AKFPIQ.js.map → chunk-7EH4D6FU.js.map} +0 -0
  511. /package/dist/{chunk-7ZG7T2YN.js.map → chunk-7GHYCQCJ.js.map} +0 -0
  512. /package/dist/{chunk-QIKPGMMO.js.map → chunk-AER4245J.js.map} +0 -0
  513. /package/dist/{chunk-4CTLEUK3.js.map → chunk-AYLEZM6T.js.map} +0 -0
  514. /package/dist/{chunk-JFBEZXNL.js.map → chunk-BAQBUKDU.js.map} +0 -0
  515. /package/dist/{chunk-RKI3MRKX.js.map → chunk-BW62QQAG.js.map} +0 -0
  516. /package/dist/{chunk-UL7L6MFT.js.map → chunk-C55AWF3U.js.map} +0 -0
  517. /package/dist/{chunk-GGWICBJD.js.map → chunk-CPAJYJUD.js.map} +0 -0
  518. /package/dist/{chunk-5TJRJSJY.js.map → chunk-CQLPDY2J.js.map} +0 -0
  519. /package/dist/{chunk-5UTAEHSB.js.map → chunk-CQPFSEJB.js.map} +0 -0
  520. /package/dist/{chunk-SN2YMCTL.js.map → chunk-CS3KOKL3.js.map} +0 -0
  521. /package/dist/{chunk-FXNYV5Z6.js.map → chunk-F6D6HXZU.js.map} +0 -0
  522. /package/dist/{chunk-TQBRWZA4.js.map → chunk-FFOQZRFC.js.map} +0 -0
  523. /package/dist/{chunk-GXCOXJS3.js.map → chunk-FNG33MKA.js.map} +0 -0
  524. /package/dist/{chunk-GW64UQXI.js.map → chunk-GHXFCMFP.js.map} +0 -0
  525. /package/dist/{chunk-L3B36HA5.js.map → chunk-GRDPGHQJ.js.map} +0 -0
  526. /package/dist/{chunk-6SS5C74Q.js.map → chunk-GS3RP2QE.js.map} +0 -0
  527. /package/dist/{chunk-B2VXP2B2.js.map → chunk-GZT7MLLO.js.map} +0 -0
  528. /package/dist/{chunk-AK2HOD6B.js.map → chunk-H5BEWPEY.js.map} +0 -0
  529. /package/dist/{chunk-DY4BP5WA.js.map → chunk-HNPWZ3W2.js.map} +0 -0
  530. /package/dist/{chunk-SYVNWXVW.js.map → chunk-HU7TX7RB.js.map} +0 -0
  531. /package/dist/{chunk-WPA26LXA.js.map → chunk-IKLOIONQ.js.map} +0 -0
  532. /package/dist/{chunk-DMWSXWCZ.js.map → chunk-JL75FJRG.js.map} +0 -0
  533. /package/dist/{chunk-ZAFFKQQU.js.map → chunk-JLQGRZMN.js.map} +0 -0
  534. /package/dist/{chunk-ZMC3N23A.js.map → chunk-JSD5TFDK.js.map} +0 -0
  535. /package/dist/{chunk-NE6XUN5Z.js.map → chunk-JU4MSYYH.js.map} +0 -0
  536. /package/dist/{chunk-YBTC4XNO.js.map → chunk-LT4NEKXB.js.map} +0 -0
  537. /package/dist/{chunk-6KL2CJBO.js.map → chunk-MNHIK2OR.js.map} +0 -0
  538. /package/dist/{chunk-JFEEV3XI.js.map → chunk-NB3FGWU4.js.map} +0 -0
  539. /package/dist/{chunk-2UCLUDEB.js.map → chunk-NCPWLHZT.js.map} +0 -0
  540. /package/dist/{chunk-DZNMS2SH.js.map → chunk-NDNYD4FG.js.map} +0 -0
  541. /package/dist/{chunk-UFLTL2RJ.js.map → chunk-PH36XEB3.js.map} +0 -0
  542. /package/dist/{chunk-4LQZH4PU.js.map → chunk-PMOEG36E.js.map} +0 -0
  543. /package/dist/{chunk-EXZSHZRS.js.map → chunk-PWZHCBG3.js.map} +0 -0
  544. /package/dist/{chunk-EFVOT3G5.js.map → chunk-PZ7PU4AP.js.map} +0 -0
  545. /package/dist/{chunk-I62ALI7F.js.map → chunk-Q73PTVNO.js.map} +0 -0
  546. /package/dist/{chunk-V74PXUQN.js.map → chunk-QEG3P5D4.js.map} +0 -0
  547. /package/dist/{chunk-7LIXQZBG.js.map → chunk-QI5CRSOW.js.map} +0 -0
  548. /package/dist/{chunk-V3LOHY4N.js.map → chunk-QKPD322X.js.map} +0 -0
  549. /package/dist/{chunk-PWF32ILG.js.map → chunk-SJO3K7SB.js.map} +0 -0
  550. /package/dist/{chunk-TU3EGIKB.js.map → chunk-SSS64KYB.js.map} +0 -0
  551. /package/dist/{chunk-SQYC57ZN.js.map → chunk-SYN46YL6.js.map} +0 -0
  552. /package/dist/{chunk-DHBYO7AO.js.map → chunk-TCV3N44E.js.map} +0 -0
  553. /package/dist/{chunk-DVGBFT6O.js.map → chunk-UAVSBSV5.js.map} +0 -0
  554. /package/dist/{chunk-B7BNNSM2.js.map → chunk-UZ6AUTE6.js.map} +0 -0
  555. /package/dist/{chunk-4WQ3YXQL.js.map → chunk-VT5HQ2AD.js.map} +0 -0
  556. /package/dist/{chunk-SX3MEC3Q.js.map → chunk-VZIB5W5L.js.map} +0 -0
  557. /package/dist/{chunk-X2AKLDPW.js.map → chunk-WE3LJPRN.js.map} +0 -0
  558. /package/dist/{chunk-FZ4YTEP2.js.map → chunk-XR46FSOH.js.map} +0 -0
@@ -21,7 +21,7 @@ const HOVER_TINT = 0x05 / 0xff;
21
21
  const GHOST_HOVER_TINT = 0x08 / 0xff;
22
22
  import type { UploadButtonCopy } from '../../../copy';
23
23
  import type { UploadButtonProps } from './UploadButton.types';
24
- import { sxRem } from '../../../tokens/relative';
24
+ import { rem, sxRem } from '../../../tokens/relative';
25
25
 
26
26
  /** Shared shape for the two trigger variants. */
27
27
  export interface TriggerProps {
@@ -55,7 +55,7 @@ export function UploadDropzone({
55
55
  {...drag}
56
56
  onClick={onOpen}
57
57
  sx={{
58
- border: `2px dashed ${isDragOver ? theme.palette.primary.main : theme.palette.divider}`,
58
+ border: `${rem(theme, 2)} dashed ${isDragOver ? theme.palette.primary.main : theme.palette.divider}`,
59
59
  borderRadius: 2,
60
60
  padding: 3,
61
61
  textAlign: 'center',
@@ -149,6 +149,7 @@ function UploadAnnouncer({
149
149
  progress: number;
150
150
  error: string | null;
151
151
  }): React.ReactElement {
152
+ const theme = useTheme();
152
153
  return (
153
154
  <div
154
155
  aria-live="polite"
@@ -156,9 +157,9 @@ function UploadAnnouncer({
156
157
  className="sr-only"
157
158
  style={{
158
159
  position: 'absolute',
159
- left: '-10000px',
160
- width: '1px',
161
- height: '1px',
160
+ left: rem(theme, -10000),
161
+ width: rem(theme, 1),
162
+ height: rem(theme, 1),
162
163
  overflow: 'hidden',
163
164
  }}
164
165
  >
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/form/Form/Form.tsx"],"sourcesContent":["import Box from '@mui/material/Box/index.js';\nimport Stack from '@mui/material/Stack/index.js';\nimport { styled } from '@mui/material/styles/index.js';\nimport React from 'react';\n\nimport type {\n FormControlProps,\n FormFieldProps,\n FormLabelProps,\n FormMessageProps,\n FormProps,\n} from './Form.types';\nimport { rem } from '../../../tokens/relative';\n\nconst StyledForm = styled('form', {\n shouldForwardProp: (prop) => prop !== 'variant',\n})<{ variant?: FormProps['variant'] }>(({ theme, variant }) => ({\n width: '100%',\n ...(variant === 'inline' && {\n display: 'flex',\n gap: theme.spacing(2),\n alignItems: 'flex-start',\n }),\n}));\n\nconst spacingMap = {\n xs: 1,\n sm: 2,\n md: 3,\n lg: 4,\n xl: 5,\n};\n\nconst maxWidthMap = {\n sm: '600px',\n md: '900px',\n lg: '1200px',\n xl: '1536px',\n full: '100%',\n};\n\nexport const Form = React.forwardRef<HTMLFormElement, FormProps>(\n ({ variant = 'vertical', maxWidth = 'full', spacing = 'md', children, dataTestId, ...props }, ref) => (\n <StyledForm ref={ref} variant={variant} role=\"form\" data-testid={dataTestId} {...props}>\n <Box sx={{ maxWidth: maxWidthMap[maxWidth], width: '100%' }}>\n {variant === 'inline' ? (\n children\n ) : (\n <Stack spacing={spacingMap[spacing]}>{children}</Stack>\n )}\n </Box>\n </StyledForm>\n ),\n);\n\nForm.displayName = 'Form';\n\n/**\n * NO ROW GAP HERE, and that is the fix rather than an omission.\n *\n * `FormLabel` already carries `marginBottom: theme.spacing(0.5)` — 4px — and it\n * carries it because it has to: every OTHER user of it (`CepField`,\n * `CategorySelect`, `CreatableSelect`, the three `total-form` fields, five of\n * `@12-apps/discounts`' builders and the host's own `currency-field`) puts a\n * bare `FormLabel` straight inside a `FormControl`, which is a plain block box\n * with no gap of its own. There, the label's own margin is the ONLY thing\n * between the label and the control.\n *\n * A `gap: theme.spacing(1)` here was a second mechanism for that one job, and in\n * a column the two ADD: 8px + 4px put `FormField` at 12px where every one of\n * those siblings sits at 4px. Measured in Chromium at 320x568 on a consuming\n * app's six-field delivery address form, the 8px a row it added pushed the\n * submit button from 561px to 609px — 41px below the fold of the smallest\n * supported phone, i.e. a checkout whose primary action is off-screen.\n *\n * That claim is about `FormLabel`'s own callers, not about the whole package:\n * `Textarea` labels its control through MUI's `InputLabel` at\n * `theme.spacing(1)` and still draws 8px. It composes nothing out of\n * `FormLabel`, so it is a separate inconsistency rather than a reason to keep\n * a second spacing here.\n *\n * ## The `columnGap` is scaffolding, and currently unreachable\n *\n * `FormFieldProps` has no `variant` and `FormField` passes none, so `variant`\n * is ALWAYS undefined and every branch below resolves to the vertical shape.\n * `Form` accepts `variant=\"horizontal\"` and `Form.md` documents it as \"labels\n * beside inputs\", but nothing carries that variant down to the field — so a\n * horizontal form draws vertical rows today. That gap is older than this\n * change and fixing it is a feature, not a spacing fix.\n *\n * The branch is kept, scoped to the COLUMN axis, so that whoever does wire it\n * up inherits the right answer: with the label beside the control, a horizontal\n * gap and a vertical margin are orthogonal and nothing double-counts. A `gap`\n * shorthand there would put the 8px back on the row axis the moment a field\n * wrapped.\n */\nconst StyledFormField = styled(Box, {\n shouldForwardProp: (prop) => prop !== 'variant',\n})<{ variant?: 'vertical' | 'horizontal' }>(\n ({ theme, variant }) => ({\n display: variant === 'horizontal' ? 'grid' : 'flex',\n flexDirection: variant === 'horizontal' ? undefined : 'column',\n gridTemplateColumns: variant === 'horizontal' ? '200px 1fr' : undefined,\n columnGap: variant === 'horizontal' ? theme.spacing(1) : undefined,\n alignItems: variant === 'horizontal' ? 'center' : undefined,\n }),\n);\n\nexport const FormField: React.FC<FormFieldProps> = ({\n name,\n label,\n required,\n error,\n helperText,\n children,\n dataTestId,\n}) => (\n <StyledFormField data-testid={dataTestId}>\n {label && (\n <FormLabel required={required} error={!!error} htmlFor={name} dataTestId={dataTestId ? `${dataTestId}-label` : undefined}>\n {label}\n </FormLabel>\n )}\n <FormControl fullWidth dataTestId={dataTestId ? `${dataTestId}-control` : undefined}>\n {children}\n {(error || helperText) && <FormMessage error={!!error} dataTestId={dataTestId ? `${dataTestId}-message` : undefined}>{error || helperText}</FormMessage>}\n </FormControl>\n </StyledFormField>\n );\n\nconst StyledFormLabel = styled('label', {\n shouldForwardProp: (prop) => prop !== 'error',\n})<{ error?: boolean }>(({ theme, error }) => ({\n fontSize: rem(theme, 14),\n fontWeight: 500,\n color: error ? theme.palette.error.main : theme.palette.text.primary,\n marginBottom: theme.spacing(0.5),\n display: 'block',\n '&::after': {\n content: '\" *\"',\n color: theme.palette.error.main,\n display: 'var(--required-display, none)',\n },\n}));\n\nexport const FormLabel: React.FC<FormLabelProps> = ({ required, error, children, htmlFor, dataTestId }) => (\n <StyledFormLabel\n error={error}\n htmlFor={htmlFor}\n data-testid={dataTestId}\n style={{ '--required-display': required ? 'inline' : 'none' } as React.CSSProperties}\n >\n {children}\n </StyledFormLabel>\n );\n\nconst StyledFormControl = styled(Box, {\n shouldForwardProp: (prop) => prop !== 'fullWidth',\n})<{ fullWidth?: boolean }>(({ fullWidth }) => ({\n width: fullWidth ? '100%' : 'auto',\n position: 'relative',\n}));\n\nexport const FormControl: React.FC<FormControlProps> = ({ fullWidth = true, children, dataTestId }) =>\n // Don't pass error prop to the DOM element\n <StyledFormControl fullWidth={fullWidth} data-testid={dataTestId}>{children}</StyledFormControl>\n;\n\nconst StyledFormMessage = styled('span', {\n shouldForwardProp: (prop) => prop !== 'error',\n})<{ error?: boolean }>(({ theme, error }) => ({\n fontSize: rem(theme, 12),\n marginTop: theme.spacing(0.5),\n color: error ? theme.palette.error.main : theme.palette.text.secondary,\n display: 'block',\n}));\n\nexport const FormMessage: React.FC<FormMessageProps> = ({ error, children, dataTestId }) => <StyledFormMessage error={error} data-testid={dataTestId}>{children}</StyledFormMessage>;\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/form/Switch/Switch.styles.ts"],"sourcesContent":["import { alpha } from '@mui/material/styles/index.js';\nimport type { CSSObject, Theme } from '@mui/material/styles/index.js';\n\nimport {\n bounceAnimation,\n glowAnimation,\n pulseAnimation,\n rippleAnimation,\n shimmerAnimation,\n spinAnimation,\n} from './Switch.animations';\nimport {\n DISABLED,\n IOS_BASE_OFFSET,\n IOS_THUMB_SHADOW,\n IOS_TRAVEL_INSET,\n SWITCH_GLASS,\n SWITCH_GLOW,\n NEUTRAL_CONTRAST,\n SWITCH_FOCUS_RING,\n SWITCH_GRADIENT,\n SWITCH_HOVER,\n SWITCH_PULSE,\n SWITCH_RIPPLE,\n SWITCH_SPINNER,\n SWITCH_TRANSITION,\n RESTING_THUMB,\n THUMB_ELEVATION,\n THUMB_RADIUS,\n TRACK_LABEL,\n TRACK_RADIUS,\n geometryOf,\n iosTrackShadow,\n lookOf,\n seconds,\n showsTrackLabels,\n trackColor,\n type SwitchGeometry,\n type SwitchLook,\n} from './Switch.metrics';\nimport type { SwitchVariant } from './Switch.base';\n\nimport { absoluteInk, controlNeutral, neutralTones } from '../../../tokens/ink';\nimport { rem } from '../../../tokens/relative';\nimport { inkOver } from '../../../tokens/theme';\nimport type { ColorValue, SizeValue } from '../../../tokens/vocabulary';\n\n// Every number below comes from `./Switch.metrics`, which the native renderer\n// reads too — see its header. The palette and the shadows stay on the MUI\n// theme so a host that re-themes either keeps moving the web.\ninterface ColorPalette {\n main: string;\n dark?: string;\n light?: string;\n contrastText?: string;\n}\n\n/** `neutral` is not a MUI palette entry, so it is the controls' neutral tone. */\nconst neutralPalette = (theme: Theme): ColorPalette => controlNeutral(theme);\n\n/**\n * Resolves a colour name to a full palette, filling any step the theme leaves\n * out from `main` and then from the primary palette. `danger` is this\n * component's name for the error palette; the rest map straight through.\n */\nconst getColorFromTheme = (theme: Theme, color: string): ColorPalette => {\n if (color === 'neutral') {\n return neutralPalette(theme);\n }\n\n const colorMap: Record<string, ColorPalette | undefined> = {\n primary: theme.palette.primary,\n secondary: theme.palette.secondary,\n success: theme.palette.success,\n warning: theme.palette.warning,\n info: theme.palette.info,\n danger: theme.palette.error,\n };\n const palette = colorMap[color] ?? theme.palette.primary;\n const { primary } = theme.palette;\n\n return {\n main: palette.main || primary.main,\n dark: palette.dark || palette.main || primary.dark,\n light: palette.light || palette.main || primary.light,\n contrastText: palette.contrastText || NEUTRAL_CONTRAST,\n };\n};\n\nexport interface SwitchFlags {\n customVariant?: SwitchVariant;\n customColor?: ColorValue;\n customSize?: SizeValue;\n glow?: boolean;\n glass?: boolean;\n gradient?: boolean;\n trackWidth?: number;\n trackHeight?: number;\n onText?: string;\n offText?: string;\n loading?: boolean;\n ripple?: boolean;\n pulse?: boolean;\n}\n\nconst thumbShadow = (theme: Theme, look: SwitchLook): string =>\n look === 'ios' ? IOS_THUMB_SHADOW : (theme.shadows[THUMB_ELEVATION[look]] ?? 'none');\n\n/** The ripple that expands from the thumb on hover. */\nconst rippleOverlay = (palette: ColorPalette): CSSObject => ({\n content: '\"\"',\n position: 'absolute',\n top: '50%',\n left: '50%',\n width: '100%',\n height: '100%',\n borderRadius: '50%',\n background: alpha(palette.main, SWITCH_RIPPLE.alpha),\n animation: `${rippleAnimation} ${seconds(SWITCH_RIPPLE.ms)} ease-out`,\n transform: 'translate(-50%, -50%)',\n pointerEvents: 'none',\n});\n\n/**\n * The ink on the CHECKED track — the thumb, the `on` wording and any on-icon\n * (FUT-1924).\n *\n * All three stated `#fff`, and the checked track is `palette.main`: the one\n * surface in this component the TENANT picks. A store with a pale brand got a\n * white thumb on a pale green bar, which does not read as a knob at all — the\n * switch looks OFF while it is on, so this is a state a user misreads rather\n * than a colour they dislike.\n *\n * The `gradient` flag paints the track `light → main → dark`, so the fills the\n * thumb travels over are handed over together and {@link inkOver} takes the\n * worst of them.\n *\n * The RESTING track is not here on purpose: it is `theme.palette.action.disabled`\n * washed over the page, which no tenant chooses, and a white thumb on it is the\n * conventional look in both modes.\n */\nconst checkedInk = (flags: SwitchFlags, palette: ColorPalette): string => {\n const fills = flags.gradient\n ? [palette.light || palette.main, palette.main, palette.dark || palette.main]\n : [palette.main];\n\n return inkOver(fills, palette.contrastText || NEUTRAL_CONTRAST);\n};\n\n/** The checked track: the filled bar behind the thumb once the switch is on. */\nconst checkedTrack = (flags: SwitchFlags, palette: ColorPalette): CSSObject => ({\n backgroundColor: palette.main,\n opacity: 1,\n border: 0,\n position: 'relative',\n overflow: 'hidden',\n ...(flags.glow && {\n animation: `${glowAnimation} ${seconds(SWITCH_GLOW.ms)} ease-in-out infinite`,\n boxShadow: `0 0 ${SWITCH_GLOW.blur}px ${alpha(palette.main, SWITCH_GLOW.alpha)}, inset 0 0 ${SWITCH_GLOW.insetBlur}px ${alpha(palette.main, SWITCH_GLOW.insetAlpha)}`,\n }),\n ...(flags.gradient && {\n background: `linear-gradient(${SWITCH_GRADIENT.checked.angleDeg}deg, ${palette.light || palette.main} ${SWITCH_GRADIENT.checked.stops[0]}%, ${palette.main} ${SWITCH_GRADIENT.checked.stops[1]}%, ${palette.dark || palette.main} ${SWITCH_GRADIENT.checked.stops[2]}%)`,\n backgroundSize: '200% 100%',\n animation: `${shimmerAnimation} ${seconds(SWITCH_GRADIENT.shimmerMs)} ease infinite`,\n }),\n});\n\nconst switchBaseSx = (\n theme: Theme,\n flags: SwitchFlags,\n palette: ColorPalette,\n geometry: SwitchGeometry,\n look: SwitchLook,\n): CSSObject => {\n const { width, thumbSize, padding } = geometry;\n const isIos = look === 'ios';\n\n return {\n padding,\n margin: 0,\n transitionDuration: `${SWITCH_TRANSITION.ms}ms`,\n transitionTimingFunction: SWITCH_TRANSITION.easing,\n ...(isIos && { transform: `translateX(${IOS_BASE_OFFSET}px)` }),\n '&:hover': {\n '& .MuiSwitch-thumb': {\n transform: flags.loading ? 'none' : `scale(${SWITCH_HOVER.thumbScale})`,\n boxShadow: `${theme.shadows[SWITCH_HOVER.elevation]}, 0 0 ${SWITCH_HOVER.blur}px ${alpha(palette.main, SWITCH_HOVER.alpha)}`,\n },\n ...(flags.ripple && { '&::after': rippleOverlay(palette) }),\n },\n '&.Mui-checked': {\n // The thumb travels the track minus its own width and both paddings; the\n // iOS look insets differently, so it gets its own distance.\n transform: `translateX(${width - thumbSize - padding * 2}px)`,\n color: checkedInk(flags, palette),\n '& .MuiSwitch-thumb': {\n animation: flags.loading ? 'none' : `${bounceAnimation} ${seconds(SWITCH_TRANSITION.ms)} ease-out`,\n /*\n GLASS KEEPS ITS WASH AND GAINS AN OUTLINE (FUT-2067).\n\n It used to keep the wash and nothing else, on the argument that a\n translucent thumb MEANS to show the track through itself, so painting\n it opaque would be repainting the variant rather than fixing it. The\n first half of that is still true and this still does not touch the\n fill. The second half was doing more work than the number supports:\n `SWITCH_GLASS.thumbAlpha` is **0.9**, so nine parts in ten of the knob\n are `background.paper` and one part is the track. On a pale brand that\n composites to within about 1.1:1 of the bar it is sitting on — the\n same \"reads as OFF while it is on\" state FUT-1924 exists for, in the\n one variant whose own argument points AT the tenant-controlled\n surface.\n\n So the separation moves to the EDGE, which is the thing a glass\n surface is allowed to have. The colour is {@link checkedInk} — the\n same derivation the opaque thumb gets, so there is one rule for \"what\n reads on this track\" rather than two — at full strength rather than\n the `divider` hairline at `borderAlpha` 0.2 the resting thumb wears,\n which on a pale track is not an outline at all.\n\n Checked only. The resting track is `action.disabled` washed over the\n page, which no tenant chooses, so the quiet hairline stays right\n there — the same split {@link checkedInk}'s own docblock makes.\n */\n ...(flags.glass\n ? { borderColor: checkedInk(flags, palette) }\n : { backgroundColor: checkedInk(flags, palette) }),\n },\n '& + .MuiSwitch-track': checkedTrack(flags, palette),\n '&.Mui-disabled + .MuiSwitch-track': { opacity: DISABLED.checkedTrackOpacity },\n ...(isIos && { transform: `translateX(${width - thumbSize - IOS_TRAVEL_INSET}px)` }),\n },\n '&.Mui-focusVisible .MuiSwitch-thumb': {\n color: palette.main,\n border: `${SWITCH_FOCUS_RING.width}px solid ${alpha(palette.main, SWITCH_FOCUS_RING.alpha)}`,\n },\n '&.Mui-disabled .MuiSwitch-thumb': { color: neutralTones(theme).surface },\n '&.Mui-disabled + .MuiSwitch-track': { opacity: DISABLED.trackOpacity },\n };\n};\n\nconst thumbSx = (\n theme: Theme,\n flags: SwitchFlags,\n palette: ColorPalette,\n thumbSize: number,\n look: SwitchLook,\n): CSSObject => ({\n width: thumbSize,\n height: thumbSize,\n borderRadius: THUMB_RADIUS[look](thumbSize),\n // `.Mui-checked` above replaces this for the brand-filled track; see\n // {@link RESTING_THUMB} for why the resting one stays white.\n backgroundColor: RESTING_THUMB,\n boxShadow: thumbShadow(theme, look),\n transition: `all ${seconds(SWITCH_TRANSITION.ms)} ${SWITCH_TRANSITION.easing}`,\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n ...(flags.glass && {\n backgroundColor: alpha(theme.palette.background.paper, SWITCH_GLASS.thumbAlpha),\n backdropFilter: `blur(${SWITCH_GLASS.thumbBlur}px)`,\n border: `1px solid ${alpha(theme.palette.divider, SWITCH_GLASS.borderAlpha)}`,\n }),\n ...(flags.pulse && { animation: `${pulseAnimation} ${seconds(SWITCH_PULSE.ms)} ease-in-out infinite` }),\n ...(flags.loading && {\n // A spinner drawn inside the thumb rather than over the whole control.\n '&::after': {\n content: '\"\"',\n position: 'absolute',\n width: thumbSize * SWITCH_SPINNER.sizeRatio,\n height: thumbSize * SWITCH_SPINNER.sizeRatio,\n border: `${SWITCH_SPINNER.borderWidth}px solid ${palette.main}`,\n borderTop: `${SWITCH_SPINNER.borderWidth}px solid transparent`,\n borderRadius: '50%',\n animation: `${spinAnimation} ${seconds(SWITCH_SPINNER.ms)} linear infinite`,\n },\n }),\n ...(look === 'material' && {\n '&::before': {\n content: '\"\"',\n position: 'absolute',\n width: '100%',\n height: '100%',\n borderRadius: 'inherit',\n backgroundColor: palette.main,\n opacity: 0,\n transform: 'scale(0)',\n transition: 'all 0.3s ease',\n },\n }),\n});\n\n/** The on/off wording the `label` variant prints inside the track. */\nconst trackLabels = (\n theme: Theme,\n flags: SwitchFlags,\n palette: ColorPalette,\n onText?: string,\n offText?: string,\n): CSSObject => ({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n paddingLeft: theme.spacing(TRACK_LABEL.insetUnits),\n paddingRight: theme.spacing(TRACK_LABEL.insetUnits),\n fontSize: rem(theme, TRACK_LABEL.fontSize),\n fontWeight: TRACK_LABEL.fontWeight,\n color: theme.palette.text.secondary,\n '&::before, &::after': {\n content: '\"\"',\n position: 'absolute',\n fontSize: rem(theme, TRACK_LABEL.fontSize),\n fontWeight: TRACK_LABEL.fontWeight,\n top: '50%',\n transform: 'translateY(-50%)',\n zIndex: 1,\n },\n ...(onText && {\n '&::before': {\n content: `\"${onText}\"`,\n left: theme.spacing(TRACK_LABEL.insetUnits),\n // The `on` word sits at the end the thumb travels TO, which is the\n // filled half of the track once checked.\n color: checkedInk(flags, palette),\n },\n }),\n ...(offText && {\n '&::after': {\n content: `\"${offText}\"`,\n right: theme.spacing(TRACK_LABEL.insetUnits),\n color: theme.palette.text.secondary,\n },\n }),\n});\n\nconst trackSx = (\n theme: Theme,\n flags: SwitchFlags,\n palette: ColorPalette,\n height: number,\n look: SwitchLook,\n): CSSObject => {\n const { glass, gradient, onText, offText, customVariant } = flags;\n\n return {\n borderRadius: TRACK_RADIUS[look](height),\n backgroundColor: trackColor(\n { black: absoluteInk(theme).black, disabled: theme.palette.action.disabled },\n look,\n ),\n opacity: 1,\n transition: `all ${seconds(SWITCH_TRANSITION.ms)} ${SWITCH_TRANSITION.easing}`,\n position: 'relative',\n boxShadow: look === 'ios' ? iosTrackShadow() : 'none',\n ...(glass && {\n backgroundColor: alpha(theme.palette.background.paper, SWITCH_GLASS.trackAlpha),\n backdropFilter: `blur(${SWITCH_GLASS.trackBlur}px)`,\n border: `1px solid ${alpha(theme.palette.divider, SWITCH_GLASS.borderAlpha)}`,\n }),\n ...(gradient &&\n !glass && {\n background: `linear-gradient(${SWITCH_GRADIENT.resting.angleDeg}deg, ${alpha(palette.light || palette.main, SWITCH_GRADIENT.resting.lightAlpha)}, ${alpha(palette.main, SWITCH_GRADIENT.resting.mainAlpha)})`,\n }),\n ...(showsTrackLabels(customVariant, onText, offText) &&\n trackLabels(theme, flags, palette, onText, offText)),\n };\n};\n\n/**\n * The same checked-track ink, for the two ICONS the control overlays on the\n * track — which are drawn as components rather than styles, so they cannot\n * reach {@link checkedInk} directly.\n */\nexport const onTrackInk = (theme: Theme, flags: SwitchFlags): string =>\n checkedInk(flags, getColorFromTheme(theme, flags.customColor ?? 'primary'));\n\nexport const switchSx = (theme: Theme, flags: SwitchFlags): CSSObject => {\n const palette = getColorFromTheme(theme, flags.customColor ?? 'primary');\n const geometry = geometryOf(flags.customSize, flags.trackWidth, flags.trackHeight);\n const look = lookOf(flags.customVariant);\n\n return {\n width: geometry.width,\n height: geometry.height,\n padding: 0,\n overflow: 'visible',\n '& .MuiSwitch-switchBase': switchBaseSx(theme, flags, palette, geometry, look),\n '& .MuiSwitch-thumb': thumbSx(theme, flags, palette, geometry.thumbSize, look),\n '& .MuiSwitch-track': trackSx(theme, flags, palette, geometry.height, look),\n };\n};\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/form/Switch/Switch.animations.ts"],"sourcesContent":["import { keyframes } from '@mui/material/styles/index.js';\n\nexport const glowAnimation = keyframes`\n 0% {\n box-shadow: 0 0 5px currentColor;\n }\n 50% {\n box-shadow: 0 0 15px currentColor, 0 0 25px currentColor;\n }\n 100% {\n box-shadow: 0 0 5px currentColor;\n }\n`;\n\nexport const bounceAnimation = keyframes`\n 0%, 100% {\n transform: scale(1);\n }\n 50% {\n transform: scale(1.1);\n }\n`;\n\nexport const pulseAnimation = keyframes`\n 0%, 100% {\n opacity: 1;\n transform: scale(1);\n }\n 50% {\n opacity: 0.7;\n transform: scale(0.95);\n }\n`;\n\nexport const rippleAnimation = keyframes`\n 0% {\n transform: scale(0);\n opacity: 1;\n }\n 100% {\n transform: scale(2);\n opacity: 0;\n }\n`;\n\nexport const spinAnimation = keyframes`\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n`;\n\nexport const shimmerAnimation = keyframes`\n 0% {\n background-position: -200% 50%;\n }\n 100% {\n background-position: 200% 50%;\n }\n`;\n"],"mappings":";AAAA,SAAS,iBAAiB;AAEnB,IAAM,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYtB,IAAM,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASxB,IAAM,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWvB,IAAM,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWxB,IAAM,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAStB,IAAM,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/form/Toggle/Toggle.tsx"],"sourcesContent":["import ToggleButton from '@mui/material/ToggleButton/index.js';\nimport { styled } from '@mui/material/styles/index.js';\nimport React, { forwardRef } from 'react';\n\nimport {\n baseStyles,\n effectStyles,\n getColorFromTheme,\n variantStyles,\n} from './Toggle.styles';\nimport type { ToggleProps } from './Toggle.types';\n\nconst StyledToggle = styled(ToggleButton, {\n shouldForwardProp: (prop) =>\n !['customVariant', 'customColor', 'customSize', 'glow', 'glass', 'gradient'].includes(\n prop as string,\n ),\n})<{\n customVariant?: string;\n customColor?: string;\n customSize?: string;\n glow?: boolean;\n glass?: boolean;\n gradient?: boolean;\n}>(({\n theme,\n customVariant,\n customColor = 'primary',\n customSize = 'md',\n glow,\n glass,\n gradient,\n}) => {\n const colorPalette = getColorFromTheme(theme, customColor);\n\n return {\n ...baseStyles(theme, colorPalette, customSize),\n ...variantStyles(theme, customVariant, colorPalette),\n ...effectStyles(theme, colorPalette, { glass, gradient, glow }),\n };\n});\n\nexport const Toggle = forwardRef<HTMLButtonElement, ToggleProps>(\n (\n {\n variant = 'default',\n color = 'primary',\n size = 'md',\n icon,\n glow = false,\n glass = false,\n gradient = false,\n dataTestId,\n children,\n ...props\n },\n ref,\n ) => {\n const testIds = {\n container: dataTestId,\n icon: dataTestId ? `${dataTestId}-icon` : undefined,\n };\n\n return (\n <StyledToggle\n ref={ref}\n customVariant={variant}\n customColor={color}\n customSize={size}\n glow={glow}\n glass={glass}\n gradient={gradient}\n data-testid={testIds.container}\n {...props}\n >\n {icon && (\n <span\n style={{ marginRight: children ? '8px' : '0' }}\n data-testid={testIds.icon}\n >\n {icon}\n </span>\n )}\n {children}\n </StyledToggle>\n );\n },\n);\n\nToggle.displayName = 'Toggle';\n"],"mappings":";;;;;;;;AAAA,OAAO,kBAAkB;AACzB,SAAS,cAAc;AACvB,SAAgB,kBAAkB;AA8D5B,SAYI,KAZJ;AApDN,IAAM,eAAe,OAAO,cAAc;AAAA,EACxC,mBAAmB,CAAC,SAClB,CAAC,CAAC,iBAAiB,eAAe,cAAc,QAAQ,SAAS,UAAU,EAAE;AAAA,IAC3E;AAAA,EACF;AACJ,CAAC,EAOE,CAAC;AAAA,EACF;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd,aAAa;AAAA,EACb;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,eAAe,kBAAkB,OAAO,WAAW;AAEzD,SAAO;AAAA,IACL,GAAG,WAAW,OAAO,cAAc,UAAU;AAAA,IAC7C,GAAG,cAAc,OAAO,eAAe,YAAY;AAAA,IACnD,GAAG,aAAa,OAAO,cAAc,EAAE,OAAO,UAAU,KAAK,CAAC;AAAA,EAChE;AACF,CAAC;AAEM,IAAM,SAAS;AAAA,EACpB,CACE;AAAA,IACE,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,OAAO;AAAA,IACP;AAAA,IACA,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,WAAW;AAAA,IACX;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,GACA,QACG;AACH,UAAM,UAAU;AAAA,MACd,WAAW;AAAA,MACX,MAAM,aAAa,GAAG,UAAU,UAAU;AAAA,IAC5C;AAEA,WACE;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,eAAe;AAAA,QACf,aAAa;AAAA,QACb,YAAY;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA,eAAa,QAAQ;AAAA,QACpB,GAAG;AAAA,QAEH;AAAA,kBACC;AAAA,YAAC;AAAA;AAAA,cACC,OAAO,EAAE,aAAa,WAAW,QAAQ,IAAI;AAAA,cAC7C,eAAa,QAAQ;AAAA,cAEpB;AAAA;AAAA,UACH;AAAA,UAED;AAAA;AAAA;AAAA,IACH;AAAA,EAEJ;AACF;AAEA,OAAO,cAAc;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/form/PhoneInput/PhoneInput.tsx"],"sourcesContent":["import ArrowDropDown from '@mui/icons-material/ArrowDropDown';\nimport PhoneIcon from '@mui/icons-material/Phone';\nimport Box from '@mui/material/Box/index.js';\nimport InputAdornment from '@mui/material/InputAdornment/index.js';\nimport ListItemIcon from '@mui/material/ListItemIcon/index.js';\nimport ListItemText from '@mui/material/ListItemText/index.js';\nimport Menu from '@mui/material/Menu/index.js';\nimport MenuItem from '@mui/material/MenuItem/index.js';\nimport TextField from '@mui/material/TextField/index.js';\nimport Typography from '@mui/material/Typography/index.js';\nimport { alpha, styled, useTheme } from '@mui/material/styles/index.js';\nimport type { FC} from 'react';\nimport React, { } from 'react';\n\nimport { countries } from './countries';\nimport { usePhoneInput } from './PhoneInput.hooks';\nimport type { CountryData,PhoneInputProps } from './PhoneInput.types';\nimport type { PhoneInputCopy } from '../../../copy';\n\nimport { fieldEdge } from '../../../tokens/field-edge';\nimport { fieldRadius } from '../../../tokens/field-radius';\nimport { fieldControlStyles, fieldTextFieldStyles } from '../../../tokens/field-height';\nimport { rem } from '../../../tokens/relative';\n\n// Country data with expanded support\n\n// Styled components\n/** The plain variant: MUI's own field, on the theme's field radius. */\nconst FieldTextField = styled(TextField)(({ theme }) => fieldTextFieldStyles(theme));\n\nconst GlassTextField = styled(TextField)(({ theme }) => ({\n ...fieldControlStyles(theme),\n '& .MuiOutlinedInput-root': {\n borderRadius: fieldRadius(theme),\n background: `linear-gradient(135deg, ${alpha(theme.palette.background.paper, 0.8)} 0%, ${alpha(theme.palette.background.paper, 0.6)} 100%)`,\n backdropFilter: 'blur(10px)',\n WebkitBackdropFilter: 'blur(10px)',\n border: `1px solid ${fieldEdge(theme)}`,\n transition: theme.transitions.create(['border-color', 'box-shadow', 'background']),\n '&:hover': {\n background: `linear-gradient(135deg, ${alpha(theme.palette.background.paper, 0.9)} 0%, ${alpha(theme.palette.background.paper, 0.7)} 100%)`,\n borderColor: theme.palette.primary.main },\n '&.Mui-focused': {\n background: theme.palette.background.paper,\n boxShadow: `0 0 0 2px ${alpha(theme.palette.primary.main, 0.25)}` },\n '& fieldset': {\n border: 'none' } },\n '& .MuiInputLabel-root': {\n '&.Mui-focused': {\n color: theme.palette.primary.main } } }));\n\nconst CountrySelector = styled(Box)(({ theme }) => ({\n display: 'flex',\n alignItems: 'center',\n padding: theme.spacing(0.5, 1),\n borderRadius: theme.shape.borderRadius,\n cursor: 'pointer',\n transition: theme.transitions.create(['background-color']),\n '&:hover': {\n backgroundColor: alpha(theme.palette.primary.main, 0.08) } }));\n\nconst CountryMenu = styled(Menu)(({ theme }) => ({\n '& .MuiPaper-root': {\n background: `linear-gradient(135deg, ${alpha(theme.palette.background.paper, 0.98)} 0%, ${alpha(theme.palette.background.paper, 0.95)} 100%)`,\n backdropFilter: 'blur(20px)',\n WebkitBackdropFilter: 'blur(20px)',\n border: `1px solid ${alpha(theme.palette.divider, 0.18)}`,\n maxHeight: 400 } }));\n\n// Helper functions with enhanced validation\n// The text field itself with its two adornments. Split out so PhoneInput is\n// prop defaults, the hook call and composition.\nconst PhoneField: React.FC<{\n TextFieldComponent: React.ElementType;\n variant: PhoneInputProps['variant'];\n label?: React.ReactNode;\n placeholder?: string;\n value: string;\n validation: { hasError: boolean; helperText?: React.ReactNode };\n disabled: boolean;\n required: boolean;\n fullWidth: boolean;\n icon?: React.ReactNode;\n isValid: boolean;\n selectedCountry?: CountryData;\n anchorEl: HTMLElement | null;\n onChange: (event: React.ChangeEvent<HTMLInputElement>) => void;\n onFocus: () => void;\n onBlur: () => void;\n onCountryOpen: (event: React.MouseEvent<HTMLElement>) => void;\n onCountryOpenViaKeyboard: (element: HTMLElement) => void;\n copy: PhoneInputCopy;\n}> = ({\n TextFieldComponent,\n copy,\n variant,\n label,\n placeholder,\n value,\n validation,\n disabled,\n required,\n fullWidth,\n icon,\n isValid,\n selectedCountry,\n anchorEl,\n onChange,\n onFocus,\n onBlur,\n onCountryOpen,\n onCountryOpenViaKeyboard }) => (\n <TextFieldComponent\n variant={variant === 'glass' ? 'outlined' : variant}\n label={label}\n placeholder={placeholder}\n value={value}\n onChange={onChange}\n onFocus={onFocus}\n onBlur={onBlur}\n error={validation.hasError}\n helperText={validation.helperText}\n disabled={disabled}\n required={required}\n fullWidth={fullWidth}\n type=\"tel\"\n data-testid=\"phone-input-field\"\n InputProps={{\n startAdornment: (\n <CountryAdornment\n selectCountryLabel={copy.selectCountry}\n country={selectedCountry}\n menuOpen={Boolean(anchorEl)}\n onOpen={onCountryOpen}\n onOpenViaKeyboard={onCountryOpenViaKeyboard}\n />\n ),\n endAdornment: <ValidityAdornment icon={icon} isValid={isValid} /> }}\n sx={{\n '& input': {\n letterSpacing: '0.5px' } }}\n />\n);\n\nconst PHONE_INPUT_DEFAULTS = {\n variant: 'outlined',\n label: 'Phone Number',\n placeholder: 'Enter phone number',\n icon: <PhoneIcon />,\n defaultValue: '',\n countryCode: 'US',\n floating: false,\n error: false,\n disabled: false,\n required: false,\n fullWidth: true } satisfies Partial<PhoneInputProps>;\n\n// Drops explicitly-undefined props before the merge, so `prop={undefined}` falls\n// back to the default exactly as a destructuring default would. Eleven separate\n// destructuring defaults were most of this component's branch count.\nconst definedProps = (props: PhoneInputProps): Partial<PhoneInputProps> =>\n Object.fromEntries(\n Object.entries(props).filter(([, value]) => value !== undefined),\n ) as Partial<PhoneInputProps>;\n\nconst CountryAdornment: React.FC<{\n country?: CountryData;\n menuOpen: boolean;\n onOpen: (event: React.MouseEvent<HTMLElement>) => void;\n onOpenViaKeyboard: (element: HTMLElement) => void;\n selectCountryLabel: string;\n}> = ({ country, menuOpen, onOpen, onOpenViaKeyboard, selectCountryLabel }) => (\n <InputAdornment position=\"start\" data-testid=\"phone-input-start-adornment\">\n <CountrySelector\n onClick={onOpen}\n role=\"button\"\n aria-label={selectCountryLabel}\n aria-expanded={menuOpen}\n tabIndex={0}\n data-testid=\"country-selector\"\n onKeyDown={(e) => {\n if (e.key !== 'Enter' && e.key !== ' ') return;\n e.preventDefault();\n onOpenViaKeyboard(e.currentTarget as HTMLElement);\n }}\n >\n <Typography variant=\"h6\" component=\"span\" sx={{ mr: 0.5 }} data-testid=\"country-flag\">\n {country?.flag}\n </Typography>\n <Typography\n variant=\"body2\"\n color=\"text.secondary\"\n sx={{ mr: 0.5 }}\n data-testid=\"country-dial-code\"\n >\n {country?.dial}\n </Typography>\n <ArrowDropDown fontSize=\"small\" data-testid=\"country-dropdown-icon\" />\n </CountrySelector>\n </InputAdornment>\n);\n\n// The trailing icon turns green once the number validates.\nconst ValidityAdornment: React.FC<{ icon?: React.ReactNode; isValid: boolean }> = ({\n icon,\n isValid }) => {\n const theme = useTheme();\n\n if (!icon) return null;\n\n return (\n <InputAdornment position=\"end\" data-testid=\"phone-input-end-adornment\">\n <Box\n sx={{\n color: isValid ? theme.palette.success.main : theme.palette.text.secondary,\n transition: 'color 0.3s ease' }}\n data-testid=\"phone-input-icon\"\n >\n {icon}\n </Box>\n </InputAdornment>\n );\n};\n\nconst CountryPicker: React.FC<{\n anchorEl: HTMLElement | null;\n selectedCode?: CountryData['code'];\n onClose: () => void;\n onSelect: (country: CountryData) => void;\n}> = ({ anchorEl, selectedCode, onClose, onSelect }) => {\n const theme = useTheme();\n\n return (\n <CountryMenu\n anchorEl={anchorEl}\n open={Boolean(anchorEl)}\n onClose={onClose}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'left' }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'left' }}\n data-testid=\"country-menu\"\n >\n {countries.map((country) => (\n <MenuItem\n key={country.code}\n onClick={() => onSelect(country)}\n selected={country.code === selectedCode}\n data-testid={`country-option-${country.code}`}\n sx={{\n '&:hover': {\n background: `linear-gradient(135deg, ${alpha(theme.palette.primary.main, 0.1)} 0%, ${alpha(theme.palette.primary.main, 0.05)} 100%)` } }}\n >\n <ListItemIcon sx={{ minWidth: 36 }}>\n <Typography variant=\"h5\" component=\"span\">\n {country.flag}\n </Typography>\n </ListItemIcon>\n <ListItemText\n primary={country.name}\n secondary={country.dial}\n primaryTypographyProps={{ fontSize: rem(theme, 14.4) }}\n secondaryTypographyProps={{ fontSize: rem(theme, 12.8) }}\n />\n </MenuItem>\n ))}\n </CountryMenu>\n );\n};\n\n// The field shows an error either because the caller says so, or because what\n// has been typed does not validate and the user has moved on.\nconst resolveValidation = ({\n error,\n errorMessage,\n isValid,\n value,\n isFocused,\n helper,\n countryName,\n copy }: {\n error: boolean;\n errorMessage?: string;\n isValid: boolean;\n value: string;\n isFocused: boolean;\n helper?: React.ReactNode;\n countryName?: string;\n copy: PhoneInputCopy;\n}) => {\n const looksInvalid = !isValid && value !== '' && !isFocused;\n\n return {\n hasError: error || looksInvalid,\n helperText:\n errorMessage ||\n (looksInvalid ? copy.invalidNumber(countryName || copy.unknownCountry) : helper) };\n};\n\nexport const PhoneInput: FC<PhoneInputProps> = (props) => {\n const { copy } = props;\n const {\n variant,\n label,\n placeholder,\n icon,\n defaultValue,\n countryCode: initialCountryCode,\n floating,\n onChange,\n helper,\n error,\n errorMessage,\n disabled,\n required,\n fullWidth } = { ...PHONE_INPUT_DEFAULTS, ...definedProps(props) };\n const {\n value,\n selectedCountry,\n anchorEl,\n isValid,\n isFocused,\n setIsFocused,\n setAnchorEl,\n handleCountryClick,\n handleCountryClose,\n handleCountrySelect,\n handleChange,\n handleBlur } = usePhoneInput({ defaultValue, initialCountryCode, onChange });\n\n const validation = resolveValidation({\n error,\n errorMessage,\n isValid,\n value,\n isFocused,\n helper,\n countryName: selectedCountry?.name,\n copy });\n\n const TextFieldComponent = variant === 'glass' ? GlassTextField : FieldTextField;\n\n return (\n <Box data-testid=\"phone-input-container\">\n <PhoneField\n copy={copy}\n TextFieldComponent={TextFieldComponent}\n variant={variant}\n label={floating ? undefined : label}\n placeholder={placeholder}\n value={value}\n validation={validation}\n disabled={disabled}\n required={required}\n fullWidth={fullWidth}\n icon={icon}\n isValid={isValid}\n selectedCountry={selectedCountry}\n anchorEl={anchorEl}\n onChange={handleChange}\n onFocus={() => setIsFocused(true)}\n onBlur={handleBlur}\n onCountryOpen={handleCountryClick}\n onCountryOpenViaKeyboard={setAnchorEl}\n />\n\n <CountryPicker\n anchorEl={anchorEl}\n selectedCode={selectedCountry?.code}\n onClose={handleCountryClose}\n onSelect={handleCountrySelect}\n />\n </Box>\n );\n};\n\n// Export default\nexport default PhoneInput;\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/form/HeaderActions/HeaderActions.tsx"],"sourcesContent":["'use client';\n\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\nimport MoreHorizIcon from '@mui/icons-material/MoreHoriz';\nimport Box from '@mui/material/Box/index.js';\nimport ListItemIcon from '@mui/material/ListItemIcon/index.js';\nimport ListItemText from '@mui/material/ListItemText/index.js';\nimport Menu from '@mui/material/Menu/index.js';\nimport MenuItem from '@mui/material/MenuItem/index.js';\nimport React, { useState } from 'react';\n\nimport { HeaderButton } from '../HeaderButton';\nimport type { HeaderActionItem, HeaderActionsProps } from './HeaderActions.types';\n\n/** Drop the gated-away entries, so everything below can count what is left. */\nfunction present(\n actions: HeaderActionsProps['actions'],\n): HeaderActionItem[] {\n return actions.filter(\n (action): action is HeaderActionItem => Boolean(action) && (action as HeaderActionItem).visible !== false,\n );\n}\n\n/**\n * The page header's actions, as ONE control that scales with how many there\n * are: nothing, a button, or a button plus an overflow menu.\n *\n * | actions | renders |\n * |---|---|\n * | 0 | nothing at all — not an empty box, and not a menu with no items |\n * | 1 | that action, as an ordinary `HeaderButton` |\n * | n | the FIRST as a button; the other n−1 inside one dropdown |\n *\n * ## Why the first one stays a button\n *\n * A header whose every action lives behind a menu costs two clicks for the\n * thing the page is FOR — \"Novo produto\" on a catalog, \"Nova categoria\" on the\n * categories list. Folding it in with the exports and the reorder screens\n * would treat a merchant's daily action as equal to the one they use monthly.\n * So the array is in PRIORITY order and index 0 keeps its button; everything\n * after it is secondary by the caller's own declaration.\n *\n * ## Why this takes a list and not children\n *\n * The 0/1/n decision is only decidable over data. A component handed JSX can\n * count `React.Children`, but it cannot tell a gated-away action from an\n * absent one, cannot read a label to put in a menu row, and cannot re-render\n * a `<Button>` as a `<MenuItem>` without reaching into its props. Every\n * caller in the estate had therefore hand-written the row, which is how four\n * equally-weighted buttons ended up wrapping the line on a catalog page.\n *\n * ## One element, so the spacing is the component's and not the mount's\n *\n * It renders an `inline-flex` box rather than a fragment. A fragment inherits\n * whatever gap its parent happens to set, and the two mounts here set\n * different ones — a `Dashboard.Header` spaces its children, a\n * `Dashboard.Action` slot does not, which is why the pair of buttons in that\n * slot sat flush against each other. The gap belongs to the control.\n *\n * ## The ids survive the move\n *\n * An action that overflows keeps its `dataTestId` on its `MenuItem`. It is a\n * different element in a different place, and it must still answer to the same\n * selector: otherwise adding a fifth action to a header silently breaks the\n * suite of the action that got pushed out, which is the last place anyone\n * would look.\n */\nexport function HeaderActions({\n actions,\n moreLabel,\n collapseBelow = 'md',\n testIdPrefix = 'header-actions',\n}: HeaderActionsProps): React.JSX.Element | null {\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null);\n const items = present(actions);\n const open = Boolean(anchorEl);\n\n // Before the early return would be a conditional hook; after it is the only\n // legal place. Nothing below runs for an empty list anyway.\n const [primary, ...overflow] = items;\n if (!primary) return null;\n\n return (\n <Box sx={{ display: 'inline-flex', alignItems: 'center', gap: 1 }}>\n <HeaderButton\n text={primary.text}\n icon={primary.icon}\n onClick={primary.onClick}\n disabled={primary.disabled}\n variant={primary.variant}\n color={primary.color}\n collapseBelow={collapseBelow}\n dataTestId={primary.dataTestId ?? primary.id}\n />\n {overflow.length > 0 && (\n <>\n <HeaderButton\n text={moreLabel}\n icon={<MoreHorizIcon fontSize=\"small\" />}\n endIcon={<ExpandMoreIcon fontSize=\"small\" />}\n onClick={(event) => setAnchorEl(event.currentTarget)}\n collapseBelow={collapseBelow}\n aria-haspopup=\"menu\"\n aria-expanded={open}\n dataTestId={`${testIdPrefix}-more-trigger`}\n />\n <Menu\n anchorEl={anchorEl}\n open={open}\n onClose={() => setAnchorEl(null)}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}\n transformOrigin={{ vertical: 'top', horizontal: 'right' }}\n data-testid={`${testIdPrefix}-more-menu`}\n >\n {overflow.map((action) => (\n <MenuItem\n key={action.id}\n disabled={action.disabled}\n onClick={() => {\n setAnchorEl(null);\n action.onClick?.();\n }}\n data-testid={action.dataTestId ?? action.id}\n >\n <ListItemIcon sx={{ minWidth: 32 }}>{action.icon}</ListItemIcon>\n <ListItemText>{action.text}</ListItemText>\n </MenuItem>\n ))}\n </Menu>\n </>\n )}\n </Box>\n );\n}\n"],"mappings":";;;;;AAEA,OAAO,oBAAoB;AAC3B,OAAO,mBAAmB;AAC1B,OAAO,SAAS;AAChB,OAAO,kBAAkB;AACzB,OAAO,kBAAkB;AACzB,OAAO,UAAU;AACjB,OAAO,cAAc;AACrB,SAAgB,gBAAgB;AA2E1B,SAWE,UAXF,KA+BQ,YA/BR;AArEN,SAAS,QACP,SACoB;AACpB,SAAO,QAAQ;AAAA,IACb,CAAC,WAAuC,QAAQ,MAAM,KAAM,OAA4B,YAAY;AAAA,EACtG;AACF;AA8CO,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA;AAAA,EACA,gBAAgB;AAAA,EAChB,eAAe;AACjB,GAAiD;AAC/C,QAAM,CAAC,UAAU,WAAW,IAAI,SAA6B,IAAI;AACjE,QAAM,QAAQ,QAAQ,OAAO;AAC7B,QAAM,OAAO,QAAQ,QAAQ;AAI7B,QAAM,CAAC,SAAS,GAAG,QAAQ,IAAI;AAC/B,MAAI,CAAC,QAAS,QAAO;AAErB,SACE,qBAAC,OAAI,IAAI,EAAE,SAAS,eAAe,YAAY,UAAU,KAAK,EAAE,GAC9D;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,MAAM,QAAQ;AAAA,QACd,MAAM,QAAQ;AAAA,QACd,SAAS,QAAQ;AAAA,QACjB,UAAU,QAAQ;AAAA,QAClB,SAAS,QAAQ;AAAA,QACjB,OAAO,QAAQ;AAAA,QACf;AAAA,QACA,YAAY,QAAQ,cAAc,QAAQ;AAAA;AAAA,IAC5C;AAAA,IACC,SAAS,SAAS,KACjB,iCACE;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,MAAM;AAAA,UACN,MAAM,oBAAC,iBAAc,UAAS,SAAQ;AAAA,UACtC,SAAS,oBAAC,kBAAe,UAAS,SAAQ;AAAA,UAC1C,SAAS,CAAC,UAAU,YAAY,MAAM,aAAa;AAAA,UACnD;AAAA,UACA,iBAAc;AAAA,UACd,iBAAe;AAAA,UACf,YAAY,GAAG,YAAY;AAAA;AAAA,MAC7B;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA;AAAA,UACA,SAAS,MAAM,YAAY,IAAI;AAAA,UAC/B,cAAc,EAAE,UAAU,UAAU,YAAY,QAAQ;AAAA,UACxD,iBAAiB,EAAE,UAAU,OAAO,YAAY,QAAQ;AAAA,UACxD,eAAa,GAAG,YAAY;AAAA,UAE3B,mBAAS,IAAI,CAAC,WACb;AAAA,YAAC;AAAA;AAAA,cAEC,UAAU,OAAO;AAAA,cACjB,SAAS,MAAM;AACb,4BAAY,IAAI;AAChB,uBAAO,UAAU;AAAA,cACnB;AAAA,cACA,eAAa,OAAO,cAAc,OAAO;AAAA,cAEzC;AAAA,oCAAC,gBAAa,IAAI,EAAE,UAAU,GAAG,GAAI,iBAAO,MAAK;AAAA,gBACjD,oBAAC,gBAAc,iBAAO,MAAK;AAAA;AAAA;AAAA,YATtB,OAAO;AAAA,UAUd,CACD;AAAA;AAAA,MACH;AAAA,OACF;AAAA,KAEJ;AAEJ;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/form/RadioGroup/RadioGroup.styles.ts"],"sourcesContent":["import { alpha } from '@mui/material/styles/index.js';\nimport type { CSSObject, Theme } from '@mui/material/styles/index.js';\n\nimport { glowAnimation, rippleAnimation, scaleAnimation, slideAnimation } from './RadioGroup.animations';\n\nimport { fieldEdge } from '../../../tokens/field-edge';\nimport { fieldRadius } from '../../../tokens/field-radius';\nimport { asFieldSize, FIELD_BORDER_WIDTH, fieldHeight } from '../../../tokens/field-height';\nimport { absoluteInk, controlNeutral } from '../../../tokens/ink';\nimport { rem } from '../../../tokens/relative';\n\n/** The segment track's padding and border: its corner is the segments' plus these. */\nconst SEGMENT_TRACK_PADDING = 4;\nconst SEGMENT_TRACK_BORDER = 1;\n\ninterface ColorPalette {\n main: string;\n dark?: string;\n light?: string;\n contrastText?: string;\n}\n\n/** `neutral` is not a MUI palette entry, so it is the controls' neutral tone. */\nconst neutralPalette = (theme: Theme): ColorPalette => controlNeutral(theme);\n\n/** `danger` is this component's name for the error palette; the rest map straight through. */\nconst namedPalette = (theme: Theme, color: string): ColorPalette => {\n const colorMap: Record<string, ColorPalette> = {\n primary: theme.palette.primary,\n secondary: theme.palette.secondary,\n success: theme.palette.success,\n warning: theme.palette.warning,\n info: theme.palette.info,\n danger: theme.palette.error,\n };\n\n return colorMap[color] || theme.palette.primary;\n};\n\n/**\n * Resolves a colour name to a full palette, filling any step the theme leaves\n * out from `main` and then from the primary palette. Split into three so the\n * fallback chains do not all count against one function.\n */\nconst getColorFromTheme = (theme: Theme, color: string): ColorPalette => {\n if (color === 'neutral') {\n return neutralPalette(theme);\n }\n\n const palette = namedPalette(theme, color);\n const { primary } = theme.palette;\n\n // namedPalette always yields a palette, so these need no optional chaining;\n // each step still falls back to `main` and then to primary when the theme\n // leaves it out.\n return {\n main: palette.main || primary.main,\n dark: palette.dark || palette.main || primary.dark,\n light: palette.light || palette.main || primary.light,\n contrastText: palette.contrastText || absoluteInk(theme).white,\n };\n};\n\ntype SizeKey = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\nconst pickSize = <T,>(map: Record<SizeKey, T>, size: string): T => map[size as SizeKey] ?? map.md;\n\nconst CARD_SIZES: Record<SizeKey, CSSObject> = {\n xs: { padding: '8px', minHeight: '60px' },\n sm: { padding: '12px', minHeight: '70px' },\n md: { padding: '16px', minHeight: '80px' },\n lg: { padding: '20px', minHeight: '90px' },\n xl: { padding: '24px', minHeight: '100px' },\n};\n\nconst BUTTON_SIZES: Record<SizeKey, (theme: Theme) => CSSObject> = {\n xs: (theme) => ({ padding: '6px 12px', fontSize: rem(theme, 12), minHeight: '32px' }),\n sm: (theme) => ({ padding: '8px 16px', fontSize: rem(theme, 14), minHeight: '36px' }),\n md: (theme) => ({ padding: '10px 20px', fontSize: rem(theme, 16), minHeight: '40px' }),\n lg: (theme) => ({ padding: '12px 24px', fontSize: rem(theme, 18), minHeight: '44px' }),\n xl: (theme) => ({ padding: '14px 28px', fontSize: rem(theme, 20), minHeight: '48px' }),\n};\n\nconst SEGMENT_SIZES: Record<SizeKey, (theme: Theme) => CSSObject> = {\n xs: (theme) => ({ padding: '4px 8px', fontSize: rem(theme, 12) }),\n sm: (theme) => ({ padding: '6px 12px', fontSize: rem(theme, 14) }),\n md: (theme) => ({ padding: '8px 16px', fontSize: rem(theme, 16) }),\n lg: (theme) => ({ padding: '10px 20px', fontSize: rem(theme, 18) }),\n xl: (theme) => ({ padding: '12px 24px', fontSize: rem(theme, 20) }),\n};\n\nexport interface SurfaceFlags {\n selected?: boolean;\n customColor?: string;\n glass?: boolean;\n gradient?: boolean;\n glow?: boolean;\n customSize?: string;\n animated?: boolean;\n}\n\nexport const formLabelSx = (theme: Theme, glass?: boolean, error?: boolean): CSSObject => ({\n marginBottom: theme.spacing(2),\n fontWeight: 600,\n color: error ? theme.palette.error.main : theme.palette.text.primary,\n ...(glass && {\n backgroundColor: alpha(theme.palette.background.paper, 0.1),\n backdropFilter: 'blur(10px)',\n padding: '8px 12px',\n borderRadius: '8px',\n border: `1px solid ${alpha(theme.palette.divider, 0.2)}`,\n display: 'inline-block',\n }),\n});\n\n/** The card's resting surface, before glass/gradient/glow override parts of it. */\nconst cardBase = (theme: Theme, flags: SurfaceFlags, palette: ColorPalette): CSSObject => {\n const { selected, animated, customSize = 'md' } = flags;\n\n return {\n cursor: 'pointer',\n transition: 'all 0.3s cubic-bezier(0.4, 0, 0.2, 1)',\n border: `2px solid ${selected ? palette.main : fieldEdge(theme)}`,\n backgroundColor: selected ? alpha(palette.main, 0.05) : theme.palette.background.paper,\n position: 'relative' as const,\n overflow: 'hidden' as const,\n ...(animated && { animation: `${slideAnimation} 0.4s ease-out` }),\n // A radial wash that grows from the centre as the card is selected or hovered.\n '&::before': {\n content: '\"\"',\n position: 'absolute',\n top: '50%',\n left: '50%',\n width: selected ? '100%' : '0',\n height: selected ? '100%' : '0',\n background: `radial-gradient(circle, ${alpha(palette.main, 0.1)} 0%, transparent 70%)`,\n transform: 'translate(-50%, -50%)',\n transition: 'all 0.5s ease',\n borderRadius: '50%',\n },\n '&:hover': {\n borderColor: palette.main,\n backgroundColor: alpha(palette.main, 0.02),\n transform: 'translateY(-2px) scale(1.02)',\n boxShadow: `${theme.shadows[4]}, 0 10px 30px -5px ${alpha(palette.main, 0.2)}`,\n '&::before': { width: '120%', height: '120%' },\n },\n '&:active': { transform: 'scale(0.98)' },\n ...pickSize(CARD_SIZES, customSize),\n };\n};\n\nexport const radioCardSx = (theme: Theme, flags: SurfaceFlags): CSSObject => {\n const { selected, customColor = 'primary', glass, gradient, glow } = flags;\n const palette = getColorFromTheme(theme, customColor);\n\n return {\n ...cardBase(theme, flags, palette),\n ...(glass && {\n backgroundColor: selected\n ? alpha(palette.main, 0.1)\n : alpha(theme.palette.background.paper, 0.1),\n backdropFilter: 'blur(20px)',\n border: `1px solid ${alpha(theme.palette.divider, 0.2)}`,\n }),\n ...(gradient &&\n selected && {\n background: `linear-gradient(135deg, ${alpha(palette.main, 0.1)}, ${alpha(palette.light || palette.main, 0.05)})`,\n borderColor: palette.main,\n }),\n ...(glow &&\n selected && {\n animation: `${glowAnimation} 2s ease-in-out infinite`,\n boxShadow: `0 0 15px ${alpha(palette.main, 0.4)}`,\n }),\n };\n};\n\n/** The pill button's resting surface, before glass/gradient override parts of it. */\nconst buttonBase = (theme: Theme, flags: SurfaceFlags, palette: ColorPalette): CSSObject => {\n const { selected, animated, customSize = 'md' } = flags;\n\n return {\n borderRadius: fieldRadius(theme),\n transition: 'all 0.3s cubic-bezier(0.4, 0, 0.2, 1)',\n fontWeight: 500,\n border: `${FIELD_BORDER_WIDTH}px solid ${selected ? palette.main : fieldEdge(theme)}`,\n backgroundColor: selected ? palette.main : 'transparent',\n color: selected ? palette.contrastText || absoluteInk(theme).white : theme.palette.text.primary,\n position: 'relative' as const,\n overflow: 'hidden' as const,\n ...(animated && selected && { animation: `${scaleAnimation} 0.3s ease-out` }),\n // Sized to zero until pressed, when the ripple keyframes expand it.\n '&::after': {\n content: '\"\"',\n position: 'absolute',\n top: '50%',\n left: '50%',\n width: 0,\n height: 0,\n borderRadius: '50%',\n backgroundColor: alpha(palette.contrastText || absoluteInk(theme).white, 0.3),\n transform: 'translate(-50%, -50%)',\n pointerEvents: 'none' as const,\n },\n '&:active::after': {\n animation: `${rippleAnimation} 0.6s ease-out`,\n width: '100%',\n height: '100%',\n },\n '&:hover': {\n borderColor: palette.main,\n backgroundColor: selected ? palette.dark : alpha(palette.main, 0.1),\n transform: 'translateY(-1px) scale(1.02)',\n boxShadow: `0 4px 12px ${alpha(palette.main, 0.2)}`,\n },\n '&:active': { transform: 'scale(0.98)' },\n ...pickSize(BUTTON_SIZES, customSize)(theme),\n // The theme's field height for the size, in place of the table's own.\n minHeight: fieldHeight(theme, asFieldSize(customSize)),\n paddingTop: 0,\n paddingBottom: 0,\n };\n};\n\nexport const buttonRadioSx = (theme: Theme, flags: SurfaceFlags): CSSObject => {\n const { selected, customColor = 'primary', glass, gradient } = flags;\n const palette = getColorFromTheme(theme, customColor);\n\n return {\n ...buttonBase(theme, flags, palette),\n ...(glass && {\n backgroundColor: selected\n ? alpha(palette.main, 0.8)\n : alpha(theme.palette.background.paper, 0.1),\n backdropFilter: 'blur(20px)',\n border: `1px solid ${alpha(theme.palette.divider, 0.2)}`,\n }),\n ...(gradient &&\n selected && {\n background: `linear-gradient(135deg, ${palette.main}, ${palette.dark})`,\n border: 'none',\n }),\n };\n};\n\nexport const segmentContainerSx = (\n theme: Theme,\n glass?: boolean,\n customColor = 'primary',\n): CSSObject => {\n const palette = getColorFromTheme(theme, customColor);\n\n return {\n padding: `${SEGMENT_TRACK_PADDING}px`,\n // Concentric with the segments inside it, which take the field radius.\n borderRadius: fieldRadius(theme) + SEGMENT_TRACK_PADDING + SEGMENT_TRACK_BORDER,\n backgroundColor: glass\n ? alpha(theme.palette.background.paper, 0.1)\n : alpha(palette.main, 0.05),\n backdropFilter: glass ? 'blur(20px)' : 'none',\n border: `${SEGMENT_TRACK_BORDER}px solid ${alpha(theme.palette.divider, 0.2)}`,\n display: 'flex',\n gap: '2px',\n };\n};\n\n/**\n * An underline that grows from the centre outwards, and is already full width\n * when the segment is the selected one.\n */\nconst segmentUnderline = (color: string, selected: boolean): CSSObject => ({\n content: '\"\"',\n position: 'absolute',\n bottom: 0,\n left: selected ? 0 : '50%',\n width: selected ? '100%' : 0,\n height: '2px',\n backgroundColor: color,\n transition: 'all 0.3s ease',\n transform: selected ? 'translateX(0)' : 'translateX(-50%)',\n});\n\nexport const segmentButtonSx = (theme: Theme, flags: SurfaceFlags): CSSObject => {\n const { selected, customColor = 'primary', customSize = 'md', animated } = flags;\n const palette = getColorFromTheme(theme, customColor);\n\n return {\n flex: 1,\n borderRadius: fieldRadius(theme),\n transition: 'all 0.3s cubic-bezier(0.4, 0, 0.2, 1)',\n fontWeight: 500,\n backgroundColor: selected ? theme.palette.background.paper : 'transparent',\n color: selected ? palette.main : theme.palette.text.secondary,\n boxShadow: selected\n ? `${theme.shadows[2]}, inset 0 1px 3px ${alpha(palette.main, 0.1)}`\n : 'none',\n position: 'relative' as const,\n overflow: 'hidden' as const,\n ...(animated && selected && { animation: `${scaleAnimation} 0.3s ease-out` }),\n '&::before': segmentUnderline(palette.main, Boolean(selected)),\n '&:hover': {\n backgroundColor: selected\n ? theme.palette.background.paper\n : alpha(theme.palette.action.hover, 0.08),\n color: palette.main,\n '&::before': { width: '100%', left: 0, transform: 'translateX(0)' },\n },\n '&:active': { transform: 'scale(0.98)' },\n ...pickSize(SEGMENT_SIZES, customSize)(theme),\n // Each segment is a field; the track around it adds its own inset.\n minHeight: fieldHeight(theme, asFieldSize(customSize)),\n paddingTop: 0,\n paddingBottom: 0,\n };\n};\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/form/RadioGroup/RadioGroup.animations.ts"],"sourcesContent":["import { keyframes } from '@mui/material/styles/index.js';\n\nexport const glowAnimation = keyframes`\n 0% {\n box-shadow: 0 0 5px currentColor;\n }\n 50% {\n box-shadow: 0 0 15px currentColor, 0 0 25px currentColor;\n }\n 100% {\n box-shadow: 0 0 5px currentColor;\n }\n`;\n\nexport const slideAnimation = keyframes`\n from {\n opacity: 0;\n transform: translateX(-20px);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n`;\n\nexport const scaleAnimation = keyframes`\n 0% {\n transform: scale(0.95);\n }\n 50% {\n transform: scale(1.05);\n }\n 100% {\n transform: scale(1);\n }\n`;\n\nexport const rippleAnimation = keyframes`\n 0% {\n transform: scale(0);\n opacity: 1;\n }\n 100% {\n transform: scale(4);\n opacity: 0;\n }\n`;\n\n"],"mappings":";AAAA,SAAS,iBAAiB;AAEnB,IAAM,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYtB,IAAM,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWvB,IAAM,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYvB,IAAM,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/form/Command/Command.hooks.ts"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport type { CommandItem, CommandProps } from './Command.types';\n\ntype CommandDefaultedKeys =\n | 'open'\n | 'items'\n | 'placeholder'\n | 'value'\n | 'variant'\n | 'size'\n | 'color'\n | 'glow'\n | 'pulse'\n | 'loading'\n | 'disabled'\n | 'maxHeight'\n | 'emptyMessage'\n | 'showCategories'\n | 'showShortcuts'\n | 'showDescriptions'\n | 'autoFocus'\n | 'closeOnSelect';\n\ntype ResolvedCommandProps = CommandProps &\n Required<Pick<CommandProps, CommandDefaultedKeys>>;\n\nconst COMMAND_DEFAULTS: Pick<CommandProps, CommandDefaultedKeys> = {\n open: false,\n items: [],\n placeholder: 'Type a command or search...',\n value: '',\n variant: 'default',\n size: 'md',\n color: 'primary',\n glow: false,\n pulse: false,\n loading: false,\n disabled: false,\n maxHeight: 400,\n emptyMessage: 'No results found',\n showCategories: true,\n showShortcuts: true,\n showDescriptions: true,\n autoFocus: true,\n closeOnSelect: true,\n};\n\n// Strips explicitly-undefined props before the merge, so `size={undefined}` still\n// falls back to the default exactly as a destructuring default would.\nconst definedProps = (props: CommandProps): Partial<CommandProps> =>\n Object.fromEntries(\n Object.entries(props).filter(([, value]) => value !== undefined),\n ) as Partial<CommandProps>;\n\nexport const resolveCommandProps = (props: CommandProps): ResolvedCommandProps =>\n ({ ...COMMAND_DEFAULTS, ...definedProps(props) }) as ResolvedCommandProps;\n\n/** An item matches on its label, its description, or any of its keywords. */\nconst matches = (item: CommandItem, search: string): boolean => {\n const searchTargets = [\n item.label.toLowerCase(),\n item.description?.toLowerCase(),\n ...(item.keywords || []).map((k) => k.toLowerCase()),\n ];\n return searchTargets.some((target) => target?.includes(search));\n};\n\nconst useFilteredItems = (\n items: CommandItem[],\n search: string,\n customFilter: CommandProps['customFilter'],\n) =>\n useMemo(() => {\n if (!search) return items;\n\n if (customFilter) {\n return items.filter((item) => customFilter(item, search));\n }\n\n const searchLower = search.toLowerCase();\n return items.filter((item) => matches(item, searchLower));\n }, [items, search, customFilter]);\n\n/**\n * Kept as it was: the ref is never attached to an element, so this focus call has\n * always been a no-op. The input does get focus — CommandInput passes `autoFocus`\n * straight to its TextField — so removing it is a behaviour question, not a\n * cleanup, and is left alone here.\n */\nconst useAutoFocus = (open: boolean, autoFocus: boolean) => {\n const inputRef = useRef<HTMLInputElement>(null);\n\n useEffect(() => {\n if (open && autoFocus) {\n window.setTimeout(() => inputRef.current?.focus(), 100);\n }\n }, [open, autoFocus]);\n};\n\ninterface NavigationArgs {\n items: CommandItem[];\n selectedIndex: number;\n setSelectedIndex: React.Dispatch<React.SetStateAction<number>>;\n onSelect: (item: CommandItem) => void;\n onClose: () => void;\n}\n\n/** Arrows wrap around the list; Enter takes the highlighted item, Escape closes. */\nconst useKeyboardNavigation = ({\n items,\n selectedIndex,\n setSelectedIndex,\n onSelect,\n onClose,\n}: NavigationArgs) =>\n useCallback(\n (e: React.KeyboardEvent) => {\n const step = (delta: number) => {\n e.preventDefault();\n setSelectedIndex((prev) => (prev + delta + items.length) % items.length);\n };\n\n switch (e.key) {\n case 'ArrowDown':\n return step(1);\n case 'ArrowUp':\n return step(-1);\n case 'Enter':\n e.preventDefault();\n if (items[selectedIndex]) {\n onSelect(items[selectedIndex]);\n }\n return;\n case 'Escape':\n e.preventDefault();\n onClose();\n return;\n default:\n return;\n }\n },\n [items, selectedIndex, setSelectedIndex, onSelect, onClose],\n );\n\nexport const useCommandPalette = (props: ResolvedCommandProps) => {\n const { open, items, value, autoFocus, customFilter } = props;\n const { onValueChange, onSelect, onOpenChange, closeOnSelect } = props;\n\n const [internalValue, setInternalValue] = useState(value);\n const [selectedIndex, setSelectedIndex] = useState(0);\n useAutoFocus(open, autoFocus);\n\n useEffect(() => {\n setInternalValue(value);\n }, [value]);\n\n const handleValueChange = useCallback(\n (newValue: string) => {\n setInternalValue(newValue);\n onValueChange?.(newValue);\n setSelectedIndex(0);\n },\n [onValueChange],\n );\n\n const filteredItems = useFilteredItems(items, internalValue, customFilter);\n\n // Arrow keys and Enter address the enabled items only, so a disabled row never\n // becomes the highlighted one.\n const selectableItems = useMemo(\n () => filteredItems.filter((item) => !item.disabled),\n [filteredItems],\n );\n\n const handleSelect = useCallback(\n (item: CommandItem) => {\n if (item.disabled) return;\n\n item.action?.();\n onSelect?.(item);\n\n if (closeOnSelect) {\n onOpenChange?.(false);\n setInternalValue('');\n }\n },\n [onSelect, onOpenChange, closeOnSelect],\n );\n\n const handleKeyDown = useKeyboardNavigation({\n items: selectableItems,\n selectedIndex,\n setSelectedIndex,\n onSelect: handleSelect,\n onClose: () => onOpenChange?.(false),\n });\n\n return {\n internalValue,\n filteredItems,\n highlightedId: selectableItems[selectedIndex]?.id,\n handleValueChange,\n handleSelect,\n handleKeyDown,\n };\n};\n"],"mappings":"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","names":[]}
@@ -1,70 +0,0 @@
1
- import {
2
- AddressTextField
3
- } from "./chunk-VECWMANF.js";
4
-
5
- // src/components/form/AddressAutocomplete/AddressInputField.tsx
6
- import CurrentLocationIcon from "@mui/icons-material/MyLocation";
7
- import CircularProgress from "@mui/material/CircularProgress/index.js";
8
- import IconButton from "@mui/material/IconButton/index.js";
9
- import InputAdornment from "@mui/material/InputAdornment/index.js";
10
- import { Fragment, jsx, jsxs } from "react/jsx-runtime";
11
- var CurrentLocationButton = ({ disabled, onClick, currentLocationLabel }) => /* @__PURE__ */ jsx(InputAdornment, { position: "end", children: /* @__PURE__ */ jsx(
12
- IconButton,
13
- {
14
- edge: "end",
15
- onClick,
16
- size: "small",
17
- title: currentLocationLabel,
18
- disabled,
19
- "data-testid": "address-current-location-button",
20
- children: /* @__PURE__ */ jsx(CurrentLocationIcon, {})
21
- }
22
- ) });
23
- var AddressInputField = ({
24
- copy,
25
- params,
26
- addressVariant,
27
- label,
28
- placeholder,
29
- icon,
30
- error,
31
- helperText,
32
- required,
33
- disabled,
34
- loading,
35
- showCurrentLocation,
36
- onGetCurrentLocation
37
- }) => /* @__PURE__ */ jsx(
38
- AddressTextField,
39
- {
40
- ...params,
41
- addressVariant,
42
- label,
43
- placeholder,
44
- error,
45
- helperText,
46
- required,
47
- InputProps: {
48
- ...params.InputProps,
49
- startAdornment: icon && /* @__PURE__ */ jsx(InputAdornment, { position: "start", children: icon }),
50
- endAdornment: /* @__PURE__ */ jsxs(Fragment, { children: [
51
- loading && /* @__PURE__ */ jsx(CircularProgress, { color: "inherit", size: 20, "data-testid": "address-loading" }),
52
- showCurrentLocation && /* @__PURE__ */ jsx(
53
- CurrentLocationButton,
54
- {
55
- disabled,
56
- onClick: onGetCurrentLocation,
57
- currentLocationLabel: copy.useCurrentLocation
58
- }
59
- ),
60
- params.InputProps.endAdornment
61
- ] })
62
- },
63
- inputProps: { ...params.inputProps, "data-testid": "address-input" }
64
- }
65
- );
66
-
67
- export {
68
- AddressInputField
69
- };
70
- //# sourceMappingURL=chunk-6M33XQLZ.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/form/AddressAutocomplete/AddressInputField.tsx"],"sourcesContent":["import CurrentLocationIcon from '@mui/icons-material/MyLocation';\nimport type { AutocompleteRenderInputParams } from '@mui/material/Autocomplete/index.js';\nimport CircularProgress from '@mui/material/CircularProgress/index.js';\nimport IconButton from '@mui/material/IconButton/index.js';\nimport InputAdornment from '@mui/material/InputAdornment/index.js';\nimport type { FC, ReactNode } from 'react';\nimport React from 'react';\n\nimport type { AddressAutocompleteProps } from './AddressAutocomplete.types';\nimport { AddressTextField } from './AddressTextField';\n\nconst CurrentLocationButton: FC<{\n disabled: boolean;\n onClick: () => void;\n currentLocationLabel: string;\n}> = ({ disabled, onClick, currentLocationLabel }) => (\n <InputAdornment position=\"end\">\n <IconButton\n edge=\"end\"\n onClick={onClick}\n size=\"small\"\n title={currentLocationLabel}\n disabled={disabled}\n data-testid=\"address-current-location-button\"\n >\n <CurrentLocationIcon />\n </IconButton>\n </InputAdornment>\n);\n\nexport interface AddressInputFieldProps {\n copy: AddressAutocompleteProps['copy'];\n params: AutocompleteRenderInputParams;\n addressVariant: AddressAutocompleteProps['variant'];\n label?: string;\n placeholder?: string;\n icon?: ReactNode;\n error: boolean;\n helperText?: string;\n required: boolean;\n disabled: boolean;\n loading: boolean;\n showCurrentLocation: boolean;\n onGetCurrentLocation: () => void;\n}\n\nexport const AddressInputField: FC<AddressInputFieldProps> = ({\n copy,\n params,\n addressVariant,\n label,\n placeholder,\n icon,\n error,\n helperText,\n required,\n disabled,\n loading,\n showCurrentLocation,\n onGetCurrentLocation,\n}) => (\n <AddressTextField\n {...params}\n addressVariant={addressVariant}\n label={label}\n placeholder={placeholder}\n error={error}\n helperText={helperText}\n required={required}\n InputProps={{\n ...params.InputProps,\n startAdornment: icon && <InputAdornment position=\"start\">{icon}</InputAdornment>,\n endAdornment: (\n <>\n {loading && <CircularProgress color=\"inherit\" size={20} data-testid=\"address-loading\" />}\n {showCurrentLocation && (\n <CurrentLocationButton\n disabled={disabled}\n onClick={onGetCurrentLocation}\n currentLocationLabel={copy.useCurrentLocation}\n />\n )}\n {params.InputProps.endAdornment}\n </>\n ),\n }}\n inputProps={{ ...params.inputProps, 'data-testid': 'address-input' }}\n />\n);\n"],"mappings":";;;;;AAAA,OAAO,yBAAyB;AAEhC,OAAO,sBAAsB;AAC7B,OAAO,gBAAgB;AACvB,OAAO,oBAAoB;AAqBrB,SAgDE,UAhDF,KAgDE,YAhDF;AAdN,IAAM,wBAID,CAAC,EAAE,UAAU,SAAS,qBAAqB,MAC9C,oBAAC,kBAAe,UAAS,OACvB;AAAA,EAAC;AAAA;AAAA,IACC,MAAK;AAAA,IACL;AAAA,IACA,MAAK;AAAA,IACL,OAAO;AAAA,IACP;AAAA,IACA,eAAY;AAAA,IAEZ,8BAAC,uBAAoB;AAAA;AACvB,GACF;AAmBK,IAAM,oBAAgD,CAAC;AAAA,EAC5D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MACE;AAAA,EAAC;AAAA;AAAA,IACE,GAAG;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,YAAY;AAAA,MACV,GAAG,OAAO;AAAA,MACV,gBAAgB,QAAQ,oBAAC,kBAAe,UAAS,SAAS,gBAAK;AAAA,MAC/D,cACE,iCACG;AAAA,mBAAW,oBAAC,oBAAiB,OAAM,WAAU,MAAM,IAAI,eAAY,mBAAkB;AAAA,QACrF,uBACC;AAAA,UAAC;AAAA;AAAA,YACC;AAAA,YACA,SAAS;AAAA,YACT,sBAAsB,KAAK;AAAA;AAAA,QAC7B;AAAA,QAED,OAAO,WAAW;AAAA,SACrB;AAAA,IAEJ;AAAA,IACA,YAAY,EAAE,GAAG,OAAO,YAAY,eAAe,gBAAgB;AAAA;AACrE;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/form/RichTextEditor/RichTextEditor.tsx"],"sourcesContent":["import Box from '@mui/material/Box/index.js';\nimport Paper from '@mui/material/Paper/index.js';\nimport { alpha, useTheme } from '@mui/material/styles/index.js';\nimport React, { forwardRef } from 'react';\n\nimport type { Theme } from '@mui/material/styles/index.js';\nimport { useRichTextEditor } from './RichTextEditor.hooks';\nimport type { RichTextEditorProps, ToolbarConfig } from './RichTextEditor.types';\nimport { RichTextEditorToolbar } from './RichTextEditorToolbar';\n\nimport { fieldEdge } from '../../../tokens/field-edge';\nimport { fieldRadiusPx } from '../../../tokens/field-radius';\nimport { rem } from '../../../tokens/relative';\n\nconst DEFAULT_TOOLBAR: Required<Omit<ToolbarConfig, 'customItems'>> & Pick<ToolbarConfig, 'customItems'> = {\n bold: true,\n italic: true,\n underline: true,\n strikethrough: false,\n orderedList: true,\n unorderedList: true,\n link: true,\n image: false,\n codeBlock: false,\n quote: false,\n customItems: [] };\n\nconst RICH_TEXT_DEFAULTS: Partial<RichTextEditorProps> = {\n value: '',\n placeholder: 'Start typing...',\n disabled: false,\n readOnly: false,\n toolbar: {},\n height: 300 };\n\n// Strips explicitly-undefined props before the merge, so `prop={undefined}`\n// still falls back to the default as a destructuring default would.\nconst definedProps = (props: RichTextEditorProps): Partial<RichTextEditorProps> =>\n Object.fromEntries(\n Object.entries(props).filter(([, v]) => v !== undefined),\n ) as Partial<RichTextEditorProps>;\n\n// Simple inline formats are a tag swap; lists and the value-carrying formats\n// need their own handling. This was one nine-case switch.\nconst editorContentSx = (theme: Theme, disabled: boolean, placeholder?: string, height?: string | number) => ({\n minHeight: typeof height === 'number' ? `${height}px` : height,\n p: 2,\n outline: 'none',\n cursor: disabled ? 'not-allowed' : 'text',\n '&:empty::before': {\n content: `\"${placeholder}\"`,\n color: theme.palette.text.disabled,\n pointerEvents: 'none' },\n '& p': {\n margin: '8px 0',\n '&:first-of-type': { marginTop: 0 },\n '&:last-of-type': { marginBottom: 0 } },\n '& ul, & ol': { marginLeft: theme.spacing(2) },\n '& blockquote': {\n borderLeft: `4px solid ${theme.palette.primary.main}`,\n paddingLeft: theme.spacing(2),\n margin: `${theme.spacing(1)} 0`,\n fontStyle: 'italic',\n backgroundColor: alpha(theme.palette.primary.main, 0.05) },\n '& pre': {\n backgroundColor: alpha(theme.palette.text.primary, 0.08),\n padding: theme.spacing(1),\n borderRadius: 1,\n fontFamily: 'Monaco, Menlo, \"Ubuntu Mono\", monospace',\n fontSize: rem(theme, 14),\n overflow: 'auto' },\n '& a': { color: theme.palette.primary.main, textDecoration: 'underline' } });\n\nconst shellSx = (theme: Theme, isFocused: boolean, disabled: boolean) => ({\n border: `1px solid ${fieldEdge(theme)}`,\n borderRadius: fieldRadiusPx(theme),\n overflow: 'hidden',\n transition: 'border-color 0.2s ease-in-out',\n ...(isFocused && {\n borderColor: theme.palette.primary.main,\n boxShadow: `0 0 0 2px ${alpha(theme.palette.primary.main, 0.2)}` }),\n ...(disabled && {\n backgroundColor: theme.palette.action.disabledBackground,\n color: theme.palette.text.disabled }) });\n\nexport const RichTextEditor = forwardRef<HTMLDivElement, RichTextEditorProps>(\n (editorProps, ref) => {\n const {\n value,\n onChange,\n placeholder,\n disabled,\n readOnly,\n toolbar,\n height,\n maxLength,\n onFocus,\n onBlur,\n className,\n 'data-testid': testId,\n 'aria-label': ariaLabel,\n 'aria-describedby': ariaDescribedBy,\n ...props\n } = { ...RICH_TEXT_DEFAULTS, ...definedProps(editorProps) } as RichTextEditorProps;\n\n const theme = useTheme();\n const toolbarConfig = { ...DEFAULT_TOOLBAR, ...toolbar };\n const editor = useRichTextEditor({\n value,\n onChange,\n onFocus,\n onBlur,\n disabled,\n readOnly,\n maxLength });\n\n return (\n <Paper\n ref={ref}\n className={className}\n data-testid={testId || 'rich-text-editor'}\n elevation={1}\n sx={shellSx(theme, editor.isFocused, Boolean(disabled))}\n {...props}\n >\n <RichTextEditorToolbar\n config={toolbarConfig}\n disabled={Boolean(disabled)}\n readOnly={Boolean(readOnly)}\n maxLength={maxLength}\n characterCount={editor.characterCount}\n editorRef={editor.editorRef}\n onFormat={editor.applyFormat}\n />\n\n <Box\n ref={editor.editorRef}\n contentEditable={!disabled && !readOnly}\n onInput={editor.handleContentChange}\n onFocus={editor.handleFocus}\n onBlur={editor.handleBlur}\n role=\"textbox\"\n aria-label={ariaLabel || 'Rich text editor'}\n aria-describedby={ariaDescribedBy}\n aria-multiline=\"true\"\n tabIndex={disabled ? -1 : 0}\n data-testid=\"editor-content\"\n suppressContentEditableWarning\n sx={editorContentSx(theme, Boolean(disabled), placeholder, height)}\n />\n </Paper>\n );\n },\n);\n\nRichTextEditor.displayName = 'RichTextEditor';\n\nexport default RichTextEditor;"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/form/Label/Label.styles.ts"],"sourcesContent":["import { alpha } from '@mui/material/styles/index.js';\nimport type { CSSObject, Theme } from '@mui/material/styles/index.js';\n\nimport type { LabelProps } from './Label.types';\nimport { accentFor, rem } from '../../../tokens/scales';\n\ntype Size = NonNullable<LabelProps['size']>;\ntype Variant = NonNullable<LabelProps['variant']>;\ntype Weight = NonNullable<LabelProps['weight']>;\n\nconst SIZES: Record<Size, (theme: Theme) => CSSObject> = {\n xs: (theme) => ({ fontSize: rem(theme, 12), lineHeight: 1.2, padding: theme.spacing(0.25, 0.5) }),\n sm: (theme) => ({ fontSize: rem(theme, 14), lineHeight: 1.3, padding: theme.spacing(0.5, 0.75) }),\n md: (theme) => ({ fontSize: rem(theme, 16), lineHeight: 1.5, padding: theme.spacing(0.75, 1) }),\n lg: (theme) => ({ fontSize: rem(theme, 18), lineHeight: 1.6, padding: theme.spacing(1, 1.25) }),\n xl: (theme) => ({ fontSize: rem(theme, 20), lineHeight: 1.7, padding: theme.spacing(1.25, 1.5) }),\n};\n\nexport const sizeStyles = (theme: Theme, size: Size): CSSObject => (SIZES[size] ?? SIZES.md)(theme);\n\nconst WEIGHTS: Record<Weight, number> = {\n light: 300,\n regular: 400,\n medium: 500,\n semibold: 600,\n bold: 700,\n};\n\nconst fontWeight = (weight: Weight) => WEIGHTS[weight] ?? WEIGHTS.regular;\n\nexport interface LabelStyleFlags {\n variant: Variant;\n size: Size;\n color: NonNullable<LabelProps['color']>;\n weight: Weight;\n transform: NonNullable<LabelProps['transform']>;\n align: NonNullable<LabelProps['align']>;\n error: boolean;\n disabled: boolean;\n glow: boolean;\n pulse: boolean;\n ripple: boolean;\n srOnly: boolean;\n nowrap: boolean;\n truncate: boolean;\n clickable: boolean;\n}\n\n/**\n * The text colour, which error and disabled override before the palette is\n * consulted at all. Resolved once and threaded through — the variant styles\n * read it up to four times each.\n */\nexport const textColor = (theme: Theme, flags: LabelStyleFlags): string => {\n if (flags.error) return theme.palette.error.main;\n if (flags.disabled) return theme.palette.text.disabled;\n if (flags.color === 'neutral') return theme.palette.text.primary;\n return accentFor(theme, flags.color).main;\n};\n\n/** The ripple that expands from the centre on press, for clickable labels. */\nconst rippleStyles = (theme: Theme): CSSObject => ({\n overflow: 'hidden',\n '&::after': {\n content: '\"\"',\n position: 'absolute',\n top: '50%',\n left: '50%',\n width: 0,\n height: 0,\n borderRadius: '50%',\n backgroundColor: alpha(theme.palette.primary.main, 0.3),\n transform: 'translate(-50%, -50%)',\n transition: 'width 0.6s, height 0.6s',\n },\n '&:active::after': { width: '300%', height: '300%' },\n});\n\ninterface SurfaceInput {\n theme: Theme;\n flags: LabelStyleFlags;\n /** The resolved text colour, or the primary accent when it resolves to none. */\n accent: string;\n}\n\n/**\n * Each variant's own additions. Every arm previously re-spread the same base,\n * glow, pulse and ripple objects and re-derived the colour for each use; the\n * shared prefix is applied once by `labelStyles`.\n *\n * The hover rules are only attached when the label is clickable, which is what\n * the `onClick ? {…} : {}` in every arm was saying.\n */\nconst SURFACES: Record<Variant, (input: SurfaceInput) => CSSObject> = {\n filled: ({ theme, flags, accent }) => ({\n backgroundColor: alpha(accent, 0.1),\n borderRadius: theme.spacing(0.5),\n '&:hover': flags.clickable ? { backgroundColor: alpha(accent, 0.15) } : {},\n }),\n\n outlined: ({ theme, flags, accent }) => ({\n border: `1px solid ${alpha(accent, 0.5)}`,\n borderRadius: theme.spacing(0.5),\n '&:hover': flags.clickable\n ? { borderColor: accent, backgroundColor: alpha(accent, 0.05) }\n : {},\n }),\n\n glass: ({ theme, flags }) => ({\n backgroundColor: alpha(theme.palette.background.paper, 0.1),\n backdropFilter: 'blur(10px)',\n border: `1px solid ${alpha(theme.palette.divider, 0.2)}`,\n borderRadius: theme.spacing(0.5),\n '&:hover': flags.clickable\n ? {\n backgroundColor: alpha(theme.palette.background.paper, 0.15),\n borderColor: alpha(theme.palette.primary.main, 0.3),\n }\n : {},\n }),\n\n gradient: ({ theme, flags }) => {\n // `neutral` has no accent of its own in the gradient; it borrows primary,\n // which is what this branch already did before the vocabulary was named.\n const accent = accentFor(theme, flags.color === 'neutral' ? 'primary' : flags.color);\n // The gradient paints the glyphs themselves rather than the box behind them.\n const clip = {\n WebkitBackgroundClip: 'text',\n WebkitTextFillColor: 'transparent',\n backgroundClip: 'text',\n };\n\n return {\n background: `linear-gradient(135deg, ${accent.light}, ${accent.main})`,\n ...clip,\n '&:hover': flags.clickable\n ? {\n background: `linear-gradient(135deg, ${accent.main}, ${accent.dark})`,\n ...clip,\n }\n : {},\n };\n },\n\n minimal: ({ theme, flags }) => ({\n padding: 0,\n '&:hover': flags.clickable ? { color: theme.palette.primary.main } : {},\n }),\n\n default: () => ({}),\n};\n\n/** How the text sits: its alignment, weight, casing and overflow behaviour. */\nconst textLayout = (theme: Theme, flags: LabelStyleFlags): CSSObject => {\n const { srOnly, clickable, align, weight, transform, nowrap, truncate } = flags;\n\n return {\n display: srOnly ? 'none' : 'inline-flex',\n alignItems: 'center',\n gap: theme.spacing(0.5),\n transition: theme.transitions.create(['all'], {\n duration: theme.transitions.duration.standard,\n }),\n cursor: clickable ? 'pointer' : 'default',\n textAlign: align,\n fontWeight: fontWeight(weight),\n textTransform: transform,\n whiteSpace: nowrap ? 'nowrap' : 'normal',\n overflow: truncate ? 'hidden' : 'visible',\n textOverflow: truncate ? 'ellipsis' : 'clip',\n position: 'relative' as const,\n };\n};\n\nexport const labelStyles = (theme: Theme, flags: LabelStyleFlags): CSSObject => {\n const { variant, size, clickable } = flags;\n const color = textColor(theme, flags);\n const accent = color || theme.palette.primary.main;\n\n return {\n ...textLayout(theme, flags),\n ...sizeStyles(theme, size),\n color,\n ...(flags.glow && { textShadow: `0 0 10px ${alpha(accent, 0.5)}` }),\n ...(flags.pulse && {\n animation: 'pulse 2s infinite',\n '@keyframes pulse': {\n '0%': { opacity: 1 },\n '50%': { opacity: 0.6 },\n '100%': { opacity: 1 },\n },\n }),\n ...(flags.ripple && clickable && rippleStyles(theme)),\n ...(SURFACES[variant] ?? SURFACES.default)({ theme, flags, accent }),\n };\n};\n\n/** Visually hidden but still read aloud, for the `srOnly` label. */\nexport const SR_ONLY_SX: CSSObject = {\n position: 'absolute',\n width: '1px',\n height: '1px',\n padding: 0,\n margin: '-1px',\n overflow: 'hidden',\n clip: 'rect(0, 0, 0, 0)',\n whiteSpace: 'nowrap',\n border: 0,\n};\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/form/Menubar/Menubar.styles.ts"],"sourcesContent":["import { alpha } from '@mui/material/styles/index.js';\nimport type { CSSObject, Theme } from '@mui/material/styles/index.js';\n\nimport type { MenubarProps } from './Menubar.types';\nimport { accentFor, rem } from '../../../tokens/scales';\n\ntype Size = NonNullable<MenubarProps['size']>;\ntype Variant = NonNullable<MenubarProps['variant']>;\ntype Color = NonNullable<MenubarProps['color']>;\n\nconst SIZES: Record<Size, (theme: Theme) => CSSObject> = {\n xs: (theme) => ({ minHeight: 40, fontSize: rem(theme, 12), padding: theme.spacing(0.5, 1) }),\n sm: (theme) => ({ minHeight: 48, fontSize: rem(theme, 14), padding: theme.spacing(0.75, 1.5) }),\n md: (theme) => ({ minHeight: 56, fontSize: rem(theme, 16), padding: theme.spacing(1, 2) }),\n lg: (theme) => ({ minHeight: 64, fontSize: rem(theme, 18), padding: theme.spacing(1.25, 2.5) }),\n xl: (theme) => ({ minHeight: 72, fontSize: rem(theme, 20), padding: theme.spacing(1.5, 3) }),\n};\n\nexport const sizeStyles = (theme: Theme, size: Size): CSSObject =>\n (SIZES[size] ?? SIZES.md)(theme);\n\n/** `default` is not a palette entry — it means the paper surface and its text. */\nconst accentOf = (theme: Theme, color: Color) =>\n color === 'neutral' ? theme.palette.primary.main : accentFor(theme, color).main;\n\nconst colorStyles = (theme: Theme, color: Color, transparent: boolean): CSSObject => {\n const surface =\n color === 'neutral'\n ? { backgroundColor: theme.palette.background.paper, color: theme.palette.text.primary }\n : { backgroundColor: accentFor(theme, color).main, color: accentFor(theme, color).contrastText };\n\n return transparent ? { ...surface, backgroundColor: 'transparent' } : surface;\n};\n\ninterface MenubarStyleFlags {\n variant: Variant;\n size: Size;\n color: Color;\n glow: boolean;\n pulse: boolean;\n glass: boolean;\n gradient: boolean;\n blur: boolean;\n transparent: boolean;\n elevation: number;\n}\n\n/**\n * Each variant's own additions to the shared bar. The `glass` and `gradient`\n * arms deliberately do not take the blur spread: glass sets its own\n * backdropFilter, and a blurred gradient loses the gradient.\n */\nconst SURFACES: Record<Variant, (theme: Theme, flags: MenubarStyleFlags) => CSSObject> = {\n glass: (theme, { glass }) => ({\n backgroundColor: alpha(theme.palette.background.paper, glass ? 0.1 : 0.8),\n backdropFilter: 'blur(20px)',\n borderBottom: `1px solid ${alpha(theme.palette.divider, 0.1)}`,\n }),\n\n gradient: (theme, { color, gradient }) => {\n // `neutral` borrows primary for the gradient, as this branch always did.\n const accent = accentFor(theme, color === 'neutral' ? 'primary' : color);\n return {\n background: gradient\n ? `linear-gradient(135deg, ${accent.light}, ${accent.dark})`\n : accent.main,\n color: accent.contrastText,\n };\n },\n\n elevated: (theme, { blur, elevation }) => ({\n ...(blur && { backdropFilter: 'blur(10px)' }),\n boxShadow: theme.shadows[elevation],\n }),\n\n minimal: (_theme, { blur }) => ({\n ...(blur && { backdropFilter: 'blur(10px)' }),\n boxShadow: 'none',\n borderBottom: 'none',\n }),\n\n bordered: (theme, { blur, color }) => ({\n ...(blur && { backdropFilter: 'blur(10px)' }),\n borderBottom: `2px solid ${\n color === 'neutral' ? theme.palette.divider : accentFor(theme, color).main\n }`,\n }),\n\n default: (_theme, { blur }) => ({ ...(blur && { backdropFilter: 'blur(10px)' }) }),\n};\n\nexport const barStyles = (theme: Theme, flags: MenubarStyleFlags): CSSObject => {\n const { variant, size, color, glow, pulse, transparent } = flags;\n\n return {\n transition: theme.transitions.create(['all'], {\n duration: theme.transitions.duration.standard,\n }),\n ...sizeStyles(theme, size),\n ...colorStyles(theme, color, transparent),\n ...(glow && { boxShadow: `0 0 20px ${alpha(accentOf(theme, color), 0.4)}` }),\n ...(pulse && {\n animation: 'pulse 2s infinite',\n '@keyframes pulse': {\n '0%': { opacity: 1 },\n '50%': { opacity: 0.8 },\n '100%': { opacity: 1 },\n },\n }),\n ...(SURFACES[variant] ?? SURFACES.default)(theme, flags),\n };\n};\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/form/Command/Command.styles.ts"],"sourcesContent":["import { alpha } from '@mui/material/styles/index.js';\nimport type { CSSObject, Theme } from '@mui/material/styles/index.js';\n\nimport type { CommandProps } from './Command.types';\nimport { accentFor, rem } from '../../../tokens/scales';\n\ntype CommandVariant = NonNullable<CommandProps['variant']>;\ntype CommandColor = NonNullable<CommandProps['color']>;\ntype CommandSize = NonNullable<CommandProps['size']>;\n\nconst SIZE_MAP: Record<CommandSize, { width: number; fontPx: number }> = {\n xs: { width: 400, fontPx: 12 },\n sm: { width: 450, fontPx: 14 },\n md: { width: 500, fontPx: 16 },\n lg: { width: 550, fontPx: 18 },\n xl: { width: 600, fontPx: 20 },\n};\n\n/** The paper's width and type for a size, both design px read through the type scale. */\nexport const commandSizeStyles = (theme: Theme, size: CommandSize) => {\n const { width, fontPx } = SIZE_MAP[size] || SIZE_MAP.md;\n return { width: rem(theme, width), fontSize: rem(theme, fontPx) };\n};\n\nconst emphasisStyles = (\n theme: Theme,\n color: CommandColor,\n glow: boolean,\n pulse: boolean,\n): CSSObject => ({\n ...(glow && {\n boxShadow: `0 0 20px ${alpha(accentFor(theme, color).main, 0.4)}`,\n }),\n ...(pulse && {\n animation: 'pulse 2s infinite',\n '@keyframes pulse': {\n '0%': { boxShadow: `0 0 0 0 ${alpha(accentFor(theme, color).main, 0.4)}` },\n '70%': { boxShadow: `0 0 0 10px ${alpha(accentFor(theme, color).main, 0)}` },\n '100%': { boxShadow: `0 0 0 0 ${alpha(accentFor(theme, color).main, 0)}` },\n },\n }),\n});\n\nconst surfaceStyles = (\n theme: Theme,\n variant: CommandVariant,\n color: CommandColor,\n): CSSObject => {\n switch (variant) {\n case 'glass':\n return {\n backgroundColor: alpha(theme.palette.background.paper, 0.1),\n backdropFilter: 'blur(20px)',\n border: `1px solid ${alpha(accentFor(theme, color).main, 0.2)}`,\n };\n case 'gradient':\n return {\n background: `linear-gradient(135deg, ${accentFor(theme, color).main}, ${accentFor(theme, color).dark})`,\n color: accentFor(theme, color).contrastText,\n };\n case 'elevated':\n return { boxShadow: theme.shadows[8] };\n case 'minimal':\n return { border: 'none', boxShadow: 'none' };\n default:\n return {};\n }\n};\n\n/**\n * Every variant shares the same transition and the same optional glow/pulse; only\n * the surface — background, border, shadow — differs.\n */\nexport const commandPaperStyles = (\n theme: Theme,\n { variant, color, glow, pulse }: {\n variant: CommandVariant;\n color: CommandColor;\n glow: boolean;\n pulse: boolean;\n },\n): CSSObject => ({\n transition: theme.transitions.create(['all'], {\n duration: theme.transitions.duration.standard,\n }),\n ...emphasisStyles(theme, color, glow, pulse),\n ...surfaceStyles(theme, variant, color),\n});\n"],"mappings":";;;;;;;;AAAA,SAAS,aAAa;AAUtB,IAAM,WAAmE;AAAA,EACvE,IAAI,EAAE,OAAO,KAAK,QAAQ,GAAG;AAAA,EAC7B,IAAI,EAAE,OAAO,KAAK,QAAQ,GAAG;AAAA,EAC7B,IAAI,EAAE,OAAO,KAAK,QAAQ,GAAG;AAAA,EAC7B,IAAI,EAAE,OAAO,KAAK,QAAQ,GAAG;AAAA,EAC7B,IAAI,EAAE,OAAO,KAAK,QAAQ,GAAG;AAC/B;AAGO,IAAM,oBAAoB,CAAC,OAAc,SAAsB;AACpE,QAAM,EAAE,OAAO,OAAO,IAAI,SAAS,IAAI,KAAK,SAAS;AACrD,SAAO,EAAE,OAAO,IAAI,OAAO,KAAK,GAAG,UAAU,IAAI,OAAO,MAAM,EAAE;AAClE;AAEA,IAAM,iBAAiB,CACrB,OACA,OACA,MACA,WACe;AAAA,EACf,GAAI,QAAQ;AAAA,IACV,WAAW,YAAY,MAAM,UAAU,OAAO,KAAK,EAAE,MAAM,GAAG,CAAC;AAAA,EACjE;AAAA,EACA,GAAI,SAAS;AAAA,IACX,WAAW;AAAA,IACX,oBAAoB;AAAA,MAClB,MAAM,EAAE,WAAW,WAAW,MAAM,UAAU,OAAO,KAAK,EAAE,MAAM,GAAG,CAAC,GAAG;AAAA,MACzE,OAAO,EAAE,WAAW,cAAc,MAAM,UAAU,OAAO,KAAK,EAAE,MAAM,CAAC,CAAC,GAAG;AAAA,MAC3E,QAAQ,EAAE,WAAW,WAAW,MAAM,UAAU,OAAO,KAAK,EAAE,MAAM,CAAC,CAAC,GAAG;AAAA,IAC3E;AAAA,EACF;AACF;AAEA,IAAM,gBAAgB,CACpB,OACA,SACA,UACc;AACd,UAAQ,SAAS;AAAA,IACf,KAAK;AACH,aAAO;AAAA,QACL,iBAAiB,MAAM,MAAM,QAAQ,WAAW,OAAO,GAAG;AAAA,QAC1D,gBAAgB;AAAA,QAChB,QAAQ,aAAa,MAAM,UAAU,OAAO,KAAK,EAAE,MAAM,GAAG,CAAC;AAAA,MAC/D;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL,YAAY,2BAA2B,UAAU,OAAO,KAAK,EAAE,IAAI,KAAK,UAAU,OAAO,KAAK,EAAE,IAAI;AAAA,QACpG,OAAO,UAAU,OAAO,KAAK,EAAE;AAAA,MACjC;AAAA,IACF,KAAK;AACH,aAAO,EAAE,WAAW,MAAM,QAAQ,CAAC,EAAE;AAAA,IACvC,KAAK;AACH,aAAO,EAAE,QAAQ,QAAQ,WAAW,OAAO;AAAA,IAC7C;AACE,aAAO,CAAC;AAAA,EACZ;AACF;AAMO,IAAM,qBAAqB,CAChC,OACA,EAAE,SAAS,OAAO,MAAM,MAAM,OAMf;AAAA,EACf,YAAY,MAAM,YAAY,OAAO,CAAC,KAAK,GAAG;AAAA,IAC5C,UAAU,MAAM,YAAY,SAAS;AAAA,EACvC,CAAC;AAAA,EACD,GAAG,eAAe,OAAO,OAAO,MAAM,KAAK;AAAA,EAC3C,GAAG,cAAc,OAAO,SAAS,KAAK;AACxC;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/form/Textarea/Textarea.styles.ts"],"sourcesContent":["import { alpha, keyframes } from '@mui/material/styles/index.js';\nimport type { CSSObject, Theme } from '@mui/material/styles/index.js';\n\nimport { fieldEdge } from '../../../tokens/field-edge';\nimport { absoluteInk, controlNeutral } from '../../../tokens/ink';\n\nconst glowAnimation = keyframes`\n 0% {\n box-shadow: 0 0 5px currentColor;\n }\n 50% {\n box-shadow: 0 0 20px currentColor, 0 0 30px currentColor;\n }\n 100% {\n box-shadow: 0 0 5px currentColor;\n }\n`;\n\n// Ripple animation for buttons (commented out - not currently used)\n// const rippleAnimation = keyframes`\n// 0% {\n// transform: scale(0);\n// opacity: 1;\n// }\n// 100% {\n// transform: scale(4);\n// opacity: 0;\n// }\n// `;\n\n// Float animation for rich text toolbar\nexport const floatAnimation = keyframes`\n 0% {\n transform: translateY(0px);\n }\n 50% {\n transform: translateY(-3px);\n }\n 100% {\n transform: translateY(0px);\n }\n`;\n\ntype ResolvedPalette = {\n main: string;\n dark: string;\n light: string;\n contrastText: string;\n};\n\ntype PartialPalette = { main: string; dark?: string; light?: string; contrastText?: string };\n\n// `neutral` is not a MUI palette entry, so it is the controls' neutral tone.\nconst neutralPalette = (theme: Theme): ResolvedPalette => controlNeutral(theme);\n\n// Each slot falls back to the palette's own main, then to primary — a custom\n// theme can define main without dark or light.\nconst pick = (...candidates: Array<string | undefined>): string =>\n candidates.find(Boolean) ?? '';\n\nconst withFallbacks = (theme: Theme, palette: PartialPalette): ResolvedPalette => ({\n main: pick(palette?.main, theme.palette.primary.main),\n dark: pick(palette?.dark, palette?.main, theme.palette.primary.dark),\n light: pick(palette?.light, palette?.main, theme.palette.primary.light),\n contrastText: pick(palette?.contrastText, absoluteInk(theme).white),\n});\n\nexport const getColorFromTheme = (theme: Theme, color: string): ResolvedPalette => {\n if (color === 'neutral') return neutralPalette(theme);\n\n const colorMap: Record<string, PartialPalette> = {\n primary: theme.palette.primary,\n secondary: theme.palette.secondary,\n success: theme.palette.success,\n warning: theme.palette.warning,\n info: theme.palette.info,\n danger: theme.palette.error,\n };\n\n return withFallbacks(theme, colorMap[color] || theme.palette.primary);\n};\n\n// glass, gradient and glow are independent flags that each layer styles onto the\n// base. Spelled out here rather than inline so the styled() callback keeps one\n// branch instead of three.\nexport const textareaEmphasisStyles = ({\n theme,\n colorPalette,\n glass,\n gradient,\n glow,\n}: {\n theme: Theme;\n colorPalette: { main: string; light?: string; dark?: string };\n glass?: boolean;\n gradient?: boolean;\n glow?: boolean;\n}): CSSObject => {\nconst glassStyles = glass\n ? {\n backgroundColor: alpha(theme.palette.background.paper, 0.1),\n backdropFilter: 'blur(20px)',\n border: `1px solid ${fieldEdge(theme)}`,\n '&:hover': {\n backgroundColor: alpha(theme.palette.background.paper, 0.15),\n backdropFilter: 'blur(25px)',\n },\n '&:focus': {\n backgroundColor: alpha(theme.palette.background.paper, 0.2),\n backdropFilter: 'blur(30px)',\n },\n }\n : {};\n\n// Gradient border effect\nconst gradientStyles = gradient\n ? {\n background: `linear-gradient(${theme.palette.background.paper}, ${theme.palette.background.paper}) padding-box,\n linear-gradient(135deg, ${colorPalette.main}, ${colorPalette.light}) border-box`,\n border: '2px solid transparent',\n '&:focus': {\n background: `linear-gradient(${theme.palette.background.paper}, ${theme.palette.background.paper}) padding-box,\n linear-gradient(135deg, ${colorPalette.main}, ${colorPalette.dark}) border-box`,\n },\n }\n : {};\n\n// Glow effect\nconst glowStyles = glow\n ? {\n animation: `${glowAnimation} 2s ease-in-out infinite`,\n boxShadow: `0 0 10px ${alpha(colorPalette.main, 0.3)}`,\n }\n : {};\n\n return { ...glassStyles, ...gradientStyles, ...glowStyles };\n};\n"],"mappings":";;;;;;;;;AAAA,SAAS,OAAO,iBAAiB;AAMjC,IAAM,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyBf,IAAM,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsB9B,IAAM,iBAAiB,CAAC,UAAkC,eAAe,KAAK;AAI9E,IAAM,OAAO,IAAI,eACf,WAAW,KAAK,OAAO,KAAK;AAE9B,IAAM,gBAAgB,CAAC,OAAc,aAA8C;AAAA,EACjF,MAAM,KAAK,SAAS,MAAM,MAAM,QAAQ,QAAQ,IAAI;AAAA,EACpD,MAAM,KAAK,SAAS,MAAM,SAAS,MAAM,MAAM,QAAQ,QAAQ,IAAI;AAAA,EACnE,OAAO,KAAK,SAAS,OAAO,SAAS,MAAM,MAAM,QAAQ,QAAQ,KAAK;AAAA,EACtE,cAAc,KAAK,SAAS,cAAc,YAAY,KAAK,EAAE,KAAK;AACpE;AAEO,IAAM,oBAAoB,CAAC,OAAc,UAAmC;AACjF,MAAI,UAAU,UAAW,QAAO,eAAe,KAAK;AAEpD,QAAM,WAA2C;AAAA,IAC/C,SAAS,MAAM,QAAQ;AAAA,IACvB,WAAW,MAAM,QAAQ;AAAA,IACzB,SAAS,MAAM,QAAQ;AAAA,IACvB,SAAS,MAAM,QAAQ;AAAA,IACvB,MAAM,MAAM,QAAQ;AAAA,IACpB,QAAQ,MAAM,QAAQ;AAAA,EACxB;AAEA,SAAO,cAAc,OAAO,SAAS,KAAK,KAAK,MAAM,QAAQ,OAAO;AACtE;AAKO,IAAM,yBAAyB,CAAC;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAMiB;AACjB,QAAM,cAAc,QAChB;AAAA,IACE,iBAAiB,MAAM,MAAM,QAAQ,WAAW,OAAO,GAAG;AAAA,IAC1D,gBAAgB;AAAA,IAChB,QAAQ,aAAa,UAAU,KAAK,CAAC;AAAA,IACrC,WAAW;AAAA,MACT,iBAAiB,MAAM,MAAM,QAAQ,WAAW,OAAO,IAAI;AAAA,MAC3D,gBAAgB;AAAA,IAClB;AAAA,IACA,WAAW;AAAA,MACT,iBAAiB,MAAM,MAAM,QAAQ,WAAW,OAAO,GAAG;AAAA,MAC1D,gBAAgB;AAAA,IAClB;AAAA,EACF,IACA,CAAC;AAGL,QAAM,iBAAiB,WACnB;AAAA,IACE,YAAY,mBAAmB,MAAM,QAAQ,WAAW,KAAK,KAAK,MAAM,QAAQ,WAAW,KAAK;AAAA,yCAC7D,aAAa,IAAI,KAAK,aAAa,KAAK;AAAA,IAC3E,QAAQ;AAAA,IACR,WAAW;AAAA,MACT,YAAY,mBAAmB,MAAM,QAAQ,WAAW,KAAK,KAAK,MAAM,QAAQ,WAAW,KAAK;AAAA,2CAC7D,aAAa,IAAI,KAAK,aAAa,IAAI;AAAA,IAC5E;AAAA,EACF,IACA,CAAC;AAGL,QAAM,aAAa,OACf;AAAA,IACE,WAAW,GAAG,aAAa;AAAA,IAC3B,WAAW,YAAY,MAAM,aAAa,MAAM,GAAG,CAAC;AAAA,EACtD,IACA,CAAC;AAEH,SAAO,EAAE,GAAG,aAAa,GAAG,gBAAgB,GAAG,WAAW;AAC5D;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/form/CategorySelect/CategorySelect.styles.ts"],"sourcesContent":["import { alpha, type CSSObject, type Theme } from '@mui/material/styles/index.js';\n\nimport { fieldEdge } from '../../../tokens/field-edge';\nimport { fieldRadiusPx } from '../../../tokens/field-radius';\nimport { fieldHeight } from '../../../tokens/field-height';\nimport { absoluteInk, uiInk } from '../../../tokens/ink';\nimport { rem } from '../../../tokens/relative';\n\n/**\n * The prototype's METRICS, verbatim.\n *\n * Every number here is lifted from the approved design and is intentionally\n * absolute rather than derived from `theme.spacing`: the design is specified on\n * a half-pixel type scale (13.5px rows, 1.5px checkbox borders) that an 8px\n * spacing grid cannot express without rounding the look away.\n *\n * The trigger's CORNER and HEIGHT are the other exception: it is a field, so it\n * takes the theme's field radius and field height (`tokens/field-radius`,\n * `tokens/field-height`) and lines up with the inputs and filter pills beside it.\n *\n * COLOURS are the deliberate exception — they come from the theme, because a\n * tenant can white-label the palette (a hard-coded indigo would survive the\n * rebrand and the rest of the screen would not) and because the library ships a\n * dark mode. On the default light indigo theme the tokens below resolve to the\n * prototype's own values.\n */\nexport const METRICS = {\n panelWidth: 340,\n panelRadius: 14,\n listMaxHeight: 290,\n sheetListMaxHeight: 340,\n rowHeight: 36,\n sheetRowHeight: 42,\n rowRadius: 8,\n boxSize: 18,\n chevronButton: 22,\n /** Extra left padding per level of nesting. */\n rowIndentStep: 14,\n footerButton: 32,\n sheetFooterButton: 38,\n /** Below this width the panel becomes a bottom sheet. */\n sheetBreakpoint: 480,\n} as const;\n\n/** Accent family, derived so a white-labelled palette carries through. */\nconst accent = (theme: Theme) => ({\n main: theme.palette.primary.main,\n ink: theme.palette.primary.dark,\n soft: alpha(theme.palette.primary.main, 0.08),\n edge: alpha(theme.palette.primary.main, 0.28),\n ring: alpha(theme.palette.primary.main, 0.15),\n});\n\n/** The closed control. `selected` swaps it to the accent-tinted \"has filter\" skin. */\nexport const triggerSx = (theme: Theme, selected: boolean, open: boolean): CSSObject => {\n const brand = accent(theme);\n return {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n height: fieldHeight(theme),\n padding: '0 10px 0 12px',\n borderRadius: fieldRadiusPx(theme),\n border: `1px solid ${open || selected ? brand.edge : fieldEdge(theme)}`,\n background: selected ? brand.soft : theme.palette.background.paper,\n color: selected ? brand.ink : theme.palette.text.primary,\n font: 'inherit',\n fontSize: rem(theme, 13),\n cursor: 'pointer',\n maxWidth: '100%',\n transition: 'border-color .12s, box-shadow .12s',\n boxShadow: open ? `0 0 0 3px ${brand.ring}` : 'none',\n '&:hover': { borderColor: open || selected ? brand.edge : theme.palette.text.disabled },\n '&:focus-visible': {\n outline: 'none',\n borderColor: brand.main,\n boxShadow: `0 0 0 3px ${alpha(brand.main, 0.18)}`,\n },\n '&:disabled': { opacity: 0.5, cursor: 'default' },\n };\n};\n\n/** The count pill inside the trigger. */\nexport const triggerCountSx = (theme: Theme): CSSObject => ({\n fontWeight: 600,\n fontSize: rem(theme, 11),\n lineHeight: 1,\n background: theme.palette.primary.main,\n color: theme.palette.primary.contrastText,\n borderRadius: '999px',\n padding: '3px 6px',\n minWidth: 18,\n textAlign: 'center',\n});\n\n/** The trigger's inline clear (×) and the chevron. */\nexport const triggerClearSx = (theme: Theme): CSSObject => ({\n width: 20,\n height: 20,\n flex: '0 0 auto',\n border: 0,\n background: 'transparent',\n borderRadius: '5px',\n display: 'grid',\n placeItems: 'center',\n cursor: 'pointer',\n color: 'inherit',\n opacity: 0.6,\n padding: 0,\n '&:hover': { background: alpha(absoluteInk(theme).black, 0.08), opacity: 1 },\n});\n\nexport const triggerChevronSx = (open: boolean): CSSObject => ({\n width: 14,\n height: 14,\n flex: '0 0 auto',\n opacity: 0.55,\n transition: 'transform .15s',\n transform: open ? 'rotate(180deg)' : 'none',\n});\n\n/** The floating panel. */\nexport const panelSx = (theme: Theme): CSSObject => ({\n width: METRICS.panelWidth,\n maxWidth: '100%',\n background: theme.palette.background.paper,\n border: `1px solid ${theme.palette.divider}`,\n borderRadius: `${METRICS.panelRadius}px`,\n boxShadow: `0 1px 2px ${alpha(uiInk(theme).panelShadowInk, 0.05)}, 0 18px 40px -12px ${alpha(uiInk(theme).panelShadowInk, 0.28)}`,\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n});\n\n/** Bottom-sheet skin, applied under {@link METRICS.sheetBreakpoint}. */\nexport const sheetSx = (theme: Theme): CSSObject => ({\n width: '100%',\n maxWidth: 'none',\n borderRadius: '18px 18px 0 0',\n borderBottom: 0,\n position: 'relative',\n paddingTop: '4px',\n '&::before': {\n content: '\"\"',\n position: 'absolute',\n top: 7,\n left: '50%',\n transform: 'translateX(-50%)',\n width: 36,\n height: 4,\n borderRadius: '2px',\n background: theme.palette.divider,\n },\n});\n\nexport const panelHeadSx = (theme: Theme, sheet: boolean): CSSObject => ({\n padding: sheet ? '18px 10px 8px' : '10px 10px 8px',\n borderBottom: `1px solid ${theme.palette.divider}`,\n});\n\nexport const pinnedSx = (theme: Theme): CSSObject => ({\n padding: '9px 10px',\n borderBottom: `1px solid ${theme.palette.divider}`,\n background: alpha(theme.palette.primary.main, 0.03),\n});\n\nexport const pinnedLabelSx = (theme: Theme): CSSObject => ({\n fontWeight: 600,\n fontSize: rem(theme, 10),\n lineHeight: 1,\n letterSpacing: '.08em',\n textTransform: 'uppercase',\n color: theme.palette.text.secondary,\n marginBottom: '7px',\n});\n\nexport const chipWrapSx: CSSObject = {\n display: 'flex',\n flexWrap: 'wrap',\n gap: '5px',\n maxHeight: 74,\n overflow: 'auto',\n};\n\n/** A selected-category chip, in the pinned tray and the applied bar alike. */\nexport const chipSx = (theme: Theme): CSSObject => {\n const brand = accent(theme);\n return {\n display: 'inline-flex',\n alignItems: 'center',\n gap: '5px',\n fontSize: rem(theme, 12),\n background: brand.soft,\n color: brand.ink,\n border: `1px solid ${brand.edge}`,\n borderRadius: '7px',\n padding: '3px 4px 3px 8px',\n '& button': {\n border: 0,\n background: 'transparent',\n color: 'inherit',\n cursor: 'pointer',\n padding: 0,\n width: 16,\n height: 16,\n borderRadius: '4px',\n display: 'grid',\n placeItems: 'center',\n opacity: 0.65,\n fontSize: rem(theme, 13),\n lineHeight: 1,\n '&:hover': { background: alpha(theme.palette.primary.main, 0.16), opacity: 1 },\n },\n };\n};\n\nexport const listSx = (sheet: boolean): CSSObject => ({\n overflow: 'auto',\n maxHeight: sheet ? METRICS.sheetListMaxHeight : METRICS.listMaxHeight,\n padding: '6px 6px 8px',\n scrollPadding: '8px 0',\n overscrollBehavior: 'contain',\n});\n\n/** A row. `active` is the KEYBOARD cursor — deliberately distinct from hover. */\nexport const rowSx = (theme: Theme, active: boolean, sheet: boolean): CSSObject => ({\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '0 8px',\n height: sheet ? METRICS.sheetRowHeight : METRICS.rowHeight,\n borderRadius: `${METRICS.rowRadius}px`,\n cursor: 'pointer',\n userSelect: 'none',\n position: 'relative',\n width: '100%',\n border: 0,\n textAlign: 'left',\n font: 'inherit',\n background: active ? alpha(theme.palette.primary.main, 0.08) : 'transparent',\n boxShadow: active ? `inset 0 0 0 1px ${alpha(theme.palette.primary.main, 0.3)}` : 'none',\n '&:hover': {\n background: active\n ? alpha(theme.palette.primary.main, 0.08)\n : theme.palette.action.hover,\n },\n '&:focus-visible': { outline: `2px solid ${theme.palette.primary.main}`, outlineOffset: 1 },\n});\n\n/**\n * How far a row sits in from the panel edge, by depth.\n *\n * One step per level, on top of {@link rowSx}'s own 8px gutter — depth 0 keeps\n * that gutter, and every level below it adds `METRICS.rowIndentStep`. Absolute\n * like the rest of this file: the step is the design's own 14px, not a spacing\n * multiple that would round it.\n */\nexport const rowIndent = (depth: number): CSSObject =>\n depth === 0 ? {} : { paddingLeft: `${depth * METRICS.rowIndentStep}px` };\n\nexport const rowNameSx = (theme: Theme, isCategory: boolean): CSSObject => ({\n flex: 1,\n minWidth: 0,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n fontSize: rem(theme, 13.5),\n fontWeight: isCategory ? 600 : 450,\n color: isCategory ? theme.palette.text.primary : theme.palette.text.secondary,\n});\n\nexport const rowMetaSx = (theme: Theme, selected: boolean): CSSObject => ({\n font: `500 ${rem(theme, 11)}/1 ui-monospace, SFMono-Regular, Menlo, monospace`,\n color: selected ? theme.palette.primary.main : theme.palette.text.secondary,\n fontWeight: selected ? 600 : 500,\n flex: '0 0 auto',\n});\n\n/** The query hit inside a row label. */\nexport const markSx = (theme: Theme): CSSObject => ({\n background: uiInk(theme).highlightMark,\n color: 'inherit',\n borderRadius: '2px',\n padding: '0 1px',\n});\n\nexport const chevronButtonSx = (theme: Theme, open: boolean): CSSObject => ({\n width: METRICS.chevronButton,\n height: METRICS.chevronButton,\n flex: '0 0 auto',\n border: 0,\n background: 'transparent',\n borderRadius: '6px',\n display: 'grid',\n placeItems: 'center',\n cursor: 'pointer',\n color: theme.palette.text.secondary,\n padding: 0,\n '&:hover': { background: theme.palette.action.hover, color: theme.palette.text.primary },\n '& svg': { width: 12, height: 12, transition: 'transform .15s', transform: open ? 'rotate(90deg)' : 'none' },\n});\n\n/** The tri-state checkbox: unchecked, checked, or the partial bar. */\nexport const checkboxSx = (theme: Theme, state: 'off' | 'partial' | 'on'): CSSObject => ({\n width: METRICS.boxSize,\n height: METRICS.boxSize,\n flex: '0 0 auto',\n border: `1.5px solid ${state === 'off' ? theme.palette.divider : theme.palette.primary.main}`,\n borderRadius: '5px',\n background: state === 'off' ? theme.palette.background.paper : theme.palette.primary.main,\n display: 'grid',\n placeItems: 'center',\n transition: 'background .1s, border-color .1s',\n '& svg': { width: 12, height: 12, color: theme.palette.primary.contrastText },\n});\n\n/** The partial bar drawn inside a half-selected checkbox. */\nexport const checkboxBarSx = (theme: Theme): CSSObject => ({\n width: 9,\n height: 2,\n background: theme.palette.primary.contrastText,\n borderRadius: '1px',\n});\n\nexport const radioSx = (theme: Theme, on: boolean): CSSObject => ({\n width: METRICS.boxSize,\n height: METRICS.boxSize,\n flex: '0 0 auto',\n borderRadius: '50%',\n background: theme.palette.background.paper,\n border: on\n ? `5.5px solid ${theme.palette.primary.main}`\n : `1.5px solid ${theme.palette.divider}`,\n boxSizing: 'border-box',\n});\n\nexport const sectionHeadSx = (theme: Theme): CSSObject => ({\n fontWeight: 600,\n fontSize: rem(theme, 10),\n lineHeight: 1,\n letterSpacing: '.08em',\n textTransform: 'uppercase',\n color: theme.palette.text.secondary,\n padding: '9px 8px 6px',\n});\n\nexport const footerSx = (theme: Theme): CSSObject => ({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: '8px',\n padding: '9px 10px',\n borderTop: `1px solid ${theme.palette.divider}`,\n background: theme.palette.action.hover,\n});\n\nexport const emptySx = (theme: Theme): CSSObject => ({\n padding: '26px 18px',\n textAlign: 'center',\n color: theme.palette.text.secondary,\n '& strong': {\n display: 'block',\n color: theme.palette.text.primary,\n fontSize: rem(theme, 13.5),\n marginBottom: '4px',\n },\n '& p': { margin: '0 0 12px', fontSize: rem(theme, 12.5), lineHeight: 1.5 },\n});\n\n/** Skeleton row used while the catalogue loads. */\nexport const skeletonSx: CSSObject = {\n height: METRICS.rowHeight,\n margin: '4px 6px',\n borderRadius: `${METRICS.rowRadius}px`,\n};\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/form/SearchPalette/SearchPalette.parts.tsx"],"sourcesContent":["import KeyboardReturnIcon from '@mui/icons-material/KeyboardReturn';\nimport SearchIcon from '@mui/icons-material/Search';\nimport Avatar from '@mui/material/Avatar/index.js';\nimport Box from '@mui/material/Box/index.js';\nimport Chip from '@mui/material/Chip/index.js';\nimport CircularProgress from '@mui/material/CircularProgress/index.js';\nimport InputBase from '@mui/material/InputBase/index.js';\nimport List from '@mui/material/List/index.js';\nimport ListItemButton from '@mui/material/ListItemButton/index.js';\nimport Paper from '@mui/material/Paper/index.js';\nimport Typography from '@mui/material/Typography/index.js';\nimport React from 'react';\n\nimport type { SearchFilterChip, SearchResultLead } from './SearchPalette.types';\nimport { sxRem } from '../../../tokens/relative';\n\n/** Bold the first case-insensitive occurrence of `query` within `text`. */\nexport function highlight(text: string, query: string): React.ReactNode {\n const q = query.trim();\n const at = q ? text.toLowerCase().indexOf(q.toLowerCase()) : -1;\n if (at < 0) return text;\n return (\n <>\n {text.slice(0, at)}\n <Box component=\"span\" sx={{ fontWeight: 700 }}>\n {text.slice(at, at + q.length)}\n </Box>\n {text.slice(at + q.length)}\n </>\n );\n}\n\n/** The leading visual of a result row (image / avatar / icon). */\nexport function Lead({ lead }: { lead: SearchResultLead | undefined }): React.JSX.Element | null {\n if (!lead) return null;\n if (lead.kind === 'image') {\n return (\n <Box\n component=\"img\"\n src={lead.src}\n alt={lead.alt ?? ''}\n sx={{ width: 32, height: 32, borderRadius: 1, objectFit: 'cover', flexShrink: 0 }}\n />\n );\n }\n if (lead.kind === 'avatar') {\n return (\n <Avatar src={lead.src} alt={lead.alt ?? ''} sx={{ width: 32, height: 32, fontSize: sxRem(13.6) }}>\n {lead.fallback}\n </Avatar>\n );\n }\n return (\n <Box sx={{ display: 'flex', width: 32, justifyContent: 'center', flexShrink: 0, color: 'text.secondary' }}>\n {lead.node}\n </Box>\n );\n}\n\n/** Compute the ghost-completion remainder of the top result for `query`. */\nexport function ghostRemainder(topPrimary: string | undefined, query: string): string {\n if (!query || !topPrimary) return '';\n return topPrimary.toLowerCase().startsWith(query.toLowerCase()) && topPrimary.length > query.length\n ? topPrimary.slice(query.length)\n : '';\n}\n\n/** The search input row: leading icon, ghost overlay, the field, and a spinner. */\nexport function PaletteInput(props: {\n value: string;\n ghost: string;\n isLoading: boolean;\n autoFocus: boolean;\n placeholder: string;\n inputAriaLabel?: string;\n hasQuery: boolean;\n onChange: (v: string) => void;\n onKeyDown: (e: React.KeyboardEvent) => void;\n}): React.JSX.Element {\n return (\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1.25, px: 2, py: 1.5 }}>\n <SearchIcon fontSize=\"small\" sx={{ color: 'text.secondary', flexShrink: 0 }} />\n <Box sx={{ position: 'relative', flex: 1, minWidth: 0 }}>\n {props.ghost && (\n <Box\n aria-hidden\n sx={{\n position: 'absolute',\n inset: 0,\n display: 'flex',\n alignItems: 'center',\n pointerEvents: 'none',\n whiteSpace: 'pre',\n overflow: 'hidden',\n fontSize: sxRem(16),\n }}\n >\n <Box component=\"span\" sx={{ visibility: 'hidden' }}>\n {props.value}\n </Box>\n <Box component=\"span\" sx={{ color: 'text.secondary', opacity: 0.6 }}>\n {props.ghost}\n </Box>\n </Box>\n )}\n <InputBase\n fullWidth\n autoFocus={props.autoFocus}\n value={props.value}\n onChange={(e) => props.onChange(e.target.value)}\n onKeyDown={props.onKeyDown}\n placeholder={props.placeholder}\n inputProps={{\n role: 'combobox',\n 'aria-expanded': props.hasQuery,\n 'aria-label': props.inputAriaLabel,\n 'aria-autocomplete': 'list',\n }}\n sx={{ fontSize: sxRem(16) }}\n />\n </Box>\n {props.isLoading && <CircularProgress size={18} sx={{ flexShrink: 0 }} />}\n </Box>\n );\n}\n\n/** The toggleable filter-chip row. */\nexport function FilterChips(props: {\n filters: SearchFilterChip[];\n activeFilterIds: string[];\n onToggleFilter?: (id: string) => void;\n}): React.JSX.Element {\n return (\n <Box\n data-testid=\"search-palette-filters\"\n sx={{\n display: 'flex',\n flexWrap: 'wrap',\n gap: 1,\n px: 2,\n pb: 1.5,\n borderBottom: (theme) => `1px solid ${theme.palette.divider}`,\n }}\n >\n {props.filters.map((chip) => {\n const active = props.activeFilterIds.includes(chip.id);\n return (\n <Chip\n key={chip.id}\n label={chip.label}\n icon={chip.icon as React.ReactElement | undefined}\n onClick={() => props.onToggleFilter?.(chip.id)}\n variant={active ? 'filled' : 'outlined'}\n color={active ? 'primary' : 'default'}\n size=\"small\"\n aria-pressed={active}\n data-testid={`search-palette-filter-${chip.id}`}\n sx={{ borderRadius: 2 }}\n />\n );\n })}\n </Box>\n );\n}\n\n/** One rich result row. */\nexport function ResultRow(props: {\n index: number;\n active: boolean;\n query: string;\n lead: SearchResultLead | undefined;\n primary: string;\n secondary: string | undefined;\n trailing: React.ReactNode | undefined;\n onSelect: () => void;\n onHover: () => void;\n}): React.JSX.Element {\n return (\n <ListItemButton\n role=\"option\"\n aria-selected={props.active}\n selected={props.active}\n onMouseEnter={props.onHover}\n onMouseDown={(e) => e.preventDefault()}\n onClick={props.onSelect}\n data-testid={`search-palette-result-${props.index}`}\n sx={{ gap: 1.25, px: 2, py: 1 }}\n >\n <Lead lead={props.lead} />\n <Box sx={{ minWidth: 0, flex: 1 }}>\n <Typography variant=\"body2\" noWrap sx={{ color: 'text.primary' }}>\n {highlight(props.primary, props.query)}\n </Typography>\n {props.secondary && (\n <Typography variant=\"caption\" noWrap sx={{ display: 'block', color: 'text.secondary' }}>\n {props.secondary}\n </Typography>\n )}\n </Box>\n {props.trailing != null && (\n <Box sx={{ flexShrink: 0, color: 'text.secondary', fontSize: sxRem(12) }}>{props.trailing}</Box>\n )}\n </ListItemButton>\n );\n}\n\n/** The \"see all results — Press ENTER\" footer row. */\nexport function SubmitAllFooter(props: {\n label: string;\n keyLabel: string;\n selected: boolean;\n onSelect: () => void;\n onHover: () => void;\n}): React.JSX.Element {\n return (\n <ListItemButton\n selected={props.selected}\n onMouseEnter={props.onHover}\n onMouseDown={(e) => e.preventDefault()}\n onClick={props.onSelect}\n data-testid=\"search-palette-submit-all\"\n sx={{ gap: 1.25, px: 2, py: 1, borderTop: (theme) => `1px solid ${theme.palette.divider}` }}\n >\n <SearchIcon fontSize=\"small\" sx={{ color: 'text.secondary', flexShrink: 0 }} />\n <Typography variant=\"body2\" sx={{ flex: 1, minWidth: 0 }} noWrap>\n {props.label}\n </Typography>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5, color: 'text.secondary' }}>\n <Typography variant=\"caption\">{props.keyLabel}</Typography>\n <KeyboardReturnIcon sx={{ fontSize: sxRem(14) }} />\n </Box>\n </ListItemButton>\n );\n}\n\n/** Resolved view state shared by the body renderer. */\nexport interface BodyView<T> {\n hasQuery: boolean;\n emptyQueryContent: React.ReactNode;\n visible: T[];\n isLoading: boolean;\n noResultsLabel: string;\n showFooter: boolean;\n footerIndex: number;\n activeIndex: number;\n trimmed: string;\n submitAllLabel: (q: string) => string;\n submitKeyLabel: string;\n getKey: (item: T) => string;\n getPrimary: (item: T) => string;\n getSecondary?: (item: T) => string | undefined;\n getLead?: (item: T) => SearchResultLead | undefined;\n getTrailing?: (item: T) => React.ReactNode | undefined;\n onSelect: (item: T) => void;\n onSubmitAll?: (query: string) => void;\n setActiveIndex: (i: number) => void;\n}\n\n/** The results list (or the empty-query slot / no-results message) + footer. */\nexport function PaletteBody<T>(view: BodyView<T>): React.JSX.Element | null {\n if (!view.hasQuery) {\n return view.emptyQueryContent ? (\n <Box data-testid=\"search-palette-empty-query\">{view.emptyQueryContent}</Box>\n ) : null;\n }\n const empty = view.visible.length === 0;\n return (\n <>\n {!empty && (\n <List dense disablePadding role=\"listbox\" data-testid=\"search-palette-results\">\n {view.visible.map((item, index) => (\n <ResultRow\n key={view.getKey(item)}\n index={index}\n active={index === view.activeIndex}\n query={view.trimmed}\n lead={view.getLead?.(item)}\n primary={view.getPrimary(item)}\n secondary={view.getSecondary?.(item)}\n trailing={view.getTrailing?.(item)}\n onSelect={() => view.onSelect(item)}\n onHover={() => view.setActiveIndex(index)}\n />\n ))}\n </List>\n )}\n {empty && !view.isLoading && (\n <Box sx={{ px: 2, py: 1.5 }} data-testid=\"search-palette-no-results\">\n <Typography variant=\"body2\" color=\"text.secondary\">\n {view.noResultsLabel}\n </Typography>\n </Box>\n )}\n {view.showFooter && (\n <SubmitAllFooter\n label={view.submitAllLabel(view.trimmed)}\n keyLabel={view.submitKeyLabel}\n selected={view.activeIndex === view.footerIndex}\n onSelect={() => view.onSubmitAll?.(view.trimmed)}\n onHover={() => view.setActiveIndex(view.footerIndex)}\n />\n )}\n </>\n );\n}\n\n/**\n * The palette card: a flex column capped at the height its container allows, so\n * the input and the filter chips stay pinned while only the results scroll and a\n * long result set can never push the palette past the bottom of the viewport.\n */\nexport const PALETTE_CARD_SX = {\n width: '100%',\n maxWidth: 640,\n maxHeight: '100%',\n borderRadius: 2,\n overflow: 'hidden',\n display: 'flex',\n flexDirection: 'column',\n} as const;\n\n/** The scrolling region of the card — the results, and nothing above them. */\nexport function PaletteScrollArea({ children }: { children: React.ReactNode }): React.JSX.Element {\n return (\n <Box sx={{ minHeight: 0, overflowY: 'auto', overscrollBehavior: 'contain' }}>{children}</Box>\n );\n}\n\nexport { Paper };\n\n/** Context for the keydown handler builder. */\nexport interface KeyCtx<T> {\n rowCount: number;\n activeIndex: number;\n footerIndex: number;\n visible: T[];\n hasQuery: boolean;\n ghost: string;\n top: T | undefined;\n trimmed: string;\n getPrimary: (item: T) => string;\n onChange: (v: string) => void;\n onSelect: (item: T) => void;\n onSubmitAll?: (query: string) => void;\n onClose?: () => void;\n setActiveIndex: React.Dispatch<React.SetStateAction<number>>;\n}\n\n/** Build the input's keydown handler (nav / select / ghost-accept / close). */\nexport function createKeyDownHandler<T>(ctx: KeyCtx<T>): (e: React.KeyboardEvent) => void {\n const move = (delta: number): void =>\n ctx.setActiveIndex((i) => Math.min(Math.max(i + delta, 0), Math.max(ctx.rowCount - 1, 0)));\n const commit = (): void => {\n if (!ctx.hasQuery) return;\n if (ctx.activeIndex === ctx.footerIndex) {\n ctx.onSubmitAll?.(ctx.trimmed);\n return;\n }\n const item = ctx.visible[ctx.activeIndex];\n if (item) ctx.onSelect(item);\n };\n // A lookup keeps the handler itself flat (low complexity). Tab/→ is special —\n // it must only swallow the event when there is a ghost to accept, otherwise\n // Tab keeps its native focus behavior.\n const actions: Record<string, (() => void) | undefined> = {\n ArrowDown: () => move(1),\n ArrowUp: () => move(-1),\n Enter: commit,\n Escape: () => ctx.onClose?.(),\n };\n return (e) => {\n if ((e.key === 'Tab' || e.key === 'ArrowRight') && ctx.ghost && ctx.top) {\n e.preventDefault();\n ctx.onChange(ctx.getPrimary(ctx.top));\n return;\n }\n const action = actions[e.key];\n if (!action) return;\n e.preventDefault();\n action();\n };\n}\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/form/Command/Command.parts.tsx"],"sourcesContent":["import Box from '@mui/material/Box/index.js';\nimport CircularProgress from '@mui/material/CircularProgress/index.js';\nimport Divider from '@mui/material/Divider/index.js';\nimport Typography from '@mui/material/Typography/index.js';\nimport React from 'react';\n\nimport type {\n CommandEmptyProps,\n CommandLoadingProps,\n CommandSeparatorProps,\n} from './Command.types';\n\nexport const CommandEmpty: React.FC<CommandEmptyProps> = ({\n message = 'No results found',\n className,\n style,\n dataTestId,\n}) => (\n <Box\n className={className}\n data-testid={dataTestId}\n sx={{\n p: 4,\n textAlign: 'center',\n color: 'text.secondary',\n ...style,\n }}\n >\n <Typography variant=\"body2\">{message}</Typography>\n </Box>\n );\n\nexport const CommandLoading: React.FC<CommandLoadingProps> = ({\n message = 'Loading...',\n className,\n style,\n dataTestId,\n}) => (\n <Box\n className={className}\n data-testid={dataTestId}\n sx={{\n p: 4,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: 2,\n ...style,\n }}\n >\n <CircularProgress size={24} />\n <Typography variant=\"body2\" color=\"text.secondary\">\n {message}\n </Typography>\n </Box>\n );\n\nexport const CommandSeparator: React.FC<CommandSeparatorProps> = ({\n className,\n style,\n}) => <Divider className={className} sx={{ my: 1, ...style }} />;"],"mappings":";AAAA,OAAO,SAAS;AAChB,OAAO,sBAAsB;AAC7B,OAAO,aAAa;AACpB,OAAO,gBAAgB;AAyBjB,cAUF,YAVE;AAhBC,IAAM,eAA4C,CAAC;AAAA,EACxD,UAAU;AAAA,EACV;AAAA,EACA;AAAA,EACA;AACF,MACI;AAAA,EAAC;AAAA;AAAA,IACC;AAAA,IACA,eAAa;AAAA,IACb,IAAI;AAAA,MACF,GAAG;AAAA,MACH,WAAW;AAAA,MACX,OAAO;AAAA,MACP,GAAG;AAAA,IACL;AAAA,IAEA,8BAAC,cAAW,SAAQ,SAAS,mBAAQ;AAAA;AACvC;AAGG,IAAM,iBAAgD,CAAC;AAAA,EAC5D,UAAU;AAAA,EACV;AAAA,EACA;AAAA,EACA;AACF,MACI;AAAA,EAAC;AAAA;AAAA,IACC;AAAA,IACA,eAAa;AAAA,IACb,IAAI;AAAA,MACF,GAAG;AAAA,MACH,SAAS;AAAA,MACT,eAAe;AAAA,MACf,YAAY;AAAA,MACZ,KAAK;AAAA,MACL,GAAG;AAAA,IACL;AAAA,IAEA;AAAA,0BAAC,oBAAiB,MAAM,IAAI;AAAA,MAC5B,oBAAC,cAAW,SAAQ,SAAQ,OAAM,kBAC/B,mBACH;AAAA;AAAA;AACF;AAGG,IAAM,mBAAoD,CAAC;AAAA,EAChE;AAAA,EACA;AACF,MAAM,oBAAC,WAAQ,WAAsB,IAAI,EAAE,IAAI,GAAG,GAAG,MAAM,GAAG;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/form/CodeEditor/CodeEditor.helpers.ts"],"sourcesContent":["import type { CodeEditorProps } from './CodeEditor.types';\n\n// Every element repeated the same conditional test id; this is that ternary once.\nexport const makeTestId =\n (dataTestId?: string) =>\n (suffix: string): string =>\n dataTestId ? `${dataTestId}-${suffix}` : `code-editor-${suffix}`;\n\ntype CodeEditorDefaultedKeys =\n | 'height'\n | 'theme'\n | 'readOnly'\n | 'lineNumbers'\n | 'minimap'\n | 'fontSize'\n | 'wordWrap'\n | 'showToolbar'\n | 'autoFormat';\n\ntype ResolvedCodeEditorProps = CodeEditorProps &\n Required<Pick<CodeEditorProps, CodeEditorDefaultedKeys>>;\n\nconst CODE_EDITOR_DEFAULTS: Pick<CodeEditorProps, CodeEditorDefaultedKeys> = {\n height: '400px',\n theme: 'auto',\n readOnly: false,\n lineNumbers: true,\n minimap: false,\n fontSize: 14,\n wordWrap: false,\n showToolbar: true,\n autoFormat: false,\n};\n\n// Strips explicitly-undefined props before the merge, so `prop={undefined}` still\n// falls back to the default exactly as a destructuring default would. Applied as\n// a merge rather than destructuring defaults, which would otherwise put nine\n// branches into the component's own complexity budget.\nexport const resolveCodeEditorProps = (props: CodeEditorProps): ResolvedCodeEditorProps =>\n ({\n ...CODE_EDITOR_DEFAULTS,\n ...(Object.fromEntries(\n Object.entries(props).filter(([, value]) => value !== undefined),\n ) as Partial<CodeEditorProps>),\n }) as ResolvedCodeEditorProps;\n"],"mappings":";AAGO,IAAM,aACX,CAAC,eACD,CAAC,WACC,aAAa,GAAG,UAAU,IAAI,MAAM,KAAK,eAAe,MAAM;AAgBlE,IAAM,uBAAuE;AAAA,EAC3E,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,UAAU;AAAA,EACV,aAAa;AAAA,EACb,SAAS;AAAA,EACT,UAAU;AAAA,EACV,UAAU;AAAA,EACV,aAAa;AAAA,EACb,YAAY;AACd;AAMO,IAAM,yBAAyB,CAAC,WACpC;AAAA,EACC,GAAG;AAAA,EACH,GAAI,OAAO;AAAA,IACT,OAAO,QAAQ,KAAK,EAAE,OAAO,CAAC,CAAC,EAAE,KAAK,MAAM,UAAU,MAAS;AAAA,EACjE;AACF;","names":[]}