@shapio/cms 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (323) hide show
  1. package/dist/admin/apple-touch-icon.png +0 -0
  2. package/dist/admin/assets/AssetTile-C-Mu0BRF.js +2 -0
  3. package/dist/admin/assets/AssetTile-C-Mu0BRF.js.map +1 -0
  4. package/dist/admin/assets/{AssistError-BITJ_tpg.js → AssistError-B-bnaHhJ.js} +2 -2
  5. package/dist/admin/assets/{AssistError-BITJ_tpg.js.map → AssistError-B-bnaHhJ.js.map} +1 -1
  6. package/dist/admin/assets/{BlockMenuItems-CcluK965.js → BlockMenuItems-Dn9WULjL.js} +3 -3
  7. package/dist/admin/assets/{BlockMenuItems-CcluK965.js.map → BlockMenuItems-Dn9WULjL.js.map} +1 -1
  8. package/dist/admin/assets/Body-C0SwduLi.js +2 -0
  9. package/dist/admin/assets/{Body-BXa9DhtH.js.map → Body-C0SwduLi.js.map} +1 -1
  10. package/dist/admin/assets/Builder-C11yUgu9.js +2 -0
  11. package/dist/admin/assets/Builder-C11yUgu9.js.map +1 -0
  12. package/dist/admin/assets/{ConfirmDialog-B9nWhIIz.js → ConfirmDialog-BfpN2MQx.js} +2 -2
  13. package/dist/admin/assets/{ConfirmDialog-B9nWhIIz.js.map → ConfirmDialog-BfpN2MQx.js.map} +1 -1
  14. package/dist/admin/assets/{CopyButton-BoWb-xi1.js → CopyButton-Dxbzp7hC.js} +2 -2
  15. package/dist/admin/assets/{CopyButton-BoWb-xi1.js.map → CopyButton-Dxbzp7hC.js.map} +1 -1
  16. package/dist/admin/assets/{CursorPager-BnxmTk47.js → CursorPager-DkZs6rPg.js} +2 -2
  17. package/dist/admin/assets/{CursorPager-BnxmTk47.js.map → CursorPager-DkZs6rPg.js.map} +1 -1
  18. package/dist/admin/assets/{ExternalLink-Eeb9mONJ.js → ExternalLink-KdO72pTj.js} +2 -2
  19. package/dist/admin/assets/{ExternalLink-Eeb9mONJ.js.map → ExternalLink-KdO72pTj.js.map} +1 -1
  20. package/dist/admin/assets/FocalPoint-r1MG_y-r.js +2 -0
  21. package/dist/admin/assets/FocalPoint-r1MG_y-r.js.map +1 -0
  22. package/dist/admin/assets/Form-D8vp4Kd_.js +2 -0
  23. package/dist/admin/assets/{Form-DZRLD3vH.js.map → Form-D8vp4Kd_.js.map} +1 -1
  24. package/dist/admin/assets/{FormCheckboxGroup-uIC2XQIL.js → FormCheckboxGroup-8ObPh9cH.js} +2 -2
  25. package/dist/admin/assets/{FormCheckboxGroup-uIC2XQIL.js.map → FormCheckboxGroup-8ObPh9cH.js.map} +1 -1
  26. package/dist/admin/assets/{FormRadioGroup-hd95vPOu.js → FormRadioGroup-CAB3qzVS.js} +2 -2
  27. package/dist/admin/assets/{FormRadioGroup-hd95vPOu.js.map → FormRadioGroup-CAB3qzVS.js.map} +1 -1
  28. package/dist/admin/assets/{FormSelectField-D7VHmnx5.js → FormSelectField-C7hE05Wq.js} +2 -2
  29. package/dist/admin/assets/{FormSelectField-D7VHmnx5.js.map → FormSelectField-C7hE05Wq.js.map} +1 -1
  30. package/dist/admin/assets/{FormSwitchField-ft8Jbe6E.js → FormSwitchField-7EEYkGOH.js} +2 -2
  31. package/dist/admin/assets/{FormSwitchField-ft8Jbe6E.js.map → FormSwitchField-7EEYkGOH.js.map} +1 -1
  32. package/dist/admin/assets/{FormTextareaField-DzyOzfZb.js → FormTextareaField-BasuRoXW.js} +2 -2
  33. package/dist/admin/assets/{FormTextareaField-DzyOzfZb.js.map → FormTextareaField-BasuRoXW.js.map} +1 -1
  34. package/dist/admin/assets/{HintedLabel-CvC46uy_.js → HintedLabel-BDV81kIT.js} +2 -2
  35. package/dist/admin/assets/{HintedLabel-CvC46uy_.js.map → HintedLabel-BDV81kIT.js.map} +1 -1
  36. package/dist/admin/assets/{InfoHint-GJLRVumb.js → InfoHint-DWn9kLf1.js} +2 -2
  37. package/dist/admin/assets/{InfoHint-GJLRVumb.js.map → InfoHint-DWn9kLf1.js.map} +1 -1
  38. package/dist/admin/assets/InsertMenuItem-DhJk5BeH.js +2 -0
  39. package/dist/admin/assets/InsertMenuItem-DhJk5BeH.js.map +1 -0
  40. package/dist/admin/assets/{LinkTabs-BZSlA57U.js → LinkTabs-stM3j4aH.js} +2 -2
  41. package/dist/admin/assets/{LinkTabs-BZSlA57U.js.map → LinkTabs-stM3j4aH.js.map} +1 -1
  42. package/dist/admin/assets/{Match-DdxTHHM4.js → Match-Zu4pwfCC.js} +2 -2
  43. package/dist/admin/assets/{Match-DdxTHHM4.js.map → Match-Zu4pwfCC.js.map} +1 -1
  44. package/dist/admin/assets/{Panel-iIKjEURi.js → Panel-ClY9b33D.js} +2 -2
  45. package/dist/admin/assets/{Panel-iIKjEURi.js.map → Panel-ClY9b33D.js.map} +1 -1
  46. package/dist/admin/assets/{QueryView-D6aZQJRN.js → QueryView-Cu-KPtQI.js} +2 -2
  47. package/dist/admin/assets/{QueryView-D6aZQJRN.js.map → QueryView-Cu-KPtQI.js.map} +1 -1
  48. package/dist/admin/assets/{RadioTile-BpB79rIK.js → RadioTile-Ci0LucKI.js} +2 -2
  49. package/dist/admin/assets/RadioTile-Ci0LucKI.js.map +1 -0
  50. package/dist/admin/assets/RichTextField-BcYOFkeW.js +144 -0
  51. package/dist/admin/assets/{RichTextField-BuHCONPu.js.map → RichTextField-BcYOFkeW.js.map} +1 -1
  52. package/dist/admin/assets/{RowTitle--uFCpx8n.js → RowTitle-BdDgA5Lb.js} +2 -2
  53. package/dist/admin/assets/{RowTitle--uFCpx8n.js.map → RowTitle-BdDgA5Lb.js.map} +1 -1
  54. package/dist/admin/assets/{SecretReveal-DFpzeNE0.js → SecretReveal-ai1uMW_b.js} +2 -2
  55. package/dist/admin/assets/{SecretReveal-DFpzeNE0.js.map → SecretReveal-ai1uMW_b.js.map} +1 -1
  56. package/dist/admin/assets/{SharedGlyph-Cqkx30tn.js → SharedGlyph-y6ZsA_gz.js} +2 -2
  57. package/dist/admin/assets/{SharedGlyph-Cqkx30tn.js.map → SharedGlyph-y6ZsA_gz.js.map} +1 -1
  58. package/dist/admin/assets/{StepList-BY5MuJPJ.js → StepList-xmD9CPZl.js} +2 -2
  59. package/dist/admin/assets/{StepList-BY5MuJPJ.js.map → StepList-xmD9CPZl.js.map} +1 -1
  60. package/dist/admin/assets/Structure-DGt-TDk5.js +2 -0
  61. package/dist/admin/assets/{Structure-CqRa2t7z.js.map → Structure-DGt-TDk5.js.map} +1 -1
  62. package/dist/admin/assets/{SubNavLink-B2o4kSZ9.js → SubNavLink-YjjaDN40.js} +2 -2
  63. package/dist/admin/assets/{SubNavLink-B2o4kSZ9.js.map → SubNavLink-YjjaDN40.js.map} +1 -1
  64. package/dist/admin/assets/{SuggestAltButton-4rf2xhEJ.js → SuggestAltButton-D1-v_0wB.js} +2 -2
  65. package/dist/admin/assets/{SuggestAltButton-4rf2xhEJ.js.map → SuggestAltButton-D1-v_0wB.js.map} +1 -1
  66. package/dist/admin/assets/{TextLink-D15oyXlc.js → TextLink-DIqr5zkJ.js} +2 -2
  67. package/dist/admin/assets/{TextLink-D15oyXlc.js.map → TextLink-DIqr5zkJ.js.map} +1 -1
  68. package/dist/admin/assets/Thumbnail-cjA7fSWh.js +2 -0
  69. package/dist/admin/assets/Thumbnail-cjA7fSWh.js.map +1 -0
  70. package/dist/admin/assets/{UnsavedChangesGuard-DgOASh0p.js → UnsavedChangesGuard-B57D0278.js} +2 -2
  71. package/dist/admin/assets/{UnsavedChangesGuard-DgOASh0p.js.map → UnsavedChangesGuard-B57D0278.js.map} +1 -1
  72. package/dist/admin/assets/{UserAvatar-BocvNVL-.js → UserAvatar--pMv2i3c.js} +2 -2
  73. package/dist/admin/assets/{UserAvatar-BocvNVL-.js.map → UserAvatar--pMv2i3c.js.map} +1 -1
  74. package/dist/admin/assets/{auth-pcS9CCXu.js → auth-YVfK3SxF.js} +2 -2
  75. package/dist/admin/assets/{auth-pcS9CCXu.js.map → auth-YVfK3SxF.js.map} +1 -1
  76. package/dist/admin/assets/{badge-DD0mE96i.js → badge-C5oMRtwJ.js} +2 -2
  77. package/dist/admin/assets/{badge-DD0mE96i.js.map → badge-C5oMRtwJ.js.map} +1 -1
  78. package/dist/admin/assets/{boxes-DcK-kaSa.js → boxes-DRvd25_u.js} +2 -2
  79. package/dist/admin/assets/{boxes-DcK-kaSa.js.map → boxes-DRvd25_u.js.map} +1 -1
  80. package/dist/admin/assets/{calendar-clock-DEwACe0M.js → calendar-clock-VENf4s1R.js} +2 -2
  81. package/dist/admin/assets/{calendar-clock-DEwACe0M.js.map → calendar-clock-VENf4s1R.js.map} +1 -1
  82. package/dist/admin/assets/{changeSets-BjUEfYbj.js → changeSets-CObZV8H2.js} +2 -2
  83. package/dist/admin/assets/{changeSets-BjUEfYbj.js.map → changeSets-CObZV8H2.js.map} +1 -1
  84. package/dist/admin/assets/chevron-left-D2DnQyeV.js +2 -0
  85. package/dist/admin/assets/{chevron-left-BsQYDUEC.js.map → chevron-left-D2DnQyeV.js.map} +1 -1
  86. package/dist/admin/assets/{circle-check-Dq1owihe.js → circle-check-jmRQz1Jq.js} +2 -2
  87. package/dist/admin/assets/{circle-check-Dq1owihe.js.map → circle-check-jmRQz1Jq.js.map} +1 -1
  88. package/dist/admin/assets/{clock-DQvkffqQ.js → clock-DrSTMGjp.js} +2 -2
  89. package/dist/admin/assets/{clock-DQvkffqQ.js.map → clock-DrSTMGjp.js.map} +1 -1
  90. package/dist/admin/assets/cn-CL1YHRrS.js +2 -0
  91. package/dist/admin/assets/cn-CL1YHRrS.js.map +1 -0
  92. package/dist/admin/assets/coerce-B4MJTGg1.js +2 -0
  93. package/dist/admin/assets/{coerce-OsqQRj19.js.map → coerce-B4MJTGg1.js.map} +1 -1
  94. package/dist/admin/assets/constants-DT4WPUvz.js +2 -0
  95. package/dist/admin/assets/{constants-SrImR6C3.js.map → constants-DT4WPUvz.js.map} +1 -1
  96. package/dist/admin/assets/content-HvisCB5m.js +3 -0
  97. package/dist/admin/assets/content-HvisCB5m.js.map +1 -0
  98. package/dist/admin/assets/{contentCounts-Ch3uMXVU.js → contentCounts-DzIvdeXR.js} +2 -2
  99. package/dist/admin/assets/{contentCounts-Ch3uMXVU.js.map → contentCounts-DzIvdeXR.js.map} +1 -1
  100. package/dist/admin/assets/{contentTypes-BCOdUK_Z.js → contentTypes-ArLEfM29.js} +2 -2
  101. package/dist/admin/assets/{contentTypes-BCOdUK_Z.js.map → contentTypes-ArLEfM29.js.map} +1 -1
  102. package/dist/admin/assets/context-4Jl20mYc.js +2 -0
  103. package/dist/admin/assets/context-4Jl20mYc.js.map +1 -0
  104. package/dist/admin/assets/{copy-BDc3r0fO.js → copy-t6kAFw-O.js} +2 -2
  105. package/dist/admin/assets/{copy-BDc3r0fO.js.map → copy-t6kAFw-O.js.map} +1 -1
  106. package/dist/admin/assets/{dateTimeLocal-C92tyKwz.js → dateTimeLocal-IDUOKulz.js} +2 -2
  107. package/dist/admin/assets/{dateTimeLocal-C92tyKwz.js.map → dateTimeLocal-IDUOKulz.js.map} +1 -1
  108. package/dist/admin/assets/develop-DvKYqVeK.js +11 -0
  109. package/dist/admin/assets/develop-DvKYqVeK.js.map +1 -0
  110. package/dist/admin/assets/dropdown-menu-DPzDthV7.js +2 -0
  111. package/dist/admin/assets/dropdown-menu-DPzDthV7.js.map +1 -0
  112. package/dist/admin/assets/{ellipsis-NK0pWgqU.js → ellipsis-DEHUaCkn.js} +2 -2
  113. package/dist/admin/assets/{ellipsis-NK0pWgqU.js.map → ellipsis-DEHUaCkn.js.map} +1 -1
  114. package/dist/admin/assets/external-link-B8UFREQ_.js +2 -0
  115. package/dist/admin/assets/external-link-B8UFREQ_.js.map +1 -0
  116. package/dist/admin/assets/{fileRoute-C2tOrKhO.js → fileRoute-sJvv4Ipn.js} +2 -2
  117. package/dist/admin/assets/{fileRoute-C2tOrKhO.js.map → fileRoute-sJvv4Ipn.js.map} +1 -1
  118. package/dist/admin/assets/folder-plus-iDg1hhew.js +2 -0
  119. package/dist/admin/assets/folder-plus-iDg1hhew.js.map +1 -0
  120. package/dist/admin/assets/followPlural-tOh6gDgT.js +2 -0
  121. package/dist/admin/assets/{followPlural-CN6cQfNk.js.map → followPlural-tOh6gDgT.js.map} +1 -1
  122. package/dist/admin/assets/{globe-CuElSilX.js → globe-TooNSp9V.js} +2 -2
  123. package/dist/admin/assets/{globe-CuElSilX.js.map → globe-TooNSp9V.js.map} +1 -1
  124. package/dist/admin/assets/{image-CsH8dZve.js → image-CXZXXH58.js} +2 -2
  125. package/dist/admin/assets/{image-CsH8dZve.js.map → image-CXZXXH58.js.map} +1 -1
  126. package/dist/admin/assets/{image-off-B_uBCsYu.js → image-off-cxva5G-Y.js} +2 -2
  127. package/dist/admin/assets/{image-off-B_uBCsYu.js.map → image-off-cxva5G-Y.js.map} +1 -1
  128. package/dist/admin/assets/{inbox-3iAHL3pC.js → inbox-B8c9Kj_z.js} +2 -2
  129. package/dist/admin/assets/{inbox-3iAHL3pC.js.map → inbox-B8c9Kj_z.js.map} +1 -1
  130. package/dist/admin/assets/{inbox-DsuXNaKE.js → inbox-nfR2K7f6.js} +2 -2
  131. package/dist/admin/assets/{inbox-DsuXNaKE.js.map → inbox-nfR2K7f6.js.map} +1 -1
  132. package/dist/admin/assets/index-Bbb2ER3l.css +2 -0
  133. package/dist/admin/assets/index-C6FrF34G.js +4 -0
  134. package/dist/admin/assets/index-C6FrF34G.js.map +1 -0
  135. package/dist/admin/assets/{key-round-B17HiT3K.js → key-round-CFJ61iCd.js} +2 -2
  136. package/dist/admin/assets/{key-round-B17HiT3K.js.map → key-round-CFJ61iCd.js.map} +1 -1
  137. package/dist/admin/assets/languages-eh7U4anI.js +2 -0
  138. package/dist/admin/assets/languages-eh7U4anI.js.map +1 -0
  139. package/dist/admin/assets/layers-mGfmMsKE.js +2 -0
  140. package/dist/admin/assets/layers-mGfmMsKE.js.map +1 -0
  141. package/dist/admin/assets/link-2-off-DbZzRN_w.js +2 -0
  142. package/dist/admin/assets/link-2-off-DbZzRN_w.js.map +1 -0
  143. package/dist/admin/assets/{link-bhHmG4Tc.js → link-b2pFaN-A.js} +2 -2
  144. package/dist/admin/assets/{link-bhHmG4Tc.js.map → link-b2pFaN-A.js.map} +1 -1
  145. package/dist/admin/assets/{locales-BzPbz8FF.js → locales-oBD0q1pN.js} +2 -2
  146. package/dist/admin/assets/{locales-BzPbz8FF.js.map → locales-oBD0q1pN.js.map} +1 -1
  147. package/dist/admin/assets/{media-Xzot1ueY.js → media-5ks_0Rre.js} +2 -2
  148. package/dist/admin/assets/{media-Xzot1ueY.js.map → media-5ks_0Rre.js.map} +1 -1
  149. package/dist/admin/assets/media-BzivlEh2.js +2 -0
  150. package/dist/admin/assets/{media-WLnWaL7U.js.map → media-BzivlEh2.js.map} +1 -1
  151. package/dist/admin/assets/network-Cj04CpFi.js +2 -0
  152. package/dist/admin/assets/network-Cj04CpFi.js.map +1 -0
  153. package/dist/admin/assets/{pencil-Bdp2z9D_.js → pencil-C7eD5mlZ.js} +2 -2
  154. package/dist/admin/assets/{pencil-Bdp2z9D_.js.map → pencil-C7eD5mlZ.js.map} +1 -1
  155. package/dist/admin/assets/{plus-BN_iSsnp.js → plus-BDZHQBlU.js} +2 -2
  156. package/dist/admin/assets/{plus-BN_iSsnp.js.map → plus-BDZHQBlU.js.map} +1 -1
  157. package/dist/admin/assets/{preload-helper-DAbCfXID.js → preload-helper-CJNJ4S3k.js} +2 -2
  158. package/dist/admin/assets/{preload-helper-DAbCfXID.js.map → preload-helper-CJNJ4S3k.js.map} +1 -1
  159. package/dist/admin/assets/publishing-ChHkrwvr.js +2 -0
  160. package/dist/admin/assets/{publishing-d9yhMwgA.js.map → publishing-ChHkrwvr.js.map} +1 -1
  161. package/dist/admin/assets/{radio-group-DHIxK-IU.js → radio-group-DSK5LPaM.js} +2 -2
  162. package/dist/admin/assets/{radio-group-DHIxK-IU.js.map → radio-group-DSK5LPaM.js.map} +1 -1
  163. package/dist/admin/assets/{rotate-ccw-CBoZle-b.js → rotate-ccw-DCWwb4Ga.js} +2 -2
  164. package/dist/admin/assets/{rotate-ccw-CBoZle-b.js.map → rotate-ccw-DCWwb4Ga.js.map} +1 -1
  165. package/dist/admin/assets/{schedules-Dy89Nm6P.js → schedules-DXrBSypK.js} +2 -2
  166. package/dist/admin/assets/{schedules-Dy89Nm6P.js.map → schedules-DXrBSypK.js.map} +1 -1
  167. package/dist/admin/assets/{schema-B4smPFcR.js → schema-B7L9OJrX.js} +2 -2
  168. package/dist/admin/assets/{schema-B4smPFcR.js.map → schema-B7L9OJrX.js.map} +1 -1
  169. package/dist/admin/assets/{scroll-text-UbyzpWh-.js → scroll-text-BLThe4Ki.js} +2 -2
  170. package/dist/admin/assets/{scroll-text-UbyzpWh-.js.map → scroll-text-BLThe4Ki.js.map} +1 -1
  171. package/dist/admin/assets/{file-text-DxXAmmxL.js → search-CcJQqtRw.js} +2 -2
  172. package/dist/admin/assets/search-CcJQqtRw.js.map +1 -0
  173. package/dist/admin/assets/{searchSchemas-BxRnxenn.js → searchSchemas-BdwAFaVO.js} +2 -2
  174. package/dist/admin/assets/{searchSchemas-BxRnxenn.js.map → searchSchemas-BdwAFaVO.js.map} +1 -1
  175. package/dist/admin/assets/{sections-Bb3Q4bcY.js → sections-TIN_Nl1b.js} +2 -2
  176. package/dist/admin/assets/{sections-Bb3Q4bcY.js.map → sections-TIN_Nl1b.js.map} +1 -1
  177. package/dist/admin/assets/sections-iNOzo7pL.js +2 -0
  178. package/dist/admin/assets/sections-iNOzo7pL.js.map +1 -0
  179. package/dist/admin/assets/{select-tHVWX85X.js → select-DyD7qIkJ.js} +2 -2
  180. package/dist/admin/assets/{select-tHVWX85X.js.map → select-DyD7qIkJ.js.map} +1 -1
  181. package/dist/admin/assets/{send-BqECHYi6.js → send-CbP0Rc9_.js} +2 -2
  182. package/dist/admin/assets/{send-BqECHYi6.js.map → send-CbP0Rc9_.js.map} +1 -1
  183. package/dist/admin/assets/seo-uMm2fGPB.js +2 -0
  184. package/dist/admin/assets/seo-uMm2fGPB.js.map +1 -0
  185. package/dist/admin/assets/settings-CJVORrIV.js +2 -0
  186. package/dist/admin/assets/settings-CJVORrIV.js.map +1 -0
  187. package/dist/admin/assets/skeleton-B5GJgv7y.js +42 -0
  188. package/dist/admin/assets/skeleton-B5GJgv7y.js.map +1 -0
  189. package/dist/admin/assets/snapshots-DkyyrWX3.js +2 -0
  190. package/dist/admin/assets/{snapshots-BQrhsCmC.js.map → snapshots-DkyyrWX3.js.map} +1 -1
  191. package/dist/admin/assets/{sparkles-BW4CbD6W.js → sparkles-D88gf3vX.js} +2 -2
  192. package/dist/admin/assets/{sparkles-BW4CbD6W.js.map → sparkles-D88gf3vX.js.map} +1 -1
  193. package/dist/admin/assets/src-B2qcqjNM.js +4 -0
  194. package/dist/admin/assets/src-B2qcqjNM.js.map +1 -0
  195. package/dist/admin/assets/{stableId-C9Yq5iUw.js → stableId-DlNKh3HM.js} +2 -2
  196. package/dist/admin/assets/{stableId-C9Yq5iUw.js.map → stableId-DlNKh3HM.js.map} +1 -1
  197. package/dist/admin/assets/{store-BphwUzV5.js → store-jUWyOXDG.js} +2 -2
  198. package/dist/admin/assets/{store-BphwUzV5.js.map → store-jUWyOXDG.js.map} +1 -1
  199. package/dist/admin/assets/{switch-BVy02Vc8.js → switch-DbIrjP3h.js} +2 -2
  200. package/dist/admin/assets/{switch-BVy02Vc8.js.map → switch-DbIrjP3h.js.map} +1 -1
  201. package/dist/admin/assets/table-DQ5ILlSh.js +56 -0
  202. package/dist/admin/assets/table-DQ5ILlSh.js.map +1 -0
  203. package/dist/admin/assets/tabs-BJhfL-lw.js +5 -0
  204. package/dist/admin/assets/tabs-BJhfL-lw.js.map +1 -0
  205. package/dist/admin/assets/{textarea-B8Vl5gJ1.js → textarea-FwSvwmyT.js} +2 -2
  206. package/dist/admin/assets/{textarea-B8Vl5gJ1.js.map → textarea-FwSvwmyT.js.map} +1 -1
  207. package/dist/admin/assets/theme-C0Tv6M38.js +2 -0
  208. package/dist/admin/assets/theme-C0Tv6M38.js.map +1 -0
  209. package/dist/admin/assets/{titles-B2z5ckxG.js → titles-uL13bpi8.js} +2 -2
  210. package/dist/admin/assets/{titles-B2z5ckxG.js.map → titles-uL13bpi8.js.map} +1 -1
  211. package/dist/admin/assets/{tokens-Fh_OeIlf.js → tokens-C-20gLAT.js} +2 -2
  212. package/dist/admin/assets/{tokens-Fh_OeIlf.js.map → tokens-C-20gLAT.js.map} +1 -1
  213. package/dist/admin/assets/{tooltip-DwqM3opE.js → tooltip-BK5FqmJ0.js} +2 -2
  214. package/dist/admin/assets/{tooltip-DwqM3opE.js.map → tooltip-BK5FqmJ0.js.map} +1 -1
  215. package/dist/admin/assets/{undo-2-D4Fz4JMZ.js → undo-2-CLy2zklL.js} +2 -2
  216. package/dist/admin/assets/{undo-2-D4Fz4JMZ.js.map → undo-2-CLy2zklL.js.map} +1 -1
  217. package/dist/admin/assets/{useAuditLabels-DKrsrciQ.js → useAuditLabels-BJF7M5RY.js} +2 -2
  218. package/dist/admin/assets/{useAuditLabels-DKrsrciQ.js.map → useAuditLabels-BJF7M5RY.js.map} +1 -1
  219. package/dist/admin/assets/{useConfirmTarget-Dp8mCulm.js → useConfirmTarget-BUvlrGSW.js} +2 -2
  220. package/dist/admin/assets/{useConfirmTarget-Dp8mCulm.js.map → useConfirmTarget-BUvlrGSW.js.map} +1 -1
  221. package/dist/admin/assets/useContentSchema-BCdLYsKa.js +2 -0
  222. package/dist/admin/assets/{useContentSchema-Bv4_6VJR.js.map → useContentSchema-BCdLYsKa.js.map} +1 -1
  223. package/dist/admin/assets/{useCursorPager-B1upg5EU.js → useCursorPager-CzB6NDOB.js} +2 -2
  224. package/dist/admin/assets/{useCursorPager-B1upg5EU.js.map → useCursorPager-CzB6NDOB.js.map} +1 -1
  225. package/dist/admin/assets/{useDiscardGuard-34ynGJIk.js → useDiscardGuard-CGFgC3xY.js} +2 -2
  226. package/dist/admin/assets/{useDiscardGuard-34ynGJIk.js.map → useDiscardGuard-CGFgC3xY.js.map} +1 -1
  227. package/dist/admin/assets/useMediaPickerDialog-BOkGEyG7.js +2 -0
  228. package/dist/admin/assets/useMediaPickerDialog-BOkGEyG7.js.map +1 -0
  229. package/dist/admin/assets/useMediaUploader-D1ouV8jc.js +2 -0
  230. package/dist/admin/assets/useMediaUploader-D1ouV8jc.js.map +1 -0
  231. package/dist/admin/assets/{usePaletteItems-62-TZhy7.js → usePaletteItems-neKzBlys.js} +2 -2
  232. package/dist/admin/assets/{usePaletteItems-62-TZhy7.js.map → usePaletteItems-neKzBlys.js.map} +1 -1
  233. package/dist/admin/assets/{usePlaces-CY6f2DmI.js → usePlaces-6iTN15Xy.js} +2 -2
  234. package/dist/admin/assets/{usePlaces-CY6f2DmI.js.map → usePlaces-6iTN15Xy.js.map} +1 -1
  235. package/dist/admin/assets/{useQueries-BuKJBA0M.js → useQueries-CYfcxI0Q.js} +2 -2
  236. package/dist/admin/assets/{useQueries-BuKJBA0M.js.map → useQueries-CYfcxI0Q.js.map} +1 -1
  237. package/dist/admin/assets/useResolvedScheme-D0moXjaP.js +2 -0
  238. package/dist/admin/assets/{searchSchema-CvOhn4FV.js.map → useResolvedScheme-D0moXjaP.js.map} +1 -1
  239. package/dist/admin/assets/useSchemaScopeAccess-WQKmj8_3.js +2 -0
  240. package/dist/admin/assets/useSchemaScopeAccess-WQKmj8_3.js.map +1 -0
  241. package/dist/admin/assets/{users-BOn2ohJQ.js → users-B01EH47o.js} +2 -2
  242. package/dist/admin/assets/{users-BOn2ohJQ.js.map → users-B01EH47o.js.map} +1 -1
  243. package/dist/admin/assets/{users-BkKc4MNB.js → users-BgTNDPXx.js} +2 -2
  244. package/dist/admin/assets/{users-BkKc4MNB.js.map → users-BgTNDPXx.js.map} +1 -1
  245. package/dist/admin/assets/{zod-BHAd1wTC.js → zod-CS0EvbwG.js} +2 -2
  246. package/dist/admin/assets/{zod-BHAd1wTC.js.map → zod-CS0EvbwG.js.map} +1 -1
  247. package/dist/admin/favicon-32.png +0 -0
  248. package/dist/admin/favicon.svg +2 -2
  249. package/dist/admin/index.html +60 -56
  250. package/dist/admin/theme-init.js +44 -10
  251. package/dist/cli.js +48 -14
  252. package/dist/cli.js.map +1 -1
  253. package/dist/config.d.ts +2 -2
  254. package/dist/config.js.map +1 -1
  255. package/dist/index.d.ts +11 -224
  256. package/dist/index.js +1 -1
  257. package/dist/{public-CGO8RBn3.d.ts → public-BSbOGbK-.d.ts} +268 -6
  258. package/dist/{worker-BLXy8aRW.js → worker-i1rY2TIZ.js} +2416 -668
  259. package/dist/worker-i1rY2TIZ.js.map +1 -0
  260. package/package.json +5 -5
  261. package/dist/admin/assets/Body-BXa9DhtH.js +0 -2
  262. package/dist/admin/assets/Builder-DcpRfXuc.js +0 -2
  263. package/dist/admin/assets/Builder-DcpRfXuc.js.map +0 -1
  264. package/dist/admin/assets/Form-DZRLD3vH.js +0 -2
  265. package/dist/admin/assets/InsertMenuItem-D976G0Rj.js +0 -2
  266. package/dist/admin/assets/InsertMenuItem-D976G0Rj.js.map +0 -1
  267. package/dist/admin/assets/RadioTile-BpB79rIK.js.map +0 -1
  268. package/dist/admin/assets/RichTextField-BuHCONPu.js +0 -144
  269. package/dist/admin/assets/Structure-CqRa2t7z.js +0 -2
  270. package/dist/admin/assets/Thumbnail-CP5mfgNY.js +0 -2
  271. package/dist/admin/assets/Thumbnail-CP5mfgNY.js.map +0 -1
  272. package/dist/admin/assets/arrow-up-gf_j6SVQ.js +0 -2
  273. package/dist/admin/assets/arrow-up-gf_j6SVQ.js.map +0 -1
  274. package/dist/admin/assets/chevron-left-BsQYDUEC.js +0 -2
  275. package/dist/admin/assets/circle-x-Dx6zIZko.js +0 -2
  276. package/dist/admin/assets/circle-x-Dx6zIZko.js.map +0 -1
  277. package/dist/admin/assets/cn-BQ3voEft.js +0 -2
  278. package/dist/admin/assets/cn-BQ3voEft.js.map +0 -1
  279. package/dist/admin/assets/coerce-OsqQRj19.js +0 -2
  280. package/dist/admin/assets/constants-SrImR6C3.js +0 -2
  281. package/dist/admin/assets/content-_SLbbnfX.js +0 -3
  282. package/dist/admin/assets/content-_SLbbnfX.js.map +0 -1
  283. package/dist/admin/assets/develop-DS9TlDmv.js +0 -11
  284. package/dist/admin/assets/develop-DS9TlDmv.js.map +0 -1
  285. package/dist/admin/assets/dropdown-menu-gmP2Rp3n.js +0 -2
  286. package/dist/admin/assets/dropdown-menu-gmP2Rp3n.js.map +0 -1
  287. package/dist/admin/assets/external-link-D3Aoi2yX.js +0 -2
  288. package/dist/admin/assets/external-link-D3Aoi2yX.js.map +0 -1
  289. package/dist/admin/assets/file-text-DxXAmmxL.js.map +0 -1
  290. package/dist/admin/assets/followPlural-CN6cQfNk.js +0 -2
  291. package/dist/admin/assets/index-BLYOgCKc.css +0 -2
  292. package/dist/admin/assets/index-BSzXA60W.js +0 -4
  293. package/dist/admin/assets/index-BSzXA60W.js.map +0 -1
  294. package/dist/admin/assets/link-2-off-hWGS8LW6.js +0 -2
  295. package/dist/admin/assets/link-2-off-hWGS8LW6.js.map +0 -1
  296. package/dist/admin/assets/list-DRtRdjBC.js +0 -2
  297. package/dist/admin/assets/list-DRtRdjBC.js.map +0 -1
  298. package/dist/admin/assets/media-WLnWaL7U.js +0 -2
  299. package/dist/admin/assets/network-DHGqLwji.js +0 -2
  300. package/dist/admin/assets/network-DHGqLwji.js.map +0 -1
  301. package/dist/admin/assets/publishing-d9yhMwgA.js +0 -2
  302. package/dist/admin/assets/search-_YlNpPvU.js +0 -2
  303. package/dist/admin/assets/search-_YlNpPvU.js.map +0 -1
  304. package/dist/admin/assets/searchSchema-CvOhn4FV.js +0 -2
  305. package/dist/admin/assets/sections-DiySZZHb.js +0 -2
  306. package/dist/admin/assets/sections-DiySZZHb.js.map +0 -1
  307. package/dist/admin/assets/settings-D-v8gL8F.js +0 -2
  308. package/dist/admin/assets/settings-D-v8gL8F.js.map +0 -1
  309. package/dist/admin/assets/skeleton-C3QLIh7W.js +0 -42
  310. package/dist/admin/assets/skeleton-C3QLIh7W.js.map +0 -1
  311. package/dist/admin/assets/snapshots-BQrhsCmC.js +0 -2
  312. package/dist/admin/assets/src-XaU0N8C-.js +0 -4
  313. package/dist/admin/assets/src-XaU0N8C-.js.map +0 -1
  314. package/dist/admin/assets/table-CZYtdoHn.js +0 -56
  315. package/dist/admin/assets/table-CZYtdoHn.js.map +0 -1
  316. package/dist/admin/assets/tabs-quHbeVxA.js +0 -5
  317. package/dist/admin/assets/tabs-quHbeVxA.js.map +0 -1
  318. package/dist/admin/assets/useContentSchema-Bv4_6VJR.js +0 -2
  319. package/dist/admin/assets/useMediaUploader-QXSjZStv.js +0 -2
  320. package/dist/admin/assets/useMediaUploader-QXSjZStv.js.map +0 -1
  321. package/dist/admin/assets/useSchemaScopeAccess-DUBeS9kU.js +0 -2
  322. package/dist/admin/assets/useSchemaScopeAccess-DUBeS9kU.js.map +0 -1
  323. package/dist/worker-BLXy8aRW.js.map +0 -1
