@happyvertical/smrt-subscriptions 0.60.16 → 0.60.18
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/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/manifest.json +1 -1
- package/dist/smrt-knowledge.json +3 -3
- package/dist/svelte/CommercialOverview.svelte +37 -11
- package/dist/svelte/PlanPicker.svelte +18 -17
- package/dist/svelte/SubscriptionSummary.svelte +13 -11
- package/dist/svelte/UsageThresholds.svelte +21 -17
- package/package.json +9 -9
package/dist/manifest.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"version": "1.0.0",
|
|
3
3
|
"timestamp": 0,
|
|
4
4
|
"packageName": "@happyvertical/smrt-subscriptions",
|
|
5
|
-
"packageVersion": "0.60.
|
|
5
|
+
"packageVersion": "0.60.18",
|
|
6
6
|
"objects": {
|
|
7
7
|
"@happyvertical/smrt-subscriptions:SubscriptionPlanCollection": {
|
|
8
8
|
"name": "subscriptionplancollection",
|
package/dist/smrt-knowledge.json
CHANGED
|
@@ -3,12 +3,12 @@
|
|
|
3
3
|
"sensitiveFieldsExcluded": true,
|
|
4
4
|
"generatedAt": "1970-01-01T00:00:00.000Z",
|
|
5
5
|
"packageName": "@happyvertical/smrt-subscriptions",
|
|
6
|
-
"packageVersion": "0.60.
|
|
6
|
+
"packageVersion": "0.60.18",
|
|
7
7
|
"sourceManifestPath": "dist/manifest.json",
|
|
8
8
|
"agentDocPath": "AGENTS.md",
|
|
9
9
|
"sourceHashes": {
|
|
10
|
-
"manifest": "
|
|
11
|
-
"packageJson": "
|
|
10
|
+
"manifest": "bd677428d6816389a5353be289957b0aa957f8fb911895d93b012108a89c42f1",
|
|
11
|
+
"packageJson": "956deeb9b7ee22dc1c6b5baf3016fce280d7d80a6862277cf89e0cae4605a266",
|
|
12
12
|
"agents": "920c91705242b95baed544fa2b33223935353a247a9b9946c5776a315525e642"
|
|
13
13
|
},
|
|
14
14
|
"exports": [
|
|
@@ -41,11 +41,11 @@ function formatCharge(metric: CommercialMetricView): string {
|
|
|
41
41
|
}
|
|
42
42
|
</script>
|
|
43
43
|
|
|
44
|
-
<section class="commercial-
|
|
44
|
+
<section class="smrt-commercial-overview__root" aria-label={t(M['subscriptions.commercial.overview_label'])} data-smrt-component="CommercialOverview">
|
|
45
45
|
{#each metrics as metric (metric.metricKey)}
|
|
46
|
-
<article>
|
|
47
|
-
<header><strong>{metric.metricKey}</strong><span class:
|
|
48
|
-
<dl>
|
|
46
|
+
<article data-smrt-part="row">
|
|
47
|
+
<header data-smrt-part="header"><strong>{metric.metricKey}</strong><span class:smrt-commercial-overview__blocked={metric.thresholdState === 'blocked'} data-smrt-part="indicator">{metric.thresholdState ?? 'ok'}</span></header>
|
|
48
|
+
<dl data-smrt-part="body">
|
|
49
49
|
<div><dt>Usage</dt><dd>{metric.usage}</dd></div>
|
|
50
50
|
<div><dt>Allowance</dt><dd>{metric.allowance ?? '—'}</dd></div>
|
|
51
51
|
<div><dt>Forecast</dt><dd>{metric.forecast ?? '—'}</dd></div>
|
|
@@ -57,13 +57,39 @@ function formatCharge(metric: CommercialMetricView): string {
|
|
|
57
57
|
|
|
58
58
|
<style>
|
|
59
59
|
@layer smrt.reset, smrt.structure, smrt.theme;
|
|
60
|
+
@layer smrt.structure {
|
|
61
|
+
.smrt-commercial-overview__root {
|
|
62
|
+
display:grid;
|
|
63
|
+
gap:.75rem;
|
|
64
|
+
}
|
|
65
|
+
article {
|
|
66
|
+
padding:1rem;
|
|
67
|
+
}
|
|
68
|
+
header, dl, dl div {
|
|
69
|
+
display:flex;
|
|
70
|
+
justify-content:space-between;
|
|
71
|
+
gap:1rem;
|
|
72
|
+
}
|
|
73
|
+
dl {
|
|
74
|
+
flex-wrap:wrap;
|
|
75
|
+
margin:.75rem 0 0;
|
|
76
|
+
}
|
|
77
|
+
dd {
|
|
78
|
+
margin:0;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
60
82
|
@layer smrt.theme {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
dt {
|
|
66
|
-
|
|
67
|
-
|
|
83
|
+
article {
|
|
84
|
+
border:var(--smrt-hairline);
|
|
85
|
+
border-radius:var(--smrt-radius-md);
|
|
86
|
+
}
|
|
87
|
+
dt {
|
|
88
|
+
color:var(--smrt-color-on-surface-variant);
|
|
89
|
+
}
|
|
90
|
+
.smrt-commercial-overview__blocked {
|
|
91
|
+
color:var(--smrt-color-error);
|
|
92
|
+
}
|
|
68
93
|
}
|
|
94
|
+
|
|
69
95
|
</style>
|
|
@@ -91,13 +91,13 @@ let {
|
|
|
91
91
|
<!-- raw-primitive-allow: pressable selection card (aria-pressed toggle with multi-line plan summary), not a standard action button -->
|
|
92
92
|
<button
|
|
93
93
|
aria-pressed={plan.planKey === selectedPlanKey}
|
|
94
|
-
class:
|
|
94
|
+
class:smrt-plan-picker__selected={plan.planKey === selectedPlanKey}
|
|
95
95
|
class="smrt-plan-picker__plan"
|
|
96
96
|
type="button"
|
|
97
|
-
onclick={() => onSelect?.(plan)}
|
|
97
|
+
onclick={() => onSelect?.(plan)} data-smrt-part="trigger"
|
|
98
98
|
>
|
|
99
|
-
<span class="smrt-plan-picker__name">{plan.name}</span>
|
|
100
|
-
<span class="smrt-plan-picker__price">
|
|
99
|
+
<span class="smrt-plan-picker__name" data-smrt-part="title">{plan.name}</span>
|
|
100
|
+
<span class="smrt-plan-picker__price" data-smrt-part="value">
|
|
101
101
|
{#if plan.pricingMode === 'free'}
|
|
102
102
|
{t(M['subscriptions.picker.free'])}
|
|
103
103
|
{:else if plan.pricingMode === 'pay_what_you_can'}
|
|
@@ -112,9 +112,9 @@ let {
|
|
|
112
112
|
{/if}
|
|
113
113
|
</span>
|
|
114
114
|
{#if plan.description}
|
|
115
|
-
<span class="smrt-plan-picker__description">{plan.description}</span>
|
|
115
|
+
<span class="smrt-plan-picker__description" data-smrt-part="description">{plan.description}</span>
|
|
116
116
|
{/if}
|
|
117
|
-
<span class="smrt-plan-picker__features">
|
|
117
|
+
<span class="smrt-plan-picker__features" data-smrt-part="group">
|
|
118
118
|
{featureCount(plan)} features
|
|
119
119
|
</span>
|
|
120
120
|
</button>
|
|
@@ -123,40 +123,40 @@ let {
|
|
|
123
123
|
|
|
124
124
|
<style>
|
|
125
125
|
@layer smrt.reset, smrt.structure, smrt.theme;
|
|
126
|
-
@layer smrt.
|
|
126
|
+
@layer smrt.structure {
|
|
127
127
|
.smrt-plan-picker {
|
|
128
128
|
display: grid;
|
|
129
129
|
gap: 0.75rem;
|
|
130
130
|
grid-template-columns: repeat(auto-fit, minmax(14rem, 1fr));
|
|
131
131
|
}
|
|
132
|
-
|
|
133
132
|
.smrt-plan-picker__plan {
|
|
134
133
|
align-items: flex-start;
|
|
135
|
-
background: var(--smrt-color-surface);
|
|
136
|
-
border: var(--smrt-hairline);
|
|
137
|
-
border-radius: var(--smrt-radius-md);
|
|
138
|
-
color: inherit;
|
|
139
134
|
cursor: pointer;
|
|
140
135
|
display: grid;
|
|
141
136
|
gap: 0.45rem;
|
|
142
137
|
padding: 1rem;
|
|
143
|
-
text-align: left;
|
|
144
138
|
}
|
|
139
|
+
}
|
|
145
140
|
|
|
146
|
-
|
|
141
|
+
@layer smrt.theme {
|
|
142
|
+
.smrt-plan-picker__plan {
|
|
143
|
+
background: var(--smrt-color-surface);
|
|
144
|
+
border: var(--smrt-hairline);
|
|
145
|
+
border-radius: var(--smrt-radius-md);
|
|
146
|
+
color: inherit;
|
|
147
|
+
text-align: left;
|
|
148
|
+
}
|
|
149
|
+
.smrt-plan-picker__plan.smrt-plan-picker__selected {
|
|
147
150
|
border-color: var(--smrt-color-primary);
|
|
148
151
|
box-shadow: 0 0 0 1px var(--smrt-color-primary);
|
|
149
152
|
}
|
|
150
|
-
|
|
151
153
|
.smrt-plan-picker__name {
|
|
152
154
|
font-weight: var(--smrt-typography-weight-bold, 650);
|
|
153
155
|
}
|
|
154
|
-
|
|
155
156
|
.smrt-plan-picker__price {
|
|
156
157
|
font-size: var(--smrt-typography-title-large-size, 1.25rem);
|
|
157
158
|
font-weight: var(--smrt-typography-weight-bold, 700);
|
|
158
159
|
}
|
|
159
|
-
|
|
160
160
|
.smrt-plan-picker__price small,
|
|
161
161
|
.smrt-plan-picker__description,
|
|
162
162
|
.smrt-plan-picker__features {
|
|
@@ -164,4 +164,5 @@ let {
|
|
|
164
164
|
font-size: var(--smrt-typography-body-medium-size, 0.875rem);
|
|
165
165
|
}
|
|
166
166
|
}
|
|
167
|
+
|
|
167
168
|
</style>
|
|
@@ -48,7 +48,7 @@ const periodLabel = $derived(
|
|
|
48
48
|
|
|
49
49
|
<section class="smrt-subscription-summary" data-smrt-component="SubscriptionSummary">
|
|
50
50
|
<div>
|
|
51
|
-
<p class="smrt-subscription-summary__label">{t(M['subscriptions.summary.current_plan'])}</p>
|
|
51
|
+
<p class="smrt-subscription-summary__label" data-smrt-part="label">{t(M['subscriptions.summary.current_plan'])}</p>
|
|
52
52
|
<h2>{resolution?.planKey ?? t(M['subscriptions.summary.no_active_plan'])}</h2>
|
|
53
53
|
</div>
|
|
54
54
|
<dl>
|
|
@@ -75,34 +75,36 @@ const periodLabel = $derived(
|
|
|
75
75
|
|
|
76
76
|
<style>
|
|
77
77
|
@layer smrt.reset, smrt.structure, smrt.theme;
|
|
78
|
-
@layer smrt.
|
|
78
|
+
@layer smrt.structure {
|
|
79
79
|
.smrt-subscription-summary {
|
|
80
80
|
align-items: center;
|
|
81
81
|
display: flex;
|
|
82
82
|
gap: 1rem;
|
|
83
83
|
justify-content: space-between;
|
|
84
84
|
}
|
|
85
|
-
|
|
86
85
|
.smrt-subscription-summary h2,
|
|
87
86
|
.smrt-subscription-summary__label {
|
|
88
87
|
margin: 0;
|
|
89
88
|
}
|
|
90
|
-
|
|
91
|
-
.smrt-subscription-summary__label,
|
|
92
|
-
.smrt-subscription-summary dt {
|
|
93
|
-
color: var(--smrt-color-on-surface-variant);
|
|
94
|
-
font-size: var(--smrt-typography-label-medium-size, 0.8rem);
|
|
95
|
-
}
|
|
96
|
-
|
|
97
89
|
.smrt-subscription-summary dl {
|
|
98
90
|
display: flex;
|
|
99
91
|
gap: 1rem;
|
|
100
92
|
margin: 0;
|
|
101
93
|
}
|
|
94
|
+
.smrt-subscription-summary dd {
|
|
95
|
+
margin: 0;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
102
98
|
|
|
99
|
+
@layer smrt.theme {
|
|
100
|
+
.smrt-subscription-summary__label,
|
|
101
|
+
.smrt-subscription-summary dt {
|
|
102
|
+
color: var(--smrt-color-on-surface-variant);
|
|
103
|
+
font-size: var(--smrt-typography-label-medium-size, 0.8rem);
|
|
104
|
+
}
|
|
103
105
|
.smrt-subscription-summary dd {
|
|
104
106
|
font-weight: var(--smrt-typography-weight-bold, 650);
|
|
105
|
-
margin: 0;
|
|
106
107
|
}
|
|
107
108
|
}
|
|
109
|
+
|
|
108
110
|
</style>
|
|
@@ -12,11 +12,12 @@ let {
|
|
|
12
12
|
<div class="smrt-usage-thresholds" data-smrt-component="UsageThresholds">
|
|
13
13
|
{#each evaluations as evaluation (`${evaluation.threshold.metricKey}:${evaluation.usage.windowStart.toISOString()}`)}
|
|
14
14
|
<article
|
|
15
|
-
class:
|
|
16
|
-
class:
|
|
15
|
+
class:smrt-usage-thresholds__warn={evaluation.state === 'warn'}
|
|
16
|
+
class:smrt-usage-thresholds__blocked={evaluation.state === 'blocked'}
|
|
17
17
|
class="smrt-usage-thresholds__row"
|
|
18
|
+
data-smrt-part="row"
|
|
18
19
|
>
|
|
19
|
-
<div class="smrt-usage-thresholds__header">
|
|
20
|
+
<div class="smrt-usage-thresholds__header" data-smrt-part="header">
|
|
20
21
|
<strong>{evaluation.threshold.label ?? evaluation.threshold.metricKey}</strong>
|
|
21
22
|
<span>{evaluation.usage.quantity} / {evaluation.threshold.limit}</span>
|
|
22
23
|
</div>
|
|
@@ -34,38 +35,41 @@ let {
|
|
|
34
35
|
|
|
35
36
|
<style>
|
|
36
37
|
@layer smrt.reset, smrt.structure, smrt.theme;
|
|
37
|
-
@layer smrt.
|
|
38
|
+
@layer smrt.structure {
|
|
38
39
|
.smrt-usage-thresholds {
|
|
39
40
|
display: grid;
|
|
40
41
|
gap: 0.75rem;
|
|
41
42
|
}
|
|
42
|
-
|
|
43
43
|
.smrt-usage-thresholds__row {
|
|
44
|
-
border: var(--smrt-hairline);
|
|
45
|
-
border-radius: var(--smrt-radius-md);
|
|
46
44
|
display: grid;
|
|
47
45
|
gap: 0.45rem;
|
|
48
46
|
padding: 0.875rem;
|
|
49
47
|
}
|
|
50
|
-
|
|
51
|
-
.smrt-usage-thresholds__row.warn {
|
|
52
|
-
border-color: var(--smrt-color-warning);
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
.smrt-usage-thresholds__row.blocked {
|
|
56
|
-
border-color: var(--smrt-color-error);
|
|
57
|
-
}
|
|
58
|
-
|
|
59
48
|
.smrt-usage-thresholds__header {
|
|
60
49
|
align-items: center;
|
|
61
50
|
display: flex;
|
|
62
51
|
justify-content: space-between;
|
|
63
52
|
}
|
|
53
|
+
.smrt-usage-thresholds p {
|
|
54
|
+
margin: 0;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
64
57
|
|
|
58
|
+
@layer smrt.theme {
|
|
59
|
+
.smrt-usage-thresholds__row {
|
|
60
|
+
border: var(--smrt-hairline);
|
|
61
|
+
border-radius: var(--smrt-radius-md);
|
|
62
|
+
}
|
|
63
|
+
.smrt-usage-thresholds__row.smrt-usage-thresholds__warn {
|
|
64
|
+
border-color: var(--smrt-color-warning);
|
|
65
|
+
}
|
|
66
|
+
.smrt-usage-thresholds__row.smrt-usage-thresholds__blocked {
|
|
67
|
+
border-color: var(--smrt-color-error);
|
|
68
|
+
}
|
|
65
69
|
.smrt-usage-thresholds p {
|
|
66
70
|
color: var(--smrt-color-on-surface-variant);
|
|
67
71
|
font-size: var(--smrt-typography-body-medium-size, 0.875rem);
|
|
68
|
-
margin: 0;
|
|
69
72
|
}
|
|
70
73
|
}
|
|
74
|
+
|
|
71
75
|
</style>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@happyvertical/smrt-subscriptions",
|
|
3
|
-
"version": "0.60.
|
|
3
|
+
"version": "0.60.18",
|
|
4
4
|
"description": "Tenant subscriptions, entitlement resolution, usage thresholds, and subscription UI for SMRT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"smrtRawPrimitives": "strict",
|
|
@@ -26,11 +26,11 @@
|
|
|
26
26
|
}
|
|
27
27
|
},
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"@happyvertical/smrt-core": "0.60.
|
|
30
|
-
"@happyvertical/smrt-tenancy": "0.60.
|
|
31
|
-
"@happyvertical/smrt-ui": "0.60.
|
|
32
|
-
"@happyvertical/smrt-users": "0.60.
|
|
33
|
-
"@happyvertical/sql": "^0.
|
|
29
|
+
"@happyvertical/smrt-core": "0.60.18",
|
|
30
|
+
"@happyvertical/smrt-tenancy": "0.60.18",
|
|
31
|
+
"@happyvertical/smrt-ui": "0.60.18",
|
|
32
|
+
"@happyvertical/smrt-users": "0.60.18",
|
|
33
|
+
"@happyvertical/sql": "^0.112.2"
|
|
34
34
|
},
|
|
35
35
|
"peerDependencies": {
|
|
36
36
|
"svelte": "^5.57.0"
|
|
@@ -41,9 +41,9 @@
|
|
|
41
41
|
}
|
|
42
42
|
},
|
|
43
43
|
"devDependencies": {
|
|
44
|
-
"@happyvertical/accounting": "^0.
|
|
45
|
-
"@happyvertical/smrt-features": "0.60.
|
|
46
|
-
"@happyvertical/smrt-vitest": "0.60.
|
|
44
|
+
"@happyvertical/accounting": "^0.112.2",
|
|
45
|
+
"@happyvertical/smrt-features": "0.60.18",
|
|
46
|
+
"@happyvertical/smrt-vitest": "0.60.18",
|
|
47
47
|
"@sveltejs/package": "^2.5.8",
|
|
48
48
|
"@types/node": "24.13.6",
|
|
49
49
|
"svelte": "^5.57.1",
|