@cratis/showrunner.boxoffice.react 0.0.0-stage → 1.11.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 (329) hide show
  1. package/Banners/NoLicense.tsx +36 -0
  2. package/Banners/SuspensionBanner.tsx +54 -0
  3. package/Banners/TrialBanner.tsx +30 -0
  4. package/Banners/bannerModels.ts +117 -0
  5. package/Banners/index.ts +7 -0
  6. package/Entitlements/EntitlementsContext.ts +17 -0
  7. package/Entitlements/RequiresModule.tsx +68 -0
  8. package/Entitlements/entitlementModel.ts +175 -0
  9. package/Entitlements/index.ts +9 -0
  10. package/Entitlements/moduleFilter.ts +23 -0
  11. package/Entitlements/requiresModuleModel.ts +44 -0
  12. package/Entitlements/useEntitlements.ts +25 -0
  13. package/Labels/BoxOfficeLabels.ts +239 -0
  14. package/Labels/defaultBoxOfficeLabels.ts +119 -0
  15. package/Labels/format.ts +13 -0
  16. package/Labels/index.ts +7 -0
  17. package/Labels/resolveLabels.ts +36 -0
  18. package/Plan/PlanPage.tsx +24 -0
  19. package/Plan/PlanView.tsx +80 -0
  20. package/Plan/index.ts +6 -0
  21. package/Plan/planModels.ts +127 -0
  22. package/Portal/PortalButton.tsx +48 -0
  23. package/Portal/index.ts +5 -0
  24. package/Portal/portalLinks.ts +32 -0
  25. package/Provider/BoxOfficeContext.ts +67 -0
  26. package/Provider/BoxOfficeProvider.tsx +96 -0
  27. package/Provider/index.ts +5 -0
  28. package/README.md +78 -2
  29. package/Seats/AssignSeatDialog.tsx +73 -0
  30. package/Seats/SeatsPage.tsx +85 -0
  31. package/Seats/SeatsView.tsx +108 -0
  32. package/Seats/index.ts +7 -0
  33. package/Seats/seatModels.ts +97 -0
  34. package/Usage/UsagePage.tsx +26 -0
  35. package/Usage/UsageView.tsx +94 -0
  36. package/Usage/index.ts +6 -0
  37. package/Usage/usageModels.ts +92 -0
  38. package/dist/cjs/Banners/NoLicense.d.ts +2 -0
  39. package/dist/cjs/Banners/NoLicense.d.ts.map +1 -0
  40. package/dist/cjs/Banners/NoLicense.js +50 -0
  41. package/dist/cjs/Banners/NoLicense.js.map +1 -0
  42. package/dist/cjs/Banners/SuspensionBanner.d.ts +7 -0
  43. package/dist/cjs/Banners/SuspensionBanner.d.ts.map +1 -0
  44. package/dist/cjs/Banners/SuspensionBanner.js +62 -0
  45. package/dist/cjs/Banners/SuspensionBanner.js.map +1 -0
  46. package/dist/cjs/Banners/TrialBanner.d.ts +2 -0
  47. package/dist/cjs/Banners/TrialBanner.d.ts.map +1 -0
  48. package/dist/cjs/Banners/TrialBanner.js +38 -0
  49. package/dist/cjs/Banners/TrialBanner.js.map +1 -0
  50. package/dist/cjs/Banners/bannerModels.d.ts +19 -0
  51. package/dist/cjs/Banners/bannerModels.d.ts.map +1 -0
  52. package/dist/cjs/Banners/bannerModels.js +101 -0
  53. package/dist/cjs/Banners/bannerModels.js.map +1 -0
  54. package/dist/cjs/Banners/index.d.ts +5 -0
  55. package/dist/cjs/Banners/index.d.ts.map +1 -0
  56. package/dist/cjs/Entitlements/EntitlementsContext.d.ts +4 -0
  57. package/dist/cjs/Entitlements/EntitlementsContext.d.ts.map +1 -0
  58. package/dist/cjs/Entitlements/EntitlementsContext.js +19 -0
  59. package/dist/cjs/Entitlements/EntitlementsContext.js.map +1 -0
  60. package/dist/cjs/Entitlements/RequiresModule.d.ts +9 -0
  61. package/dist/cjs/Entitlements/RequiresModule.d.ts.map +1 -0
  62. package/dist/cjs/Entitlements/RequiresModule.js +68 -0
  63. package/dist/cjs/Entitlements/RequiresModule.js.map +1 -0
  64. package/dist/cjs/Entitlements/entitlementModel.d.ts +25 -0
  65. package/dist/cjs/Entitlements/entitlementModel.d.ts.map +1 -0
  66. package/dist/cjs/Entitlements/entitlementModel.js +93 -0
  67. package/dist/cjs/Entitlements/entitlementModel.js.map +1 -0
  68. package/dist/cjs/Entitlements/index.d.ts +7 -0
  69. package/dist/cjs/Entitlements/index.d.ts.map +1 -0
  70. package/dist/cjs/Entitlements/moduleFilter.d.ts +6 -0
  71. package/dist/cjs/Entitlements/moduleFilter.d.ts.map +1 -0
  72. package/dist/cjs/Entitlements/moduleFilter.js +16 -0
  73. package/dist/cjs/Entitlements/moduleFilter.js.map +1 -0
  74. package/dist/cjs/Entitlements/requiresModuleModel.d.ts +10 -0
  75. package/dist/cjs/Entitlements/requiresModuleModel.d.ts.map +1 -0
  76. package/dist/cjs/Entitlements/requiresModuleModel.js +32 -0
  77. package/dist/cjs/Entitlements/requiresModuleModel.js.map +1 -0
  78. package/dist/cjs/Entitlements/useEntitlements.d.ts +5 -0
  79. package/dist/cjs/Entitlements/useEntitlements.d.ts.map +1 -0
  80. package/dist/cjs/Entitlements/useEntitlements.js +26 -0
  81. package/dist/cjs/Entitlements/useEntitlements.js.map +1 -0
  82. package/dist/cjs/Labels/BoxOfficeLabels.d.ts +116 -0
  83. package/dist/cjs/Labels/BoxOfficeLabels.d.ts.map +1 -0
  84. package/dist/cjs/Labels/defaultBoxOfficeLabels.d.ts +3 -0
  85. package/dist/cjs/Labels/defaultBoxOfficeLabels.d.ts.map +1 -0
  86. package/dist/cjs/Labels/defaultBoxOfficeLabels.js +120 -0
  87. package/dist/cjs/Labels/defaultBoxOfficeLabels.js.map +1 -0
  88. package/dist/cjs/Labels/format.d.ts +2 -0
  89. package/dist/cjs/Labels/format.d.ts.map +1 -0
  90. package/dist/cjs/Labels/format.js +15 -0
  91. package/dist/cjs/Labels/format.js.map +1 -0
  92. package/dist/cjs/Labels/index.d.ts +5 -0
  93. package/dist/cjs/Labels/index.d.ts.map +1 -0
  94. package/dist/cjs/Labels/resolveLabels.d.ts +3 -0
  95. package/dist/cjs/Labels/resolveLabels.d.ts.map +1 -0
  96. package/dist/cjs/Labels/resolveLabels.js +35 -0
  97. package/dist/cjs/Labels/resolveLabels.js.map +1 -0
  98. package/dist/cjs/Plan/PlanPage.d.ts +2 -0
  99. package/dist/cjs/Plan/PlanPage.d.ts.map +1 -0
  100. package/dist/cjs/Plan/PlanPage.js +24 -0
  101. package/dist/cjs/Plan/PlanPage.js.map +1 -0
  102. package/dist/cjs/Plan/PlanView.d.ts +10 -0
  103. package/dist/cjs/Plan/PlanView.d.ts.map +1 -0
  104. package/dist/cjs/Plan/PlanView.js +123 -0
  105. package/dist/cjs/Plan/PlanView.js.map +1 -0
  106. package/dist/cjs/Plan/index.d.ts +4 -0
  107. package/dist/cjs/Plan/index.d.ts.map +1 -0
  108. package/dist/cjs/Plan/planModels.d.ts +24 -0
  109. package/dist/cjs/Plan/planModels.d.ts.map +1 -0
  110. package/dist/cjs/Plan/planModels.js +83 -0
  111. package/dist/cjs/Plan/planModels.js.map +1 -0
  112. package/dist/cjs/Portal/PortalButton.d.ts +10 -0
  113. package/dist/cjs/Portal/PortalButton.d.ts.map +1 -0
  114. package/dist/cjs/Portal/PortalButton.js +37 -0
  115. package/dist/cjs/Portal/PortalButton.js.map +1 -0
  116. package/dist/cjs/Portal/index.d.ts +3 -0
  117. package/dist/cjs/Portal/index.d.ts.map +1 -0
  118. package/dist/cjs/Portal/portalLinks.d.ts +6 -0
  119. package/dist/cjs/Portal/portalLinks.d.ts.map +1 -0
  120. package/dist/cjs/Portal/portalLinks.js +34 -0
  121. package/dist/cjs/Portal/portalLinks.js.map +1 -0
  122. package/dist/cjs/Provider/BoxOfficeContext.d.ts +16 -0
  123. package/dist/cjs/Provider/BoxOfficeContext.d.ts.map +1 -0
  124. package/dist/cjs/Provider/BoxOfficeContext.js +34 -0
  125. package/dist/cjs/Provider/BoxOfficeContext.js.map +1 -0
  126. package/dist/cjs/Provider/BoxOfficeProvider.d.ts +15 -0
  127. package/dist/cjs/Provider/BoxOfficeProvider.d.ts.map +1 -0
  128. package/dist/cjs/Provider/BoxOfficeProvider.js +72 -0
  129. package/dist/cjs/Provider/BoxOfficeProvider.js.map +1 -0
  130. package/dist/cjs/Provider/index.d.ts +3 -0
  131. package/dist/cjs/Provider/index.d.ts.map +1 -0
  132. package/dist/cjs/Seats/AssignSeatDialog.d.ts +9 -0
  133. package/dist/cjs/Seats/AssignSeatDialog.d.ts.map +1 -0
  134. package/dist/cjs/Seats/AssignSeatDialog.js +99 -0
  135. package/dist/cjs/Seats/AssignSeatDialog.js.map +1 -0
  136. package/dist/cjs/Seats/SeatsPage.d.ts +2 -0
  137. package/dist/cjs/Seats/SeatsPage.d.ts.map +1 -0
  138. package/dist/cjs/Seats/SeatsPage.js +87 -0
  139. package/dist/cjs/Seats/SeatsPage.js.map +1 -0
  140. package/dist/cjs/Seats/SeatsView.d.ts +14 -0
  141. package/dist/cjs/Seats/SeatsView.d.ts.map +1 -0
  142. package/dist/cjs/Seats/SeatsView.js +111 -0
  143. package/dist/cjs/Seats/SeatsView.js.map +1 -0
  144. package/dist/cjs/Seats/index.d.ts +5 -0
  145. package/dist/cjs/Seats/index.d.ts.map +1 -0
  146. package/dist/cjs/Seats/seatModels.d.ts +23 -0
  147. package/dist/cjs/Seats/seatModels.d.ts.map +1 -0
  148. package/dist/cjs/Seats/seatModels.js +65 -0
  149. package/dist/cjs/Seats/seatModels.js.map +1 -0
  150. package/dist/cjs/Usage/UsagePage.d.ts +2 -0
  151. package/dist/cjs/Usage/UsagePage.d.ts.map +1 -0
  152. package/dist/cjs/Usage/UsagePage.js +26 -0
  153. package/dist/cjs/Usage/UsagePage.js.map +1 -0
  154. package/dist/cjs/Usage/UsageView.d.ts +9 -0
  155. package/dist/cjs/Usage/UsageView.d.ts.map +1 -0
  156. package/dist/cjs/Usage/UsageView.js +108 -0
  157. package/dist/cjs/Usage/UsageView.js.map +1 -0
  158. package/dist/cjs/Usage/index.d.ts +4 -0
  159. package/dist/cjs/Usage/index.d.ts.map +1 -0
  160. package/dist/cjs/Usage/usageModels.d.ts +17 -0
  161. package/dist/cjs/Usage/usageModels.d.ts.map +1 -0
  162. package/dist/cjs/Usage/usageModels.js +57 -0
  163. package/dist/cjs/Usage/usageModels.js.map +1 -0
  164. package/dist/cjs/formatting.d.ts +5 -0
  165. package/dist/cjs/formatting.d.ts.map +1 -0
  166. package/dist/cjs/formatting.js +46 -0
  167. package/dist/cjs/formatting.js.map +1 -0
  168. package/dist/cjs/index.d.ts +10 -0
  169. package/dist/cjs/index.d.ts.map +1 -0
  170. package/dist/cjs/index.js +85 -0
  171. package/dist/cjs/index.js.map +1 -0
  172. package/dist/cjs/package.json +3 -0
  173. package/dist/esm/Banners/NoLicense.d.ts +2 -0
  174. package/dist/esm/Banners/NoLicense.d.ts.map +1 -0
  175. package/dist/esm/Banners/NoLicense.js +48 -0
  176. package/dist/esm/Banners/NoLicense.js.map +1 -0
  177. package/dist/esm/Banners/SuspensionBanner.d.ts +7 -0
  178. package/dist/esm/Banners/SuspensionBanner.d.ts.map +1 -0
  179. package/dist/esm/Banners/SuspensionBanner.js +59 -0
  180. package/dist/esm/Banners/SuspensionBanner.js.map +1 -0
  181. package/dist/esm/Banners/TrialBanner.d.ts +2 -0
  182. package/dist/esm/Banners/TrialBanner.d.ts.map +1 -0
  183. package/dist/esm/Banners/TrialBanner.js +36 -0
  184. package/dist/esm/Banners/TrialBanner.js.map +1 -0
  185. package/dist/esm/Banners/bannerModels.d.ts +19 -0
  186. package/dist/esm/Banners/bannerModels.d.ts.map +1 -0
  187. package/dist/esm/Banners/bannerModels.js +96 -0
  188. package/dist/esm/Banners/bannerModels.js.map +1 -0
  189. package/dist/esm/Banners/index.d.ts +5 -0
  190. package/dist/esm/Banners/index.d.ts.map +1 -0
  191. package/dist/esm/Banners/index.js +5 -0
  192. package/dist/esm/Banners/index.js.map +1 -0
  193. package/dist/esm/Entitlements/EntitlementsContext.d.ts +4 -0
  194. package/dist/esm/Entitlements/EntitlementsContext.d.ts.map +1 -0
  195. package/dist/esm/Entitlements/EntitlementsContext.js +16 -0
  196. package/dist/esm/Entitlements/EntitlementsContext.js.map +1 -0
  197. package/dist/esm/Entitlements/RequiresModule.d.ts +9 -0
  198. package/dist/esm/Entitlements/RequiresModule.d.ts.map +1 -0
  199. package/dist/esm/Entitlements/RequiresModule.js +66 -0
  200. package/dist/esm/Entitlements/RequiresModule.js.map +1 -0
  201. package/dist/esm/Entitlements/entitlementModel.d.ts +25 -0
  202. package/dist/esm/Entitlements/entitlementModel.d.ts.map +1 -0
  203. package/dist/esm/Entitlements/entitlementModel.js +89 -0
  204. package/dist/esm/Entitlements/entitlementModel.js.map +1 -0
  205. package/dist/esm/Entitlements/index.d.ts +7 -0
  206. package/dist/esm/Entitlements/index.d.ts.map +1 -0
  207. package/dist/esm/Entitlements/index.js +7 -0
  208. package/dist/esm/Entitlements/index.js.map +1 -0
  209. package/dist/esm/Entitlements/moduleFilter.d.ts +6 -0
  210. package/dist/esm/Entitlements/moduleFilter.d.ts.map +1 -0
  211. package/dist/esm/Entitlements/moduleFilter.js +14 -0
  212. package/dist/esm/Entitlements/moduleFilter.js.map +1 -0
  213. package/dist/esm/Entitlements/requiresModuleModel.d.ts +10 -0
  214. package/dist/esm/Entitlements/requiresModuleModel.d.ts.map +1 -0
  215. package/dist/esm/Entitlements/requiresModuleModel.js +30 -0
  216. package/dist/esm/Entitlements/requiresModuleModel.js.map +1 -0
  217. package/dist/esm/Entitlements/useEntitlements.d.ts +5 -0
  218. package/dist/esm/Entitlements/useEntitlements.d.ts.map +1 -0
  219. package/dist/esm/Entitlements/useEntitlements.js +23 -0
  220. package/dist/esm/Entitlements/useEntitlements.js.map +1 -0
  221. package/dist/esm/Labels/BoxOfficeLabels.d.ts +116 -0
  222. package/dist/esm/Labels/BoxOfficeLabels.d.ts.map +1 -0
  223. package/dist/esm/Labels/BoxOfficeLabels.js +2 -0
  224. package/dist/esm/Labels/BoxOfficeLabels.js.map +1 -0
  225. package/dist/esm/Labels/defaultBoxOfficeLabels.d.ts +3 -0
  226. package/dist/esm/Labels/defaultBoxOfficeLabels.d.ts.map +1 -0
  227. package/dist/esm/Labels/defaultBoxOfficeLabels.js +118 -0
  228. package/dist/esm/Labels/defaultBoxOfficeLabels.js.map +1 -0
  229. package/dist/esm/Labels/format.d.ts +2 -0
  230. package/dist/esm/Labels/format.d.ts.map +1 -0
  231. package/dist/esm/Labels/format.js +13 -0
  232. package/dist/esm/Labels/format.js.map +1 -0
  233. package/dist/esm/Labels/index.d.ts +5 -0
  234. package/dist/esm/Labels/index.d.ts.map +1 -0
  235. package/dist/esm/Labels/index.js +5 -0
  236. package/dist/esm/Labels/index.js.map +1 -0
  237. package/dist/esm/Labels/resolveLabels.d.ts +3 -0
  238. package/dist/esm/Labels/resolveLabels.d.ts.map +1 -0
  239. package/dist/esm/Labels/resolveLabels.js +33 -0
  240. package/dist/esm/Labels/resolveLabels.js.map +1 -0
  241. package/dist/esm/Plan/PlanPage.d.ts +2 -0
  242. package/dist/esm/Plan/PlanPage.d.ts.map +1 -0
  243. package/dist/esm/Plan/PlanPage.js +22 -0
  244. package/dist/esm/Plan/PlanPage.js.map +1 -0
  245. package/dist/esm/Plan/PlanView.d.ts +10 -0
  246. package/dist/esm/Plan/PlanView.d.ts.map +1 -0
  247. package/dist/esm/Plan/PlanView.js +121 -0
  248. package/dist/esm/Plan/PlanView.js.map +1 -0
  249. package/dist/esm/Plan/index.d.ts +4 -0
  250. package/dist/esm/Plan/index.d.ts.map +1 -0
  251. package/dist/esm/Plan/index.js +4 -0
  252. package/dist/esm/Plan/index.js.map +1 -0
  253. package/dist/esm/Plan/planModels.d.ts +24 -0
  254. package/dist/esm/Plan/planModels.d.ts.map +1 -0
  255. package/dist/esm/Plan/planModels.js +78 -0
  256. package/dist/esm/Plan/planModels.js.map +1 -0
  257. package/dist/esm/Portal/PortalButton.d.ts +10 -0
  258. package/dist/esm/Portal/PortalButton.d.ts.map +1 -0
  259. package/dist/esm/Portal/PortalButton.js +35 -0
  260. package/dist/esm/Portal/PortalButton.js.map +1 -0
  261. package/dist/esm/Portal/index.d.ts +3 -0
  262. package/dist/esm/Portal/index.d.ts.map +1 -0
  263. package/dist/esm/Portal/index.js +3 -0
  264. package/dist/esm/Portal/index.js.map +1 -0
  265. package/dist/esm/Portal/portalLinks.d.ts +6 -0
  266. package/dist/esm/Portal/portalLinks.d.ts.map +1 -0
  267. package/dist/esm/Portal/portalLinks.js +31 -0
  268. package/dist/esm/Portal/portalLinks.js.map +1 -0
  269. package/dist/esm/Provider/BoxOfficeContext.d.ts +16 -0
  270. package/dist/esm/Provider/BoxOfficeContext.d.ts.map +1 -0
  271. package/dist/esm/Provider/BoxOfficeContext.js +29 -0
  272. package/dist/esm/Provider/BoxOfficeContext.js.map +1 -0
  273. package/dist/esm/Provider/BoxOfficeProvider.d.ts +15 -0
  274. package/dist/esm/Provider/BoxOfficeProvider.d.ts.map +1 -0
  275. package/dist/esm/Provider/BoxOfficeProvider.js +70 -0
  276. package/dist/esm/Provider/BoxOfficeProvider.js.map +1 -0
  277. package/dist/esm/Provider/index.d.ts +3 -0
  278. package/dist/esm/Provider/index.d.ts.map +1 -0
  279. package/dist/esm/Provider/index.js +3 -0
  280. package/dist/esm/Provider/index.js.map +1 -0
  281. package/dist/esm/Seats/AssignSeatDialog.d.ts +9 -0
  282. package/dist/esm/Seats/AssignSeatDialog.d.ts.map +1 -0
  283. package/dist/esm/Seats/AssignSeatDialog.js +97 -0
  284. package/dist/esm/Seats/AssignSeatDialog.js.map +1 -0
  285. package/dist/esm/Seats/SeatsPage.d.ts +2 -0
  286. package/dist/esm/Seats/SeatsPage.d.ts.map +1 -0
  287. package/dist/esm/Seats/SeatsPage.js +85 -0
  288. package/dist/esm/Seats/SeatsPage.js.map +1 -0
  289. package/dist/esm/Seats/SeatsView.d.ts +14 -0
  290. package/dist/esm/Seats/SeatsView.d.ts.map +1 -0
  291. package/dist/esm/Seats/SeatsView.js +109 -0
  292. package/dist/esm/Seats/SeatsView.js.map +1 -0
  293. package/dist/esm/Seats/index.d.ts +5 -0
  294. package/dist/esm/Seats/index.d.ts.map +1 -0
  295. package/dist/esm/Seats/index.js +5 -0
  296. package/dist/esm/Seats/index.js.map +1 -0
  297. package/dist/esm/Seats/seatModels.d.ts +23 -0
  298. package/dist/esm/Seats/seatModels.d.ts.map +1 -0
  299. package/dist/esm/Seats/seatModels.js +59 -0
  300. package/dist/esm/Seats/seatModels.js.map +1 -0
  301. package/dist/esm/Usage/UsagePage.d.ts +2 -0
  302. package/dist/esm/Usage/UsagePage.d.ts.map +1 -0
  303. package/dist/esm/Usage/UsagePage.js +24 -0
  304. package/dist/esm/Usage/UsagePage.js.map +1 -0
  305. package/dist/esm/Usage/UsageView.d.ts +9 -0
  306. package/dist/esm/Usage/UsageView.d.ts.map +1 -0
  307. package/dist/esm/Usage/UsageView.js +106 -0
  308. package/dist/esm/Usage/UsageView.js.map +1 -0
  309. package/dist/esm/Usage/index.d.ts +4 -0
  310. package/dist/esm/Usage/index.d.ts.map +1 -0
  311. package/dist/esm/Usage/index.js +4 -0
  312. package/dist/esm/Usage/index.js.map +1 -0
  313. package/dist/esm/Usage/usageModels.d.ts +17 -0
  314. package/dist/esm/Usage/usageModels.d.ts.map +1 -0
  315. package/dist/esm/Usage/usageModels.js +53 -0
  316. package/dist/esm/Usage/usageModels.js.map +1 -0
  317. package/dist/esm/formatting.d.ts +5 -0
  318. package/dist/esm/formatting.d.ts.map +1 -0
  319. package/dist/esm/formatting.js +42 -0
  320. package/dist/esm/formatting.js.map +1 -0
  321. package/dist/esm/index.d.ts +10 -0
  322. package/dist/esm/index.d.ts.map +1 -0
  323. package/dist/esm/index.js +29 -0
  324. package/dist/esm/index.js.map +1 -0
  325. package/dist/esm/package.json +3 -0
  326. package/formatting.ts +41 -0
  327. package/index.ts +12 -0
  328. package/package.json +84 -4
  329. package/styles.css +166 -0
