@cratis/showrunner.boxoffice.react 0.0.0-stage → 1.9.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 +71 -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,24 @@
|
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { CurrentUsage } from '@cratis/showrunner.boxoffice';
|
|
3
|
+
import { useBoxOfficeContext } from '../Provider/BoxOfficeContext.js';
|
|
4
|
+
import { meterUsageModel } from './usageModels.js';
|
|
5
|
+
import { UsageView } from './UsageView.js';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* The usage page: what the tenant has used of each meter in the period it is in, against its allowance and budget. For
|
|
9
|
+
* the people who maintain the product; the backend refuses everyone else. Render it inside a
|
|
10
|
+
* {@link BoxOfficeProvider}.
|
|
11
|
+
*/ const UsagePage = ()=>{
|
|
12
|
+
const { labels, locale } = useBoxOfficeContext();
|
|
13
|
+
const [usage] = CurrentUsage.use();
|
|
14
|
+
const meters = usage.isSuccess ? (usage.data ?? []).map((standing)=>meterUsageModel(standing, labels, locale)) : [];
|
|
15
|
+
return /*#__PURE__*/ jsx(UsageView, {
|
|
16
|
+
meters: meters,
|
|
17
|
+
isLoading: usage.isPerforming && !usage.isSuccess,
|
|
18
|
+
isUnauthorized: !usage.isAuthorized,
|
|
19
|
+
hasFailed: !usage.isPerforming && usage.isAuthorized && !usage.isSuccess
|
|
20
|
+
});
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
export { UsagePage };
|
|
24
|
+
//# sourceMappingURL=UsagePage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UsagePage.js","sources":["../../../Usage/UsagePage.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 { CurrentUsage } from '@cratis/showrunner.boxoffice';\nimport { useBoxOfficeContext } from '../Provider/BoxOfficeContext.js';\nimport { meterUsageModel } from './usageModels.js';\nimport { UsageView } from './UsageView.js';\n\n/**\n * The usage page: what the tenant has used of each meter in the period it is in, against its allowance and budget. For\n * the people who maintain the product; the backend refuses everyone else. Render it inside a\n * {@link BoxOfficeProvider}.\n */\nexport const UsagePage = () => {\n const { labels, locale } = useBoxOfficeContext();\n const [usage] = CurrentUsage.use();\n const meters = usage.isSuccess ? (usage.data ?? []).map(standing => meterUsageModel(standing, labels, locale)) : [];\n\n return (\n <UsageView\n meters={meters}\n isLoading={usage.isPerforming && !usage.isSuccess}\n isUnauthorized={!usage.isAuthorized}\n hasFailed={!usage.isPerforming && usage.isAuthorized && !usage.isSuccess} />\n );\n};\n"],"names":["UsagePage","labels","locale","useBoxOfficeContext","usage","CurrentUsage","use","meters","isSuccess","data","map","standing","meterUsageModel","_jsx","UsageView","isLoading","isPerforming","isUnauthorized","isAuthorized","hasFailed"],"mappings":";;;;;;AAQA;;;;UAKaA,SAAAA,GAAY,IAAA;AACrB,IAAA,MAAM,EAAEC,MAAM,EAAEC,MAAM,EAAE,GAAGC,mBAAAA,EAAAA;AAC3B,IAAA,MAAM,CAACC,KAAAA,CAAM,GAAGC,YAAAA,CAAaC,GAAG,EAAA;IAChC,MAAMC,MAAAA,GAASH,MAAMI,SAAS,GAAG,CAACJ,KAAAA,CAAMK,IAAI,IAAI,EAAE,EAAEC,GAAG,CAACC,CAAAA,QAAAA,GAAYC,gBAAgBD,QAAAA,EAAUV,MAAAA,EAAQC,WAAW,EAAE;AAEnH,IAAA,qBACIW,GAAA,CAACC,SAAAA,EAAAA;QACGP,MAAAA,EAAQA,MAAAA;AACRQ,QAAAA,SAAAA,EAAWX,KAAAA,CAAMY,YAAY,IAAI,CAACZ,MAAMI,SAAS;QACjDS,cAAAA,EAAgB,CAACb,MAAMc,YAAY;QACnCC,SAAAA,EAAW,CAACf,MAAMY,YAAY,IAAIZ,MAAMc,YAAY,IAAI,CAACd,KAAAA,CAAMI;;AAE3E;;"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { MeterUsageModel } from './usageModels.js';
|
|
2
|
+
export interface UsageViewProps {
|
|
3
|
+
meters: readonly MeterUsageModel[];
|
|
4
|
+
isLoading?: boolean;
|
|
5
|
+
isUnauthorized?: boolean;
|
|
6
|
+
hasFailed?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare const UsageView: ({ meters, isLoading, isUnauthorized, hasFailed }: UsageViewProps) => import("react").JSX.Element;
|
|
9
|
+
//# sourceMappingURL=UsageView.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UsageView.d.ts","sourceRoot":"","sources":["../../../Usage/UsageView.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,eAAe,EAAc,MAAM,kBAAkB,CAAC;AAK/D,MAAM,WAAW,cAAc;IAE3B,MAAM,EAAE,SAAS,eAAe,EAAE,CAAC;IAGnC,SAAS,CAAC,EAAE,OAAO,CAAC;IAGpB,cAAc,CAAC,EAAE,OAAO,CAAC;IAGzB,SAAS,CAAC,EAAE,OAAO,CAAC;CACvB;AAiBD,eAAO,MAAM,SAAS,GAAI,kDAAkD,cAAc,gCAoDzF,CAAC"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { DataTableCore, Column, DataTableStatus } from '@cratis/components/DataTables';
|
|
3
|
+
import { ProgressBar, Tag } from '@cratis/components/Display';
|
|
4
|
+
import { format } from '../Labels/format.js';
|
|
5
|
+
import { useBoxOfficeContext } from '../Provider/BoxOfficeContext.js';
|
|
6
|
+
|
|
7
|
+
const statusOf = (isLoading, isUnauthorized, hasFailed)=>{
|
|
8
|
+
if (isUnauthorized) {
|
|
9
|
+
return DataTableStatus.Unauthorized;
|
|
10
|
+
}
|
|
11
|
+
if (hasFailed) {
|
|
12
|
+
return DataTableStatus.Failed;
|
|
13
|
+
}
|
|
14
|
+
return isLoading ? DataTableStatus.Loading : DataTableStatus.Ready;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* What a tenant has used of each meter in the period it is in, against its allowance and budget.
|
|
18
|
+
*/ const UsageView = ({ meters, isLoading, isUnauthorized, hasFailed })=>{
|
|
19
|
+
const { labels } = useBoxOfficeContext();
|
|
20
|
+
const levelText = {
|
|
21
|
+
ok: undefined,
|
|
22
|
+
warning: undefined,
|
|
23
|
+
atBudget: labels.usage.atBudget,
|
|
24
|
+
atAllowance: labels.usage.atAllowance
|
|
25
|
+
};
|
|
26
|
+
const showsConcurrency = meters.some((_)=>_.standing.hasConcurrencyLimit);
|
|
27
|
+
return /*#__PURE__*/ jsxs("section", {
|
|
28
|
+
className: "boxoffice-usage",
|
|
29
|
+
"aria-labelledby": "boxoffice-usage-title",
|
|
30
|
+
children: [
|
|
31
|
+
/*#__PURE__*/ jsx("header", {
|
|
32
|
+
className: "boxoffice-page__header",
|
|
33
|
+
children: /*#__PURE__*/ jsx("h2", {
|
|
34
|
+
id: "boxoffice-usage-title",
|
|
35
|
+
className: "boxoffice-page__title",
|
|
36
|
+
children: labels.usage.title
|
|
37
|
+
})
|
|
38
|
+
}),
|
|
39
|
+
/*#__PURE__*/ jsxs(DataTableCore, {
|
|
40
|
+
data: [
|
|
41
|
+
...meters
|
|
42
|
+
],
|
|
43
|
+
dataKey: "standing.meter",
|
|
44
|
+
status: statusOf(isLoading, isUnauthorized, hasFailed),
|
|
45
|
+
emptyMessage: labels.usage.empty,
|
|
46
|
+
loadingMessage: labels.common.loading,
|
|
47
|
+
failureMessage: labels.common.failed,
|
|
48
|
+
unauthorizedMessage: labels.common.unauthorized,
|
|
49
|
+
children: [
|
|
50
|
+
/*#__PURE__*/ jsx(Column, {
|
|
51
|
+
header: labels.usage.meterColumn,
|
|
52
|
+
body: (meter)=>/*#__PURE__*/ jsxs("span", {
|
|
53
|
+
className: "boxoffice-usage__meter",
|
|
54
|
+
children: [
|
|
55
|
+
/*#__PURE__*/ jsx("strong", {
|
|
56
|
+
children: meter.standing.name
|
|
57
|
+
}),
|
|
58
|
+
/*#__PURE__*/ jsx("span", {
|
|
59
|
+
className: "boxoffice-usage__period",
|
|
60
|
+
children: meter.periodText
|
|
61
|
+
})
|
|
62
|
+
]
|
|
63
|
+
})
|
|
64
|
+
}),
|
|
65
|
+
/*#__PURE__*/ jsx(Column, {
|
|
66
|
+
header: labels.usage.usedColumn,
|
|
67
|
+
body: (meter)=>/*#__PURE__*/ jsxs("span", {
|
|
68
|
+
className: `boxoffice-usage__used boxoffice-usage__used--${meter.level}`,
|
|
69
|
+
children: [
|
|
70
|
+
/*#__PURE__*/ jsx("span", {
|
|
71
|
+
children: meter.usedText
|
|
72
|
+
}),
|
|
73
|
+
meter.standing.allowance > 0 && /*#__PURE__*/ jsx(ProgressBar, {
|
|
74
|
+
value: meter.percent,
|
|
75
|
+
showValue: false,
|
|
76
|
+
"aria-label": format(labels.usage.progress, {
|
|
77
|
+
meter: meter.standing.name
|
|
78
|
+
})
|
|
79
|
+
}),
|
|
80
|
+
levelText[meter.level] && /*#__PURE__*/ jsx(Tag, {
|
|
81
|
+
severity: meter.level === 'atAllowance' ? 'danger' : 'warn',
|
|
82
|
+
value: levelText[meter.level]
|
|
83
|
+
}),
|
|
84
|
+
/*#__PURE__*/ jsx("span", {
|
|
85
|
+
className: "boxoffice-usage__overage",
|
|
86
|
+
children: meter.overageText
|
|
87
|
+
})
|
|
88
|
+
]
|
|
89
|
+
})
|
|
90
|
+
}),
|
|
91
|
+
/*#__PURE__*/ jsx(Column, {
|
|
92
|
+
header: labels.usage.budgetColumn,
|
|
93
|
+
body: (meter)=>meter.budgetText
|
|
94
|
+
}),
|
|
95
|
+
showsConcurrency && /*#__PURE__*/ jsx(Column, {
|
|
96
|
+
header: labels.usage.concurrencyColumn,
|
|
97
|
+
body: (meter)=>meter.concurrencyText
|
|
98
|
+
})
|
|
99
|
+
]
|
|
100
|
+
})
|
|
101
|
+
]
|
|
102
|
+
});
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
export { UsageView };
|
|
106
|
+
//# sourceMappingURL=UsageView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UsageView.js","sources":["../../../Usage/UsageView.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 { Column, DataTableCore, DataTableStatus } from '@cratis/components/DataTables';\nimport { ProgressBar, Tag } from '@cratis/components/Display';\nimport { format } from '../Labels/index.js';\nimport { useBoxOfficeContext } from '../Provider/BoxOfficeContext.js';\nimport { MeterUsageModel, UsageLevel } from './usageModels.js';\n\n/**\n * Props for {@link UsageView}.\n */\nexport interface UsageViewProps {\n /** How each meter stands. */\n meters: readonly MeterUsageModel[];\n\n /** Whether the usage is still loading. */\n isLoading?: boolean;\n\n /** Whether the usage could not be loaded because the user may not see it. */\n isUnauthorized?: boolean;\n\n /** Whether the usage could not be loaded. */\n hasFailed?: boolean;\n}\n\nconst statusOf = (isLoading?: boolean, isUnauthorized?: boolean, hasFailed?: boolean) => {\n if (isUnauthorized) {\n return DataTableStatus.Unauthorized;\n }\n\n if (hasFailed) {\n return DataTableStatus.Failed;\n }\n\n return isLoading ? DataTableStatus.Loading : DataTableStatus.Ready;\n};\n\n/**\n * What a tenant has used of each meter in the period it is in, against its allowance and budget.\n */\nexport const UsageView = ({ meters, isLoading, isUnauthorized, hasFailed }: UsageViewProps) => {\n const { labels } = useBoxOfficeContext();\n const levelText: Record<UsageLevel, string | undefined> = {\n ok: undefined,\n warning: undefined,\n atBudget: labels.usage.atBudget,\n atAllowance: labels.usage.atAllowance\n };\n const showsConcurrency = meters.some(_ => _.standing.hasConcurrencyLimit);\n\n return (\n <section className='boxoffice-usage' aria-labelledby='boxoffice-usage-title'>\n <header className='boxoffice-page__header'>\n <h2 id='boxoffice-usage-title' className='boxoffice-page__title'>{labels.usage.title}</h2>\n </header>\n\n <DataTableCore<MeterUsageModel>\n data={[...meters]}\n dataKey='standing.meter'\n status={statusOf(isLoading, isUnauthorized, hasFailed)}\n emptyMessage={labels.usage.empty}\n loadingMessage={labels.common.loading}\n failureMessage={labels.common.failed}\n unauthorizedMessage={labels.common.unauthorized}>\n <Column<MeterUsageModel>\n header={labels.usage.meterColumn}\n body={meter => (\n <span className='boxoffice-usage__meter'>\n <strong>{meter.standing.name}</strong>\n <span className='boxoffice-usage__period'>{meter.periodText}</span>\n </span>\n )} />\n <Column<MeterUsageModel>\n header={labels.usage.usedColumn}\n body={meter => (\n <span className={`boxoffice-usage__used boxoffice-usage__used--${meter.level}`}>\n <span>{meter.usedText}</span>\n {meter.standing.allowance > 0 && (\n <ProgressBar\n value={meter.percent}\n showValue={false}\n aria-label={format(labels.usage.progress, { meter: meter.standing.name })} />\n )}\n {levelText[meter.level] && <Tag severity={meter.level === 'atAllowance' ? 'danger' : 'warn'} value={levelText[meter.level]} />}\n <span className='boxoffice-usage__overage'>{meter.overageText}</span>\n </span>\n )} />\n <Column<MeterUsageModel> header={labels.usage.budgetColumn} body={meter => meter.budgetText} />\n {showsConcurrency && <Column<MeterUsageModel> header={labels.usage.concurrencyColumn} body={meter => meter.concurrencyText} />}\n </DataTableCore>\n </section>\n );\n};\n"],"names":["statusOf","isLoading","isUnauthorized","hasFailed","DataTableStatus","Unauthorized","Failed","Loading","Ready","UsageView","meters","labels","useBoxOfficeContext","levelText","ok","undefined","warning","atBudget","usage","atAllowance","showsConcurrency","some","_","standing","hasConcurrencyLimit","_jsxs","section","className","aria-labelledby","_jsx","header","h2","id","title","DataTableCore","data","dataKey","status","emptyMessage","empty","loadingMessage","common","loading","failureMessage","failed","unauthorizedMessage","unauthorized","Column","meterColumn","body","meter","span","strong","name","periodText","usedColumn","level","usedText","allowance","ProgressBar","value","percent","showValue","aria-label","format","progress","Tag","severity","overageText","budgetColumn","budgetText","concurrencyColumn","concurrencyText"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../Usage/index.ts"],"names":[],"mappings":"AAGA,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../Usage/index.ts"],"names":[],"mappings":"AAGA,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { MeterStanding } from '@cratis/showrunner.boxoffice';
|
|
2
|
+
import { BoxOfficeLabels } from '../Labels/index.js';
|
|
3
|
+
export type UsageLevel = 'ok' | 'warning' | 'atBudget' | 'atAllowance';
|
|
4
|
+
export declare const usageWarningShare = 0.8;
|
|
5
|
+
export interface MeterUsageModel {
|
|
6
|
+
readonly standing: MeterStanding;
|
|
7
|
+
readonly percent: number;
|
|
8
|
+
readonly level: UsageLevel;
|
|
9
|
+
readonly usedText: string;
|
|
10
|
+
readonly periodText: string;
|
|
11
|
+
readonly overageText: string;
|
|
12
|
+
readonly budgetText: string;
|
|
13
|
+
readonly concurrencyText: string;
|
|
14
|
+
}
|
|
15
|
+
export declare function usageLevel(standing: MeterStanding): UsageLevel;
|
|
16
|
+
export declare function meterUsageModel(standing: MeterStanding, labels: BoxOfficeLabels, locale?: string): MeterUsageModel;
|
|
17
|
+
//# sourceMappingURL=usageModels.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usageModels.d.ts","sourceRoot":"","sources":["../../../Usage/usageModels.ts"],"names":[],"mappings":"AAGA,OAAO,EAAmB,aAAa,EAAmB,MAAM,8BAA8B,CAAC;AAC/F,OAAO,EAAE,eAAe,EAAU,MAAM,oBAAoB,CAAC;AAI7D,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,SAAS,GAAG,UAAU,GAAG,aAAa,CAAC;AAGvE,eAAO,MAAM,iBAAiB,MAAM,CAAC;AAKrC,MAAM,WAAW,eAAe;IAE5B,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;IAGjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAGzB,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAG3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAG1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAG5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAG7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAG5B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CACpC;AAOD,wBAAgB,UAAU,CAAC,QAAQ,EAAE,aAAa,GAAG,UAAU,CAU9D;AASD,wBAAgB,eAAe,CAAC,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,eAAe,CAyBlH"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { AllowancePeriod, OverageBehavior } from '@cratis/showrunner.boxoffice';
|
|
2
|
+
import { format } from '../Labels/format.js';
|
|
3
|
+
import { formatQuantity, formatDay } from '../formatting.js';
|
|
4
|
+
|
|
5
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
6
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
7
|
+
/** The share of an allowance used from which a meter is shown as running out. */ const usageWarningShare = 0.8;
|
|
8
|
+
/**
|
|
9
|
+
* Works out how a meter stands.
|
|
10
|
+
* @param standing The meter's standing from the backend.
|
|
11
|
+
* @returns The {@link UsageLevel}.
|
|
12
|
+
*/ function usageLevel(standing) {
|
|
13
|
+
if (standing.allowance > 0 && standing.used >= standing.allowance) {
|
|
14
|
+
return 'atAllowance';
|
|
15
|
+
}
|
|
16
|
+
if (standing.budget !== undefined && standing.budget !== null && standing.used >= standing.budget) {
|
|
17
|
+
return 'atBudget';
|
|
18
|
+
}
|
|
19
|
+
return standing.allowance > 0 && standing.used / standing.allowance >= usageWarningShare ? 'warning' : 'ok';
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Lays out how a meter stands for the usage page.
|
|
23
|
+
* @param standing The meter's standing from the backend.
|
|
24
|
+
* @param labels The labels to show.
|
|
25
|
+
* @param locale The locale to format for; the browser's when not given.
|
|
26
|
+
* @returns The {@link MeterUsageModel}.
|
|
27
|
+
*/ function meterUsageModel(standing, labels, locale) {
|
|
28
|
+
const hasAllowance = standing.allowance > 0;
|
|
29
|
+
const period = standing.period === AllowancePeriod.month ? labels.usage.month : labels.usage.day;
|
|
30
|
+
const used = formatQuantity(standing.used, locale);
|
|
31
|
+
return {
|
|
32
|
+
standing,
|
|
33
|
+
percent: hasAllowance ? Math.min(100, Math.round(standing.used / standing.allowance * 100)) : 0,
|
|
34
|
+
level: usageLevel(standing),
|
|
35
|
+
usedText: hasAllowance ? format(labels.usage.usedOfAllowance, {
|
|
36
|
+
used,
|
|
37
|
+
allowance: formatQuantity(standing.allowance, locale),
|
|
38
|
+
unit: standing.unit
|
|
39
|
+
}) : format(labels.usage.noAllowance, {
|
|
40
|
+
used,
|
|
41
|
+
unit: standing.unit
|
|
42
|
+
}),
|
|
43
|
+
periodText: hasAllowance ? `${period}, ${format(labels.usage.resets, {
|
|
44
|
+
date: formatDay(standing.periodEnds, locale)
|
|
45
|
+
})}` : period,
|
|
46
|
+
overageText: standing.overage === OverageBehavior.park ? labels.usage.park : labels.usage.block,
|
|
47
|
+
budgetText: standing.budget !== undefined && standing.budget !== null ? `${formatQuantity(standing.budget, locale)} ${standing.unit}` : labels.usage.notSet,
|
|
48
|
+
concurrencyText: !standing.hasConcurrencyLimit ? '' : standing.concurrencyLimit !== undefined && standing.concurrencyLimit !== null ? formatQuantity(standing.concurrencyLimit, locale) : labels.usage.notSet
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export { meterUsageModel, usageLevel, usageWarningShare };
|
|
53
|
+
//# sourceMappingURL=usageModels.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usageModels.js","sources":["../../../Usage/usageModels.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 { AllowancePeriod, MeterStanding, OverageBehavior } from '@cratis/showrunner.boxoffice';\nimport { BoxOfficeLabels, format } from '../Labels/index.js';\nimport { formatDay, formatQuantity } from '../formatting.js';\n\n/** How a meter stands against what it may use. */\nexport type UsageLevel = 'ok' | 'warning' | 'atBudget' | 'atAllowance';\n\n/** The share of an allowance used from which a meter is shown as running out. */\nexport const usageWarningShare = 0.8;\n\n/**\n * What the usage page shows for one meter.\n */\nexport interface MeterUsageModel {\n /** The meter's standing. */\n readonly standing: MeterStanding;\n\n /** How much of the allowance is used, from 0 to 100; 0 when there is no allowance. */\n readonly percent: number;\n\n /** How the meter stands. */\n readonly level: UsageLevel;\n\n /** What is used against the allowance, in words. */\n readonly usedText: string;\n\n /** The allowance's period and when it starts over, in words. */\n readonly periodText: string;\n\n /** What happens beyond the allowance, in words. */\n readonly overageText: string;\n\n /** The budget, in words; nothing set when there is none. */\n readonly budgetText: string;\n\n /** The concurrency limit, in words; nothing set when there is none. */\n readonly concurrencyText: string;\n}\n\n/**\n * Works out how a meter stands.\n * @param standing The meter's standing from the backend.\n * @returns The {@link UsageLevel}.\n */\nexport function usageLevel(standing: MeterStanding): UsageLevel {\n if (standing.allowance > 0 && standing.used >= standing.allowance) {\n return 'atAllowance';\n }\n\n if (standing.budget !== undefined && standing.budget !== null && standing.used >= standing.budget) {\n return 'atBudget';\n }\n\n return standing.allowance > 0 && standing.used / standing.allowance >= usageWarningShare ? 'warning' : 'ok';\n}\n\n/**\n * Lays out how a meter stands for the usage page.\n * @param standing The meter's standing from the backend.\n * @param labels The labels to show.\n * @param locale The locale to format for; the browser's when not given.\n * @returns The {@link MeterUsageModel}.\n */\nexport function meterUsageModel(standing: MeterStanding, labels: BoxOfficeLabels, locale?: string): MeterUsageModel {\n const hasAllowance = standing.allowance > 0;\n const period = standing.period === AllowancePeriod.month ? labels.usage.month : labels.usage.day;\n const used = formatQuantity(standing.used, locale);\n\n return {\n standing,\n percent: hasAllowance ? Math.min(100, Math.round((standing.used / standing.allowance) * 100)) : 0,\n level: usageLevel(standing),\n usedText: hasAllowance\n ? format(labels.usage.usedOfAllowance, { used, allowance: formatQuantity(standing.allowance, locale), unit: standing.unit })\n : format(labels.usage.noAllowance, { used, unit: standing.unit }),\n periodText: hasAllowance\n ? `${period}, ${format(labels.usage.resets, { date: formatDay(standing.periodEnds, locale) })}`\n : period,\n overageText: standing.overage === OverageBehavior.park ? labels.usage.park : labels.usage.block,\n budgetText: standing.budget !== undefined && standing.budget !== null\n ? `${formatQuantity(standing.budget, locale)} ${standing.unit}`\n : labels.usage.notSet,\n concurrencyText: !standing.hasConcurrencyLimit\n ? ''\n : standing.concurrencyLimit !== undefined && standing.concurrencyLimit !== null\n ? formatQuantity(standing.concurrencyLimit, locale)\n : labels.usage.notSet\n };\n}\n"],"names":["usageWarningShare","usageLevel","standing","allowance","used","budget","undefined","meterUsageModel","labels","locale","hasAllowance","period","AllowancePeriod","month","usage","day","formatQuantity","percent","Math","min","round","level","usedText","format","usedOfAllowance","unit","noAllowance","periodText","resets","date","formatDay","periodEnds","overageText","overage","OverageBehavior","park","block","budgetText","notSet","concurrencyText","hasConcurrencyLimit","concurrencyLimit"],"mappings":";;;;AAAA;AACA;AASA,kFACO,MAAMA,iBAAAA,GAAoB;AA+BjC;;;;IAKO,SAASC,UAAAA,CAAWC,QAAuB,EAAA;IAC9C,IAAIA,QAAAA,CAASC,SAAS,GAAG,CAAA,IAAKD,SAASE,IAAI,IAAIF,QAAAA,CAASC,SAAS,EAAE;QAC/D,OAAO,aAAA;AACX,IAAA;AAEA,IAAA,IAAID,QAAAA,CAASG,MAAM,KAAKC,SAAAA,IAAaJ,QAAAA,CAASG,MAAM,KAAK,IAAA,IAAQH,QAAAA,CAASE,IAAI,IAAIF,QAAAA,CAASG,MAAM,EAAE;QAC/F,OAAO,UAAA;AACX,IAAA;IAEA,OAAOH,QAAAA,CAASC,SAAS,GAAG,CAAA,IAAKD,QAAAA,CAASE,IAAI,GAAGF,QAAAA,CAASC,SAAS,IAAIH,iBAAAA,GAAoB,SAAA,GAAY,IAAA;AAC3G;AAEA;;;;;;AAMC,IACM,SAASO,eAAAA,CAAgBL,QAAuB,EAAEM,MAAuB,EAAEC,MAAe,EAAA;IAC7F,MAAMC,YAAAA,GAAeR,QAAAA,CAASC,SAAS,GAAG,CAAA;AAC1C,IAAA,MAAMQ,MAAAA,GAAST,QAAAA,CAASS,MAAM,KAAKC,gBAAgBC,KAAK,GAAGL,MAAAA,CAAOM,KAAK,CAACD,KAAK,GAAGL,MAAAA,CAAOM,KAAK,CAACC,GAAG;AAChG,IAAA,MAAMX,IAAAA,GAAOY,cAAAA,CAAed,QAAAA,CAASE,IAAI,EAAEK,MAAAA,CAAAA;IAE3C,OAAO;AACHP,QAAAA,QAAAA;AACAe,QAAAA,OAAAA,EAASP,YAAAA,GAAeQ,IAAAA,CAAKC,GAAG,CAAC,KAAKD,IAAAA,CAAKE,KAAK,CAAElB,SAASE,IAAI,GAAGF,QAAAA,CAASC,SAAS,GAAI,GAAA,CAAA,CAAA,GAAQ,CAAA;AAChGkB,QAAAA,KAAAA,EAAOpB,UAAAA,CAAWC,QAAAA,CAAAA;AAClBoB,QAAAA,QAAAA,EAAUZ,eACJa,MAAAA,CAAOf,MAAAA,CAAOM,KAAK,CAACU,eAAe,EAAE;AAAEpB,YAAAA,IAAAA;YAAMD,SAAAA,EAAWa,cAAAA,CAAed,QAAAA,CAASC,SAAS,EAAEM,MAAAA,CAAAA;AAASgB,YAAAA,IAAAA,EAAMvB,SAASuB;AAAK,SAAA,CAAA,GACxHF,MAAAA,CAAOf,MAAAA,CAAOM,KAAK,CAACY,WAAW,EAAE;AAAEtB,YAAAA,IAAAA;AAAMqB,YAAAA,IAAAA,EAAMvB,SAASuB;AAAK,SAAA,CAAA;QACnEE,UAAAA,EAAYjB,YAAAA,GACN,CAAA,EAAGC,MAAAA,CAAO,EAAE,EAAEY,OAAOf,MAAAA,CAAOM,KAAK,CAACc,MAAM,EAAE;YAAEC,IAAAA,EAAMC,SAAAA,CAAU5B,QAAAA,CAAS6B,UAAU,EAAEtB,MAAAA;AAAQ,SAAA,CAAA,CAAA,CAAI,GAC7FE,MAAAA;AACNqB,QAAAA,WAAAA,EAAa9B,QAAAA,CAAS+B,OAAO,KAAKC,eAAAA,CAAgBC,IAAI,GAAG3B,MAAAA,CAAOM,KAAK,CAACqB,IAAI,GAAG3B,MAAAA,CAAOM,KAAK,CAACsB,KAAK;QAC/FC,UAAAA,EAAYnC,QAAAA,CAASG,MAAM,KAAKC,SAAAA,IAAaJ,SAASG,MAAM,KAAK,IAAA,GAC3D,CAAA,EAAGW,cAAAA,CAAed,QAAAA,CAASG,MAAM,EAAEI,MAAAA,CAAAA,CAAQ,CAAC,EAAEP,QAAAA,CAASuB,IAAI,EAAE,GAC7DjB,MAAAA,CAAOM,KAAK,CAACwB,MAAM;QACzBC,eAAAA,EAAiB,CAACrC,SAASsC,mBAAmB,GACxC,KACAtC,QAAAA,CAASuC,gBAAgB,KAAKnC,SAAAA,IAAaJ,QAAAA,CAASuC,gBAAgB,KAAK,IAAA,GACrEzB,eAAed,QAAAA,CAASuC,gBAAgB,EAAEhC,MAAAA,CAAAA,GAC1CD,MAAAA,CAAOM,KAAK,CAACwB;AAC3B,KAAA;AACJ;;"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { DateOnly } from '@cratis/fundamentals';
|
|
2
|
+
export declare function formatDay(day: DateOnly | Date | string | undefined, locale?: string): string;
|
|
3
|
+
export declare function formatMoney(amount: number, currency: string, locale?: string): string;
|
|
4
|
+
export declare function formatQuantity(value: number, locale?: string): string;
|
|
5
|
+
//# sourceMappingURL=formatting.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatting.d.ts","sourceRoot":"","sources":["../../formatting.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAShD,wBAAgB,SAAS,CAAC,GAAG,EAAE,QAAQ,GAAG,IAAI,GAAG,MAAM,GAAG,SAAS,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAG5F;AASD,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAMrF;AAQD,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAErE"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { toDate } from './Entitlements/entitlementModel.js';
|
|
2
|
+
|
|
3
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
4
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
5
|
+
/**
|
|
6
|
+
* Formats a day for a person.
|
|
7
|
+
* @param day The day.
|
|
8
|
+
* @param locale The locale; the browser's when not given.
|
|
9
|
+
* @returns The day, such as "Nov 2, 2026"; empty when there is no day.
|
|
10
|
+
*/ function formatDay(day, locale) {
|
|
11
|
+
const date = toDate(day);
|
|
12
|
+
return date ? new Intl.DateTimeFormat(locale, {
|
|
13
|
+
dateStyle: 'medium'
|
|
14
|
+
}).format(date) : '';
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Formats an amount of money.
|
|
18
|
+
* @param amount The amount.
|
|
19
|
+
* @param currency The ISO currency code.
|
|
20
|
+
* @param locale The locale; the browser's when not given.
|
|
21
|
+
* @returns The amount with its currency, such as "$12.00".
|
|
22
|
+
*/ function formatMoney(amount, currency, locale) {
|
|
23
|
+
try {
|
|
24
|
+
return new Intl.NumberFormat(locale, {
|
|
25
|
+
style: 'currency',
|
|
26
|
+
currency
|
|
27
|
+
}).format(amount);
|
|
28
|
+
} catch {
|
|
29
|
+
return `${amount} ${currency}`;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Formats a quantity.
|
|
34
|
+
* @param value The quantity.
|
|
35
|
+
* @param locale The locale; the browser's when not given.
|
|
36
|
+
* @returns The quantity with its thousands separated.
|
|
37
|
+
*/ function formatQuantity(value, locale) {
|
|
38
|
+
return new Intl.NumberFormat(locale).format(value);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export { formatDay, formatMoney, formatQuantity };
|
|
42
|
+
//# sourceMappingURL=formatting.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatting.js","sources":["../../formatting.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 { toDate } from './Entitlements/entitlementModel.js';\n\n/**\n * Formats a day for a person.\n * @param day The day.\n * @param locale The locale; the browser's when not given.\n * @returns The day, such as \"Nov 2, 2026\"; empty when there is no day.\n */\nexport function formatDay(day: DateOnly | Date | string | undefined, locale?: string): string {\n const date = toDate(day);\n return date ? new Intl.DateTimeFormat(locale, { dateStyle: 'medium' }).format(date) : '';\n}\n\n/**\n * Formats an amount of money.\n * @param amount The amount.\n * @param currency The ISO currency code.\n * @param locale The locale; the browser's when not given.\n * @returns The amount with its currency, such as \"$12.00\".\n */\nexport function formatMoney(amount: number, currency: string, locale?: string): string {\n try {\n return new Intl.NumberFormat(locale, { style: 'currency', currency }).format(amount);\n } catch {\n return `${amount} ${currency}`;\n }\n}\n\n/**\n * Formats a quantity.\n * @param value The quantity.\n * @param locale The locale; the browser's when not given.\n * @returns The quantity with its thousands separated.\n */\nexport function formatQuantity(value: number, locale?: string): string {\n return new Intl.NumberFormat(locale).format(value);\n}\n"],"names":["formatDay","day","locale","date","toDate","Intl","DateTimeFormat","dateStyle","format","formatMoney","amount","currency","NumberFormat","style","formatQuantity","value"],"mappings":";;AAAA;AACA;AAKA;;;;;AAKC,IACM,SAASA,SAAAA,CAAUC,GAAyC,EAAEC,MAAe,EAAA;AAChF,IAAA,MAAMC,OAAOC,MAAAA,CAAOH,GAAAA,CAAAA;AACpB,IAAA,OAAOE,IAAAA,GAAO,IAAIE,IAAAA,CAAKC,cAAc,CAACJ,MAAAA,EAAQ;QAAEK,SAAAA,EAAW;KAAS,CAAA,CAAGC,MAAM,CAACL,IAAAA,CAAAA,GAAQ,EAAA;AAC1F;AAEA;;;;;;AAMC,IACM,SAASM,WAAAA,CAAYC,MAAc,EAAEC,QAAgB,EAAET,MAAe,EAAA;IACzE,IAAI;AACA,QAAA,OAAO,IAAIG,IAAAA,CAAKO,YAAY,CAACV,MAAAA,EAAQ;YAAEW,KAAAA,EAAO,UAAA;AAAYF,YAAAA;AAAS,SAAA,CAAA,CAAGH,MAAM,CAACE,MAAAA,CAAAA;AACjF,IAAA,CAAA,CAAE,OAAM;AACJ,QAAA,OAAO,CAAA,EAAGA,MAAAA,CAAO,CAAC,EAAEC,QAAAA,CAAAA,CAAU;AAClC,IAAA;AACJ;AAEA;;;;;AAKC,IACM,SAASG,cAAAA,CAAeC,KAAa,EAAEb,MAAe,EAAA;AACzD,IAAA,OAAO,IAAIG,IAAAA,CAAKO,YAAY,CAACV,MAAAA,CAAAA,CAAQM,MAAM,CAACO,KAAAA,CAAAA;AAChD;;"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export * from './Banners/index.js';
|
|
2
|
+
export * from './Entitlements/index.js';
|
|
3
|
+
export * from './Labels/index.js';
|
|
4
|
+
export * from './Plan/index.js';
|
|
5
|
+
export * from './Portal/index.js';
|
|
6
|
+
export * from './Provider/index.js';
|
|
7
|
+
export * from './Seats/index.js';
|
|
8
|
+
export * from './Usage/index.js';
|
|
9
|
+
export * from './formatting.js';
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -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,29 @@
|
|
|
1
|
+
export { noLicenseModel, suspensionReason, trialBannerModel, trialWarningDays } from './Banners/bannerModels.js';
|
|
2
|
+
export { NoLicense } from './Banners/NoLicense.js';
|
|
3
|
+
export { SuspensionBanner, SuspensionBannerView } from './Banners/SuspensionBanner.js';
|
|
4
|
+
export { TrialBanner } from './Banners/TrialBanner.js';
|
|
5
|
+
export { daysBetween, entitlementsOf, toDate } from './Entitlements/entitlementModel.js';
|
|
6
|
+
export { EntitlementsContext, useEntitlementsContext } from './Entitlements/EntitlementsContext.js';
|
|
7
|
+
export { filterByModule } from './Entitlements/moduleFilter.js';
|
|
8
|
+
export { requiresModuleModel } from './Entitlements/requiresModuleModel.js';
|
|
9
|
+
export { RequiresModule } from './Entitlements/RequiresModule.js';
|
|
10
|
+
export { useEntitlements, useModuleFilter } from './Entitlements/useEntitlements.js';
|
|
11
|
+
export { defaultBoxOfficeLabels } from './Labels/defaultBoxOfficeLabels.js';
|
|
12
|
+
export { resolveLabels } from './Labels/resolveLabels.js';
|
|
13
|
+
export { format } from './Labels/format.js';
|
|
14
|
+
export { moduleRows, offerRows, planSummary, priceText } from './Plan/planModels.js';
|
|
15
|
+
export { PlanPage } from './Plan/PlanPage.js';
|
|
16
|
+
export { PlanView } from './Plan/PlanView.js';
|
|
17
|
+
export { linkToPortal, openInNewTab } from './Portal/portalLinks.js';
|
|
18
|
+
export { PortalButton } from './Portal/PortalButton.js';
|
|
19
|
+
export { BoxOfficeContext, defaultBoxOfficeContextValue, useBoxOfficeContext, useBoxOfficeLabels } from './Provider/BoxOfficeContext.js';
|
|
20
|
+
export { BoxOfficeProvider } from './Provider/BoxOfficeProvider.js';
|
|
21
|
+
export { AssignSeatDialog } from './Seats/AssignSeatDialog.js';
|
|
22
|
+
export { emptySeatPerson, isValidSeatPerson, personOf, seatRows, seatSummary } from './Seats/seatModels.js';
|
|
23
|
+
export { SeatsPage } from './Seats/SeatsPage.js';
|
|
24
|
+
export { SeatsView } from './Seats/SeatsView.js';
|
|
25
|
+
export { meterUsageModel, usageLevel, usageWarningShare } from './Usage/usageModels.js';
|
|
26
|
+
export { UsagePage } from './Usage/UsagePage.js';
|
|
27
|
+
export { UsageView } from './Usage/UsageView.js';
|
|
28
|
+
export { formatDay, formatMoney, formatQuantity } from './formatting.js';
|
|
29
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/formatting.ts
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
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
|
+
import { DateOnly } from '@cratis/fundamentals';
|
|
5
|
+
import { toDate } from './Entitlements/entitlementModel.js';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Formats a day for a person.
|
|
9
|
+
* @param day The day.
|
|
10
|
+
* @param locale The locale; the browser's when not given.
|
|
11
|
+
* @returns The day, such as "Nov 2, 2026"; empty when there is no day.
|
|
12
|
+
*/
|
|
13
|
+
export function formatDay(day: DateOnly | Date | string | undefined, locale?: string): string {
|
|
14
|
+
const date = toDate(day);
|
|
15
|
+
return date ? new Intl.DateTimeFormat(locale, { dateStyle: 'medium' }).format(date) : '';
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Formats an amount of money.
|
|
20
|
+
* @param amount The amount.
|
|
21
|
+
* @param currency The ISO currency code.
|
|
22
|
+
* @param locale The locale; the browser's when not given.
|
|
23
|
+
* @returns The amount with its currency, such as "$12.00".
|
|
24
|
+
*/
|
|
25
|
+
export function formatMoney(amount: number, currency: string, locale?: string): string {
|
|
26
|
+
try {
|
|
27
|
+
return new Intl.NumberFormat(locale, { style: 'currency', currency }).format(amount);
|
|
28
|
+
} catch {
|
|
29
|
+
return `${amount} ${currency}`;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Formats a quantity.
|
|
35
|
+
* @param value The quantity.
|
|
36
|
+
* @param locale The locale; the browser's when not given.
|
|
37
|
+
* @returns The quantity with its thousands separated.
|
|
38
|
+
*/
|
|
39
|
+
export function formatQuantity(value: number, locale?: string): string {
|
|
40
|
+
return new Intl.NumberFormat(locale).format(value);
|
|
41
|
+
}
|
package/index.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
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
|
+
export * from './Banners/index.js';
|
|
5
|
+
export * from './Entitlements/index.js';
|
|
6
|
+
export * from './Labels/index.js';
|
|
7
|
+
export * from './Plan/index.js';
|
|
8
|
+
export * from './Portal/index.js';
|
|
9
|
+
export * from './Provider/index.js';
|
|
10
|
+
export * from './Seats/index.js';
|
|
11
|
+
export * from './Usage/index.js';
|
|
12
|
+
export * from './formatting.js';
|
package/package.json
CHANGED
|
@@ -1,6 +1,86 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
2
|
+
"type": "module",
|
|
3
|
+
"name": "@cratis/showrunner.boxoffice.react",
|
|
4
|
+
"version": "1.9.0",
|
|
5
|
+
"description": "React components for Box Office — the Showrunner licensing part: entitlements, module gating, trial and suspension banners, seats, usage and plan pages, built on Cratis Arc and Cratis Components.",
|
|
6
|
+
"keywords": [
|
|
7
|
+
"cratis",
|
|
8
|
+
"showrunner",
|
|
9
|
+
"boxoffice",
|
|
10
|
+
"licensing",
|
|
11
|
+
"entitlements",
|
|
12
|
+
"arc",
|
|
13
|
+
"react",
|
|
14
|
+
"components"
|
|
15
|
+
],
|
|
16
|
+
"homepage": "https://github.com/Cratis/Showrunner",
|
|
17
|
+
"author": "Cratis",
|
|
18
|
+
"license": "MIT",
|
|
19
|
+
"repository": {
|
|
20
|
+
"type": "git",
|
|
21
|
+
"url": "git+https://github.com/Cratis/Showrunner.git"
|
|
22
|
+
},
|
|
23
|
+
"publishConfig": {
|
|
24
|
+
"access": "public"
|
|
25
|
+
},
|
|
26
|
+
"files": [
|
|
27
|
+
"dist",
|
|
28
|
+
"styles.css",
|
|
29
|
+
"**/*.ts",
|
|
30
|
+
"**/*.tsx",
|
|
31
|
+
"!**/for_*/**",
|
|
32
|
+
"!**/given/**",
|
|
33
|
+
"!**/*.tsbuildinfo"
|
|
34
|
+
],
|
|
35
|
+
"main": "dist/cjs/index.js",
|
|
36
|
+
"module": "dist/esm/index.js",
|
|
37
|
+
"types": "dist/esm/index.d.ts",
|
|
38
|
+
"exports": {
|
|
39
|
+
"./package.json": "./package.json",
|
|
40
|
+
".": {
|
|
41
|
+
"import": {
|
|
42
|
+
"types": "./dist/esm/index.d.ts",
|
|
43
|
+
"default": "./dist/esm/index.js"
|
|
44
|
+
},
|
|
45
|
+
"require": {
|
|
46
|
+
"types": "./dist/cjs/index.d.ts",
|
|
47
|
+
"default": "./dist/cjs/index.js"
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
"./styles": "./styles.css"
|
|
51
|
+
},
|
|
52
|
+
"scripts": {
|
|
53
|
+
"prepare": "yarn g:build",
|
|
54
|
+
"clean": "yarn g:clean",
|
|
55
|
+
"compile": "yarn g:compile",
|
|
56
|
+
"build": "yarn g:build",
|
|
57
|
+
"lint": "yarn g:lint",
|
|
58
|
+
"lint:ci": "yarn g:lint:ci",
|
|
59
|
+
"test": "yarn g:test",
|
|
60
|
+
"test:watch": "yarn g:test:watch",
|
|
61
|
+
"ci": "yarn g:ci",
|
|
62
|
+
"up": "yarn g:up"
|
|
63
|
+
},
|
|
64
|
+
"dependencies": {
|
|
65
|
+
"@cratis/showrunner.boxoffice": "1.9.0"
|
|
66
|
+
},
|
|
67
|
+
"devDependencies": {
|
|
68
|
+
"@cratis/arc": "22.146.0",
|
|
69
|
+
"@cratis/arc.react": "22.146.0",
|
|
70
|
+
"@cratis/components": "4.38.0",
|
|
71
|
+
"@cratis/fundamentals": "7.27.0",
|
|
72
|
+
"react": "^19.3.1",
|
|
73
|
+
"react-dom": "^19.3.1",
|
|
74
|
+
"reflect-metadata": "0.2.2"
|
|
75
|
+
},
|
|
76
|
+
"peerDependencies": {
|
|
77
|
+
"@cratis/arc": "^22.146.0",
|
|
78
|
+
"@cratis/arc.react": "^22.146.0",
|
|
79
|
+
"@cratis/components": "^4.38.0",
|
|
80
|
+
"@cratis/fundamentals": "^7.27.0",
|
|
81
|
+
"react": "^19.0.0"
|
|
82
|
+
},
|
|
83
|
+
"sideEffects": [
|
|
84
|
+
"*.css"
|
|
85
|
+
]
|
|
6
86
|
}
|