@stackcraftmx/calcita 0.32.2 → 0.51.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 (680) hide show
  1. package/README.md +426 -4
  2. package/cli/calcita.js +15 -0
  3. package/cli/checkTexts.js +209 -0
  4. package/cli/packageVersions.js +17 -3
  5. package/cli/projectFiles.js +7 -2
  6. package/cli/templates/module/__Name__Page.test.jsx.tpl +24 -0
  7. package/cli/templates/project/README.md.tpl +35 -2
  8. package/cli/templates/project/eslint.config.js.tpl +27 -0
  9. package/cli/templates/project/src/app/appRouter.jsx.tpl +5 -2
  10. package/cli/templates/project/src/app/appTexts.js.tpl +2 -1
  11. package/cli/templates/project/src/core/accountConnector.js.tpl +4 -2
  12. package/cli/templates/project/src/core/publicPaths.js.tpl +10 -2
  13. package/cli/templates/project/src/modules/auth/SignInPage.test.jsx.tpl +20 -0
  14. package/cli/templates/project/src/modules/home/HomePage.test.jsx.tpl +16 -0
  15. package/cli/templates/project/src/testing/browserGaps.js.tpl +70 -0
  16. package/cli/templates/project/src/testing/openScreen.jsx.tpl +58 -0
  17. package/cli/templates/project/src/testing/setup.js.tpl +25 -0
  18. package/cli/templates/project/vite.config.js.tpl +20 -1
  19. package/dist/DataTable/AuditTrailDialog.js +3 -2
  20. package/dist/DataTable/AuditTrailDialog.js.map +1 -1
  21. package/dist/DataTable/ColumnFilters/HeaderFilterPopover.js +3 -2
  22. package/dist/DataTable/ColumnFilters/HeaderFilterPopover.js.map +1 -1
  23. package/dist/DataTable/ColumnFilters/MultiSelectColumnFilter.js +3 -2
  24. package/dist/DataTable/ColumnFilters/MultiSelectColumnFilter.js.map +1 -1
  25. package/dist/DataTable/ColumnFilters/SortableFilterHeader.js +3 -2
  26. package/dist/DataTable/ColumnFilters/SortableFilterHeader.js.map +1 -1
  27. package/dist/DataTable/EmptyState.js +3 -2
  28. package/dist/DataTable/EmptyState.js.map +1 -1
  29. package/dist/DataTable/FilterChips.js +3 -2
  30. package/dist/DataTable/FilterChips.js.map +1 -1
  31. package/dist/DataTable/GoToPage.js +71 -14
  32. package/dist/DataTable/GoToPage.js.map +1 -1
  33. package/dist/DataTable/ServerTable.js +97 -28
  34. package/dist/DataTable/ServerTable.js.map +1 -1
  35. package/dist/DataTable/ServerTableFilterDrawer.js +57 -0
  36. package/dist/DataTable/ServerTableFilterDrawer.js.map +1 -0
  37. package/dist/DataTable/StackedCell.js +60 -0
  38. package/dist/DataTable/StackedCell.js.map +1 -0
  39. package/dist/DataTable/TableCardsView.js +88 -0
  40. package/dist/DataTable/TableCardsView.js.map +1 -0
  41. package/dist/DataTable/columnWidths.js +30 -0
  42. package/dist/DataTable/columnWidths.js.map +1 -0
  43. package/dist/DataTable/columns.js +47 -1
  44. package/dist/DataTable/columns.js.map +1 -1
  45. package/dist/DataTable/filterContext.js.map +1 -1
  46. package/dist/DataTable/fixedColumns.js +24 -0
  47. package/dist/DataTable/fixedColumns.js.map +1 -0
  48. package/dist/DataTable/goToPageOptions.js +17 -0
  49. package/dist/DataTable/goToPageOptions.js.map +1 -0
  50. package/dist/DataTable/useTableView.js +29 -0
  51. package/dist/DataTable/useTableView.js.map +1 -0
  52. package/dist/access/PermissionMatrix.js +3 -2
  53. package/dist/access/PermissionMatrix.js.map +1 -1
  54. package/dist/account/AccountProvider.js +1 -1
  55. package/dist/account/AccountSecuritySection.js +3 -2
  56. package/dist/account/AccountSecuritySection.js.map +1 -1
  57. package/dist/account/DemoTotpCodeButton.js +3 -2
  58. package/dist/account/DemoTotpCodeButton.js.map +1 -1
  59. package/dist/account/ProfileScreen.js +3 -2
  60. package/dist/account/ProfileScreen.js.map +1 -1
  61. package/dist/account/SignInScreen.js +3 -2
  62. package/dist/account/SignInScreen.js.map +1 -1
  63. package/dist/appShell/AccountMenu.js +3 -2
  64. package/dist/appShell/AccountMenu.js.map +1 -1
  65. package/dist/appShell/AppLayout.js +3 -2
  66. package/dist/appShell/AppLayout.js.map +1 -1
  67. package/dist/appShell/AppearanceSettings.js +3 -2
  68. package/dist/appShell/AppearanceSettings.js.map +1 -1
  69. package/dist/appShell/AuthLayout.js +3 -2
  70. package/dist/appShell/AuthLayout.js.map +1 -1
  71. package/dist/appShell/BarActionButton.js +11 -4
  72. package/dist/appShell/BarActionButton.js.map +1 -1
  73. package/dist/appShell/BarActions.js +3 -2
  74. package/dist/appShell/BarActions.js.map +1 -1
  75. package/dist/appShell/BarCapsule.js +3 -2
  76. package/dist/appShell/BarCapsule.js.map +1 -1
  77. package/dist/appShell/BarSearch.js +3 -2
  78. package/dist/appShell/BarSearch.js.map +1 -1
  79. package/dist/appShell/HeaderTools.js +3 -2
  80. package/dist/appShell/HeaderTools.js.map +1 -1
  81. package/dist/appShell/MobileTabBar.js +3 -2
  82. package/dist/appShell/MobileTabBar.js.map +1 -1
  83. package/dist/appShell/SettingsMenu.js +3 -2
  84. package/dist/appShell/SettingsMenu.js.map +1 -1
  85. package/dist/appShell/SideMenu.js +3 -2
  86. package/dist/appShell/SideMenu.js.map +1 -1
  87. package/dist/appShell/SideMenuEntry.js +3 -2
  88. package/dist/appShell/SideMenuEntry.js.map +1 -1
  89. package/dist/appShell/SubmenuActionsMenu.js +3 -2
  90. package/dist/appShell/SubmenuActionsMenu.js.map +1 -1
  91. package/dist/appShell/TabBarEditor.js +3 -2
  92. package/dist/appShell/TabBarEditor.js.map +1 -1
  93. package/dist/appShell/TopMenu.js +3 -2
  94. package/dist/appShell/TopMenu.js.map +1 -1
  95. package/dist/appShell/Wordmark.js +3 -2
  96. package/dist/appShell/Wordmark.js.map +1 -1
  97. package/dist/auth/PasswordChecklist.js +3 -2
  98. package/dist/auth/PasswordChecklist.js.map +1 -1
  99. package/dist/calendar/EventCalendar.js +3 -2
  100. package/dist/calendar/EventCalendar.js.map +1 -1
  101. package/dist/calendar/EventDetails.js +3 -2
  102. package/dist/calendar/EventDetails.js.map +1 -1
  103. package/dist/date-pickers.js +28 -2
  104. package/dist/date-pickers.js.map +1 -1
  105. package/dist/datePickers/DateInput.js +41 -54
  106. package/dist/datePickers/DateInput.js.map +1 -1
  107. package/dist/datePickers/DateTimeInput.js +81 -0
  108. package/dist/datePickers/DateTimeInput.js.map +1 -0
  109. package/dist/datePickers/FormDateTimeField.js +12 -0
  110. package/dist/datePickers/FormDateTimeField.js.map +1 -0
  111. package/dist/datePickers/FormMonthField.js +12 -0
  112. package/dist/datePickers/FormMonthField.js.map +1 -0
  113. package/dist/datePickers/FormTimeField.js +12 -0
  114. package/dist/datePickers/FormTimeField.js.map +1 -0
  115. package/dist/datePickers/MonthInput.js +64 -0
  116. package/dist/datePickers/MonthInput.js.map +1 -0
  117. package/dist/datePickers/PickerFrame.js +27 -0
  118. package/dist/datePickers/PickerFrame.js.map +1 -0
  119. package/dist/datePickers/TimeInput.js +61 -0
  120. package/dist/datePickers/TimeInput.js.map +1 -0
  121. package/dist/datePickers/dateTimeRules.js +24 -0
  122. package/dist/datePickers/dateTimeRules.js.map +1 -0
  123. package/dist/datePickers/pickerValues.js +106 -0
  124. package/dist/datePickers/pickerValues.js.map +1 -0
  125. package/dist/datePickers/useCurrentMinute.js +28 -0
  126. package/dist/datePickers/useCurrentMinute.js.map +1 -0
  127. package/dist/datePickers/usePickerField.js +23 -0
  128. package/dist/datePickers/usePickerField.js.map +1 -0
  129. package/dist/dictionaries/dictionaries.js +3 -1
  130. package/dist/dictionaries/dictionaries.js.map +1 -1
  131. package/dist/downloads/DownloadManager.js +3 -2
  132. package/dist/downloads/DownloadManager.js.map +1 -1
  133. package/dist/feedback/ConfirmDialog.js +3 -2
  134. package/dist/feedback/ConfirmDialog.js.map +1 -1
  135. package/dist/feedback/ModalWaiting.js +3 -2
  136. package/dist/feedback/ModalWaiting.js.map +1 -1
  137. package/dist/feedback/NewBuildNotice.js +3 -2
  138. package/dist/feedback/NewBuildNotice.js.map +1 -1
  139. package/dist/filepond/FileDropzone.js +3 -2
  140. package/dist/filepond/FileDropzone.js.map +1 -1
  141. package/dist/forms/FormAttachmentsField.js +12 -0
  142. package/dist/forms/FormAttachmentsField.js.map +1 -0
  143. package/dist/forms/FormCheckboxGroupField.js +12 -0
  144. package/dist/forms/FormCheckboxGroupField.js.map +1 -0
  145. package/dist/forms/FormFileField.js +12 -0
  146. package/dist/forms/FormFileField.js.map +1 -0
  147. package/dist/forms/FormFileUploadField.js +12 -0
  148. package/dist/forms/FormFileUploadField.js.map +1 -0
  149. package/dist/forms/FormImageField.js +12 -0
  150. package/dist/forms/FormImageField.js.map +1 -0
  151. package/dist/forms/FormMaskedField.js +12 -0
  152. package/dist/forms/FormMaskedField.js.map +1 -0
  153. package/dist/forms/FormProblemAlert.js +3 -2
  154. package/dist/forms/FormProblemAlert.js.map +1 -1
  155. package/dist/forms/FormRepeatingFields.js +54 -0
  156. package/dist/forms/FormRepeatingFields.js.map +1 -0
  157. package/dist/forms/FormTransferListField.js +12 -0
  158. package/dist/forms/FormTransferListField.js.map +1 -0
  159. package/dist/forms/SubmitButton.js +7 -2
  160. package/dist/forms/SubmitButton.js.map +1 -1
  161. package/dist/forms/applyServerProblem.js +10 -3
  162. package/dist/forms/applyServerProblem.js.map +1 -1
  163. package/dist/forms/auth/SignInForm.js +3 -2
  164. package/dist/forms/auth/SignInForm.js.map +1 -1
  165. package/dist/forms/fieldRules.js +30 -0
  166. package/dist/forms/fieldRules.js.map +1 -0
  167. package/dist/forms/listRules.js +111 -0
  168. package/dist/forms/listRules.js.map +1 -0
  169. package/dist/forms/security/SecondStepForm.js +3 -2
  170. package/dist/forms/security/SecondStepForm.js.map +1 -1
  171. package/dist/forms/security/TwoStepVerificationCard.js +3 -2
  172. package/dist/forms/security/TwoStepVerificationCard.js.map +1 -1
  173. package/dist/forms/serverProblemFields.js +17 -0
  174. package/dist/forms/serverProblemFields.js.map +1 -1
  175. package/dist/forms/useValidationText.js +18 -0
  176. package/dist/forms/useValidationText.js.map +1 -0
  177. package/dist/forms/validation.js +35 -31
  178. package/dist/forms/validation.js.map +1 -1
  179. package/dist/forms/validationMessages.js +64 -7
  180. package/dist/forms/validationMessages.js.map +1 -1
  181. package/dist/forms.js +54 -29
  182. package/dist/forms.js.map +1 -1
  183. package/dist/hookForm/FormAttachmentsField.js +12 -0
  184. package/dist/hookForm/FormAttachmentsField.js.map +1 -0
  185. package/dist/hookForm/FormCheckboxGroupField.js +12 -0
  186. package/dist/hookForm/FormCheckboxGroupField.js.map +1 -0
  187. package/dist/hookForm/FormFileField.js +12 -0
  188. package/dist/hookForm/FormFileField.js.map +1 -0
  189. package/dist/hookForm/FormFileUploadField.js +12 -0
  190. package/dist/hookForm/FormFileUploadField.js.map +1 -0
  191. package/dist/hookForm/FormImageField.js +12 -0
  192. package/dist/hookForm/FormImageField.js.map +1 -0
  193. package/dist/hookForm/FormMaskedField.js +12 -0
  194. package/dist/hookForm/FormMaskedField.js.map +1 -0
  195. package/dist/hookForm/FormProblemAlert.js +3 -2
  196. package/dist/hookForm/FormProblemAlert.js.map +1 -1
  197. package/dist/hookForm/FormRepeatingFields.js +44 -0
  198. package/dist/hookForm/FormRepeatingFields.js.map +1 -0
  199. package/dist/hookForm/FormTransferListField.js +12 -0
  200. package/dist/hookForm/FormTransferListField.js.map +1 -0
  201. package/dist/hookForm/SubmitButton.js +7 -2
  202. package/dist/hookForm/SubmitButton.js.map +1 -1
  203. package/dist/hookForm/applyServerProblem.js +8 -3
  204. package/dist/hookForm/applyServerProblem.js.map +1 -1
  205. package/dist/inbox/InboxLayout.js +3 -2
  206. package/dist/inbox/InboxLayout.js.map +1 -1
  207. package/dist/inbox/MessageList.js +3 -2
  208. package/dist/inbox/MessageList.js.map +1 -1
  209. package/dist/inbox/MessageView.js +3 -2
  210. package/dist/inbox/MessageView.js.map +1 -1
  211. package/dist/index.js +235 -124
  212. package/dist/index.js.map +1 -1
  213. package/dist/inputs/CatalogInput.js +103 -29
  214. package/dist/inputs/CatalogInput.js.map +1 -1
  215. package/dist/inputs/CheckboxGroupInput.js +103 -0
  216. package/dist/inputs/CheckboxGroupInput.js.map +1 -0
  217. package/dist/inputs/ColorInput.js +7 -4
  218. package/dist/inputs/ColorInput.js.map +1 -1
  219. package/dist/inputs/FieldFrame.js +10 -4
  220. package/dist/inputs/FieldFrame.js.map +1 -1
  221. package/dist/inputs/FormSection.js +1 -1
  222. package/dist/inputs/MaskedInput.js +87 -0
  223. package/dist/inputs/MaskedInput.js.map +1 -0
  224. package/dist/inputs/NumberInput.js +41 -25
  225. package/dist/inputs/NumberInput.js.map +1 -1
  226. package/dist/inputs/RepeatingFields.js +180 -0
  227. package/dist/inputs/RepeatingFields.js.map +1 -0
  228. package/dist/inputs/SelectInput.js +50 -9
  229. package/dist/inputs/SelectInput.js.map +1 -1
  230. package/dist/inputs/TextInput.js +5 -3
  231. package/dist/inputs/TextInput.js.map +1 -1
  232. package/dist/inputs/TransferListInput.js +218 -0
  233. package/dist/inputs/TransferListInput.js.map +1 -0
  234. package/dist/inputs/WizardLayout.js +3 -2
  235. package/dist/inputs/WizardLayout.js.map +1 -1
  236. package/dist/inputs/inputMasks.js +84 -0
  237. package/dist/inputs/inputMasks.js.map +1 -0
  238. package/dist/inputs/selectAllState.js +20 -0
  239. package/dist/inputs/selectAllState.js.map +1 -0
  240. package/dist/inputs/useRowKeys.js +26 -0
  241. package/dist/inputs/useRowKeys.js.map +1 -0
  242. package/dist/kanban/KanbanBoard.js +3 -2
  243. package/dist/kanban/KanbanBoard.js.map +1 -1
  244. package/dist/legal/CookieNotice.js +80 -0
  245. package/dist/legal/CookieNotice.js.map +1 -0
  246. package/dist/legal/TermsAcceptanceDialog.js +130 -0
  247. package/dist/legal/TermsAcceptanceDialog.js.map +1 -0
  248. package/dist/legal/consentStorage.js +18 -0
  249. package/dist/legal/consentStorage.js.map +1 -0
  250. package/dist/legal/useCookieConsent.js +17 -0
  251. package/dist/legal/useCookieConsent.js.map +1 -0
  252. package/dist/locales/en.js +257 -1
  253. package/dist/locales/en.js.map +1 -1
  254. package/dist/locales/es.js +257 -1
  255. package/dist/locales/es.js.map +1 -1
  256. package/dist/maps/MapView.js +3 -2
  257. package/dist/maps/MapView.js.map +1 -1
  258. package/dist/mexico/CfdiSummary.js +82 -0
  259. package/dist/mexico/CfdiSummary.js.map +1 -0
  260. package/dist/mexico/EfirmaFields.js +168 -0
  261. package/dist/mexico/EfirmaFields.js.map +1 -0
  262. package/dist/mexico/certificateReader.js +79 -0
  263. package/dist/mexico/certificateReader.js.map +1 -0
  264. package/dist/mexico/cfdiReader.js +81 -0
  265. package/dist/mexico/cfdiReader.js.map +1 -0
  266. package/dist/mexico/derReader.js +81 -0
  267. package/dist/mexico/derReader.js.map +1 -0
  268. package/dist/mexico/efirmaKey.js +51 -0
  269. package/dist/mexico/efirmaKey.js.map +1 -0
  270. package/dist/mexico/mexicoIdentifiers.js +91 -0
  271. package/dist/mexico/mexicoIdentifiers.js.map +1 -0
  272. package/dist/mexico/mexicoRules.js +21 -0
  273. package/dist/mexico/mexicoRules.js.map +1 -0
  274. package/dist/mexico.js +34 -0
  275. package/dist/mexico.js.map +1 -0
  276. package/dist/pwa/InstallAppSetting.js +3 -2
  277. package/dist/pwa/InstallAppSetting.js.map +1 -1
  278. package/dist/pwa/InstallInstructionsDialog.js +3 -2
  279. package/dist/pwa/InstallInstructionsDialog.js.map +1 -1
  280. package/dist/pwa/InstallPromptBanner.js +3 -2
  281. package/dist/pwa/InstallPromptBanner.js.map +1 -1
  282. package/dist/react-hook-form.js +43 -17
  283. package/dist/react-hook-form.js.map +1 -1
  284. package/dist/rich-text.js +19 -0
  285. package/dist/rich-text.js.map +1 -0
  286. package/dist/richText/FormRichTextField.js +12 -0
  287. package/dist/richText/FormRichTextField.js.map +1 -0
  288. package/dist/richText/RichTextEditor.js +111 -0
  289. package/dist/richText/RichTextEditor.js.map +1 -0
  290. package/dist/richText/RichTextLinkPopover.js +57 -0
  291. package/dist/richText/RichTextLinkPopover.js.map +1 -0
  292. package/dist/richText/RichTextToolbar.js +189 -0
  293. package/dist/richText/RichTextToolbar.js.map +1 -0
  294. package/dist/richText/RichTextView.js +27 -0
  295. package/dist/richText/RichTextView.js.map +1 -0
  296. package/dist/richText/richTextContentSx.js +42 -0
  297. package/dist/richText/richTextContentSx.js.map +1 -0
  298. package/dist/richText/richTextExtensions.js +44 -0
  299. package/dist/richText/richTextExtensions.js.map +1 -0
  300. package/dist/richText/richTextRules.js +46 -0
  301. package/dist/richText/richTextRules.js.map +1 -0
  302. package/dist/security/ActivityLog.js +3 -2
  303. package/dist/security/ActivityLog.js.map +1 -1
  304. package/dist/security/RecoveryCodesDialog.js +3 -2
  305. package/dist/security/RecoveryCodesDialog.js.map +1 -1
  306. package/dist/security/SessionsCard.js +3 -2
  307. package/dist/security/SessionsCard.js.map +1 -1
  308. package/dist/table.js +23 -2
  309. package/dist/table.js.map +1 -1
  310. package/dist/theme/components/glassComponents.js +27 -0
  311. package/dist/theme/components/glassComponents.js.map +1 -1
  312. package/dist/theme/components/minimalComponents.js +12 -0
  313. package/dist/theme/components/minimalComponents.js.map +1 -1
  314. package/dist/theme/themePieces.js +70 -4
  315. package/dist/theme/themePieces.js.map +1 -1
  316. package/dist/toolkit/ToolkitProvider.js +8 -1
  317. package/dist/toolkit/ToolkitProvider.js.map +1 -1
  318. package/dist/toolkit/browserNavigation.js +19 -4
  319. package/dist/toolkit/browserNavigation.js.map +1 -1
  320. package/dist/toolkit/combineTexts.js +32 -0
  321. package/dist/toolkit/combineTexts.js.map +1 -0
  322. package/dist/toolkit/hashNavigation.js +17 -3
  323. package/dist/toolkit/hashNavigation.js.map +1 -1
  324. package/dist/toolkit/navigationPaths.js +15 -0
  325. package/dist/toolkit/navigationPaths.js.map +1 -1
  326. package/dist/toolkit/pathIndex.js +66 -0
  327. package/dist/toolkit/pathIndex.js.map +1 -0
  328. package/dist/toolkit/toolkitSettings.js +19 -1
  329. package/dist/toolkit/toolkitSettings.js.map +1 -1
  330. package/dist/types/DataTable/AuditTrailDialog.d.ts +6 -17
  331. package/dist/types/DataTable/ColumnFilters/HeaderFilterPopover.d.ts +6 -5
  332. package/dist/types/DataTable/ColumnFilters/MultiSelectColumnFilter.d.ts +6 -9
  333. package/dist/types/DataTable/ColumnFilters/SortableFilterHeader.d.ts +6 -14
  334. package/dist/types/DataTable/EmptyState.d.ts +6 -9
  335. package/dist/types/DataTable/FilterChips.d.ts +6 -11
  336. package/dist/types/DataTable/GoToPage.d.ts +6 -9
  337. package/dist/types/DataTable/ServerTable.d.ts +16 -80
  338. package/dist/types/DataTable/ServerTableFilterDrawer.d.ts +14 -0
  339. package/dist/types/DataTable/StackedCell.d.ts +12 -0
  340. package/dist/types/DataTable/TableCardsView.d.ts +27 -0
  341. package/dist/types/DataTable/columnWidths.d.ts +21 -0
  342. package/dist/types/DataTable/columns.d.ts +111 -0
  343. package/dist/types/DataTable/filterContext.d.ts +2 -1
  344. package/dist/types/DataTable/fixedColumns.d.ts +29 -0
  345. package/dist/types/DataTable/goToPageOptions.d.ts +15 -0
  346. package/dist/types/DataTable/index.d.ts +7 -1
  347. package/dist/types/DataTable/useTableView.d.ts +22 -0
  348. package/dist/types/access/PermissionMatrix.d.ts +6 -10
  349. package/dist/types/account/AccountSecuritySection.d.ts +6 -7
  350. package/dist/types/account/DemoTotpCodeButton.d.ts +6 -5
  351. package/dist/types/account/ProfileScreen.d.ts +6 -18
  352. package/dist/types/account/SignInScreen.d.ts +6 -13
  353. package/dist/types/appShell/AccountMenu.d.ts +6 -11
  354. package/dist/types/appShell/AppLayout.d.ts +3 -40
  355. package/dist/types/appShell/AppearanceSettings.d.ts +6 -12
  356. package/dist/types/appShell/AuthLayout.d.ts +3 -11
  357. package/dist/types/appShell/BarActionButton.d.ts +6 -10
  358. package/dist/types/appShell/BarActions.d.ts +6 -15
  359. package/dist/types/appShell/BarCapsule.d.ts +6 -9
  360. package/dist/types/appShell/BarSearch.d.ts +6 -15
  361. package/dist/types/appShell/HeaderTools.d.ts +6 -16
  362. package/dist/types/appShell/MobileTabBar.d.ts +6 -13
  363. package/dist/types/appShell/SettingsMenu.d.ts +6 -10
  364. package/dist/types/appShell/SideMenu.d.ts +6 -20
  365. package/dist/types/appShell/SideMenuEntry.d.ts +6 -11
  366. package/dist/types/appShell/SubmenuActionsMenu.d.ts +6 -12
  367. package/dist/types/appShell/TabBarEditor.d.ts +6 -9
  368. package/dist/types/appShell/TopMenu.d.ts +6 -5
  369. package/dist/types/appShell/Wordmark.d.ts +6 -7
  370. package/dist/types/auth/PasswordChecklist.d.ts +6 -9
  371. package/dist/types/calendar/EventCalendar.d.ts +6 -23
  372. package/dist/types/calendar/EventDetails.d.ts +6 -10
  373. package/dist/types/date-pickers.d.ts +10 -1
  374. package/dist/types/datePickers/DateInput.d.ts +10 -23
  375. package/dist/types/datePickers/DateTimeInput.d.ts +30 -0
  376. package/dist/types/datePickers/FormDateTimeField.d.ts +7 -0
  377. package/dist/types/datePickers/FormMonthField.d.ts +7 -0
  378. package/dist/types/datePickers/FormTimeField.d.ts +7 -0
  379. package/dist/types/datePickers/MonthInput.d.ts +25 -0
  380. package/dist/types/datePickers/PickerFrame.d.ts +22 -0
  381. package/dist/types/datePickers/TimeInput.d.ts +24 -0
  382. package/dist/types/datePickers/dateTimeRules.d.ts +31 -0
  383. package/dist/types/datePickers/pickerValues.d.ts +114 -0
  384. package/dist/types/datePickers/useCurrentMinute.d.ts +5 -0
  385. package/dist/types/datePickers/usePickerField.d.ts +28 -0
  386. package/dist/types/dictionaries/dictionaries.d.ts +6 -3
  387. package/dist/types/downloads/DownloadManager.d.ts +6 -6
  388. package/dist/types/feedback/ConfirmDialog.d.ts +6 -18
  389. package/dist/types/feedback/ModalWaiting.d.ts +6 -9
  390. package/dist/types/feedback/NewBuildNotice.d.ts +6 -10
  391. package/dist/types/filepond/FileDropzone.d.ts +6 -29
  392. package/dist/types/forms/FormAttachmentsField.d.ts +7 -0
  393. package/dist/types/forms/FormCheckboxGroupField.d.ts +7 -0
  394. package/dist/types/forms/FormFileField.d.ts +7 -0
  395. package/dist/types/forms/FormFileUploadField.d.ts +7 -0
  396. package/dist/types/forms/FormImageField.d.ts +7 -0
  397. package/dist/types/forms/FormMaskedField.d.ts +7 -0
  398. package/dist/types/forms/FormProblemAlert.d.ts +6 -5
  399. package/dist/types/forms/FormRepeatingFields.d.ts +25 -0
  400. package/dist/types/forms/FormTransferListField.d.ts +7 -0
  401. package/dist/types/forms/SubmitButton.d.ts +6 -6
  402. package/dist/types/forms/auth/SignInForm.d.ts +6 -11
  403. package/dist/types/forms/fieldRules.d.ts +44 -0
  404. package/dist/types/forms/index.d.ts +11 -1
  405. package/dist/types/forms/listRules.d.ts +48 -0
  406. package/dist/types/forms/security/SecondStepForm.d.ts +6 -14
  407. package/dist/types/forms/security/TwoStepVerificationCard.d.ts +6 -21
  408. package/dist/types/forms/serverProblemFields.d.ts +13 -0
  409. package/dist/types/forms/useValidationText.d.ts +12 -0
  410. package/dist/types/forms/validation.d.ts +117 -174
  411. package/dist/types/forms/validationMessages.d.ts +54 -6
  412. package/dist/types/forms.d.ts +1 -1
  413. package/dist/types/hookForm/FormAttachmentsField.d.ts +8 -0
  414. package/dist/types/hookForm/FormCheckboxGroupField.d.ts +8 -0
  415. package/dist/types/hookForm/FormFileField.d.ts +8 -0
  416. package/dist/types/hookForm/FormFileUploadField.d.ts +8 -0
  417. package/dist/types/hookForm/FormImageField.d.ts +8 -0
  418. package/dist/types/hookForm/FormMaskedField.d.ts +9 -0
  419. package/dist/types/hookForm/FormProblemAlert.d.ts +6 -5
  420. package/dist/types/hookForm/FormRepeatingFields.d.ts +27 -0
  421. package/dist/types/hookForm/FormTransferListField.d.ts +8 -0
  422. package/dist/types/hookForm/SubmitButton.d.ts +6 -13
  423. package/dist/types/inbox/InboxLayout.d.ts +6 -17
  424. package/dist/types/inbox/MessageList.d.ts +6 -18
  425. package/dist/types/inbox/MessageView.d.ts +6 -14
  426. package/dist/types/index.d.ts +33 -4
  427. package/dist/types/inputs/CatalogInput.d.ts +10 -21
  428. package/dist/types/inputs/CheckboxGroupInput.d.ts +28 -0
  429. package/dist/types/inputs/ColorInput.d.ts +7 -16
  430. package/dist/types/inputs/FieldFrame.d.ts +6 -10
  431. package/dist/types/inputs/MaskedInput.d.ts +38 -0
  432. package/dist/types/inputs/NumberInput.d.ts +7 -20
  433. package/dist/types/inputs/RepeatingFields.d.ts +31 -0
  434. package/dist/types/inputs/SelectInput.d.ts +10 -18
  435. package/dist/types/inputs/TextInput.d.ts +3 -0
  436. package/dist/types/inputs/TransferListInput.d.ts +30 -0
  437. package/dist/types/inputs/WizardLayout.d.ts +6 -19
  438. package/dist/types/inputs/inputMasks.d.ts +52 -0
  439. package/dist/types/inputs/selectAllState.d.ts +11 -0
  440. package/dist/types/inputs/useRowKeys.d.ts +11 -0
  441. package/dist/types/kanban/KanbanBoard.d.ts +6 -25
  442. package/dist/types/legal/CookieNotice.d.ts +20 -0
  443. package/dist/types/legal/TermsAcceptanceDialog.d.ts +20 -0
  444. package/dist/types/legal/consentStorage.d.ts +16 -0
  445. package/dist/types/legal/useCookieConsent.d.ts +13 -0
  446. package/dist/types/locales/en.d.ts +256 -0
  447. package/dist/types/locales/es.d.ts +256 -0
  448. package/dist/types/maps/MapView.d.ts +6 -17
  449. package/dist/types/mexico/CfdiSummary.d.ts +12 -0
  450. package/dist/types/mexico/EfirmaFields.d.ts +28 -0
  451. package/dist/types/mexico/certificateReader.d.ts +37 -0
  452. package/dist/types/mexico/cfdiReader.d.ts +95 -0
  453. package/dist/types/mexico/derReader.d.ts +54 -0
  454. package/dist/types/mexico/efirmaKey.d.ts +26 -0
  455. package/dist/types/mexico/mexicoIdentifiers.d.ts +68 -0
  456. package/dist/types/mexico/mexicoRules.d.ts +45 -0
  457. package/dist/types/mexico.d.ts +11 -0
  458. package/dist/types/pwa/InstallAppSetting.d.ts +6 -6
  459. package/dist/types/pwa/InstallInstructionsDialog.d.ts +6 -9
  460. package/dist/types/pwa/InstallPromptBanner.d.ts +6 -11
  461. package/dist/types/react-hook-form.d.ts +11 -1
  462. package/dist/types/rich-text.d.ts +5 -0
  463. package/dist/types/richText/FormRichTextField.d.ts +7 -0
  464. package/dist/types/richText/RichTextEditor.d.ts +27 -0
  465. package/dist/types/richText/RichTextLinkPopover.d.ts +17 -0
  466. package/dist/types/richText/RichTextToolbar.d.ts +15 -0
  467. package/dist/types/richText/RichTextView.d.ts +10 -0
  468. package/dist/types/richText/richTextContentSx.d.ts +7 -0
  469. package/dist/types/richText/richTextExtensions.d.ts +15 -0
  470. package/dist/types/richText/richTextRules.d.ts +41 -0
  471. package/dist/types/security/ActivityLog.d.ts +6 -9
  472. package/dist/types/security/RecoveryCodesDialog.d.ts +6 -11
  473. package/dist/types/security/SessionsCard.d.ts +6 -11
  474. package/dist/types/table.d.ts +3 -1
  475. package/dist/types/theme/themePieces.d.ts +55 -3
  476. package/dist/types/toolkit/ToolkitProvider.d.ts +13 -1
  477. package/dist/types/toolkit/browserNavigation.d.ts +7 -3
  478. package/dist/types/toolkit/combineTexts.d.ts +6 -0
  479. package/dist/types/toolkit/hashNavigation.d.ts +4 -2
  480. package/dist/types/toolkit/navigationPaths.d.ts +35 -0
  481. package/dist/types/toolkit/pathIndex.d.ts +27 -0
  482. package/dist/types/toolkit/toolkitSettings.d.ts +7 -4
  483. package/dist/types/ui/actions/ActionsMenu.d.ts +24 -11
  484. package/dist/types/ui/actions/CopyButton.d.ts +8 -11
  485. package/dist/types/ui/actions/DownloadMenu.d.ts +6 -29
  486. package/dist/types/ui/actions/SecretField.d.ts +6 -11
  487. package/dist/types/ui/actions/SelectionActions.d.ts +6 -13
  488. package/dist/types/ui/actions/tableRowText.d.ts +6 -0
  489. package/dist/types/ui/cards/RecordCard.d.ts +40 -0
  490. package/dist/types/ui/cards/RecordCardSkeleton.d.ts +12 -0
  491. package/dist/types/ui/countdown/Countdown.d.ts +22 -0
  492. package/dist/types/ui/countdown/countdownParts.d.ts +39 -0
  493. package/dist/types/ui/countdown/useCountdown.d.ts +14 -0
  494. package/dist/types/ui/documents/PdfViewerDialog.d.ts +14 -0
  495. package/dist/types/ui/filters/DateRangeFilter.d.ts +6 -10
  496. package/dist/types/ui/filters/FilterDrawer.d.ts +23 -0
  497. package/dist/types/ui/filters/PeriodRangeSelector.d.ts +6 -13
  498. package/dist/types/ui/filters/QuickFilters.d.ts +6 -12
  499. package/dist/types/ui/filters/filterDrawerFields.d.ts +139 -0
  500. package/dist/types/ui/help/HelpButton.d.ts +11 -0
  501. package/dist/types/ui/help/HelpCarouselDialog.d.ts +27 -0
  502. package/dist/types/ui/help/useHelpCarousel.d.ts +21 -0
  503. package/dist/types/ui/index.d.ts +10 -0
  504. package/dist/types/ui/labels/IconBadge.d.ts +34 -0
  505. package/dist/types/ui/labels/MarkedText.d.ts +10 -0
  506. package/dist/types/ui/labels/Tag.d.ts +6 -12
  507. package/dist/types/ui/labels/markedTextPieces.d.ts +22 -0
  508. package/dist/types/ui/layout/CollapsibleSection.d.ts +6 -12
  509. package/dist/types/ui/layout/ContentDialog.d.ts +6 -10
  510. package/dist/types/ui/layout/DefinitionList.d.ts +6 -9
  511. package/dist/types/ui/layout/DetailHeader.d.ts +6 -10
  512. package/dist/types/ui/layout/ErrorPage.d.ts +6 -17
  513. package/dist/types/ui/layout/FullPageLoader.d.ts +6 -6
  514. package/dist/types/ui/layout/GlassPanel.d.ts +6 -8
  515. package/dist/types/ui/layout/PageHeader.d.ts +6 -10
  516. package/dist/types/ui/layout/PageHeading.d.ts +6 -11
  517. package/dist/types/ui/layout/ProfileHeader.d.ts +6 -11
  518. package/dist/types/ui/layout/ScrollableRow.d.ts +6 -13
  519. package/dist/types/ui/layout/SectionCard.d.ts +6 -8
  520. package/dist/types/ui/metrics/BarList.d.ts +6 -12
  521. package/dist/types/ui/metrics/CalendarHeatmap.d.ts +6 -19
  522. package/dist/types/ui/metrics/ChartTooltip.d.ts +6 -6
  523. package/dist/types/ui/metrics/ColumnChart.d.ts +6 -25
  524. package/dist/types/ui/metrics/LineChart.d.ts +6 -20
  525. package/dist/types/ui/metrics/MetricCard.d.ts +6 -17
  526. package/dist/types/ui/metrics/TableToggle.d.ts +6 -6
  527. package/dist/types/ui/metrics/chartParts.d.ts +15 -30
  528. package/dist/types/ui/navigation/BackButton.d.ts +6 -9
  529. package/dist/types/ui/navigation/ColorSchemeToggle.d.ts +6 -9
  530. package/dist/types/ui/navigation/FontSizeToggle.d.ts +6 -8
  531. package/dist/types/ui/navigation/LanguageToggle.d.ts +6 -8
  532. package/dist/types/ui/navigation/PageBreadcrumbs.d.ts +6 -7
  533. package/dist/types/ui/navigation/RouteTabs.d.ts +39 -0
  534. package/dist/types/ui/navigation/routeTabMatching.d.ts +27 -0
  535. package/dist/types/ui/timeline/GroupedTimeline.d.ts +6 -23
  536. package/dist/types/upload/AttachmentsInput.d.ts +72 -0
  537. package/dist/types/upload/FileChip.d.ts +18 -0
  538. package/dist/types/upload/FileDropzone.d.ts +7 -19
  539. package/dist/types/upload/FileInput.d.ts +31 -0
  540. package/dist/types/upload/FileUploadInput.d.ts +56 -0
  541. package/dist/types/upload/ImageInput.d.ts +35 -0
  542. package/dist/types/upload/TemplateDownloadButton.d.ts +27 -0
  543. package/dist/types/upload/fileAppearance.d.ts +8 -0
  544. package/dist/types/upload/fileRules.d.ts +38 -0
  545. package/dist/types/upload/transferProgress.d.ts +18 -0
  546. package/dist/types/upload/uploadMachine.d.ts +6 -2
  547. package/dist/types/upload/uploadWithProgress.d.ts +6 -2
  548. package/dist/types/upload/useFilePicker.d.ts +39 -0
  549. package/dist/ui/actions/ActionsMenu.js +109 -17
  550. package/dist/ui/actions/ActionsMenu.js.map +1 -1
  551. package/dist/ui/actions/CopyButton.js +37 -12
  552. package/dist/ui/actions/CopyButton.js.map +1 -1
  553. package/dist/ui/actions/DownloadMenu.js +3 -2
  554. package/dist/ui/actions/DownloadMenu.js.map +1 -1
  555. package/dist/ui/actions/SecretField.js +8 -3
  556. package/dist/ui/actions/SecretField.js.map +1 -1
  557. package/dist/ui/actions/SelectionActions.js +3 -2
  558. package/dist/ui/actions/SelectionActions.js.map +1 -1
  559. package/dist/ui/actions/tableRowText.js +7 -0
  560. package/dist/ui/actions/tableRowText.js.map +1 -0
  561. package/dist/ui/cards/RecordCard.js +146 -0
  562. package/dist/ui/cards/RecordCard.js.map +1 -0
  563. package/dist/ui/cards/RecordCardSkeleton.js +38 -0
  564. package/dist/ui/cards/RecordCardSkeleton.js.map +1 -0
  565. package/dist/ui/countdown/Countdown.js +39 -0
  566. package/dist/ui/countdown/Countdown.js.map +1 -0
  567. package/dist/ui/countdown/countdownParts.js +34 -0
  568. package/dist/ui/countdown/countdownParts.js.map +1 -0
  569. package/dist/ui/countdown/useCountdown.js +35 -0
  570. package/dist/ui/countdown/useCountdown.js.map +1 -0
  571. package/dist/ui/documents/PdfViewerDialog.js +82 -0
  572. package/dist/ui/documents/PdfViewerDialog.js.map +1 -0
  573. package/dist/ui/filters/DateRangeFilter.js +3 -2
  574. package/dist/ui/filters/DateRangeFilter.js.map +1 -1
  575. package/dist/ui/filters/FilterDrawer.js +212 -0
  576. package/dist/ui/filters/FilterDrawer.js.map +1 -0
  577. package/dist/ui/filters/PeriodRangeSelector.js +3 -2
  578. package/dist/ui/filters/PeriodRangeSelector.js.map +1 -1
  579. package/dist/ui/filters/QuickFilters.js +3 -2
  580. package/dist/ui/filters/QuickFilters.js.map +1 -1
  581. package/dist/ui/filters/filterDrawerFields.js +119 -0
  582. package/dist/ui/filters/filterDrawerFields.js.map +1 -0
  583. package/dist/ui/help/HelpButton.js +22 -0
  584. package/dist/ui/help/HelpButton.js.map +1 -0
  585. package/dist/ui/help/HelpCarouselDialog.js +155 -0
  586. package/dist/ui/help/HelpCarouselDialog.js.map +1 -0
  587. package/dist/ui/help/useHelpCarousel.js +25 -0
  588. package/dist/ui/help/useHelpCarousel.js.map +1 -0
  589. package/dist/ui/labels/IconBadge.js +82 -0
  590. package/dist/ui/labels/IconBadge.js.map +1 -0
  591. package/dist/ui/labels/MarkedText.js +31 -0
  592. package/dist/ui/labels/MarkedText.js.map +1 -0
  593. package/dist/ui/labels/Tag.js +3 -2
  594. package/dist/ui/labels/Tag.js.map +1 -1
  595. package/dist/ui/labels/markedTextPieces.js +64 -0
  596. package/dist/ui/labels/markedTextPieces.js.map +1 -0
  597. package/dist/ui/layout/CollapsibleSection.js +3 -2
  598. package/dist/ui/layout/CollapsibleSection.js.map +1 -1
  599. package/dist/ui/layout/ContentDialog.js +3 -2
  600. package/dist/ui/layout/ContentDialog.js.map +1 -1
  601. package/dist/ui/layout/DefinitionList.js +3 -2
  602. package/dist/ui/layout/DefinitionList.js.map +1 -1
  603. package/dist/ui/layout/DetailHeader.js +3 -2
  604. package/dist/ui/layout/DetailHeader.js.map +1 -1
  605. package/dist/ui/layout/ErrorPage.js +3 -2
  606. package/dist/ui/layout/ErrorPage.js.map +1 -1
  607. package/dist/ui/layout/FullPageLoader.js +3 -2
  608. package/dist/ui/layout/FullPageLoader.js.map +1 -1
  609. package/dist/ui/layout/GlassPanel.js +3 -2
  610. package/dist/ui/layout/GlassPanel.js.map +1 -1
  611. package/dist/ui/layout/PageHeader.js +3 -2
  612. package/dist/ui/layout/PageHeader.js.map +1 -1
  613. package/dist/ui/layout/PageHeading.js +3 -2
  614. package/dist/ui/layout/PageHeading.js.map +1 -1
  615. package/dist/ui/layout/ProfileHeader.js +3 -2
  616. package/dist/ui/layout/ProfileHeader.js.map +1 -1
  617. package/dist/ui/layout/ScrollableRow.js +3 -2
  618. package/dist/ui/layout/ScrollableRow.js.map +1 -1
  619. package/dist/ui/layout/SectionCard.js +3 -2
  620. package/dist/ui/layout/SectionCard.js.map +1 -1
  621. package/dist/ui/metrics/BarList.js +3 -2
  622. package/dist/ui/metrics/BarList.js.map +1 -1
  623. package/dist/ui/metrics/CalendarHeatmap.js +3 -2
  624. package/dist/ui/metrics/CalendarHeatmap.js.map +1 -1
  625. package/dist/ui/metrics/ChartTooltip.js +3 -2
  626. package/dist/ui/metrics/ChartTooltip.js.map +1 -1
  627. package/dist/ui/metrics/ColumnChart.js +3 -2
  628. package/dist/ui/metrics/ColumnChart.js.map +1 -1
  629. package/dist/ui/metrics/LineChart.js +3 -2
  630. package/dist/ui/metrics/LineChart.js.map +1 -1
  631. package/dist/ui/metrics/MetricCard.js +3 -2
  632. package/dist/ui/metrics/MetricCard.js.map +1 -1
  633. package/dist/ui/metrics/TableToggle.js +3 -2
  634. package/dist/ui/metrics/TableToggle.js.map +1 -1
  635. package/dist/ui/metrics/chartParts.js +7 -4
  636. package/dist/ui/metrics/chartParts.js.map +1 -1
  637. package/dist/ui/navigation/BackButton.js +7 -2
  638. package/dist/ui/navigation/BackButton.js.map +1 -1
  639. package/dist/ui/navigation/ColorSchemeToggle.js +3 -2
  640. package/dist/ui/navigation/ColorSchemeToggle.js.map +1 -1
  641. package/dist/ui/navigation/FontSizeToggle.js +3 -2
  642. package/dist/ui/navigation/FontSizeToggle.js.map +1 -1
  643. package/dist/ui/navigation/LanguageToggle.js +3 -2
  644. package/dist/ui/navigation/LanguageToggle.js.map +1 -1
  645. package/dist/ui/navigation/PageBreadcrumbs.js +3 -2
  646. package/dist/ui/navigation/PageBreadcrumbs.js.map +1 -1
  647. package/dist/ui/navigation/RouteTabs.js +79 -0
  648. package/dist/ui/navigation/RouteTabs.js.map +1 -0
  649. package/dist/ui/navigation/routeTabMatching.js +23 -0
  650. package/dist/ui/navigation/routeTabMatching.js.map +1 -0
  651. package/dist/ui/timeline/GroupedTimeline.js +3 -2
  652. package/dist/ui/timeline/GroupedTimeline.js.map +1 -1
  653. package/dist/upload/AttachmentsInput.js +130 -0
  654. package/dist/upload/AttachmentsInput.js.map +1 -0
  655. package/dist/upload/FileChip.js +28 -0
  656. package/dist/upload/FileChip.js.map +1 -0
  657. package/dist/upload/FileDropzone.js +23 -87
  658. package/dist/upload/FileDropzone.js.map +1 -1
  659. package/dist/upload/FileInput.js +115 -0
  660. package/dist/upload/FileInput.js.map +1 -0
  661. package/dist/upload/FileUploadInput.js +288 -0
  662. package/dist/upload/FileUploadInput.js.map +1 -0
  663. package/dist/upload/ImageInput.js +128 -0
  664. package/dist/upload/ImageInput.js.map +1 -0
  665. package/dist/upload/TemplateDownloadButton.js +68 -0
  666. package/dist/upload/TemplateDownloadButton.js.map +1 -0
  667. package/dist/upload/fileAppearance.js +21 -0
  668. package/dist/upload/fileAppearance.js.map +1 -0
  669. package/dist/upload/fileRules.js +27 -1
  670. package/dist/upload/fileRules.js.map +1 -1
  671. package/dist/upload/transferProgress.js +23 -0
  672. package/dist/upload/transferProgress.js.map +1 -0
  673. package/dist/upload/uploadMachine.js +8 -8
  674. package/dist/upload/uploadMachine.js.map +1 -1
  675. package/dist/upload/uploadWithProgress.js +1 -1
  676. package/dist/upload/uploadWithProgress.js.map +1 -1
  677. package/dist/upload/useFilePicker.js +101 -0
  678. package/dist/upload/useFilePicker.js.map +1 -0
  679. package/package.json +44 -1
  680. package/cli/templates/project/src/app/combineTexts.js.tpl +0 -31
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MarkedText.js","sources":["../../../src/ui/labels/MarkedText.jsx"],"sourcesContent":["// Un texto traducido con una o varias palabras pintadas distinto: «Optimiza tu negocio con <highlight>financiamiento</highlight>\n// inteligente» en UNA llave, y la pantalla dice cómo se pinta cada marca. Lo mismo que <Trans> de react-i18next, sin\n// depender de i18next.\n//\n// <MarkedText text={t('home.headline')}\n// marks={{highlight: <Box component=\"strong\" sx={{color: 'primary.main'}} />, terms: <Link href=\"/terminos\" />}} />\n//\n// Cada marca puede ser:\n// un elemento <Box component=\"strong\" />, <Link href=\"/terminos\" />: se le pone lo de adentro como hijos\n// una etiqueta 'strong', 'em': se crea con lo de adentro como hijos\n// una función (children) => <Tooltip title=\"…\"><span>{children}</span></Tooltip>\n// OJO: un componente propio va como elemento (<Resaltado />), no suelto (Resaltado): una función suelta se toma como la de\n// arriba, que recibe lo de adentro.\n//\n// NO pinta HTML: solo las marcas que se nombran en `marks`; todo lo demás (también un «<b>» que venga en un dato) sale como\n// texto (markedTextPieces.js).\n//\n// Genérico del paquete: function (regla de la casa).\nimport {Fragment, cloneElement, createElement, isValidElement} from 'react';\n\nimport {parseMarkedText} from '@/ui/labels/markedTextPieces.js';\nimport {warnUnknownProps} from '@/toolkit/unknownProps.js';\n\n/**\n * Pinta los pedazos con la marca de cada uno.\n *\n * @param {Array<object>} pieces\n * @param {Record<string, any>} marks\n * @param {string} keyPrefix\n * @returns {import('react').ReactNode[]}\n */\nfunction renderPieces(pieces, marks, keyPrefix) {\n return pieces.map((piece, index) => {\n const key = `${keyPrefix}${index}`;\n if (piece.type === 'text') {\n return <Fragment key={key}>{piece.value}</Fragment>;\n }\n const children = piece.children.length > 0 ? renderPieces(piece.children, marks, `${key}.`) : undefined;\n const mark = marks[piece.name];\n if (isValidElement(mark)) {\n return cloneElement(mark, {key}, children);\n }\n if (typeof mark === 'function') {\n return <Fragment key={key}>{mark(children)}</Fragment>;\n }\n return createElement(mark, {key}, children);\n });\n}\n\n/**\n * @param {object} props\n * @param {string} props.text el texto ya traducido, con sus marcas\n * @param {Record<string, import('react').ReactElement|string|((children: import('react').ReactNode) => import('react').ReactNode)>} props.marks\n * cómo se pinta cada marca, por su nombre: un elemento, una etiqueta ('strong') o una función que recibe lo de adentro\n */\nexport default function MarkedText({text, marks, ...unknownProps}) {\n warnUnknownProps('MarkedText', unknownProps);\n const pieces = parseMarkedText(text, Object.keys(marks ?? {}));\n return <>{renderPieces(pieces, marks ?? {}, '')}</>;\n}\n"],"names":["Fragment"],"mappings":";;;;;AA+BA,SAAS,aAAa,QAAQ,OAAO,WAAW;AAC5C,SAAO,OAAO,IAAI,CAAC,OAAO,UAAU;AAChC,UAAM,MAAM,GAAG,SAAS,GAAG,KAAK;AAChC,QAAI,MAAM,SAAS,QAAQ;AACvB,aAAO,oBAACA,YAAA,EAAoB,UAAA,MAAM,SAAZ,GAAkB;AAAA,IAC5C;AACA,UAAM,WAAW,MAAM,SAAS,SAAS,IAAI,aAAa,MAAM,UAAU,OAAO,GAAG,GAAG,GAAG,IAAI;AAC9F,UAAM,OAAO,MAAM,MAAM,IAAI;AAC7B,QAAI,eAAe,IAAI,GAAG;AACtB,aAAO,aAAa,MAAM,EAAC,IAAA,GAAM,QAAQ;AAAA,IAC7C;AACA,QAAI,OAAO,SAAS,YAAY;AAC5B,iCAAQA,YAAA,EAAoB,UAAA,KAAK,QAAQ,KAAnB,GAAqB;AAAA,IAC/C;AACA,WAAO,cAAc,MAAM,EAAC,IAAA,GAAM,QAAQ;AAAA,EAC9C,CAAC;AACL;AAQA,SAAwB,WAAW,EAAC,MAAM,OAAO,GAAG,gBAAe;AAC/D,mBAAiB,cAAc,YAAY;AAC3C,QAAM,SAAS,gBAAgB,MAAM,OAAO,KAAK,SAAS,CAAA,CAAE,CAAC;AAC7D,yCAAU,UAAA,aAAa,QAAQ,SAAS,CAAA,GAAI,EAAE,GAAE;AACpD;"}
@@ -2,10 +2,10 @@
2
2
  import { jsx } from "react/jsx-runtime";
