@techzyapp/ui-library 1.0.28 → 1.0.30

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 (363) hide show
  1. package/dist/{AdminRoot-BTvmassR.js → AdminRoot-9HGp3Mds.js} +5 -5
  2. package/dist/{AdminRoot-BTvmassR.js.map → AdminRoot-9HGp3Mds.js.map} +1 -1
  3. package/dist/{AdminRoot-DM-cZCpN.cjs → AdminRoot-D24UJ-4a.cjs} +2 -2
  4. package/dist/{AdminRoot-DM-cZCpN.cjs.map → AdminRoot-D24UJ-4a.cjs.map} +1 -1
  5. package/dist/{Alert-v-lelDih.js → Alert-CJono1TJ.js} +3 -3
  6. package/dist/{Alert-v-lelDih.js.map → Alert-CJono1TJ.js.map} +1 -1
  7. package/dist/{Alert-CFm6MU0u.cjs → Alert-VFQuuII6.cjs} +2 -2
  8. package/dist/{Alert-CFm6MU0u.cjs.map → Alert-VFQuuII6.cjs.map} +1 -1
  9. package/dist/{Breadcrumbs-3wHPNa0P.cjs → Breadcrumbs-DCEHxpSi.cjs} +2 -2
  10. package/dist/{Breadcrumbs-3wHPNa0P.cjs.map → Breadcrumbs-DCEHxpSi.cjs.map} +1 -1
  11. package/dist/{Breadcrumbs-Cgd-u3aK.js → Breadcrumbs-XWU8tRvs.js} +3 -3
  12. package/dist/{Breadcrumbs-Cgd-u3aK.js.map → Breadcrumbs-XWU8tRvs.js.map} +1 -1
  13. package/dist/{Button-BLW9yV8W.js → Button-CWMNNiia.js} +2 -2
  14. package/dist/{Button-BLW9yV8W.js.map → Button-CWMNNiia.js.map} +1 -1
  15. package/dist/{Button-KRGjJdMV.cjs → Button-CusxDmfq.cjs} +2 -2
  16. package/dist/{Button-KRGjJdMV.cjs.map → Button-CusxDmfq.cjs.map} +1 -1
  17. package/dist/{Calendar-CoTCOOUu.cjs → Calendar-BEQbZixA.cjs} +2 -2
  18. package/dist/{Calendar-CoTCOOUu.cjs.map → Calendar-BEQbZixA.cjs.map} +1 -1
  19. package/dist/{Calendar-sLA-xa0B.js → Calendar-Db3rr1VD.js} +3 -3
  20. package/dist/{Calendar-sLA-xa0B.js.map → Calendar-Db3rr1VD.js.map} +1 -1
  21. package/dist/{Card-zTkvreQu.cjs → Card-CUUh4mlB.cjs} +2 -2
  22. package/dist/{Card-zTkvreQu.cjs.map → Card-CUUh4mlB.cjs.map} +1 -1
  23. package/dist/{Card-6fiSEC0z.js → Card-MxYfQTOY.js} +2 -2
  24. package/dist/{Card-6fiSEC0z.js.map → Card-MxYfQTOY.js.map} +1 -1
  25. package/dist/{Chip-CqOqfafx.cjs → Chip-D12KcV4_.cjs} +2 -2
  26. package/dist/{Chip-CqOqfafx.cjs.map → Chip-D12KcV4_.cjs.map} +1 -1
  27. package/dist/{Chip-C-5Z5wsC.js → Chip-Zh1OB9nV.js} +2 -2
  28. package/dist/{Chip-C-5Z5wsC.js.map → Chip-Zh1OB9nV.js.map} +1 -1
  29. package/dist/{CodeBlock-rPaqO7yD.js → CodeBlock-CkrTnpcj.js} +3 -3
  30. package/dist/{CodeBlock-rPaqO7yD.js.map → CodeBlock-CkrTnpcj.js.map} +1 -1
  31. package/dist/{CodeBlock-DFiHDZXh.cjs → CodeBlock-DAM7BkHK.cjs} +2 -2
  32. package/dist/{CodeBlock-DFiHDZXh.cjs.map → CodeBlock-DAM7BkHK.cjs.map} +1 -1
  33. package/dist/{ColorPicker-Bqypsy5E.cjs → ColorPicker-BcCozxIe.cjs} +2 -2
  34. package/dist/{ColorPicker-Bqypsy5E.cjs.map → ColorPicker-BcCozxIe.cjs.map} +1 -1
  35. package/dist/{ColorPicker-DXDAXvlA.js → ColorPicker-DqxVgUoD.js} +3 -3
  36. package/dist/{ColorPicker-DXDAXvlA.js.map → ColorPicker-DqxVgUoD.js.map} +1 -1
  37. package/dist/{ColorPickerPanel-C9ARc_uD.cjs → ColorPickerPanel-DAOESLCe.cjs} +2 -2
  38. package/dist/{ColorPickerPanel-C9ARc_uD.cjs.map → ColorPickerPanel-DAOESLCe.cjs.map} +1 -1
  39. package/dist/{ColorPickerPanel-6lQC1URc.js → ColorPickerPanel-DZjN8NNn.js} +2 -2
  40. package/dist/{ColorPickerPanel-6lQC1URc.js.map → ColorPickerPanel-DZjN8NNn.js.map} +1 -1
  41. package/dist/{ColorRamp-DQ8wkgvF.js → ColorRamp-DS5LVpRF.js} +2 -2
  42. package/dist/{ColorRamp-DQ8wkgvF.js.map → ColorRamp-DS5LVpRF.js.map} +1 -1
  43. package/dist/{ColorRamp-B9OWxCOK.cjs → ColorRamp-_KwlPQ-T.cjs} +2 -2
  44. package/dist/{ColorRamp-B9OWxCOK.cjs.map → ColorRamp-_KwlPQ-T.cjs.map} +1 -1
  45. package/dist/{ConfigProvider-B_RSn9bb.js → ConfigProvider-BbsI15b-.js} +2 -2
  46. package/dist/{ConfigProvider-B_RSn9bb.js.map → ConfigProvider-BbsI15b-.js.map} +1 -1
  47. package/dist/{ConfigProvider-BElY0HuV.cjs → ConfigProvider-ByLHqXpv.cjs} +2 -2
  48. package/dist/{ConfigProvider-BElY0HuV.cjs.map → ConfigProvider-ByLHqXpv.cjs.map} +1 -1
  49. package/dist/{CopyButton-BplPYm8i.js → CopyButton-D4s8aeSE.js} +3 -3
  50. package/dist/{CopyButton-BplPYm8i.js.map → CopyButton-D4s8aeSE.js.map} +1 -1
  51. package/dist/{CopyButton-B5aicGl3.cjs → CopyButton-SFwjKod9.cjs} +2 -2
  52. package/dist/{CopyButton-B5aicGl3.cjs.map → CopyButton-SFwjKod9.cjs.map} +1 -1
  53. package/dist/{DatePicker-U5TJ9FYM.js → DatePicker-DGwjCHfd.js} +4 -4
  54. package/dist/{DatePicker-U5TJ9FYM.js.map → DatePicker-DGwjCHfd.js.map} +1 -1
  55. package/dist/{DatePicker-Cdl2JYBd.cjs → DatePicker-ENbn2Vab.cjs} +2 -2
  56. package/dist/{DatePicker-Cdl2JYBd.cjs.map → DatePicker-ENbn2Vab.cjs.map} +1 -1
  57. package/dist/{DateTimePicker-DUFtddxJ.cjs → DateTimePicker-BQUmsFwX.cjs} +2 -2
  58. package/dist/{DateTimePicker-DUFtddxJ.cjs.map → DateTimePicker-BQUmsFwX.cjs.map} +1 -1
  59. package/dist/{DateTimePicker-laJsZYJX.js → DateTimePicker-CwVkQiun.js} +7 -7
  60. package/dist/{DateTimePicker-laJsZYJX.js.map → DateTimePicker-CwVkQiun.js.map} +1 -1
  61. package/dist/{DescriptionList-Y9jF_4L0.js → DescriptionList-0qjKr6GN.js} +4 -4
  62. package/dist/{DescriptionList-Y9jF_4L0.js.map → DescriptionList-0qjKr6GN.js.map} +1 -1
  63. package/dist/{DescriptionList-BCvOX8fg.cjs → DescriptionList-U5z2Faf4.cjs} +2 -2
  64. package/dist/{DescriptionList-BCvOX8fg.cjs.map → DescriptionList-U5z2Faf4.cjs.map} +1 -1
  65. package/dist/{EmptyState-CO_NRZ6w.cjs → EmptyState-B2_4BN4l.cjs} +2 -2
  66. package/dist/{EmptyState-CO_NRZ6w.cjs.map → EmptyState-B2_4BN4l.cjs.map} +1 -1
  67. package/dist/{EmptyState-BtwuzX9Z.js → EmptyState-DwT9_HW7.js} +2 -2
  68. package/dist/{EmptyState-BtwuzX9Z.js.map → EmptyState-DwT9_HW7.js.map} +1 -1
  69. package/dist/ErrorBoundary-CYSOAQlB.cjs +2 -0
  70. package/dist/ErrorBoundary-CYSOAQlB.cjs.map +1 -0
  71. package/dist/ErrorBoundary-CsDHKYB4.js +163 -0
  72. package/dist/ErrorBoundary-CsDHKYB4.js.map +1 -0
  73. package/dist/{FileCard-C3a2yDhK.js → FileCard-B9f9RoXS.js} +3 -3
  74. package/dist/{FileCard-C3a2yDhK.js.map → FileCard-B9f9RoXS.js.map} +1 -1
  75. package/dist/{FileCard-DKjDQRzZ.cjs → FileCard-zuUYik-F.cjs} +2 -2
  76. package/dist/{FileCard-DKjDQRzZ.cjs.map → FileCard-zuUYik-F.cjs.map} +1 -1
  77. package/dist/{FileUploader-CuOHWkiG.js → FileUploader-Dh2zA50t.js} +5 -5
  78. package/dist/{FileUploader-CuOHWkiG.js.map → FileUploader-Dh2zA50t.js.map} +1 -1
  79. package/dist/{FileUploader-VIOg03pl.cjs → FileUploader-Y8hiyIpp.cjs} +2 -2
  80. package/dist/{FileUploader-VIOg03pl.cjs.map → FileUploader-Y8hiyIpp.cjs.map} +1 -1
  81. package/dist/{Flag-aOQncoEZ.cjs → Flag-BpTQAgbD.cjs} +2 -2
  82. package/dist/{Flag-aOQncoEZ.cjs.map → Flag-BpTQAgbD.cjs.map} +1 -1
  83. package/dist/{Flag-kpUfmrwC.js → Flag-CmDXvd7j.js} +2 -2
  84. package/dist/{Flag-kpUfmrwC.js.map → Flag-CmDXvd7j.js.map} +1 -1
  85. package/dist/{FullscreenToggle-CMifmPD3.js → FullscreenToggle-2IYIS5KF.js} +3 -3
  86. package/dist/{FullscreenToggle-CMifmPD3.js.map → FullscreenToggle-2IYIS5KF.js.map} +1 -1
  87. package/dist/{FullscreenToggle-BSwxQEaG.cjs → FullscreenToggle-CeGgw3z1.cjs} +2 -2
  88. package/dist/{FullscreenToggle-BSwxQEaG.cjs.map → FullscreenToggle-CeGgw3z1.cjs.map} +1 -1
  89. package/dist/{IconButton-A2B0bqC-.cjs → IconButton-BNa0yLcv.cjs} +2 -2
  90. package/dist/{IconButton-A2B0bqC-.cjs.map → IconButton-BNa0yLcv.cjs.map} +1 -1
  91. package/dist/{IconButton-Dq17Fekm.js → IconButton-GU3Ud4Zg.js} +2 -2
  92. package/dist/{IconButton-Dq17Fekm.js.map → IconButton-GU3Ud4Zg.js.map} +1 -1
  93. package/dist/{Loader-CwyoKoWY.js → Loader-C1uaCtx6.js} +2 -2
  94. package/dist/{Loader-CwyoKoWY.js.map → Loader-C1uaCtx6.js.map} +1 -1
  95. package/dist/{Loader-D9nteBXt.cjs → Loader-Cpr9-OOZ.cjs} +2 -2
  96. package/dist/{Loader-D9nteBXt.cjs.map → Loader-Cpr9-OOZ.cjs.map} +1 -1
  97. package/dist/{Modal-CQDcYS-Y.cjs → Modal-DFeBHv-Q.cjs} +2 -2
  98. package/dist/{Modal-CQDcYS-Y.cjs.map → Modal-DFeBHv-Q.cjs.map} +1 -1
  99. package/dist/{Modal-cz6JIsZn.js → Modal-DHP2R3K3.js} +3 -3
  100. package/dist/{Modal-cz6JIsZn.js.map → Modal-DHP2R3K3.js.map} +1 -1
  101. package/dist/{MultiSelect-C6l0LpIs.js → MultiSelect-B-FPQ08c.js} +4 -4
  102. package/dist/{MultiSelect-C6l0LpIs.js.map → MultiSelect-B-FPQ08c.js.map} +1 -1
  103. package/dist/{MultiSelect-BIwE6wb7.cjs → MultiSelect-S5VG9g3l.cjs} +2 -2
  104. package/dist/{MultiSelect-BIwE6wb7.cjs.map → MultiSelect-S5VG9g3l.cjs.map} +1 -1
  105. package/dist/{NumberField-BpUTV_Qn.js → NumberField-CzyvDMRV.js} +3 -3
  106. package/dist/{NumberField-BpUTV_Qn.js.map → NumberField-CzyvDMRV.js.map} +1 -1
  107. package/dist/{NumberField-IyhO4OpJ.cjs → NumberField-SSGXlF8U.cjs} +2 -2
  108. package/dist/{NumberField-IyhO4OpJ.cjs.map → NumberField-SSGXlF8U.cjs.map} +1 -1
  109. package/dist/{OtpField-BoLxbGtY.js → OtpField-CMoJqcx1.js} +2 -2
  110. package/dist/{OtpField-BoLxbGtY.js.map → OtpField-CMoJqcx1.js.map} +1 -1
  111. package/dist/{OtpField-HMrxkdiy.cjs → OtpField-Pr7Ch0El.cjs} +2 -2
  112. package/dist/{OtpField-HMrxkdiy.cjs.map → OtpField-Pr7Ch0El.cjs.map} +1 -1
  113. package/dist/{PageLayout-DtWG-6dn.cjs → PageLayout-BIMkjq-q.cjs} +2 -2
  114. package/dist/{PageLayout-DtWG-6dn.cjs.map → PageLayout-BIMkjq-q.cjs.map} +1 -1
  115. package/dist/{PageLayout-G8F1WgC-.js → PageLayout-Ctr-IEzX.js} +2 -2
  116. package/dist/{PageLayout-G8F1WgC-.js.map → PageLayout-Ctr-IEzX.js.map} +1 -1
  117. package/dist/{PageNotFound-DG8xXPL3.cjs → PageNotFound-CnhBheI4.cjs} +2 -2
  118. package/dist/{PageNotFound-DG8xXPL3.cjs.map → PageNotFound-CnhBheI4.cjs.map} +1 -1
  119. package/dist/{PageNotFound-CeKIMZ55.js → PageNotFound-KKJTeaRF.js} +5 -5
  120. package/dist/{PageNotFound-CeKIMZ55.js.map → PageNotFound-KKJTeaRF.js.map} +1 -1
  121. package/dist/{Pagination-Br8P3KwE.cjs → Pagination-BD5WOW98.cjs} +2 -2
  122. package/dist/{Pagination-Br8P3KwE.cjs.map → Pagination-BD5WOW98.cjs.map} +1 -1
  123. package/dist/{Pagination-CE1uKrR4.js → Pagination-Oyms2ERd.js} +2 -2
  124. package/dist/{Pagination-CE1uKrR4.js.map → Pagination-Oyms2ERd.js.map} +1 -1
  125. package/dist/{PaletteField-BBPbkDcp.js → PaletteField-BHzzzdou.js} +3 -3
  126. package/dist/{PaletteField-BBPbkDcp.js.map → PaletteField-BHzzzdou.js.map} +1 -1
  127. package/dist/{PaletteField-DwvSn6V6.cjs → PaletteField-CCQGW5LC.cjs} +2 -2
  128. package/dist/{PaletteField-DwvSn6V6.cjs.map → PaletteField-CCQGW5LC.cjs.map} +1 -1
  129. package/dist/{PhoneField-BclMbl7L.cjs → PhoneField-5zGY4Wko.cjs} +2 -2
  130. package/dist/{PhoneField-BclMbl7L.cjs.map → PhoneField-5zGY4Wko.cjs.map} +1 -1
  131. package/dist/{PhoneField-B-L0xAtD.js → PhoneField-CBfmChPx.js} +4 -4
  132. package/dist/{PhoneField-B-L0xAtD.js.map → PhoneField-CBfmChPx.js.map} +1 -1
  133. package/dist/{Popconfirm-BgpvCBy1.js → Popconfirm-BtGDhqrc.js} +3 -3
  134. package/dist/{Popconfirm-BgpvCBy1.js.map → Popconfirm-BtGDhqrc.js.map} +1 -1
  135. package/dist/{Popconfirm-DD8F8SXn.cjs → Popconfirm-CkBdntxV.cjs} +2 -2
  136. package/dist/{Popconfirm-DD8F8SXn.cjs.map → Popconfirm-CkBdntxV.cjs.map} +1 -1
  137. package/dist/{Progress-_aZ8XOJr.cjs → Progress-Bwxx71Ns.cjs} +2 -2
  138. package/dist/{Progress-_aZ8XOJr.cjs.map → Progress-Bwxx71Ns.cjs.map} +1 -1
  139. package/dist/{Progress-L5koRRJp.js → Progress-pTbaOSDd.js} +2 -2
  140. package/dist/{Progress-L5koRRJp.js.map → Progress-pTbaOSDd.js.map} +1 -1
  141. package/dist/{QueryError-tBuIQRgv.js → QueryError-Bu_MNGek.js} +2 -2
  142. package/dist/{QueryError-tBuIQRgv.js.map → QueryError-Bu_MNGek.js.map} +1 -1
  143. package/dist/{QueryError-BMH8X69O.cjs → QueryError-C01oichG.cjs} +2 -2
  144. package/dist/{QueryError-BMH8X69O.cjs.map → QueryError-C01oichG.cjs.map} +1 -1
  145. package/dist/{RemoveDialog-DBKYnTYU.cjs → RemoveDialog-Bm2mJB3l.cjs} +2 -2
  146. package/dist/{RemoveDialog-DBKYnTYU.cjs.map → RemoveDialog-Bm2mJB3l.cjs.map} +1 -1
  147. package/dist/{RemoveDialog-C9_UzFBf.js → RemoveDialog-C2uJzWi-.js} +5 -5
  148. package/dist/{RemoveDialog-C9_UzFBf.js.map → RemoveDialog-C2uJzWi-.js.map} +1 -1
  149. package/dist/RichTextEditor-BFeJn2lr.js +916 -0
  150. package/dist/RichTextEditor-BFeJn2lr.js.map +1 -0
  151. package/dist/RichTextEditor-hOfxJEPX.cjs +2 -0
  152. package/dist/RichTextEditor-hOfxJEPX.cjs.map +1 -0
  153. package/dist/{RootLayout-p8ArA6wA.js → RootLayout-CxncyjCz.js} +13 -13
  154. package/dist/{RootLayout-p8ArA6wA.js.map → RootLayout-CxncyjCz.js.map} +1 -1
  155. package/dist/{RootLayout-DG2dXhXn.cjs → RootLayout-XEcU_MBs.cjs} +2 -2
  156. package/dist/{RootLayout-DG2dXhXn.cjs.map → RootLayout-XEcU_MBs.cjs.map} +1 -1
  157. package/dist/{Select-BuVfUiw-.cjs → Select-CVVJKAtS.cjs} +2 -2
  158. package/dist/{Select-BuVfUiw-.cjs.map → Select-CVVJKAtS.cjs.map} +1 -1
  159. package/dist/{Select-BAR_aVSz.js → Select-d9LDI8O3.js} +3 -3
  160. package/dist/{Select-BAR_aVSz.js.map → Select-d9LDI8O3.js.map} +1 -1
  161. package/dist/{Sidebar-NI5HGGYF.cjs → Sidebar-B8ecHwZr.cjs} +2 -2
  162. package/dist/{Sidebar-NI5HGGYF.cjs.map → Sidebar-B8ecHwZr.cjs.map} +1 -1
  163. package/dist/{Sidebar-CsWcjSTx.js → Sidebar-BgCfnZBF.js} +3 -3
  164. package/dist/{Sidebar-CsWcjSTx.js.map → Sidebar-BgCfnZBF.js.map} +1 -1
  165. package/dist/{SpeedDial-DF-ILheU.js → SpeedDial-CBVwgnFp.js} +2 -2
  166. package/dist/{SpeedDial-DF-ILheU.js.map → SpeedDial-CBVwgnFp.js.map} +1 -1
  167. package/dist/{SpeedDial-C_rZkHmF.cjs → SpeedDial-CEr2JWQb.cjs} +2 -2
  168. package/dist/{SpeedDial-C_rZkHmF.cjs.map → SpeedDial-CEr2JWQb.cjs.map} +1 -1
  169. package/dist/{Stepper-CT7n113R.cjs → Stepper-DOSc03YV.cjs} +2 -2
  170. package/dist/{Stepper-CT7n113R.cjs.map → Stepper-DOSc03YV.cjs.map} +1 -1
  171. package/dist/{Stepper-B39Ax_w6.js → Stepper-DtYamv1q.js} +2 -2
  172. package/dist/{Stepper-B39Ax_w6.js.map → Stepper-DtYamv1q.js.map} +1 -1
  173. package/dist/{Table-CH_oiEP3.js → Table-AzNzUAkl.js} +15 -15
  174. package/dist/{Table-CH_oiEP3.js.map → Table-AzNzUAkl.js.map} +1 -1
  175. package/dist/{Table-DD_uysnY.cjs → Table-CrpWhZUg.cjs} +2 -2
  176. package/dist/{Table-DD_uysnY.cjs.map → Table-CrpWhZUg.cjs.map} +1 -1
  177. package/dist/{Tabs-C1N9FgAq.cjs → Tabs-CMnLXRjA.cjs} +2 -2
  178. package/dist/{Tabs-C1N9FgAq.cjs.map → Tabs-CMnLXRjA.cjs.map} +1 -1
  179. package/dist/{Tabs-By86Cmpw.js → Tabs-D1RGhKsa.js} +2 -2
  180. package/dist/{Tabs-By86Cmpw.js.map → Tabs-D1RGhKsa.js.map} +1 -1
  181. package/dist/{TagsField-RX-x45-j.cjs → TagsField-DcuSn7wL.cjs} +2 -2
  182. package/dist/{TagsField-RX-x45-j.cjs.map → TagsField-DcuSn7wL.cjs.map} +1 -1
  183. package/dist/{TagsField-BiOyAadf.js → TagsField-DuQEFHZ3.js} +4 -4
  184. package/dist/{TagsField-BiOyAadf.js.map → TagsField-DuQEFHZ3.js.map} +1 -1
  185. package/dist/{TextField-CdbanZuk.cjs → TextField-E85pvJQC.cjs} +2 -2
  186. package/dist/{TextField-CdbanZuk.cjs.map → TextField-E85pvJQC.cjs.map} +1 -1
  187. package/dist/{TextField-CkronCRC.js → TextField-SGYWviFf.js} +3 -3
  188. package/dist/{TextField-CkronCRC.js.map → TextField-SGYWviFf.js.map} +1 -1
  189. package/dist/{ThemeToggle-C4QhDd76.cjs → ThemeToggle-BdlxzYNt.cjs} +2 -2
  190. package/dist/{ThemeToggle-C4QhDd76.cjs.map → ThemeToggle-BdlxzYNt.cjs.map} +1 -1
  191. package/dist/{ThemeToggle-BYUEH6be.js → ThemeToggle-C2kjFrD_.js} +3 -3
  192. package/dist/{ThemeToggle-BYUEH6be.js.map → ThemeToggle-C2kjFrD_.js.map} +1 -1
  193. package/dist/{TimeColumns-yzjScNU8.js → TimeColumns-BS1d0qOp.js} +2 -2
  194. package/dist/{TimeColumns-yzjScNU8.js.map → TimeColumns-BS1d0qOp.js.map} +1 -1
  195. package/dist/{TimeColumns-Cl0_IRf0.cjs → TimeColumns-D7-O4Qyt.cjs} +2 -2
  196. package/dist/{TimeColumns-Cl0_IRf0.cjs.map → TimeColumns-D7-O4Qyt.cjs.map} +1 -1
  197. package/dist/{TimePicker-CoIdMv1S.js → TimePicker-DlzYNDN1.js} +5 -5
  198. package/dist/{TimePicker-CoIdMv1S.js.map → TimePicker-DlzYNDN1.js.map} +1 -1
  199. package/dist/{TimePicker-CJGVGETl.cjs → TimePicker-Dzb3gycP.cjs} +2 -2
  200. package/dist/{TimePicker-CJGVGETl.cjs.map → TimePicker-Dzb3gycP.cjs.map} +1 -1
  201. package/dist/{Toaster-lv5cJhib.cjs → Toaster-Cummylmj.cjs} +2 -2
  202. package/dist/{Toaster-lv5cJhib.cjs.map → Toaster-Cummylmj.cjs.map} +1 -1
  203. package/dist/{Toaster-Dhz2mYq_.js → Toaster-cu5XyKeE.js} +2 -2
  204. package/dist/{Toaster-Dhz2mYq_.js.map → Toaster-cu5XyKeE.js.map} +1 -1
  205. package/dist/{TranslatedFields-BCJ86Tqp.cjs → TranslatedFields-CbTlgKnh.cjs} +2 -2
  206. package/dist/{TranslatedFields-BCJ86Tqp.cjs.map → TranslatedFields-CbTlgKnh.cjs.map} +1 -1
  207. package/dist/{TranslatedFields-BtNUAyrY.js → TranslatedFields-Ccjhq2YL.js} +5 -5
  208. package/dist/{TranslatedFields-BtNUAyrY.js.map → TranslatedFields-Ccjhq2YL.js.map} +1 -1
  209. package/dist/{UserCard-CiQUrZjb.cjs → UserCard-BfHHfkDr.cjs} +2 -2
  210. package/dist/{UserCard-CiQUrZjb.cjs.map → UserCard-BfHHfkDr.cjs.map} +1 -1
  211. package/dist/{UserCard-B-eNyZuT.js → UserCard-Bs8kuV2j.js} +3 -3
  212. package/dist/{UserCard-B-eNyZuT.js.map → UserCard-Bs8kuV2j.js.map} +1 -1
  213. package/dist/components/Alert/index.cjs +1 -1
  214. package/dist/components/Alert/index.js +1 -1
  215. package/dist/components/Breadcrumbs/index.cjs +1 -1
  216. package/dist/components/Breadcrumbs/index.js +1 -1
  217. package/dist/components/Button/index.cjs +1 -1
  218. package/dist/components/Button/index.js +1 -1
  219. package/dist/components/Card/index.cjs +1 -1
  220. package/dist/components/Card/index.js +1 -1
  221. package/dist/components/Chip/index.cjs +1 -1
  222. package/dist/components/Chip/index.js +1 -1
  223. package/dist/components/CodeBlock/index.cjs +1 -1
  224. package/dist/components/CodeBlock/index.js +1 -1
  225. package/dist/components/ColorPicker/index.cjs +1 -1
  226. package/dist/components/ColorPicker/index.js +1 -1
  227. package/dist/components/ColorRamp/index.cjs +1 -1
  228. package/dist/components/ColorRamp/index.js +1 -1
  229. package/dist/components/CopyButton/index.cjs +1 -1
  230. package/dist/components/CopyButton/index.js +1 -1
  231. package/dist/components/DatePicker/index.cjs +1 -1
  232. package/dist/components/DatePicker/index.js +1 -1
  233. package/dist/components/DateTimePicker/index.cjs +1 -1
  234. package/dist/components/DateTimePicker/index.js +1 -1
  235. package/dist/components/DescriptionList/index.cjs +1 -1
  236. package/dist/components/DescriptionList/index.js +1 -1
  237. package/dist/components/EmptyState/index.cjs +1 -1
  238. package/dist/components/EmptyState/index.js +1 -1
  239. package/dist/components/ErrorState/ErrorState.d.cts +13 -1
  240. package/dist/components/ErrorState/ErrorState.d.ts +13 -1
  241. package/dist/components/ErrorState/errorMessage.d.cts +12 -0
  242. package/dist/components/ErrorState/errorMessage.d.ts +12 -0
  243. package/dist/components/ErrorState/index.cjs +1 -1
  244. package/dist/components/ErrorState/index.d.cts +1 -1
  245. package/dist/components/ErrorState/index.d.ts +1 -1
  246. package/dist/components/ErrorState/index.js +6 -4
  247. package/dist/components/FileCard/index.cjs +1 -1
  248. package/dist/components/FileCard/index.js +1 -1
  249. package/dist/components/FileUploader/index.cjs +1 -1
  250. package/dist/components/FileUploader/index.js +1 -1
  251. package/dist/components/Flag/index.cjs +1 -1
  252. package/dist/components/Flag/index.js +1 -1
  253. package/dist/components/FullscreenToggle/index.cjs +1 -1
  254. package/dist/components/FullscreenToggle/index.js +1 -1
  255. package/dist/components/IconButton/index.cjs +1 -1
  256. package/dist/components/IconButton/index.js +1 -1
  257. package/dist/components/Loader/index.cjs +1 -1
  258. package/dist/components/Loader/index.js +1 -1
  259. package/dist/components/Modal/index.cjs +1 -1
  260. package/dist/components/Modal/index.js +1 -1
  261. package/dist/components/MultiSelect/index.cjs +1 -1
  262. package/dist/components/MultiSelect/index.js +1 -1
  263. package/dist/components/NumberField/index.cjs +1 -1
  264. package/dist/components/NumberField/index.js +1 -1
  265. package/dist/components/OtpField/index.cjs +1 -1
  266. package/dist/components/OtpField/index.js +1 -1
  267. package/dist/components/PageLayout/index.cjs +1 -1
  268. package/dist/components/PageLayout/index.js +1 -1
  269. package/dist/components/PageNotFound/index.cjs +1 -1
  270. package/dist/components/PageNotFound/index.js +1 -1
  271. package/dist/components/Pagination/index.cjs +1 -1
  272. package/dist/components/Pagination/index.js +1 -1
  273. package/dist/components/PaletteField/index.cjs +1 -1
  274. package/dist/components/PaletteField/index.js +1 -1
  275. package/dist/components/PhoneField/index.cjs +1 -1
  276. package/dist/components/PhoneField/index.js +1 -1
  277. package/dist/components/Popconfirm/index.cjs +1 -1
  278. package/dist/components/Popconfirm/index.js +1 -1
  279. package/dist/components/Progress/index.cjs +1 -1
  280. package/dist/components/Progress/index.js +1 -1
  281. package/dist/components/RemoveDialog/index.cjs +1 -1
  282. package/dist/components/RemoveDialog/index.js +1 -1
  283. package/dist/components/RichTextEditor/RichTextEditor.d.cts +16 -1
  284. package/dist/components/RichTextEditor/RichTextEditor.d.ts +16 -1
  285. package/dist/components/RichTextEditor/index.cjs +1 -1
  286. package/dist/components/RichTextEditor/index.js +1 -1
  287. package/dist/components/RootLayout/index.cjs +1 -1
  288. package/dist/components/RootLayout/index.js +1 -1
  289. package/dist/components/Select/index.cjs +1 -1
  290. package/dist/components/Select/index.js +1 -1
  291. package/dist/components/Sidebar/index.cjs +1 -1
  292. package/dist/components/Sidebar/index.js +1 -1
  293. package/dist/components/SpeedDial/index.cjs +1 -1
  294. package/dist/components/SpeedDial/index.js +1 -1
  295. package/dist/components/Stepper/index.cjs +1 -1
  296. package/dist/components/Stepper/index.js +1 -1
  297. package/dist/components/Table/index.cjs +1 -1
  298. package/dist/components/Table/index.js +1 -1
  299. package/dist/components/Tabs/index.cjs +1 -1
  300. package/dist/components/Tabs/index.js +1 -1
  301. package/dist/components/TagsField/index.cjs +1 -1
  302. package/dist/components/TagsField/index.js +1 -1
  303. package/dist/components/TextField/index.cjs +1 -1
  304. package/dist/components/TextField/index.js +1 -1
  305. package/dist/components/ThemeToggle/index.cjs +1 -1
  306. package/dist/components/ThemeToggle/index.js +1 -1
  307. package/dist/components/TimePicker/index.cjs +1 -1
  308. package/dist/components/TimePicker/index.js +1 -1
  309. package/dist/components/Toast/index.cjs +1 -1
  310. package/dist/components/Toast/index.js +1 -1
  311. package/dist/components/TranslatedFields/index.cjs +1 -1
  312. package/dist/components/TranslatedFields/index.js +1 -1
  313. package/dist/components/UserCard/index.cjs +1 -1
  314. package/dist/components/UserCard/index.js +1 -1
  315. package/dist/entries/app.cjs +1 -1
  316. package/dist/entries/app.js +1 -1
  317. package/dist/entries/components.cjs +1 -1
  318. package/dist/entries/components.js +144 -142
  319. package/dist/entries/hooks.cjs +1 -1
  320. package/dist/entries/hooks.d.cts +2 -0
  321. package/dist/entries/hooks.d.ts +2 -0
  322. package/dist/entries/hooks.js +9 -8
  323. package/dist/entries/i18n.cjs +1 -1
  324. package/dist/entries/i18n.js +2 -2
  325. package/dist/entries/theme.cjs +1 -1
  326. package/dist/entries/theme.js +1 -1
  327. package/dist/hooks/index.d.cts +2 -0
  328. package/dist/hooks/index.d.ts +2 -0
  329. package/dist/hooks/useTableQuery.d.cts +56 -0
  330. package/dist/hooks/useTableQuery.d.ts +56 -0
  331. package/dist/i18n/messages.d.cts +1 -0
  332. package/dist/i18n/messages.d.ts +1 -0
  333. package/dist/index.cjs +1 -1
  334. package/dist/index.css +1 -1
  335. package/dist/index.js +247 -244
  336. package/dist/{messages-BF2ft7yD.js → messages-DCefu6Pn.js} +20 -13
  337. package/dist/messages-DCefu6Pn.js.map +1 -0
  338. package/dist/messages-FiUqCKjJ.cjs +36 -0
  339. package/dist/messages-FiUqCKjJ.cjs.map +1 -0
  340. package/dist/useForm-CN-qCrP7.js +144 -0
  341. package/dist/useForm-CN-qCrP7.js.map +1 -0
  342. package/dist/useForm-WvV361y6.cjs +2 -0
  343. package/dist/useForm-WvV361y6.cjs.map +1 -0
  344. package/dist/{useOptionMenu-C0xSaZ4t.cjs → useOptionMenu-BoWyPgbY.cjs} +2 -2
  345. package/dist/{useOptionMenu-C0xSaZ4t.cjs.map → useOptionMenu-BoWyPgbY.cjs.map} +1 -1
  346. package/dist/{useOptionMenu-Cq_eHdab.js → useOptionMenu-D7EbYG9A.js} +3 -3
  347. package/dist/{useOptionMenu-Cq_eHdab.js.map → useOptionMenu-D7EbYG9A.js.map} +1 -1
  348. package/package.json +2 -1
  349. package/dist/ErrorBoundary-DJ6R1M9k.js +0 -126
  350. package/dist/ErrorBoundary-DJ6R1M9k.js.map +0 -1
  351. package/dist/ErrorBoundary-unvC1vZQ.cjs +0 -2
  352. package/dist/ErrorBoundary-unvC1vZQ.cjs.map +0 -1
  353. package/dist/RichTextEditor-DTz7Qcn_.cjs +0 -2
  354. package/dist/RichTextEditor-DTz7Qcn_.cjs.map +0 -1
  355. package/dist/RichTextEditor-fXcbUjTl.js +0 -806
  356. package/dist/RichTextEditor-fXcbUjTl.js.map +0 -1
  357. package/dist/messages-BF2ft7yD.js.map +0 -1
  358. package/dist/messages-ihnE1jVG.cjs +0 -36
  359. package/dist/messages-ihnE1jVG.cjs.map +0 -1
  360. package/dist/useForm-B_5wDIER.js +0 -126
  361. package/dist/useForm-B_5wDIER.js.map +0 -1
  362. package/dist/useForm-C7erBHt0.cjs +0 -2
  363. package/dist/useForm-C7erBHt0.cjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"RichTextEditor-fXcbUjTl.js","sources":["../src/components/RichTextEditor/urlSafety.ts","../src/components/RichTextEditor/nodes/ImageNode.tsx","../src/components/RichTextEditor/nodes/VideoNode.tsx","../src/components/RichTextEditor/Toolbar.tsx","../src/components/RichTextEditor/RichTextEditor.tsx"],"sourcesContent":["/**\n * URL-scheme allowlist for the RichTextEditor — the single defense against script-URL XSS\n * (`javascript:`, `vbscript:`, `data:text/html`, …) reaching the exported HTML value, whether a URL\n * arrives via the toolbar dialogs, a paste, or a loaded value. Rejected URLs are neutralized (an\n * empty `src`, or a `'#'` `href`) rather than executed.\n */\n\n// Link schemes we trust, plus relative/anchor/query starts (which carry no scheme at all).\nconst SAFE_LINK = /^(?:https?:|mailto:|tel:|ftp:|#|\\/|\\?|\\.)/i\n// Does the string begin with an explicit `scheme:` at all? (Anything schemeless is treated as relative.)\nconst HAS_SCHEME = /^[a-z][a-z0-9+.-]*:/i\n\n/**\n * Sanitize a link `href`: allow `http(s)`/`mailto`/`tel`/`ftp` and relative/anchor/query URLs; any\n * other explicit scheme (`javascript:`, `data:`, `vbscript:`, …) collapses to `'#'`.\n */\nexport function sanitizeLinkUrl(url: string): string {\n const trimmed = url.trim()\n if (trimmed === '') return ''\n if (SAFE_LINK.test(trimmed)) return trimmed\n if (!HAS_SCHEME.test(trimmed)) return trimmed // schemeless (e.g. `example.com/x`) → relative, safe\n return '#' // a disallowed scheme\n}\n\n/**\n * Sanitize an image/video `src`: like {@link sanitizeLinkUrl}, but also permits inline\n * `data:image`/`data:video` (upload embeds) and `blob:` object URLs. A disallowed scheme yields `''`.\n */\nexport function sanitizeMediaUrl(url: string): string {\n const trimmed = url.trim()\n if (/^data:(?:image|video)\\//i.test(trimmed) || /^blob:/i.test(trimmed)) return trimmed\n const safe = sanitizeLinkUrl(trimmed)\n return safe === '#' ? '' : safe\n}\n","import {\n $applyNodeReplacement,\n DecoratorNode,\n type DOMConversionMap,\n type DOMConversionOutput,\n type DOMExportOutput,\n type LexicalNode,\n type NodeKey,\n type SerializedLexicalNode,\n type Spread,\n} from 'lexical'\nimport type { ReactNode } from 'react'\nimport { sanitizeMediaUrl } from '../urlSafety'\n\n/** Serialized shape of an {@link ImageNode} (editor-state JSON). */\nexport type SerializedImageNode = Spread<{ src: string; alt: string }, SerializedLexicalNode>\n\n/** Rebuilds an `ImageNode` from a pasted/loaded `<img>` element. */\nfunction convertImageElement(domNode: HTMLElement): DOMConversionOutput | null {\n if (domNode instanceof HTMLImageElement && domNode.src) {\n return { node: $createImageNode(domNode.getAttribute('src') ?? domNode.src, domNode.alt) }\n }\n return null\n}\n\n/**\n * A block-level image node. Renders a plain `<img>` (the `src` may be a remote URL or a base64\n * `data:` URL when inserted via upload). Serializes to a clean `<img src alt>` for the HTML value and\n * parses back from any `<img>` on paste/load.\n */\nexport class ImageNode extends DecoratorNode<ReactNode> {\n __src: string\n __alt: string\n\n static getType(): string {\n return 'tz-image'\n }\n\n static clone(node: ImageNode): ImageNode {\n return new ImageNode(node.__src, node.__alt, node.__key)\n }\n\n constructor(src: string, alt = '', key?: NodeKey) {\n super(key)\n // sanitize here so every path (insert, paste import, JSON load, clone) gets a safe scheme\n this.__src = sanitizeMediaUrl(src)\n this.__alt = alt\n }\n\n static importJSON(json: SerializedImageNode): ImageNode {\n return $createImageNode(json.src, json.alt)\n }\n\n exportJSON(): SerializedImageNode {\n return { ...super.exportJSON(), type: 'tz-image', version: 1, src: this.__src, alt: this.__alt }\n }\n\n static importDOM(): DOMConversionMap | null {\n return { img: () => ({ conversion: convertImageElement, priority: 0 }) }\n }\n\n exportDOM(): DOMExportOutput {\n const element = document.createElement('img')\n element.setAttribute('src', this.__src)\n element.setAttribute('alt', this.__alt)\n return { element }\n }\n\n /** A block wrapper; the actual `<img>` is rendered by {@link decorate}. */\n createDOM(): HTMLElement {\n const div = document.createElement('div')\n div.style.display = 'contents'\n return div\n }\n\n updateDOM(): false {\n return false\n }\n\n getSrc(): string {\n return this.__src\n }\n\n getAltText(): string {\n return this.__alt\n }\n\n decorate(): ReactNode {\n return <img src={this.__src} alt={this.__alt} draggable={false} />\n }\n}\n\n/** Creates an `ImageNode` (use inside an `editor.update`). */\nexport function $createImageNode(src: string, alt = ''): ImageNode {\n return $applyNodeReplacement(new ImageNode(src, alt))\n}\n\n/** Type guard for `ImageNode`. */\nexport function $isImageNode(node: LexicalNode | null | undefined): node is ImageNode {\n return node instanceof ImageNode\n}\n","import {\n $applyNodeReplacement,\n DecoratorNode,\n type DOMConversionMap,\n type DOMConversionOutput,\n type DOMExportOutput,\n type LexicalNode,\n type NodeKey,\n type SerializedLexicalNode,\n type Spread,\n} from 'lexical'\nimport type { ReactNode } from 'react'\nimport { useT } from '../../../theme'\nimport { sanitizeMediaUrl } from '../urlSafety'\n\n/** Serialized shape of a {@link VideoNode} (editor-state JSON). */\nexport type SerializedVideoNode = Spread<{ src: string }, SerializedLexicalNode>\n\n/** A direct video file (rendered with `<video controls>` rather than an embed `<iframe>`). */\nfunction isFileVideo(src: string): boolean {\n return /\\.(mp4|webm|ogg|ogv|mov|m4v)(\\?.*)?$/i.test(src)\n}\n\n/**\n * Normalizes a pasted video URL into an embeddable one — YouTube/Vimeo watch links become their\n * `embed` form; everything else (incl. already-embed URLs and direct files) is returned unchanged,\n * so the conversion is idempotent across HTML round-trips.\n */\nexport function toVideoEmbedSrc(raw: string): string {\n const youtube = raw.match(\n /(?:youtube\\.com\\/(?:watch\\?(?:.*&)?v=|embed\\/|shorts\\/)|youtu\\.be\\/)([\\w-]{11})/,\n )\n if (youtube) return `https://www.youtube.com/embed/${youtube[1]}`\n const vimeo = raw.match(/vimeo\\.com\\/(?:video\\/)?(\\d+)/)\n if (vimeo) return `https://player.vimeo.com/video/${vimeo[1]}`\n return raw\n}\n\n/** Rebuilds a `VideoNode` from a pasted/loaded `<iframe>` or `<video>` element. */\nfunction convertVideoElement(domNode: HTMLElement): DOMConversionOutput | null {\n const src = domNode.getAttribute('src') || domNode.querySelector('source')?.getAttribute('src')\n if (src) return { node: $createVideoNode(src) }\n return null\n}\n\n/**\n * A block-level video node. Direct media files render with `<video controls>`; everything else is\n * treated as an embed and renders in a responsive `<iframe>` (YouTube/Vimeo links are normalized to\n * their embed URL). Serializes to a clean `<video>` / `<iframe>` for the HTML value.\n */\nexport class VideoNode extends DecoratorNode<ReactNode> {\n __src: string\n\n static getType(): string {\n return 'tz-video'\n }\n\n static clone(node: VideoNode): VideoNode {\n return new VideoNode(node.__src, node.__key)\n }\n\n constructor(src: string, key?: NodeKey) {\n super(key)\n // sanitize here so every path (insert, paste import, JSON load, clone) gets a safe scheme\n this.__src = sanitizeMediaUrl(src)\n }\n\n static importJSON(json: SerializedVideoNode): VideoNode {\n return $createVideoNode(json.src)\n }\n\n exportJSON(): SerializedVideoNode {\n return { ...super.exportJSON(), type: 'tz-video', version: 1, src: this.__src }\n }\n\n static importDOM(): DOMConversionMap | null {\n return {\n iframe: () => ({ conversion: convertVideoElement, priority: 0 }),\n video: () => ({ conversion: convertVideoElement, priority: 0 }),\n }\n }\n\n exportDOM(): DOMExportOutput {\n if (isFileVideo(this.__src)) {\n const video = document.createElement('video')\n video.setAttribute('src', this.__src)\n video.setAttribute('controls', 'true')\n return { element: video }\n }\n const iframe = document.createElement('iframe')\n iframe.setAttribute('src', this.__src)\n iframe.setAttribute('frameborder', '0')\n iframe.setAttribute('allowfullscreen', 'true')\n iframe.setAttribute(\n 'allow',\n 'accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture',\n )\n return { element: iframe }\n }\n\n /** A block wrapper; the actual media element is rendered by {@link decorate}. */\n createDOM(): HTMLElement {\n const div = document.createElement('div')\n div.style.display = 'contents'\n return div\n }\n\n updateDOM(): false {\n return false\n }\n\n getSrc(): string {\n return this.__src\n }\n\n decorate(): ReactNode {\n if (isFileVideo(this.__src)) return <video src={this.__src} controls />\n return <VideoEmbed src={this.__src} />\n }\n}\n\n/** The in-editor embed `<iframe>` — a component so its `title` can be localized via `useT()`. */\nfunction VideoEmbed({ src }: { src: string }) {\n const t = useT()\n return (\n <div className=\"tz-rte-embed\">\n <iframe\n src={src}\n title={t('rte.embeddedVideo')}\n frameBorder={0}\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n />\n </div>\n )\n}\n\n/** Creates a `VideoNode`, normalizing the URL to an embeddable one (use inside an `editor.update`). */\nexport function $createVideoNode(src: string): VideoNode {\n return $applyNodeReplacement(new VideoNode(toVideoEmbedSrc(src)))\n}\n\n/** Type guard for `VideoNode`. */\nexport function $isVideoNode(node: LexicalNode | null | undefined): node is VideoNode {\n return node instanceof VideoNode\n}\n","import { useCallback, useEffect, useRef, useState, type ChangeEvent } from 'react'\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport {\n $createParagraphNode,\n $getSelection,\n $isElementNode,\n $isRangeSelection,\n CAN_REDO_COMMAND,\n CAN_UNDO_COMMAND,\n COMMAND_PRIORITY_LOW,\n FORMAT_ELEMENT_COMMAND,\n FORMAT_TEXT_COMMAND,\n REDO_COMMAND,\n SELECTION_CHANGE_COMMAND,\n UNDO_COMMAND,\n type ElementFormatType,\n type TextFormatType,\n} from 'lexical'\nimport {\n $createHeadingNode,\n $createQuoteNode,\n $isHeadingNode,\n $isQuoteNode,\n type HeadingTagType,\n} from '@lexical/rich-text'\nimport {\n INSERT_CHECK_LIST_COMMAND,\n INSERT_ORDERED_LIST_COMMAND,\n INSERT_UNORDERED_LIST_COMMAND,\n ListNode,\n REMOVE_LIST_COMMAND,\n} from '@lexical/list'\nimport { $isLinkNode, TOGGLE_LINK_COMMAND } from '@lexical/link'\nimport { sanitizeLinkUrl } from './urlSafety'\nimport { toast } from '../Toast/toastStore'\nimport { useT, type MessageKey } from '../../theme'\nimport {\n $getSelectionStyleValueForProperty,\n $patchStyleText,\n $setBlocksType,\n} from '@lexical/selection'\nimport { $findMatchingParent, $getNearestNodeOfType, mergeRegister } from '@lexical/utils'\nimport { $insertNodeToNearestRoot } from '@lexical/utils'\nimport type { IconName } from '../../icons/names'\nimport { Button } from '../Button'\nimport { ColorPickerPanel, DEFAULT_SWATCHES } from '../ColorPicker/ColorPickerPanel'\nimport { Divider } from '../Divider'\nimport { Dropdown } from '../Dropdown'\nimport { FloatingPanel } from '../FloatingPanel/FloatingPanel'\nimport { Icon } from '../Icon'\nimport { IconButton } from '../IconButton'\nimport { ListItem } from '../List'\nimport { Modal } from '../Modal'\nimport { TextField } from '../TextField'\nimport { $createImageNode } from './nodes/ImageNode'\nimport { $createVideoNode } from './nodes/VideoNode'\nimport styles from './RichTextEditor.module.css'\n\ntype Size = 'sm' | 'md' | 'lg'\ntype BlockType = 'paragraph' | HeadingTagType | 'quote' | 'bullet' | 'number' | 'check'\n\n// Block-type labels stay **English in every language** by design — \"Paragraph\" / \"Heading\" are\n// editor-standard terms the maintainer prefers untranslated, so these are literals, not i18n keys.\nconst BLOCK_LABEL: Partial<Record<BlockType, string>> = {\n paragraph: 'Paragraph',\n h1: 'Heading 1',\n h2: 'Heading 2',\n h3: 'Heading 3',\n quote: 'Quote',\n bullet: 'Bullet List',\n number: 'Numbered List',\n check: 'Check List',\n}\n\n/** Items in the block-type dropdown — lists & quote are standalone toolbar buttons; check lists are excluded. */\nconst BLOCKS: { type: BlockType; icon?: IconName }[] = [\n { type: 'paragraph', icon: 'Text' },\n { type: 'h1', icon: 'Hashtag' },\n { type: 'h2', icon: 'Hashtag' },\n { type: 'h3', icon: 'Hashtag' },\n]\n\n/** Text-alignment controls (set the block element's `text-align`); `labelKey` resolves via `t`. */\nconst ALIGNS: { value: ElementFormatType; labelKey: MessageKey; icon: IconName }[] = [\n { value: 'left', labelKey: 'rte.alignLeft', icon: 'TextalignLeft' },\n { value: 'center', labelKey: 'rte.alignCenter', icon: 'TextalignCenter' },\n { value: 'right', labelKey: 'rte.alignRight', icon: 'TextalignRight' },\n]\n\n/** Font-size options (the `font-size` style value). */\nconst FONT_SIZES = ['10px', '12px', '14px', '16px', '18px', '20px']\n\n/** The editor's default content size per `size` (mirrors `.content` in the CSS) — shown active when the\n * selection has no explicit `font-size`. */\nconst DEFAULT_FONT_SIZE: Record<Size, string> = { sm: '12px', md: '14px', lg: '16px' }\n\n/** Config for the shared URL-input `Modal` (link / image-by-URL / video) — replaces `window.prompt`. */\ntype UrlDialog = {\n icon: IconName\n title: string\n label: string\n placeholder: string\n confirmLabel: string\n onConfirm: (url: string) => void\n}\n\n/** The text-color button glyph — a brush icon with a corner triangle tinted with the current text\n * color (so the selected color is always visible). Accepts the `size` `IconButton` injects so it\n * doesn't hit the DOM. */\nfunction ColorGlyph({ color, size }: { color: string; size?: Size }) {\n return (\n <span className={styles.colorGlyph}>\n <Icon name=\"Brush\" size={size} />\n <span\n className={styles.colorBar}\n style={{ borderColor: `transparent transparent ${color || 'currentColor'} transparent` }}\n aria-hidden=\"true\"\n />\n </span>\n )\n}\n\nexport interface ToolbarProps {\n size: Size\n disabled: boolean\n /** Optional async upload — when set, an inserted image uses the returned URL instead of a base64 data URL. */\n onImageUpload?: (file: File) => Promise<string>\n}\n\n/** The editor toolbar — reads the live selection and dispatches Lexical commands. */\nexport function Toolbar({ size, disabled, onImageUpload }: ToolbarProps) {\n const t = useT()\n const blockLabel = (b: BlockType): string => BLOCK_LABEL[b] ?? b // h4–h6 aren't offered by the editor\n const [editor] = useLexicalComposerContext()\n const fileInputRef = useRef<HTMLInputElement>(null)\n\n const [isBold, setIsBold] = useState(false)\n const [isItalic, setIsItalic] = useState(false)\n const [isUnderline, setIsUnderline] = useState(false)\n const [isLink, setIsLink] = useState(false)\n const [linkUrl, setLinkUrl] = useState('')\n const [blockType, setBlockType] = useState<BlockType>('paragraph')\n const [elementFormat, setElementFormat] = useState<ElementFormatType>('left')\n const [fontSize, setFontSize] = useState('')\n const [textColor, setTextColor] = useState('')\n const [colorOpen, setColorOpen] = useState(false)\n const colorTriggerRef = useRef<HTMLButtonElement | null>(null)\n const [canUndo, setCanUndo] = useState(false)\n const [canRedo, setCanRedo] = useState(false)\n // shared URL-input modal (link / image-by-URL / video)\n const [urlDialog, setUrlDialog] = useState<UrlDialog | null>(null)\n const [urlValue, setUrlValue] = useState('')\n\n const syncState = useCallback(() => {\n const selection = $getSelection()\n if (!$isRangeSelection(selection)) return\n setIsBold(selection.hasFormat('bold'))\n setIsItalic(selection.hasFormat('italic'))\n setIsUnderline(selection.hasFormat('underline'))\n setTextColor($getSelectionStyleValueForProperty(selection, 'color', ''))\n setFontSize($getSelectionStyleValueForProperty(selection, 'font-size', ''))\n\n const anchorNode = selection.anchor.getNode()\n const parent = anchorNode.getParent()\n const linkNode = $isLinkNode(anchorNode) ? anchorNode : $isLinkNode(parent) ? parent : null\n setIsLink(linkNode !== null)\n setLinkUrl(linkNode?.getURL() ?? '')\n\n // the block element under the cursor — drives both the alignment and block-type state\n const element =\n anchorNode.getKey() === 'root'\n ? anchorNode\n : ($findMatchingParent(anchorNode, (e) => {\n const parent = e.getParent()\n return parent === null || parent.getKey() === 'root'\n }) ?? anchorNode.getTopLevelElement())\n\n setElementFormat(($isElementNode(element) && element.getFormatType()) || 'left')\n\n const listNode = $getNearestNodeOfType(anchorNode, ListNode)\n if (listNode) setBlockType(listNode.getListType())\n else if ($isHeadingNode(element)) setBlockType(element.getTag())\n else if ($isQuoteNode(element)) setBlockType('quote')\n else setBlockType('paragraph')\n }, [])\n\n useEffect(() => {\n return mergeRegister(\n editor.registerUpdateListener(({ editorState }) => editorState.read(syncState)),\n editor.registerCommand(\n SELECTION_CHANGE_COMMAND,\n () => {\n syncState()\n return false\n },\n COMMAND_PRIORITY_LOW,\n ),\n editor.registerCommand(\n CAN_UNDO_COMMAND,\n (payload) => {\n setCanUndo(payload)\n return false\n },\n COMMAND_PRIORITY_LOW,\n ),\n editor.registerCommand(\n CAN_REDO_COMMAND,\n (payload) => {\n setCanRedo(payload)\n return false\n },\n COMMAND_PRIORITY_LOW,\n ),\n )\n }, [editor, syncState])\n\n const format = (type: TextFormatType) => editor.dispatchCommand(FORMAT_TEXT_COMMAND, type)\n\n const applyAlign = (fmt: ElementFormatType) => editor.dispatchCommand(FORMAT_ELEMENT_COMMAND, fmt)\n\n // apply the picked color to the (retained) selection; `''` clears it back to the default\n const applyColor = (color: string) => {\n setTextColor(color)\n editor.update(() => {\n const selection = $getSelection()\n if ($isRangeSelection(selection)) $patchStyleText(selection, { color: color || null })\n })\n }\n\n // apply a font size to the (retained) selection; `''` clears it back to the editor default\n const applyFontSize = (value: string) => {\n setFontSize(value)\n editor.update(() => {\n const selection = $getSelection()\n if ($isRangeSelection(selection)) $patchStyleText(selection, { 'font-size': value || null })\n })\n }\n\n const applyBlock = (type: BlockType) => {\n if (type === 'bullet' || type === 'number' || type === 'check') {\n if (blockType === type) {\n editor.dispatchCommand(REMOVE_LIST_COMMAND, undefined)\n } else {\n const command =\n type === 'bullet'\n ? INSERT_UNORDERED_LIST_COMMAND\n : type === 'number'\n ? INSERT_ORDERED_LIST_COMMAND\n : INSERT_CHECK_LIST_COMMAND\n editor.dispatchCommand(command, undefined)\n }\n return\n }\n editor.update(() => {\n const selection = $getSelection()\n if (!$isRangeSelection(selection)) return\n if (type === 'paragraph') $setBlocksType(selection, () => $createParagraphNode())\n else if (type === 'quote') $setBlocksType(selection, () => $createQuoteNode())\n else $setBlocksType(selection, () => $createHeadingNode(type))\n })\n }\n\n const toggleQuote = () => applyBlock(blockType === 'quote' ? 'paragraph' : 'quote')\n\n // open the shared URL modal (prefilled value + handler differ per action)\n const openUrlDialog = (config: UrlDialog, initial = '') => {\n setUrlValue(initial)\n setUrlDialog(config)\n }\n const closeUrlDialog = () => setUrlDialog(null)\n const confirmUrlDialog = () => {\n urlDialog?.onConfirm(urlValue.trim())\n setUrlDialog(null)\n }\n\n const insertLink = () =>\n openUrlDialog(\n {\n icon: 'Link2',\n title: t('rte.linkTitle'),\n label: t('rte.linkUrl'),\n placeholder: 'https://example.com',\n confirmLabel: isLink ? t('common.update') : t('common.insert'),\n // an empty value removes the link (matches the old prompt behavior); sanitize the scheme\n onConfirm: (url) =>\n editor.dispatchCommand(TOGGLE_LINK_COMMAND, url === '' ? null : sanitizeLinkUrl(url)),\n },\n linkUrl, // prefill the current link's URL when the cursor sits in one\n )\n\n const insertImageByUrl = () =>\n openUrlDialog({\n icon: 'GalleryAdd',\n title: t('rte.imageTitle'),\n label: t('rte.imageUrl'),\n placeholder: 'https://example.com/image.jpg',\n confirmLabel: t('common.insert'),\n onConfirm: (url) => {\n if (url) editor.update(() => $insertNodeToNearestRoot($createImageNode(url)))\n },\n })\n\n const onImageFile = async (event: ChangeEvent<HTMLInputElement>) => {\n const file = event.target.files?.[0]\n event.target.value = '' // allow re-picking the same file\n if (!file) return\n try {\n const url = onImageUpload ? await onImageUpload(file) : await fileToDataUrl(file)\n editor.update(() => $insertNodeToNearestRoot($createImageNode(url, file.name)))\n } catch {\n // a rejecting consumer upload handler (or a failed data-URL read) shouldn't fail silently\n toast.error(t('rte.imageError'))\n }\n }\n\n const insertVideo = () =>\n openUrlDialog({\n icon: 'VideoSquare',\n title: t('rte.videoTitle'),\n label: t('rte.videoUrl'),\n placeholder: t('rte.videoUrlPlaceholder'),\n confirmLabel: t('common.insert'),\n onConfirm: (url) => {\n if (url) editor.update(() => $insertNodeToNearestRoot($createVideoNode(url)))\n },\n })\n\n /** A format toggle — soft-filled while active. */\n const fmtBtn = (\n active: boolean,\n label: string,\n onClick: () => void,\n child: React.ReactNode,\n key?: string,\n ) => (\n <IconButton\n key={key}\n variant={active ? 'filled' : 'text'}\n color=\"primary\"\n size={size}\n disabled={disabled}\n aria-label={label}\n aria-pressed={active}\n onMouseDown={(e) => e.preventDefault()} // keep focus/selection in the editor\n onClick={onClick}\n >\n {child}\n </IconButton>\n )\n\n // the block dropdown only manages Paragraph / Headings — lists & quote are separate toggle buttons,\n // so when the cursor is in a list/quote/check the trigger shows \"Paragraph\", not e.g. \"Bullet List\".\n const dropdownBlock: BlockType = blockType.startsWith('h') ? blockType : 'paragraph'\n\n // font-size shown active: the selection's explicit size, else the editor's default for this `size`\n const effectiveFontSize = fontSize || DEFAULT_FONT_SIZE[size]\n\n return (\n <div\n className={styles.toolbar}\n role=\"toolbar\"\n aria-label={t('rte.formatting')}\n aria-orientation=\"horizontal\"\n >\n <IconButton\n variant=\"text\"\n color=\"primary\"\n size={size}\n disabled={disabled || !canUndo}\n aria-label={t('rte.undo')}\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => editor.dispatchCommand(UNDO_COMMAND, undefined)}\n >\n <Icon name=\"UndoArrow\" />\n </IconButton>\n <IconButton\n variant=\"text\"\n color=\"primary\"\n size={size}\n disabled={disabled || !canRedo}\n aria-label={t('rte.redo')}\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => editor.dispatchCommand(REDO_COMMAND, undefined)}\n >\n <Icon name=\"RedoArrow\" />\n </IconButton>\n\n <Divider orientation=\"vertical\" />\n\n <Dropdown\n size={size}\n disabled={disabled}\n minWidth={false}\n trigger={\n <Button\n variant=\"text\"\n color=\"primary\"\n size={size}\n disabled={disabled}\n endIcon={<Icon name=\"ArrowDown4\" />}\n aria-label={t('rte.fontSize')}\n onMouseDown={(e) => e.preventDefault()} // keep the selection while opening\n >\n {effectiveFontSize}\n </Button>\n }\n >\n {FONT_SIZES.map((f) => (\n <ListItem\n key={f}\n clickable\n selected={f === effectiveFontSize}\n onClick={() => applyFontSize(f)}\n >\n {f}\n </ListItem>\n ))}\n </Dropdown>\n\n <Divider orientation=\"vertical\" />\n\n <Dropdown\n size={size}\n disabled={disabled}\n trigger={\n <Button\n variant=\"text\"\n color=\"primary\"\n size={size}\n disabled={disabled}\n endIcon={<Icon name=\"ArrowDown4\" />}\n onMouseDown={(e) => e.preventDefault()} // keep the selection while opening\n >\n {blockLabel(dropdownBlock)}\n </Button>\n }\n >\n {BLOCKS.map((b) => (\n <ListItem\n key={b.type}\n clickable\n selected={dropdownBlock === b.type}\n icon={b.icon}\n onClick={() => applyBlock(b.type)}\n >\n {blockLabel(b.type)}\n </ListItem>\n ))}\n </Dropdown>\n\n <Divider orientation=\"vertical\" />\n\n {fmtBtn(isBold, t('rte.bold'), () => format('bold'), <Icon name=\"TextBold\" />)}\n {fmtBtn(isItalic, t('rte.italic'), () => format('italic'), <Icon name=\"TextItalic\" />)}\n {fmtBtn(\n isUnderline,\n t('rte.underline'),\n () => format('underline'),\n <Icon name=\"TextUnderline\" />,\n )}\n\n <Divider orientation=\"vertical\" />\n\n {fmtBtn(\n blockType === 'bullet',\n t('rte.bulletList'),\n () => applyBlock('bullet'),\n <Icon name=\"ListBullet\" />,\n )}\n {fmtBtn(\n blockType === 'number',\n t('rte.numberedList'),\n () => applyBlock('number'),\n <Icon name=\"ListNumber\" />,\n )}\n {fmtBtn(blockType === 'quote', t('rte.quote'), toggleQuote, <Icon name=\"QuoteUp\" />)}\n\n <Divider orientation=\"vertical\" />\n\n {ALIGNS.map((a) =>\n fmtBtn(\n elementFormat === a.value,\n t(a.labelKey),\n () => applyAlign(a.value),\n <Icon name={a.icon} />,\n a.value,\n ),\n )}\n\n <Divider orientation=\"vertical\" />\n\n <IconButton\n ref={colorTriggerRef}\n variant=\"text\"\n color=\"primary\"\n size={size}\n disabled={disabled}\n aria-label={t('rte.textColor')}\n aria-expanded={colorOpen}\n onMouseDown={(e) => e.preventDefault()} // keep the editor's selection while opening\n onClick={() => setColorOpen((o) => !o)}\n >\n <ColorGlyph color={textColor} />\n </IconButton>\n <FloatingPanel\n open={colorOpen}\n triggerRef={colorTriggerRef}\n onClose={(refocus) => {\n setColorOpen(false)\n if (refocus) colorTriggerRef.current?.focus()\n }}\n role=\"dialog\"\n ariaLabel={t('rte.textColor')}\n width={232}\n >\n {/* no \"no color\" swatch; with no explicit color the accent default (first swatch) shows selected */}\n <ColorPickerPanel\n value={textColor || DEFAULT_SWATCHES[0]}\n onChange={applyColor}\n clearable={false}\n />\n </FloatingPanel>\n\n {fmtBtn(isLink, t('rte.link'), insertLink, <Icon name=\"Link2\" />)}\n\n <Dropdown\n size={size}\n disabled={disabled}\n minWidth={false}\n trigger={\n <IconButton\n variant=\"text\"\n color=\"primary\"\n size={size}\n disabled={disabled}\n aria-label={t('rte.insertImage')}\n >\n <Icon name=\"GalleryAdd\" />\n </IconButton>\n }\n >\n <ListItem clickable icon=\"GalleryImport\" onClick={() => fileInputRef.current?.click()}>\n {t('rte.uploadImage')}\n </ListItem>\n <ListItem clickable icon=\"Link\" onClick={insertImageByUrl}>\n {t('rte.imageByUrl')}\n </ListItem>\n </Dropdown>\n\n <IconButton\n variant=\"text\"\n color=\"primary\"\n size={size}\n disabled={disabled}\n aria-label={t('rte.insertVideo')}\n onClick={insertVideo}\n >\n <Icon name=\"VideoSquare\" />\n </IconButton>\n\n <input\n ref={fileInputRef}\n type=\"file\"\n accept=\"image/*\"\n hidden\n onChange={onImageFile}\n aria-hidden=\"true\"\n tabIndex={-1}\n />\n\n {/* shared URL-input dialog for link / image-by-URL / video (replaces window.prompt). The footer\n Submit drives the body <form> via the `form` attribute (works across the modal's portal). */}\n <Modal\n open={urlDialog !== null}\n onClose={closeUrlDialog}\n size=\"sm\"\n icon={urlDialog?.icon}\n title={urlDialog?.title}\n footer={\n <>\n <Button variant=\"text\" size=\"sm\" onClick={closeUrlDialog}>\n {t('common.cancel')}\n </Button>\n <Button type=\"submit\" size=\"sm\" form=\"rte-url-form\">\n {urlDialog?.confirmLabel ?? t('common.insert')}\n </Button>\n </>\n }\n >\n <form\n id=\"rte-url-form\"\n onSubmit={(e) => {\n e.preventDefault()\n confirmUrlDialog()\n }}\n >\n <TextField\n label={urlDialog?.label}\n placeholder={urlDialog?.placeholder}\n value={urlValue}\n onChange={(e) => setUrlValue(e.target.value)}\n />\n </form>\n </Modal>\n </div>\n )\n}\n\n/** Reads a picked file into a base64 `data:` URL (the no-backend default for image upload). */\nfunction fileToDataUrl(file: File): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader()\n reader.onload = () => resolve(reader.result as string)\n reader.onerror = () => reject(reader.error)\n reader.readAsDataURL(file)\n })\n}\n","import {\n forwardRef,\n useCallback,\n useEffect,\n useRef,\n type CSSProperties,\n type FocusEvent,\n type ReactNode,\n} from 'react'\nimport { clsx } from 'clsx'\nimport {\n $createParagraphNode,\n $getRoot,\n $insertNodes,\n $isParagraphNode,\n $setSelection,\n type EditorThemeClasses,\n} from 'lexical'\nimport { LexicalComposer } from '@lexical/react/LexicalComposer'\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { RichTextPlugin } from '@lexical/react/LexicalRichTextPlugin'\nimport { ContentEditable } from '@lexical/react/LexicalContentEditable'\nimport { LexicalErrorBoundary } from '@lexical/react/LexicalErrorBoundary'\nimport { HistoryPlugin } from '@lexical/react/LexicalHistoryPlugin'\nimport { ListPlugin } from '@lexical/react/LexicalListPlugin'\nimport { CheckListPlugin } from '@lexical/react/LexicalCheckListPlugin'\nimport { LinkPlugin } from '@lexical/react/LexicalLinkPlugin'\nimport { MarkdownShortcutPlugin } from '@lexical/react/LexicalMarkdownShortcutPlugin'\nimport {\n ELEMENT_TRANSFORMERS,\n TEXT_FORMAT_TRANSFORMERS,\n TEXT_MATCH_TRANSFORMERS,\n} from '@lexical/markdown'\nimport { HeadingNode, QuoteNode } from '@lexical/rich-text'\nimport { ListItemNode, ListNode } from '@lexical/list'\nimport { LinkNode } from '@lexical/link'\nimport { sanitizeLinkUrl } from './urlSafety'\nimport { $generateHtmlFromNodes, $generateNodesFromDOM } from '@lexical/html'\nimport { useT } from '../../theme'\nimport { useFormContext } from '../../form/formContext'\nimport { Typography } from '../Typography'\nimport { Toolbar } from './Toolbar'\nimport { ImageNode } from './nodes/ImageNode'\nimport { VideoNode } from './nodes/VideoNode'\nimport styles from './RichTextEditor.module.css'\n\nexport type RichTextEditorSize = 'sm' | 'md' | 'lg'\n\n/** Lexical node-type → CSS-module class map (so content is styled with `--tz-*` tokens). */\nconst THEME: EditorThemeClasses = {\n paragraph: styles.paragraph,\n heading: {\n h1: styles.h1,\n h2: styles.h2,\n h3: styles.h3,\n h4: styles.h4,\n h5: styles.h5,\n h6: styles.h6,\n },\n quote: styles.quote,\n list: {\n ul: styles.ul,\n ol: styles.ol,\n listitem: styles.li,\n listitemChecked: styles.liChecked,\n listitemUnchecked: styles.liUnchecked,\n nested: { listitem: styles.nestedLi },\n },\n link: styles.link,\n text: {\n bold: styles.bold,\n italic: styles.italic,\n underline: styles.underline,\n strikethrough: styles.strike,\n code: styles.codeInline,\n },\n}\n\nconst EDITOR_NODES = [\n HeadingNode,\n QuoteNode,\n ListNode,\n ListItemNode,\n LinkNode,\n ImageNode,\n VideoNode,\n]\n\n/**\n * Markdown shortcuts for headings/quote/lists + inline formats + links. Excludes the multiline\n * fenced-code-block transformer (it needs `CodeNode`, which is out of scope for v1).\n */\nconst MARKDOWN_TRANSFORMERS = [\n ...ELEMENT_TRANSFORMERS,\n ...TEXT_FORMAT_TRANSFORMERS,\n ...TEXT_MATCH_TRANSFORMERS,\n]\n\n/**\n * Strips the editor's (hashed, CSS-module) `class` attributes from exported HTML so the value is clean,\n * portable markup (`<h2>` not `<h2 class=\"_h2_ab12\">`). Classes aren't needed to re-import — parsing\n * keys off tag names — so this is round-trip-safe.\n */\nfunction cleanExportedHtml(html: string): string {\n if (typeof document === 'undefined') return html\n const template = document.createElement('template')\n template.innerHTML = html\n template.content.querySelectorAll('[class]').forEach((el) => el.removeAttribute('class'))\n return template.innerHTML\n}\n\n/**\n * True when the editor holds nothing but an empty paragraph (Lexical's \"blank\" state, which serializes\n * to `<p><br></p>`). Lets the value emit `''` instead, so a cleared editor reads as truly empty (and a\n * `required` rule fires). Call inside an `editor.read`/`update`.\n */\nfunction $isEditorEmpty(): boolean {\n const root = $getRoot()\n const first = root.getFirstChild()\n return (\n root.getChildrenSize() <= 1 &&\n (first === null || ($isParagraphNode(first) && first.getChildrenSize() === 0))\n )\n}\n\n/** Replaces the editor's content with the nodes parsed from an HTML string (call inside `editor.update`). */\nfunction $setRootFromHtml(editor: Parameters<typeof $generateNodesFromDOM>[0], html: string) {\n const root = $getRoot()\n root.clear()\n if (html) {\n const dom = new DOMParser().parseFromString(html, 'text/html')\n const nodes = $generateNodesFromDOM(editor, dom)\n root.select()\n $insertNodes(nodes)\n }\n if (root.getChildrenSize() === 0) root.append($createParagraphNode())\n // clear the caret the insert left at the end of the content — otherwise Lexical scrolls it into\n // view when setting the initial/controlled value on mount, dragging the whole page down to a\n // below-the-fold editor (e.g. the prefilled RTEs on the Edit form). Focus re-places it later.\n $setSelection(null)\n}\n\ninterface ValuePluginProps {\n value?: string\n defaultValue?: string\n onChange: (html: string) => void\n disabled: boolean\n}\n\n/** Bridges the HTML `value` ↔ the Lexical editor state, and toggles read-only mode. */\nfunction ValuePlugin({ value, defaultValue, onChange, disabled }: ValuePluginProps) {\n const [editor] = useLexicalComposerContext()\n // the last HTML we wrote-in or emitted-out — guards the controlled-sync ↔ onChange feedback loop\n const lastHtml = useRef<string | undefined>(undefined)\n const onChangeRef = useRef(onChange)\n onChangeRef.current = onChange\n\n useEffect(() => editor.setEditable(!disabled), [editor, disabled])\n\n // neutralize unsafe link schemes (javascript:, data:, …) on every LinkNode — covers pasted anchors\n // as well as toolbar inserts (which are also pre-sanitized), so no script URL survives into the value\n useEffect(\n () =>\n editor.registerNodeTransform(LinkNode, (node) => {\n const url = node.getURL()\n const safe = sanitizeLinkUrl(url)\n if (safe !== url) node.setURL(safe)\n }),\n [editor],\n )\n\n // initial defaultValue (uncontrolled) — once\n useEffect(() => {\n if (value !== undefined || !defaultValue) return\n lastHtml.current = defaultValue\n editor.update(() => $setRootFromHtml(editor, defaultValue), { tag: 'history-merge' })\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n // controlled value → editor (only on a genuine external change, not our own echo)\n useEffect(() => {\n if (value === undefined || value === lastHtml.current) return\n lastHtml.current = value\n editor.update(() => $setRootFromHtml(editor, value), { tag: 'history-merge' })\n }, [editor, value])\n\n // editor → HTML out. NB: must be `editor.read` (not `editorState.read`) so the active editor is\n // bound — `$generateHtmlFromNodes` → node `createDOM` needs it, else it throws \"no active editor\".\n useEffect(\n () =>\n editor.registerUpdateListener(({ dirtyElements, dirtyLeaves }) => {\n if (dirtyElements.size === 0 && dirtyLeaves.size === 0) return\n editor.read(() => {\n const html = $isEditorEmpty()\n ? ''\n : cleanExportedHtml($generateHtmlFromNodes(editor, null))\n if (html === lastHtml.current) return\n lastHtml.current = html\n onChangeRef.current(html)\n })\n }),\n [editor],\n )\n\n return null\n}\n\nexport interface RichTextEditorProps {\n /** Label rendered above the editor. */\n label?: ReactNode\n /** Preset size — drives toolbar density, content font size and min-height. */\n size?: RichTextEditorSize\n /** Marks the field invalid: red border/ring and `helperText` in the error color. */\n error?: boolean\n /** Helper / validation text under the editor. Adopts the error color while `error`. */\n helperText?: ReactNode\n /** Adds a red asterisk after the label (visual hint). */\n required?: boolean\n /** Read-only mode — the toolbar disables and the content isn't editable. */\n disabled?: boolean\n /** Placeholder shown while the editor is empty. */\n placeholder?: string\n /** Form field name — auto-binds value/validation to a surrounding `<Form>` (value = the HTML string). */\n name?: string\n /** Controlled HTML value. */\n value?: string\n /** Initial HTML value (uncontrolled). */\n defaultValue?: string\n /** Fires with the serialized **HTML** on every edit. */\n onChange?: (html: string) => void\n /**\n * Async image upload. When provided, an uploaded image is sent through this and the returned URL is\n * inserted; when omitted, the image is embedded inline as a base64 `data:` URL (no backend needed).\n */\n onImageUpload?: (file: File) => Promise<string>\n /** Min height of the editable area in px. Defaults to `220`. */\n minHeight?: number\n /** Accessible label for the editable region. Defaults to `'Rich text editor'`. */\n 'aria-label'?: string\n className?: string\n style?: CSSProperties\n}\n\n/**\n * A rich text editor built on **Lexical** (an optional peer — install `lexical` + `@lexical/*`). Its\n * value is an **HTML string**: bold/italic/underline/strikethrough/inline-code, headings, lists\n * (bullet/ordered/check), links, block quote, plus **images** (insert by URL or upload — embedded as a\n * base64 `data:` URL unless an `onImageUpload` handler is given) and **video** embeds (paste a\n * YouTube/Vimeo/file URL). Markdown shortcuts work while typing (`# `, `- `, `> `, …). The toolbar is\n * built from the library's own `IconButton`/`Button`/`Dropdown`, and the content is styled entirely\n * with `--tz-*` tokens. Controlled (`value` + `onChange`) or uncontrolled (`defaultValue`); inside a\n * `<Form>`, a `name` prop auto-binds the HTML value (validate with e.g. `z.string().min(1)`).\n */\nexport const RichTextEditor = forwardRef<HTMLDivElement, RichTextEditorProps>(\n function RichTextEditor(\n {\n label,\n size = 'md',\n error,\n helperText,\n required = false,\n disabled = false,\n placeholder,\n name,\n value,\n defaultValue,\n onChange,\n onImageUpload,\n minHeight = 220,\n 'aria-label': ariaLabel = 'Rich text editor',\n className,\n style,\n },\n ref,\n ) {\n const t = useT()\n const form = useFormContext()\n const bound = form && name ? form.field(name) : undefined\n const resolvedError = error ?? bound?.error ?? false\n const resolvedHelperText = helperText ?? bound?.helperText\n\n const formValue = form && name ? (form.values as Record<string, unknown>)[name] : undefined\n const effValue =\n value !== undefined ? value : form && name ? String(formValue ?? '') : undefined\n\n const handleChange = useCallback(\n (html: string) => {\n if (form && name) form.setValue(name, html as never)\n onChange?.(html)\n },\n [form, name, onChange],\n )\n\n const handleBlur = (event: FocusEvent<HTMLDivElement>) => bound?.onBlur(event as never)\n\n // Mirror the form `name` onto the editable DOM node so a `<Form>`'s scroll-to-error can find and\n // focus it — the contenteditable isn't an `<input>`, and Lexical's `ContentEditable` doesn't take\n // a `name` prop, so set the attribute imperatively via a ref.\n const contentRef = useRef<HTMLDivElement | null>(null)\n useEffect(() => {\n const el = contentRef.current\n if (!el) return\n if (name) el.setAttribute('name', name)\n else el.removeAttribute('name')\n }, [name])\n\n const initialConfig = {\n namespace: 'tz-rich-text-editor',\n theme: THEME,\n nodes: EDITOR_NODES,\n editable: !disabled,\n onError: (e: Error) => {\n throw e\n },\n }\n\n return (\n <div\n ref={ref}\n className={clsx(\n styles.editor,\n styles[size],\n resolvedError && styles.error,\n disabled && styles.disabled,\n className,\n )}\n style={{ '--tz-rte-min-height': `${minHeight}px`, ...style } as CSSProperties}\n >\n {label != null && (\n <div className={styles.label}>\n <Typography as=\"span\" variant=\"bodySmall\" color=\"muted\">\n {label}\n </Typography>\n {required && (\n <span className={styles.required} aria-hidden=\"true\">\n *\n </span>\n )}\n </div>\n )}\n\n <div className={styles.control}>\n <LexicalComposer initialConfig={initialConfig}>\n <Toolbar size={size} disabled={disabled} onImageUpload={onImageUpload} />\n <div className={styles.shell}>\n <RichTextPlugin\n contentEditable={\n <ContentEditable\n ref={contentRef}\n className={styles.content}\n aria-label={ariaLabel}\n aria-invalid={resolvedError || undefined}\n onBlur={handleBlur}\n />\n }\n placeholder={\n <div className={styles.placeholder}>{placeholder ?? t('rte.placeholder')}</div>\n }\n ErrorBoundary={LexicalErrorBoundary}\n />\n </div>\n <HistoryPlugin />\n <ListPlugin />\n <CheckListPlugin />\n <LinkPlugin />\n <MarkdownShortcutPlugin transformers={MARKDOWN_TRANSFORMERS} />\n <ValuePlugin\n value={effValue}\n defaultValue={defaultValue}\n onChange={handleChange}\n disabled={disabled}\n />\n </LexicalComposer>\n </div>\n\n {resolvedHelperText != null && (\n <Typography\n as=\"span\"\n variant=\"bodySmall\"\n color={resolvedError ? 'error' : 'muted'}\n className={styles.helper}\n >\n {resolvedHelperText}\n </Typography>\n )}\n </div>\n )\n },\n)\n"],"names":["SAFE_LINK","HAS_SCHEME","sanitizeLinkUrl","url","trimmed","sanitizeMediaUrl","safe","convertImageElement","domNode","$createImageNode","ImageNode","DecoratorNode","node","src","alt","key","json","element","div","jsx","$applyNodeReplacement","isFileVideo","toVideoEmbedSrc","raw","youtube","vimeo","convertVideoElement","_a","$createVideoNode","VideoNode","video","iframe","VideoEmbed","useT","BLOCK_LABEL","BLOCKS","ALIGNS","FONT_SIZES","DEFAULT_FONT_SIZE","ColorGlyph","color","size","jsxs","styles","Icon","Toolbar","disabled","onImageUpload","t","blockLabel","b","editor","useLexicalComposerContext","fileInputRef","useRef","isBold","setIsBold","useState","isItalic","setIsItalic","isUnderline","setIsUnderline","isLink","setIsLink","linkUrl","setLinkUrl","blockType","setBlockType","elementFormat","setElementFormat","fontSize","setFontSize","textColor","setTextColor","colorOpen","setColorOpen","colorTriggerRef","canUndo","setCanUndo","canRedo","setCanRedo","urlDialog","setUrlDialog","urlValue","setUrlValue","syncState","useCallback","selection","$getSelection","$isRangeSelection","$getSelectionStyleValueForProperty","anchorNode","parent","linkNode","$isLinkNode","$findMatchingParent","e","$isElementNode","listNode","$getNearestNodeOfType","ListNode","$isHeadingNode","$isQuoteNode","useEffect","mergeRegister","editorState","SELECTION_CHANGE_COMMAND","COMMAND_PRIORITY_LOW","CAN_UNDO_COMMAND","payload","CAN_REDO_COMMAND","format","type","FORMAT_TEXT_COMMAND","applyAlign","fmt","FORMAT_ELEMENT_COMMAND","applyColor","$patchStyleText","applyFontSize","value","applyBlock","REMOVE_LIST_COMMAND","command","INSERT_UNORDERED_LIST_COMMAND","INSERT_ORDERED_LIST_COMMAND","INSERT_CHECK_LIST_COMMAND","$setBlocksType","$createParagraphNode","$createQuoteNode","$createHeadingNode","toggleQuote","openUrlDialog","config","initial","closeUrlDialog","confirmUrlDialog","insertLink","TOGGLE_LINK_COMMAND","insertImageByUrl","$insertNodeToNearestRoot","onImageFile","event","file","fileToDataUrl","toast","insertVideo","fmtBtn","active","label","onClick","child","IconButton","dropdownBlock","effectiveFontSize","UNDO_COMMAND","REDO_COMMAND","Divider","Dropdown","Button","f","ListItem","a","o","FloatingPanel","refocus","ColorPickerPanel","DEFAULT_SWATCHES","Modal","Fragment","TextField","resolve","reject","reader","THEME","EDITOR_NODES","HeadingNode","QuoteNode","ListItemNode","LinkNode","MARKDOWN_TRANSFORMERS","ELEMENT_TRANSFORMERS","TEXT_FORMAT_TRANSFORMERS","TEXT_MATCH_TRANSFORMERS","cleanExportedHtml","html","template","el","$isEditorEmpty","root","$getRoot","first","$isParagraphNode","$setRootFromHtml","dom","nodes","$generateNodesFromDOM","$insertNodes","$setSelection","ValuePlugin","defaultValue","onChange","lastHtml","onChangeRef","dirtyElements","dirtyLeaves","$generateHtmlFromNodes","RichTextEditor","forwardRef","error","helperText","required","placeholder","name","minHeight","ariaLabel","className","style","ref","form","useFormContext","bound","resolvedError","resolvedHelperText","formValue","effValue","handleChange","handleBlur","contentRef","initialConfig","clsx","Typography","LexicalComposer","RichTextPlugin","ContentEditable","LexicalErrorBoundary","HistoryPlugin","ListPlugin","CheckListPlugin","LinkPlugin","MarkdownShortcutPlugin"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"messages-BF2ft7yD.js","sources":["../src/i18n/locales/en.ts","../src/i18n/locales/ka.ts","../src/i18n/locales/es.ts","../src/i18n/locales/de.ts","../src/i18n/locales/it.ts","../src/i18n/locales/fr.ts","../src/i18n/locales/ru.ts","../src/i18n/messages.ts"],"sourcesContent":["import type { Messages } from '../messages'\n\n/**\n * English — the **complete** baseline every other language falls back to, per key. When you add a new\n * key to the `Messages` interface (in `../messages`), fill it here first; the type makes this file the\n * one catalog that must stay exhaustive (the others are `Partial` and fall back here).\n */\nexport const EN_MESSAGES: Messages = {\n 'common.close': 'Close',\n 'common.cancel': 'Cancel',\n 'common.confirm': 'Confirm',\n 'common.delete': 'Delete',\n 'common.remove': 'Remove',\n 'common.loading': 'Loading…',\n 'common.clear': 'Clear',\n 'common.apply': 'Apply',\n 'common.search': 'Search…',\n 'common.all': 'All',\n 'common.any': 'Any',\n 'common.yes': 'Yes',\n 'common.no': 'No',\n 'common.save': 'Save',\n 'common.insert': 'Insert',\n 'common.update': 'Update',\n 'common.done': 'Done',\n 'common.min': 'Min',\n 'common.max': 'Max',\n 'common.from': 'From',\n 'common.to': 'To',\n 'select.placeholder': 'Select…',\n 'select.noOptions': 'No options',\n 'select.clear': 'Clear selection',\n 'multiSelect.clearAll': 'Clear all',\n 'pagination.previous': 'Go to previous page',\n 'pagination.next': 'Go to next page',\n 'pagination.first': 'Go to first page',\n 'pagination.last': 'Go to last page',\n 'pagination.page': 'Go to page {page}',\n 'emptyState.title': 'No Results Found',\n 'errorState.title': 'Something went wrong',\n 'errorState.description': 'An unexpected error occurred. Please try again.',\n 'errorState.retry': 'Try again',\n 'errorState.details': 'Details',\n 'errorState.requestFailed': 'Request failed ({status})',\n 'notFound.title': 'Page Not Found',\n 'notFound.description': \"The page you're looking for doesn't exist or may have moved.\",\n 'notFound.action': 'Back to Home',\n 'userCard.signOut': 'Sign out',\n 'userCard.welcome': 'Welcome',\n 'textField.fieldAction': 'Field action',\n 'phoneField.country': 'Country',\n 'phoneField.search': 'Search countries…',\n 'phoneField.suggested': 'Suggested',\n 'phoneField.allCountries': 'All Countries',\n 'textField.showPassword': 'Show password',\n 'textField.hidePassword': 'Hide password',\n 'textField.capsLock': 'Caps Lock is on',\n 'textField.strengthWeak': 'Weak',\n 'textField.strengthMedium': 'Medium',\n 'textField.strengthStrong': 'Strong',\n 'numberField.decrease': 'Decrease',\n 'numberField.increase': 'Increase',\n 'otpField.digit': 'Digit {index} of {total}',\n 'breadcrumbs.label': 'Breadcrumb',\n 'breadcrumbs.home': 'Home',\n 'pageTitle.back': 'Back',\n 'pageActions.label': 'Actions',\n 'themeToggle.label': 'Toggle color theme',\n 'fullscreenToggle.label': 'Toggle fullscreen',\n 'loader.label': 'Loading',\n 'progress.label': 'Progress',\n 'tagsField.add': 'Add tag',\n 'removeDialog.title': 'Remove',\n 'removeDialog.message': 'Are you sure you want to delete?',\n 'removeDialog.typeToConfirm': 'Type {text} to confirm',\n 'colorPicker.pick': 'Pick a color',\n 'colorPicker.value': 'Color value',\n 'colorPicker.noColor': 'No color',\n 'colorPicker.saturation': 'Saturation and brightness',\n 'colorPicker.hue': 'Hue',\n 'colorPicker.opacity': 'Opacity',\n 'datePicker.clear': 'Clear date',\n 'datePicker.open': 'Open calendar',\n 'calendar.prevMonth': 'Previous month',\n 'calendar.nextMonth': 'Next month',\n 'timePicker.clear': 'Clear time',\n 'timePicker.open': 'Open time picker',\n 'dateTimePicker.clear': 'Clear value',\n 'dateTimePicker.open': 'Open date and time picker',\n 'dateTimePicker.label': 'Date and time',\n 'dateTimePicker.dateTab': 'Date',\n 'dateTimePicker.timeTab': 'Time',\n 'table.export': 'Export',\n 'table.sendOnEmail': 'Send On Email',\n 'table.sort': 'Sort',\n 'table.sortBy': 'Sort By',\n 'table.filters': 'Filters',\n 'table.filtersDescription': 'Narrow the table by the fields below.',\n 'table.dragHandle': 'Drag to reorder',\n 'table.range': '{from}–{to} of {total}',\n 'table.rowsPerPage': 'Rows per page',\n 'calendar.month0': 'January',\n 'calendar.month1': 'February',\n 'calendar.month2': 'March',\n 'calendar.month3': 'April',\n 'calendar.month4': 'May',\n 'calendar.month5': 'June',\n 'calendar.month6': 'July',\n 'calendar.month7': 'August',\n 'calendar.month8': 'September',\n 'calendar.month9': 'October',\n 'calendar.month10': 'November',\n 'calendar.month11': 'December',\n 'calendar.weekday0': 'Su',\n 'calendar.weekday1': 'Mo',\n 'calendar.weekday2': 'Tu',\n 'calendar.weekday3': 'We',\n 'calendar.weekday4': 'Th',\n 'calendar.weekday5': 'Fr',\n 'calendar.weekday6': 'Sa',\n 'calendar.selectYear': 'Select year',\n 'time.hour': 'Hour',\n 'time.minute': 'Minute',\n 'time.second': 'Second',\n 'time.meridiem': 'AM/PM',\n 'time.am': 'AM',\n 'time.pm': 'PM',\n 'settings.themeTitle': 'Theme',\n 'settings.themeDesc': 'Switch between the light and dark theme.',\n 'settings.light': 'Light',\n 'settings.lightDesc': 'Bright theme',\n 'settings.dark': 'Dark',\n 'settings.darkDesc': 'Dim theme',\n 'settings.languageDesc': 'Choose the admin panel language — saved for next time.',\n 'settings.accentTitle': 'Accent Color',\n 'settings.accentDesc':\n \"Pick an accent for each theme — it's saved and restored next time you open the panel.\",\n 'settings.lightTheme': 'Light theme',\n 'settings.darkTheme': 'Dark theme',\n 'settings.accentDefault': 'Default ({color})',\n 'settings.fontTitle': 'Font',\n 'settings.fontDesc':\n 'Pick a preset or type any Google Font — applied app-wide and saved for next time.',\n 'settings.fontFamily': 'Font family',\n 'settings.fontSearch': 'Search or type any Google Font…',\n 'settings.fontDefault': '{font} (Default)',\n 'settings.headerTitle': 'Header',\n 'settings.headerDesc':\n 'Keep the header fixed on scroll, or let it scroll away — saved for next time.',\n 'settings.scrollable': 'Scrollable',\n 'settings.scrollableDesc': 'Scrolls away',\n 'settings.fixed': 'Fixed',\n 'settings.fixedDesc': 'Stays on scroll',\n 'settings.shapeTitle': 'Shape',\n 'settings.shapeDesc': 'Corner style of cards, fields, buttons and dialogs across the panel.',\n 'settings.rounded': 'Rounded',\n 'settings.roundedDesc': 'Soft corners',\n 'settings.square': 'Square',\n 'settings.squareDesc': 'Sharp corners',\n 'rte.placeholder': 'Write something…',\n 'rte.formatting': 'Formatting',\n 'rte.undo': 'Undo',\n 'rte.redo': 'Redo',\n 'rte.fontSize': 'Font size',\n 'rte.textColor': 'Text color',\n 'rte.bold': 'Bold',\n 'rte.italic': 'Italic',\n 'rte.underline': 'Underline',\n 'rte.bulletList': 'Bullet list',\n 'rte.numberedList': 'Numbered list',\n 'rte.quote': 'Quote',\n 'rte.alignLeft': 'Align left',\n 'rte.alignCenter': 'Align center',\n 'rte.alignRight': 'Align right',\n 'rte.link': 'Insert link',\n 'rte.insertImage': 'Insert image',\n 'rte.insertVideo': 'Insert video',\n 'rte.uploadImage': 'Upload image',\n 'rte.imageByUrl': 'By URL',\n 'rte.imageError': 'Could not add the image. Please try again.',\n 'rte.linkTitle': 'Insert Link',\n 'rte.linkUrl': 'Link URL',\n 'rte.imageTitle': 'Insert Image',\n 'rte.imageUrl': 'Image URL',\n 'rte.videoTitle': 'Insert Video',\n 'rte.videoUrl': 'Video URL',\n 'rte.videoUrlPlaceholder': 'YouTube, Vimeo, or a direct file URL',\n 'rte.embeddedVideo': 'Embedded video',\n 'fileUploader.choose': 'Choose a file',\n 'fileUploader.dropSuffix': 'or drag & drop it here',\n 'fileUploader.uploaded': 'Uploaded',\n 'fileUploader.hintUpToOne': 'Up to {count} file',\n 'fileUploader.hintUpToMany': 'Up to {count} files',\n 'fileUploader.hintMax': 'Max {size} each',\n 'fileUploader.exceedsLimit': 'Exceeds {size} limit',\n 'fileUploader.download': 'Download {name}',\n 'fileCard.download': 'Download {name}',\n 'fileUploader.remove': 'Remove {name}',\n 'fileUploader.crop': 'Crop {name}',\n 'fileUploader.editAlt': 'Edit alt text for {name}',\n 'fileUploader.preview': 'Preview {name}',\n 'fileUploader.closePreview': 'Close preview',\n 'fileUploader.duplicate': 'Some files are already added',\n 'fileUploader.wrongTypeOne': '\"{name}\" has an unsupported file type',\n 'fileUploader.wrongTypeMany': '{count} files have an unsupported type',\n 'fileUploader.tooLargeOne': '\"{name}\" exceeds the {size} limit',\n 'fileUploader.tooLargeMany': '{count} files exceed the {size} limit',\n 'fileUploader.cropTitle': 'Crop image',\n 'fileUploader.altTitle': 'Alt text',\n 'fileUploader.cropHint': 'Drag to select the area to keep',\n 'fileUploader.altPlaceholder': 'Describe the image for screen readers…',\n 'fileUploader.cropError':\n 'Couldn’t crop this image — it may be served cross-origin without CORS.',\n 'codeBlock.copy': 'Copy code',\n 'codeBlock.copied': 'Copied!',\n 'clipboard.copy': 'Copy',\n 'clipboard.copied': 'Copied!',\n 'colorRamp.groupLabel': '{name} color scale',\n 'colorRamp.base': 'base',\n 'colorRamp.clickToCopy': 'Click to copy',\n 'colorRamp.copyAria': '{name}-{step}, {hex}. Copy',\n 'colorRamp.copied': 'Copied {step}: {hex}',\n 'colorRamp.copyFailed': 'Could not copy {step}',\n 'colorRamp.invalid': 'Pick a valid hex color to generate its scale.',\n 'colorRamp.lightest': 'Lightest',\n 'colorRamp.darkest': 'Darkest',\n 'colorRamp.black': 'black',\n 'colorRamp.white': 'white',\n 'descriptionList.empty': 'Not set',\n 'descriptionList.loading': 'Loading details',\n 'sidebar.searchPages': 'Search pages',\n 'account.label': 'Account',\n 'settings.label': 'Settings',\n 'language.label': 'Language',\n}\n\n/** Flag for the English (US) UI language — rendered beside the language in the header switcher. */\nexport const EN_FLAG = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 640 480\">\n <path fill=\"#bd3d44\" d=\"M0 0h640v480H0\"/>\n <path stroke=\"#fff\" stroke-width=\"37\" d=\"M0 55.3h640M0 129h640M0 203h640M0 277h640M0 351h640M0 425h640\"/>\n <path fill=\"#192f5d\" d=\"M0 0h364.8v258.5H0\"/>\n <marker id=\"us-a\" markerHeight=\"30\" markerWidth=\"30\">\n <path fill=\"#fff\" d=\"m14 0 9 27L0 10h28L5 27z\"/>\n </marker>\n <path fill=\"none\" marker-mid=\"url(#us-a)\" d=\"m0 0 16 11h61 61 61 61 60L47 37h61 61 60 61L16 63h61 61 61 61 60L47 89h61 61 60 61L16 115h61 61 61 61 60L47 141h61 61 60 61L16 166h61 61 61 61 60L47 192h61 61 60 61L16 218h61 61 61 61 60z\"/>\n</svg>`\n","import type { MessageCatalog } from '../messages'\n\n/**\n * Georgian — shipped built-in (the maintainer's language). A `MessageCatalog` (`Partial<Messages>`),\n * so any key it omits falls back to English (`en.ts`) at resolve time.\n */\nexport const KA_MESSAGES: MessageCatalog = {\n 'common.close': 'დახურვა',\n 'common.cancel': 'გაუქმება',\n 'common.confirm': 'დადასტურება',\n 'common.delete': 'წაშლა',\n 'common.remove': 'მოცილება',\n 'common.loading': 'იტვირთება…',\n 'common.clear': 'გასუფთავება',\n 'common.apply': 'გამოყენება',\n 'common.search': 'ძებნა…',\n 'common.all': 'ყველა',\n 'common.any': 'ნებისმიერი',\n 'common.yes': 'დიახ',\n 'common.no': 'არა',\n 'common.save': 'შენახვა',\n 'common.insert': 'ჩასმა',\n 'common.update': 'განახლება',\n 'common.done': 'მზადაა',\n 'common.min': 'მინ.',\n 'common.max': 'მაქს.',\n 'common.from': 'დან',\n 'common.to': 'მდე',\n 'select.placeholder': 'აირჩიეთ…',\n 'select.noOptions': 'ვარიანტები არ არის',\n 'select.clear': 'არჩევანის გასუფთავება',\n 'multiSelect.clearAll': 'ყველას გასუფთავება',\n 'pagination.previous': 'წინა გვერდი',\n 'pagination.next': 'შემდეგი გვერდი',\n 'pagination.first': 'პირველი გვერდი',\n 'pagination.last': 'ბოლო გვერდი',\n 'pagination.page': 'გვერდი {page}',\n 'emptyState.title': 'შედეგები ვერ მოიძებნა',\n 'errorState.title': 'რაღაც შეცდომა მოხდა',\n 'errorState.description': 'მოულოდნელი შეცდომა მოხდა. სცადეთ თავიდან.',\n 'errorState.retry': 'თავიდან ცდა',\n 'errorState.details': 'დეტალები',\n 'errorState.requestFailed': 'მოთხოვნა ვერ შესრულდა ({status})',\n 'notFound.title': 'გვერდი ვერ მოიძებნა',\n 'notFound.description': 'თქვენ მიერ მოთხოვნილი გვერდი არ არსებობს ან გადატანილია.',\n 'notFound.action': 'მთავარ გვერდზე დაბრუნება',\n 'userCard.signOut': 'გასვლა',\n 'userCard.welcome': 'მოგესალმებით',\n 'textField.fieldAction': 'ველის მოქმედება',\n 'phoneField.country': 'ქვეყანა',\n 'phoneField.search': 'ქვეყნის ძებნა…',\n 'phoneField.suggested': 'შემოთავაზებული',\n 'phoneField.allCountries': 'ყველა ქვეყანა',\n 'textField.showPassword': 'პაროლის ჩვენება',\n 'textField.hidePassword': 'პაროლის დამალვა',\n 'textField.capsLock': 'Caps Lock ჩართულია',\n 'textField.strengthWeak': 'სუსტი',\n 'textField.strengthMedium': 'საშუალო',\n 'textField.strengthStrong': 'ძლიერი',\n 'numberField.decrease': 'შემცირება',\n 'numberField.increase': 'გაზრდა',\n 'otpField.digit': 'ციფრი {index} / {total}',\n 'breadcrumbs.label': 'ნავიგაცია',\n 'breadcrumbs.home': 'მთავარი',\n 'pageTitle.back': 'უკან',\n 'pageActions.label': 'მოქმედებები',\n 'themeToggle.label': 'თემის გადართვა',\n 'fullscreenToggle.label': 'სრულ ეკრანზე გადართვა',\n 'loader.label': 'იტვირთება',\n 'progress.label': 'პროგრესი',\n 'tagsField.add': 'ჭდის დამატება',\n 'removeDialog.title': 'წაშლა',\n 'removeDialog.message': 'დარწმუნებული ხართ, რომ გსურთ წაშლა?',\n 'removeDialog.typeToConfirm': 'დასადასტურებლად ჩაწერეთ {text}',\n 'colorPicker.pick': 'აირჩიეთ ფერი',\n 'colorPicker.value': 'ფერის მნიშვნელობა',\n 'colorPicker.noColor': 'ფერის გარეშე',\n 'colorPicker.saturation': 'გაჯერება და სიკაშკაშე',\n 'colorPicker.hue': 'ტონი',\n 'colorPicker.opacity': 'გამჭვირვალობა',\n 'datePicker.clear': 'თარიღის გასუფთავება',\n 'datePicker.open': 'კალენდრის გახსნა',\n 'calendar.prevMonth': 'წინა თვე',\n 'calendar.nextMonth': 'შემდეგი თვე',\n 'timePicker.clear': 'დროის გასუფთავება',\n 'timePicker.open': 'დროის ამრჩევის გახსნა',\n 'dateTimePicker.clear': 'მნიშვნელობის გასუფთავება',\n 'dateTimePicker.open': 'თარიღისა და დროის ამრჩევის გახსნა',\n 'dateTimePicker.label': 'თარიღი და დრო',\n 'dateTimePicker.dateTab': 'თარიღი',\n 'dateTimePicker.timeTab': 'დრო',\n 'table.export': 'ექსპორტი',\n 'table.sendOnEmail': 'ელფოსტაზე გაგზავნა',\n 'table.sort': 'დახარისხება',\n 'table.sortBy': 'დახარისხება',\n 'table.filters': 'ფილტრები',\n 'table.filtersDescription': 'დაფილტრეთ ცხრილი ქვემოთ მოცემული ველებით.',\n 'table.dragHandle': 'გადასათრევად ჩავიჭიდე',\n 'table.range': '{from}–{to} / {total}',\n 'table.rowsPerPage': 'სტრიქონი გვერდზე',\n 'calendar.month0': 'იანვარი',\n 'calendar.month1': 'თებერვალი',\n 'calendar.month2': 'მარტი',\n 'calendar.month3': 'აპრილი',\n 'calendar.month4': 'მაისი',\n 'calendar.month5': 'ივნისი',\n 'calendar.month6': 'ივლისი',\n 'calendar.month7': 'აგვისტო',\n 'calendar.month8': 'სექტემბერი',\n 'calendar.month9': 'ოქტომბერი',\n 'calendar.month10': 'ნოემბერი',\n 'calendar.month11': 'დეკემბერი',\n 'calendar.weekday0': 'კვ',\n 'calendar.weekday1': 'ორ',\n 'calendar.weekday2': 'სა',\n 'calendar.weekday3': 'ოთ',\n 'calendar.weekday4': 'ხუ',\n 'calendar.weekday5': 'პა',\n 'calendar.weekday6': 'შა',\n 'calendar.selectYear': 'აირჩიეთ წელი',\n 'time.hour': 'საათი',\n 'time.minute': 'წუთი',\n 'time.second': 'წამი',\n 'time.meridiem': 'AM/PM',\n 'time.am': 'AM',\n 'time.pm': 'PM',\n 'settings.themeTitle': 'თემა',\n 'settings.themeDesc': 'გადართეთ ღია და მუქ თემას შორის.',\n 'settings.light': 'ღია',\n 'settings.lightDesc': 'ნათელი თემა',\n 'settings.dark': 'მუქი',\n 'settings.darkDesc': 'ბნელი თემა',\n 'settings.languageDesc': 'აირჩიეთ ადმინ პანელის ენა — შენახული შემდეგისთვის.',\n 'settings.accentTitle': 'აქცენტის ფერი',\n 'settings.accentDesc': 'აირჩიეთ აქცენტი თითოეული თემისთვის — ინახება და აღდგება შემდეგ ჯერზე.',\n 'settings.lightTheme': 'ღია თემა',\n 'settings.darkTheme': 'მუქი თემა',\n 'settings.accentDefault': 'ნაგულისხმევი ({color})',\n 'settings.fontTitle': 'შრიფტი',\n 'settings.fontDesc': 'აირჩიეთ presetი ან აკრიფეთ ნებისმიერი Google Font — გამოიყენება ყველგან.',\n 'settings.fontFamily': 'შრიფტის ოჯახი',\n 'settings.fontSearch': 'მოძებნეთ ან აკრიფეთ ნებისმიერი Google Font…',\n 'settings.fontDefault': '{font} (ნაგულისხმევი)',\n 'settings.headerTitle': 'ჰედერი',\n 'settings.headerDesc':\n 'ჰედერი დააფიქსირეთ სქროლზე, ან დაუშვით რომ გაქრეს — შენახული შემდეგისთვის.',\n 'settings.scrollable': 'მოძრავი',\n 'settings.scrollableDesc': 'სქროლზე ქრება',\n 'settings.fixed': 'ფიქსირებული',\n 'settings.fixedDesc': 'სქროლზე რჩება',\n 'settings.shapeTitle': 'ფორმა',\n 'settings.shapeDesc':\n 'ბარათების, ველების, ღილაკებისა და დიალოგების კუთხეების სტილი მთელ პანელზე.',\n 'settings.rounded': 'მომრგვალებული',\n 'settings.roundedDesc': 'რბილი კუთხეები',\n 'settings.square': 'კვადრატული',\n 'settings.squareDesc': 'მკვეთრი კუთხეები',\n 'rte.placeholder': 'დაწერეთ რაიმე…',\n 'rte.formatting': 'ფორმატირება',\n 'rte.undo': 'დაბრუნება',\n 'rte.redo': 'გამეორება',\n 'rte.fontSize': 'შრიფტის ზომა',\n 'rte.textColor': 'ტექსტის ფერი',\n 'rte.bold': 'მუქი',\n 'rte.italic': 'დახრილი',\n 'rte.underline': 'ხაზგასმული',\n 'rte.bulletList': 'მარკირებული სია',\n 'rte.numberedList': 'ნუმერირებული სია',\n 'rte.quote': 'ციტატა',\n 'rte.alignLeft': 'მარცხნივ სწორება',\n 'rte.alignCenter': 'ცენტრში სწორება',\n 'rte.alignRight': 'მარჯვნივ სწორება',\n 'rte.link': 'ბმულის ჩასმა',\n 'rte.insertImage': 'სურათის ჩასმა',\n 'rte.insertVideo': 'ვიდეოს ჩასმა',\n 'rte.uploadImage': 'სურათის ატვირთვა',\n 'rte.imageByUrl': 'URL-ით',\n 'rte.imageError': 'სურათის დამატება ვერ მოხერხდა. სცადეთ ხელახლა.',\n 'rte.linkTitle': 'ბმულის ჩასმა',\n 'rte.linkUrl': 'ბმულის URL',\n 'rte.imageTitle': 'სურათის ჩასმა',\n 'rte.imageUrl': 'სურათის URL',\n 'rte.videoTitle': 'ვიდეოს ჩასმა',\n 'rte.videoUrl': 'ვიდეოს URL',\n 'rte.videoUrlPlaceholder': 'YouTube, Vimeo, ან პირდაპირი ფაილის URL',\n 'rte.embeddedVideo': 'ჩართული ვიდეო',\n 'fileUploader.choose': 'აირჩიეთ ფაილი',\n 'fileUploader.dropSuffix': 'ან ჩააგდეთ აქ',\n 'fileUploader.uploaded': 'ატვირთულია',\n 'fileUploader.hintUpToOne': 'არაუმეტეს {count} ფაილისა',\n 'fileUploader.hintUpToMany': 'არაუმეტეს {count} ფაილისა',\n 'fileUploader.hintMax': 'მაქს. {size} თითო',\n 'fileUploader.exceedsLimit': 'აჭარბებს {size} ლიმიტს',\n 'fileUploader.download': 'ჩამოტვირთვა: {name}',\n 'fileCard.download': 'ჩამოტვირთვა: {name}',\n 'fileUploader.remove': 'წაშლა: {name}',\n 'fileUploader.crop': 'ჭრა: {name}',\n 'fileUploader.editAlt': 'alt-ტექსტის რედაქტირება: {name}',\n 'fileUploader.preview': 'გადახედვა: {name}',\n 'fileUploader.closePreview': 'გადახედვის დახურვა',\n 'fileUploader.duplicate': 'ზოგიერთი ფაილი უკვე დამატებულია',\n 'fileUploader.wrongTypeOne': '„{name}\"-ს აქვს მხარდაუჭერელი ტიპი',\n 'fileUploader.wrongTypeMany': '{count} ფაილს აქვს მხარდაუჭერელი ტიპი',\n 'fileUploader.tooLargeOne': '„{name}\" აჭარბებს {size} ლიმიტს',\n 'fileUploader.tooLargeMany': '{count} ფაილი აჭარბებს {size} ლიმიტს',\n 'fileUploader.cropTitle': 'სურათის ჭრა',\n 'fileUploader.altTitle': 'Alt ტექსტი',\n 'fileUploader.cropHint': 'გადაათრიეთ დასატოვებელი არის მოსანიშნად',\n 'fileUploader.altPlaceholder': 'აღწერეთ სურათი ეკრანის წამკითხველისთვის…',\n 'fileUploader.cropError': 'სურათის ჭრა ვერ მოხერხდა — შესაძლოა cross-origin იყოს CORS-ის გარეშე.',\n 'codeBlock.copy': 'კოდის კოპირება',\n 'codeBlock.copied': 'დაკოპირდა!',\n 'clipboard.copy': 'კოპირება',\n 'clipboard.copied': 'დაკოპირდა!',\n 'colorRamp.groupLabel': '{name} ფერის შკალა',\n 'colorRamp.base': 'საბაზისო',\n 'colorRamp.clickToCopy': 'დააკლიკეთ კოპირებისთვის',\n 'colorRamp.copyAria': '{name}-{step}, {hex}. კოპირება',\n 'colorRamp.copied': 'დაკოპირდა {step}: {hex}',\n 'colorRamp.copyFailed': '{step} ვერ დაკოპირდა',\n 'colorRamp.invalid': 'შკალის გენერაციისთვის აირჩიეთ ვალიდური hex ფერი.',\n 'colorRamp.lightest': 'ყველაზე ღია',\n 'colorRamp.darkest': 'ყველაზე მუქი',\n 'colorRamp.black': 'შავი',\n 'colorRamp.white': 'თეთრი',\n 'descriptionList.empty': 'არ არის მითითებული',\n 'descriptionList.loading': 'დეტალები იტვირთება',\n 'sidebar.searchPages': 'გვერდების ძებნა',\n 'account.label': 'ანგარიში',\n 'settings.label': 'პარამეტრები',\n 'language.label': 'ენა',\n}\n\n/** Flag for the Georgian UI language — rendered beside the language in the header switcher. */\nexport const KA_FLAG = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 640 480\">\n <path fill=\"#fff\" d=\"M0 0h640v480H0z\"/>\n <path fill=\"red\" d=\"M272 0h96v480h-96z\"/>\n <path fill=\"red\" d=\"M0 192h640v96H0z\"/>\n <path fill=\"red\" fill-rule=\"evenodd\" d=\"M146.8 373.1c1-16.8 4-31.1 4-31.1s-9.8 1-14.8 1-14.8-1-14.8-1 3 14.3 4 31.2c-16.9-1-31.2-4-31.2-4s1 7.4 1 14.8-1 14.8-1 14.8 14.3-3 31.2-4c-1 16.9-4 31.2-4 31.2s7.4-1 14.8-1 14.8 1 14.8 1-3-14.3-4-31.2c16.9 1 31.2 4 31.2 4s-1-9.8-1-14.8 1-14.8 1-14.8-14.3 3-31.1 4zm368-288c1-16.8 4-31.1 4-31.1s-9.8 1-14.8 1-14.8-1-14.8-1 3 14.3 4 31.1c-16.9-1-31.2-3.9-31.2-3.9s1 7.4 1 14.8-1 14.8-1 14.8 14.3-3 31.2-4c-1 16.9-4 31.2-4 31.2s7.4-1 14.8-1 14.8 1 14.8 1-3-14.3-4-31.1c16.9 1 31.2 4 31.2 4s-1-10-1-14.9 1-14.8 1-14.8-14.3 3-31.2 4zm-368 0c1-16.8 4-31.1 4-31.1s-9.8 1-14.8 1-14.8-1-14.8-1 3 14.3 4 31.2c-16.9-1-31.2-4-31.2-4s1 7.4 1 14.8-1 14.8-1 14.8 14.3-3 31.2-4c-1 16.9-4 31.2-4 31.2s7.4-1 14.8-1 14.8 1 14.8 1-3-14.3-4-31.2c16.9 1 31.2 4 31.2 4s-1-9.8-1-14.8 1-14.8 1-14.8-14.3 3-31.1 4zm368 288c1-16.8 4-31.1 4-31.1s-9.8 1-14.8 1-14.8-1-14.8-1 3 14.3 4 31.2c-16.9-1-31.2-4-31.2-4s1 7.4 1 14.8-1 14.8-1 14.8 14.3-3 31.2-4c-1 16.9-4 31.2-4 31.2s7.4-1 14.8-1 14.8 1 14.8 1-3-14.3-4-31.2c16.9 1 31.2 4 31.2 4s-1-9.8-1-14.8 1-14.8 1-14.8-14.3 3-31.2 4z\"/>\n</svg>`\n","import type { MessageCatalog } from '../messages'\n\n/** Spanish — translated from the English baseline (`en.ts`); omitted keys fall back to English. */\nexport const ES_MESSAGES: MessageCatalog = {\n 'common.close': 'Cerrar',\n 'common.cancel': 'Cancelar',\n 'common.confirm': 'Confirmar',\n 'common.delete': 'Eliminar',\n 'common.remove': 'Quitar',\n 'common.loading': 'Cargando…',\n 'common.clear': 'Borrar',\n 'common.apply': 'Aplicar',\n 'common.search': 'Buscar…',\n 'common.all': 'Todos',\n 'common.any': 'Cualquiera',\n 'common.yes': 'Sí',\n 'common.no': 'No',\n 'common.save': 'Guardar',\n 'common.insert': 'Insertar',\n 'common.update': 'Actualizar',\n 'common.done': 'Listo',\n 'common.min': 'Mín',\n 'common.max': 'Máx',\n 'common.from': 'Desde',\n 'common.to': 'Hasta',\n 'select.placeholder': 'Seleccionar…',\n 'select.noOptions': 'Sin opciones',\n 'select.clear': 'Borrar selección',\n 'multiSelect.clearAll': 'Borrar todo',\n 'pagination.previous': 'Ir a la página anterior',\n 'pagination.next': 'Ir a la página siguiente',\n 'pagination.first': 'Ir a la primera página',\n 'pagination.last': 'Ir a la última página',\n 'pagination.page': 'Ir a la página {page}',\n 'emptyState.title': 'No se encontraron resultados',\n 'errorState.title': 'Algo salió mal',\n 'errorState.description': 'Se produjo un error inesperado. Inténtalo de nuevo.',\n 'errorState.retry': 'Reintentar',\n 'errorState.details': 'Detalles',\n 'errorState.requestFailed': 'La solicitud falló ({status})',\n 'notFound.title': 'Página no encontrada',\n 'notFound.description': 'La página que buscas no existe o puede haberse movido.',\n 'notFound.action': 'Volver al inicio',\n 'userCard.signOut': 'Cerrar sesión',\n 'userCard.welcome': 'Bienvenido',\n 'textField.fieldAction': 'Acción del campo',\n 'phoneField.country': 'País',\n 'phoneField.search': 'Buscar países…',\n 'phoneField.suggested': 'Sugeridos',\n 'phoneField.allCountries': 'Todos los países',\n 'textField.showPassword': 'Mostrar contraseña',\n 'textField.hidePassword': 'Ocultar contraseña',\n 'textField.capsLock': 'Bloq Mayús está activado',\n 'textField.strengthWeak': 'Débil',\n 'textField.strengthMedium': 'Media',\n 'textField.strengthStrong': 'Fuerte',\n 'numberField.decrease': 'Disminuir',\n 'numberField.increase': 'Aumentar',\n 'otpField.digit': 'Dígito {index} de {total}',\n 'breadcrumbs.label': 'Ruta de navegación',\n 'breadcrumbs.home': 'Inicio',\n 'pageTitle.back': 'Atrás',\n 'pageActions.label': 'Acciones',\n 'themeToggle.label': 'Cambiar tema de color',\n 'fullscreenToggle.label': 'Alternar pantalla completa',\n 'loader.label': 'Cargando',\n 'progress.label': 'Progreso',\n 'tagsField.add': 'Añadir etiqueta',\n 'removeDialog.title': 'Quitar',\n 'removeDialog.message': '¿Seguro que quieres eliminar?',\n 'removeDialog.typeToConfirm': 'Escribe {text} para confirmar',\n 'colorPicker.pick': 'Elegir un color',\n 'colorPicker.value': 'Valor de color',\n 'colorPicker.noColor': 'Sin color',\n 'colorPicker.saturation': 'Saturación y brillo',\n 'colorPicker.hue': 'Tono',\n 'colorPicker.opacity': 'Opacidad',\n 'datePicker.clear': 'Borrar fecha',\n 'datePicker.open': 'Abrir calendario',\n 'calendar.prevMonth': 'Mes anterior',\n 'calendar.nextMonth': 'Mes siguiente',\n 'timePicker.clear': 'Borrar hora',\n 'timePicker.open': 'Abrir selector de hora',\n 'dateTimePicker.clear': 'Borrar valor',\n 'dateTimePicker.open': 'Abrir selector de fecha y hora',\n 'dateTimePicker.label': 'Fecha y hora',\n 'dateTimePicker.dateTab': 'Fecha',\n 'dateTimePicker.timeTab': 'Hora',\n 'table.export': 'Exportar',\n 'table.sendOnEmail': 'Enviar por correo',\n 'table.sort': 'Ordenar',\n 'table.sortBy': 'Ordenar por',\n 'table.filters': 'Filtros',\n 'table.filtersDescription': 'Filtra la tabla con los campos de abajo.',\n 'table.dragHandle': 'Arrastra para reordenar',\n 'table.range': '{from}–{to} de {total}',\n 'table.rowsPerPage': 'Filas por página',\n 'calendar.month0': 'Enero',\n 'calendar.month1': 'Febrero',\n 'calendar.month2': 'Marzo',\n 'calendar.month3': 'Abril',\n 'calendar.month4': 'Mayo',\n 'calendar.month5': 'Junio',\n 'calendar.month6': 'Julio',\n 'calendar.month7': 'Agosto',\n 'calendar.month8': 'Septiembre',\n 'calendar.month9': 'Octubre',\n 'calendar.month10': 'Noviembre',\n 'calendar.month11': 'Diciembre',\n 'calendar.weekday0': 'Do',\n 'calendar.weekday1': 'Lu',\n 'calendar.weekday2': 'Ma',\n 'calendar.weekday3': 'Mi',\n 'calendar.weekday4': 'Ju',\n 'calendar.weekday5': 'Vi',\n 'calendar.weekday6': 'Sá',\n 'calendar.selectYear': 'Seleccionar año',\n 'time.hour': 'Hora',\n 'time.minute': 'Minuto',\n 'time.second': 'Segundo',\n 'time.meridiem': 'AM/PM',\n 'time.am': 'AM',\n 'time.pm': 'PM',\n 'settings.themeTitle': 'Tema',\n 'settings.themeDesc': 'Cambia entre el tema claro y oscuro.',\n 'settings.light': 'Claro',\n 'settings.lightDesc': 'Tema luminoso',\n 'settings.dark': 'Oscuro',\n 'settings.darkDesc': 'Tema tenue',\n 'settings.languageDesc': 'Elige el idioma del panel — se guarda para la próxima vez.',\n 'settings.accentTitle': 'Color de acento',\n 'settings.accentDesc':\n 'Elige un acento para cada tema — se guarda y se restaura la próxima vez que abras el panel.',\n 'settings.lightTheme': 'Tema claro',\n 'settings.darkTheme': 'Tema oscuro',\n 'settings.accentDefault': 'Predeterminado ({color})',\n 'settings.fontTitle': 'Fuente',\n 'settings.fontDesc':\n 'Elige una predefinida o escribe cualquier Google Font — se aplica en toda la app y se guarda.',\n 'settings.fontFamily': 'Familia tipográfica',\n 'settings.fontSearch': 'Busca o escribe cualquier Google Font…',\n 'settings.fontDefault': '{font} (predeterminada)',\n 'settings.headerTitle': 'Encabezado',\n 'settings.headerDesc':\n 'Mantén el encabezado fijo al desplazar, o deja que se desplace — se guarda para la próxima vez.',\n 'settings.scrollable': 'Desplazable',\n 'settings.scrollableDesc': 'Se desplaza',\n 'settings.fixed': 'Fijo',\n 'settings.fixedDesc': 'Permanece al desplazar',\n 'settings.shapeTitle': 'Forma',\n 'settings.shapeDesc':\n 'Estilo de las esquinas de tarjetas, campos, botones y diálogos en todo el panel.',\n 'settings.rounded': 'Redondeada',\n 'settings.roundedDesc': 'Esquinas suaves',\n 'settings.square': 'Cuadrada',\n 'settings.squareDesc': 'Esquinas rectas',\n 'rte.placeholder': 'Escribe algo…',\n 'rte.formatting': 'Formato',\n 'rte.undo': 'Deshacer',\n 'rte.redo': 'Rehacer',\n 'rte.fontSize': 'Tamaño de fuente',\n 'rte.textColor': 'Color del texto',\n 'rte.bold': 'Negrita',\n 'rte.italic': 'Cursiva',\n 'rte.underline': 'Subrayado',\n 'rte.bulletList': 'Lista con viñetas',\n 'rte.numberedList': 'Lista numerada',\n 'rte.quote': 'Cita',\n 'rte.alignLeft': 'Alinear a la izquierda',\n 'rte.alignCenter': 'Centrar',\n 'rte.alignRight': 'Alinear a la derecha',\n 'rte.link': 'Insertar enlace',\n 'rte.insertImage': 'Insertar imagen',\n 'rte.insertVideo': 'Insertar vídeo',\n 'rte.uploadImage': 'Subir imagen',\n 'rte.imageByUrl': 'Por URL',\n 'rte.imageError': 'No se pudo añadir la imagen. Inténtalo de nuevo.',\n 'rte.linkTitle': 'Insertar enlace',\n 'rte.linkUrl': 'URL del enlace',\n 'rte.imageTitle': 'Insertar imagen',\n 'rte.imageUrl': 'URL de la imagen',\n 'rte.videoTitle': 'Insertar vídeo',\n 'rte.videoUrl': 'URL del vídeo',\n 'rte.videoUrlPlaceholder': 'YouTube, Vimeo o la URL de un archivo directo',\n 'rte.embeddedVideo': 'Vídeo insertado',\n 'fileUploader.choose': 'Elegir un archivo',\n 'fileUploader.dropSuffix': 'o arrástralo y suéltalo aquí',\n 'fileUploader.uploaded': 'Subido',\n 'fileUploader.hintUpToOne': 'Hasta {count} archivo',\n 'fileUploader.hintUpToMany': 'Hasta {count} archivos',\n 'fileUploader.hintMax': 'Máx. {size} cada uno',\n 'fileUploader.exceedsLimit': 'Supera el límite de {size}',\n 'fileUploader.download': 'Descargar {name}',\n 'fileCard.download': 'Descargar {name}',\n 'fileUploader.remove': 'Quitar {name}',\n 'fileUploader.crop': 'Recortar {name}',\n 'fileUploader.editAlt': 'Editar texto alternativo de {name}',\n 'fileUploader.preview': 'Vista previa de {name}',\n 'fileUploader.closePreview': 'Cerrar vista previa',\n 'fileUploader.duplicate': 'Algunos archivos ya se han añadido',\n 'fileUploader.wrongTypeOne': '«{name}» tiene un tipo de archivo no admitido',\n 'fileUploader.wrongTypeMany': '{count} archivos tienen un tipo no admitido',\n 'fileUploader.tooLargeOne': '«{name}» supera el límite de {size}',\n 'fileUploader.tooLargeMany': '{count} archivos superan el límite de {size}',\n 'fileUploader.cropTitle': 'Recortar imagen',\n 'fileUploader.altTitle': 'Texto alternativo',\n 'fileUploader.cropHint': 'Arrastra para seleccionar el área que quieres conservar',\n 'fileUploader.altPlaceholder': 'Describe la imagen para lectores de pantalla…',\n 'fileUploader.cropError':\n 'No se pudo recortar esta imagen — puede servirse desde otro origen sin CORS.',\n 'codeBlock.copy': 'Copiar código',\n 'codeBlock.copied': '¡Copiado!',\n 'clipboard.copy': 'Copiar',\n 'clipboard.copied': '¡Copiado!',\n 'colorRamp.groupLabel': 'Escala de color {name}',\n 'colorRamp.base': 'base',\n 'colorRamp.clickToCopy': 'Clic para copiar',\n 'colorRamp.copyAria': '{name}-{step}, {hex}. Copiar',\n 'colorRamp.copied': 'Copiado {step}: {hex}',\n 'colorRamp.copyFailed': 'No se pudo copiar {step}',\n 'colorRamp.invalid': 'Elige un color hex válido para generar su escala.',\n 'colorRamp.lightest': 'Más claro',\n 'colorRamp.darkest': 'Más oscuro',\n 'colorRamp.black': 'negro',\n 'colorRamp.white': 'blanco',\n 'descriptionList.empty': 'Sin definir',\n 'descriptionList.loading': 'Cargando detalles',\n 'sidebar.searchPages': 'Buscar páginas',\n 'account.label': 'Cuenta',\n 'settings.label': 'Ajustes',\n 'language.label': 'Idioma',\n}\n\n/** Flag for the Spanish UI language — rendered beside the language in the header switcher. */\nexport const ES_FLAG = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 640 480\">\n <path fill=\"#AA151B\" d=\"M0 0h640v480H0z\"/>\n <path fill=\"#F1BF00\" d=\"M0 120h640v240H0z\"/>\n</svg>`\n","import type { MessageCatalog } from '../messages'\n\n/** German — translated from the English baseline (`en.ts`); omitted keys fall back to English. */\nexport const DE_MESSAGES: MessageCatalog = {\n 'common.close': 'Schließen',\n 'common.cancel': 'Abbrechen',\n 'common.confirm': 'Bestätigen',\n 'common.delete': 'Löschen',\n 'common.remove': 'Entfernen',\n 'common.loading': 'Wird geladen…',\n 'common.clear': 'Leeren',\n 'common.apply': 'Anwenden',\n 'common.search': 'Suchen…',\n 'common.all': 'Alle',\n 'common.any': 'Beliebig',\n 'common.yes': 'Ja',\n 'common.no': 'Nein',\n 'common.save': 'Speichern',\n 'common.insert': 'Einfügen',\n 'common.update': 'Aktualisieren',\n 'common.done': 'Fertig',\n 'common.min': 'Min',\n 'common.max': 'Max',\n 'common.from': 'Von',\n 'common.to': 'Bis',\n 'select.placeholder': 'Auswählen…',\n 'select.noOptions': 'Keine Optionen',\n 'select.clear': 'Auswahl aufheben',\n 'multiSelect.clearAll': 'Alle entfernen',\n 'pagination.previous': 'Zur vorherigen Seite',\n 'pagination.next': 'Zur nächsten Seite',\n 'pagination.first': 'Zur ersten Seite',\n 'pagination.last': 'Zur letzten Seite',\n 'pagination.page': 'Zu Seite {page}',\n 'emptyState.title': 'Keine Ergebnisse gefunden',\n 'errorState.title': 'Etwas ist schiefgelaufen',\n 'errorState.description': 'Ein unerwarteter Fehler ist aufgetreten. Bitte versuche es erneut.',\n 'errorState.retry': 'Erneut versuchen',\n 'errorState.details': 'Details',\n 'errorState.requestFailed': 'Anfrage fehlgeschlagen ({status})',\n 'notFound.title': 'Seite nicht gefunden',\n 'notFound.description':\n 'Die gesuchte Seite existiert nicht oder wurde möglicherweise verschoben.',\n 'notFound.action': 'Zurück zur Startseite',\n 'userCard.signOut': 'Abmelden',\n 'userCard.welcome': 'Willkommen',\n 'textField.fieldAction': 'Feldaktion',\n 'phoneField.country': 'Land',\n 'phoneField.search': 'Länder suchen…',\n 'phoneField.suggested': 'Vorgeschlagen',\n 'phoneField.allCountries': 'Alle Länder',\n 'textField.showPassword': 'Passwort anzeigen',\n 'textField.hidePassword': 'Passwort verbergen',\n 'textField.capsLock': 'Feststelltaste ist aktiviert',\n 'textField.strengthWeak': 'Schwach',\n 'textField.strengthMedium': 'Mittel',\n 'textField.strengthStrong': 'Stark',\n 'numberField.decrease': 'Verringern',\n 'numberField.increase': 'Erhöhen',\n 'otpField.digit': 'Ziffer {index} von {total}',\n 'breadcrumbs.label': 'Navigationspfad',\n 'breadcrumbs.home': 'Startseite',\n 'pageTitle.back': 'Zurück',\n 'pageActions.label': 'Aktionen',\n 'themeToggle.label': 'Farbschema umschalten',\n 'fullscreenToggle.label': 'Vollbild umschalten',\n 'loader.label': 'Wird geladen',\n 'progress.label': 'Fortschritt',\n 'tagsField.add': 'Tag hinzufügen',\n 'removeDialog.title': 'Entfernen',\n 'removeDialog.message': 'Möchten Sie wirklich löschen?',\n 'removeDialog.typeToConfirm': 'Gib {text} zur Bestätigung ein',\n 'colorPicker.pick': 'Farbe auswählen',\n 'colorPicker.value': 'Farbwert',\n 'colorPicker.noColor': 'Keine Farbe',\n 'colorPicker.saturation': 'Sättigung und Helligkeit',\n 'colorPicker.hue': 'Farbton',\n 'colorPicker.opacity': 'Deckkraft',\n 'datePicker.clear': 'Datum löschen',\n 'datePicker.open': 'Kalender öffnen',\n 'calendar.prevMonth': 'Voriger Monat',\n 'calendar.nextMonth': 'Nächster Monat',\n 'timePicker.clear': 'Uhrzeit löschen',\n 'timePicker.open': 'Uhrzeitauswahl öffnen',\n 'dateTimePicker.clear': 'Wert löschen',\n 'dateTimePicker.open': 'Datums- und Uhrzeitauswahl öffnen',\n 'dateTimePicker.label': 'Datum und Uhrzeit',\n 'dateTimePicker.dateTab': 'Datum',\n 'dateTimePicker.timeTab': 'Uhrzeit',\n 'table.export': 'Exportieren',\n 'table.sendOnEmail': 'Per E-Mail senden',\n 'table.sort': 'Sortieren',\n 'table.sortBy': 'Sortieren nach',\n 'table.filters': 'Filter',\n 'table.filtersDescription': 'Grenzen Sie die Tabelle mit den folgenden Feldern ein.',\n 'table.dragHandle': 'Zum Umsortieren ziehen',\n 'table.range': '{from}–{to} von {total}',\n 'table.rowsPerPage': 'Zeilen pro Seite',\n 'calendar.month0': 'Januar',\n 'calendar.month1': 'Februar',\n 'calendar.month2': 'März',\n 'calendar.month3': 'April',\n 'calendar.month4': 'Mai',\n 'calendar.month5': 'Juni',\n 'calendar.month6': 'Juli',\n 'calendar.month7': 'August',\n 'calendar.month8': 'September',\n 'calendar.month9': 'Oktober',\n 'calendar.month10': 'November',\n 'calendar.month11': 'Dezember',\n 'calendar.weekday0': 'So',\n 'calendar.weekday1': 'Mo',\n 'calendar.weekday2': 'Di',\n 'calendar.weekday3': 'Mi',\n 'calendar.weekday4': 'Do',\n 'calendar.weekday5': 'Fr',\n 'calendar.weekday6': 'Sa',\n 'calendar.selectYear': 'Jahr auswählen',\n 'time.hour': 'Stunde',\n 'time.minute': 'Minute',\n 'time.second': 'Sekunde',\n 'time.meridiem': 'AM/PM',\n 'time.am': 'AM',\n 'time.pm': 'PM',\n 'settings.themeTitle': 'Design',\n 'settings.themeDesc': 'Zwischen hellem und dunklem Design wechseln.',\n 'settings.light': 'Hell',\n 'settings.lightDesc': 'Helles Design',\n 'settings.dark': 'Dunkel',\n 'settings.darkDesc': 'Gedämpftes Design',\n 'settings.languageDesc':\n 'Wählen Sie die Sprache des Admin-Panels — wird für das nächste Mal gespeichert.',\n 'settings.accentTitle': 'Akzentfarbe',\n 'settings.accentDesc':\n 'Wählen Sie einen Akzent für jedes Design — er wird gespeichert und beim nächsten Öffnen wiederhergestellt.',\n 'settings.lightTheme': 'Helles Design',\n 'settings.darkTheme': 'Dunkles Design',\n 'settings.accentDefault': 'Standard ({color})',\n 'settings.fontTitle': 'Schriftart',\n 'settings.fontDesc':\n 'Wählen Sie eine Vorgabe oder geben Sie eine beliebige Google Font ein — gilt app-weit und wird gespeichert.',\n 'settings.fontFamily': 'Schriftfamilie',\n 'settings.fontSearch': 'Suchen oder beliebige Google Font eingeben…',\n 'settings.fontDefault': '{font} (Standard)',\n 'settings.headerTitle': 'Kopfzeile',\n 'settings.headerDesc':\n 'Kopfzeile beim Scrollen fixieren oder mitscrollen lassen — wird für das nächste Mal gespeichert.',\n 'settings.scrollable': 'Scrollend',\n 'settings.scrollableDesc': 'Scrollt mit',\n 'settings.fixed': 'Fixiert',\n 'settings.fixedDesc': 'Bleibt beim Scrollen',\n 'settings.shapeTitle': 'Form',\n 'settings.shapeDesc': 'Eckenstil von Karten, Feldern, Buttons und Dialogen im gesamten Panel.',\n 'settings.rounded': 'Abgerundet',\n 'settings.roundedDesc': 'Weiche Ecken',\n 'settings.square': 'Eckig',\n 'settings.squareDesc': 'Scharfe Ecken',\n 'rte.placeholder': 'Schreiben Sie etwas…',\n 'rte.formatting': 'Formatierung',\n 'rte.undo': 'Rückgängig',\n 'rte.redo': 'Wiederholen',\n 'rte.fontSize': 'Schriftgröße',\n 'rte.textColor': 'Textfarbe',\n 'rte.bold': 'Fett',\n 'rte.italic': 'Kursiv',\n 'rte.underline': 'Unterstrichen',\n 'rte.bulletList': 'Aufzählung',\n 'rte.numberedList': 'Nummerierte Liste',\n 'rte.quote': 'Zitat',\n 'rte.alignLeft': 'Linksbündig',\n 'rte.alignCenter': 'Zentriert',\n 'rte.alignRight': 'Rechtsbündig',\n 'rte.link': 'Link einfügen',\n 'rte.insertImage': 'Bild einfügen',\n 'rte.insertVideo': 'Video einfügen',\n 'rte.uploadImage': 'Bild hochladen',\n 'rte.imageByUrl': 'Über URL',\n 'rte.imageError': 'Das Bild konnte nicht hinzugefügt werden. Bitte versuchen Sie es erneut.',\n 'rte.linkTitle': 'Link einfügen',\n 'rte.linkUrl': 'Link-URL',\n 'rte.imageTitle': 'Bild einfügen',\n 'rte.imageUrl': 'Bild-URL',\n 'rte.videoTitle': 'Video einfügen',\n 'rte.videoUrl': 'Video-URL',\n 'rte.videoUrlPlaceholder': 'YouTube, Vimeo oder eine direkte Datei-URL',\n 'rte.embeddedVideo': 'Eingebettetes Video',\n 'fileUploader.choose': 'Datei auswählen',\n 'fileUploader.dropSuffix': 'oder hierher ziehen und ablegen',\n 'fileUploader.uploaded': 'Hochgeladen',\n 'fileUploader.hintUpToOne': 'Bis zu {count} Datei',\n 'fileUploader.hintUpToMany': 'Bis zu {count} Dateien',\n 'fileUploader.hintMax': 'Max. {size} pro Datei',\n 'fileUploader.exceedsLimit': 'Überschreitet das Limit von {size}',\n 'fileUploader.download': '{name} herunterladen',\n 'fileCard.download': '{name} herunterladen',\n 'fileUploader.remove': '{name} entfernen',\n 'fileUploader.crop': '{name} zuschneiden',\n 'fileUploader.editAlt': 'Alt-Text für {name} bearbeiten',\n 'fileUploader.preview': 'Vorschau von {name}',\n 'fileUploader.closePreview': 'Vorschau schließen',\n 'fileUploader.duplicate': 'Einige Dateien wurden bereits hinzugefügt',\n 'fileUploader.wrongTypeOne': '„{name}“ hat einen nicht unterstützten Dateityp',\n 'fileUploader.wrongTypeMany': '{count} Dateien haben einen nicht unterstützten Typ',\n 'fileUploader.tooLargeOne': '„{name}“ überschreitet das Limit von {size}',\n 'fileUploader.tooLargeMany': '{count} Dateien überschreiten das Limit von {size}',\n 'fileUploader.cropTitle': 'Bild zuschneiden',\n 'fileUploader.altTitle': 'Alt-Text',\n 'fileUploader.cropHint': 'Ziehen Sie, um den zu behaltenden Bereich auszuwählen',\n 'fileUploader.altPlaceholder': 'Beschreiben Sie das Bild für Screenreader…',\n 'fileUploader.cropError':\n 'Dieses Bild konnte nicht zugeschnitten werden — es wird möglicherweise ohne CORS von einer anderen Domain geladen.',\n 'codeBlock.copy': 'Code kopieren',\n 'codeBlock.copied': 'Kopiert!',\n 'clipboard.copy': 'Kopieren',\n 'clipboard.copied': 'Kopiert!',\n 'colorRamp.groupLabel': '{name}-Farbskala',\n 'colorRamp.base': 'Basis',\n 'colorRamp.clickToCopy': 'Klicken zum Kopieren',\n 'colorRamp.copyAria': '{name}-{step}, {hex}. Kopieren',\n 'colorRamp.copied': '{step} kopiert: {hex}',\n 'colorRamp.copyFailed': '{step} konnte nicht kopiert werden',\n 'colorRamp.invalid': 'Wähle eine gültige Hex-Farbe, um ihre Skala zu erzeugen.',\n 'colorRamp.lightest': 'Hellste',\n 'colorRamp.darkest': 'Dunkelste',\n 'colorRamp.black': 'schwarz',\n 'colorRamp.white': 'weiß',\n 'descriptionList.empty': 'Nicht gesetzt',\n 'descriptionList.loading': 'Details werden geladen',\n 'sidebar.searchPages': 'Seiten suchen',\n 'account.label': 'Konto',\n 'settings.label': 'Einstellungen',\n 'language.label': 'Sprache',\n}\n\n/** Flag for the German UI language — rendered beside the language in the header switcher. */\nexport const DE_FLAG = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 640 480\">\n <path fill=\"#fc0\" d=\"M0 320h640v160H0z\"/>\n <path fill=\"#000001\" d=\"M0 0h640v160H0z\"/>\n <path fill=\"red\" d=\"M0 160h640v160H0z\"/>\n</svg>`\n","import type { MessageCatalog } from '../messages'\n\n/** Italian — translated from the English baseline (`en.ts`); omitted keys fall back to English. */\nexport const IT_MESSAGES: MessageCatalog = {\n 'common.close': 'Chiudi',\n 'common.cancel': 'Annulla',\n 'common.confirm': 'Conferma',\n 'common.delete': 'Elimina',\n 'common.remove': 'Rimuovi',\n 'common.loading': 'Caricamento…',\n 'common.clear': 'Cancella',\n 'common.apply': 'Applica',\n 'common.search': 'Cerca…',\n 'common.all': 'Tutti',\n 'common.any': 'Qualsiasi',\n 'common.yes': 'Sì',\n 'common.no': 'No',\n 'common.save': 'Salva',\n 'common.insert': 'Inserisci',\n 'common.update': 'Aggiorna',\n 'common.done': 'Fatto',\n 'common.min': 'Min',\n 'common.max': 'Max',\n 'common.from': 'Da',\n 'common.to': 'A',\n 'select.placeholder': 'Seleziona…',\n 'select.noOptions': 'Nessuna opzione',\n 'select.clear': 'Cancella selezione',\n 'multiSelect.clearAll': 'Cancella tutto',\n 'pagination.previous': 'Vai alla pagina precedente',\n 'pagination.next': 'Vai alla pagina successiva',\n 'pagination.first': 'Vai alla prima pagina',\n 'pagination.last': 'Vai all’ultima pagina',\n 'pagination.page': 'Vai alla pagina {page}',\n 'emptyState.title': 'Nessun risultato trovato',\n 'errorState.title': 'Qualcosa è andato storto',\n 'errorState.description': 'Si è verificato un errore imprevisto. Riprova.',\n 'errorState.retry': 'Riprova',\n 'errorState.details': 'Dettagli',\n 'errorState.requestFailed': 'Richiesta non riuscita ({status})',\n 'notFound.title': 'Pagina non trovata',\n 'notFound.description':\n 'La pagina che stai cercando non esiste o potrebbe essere stata spostata.',\n 'notFound.action': 'Torna alla home',\n 'userCard.signOut': 'Esci',\n 'userCard.welcome': 'Benvenuto',\n 'textField.fieldAction': 'Azione campo',\n 'phoneField.country': 'Paese',\n 'phoneField.search': 'Cerca paesi…',\n 'phoneField.suggested': 'Suggeriti',\n 'phoneField.allCountries': 'Tutti i paesi',\n 'textField.showPassword': 'Mostra password',\n 'textField.hidePassword': 'Nascondi password',\n 'textField.capsLock': 'Bloc Maiusc è attivo',\n 'textField.strengthWeak': 'Debole',\n 'textField.strengthMedium': 'Media',\n 'textField.strengthStrong': 'Forte',\n 'numberField.decrease': 'Diminuisci',\n 'numberField.increase': 'Aumenta',\n 'otpField.digit': 'Cifra {index} di {total}',\n 'breadcrumbs.label': 'Percorso di navigazione',\n 'breadcrumbs.home': 'Home',\n 'pageTitle.back': 'Indietro',\n 'pageActions.label': 'Azioni',\n 'themeToggle.label': 'Cambia tema colore',\n 'fullscreenToggle.label': 'Attiva/disattiva schermo intero',\n 'loader.label': 'Caricamento',\n 'progress.label': 'Avanzamento',\n 'tagsField.add': 'Aggiungi tag',\n 'removeDialog.title': 'Rimuovi',\n 'removeDialog.message': 'Sei sicuro di voler eliminare?',\n 'removeDialog.typeToConfirm': 'Digita {text} per confermare',\n 'colorPicker.pick': 'Scegli un colore',\n 'colorPicker.value': 'Valore colore',\n 'colorPicker.noColor': 'Nessun colore',\n 'colorPicker.saturation': 'Saturazione e luminosità',\n 'colorPicker.hue': 'Tonalità',\n 'colorPicker.opacity': 'Opacità',\n 'datePicker.clear': 'Cancella data',\n 'datePicker.open': 'Apri calendario',\n 'calendar.prevMonth': 'Mese precedente',\n 'calendar.nextMonth': 'Mese successivo',\n 'timePicker.clear': 'Cancella ora',\n 'timePicker.open': 'Apri selettore ora',\n 'dateTimePicker.clear': 'Cancella valore',\n 'dateTimePicker.open': 'Apri selettore data e ora',\n 'dateTimePicker.label': 'Data e ora',\n 'dateTimePicker.dateTab': 'Data',\n 'dateTimePicker.timeTab': 'Ora',\n 'table.export': 'Esporta',\n 'table.sendOnEmail': 'Invia via email',\n 'table.sort': 'Ordina',\n 'table.sortBy': 'Ordina per',\n 'table.filters': 'Filtri',\n 'table.filtersDescription': 'Restringi la tabella con i campi qui sotto.',\n 'table.dragHandle': 'Trascina per riordinare',\n 'table.range': '{from}–{to} di {total}',\n 'table.rowsPerPage': 'Righe per pagina',\n 'calendar.month0': 'Gennaio',\n 'calendar.month1': 'Febbraio',\n 'calendar.month2': 'Marzo',\n 'calendar.month3': 'Aprile',\n 'calendar.month4': 'Maggio',\n 'calendar.month5': 'Giugno',\n 'calendar.month6': 'Luglio',\n 'calendar.month7': 'Agosto',\n 'calendar.month8': 'Settembre',\n 'calendar.month9': 'Ottobre',\n 'calendar.month10': 'Novembre',\n 'calendar.month11': 'Dicembre',\n 'calendar.weekday0': 'Do',\n 'calendar.weekday1': 'Lu',\n 'calendar.weekday2': 'Ma',\n 'calendar.weekday3': 'Me',\n 'calendar.weekday4': 'Gi',\n 'calendar.weekday5': 'Ve',\n 'calendar.weekday6': 'Sa',\n 'calendar.selectYear': 'Seleziona anno',\n 'time.hour': 'Ora',\n 'time.minute': 'Minuto',\n 'time.second': 'Secondo',\n 'time.meridiem': 'AM/PM',\n 'time.am': 'AM',\n 'time.pm': 'PM',\n 'settings.themeTitle': 'Tema',\n 'settings.themeDesc': 'Passa dal tema chiaro a quello scuro.',\n 'settings.light': 'Chiaro',\n 'settings.lightDesc': 'Tema luminoso',\n 'settings.dark': 'Scuro',\n 'settings.darkDesc': 'Tema attenuato',\n 'settings.languageDesc': 'Scegli la lingua del pannello — salvata per la prossima volta.',\n 'settings.accentTitle': 'Colore accento',\n 'settings.accentDesc':\n 'Scegli un accento per ogni tema — viene salvato e ripristinato alla prossima apertura del pannello.',\n 'settings.lightTheme': 'Tema chiaro',\n 'settings.darkTheme': 'Tema scuro',\n 'settings.accentDefault': 'Predefinito ({color})',\n 'settings.fontTitle': 'Carattere',\n 'settings.fontDesc':\n 'Scegli un preset o digita un Google Font qualsiasi — applicato a tutta l’app e salvato.',\n 'settings.fontFamily': 'Famiglia di caratteri',\n 'settings.fontSearch': 'Cerca o digita un Google Font qualsiasi…',\n 'settings.fontDefault': '{font} (predefinito)',\n 'settings.headerTitle': 'Intestazione',\n 'settings.headerDesc':\n 'Mantieni l’intestazione fissa allo scorrimento o lasciala scorrere — salvato per la prossima volta.',\n 'settings.scrollable': 'Scorrevole',\n 'settings.scrollableDesc': 'Scorre via',\n 'settings.fixed': 'Fissa',\n 'settings.fixedDesc': 'Resta allo scorrimento',\n 'settings.shapeTitle': 'Forma',\n 'settings.shapeDesc':\n 'Stile degli angoli di schede, campi, pulsanti e finestre in tutto il pannello.',\n 'settings.rounded': 'Arrotondata',\n 'settings.roundedDesc': 'Angoli morbidi',\n 'settings.square': 'Quadrata',\n 'settings.squareDesc': 'Angoli netti',\n 'rte.placeholder': 'Scrivi qualcosa…',\n 'rte.formatting': 'Formattazione',\n 'rte.undo': 'Annulla',\n 'rte.redo': 'Ripeti',\n 'rte.fontSize': 'Dimensione carattere',\n 'rte.textColor': 'Colore testo',\n 'rte.bold': 'Grassetto',\n 'rte.italic': 'Corsivo',\n 'rte.underline': 'Sottolineato',\n 'rte.bulletList': 'Elenco puntato',\n 'rte.numberedList': 'Elenco numerato',\n 'rte.quote': 'Citazione',\n 'rte.alignLeft': 'Allinea a sinistra',\n 'rte.alignCenter': 'Allinea al centro',\n 'rte.alignRight': 'Allinea a destra',\n 'rte.link': 'Inserisci link',\n 'rte.insertImage': 'Inserisci immagine',\n 'rte.insertVideo': 'Inserisci video',\n 'rte.uploadImage': 'Carica immagine',\n 'rte.imageByUrl': 'Tramite URL',\n 'rte.imageError': 'Impossibile aggiungere l’immagine. Riprova.',\n 'rte.linkTitle': 'Inserisci link',\n 'rte.linkUrl': 'URL del link',\n 'rte.imageTitle': 'Inserisci immagine',\n 'rte.imageUrl': 'URL dell’immagine',\n 'rte.videoTitle': 'Inserisci video',\n 'rte.videoUrl': 'URL del video',\n 'rte.videoUrlPlaceholder': 'YouTube, Vimeo o l’URL di un file diretto',\n 'rte.embeddedVideo': 'Video incorporato',\n 'fileUploader.choose': 'Scegli un file',\n 'fileUploader.dropSuffix': 'o trascinalo qui',\n 'fileUploader.uploaded': 'Caricato',\n 'fileUploader.hintUpToOne': 'Fino a {count} file',\n 'fileUploader.hintUpToMany': 'Fino a {count} file',\n 'fileUploader.hintMax': 'Max {size} ciascuno',\n 'fileUploader.exceedsLimit': 'Supera il limite di {size}',\n 'fileUploader.download': 'Scarica {name}',\n 'fileCard.download': 'Scarica {name}',\n 'fileUploader.remove': 'Rimuovi {name}',\n 'fileUploader.crop': 'Ritaglia {name}',\n 'fileUploader.editAlt': 'Modifica testo alternativo per {name}',\n 'fileUploader.preview': 'Anteprima di {name}',\n 'fileUploader.closePreview': 'Chiudi anteprima',\n 'fileUploader.duplicate': 'Alcuni file sono già stati aggiunti',\n 'fileUploader.wrongTypeOne': '«{name}» ha un tipo di file non supportato',\n 'fileUploader.wrongTypeMany': '{count} file hanno un tipo non supportato',\n 'fileUploader.tooLargeOne': '«{name}» supera il limite di {size}',\n 'fileUploader.tooLargeMany': '{count} file superano il limite di {size}',\n 'fileUploader.cropTitle': 'Ritaglia immagine',\n 'fileUploader.altTitle': 'Testo alternativo',\n 'fileUploader.cropHint': 'Trascina per selezionare l’area da mantenere',\n 'fileUploader.altPlaceholder': 'Descrivi l’immagine per i lettori di schermo…',\n 'fileUploader.cropError':\n 'Impossibile ritagliare questa immagine — potrebbe essere servita da un’altra origine senza CORS.',\n 'codeBlock.copy': 'Copia codice',\n 'codeBlock.copied': 'Copiato!',\n 'clipboard.copy': 'Copia',\n 'clipboard.copied': 'Copiato!',\n 'colorRamp.groupLabel': 'Scala colore {name}',\n 'colorRamp.base': 'base',\n 'colorRamp.clickToCopy': 'Clic per copiare',\n 'colorRamp.copyAria': '{name}-{step}, {hex}. Copia',\n 'colorRamp.copied': 'Copiato {step}: {hex}',\n 'colorRamp.copyFailed': 'Impossibile copiare {step}',\n 'colorRamp.invalid': 'Scegli un colore hex valido per generare la sua scala.',\n 'colorRamp.lightest': 'Più chiaro',\n 'colorRamp.darkest': 'Più scuro',\n 'colorRamp.black': 'nero',\n 'colorRamp.white': 'bianco',\n 'descriptionList.empty': 'Non impostato',\n 'descriptionList.loading': 'Caricamento dettagli',\n 'sidebar.searchPages': 'Cerca pagine',\n 'account.label': 'Account',\n 'settings.label': 'Impostazioni',\n 'language.label': 'Lingua',\n}\n\n/** Flag for the Italian UI language — rendered beside the language in the header switcher. */\nexport const IT_FLAG = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 640 480\">\n <g fill-rule=\"evenodd\" stroke-width=\"1pt\">\n <path fill=\"#fff\" d=\"M0 0h640v480H0z\"/>\n <path fill=\"#009246\" d=\"M0 0h213.3v480H0z\"/>\n <path fill=\"#ce2b37\" d=\"M426.7 0H640v480H426.7z\"/>\n </g>\n</svg>`\n","import type { MessageCatalog } from '../messages'\n\n/** French — translated from the English baseline (`en.ts`); omitted keys fall back to English. */\nexport const FR_MESSAGES: MessageCatalog = {\n 'common.close': 'Fermer',\n 'common.cancel': 'Annuler',\n 'common.confirm': 'Confirmer',\n 'common.delete': 'Supprimer',\n 'common.remove': 'Retirer',\n 'common.loading': 'Chargement…',\n 'common.clear': 'Effacer',\n 'common.apply': 'Appliquer',\n 'common.search': 'Rechercher…',\n 'common.all': 'Tous',\n 'common.any': 'Peu importe',\n 'common.yes': 'Oui',\n 'common.no': 'Non',\n 'common.save': 'Enregistrer',\n 'common.insert': 'Insérer',\n 'common.update': 'Mettre à jour',\n 'common.done': 'Terminé',\n 'common.min': 'Min',\n 'common.max': 'Max',\n 'common.from': 'De',\n 'common.to': 'À',\n 'select.placeholder': 'Sélectionner…',\n 'select.noOptions': 'Aucune option',\n 'select.clear': 'Effacer la sélection',\n 'multiSelect.clearAll': 'Tout effacer',\n 'pagination.previous': 'Aller à la page précédente',\n 'pagination.next': 'Aller à la page suivante',\n 'pagination.first': 'Aller à la première page',\n 'pagination.last': 'Aller à la dernière page',\n 'pagination.page': 'Aller à la page {page}',\n 'emptyState.title': 'Aucun résultat trouvé',\n 'errorState.title': 'Une erreur est survenue',\n 'errorState.description': 'Une erreur inattendue s’est produite. Veuillez réessayer.',\n 'errorState.retry': 'Réessayer',\n 'errorState.details': 'Détails',\n 'errorState.requestFailed': 'La requête a échoué ({status})',\n 'notFound.title': 'Page introuvable',\n 'notFound.description': \"La page que vous recherchez n'existe pas ou a peut-être été déplacée.\",\n 'notFound.action': \"Retour à l'accueil\",\n 'userCard.signOut': 'Se déconnecter',\n 'userCard.welcome': 'Bienvenue',\n 'textField.fieldAction': 'Action du champ',\n 'phoneField.country': 'Pays',\n 'phoneField.search': 'Rechercher un pays…',\n 'phoneField.suggested': 'Suggérés',\n 'phoneField.allCountries': 'Tous les pays',\n 'textField.showPassword': 'Afficher le mot de passe',\n 'textField.hidePassword': 'Masquer le mot de passe',\n 'textField.capsLock': 'Verr. Maj est activé',\n 'textField.strengthWeak': 'Faible',\n 'textField.strengthMedium': 'Moyen',\n 'textField.strengthStrong': 'Fort',\n 'numberField.decrease': 'Diminuer',\n 'numberField.increase': 'Augmenter',\n 'otpField.digit': 'Chiffre {index} sur {total}',\n 'breadcrumbs.label': 'Fil d’Ariane',\n 'breadcrumbs.home': 'Accueil',\n 'pageTitle.back': 'Retour',\n 'pageActions.label': 'Actions',\n 'themeToggle.label': 'Changer le thème de couleur',\n 'fullscreenToggle.label': 'Basculer en plein écran',\n 'loader.label': 'Chargement',\n 'progress.label': 'Progression',\n 'tagsField.add': 'Ajouter une étiquette',\n 'removeDialog.title': 'Retirer',\n 'removeDialog.message': 'Voulez-vous vraiment supprimer ?',\n 'removeDialog.typeToConfirm': 'Saisissez {text} pour confirmer',\n 'colorPicker.pick': 'Choisir une couleur',\n 'colorPicker.value': 'Valeur de couleur',\n 'colorPicker.noColor': 'Aucune couleur',\n 'colorPicker.saturation': 'Saturation et luminosité',\n 'colorPicker.hue': 'Teinte',\n 'colorPicker.opacity': 'Opacité',\n 'datePicker.clear': 'Effacer la date',\n 'datePicker.open': 'Ouvrir le calendrier',\n 'calendar.prevMonth': 'Mois précédent',\n 'calendar.nextMonth': 'Mois suivant',\n 'timePicker.clear': 'Effacer l’heure',\n 'timePicker.open': 'Ouvrir le sélecteur d’heure',\n 'dateTimePicker.clear': 'Effacer la valeur',\n 'dateTimePicker.open': 'Ouvrir le sélecteur de date et d’heure',\n 'dateTimePicker.label': 'Date et heure',\n 'dateTimePicker.dateTab': 'Date',\n 'dateTimePicker.timeTab': 'Heure',\n 'table.export': 'Exporter',\n 'table.sendOnEmail': 'Envoyer par e-mail',\n 'table.sort': 'Trier',\n 'table.sortBy': 'Trier par',\n 'table.filters': 'Filtres',\n 'table.filtersDescription': 'Affinez le tableau avec les champs ci-dessous.',\n 'table.dragHandle': 'Glisser pour réorganiser',\n 'table.range': '{from}–{to} sur {total}',\n 'table.rowsPerPage': 'Lignes par page',\n 'calendar.month0': 'Janvier',\n 'calendar.month1': 'Février',\n 'calendar.month2': 'Mars',\n 'calendar.month3': 'Avril',\n 'calendar.month4': 'Mai',\n 'calendar.month5': 'Juin',\n 'calendar.month6': 'Juillet',\n 'calendar.month7': 'Août',\n 'calendar.month8': 'Septembre',\n 'calendar.month9': 'Octobre',\n 'calendar.month10': 'Novembre',\n 'calendar.month11': 'Décembre',\n 'calendar.weekday0': 'Di',\n 'calendar.weekday1': 'Lu',\n 'calendar.weekday2': 'Ma',\n 'calendar.weekday3': 'Me',\n 'calendar.weekday4': 'Je',\n 'calendar.weekday5': 'Ve',\n 'calendar.weekday6': 'Sa',\n 'calendar.selectYear': 'Sélectionner l’année',\n 'time.hour': 'Heure',\n 'time.minute': 'Minute',\n 'time.second': 'Seconde',\n 'time.meridiem': 'AM/PM',\n 'time.am': 'AM',\n 'time.pm': 'PM',\n 'settings.themeTitle': 'Thème',\n 'settings.themeDesc': 'Basculez entre le thème clair et sombre.',\n 'settings.light': 'Clair',\n 'settings.lightDesc': 'Thème lumineux',\n 'settings.dark': 'Sombre',\n 'settings.darkDesc': 'Thème tamisé',\n 'settings.languageDesc': 'Choisissez la langue du panneau — enregistrée pour la prochaine fois.',\n 'settings.accentTitle': 'Couleur d’accent',\n 'settings.accentDesc':\n 'Choisissez un accent pour chaque thème — il est enregistré et restauré à la prochaine ouverture du panneau.',\n 'settings.lightTheme': 'Thème clair',\n 'settings.darkTheme': 'Thème sombre',\n 'settings.accentDefault': 'Par défaut ({color})',\n 'settings.fontTitle': 'Police',\n 'settings.fontDesc':\n 'Choisissez un préréglage ou saisissez n’importe quelle Google Font — appliquée à toute l’app et enregistrée.',\n 'settings.fontFamily': 'Famille de police',\n 'settings.fontSearch': 'Recherchez ou saisissez n’importe quelle Google Font…',\n 'settings.fontDefault': '{font} (par défaut)',\n 'settings.headerTitle': 'En-tête',\n 'settings.headerDesc':\n 'Gardez l’en-tête fixe au défilement, ou laissez-le défiler — enregistré pour la prochaine fois.',\n 'settings.scrollable': 'Défilant',\n 'settings.scrollableDesc': 'Défile',\n 'settings.fixed': 'Fixe',\n 'settings.fixedDesc': 'Reste au défilement',\n 'settings.shapeTitle': 'Forme',\n 'settings.shapeDesc':\n 'Style des coins des cartes, champs, boutons et dialogues dans tout le panneau.',\n 'settings.rounded': 'Arrondie',\n 'settings.roundedDesc': 'Coins doux',\n 'settings.square': 'Carrée',\n 'settings.squareDesc': 'Coins nets',\n 'rte.placeholder': 'Écrivez quelque chose…',\n 'rte.formatting': 'Mise en forme',\n 'rte.undo': 'Annuler',\n 'rte.redo': 'Rétablir',\n 'rte.fontSize': 'Taille de police',\n 'rte.textColor': 'Couleur du texte',\n 'rte.bold': 'Gras',\n 'rte.italic': 'Italique',\n 'rte.underline': 'Souligné',\n 'rte.bulletList': 'Liste à puces',\n 'rte.numberedList': 'Liste numérotée',\n 'rte.quote': 'Citation',\n 'rte.alignLeft': 'Aligner à gauche',\n 'rte.alignCenter': 'Centrer',\n 'rte.alignRight': 'Aligner à droite',\n 'rte.link': 'Insérer un lien',\n 'rte.insertImage': 'Insérer une image',\n 'rte.insertVideo': 'Insérer une vidéo',\n 'rte.uploadImage': 'Importer une image',\n 'rte.imageByUrl': 'Par URL',\n 'rte.imageError': 'Impossible d’ajouter l’image. Veuillez réessayer.',\n 'rte.linkTitle': 'Insérer un lien',\n 'rte.linkUrl': 'URL du lien',\n 'rte.imageTitle': 'Insérer une image',\n 'rte.imageUrl': 'URL de l’image',\n 'rte.videoTitle': 'Insérer une vidéo',\n 'rte.videoUrl': 'URL de la vidéo',\n 'rte.videoUrlPlaceholder': 'YouTube, Vimeo ou l’URL d’un fichier direct',\n 'rte.embeddedVideo': 'Vidéo intégrée',\n 'fileUploader.choose': 'Choisir un fichier',\n 'fileUploader.dropSuffix': 'ou glissez-déposez-le ici',\n 'fileUploader.uploaded': 'Importé',\n 'fileUploader.hintUpToOne': 'Jusqu’à {count} fichier',\n 'fileUploader.hintUpToMany': 'Jusqu’à {count} fichiers',\n 'fileUploader.hintMax': '{size} max. chacun',\n 'fileUploader.exceedsLimit': 'Dépasse la limite de {size}',\n 'fileUploader.download': 'Télécharger {name}',\n 'fileCard.download': 'Télécharger {name}',\n 'fileUploader.remove': 'Retirer {name}',\n 'fileUploader.crop': 'Rogner {name}',\n 'fileUploader.editAlt': 'Modifier le texte alternatif de {name}',\n 'fileUploader.preview': 'Aperçu de {name}',\n 'fileUploader.closePreview': 'Fermer l’aperçu',\n 'fileUploader.duplicate': 'Certains fichiers sont déjà ajoutés',\n 'fileUploader.wrongTypeOne': '« {name} » a un type de fichier non pris en charge',\n 'fileUploader.wrongTypeMany': '{count} fichiers ont un type non pris en charge',\n 'fileUploader.tooLargeOne': '« {name} » dépasse la limite de {size}',\n 'fileUploader.tooLargeMany': '{count} fichiers dépassent la limite de {size}',\n 'fileUploader.cropTitle': 'Rogner l’image',\n 'fileUploader.altTitle': 'Texte alternatif',\n 'fileUploader.cropHint': 'Faites glisser pour sélectionner la zone à conserver',\n 'fileUploader.altPlaceholder': 'Décrivez l’image pour les lecteurs d’écran…',\n 'fileUploader.cropError':\n 'Impossible de rogner cette image — elle est peut-être servie depuis une autre origine sans CORS.',\n 'codeBlock.copy': 'Copier le code',\n 'codeBlock.copied': 'Copié !',\n 'clipboard.copy': 'Copier',\n 'clipboard.copied': 'Copié !',\n 'colorRamp.groupLabel': 'Échelle de couleur {name}',\n 'colorRamp.base': 'base',\n 'colorRamp.clickToCopy': 'Cliquer pour copier',\n 'colorRamp.copyAria': '{name}-{step}, {hex}. Copier',\n 'colorRamp.copied': '{step} copié : {hex}',\n 'colorRamp.copyFailed': 'Impossible de copier {step}',\n 'colorRamp.invalid': 'Choisissez une couleur hex valide pour générer son échelle.',\n 'colorRamp.lightest': 'Le plus clair',\n 'colorRamp.darkest': 'Le plus foncé',\n 'colorRamp.black': 'noir',\n 'colorRamp.white': 'blanc',\n 'descriptionList.empty': 'Non défini',\n 'descriptionList.loading': 'Chargement des détails',\n 'sidebar.searchPages': 'Rechercher des pages',\n 'account.label': 'Compte',\n 'settings.label': 'Paramètres',\n 'language.label': 'Langue',\n}\n\n/** Flag for the French UI language — rendered beside the language in the header switcher. */\nexport const FR_FLAG = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 640 480\">\n <path fill=\"#000091\" d=\"M0 0h213.3v480H0z\"/>\n <path fill=\"#fff\" d=\"M213.3 0h213.4v480H213.3z\"/>\n <path fill=\"#e1000f\" d=\"M426.7 0H640v480H426.7z\"/>\n</svg>`\n","import type { MessageCatalog } from '../messages'\n\n/** Russian — translated from the English baseline (`en.ts`); omitted keys fall back to English. */\nexport const RU_MESSAGES: MessageCatalog = {\n 'common.close': 'Закрыть',\n 'common.cancel': 'Отмена',\n 'common.confirm': 'Подтвердить',\n 'common.delete': 'Удалить',\n 'common.remove': 'Убрать',\n 'common.loading': 'Загрузка…',\n 'common.clear': 'Очистить',\n 'common.apply': 'Применить',\n 'common.search': 'Поиск…',\n 'common.all': 'Все',\n 'common.any': 'Любой',\n 'common.yes': 'Да',\n 'common.no': 'Нет',\n 'common.save': 'Сохранить',\n 'common.insert': 'Вставить',\n 'common.update': 'Обновить',\n 'common.done': 'Готово',\n 'common.min': 'Мин',\n 'common.max': 'Макс',\n 'common.from': 'От',\n 'common.to': 'До',\n 'select.placeholder': 'Выберите…',\n 'select.noOptions': 'Нет вариантов',\n 'select.clear': 'Очистить выбор',\n 'multiSelect.clearAll': 'Очистить всё',\n 'pagination.previous': 'Перейти на предыдущую страницу',\n 'pagination.next': 'Перейти на следующую страницу',\n 'pagination.first': 'Перейти на первую страницу',\n 'pagination.last': 'Перейти на последнюю страницу',\n 'pagination.page': 'Перейти на страницу {page}',\n 'emptyState.title': 'Ничего не найдено',\n 'errorState.title': 'Что-то пошло не так',\n 'errorState.description': 'Произошла непредвиденная ошибка. Попробуйте ещё раз.',\n 'errorState.retry': 'Повторить',\n 'errorState.details': 'Подробности',\n 'errorState.requestFailed': 'Запрос не выполнен ({status})',\n 'notFound.title': 'Страница не найдена',\n 'notFound.description': 'Запрашиваемая страница не существует или была перемещена.',\n 'notFound.action': 'На главную',\n 'userCard.signOut': 'Выйти',\n 'userCard.welcome': 'Добро пожаловать',\n 'textField.fieldAction': 'Действие поля',\n 'phoneField.country': 'Страна',\n 'phoneField.search': 'Поиск страны…',\n 'phoneField.suggested': 'Рекомендуемые',\n 'phoneField.allCountries': 'Все страны',\n 'textField.showPassword': 'Показать пароль',\n 'textField.hidePassword': 'Скрыть пароль',\n 'textField.capsLock': 'Включён Caps Lock',\n 'textField.strengthWeak': 'Слабый',\n 'textField.strengthMedium': 'Средний',\n 'textField.strengthStrong': 'Надёжный',\n 'numberField.decrease': 'Уменьшить',\n 'numberField.increase': 'Увеличить',\n 'otpField.digit': 'Цифра {index} из {total}',\n 'breadcrumbs.label': 'Хлебные крошки',\n 'breadcrumbs.home': 'Главная',\n 'pageTitle.back': 'Назад',\n 'pageActions.label': 'Действия',\n 'themeToggle.label': 'Переключить цветовую тему',\n 'fullscreenToggle.label': 'Полноэкранный режим',\n 'loader.label': 'Загрузка',\n 'progress.label': 'Прогресс',\n 'tagsField.add': 'Добавить тег',\n 'removeDialog.title': 'Убрать',\n 'removeDialog.message': 'Вы уверены, что хотите удалить?',\n 'removeDialog.typeToConfirm': 'Введите {text} для подтверждения',\n 'colorPicker.pick': 'Выберите цвет',\n 'colorPicker.value': 'Значение цвета',\n 'colorPicker.noColor': 'Без цвета',\n 'colorPicker.saturation': 'Насыщенность и яркость',\n 'colorPicker.hue': 'Оттенок',\n 'colorPicker.opacity': 'Прозрачность',\n 'datePicker.clear': 'Очистить дату',\n 'datePicker.open': 'Открыть календарь',\n 'calendar.prevMonth': 'Предыдущий месяц',\n 'calendar.nextMonth': 'Следующий месяц',\n 'timePicker.clear': 'Очистить время',\n 'timePicker.open': 'Открыть выбор времени',\n 'dateTimePicker.clear': 'Очистить значение',\n 'dateTimePicker.open': 'Открыть выбор даты и времени',\n 'dateTimePicker.label': 'Дата и время',\n 'dateTimePicker.dateTab': 'Дата',\n 'dateTimePicker.timeTab': 'Время',\n 'table.export': 'Экспорт',\n 'table.sendOnEmail': 'Отправить на почту',\n 'table.sort': 'Сортировка',\n 'table.sortBy': 'Сортировать по',\n 'table.filters': 'Фильтры',\n 'table.filtersDescription': 'Уточните таблицу по полям ниже.',\n 'table.dragHandle': 'Перетащите для изменения порядка',\n 'table.range': '{from}–{to} из {total}',\n 'table.rowsPerPage': 'Строк на странице',\n 'calendar.month0': 'Январь',\n 'calendar.month1': 'Февраль',\n 'calendar.month2': 'Март',\n 'calendar.month3': 'Апрель',\n 'calendar.month4': 'Май',\n 'calendar.month5': 'Июнь',\n 'calendar.month6': 'Июль',\n 'calendar.month7': 'Август',\n 'calendar.month8': 'Сентябрь',\n 'calendar.month9': 'Октябрь',\n 'calendar.month10': 'Ноябрь',\n 'calendar.month11': 'Декабрь',\n 'calendar.weekday0': 'Вс',\n 'calendar.weekday1': 'Пн',\n 'calendar.weekday2': 'Вт',\n 'calendar.weekday3': 'Ср',\n 'calendar.weekday4': 'Чт',\n 'calendar.weekday5': 'Пт',\n 'calendar.weekday6': 'Сб',\n 'calendar.selectYear': 'Выберите год',\n 'time.hour': 'Часы',\n 'time.minute': 'Минуты',\n 'time.second': 'Секунды',\n 'time.meridiem': 'AM/PM',\n 'time.am': 'AM',\n 'time.pm': 'PM',\n 'settings.themeTitle': 'Тема',\n 'settings.themeDesc': 'Переключение между светлой и тёмной темой.',\n 'settings.light': 'Светлая',\n 'settings.lightDesc': 'Светлая тема',\n 'settings.dark': 'Тёмная',\n 'settings.darkDesc': 'Приглушённая тема',\n 'settings.languageDesc': 'Выберите язык панели — сохранится на будущее.',\n 'settings.accentTitle': 'Акцентный цвет',\n 'settings.accentDesc':\n 'Выберите акцент для каждой темы — он сохранится и восстановится при следующем открытии панели.',\n 'settings.lightTheme': 'Светлая тема',\n 'settings.darkTheme': 'Тёмная тема',\n 'settings.accentDefault': 'По умолчанию ({color})',\n 'settings.fontTitle': 'Шрифт',\n 'settings.fontDesc':\n 'Выберите пресет или введите любой Google Font — применяется во всём приложении и сохраняется.',\n 'settings.fontFamily': 'Семейство шрифтов',\n 'settings.fontSearch': 'Найдите или введите любой Google Font…',\n 'settings.fontDefault': '{font} (по умолчанию)',\n 'settings.headerTitle': 'Шапка',\n 'settings.headerDesc':\n 'Закрепите шапку при прокрутке или дайте ей прокручиваться — сохранится на будущее.',\n 'settings.scrollable': 'Прокручиваемая',\n 'settings.scrollableDesc': 'Прокручивается',\n 'settings.fixed': 'Закреплённая',\n 'settings.fixedDesc': 'Остаётся при прокрутке',\n 'settings.shapeTitle': 'Форма',\n 'settings.shapeDesc': 'Стиль углов карточек, полей, кнопок и диалогов во всей панели.',\n 'settings.rounded': 'Скруглённая',\n 'settings.roundedDesc': 'Мягкие углы',\n 'settings.square': 'Квадратная',\n 'settings.squareDesc': 'Острые углы',\n 'rte.placeholder': 'Напишите что-нибудь…',\n 'rte.formatting': 'Форматирование',\n 'rte.undo': 'Отменить',\n 'rte.redo': 'Повторить',\n 'rte.fontSize': 'Размер шрифта',\n 'rte.textColor': 'Цвет текста',\n 'rte.bold': 'Полужирный',\n 'rte.italic': 'Курсив',\n 'rte.underline': 'Подчёркнутый',\n 'rte.bulletList': 'Маркированный список',\n 'rte.numberedList': 'Нумерованный список',\n 'rte.quote': 'Цитата',\n 'rte.alignLeft': 'По левому краю',\n 'rte.alignCenter': 'По центру',\n 'rte.alignRight': 'По правому краю',\n 'rte.link': 'Вставить ссылку',\n 'rte.insertImage': 'Вставить изображение',\n 'rte.insertVideo': 'Вставить видео',\n 'rte.uploadImage': 'Загрузить изображение',\n 'rte.imageByUrl': 'По URL',\n 'rte.imageError': 'Не удалось добавить изображение. Попробуйте ещё раз.',\n 'rte.linkTitle': 'Вставить ссылку',\n 'rte.linkUrl': 'URL ссылки',\n 'rte.imageTitle': 'Вставить изображение',\n 'rte.imageUrl': 'URL изображения',\n 'rte.videoTitle': 'Вставить видео',\n 'rte.videoUrl': 'URL видео',\n 'rte.videoUrlPlaceholder': 'YouTube, Vimeo или прямая ссылка на файл',\n 'rte.embeddedVideo': 'Встроенное видео',\n 'fileUploader.choose': 'Выберите файл',\n 'fileUploader.dropSuffix': 'или перетащите его сюда',\n 'fileUploader.uploaded': 'Загружено',\n 'fileUploader.hintUpToOne': 'До {count} файла',\n 'fileUploader.hintUpToMany': 'До {count} файлов',\n 'fileUploader.hintMax': 'Макс. {size} каждый',\n 'fileUploader.exceedsLimit': 'Превышает лимит {size}',\n 'fileUploader.download': 'Скачать {name}',\n 'fileCard.download': 'Скачать {name}',\n 'fileUploader.remove': 'Убрать {name}',\n 'fileUploader.crop': 'Обрезать {name}',\n 'fileUploader.editAlt': 'Изменить альт-текст для {name}',\n 'fileUploader.preview': 'Предпросмотр {name}',\n 'fileUploader.closePreview': 'Закрыть предпросмотр',\n 'fileUploader.duplicate': 'Некоторые файлы уже добавлены',\n 'fileUploader.wrongTypeOne': '«{name}» имеет неподдерживаемый тип файла',\n 'fileUploader.wrongTypeMany': '{count} файлов имеют неподдерживаемый тип',\n 'fileUploader.tooLargeOne': '«{name}» превышает лимит {size}',\n 'fileUploader.tooLargeMany': '{count} файлов превышают лимит {size}',\n 'fileUploader.cropTitle': 'Обрезать изображение',\n 'fileUploader.altTitle': 'Альт-текст',\n 'fileUploader.cropHint': 'Перетащите, чтобы выбрать область для сохранения',\n 'fileUploader.altPlaceholder': 'Опишите изображение для программ чтения с экрана…',\n 'fileUploader.cropError':\n 'Не удалось обрезать это изображение — возможно, оно загружается с другого домена без CORS.',\n 'codeBlock.copy': 'Копировать код',\n 'codeBlock.copied': 'Скопировано!',\n 'clipboard.copy': 'Копировать',\n 'clipboard.copied': 'Скопировано!',\n 'colorRamp.groupLabel': 'Цветовая шкала {name}',\n 'colorRamp.base': 'базовый',\n 'colorRamp.clickToCopy': 'Нажмите, чтобы скопировать',\n 'colorRamp.copyAria': '{name}-{step}, {hex}. Копировать',\n 'colorRamp.copied': 'Скопировано {step}: {hex}',\n 'colorRamp.copyFailed': 'Не удалось скопировать {step}',\n 'colorRamp.invalid': 'Выберите корректный hex-цвет, чтобы построить шкалу.',\n 'colorRamp.lightest': 'Самый светлый',\n 'colorRamp.darkest': 'Самый тёмный',\n 'colorRamp.black': 'чёрный',\n 'colorRamp.white': 'белый',\n 'descriptionList.empty': 'Не задано',\n 'descriptionList.loading': 'Загрузка данных',\n 'sidebar.searchPages': 'Поиск страниц',\n 'account.label': 'Аккаунт',\n 'settings.label': 'Настройки',\n 'language.label': 'Язык',\n}\n\n/** Flag for the Russian UI language — rendered beside the language in the header switcher. */\nexport const RU_FLAG = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 640 480\">\n <path fill=\"#fff\" d=\"M0 0h640v160H0z\"/>\n <path fill=\"#0039a6\" d=\"M0 160h640v160H0z\"/>\n <path fill=\"#d52b1e\" d=\"M0 320h640v160H0z\"/>\n</svg>`\n","/**\n * The library's own static UI strings, shipped **pre-translated** so a consuming app gets a localized\n * admin panel with zero setup — it just lists the languages in `config.i18n`. This is deliberately a\n * tiny, dependency-free layer (no i18next): the string set is small and fixed, resolved by a plain\n * `createTranslator`. Apps translate their **own** content however they like (react-i18next, …); this\n * only covers the library's built-in labels.\n *\n * This module owns the **types + resolution logic**; the actual per-language catalogs live one file\n * each under `./locales/` (`en.ts`, `ka.ts`, …), so the file stays small as languages are added.\n * **To add a string:** add its key to the `Messages` interface below, fill it in `./locales/en.ts`\n * (the complete baseline), and translate it in the other catalogs you can. **To add a language:** drop\n * a `./locales/<base>.ts` (a `MessageCatalog`) and register it in `BUILTIN_MESSAGES`. Any language the\n * library doesn't ship can still be supplied by the consumer via `config.i18n.messages`, falling back\n * to English per key. `{name}` tokens are interpolated from the `vars` passed to `t`.\n */\nimport { EN_MESSAGES, EN_FLAG } from './locales/en'\nimport { KA_MESSAGES, KA_FLAG } from './locales/ka'\nimport { ES_MESSAGES, ES_FLAG } from './locales/es'\nimport { DE_MESSAGES, DE_FLAG } from './locales/de'\nimport { IT_MESSAGES, IT_FLAG } from './locales/it'\nimport { FR_MESSAGES, FR_FLAG } from './locales/fr'\nimport { RU_MESSAGES, RU_FLAG } from './locales/ru'\n\n// re-exported so `EN_MESSAGES` stays importable from `../i18n/messages` (its original home)\nexport { EN_MESSAGES }\n\nexport interface Messages {\n // shared / reused across components\n 'common.close': string\n 'common.cancel': string\n 'common.confirm': string\n 'common.delete': string\n 'common.remove': string\n 'common.loading': string\n 'common.clear': string\n 'common.apply': string\n 'common.search': string\n 'common.all': string\n 'common.any': string\n 'common.yes': string\n 'common.no': string\n 'common.save': string\n 'common.insert': string\n 'common.update': string\n 'common.done': string\n 'common.min': string\n 'common.max': string\n 'common.from': string\n 'common.to': string\n // Select / MultiSelect\n 'select.placeholder': string\n 'select.noOptions': string\n 'select.clear': string\n 'multiSelect.clearAll': string\n // Pagination\n 'pagination.previous': string\n 'pagination.next': string\n 'pagination.first': string\n 'pagination.last': string\n 'pagination.page': string\n // misc components\n 'emptyState.title': string\n 'errorState.title': string\n 'errorState.description': string\n 'errorState.retry': string\n 'errorState.details': string\n 'errorState.requestFailed': string\n 'notFound.title': string\n 'notFound.description': string\n 'notFound.action': string\n 'userCard.signOut': string\n 'userCard.welcome': string\n 'textField.fieldAction': string\n 'phoneField.country': string\n 'phoneField.search': string\n 'phoneField.suggested': string\n 'phoneField.allCountries': string\n 'textField.showPassword': string\n 'textField.hidePassword': string\n 'textField.capsLock': string\n 'textField.strengthWeak': string\n 'textField.strengthMedium': string\n 'textField.strengthStrong': string\n 'numberField.decrease': string\n 'numberField.increase': string\n 'otpField.digit': string\n 'breadcrumbs.label': string\n 'breadcrumbs.home': string\n 'pageTitle.back': string\n 'pageActions.label': string\n 'themeToggle.label': string\n 'fullscreenToggle.label': string\n 'loader.label': string\n 'progress.label': string\n 'tagsField.add': string\n // RemoveDialog\n 'removeDialog.title': string\n 'removeDialog.message': string\n 'removeDialog.typeToConfirm': string\n // ColorPicker\n 'colorPicker.pick': string\n 'colorPicker.value': string\n 'colorPicker.noColor': string\n 'colorPicker.saturation': string\n 'colorPicker.hue': string\n 'colorPicker.opacity': string\n // date / time pickers\n 'datePicker.clear': string\n 'datePicker.open': string\n 'calendar.prevMonth': string\n 'calendar.nextMonth': string\n 'timePicker.clear': string\n 'timePicker.open': string\n 'dateTimePicker.clear': string\n 'dateTimePicker.open': string\n 'dateTimePicker.label': string\n 'dateTimePicker.dateTab': string\n 'dateTimePicker.timeTab': string\n // Table\n 'table.export': string\n 'table.sendOnEmail': string\n 'table.sort': string\n 'table.sortBy': string\n 'table.filters': string\n 'table.filtersDescription': string\n 'table.dragHandle': string\n 'table.range': string\n 'table.rowsPerPage': string\n // calendar — full month names (0–11) + short weekday labels (0 = Sunday … 6 = Saturday)\n 'calendar.month0': string\n 'calendar.month1': string\n 'calendar.month2': string\n 'calendar.month3': string\n 'calendar.month4': string\n 'calendar.month5': string\n 'calendar.month6': string\n 'calendar.month7': string\n 'calendar.month8': string\n 'calendar.month9': string\n 'calendar.month10': string\n 'calendar.month11': string\n 'calendar.weekday0': string\n 'calendar.weekday1': string\n 'calendar.weekday2': string\n 'calendar.weekday3': string\n 'calendar.weekday4': string\n 'calendar.weekday5': string\n 'calendar.weekday6': string\n 'calendar.selectYear': string\n // time columns\n 'time.hour': string\n 'time.minute': string\n 'time.second': string\n 'time.meridiem': string\n 'time.am': string\n 'time.pm': string\n // SettingsDrawer\n 'settings.themeTitle': string\n 'settings.themeDesc': string\n 'settings.light': string\n 'settings.lightDesc': string\n 'settings.dark': string\n 'settings.darkDesc': string\n 'settings.languageDesc': string\n 'settings.accentTitle': string\n 'settings.accentDesc': string\n 'settings.lightTheme': string\n 'settings.darkTheme': string\n 'settings.accentDefault': string\n 'settings.fontTitle': string\n 'settings.fontDesc': string\n 'settings.fontFamily': string\n 'settings.fontSearch': string\n 'settings.fontDefault': string\n 'settings.headerTitle': string\n 'settings.headerDesc': string\n 'settings.scrollable': string\n 'settings.scrollableDesc': string\n 'settings.fixed': string\n 'settings.fixedDesc': string\n 'settings.shapeTitle': string\n 'settings.shapeDesc': string\n 'settings.rounded': string\n 'settings.roundedDesc': string\n 'settings.square': string\n 'settings.squareDesc': string\n // RichTextEditor\n 'rte.placeholder': string\n 'rte.formatting': string\n 'rte.undo': string\n 'rte.redo': string\n 'rte.fontSize': string\n 'rte.textColor': string\n 'rte.bold': string\n 'rte.italic': string\n 'rte.underline': string\n 'rte.bulletList': string\n 'rte.numberedList': string\n 'rte.quote': string\n 'rte.alignLeft': string\n 'rte.alignCenter': string\n 'rte.alignRight': string\n 'rte.link': string\n 'rte.insertImage': string\n 'rte.insertVideo': string\n 'rte.uploadImage': string\n 'rte.imageByUrl': string\n 'rte.imageError': string\n 'rte.linkTitle': string\n 'rte.linkUrl': string\n 'rte.imageTitle': string\n 'rte.imageUrl': string\n 'rte.videoTitle': string\n 'rte.videoUrl': string\n 'rte.videoUrlPlaceholder': string\n 'rte.embeddedVideo': string\n // FileUploader\n 'fileUploader.choose': string\n 'fileUploader.dropSuffix': string\n 'fileUploader.uploaded': string\n 'fileUploader.hintUpToOne': string\n 'fileUploader.hintUpToMany': string\n 'fileUploader.hintMax': string\n 'fileUploader.exceedsLimit': string\n 'fileUploader.download': string\n 'fileCard.download': string\n 'fileUploader.remove': string\n 'fileUploader.crop': string\n 'fileUploader.editAlt': string\n 'fileUploader.preview': string\n 'fileUploader.closePreview': string\n 'fileUploader.duplicate': string\n 'fileUploader.wrongTypeOne': string\n 'fileUploader.wrongTypeMany': string\n 'fileUploader.tooLargeOne': string\n 'fileUploader.tooLargeMany': string\n 'fileUploader.cropTitle': string\n 'fileUploader.altTitle': string\n 'fileUploader.cropHint': string\n 'fileUploader.altPlaceholder': string\n 'fileUploader.cropError': string\n // CodeBlock\n 'codeBlock.copy': string\n 'codeBlock.copied': string\n 'clipboard.copy': string\n 'clipboard.copied': string\n 'colorRamp.groupLabel': string\n 'colorRamp.base': string\n 'colorRamp.clickToCopy': string\n 'colorRamp.copyAria': string\n 'colorRamp.copied': string\n 'colorRamp.copyFailed': string\n 'colorRamp.invalid': string\n 'colorRamp.lightest': string\n 'colorRamp.darkest': string\n 'colorRamp.black': string\n 'colorRamp.white': string\n 'descriptionList.empty': string\n 'descriptionList.loading': string\n // Sidebar / shell\n 'sidebar.searchPages': string\n 'account.label': string\n 'settings.label': string\n 'language.label': string\n}\n\n/** A message key (autocompleted + checked by `t`). */\nexport type MessageKey = keyof Messages\n/** A (possibly partial) catalog for one language. */\nexport type MessageCatalog = Partial<Messages>\n/** Consumer-supplied catalogs, keyed by language code (`'ka-GE'`) or base language (`'ka'`). */\nexport type MessageOverrides = Record<string, MessageCatalog>\n\n/** Built-in catalogs the library ships, keyed by **base** language code. */\nexport const BUILTIN_MESSAGES: Record<string, MessageCatalog> = {\n en: EN_MESSAGES,\n ka: KA_MESSAGES,\n es: ES_MESSAGES,\n de: DE_MESSAGES,\n it: IT_MESSAGES,\n fr: FR_MESSAGES,\n ru: RU_MESSAGES,\n}\n\n/**\n * Built-in flag SVGs (raw markup strings), keyed by **base** language code — shown beside each language\n * in the header switcher. A language with no flag here simply renders without one; each locale ships its\n * own flag from its `./locales/<base>.ts` file. (Coverage grows alongside the catalogs.)\n */\nexport const BUILTIN_FLAGS: Record<string, string> = {\n en: EN_FLAG,\n ka: KA_FLAG,\n es: ES_FLAG,\n de: DE_FLAG,\n it: IT_FLAG,\n fr: FR_FLAG,\n ru: RU_FLAG,\n}\n\n/** Base language of a locale code — `'ka-GE'` → `'ka'`. */\nconst baseLang = (locale: string): string => locale.split('-')[0].toLowerCase()\n\n/** The built-in flag SVG markup for a locale code (matched by base language), or `undefined` if none. */\nexport function flagFor(locale: string): string | undefined {\n return BUILTIN_FLAGS[baseLang(locale)]\n}\n\n/** A bound translator: `t('key')`, with optional `{name}` interpolation. */\nexport type Translator = (key: MessageKey, vars?: Record<string, string | number>) => string\n\n/**\n * Build a translator for `locale`. Resolution per key: consumer override (exact code, then base) →\n * built-in catalog for the base language → English baseline → the key itself. `{name}` tokens in the\n * resolved string are replaced from `vars`.\n */\nexport function createTranslator(locale: string, overrides?: MessageOverrides): Translator {\n const b = baseLang(locale)\n const consumer: MessageCatalog = { ...overrides?.[b], ...overrides?.[locale] }\n const builtin = BUILTIN_MESSAGES[b] ?? {}\n return (key, vars) => {\n const raw = consumer[key] ?? builtin[key] ?? EN_MESSAGES[key] ?? key\n return vars ? raw.replace(/\\{(\\w+)\\}/g, (_, k) => String(vars[k] ?? `{${k}}`)) : raw\n }\n}\n\n/**\n * Catalogs for the **consuming app's own** UI strings (used by `useTranslations()`), keyed by language\n * code or base language (`'ka-GE'` or `'ka'`), then by an arbitrary string key the app chooses. Unlike\n * {@link MessageOverrides} (which overrides the library's fixed `Messages`), these keys are free-form —\n * this is how an app localizes its own copy (section titles, labels) through the same language switcher.\n */\nexport type AppMessages = Record<string, Record<string, string>>\n\n/** A translator over the app's own `AppMessages` — any string key, optional `{name}` interpolation. */\nexport type AppTranslator = (key: string, vars?: Record<string, string | number>) => string\n\n/**\n * Build a translator over the consuming app's own `AppMessages` for `locale`. Resolution per key: exact\n * code → base language → English (`'en'`) → the key itself (so a missing translation renders the key\n * visibly rather than blank). `{name}` tokens are interpolated from `vars`. Powers `useTranslations()`.\n */\nexport function createAppTranslator(locale: string, appMessages?: AppMessages): AppTranslator {\n const b = baseLang(locale)\n const src = appMessages ?? {}\n return (key, vars) => {\n const raw = src[locale]?.[key] ?? src[b]?.[key] ?? src.en?.[key] ?? key\n return vars ? raw.replace(/\\{(\\w+)\\}/g, (_, k) => String(vars[k] ?? `{${k}}`)) : raw\n }\n}\n"],"names":["EN_MESSAGES","EN_FLAG","KA_MESSAGES","KA_FLAG","ES_MESSAGES","ES_FLAG","DE_MESSAGES","DE_FLAG","IT_MESSAGES","IT_FLAG","FR_MESSAGES","FR_FLAG","RU_MESSAGES","RU_FLAG","BUILTIN_MESSAGES","BUILTIN_FLAGS","baseLang","locale","flagFor","createTranslator","overrides","b","consumer","builtin","key","vars","raw","_","k","createAppTranslator","appMessages","src","_a","_b","_c"],"mappings":"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"}