@@ -1,2 +0,0 @@
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{P as r,bt as i,i as a,j as o,r as s,t as c}from"./cn-BQ3voEft.js";import{C as l,T as u,g as d,u as f,x as p}from"./auth-pcS9CCXu.js";import{_ as m,a as h,i as g,j as ee,n as _,o as v,r as te,t as ne,v as re}from"./badge-DD0mE96i.js";import{n as ie}from"./Match-DdxTHHM4.js";import{i as ae,n as y,o as b,t as oe}from"./RowTitle--uFCpx8n.js";import{t as x}from"./fileRoute-C2tOrKhO.js";import{t as se}from"./UnsavedChangesGuard-DgOASh0p.js";import{a as ce,i as le,n as ue,r as de,t as fe}from"./FormCheckboxGroup-uIC2XQIL.js";import{B as pe,G as S,R as me,d as he,f as ge,o as C,p as _e,t as ve,u as ye}from"./InfoHint-GJLRVumb.js";import{D as be,i as w,n as xe}from"./skeleton-C3QLIh7W.js";import{t as Se}from"./calendar-clock-DEwACe0M.js";import{a as Ce,i as we,n as Te,r as Ee,s as De,t as Oe}from"./select-tHVWX85X.js";import{t as ke}from"./CursorPager-BnxmTk47.js";import{a as T,c as Ae,i as E,n as je,o as D,r as O,s as Me}from"./ConfirmDialog-B9nWhIIz.js";import{t as Ne}from"./circle-check-Dq1owihe.js";import{t as Pe}from"./circle-x-Dx6zIZko.js";import{t as Fe}from"./inbox-3iAHL3pC.js";import{t as Ie}from"./key-round-B17HiT3K.js";import{t as Le}from"./plus-BN_iSsnp.js";import{C as Re,D as ze,E as Be,O as k,S as Ve,T as He,_ as Ue,a as We,b as Ge,c as Ke,d as qe,f as A,g as Je,h as Ye,i as Xe,l as Ze,m as Qe,n as $e,o as et,p as tt,r as nt,s as rt,t as it,u as at,v as ot,w as st,x as ct,y as lt}from"./useCursorPager-B1upg5EU.js";import{t as ut}from"./rotate-ccw-CBoZle-b.js";import{t as dt}from"./send-BqECHYi6.js";import{n as ft,r as pt}from"./sections-Bb3Q4bcY.js";import{c as mt,f as ht,n as j,o as gt,r as _t,t as M,u as N}from"./zod-BHAd1wTC.js";import{n as vt,t as P}from"./settle-LRKtTN_e.js";import{_ as F,a as I,d as yt,g as L,i as R,l as z,n as B,o as V,r as H,s as bt,t as U,u as xt,y as St}from"./table-CZYtdoHn.js";import{t as Ct}from"./HintedLabel-CvC46uy_.js";import{t as wt}from"./TextLink-D15oyXlc.js";import{t as Tt}from"./sites-C6_THCVK.js";import{s as Et}from"./schema-B4smPFcR.js";import{t as W}from"./QueryView-D6aZQJRN.js";import{t as Dt}from"./FormRadioGroup-hd95vPOu.js";import{r as Ot}from"./locales-BzPbz8FF.js";import{t as G}from"./Panel-iIKjEURi.js";import{n as kt}from"./publishing-B7zv1e7j.js";import{n as At,r as jt,t as Mt}from"./schedules-Dy89Nm6P.js";import{n as Nt,r as Pt,t as Ft}from"./dateTimeLocal-C92tyKwz.js";import{t as It}from"./ExternalLink-Eeb9mONJ.js";import{t as Lt}from"./CopyButton-BoWb-xi1.js";import{t as K}from"./FormSwitchField-ft8Jbe6E.js";import{n as Rt,t as q}from"./FormSelectField-D7VHmnx5.js";import{a as zt,t as Bt}from"./SecretReveal-DFpzeNE0.js";import{t as Vt}from"./LinkTabs-BZSlA57U.js";var Ht={name:`calendar-plus`,size:24,node:[[`path`,{d:`M16 18h6`,key:`987eiv`}],[`path`,{d:`M16 2v3`,key:`otl347`}],[`path`,{d:`M19 15v6`,key:`10aioa`}],[`path`,{d:`M21 11.5V5a2 2 0 00-2-2H5a2 2 0 00-2 2v14a2 2 0 002 2h8.3`,key:`jgwkxf`}],[`path`,{d:`M3 9h18`,key:`1pudct`}],[`path`,{d:`M8 2v3`,key:`1ioesn`}]]};Ht.node;var Ut=a(Ht),Wt={name:`plug-zap`,size:24,node:[[`path`,{d:`M6.3 20.3a2.4 2.4 0 0 0 3.4 0L12 18l-6-6-2.3 2.3a2.4 2.4 0 0 0 0 3.4Z`,key:`goz73y`}],[`path`,{d:`m2 22 3-3`,key:`19mgm9`}],[`path`,{d:`M7.5 13.5 10 11`,key:`7xgeeb`}],[`path`,{d:`M10.5 16.5 13 14`,key:`10btkg`}],[`path`,{d:`m18 3-4 4h6l-4 4`,key:`16psg9`}]],aliases:[`plug-zap-2`]};Wt.node;var Gt=a(Wt),Kt={name:`power`,size:24,node:[[`path`,{d:`M12 2v10`,key:`mnfbl`}],[`path`,{d:`M18.4 6.6a9 9 0 1 1-12.77.04`,key:`obofu9`}]]};Kt.node;var qt=a(Kt),J=e(n(),1),Jt=()=>(0,J.jsx)(ie,{}),Y=e(t(),1),X=()=>{let e=f().data?.globalPermissions??[];return{permissions:e,canManageWebhooks:e.includes(`webhooks.manage`),canManageDeployments:e.includes(`deployments.manage`),canTriggerDeployments:e.includes(`deployments.trigger`),canManagePublishing:e.includes(`publishing.manage`)}},Yt=({actions:e})=>{let{t}=o(),{permissions:n}=X();return(0,J.jsx)(g,{title:t(`nav.publishing`),actions:e,tabs:(0,J.jsx)(Vt,{label:t(`publishing.sections`),tabs:ft(n).map(e=>({to:e.to,label:t(e.labelKey)}))})})},Xt=e=>{let[t,n]=(0,Y.useState)(void 0),[r,i]=(0,Y.useState)(void 0),a=(0,Y.useEffectEvent)(t=>e(t));return(0,Y.useEffect)(()=>{r&&a(r)},[r]),{revealed:t,reveal:n,dismiss:()=>{i(t?.id),n(void 0)},keepFocusOnReveal:e=>{t&&e.preventDefault()}}},Zt=({items:e,className:t})=>(0,J.jsx)(`dl`,{className:c(`grid gap-x-6 gap-y-3 text-sm sm:grid-cols-2`,t),children:e.map(e=>(0,J.jsxs)(`div`,{className:`min-w-0 space-y-0.5`,children:[(0,J.jsx)(`dt`,{className:`text-xs font-medium text-muted-foreground`,children:e.label}),(0,J.jsx)(`dd`,{className:`break-words`,children:e.value})]},e.label))}),Z=({enabled:e})=>{let{t}=o();return e?(0,J.jsx)(_,{tone:`success`,label:t(`publishing.enabled`)}):(0,J.jsx)(_,{tone:`muted`,label:t(`publishing.disabled`)})},Qt=e=>{let{t}=o(),n=u(),r=st(),i=He(),a=ot();return{testResult:r.data,testing:r.isPending,triggering:i.isPending,deleting:a.isPending,runTest:()=>r.mutate(e.id),triggerRun:()=>i.mutate(e.id,{onSuccess:e=>{S.success(t(`publishing.deployments.triggered`)),n({to:`/publishing/deployments/runs/$runId`,params:{runId:e.id}})}}),remove:()=>a.mutateAsync(e.id,{onSuccess:()=>{S.success(t(`publishing.deployments.deleted`,{name:e.name})),n({to:`/publishing/deployments`})}})}},$t={scheduled:{labelKey:`publishing.scheduled.statuses.scheduled`,tone:`scheduled`},done:{labelKey:`publishing.scheduled.statuses.done`,tone:`success`},failed:{labelKey:`publishing.scheduled.statuses.failed`,tone:`danger`},cancelled:{labelKey:`publishing.scheduled.statuses.cancelled`,tone:`muted`}},en={pending:{labelKey:`publishing.webhooks.deliveryStatuses.pending`,tone:`progress`},retrying:{labelKey:`publishing.webhooks.deliveryStatuses.retrying`,tone:`progress`},succeeded:{labelKey:`publishing.webhooks.deliveryStatuses.succeeded`,tone:`success`},dead:{labelKey:`publishing.webhooks.deliveryStatuses.dead`,tone:`danger`}},Q={queued:{labelKey:`publishing.deployments.statuses.queued`,tone:`neutral`},triggered:{labelKey:`publishing.deployments.statuses.triggered`,tone:`progress`},triggeredUnknown:{labelKey:`publishing.deployments.statuses.triggeredUnknown`,tone:`muted`},building:{labelKey:`publishing.deployments.statuses.building`,tone:`progress`},deployed:{labelKey:`publishing.deployments.statuses.deployed`,tone:`success`},committed:{labelKey:`publishing.deployments.statuses.committed`,tone:`success`},failed:{labelKey:`publishing.deployments.statuses.failed`,tone:`danger`},unknown:{labelKey:`publishing.deployments.statuses.unknown`,tone:`muted`}},tn=e=>{switch(e.status){case`triggered`:return e.completionReported?Q.triggered:Q.triggeredUnknown;case`deployed`:return e.provider===`github`?Q.committed:Q.deployed;default:return Q[e.status]}},nn=({run:e,live:t=!0})=>{let{t:n}=o(),r=tn(e);return(0,J.jsx)(_,{tone:r.tone,label:n(r.labelKey),live:t})},rn=({connection:e})=>{let{t}=o(),{canTriggerDeployments:n}=X(),r=Qt(e);return(0,J.jsxs)(G,{title:e.name,titleAs:`h3`,description:t(A[e.provider]),actions:(0,J.jsx)(Z,{enabled:e.enabled}),bodyClassName:`space-y-4`,children:[(0,J.jsx)(Zt,{items:[{label:t(`publishing.deployments.latestRun`),value:e.latestRun?(0,J.jsx)(nn,{run:e.latestRun}):t(`common.never`)},{label:t(`publishing.deployments.currentSnapshot`),value:e.currentRun?.snapshot==null?t(`common.none`):t(`publishing.snapshotNumber`,{snapshot:e.currentRun.snapshot})}],className:`grid-cols-2`}),(0,J.jsxs)(`div`,{className:`flex flex-wrap justify-end gap-2`,children:[(0,J.jsx)(w,{asChild:!0,variant:`outline`,size:`sm`,children:(0,J.jsx)(p,{to:`/publishing/deployments/$connectionId`,params:{connectionId:e.id},children:t(`publishing.deployments.open`)})}),n?(0,J.jsxs)(w,{size:`sm`,disabled:r.triggering||!e.enabled,onClick:r.triggerRun,children:[(0,J.jsx)(k,{"aria-hidden":`true`}),t(`publishing.deployments.triggerRun`)]}):null]})]})},an=[`commit`,`pull_request`],on=`none`,sn=[`url`,`accountId`,`projectName`,`projectId`,`teamId`,`siteId`,`owner`,`repo`,`branch`,`mode`,`directory`],cn=[`signingSecret`,`deployHookUrl`,`apiToken`,`token`],ln=new Set([`teamId`]),$={generic_webhook:{settings:[`url`],secrets:[{name:`signingSecret`,requiredOnCreate:!1}]},cloudflare_pages:{settings:[`accountId`,`projectName`],secrets:[{name:`deployHookUrl`,requiredOnCreate:!0},{name:`apiToken`,requiredOnCreate:!0}]},vercel:{settings:[`projectId`,`teamId`],secrets:[{name:`deployHookUrl`,requiredOnCreate:!0},{name:`apiToken`,requiredOnCreate:!0}]},netlify:{settings:[`siteId`],secrets:[{name:`apiToken`,requiredOnCreate:!0}]},github:{settings:[`owner`,`repo`,`branch`,`directory`],secrets:[{name:`token`,requiredOnCreate:!0}]}},un=e=>e===`github`?[...$.github.settings,`mode`]:$[e].settings,dn=e=>de.filter(t=>t!==`schema`||e===`github`),fn=e=>/^\d+$/.test(e)&&Number(e)<=86400,pn=e=>St({protocol:/^https?$/}).safeParse(e).success,mn=Object.fromEntries(sn.map(e=>[e,F()])),hn=Object.fromEntries(cn.map(e=>[e,F()])),gn=e=>L({name:gt().max(200,`validation.tooLong`),provider:z(ue),settings:L(mn),secrets:L(hn),previewUrlTemplate:F().trim().max(2e3,`validation.tooLong`),triggerPolicy:xt(z(de)),debounceSeconds:F().trim().refine(fn,`validation.debounceSeconds`),allowPrivateNetwork:yt(),enabled:yt(),deliveryRoleId:F()}).superRefine((t,n)=>{let r=$[t.provider];for(let e of r.settings)!ln.has(e)&&t.settings[e].trim()===``&&n.addIssue({code:`custom`,path:[`settings`,e],message:`validation.required`});if(t.provider===`generic_webhook`&&t.settings.url.trim()&&!pn(t.settings.url.trim())&&n.addIssue({code:`custom`,path:[`settings`,`url`],message:`validation.url`}),e===`create`)for(let e of r.secrets)e.requiredOnCreate&&t.secrets[e.name].trim()===``&&n.addIssue({code:`custom`,path:[`secrets`,e.name],message:`validation.required`});t.previewUrlTemplate&&!pn(t.previewUrlTemplate)&&n.addIssue({code:`custom`,path:[`previewUrlTemplate`],message:`validation.url`})}),_n=e=>Object.fromEntries(e.map(e=>[e,``])),vn={name:``,provider:`generic_webhook`,settings:{..._n(sn),branch:`main`,mode:`commit`,directory:`schema`},secrets:_n(cn),previewUrlTemplate:``,triggerPolicy:[`publish`,`change_set`,`manual`],debounceSeconds:`30`,allowPrivateNetwork:!1,enabled:!0,deliveryRoleId:on},yn=e=>({name:e.name,provider:e.provider,settings:{...vn.settings,...Object.fromEntries(sn.flatMap(t=>e.settings[t]?[[t,e.settings[t]]]:[]))},secrets:_n(cn),previewUrlTemplate:e.previewUrlTemplate??``,triggerPolicy:e.triggerPolicy,debounceSeconds:String(e.debounceSeconds),allowPrivateNetwork:e.allowPrivateNetwork,enabled:e.enabled,deliveryRoleId:e.deliveryRoleId??`none`}),bn=e=>{let t=Object.fromEntries($[e.provider].secrets.flatMap(({name:t})=>e.secrets[t].trim()?[[t,e.secrets[t].trim()]]:[]));return{name:e.name.trim(),settings:Object.fromEntries(un(e.provider).map(t=>[t,e.settings[t].trim()])),secrets:t,previewUrlTemplate:e.previewUrlTemplate.trim()||null,triggerPolicy:e.triggerPolicy.filter(t=>dn(e.provider).includes(t)),debounceSeconds:Number(e.debounceSeconds),allowPrivateNetwork:e.allowPrivateNetwork,enabled:e.enabled,deliveryRoleId:e.deliveryRoleId===`none`?null:e.deliveryRoleId}},xn=e=>({...bn(e),provider:e.provider}),Sn=(e,t)=>{let{secrets:n,...r}=bn(e);return{...r,...Object.keys(n).length>0?{secrets:n}:{},expectedVersion:t}},Cn=()=>{let{t:e}=o(),t=zt().data;return(0,Y.useMemo)(()=>[{value:on,label:e(`publishing.deployments.deliveryRoleNone`)},...(t??[]).filter(e=>e.kind===`delivery`).map(e=>({value:e.id,label:e.name}))],[t,e])},wn={url:`publishing.deployments.settingLabels.url`,accountId:`publishing.deployments.settingLabels.accountId`,projectName:`publishing.deployments.settingLabels.projectName`,projectId:`publishing.deployments.settingLabels.projectId`,teamId:`publishing.deployments.settingLabels.teamId`,siteId:`publishing.deployments.settingLabels.siteId`,owner:`publishing.deployments.settingLabels.owner`,repo:`publishing.deployments.settingLabels.repo`,branch:`publishing.deployments.settingLabels.branch`,mode:`publishing.deployments.settingLabels.mode`,directory:`publishing.deployments.settingLabels.directory`},Tn={url:`publishing.deployments.settingHints.url`,directory:`publishing.deployments.settingHints.directory`,teamId:`publishing.deployments.settingHints.teamId`},En={signingSecret:`publishing.deployments.secretLabels.signingSecret`,deployHookUrl:`publishing.deployments.secretLabels.deployHookUrl`,apiToken:`publishing.deployments.secretLabels.apiToken`,token:`publishing.deployments.secretLabels.token`},Dn={signingSecret:`publishing.deployments.secretHints.signingSecret`,deployHookUrl:`publishing.deployments.secretHints.deployHookUrl`,apiToken:`publishing.deployments.secretHints.apiToken`,token:`publishing.deployments.secretHints.token`},On={netlify:{apiToken:`publishing.deployments.providerSecretHints.netlify.apiToken`}},kn=(e,t)=>On[e]?.[t]??Dn[t],An={commit:`publishing.deployments.githubModes.commit`,pull_request:`publishing.deployments.githubModes.pull_request`},jn=({control:e,name:t,label:n,hint:r,stored:i,envVar:a})=>{let{t:s}=o(),{field:c,fieldState:l}=mt({control:e,name:`secrets.${t}`}),[u,d]=(0,Y.useState)(!1),f=`field-secrets-${t}`,p=`${f}-hint`,m=l.error?`${f}-error`:void 0,h=`${r} ${s(`publishing.deployments.secretEnvHint`)}`;return i&&!u?(0,J.jsxs)(C,{children:[(0,J.jsx)(Ct,{htmlFor:`${f}-replace`,label:n,hint:h,hintId:p}),(0,J.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,J.jsx)(_,{tone:`success`,label:a?s(`publishing.deployments.secretFromEnv`,{name:a}):s(`publishing.deployments.secretStored`)}),(0,J.jsx)(w,{id:`${f}-replace`,type:`button`,variant:`outline`,size:`sm`,"aria-describedby":p,onClick:()=>d(!0),children:s(`publishing.deployments.replaceSecret`)})]})]}):(0,J.jsxs)(C,{"data-invalid":l.invalid||void 0,children:[(0,J.jsx)(Ct,{htmlFor:f,label:n,hint:h,hintId:p}),(0,J.jsxs)(`div`,{className:`flex gap-2`,children:[(0,J.jsx)(xe,{...c,id:f,type:`password`,autoComplete:`new-password`,spellCheck:!1,autoFocus:u,"aria-invalid":l.invalid||void 0,"aria-describedby":vt(p,m),className:`font-mono text-sm`}),i?(0,J.jsx)(w,{type:`button`,variant:`ghost`,onClick:()=>{c.onChange(``),d(!1)},children:s(`publishing.deployments.keepSecret`)}):null]}),(0,J.jsx)(_t,{id:m,message:l.error?.message})]})},Mn=({control:e,storedSecrets:t})=>{let{t:n}=o(),r=ht({control:e,name:`provider`}),i=$[r];return(0,J.jsxs)(J.Fragment,{children:[i.settings.map(t=>(0,J.jsx)(j,{control:e,name:`settings.${t}`,label:n(wn[t]),hint:t in Tn?n(Tn[t]):void 0,type:t===`url`?`url`:`text`,autoComplete:`off`,spellCheck:!1},t)),r===`github`?(0,J.jsx)(q,{control:e,name:`settings.mode`,label:n(wn.mode),options:an.map(e=>({value:e,label:n(An[e])}))}):null,i.secrets.map(i=>(0,J.jsx)(jn,{control:e,name:i.name,label:n(En[i.name]),hint:n(kn(r,i.name)),stored:t?.[i.name]?.set??!1,envVar:t?.[i.name]?.envVar??null},`${r}-${i.name}`))]})},Nn=({control:e,mode:t,storedSecrets:n})=>{let{t:r}=o(),i=ht({control:e,name:`provider`}),a=Cn();return(0,J.jsxs)(J.Fragment,{children:[(0,J.jsx)(j,{control:e,name:`name`,label:r(`publishing.deployments.name`),autoComplete:`off`}),t===`create`?(0,J.jsx)(q,{control:e,name:`provider`,label:r(`publishing.deployments.provider`),options:ue.map(e=>({value:e,label:r(A[e])}))}):null,(0,J.jsx)(Mn,{control:e,storedSecrets:n}),(0,J.jsx)(j,{control:e,name:`previewUrlTemplate`,label:r(`publishing.deployments.previewUrlTemplate`),hint:r(`publishing.deployments.previewUrlTemplateHint`),placeholder:r(`publishing.deployments.previewUrlTemplatePlaceholder`),autoComplete:`off`,spellCheck:!1}),(0,J.jsx)(q,{control:e,name:`deliveryRoleId`,label:r(`publishing.deployments.deliveryRole`),hint:r(`publishing.deployments.deliveryRoleHint`),options:a}),(0,J.jsx)(fe,{control:e,name:`triggerPolicy`,legend:r(`publishing.deployments.triggerPolicy`),options:dn(i).map(e=>({value:e,label:r(Je[e])}))}),(0,J.jsx)(j,{control:e,name:`debounceSeconds`,type:`number`,inputMode:`numeric`,min:0,label:r(`publishing.deployments.debounceSeconds`),hint:r(`publishing.deployments.debounceSecondsHint`),className:`w-32`}),(0,J.jsx)(K,{control:e,name:`enabled`,label:r(`publishing.deployments.enabled`)}),(0,J.jsx)(K,{control:e,name:`allowPrivateNetwork`,label:r(`publishing.fields.allowPrivateNetwork`),hint:r(`publishing.fields.allowPrivateNetworkHint`)})]})},Pn=gn(`create`),Fn=(e,t)=>{let n=Ue(),r=N({resolver:M(Pn),defaultValues:vn});return ze(e,r.reset,vn,n.reset),{form:r,onSubmit:r.handleSubmit(async e=>{let i=await P(n.mutateAsync(xn(e)));i.ok&&(r.reset(vn),t(i.value))}),createConnection:n}},In=({open:e,onOpenChange:t,onCloseAutoFocus:n,onCreated:r})=>{let{t:i}=o(),{form:a,onSubmit:s,createConnection:c}=Fn(e,r);return(0,J.jsxs)(Rt,{open:e,onOpenChange:t,size:`md`,onCloseAutoFocus:n,title:i(`publishing.deployments.createTitle`),dirty:a.formState.isDirty,pending:c.isPending,submitLabel:i(`common.create`),pendingLabel:i(`common.saving`),onSubmit:e=>void s(e),children:[(0,J.jsx)(Nn,{control:a.control,mode:`create`}),(0,J.jsx)(E,{error:c.error})]})},Ln=({runs:e,showConnection:t})=>{let{t:n}=o();return(0,J.jsxs)(U,{children:[(0,J.jsx)(I,{children:(0,J.jsxs)(V,{children:[(0,J.jsx)(R,{children:n(`publishing.deployments.run`)}),(0,J.jsx)(R,{children:n(`publishing.fields.status`)}),t?(0,J.jsx)(R,{children:n(`publishing.deployments.connection`)}):null,(0,J.jsx)(R,{children:n(`publishing.deployments.trigger`)}),(0,J.jsx)(R,{children:n(`publishing.fields.snapshot`)}),(0,J.jsx)(R,{children:n(`publishing.deployments.finishedAt`)})]})}),(0,J.jsx)(B,{children:e.map(e=>(0,J.jsxs)(V,{children:[(0,J.jsx)(H,{className:`whitespace-nowrap`,children:(0,J.jsx)(oe,{asChild:!0,children:(0,J.jsx)(p,{to:`/publishing/deployments/runs/$runId`,params:{runId:e.id},"aria-label":n(`publishing.deployments.openRun`,{connection:e.connectionName,at:y(e.createdAt)}),children:y(e.createdAt)})})}),(0,J.jsx)(H,{children:(0,J.jsx)(nn,{run:e})}),t?(0,J.jsx)(H,{className:`max-w-56 truncate`,children:e.connectionName}):null,(0,J.jsx)(H,{children:n(Qe[e.trigger])}),(0,J.jsx)(H,{className:`tabular-nums`,children:e.snapshot===null?n(`common.none`):n(`publishing.snapshotNumber`,{snapshot:e.snapshot})}),(0,J.jsx)(H,{className:`whitespace-nowrap`,title:y(e.finishedAt),children:e.finishedAt?ae(e.finishedAt):n(`common.none`)})]},e.id))})]})},Rn=({connectionId:e,cursor:t,onCursorChange:n})=>{let{t:r}=o(),{pagerProps:i}=it(t,n),a=Ve({connectionId:e,cursor:t,limit:25});return(0,J.jsx)(W,{query:a,isEmpty:e=>e.items.length===0&&t===void 0,empty:(0,J.jsx)(v,{icon:k,size:`panel`,title:r(`publishing.deployments.noRuns`)}),children:t=>(0,J.jsxs)(J.Fragment,{children:[(0,J.jsx)(Ln,{runs:t.items,showConnection:e===void 0}),(0,J.jsx)(ke,{...i(t.nextCursor),className:`border-t px-4 py-2.5`})]})})},zn=()=>{let{t:e}=o(),t=u({from:`/publishing/deployments`}),{cursor:n}=b({from:`/app/publishing/deployments`}),{canManageDeployments:r}=X(),i=Ge(),[a,s]=(0,Y.useState)(!1),c=e=>void t({to:`/publishing/deployments/$connectionId`,params:{connectionId:e}}),l=Xt(c);return(0,J.jsxs)(h,{children:[(0,J.jsx)(Yt,{actions:r?(0,J.jsxs)(w,{onClick:()=>s(!0),children:[(0,J.jsx)(Le,{"aria-hidden":`true`}),e(`publishing.deployments.create`)]}):void 0}),l.revealed?(0,J.jsx)(Bt,{title:e(`publishing.deployments.generatedSecretTitle`),description:e(`publishing.deployments.generatedSecretDescription`),label:e(`publishing.deployments.secretLabels.signingSecret`),secret:l.revealed.secret,dismissLabel:e(`publishing.secretDone`),onDismiss:l.dismiss}):null,r?(0,J.jsxs)(`section`,{"aria-labelledby":`deployment-connections`,className:`space-y-3`,children:[(0,J.jsx)(`h2`,{id:`deployment-connections`,className:`text-base font-semibold`,children:e(`publishing.deployments.connections`)}),(0,J.jsx)(W,{query:i,isEmpty:e=>e.length===0,empty:(0,J.jsx)(v,{icon:k,title:e(`publishing.deployments.empty`)}),children:e=>(0,J.jsx)(`ul`,{className:`grid gap-4 md:grid-cols-2 xl:grid-cols-3`,children:e.map(e=>(0,J.jsx)(`li`,{className:`grid`,children:(0,J.jsx)(rn,{connection:e})},e.id))})})]}):null,(0,J.jsx)(G,{title:e(`publishing.deployments.recentRuns`),flush:!0,children:(0,J.jsx)(Rn,{connectionId:void 0,cursor:n,onCursorChange:e=>void t({search:{cursor:e}})})}),(0,J.jsx)(In,{open:a,onOpenChange:s,onCloseAutoFocus:l.keepFocusOnReveal,onCreated:({connection:e,generatedSecrets:t})=>{s(!1);let n=t.signingSecret;n?l.reveal({id:e.id,secret:n}):c(e.id)}})]})},Bn=e=>{let t=i(),[n,r]=(0,Y.useState)(!1);return{conflicted:n,clearConflict:()=>r(!1),onSaveError:n=>{d(n)&&(r(!0),t.invalidateQueries({queryKey:e}))}}},Vn=({value:e,label:t,className:n})=>(0,J.jsx)(`pre`,{tabIndex:0,"aria-label":t,className:c(`max-h-72 overflow-auto rounded-md border bg-muted p-3 font-mono text-xs break-all whitespace-pre-wrap text-foreground outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50`,n),children:typeof e==`string`?e:JSON.stringify(e??null,null,2)}),Hn=[{name:`X-Shapio-Signature`,valueKey:`publishing.webhooks.signatureFormat`},{name:`X-Shapio-Timestamp`,valueKey:`publishing.webhooks.timestampFormat`},{name:`X-Shapio-Event`,valueKey:`publishing.webhooks.eventFormat`},{name:`X-Shapio-Delivery`,valueKey:`publishing.webhooks.deliveryFormat`}],Un=({description:e})=>{let{t}=o();return(0,J.jsxs)(`div`,{className:`space-y-2`,children:[(0,J.jsx)(`p`,{className:`text-meta text-muted-foreground`,children:e}),(0,J.jsx)(`dl`,{className:`space-y-1 rounded-lg border bg-muted p-3 font-mono text-xs break-all`,children:Hn.map(e=>(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`dt`,{className:`inline font-semibold`,children:e.name}),(0,J.jsx)(`dd`,{className:`inline before:content-[':_']`,children:t(e.valueKey)})]},e.name))})]})},Wn={runId:`0b8f3c1e-…`,status:`deployed`,logUrl:`https://ci.example.com/builds/123`,siteUrl:`https://www.example.com`,message:`Build 123`},Gn=({callbackUrl:e})=>{let{t}=o();return(0,J.jsxs)(`div`,{className:`space-y-5`,children:[(0,J.jsxs)(C,{children:[(0,J.jsx)(he,{htmlFor:`deployment-callback-url`,children:t(`publishing.deployments.callbackUrl`)}),(0,J.jsxs)(`div`,{className:`flex gap-2`,children:[(0,J.jsx)(xe,{id:`deployment-callback-url`,readOnly:!0,value:e,className:`font-mono text-xs`,onFocus:e=>e.currentTarget.select()}),(0,J.jsx)(Lt,{value:e})]})]}),(0,J.jsxs)(`div`,{className:`grid gap-5 lg:grid-cols-2`,children:[(0,J.jsxs)(`div`,{className:`min-w-0 space-y-2`,children:[(0,J.jsx)(`p`,{className:`text-sm font-semibold`,children:t(`publishing.deployments.callbackBody`)}),(0,J.jsx)(Vn,{value:Wn,label:t(`publishing.deployments.callbackBody`)}),(0,J.jsx)(`p`,{className:`text-meta text-muted-foreground`,children:t(`publishing.deployments.callbackFields`)})]}),(0,J.jsxs)(`div`,{className:`min-w-0 space-y-2`,children:[(0,J.jsx)(`p`,{className:`text-sm font-semibold`,children:t(`publishing.webhooks.signatureTitle`)}),(0,J.jsx)(Un,{description:t(`publishing.deployments.callbackSignature`)})]})]})]})},Kn=gn(`edit`),qn=(e,t,n)=>{let{t:r}=o(),i=Be(),a=N({resolver:M(Kn),defaultValues:yn(e)});return{form:a,onSubmit:a.handleSubmit(async a=>{(await P(i.mutateAsync({id:e.id,input:Sn(a,e.version)},{onError:n}))).ok&&(S.success(r(`publishing.deployments.saved`)),t())}),update:i,error:d(i.error)?void 0:i.error}},Jn=({connection:e,onSaved:t,onConflict:n})=>{let{t:r}=o(),{form:i,onSubmit:a,update:s,error:c}=qn(e,t,n);return(0,J.jsxs)(`form`,{noValidate:!0,onSubmit:e=>void a(e),children:[(0,J.jsx)(se,{when:i.formState.isDirty&&!s.isPending}),(0,J.jsxs)(ye,{children:[(0,J.jsx)(Nn,{control:i.control,mode:`edit`,storedSecrets:e.secrets}),(0,J.jsx)(E,{error:c}),(0,J.jsx)(`div`,{children:(0,J.jsx)(m,{pending:s.isPending,pendingLabel:r(`common.saving`),children:r(`common.saveChanges`)})})]})]})},Yn=({result:e})=>{let{t}=o();return(0,J.jsxs)(T,{variant:e.ok?`success`:`destructive`,children:[e.ok?(0,J.jsx)(Ne,{"aria-hidden":`true`}):(0,J.jsx)(Pe,{"aria-hidden":`true`}),(0,J.jsx)(Me,{children:e.ok?t(`publishing.deployments.testPassed`):t(`publishing.deployments.testFailed`)}),(0,J.jsx)(D,{children:(0,J.jsx)(`ul`,{className:`space-y-1`,children:e.checks.map(e=>(0,J.jsxs)(`li`,{children:[(0,J.jsx)(`span`,{className:`font-medium`,children:e.ok?t(`publishing.deployments.checkPassed`,{name:e.name}):t(`publishing.deployments.checkFailed`,{name:e.name})}),e.message?(0,J.jsx)(`span`,{className:`block`,children:e.message}):null]},e.name))})})]})},Xn=({connection:e})=>{let{t}=o(),{cursor:n}=b({from:`/app/publishing/deployments/$connectionId`}),i=u({from:`/publishing/deployments/$connectionId`}),a=Bn(r.publishing.deployments.connection(e.id)),c=Qt(e),{canTriggerDeployments:d}=X(),f=c.testing||c.triggering||c.deleting,p=e.currentRun?.snapshot,m=[t(A[e.provider]),p==null?``:t(`publishing.deployments.liveSnapshot`,{snapshot:t(`publishing.snapshotNumber`,{snapshot:p})})].filter(Boolean).join(` · `);return(0,J.jsxs)(h,{children:[(0,J.jsx)(g,{breadcrumb:[{label:t(`nav.publishing`)},{label:t(`publishing.nav.deployments`),link:l({to:`/publishing/deployments`})}],title:e.name,badge:(0,J.jsx)(Z,{enabled:e.enabled}),meta:m,actions:(0,J.jsxs)(J.Fragment,{children:[(0,J.jsx)(O,{tone:`danger`,title:t(`publishing.deployments.deleteTitle`,{name:e.name}),description:t(`publishing.deployments.deleteDescription`),confirmLabel:t(`common.delete`),onConfirm:c.remove,trigger:(0,J.jsxs)(w,{variant:`destructive-ghost`,disabled:f,children:[(0,J.jsx)(me,{"aria-hidden":`true`}),t(`common.delete`)]})}),(0,J.jsxs)(w,{variant:`outline`,disabled:f,onClick:c.runTest,children:[c.testing?(0,J.jsx)(s,{"aria-hidden":`true`,className:`animate-spin motion-reduce:animate-none`}):(0,J.jsx)(Gt,{"aria-hidden":`true`}),t(`publishing.deployments.test`)]}),d?(0,J.jsxs)(w,{disabled:f||!e.enabled,onClick:c.triggerRun,children:[(0,J.jsx)(k,{"aria-hidden":`true`}),t(`publishing.deployments.triggerRun`)]}):null]})}),c.testResult?(0,J.jsx)(Yn,{result:c.testResult}):null,(0,J.jsx)(G,{title:t(`publishing.deployments.runs`),flush:!0,children:(0,J.jsx)(Rn,{connectionId:e.id,cursor:n,onCursorChange:e=>void i({search:{cursor:e}})})}),e.provider===`generic_webhook`?(0,J.jsx)(G,{title:t(`publishing.deployments.callbacks`),description:t(`publishing.deployments.callbacksDescription`),children:(0,J.jsx)(Gn,{callbackUrl:e.callbackUrl})}):null,(0,J.jsxs)(G,{title:t(`publishing.deployments.settings`),bodyClassName:`space-y-4`,children:[a.conflicted?(0,J.jsx)(T,{variant:`destructive`,children:(0,J.jsx)(D,{children:t(`publishing.conflictReloaded`)})}):null,(0,J.jsx)(Jn,{connection:e,onSaved:a.clearConflict,onConflict:a.onSaveError},e.version)]})]})},Zn=()=>{let{connectionId:e}=ee({from:`/app/publishing/deployments/$connectionId`}),t=lt(e);return(0,J.jsx)(W,{query:t,loadingRows:6,children:e=>(0,J.jsx)(Xn,{connection:e})})},Qn=e=>{if(e)try{let t=new URL(e);return t.protocol===`https:`||t.protocol===`http:`?t.href:void 0}catch{return}},$n=({run:e})=>{let{t}=o();return e.timeline.length===0?(0,J.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:t(`publishing.deployments.timelineEmpty`)}):(0,J.jsx)(`ol`,{"aria-label":t(`publishing.deployments.timeline`),className:`relative ml-1.5 space-y-4 border-l pl-6`,children:e.timeline.map((n,r)=>(0,J.jsxs)(`li`,{className:`relative`,children:[(0,J.jsx)(`span`,{"aria-hidden":`true`,className:`absolute top-2 -left-7.5 size-2.5 rounded-full border-2 border-card bg-primary`}),(0,J.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,J.jsx)(nn,{run:{status:n.status,provider:e.provider,completionReported:e.completionReported},live:!1}),(0,J.jsx)(`time`,{dateTime:n.at,className:`text-sm`,children:y(n.at)}),(0,J.jsx)(`span`,{className:`text-meta text-muted-foreground`,children:t(`publishing.deployments.reportedBy`,{source:t(Ye[n.source])})})]}),n.message?(0,J.jsx)(`p`,{className:`mt-1 text-sm break-words`,children:n.message}):null]},`${n.at}-${r}`))})},er=({run:e})=>{let{t}=o(),n=u(),{canTriggerDeployments:r}=X(),i=Re(),a=t(`common.none`),s=Qn(e.logUrl),c=Qn(e.siteUrl),d=kt.has(e.status),f=[{label:t(`publishing.deployments.connection`),value:e.connectionName},{label:t(`publishing.deployments.provider`),value:t(A[e.provider])},{label:t(`publishing.deployments.trigger`),value:t(Qe[e.trigger])},{label:t(`publishing.fields.snapshot`),value:e.snapshot===null?a:t(`publishing.snapshotNumber`,{snapshot:e.snapshot})},{label:t(`publishing.deployments.schemaVersion`),value:e.schemaVersion??a},{label:t(`publishing.deployments.providerRef`),value:e.providerRef??a},{label:t(`publishing.deployments.triggeredAt`),value:y(e.triggeredAt)||a},{label:t(`publishing.deployments.finishedAt`),value:y(e.finishedAt)||a},{label:t(`publishing.deployments.logUrl`),value:s?(0,J.jsx)(It,{href:s,children:s}):a},{label:t(`publishing.deployments.siteUrl`),value:c?(0,J.jsx)(It,{href:c,children:c}):a}];return e.retryOf&&f.push({label:t(`publishing.deployments.retryOf`),value:(0,J.jsx)(wt,{to:`/publishing/deployments/runs/$runId`,params:{runId:e.retryOf},children:t(`publishing.deployments.previousRun`)})}),(0,J.jsxs)(h,{children:[(0,J.jsx)(g,{breadcrumb:[{label:t(`nav.publishing`)},{label:t(`publishing.nav.deployments`),link:l({to:`/publishing/deployments`})},{label:e.connectionName,link:l({to:`/publishing/deployments/$connectionId`,params:{connectionId:e.connectionId}})}],title:t(`publishing.deployments.runTitle`,{connection:e.connectionName}),badge:(0,J.jsx)(`span`,{"aria-live":`polite`,children:(0,J.jsx)(nn,{run:e})}),meta:d?`${y(e.createdAt)} · ${t(`publishing.deployments.watching`)}`:y(e.createdAt),actions:r&&!d?(0,J.jsxs)(w,{variant:`outline`,disabled:i.isPending,onClick:()=>i.mutate(e.id,{onSuccess:e=>{S.success(t(`publishing.deployments.retried`)),n({to:`/publishing/deployments/runs/$runId`,params:{runId:e.id}})}}),children:[(0,J.jsx)(ut,{"aria-hidden":`true`}),t(`publishing.deployments.retry`)]}):void 0}),e.status===`triggered`&&!e.completionReported?(0,J.jsxs)(T,{variant:`info`,children:[(0,J.jsx)(pe,{"aria-hidden":`true`}),(0,J.jsx)(D,{children:t(`publishing.deployments.completionUnknown`)})]}):null,e.error?(0,J.jsxs)(T,{variant:`destructive`,children:[(0,J.jsx)(Ae,{"aria-hidden":`true`}),(0,J.jsx)(D,{children:e.error})]}):null,(0,J.jsx)(G,{title:t(`publishing.deployments.details`),children:(0,J.jsx)(Zt,{items:f})}),(0,J.jsx)(G,{title:t(`publishing.deployments.timeline`),children:(0,J.jsx)($n,{run:e})})]})},tr=()=>{let{runId:e}=ee({from:`/app/publishing/deployments/runs/$runId`}),t=ct(e);return(0,J.jsx)(W,{query:t,loadingRows:6,children:e=>(0,J.jsx)(er,{run:e})})},nr=`__all`,rr=({id:e,label:t,value:n,options:r,onChange:i,allLabel:a})=>{let{t:s}=o(),c=`${e}-label`;return(0,J.jsxs)(Oe,{value:n??nr,onValueChange:e=>i(r.find(t=>t.value===e)?.value),children:[(0,J.jsx)(we,{id:e,size:`sm`,"aria-labelledby":c,className:`min-w-40`,children:(0,J.jsxs)(`span`,{className:`flex min-w-0 items-center gap-1.5`,children:[(0,J.jsx)(`span`,{id:c,className:`text-muted-foreground`,children:t}),(0,J.jsx)(Ce,{})]})}),(0,J.jsxs)(Te,{children:[(0,J.jsx)(Ee,{value:nr,children:a??s(`publishing.filters.all`)}),r.map(e=>(0,J.jsx)(Ee,{value:e.value,children:e.label},e.value))]})]})},ir=`__default`,ar={modelKey:F().min(1,`validation.selectModel`),entryId:gt(),locale:F(),action:z(le)},or={modelKey:``,entryId:``,locale:ir,action:`publish`},sr=({modelKey:e,entryId:t,locale:n,action:r})=>({modelKey:e,entryId:t.trim(),action:r,...n===`__default`?{}:{locale:n}}),cr=()=>{let{t:e}=o(),t=Et(`model`),n=Ot();return{modelOptions:(t.data??[]).map(({definition:e})=>({value:e.apiKey,label:`${e.label} (${e.apiKey})`})),localeOptions:[{value:ir,label:e(`publishing.fields.defaultLocale`)},...(n.data??[]).map(e=>({value:e.code,label:`${e.label} (${e.code})`}))],actionOptions:le.map(t=>({value:t,label:e(tt[t])}))}},lr=({control:e})=>{let{t}=o(),{modelOptions:n,localeOptions:r,actionOptions:i}=cr(),a=e=>e;return(0,J.jsxs)(J.Fragment,{children:[(0,J.jsx)(q,{control:e,name:a(`modelKey`),label:t(`publishing.fields.model`),placeholder:t(`publishing.fields.modelPlaceholder`),options:n}),(0,J.jsx)(j,{control:e,name:a(`entryId`),label:t(`publishing.fields.entryId`),hint:t(`publishing.fields.entryIdHint`),autoComplete:`off`,className:`font-mono text-sm`}),(0,J.jsx)(q,{control:e,name:a(`locale`),label:t(`publishing.fields.locale`),hint:t(`publishing.fields.localeHint`),options:r}),(0,J.jsx)(q,{control:e,name:a(`action`),label:t(`publishing.fields.action`),options:i})]})},ur=L({...ar,runAt:Ft()}),dr=(e,t)=>{let n=At(),r=(0,Y.useMemo)(()=>({...or,runAt:e?Pt():``}),[e]),i=N({resolver:M(ur),defaultValues:r});return ze(e,i.reset,r,n.reset),{form:i,onSubmit:i.handleSubmit(async({runAt:e,...r})=>{let i=Nt(e);i&&(await P(n.mutateAsync({...sr(r),runAt:i}))).ok&&t()}),createSchedule:n}},fr=({open:e,onOpenChange:t,onCreated:n})=>{let{t:r}=o(),{form:i,onSubmit:a,createSchedule:s}=dr(e,n);return(0,J.jsxs)(Rt,{open:e,onOpenChange:t,size:`md`,title:r(`publishing.scheduled.createTitle`),dirty:i.formState.isDirty,pending:s.isPending,submitLabel:r(`publishing.scheduled.create`),pendingLabel:r(`common.saving`),onSubmit:e=>void a(e),children:[(0,J.jsx)(lr,{control:i.control}),(0,J.jsx)(j,{control:i.control,name:`runAt`,type:`datetime-local`,label:r(`publishing.fields.runAt`),description:r(`publishing.fields.localTimeHint`,{timeZone:Intl.DateTimeFormat().resolvedOptions().timeZone})}),(0,J.jsx)(E,{error:s.error})]})},pr=()=>{let e=b({from:`/app/publishing/scheduled`}),t=u({from:`/publishing/scheduled`}),n=e=>void t({search:t=>({...t,...e})}),{pagerProps:r,resetPager:i}=it(e.cursor,e=>n({cursor:e}));return{search:e,pagerProps:r,setStatus:e=>{i(),n({status:e,cursor:void 0})}}},mr=({schedules:e,onCancel:t})=>{let{t:n}=o();return(0,J.jsxs)(U,{children:[(0,J.jsx)(I,{children:(0,J.jsxs)(V,{children:[(0,J.jsx)(R,{children:n(`publishing.fields.entryId`)}),(0,J.jsx)(R,{children:n(`publishing.fields.model`)}),(0,J.jsx)(R,{children:n(`publishing.fields.locale`)}),(0,J.jsx)(R,{children:n(`publishing.fields.action`)}),(0,J.jsx)(R,{children:n(`publishing.fields.runAt`)}),(0,J.jsx)(R,{children:n(`publishing.fields.status`)}),(0,J.jsx)(R,{children:n(`publishing.fields.error`)}),(0,J.jsx)(R,{children:(0,J.jsx)(`span`,{className:`sr-only`,children:n(`common.actions`)})})]})}),(0,J.jsx)(B,{children:e.map(e=>{let r=$t[e.status];return(0,J.jsxs)(V,{children:[(0,J.jsx)(H,{className:`max-w-44`,children:(0,J.jsx)(oe,{className:`block truncate font-mono text-xs`,children:(0,J.jsx)(`span`,{title:e.entryId,children:e.entryId})})}),(0,J.jsx)(H,{className:`font-mono text-xs`,children:e.modelKey??n(`publishing.fields.deletedModel`)}),(0,J.jsx)(H,{className:`font-mono text-xs`,children:e.locale}),(0,J.jsx)(H,{children:n(tt[e.action])}),(0,J.jsx)(H,{className:`whitespace-nowrap`,children:y(e.runAt)}),(0,J.jsx)(H,{children:(0,J.jsx)(_,{tone:r.tone,label:n(r.labelKey)})}),(0,J.jsx)(H,{className:`max-w-64 whitespace-normal`,children:e.error?(0,J.jsx)(`span`,{className:`text-destructive`,children:e.error}):(0,J.jsx)(`span`,{className:`text-muted-foreground`,children:n(`common.none`)})}),(0,J.jsx)(H,{className:`text-right`,children:e.status===`scheduled`?(0,J.jsx)(O,{tone:`danger`,title:n(`publishing.scheduled.cancelTitle`),description:n(`publishing.scheduled.cancelDescription`,{entryId:e.entryId}),confirmLabel:n(`publishing.scheduled.cancel`),cancelLabel:n(`publishing.scheduled.keep`),onConfirm:()=>t(e),trigger:(0,J.jsx)(w,{variant:`outline`,size:`sm`,"aria-label":n(`publishing.scheduled.cancelLabel`,{entryId:e.entryId}),children:n(`publishing.scheduled.cancel`)})}):null})]},e.id)})})]})},hr=()=>{let{t:e}=o(),{search:t,pagerProps:n,setStatus:r}=pr(),i=jt({status:t.status,cursor:t.cursor,limit:25}),a=Mt(),[s,c]=(0,Y.useState)(!1),l=t=>a.mutateAsync(t.id,{onSuccess:()=>S.success(e(`publishing.scheduled.cancelled`))}),u=ce.map(t=>({value:t,label:e($t[t].labelKey)})),d=(0,J.jsx)(`div`,{role:`search`,className:`flex flex-wrap items-center gap-2`,children:(0,J.jsx)(rr,{id:`scheduled-status`,label:e(`publishing.fields.status`),value:t.status,options:u,onChange:r})});return(0,J.jsxs)(h,{children:[(0,J.jsx)(Yt,{actions:(0,J.jsxs)(w,{onClick:()=>c(!0),children:[(0,J.jsx)(Ut,{"aria-hidden":`true`}),e(`publishing.scheduled.create`)]})}),(0,J.jsx)(W,{query:i,loadingRows:6,isEmpty:e=>e.items.length===0&&t.cursor===void 0&&!t.status,empty:(0,J.jsx)(v,{icon:Se,title:e(`publishing.scheduled.empty`)}),children:t=>(0,J.jsx)(bt,{toolbar:d,footer:(0,J.jsx)(ke,{...n(t.nextCursor)}),children:t.items.length===0?(0,J.jsx)(v,{icon:Se,size:`panel`,title:e(`publishing.scheduled.noMatches`)}):(0,J.jsx)(mr,{schedules:t.items,onCancel:l})})}),(0,J.jsx)(fr,{open:s,onOpenChange:c,onCreated:()=>{c(!1),S.success(e(`publishing.scheduled.created`))}})]})},gr=e=>`${e}.*`,_r=e=>{let t=new Map;for(let{type:n,group:r}of e)t.set(r,[...t.get(r)??[],n]);return[...t].map(([e,t])=>({group:e,types:t}))},vr=(e,{group:t,types:n},r)=>{let i=gr(t),a=e.filter(e=>e!==i&&!n.includes(e));return r?[...a,i]:a},yr=(e,t,n)=>n?[...e.filter(e=>e!==t),t]:e.filter(e=>e!==t),br=({control:e})=>{let{t}=o(),n=at(),{field:r,fieldState:i}=mt({control:e,name:`events`}),a=r.value;return n.isPending?(0,J.jsx)(re,{rows:2}):n.isError?(0,J.jsx)(te,{error:n.error,onRetry:()=>void n.refetch()}):(0,J.jsxs)(_e,{"data-invalid":i.invalid||void 0,"aria-labelledby":`webhook-events-title`,children:[(0,J.jsxs)(ge,{variant:`label`,className:`flex items-center gap-1`,children:[(0,J.jsx)(`span`,{id:`webhook-events-title`,children:t(`publishing.webhooks.events`)}),(0,J.jsx)(ve,{about:t(`publishing.webhooks.events`),children:t(`publishing.webhooks.eventsHint`)})]}),(0,J.jsx)(`div`,{className:`space-y-4`,children:_r(n.data).map(e=>{let n=a.includes(gr(e.group)),i=`webhook-events-${e.group}`;return(0,J.jsxs)(`fieldset`,{className:`space-y-2 rounded-lg border p-3`,children:[(0,J.jsx)(`legend`,{className:`px-1 font-mono text-xs font-semibold`,children:e.group}),(0,J.jsxs)(C,{orientation:`horizontal`,children:[(0,J.jsx)(je,{id:i,checked:n,onCheckedChange:t=>r.onChange(vr(a,e,t===!0)),onBlur:r.onBlur}),(0,J.jsx)(he,{htmlFor:i,className:`font-medium`,children:t(`publishing.webhooks.allGroupEvents`,{group:e.group})})]}),(0,J.jsx)(`div`,{className:`grid gap-2 pl-6 sm:grid-cols-2`,children:e.types.map(e=>{let t=`webhook-event-${e}`;return(0,J.jsxs)(C,{orientation:`horizontal`,children:[(0,J.jsx)(je,{id:t,checked:n||a.includes(e),disabled:n,onCheckedChange:t=>r.onChange(yr(a,e,t===!0)),onBlur:r.onBlur}),(0,J.jsx)(he,{htmlFor:t,className:`font-mono text-xs font-normal`,children:e})]},e)})})]},e.group)})}),(0,J.jsx)(_t,{message:i.error?.message})]})},xr={min:1,max:20},Sr=8,Cr=L({name:gt().max(200,`validation.tooLong`),url:F().trim().min(1,`validation.required`).pipe(St({protocol:/^https?$/,error:`validation.url`})),events:xt(F()).min(1,`validation.selectEvents`),enabled:yt(),allowPrivateNetwork:yt(),maxAttempts:F().trim().refine(e=>/^\d+$/.test(e)&&Number(e)>=xr.min&&Number(e)<=xr.max,`validation.maxAttempts`),scope:z([`site`,`network`])}),wr={name:``,url:``,events:[],enabled:!0,allowPrivateNetwork:!1,maxAttempts:String(Sr),scope:`site`},Tr=e=>({name:e.name,url:e.url,events:e.events,enabled:e.enabled,allowPrivateNetwork:e.allowPrivateNetwork,maxAttempts:String(e.maxAttempts),scope:e.site===null?`network`:`site`}),Er=e=>({name:e.name.trim(),url:e.url.trim(),events:e.events,enabled:e.enabled,allowPrivateNetwork:e.allowPrivateNetwork,maxAttempts:Number(e.maxAttempts)}),Dr=({control:e})=>{let{t}=o();return(0,J.jsxs)(J.Fragment,{children:[(0,J.jsx)(j,{control:e,name:`name`,label:t(`publishing.webhooks.name`),autoComplete:`off`}),(0,J.jsx)(j,{control:e,name:`url`,type:`url`,label:t(`publishing.webhooks.url`),placeholder:t(`publishing.webhooks.urlPlaceholder`),autoComplete:`off`}),(0,J.jsx)(br,{control:e}),(0,J.jsx)(j,{control:e,name:`maxAttempts`,type:`number`,inputMode:`numeric`,min:xr.min,max:xr.max,label:t(`publishing.webhooks.maxAttempts`),hint:t(`publishing.webhooks.maxAttemptsHint`),className:`w-32`}),(0,J.jsx)(K,{control:e,name:`enabled`,label:t(`publishing.webhooks.enabled`)}),(0,J.jsx)(K,{control:e,name:`allowPrivateNetwork`,label:t(`publishing.fields.allowPrivateNetwork`),hint:t(`publishing.fields.allowPrivateNetworkHint`)})]})},Or=(e,t)=>{let n=$e(),r=N({resolver:M(Cr),defaultValues:wr});return ze(e,r.reset,wr,n.reset),{form:r,onSubmit:r.handleSubmit(async e=>{let i=await P(n.mutateAsync({...Er(e),network:e.scope===`network`}));i.ok&&(r.reset(wr),t(i.value))}),createWebhook:n}},kr=({open:e,onOpenChange:t,onCloseAutoFocus:n,onCreated:r})=>{let{t:i}=o(),{form:a,onSubmit:s,createWebhook:c}=Or(e,r),{data:l}=f(),u=[{value:`site`,label:i(`publishing.webhooks.scopeSite`,{name:l?.site.name??``})},{value:`network`,label:i(`sites.everySite`),description:i(`publishing.webhooks.scopeNetwork`)}];return(0,J.jsxs)(Rt,{open:e,onOpenChange:t,size:`md`,onCloseAutoFocus:n,title:i(`publishing.webhooks.createTitle`),dirty:a.formState.isDirty,pending:c.isPending,submitLabel:i(`common.create`),pendingLabel:i(`common.saving`),onSubmit:e=>void s(e),children:[(0,J.jsx)(Dr,{control:a.control}),Tt(l)?(0,J.jsx)(Dt,{control:a.control,name:`scope`,legend:i(`publishing.webhooks.scope`),options:u}):null,(0,J.jsx)(E,{error:c.error})]})},Ar=({secret:e,onDismiss:t})=>{let{t:n}=o();return(0,J.jsx)(Bt,{title:n(`publishing.webhooks.secretTitle`),description:n(`publishing.webhooks.secretDescription`),label:n(`publishing.webhooks.secretLabel`),secret:e,dismissLabel:n(`publishing.secretDone`),onDismiss:t,hint:(0,J.jsx)(Un,{description:n(`publishing.webhooks.signatureDescription`)})})},jr=({webhook:e})=>{let{t}=o();return e.site===null?(0,J.jsx)(ne,{variant:`secondary`,children:t(`sites.everySite`)}):null},Mr=({webhooks:e})=>{let{t}=o();return(0,J.jsx)(bt,{children:(0,J.jsxs)(U,{children:[(0,J.jsx)(I,{children:(0,J.jsxs)(V,{children:[(0,J.jsx)(R,{children:t(`publishing.webhooks.name`)}),(0,J.jsx)(R,{children:t(`publishing.webhooks.url`)}),(0,J.jsx)(R,{children:t(`publishing.webhooks.state`)}),(0,J.jsx)(R,{children:t(`publishing.webhooks.lastDelivery`)})]})}),(0,J.jsx)(B,{children:e.map(e=>{let n=e.lastDelivery?en[e.lastDelivery.status]:void 0;return(0,J.jsxs)(V,{children:[(0,J.jsx)(H,{className:`max-w-64`,children:(0,J.jsxs)(`span`,{className:`flex min-w-0 items-center gap-2`,children:[(0,J.jsx)(oe,{asChild:!0,className:`block truncate`,children:(0,J.jsx)(p,{to:`/publishing/webhooks/$webhookId`,params:{webhookId:e.id},children:e.name})}),(0,J.jsx)(jr,{webhook:e})]})}),(0,J.jsx)(H,{className:`max-w-72`,children:(0,J.jsx)(`span`,{className:`block truncate font-mono text-xs text-muted-foreground`,title:e.url,children:e.url})}),(0,J.jsx)(H,{children:(0,J.jsx)(Z,{enabled:e.enabled})}),(0,J.jsx)(H,{children:e.lastDelivery&&n?(0,J.jsxs)(`span`,{className:`flex flex-wrap items-center gap-2`,children:[(0,J.jsx)(_,{tone:n.tone,label:t(n.labelKey)}),(0,J.jsx)(`span`,{className:`text-meta whitespace-nowrap text-muted-foreground`,title:y(e.lastDelivery.at),children:ae(e.lastDelivery.at)})]}):(0,J.jsx)(`span`,{className:`text-muted-foreground`,children:t(`common.never`)})})]},e.id)})})]})})},Nr=()=>{let{t:e}=o(),t=u(),n=qe(),[r,i]=(0,Y.useState)(!1),a=Xt(e=>void t({to:`/publishing/webhooks/$webhookId`,params:{webhookId:e}}));return(0,J.jsxs)(h,{children:[(0,J.jsx)(Yt,{actions:(0,J.jsxs)(w,{onClick:()=>i(!0),children:[(0,J.jsx)(Le,{"aria-hidden":`true`}),e(`publishing.webhooks.create`)]})}),a.revealed?(0,J.jsx)(Ar,{secret:a.revealed.secret,onDismiss:a.dismiss}):null,(0,J.jsx)(W,{query:n,isEmpty:e=>e.length===0,empty:(0,J.jsx)(v,{icon:pt,title:e(`publishing.webhooks.empty`)}),children:e=>(0,J.jsx)(Mr,{webhooks:e})}),(0,J.jsx)(kr,{open:r,onOpenChange:i,onCloseAutoFocus:a.keepFocusOnReveal,onCreated:({webhook:e,secret:t})=>{i(!1),a.reveal({id:e.id,secret:t})}})]})},Pr=(e,t)=>{let{t:n}=o(),r=u(),i=et(),a=rt(),s=We(),c=nt(),[l,d]=(0,Y.useState)(void 0);return{secret:l,clearSecret:()=>d(void 0),testing:i.isPending,pending:a.isPending||s.isPending||c.isPending,sendTest:()=>i.mutate(e.id,{onSuccess:()=>S.success(n(`publishing.webhooks.testQueued`))}),toggleEnabled:()=>a.mutate({id:e.id,input:{enabled:!e.enabled,expectedVersion:e.version}},{onSuccess:e=>S.success(e.enabled?n(`publishing.webhooks.enabledToast`):n(`publishing.webhooks.disabledToast`)),onError:t}),rotateSecret:()=>s.mutateAsync(e.id,{onSuccess:e=>d(e.secret)}),remove:()=>c.mutateAsync(e.id,{onSuccess:()=>{S.success(n(`publishing.webhooks.deleted`,{name:e.name})),r({to:`/publishing/webhooks`})}})}},Fr=({headers:e,label:t})=>(0,J.jsx)(`dl`,{"aria-label":t,className:`space-y-0.5 rounded-md border bg-muted p-2 font-mono text-xs break-all`,children:Object.entries(e).map(([e,t])=>(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`dt`,{className:`inline font-semibold`,children:e}),(0,J.jsx)(`dd`,{className:`inline before:content-[':_']`,children:t})]},e))}),Ir=200,Lr=300,Rr=400,zr=e=>e>=Ir&&e<Lr?`success`:e<Rr?`warning`:`danger`,Br=({status:e,label:t})=>(0,J.jsx)(_,{tone:zr(e),label:t??String(e),size:`sm`,className:`font-mono`}),Vr=({attempt:e})=>{let{t}=o(),{request:n,response:r}=e;return(0,J.jsxs)(`li`,{className:`space-y-3 rounded-lg border bg-card p-4`,children:[(0,J.jsx)(`p`,{className:`text-sm font-medium`,children:t(`publishing.webhooks.attemptHeading`,{attempt:e.attempt,at:y(e.at),duration:e.durationMs})}),(0,J.jsxs)(`div`,{className:`grid gap-3 lg:grid-cols-2`,children:[(0,J.jsxs)(`section`,{className:`min-w-0 space-y-1`,children:[(0,J.jsx)(`h4`,{className:`text-xs font-semibold text-muted-foreground`,children:t(`publishing.webhooks.request`)}),(0,J.jsx)(`p`,{className:`font-mono text-xs break-all`,children:`${n.method} ${n.url}`}),(0,J.jsx)(Fr,{headers:n.headers,label:t(`publishing.webhooks.requestHeaders`)})]}),(0,J.jsxs)(`section`,{className:`min-w-0 space-y-1`,children:[(0,J.jsx)(`h4`,{className:`text-xs font-semibold text-muted-foreground`,children:t(`publishing.webhooks.response`)}),r?(0,J.jsxs)(J.Fragment,{children:[(0,J.jsx)(Br,{status:r.status,label:t(`publishing.webhooks.httpStatus`,{status:r.status})}),(0,J.jsx)(Vn,{value:r.body,label:t(`publishing.webhooks.responseBody`),className:`max-h-40`}),r.truncated?(0,J.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:t(`publishing.webhooks.bodyTruncated`)}):null]}):(0,J.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:t(`publishing.webhooks.noResponse`)}),e.error?(0,J.jsx)(`p`,{className:`text-sm text-destructive`,children:e.error}):null]})]})]})},Hr=7,Ur=({delivery:e,expanded:t,onToggle:n,onRedeliver:r,redelivering:i})=>{let{t:a}=o(),s=en[e.status],c=`delivery-${e.id}`;return(0,J.jsxs)(J.Fragment,{children:[(0,J.jsxs)(V,{children:[(0,J.jsx)(H,{className:`w-10`,children:(0,J.jsx)(w,{variant:`ghost`,size:`icon-sm`,"aria-expanded":t,"aria-controls":t?c:void 0,"aria-label":a(`publishing.webhooks.toggleAttempts`,{event:e.eventType}),onClick:n,children:t?(0,J.jsx)(De,{"aria-hidden":`true`}):(0,J.jsx)(be,{"aria-hidden":`true`})})}),(0,J.jsx)(H,{children:(0,J.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,J.jsx)(`span`,{className:`font-mono text-xs font-semibold`,children:e.eventType}),e.isTest?(0,J.jsx)(ne,{variant:`outline`,children:a(`publishing.webhooks.testBadge`)}):null]})}),(0,J.jsx)(H,{children:(0,J.jsx)(_,{tone:s.tone,label:a(s.labelKey)})}),(0,J.jsx)(H,{children:e.lastResponseStatus===null?(0,J.jsx)(`span`,{className:`text-muted-foreground`,children:a(`common.none`)}):(0,J.jsx)(Br,{status:e.lastResponseStatus})}),(0,J.jsx)(H,{className:`text-right tabular-nums`,children:e.attempts}),(0,J.jsx)(H,{className:`whitespace-nowrap`,title:y(e.createdAt),children:ae(e.createdAt)}),(0,J.jsx)(H,{className:`text-right`,children:(0,J.jsxs)(w,{variant:`ghost`,size:`sm`,disabled:i,"aria-label":a(`publishing.webhooks.redeliverLabel`,{event:e.eventType}),onClick:r,children:[(0,J.jsx)(ut,{"aria-hidden":`true`}),a(`publishing.webhooks.redeliver`)]})})]}),t?(0,J.jsx)(V,{className:`hover:bg-transparent`,children:(0,J.jsx)(H,{colSpan:Hr,className:`bg-muted/40 whitespace-normal`,children:(0,J.jsxs)(`div`,{id:c,className:`space-y-3 py-2`,children:[e.lastError?(0,J.jsx)(`p`,{className:`text-meta text-destructive`,children:a(`publishing.webhooks.lastErrorValue`,{error:e.lastError})}):null,e.attemptLog.length===0?(0,J.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:a(`publishing.webhooks.noAttempts`)}):(0,J.jsx)(`ol`,{className:`space-y-3`,children:e.attemptLog.map(e=>(0,J.jsx)(Vr,{attempt:e},e.attempt))})]})})}):null]})},Wr=({webhookId:e})=>{let{t}=o(),{cursor:n}=b({from:`/app/publishing/webhooks/$webhookId`}),r=u({from:`/publishing/webhooks/$webhookId`}),{pagerProps:i}=it(n,e=>void r({search:{cursor:e}})),a=Ze(e,n),s=Xe(),[c,l]=(0,Y.useState)(new Set),d=e=>l(t=>{let n=new Set(t);return n.delete(e)||n.add(e),n});return(0,J.jsx)(G,{title:t(`publishing.webhooks.deliveries`),flush:!0,children:(0,J.jsx)(W,{query:a,isEmpty:e=>e.items.length===0&&n===void 0,empty:(0,J.jsx)(v,{icon:Fe,size:`panel`,title:t(`publishing.webhooks.noDeliveries`)}),children:n=>(0,J.jsxs)(J.Fragment,{children:[(0,J.jsxs)(U,{children:[(0,J.jsx)(I,{children:(0,J.jsxs)(V,{children:[(0,J.jsx)(R,{className:`w-12`,children:(0,J.jsx)(`span`,{className:`sr-only`,children:t(`publishing.webhooks.attemptLog`)})}),(0,J.jsx)(R,{children:t(`publishing.webhooks.eventType`)}),(0,J.jsx)(R,{children:t(`publishing.fields.status`)}),(0,J.jsx)(R,{children:t(`publishing.webhooks.lastResponse`)}),(0,J.jsx)(R,{className:`text-right`,children:t(`publishing.webhooks.attempts`)}),(0,J.jsx)(R,{children:t(`publishing.fields.created`)}),(0,J.jsx)(R,{children:(0,J.jsx)(`span`,{className:`sr-only`,children:t(`common.actions`)})})]})}),(0,J.jsx)(B,{children:n.items.map(n=>(0,J.jsx)(Ur,{delivery:n,expanded:c.has(n.id),onToggle:()=>d(n.id),redelivering:s.isPending,onRedeliver:()=>s.mutate({id:e,deliveryId:n.id},{onSuccess:()=>S.success(t(`publishing.webhooks.redelivered`))})},n.id))})]}),(0,J.jsx)(ke,{...i(n.nextCursor),className:`border-t px-4 py-2.5`})]})})})},Gr=(e,t,n)=>{let{t:r}=o(),i=rt(),a=N({resolver:M(Cr),defaultValues:Tr(e)});return{form:a,onSubmit:a.handleSubmit(async a=>{(await P(i.mutateAsync({id:e.id,input:{...Er(a),expectedVersion:e.version}},{onError:n}))).ok&&(S.success(r(`publishing.webhooks.saved`)),t())}),update:i,error:d(i.error)?void 0:i.error}},Kr=({webhook:e,onSaved:t,onConflict:n})=>{let{t:r}=o(),{form:i,onSubmit:a,update:s,error:c}=Gr(e,t,n);return(0,J.jsxs)(`form`,{noValidate:!0,onSubmit:e=>void a(e),children:[(0,J.jsx)(se,{when:i.formState.isDirty&&!s.isPending}),(0,J.jsxs)(ye,{children:[(0,J.jsx)(Dr,{control:i.control}),(0,J.jsx)(E,{error:c}),(0,J.jsx)(`div`,{children:(0,J.jsx)(m,{pending:s.isPending,pendingLabel:r(`common.saving`),children:r(`common.saveChanges`)})})]})]})},qr=({webhook:e})=>{let{t}=o(),n=Bn(r.publishing.webhooks.webhook(e.id)),i=Pr(e,n.onSaveError);return(0,J.jsxs)(h,{children:[(0,J.jsx)(g,{breadcrumb:[{label:t(`nav.publishing`)},{label:t(`publishing.nav.webhooks`),link:l({to:`/publishing/webhooks`})}],title:e.name,badge:(0,J.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,J.jsx)(Z,{enabled:e.enabled}),(0,J.jsx)(jr,{webhook:e})]}),meta:(0,J.jsx)(`span`,{className:`font-mono text-xs break-all`,children:e.url}),actions:(0,J.jsxs)(J.Fragment,{children:[(0,J.jsx)(O,{tone:`danger`,title:t(`publishing.webhooks.deleteTitle`,{name:e.name}),description:t(`publishing.webhooks.deleteDescription`),confirmLabel:t(`common.delete`),onConfirm:i.remove,trigger:(0,J.jsxs)(w,{variant:`destructive-ghost`,disabled:i.pending,children:[(0,J.jsx)(me,{"aria-hidden":`true`}),t(`common.delete`)]})}),(0,J.jsx)(O,{tone:`danger`,title:t(`publishing.webhooks.rotateTitle`),description:t(`publishing.webhooks.rotateDescription`),confirmLabel:t(`publishing.webhooks.rotateSecret`),onConfirm:i.rotateSecret,onCloseAutoFocus:e=>{i.secret&&e.preventDefault()},trigger:(0,J.jsxs)(w,{variant:`outline`,disabled:i.pending,children:[(0,J.jsx)(Ie,{"aria-hidden":`true`}),t(`publishing.webhooks.rotateSecret`)]})}),(0,J.jsxs)(w,{variant:`outline`,disabled:i.pending,onClick:i.toggleEnabled,children:[(0,J.jsx)(qt,{"aria-hidden":`true`}),e.enabled?t(`publishing.webhooks.disable`):t(`publishing.webhooks.enable`)]}),(0,J.jsxs)(w,{disabled:i.testing||!e.enabled,onClick:i.sendTest,children:[(0,J.jsx)(dt,{"aria-hidden":`true`}),t(`publishing.webhooks.sendTest`)]})]})}),i.secret?(0,J.jsx)(Ar,{secret:i.secret,onDismiss:i.clearSecret}):null,n.conflicted?(0,J.jsx)(T,{variant:`destructive`,children:(0,J.jsx)(D,{children:t(`publishing.conflictReloaded`)})}):null,(0,J.jsx)(Wr,{webhookId:e.id}),(0,J.jsx)(G,{title:t(`publishing.webhooks.settings`),children:(0,J.jsx)(Kr,{webhook:e,onSaved:n.clearConflict,onConflict:n.onSaveError},e.version)}),(0,J.jsx)(G,{title:t(`publishing.webhooks.signatureTitle`),children:(0,J.jsx)(Un,{description:t(`publishing.webhooks.signatureDescription`)})})]})},Jr={publishing:x(`/app/publishing`)({component:Jt}),scheduled:x(`/app/publishing/scheduled`)({component:hr}),deployments:x(`/app/publishing/deployments`)({component:zn}),connection:x(`/app/publishing/deployments/$connectionId`)({component:Zn}),run:x(`/app/publishing/deployments/runs/$runId`)({component:tr}),webhooks:x(`/app/publishing/webhooks`)({component:Nr}),webhook:x(`/app/publishing/webhooks/$webhookId`)({component:()=>{let{webhookId:e}=ee({from:`/app/publishing/webhooks/$webhookId`}),t=Ke(e);return(0,J.jsx)(W,{query:t,loadingRows:6,children:e=>(0,J.jsx)(qr,{webhook:e})})}})};export{Jr as publishingLazyRoutes};
2
- //# sourceMappingURL=publishing-d9yhMwgA.js.map
@@ -1,2 +0,0 @@
1
- import{i as e}from"./cn-BQ3voEft.js";var t={name:`search`,size:24,node:[[`path`,{d:`m21 21-4.34-4.34`,key:`14j7rj`}],[`circle`,{cx:`11`,cy:`11`,r:`8`,key:`4ej97u`}]]};t.node;var n=e(t);export{n as t};
2
- //# sourceMappingURL=search-_YlNpPvU.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"search-_YlNpPvU.js","names":["createLucideIcon","__iconData","Search"],"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/search.mjs"],"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: \"search\",\n size: 24,\n node: [\n [\"path\", { d: \"m21 21-4.34-4.34\", key: \"14j7rj\" }],\n [\"circle\", { cx: \"11\", cy: \"11\", r: \"8\", key: \"4ej97u\" }]\n ]\n};\n__iconData.node;\nconst Search = createLucideIcon(__iconData);\n\nexport { __iconData, Search as default };\n//# sourceMappingURL=search.mjs.map\n"],"ignoreList":[0],"mappings":"qCASA,IAAMC,EAAa,CACjB,KAAM,SACN,KAAM,GACN,KAAM,CACJ,CAAC,OAAQ,CAAE,EAAG,mBAAoB,IAAK,QAAS,CAAC,EACjD,CAAC,SAAU,CAAE,GAAI,KAAM,GAAI,KAAM,EAAG,IAAK,IAAK,QAAS,CAAC,CAC1D,CACF,EACAA,EAAW,KACX,IAAMC,EAASF,EAAiBC,CAAU"}
@@ -1,2 +0,0 @@
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{i as r}from"./cn-BQ3voEft.js";import{A as i,D as a,F as o,I as s,T as c,x as l}from"./auth-pcS9CCXu.js";import{F as u,M as d,j as f}from"./badge-DD0mE96i.js";import{r as p,t as m}from"./root-CDpNo7ef.js";import{a as h,c as g,o as _,s as v}from"./RowTitle--uFCpx8n.js";import{_ as y,g as b,l as x}from"./table-CZYtdoHn.js";import{t as S}from"./coerce-OsqQRj19.js";function C(e){e.statusCode=e.statusCode||e.code||307;let t=new Headers(e.headers);e.href&&t.get(`Location`)===null&&t.set(`Location`,e.href);let n=new Response(null,{status:e.statusCode,headers:t});if(n.options=e,e.throw)throw n;return n}function w(e){return e instanceof Response&&!!e.options}var T=class{get to(){return this._to}get id(){return this._id}get path(){return this._path}get fullPath(){return this._fullPath}constructor(e){if(this.init=e=>{this.originalIndex=e,this._branch=void 0;let t=this.options,n=!t?.path&&!t?.id;this.parentRoute=this.options.getParentRoute?.(),n?this._path=m:this.parentRoute||u();let r=n?m:t?.path;r&&r!==`/`&&(r=o(r));let a=t?.id||r,c=n?m:i((this.parentRoute.id===`__root__`?``:this.parentRoute.id)+`/`+(a??``));r===`__root__`&&(r=`/`);let l=c===`__root__`?`/`:r===void 0?this.parentRoute.fullPath:i(this.parentRoute.fullPath+`/`+r);this._path=r,this._id=c,this._fullPath=l,this._to=s(l)},this.addChildren=e=>this._addFileChildren(e),this._addFileChildren=e=>(Array.isArray(e)&&(this.children=e),typeof e==`object`&&e&&(this.children=Object.values(e)),this),this._addFileTypes=()=>this,this.updateLoader=e=>(Object.assign(this.options,e),this),this.update=e=>(Object.assign(this.options,e),this),this.lazy=e=>(this.lazyFn=e,this),this.redirect=e=>C({from:this.fullPath,...e}),this.options=e||{},this.isRoot=!e?.getParentRoute,e?.id&&e?.path)throw Error(`Route cannot have both an 'id' and a 'path' option.`)}},E=class{constructor({id:e}){this.notFound=e=>p({routeId:this.id,...e}),this.redirect=e=>C({from:this.id,...e}),this.id=e}},D=class extends T{constructor(e){super(e)}},O=e(t(),1),k=e(n(),1);function A(e){return new j({id:e})}var j=class extends E{constructor({id:e}){super({id:e}),this.useMatch=e=>d({...e,from:this.id}),this.useRouteContext=e=>h({...e,from:this.id}),this.useSearch=e=>_({...e,from:this.id}),this.useParams=e=>f({...e,from:this.id}),this.useLoaderDeps=e=>v({...e,from:this.id,strict:!1}),this.useLoaderData=e=>g({...e,from:this.id,strict:!1}),this.useNavigate=()=>c({from:a().routesById[this.id].fullPath}),this.notFound=e=>p({routeId:this.id,...e}),this.Link=O.forwardRef((e,t)=>{let n=a().routesById[this.id].fullPath;return(0,k.jsx)(l,{ref:t,from:n,...e})})}},M=class extends T{constructor(e){super(e),this.useMatch=e=>d({...e,from:this.id}),this.useRouteContext=e=>h({...e,from:this.id}),this.useSearch=e=>_({...e,from:this.id}),this.useParams=e=>f({...e,from:this.id}),this.useLoaderDeps=e=>v({...e,from:this.id}),this.useLoaderData=e=>g({...e,from:this.id}),this.useNavigate=()=>c({from:this.fullPath}),this.Link=O.forwardRef((e,t)=>(0,k.jsx)(l,{ref:t,from:this.fullPath,...e}))}};function N(e){return new M(e)}function P(){return e=>I(e)}var F=class extends D{constructor(e){super(e),this.useMatch=e=>d({...e,from:this.id}),this.useRouteContext=e=>h({...e,from:this.id}),this.useSearch=e=>_({...e,from:this.id}),this.useParams=e=>f({...e,from:this.id}),this.useLoaderDeps=e=>v({...e,from:this.id}),this.useLoaderData=e=>g({...e,from:this.id}),this.useNavigate=()=>c({from:this.fullPath}),this.Link=O.forwardRef((e,t)=>(0,k.jsx)(l,{ref:t,from:this.fullPath,...e}))}};function I(e){return new F(e)}var L={name:`camera`,size:24,node:[[`path`,{d:`M13.997 4a2 2 0 0 1 1.76 1.05l.486.9A2 2 0 0 0 18.003 7H20a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h1.997a2 2 0 0 0 1.759-1.048l.489-.904A2 2 0 0 1 10.004 4z`,key:`18u6gg`}],[`circle`,{cx:`12`,cy:`13`,r:`3`,key:`1vg3eu`}]]};L.node;var R=r(L),z={name:`file-code-corner`,size:24,node:[[`path`,{d:`M4 12.15V4a2 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-3.35`,key:`1wthlu`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`m5 16-3 3 3 3`,key:`331omg`}],[`path`,{d:`m9 22 3-3-3-3`,key:`lsp7cz`}]],aliases:[`file-code-2`]};z.node;var B=r(z),V=[`rest`,`graphql`],H=b({tab:x(V).optional().catch(void 0),op:y().trim().min(1).max(200).optional().catch(void 0)}),U=[`changes`,`checks`,`consumers`,`timeline`],W=b({tab:x(U).optional().catch(void 0)}),G=b({cursor:y().max(500).optional().catch(void 0)}),K=[`diff`,`timeline`],q=S().int().min(0).optional().catch(void 0),J=b({from:q,tab:x(K).optional().catch(void 0),at:q});export{W as a,B as c,N as d,A as f,U as i,R as l,C as m,J as n,V as o,w as p,G as r,H as s,K as t,P as u};
2
- //# sourceMappingURL=searchSchema-CvOhn4FV.js.map
@@ -1,2 +0,0 @@
1
- import{A as e,i as t,k as n,p as r}from"./cn-BQ3voEft.js";import{t as i}from"./globe-CuElSilX.js";import{t as a}from"./key-round-B17HiT3K.js";import{t as o}from"./sparkles-BW4CbD6W.js";var s={name:`monitor-smartphone`,size:24,node:[[`path`,{d:`M18 8V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v7a2 2 0 0 0 2 2h8`,key:`10dyio`}],[`path`,{d:`M10 19v-3.96 3.15`,key:`1irgej`}],[`path`,{d:`M7 19h5`,key:`qswx4l`}],[`rect`,{width:`6`,height:`10`,x:`16`,y:`12`,rx:`2`,key:`1egngj`}]]};s.node;var c=t(s),l={name:`monitor`,size:24,node:[[`rect`,{width:`20`,height:`14`,x:`2`,y:`3`,rx:`2`,key:`48i651`}],[`line`,{x1:`8`,x2:`16`,y1:`21`,y2:`21`,key:`1svkeh`}],[`line`,{x1:`12`,x2:`12`,y1:`17`,y2:`21`,key:`vw1qmm`}]]};l.node;var u=t(l),d={name:`moon`,size:24,node:[[`path`,{d:`M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401`,key:`kfwtm`}]]};d.node;var f=t(d),p={name:`palette`,size:24,node:[[`path`,{d:`M12 22a1 1 0 0 1 0-20 10 9 0 0 1 10 9 5 5 0 0 1-5 5h-2.25a1.75 1.75 0 0 0-1.4 2.8l.3.4a1.75 1.75 0 0 1-1.4 2.8z`,key:`e79jfc`}],[`circle`,{cx:`13.5`,cy:`6.5`,r:`.5`,fill:`currentColor`,key:`1okk4w`}],[`circle`,{cx:`17.5`,cy:`10.5`,r:`.5`,fill:`currentColor`,key:`f64h9f`}],[`circle`,{cx:`6.5`,cy:`12.5`,r:`.5`,fill:`currentColor`,key:`qy21gx`}],[`circle`,{cx:`8.5`,cy:`7.5`,r:`.5`,fill:`currentColor`,key:`fotxhn`}]]};p.node;var m=t(p),h={name:`sun`,size:24,node:[[`circle`,{cx:`12`,cy:`12`,r:`4`,key:`4exip2`}],[`path`,{d:`M12 2v2`,key:`tus03m`}],[`path`,{d:`M12 20v2`,key:`1lh1kg`}],[`path`,{d:`m4.93 4.93 1.41 1.41`,key:`149t6j`}],[`path`,{d:`m17.66 17.66 1.41 1.41`,key:`ptbguv`}],[`path`,{d:`M2 12h2`,key:`1t8f8n`}],[`path`,{d:`M20 12h2`,key:`1q8mjw`}],[`path`,{d:`m6.34 17.66-1.41 1.41`,key:`1m8zz5`}],[`path`,{d:`m19.07 4.93-1.41 1.41`,key:`1shlcs`}]]};h.node;var g=t(h),_={name:`user-round`,size:24,node:[[`circle`,{cx:`12`,cy:`8`,r:`5`,key:`1hypcn`}],[`path`,{d:`M20 21a8 8 0 0 0-16 0`,key:`rfgkzh`}]],aliases:[`user-2`]};_.node;var v=t(_),y={system:u,light:g,dark:f},b=[`system`,`light`,`dark`],x=e=>b.includes(e),S=r()(e(e=>({preference:`system`,setPreference:t=>e({preference:t})}),{name:`shapio.theme`,storage:n,version:1})),C=[{key:`account`,sections:[{key:`profile`,to:`/settings/profile`,icon:v},{key:`sessions`,to:`/settings/sessions`,icon:c},{key:`appearance`,to:`/settings/theme`,icon:m}]},{key:`workspace`,sections:[{key:`locales`,to:`/settings/locales`,icon:i},{key:`assist`,to:`/settings/assist`,icon:o}]},{key:`developer`,sections:[{key:`apiTokens`,to:`/settings/api-tokens`,icon:a,permission:`tokens.manage`}]}];export{y as a,m as c,S as i,f as l,b as n,v as o,x as r,g as s,C as t,c as u};
2
- //# sourceMappingURL=sections-DiySZZHb.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sections-DiySZZHb.js","names":["__iconData","__iconData","__iconData","__iconData","__iconData","persist","createLucideIcon","persistentStorage","create","Globe","KeyRound","Sparkles","__iconData$5","MonitorSmartphone","__iconData$4","Monitor","__iconData$3","Moon","__iconData$2","Palette","__iconData$1","Sun","__iconData","UserRound","THEME_ICONS","THEME_PREFERENCES","isThemePreference","value","useThemeStore","set","SETTINGS_GROUPS"],"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/monitor-smartphone.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/monitor.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/moon.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/palette.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/sun.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/user-round.mjs","../../src/constants/themeIcons.ts","../../src/stores/theme.ts","../../src/features/Settings/sections.ts"],"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: \"monitor-smartphone\",\n size: 24,\n node: [\n [\"path\", { d: \"M18 8V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v7a2 2 0 0 0 2 2h8\", key: \"10dyio\" }],\n [\"path\", { d: \"M10 19v-3.96 3.15\", key: \"1irgej\" }],\n [\"path\", { d: \"M7 19h5\", key: \"qswx4l\" }],\n [\"rect\", { width: \"6\", height: \"10\", x: \"16\", y: \"12\", rx: \"2\", key: \"1egngj\" }]\n ]\n};\n__iconData.node;\nconst MonitorSmartphone = createLucideIcon(__iconData);\n\nexport { __iconData, MonitorSmartphone as default };\n//# sourceMappingURL=monitor-smartphone.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: \"monitor\",\n size: 24,\n node: [\n [\"rect\", { width: \"20\", height: \"14\", x: \"2\", y: \"3\", rx: \"2\", key: \"48i651\" }],\n [\"line\", { x1: \"8\", x2: \"16\", y1: \"21\", y2: \"21\", key: \"1svkeh\" }],\n [\"line\", { x1: \"12\", x2: \"12\", y1: \"17\", y2: \"21\", key: \"vw1qmm\" }]\n ]\n};\n__iconData.node;\nconst Monitor = createLucideIcon(__iconData);\n\nexport { __iconData, Monitor as default };\n//# sourceMappingURL=monitor.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: \"moon\",\n size: 24,\n node: [\n [\n \"path\",\n {\n d: \"M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401\",\n key: \"kfwtm\"\n }\n ]\n ]\n};\n__iconData.node;\nconst Moon = createLucideIcon(__iconData);\n\nexport { __iconData, Moon as default };\n//# sourceMappingURL=moon.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: \"palette\",\n size: 24,\n node: [\n [\n \"path\",\n {\n d: \"M12 22a1 1 0 0 1 0-20 10 9 0 0 1 10 9 5 5 0 0 1-5 5h-2.25a1.75 1.75 0 0 0-1.4 2.8l.3.4a1.75 1.75 0 0 1-1.4 2.8z\",\n key: \"e79jfc\"\n }\n ],\n [\"circle\", { cx: \"13.5\", cy: \"6.5\", r: \".5\", fill: \"currentColor\", key: \"1okk4w\" }],\n [\"circle\", { cx: \"17.5\", cy: \"10.5\", r: \".5\", fill: \"currentColor\", key: \"f64h9f\" }],\n [\"circle\", { cx: \"6.5\", cy: \"12.5\", r: \".5\", fill: \"currentColor\", key: \"qy21gx\" }],\n [\"circle\", { cx: \"8.5\", cy: \"7.5\", r: \".5\", fill: \"currentColor\", key: \"fotxhn\" }]\n ]\n};\n__iconData.node;\nconst Palette = createLucideIcon(__iconData);\n\nexport { __iconData, Palette as default };\n//# sourceMappingURL=palette.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: \"sun\",\n size: 24,\n node: [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"4\", key: \"4exip2\" }],\n [\"path\", { d: \"M12 2v2\", key: \"tus03m\" }],\n [\"path\", { d: \"M12 20v2\", key: \"1lh1kg\" }],\n [\"path\", { d: \"m4.93 4.93 1.41 1.41\", key: \"149t6j\" }],\n [\"path\", { d: \"m17.66 17.66 1.41 1.41\", key: \"ptbguv\" }],\n [\"path\", { d: \"M2 12h2\", key: \"1t8f8n\" }],\n [\"path\", { d: \"M20 12h2\", key: \"1q8mjw\" }],\n [\"path\", { d: \"m6.34 17.66-1.41 1.41\", key: \"1m8zz5\" }],\n [\"path\", { d: \"m19.07 4.93-1.41 1.41\", key: \"1shlcs\" }]\n ]\n};\n__iconData.node;\nconst Sun = createLucideIcon(__iconData);\n\nexport { __iconData, Sun as default };\n//# sourceMappingURL=sun.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: \"user-round\",\n size: 24,\n node: [\n [\"circle\", { cx: \"12\", cy: \"8\", r: \"5\", key: \"1hypcn\" }],\n [\"path\", { d: \"M20 21a8 8 0 0 0-16 0\", key: \"rfgkzh\" }]\n ],\n aliases: [\"user-2\"]\n};\n__iconData.node;\nconst UserRound = createLucideIcon(__iconData);\n\nexport { __iconData, UserRound as default };\n//# sourceMappingURL=user-round.mjs.map\n","import { Monitor, Moon, Sun, type LucideIcon } from 'lucide-react';\nimport type { ThemePreference } from '@/stores/theme';\n\nexport const THEME_ICONS = { system: Monitor, light: Sun, dark: Moon } satisfies Record<\n ThemePreference,\n LucideIcon\n>;\n","import { create } from 'zustand';\nimport { persist } from 'zustand/middleware';\nimport { persistentStorage } from '@/helpers/safeStorage';\n\nexport const THEME_PREFERENCES = ['system', 'light', 'dark'] as const;\n\nexport type ThemePreference = (typeof THEME_PREFERENCES)[number];\n\nexport const isThemePreference = (value: string): value is ThemePreference =>\n (THEME_PREFERENCES as readonly string[]).includes(value);\n\ntype ThemeState = {\n preference: ThemePreference;\n setPreference: (preference: ThemePreference) => void;\n};\n\n/** Key and shape are read before first paint by public/theme-init.js; keep them in sync. */\nexport const THEME_STORAGE_KEY = 'shapio.theme';\n\nexport const useThemeStore = create<ThemeState>()(\n persist(\n (set) => ({\n preference: 'system',\n setPreference: (preference) => set({ preference }),\n }),\n { name: THEME_STORAGE_KEY, storage: persistentStorage, version: 1 },\n ),\n);\n","import type { GlobalAction } from '@shapio/client';\nimport {\n Globe,\n KeyRound,\n MonitorSmartphone,\n Palette,\n Sparkles,\n UserRound,\n type LucideIcon,\n} from 'lucide-react';\n\ntype SettingsPath =\n | '/settings/profile'\n | '/settings/sessions'\n | '/settings/theme'\n | '/settings/locales'\n | '/settings/assist'\n | '/settings/api-tokens';\n\ntype SettingsSection = {\n key: 'profile' | 'sessions' | 'appearance' | 'locales' | 'assist' | 'apiTokens';\n to: SettingsPath;\n icon: LucideIcon;\n /** Hidden unless the admin holds this permission (the server enforces it either way). */\n permission?: GlobalAction;\n};\n\nexport const SETTINGS_GROUPS: readonly {\n key: 'account' | 'workspace' | 'developer';\n sections: readonly SettingsSection[];\n}[] = [\n {\n key: 'account',\n sections: [\n { key: 'profile', to: '/settings/profile', icon: UserRound },\n { key: 'sessions', to: '/settings/sessions', icon: MonitorSmartphone },\n { key: 'appearance', to: '/settings/theme', icon: Palette },\n ],\n },\n {\n key: 'workspace',\n sections: [\n { key: 'locales', to: '/settings/locales', icon: Globe },\n { key: 'assist', to: '/settings/assist', icon: Sparkles },\n ],\n },\n {\n key: 'developer',\n sections: [{ key: 'apiTokens', to: '/settings/api-tokens', icon: KeyRound, permission: 'tokens.manage' }],\n },\n];\n"],"ignoreList":[0,1,2,3,4,5],"mappings":"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"}
@@ -1,2 +0,0 @@
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{H as r,P as i,V as a,bt as o,i as s,j as c,l,s as u}from"./cn-BQ3voEft.js";import{h as d,i as f,m as ee,u as p}from"./auth-pcS9CCXu.js";import{O as te,_ as m,a as h,i as g,n as _,o as v,t as y}from"./badge-DD0mE96i.js";import{n as ne}from"./Match-DdxTHHM4.js";import{i as b,n as x,r as re,t as S}from"./RowTitle--uFCpx8n.js";import{t as C}from"./fileRoute-C2tOrKhO.js";import{t as ie}from"./UnsavedChangesGuard-DgOASh0p.js";import{G as w,R as ae,f as oe,o as se,p as ce,t as le,u as T}from"./InfoHint-GJLRVumb.js";import{N as E,i as D,n as O,r as k}from"./skeleton-C3QLIh7W.js";import{n as ue,t as de}from"./arrow-up-gf_j6SVQ.js";import{a as fe,i as pe,n as me,r as he,t as ge}from"./select-tHVWX85X.js";import{i as A,r as j,t as _e}from"./ConfirmDialog-B9nWhIIz.js";import{t as ve}from"./ellipsis-NK0pWgqU.js";import{t as ye}from"./globe-CuElSilX.js";import{t as be}from"./key-round-B17HiT3K.js";import{a as xe,i as Se,n as Ce,r as we,t as Te,u as Ee}from"./sections-DiySZZHb.js";import{t as De}from"./pencil-Bdp2z9D_.js";import{t as Oe}from"./plus-BN_iSsnp.js";import{a as M,p as ke,r as Ae,t as je}from"./dropdown-menu-gmP2Rp3n.js";import{t as Me}from"./radio-group-DHIxK-IU.js";import{a as Ne,c as Pe,f as Fe,n as N,o as P,r as Ie,s as Le,t as F,u as I}from"./zod-BHAd1wTC.js";import{t as L}from"./settle-LRKtTN_e.js";import{_ as R,a as z,g as B,i as V,l as H,n as U,o as W,r as G,s as K,t as q,u as Re}from"./table-CZYtdoHn.js";import{t as ze}from"./HintedLabel-CvC46uy_.js";import{t as J}from"./QueryView-D6aZQJRN.js";import{t as Be}from"./FormRadioGroup-hd95vPOu.js";import{L as Ve}from"./src-XaU0N8C-.js";import{a as He,i as Ue,n as We,r as Ge,t as Ke}from"./locales-BzPbz8FF.js";import{t as qe}from"./textarea-B8Vl5gJ1.js";import{a as Je,l as Ye,m as Xe,p as Ze,r as Qe,t as $e}from"./AssistError-BITJ_tpg.js";import{t as Y}from"./Panel-iIKjEURi.js";import{t as et}from"./ExternalLink-Eeb9mONJ.js";import{t as tt}from"./RadioTile-BpB79rIK.js";import{n as nt,r as rt,t as it}from"./SubNavLink-B2o4kSZ9.js";import{n as at,t as ot}from"./FormSelectField-D7VHmnx5.js";import{n as st,r as ct,t as lt}from"./tokens-Fh_OeIlf.js";import{n as ut,t as dt}from"./useConfirmTarget-Dp8mCulm.js";import{a as ft,i as pt,t as mt}from"./SecretReveal-DFpzeNE0.js";var ht={name:`star`,size:24,node:[[`path`,{d:`M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z`,key:`r04s7s`}]]};ht.node;var gt=s(ht),X=e(n(),1),_t=()=>{let{t:e}=c(),t=p().data?.globalPermissions??[];return(0,X.jsx)(nt,{label:e(`settings.sections`),children:Te.map(n=>{let r=n.sections.filter(e=>!e.permission||t.includes(e.permission));return r.length===0?null:(0,X.jsx)(rt,{label:e(`settings.${n.key}`),children:r.map(t=>{let n=t.icon;return(0,X.jsxs)(it,{to:t.to,children:[(0,X.jsx)(n,{"aria-hidden":`true`}),e(`settings.${t.key}`)]},t.key)})},n.key)})})},vt=()=>(0,X.jsx)(h,{children:(0,X.jsxs)(`div`,{className:`flex flex-col gap-6 lg:flex-row lg:items-start lg:gap-8`,children:[(0,X.jsx)(_t,{}),(0,X.jsx)(`div`,{className:`min-w-0 flex-1`,children:(0,X.jsx)(ne,{})})]})}),Z=e(t(),1),yt=[`never`,`30`,`90`,`365`],bt=864e5,xt=(e,t=new Date)=>e===`never`?null:new Date(t.getTime()+Number(e)*bt).toISOString(),St=B({name:P(),roleId:R().min(1,`validation.selectRole`),expiry:H(yt),scope:H([`site`,`network`])}),Q={name:``,roleId:``,expiry:`90`,scope:`site`},Ct=(e,t,n)=>{let r=st(),i=I({resolver:F(St),defaultValues:Q}),{reset:a}=i;return(0,Z.useEffect)(()=>{e&&a(Q)},[e,a]),{form:i,onSubmit:i.handleSubmit(async({name:e,roleId:i,expiry:o,scope:s})=>{let c=s===`network`&&n(i),l=await L(r.mutateAsync({name:e,roleId:i,expiresAt:xt(o),network:c}));l.ok&&(a(Q),t(l.value))}),createToken:r}},wt=({open:e,onOpenChange:t,onCreated:n,onCloseAutoFocus:r})=>{let{t:i}=c(),a=ft(),{data:o}=p(),s=o?.networkPermissions.includes(`users.manage`)??!1,l=e=>s&&a.data?.find(t=>t.id===e)?.kind===`admin`,{form:u,onSubmit:d,createToken:f}=Ct(e,n,l),ee=Fe({control:u.control,name:`roleId`}),te=[{value:`site`,label:i(`apiTokens.scopeSite`,{name:o?.site.name??``}),description:i(`apiTokens.scopeSiteDescription`)},{value:`network`,label:i(`apiTokens.scopeNetwork`),description:i(`apiTokens.scopeNetworkDescription`)}],m=(a.data??[]).map(e=>({value:e.id,label:e.name})),h=yt.map(e=>({value:e,label:e===`never`?i(`apiTokens.expiryNever`):i(`apiTokens.expiryDays`,{count:Number(e)})}));return(0,X.jsxs)(at,{open:e,onOpenChange:t,size:`md`,...r?{onCloseAutoFocus:r}:{},title:i(`apiTokens.createTitle`),dirty:u.formState.isDirty,pending:f.isPending,submitLabel:i(`common.create`),pendingLabel:i(`common.saving`),onSubmit:e=>void d(e),children:[(0,X.jsx)(N,{control:u.control,name:`name`,label:i(`apiTokens.name`),autoComplete:`off`}),(0,X.jsx)(ot,{control:u.control,name:`roleId`,label:i(`apiTokens.role`),options:m}),l(ee)?(0,X.jsx)(Be,{control:u.control,name:`scope`,legend:i(`apiTokens.scope`),options:te}):null,(0,X.jsx)(ot,{control:u.control,name:`expiry`,label:i(`apiTokens.expiry`),options:h}),(0,X.jsx)(A,{error:f.error??a.error})]})},Tt=({tokens:e,roleNames:t,siteName:n,onRevoke:r})=>{let{t:i}=c();return(0,X.jsx)(K,{children:(0,X.jsxs)(q,{children:[(0,X.jsx)(z,{children:(0,X.jsxs)(W,{children:[(0,X.jsx)(V,{children:i(`apiTokens.name`)}),(0,X.jsx)(V,{children:i(`apiTokens.prefix`)}),(0,X.jsx)(V,{children:i(`apiTokens.role`)}),(0,X.jsx)(V,{children:i(`apiTokens.appliesTo`)}),(0,X.jsx)(V,{children:i(`apiTokens.status`)}),(0,X.jsx)(V,{children:i(`apiTokens.lastUsed`)}),(0,X.jsx)(V,{children:i(`apiTokens.expires`)}),(0,X.jsx)(V,{children:(0,X.jsx)(`span`,{className:`sr-only`,children:i(`common.actions`)})})]})}),(0,X.jsx)(U,{children:e.map(e=>(0,X.jsxs)(W,{children:[(0,X.jsx)(G,{children:(0,X.jsx)(S,{children:e.name})}),(0,X.jsx)(G,{className:`font-mono text-xs`,children:`${e.tokenPrefix}…`}),(0,X.jsx)(G,{children:t.get(e.roleId)??i(`common.unknown`)}),(0,X.jsx)(G,{children:e.siteId===null?i(`sites.everySite`):n}),(0,X.jsx)(G,{children:e.revokedAt?(0,X.jsx)(_,{tone:`muted`,label:i(`apiTokens.revokedBadge`)}):(0,X.jsx)(_,{tone:`success`,label:i(`apiTokens.active`)})}),(0,X.jsx)(G,{title:x(e.lastUsedAt)||void 0,children:e.lastUsedAt?b(e.lastUsedAt):i(`common.never`)}),(0,X.jsx)(G,{children:e.expiresAt?x(e.expiresAt):i(`common.never`)}),(0,X.jsx)(G,{className:`text-right`,children:e.revokedAt?null:(0,X.jsx)(j,{tone:`danger`,title:i(`apiTokens.revokeTitle`,{name:e.name}),description:i(`apiTokens.revokeDescription`),confirmLabel:i(`common.revoke`),onConfirm:()=>r(e),trigger:(0,X.jsx)(D,{variant:`outline`,size:`sm`,"aria-label":`${i(`common.revoke`)}: ${e.name}`,children:i(`common.revoke`)})})})]},e.id))})]})})},Et=()=>{let{t:e}=c(),t=lt(),{names:n}=pt(),r=p().data?.site.name??``,i=ct(),[a,o]=(0,Z.useState)(!1),[s,l]=(0,Z.useState)(void 0),u=async t=>{await i.mutateAsync(t.id),w.success(e(`apiTokens.revoked`))},d=(0,X.jsxs)(D,{onClick:()=>o(!0),children:[(0,X.jsx)(Oe,{"aria-hidden":`true`}),e(`apiTokens.create`)]});return(0,X.jsxs)(h,{width:`full`,children:[(0,X.jsx)(g,{title:e(`apiTokens.title`),actions:d}),s?(0,X.jsx)(mt,{title:e(`apiTokens.secretTitle`),description:e(`apiTokens.secretDescription`),label:e(`apiTokens.secretLabel`),secret:s,dismissLabel:e(`apiTokens.secretDone`),onDismiss:()=>l(void 0)}):null,(0,X.jsx)(J,{query:t,isEmpty:e=>e.length===0,empty:(0,X.jsx)(v,{icon:be,title:e(`apiTokens.empty`),description:e(`apiTokens.emptyDescription`),action:d}),children:e=>(0,X.jsx)(Tt,{tokens:e,roleNames:n,siteName:r,onRevoke:u})}),(0,X.jsx)(wt,{open:a,onOpenChange:o,onCreated:e=>{l(e.token),o(!1)},onCloseAutoFocus:e=>s!==void 0&&e.preventDefault()})]})},Dt=()=>{let{t:e}=c(),t=Se(e=>e.preference),n=Se(e=>e.setPreference);return(0,X.jsxs)(h,{width:`full`,children:[(0,X.jsx)(g,{title:e(`appearance.title`)}),(0,X.jsx)(Y,{title:e(`appearance.mode`),description:e(`appearance.storedHere`),children:(0,X.jsx)(Me,{"aria-label":e(`appearance.mode`),value:t,onValueChange:e=>{we(e)&&n(e)},className:`sm:grid-cols-3`,children:Ce.map(t=>(0,X.jsx)(tt,{value:t,label:e(`theme.${t}`),icon:xe[t]},t))})})]})},Ot=()=>{let{t:e}=c(),t=(0,Z.useId)(),[n,r]=(0,Z.useState)(``),[i,a]=(0,Z.useState)(``),o=Ye(),s=n.trim()!==``&&i.trim()!==``;return(0,X.jsx)(Y,{title:e(`assist.settings.tryIt`),titleAs:`h2`,children:(0,X.jsxs)(`form`,{className:`space-y-4`,onSubmit:e=>{e.preventDefault(),s&&o.mutate({text:n.trim(),instruction:i.trim()})},children:[(0,X.jsxs)(`div`,{className:`space-y-2`,children:[(0,X.jsx)(k,{htmlFor:`${t}-text`,children:e(`assist.settings.tryText`)}),(0,X.jsx)(qe,{id:`${t}-text`,value:n,rows:3,maxLength:Xe,onChange:e=>r(e.target.value)})]}),(0,X.jsxs)(`div`,{className:`space-y-2`,children:[(0,X.jsx)(k,{htmlFor:`${t}-instruction`,children:e(`assist.rewrite.instruction`)}),(0,X.jsx)(O,{id:`${t}-instruction`,value:i,maxLength:500,placeholder:e(`assist.rewrite.instructionPlaceholder`),onChange:e=>a(e.target.value)})]}),(0,X.jsx)($e,{error:o.error}),(0,X.jsx)(`div`,{className:`flex justify-end`,children:(0,X.jsx)(Qe,{type:`submit`,variant:`default`,size:`default`,pending:o.isPending,pendingLabel:e(`assist.working`),disabled:!s,children:e(`assist.rewrite.run`)})}),(0,X.jsx)(`div`,{"aria-live":`polite`,children:o.data?(0,X.jsxs)(`figure`,{className:`space-y-1 rounded-lg border bg-muted/40 p-3`,children:[(0,X.jsx)(`figcaption`,{className:`text-meta text-muted-foreground`,children:e(`assist.rewrite.proposal`,{model:o.data.model})}),(0,X.jsx)(`p`,{className:`text-sm whitespace-pre-wrap`,children:o.data.text})]}):null})]})})},kt=({usage:e})=>{let{t}=c(),n=[{key:`runs`,label:t(`assist.settings.runs`),value:e.runs},{key:`input`,label:t(`assist.settings.inputTokens`),value:e.inputTokens},{key:`output`,label:t(`assist.settings.outputTokens`),value:e.outputTokens}];return(0,X.jsx)(Y,{title:t(`assist.settings.usage`,{month:re(e.month)}),titleAs:`h2`,children:(0,X.jsx)(`dl`,{className:`grid gap-4 sm:grid-cols-3`,children:n.map(e=>(0,X.jsxs)(`div`,{className:`space-y-1`,children:[(0,X.jsx)(`dt`,{className:`text-meta text-muted-foreground`,children:e.label}),(0,X.jsx)(`dd`,{className:`text-2xl font-semibold tabular-nums`,children:e.value.toLocaleString()})]},e.key))})})},At=()=>{let{t:e}=c(),t=Je();return(0,X.jsxs)(h,{width:`narrow`,children:[(0,X.jsx)(g,{title:e(`settings.assist`)}),(0,X.jsx)(J,{query:t,loadingRows:3,children:t=>(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(Y,{title:e(`assist.settings.status`),titleAs:`h2`,actions:(0,X.jsx)(_,{tone:t.enabled?`success`:`muted`,label:t.enabled?e(`assist.settings.on`):e(`assist.settings.off`)}),children:[t.enabled?(0,X.jsxs)(`dl`,{className:`space-y-2 text-sm`,children:[(0,X.jsxs)(`div`,{className:`flex justify-between gap-3`,children:[(0,X.jsx)(`dt`,{className:`text-muted-foreground`,children:e(`assist.settings.provider`)}),(0,X.jsx)(`dd`,{className:`font-mono`,children:t.provider})]}),(0,X.jsxs)(`div`,{className:`flex justify-between gap-3`,children:[(0,X.jsx)(`dt`,{className:`text-muted-foreground`,children:e(`assist.settings.model`)}),(0,X.jsx)(`dd`,{className:`min-w-0 font-mono break-all`,children:t.model})]})]}):(0,X.jsx)(`p`,{className:`text-sm`,children:e(`assist.settings.offDescription`)}),(0,X.jsx)(`p`,{className:`mt-4 text-meta`,children:(0,X.jsx)(et,{href:Ze,children:e(`assist.settings.guide`)})})]}),t.enabled&&t.usage?(0,X.jsx)(kt,{usage:t.usage}):null,t.enabled?(0,X.jsx)(Ot,{}):null]})})]})},jt=e=>{let t=e.details?.plan?.impact?.affectedHeads;return typeof t==`number`?t:null},Mt=e=>w.success(E.t(`locales.deleted`,{label:e.label})),Nt=()=>{let e=We(),[t,n]=(0,Z.useState)(void 0),[r,i]=(0,Z.useState)(!1);return{attempt:async t=>{try{await e.mutateAsync({code:t.code,acknowledged:!1})}catch(r){if(!d(r,`SCHEMA_CHANGE_NOT_ACKNOWLEDGED`))throw r;e.reset(),n({locale:t,affectedHeads:jt(r)??0}),i(!0);return}Mt(t)},withContent:t,open:r,onOpenChange:i,confirm:()=>{t&&e.mutate({code:t.locale.code,acknowledged:!0},{onSuccess:()=>{Mt(t.locale),i(!1)}})},pending:e.isPending,error:e.error}},Pt=`locale-fallbacks-legend`,Ft=({control:e,locales:t,code:n})=>{let{t:r}=c(),{field:i,fieldState:a}=Pe({control:e,name:`fallbacks`}),[o,s]=(0,Z.useState)(``),l=i.value,u=e=>t.find(t=>t.code===e)?.label??e,d=t.filter(e=>e.code!==n&&!l.includes(e.code)),f=(e,t)=>{let n=[...l],[r]=n.splice(e,1);n.splice(t,0,r),i.onChange(n)};return(0,X.jsxs)(ce,{className:`gap-3`,"aria-labelledby":Pt,children:[(0,X.jsxs)(oe,{variant:`label`,className:`mb-0 flex items-center gap-1`,children:[(0,X.jsx)(`span`,{id:Pt,children:r(`locales.fallbacks`)}),(0,X.jsx)(le,{about:r(`locales.fallbacks`),children:r(`locales.fallbacksHint`)})]}),l.length>0?(0,X.jsx)(`ol`,{className:`space-y-1`,children:l.map((e,t)=>(0,X.jsxs)(`li`,{className:`flex items-center gap-2 rounded-lg border py-1 pr-1 pl-3 text-sm`,children:[(0,X.jsxs)(`span`,{className:`w-5 text-muted-foreground`,children:[t+1,`.`]}),(0,X.jsxs)(`span`,{className:`flex-1`,children:[u(e),` `,(0,X.jsx)(`span`,{className:`font-mono text-xs text-muted-foreground`,children:e})]}),(0,X.jsx)(D,{type:`button`,variant:`ghost`,size:`icon-sm`,"aria-label":r(`locales.moveUp`,{locale:u(e)}),disabled:t===0,onClick:()=>f(t,t-1),children:(0,X.jsx)(de,{"aria-hidden":`true`})}),(0,X.jsx)(D,{type:`button`,variant:`ghost`,size:`icon-sm`,"aria-label":r(`locales.moveDown`,{locale:u(e)}),disabled:t===l.length-1,onClick:()=>f(t,t+1),children:(0,X.jsx)(ue,{"aria-hidden":`true`})}),(0,X.jsx)(D,{type:`button`,variant:`ghost`,size:`icon-sm`,"aria-label":r(`locales.removeFallback`,{locale:u(e)}),onClick:()=>i.onChange(l.filter(t=>t!==e)),children:(0,X.jsx)(te,{"aria-hidden":`true`})})]},e))}):(0,X.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:r(`locales.noFallbacks`)}),d.length>0&&l.length<10?(0,X.jsxs)(ge,{value:o,onValueChange:e=>{i.onChange([...l,e]),s(``)},children:[(0,X.jsx)(pe,{className:`w-full sm:w-64`,"aria-label":r(`locales.addFallback`),children:(0,X.jsx)(fe,{placeholder:r(`locales.addFallback`)})}),(0,X.jsx)(me,{children:d.map(e=>(0,X.jsxs)(he,{value:e.code,children:[e.label,` (`,e.code,`)`]},e.code))})]}):null,(0,X.jsx)(Ie,{message:a.error?.message})]})},It=B({code:R().trim().min(1,`validation.required`).max(35,`validation.localeCode`).regex(Ve,`validation.localeCode`),label:P(),fallbacks:Re(R())}),$=e=>({code:e?.code??``,label:e?.label??``,fallbacks:e?.fallbacks??[]}),Lt=(e,t,n)=>{let r=Ke(),i=He(),a=I({resolver:F(It),defaultValues:$(t)}),{reset:o}=a;(0,Z.useEffect)(()=>{e&&(o($(t)),r.reset(),i.reset())},[e,t,o]);let s=a.handleSubmit(async({code:e,label:a,fallbacks:o})=>{(await L(t?i.mutateAsync({code:t.code,input:{label:a,fallbacks:o}}):r.mutateAsync({code:e,label:a,fallbacks:o}))).ok&&(w.success(E.t(t?`locales.saved`:`locales.created`,{label:a})),n())}),c=t?i:r;return{form:a,onSubmit:s,pending:c.isPending,error:c.error}},Rt=({open:e,onOpenChange:t,locale:n,locales:r})=>{let{t:i}=c(),{form:a,onSubmit:o,pending:s,error:l}=Lt(e,n,()=>t(!1)),u=a.watch(`code`);return(0,X.jsxs)(at,{open:e,onOpenChange:t,size:`md`,title:n?i(`locales.editTitle`,{label:n.label}):i(`locales.addTitle`),dirty:a.formState.isDirty,pending:s,submitLabel:i(n?`common.saveChanges`:`locales.add`),pendingLabel:i(`common.saving`),onSubmit:e=>void o(e),children:[(0,X.jsx)(N,{control:a.control,name:`code`,label:i(`locales.code`),hint:i(`locales.codeHint`),autoComplete:`off`,spellCheck:!1,className:`font-mono`,disabled:n!==void 0}),(0,X.jsx)(N,{control:a.control,name:`label`,label:i(`locales.label`),autoComplete:`off`}),(0,X.jsx)(Ft,{control:a.control,locales:r,code:u}),(0,X.jsx)(A,{error:l})]})},zt=({locale:e,chain:t,canManage:n,onEdit:r,onMakeDefault:i,onDelete:a})=>{let{t:o}=c(),[s,l]=(0,Z.useState)(!1);return(0,X.jsxs)(W,{children:[(0,X.jsx)(G,{children:(0,X.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,X.jsx)(S,{children:e.label}),e.isDefault?(0,X.jsx)(y,{variant:`secondary`,children:o(`locales.default`)}):null]})}),(0,X.jsx)(G,{className:`font-mono text-xs`,children:e.code}),(0,X.jsx)(G,{className:`font-mono text-xs`,children:t.length>0?t.join(` → `):o(`common.none`)}),(0,X.jsx)(G,{className:`text-right`,children:n?(0,X.jsxs)(je,{children:[(0,X.jsx)(j,{tone:`danger`,open:s,onOpenChange:l,title:o(`locales.deleteTitle`,{label:e.label}),description:o(`locales.deleteDescription`),confirmLabel:o(`common.delete`),pendingLabel:o(`locales.deleting`),onConfirm:()=>a(e),children:(0,X.jsx)(ke,{asChild:!0,children:(0,X.jsx)(D,{variant:`ghost`,size:`icon-sm`,"aria-label":`${o(`common.actions`)}: ${e.label}`,children:(0,X.jsx)(ve,{"aria-hidden":`true`})})})}),(0,X.jsxs)(Ae,{align:`end`,onCloseAutoFocus:e=>s&&e.preventDefault(),children:[(0,X.jsxs)(M,{onSelect:()=>r(e),children:[(0,X.jsx)(De,{"aria-hidden":`true`}),o(`common.edit`)]}),e.isDefault?null:(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(M,{onSelect:()=>i(e),children:[(0,X.jsx)(gt,{"aria-hidden":`true`}),o(`locales.makeDefault`)]}),(0,X.jsxs)(M,{variant:`destructive`,onSelect:()=>l(!0),children:[(0,X.jsx)(ae,{"aria-hidden":`true`}),o(`common.delete`)]})]})]})]}):null})]})},Bt=({locales:e,canManage:t,onEdit:n,onMakeDefault:r,onDelete:i})=>{let{t:a}=c(),o=e.find(e=>e.isDefault);return(0,X.jsx)(K,{children:(0,X.jsxs)(q,{children:[(0,X.jsx)(z,{children:(0,X.jsxs)(W,{children:[(0,X.jsx)(V,{children:a(`locales.label`)}),(0,X.jsx)(V,{children:a(`locales.code`)}),(0,X.jsx)(V,{children:a(`locales.fallbacks`)}),(0,X.jsx)(V,{children:(0,X.jsx)(`span`,{className:`sr-only`,children:a(`common.actions`)})})]})}),(0,X.jsx)(U,{children:e.map(e=>(0,X.jsx)(zt,{locale:e,chain:[...e.fallbacks,...o&&!e.isDefault&&!e.fallbacks.includes(o.code)?[o.code]:[]],canManage:t,onEdit:n,onMakeDefault:r,onDelete:i},e.code))})]})})},Vt=()=>{let{t:e}=c(),t=Ge(),n=ut(`schema.create`),r=Ue(),i=dt(),a=Nt(),[o,s]=(0,Z.useState)({open:!1,locale:void 0}),l=t.data?.find(e=>e.isDefault),u=a.withContent;return(0,X.jsxs)(h,{width:`full`,children:[(0,X.jsx)(g,{title:e(`locales.title`),actions:n?(0,X.jsxs)(D,{onClick:()=>s({open:!0,locale:void 0}),children:[(0,X.jsx)(Oe,{"aria-hidden":`true`}),e(`locales.add`)]}):null}),(0,X.jsx)(J,{query:t,isEmpty:e=>e.length===0,empty:(0,X.jsx)(v,{icon:ye,title:e(`locales.empty`)}),children:e=>(0,X.jsx)(Bt,{locales:e,canManage:n,onEdit:e=>s({open:!0,locale:e}),onMakeDefault:e=>{r.reset(),i.ask(e)},onDelete:a.attempt})}),(0,X.jsx)(Rt,{open:o.open,onOpenChange:e=>s(t=>({...t,open:e})),locale:o.locale,locales:t.data??[]}),(0,X.jsx)(_e,{open:i.open,onOpenChange:i.onOpenChange,title:e(`locales.defaultTitle`,{label:i.target?.label??``}),description:e(`locales.defaultDescription`,{label:i.target?.label??``,current:l?.label??``}),acknowledgement:e(`locales.defaultAcknowledge`),confirmLabel:e(`locales.makeDefault`),destructive:!0,pending:r.isPending,pendingLabel:e(`common.saving`),error:r.error,onConfirm:()=>{let t=i.target;t&&r.mutate(t.code,{onSuccess:()=>{w.success(e(`locales.defaultChanged`,{label:t.label})),i.close()}})}}),(0,X.jsx)(_e,{open:a.open,onOpenChange:a.onOpenChange,title:e(`locales.deleteTitle`,{label:u?.locale.label??``}),description:e(`locales.deleteContent`,{count:u?.affectedHeads??0,label:u?.locale.label??``}),acknowledgement:e(`locales.deleteAcknowledge`,{count:u?.affectedHeads??0}),confirmLabel:e(`common.delete`),destructive:!0,pending:a.pending,pendingLabel:e(`locales.deleting`),error:a.error,onConfirm:a.confirm})]})},Ht=B({name:P()}),Ut=()=>{let{data:e}=p(),t=ee(),n=I({resolver:F(Ht),defaultValues:{name:e?.user.name??``}}),{reset:r,formState:i}=n,a=e?.user.name;return(0,Z.useEffect)(()=>{!i.isDirty&&a!==void 0&&r({name:a})},[a,r,i.isDirty]),{form:n,onSubmit:n.handleSubmit(async e=>{let n=await L(t.mutateAsync(e));n.ok&&(r({name:n.value.name}),w.success(E.t(`profile.detailsSaved`)))}),updateProfile:t,email:e?.user.email??``}},Wt=`profile-email`,Gt=`profile-email-hint`,Kt=({onDirtyChange:e})=>{let{t}=c(),{form:n,onSubmit:r,updateProfile:i,email:a}=Ut(),{isDirty:o}=n.formState;return(0,Z.useEffect)(()=>e(o),[o,e]),(0,X.jsx)(Y,{title:t(`profile.detailsTitle`),children:(0,X.jsx)(`form`,{noValidate:!0,onSubmit:e=>void r(e),className:`max-w-md`,children:(0,X.jsxs)(T,{children:[(0,X.jsx)(N,{control:n.control,name:`name`,label:t(`auth.name`),autoComplete:`name`}),(0,X.jsxs)(se,{children:[(0,X.jsx)(ze,{htmlFor:Wt,label:t(`auth.email`),hint:t(`profile.emailHint`),hintId:Gt}),(0,X.jsx)(O,{id:Wt,value:a,readOnly:!0,"aria-describedby":Gt})]}),(0,X.jsx)(A,{error:i.error}),(0,X.jsx)(`div`,{children:(0,X.jsx)(m,{pending:i.isPending,pendingLabel:t(`common.saving`),disabled:!o,children:t(`common.saveChanges`)})})]})})})},qt=Le({currentPassword:R().min(1,`validation.required`),password:Ne()}),Jt={currentPassword:``,password:``,confirmPassword:``},Yt=()=>{let e=f(),t=I({resolver:F(qt),defaultValues:Jt});return{form:t,onSubmit:t.handleSubmit(async({currentPassword:n,password:r})=>{(await L(e.mutateAsync({currentPassword:n,newPassword:r}))).ok&&(t.reset(Jt),w.success(E.t(`profile.passwordChanged`)))}),changePassword:e}},Xt=({onDirtyChange:e})=>{let{t}=c(),{form:n,onSubmit:r,changePassword:i}=Yt(),{isDirty:a}=n.formState;return(0,Z.useEffect)(()=>e(a),[a,e]),(0,X.jsx)(Y,{title:t(`profile.passwordTitle`),description:t(`profile.passwordDescription`),children:(0,X.jsx)(`form`,{noValidate:!0,onSubmit:e=>void r(e),className:`max-w-md`,children:(0,X.jsxs)(T,{children:[(0,X.jsx)(N,{control:n.control,name:`currentPassword`,label:t(`profile.currentPassword`),type:`password`,autoComplete:`current-password`}),(0,X.jsx)(N,{control:n.control,name:`password`,label:t(`auth.newPassword`),description:t(`auth.passwordHint`),type:`password`,autoComplete:`new-password`}),(0,X.jsx)(N,{control:n.control,name:`confirmPassword`,label:t(`auth.confirmPassword`),type:`password`,autoComplete:`new-password`}),(0,X.jsx)(A,{error:i.error}),(0,X.jsx)(`div`,{children:(0,X.jsx)(m,{pending:i.isPending,pendingLabel:t(`common.saving`),children:t(`profile.changePassword`)})})]})})})},Zt=()=>{let{t:e}=c(),[t,n]=(0,Z.useState)(!1),[r,i]=(0,Z.useState)(!1),a=(0,Z.useCallback)(e=>n(e),[]),o=(0,Z.useCallback)(e=>i(e),[]);return(0,X.jsxs)(h,{width:`full`,children:[(0,X.jsx)(g,{title:e(`profile.title`)}),(0,X.jsx)(Kt,{onDirtyChange:a}),(0,X.jsx)(Xt,{onDirtyChange:o}),(0,X.jsx)(ie,{when:t||r})]})},Qt=()=>r({queryKey:i.sessions,queryFn:()=>l.sessions.list(),meta:{silent:!0}}),$t=()=>{let e=o();return a({mutationKey:[`sessions`,`revoke`],mutationFn:e=>u(()=>l.sessions.revoke(e)),onSettled:()=>e.invalidateQueries({queryKey:i.sessions})})},en=[[/Edg\//,`Edge`],[/OPR\//,`Opera`],[/Firefox\//,`Firefox`],[/Chrome\//,`Chrome`],[/Safari\//,`Safari`]],tn=[[/iPhone|iPad/,`iOS`],[/Android/,`Android`],[/Mac OS X|Macintosh/,`macOS`],[/Windows/,`Windows`],[/Linux/,`Linux`]],nn=(e,t)=>t.find(([t])=>t.test(e))?.[1],rn=e=>{if(!e)return;let t=nn(e,en),n=nn(e,tn);return t&&n?`${t} · ${n}`:t??n},an=({sessions:e,onRevoke:t})=>{let{t:n}=c();return(0,X.jsx)(K,{children:(0,X.jsxs)(q,{children:[(0,X.jsx)(z,{children:(0,X.jsxs)(W,{children:[(0,X.jsx)(V,{children:n(`sessions.device`)}),(0,X.jsx)(V,{children:n(`sessions.ipAddress`)}),(0,X.jsx)(V,{children:n(`sessions.signedIn`)}),(0,X.jsx)(V,{children:n(`sessions.lastActive`)}),(0,X.jsx)(V,{children:(0,X.jsx)(`span`,{className:`sr-only`,children:n(`common.actions`)})})]})}),(0,X.jsx)(U,{children:e.map(e=>(0,X.jsxs)(W,{children:[(0,X.jsx)(G,{children:(0,X.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,X.jsx)(S,{children:rn(e.userAgent)??n(`sessions.unknownDevice`)}),e.current?(0,X.jsx)(y,{variant:`secondary`,children:n(`sessions.current`)}):null]})}),(0,X.jsx)(G,{className:`font-mono text-xs`,children:e.ip??n(`common.unknown`)}),(0,X.jsx)(G,{title:x(e.createdAt),children:b(e.createdAt)}),(0,X.jsx)(G,{title:x(e.lastSeenAt),children:b(e.lastSeenAt)}),(0,X.jsx)(G,{className:`text-right`,children:e.current?null:(0,X.jsx)(j,{tone:`danger`,title:n(`sessions.revokeTitle`),description:n(`sessions.revokeDescription`),confirmLabel:n(`common.revoke`),onConfirm:()=>t(e),trigger:(0,X.jsx)(D,{variant:`outline`,size:`sm`,children:n(`common.revoke`)})})})]},e.id))})]})})},on={settings:C(`/app/settings`)({component:vt}),profile:C(`/app/settings/profile`)({component:Zt}),sessions:C(`/app/settings/sessions`)({component:()=>{let{t:e}=c(),t=Qt(),n=$t(),r=async t=>{await n.mutateAsync(t.id),w.success(e(`sessions.revoked`))};return(0,X.jsxs)(h,{width:`full`,children:[(0,X.jsx)(g,{title:e(`sessions.title`)}),(0,X.jsx)(J,{query:t,isEmpty:e=>e.length===0,empty:(0,X.jsx)(v,{icon:Ee,title:e(`sessions.empty`)}),children:e=>(0,X.jsx)(an,{sessions:e,onRevoke:r})})]})}}),theme:C(`/app/settings/theme`)({component:Dt}),locales:C(`/app/settings/locales`)({component:Vt}),assist:C(`/app/settings/assist`)({component:At}),apiTokens:C(`/app/settings/api-tokens`)({component:Et})};export{on as settingsLazyRoutes};
2
- //# sourceMappingURL=settings-D-v8gL8F.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"settings-D-v8gL8F.js","names":["z.object","z.string","z.enum","EMPTY","zodResolver","Table","TableRoot","useState","Table","useId","useState","_Fragment","i18next","useState","useState","z.object","z.string","z.array","zodResolver","i18next","useState","MoreHorizontal","_Fragment","Trash2","Table","TableRoot","useState","Table","z.object","zodResolver","i18next","z.string","zodResolver","i18next","useState","useCallback","TableRoot","__toESM","require_jsx_runtime","useQuery","queryKeys","useMutation","useQueryClient","createLucideIcon","useTranslation","withCsrf","hasErrorCode","useChangePassword","useUpdateProfile","useMe","X","SubmitButton","Page","PageHeader","StatusChip","EmptyState","Badge","Outlet","formatRelativeTime","formatDateTime","formatMonth","RowTitle","createLazyRoute","UnsavedChangesGuard","toast","Trash","FieldLegend","Field","FieldSet","InfoHint","FieldGroup","instance","Button","Input","Label","ArrowDown","ArrowUp","SelectValue","SelectTrigger","SelectContent","SelectItem","Select","FormError","InlineConfirm","ConfirmDialog","Ellipsis","Globe","KeyRound","THEME_ICONS","useThemeStore","THEME_PREFERENCES","isThemePreference","SETTINGS_GROUPS","MonitorSmartphone","Pencil","Plus","DropdownMenuItem","DropdownMenuTrigger","DropdownMenuContent","DropdownMenu","RadioGroup","newPasswordField","useController","useWatch","FormTextField","requiredText","FormFieldError","withPasswordConfirmation","u","useForm","settle","string","TableHeader","object","TableHead","_enum","TableBody","TableRow","TableCell","TableCard","Table$3","array","HintedLabel","QueryView","FormRadioGroup","LOCALE_CODE_PATTERN","useUpdateLocale","useSetDefaultLocale","useDeleteLocale","useLocales","useCreateLocale","Textarea","useAssistStatus","useRewriteText","REWRITE_MAX_TEXT","ASSIST_DOCS_URL","AssistButton","AssistError","Panel","ExternalLink","RadioTile","SubNav","SubNavGroup","SubNavLink","FormSheet","FormSelectField","useCreateApiToken","useRevokeApiToken","useApiTokens","useNetworkPermission","useConfirmTarget","useRoles","useRoleNames","SecretReveal","__iconData","Star","import_jsx_runtime","Nav","permissions","t","sections","group","section","Icon","Settings","import_react","require_react","TOKEN_EXPIRY_OPTIONS","DAY_MS","expiryToDate","option","now","createTokenSchema","EMPTY$1","useCreateTokenForm","createToken","form","open","reset","network","scope","canChooseNetwork","roleId","created","expiry","onCreated","CreateSheet","roles","me","mayCreateNetwork","role","scopeOptions","roleOptions","expiryOptions","onCloseAutoFocus","onSubmit","event","Table$2","tokens","token","roleNames","siteName","onRevoke","ApiTokens","revoke","creating","setCreating","secret","setSecret","revokeToken","createButton","data","Appearance","preference","state","setPreference","value","TryIt","id","text","setText","instruction","setInstruction","rewrite","ready","Usage","rows","usage","row","Assist","status","affectedHeadsOf","count","error","announceDeleted","locale","useDeleteLocaleFlow","deleteLocale","withContent","setWithContent","setOpen","LEGEND_ID","FallbackChain","adding","setAdding","chain","field","labelOf","locales","available","code","move","next","moved","from","to","index","entry","fieldState","localeSchema","valuesFor","useLocaleForm","createLocale","updateLocale","onDone","mutation","LocaleSheet","onOpenChange","Row","deleting","setDeleting","canManage","onDelete","onEdit","onMakeDefault","Table$1","defaultLocale","Locales","setDefault","makeDefault","deletion","sheet","setSheet","currentDefault","current","target","profileSchema","useProfileDetailsForm","updateProfile","name","formState","saved","values","EMAIL_ID","EMAIL_HINT_ID","Details","onDirtyChange","isDirty","email","changePasswordSchema","EMPTY","useChangePasswordForm","changePassword","password","Password","Profile","detailsDirty","setDetailsDirty","passwordDirty","setPasswordDirty","onDetailsDirtyChange","dirty","onPasswordDirtyChange","useSessions","adminApi","useRevokeSession","queryClient","BROWSERS","SYSTEMS","firstMatch","table","pattern","describeUserAgent","userAgent","browser","system","Table","sessions","session","settingsLazyRoutes","revokeSession"],"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/star.mjs","../../src/features/Settings/Nav/index.tsx","../../src/features/Settings/index.tsx","../../src/features/Settings/ApiTokens/constants.ts","../../src/features/Settings/ApiTokens/hooks/useCreateTokenForm.ts","../../src/features/Settings/ApiTokens/CreateSheet/index.tsx","../../src/features/Settings/ApiTokens/Table/index.tsx","../../src/features/Settings/ApiTokens/index.tsx","../../src/features/Settings/Appearance/index.tsx","../../src/features/Settings/Assist/TryIt/index.tsx","../../src/features/Settings/Assist/Usage/index.tsx","../../src/features/Settings/Assist/index.tsx","../../src/features/Settings/Locales/hooks/useDeleteLocaleFlow.ts","../../src/features/Settings/Locales/FallbackChain/index.tsx","../../src/features/Settings/Locales/hooks/useLocaleForm.ts","../../src/features/Settings/Locales/LocaleSheet/index.tsx","../../src/features/Settings/Locales/Table/Row/index.tsx","../../src/features/Settings/Locales/Table/index.tsx","../../src/features/Settings/Locales/index.tsx","../../src/features/Settings/Profile/hooks/useProfileDetailsForm.ts","../../src/features/Settings/Profile/Details/index.tsx","../../src/features/Settings/Profile/hooks/useChangePasswordForm.ts","../../src/features/Settings/Profile/Password/index.tsx","../../src/features/Settings/Profile/index.tsx","../../src/api/sessions.ts","../../src/helpers/describeUserAgent.ts","../../src/features/Settings/Sessions/Table/index.tsx","../../src/features/Settings/Sessions/index.tsx","../../src/app/lazyRoutes/settings.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: \"star\",\n size: 24,\n node: [\n [\n \"path\",\n {\n d: \"M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z\",\n key: \"r04s7s\"\n }\n ]\n ]\n};\n__iconData.node;\nconst Star = createLucideIcon(__iconData);\n\nexport { __iconData, Star as default };\n//# sourceMappingURL=star.mjs.map\n","import { useTranslation } from 'react-i18next';\nimport { useMe } from '@/api/auth';\nimport { SubNav, SubNavGroup } from '@/components/SubNav';\nimport { SubNavLink } from '@/components/SubNavLink';\nimport { SETTINGS_GROUPS } from '../sections';\n\n/** Settings sections, grouped (Account, Workspace, Developer); groups the admin can't use are hidden. */\nexport const Nav = () => {\n const { t } = useTranslation();\n const permissions = useMe().data?.globalPermissions ?? [];\n return (\n <SubNav label={t('settings.sections')}>\n {SETTINGS_GROUPS.map((group) => {\n const sections = group.sections.filter(\n (section) => !section.permission || permissions.includes(section.permission),\n );\n return sections.length === 0 ? null : (\n <SubNavGroup key={group.key} label={t(`settings.${group.key}`)}>\n {sections.map((section) => {\n const Icon = section.icon;\n return (\n <SubNavLink key={section.key} to={section.to}>\n <Icon aria-hidden=\"true\" />\n {t(`settings.${section.key}`)}\n </SubNavLink>\n );\n })}\n </SubNavGroup>\n );\n })}\n </SubNav>\n );\n};\n","import { Outlet } from '@tanstack/react-router';\nimport { Page } from '@/components/Page';\nimport { Nav } from './Nav';\n\n/** Settings: the section navigation beside the current section's screen. */\nexport const Settings = () => (\n <Page>\n <div className=\"flex flex-col gap-6 lg:flex-row lg:items-start lg:gap-8\">\n <Nav />\n <div className=\"min-w-0 flex-1\">\n <Outlet />\n </div>\n </div>\n </Page>\n);\n","/** Expiry choices in days; `never` keeps the token until it's revoked. */\nexport const TOKEN_EXPIRY_OPTIONS = ['never', '30', '90', '365'] as const;\n\nexport type TokenExpiryOption = (typeof TOKEN_EXPIRY_OPTIONS)[number];\n\nconst DAY_MS = 24 * 60 * 60 * 1000;\n\nexport const expiryToDate = (option: TokenExpiryOption, now: Date = new Date()): string | null =>\n option === 'never' ? null : new Date(now.getTime() + Number(option) * DAY_MS).toISOString();\n","import { zodResolver } from '@hookform/resolvers/zod';\nimport type { CreatedApiToken } from '@shapio/client';\nimport { useEffect } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { z } from 'zod';\nimport { useCreateApiToken } from '@/api/tokens';\nimport { settle } from '@/helpers/settle';\nimport { requiredText } from '@/helpers/validation';\nimport { expiryToDate, TOKEN_EXPIRY_OPTIONS } from '../constants';\n\n/** `site`: the token works on this site only (the default). `network`: every site and network actions. */\nexport const TOKEN_SCOPES = ['site', 'network'] as const;\n\nconst createTokenSchema = z.object({\n name: requiredText(),\n roleId: z.string().min(1, 'validation.selectRole'),\n expiry: z.enum(TOKEN_EXPIRY_OPTIONS),\n scope: z.enum(TOKEN_SCOPES),\n});\n\nexport type CreateTokenValues = z.infer<typeof createTokenSchema>;\n\nconst EMPTY: CreateTokenValues = { name: '', roleId: '', expiry: '90', scope: 'site' };\n\n/**\n * `canChooseNetwork(roleId)`: whether a network token may be made with that role (the creator holds\n * `users.manage` and it is an admin role; delivery tokens always belong to a site). `network` is always sent,\n * so the server never picks the kind on its own.\n */\nexport const useCreateTokenForm = (\n open: boolean,\n onCreated: (created: CreatedApiToken) => void,\n canChooseNetwork: (roleId: string) => boolean,\n) => {\n const createToken = useCreateApiToken();\n const form = useForm<CreateTokenValues>({ resolver: zodResolver(createTokenSchema), defaultValues: EMPTY });\n const { reset } = form;\n useEffect(() => {\n if (open) {\n reset(EMPTY);\n }\n }, [open, reset]);\n const onSubmit = form.handleSubmit(async ({ name, roleId, expiry, scope }) => {\n const network = scope === 'network' && canChooseNetwork(roleId);\n const created = await settle(\n createToken.mutateAsync({ name, roleId, expiresAt: expiryToDate(expiry), network }),\n );\n if (!created.ok) {\n return;\n }\n reset(EMPTY);\n onCreated(created.value);\n });\n return { form, onSubmit, createToken };\n};\n","import type { CreatedApiToken } from '@shapio/client';\nimport { useWatch } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\nimport { useMe } from '@/api/auth';\nimport { useRoles } from '@/api/roles';\nimport { FormError } from '@/components/FormError';\nimport { FormRadioGroup } from '@/components/FormRadioGroup';\nimport { FormSelectField } from '@/components/FormSelectField';\nimport { FormSheet } from '@/components/FormSheet';\nimport { FormTextField } from '@/components/FormTextField';\nimport { TOKEN_EXPIRY_OPTIONS } from '../constants';\nimport { useCreateTokenForm } from '../hooks/useCreateTokenForm';\n\ntype CreateSheetProps = {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n onCreated: (created: CreatedApiToken) => void;\n /** See `FormSheet`: lets the page keep focus on the secret that replaces the sheet. */\n onCloseAutoFocus?: (event: Event) => void;\n};\n\nexport const CreateSheet = ({ open, onOpenChange, onCreated, onCloseAutoFocus }: CreateSheetProps) => {\n const { t } = useTranslation();\n const roles = useRoles();\n const { data: me } = useMe();\n const mayCreateNetwork = me?.networkPermissions.includes('users.manage') ?? false;\n const canChooseNetwork = (roleId: string) =>\n mayCreateNetwork && roles.data?.find((role) => role.id === roleId)?.kind === 'admin';\n const { form, onSubmit, createToken } = useCreateTokenForm(open, onCreated, canChooseNetwork);\n const roleId = useWatch({ control: form.control, name: 'roleId' });\n const scopeOptions = [\n {\n value: 'site',\n label: t('apiTokens.scopeSite', { name: me?.site.name ?? '' }),\n description: t('apiTokens.scopeSiteDescription'),\n },\n {\n value: 'network',\n label: t('apiTokens.scopeNetwork'),\n description: t('apiTokens.scopeNetworkDescription'),\n },\n ];\n const roleOptions = (roles.data ?? []).map((role) => ({ value: role.id, label: role.name }));\n const expiryOptions = TOKEN_EXPIRY_OPTIONS.map((option) => ({\n value: option,\n label:\n option === 'never' ? t('apiTokens.expiryNever') : t('apiTokens.expiryDays', { count: Number(option) }),\n }));\n return (\n <FormSheet\n open={open}\n onOpenChange={onOpenChange}\n size=\"md\"\n {...(onCloseAutoFocus ? { onCloseAutoFocus } : {})}\n title={t('apiTokens.createTitle')}\n dirty={form.formState.isDirty}\n pending={createToken.isPending}\n submitLabel={t('common.create')}\n pendingLabel={t('common.saving')}\n onSubmit={(event) => void onSubmit(event)}\n >\n <FormTextField control={form.control} name=\"name\" label={t('apiTokens.name')} autoComplete=\"off\" />\n <FormSelectField\n control={form.control}\n name=\"roleId\"\n label={t('apiTokens.role')}\n options={roleOptions}\n />\n {canChooseNetwork(roleId) ? (\n <FormRadioGroup\n control={form.control}\n name=\"scope\"\n legend={t('apiTokens.scope')}\n options={scopeOptions}\n />\n ) : null}\n <FormSelectField\n control={form.control}\n name=\"expiry\"\n label={t('apiTokens.expiry')}\n options={expiryOptions}\n />\n <FormError error={createToken.error ?? roles.error} />\n </FormSheet>\n );\n};\n","import type { ApiToken } from '@shapio/client';\nimport { useTranslation } from 'react-i18next';\nimport { InlineConfirm } from '@/components/InlineConfirm';\nimport { RowTitle } from '@/components/RowTitle';\nimport { StatusChip } from '@/components/StatusChip';\nimport { TableCard } from '@/components/TableCard';\nimport { Button } from '@/components/ui/button';\nimport {\n Table as TableRoot,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from '@/components/ui/table';\nimport { formatDateTime, formatRelativeTime } from '@/helpers/formatDate';\n\ntype TableProps = {\n tokens: ApiToken[];\n roleNames: ReadonlyMap<string, string>;\n /** This site's name: every token not marked \"Every site\" belongs to it. */\n siteName: string;\n /** Resolves once the token is revoked (the confirmation waits for it). */\n onRevoke: (token: ApiToken) => Promise<unknown>;\n};\n\nexport const Table = ({ tokens, roleNames, siteName, onRevoke }: TableProps) => {\n const { t } = useTranslation();\n return (\n <TableCard>\n <TableRoot>\n <TableHeader>\n <TableRow>\n <TableHead>{t('apiTokens.name')}</TableHead>\n <TableHead>{t('apiTokens.prefix')}</TableHead>\n <TableHead>{t('apiTokens.role')}</TableHead>\n <TableHead>{t('apiTokens.appliesTo')}</TableHead>\n <TableHead>{t('apiTokens.status')}</TableHead>\n <TableHead>{t('apiTokens.lastUsed')}</TableHead>\n <TableHead>{t('apiTokens.expires')}</TableHead>\n <TableHead>\n <span className=\"sr-only\">{t('common.actions')}</span>\n </TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {tokens.map((token) => (\n <TableRow key={token.id}>\n <TableCell>\n <RowTitle>{token.name}</RowTitle>\n </TableCell>\n <TableCell className=\"font-mono text-xs\">{`${token.tokenPrefix}…`}</TableCell>\n <TableCell>{roleNames.get(token.roleId) ?? t('common.unknown')}</TableCell>\n <TableCell>{token.siteId === null ? t('sites.everySite') : siteName}</TableCell>\n <TableCell>\n {token.revokedAt ? (\n <StatusChip tone=\"muted\" label={t('apiTokens.revokedBadge')} />\n ) : (\n <StatusChip tone=\"success\" label={t('apiTokens.active')} />\n )}\n </TableCell>\n <TableCell title={formatDateTime(token.lastUsedAt) || undefined}>\n {token.lastUsedAt ? formatRelativeTime(token.lastUsedAt) : t('common.never')}\n </TableCell>\n <TableCell>{token.expiresAt ? formatDateTime(token.expiresAt) : t('common.never')}</TableCell>\n <TableCell className=\"text-right\">\n {token.revokedAt ? null : (\n <InlineConfirm\n tone=\"danger\"\n title={t('apiTokens.revokeTitle', { name: token.name })}\n description={t('apiTokens.revokeDescription')}\n confirmLabel={t('common.revoke')}\n onConfirm={() => onRevoke(token)}\n trigger={\n <Button variant=\"outline\" size=\"sm\" aria-label={`${t('common.revoke')}: ${token.name}`}>\n {t('common.revoke')}\n </Button>\n }\n />\n )}\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </TableRoot>\n </TableCard>\n );\n};\n","import type { ApiToken } from '@shapio/client';\nimport { KeyRound, Plus } from 'lucide-react';\nimport { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { toast } from 'sonner';\nimport { useMe } from '@/api/auth';\nimport { useRoleNames } from '@/api/roles';\nimport { useApiTokens, useRevokeApiToken } from '@/api/tokens';\nimport { EmptyState } from '@/components/EmptyState';\nimport { Page } from '@/components/Page';\nimport { PageHeader } from '@/components/PageHeader';\nimport { QueryView } from '@/components/QueryView';\nimport { SecretReveal } from '@/components/SecretReveal';\nimport { Button } from '@/components/ui/button';\nimport { CreateSheet } from './CreateSheet';\nimport { Table } from './Table';\n\nexport const ApiTokens = () => {\n const { t } = useTranslation();\n const tokens = useApiTokens();\n const { names: roleNames } = useRoleNames();\n const siteName = useMe().data?.site.name ?? '';\n const revoke = useRevokeApiToken();\n const [creating, setCreating] = useState(false);\n // The new token's secret, held only in memory until the admin says they've copied it.\n const [secret, setSecret] = useState<string | undefined>(undefined);\n const revokeToken = async (token: ApiToken) => {\n await revoke.mutateAsync(token.id);\n toast.success(t('apiTokens.revoked'));\n };\n const createButton = (\n <Button onClick={() => setCreating(true)}>\n <Plus aria-hidden=\"true\" />\n {t('apiTokens.create')}\n </Button>\n );\n return (\n <Page width=\"full\">\n <PageHeader title={t('apiTokens.title')} actions={createButton} />\n {secret ? (\n <SecretReveal\n title={t('apiTokens.secretTitle')}\n description={t('apiTokens.secretDescription')}\n label={t('apiTokens.secretLabel')}\n secret={secret}\n dismissLabel={t('apiTokens.secretDone')}\n onDismiss={() => setSecret(undefined)}\n />\n ) : null}\n <QueryView\n query={tokens}\n isEmpty={(data) => data.length === 0}\n empty={\n <EmptyState\n icon={KeyRound}\n title={t('apiTokens.empty')}\n description={t('apiTokens.emptyDescription')}\n action={createButton}\n />\n }\n >\n {(data) => <Table tokens={data} roleNames={roleNames} siteName={siteName} onRevoke={revokeToken} />}\n </QueryView>\n <CreateSheet\n open={creating}\n onOpenChange={setCreating}\n onCreated={(created) => {\n setSecret(created.token);\n setCreating(false);\n }}\n // The secret took focus as it appeared; don't hand it back to the \"New token\" button.\n onCloseAutoFocus={(event) => secret !== undefined && event.preventDefault()}\n />\n </Page>\n );\n};\n","import { useTranslation } from 'react-i18next';\nimport { Page } from '@/components/Page';\nimport { PageHeader } from '@/components/PageHeader';\nimport { Panel } from '@/components/Panel';\nimport { RadioTile } from '@/components/RadioTile';\nimport { RadioGroup } from '@/components/ui/radio-group';\nimport { THEME_ICONS } from '@/constants/themeIcons';\nimport { isThemePreference, THEME_PREFERENCES, useThemeStore } from '@/stores/theme';\n\nexport const Appearance = () => {\n const { t } = useTranslation();\n const preference = useThemeStore((state) => state.preference);\n const setPreference = useThemeStore((state) => state.setPreference);\n return (\n <Page width=\"full\">\n <PageHeader title={t('appearance.title')} />\n <Panel title={t('appearance.mode')} description={t('appearance.storedHere')}>\n <RadioGroup\n aria-label={t('appearance.mode')}\n value={preference}\n onValueChange={(value) => {\n if (isThemePreference(value)) {\n setPreference(value);\n }\n }}\n className=\"sm:grid-cols-3\"\n >\n {THEME_PREFERENCES.map((option) => (\n <RadioTile key={option} value={option} label={t(`theme.${option}`)} icon={THEME_ICONS[option]} />\n ))}\n </RadioGroup>\n </Panel>\n </Page>\n );\n};\n","import { useId, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useRewriteText } from '@/api/assist';\nimport { AssistButton } from '@/components/AssistButton';\nimport { AssistError } from '@/components/AssistError';\nimport { Panel } from '@/components/Panel';\nimport { Input } from '@/components/ui/input';\nimport { Label } from '@/components/ui/label';\nimport { Textarea } from '@/components/ui/textarea';\nimport { REWRITE_MAX_INSTRUCTION, REWRITE_MAX_TEXT } from '@/constants/assist';\n\n/** A rewrite to check the configured model answers (writes nothing anywhere). */\nexport const TryIt = () => {\n const { t } = useTranslation();\n const id = useId();\n const [text, setText] = useState('');\n const [instruction, setInstruction] = useState('');\n const rewrite = useRewriteText();\n const ready = text.trim() !== '' && instruction.trim() !== '';\n return (\n <Panel title={t('assist.settings.tryIt')} titleAs=\"h2\">\n <form\n className=\"space-y-4\"\n onSubmit={(event) => {\n event.preventDefault();\n if (ready) {\n rewrite.mutate({ text: text.trim(), instruction: instruction.trim() });\n }\n }}\n >\n <div className=\"space-y-2\">\n <Label htmlFor={`${id}-text`}>{t('assist.settings.tryText')}</Label>\n <Textarea\n id={`${id}-text`}\n value={text}\n rows={3}\n maxLength={REWRITE_MAX_TEXT}\n onChange={(event) => setText(event.target.value)}\n />\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor={`${id}-instruction`}>{t('assist.rewrite.instruction')}</Label>\n <Input\n id={`${id}-instruction`}\n value={instruction}\n maxLength={REWRITE_MAX_INSTRUCTION}\n placeholder={t('assist.rewrite.instructionPlaceholder')}\n onChange={(event) => setInstruction(event.target.value)}\n />\n </div>\n <AssistError error={rewrite.error} />\n <div className=\"flex justify-end\">\n <AssistButton\n type=\"submit\"\n variant=\"default\"\n size=\"default\"\n pending={rewrite.isPending}\n pendingLabel={t('assist.working')}\n disabled={!ready}\n >\n {t('assist.rewrite.run')}\n </AssistButton>\n </div>\n <div aria-live=\"polite\">\n {rewrite.data ? (\n <figure className=\"space-y-1 rounded-lg border bg-muted/40 p-3\">\n <figcaption className=\"text-meta text-muted-foreground\">\n {t('assist.rewrite.proposal', { model: rewrite.data.model })}\n </figcaption>\n <p className=\"text-sm whitespace-pre-wrap\">{rewrite.data.text}</p>\n </figure>\n ) : null}\n </div>\n </form>\n </Panel>\n );\n};\n","import type { AssistUsage } from '@shapio/client';\nimport { useTranslation } from 'react-i18next';\nimport { Panel } from '@/components/Panel';\nimport { formatMonth } from '@/helpers/formatDate';\n\ntype UsageProps = { usage: AssistUsage };\n\n/** This month's assist runs and tokens on this site (only for those who manage changes). */\nexport const Usage = ({ usage }: UsageProps) => {\n const { t } = useTranslation();\n const rows = [\n { key: 'runs', label: t('assist.settings.runs'), value: usage.runs },\n { key: 'input', label: t('assist.settings.inputTokens'), value: usage.inputTokens },\n { key: 'output', label: t('assist.settings.outputTokens'), value: usage.outputTokens },\n ];\n return (\n <Panel title={t('assist.settings.usage', { month: formatMonth(usage.month) })} titleAs=\"h2\">\n <dl className=\"grid gap-4 sm:grid-cols-3\">\n {rows.map((row) => (\n <div key={row.key} className=\"space-y-1\">\n <dt className=\"text-meta text-muted-foreground\">{row.label}</dt>\n <dd className=\"text-2xl font-semibold tabular-nums\">{row.value.toLocaleString()}</dd>\n </div>\n ))}\n </dl>\n </Panel>\n );\n};\n","import { useTranslation } from 'react-i18next';\nimport { useAssistStatus } from '@/api/assist';\nimport { Page } from '@/components/Page';\nimport { PageHeader } from '@/components/PageHeader';\nimport { Panel } from '@/components/Panel';\nimport { QueryView } from '@/components/QueryView';\nimport { StatusChip } from '@/components/StatusChip';\nimport { ASSIST_DOCS_URL } from '@/constants/assist';\nimport { ExternalLink } from '@/features/Publishing/ExternalLink';\nimport { TryIt } from './TryIt';\nimport { Usage } from './Usage';\n\n/**\n * Settings → Assist: whether editor assists are on, with which provider and model, this month's usage\n * (for those who manage changes) and a place to try a rewrite. Configuration is environment-only (no key\n * entry here, by design), so the page links to the guide.\n */\nexport const Assist = () => {\n const { t } = useTranslation();\n const status = useAssistStatus();\n return (\n <Page width=\"narrow\">\n <PageHeader title={t('settings.assist')} />\n <QueryView query={status} loadingRows={3}>\n {(data) => (\n <>\n <Panel\n title={t('assist.settings.status')}\n titleAs=\"h2\"\n actions={\n <StatusChip\n tone={data.enabled ? 'success' : 'muted'}\n label={data.enabled ? t('assist.settings.on') : t('assist.settings.off')}\n />\n }\n >\n {data.enabled ? (\n <dl className=\"space-y-2 text-sm\">\n <div className=\"flex justify-between gap-3\">\n <dt className=\"text-muted-foreground\">{t('assist.settings.provider')}</dt>\n <dd className=\"font-mono\">{data.provider}</dd>\n </div>\n <div className=\"flex justify-between gap-3\">\n <dt className=\"text-muted-foreground\">{t('assist.settings.model')}</dt>\n <dd className=\"min-w-0 font-mono break-all\">{data.model}</dd>\n </div>\n </dl>\n ) : (\n <p className=\"text-sm\">{t('assist.settings.offDescription')}</p>\n )}\n <p className=\"mt-4 text-meta\">\n <ExternalLink href={ASSIST_DOCS_URL}>{t('assist.settings.guide')}</ExternalLink>\n </p>\n </Panel>\n {data.enabled && data.usage ? <Usage usage={data.usage} /> : null}\n {data.enabled ? <TryIt /> : null}\n </>\n )}\n </QueryView>\n </Page>\n );\n};\n","import type { Locale } from '@shapio/client';\nimport { useState } from 'react';\nimport { toast } from 'sonner';\nimport { hasErrorCode } from '@/api/errors';\nimport { useDeleteLocale } from '@/api/locales';\nimport { i18next } from '@/app/i18n';\n\ntype WithContent = { locale: Locale; affectedHeads: number };\n\n/** The content count the server reports when a locale with content is deleted without acknowledgement. */\nconst affectedHeadsOf = (error: unknown): number | null => {\n const details = (error as { details?: { plan?: { impact?: { affectedHeads?: unknown } } } }).details;\n const count = details?.plan?.impact?.affectedHeads;\n return typeof count === 'number' ? count : null;\n};\n\nconst announceDeleted = (locale: Locale) =>\n toast.success(i18next.t('locales.deleted', { label: locale.label }));\n\n/**\n * Deleting a locale purges its content. The first attempt, from the row's inline confirmation, goes without\n * acknowledgement: an empty locale is simply removed. One holding content is refused with its content count,\n * and the question moves to a blocking dialog where the admin acknowledges that count.\n */\nexport const useDeleteLocaleFlow = () => {\n const deleteLocale = useDeleteLocale();\n const [withContent, setWithContent] = useState<WithContent | undefined>(undefined);\n const [open, setOpen] = useState(false);\n const attempt = async (locale: Locale) => {\n try {\n await deleteLocale.mutateAsync({ code: locale.code, acknowledged: false });\n } catch (error) {\n if (!hasErrorCode(error, 'SCHEMA_CHANGE_NOT_ACKNOWLEDGED')) {\n throw error;\n }\n deleteLocale.reset();\n setWithContent({ locale, affectedHeads: affectedHeadsOf(error) ?? 0 });\n setOpen(true);\n return;\n }\n announceDeleted(locale);\n };\n const confirm = () => {\n if (!withContent) {\n return;\n }\n deleteLocale.mutate(\n { code: withContent.locale.code, acknowledged: true },\n {\n onSuccess: () => {\n announceDeleted(withContent.locale);\n setOpen(false);\n },\n },\n );\n };\n return {\n attempt,\n withContent,\n open,\n onOpenChange: setOpen,\n confirm,\n pending: deleteLocale.isPending,\n error: deleteLocale.error,\n };\n};\n","import type { Locale } from '@shapio/client';\nimport { MAX_FALLBACK_CHAIN } from '@shapio/schema';\nimport { ArrowDown, ArrowUp, X } from 'lucide-react';\nimport { useState } from 'react';\nimport { useController, type Control } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\nimport { FormFieldError } from '@/components/FormFieldError';\nimport { InfoHint } from '@/components/InfoHint';\nimport { Button } from '@/components/ui/button';\nimport { FieldLegend, FieldSet } from '@/components/ui/field';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select';\nimport type { LocaleValues } from '../hooks/useLocaleForm';\n\nconst LEGEND_ID = 'locale-fallbacks-legend';\n\ntype FallbackChainProps = {\n control: Control<LocaleValues>;\n /** Every configured locale; the one being edited is excluded from the choices. */\n locales: readonly Locale[];\n code: string;\n};\n\n/** The ordered locales delivery tries when content is missing in this one (the default is always last). */\nexport const FallbackChain = ({ control, locales, code }: FallbackChainProps) => {\n const { t } = useTranslation();\n const { field, fieldState } = useController({ control, name: 'fallbacks' });\n const [adding, setAdding] = useState('');\n const chain = field.value;\n const labelOf = (value: string) => locales.find((locale) => locale.code === value)?.label ?? value;\n const available = locales.filter((locale) => locale.code !== code && !chain.includes(locale.code));\n const move = (from: number, to: number) => {\n const next = [...chain];\n const [moved] = next.splice(from, 1);\n next.splice(to, 0, moved as string);\n field.onChange(next);\n };\n return (\n <FieldSet className=\"gap-3\" aria-labelledby={LEGEND_ID}>\n <FieldLegend variant=\"label\" className=\"mb-0 flex items-center gap-1\">\n <span id={LEGEND_ID}>{t('locales.fallbacks')}</span>\n <InfoHint about={t('locales.fallbacks')}>{t('locales.fallbacksHint')}</InfoHint>\n </FieldLegend>\n {chain.length > 0 ? (\n <ol className=\"space-y-1\">\n {chain.map((value, index) => (\n <li key={value} className=\"flex items-center gap-2 rounded-lg border py-1 pr-1 pl-3 text-sm\">\n <span className=\"w-5 text-muted-foreground\">{index + 1}.</span>\n <span className=\"flex-1\">\n {labelOf(value)} <span className=\"font-mono text-xs text-muted-foreground\">{value}</span>\n </span>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-sm\"\n aria-label={t('locales.moveUp', { locale: labelOf(value) })}\n disabled={index === 0}\n onClick={() => move(index, index - 1)}\n >\n <ArrowUp aria-hidden=\"true\" />\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-sm\"\n aria-label={t('locales.moveDown', { locale: labelOf(value) })}\n disabled={index === chain.length - 1}\n onClick={() => move(index, index + 1)}\n >\n <ArrowDown aria-hidden=\"true\" />\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-sm\"\n aria-label={t('locales.removeFallback', { locale: labelOf(value) })}\n onClick={() => field.onChange(chain.filter((entry) => entry !== value))}\n >\n <X aria-hidden=\"true\" />\n </Button>\n </li>\n ))}\n </ol>\n ) : (\n <p className=\"text-sm text-muted-foreground\">{t('locales.noFallbacks')}</p>\n )}\n {available.length > 0 && chain.length < MAX_FALLBACK_CHAIN ? (\n <Select\n value={adding}\n onValueChange={(value) => {\n field.onChange([...chain, value]);\n setAdding('');\n }}\n >\n <SelectTrigger className=\"w-full sm:w-64\" aria-label={t('locales.addFallback')}>\n <SelectValue placeholder={t('locales.addFallback')} />\n </SelectTrigger>\n <SelectContent>\n {available.map((locale) => (\n <SelectItem key={locale.code} value={locale.code}>\n {locale.label} ({locale.code})\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n ) : null}\n <FormFieldError message={fieldState.error?.message} />\n </FieldSet>\n );\n};\n","import { zodResolver } from '@hookform/resolvers/zod';\nimport type { Locale } from '@shapio/client';\nimport { LOCALE_CODE_PATTERN } from '@shapio/schema';\nimport { useEffect } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { toast } from 'sonner';\nimport { z } from 'zod';\nimport { useCreateLocale, useUpdateLocale } from '@/api/locales';\nimport { i18next } from '@/app/i18n';\nimport { settle } from '@/helpers/settle';\nimport { requiredText } from '@/helpers/validation';\n\nconst MAX_CODE_LENGTH = 35;\n\nconst localeSchema = z.object({\n code: z\n .string()\n .trim()\n .min(1, 'validation.required')\n .max(MAX_CODE_LENGTH, 'validation.localeCode')\n .regex(LOCALE_CODE_PATTERN, 'validation.localeCode'),\n label: requiredText(),\n fallbacks: z.array(z.string()),\n});\n\nexport type LocaleValues = z.infer<typeof localeSchema>;\n\nconst valuesFor = (locale: Locale | undefined): LocaleValues => ({\n code: locale?.code ?? '',\n label: locale?.label ?? '',\n fallbacks: locale?.fallbacks ?? [],\n});\n\n/** Adds a locale, or edits one's label and fallback chain (the code is its identity and never changes). */\nexport const useLocaleForm = (open: boolean, locale: Locale | undefined, onDone: () => void) => {\n const createLocale = useCreateLocale();\n const updateLocale = useUpdateLocale();\n const form = useForm<LocaleValues>({\n resolver: zodResolver(localeSchema),\n defaultValues: valuesFor(locale),\n });\n const { reset } = form;\n useEffect(() => {\n if (open) {\n reset(valuesFor(locale));\n createLocale.reset();\n updateLocale.reset();\n }\n // Only when the dialog opens; the mutation objects change identity on every render.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open, locale, reset]);\n const onSubmit = form.handleSubmit(async ({ code, label, fallbacks }) => {\n const result = await settle(\n locale\n ? updateLocale.mutateAsync({ code: locale.code, input: { label, fallbacks } })\n : createLocale.mutateAsync({ code, label, fallbacks }),\n );\n if (!result.ok) {\n return;\n }\n toast.success(i18next.t(locale ? 'locales.saved' : 'locales.created', { label }));\n onDone();\n });\n const mutation = locale ? updateLocale : createLocale;\n return { form, onSubmit, pending: mutation.isPending, error: mutation.error };\n};\n","import type { Locale } from '@shapio/client';\nimport { useTranslation } from 'react-i18next';\nimport { FormError } from '@/components/FormError';\nimport { FormSheet } from '@/components/FormSheet';\nimport { FormTextField } from '@/components/FormTextField';\nimport { FallbackChain } from '../FallbackChain';\nimport { useLocaleForm } from '../hooks/useLocaleForm';\n\ntype LocaleSheetProps = {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n /** Edit this locale; add a new one when undefined. */\n locale: Locale | undefined;\n locales: readonly Locale[];\n};\n\nexport const LocaleSheet = ({ open, onOpenChange, locale, locales }: LocaleSheetProps) => {\n const { t } = useTranslation();\n const { form, onSubmit, pending, error } = useLocaleForm(open, locale, () => onOpenChange(false));\n const code = form.watch('code');\n return (\n <FormSheet\n open={open}\n onOpenChange={onOpenChange}\n size=\"md\"\n title={locale ? t('locales.editTitle', { label: locale.label }) : t('locales.addTitle')}\n dirty={form.formState.isDirty}\n pending={pending}\n submitLabel={locale ? t('common.saveChanges') : t('locales.add')}\n pendingLabel={t('common.saving')}\n onSubmit={(event) => void onSubmit(event)}\n >\n <FormTextField\n control={form.control}\n name=\"code\"\n label={t('locales.code')}\n hint={t('locales.codeHint')}\n autoComplete=\"off\"\n spellCheck={false}\n className=\"font-mono\"\n disabled={locale !== undefined}\n />\n <FormTextField control={form.control} name=\"label\" label={t('locales.label')} autoComplete=\"off\" />\n <FallbackChain control={form.control} locales={locales} code={code} />\n <FormError error={error} />\n </FormSheet>\n );\n};\n","import type { Locale } from '@shapio/client';\nimport { MoreHorizontal, Pencil, Star, Trash2 } from 'lucide-react';\nimport { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { InlineConfirm } from '@/components/InlineConfirm';\nimport { RowTitle } from '@/components/RowTitle';\nimport { Badge } from '@/components/ui/badge';\nimport { Button } from '@/components/ui/button';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '@/components/ui/dropdown-menu';\nimport { TableCell, TableRow } from '@/components/ui/table';\n\ntype RowProps = {\n locale: Locale;\n /** The fallbacks delivery tries, the default locale last. */\n chain: readonly string[];\n canManage: boolean;\n onEdit: (locale: Locale) => void;\n onMakeDefault: (locale: Locale) => void;\n /** The first delete attempt; resolves once it's done or handed to the content acknowledgement. */\n onDelete: (locale: Locale) => Promise<unknown>;\n};\n\n/** One locale. Delete asks inline, anchored to the row's menu button. */\nexport const Row = ({ locale, chain, canManage, onEdit, onMakeDefault, onDelete }: RowProps) => {\n const { t } = useTranslation();\n const [deleting, setDeleting] = useState(false);\n return (\n <TableRow>\n <TableCell>\n <span className=\"flex items-center gap-2\">\n <RowTitle>{locale.label}</RowTitle>\n {locale.isDefault ? <Badge variant=\"secondary\">{t('locales.default')}</Badge> : null}\n </span>\n </TableCell>\n <TableCell className=\"font-mono text-xs\">{locale.code}</TableCell>\n <TableCell className=\"font-mono text-xs\">\n {chain.length > 0 ? chain.join(' → ') : t('common.none')}\n </TableCell>\n <TableCell className=\"text-right\">\n {canManage ? (\n <DropdownMenu>\n <InlineConfirm\n tone=\"danger\"\n open={deleting}\n onOpenChange={setDeleting}\n title={t('locales.deleteTitle', { label: locale.label })}\n description={t('locales.deleteDescription')}\n confirmLabel={t('common.delete')}\n pendingLabel={t('locales.deleting')}\n onConfirm={() => onDelete(locale)}\n >\n <DropdownMenuTrigger asChild>\n <Button variant=\"ghost\" size=\"icon-sm\" aria-label={`${t('common.actions')}: ${locale.label}`}>\n <MoreHorizontal aria-hidden=\"true\" />\n </Button>\n </DropdownMenuTrigger>\n </InlineConfirm>\n <DropdownMenuContent align=\"end\" onCloseAutoFocus={(event) => deleting && event.preventDefault()}>\n <DropdownMenuItem onSelect={() => onEdit(locale)}>\n <Pencil aria-hidden=\"true\" />\n {t('common.edit')}\n </DropdownMenuItem>\n {locale.isDefault ? null : (\n <>\n <DropdownMenuItem onSelect={() => onMakeDefault(locale)}>\n <Star aria-hidden=\"true\" />\n {t('locales.makeDefault')}\n </DropdownMenuItem>\n <DropdownMenuItem variant=\"destructive\" onSelect={() => setDeleting(true)}>\n <Trash2 aria-hidden=\"true\" />\n {t('common.delete')}\n </DropdownMenuItem>\n </>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n ) : null}\n </TableCell>\n </TableRow>\n );\n};\n","import type { Locale } from '@shapio/client';\nimport { useTranslation } from 'react-i18next';\nimport { TableCard } from '@/components/TableCard';\nimport { Table as TableRoot, TableBody, TableHead, TableHeader, TableRow } from '@/components/ui/table';\nimport { Row } from './Row';\n\ntype TableProps = {\n locales: readonly Locale[];\n canManage: boolean;\n onEdit: (locale: Locale) => void;\n onMakeDefault: (locale: Locale) => void;\n onDelete: (locale: Locale) => Promise<unknown>;\n};\n\nexport const Table = ({ locales, canManage, onEdit, onMakeDefault, onDelete }: TableProps) => {\n const { t } = useTranslation();\n const defaultLocale = locales.find((locale) => locale.isDefault);\n return (\n <TableCard>\n <TableRoot>\n <TableHeader>\n <TableRow>\n <TableHead>{t('locales.label')}</TableHead>\n <TableHead>{t('locales.code')}</TableHead>\n <TableHead>{t('locales.fallbacks')}</TableHead>\n <TableHead>\n <span className=\"sr-only\">{t('common.actions')}</span>\n </TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {locales.map((locale) => (\n <Row\n key={locale.code}\n locale={locale}\n chain={[\n ...locale.fallbacks,\n ...(defaultLocale && !locale.isDefault && !locale.fallbacks.includes(defaultLocale.code)\n ? [defaultLocale.code]\n : []),\n ]}\n canManage={canManage}\n onEdit={onEdit}\n onMakeDefault={onMakeDefault}\n onDelete={onDelete}\n />\n ))}\n </TableBody>\n </TableRoot>\n </TableCard>\n );\n};\n","import type { Locale } from '@shapio/client';\nimport { Globe, Plus } from 'lucide-react';\nimport { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { toast } from 'sonner';\nimport { useLocales, useSetDefaultLocale } from '@/api/locales';\nimport { ConfirmDialog } from '@/components/ConfirmDialog';\nimport { EmptyState } from '@/components/EmptyState';\nimport { Page } from '@/components/Page';\nimport { PageHeader } from '@/components/PageHeader';\nimport { QueryView } from '@/components/QueryView';\nimport { Button } from '@/components/ui/button';\nimport { useNetworkPermission } from '@/features/Network/hooks/useNetworkPermission';\nimport { useConfirmTarget } from '@/hooks/useConfirmTarget';\nimport { useDeleteLocaleFlow } from './hooks/useDeleteLocaleFlow';\nimport { LocaleSheet } from './LocaleSheet';\nimport { Table } from './Table';\n\n/** Content locales (ADR 0004): code, label, the default locale and each locale's fallback chain. */\nexport const Locales = () => {\n const { t } = useTranslation();\n const locales = useLocales();\n // Locales are shared by every site: a role granting schema.create on one site doesn't manage them.\n const canManage = useNetworkPermission('schema.create');\n const setDefault = useSetDefaultLocale();\n const makeDefault = useConfirmTarget<Locale>();\n const deletion = useDeleteLocaleFlow();\n const [sheet, setSheet] = useState<{ open: boolean; locale: Locale | undefined }>({\n open: false,\n locale: undefined,\n });\n const currentDefault = locales.data?.find((locale) => locale.isDefault);\n const withContent = deletion.withContent;\n return (\n <Page width=\"full\">\n <PageHeader\n title={t('locales.title')}\n actions={\n canManage ? (\n <Button onClick={() => setSheet({ open: true, locale: undefined })}>\n <Plus aria-hidden=\"true\" />\n {t('locales.add')}\n </Button>\n ) : null\n }\n />\n <QueryView\n query={locales}\n isEmpty={(data) => data.length === 0}\n empty={<EmptyState icon={Globe} title={t('locales.empty')} />}\n >\n {(data) => (\n <Table\n locales={data}\n canManage={canManage}\n onEdit={(locale) => setSheet({ open: true, locale })}\n onMakeDefault={(locale) => {\n setDefault.reset();\n makeDefault.ask(locale);\n }}\n onDelete={deletion.attempt}\n />\n )}\n </QueryView>\n <LocaleSheet\n open={sheet.open}\n onOpenChange={(open) => setSheet((current) => ({ ...current, open }))}\n locale={sheet.locale}\n locales={locales.data ?? []}\n />\n <ConfirmDialog\n open={makeDefault.open}\n onOpenChange={makeDefault.onOpenChange}\n title={t('locales.defaultTitle', { label: makeDefault.target?.label ?? '' })}\n description={t('locales.defaultDescription', {\n label: makeDefault.target?.label ?? '',\n current: currentDefault?.label ?? '',\n })}\n acknowledgement={t('locales.defaultAcknowledge')}\n confirmLabel={t('locales.makeDefault')}\n destructive\n pending={setDefault.isPending}\n pendingLabel={t('common.saving')}\n error={setDefault.error}\n onConfirm={() => {\n const target = makeDefault.target;\n if (target) {\n setDefault.mutate(target.code, {\n onSuccess: () => {\n toast.success(t('locales.defaultChanged', { label: target.label }));\n makeDefault.close();\n },\n });\n }\n }}\n />\n <ConfirmDialog\n open={deletion.open}\n onOpenChange={deletion.onOpenChange}\n title={t('locales.deleteTitle', { label: withContent?.locale.label ?? '' })}\n description={t('locales.deleteContent', {\n count: withContent?.affectedHeads ?? 0,\n label: withContent?.locale.label ?? '',\n })}\n acknowledgement={t('locales.deleteAcknowledge', { count: withContent?.affectedHeads ?? 0 })}\n confirmLabel={t('common.delete')}\n destructive\n pending={deletion.pending}\n pendingLabel={t('locales.deleting')}\n error={deletion.error}\n onConfirm={deletion.confirm}\n />\n </Page>\n );\n};\n","import { zodResolver } from '@hookform/resolvers/zod';\nimport { useEffect } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { toast } from 'sonner';\nimport { z } from 'zod';\nimport { useMe, useUpdateProfile } from '@/api/auth';\nimport { i18next } from '@/app/i18n';\nimport { settle } from '@/helpers/settle';\nimport { requiredText } from '@/helpers/validation';\n\nconst profileSchema = z.object({ name: requiredText() });\n\nexport type ProfileValues = z.infer<typeof profileSchema>;\n\n/** The signed-in admin's display name. Email changes go through an owner (Users), not self-service. */\nexport const useProfileDetailsForm = () => {\n const { data: me } = useMe();\n const updateProfile = useUpdateProfile();\n const form = useForm<ProfileValues>({\n resolver: zodResolver(profileSchema),\n defaultValues: { name: me?.user.name ?? '' },\n });\n const { reset, formState } = form;\n const name = me?.user.name;\n // Follow the server's value when it changes elsewhere, unless the user is mid-edit.\n useEffect(() => {\n if (!formState.isDirty && name !== undefined) {\n reset({ name });\n }\n }, [name, reset, formState.isDirty]);\n const onSubmit = form.handleSubmit(async (values) => {\n const saved = await settle(updateProfile.mutateAsync(values));\n if (!saved.ok) {\n return;\n }\n reset({ name: saved.value.name });\n toast.success(i18next.t('profile.detailsSaved'));\n });\n return { form, onSubmit, updateProfile, email: me?.user.email ?? '' };\n};\n","import { useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { FormError } from '@/components/FormError';\nimport { FormTextField } from '@/components/FormTextField';\nimport { HintedLabel } from '@/components/HintedLabel';\nimport { Panel } from '@/components/Panel';\nimport { SubmitButton } from '@/components/SubmitButton';\nimport { Field, FieldGroup } from '@/components/ui/field';\nimport { Input } from '@/components/ui/input';\nimport { useProfileDetailsForm } from '../hooks/useProfileDetailsForm';\n\ntype DetailsProps = { onDirtyChange: (dirty: boolean) => void };\n\nconst EMAIL_ID = 'profile-email';\nconst EMAIL_HINT_ID = 'profile-email-hint';\n\nexport const Details = ({ onDirtyChange }: DetailsProps) => {\n const { t } = useTranslation();\n const { form, onSubmit, updateProfile, email } = useProfileDetailsForm();\n const { isDirty } = form.formState;\n useEffect(() => onDirtyChange(isDirty), [isDirty, onDirtyChange]);\n return (\n <Panel title={t('profile.detailsTitle')}>\n <form noValidate onSubmit={(event) => void onSubmit(event)} className=\"max-w-md\">\n <FieldGroup>\n <FormTextField control={form.control} name=\"name\" label={t('auth.name')} autoComplete=\"name\" />\n <Field>\n <HintedLabel\n htmlFor={EMAIL_ID}\n label={t('auth.email')}\n hint={t('profile.emailHint')}\n hintId={EMAIL_HINT_ID}\n />\n <Input id={EMAIL_ID} value={email} readOnly aria-describedby={EMAIL_HINT_ID} />\n </Field>\n <FormError error={updateProfile.error} />\n <div>\n <SubmitButton\n pending={updateProfile.isPending}\n pendingLabel={t('common.saving')}\n disabled={!isDirty}\n >\n {t('common.saveChanges')}\n </SubmitButton>\n </div>\n </FieldGroup>\n </form>\n </Panel>\n );\n};\n","import { zodResolver } from '@hookform/resolvers/zod';\nimport { useForm } from 'react-hook-form';\nimport { toast } from 'sonner';\nimport { z } from 'zod';\nimport { useChangePassword } from '@/api/auth';\nimport { i18next } from '@/app/i18n';\nimport { settle } from '@/helpers/settle';\nimport { newPasswordField, withPasswordConfirmation } from '@/helpers/validation';\n\nconst changePasswordSchema = withPasswordConfirmation({\n currentPassword: z.string().min(1, 'validation.required'),\n password: newPasswordField(),\n});\n\nexport type ChangePasswordValues = z.infer<typeof changePasswordSchema>;\n\nconst EMPTY: ChangePasswordValues = { currentPassword: '', password: '', confirmPassword: '' };\n\nexport const useChangePasswordForm = () => {\n const changePassword = useChangePassword();\n const form = useForm<ChangePasswordValues>({\n resolver: zodResolver(changePasswordSchema),\n defaultValues: EMPTY,\n });\n const onSubmit = form.handleSubmit(async ({ currentPassword, password }) => {\n if (!(await settle(changePassword.mutateAsync({ currentPassword, newPassword: password }))).ok) {\n return;\n }\n form.reset(EMPTY);\n toast.success(i18next.t('profile.passwordChanged'));\n });\n return { form, onSubmit, changePassword };\n};\n","import { useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { FormError } from '@/components/FormError';\nimport { FormTextField } from '@/components/FormTextField';\nimport { Panel } from '@/components/Panel';\nimport { SubmitButton } from '@/components/SubmitButton';\nimport { FieldGroup } from '@/components/ui/field';\nimport { useChangePasswordForm } from '../hooks/useChangePasswordForm';\n\ntype PasswordProps = { onDirtyChange: (dirty: boolean) => void };\n\nexport const Password = ({ onDirtyChange }: PasswordProps) => {\n const { t } = useTranslation();\n const { form, onSubmit, changePassword } = useChangePasswordForm();\n const { isDirty } = form.formState;\n useEffect(() => onDirtyChange(isDirty), [isDirty, onDirtyChange]);\n return (\n <Panel title={t('profile.passwordTitle')} description={t('profile.passwordDescription')}>\n <form noValidate onSubmit={(event) => void onSubmit(event)} className=\"max-w-md\">\n <FieldGroup>\n <FormTextField\n control={form.control}\n name=\"currentPassword\"\n label={t('profile.currentPassword')}\n type=\"password\"\n autoComplete=\"current-password\"\n />\n <FormTextField\n control={form.control}\n name=\"password\"\n label={t('auth.newPassword')}\n description={t('auth.passwordHint')}\n type=\"password\"\n autoComplete=\"new-password\"\n />\n <FormTextField\n control={form.control}\n name=\"confirmPassword\"\n label={t('auth.confirmPassword')}\n type=\"password\"\n autoComplete=\"new-password\"\n />\n <FormError error={changePassword.error} />\n <div>\n <SubmitButton pending={changePassword.isPending} pendingLabel={t('common.saving')}>\n {t('profile.changePassword')}\n </SubmitButton>\n </div>\n </FieldGroup>\n </form>\n </Panel>\n );\n};\n","import { useCallback, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Page } from '@/components/Page';\nimport { PageHeader } from '@/components/PageHeader';\nimport { UnsavedChangesGuard } from '@/components/UnsavedChangesGuard';\nimport { Details } from './Details';\nimport { Password } from './Password';\n\nexport const Profile = () => {\n const { t } = useTranslation();\n const [detailsDirty, setDetailsDirty] = useState(false);\n const [passwordDirty, setPasswordDirty] = useState(false);\n const onDetailsDirtyChange = useCallback((dirty: boolean) => setDetailsDirty(dirty), []);\n const onPasswordDirtyChange = useCallback((dirty: boolean) => setPasswordDirty(dirty), []);\n return (\n <Page width=\"full\">\n <PageHeader title={t('profile.title')} />\n <Details onDirtyChange={onDetailsDirtyChange} />\n <Password onDirtyChange={onPasswordDirtyChange} />\n <UnsavedChangesGuard when={detailsDirty || passwordDirty} />\n </Page>\n );\n};\n","import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\nimport { adminApi } from './client';\nimport { withCsrf } from './csrf';\nimport { queryKeys } from './queryKeys';\n\nexport const useSessions = () =>\n useQuery({ queryKey: queryKeys.sessions, queryFn: () => adminApi.sessions.list(), meta: { silent: true } });\n\nexport const useRevokeSession = () => {\n const queryClient = useQueryClient();\n return useMutation({\n mutationKey: ['sessions', 'revoke'],\n mutationFn: (id: string) => withCsrf(() => adminApi.sessions.revoke(id)),\n onSettled: () => queryClient.invalidateQueries({ queryKey: queryKeys.sessions }),\n });\n};\n","const BROWSERS: readonly [RegExp, string][] = [\n [/Edg\\//, 'Edge'],\n [/OPR\\//, 'Opera'],\n [/Firefox\\//, 'Firefox'],\n [/Chrome\\//, 'Chrome'],\n [/Safari\\//, 'Safari'],\n];\n\nconst SYSTEMS: readonly [RegExp, string][] = [\n [/iPhone|iPad/, 'iOS'],\n [/Android/, 'Android'],\n [/Mac OS X|Macintosh/, 'macOS'],\n [/Windows/, 'Windows'],\n [/Linux/, 'Linux'],\n];\n\nconst firstMatch = (value: string, table: readonly [RegExp, string][]) =>\n table.find(([pattern]) => pattern.test(value))?.[1];\n\n/**\n * \"Chrome on macOS\" from a user-agent string (product names are not translated). `undefined` when nothing\n * is recognised, so the caller can show its own \"unknown device\" label.\n */\nexport const describeUserAgent = (userAgent: string | null): string | undefined => {\n if (!userAgent) {\n return undefined;\n }\n const browser = firstMatch(userAgent, BROWSERS);\n const system = firstMatch(userAgent, SYSTEMS);\n if (browser && system) {\n return `${browser} · ${system}`;\n }\n return browser ?? system;\n};\n","import type { AdminSession } from '@shapio/client';\nimport { useTranslation } from 'react-i18next';\nimport { InlineConfirm } from '@/components/InlineConfirm';\nimport { RowTitle } from '@/components/RowTitle';\nimport { TableCard } from '@/components/TableCard';\nimport { Badge } from '@/components/ui/badge';\nimport { Button } from '@/components/ui/button';\nimport {\n Table as TableRoot,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from '@/components/ui/table';\nimport { describeUserAgent } from '@/helpers/describeUserAgent';\nimport { formatDateTime, formatRelativeTime } from '@/helpers/formatDate';\n\ntype TableProps = {\n sessions: readonly AdminSession[];\n /** Resolves once the session is revoked (the confirmation waits for it). */\n onRevoke: (session: AdminSession) => Promise<unknown>;\n};\n\nexport const Table = ({ sessions, onRevoke }: TableProps) => {\n const { t } = useTranslation();\n return (\n <TableCard>\n <TableRoot>\n <TableHeader>\n <TableRow>\n <TableHead>{t('sessions.device')}</TableHead>\n <TableHead>{t('sessions.ipAddress')}</TableHead>\n <TableHead>{t('sessions.signedIn')}</TableHead>\n <TableHead>{t('sessions.lastActive')}</TableHead>\n <TableHead>\n <span className=\"sr-only\">{t('common.actions')}</span>\n </TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {sessions.map((session) => (\n <TableRow key={session.id}>\n <TableCell>\n <span className=\"flex items-center gap-2\">\n <RowTitle>{describeUserAgent(session.userAgent) ?? t('sessions.unknownDevice')}</RowTitle>\n {session.current ? <Badge variant=\"secondary\">{t('sessions.current')}</Badge> : null}\n </span>\n </TableCell>\n <TableCell className=\"font-mono text-xs\">{session.ip ?? t('common.unknown')}</TableCell>\n <TableCell title={formatDateTime(session.createdAt)}>\n {formatRelativeTime(session.createdAt)}\n </TableCell>\n <TableCell title={formatDateTime(session.lastSeenAt)}>\n {formatRelativeTime(session.lastSeenAt)}\n </TableCell>\n <TableCell className=\"text-right\">\n {session.current ? null : (\n <InlineConfirm\n tone=\"danger\"\n title={t('sessions.revokeTitle')}\n description={t('sessions.revokeDescription')}\n confirmLabel={t('common.revoke')}\n onConfirm={() => onRevoke(session)}\n trigger={\n <Button variant=\"outline\" size=\"sm\">\n {t('common.revoke')}\n </Button>\n }\n />\n )}\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </TableRoot>\n </TableCard>\n );\n};\n","import type { AdminSession } from '@shapio/client';\nimport { MonitorSmartphone } from 'lucide-react';\nimport { useTranslation } from 'react-i18next';\nimport { toast } from 'sonner';\nimport { useRevokeSession, useSessions } from '@/api/sessions';\nimport { EmptyState } from '@/components/EmptyState';\nimport { Page } from '@/components/Page';\nimport { PageHeader } from '@/components/PageHeader';\nimport { QueryView } from '@/components/QueryView';\nimport { Table } from './Table';\n\nexport const Sessions = () => {\n const { t } = useTranslation();\n const sessions = useSessions();\n const revoke = useRevokeSession();\n const revokeSession = async (session: AdminSession) => {\n await revoke.mutateAsync(session.id);\n toast.success(t('sessions.revoked'));\n };\n return (\n <Page width=\"full\">\n <PageHeader title={t('sessions.title')} />\n <QueryView\n query={sessions}\n isEmpty={(data) => data.length === 0}\n empty={<EmptyState icon={MonitorSmartphone} title={t('sessions.empty')} />}\n >\n {(data) => <Table sessions={data} onRevoke={revokeSession} />}\n </QueryView>\n </Page>\n );\n};\n","import { createLazyRoute } from '@tanstack/react-router';\nimport { Settings } from '@/features/Settings';\nimport { ApiTokens } from '@/features/Settings/ApiTokens';\nimport { Appearance } from '@/features/Settings/Appearance';\nimport { Assist } from '@/features/Settings/Assist';\nimport { Locales } from '@/features/Settings/Locales';\nimport { Profile } from '@/features/Settings/Profile';\nimport { Sessions } from '@/features/Settings/Sessions';\n\n/** Every settings screen, loaded together on the first visit to Settings. */\nexport const settingsLazyRoutes = {\n settings: createLazyRoute('/app/settings')({ component: Settings }),\n profile: createLazyRoute('/app/settings/profile')({ component: Profile }),\n sessions: createLazyRoute('/app/settings/sessions')({ component: Sessions }),\n theme: createLazyRoute('/app/settings/theme')({ component: Appearance }),\n locales: createLazyRoute('/app/settings/locales')({ component: Locales }),\n assist: createLazyRoute('/app/settings/assist')({ component: Assist }),\n apiTokens: createLazyRoute('/app/settings/api-tokens')({ component: ApiTokens }),\n};\n"],"ignoreList":[0],"mappings":"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"}