3
3
  import Chip from "@mui/material/Chip";
4
4
  import Tooltip from "@mui/material/Tooltip";
5
- import { piecePart, usePieceProps } from "../../theme/themePieces.js";
5
+ import { piecePart, withPieceSlots, usePieceProps } from "../../theme/themePieces.js";
6
6
  const THEME_NAME = "CalcitaTag";
7
7
  const TagChip = piecePart(THEME_NAME, "Root", Chip);
8
- function Tag(props) {
8
+ function TagContent(props) {
9
9
  const { label, tooltip, color = "default", variant = "outlined", size = "small", onDelete, sx, ...chipProps } = usePieceProps(props, THEME_NAME);
10
10
  const chip = /* @__PURE__ */ jsx(
11
11
  TagChip,
@@ -25,6 +25,7 @@ function Tag(props) {
25
25
  }
26
26
  return /* @__PURE__ */ jsx(Tooltip, { title: tooltip, children: chip });
27
27
  }
28
+ const Tag = withPieceSlots(TagContent, THEME_NAME);
28
29
  export {
29
30
  Tag as default
30
31
  };
@@ -1 +1 @@
1
- {"version":3,"file":"Tag.js","sources":["../../../src/ui/labels/Tag.jsx"],"sourcesContent":["// El chip genérico: etiqueta + color + explicación, en un solo lugar.\n//\n// Para un valor que viene de un diccionario (estatus, formato, hallazgo) se usa StatusChip, que saca etiqueta, color y\n// tooltip del diccionario. Tag es para lo que no es un valor cerrado: un filtro puesto, \"total aproximado\", un conteo.\n//\n// Se cambia desde el tema del proyecto, como las piezas de MUI: components.CalcitaTag con defaultProps y\n// styleOverrides.root (el sx de la pantalla sigue ganando a todo).\n//\n// Genérico del paquete: function (regla de la casa).\nimport Chip from '@mui/material/Chip';\nimport Tooltip from '@mui/material/Tooltip';\nimport {piecePart, usePieceProps} from '@/theme/themePieces.js';\n\n// el nombre de la pieza en el tema y su parte (theme.components.CalcitaTag)\nconst THEME_NAME = 'CalcitaTag';\nconst TagChip = piecePart(THEME_NAME, 'Root', Chip);\n\n/**\n * @param {object} props\n * @param {import('react').ReactNode} props.label texto visible, ya traducido\n * @param {string} [props.tooltip] qué significa (aparece al pasar el cursor)\n * @param {string} [props.color] color del tema de MUI\n * @param {'filled'|'outlined'} [props.variant]\n * @param {'small'|'medium'} [props.size]\n * @param {() => void} [props.onDelete]\n * @param {object} [props.sx]\n */\nexport default function Tag(props) {\n // lo que el proyecto puso en su tema (components.CalcitaTag.defaultProps) y encima lo que llega aquí\n const {label, tooltip, color = 'default', variant = 'outlined', size = 'small', onDelete, sx, ...chipProps} = usePieceProps(props, THEME_NAME);\n const chip = (\n <TagChip label={label} size={size} variant={variant} color={color} onDelete={onDelete}\n ownSx={{fontWeight: 500}} sx={sx} {...chipProps} />\n );\n\n // guard clause: sin tooltip no se envuelve (un Tooltip vacío se traga el cursor sin dar nada a cambio)\n if (!tooltip) {\n return chip;\n }\n return <Tooltip title={tooltip}>{chip}</Tooltip>;\n}\n"],"names":[],"mappings":";;;;;AAcA,MAAM,aAAa;AACnB,MAAM,UAAU,UAAU,YAAY,QAAQ,IAAI;AAYlD,SAAwB,IAAI,OAAO;AAE/B,QAAM,EAAC,OAAO,SAAS,QAAQ,WAAW,UAAU,YAAY,OAAO,SAAS,UAAU,IAAI,GAAG,UAAA,IAAa,cAAc,OAAO,UAAU;AAC7I,QAAM,OACF;AAAA,IAAC;AAAA,IAAA;AAAA,MAAQ;AAAA,MAAc;AAAA,MAAY;AAAA,MAAkB;AAAA,MAAc;AAAA,MAC1D,OAAO,EAAC,YAAY,IAAA;AAAA,MAAM;AAAA,MAAS,GAAG;AAAA,IAAA;AAAA,EAAA;AAInD,MAAI,CAAC,SAAS;AACV,WAAO;AAAA,EACX;AACA,SAAO,oBAAC,SAAA,EAAQ,OAAO,SAAU,UAAA,MAAK;AAC1C;"}
1
+ {"version":3,"file":"Tag.js","sources":["../../../src/ui/labels/Tag.jsx"],"sourcesContent":["// El chip genérico: etiqueta + color + explicación, en un solo lugar.\n//\n// Para un valor que viene de un diccionario (estatus, formato, hallazgo) se usa StatusChip, que saca etiqueta, color y\n// tooltip del diccionario. Tag es para lo que no es un valor cerrado: un filtro puesto, \"total aproximado\", un conteo.\n//\n// Se cambia desde el tema del proyecto, como las piezas de MUI: components.CalcitaTag con defaultProps y\n// styleOverrides.root (el sx de la pantalla sigue ganando a todo).\n//\n// Genérico del paquete: function (regla de la casa).\nimport Chip from '@mui/material/Chip';\nimport Tooltip from '@mui/material/Tooltip';\nimport {piecePart, usePieceProps, withPieceSlots} from '@/theme/themePieces.js';\n\n// el nombre de la pieza en el tema y su parte (theme.components.CalcitaTag)\nconst THEME_NAME = 'CalcitaTag';\nconst TagChip = piecePart(THEME_NAME, 'Root', Chip);\n\n/**\n * @param {object} props\n * @param {import('react').ReactNode} props.label texto visible, ya traducido\n * @param {string} [props.tooltip] qué significa (aparece al pasar el cursor)\n * @param {string} [props.color] color del tema de MUI\n * @param {'filled'|'outlined'} [props.variant]\n * @param {'small'|'medium'} [props.size]\n * @param {() => void} [props.onDelete]\n * @param {object} [props.sx]\n */\nfunction TagContent(props) {\n // lo que el proyecto puso en su tema (components.CalcitaTag.defaultProps) y encima lo que llega aquí\n const {label, tooltip, color = 'default', variant = 'outlined', size = 'small', onDelete, sx, ...chipProps} = usePieceProps(props, THEME_NAME);\n const chip = (\n <TagChip label={label} size={size} variant={variant} color={color} onDelete={onDelete}\n ownSx={{fontWeight: 500}} sx={sx} {...chipProps} />\n );\n\n // guard clause: sin tooltip no se envuelve (un Tooltip vacío se traga el cursor sin dar nada a cambio)\n if (!tooltip) {\n return chip;\n }\n return <Tooltip title={tooltip}>{chip}</Tooltip>;\n}\n\n// lo que se exporta: la pieza con slots y slotProps para cambiar sus partes (themePieces.js)\nconst Tag = withPieceSlots(TagContent, THEME_NAME);\nexport default Tag;\n"],"names":[],"mappings":";;;;;AAcA,MAAM,aAAa;AACnB,MAAM,UAAU,UAAU,YAAY,QAAQ,IAAI;AAYlD,SAAS,WAAW,OAAO;AAEvB,QAAM,EAAC,OAAO,SAAS,QAAQ,WAAW,UAAU,YAAY,OAAO,SAAS,UAAU,IAAI,GAAG,UAAA,IAAa,cAAc,OAAO,UAAU;AAC7I,QAAM,OACF;AAAA,IAAC;AAAA,IAAA;AAAA,MAAQ;AAAA,MAAc;AAAA,MAAY;AAAA,MAAkB;AAAA,MAAc;AAAA,MAC1D,OAAO,EAAC,YAAY,IAAA;AAAA,MAAM;AAAA,MAAS,GAAG;AAAA,IAAA;AAAA,EAAA;AAInD,MAAI,CAAC,SAAS;AACV,WAAO;AAAA,EACX;AACA,SAAO,oBAAC,SAAA,EAAQ,OAAO,SAAU,UAAA,MAAK;AAC1C;AAGA,MAAM,MAAM,eAAe,YAAY,UAAU;"}
@@ -0,0 +1,64 @@
1
+ const MARK_PATTERN = /<(\/?)([A-Za-z][\w-]*)\s*(\/?)>/g;
2
+ function parseMarkedText(text, allowedNames) {
3
+ const allowed = new Set(allowedNames);
4
+ const root = { children: [] };
5
+ const open = [{ node: root, name: null, rawStart: 0, raw: "" }];
6
+ let lastIndex = 0;
7
+ const pushText = (parent, value) => {
8
+ if (!value) {
9
+ return;
10
+ }
11
+ const previous = parent.children.at(-1);
12
+ if (previous?.type === "text") {
13
+ previous.value += value;
14
+ return;
15
+ }
16
+ parent.children.push({ type: "text", value });
17
+ };
18
+ for (const match of String(text ?? "").matchAll(MARK_PATTERN)) {
19
+ const [raw, closing, name, selfClosing] = match;
20
+ const current = open.at(-1);
21
+ pushText(current.node, text.slice(lastIndex, match.index));
22
+ lastIndex = match.index + raw.length;
23
+ if (!allowed.has(name)) {
24
+ pushText(current.node, raw);
25
+ continue;
26
+ }
27
+ if (selfClosing && !closing) {
28
+ current.node.children.push({ type: "mark", name, children: [] });
29
+ continue;
30
+ }
31
+ if (!closing) {
32
+ const mark = { type: "mark", name, children: [] };
33
+ current.node.children.push(mark);
34
+ open.push({ node: mark, name, raw });
35
+ continue;
36
+ }
37
+ if (current.name === name) {
38
+ open.pop();
39
+ } else {
40
+ pushText(current.node, raw);
41
+ }
42
+ }
43
+ pushText(open.at(-1).node, String(text ?? "").slice(lastIndex));
44
+ while (open.length > 1) {
45
+ const unclosed = open.pop();
46
+ const parent = open.at(-1).node;
47
+ const index = parent.children.indexOf(unclosed.node);
48
+ parent.children.splice(index, 1, { type: "text", value: unclosed.raw }, ...unclosed.node.children);
49
+ mergeAdjacentTexts(parent.children);
50
+ }
51
+ return root.children;
52
+ }
53
+ function mergeAdjacentTexts(pieces) {
54
+ for (let index = pieces.length - 1; index > 0; index -= 1) {
55
+ if (pieces[index].type === "text" && pieces[index - 1].type === "text") {
56
+ pieces[index - 1].value += pieces[index].value;
57
+ pieces.splice(index, 1);
58
+ }
59
+ }
60
+ }
61
+ export {
62
+ parseMarkedText
63
+ };
64
+ //# sourceMappingURL=markedTextPieces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markedTextPieces.js","sources":["../../../src/ui/labels/markedTextPieces.js"],"sourcesContent":["// Lee un texto traducido con marcas («Optimiza tu negocio con <highlight>financiamiento</highlight> inteligente») y lo\n// parte en pedazos: texto suelto y marcas con lo que llevan adentro. Quien traduce ve la frase completa en una sola llave\n// (antes había que partirla en tres: headlineBefore, headlineHighlight, headlineAfter).\n//\n// NO es HTML ni lo pinta como HTML: solo se reconocen las marcas que la pantalla nombra (`allowedNames`), cada una se cambia\n// por un componente de React y todo lo demás sale como texto. Un «<b>» que venga en un dato (el nombre de una persona) se\n// queda tal cual, letra por letra.\n//\n// <nombre>…</nombre> una marca con texto adentro (pueden ir unas dentro de otras)\n// <nombre/> una marca sola (un ícono, un salto de línea)\n//\n// Funciones puras, no renderizan: function (regla de la casa).\n\nconst MARK_PATTERN = /<(\\/?)([A-Za-z][\\w-]*)\\s*(\\/?)>/g;\n\n/**\n * @typedef {{type: 'text', value: string} | {type: 'mark', name: string, children: MarkedTextPiece[]}} MarkedTextPiece\n */\n\n/**\n * Los pedazos de un texto con marcas.\n *\n * Una marca que abre y no cierra (o cierra sin abrir) sale como texto: así un error de quien traduce se ve en pantalla en\n * lugar de comerse el resto de la frase.\n *\n * @param {string} text el texto ya traducido\n * @param {string[]} allowedNames las marcas que la pantalla sabe pintar\n * @returns {MarkedTextPiece[]}\n */\nexport function parseMarkedText(text, allowedNames) {\n const allowed = new Set(allowedNames);\n const root = {children: []};\n // las marcas abiertas, de afuera hacia adentro, con el lugar donde empezó cada una (para regresarla a texto si no cierra)\n const open = [{node: root, name: null, rawStart: 0, raw: ''}];\n let lastIndex = 0;\n\n const pushText = (parent, value) => {\n if (!value) {\n return;\n }\n const previous = parent.children.at(-1);\n if (previous?.type === 'text') {\n previous.value += value;\n return;\n }\n parent.children.push({type: 'text', value});\n };\n\n for (const match of String(text ?? '').matchAll(MARK_PATTERN)) {\n const [raw, closing, name, selfClosing] = match;\n const current = open.at(-1);\n pushText(current.node, text.slice(lastIndex, match.index));\n lastIndex = match.index + raw.length;\n\n if (!allowed.has(name)) {\n pushText(current.node, raw);\n continue;\n }\n if (selfClosing && !closing) {\n current.node.children.push({type: 'mark', name, children: []});\n continue;\n }\n if (!closing) {\n const mark = {type: 'mark', name, children: []};\n current.node.children.push(mark);\n open.push({node: mark, name, raw});\n continue;\n }\n // cierra: tiene que ser la última que se abrió; si no, sale como texto\n if (current.name === name) {\n open.pop();\n } else {\n pushText(current.node, raw);\n }\n }\n pushText(open.at(-1).node, String(text ?? '').slice(lastIndex));\n\n // las que quedaron abiertas se regresan a texto: su etiqueta de apertura y lo que llevaban adentro\n while (open.length > 1) {\n const unclosed = open.pop();\n const parent = open.at(-1).node;\n const index = parent.children.indexOf(unclosed.node);\n parent.children.splice(index, 1, {type: 'text', value: unclosed.raw}, ...unclosed.node.children);\n mergeAdjacentTexts(parent.children);\n }\n return root.children;\n}\n\n/** Junta textos seguidos (quedan así al regresar a texto una marca sin cerrar). */\nfunction mergeAdjacentTexts(pieces) {\n for (let index = pieces.length - 1; index > 0; index -= 1) {\n if (pieces[index].type === 'text' && pieces[index - 1].type === 'text') {\n pieces[index - 1].value += pieces[index].value;\n pieces.splice(index, 1);\n }\n }\n}\n"],"names":[],"mappings":"AAaA,MAAM,eAAe;AAgBd,SAAS,gBAAgB,MAAM,cAAc;AAChD,QAAM,UAAU,IAAI,IAAI,YAAY;AACpC,QAAM,OAAO,EAAC,UAAU,GAAE;AAE1B,QAAM,OAAO,CAAC,EAAC,MAAM,MAAM,MAAM,MAAM,UAAU,GAAG,KAAK,GAAE,CAAC;AAC5D,MAAI,YAAY;AAEhB,QAAM,WAAW,CAAC,QAAQ,UAAU;AAChC,QAAI,CAAC,OAAO;AACR;AAAA,IACJ;AACA,UAAM,WAAW,OAAO,SAAS,GAAG,EAAE;AACtC,QAAI,UAAU,SAAS,QAAQ;AAC3B,eAAS,SAAS;AAClB;AAAA,IACJ;AACA,WAAO,SAAS,KAAK,EAAC,MAAM,QAAQ,MAAK,CAAC;AAAA,EAC9C;AAEA,aAAW,SAAS,OAAO,QAAQ,EAAE,EAAE,SAAS,YAAY,GAAG;AAC3D,UAAM,CAAC,KAAK,SAAS,MAAM,WAAW,IAAI;AAC1C,UAAM,UAAU,KAAK,GAAG,EAAE;AAC1B,aAAS,QAAQ,MAAM,KAAK,MAAM,WAAW,MAAM,KAAK,CAAC;AACzD,gBAAY,MAAM,QAAQ,IAAI;AAE9B,QAAI,CAAC,QAAQ,IAAI,IAAI,GAAG;AACpB,eAAS,QAAQ,MAAM,GAAG;AAC1B;AAAA,IACJ;AACA,QAAI,eAAe,CAAC,SAAS;AACzB,cAAQ,KAAK,SAAS,KAAK,EAAC,MAAM,QAAQ,MAAM,UAAU,CAAA,EAAE,CAAC;AAC7D;AAAA,IACJ;AACA,QAAI,CAAC,SAAS;AACV,YAAM,OAAO,EAAC,MAAM,QAAQ,MAAM,UAAU,GAAE;AAC9C,cAAQ,KAAK,SAAS,KAAK,IAAI;AAC/B,WAAK,KAAK,EAAC,MAAM,MAAM,MAAM,IAAG,CAAC;AACjC;AAAA,IACJ;AAEA,QAAI,QAAQ,SAAS,MAAM;AACvB,WAAK,IAAG;AAAA,IACZ,OAAO;AACH,eAAS,QAAQ,MAAM,GAAG;AAAA,IAC9B;AAAA,EACJ;AACA,WAAS,KAAK,GAAG,EAAE,EAAE,MAAM,OAAO,QAAQ,EAAE,EAAE,MAAM,SAAS,CAAC;AAG9D,SAAO,KAAK,SAAS,GAAG;AACpB,UAAM,WAAW,KAAK,IAAG;AACzB,UAAM,SAAS,KAAK,GAAG,EAAE,EAAE;AAC3B,UAAM,QAAQ,OAAO,SAAS,QAAQ,SAAS,IAAI;AACnD,WAAO,SAAS,OAAO,OAAO,GAAG,EAAC,MAAM,QAAQ,OAAO,SAAS,IAAG,GAAG,GAAG,SAAS,KAAK,QAAQ;AAC/F,uBAAmB,OAAO,QAAQ;AAAA,EACtC;AACA,SAAO,KAAK;AAChB;AAGA,SAAS,mBAAmB,QAAQ;AAChC,WAAS,QAAQ,OAAO,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG;AACvD,QAAI,OAAO,KAAK,EAAE,SAAS,UAAU,OAAO,QAAQ,CAAC,EAAE,SAAS,QAAQ;AACpE,aAAO,QAAQ,CAAC,EAAE,SAAS,OAAO,KAAK,EAAE;AACzC,aAAO,OAAO,OAAO,CAAC;AAAA,IAC1B;AAAA,EACJ;AACJ;"}
@@ -7,7 +7,7 @@ import AccordionSummary from "@mui/material/AccordionSummary";
7
7
  import Box from "@mui/material/Box";
8
8
  import Typography from "@mui/material/Typography";
9
9
  import ExpandMoreIcon from "@mui/icons-material/ExpandMore";
10
- import { piecePart, usePieceProps } from "../../theme/themePieces.js";
10
+ import { piecePart, withPieceSlots, usePieceProps } from "../../theme/themePieces.js";
11
11
  import { warnUnknownProps } from "../../toolkit/unknownProps.js";
12
12
  const THEME_NAME = "CalcitaCollapsibleSection";
13
13
  const CollapsibleRoot = piecePart(THEME_NAME, "Root", Box);
@@ -31,7 +31,7 @@ const HEADER_SX = {
31
31
  "&:hover": { bgcolor: "action.hover" },
32
32
  "& .MuiAccordionSummary-content": { my: 0.75, minWidth: 0 }
33
33
  };
34
- function CollapsibleSection(props) {
34
+ function CollapsibleSectionContent(props) {
35
35
  const { collapsedTitle, expandedTitle, hint = "", defaultExpanded = false, onExpandedChange, children, ...unknownProps } = usePieceProps(props, THEME_NAME);
36
36
  warnUnknownProps(THEME_NAME, unknownProps);
37
37
  const [isExpanded, setIsExpanded] = useState(defaultExpanded);
@@ -58,6 +58,7 @@ function CollapsibleSection(props) {
58
58
  }
59
59
  ) });
60
60
  }
