se-design 1.0.73-dev3 → 1.0.73-dev6
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/components/CustomModal/index.d.ts +4 -6
- package/dist/components/MenuList/index.d.ts +3 -2
- package/dist/components/Popover/index.d.ts +2 -2
- package/dist/index12.js +30 -18
- package/dist/index12.js.map +1 -1
- package/dist/index15.js +1 -1
- package/dist/index17.js +36 -33
- package/dist/index17.js.map +1 -1
- package/dist/index18.js +129 -124
- package/dist/index18.js.map +1 -1
- package/dist/index192.js +2 -2
- package/dist/{index229.js → index193.js} +1 -1
- package/dist/{index229.js.map → index193.js.map} +1 -1
- package/dist/index194.js +26 -0
- package/dist/index194.js.map +1 -0
- package/dist/index197.js +20 -80
- package/dist/index197.js.map +1 -1
- package/dist/index199.js +82 -21
- package/dist/index199.js.map +1 -1
- package/dist/{index207.js → index208.js} +1 -1
- package/dist/{index207.js.map → index208.js.map} +1 -1
- package/dist/{index215.js → index216.js} +1 -1
- package/dist/{index215.js.map → index216.js.map} +1 -1
- package/dist/{index218.js → index219.js} +1 -1
- package/dist/{index218.js.map → index219.js.map} +1 -1
- package/dist/{index227.js → index228.js} +1 -1
- package/dist/{index227.js.map → index228.js.map} +1 -1
- package/dist/index24.js +1 -1
- package/dist/index27.js +1 -1
- package/dist/index28.js +94 -90
- package/dist/index28.js.map +1 -1
- package/dist/index32.js +42 -44
- package/dist/index32.js.map +1 -1
- package/dist/index37.js +1 -1
- package/dist/index39.js +1 -1
- package/dist/index44.js +1 -1
- package/dist/index45.js +2 -2
- package/dist/index48.js +1 -1
- package/dist/index52.js +1 -1
- package/dist/index62.js +1 -1
- package/dist/index64.js +52 -60
- package/dist/index64.js.map +1 -1
- package/package.json +1 -1
- package/dist/index195.js +0 -27
- package/dist/index195.js.map +0 -1
package/dist/index64.js
CHANGED
|
@@ -1,13 +1,12 @@
|
|
|
1
|
-
import a
|
|
2
|
-
import { Button as
|
|
3
|
-
import { Badge as
|
|
4
|
-
import { Icon as
|
|
5
|
-
import { Link as
|
|
6
|
-
import { CustomModal as
|
|
7
|
-
import {
|
|
8
|
-
import { useStableId as T } from "./index190.js";
|
|
1
|
+
import a from "react";
|
|
2
|
+
import { Button as E } from "./index3.js";
|
|
3
|
+
import { Badge as j } from "./index9.js";
|
|
4
|
+
import { Icon as q } from "./index5.js";
|
|
5
|
+
import { Link as f } from "./index63.js";
|
|
6
|
+
import { CustomModal as G } from "./index12.js";
|
|
7
|
+
import { useStableId as J } from "./index190.js";
|
|
9
8
|
/* empty css */
|
|
10
|
-
const
|
|
9
|
+
const K = {
|
|
11
10
|
lg: {
|
|
12
11
|
width: "768px",
|
|
13
12
|
height: "500px"
|
|
@@ -16,44 +15,37 @@ const U = {
|
|
|
16
15
|
width: "656px",
|
|
17
16
|
height: "384px"
|
|
18
17
|
}
|
|
19
|
-
},
|
|
20
|
-
isOpen:
|
|
21
|
-
onClose:
|
|
18
|
+
}, ea = ({
|
|
19
|
+
isOpen: N,
|
|
20
|
+
onClose: n,
|
|
22
21
|
trigger: c,
|
|
23
|
-
modalWidth:
|
|
24
|
-
modalHeight:
|
|
25
|
-
variant:
|
|
22
|
+
modalWidth: u,
|
|
23
|
+
modalHeight: b,
|
|
24
|
+
variant: g,
|
|
26
25
|
size: t = "lg",
|
|
27
|
-
availabilityLabel:
|
|
26
|
+
availabilityLabel: x = "Available on ",
|
|
28
27
|
availabilityBadgeText: k,
|
|
29
|
-
title:
|
|
30
|
-
description:
|
|
28
|
+
title: C,
|
|
29
|
+
description: v,
|
|
31
30
|
learnMoreLinkText: r,
|
|
32
31
|
learnMoreHref: l,
|
|
33
32
|
onLearnMoreClick: o,
|
|
34
33
|
featureListDesc: s,
|
|
35
34
|
featuresList: I = [],
|
|
36
35
|
featureItemIcon: L,
|
|
37
|
-
mediaContent:
|
|
38
|
-
laterButtonText:
|
|
39
|
-
purchaseButtonText:
|
|
40
|
-
onLaterClick:
|
|
36
|
+
mediaContent: S,
|
|
37
|
+
laterButtonText: _,
|
|
38
|
+
purchaseButtonText: A,
|
|
39
|
+
onLaterClick: F,
|
|
41
40
|
onPurchaseClick: P,
|
|
42
41
|
className: $ = "",
|
|
43
42
|
modalContentClassName: B = "",
|
|
44
43
|
automationId: i = "",
|
|
45
44
|
id: D
|
|
46
45
|
}) => {
|
|
47
|
-
const m =
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
containerRef: m,
|
|
51
|
-
restoreFocus: !0,
|
|
52
|
-
initialFocus: ".paywall-card-btn-later"
|
|
53
|
-
});
|
|
54
|
-
const z = () => {
|
|
55
|
-
A?.(), N();
|
|
56
|
-
}, d = U[t], W = b ?? d.width, y = g ?? d.height, w = x === "with-points" && t === "lg", h = I.map((e) => typeof e == "string" ? {
|
|
46
|
+
const m = J(D, "paywall-title"), z = () => {
|
|
47
|
+
F?.(), n();
|
|
48
|
+
}, p = K[t], O = u ?? p.width, d = b ?? p.height, y = g === "with-points" && t === "lg", w = I.map((e) => typeof e == "string" ? {
|
|
57
49
|
text: e
|
|
58
50
|
} : {
|
|
59
51
|
text: e.text,
|
|
@@ -61,10 +53,10 @@ const U = {
|
|
|
61
53
|
href: e.href,
|
|
62
54
|
external: e.external,
|
|
63
55
|
onLinkClick: e.onLinkClick
|
|
64
|
-
}),
|
|
56
|
+
}), R = y && w.length > 0, W = L ?? /* @__PURE__ */ a.createElement(q, {
|
|
65
57
|
name: "info",
|
|
66
58
|
rotation: "180"
|
|
67
|
-
}),
|
|
59
|
+
}), Y = /* @__PURE__ */ a.createElement("section", {
|
|
68
60
|
className: `paywall paywall-ctn paywall-ctn--${t} ${$}`,
|
|
69
61
|
"data-automation-id": i
|
|
70
62
|
}, /* @__PURE__ */ a.createElement("div", {
|
|
@@ -75,17 +67,17 @@ const U = {
|
|
|
75
67
|
className: "paywall-card-availability"
|
|
76
68
|
}, /* @__PURE__ */ a.createElement("span", {
|
|
77
69
|
className: "paywall-card-availability-label"
|
|
78
|
-
},
|
|
70
|
+
}, x), /* @__PURE__ */ a.createElement(j, {
|
|
79
71
|
label: k,
|
|
80
72
|
className: "paywall-card-badge",
|
|
81
73
|
bgColor: "var(--color-yellow-100)",
|
|
82
74
|
textColor: "var(--color-yellow-700)"
|
|
83
75
|
})), /* @__PURE__ */ a.createElement("h3", {
|
|
84
|
-
id:
|
|
76
|
+
id: m,
|
|
85
77
|
className: "paywall-card-title"
|
|
86
|
-
},
|
|
78
|
+
}, C), /* @__PURE__ */ a.createElement("p", {
|
|
87
79
|
className: "paywall-card-description"
|
|
88
|
-
},
|
|
80
|
+
}, v, r && (l || o) && /* @__PURE__ */ a.createElement(f, {
|
|
89
81
|
href: l ?? "#",
|
|
90
82
|
label: r,
|
|
91
83
|
external: !!l,
|
|
@@ -93,64 +85,64 @@ const U = {
|
|
|
93
85
|
onClick: (e) => {
|
|
94
86
|
l || e.preventDefault(), o?.(e);
|
|
95
87
|
}
|
|
96
|
-
})),
|
|
88
|
+
})), y && s && /* @__PURE__ */ a.createElement("p", {
|
|
97
89
|
className: "paywall-card-features-intro"
|
|
98
|
-
}, s),
|
|
90
|
+
}, s), R && /* @__PURE__ */ a.createElement("ul", {
|
|
99
91
|
className: "paywall-card-features-list"
|
|
100
|
-
},
|
|
92
|
+
}, w.map((e) => /* @__PURE__ */ a.createElement("li", {
|
|
101
93
|
key: e.text,
|
|
102
94
|
className: "paywall-card-feature-item"
|
|
103
95
|
}, /* @__PURE__ */ a.createElement("span", {
|
|
104
96
|
className: "paywall-card-feature-icon",
|
|
105
97
|
"aria-hidden": !0
|
|
106
|
-
}, e.icon ??
|
|
98
|
+
}, e.icon ?? W), /* @__PURE__ */ a.createElement("span", null, e.href || e.onLinkClick ? /* @__PURE__ */ a.createElement(f, {
|
|
107
99
|
href: e.href ?? "#",
|
|
108
100
|
label: e.text,
|
|
109
101
|
external: e.external,
|
|
110
|
-
onClick: (
|
|
111
|
-
e.href ||
|
|
102
|
+
onClick: (h) => {
|
|
103
|
+
e.href || h.preventDefault(), e.onLinkClick?.(h);
|
|
112
104
|
}
|
|
113
105
|
}) : e.text)))), /* @__PURE__ */ a.createElement("div", {
|
|
114
106
|
className: "paywall-card-actions"
|
|
115
|
-
}, /* @__PURE__ */ a.createElement(
|
|
107
|
+
}, /* @__PURE__ */ a.createElement(E, {
|
|
116
108
|
type: "ghost",
|
|
117
109
|
size: "md",
|
|
118
|
-
label:
|
|
110
|
+
label: _,
|
|
119
111
|
onClick: z,
|
|
120
112
|
className: "paywall-card-btn-later"
|
|
121
|
-
}), /* @__PURE__ */ a.createElement(
|
|
113
|
+
}), /* @__PURE__ */ a.createElement(E, {
|
|
122
114
|
type: "primary",
|
|
123
115
|
size: "md",
|
|
124
|
-
label:
|
|
116
|
+
label: A,
|
|
125
117
|
onClick: P,
|
|
126
118
|
className: "paywall-card-btn-purchase"
|
|
127
119
|
}))), /* @__PURE__ */ a.createElement("div", {
|
|
128
120
|
className: "paywall-card-media"
|
|
129
|
-
},
|
|
130
|
-
ref: m,
|
|
121
|
+
}, S))), Z = /* @__PURE__ */ a.createElement("div", {
|
|
131
122
|
role: "dialog",
|
|
132
123
|
"aria-modal": "true",
|
|
133
|
-
"aria-labelledby":
|
|
124
|
+
"aria-labelledby": m,
|
|
134
125
|
className: `paywall-modal-content ${B}`,
|
|
135
126
|
style: {
|
|
136
|
-
height:
|
|
137
|
-
minHeight:
|
|
127
|
+
height: d,
|
|
128
|
+
minHeight: d
|
|
138
129
|
}
|
|
139
|
-
},
|
|
130
|
+
}, Y);
|
|
140
131
|
return /* @__PURE__ */ a.createElement(a.Fragment, null, c && /* @__PURE__ */ a.createElement("span", {
|
|
141
132
|
className: "paywall-trigger"
|
|
142
|
-
}, c), /* @__PURE__ */ a.createElement(
|
|
143
|
-
isOpen:
|
|
133
|
+
}, c), /* @__PURE__ */ a.createElement(G, {
|
|
134
|
+
isOpen: N,
|
|
135
|
+
onClose: n,
|
|
144
136
|
onModalClick: () => {
|
|
145
137
|
},
|
|
146
|
-
renderModalContent: () =>
|
|
147
|
-
width:
|
|
138
|
+
renderModalContent: () => Z,
|
|
139
|
+
width: O,
|
|
148
140
|
contentClassName: "paywall-modal-content-wrapper",
|
|
149
141
|
automationId: i
|
|
150
142
|
}));
|
|
151
143
|
};
|
|
152
144
|
export {
|
|
153
|
-
|
|
154
|
-
|
|
145
|
+
ea as Paywall,
|
|
146
|
+
ea as default
|
|
155
147
|
};
|
|
156
148
|
//# sourceMappingURL=index64.js.map
|
package/dist/index64.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index64.js","sources":["../src/components/Paywall/index.tsx"],"sourcesContent":["import React, { FC, ReactNode, useRef } from 'react';\nimport { Button } from 'src/components/Button';\nimport { Badge } from 'src/components/Badge';\nimport { Icon } from 'src/components/Icon';\nimport { Link } from 'src/components/Link';\nimport { CustomModal } from 'src/components/CustomModal';\nimport { useFocusTrap } from 'src/utils/a11y';\nimport { useStableId } from 'src/utils/useStableId';\nimport './style.scss';\n\n/** Variant: with bullet points list, or description only */\nexport type PaywallVariant = 'with-points' | 'description-only';\n\n/** Size: small (656×384) or large (768×500) – sets modal dimensions and media panel proportion */\nexport type PaywallSize = 'sm' | 'lg';\n\n/** Feature list item: plain string (uses default/list icon) or object with text, optional per-item icon, and optional link/action */\nexport type PaywallFeatureItem =\n | string\n | {\n text: string;\n icon?: ReactNode;\n /** If provided, the feature text becomes a hyperlink navigating to this URL */\n href?: string;\n /** If true, opens the href in a new tab (only applicable when href is set) */\n external?: boolean;\n /** Click handler — use with href for analytics, or alone for SPA actions */\n onLinkClick?: (e: React.MouseEvent<HTMLAnchorElement>) => void;\n };\n\nconst PAYWALL_SIZE_DIMENSIONS: Record<PaywallSize, { width: string; height: string }> = {\n lg: { width: '768px', height: '500px' },\n sm: { width: '656px', height: '384px' },\n};\n\nexport interface PaywallProps {\n isOpen: boolean;\n onClose: () => void;\n trigger?: ReactNode;\n modalWidth?: string;\n modalHeight?: string;\n variant: PaywallVariant;\n size?: PaywallSize;\n availabilityLabel?: string;\n availabilityBadgeText: string;\n title: string;\n description: string;\n learnMoreLinkText?: string;\n learnMoreHref?: string;\n onLearnMoreClick?: (e: React.MouseEvent<HTMLAnchorElement>) => void;\n featureListDesc?: string;\n featuresList?: PaywallFeatureItem[];\n featureItemIcon?: ReactNode;\n mediaContent?: ReactNode;\n laterButtonText: string;\n purchaseButtonText: string;\n onLaterClick?: () => void;\n onPurchaseClick?: () => void;\n className?: string;\n modalContentClassName?: string;\n automationId?: string;\n id?: string;\n}\n\n/** Paywall – always shown in a modal. Pass isOpen/onClose and optionally a trigger. */\nexport const Paywall: FC<PaywallProps> = ({\n isOpen,\n onClose,\n trigger,\n modalWidth,\n modalHeight,\n variant,\n size = 'lg',\n availabilityLabel = 'Available on ',\n availabilityBadgeText,\n title,\n description,\n learnMoreLinkText,\n learnMoreHref,\n onLearnMoreClick,\n featureListDesc,\n featuresList = [],\n featureItemIcon,\n mediaContent,\n laterButtonText,\n purchaseButtonText,\n onLaterClick,\n onPurchaseClick,\n className = '',\n modalContentClassName = '',\n automationId = '',\n id: providedId,\n}) => {\n const modalRef = useRef<HTMLDivElement>(null);\n const titleId = useStableId(providedId, 'paywall-title');\n\n useFocusTrap({\n enabled: isOpen,\n containerRef: modalRef,\n restoreFocus: true,\n initialFocus: '.paywall-card-btn-later',\n });\n\n const handleLaterClick = () => {\n onLaterClick?.();\n onClose();\n };\n\n const dimensions = PAYWALL_SIZE_DIMENSIONS[size];\n const width = modalWidth ?? dimensions.width;\n const height = modalHeight ?? dimensions.height;\n\n const withPoints = variant === 'with-points' && size === 'lg';\n const normalizedFeatures = featuresList.map((item): { text: string; icon?: ReactNode; href?: string; external?: boolean; onLinkClick?: (e: React.MouseEvent<HTMLAnchorElement>) => void } =>\n typeof item === 'string'\n ? { text: item }\n : { text: item.text, icon: item.icon, href: item.href, external: item.external, onLinkClick: item.onLinkClick }\n );\n const showFeatures = withPoints && normalizedFeatures.length > 0;\n const defaultIcon = featureItemIcon ?? <Icon name=\"info\" rotation='180'/>;\n\n const content = (\n <section\n className={`paywall paywall-ctn paywall-ctn--${size} ${className}`}\n data-automation-id={automationId}\n >\n <div className=\"paywall-card\">\n <div className=\"paywall-card-content\">\n <span className=\"paywall-card-availability\">\n <span className=\"paywall-card-availability-label\">{availabilityLabel}</span>\n <Badge\n label={availabilityBadgeText}\n className=\"paywall-card-badge\"\n bgColor=\"var(--color-yellow-100)\"\n textColor=\"var(--color-yellow-700)\"\n />\n </span>\n <h3 id={titleId} className=\"paywall-card-title\">{title}</h3>\n <p className=\"paywall-card-description\">\n {description}\n {learnMoreLinkText && (learnMoreHref || onLearnMoreClick) && (\n <Link\n href={learnMoreHref ?? '#'}\n label={learnMoreLinkText}\n external={!!learnMoreHref}\n className=\"paywall-card-learn-more\"\n onClick={(e) => { if (!learnMoreHref) { e.preventDefault(); } onLearnMoreClick?.(e); }}\n />\n )}\n </p>\n {withPoints && featureListDesc && (\n <p className=\"paywall-card-features-intro\">{featureListDesc}</p>\n )}\n {showFeatures && (\n <ul className=\"paywall-card-features-list\">\n {normalizedFeatures.map((item) => (\n <li key={item.text} className=\"paywall-card-feature-item\">\n <span className=\"paywall-card-feature-icon\" aria-hidden>\n {item.icon ?? defaultIcon}\n </span>\n <span>\n {item.href || item.onLinkClick ? (\n <Link\n href={item.href ?? '#'}\n label={item.text}\n external={item.external}\n onClick={(e) => { if (!item.href) { e.preventDefault(); } item.onLinkClick?.(e); }}\n />\n ) : (\n item.text\n )}\n </span>\n </li>\n ))}\n </ul>\n )}\n <div className=\"paywall-card-actions\">\n <Button\n type=\"ghost\"\n size=\"md\"\n label={laterButtonText}\n onClick={handleLaterClick}\n className=\"paywall-card-btn-later\"\n />\n <Button\n type=\"primary\"\n size=\"md\"\n label={purchaseButtonText}\n onClick={onPurchaseClick}\n className=\"paywall-card-btn-purchase\"\n />\n </div>\n </div>\n <div className=\"paywall-card-media\">\n {mediaContent}\n </div>\n </div>\n </section>\n );\n\n const modalContent = (\n <div\n ref={modalRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={titleId}\n className={`paywall-modal-content ${modalContentClassName}`}\n style={{ height, minHeight: height }}\n >\n {content}\n </div>\n );\n\n return (\n <>\n {trigger && <span className=\"paywall-trigger\">{trigger}</span>}\n <CustomModal\n isOpen={isOpen}\n onModalClick={() => {}}\n renderModalContent={() => modalContent}\n width={width}\n contentClassName=\"paywall-modal-content-wrapper\"\n automationId={automationId}\n />\n </>\n );\n};\n\nexport default Paywall;\n"],"names":["React__default","useRef","Button","Badge","Icon","Link","CustomModal","useFocusTrap","useStableId","PAYWALL_SIZE_DIMENSIONS","lg","width","height","sm","Paywall","isOpen","onClose","trigger","modalWidth","modalHeight","variant","size","availabilityLabel","availabilityBadgeText","title","description","learnMoreLinkText","learnMoreHref","onLearnMoreClick","featureListDesc","featuresList","featureItemIcon","mediaContent","laterButtonText","purchaseButtonText","onLaterClick","onPurchaseClick","className","modalContentClassName","automationId","id","providedId","modalRef","titleId","enabled","containerRef","restoreFocus","initialFocus","handleLaterClick","dimensions","withPoints","normalizedFeatures","map","item","text","icon","href","external","onLinkClick","showFeatures","length","defaultIcon","React","createElement","name","rotation","content","label","bgColor","textColor","onClick","e","preventDefault","key","type","modalContent","ref","role","style","minHeight","Fragment","onModalClick","renderModalContent","contentClassName"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index64.js","sources":["../src/components/Paywall/index.tsx"],"sourcesContent":["import React, { FC, ReactNode } from 'react';\nimport { Button } from 'src/components/Button';\nimport { Badge } from 'src/components/Badge';\nimport { Icon } from 'src/components/Icon';\nimport { Link } from 'src/components/Link';\nimport { CustomModal } from 'src/components/CustomModal';\nimport { useStableId } from 'src/utils/useStableId';\nimport './style.scss';\n\n/** Variant: with bullet points list, or description only */\nexport type PaywallVariant = 'with-points' | 'description-only';\n\n/** Size: small (656×384) or large (768×500) – sets modal dimensions and media panel proportion */\nexport type PaywallSize = 'sm' | 'lg';\n\n/** Feature list item: plain string (uses default/list icon) or object with text, optional per-item icon, and optional link/action */\nexport type PaywallFeatureItem =\n | string\n | {\n text: string;\n icon?: ReactNode;\n /** If provided, the feature text becomes a hyperlink navigating to this URL */\n href?: string;\n /** If true, opens the href in a new tab (only applicable when href is set) */\n external?: boolean;\n /** Click handler — use with href for analytics, or alone for SPA actions */\n onLinkClick?: (e: React.MouseEvent<HTMLAnchorElement>) => void;\n };\n\nconst PAYWALL_SIZE_DIMENSIONS: Record<PaywallSize, { width: string; height: string }> = {\n lg: { width: '768px', height: '500px' },\n sm: { width: '656px', height: '384px' },\n};\n\nexport interface PaywallProps {\n isOpen: boolean;\n onClose: () => void;\n trigger?: ReactNode;\n modalWidth?: string;\n modalHeight?: string;\n variant: PaywallVariant;\n size?: PaywallSize;\n availabilityLabel?: string;\n availabilityBadgeText: string;\n title: string;\n description: string;\n learnMoreLinkText?: string;\n learnMoreHref?: string;\n onLearnMoreClick?: (e: React.MouseEvent<HTMLAnchorElement>) => void;\n featureListDesc?: string;\n featuresList?: PaywallFeatureItem[];\n featureItemIcon?: ReactNode;\n mediaContent?: ReactNode;\n laterButtonText: string;\n purchaseButtonText: string;\n onLaterClick?: () => void;\n onPurchaseClick?: () => void;\n className?: string;\n modalContentClassName?: string;\n automationId?: string;\n id?: string;\n}\n\n/** Paywall – always shown in a modal. Pass isOpen/onClose and optionally a trigger. */\nexport const Paywall: FC<PaywallProps> = ({\n isOpen,\n onClose,\n trigger,\n modalWidth,\n modalHeight,\n variant,\n size = 'lg',\n availabilityLabel = 'Available on ',\n availabilityBadgeText,\n title,\n description,\n learnMoreLinkText,\n learnMoreHref,\n onLearnMoreClick,\n featureListDesc,\n featuresList = [],\n featureItemIcon,\n mediaContent,\n laterButtonText,\n purchaseButtonText,\n onLaterClick,\n onPurchaseClick,\n className = '',\n modalContentClassName = '',\n automationId = '',\n id: providedId,\n}) => {\n const titleId = useStableId(providedId, 'paywall-title');\n\n const handleLaterClick = () => {\n onLaterClick?.();\n onClose();\n };\n\n const dimensions = PAYWALL_SIZE_DIMENSIONS[size];\n const width = modalWidth ?? dimensions.width;\n const height = modalHeight ?? dimensions.height;\n\n const withPoints = variant === 'with-points' && size === 'lg';\n const normalizedFeatures = featuresList.map((item): { text: string; icon?: ReactNode; href?: string; external?: boolean; onLinkClick?: (e: React.MouseEvent<HTMLAnchorElement>) => void } =>\n typeof item === 'string'\n ? { text: item }\n : { text: item.text, icon: item.icon, href: item.href, external: item.external, onLinkClick: item.onLinkClick }\n );\n const showFeatures = withPoints && normalizedFeatures.length > 0;\n const defaultIcon = featureItemIcon ?? <Icon name=\"info\" rotation='180'/>;\n\n const content = (\n <section\n className={`paywall paywall-ctn paywall-ctn--${size} ${className}`}\n data-automation-id={automationId}\n >\n <div className=\"paywall-card\">\n <div className=\"paywall-card-content\">\n <span className=\"paywall-card-availability\">\n <span className=\"paywall-card-availability-label\">{availabilityLabel}</span>\n <Badge\n label={availabilityBadgeText}\n className=\"paywall-card-badge\"\n bgColor=\"var(--color-yellow-100)\"\n textColor=\"var(--color-yellow-700)\"\n />\n </span>\n <h3 id={titleId} className=\"paywall-card-title\">{title}</h3>\n <p className=\"paywall-card-description\">\n {description}\n {learnMoreLinkText && (learnMoreHref || onLearnMoreClick) && (\n <Link\n href={learnMoreHref ?? '#'}\n label={learnMoreLinkText}\n external={!!learnMoreHref}\n className=\"paywall-card-learn-more\"\n onClick={(e) => { if (!learnMoreHref) { e.preventDefault(); } onLearnMoreClick?.(e); }}\n />\n )}\n </p>\n {withPoints && featureListDesc && (\n <p className=\"paywall-card-features-intro\">{featureListDesc}</p>\n )}\n {showFeatures && (\n <ul className=\"paywall-card-features-list\">\n {normalizedFeatures.map((item) => (\n <li key={item.text} className=\"paywall-card-feature-item\">\n <span className=\"paywall-card-feature-icon\" aria-hidden>\n {item.icon ?? defaultIcon}\n </span>\n <span>\n {item.href || item.onLinkClick ? (\n <Link\n href={item.href ?? '#'}\n label={item.text}\n external={item.external}\n onClick={(e) => { if (!item.href) { e.preventDefault(); } item.onLinkClick?.(e); }}\n />\n ) : (\n item.text\n )}\n </span>\n </li>\n ))}\n </ul>\n )}\n <div className=\"paywall-card-actions\">\n <Button\n type=\"ghost\"\n size=\"md\"\n label={laterButtonText}\n onClick={handleLaterClick}\n className=\"paywall-card-btn-later\"\n />\n <Button\n type=\"primary\"\n size=\"md\"\n label={purchaseButtonText}\n onClick={onPurchaseClick}\n className=\"paywall-card-btn-purchase\"\n />\n </div>\n </div>\n <div className=\"paywall-card-media\">\n {mediaContent}\n </div>\n </div>\n </section>\n );\n\n const modalContent = (\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={titleId}\n className={`paywall-modal-content ${modalContentClassName}`}\n style={{ height, minHeight: height }}\n >\n {content}\n </div>\n );\n\n return (\n <>\n {trigger && <span className=\"paywall-trigger\">{trigger}</span>}\n <CustomModal\n isOpen={isOpen}\n onClose={onClose}\n onModalClick={() => {}}\n renderModalContent={() => modalContent}\n width={width}\n contentClassName=\"paywall-modal-content-wrapper\"\n automationId={automationId}\n />\n </>\n );\n};\n\nexport default Paywall;\n"],"names":["React__default","Button","Badge","Icon","Link","CustomModal","useStableId","PAYWALL_SIZE_DIMENSIONS","lg","width","height","sm","Paywall","isOpen","onClose","trigger","modalWidth","modalHeight","variant","size","availabilityLabel","availabilityBadgeText","title","description","learnMoreLinkText","learnMoreHref","onLearnMoreClick","featureListDesc","featuresList","featureItemIcon","mediaContent","laterButtonText","purchaseButtonText","onLaterClick","onPurchaseClick","className","modalContentClassName","automationId","id","providedId","titleId","handleLaterClick","dimensions","withPoints","normalizedFeatures","map","item","text","icon","href","external","onLinkClick","showFeatures","length","defaultIcon","React","createElement","name","rotation","content","label","bgColor","textColor","onClick","e","preventDefault","key","type","modalContent","role","style","minHeight","Fragment","onModalClick","renderModalContent","contentClassName"],"mappings":"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"}
|
package/package.json
CHANGED
package/dist/index195.js
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import * as e from "react";
|
|
2
|
-
function p({
|
|
3
|
-
disabled: t = !1,
|
|
4
|
-
onFocusIn: u,
|
|
5
|
-
onFocusOut: n,
|
|
6
|
-
onEscape: a,
|
|
7
|
-
closeOnEscape: c = !0
|
|
8
|
-
}) {
|
|
9
|
-
const f = e.useCallback((r) => {
|
|
10
|
-
t || u?.();
|
|
11
|
-
}, [t, u]), s = e.useCallback((r) => {
|
|
12
|
-
if (t) return;
|
|
13
|
-
const o = r.relatedTarget;
|
|
14
|
-
o && r.currentTarget.contains(o) || n?.();
|
|
15
|
-
}, [t, n]), C = e.useCallback((r) => {
|
|
16
|
-
t || !c || r.key !== "Escape" || (r.preventDefault(), a?.());
|
|
17
|
-
}, [t, c, a]);
|
|
18
|
-
return {
|
|
19
|
-
onFocusCapture: f,
|
|
20
|
-
onBlurCapture: s,
|
|
21
|
-
onKeyDownCapture: C
|
|
22
|
-
};
|
|
23
|
-
}
|
|
24
|
-
export {
|
|
25
|
-
p as useDismissOnFocusOut
|
|
26
|
-
};
|
|
27
|
-
//# sourceMappingURL=index195.js.map
|
package/dist/index195.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index195.js","sources":["../src/utils/a11y/useDismissOnFocusOut.ts"],"sourcesContent":["import * as React from 'react';\n\nexport type UseDismissOnFocusOutOptions = {\n /**\n * Disable all handlers (no-ops). Useful when a component provides alternate\n * focus/keyboard behavior (e.g., disabled-trigger tooltip wrapper).\n */\n disabled?: boolean;\n /**\n * Called when focus enters anywhere within the target.\n */\n onFocusIn?: () => void;\n /**\n * Called when focus leaves the target (i.e., focus moves to an element\n * outside the currentTarget).\n */\n onFocusOut?: () => void;\n /**\n * Called when Escape is pressed while focus is within the target.\n */\n onEscape?: () => void;\n /**\n * Whether Escape should trigger dismissal. Default: true.\n */\n closeOnEscape?: boolean;\n};\n\nexport type UseDismissOnFocusOutReturn<T extends HTMLElement = HTMLElement> = {\n onFocusCapture: (e: React.FocusEvent<T>) => void;\n onBlurCapture: (e: React.FocusEvent<T>) => void;\n onKeyDownCapture: (e: React.KeyboardEvent<T>) => void;\n};\n\n/**\n * Returns capture-phase handlers to \"show on focus within\" and \"dismiss on focus out\",\n * with optional Escape-to-dismiss.\n *\n * Intended for non-interactive surfaces like tooltips where content should remain\n * visible while focus stays within the wrapper.\n */\nexport function useDismissOnFocusOut<T extends HTMLElement = HTMLElement>({\n disabled = false,\n onFocusIn,\n onFocusOut,\n onEscape,\n closeOnEscape = true\n}: UseDismissOnFocusOutOptions): UseDismissOnFocusOutReturn<T> {\n const onFocusCapture = React.useCallback(\n (_e: React.FocusEvent<T>) => {\n if (disabled) return;\n onFocusIn?.();\n },\n [disabled, onFocusIn]\n );\n\n const onBlurCapture = React.useCallback(\n (e: React.FocusEvent<T>) => {\n if (disabled) return;\n\n const nextFocused = e.relatedTarget as Node | null;\n if (nextFocused && e.currentTarget.contains(nextFocused)) return;\n\n onFocusOut?.();\n },\n [disabled, onFocusOut]\n );\n\n const onKeyDownCapture = React.useCallback(\n (e: React.KeyboardEvent<T>) => {\n if (disabled || !closeOnEscape || e.key !== 'Escape') return;\n\n e.preventDefault();\n onEscape?.();\n },\n [disabled, closeOnEscape, onEscape]\n );\n\n return { onFocusCapture, onBlurCapture, onKeyDownCapture };\n}\n\n"],"names":["React","useDismissOnFocusOut","disabled","onFocusIn","onFocusOut","onEscape","closeOnEscape","onFocusCapture","useCallback","_e","onBlurCapture","e","nextFocused","relatedTarget","currentTarget","contains","onKeyDownCapture","key","preventDefault"],"mappings":"AAwCO,YAAAA,OAAA;AAAA,SAASC,EAA0D;AAAA,EACxEC,UAAAA,IAAW;AAAA,EACXC,WAAAA;AAAAA,EACAC,YAAAA;AAAAA,EACAC,UAAAA;AAAAA,EACAC,eAAAA,IAAgB;AACW,GAAkC;AAC7D,QAAMC,IAAiBP,EAAMQ,YAC3B,CAACC,MAA4B;AAC3B,IAAIP,KACJC,IAAAA;AAAAA,EACF,GACA,CAACD,GAAUC,CAAS,CACtB,GAEMO,IAAgBV,EAAMQ,YAC1B,CAACG,MAA2B;AAC1B,QAAIT,EAAU;AAEd,UAAMU,IAAcD,EAAEE;AACtB,IAAID,KAAeD,EAAEG,cAAcC,SAASH,CAAW,KAEvDR,IAAAA;AAAAA,EACF,GACA,CAACF,GAAUE,CAAU,CACvB,GAEMY,IAAmBhB,EAAMQ,YAC7B,CAACG,MAA8B;AAC7B,IAAIT,KAAY,CAACI,KAAiBK,EAAEM,QAAQ,aAE5CN,EAAEO,eAAAA,GACFb,IAAAA;AAAAA,EACF,GACA,CAACH,GAAUI,GAAeD,CAAQ,CACpC;AAEA,SAAO;AAAA,IAAEE,gBAAAA;AAAAA,IAAgBG,eAAAA;AAAAA,IAAeM,kBAAAA;AAAAA,EAAAA;AAC1C;"}
|