@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.
- package/Banners/NoLicense.tsx +36 -0
- package/Banners/SuspensionBanner.tsx +54 -0
- package/Banners/TrialBanner.tsx +30 -0
- package/Banners/bannerModels.ts +117 -0
- package/Banners/index.ts +7 -0
- package/Entitlements/EntitlementsContext.ts +17 -0
- package/Entitlements/RequiresModule.tsx +68 -0
- package/Entitlements/entitlementModel.ts +175 -0
- package/Entitlements/index.ts +9 -0
- package/Entitlements/moduleFilter.ts +23 -0
- package/Entitlements/requiresModuleModel.ts +44 -0
- package/Entitlements/useEntitlements.ts +25 -0
- package/Labels/BoxOfficeLabels.ts +239 -0
- package/Labels/defaultBoxOfficeLabels.ts +119 -0
- package/Labels/format.ts +13 -0
- package/Labels/index.ts +7 -0
- package/Labels/resolveLabels.ts +36 -0
- package/Plan/PlanPage.tsx +24 -0
- package/Plan/PlanView.tsx +80 -0
- package/Plan/index.ts +6 -0
- package/Plan/planModels.ts +127 -0
- package/Portal/PortalButton.tsx +48 -0
- package/Portal/index.ts +5 -0
- package/Portal/portalLinks.ts +32 -0
- package/Provider/BoxOfficeContext.ts +67 -0
- package/Provider/BoxOfficeProvider.tsx +96 -0
- package/Provider/index.ts +5 -0
- package/README.md +78 -2
- package/Seats/AssignSeatDialog.tsx +73 -0
- package/Seats/SeatsPage.tsx +85 -0
- package/Seats/SeatsView.tsx +108 -0
- package/Seats/index.ts +7 -0
- package/Seats/seatModels.ts +97 -0
- package/Usage/UsagePage.tsx +26 -0
- package/Usage/UsageView.tsx +94 -0
- package/Usage/index.ts +6 -0
- package/Usage/usageModels.ts +92 -0
- package/dist/cjs/Banners/NoLicense.d.ts +2 -0
- package/dist/cjs/Banners/NoLicense.d.ts.map +1 -0
- package/dist/cjs/Banners/NoLicense.js +50 -0
- package/dist/cjs/Banners/NoLicense.js.map +1 -0
- package/dist/cjs/Banners/SuspensionBanner.d.ts +7 -0
- package/dist/cjs/Banners/SuspensionBanner.d.ts.map +1 -0
- package/dist/cjs/Banners/SuspensionBanner.js +62 -0
- package/dist/cjs/Banners/SuspensionBanner.js.map +1 -0
- package/dist/cjs/Banners/TrialBanner.d.ts +2 -0
- package/dist/cjs/Banners/TrialBanner.d.ts.map +1 -0
- package/dist/cjs/Banners/TrialBanner.js +38 -0
- package/dist/cjs/Banners/TrialBanner.js.map +1 -0
- package/dist/cjs/Banners/bannerModels.d.ts +19 -0
- package/dist/cjs/Banners/bannerModels.d.ts.map +1 -0
- package/dist/cjs/Banners/bannerModels.js +101 -0
- package/dist/cjs/Banners/bannerModels.js.map +1 -0
- package/dist/cjs/Banners/index.d.ts +5 -0
- package/dist/cjs/Banners/index.d.ts.map +1 -0
- package/dist/cjs/Entitlements/EntitlementsContext.d.ts +4 -0
- package/dist/cjs/Entitlements/EntitlementsContext.d.ts.map +1 -0
- package/dist/cjs/Entitlements/EntitlementsContext.js +19 -0
- package/dist/cjs/Entitlements/EntitlementsContext.js.map +1 -0
- package/dist/cjs/Entitlements/RequiresModule.d.ts +9 -0
- package/dist/cjs/Entitlements/RequiresModule.d.ts.map +1 -0
- package/dist/cjs/Entitlements/RequiresModule.js +68 -0
- package/dist/cjs/Entitlements/RequiresModule.js.map +1 -0
- package/dist/cjs/Entitlements/entitlementModel.d.ts +25 -0
- package/dist/cjs/Entitlements/entitlementModel.d.ts.map +1 -0
- package/dist/cjs/Entitlements/entitlementModel.js +93 -0
- package/dist/cjs/Entitlements/entitlementModel.js.map +1 -0
- package/dist/cjs/Entitlements/index.d.ts +7 -0
- package/dist/cjs/Entitlements/index.d.ts.map +1 -0
- package/dist/cjs/Entitlements/moduleFilter.d.ts +6 -0
- package/dist/cjs/Entitlements/moduleFilter.d.ts.map +1 -0
- package/dist/cjs/Entitlements/moduleFilter.js +16 -0
- package/dist/cjs/Entitlements/moduleFilter.js.map +1 -0
- package/dist/cjs/Entitlements/requiresModuleModel.d.ts +10 -0
- package/dist/cjs/Entitlements/requiresModuleModel.d.ts.map +1 -0
- package/dist/cjs/Entitlements/requiresModuleModel.js +32 -0
- package/dist/cjs/Entitlements/requiresModuleModel.js.map +1 -0
- package/dist/cjs/Entitlements/useEntitlements.d.ts +5 -0
- package/dist/cjs/Entitlements/useEntitlements.d.ts.map +1 -0
- package/dist/cjs/Entitlements/useEntitlements.js +26 -0
- package/dist/cjs/Entitlements/useEntitlements.js.map +1 -0
- package/dist/cjs/Labels/BoxOfficeLabels.d.ts +116 -0
- package/dist/cjs/Labels/BoxOfficeLabels.d.ts.map +1 -0
- package/dist/cjs/Labels/defaultBoxOfficeLabels.d.ts +3 -0
- package/dist/cjs/Labels/defaultBoxOfficeLabels.d.ts.map +1 -0
- package/dist/cjs/Labels/defaultBoxOfficeLabels.js +120 -0
- package/dist/cjs/Labels/defaultBoxOfficeLabels.js.map +1 -0
- package/dist/cjs/Labels/format.d.ts +2 -0
- package/dist/cjs/Labels/format.d.ts.map +1 -0
- package/dist/cjs/Labels/format.js +15 -0
- package/dist/cjs/Labels/format.js.map +1 -0
- package/dist/cjs/Labels/index.d.ts +5 -0
- package/dist/cjs/Labels/index.d.ts.map +1 -0
- package/dist/cjs/Labels/resolveLabels.d.ts +3 -0
- package/dist/cjs/Labels/resolveLabels.d.ts.map +1 -0
- package/dist/cjs/Labels/resolveLabels.js +35 -0
- package/dist/cjs/Labels/resolveLabels.js.map +1 -0
- package/dist/cjs/Plan/PlanPage.d.ts +2 -0
- package/dist/cjs/Plan/PlanPage.d.ts.map +1 -0
- package/dist/cjs/Plan/PlanPage.js +24 -0
- package/dist/cjs/Plan/PlanPage.js.map +1 -0
- package/dist/cjs/Plan/PlanView.d.ts +10 -0
- package/dist/cjs/Plan/PlanView.d.ts.map +1 -0
- package/dist/cjs/Plan/PlanView.js +123 -0
- package/dist/cjs/Plan/PlanView.js.map +1 -0
- package/dist/cjs/Plan/index.d.ts +4 -0
- package/dist/cjs/Plan/index.d.ts.map +1 -0
- package/dist/cjs/Plan/planModels.d.ts +24 -0
- package/dist/cjs/Plan/planModels.d.ts.map +1 -0
- package/dist/cjs/Plan/planModels.js +83 -0
- package/dist/cjs/Plan/planModels.js.map +1 -0
- package/dist/cjs/Portal/PortalButton.d.ts +10 -0
- package/dist/cjs/Portal/PortalButton.d.ts.map +1 -0
- package/dist/cjs/Portal/PortalButton.js +37 -0
- package/dist/cjs/Portal/PortalButton.js.map +1 -0
- package/dist/cjs/Portal/index.d.ts +3 -0
- package/dist/cjs/Portal/index.d.ts.map +1 -0
- package/dist/cjs/Portal/portalLinks.d.ts +6 -0
- package/dist/cjs/Portal/portalLinks.d.ts.map +1 -0
- package/dist/cjs/Portal/portalLinks.js +34 -0
- package/dist/cjs/Portal/portalLinks.js.map +1 -0
- package/dist/cjs/Provider/BoxOfficeContext.d.ts +16 -0
- package/dist/cjs/Provider/BoxOfficeContext.d.ts.map +1 -0
- package/dist/cjs/Provider/BoxOfficeContext.js +34 -0
- package/dist/cjs/Provider/BoxOfficeContext.js.map +1 -0
- package/dist/cjs/Provider/BoxOfficeProvider.d.ts +15 -0
- package/dist/cjs/Provider/BoxOfficeProvider.d.ts.map +1 -0
- package/dist/cjs/Provider/BoxOfficeProvider.js +72 -0
- package/dist/cjs/Provider/BoxOfficeProvider.js.map +1 -0
- package/dist/cjs/Provider/index.d.ts +3 -0
- package/dist/cjs/Provider/index.d.ts.map +1 -0
- package/dist/cjs/Seats/AssignSeatDialog.d.ts +9 -0
- package/dist/cjs/Seats/AssignSeatDialog.d.ts.map +1 -0
- package/dist/cjs/Seats/AssignSeatDialog.js +99 -0
- package/dist/cjs/Seats/AssignSeatDialog.js.map +1 -0
- package/dist/cjs/Seats/SeatsPage.d.ts +2 -0
- package/dist/cjs/Seats/SeatsPage.d.ts.map +1 -0
- package/dist/cjs/Seats/SeatsPage.js +87 -0
- package/dist/cjs/Seats/SeatsPage.js.map +1 -0
- package/dist/cjs/Seats/SeatsView.d.ts +14 -0
- package/dist/cjs/Seats/SeatsView.d.ts.map +1 -0
- package/dist/cjs/Seats/SeatsView.js +111 -0
- package/dist/cjs/Seats/SeatsView.js.map +1 -0
- package/dist/cjs/Seats/index.d.ts +5 -0
- package/dist/cjs/Seats/index.d.ts.map +1 -0
- package/dist/cjs/Seats/seatModels.d.ts +23 -0
- package/dist/cjs/Seats/seatModels.d.ts.map +1 -0
- package/dist/cjs/Seats/seatModels.js +65 -0
- package/dist/cjs/Seats/seatModels.js.map +1 -0
- package/dist/cjs/Usage/UsagePage.d.ts +2 -0
- package/dist/cjs/Usage/UsagePage.d.ts.map +1 -0
- package/dist/cjs/Usage/UsagePage.js +26 -0
- package/dist/cjs/Usage/UsagePage.js.map +1 -0
- package/dist/cjs/Usage/UsageView.d.ts +9 -0
- package/dist/cjs/Usage/UsageView.d.ts.map +1 -0
- package/dist/cjs/Usage/UsageView.js +108 -0
- package/dist/cjs/Usage/UsageView.js.map +1 -0
- package/dist/cjs/Usage/index.d.ts +4 -0
- package/dist/cjs/Usage/index.d.ts.map +1 -0
- package/dist/cjs/Usage/usageModels.d.ts +17 -0
- package/dist/cjs/Usage/usageModels.d.ts.map +1 -0
- package/dist/cjs/Usage/usageModels.js +57 -0
- package/dist/cjs/Usage/usageModels.js.map +1 -0
- package/dist/cjs/formatting.d.ts +5 -0
- package/dist/cjs/formatting.d.ts.map +1 -0
- package/dist/cjs/formatting.js +46 -0
- package/dist/cjs/formatting.js.map +1 -0
- package/dist/cjs/index.d.ts +10 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +85 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/package.json +3 -0
- package/dist/esm/Banners/NoLicense.d.ts +2 -0
- package/dist/esm/Banners/NoLicense.d.ts.map +1 -0
- package/dist/esm/Banners/NoLicense.js +48 -0
- package/dist/esm/Banners/NoLicense.js.map +1 -0
- package/dist/esm/Banners/SuspensionBanner.d.ts +7 -0
- package/dist/esm/Banners/SuspensionBanner.d.ts.map +1 -0
- package/dist/esm/Banners/SuspensionBanner.js +59 -0
- package/dist/esm/Banners/SuspensionBanner.js.map +1 -0
- package/dist/esm/Banners/TrialBanner.d.ts +2 -0
- package/dist/esm/Banners/TrialBanner.d.ts.map +1 -0
- package/dist/esm/Banners/TrialBanner.js +36 -0
- package/dist/esm/Banners/TrialBanner.js.map +1 -0
- package/dist/esm/Banners/bannerModels.d.ts +19 -0
- package/dist/esm/Banners/bannerModels.d.ts.map +1 -0
- package/dist/esm/Banners/bannerModels.js +96 -0
- package/dist/esm/Banners/bannerModels.js.map +1 -0
- package/dist/esm/Banners/index.d.ts +5 -0
- package/dist/esm/Banners/index.d.ts.map +1 -0
- package/dist/esm/Banners/index.js +5 -0
- package/dist/esm/Banners/index.js.map +1 -0
- package/dist/esm/Entitlements/EntitlementsContext.d.ts +4 -0
- package/dist/esm/Entitlements/EntitlementsContext.d.ts.map +1 -0
- package/dist/esm/Entitlements/EntitlementsContext.js +16 -0
- package/dist/esm/Entitlements/EntitlementsContext.js.map +1 -0
- package/dist/esm/Entitlements/RequiresModule.d.ts +9 -0
- package/dist/esm/Entitlements/RequiresModule.d.ts.map +1 -0
- package/dist/esm/Entitlements/RequiresModule.js +66 -0
- package/dist/esm/Entitlements/RequiresModule.js.map +1 -0
- package/dist/esm/Entitlements/entitlementModel.d.ts +25 -0
- package/dist/esm/Entitlements/entitlementModel.d.ts.map +1 -0
- package/dist/esm/Entitlements/entitlementModel.js +89 -0
- package/dist/esm/Entitlements/entitlementModel.js.map +1 -0
- package/dist/esm/Entitlements/index.d.ts +7 -0
- package/dist/esm/Entitlements/index.d.ts.map +1 -0
- package/dist/esm/Entitlements/index.js +7 -0
- package/dist/esm/Entitlements/index.js.map +1 -0
- package/dist/esm/Entitlements/moduleFilter.d.ts +6 -0
- package/dist/esm/Entitlements/moduleFilter.d.ts.map +1 -0
- package/dist/esm/Entitlements/moduleFilter.js +14 -0
- package/dist/esm/Entitlements/moduleFilter.js.map +1 -0
- package/dist/esm/Entitlements/requiresModuleModel.d.ts +10 -0
- package/dist/esm/Entitlements/requiresModuleModel.d.ts.map +1 -0
- package/dist/esm/Entitlements/requiresModuleModel.js +30 -0
- package/dist/esm/Entitlements/requiresModuleModel.js.map +1 -0
- package/dist/esm/Entitlements/useEntitlements.d.ts +5 -0
- package/dist/esm/Entitlements/useEntitlements.d.ts.map +1 -0
- package/dist/esm/Entitlements/useEntitlements.js +23 -0
- package/dist/esm/Entitlements/useEntitlements.js.map +1 -0
- package/dist/esm/Labels/BoxOfficeLabels.d.ts +116 -0
- package/dist/esm/Labels/BoxOfficeLabels.d.ts.map +1 -0
- package/dist/esm/Labels/BoxOfficeLabels.js +2 -0
- package/dist/esm/Labels/BoxOfficeLabels.js.map +1 -0
- package/dist/esm/Labels/defaultBoxOfficeLabels.d.ts +3 -0
- package/dist/esm/Labels/defaultBoxOfficeLabels.d.ts.map +1 -0
- package/dist/esm/Labels/defaultBoxOfficeLabels.js +118 -0
- package/dist/esm/Labels/defaultBoxOfficeLabels.js.map +1 -0
- package/dist/esm/Labels/format.d.ts +2 -0
- package/dist/esm/Labels/format.d.ts.map +1 -0
- package/dist/esm/Labels/format.js +13 -0
- package/dist/esm/Labels/format.js.map +1 -0
- package/dist/esm/Labels/index.d.ts +5 -0
- package/dist/esm/Labels/index.d.ts.map +1 -0
- package/dist/esm/Labels/index.js +5 -0
- package/dist/esm/Labels/index.js.map +1 -0
- package/dist/esm/Labels/resolveLabels.d.ts +3 -0
- package/dist/esm/Labels/resolveLabels.d.ts.map +1 -0
- package/dist/esm/Labels/resolveLabels.js +33 -0
- package/dist/esm/Labels/resolveLabels.js.map +1 -0
- package/dist/esm/Plan/PlanPage.d.ts +2 -0
- package/dist/esm/Plan/PlanPage.d.ts.map +1 -0
- package/dist/esm/Plan/PlanPage.js +22 -0
- package/dist/esm/Plan/PlanPage.js.map +1 -0
- package/dist/esm/Plan/PlanView.d.ts +10 -0
- package/dist/esm/Plan/PlanView.d.ts.map +1 -0
- package/dist/esm/Plan/PlanView.js +121 -0
- package/dist/esm/Plan/PlanView.js.map +1 -0
- package/dist/esm/Plan/index.d.ts +4 -0
- package/dist/esm/Plan/index.d.ts.map +1 -0
- package/dist/esm/Plan/index.js +4 -0
- package/dist/esm/Plan/index.js.map +1 -0
- package/dist/esm/Plan/planModels.d.ts +24 -0
- package/dist/esm/Plan/planModels.d.ts.map +1 -0
- package/dist/esm/Plan/planModels.js +78 -0
- package/dist/esm/Plan/planModels.js.map +1 -0
- package/dist/esm/Portal/PortalButton.d.ts +10 -0
- package/dist/esm/Portal/PortalButton.d.ts.map +1 -0
- package/dist/esm/Portal/PortalButton.js +35 -0
- package/dist/esm/Portal/PortalButton.js.map +1 -0
- package/dist/esm/Portal/index.d.ts +3 -0
- package/dist/esm/Portal/index.d.ts.map +1 -0
- package/dist/esm/Portal/index.js +3 -0
- package/dist/esm/Portal/index.js.map +1 -0
- package/dist/esm/Portal/portalLinks.d.ts +6 -0
- package/dist/esm/Portal/portalLinks.d.ts.map +1 -0
- package/dist/esm/Portal/portalLinks.js +31 -0
- package/dist/esm/Portal/portalLinks.js.map +1 -0
- package/dist/esm/Provider/BoxOfficeContext.d.ts +16 -0
- package/dist/esm/Provider/BoxOfficeContext.d.ts.map +1 -0
- package/dist/esm/Provider/BoxOfficeContext.js +29 -0
- package/dist/esm/Provider/BoxOfficeContext.js.map +1 -0
- package/dist/esm/Provider/BoxOfficeProvider.d.ts +15 -0
- package/dist/esm/Provider/BoxOfficeProvider.d.ts.map +1 -0
- package/dist/esm/Provider/BoxOfficeProvider.js +70 -0
- package/dist/esm/Provider/BoxOfficeProvider.js.map +1 -0
- package/dist/esm/Provider/index.d.ts +3 -0
- package/dist/esm/Provider/index.d.ts.map +1 -0
- package/dist/esm/Provider/index.js +3 -0
- package/dist/esm/Provider/index.js.map +1 -0
- package/dist/esm/Seats/AssignSeatDialog.d.ts +9 -0
- package/dist/esm/Seats/AssignSeatDialog.d.ts.map +1 -0
- package/dist/esm/Seats/AssignSeatDialog.js +97 -0
- package/dist/esm/Seats/AssignSeatDialog.js.map +1 -0
- package/dist/esm/Seats/SeatsPage.d.ts +2 -0
- package/dist/esm/Seats/SeatsPage.d.ts.map +1 -0
- package/dist/esm/Seats/SeatsPage.js +85 -0
- package/dist/esm/Seats/SeatsPage.js.map +1 -0
- package/dist/esm/Seats/SeatsView.d.ts +14 -0
- package/dist/esm/Seats/SeatsView.d.ts.map +1 -0
- package/dist/esm/Seats/SeatsView.js +109 -0
- package/dist/esm/Seats/SeatsView.js.map +1 -0
- package/dist/esm/Seats/index.d.ts +5 -0
- package/dist/esm/Seats/index.d.ts.map +1 -0
- package/dist/esm/Seats/index.js +5 -0
- package/dist/esm/Seats/index.js.map +1 -0
- package/dist/esm/Seats/seatModels.d.ts +23 -0
- package/dist/esm/Seats/seatModels.d.ts.map +1 -0
- package/dist/esm/Seats/seatModels.js +59 -0
- package/dist/esm/Seats/seatModels.js.map +1 -0
- package/dist/esm/Usage/UsagePage.d.ts +2 -0
- package/dist/esm/Usage/UsagePage.d.ts.map +1 -0
- package/dist/esm/Usage/UsagePage.js +24 -0
- package/dist/esm/Usage/UsagePage.js.map +1 -0
- package/dist/esm/Usage/UsageView.d.ts +9 -0
- package/dist/esm/Usage/UsageView.d.ts.map +1 -0
- package/dist/esm/Usage/UsageView.js +106 -0
- package/dist/esm/Usage/UsageView.js.map +1 -0
- package/dist/esm/Usage/index.d.ts +4 -0
- package/dist/esm/Usage/index.d.ts.map +1 -0
- package/dist/esm/Usage/index.js +4 -0
- package/dist/esm/Usage/index.js.map +1 -0
- package/dist/esm/Usage/usageModels.d.ts +17 -0
- package/dist/esm/Usage/usageModels.d.ts.map +1 -0
- package/dist/esm/Usage/usageModels.js +53 -0
- package/dist/esm/Usage/usageModels.js.map +1 -0
- package/dist/esm/formatting.d.ts +5 -0
- package/dist/esm/formatting.d.ts.map +1 -0
- package/dist/esm/formatting.js +42 -0
- package/dist/esm/formatting.js.map +1 -0
- package/dist/esm/index.d.ts +10 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +29 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/package.json +3 -0
- package/formatting.ts +41 -0
- package/index.ts +12 -0
- package/package.json +84 -4
- package/styles.css +166 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../index.ts"],"names":[],"mappings":"AAGA,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var bannerModels = require('./Banners/bannerModels.js');
|
|
4
|
+
var NoLicense = require('./Banners/NoLicense.js');
|
|
5
|
+
var SuspensionBanner = require('./Banners/SuspensionBanner.js');
|
|
6
|
+
var TrialBanner = require('./Banners/TrialBanner.js');
|
|
7
|
+
var entitlementModel = require('./Entitlements/entitlementModel.js');
|
|
8
|
+
var EntitlementsContext = require('./Entitlements/EntitlementsContext.js');
|
|
9
|
+
var moduleFilter = require('./Entitlements/moduleFilter.js');
|
|
10
|
+
var requiresModuleModel = require('./Entitlements/requiresModuleModel.js');
|
|
11
|
+
var RequiresModule = require('./Entitlements/RequiresModule.js');
|
|
12
|
+
var useEntitlements = require('./Entitlements/useEntitlements.js');
|
|
13
|
+
var defaultBoxOfficeLabels = require('./Labels/defaultBoxOfficeLabels.js');
|
|
14
|
+
var resolveLabels = require('./Labels/resolveLabels.js');
|
|
15
|
+
var format = require('./Labels/format.js');
|
|
16
|
+
var planModels = require('./Plan/planModels.js');
|
|
17
|
+
var PlanPage = require('./Plan/PlanPage.js');
|
|
18
|
+
var PlanView = require('./Plan/PlanView.js');
|
|
19
|
+
var portalLinks = require('./Portal/portalLinks.js');
|
|
20
|
+
var PortalButton = require('./Portal/PortalButton.js');
|
|
21
|
+
var BoxOfficeContext = require('./Provider/BoxOfficeContext.js');
|
|
22
|
+
var BoxOfficeProvider = require('./Provider/BoxOfficeProvider.js');
|
|
23
|
+
var AssignSeatDialog = require('./Seats/AssignSeatDialog.js');
|
|
24
|
+
var seatModels = require('./Seats/seatModels.js');
|
|
25
|
+
var SeatsPage = require('./Seats/SeatsPage.js');
|
|
26
|
+
var SeatsView = require('./Seats/SeatsView.js');
|
|
27
|
+
var usageModels = require('./Usage/usageModels.js');
|
|
28
|
+
var UsagePage = require('./Usage/UsagePage.js');
|
|
29
|
+
var UsageView = require('./Usage/UsageView.js');
|
|
30
|
+
var formatting = require('./formatting.js');
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
exports.noLicenseModel = bannerModels.noLicenseModel;
|
|
35
|
+
exports.suspensionReason = bannerModels.suspensionReason;
|
|
36
|
+
exports.trialBannerModel = bannerModels.trialBannerModel;
|
|
37
|
+
exports.trialWarningDays = bannerModels.trialWarningDays;
|
|
38
|
+
exports.NoLicense = NoLicense.NoLicense;
|
|
39
|
+
exports.SuspensionBanner = SuspensionBanner.SuspensionBanner;
|
|
40
|
+
exports.SuspensionBannerView = SuspensionBanner.SuspensionBannerView;
|
|
41
|
+
exports.TrialBanner = TrialBanner.TrialBanner;
|
|
42
|
+
exports.daysBetween = entitlementModel.daysBetween;
|
|
43
|
+
exports.entitlementsOf = entitlementModel.entitlementsOf;
|
|
44
|
+
exports.toDate = entitlementModel.toDate;
|
|
45
|
+
exports.EntitlementsContext = EntitlementsContext.EntitlementsContext;
|
|
46
|
+
exports.useEntitlementsContext = EntitlementsContext.useEntitlementsContext;
|
|
47
|
+
exports.filterByModule = moduleFilter.filterByModule;
|
|
48
|
+
exports.requiresModuleModel = requiresModuleModel.requiresModuleModel;
|
|
49
|
+
exports.RequiresModule = RequiresModule.RequiresModule;
|
|
50
|
+
exports.useEntitlements = useEntitlements.useEntitlements;
|
|
51
|
+
exports.useModuleFilter = useEntitlements.useModuleFilter;
|
|
52
|
+
exports.defaultBoxOfficeLabels = defaultBoxOfficeLabels.defaultBoxOfficeLabels;
|
|
53
|
+
exports.resolveLabels = resolveLabels.resolveLabels;
|
|
54
|
+
exports.format = format.format;
|
|
55
|
+
exports.moduleRows = planModels.moduleRows;
|
|
56
|
+
exports.offerRows = planModels.offerRows;
|
|
57
|
+
exports.planSummary = planModels.planSummary;
|
|
58
|
+
exports.priceText = planModels.priceText;
|
|
59
|
+
exports.PlanPage = PlanPage.PlanPage;
|
|
60
|
+
exports.PlanView = PlanView.PlanView;
|
|
61
|
+
exports.linkToPortal = portalLinks.linkToPortal;
|
|
62
|
+
exports.openInNewTab = portalLinks.openInNewTab;
|
|
63
|
+
exports.PortalButton = PortalButton.PortalButton;
|
|
64
|
+
exports.BoxOfficeContext = BoxOfficeContext.BoxOfficeContext;
|
|
65
|
+
exports.defaultBoxOfficeContextValue = BoxOfficeContext.defaultBoxOfficeContextValue;
|
|
66
|
+
exports.useBoxOfficeContext = BoxOfficeContext.useBoxOfficeContext;
|
|
67
|
+
exports.useBoxOfficeLabels = BoxOfficeContext.useBoxOfficeLabels;
|
|
68
|
+
exports.BoxOfficeProvider = BoxOfficeProvider.BoxOfficeProvider;
|
|
69
|
+
exports.AssignSeatDialog = AssignSeatDialog.AssignSeatDialog;
|
|
70
|
+
exports.emptySeatPerson = seatModels.emptySeatPerson;
|
|
71
|
+
exports.isValidSeatPerson = seatModels.isValidSeatPerson;
|
|
72
|
+
exports.personOf = seatModels.personOf;
|
|
73
|
+
exports.seatRows = seatModels.seatRows;
|
|
74
|
+
exports.seatSummary = seatModels.seatSummary;
|
|
75
|
+
exports.SeatsPage = SeatsPage.SeatsPage;
|
|
76
|
+
exports.SeatsView = SeatsView.SeatsView;
|
|
77
|
+
exports.meterUsageModel = usageModels.meterUsageModel;
|
|
78
|
+
exports.usageLevel = usageModels.usageLevel;
|
|
79
|
+
exports.usageWarningShare = usageModels.usageWarningShare;
|
|
80
|
+
exports.UsagePage = UsagePage.UsagePage;
|
|
81
|
+
exports.UsageView = UsageView.UsageView;
|
|
82
|
+
exports.formatDay = formatting.formatDay;
|
|
83
|
+
exports.formatMoney = formatting.formatMoney;
|
|
84
|
+
exports.formatQuantity = formatting.formatQuantity;
|
|
85
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NoLicense.d.ts","sourceRoot":"","sources":["../../../Banners/NoLicense.tsx"],"names":[],"mappings":"AAeA,eAAO,MAAM,SAAS,0CAoBrB,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { Message } from '@cratis/components/Display';
|
|
3
|
+
import { PortalIntent } from '@cratis/showrunner.boxoffice';
|
|
4
|
+
import { useEntitlementsContext } from '../Entitlements/EntitlementsContext.js';
|
|
5
|
+
import { PortalButton } from '../Portal/PortalButton.js';
|
|
6
|
+
import { useBoxOfficeContext } from '../Provider/BoxOfficeContext.js';
|
|
7
|
+
import { noLicenseModel } from './bannerModels.js';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Tells a user who cannot use the product why, and what to do about it: the tenant is suspended, its trial ended, the
|
|
11
|
+
* user has no seat, or the tenant has more people with seats than it has bought. Nothing is shown to a user with a
|
|
12
|
+
* license. Render it where the application's content would be, or above it.
|
|
13
|
+
*/ const NoLicense = ()=>{
|
|
14
|
+
const entitlements = useEntitlementsContext();
|
|
15
|
+
const { labels, seat } = useBoxOfficeContext();
|
|
16
|
+
const model = noLicenseModel(entitlements, seat, labels);
|
|
17
|
+
if (!model) {
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
return /*#__PURE__*/ jsxs("div", {
|
|
21
|
+
className: "boxoffice-no-license",
|
|
22
|
+
"data-reason": model.reason,
|
|
23
|
+
children: [
|
|
24
|
+
/*#__PURE__*/ jsx(Message, {
|
|
25
|
+
severity: model.reason === 'noSeat' || model.reason === 'overCapacity' ? 'warn' : 'error',
|
|
26
|
+
children: /*#__PURE__*/ jsxs("div", {
|
|
27
|
+
className: "boxoffice-banner__text",
|
|
28
|
+
children: [
|
|
29
|
+
/*#__PURE__*/ jsx("strong", {
|
|
30
|
+
children: model.title
|
|
31
|
+
}),
|
|
32
|
+
/*#__PURE__*/ jsx("span", {
|
|
33
|
+
children: model.text
|
|
34
|
+
})
|
|
35
|
+
]
|
|
36
|
+
})
|
|
37
|
+
}),
|
|
38
|
+
model.reason !== 'noSeat' && /*#__PURE__*/ jsx(PortalButton, {
|
|
39
|
+
intent: PortalIntent.buy,
|
|
40
|
+
label: labels.noLicense.openPortal,
|
|
41
|
+
variant: "outline"
|
|
42
|
+
})
|
|
43
|
+
]
|
|
44
|
+
});
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
export { NoLicense };
|
|
48
|
+
//# sourceMappingURL=NoLicense.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NoLicense.js","sources":["../../../Banners/NoLicense.tsx"],"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 { Message } from '@cratis/components/Display';\nimport { PortalIntent } from '@cratis/showrunner.boxoffice';\nimport { useEntitlementsContext } from '../Entitlements/EntitlementsContext.js';\nimport { PortalButton } from '../Portal/PortalButton.js';\nimport { useBoxOfficeContext } from '../Provider/BoxOfficeContext.js';\nimport { noLicenseModel } from './bannerModels.js';\n\n/**\n * Tells a user who cannot use the product why, and what to do about it: the tenant is suspended, its trial ended, the\n * user has no seat, or the tenant has more people with seats than it has bought. Nothing is shown to a user with a\n * license. Render it where the application's content would be, or above it.\n */\nexport const NoLicense = () => {\n const entitlements = useEntitlementsContext();\n const { labels, seat } = useBoxOfficeContext();\n const model = noLicenseModel(entitlements, seat, labels);\n\n if (!model) {\n return null;\n }\n\n return (\n <div className='boxoffice-no-license' data-reason={model.reason}>\n <Message severity={model.reason === 'noSeat' || model.reason === 'overCapacity' ? 'warn' : 'error'}>\n <div className='boxoffice-banner__text'>\n <strong>{model.title}</strong>\n <span>{model.text}</span>\n </div>\n </Message>\n {model.reason !== 'noSeat' && <PortalButton intent={PortalIntent.buy} label={labels.noLicense.openPortal} variant='outline' />}\n </div>\n );\n};\n"],"names":["NoLicense","entitlements","useEntitlementsContext","labels","seat","useBoxOfficeContext","model","noLicenseModel","_jsxs","div","className","data-reason","reason","_jsx","Message","severity","strong","title","span","text","PortalButton","intent","PortalIntent","buy","label","noLicense","openPortal","variant"],"mappings":";;;;;;;;AAUA;;;;UAKaA,SAAAA,GAAY,IAAA;AACrB,IAAA,MAAMC,YAAAA,GAAeC,sBAAAA,EAAAA;AACrB,IAAA,MAAM,EAAEC,MAAM,EAAEC,IAAI,EAAE,GAAGC,mBAAAA,EAAAA;IACzB,MAAMC,KAAAA,GAAQC,cAAAA,CAAeN,YAAAA,EAAcG,IAAAA,EAAMD,MAAAA,CAAAA;AAEjD,IAAA,IAAI,CAACG,KAAAA,EAAO;QACR,OAAO,IAAA;AACX,IAAA;AAEA,IAAA,qBACIE,IAAA,CAACC,KAAAA,EAAAA;QAAIC,SAAAA,EAAU,sBAAA;AAAuBC,QAAAA,aAAAA,EAAaL,MAAMM,MAAM;;0BAC3DC,GAAA,CAACC,OAAAA,EAAAA;gBAAQC,QAAAA,EAAUT,KAAAA,CAAMM,MAAM,KAAK,QAAA,IAAYN,MAAMM,MAAM,KAAK,iBAAiB,MAAA,GAAS,OAAA;AACvF,gBAAA,QAAA,gBAAAJ,IAAA,CAACC,KAAAA,EAAAA;oBAAIC,SAAAA,EAAU,wBAAA;;sCACXG,GAAA,CAACG,QAAAA,EAAAA;AAAQV,4BAAAA,QAAAA,EAAAA,KAAAA,CAAMW;;sCACfJ,GAAA,CAACK,MAAAA,EAAAA;AAAMZ,4BAAAA,QAAAA,EAAAA,KAAAA,CAAMa;;;;;YAGpBb,KAAAA,CAAMM,MAAM,KAAK,QAAA,kBAAYC,GAAA,CAACO,YAAAA,EAAAA;AAAaC,gBAAAA,MAAAA,EAAQC,aAAaC,GAAG;gBAAEC,KAAAA,EAAOrB,MAAAA,CAAOsB,SAAS,CAACC,UAAU;gBAAEC,OAAAA,EAAQ;;;;AAG9H;;"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { SuspensionCause } from '@cratis/showrunner.boxoffice';
|
|
2
|
+
export interface SuspensionBannerViewProps {
|
|
3
|
+
cause?: SuspensionCause;
|
|
4
|
+
}
|
|
5
|
+
export declare const SuspensionBannerView: ({ cause }: SuspensionBannerViewProps) => import("react").JSX.Element;
|
|
6
|
+
export declare const SuspensionBanner: () => import("react").JSX.Element | null;
|
|
7
|
+
//# sourceMappingURL=SuspensionBanner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SuspensionBanner.d.ts","sourceRoot":"","sources":["../../../Banners/SuspensionBanner.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAiD,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAS9G,MAAM,WAAW,yBAAyB;IAEtC,KAAK,CAAC,EAAE,eAAe,CAAC;CAC3B;AAKD,eAAO,MAAM,oBAAoB,GAAI,WAAW,yBAAyB,gCAgBxE,CAAC;AAMF,eAAO,MAAM,gBAAgB,0CAU5B,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
|
+
import { Message } from '@cratis/components/Display';
|
|
3
|
+
import { ReadOnlyReason, CurrentStanding, PortalIntent } from '@cratis/showrunner.boxoffice';
|
|
4
|
+
import { useEntitlementsContext } from '../Entitlements/EntitlementsContext.js';
|
|
5
|
+
import { PortalButton } from '../Portal/PortalButton.js';
|
|
6
|
+
import { useBoxOfficeLabels } from '../Provider/BoxOfficeContext.js';
|
|
7
|
+
import { suspensionReason } from './bannerModels.js';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* What the suspension banner shows, for the cause it is given.
|
|
11
|
+
*/ const SuspensionBannerView = ({ cause })=>{
|
|
12
|
+
const labels = useBoxOfficeLabels();
|
|
13
|
+
const reason = suspensionReason(cause, labels);
|
|
14
|
+
return /*#__PURE__*/ jsxs("div", {
|
|
15
|
+
className: "boxoffice-banner",
|
|
16
|
+
children: [
|
|
17
|
+
/*#__PURE__*/ jsx(Message, {
|
|
18
|
+
severity: "error",
|
|
19
|
+
children: /*#__PURE__*/ jsxs("div", {
|
|
20
|
+
className: "boxoffice-banner__text",
|
|
21
|
+
children: [
|
|
22
|
+
/*#__PURE__*/ jsx("strong", {
|
|
23
|
+
children: labels.suspension.title
|
|
24
|
+
}),
|
|
25
|
+
reason && /*#__PURE__*/ jsx("span", {
|
|
26
|
+
children: reason
|
|
27
|
+
}),
|
|
28
|
+
/*#__PURE__*/ jsx("span", {
|
|
29
|
+
children: labels.suspension.resolve
|
|
30
|
+
})
|
|
31
|
+
]
|
|
32
|
+
})
|
|
33
|
+
}),
|
|
34
|
+
/*#__PURE__*/ jsx(PortalButton, {
|
|
35
|
+
intent: PortalIntent.buy,
|
|
36
|
+
label: labels.suspension.openPortal,
|
|
37
|
+
size: "small",
|
|
38
|
+
variant: "outline"
|
|
39
|
+
})
|
|
40
|
+
]
|
|
41
|
+
});
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Tells the user that the operator suspended the tenant and why, and that everything is read-only until it is lifted.
|
|
45
|
+
* Nothing is shown when the tenant is not suspended. Render it once, above the application's pages.
|
|
46
|
+
*/ const SuspensionBanner = ()=>{
|
|
47
|
+
const entitlements = useEntitlementsContext();
|
|
48
|
+
const isSuspended = entitlements.readOnlyReason === ReadOnlyReason.tenantSuspended;
|
|
49
|
+
const [standing] = CurrentStanding.when(isSuspended).use();
|
|
50
|
+
if (!isSuspended) {
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
return /*#__PURE__*/ jsx(SuspensionBannerView, {
|
|
54
|
+
cause: standing.isSuccess ? standing.data?.cause : undefined
|
|
55
|
+
});
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
export { SuspensionBanner, SuspensionBannerView };
|
|
59
|
+
//# sourceMappingURL=SuspensionBanner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SuspensionBanner.js","sources":["../../../Banners/SuspensionBanner.tsx"],"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 { Message } from '@cratis/components/Display';\nimport { CurrentStanding, PortalIntent, ReadOnlyReason, SuspensionCause } from '@cratis/showrunner.boxoffice';\nimport { useEntitlementsContext } from '../Entitlements/EntitlementsContext.js';\nimport { PortalButton } from '../Portal/PortalButton.js';\nimport { useBoxOfficeLabels } from '../Provider/BoxOfficeContext.js';\nimport { suspensionReason } from './bannerModels.js';\n\n/**\n * Props for {@link SuspensionBannerView}.\n */\nexport interface SuspensionBannerViewProps {\n /** The cause the operator gave; the reason is left out when not known. */\n cause?: SuspensionCause;\n}\n\n/**\n * What the suspension banner shows, for the cause it is given.\n */\nexport const SuspensionBannerView = ({ cause }: SuspensionBannerViewProps) => {\n const labels = useBoxOfficeLabels();\n const reason = suspensionReason(cause, labels);\n\n return (\n <div className='boxoffice-banner'>\n <Message severity='error'>\n <div className='boxoffice-banner__text'>\n <strong>{labels.suspension.title}</strong>\n {reason && <span>{reason}</span>}\n <span>{labels.suspension.resolve}</span>\n </div>\n </Message>\n <PortalButton intent={PortalIntent.buy} label={labels.suspension.openPortal} size='small' variant='outline' />\n </div>\n );\n};\n\n/**\n * Tells the user that the operator suspended the tenant and why, and that everything is read-only until it is lifted.\n * Nothing is shown when the tenant is not suspended. Render it once, above the application's pages.\n */\nexport const SuspensionBanner = () => {\n const entitlements = useEntitlementsContext();\n const isSuspended = entitlements.readOnlyReason === ReadOnlyReason.tenantSuspended;\n const [standing] = CurrentStanding.when(isSuspended).use();\n\n if (!isSuspended) {\n return null;\n }\n\n return <SuspensionBannerView cause={standing.isSuccess ? standing.data?.cause : undefined} />;\n};\n"],"names":["SuspensionBannerView","cause","labels","useBoxOfficeLabels","reason","suspensionReason","_jsxs","div","className","_jsx","Message","severity","strong","suspension","title","span","resolve","PortalButton","intent","PortalIntent","buy","label","openPortal","size","variant","SuspensionBanner","entitlements","useEntitlementsContext","isSuspended","readOnlyReason","ReadOnlyReason","tenantSuspended","standing","CurrentStanding","when","use","isSuccess","data","undefined"],"mappings":";;;;;;;;AAkBA;;AAEC,IACM,MAAMA,oBAAAA,GAAuB,CAAC,EAAEC,KAAK,EAA6B,GAAA;AACrE,IAAA,MAAMC,MAAAA,GAASC,kBAAAA,EAAAA;IACf,MAAMC,MAAAA,GAASC,iBAAiBJ,KAAAA,EAAOC,MAAAA,CAAAA;AAEvC,IAAA,qBACII,IAAA,CAACC,KAAAA,EAAAA;QAAIC,SAAAA,EAAU,kBAAA;;0BACXC,GAAA,CAACC,OAAAA,EAAAA;gBAAQC,QAAAA,EAAS,OAAA;AACd,gBAAA,QAAA,gBAAAL,IAAA,CAACC,KAAAA,EAAAA;oBAAIC,SAAAA,EAAU,wBAAA;;sCACXC,GAAA,CAACG,QAAAA,EAAAA;sCAAQV,MAAAA,CAAOW,UAAU,CAACC;;AAC1BV,wBAAAA,MAAAA,kBAAUK,GAAA,CAACM,MAAAA,EAAAA;AAAMX,4BAAAA,QAAAA,EAAAA;;sCAClBK,GAAA,CAACM,MAAAA,EAAAA;sCAAMb,MAAAA,CAAOW,UAAU,CAACG;;;;;0BAGjCP,GAAA,CAACQ,YAAAA,EAAAA;AAAaC,gBAAAA,MAAAA,EAAQC,aAAaC,GAAG;gBAAEC,KAAAA,EAAOnB,MAAAA,CAAOW,UAAU,CAACS,UAAU;gBAAEC,IAAAA,EAAK,OAAA;gBAAQC,OAAAA,EAAQ;;;;AAG9G;AAEA;;;UAIaC,gBAAAA,GAAmB,IAAA;AAC5B,IAAA,MAAMC,YAAAA,GAAeC,sBAAAA,EAAAA;AACrB,IAAA,MAAMC,WAAAA,GAAcF,YAAAA,CAAaG,cAAc,KAAKC,eAAeC,eAAe;AAClF,IAAA,MAAM,CAACC,QAAAA,CAAS,GAAGC,gBAAgBC,IAAI,CAACN,aAAaO,GAAG,EAAA;AAExD,IAAA,IAAI,CAACP,WAAAA,EAAa;QACd,OAAO,IAAA;AACX,IAAA;AAEA,IAAA,qBAAOnB,GAAA,CAACT,oBAAAA,EAAAA;AAAqBC,QAAAA,KAAAA,EAAO+B,SAASI,SAAS,GAAGJ,QAAAA,CAASK,IAAI,EAAEpC,KAAAA,GAAQqC;;AACpF;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TrialBanner.d.ts","sourceRoot":"","sources":["../../../Banners/TrialBanner.tsx"],"names":[],"mappings":"AAcA,eAAO,MAAM,WAAW,0CAevB,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { Message } from '@cratis/components/Display';
|
|
3
|
+
import { PortalIntent } from '@cratis/showrunner.boxoffice';
|
|
4
|
+
import { useEntitlementsContext } from '../Entitlements/EntitlementsContext.js';
|
|
5
|
+
import { PortalButton } from '../Portal/PortalButton.js';
|
|
6
|
+
import { useBoxOfficeLabels } from '../Provider/BoxOfficeContext.js';
|
|
7
|
+
import { trialBannerModel } from './bannerModels.js';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Tells the user how long the tenant's trial runs, or that it has closed, with a button to buy. Nothing is shown when
|
|
11
|
+
* the tenant is not on a trial. Render it once, above the application's pages.
|
|
12
|
+
*/ const TrialBanner = ()=>{
|
|
13
|
+
const entitlements = useEntitlementsContext();
|
|
14
|
+
const labels = useBoxOfficeLabels();
|
|
15
|
+
const model = trialBannerModel(entitlements, labels);
|
|
16
|
+
if (!model) {
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
return /*#__PURE__*/ jsxs("div", {
|
|
20
|
+
className: "boxoffice-banner",
|
|
21
|
+
children: [
|
|
22
|
+
/*#__PURE__*/ jsx(Message, {
|
|
23
|
+
severity: model.severity,
|
|
24
|
+
children: model.text
|
|
25
|
+
}),
|
|
26
|
+
/*#__PURE__*/ jsx(PortalButton, {
|
|
27
|
+
intent: PortalIntent.buy,
|
|
28
|
+
label: labels.trialBanner.buy,
|
|
29
|
+
size: "small"
|
|
30
|
+
})
|
|
31
|
+
]
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
export { TrialBanner };
|
|
36
|
+
//# sourceMappingURL=TrialBanner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TrialBanner.js","sources":["../../../Banners/TrialBanner.tsx"],"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 { Message } from '@cratis/components/Display';\nimport { PortalIntent } from '@cratis/showrunner.boxoffice';\nimport { useEntitlementsContext } from '../Entitlements/EntitlementsContext.js';\nimport { PortalButton } from '../Portal/PortalButton.js';\nimport { useBoxOfficeLabels } from '../Provider/BoxOfficeContext.js';\nimport { trialBannerModel } from './bannerModels.js';\n\n/**\n * Tells the user how long the tenant's trial runs, or that it has closed, with a button to buy. Nothing is shown when\n * the tenant is not on a trial. Render it once, above the application's pages.\n */\nexport const TrialBanner = () => {\n const entitlements = useEntitlementsContext();\n const labels = useBoxOfficeLabels();\n const model = trialBannerModel(entitlements, labels);\n\n if (!model) {\n return null;\n }\n\n return (\n <div className='boxoffice-banner'>\n <Message severity={model.severity}>{model.text}</Message>\n <PortalButton intent={PortalIntent.buy} label={labels.trialBanner.buy} size='small' />\n </div>\n );\n};\n"],"names":["TrialBanner","entitlements","useEntitlementsContext","labels","useBoxOfficeLabels","model","trialBannerModel","_jsxs","div","className","_jsx","Message","severity","text","PortalButton","intent","PortalIntent","buy","label","trialBanner","size"],"mappings":";;;;;;;;AAUA;;;UAIaA,WAAAA,GAAc,IAAA;AACvB,IAAA,MAAMC,YAAAA,GAAeC,sBAAAA,EAAAA;AACrB,IAAA,MAAMC,MAAAA,GAASC,kBAAAA,EAAAA;IACf,MAAMC,KAAAA,GAAQC,iBAAiBL,YAAAA,EAAcE,MAAAA,CAAAA;AAE7C,IAAA,IAAI,CAACE,KAAAA,EAAO;QACR,OAAO,IAAA;AACX,IAAA;AAEA,IAAA,qBACIE,IAAA,CAACC,KAAAA,EAAAA;QAAIC,SAAAA,EAAU,kBAAA;;0BACXC,GAAA,CAACC,OAAAA,EAAAA;AAAQC,gBAAAA,QAAAA,EAAUP,MAAMO,QAAQ;AAAGP,gBAAAA,QAAAA,EAAAA,KAAAA,CAAMQ;;0BAC1CH,GAAA,CAACI,YAAAA,EAAAA;AAAaC,gBAAAA,MAAAA,EAAQC,aAAaC,GAAG;gBAAEC,KAAAA,EAAOf,MAAAA,CAAOgB,WAAW,CAACF,GAAG;gBAAEG,IAAAA,EAAK;;;;AAGxF;;"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { SeatStanding, SuspensionCause } from '@cratis/showrunner.boxoffice';
|
|
2
|
+
import { Entitlements } from '../Entitlements/entitlementModel.js';
|
|
3
|
+
import { BoxOfficeLabels } from '../Labels/index.js';
|
|
4
|
+
export type BannerSeverity = 'info' | 'warn' | 'error';
|
|
5
|
+
export interface TrialBannerModel {
|
|
6
|
+
readonly severity: BannerSeverity;
|
|
7
|
+
readonly text: string;
|
|
8
|
+
}
|
|
9
|
+
export declare const trialWarningDays = 7;
|
|
10
|
+
export declare function trialBannerModel(entitlements: Entitlements, labels: BoxOfficeLabels): TrialBannerModel | undefined;
|
|
11
|
+
export declare function suspensionReason(cause: SuspensionCause | undefined, labels: BoxOfficeLabels): string;
|
|
12
|
+
export type NoLicenseReason = 'suspended' | 'trialClosed' | 'noSeat' | 'overCapacity';
|
|
13
|
+
export interface NoLicenseModel {
|
|
14
|
+
readonly reason: NoLicenseReason;
|
|
15
|
+
readonly title: string;
|
|
16
|
+
readonly text: string;
|
|
17
|
+
}
|
|
18
|
+
export declare function noLicenseModel(entitlements: Entitlements, seat: SeatStanding | undefined, labels: BoxOfficeLabels): NoLicenseModel | undefined;
|
|
19
|
+
//# sourceMappingURL=bannerModels.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bannerModels.d.ts","sourceRoot":"","sources":["../../../Banners/bannerModels.ts"],"names":[],"mappings":"AAGA,OAAO,EAAkB,YAAY,EAAc,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACzG,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AACnE,OAAO,EAAE,eAAe,EAAU,MAAM,oBAAoB,CAAC;AAG7D,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAKvD,MAAM,WAAW,gBAAgB;IAE7B,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAGlC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACzB;AAGD,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAQlC,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,eAAe,GAAG,gBAAgB,GAAG,SAAS,CAkBlH;AAQD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,eAAe,GAAG,SAAS,EAAE,MAAM,EAAE,eAAe,GAAG,MAAM,CAWpG;AAGD,MAAM,MAAM,eAAe,GAAG,WAAW,GAAG,aAAa,GAAG,QAAQ,GAAG,cAAc,CAAC;AAKtF,MAAM,WAAW,cAAc;IAE3B,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IAGjC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAGvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACzB;AAUD,wBAAgB,cAAc,CAAC,YAAY,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,GAAG,SAAS,EAAE,MAAM,EAAE,eAAe,GAAG,cAAc,GAAG,SAAS,CAsB9I"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { ReadOnlyReason, SeatStatus, SuspensionCause } 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
|
+
/** How many days before a trial ends the banner turns into a warning. */ const trialWarningDays = 7;
|
|
7
|
+
/**
|
|
8
|
+
* Works out what the trial banner says.
|
|
9
|
+
* @param entitlements What the tenant may do.
|
|
10
|
+
* @param labels The labels to show.
|
|
11
|
+
* @returns What to say; undefined when the tenant is not on a trial, or the trial is not what makes it read-only.
|
|
12
|
+
*/ function trialBannerModel(entitlements, labels) {
|
|
13
|
+
if (entitlements.state === 'trialClosed') {
|
|
14
|
+
return {
|
|
15
|
+
severity: 'error',
|
|
16
|
+
text: labels.trialBanner.closed
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
if (entitlements.state !== 'trial' || !entitlements.trial) {
|
|
20
|
+
return undefined;
|
|
21
|
+
}
|
|
22
|
+
const { daysLeft } = entitlements.trial;
|
|
23
|
+
if (daysLeft <= 0) {
|
|
24
|
+
return {
|
|
25
|
+
severity: 'warn',
|
|
26
|
+
text: labels.trialBanner.lastDay
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
return {
|
|
30
|
+
severity: daysLeft <= trialWarningDays ? 'warn' : 'info',
|
|
31
|
+
text: format(labels.trialBanner.running, {
|
|
32
|
+
days: daysLeft
|
|
33
|
+
})
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Says why the operator suspended a tenant.
|
|
38
|
+
* @param cause The cause the operator gave.
|
|
39
|
+
* @param labels The labels to show.
|
|
40
|
+
* @returns The reason, in words.
|
|
41
|
+
*/ function suspensionReason(cause, labels) {
|
|
42
|
+
switch(cause){
|
|
43
|
+
case SuspensionCause.trialEndedWithoutSeats:
|
|
44
|
+
return labels.suspension.trialEndedWithoutSeats;
|
|
45
|
+
case SuspensionCause.paymentOverdue:
|
|
46
|
+
return labels.suspension.paymentOverdue;
|
|
47
|
+
case SuspensionCause.administratorDecision:
|
|
48
|
+
return labels.suspension.administratorDecision;
|
|
49
|
+
default:
|
|
50
|
+
return '';
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Works out whether the user has a license, and what to tell them if not. The tenant being read-only comes first,
|
|
55
|
+
* because it holds for everyone in it.
|
|
56
|
+
* @param entitlements What the tenant may do.
|
|
57
|
+
* @param seat Where the user stands with the tenant's seats; nothing while it loads.
|
|
58
|
+
* @param labels The labels to show.
|
|
59
|
+
* @returns What to tell the user; undefined when they have a license, or it is not known yet.
|
|
60
|
+
*/ function noLicenseModel(entitlements, seat, labels) {
|
|
61
|
+
if (entitlements.isLoading) {
|
|
62
|
+
return undefined;
|
|
63
|
+
}
|
|
64
|
+
if (entitlements.readOnlyReason === ReadOnlyReason.tenantSuspended) {
|
|
65
|
+
return {
|
|
66
|
+
reason: 'suspended',
|
|
67
|
+
title: labels.noLicense.suspendedTitle,
|
|
68
|
+
text: labels.noLicense.suspended
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
if (entitlements.readOnlyReason === ReadOnlyReason.trialClosed) {
|
|
72
|
+
return {
|
|
73
|
+
reason: 'trialClosed',
|
|
74
|
+
title: labels.noLicense.trialClosedTitle,
|
|
75
|
+
text: labels.noLicense.trialClosed
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
if (seat?.status === SeatStatus.noSeat) {
|
|
79
|
+
return {
|
|
80
|
+
reason: 'noSeat',
|
|
81
|
+
title: labels.noLicense.noSeatTitle,
|
|
82
|
+
text: labels.noLicense.noSeat
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
if (seat?.status === SeatStatus.overCapacity) {
|
|
86
|
+
return {
|
|
87
|
+
reason: 'overCapacity',
|
|
88
|
+
title: labels.noLicense.overCapacityTitle,
|
|
89
|
+
text: labels.noLicense.overCapacity
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
return undefined;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
export { noLicenseModel, suspensionReason, trialBannerModel, trialWarningDays };
|
|
96
|
+
//# sourceMappingURL=bannerModels.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bannerModels.js","sources":["../../../Banners/bannerModels.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 { ReadOnlyReason, SeatStanding, SeatStatus, SuspensionCause } from '@cratis/showrunner.boxoffice';\nimport { Entitlements } from '../Entitlements/entitlementModel.js';\nimport { BoxOfficeLabels, format } from '../Labels/index.js';\n\n/** How loud a banner is. */\nexport type BannerSeverity = 'info' | 'warn' | 'error';\n\n/**\n * What the trial banner says.\n */\nexport interface TrialBannerModel {\n /** How loud the banner is. */\n readonly severity: BannerSeverity;\n\n /** What it says. */\n readonly text: string;\n}\n\n/** How many days before a trial ends the banner turns into a warning. */\nexport const trialWarningDays = 7;\n\n/**\n * Works out what the trial banner says.\n * @param entitlements What the tenant may do.\n * @param labels The labels to show.\n * @returns What to say; undefined when the tenant is not on a trial, or the trial is not what makes it read-only.\n */\nexport function trialBannerModel(entitlements: Entitlements, labels: BoxOfficeLabels): TrialBannerModel | undefined {\n if (entitlements.state === 'trialClosed') {\n return { severity: 'error', text: labels.trialBanner.closed };\n }\n\n if (entitlements.state !== 'trial' || !entitlements.trial) {\n return undefined;\n }\n\n const { daysLeft } = entitlements.trial;\n if (daysLeft <= 0) {\n return { severity: 'warn', text: labels.trialBanner.lastDay };\n }\n\n return {\n severity: daysLeft <= trialWarningDays ? 'warn' : 'info',\n text: format(labels.trialBanner.running, { days: daysLeft })\n };\n}\n\n/**\n * Says why the operator suspended a tenant.\n * @param cause The cause the operator gave.\n * @param labels The labels to show.\n * @returns The reason, in words.\n */\nexport function suspensionReason(cause: SuspensionCause | undefined, labels: BoxOfficeLabels): string {\n switch (cause) {\n case SuspensionCause.trialEndedWithoutSeats:\n return labels.suspension.trialEndedWithoutSeats;\n case SuspensionCause.paymentOverdue:\n return labels.suspension.paymentOverdue;\n case SuspensionCause.administratorDecision:\n return labels.suspension.administratorDecision;\n default:\n return '';\n }\n}\n\n/** Why a user is told they have no license. */\nexport type NoLicenseReason = 'suspended' | 'trialClosed' | 'noSeat' | 'overCapacity';\n\n/**\n * What a user without a license is told.\n */\nexport interface NoLicenseModel {\n /** Why the user has no license. */\n readonly reason: NoLicenseReason;\n\n /** The title. */\n readonly title: string;\n\n /** What to do about it. */\n readonly text: string;\n}\n\n/**\n * Works out whether the user has a license, and what to tell them if not. The tenant being read-only comes first,\n * because it holds for everyone in it.\n * @param entitlements What the tenant may do.\n * @param seat Where the user stands with the tenant's seats; nothing while it loads.\n * @param labels The labels to show.\n * @returns What to tell the user; undefined when they have a license, or it is not known yet.\n */\nexport function noLicenseModel(entitlements: Entitlements, seat: SeatStanding | undefined, labels: BoxOfficeLabels): NoLicenseModel | undefined {\n if (entitlements.isLoading) {\n return undefined;\n }\n\n if (entitlements.readOnlyReason === ReadOnlyReason.tenantSuspended) {\n return { reason: 'suspended', title: labels.noLicense.suspendedTitle, text: labels.noLicense.suspended };\n }\n\n if (entitlements.readOnlyReason === ReadOnlyReason.trialClosed) {\n return { reason: 'trialClosed', title: labels.noLicense.trialClosedTitle, text: labels.noLicense.trialClosed };\n }\n\n if (seat?.status === SeatStatus.noSeat) {\n return { reason: 'noSeat', title: labels.noLicense.noSeatTitle, text: labels.noLicense.noSeat };\n }\n\n if (seat?.status === SeatStatus.overCapacity) {\n return { reason: 'overCapacity', title: labels.noLicense.overCapacityTitle, text: labels.noLicense.overCapacity };\n }\n\n return undefined;\n}\n"],"names":["trialWarningDays","trialBannerModel","entitlements","labels","state","severity","text","trialBanner","closed","trial","undefined","daysLeft","lastDay","format","running","days","suspensionReason","cause","SuspensionCause","trialEndedWithoutSeats","suspension","paymentOverdue","administratorDecision","noLicenseModel","seat","isLoading","readOnlyReason","ReadOnlyReason","tenantSuspended","reason","title","noLicense","suspendedTitle","suspended","trialClosed","trialClosedTitle","status","SeatStatus","noSeat","noSeatTitle","overCapacity","overCapacityTitle"],"mappings":";;;AAAA;AACA;AAoBA,0EACO,MAAMA,gBAAAA,GAAmB;AAEhC;;;;;AAKC,IACM,SAASC,gBAAAA,CAAiBC,YAA0B,EAAEC,MAAuB,EAAA;IAChF,IAAID,YAAAA,CAAaE,KAAK,KAAK,aAAA,EAAe;QACtC,OAAO;YAAEC,QAAAA,EAAU,OAAA;YAASC,IAAAA,EAAMH,MAAAA,CAAOI,WAAW,CAACC;AAAO,SAAA;AAChE,IAAA;AAEA,IAAA,IAAIN,aAAaE,KAAK,KAAK,WAAW,CAACF,YAAAA,CAAaO,KAAK,EAAE;QACvD,OAAOC,SAAAA;AACX,IAAA;AAEA,IAAA,MAAM,EAAEC,QAAQ,EAAE,GAAGT,aAAaO,KAAK;AACvC,IAAA,IAAIE,YAAY,CAAA,EAAG;QACf,OAAO;YAAEN,QAAAA,EAAU,MAAA;YAAQC,IAAAA,EAAMH,MAAAA,CAAOI,WAAW,CAACK;AAAQ,SAAA;AAChE,IAAA;IAEA,OAAO;QACHP,QAAAA,EAAUM,QAAAA,IAAYX,mBAAmB,MAAA,GAAS,MAAA;AAClDM,QAAAA,IAAAA,EAAMO,MAAAA,CAAOV,MAAAA,CAAOI,WAAW,CAACO,OAAO,EAAE;YAAEC,IAAAA,EAAMJ;AAAS,SAAA;AAC9D,KAAA;AACJ;AAEA;;;;;AAKC,IACM,SAASK,gBAAAA,CAAiBC,KAAkC,EAAEd,MAAuB,EAAA;IACxF,OAAQc,KAAAA;AACJ,QAAA,KAAKC,gBAAgBC,sBAAsB;YACvC,OAAOhB,MAAAA,CAAOiB,UAAU,CAACD,sBAAsB;AACnD,QAAA,KAAKD,gBAAgBG,cAAc;YAC/B,OAAOlB,MAAAA,CAAOiB,UAAU,CAACC,cAAc;AAC3C,QAAA,KAAKH,gBAAgBI,qBAAqB;YACtC,OAAOnB,MAAAA,CAAOiB,UAAU,CAACE,qBAAqB;AAClD,QAAA;YACI,OAAO,EAAA;AACf;AACJ;AAmBA;;;;;;;AAOC,IACM,SAASC,cAAAA,CAAerB,YAA0B,EAAEsB,IAA8B,EAAErB,MAAuB,EAAA;IAC9G,IAAID,YAAAA,CAAauB,SAAS,EAAE;QACxB,OAAOf,SAAAA;AACX,IAAA;AAEA,IAAA,IAAIR,YAAAA,CAAawB,cAAc,KAAKC,cAAAA,CAAeC,eAAe,EAAE;QAChE,OAAO;YAAEC,MAAAA,EAAQ,WAAA;YAAaC,KAAAA,EAAO3B,MAAAA,CAAO4B,SAAS,CAACC,cAAc;YAAE1B,IAAAA,EAAMH,MAAAA,CAAO4B,SAAS,CAACE;AAAU,SAAA;AAC3G,IAAA;AAEA,IAAA,IAAI/B,YAAAA,CAAawB,cAAc,KAAKC,cAAAA,CAAeO,WAAW,EAAE;QAC5D,OAAO;YAAEL,MAAAA,EAAQ,aAAA;YAAeC,KAAAA,EAAO3B,MAAAA,CAAO4B,SAAS,CAACI,gBAAgB;YAAE7B,IAAAA,EAAMH,MAAAA,CAAO4B,SAAS,CAACG;AAAY,SAAA;AACjH,IAAA;AAEA,IAAA,IAAIV,IAAAA,EAAMY,MAAAA,KAAWC,UAAAA,CAAWC,MAAM,EAAE;QACpC,OAAO;YAAET,MAAAA,EAAQ,QAAA;YAAUC,KAAAA,EAAO3B,MAAAA,CAAO4B,SAAS,CAACQ,WAAW;YAAEjC,IAAAA,EAAMH,MAAAA,CAAO4B,SAAS,CAACO;AAAO,SAAA;AAClG,IAAA;AAEA,IAAA,IAAId,IAAAA,EAAMY,MAAAA,KAAWC,UAAAA,CAAWG,YAAY,EAAE;QAC1C,OAAO;YAAEX,MAAAA,EAAQ,cAAA;YAAgBC,KAAAA,EAAO3B,MAAAA,CAAO4B,SAAS,CAACU,iBAAiB;YAAEnC,IAAAA,EAAMH,MAAAA,CAAO4B,SAAS,CAACS;AAAa,SAAA;AACpH,IAAA;IAEA,OAAO9B,SAAAA;AACX;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../Banners/index.ts"],"names":[],"mappings":"AAGA,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../Banners/index.ts"],"names":[],"mappings":"AAGA,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EntitlementsContext.d.ts","sourceRoot":"","sources":["../../../Entitlements/EntitlementsContext.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAkB,MAAM,uBAAuB,CAAC;AAMrE,eAAO,MAAM,mBAAmB,uCAAyD,CAAC;AAM1F,eAAO,MAAM,sBAAsB,QAAO,YAA+C,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { createContext, useContext } from 'react';
|
|
2
|
+
import { entitlementsOf } from './entitlementModel.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
|
+
* The React context {@link BoxOfficeProvider} provides the entitlements through. Without a provider nothing is
|
|
8
|
+
* known, so nothing that belongs to a module is shown.
|
|
9
|
+
*/ const EntitlementsContext = createContext(entitlementsOf(undefined));
|
|
10
|
+
/**
|
|
11
|
+
* Gets what the tenant may do.
|
|
12
|
+
* @returns The {@link Entitlements}.
|
|
13
|
+
*/ const useEntitlementsContext = ()=>useContext(EntitlementsContext);
|
|
14
|
+
|
|
15
|
+
export { EntitlementsContext, useEntitlementsContext };
|
|
16
|
+
//# sourceMappingURL=EntitlementsContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EntitlementsContext.js","sources":["../../../Entitlements/EntitlementsContext.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 { createContext, useContext } from 'react';\nimport { Entitlements, entitlementsOf } from './entitlementModel.js';\n\n/**\n * The React context {@link BoxOfficeProvider} provides the entitlements through. Without a provider nothing is\n * known, so nothing that belongs to a module is shown.\n */\nexport const EntitlementsContext = createContext<Entitlements>(entitlementsOf(undefined));\n\n/**\n * Gets what the tenant may do.\n * @returns The {@link Entitlements}.\n */\nexport const useEntitlementsContext = (): Entitlements => useContext(EntitlementsContext);\n"],"names":["EntitlementsContext","createContext","entitlementsOf","undefined","useEntitlementsContext","useContext"],"mappings":";;;AAAA;AACA;AAKA;;;AAGC,IACM,MAAMA,mBAAAA,GAAsBC,aAAAA,CAA4BC,eAAeC,SAAAA,CAAAA;AAE9E;;;AAGC,IACM,MAAMC,sBAAAA,GAAyB,IAAoBC,WAAWL,mBAAAA;;"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
export interface RequiresModuleProps {
|
|
3
|
+
module: string;
|
|
4
|
+
mode?: 'hide' | 'explain';
|
|
5
|
+
fallback?: ReactNode;
|
|
6
|
+
children?: ReactNode;
|
|
7
|
+
}
|
|
8
|
+
export declare const RequiresModule: ({ module, mode, fallback, children }: RequiresModuleProps) => import("react").JSX.Element | null;
|
|
9
|
+
//# sourceMappingURL=RequiresModule.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RequiresModule.d.ts","sourceRoot":"","sources":["../../../Entitlements/RequiresModule.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AASlC,MAAM,WAAW,mBAAmB;IAEhC,MAAM,EAAE,MAAM,CAAC;IAMf,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAG1B,QAAQ,CAAC,EAAE,SAAS,CAAC;IAGrB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACxB;AAOD,eAAO,MAAM,cAAc,GAAI,sCAA+C,mBAAmB,uCA+BhG,CAAC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
|
|
2
|
+
import { Message } from '@cratis/components/Display';
|
|
3
|
+
import { PortalIntent } from '@cratis/showrunner.boxoffice';
|
|
4
|
+
import { PortalButton } from '../Portal/PortalButton.js';
|
|
5
|
+
import { useBoxOfficeLabels } from '../Provider/BoxOfficeContext.js';
|
|
6
|
+
import { useEntitlementsContext } from './EntitlementsContext.js';
|
|
7
|
+
import { requiresModuleModel } from './requiresModuleModel.js';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Shows its content only when the tenant has the module, in full or on trial. Nothing is shown while the entitlements
|
|
11
|
+
* load, so the content never flashes up and is taken away. The backend refuses the module's commands and queries on its
|
|
12
|
+
* own; this is what keeps the user from meeting the refusal.
|
|
13
|
+
*/ const RequiresModule = ({ module, mode = 'hide', fallback, children })=>{
|
|
14
|
+
const entitlements = useEntitlementsContext();
|
|
15
|
+
const labels = useBoxOfficeLabels();
|
|
16
|
+
if (entitlements.isLoading) {
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
const model = requiresModuleModel(entitlements, module, labels);
|
|
20
|
+
if (model.hasModule) {
|
|
21
|
+
return /*#__PURE__*/ jsx(Fragment, {
|
|
22
|
+
children: children
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
if (mode === 'hide') {
|
|
26
|
+
return /*#__PURE__*/ jsx(Fragment, {
|
|
27
|
+
children: fallback
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
return /*#__PURE__*/ jsxs("div", {
|
|
31
|
+
className: "boxoffice-requires-module",
|
|
32
|
+
children: [
|
|
33
|
+
/*#__PURE__*/ jsx(Message, {
|
|
34
|
+
severity: "info",
|
|
35
|
+
children: /*#__PURE__*/ jsxs("div", {
|
|
36
|
+
className: "boxoffice-requires-module__text",
|
|
37
|
+
children: [
|
|
38
|
+
/*#__PURE__*/ jsx("strong", {
|
|
39
|
+
children: model.title
|
|
40
|
+
}),
|
|
41
|
+
/*#__PURE__*/ jsx("span", {
|
|
42
|
+
children: model.text
|
|
43
|
+
})
|
|
44
|
+
]
|
|
45
|
+
})
|
|
46
|
+
}),
|
|
47
|
+
/*#__PURE__*/ jsxs("div", {
|
|
48
|
+
className: "boxoffice-requires-module__actions",
|
|
49
|
+
children: [
|
|
50
|
+
model.canTry && /*#__PURE__*/ jsx(PortalButton, {
|
|
51
|
+
intent: PortalIntent.try,
|
|
52
|
+
label: labels.requiresModule.try,
|
|
53
|
+
variant: "outline"
|
|
54
|
+
}),
|
|
55
|
+
/*#__PURE__*/ jsx(PortalButton, {
|
|
56
|
+
intent: PortalIntent.buy,
|
|
57
|
+
label: labels.requiresModule.buy
|
|
58
|
+
})
|
|
59
|
+
]
|
|
60
|
+
})
|
|
61
|
+
]
|
|
62
|
+
});
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
export { RequiresModule };
|
|
66
|
+
//# sourceMappingURL=RequiresModule.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RequiresModule.js","sources":["../../../Entitlements/RequiresModule.tsx"],"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 { Message } from '@cratis/components/Display';\nimport { PortalIntent } from '@cratis/showrunner.boxoffice';\nimport { ReactNode } from 'react';\nimport { PortalButton } from '../Portal/PortalButton.js';\nimport { useBoxOfficeLabels } from '../Provider/BoxOfficeContext.js';\nimport { useEntitlementsContext } from './EntitlementsContext.js';\nimport { requiresModuleModel } from './requiresModuleModel.js';\n\n/**\n * Props for {@link RequiresModule}.\n */\nexport interface RequiresModuleProps {\n /** The module whose content this is. */\n module: string;\n\n /**\n * What to do when the tenant does not have the module: `hide` shows the fallback, which is nothing unless given;\n * `explain` says why it is not there, and offers to try or buy it. Defaults to `hide`.\n */\n mode?: 'hide' | 'explain';\n\n /** What to show instead of the content in `hide` mode. Nothing when not given. */\n fallback?: ReactNode;\n\n /** The content of the module. */\n children?: ReactNode;\n}\n\n/**\n * Shows its content only when the tenant has the module, in full or on trial. Nothing is shown while the entitlements\n * load, so the content never flashes up and is taken away. The backend refuses the module's commands and queries on its\n * own; this is what keeps the user from meeting the refusal.\n */\nexport const RequiresModule = ({ module, mode = 'hide', fallback, children }: RequiresModuleProps) => {\n const entitlements = useEntitlementsContext();\n const labels = useBoxOfficeLabels();\n\n if (entitlements.isLoading) {\n return null;\n }\n\n const model = requiresModuleModel(entitlements, module, labels);\n if (model.hasModule) {\n return <>{children}</>;\n }\n\n if (mode === 'hide') {\n return <>{fallback}</>;\n }\n\n return (\n <div className='boxoffice-requires-module'>\n <Message severity='info'>\n <div className='boxoffice-requires-module__text'>\n <strong>{model.title}</strong>\n <span>{model.text}</span>\n </div>\n </Message>\n <div className='boxoffice-requires-module__actions'>\n {model.canTry && <PortalButton intent={PortalIntent.try} label={labels.requiresModule.try} variant='outline' />}\n <PortalButton intent={PortalIntent.buy} label={labels.requiresModule.buy} />\n </div>\n </div>\n );\n};\n"],"names":["RequiresModule","module","mode","fallback","children","entitlements","useEntitlementsContext","labels","useBoxOfficeLabels","isLoading","model","requiresModuleModel","hasModule","_jsx","_Fragment","_jsxs","div","className","Message","severity","strong","title","span","text","canTry","PortalButton","intent","PortalIntent","try","label","requiresModule","variant","buy"],"mappings":";;;;;;;;AA+BA;;;;AAIC,IACM,MAAMA,cAAAA,GAAiB,CAAC,EAAEC,MAAM,EAAEC,IAAAA,GAAO,MAAM,EAAEC,QAAQ,EAAEC,QAAQ,EAAuB,GAAA;AAC7F,IAAA,MAAMC,YAAAA,GAAeC,sBAAAA,EAAAA;AACrB,IAAA,MAAMC,MAAAA,GAASC,kBAAAA,EAAAA;IAEf,IAAIH,YAAAA,CAAaI,SAAS,EAAE;QACxB,OAAO,IAAA;AACX,IAAA;IAEA,MAAMC,KAAAA,GAAQC,mBAAAA,CAAoBN,YAAAA,EAAcJ,MAAAA,EAAQM,MAAAA,CAAAA;IACxD,IAAIG,KAAAA,CAAME,SAAS,EAAE;QACjB,qBAAOC,GAAA,CAAAC,QAAA,EAAA;AAAGV,YAAAA,QAAAA,EAAAA;;AACd,IAAA;AAEA,IAAA,IAAIF,SAAS,MAAA,EAAQ;QACjB,qBAAOW,GAAA,CAAAC,QAAA,EAAA;AAAGX,YAAAA,QAAAA,EAAAA;;AACd,IAAA;AAEA,IAAA,qBACIY,IAAA,CAACC,KAAAA,EAAAA;QAAIC,SAAAA,EAAU,2BAAA;;0BACXJ,GAAA,CAACK,OAAAA,EAAAA;gBAAQC,QAAAA,EAAS,MAAA;AACd,gBAAA,QAAA,gBAAAJ,IAAA,CAACC,KAAAA,EAAAA;oBAAIC,SAAAA,EAAU,iCAAA;;sCACXJ,GAAA,CAACO,QAAAA,EAAAA;AAAQV,4BAAAA,QAAAA,EAAAA,KAAAA,CAAMW;;sCACfR,GAAA,CAACS,MAAAA,EAAAA;AAAMZ,4BAAAA,QAAAA,EAAAA,KAAAA,CAAMa;;;;;0BAGrBR,IAAA,CAACC,KAAAA,EAAAA;gBAAIC,SAAAA,EAAU,oCAAA;;oBACVP,KAAAA,CAAMc,MAAM,kBAAIX,GAAA,CAACY,YAAAA,EAAAA;AAAaC,wBAAAA,MAAAA,EAAQC,aAAaC,GAAG;wBAAEC,KAAAA,EAAOtB,MAAAA,CAAOuB,cAAc,CAACF,GAAG;wBAAEG,OAAAA,EAAQ;;kCACnGlB,GAAA,CAACY,YAAAA,EAAAA;AAAaC,wBAAAA,MAAAA,EAAQC,aAAaK,GAAG;wBAAEH,KAAAA,EAAOtB,MAAAA,CAAOuB,cAAc,CAACE;;;;;;AAIrF;;"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { DateOnly } from '@cratis/fundamentals';
|
|
2
|
+
import { EntitlementSummary, ModuleAccess, ModuleStanding, ReadOnlyReason } from '@cratis/showrunner.boxoffice';
|
|
3
|
+
export type LicenseState = 'loading' | 'suspended' | 'trialClosed' | 'trial' | 'licensed' | 'unlicensed';
|
|
4
|
+
export interface TrialStanding {
|
|
5
|
+
readonly ends: Date;
|
|
6
|
+
readonly daysLeft: number;
|
|
7
|
+
readonly isClosed: boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface Entitlements {
|
|
10
|
+
readonly isLoading: boolean;
|
|
11
|
+
readonly state: LicenseState;
|
|
12
|
+
readonly isReadOnly: boolean;
|
|
13
|
+
readonly readOnlyReason: ReadOnlyReason;
|
|
14
|
+
readonly seats: number;
|
|
15
|
+
readonly trial?: TrialStanding;
|
|
16
|
+
readonly canOpenPortal: boolean;
|
|
17
|
+
readonly modules: readonly ModuleStanding[];
|
|
18
|
+
has(module: string): boolean;
|
|
19
|
+
accessTo(module: string): ModuleAccess;
|
|
20
|
+
standingOf(module: string): ModuleStanding | undefined;
|
|
21
|
+
}
|
|
22
|
+
export declare function toDate(day: DateOnly | Date | string | undefined): Date | undefined;
|
|
23
|
+
export declare function daysBetween(from: Date, to: Date): number;
|
|
24
|
+
export declare function entitlementsOf(summary: EntitlementSummary | undefined, today?: Date): Entitlements;
|
|
25
|
+
//# sourceMappingURL=entitlementModel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entitlementModel.d.ts","sourceRoot":"","sources":["../../../Entitlements/entitlementModel.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAYhH,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,WAAW,GAAG,aAAa,GAAG,OAAO,GAAG,UAAU,GAAG,YAAY,CAAC;AAKzG,MAAM,WAAW,aAAa;IAE1B,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IAGpB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAG1B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC9B;AAKD,MAAM,WAAW,YAAY;IAEzB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAG5B,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAG7B,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAG7B,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IAGxC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAGvB,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC;IAG/B,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAGhC,QAAQ,CAAC,OAAO,EAAE,SAAS,cAAc,EAAE,CAAC;IAO5C,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IAO7B,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CAAC;IAOvC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAAC;CAC1D;AASD,wBAAgB,MAAM,CAAC,GAAG,EAAE,QAAQ,GAAG,IAAI,GAAG,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,SAAS,CAWlF;AAQD,wBAAgB,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,GAAG,MAAM,CAIxD;AAwBD,wBAAgB,cAAc,CAAC,OAAO,EAAE,kBAAkB,GAAG,SAAS,EAAE,KAAK,GAAE,IAAiB,GAAG,YAAY,CAsC9G"}
|