61
+ const CollapsibleSection = withPieceSlots(CollapsibleSectionContent, THEME_NAME);
61
62
  export {
62
63
  CollapsibleSection as default
63
64
  };
@@ -1 +1 @@
1
- {"version":3,"file":"CollapsibleSection.js","sources":["../../../src/ui/layout/CollapsibleSection.jsx"],"sourcesContent":["// Sección que se pliega: un encabezado que se toca y, debajo, el contenido, que se abre y se cierra.\n//\n// Para qué: en una página de detalle las cifras quedan a la vista y lo demás se guarda aquí; quien quiere más, lo abre.\n//\n// El encabezado se ve como lo que es, un botón a todo lo ancho: recuadro, la flecha ADELANTE del texto y otro fondo al pasar\n// el cursor. Su texto dice lo que va a pasar al tocarlo («Ver el detalle…» plegada, «Ocultar el detalle…» abierta) y,\n// plegada, un renglón más chico dice qué hay adentro: así nadie tiene que abrirla para saber si ahí está lo que busca.\n// No dice «dé clic»: en el teléfono no hay clic, y un tooltip tampoco se ve ahí.\n//\n// El contenido va sin fondo ni borde propios: adentro van tarjetas (SectionCard) y un recuadro alrededor se vería como\n// tarjeta dentro de tarjeta.\n//\n// OJO: el acordeón de MUI se quita el margen de arriba cuando está abierto y es el primero de su tipo entre sus hermanos.\n// Dentro de un Stack, que separa a sus hijos con margen, eso hacía brincar el encabezado 16 px al abrir y al cerrar. Por eso\n// va envuelto en una caja: el margen del Stack cae en la caja y el encabezado se queda quieto.\n//\n// Se cambia desde el tema del proyecto, como las piezas de MUI: components.CalcitaCollapsibleSection con defaultProps y\n// styleOverrides de sus partes: root, accordion, summary, titleArea, collapsedTitle, expandedTitle, details.\n//\n// Genérico del paquete: function (regla de la casa). No sabe de negocio: sus textos llegan ya traducidos.\nimport {useState} from 'react';\nimport Accordion from '@mui/material/Accordion';\nimport AccordionDetails from '@mui/material/AccordionDetails';\nimport AccordionSummary from '@mui/material/AccordionSummary';\nimport Box from '@mui/material/Box';\nimport Typography from '@mui/material/Typography';\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\nimport {piecePart, usePieceProps} from '@/theme/themePieces.js';\nimport {warnUnknownProps} from '@/toolkit/unknownProps.js';\n\n// el nombre de la pieza en el tema y sus partes (theme.components.CalcitaCollapsibleSection)\nconst THEME_NAME = 'CalcitaCollapsibleSection';\nconst CollapsibleRoot = piecePart(THEME_NAME, 'Root', Box);\nconst CollapsibleAccordion = piecePart(THEME_NAME, 'Accordion', Accordion);\nconst CollapsibleSummary = piecePart(THEME_NAME, 'Summary', AccordionSummary);\nconst CollapsibleTitleArea = piecePart(THEME_NAME, 'TitleArea', Box);\nconst CollapsibleCollapsedTitle = piecePart(THEME_NAME, 'CollapsedTitle', Typography);\nconst CollapsibleExpandedTitle = piecePart(THEME_NAME, 'ExpandedTitle', Typography);\nconst CollapsibleDetails = piecePart(THEME_NAME, 'Details', AccordionDetails);\n\n// el mismo radio de las tarjetas (theme/components/surfaces.js): el encabezado se lee como una pieza más de la página\nconst CARD_BORDER_RADIUS_PIXELS = 10;\n\nconst HEADER_SX = {\n // la flecha adelante del texto: al final del renglón quedaba lejos de lo que se lee y pasaba inadvertida\n flexDirection: 'row-reverse', gap: 1, px: 1.5, minHeight: 44,\n border: 1, borderColor: 'divider', borderRadius: `${CARD_BORDER_RADIUS_PIXELS}px`, bgcolor: 'background.paper',\n '&:hover': {bgcolor: 'action.hover'},\n '& .MuiAccordionSummary-content': {my: 0.75, minWidth: 0},\n};\n\n/**\n * @param {object} props\n * @param {string} props.collapsedTitle lo que dice plegada, ya traducido («Ver el detalle de la validación»)\n * @param {string} props.expandedTitle lo que dice abierta («Ocultar el detalle de la validación»)\n * @param {string} [props.hint] plegada, qué hay adentro («Incluye resumen, motivos de rechazo y descargas.»)\n * @param {boolean} [props.defaultExpanded] si empieza abierta; por omisión empieza plegada\n * @param {(isExpanded: boolean) => void} [props.onExpandedChange] la persona la abrió o la plegó (por ejemplo, para pedir lo de\n * adentro hasta que se abre)\n * @param {import('react').ReactNode} props.children\n */\nexport default function CollapsibleSection(props) {\n // lo que el proyecto puso en su tema (components.CalcitaCollapsibleSection.defaultProps) y encima lo que llega aquí\n const {collapsedTitle, expandedTitle, hint = '', defaultExpanded = false, onExpandedChange, children, ...unknownProps} = usePieceProps(props, THEME_NAME);\n warnUnknownProps(THEME_NAME, unknownProps);\n const [isExpanded, setIsExpanded] = useState(defaultExpanded);\n const changeExpanded = (nextIsExpanded) => {\n setIsExpanded(nextIsExpanded);\n onExpandedChange?.(nextIsExpanded);\n };\n\n return (\n <CollapsibleRoot ownSx={{minWidth: 0}}>\n <CollapsibleAccordion expanded={isExpanded} onChange={(changeEvent, nextIsExpanded) => changeExpanded(nextIsExpanded)}\n disableGutters elevation={0} square ownSx={{bgcolor: 'transparent', '&::before': {display: 'none'}}}>\n {/* NOTA: el acordeón ya envuelve este renglón en un encabezado (h3); los textos van como span para no anidar dos */}\n <CollapsibleSummary expandIcon={<ExpandMoreIcon color=\"primary\" />} ownSx={HEADER_SX}>\n <CollapsibleTitleArea ownSx={{minWidth: 0}}>\n <CollapsibleCollapsedTitle variant=\"subtitle2\" component=\"span\" color=\"primary\" ownSx={{display: 'block'}}>\n {isExpanded ? expandedTitle : collapsedTitle}\n </CollapsibleCollapsedTitle>\n {!isExpanded && hint && (\n <CollapsibleExpandedTitle variant=\"caption\" component=\"span\" color=\"text.secondary\" ownSx={{display: 'block'}}>{hint}</CollapsibleExpandedTitle>\n )}\n </CollapsibleTitleArea>\n </CollapsibleSummary>\n <CollapsibleDetails ownSx={{p: 0, pt: 2}}>{children}</CollapsibleDetails>\n </CollapsibleAccordion>\n </CollapsibleRoot>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;;AA+BA,MAAM,aAAa;AACnB,MAAM,kBAAkB,UAAU,YAAY,QAAQ,GAAG;AACzD,MAAM,uBAAuB,UAAU,YAAY,aAAa,SAAS;AACzE,MAAM,qBAAqB,UAAU,YAAY,WAAW,gBAAgB;AAC5E,MAAM,uBAAuB,UAAU,YAAY,aAAa,GAAG;AACnE,MAAM,4BAA4B,UAAU,YAAY,kBAAkB,UAAU;AACpF,MAAM,2BAA2B,UAAU,YAAY,iBAAiB,UAAU;AAClF,MAAM,qBAAqB,UAAU,YAAY,WAAW,gBAAgB;AAG5E,MAAM,4BAA4B;AAElC,MAAM,YAAY;AAAA;AAAA,EAEd,eAAe;AAAA,EAAe,KAAK;AAAA,EAAG,IAAI;AAAA,EAAK,WAAW;AAAA,EAC1D,QAAQ;AAAA,EAAG,aAAa;AAAA,EAAW,cAAc,GAAG,yBAAyB;AAAA,EAAM,SAAS;AAAA,EAC5F,WAAW,EAAC,SAAS,eAAA;AAAA,EACrB,kCAAkC,EAAC,IAAI,MAAM,UAAU,EAAA;AAC3D;AAYA,SAAwB,mBAAmB,OAAO;AAE9C,QAAM,EAAC,gBAAgB,eAAe,OAAO,IAAI,kBAAkB,OAAO,kBAAkB,UAAU,GAAG,aAAA,IAAgB,cAAc,OAAO,UAAU;AACxJ,mBAAiB,YAAY,YAAY;AACzC,QAAM,CAAC,YAAY,aAAa,IAAI,SAAS,eAAe;AAC5D,QAAM,iBAAiB,CAAC,mBAAmB;AACvC,kBAAc,cAAc;AAC5B,uBAAmB,cAAc;AAAA,EACrC;AAEA,6BACK,iBAAA,EAAgB,OAAO,EAAC,UAAU,KAC/B,UAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MAAqB,UAAU;AAAA,MAAY,UAAU,CAAC,aAAa,mBAAmB,eAAe,cAAc;AAAA,MACzG,gBAAc;AAAA,MAAC,WAAW;AAAA,MAAG,QAAM;AAAA,MAAC,OAAO,EAAC,SAAS,eAAe,aAAa,EAAC,SAAS,SAAM;AAAA,MAExG,UAAA;AAAA,QAAA,oBAAC,oBAAA,EAAmB,YAAY,oBAAC,gBAAA,EAAe,OAAM,UAAA,CAAU,GAAI,OAAO,WACvE,+BAAC,sBAAA,EAAqB,OAAO,EAAC,UAAU,KACpC,UAAA;AAAA,UAAA,oBAAC,2BAAA,EAA0B,SAAQ,aAAY,WAAU,QAAO,OAAM,WAAU,OAAO,EAAC,SAAS,QAAA,GAC5F,UAAA,aAAa,gBAAgB,gBAClC;AAAA,UACC,CAAC,cAAc,QACZ,oBAAC,0BAAA,EAAyB,SAAQ,WAAU,WAAU,QAAO,OAAM,kBAAiB,OAAO,EAAC,SAAS,QAAA,GAAW,UAAA,KAAA,CAAK;AAAA,QAAA,EAAA,CAE7H,EAAA,CACJ;AAAA,QACA,oBAAC,sBAAmB,OAAO,EAAC,GAAG,GAAG,IAAI,EAAA,GAAK,SAAA,CAAS;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA,GAE5D;AAER;"}
1
+ {"version":3,"file":"CollapsibleSection.js","sources":["../../../src/ui/layout/CollapsibleSection.jsx"],"sourcesContent":["// Sección que se pliega: un encabezado que se toca y, debajo, el contenido, que se abre y se cierra.\n//\n// Para qué: en una página de detalle las cifras quedan a la vista y lo demás se guarda aquí; quien quiere más, lo abre.\n//\n// El encabezado se ve como lo que es, un botón a todo lo ancho: recuadro, la flecha ADELANTE del texto y otro fondo al pasar\n// el cursor. Su texto dice lo que va a pasar al tocarlo («Ver el detalle…» plegada, «Ocultar el detalle…» abierta) y,\n// plegada, un renglón más chico dice qué hay adentro: así nadie tiene que abrirla para saber si ahí está lo que busca.\n// No dice «dé clic»: en el teléfono no hay clic, y un tooltip tampoco se ve ahí.\n//\n// El contenido va sin fondo ni borde propios: adentro van tarjetas (SectionCard) y un recuadro alrededor se vería como\n// tarjeta dentro de tarjeta.\n//\n// OJO: el acordeón de MUI se quita el margen de arriba cuando está abierto y es el primero de su tipo entre sus hermanos.\n// Dentro de un Stack, que separa a sus hijos con margen, eso hacía brincar el encabezado 16 px al abrir y al cerrar. Por eso\n// va envuelto en una caja: el margen del Stack cae en la caja y el encabezado se queda quieto.\n//\n// Se cambia desde el tema del proyecto, como las piezas de MUI: components.CalcitaCollapsibleSection con defaultProps y\n// styleOverrides de sus partes: root, accordion, summary, titleArea, collapsedTitle, expandedTitle, details.\n//\n// Genérico del paquete: function (regla de la casa). No sabe de negocio: sus textos llegan ya traducidos.\nimport {useState} from 'react';\nimport Accordion from '@mui/material/Accordion';\nimport AccordionDetails from '@mui/material/AccordionDetails';\nimport AccordionSummary from '@mui/material/AccordionSummary';\nimport Box from '@mui/material/Box';\nimport Typography from '@mui/material/Typography';\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\nimport {piecePart, usePieceProps, withPieceSlots} from '@/theme/themePieces.js';\nimport {warnUnknownProps} from '@/toolkit/unknownProps.js';\n\n// el nombre de la pieza en el tema y sus partes (theme.components.CalcitaCollapsibleSection)\nconst THEME_NAME = 'CalcitaCollapsibleSection';\nconst CollapsibleRoot = piecePart(THEME_NAME, 'Root', Box);\nconst CollapsibleAccordion = piecePart(THEME_NAME, 'Accordion', Accordion);\nconst CollapsibleSummary = piecePart(THEME_NAME, 'Summary', AccordionSummary);\nconst CollapsibleTitleArea = piecePart(THEME_NAME, 'TitleArea', Box);\nconst CollapsibleCollapsedTitle = piecePart(THEME_NAME, 'CollapsedTitle', Typography);\nconst CollapsibleExpandedTitle = piecePart(THEME_NAME, 'ExpandedTitle', Typography);\nconst CollapsibleDetails = piecePart(THEME_NAME, 'Details', AccordionDetails);\n\n// el mismo radio de las tarjetas (theme/components/surfaces.js): el encabezado se lee como una pieza más de la página\nconst CARD_BORDER_RADIUS_PIXELS = 10;\n\nconst HEADER_SX = {\n // la flecha adelante del texto: al final del renglón quedaba lejos de lo que se lee y pasaba inadvertida\n flexDirection: 'row-reverse', gap: 1, px: 1.5, minHeight: 44,\n border: 1, borderColor: 'divider', borderRadius: `${CARD_BORDER_RADIUS_PIXELS}px`, bgcolor: 'background.paper',\n '&:hover': {bgcolor: 'action.hover'},\n '& .MuiAccordionSummary-content': {my: 0.75, minWidth: 0},\n};\n\n/**\n * @param {object} props\n * @param {string} props.collapsedTitle lo que dice plegada, ya traducido («Ver el detalle de la validación»)\n * @param {string} props.expandedTitle lo que dice abierta («Ocultar el detalle de la validación»)\n * @param {string} [props.hint] plegada, qué hay adentro («Incluye resumen, motivos de rechazo y descargas.»)\n * @param {boolean} [props.defaultExpanded] si empieza abierta; por omisión empieza plegada\n * @param {(isExpanded: boolean) => void} [props.onExpandedChange] la persona la abrió o la plegó (por ejemplo, para pedir lo de\n * adentro hasta que se abre)\n * @param {import('react').ReactNode} props.children\n */\nfunction CollapsibleSectionContent(props) {\n // lo que el proyecto puso en su tema (components.CalcitaCollapsibleSection.defaultProps) y encima lo que llega aquí\n const {collapsedTitle, expandedTitle, hint = '', defaultExpanded = false, onExpandedChange, children, ...unknownProps} = usePieceProps(props, THEME_NAME);\n warnUnknownProps(THEME_NAME, unknownProps);\n const [isExpanded, setIsExpanded] = useState(defaultExpanded);\n const changeExpanded = (nextIsExpanded) => {\n setIsExpanded(nextIsExpanded);\n onExpandedChange?.(nextIsExpanded);\n };\n\n return (\n <CollapsibleRoot ownSx={{minWidth: 0}}>\n <CollapsibleAccordion expanded={isExpanded} onChange={(changeEvent, nextIsExpanded) => changeExpanded(nextIsExpanded)}\n disableGutters elevation={0} square ownSx={{bgcolor: 'transparent', '&::before': {display: 'none'}}}>\n {/* NOTA: el acordeón ya envuelve este renglón en un encabezado (h3); los textos van como span para no anidar dos */}\n <CollapsibleSummary expandIcon={<ExpandMoreIcon color=\"primary\" />} ownSx={HEADER_SX}>\n <CollapsibleTitleArea ownSx={{minWidth: 0}}>\n <CollapsibleCollapsedTitle variant=\"subtitle2\" component=\"span\" color=\"primary\" ownSx={{display: 'block'}}>\n {isExpanded ? expandedTitle : collapsedTitle}\n </CollapsibleCollapsedTitle>\n {!isExpanded && hint && (\n <CollapsibleExpandedTitle variant=\"caption\" component=\"span\" color=\"text.secondary\" ownSx={{display: 'block'}}>{hint}</CollapsibleExpandedTitle>\n )}\n </CollapsibleTitleArea>\n </CollapsibleSummary>\n <CollapsibleDetails ownSx={{p: 0, pt: 2}}>{children}</CollapsibleDetails>\n </CollapsibleAccordion>\n </CollapsibleRoot>\n );\n}\n\n// lo que se exporta: la pieza con slots y slotProps para cambiar sus partes (themePieces.js)\nconst CollapsibleSection = withPieceSlots(CollapsibleSectionContent, THEME_NAME);\nexport default CollapsibleSection;\n"],"names":[],"mappings":";;;;;;;;;;;AA+BA,MAAM,aAAa;AACnB,MAAM,kBAAkB,UAAU,YAAY,QAAQ,GAAG;AACzD,MAAM,uBAAuB,UAAU,YAAY,aAAa,SAAS;AACzE,MAAM,qBAAqB,UAAU,YAAY,WAAW,gBAAgB;AAC5E,MAAM,uBAAuB,UAAU,YAAY,aAAa,GAAG;AACnE,MAAM,4BAA4B,UAAU,YAAY,kBAAkB,UAAU;AACpF,MAAM,2BAA2B,UAAU,YAAY,iBAAiB,UAAU;AAClF,MAAM,qBAAqB,UAAU,YAAY,WAAW,gBAAgB;AAG5E,MAAM,4BAA4B;AAElC,MAAM,YAAY;AAAA;AAAA,EAEd,eAAe;AAAA,EAAe,KAAK;AAAA,EAAG,IAAI;AAAA,EAAK,WAAW;AAAA,EAC1D,QAAQ;AAAA,EAAG,aAAa;AAAA,EAAW,cAAc,GAAG,yBAAyB;AAAA,EAAM,SAAS;AAAA,EAC5F,WAAW,EAAC,SAAS,eAAA;AAAA,EACrB,kCAAkC,EAAC,IAAI,MAAM,UAAU,EAAA;AAC3D;AAYA,SAAS,0BAA0B,OAAO;AAEtC,QAAM,EAAC,gBAAgB,eAAe,OAAO,IAAI,kBAAkB,OAAO,kBAAkB,UAAU,GAAG,aAAA,IAAgB,cAAc,OAAO,UAAU;AACxJ,mBAAiB,YAAY,YAAY;AACzC,QAAM,CAAC,YAAY,aAAa,IAAI,SAAS,eAAe;AAC5D,QAAM,iBAAiB,CAAC,mBAAmB;AACvC,kBAAc,cAAc;AAC5B,uBAAmB,cAAc;AAAA,EACrC;AAEA,6BACK,iBAAA,EAAgB,OAAO,EAAC,UAAU,KAC/B,UAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MAAqB,UAAU;AAAA,MAAY,UAAU,CAAC,aAAa,mBAAmB,eAAe,cAAc;AAAA,MACzG,gBAAc;AAAA,MAAC,WAAW;AAAA,MAAG,QAAM;AAAA,MAAC,OAAO,EAAC,SAAS,eAAe,aAAa,EAAC,SAAS,SAAM;AAAA,MAExG,UAAA;AAAA,QAAA,oBAAC,oBAAA,EAAmB,YAAY,oBAAC,gBAAA,EAAe,OAAM,UAAA,CAAU,GAAI,OAAO,WACvE,+BAAC,sBAAA,EAAqB,OAAO,EAAC,UAAU,KACpC,UAAA;AAAA,UAAA,oBAAC,2BAAA,EAA0B,SAAQ,aAAY,WAAU,QAAO,OAAM,WAAU,OAAO,EAAC,SAAS,QAAA,GAC5F,UAAA,aAAa,gBAAgB,gBAClC;AAAA,UACC,CAAC,cAAc,QACZ,oBAAC,0BAAA,EAAyB,SAAQ,WAAU,WAAU,QAAO,OAAM,kBAAiB,OAAO,EAAC,SAAS,QAAA,GAAW,UAAA,KAAA,CAAK;AAAA,QAAA,EAAA,CAE7H,EAAA,CACJ;AAAA,QACA,oBAAC,sBAAmB,OAAO,EAAC,GAAG,GAAG,IAAI,EAAA,GAAK,SAAA,CAAS;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA,GAE5D;AAER;AAGA,MAAM,qBAAqB,eAAe,2BAA2B,UAAU;"}
@@ -9,7 +9,7 @@ import Slide from "@mui/material/Slide";
9
9
  import Typography from "@mui/material/Typography";
10
10
  import CloseIcon from "@mui/icons-material/Close";
11
11
  import { APP_BAR_HEIGHT } from "./appBarHeight.js";
12
- import { piecePart, usePieceProps } from "../../theme/themePieces.js";
12
+ import { piecePart, withPieceSlots, usePieceProps } from "../../theme/themePieces.js";
13
13
  import { warnUnknownProps } from "../../toolkit/unknownProps.js";
14
14
  const THEME_NAME = "CalcitaContentDialog";
15
15
  const DialogHeader = piecePart(THEME_NAME, "Header", Box);
@@ -56,7 +56,7 @@ function sheetSxOf(theme) {
56
56
  function SlideUp(props) {
57
57
  return /* @__PURE__ */ jsx(Slide, { direction: "up", ...props });
58
58
  }
59
- function ContentDialog(props) {
59
+ function ContentDialogContent(props) {
60
60
  const { open, onClose, title, children, texts, ...unknownProps } = usePieceProps(props, THEME_NAME);
61
61
  warnUnknownProps(THEME_NAME, unknownProps);
62
62
  const { t } = useToolkitTranslation("common", texts);
@@ -100,6 +100,7 @@ function ContentDialog(props) {
100
100
  }
101
101
  );
102
102
  }
103
+ const ContentDialog = withPieceSlots(ContentDialogContent, THEME_NAME);
103
104
  export {
104
105
  ContentDialog as default
105
106
  };
@@ -1 +1 @@
1
- {"version":3,"file":"ContentDialog.js","sources":["../../../src/ui/layout/ContentDialog.jsx"],"sourcesContent":["// Diálogo de contenido: la «hoja de lectura» (la «page sheet» de Apple) para una vista grande que se lee, como un historial\n// con su tabla. Las confirmaciones y los formularios cortos siguen en su recuadro al centro (ConfirmDialog): esto es para\n// leer, no para contestar una pregunta.\n//\n// Cómo se ve, como en el iPad y en la Mac: una hoja SÓLIDA (para leer no va vidrio) con esquinas redondas, que sube desde\n// abajo; en escritorio centrada, de un ancho que se lee cómodo (SHEET_MAX_WIDTH_PIXELS) y debajo de la barra de arriba, que se\n// queda a la vista (atenuada) para no perder dónde se está; en el teléfono, separada de las orillas y casi de alto completo.\n// Antes ocupaba la pantalla de orilla a orilla: un rectángulo gris plano con renglones larguísimos (lo reportaron).\n//\n// Cómo se arma: un encabezado que no se mueve (el título y la X para cerrar) y un cuerpo que se desliza si no cabe.\n//\n// OJO: el alto de la barra superior no es fijo (con un aviso adentro mide más): se usa el que publica el layout\n// (APP_BAR_HEIGHT), no un número.\n//\n// Solo abre una vista: se cierra con la X, con Escape o con un clic afuera, sin confirmación.\n//\n// Se cambia desde el tema del proyecto, como las piezas de MUI: components.CalcitaContentDialog con defaultProps y\n// styleOverrides de sus partes: header, title, closeButton, body.\n//\n// Genérico del paquete: function (regla de la casa). No sabe de negocio: el título y el contenido llegan ya traducidos.\nimport {useId} from 'react';\nimport {useToolkitTranslation} from '@/toolkit/useToolkitTranslation.js';\nimport Box from '@mui/material/Box';\nimport Dialog from '@mui/material/Dialog';\nimport IconButton from '@mui/material/IconButton';\nimport Slide from '@mui/material/Slide';\nimport Typography from '@mui/material/Typography';\nimport CloseIcon from '@mui/icons-material/Close';\n\nimport {APP_BAR_HEIGHT} from '@/ui/layout/appBarHeight.js';\nimport {piecePart, usePieceProps} from '@/theme/themePieces.js';\nimport {warnUnknownProps} from '@/toolkit/unknownProps.js';\n\n// el nombre de la pieza en el tema y sus partes (theme.components.CalcitaContentDialog)\nconst THEME_NAME = 'CalcitaContentDialog';\nconst DialogHeader = piecePart(THEME_NAME, 'Header', Box);\nconst DialogTitle = piecePart(THEME_NAME, 'Title', Typography);\nconst DialogCloseButton = piecePart(THEME_NAME, 'CloseButton', IconButton);\nconst DialogBody = piecePart(THEME_NAME, 'Body', Box);\n\n// la hoja: lo ancho máximo en escritorio (un texto de 16 px se lee cómodo y cabe una tabla), su separación de las orillas y\n// la de su encabezado\nconst SHEET_MAX_WIDTH_PIXELS = 880;\nconst SHEET_GAP_PIXELS = 8;\nconst SHEET_PHONE_TOP_PIXELS = 24;\nconst SHEET_RADIUS_PIXELS = 20;\n\n/**\n * La hoja: fija a la ventana y centrada. Va como diálogo fullScreen (así el vidrio del tema la deja sólida y el fondo de\n * atrás no se desenfoca: la barra se sigue leyendo), con su tamaño y sus esquinas propios.\n * OJO: el alto del fullScreen de MUI es 100 %, que con top y bottom se saldría por abajo: va 'auto'.\n *\n * @param {object} theme\n * @returns {object}\n */\nfunction sheetSxOf(theme) {\n const palette = (theme.vars ?? theme).palette;\n return {\n position: 'fixed',\n m: 0,\n height: 'auto',\n maxHeight: 'none',\n borderRadius: `${SHEET_RADIUS_PIXELS}px`,\n // el que se desliza es el cuerpo, no la hoja: así el encabezado se queda quieto\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n backgroundColor: palette.background.paper,\n backgroundImage: 'none',\n boxShadow: `0 0 0 1px ${palette.divider}, 0 24px 64px rgba(0, 0, 0, 0.28)`,\n // en oscuro, un poco más clara que lo de atrás: lo que va al frente se aclara (HIG «Dark Mode»)\n ...theme.applyStyles('dark', {backgroundColor: `color-mix(in srgb, ${palette.background.paper}, white 6%)`}),\n // escritorio: centrada, debajo de la barra\n top: `calc(${APP_BAR_HEIGHT} + ${SHEET_GAP_PIXELS}px)`,\n bottom: SHEET_GAP_PIXELS,\n left: 0,\n right: 0,\n mx: 'auto',\n width: `min(${SHEET_MAX_WIDTH_PIXELS}px, calc(100% - ${SHEET_GAP_PIXELS * 4}px))`,\n maxWidth: 'none',\n // teléfono: separada de las orillas y casi de alto completo (la barra está abajo o es de MUI arriba: la hoja la tapa)\n [theme.breakpoints.down('md')]: {\n top: `calc(env(safe-area-inset-top) + ${SHEET_PHONE_TOP_PIXELS}px)`,\n bottom: `calc(env(safe-area-inset-bottom) + ${SHEET_GAP_PIXELS}px)`,\n width: `calc(100% - ${SHEET_GAP_PIXELS * 2}px)`,\n },\n };\n}\n\n/**\n * La animación de la hoja: entra desde abajo y sale por donde entró.\n *\n * @param {object} props lo que MUI le pasa a la animación de un diálogo (si está abierto, su contenido, sus tiempos)\n */\nfunction SlideUp(props) {\n return <Slide direction=\"up\" {...props} />;\n}\n\n/**\n * @param {object} props\n * @param {boolean} props.open\n * @param {() => void} props.onClose\n * @param {string} props.title texto ya traducido\n * @param {import('react').ReactNode} props.children\n * @param {object} [props.texts] los textos que cambian, con la forma de `common` en los textos del paquete\n */\nexport default function ContentDialog(props) {\n // lo que el proyecto puso en su tema (components.CalcitaContentDialog.defaultProps) y encima lo que llega aquí\n const {open, onClose, title, children, texts, ...unknownProps} = usePieceProps(props, THEME_NAME);\n warnUnknownProps(THEME_NAME, unknownProps);\n const {t} = useToolkitTranslation('common', texts);\n const titleId = useId();\n\n return (\n <Dialog open={open} onClose={onClose} aria-labelledby={titleId} fullScreen\n slots={{transition: SlideUp}} slotProps={{paper: {sx: sheetSxOf}}}>\n <DialogHeader ownSx={{\n display: 'flex', alignItems: 'center', gap: 2, flexShrink: 0, minHeight: 60, pl: {xs: 2.5, md: 4}, pr: {xs: 1.5, md: 2}, py: 1,\n borderBottom: 1, borderColor: 'divider',\n }}>\n <DialogTitle id={titleId} variant=\"h6\" component=\"h2\" ownSx={{flex: 1, minWidth: 0}}>{title}</DialogTitle>\n {/* la X de Apple: en un círculo gris tenue, no suelta */}\n <DialogCloseButton onClick={onClose} aria-label={t('actions.close')} size=\"small\"\n ownSx={{bgcolor: 'action.hover', '&:hover': {bgcolor: 'action.selected'}}}>\n <CloseIcon fontSize=\"small\" />\n </DialogCloseButton>\n </DialogHeader>\n <DialogBody ownSx={{flex: 1, minHeight: 0, overflow: 'auto', px: {xs: 2.5, md: 4}, py: {xs: 2, md: 3}}}>\n {children}\n </DialogBody>\n </Dialog>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;AAkCA,MAAM,aAAa;AACnB,MAAM,eAAe,UAAU,YAAY,UAAU,GAAG;AACxD,MAAM,cAAc,UAAU,YAAY,SAAS,UAAU;AAC7D,MAAM,oBAAoB,UAAU,YAAY,eAAe,UAAU;AACzE,MAAM,aAAa,UAAU,YAAY,QAAQ,GAAG;AAIpD,MAAM,yBAAyB;AAC/B,MAAM,mBAAmB;AACzB,MAAM,yBAAyB;AAC/B,MAAM,sBAAsB;AAU5B,SAAS,UAAU,OAAO;AACtB,QAAM,WAAW,MAAM,QAAQ,OAAO;AACtC,SAAO;AAAA,IACH,UAAU;AAAA,IACV,GAAG;AAAA,IACH,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,cAAc,GAAG,mBAAmB;AAAA;AAAA,IAEpC,SAAS;AAAA,IACT,eAAe;AAAA,IACf,UAAU;AAAA,IACV,iBAAiB,QAAQ,WAAW;AAAA,IACpC,iBAAiB;AAAA,IACjB,WAAW,aAAa,QAAQ,OAAO;AAAA;AAAA,IAEvC,GAAG,MAAM,YAAY,QAAQ,EAAC,iBAAiB,sBAAsB,QAAQ,WAAW,KAAK,cAAA,CAAc;AAAA;AAAA,IAE3G,KAAK,QAAQ,cAAc,MAAM,gBAAgB;AAAA,IACjD,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,IACP,IAAI;AAAA,IACJ,OAAO,OAAO,sBAAsB,mBAAmB,mBAAmB,CAAC;AAAA,IAC3E,UAAU;AAAA;AAAA,IAEV,CAAC,MAAM,YAAY,KAAK,IAAI,CAAC,GAAG;AAAA,MAC5B,KAAK,mCAAmC,sBAAsB;AAAA,MAC9D,QAAQ,sCAAsC,gBAAgB;AAAA,MAC9D,OAAO,eAAe,mBAAmB,CAAC;AAAA,IAAA;AAAA,EAC9C;AAER;AAOA,SAAS,QAAQ,OAAO;AACpB,SAAO,oBAAC,OAAA,EAAM,WAAU,MAAM,GAAG,OAAO;AAC5C;AAUA,SAAwB,cAAc,OAAO;AAEzC,QAAM,EAAC,MAAM,SAAS,OAAO,UAAU,OAAO,GAAG,aAAA,IAAgB,cAAc,OAAO,UAAU;AAChG,mBAAiB,YAAY,YAAY;AACzC,QAAM,EAAC,EAAA,IAAK,sBAAsB,UAAU,KAAK;AACjD,QAAM,UAAU,MAAA;AAEhB,SACI;AAAA,IAAC;AAAA,IAAA;AAAA,MAAO;AAAA,MAAY;AAAA,MAAkB,mBAAiB;AAAA,MAAS,YAAU;AAAA,MAClE,OAAO,EAAC,YAAY,QAAA;AAAA,MAAU,WAAW,EAAC,OAAO,EAAC,IAAI,YAAS;AAAA,MACnE,UAAA;AAAA,QAAA,qBAAC,gBAAa,OAAO;AAAA,UACjB,SAAS;AAAA,UAAQ,YAAY;AAAA,UAAU,KAAK;AAAA,UAAG,YAAY;AAAA,UAAG,WAAW;AAAA,UAAI,IAAI,EAAC,IAAI,KAAK,IAAI,EAAA;AAAA,UAAI,IAAI,EAAC,IAAI,KAAK,IAAI,EAAA;AAAA,UAAI,IAAI;AAAA,UAC7H,cAAc;AAAA,UAAG,aAAa;AAAA,QAAA,GAE9B,UAAA;AAAA,UAAA,oBAAC,aAAA,EAAY,IAAI,SAAS,SAAQ,MAAK,WAAU,MAAK,OAAO,EAAC,MAAM,GAAG,UAAU,KAAK,UAAA,OAAM;AAAA,UAE5F;AAAA,YAAC;AAAA,YAAA;AAAA,cAAkB,SAAS;AAAA,cAAS,cAAY,EAAE,eAAe;AAAA,cAAG,MAAK;AAAA,cAC9D,OAAO,EAAC,SAAS,gBAAgB,WAAW,EAAC,SAAS,oBAAiB;AAAA,cAC/E,UAAA,oBAAC,WAAA,EAAU,UAAS,QAAA,CAAQ;AAAA,YAAA;AAAA,UAAA;AAAA,QAChC,GACJ;AAAA,QACA,oBAAC,YAAA,EAAW,OAAO,EAAC,MAAM,GAAG,WAAW,GAAG,UAAU,QAAQ,IAAI,EAAC,IAAI,KAAK,IAAI,EAAA,GAAI,IAAI,EAAC,IAAI,GAAG,IAAI,EAAA,EAAC,GAC/F,SAAA,CACL;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGZ;"}
1
+ {"version":3,"file":"ContentDialog.js","sources":["../../../src/ui/layout/ContentDialog.jsx"],"sourcesContent":["// Diálogo de contenido: la «hoja de lectura» (la «page sheet» de Apple) para una vista grande que se lee, como un historial\n// con su tabla. Las confirmaciones y los formularios cortos siguen en su recuadro al centro (ConfirmDialog): esto es para\n// leer, no para contestar una pregunta.\n//\n// Cómo se ve, como en el iPad y en la Mac: una hoja SÓLIDA (para leer no va vidrio) con esquinas redondas, que sube desde\n// abajo; en escritorio centrada, de un ancho que se lee cómodo (SHEET_MAX_WIDTH_PIXELS) y debajo de la barra de arriba, que se\n// queda a la vista (atenuada) para no perder dónde se está; en el teléfono, separada de las orillas y casi de alto completo.\n// Antes ocupaba la pantalla de orilla a orilla: un rectángulo gris plano con renglones larguísimos (lo reportaron).\n//\n// Cómo se arma: un encabezado que no se mueve (el título y la X para cerrar) y un cuerpo que se desliza si no cabe.\n//\n// OJO: el alto de la barra superior no es fijo (con un aviso adentro mide más): se usa el que publica el layout\n// (APP_BAR_HEIGHT), no un número.\n//\n// Solo abre una vista: se cierra con la X, con Escape o con un clic afuera, sin confirmación.\n//\n// Se cambia desde el tema del proyecto, como las piezas de MUI: components.CalcitaContentDialog con defaultProps y\n// styleOverrides de sus partes: header, title, closeButton, body.\n//\n// Genérico del paquete: function (regla de la casa). No sabe de negocio: el título y el contenido llegan ya traducidos.\nimport {useId} from 'react';\nimport {useToolkitTranslation} from '@/toolkit/useToolkitTranslation.js';\nimport Box from '@mui/material/Box';\nimport Dialog from '@mui/material/Dialog';\nimport IconButton from '@mui/material/IconButton';\nimport Slide from '@mui/material/Slide';\nimport Typography from '@mui/material/Typography';\nimport CloseIcon from '@mui/icons-material/Close';\n\nimport {APP_BAR_HEIGHT} from '@/ui/layout/appBarHeight.js';\nimport {piecePart, usePieceProps, withPieceSlots} from '@/theme/themePieces.js';\nimport {warnUnknownProps} from '@/toolkit/unknownProps.js';\n\n// el nombre de la pieza en el tema y sus partes (theme.components.CalcitaContentDialog)\nconst THEME_NAME = 'CalcitaContentDialog';\nconst DialogHeader = piecePart(THEME_NAME, 'Header', Box);\nconst DialogTitle = piecePart(THEME_NAME, 'Title', Typography);\nconst DialogCloseButton = piecePart(THEME_NAME, 'CloseButton', IconButton);\nconst DialogBody = piecePart(THEME_NAME, 'Body', Box);\n\n// la hoja: lo ancho máximo en escritorio (un texto de 16 px se lee cómodo y cabe una tabla), su separación de las orillas y\n// la de su encabezado\nconst SHEET_MAX_WIDTH_PIXELS = 880;\nconst SHEET_GAP_PIXELS = 8;\nconst SHEET_PHONE_TOP_PIXELS = 24;\nconst SHEET_RADIUS_PIXELS = 20;\n\n/**\n * La hoja: fija a la ventana y centrada. Va como diálogo fullScreen (así el vidrio del tema la deja sólida y el fondo de\n * atrás no se desenfoca: la barra se sigue leyendo), con su tamaño y sus esquinas propios.\n * OJO: el alto del fullScreen de MUI es 100 %, que con top y bottom se saldría por abajo: va 'auto'.\n *\n * @param {object} theme\n * @returns {object}\n */\nfunction sheetSxOf(theme) {\n const palette = (theme.vars ?? theme).palette;\n return {\n position: 'fixed',\n m: 0,\n height: 'auto',\n maxHeight: 'none',\n borderRadius: `${SHEET_RADIUS_PIXELS}px`,\n // el que se desliza es el cuerpo, no la hoja: así el encabezado se queda quieto\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n backgroundColor: palette.background.paper,\n backgroundImage: 'none',\n boxShadow: `0 0 0 1px ${palette.divider}, 0 24px 64px rgba(0, 0, 0, 0.28)`,\n // en oscuro, un poco más clara que lo de atrás: lo que va al frente se aclara (HIG «Dark Mode»)\n ...theme.applyStyles('dark', {backgroundColor: `color-mix(in srgb, ${palette.background.paper}, white 6%)`}),\n // escritorio: centrada, debajo de la barra\n top: `calc(${APP_BAR_HEIGHT} + ${SHEET_GAP_PIXELS}px)`,\n bottom: SHEET_GAP_PIXELS,\n left: 0,\n right: 0,\n mx: 'auto',\n width: `min(${SHEET_MAX_WIDTH_PIXELS}px, calc(100% - ${SHEET_GAP_PIXELS * 4}px))`,\n maxWidth: 'none',\n // teléfono: separada de las orillas y casi de alto completo (la barra está abajo o es de MUI arriba: la hoja la tapa)\n [theme.breakpoints.down('md')]: {\n top: `calc(env(safe-area-inset-top) + ${SHEET_PHONE_TOP_PIXELS}px)`,\n bottom: `calc(env(safe-area-inset-bottom) + ${SHEET_GAP_PIXELS}px)`,\n width: `calc(100% - ${SHEET_GAP_PIXELS * 2}px)`,\n },\n };\n}\n\n/**\n * La animación de la hoja: entra desde abajo y sale por donde entró.\n *\n * @param {object} props lo que MUI le pasa a la animación de un diálogo (si está abierto, su contenido, sus tiempos)\n */\nfunction SlideUp(props) {\n return <Slide direction=\"up\" {...props} />;\n}\n\n/**\n * @param {object} props\n * @param {boolean} props.open\n * @param {() => void} props.onClose\n * @param {string} props.title texto ya traducido\n * @param {import('react').ReactNode} props.children\n * @param {object} [props.texts] los textos que cambian, con la forma de `common` en los textos del paquete\n */\nfunction ContentDialogContent(props) {\n // lo que el proyecto puso en su tema (components.CalcitaContentDialog.defaultProps) y encima lo que llega aquí\n const {open, onClose, title, children, texts, ...unknownProps} = usePieceProps(props, THEME_NAME);\n warnUnknownProps(THEME_NAME, unknownProps);\n const {t} = useToolkitTranslation('common', texts);\n const titleId = useId();\n\n return (\n <Dialog open={open} onClose={onClose} aria-labelledby={titleId} fullScreen\n slots={{transition: SlideUp}} slotProps={{paper: {sx: sheetSxOf}}}>\n <DialogHeader ownSx={{\n display: 'flex', alignItems: 'center', gap: 2, flexShrink: 0, minHeight: 60, pl: {xs: 2.5, md: 4}, pr: {xs: 1.5, md: 2}, py: 1,\n borderBottom: 1, borderColor: 'divider',\n }}>\n <DialogTitle id={titleId} variant=\"h6\" component=\"h2\" ownSx={{flex: 1, minWidth: 0}}>{title}</DialogTitle>\n {/* la X de Apple: en un círculo gris tenue, no suelta */}\n <DialogCloseButton onClick={onClose} aria-label={t('actions.close')} size=\"small\"\n ownSx={{bgcolor: 'action.hover', '&:hover': {bgcolor: 'action.selected'}}}>\n <CloseIcon fontSize=\"small\" />\n </DialogCloseButton>\n </DialogHeader>\n <DialogBody ownSx={{flex: 1, minHeight: 0, overflow: 'auto', px: {xs: 2.5, md: 4}, py: {xs: 2, md: 3}}}>\n {children}\n </DialogBody>\n </Dialog>\n );\n}\n\n// lo que se exporta: la pieza con slots y slotProps para cambiar sus partes (themePieces.js)\nconst ContentDialog = withPieceSlots(ContentDialogContent, THEME_NAME);\nexport default ContentDialog;\n"],"names":[],"mappings":";;;;;;;;;;;;;AAkCA,MAAM,aAAa;AACnB,MAAM,eAAe,UAAU,YAAY,UAAU,GAAG;AACxD,MAAM,cAAc,UAAU,YAAY,SAAS,UAAU;AAC7D,MAAM,oBAAoB,UAAU,YAAY,eAAe,UAAU;AACzE,MAAM,aAAa,UAAU,YAAY,QAAQ,GAAG;AAIpD,MAAM,yBAAyB;AAC/B,MAAM,mBAAmB;AACzB,MAAM,yBAAyB;AAC/B,MAAM,sBAAsB;AAU5B,SAAS,UAAU,OAAO;AACtB,QAAM,WAAW,MAAM,QAAQ,OAAO;AACtC,SAAO;AAAA,IACH,UAAU;AAAA,IACV,GAAG;AAAA,IACH,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,cAAc,GAAG,mBAAmB;AAAA;AAAA,IAEpC,SAAS;AAAA,IACT,eAAe;AAAA,IACf,UAAU;AAAA,IACV,iBAAiB,QAAQ,WAAW;AAAA,IACpC,iBAAiB;AAAA,IACjB,WAAW,aAAa,QAAQ,OAAO;AAAA;AAAA,IAEvC,GAAG,MAAM,YAAY,QAAQ,EAAC,iBAAiB,sBAAsB,QAAQ,WAAW,KAAK,cAAA,CAAc;AAAA;AAAA,IAE3G,KAAK,QAAQ,cAAc,MAAM,gBAAgB;AAAA,IACjD,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,IACP,IAAI;AAAA,IACJ,OAAO,OAAO,sBAAsB,mBAAmB,mBAAmB,CAAC;AAAA,IAC3E,UAAU;AAAA;AAAA,IAEV,CAAC,MAAM,YAAY,KAAK,IAAI,CAAC,GAAG;AAAA,MAC5B,KAAK,mCAAmC,sBAAsB;AAAA,MAC9D,QAAQ,sCAAsC,gBAAgB;AAAA,MAC9D,OAAO,eAAe,mBAAmB,CAAC;AAAA,IAAA;AAAA,EAC9C;AAER;AAOA,SAAS,QAAQ,OAAO;AACpB,SAAO,oBAAC,OAAA,EAAM,WAAU,MAAM,GAAG,OAAO;AAC5C;AAUA,SAAS,qBAAqB,OAAO;AAEjC,QAAM,EAAC,MAAM,SAAS,OAAO,UAAU,OAAO,GAAG,aAAA,IAAgB,cAAc,OAAO,UAAU;AAChG,mBAAiB,YAAY,YAAY;AACzC,QAAM,EAAC,EAAA,IAAK,sBAAsB,UAAU,KAAK;AACjD,QAAM,UAAU,MAAA;AAEhB,SACI;AAAA,IAAC;AAAA,IAAA;AAAA,MAAO;AAAA,MAAY;AAAA,MAAkB,mBAAiB;AAAA,MAAS,YAAU;AAAA,MAClE,OAAO,EAAC,YAAY,QAAA;AAAA,MAAU,WAAW,EAAC,OAAO,EAAC,IAAI,YAAS;AAAA,MACnE,UAAA;AAAA,QAAA,qBAAC,gBAAa,OAAO;AAAA,UACjB,SAAS;AAAA,UAAQ,YAAY;AAAA,UAAU,KAAK;AAAA,UAAG,YAAY;AAAA,UAAG,WAAW;AAAA,UAAI,IAAI,EAAC,IAAI,KAAK,IAAI,EAAA;AAAA,UAAI,IAAI,EAAC,IAAI,KAAK,IAAI,EAAA;AAAA,UAAI,IAAI;AAAA,UAC7H,cAAc;AAAA,UAAG,aAAa;AAAA,QAAA,GAE9B,UAAA;AAAA,UAAA,oBAAC,aAAA,EAAY,IAAI,SAAS,SAAQ,MAAK,WAAU,MAAK,OAAO,EAAC,MAAM,GAAG,UAAU,KAAK,UAAA,OAAM;AAAA,UAE5F;AAAA,YAAC;AAAA,YAAA;AAAA,cAAkB,SAAS;AAAA,cAAS,cAAY,EAAE,eAAe;AAAA,cAAG,MAAK;AAAA,cAC9D,OAAO,EAAC,SAAS,gBAAgB,WAAW,EAAC,SAAS,oBAAiB;AAAA,cAC/E,UAAA,oBAAC,WAAA,EAAU,UAAS,QAAA,CAAQ;AAAA,YAAA;AAAA,UAAA;AAAA,QAChC,GACJ;AAAA,QACA,oBAAC,YAAA,EAAW,OAAO,EAAC,MAAM,GAAG,WAAW,GAAG,UAAU,QAAQ,IAAI,EAAC,IAAI,KAAK,IAAI,EAAA,GAAI,IAAI,EAAC,IAAI,GAAG,IAAI,EAAA,EAAC,GAC/F,SAAA,CACL;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGZ;AAGA,MAAM,gBAAgB,eAAe,sBAAsB,UAAU;"}
@@ -2,14 +2,14 @@
2
2
  import { jsx, jsxs } from "react/jsx-runtime";
3
3
  import Box from "@mui/material/Box";
4
4
  import Typography from "@mui/material/Typography";
5
- import { piecePart, usePieceProps } from "../../theme/themePieces.js";
5
+ import { piecePart, withPieceSlots, usePieceProps } from "../../theme/themePieces.js";
6
6
  import { warnUnknownProps } from "../../toolkit/unknownProps.js";
7
7
  const THEME_NAME = "CalcitaDefinitionList";
8
8
  const DefinitionRoot = piecePart(THEME_NAME, "Root", Box);
9
9
  const DefinitionEntry = piecePart(THEME_NAME, "Entry", Box);
10
10
  const DefinitionLabel = piecePart(THEME_NAME, "Label", Typography);
11
11
  const DefinitionValue = piecePart(THEME_NAME, "Value", Typography);
12
- function DefinitionList(props) {
12
+ function DefinitionListContent(props) {
13
13
  const { entries, layout = "columns", labelWidth = 150, ...unknownProps } = usePieceProps(props, THEME_NAME);
14
14
  warnUnknownProps(THEME_NAME, unknownProps);
15
15
  const isStacked = layout === "stacked";
@@ -33,6 +33,7 @@ function DefinitionList(props) {
33
33
  /* @__PURE__ */ jsx(DefinitionValue, { component: "dd", variant: "body2", ownSx: { m: 0, overflowWrap: "anywhere" }, children: value })
34
34
  ] }, label)) });