@@ -0,0 +1,89 @@
1
+ import { DateOnly } from '@cratis/fundamentals';
2
+ import { ModuleAccess, ReadOnlyReason } from '@cratis/showrunner.boxoffice';
3
+
4
+ // Copyright (c) Cratis. All rights reserved.
5
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
6
+ const millisecondsInADay = 24 * 60 * 60 * 1000;
7
+ /**
8
+ * Turns a day from a proxy into a date.
9
+ * @param day The day: a `DateOnly`, a `yyyy-mm-dd` text, or a date.
10
+ * @returns The date at midnight local time; undefined when there is no day.
11
+ */ function toDate(day) {
12
+ if (day === undefined || day === null) {
13
+ return undefined;
14
+ }
15
+ if (day instanceof Date) {
16
+ return new Date(day.getFullYear(), day.getMonth(), day.getDate());
17
+ }
18
+ const dateOnly = typeof day === 'string' ? DateOnly.parse(day.substring(0, 10)) : day;
19
+ return dateOnly.toDate();
20
+ }
21
+ /**
22
+ * Counts the days from one day to another, ignoring the time of day.
23
+ * @param from The day to count from.
24
+ * @param to The day to count to.
25
+ * @returns How many days `to` is after `from`; less than zero when it is before.
26
+ */ function daysBetween(from, to) {
27
+ const start = Date.UTC(from.getFullYear(), from.getMonth(), from.getDate());
28
+ const end = Date.UTC(to.getFullYear(), to.getMonth(), to.getDate());
29
+ return Math.round((end - start) / millisecondsInADay);
30
+ }
31
+ function stateOf(summary, trial) {
32
+ if (summary.readOnlyReason === ReadOnlyReason.tenantSuspended) {
33
+ return 'suspended';
34
+ }
35
+ if (summary.readOnlyReason === ReadOnlyReason.trialClosed) {
36
+ return 'trialClosed';
37
+ }
38
+ if (summary.isTrial && trial && !trial.isClosed) {
39
+ return 'trial';
40
+ }
41
+ return summary.seats > 0 ? 'licensed' : 'unlicensed';
42
+ }
43
+ /**
44
+ * Works out what a tenant may do from what the backend says.
45
+ * @param summary The entitlement summary; nothing while it loads.
46
+ * @param today The day it is. Defaults to today.
47
+ * @returns The {@link Entitlements}.
48
+ */ function entitlementsOf(summary, today = new Date()) {
49
+ if (!summary) {
50
+ return {
51
+ isLoading: true,
52
+ state: 'loading',
53
+ isReadOnly: false,
54
+ readOnlyReason: ReadOnlyReason.none,
55
+ seats: 0,
56
+ canOpenPortal: false,
57
+ modules: [],
58
+ has: ()=>false,
59
+ accessTo: ()=>ModuleAccess.none,
60
+ standingOf: ()=>undefined
61
+ };
62
+ }
63
+ const modules = summary.modules ?? [];
64
+ const ends = summary.isTrial ? toDate(summary.trialEnds) : undefined;
65
+ const daysLeft = ends ? daysBetween(today, ends) : 0;
66
+ const trial = ends ? {
67
+ ends,
68
+ daysLeft,
69
+ isClosed: daysLeft < 0 || summary.readOnlyReason === ReadOnlyReason.trialClosed
70
+ } : undefined;
71
+ const standingOf = (module)=>modules.find((_)=>_.module === module);
72
+ const accessTo = (module)=>standingOf(module)?.access ?? ModuleAccess.none;
73
+ return {
74
+ isLoading: false,
75
+ state: stateOf(summary, trial),
76
+ isReadOnly: summary.readOnlyReason !== ReadOnlyReason.none,
77
+ readOnlyReason: summary.readOnlyReason,
78
+ seats: summary.seats,
79
+ trial,
80
+ canOpenPortal: summary.canOpenPortal,
81
+ modules,
82
+ has: (module)=>accessTo(module) === ModuleAccess.trial || accessTo(module) === ModuleAccess.full,
83
+ accessTo,
84
+ standingOf
85
+ };
86
+ }
87
+
88
+ export { daysBetween, entitlementsOf, toDate };
89
+ //# sourceMappingURL=entitlementModel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entitlementModel.js","sources":["../../../Entitlements/entitlementModel.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { DateOnly } from '@cratis/fundamentals';\nimport { EntitlementSummary, ModuleAccess, ModuleStanding, ReadOnlyReason } from '@cratis/showrunner.boxoffice';\n\n/**\n * Where a tenant stands with its license, as one word.\n *\n * - `loading`: nothing is known yet.\n * - `suspended`: the operator suspended the tenant; it is read-only.\n * - `trialClosed`: the trial ended without seats being bought; the tenant is read-only.\n * - `trial`: the tenant is on a trial that runs.\n * - `licensed`: the tenant has bought seats.\n * - `unlicensed`: the tenant has no seats and is not on a trial.\n */\nexport type LicenseState = 'loading' | 'suspended' | 'trialClosed' | 'trial' | 'licensed' | 'unlicensed';\n\n/**\n * A trial that is running or has closed.\n */\nexport interface TrialStanding {\n /** The last day of the trial. */\n readonly ends: Date;\n\n /** How many days are left; zero on the last day, and less than zero after it. */\n readonly daysLeft: number;\n\n /** Whether the trial has closed. */\n readonly isClosed: boolean;\n}\n\n/**\n * What a tenant may do, for a component to decide what to show.\n */\nexport interface Entitlements {\n /** Whether nothing is known about the tenant yet. */\n readonly isLoading: boolean;\n\n /** Where the tenant stands with its license. */\n readonly state: LicenseState;\n\n /** Whether the tenant can read but not change anything. */\n readonly isReadOnly: boolean;\n\n /** Why the tenant is read-only; none when it is not. */\n readonly readOnlyReason: ReadOnlyReason;\n\n /** How many seats the tenant has today. */\n readonly seats: number;\n\n /** The trial, when the tenant is on one or was. */\n readonly trial?: TrialStanding;\n\n /** Whether the product has a customer portal to buy, try and change plan in. */\n readonly canOpenPortal: boolean;\n\n /** Every module the product declares, and what the tenant may do with it. */\n readonly modules: readonly ModuleStanding[];\n\n /**\n * Gets whether the tenant has a module: in full or on trial. A preview does not count.\n * @param module The module.\n * @returns True when the tenant has the module.\n */\n has(module: string): boolean;\n\n /**\n * Gets the access the tenant has to a module.\n * @param module The module.\n * @returns The access; none for a module the product does not declare.\n */\n accessTo(module: string): ModuleAccess;\n\n /**\n * Gets what the tenant may do with a module.\n * @param module The module.\n * @returns The standing, or undefined for a module the product does not declare.\n */\n standingOf(module: string): ModuleStanding | undefined;\n}\n\nconst millisecondsInADay = 24 * 60 * 60 * 1000;\n\n/**\n * Turns a day from a proxy into a date.\n * @param day The day: a `DateOnly`, a `yyyy-mm-dd` text, or a date.\n * @returns The date at midnight local time; undefined when there is no day.\n */\nexport function toDate(day: DateOnly | Date | string | undefined): Date | undefined {\n if (day === undefined || day === null) {\n return undefined;\n }\n\n if (day instanceof Date) {\n return new Date(day.getFullYear(), day.getMonth(), day.getDate());\n }\n\n const dateOnly = typeof day === 'string' ? DateOnly.parse(day.substring(0, 10)) : day;\n return dateOnly.toDate();\n}\n\n/**\n * Counts the days from one day to another, ignoring the time of day.\n * @param from The day to count from.\n * @param to The day to count to.\n * @returns How many days `to` is after `from`; less than zero when it is before.\n */\nexport function daysBetween(from: Date, to: Date): number {\n const start = Date.UTC(from.getFullYear(), from.getMonth(), from.getDate());\n const end = Date.UTC(to.getFullYear(), to.getMonth(), to.getDate());\n return Math.round((end - start) / millisecondsInADay);\n}\n\nfunction stateOf(summary: EntitlementSummary, trial: TrialStanding | undefined): LicenseState {\n if (summary.readOnlyReason === ReadOnlyReason.tenantSuspended) {\n return 'suspended';\n }\n\n if (summary.readOnlyReason === ReadOnlyReason.trialClosed) {\n return 'trialClosed';\n }\n\n if (summary.isTrial && trial && !trial.isClosed) {\n return 'trial';\n }\n\n return summary.seats > 0 ? 'licensed' : 'unlicensed';\n}\n\n/**\n * Works out what a tenant may do from what the backend says.\n * @param summary The entitlement summary; nothing while it loads.\n * @param today The day it is. Defaults to today.\n * @returns The {@link Entitlements}.\n */\nexport function entitlementsOf(summary: EntitlementSummary | undefined, today: Date = new Date()): Entitlements {\n if (!summary) {\n return {\n isLoading: true,\n state: 'loading',\n isReadOnly: false,\n readOnlyReason: ReadOnlyReason.none,\n seats: 0,\n canOpenPortal: false,\n modules: [],\n has: () => false,\n accessTo: () => ModuleAccess.none,\n standingOf: () => undefined\n };\n }\n\n const modules = summary.modules ?? [];\n const ends = summary.isTrial ? toDate(summary.trialEnds) : undefined;\n const daysLeft = ends ? daysBetween(today, ends) : 0;\n const trial = ends\n ? { ends, daysLeft, isClosed: daysLeft < 0 || summary.readOnlyReason === ReadOnlyReason.trialClosed }\n : undefined;\n const standingOf = (module: string) => modules.find(_ => _.module === module);\n const accessTo = (module: string) => standingOf(module)?.access ?? ModuleAccess.none;\n\n return {\n isLoading: false,\n state: stateOf(summary, trial),\n isReadOnly: summary.readOnlyReason !== ReadOnlyReason.none,\n readOnlyReason: summary.readOnlyReason,\n seats: summary.seats,\n trial,\n canOpenPortal: summary.canOpenPortal,\n modules,\n has: module => accessTo(module) === ModuleAccess.trial || accessTo(module) === ModuleAccess.full,\n accessTo,\n standingOf\n };\n}\n"],"names":["millisecondsInADay","toDate","day","undefined","Date","getFullYear","getMonth","getDate","dateOnly","DateOnly","parse","substring","daysBetween","from","to","start","UTC","end","Math","round","stateOf","summary","trial","readOnlyReason","ReadOnlyReason","tenantSuspended","trialClosed","isTrial","isClosed","seats","entitlementsOf","today","isLoading","state","isReadOnly","none","canOpenPortal","modules","has","accessTo","ModuleAccess","standingOf","ends","trialEnds","daysLeft","module","find","_","access","full"],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export * from './entitlementModel.js';
2
+ export * from './EntitlementsContext.js';
3
+ export * from './moduleFilter.js';
4
+ export * from './requiresModuleModel.js';
5
+ export * from './RequiresModule.js';
6
+ export * from './useEntitlements.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../Entitlements/index.ts"],"names":[],"mappings":"AAGA,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC"}
@@ -0,0 +1,7 @@
1
+ export * from './entitlementModel.js';
2
+ export * from './EntitlementsContext.js';
3
+ export * from './moduleFilter.js';
4
+ export * from './requiresModuleModel.js';
5
+ export * from './RequiresModule.js';
6
+ export * from './useEntitlements.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../Entitlements/index.ts"],"names":[],"mappings":"AAGA,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { Entitlements } from './entitlementModel.js';
2
+ export interface ModuleOwned {
3
+ module?: string;
4
+ }
5
+ export declare function filterByModule<TItem extends ModuleOwned>(items: readonly TItem[], entitlements: Entitlements): TItem[];
6
+ //# sourceMappingURL=moduleFilter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"moduleFilter.d.ts","sourceRoot":"","sources":["../../../Entitlements/moduleFilter.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAKrD,MAAM,WAAW,WAAW;IAExB,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AASD,wBAAgB,cAAc,CAAC,KAAK,SAAS,WAAW,EAAE,KAAK,EAAE,SAAS,KAAK,EAAE,EAAE,YAAY,EAAE,YAAY,GAAG,KAAK,EAAE,CAEtH"}
@@ -0,0 +1,14 @@
1
+ // Copyright (c) Cratis. All rights reserved.
2
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
3
+ /**
4
+ * Leaves out what belongs to a module the tenant does not have, so navigation and pages disappear without it. While
5
+ * the entitlements load, what belongs to a module is left out too, rather than shown and taken away.
6
+ * @param items The items, such as the entries of a sidebar.
7
+ * @param entitlements What the tenant may do.
8
+ * @returns The items the tenant may see.
9
+ */ function filterByModule(items, entitlements) {
10
+ return items.filter((item)=>item.module === undefined || entitlements.has(item.module));
11
+ }
12
+
13
+ export { filterByModule };
14
+ //# sourceMappingURL=moduleFilter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"moduleFilter.js","sources":["../../../Entitlements/moduleFilter.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { Entitlements } from './entitlementModel.js';\n\n/**\n * Something that belongs to a module: a navigation entry, a page, a menu item or a route.\n */\nexport interface ModuleOwned {\n /** The module that owns it; leave it out for what belongs to the product itself and is always shown. */\n module?: string;\n}\n\n/**\n * Leaves out what belongs to a module the tenant does not have, so navigation and pages disappear without it. While\n * the entitlements load, what belongs to a module is left out too, rather than shown and taken away.\n * @param items The items, such as the entries of a sidebar.\n * @param entitlements What the tenant may do.\n * @returns The items the tenant may see.\n */\nexport function filterByModule<TItem extends ModuleOwned>(items: readonly TItem[], entitlements: Entitlements): TItem[] {\n return items.filter(item => item.module === undefined || entitlements.has(item.module));\n}\n"],"names":["filterByModule","items","entitlements","filter","item","module","undefined","has"],"mappings":"AAAA;AACA;AAYA;;;;;;AAMC,IACM,SAASA,cAAAA,CAA0CC,KAAuB,EAAEC,YAA0B,EAAA;AACzG,IAAA,OAAOD,KAAAA,CAAME,MAAM,CAACC,CAAAA,IAAAA,GAAQA,IAAAA,CAAKC,MAAM,KAAKC,SAAAA,IAAaJ,YAAAA,CAAaK,GAAG,CAACH,KAAKC,MAAM,CAAA,CAAA;AACzF;;"}
@@ -0,0 +1,10 @@
1
+ import { BoxOfficeLabels } from '../Labels/index.js';
2
+ import { Entitlements } from './entitlementModel.js';
3
+ export interface RequiresModuleModel {
4
+ readonly hasModule: boolean;
5
+ readonly title: string;
6
+ readonly text: string;
7
+ readonly canTry: boolean;
8
+ }
9
+ export declare function requiresModuleModel(entitlements: Entitlements, module: string, labels: BoxOfficeLabels): RequiresModuleModel;
10
+ //# sourceMappingURL=requiresModuleModel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requiresModuleModel.d.ts","sourceRoot":"","sources":["../../../Entitlements/requiresModuleModel.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAU,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAKrD,MAAM,WAAW,mBAAmB;IAEhC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAG5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAGvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAGtB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC5B;AASD,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,mBAAmB,CAY5H"}
@@ -0,0 +1,30 @@
1
+ import { ModuleAccess } from '@cratis/showrunner.boxoffice';
2
+ import { format } from '../Labels/format.js';
3
+
4
+ // Copyright (c) Cratis. All rights reserved.
5
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
6
+ /**
7
+ * Works out what to show where a module's content would be.
8
+ * @param entitlements What the tenant may do.
9
+ * @param module The module.
10
+ * @param labels The labels to show.
11
+ * @returns The {@link RequiresModuleModel}.
12
+ */ function requiresModuleModel(entitlements, module, labels) {
13
+ const standing = entitlements.standingOf(module);
14
+ const name = standing?.name ?? module;
15
+ const access = standing?.access ?? ModuleAccess.none;
16
+ const text = access === ModuleAccess.preview ? labels.requiresModule.preview : labels.requiresModule.none;
17
+ return {
18
+ hasModule: entitlements.has(module),
19
+ title: format(labels.requiresModule.title, {
20
+ module: name
21
+ }),
22
+ text: format(text, {
23
+ module: name
24
+ }),
25
+ canTry: access === ModuleAccess.none || access === ModuleAccess.preview
26
+ };
27
+ }
28
+
29
+ export { requiresModuleModel };
30
+ //# sourceMappingURL=requiresModuleModel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requiresModuleModel.js","sources":["../../../Entitlements/requiresModuleModel.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { ModuleAccess, ModuleStanding } from '@cratis/showrunner.boxoffice';\nimport { BoxOfficeLabels, format } from '../Labels/index.js';\nimport { Entitlements } from './entitlementModel.js';\n\n/**\n * What to tell the user about a module they do not have.\n */\nexport interface RequiresModuleModel {\n /** Whether the tenant has the module, so the content shows. */\n readonly hasModule: boolean;\n\n /** The title of the explanation. */\n readonly title: string;\n\n /** The explanation. */\n readonly text: string;\n\n /** Whether to offer to try the module. */\n readonly canTry: boolean;\n}\n\n/**\n * Works out what to show where a module's content would be.\n * @param entitlements What the tenant may do.\n * @param module The module.\n * @param labels The labels to show.\n * @returns The {@link RequiresModuleModel}.\n */\nexport function requiresModuleModel(entitlements: Entitlements, module: string, labels: BoxOfficeLabels): RequiresModuleModel {\n const standing: ModuleStanding | undefined = entitlements.standingOf(module);\n const name = standing?.name ?? module;\n const access = standing?.access ?? ModuleAccess.none;\n const text = access === ModuleAccess.preview ? labels.requiresModule.preview : labels.requiresModule.none;\n\n return {\n hasModule: entitlements.has(module),\n title: format(labels.requiresModule.title, { module: name }),\n text: format(text, { module: name }),\n canTry: access === ModuleAccess.none || access === ModuleAccess.preview\n };\n}\n"],"names":["requiresModuleModel","entitlements","module","labels","standing","standingOf","name","access","ModuleAccess","none","text","preview","requiresModule","hasModule","has","title","format","canTry"],"mappings":";;;AAAA;AACA;AAuBA;;;;;;AAMC,IACM,SAASA,mBAAAA,CAAoBC,YAA0B,EAAEC,MAAc,EAAEC,MAAuB,EAAA;IACnG,MAAMC,QAAAA,GAAuCH,YAAAA,CAAaI,UAAU,CAACH,MAAAA,CAAAA;IACrE,MAAMI,IAAAA,GAAOF,UAAUE,IAAAA,IAAQJ,MAAAA;AAC/B,IAAA,MAAMK,MAAAA,GAASH,QAAAA,EAAUG,MAAAA,IAAUC,YAAAA,CAAaC,IAAI;AACpD,IAAA,MAAMC,IAAAA,GAAOH,MAAAA,KAAWC,YAAAA,CAAaG,OAAO,GAAGR,MAAAA,CAAOS,cAAc,CAACD,OAAO,GAAGR,MAAAA,CAAOS,cAAc,CAACH,IAAI;IAEzG,OAAO;QACHI,SAAAA,EAAWZ,YAAAA,CAAaa,GAAG,CAACZ,MAAAA,CAAAA;AAC5Ba,QAAAA,KAAAA,EAAOC,MAAAA,CAAOb,MAAAA,CAAOS,cAAc,CAACG,KAAK,EAAE;YAAEb,MAAAA,EAAQI;AAAK,SAAA,CAAA;AAC1DI,QAAAA,IAAAA,EAAMM,OAAON,IAAAA,EAAM;YAAER,MAAAA,EAAQI;AAAK,SAAA,CAAA;AAClCW,QAAAA,MAAAA,EAAQV,WAAWC,YAAAA,CAAaC,IAAI,IAAIF,MAAAA,KAAWC,aAAaG;AACpE,KAAA;AACJ;;"}
@@ -0,0 +1,5 @@
1
+ import { Entitlements } from './entitlementModel.js';
2
+ import { ModuleOwned } from './moduleFilter.js';
3
+ export declare function useEntitlements(): Entitlements;
4
+ export declare function useModuleFilter<TItem extends ModuleOwned>(items: readonly TItem[]): TItem[];
5
+ //# sourceMappingURL=useEntitlements.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useEntitlements.d.ts","sourceRoot":"","sources":["../../../Entitlements/useEntitlements.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,OAAO,EAAkB,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAOhE,wBAAgB,eAAe,IAAI,YAAY,CAE9C;AAQD,wBAAgB,eAAe,CAAC,KAAK,SAAS,WAAW,EAAE,KAAK,EAAE,SAAS,KAAK,EAAE,GAAG,KAAK,EAAE,CAE3F"}
@@ -0,0 +1,23 @@
1
+ import { useEntitlementsContext } from './EntitlementsContext.js';
2
+ import { filterByModule } from './moduleFilter.js';
3
+
4
+ // Copyright (c) Cratis. All rights reserved.
5
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
6
+ /**
7
+ * Gets what the signed-in user's tenant may do: whether it is on a trial, read-only or suspended, and which modules it
8
+ * has. Use it inside a {@link BoxOfficeProvider}.
9
+ * @returns The {@link Entitlements}.
10
+ */ function useEntitlements() {
11
+ return useEntitlementsContext();
12
+ }
13
+ /**
14
+ * Leaves out what belongs to a module the tenant does not have, for the entries of a shell's navigation. Use it
15
+ * inside a {@link BoxOfficeProvider}.
16
+ * @param items The items, each optionally owned by a module.
17
+ * @returns The items the tenant may see.
18
+ */ function useModuleFilter(items) {
19
+ return filterByModule(items, useEntitlementsContext());
20
+ }
21
+
22
+ export { useEntitlements, useModuleFilter };
23
+ //# sourceMappingURL=useEntitlements.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useEntitlements.js","sources":["../../../Entitlements/useEntitlements.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { Entitlements } from './entitlementModel.js';\nimport { useEntitlementsContext } from './EntitlementsContext.js';\nimport { filterByModule, ModuleOwned } from './moduleFilter.js';\n\n/**\n * Gets what the signed-in user's tenant may do: whether it is on a trial, read-only or suspended, and which modules it\n * has. Use it inside a {@link BoxOfficeProvider}.\n * @returns The {@link Entitlements}.\n */\nexport function useEntitlements(): Entitlements {\n return useEntitlementsContext();\n}\n\n/**\n * Leaves out what belongs to a module the tenant does not have, for the entries of a shell's navigation. Use it\n * inside a {@link BoxOfficeProvider}.\n * @param items The items, each optionally owned by a module.\n * @returns The items the tenant may see.\n */\nexport function useModuleFilter<TItem extends ModuleOwned>(items: readonly TItem[]): TItem[] {\n return filterByModule(items, useEntitlementsContext());\n}\n"],"names":["useEntitlements","useEntitlementsContext","useModuleFilter","items","filterByModule"],"mappings":";;;AAAA;AACA;AAMA;;;;AAIC,IACM,SAASA,eAAAA,GAAAA;IACZ,OAAOC,sBAAAA,EAAAA;AACX;AAEA;;;;;IAMO,SAASC,eAAAA,CAA2CC,KAAuB,EAAA;AAC9E,IAAA,OAAOC,eAAeD,KAAAA,EAAOF,sBAAAA,EAAAA,CAAAA;AACjC;;"}
@@ -0,0 +1,116 @@
1
+ export interface BoxOfficeLabels {
2
+ common: {
3
+ cancel: string;
4
+ close: string;
5
+ loading: string;
6
+ failed: string;
7
+ unauthorized: string;
8
+ portalFailed: string;
9
+ noPortal: string;
10
+ };
11
+ moduleAccess: {
12
+ none: string;
13
+ preview: string;
14
+ trial: string;
15
+ full: string;
16
+ until: string;
17
+ };
18
+ trialBanner: {
19
+ running: string;
20
+ lastDay: string;
21
+ closed: string;
22
+ buy: string;
23
+ };
24
+ suspension: {
25
+ title: string;
26
+ trialEndedWithoutSeats: string;
27
+ paymentOverdue: string;
28
+ administratorDecision: string;
29
+ resolve: string;
30
+ openPortal: string;
31
+ };
32
+ noLicense: {
33
+ noSeatTitle: string;
34
+ noSeat: string;
35
+ overCapacityTitle: string;
36
+ overCapacity: string;
37
+ trialClosedTitle: string;
38
+ trialClosed: string;
39
+ suspendedTitle: string;
40
+ suspended: string;
41
+ openPortal: string;
42
+ };
43
+ requiresModule: {
44
+ title: string;
45
+ none: string;
46
+ preview: string;
47
+ try: string;
48
+ buy: string;
49
+ };
50
+ seats: {
51
+ title: string;
52
+ summary: string;
53
+ overCapacity: string;
54
+ noCapacity: string;
55
+ empty: string;
56
+ holderColumn: string;
57
+ emailColumn: string;
58
+ assignedColumn: string;
59
+ statusColumn: string;
60
+ licensed: string;
61
+ overCapacityStatus: string;
62
+ assign: string;
63
+ releaseShort: string;
64
+ release: string;
65
+ assignTitle: string;
66
+ assignConfirm: string;
67
+ name: string;
68
+ email: string;
69
+ identityProvider: string;
70
+ subject: string;
71
+ releaseTitle: string;
72
+ releaseMessage: string;
73
+ readOnly: string;
74
+ };
75
+ usage: {
76
+ title: string;
77
+ empty: string;
78
+ meterColumn: string;
79
+ usedColumn: string;
80
+ allowanceColumn: string;
81
+ budgetColumn: string;
82
+ concurrencyColumn: string;
83
+ usedOfAllowance: string;
84
+ noAllowance: string;
85
+ day: string;
86
+ month: string;
87
+ resets: string;
88
+ atAllowance: string;
89
+ atBudget: string;
90
+ block: string;
91
+ park: string;
92
+ notSet: string;
93
+ progress: string;
94
+ };
95
+ plan: {
96
+ title: string;
97
+ modulesTitle: string;
98
+ offersTitle: string;
99
+ noModules: string;
100
+ noOffers: string;
101
+ includedSeats: string;
102
+ includedModules: string;
103
+ perMonth: string;
104
+ perYear: string;
105
+ buy: string;
106
+ try: string;
107
+ changePlan: string;
108
+ onTrial: string;
109
+ withSeats: string;
110
+ };
111
+ }
112
+ export type DeepPartial<T> = {
113
+ [TKey in keyof T]?: T[TKey] extends object ? DeepPartial<T[TKey]> : T[TKey];
114
+ };
115
+ export type BoxOfficeLabelOverrides = DeepPartial<BoxOfficeLabels>;
116
+ //# sourceMappingURL=BoxOfficeLabels.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BoxOfficeLabels.d.ts","sourceRoot":"","sources":["../../../Labels/BoxOfficeLabels.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=BoxOfficeLabels.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BoxOfficeLabels.js","sourceRoot":"","sources":["../../../Labels/BoxOfficeLabels.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ import { BoxOfficeLabels } from './BoxOfficeLabels.js';
2
+ export declare const defaultBoxOfficeLabels: BoxOfficeLabels;
3
+ //# sourceMappingURL=defaultBoxOfficeLabels.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaultBoxOfficeLabels.d.ts","sourceRoot":"","sources":["../../../Labels/defaultBoxOfficeLabels.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAKvD,eAAO,MAAM,sBAAsB,EAAE,eA8GpC,CAAC"}
@@ -0,0 +1,118 @@
1
+ // Copyright (c) Cratis. All rights reserved.
2
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
3
+ /**
4
+ * The English labels of the Box Office components.
5
+ */ const defaultBoxOfficeLabels = {
6
+ common: {
7
+ cancel: 'Cancel',
8
+ close: 'Close',
9
+ loading: 'Loading…',
10
+ failed: 'This could not be loaded.',
11
+ unauthorized: 'You are not allowed to see this.',
12
+ portalFailed: 'The customer portal could not be opened. Try again in a moment.',
13
+ noPortal: 'Contact the people who run this product to change your plan.'
14
+ },
15
+ moduleAccess: {
16
+ none: 'Not included',
17
+ preview: 'Preview',
18
+ trial: 'Trial',
19
+ full: 'Included',
20
+ until: 'until {date}'
21
+ },
22
+ trialBanner: {
23
+ running: 'Your trial ends in {days} days.',
24
+ lastDay: 'Your trial ends today.',
25
+ closed: 'Your trial has ended. Your data is kept, and you can read it, but nothing can be changed until you buy.',
26
+ buy: 'Buy'
27
+ },
28
+ suspension: {
29
+ title: 'Your organization is suspended',
30
+ trialEndedWithoutSeats: 'Your trial ended without any seats being bought.',
31
+ paymentOverdue: 'A payment is overdue.',
32
+ administratorDecision: 'The people who run this product suspended it.',
33
+ resolve: 'You can read everything, but nothing can be changed until the suspension is lifted.',
34
+ openPortal: 'Open the customer portal'
35
+ },
36
+ noLicense: {
37
+ noSeatTitle: 'You do not have a seat',
38
+ noSeat: 'Ask an administrator of your organization to give you a seat.',
39
+ overCapacityTitle: 'Your seat is not covered',
40
+ overCapacity: 'Your organization has more people with seats than it has bought. Ask an administrator to buy more seats or release some.',
41
+ trialClosedTitle: 'The trial has ended',
42
+ trialClosed: 'Your organization can read what it has, but nothing can be changed until it buys.',
43
+ suspendedTitle: 'Your organization is suspended',
44
+ suspended: 'Your organization can read what it has, but nothing can be changed until the suspension is lifted.',
45
+ openPortal: 'Open the customer portal'
46
+ },
47
+ requiresModule: {
48
+ title: '{module} is not part of your plan',
49
+ none: 'Your organization does not have {module}.',
50
+ preview: 'Your organization can look at {module}, but not use it yet.',
51
+ try: 'Try it',
52
+ buy: 'Buy'
53
+ },
54
+ seats: {
55
+ title: 'Seats',
56
+ summary: '{held} of {capacity} seats in use',
57
+ overCapacity: 'Your organization has {over} more people with seats than it has bought.',
58
+ noCapacity: 'Your organization has no seats.',
59
+ empty: 'Nobody holds a seat yet.',
60
+ holderColumn: 'Name',
61
+ emailColumn: 'Email',
62
+ assignedColumn: 'Assigned',
63
+ statusColumn: 'Status',
64
+ licensed: 'Licensed',
65
+ overCapacityStatus: 'Not covered',
66
+ assign: 'Assign a seat',
67
+ releaseShort: 'Release',
68
+ release: 'Release the seat of {name}',
69
+ assignTitle: 'Assign a seat',
70
+ assignConfirm: 'Assign',
71
+ name: 'Name',
72
+ email: 'Email',
73
+ identityProvider: 'Identity provider',
74
+ subject: 'Subject at the identity provider',
75
+ releaseTitle: 'Release the seat',
76
+ releaseMessage: '{name} can no longer use the product until they are given a seat again. Release the seat?',
77
+ readOnly: 'Seats cannot be changed while your organization is read-only.'
78
+ },
79
+ usage: {
80
+ title: 'Usage',
81
+ empty: 'This product measures nothing.',
82
+ meterColumn: 'Meter',
83
+ usedColumn: 'Used',
84
+ allowanceColumn: 'Allowance',
85
+ budgetColumn: 'Budget',
86
+ concurrencyColumn: 'At the same time',
87
+ usedOfAllowance: '{used} of {allowance} {unit}',
88
+ noAllowance: '{used} {unit}, with no allowance',
89
+ day: 'per day',
90
+ month: 'per month',
91
+ resets: 'starts over {date}',
92
+ atAllowance: 'Allowance used up',
93
+ atBudget: 'Budget reached',
94
+ block: 'Work beyond the allowance is turned away.',
95
+ park: 'Work beyond the allowance waits for the next period.',
96
+ notSet: 'Not set',
97
+ progress: 'Use of {meter}'
98
+ },
99
+ plan: {
100
+ title: 'Plan and modules',
101
+ modulesTitle: 'Modules',
102
+ offersTitle: 'Plans and offers',
103
+ noModules: 'This product has no modules.',
104
+ noOffers: 'Nothing is on sale right now.',
105
+ includedSeats: '{count} seats included',
106
+ includedModules: 'Includes',
107
+ perMonth: '{price} per month',
108
+ perYear: '{price} per year',
109
+ buy: 'Buy',
110
+ try: 'Try',
111
+ changePlan: 'Change plan',
112
+ onTrial: 'You are on a trial with {days} days left.',
113
+ withSeats: 'Your plan has {seats} seats.'
114
+ }
115
+ };
116
+
117
+ export { defaultBoxOfficeLabels };
118
+ //# sourceMappingURL=defaultBoxOfficeLabels.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaultBoxOfficeLabels.js","sources":["../../../Labels/defaultBoxOfficeLabels.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { BoxOfficeLabels } from './BoxOfficeLabels.js';\n\n/**\n * The English labels of the Box Office components.\n */\nexport const defaultBoxOfficeLabels: BoxOfficeLabels = {\n common: {\n cancel: 'Cancel',\n close: 'Close',\n loading: 'Loading…',\n failed: 'This could not be loaded.',\n unauthorized: 'You are not allowed to see this.',\n portalFailed: 'The customer portal could not be opened. Try again in a moment.',\n noPortal: 'Contact the people who run this product to change your plan.'\n },\n moduleAccess: {\n none: 'Not included',\n preview: 'Preview',\n trial: 'Trial',\n full: 'Included',\n until: 'until {date}'\n },\n trialBanner: {\n running: 'Your trial ends in {days} days.',\n lastDay: 'Your trial ends today.',\n closed: 'Your trial has ended. Your data is kept, and you can read it, but nothing can be changed until you buy.',\n buy: 'Buy'\n },\n suspension: {\n title: 'Your organization is suspended',\n trialEndedWithoutSeats: 'Your trial ended without any seats being bought.',\n paymentOverdue: 'A payment is overdue.',\n administratorDecision: 'The people who run this product suspended it.',\n resolve: 'You can read everything, but nothing can be changed until the suspension is lifted.',\n openPortal: 'Open the customer portal'\n },\n noLicense: {\n noSeatTitle: 'You do not have a seat',\n noSeat: 'Ask an administrator of your organization to give you a seat.',\n overCapacityTitle: 'Your seat is not covered',\n overCapacity: 'Your organization has more people with seats than it has bought. Ask an administrator to buy more seats or release some.',\n trialClosedTitle: 'The trial has ended',\n trialClosed: 'Your organization can read what it has, but nothing can be changed until it buys.',\n suspendedTitle: 'Your organization is suspended',\n suspended: 'Your organization can read what it has, but nothing can be changed until the suspension is lifted.',\n openPortal: 'Open the customer portal'\n },\n requiresModule: {\n title: '{module} is not part of your plan',\n none: 'Your organization does not have {module}.',\n preview: 'Your organization can look at {module}, but not use it yet.',\n try: 'Try it',\n buy: 'Buy'\n },\n seats: {\n title: 'Seats',\n summary: '{held} of {capacity} seats in use',\n overCapacity: 'Your organization has {over} more people with seats than it has bought.',\n noCapacity: 'Your organization has no seats.',\n empty: 'Nobody holds a seat yet.',\n holderColumn: 'Name',\n emailColumn: 'Email',\n assignedColumn: 'Assigned',\n statusColumn: 'Status',\n licensed: 'Licensed',\n overCapacityStatus: 'Not covered',\n assign: 'Assign a seat',\n releaseShort: 'Release',\n release: 'Release the seat of {name}',\n assignTitle: 'Assign a seat',\n assignConfirm: 'Assign',\n name: 'Name',\n email: 'Email',\n identityProvider: 'Identity provider',\n subject: 'Subject at the identity provider',\n releaseTitle: 'Release the seat',\n releaseMessage: '{name} can no longer use the product until they are given a seat again. Release the seat?',\n readOnly: 'Seats cannot be changed while your organization is read-only.'\n },\n usage: {\n title: 'Usage',\n empty: 'This product measures nothing.',\n meterColumn: 'Meter',\n usedColumn: 'Used',\n allowanceColumn: 'Allowance',\n budgetColumn: 'Budget',\n concurrencyColumn: 'At the same time',\n usedOfAllowance: '{used} of {allowance} {unit}',\n noAllowance: '{used} {unit}, with no allowance',\n day: 'per day',\n month: 'per month',\n resets: 'starts over {date}',\n atAllowance: 'Allowance used up',\n atBudget: 'Budget reached',\n block: 'Work beyond the allowance is turned away.',\n park: 'Work beyond the allowance waits for the next period.',\n notSet: 'Not set',\n progress: 'Use of {meter}'\n },\n plan: {\n title: 'Plan and modules',\n modulesTitle: 'Modules',\n offersTitle: 'Plans and offers',\n noModules: 'This product has no modules.',\n noOffers: 'Nothing is on sale right now.',\n includedSeats: '{count} seats included',\n includedModules: 'Includes',\n perMonth: '{price} per month',\n perYear: '{price} per year',\n buy: 'Buy',\n try: 'Try',\n changePlan: 'Change plan',\n onTrial: 'You are on a trial with {days} days left.',\n withSeats: 'Your plan has {seats} seats.'\n }\n};\n"],"names":["defaultBoxOfficeLabels","common","cancel","close","loading","failed","unauthorized","portalFailed","noPortal","moduleAccess","none","preview","trial","full","until","trialBanner","running","lastDay","closed","buy","suspension","title","trialEndedWithoutSeats","paymentOverdue","administratorDecision","resolve","openPortal","noLicense","noSeatTitle","noSeat","overCapacityTitle","overCapacity","trialClosedTitle","trialClosed","suspendedTitle","suspended","requiresModule","try","seats","summary","noCapacity","empty","holderColumn","emailColumn","assignedColumn","statusColumn","licensed","overCapacityStatus","assign","releaseShort","release","assignTitle","assignConfirm","name","email","identityProvider","subject","releaseTitle","releaseMessage","readOnly","usage","meterColumn","usedColumn","allowanceColumn","budgetColumn","concurrencyColumn","usedOfAllowance","noAllowance","day","month","resets","atAllowance","atBudget","block","park","notSet","progress","plan","modulesTitle","offersTitle","noModules","noOffers","includedSeats","includedModules","perMonth","perYear","changePlan","onTrial","withSeats"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function format(template: string, values: Record<string, string | number>): string;
2
+ //# sourceMappingURL=format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../../Labels/format.ts"],"names":[],"mappings":"AASA,wBAAgB,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG,MAAM,CAGxF"}
@@ -0,0 +1,13 @@
1
+ // Copyright (c) Cratis. All rights reserved.
2
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
3
+ /**
4
+ * Fills the placeholders of a label, such as `{count}`, with values. A placeholder without a value is left as it is.
5
+ * @param template The label.
6
+ * @param values The values by placeholder name.
7
+ * @returns The label with its placeholders filled in.
8
+ */ function format(template, values) {
9
+ return template.replace(/\{(\w+)\}/g, (placeholder, name)=>Object.hasOwn(values, name) ? String(values[name]) : placeholder);
10
+ }
11
+
12
+ export { format };
13
+ //# sourceMappingURL=format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.js","sources":["../../../Labels/format.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n/**\n * Fills the placeholders of a label, such as `{count}`, with values. A placeholder without a value is left as it is.\n * @param template The label.\n * @param values The values by placeholder name.\n * @returns The label with its placeholders filled in.\n */\nexport function format(template: string, values: Record<string, string | number>): string {\n return template.replace(/\\{(\\w+)\\}/g, (placeholder, name: string) =>\n Object.hasOwn(values, name) ? String(values[name]) : placeholder);\n}\n"],"names":["format","template","values","replace","placeholder","name","Object","hasOwn","String"],"mappings":"AAAA;AACA;AAEA;;;;;AAKC,IACM,SAASA,MAAAA,CAAOC,QAAgB,EAAEC,MAAuC,EAAA;AAC5E,IAAA,OAAOD,SAASE,OAAO,CAAC,YAAA,EAAc,CAACC,aAAaC,IAAAA,GAChDC,MAAAA,CAAOC,MAAM,CAACL,QAAQG,IAAAA,CAAAA,GAAQG,MAAAA,CAAON,MAAM,CAACG,KAAK,CAAA,GAAID,WAAAA,CAAAA;AAC7D;;"}
@@ -0,0 +1,5 @@
1
+ export * from './BoxOfficeLabels.js';
2
+ export * from './defaultBoxOfficeLabels.js';
3
+ export * from './resolveLabels.js';
4
+ export * from './format.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../Labels/index.ts"],"names":[],"mappings":"AAGA,cAAc,sBAAsB,CAAC;AACrC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC"}
@@ -0,0 +1,5 @@
1
+ export * from './BoxOfficeLabels.js';
2
+ export * from './defaultBoxOfficeLabels.js';
3
+ export * from './resolveLabels.js';
4
+ export * from './format.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../Labels/index.ts"],"names":[],"mappings":"AAGA,cAAc,sBAAsB,CAAC;AACrC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { BoxOfficeLabelOverrides, BoxOfficeLabels } from './BoxOfficeLabels.js';
2
+ export declare function resolveLabels(overrides?: BoxOfficeLabelOverrides): BoxOfficeLabels;
3
+ //# sourceMappingURL=resolveLabels.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveLabels.d.ts","sourceRoot":"","sources":["../../../Labels/resolveLabels.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAOhF,wBAAgB,aAAa,CAAC,SAAS,CAAC,EAAE,uBAAuB,GAAG,eAAe,CAElF"}