@mieweb/ui 0.10.0-dev.24 → 0.10.0-dev.25
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/brands/bluehive.cjs +3 -3
- package/dist/brands/bluehive.css +3 -0
- package/dist/brands/bluehive.js +1 -1
- package/dist/brands/index.cjs +9 -9
- package/dist/brands/index.js +3 -3
- package/dist/{chunk-YQDA366U.js → chunk-33DEVA3P.js} +2 -2
- package/dist/{chunk-YQDA366U.js.map → chunk-33DEVA3P.js.map} +1 -1
- package/dist/{chunk-WNJRS7Y7.cjs → chunk-3ZWCIPFT.cjs} +4 -2
- package/dist/chunk-3ZWCIPFT.cjs.map +1 -0
- package/dist/{chunk-J5CSLNCN.cjs → chunk-6VFDHJSO.cjs} +2 -2
- package/dist/{chunk-J5CSLNCN.cjs.map → chunk-6VFDHJSO.cjs.map} +1 -1
- package/dist/{chunk-ZTW4KODY.js → chunk-6ZPTZTKN.js} +3 -3
- package/dist/{chunk-ZTW4KODY.js.map → chunk-6ZPTZTKN.js.map} +1 -1
- package/dist/{chunk-SQ2D7AON.cjs → chunk-AAYXCZMV.cjs} +6 -6
- package/dist/{chunk-SQ2D7AON.cjs.map → chunk-AAYXCZMV.cjs.map} +1 -1
- package/dist/{chunk-WCDJFMZO.cjs → chunk-ADW7ZYCY.cjs} +1235 -495
- package/dist/chunk-ADW7ZYCY.cjs.map +1 -0
- package/dist/{chunk-2G75X6TS.cjs → chunk-AHHFFXJR.cjs} +3 -3
- package/dist/{chunk-2G75X6TS.cjs.map → chunk-AHHFFXJR.cjs.map} +1 -1
- package/dist/{chunk-HQ4CGVWX.cjs → chunk-B2X732V3.cjs} +7 -7
- package/dist/{chunk-HQ4CGVWX.cjs.map → chunk-B2X732V3.cjs.map} +1 -1
- package/dist/{chunk-UAMXCMST.cjs → chunk-CFI3TQMA.cjs} +3 -3
- package/dist/{chunk-UAMXCMST.cjs.map → chunk-CFI3TQMA.cjs.map} +1 -1
- package/dist/{chunk-2ABWFQQH.js → chunk-CRS2CQWM.js} +4 -4
- package/dist/{chunk-2ABWFQQH.js.map → chunk-CRS2CQWM.js.map} +1 -1
- package/dist/{chunk-MZNCLXXU.js → chunk-D22GE27K.js} +3 -3
- package/dist/{chunk-MZNCLXXU.js.map → chunk-D22GE27K.js.map} +1 -1
- package/dist/{chunk-IH55BEB3.js → chunk-DZFGTWYF.js} +6 -6
- package/dist/{chunk-IH55BEB3.js.map → chunk-DZFGTWYF.js.map} +1 -1
- package/dist/{chunk-TF7YWJHU.js → chunk-E2PBPQGS.js} +3 -3
- package/dist/{chunk-TF7YWJHU.js.map → chunk-E2PBPQGS.js.map} +1 -1
- package/dist/chunk-FBCDYTWM.js +385 -0
- package/dist/chunk-FBCDYTWM.js.map +1 -0
- package/dist/{chunk-R2O72G6Z.cjs → chunk-HC3NAN55.cjs} +7 -7
- package/dist/{chunk-R2O72G6Z.cjs.map → chunk-HC3NAN55.cjs.map} +1 -1
- package/dist/{chunk-DSB4DKWG.js → chunk-K34DXMLZ.js} +2 -2
- package/dist/{chunk-DSB4DKWG.js.map → chunk-K34DXMLZ.js.map} +1 -1
- package/dist/{chunk-Z5V7SAZ4.js → chunk-KFEN2SRZ.js} +3 -3
- package/dist/{chunk-Z5V7SAZ4.js.map → chunk-KFEN2SRZ.js.map} +1 -1
- package/dist/{chunk-MQPG3KVK.cjs → chunk-KGKBZN3T.cjs} +2 -2
- package/dist/{chunk-MQPG3KVK.cjs.map → chunk-KGKBZN3T.cjs.map} +1 -1
- package/dist/{chunk-G45FBKKV.js → chunk-P4VGVJVI.js} +4 -4
- package/dist/{chunk-G45FBKKV.js.map → chunk-P4VGVJVI.js.map} +1 -1
- package/dist/{chunk-3T7QGLNB.js → chunk-PJEL5ZZV.js} +4 -2
- package/dist/chunk-PJEL5ZZV.js.map +1 -0
- package/dist/{chunk-LJZKEMAH.cjs → chunk-R5Z7AOVU.cjs} +10 -10
- package/dist/{chunk-LJZKEMAH.cjs.map → chunk-R5Z7AOVU.cjs.map} +1 -1
- package/dist/{chunk-RJ6NTJHC.js → chunk-SRMTRD7F.js} +3 -3
- package/dist/{chunk-RJ6NTJHC.js.map → chunk-SRMTRD7F.js.map} +1 -1
- package/dist/{chunk-KHSFJTEX.js → chunk-T4JYUICS.js} +1177 -444
- package/dist/chunk-T4JYUICS.js.map +1 -0
- package/dist/{chunk-NJ6MY6V5.js → chunk-T5BBZQ66.js} +3 -3
- package/dist/{chunk-NJ6MY6V5.js.map → chunk-T5BBZQ66.js.map} +1 -1
- package/dist/{chunk-VYPPQPSZ.cjs → chunk-TJCX4OML.cjs} +3 -3
- package/dist/{chunk-VYPPQPSZ.cjs.map → chunk-TJCX4OML.cjs.map} +1 -1
- package/dist/{chunk-TAXD5ADA.cjs → chunk-UEDTZYGI.cjs} +3 -3
- package/dist/{chunk-TAXD5ADA.cjs.map → chunk-UEDTZYGI.cjs.map} +1 -1
- package/dist/{chunk-UQ3VVR6A.cjs → chunk-UPWIJC6I.cjs} +3 -3
- package/dist/{chunk-UQ3VVR6A.cjs.map → chunk-UPWIJC6I.cjs.map} +1 -1
- package/dist/{chunk-QNDP6PE5.cjs → chunk-VCCGR4J3.cjs} +92 -3
- package/dist/chunk-VCCGR4J3.cjs.map +1 -0
- package/dist/{chunk-S7WCHDBO.js → chunk-VCI2Y7ST.js} +3 -3
- package/dist/{chunk-S7WCHDBO.js.map → chunk-VCI2Y7ST.js.map} +1 -1
- package/dist/{chunk-Z4JR23IB.cjs → chunk-VOQJHSXN.cjs} +9 -9
- package/dist/{chunk-Z4JR23IB.cjs.map → chunk-VOQJHSXN.cjs.map} +1 -1
- package/dist/{chunk-EK3BCET6.js → chunk-WFVE36PO.js} +92 -3
- package/dist/chunk-WFVE36PO.js.map +1 -0
- package/dist/chunk-XI74P5F2.cjs +424 -0
- package/dist/chunk-XI74P5F2.cjs.map +1 -0
- package/dist/components/BoardView/index.d.cts +2 -90
- package/dist/components/BoardView/index.d.ts +2 -90
- package/dist/components/CalendarView/index.d.cts +1 -1
- package/dist/components/CalendarView/index.d.ts +1 -1
- package/dist/components/CountryCodeDropdown/index.cjs +5 -5
- package/dist/components/CountryCodeDropdown/index.js +2 -2
- package/dist/components/Dropdown/index.cjs +9 -9
- package/dist/components/Dropdown/index.js +2 -2
- package/dist/components/GanttView/index.d.cts +1 -1
- package/dist/components/GanttView/index.d.ts +1 -1
- package/dist/components/GlossaryTooltip/index.cjs +3 -3
- package/dist/components/GlossaryTooltip/index.js +2 -2
- package/dist/components/Markdown/index.cjs +15 -15
- package/dist/components/Markdown/index.js +3 -3
- package/dist/components/MediaEditor/index.cjs +10 -10
- package/dist/components/MediaEditor/index.js +5 -5
- package/dist/components/RadialExplorer/index.cjs +1 -1
- package/dist/components/RadialExplorer/index.js +1 -1
- package/dist/components/RichTextEditor/index.cjs +6 -6
- package/dist/components/RichTextEditor/index.js +3 -3
- package/dist/components/Select/index.cjs +4 -4
- package/dist/components/Select/index.js +2 -2
- package/dist/components/SourceTip/index.cjs +3 -3
- package/dist/components/SourceTip/index.js +2 -2
- package/dist/components/SuperChat/index.cjs +11 -11
- package/dist/components/SuperChat/index.js +4 -4
- package/dist/components/SuperChat/plugins/index.cjs +5 -5
- package/dist/components/SuperChat/plugins/index.js +4 -4
- package/dist/components/ViewSet/index.d.cts +1 -101
- package/dist/components/ViewSet/index.d.ts +1 -101
- package/dist/components/ViewSwitcher/index.d.cts +4 -57
- package/dist/components/ViewSwitcher/index.d.ts +4 -57
- package/dist/datavis.cjs +1 -1
- package/dist/datavis.js +1 -1
- package/dist/deck.cjs +3360 -0
- package/dist/deck.cjs.map +1 -0
- package/dist/deck.d.cts +712 -0
- package/dist/deck.d.ts +712 -0
- package/dist/deck.js +3316 -0
- package/dist/deck.js.map +1 -0
- package/dist/esheet.cjs +10 -10
- package/dist/esheet.js +7 -7
- package/dist/hooks/index.cjs +15 -15
- package/dist/hooks/index.js +3 -3
- package/dist/icons-wBacj6BW.d.cts +142 -0
- package/dist/icons-wBacj6BW.d.ts +142 -0
- package/dist/index-DoYYWsNc.d.cts +127 -0
- package/dist/index-DoYYWsNc.d.ts +127 -0
- package/dist/index.cjs +604 -551
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +313 -4
- package/dist/index.d.ts +313 -4
- package/dist/index.js +60 -59
- package/dist/index.js.map +1 -1
- package/dist/maps.cjs +160 -0
- package/dist/maps.cjs.map +1 -0
- package/dist/maps.d.cts +42 -0
- package/dist/maps.d.ts +42 -0
- package/dist/maps.js +138 -0
- package/dist/maps.js.map +1 -0
- package/dist/styles/effects.css +100 -0
- package/dist/styles/init.css +3 -0
- package/dist/styles.css +1 -1
- package/dist/tailwind-preset.cjs +4 -4
- package/dist/tailwind-preset.js +1 -1
- package/dist/templates.cjs +82 -29
- package/dist/templates.d.cts +316 -142
- package/dist/templates.d.ts +316 -142
- package/dist/templates.js +2 -1
- package/dist/{types-C3HQe74F.d.cts → types-DsdZvEI1.d.cts} +7 -1
- package/dist/{types-C3HQe74F.d.ts → types-DsdZvEI1.d.ts} +7 -1
- package/package.json +27 -1
- package/dist/chunk-3T7QGLNB.js.map +0 -1
- package/dist/chunk-EK3BCET6.js.map +0 -1
- package/dist/chunk-KHSFJTEX.js.map +0 -1
- package/dist/chunk-QNDP6PE5.cjs.map +0 -1
- package/dist/chunk-WCDJFMZO.cjs.map +0 -1
- package/dist/chunk-WNJRS7Y7.cjs.map +0 -1
|
@@ -0,0 +1,424 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkDXEPYK3I_cjs = require('./chunk-DXEPYK3I.cjs');
|
|
4
|
+
var chunkS5RVSXDV_cjs = require('./chunk-S5RVSXDV.cjs');
|
|
5
|
+
var React2 = require('react');
|
|
6
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
7
|
+
var lucideReact = require('lucide-react');
|
|
8
|
+
|
|
9
|
+
function _interopNamespace(e) {
|
|
10
|
+
if (e && e.__esModule) return e;
|
|
11
|
+
var n = Object.create(null);
|
|
12
|
+
if (e) {
|
|
13
|
+
Object.keys(e).forEach(function (k) {
|
|
14
|
+
if (k !== 'default') {
|
|
15
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
16
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
17
|
+
enumerable: true,
|
|
18
|
+
get: function () { return e[k]; }
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
n.default = e;
|
|
24
|
+
return Object.freeze(n);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
var React2__namespace = /*#__PURE__*/_interopNamespace(React2);
|
|
28
|
+
|
|
29
|
+
var defaultMetricStatusLabels = {
|
|
30
|
+
live: "Live data",
|
|
31
|
+
modeled: "Modeled",
|
|
32
|
+
maturing: "Data maturing"
|
|
33
|
+
};
|
|
34
|
+
var dotClass = {
|
|
35
|
+
live: "bg-success",
|
|
36
|
+
modeled: "bg-info",
|
|
37
|
+
maturing: "bg-warning"
|
|
38
|
+
};
|
|
39
|
+
var MetricStatusBadge = React2__namespace.forwardRef(({ status, label, onDark, className, ...rest }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
40
|
+
"span",
|
|
41
|
+
{
|
|
42
|
+
ref,
|
|
43
|
+
"data-slot": "metric-status-badge",
|
|
44
|
+
"data-status": status,
|
|
45
|
+
className: chunkS5RVSXDV_cjs.cn(
|
|
46
|
+
"inline-flex items-center gap-1.5 rounded-full border px-2.5 py-0.5 text-xs font-medium",
|
|
47
|
+
onDark ? "border-white/20 bg-white/10 text-white" : "border-border bg-card text-foreground",
|
|
48
|
+
className
|
|
49
|
+
),
|
|
50
|
+
...rest,
|
|
51
|
+
children: [
|
|
52
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
53
|
+
"span",
|
|
54
|
+
{
|
|
55
|
+
"aria-hidden": "true",
|
|
56
|
+
className: chunkS5RVSXDV_cjs.cn("size-1.5 rounded-full", dotClass[status])
|
|
57
|
+
}
|
|
58
|
+
),
|
|
59
|
+
label ?? defaultMetricStatusLabels[status]
|
|
60
|
+
]
|
|
61
|
+
}
|
|
62
|
+
));
|
|
63
|
+
MetricStatusBadge.displayName = "MetricStatusBadge";
|
|
64
|
+
|
|
65
|
+
// src/utils/own.ts
|
|
66
|
+
function ownProperty(map, key) {
|
|
67
|
+
return map != null && Object.hasOwn(map, key) ? map[key] : void 0;
|
|
68
|
+
}
|
|
69
|
+
var templateIcons = {
|
|
70
|
+
activity: lucideReact.Activity,
|
|
71
|
+
award: lucideReact.Award,
|
|
72
|
+
"badge-check": lucideReact.BadgeCheck,
|
|
73
|
+
bell: lucideReact.Bell,
|
|
74
|
+
briefcase: lucideReact.Briefcase,
|
|
75
|
+
building: lucideReact.Building2,
|
|
76
|
+
calendar: lucideReact.Calendar,
|
|
77
|
+
"calendar-check": lucideReact.CalendarCheck,
|
|
78
|
+
"chart-column": lucideReact.ChartColumn,
|
|
79
|
+
"chart-line": lucideReact.ChartLine,
|
|
80
|
+
"circle-check": lucideReact.CircleCheck,
|
|
81
|
+
"clipboard-check": lucideReact.ClipboardCheck,
|
|
82
|
+
clock: lucideReact.Clock,
|
|
83
|
+
cloud: lucideReact.Cloud,
|
|
84
|
+
database: lucideReact.Database,
|
|
85
|
+
"dollar-sign": lucideReact.DollarSign,
|
|
86
|
+
factory: lucideReact.Factory,
|
|
87
|
+
"file-text": lucideReact.FileText,
|
|
88
|
+
flask: lucideReact.FlaskConical,
|
|
89
|
+
globe: lucideReact.Globe,
|
|
90
|
+
"graduation-cap": lucideReact.GraduationCap,
|
|
91
|
+
handshake: lucideReact.Handshake,
|
|
92
|
+
"hard-hat": lucideReact.HardHat,
|
|
93
|
+
headset: lucideReact.Headset,
|
|
94
|
+
"heart-pulse": lucideReact.HeartPulse,
|
|
95
|
+
hospital: lucideReact.Hospital,
|
|
96
|
+
layers: lucideReact.Layers,
|
|
97
|
+
leaf: lucideReact.Leaf,
|
|
98
|
+
lightbulb: lucideReact.Lightbulb,
|
|
99
|
+
lock: lucideReact.Lock,
|
|
100
|
+
mail: lucideReact.Mail,
|
|
101
|
+
"map-pin": lucideReact.MapPin,
|
|
102
|
+
"message-square": lucideReact.MessageSquare,
|
|
103
|
+
microscope: lucideReact.Microscope,
|
|
104
|
+
phone: lucideReact.Phone,
|
|
105
|
+
plane: lucideReact.Plane,
|
|
106
|
+
plug: lucideReact.Plug,
|
|
107
|
+
rocket: lucideReact.Rocket,
|
|
108
|
+
scale: lucideReact.Scale,
|
|
109
|
+
search: lucideReact.Search,
|
|
110
|
+
settings: lucideReact.Settings,
|
|
111
|
+
shield: lucideReact.Shield,
|
|
112
|
+
"shield-check": lucideReact.ShieldCheck,
|
|
113
|
+
smartphone: lucideReact.Smartphone,
|
|
114
|
+
sparkles: lucideReact.Sparkles,
|
|
115
|
+
stethoscope: lucideReact.Stethoscope,
|
|
116
|
+
syringe: lucideReact.Syringe,
|
|
117
|
+
target: lucideReact.Target,
|
|
118
|
+
timer: lucideReact.Timer,
|
|
119
|
+
"trending-up": lucideReact.TrendingUp,
|
|
120
|
+
truck: lucideReact.Truck,
|
|
121
|
+
"user-check": lucideReact.UserCheck,
|
|
122
|
+
users: lucideReact.Users,
|
|
123
|
+
workflow: lucideReact.Workflow,
|
|
124
|
+
wrench: lucideReact.Wrench,
|
|
125
|
+
zap: lucideReact.Zap
|
|
126
|
+
};
|
|
127
|
+
function TemplateIcon({ name, icons, className }) {
|
|
128
|
+
const Icon = ownProperty(icons, name) ?? ownProperty(templateIcons, name);
|
|
129
|
+
if (Icon)
|
|
130
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
131
|
+
Icon,
|
|
132
|
+
{
|
|
133
|
+
"aria-hidden": "true",
|
|
134
|
+
strokeWidth: 1.75,
|
|
135
|
+
className: chunkS5RVSXDV_cjs.cn("size-5", className)
|
|
136
|
+
}
|
|
137
|
+
);
|
|
138
|
+
if (name.length <= 4)
|
|
139
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
140
|
+
"span",
|
|
141
|
+
{
|
|
142
|
+
"aria-hidden": "true",
|
|
143
|
+
className: chunkS5RVSXDV_cjs.cn("text-xs font-bold tracking-wide", className),
|
|
144
|
+
children: name
|
|
145
|
+
}
|
|
146
|
+
);
|
|
147
|
+
return null;
|
|
148
|
+
}
|
|
149
|
+
var toneSurface = {
|
|
150
|
+
default: "bg-background text-foreground",
|
|
151
|
+
muted: "bg-muted text-foreground",
|
|
152
|
+
brand: "bg-primary-900 text-white"
|
|
153
|
+
};
|
|
154
|
+
var toneClass = (tone) => toneSurface[tone];
|
|
155
|
+
var cardClass = (tone) => tone === "brand" ? "border border-white/15 bg-white/5 text-white" : "border border-border bg-card text-card-foreground";
|
|
156
|
+
var mutedTextClass = (tone) => tone === "brand" ? "text-white/80" : tone === "muted" ? "text-foreground/80" : "text-muted-foreground";
|
|
157
|
+
var headingTextClass = (tone) => tone === "brand" ? "text-white" : "text-foreground";
|
|
158
|
+
var accentTextClass = (tone) => tone === "brand" ? "text-white" : "text-primary-800 dark:text-primary-300";
|
|
159
|
+
var containerClass = (width = "wide") => chunkS5RVSXDV_cjs.cn(
|
|
160
|
+
"mx-auto w-full px-4 sm:px-6 lg:px-8",
|
|
161
|
+
width === "narrow" ? "max-w-3xl" : "max-w-7xl"
|
|
162
|
+
);
|
|
163
|
+
var SAFE_HREF_SCHEME = /^(?:https?|mailto|tel):/i;
|
|
164
|
+
function safeHref(href) {
|
|
165
|
+
if (href == null) return void 0;
|
|
166
|
+
const stripped = href.replace(/[\u0000-\u0020]/g, "");
|
|
167
|
+
if (!stripped) return void 0;
|
|
168
|
+
if (!/^[a-z][a-z0-9+.-]*:/i.test(stripped)) return href;
|
|
169
|
+
return SAFE_HREF_SCHEME.test(stripped) ? href : void 0;
|
|
170
|
+
}
|
|
171
|
+
function TemplateAnchor({
|
|
172
|
+
components,
|
|
173
|
+
trackingId,
|
|
174
|
+
children,
|
|
175
|
+
...props
|
|
176
|
+
}) {
|
|
177
|
+
const Link = components?.Link;
|
|
178
|
+
const href = safeHref(props.href);
|
|
179
|
+
const all = { ...props, href, "data-track": trackingId };
|
|
180
|
+
return Link && href != null ? /* @__PURE__ */ jsxRuntime.jsx(Link, { ...all, href, children }) : /* @__PURE__ */ jsxRuntime.jsx("a", { ...all, children });
|
|
181
|
+
}
|
|
182
|
+
var fetchPriorityHigh = React2__namespace.version.startsWith("18.") ? { fetchpriority: "high" } : { fetchPriority: "high" };
|
|
183
|
+
function TemplateImg({
|
|
184
|
+
components,
|
|
185
|
+
priority,
|
|
186
|
+
...image
|
|
187
|
+
}) {
|
|
188
|
+
const Image = components?.Image;
|
|
189
|
+
if (Image) return /* @__PURE__ */ jsxRuntime.jsx(Image, { ...image, priority });
|
|
190
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
191
|
+
"img",
|
|
192
|
+
{
|
|
193
|
+
...image,
|
|
194
|
+
alt: image.alt,
|
|
195
|
+
loading: priority ? void 0 : "lazy",
|
|
196
|
+
...priority ? fetchPriorityHigh : {},
|
|
197
|
+
decoding: "async"
|
|
198
|
+
}
|
|
199
|
+
);
|
|
200
|
+
}
|
|
201
|
+
function SectionHeading({
|
|
202
|
+
eyebrow,
|
|
203
|
+
title,
|
|
204
|
+
description,
|
|
205
|
+
as: Heading = "h2",
|
|
206
|
+
size = "section",
|
|
207
|
+
align = "start",
|
|
208
|
+
tone = "default",
|
|
209
|
+
titleId,
|
|
210
|
+
className
|
|
211
|
+
}) {
|
|
212
|
+
if (!eyebrow && !title && !description) return null;
|
|
213
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
214
|
+
"div",
|
|
215
|
+
{
|
|
216
|
+
"data-slot": "section-heading",
|
|
217
|
+
className: chunkS5RVSXDV_cjs.cn(
|
|
218
|
+
"max-w-3xl",
|
|
219
|
+
align === "center" && "mx-auto text-center",
|
|
220
|
+
className
|
|
221
|
+
),
|
|
222
|
+
children: [
|
|
223
|
+
eyebrow && /* @__PURE__ */ jsxRuntime.jsx(
|
|
224
|
+
"p",
|
|
225
|
+
{
|
|
226
|
+
className: chunkS5RVSXDV_cjs.cn(
|
|
227
|
+
"mb-3 text-sm font-semibold tracking-wider uppercase",
|
|
228
|
+
accentTextClass(tone)
|
|
229
|
+
),
|
|
230
|
+
children: eyebrow
|
|
231
|
+
}
|
|
232
|
+
),
|
|
233
|
+
title && /* @__PURE__ */ jsxRuntime.jsx(
|
|
234
|
+
Heading,
|
|
235
|
+
{
|
|
236
|
+
id: titleId,
|
|
237
|
+
className: chunkS5RVSXDV_cjs.cn(
|
|
238
|
+
"font-bold tracking-tight text-balance",
|
|
239
|
+
headingTextClass(tone),
|
|
240
|
+
size === "hero" ? "text-4xl sm:text-5xl lg:text-6xl" : "text-3xl sm:text-4xl"
|
|
241
|
+
),
|
|
242
|
+
children: title
|
|
243
|
+
}
|
|
244
|
+
),
|
|
245
|
+
description && /* @__PURE__ */ jsxRuntime.jsx(
|
|
246
|
+
"p",
|
|
247
|
+
{
|
|
248
|
+
className: chunkS5RVSXDV_cjs.cn(
|
|
249
|
+
"mt-4 text-pretty",
|
|
250
|
+
size === "hero" ? "text-lg sm:text-xl" : "text-lg",
|
|
251
|
+
mutedTextClass(tone)
|
|
252
|
+
),
|
|
253
|
+
children: description
|
|
254
|
+
}
|
|
255
|
+
)
|
|
256
|
+
]
|
|
257
|
+
}
|
|
258
|
+
);
|
|
259
|
+
}
|
|
260
|
+
var SectionShell = React2__namespace.forwardRef(
|
|
261
|
+
({
|
|
262
|
+
eyebrow,
|
|
263
|
+
title,
|
|
264
|
+
description,
|
|
265
|
+
tone = "default",
|
|
266
|
+
align = "start",
|
|
267
|
+
width = "wide",
|
|
268
|
+
spacing = "default",
|
|
269
|
+
status,
|
|
270
|
+
statusLabels,
|
|
271
|
+
className,
|
|
272
|
+
children,
|
|
273
|
+
components,
|
|
274
|
+
...rest
|
|
275
|
+
}, ref) => {
|
|
276
|
+
const titleId = React2__namespace.useId();
|
|
277
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
278
|
+
"section",
|
|
279
|
+
{
|
|
280
|
+
ref,
|
|
281
|
+
"data-slot": "landing-section",
|
|
282
|
+
"data-tone": tone,
|
|
283
|
+
"aria-labelledby": title ? titleId : void 0,
|
|
284
|
+
className: chunkS5RVSXDV_cjs.cn(
|
|
285
|
+
spacing === "compact" ? "py-10 sm:py-14" : "py-16 sm:py-24",
|
|
286
|
+
toneClass(tone),
|
|
287
|
+
className
|
|
288
|
+
),
|
|
289
|
+
...rest,
|
|
290
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: containerClass(width), children: [
|
|
291
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
292
|
+
SectionHeading,
|
|
293
|
+
{
|
|
294
|
+
eyebrow,
|
|
295
|
+
title,
|
|
296
|
+
description,
|
|
297
|
+
align,
|
|
298
|
+
tone,
|
|
299
|
+
titleId,
|
|
300
|
+
className: chunkS5RVSXDV_cjs.cn(width === "narrow" && "max-w-none")
|
|
301
|
+
}
|
|
302
|
+
),
|
|
303
|
+
status && /* @__PURE__ */ jsxRuntime.jsx(
|
|
304
|
+
"div",
|
|
305
|
+
{
|
|
306
|
+
className: chunkS5RVSXDV_cjs.cn(
|
|
307
|
+
"mt-4 flex",
|
|
308
|
+
align === "center" && "justify-center"
|
|
309
|
+
),
|
|
310
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
311
|
+
MetricStatusBadge,
|
|
312
|
+
{
|
|
313
|
+
status,
|
|
314
|
+
label: statusLabels?.[status],
|
|
315
|
+
onDark: tone === "brand"
|
|
316
|
+
}
|
|
317
|
+
)
|
|
318
|
+
}
|
|
319
|
+
),
|
|
320
|
+
children
|
|
321
|
+
] })
|
|
322
|
+
}
|
|
323
|
+
);
|
|
324
|
+
}
|
|
325
|
+
);
|
|
326
|
+
SectionShell.displayName = "SectionShell";
|
|
327
|
+
function CtaLinks({
|
|
328
|
+
primary,
|
|
329
|
+
secondary,
|
|
330
|
+
tone = "default",
|
|
331
|
+
align = "start",
|
|
332
|
+
className,
|
|
333
|
+
components
|
|
334
|
+
}) {
|
|
335
|
+
if (!primary && !secondary) return null;
|
|
336
|
+
const onBrand = tone === "brand";
|
|
337
|
+
const wrap = "h-auto min-h-12 py-3 whitespace-normal text-center";
|
|
338
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
339
|
+
"div",
|
|
340
|
+
{
|
|
341
|
+
"data-slot": "cta-links",
|
|
342
|
+
className: chunkS5RVSXDV_cjs.cn(
|
|
343
|
+
"flex flex-col gap-3 sm:flex-row sm:flex-wrap",
|
|
344
|
+
align === "center" && "sm:justify-center",
|
|
345
|
+
className
|
|
346
|
+
),
|
|
347
|
+
children: [
|
|
348
|
+
primary && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
349
|
+
TemplateAnchor,
|
|
350
|
+
{
|
|
351
|
+
href: primary.href,
|
|
352
|
+
trackingId: primary.trackingId,
|
|
353
|
+
components,
|
|
354
|
+
"data-slot": "cta-primary",
|
|
355
|
+
className: chunkS5RVSXDV_cjs.cn(
|
|
356
|
+
chunkDXEPYK3I_cjs.buttonVariants({ variant: "primary", size: "lg" }),
|
|
357
|
+
wrap,
|
|
358
|
+
onBrand && "text-primary-900 hover:bg-primary-50 active:bg-primary-100 bg-white"
|
|
359
|
+
),
|
|
360
|
+
children: [
|
|
361
|
+
primary.label,
|
|
362
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ArrowRight, { "aria-hidden": "true", className: "size-5 rtl:-scale-x-100" })
|
|
363
|
+
]
|
|
364
|
+
}
|
|
365
|
+
),
|
|
366
|
+
secondary && /* @__PURE__ */ jsxRuntime.jsx(
|
|
367
|
+
TemplateAnchor,
|
|
368
|
+
{
|
|
369
|
+
href: secondary.href,
|
|
370
|
+
trackingId: secondary.trackingId,
|
|
371
|
+
components,
|
|
372
|
+
"data-slot": "cta-secondary",
|
|
373
|
+
className: chunkS5RVSXDV_cjs.cn(
|
|
374
|
+
chunkDXEPYK3I_cjs.buttonVariants({ variant: "outline", size: "lg" }),
|
|
375
|
+
wrap,
|
|
376
|
+
onBrand && "border-white/70 text-white hover:bg-white/10 hover:text-white dark:border-white/70 dark:text-white dark:hover:bg-white/10"
|
|
377
|
+
),
|
|
378
|
+
children: secondary.label
|
|
379
|
+
}
|
|
380
|
+
)
|
|
381
|
+
]
|
|
382
|
+
}
|
|
383
|
+
);
|
|
384
|
+
}
|
|
385
|
+
function IconTile({
|
|
386
|
+
name,
|
|
387
|
+
icons,
|
|
388
|
+
tone = "default",
|
|
389
|
+
className
|
|
390
|
+
}) {
|
|
391
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
392
|
+
"span",
|
|
393
|
+
{
|
|
394
|
+
"data-slot": "icon-tile",
|
|
395
|
+
className: chunkS5RVSXDV_cjs.cn(
|
|
396
|
+
"inline-flex size-11 shrink-0 items-center justify-center rounded-xl",
|
|
397
|
+
tone === "brand" ? "bg-white/10 text-white" : "bg-primary-100 text-primary-900 dark:bg-primary-900/60 dark:text-primary-200",
|
|
398
|
+
className
|
|
399
|
+
),
|
|
400
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(TemplateIcon, { name, icons })
|
|
401
|
+
}
|
|
402
|
+
);
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
exports.CtaLinks = CtaLinks;
|
|
406
|
+
exports.IconTile = IconTile;
|
|
407
|
+
exports.MetricStatusBadge = MetricStatusBadge;
|
|
408
|
+
exports.SectionHeading = SectionHeading;
|
|
409
|
+
exports.SectionShell = SectionShell;
|
|
410
|
+
exports.TemplateAnchor = TemplateAnchor;
|
|
411
|
+
exports.TemplateIcon = TemplateIcon;
|
|
412
|
+
exports.TemplateImg = TemplateImg;
|
|
413
|
+
exports.accentTextClass = accentTextClass;
|
|
414
|
+
exports.cardClass = cardClass;
|
|
415
|
+
exports.containerClass = containerClass;
|
|
416
|
+
exports.defaultMetricStatusLabels = defaultMetricStatusLabels;
|
|
417
|
+
exports.headingTextClass = headingTextClass;
|
|
418
|
+
exports.mutedTextClass = mutedTextClass;
|
|
419
|
+
exports.ownProperty = ownProperty;
|
|
420
|
+
exports.safeHref = safeHref;
|
|
421
|
+
exports.templateIcons = templateIcons;
|
|
422
|
+
exports.toneClass = toneClass;
|
|
423
|
+
//# sourceMappingURL=chunk-XI74P5F2.cjs.map
|
|
424
|
+
//# sourceMappingURL=chunk-XI74P5F2.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/MetricStatusBadge/MetricStatusBadge.tsx","../src/utils/own.ts","../src/templates/icons.tsx","../src/templates/Section.tsx"],"names":["React","jsxs","cn","jsx","Activity","Award","BadgeCheck","Bell","Briefcase","Building2","Calendar","CalendarCheck","ChartColumn","ChartLine","CircleCheck","ClipboardCheck","Clock","Cloud","Database","DollarSign","Factory","FileText","FlaskConical","Globe","GraduationCap","Handshake","HardHat","Headset","HeartPulse","Hospital","Layers","Leaf","Lightbulb","Lock","Mail","MapPin","MessageSquare","Microscope","Phone","Plane","Plug","Rocket","Scale","Search","Settings","Shield","ShieldCheck","Smartphone","Sparkles","Stethoscope","Syringe","Target","Timer","TrendingUp","Truck","UserCheck","Users","Workflow","Wrench","Zap","React2","buttonVariants","ArrowRight"],"mappings":"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","file":"chunk-XI74P5F2.cjs","sourcesContent":["import * as React from 'react';\nimport { cn } from '../../utils/cn';\n\n/** Where a figure comes from: measured, estimated, or still being instrumented. */\nexport type MetricStatus = 'live' | 'modeled' | 'maturing';\n\n/** Translated badge text, per status. */\nexport type MetricStatusLabels = Partial<Record<MetricStatus, string>>;\n\nexport const defaultMetricStatusLabels: Record<MetricStatus, string> = {\n live: 'Live data',\n modeled: 'Modeled',\n maturing: 'Data maturing',\n};\n\nconst dotClass: Record<MetricStatus, string> = {\n live: 'bg-success',\n modeled: 'bg-info',\n maturing: 'bg-warning',\n};\n\nexport interface MetricStatusBadgeProps extends React.HTMLAttributes<HTMLSpanElement> {\n status: MetricStatus;\n /** Override the visible label, e.g. for translation. */\n label?: string;\n /** Set on dark or brand surfaces. */\n onDark?: boolean;\n}\n\n/** Labels a figure by provenance so readers can tell measured data from estimates. */\nexport const MetricStatusBadge = React.forwardRef<\n HTMLSpanElement,\n MetricStatusBadgeProps\n>(({ status, label, onDark, className, ...rest }, ref) => (\n <span\n ref={ref}\n data-slot=\"metric-status-badge\"\n data-status={status}\n className={cn(\n 'inline-flex items-center gap-1.5 rounded-full border px-2.5 py-0.5 text-xs font-medium',\n onDark\n ? 'border-white/20 bg-white/10 text-white'\n : 'border-border bg-card text-foreground',\n className\n )}\n {...rest}\n >\n <span\n aria-hidden=\"true\"\n className={cn('size-1.5 rounded-full', dotClass[status])}\n />\n {label ?? defaultMetricStatusLabels[status]}\n </span>\n));\nMetricStatusBadge.displayName = 'MetricStatusBadge';\n","/**\n * `map[key]` restricted to own properties. Runtime page/CMS data supplies the\n * key, and a plain bracket lookup would also reach inherited\n * `Object.prototype` members — `\"toString\"` or `\"constructor\"` must resolve to\n * \"unknown\", not to a built-in function React then tries to render or call.\n */\nexport function ownProperty<T>(\n map: Record<string, T> | undefined,\n key: string\n): T | undefined {\n return map != null && Object.hasOwn(map, key) ? map[key] : undefined;\n}\n","import type * as React from 'react';\nimport {\n Activity,\n Award,\n BadgeCheck,\n Bell,\n Briefcase,\n Building2,\n Calendar,\n CalendarCheck,\n ChartColumn,\n ChartLine,\n CircleCheck,\n ClipboardCheck,\n Clock,\n Cloud,\n Database,\n DollarSign,\n Factory,\n FileText,\n FlaskConical,\n Globe,\n GraduationCap,\n Handshake,\n HardHat,\n Headset,\n HeartPulse,\n Hospital,\n Layers,\n Leaf,\n Lightbulb,\n Lock,\n Mail,\n MapPin,\n MessageSquare,\n Microscope,\n Phone,\n Plane,\n Plug,\n Rocket,\n Scale,\n Search,\n Settings,\n Shield,\n ShieldCheck,\n Smartphone,\n Sparkles,\n Stethoscope,\n Syringe,\n Target,\n Timer,\n TrendingUp,\n Truck,\n UserCheck,\n Users,\n Workflow,\n Wrench,\n Zap,\n} from 'lucide-react';\nimport { cn } from '../utils/cn';\nimport { ownProperty } from '../utils/own';\n\nexport type TemplateIconComponent = React.ComponentType<{\n className?: string;\n strokeWidth?: number;\n 'aria-hidden'?: boolean | 'true' | 'false';\n}>;\n\n/** Extra icon tokens a site maps to its own components; merged over the built-ins. */\nexport type TemplateIconRegistry = Record<string, TemplateIconComponent>;\n\n/**\n * Built-in icon tokens. Page data names an icon by token (`\"shield-check\"`)\n * rather than holding a component, so it stays JSON-serializable.\n */\nexport const templateIcons = {\n activity: Activity,\n award: Award,\n 'badge-check': BadgeCheck,\n bell: Bell,\n briefcase: Briefcase,\n building: Building2,\n calendar: Calendar,\n 'calendar-check': CalendarCheck,\n 'chart-column': ChartColumn,\n 'chart-line': ChartLine,\n 'circle-check': CircleCheck,\n 'clipboard-check': ClipboardCheck,\n clock: Clock,\n cloud: Cloud,\n database: Database,\n 'dollar-sign': DollarSign,\n factory: Factory,\n 'file-text': FileText,\n flask: FlaskConical,\n globe: Globe,\n 'graduation-cap': GraduationCap,\n handshake: Handshake,\n 'hard-hat': HardHat,\n headset: Headset,\n 'heart-pulse': HeartPulse,\n hospital: Hospital,\n layers: Layers,\n leaf: Leaf,\n lightbulb: Lightbulb,\n lock: Lock,\n mail: Mail,\n 'map-pin': MapPin,\n 'message-square': MessageSquare,\n microscope: Microscope,\n phone: Phone,\n plane: Plane,\n plug: Plug,\n rocket: Rocket,\n scale: Scale,\n search: Search,\n settings: Settings,\n shield: Shield,\n 'shield-check': ShieldCheck,\n smartphone: Smartphone,\n sparkles: Sparkles,\n stethoscope: Stethoscope,\n syringe: Syringe,\n target: Target,\n timer: Timer,\n 'trending-up': TrendingUp,\n truck: Truck,\n 'user-check': UserCheck,\n users: Users,\n workflow: Workflow,\n wrench: Wrench,\n zap: Zap,\n} satisfies TemplateIconRegistry;\n\nexport type TemplateIconName = keyof typeof templateIcons;\n\nexport interface TemplateIconProps {\n /** A built-in token, a token from `icons`, or a lettermark of up to four characters. */\n name: string;\n icons?: TemplateIconRegistry;\n className?: string;\n}\n\nexport function TemplateIcon({ name, icons, className }: TemplateIconProps) {\n // Icon names are page/CMS data — own properties only, or \"toString\" would\n // resolve to a prototype method instead of the lettermark/null fallback.\n const Icon =\n ownProperty(icons, name) ??\n ownProperty(templateIcons as TemplateIconRegistry, name);\n if (Icon)\n return (\n <Icon\n aria-hidden=\"true\"\n strokeWidth={1.75}\n className={cn('size-5', className)}\n />\n );\n if (name.length <= 4)\n return (\n <span\n aria-hidden=\"true\"\n className={cn('text-xs font-bold tracking-wide', className)}\n >\n {name}\n </span>\n );\n return null;\n}\n","import * as React from 'react';\nimport { ArrowRight } from 'lucide-react';\nimport { buttonVariants } from '../components/Button/button-variants';\nimport {\n MetricStatusBadge,\n type MetricStatus,\n type MetricStatusLabels,\n} from '../components/MetricStatusBadge/MetricStatusBadge';\nimport { cn } from '../utils/cn';\nimport { TemplateIcon, type TemplateIconRegistry } from './icons';\nimport type {\n SectionAlign,\n SectionTone,\n TemplateComponents,\n TemplateImageProps,\n TemplateLink,\n TemplateLinkProps,\n} from './types';\n\nconst toneSurface: Record<SectionTone, string> = {\n default: 'bg-background text-foreground',\n muted: 'bg-muted text-foreground',\n brand: 'bg-primary-900 text-white',\n};\n\nexport const toneClass = (tone: SectionTone) => toneSurface[tone];\n\n/** Card surface that reads correctly on the given section tone. */\nexport const cardClass = (tone: SectionTone) =>\n tone === 'brand'\n ? 'border border-white/15 bg-white/5 text-white'\n : 'border border-border bg-card text-card-foreground';\n\n// muted-foreground on bg-muted drops below AA in dark mode, so the muted tone mixes foreground instead.\nexport const mutedTextClass = (tone: SectionTone) =>\n tone === 'brand'\n ? 'text-white/80'\n : tone === 'muted'\n ? 'text-foreground/80'\n : 'text-muted-foreground';\n\n// Explicit, because host sites often colour h1–h4 in a base layer that beats inheritance.\nexport const headingTextClass = (tone: SectionTone) =>\n tone === 'brand' ? 'text-white' : 'text-foreground';\n\n// 800 (light) is the shade Button's primary fill already guarantees against white.\nexport const accentTextClass = (tone: SectionTone) =>\n tone === 'brand' ? 'text-white' : 'text-primary-800 dark:text-primary-300';\n\nexport const containerClass = (width: 'wide' | 'narrow' = 'wide') =>\n cn(\n 'mx-auto w-full px-4 sm:px-6 lg:px-8',\n width === 'narrow' ? 'max-w-3xl' : 'max-w-7xl'\n );\n\nconst SAFE_HREF_SCHEME = /^(?:https?|mailto|tel):/i;\n\n/**\n * A URL from page data, or `undefined` if its scheme is not http(s), mailto or\n * tel. Content/CMS URLs are untrusted, and a `javascript:` href is script\n * execution — React and site Link adapters render it verbatim.\n */\nexport function safeHref(href: string | undefined): string | undefined {\n if (href == null) return undefined;\n // Browsers drop tab/newline and leading controls when parsing, so\n // `java\\tscript:` still runs — match the scheme on the stripped value.\n // eslint-disable-next-line no-control-regex\n const stripped = href.replace(/[\\u0000-\\u0020]/g, '');\n // Blank means \"current document URL\" as a form action — not a real target.\n if (!stripped) return undefined;\n if (!/^[a-z][a-z0-9+.-]*:/i.test(stripped)) return href; // relative, hash, query, //\n return SAFE_HREF_SCHEME.test(stripped) ? href : undefined;\n}\n\n/** An anchor, or the site's `components.Link`, with `trackingId` as `data-track`. */\nexport function TemplateAnchor({\n components,\n trackingId,\n children,\n ...props\n}: TemplateLinkProps & {\n components?: TemplateComponents;\n trackingId?: string;\n}) {\n const Link = components?.Link;\n const href = safeHref(props.href);\n const all = { ...props, href, 'data-track': trackingId };\n // Adapters require an href (Next's Link throws), so a dropped one falls back\n // to an inert plain anchor.\n return Link && href != null ? (\n <Link {...all} href={href}>\n {children}\n </Link>\n ) : (\n <a {...all}>{children}</a>\n );\n}\n\n// React 18 only passes the lowercase attribute through; React 19 wants camelCase.\nconst fetchPriorityHigh = (\n React.version.startsWith('18.')\n ? { fetchpriority: 'high' }\n : { fetchPriority: 'high' }\n) as React.ImgHTMLAttributes<HTMLImageElement>;\n\n/** An `<img>`, or the site's `components.Image`. */\nexport function TemplateImg({\n components,\n priority,\n ...image\n}: TemplateImageProps & { components?: TemplateComponents }) {\n const Image = components?.Image;\n if (Image) return <Image {...image} priority={priority} />;\n return (\n <img\n {...image}\n alt={image.alt}\n loading={priority ? undefined : 'lazy'}\n {...(priority ? fetchPriorityHigh : {})}\n decoding=\"async\"\n />\n );\n}\n\nexport interface SectionHeadingProps {\n eyebrow?: string;\n title?: string;\n description?: string;\n /** Heading element. Sections use `h2`; only a page's hero is `h1`. */\n as?: 'h1' | 'h2' | 'h3';\n size?: 'section' | 'hero';\n align?: SectionAlign;\n tone?: SectionTone;\n titleId?: string;\n className?: string;\n}\n\n/** Eyebrow, heading and supporting text — the opener every landing section shares. */\nexport function SectionHeading({\n eyebrow,\n title,\n description,\n as: Heading = 'h2',\n size = 'section',\n align = 'start',\n tone = 'default',\n titleId,\n className,\n}: SectionHeadingProps) {\n if (!eyebrow && !title && !description) return null;\n return (\n <div\n data-slot=\"section-heading\"\n className={cn(\n 'max-w-3xl',\n align === 'center' && 'mx-auto text-center',\n className\n )}\n >\n {eyebrow && (\n <p\n className={cn(\n 'mb-3 text-sm font-semibold tracking-wider uppercase',\n accentTextClass(tone)\n )}\n >\n {eyebrow}\n </p>\n )}\n {title && (\n <Heading\n id={titleId}\n className={cn(\n 'font-bold tracking-tight text-balance',\n headingTextClass(tone),\n size === 'hero'\n ? 'text-4xl sm:text-5xl lg:text-6xl'\n : 'text-3xl sm:text-4xl'\n )}\n >\n {title}\n </Heading>\n )}\n {description && (\n <p\n className={cn(\n 'mt-4 text-pretty',\n size === 'hero' ? 'text-lg sm:text-xl' : 'text-lg',\n mutedTextClass(tone)\n )}\n >\n {description}\n </p>\n )}\n </div>\n );\n}\n\nexport interface SectionShellProps extends Omit<\n React.HTMLAttributes<HTMLElement>,\n 'title'\n> {\n eyebrow?: string;\n title?: string;\n description?: string;\n tone?: SectionTone;\n align?: SectionAlign;\n width?: 'wide' | 'narrow';\n spacing?: 'default' | 'compact';\n /** Provenance badge under the heading, for sections that report figures. */\n status?: MetricStatus;\n /** Translated text for the `status` badge. */\n statusLabels?: MetricStatusLabels;\n /** Accepted so sections can forward their props; the shell renders no links or images. */\n components?: TemplateComponents;\n}\n\n/**\n * The `<section>` + container + heading frame every landing section renders.\n * Exported so a site can build its own section that sits flush with the rest.\n */\nexport const SectionShell = React.forwardRef<HTMLElement, SectionShellProps>(\n (\n {\n eyebrow,\n title,\n description,\n tone = 'default',\n align = 'start',\n width = 'wide',\n spacing = 'default',\n status,\n statusLabels,\n className,\n children,\n components,\n ...rest\n },\n ref\n ) => {\n void components; // kept off the DOM\n const titleId = React.useId();\n return (\n <section\n ref={ref}\n data-slot=\"landing-section\"\n data-tone={tone}\n aria-labelledby={title ? titleId : undefined}\n className={cn(\n spacing === 'compact' ? 'py-10 sm:py-14' : 'py-16 sm:py-24',\n toneClass(tone),\n className\n )}\n {...rest}\n >\n <div className={containerClass(width)}>\n <SectionHeading\n eyebrow={eyebrow}\n title={title}\n description={description}\n align={align}\n tone={tone}\n titleId={titleId}\n className={cn(width === 'narrow' && 'max-w-none')}\n />\n {status && (\n <div\n className={cn(\n 'mt-4 flex',\n align === 'center' && 'justify-center'\n )}\n >\n <MetricStatusBadge\n status={status}\n label={statusLabels?.[status]}\n onDark={tone === 'brand'}\n />\n </div>\n )}\n {children}\n </div>\n </section>\n );\n }\n);\nSectionShell.displayName = 'SectionShell';\n\nexport interface CtaLinksProps {\n primary?: TemplateLink;\n secondary?: TemplateLink;\n tone?: SectionTone;\n align?: SectionAlign;\n className?: string;\n components?: TemplateComponents;\n}\n\n/** Primary + secondary calls to action as button-styled anchors. */\nexport function CtaLinks({\n primary,\n secondary,\n tone = 'default',\n align = 'start',\n className,\n components,\n}: CtaLinksProps) {\n if (!primary && !secondary) return null;\n const onBrand = tone === 'brand';\n // Long or translated labels must wrap rather than overflow on phones.\n const wrap = 'h-auto min-h-12 py-3 whitespace-normal text-center';\n return (\n <div\n data-slot=\"cta-links\"\n className={cn(\n 'flex flex-col gap-3 sm:flex-row sm:flex-wrap',\n align === 'center' && 'sm:justify-center',\n className\n )}\n >\n {primary && (\n <TemplateAnchor\n href={primary.href}\n trackingId={primary.trackingId}\n components={components}\n data-slot=\"cta-primary\"\n className={cn(\n buttonVariants({ variant: 'primary', size: 'lg' }),\n wrap,\n onBrand &&\n 'text-primary-900 hover:bg-primary-50 active:bg-primary-100 bg-white'\n )}\n >\n {primary.label}\n <ArrowRight aria-hidden=\"true\" className=\"size-5 rtl:-scale-x-100\" />\n </TemplateAnchor>\n )}\n {secondary && (\n <TemplateAnchor\n href={secondary.href}\n trackingId={secondary.trackingId}\n components={components}\n data-slot=\"cta-secondary\"\n className={cn(\n buttonVariants({ variant: 'outline', size: 'lg' }),\n wrap,\n onBrand &&\n 'border-white/70 text-white hover:bg-white/10 hover:text-white dark:border-white/70 dark:text-white dark:hover:bg-white/10'\n )}\n >\n {secondary.label}\n </TemplateAnchor>\n )}\n </div>\n );\n}\n\nexport interface IconTileProps {\n name: string;\n icons?: TemplateIconRegistry;\n tone?: SectionTone;\n className?: string;\n}\n\nexport function IconTile({\n name,\n icons,\n tone = 'default',\n className,\n}: IconTileProps) {\n return (\n <span\n data-slot=\"icon-tile\"\n className={cn(\n 'inline-flex size-11 shrink-0 items-center justify-center rounded-xl',\n tone === 'brand'\n ? 'bg-white/10 text-white'\n : 'bg-primary-100 text-primary-900 dark:bg-primary-900/60 dark:text-primary-200',\n className\n )}\n >\n <TemplateIcon name={name} icons={icons} />\n </span>\n );\n}\n"]}
|
|
@@ -1,96 +1,8 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
2
|
import * as class_variance_authority_types from 'class-variance-authority/types';
|
|
3
3
|
import { VariantProps } from 'class-variance-authority';
|
|
4
|
-
import
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* The contract every component in the `Modules/Views` family reads through.
|
|
8
|
-
*
|
|
9
|
-
* A page describes its collection once — which field is the id, the title, the
|
|
10
|
-
* status, the start date — and every view understands it. That is the whole
|
|
11
|
-
* reason the family exists: without it each view needs its own adapter and you
|
|
12
|
-
* end up re-implementing the same board per entity.
|
|
13
|
-
*
|
|
14
|
-
* Views are headless. Nothing here fetches, subscribes, or navigates.
|
|
15
|
-
* See CONTRIBUTING → "Modules: headless data components".
|
|
16
|
-
*/
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Which layout is on screen. `overview` and `table` are rendered by the host
|
|
20
|
-
* through `ViewSet` slots rather than by a component in this family — a tabular
|
|
21
|
-
* collection is `DataVisNitroGrid`, and an overview is domain content.
|
|
22
|
-
*/
|
|
23
|
-
type ViewId = 'overview' | 'list' | 'board' | 'calendar' | 'gantt' | 'roadmap' | 'table';
|
|
24
|
-
/**
|
|
25
|
-
* A semantic colour name, resolved to `--mieweb-*` tokens by each view.
|
|
26
|
-
*
|
|
27
|
-
* Accessors return one of these rather than a class string so a caller cannot
|
|
28
|
-
* hardcode a palette that breaks under another brand or in dark mode.
|
|
29
|
-
*/
|
|
30
|
-
type Accent = 'primary' | 'success' | 'warning' | 'destructive' | 'info' | 'neutral';
|
|
31
|
-
/** A named stage: a board column, and the segments of a stage bar. */
|
|
32
|
-
interface Stage {
|
|
33
|
-
id: string;
|
|
34
|
-
label: string;
|
|
35
|
-
accent?: Accent;
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* How a view reads one item. Only `getId` and `getTitle` are always required;
|
|
39
|
-
* each view documents which of the rest it needs (a board needs `getStatus`, a
|
|
40
|
-
* Gantt needs `getStart`) and renders an explanatory empty state without them.
|
|
41
|
-
*/
|
|
42
|
-
interface ViewAccessors<T> {
|
|
43
|
-
getId: (item: T) => string;
|
|
44
|
-
getTitle: (item: T) => string;
|
|
45
|
-
/** Secondary line under the title. */
|
|
46
|
-
getSubtitle?: (item: T) => string | undefined;
|
|
47
|
-
/** Board column and list group; matched against `Stage['id']`. */
|
|
48
|
-
getStatus?: (item: T) => string;
|
|
49
|
-
/** Gantt bar start, calendar placement. */
|
|
50
|
-
getStart?: (item: T) => Date | string | null | undefined;
|
|
51
|
-
/** Gantt bar end, calendar span. Falls back to the start when absent. */
|
|
52
|
-
getEnd?: (item: T) => Date | string | null | undefined;
|
|
53
|
-
/** Swimlane in a roadmap, row group in a Gantt. */
|
|
54
|
-
getGroup?: (item: T) => string | undefined;
|
|
55
|
-
getAccent?: (item: T) => Accent;
|
|
56
|
-
}
|
|
57
|
-
/** Strings a view renders. Every one is overridable; the defaults are English. */
|
|
58
|
-
interface ViewLabels {
|
|
59
|
-
/** Accessible name of the view switcher group. */
|
|
60
|
-
viewSwitcher: string;
|
|
61
|
-
loading: string;
|
|
62
|
-
empty: string;
|
|
63
|
-
error: string;
|
|
64
|
-
/** Action on the error state. */
|
|
65
|
-
retry: string;
|
|
66
|
-
/** Heading for the group a record with no status or group falls into. */
|
|
67
|
-
ungrouped: string;
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* Props every view accepts. Views are controlled: selection, the active view and
|
|
71
|
-
* filter state live in the page, and every change is handed back.
|
|
72
|
-
*/
|
|
73
|
-
interface ViewBaseProps<T> {
|
|
74
|
-
items: T[];
|
|
75
|
-
accessors: ViewAccessors<T>;
|
|
76
|
-
loading?: boolean;
|
|
77
|
-
error?: Error | null;
|
|
78
|
-
selectedId?: string | null;
|
|
79
|
-
/** Called when the user activates an item. */
|
|
80
|
-
onOpen?: (id: string, item: T) => void;
|
|
81
|
-
/** Return a URL to render each item as a real anchor — middle-clickable and crawlable. */
|
|
82
|
-
getHref?: (id: string, item: T) => string;
|
|
83
|
-
/** Render one item. Receives the active view so one function can serve several. */
|
|
84
|
-
renderItem?: (item: T, context: {
|
|
85
|
-
view: ViewId;
|
|
86
|
-
}) => React.ReactNode;
|
|
87
|
-
/** Replaces the built-in empty state. */
|
|
88
|
-
emptyState?: React.ReactNode;
|
|
89
|
-
labels?: Partial<ViewLabels>;
|
|
90
|
-
/** Pins "today" so stories, tests and visual snapshots stay deterministic. */
|
|
91
|
-
now?: Date;
|
|
92
|
-
className?: string;
|
|
93
|
-
}
|
|
4
|
+
import { V as ViewLabels, a as ViewBaseProps, S as Stage } from '../../types-DsdZvEI1.cjs';
|
|
5
|
+
import 'react';
|
|
94
6
|
|
|
95
7
|
type BoardViewSlot = 'column' | 'columnHeader' | 'card' | 'selectedCard' | 'state';
|
|
96
8
|
interface BoardLabels extends ViewLabels {
|