35
35
  }
36
+ const DefinitionList = withPieceSlots(DefinitionListContent, THEME_NAME);
36
37
  export {
37
38
  DefinitionList as default
38
39
  };
@@ -1 +1 @@
1
- {"version":3,"file":"DefinitionList.js","sources":["../../../src/ui/layout/DefinitionList.jsx"],"sourcesContent":["// Lista de dato → valor (<dl>).\n//\n// Dos acomodos:\n// columns (por omisión) el dato en gris a la izquierda y su valor a la derecha; para tarjetas anchas\n// stacked el dato chico arriba de su valor; para columnas angostas, donde un nombre largo\n// («Codificación del archivo») se partiría en dos renglones al lado de su valor\n//\n// Se cambia desde el tema del proyecto, como las piezas de MUI: components.CalcitaDefinitionList con defaultProps y\n// styleOverrides de sus partes: root, entry, label, value.\n//\n// Genérico del paquete: function (regla de la casa). Los textos llegan ya traducidos y el valor puede ser cualquier nodo (un\n// chip, un texto en monoespaciada...).\nimport Box from '@mui/material/Box';\nimport Typography from '@mui/material/Typography';\nimport {piecePart, usePieceProps} from '@/theme/themePieces.js';\nimport {warnUnknownProps} from '@/toolkit/unknownProps.js';\n\n// el nombre de la pieza en el tema y sus partes (theme.components.CalcitaDefinitionList)\nconst THEME_NAME = 'CalcitaDefinitionList';\nconst DefinitionRoot = piecePart(THEME_NAME, 'Root', Box);\nconst DefinitionEntry = piecePart(THEME_NAME, 'Entry', Box);\nconst DefinitionLabel = piecePart(THEME_NAME, 'Label', Typography);\nconst DefinitionValue = piecePart(THEME_NAME, 'Value', Typography);\n\n/**\n * @param {object} props\n * @param {Array<{label: string, value: import('react').ReactNode}>} props.entries en el orden en que se pintan; el label es la\n * llave\n * @param {'columns'|'stacked'} [props.layout]\n * @param {number} [props.labelWidth] ancho en px de la columna del dato (solo columns)\n */\nexport default function DefinitionList(props) {\n // lo que el proyecto puso en su tema (components.CalcitaDefinitionList.defaultProps) y encima lo que llega aquí\n const {entries, layout = 'columns', labelWidth = 150, ...unknownProps} = usePieceProps(props, THEME_NAME);\n warnUnknownProps(THEME_NAME, unknownProps);\n const isStacked = layout === 'stacked';\n\n return (\n <DefinitionRoot component=\"dl\" ownSx={{\n m: 0, display: 'grid',\n gridTemplateColumns: isStacked ? 'minmax(0, 1fr)' : `${labelWidth}px minmax(0, 1fr)`,\n columnGap: 2, rowGap: isStacked ? 0.25 : 1,\n }}>\n {entries.map(({label, value}, entryPosition) => (\n <DefinitionEntry key={label} ownSx={{display: 'contents'}}>\n <DefinitionLabel component=\"dt\" variant={isStacked ? 'caption' : 'body2'} color=\"text.secondary\"\n ownSx={isStacked && entryPosition > 0 ? {mt: 1.25} : undefined}>\n {label}\n </DefinitionLabel>\n <DefinitionValue component=\"dd\" variant=\"body2\" ownSx={{m: 0, overflowWrap: 'anywhere'}}>{value}</DefinitionValue>\n </DefinitionEntry>\n ))}\n </DefinitionRoot>\n );\n}\n"],"names":[],"mappings":";;;;;;AAkBA,MAAM,aAAa;AACnB,MAAM,iBAAiB,UAAU,YAAY,QAAQ,GAAG;AACxD,MAAM,kBAAkB,UAAU,YAAY,SAAS,GAAG;AAC1D,MAAM,kBAAkB,UAAU,YAAY,SAAS,UAAU;AACjE,MAAM,kBAAkB,UAAU,YAAY,SAAS,UAAU;AASjE,SAAwB,eAAe,OAAO;AAE1C,QAAM,EAAC,SAAS,SAAS,WAAW,aAAa,KAAK,GAAG,aAAA,IAAgB,cAAc,OAAO,UAAU;AACxG,mBAAiB,YAAY,YAAY;AACzC,QAAM,YAAY,WAAW;AAE7B,SACI,oBAAC,gBAAA,EAAe,WAAU,MAAK,OAAO;AAAA,IAClC,GAAG;AAAA,IAAG,SAAS;AAAA,IACf,qBAAqB,YAAY,mBAAmB,GAAG,UAAU;AAAA,IACjE,WAAW;AAAA,IAAG,QAAQ,YAAY,OAAO;AAAA,EAAA,GAExC,UAAA,QAAQ,IAAI,CAAC,EAAC,OAAO,SAAQ,uCACzB,iBAAA,EAA4B,OAAO,EAAC,SAAS,cAC1C,UAAA;AAAA,IAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QAAgB,WAAU;AAAA,QAAK,SAAS,YAAY,YAAY;AAAA,QAAS,OAAM;AAAA,QACpE,OAAO,aAAa,gBAAgB,IAAI,EAAC,IAAI,SAAQ;AAAA,QAC5D,UAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAEL,oBAAC,iBAAA,EAAgB,WAAU,MAAK,SAAQ,SAAQ,OAAO,EAAC,GAAG,GAAG,cAAc,WAAA,GAAc,UAAA,MAAA,CAAM;AAAA,EAAA,KAL9E,KAMtB,CACH,GACL;AAER;"}
1
+ {"version":3,"file":"DefinitionList.js","sources":["../../../src/ui/layout/DefinitionList.jsx"],"sourcesContent":["// Lista de dato → valor (<dl>).\n//\n// Dos acomodos:\n// columns (por omisión) el dato en gris a la izquierda y su valor a la derecha; para tarjetas anchas\n// stacked el dato chico arriba de su valor; para columnas angostas, donde un nombre largo\n// («Codificación del archivo») se partiría en dos renglones al lado de su valor\n//\n// Se cambia desde el tema del proyecto, como las piezas de MUI: components.CalcitaDefinitionList con defaultProps y\n// styleOverrides de sus partes: root, entry, label, value.\n//\n// Genérico del paquete: function (regla de la casa). Los textos llegan ya traducidos y el valor puede ser cualquier nodo (un\n// chip, un texto en monoespaciada...).\nimport Box from '@mui/material/Box';\nimport Typography from '@mui/material/Typography';\nimport {piecePart, usePieceProps, withPieceSlots} from '@/theme/themePieces.js';\nimport {warnUnknownProps} from '@/toolkit/unknownProps.js';\n\n// el nombre de la pieza en el tema y sus partes (theme.components.CalcitaDefinitionList)\nconst THEME_NAME = 'CalcitaDefinitionList';\nconst DefinitionRoot = piecePart(THEME_NAME, 'Root', Box);\nconst DefinitionEntry = piecePart(THEME_NAME, 'Entry', Box);\nconst DefinitionLabel = piecePart(THEME_NAME, 'Label', Typography);\nconst DefinitionValue = piecePart(THEME_NAME, 'Value', Typography);\n\n/**\n * @param {object} props\n * @param {Array<{label: string, value: import('react').ReactNode}>} props.entries en el orden en que se pintan; el label es la\n * llave\n * @param {'columns'|'stacked'} [props.layout]\n * @param {number} [props.labelWidth] ancho en px de la columna del dato (solo columns)\n */\nfunction DefinitionListContent(props) {\n // lo que el proyecto puso en su tema (components.CalcitaDefinitionList.defaultProps) y encima lo que llega aquí\n const {entries, layout = 'columns', labelWidth = 150, ...unknownProps} = usePieceProps(props, THEME_NAME);\n warnUnknownProps(THEME_NAME, unknownProps);\n const isStacked = layout === 'stacked';\n\n return (\n <DefinitionRoot component=\"dl\" ownSx={{\n m: 0, display: 'grid',\n gridTemplateColumns: isStacked ? 'minmax(0, 1fr)' : `${labelWidth}px minmax(0, 1fr)`,\n columnGap: 2, rowGap: isStacked ? 0.25 : 1,\n }}>\n {entries.map(({label, value}, entryPosition) => (\n <DefinitionEntry key={label} ownSx={{display: 'contents'}}>\n <DefinitionLabel component=\"dt\" variant={isStacked ? 'caption' : 'body2'} color=\"text.secondary\"\n ownSx={isStacked && entryPosition > 0 ? {mt: 1.25} : undefined}>\n {label}\n </DefinitionLabel>\n <DefinitionValue component=\"dd\" variant=\"body2\" ownSx={{m: 0, overflowWrap: 'anywhere'}}>{value}</DefinitionValue>\n </DefinitionEntry>\n ))}\n </DefinitionRoot>\n );\n}\n\n// lo que se exporta: la pieza con slots y slotProps para cambiar sus partes (themePieces.js)\nconst DefinitionList = withPieceSlots(DefinitionListContent, THEME_NAME);\nexport default DefinitionList;\n"],"names":[],"mappings":";;;;;;AAkBA,MAAM,aAAa;AACnB,MAAM,iBAAiB,UAAU,YAAY,QAAQ,GAAG;AACxD,MAAM,kBAAkB,UAAU,YAAY,SAAS,GAAG;AAC1D,MAAM,kBAAkB,UAAU,YAAY,SAAS,UAAU;AACjE,MAAM,kBAAkB,UAAU,YAAY,SAAS,UAAU;AASjE,SAAS,sBAAsB,OAAO;AAElC,QAAM,EAAC,SAAS,SAAS,WAAW,aAAa,KAAK,GAAG,aAAA,IAAgB,cAAc,OAAO,UAAU;AACxG,mBAAiB,YAAY,YAAY;AACzC,QAAM,YAAY,WAAW;AAE7B,SACI,oBAAC,gBAAA,EAAe,WAAU,MAAK,OAAO;AAAA,IAClC,GAAG;AAAA,IAAG,SAAS;AAAA,IACf,qBAAqB,YAAY,mBAAmB,GAAG,UAAU;AAAA,IACjE,WAAW;AAAA,IAAG,QAAQ,YAAY,OAAO;AAAA,EAAA,GAExC,UAAA,QAAQ,IAAI,CAAC,EAAC,OAAO,SAAQ,uCACzB,iBAAA,EAA4B,OAAO,EAAC,SAAS,cAC1C,UAAA;AAAA,IAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QAAgB,WAAU;AAAA,QAAK,SAAS,YAAY,YAAY;AAAA,QAAS,OAAM;AAAA,QACpE,OAAO,aAAa,gBAAgB,IAAI,EAAC,IAAI,SAAQ;AAAA,QAC5D,UAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAEL,oBAAC,iBAAA,EAAgB,WAAU,MAAK,SAAQ,SAAQ,OAAO,EAAC,GAAG,GAAG,cAAc,WAAA,GAAc,UAAA,MAAA,CAAM;AAAA,EAAA,KAL9E,KAMtB,CACH,GACL;AAER;AAGA,MAAM,iBAAiB,eAAe,uBAAuB,UAAU;"}
@@ -6,7 +6,7 @@ import Stack from "@mui/material/Stack";
6
6
  import Typography from "@mui/material/Typography";
