@nswds/app 1.114.1 → 1.116.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/dist/globals.css +430 -31
- package/dist/index.cjs +265 -78
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +76 -11
- package/dist/index.d.ts +76 -11
- package/dist/index.js +265 -79
- package/dist/index.js.map +1 -1
- package/dist/styles.css +427 -31
- package/dist/styles.css.map +1 -1
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
|
@@ -4231,7 +4231,7 @@ var Link = React5.forwardRef(function Link2({ className, variant, ...props }, re
|
|
|
4231
4231
|
var styles = {
|
|
4232
4232
|
base: [
|
|
4233
4233
|
// Base
|
|
4234
|
-
"relative isolate inline-flex items-baseline justify-center gap-x-2 rounded-sm border text-base/7
|
|
4234
|
+
"relative isolate inline-flex items-baseline justify-center gap-x-2 rounded-sm border text-base/7 font-bold transition-all",
|
|
4235
4235
|
// Focus
|
|
4236
4236
|
"focus:outline focus:outline-2 focus:outline-offset-2 focus:outline-(--btn-bg)",
|
|
4237
4237
|
// Disabled
|
|
@@ -4478,28 +4478,17 @@ var styles = {
|
|
|
4478
4478
|
"dark:[--btn-hover-overlay:var(--color-accent-500)]/30 dark:data-[variant=solid]:[--btn-hover-overlay:var(--color-white)]/10"
|
|
4479
4479
|
],
|
|
4480
4480
|
danger: [
|
|
4481
|
-
//
|
|
4482
|
-
"",
|
|
4483
|
-
|
|
4484
|
-
"",
|
|
4485
|
-
|
|
4486
|
-
"",
|
|
4487
|
-
// Dark mode states
|
|
4488
|
-
"",
|
|
4489
|
-
// Icon
|
|
4490
|
-
"",
|
|
4491
|
-
// Icon states
|
|
4492
|
-
"",
|
|
4493
|
-
// Icon dark mode
|
|
4494
|
-
"",
|
|
4495
|
-
// Icon dark mode states
|
|
4496
|
-
""
|
|
4481
|
+
// Backward-compatible alias for legacy consumers that still use `danger`.
|
|
4482
|
+
"[--btn-bg:var(--color-accent-600)] [--btn-border:var(--color-accent-600)]/90 [--btn-text:white]",
|
|
4483
|
+
"[--btn-hover-overlay:var(--color-accent-600)]/10 data-[variant=solid]:[--btn-hover-overlay:var(--color-white)]/10",
|
|
4484
|
+
"dark:[--btn-bg:var(--color-accent-500)] dark:[--btn-border:var(--color-accent-500)]/90 dark:[--btn-text:white]",
|
|
4485
|
+
"dark:[--btn-hover-overlay:var(--color-accent-500)]/30 dark:data-[variant=solid]:[--btn-hover-overlay:var(--color-white)]/10"
|
|
4497
4486
|
]
|
|
4498
4487
|
},
|
|
4499
4488
|
size: {
|
|
4500
|
-
default: "px-[calc(--spacing(
|
|
4501
|
-
sm: "px-[calc(--spacing(
|
|
4502
|
-
lg: "px-[calc(--spacing(
|
|
4489
|
+
default: "px-[calc(--spacing(6)-1px)] py-[calc(--spacing(4)-1px)] sm:px-[calc(--spacing(5.5)-1px)] sm:py-[calc(--spacing(3)-1px)]",
|
|
4490
|
+
sm: "px-[calc(--spacing(5)-1px)] py-[calc(--spacing(3)-1px)] sm:px-[calc(--spacing(4.5)-1px)] sm:py-[calc(--spacing(2)-1px)]",
|
|
4491
|
+
lg: "px-[calc(--spacing(7)-1px)] py-[calc(--spacing(5)-1px)] sm:px-[calc(--spacing(6.5)-1px)] sm:py-[calc(--spacing(4)-1px)]",
|
|
4503
4492
|
icon: "w-10 h-10 flex-none"
|
|
4504
4493
|
},
|
|
4505
4494
|
iconSize: {
|
|
@@ -18835,7 +18824,7 @@ function FormatToggle({ format, setFormat }) {
|
|
|
18835
18824
|
|
|
18836
18825
|
// package.json
|
|
18837
18826
|
var package_default = {
|
|
18838
|
-
version: "1.
|
|
18827
|
+
version: "1.115.0"};
|
|
18839
18828
|
var SluggerContext = React5__namespace.default.createContext(null);
|
|
18840
18829
|
function flattenText(nodes) {
|
|
18841
18830
|
if (nodes == null || typeof nodes === "boolean") return "";
|
|
@@ -19124,9 +19113,108 @@ var heroBannerVariants = classVarianceAuthority.cva("relative", {
|
|
|
19124
19113
|
variants: {
|
|
19125
19114
|
variant: {
|
|
19126
19115
|
"primary-800": "bg-primary-800 text-white",
|
|
19127
|
-
"
|
|
19116
|
+
"primary-600": "bg-primary-600 text-white",
|
|
19117
|
+
"primary-400": "bg-primary-400 text-primary-800",
|
|
19118
|
+
"primary-200": "bg-primary-200 text-primary-800",
|
|
19119
|
+
"grey-800": "bg-grey-800 text-white",
|
|
19120
|
+
"grey-600": "bg-grey-600 text-white",
|
|
19121
|
+
"grey-400": "bg-grey-400 text-grey-800",
|
|
19122
|
+
"grey-200": "bg-grey-200 text-grey-800",
|
|
19128
19123
|
"accent-800": "bg-accent-800 text-white",
|
|
19124
|
+
"accent-600": "bg-accent-600 text-white",
|
|
19125
|
+
"accent-400": "bg-accent-400 text-accent-800",
|
|
19126
|
+
"accent-200": "bg-accent-200 text-accent-800",
|
|
19127
|
+
white: "bg-white text-grey-800"
|
|
19128
|
+
}
|
|
19129
|
+
},
|
|
19130
|
+
defaultVariants: {
|
|
19131
|
+
variant: "primary-800"
|
|
19132
|
+
}
|
|
19133
|
+
});
|
|
19134
|
+
var heroBannerContentAlignments = {
|
|
19135
|
+
center: {
|
|
19136
|
+
content: "text-center",
|
|
19137
|
+
subtitle: "mx-auto",
|
|
19138
|
+
actions: "justify-center"
|
|
19139
|
+
},
|
|
19140
|
+
left: {
|
|
19141
|
+
content: "text-left",
|
|
19142
|
+
subtitle: "",
|
|
19143
|
+
actions: "justify-start"
|
|
19144
|
+
}
|
|
19145
|
+
};
|
|
19146
|
+
function HeroBannerSimple({
|
|
19147
|
+
variant,
|
|
19148
|
+
heading,
|
|
19149
|
+
subtitle,
|
|
19150
|
+
contentAlign = "center",
|
|
19151
|
+
primaryButton,
|
|
19152
|
+
secondaryButton
|
|
19153
|
+
}) {
|
|
19154
|
+
const alignment = heroBannerContentAlignments[contentAlign];
|
|
19155
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: heroBannerVariants({ variant }), children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-6 py-24 sm:py-32 lg:px-8", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("mx-auto max-w-2xl", alignment.content), children: [
|
|
19156
|
+
heading && /* @__PURE__ */ jsxRuntime.jsx("h1", { className: "text-4xl font-semibold tracking-tight text-balance sm:text-6xl", children: heading }),
|
|
19157
|
+
subtitle && /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("mt-6 max-w-xl text-lg leading-8 text-pretty", alignment.subtitle), children: subtitle }),
|
|
19158
|
+
(primaryButton || secondaryButton) && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
19159
|
+
"div",
|
|
19160
|
+
{
|
|
19161
|
+
className: cn("mt-10 flex flex-wrap items-center gap-x-6 gap-y-4", alignment.actions),
|
|
19162
|
+
children: [
|
|
19163
|
+
primaryButton && (primaryButton.href ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
19164
|
+
Button2,
|
|
19165
|
+
{
|
|
19166
|
+
href: primaryButton.href,
|
|
19167
|
+
variant: primaryButton.variant,
|
|
19168
|
+
color: primaryButton.color ?? void 0,
|
|
19169
|
+
children: primaryButton.text
|
|
19170
|
+
}
|
|
19171
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
19172
|
+
Button2,
|
|
19173
|
+
{
|
|
19174
|
+
onClick: primaryButton.onClick,
|
|
19175
|
+
variant: primaryButton.variant,
|
|
19176
|
+
color: primaryButton.color ?? void 0,
|
|
19177
|
+
children: primaryButton.text
|
|
19178
|
+
}
|
|
19179
|
+
)),
|
|
19180
|
+
secondaryButton && (secondaryButton.href ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
19181
|
+
Button2,
|
|
19182
|
+
{
|
|
19183
|
+
href: secondaryButton.href,
|
|
19184
|
+
variant: secondaryButton.variant,
|
|
19185
|
+
color: secondaryButton.color ?? void 0,
|
|
19186
|
+
children: secondaryButton.text
|
|
19187
|
+
}
|
|
19188
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
19189
|
+
Button2,
|
|
19190
|
+
{
|
|
19191
|
+
onClick: secondaryButton.onClick,
|
|
19192
|
+
variant: secondaryButton.variant,
|
|
19193
|
+
color: secondaryButton.color ?? void 0,
|
|
19194
|
+
children: secondaryButton.text
|
|
19195
|
+
}
|
|
19196
|
+
))
|
|
19197
|
+
]
|
|
19198
|
+
}
|
|
19199
|
+
)
|
|
19200
|
+
] }) }) });
|
|
19201
|
+
}
|
|
19202
|
+
var heroBannerVariants2 = classVarianceAuthority.cva("relative", {
|
|
19203
|
+
variants: {
|
|
19204
|
+
variant: {
|
|
19205
|
+
"primary-800": "bg-primary-800 text-white",
|
|
19206
|
+
"primary-600": "bg-primary-600 text-white",
|
|
19207
|
+
"primary-400": "bg-primary-400 text-primary-800",
|
|
19129
19208
|
"primary-200": "bg-primary-200 text-primary-800",
|
|
19209
|
+
"grey-800": "bg-grey-800 text-white",
|
|
19210
|
+
"grey-600": "bg-grey-600 text-white",
|
|
19211
|
+
"grey-400": "bg-grey-400 text-grey-800",
|
|
19212
|
+
"grey-200": "bg-grey-200 text-grey-800",
|
|
19213
|
+
"grey-150": "bg-grey-200 text-grey-800",
|
|
19214
|
+
"accent-800": "bg-accent-800 text-white",
|
|
19215
|
+
"accent-600": "bg-accent-600 text-white",
|
|
19216
|
+
"accent-400": "bg-accent-400 text-accent-800",
|
|
19217
|
+
"accent-200": "bg-accent-200 text-accent-800",
|
|
19130
19218
|
white: "bg-white text-grey-800"
|
|
19131
19219
|
}
|
|
19132
19220
|
},
|
|
@@ -19134,6 +19222,34 @@ var heroBannerVariants = classVarianceAuthority.cva("relative", {
|
|
|
19134
19222
|
variant: "primary-800"
|
|
19135
19223
|
}
|
|
19136
19224
|
});
|
|
19225
|
+
var HERO_BANNER_SUPPORTING_IMAGE_DEFAULT_SPLIT = {
|
|
19226
|
+
left: 8,
|
|
19227
|
+
right: 4
|
|
19228
|
+
};
|
|
19229
|
+
var HERO_BANNER_SUPPORTING_IMAGE_COLUMN_SPANS = {
|
|
19230
|
+
1: "lg:col-span-1",
|
|
19231
|
+
2: "lg:col-span-2",
|
|
19232
|
+
3: "lg:col-span-3",
|
|
19233
|
+
4: "lg:col-span-4",
|
|
19234
|
+
5: "lg:col-span-5",
|
|
19235
|
+
6: "lg:col-span-6",
|
|
19236
|
+
7: "lg:col-span-7",
|
|
19237
|
+
8: "lg:col-span-8",
|
|
19238
|
+
9: "lg:col-span-9",
|
|
19239
|
+
10: "lg:col-span-10",
|
|
19240
|
+
11: "lg:col-span-11"
|
|
19241
|
+
};
|
|
19242
|
+
function resolveHeroBannerSupportingImageSplit(split) {
|
|
19243
|
+
if (!split) {
|
|
19244
|
+
return HERO_BANNER_SUPPORTING_IMAGE_DEFAULT_SPLIT;
|
|
19245
|
+
}
|
|
19246
|
+
const hasValidLeftSpan = split.left in HERO_BANNER_SUPPORTING_IMAGE_COLUMN_SPANS;
|
|
19247
|
+
const hasValidRightSpan = split.right in HERO_BANNER_SUPPORTING_IMAGE_COLUMN_SPANS;
|
|
19248
|
+
if (hasValidLeftSpan && hasValidRightSpan && split.left + split.right === 12) {
|
|
19249
|
+
return split;
|
|
19250
|
+
}
|
|
19251
|
+
return HERO_BANNER_SUPPORTING_IMAGE_DEFAULT_SPLIT;
|
|
19252
|
+
}
|
|
19137
19253
|
function HeroBannerSupportingImage({
|
|
19138
19254
|
variant,
|
|
19139
19255
|
imgAlt,
|
|
@@ -19141,63 +19257,96 @@ function HeroBannerSupportingImage({
|
|
|
19141
19257
|
imgBgcolor,
|
|
19142
19258
|
heading,
|
|
19143
19259
|
subtitle,
|
|
19260
|
+
split,
|
|
19144
19261
|
primaryButton,
|
|
19145
19262
|
secondaryButton
|
|
19146
19263
|
}) {
|
|
19147
|
-
|
|
19148
|
-
|
|
19149
|
-
|
|
19150
|
-
|
|
19151
|
-
|
|
19152
|
-
|
|
19153
|
-
|
|
19154
|
-
|
|
19155
|
-
|
|
19156
|
-
|
|
19157
|
-
|
|
19158
|
-
|
|
19159
|
-
}
|
|
19160
|
-
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
19161
|
-
Button2,
|
|
19162
|
-
{
|
|
19163
|
-
onClick: primaryButton.onClick,
|
|
19164
|
-
variant: primaryButton.variant,
|
|
19165
|
-
color: primaryButton.color ?? void 0,
|
|
19166
|
-
children: primaryButton.text
|
|
19167
|
-
}
|
|
19168
|
-
)),
|
|
19169
|
-
secondaryButton && (secondaryButton.href ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
19170
|
-
Button2,
|
|
19171
|
-
{
|
|
19172
|
-
href: secondaryButton.href,
|
|
19173
|
-
variant: secondaryButton.variant,
|
|
19174
|
-
color: secondaryButton.color ?? void 0,
|
|
19175
|
-
children: secondaryButton.text
|
|
19176
|
-
}
|
|
19177
|
-
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
19178
|
-
Button2,
|
|
19264
|
+
const resolvedSplit = resolveHeroBannerSupportingImageSplit(split);
|
|
19265
|
+
const textSpanClassName = HERO_BANNER_SUPPORTING_IMAGE_COLUMN_SPANS[resolvedSplit.left];
|
|
19266
|
+
const imageSpanClassName = HERO_BANNER_SUPPORTING_IMAGE_COLUMN_SPANS[resolvedSplit.right];
|
|
19267
|
+
const imageStart = `${resolvedSplit.left / 12 * 100}%`;
|
|
19268
|
+
const contentMaxWidth = `${Math.min(56, resolvedSplit.left / 8 * 42)}rem`;
|
|
19269
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: heroBannerVariants2({ variant }), children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mx-auto max-w-7xl lg:grid lg:grid-cols-12 lg:gap-x-8 lg:px-8", children: [
|
|
19270
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
19271
|
+
"div",
|
|
19272
|
+
{
|
|
19273
|
+
className: cn("px-6 pt-10 pb-24 sm:pb-32 lg:px-0 lg:pt-24 lg:pb-28", textSpanClassName),
|
|
19274
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
19275
|
+
"div",
|
|
19179
19276
|
{
|
|
19180
|
-
|
|
19181
|
-
|
|
19182
|
-
|
|
19183
|
-
|
|
19277
|
+
className: "mx-auto max-w-2xl lg:mx-0 lg:max-w-[var(--hero-copy-max-width)]",
|
|
19278
|
+
style: {
|
|
19279
|
+
"--hero-copy-max-width": contentMaxWidth
|
|
19280
|
+
},
|
|
19281
|
+
children: [
|
|
19282
|
+
heading && /* @__PURE__ */ jsxRuntime.jsx("h1", { className: "mt-24 text-4xl font-semibold tracking-tight text-balance sm:mt-10 sm:text-6xl", children: heading }),
|
|
19283
|
+
subtitle && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-6 text-lg leading-8 text-pretty", children: subtitle }),
|
|
19284
|
+
(primaryButton || secondaryButton) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-10 flex flex-wrap items-center gap-x-6 gap-y-4", children: [
|
|
19285
|
+
primaryButton && (primaryButton.href ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
19286
|
+
Button2,
|
|
19287
|
+
{
|
|
19288
|
+
href: primaryButton.href,
|
|
19289
|
+
variant: primaryButton.variant,
|
|
19290
|
+
color: primaryButton.color ?? void 0,
|
|
19291
|
+
children: primaryButton.text
|
|
19292
|
+
}
|
|
19293
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
19294
|
+
Button2,
|
|
19295
|
+
{
|
|
19296
|
+
onClick: primaryButton.onClick,
|
|
19297
|
+
variant: primaryButton.variant,
|
|
19298
|
+
color: primaryButton.color ?? void 0,
|
|
19299
|
+
children: primaryButton.text
|
|
19300
|
+
}
|
|
19301
|
+
)),
|
|
19302
|
+
secondaryButton && (secondaryButton.href ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
19303
|
+
Button2,
|
|
19304
|
+
{
|
|
19305
|
+
href: secondaryButton.href,
|
|
19306
|
+
variant: secondaryButton.variant,
|
|
19307
|
+
color: secondaryButton.color ?? void 0,
|
|
19308
|
+
children: secondaryButton.text
|
|
19309
|
+
}
|
|
19310
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
19311
|
+
Button2,
|
|
19312
|
+
{
|
|
19313
|
+
onClick: secondaryButton.onClick,
|
|
19314
|
+
variant: secondaryButton.variant,
|
|
19315
|
+
color: secondaryButton.color ?? void 0,
|
|
19316
|
+
children: secondaryButton.text
|
|
19317
|
+
}
|
|
19318
|
+
))
|
|
19319
|
+
] })
|
|
19320
|
+
]
|
|
19184
19321
|
}
|
|
19185
|
-
)
|
|
19186
|
-
|
|
19187
|
-
|
|
19188
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
19189
|
-
|
|
19322
|
+
)
|
|
19323
|
+
}
|
|
19324
|
+
),
|
|
19325
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
19326
|
+
"div",
|
|
19190
19327
|
{
|
|
19191
|
-
alt: imgAlt,
|
|
19192
|
-
src: imgSrc || "/placeholder.svg",
|
|
19193
|
-
width: 800,
|
|
19194
|
-
height: 800,
|
|
19195
19328
|
className: cn(
|
|
19196
|
-
"
|
|
19197
|
-
|
|
19329
|
+
"relative lg:-mr-8 xl:absolute xl:inset-y-0 xl:right-0 xl:left-[var(--hero-image-start)] xl:mr-0",
|
|
19330
|
+
imageSpanClassName
|
|
19331
|
+
),
|
|
19332
|
+
style: {
|
|
19333
|
+
"--hero-image-start": imageStart
|
|
19334
|
+
},
|
|
19335
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
19336
|
+
Image2__default.default,
|
|
19337
|
+
{
|
|
19338
|
+
alt: imgAlt,
|
|
19339
|
+
src: imgSrc || "/placeholder.svg",
|
|
19340
|
+
width: 800,
|
|
19341
|
+
height: 800,
|
|
19342
|
+
className: cn(
|
|
19343
|
+
"aspect-[3/2] w-full object-cover lg:absolute lg:inset-0 lg:aspect-auto lg:h-full",
|
|
19344
|
+
imgBgcolor
|
|
19345
|
+
)
|
|
19346
|
+
}
|
|
19198
19347
|
)
|
|
19199
19348
|
}
|
|
19200
|
-
)
|
|
19349
|
+
)
|
|
19201
19350
|
] }) });
|
|
19202
19351
|
}
|
|
19203
19352
|
function HoverCard({ ...props }) {
|
|
@@ -33176,7 +33325,7 @@ var Tracker = React5__namespace.default.forwardRef(
|
|
|
33176
33325
|
}
|
|
33177
33326
|
);
|
|
33178
33327
|
Tracker.displayName = "Tracker";
|
|
33179
|
-
var
|
|
33328
|
+
var buttonVariants5 = classVarianceAuthority.cva(
|
|
33180
33329
|
"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-sm text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",
|
|
33181
33330
|
{
|
|
33182
33331
|
variants: {
|
|
@@ -33213,7 +33362,7 @@ function Button7({
|
|
|
33213
33362
|
Comp,
|
|
33214
33363
|
{
|
|
33215
33364
|
"data-slot": "button",
|
|
33216
|
-
className: cn(
|
|
33365
|
+
className: cn(buttonVariants5({ variant, size, className })),
|
|
33217
33366
|
...props
|
|
33218
33367
|
}
|
|
33219
33368
|
);
|
|
@@ -35622,6 +35771,23 @@ function Input2({ className, type, ...props }) {
|
|
|
35622
35771
|
}
|
|
35623
35772
|
);
|
|
35624
35773
|
}
|
|
35774
|
+
var sanitizePreviewUrl = (value) => {
|
|
35775
|
+
if (!value) return void 0;
|
|
35776
|
+
const trimmed = value.trim();
|
|
35777
|
+
if (!trimmed) return void 0;
|
|
35778
|
+
const baseOrigin = typeof window !== "undefined" ? window.location.origin : "http://localhost";
|
|
35779
|
+
const hasExplicitScheme = /^[a-zA-Z][a-zA-Z\d+.-]*:/.test(trimmed);
|
|
35780
|
+
const isRelativeUrl = trimmed.startsWith("/") || trimmed.startsWith("./") || trimmed.startsWith("../") || trimmed.startsWith("?") || trimmed.startsWith("#");
|
|
35781
|
+
const isBareHostname = !hasExplicitScheme && !isRelativeUrl && /^[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)+([/:?#].*)?$/.test(trimmed);
|
|
35782
|
+
try {
|
|
35783
|
+
const parsed = hasExplicitScheme ? new URL(trimmed) : isBareHostname ? new URL(`https://${trimmed}`) : new URL(trimmed, baseOrigin);
|
|
35784
|
+
if (parsed.protocol === "http:" || parsed.protocol === "https:") {
|
|
35785
|
+
return parsed.toString();
|
|
35786
|
+
}
|
|
35787
|
+
} catch {
|
|
35788
|
+
}
|
|
35789
|
+
return void 0;
|
|
35790
|
+
};
|
|
35625
35791
|
var WebPreviewContext = React5.createContext(null);
|
|
35626
35792
|
var useWebPreview = () => {
|
|
35627
35793
|
const context = React5.useContext(WebPreviewContext);
|
|
@@ -35637,11 +35803,21 @@ var WebPreview = ({
|
|
|
35637
35803
|
onUrlChange,
|
|
35638
35804
|
...props
|
|
35639
35805
|
}) => {
|
|
35640
|
-
const
|
|
35806
|
+
const initialUrl = sanitizePreviewUrl(defaultUrl) ?? "";
|
|
35807
|
+
const [url, setUrl] = React5.useState(initialUrl);
|
|
35641
35808
|
const [consoleOpen, setConsoleOpen] = React5.useState(false);
|
|
35642
35809
|
const handleUrlChange = (newUrl) => {
|
|
35643
|
-
|
|
35644
|
-
|
|
35810
|
+
if (!newUrl.trim()) {
|
|
35811
|
+
setUrl("");
|
|
35812
|
+
onUrlChange?.("");
|
|
35813
|
+
return;
|
|
35814
|
+
}
|
|
35815
|
+
const safeUrl = sanitizePreviewUrl(newUrl);
|
|
35816
|
+
if (safeUrl === void 0) {
|
|
35817
|
+
return;
|
|
35818
|
+
}
|
|
35819
|
+
setUrl(safeUrl);
|
|
35820
|
+
onUrlChange?.(safeUrl);
|
|
35645
35821
|
};
|
|
35646
35822
|
const contextValue = {
|
|
35647
35823
|
url,
|
|
@@ -35684,20 +35860,30 @@ var WebPreviewUrl = ({ value, onChange, onKeyDown, ...props }) => {
|
|
|
35684
35860
|
}
|
|
35685
35861
|
);
|
|
35686
35862
|
};
|
|
35687
|
-
var WebPreviewBody = ({
|
|
35863
|
+
var WebPreviewBody = ({
|
|
35864
|
+
className,
|
|
35865
|
+
loading,
|
|
35866
|
+
loadingFallback,
|
|
35867
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
35868
|
+
sandbox: _sandbox,
|
|
35869
|
+
src,
|
|
35870
|
+
...props
|
|
35871
|
+
}) => {
|
|
35688
35872
|
const { url } = useWebPreview();
|
|
35873
|
+
const safeSrc = sanitizePreviewUrl(src ?? url);
|
|
35874
|
+
const resolvedLoadingFallback = loadingFallback ?? loading;
|
|
35689
35875
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1", children: [
|
|
35690
35876
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
35691
35877
|
"iframe",
|
|
35692
35878
|
{
|
|
35693
35879
|
className: cn("size-full", className),
|
|
35694
35880
|
sandbox: "allow-scripts allow-same-origin allow-forms allow-popups allow-presentation",
|
|
35695
|
-
src:
|
|
35881
|
+
src: safeSrc,
|
|
35696
35882
|
title: "Preview",
|
|
35697
35883
|
...props
|
|
35698
35884
|
}
|
|
35699
35885
|
),
|
|
35700
|
-
|
|
35886
|
+
resolvedLoadingFallback
|
|
35701
35887
|
] });
|
|
35702
35888
|
};
|
|
35703
35889
|
var useIsomorphicLayoutEffect2 = typeof window !== "undefined" ? React5.useLayoutEffect : React5.useEffect;
|
|
@@ -36119,6 +36305,7 @@ exports.FormatToggle = FormatToggle;
|
|
|
36119
36305
|
exports.GenerateInterpolatedColors = GenerateInterpolatedColors;
|
|
36120
36306
|
exports.Header = Header2;
|
|
36121
36307
|
exports.Heading = Heading;
|
|
36308
|
+
exports.HeroBannerSimple = HeroBannerSimple;
|
|
36122
36309
|
exports.HeroBannerSupportingImage = HeroBannerSupportingImage;
|
|
36123
36310
|
exports.HoverCard = HoverCard;
|
|
36124
36311
|
exports.HoverCardContent = HoverCardContent;
|