@xscriptor/xcomponents 0.1.0 → 0.1.1

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.
Files changed (106) hide show
  1. package/README.md +1 -0
  2. package/dist/{chunk-U27ZVCP7.mjs → chunk-2H7TVDE7.mjs} +14 -2
  3. package/dist/chunk-2H7TVDE7.mjs.map +7 -0
  4. package/dist/{chunk-5G4P2E76.mjs → chunk-34NJCJUI.mjs} +11 -2
  5. package/dist/chunk-34NJCJUI.mjs.map +7 -0
  6. package/dist/chunk-FZRTAML3.mjs +1 -1
  7. package/dist/chunk-FZRTAML3.mjs.map +7 -1
  8. package/dist/{chunk-2OAXRRVQ.mjs → chunk-MYFPSHSQ.mjs} +32 -3
  9. package/dist/chunk-MYFPSHSQ.mjs.map +7 -0
  10. package/dist/{chunk-NY22GB3E.mjs → chunk-TG3B4GAW.mjs} +26 -2
  11. package/dist/chunk-TG3B4GAW.mjs.map +7 -0
  12. package/dist/{chunk-QCMWPIG7.mjs → chunk-TKT37LIX.mjs} +39 -3
  13. package/dist/chunk-TKT37LIX.mjs.map +7 -0
  14. package/dist/{chunk-42XPBYTL.mjs → chunk-UROP4J6G.mjs} +29 -4
  15. package/dist/chunk-UROP4J6G.mjs.map +7 -0
  16. package/dist/components/content/index.css +23 -23
  17. package/dist/components/content/index.css.map +7 -1
  18. package/dist/components/content/index.d.ts +2 -17
  19. package/dist/components/content/index.js +11 -6
  20. package/dist/components/content/index.js.map +7 -1
  21. package/dist/components/content/index.mjs +2 -2
  22. package/dist/components/content/index.mjs.map +7 -1
  23. package/dist/components/content/xinteractivephrase/XInteractivePhrase.d.ts +13 -0
  24. package/dist/components/content/xinteractivephrase/index.d.ts +3 -0
  25. package/dist/components/forms/index.css +54 -54
  26. package/dist/components/forms/index.css.map +7 -1
  27. package/dist/components/forms/index.d.ts +4 -68
  28. package/dist/components/forms/index.js +39 -8
  29. package/dist/components/forms/index.js.map +7 -1
  30. package/dist/components/forms/index.mjs +2 -2
  31. package/dist/components/forms/index.mjs.map +7 -1
  32. package/dist/components/forms/xcontactform/XContactForm.d.ts +42 -0
  33. package/dist/components/forms/xcontactform/index.d.ts +3 -0
  34. package/dist/components/forms/xnewsletter/XNewsletter.d.ts +21 -0
  35. package/dist/components/forms/xnewsletter/index.d.ts +3 -0
  36. package/dist/components/gallery/index.css +58 -58
  37. package/dist/components/gallery/index.css.map +7 -1
  38. package/dist/components/gallery/index.d.ts +4 -29
  39. package/dist/components/gallery/index.js +32 -8
  40. package/dist/components/gallery/index.js.map +7 -1
  41. package/dist/components/gallery/index.mjs +2 -2
  42. package/dist/components/gallery/index.mjs.map +7 -1
  43. package/dist/components/gallery/xmicrogallerytext/XMicroGalleryText.d.ts +15 -0
  44. package/dist/components/gallery/xmicrogallerytext/index.d.ts +3 -0
  45. package/dist/components/gallery/xstaticgallery/XStaticGallery.d.ts +10 -0
  46. package/dist/components/gallery/xstaticgallery/index.d.ts +3 -0
  47. package/dist/components/index.css +215 -215
  48. package/dist/components/index.css.map +7 -1
  49. package/dist/components/index.d.ts +6 -8
  50. package/dist/components/index.js +146 -31
  51. package/dist/components/index.js.map +7 -1
  52. package/dist/components/index.mjs +12 -12
  53. package/dist/components/index.mjs.map +7 -1
  54. package/dist/components/layout/index.css +28 -28
  55. package/dist/components/layout/index.css.map +7 -1
  56. package/dist/components/layout/index.d.ts +6 -55
  57. package/dist/components/layout/index.js +29 -10
  58. package/dist/components/layout/index.js.map +7 -1
  59. package/dist/components/layout/index.mjs +2 -2
  60. package/dist/components/layout/index.mjs.map +7 -1
  61. package/dist/components/layout/xfooter/XFooter.d.ts +24 -0
  62. package/dist/components/layout/xfooter/index.d.ts +3 -0
  63. package/dist/components/layout/xseparator/XSeparator.d.ts +13 -0
  64. package/dist/components/layout/xseparator/index.d.ts +3 -0
  65. package/dist/components/layout/xzigzaglayout/XZigZagLayout.d.ts +12 -0
  66. package/dist/components/layout/xzigzaglayout/index.d.ts +3 -0
  67. package/dist/components/navigation/index.css +35 -35
  68. package/dist/components/navigation/index.css.map +7 -1
  69. package/dist/components/navigation/index.d.ts +2 -76
  70. package/dist/components/navigation/index.js +26 -6
  71. package/dist/components/navigation/index.js.map +7 -1
  72. package/dist/components/navigation/index.mjs +2 -2
  73. package/dist/components/navigation/index.mjs.map +7 -1
  74. package/dist/components/navigation/{index.d.mts → xnavbar/XNavbar.d.ts} +6 -10
  75. package/dist/components/navigation/xnavbar/index.d.ts +3 -0
  76. package/dist/components/social/index.css +22 -22
  77. package/dist/components/social/index.css.map +7 -1
  78. package/dist/components/social/index.d.ts +2 -55
  79. package/dist/components/social/index.js +14 -13
  80. package/dist/components/social/index.js.map +7 -1
  81. package/dist/components/social/index.mjs +2 -2
  82. package/dist/components/social/index.mjs.map +7 -1
  83. package/dist/components/social/xsocialcontact/XSocialContact.d.ts +30 -0
  84. package/dist/components/social/xsocialcontact/XSocialIcons.d.ts +21 -0
  85. package/dist/components/social/xsocialcontact/index.d.ts +5 -0
  86. package/dist/index.css +215 -215
  87. package/dist/index.css.map +7 -1
  88. package/dist/index.d.ts +1 -8
  89. package/dist/index.js +149 -34
  90. package/dist/index.js.map +7 -1
  91. package/dist/index.mjs +12 -12
  92. package/dist/index.mjs.map +7 -1
  93. package/package.json +6 -4
  94. package/dist/chunk-2OAXRRVQ.mjs.map +0 -1
  95. package/dist/chunk-42XPBYTL.mjs.map +0 -1
  96. package/dist/chunk-5G4P2E76.mjs.map +0 -1
  97. package/dist/chunk-NY22GB3E.mjs.map +0 -1
  98. package/dist/chunk-QCMWPIG7.mjs.map +0 -1
  99. package/dist/chunk-U27ZVCP7.mjs.map +0 -1
  100. package/dist/components/content/index.d.mts +0 -17
  101. package/dist/components/forms/index.d.mts +0 -68
  102. package/dist/components/gallery/index.d.mts +0 -29
  103. package/dist/components/index.d.mts +0 -8
  104. package/dist/components/layout/index.d.mts +0 -55
  105. package/dist/components/social/index.d.mts +0 -55
  106. package/dist/index.d.mts +0 -8
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/components/layout/xfooter/XFooter.tsx", "../src/components/layout/xfooter/XFooter.module.css", "../src/components/layout/xseparator/XSeparator.module.css", "../src/components/layout/xseparator/XSeparator.tsx", "../src/components/layout/xzigzaglayout/XZigZagLayout.tsx", "../src/components/layout/xzigzaglayout/XZigZagLayout.module.css"],
4
+ "sourcesContent": ["import Link from \"next/link\";\nimport { CSSProperties } from \"react\";\nimport styles from \"./XFooter.module.css\";\n\nexport type XFooterLink = {\n label: string;\n href: string;\n};\n\nexport type CopyrightConfig = {\n text?: string;\n showYear?: boolean;\n customYear?: number | string;\n yearFirst?: boolean;\n};\n\nexport type XFooterProps = {\n links: XFooterLink[];\n copyright?: CopyrightConfig; \n layout?: \"horizontal\" | \"vertical\";\n columns?: 1 | 2 | 3 | 4;\n colors?: {\n bg?: string;\n text?: string;\n accent?: string;\n border?: string;\n };\n className?: string;\n};\nexport default function XFooter({\n links,\n copyright,\n layout = \"horizontal\",\n columns = 1,\n colors,\n className = \"\",\n}: XFooterProps) {\n \n const customStyles = {\n \"--xf-bg\": colors?.bg,\n \"--xf-text\": colors?.text,\n \"--xf-accent\": colors?.accent,\n \"--xf-border\": colors?.border,\n \"--xf-cols\": layout === \"horizontal\" ? columns : 1,\n } as CSSProperties;\n\n const currentYear = copyright?.customYear || new Date().getFullYear();\n const copyLabel = copyright?.text || \"Xscriptor\";\n\n return (\n <footer className={`${styles.XFooter} ${className}`} style={customStyles}>\n <div className={styles.container}>\n {/* Los links se organizan en el grid definido por --xf-cols */}\n <nav className={layout === \"vertical\" ? styles.navVertical : styles.nav}>\n {links.map((link, idx) => (\n <Link key={idx} href={link.href} className={styles.link}>\n {link.label}\n </Link>\n ))}\n </nav>\n\n {/* El copyright queda fuera del nav, por lo que hereda el centrado del container */}\n <div className={styles.copyright}>\n \u00A9 {copyright?.yearFirst \n ? `${currentYear} ${copyLabel}` \n : `${copyLabel} ${currentYear}`}\n </div>\n </div>\n </footer>\n );\n}", ".XFooter {\n width: 100%;\n background-color: var(--xf-bg, transparent);\n color: var(--xf-text, #333);\n padding: var(--xf-py, 0.9rem) 0.6rem;\n}\n\n.container {\n max-width: 1280px;\n margin: 0 auto;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 0.6rem; /* Espacio entre los links y el copyright */\n}\n\n/* El nav es el que maneja las columnas de los links */\n.nav {\n display: grid;\n gap: 0.5rem 1.5rem; \n grid-template-columns: repeat(var(--xf-cols, 1), minmax(0, auto));\n justify-content: center;\n text-align: center;\n width: 100%;\n}\n\n.navVertical {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 0.75rem;\n}\n\n.link {\n color: var(--xf-accent, inherit);\n text-decoration: none;\n font-size: 0.9rem;\n transition: opacity 0.2s;\n white-space: nowrap; /* Evita que los links se rompan en dos l\u00EDneas */\n}\n\n.link:hover {\n opacity: 0.7;\n}\n\n/* El copyright siempre ir\u00E1 al final y centrado por el flex del .container */\n.copyright {\n font-size: 0.75rem;\n opacity: 0.6;\n width: 100%;\n text-align: center;\n}", ".separatorContainer {\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n /* Variables para la X con fallbacks */\n --x-color: var(--separator-color); \n --x-bg: white;\n}\n\n.iconWrapper {\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n background-color: var(--x-bg);\n padding: 0 10px;\n \n /* Aplicamos el color din\u00E1mico */\n color: var(--x-color);\n \n font-family: system-ui, sans-serif;\n font-weight: bold;\n font-size: 1.2rem;\n line-height: 1;\n user-select: none;\n}\n\n.separator {\n --separator-color: #e2e8f0;\n --separator-thickness: 1px;\n --separator-margin: 1rem;\n \n border: 0;\n background-color: var(--separator-color);\n}\n\n/* Variantes de Estilo */\n.dashed {\n background-color: transparent !important;\n border-bottom: var(--separator-thickness) dashed var(--separator-color);\n}\n\n.dotted {\n background-color: transparent !important;\n border-bottom: var(--separator-thickness) dotted var(--separator-color);\n}\n\n/* Efecto Desvanecido (Fading) */\n/* Usamos mask-image para que funcione con cualquier color de fondo */\n.faded {\n mask-image: linear-gradient(\n to right, \n transparent, \n black 20%, \n black 80%, \n transparent\n );\n}\n\n/* Ajuste para desvanecido vertical */\n.vertical.faded {\n mask-image: linear-gradient(\n to bottom, \n transparent, \n black 20%, \n black 80%, \n transparent\n );\n}\n\n.horizontal {\n width: 100%;\n height: var(--separator-thickness);\n margin: var(--separator-margin) 0;\n}\n\n.vertical {\n width: var(--separator-thickness);\n height: 100%;\n display: inline-block;\n margin: 0 var(--separator-margin);\n vertical-align: middle;\n}", "import React from 'react';\nimport styles from './XSeparator.module.css';\n\nexport interface XSeparatorProps {\n orientation?: 'horizontal' | 'vertical';\n variant?: 'solid' | 'dashed' | 'dotted';\n isFaded?: boolean;\n hasX?: boolean;\n xColor?: string; // Nuevo: Color de la X\n xBg?: string; // Nuevo: Fondo detr\u00E1s de la X (para el recorte)\n thickness?: string;\n color?: string;\n gap?: string;\n className?: string;\n}\n\nexport default function XSeparator({\n orientation = 'horizontal',\n variant = 'solid',\n isFaded = false,\n hasX = false,\n xColor, \n xBg = 'white',\n thickness = '1px',\n color = '#e2e8f0',\n gap = '1rem',\n className = ''\n}: XSeparatorProps) {\n \n const dynamicStyles = {\n '--separator-color': color,\n '--separator-thickness': thickness,\n '--separator-margin': gap,\n '--x-color': xColor || color, // Si no se define xColor, usa el color de la l\u00EDnea\n '--x-bg': xBg,\n } as React.CSSProperties;\n\n const classes = [\n styles.separator,\n orientation === 'vertical' ? styles.vertical : styles.horizontal,\n variant !== 'solid' && styles[variant],\n isFaded && styles.faded,\n ].filter(Boolean).join(' ');\n\n const line = <hr className={classes} style={dynamicStyles} />;\n\n if (!hasX) return line;\n\n return (\n <div className={`${styles.separatorContainer} ${className}`} style={dynamicStyles}>\n {line}\n <div className={styles.iconWrapper}>\n \u2715\n </div>\n </div>\n );\n}", "import React, { Children, HTMLAttributes, useEffect, useRef, useState, useCallback } from \"react\";\nimport styles from \"./XZigZagLayout.module.css\";\n\nexport type XZigZagLayoutProps = HTMLAttributes<HTMLDivElement> & {\n children: React.ReactNode;\n startSide?: \"left\" | \"right\";\n gap?: number | string;\n offset?: number | string;\n textAlign?: \"inherit\" | \"side\" | \"left\" | \"right\";\n showLine?: boolean;\n lineColor?: string;\n lineThickness?: number | string;\n};\n\nexport default function XZigZagLayout({\n children,\n className,\n style,\n startSide = \"left\",\n gap,\n offset,\n textAlign = \"inherit\",\n showLine = false,\n lineColor = \"#cccccc\",\n lineThickness = 2,\n ...rest\n}: XZigZagLayoutProps) {\n const items = Children.toArray(children).filter(Boolean);\n const containerRef = useRef<HTMLDivElement>(null);\n const itemsRef = useRef<(HTMLDivElement | null)[]>([]);\n const pathRef = useRef<SVGPathElement>(null);\n\n const [points, setPoints] = useState<{ x: number; y: number }[]>([]);\n const [pathLength, setPathLength] = useState(0);\n const [drawProgress, setDrawProgress] = useState(0);\n\n // Calcula el centro de cada elemento para dibujar los puntos\n const calculatePoints = useCallback(() => {\n if (!containerRef.current) return;\n const containerRect = containerRef.current.getBoundingClientRect();\n\n const newPoints = itemsRef.current.filter(Boolean).map((el) => {\n const rect = el!.getBoundingClientRect();\n return {\n x: rect.left + rect.width / 2 - containerRect.left,\n y: rect.top + rect.height / 2 - containerRect.top,\n };\n });\n\n if (newPoints.length > 0) {\n newPoints.unshift({ x: newPoints[0].x, y: 0 }); // Inicia arriba\n newPoints.push({ x: newPoints[newPoints.length - 1].x, y: containerRect.height }); // Termina abajo\n }\n\n setPoints(newPoints);\n }, []);\n\n useEffect(() => {\n if (!showLine || !containerRef.current) return;\n const observer = new ResizeObserver(() => calculatePoints());\n observer.observe(containerRef.current);\n calculatePoints();\n return () => observer.disconnect();\n }, [showLine, calculatePoints]);\n\n useEffect(() => {\n if (pathRef.current) setPathLength(pathRef.current.getTotalLength());\n }, [points]);\n\n useEffect(() => {\n if (!showLine) return;\n const handleScroll = () => {\n if (!containerRef.current) return;\n const { top, height } = containerRef.current.getBoundingClientRect();\n const windowHeight = window.innerHeight;\n const start = windowHeight / 2;\n const progress = (start - top) / height;\n\n setDrawProgress(Math.min(Math.max(progress, 0), 1));\n };\n\n window.addEventListener(\"scroll\", handleScroll);\n handleScroll();\n return () => window.removeEventListener(\"scroll\", handleScroll);\n }, [showLine]);\n\n const cssVars: Record<string, string> = {};\n if (gap !== undefined) cssVars[\"--x-zigzag-gap\"] = typeof gap === \"number\" ? `${gap}px` : gap;\n if (offset !== undefined) cssVars[\"--x-zigzag-offset\"] = typeof offset === \"number\" ? `${offset}px` : offset;\n\n const mergedStyle: React.CSSProperties = { ...style, ...cssVars };\n\n const pathD = points.length > 0\n ? `M ${points[0].x} ${points[0].y} ` + points.slice(1).map((p) => `L ${p.x} ${p.y}`).join(\" \")\n : \"\";\n\n return (\n <div\n ref={containerRef}\n {...rest}\n className={[styles.layout, className].filter(Boolean).join(\" \")}\n style={mergedStyle}\n >\n {showLine && points.length > 0 && (\n <svg className={styles.svgLine} xmlns=\"http://www.w3.org/2000/svg\">\n <path\n ref={pathRef}\n d={pathD}\n fill=\"none\"\n stroke={lineColor}\n strokeWidth={lineThickness}\n strokeDasharray={pathLength}\n strokeDashoffset={pathLength - pathLength * drawProgress}\n style={{ transition: \"stroke-dashoffset 0.1s ease-out\" }}\n />\n </svg>\n )}\n\n {items.map((child, index) => {\n const isStartLeft = startSide === \"left\";\n const alignLeft = isStartLeft ? index % 2 === 0 : index % 2 !== 0;\n const alignmentClass =\n textAlign === \"side\"\n ? alignLeft ? styles.textLeft : styles.textRight\n : textAlign === \"left\" ? styles.textLeft : textAlign === \"right\" ? styles.textRight : \"\";\n\n return (\n <div key={index} className={`${styles.item} ${alignLeft ? styles.left : styles.right} ${alignmentClass}`}>\n {/* El wrapper interno nos permite medir exactamente d\u00F3nde queda el contenido */}\n <div ref={(el) => { itemsRef.current[index] = el; }} className={styles.contentWrapper}>\n {child}\n </div>\n </div>\n );\n })}\n </div>\n );\n}", ".layout {\n width: min(100%, 72rem);\n margin: 0 auto;\n display: flex;\n flex-direction: column;\n gap: var(--x-zigzag-gap, 0.5rem);\n padding-inline: clamp(0.5rem, 2vw, 1rem);\n position: relative; \n}\n\n/* Nuevos estilos para el SVG de la l\u00EDnea */\n.svgLine {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n pointer-events: none;\n z-index: 0;\n}\n\n.item {\n width: 100%;\n display: grid;\n grid-template-columns: repeat(12, minmax(0, 1fr));\n}\n\n.item > * {\n width: 100%;\n text-align: inherit;\n}\n\n/* Wrapper transparente que envuelve al child */\n.contentWrapper {\n width: 100%;\n}\n\n.textLeft > * {\n text-align: left;\n}\n\n.textRight > * {\n text-align: right;\n}\n\n.left > * {\n grid-column: 2 / 8;\n}\n\n.right > * {\n grid-column: 6 / 12;\n}\n\n@media (max-width: 768px) {\n /* En lugar de ocupar las 12 columnas, los hacemos un poco m\u00E1s angostos para que sus centros se desfasen */\n .left > * {\n grid-column: 1 / 11;\n }\n\n .right > * {\n grid-column: 3 / 13;\n }\n}"],
5
+ "mappings": ";AAAA,OAAO,UAAU;;;ACAjB;AAAA,EAAC,SAAAA;AAAA,EAOA,WAAAC;AAAA,EAUA,KAAAC;AAAA,EASA,aAAAC;AAAA,EAOA,MAAAC;AAAA,EAaA,WAAAC;AAAA;;;ADSW,cAOJ,YAPI;AA1BG,SAAR,QAAyB;AAAA,EAC9B;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT,UAAU;AAAA,EACV;AAAA,EACA,YAAY;AACd,GAAiB;AAEf,QAAM,eAAe;AAAA,IACnB,WAAW,QAAQ;AAAA,IACnB,aAAa,QAAQ;AAAA,IACrB,eAAe,QAAQ;AAAA,IACvB,eAAe,QAAQ;AAAA,IACvB,aAAa,WAAW,eAAe,UAAU;AAAA,EACnD;AAEA,QAAM,cAAc,WAAW,eAAc,oBAAI,KAAK,GAAE,YAAY;AACpE,QAAM,YAAY,WAAW,QAAQ;AAErC,SACE,oBAAC,YAAO,WAAW,GAAG,gBAAO,OAAO,IAAI,SAAS,IAAI,OAAO,cAC1D,+BAAC,SAAI,WAAW,gBAAO,WAErB;AAAA,wBAAC,SAAI,WAAW,WAAW,aAAa,gBAAO,cAAc,gBAAO,KACjE,gBAAM,IAAI,CAAC,MAAM,QAChB,oBAAC,QAAe,MAAM,KAAK,MAAM,WAAW,gBAAO,MAChD,eAAK,SADG,GAEX,CACD,GACH;AAAA,IAGA,qBAAC,SAAI,WAAW,gBAAO,WAAW;AAAA;AAAA,MAC7B,WAAW,YACR,GAAG,WAAW,IAAI,SAAS,KAC3B,GAAG,SAAS,IAAI,WAAW;AAAA,OACnC;AAAA,KACF,GACF;AAEJ;;;AEtEA;AAAA,EAAC,oBAAAC;AAAA,EAWA,aAAAC;AAAA,EAkBA,WAAAC;AAAA,EAUA,QAAAC;AAAA,EAKA,QAAAC;AAAA,EAOA,OAAAC;AAAA,EAWA,UAAAC;AAAA,EAUA,YAAAC;AAAA;;;AC5Bc,gBAAAC,MAKX,QAAAC,aALW;AA5BA,SAAR,WAA4B;AAAA,EACjC,cAAc;AAAA,EACd,UAAU;AAAA,EACV,UAAU;AAAA,EACV,OAAO;AAAA,EACP;AAAA,EACA,MAAM;AAAA,EACN,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,YAAY;AACd,GAAoB;AAElB,QAAM,gBAAgB;AAAA,IACpB,qBAAqB;AAAA,IACrB,yBAAyB;AAAA,IACzB,sBAAsB;AAAA,IACtB,aAAa,UAAU;AAAA;AAAA,IACvB,UAAU;AAAA,EACZ;AAEA,QAAM,UAAU;AAAA,IACd,mBAAO;AAAA,IACP,gBAAgB,aAAa,mBAAO,WAAW,mBAAO;AAAA,IACtD,YAAY,WAAW,mBAAO,OAAO;AAAA,IACrC,WAAW,mBAAO;AAAA,EACpB,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAE1B,QAAM,OAAO,gBAAAD,KAAC,QAAG,WAAW,SAAS,OAAO,eAAe;AAE3D,MAAI,CAAC,KAAM,QAAO;AAElB,SACE,gBAAAC,MAAC,SAAI,WAAW,GAAG,mBAAO,kBAAkB,IAAI,SAAS,IAAI,OAAO,eACjE;AAAA;AAAA,IACD,gBAAAD,KAAC,SAAI,WAAW,mBAAO,aAAa,oBAEpC;AAAA,KACF;AAEJ;;;ACxDA,SAAgB,UAA0B,WAAW,QAAQ,UAAU,mBAAmB;;;ACA1F;AAAA,EAAC,QAAAE;AAAA,EAWA,SAAAC;AAAA,EAUA,MAAAC;AAAA,EAYA,gBAAAC;AAAA,EAIA,UAAAC;AAAA,EAIA,WAAAC;AAAA,EAIA,MAAAC;AAAA,EAIA,OAAAC;AAAA;;;ADgDG,SAQM,OAAAC,MARN,QAAAC,aAAA;AAnFW,SAAR,cAA+B;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,gBAAgB;AAAA,EAChB,GAAG;AACL,GAAuB;AACrB,QAAM,QAAQ,SAAS,QAAQ,QAAQ,EAAE,OAAO,OAAO;AACvD,QAAM,eAAe,OAAuB,IAAI;AAChD,QAAM,WAAW,OAAkC,CAAC,CAAC;AACrD,QAAM,UAAU,OAAuB,IAAI;AAE3C,QAAM,CAAC,QAAQ,SAAS,IAAI,SAAqC,CAAC,CAAC;AACnE,QAAM,CAAC,YAAY,aAAa,IAAI,SAAS,CAAC;AAC9C,QAAM,CAAC,cAAc,eAAe,IAAI,SAAS,CAAC;AAGlD,QAAM,kBAAkB,YAAY,MAAM;AACxC,QAAI,CAAC,aAAa,QAAS;AAC3B,UAAM,gBAAgB,aAAa,QAAQ,sBAAsB;AAEjE,UAAM,YAAY,SAAS,QAAQ,OAAO,OAAO,EAAE,IAAI,CAAC,OAAO;AAC7D,YAAM,OAAO,GAAI,sBAAsB;AACvC,aAAO;AAAA,QACL,GAAG,KAAK,OAAO,KAAK,QAAQ,IAAI,cAAc;AAAA,QAC9C,GAAG,KAAK,MAAM,KAAK,SAAS,IAAI,cAAc;AAAA,MAChD;AAAA,IACF,CAAC;AAED,QAAI,UAAU,SAAS,GAAG;AACxB,gBAAU,QAAQ,EAAE,GAAG,UAAU,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC;AAC7C,gBAAU,KAAK,EAAE,GAAG,UAAU,UAAU,SAAS,CAAC,EAAE,GAAG,GAAG,cAAc,OAAO,CAAC;AAAA,IAClF;AAEA,cAAU,SAAS;AAAA,EACrB,GAAG,CAAC,CAAC;AAEL,YAAU,MAAM;AACd,QAAI,CAAC,YAAY,CAAC,aAAa,QAAS;AACxC,UAAM,WAAW,IAAI,eAAe,MAAM,gBAAgB,CAAC;AAC3D,aAAS,QAAQ,aAAa,OAAO;AACrC,oBAAgB;AAChB,WAAO,MAAM,SAAS,WAAW;AAAA,EACnC,GAAG,CAAC,UAAU,eAAe,CAAC;AAE9B,YAAU,MAAM;AACd,QAAI,QAAQ,QAAS,eAAc,QAAQ,QAAQ,eAAe,CAAC;AAAA,EACrE,GAAG,CAAC,MAAM,CAAC;AAEX,YAAU,MAAM;AACd,QAAI,CAAC,SAAU;AACf,UAAM,eAAe,MAAM;AACzB,UAAI,CAAC,aAAa,QAAS;AAC3B,YAAM,EAAE,KAAK,OAAO,IAAI,aAAa,QAAQ,sBAAsB;AACnE,YAAM,eAAe,OAAO;AAC5B,YAAM,QAAQ,eAAe;AAC7B,YAAM,YAAY,QAAQ,OAAO;AAEjC,sBAAgB,KAAK,IAAI,KAAK,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;AAAA,IACpD;AAEA,WAAO,iBAAiB,UAAU,YAAY;AAC9C,iBAAa;AACb,WAAO,MAAM,OAAO,oBAAoB,UAAU,YAAY;AAAA,EAChE,GAAG,CAAC,QAAQ,CAAC;AAEb,QAAM,UAAkC,CAAC;AACzC,MAAI,QAAQ,OAAW,SAAQ,gBAAgB,IAAI,OAAO,QAAQ,WAAW,GAAG,GAAG,OAAO;AAC1F,MAAI,WAAW,OAAW,SAAQ,mBAAmB,IAAI,OAAO,WAAW,WAAW,GAAG,MAAM,OAAO;AAEtG,QAAM,cAAmC,EAAE,GAAG,OAAO,GAAG,QAAQ;AAEhE,QAAM,QAAQ,OAAO,SAAS,IAC1B,KAAK,OAAO,CAAC,EAAE,CAAC,IAAI,OAAO,CAAC,EAAE,CAAC,MAAM,OAAO,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,KAAK,GAAG,IAC3F;AAEJ,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,MACJ,GAAG;AAAA,MACJ,WAAW,CAAC,sBAAO,QAAQ,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,MAC9D,OAAO;AAAA,MAEN;AAAA,oBAAY,OAAO,SAAS,KAC3B,gBAAAD,KAAC,SAAI,WAAW,sBAAO,SAAS,OAAM,8BACpC,0BAAAA;AAAA,UAAC;AAAA;AAAA,YACC,KAAK;AAAA,YACL,GAAG;AAAA,YACH,MAAK;AAAA,YACL,QAAQ;AAAA,YACR,aAAa;AAAA,YACb,iBAAiB;AAAA,YACjB,kBAAkB,aAAa,aAAa;AAAA,YAC5C,OAAO,EAAE,YAAY,kCAAkC;AAAA;AAAA,QACzD,GACF;AAAA,QAGD,MAAM,IAAI,CAAC,OAAO,UAAU;AAC3B,gBAAM,cAAc,cAAc;AAClC,gBAAM,YAAY,cAAc,QAAQ,MAAM,IAAI,QAAQ,MAAM;AAChE,gBAAM,iBACJ,cAAc,SACV,YAAY,sBAAO,WAAW,sBAAO,YACrC,cAAc,SAAS,sBAAO,WAAW,cAAc,UAAU,sBAAO,YAAY;AAE1F,iBACE,gBAAAA,KAAC,SAAgB,WAAW,GAAG,sBAAO,IAAI,IAAI,YAAY,sBAAO,OAAO,sBAAO,KAAK,IAAI,cAAc,IAEpG,0BAAAA,KAAC,SAAI,KAAK,CAAC,OAAO;AAAE,qBAAS,QAAQ,KAAK,IAAI;AAAA,UAAI,GAAG,WAAW,sBAAO,gBACpE,iBACH,KAJQ,KAKV;AAAA,QAEJ,CAAC;AAAA;AAAA;AAAA,EACH;AAEJ;",
6
+ "names": ["XFooter", "container", "nav", "navVertical", "link", "copyright", "separatorContainer", "iconWrapper", "separator", "dashed", "dotted", "faded", "vertical", "horizontal", "jsx", "jsxs", "layout", "svgLine", "item", "contentWrapper", "textLeft", "textRight", "left", "right", "jsx", "jsxs"]
7
+ }
@@ -1,81 +1,81 @@
1
1
  /* src/components/content/xinteractivephrase/XInteractivePhrase.module.css */
