@xscriptor/xcomponents 0.1.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/CODE_OF_CONDUCT.md +35 -0
- package/CONTRIBUTING.md +64 -0
- package/LICENSE +21 -0
- package/README.md +127 -0
- package/SECURITY.md +25 -0
- package/dist/chunk-2OAXRRVQ.mjs +150 -0
- package/dist/chunk-2OAXRRVQ.mjs.map +1 -0
- package/dist/chunk-42XPBYTL.mjs +186 -0
- package/dist/chunk-42XPBYTL.mjs.map +1 -0
- package/dist/chunk-5G4P2E76.mjs +66 -0
- package/dist/chunk-5G4P2E76.mjs.map +1 -0
- package/dist/chunk-FZRTAML3.mjs +1 -0
- package/dist/chunk-FZRTAML3.mjs.map +1 -0
- package/dist/chunk-NY22GB3E.mjs +311 -0
- package/dist/chunk-NY22GB3E.mjs.map +1 -0
- package/dist/chunk-QCMWPIG7.mjs +320 -0
- package/dist/chunk-QCMWPIG7.mjs.map +1 -0
- package/dist/chunk-U27ZVCP7.mjs +247 -0
- package/dist/chunk-U27ZVCP7.mjs.map +1 -0
- package/dist/components/content/index.css +132 -0
- package/dist/components/content/index.css.map +1 -0
- package/dist/components/content/index.d.mts +17 -0
- package/dist/components/content/index.d.ts +17 -0
- package/dist/components/content/index.js +102 -0
- package/dist/components/content/index.js.map +1 -0
- package/dist/components/content/index.mjs +7 -0
- package/dist/components/content/index.mjs.map +1 -0
- package/dist/components/forms/index.css +307 -0
- package/dist/components/forms/index.css.map +1 -0
- package/dist/components/forms/index.d.mts +68 -0
- package/dist/components/forms/index.d.ts +68 -0
- package/dist/components/forms/index.js +357 -0
- package/dist/components/forms/index.js.map +1 -0
- package/dist/components/forms/index.mjs +9 -0
- package/dist/components/forms/index.mjs.map +1 -0
- package/dist/components/gallery/index.css +229 -0
- package/dist/components/gallery/index.css.map +1 -0
- package/dist/components/gallery/index.d.mts +29 -0
- package/dist/components/gallery/index.d.ts +29 -0
- package/dist/components/gallery/index.js +187 -0
- package/dist/components/gallery/index.js.map +1 -0
- package/dist/components/gallery/index.mjs +9 -0
- package/dist/components/gallery/index.mjs.map +1 -0
- package/dist/components/index.css +1181 -0
- package/dist/components/index.css.map +1 -0
- package/dist/components/index.d.mts +8 -0
- package/dist/components/index.d.ts +8 -0
- package/dist/components/index.js +1317 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/index.mjs +50 -0
- package/dist/components/index.mjs.map +1 -0
- package/dist/components/layout/index.css +168 -0
- package/dist/components/layout/index.css.map +1 -0
- package/dist/components/layout/index.d.mts +55 -0
- package/dist/components/layout/index.d.ts +55 -0
- package/dist/components/layout/index.js +224 -0
- package/dist/components/layout/index.js.map +1 -0
- package/dist/components/layout/index.mjs +11 -0
- package/dist/components/layout/index.mjs.map +1 -0
- package/dist/components/navigation/index.css +229 -0
- package/dist/components/navigation/index.css.map +1 -0
- package/dist/components/navigation/index.d.mts +76 -0
- package/dist/components/navigation/index.d.ts +76 -0
- package/dist/components/navigation/index.js +347 -0
- package/dist/components/navigation/index.js.map +1 -0
- package/dist/components/navigation/index.mjs +7 -0
- package/dist/components/navigation/index.mjs.map +1 -0
- package/dist/components/social/index.css +116 -0
- package/dist/components/social/index.css.map +1 -0
- package/dist/components/social/index.d.mts +55 -0
- package/dist/components/social/index.d.ts +55 -0
- package/dist/components/social/index.js +280 -0
- package/dist/components/social/index.js.map +1 -0
- package/dist/components/social/index.mjs +21 -0
- package/dist/components/social/index.mjs.map +1 -0
- package/dist/index.css +1181 -0
- package/dist/index.css.map +1 -0
- package/dist/index.d.mts +8 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.js +1317 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +50 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +86 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/social/xsocialcontact/XSocialContact.module.css","../src/components/social/xsocialcontact/XSocialContact.tsx","../src/components/social/xsocialcontact/XSocialIcons.tsx"],"sourcesContent":["/* XSocialContact Styles */\n\n.container {\n --columns: 3;\n --gap: 1.5rem;\n --padding: 1.5rem;\n --text-size: 1rem;\n --alignment: center;\n --text-align: center;\n --icon-gap: 1.5rem;\n --border-radius: 0.5rem;\n --bg-color: transparent;\n --icon-color: currentColor;\n --icon-hover-color: currentColor;\n --border-color: transparent;\n --border-width: 0px;\n --border-style: solid;\n --text-color: inherit;\n\n display: grid;\n grid-template-columns: repeat(var(--columns), 1fr);\n gap: var(--gap);\n padding: var(--padding);\n background-color: var(--bg-color);\n border: var(--border-width) var(--border-style) var(--border-color);\n border-radius: var(--border-radius);\n justify-items: var(--alignment);\n}\n\n/* Size variants */\n.small {\n --icon-gap: 1rem;\n --gap: 1rem;\n --padding: 1rem;\n --text-size: 0.875rem;\n}\n\n.medium {\n --icon-gap: 1.5rem;\n --gap: 1.5rem;\n --padding: 1.5rem;\n --text-size: 1rem;\n}\n\n.large {\n --icon-gap: 2rem;\n --gap: 2rem;\n --padding: 2rem;\n --text-size: 1.125rem;\n}\n\n/* Rows configuration */\n.rows1 {\n grid-template-rows: auto;\n}\n\n.rows2 {\n grid-template-rows: repeat(2, auto);\n}\n\n.rows3 {\n grid-template-rows: repeat(3, auto);\n}\n\n.rows4 {\n grid-template-rows: repeat(4, auto);\n}\n\n/* Item styling */\n.item {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: calc(var(--icon-gap) * 0.5);\n text-decoration: none;\n transition: opacity 0.2s ease;\n color: inherit;\n}\n\n.item:hover {\n opacity: 0.8;\n}\n\n.iconWrapper {\n --item-icon-color: var(--icon-color);\n --item-icon-hover-color: var(--icon-hover-color);\n \n display: flex;\n align-items: center;\n justify-content: center;\n width: var(--icon-gap);\n height: var(--icon-gap);\n color: var(--item-icon-color);\n transition: color 0.2s ease;\n}\n\n.item:hover .iconWrapper {\n color: var(--item-icon-hover-color);\n}\n\n.text {\n font-size: var(--text-size);\n color: var(--text-color);\n text-align: var(--text-align);\n word-break: break-word;\n max-width: 100%;\n}\n\n/* Responsive */\n@media (max-width: 768px) {\n .container {\n --columns: 2;\n --gap: calc(var(--gap) * 0.75);\n --padding: calc(var(--padding) * 0.75);\n }\n \n .rows2,\n .rows3,\n .rows4 {\n grid-template-columns: repeat(2, 1fr);\n grid-template-rows: repeat(2, auto);\n }\n}\n\n@media (max-width: 480px) {\n .container {\n --columns: 1;\n --gap: calc(var(--gap) * 0.5);\n --padding: calc(var(--padding) * 0.5);\n }\n \n .rows2,\n .rows3,\n .rows4 {\n grid-template-columns: 1fr;\n grid-template-rows: auto;\n }\n}\n","\"use client\";\n\nimport React from \"react\";\nimport styles from \"./XSocialContact.module.css\";\n\nexport interface SocialItem {\n id: string;\n href: string;\n label: string;\n icon: React.ReactNode;\n text?: string;\n iconColor?: string;\n iconHoverColor?: string;\n}\n\nexport interface XSocialContactProps {\n items: SocialItem[];\n columns?: number;\n rows?: number;\n size?: \"small\" | \"medium\" | \"large\";\n alignment?: \"left\" | \"center\" | \"right\";\n gap?: string;\n backgroundColor?: string;\n iconDefaultColor?: string;\n iconDefaultHoverColor?: string;\n borderColor?: string;\n borderWidth?: string;\n borderStyle?: \"solid\" | \"dashed\" | \"dotted\";\n borderRadius?: \"rounded\" | \"square\";\n padding?: string;\n textAlign?: \"left\" | \"center\" | \"right\";\n textColor?: string;\n textSize?: string;\n}\n\nexport default function XSocialContact({\n items,\n columns = 3,\n rows,\n size = \"medium\",\n alignment = \"center\",\n gap,\n backgroundColor,\n iconDefaultColor,\n iconDefaultHoverColor,\n borderColor,\n borderWidth,\n borderStyle = \"solid\",\n borderRadius = \"rounded\",\n padding,\n textAlign = \"center\",\n textColor,\n textSize,\n}: XSocialContactProps) {\n const sizeMap = {\n small: \"1rem\",\n medium: \"1.5rem\",\n large: \"2rem\",\n } as const;\n\n const alignmentMap = {\n left: \"flex-start\",\n center: \"center\",\n right: \"flex-end\",\n } as const;\n\n const textAlignMap = {\n left: \"left\",\n center: \"center\",\n right: \"right\",\n } as const;\n\n const radiusMap = {\n rounded: \"0.5rem\",\n square: \"0\",\n } as const;\n\n const defaultGap = gap || (size === \"small\" ? \"1rem\" : size === \"medium\" ? \"1.5rem\" : \"2rem\");\n const defaultPadding =\n padding || (size === \"small\" ? \"1rem\" : size === \"medium\" ? \"1.5rem\" : \"2rem\");\n const defaultTextSize = textSize || (size === \"small\" ? \"0.875rem\" : size === \"medium\" ? \"1rem\" : \"1.125rem\");\n\n const customStyles = {\n \"--columns\": columns.toString(),\n \"--gap\": defaultGap,\n \"--padding\": defaultPadding,\n \"--text-size\": defaultTextSize,\n \"--alignment\": alignmentMap[alignment],\n \"--text-align\": textAlignMap[textAlign],\n \"--icon-gap\": sizeMap[size],\n \"--border-radius\": radiusMap[borderRadius],\n ...(backgroundColor && { \"--bg-color\": backgroundColor }),\n ...(iconDefaultColor && { \"--icon-color\": iconDefaultColor }),\n ...(iconDefaultHoverColor && { \"--icon-hover-color\": iconDefaultHoverColor }),\n ...(borderColor && { \"--border-color\": borderColor }),\n ...(borderWidth && { \"--border-width\": borderWidth }),\n ...(textColor && { \"--text-color\": textColor }),\n \"--border-style\": borderStyle,\n } as React.CSSProperties;\n\n let containerClass = styles.container;\n if (rows) {\n containerClass += ` ${styles[`rows${rows}`]}`;\n }\n\n return (\n <div\n className={`${containerClass} ${styles[size]}`}\n style={customStyles}\n >\n {items.map((item) => (\n <a\n key={item.id}\n href={item.href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={styles.item}\n title={item.label}\n style={{\n ...(item.iconColor && { \"--item-icon-color\": item.iconColor }),\n ...(item.iconHoverColor && { \"--item-icon-hover-color\": item.iconHoverColor }),\n } as React.CSSProperties}\n >\n <div className={styles.iconWrapper}>{item.icon}</div>\n {item.text && <span className={styles.text}>{item.text}</span>}\n </a>\n ))}\n </div>\n );\n}\n","\"use client\";\n\nimport React, { useState } from \"react\";\n\nexport interface XSocialIconProps extends Omit<React.SVGProps<SVGSVGElement>, \"color\" | \"children\"> {\n size?: number | string;\n color?: string;\n hoverColor?: string;\n fillColor?: string;\n hoverFillColor?: string;\n backgroundColor?: string;\n badgeColor?: string;\n badgeBackgroundColor?: string;\n strokeWidth?: number;\n showBadge?: boolean;\n title?: string;\n}\n\ntype IconPalette = {\n stroke: string;\n fill: string;\n badgeStroke: string;\n badgeFill: string;\n};\n\ntype SocialIconContentProps = {\n palette: IconPalette;\n};\n\ntype SocialIconRenderer = (props: SocialIconContentProps) => React.ReactNode;\n\nfunction XSocialIconShell({\n size = 24,\n color = \"currentColor\",\n hoverColor,\n fillColor,\n hoverFillColor,\n backgroundColor,\n badgeColor,\n badgeBackgroundColor,\n strokeWidth = 1.8,\n showBadge = true,\n title,\n style,\n children,\n ...rest\n}: XSocialIconProps & { children: SocialIconRenderer }) {\n const [isHovered, setIsHovered] = useState(false);\n\n const stroke = isHovered && hoverColor ? hoverColor : color;\n const fill = isHovered && hoverFillColor ? hoverFillColor : fillColor || stroke;\n const badgeStroke = badgeColor || stroke;\n const badgeFill = badgeBackgroundColor || \"transparent\";\n\n const palette = {\n stroke,\n fill,\n badgeStroke,\n badgeFill,\n };\n\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n role={title ? \"img\" : \"presentation\"}\n aria-label={title}\n aria-hidden={title ? undefined : true}\n onPointerEnter={() => setIsHovered(true)}\n onPointerLeave={() => setIsHovered(false)}\n style={{ color: stroke, ...(style ?? {}) }}\n {...rest}\n >\n {title ? <title>{title}</title> : null}\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"10.5\"\n fill={backgroundColor || \"none\"}\n stroke={backgroundColor ? \"none\" : stroke}\n strokeOpacity={backgroundColor ? undefined : 0.14}\n strokeWidth={backgroundColor ? undefined : strokeWidth}\n />\n {children({ palette })}\n {showBadge && (\n <g>\n <circle cx=\"18\" cy=\"18\" r=\"2.6\" fill={badgeFill} stroke={badgeStroke} strokeWidth=\"1\" />\n <path d=\"M17.05 17.05L18.95 18.95M18.95 17.05L17.05 18.95\" stroke={badgeStroke} strokeWidth=\"1.15\" strokeLinecap=\"round\" />\n </g>\n )}\n </svg>\n );\n}\n\nexport function XTelegramIcon(props: XSocialIconProps) {\n return (\n <XSocialIconShell {...props} strokeWidth={props.strokeWidth ?? 1.8}>\n {({ palette }) => (\n <>\n <path\n d=\"M9.2 12.4l2.15 2.15 5.1-5.1M20.6 4.2L4 12l6.45 1.8 1.8 6.45 2.55-4.2 4.2 2.55 1.6-14.4z\"\n stroke={palette.stroke}\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n fill=\"none\"\n />\n <circle cx=\"12\" cy=\"12\" r=\"9.75\" fill=\"none\" stroke={palette.stroke} strokeOpacity=\"0.18\" strokeWidth=\"1\" />\n </>\n )}\n </XSocialIconShell>\n );\n}\n\nexport function XInstagramIcon(props: XSocialIconProps) {\n return (\n <XSocialIconShell {...props} strokeWidth={props.strokeWidth ?? 1.6}>\n {({ palette }) => (\n <>\n <rect x=\"6.2\" y=\"6.2\" width=\"11.6\" height=\"11.6\" rx=\"3.2\" ry=\"3.2\" stroke={palette.stroke} strokeWidth=\"1.6\" fill=\"none\" />\n <circle cx=\"12\" cy=\"12\" r=\"3.15\" stroke={palette.stroke} strokeWidth=\"1.6\" fill=\"none\" />\n <circle cx=\"16.3\" cy=\"7.7\" r=\"0.7\" fill={palette.fill} />\n </>\n )}\n </XSocialIconShell>\n );\n}\n\nexport function XWhatsappIcon(props: XSocialIconProps) {\n return (\n <XSocialIconShell {...props} strokeWidth={props.strokeWidth ?? 1.5}>\n {({ palette }) => (\n <>\n <path\n d=\"M16.72 13.06c-.29-.15-1.71-.84-1.98-.94-.26-.1-.45-.15-.64.14-.19.29-.74.94-.9 1.13-.16.19-.33.22-.62.08-.29-.15-1.23-.45-2.35-1.45-.87-.77-1.45-1.72-1.62-2.01-.16-.29-.02-.45.12-.59.13-.13.29-.33.43-.49.14-.16.18-.28.27-.47.09-.19.04-.36-.02-.51-.07-.15-.64-1.54-.88-2.1-.23-.55-.47-.48-.64-.49-.16-.01-.36-.01-.55-.01-.19 0-.5.07-.76.36-.26.29-1 1.01-1 2.47 0 1.45 1.04 2.85 1.19 3.05.15.19 2.05 3.12 5.2 4.38.73.31 1.3.49 1.74.63.73.23 1.4.2 1.92.12.59-.09 1.71-.7 1.95-1.37.24-.67.24-1.25.17-1.37-.07-.11-.26-.18-.55-.32z\"\n fill={palette.fill}\n />\n <path\n d=\"M12 3.2C7.13 3.2 3.2 7.13 3.2 12c0 1.56.41 3.02 1.13 4.29L3.2 20.8l4.59-1.09A8.77 8.77 0 0 0 12 20.8c4.87 0 8.8-3.93 8.8-8.8s-3.93-8.8-8.8-8.8z\"\n stroke={palette.stroke}\n strokeWidth=\"1.2\"\n fill=\"none\"\n opacity=\"0.18\"\n />\n </>\n )}\n </XSocialIconShell>\n );\n}\n\nexport function XEmailIcon(props: XSocialIconProps) {\n return (\n <XSocialIconShell {...props} strokeWidth={props.strokeWidth ?? 1.6}>\n {({ palette }) => (\n <>\n <rect x=\"4.5\" y=\"7\" width=\"15\" height=\"10\" rx=\"1.4\" stroke={palette.stroke} strokeWidth=\"1.6\" fill=\"none\" />\n <path d=\"M4.6 7.1l7.4 5.5 7.4-5.5\" stroke={palette.stroke} strokeWidth=\"1.6\" strokeLinecap=\"round\" strokeLinejoin=\"round\" fill=\"none\" />\n </>\n )}\n </XSocialIconShell>\n );\n}\n\nexport function XLinkedInIcon(props: XSocialIconProps) {\n return (\n <XSocialIconShell {...props} strokeWidth={props.strokeWidth ?? 1.6}>\n {({ palette }) => (\n <>\n <path d=\"M8.1 9.1l2.6 2.6 4.1-4.1\" stroke={palette.stroke} strokeWidth=\"1.8\" strokeLinecap=\"round\" strokeLinejoin=\"round\" fill=\"none\" />\n <path d=\"M6.8 10.2c1.6-1.6 4.3-1.6 5.9 0\" stroke={palette.stroke} strokeWidth=\"1.6\" strokeLinecap=\"round\" fill=\"none\" />\n <rect x=\"5\" y=\"5\" width=\"14\" height=\"14\" rx=\"3\" ry=\"3\" stroke={palette.stroke} strokeWidth=\"1.4\" fill=\"none\" opacity=\"0.12\" />\n </>\n )}\n </XSocialIconShell>\n );\n}\n\nexport function XTwitterIcon(props: XSocialIconProps) {\n return (\n <XSocialIconShell {...props} strokeWidth={props.strokeWidth ?? 1.6}>\n {({ palette }) => (\n <>\n <path d=\"M7 4l7 8.7L7 21h2.2l7-8.7L21 4h-2.2l-7 8.7L7 4z\" fill={palette.fill} />\n <path d=\"M8 4h2.2l6.2 7.7\" stroke={palette.stroke} strokeWidth=\"1.2\" strokeLinecap=\"round\" fill=\"none\" opacity=\"0.2\" />\n </>\n )}\n </XSocialIconShell>\n );\n}\n\nexport function XGitHubIcon(props: XSocialIconProps) {\n return (\n <XSocialIconShell {...props} strokeWidth={props.strokeWidth ?? 1.35}>\n {({ palette }) => (\n <>\n <path\n d=\"M12 2c5.52 0 10 4.48 10 10 0 4.42-2.87 8.17-6.84 9.49.5.09.68-.22.68-.48 0-.24-.01-.87-.01-1.7 2.78.6 3.37-1.34 3.37-1.34.45-1.16 1.11-1.46 1.11-1.46.91-.62-.07-.61-.07-.61-1 .07-1.53 1.03-1.53 1.03-.89 1.53-2.34 1.54-2.91 1.19-.09-.92-.35-1.54-.63-1.9 2.22-.25 4.55-1.11 4.55-4.94 0-1.09-.39-1.98-1.03-2.68.1-.25.45-1.27-.1-2.65 0 0-.84-.27-2.75 1.03A9.58 9.58 0 0 0 12 6.84c-.85 0-1.7.12-2.51.34-1.91-1.3-2.75-1.03-2.75-1.03-.54 1.38-.2 2.4-.1 2.65-.63.7-1.03 1.59-1.03 2.68 0 3.84 2.33 4.69 4.54 4.94-.29.36-.55.97-.64 1.9-.57.35-2.02.34-2.91-1.19 0 0-.52-.96-1.53-1.03 0 0-.98-.01-.07.61 0 0 .66.3 1.11 1.46 0 0 .59 1.94 3.37 1.34 0 .83-.01 1.46-.01 1.7 0 .26.18.57.68.48C5.87 20.17 3 16.42 3 12 3 6.48 7.48 2 12 2z\"\n fill={palette.fill}\n />\n </>\n )}\n </XSocialIconShell>\n );\n}\n"],"mappings":"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","names":["jsx","jsxs"]}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/* src/components/content/xinteractivephrase/XInteractivePhrase.module.css */
|
|
2
|
+
.container {
|
|
3
|
+
padding: 1rem 0;
|
|
4
|
+
color: var(--text, #000);
|
|
5
|
+
width: 100%;
|
|
6
|
+
}
|
|
7
|
+
.title {
|
|
8
|
+
margin: 0;
|
|
9
|
+
padding: 0;
|
|
10
|
+
line-height: 1.3;
|
|
11
|
+
font-weight: inherit;
|
|
12
|
+
text-align: inherit;
|
|
13
|
+
}
|
|
14
|
+
h1.title {
|
|
15
|
+
font-size: clamp(2rem, 6vw, 2.2rem);
|
|
16
|
+
font-weight: 800;
|
|
17
|
+
margin: 0;
|
|
18
|
+
padding: 0;
|
|
19
|
+
text-align: inherit;
|
|
20
|
+
}
|
|
21
|
+
h2.title {
|
|
22
|
+
font-size: clamp(1.675rem, 4vw, 1.8rem);
|
|
23
|
+
font-weight: 700;
|
|
24
|
+
margin: 0;
|
|
25
|
+
padding: 0;
|
|
26
|
+
text-align: inherit;
|
|
27
|
+
}
|
|
28
|
+
h3.title {
|
|
29
|
+
font-size: clamp(1.4rem, 3vw, 1.95rem);
|
|
30
|
+
font-weight: 700;
|
|
31
|
+
margin: 0;
|
|
32
|
+
padding: 0;
|
|
33
|
+
text-align: inherit;
|
|
34
|
+
}
|
|
35
|
+
h4.title {
|
|
36
|
+
font-size: clamp(1.25rem, 3vw, 2rem);
|
|
37
|
+
font-weight: 600;
|
|
38
|
+
margin: 0;
|
|
39
|
+
padding: 0;
|
|
40
|
+
text-align: inherit;
|
|
41
|
+
}
|
|
42
|
+
h5.title {
|
|
43
|
+
font-size: clamp(1.125rem, 3vw, 1.5rem);
|
|
44
|
+
font-weight: 600;
|
|
45
|
+
margin: 0;
|
|
46
|
+
padding: 0;
|
|
47
|
+
text-align: inherit;
|
|
48
|
+
}
|
|
49
|
+
h6.title {
|
|
50
|
+
font-size: clamp(1rem, 2.5vw, 1.25rem);
|
|
51
|
+
font-weight: 600;
|
|
52
|
+
margin: 0;
|
|
53
|
+
padding: 0;
|
|
54
|
+
text-align: inherit;
|
|
55
|
+
}
|
|
56
|
+
p.title {
|
|
57
|
+
font-size: 1rem;
|
|
58
|
+
font-weight: 400;
|
|
59
|
+
margin: 0;
|
|
60
|
+
padding: 0;
|
|
61
|
+
text-align: inherit;
|
|
62
|
+
}
|
|
63
|
+
.title strong {
|
|
64
|
+
font-weight: 900;
|
|
65
|
+
color: var(--accent, #0070f3);
|
|
66
|
+
}
|
|
67
|
+
.title em {
|
|
68
|
+
font-style: italic;
|
|
69
|
+
font-family: serif;
|
|
70
|
+
}
|
|
71
|
+
.underlineEffect {
|
|
72
|
+
position: relative;
|
|
73
|
+
cursor: pointer;
|
|
74
|
+
color: var(--accent, #0070f3);
|
|
75
|
+
display: inline-block;
|
|
76
|
+
transition: color 0.3s ease;
|
|
77
|
+
}
|
|
78
|
+
.underlineEffect::after {
|
|
79
|
+
content: "";
|
|
80
|
+
position: absolute;
|
|
81
|
+
bottom: -2px;
|
|
82
|
+
left: 0;
|
|
83
|
+
height: 0.15em;
|
|
84
|
+
width: 100%;
|
|
85
|
+
background:
|
|
86
|
+
repeating-linear-gradient(
|
|
87
|
+
45deg,
|
|
88
|
+
transparent,
|
|
89
|
+
transparent 2px,
|
|
90
|
+
currentColor 2px,
|
|
91
|
+
currentColor 4px);
|
|
92
|
+
transition: opacity 0.3s ease;
|
|
93
|
+
}
|
|
94
|
+
.underlineEffect:hover::after {
|
|
95
|
+
opacity: 0;
|
|
96
|
+
}
|
|
97
|
+
.buttonEffect {
|
|
98
|
+
display: inline-block;
|
|
99
|
+
padding: 0.1em 0.6em;
|
|
100
|
+
border: 2px dashed currentColor;
|
|
101
|
+
border-radius: 9999px;
|
|
102
|
+
cursor: pointer;
|
|
103
|
+
color: var(--accent, #0070f3);
|
|
104
|
+
transition: all 0.3s ease;
|
|
105
|
+
}
|
|
106
|
+
.buttonEffect:hover {
|
|
107
|
+
background: currentColor;
|
|
108
|
+
color: var(--bg, #fff);
|
|
109
|
+
}
|
|
110
|
+
.blurEffect {
|
|
111
|
+
display: inline-block;
|
|
112
|
+
transition: filter 0.7s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.7s ease;
|
|
113
|
+
}
|
|
114
|
+
.isVisible {
|
|
115
|
+
filter: blur(0);
|
|
116
|
+
opacity: 1;
|
|
117
|
+
}
|
|
118
|
+
.isHidden {
|
|
119
|
+
filter: blur(10px);
|
|
120
|
+
opacity: 0.3;
|
|
121
|
+
user-select: none;
|
|
122
|
+
}
|
|
123
|
+
.lineBreak {
|
|
124
|
+
display: block;
|
|
125
|
+
height: 0.8rem;
|
|
126
|
+
}
|
|
127
|
+
.underlineEffect:focus-visible,
|
|
128
|
+
.buttonEffect:focus-visible {
|
|
129
|
+
outline: 2px solid var(--accent, #0070f3);
|
|
130
|
+
outline-offset: 4px;
|
|
131
|
+
}
|
|
132
|
+
/*# sourceMappingURL=index.css.map */
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/content/xinteractivephrase/XInteractivePhrase.module.css"],"sourcesContent":[".container {\n padding: 1rem 0;\n color: var(--text, #000);\n width: 100%;\n}\n\n.title {\n margin: 0;\n padding: 0;\n line-height: 1.3;\n font-weight: inherit;\n text-align: inherit;\n}\n\n/* Escala tipográfica fluida */\nh1.title { font-size: clamp(2rem, 6vw, 2.2rem); font-weight: 800; margin: 0; padding: 0; text-align: inherit; }\nh2.title { font-size: clamp(1.675rem, 4vw, 1.8rem); font-weight: 700; margin: 0; padding: 0; text-align: inherit; }\nh3.title { font-size: clamp(1.4rem, 3vw, 1.95rem); font-weight: 700; margin: 0; padding: 0; text-align: inherit; }\nh4.title { font-size: clamp(1.25rem, 3vw, 2rem); font-weight: 600; margin: 0; padding: 0; text-align: inherit; }\nh5.title { font-size: clamp(1.125rem, 3vw, 1.5rem); font-weight: 600; margin: 0; padding: 0; text-align: inherit; }\nh6.title { font-size: clamp(1rem, 2.5vw, 1.25rem); font-weight: 600; margin: 0; padding: 0; text-align: inherit; }\np.title { font-size: 1rem; font-weight: 400; margin: 0; padding: 0; text-align: inherit; }\n\n/* Estilos para etiquetas de énfasis */\n.title strong {\n font-weight: 900;\n color: var(--accent, #0070f3);\n}\n\n.title em {\n font-style: italic;\n font-family: serif; /* Opcional: da un toque elegante a las itálicas */\n}\n\n/* Efectos */\n.underlineEffect {\n position: relative;\n cursor: pointer;\n color: var(--accent, #0070f3);\n display: inline-block;\n transition: color 0.3s ease;\n}\n\n.underlineEffect::after {\n content: \"\";\n position: absolute;\n bottom: -2px;\n left: 0;\n height: 0.15em;\n width: 100%;\n background: repeating-linear-gradient(\n 45deg,\n transparent,\n transparent 2px,\n currentColor 2px,\n currentColor 4px\n );\n transition: opacity 0.3s ease;\n}\n\n.underlineEffect:hover::after {\n opacity: 0;\n}\n\n.buttonEffect {\n display: inline-block;\n padding: 0.1em 0.6em;\n border: 2px dashed currentColor;\n border-radius: 9999px;\n cursor: pointer;\n color: var(--accent, #0070f3);\n transition: all 0.3s ease;\n}\n\n.buttonEffect:hover {\n background: currentColor;\n color: var(--bg, #fff);\n}\n\n.blurEffect {\n display: inline-block;\n transition: filter 0.7s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.7s ease;\n}\n\n.isVisible {\n filter: blur(0);\n opacity: 1;\n}\n\n.isHidden {\n filter: blur(10px);\n opacity: 0.3;\n user-select: none;\n}\n\n.lineBreak {\n display: block;\n height: 0.8rem;\n}\n\n.underlineEffect:focus-visible,\n.buttonEffect:focus-visible {\n outline: 2px solid var(--accent, #0070f3);\n outline-offset: 4px;\n}"],"mappings":";AAAA,CAAC;AACC,WAAS,KAAK;AACd,SAAO,IAAI,MAAM,EAAE;AACnB,SAAO;AACT;AAEA,CAAC;AACC,UAAQ;AACR,WAAS;AACT,eAAa;AACb,eAAa;AACb,cAAY;AACd;AAGA,EAAE,CATD;AASU,aAAW,MAAM,IAAI,EAAE,GAAG,EAAE;AAAS,eAAa;AAAK,UAAQ;AAAG,WAAS;AAAG,cAAY;AAAS;AAC9G,EAAE,CAVD;AAUU,aAAW,MAAM,QAAQ,EAAE,GAAG,EAAE;AAAS,eAAa;AAAK,UAAQ;AAAG,WAAS;AAAG,cAAY;AAAS;AAClH,EAAE,CAXD;AAWU,aAAW,MAAM,MAAM,EAAE,GAAG,EAAE;AAAU,eAAa;AAAK,UAAQ;AAAG,WAAS;AAAG,cAAY;AAAS;AACjH,EAAE,CAZD;AAYU,aAAW,MAAM,OAAO,EAAE,GAAG,EAAE;AAAO,eAAa;AAAK,UAAQ;AAAG,WAAS;AAAG,cAAY;AAAS;AAC/G,EAAE,CAbD;AAaU,aAAW,MAAM,QAAQ,EAAE,GAAG,EAAE;AAAS,eAAa;AAAK,UAAQ;AAAG,WAAS;AAAG,cAAY;AAAS;AAClH,EAAE,CAdD;AAcU,aAAW,MAAM,IAAI,EAAE,KAAK,EAAE;AAAU,eAAa;AAAK,UAAQ;AAAG,WAAS;AAAG,cAAY;AAAS;AACjH,CAAC,CAfA;AAeU,aAAW;AAAM,eAAa;AAAK,UAAQ;AAAG,WAAS;AAAG,cAAY;AAAS;AAG1F,CAlBC,MAkBM;AACL,eAAa;AACb,SAAO,IAAI,QAAQ,EAAE;AACvB;AAEA,CAvBC,MAuBM;AACL,cAAY;AACZ,eAAa;AACf;AAGA,CAAC;AACC,YAAU;AACV,UAAQ;AACR,SAAO,IAAI,QAAQ,EAAE;AACrB,WAAS;AACT,cAAY,MAAM,KAAK;AACzB;AAEA,CARC,eAQe;AACd,WAAS;AACT,YAAU;AACV,UAAQ;AACR,QAAM;AACN,UAAQ;AACR,SAAO;AACP;AAAA,IAAY;AAAA,MACV,KAAK;AAAA,MACL,WAAW;AAAA,MACX,YAAY,GAAG;AAAA,MACf,aAAa,GAAG;AAAA,MAChB,aAAa;AAEf,cAAY,QAAQ,KAAK;AAC3B;AAEA,CAzBC,eAyBe,MAAM;AACpB,WAAS;AACX;AAEA,CAAC;AACC,WAAS;AACT,WAAS,MAAM;AACf,UAAQ,IAAI,OAAO;AACnB,iBAAe;AACf,UAAQ;AACR,SAAO,IAAI,QAAQ,EAAE;AACrB,cAAY,IAAI,KAAK;AACvB;AAEA,CAVC,YAUY;AACX,cAAY;AACZ,SAAO,IAAI,IAAI,EAAE;AACnB;AAEA,CAAC;AACC,WAAS;AACT,cAAY,OAAO,KAAK,aAAa,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,QAAQ,KAAK;AACrE;AAEA,CAAC;AACC,UAAQ,KAAK;AACb,WAAS;AACX;AAEA,CAAC;AACC,UAAQ,KAAK;AACb,WAAS;AACT,eAAa;AACf;AAEA,CAAC;AACC,WAAS;AACT,UAAQ;AACV;AAEA,CAjEC,eAiEe;AAChB,CArCC,YAqCY;AACX,WAAS,IAAI,MAAM,IAAI,QAAQ,EAAE;AACjC,kBAAgB;AAClB;","names":[]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
|
|
3
|
+
interface WordConfig {
|
|
4
|
+
text: string;
|
|
5
|
+
type: "normal" | "underline" | "button" | "blur1" | "blur2";
|
|
6
|
+
breakAfter?: boolean;
|
|
7
|
+
italic?: boolean;
|
|
8
|
+
bold?: boolean;
|
|
9
|
+
}
|
|
10
|
+
interface XInteractivePhraseProps {
|
|
11
|
+
words: WordConfig[];
|
|
12
|
+
as?: "h1" | "h2" | "h3" | "h4" | "h5" | "h6" | "p" | "span";
|
|
13
|
+
className?: string;
|
|
14
|
+
}
|
|
15
|
+
declare function XInteractivePhrase({ words, as: Tag, className }: XInteractivePhraseProps): react_jsx_runtime.JSX.Element;
|
|
16
|
+
|
|
17
|
+
export { type WordConfig, XInteractivePhrase, type XInteractivePhraseProps };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
|
|
3
|
+
interface WordConfig {
|
|
4
|
+
text: string;
|
|
5
|
+
type: "normal" | "underline" | "button" | "blur1" | "blur2";
|
|
6
|
+
breakAfter?: boolean;
|
|
7
|
+
italic?: boolean;
|
|
8
|
+
bold?: boolean;
|
|
9
|
+
}
|
|
10
|
+
interface XInteractivePhraseProps {
|
|
11
|
+
words: WordConfig[];
|
|
12
|
+
as?: "h1" | "h2" | "h3" | "h4" | "h5" | "h6" | "p" | "span";
|
|
13
|
+
className?: string;
|
|
14
|
+
}
|
|
15
|
+
declare function XInteractivePhrase({ words, as: Tag, className }: XInteractivePhraseProps): react_jsx_runtime.JSX.Element;
|
|
16
|
+
|
|
17
|
+
export { type WordConfig, XInteractivePhrase, type XInteractivePhraseProps };
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
|
|
30
|
+
// src/components/content/index.ts
|
|
31
|
+
var content_exports = {};
|
|
32
|
+
__export(content_exports, {
|
|
33
|
+
XInteractivePhrase: () => XInteractivePhrase
|
|
34
|
+
});
|
|
35
|
+
module.exports = __toCommonJS(content_exports);
|
|
36
|
+
|
|
37
|
+
// src/components/content/xinteractivephrase/XInteractivePhrase.tsx
|
|
38
|
+
var import_react = __toESM(require("react"));
|
|
39
|
+
|
|
40
|
+
// src/components/content/xinteractivephrase/XInteractivePhrase.module.css
|
|
41
|
+
var XInteractivePhrase_default = {};
|
|
42
|
+
|
|
43
|
+
// src/components/content/xinteractivephrase/XInteractivePhrase.tsx
|
|
44
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
45
|
+
function XInteractivePhrase({
|
|
46
|
+
words,
|
|
47
|
+
as: Tag = "p",
|
|
48
|
+
className = ""
|
|
49
|
+
}) {
|
|
50
|
+
const [active1, setActive1] = (0, import_react.useState)(false);
|
|
51
|
+
const [active2, setActive2] = (0, import_react.useState)(false);
|
|
52
|
+
const handleAction = (type) => {
|
|
53
|
+
if (type === "underline") setActive1(!active1);
|
|
54
|
+
if (type === "button") setActive2(!active2);
|
|
55
|
+
};
|
|
56
|
+
const onKeyDown = (e, type) => {
|
|
57
|
+
if (e.key === "Enter" || e.key === " ") {
|
|
58
|
+
e.preventDefault();
|
|
59
|
+
handleAction(type);
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: `${XInteractivePhrase_default.container} ${className}`, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Tag, { className: XInteractivePhrase_default.title, children: words.map((word, index) => {
|
|
63
|
+
let dynamicClass = "";
|
|
64
|
+
let clickHandler = void 0;
|
|
65
|
+
let keyHandler = void 0;
|
|
66
|
+
if (word.type === "underline") {
|
|
67
|
+
dynamicClass = XInteractivePhrase_default.underlineEffect;
|
|
68
|
+
clickHandler = () => handleAction("underline");
|
|
69
|
+
keyHandler = (e) => onKeyDown(e, "underline");
|
|
70
|
+
} else if (word.type === "button") {
|
|
71
|
+
dynamicClass = XInteractivePhrase_default.buttonEffect;
|
|
72
|
+
clickHandler = () => handleAction("button");
|
|
73
|
+
keyHandler = (e) => onKeyDown(e, "button");
|
|
74
|
+
} else if (word.type === "blur1") {
|
|
75
|
+
dynamicClass = `${XInteractivePhrase_default.blurEffect} ${active1 ? XInteractivePhrase_default.isVisible : XInteractivePhrase_default.isHidden}`;
|
|
76
|
+
} else if (word.type === "blur2") {
|
|
77
|
+
dynamicClass = `${XInteractivePhrase_default.blurEffect} ${active2 ? XInteractivePhrase_default.isVisible : XInteractivePhrase_default.isHidden}`;
|
|
78
|
+
}
|
|
79
|
+
let content = word.text;
|
|
80
|
+
if (word.italic) content = /* @__PURE__ */ (0, import_jsx_runtime.jsx)("em", { children: content });
|
|
81
|
+
if (word.bold) content = /* @__PURE__ */ (0, import_jsx_runtime.jsx)("strong", { children: content });
|
|
82
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_react.default.Fragment, { children: [
|
|
83
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
84
|
+
"span",
|
|
85
|
+
{
|
|
86
|
+
className: dynamicClass,
|
|
87
|
+
onClick: clickHandler,
|
|
88
|
+
onKeyDown: keyHandler,
|
|
89
|
+
role: clickHandler ? "button" : void 0,
|
|
90
|
+
tabIndex: clickHandler ? 0 : void 0,
|
|
91
|
+
children: content
|
|
92
|
+
}
|
|
93
|
+
),
|
|
94
|
+
word.breakAfter ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: XInteractivePhrase_default.lineBreak }) : " "
|
|
95
|
+
] }, index);
|
|
96
|
+
}) }) });
|
|
97
|
+
}
|
|
98
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
99
|
+
0 && (module.exports = {
|
|
100
|
+
XInteractivePhrase
|
|
101
|
+
});
|
|
102
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/content/index.ts","../../../src/components/content/xinteractivephrase/XInteractivePhrase.tsx","../../../src/components/content/xinteractivephrase/XInteractivePhrase.module.css"],"sourcesContent":["export { XInteractivePhrase } from \"./xinteractivephrase\";\nexport type { XInteractivePhraseProps, WordConfig } from \"./xinteractivephrase\";\n","\"use client\";\n\nimport React, { useState, KeyboardEvent } from \"react\";\nimport styles from \"./XInteractivePhrase.module.css\";\n\nexport interface WordConfig {\n text: string;\n // Solo comportamientos de interacción\n type: \"normal\" | \"underline\" | \"button\" | \"blur1\" | \"blur2\"; \n breakAfter?: boolean;\n italic?: boolean; // Esto controla el <em>\n bold?: boolean; // Esto controla el <strong>\n}\n\nexport interface XInteractivePhraseProps {\n words: WordConfig[];\n as?: \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\" | \"p\" | \"span\";\n className?: string;\n}\n\nexport default function XInteractivePhrase({ \n words, \n as: Tag = \"p\", \n className = \"\" \n}: XInteractivePhraseProps) {\n const [active1, setActive1] = useState<boolean>(false);\n const [active2, setActive2] = useState<boolean>(false);\n\n const handleAction = (type: \"underline\" | \"button\") => {\n if (type === \"underline\") setActive1(!active1);\n if (type === \"button\") setActive2(!active2);\n };\n\n const onKeyDown = (e: KeyboardEvent<HTMLSpanElement>, type: \"underline\" | \"button\") => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n handleAction(type);\n }\n };\n\n return (\n <div className={`${styles.container} ${className}`}>\n <Tag className={styles.title}>\n {words.map((word, index) => {\n let dynamicClass = \"\";\n let clickHandler: (() => void) | undefined = undefined;\n let keyHandler: ((e: KeyboardEvent<HTMLSpanElement>) => void) | undefined = undefined;\n\n // Gestión de lógica por tipo\n if (word.type === \"underline\") {\n dynamicClass = styles.underlineEffect;\n clickHandler = () => handleAction(\"underline\");\n keyHandler = (e) => onKeyDown(e, \"underline\");\n } \n else if (word.type === \"button\") {\n dynamicClass = styles.buttonEffect;\n clickHandler = () => handleAction(\"button\");\n keyHandler = (e) => onKeyDown(e, \"button\");\n } \n else if (word.type === \"blur1\") {\n dynamicClass = `${styles.blurEffect} ${active1 ? styles.isVisible : styles.isHidden}`;\n } \n else if (word.type === \"blur2\") {\n dynamicClass = `${styles.blurEffect} ${active2 ? styles.isVisible : styles.isHidden}`;\n }\n\n // Renderizado del contenido con estilos combinables\n let content: React.ReactNode = word.text;\n if (word.italic) content = <em>{content}</em>;\n if (word.bold) content = <strong>{content}</strong>;\n\n return (\n <React.Fragment key={index}>\n <span\n className={dynamicClass}\n onClick={clickHandler}\n onKeyDown={keyHandler}\n role={clickHandler ? \"button\" : undefined}\n tabIndex={clickHandler ? 0 : undefined}\n >\n {content}\n </span>\n {word.breakAfter ? <span className={styles.lineBreak} /> : \" \"}\n </React.Fragment>\n );\n })}\n </Tag>\n </div>\n );\n}",".container {\n padding: 1rem 0;\n color: var(--text, #000);\n width: 100%;\n}\n\n.title {\n margin: 0;\n padding: 0;\n line-height: 1.3;\n font-weight: inherit;\n text-align: inherit;\n}\n\n/* Escala tipográfica fluida */\nh1.title { font-size: clamp(2rem, 6vw, 2.2rem); font-weight: 800; margin: 0; padding: 0; text-align: inherit; }\nh2.title { font-size: clamp(1.675rem, 4vw, 1.8rem); font-weight: 700; margin: 0; padding: 0; text-align: inherit; }\nh3.title { font-size: clamp(1.4rem, 3vw, 1.95rem); font-weight: 700; margin: 0; padding: 0; text-align: inherit; }\nh4.title { font-size: clamp(1.25rem, 3vw, 2rem); font-weight: 600; margin: 0; padding: 0; text-align: inherit; }\nh5.title { font-size: clamp(1.125rem, 3vw, 1.5rem); font-weight: 600; margin: 0; padding: 0; text-align: inherit; }\nh6.title { font-size: clamp(1rem, 2.5vw, 1.25rem); font-weight: 600; margin: 0; padding: 0; text-align: inherit; }\np.title { font-size: 1rem; font-weight: 400; margin: 0; padding: 0; text-align: inherit; }\n\n/* Estilos para etiquetas de énfasis */\n.title strong {\n font-weight: 900;\n color: var(--accent, #0070f3);\n}\n\n.title em {\n font-style: italic;\n font-family: serif; /* Opcional: da un toque elegante a las itálicas */\n}\n\n/* Efectos */\n.underlineEffect {\n position: relative;\n cursor: pointer;\n color: var(--accent, #0070f3);\n display: inline-block;\n transition: color 0.3s ease;\n}\n\n.underlineEffect::after {\n content: \"\";\n position: absolute;\n bottom: -2px;\n left: 0;\n height: 0.15em;\n width: 100%;\n background: repeating-linear-gradient(\n 45deg,\n transparent,\n transparent 2px,\n currentColor 2px,\n currentColor 4px\n );\n transition: opacity 0.3s ease;\n}\n\n.underlineEffect:hover::after {\n opacity: 0;\n}\n\n.buttonEffect {\n display: inline-block;\n padding: 0.1em 0.6em;\n border: 2px dashed currentColor;\n border-radius: 9999px;\n cursor: pointer;\n color: var(--accent, #0070f3);\n transition: all 0.3s ease;\n}\n\n.buttonEffect:hover {\n background: currentColor;\n color: var(--bg, #fff);\n}\n\n.blurEffect {\n display: inline-block;\n transition: filter 0.7s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.7s ease;\n}\n\n.isVisible {\n filter: blur(0);\n opacity: 1;\n}\n\n.isHidden {\n filter: blur(10px);\n opacity: 0.3;\n user-select: none;\n}\n\n.lineBreak {\n display: block;\n height: 0.8rem;\n}\n\n.underlineEffect:focus-visible,\n.buttonEffect:focus-visible {\n outline: 2px solid var(--accent, #0070f3);\n outline-offset: 4px;\n}"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACEA,mBAA+C;;;ACF/C;;;ADoEqC;AAhDtB,SAAR,mBAAoC;AAAA,EACzC;AAAA,EACA,IAAI,MAAM;AAAA,EACV,YAAY;AACd,GAA4B;AAC1B,QAAM,CAAC,SAAS,UAAU,QAAI,uBAAkB,KAAK;AACrD,QAAM,CAAC,SAAS,UAAU,QAAI,uBAAkB,KAAK;AAErD,QAAM,eAAe,CAAC,SAAiC;AACrD,QAAI,SAAS,YAAa,YAAW,CAAC,OAAO;AAC7C,QAAI,SAAS,SAAU,YAAW,CAAC,OAAO;AAAA,EAC5C;AAEA,QAAM,YAAY,CAAC,GAAmC,SAAiC;AACrF,QAAI,EAAE,QAAQ,WAAW,EAAE,QAAQ,KAAK;AACtC,QAAE,eAAe;AACjB,mBAAa,IAAI;AAAA,IACnB;AAAA,EACF;AAEA,SACE,4CAAC,SAAI,WAAW,GAAG,2BAAO,SAAS,IAAI,SAAS,IAC9C,sDAAC,OAAI,WAAW,2BAAO,OACpB,gBAAM,IAAI,CAAC,MAAM,UAAU;AAC1B,QAAI,eAAe;AACnB,QAAI,eAAyC;AAC7C,QAAI,aAAwE;AAG5E,QAAI,KAAK,SAAS,aAAa;AAC7B,qBAAe,2BAAO;AACtB,qBAAe,MAAM,aAAa,WAAW;AAC7C,mBAAa,CAAC,MAAM,UAAU,GAAG,WAAW;AAAA,IAC9C,WACS,KAAK,SAAS,UAAU;AAC/B,qBAAe,2BAAO;AACtB,qBAAe,MAAM,aAAa,QAAQ;AAC1C,mBAAa,CAAC,MAAM,UAAU,GAAG,QAAQ;AAAA,IAC3C,WACS,KAAK,SAAS,SAAS;AAC9B,qBAAe,GAAG,2BAAO,UAAU,IAAI,UAAU,2BAAO,YAAY,2BAAO,QAAQ;AAAA,IACrF,WACS,KAAK,SAAS,SAAS;AAC9B,qBAAe,GAAG,2BAAO,UAAU,IAAI,UAAU,2BAAO,YAAY,2BAAO,QAAQ;AAAA,IACrF;AAGA,QAAI,UAA2B,KAAK;AACpC,QAAI,KAAK,OAAQ,WAAU,4CAAC,QAAI,mBAAQ;AACxC,QAAI,KAAK,KAAM,WAAU,4CAAC,YAAQ,mBAAQ;AAE1C,WACE,6CAAC,aAAAA,QAAM,UAAN,EACC;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,WAAW;AAAA,UACX,SAAS;AAAA,UACT,WAAW;AAAA,UACX,MAAM,eAAe,WAAW;AAAA,UAChC,UAAU,eAAe,IAAI;AAAA,UAE5B;AAAA;AAAA,MACH;AAAA,MACC,KAAK,aAAa,4CAAC,UAAK,WAAW,2BAAO,WAAW,IAAK;AAAA,SAVxC,KAWrB;AAAA,EAEJ,CAAC,GACH,GACF;AAEJ;","names":["React"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
/* src/components/forms/xcontactform/XContactForm.module.css */
|
|
2
|
+
.wrapper {
|
|
3
|
+
--input-padding: .65rem .9rem;
|
|
4
|
+
--font-size: 16px;
|
|
5
|
+
--form-gap: 1.25rem;
|
|
6
|
+
--row-gap: .85rem;
|
|
7
|
+
--field-gap: .45rem;
|
|
8
|
+
--button-min-width: 140px;
|
|
9
|
+
--label-color: inherit;
|
|
10
|
+
--wrapper-bg-color: transparent;
|
|
11
|
+
--wrapper-border-color: transparent;
|
|
12
|
+
--wrapper-border-width: 0px;
|
|
13
|
+
--wrapper-border-style: solid;
|
|
14
|
+
--wrapper-radius: .5rem;
|
|
15
|
+
--field-border-color: var(--border, #ccc);
|
|
16
|
+
--field-border-width: 1px;
|
|
17
|
+
--field-border-style: solid;
|
|
18
|
+
--field-radius: .5rem;
|
|
19
|
+
--btn-bg-color: var(--bg, #333);
|
|
20
|
+
--btn-text-color: var(--text, #fff);
|
|
21
|
+
--btn-border-color: transparent;
|
|
22
|
+
--btn-border-width: 0px;
|
|
23
|
+
--btn-border-style: solid;
|
|
24
|
+
--btn-radius: .5rem;
|
|
25
|
+
--btn-alignment: flex-start;
|
|
26
|
+
--btn-hover-bg-color: var(--btn-bg-color);
|
|
27
|
+
--btn-hover-text-color: var(--btn-text-color);
|
|
28
|
+
--btn-hover-border-color: var(--btn-border-color);
|
|
29
|
+
--status-ok-color: #1fa37a;
|
|
30
|
+
--status-error-color: #d16a6a;
|
|
31
|
+
max-width: 900px;
|
|
32
|
+
margin: 0 auto;
|
|
33
|
+
padding: 2rem 1rem;
|
|
34
|
+
background-color: var(--wrapper-bg-color);
|
|
35
|
+
border: var(--wrapper-border-width) var(--wrapper-border-style) var(--wrapper-border-color);
|
|
36
|
+
border-radius: var(--wrapper-radius);
|
|
37
|
+
}
|
|
38
|
+
.small {
|
|
39
|
+
--input-padding: .35rem .55rem;
|
|
40
|
+
--font-size: 13px;
|
|
41
|
+
--form-gap: .75rem;
|
|
42
|
+
--row-gap: .6rem;
|
|
43
|
+
--field-gap: .3rem;
|
|
44
|
+
--button-min-width: 118px;
|
|
45
|
+
}
|
|
46
|
+
.medium {
|
|
47
|
+
--input-padding: .5rem .7rem;
|
|
48
|
+
--font-size: 15px;
|
|
49
|
+
--form-gap: 1rem;
|
|
50
|
+
--row-gap: .7rem;
|
|
51
|
+
--field-gap: .4rem;
|
|
52
|
+
--button-min-width: 130px;
|
|
53
|
+
}
|
|
54
|
+
.large {
|
|
55
|
+
--input-padding: 1rem 1.2rem;
|
|
56
|
+
--font-size: 18px;
|
|
57
|
+
--form-gap: 1.5rem;
|
|
58
|
+
--row-gap: 1rem;
|
|
59
|
+
--field-gap: .5rem;
|
|
60
|
+
--button-min-width: 150px;
|
|
61
|
+
}
|
|
62
|
+
.form {
|
|
63
|
+
display: grid;
|
|
64
|
+
gap: var(--form-gap);
|
|
65
|
+
max-width: 100%;
|
|
66
|
+
}
|
|
67
|
+
.row {
|
|
68
|
+
display: grid;
|
|
69
|
+
gap: var(--row-gap);
|
|
70
|
+
}
|
|
71
|
+
.grid .row {
|
|
72
|
+
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
|
|
73
|
+
}
|
|
74
|
+
.vertical .row {
|
|
75
|
+
grid-template-columns: 1fr;
|
|
76
|
+
}
|
|
77
|
+
.field {
|
|
78
|
+
display: flex;
|
|
79
|
+
flex-direction: column;
|
|
80
|
+
gap: var(--field-gap);
|
|
81
|
+
}
|
|
82
|
+
.field label {
|
|
83
|
+
font-size: calc(var(--font-size) - 2px);
|
|
84
|
+
font-weight: 500;
|
|
85
|
+
color: var(--label-color);
|
|
86
|
+
}
|
|
87
|
+
.field input,
|
|
88
|
+
.field textarea {
|
|
89
|
+
width: 100%;
|
|
90
|
+
padding: var(--input-padding);
|
|
91
|
+
border: var(--field-border-width) var(--field-border-style) var(--field-border-color);
|
|
92
|
+
border-radius: var(--field-radius);
|
|
93
|
+
font-size: var(--font-size);
|
|
94
|
+
box-sizing: border-box;
|
|
95
|
+
font-family: inherit;
|
|
96
|
+
}
|
|
97
|
+
.field input::placeholder,
|
|
98
|
+
.field textarea::placeholder {
|
|
99
|
+
color: #888;
|
|
100
|
+
}
|
|
101
|
+
.buttoncontainer {
|
|
102
|
+
display: flex;
|
|
103
|
+
justify-content: var(--btn-alignment);
|
|
104
|
+
margin-top: 0.25rem;
|
|
105
|
+
}
|
|
106
|
+
.button {
|
|
107
|
+
padding: var(--input-padding);
|
|
108
|
+
border-radius: var(--btn-radius);
|
|
109
|
+
border: var(--btn-border-width) var(--btn-border-style) var(--btn-border-color);
|
|
110
|
+
background-color: var(--btn-bg-color);
|
|
111
|
+
color: var(--btn-text-color);
|
|
112
|
+
cursor: pointer;
|
|
113
|
+
font-size: var(--font-size);
|
|
114
|
+
font-weight: 600;
|
|
115
|
+
min-width: var(--button-min-width);
|
|
116
|
+
transition:
|
|
117
|
+
background-color 0.2s ease,
|
|
118
|
+
color 0.2s ease,
|
|
119
|
+
border-color 0.2s ease,
|
|
120
|
+
opacity 0.2s ease;
|
|
121
|
+
}
|
|
122
|
+
.button:hover {
|
|
123
|
+
background-color: var(--btn-hover-bg-color);
|
|
124
|
+
color: var(--btn-hover-text-color);
|
|
125
|
+
border-color: var(--btn-hover-border-color);
|
|
126
|
+
opacity: 0.95;
|
|
127
|
+
}
|
|
128
|
+
.status {
|
|
129
|
+
min-height: 1.5rem;
|
|
130
|
+
font-size: calc(var(--font-size) - 2px);
|
|
131
|
+
margin-top: 0.25rem;
|
|
132
|
+
}
|
|
133
|
+
.statusOk {
|
|
134
|
+
color: var(--status-ok-color);
|
|
135
|
+
}
|
|
136
|
+
.statusError {
|
|
137
|
+
color: var(--status-error-color);
|
|
138
|
+
}
|
|
139
|
+
.honeypot {
|
|
140
|
+
position: absolute;
|
|
141
|
+
left: -9999px;
|
|
142
|
+
top: -9999px;
|
|
143
|
+
}
|
|
144
|
+
.withDecorativeX {
|
|
145
|
+
position: relative;
|
|
146
|
+
padding-top: 2.5rem;
|
|
147
|
+
padding-bottom: 2.5rem;
|
|
148
|
+
}
|
|
149
|
+
.decorativeXTop,
|
|
150
|
+
.decorativeXBottom {
|
|
151
|
+
position: absolute;
|
|
152
|
+
left: 50%;
|
|
153
|
+
transform: translateX(-50%);
|
|
154
|
+
font-size: 0.5rem;
|
|
155
|
+
font-weight: 300;
|
|
156
|
+
color: var(--decorative-x-color, currentColor);
|
|
157
|
+
opacity: 1;
|
|
158
|
+
pointer-events: none;
|
|
159
|
+
background-color: var(--wrapper-bg-color, transparent);
|
|
160
|
+
padding: 0 0.3rem;
|
|
161
|
+
line-height: 1;
|
|
162
|
+
z-index: 1;
|
|
163
|
+
}
|
|
164
|
+
.decorativeXTop {
|
|
165
|
+
top: 0;
|
|
166
|
+
transform: translate(-50%, -50%);
|
|
167
|
+
}
|
|
168
|
+
.decorativeXBottom {
|
|
169
|
+
bottom: 0;
|
|
170
|
+
transform: translate(-50%, 50%);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/* src/components/forms/xnewsletter/XNewsletter.module.css */
|
|
174
|
+
.container {
|
|
175
|
+
--nws-accent: var(--accent);
|
|
176
|
+
--nws-text: var(--text);
|
|
177
|
+
--nws-border: var(--border);
|
|
178
|
+
--nws-btn-text: var(--accent-text);
|
|
179
|
+
width: 100%;
|
|
180
|
+
font-family: "EB Garamond", serif;
|
|
181
|
+
}
|
|
182
|
+
.form {
|
|
183
|
+
display: flex;
|
|
184
|
+
gap: 1rem;
|
|
185
|
+
}
|
|
186
|
+
.horizontal {
|
|
187
|
+
flex-direction: column;
|
|
188
|
+
align-items: center;
|
|
189
|
+
justify-content: center;
|
|
190
|
+
}
|
|
191
|
+
@media (min-width: 768px) {
|
|
192
|
+
.horizontal {
|
|
193
|
+
flex-direction: row;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
.vertical {
|
|
197
|
+
flex-direction: column;
|
|
198
|
+
align-items: flex-start;
|
|
199
|
+
width: 100%;
|
|
200
|
+
max-width: 24rem;
|
|
201
|
+
margin: 0 auto;
|
|
202
|
+
}
|
|
203
|
+
.title {
|
|
204
|
+
font-size: 0.875rem;
|
|
205
|
+
white-space: nowrap;
|
|
206
|
+
font-weight: 500;
|
|
207
|
+
color: var(--nws-text);
|
|
208
|
+
}
|
|
209
|
+
.input {
|
|
210
|
+
width: 100%;
|
|
211
|
+
padding: 0.5rem 1rem;
|
|
212
|
+
font-size: 0.875rem;
|
|
213
|
+
border-radius: 0.5rem;
|
|
214
|
+
border: 1px solid var(--nws-border);
|
|
215
|
+
background-color: transparent;
|
|
216
|
+
outline: none;
|
|
217
|
+
transition: border-color 0.2s ease;
|
|
218
|
+
color: var(--nws-text);
|
|
219
|
+
caret-color: var(--nws-accent);
|
|
220
|
+
font-family: inherit;
|
|
221
|
+
}
|
|
222
|
+
.horizontal .input {
|
|
223
|
+
}
|
|
224
|
+
@media (min-width: 768px) {
|
|
225
|
+
.horizontal .input {
|
|
226
|
+
width: 16rem;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
.input:focus {
|
|
230
|
+
border-color: var(--nws-accent);
|
|
231
|
+
}
|
|
232
|
+
.actions {
|
|
233
|
+
display: flex;
|
|
234
|
+
gap: 1rem;
|
|
235
|
+
}
|
|
236
|
+
.actionsHorizontal {
|
|
237
|
+
flex-direction: row;
|
|
238
|
+
align-items: center;
|
|
239
|
+
}
|
|
240
|
+
.actionsVertical {
|
|
241
|
+
flex-direction: column;
|
|
242
|
+
align-items: flex-start;
|
|
243
|
+
width: 100%;
|
|
244
|
+
}
|
|
245
|
+
.checkboxLabel {
|
|
246
|
+
display: flex;
|
|
247
|
+
align-items: center;
|
|
248
|
+
gap: 0.5rem;
|
|
249
|
+
font-size: 0.75rem;
|
|
250
|
+
white-space: nowrap;
|
|
251
|
+
cursor: pointer;
|
|
252
|
+
color: var(--nws-text);
|
|
253
|
+
}
|
|
254
|
+
.checkboxLabel span {
|
|
255
|
+
opacity: 0.7;
|
|
256
|
+
}
|
|
257
|
+
.checkbox {
|
|
258
|
+
height: 0.875rem;
|
|
259
|
+
width: 0.875rem;
|
|
260
|
+
border-radius: 0.125rem;
|
|
261
|
+
cursor: pointer;
|
|
262
|
+
accent-color: var(--nws-accent);
|
|
263
|
+
}
|
|
264
|
+
.termsLink {
|
|
265
|
+
text-decoration: underline;
|
|
266
|
+
color: var(--nws-accent);
|
|
267
|
+
transition: opacity 0.2s ease;
|
|
268
|
+
}
|
|
269
|
+
.termsLink:hover {
|
|
270
|
+
opacity: 1;
|
|
271
|
+
}
|
|
272
|
+
.button {
|
|
273
|
+
padding: 0.5rem 1rem;
|
|
274
|
+
font-size: 0.875rem;
|
|
275
|
+
border-radius: 0.5rem;
|
|
276
|
+
border: 1px solid var(--nws-accent);
|
|
277
|
+
color: var(--nws-accent);
|
|
278
|
+
background-color: transparent;
|
|
279
|
+
transition: all 0.2s ease;
|
|
280
|
+
white-space: nowrap;
|
|
281
|
+
cursor: pointer;
|
|
282
|
+
}
|
|
283
|
+
.button:hover:not(:disabled) {
|
|
284
|
+
background-color: var(--nws-accent);
|
|
285
|
+
color: var(--nws-btn-text);
|
|
286
|
+
}
|
|
287
|
+
.button:disabled,
|
|
288
|
+
.input:disabled,
|
|
289
|
+
.checkbox:disabled {
|
|
290
|
+
opacity: 0.5;
|
|
291
|
+
cursor: not-allowed;
|
|
292
|
+
}
|
|
293
|
+
.actionsVertical .button {
|
|
294
|
+
width: 100%;
|
|
295
|
+
}
|
|
296
|
+
.message {
|
|
297
|
+
margin-top: 0.75rem;
|
|
298
|
+
font-size: 0.75rem;
|
|
299
|
+
color: var(--nws-accent);
|
|
300
|
+
}
|
|
301
|
+
.messageHorizontal {
|
|
302
|
+
text-align: center;
|
|
303
|
+
}
|
|
304
|
+
.messageVertical {
|
|
305
|
+
text-align: left;
|
|
306
|
+
}
|
|
307
|
+
/*# sourceMappingURL=index.css.map */
|