7
7
  import { useRegisterPageTitle } from "../../appShell/pageTitle.js";
8
8
  import DocumentTitle from "../navigation/DocumentTitle.js";
9
- import { piecePart, usePieceProps } from "../../theme/themePieces.js";
9
+ import { piecePart, withPieceSlots, usePieceProps } from "../../theme/themePieces.js";
10
10
  import { warnUnknownProps } from "../../toolkit/unknownProps.js";
11
11
  const THEME_NAME = "CalcitaDetailHeader";
12
12
  const DetailRoot = piecePart(THEME_NAME, "Root", Box);
@@ -14,7 +14,7 @@ const DetailTitleArea = piecePart(THEME_NAME, "TitleArea", Box);
14
14
  const DetailTitle = piecePart(THEME_NAME, "Title", Typography);
15
15
  const DetailBadges = piecePart(THEME_NAME, "Badges", Stack);
16
16
  const DetailActions = piecePart(THEME_NAME, "Actions", Stack);
17
- function DetailHeader(props) {
17
+ function DetailHeaderContent(props) {
18
18
  const { title, eyebrow, badges, actions, documentTitle, ...unknownProps } = usePieceProps(props, THEME_NAME);
19
19
  warnUnknownProps(THEME_NAME, unknownProps);
20
20
  const titleRef = useRef(null);
@@ -31,6 +31,7 @@ function DetailHeader(props) {
31
31
  actions && /* @__PURE__ */ jsx(DetailActions, { direction: "row", spacing: 1, useFlexGap: true, ownSx: { flexWrap: "wrap" }, children: actions })
32
32
  ] });
