@shapio/cms 0.5.4 → 0.5.5

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 (291) hide show
  1. package/dist/admin/assets/{AssetTile-DWaHjfcU.js → AssetTile-CaYPqR_F.js} +2 -2
  2. package/dist/admin/assets/{AssetTile-DWaHjfcU.js.map → AssetTile-CaYPqR_F.js.map} +1 -1
  3. package/dist/admin/assets/{AssistError-CYV_H4uu.js → AssistError-drmpXSbS.js} +2 -2
  4. package/dist/admin/assets/{AssistError-CYV_H4uu.js.map → AssistError-drmpXSbS.js.map} +1 -1
  5. package/dist/admin/assets/{BlockMenuItems-BRKp5YAK.js → BlockMenuItems-D-jZ0oaU.js} +2 -2
  6. package/dist/admin/assets/{BlockMenuItems-BRKp5YAK.js.map → BlockMenuItems-D-jZ0oaU.js.map} +1 -1
  7. package/dist/admin/assets/{Body-CdlxJrnW.js → Body-Gn_z2KPN.js} +2 -2
  8. package/dist/admin/assets/{Body-CdlxJrnW.js.map → Body-Gn_z2KPN.js.map} +1 -1
  9. package/dist/admin/assets/Builder-DyCcikfS.js +2 -0
  10. package/dist/admin/assets/Builder-DyCcikfS.js.map +1 -0
  11. package/dist/admin/assets/{CodeEditor-h7SDbh8e.js → CodeEditor-CzRU6och.js} +2 -2
  12. package/dist/admin/assets/{CodeEditor-h7SDbh8e.js.map → CodeEditor-CzRU6och.js.map} +1 -1
  13. package/dist/admin/assets/{ConfirmDialog-Dq6IrmS9.js → ConfirmDialog-DZRJfdvH.js} +2 -2
  14. package/dist/admin/assets/{ConfirmDialog-Dq6IrmS9.js.map → ConfirmDialog-DZRJfdvH.js.map} +1 -1
  15. package/dist/admin/assets/{CopyButton-BiMHd8OL.js → CopyButton-h4HYhnYp.js} +2 -2
  16. package/dist/admin/assets/{CopyButton-BiMHd8OL.js.map → CopyButton-h4HYhnYp.js.map} +1 -1
  17. package/dist/admin/assets/{CursorPager-CXI-RhTJ.js → CursorPager-H4SpVYw7.js} +2 -2
  18. package/dist/admin/assets/{CursorPager-CXI-RhTJ.js.map → CursorPager-H4SpVYw7.js.map} +1 -1
  19. package/dist/admin/assets/{ExternalLink-xUrKyqHx.js → ExternalLink-BNq7nAYL.js} +2 -2
  20. package/dist/admin/assets/{ExternalLink-xUrKyqHx.js.map → ExternalLink-BNq7nAYL.js.map} +1 -1
  21. package/dist/admin/assets/{FocalPoint-D_Ccn0US.js → FocalPoint-CSeKI4Iw.js} +2 -2
  22. package/dist/admin/assets/{FocalPoint-D_Ccn0US.js.map → FocalPoint-CSeKI4Iw.js.map} +1 -1
  23. package/dist/admin/assets/Form-DF_YmR1G.js +2 -0
  24. package/dist/admin/assets/{Form-DKfQ6_lP.js.map → Form-DF_YmR1G.js.map} +1 -1
  25. package/dist/admin/assets/{FormCheckboxGroup-CNexUHvc.js → FormCheckboxGroup-V3IKrvzc.js} +2 -2
  26. package/dist/admin/assets/{FormCheckboxGroup-CNexUHvc.js.map → FormCheckboxGroup-V3IKrvzc.js.map} +1 -1
  27. package/dist/admin/assets/{FormRadioGroup-Bz09LqOn.js → FormRadioGroup-DIv-MYgn.js} +2 -2
  28. package/dist/admin/assets/{FormRadioGroup-Bz09LqOn.js.map → FormRadioGroup-DIv-MYgn.js.map} +1 -1
  29. package/dist/admin/assets/{FormSelectField-rX_rC7NA.js → FormSelectField-CUhaPIMY.js} +2 -2
  30. package/dist/admin/assets/{FormSelectField-rX_rC7NA.js.map → FormSelectField-CUhaPIMY.js.map} +1 -1
  31. package/dist/admin/assets/{FormSwitchField-B0wQTcF3.js → FormSwitchField-DW8ysyk_.js} +2 -2
  32. package/dist/admin/assets/{FormSwitchField-B0wQTcF3.js.map → FormSwitchField-DW8ysyk_.js.map} +1 -1
  33. package/dist/admin/assets/{FormTextareaField-CQ6wnIlF.js → FormTextareaField-DbqZ-MwI.js} +2 -2
  34. package/dist/admin/assets/{FormTextareaField-CQ6wnIlF.js.map → FormTextareaField-DbqZ-MwI.js.map} +1 -1
  35. package/dist/admin/assets/{HintedLabel-BPZ7Qd6n.js → HintedLabel-BlLtqVVz.js} +2 -2
  36. package/dist/admin/assets/{HintedLabel-BPZ7Qd6n.js.map → HintedLabel-BlLtqVVz.js.map} +1 -1
  37. package/dist/admin/assets/{InfoHint-2HZJCzwW.js → InfoHint-bYMd_t0J.js} +2 -2
  38. package/dist/admin/assets/{InfoHint-2HZJCzwW.js.map → InfoHint-bYMd_t0J.js.map} +1 -1
  39. package/dist/admin/assets/{InsertMenuItem-DBjeJAgk.js → InsertMenuItem-D2HGERzb.js} +2 -2
  40. package/dist/admin/assets/{InsertMenuItem-DBjeJAgk.js.map → InsertMenuItem-D2HGERzb.js.map} +1 -1
  41. package/dist/admin/assets/{LinkTabs-uqCcqqdx.js → LinkTabs-ByB2eCIr.js} +2 -2
  42. package/dist/admin/assets/{LinkTabs-uqCcqqdx.js.map → LinkTabs-ByB2eCIr.js.map} +1 -1
  43. package/dist/admin/assets/{Match-CH4OI7xo.js → Match-GDx_orOH.js} +2 -2
  44. package/dist/admin/assets/{Match-CH4OI7xo.js.map → Match-GDx_orOH.js.map} +1 -1
  45. package/dist/admin/assets/{QueryView-UMDuxj-g.js → QueryView-UBO-U5Wo.js} +2 -2
  46. package/dist/admin/assets/{QueryView-UMDuxj-g.js.map → QueryView-UBO-U5Wo.js.map} +1 -1
  47. package/dist/admin/assets/{RadioTile-D_mY8BQv.js → RadioTile-CJbIIV8t.js} +2 -2
  48. package/dist/admin/assets/{RadioTile-D_mY8BQv.js.map → RadioTile-CJbIIV8t.js.map} +1 -1
  49. package/dist/admin/assets/{RichTextField-jy6R2FE-.js → RichTextField-M7HyUhYF.js} +5 -5
  50. package/dist/admin/assets/{RichTextField-jy6R2FE-.js.map → RichTextField-M7HyUhYF.js.map} +1 -1
  51. package/dist/admin/assets/{RowTitle-DuN-jQxy.js → RowTitle-DoxDM1XL.js} +2 -2
  52. package/dist/admin/assets/{RowTitle-DuN-jQxy.js.map → RowTitle-DoxDM1XL.js.map} +1 -1
  53. package/dist/admin/assets/{SecretReveal-TM7VYAeY.js → SecretReveal-kCkLH5jg.js} +2 -2
  54. package/dist/admin/assets/{SecretReveal-TM7VYAeY.js.map → SecretReveal-kCkLH5jg.js.map} +1 -1
  55. package/dist/admin/assets/{SharedGlyph-DcbEGwSL.js → SharedGlyph-D1OMHXPf.js} +2 -2
  56. package/dist/admin/assets/{SharedGlyph-DcbEGwSL.js.map → SharedGlyph-D1OMHXPf.js.map} +1 -1
  57. package/dist/admin/assets/StepList-BIQjDaWQ.js +2 -0
  58. package/dist/admin/assets/{StepList-B4I59Yl_.js.map → StepList-BIQjDaWQ.js.map} +1 -1
  59. package/dist/admin/assets/Structure-CO4aJZVP.js +2 -0
  60. package/dist/admin/assets/{Structure-BYK71uPq.js.map → Structure-CO4aJZVP.js.map} +1 -1
  61. package/dist/admin/assets/{SubNavLink-Ccx9PJyM.js → SubNavLink-CPJFIt1j.js} +2 -2
  62. package/dist/admin/assets/{SubNavLink-Ccx9PJyM.js.map → SubNavLink-CPJFIt1j.js.map} +1 -1
  63. package/dist/admin/assets/{SuggestAltButton-Vvg9XEqL.js → SuggestAltButton-CbRUxD5s.js} +2 -2
  64. package/dist/admin/assets/{SuggestAltButton-Vvg9XEqL.js.map → SuggestAltButton-CbRUxD5s.js.map} +1 -1
  65. package/dist/admin/assets/{TextLink-_2c_cSwP.js → TextLink-DnrMaF2F.js} +2 -2
  66. package/dist/admin/assets/{TextLink-_2c_cSwP.js.map → TextLink-DnrMaF2F.js.map} +1 -1
  67. package/dist/admin/assets/{Thumbnail-B1iRlbxI.js → Thumbnail-D1XuDElk.js} +2 -2
  68. package/dist/admin/assets/{Thumbnail-B1iRlbxI.js.map → Thumbnail-D1XuDElk.js.map} +1 -1
  69. package/dist/admin/assets/{UnsavedChangesGuard-CrtHd2la.js → UnsavedChangesGuard-C1n7egF6.js} +2 -2
  70. package/dist/admin/assets/{UnsavedChangesGuard-CrtHd2la.js.map → UnsavedChangesGuard-C1n7egF6.js.map} +1 -1
  71. package/dist/admin/assets/{UserAvatar-C-_SZaBb.js → UserAvatar-Bl32IpG_.js} +2 -2
  72. package/dist/admin/assets/{UserAvatar-C-_SZaBb.js.map → UserAvatar-Bl32IpG_.js.map} +1 -1
  73. package/dist/admin/assets/auth-C4fHG9Iu.js +2 -0
  74. package/dist/admin/assets/{auth-kvLrpCst.js.map → auth-C4fHG9Iu.js.map} +1 -1
  75. package/dist/admin/assets/{badge-CB016qlm.js → badge-ydvfgE8a.js} +2 -2
  76. package/dist/admin/assets/{badge-CB016qlm.js.map → badge-ydvfgE8a.js.map} +1 -1
  77. package/dist/admin/assets/{boxes-CYCCewHl.js → boxes-D6Y4Cenx.js} +2 -2
  78. package/dist/admin/assets/{boxes-CYCCewHl.js.map → boxes-D6Y4Cenx.js.map} +1 -1
  79. package/dist/admin/assets/{calendar-clock-BJHRssUa.js → calendar-clock-DFUgXWXg.js} +2 -2
  80. package/dist/admin/assets/{calendar-clock-BJHRssUa.js.map → calendar-clock-DFUgXWXg.js.map} +1 -1
  81. package/dist/admin/assets/changeSets-DgfCKja3.js +2 -0
  82. package/dist/admin/assets/{changeSets-BjP6UzCi.js.map → changeSets-DgfCKja3.js.map} +1 -1
  83. package/dist/admin/assets/chevron-left-CZXrLV99.js +2 -0
  84. package/dist/admin/assets/{chevron-left-uCIwt51T.js.map → chevron-left-CZXrLV99.js.map} +1 -1
  85. package/dist/admin/assets/{circle-check-nVBFETQc.js → circle-check-De27poaB.js} +2 -2
  86. package/dist/admin/assets/{circle-check-nVBFETQc.js.map → circle-check-De27poaB.js.map} +1 -1
  87. package/dist/admin/assets/{clock-BJiK6mtP.js → clock-BGAXsuo4.js} +2 -2
  88. package/dist/admin/assets/{clock-BJiK6mtP.js.map → clock-BGAXsuo4.js.map} +1 -1
  89. package/dist/admin/assets/{constants-DgCYLdxl.js → constants-esJAnNTh.js} +2 -2
  90. package/dist/admin/assets/{constants-DgCYLdxl.js.map → constants-esJAnNTh.js.map} +1 -1
  91. package/dist/admin/assets/content-DsMSB6Wb.js +3 -0
  92. package/dist/admin/assets/content-DsMSB6Wb.js.map +1 -0
  93. package/dist/admin/assets/{contentCounts-K6UCGeqH.js → contentCounts-DknqJ4kh.js} +2 -2
  94. package/dist/admin/assets/{contentCounts-K6UCGeqH.js.map → contentCounts-DknqJ4kh.js.map} +1 -1
  95. package/dist/admin/assets/{contentTypes-DDb1tieq.js → contentTypes-C-AKiYu1.js} +2 -2
  96. package/dist/admin/assets/{contentTypes-DDb1tieq.js.map → contentTypes-C-AKiYu1.js.map} +1 -1
  97. package/dist/admin/assets/{context-BJ7ilMj9.js → context-fImO9k99.js} +2 -2
  98. package/dist/admin/assets/{context-BJ7ilMj9.js.map → context-fImO9k99.js.map} +1 -1
  99. package/dist/admin/assets/{copy-CWYrWaJy.js → copy-B5owk67M.js} +2 -2
  100. package/dist/admin/assets/{copy-CWYrWaJy.js.map → copy-B5owk67M.js.map} +1 -1
  101. package/dist/admin/assets/createLucideIcon-CqygG5K6.js +2 -0
  102. package/dist/admin/assets/createLucideIcon-CqygG5K6.js.map +1 -0
  103. package/dist/admin/assets/develop-DL-2W9jv.js +11 -0
  104. package/dist/admin/assets/develop-DL-2W9jv.js.map +1 -0
  105. package/dist/admin/assets/{dropdown-menu-jrFjkuhR.js → dropdown-menu-C53v9ioW.js} +2 -2
  106. package/dist/admin/assets/{dropdown-menu-jrFjkuhR.js.map → dropdown-menu-C53v9ioW.js.map} +1 -1
  107. package/dist/admin/assets/{ellipsis-D304Uu9C.js → ellipsis-BHtU4ov6.js} +2 -2
  108. package/dist/admin/assets/{ellipsis-D304Uu9C.js.map → ellipsis-BHtU4ov6.js.map} +1 -1
  109. package/dist/admin/assets/es2015-DrAA1N2V.js +42 -0
  110. package/dist/admin/assets/es2015-DrAA1N2V.js.map +1 -0
  111. package/dist/admin/assets/{external-link-s_y1Tlvw.js → external-link-nZp2VpKw.js} +2 -2
  112. package/dist/admin/assets/{external-link-s_y1Tlvw.js.map → external-link-nZp2VpKw.js.map} +1 -1
  113. package/dist/admin/assets/{field-DkUe0lrH.js → field-W1dB_h6d.js} +2 -2
  114. package/dist/admin/assets/{field-DkUe0lrH.js.map → field-W1dB_h6d.js.map} +1 -1
  115. package/dist/admin/assets/{file-stack-DV3BHV7A.js → file-stack-8rRouTJj.js} +2 -2
  116. package/dist/admin/assets/{file-stack-DV3BHV7A.js.map → file-stack-8rRouTJj.js.map} +1 -1
  117. package/dist/admin/assets/{fileRoute-BTxwuLEP.js → fileRoute-DzWMBrRx.js} +2 -2
  118. package/dist/admin/assets/{fileRoute-BTxwuLEP.js.map → fileRoute-DzWMBrRx.js.map} +1 -1
  119. package/dist/admin/assets/{folder-plus-AIA7s5Da.js → folder-plus-B3L3b389.js} +2 -2
  120. package/dist/admin/assets/{folder-plus-AIA7s5Da.js.map → folder-plus-B3L3b389.js.map} +1 -1
  121. package/dist/admin/assets/{followPlural-xUd57Rcj.js → followPlural-D-5ZJqJF.js} +2 -2
  122. package/dist/admin/assets/{followPlural-xUd57Rcj.js.map → followPlural-D-5ZJqJF.js.map} +1 -1
  123. package/dist/admin/assets/{globe-DXrE-_sR.js → globe-DKkjr9MZ.js} +2 -2
  124. package/dist/admin/assets/{globe-DXrE-_sR.js.map → globe-DKkjr9MZ.js.map} +1 -1
  125. package/dist/admin/assets/{image-BImUdARR.js → image-B6aL7hP8.js} +2 -2
  126. package/dist/admin/assets/{image-BImUdARR.js.map → image-B6aL7hP8.js.map} +1 -1
  127. package/dist/admin/assets/{image-off-CEBznyUC.js → image-off-TVxEyb74.js} +2 -2
  128. package/dist/admin/assets/{image-off-CEBznyUC.js.map → image-off-TVxEyb74.js.map} +1 -1
  129. package/dist/admin/assets/{inbox-BQ_HOjFd.js → inbox-BKqu1EfP.js} +2 -2
  130. package/dist/admin/assets/{inbox-BQ_HOjFd.js.map → inbox-BKqu1EfP.js.map} +1 -1
  131. package/dist/admin/assets/{inbox-BZGf97fS.js → inbox-DUqOrFEA.js} +2 -2
  132. package/dist/admin/assets/{inbox-BZGf97fS.js.map → inbox-DUqOrFEA.js.map} +1 -1
  133. package/dist/admin/assets/index-BEM45u2w.css +2 -0
  134. package/dist/admin/assets/index-D03RZB7e.js +4 -0
  135. package/dist/admin/assets/index-D03RZB7e.js.map +1 -0
  136. package/dist/admin/assets/{key-round-BJTVRy3_.js → key-round-Dmdr1vP5.js} +2 -2
  137. package/dist/admin/assets/{key-round-BJTVRy3_.js.map → key-round-Dmdr1vP5.js.map} +1 -1
  138. package/dist/admin/assets/{labels-S4ZMHvJW.js → labels-CHE0gg1n.js} +2 -2
  139. package/dist/admin/assets/{labels-S4ZMHvJW.js.map → labels-CHE0gg1n.js.map} +1 -1
  140. package/dist/admin/assets/{languages-L4cGzT6V.js → languages-BbfFIygP.js} +2 -2
  141. package/dist/admin/assets/{languages-L4cGzT6V.js.map → languages-BbfFIygP.js.map} +1 -1
  142. package/dist/admin/assets/{layers-BGHZayyB.js → layers-B0jT4rc4.js} +2 -2
  143. package/dist/admin/assets/{layers-BGHZayyB.js.map → layers-B0jT4rc4.js.map} +1 -1
  144. package/dist/admin/assets/{link-2-off-c1sYGivC.js → link-2-off-DC06jLDj.js} +2 -2
  145. package/dist/admin/assets/{link-2-off-c1sYGivC.js.map → link-2-off-DC06jLDj.js.map} +1 -1
  146. package/dist/admin/assets/{link-BGUl1m0y.js → link-B3O0VUVT.js} +2 -2
  147. package/dist/admin/assets/{link-BGUl1m0y.js.map → link-B3O0VUVT.js.map} +1 -1
  148. package/dist/admin/assets/{loader-circle-BaUsKfL8.js → loader-circle-C-9trZPI.js} +2 -2
  149. package/dist/admin/assets/{loader-circle-BaUsKfL8.js.map → loader-circle-C-9trZPI.js.map} +1 -1
  150. package/dist/admin/assets/{locales-CLqYl3dG.js → locales-e7B5t6id.js} +2 -2
  151. package/dist/admin/assets/{locales-CLqYl3dG.js.map → locales-e7B5t6id.js.map} +1 -1
  152. package/dist/admin/assets/{media-D6kY5Cj6.js → media-BUUEsWxd.js} +2 -2
  153. package/dist/admin/assets/{media-D6kY5Cj6.js.map → media-BUUEsWxd.js.map} +1 -1
  154. package/dist/admin/assets/{media-azW3_Am5.js → media-VCJUbYzJ.js} +2 -2
  155. package/dist/admin/assets/{media-azW3_Am5.js.map → media-VCJUbYzJ.js.map} +1 -1
  156. package/dist/admin/assets/network-Bolr2lmf.js +2 -0
  157. package/dist/admin/assets/{network-BbLrO3ZX.js.map → network-Bolr2lmf.js.map} +1 -1
  158. package/dist/admin/assets/{pencil-BQpwTTXw.js → pencil-BVSFlU14.js} +2 -2
  159. package/dist/admin/assets/{pencil-BQpwTTXw.js.map → pencil-BVSFlU14.js.map} +1 -1
  160. package/dist/admin/assets/{plus-BYBGXiDV.js → plus-WfYKHW7G.js} +2 -2
  161. package/dist/admin/assets/{plus-BYBGXiDV.js.map → plus-WfYKHW7G.js.map} +1 -1
  162. package/dist/admin/assets/publishing-ClNjPLQ9.js +2 -0
  163. package/dist/admin/assets/publishing-ClNjPLQ9.js.map +1 -0
  164. package/dist/admin/assets/{radio-group-szmd95N4.js → radio-group-rFxn7cz2.js} +2 -2
  165. package/dist/admin/assets/{radio-group-szmd95N4.js.map → radio-group-rFxn7cz2.js.map} +1 -1
  166. package/dist/admin/assets/{rotate-ccw-TD7gQ_S5.js → rotate-ccw-Cvc_uA58.js} +2 -2
  167. package/dist/admin/assets/{rotate-ccw-TD7gQ_S5.js.map → rotate-ccw-Cvc_uA58.js.map} +1 -1
  168. package/dist/admin/assets/{schedules-DdnCCx_b.js → schedules-CBGpjEg7.js} +2 -2
  169. package/dist/admin/assets/{schedules-DdnCCx_b.js.map → schedules-CBGpjEg7.js.map} +1 -1
  170. package/dist/admin/assets/{schema-BzJ3fK72.js → schema-D9BgCVzZ.js} +2 -2
  171. package/dist/admin/assets/{schema-BzJ3fK72.js.map → schema-D9BgCVzZ.js.map} +1 -1
  172. package/dist/admin/assets/{scroll-text-DdRRr86a.js → scroll-text-gKYBbibb.js} +2 -2
  173. package/dist/admin/assets/{scroll-text-DdRRr86a.js.map → scroll-text-gKYBbibb.js.map} +1 -1
  174. package/dist/admin/assets/{search-JRmBbB7P.js → search-CW3iBC4k.js} +2 -2
  175. package/dist/admin/assets/{search-JRmBbB7P.js.map → search-CW3iBC4k.js.map} +1 -1
  176. package/dist/admin/assets/{searchSchemas-VaNHAlfp.js → searchSchemas-C4qp-vCa.js} +2 -2
  177. package/dist/admin/assets/{searchSchemas-VaNHAlfp.js.map → searchSchemas-C4qp-vCa.js.map} +1 -1
  178. package/dist/admin/assets/{sections-CbJVJmgY.js → sections-C7Z6Xd8r.js} +2 -2
  179. package/dist/admin/assets/{sections-CbJVJmgY.js.map → sections-C7Z6Xd8r.js.map} +1 -1
  180. package/dist/admin/assets/{sections-BsLTv5pq.js → sections-CN5fIoAr.js} +2 -2
  181. package/dist/admin/assets/{sections-BsLTv5pq.js.map → sections-CN5fIoAr.js.map} +1 -1
  182. package/dist/admin/assets/{select-p7RjCHS1.js → select-DUhL27UN.js} +2 -2
  183. package/dist/admin/assets/{select-p7RjCHS1.js.map → select-DUhL27UN.js.map} +1 -1
  184. package/dist/admin/assets/{send-BcDsf__t.js → send-DRA-Pe46.js} +2 -2
  185. package/dist/admin/assets/{send-BcDsf__t.js.map → send-DRA-Pe46.js.map} +1 -1
  186. package/dist/admin/assets/{seo-C88lYd48.js → seo-l1ZORjtv.js} +2 -2
  187. package/dist/admin/assets/{seo-C88lYd48.js.map → seo-l1ZORjtv.js.map} +1 -1
  188. package/dist/admin/assets/settings-DgoG3H8C.js +2 -0
  189. package/dist/admin/assets/{settings-2YUiWx9J.js.map → settings-DgoG3H8C.js.map} +1 -1
  190. package/dist/admin/assets/shapes-BZ87ap5s.js +6 -0
  191. package/dist/admin/assets/shapes-BZ87ap5s.js.map +1 -0
  192. package/dist/admin/assets/{skeleton-BUvrrXQ7.js → skeleton-Dyi_b1wq.js} +2 -2
  193. package/dist/admin/assets/{skeleton-BUvrrXQ7.js.map → skeleton-Dyi_b1wq.js.map} +1 -1
  194. package/dist/admin/assets/{snapshots-IQxgEhwm.js → snapshots-CT-zs6Up.js} +2 -2
  195. package/dist/admin/assets/{snapshots-IQxgEhwm.js.map → snapshots-CT-zs6Up.js.map} +1 -1
  196. package/dist/admin/assets/{sparkles-DSj-egu-.js → sparkles-DCRAqbqD.js} +2 -2
  197. package/dist/admin/assets/{sparkles-DSj-egu-.js.map → sparkles-DCRAqbqD.js.map} +1 -1
  198. package/dist/admin/assets/src-BcLeD2-K.js +7 -0
  199. package/dist/admin/assets/src-BcLeD2-K.js.map +1 -0
  200. package/dist/admin/assets/{stableId-DQQ5viUn.js → stableId-iRkUbVIP.js} +2 -2
  201. package/dist/admin/assets/{stableId-DQQ5viUn.js.map → stableId-iRkUbVIP.js.map} +1 -1
  202. package/dist/admin/assets/{store-Rdj8W9EY.js → store-DknnssoQ.js} +2 -2
  203. package/dist/admin/assets/{store-Rdj8W9EY.js.map → store-DknnssoQ.js.map} +1 -1
  204. package/dist/admin/assets/{switch-Co2wfi3S.js → switch-C3dDDUIk.js} +2 -2
  205. package/dist/admin/assets/{switch-Co2wfi3S.js.map → switch-C3dDDUIk.js.map} +1 -1
  206. package/dist/admin/assets/{theme-xFjfWxsg.js → theme-DPe080iG.js} +2 -2
  207. package/dist/admin/assets/{theme-xFjfWxsg.js.map → theme-DPe080iG.js.map} +1 -1
  208. package/dist/admin/assets/{titles-BMPQZALy.js → titles-C5PaMgFJ.js} +2 -2
  209. package/dist/admin/assets/{titles-BMPQZALy.js.map → titles-C5PaMgFJ.js.map} +1 -1
  210. package/dist/admin/assets/{tokens-DB2OodVc.js → tokens-BlIDIMY9.js} +2 -2
  211. package/dist/admin/assets/{tokens-DB2OodVc.js.map → tokens-BlIDIMY9.js.map} +1 -1
  212. package/dist/admin/assets/{tooltip-B_8HZ1Wu.js → tooltip-BEaZkRPK.js} +2 -2
  213. package/dist/admin/assets/{tooltip-B_8HZ1Wu.js.map → tooltip-BEaZkRPK.js.map} +1 -1
  214. package/dist/admin/assets/{undo-2-CagAc44E.js → undo-2-Zd1OT6qk.js} +2 -2
  215. package/dist/admin/assets/{undo-2-CagAc44E.js.map → undo-2-Zd1OT6qk.js.map} +1 -1
  216. package/dist/admin/assets/{useAuditLabels-CT1QmcqM.js → useAuditLabels-DWBpLOTB.js} +2 -2
  217. package/dist/admin/assets/{useAuditLabels-CT1QmcqM.js.map → useAuditLabels-DWBpLOTB.js.map} +1 -1
  218. package/dist/admin/assets/useConfirmTarget-9JmfiY2X.js +2 -0
  219. package/dist/admin/assets/useConfirmTarget-9JmfiY2X.js.map +1 -0
  220. package/dist/admin/assets/{useContentSchema-Ca1tmrC5.js → useContentSchema-wLDa2L3f.js} +2 -2
  221. package/dist/admin/assets/{useContentSchema-Ca1tmrC5.js.map → useContentSchema-wLDa2L3f.js.map} +1 -1
  222. package/dist/admin/assets/useCursorPager-Dc-9B67j.js +2 -0
  223. package/dist/admin/assets/useCursorPager-Dc-9B67j.js.map +1 -0
  224. package/dist/admin/assets/{useDiscardGuard-B8dlCh6M.js → useDiscardGuard-WTUINqD5.js} +2 -2
  225. package/dist/admin/assets/{useDiscardGuard-B8dlCh6M.js.map → useDiscardGuard-WTUINqD5.js.map} +1 -1
  226. package/dist/admin/assets/{useMediaPickerDialog-Cr7frtLB.js → useMediaPickerDialog-CFN9ZKfe.js} +2 -2
  227. package/dist/admin/assets/{useMediaPickerDialog-Cr7frtLB.js.map → useMediaPickerDialog-CFN9ZKfe.js.map} +1 -1
  228. package/dist/admin/assets/{useMediaUploader-DjpdBcVv.js → useMediaUploader-B42H_CMG.js} +2 -2
  229. package/dist/admin/assets/{useMediaUploader-DjpdBcVv.js.map → useMediaUploader-B42H_CMG.js.map} +1 -1
  230. package/dist/admin/assets/useNetworkPermission-CegwqQXR.js +2 -0
  231. package/dist/admin/assets/useNetworkPermission-CegwqQXR.js.map +1 -0
  232. package/dist/admin/assets/{usePaletteItems-B3OEkGXv.js → usePaletteItems-B3y2t7Ly.js} +2 -2
  233. package/dist/admin/assets/{usePaletteItems-B3OEkGXv.js.map → usePaletteItems-B3y2t7Ly.js.map} +1 -1
  234. package/dist/admin/assets/{usePlaces-CdX6q9xt.js → usePlaces-CAXr-IO9.js} +2 -2
  235. package/dist/admin/assets/{usePlaces-CdX6q9xt.js.map → usePlaces-CAXr-IO9.js.map} +1 -1
  236. package/dist/admin/assets/{useQueries-P7D4677o.js → useQueries-CX6eFr24.js} +2 -2
  237. package/dist/admin/assets/{useQueries-P7D4677o.js.map → useQueries-CX6eFr24.js.map} +1 -1
  238. package/dist/admin/assets/{useResolvedScheme-O1g9lYxQ.js → useResolvedScheme-aV0QDPi3.js} +2 -2
  239. package/dist/admin/assets/{useResolvedScheme-O1g9lYxQ.js.map → useResolvedScheme-aV0QDPi3.js.map} +1 -1
  240. package/dist/admin/assets/{useSchemaScopeAccess-DJo7rYB7.js → useSchemaScopeAccess-DyfiZnzs.js} +2 -2
  241. package/dist/admin/assets/{useSchemaScopeAccess-DJo7rYB7.js.map → useSchemaScopeAccess-DyfiZnzs.js.map} +1 -1
  242. package/dist/admin/assets/{users-eCGpE8u4.js → users-CDoJRL24.js} +2 -2
  243. package/dist/admin/assets/{users-eCGpE8u4.js.map → users-CDoJRL24.js.map} +1 -1
  244. package/dist/admin/assets/{users-sDlmJ2ml.js → users-ohHZnBJW.js} +2 -2
  245. package/dist/admin/assets/{users-sDlmJ2ml.js.map → users-ohHZnBJW.js.map} +1 -1
  246. package/dist/admin/assets/{zod-DtMsJRUH.js → zod-C-k48Hnc.js} +2 -2
  247. package/dist/admin/assets/{zod-DtMsJRUH.js.map → zod-C-k48Hnc.js.map} +1 -1
  248. package/dist/admin/index.html +59 -58
  249. package/dist/cli.js +129 -4
  250. package/dist/cli.js.map +1 -1
  251. package/dist/config.d.ts +1 -1
  252. package/dist/index.d.ts +1 -1
  253. package/dist/index.js +1 -1
  254. package/dist/{public-rn-FEAIR.d.ts → public-BO_wneBL.d.ts} +18 -1
  255. package/dist/{s3Adapter-Bs5SUqE1.js → s3Adapter-sL1zP4Zl.js} +2 -2
  256. package/dist/{s3Adapter-Bs5SUqE1.js.map → s3Adapter-sL1zP4Zl.js.map} +1 -1
  257. package/dist/{worker-CFEk-WtR.js → worker-DMES6pqh.js} +486 -161
  258. package/dist/worker-DMES6pqh.js.map +1 -0
  259. package/package.json +5 -5
  260. package/dist/admin/assets/Builder-D8AVakt1.js +0 -2
  261. package/dist/admin/assets/Builder-D8AVakt1.js.map +0 -1
  262. package/dist/admin/assets/Form-DKfQ6_lP.js +0 -2
  263. package/dist/admin/assets/StepList-B4I59Yl_.js +0 -2
  264. package/dist/admin/assets/Structure-BYK71uPq.js +0 -2
  265. package/dist/admin/assets/auth-kvLrpCst.js +0 -2
  266. package/dist/admin/assets/changeSets-BjP6UzCi.js +0 -2
  267. package/dist/admin/assets/chevron-left-uCIwt51T.js +0 -2
  268. package/dist/admin/assets/content-DTKf5anG.js +0 -3
  269. package/dist/admin/assets/content-DTKf5anG.js.map +0 -1
  270. package/dist/admin/assets/createLucideIcon-CJwW5JJW.js +0 -2
  271. package/dist/admin/assets/createLucideIcon-CJwW5JJW.js.map +0 -1
  272. package/dist/admin/assets/develop-CXljZJGt.js +0 -11
  273. package/dist/admin/assets/develop-CXljZJGt.js.map +0 -1
  274. package/dist/admin/assets/es2015-DgNe6MPq.js +0 -42
  275. package/dist/admin/assets/es2015-DgNe6MPq.js.map +0 -1
  276. package/dist/admin/assets/index-BF63XIym.js +0 -4
  277. package/dist/admin/assets/index-BF63XIym.js.map +0 -1
  278. package/dist/admin/assets/index-DJe1l94K.css +0 -2
  279. package/dist/admin/assets/network-BbLrO3ZX.js +0 -2
  280. package/dist/admin/assets/publishing-sgYacQ-C.js +0 -2
  281. package/dist/admin/assets/publishing-sgYacQ-C.js.map +0 -1
  282. package/dist/admin/assets/settings-2YUiWx9J.js +0 -2
  283. package/dist/admin/assets/src-CeOxD_sk.js +0 -4
  284. package/dist/admin/assets/src-CeOxD_sk.js.map +0 -1
  285. package/dist/admin/assets/tabs-Dyd8Q_Ja.js +0 -6
  286. package/dist/admin/assets/tabs-Dyd8Q_Ja.js.map +0 -1
  287. package/dist/admin/assets/useConfirmTarget-D6FvyjDd.js +0 -2
  288. package/dist/admin/assets/useConfirmTarget-D6FvyjDd.js.map +0 -1
  289. package/dist/admin/assets/useCursorPager-DTe6uEBE.js +0 -2
  290. package/dist/admin/assets/useCursorPager-DTe6uEBE.js.map +0 -1
  291. package/dist/worker-CFEk-WtR.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"Thumbnail-B1iRlbxI.js","names":["__iconData","__iconData","__iconData","i18next","FileVideo","FileAudio","__toESM","useMe","StatusChip","useTranslation","createLucideIcon","instance","FileText","cn","VARIANT_LABEL_KEYS","isKnownVariant","__iconData$3","FileHeadphone","__iconData$2","FileImage","__iconData$1","FilePlay","__iconData","File","useMediaPermissions","me","permissions","role","UNITS","formatBytes","value","bytes","unit","MEDIA_STATUS_DISPLAY","import_jsx_runtime","require_jsx_runtime","Variants","asset","label","variant","status","FileIcon","mimeType","isImage","MAX_KIND_LENGTH","fileKindLabel","extension","filename","thumbnailUrl","candidate","Thumbnail","url","className"],"sources":["../../../../node_modules/.pnpm/lucide-react@1.49.0_@types+react@19.3.0_react@19.3.0/node_modules/lucide-react/dist/esm/icons/file-headphone.mjs","../../../../node_modules/.pnpm/lucide-react@1.49.0_@types+react@19.3.0_react@19.3.0/node_modules/lucide-react/dist/esm/icons/file-image.mjs","../../../../node_modules/.pnpm/lucide-react@1.49.0_@types+react@19.3.0_react@19.3.0/node_modules/lucide-react/dist/esm/icons/file-play.mjs","../../../../node_modules/.pnpm/lucide-react@1.49.0_@types+react@19.3.0_react@19.3.0/node_modules/lucide-react/dist/esm/icons/file.mjs","../../src/hooks/useMediaPermissions.ts","../../src/features/Media/helpers/formatBytes.ts","../../src/features/Media/helpers/statusDisplay.ts","../../src/features/Media/Details/Variants/index.tsx","../../src/features/Media/FileIcon/index.tsx","../../src/features/Media/helpers/fileKind.ts","../../src/features/Media/Thumbnail/index.tsx"],"sourcesContent":["/**\n * @license lucide-react v1.49.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconData = {\n name: \"file-headphone\",\n size: 24,\n node: [\n [\n \"path\",\n {\n d: \"M4 6.835V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2h-.343\",\n key: \"1vfytu\"\n }\n ],\n [\"path\", { d: \"M14 2v5a1 1 0 0 0 1 1h5\", key: \"wfsgrz\" }],\n [\n \"path\",\n {\n d: \"M2 19a2 2 0 0 1 4 0v1a2 2 0 0 1-4 0v-4a6 6 0 0 1 12 0v4a2 2 0 0 1-4 0v-1a2 2 0 0 1 4 0\",\n key: \"1etmh7\"\n }\n ]\n ],\n aliases: [\"file-audio\", \"file-audio-2\"]\n};\n__iconData.node;\nconst FileHeadphone = createLucideIcon(__iconData);\n\nexport { __iconData, FileHeadphone as default };\n//# sourceMappingURL=file-headphone.mjs.map\n","/**\n * @license lucide-react v1.49.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconData = {\n name: \"file-image\",\n size: 24,\n node: [\n [\n \"path\",\n {\n d: \"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z\",\n key: \"1oefj6\"\n }\n ],\n [\"path\", { d: \"M14 2v5a1 1 0 0 0 1 1h5\", key: \"wfsgrz\" }],\n [\"circle\", { cx: \"10\", cy: \"12\", r: \"2\", key: \"737tya\" }],\n [\"path\", { d: \"m20 17-1.296-1.296a2.41 2.41 0 0 0-3.408 0L9 22\", key: \"wt3hpn\" }]\n ]\n};\n__iconData.node;\nconst FileImage = createLucideIcon(__iconData);\n\nexport { __iconData, FileImage as default };\n//# sourceMappingURL=file-image.mjs.map\n","/**\n * @license lucide-react v1.49.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconData = {\n name: \"file-play\",\n size: 24,\n node: [\n [\n \"path\",\n {\n d: \"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z\",\n key: \"1oefj6\"\n }\n ],\n [\"path\", { d: \"M14 2v5a1 1 0 0 0 1 1h5\", key: \"wfsgrz\" }],\n [\n \"path\",\n {\n d: \"M15.033 13.44a.647.647 0 0 1 0 1.12l-4.065 2.352a.645.645 0 0 1-.968-.56v-4.704a.645.645 0 0 1 .967-.56z\",\n key: \"1tzo1f\"\n }\n ]\n ],\n aliases: [\"file-video\"]\n};\n__iconData.node;\nconst FilePlay = createLucideIcon(__iconData);\n\nexport { __iconData, FilePlay as default };\n//# sourceMappingURL=file-play.mjs.map\n","/**\n * @license lucide-react v1.49.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconData = {\n name: \"file\",\n size: 24,\n node: [\n [\n \"path\",\n {\n d: \"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z\",\n key: \"1oefj6\"\n }\n ],\n [\"path\", { d: \"M14 2v5a1 1 0 0 0 1 1h5\", key: \"wfsgrz\" }]\n ]\n};\n__iconData.node;\nconst File = createLucideIcon(__iconData);\n\nexport { __iconData, File as default };\n//# sourceMappingURL=file.mjs.map\n","import { useMe } from '@/api/auth';\n\n/** What the signed-in admin may do in the media library (the server checks again). */\nexport const useMediaPermissions = () => {\n const me = useMe().data;\n const permissions = me?.globalPermissions ?? [];\n return {\n canWrite: permissions.includes('media.write'),\n canManage: permissions.includes('media.manage'),\n /** Only owners may delete media that content still uses. */\n isOwner: me?.roles.some((role) => role.key === 'owner') ?? false,\n };\n};\n","import { i18next } from '@/app/i18n';\n\nconst UNITS = ['byte', 'kilobyte', 'megabyte', 'gigabyte'] as const;\n\n/** `1536` → `1.5 kB`, in the admin's language. */\nexport const formatBytes = (bytes: number): string => {\n let value = bytes;\n let unit = 0;\n while (value >= 1000 && unit < UNITS.length - 1) {\n value /= 1000;\n unit += 1;\n }\n return new Intl.NumberFormat(i18next.language, {\n style: 'unit',\n unit: UNITS[unit],\n unitDisplay: 'short',\n maximumFractionDigits: unit === 0 ? 0 : 1,\n }).format(value);\n};\n","import type { MediaAssetStatus, MediaVariantStatus } from '@shapio/client';\nimport type { StatusTone } from '@/components/StatusChip';\n\ntype Display = { labelKey: string; tone: StatusTone };\n\n/** How an asset's or variant's processing state reads as a `StatusChip`. */\nexport const MEDIA_STATUS_DISPLAY = {\n pending: { labelKey: 'media.status.pending', tone: 'progress' },\n processing: { labelKey: 'media.status.processing', tone: 'progress' },\n ready: { labelKey: 'media.status.ready', tone: 'success' },\n failed: { labelKey: 'media.status.failed', tone: 'danger' },\n} as const satisfies Record<MediaAssetStatus | MediaVariantStatus, Display>;\n","import type { MediaAsset } from '@shapio/client';\nimport { useTranslation } from 'react-i18next';\nimport { StatusChip } from '@/components/StatusChip';\nimport { isKnownVariant, VARIANT_LABEL_KEYS } from '../../constants';\nimport { formatBytes } from '../../helpers/formatBytes';\nimport { MEDIA_STATUS_DISPLAY } from '../../helpers/statusDisplay';\n\ntype VariantsProps = { asset: MediaAsset };\n\n/** Generated sizes and their status (made in the background after upload). */\nexport const Variants = ({ asset }: VariantsProps) => {\n const { t } = useTranslation();\n if (asset.variants.length === 0) {\n return (\n <p className=\"text-sm text-muted-foreground\">\n {asset.status === 'processing' ? t('media.variants.processing') : t('media.variants.none')}\n </p>\n );\n }\n return (\n <ul className=\"divide-y rounded-lg border\">\n {asset.variants.map((variant) => {\n const label = isKnownVariant(variant.name) ? t(VARIANT_LABEL_KEYS[variant.name]) : variant.name;\n const status = MEDIA_STATUS_DISPLAY[variant.status];\n return (\n <li key={variant.name} className=\"flex min-w-0 items-center gap-3 px-3 py-2\">\n <span className=\"min-w-0 flex-1\">\n {variant.url ? (\n <a\n href={variant.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"rounded-sm text-sm font-medium text-link underline-offset-4 outline-none hover:underline focus-visible:ring-[3px] focus-visible:ring-ring/50\"\n >\n {label}\n </a>\n ) : (\n <span className=\"text-sm font-medium\">{label}</span>\n )}\n <span className=\"block truncate text-meta text-muted-foreground\">\n {variant.width && variant.height\n ? t('media.dimensions', { width: variant.width, height: variant.height })\n : null}\n {variant.sizeBytes ? ` · ${formatBytes(variant.sizeBytes)}` : null}\n </span>\n </span>\n <StatusChip tone={status.tone} label={t(status.labelKey)} size=\"sm\" />\n </li>\n );\n })}\n </ul>\n );\n};\n","import { File, FileAudio, FileImage, FileText, FileVideo } from 'lucide-react';\n\ntype FileIconProps = { mimeType: string; className?: string };\n\n/** An icon for files without a preview. Decorative: the file's name or type is always shown beside it. */\nexport const FileIcon = ({ mimeType, className }: FileIconProps) => {\n if (mimeType.startsWith('image/')) {\n return <FileImage aria-hidden=\"true\" className={className} />;\n }\n if (mimeType.startsWith('video/')) {\n return <FileVideo aria-hidden=\"true\" className={className} />;\n }\n if (mimeType.startsWith('audio/')) {\n return <FileAudio aria-hidden=\"true\" className={className} />;\n }\n if (mimeType === 'application/pdf' || mimeType.startsWith('text/')) {\n return <FileText aria-hidden=\"true\" className={className} />;\n }\n return <File aria-hidden=\"true\" className={className} />;\n};\n","export const isImage = (mimeType: string) => mimeType.startsWith('image/');\n\nconst MAX_KIND_LENGTH = 5;\n\n/**\n * A short format code for a file (\"PNG\", \"PDF\"): the file name's extension, else the MIME subtype. A code,\n * not prose, so it is not translated.\n */\nexport const fileKindLabel = (filename: string, mimeType: string): string => {\n const extension = /\\.([a-z0-9]+)$/i.exec(filename)?.[1];\n if (extension && extension.length <= MAX_KIND_LENGTH) {\n return extension.toUpperCase();\n }\n const subtype = mimeType.split('/')[1]?.split(/[.+;-]/)[0] ?? '';\n return subtype.toUpperCase();\n};\n","import type { MediaAsset } from '@shapio/client';\nimport { cn } from '@/helpers/cn';\nimport { FileIcon } from '../FileIcon';\nimport { isImage } from '../helpers/fileKind';\n\ntype ThumbnailProps = { asset: MediaAsset; className?: string };\n\n/** The library thumbnail: the `thumbnail` variant once ready, the original for small images and SVGs. */\nconst thumbnailUrl = (asset: MediaAsset): string | undefined => {\n const variant = asset.variants.find((candidate) => candidate.name === 'thumbnail' && candidate.url);\n if (variant?.url) {\n return variant.url;\n }\n return isImage(asset.mimeType) ? asset.url : undefined;\n};\n\n/** Decorative: the asset's name is always shown beside it, so the image has empty alt text. */\nexport const Thumbnail = ({ asset, className }: ThumbnailProps) => {\n const url = thumbnailUrl(asset);\n return (\n <div className={cn('flex items-center justify-center overflow-hidden bg-muted', className)}>\n {url ? (\n <img src={url} alt=\"\" loading=\"lazy\" decoding=\"async\" className=\"size-full object-cover\" />\n ) : (\n <FileIcon mimeType={asset.mimeType} className=\"size-8 text-muted-foreground\" />\n )}\n </div>\n );\n};\n"],"ignoreList":[0,1,2,3],"mappings":"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"}