2
- .container {
2
+ .XInteractivePhrase_container3 {
3
3
  padding: 1rem 0;
4
4
  color: var(--text, #000);
5
5
  width: 100%;
6
6
  }
7
- .title {
7
+ .XInteractivePhrase_title3 {
8
8
  margin: 0;
9
9
  padding: 0;
10
10
  line-height: 1.3;
11
11
  font-weight: inherit;
12
12
  text-align: inherit;
13
13
  }
14
- h1.title {
14
+ h1.XInteractivePhrase_title3 {
15
15
  font-size: clamp(2rem, 6vw, 2.2rem);
16
16
  font-weight: 800;
17
17
  margin: 0;
18
18
  padding: 0;
19
19
  text-align: inherit;
20
20
  }
21
- h2.title {
21
+ h2.XInteractivePhrase_title3 {
22
22
  font-size: clamp(1.675rem, 4vw, 1.8rem);
23
23
  font-weight: 700;
24
24
  margin: 0;
25
25
  padding: 0;
26
26
  text-align: inherit;
27
27
  }
28
- h3.title {
28
+ h3.XInteractivePhrase_title3 {
29
29
  font-size: clamp(1.4rem, 3vw, 1.95rem);
30
30
  font-weight: 700;
31
31
  margin: 0;
32
32
  padding: 0;
33
33
  text-align: inherit;
34
34
  }
35
- h4.title {
35
+ h4.XInteractivePhrase_title3 {
36
36
  font-size: clamp(1.25rem, 3vw, 2rem);
37
37
  font-weight: 600;
38
38
  margin: 0;
39
39
  padding: 0;
40
40
  text-align: inherit;
41
41
  }
42
- h5.title {
42
+ h5.XInteractivePhrase_title3 {
43
43
  font-size: clamp(1.125rem, 3vw, 1.5rem);
44
44
  font-weight: 600;
45
45
  margin: 0;
46
46
  padding: 0;
47
47
  text-align: inherit;
48
48
  }
49
- h6.title {
49
+ h6.XInteractivePhrase_title3 {
50
50
  font-size: clamp(1rem, 2.5vw, 1.25rem);
51
51
  font-weight: 600;
52
52
  margin: 0;
53
53
  padding: 0;
54
54
  text-align: inherit;
55
55
  }
56
- p.title {
56
+ p.XInteractivePhrase_title3 {
57
57
  font-size: 1rem;
58
58
  font-weight: 400;
59
59
  margin: 0;
60
60
  padding: 0;
61
61
  text-align: inherit;
62
62
  }
63
- .title strong {
63
+ .XInteractivePhrase_title3 strong {
64
64
  font-weight: 900;
65
65
  color: var(--accent, #0070f3);
66
66
  }
67
- .title em {
67
+ .XInteractivePhrase_title3 em {
68
68
  font-style: italic;
69
69
  font-family: serif;
70
70
  }
71
- .underlineEffect {
71
+ .XInteractivePhrase_underlineEffect3 {
72
72
  position: relative;
73
73
  cursor: pointer;
74
74
  color: var(--accent, #0070f3);
75
75
  display: inline-block;
76
76
  transition: color 0.3s ease;
77
77
  }
78
- .underlineEffect::after {
78
+ .XInteractivePhrase_underlineEffect3::after {
79
79
  content: "";
80
80
  position: absolute;
81
81
  bottom: -2px;
@@ -91,10 +91,10 @@ p.title {
91
91
  currentColor 4px);
92
92
  transition: opacity 0.3s ease;
93
93
  }
94
- .underlineEffect:hover::after {
94
+ .XInteractivePhrase_underlineEffect3:hover::after {
95
95
  opacity: 0;
96
96
  }
97
- .buttonEffect {
97
+ .XInteractivePhrase_buttonEffect3 {
98
98
  display: inline-block;
99
99
  padding: 0.1em 0.6em;
100
100
  border: 2px dashed currentColor;
@@ -103,30 +103,30 @@ p.title {
103
103
  color: var(--accent, #0070f3);
104
104
  transition: all 0.3s ease;
105
105
  }
106
- .buttonEffect:hover {
106
+ .XInteractivePhrase_buttonEffect3:hover {
107
107
  background: currentColor;
108
108
  color: var(--bg, #fff);
109
109
  }
110
- .blurEffect {
110
+ .XInteractivePhrase_blurEffect3 {
111
111
  display: inline-block;
112
112
  transition: filter 0.7s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.7s ease;
113
113
  }
114
- .isVisible {
114
+ .XInteractivePhrase_isVisible3 {
115
115
  filter: blur(0);
116
116
  opacity: 1;
117
117
  }
118
- .isHidden {
118
+ .XInteractivePhrase_isHidden3 {
119
119
  filter: blur(10px);
120
120
  opacity: 0.3;
121
121
  user-select: none;
122
122
  }
123
- .lineBreak {
123
+ .XInteractivePhrase_lineBreak3 {
124
124
  display: block;
125
125
  height: 0.8rem;
126
126
  }
127
- .underlineEffect:focus-visible,
128
- .buttonEffect:focus-visible {
127
+ .XInteractivePhrase_underlineEffect3:focus-visible,
128
+ .XInteractivePhrase_buttonEffect3:focus-visible {
129
129
  outline: 2px solid var(--accent, #0070f3);
130
130
  outline-offset: 4px;
131
131
  }
132
- /*# sourceMappingURL=index.css.map */
132
+ /*# sourceMappingURL=index.css.map */
@@ -1 +1,7 @@
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":[]}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/content/xinteractivephrase/XInteractivePhrase.module.css"],
4
+ "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\u00E1fica 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 \u00E9nfasis */\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\u00E1licas */\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}"],
5
+ "mappings": ";AAAA,CAACA;AACC,WAAS,KAAK;AACd,SAAO,IAAI,MAAM,EAAE;AACnB,SAAO;AACT;AAEA,CAACC;AACC,UAAQ;AACR,WAAS;AACT,eAAa;AACb,eAAa;AACb,cAAY;AACd;AAGA,EAAE,CATDA;AASU,aAAW,MAAM,IAAI,EAAE,GAAG,EAAE;AAAS,eAAa;AAAK,UAAQ;AAAG,WAAS;AAAG,cAAY;AAAS;AAC9G,EAAE,CAVDA;AAUU,aAAW,MAAM,QAAQ,EAAE,GAAG,EAAE;AAAS,eAAa;AAAK,UAAQ;AAAG,WAAS;AAAG,cAAY;AAAS;AAClH,EAAE,CAXDA;AAWU,aAAW,MAAM,MAAM,EAAE,GAAG,EAAE;AAAU,eAAa;AAAK,UAAQ;AAAG,WAAS;AAAG,cAAY;AAAS;AACjH,EAAE,CAZDA;AAYU,aAAW,MAAM,OAAO,EAAE,GAAG,EAAE;AAAO,eAAa;AAAK,UAAQ;AAAG,WAAS;AAAG,cAAY;AAAS;AAC/G,EAAE,CAbDA;AAaU,aAAW,MAAM,QAAQ,EAAE,GAAG,EAAE;AAAS,eAAa;AAAK,UAAQ;AAAG,WAAS;AAAG,cAAY;AAAS;AAClH,EAAE,CAdDA;AAcU,aAAW,MAAM,IAAI,EAAE,KAAK,EAAE;AAAU,eAAa;AAAK,UAAQ;AAAG,WAAS;AAAG,cAAY;AAAS;AACjH,CAAC,CAfAA;AAeU,aAAW;AAAM,eAAa;AAAK,UAAQ;AAAG,WAAS;AAAG,cAAY;AAAS;AAG1F,CAlBCA,0BAkBM;AACL,eAAa;AACb,SAAO,IAAI,QAAQ,EAAE;AACvB;AAEA,CAvBCA,0BAuBM;AACL,cAAY;AACZ,eAAa;AACf;AAGA,CAACC;AACC,YAAU;AACV,UAAQ;AACR,SAAO,IAAI,QAAQ,EAAE;AACrB,WAAS;AACT,cAAY,MAAM,KAAK;AACzB;AAEA,CARCA,mCAQe;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,CAzBCA,mCAyBe,MAAM;AACpB,WAAS;AACX;AAEA,CAACC;AACC,WAAS;AACT,WAAS,MAAM;AACf,UAAQ,IAAI,OAAO;AACnB,iBAAe;AACf,UAAQ;AACR,SAAO,IAAI,QAAQ,EAAE;AACrB,cAAY,IAAI,KAAK;AACvB;AAEA,CAVCA,gCAUY;AACX,cAAY;AACZ,SAAO,IAAI,IAAI,EAAE;AACnB;AAEA,CAACC;AACC,WAAS;AACT,cAAY,OAAO,KAAK,aAAa,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,QAAQ,KAAK;AACrE;AAEA,CAACC;AACC,UAAQ,KAAK;AACb,WAAS;AACX;AAEA,CAACC;AACC,UAAQ,KAAK;AACb,WAAS;AACT,eAAa;AACf;AAEA,CAACC;AACC,WAAS;AACT,UAAQ;AACV;AAEA,CAjECL,mCAiEe;AAChB,CArCCC,gCAqCY;AACX,WAAS,IAAI,MAAM,IAAI,QAAQ,EAAE;AACjC,kBAAgB;AAClB;",
6
+ "names": ["container", "title", "underlineEffect", "buttonEffect", "blurEffect", "isVisible", "isHidden", "lineBreak"]
7
+ }
@@ -1,17 +1,2 @@
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 };
1
+ export { XInteractivePhrase } from "./xinteractivephrase";
2
+ export type { XInteractivePhraseProps, WordConfig } from "./xinteractivephrase";
@@ -38,7 +38,16 @@ module.exports = __toCommonJS(content_exports);
38
38
  var import_react = __toESM(require("react"));
39
39
 
40
40
  // src/components/content/xinteractivephrase/XInteractivePhrase.module.css
41
- var XInteractivePhrase_default = {};
41
+ var XInteractivePhrase_default = {
42
+ container: "XInteractivePhrase_container3",
43
+ title: "XInteractivePhrase_title3",
44
+ underlineEffect: "XInteractivePhrase_underlineEffect3",
45
+ buttonEffect: "XInteractivePhrase_buttonEffect3",
46
+ blurEffect: "XInteractivePhrase_blurEffect3",
47
+ isVisible: "XInteractivePhrase_isVisible3",
48
+ isHidden: "XInteractivePhrase_isHidden3",
49
+ lineBreak: "XInteractivePhrase_lineBreak3"
50
+ };
42
51
 
43
52
  // src/components/content/xinteractivephrase/XInteractivePhrase.tsx
44
53
  var import_jsx_runtime = require("react/jsx-runtime");
@@ -95,8 +104,4 @@ function XInteractivePhrase({
95
104
  ] }, index);
96
105
  }) }) });
97
106
  }
98
- // Annotate the CommonJS export names for ESM import in node:
99
- 0 && (module.exports = {
100
- XInteractivePhrase
101
- });
102
- //# sourceMappingURL=index.js.map
107
+ //# sourceMappingURL=index.js.map
@@ -1 +1,7 @@
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"]}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/content/index.ts", "../../../src/components/content/xinteractivephrase/XInteractivePhrase.tsx", "../../../src/components/content/xinteractivephrase/XInteractivePhrase.module.css"],
4
+ "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\u00F3n\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\u00F3n de l\u00F3gica 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\u00E1fica 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 \u00E9nfasis */\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\u00E1licas */\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}"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACEA,mBAA+C;;;ACF/C;AAAA,EAAC,WAAAA;AAAA,EAMA,OAAAC;AAAA,EA6BA,iBAAAC;AAAA,EA6BA,cAAAC;AAAA,EAeA,YAAAC;AAAA,EAKA,WAAAC;AAAA,EAKA,UAAAC;AAAA,EAMA,WAAAC;AAAA;;;AD3BoC;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,aAAAC,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;",
6
+ "names": ["container", "title", "underlineEffect", "buttonEffect", "blurEffect", "isVisible", "isHidden", "lineBreak", "React"]
7
+ }
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  XInteractivePhrase
3
- } from "../../chunk-5G4P2E76.mjs";
3
+ } from "../../chunk-34NJCJUI.mjs";
4
4
  export {
5
5
  XInteractivePhrase
6
6
  };
7
- //# sourceMappingURL=index.mjs.map
7
+ //# sourceMappingURL=index.mjs.map
@@ -1 +1,7 @@
1
- {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -0,0 +1,13 @@
1
+ export interface WordConfig {
2
+ text: string;
3
+ type: "normal" | "underline" | "button" | "blur1" | "blur2";
4
+ breakAfter?: boolean;
5
+ italic?: boolean;
6
+ bold?: boolean;
7
+ }
8
+ export interface XInteractivePhraseProps {
9
+ words: WordConfig[];
10
+ as?: "h1" | "h2" | "h3" | "h4" | "h5" | "h6" | "p" | "span";
11
+ className?: string;
12
+ }
13
+ export default function XInteractivePhrase({ words, as: Tag, className }: XInteractivePhraseProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,3 @@
1
+ export { default as XInteractivePhrase } from "./XInteractivePhrase";
2
+ export { default } from "./XInteractivePhrase";
3
+ export type { XInteractivePhraseProps, WordConfig } from "./XInteractivePhrase";
@@ -1,5 +1,5 @@
1
1
  /* src/components/forms/xcontactform/XContactForm.module.css */
2
- .wrapper {
2
+ .XContactForm_wrapper3 {
3
3
  --input-padding: .65rem .9rem;
4
4
  --font-size: 16px;
5
5
  --form-gap: 1.25rem;
@@ -35,7 +35,7 @@
35
35
  border: var(--wrapper-border-width) var(--wrapper-border-style) var(--wrapper-border-color);
36
36
  border-radius: var(--wrapper-radius);
37
37
  }
38
- .small {
38
+ .XContactForm_small3 {
39
39
  --input-padding: .35rem .55rem;
40
40
  --font-size: 13px;
41
41
  --form-gap: .75rem;
@@ -43,7 +43,7 @@
43
43
  --field-gap: .3rem;
44
44
  --button-min-width: 118px;
45
45
  }
46
- .medium {
46
+ .XContactForm_medium3 {
47
47
  --input-padding: .5rem .7rem;
48
48
  --font-size: 15px;
49
49
  --form-gap: 1rem;
@@ -51,7 +51,7 @@
51
51
  --field-gap: .4rem;
52
52
  --button-min-width: 130px;
53
53
  }
54
- .large {
54
+ .XContactForm_large3 {
55
55
  --input-padding: 1rem 1.2rem;
56
56
  --font-size: 18px;
57
57
  --form-gap: 1.5rem;
@@ -59,33 +59,33 @@
59
59
  --field-gap: .5rem;
60
60
  --button-min-width: 150px;
61
61
  }
62
- .form {
62
+ .XContactForm_form3 {
63
63
  display: grid;
64
64
  gap: var(--form-gap);
65
65
  max-width: 100%;
66
66
  }
67
- .row {
67
+ .XContactForm_row3 {
68
68
  display: grid;
69
69
  gap: var(--row-gap);
70
70
  }
71
- .grid .row {
71
+ .XContactForm_grid3 .XContactForm_row3 {
72
72
  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
73
73
  }
74
- .vertical .row {
74
+ .XContactForm_vertical3 .XContactForm_row3 {
75
75
  grid-template-columns: 1fr;
76
76
  }
77
- .field {
77
+ .XContactForm_field3 {
78
78
  display: flex;
79
79
  flex-direction: column;
80
80
  gap: var(--field-gap);
81
81
  }
82
- .field label {
82
+ .XContactForm_field3 label {
83
83
  font-size: calc(var(--font-size) - 2px);
84
84
  font-weight: 500;
85
85
  color: var(--label-color);
86
86
  }
87
- .field input,
88
- .field textarea {
87
+ .XContactForm_field3 input,
88
+ .XContactForm_field3 textarea {
89
89
  width: 100%;
90
90
  padding: var(--input-padding);
91
91
  border: var(--field-border-width) var(--field-border-style) var(--field-border-color);
@@ -94,16 +94,16 @@
94
94
  box-sizing: border-box;
95
95
  font-family: inherit;
96
96
  }
97
- .field input::placeholder,
98
- .field textarea::placeholder {
97
+ .XContactForm_field3 input::placeholder,
98
+ .XContactForm_field3 textarea::placeholder {
99
99
  color: #888;
100
100
  }
101
- .buttoncontainer {
101
+ .XContactForm_buttoncontainer3 {
102
102
  display: flex;
103
103
  justify-content: var(--btn-alignment);
104
104
  margin-top: 0.25rem;
105
105
  }
106
- .button {
106
+ .XContactForm_button3 {
107
107
  padding: var(--input-padding);
108
108
  border-radius: var(--btn-radius);
109
109
  border: var(--btn-border-width) var(--btn-border-style) var(--btn-border-color);
@@ -119,35 +119,35 @@
119
119
  border-color 0.2s ease,
120
120
  opacity 0.2s ease;
121
121
  }
122
- .button:hover {
122
+ .XContactForm_button3:hover {
123
123
  background-color: var(--btn-hover-bg-color);
124
124
  color: var(--btn-hover-text-color);
125
125
  border-color: var(--btn-hover-border-color);
126
126
  opacity: 0.95;
127
127
  }
128
- .status {
128
+ .XContactForm_status3 {
129
129
  min-height: 1.5rem;
130
130
  font-size: calc(var(--font-size) - 2px);
131
131
  margin-top: 0.25rem;
132
132
  }
133
- .statusOk {
133
+ .XContactForm_statusOk3 {
134
134
  color: var(--status-ok-color);
135
135
  }
136
- .statusError {
136
+ .XContactForm_statusError3 {
137
137
  color: var(--status-error-color);
138
138
  }
139
- .honeypot {
139
+ .XContactForm_honeypot3 {
140
140
  position: absolute;
141
141
  left: -9999px;
142
142
  top: -9999px;
143
143
  }
144
- .withDecorativeX {
144
+ .XContactForm_withDecorativeX3 {
145
145
  position: relative;
146
146
  padding-top: 2.5rem;
147
147
  padding-bottom: 2.5rem;
148
148
  }
149
- .decorativeXTop,
150
- .decorativeXBottom {
149
+ .XContactForm_decorativeXTop3,
150
+ .XContactForm_decorativeXBottom3 {
151
151
  position: absolute;
152
152
  left: 50%;
153
153
  transform: translateX(-50%);
@@ -161,17 +161,17 @@
161
161
  line-height: 1;
162
162
  z-index: 1;
163
163
  }
164
- .decorativeXTop {
164
+ .XContactForm_decorativeXTop3 {
165
165
  top: 0;
166
166
  transform: translate(-50%, -50%);
167
167
  }
168
- .decorativeXBottom {
168
+ .XContactForm_decorativeXBottom3 {
169
169
  bottom: 0;
170
170
  transform: translate(-50%, 50%);
171
171
  }
172
172
 
173
173
  /* src/components/forms/xnewsletter/XNewsletter.module.css */
174
- .container {
174
+ .XNewsletter_container3 {
175
175
  --nws-accent: var(--accent);
176
176
  --nws-text: var(--text);
177
177
  --nws-border: var(--border);
@@ -179,34 +179,34 @@
179
179
  width: 100%;
180
180
  font-family: "EB Garamond", serif;
181
181
  }
182
- .form {
182
+ .XNewsletter_form3 {
183
183
  display: flex;
184
184
  gap: 1rem;
185
185
  }
186
- .horizontal {
186
+ .XNewsletter_horizontal3 {
187
187
  flex-direction: column;
188
188
  align-items: center;
189
189
  justify-content: center;
190
190
  }
191
191
  @media (min-width: 768px) {
192
- .horizontal {
192
+ .XNewsletter_horizontal3 {
193
193
  flex-direction: row;
194
194
  }
195
195
  }
196
- .vertical {
196
+ .XNewsletter_vertical3 {
197
197
  flex-direction: column;
198
198
  align-items: flex-start;
199
199
  width: 100%;
200
200
  max-width: 24rem;
201
201
  margin: 0 auto;
202
202
  }
203
- .title {
203
+ .XNewsletter_title3 {
204
204
  font-size: 0.875rem;
205
205
  white-space: nowrap;
206
206
  font-weight: 500;
207
207
  color: var(--nws-text);
208
208
  }
209
- .input {
209
+ .XNewsletter_input3 {
210
210
  width: 100%;
211
211
  padding: 0.5rem 1rem;
212
212
  font-size: 0.875rem;
@@ -219,30 +219,30 @@
219
219
  caret-color: var(--nws-accent);
220
220
  font-family: inherit;
221
221
  }
222
- .horizontal .input {
222
+ .XNewsletter_horizontal3 .XNewsletter_input3 {
223
223
  }
224
224
  @media (min-width: 768px) {
225
- .horizontal .input {
225
+ .XNewsletter_horizontal3 .XNewsletter_input3 {
226
226
  width: 16rem;
227
227
  }
228
228
  }
229
- .input:focus {
229
+ .XNewsletter_input3:focus {
230
230
  border-color: var(--nws-accent);
231
231
  }
232
- .actions {
232
+ .XNewsletter_actions3 {
233
233
  display: flex;
234
234
  gap: 1rem;
235
235
  }
236
- .actionsHorizontal {
236
+ .XNewsletter_actionsHorizontal3 {
237
237
  flex-direction: row;
238
238
  align-items: center;
239
239
  }
240
- .actionsVertical {
240
+ .XNewsletter_actionsVertical3 {
241
241
  flex-direction: column;
242
242
  align-items: flex-start;
243
243
  width: 100%;
244
244
  }
245
- .checkboxLabel {
245
+ .XNewsletter_checkboxLabel3 {
246
246
  display: flex;
247
247
  align-items: center;
248
248
  gap: 0.5rem;
@@ -251,25 +251,25 @@
251
251
  cursor: pointer;
252
252
  color: var(--nws-text);
253
253
  }
254
- .checkboxLabel span {
254
+ .XNewsletter_checkboxLabel3 span {
255
255
  opacity: 0.7;
256
256
  }
257
- .checkbox {
257
+ .XNewsletter_checkbox3 {
258
258
  height: 0.875rem;
259
259
  width: 0.875rem;
260
260
  border-radius: 0.125rem;
261
261
  cursor: pointer;
262
262
  accent-color: var(--nws-accent);
263
263
  }
264
- .termsLink {
264
+ .XNewsletter_termsLink3 {
265
265
  text-decoration: underline;
266
266
  color: var(--nws-accent);
267
267
  transition: opacity 0.2s ease;
268
268
  }
269
- .termsLink:hover {
269
+ .XNewsletter_termsLink3:hover {
270
270
  opacity: 1;
271
271
  }
272
- .button {
272
+ .XNewsletter_button3 {
273
273
  padding: 0.5rem 1rem;
274
274
  font-size: 0.875rem;
275
275
  border-radius: 0.5rem;
@@ -280,28 +280,28 @@
280
280
  white-space: nowrap;
281
281
  cursor: pointer;
282
282
  }
283
- .button:hover:not(:disabled) {
283
+ .XNewsletter_button3:hover:not(:disabled) {
284
284
  background-color: var(--nws-accent);
285
285
  color: var(--nws-btn-text);
286
286
  }
287
- .button:disabled,
288
- .input:disabled,
289
- .checkbox:disabled {
287
+ .XNewsletter_button3:disabled,
288
+ .XNewsletter_input3:disabled,
289
+ .XNewsletter_checkbox3:disabled {
290
290
  opacity: 0.5;
291
291
  cursor: not-allowed;
292
292
  }
293
- .actionsVertical .button {
293
+ .XNewsletter_actionsVertical3 .XNewsletter_button3 {
294
294
  width: 100%;
295
295
  }
296
- .message {
296
+ .XNewsletter_message3 {
297
297
  margin-top: 0.75rem;
298
298
  font-size: 0.75rem;
299
299
  color: var(--nws-accent);
300
300
  }
301
- .messageHorizontal {
301
+ .XNewsletter_messageHorizontal3 {
302
302
  text-align: center;
303
303
  }
304
- .messageVertical {
304
+ .XNewsletter_messageVertical3 {
305
305
  text-align: left;
306
306
  }
307
- /*# sourceMappingURL=index.css.map */
307
+ /*# sourceMappingURL=index.css.map */