33
33
  }
34
+ const DetailHeader = withPieceSlots(DetailHeaderContent, THEME_NAME);
34
35
  export {
35
36
  DetailHeader as default
36
37
  };
@@ -1 +1 @@
1
- {"version":3,"file":"DetailHeader.js","sources":["../../../src/ui/layout/DetailHeader.jsx"],"sourcesContent":["// Encabezado de una página de detalle (un solo registro: un pedido, un usuario...): eyebrow con el contexto, el título\n// que dice QUÉ registro es, sus insignias a un lado del título (estatus, intento...) y las acciones a la derecha.\n//\n// Por qué aparte de PageHeader: ese es el encabezado centrado de un listado. En un detalle lo primero que se lee es qué\n// registro se está viendo y en qué estado está; por eso el título y sus insignias van juntos, arriba a la izquierda.\n//\n// También pone el título de la pestaña (DocumentTitle) y, dentro de AppLayout, sube el título a la barra al deslizar.\n//\n// Se cambia desde el tema del proyecto, como las piezas de MUI: components.CalcitaDetailHeader con defaultProps y\n// styleOverrides de sus partes: root, titleArea, title, badges, actions.\n//\n// Genérico del paquete: function (regla de la casa). No sabe de negocio: todo llega por props, ya traducido.\nimport {useRef} from 'react';\nimport Box from '@mui/material/Box';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport {useRegisterPageTitle} from '@/appShell/pageTitle.jsx';\nimport DocumentTitle from '@/ui/navigation/DocumentTitle.jsx';\nimport {piecePart, usePieceProps} from '@/theme/themePieces.js';\nimport {warnUnknownProps} from '@/toolkit/unknownProps.js';\n\n// el nombre de la pieza en el tema y sus partes (theme.components.CalcitaDetailHeader)\nconst THEME_NAME = 'CalcitaDetailHeader';\nconst DetailRoot = piecePart(THEME_NAME, 'Root', Box);\nconst DetailTitleArea = piecePart(THEME_NAME, 'TitleArea', Box);\nconst DetailTitle = piecePart(THEME_NAME, 'Title', Typography);\nconst DetailBadges = piecePart(THEME_NAME, 'Badges', Stack);\nconst DetailActions = piecePart(THEME_NAME, 'Actions', Stack);\n\n/**\n * @param {object} props\n * @param {string} props.title texto ya traducido\n * @param {string} [props.eyebrow] contexto arriba del título (p. ej. el producto)\n * @param {import('react').ReactNode} [props.badges] insignias junto al título (chips de estatus, intento...)\n * @param {import('react').ReactNode} [props.actions] botones a la derecha\n * @param {string} [props.documentTitle] título de la pestaña si difiere del visible\n */\nexport default function DetailHeader(props) {\n // lo que el proyecto puso en su tema (components.CalcitaDetailHeader.defaultProps) y encima lo que llega aquí\n const {title, eyebrow, badges, actions, documentTitle, ...unknownProps} = usePieceProps(props, THEME_NAME);\n warnUnknownProps(THEME_NAME, unknownProps);\n const titleRef = useRef(null);\n useRegisterPageTitle(title, titleRef);\n return (\n <DetailRoot component=\"header\" ownSx={{display: 'flex', flexWrap: 'wrap', alignItems: 'flex-end', justifyContent: 'space-between', gap: 2, mb: 2.5}}>\n <DocumentTitle title={documentTitle ?? title} />\n <DetailTitleArea ownSx={{minWidth: 0}}>\n {/* el contexto se lee de un vistazo (en overline se veía\n muy chico); text.secondary y no text.disabled: se lee (WCAG no lo exime) */}\n {eyebrow && <DetailTitle variant=\"subtitle1\" color=\"text.secondary\" component=\"p\" ownSx={{fontWeight: 700}}>{eyebrow}</DetailTitle>}\n <DetailBadges direction=\"row\" spacing={1.5} useFlexGap ownSx={{alignItems: 'center', flexWrap: 'wrap'}}>\n <Typography ref={titleRef} variant=\"h5\" component=\"h1\">{title}</Typography>\n {badges}\n </DetailBadges>\n </DetailTitleArea>\n {actions && <DetailActions direction=\"row\" spacing={1} useFlexGap ownSx={{flexWrap: 'wrap'}}>{actions}</DetailActions>}\n </DetailRoot>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;AAuBA,MAAM,aAAa;AACnB,MAAM,aAAa,UAAU,YAAY,QAAQ,GAAG;AACpD,MAAM,kBAAkB,UAAU,YAAY,aAAa,GAAG;AAC9D,MAAM,cAAc,UAAU,YAAY,SAAS,UAAU;AAC7D,MAAM,eAAe,UAAU,YAAY,UAAU,KAAK;AAC1D,MAAM,gBAAgB,UAAU,YAAY,WAAW,KAAK;AAU5D,SAAwB,aAAa,OAAO;AAExC,QAAM,EAAC,OAAO,SAAS,QAAQ,SAAS,eAAe,GAAG,aAAA,IAAgB,cAAc,OAAO,UAAU;AACzG,mBAAiB,YAAY,YAAY;AACzC,QAAM,WAAW,OAAO,IAAI;AAC5B,uBAAqB,OAAO,QAAQ;AACpC,8BACK,YAAA,EAAW,WAAU,UAAS,OAAO,EAAC,SAAS,QAAQ,UAAU,QAAQ,YAAY,YAAY,gBAAgB,iBAAiB,KAAK,GAAG,IAAI,OAC3I,UAAA;AAAA,IAAA,oBAAC,eAAA,EAAc,OAAO,iBAAiB,MAAA,CAAO;AAAA,yBAC7C,iBAAA,EAAgB,OAAO,EAAC,UAAU,KAG9B,UAAA;AAAA,MAAA,WAAW,oBAAC,aAAA,EAAY,SAAQ,aAAY,OAAM,kBAAiB,WAAU,KAAI,OAAO,EAAC,YAAY,IAAA,GAAO,UAAA,SAAQ;AAAA,MACrH,qBAAC,cAAA,EAAa,WAAU,OAAM,SAAS,KAAK,YAAU,MAAC,OAAO,EAAC,YAAY,UAAU,UAAU,UAC3F,UAAA;AAAA,QAAA,oBAAC,cAAW,KAAK,UAAU,SAAQ,MAAK,WAAU,MAAM,UAAA,MAAA,CAAM;AAAA,QAC7D;AAAA,MAAA,EAAA,CACL;AAAA,IAAA,GACJ;AAAA,IACC,WAAW,oBAAC,eAAA,EAAc,WAAU,OAAM,SAAS,GAAG,YAAU,MAAC,OAAO,EAAC,UAAU,OAAA,GAAU,UAAA,QAAA,CAAQ;AAAA,EAAA,GAC1G;AAER;"}
1
+ {"version":3,"file":"DetailHeader.js","sources":["../../../src/ui/layout/DetailHeader.jsx"],"sourcesContent":["// Encabezado de una página de detalle (un solo registro: un pedido, un usuario...): eyebrow con el contexto, el título\n// que dice QUÉ registro es, sus insignias a un lado del título (estatus, intento...) y las acciones a la derecha.\n//\n// Por qué aparte de PageHeader: ese es el encabezado centrado de un listado. En un detalle lo primero que se lee es qué\n// registro se está viendo y en qué estado está; por eso el título y sus insignias van juntos, arriba a la izquierda.\n//\n// También pone el título de la pestaña (DocumentTitle) y, dentro de AppLayout, sube el título a la barra al deslizar.\n//\n// Se cambia desde el tema del proyecto, como las piezas de MUI: components.CalcitaDetailHeader con defaultProps y\n// styleOverrides de sus partes: root, titleArea, title, badges, actions.\n//\n// Genérico del paquete: function (regla de la casa). No sabe de negocio: todo llega por props, ya traducido.\nimport {useRef} from 'react';\nimport Box from '@mui/material/Box';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport {useRegisterPageTitle} from '@/appShell/pageTitle.jsx';\nimport DocumentTitle from '@/ui/navigation/DocumentTitle.jsx';\nimport {piecePart, usePieceProps, withPieceSlots} from '@/theme/themePieces.js';\nimport {warnUnknownProps} from '@/toolkit/unknownProps.js';\n\n// el nombre de la pieza en el tema y sus partes (theme.components.CalcitaDetailHeader)\nconst THEME_NAME = 'CalcitaDetailHeader';\nconst DetailRoot = piecePart(THEME_NAME, 'Root', Box);\nconst DetailTitleArea = piecePart(THEME_NAME, 'TitleArea', Box);\nconst DetailTitle = piecePart(THEME_NAME, 'Title', Typography);\nconst DetailBadges = piecePart(THEME_NAME, 'Badges', Stack);\nconst DetailActions = piecePart(THEME_NAME, 'Actions', Stack);\n\n/**\n * @param {object} props\n * @param {string} props.title texto ya traducido\n * @param {string} [props.eyebrow] contexto arriba del título (p. ej. el producto)\n * @param {import('react').ReactNode} [props.badges] insignias junto al título (chips de estatus, intento...)\n * @param {import('react').ReactNode} [props.actions] botones a la derecha\n * @param {string} [props.documentTitle] título de la pestaña si difiere del visible\n */\nfunction DetailHeaderContent(props) {\n // lo que el proyecto puso en su tema (components.CalcitaDetailHeader.defaultProps) y encima lo que llega aquí\n const {title, eyebrow, badges, actions, documentTitle, ...unknownProps} = usePieceProps(props, THEME_NAME);\n warnUnknownProps(THEME_NAME, unknownProps);\n const titleRef = useRef(null);\n useRegisterPageTitle(title, titleRef);\n return (\n <DetailRoot component=\"header\" ownSx={{display: 'flex', flexWrap: 'wrap', alignItems: 'flex-end', justifyContent: 'space-between', gap: 2, mb: 2.5}}>\n <DocumentTitle title={documentTitle ?? title} />\n <DetailTitleArea ownSx={{minWidth: 0}}>\n {/* el contexto se lee de un vistazo (en overline se veía\n muy chico); text.secondary y no text.disabled: se lee (WCAG no lo exime) */}\n {eyebrow && <DetailTitle variant=\"subtitle1\" color=\"text.secondary\" component=\"p\" ownSx={{fontWeight: 700}}>{eyebrow}</DetailTitle>}\n <DetailBadges direction=\"row\" spacing={1.5} useFlexGap ownSx={{alignItems: 'center', flexWrap: 'wrap'}}>\n <Typography ref={titleRef} variant=\"h5\" component=\"h1\">{title}</Typography>\n {badges}\n </DetailBadges>\n </DetailTitleArea>\n {actions && <DetailActions direction=\"row\" spacing={1} useFlexGap ownSx={{flexWrap: 'wrap'}}>{actions}</DetailActions>}\n </DetailRoot>\n );\n}\n\n// lo que se exporta: la pieza con slots y slotProps para cambiar sus partes (themePieces.js)\nconst DetailHeader = withPieceSlots(DetailHeaderContent, THEME_NAME);\nexport default DetailHeader;\n"],"names":[],"mappings":";;;;;;;;;;AAuBA,MAAM,aAAa;AACnB,MAAM,aAAa,UAAU,YAAY,QAAQ,GAAG;AACpD,MAAM,kBAAkB,UAAU,YAAY,aAAa,GAAG;AAC9D,MAAM,cAAc,UAAU,YAAY,SAAS,UAAU;AAC7D,MAAM,eAAe,UAAU,YAAY,UAAU,KAAK;AAC1D,MAAM,gBAAgB,UAAU,YAAY,WAAW,KAAK;AAU5D,SAAS,oBAAoB,OAAO;AAEhC,QAAM,EAAC,OAAO,SAAS,QAAQ,SAAS,eAAe,GAAG,aAAA,IAAgB,cAAc,OAAO,UAAU;AACzG,mBAAiB,YAAY,YAAY;AACzC,QAAM,WAAW,OAAO,IAAI;AAC5B,uBAAqB,OAAO,QAAQ;AACpC,8BACK,YAAA,EAAW,WAAU,UAAS,OAAO,EAAC,SAAS,QAAQ,UAAU,QAAQ,YAAY,YAAY,gBAAgB,iBAAiB,KAAK,GAAG,IAAI,OAC3I,UAAA;AAAA,IAAA,oBAAC,eAAA,EAAc,OAAO,iBAAiB,MAAA,CAAO;AAAA,yBAC7C,iBAAA,EAAgB,OAAO,EAAC,UAAU,KAG9B,UAAA;AAAA,MAAA,WAAW,oBAAC,aAAA,EAAY,SAAQ,aAAY,OAAM,kBAAiB,WAAU,KAAI,OAAO,EAAC,YAAY,IAAA,GAAO,UAAA,SAAQ;AAAA,MACrH,qBAAC,cAAA,EAAa,WAAU,OAAM,SAAS,KAAK,YAAU,MAAC,OAAO,EAAC,YAAY,UAAU,UAAU,UAC3F,UAAA;AAAA,QAAA,oBAAC,cAAW,KAAK,UAAU,SAAQ,MAAK,WAAU,MAAM,UAAA,MAAA,CAAM;AAAA,QAC7D;AAAA,MAAA,EAAA,CACL;AAAA,IAAA,GACJ;AAAA,IACC,WAAW,oBAAC,eAAA,EAAc,WAAU,OAAM,SAAS,GAAG,YAAU,MAAC,OAAO,EAAC,UAAU,OAAA,GAAU,UAAA,QAAA,CAAQ;AAAA,EAAA,GAC1G;AAER;AAGA,MAAM,eAAe,eAAe,qBAAqB,UAAU;"}
@@ -9,7 +9,7 @@ import ErrorOutlineOutlinedIcon from "@mui/icons-material/ErrorOutlineOutlined";
9
9
  import LockOutlinedIcon from "@mui/icons-material/LockOutlined";
10
10
  import SystemUpdateAltRoundedIcon from "@mui/icons-material/SystemUpdateAltRounded";
11
11
  import TravelExploreOutlinedIcon from "@mui/icons-material/TravelExploreOutlined";
12
- import { piecePart, usePieceProps } from "../../theme/themePieces.js";
12
+ import { piecePart, withPieceSlots, usePieceProps } from "../../theme/themePieces.js";
13
13
  import { warnUnknownProps } from "../../toolkit/unknownProps.js";
14
14
  const THEME_NAME = "CalcitaErrorPage";
15
15
  const ErrorRoot = piecePart(THEME_NAME, "Root", Stack);
@@ -23,7 +23,7 @@ const ERROR_PAGE_LOOK = Object.freeze({
23
23
  [ERROR_PAGE_KIND.newVersion]: { Icon: SystemUpdateAltRoundedIcon, color: "info", httpStatus: null, retryKey: "reload" }
24
24
  });
25
25
  const ICON_PIXELS = 56;
26
- function ErrorPage(props) {
26
+ function ErrorPageContent(props) {
27
27
  const {
28
28
  kind,
29
29
  title,
@@ -55,6 +55,7 @@ function ErrorPage(props) {
55
55
  look.httpStatus && /* @__PURE__ */ jsx(Typography, { variant: "caption", color: "text.disabled", children: look.httpStatus })
56
56
  ] });
57
57
  }
58
+ const ErrorPage = withPieceSlots(ErrorPageContent, THEME_NAME);
58
59
  export {
59
60
  ERROR_PAGE_KIND,
60
61
  ErrorPage as default
@@ -1 +1 @@
1
- {"version":3,"file":"ErrorPage.js","sources":["../../../src/ui/layout/ErrorPage.jsx"],"sourcesContent":["// La pantalla de un error de navegación: la página no existe (404), no tiene permiso (403) o algo falló (500). Dice en\n// palabras normales qué pasó y qué hacer, con el número chico abajo como referencia técnica, y el botón para salir de ahí.\n//\n// <ErrorPage kind={ERROR_PAGE_KIND.notFound} /> el 404 del router (ruta '*')\n// <ErrorPage kind={ERROR_PAGE_KIND.serverError} onRetry={reload} /> la pantalla tronó (errorElement del router)\n// <ErrorPage kind={ERROR_PAGE_KIND.newVersion} onRetry={reload} /> se publicó otra versión con la pestaña abierta\n//\n// Los textos salen del paquete (namespace errorPage) en el idioma activo; title y text los cambian para un caso propio, y\n// `texts` cualquier otro («Ir al inicio», «Intentar de nuevo»).\n//\n// Se extiende sin tocar el framework: botones suyos junto a los de la casa (extraActions: «Contactar a soporte») o en lugar\n// de ellos (actions), algo debajo del texto (children: el teléfono de soporte, un folio), otro ícono (icon) y el evento de\n// «Ir al inicio» (onGoHome). La de «sin permiso» de las rutas se cambia con withAccess(…, {fallback}) y la de error de ruta\n// pasándole estas mismas props a RouteErrorScreen (/react-router).\n//\n// Se cambia desde el tema del proyecto, como las piezas de MUI: components.CalcitaErrorPage con defaultProps y\n// styleOverrides de sus partes: root, actions.\n//\n// Genérico del paquete: function (regla de la casa).\nimport {useToolkitTranslation} from '@/toolkit/useToolkitTranslation.js';\nimport {useToolkitNavigation} from '@/toolkit/toolkitContext.js';\nimport Button from '@mui/material/Button';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\nimport ErrorOutlineOutlinedIcon from '@mui/icons-material/ErrorOutlineOutlined';\nimport LockOutlinedIcon from '@mui/icons-material/LockOutlined';\nimport SystemUpdateAltRoundedIcon from '@mui/icons-material/SystemUpdateAltRounded';\nimport TravelExploreOutlinedIcon from '@mui/icons-material/TravelExploreOutlined';\nimport {piecePart, usePieceProps} from '@/theme/themePieces.js';\nimport {warnUnknownProps} from '@/toolkit/unknownProps.js';\n\n// el nombre de la pieza en el tema y sus partes (theme.components.CalcitaErrorPage)\nconst THEME_NAME = 'CalcitaErrorPage';\nconst ErrorRoot = piecePart(THEME_NAME, 'Root', Stack);\nconst ErrorActions = piecePart(THEME_NAME, 'Actions', Stack);\n\n/** Los errores que tiene pantalla propia. */\nexport const ERROR_PAGE_KIND = Object.freeze({notFound: 'notFound', forbidden: 'forbidden', serverError: 'serverError', newVersion: 'newVersion'});\n\n// el ícono, el color y el código HTTP de cada uno (el código va chico: es la referencia técnica, no el mensaje)\nconst ERROR_PAGE_LOOK = Object.freeze({\n [ERROR_PAGE_KIND.notFound]: {Icon: TravelExploreOutlinedIcon, color: 'info', httpStatus: 404},\n [ERROR_PAGE_KIND.forbidden]: {Icon: LockOutlinedIcon, color: 'warning', httpStatus: 403},\n [ERROR_PAGE_KIND.serverError]: {Icon: ErrorOutlineOutlinedIcon, color: 'error', httpStatus: 500},\n // no es un error de nadie: se publicó otra versión; sin código, y el botón dice «Recargar»\n [ERROR_PAGE_KIND.newVersion]: {Icon: SystemUpdateAltRoundedIcon, color: 'info', httpStatus: null, retryKey: 'reload'},\n});\nconst ICON_PIXELS = 56;\n\n/**\n * @param {object} props\n * @param {string} props.kind uno de ERROR_PAGE_KIND\n * @param {string} [props.title] ya traducido; por omisión el del paquete\n * @param {import('react').ReactNode} [props.text] ya traducido; por omisión el del paquete\n * @param {string} [props.homePath] a dónde lleva «Ir al inicio» (por omisión '/')\n * @param {() => void} [props.onRetry] con él sale «Intentar de nuevo»\n * @param {() => void} [props.onGoHome] al picar «Ir al inicio», antes de ir (para avisar o limpiar algo)\n * @param {import('react').ReactNode} [props.extraActions] botones suyos junto a los de la casa\n * @param {import('react').ReactNode} [props.actions] botones suyos EN LUGAR de los de la casa\n * @param {import('react').ReactNode} [props.icon] otro ícono; por omisión el de cada error\n * @param {import('react').ReactNode} [props.children] algo debajo del texto (el teléfono de soporte, un folio)\n * @param {object} [props.texts] los textos que cambian, con la forma de `errorPage` en los textos del paquete:\n * {goHome: 'Volver al tablero', notFound: {title: '…'}}\n */\nexport default function ErrorPage(props) {\n // lo que el proyecto puso en su tema (components.CalcitaErrorPage.defaultProps) y encima lo que llega aquí\n const {\n kind, title, text, homePath = '/', onRetry, onGoHome, extraActions, actions, icon, children, texts,\n ...unknownProps\n} = usePieceProps(props, THEME_NAME);\n warnUnknownProps(THEME_NAME, unknownProps);\n const {t} = useToolkitTranslation('errorPage', texts);\n const {Link} = useToolkitNavigation();\n const look = ERROR_PAGE_LOOK[kind] ?? ERROR_PAGE_LOOK[ERROR_PAGE_KIND.serverError];\n\n return (\n <ErrorRoot spacing={2} ownSx={{alignItems: 'center', textAlign: 'center', py: {xs: 6, md: 10}, px: 2, maxWidth: 560, mx: 'auto'}}>\n {icon ?? <look.Icon color={look.color} sx={{fontSize: ICON_PIXELS}} />}\n <Typography variant=\"h4\" component=\"h1\">{title ?? t(`${kind}.title`)}</Typography>\n <Typography variant=\"body1\" color=\"text.secondary\">{text ?? t(`${kind}.text`)}</Typography>\n {children}\n <ErrorActions direction={{xs: 'column', sm: 'row'}} spacing={1.5} useFlexGap ownSx={{pt: 1, flexWrap: 'wrap', justifyContent: 'center'}}>\n {actions ?? (\n <>\n {onRetry && <Button variant=\"contained\" onClick={onRetry}>{t(look.retryKey ?? 'retry')}</Button>}\n <Button variant={onRetry ? 'outlined' : 'contained'} component={Link} to={homePath} onClick={onGoHome}>{t('goHome')}</Button>\n {extraActions}\n </>\n )}\n </ErrorActions>\n {look.httpStatus && <Typography variant=\"caption\" color=\"text.disabled\">{look.httpStatus}</Typography>}\n </ErrorRoot>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;AAgCA,MAAM,aAAa;AACnB,MAAM,YAAY,UAAU,YAAY,QAAQ,KAAK;AACrD,MAAM,eAAe,UAAU,YAAY,WAAW,KAAK;AAGpD,MAAM,kBAAkB,OAAO,OAAO,EAAC,UAAU,YAAY,WAAW,aAAa,aAAa,eAAe,YAAY,aAAA,CAAa;AAGjJ,MAAM,kBAAkB,OAAO,OAAO;AAAA,EAClC,CAAC,gBAAgB,QAAQ,GAAG,EAAC,MAAM,2BAA2B,OAAO,QAAQ,YAAY,IAAA;AAAA,EACzF,CAAC,gBAAgB,SAAS,GAAG,EAAC,MAAM,kBAAkB,OAAO,WAAW,YAAY,IAAA;AAAA,EACpF,CAAC,gBAAgB,WAAW,GAAG,EAAC,MAAM,0BAA0B,OAAO,SAAS,YAAY,IAAA;AAAA;AAAA,EAE5F,CAAC,gBAAgB,UAAU,GAAG,EAAC,MAAM,4BAA4B,OAAO,QAAQ,YAAY,MAAM,UAAU,SAAA;AAChH,CAAC;AACD,MAAM,cAAc;AAiBpB,SAAwB,UAAU,OAAO;AAErC,QAAM;AAAA,IACN;AAAA,IAAM;AAAA,IAAO;AAAA,IAAM,WAAW;AAAA,IAAK;AAAA,IAAS;AAAA,IAAU;AAAA,IAAc;AAAA,IAAS;AAAA,IAAM;AAAA,IAAU;AAAA,IAC7F,GAAG;AAAA,EAAA,IACH,cAAc,OAAO,UAAU;AAC/B,mBAAiB,YAAY,YAAY;AACzC,QAAM,EAAC,EAAA,IAAK,sBAAsB,aAAa,KAAK;AACpD,QAAM,EAAC,KAAA,IAAQ,qBAAA;AACf,QAAM,OAAO,gBAAgB,IAAI,KAAK,gBAAgB,gBAAgB,WAAW;AAEjF,SACI,qBAAC,aAAU,SAAS,GAAG,OAAO,EAAC,YAAY,UAAU,WAAW,UAAU,IAAI,EAAC,IAAI,GAAG,IAAI,GAAA,GAAK,IAAI,GAAG,UAAU,KAAK,IAAI,OAAA,GACpH,UAAA;AAAA,IAAA,QAAQ,oBAAC,KAAK,MAAL,EAAU,OAAO,KAAK,OAAO,IAAI,EAAC,UAAU,YAAA,EAAW,CAAG;AAAA,IACpE,oBAAC,YAAA,EAAW,SAAQ,MAAK,WAAU,MAAM,UAAA,SAAS,EAAE,GAAG,IAAI,QAAQ,EAAA,CAAE;AAAA,IACrE,oBAAC,YAAA,EAAW,SAAQ,SAAQ,OAAM,kBAAkB,UAAA,QAAQ,EAAE,GAAG,IAAI,OAAO,EAAA,CAAE;AAAA,IAC7E;AAAA,IACD,oBAAC,gBAAa,WAAW,EAAC,IAAI,UAAU,IAAI,MAAA,GAAQ,SAAS,KAAK,YAAU,MAAC,OAAO,EAAC,IAAI,GAAG,UAAU,QAAQ,gBAAgB,YACzH,UAAA,WACG,qBAAA,UAAA,EACK,UAAA;AAAA,MAAA,WAAW,oBAAC,QAAA,EAAO,SAAQ,aAAY,SAAS,SAAU,UAAA,EAAE,KAAK,YAAY,OAAO,EAAA,CAAE;AAAA,MACvF,oBAAC,QAAA,EAAO,SAAS,UAAU,aAAa,aAAa,WAAW,MAAM,IAAI,UAAU,SAAS,UAAW,UAAA,EAAE,QAAQ,GAAE;AAAA,MACnH;AAAA,IAAA,EAAA,CACL,EAAA,CAER;AAAA,IACC,KAAK,cAAc,oBAAC,YAAA,EAAW,SAAQ,WAAU,OAAM,iBAAiB,UAAA,KAAK,WAAA,CAAW;AAAA,EAAA,GAC7F;AAER;"}
1
+ {"version":3,"file":"ErrorPage.js","sources":["../../../src/ui/layout/ErrorPage.jsx"],"sourcesContent":["// La pantalla de un error de navegación: la página no existe (404), no tiene permiso (403) o algo falló (500). Dice en\n// palabras normales qué pasó y qué hacer, con el número chico abajo como referencia técnica, y el botón para salir de ahí.\n//\n// <ErrorPage kind={ERROR_PAGE_KIND.notFound} /> el 404 del router (ruta '*')\n// <ErrorPage kind={ERROR_PAGE_KIND.serverError} onRetry={reload} /> la pantalla tronó (errorElement del router)\n// <ErrorPage kind={ERROR_PAGE_KIND.newVersion} onRetry={reload} /> se publicó otra versión con la pestaña abierta\n//\n// Los textos salen del paquete (namespace errorPage) en el idioma activo; title y text los cambian para un caso propio, y\n// `texts` cualquier otro («Ir al inicio», «Intentar de nuevo»).\n//\n// Se extiende sin tocar el framework: botones suyos junto a los de la casa (extraActions: «Contactar a soporte») o en lugar\n// de ellos (actions), algo debajo del texto (children: el teléfono de soporte, un folio), otro ícono (icon) y el evento de\n// «Ir al inicio» (onGoHome). La de «sin permiso» de las rutas se cambia con withAccess(…, {fallback}) y la de error de ruta\n// pasándole estas mismas props a RouteErrorScreen (/react-router).\n//\n// Se cambia desde el tema del proyecto, como las piezas de MUI: components.CalcitaErrorPage con defaultProps y\n// styleOverrides de sus partes: root, actions.\n//\n// Genérico del paquete: function (regla de la casa).\nimport {useToolkitTranslation} from '@/toolkit/useToolkitTranslation.js';\nimport {useToolkitNavigation} from '@/toolkit/toolkitContext.js';\nimport Button from '@mui/material/Button';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\nimport ErrorOutlineOutlinedIcon from '@mui/icons-material/ErrorOutlineOutlined';\nimport LockOutlinedIcon from '@mui/icons-material/LockOutlined';\nimport SystemUpdateAltRoundedIcon from '@mui/icons-material/SystemUpdateAltRounded';\nimport TravelExploreOutlinedIcon from '@mui/icons-material/TravelExploreOutlined';\nimport {piecePart, usePieceProps, withPieceSlots} from '@/theme/themePieces.js';\nimport {warnUnknownProps} from '@/toolkit/unknownProps.js';\n\n// el nombre de la pieza en el tema y sus partes (theme.components.CalcitaErrorPage)\nconst THEME_NAME = 'CalcitaErrorPage';\nconst ErrorRoot = piecePart(THEME_NAME, 'Root', Stack);\nconst ErrorActions = piecePart(THEME_NAME, 'Actions', Stack);\n\n/** Los errores que tiene pantalla propia. */\nexport const ERROR_PAGE_KIND = Object.freeze({notFound: 'notFound', forbidden: 'forbidden', serverError: 'serverError', newVersion: 'newVersion'});\n\n// el ícono, el color y el código HTTP de cada uno (el código va chico: es la referencia técnica, no el mensaje)\nconst ERROR_PAGE_LOOK = Object.freeze({\n [ERROR_PAGE_KIND.notFound]: {Icon: TravelExploreOutlinedIcon, color: 'info', httpStatus: 404},\n [ERROR_PAGE_KIND.forbidden]: {Icon: LockOutlinedIcon, color: 'warning', httpStatus: 403},\n [ERROR_PAGE_KIND.serverError]: {Icon: ErrorOutlineOutlinedIcon, color: 'error', httpStatus: 500},\n // no es un error de nadie: se publicó otra versión; sin código, y el botón dice «Recargar»\n [ERROR_PAGE_KIND.newVersion]: {Icon: SystemUpdateAltRoundedIcon, color: 'info', httpStatus: null, retryKey: 'reload'},\n});\nconst ICON_PIXELS = 56;\n\n/**\n * @param {object} props\n * @param {string} props.kind uno de ERROR_PAGE_KIND\n * @param {string} [props.title] ya traducido; por omisión el del paquete\n * @param {import('react').ReactNode} [props.text] ya traducido; por omisión el del paquete\n * @param {string} [props.homePath] a dónde lleva «Ir al inicio» (por omisión '/')\n * @param {() => void} [props.onRetry] con él sale «Intentar de nuevo»\n * @param {() => void} [props.onGoHome] al picar «Ir al inicio», antes de ir (para avisar o limpiar algo)\n * @param {import('react').ReactNode} [props.extraActions] botones suyos junto a los de la casa\n * @param {import('react').ReactNode} [props.actions] botones suyos EN LUGAR de los de la casa\n * @param {import('react').ReactNode} [props.icon] otro ícono; por omisión el de cada error\n * @param {import('react').ReactNode} [props.children] algo debajo del texto (el teléfono de soporte, un folio)\n * @param {object} [props.texts] los textos que cambian, con la forma de `errorPage` en los textos del paquete:\n * {goHome: 'Volver al tablero', notFound: {title: '…'}}\n */\nfunction ErrorPageContent(props) {\n // lo que el proyecto puso en su tema (components.CalcitaErrorPage.defaultProps) y encima lo que llega aquí\n const {\n kind, title, text, homePath = '/', onRetry, onGoHome, extraActions, actions, icon, children, texts,\n ...unknownProps\n} = usePieceProps(props, THEME_NAME);\n warnUnknownProps(THEME_NAME, unknownProps);\n const {t} = useToolkitTranslation('errorPage', texts);\n const {Link} = useToolkitNavigation();\n const look = ERROR_PAGE_LOOK[kind] ?? ERROR_PAGE_LOOK[ERROR_PAGE_KIND.serverError];\n\n return (\n <ErrorRoot spacing={2} ownSx={{alignItems: 'center', textAlign: 'center', py: {xs: 6, md: 10}, px: 2, maxWidth: 560, mx: 'auto'}}>\n {icon ?? <look.Icon color={look.color} sx={{fontSize: ICON_PIXELS}} />}\n <Typography variant=\"h4\" component=\"h1\">{title ?? t(`${kind}.title`)}</Typography>\n <Typography variant=\"body1\" color=\"text.secondary\">{text ?? t(`${kind}.text`)}</Typography>\n {children}\n <ErrorActions direction={{xs: 'column', sm: 'row'}} spacing={1.5} useFlexGap ownSx={{pt: 1, flexWrap: 'wrap', justifyContent: 'center'}}>\n {actions ?? (\n <>\n {onRetry && <Button variant=\"contained\" onClick={onRetry}>{t(look.retryKey ?? 'retry')}</Button>}\n <Button variant={onRetry ? 'outlined' : 'contained'} component={Link} to={homePath} onClick={onGoHome}>{t('goHome')}</Button>\n {extraActions}\n </>\n )}\n </ErrorActions>\n {look.httpStatus && <Typography variant=\"caption\" color=\"text.disabled\">{look.httpStatus}</Typography>}\n </ErrorRoot>\n );\n}\n\n// lo que se exporta: la pieza con slots y slotProps para cambiar sus partes (themePieces.js)\nconst ErrorPage = withPieceSlots(ErrorPageContent, THEME_NAME);\nexport default ErrorPage;\n"],"names":[],"mappings":";;;;;;;;;;;;;AAgCA,MAAM,aAAa;AACnB,MAAM,YAAY,UAAU,YAAY,QAAQ,KAAK;AACrD,MAAM,eAAe,UAAU,YAAY,WAAW,KAAK;AAGpD,MAAM,kBAAkB,OAAO,OAAO,EAAC,UAAU,YAAY,WAAW,aAAa,aAAa,eAAe,YAAY,aAAA,CAAa;AAGjJ,MAAM,kBAAkB,OAAO,OAAO;AAAA,EAClC,CAAC,gBAAgB,QAAQ,GAAG,EAAC,MAAM,2BAA2B,OAAO,QAAQ,YAAY,IAAA;AAAA,EACzF,CAAC,gBAAgB,SAAS,GAAG,EAAC,MAAM,kBAAkB,OAAO,WAAW,YAAY,IAAA;AAAA,EACpF,CAAC,gBAAgB,WAAW,GAAG,EAAC,MAAM,0BAA0B,OAAO,SAAS,YAAY,IAAA;AAAA;AAAA,EAE5F,CAAC,gBAAgB,UAAU,GAAG,EAAC,MAAM,4BAA4B,OAAO,QAAQ,YAAY,MAAM,UAAU,SAAA;AAChH,CAAC;AACD,MAAM,cAAc;AAiBpB,SAAS,iBAAiB,OAAO;AAE7B,QAAM;AAAA,IACN;AAAA,IAAM;AAAA,IAAO;AAAA,IAAM,WAAW;AAAA,IAAK;AAAA,IAAS;AAAA,IAAU;AAAA,IAAc;AAAA,IAAS;AAAA,IAAM;AAAA,IAAU;AAAA,IAC7F,GAAG;AAAA,EAAA,IACH,cAAc,OAAO,UAAU;AAC/B,mBAAiB,YAAY,YAAY;AACzC,QAAM,EAAC,EAAA,IAAK,sBAAsB,aAAa,KAAK;AACpD,QAAM,EAAC,KAAA,IAAQ,qBAAA;AACf,QAAM,OAAO,gBAAgB,IAAI,KAAK,gBAAgB,gBAAgB,WAAW;AAEjF,SACI,qBAAC,aAAU,SAAS,GAAG,OAAO,EAAC,YAAY,UAAU,WAAW,UAAU,IAAI,EAAC,IAAI,GAAG,IAAI,GAAA,GAAK,IAAI,GAAG,UAAU,KAAK,IAAI,OAAA,GACpH,UAAA;AAAA,IAAA,QAAQ,oBAAC,KAAK,MAAL,EAAU,OAAO,KAAK,OAAO,IAAI,EAAC,UAAU,YAAA,EAAW,CAAG;AAAA,IACpE,oBAAC,YAAA,EAAW,SAAQ,MAAK,WAAU,MAAM,UAAA,SAAS,EAAE,GAAG,IAAI,QAAQ,EAAA,CAAE;AAAA,IACrE,oBAAC,YAAA,EAAW,SAAQ,SAAQ,OAAM,kBAAkB,UAAA,QAAQ,EAAE,GAAG,IAAI,OAAO,EAAA,CAAE;AAAA,IAC7E;AAAA,IACD,oBAAC,gBAAa,WAAW,EAAC,IAAI,UAAU,IAAI,MAAA,GAAQ,SAAS,KAAK,YAAU,MAAC,OAAO,EAAC,IAAI,GAAG,UAAU,QAAQ,gBAAgB,YACzH,UAAA,WACG,qBAAA,UAAA,EACK,UAAA;AAAA,MAAA,WAAW,oBAAC,QAAA,EAAO,SAAQ,aAAY,SAAS,SAAU,UAAA,EAAE,KAAK,YAAY,OAAO,EAAA,CAAE;AAAA,MACvF,oBAAC,QAAA,EAAO,SAAS,UAAU,aAAa,aAAa,WAAW,MAAM,IAAI,UAAU,SAAS,UAAW,UAAA,EAAE,QAAQ,GAAE;AAAA,MACnH;AAAA,IAAA,EAAA,CACL,EAAA,CAER;AAAA,IACC,KAAK,cAAc,oBAAC,YAAA,EAAW,SAAQ,WAAU,OAAM,iBAAiB,UAAA,KAAK,WAAA,CAAW;AAAA,EAAA,GAC7F;AAER;AAGA,MAAM,YAAY,eAAe,kBAAkB,UAAU;"}
@@ -3,15 +3,16 @@ import { jsx } from "react/jsx-runtime";
3
3
  import { useToolkitTranslation } from "../../toolkit/useToolkitTranslation.js";
4
4
  import Box from "@mui/material/Box";
5
5
  import CircularProgress from "@mui/material/CircularProgress";
6
- import { piecePart } from "../../theme/themePieces.js";
6
+ import { piecePart, withPieceSlots } from "../../theme/themePieces.js";
7
7
  import { warnUnknownProps } from "../../toolkit/unknownProps.js";
8
8
  const THEME_NAME = "CalcitaFullPageLoader";
9
9
  const LoaderRoot = piecePart(THEME_NAME, "Root", Box);
10
- function FullPageLoader({ texts, ...unknownProps } = {}) {
10
+ function FullPageLoaderContent({ texts, ...unknownProps } = {}) {
11
11
  warnUnknownProps("FullPageLoader", unknownProps);
12
12
  const { t } = useToolkitTranslation("common", texts);
13
13
  return /* @__PURE__ */ jsx(LoaderRoot, { role: "status", "aria-live": "polite", ownSx: { display: "grid", placeItems: "center", minHeight: "100vh", bgcolor: "background.default" }, children: /* @__PURE__ */ jsx(CircularProgress, { "aria-label": t("status.loading") }) });
14
14
  }
15
+ const FullPageLoader = withPieceSlots(FullPageLoaderContent, THEME_NAME);
15
16
  export {
16
17
  FullPageLoader as default
17
18
  };
@@ -1 +1 @@
1
- {"version":3,"file":"FullPageLoader.js","sources":["../../../src/ui/layout/FullPageLoader.jsx"],"sourcesContent":["// Indicador de carga a pantalla completa, mientras se sabe si hay sesión.\n// Sin él, el formulario de login parpadea medio segundo antes de que aparezca la pantalla de quien ya entró.\n//\n// Se cambia desde el tema del proyecto, como las piezas de MUI: components.CalcitaFullPageLoader con defaultProps y\n// styleOverrides de sus partes: root.\n//\n// Genérico del paquete: function (regla de la casa).\nimport {useToolkitTranslation} from '@/toolkit/useToolkitTranslation.js';\nimport Box from '@mui/material/Box';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport {piecePart} from '@/theme/themePieces.js';\nimport {warnUnknownProps} from '@/toolkit/unknownProps.js';\n\n// el nombre de la pieza en el tema y sus partes (theme.components.CalcitaFullPageLoader)\nconst THEME_NAME = 'CalcitaFullPageLoader';\nconst LoaderRoot = piecePart(THEME_NAME, 'Root', Box);\n\n/**\n * @param {object} [props]\n * @param {object} [props.texts] los textos que cambian, con la forma de `common` en los textos del paquete\n */\nexport default function FullPageLoader({texts, ...unknownProps} = {}) {\n warnUnknownProps('FullPageLoader', unknownProps);\n const {t} = useToolkitTranslation('common', texts);\n\n return (\n <LoaderRoot role=\"status\" aria-live=\"polite\" ownSx={{display: 'grid', placeItems: 'center', minHeight: '100vh', bgcolor: 'background.default'}}>\n <CircularProgress aria-label={t('status.loading')} />\n </LoaderRoot>\n );\n}\n"],"names":[],"mappings":";;;;;;;AAcA,MAAM,aAAa;AACnB,MAAM,aAAa,UAAU,YAAY,QAAQ,GAAG;AAMpD,SAAwB,eAAe,EAAC,OAAO,GAAG,aAAA,IAAgB,CAAA,GAAI;AAClE,mBAAiB,kBAAkB,YAAY;AAC/C,QAAM,EAAC,EAAA,IAAK,sBAAsB,UAAU,KAAK;AAEjD,SACI,oBAAC,cAAW,MAAK,UAAS,aAAU,UAAS,OAAO,EAAC,SAAS,QAAQ,YAAY,UAAU,WAAW,SAAS,SAAS,qBAAA,GACrH,UAAA,oBAAC,oBAAiB,cAAY,EAAE,gBAAgB,EAAA,CAAG,EAAA,CACvD;AAER;"}
1
+ {"version":3,"file":"FullPageLoader.js","sources":["../../../src/ui/layout/FullPageLoader.jsx"],"sourcesContent":["// Indicador de carga a pantalla completa, mientras se sabe si hay sesión.\n// Sin él, el formulario de login parpadea medio segundo antes de que aparezca la pantalla de quien ya entró.\n//\n// Se cambia desde el tema del proyecto, como las piezas de MUI: components.CalcitaFullPageLoader con defaultProps y\n// styleOverrides de sus partes: root.\n//\n// Genérico del paquete: function (regla de la casa).\nimport {useToolkitTranslation} from '@/toolkit/useToolkitTranslation.js';\nimport Box from '@mui/material/Box';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport {piecePart, withPieceSlots} from '@/theme/themePieces.js';\nimport {warnUnknownProps} from '@/toolkit/unknownProps.js';\n\n// el nombre de la pieza en el tema y sus partes (theme.components.CalcitaFullPageLoader)\nconst THEME_NAME = 'CalcitaFullPageLoader';\nconst LoaderRoot = piecePart(THEME_NAME, 'Root', Box);\n\n/**\n * @param {object} [props]\n * @param {object} [props.texts] los textos que cambian, con la forma de `common` en los textos del paquete\n */\nfunction FullPageLoaderContent({texts, ...unknownProps} = {}) {\n warnUnknownProps('FullPageLoader', unknownProps);\n const {t} = useToolkitTranslation('common', texts);\n\n return (\n <LoaderRoot role=\"status\" aria-live=\"polite\" ownSx={{display: 'grid', placeItems: 'center', minHeight: '100vh', bgcolor: 'background.default'}}>\n <CircularProgress aria-label={t('status.loading')} />\n </LoaderRoot>\n );\n}\n\nconst FullPageLoader = withPieceSlots(FullPageLoaderContent, THEME_NAME);\nexport default FullPageLoader;\n"],"names":[],"mappings":";;;;;;;AAcA,MAAM,aAAa;AACnB,MAAM,aAAa,UAAU,YAAY,QAAQ,GAAG;AAMpD,SAAS,sBAAsB,EAAC,OAAO,GAAG,aAAA,IAAgB,CAAA,GAAI;AAC1D,mBAAiB,kBAAkB,YAAY;AAC/C,QAAM,EAAC,EAAA,IAAK,sBAAsB,UAAU,KAAK;AAEjD,SACI,oBAAC,cAAW,MAAK,UAAS,aAAU,UAAS,OAAO,EAAC,SAAS,QAAQ,YAAY,UAAU,WAAW,SAAS,SAAS,qBAAA,GACrH,UAAA,oBAAC,oBAAiB,cAAY,EAAE,gBAAgB,EAAA,CAAG,EAAA,CACvD;AAER;AAEA,MAAM,iBAAiB,eAAe,uBAAuB,UAAU;"}
@@ -2,7 +2,7 @@
2
2
  import { jsx } from "react/jsx-runtime";
3
3
  import Paper from "@mui/material/Paper";
4
4
  import { PANEL_RADIUS, isGlassTheme, glassStylesOf } from "../../theme/glassSurface.js";
5
- import { piecePart, usePieceProps } from "../../theme/themePieces.js";
5
+ import { piecePart, withPieceSlots, usePieceProps } from "../../theme/themePieces.js";
6
6
  const THEME_NAME = "CalcitaGlassPanel";
7
7
  const PanelRoot = piecePart(THEME_NAME, "Root", Paper);
8
8
  const SOLID_FLOATING_ELEVATION = 8;
@@ -12,10 +12,11 @@ function floatingSurfaceOf(theme) {
12
12
  ...isGlassTheme(theme) ? glassStylesOf(theme) : { boxShadow: theme.shadows[SOLID_FLOATING_ELEVATION] }
13
13
  };
14
14
  }
15
- function GlassPanel(props) {
15
+ function GlassPanelContent(props) {
16
16
  const { children, sx, ...paperProps } = usePieceProps(props, THEME_NAME);
17
17
  return /* @__PURE__ */ jsx(PanelRoot, { elevation: 0, ...paperProps, ownSx: floatingSurfaceOf, sx, children });
18
18
  }
19
+ const GlassPanel = withPieceSlots(GlassPanelContent, THEME_NAME);
19
20
  export {
20
21
  GlassPanel as default
21
22
  };
@@ -1 +1 @@
1
- {"version":3,"file":"GlassPanel.js","sources":["../../../src/ui/layout/GlassPanel.jsx"],"sourcesContent":["// Un panel que flota sobre el contenido: los controles encima de un mapa, una barra de acciones pegada abajo, un letrero\n// encima de una foto. Es de vidrio si el tema lo trae prendido (createToolkitTheme({glass: true})) y una tarjeta con sombra\n// si no: la pantalla se escribe una vez y sirve con los dos temas.\n//\n// No es para el contenido (una ficha, un formulario, una tabla): la guía del vidrio pide el texto largo sobre superficies\n// sólidas. Para eso está SectionCard.\n//\n// <GlassPanel sx={{position: 'absolute', top: 16, right: 16, p: 1}}>…los botones del mapa…</GlassPanel>\n//\n// Se cambia desde el tema del proyecto, como las piezas de MUI: components.CalcitaGlassPanel con defaultProps y\n// styleOverrides.root (el sx de la pantalla sigue ganando a todo).\n//\n// Genérico del paquete: function (regla de la casa).\nimport Paper from '@mui/material/Paper';\n\nimport {PANEL_RADIUS, glassStylesOf, isGlassTheme} from '@/theme/glassSurface.js';\nimport {piecePart, usePieceProps} from '@/theme/themePieces.js';\n\n// el nombre de la pieza en el tema y su parte (theme.components.CalcitaGlassPanel)\nconst THEME_NAME = 'CalcitaGlassPanel';\nconst PanelRoot = piecePart(THEME_NAME, 'Root', Paper);\n\n// sin vidrio, la sombra de lo que flota (la misma de los menús de MUI)\nconst SOLID_FLOATING_ELEVATION = 8;\n\n/**\n * El panel con su superficie: vidrio o sombra, según el tema.\n *\n * @param {object} theme\n * @returns {object}\n */\nfunction floatingSurfaceOf(theme) {\n return {\n borderRadius: PANEL_RADIUS,\n ...(isGlassTheme(theme) ? glassStylesOf(theme) : {boxShadow: theme.shadows[SOLID_FLOATING_ELEVATION]}),\n };\n}\n\n/**\n * @param {object} props\n * @param {import('react').ReactNode} props.children\n * @param {object|Function|Array} [props.sx] estilos propios: se suman y ganan\n * @param {import('react').ElementType} [props.component] por omisión 'div'\n */\nexport default function GlassPanel(props) {\n // lo que el proyecto puso en su tema (components.CalcitaGlassPanel.defaultProps) y encima lo que llega aquí\n const {children, sx, ...paperProps} = usePieceProps(props, THEME_NAME);\n return (\n <PanelRoot elevation={0} {...paperProps} ownSx={floatingSurfaceOf} sx={sx}>\n {children}\n </PanelRoot>\n );\n}\n"],"names":[],"mappings":";;;;;AAmBA,MAAM,aAAa;AACnB,MAAM,YAAY,UAAU,YAAY,QAAQ,KAAK;AAGrD,MAAM,2BAA2B;AAQjC,SAAS,kBAAkB,OAAO;AAC9B,SAAO;AAAA,IACH,cAAc;AAAA,IACd,GAAI,aAAa,KAAK,IAAI,cAAc,KAAK,IAAI,EAAC,WAAW,MAAM,QAAQ,wBAAwB,EAAA;AAAA,EAAC;AAE5G;AAQA,SAAwB,WAAW,OAAO;AAEtC,QAAM,EAAC,UAAU,IAAI,GAAG,eAAc,cAAc,OAAO,UAAU;AACrE,SACI,oBAAC,aAAU,WAAW,GAAI,GAAG,YAAY,OAAO,mBAAmB,IAC9D,SAAA,CACL;AAER;"}
1
+ {"version":3,"file":"GlassPanel.js","sources":["../../../src/ui/layout/GlassPanel.jsx"],"sourcesContent":["// Un panel que flota sobre el contenido: los controles encima de un mapa, una barra de acciones pegada abajo, un letrero\n// encima de una foto. Es de vidrio si el tema lo trae prendido (createToolkitTheme({glass: true})) y una tarjeta con sombra\n// si no: la pantalla se escribe una vez y sirve con los dos temas.\n//\n// No es para el contenido (una ficha, un formulario, una tabla): la guía del vidrio pide el texto largo sobre superficies\n// sólidas. Para eso está SectionCard.\n//\n// <GlassPanel sx={{position: 'absolute', top: 16, right: 16, p: 1}}>…los botones del mapa…</GlassPanel>\n//\n// Se cambia desde el tema del proyecto, como las piezas de MUI: components.CalcitaGlassPanel con defaultProps y\n// styleOverrides.root (el sx de la pantalla sigue ganando a todo).\n//\n// Genérico del paquete: function (regla de la casa).\nimport Paper from '@mui/material/Paper';\n\nimport {PANEL_RADIUS, glassStylesOf, isGlassTheme} from '@/theme/glassSurface.js';\nimport {piecePart, usePieceProps, withPieceSlots} from '@/theme/themePieces.js';\n\n// el nombre de la pieza en el tema y su parte (theme.components.CalcitaGlassPanel)\nconst THEME_NAME = 'CalcitaGlassPanel';\nconst PanelRoot = piecePart(THEME_NAME, 'Root', Paper);\n\n// sin vidrio, la sombra de lo que flota (la misma de los menús de MUI)\nconst SOLID_FLOATING_ELEVATION = 8;\n\n/**\n * El panel con su superficie: vidrio o sombra, según el tema.\n *\n * @param {object} theme\n * @returns {object}\n */\nfunction floatingSurfaceOf(theme) {\n return {\n borderRadius: PANEL_RADIUS,\n ...(isGlassTheme(theme) ? glassStylesOf(theme) : {boxShadow: theme.shadows[SOLID_FLOATING_ELEVATION]}),\n };\n}\n\n/**\n * @param {object} props\n * @param {import('react').ReactNode} props.children\n * @param {object|Function|Array} [props.sx] estilos propios: se suman y ganan\n * @param {import('react').ElementType} [props.component] por omisión 'div'\n */\nfunction GlassPanelContent(props) {\n // lo que el proyecto puso en su tema (components.CalcitaGlassPanel.defaultProps) y encima lo que llega aquí\n const {children, sx, ...paperProps} = usePieceProps(props, THEME_NAME);\n return (\n <PanelRoot elevation={0} {...paperProps} ownSx={floatingSurfaceOf} sx={sx}>\n {children}\n </PanelRoot>\n );\n}\n\n// lo que se exporta: la pieza con slots y slotProps para cambiar sus partes (themePieces.js)\nconst GlassPanel = withPieceSlots(GlassPanelContent, THEME_NAME);\nexport default GlassPanel;\n"],"names":[],"mappings":";;;;;AAmBA,MAAM,aAAa;AACnB,MAAM,YAAY,UAAU,YAAY,QAAQ,KAAK;AAGrD,MAAM,2BAA2B;AAQjC,SAAS,kBAAkB,OAAO;AAC9B,SAAO;AAAA,IACH,cAAc;AAAA,IACd,GAAI,aAAa,KAAK,IAAI,cAAc,KAAK,IAAI,EAAC,WAAW,MAAM,QAAQ,wBAAwB,EAAA;AAAA,EAAC;AAE5G;AAQA,SAAS,kBAAkB,OAAO;AAE9B,QAAM,EAAC,UAAU,IAAI,GAAG,eAAc,cAAc,OAAO,UAAU;AACrE,SACI,oBAAC,aAAU,WAAW,GAAI,GAAG,YAAY,OAAO,mBAAmB,IAC9D,SAAA,CACL;AAER;AAGA,MAAM,aAAa,eAAe,mBAAmB,UAAU;"}
@@ -6,13 +6,13 @@ import Stack from "@mui/material/Stack";
6
6
  import Typography from "@mui/material/Typography";
7
7
  import { useRegisterPageTitle } from "../../appShell/pageTitle.js";
8
8
  import DocumentTitle from "../navigation/DocumentTitle.js";
9
- import { piecePart, usePieceProps } from "../../theme/themePieces.js";
9
+ import { piecePart, withPieceSlots, usePieceProps } from "../../theme/themePieces.js";
10
10
  import { warnUnknownProps } from "../../toolkit/unknownProps.js";
11
11
  const THEME_NAME = "CalcitaPageHeader";
12
12
  const HeaderRoot = piecePart(THEME_NAME, "Root", Stack);
13
13
  const HeaderSubtitle = piecePart(THEME_NAME, "Subtitle", Typography);
14
14
  const HeaderAction = piecePart(THEME_NAME, "Action", Box);
15
- function PageHeader(props) {
15
+ function PageHeaderContent(props) {
16
16
  const { title, eyebrow, subtitle, action, documentTitle, ...unknownProps } = usePieceProps(props, THEME_NAME);
17
17
  warnUnknownProps(THEME_NAME, unknownProps);
18
18
  const titleRef = useRef(null);
@@ -25,6 +25,7 @@ function PageHeader(props) {
25
25
  action && /* @__PURE__ */ jsx(HeaderAction, { ownSx: { pt: 1.5 }, children: action })
26
26
  ] });
27
27
  }
28
+ const PageHeader = withPieceSlots(PageHeaderContent, THEME_NAME);
28
29
  export {
29
30
  PageHeader as default
30
31
  };
@@ -1 +1 @@
1
- {"version":3,"file":"PageHeader.js","sources":["../../../src/ui/layout/PageHeader.jsx"],"sourcesContent":["// Encabezado centrado de una pantalla: eyebrow en versalitas, título, subtítulo y una acción en píldora\n// (p. ej. VENTAS · MÓDULO 1 / Pedidos del mes / ... / Nuevo pedido).\n//\n// También pone el título de la pestaña (DocumentTitle) y, dentro de AppLayout, sube el título a la barra al deslizar.\n// Para una pantalla de trabajo (lista, formulario) se ve mejor PageHeading, el de las plantillas de MUI.\n//\n// Se cambia desde el tema del proyecto, como las piezas de MUI: components.CalcitaPageHeader con defaultProps y\n// styleOverrides de sus partes: root, subtitle, action.\n//\n// Genérico del paquete: function (regla de la casa).\nimport {useRef} from 'react';\nimport Box from '@mui/material/Box';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport {useRegisterPageTitle} from '@/appShell/pageTitle.jsx';\nimport DocumentTitle from '@/ui/navigation/DocumentTitle.jsx';\nimport {piecePart, usePieceProps} from '@/theme/themePieces.js';\nimport {warnUnknownProps} from '@/toolkit/unknownProps.js';\n\n// el nombre de la pieza en el tema y sus partes (theme.components.CalcitaPageHeader)\nconst THEME_NAME = 'CalcitaPageHeader';\nconst HeaderRoot = piecePart(THEME_NAME, 'Root', Stack);\nconst HeaderSubtitle = piecePart(THEME_NAME, 'Subtitle', Typography);\nconst HeaderAction = piecePart(THEME_NAME, 'Action', Box);\n\n/**\n * @param {object} props\n * @param {string} props.title texto ya traducido\n * @param {string} [props.eyebrow]\n * @param {import('react').ReactNode} [props.subtitle]\n * @param {import('react').ReactNode} [props.action] normalmente un <Button variant=\"contained\" shape=\"pill\">\n * @param {string} [props.documentTitle] título de la pestaña si difiere del visible\n */\nexport default function PageHeader(props) {\n // lo que el proyecto puso en su tema (components.CalcitaPageHeader.defaultProps) y encima lo que llega aquí\n const {title, eyebrow, subtitle, action, documentTitle, ...unknownProps} = usePieceProps(props, THEME_NAME);\n warnUnknownProps(THEME_NAME, unknownProps);\n const titleRef = useRef(null);\n useRegisterPageTitle(title, titleRef);\n return (\n <HeaderRoot component=\"header\" spacing={1.25} ownSx={{alignItems: 'center', textAlign: 'center', py: {xs: 3, md: 4}}}>\n <DocumentTitle title={documentTitle ?? title} />\n {/* text.secondary y no text.disabled: el eyebrow se lee, WCAG no lo exime (disabled daba 2.57:1 sobre el lienzo) */}\n {eyebrow && (\n <Typography variant=\"overline\" color=\"text.secondary\">{eyebrow}</Typography>\n )}\n <Typography ref={titleRef} variant=\"h4\" component=\"h1\">{title}</Typography>\n {subtitle && (\n <HeaderSubtitle variant=\"body1\" color=\"text.secondary\" ownSx={{maxWidth: 640}}>{subtitle}</HeaderSubtitle>\n )}\n {action && <HeaderAction ownSx={{pt: 1.5}}>{action}</HeaderAction>}\n </HeaderRoot>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;AAqBA,MAAM,aAAa;AACnB,MAAM,aAAa,UAAU,YAAY,QAAQ,KAAK;AACtD,MAAM,iBAAiB,UAAU,YAAY,YAAY,UAAU;AACnE,MAAM,eAAe,UAAU,YAAY,UAAU,GAAG;AAUxD,SAAwB,WAAW,OAAO;AAEtC,QAAM,EAAC,OAAO,SAAS,UAAU,QAAQ,eAAe,GAAG,aAAA,IAAgB,cAAc,OAAO,UAAU;AAC1G,mBAAiB,YAAY,YAAY;AACzC,QAAM,WAAW,OAAO,IAAI;AAC5B,uBAAqB,OAAO,QAAQ;AACpC,8BACK,YAAA,EAAW,WAAU,UAAS,SAAS,MAAM,OAAO,EAAC,YAAY,UAAU,WAAW,UAAU,IAAI,EAAC,IAAI,GAAG,IAAI,OAC7G,UAAA;AAAA,IAAA,oBAAC,eAAA,EAAc,OAAO,iBAAiB,MAAA,CAAO;AAAA,IAE7C,WACG,oBAAC,YAAA,EAAW,SAAQ,YAAW,OAAM,kBAAkB,UAAA,SAAQ;AAAA,IAEnE,oBAAC,cAAW,KAAK,UAAU,SAAQ,MAAK,WAAU,MAAM,UAAA,MAAA,CAAM;AAAA,IAC7D,YACG,oBAAC,gBAAA,EAAe,SAAQ,SAAQ,OAAM,kBAAiB,OAAO,EAAC,UAAU,IAAA,GAAO,UAAA,SAAA,CAAS;AAAA,IAE5F,8BAAW,cAAA,EAAa,OAAO,EAAC,IAAI,IAAA,GAAO,UAAA,OAAA,CAAO;AAAA,EAAA,GACvD;AAER;"}
1
+ {"version":3,"file":"PageHeader.js","sources":["../../../src/ui/layout/PageHeader.jsx"],"sourcesContent":["// Encabezado centrado de una pantalla: eyebrow en versalitas, título, subtítulo y una acción en píldora\n// (p. ej. VENTAS · MÓDULO 1 / Pedidos del mes / ... / Nuevo pedido).\n//\n// También pone el título de la pestaña (DocumentTitle) y, dentro de AppLayout, sube el título a la barra al deslizar.\n// Para una pantalla de trabajo (lista, formulario) se ve mejor PageHeading, el de las plantillas de MUI.\n//\n// Se cambia desde el tema del proyecto, como las piezas de MUI: components.CalcitaPageHeader con defaultProps y\n// styleOverrides de sus partes: root, subtitle, action.\n//\n// Genérico del paquete: function (regla de la casa).\nimport {useRef} from 'react';\nimport Box from '@mui/material/Box';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport {useRegisterPageTitle} from '@/appShell/pageTitle.jsx';\nimport DocumentTitle from '@/ui/navigation/DocumentTitle.jsx';\nimport {piecePart, usePieceProps, withPieceSlots} from '@/theme/themePieces.js';\nimport {warnUnknownProps} from '@/toolkit/unknownProps.js';\n\n// el nombre de la pieza en el tema y sus partes (theme.components.CalcitaPageHeader)\nconst THEME_NAME = 'CalcitaPageHeader';\nconst HeaderRoot = piecePart(THEME_NAME, 'Root', Stack);\nconst HeaderSubtitle = piecePart(THEME_NAME, 'Subtitle', Typography);\nconst HeaderAction = piecePart(THEME_NAME, 'Action', Box);\n\n/**\n * @param {object} props\n * @param {string} props.title texto ya traducido\n * @param {string} [props.eyebrow]\n * @param {import('react').ReactNode} [props.subtitle]\n * @param {import('react').ReactNode} [props.action] normalmente un <Button variant=\"contained\" shape=\"pill\">\n * @param {string} [props.documentTitle] título de la pestaña si difiere del visible\n */\nfunction PageHeaderContent(props) {\n // lo que el proyecto puso en su tema (components.CalcitaPageHeader.defaultProps) y encima lo que llega aquí\n const {title, eyebrow, subtitle, action, documentTitle, ...unknownProps} = usePieceProps(props, THEME_NAME);\n warnUnknownProps(THEME_NAME, unknownProps);\n const titleRef = useRef(null);\n useRegisterPageTitle(title, titleRef);\n return (\n <HeaderRoot component=\"header\" spacing={1.25} ownSx={{alignItems: 'center', textAlign: 'center', py: {xs: 3, md: 4}}}>\n <DocumentTitle title={documentTitle ?? title} />\n {/* text.secondary y no text.disabled: el eyebrow se lee, WCAG no lo exime (disabled daba 2.57:1 sobre el lienzo) */}\n {eyebrow && (\n <Typography variant=\"overline\" color=\"text.secondary\">{eyebrow}</Typography>\n )}\n <Typography ref={titleRef} variant=\"h4\" component=\"h1\">{title}</Typography>\n {subtitle && (\n <HeaderSubtitle variant=\"body1\" color=\"text.secondary\" ownSx={{maxWidth: 640}}>{subtitle}</HeaderSubtitle>\n )}\n {action && <HeaderAction ownSx={{pt: 1.5}}>{action}</HeaderAction>}\n </HeaderRoot>\n );\n}\n\n// lo que se exporta: la pieza con slots y slotProps para cambiar sus partes (themePieces.js)\nconst PageHeader = withPieceSlots(PageHeaderContent, THEME_NAME);\nexport default PageHeader;\n"],"names":[],"mappings":";;;;;;;;;;AAqBA,MAAM,aAAa;AACnB,MAAM,aAAa,UAAU,YAAY,QAAQ,KAAK;AACtD,MAAM,iBAAiB,UAAU,YAAY,YAAY,UAAU;AACnE,MAAM,eAAe,UAAU,YAAY,UAAU,GAAG;AAUxD,SAAS,kBAAkB,OAAO;AAE9B,QAAM,EAAC,OAAO,SAAS,UAAU,QAAQ,eAAe,GAAG,aAAA,IAAgB,cAAc,OAAO,UAAU;AAC1G,mBAAiB,YAAY,YAAY;AACzC,QAAM,WAAW,OAAO,IAAI;AAC5B,uBAAqB,OAAO,QAAQ;AACpC,8BACK,YAAA,EAAW,WAAU,UAAS,SAAS,MAAM,OAAO,EAAC,YAAY,UAAU,WAAW,UAAU,IAAI,EAAC,IAAI,GAAG,IAAI,OAC7G,UAAA;AAAA,IAAA,oBAAC,eAAA,EAAc,OAAO,iBAAiB,MAAA,CAAO;AAAA,IAE7C,WACG,oBAAC,YAAA,EAAW,SAAQ,YAAW,OAAM,kBAAkB,UAAA,SAAQ;AAAA,IAEnE,oBAAC,cAAW,KAAK,UAAU,SAAQ,MAAK,WAAU,MAAM,UAAA,MAAA,CAAM;AAAA,IAC7D,YACG,oBAAC,gBAAA,EAAe,SAAQ,SAAQ,OAAM,kBAAiB,OAAO,EAAC,UAAU,IAAA,GAAO,UAAA,SAAA,CAAS;AAAA,IAE5F,8BAAW,cAAA,EAAa,OAAO,EAAC,IAAI,IAAA,GAAO,UAAA,OAAA,CAAO;AAAA,EAAA,GACvD;AAER;AAGA,MAAM,aAAa,eAAe,mBAAmB,UAAU;"}