@harperfast/harper 5.2.14 → 5.2.15

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 (179) hide show
  1. package/dist/resources/analytics/write.d.ts +3 -0
  2. package/dist/resources/analytics/write.js +39 -13
  3. package/dist/resources/analytics/write.js.map +1 -1
  4. package/dist/security/keys.js +258 -66
  5. package/dist/security/keys.js.map +1 -1
  6. package/dist/server/threads/threadServer.d.ts +3 -0
  7. package/dist/server/threads/threadServer.js +24 -6
  8. package/dist/server/threads/threadServer.js.map +1 -1
  9. package/npm-shrinkwrap.json +2 -2
  10. package/package.json +1 -1
  11. package/resources/analytics/write.ts +40 -14
  12. package/security/keys.ts +251 -66
  13. package/server/threads/threadServer.js +24 -6
  14. package/studio/web/assets/{Chat-C97PMlIn.js → Chat-CeEDA28S.js} +13 -13
  15. package/studio/web/assets/FloatingChat-J_P5KaR4.js +23 -0
  16. package/studio/web/assets/SearchDialog-BWMGseDd.js +1 -0
  17. package/studio/web/assets/{abnfDiagram-O67JEVCF-DpPZWMOf.js → abnfDiagram-O67JEVCF-raXE027J.js} +1 -1
  18. package/studio/web/assets/alertDialog-BbWD9Xxa.js +1 -0
  19. package/studio/web/assets/apiToken-BKot-xR5.js +1 -0
  20. package/studio/web/assets/applications-BlJChLsS.js +296 -0
  21. package/studio/web/assets/architecture-7GRP2DOG-DDmz3hpI.js +1 -0
  22. package/studio/web/assets/{architectureDiagram-NJMV4G6O-OmgLraID.js → architectureDiagram-NJMV4G6O-C8_Eet7w.js} +1 -1
  23. package/studio/web/assets/arrow-up-D2g_57vT.js +1 -0
  24. package/studio/web/assets/authStore-CJCaADw9.js +3 -0
  25. package/studio/web/assets/{blockDiagram-BEXU5L5S-Cv7CD3Ai.js → blockDiagram-BEXU5L5S-DR6S5-1D.js} +1 -1
  26. package/studio/web/assets/{button-MFP9n8Ck.js → button-DWwfgGWI.js} +2 -2
  27. package/studio/web/assets/{c4Diagram-YGBWAQC7-Ds1vKYnN.js → c4Diagram-YGBWAQC7-BAfZ1G01.js} +1 -1
  28. package/studio/web/assets/channel-D0AkPjJ8.js +1 -0
  29. package/studio/web/assets/{chevron-up-CFe8x5Bp.js → chevron-up-CFxbMGv2.js} +1 -1
  30. package/studio/web/assets/{chunk-3FUC2YCW-DpnBPH8B.js → chunk-3FUC2YCW-DuRp-j19.js} +1 -1
  31. package/studio/web/assets/{chunk-5DYCD2WN-LLLCQSzg.js → chunk-5DYCD2WN-BceBfIHT.js} +1 -1
  32. package/studio/web/assets/{chunk-742MDFTN-BL8J_pIO.js → chunk-742MDFTN-CIkt8ijt.js} +1 -1
  33. package/studio/web/assets/{chunk-7INBJB4K-C-hJHiiK.js → chunk-7INBJB4K-BpeAXyOi.js} +1 -1
  34. package/studio/web/assets/{chunk-7M6MHVWA-C6ZqkFbA.js → chunk-7M6MHVWA-h6WlaTzO.js} +1 -1
  35. package/studio/web/assets/{chunk-7PRAP22T-CUXM8BG6.js → chunk-7PRAP22T-KyqX6x3f.js} +1 -1
  36. package/studio/web/assets/{chunk-GTNCS2PH-DJ2BFvS1.js → chunk-GTNCS2PH-DGHLXyow.js} +1 -1
  37. package/studio/web/assets/{chunk-GWA4HPMP-C42bSqLL.js → chunk-GWA4HPMP-DsejB6gA.js} +1 -1
  38. package/studio/web/assets/{chunk-MBY4JIJT-C-5jz6Lo.js → chunk-MBY4JIJT-BwSGweQP.js} +1 -1
  39. package/studio/web/assets/{chunk-NETBCI7D-D-bzlN4r.js → chunk-NETBCI7D-C8UnOw_f.js} +1 -1
  40. package/studio/web/assets/{chunk-O7XYJQB3-ep14zA23.js → chunk-O7XYJQB3-CBS3nZYV.js} +1 -1
  41. package/studio/web/assets/{chunk-UA2S7LBM-BMRWRHED.js → chunk-UA2S7LBM-BHpEdH8D.js} +1 -1
  42. package/studio/web/assets/{chunk-WEXAMYUT-DdLYVdX1.js → chunk-WEXAMYUT-BAIhTwyh.js} +1 -1
  43. package/studio/web/assets/{chunk-Z7XXMR3K-BmKEDjcP.js → chunk-Z7XXMR3K-DSHbImdf.js} +1 -1
  44. package/studio/web/assets/{chunk-ZIGJFQKS-DLZgdNxA.js → chunk-ZIGJFQKS-Cs8fUn7y.js} +1 -1
  45. package/studio/web/assets/{classDiagram-v2-NBCMYWYE-DOI5vgKT.js → classDiagram-v2-NBCMYWYE-DmDPkt2u.js} +1 -1
  46. package/studio/web/assets/cn-6T8VranJ.js +1 -0
  47. package/studio/web/assets/{codicon-Brq4_Ui5.ttf → codicon-DF1abBS2.ttf} +0 -0
  48. package/studio/web/assets/{createLucideIcon-bziYxJli.js → createLucideIcon-fO5dL7D5.js} +1 -1
  49. package/studio/web/assets/{css.worker-l1psR_wG.js → css.worker-DoT-OOzx.js} +36 -36
  50. package/studio/web/assets/{cssMode-DyLZPMjo.js → cssMode-DjeA9Hx_.js} +1 -1
  51. package/studio/web/assets/{cynefin-OW5HDTMX-BSW-DB7S.js → cynefin-OW5HDTMX-DIvbXLSj.js} +1 -1
  52. package/studio/web/assets/{cynefinDiagram-VND7K2PF-CbAHEwxt.js → cynefinDiagram-VND7K2PF-BdtaXiCE.js} +1 -1
  53. package/studio/web/assets/{dagre-6A5THRUB-Csxewgs4.js → dagre-6A5THRUB-C7RUWHyz.js} +1 -1
  54. package/studio/web/assets/{diagram-22UHCM2B-a0rt8tY4.js → diagram-22UHCM2B-DJCvcaWP.js} +1 -1
  55. package/studio/web/assets/{diagram-3UASUU5V-lEj2SVNh.js → diagram-3UASUU5V-Du6VKWln.js} +1 -1
  56. package/studio/web/assets/{diagram-ATOU4E4O-HcrAeB-q.js → diagram-ATOU4E4O-dxRfeG4B.js} +1 -1
  57. package/studio/web/assets/{diagram-CDSNMT55-CYxiuyEx.js → diagram-CDSNMT55-l5Ga0u-W.js} +1 -1
  58. package/studio/web/assets/{diagram-MLGK6HIB-ChbCJTgJ.js → diagram-MLGK6HIB-CNQY47LA.js} +1 -1
  59. package/studio/web/assets/{diagram-MPIPVDR6-DaX9Y-N3.js → diagram-MPIPVDR6-7prveD1B.js} +1 -1
  60. package/studio/web/assets/{dist-Cz2Y6-6G.js → dist-BrRuMUzt.js} +1 -1
  61. package/studio/web/assets/{download-CtostjYn.js → download-Cn6tPG4L.js} +1 -1
  62. package/studio/web/assets/{ebnfDiagram-ZINNZB2B-CwAsENB1.js → ebnfDiagram-ZINNZB2B-5OnkTpfi.js} +1 -1
  63. package/studio/web/assets/{editor-CFQ5kbiT.js → editor-DKwRNgor.js} +1 -1
  64. package/studio/web/assets/editor.worker-Yd1NR0QT.js +33 -0
  65. package/studio/web/assets/{elk-276RUBZZ-Hexg9E4D.js → elk-276RUBZZ-DxDQPjQT.js} +1 -1
  66. package/studio/web/assets/{erDiagram-OPXOYQCR-CeC-wwO1.js → erDiagram-OPXOYQCR-CQlCX84D.js} +1 -1
  67. package/studio/web/assets/eventmodeling-NTZA5JFV-DONQf5aG.js +1 -0
  68. package/studio/web/assets/flowDiagram-KWPJA3E3-BoZ8_QR1.js +1 -0
  69. package/studio/web/assets/{ganttDiagram-FUAMR5RP-C2_Hhl1-.js → ganttDiagram-FUAMR5RP-bloX3Voy.js} +1 -1
  70. package/studio/web/assets/{getAnalytics-CjthMQqF.js → getAnalytics-C0FHjtdQ.js} +1 -1
  71. package/studio/web/assets/{gitGraph-4MIJSDKK-xIk5Vuew.js → gitGraph-4MIJSDKK-BrXWmJt2.js} +1 -1
  72. package/studio/web/assets/{gitGraphDiagram-X574FWY7-CMxJ34up.js → gitGraphDiagram-X574FWY7-C2KnnZeY.js} +1 -1
  73. package/studio/web/assets/{html-DdMBJEGu.js → html-KzEcNmGL.js} +1 -1
  74. package/studio/web/assets/{html.worker-DdwM4IrA.js → html.worker-B1dwY0Ay.js} +27 -27
  75. package/studio/web/assets/{htmlMode-DNtBx3OV.js → htmlMode-Bipij2Sy.js} +1 -1
  76. package/studio/web/assets/index-DMUQ34Jl.js +828 -0
  77. package/studio/web/assets/index-QLZw6xrU.css +1 -0
  78. package/studio/web/assets/index.lazy-D5_uqR4Q.js +2 -0
  79. package/studio/web/assets/{info-A6RAGUB7-o49TEbj-.js → info-A6RAGUB7-BhzBHe4U.js} +1 -1
  80. package/studio/web/assets/{infoDiagram-VRGFBTTK-Cjhh7yzZ.js → infoDiagram-VRGFBTTK-B0J1132p.js} +1 -1
  81. package/studio/web/assets/{ishikawaDiagram-OU5B5YK6-C63aXRmh.js → ishikawaDiagram-OU5B5YK6-BNk0tuQx.js} +1 -1
  82. package/studio/web/assets/{javascript-Dy6KbeHT.js → javascript-QytBwXUJ.js} +1 -1
  83. package/studio/web/assets/{journeyDiagram-ZHPQQLJL-D_o0P5Mu.js → journeyDiagram-ZHPQQLJL-Be79RMQM.js} +1 -1
  84. package/studio/web/assets/json.worker-BQqXGI3X.js +65 -0
  85. package/studio/web/assets/{jsonMode-BiuDVrzl.js → jsonMode-CIoh4zwS.js} +1 -1
  86. package/studio/web/assets/{kanban-definition-PNTS6WVX-CTI9SSxY.js → kanban-definition-PNTS6WVX-4uuoQP9W.js} +1 -1
  87. package/studio/web/assets/{languageServices-Dk8_6B25.js → languageServices-BvFCul4Y.js} +1 -1
  88. package/studio/web/assets/localStorageKeys-etzFY_xV.js +1 -0
  89. package/studio/web/assets/{lspLanguageFeatures-DwJKXzQa.js → lspLanguageFeatures-BvDuJHGH.js} +1 -1
  90. package/studio/web/assets/{mermaid-parser.core-C2lcH_jP.js → mermaid-parser.core-V1UYMeXV.js} +3 -3
  91. package/studio/web/assets/{mermaid.core-BG5bjfIG.js → mermaid.core-1PX6R49U.js} +4 -4
  92. package/studio/web/assets/{mindmap-definition-NLK3R4M7-BK7ho6JD.js → mindmap-definition-NLK3R4M7-C70Ctm0J.js} +1 -1
  93. package/studio/web/assets/notifications-C5EZskVd.js +1 -0
  94. package/studio/web/assets/notifications-jQfsyiVJ.js +1 -0
  95. package/studio/web/assets/{packet-AYTQ26CC-BHPy6KBV.js → packet-AYTQ26CC-DWbXHx5g.js} +1 -1
  96. package/studio/web/assets/{pegDiagram-GJSIUBJH-DzjwG3jO.js → pegDiagram-GJSIUBJH-d6z1cc7W.js} +1 -1
  97. package/studio/web/assets/{pie-WAS4IAKB-D0cP-DTU.js → pie-WAS4IAKB-DjoTm3yr.js} +1 -1
  98. package/studio/web/assets/{pieDiagram-5QR66LMP-C_hOP9Lv.js → pieDiagram-5QR66LMP-Dz3RHpDA.js} +1 -1
  99. package/studio/web/assets/profile-CkLzjQm2.js +1 -0
  100. package/studio/web/assets/{quadrantDiagram-O4NWA36T-CZW8PbV1.js → quadrantDiagram-O4NWA36T-CIF5Qkou.js} +1 -1
  101. package/studio/web/assets/{radar-RG4KPBEZ-C8fk0U81.js → radar-RG4KPBEZ-CVBgjCOj.js} +1 -1
  102. package/studio/web/assets/{railroad-74A4TZTK-B60FWm17.js → railroad-74A4TZTK-BdhXw10Q.js} +1 -1
  103. package/studio/web/assets/railroad-abnf-HS5TGJTU-BcoQPN39.js +1 -0
  104. package/studio/web/assets/railroad-ebnf-LZEXJU2U-B1Lke2JN.js +1 -0
  105. package/studio/web/assets/railroad-peg-WCYAUIDC-D-oJFkiV.js +1 -0
  106. package/studio/web/assets/{railroadDiagram-XR7U4H2S-DyyNmgbU.js → railroadDiagram-XR7U4H2S-y3Jv2U6N.js} +1 -1
  107. package/studio/web/assets/regions-b7HODz0P.js +1 -0
  108. package/studio/web/assets/register-DGmUOJc1.js +909 -0
  109. package/studio/web/assets/register-DjpsE8to.css +1 -0
  110. package/studio/web/assets/{requirementDiagram-PLB6GJNP-C4H-mLKu.js → requirementDiagram-PLB6GJNP-ChINZEmu.js} +1 -1
  111. package/studio/web/assets/restartGate-nHAFLDh-.js +1 -0
  112. package/studio/web/assets/{sankeyDiagram-IPEJSGJF-DHDyga4c.js → sankeyDiagram-IPEJSGJF-D9AyLce2.js} +1 -1
  113. package/studio/web/assets/{sequenceDiagram-PO4LG4MO-CdNcHXRI.js → sequenceDiagram-PO4LG4MO-hfk4aIEm.js} +1 -1
  114. package/studio/web/assets/{setComponentFile-BavlhfY0.js → setComponentFile-DlUcJ4Y0.js} +1 -1
  115. package/studio/web/assets/{setup-04yVzr2I.js → setup-D1jywSGk.js} +2 -2
  116. package/studio/web/assets/{stateDiagram-v2-GCMORJYK-CpKuXq15.js → stateDiagram-v2-GCMORJYK-Bs8RIb9K.js} +1 -1
  117. package/studio/web/assets/status-CjVoPieo.js +61 -0
  118. package/studio/web/assets/{swimlanes-2SLR337P-NRHa2D8I.js → swimlanes-2SLR337P-B52xrf6t.js} +1 -1
  119. package/studio/web/assets/swimlanesDiagram-TC7HE7FX-DfN7BAP5.js +8 -0
  120. package/studio/web/assets/tabs-BCTQzoQK.js +1 -0
  121. package/studio/web/assets/{timeline-definition-EJHVYXUP-D39Y-xpq.js → timeline-definition-EJHVYXUP-DJSITpQX.js} +1 -1
  122. package/studio/web/assets/toggleHighContrast-C9CKwOn9.js +51 -0
  123. package/studio/web/assets/toggleHighContrast-n7clI0si.css +1 -0
  124. package/studio/web/assets/{treeView-Q6P3EWNA-CRWR9OqD.js → treeView-Q6P3EWNA-C-epdxRo.js} +1 -1
  125. package/studio/web/assets/{treemap-WGGIJYW6-ZfXyJgLO.js → treemap-WGGIJYW6-DOVyp_zw.js} +1 -1
  126. package/studio/web/assets/{ts.worker-DDMUrpqh.js → ts.worker-Clm12uY6.js} +131 -131
  127. package/studio/web/assets/{tsMode-DGeWfx0W.js → tsMode-CRibSU_y.js} +1 -1
  128. package/studio/web/assets/{typescript-62_1FUbs.js → typescript-BRCpg8By.js} +1 -1
  129. package/studio/web/assets/{useEntityRestURL-DSVwev9J.js → useEntityRestURL-pPVmpjIi.js} +1 -1
  130. package/studio/web/assets/{usecaseDiagram-POWQR4AR-jf-zIDZ_.js → usecaseDiagram-POWQR4AR-B6252cbq.js} +1 -1
  131. package/studio/web/assets/{vendor-core-BdkdbUek.js → vendor-core-6LhfJlRC.js} +1 -1
  132. package/studio/web/assets/vendor-datadog-ozKf-pts.js +6 -0
  133. package/studio/web/assets/{vendor-react-izWchTRL.js → vendor-react-BOliS0BL.js} +1 -1
  134. package/studio/web/assets/vendor-tanstack-Bntfka-M.js +2 -0
  135. package/studio/web/assets/vendor-ui-9EYYDgoN.js +41 -0
  136. package/studio/web/assets/{vennDiagram-UO4OBE2U-BKYAZUh_.js → vennDiagram-UO4OBE2U-DZTsDA4k.js} +1 -1
  137. package/studio/web/assets/{wardley-WFR3VGLG-BO7f36ci.js → wardley-WFR3VGLG-Cfqoe6z4.js} +1 -1
  138. package/studio/web/assets/{wardleyDiagram-VNRHLVJA-Djb0JDQc.js → wardleyDiagram-VNRHLVJA-qu_f7Tvl.js} +1 -1
  139. package/studio/web/assets/{workers-Cs52GyHv.js → workers-BBDZZ4qw.js} +3 -3
  140. package/studio/web/assets/{xml-Co5ow_Ix.js → xml-tWNEwt7n.js} +1 -1
  141. package/studio/web/assets/{xychartDiagram-PMCCYNJV-BQh9ubvb.js → xychartDiagram-PMCCYNJV-UrOKRsmR.js} +1 -1
  142. package/studio/web/assets/{yaml-BcngpXye.js → yaml-BZgmBIf5.js} +1 -1
  143. package/studio/web/assets/{yaml.worker-DAK2o_H1.js → yaml.worker-D9JekGdp.js} +183 -183
  144. package/studio/web/index.html +15 -15
  145. package/studio/web/assets/FloatingChat-BUlsFGMV.js +0 -23
  146. package/studio/web/assets/alertDialog-UrbiMgQt.js +0 -1
  147. package/studio/web/assets/apiToken-CPhbc_zN.js +0 -1
  148. package/studio/web/assets/applications-D3Z6BVDl.js +0 -296
  149. package/studio/web/assets/architecture-7GRP2DOG-11l4Ny1l.js +0 -1
  150. package/studio/web/assets/authStore-5jSS5pTW.js +0 -3
  151. package/studio/web/assets/channel-BDtouPd6.js +0 -1
  152. package/studio/web/assets/dialog-DTepachC.js +0 -1
  153. package/studio/web/assets/editor.worker-CkkvdXvO.js +0 -33
  154. package/studio/web/assets/eventmodeling-NTZA5JFV-CFb03e0o.js +0 -1
  155. package/studio/web/assets/flowDiagram-KWPJA3E3-Cidi00_Y.js +0 -1
  156. package/studio/web/assets/index-CPoDzQTe.css +0 -1
  157. package/studio/web/assets/index-zZCxAIEb.js +0 -824
  158. package/studio/web/assets/index.lazy-CKbsHbSN.js +0 -2
  159. package/studio/web/assets/json.worker-CSi2hF-a.js +0 -65
  160. package/studio/web/assets/notifications-DJqAtWxD.js +0 -1
  161. package/studio/web/assets/notifications-DsDtb41c.js +0 -1
  162. package/studio/web/assets/profile-zTGUN51x.js +0 -1
  163. package/studio/web/assets/railroad-abnf-HS5TGJTU-CLMVZvH0.js +0 -1
  164. package/studio/web/assets/railroad-ebnf-LZEXJU2U--tlwFoVB.js +0 -1
  165. package/studio/web/assets/railroad-peg-WCYAUIDC-Dpuslblm.js +0 -1
  166. package/studio/web/assets/regions-SOtABPB9.js +0 -1
  167. package/studio/web/assets/register-7JezVakc.js +0 -848
  168. package/studio/web/assets/register-jjEx9u7D.css +0 -1
  169. package/studio/web/assets/setLocalStorage-D_kflv4U.js +0 -1
  170. package/studio/web/assets/status-g_mNYE7j.js +0 -61
  171. package/studio/web/assets/swimlanesDiagram-TC7HE7FX-BBk4t4hO.js +0 -8
  172. package/studio/web/assets/tabs-CnQ_zenf.js +0 -1
  173. package/studio/web/assets/toggleHighContrast--ixms01u.css +0 -1
  174. package/studio/web/assets/toggleHighContrast-i2FjCrzO.js +0 -49
  175. package/studio/web/assets/useLocalStorage-BYoZF60G.js +0 -1
  176. package/studio/web/assets/vendor-datadog-fCQhBHGk.js +0 -6
  177. package/studio/web/assets/vendor-tanstack-CQ1aRjVa.js +0 -2
  178. package/studio/web/assets/vendor-ui-aE1tHcW7.js +0 -41
  179. package/studio/web/assets/x-vYntCxm4.js +0 -1