1
+ {"version":3,"file":"Thumbnail-D1XuDElk.js","names":["__iconData","__iconData","__iconData","i18next","FileVideo","FileAudio","__toESM","useMe","StatusChip","useTranslation","createLucideIcon","instance","FileText","cn","VARIANT_LABEL_KEYS","isKnownVariant","__iconData$3","FileHeadphone","__iconData$2","FileImage","__iconData$1","FilePlay","__iconData","File","useMediaPermissions","me","permissions","role","UNITS","formatBytes","value","bytes","unit","MEDIA_STATUS_DISPLAY","import_jsx_runtime","require_jsx_runtime","Variants","asset","label","variant","status","FileIcon","mimeType","isImage","MAX_KIND_LENGTH","fileKindLabel","extension","filename","thumbnailUrl","candidate","Thumbnail","url","className"],"sources":["../../../../node_modules/.pnpm/lucide-react@1.49.0_@types+react@19.3.0_react@19.3.0/node_modules/lucide-react/dist/esm/icons/file-headphone.mjs","../../../../node_modules/.pnpm/lucide-react@1.49.0_@types+react@19.3.0_react@19.3.0/node_modules/lucide-react/dist/esm/icons/file-image.mjs","../../../../node_modules/.pnpm/lucide-react@1.49.0_@types+react@19.3.0_react@19.3.0/node_modules/lucide-react/dist/esm/icons/file-play.mjs","../../../../node_modules/.pnpm/lucide-react@1.49.0_@types+react@19.3.0_react@19.3.0/node_modules/lucide-react/dist/esm/icons/file.mjs","../../src/hooks/useMediaPermissions.ts","../../src/features/Media/helpers/formatBytes.ts","../../src/features/Media/helpers/statusDisplay.ts","../../src/features/Media/Details/Variants/index.tsx","../../src/features/Media/FileIcon/index.tsx","../../src/features/Media/helpers/fileKind.ts","../../src/features/Media/Thumbnail/index.tsx"],"sourcesContent":["/**\n * @license lucide-react v1.49.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconData = {\n name: \"file-headphone\",\n size: 24,\n node: [\n [\n \"path\",\n {\n d: \"M4 6.835V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2h-.343\",\n key: \"1vfytu\"\n }\n ],\n [\"path\", { d: \"M14 2v5a1 1 0 0 0 1 1h5\", key: \"wfsgrz\" }],\n [\n \"path\",\n {\n d: \"M2 19a2 2 0 0 1 4 0v1a2 2 0 0 1-4 0v-4a6 6 0 0 1 12 0v4a2 2 0 0 1-4 0v-1a2 2 0 0 1 4 0\",\n key: \"1etmh7\"\n }\n ]\n ],\n aliases: [\"file-audio\", \"file-audio-2\"]\n};\n__iconData.node;\nconst FileHeadphone = createLucideIcon(__iconData);\n\nexport { __iconData, FileHeadphone as default };\n//# sourceMappingURL=file-headphone.mjs.map\n","/**\n * @license lucide-react v1.49.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconData = {\n name: \"file-image\",\n size: 24,\n node: [\n [\n \"path\",\n {\n d: \"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z\",\n key: \"1oefj6\"\n }\n ],\n [\"path\", { d: \"M14 2v5a1 1 0 0 0 1 1h5\", key: \"wfsgrz\" }],\n [\"circle\", { cx: \"10\", cy: \"12\", r: \"2\", key: \"737tya\" }],\n [\"path\", { d: \"m20 17-1.296-1.296a2.41 2.41 0 0 0-3.408 0L9 22\", key: \"wt3hpn\" }]\n ]\n};\n__iconData.node;\nconst FileImage = createLucideIcon(__iconData);\n\nexport { __iconData, FileImage as default };\n//# sourceMappingURL=file-image.mjs.map\n","/**\n * @license lucide-react v1.49.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconData = {\n name: \"file-play\",\n size: 24,\n node: [\n [\n \"path\",\n {\n d: \"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z\",\n key: \"1oefj6\"\n }\n ],\n [\"path\", { d: \"M14 2v5a1 1 0 0 0 1 1h5\", key: \"wfsgrz\" }],\n [\n \"path\",\n {\n d: \"M15.033 13.44a.647.647 0 0 1 0 1.12l-4.065 2.352a.645.645 0 0 1-.968-.56v-4.704a.645.645 0 0 1 .967-.56z\",\n key: \"1tzo1f\"\n }\n ]\n ],\n aliases: [\"file-video\"]\n};\n__iconData.node;\nconst FilePlay = createLucideIcon(__iconData);\n\nexport { __iconData, FilePlay as default };\n//# sourceMappingURL=file-play.mjs.map\n","/**\n * @license lucide-react v1.49.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconData = {\n name: \"file\",\n size: 24,\n node: [\n [\n \"path\",\n {\n d: \"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z\",\n key: \"1oefj6\"\n }\n ],\n [\"path\", { d: \"M14 2v5a1 1 0 0 0 1 1h5\", key: \"wfsgrz\" }]\n ]\n};\n__iconData.node;\nconst File = createLucideIcon(__iconData);\n\nexport { __iconData, File as default };\n//# sourceMappingURL=file.mjs.map\n","import { useMe } from '@/api/auth';\n\n/** What the signed-in admin may do in the media library (the server checks again). */\nexport const useMediaPermissions = () => {\n const me = useMe().data;\n const permissions = me?.globalPermissions ?? [];\n return {\n canWrite: permissions.includes('media.write'),\n canManage: permissions.includes('media.manage'),\n /** Only owners may delete media that content still uses. */\n isOwner: me?.roles.some((role) => role.key === 'owner') ?? false,\n };\n};\n","import { i18next } from '@/app/i18n';\n\nconst UNITS = ['byte', 'kilobyte', 'megabyte', 'gigabyte'] as const;\n\n/** `1536` → `1.5 kB`, in the admin's language. */\nexport const formatBytes = (bytes: number): string => {\n let value = bytes;\n let unit = 0;\n while (value >= 1000 && unit < UNITS.length - 1) {\n value /= 1000;\n unit += 1;\n }\n return new Intl.NumberFormat(i18next.language, {\n style: 'unit',\n unit: UNITS[unit],\n unitDisplay: 'short',\n maximumFractionDigits: unit === 0 ? 0 : 1,\n }).format(value);\n};\n","import type { MediaAssetStatus, MediaVariantStatus } from '@shapio/client';\nimport type { StatusTone } from '@/components/StatusChip';\n\ntype Display = { labelKey: string; tone: StatusTone };\n\n/** How an asset's or variant's processing state reads as a `StatusChip`. */\nexport const MEDIA_STATUS_DISPLAY = {\n pending: { labelKey: 'media.status.pending', tone: 'progress' },\n processing: { labelKey: 'media.status.processing', tone: 'progress' },\n ready: { labelKey: 'media.status.ready', tone: 'success' },\n failed: { labelKey: 'media.status.failed', tone: 'danger' },\n} as const satisfies Record<MediaAssetStatus | MediaVariantStatus, Display>;\n","import type { MediaAsset } from '@shapio/client';\nimport { useTranslation } from 'react-i18next';\nimport { StatusChip } from '@/components/StatusChip';\nimport { isKnownVariant, VARIANT_LABEL_KEYS } from '../../constants';\nimport { formatBytes } from '../../helpers/formatBytes';\nimport { MEDIA_STATUS_DISPLAY } from '../../helpers/statusDisplay';\n\ntype VariantsProps = { asset: MediaAsset };\n\n/** Generated sizes and their status (made in the background after upload). */\nexport const Variants = ({ asset }: VariantsProps) => {\n const { t } = useTranslation();\n if (asset.variants.length === 0) {\n return (\n <p className=\"text-sm text-muted-foreground\">\n {asset.status === 'processing' ? t('media.variants.processing') : t('media.variants.none')}\n </p>\n );\n }\n return (\n <ul className=\"divide-y rounded-lg border\">\n {asset.variants.map((variant) => {\n const label = isKnownVariant(variant.name) ? t(VARIANT_LABEL_KEYS[variant.name]) : variant.name;\n const status = MEDIA_STATUS_DISPLAY[variant.status];\n return (\n <li key={variant.name} className=\"flex min-w-0 items-center gap-3 px-3 py-2\">\n <span className=\"min-w-0 flex-1\">\n {variant.url ? (\n <a\n href={variant.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"rounded-sm text-sm font-medium text-link underline-offset-4 outline-none hover:underline focus-visible:ring-[3px] focus-visible:ring-ring/50\"\n >\n {label}\n </a>\n ) : (\n <span className=\"text-sm font-medium\">{label}</span>\n )}\n <span className=\"block truncate text-meta text-muted-foreground\">\n {variant.width && variant.height\n ? t('media.dimensions', { width: variant.width, height: variant.height })\n : null}\n {variant.sizeBytes ? ` · ${formatBytes(variant.sizeBytes)}` : null}\n </span>\n </span>\n <StatusChip tone={status.tone} label={t(status.labelKey)} size=\"sm\" />\n </li>\n );\n })}\n </ul>\n );\n};\n","import { File, FileAudio, FileImage, FileText, FileVideo } from 'lucide-react';\n\ntype FileIconProps = { mimeType: string; className?: string };\n\n/** An icon for files without a preview. Decorative: the file's name or type is always shown beside it. */\nexport const FileIcon = ({ mimeType, className }: FileIconProps) => {\n if (mimeType.startsWith('image/')) {\n return <FileImage aria-hidden=\"true\" className={className} />;\n }\n if (mimeType.startsWith('video/')) {\n return <FileVideo aria-hidden=\"true\" className={className} />;\n }\n if (mimeType.startsWith('audio/')) {\n return <FileAudio aria-hidden=\"true\" className={className} />;\n }\n if (mimeType === 'application/pdf' || mimeType.startsWith('text/')) {\n return <FileText aria-hidden=\"true\" className={className} />;\n }\n return <File aria-hidden=\"true\" className={className} />;\n};\n","export const isImage = (mimeType: string) => mimeType.startsWith('image/');\n\nconst MAX_KIND_LENGTH = 5;\n\n/**\n * A short format code for a file (\"PNG\", \"PDF\"): the file name's extension, else the MIME subtype. A code,\n * not prose, so it is not translated.\n */\nexport const fileKindLabel = (filename: string, mimeType: string): string => {\n const extension = /\\.([a-z0-9]+)$/i.exec(filename)?.[1];\n if (extension && extension.length <= MAX_KIND_LENGTH) {\n return extension.toUpperCase();\n }\n const subtype = mimeType.split('/')[1]?.split(/[.+;-]/)[0] ?? '';\n return subtype.toUpperCase();\n};\n","import type { MediaAsset } from '@shapio/client';\nimport { cn } from '@/helpers/cn';\nimport { FileIcon } from '../FileIcon';\nimport { isImage } from '../helpers/fileKind';\n\ntype ThumbnailProps = { asset: MediaAsset; className?: string };\n\n/** The library thumbnail: the `thumbnail` variant once ready, the original for small images and SVGs. */\nconst thumbnailUrl = (asset: MediaAsset): string | undefined => {\n const variant = asset.variants.find((candidate) => candidate.name === 'thumbnail' && candidate.url);\n if (variant?.url) {\n return variant.url;\n }\n return isImage(asset.mimeType) ? asset.url : undefined;\n};\n\n/** Decorative: the asset's name is always shown beside it, so the image has empty alt text. */\nexport const Thumbnail = ({ asset, className }: ThumbnailProps) => {\n const url = thumbnailUrl(asset);\n return (\n <div className={cn('flex items-center justify-center overflow-hidden bg-muted', className)}>\n {url ? (\n <img src={url} alt=\"\" loading=\"lazy\" decoding=\"async\" className=\"size-full object-cover\" />\n ) : (\n <FileIcon mimeType={asset.mimeType} className=\"size-8 text-muted-foreground\" />\n )}\n </div>\n );\n};\n"],"ignoreList":[0,1,2,3],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./react-CQOZoUwg.js";import{t as n}from"./jsx-runtime-DREnUpxT.js";import{D as r}from"./auth-kvLrpCst.js";import{n as i}from"./createLucideIcon-CJwW5JJW.js";import{t as a}from"./ConfirmDialog-Dq6IrmS9.js";var o=e(t(),1);function s(e,t){if(e===void 0)return{shouldBlockFn:()=>!0,withResolver:!1};if(`shouldBlockFn`in e)return e;if(typeof e==`function`){let n=!!(t??!0);return{shouldBlockFn:async()=>n?await e():!1,enableBeforeUnload:n,withResolver:!1}}let n=!!(e.condition??!0),r=e.blockerFn;return{shouldBlockFn:async()=>n&&r!==void 0?await r():n,enableBeforeUnload:n,withResolver:r===void 0}}function c(e,t){let{shouldBlockFn:n,enableBeforeUnload:i=!0,disabled:a=!1,withResolver:c=!1}=s(e,t),l=r(),{history:u}=l,[d,f]=o.useState({status:`idle`,current:void 0,next:void 0,action:void 0,proceed:void 0,reset:void 0});return o.useEffect(()=>a?void 0:u.block({blockerFn:async e=>{function t(e){let t=l.parseLocation(e),[,n,r]=l.getMatchedRoutes(t.pathname);return r===void 0?{routeId:`__notFound__`,fullPath:t.pathname,pathname:t.pathname,params:n,search:l.options.parseSearch(e.search)}:{routeId:r.id,fullPath:r.fullPath,pathname:t.pathname,params:n,search:l.options.parseSearch(e.search)}}let r=t(e.currentLocation),i=t(e.nextLocation);if(r.routeId===`__notFound__`&&i.routeId!==`__notFound__`)return!1;let a=await n({action:e.action,current:r,next:i});if(!c)return a;if(!a)return!1;let o=await new Promise(t=>{f({status:`blocked`,current:r,next:i,action:e.action,proceed:()=>t(!1),reset:()=>t(!0)})});return f({status:`idle`,current:void 0,next:void 0,action:void 0,proceed:void 0,reset:void 0}),o},enableBeforeUnload:i}),[n,i,a,c,u,l]),d}var l=e(n(),1),u=({when:e,shouldBlock:t,title:n,description:r,stayLabel:o,leaveLabel:s})=>{let{t:u}=i(),d=c({shouldBlockFn:({current:n,next:r})=>e&&(t?.({currentPath:n.pathname,nextPath:r.pathname})??!0),enableBeforeUnload:()=>e,withResolver:!0});return(0,l.jsx)(a,{open:d.status===`blocked`,onOpenChange:e=>{!e&&d.status===`blocked`&&d.reset()},title:n??u(`unsaved.title`),description:r??u(`unsaved.description`),cancelLabel:o??u(`unsaved.stay`),confirmLabel:s??u(`unsaved.leave`),destructive:!0,onConfirm:()=>d.proceed?.()})};export{u as t};
2
- //# sourceMappingURL=UnsavedChangesGuard-CrtHd2la.js.map
1
+ import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./react-CQOZoUwg.js";import{t as n}from"./jsx-runtime-DREnUpxT.js";import{D as r}from"./auth-C4fHG9Iu.js";import{n as i}from"./createLucideIcon-CqygG5K6.js";import{t as a}from"./ConfirmDialog-DZRJfdvH.js";var o=e(t(),1);function s(e,t){if(e===void 0)return{shouldBlockFn:()=>!0,withResolver:!1};if(`shouldBlockFn`in e)return e;if(typeof e==`function`){let n=!!(t??!0);return{shouldBlockFn:async()=>n?await e():!1,enableBeforeUnload:n,withResolver:!1}}let n=!!(e.condition??!0),r=e.blockerFn;return{shouldBlockFn:async()=>n&&r!==void 0?await r():n,enableBeforeUnload:n,withResolver:r===void 0}}function c(e,t){let{shouldBlockFn:n,enableBeforeUnload:i=!0,disabled:a=!1,withResolver:c=!1}=s(e,t),l=r(),{history:u}=l,[d,f]=o.useState({status:`idle`,current:void 0,next:void 0,action:void 0,proceed:void 0,reset:void 0});return o.useEffect(()=>a?void 0:u.block({blockerFn:async e=>{function t(e){let t=l.parseLocation(e),[,n,r]=l.getMatchedRoutes(t.pathname);return r===void 0?{routeId:`__notFound__`,fullPath:t.pathname,pathname:t.pathname,params:n,search:l.options.parseSearch(e.search)}:{routeId:r.id,fullPath:r.fullPath,pathname:t.pathname,params:n,search:l.options.parseSearch(e.search)}}let r=t(e.currentLocation),i=t(e.nextLocation);if(r.routeId===`__notFound__`&&i.routeId!==`__notFound__`)return!1;let a=await n({action:e.action,current:r,next:i});if(!c)return a;if(!a)return!1;let o=await new Promise(t=>{f({status:`blocked`,current:r,next:i,action:e.action,proceed:()=>t(!1),reset:()=>t(!0)})});return f({status:`idle`,current:void 0,next:void 0,action:void 0,proceed:void 0,reset:void 0}),o},enableBeforeUnload:i}),[n,i,a,c,u,l]),d}var l=e(n(),1),u=({when:e,shouldBlock:t,title:n,description:r,stayLabel:o,leaveLabel:s})=>{let{t:u}=i(),d=c({shouldBlockFn:({current:n,next:r})=>e&&(t?.({currentPath:n.pathname,nextPath:r.pathname})??!0),enableBeforeUnload:()=>e,withResolver:!0});return(0,l.jsx)(a,{open:d.status===`blocked`,onOpenChange:e=>{!e&&d.status===`blocked`&&d.reset()},title:n??u(`unsaved.title`),description:r??u(`unsaved.description`),cancelLabel:o??u(`unsaved.stay`),confirmLabel:s??u(`unsaved.leave`),destructive:!0,onConfirm:()=>d.proceed?.()})};export{u as t};
2
+ //# sourceMappingURL=UnsavedChangesGuard-C1n7egF6.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"UnsavedChangesGuard-CrtHd2la.js","names":["__toESM","require_jsx_runtime","useRouter","useTranslation","ConfirmDialog","import_react","require_react","_resolveBlockerOpts","opts","shouldBlock","condition","fn","useBlocker","router","resolver","setResolver","disabled","history","getLocation","parsedLocation","location","rawParams","foundRoute","current","blockerFnArgs","next","shouldBlockFn","withResolver","canNavigateAsync","resolve","enableBeforeUnload","import_jsx_runtime","UnsavedChangesGuard","blocker","when","open","title","t","description","stayLabel","leaveLabel"],"sources":["../../../../node_modules/.pnpm/@tanstack+react-router@1.170.41_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@tanstack/react-router/dist/esm/useBlocker.js","../../src/components/UnsavedChangesGuard/index.tsx"],"sourcesContent":["\"use client\";\nimport { useRouter } from \"./useRouter.js\";\nimport * as React$1 from \"react\";\n//#region src/useBlocker.tsx\nfunction _resolveBlockerOpts(opts, condition) {\n\tif (opts === void 0) return {\n\t\tshouldBlockFn: () => true,\n\t\twithResolver: false\n\t};\n\tif (\"shouldBlockFn\" in opts) return opts;\n\tif (typeof opts === \"function\") {\n\t\tconst shouldBlock = Boolean(condition ?? true);\n\t\tconst _customBlockerFn = async () => {\n\t\t\tif (shouldBlock) return await opts();\n\t\t\treturn false;\n\t\t};\n\t\treturn {\n\t\t\tshouldBlockFn: _customBlockerFn,\n\t\t\tenableBeforeUnload: shouldBlock,\n\t\t\twithResolver: false\n\t\t};\n\t}\n\tconst shouldBlock = Boolean(opts.condition ?? true);\n\tconst fn = opts.blockerFn;\n\tconst _customBlockerFn = async () => {\n\t\tif (shouldBlock && fn !== void 0) return await fn();\n\t\treturn shouldBlock;\n\t};\n\treturn {\n\t\tshouldBlockFn: _customBlockerFn,\n\t\tenableBeforeUnload: shouldBlock,\n\t\twithResolver: fn === void 0\n\t};\n}\nfunction useBlocker(opts, condition) {\n\tconst { shouldBlockFn, enableBeforeUnload = true, disabled = false, withResolver = false } = _resolveBlockerOpts(opts, condition);\n\tconst router = useRouter();\n\tconst { history } = router;\n\tconst [resolver, setResolver] = React$1.useState({\n\t\tstatus: \"idle\",\n\t\tcurrent: void 0,\n\t\tnext: void 0,\n\t\taction: void 0,\n\t\tproceed: void 0,\n\t\treset: void 0\n\t});\n\tReact$1.useEffect(() => {\n\t\tconst blockerFnComposed = async (blockerFnArgs) => {\n\t\t\tfunction getLocation(location) {\n\t\t\t\tconst parsedLocation = router.parseLocation(location);\n\t\t\t\tconst [, rawParams, foundRoute] = router.getMatchedRoutes(parsedLocation.pathname);\n\t\t\t\tif (foundRoute === void 0) return {\n\t\t\t\t\trouteId: \"__notFound__\",\n\t\t\t\t\tfullPath: parsedLocation.pathname,\n\t\t\t\t\tpathname: parsedLocation.pathname,\n\t\t\t\t\tparams: rawParams,\n\t\t\t\t\tsearch: router.options.parseSearch(location.search)\n\t\t\t\t};\n\t\t\t\treturn {\n\t\t\t\t\trouteId: foundRoute.id,\n\t\t\t\t\tfullPath: foundRoute.fullPath,\n\t\t\t\t\tpathname: parsedLocation.pathname,\n\t\t\t\t\tparams: rawParams,\n\t\t\t\t\tsearch: router.options.parseSearch(location.search)\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst current = getLocation(blockerFnArgs.currentLocation);\n\t\t\tconst next = getLocation(blockerFnArgs.nextLocation);\n\t\t\tif (current.routeId === \"__notFound__\" && next.routeId !== \"__notFound__\") return false;\n\t\t\tconst shouldBlock = await shouldBlockFn({\n\t\t\t\taction: blockerFnArgs.action,\n\t\t\t\tcurrent,\n\t\t\t\tnext\n\t\t\t});\n\t\t\tif (!withResolver) return shouldBlock;\n\t\t\tif (!shouldBlock) return false;\n\t\t\tconst canNavigateAsync = await new Promise((resolve) => {\n\t\t\t\tsetResolver({\n\t\t\t\t\tstatus: \"blocked\",\n\t\t\t\t\tcurrent,\n\t\t\t\t\tnext,\n\t\t\t\t\taction: blockerFnArgs.action,\n\t\t\t\t\tproceed: () => resolve(false),\n\t\t\t\t\treset: () => resolve(true)\n\t\t\t\t});\n\t\t\t});\n\t\t\tsetResolver({\n\t\t\t\tstatus: \"idle\",\n\t\t\t\tcurrent: void 0,\n\t\t\t\tnext: void 0,\n\t\t\t\taction: void 0,\n\t\t\t\tproceed: void 0,\n\t\t\t\treset: void 0\n\t\t\t});\n\t\t\treturn canNavigateAsync;\n\t\t};\n\t\treturn disabled ? void 0 : history.block({\n\t\t\tblockerFn: blockerFnComposed,\n\t\t\tenableBeforeUnload\n\t\t});\n\t}, [\n\t\tshouldBlockFn,\n\t\tenableBeforeUnload,\n\t\tdisabled,\n\t\twithResolver,\n\t\thistory,\n\t\trouter\n\t]);\n\treturn resolver;\n}\nvar _resolvePromptBlockerArgs = (props) => {\n\tif (\"shouldBlockFn\" in props) return { ...props };\n\tconst shouldBlock = Boolean(props.condition ?? true);\n\tconst fn = props.blockerFn;\n\tconst _customBlockerFn = async () => {\n\t\tif (shouldBlock && fn !== void 0) return await fn();\n\t\treturn shouldBlock;\n\t};\n\treturn {\n\t\tshouldBlockFn: _customBlockerFn,\n\t\tenableBeforeUnload: shouldBlock,\n\t\twithResolver: fn === void 0\n\t};\n};\nfunction Block(opts) {\n\tconst { children, ...rest } = opts;\n\tconst resolver = useBlocker(_resolvePromptBlockerArgs(rest));\n\treturn children ? typeof children === \"function\" ? children(resolver) : children : null;\n}\n//#endregion\nexport { Block, useBlocker };\n\n//# sourceMappingURL=useBlocker.js.map","import { useBlocker } from '@tanstack/react-router';\nimport { useTranslation } from 'react-i18next';\nimport { ConfirmDialog } from '../ConfirmDialog';\n\n/** A navigation the guard may let through: the pathnames it goes from and to. */\nexport type GuardedNavigation = { currentPath: string; nextPath: string };\n\ntype UnsavedChangesGuardProps = {\n when: boolean;\n /**\n * While `when`, which navigations ask (default: all). E.g. a screen whose edits survive a search-param\n * change asks only when the path changes. Reloading or closing the page always warns.\n */\n shouldBlock?: (navigation: GuardedNavigation) => boolean;\n /** The question; defaults to \"Discard unsaved changes?\" (and its description and buttons). */\n title?: string;\n description?: string;\n /** The button that stays on the page. */\n stayLabel?: string;\n /** The button that leaves. */\n leaveLabel?: string;\n};\n\n/**\n * Dirty-state protection: while `when` is true, in-app navigation asks before discarding edits and the\n * browser warns on reload/close.\n */\nexport const UnsavedChangesGuard = ({\n when,\n shouldBlock,\n title,\n description,\n stayLabel,\n leaveLabel,\n}: UnsavedChangesGuardProps) => {\n const { t } = useTranslation();\n const blocker = useBlocker({\n shouldBlockFn: ({ current, next }) =>\n when && (shouldBlock?.({ currentPath: current.pathname, nextPath: next.pathname }) ?? true),\n enableBeforeUnload: () => when,\n withResolver: true,\n });\n return (\n <ConfirmDialog\n open={blocker.status === 'blocked'}\n onOpenChange={(open) => {\n if (!open && blocker.status === 'blocked') {\n blocker.reset();\n }\n }}\n title={title ?? t('unsaved.title')}\n description={description ?? t('unsaved.description')}\n cancelLabel={stayLabel ?? t('unsaved.stay')}\n confirmLabel={leaveLabel ?? t('unsaved.leave')}\n destructive\n onConfirm={() => blocker.proceed?.()}\n />\n );\n};\n"],"ignoreList":[0],"mappings":"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"}
1
+ {"version":3,"file":"UnsavedChangesGuard-C1n7egF6.js","names":["__toESM","require_jsx_runtime","useRouter","useTranslation","ConfirmDialog","import_react","require_react","_resolveBlockerOpts","opts","shouldBlock","condition","fn","useBlocker","router","resolver","setResolver","disabled","history","getLocation","parsedLocation","location","rawParams","foundRoute","current","blockerFnArgs","next","shouldBlockFn","withResolver","canNavigateAsync","resolve","enableBeforeUnload","import_jsx_runtime","UnsavedChangesGuard","blocker","when","open","title","t","description","stayLabel","leaveLabel"],"sources":["../../../../node_modules/.pnpm/@tanstack+react-router@1.170.41_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@tanstack/react-router/dist/esm/useBlocker.js","../../src/components/UnsavedChangesGuard/index.tsx"],"sourcesContent":["\"use client\";\nimport { useRouter } from \"./useRouter.js\";\nimport * as React$1 from \"react\";\n//#region src/useBlocker.tsx\nfunction _resolveBlockerOpts(opts, condition) {\n\tif (opts === void 0) return {\n\t\tshouldBlockFn: () => true,\n\t\twithResolver: false\n\t};\n\tif (\"shouldBlockFn\" in opts) return opts;\n\tif (typeof opts === \"function\") {\n\t\tconst shouldBlock = Boolean(condition ?? true);\n\t\tconst _customBlockerFn = async () => {\n\t\t\tif (shouldBlock) return await opts();\n\t\t\treturn false;\n\t\t};\n\t\treturn {\n\t\t\tshouldBlockFn: _customBlockerFn,\n\t\t\tenableBeforeUnload: shouldBlock,\n\t\t\twithResolver: false\n\t\t};\n\t}\n\tconst shouldBlock = Boolean(opts.condition ?? true);\n\tconst fn = opts.blockerFn;\n\tconst _customBlockerFn = async () => {\n\t\tif (shouldBlock && fn !== void 0) return await fn();\n\t\treturn shouldBlock;\n\t};\n\treturn {\n\t\tshouldBlockFn: _customBlockerFn,\n\t\tenableBeforeUnload: shouldBlock,\n\t\twithResolver: fn === void 0\n\t};\n}\nfunction useBlocker(opts, condition) {\n\tconst { shouldBlockFn, enableBeforeUnload = true, disabled = false, withResolver = false } = _resolveBlockerOpts(opts, condition);\n\tconst router = useRouter();\n\tconst { history } = router;\n\tconst [resolver, setResolver] = React$1.useState({\n\t\tstatus: \"idle\",\n\t\tcurrent: void 0,\n\t\tnext: void 0,\n\t\taction: void 0,\n\t\tproceed: void 0,\n\t\treset: void 0\n\t});\n\tReact$1.useEffect(() => {\n\t\tconst blockerFnComposed = async (blockerFnArgs) => {\n\t\t\tfunction getLocation(location) {\n\t\t\t\tconst parsedLocation = router.parseLocation(location);\n\t\t\t\tconst [, rawParams, foundRoute] = router.getMatchedRoutes(parsedLocation.pathname);\n\t\t\t\tif (foundRoute === void 0) return {\n\t\t\t\t\trouteId: \"__notFound__\",\n\t\t\t\t\tfullPath: parsedLocation.pathname,\n\t\t\t\t\tpathname: parsedLocation.pathname,\n\t\t\t\t\tparams: rawParams,\n\t\t\t\t\tsearch: router.options.parseSearch(location.search)\n\t\t\t\t};\n\t\t\t\treturn {\n\t\t\t\t\trouteId: foundRoute.id,\n\t\t\t\t\tfullPath: foundRoute.fullPath,\n\t\t\t\t\tpathname: parsedLocation.pathname,\n\t\t\t\t\tparams: rawParams,\n\t\t\t\t\tsearch: router.options.parseSearch(location.search)\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst current = getLocation(blockerFnArgs.currentLocation);\n\t\t\tconst next = getLocation(blockerFnArgs.nextLocation);\n\t\t\tif (current.routeId === \"__notFound__\" && next.routeId !== \"__notFound__\") return false;\n\t\t\tconst shouldBlock = await shouldBlockFn({\n\t\t\t\taction: blockerFnArgs.action,\n\t\t\t\tcurrent,\n\t\t\t\tnext\n\t\t\t});\n\t\t\tif (!withResolver) return shouldBlock;\n\t\t\tif (!shouldBlock) return false;\n\t\t\tconst canNavigateAsync = await new Promise((resolve) => {\n\t\t\t\tsetResolver({\n\t\t\t\t\tstatus: \"blocked\",\n\t\t\t\t\tcurrent,\n\t\t\t\t\tnext,\n\t\t\t\t\taction: blockerFnArgs.action,\n\t\t\t\t\tproceed: () => resolve(false),\n\t\t\t\t\treset: () => resolve(true)\n\t\t\t\t});\n\t\t\t});\n\t\t\tsetResolver({\n\t\t\t\tstatus: \"idle\",\n\t\t\t\tcurrent: void 0,\n\t\t\t\tnext: void 0,\n\t\t\t\taction: void 0,\n\t\t\t\tproceed: void 0,\n\t\t\t\treset: void 0\n\t\t\t});\n\t\t\treturn canNavigateAsync;\n\t\t};\n\t\treturn disabled ? void 0 : history.block({\n\t\t\tblockerFn: blockerFnComposed,\n\t\t\tenableBeforeUnload\n\t\t});\n\t}, [\n\t\tshouldBlockFn,\n\t\tenableBeforeUnload,\n\t\tdisabled,\n\t\twithResolver,\n\t\thistory,\n\t\trouter\n\t]);\n\treturn resolver;\n}\nvar _resolvePromptBlockerArgs = (props) => {\n\tif (\"shouldBlockFn\" in props) return { ...props };\n\tconst shouldBlock = Boolean(props.condition ?? true);\n\tconst fn = props.blockerFn;\n\tconst _customBlockerFn = async () => {\n\t\tif (shouldBlock && fn !== void 0) return await fn();\n\t\treturn shouldBlock;\n\t};\n\treturn {\n\t\tshouldBlockFn: _customBlockerFn,\n\t\tenableBeforeUnload: shouldBlock,\n\t\twithResolver: fn === void 0\n\t};\n};\nfunction Block(opts) {\n\tconst { children, ...rest } = opts;\n\tconst resolver = useBlocker(_resolvePromptBlockerArgs(rest));\n\treturn children ? typeof children === \"function\" ? children(resolver) : children : null;\n}\n//#endregion\nexport { Block, useBlocker };\n\n//# sourceMappingURL=useBlocker.js.map","import { useBlocker } from '@tanstack/react-router';\nimport { useTranslation } from 'react-i18next';\nimport { ConfirmDialog } from '../ConfirmDialog';\n\n/** A navigation the guard may let through: the pathnames it goes from and to. */\nexport type GuardedNavigation = { currentPath: string; nextPath: string };\n\ntype UnsavedChangesGuardProps = {\n when: boolean;\n /**\n * While `when`, which navigations ask (default: all). E.g. a screen whose edits survive a search-param\n * change asks only when the path changes. Reloading or closing the page always warns.\n */\n shouldBlock?: (navigation: GuardedNavigation) => boolean;\n /** The question; defaults to \"Discard unsaved changes?\" (and its description and buttons). */\n title?: string;\n description?: string;\n /** The button that stays on the page. */\n stayLabel?: string;\n /** The button that leaves. */\n leaveLabel?: string;\n};\n\n/**\n * Dirty-state protection: while `when` is true, in-app navigation asks before discarding edits and the\n * browser warns on reload/close.\n */\nexport const UnsavedChangesGuard = ({\n when,\n shouldBlock,\n title,\n description,\n stayLabel,\n leaveLabel,\n}: UnsavedChangesGuardProps) => {\n const { t } = useTranslation();\n const blocker = useBlocker({\n shouldBlockFn: ({ current, next }) =>\n when && (shouldBlock?.({ currentPath: current.pathname, nextPath: next.pathname }) ?? true),\n enableBeforeUnload: () => when,\n withResolver: true,\n });\n return (\n <ConfirmDialog\n open={blocker.status === 'blocked'}\n onOpenChange={(open) => {\n if (!open && blocker.status === 'blocked') {\n blocker.reset();\n }\n }}\n title={title ?? t('unsaved.title')}\n description={description ?? t('unsaved.description')}\n cancelLabel={stayLabel ?? t('unsaved.stay')}\n confirmLabel={leaveLabel ?? t('unsaved.leave')}\n destructive\n onConfirm={() => blocker.proceed?.()}\n />\n );\n};\n"],"ignoreList":[0],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./react-CQOZoUwg.js";import{t as n}from"./jsx-runtime-DREnUpxT.js";import{f as r,h as i,m as a}from"./es2015-DgNe6MPq.js";import{t as o}from"./cn-DVhJ55Mo.js";var s=e(t(),1),c=e(n(),1),l=Object.defineProperty,u=(e,t)=>l(e,`name`,{value:t,configurable:!0}),d=`Avatar`,[f,p]=a(d),m=[0,()=>void 0],[h,g]=f(d),_=s.forwardRef(u(function(e,t){let{__scopeAvatar:n,...r}=e,[a,o]=s.useState(`idle`),[l,u]=S();return(0,c.jsx)(h,{scope:n,imageLoadingStatus:a,setImageLoadingStatus:o,imageCount:l,setImageCount:u,children:(0,c.jsx)(i.span,{...r,ref:t})})},`Avatar`)),v=`AvatarFallback`,y=s.forwardRef(u(function(e,t){let{__scopeAvatar:n,delayMs:r,...a}=e,o=g(v,n),[l,u]=s.useState(r===void 0);return s.useEffect(()=>{if(r!==void 0){let e=window.setTimeout(()=>u(!0),r);return()=>window.clearTimeout(e)}},[r]),l&&o.imageLoadingStatus!==`loaded`?(0,c.jsx)(i.span,{...a,ref:t}):null},`AvatarFallback`));function b(e,{loadingStatus:t,setLoadingStatus:n,referrerPolicy:i,crossOrigin:a}){return r(()=>{if(!e){n(`error`);return}let t=new window.Image,r=u(e=>{let t=e.currentTarget;n(x(t))},`handleLoad`),o=u(()=>n(`error`),`handleError`);return t.addEventListener(`load`,r),t.addEventListener(`error`,o),i&&(t.referrerPolicy=i),t.crossOrigin=a??null,t.src=e,n(x(t)),()=>{t.removeEventListener(`load`,r),t.removeEventListener(`error`,o),n(`idle`)}},[e,a,i,n]),t}u(b,`useImageLoadingStatus`);function x(e){return e.complete?e.naturalWidth>0?`loaded`:`error`:`loading`}u(x,`getImageLoadingStatus`);function S(){return m}u(S,`useImageCount`);function C(e){}u(C,`useUpdateImageCount`);function w({className:e,size:t=`default`,...n}){return(0,c.jsx)(_,{"data-slot":`avatar`,"data-size":t,className:o(`group/avatar relative flex size-8 shrink-0 overflow-hidden rounded-full select-none data-[size=lg]:size-10 data-[size=sm]:size-6`,e),...n})}function T({className:e,...t}){return(0,c.jsx)(y,{"data-slot":`avatar-fallback`,className:o(`flex size-full items-center justify-center rounded-full bg-muted text-sm text-muted-foreground group-data-[size=sm]/avatar:text-xs`,e),...t})}function E({className:e,...t}){return(0,c.jsx)(`div`,{"data-slot":`avatar-group`,className:o(`group/avatar-group flex -space-x-2 *:data-[slot=avatar]:ring-2 *:data-[slot=avatar]:ring-background`,e),...t})}function D({className:e,...t}){return(0,c.jsx)(`div`,{"data-slot":`avatar-group-count`,className:o(`relative flex size-8 shrink-0 items-center justify-center rounded-full bg-muted text-sm text-muted-foreground ring-2 ring-background group-has-data-[size=lg]/avatar-group:size-10 group-has-data-[size=sm]/avatar-group:size-6 [&>svg]:size-4 group-has-data-[size=lg]/avatar-group:[&>svg]:size-5 group-has-data-[size=sm]/avatar-group:[&>svg]:size-3`,e),...t})}var O=e=>{let t=e.replace(/@.*$/,``).split(/[\s._-]+/).filter(Boolean);return(t.length>1?`${t[0]?.[0]??``}${t.at(-1)?.[0]??``}`:t[0]?.[0]??`?`).toUpperCase()},k=({name:e,size:t=`default`,className:n})=>(0,c.jsx)(w,{size:t,"aria-hidden":`true`,className:n,children:(0,c.jsx)(T,{className:`text-xs font-semibold group-data-[size=sm]/avatar:text-2xs`,children:O(e)})});export{E as a,T as i,O as n,D as o,w as r,k as t};
2
- //# sourceMappingURL=UserAvatar-C-_SZaBb.js.map
1
+ import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./react-CQOZoUwg.js";import{t as n}from"./jsx-runtime-DREnUpxT.js";import{f as r,h as i,m as a}from"./es2015-DrAA1N2V.js";import{t as o}from"./cn-DVhJ55Mo.js";var s=e(t(),1),c=e(n(),1),l=Object.defineProperty,u=(e,t)=>l(e,`name`,{value:t,configurable:!0}),d=`Avatar`,[f,p]=a(d),m=[0,()=>void 0],[h,g]=f(d),_=s.forwardRef(u(function(e,t){let{__scopeAvatar:n,...r}=e,[a,o]=s.useState(`idle`),[l,u]=S();return(0,c.jsx)(h,{scope:n,imageLoadingStatus:a,setImageLoadingStatus:o,imageCount:l,setImageCount:u,children:(0,c.jsx)(i.span,{...r,ref:t})})},`Avatar`)),v=`AvatarFallback`,y=s.forwardRef(u(function(e,t){let{__scopeAvatar:n,delayMs:r,...a}=e,o=g(v,n),[l,u]=s.useState(r===void 0);return s.useEffect(()=>{if(r!==void 0){let e=window.setTimeout(()=>u(!0),r);return()=>window.clearTimeout(e)}},[r]),l&&o.imageLoadingStatus!==`loaded`?(0,c.jsx)(i.span,{...a,ref:t}):null},`AvatarFallback`));function b(e,{loadingStatus:t,setLoadingStatus:n,referrerPolicy:i,crossOrigin:a}){return r(()=>{if(!e){n(`error`);return}let t=new window.Image,r=u(e=>{let t=e.currentTarget;n(x(t))},`handleLoad`),o=u(()=>n(`error`),`handleError`);return t.addEventListener(`load`,r),t.addEventListener(`error`,o),i&&(t.referrerPolicy=i),t.crossOrigin=a??null,t.src=e,n(x(t)),()=>{t.removeEventListener(`load`,r),t.removeEventListener(`error`,o),n(`idle`)}},[e,a,i,n]),t}u(b,`useImageLoadingStatus`);function x(e){return e.complete?e.naturalWidth>0?`loaded`:`error`:`loading`}u(x,`getImageLoadingStatus`);function S(){return m}u(S,`useImageCount`);function C(e){}u(C,`useUpdateImageCount`);function w({className:e,size:t=`default`,...n}){return(0,c.jsx)(_,{"data-slot":`avatar`,"data-size":t,className:o(`group/avatar relative flex size-8 shrink-0 overflow-hidden rounded-full select-none data-[size=lg]:size-10 data-[size=sm]:size-6`,e),...n})}function T({className:e,...t}){return(0,c.jsx)(y,{"data-slot":`avatar-fallback`,className:o(`flex size-full items-center justify-center rounded-full bg-muted text-sm text-muted-foreground group-data-[size=sm]/avatar:text-xs`,e),...t})}function E({className:e,...t}){return(0,c.jsx)(`div`,{"data-slot":`avatar-group`,className:o(`group/avatar-group flex -space-x-2 *:data-[slot=avatar]:ring-2 *:data-[slot=avatar]:ring-background`,e),...t})}function D({className:e,...t}){return(0,c.jsx)(`div`,{"data-slot":`avatar-group-count`,className:o(`relative flex size-8 shrink-0 items-center justify-center rounded-full bg-muted text-sm text-muted-foreground ring-2 ring-background group-has-data-[size=lg]/avatar-group:size-10 group-has-data-[size=sm]/avatar-group:size-6 [&>svg]:size-4 group-has-data-[size=lg]/avatar-group:[&>svg]:size-5 group-has-data-[size=sm]/avatar-group:[&>svg]:size-3`,e),...t})}var O=e=>{let t=e.replace(/@.*$/,``).split(/[\s._-]+/).filter(Boolean);return(t.length>1?`${t[0]?.[0]??``}${t.at(-1)?.[0]??``}`:t[0]?.[0]??`?`).toUpperCase()},k=({name:e,size:t=`default`,className:n})=>(0,c.jsx)(w,{size:t,"aria-hidden":`true`,className:n,children:(0,c.jsx)(T,{className:`text-xs font-semibold group-data-[size=sm]/avatar:text-2xs`,children:O(e)})});export{E as a,T as i,O as n,D as o,w as r,k as t};
2
+ //# sourceMappingURL=UserAvatar-Bl32IpG_.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"UserAvatar-C-_SZaBb.js","names":["Avatar","AvatarFallback","AvatarPrimitive.Root","AvatarPrimitive.Fallback","__toESM","require_jsx_runtime","useLayoutEffect2","Primitive","createContextScope","cn","import_react","require_react","import_jsx_runtime","__defProp","__name","target","AVATAR_NAME","createAvatarContext","createAvatarScope","STATIC_IMAGE_COUNT_STATE","AvatarProvider","useAvatarContext","Avatar$1","avatarProps","props","imageLoadingStatus","setImageLoadingStatus","imageCount","setImageCount","useImageCount","__scopeAvatar","forwardedRef","FALLBACK_NAME","AvatarFallback$1","fallbackProps","context","canRender","setCanRender","delayMs","timerId","useImageLoadingStatus","src","setLoadingStatus","image","handleLoad","image2","event","getImageLoadingStatus","handleError","referrerPolicy","crossOrigin","loadingStatus","state","useUpdateImageCount","Avatar","size","className","AvatarFallback","AvatarGroup","AvatarGroupCount","initialsOf","words","name","UserAvatar"],"sources":["../../../../node_modules/.pnpm/@radix-ui+react-avatar@1.2.6_@types+react-dom@19.3.0_@types+react@19.3.0__@types+react@_7afe6898fb0821d3b48e9a7a5e9acf8a/node_modules/@radix-ui/react-avatar/dist/index.mjs","../../src/components/ui/avatar.tsx","../../src/helpers/initials.ts","../../src/components/UserAvatar/index.tsx"],"sourcesContent":["\"use client\";\nvar __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// src/avatar.tsx\nimport * as React from \"react\";\nimport { IS_DEVELOPMENT } from \"@radix-ui/primitive/is-development\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx } from \"react/jsx-runtime\";\nvar AVATAR_NAME = \"Avatar\";\nvar [createAvatarContext, createAvatarScope] = createContextScope(AVATAR_NAME);\nvar STATIC_IMAGE_COUNT_STATE = [\n 0,\n () => void 0\n];\nvar [AvatarProvider, useAvatarContext] = createAvatarContext(AVATAR_NAME);\nvar Avatar = /* @__PURE__ */ React.forwardRef(\n // blank line to reduce diff noise\n /* @__PURE__ */ __name(function Avatar2(props, forwardedRef) {\n const { __scopeAvatar, ...avatarProps } = props;\n const [imageLoadingStatus, setImageLoadingStatus] = React.useState(\"idle\");\n const [imageCount, setImageCount] = useImageCount();\n return /* @__PURE__ */ jsx(\n AvatarProvider,\n {\n scope: __scopeAvatar,\n imageLoadingStatus,\n setImageLoadingStatus,\n imageCount,\n setImageCount,\n children: /* @__PURE__ */ jsx(Primitive.span, { ...avatarProps, ref: forwardedRef })\n }\n );\n }, \"Avatar\")\n);\nvar IMAGE_NAME = \"AvatarImage\";\nvar AvatarImage = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function AvatarImage2(props, forwardedRef) {\n const { __scopeAvatar, src, onLoadingStatusChange, ...imageProps } = props;\n const context = useAvatarContext(IMAGE_NAME, __scopeAvatar);\n useUpdateImageCount(context.setImageCount);\n const imageLoadingStatus = useImageLoadingStatus(src, {\n referrerPolicy: imageProps.referrerPolicy,\n crossOrigin: imageProps.crossOrigin,\n loadingStatus: context.imageLoadingStatus,\n setLoadingStatus: context.setImageLoadingStatus\n });\n const handleLoadingStatusChange = useCallbackRef((status) => {\n onLoadingStatusChange?.(status);\n });\n const loadingStatusRef = React.useRef(imageLoadingStatus);\n useLayoutEffect(() => {\n const previousLoadingStatus = loadingStatusRef.current;\n loadingStatusRef.current = imageLoadingStatus;\n if (imageLoadingStatus !== previousLoadingStatus) {\n handleLoadingStatusChange(imageLoadingStatus);\n }\n }, [imageLoadingStatus, handleLoadingStatusChange]);\n return imageLoadingStatus === \"loaded\" ? /* @__PURE__ */ jsx(Primitive.img, { ...imageProps, ref: forwardedRef, src }) : null;\n }, \"AvatarImage\")\n);\nvar FALLBACK_NAME = \"AvatarFallback\";\nvar AvatarFallback = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function AvatarFallback2(props, forwardedRef) {\n const { __scopeAvatar, delayMs, ...fallbackProps } = props;\n const context = useAvatarContext(FALLBACK_NAME, __scopeAvatar);\n const [canRender, setCanRender] = React.useState(delayMs === void 0);\n React.useEffect(() => {\n if (delayMs !== void 0) {\n const timerId = window.setTimeout(() => setCanRender(true), delayMs);\n return () => window.clearTimeout(timerId);\n }\n }, [delayMs]);\n return canRender && context.imageLoadingStatus !== \"loaded\" ? /* @__PURE__ */ jsx(Primitive.span, { ...fallbackProps, ref: forwardedRef }) : null;\n }, \"AvatarFallback\")\n);\nfunction useImageLoadingStatus(src, {\n loadingStatus,\n setLoadingStatus,\n referrerPolicy,\n crossOrigin\n}) {\n useLayoutEffect(() => {\n if (!src) {\n setLoadingStatus(\"error\");\n return;\n }\n const image = new window.Image();\n const handleLoad = /* @__PURE__ */ __name((event) => {\n const image2 = event.currentTarget;\n setLoadingStatus(getImageLoadingStatus(image2));\n }, \"handleLoad\");\n const handleError = /* @__PURE__ */ __name(() => setLoadingStatus(\"error\"), \"handleError\");\n image.addEventListener(\"load\", handleLoad);\n image.addEventListener(\"error\", handleError);\n if (referrerPolicy) {\n image.referrerPolicy = referrerPolicy;\n }\n image.crossOrigin = crossOrigin ?? null;\n image.src = src;\n setLoadingStatus(getImageLoadingStatus(image));\n return () => {\n image.removeEventListener(\"load\", handleLoad);\n image.removeEventListener(\"error\", handleError);\n setLoadingStatus(\"idle\");\n };\n }, [src, crossOrigin, referrerPolicy, setLoadingStatus]);\n return loadingStatus;\n}\n__name(useImageLoadingStatus, \"useImageLoadingStatus\");\nfunction getImageLoadingStatus(image) {\n return image.complete ? image.naturalWidth > 0 ? \"loaded\" : \"error\" : \"loading\";\n}\n__name(getImageLoadingStatus, \"getImageLoadingStatus\");\nfunction useImageCount() {\n let state = STATIC_IMAGE_COUNT_STATE;\n if (IS_DEVELOPMENT) {\n state = React.useState(0);\n const [imageCount] = state;\n const hasWarnedRef = React.useRef(false);\n React.useEffect(() => {\n if (imageCount > 1 && !hasWarnedRef.current) {\n hasWarnedRef.current = true;\n console.warn(\n \"Avatar: Only one `Avatar.Image` component should be rendered per `Avatar.Root`, but multiple were detected. This will lead to unexpected behavior.\"\n );\n }\n }, [imageCount]);\n }\n return state;\n}\n__name(useImageCount, \"useImageCount\");\nfunction useUpdateImageCount(setImageCount) {\n if (IS_DEVELOPMENT) {\n React.useEffect(() => {\n setImageCount((imageCount) => imageCount + 1);\n return () => {\n setImageCount((imageCount) => imageCount - 1);\n };\n }, [setImageCount]);\n }\n}\n__name(useUpdateImageCount, \"useUpdateImageCount\");\nexport {\n Avatar,\n AvatarFallback,\n AvatarImage,\n AvatarFallback as Fallback,\n AvatarImage as Image,\n Avatar as Root,\n createAvatarScope\n};\n//# sourceMappingURL=index.mjs.map\n","'use client';\n\nimport { Avatar as AvatarPrimitive } from 'radix-ui';\nimport * as React from 'react';\nimport { cn } from '@/helpers/cn';\n\nfunction Avatar({\n className,\n size = 'default',\n ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Root> & {\n size?: 'default' | 'sm' | 'lg';\n}) {\n return (\n <AvatarPrimitive.Root\n data-slot=\"avatar\"\n data-size={size}\n className={cn(\n 'group/avatar relative flex size-8 shrink-0 overflow-hidden rounded-full select-none data-[size=lg]:size-10 data-[size=sm]:size-6',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction AvatarImage({ className, ...props }: React.ComponentProps<typeof AvatarPrimitive.Image>) {\n return (\n <AvatarPrimitive.Image\n data-slot=\"avatar-image\"\n className={cn('aspect-square size-full', className)}\n {...props}\n />\n );\n}\n\nfunction AvatarFallback({ className, ...props }: React.ComponentProps<typeof AvatarPrimitive.Fallback>) {\n return (\n <AvatarPrimitive.Fallback\n data-slot=\"avatar-fallback\"\n className={cn(\n 'flex size-full items-center justify-center rounded-full bg-muted text-sm text-muted-foreground group-data-[size=sm]/avatar:text-xs',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction AvatarBadge({ className, ...props }: React.ComponentProps<'span'>) {\n return (\n <span\n data-slot=\"avatar-badge\"\n className={cn(\n 'absolute right-0 bottom-0 z-10 inline-flex items-center justify-center rounded-full bg-primary text-primary-foreground ring-2 ring-background select-none',\n 'group-data-[size=sm]/avatar:size-2 group-data-[size=sm]/avatar:[&>svg]:hidden',\n 'group-data-[size=default]/avatar:size-2.5 group-data-[size=default]/avatar:[&>svg]:size-2',\n 'group-data-[size=lg]/avatar:size-3 group-data-[size=lg]/avatar:[&>svg]:size-2',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction AvatarGroup({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"avatar-group\"\n className={cn(\n 'group/avatar-group flex -space-x-2 *:data-[slot=avatar]:ring-2 *:data-[slot=avatar]:ring-background',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction AvatarGroupCount({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"avatar-group-count\"\n className={cn(\n 'relative flex size-8 shrink-0 items-center justify-center rounded-full bg-muted text-sm text-muted-foreground ring-2 ring-background group-has-data-[size=lg]/avatar-group:size-10 group-has-data-[size=sm]/avatar-group:size-6 [&>svg]:size-4 group-has-data-[size=lg]/avatar-group:[&>svg]:size-5 group-has-data-[size=sm]/avatar-group:[&>svg]:size-3',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Avatar, AvatarImage, AvatarFallback, AvatarBadge, AvatarGroup, AvatarGroupCount };\n","/** Up to two initials for an avatar: \"Ada Lovelace\" → \"AL\", \"ada@example.com\" → \"A\". */\nexport const initialsOf = (name: string): string => {\n const words = name\n .replace(/@.*$/, '')\n .split(/[\\s._-]+/)\n .filter(Boolean);\n const initials =\n words.length > 1 ? `${words[0]?.[0] ?? ''}${words.at(-1)?.[0] ?? ''}` : (words[0]?.[0] ?? '?');\n return initials.toUpperCase();\n};\n","import { Avatar, AvatarFallback } from '@/components/ui/avatar';\nimport { initialsOf } from '@/helpers/initials';\n\ntype UserAvatarProps = {\n /** A display name or email; up to two initials are shown. */\n name: string;\n /** sm 24px (dense tables, activity rows), default 32px (user lists). */\n size?: 'sm' | 'default';\n className?: string;\n};\n\n/** A person's initials in a circle. Decorative: the name is always shown beside it. */\nexport const UserAvatar = ({ name, size = 'default', className }: UserAvatarProps) => (\n <Avatar size={size} aria-hidden=\"true\" className={className}>\n <AvatarFallback className=\"text-xs font-semibold group-data-[size=sm]/avatar:text-2xs\">\n {initialsOf(name)}\n </AvatarFallback>\n </Avatar>\n);\n"],"ignoreList":[0],"mappings":"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"}
1
+ {"version":3,"file":"UserAvatar-Bl32IpG_.js","names":["Avatar","AvatarFallback","AvatarPrimitive.Root","AvatarPrimitive.Fallback","__toESM","require_jsx_runtime","useLayoutEffect2","Primitive","createContextScope","cn","import_react","require_react","import_jsx_runtime","__defProp","__name","target","AVATAR_NAME","createAvatarContext","createAvatarScope","STATIC_IMAGE_COUNT_STATE","AvatarProvider","useAvatarContext","Avatar$1","avatarProps","props","imageLoadingStatus","setImageLoadingStatus","imageCount","setImageCount","useImageCount","__scopeAvatar","forwardedRef","FALLBACK_NAME","AvatarFallback$1","fallbackProps","context","canRender","setCanRender","delayMs","timerId","useImageLoadingStatus","src","setLoadingStatus","image","handleLoad","image2","event","getImageLoadingStatus","handleError","referrerPolicy","crossOrigin","loadingStatus","state","useUpdateImageCount","Avatar","size","className","AvatarFallback","AvatarGroup","AvatarGroupCount","initialsOf","words","name","UserAvatar"],"sources":["../../../../node_modules/.pnpm/@radix-ui+react-avatar@1.2.6_@types+react-dom@19.3.0_@types+react@19.3.0__@types+react@_7afe6898fb0821d3b48e9a7a5e9acf8a/node_modules/@radix-ui/react-avatar/dist/index.mjs","../../src/components/ui/avatar.tsx","../../src/helpers/initials.ts","../../src/components/UserAvatar/index.tsx"],"sourcesContent":["\"use client\";\nvar __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// src/avatar.tsx\nimport * as React from \"react\";\nimport { IS_DEVELOPMENT } from \"@radix-ui/primitive/is-development\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx } from \"react/jsx-runtime\";\nvar AVATAR_NAME = \"Avatar\";\nvar [createAvatarContext, createAvatarScope] = createContextScope(AVATAR_NAME);\nvar STATIC_IMAGE_COUNT_STATE = [\n 0,\n () => void 0\n];\nvar [AvatarProvider, useAvatarContext] = createAvatarContext(AVATAR_NAME);\nvar Avatar = /* @__PURE__ */ React.forwardRef(\n // blank line to reduce diff noise\n /* @__PURE__ */ __name(function Avatar2(props, forwardedRef) {\n const { __scopeAvatar, ...avatarProps } = props;\n const [imageLoadingStatus, setImageLoadingStatus] = React.useState(\"idle\");\n const [imageCount, setImageCount] = useImageCount();\n return /* @__PURE__ */ jsx(\n AvatarProvider,\n {\n scope: __scopeAvatar,\n imageLoadingStatus,\n setImageLoadingStatus,\n imageCount,\n setImageCount,\n children: /* @__PURE__ */ jsx(Primitive.span, { ...avatarProps, ref: forwardedRef })\n }\n );\n }, \"Avatar\")\n);\nvar IMAGE_NAME = \"AvatarImage\";\nvar AvatarImage = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function AvatarImage2(props, forwardedRef) {\n const { __scopeAvatar, src, onLoadingStatusChange, ...imageProps } = props;\n const context = useAvatarContext(IMAGE_NAME, __scopeAvatar);\n useUpdateImageCount(context.setImageCount);\n const imageLoadingStatus = useImageLoadingStatus(src, {\n referrerPolicy: imageProps.referrerPolicy,\n crossOrigin: imageProps.crossOrigin,\n loadingStatus: context.imageLoadingStatus,\n setLoadingStatus: context.setImageLoadingStatus\n });\n const handleLoadingStatusChange = useCallbackRef((status) => {\n onLoadingStatusChange?.(status);\n });\n const loadingStatusRef = React.useRef(imageLoadingStatus);\n useLayoutEffect(() => {\n const previousLoadingStatus = loadingStatusRef.current;\n loadingStatusRef.current = imageLoadingStatus;\n if (imageLoadingStatus !== previousLoadingStatus) {\n handleLoadingStatusChange(imageLoadingStatus);\n }\n }, [imageLoadingStatus, handleLoadingStatusChange]);\n return imageLoadingStatus === \"loaded\" ? /* @__PURE__ */ jsx(Primitive.img, { ...imageProps, ref: forwardedRef, src }) : null;\n }, \"AvatarImage\")\n);\nvar FALLBACK_NAME = \"AvatarFallback\";\nvar AvatarFallback = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function AvatarFallback2(props, forwardedRef) {\n const { __scopeAvatar, delayMs, ...fallbackProps } = props;\n const context = useAvatarContext(FALLBACK_NAME, __scopeAvatar);\n const [canRender, setCanRender] = React.useState(delayMs === void 0);\n React.useEffect(() => {\n if (delayMs !== void 0) {\n const timerId = window.setTimeout(() => setCanRender(true), delayMs);\n return () => window.clearTimeout(timerId);\n }\n }, [delayMs]);\n return canRender && context.imageLoadingStatus !== \"loaded\" ? /* @__PURE__ */ jsx(Primitive.span, { ...fallbackProps, ref: forwardedRef }) : null;\n }, \"AvatarFallback\")\n);\nfunction useImageLoadingStatus(src, {\n loadingStatus,\n setLoadingStatus,\n referrerPolicy,\n crossOrigin\n}) {\n useLayoutEffect(() => {\n if (!src) {\n setLoadingStatus(\"error\");\n return;\n }\n const image = new window.Image();\n const handleLoad = /* @__PURE__ */ __name((event) => {\n const image2 = event.currentTarget;\n setLoadingStatus(getImageLoadingStatus(image2));\n }, \"handleLoad\");\n const handleError = /* @__PURE__ */ __name(() => setLoadingStatus(\"error\"), \"handleError\");\n image.addEventListener(\"load\", handleLoad);\n image.addEventListener(\"error\", handleError);\n if (referrerPolicy) {\n image.referrerPolicy = referrerPolicy;\n }\n image.crossOrigin = crossOrigin ?? null;\n image.src = src;\n setLoadingStatus(getImageLoadingStatus(image));\n return () => {\n image.removeEventListener(\"load\", handleLoad);\n image.removeEventListener(\"error\", handleError);\n setLoadingStatus(\"idle\");\n };\n }, [src, crossOrigin, referrerPolicy, setLoadingStatus]);\n return loadingStatus;\n}\n__name(useImageLoadingStatus, \"useImageLoadingStatus\");\nfunction getImageLoadingStatus(image) {\n return image.complete ? image.naturalWidth > 0 ? \"loaded\" : \"error\" : \"loading\";\n}\n__name(getImageLoadingStatus, \"getImageLoadingStatus\");\nfunction useImageCount() {\n let state = STATIC_IMAGE_COUNT_STATE;\n if (IS_DEVELOPMENT) {\n state = React.useState(0);\n const [imageCount] = state;\n const hasWarnedRef = React.useRef(false);\n React.useEffect(() => {\n if (imageCount > 1 && !hasWarnedRef.current) {\n hasWarnedRef.current = true;\n console.warn(\n \"Avatar: Only one `Avatar.Image` component should be rendered per `Avatar.Root`, but multiple were detected. This will lead to unexpected behavior.\"\n );\n }\n }, [imageCount]);\n }\n return state;\n}\n__name(useImageCount, \"useImageCount\");\nfunction useUpdateImageCount(setImageCount) {\n if (IS_DEVELOPMENT) {\n React.useEffect(() => {\n setImageCount((imageCount) => imageCount + 1);\n return () => {\n setImageCount((imageCount) => imageCount - 1);\n };\n }, [setImageCount]);\n }\n}\n__name(useUpdateImageCount, \"useUpdateImageCount\");\nexport {\n Avatar,\n AvatarFallback,\n AvatarImage,\n AvatarFallback as Fallback,\n AvatarImage as Image,\n Avatar as Root,\n createAvatarScope\n};\n//# sourceMappingURL=index.mjs.map\n","'use client';\n\nimport { Avatar as AvatarPrimitive } from 'radix-ui';\nimport * as React from 'react';\nimport { cn } from '@/helpers/cn';\n\nfunction Avatar({\n className,\n size = 'default',\n ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Root> & {\n size?: 'default' | 'sm' | 'lg';\n}) {\n return (\n <AvatarPrimitive.Root\n data-slot=\"avatar\"\n data-size={size}\n className={cn(\n 'group/avatar relative flex size-8 shrink-0 overflow-hidden rounded-full select-none data-[size=lg]:size-10 data-[size=sm]:size-6',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction AvatarImage({ className, ...props }: React.ComponentProps<typeof AvatarPrimitive.Image>) {\n return (\n <AvatarPrimitive.Image\n data-slot=\"avatar-image\"\n className={cn('aspect-square size-full', className)}\n {...props}\n />\n );\n}\n\nfunction AvatarFallback({ className, ...props }: React.ComponentProps<typeof AvatarPrimitive.Fallback>) {\n return (\n <AvatarPrimitive.Fallback\n data-slot=\"avatar-fallback\"\n className={cn(\n 'flex size-full items-center justify-center rounded-full bg-muted text-sm text-muted-foreground group-data-[size=sm]/avatar:text-xs',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction AvatarBadge({ className, ...props }: React.ComponentProps<'span'>) {\n return (\n <span\n data-slot=\"avatar-badge\"\n className={cn(\n 'absolute right-0 bottom-0 z-10 inline-flex items-center justify-center rounded-full bg-primary text-primary-foreground ring-2 ring-background select-none',\n 'group-data-[size=sm]/avatar:size-2 group-data-[size=sm]/avatar:[&>svg]:hidden',\n 'group-data-[size=default]/avatar:size-2.5 group-data-[size=default]/avatar:[&>svg]:size-2',\n 'group-data-[size=lg]/avatar:size-3 group-data-[size=lg]/avatar:[&>svg]:size-2',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction AvatarGroup({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"avatar-group\"\n className={cn(\n 'group/avatar-group flex -space-x-2 *:data-[slot=avatar]:ring-2 *:data-[slot=avatar]:ring-background',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction AvatarGroupCount({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"avatar-group-count\"\n className={cn(\n 'relative flex size-8 shrink-0 items-center justify-center rounded-full bg-muted text-sm text-muted-foreground ring-2 ring-background group-has-data-[size=lg]/avatar-group:size-10 group-has-data-[size=sm]/avatar-group:size-6 [&>svg]:size-4 group-has-data-[size=lg]/avatar-group:[&>svg]:size-5 group-has-data-[size=sm]/avatar-group:[&>svg]:size-3',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Avatar, AvatarImage, AvatarFallback, AvatarBadge, AvatarGroup, AvatarGroupCount };\n","/** Up to two initials for an avatar: \"Ada Lovelace\" → \"AL\", \"ada@example.com\" → \"A\". */\nexport const initialsOf = (name: string): string => {\n const words = name\n .replace(/@.*$/, '')\n .split(/[\\s._-]+/)\n .filter(Boolean);\n const initials =\n words.length > 1 ? `${words[0]?.[0] ?? ''}${words.at(-1)?.[0] ?? ''}` : (words[0]?.[0] ?? '?');\n return initials.toUpperCase();\n};\n","import { Avatar, AvatarFallback } from '@/components/ui/avatar';\nimport { initialsOf } from '@/helpers/initials';\n\ntype UserAvatarProps = {\n /** A display name or email; up to two initials are shown. */\n name: string;\n /** sm 24px (dense tables, activity rows), default 32px (user lists). */\n size?: 'sm' | 'default';\n className?: string;\n};\n\n/** A person's initials in a circle. Decorative: the name is always shown beside it. */\nexport const UserAvatar = ({ name, size = 'default', className }: UserAvatarProps) => (\n <Avatar size={size} aria-hidden=\"true\" className={className}>\n <AvatarFallback className=\"text-xs font-semibold group-data-[size=sm]/avatar:text-2xs\">\n {initialsOf(name)}\n </AvatarFallback>\n </Avatar>\n);\n"],"ignoreList":[0],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./react-CQOZoUwg.js";import{t as n}from"./jsx-runtime-DREnUpxT.js";import{A as r,O as i,_ as a,i as o,j as s,k as c,lt as l,m as u,n as d,o as f,r as p}from"./loader-circle-C-9trZPI.js";import{m}from"./createLucideIcon-CqygG5K6.js";function h(e){return e}var g=e(t(),1),_=g.useLayoutEffect;function v(e){return e[e.length-1]}function y(e,t){return typeof e==`function`?e(t):e}var b=Object.prototype.hasOwnProperty;function x(e){for(let t in e)if(b.call(e,t))return!0;return!1}var S=()=>Object.create(null),C=(e,t)=>w(e,t,!0);function w(e,t,n,r=0){if(e===t)return e;if(r++>500)return t;let i=Array.isArray(e)&&Array.isArray(t);if(!i&&!(T(e)&&T(t)))return t;let a=Object.keys(e),o=a.length,s=Object.keys(t),c=s.length;if(i?o!==e.length||c!==t.length||o&&v(a)!==`${o-1}`||c&&v(s)!==`${c-1}`:o!==Object.getOwnPropertyNames(e).length||c!==Object.getOwnPropertyNames(t).length||Object.getOwnPropertySymbols(t).length)return t;let l=0,u,d,f;if(i){for(;l<c&&(f=l,d=e[f],u=t[f],u=d===u?d:typeof d==`object`?w(d,u,n,r):u,u===d);l++);if(l===c&&o===c)return e}else{let i=o===c,p=!0;for(;l<c;l++){f=s[l],d=e[f];let o=t[f];u=d===o?d:typeof d==`object`?w(d,o,n,r):o,i&&=u===d&&(a[l]===f||b.call(e,f)),p&&=Object.is(u,o),a[l]=u}if(i)return Object.getOwnPropertySymbols(e).length?t:e;if(p)return t}let p=i?s.fill(0):n?S():{};for(let o=0;o<c;o++)f=i?o:s[o],i?(d=e[f],o>l&&(u=t[f],u=d===u?d:typeof d==`object`?w(d,u,n,r):u),p[f]=o<l?d:u):p[f]=a[o];return p}function T(e){return!e||typeof e!=`object`?!1:(Object.getPrototypeOf(e)?.constructor??Object)===Object}function E(e,t,n,r){if(e===t)return!0;if(Array.isArray(e)&&Array.isArray(t)){if(e.length!==t.length)return!1;for(let i=0,a=e.length;i<a;i++){let a=e[i],o=t[i];if(a!==o&&!E(a,o,n,r))return!1}return!0}if(T(e)&&T(t)){if(n){for(let i in t)if((r||t[i]!==void 0)&&!E(e[i],t[i],n,r))return!1;return!0}let i=0;if(r)i=Object.keys(e).length;else for(let t in e)e[t]!==void 0&&i++;for(let a in t)if((r||t[a]!==void 0)&&(i--===0||!E(e[a],t[a],n,r)))return!1;return i===0}return!1}var ee=/[\x00-\x1f\x7f"<>`{}]/g;function D(e){return e.replace(ee,e=>`%`+e.charCodeAt(0).toString(16).toUpperCase().padStart(2,`0`))}function O(e){let t;try{t=decodeURI(e)}catch{t=e.replaceAll(/%[0-9A-F]{2}/gi,e=>{try{return decodeURI(e)}catch{return e}})}return D(t)}var k=[`http:`,`https:`,`mailto:`,`tel:`];function A(e){if(e[0]!==`/`&&e.includes(`:`))return/^[\x00-\x20]*([a-z][a-z\d+.\t\n\r-]*:)/i.exec(e)?.[1]?.replace(/[\t\n\r]/g,``).toLowerCase()}var j=/^[\x00-\x20]*[\\/][\t\n\r]*[\\/]/;function M(e,t){if(!e)return!1;if(j.test(e))return!0;let n=A(e);return n?!t.has(n):!1}var N={"&":`\\u0026`,">":`\\u003e`,"<":`\\u003c`,"\u2028":`\\u2028`,"\u2029":`\\u2029`},P=/[&><\u2028\u2029]/g;function F(e){return e.replace(P,e=>N[e])}function I(e){if(!e)return e;let t=e;if(/[%\\\x00-\x1f\x7f]/.test(e)){let n=/%25|%5C/gi,r=0,i;for(t=``;(i=n.exec(e))!==null;)t+=O(e.slice(r,i.index))+i[0],r=n.lastIndex;t+=O(r?e.slice(r):e)}return t}function L(e){return/[\s\u0080-\uFFFF]/.test(e)?e.replace(/\s|[^\u0000-\u007F]/gu,encodeURIComponent):e}function R(e,t){if(e===t)return!0;if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(e[n]!==t[n])return!1;return!0}function z(e){return e.replace(/\/{2,}/g,`/`)}function B(e){return e===`/`?e:e.replace(/^\/+/,``)}function V(e){let t=e.length;return t>1&&e[t-1]===`/`?e.replace(/\/+$/,``):e}function te(e){return V(B(e))}function H(e,t){return e?.endsWith(`/`)&&e!==`/`&&e!==`${t}/`?e.slice(0,-1):e}function ne(e,t,n=`never`,r){if(t.includes(`//`)&&(t=z(t)),t.startsWith(`/`))return t.length===1||n===`preserve`?t:n===`always`?t.endsWith(`/`)?t:`${t}/`:t.endsWith(`/`)?t.slice(0,-1):t;let i=t===`.`,a;if(r){a=i?e:e+`\0`+t;let n=r.get(a);if(n)return n}let o;if(i)o=e.split(`/`);else{for(e.includes(`//`)&&(e=z(e)),o=e.split(`/`);o.length>1&&v(o)===``;)o.pop();let n=t.split(`/`);for(let e=0,t=n.length;e<t;e++){let r=n[e];r===``?e?e===t-1&&o.push(r):o=[r]:r===`..`?o.length>1?o.pop():o=[``]:r===`.`||o.push(r)}}o.length>1&&(v(o)===``?n===`never`&&o.pop():n===`always`&&o.push(``));let s=o.join(`/`),c=(i?z(s):s)||`/`;return a&&r&&r.set(a,c),c}function re(e){let t=new Map(e.map(e=>[encodeURIComponent(e),e])),n=new RegExp([...t.keys()].join(`|`).replace(/[.*()]/g,`\\$&`),`g`);return e=>e.replace(n,e=>t.get(e)??e)}function ie(e){return e==null||e===``}function ae(e,t,n){if(typeof t!=`string`)return``+(t??void 0);let r=e===`_splat`;if(r&&(!t||/^[a-zA-Z0-9\-._~!/]*$/.test(t)))return t;let i=encodeURIComponent(t);return r&&(i=i.replaceAll(`%2F`,`/`)),n?n(i):i}function oe(e,t,n,r,i){let a=e.endsWith(`/`)?`/`:``,o=``;for(let e of t){if(typeof e==`string`){o+=e;continue}let[t,s,c,l]=e,u=t===2,d=u&&l!==void 0?l+a:l,f=n[s];if(t!==3||f!=null){if(i&&(i[s]=f,u&&(i[`*`]=f)),u&&ie(f)){if(c===`/`&&!d)continue;f=``}o+=c+ae(s,f,r)+(d||``)}}return o+a||`/`}var se=`Error preloading route! ☝️`,U=e(n(),1),ce=()=>!0,le=()=>!1;function ue({children:e,fallback:t=null}){return(0,U.jsx)(g.Fragment,{children:de()?e:t})}function de(e=!0){return g.useSyncExternalStore(fe,ce,e?le:ce)}function fe(){return()=>{}}var pe=g.createContext(null);function W(e){return g.useContext(pe)}var me=c();function he(e,t){return e===t}function ge(e,t=e=>e,n){let r=n?.compare??he,i=(0,g.useCallback)(t=>{let{unsubscribe:n}=e.subscribe(t);return n},[e]),a=(0,g.useCallback)(()=>e.get(),[e]);return(0,me.useSyncExternalStoreWithSelector)(i,a,a,t,r)}function _e(e){let t=W();return g.useCallback(n=>t.navigate({...n,from:n.from??e?.from}),[e?.from,t])}function ve(e){let t=W(),n=_e(),r=g.useRef(null);return _(()=>{r.current!==e&&(n(e),r.current=e)},[t,e,n]),null}function ye(...e){let t=g.useRef(e),n=t.current;return e.forEach((e,t)=>{E(n[t],e,!1,!0)||(n[t]=e)}),t.current}function G(e,t){e.preloadRoute(t).catch(e=>{console.warn(e),console.warn(se)})}var be={compare:(e,t)=>e[0]===t[0]&&e[1]===t[1]};function xe(e,t){let n=typeof e==`string`&&A(e);if(n)return t.has(n)?e:null}function Se(e,t,n,r,i){let a=H(e.pathname,r),o=H(t.pathname,r);return(n?.exact?a!==o:!a.startsWith(o)||a.length!==o.length&&a[o.length]!==`/`)||(n?.includeSearch??!0)&&!E(e.search,t.search,!n?.exact,n?.explicitUndefined)?!1:!n?.includeHash||i&&e.hash===t.hash}function Ce(e,t,n){let r=W(),i=g.useRef(null),a=g.useCallback(e=>{if(i.current=e,typeof t==`function`)return t(e);t&&(t.current=e)},[t]),{activeOptions:o,to:s,preload:c,preloadDelay:l,hashScrollIntoView:u,replace:d,startTransition:f,resetScroll:p,viewTransition:m,ignoreBlocker:h,disabled:_,target:v,onClick:y,onBlur:b,onFocus:x,onMouseEnter:S,onMouseLeave:C,onTouchStart:w}=e,T=de(!!o?.includeHash),[E,ee,D]=ye(e.search,e.params,o),[O,k]=g.useMemo(()=>[e,{...e}],[r,e.from,e._fromLocation,e.hash,e.to,E,ee,e.state,e.mask,e.unsafeRelative]),j=g.useMemo(()=>{let e=xe(s,r.protocolAllowlist);if(e!==void 0){let t=[e??void 0];return()=>t}let t,n;return e=>{O._fromLocation||(k._fromLocation=e);let i=r.buildLocation(k),a=Oe(i,r,_);return(!t||t[0]!==a)&&(t=[a,!(_||a&&!A(a))&&void 0],n=[a,!0]),t[1]!==void 0&&Se(e,i,D,r.basepath,T)?n:t}},[D,_,T,O,k,r,s]),[M,N]=ge(r.stores.location,j,be),P=N===void 0&&M,F=_||M===void 0,I=g.useRef(!1),L=e.reloadDocument||P||F?!1:c??r.options.defaultPreload,R=l??r.options.defaultPreloadDelay??0,z=g.useCallback(e=>{let t=e?.isIntersecting;if(!(t??L===`intent`)){t===!1&&J(i);return}if(!R){G(r,O);return}q.has(i)||q.set(i,setTimeout(()=>{q.delete(i),G(r,O)},R))},[r,O,i,L,R]);g.useEffect(()=>{if(!L)return;L===`render`&&!I.current&&(I.current=!0,G(r,O));let e=!0,t;return L===`viewport`&&i.current&&typeof IntersectionObserver==`function`&&(t=new IntersectionObserver(t=>{e&&z(t.pop())},{rootMargin:`100px`}),t.observe(i.current)),()=>{e=!1,t?.disconnect(),J(i)}},[r,O,L,z,i]);let B=Ee(e,n);if(B.ref=t?a:i,P)return B.href=P,B;let V=e=>{let t=v??e.currentTarget.getAttribute(`target`);!F&&!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&(!t||t===`_self`)&&e.button===0&&(e.preventDefault(),r.navigate({...O,replace:d,resetScroll:p,hashScrollIntoView:u,startTransition:f,viewTransition:m,ignoreBlocker:h}))},te=()=>{L===`intent`&&G(r,O)},H=()=>{L===`intent`&&J(i)};return B.onClick=Y(y,V),B.onBlur=Y(b,H),B.onFocus=Y(x,z),B.onMouseEnter=Y(S,z),B.onMouseLeave=Y(C,H),B.onTouchStart=Y(w,te),De(B,e,N,M,F,n)}var we={},Te={className:`active`},K=new Set([`to`,`params`,`search`,`hash`,`state`,`mask`,`from`,`unsafeRelative`,`_fromLocation`,`reloadDocument`,`preload`,`preloadDelay`,`preloadIntentProximity`,`hashScrollIntoView`,`replace`,`startTransition`,`resetScroll`,`viewTransition`,`ignoreBlocker`,`activeProps`,`inactiveProps`,`activeOptions`,`_asChild`]);function Ee(e,t){let n={};for(let r in e)K.has(r)||r===`type`&&t!==void 0||r===`disabled`&&t===`a`||(n[r]=e[r]);return n}function De(e,t,n,r,i,a){let{activeProps:o,inactiveProps:s,className:c,style:l,target:u}=t,d=y(n?o:s,{})??(n?Te:we);Object.assign(e,d),e.href=r,a!==`a`&&(e.disabled=i),e.target=u;let f=d.style;(l||f)&&(e.style=l&&f?{...l,...f}:l||f);let p=d.className;return(c||p)&&(e.className=c?p?`${c} ${p}`:c:p),i&&(e.role=`link`,e[`aria-disabled`]=!0),n&&(e[`data-status`]=`active`,e[`aria-current`]=`page`),e}var q=new WeakMap,J=e=>{clearTimeout(q.get(e)),q.delete(e)},Y=(e,t)=>e?n=>n.defaultPrevented||(e(n),n.defaultPrevented||t(n)):t;function Oe(e,t,n){if(n)return;let r=e.maskedLocation??e,i=r.external?r.publicHref:t.history.createHref(r.publicHref)||`/`;if(!r.external&&i===r.publicHref||!M(i,t.protocolAllowlist))return i}function ke(e){return g.forwardRef(function(t,n){return(0,U.jsx)(Ae,{...t,_asChild:e,ref:n})})}var Ae=g.memo(g.forwardRef((e,t)=>{let n=e._asChild||`a`,r=Ce(e,t,n),i=typeof e.children==`function`?e.children({isActive:r[`data-status`]===`active`}):e.children;return g.createElement(n,r,i)}),je);function je(e,t){let n=0;for(let r in t)if(n++,e[r]!==t[r]&&(!K.has(r)||!E(e[r],t[r],!1,!0)))return!1;for(let t in e)n--;return n===0}var Me=e=>e,Ne=e=>e instanceof m&&e.status===401,Pe=e=>e instanceof m&&e.status===403,Fe=e=>e instanceof m&&e.status===404,Ie=e=>e instanceof m&&e.status===409,X=(e,t)=>e instanceof m&&e.code===t,Le=e=>{if(!X(e,`SCHEMA_INVALID`))return[];let t=e.details?.issues;return Array.isArray(t)?t:[]},Z=h({queryKey:i.me,queryFn:async()=>{try{let e=await f.auth.me();return p(e.csrfToken),e}catch(e){if(Ne(e))return null;if(X(e,`SITE_NOT_FOUND`)&&!u().explicit)return a(),new Promise(()=>void 0);throw e}},staleTime:6e4}),Re=h({queryKey:i.setupStatus,queryFn:()=>f.setup.status(),staleTime:1/0}),ze=()=>s(Z),Be=()=>s(Re),Q=async(e,t)=>{p(t.csrfToken),e.removeQueries({predicate:e=>e.queryKey[0]!==i.me[0]}),e.setQueryData(i.setupStatus,e=>({requiresToken:!1,...e,required:!1})),await e.fetchQuery({...Z,staleTime:0})},$={silent:!0},Ve=()=>{let e=l();return r({mutationKey:[`auth`,`login`],meta:$,mutationFn:e=>o(()=>f.auth.login(e)),onSuccess:t=>Q(e,t)})},He=()=>{let e=l();return r({mutationKey:[`setup`],meta:$,mutationFn:e=>o(()=>f.setup.complete(e)),onSuccess:t=>Q(e,t)})},Ue=()=>{let e=l();return r({mutationKey:[`auth`,`acceptInvitation`],meta:$,mutationFn:e=>o(()=>f.invitations.accept(e)),onSuccess:t=>Q(e,t)})},We=()=>{let e=l();return r({mutationKey:[`auth`,`logout`],mutationFn:()=>o(()=>f.auth.logout()),onSettled:()=>{d(),e.setQueryData(i.me,null),e.removeQueries({predicate:e=>e.queryKey[0]!==i.me[0]})}})},Ge=()=>r({mutationKey:[`auth`,`requestPasswordReset`],meta:$,mutationFn:e=>o(()=>f.auth.requestPasswordReset(e))}),Ke=e=>s({queryKey:i.invitationInspect(e??``),queryFn:()=>f.invitations.inspect(e??``),enabled:!!e,retry:!1,staleTime:1/0,meta:{silent:!0}}),qe=()=>r({mutationKey:[`auth`,`confirmPasswordReset`],meta:$,mutationFn:e=>o(()=>f.auth.confirmPasswordReset(e))}),Je=()=>{let e=l();return r({mutationKey:[`auth`,`updateProfile`],meta:$,mutationFn:e=>o(()=>f.auth.updateProfile(e)),onSuccess:t=>e.setQueryData(i.me,e=>e&&{...e,user:t})})},Ye=()=>r({mutationKey:[`auth`,`changePassword`],meta:$,mutationFn:e=>o(()=>f.auth.changePassword(e)),onSuccess:({csrfToken:e})=>p(e)}),Xe=e=>{let{data:t}=ze();return t?.globalPermissions.includes(e)??!1};export{_ as $,z as A,I as B,Me as C,W as D,ge as E,B as F,A as G,L as H,V as I,M as J,x as K,k as L,oe as M,ne as N,pe as O,te as P,w as Q,R,ke as S,_e as T,F as U,E as V,y as W,C as X,v as Y,j as Z,Pe as _,qe as a,Le as b,Ve as c,Ge as d,h as et,He as f,Ie as g,X as h,Ye as i,re as j,ue as k,We as l,Je as m,Re as n,Xe as o,Be as p,b as q,Ue as r,Ke as s,Z as t,ze as u,Fe as v,ve as w,Ae as x,Ne as y,S as z};
2
+ //# sourceMappingURL=auth-C4fHG9Iu.js.map