@@ -1 +0,0 @@
1
- import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{i as t,t as n}from"./button-MFP9n8Ck.js";import{a as r}from"./vendor-datadog-fCQhBHGk.js";import{r as i}from"./vendor-react-izWchTRL.js";import{I as a,J as o}from"./vendor-tanstack-CQ1aRjVa.js";import{a as s,i as c,n as l,o as u,r as d,t as f}from"./dialog-DTepachC.js";import{$t as p,Bn as m,Gn as h,Hn as g,Ln as _,Ot as v,Qt as y,Sn as b,Sr as x,Wn as S,Yn as C,en as w,fr as T,jt as E,nn as D,tn as O,wr as k,yn as A,zn as j,zt as M}from"./index-zZCxAIEb.js";import{a as N,c as P,i as F,n as I,o as L,r as R,s as z,t as B}from"./alertDialog-UrbiMgQt.js";function V(){let e=o();return a({mutationFn:async e=>{let{data:n}=await t.post(`/SystemStatus/`,e);return n},onSuccess:()=>e.invalidateQueries({queryKey:j})})}function H(){let e=o();return a({mutationFn:async({id:e,draft:n})=>{await t.patch(`/SystemStatus/${e}`,n)},onSuccess:()=>e.invalidateQueries({queryKey:j})})}function U(){let e=o();return a({mutationFn:async e=>{await t.delete(`/SystemStatus/${e}`)},onSuccess:()=>e.invalidateQueries({queryKey:j})})}var W=e(r(),1),G=i(),K=[{value:`error`,label:`Error / Outage`},{value:`warning`,label:`Warning`},{value:`maintenance`,label:`Maintenance`},{value:`info`,label:`Info`}];function q(e){let t=h(e);if(t===null)return``;let n=new Date(t),r=e=>String(e).padStart(2,`0`);return`${n.getFullYear()}-${r(n.getMonth()+1)}-${r(n.getDate())}T${r(n.getHours())}:${r(n.getMinutes())}`}function J(e){if(!e)return null;let t=Date.parse(e);return Number.isNaN(t)?null:new Date(t).toISOString()}function Y(e){let t=h(e.startAt),n=h(e.endAt);if(t===null&&n===null)return`Always`;let r=e=>e===null?`—`:new Date(e).toLocaleString();return`${r(t)} → ${r(n)}`}function X(){let{data:e,isLoading:t}=_(),[r,i]=(0,W.useState)(!1),[a,o]=(0,W.useState)(null),[s,c]=(0,W.useState)(null),l=U(),u=(0,W.useCallback)(()=>{o(null),i(!0)},[]),d=(0,W.useCallback)(e=>{o(e),i(!0)},[]),f=(0,W.useMemo)(()=>Z({openEdit:d,onDelete:c}),[d]);return(0,G.jsxs)(`div`,{className:`max-w-5xl`,children:[(0,G.jsxs)(`div`,{className:`flex items-start justify-between gap-4`,children:[(0,G.jsxs)(`div`,{children:[(0,G.jsx)(`h1`,{className:`text-2xl font-light`,children:`Notifications`}),(0,G.jsx)(`p`,{className:`mt-2 text-sm text-muted-foreground`,children:`System-wide notices shown to all users in the notification center. Times are stored in UTC.`})]}),(0,G.jsxs)(n,{variant:`submit`,onClick:u,className:`shrink-0`,children:[(0,G.jsx)(x,{}),`New notification`]})]}),(0,G.jsx)(`div`,{className:`mt-6`,children:t?(0,G.jsx)(M,{className:`h-40 w-full`}):(0,G.jsx)(E,{columns:f,data:e??[]})}),(0,G.jsx)(Q,{open:r,onOpenChange:i,editing:a}),(0,G.jsx)(B,{open:!!s,onOpenChange:e=>!e&&c(null),children:(0,G.jsxs)(F,{children:[(0,G.jsxs)(z,{children:[(0,G.jsx)(P,{children:`Delete notification?`}),(0,G.jsx)(N,{children:`This removes it for everyone immediately. This can't be undone.`})]}),(0,G.jsxs)(L,{children:[(0,G.jsx)(R,{children:`Cancel`}),(0,G.jsx)(I,{disabled:l.isPending,onClick:e=>{e.preventDefault(),s&&l.mutate(s.id,{onSuccess:()=>c(null)})},children:l.isPending?`Deleting…`:`Delete`})]})]})})]})}function Z({openEdit:e,onDelete:t}){return[{header:`Type`,accessorKey:`type`,size:12,cell:({row:e})=>{let{label:t,badgeVariant:n}=g(e.original.type);return(0,G.jsx)(C,{variant:n,children:e.original.type||t})}},{header:`Message`,accessorKey:`message`,size:40,cell:({row:e})=>(0,G.jsx)(`span`,{className:`line-clamp-2 break-words`,children:e.original.message})},{header:`Active window (local)`,size:28,cell:({row:e})=>(0,G.jsx)(`span`,{className:`text-sm text-muted-foreground`,children:Y(e.original)})},{header:`Link`,size:8,cell:({row:e})=>e.original.url?(0,G.jsx)(m,{url:e.original.url,className:`text-sm text-primary hover:underline dark:text-white`}):(0,G.jsx)(`span`,{className:`text-muted-foreground`,children:`—`})},{header:``,id:`actions`,size:12,cell:({row:r})=>(0,G.jsxs)(`div`,{className:`flex justify-end gap-1`,children:[(0,G.jsx)(n,{variant:`ghost`,size:`icon`,"aria-label":`Edit`,onClick:()=>e(r.original),children:(0,G.jsx)(k,{})}),(0,G.jsx)(n,{variant:`destructiveGhost`,size:`icon`,"aria-label":`Delete`,onClick:()=>t(r.original),children:(0,G.jsx)(T,{})})]})}]}function Q({open:e,onOpenChange:t,editing:r}){let i=V(),a=H(),o=i.isPending||a.isPending,[m,h]=(0,W.useState)(`error`),[g,_]=(0,W.useState)(``),[x,C]=(0,W.useState)(``),[T,E]=(0,W.useState)(``),[k,j]=(0,W.useState)(``),[M,N]=(0,W.useState)(null);return(0,W.useEffect)(()=>{e&&(h(r?.type??`error`),_(r?.message??``),C(r?.url??``),E(q(r?.startAt)),j(q(r?.endAt)),N(null))},[e,r]),(0,G.jsx)(f,{open:e,onOpenChange:t,children:(0,G.jsxs)(l,{children:[(0,G.jsxs)(s,{children:[(0,G.jsx)(u,{children:r?`Edit notification`:`New notification`}),(0,G.jsx)(d,{children:`Shown to all users. Leave start/end empty for an open-ended window.`})]}),(0,G.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,G.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,G.jsx)(b,{htmlFor:`notification-type`,children:`Type`}),(0,G.jsxs)(y,{value:m,onValueChange:h,children:[(0,G.jsx)(O,{id:`notification-type`,className:`w-full`,children:(0,G.jsx)(D,{})}),(0,G.jsx)(p,{children:K.map(e=>(0,G.jsx)(w,{value:e.value,children:e.label},e.value))})]})]}),(0,G.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,G.jsx)(b,{htmlFor:`notification-message`,children:`Message`}),(0,G.jsx)(v,{id:`notification-message`,rows:3,value:g,onChange:e=>_(e.target.value),placeholder:`The Fabric control plane will be undergoing maintenance…`})]}),(0,G.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,G.jsx)(b,{htmlFor:`notification-url`,children:`Link (optional)`}),(0,G.jsx)(A,{id:`notification-url`,value:x,onChange:e=>C(e.target.value),placeholder:`https://status.harper.io or /organizations`}),(0,G.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`An absolute URL opens in a new tab; a path like `,(0,G.jsx)(`code`,{children:`/organizations`}),` links inside Studio.`]})]}),(0,G.jsxs)(`div`,{className:`grid grid-cols-1 gap-4 sm:grid-cols-2`,children:[(0,G.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,G.jsx)(b,{htmlFor:`notification-start`,children:`Start (local time)`}),(0,G.jsx)(A,{id:`notification-start`,type:`datetime-local`,value:T,onChange:e=>E(e.target.value)})]}),(0,G.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,G.jsx)(b,{htmlFor:`notification-end`,children:`End (local time)`}),(0,G.jsx)(A,{id:`notification-end`,type:`datetime-local`,value:k,onChange:e=>j(e.target.value)})]})]}),M&&(0,G.jsx)(`p`,{className:`text-sm text-destructive`,children:M})]}),(0,G.jsxs)(c,{children:[(0,G.jsx)(n,{variant:`ghostOutline`,onClick:()=>t(!1),disabled:o,children:`Cancel`}),(0,G.jsx)(n,{variant:`submit`,onClick:()=>{let e=g.trim();if(!e){N(`Message is required.`);return}let n=J(T),o=J(k);if(n&&o&&Date.parse(o)<=Date.parse(n)){N(`End time must be after start time.`);return}let s=x.trim();if(s&&!S(s)){N(`Link must be an http(s) URL, a mailto: address, or a path starting with “/”.`);return}let c={type:m,message:e,url:s||null,startAt:n,endAt:o},l=()=>t(!1);r?a.mutate({id:r.id,draft:c},{onSuccess:l}):i.mutate(c,{onSuccess:l})},disabled:o,children:o?`Saving…`:r?`Save changes`:`Create`})]})]})})}export{X as NotificationsAdminIndex};
@@ -1 +0,0 @@
1
- import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{n as t,t as n}from"./button-MFP9n8Ck.js";import{a as r}from"./vendor-datadog-fCQhBHGk.js";import{r as i}from"./vendor-react-izWchTRL.js";import{Bn as a,Gn as o,Hn as s,Jn as c,Kn as l,Ln as u,Rn as d,Un as f,Vn as p,Yn as m,qn as h,zt as g}from"./index-zZCxAIEb.js";var _=e(r(),1),v=i(),y={active:0,upcoming:1,expired:2};function b(){let{data:e,isLoading:t}=u(),n=c(),r=d(),i=(0,_.useMemo)(()=>[...e??[]].sort((e,t)=>{let n=y[f(e,r).state],i=y[f(t,r).state];if(n!==i)return n-i;let a=p[s(e.type).severity]-p[s(t.type).severity];if(a!==0)return a;let c=o(e.endAt)??2**53-1;return(o(t.endAt)??2**53-1)-c}),[e,r]);return(0,v.jsx)(`div`,{className:`mt-32 px-4 pt-4 md:px-12 min-h-[calc(100vh-(--spacing(32)))]`,children:(0,v.jsxs)(`div`,{className:`max-w-3xl`,children:[(0,v.jsx)(`h1`,{className:`text-2xl font-light`,children:`Notifications`}),(0,v.jsx)(`p`,{className:`mt-2 text-sm text-muted-foreground`,children:`System-wide notices, including maintenance windows and downstream provider incidents.`}),(0,v.jsx)(`div`,{className:`mt-6 flex flex-col gap-3`,children:t?(0,v.jsx)(g,{className:`h-24 w-full`}):i.length===0?(0,v.jsx)(`p`,{className:`rounded-md border border-border bg-card p-8 text-center text-sm text-muted-foreground dark:bg-black-dark`,children:`No notifications right now.`}):i.map(e=>(0,v.jsx)(x,{notification:e,acked:n.has(e.id),nowMs:r},e.id))})]})})}function x({notification:e,acked:r,nowMs:i}){let{Icon:o,iconClass:c,label:u,badgeVariant:d}=s(e.type),p=f(e,i);return(0,v.jsxs)(`div`,{className:t(`flex gap-3 rounded-md border border-border bg-card p-4 dark:bg-black-dark`,r&&`opacity-60`,p.state===`expired`&&`opacity-70`),children:[(0,v.jsx)(o,{className:t(`mt-0.5 size-5 shrink-0`,c)}),(0,v.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,v.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,v.jsx)(m,{variant:d,children:u}),p.state!==`active`&&(0,v.jsx)(m,{variant:`outline`,className:`capitalize`,children:p.state}),(0,v.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:p.label})]}),(0,v.jsx)(`p`,{className:`mt-2 text-sm break-words text-foreground`,children:e.message}),(0,v.jsx)(`div`,{className:`mt-2 flex items-center gap-4 text-sm`,children:(0,v.jsx)(a,{url:e.url,className:`font-medium text-primary hover:underline dark:text-white`})})]}),(0,v.jsx)(n,{variant:`ghost`,size:`sm`,className:`shrink-0 text-muted-foreground`,onClick:()=>r?h(e.id):l(e.id),children:r?`Undo`:`Ignore`})]})}export{b as NotificationsCenter};
@@ -1 +0,0 @@
1
- import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{n as t,t as n}from"./authStore-5jSS5pTW.js";import{g as r,v as i}from"./vendor-core-BdkdbUek.js";import{i as a,t as o}from"./button-MFP9n8Ck.js";import{a as s}from"./vendor-datadog-fCQhBHGk.js";import{r as c}from"./vendor-react-izWchTRL.js";import{D as l,I as u,M as d}from"./vendor-tanstack-CQ1aRjVa.js";import{$ as f,It as p,it as m}from"./vendor-ui-aE1tHcW7.js";import{An as h,Cn as g,En as _,Hr as v,Tn as y,bn as b,vr as x,wn as S,xn as C,yn as w}from"./index-zZCxAIEb.js";async function T(e){let{id:t,newPassword:n,confirmNewPassword:r,...i}=e,o={...i};n&&n===r&&(o.password=n);let{data:s}=await a.patch(`/User/${t}`,o);return s}function E(){return u({mutationFn:e=>T(e)})}var D=r({id:i(),firstname:i({error:`Please enter your first name.`}).min(2,{error:`First name is required.`}).max(50,{error:`First name must be less than 50 characters.`}),lastname:i({error:`Please enter your last name.`}).min(2,{error:`Last name is required.`}).max(50,{error:`Last name must be less than 50 characters.`}),newPassword:i({error:`Please enter your new password.`}).min(8,{error:`Password must be 8 characters or more.`}).or(i().max(0)),confirmNewPassword:i().optional()}).refine(e=>e.newPassword===e.confirmNewPassword,{error:`Passwords do not match`,path:[`confirmNewPassword`]}),O=e(s(),1),k=c();function A(){let e=d(),r=l(),{user:i}=v(),a=m({resolver:f(D),defaultValues:{confirmNewPassword:``,firstname:i?.firstname||``,id:i?.id||``,lastname:i?.lastname||``,newPassword:``}}),{control:s,handleSubmit:c,reset:u,formState:{defaultValues:T,isDirty:A,isValid:j}}=a,{mutate:M,isPending:N}=E(),P=(0,O.useCallback)(async i=>{i&&M(i,{onSuccess:a=>{u({...T,...a}),t.updateUserForEntity(n,a),i.newPassword?(p.success(`Profile updated successfully!`,{description:`Please sign in with your new password.`}),h(),r({to:`/sign-in`}),e.invalidate()):p.success(`Profile updated successfully!`)}})},[T,r,u,e,M]);return(0,k.jsxs)(`div`,{className:`mt-20 px-4 pt-4 md:px-12 max-w-2xl`,children:[(0,k.jsx)(`h1`,{className:`text-2xl font-light`,children:`Profile`}),(0,k.jsx)(_,{...a,children:(0,k.jsxs)(`form`,{id:`profile-edit-form`,name:`profile-edit-form`,onSubmit:c(P),className:`grid gap-4 my-4`,children:[(0,k.jsx)(S,{control:s,name:`firstname`,render:({field:e})=>(0,k.jsxs)(g,{children:[(0,k.jsx)(C,{className:`pb-1`,children:`First Name`}),(0,k.jsx)(y,{children:(0,k.jsx)(w,{type:`text`,className:`dark:bg-black dark:border-black`,autoCapitalize:`words`,autoFocus:!0,...e})}),(0,k.jsx)(b,{})]})}),(0,k.jsx)(S,{control:s,name:`lastname`,render:({field:e})=>(0,k.jsxs)(g,{children:[(0,k.jsx)(C,{className:`pb-1`,children:`Last Name`}),(0,k.jsx)(y,{children:(0,k.jsx)(w,{type:`text`,className:`dark:bg-black dark:border-black`,autoCapitalize:`words`,...e})}),(0,k.jsx)(b,{})]})}),(0,k.jsxs)(g,{children:[(0,k.jsx)(C,{htmlFor:`profile-email`,className:`pb-1`,children:`Email`}),(0,k.jsx)(y,{children:(0,k.jsx)(w,{id:`profile-email`,type:`email`,enterKeyHint:`next`,autoComplete:`email`,autoCapitalize:`none`,value:i?.email||``,disabled:!0,readOnly:!0})})]}),(0,k.jsx)(S,{control:s,name:`newPassword`,render:({field:e})=>(0,k.jsxs)(g,{children:[(0,k.jsx)(C,{className:`pb-1`,children:`New Password`}),(0,k.jsx)(y,{children:(0,k.jsx)(w,{type:`password`,placeholder:`Optional`,className:`dark:bg-black dark:border-black`,autoComplete:`new-password`,autoCapitalize:`none`,...e})}),(0,k.jsx)(b,{})]})}),(0,k.jsx)(S,{control:s,name:`confirmNewPassword`,render:({field:e})=>(0,k.jsxs)(g,{children:[(0,k.jsx)(C,{className:`pb-1`,children:`Confirm New Password`}),(0,k.jsx)(y,{children:(0,k.jsx)(w,{type:`password`,className:`dark:bg-black dark:border-black`,autoComplete:`new-password`,autoCapitalize:`none`,...e})}),(0,k.jsx)(b,{})]})}),(0,k.jsx)(`div`,{className:`flex justify-between w-full`,children:(0,k.jsxs)(o,{type:`submit`,variant:`submit`,disabled:N||!A||!j,children:[(0,k.jsx)(x,{}),` Update Profile`]})})]})})]})}export{A as ProfileIndex};
@@ -1 +0,0 @@
1
- import"./chunk-FOHPRMQF-DzxwRta7.js";import{m as e}from"./mermaid-parser.core-C2lcH_jP.js";export{e as createRailroadAbnfServices};
@@ -1 +0,0 @@
1
- import"./chunk-FOHPRMQF-DzxwRta7.js";import{f as e}from"./mermaid-parser.core-C2lcH_jP.js";export{e as createRailroadEbnfServices};
@@ -1 +0,0 @@
1
- import"./chunk-FOHPRMQF-DzxwRta7.js";import{u as e}from"./mermaid-parser.core-C2lcH_jP.js";export{e as createRailroadPegServices};
@@ -1 +0,0 @@
1
- import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{g as t,h as n,o as r,s as i,v as a}from"./vendor-core-BdkdbUek.js";import{i as o,t as s}from"./button-MFP9n8Ck.js";import{a as c}from"./vendor-datadog-fCQhBHGk.js";import{r as l}from"./vendor-react-izWchTRL.js";import{I as u,J as d,L as f,z as p}from"./vendor-tanstack-CQ1aRjVa.js";import{$ as m,It as h,it as g}from"./vendor-ui-aE1tHcW7.js";import{i as _,n as v,o as y,r as b,t as x}from"./dialog-DTepachC.js";import{n as S}from"./chevron-up-CFe8x5Bp.js";import{t as C}from"./x-vYntCxm4.js";import{$n as w,$t as T,Cn as E,En as D,Fn as O,Gt as k,In as ee,Jt as A,Kt as j,Pn as te,Qn as M,Qt as N,Sr as P,Tn as F,Wr as I,Wt as ne,Yn as L,Yt as R,Zn as z,bn as B,en as re,kr as ie,nn as ae,or as oe,qt as V,tn as se,wn as H,wr as ce,xn as U,yn as W}from"./index-zZCxAIEb.js";var G=e(c(),1),K=l();function q({options:e,selected:t,onChange:n,placeholder:r=`Select…`,emptyText:i=`No options`,ariaLabel:a,disabled:o,id:c,allowRepeats:l,maxVisibleOptions:u}){let[d,f]=(0,G.useState)(!1),[p,m]=(0,G.useState)(``),h=(0,G.useRef)(null),g=(0,G.useRef)(null),_=(0,G.useMemo)(()=>new Set(t),[t]),v=(0,G.useMemo)(()=>new Map(e.map(e=>[e.value,e.label])),[e]);(0,G.useEffect)(()=>{if(!d)return;let e=0,t=requestAnimationFrame(()=>{e=requestAnimationFrame(()=>h.current?.focus())});return()=>{cancelAnimationFrame(t),cancelAnimationFrame(e)}},[d]);let y=(0,G.useMemo)(()=>{let t=p.trim().toLowerCase();return t?e.filter(e=>e.label.toLowerCase().includes(t)||e.value.toLowerCase().includes(t)):e},[e,p]),b=u?y.slice(0,u):y,x=y.length-b.length,T=e=>{l?n([...t,e]):_.has(e)?n(t.filter(t=>t!==e)):n([...t,e])},E=e=>n(t.filter((t,n)=>n!==e)),D=e=>{let t=g.current?.querySelectorAll(`[role="menuitemcheckbox"]:not([data-disabled])`);t?.length&&(e===`first`?t[0]:t[t.length-1]).focus()};return(0,K.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,K.jsxs)(z,{open:d,onOpenChange:e=>{f(e),e||m(``)},children:[(0,K.jsx)(oe,{asChild:!0,disabled:o,children:(0,K.jsxs)(s,{id:c,type:`button`,variant:`outline`,"aria-label":a,className:`w-full justify-between font-normal`,children:[(0,K.jsx)(`span`,{className:t.length?`truncate`:`truncate text-muted-foreground`,children:t.length?`${t.length} selected`:r}),(0,K.jsx)(S,{className:`size-4 shrink-0 opacity-60`})]})}),(0,K.jsxs)(w,{ref:g,className:`w-(--radix-dropdown-menu-trigger-width) max-h-72 overflow-y-auto`,align:`start`,children:[(0,K.jsx)(`input`,{ref:h,value:p,onChange:e=>m(e.target.value),onKeyDown:e=>{if(e.key===`ArrowDown`||e.key===`ArrowUp`){e.preventDefault(),D(e.key===`ArrowDown`?`first`:`last`);return}e.key.length===1&&!e.ctrlKey&&!e.altKey&&!e.metaKey&&e.stopPropagation()},placeholder:`Filter…`,"aria-label":`Filter options`,className:`mb-1 w-full rounded-md border bg-transparent px-2 py-1 text-sm outline-none`}),y.length===0?(0,K.jsx)(`div`,{className:`px-2 py-1.5 text-sm text-muted-foreground`,children:i}):b.map(e=>(0,K.jsx)(M,{checked:_.has(e.value),onCheckedChange:()=>T(e.value),onSelect:e=>e.preventDefault(),children:e.label},e.value)),x>0&&(0,K.jsxs)(`div`,{className:`px-2 py-1.5 text-xs text-muted-foreground`,children:[x,` more — keep typing to narrow`]})]})]}),t.length>0&&(0,K.jsx)(`div`,{className:`flex flex-wrap gap-1`,children:t.map((e,t)=>{let n=v.get(e)??e;return(0,K.jsxs)(L,{variant:`secondary`,className:`gap-1`,children:[n,(0,K.jsx)(`button`,{type:`button`,"aria-label":`Remove ${n}`,onClick:()=>E(t),className:`ml-0.5 rounded-sm hover:text-destructive`,children:(0,K.jsx)(C,{className:`size-3`})})]},`${e}-${t}`)})})]})}async function le(e){let{data:t}=await o.post(`/Admin/Region/`,e);return t}function ue(){return u({mutationFn:le})}async function de({id:e,changes:t}){let{data:n}=await o.patch(`/Admin/Region/${e}`,t);return n}function fe(){return u({mutationFn:de})}async function pe(){let{data:e}=await o.get(`/Location/`);return e}var me=[`fabric-admin`,`locations`];function he(){return f({queryKey:me,queryFn:pe,retry:!1})}function J(e,t){return t?`${e} (${t})`:e}async function ge(){let e=[];for(let t=0;t<40;t++){let n=t*500,r=[`status=ne=DELETED`,`sort(name)`,`limit(${n},${n+500})`].join(`&`),{data:i}=await o.get(`/Admin/Organization/?${r}`),a=i;if(e.push(...a),a.length<500)return{organizations:e,truncated:!1}}return{organizations:e,truncated:!0}}var _e=[`fabric-admin`,`organizations`];function Y(){return f({queryKey:_e,queryFn:ge,retry:!1})}async function ve(){let{data:e}=await o.get(`/Admin/Region/`);return e}var X=[`fabric-admin`,`regions`];function Z(){return f({queryKey:X,queryFn:ve,retry:!1})}var ye=t({id:a().trim().min(1,`ID is required`).regex(/^[a-z0-9-]+$/,`Use lowercase letters, numbers, and hyphens only`),region:a().trim().min(1,`Region is required`),instanceCount:n({error:`Enter a whole number`}).int(`Must be a whole number`).min(1,`Must be at least 1`),purchasedBlockMultiplier:n({error:`Enter a whole number`}).int(`Must be a whole number`).min(1,`Must be at least 1`),latencyDescription:a().trim().min(1,`Latency description is required`),linodePreferredLocations:r(a()),gcpPreferredLocations:r(a()),forceLocations:i(),active:i(),organizationIds:r(a())}).superRefine((e,t)=>{e.forceLocations&&!e.linodePreferredLocations.length&&!e.gcpPreferredLocations.length&&t.addIssue({code:`custom`,path:[`forceLocations`],message:`Add at least one preferred location, or turn off Force locations`})}),be=100;function Q(e){return{id:e?.id??``,region:e?.region??``,instanceCount:e?.instanceCount??1,purchasedBlockMultiplier:e?.purchasedBlockMultiplier??1,latencyDescription:e?.latencyDescription??``,linodePreferredLocations:e?.linodePreferredLocations??[],gcpPreferredLocations:e?.gcpPreferredLocations??[],forceLocations:e?.forceLocations??!1,active:e?.active??!0,organizationIds:e?.organizationIds??[]}}function xe({open:e,onOpenChange:t,region:n}){let r=!!n,i=d(),{data:a=[]}=p({...he(),enabled:e}),{data:o}=p({...Y(),enabled:e}),c=o?.organizations??[],{data:l=[]}=p({...Z(),enabled:e}),{mutate:u,isPending:f}=ue(),{mutate:S,isPending:C}=fe(),w=f||C,k=(0,G.useMemo)(()=>a.filter(e=>e.cloudProvider===`linode`).map(e=>({value:e.location,label:`${e.locationName} (${e.location})`})),[a]),A=(0,G.useMemo)(()=>a.filter(e=>e.cloudProvider===`gcp`).map(e=>({value:e.location,label:`${e.locationName} (${e.location})`})),[a]),j=(0,G.useMemo)(()=>c.map(e=>({value:e.id,label:J(e.id,e.name)})),[c]),M=(0,G.useMemo)(()=>{let e=new Set;for(let t of a)for(let n of t.regions??[])e.add(n);return n?.region&&e.add(n.region),[...e].sort()},[a,n]),P=g({resolver:m(ye),defaultValues:Q(n)});(0,G.useEffect)(()=>{e&&P.reset(Q(n))},[e,n,P]);let I=e=>{let a=e=>e.trim().toLowerCase(),o=!n||a(n.latencyDescription)!==a(e.latencyDescription),s=l.filter(e=>e.id!==n?.id);if(o&&s.some(t=>a(t.latencyDescription)===a(e.latencyDescription))){P.setError(`latencyDescription`,{message:`A region with this latency description already exists`});return}let c=e.organizationIds.length>0?e.organizationIds:null,d=()=>{h.success(r?`Region updated`:`Region created`),i.invalidateQueries({queryKey:X}),t(!1)};if(n){let{id:t,...r}=e;S({id:n.id,changes:{...r,organizationIds:c}},{onSuccess:d})}else u({...e,organizationIds:c},{onSuccess:d})};return(0,K.jsx)(x,{open:e,onOpenChange:t,children:(0,K.jsxs)(v,{className:`max-w-2xl`,children:[(0,K.jsx)(y,{children:r?`Edit region`:`Create region`}),(0,K.jsx)(b,{children:r?`Update this region. Its ID is fixed once created.`:`Define a new deployment region. Leave organizations empty to make it public (all organizations).`}),(0,K.jsx)(D,{...P,children:(0,K.jsxs)(`form`,{className:`my-4 flex flex-col gap-4`,onSubmit:P.handleSubmit(I),children:[(0,K.jsxs)(`div`,{className:`grid grid-cols-1 gap-4 sm:grid-cols-2 items-start`,children:[(0,K.jsx)(H,{control:P.control,name:`id`,render:({field:e})=>(0,K.jsxs)(E,{children:[(0,K.jsx)(U,{className:`pb-1`,children:`Region ID`}),(0,K.jsx)(F,{children:(0,K.jsx)(W,{placeholder:`e.g. us-east-1`,...e,disabled:r})}),(0,K.jsx)(B,{})]})}),(0,K.jsx)(H,{control:P.control,name:`region`,render:({field:e})=>(0,K.jsxs)(E,{children:[(0,K.jsx)(U,{className:`pb-1`,children:`Region`}),(0,K.jsx)(F,{children:(0,K.jsxs)(N,{value:e.value,onValueChange:e.onChange,children:[(0,K.jsx)(se,{className:`w-full`,children:(0,K.jsx)(ae,{placeholder:`Select a region`})}),(0,K.jsx)(T,{children:M.map(e=>(0,K.jsx)(re,{value:e,children:e},e))})]})}),(0,K.jsx)(B,{})]})}),(0,K.jsx)(H,{control:P.control,name:`instanceCount`,render:({field:e})=>(0,K.jsxs)(E,{children:[(0,K.jsx)(U,{className:`pb-1`,children:`Instance count`}),(0,K.jsx)(F,{children:(0,K.jsx)(W,{type:`number`,min:1,step:1,name:e.name,ref:e.ref,onBlur:e.onBlur,value:Number.isFinite(e.value)?e.value:``,onChange:t=>e.onChange(t.target.valueAsNumber)})}),(0,K.jsx)(B,{})]})}),(0,K.jsx)(H,{control:P.control,name:`purchasedBlockMultiplier`,render:({field:e})=>(0,K.jsxs)(E,{children:[(0,K.jsxs)(`div`,{className:`flex items-center gap-1.5 pb-1`,children:[(0,K.jsx)(U,{className:`!pb-0`,children:`Purchased block multiplier`}),(0,K.jsxs)(te,{children:[(0,K.jsx)(ee,{asChild:!0,children:(0,K.jsx)(`button`,{type:`button`,"aria-label":`What is the purchased block multiplier?`,className:`text-muted-foreground hover:text-foreground`,children:(0,K.jsx)(ie,{className:`size-3.5`})})}),(0,K.jsx)(O,{className:`max-w-xs`,children:`How many purchased blocks a cluster in this region is billed for. One block covers a baseline cluster: a 2-node cluster is 1 block and a 4-node cluster is 2 blocks. Each block carries one license against the selected plan's limits; once they're all used up, this many are issued and billed again.`})]})]}),(0,K.jsx)(F,{children:(0,K.jsx)(W,{type:`number`,min:1,step:1,name:e.name,ref:e.ref,onBlur:e.onBlur,value:Number.isFinite(e.value)?e.value:``,onChange:t=>e.onChange(t.target.valueAsNumber)})}),(0,K.jsx)(B,{})]})})]}),(0,K.jsx)(H,{control:P.control,name:`latencyDescription`,render:({field:e})=>(0,K.jsxs)(E,{children:[(0,K.jsx)(U,{className:`pb-1`,children:`Latency description`}),(0,K.jsx)(F,{children:(0,K.jsx)(W,{placeholder:`e.g. 280ms, medium distribution`,...e})}),(0,K.jsx)(B,{})]})}),(0,K.jsxs)(`div`,{className:`grid grid-cols-1 gap-4 sm:grid-cols-2 items-start`,children:[(0,K.jsx)(H,{control:P.control,name:`linodePreferredLocations`,render:({field:e})=>(0,K.jsxs)(E,{children:[(0,K.jsx)(U,{className:`pb-1`,children:`Linode preferred locations`}),(0,K.jsx)(F,{children:(0,K.jsx)(q,{options:k,selected:e.value,onChange:e.onChange,placeholder:`Any Linode location`,emptyText:`No Linode locations`,ariaLabel:`Linode preferred locations`,allowRepeats:!0})}),(0,K.jsx)(B,{})]})}),(0,K.jsx)(H,{control:P.control,name:`gcpPreferredLocations`,render:({field:e})=>(0,K.jsxs)(E,{children:[(0,K.jsx)(U,{className:`pb-1`,children:`GCP preferred locations`}),(0,K.jsx)(F,{children:(0,K.jsx)(q,{options:A,selected:e.value,onChange:e.onChange,placeholder:`Any GCP location`,emptyText:`No GCP locations`,ariaLabel:`GCP preferred locations`,allowRepeats:!0})}),(0,K.jsx)(B,{})]})})]}),(0,K.jsx)(H,{control:P.control,name:`forceLocations`,render:({field:e})=>(0,K.jsxs)(E,{children:[(0,K.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,K.jsx)(F,{children:(0,K.jsx)(`input`,{type:`checkbox`,className:`size-4`,checked:e.value,onChange:t=>e.onChange(t.target.checked)})}),(0,K.jsx)(U,{className:`!pb-0`,children:`Force locations`})]}),(0,K.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Pin deployments to the preferred locations above instead of treating them as hints.`}),(0,K.jsx)(B,{})]})}),(0,K.jsx)(H,{control:P.control,name:`active`,render:({field:e})=>(0,K.jsxs)(E,{children:[(0,K.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,K.jsx)(F,{children:(0,K.jsx)(`input`,{type:`checkbox`,className:`size-4`,checked:e.value,onChange:t=>e.onChange(t.target.checked)})}),(0,K.jsx)(U,{className:`!pb-0`,children:`Active`})]}),(0,K.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Inactive regions stay available to existing deployments but aren't offered for new ones.`}),(0,K.jsx)(B,{})]})}),(0,K.jsx)(H,{control:P.control,name:`organizationIds`,render:({field:e})=>(0,K.jsxs)(E,{children:[(0,K.jsx)(U,{className:`pb-1`,children:`Organizations (customer scope)`}),(0,K.jsx)(F,{children:(0,K.jsx)(q,{options:j,selected:e.value,onChange:e.onChange,placeholder:`Public — all organizations`,emptyText:`No organizations`,ariaLabel:`Organizations`,maxVisibleOptions:be})}),o?.truncated&&(0,K.jsx)(`p`,{className:`text-xs text-destructive`,children:`Too many organizations to list them all — some may be missing from this picker.`}),(0,K.jsx)(B,{})]})}),(0,K.jsx)(_,{children:(0,K.jsxs)(`div`,{className:`flex w-full justify-between`,children:[(0,K.jsx)(s,{variant:`destructiveOutline`,type:`button`,onClick:()=>t(!1),disabled:w,children:`Cancel`}),(0,K.jsx)(s,{variant:`submit`,disabled:w,children:w?`Saving…`:r?`Save changes`:`Create region`})]})})]})})]})})}function $({organizationIds:e,orgNameById:t}){return e==null||e.length===0?(0,K.jsx)(K.Fragment,{children:`Public`}):(0,K.jsx)(`div`,{className:`flex flex-col gap-0.5`,children:e.map(e=>(0,K.jsx)(`span`,{className:`break-words`,children:J(e,t.get(e))},e))})}function Se(){let{data:e,isLoading:t,isError:n}=p(Z()),{data:r}=p(Y()),[i,a]=(0,G.useState)(!1),[o,c]=(0,G.useState)(null),[l,u]=(0,G.useState)(``),d=I(`region:write`),f=(0,G.useMemo)(()=>new Map((r?.organizations??[]).map(e=>[e.id,e.name])),[r]),m=(0,G.useMemo)(()=>{let t=l.trim().toLowerCase();return!t||!e?e??[]:e.filter(e=>e.region.toLowerCase().includes(t)||e.id.toLowerCase().includes(t)||e.latencyDescription.toLowerCase().includes(t)||(e.organizationIds??[]).some(e=>e.toLowerCase().includes(t)||(f.get(e)??``).toLowerCase().includes(t)))},[e,l,f]),h=()=>{c(null),a(!0)},g=e=>{c(e),a(!0)};return(0,K.jsxs)(`div`,{className:`max-w-4xl`,children:[(0,K.jsxs)(`div`,{className:`flex items-start justify-between gap-4`,children:[(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`h1`,{className:`text-2xl font-light`,children:`Regions`}),(0,K.jsx)(`p`,{className:`mt-2 text-sm text-muted-foreground`,children:`Deployment regions customers can provision into. A region scoped to organizations is only offered to those customers; otherwise it's available to everyone.`})]}),d&&(0,K.jsxs)(s,{variant:`submit`,onClick:h,className:`shrink-0`,children:[(0,K.jsx)(P,{}),`Create region`]})]}),(0,K.jsx)(`div`,{className:`mt-6`,children:t?(0,K.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Loading regions…`}):n?(0,K.jsx)(`p`,{className:`text-sm text-destructive`,children:`Couldn't load regions.`}):!e||e.length===0?(0,K.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`No regions yet. Create one to get started.`}):(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(W,{value:l,onChange:e=>u(e.target.value),placeholder:`Filter by ID, region, description, or organization…`,"aria-label":`Filter regions`,className:`mb-4 max-w-md`}),m.length===0?(0,K.jsxs)(`p`,{className:`text-sm text-muted-foreground`,children:[`No regions match “`,l,`”.`]}):(0,K.jsxs)(ne,{children:[(0,K.jsx)(A,{children:(0,K.jsxs)(R,{children:[(0,K.jsx)(V,{children:`ID`}),(0,K.jsx)(V,{children:`Region`}),(0,K.jsx)(V,{className:`text-right pr-6`,children:`Instances`}),(0,K.jsx)(V,{children:`Description`}),(0,K.jsx)(V,{children:`Scope`}),(0,K.jsx)(V,{className:`w-0`})]})}),(0,K.jsx)(k,{children:m.map(e=>(0,K.jsxs)(R,{className:e.active===!1?`opacity-60`:void 0,children:[(0,K.jsx)(j,{className:`font-mono font-medium`,children:(0,K.jsxs)(`span`,{className:`inline-flex items-center gap-2`,children:[e.id,e.active===!1&&(0,K.jsx)(L,{variant:`secondary`,className:`text-[10px]`,children:`Inactive`})]})}),(0,K.jsx)(j,{children:e.region}),(0,K.jsx)(j,{className:`text-right pr-6`,children:e.instanceCount}),(0,K.jsx)(j,{className:`text-muted-foreground`,children:e.latencyDescription}),(0,K.jsx)(j,{children:(0,K.jsx)($,{organizationIds:e.organizationIds,orgNameById:f})}),(0,K.jsx)(j,{className:`text-right`,children:d&&(0,K.jsx)(s,{variant:`ghost`,size:`icon`,"aria-label":`Edit ${e.id}`,onClick:()=>g(e),children:(0,K.jsx)(ce,{})})})]},e.id))})]})]})}),(0,K.jsx)(xe,{open:i,onOpenChange:a,region:o})]})}export{$ as RegionScope,Se as RegionsIndex};