@oksigenia/share 0.2.2 → 0.2.4

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/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @oksigenia/share
2
2
 
3
+ ## 0.2.4
4
+
5
+ ### Patch Changes
6
+
7
+ - b810d7f: Accessibility + hardening: the Nostr button now exposes a network-specific aria-label ("Share on Nostr") instead of the generic "Copy link to clipboard", so screen readers announce it consistently with the other networks (the copy action is still announced via the aria-live "Copied" message). Also adds `noopener` to the popup share strategy (X, LinkedIn, Reddit) so the share target can't reach back into the opener page — the same hardening the tab strategy already had.
8
+
9
+ ## 0.2.3
10
+
11
+ ### Patch Changes
12
+
13
+ - 41a34d0: Fix `hide-desktop` / `hide-mobile` being silently dropped: `buildShareHtml` never passed them through, so the per-viewport visibility classes were never emitted. Also fix share popups (X, LinkedIn, Reddit) opening off-center: top/left are screen coordinates, now computed from `screenX`/`outerWidth` instead of viewport size.
14
+
3
15
  ## 0.2.2
4
16
 
5
17
  ### Patch Changes
package/dist/index.d.ts CHANGED
@@ -41,7 +41,8 @@ interface Translation {
41
41
  shareOn: (network: string) => string;
42
42
  /** aria-label del botón de email. */
43
43
  shareEmail: string;
44
- /** aria-label del botón Nostr (copy-only). */
44
+ /** @deprecated Ya no se usa: el botón Nostr sigue el patrón "Share on {network}".
45
+ * Se mantiene la clave para no romper el tipo `Translation` exportado. */
45
46
  copyLink: string;
46
47
  /** Anunciado por aria-live cuando se copia algo. */
47
48
  copied: string;
package/dist/index.js CHANGED
@@ -156,7 +156,7 @@ function prepareButtons(opts, t) {
156
156
  for (const id of list) {
157
157
  const def = NETWORKS[id];
158
158
  if (!def) continue;
159
- const label = id === "em" ? t.shareEmail : id === "no" ? t.copyLink : t.shareOn(def.label);
159
+ const label = id === "em" ? t.shareEmail : t.shareOn(def.label);
160
160
  const link = buildShareLink({
161
161
  network: id,
162
162
  title: opts.title,
@@ -188,6 +188,8 @@ function buildShareHtml(opts = {}) {
188
188
  locale: opts.locale ?? (typeof navigator !== "undefined" ? navigator.language : "en"),
189
189
  showLabel: opts.showLabel ?? true,
190
190
  networks: opts.networks,
191
+ hideDesktop: opts.hideDesktop,
192
+ hideMobile: opts.hideMobile,
191
193
  xHandle: opts.xHandle,
192
194
  nostrHashtag: opts.nostrHashtag
193
195
  };
@@ -234,9 +236,9 @@ function openShare(btn, t) {
234
236
  if (type === "popup") {
235
237
  const w = 600;
236
238
  const h = 400;
237
- const left = (window.innerWidth - w) / 2;
238
- const top = (window.innerHeight - h) / 2;
239
- window.open(link, "oksigenia_share", `width=${w},height=${h},top=${top},left=${left},scrollbars=no`);
239
+ const left = window.screenX + (window.outerWidth - w) / 2;
240
+ const top = window.screenY + (window.outerHeight - h) / 2;
241
+ window.open(link, "oksigenia_share", `noopener,width=${w},height=${h},top=${top},left=${left},scrollbars=no`);
240
242
  return;
241
243
  }
242
244
  if (type === "tab") {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/networks.ts","../src/build-link.ts","../src/translations.ts","../src/render.ts","../src/styles.ts","../src/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["// SVGs y metadatos de las redes. Heredado del plugin WordPress\n// oksigenia-share v7.2 (https://wordpress.org/plugins/oksigenia-share/).\n\nexport type NetworkId =\n | 'x'\n | 'bs'\n | 'th'\n | 'wa'\n | 'tg'\n | 'li'\n | 'rd'\n | 'no'\n | 'em';\n\nexport type OpenStrategy = 'popup' | 'tab' | 'copy' | 'email';\n\nexport interface NetworkDef {\n readonly id: NetworkId;\n readonly label: string;\n readonly color: string;\n readonly open: OpenStrategy;\n readonly svg: string;\n}\n\nconst X_SVG =\n '<svg viewBox=\"0 0 512 512\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M389.2 48h70.6L305.6 224.2 487 464H345L233.7 318.6 106.5 464H35.8L200.7 275.5 26.8 48H172.4L272.9 180.9 389.2 48zM364.4 421.8h39.1L151.1 88h-42L364.4 421.8z\"/></svg>';\nconst BS_SVG =\n '<svg viewBox=\"0 0 600 530\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M135.7 44.4C202.6 94.7 274.6 196.7 301 251.4c26.4-54.7 98.4-156.7 165.3-207C512.7 9.5 587 -16.3 587 67.4c0 16.7-9.6 140.5-15.2 160.6-19.6 70-91 87.8-154.4 77 110.9 18.9 139.1 81.4 78.2 144-115.7 119-166.4-29.8-179.4-67.9-2.4-7-3.5-10.3-3.5-7.5 0 -2.8-1.1 .5-3.5 7.5-13 38.1-63.7 186.9-179.4 67.9-60.9-62.6-32.7-125.1 78.2-144-63.5 10.8-134.8-7.1-154.4-77C48 207.8 38.4 84.1 38.4 67.4 38.4-16.3 112.7 9.5 135.7 44.4z\"/></svg>';\nconst TH_SVG =\n '<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M12.186 24h-.007c-3.581-.024-6.334-1.205-8.184-3.509C2.35 18.44 1.5 15.586 1.472 12.01v-.017c.03-3.579.879-6.43 2.525-8.482C5.845 1.205 8.6.024 12.18 0h.014c2.746.02 5.043.725 6.826 2.098 1.677 1.29 2.858 3.13 3.509 5.467l-2.04.569c-1.104-3.96-3.898-5.984-8.304-6.015-2.91.022-5.11.936-6.54 2.717C4.307 6.504 3.616 8.914 3.589 12c.027 3.086.718 5.496 2.057 7.164 1.43 1.783 3.631 2.698 6.54 2.717 2.623-.02 4.358-.631 5.8-2.045 1.647-1.613 1.618-3.593 1.09-4.798-.31-.71-.873-1.3-1.634-1.75-.192 1.352-.622 2.446-1.284 3.272-.886 1.102-2.14 1.704-3.73 1.79-1.202.065-2.361-.218-3.259-.801-1.063-.689-1.685-1.74-1.752-2.964-.065-1.19.408-2.285 1.33-3.082.88-.76 2.119-1.207 3.583-1.291a13.853 13.853 0 0 1 3.02.142c-.126-.742-.375-1.332-.749-1.757-.513-.586-1.308-.883-2.359-.89h-.029c-.844 0-1.992.232-2.721 1.32L7.734 7.847c.98-1.454 2.568-2.256 4.478-2.256h.044c3.194.02 5.097 1.975 5.287 5.388.108.046.216.094.323.144 1.49.7 2.58 1.761 3.154 3.07.797 1.82.871 4.79-1.548 7.158-1.85 1.81-4.094 2.628-7.277 2.65zm1.003-11.69c-.242 0-.487.007-.739.021-1.836.103-2.98.946-2.916 2.143.067 1.256 1.452 1.839 2.784 1.767 1.224-.065 2.818-.543 3.086-3.71a10.5 10.5 0 0 0-2.215-.221z\"/></svg>';\nconst WA_SVG =\n '<svg viewBox=\"0 0 448 512\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M380.9 97.1C339 55.1 283.2 32 223.9 32c-122.4 0-222 99.6-222 222 0 39.1 10.2 77.3 29.6 111L0 480l117.7-30.9c32.4 17.7 68.9 27 106.1 27h.1c122.3 0 224.1-99.6 224.1-222 0-59.3-25.2-115-67.1-157zm-157 341.6c-33.2 0-65.7-8.9-94-25.7l-6.7-4-69.8 18.3L72 359.2l-4.4-7c-18.5-29.4-28.2-63.3-28.2-98.2 0-101.7 82.8-184.5 184.6-184.5 49.3 0 95.6 19.2 130.4 54.1 34.8 34.9 56.2 81.2 56.1 130.5 0 101.8-84.9 184.6-186.6 184.6zm101.2-138.2c-5.5-2.8-32.8-16.2-37.9-18-5.1-1.9-8.8-2.8-12.5 2.8-3.7 5.6-14.3 18-17.6 21.8-3.2 3.7-6.5 4.2-12 1.4-5.5-2.8-23.4-8.6-44.6-27.5-16.5-14.7-27.6-32.8-30.8-38.4-3.2-5.6-.3-8.6 2.5-11.4 2.5-2.5 5.5-6.5 8.3-9.7 2.8-3.2 3.7-5.5 5.5-9.2 1.9-3.7.9-6.9-.5-9.7-1.4-2.8-12.5-30.1-17.1-41.2-4.5-10.8-9.1-9.3-12.5-9.5-3.2-.2-6.9-.2-10.6-.2-3.7 0-9.7 1.4-14.8 6.9-5.1 5.6-19.4 19-19.4 46.3 0 27.3 19.9 53.7 22.6 57.4 2.8 3.7 39.1 59.7 94.8 83.8 13.2 5.8 23.5 9.2 31.5 11.8 13.3 4.2 25.4 3.6 35 2.2 10.7-1.6 32.8-13.4 37.4-26.4 4.6-13 4.6-24.1 3.2-26.4-1.3-2.5-5-3.9-10.5-6.6z\"/></svg>';\nconst TG_SVG =\n '<svg viewBox=\"0 0 448 512\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M446.7 98.6l-67.6 318.8c-5.1 22.5-18.4 28.1-37.3 17.5l-103-75.9-49.7 47.8c-5.5 5.5-10.1 10.1-20.7 10.1l7.4-104.9 190.9-172.5c8.3-7.4-1.8-11.5-12.9-4.1L117.8 284 16.2 252.2c-22.1-6.9-22.5-22.1 4.6-32.7L418.2 66.4c18.4-6.9 34.5 4.1 28.5 32.2z\"/></svg>';\nconst LI_SVG =\n '<svg viewBox=\"0 0 448 512\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M100.28 448H7.4V148.9h92.88zM53.79 108.1C24.09 108.1 0 83.5 0 53.8a53.79 53.79 0 0 1 107.58 0c0 29.7-24.1 54.3-53.79 54.3zM447.9 448h-92.68V302.4c0-34.7-.7-79.2-48.29-79.2-48.29 0-55.69 37.7-55.69 76.7V448h-92.78V148.9h89.08v40.8h1.3c12.4-23.5 42.69-48.3 87.88-48.3 94 0 111.28 61.9 111.28 142.3V448z\"/></svg>';\nconst RD_SVG =\n '<svg viewBox=\"0 0 512 512\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M201.5 305.5c-13.8 0-24.9-11.1-24.9-24.6 0-13.8 11.1-24.9 24.9-24.9 13.6 0 24.6 11.1 24.6 24.9 0 13.6-11.1 24.6-24.6 24.6zm129 41.2c-12.3 12.3-37.8 13.4-45.3 13.4-7.5 0-32.7-1.4-45-13.4-1.8-1.8-1.8-4.8 0-6.9 1.8-1.8 4.8-1.8 6.6 0 7.8 7.8 24.3 10.5 38.4 10.5s30.9-2.7 38.7-10.5c1.8-1.8 4.8-1.8 6.6 0 1.8 2.1 1.8 5.1 0 6.9zm-12.3-41.2c0-13.8 11.1-24.9 24.9-24.9 13.6 0 24.6 11.1 24.6 24.9 0 13.6-11.1 24.6-24.6 24.6-13.8 0-24.9-11.1-24.9-24.6zM504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-132.3-41.2c-9.4 0-17.7 3.9-23.8 9.9-22.8-15.6-52.8-25.8-86.1-27l17.4-78.9 55.5 12.3c0 13.6 11.1 24.6 24.6 24.6 13.8 0 24.9-11.4 24.9-24.9s-11.1-24.9-24.9-24.9c-9.6 0-17.7 5.7-21.6 13.5l-61.5-13.5c-3-.9-6 1.2-6.6 4.2l-19.2 86.7c-32.7 1.5-62.7 11.7-85.5 27.3-6-6.3-14.7-9.9-23.7-9.9-34.8 0-46.2 46.8-14.4 62.7-1.2 5.1-1.8 10.8-1.8 16.2 0 49.5 56.1 89.7 125.4 89.7 69.6 0 125.7-40.2 125.7-89.7 0-5.4-.6-11.4-2.1-16.5 31.5-15.9 19.8-62.4-14.4-62.4z\"/></svg>';\nconst NO_SVG =\n '<svg viewBox=\"0 0 170.66667 170\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M 80.014749,0.78606659 C 73.052769,1.9302826 66.167099,2.3642936 59.348089,4.5268096 38.835519,11.031957 21.050593,25.529048 10.848085,44.52681 -6.8624293,77.505 -0.92508032,121.67898 27.348086,147.13792 c 11.539173,10.3906 24.998793,17.01823 40.000003,20.62963 9.26968,2.23159 19.24599,2.5862 28.66667,1.27777 C 139.11925,163.05859 171.85692,124.19929 169.32958,80.52681 167.31241,45.669937 143.27583,13.848984 109.34809,4.2675526 100.31238,1.7158046 89.426889,-0.76084941 80.014749,0.78606659 M 136.01476,34.52681 c -2.37396,0 -11.65111,-0.914032 -11.03704,3.333333 0.44515,3.078919 4.97786,5.419108 7.01853,7.388886 2.78243,2.685771 4.44989,6.742004 4.6111,10.611114 0.43316,10.395773 -8.18644,14.669088 -14.53704,20.81482 -4.11595,3.983174 -1.16762,10.854736 -6.07406,15.018514 -5.28385,4.484059 -13.33279,3.273844 -19.314831,6.111114 -4.69327,2.226009 -7.84703,7.913129 -10.66667,12.055549 l 14.666681,-4.44443 7.33333,-1.22223 5.98149,6.33333 2.01851,5.33333 c -2.72032,-0.0572 -6.29832,-0.90982 -8.61111,-2.42592 -1.43022,-0.93754 -2.13911,-2.61031 -4.05556,-2.55556 -1.73865,0.0497 -3.687801,1.1301 -5.333331,1.64815 -4.89415,1.54075 -9.77338,3.60264 -14.66667,5.01851 -4.97774,1.44033 -6.14184,-3.22559 -4.5,-7.01851 0.58509,-1.35166 1.3007,-2.70345 2,-4 1.22817,-2.27712 2.8155,-4.29175 3.83333,-6.666667 -14.44897,7.042367 -23.21779,20.075037 -32.57408,32.666667 -2.69666,3.62915 -5.83349,7.00277 -8.44444,10.66667 -0.74469,1.045 -1.43956,3.39244 -3.01852,3.44444 -1.48153,0.0488 -1.89431,-1.62287 -1.88889,-2.77778 0.012,-2.56211 1.55286,-4.83939 1.87038,-7.33333 0.16984,-1.33409 -0.3317,-3.17503 0.53703,-4.33333 1.46427,-1.95236 4.81923,-1.69841 6.5926,-3.68518 4.11706,-4.61253 7.99675,-10.65312 11.12963,-15.98149 1.00019,-1.70113 1.31074,-3.7756 2.62962,-5.27777 4.15881,-4.73677 10.29882,-7.15127 13.83334,-12.72223 -3.78599,-0.77946 -7.81198,-1.877889 -11.33334,-3.5 -2.16788,-0.998637 -4.28318,-2.695353 -6.66666,-3.09259 -4.92365,-0.820608 -7.70844,2.301147 -12,3.59259 -3.55609,1.070119 -9.1464,-2.835714 -11,-5.666667 -2.9074,-4.440389 1.59973,-11.14448 5.66666,-13.055562 7.85432,-3.690796 17.10949,-1.957876 25.33334,-4.185181 8.80831,-2.385589 15.88491,-8.429891 25.33333,-9.370371 6.13412,-0.610576 12.248691,0.007 18.000011,2.203705 5.40278,2.063568 12.35279,5.71113 18,2.462972 3.05718,-1.758433 5.38171,-6.552399 4.35184,-10.055563 -1.22555,-4.168813 -5.35998,-6.611246 -8.35184,-9.388885 -3.4549,-3.20752 -5.13367,-7.241526 -4.61112,-11.944448 0.93488,-8.413696 8.07782,-5.219116 12.61112,-2.333333 2.37224,1.510111 4.74974,1.248728 5.33333,4.333333 z\"/></svg>';\nconst EM_SVG =\n '<svg viewBox=\"0 0 512 512\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M48 64C21.5 64 0 85.5 0 112c0 15.1 7.1 29.3 19.2 38.4L236.8 313.6c11.4 8.5 27 8.5 38.4 0L492.8 150.4c12.1-9.1 19.2-23.3 19.2-38.4c0-26.5-21.5-48-48-48H48zM0 176V384c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V176L294.4 339.2c-22.8 17.1-54 17.1-76.8 0L0 176z\"/></svg>';\n\nexport const NETWORKS: Readonly<Record<NetworkId, NetworkDef>> = {\n x: { id: 'x', label: 'X (Twitter)', color: '#000000', open: 'popup', svg: X_SVG },\n bs: { id: 'bs', label: 'Bluesky', color: '#0285FF', open: 'tab', svg: BS_SVG },\n th: { id: 'th', label: 'Threads', color: '#000000', open: 'tab', svg: TH_SVG },\n wa: { id: 'wa', label: 'WhatsApp', color: '#25D366', open: 'tab', svg: WA_SVG },\n tg: { id: 'tg', label: 'Telegram', color: '#0088cc', open: 'tab', svg: TG_SVG },\n li: { id: 'li', label: 'LinkedIn', color: '#0077b5', open: 'popup', svg: LI_SVG },\n rd: { id: 'rd', label: 'Reddit', color: '#FF4500', open: 'popup', svg: RD_SVG },\n no: { id: 'no', label: 'Nostr', color: '#8e44ad', open: 'copy', svg: NO_SVG },\n em: { id: 'em', label: 'Email', color: '#666666', open: 'email', svg: EM_SVG },\n} as const;\n\nexport const ALL_NETWORKS: readonly NetworkId[] = [\n 'x', 'bs', 'th', 'wa', 'tg', 'li', 'rd', 'no', 'em',\n] as const;\n","import type { NetworkId } from './networks.js';\n\nexport interface BuildLinkInput {\n network: NetworkId;\n title: string;\n url: string;\n /** Handle X opcional (sin @). Si está, se añade \"{title} by @{handle}\" al tweet. */\n xHandle?: string;\n /** Conector \"by\" según locale (i18n). Default \"by\". */\n byWord?: string;\n}\n\n/**\n * Construye la URL del share-intent de cada red. No abre nada, solo devuelve\n * la cadena. Para Nostr (copy-only) devuelve cadena vacía — el contenido\n * que se copia se construye con `buildNostrPayload()`.\n */\nexport function buildShareLink(input: BuildLinkInput): string {\n const { network, title, url, xHandle, byWord = 'by' } = input;\n const txt = encodeURIComponent(title);\n const urlEnc = encodeURIComponent(url);\n\n const xText = xHandle\n ? encodeURIComponent(`${title} ${byWord} @${xHandle.replace(/^@/, '')}`)\n : txt;\n\n switch (network) {\n case 'x':\n return `https://twitter.com/intent/tweet?text=${xText}&url=${urlEnc}`;\n case 'bs':\n return `https://bsky.app/intent/compose?text=${encodeURIComponent(`${title} ${url}`)}`;\n case 'th':\n return `https://www.threads.net/intent/post?text=${encodeURIComponent(`${title} ${url}`)}`;\n case 'wa':\n return `https://api.whatsapp.com/send?text=${txt}%20${urlEnc}`;\n case 'tg':\n return `https://t.me/share/url?url=${urlEnc}&text=${txt}`;\n case 'li':\n return `https://www.linkedin.com/sharing/share-offsite/?url=${urlEnc}`;\n case 'rd':\n return `https://www.reddit.com/submit?url=${urlEnc}&title=${txt}`;\n case 'em':\n return `mailto:?subject=${txt}&body=${urlEnc}`;\n case 'no':\n return '';\n }\n}\n\n/**\n * Payload Nostr: el botón Nostr copia esto al portapapeles porque no hay\n * un share-intent oficial. Hashtag configurable.\n */\nexport function buildNostrPayload(\n title: string,\n url: string,\n hashtag = 'oksigenia',\n): string {\n return `${title}\\n${url}\\n#${hashtag}`;\n}\n","// Heredado del plugin WP oksigenia-share v7.2.\n// Diccionario in-source para evitar fetch en runtime.\n\nexport type LocaleCode = 'en' | 'es' | 'it' | 'nl' | 'de' | 'pt' | 'gn' | 'sv';\n\nexport interface Translation {\n /** Label \"SHARE\" en caps. */\n share: string;\n /** Conector \"by\" usado en el tweet \"{title} by @user\". */\n by: string;\n /** aria-label \"Share on %s\". %s se reemplaza con el nombre de red. */\n shareOn: (network: string) => string;\n /** aria-label del botón de email. */\n shareEmail: string;\n /** aria-label del botón Nostr (copy-only). */\n copyLink: string;\n /** Anunciado por aria-live cuando se copia algo. */\n copied: string;\n /** Prompt fallback cuando clipboard no disponible. */\n copyPrompt: string;\n}\n\nconst DICT: Readonly<Record<LocaleCode, Translation>> = {\n en: {\n share: 'SHARE', by: 'by',\n shareOn: (n) => `Share on ${n}`,\n shareEmail: 'Share by email',\n copyLink: 'Copy link to clipboard',\n copied: 'Copied to clipboard',\n copyPrompt: 'Copy this:',\n },\n es: {\n share: 'COMPARTIR', by: 'por',\n shareOn: (n) => `Compartir en ${n}`,\n shareEmail: 'Compartir por email',\n copyLink: 'Copiar enlace al portapapeles',\n copied: 'Copiado al portapapeles',\n copyPrompt: 'Copia esto:',\n },\n it: {\n share: 'CONDIVIDI', by: 'da',\n shareOn: (n) => `Condividi su ${n}`,\n shareEmail: 'Condividi via email',\n copyLink: 'Copia il link negli appunti',\n copied: 'Copiato negli appunti',\n copyPrompt: 'Copia questo:',\n },\n nl: {\n share: 'DELEN', by: 'door',\n shareOn: (n) => `Deel op ${n}`,\n shareEmail: 'Per e-mail delen',\n copyLink: 'Link kopiëren naar klembord',\n copied: 'Gekopieerd naar klembord',\n copyPrompt: 'Kopieer dit:',\n },\n de: {\n share: 'TEILEN', by: 'von',\n shareOn: (n) => `Auf ${n} teilen`,\n shareEmail: 'Per E-Mail teilen',\n copyLink: 'Link in die Zwischenablage kopieren',\n copied: 'In die Zwischenablage kopiert',\n copyPrompt: 'Dies kopieren:',\n },\n pt: {\n share: 'PARTILHAR', by: 'por',\n shareOn: (n) => `Partilhar no ${n}`,\n shareEmail: 'Partilhar por email',\n copyLink: 'Copiar ligação para a área de transferência',\n copied: 'Copiado para a área de transferência',\n copyPrompt: 'Copiar isto:',\n },\n gn: {\n share: 'MOASÃI', by: 'por',\n shareOn: (n) => `Emoasãi ${n}-pe`,\n shareEmail: 'Emoasãi email rupive',\n copyLink: 'Ekopia link portapapeles-pe',\n copied: 'Oñekopia portapapeles-pe',\n copyPrompt: 'Ekopia kóva:',\n },\n sv: {\n share: 'DELA', by: 'av',\n shareOn: (n) => `Dela på ${n}`,\n shareEmail: 'Dela via e-post',\n copyLink: 'Kopiera länk till urklipp',\n copied: 'Kopierat till urklipp',\n copyPrompt: 'Kopiera detta:',\n },\n};\n\n/**\n * Devuelve la traducción para un locale. Acepta variantes regionales:\n * `es-PY`, `es-ES`, `pt-BR` → todas caen al código base si existe.\n * Fallback final: `en`.\n */\nexport function getTranslation(locale: string): Translation {\n const base = locale.toLowerCase().split(/[-_]/)[0] as LocaleCode;\n return DICT[base] ?? DICT.en;\n}\n\nexport function supportedLocales(): readonly LocaleCode[] {\n return Object.keys(DICT) as LocaleCode[];\n}\n","import {\n ALL_NETWORKS,\n NETWORKS,\n type NetworkId,\n type OpenStrategy,\n} from './networks.js';\nimport { buildShareLink, buildNostrPayload } from './build-link.js';\nimport { getTranslation, type LocaleCode, type Translation } from './translations.js';\n\nexport interface ShareOptions {\n /** URL absoluta a compartir. Si se omite, `location.href` al render. */\n url?: string;\n /** Título o texto del share. Si se omite, `document.title`. */\n title?: string;\n /** Locale (es, en, gn, …). Default: navegador, fallback en. */\n locale?: LocaleCode | string;\n /** Subconjunto/orden de redes. Default: las 9 en orden canónico. */\n networks?: readonly NetworkId[];\n /** Redes a OCULTAR en viewport ≥769px. */\n hideDesktop?: readonly NetworkId[];\n /** Redes a OCULTAR en viewport ≤768px. */\n hideMobile?: readonly NetworkId[];\n /** Handle de X opcional (con o sin @). */\n xHandle?: string;\n /** Hashtag opcional para el payload Nostr. Default \"oksigenia\". */\n nostrHashtag?: string;\n /** Mostrar el texto \"SHARE\" a la izquierda. Default true. */\n showLabel?: boolean;\n}\n\ninterface PreparedButton {\n id: NetworkId;\n ariaLabel: string;\n type: OpenStrategy;\n link: string;\n copyPayload?: string;\n bgColor: string;\n svg: string;\n hideDesktop: boolean;\n hideMobile: boolean;\n}\n\nfunction prepareButtons(opts: Required<Pick<ShareOptions, 'title' | 'url'>> & ShareOptions, t: Translation): PreparedButton[] {\n const list = opts.networks ?? ALL_NETWORKS;\n const hideDesk = new Set<NetworkId>(opts.hideDesktop ?? []);\n const hideMob = new Set<NetworkId>(opts.hideMobile ?? []);\n const out: PreparedButton[] = [];\n for (const id of list) {\n const def = NETWORKS[id];\n if (!def) continue;\n const label = id === 'em'\n ? t.shareEmail\n : id === 'no'\n ? t.copyLink\n : t.shareOn(def.label);\n const link = buildShareLink({\n network: id,\n title: opts.title,\n url: opts.url,\n xHandle: opts.xHandle,\n byWord: t.by,\n });\n const button: PreparedButton = {\n id,\n ariaLabel: label,\n type: def.open,\n link,\n bgColor: def.color,\n svg: def.svg,\n hideDesktop: hideDesk.has(id),\n hideMobile: hideMob.has(id),\n };\n if (id === 'no') {\n button.copyPayload = buildNostrPayload(opts.title, opts.url, opts.nostrHashtag);\n }\n out.push(button);\n }\n return out;\n}\n\n/**\n * Construye el markup HTML del panel de botones. NO lo monta en el DOM;\n * el consumidor decide dónde inyectarlo y si quiere shadow DOM o no.\n */\nexport function buildShareHtml(opts: ShareOptions = {}): string {\n const resolved: Required<Pick<ShareOptions, 'title' | 'url' | 'locale' | 'showLabel'>> & ShareOptions = {\n title: opts.title ?? (typeof document !== 'undefined' ? document.title : ''),\n url: opts.url ?? (typeof location !== 'undefined' ? location.href : ''),\n locale: opts.locale ?? (typeof navigator !== 'undefined' ? navigator.language : 'en'),\n showLabel: opts.showLabel ?? true,\n networks: opts.networks,\n xHandle: opts.xHandle,\n nostrHashtag: opts.nostrHashtag,\n };\n const t = getTranslation(resolved.locale);\n const buttons = prepareButtons(resolved, t);\n\n const labelHtml = resolved.showLabel\n ? `<span class=\"oksigenia-label\" aria-hidden=\"true\">${escapeHtml(t.share)}</span>`\n : '';\n\n const buttonsHtml = buttons\n .map((b) => {\n const dataLink = b.link ? ` data-link=\"${escapeAttr(b.link)}\"` : '';\n const dataCopy = b.copyPayload ? ` data-copy=\"${escapeAttr(b.copyPayload)}\"` : '';\n const visClass = `${b.hideDesktop ? ' hide-desktop' : ''}${b.hideMobile ? ' hide-mobile' : ''}`;\n return `<button type=\"button\" class=\"oksigenia-btn o-${b.id}${visClass}\" style=\"background:${b.bgColor}\" data-type=\"${b.type}\"${dataLink}${dataCopy} aria-label=\"${escapeAttr(b.ariaLabel)}\">${b.svg}<span class=\"oksigenia-sr-only\" aria-live=\"polite\"></span></button>`;\n })\n .join('');\n\n // role=\"group\" + aria-label cumplen recomendaciones de A11Y / W3C.\n return `<div class=\"oksigenia-panel\" role=\"group\" aria-label=\"${escapeAttr(t.share)}\">${labelHtml}${buttonsHtml}</div>`;\n}\n\nfunction escapeHtml(s: string): string {\n return s.replace(/[&<>\"]/g, (c) => ({\n '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;',\n }[c] ?? c));\n}\nfunction escapeAttr(s: string): string {\n return escapeHtml(s).replace(/'/g, '&#39;');\n}\n\n/**\n * Engancha los listeners de click a los botones renderizados dentro de\n * `root`. Devuelve un dispose para limpiar.\n */\nexport function bindShareEvents(root: ParentNode, opts: ShareOptions = {}): () => void {\n const locale = opts.locale ?? (typeof navigator !== 'undefined' ? navigator.language : 'en');\n const t = getTranslation(locale);\n const buttons = Array.from(root.querySelectorAll<HTMLButtonElement>('.oksigenia-btn'));\n const handler = (e: Event) => {\n e.preventDefault();\n const btn = e.currentTarget as HTMLButtonElement;\n openShare(btn, t);\n };\n for (const b of buttons) b.addEventListener('click', handler);\n return () => {\n for (const b of buttons) b.removeEventListener('click', handler);\n };\n}\n\nfunction openShare(btn: HTMLButtonElement, t: Translation): void {\n const link = btn.getAttribute('data-link') ?? '';\n const type = (btn.getAttribute('data-type') ?? 'tab') as OpenStrategy;\n const live = btn.querySelector<HTMLElement>('.oksigenia-sr-only');\n\n if (type === 'popup') {\n const w = 600;\n const h = 400;\n const left = (window.innerWidth - w) / 2;\n const top = (window.innerHeight - h) / 2;\n window.open(link, 'oksigenia_share', `width=${w},height=${h},top=${top},left=${left},scrollbars=no`);\n return;\n }\n if (type === 'tab') {\n window.open(link, '_blank', 'noopener');\n return;\n }\n if (type === 'email') {\n window.location.href = link;\n return;\n }\n if (type === 'copy') {\n const text = btn.getAttribute('data-copy') ?? '';\n const done = () => {\n btn.classList.add('copied');\n if (live) live.textContent = t.copied;\n window.setTimeout(() => {\n btn.classList.remove('copied');\n if (live) live.textContent = '';\n }, 2000);\n };\n if (navigator.clipboard?.writeText) {\n navigator.clipboard.writeText(text).then(done).catch(() => {\n window.prompt(t.copyPrompt, text);\n });\n } else {\n window.prompt(t.copyPrompt, text);\n }\n }\n}\n","// CSS del panel de botones. Se inyecta inline en el Shadow DOM\n// (cuando se usa el web component) o se importa como `dist/styles.css`\n// si se usa el helper imperativo en light DOM.\n\nexport const SHARE_CSS = `\n:host { display: block; }\n.oksigenia-panel {\n display: flex;\n align-items: center;\n gap: 10px;\n margin: 30px 0;\n padding: 10px 18px;\n background: rgba(0,0,0,0.03);\n border-radius: 60px;\n width: fit-content;\n flex-wrap: wrap;\n font-family: system-ui, -apple-system, \"Segoe UI\", Roboto, sans-serif;\n}\n.oksigenia-label {\n font-weight: 800;\n font-size: 11px;\n margin-right: 12px;\n text-transform: uppercase;\n color: currentColor;\n letter-spacing: 1.5px;\n}\n.oksigenia-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 44px;\n height: 44px;\n border-radius: 50%;\n border: none;\n cursor: pointer;\n transition: transform .2s, filter .2s, box-shadow .2s;\n box-shadow: 0 3px 6px rgba(0,0,0,0.1);\n position: relative;\n text-decoration: none !important;\n padding: 0;\n overflow: visible;\n}\n.oksigenia-btn:hover {\n transform: translateY(-3px);\n filter: brightness(1.1);\n box-shadow: 0 5px 12px rgba(0,0,0,0.2);\n}\n.oksigenia-btn:focus-visible {\n outline: 2px solid currentColor;\n outline-offset: 3px;\n}\n.oksigenia-btn svg {\n width: 22px;\n height: 22px;\n fill: #fff;\n pointer-events: none;\n}\n.oksigenia-sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0,0,0,0);\n white-space: nowrap;\n border: 0;\n}\n.o-no.copied { background: #00a884 !important; }\n@media (min-width: 769px) { .hide-desktop { display: none !important; } }\n@media (max-width: 768px) { .hide-mobile { display: none !important; } }\n@media (max-width: 480px) {\n .oksigenia-panel { padding: 8px 12px; gap: 8px; justify-content: center; }\n .oksigenia-btn { width: 38px; height: 38px; }\n .oksigenia-btn svg { width: 18px; height: 18px; }\n .oksigenia-label { flex-basis: 100%; width: 100%; margin: 0 0 6px; text-align: center; }\n}\n@media (prefers-reduced-motion: reduce) {\n .oksigenia-btn { transition: none; }\n .oksigenia-btn:hover { transform: none; }\n}\n`;\n","// Punto de entrada principal · API imperativa + tipos.\n// Para el web component <oksigenia-share>, importar\n// '@oksigenia/share/web-component'.\n\nexport {\n NETWORKS,\n ALL_NETWORKS,\n type NetworkId,\n type OpenStrategy,\n type NetworkDef,\n} from './networks.js';\n\nexport {\n buildShareLink,\n buildNostrPayload,\n type BuildLinkInput,\n} from './build-link.js';\n\nexport {\n getTranslation,\n supportedLocales,\n type LocaleCode,\n type Translation,\n} from './translations.js';\n\nexport {\n buildShareHtml,\n bindShareEvents,\n type ShareOptions,\n} from './render.js';\n\nexport { SHARE_CSS } from './styles.js';\n\nimport { buildShareHtml, bindShareEvents, type ShareOptions } from './render.js';\nimport { SHARE_CSS } from './styles.js';\n\nexport interface MountResult {\n /** Elemento .oksigenia-panel insertado. */\n panel: HTMLElement;\n /** Limpia listeners y remueve el panel del DOM. */\n destroy: () => void;\n}\n\n/**\n * Inserta el panel de botones dentro de `target` (light DOM) y engancha\n * listeners. El CSS NO se inyecta — asegurate de cargar\n * `@oksigenia/share/styles.css` o de inyectar `SHARE_CSS` por tu cuenta.\n *\n * Para inyección automática con shadow DOM aislado, usa el web component:\n * `import '@oksigenia/share/web-component'` y `<oksigenia-share>`.\n */\nexport function mountShare(\n target: HTMLElement,\n options: ShareOptions = {},\n): MountResult {\n const wrapper = document.createElement('div');\n wrapper.innerHTML = buildShareHtml(options);\n const panel = wrapper.firstElementChild as HTMLElement;\n target.appendChild(panel);\n const dispose = bindShareEvents(panel, options);\n return {\n panel,\n destroy: () => {\n dispose();\n panel.remove();\n },\n };\n}\n"]}
1
+ {"version":3,"sources":["../src/networks.ts","../src/build-link.ts","../src/translations.ts","../src/render.ts","../src/styles.ts","../src/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["// SVGs y metadatos de las redes. Heredado del plugin WordPress\n// oksigenia-share v7.2 (https://wordpress.org/plugins/oksigenia-share/).\n\nexport type NetworkId =\n | 'x'\n | 'bs'\n | 'th'\n | 'wa'\n | 'tg'\n | 'li'\n | 'rd'\n | 'no'\n | 'em';\n\nexport type OpenStrategy = 'popup' | 'tab' | 'copy' | 'email';\n\nexport interface NetworkDef {\n readonly id: NetworkId;\n readonly label: string;\n readonly color: string;\n readonly open: OpenStrategy;\n readonly svg: string;\n}\n\nconst X_SVG =\n '<svg viewBox=\"0 0 512 512\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M389.2 48h70.6L305.6 224.2 487 464H345L233.7 318.6 106.5 464H35.8L200.7 275.5 26.8 48H172.4L272.9 180.9 389.2 48zM364.4 421.8h39.1L151.1 88h-42L364.4 421.8z\"/></svg>';\nconst BS_SVG =\n '<svg viewBox=\"0 0 600 530\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M135.7 44.4C202.6 94.7 274.6 196.7 301 251.4c26.4-54.7 98.4-156.7 165.3-207C512.7 9.5 587 -16.3 587 67.4c0 16.7-9.6 140.5-15.2 160.6-19.6 70-91 87.8-154.4 77 110.9 18.9 139.1 81.4 78.2 144-115.7 119-166.4-29.8-179.4-67.9-2.4-7-3.5-10.3-3.5-7.5 0 -2.8-1.1 .5-3.5 7.5-13 38.1-63.7 186.9-179.4 67.9-60.9-62.6-32.7-125.1 78.2-144-63.5 10.8-134.8-7.1-154.4-77C48 207.8 38.4 84.1 38.4 67.4 38.4-16.3 112.7 9.5 135.7 44.4z\"/></svg>';\nconst TH_SVG =\n '<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M12.186 24h-.007c-3.581-.024-6.334-1.205-8.184-3.509C2.35 18.44 1.5 15.586 1.472 12.01v-.017c.03-3.579.879-6.43 2.525-8.482C5.845 1.205 8.6.024 12.18 0h.014c2.746.02 5.043.725 6.826 2.098 1.677 1.29 2.858 3.13 3.509 5.467l-2.04.569c-1.104-3.96-3.898-5.984-8.304-6.015-2.91.022-5.11.936-6.54 2.717C4.307 6.504 3.616 8.914 3.589 12c.027 3.086.718 5.496 2.057 7.164 1.43 1.783 3.631 2.698 6.54 2.717 2.623-.02 4.358-.631 5.8-2.045 1.647-1.613 1.618-3.593 1.09-4.798-.31-.71-.873-1.3-1.634-1.75-.192 1.352-.622 2.446-1.284 3.272-.886 1.102-2.14 1.704-3.73 1.79-1.202.065-2.361-.218-3.259-.801-1.063-.689-1.685-1.74-1.752-2.964-.065-1.19.408-2.285 1.33-3.082.88-.76 2.119-1.207 3.583-1.291a13.853 13.853 0 0 1 3.02.142c-.126-.742-.375-1.332-.749-1.757-.513-.586-1.308-.883-2.359-.89h-.029c-.844 0-1.992.232-2.721 1.32L7.734 7.847c.98-1.454 2.568-2.256 4.478-2.256h.044c3.194.02 5.097 1.975 5.287 5.388.108.046.216.094.323.144 1.49.7 2.58 1.761 3.154 3.07.797 1.82.871 4.79-1.548 7.158-1.85 1.81-4.094 2.628-7.277 2.65zm1.003-11.69c-.242 0-.487.007-.739.021-1.836.103-2.98.946-2.916 2.143.067 1.256 1.452 1.839 2.784 1.767 1.224-.065 2.818-.543 3.086-3.71a10.5 10.5 0 0 0-2.215-.221z\"/></svg>';\nconst WA_SVG =\n '<svg viewBox=\"0 0 448 512\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M380.9 97.1C339 55.1 283.2 32 223.9 32c-122.4 0-222 99.6-222 222 0 39.1 10.2 77.3 29.6 111L0 480l117.7-30.9c32.4 17.7 68.9 27 106.1 27h.1c122.3 0 224.1-99.6 224.1-222 0-59.3-25.2-115-67.1-157zm-157 341.6c-33.2 0-65.7-8.9-94-25.7l-6.7-4-69.8 18.3L72 359.2l-4.4-7c-18.5-29.4-28.2-63.3-28.2-98.2 0-101.7 82.8-184.5 184.6-184.5 49.3 0 95.6 19.2 130.4 54.1 34.8 34.9 56.2 81.2 56.1 130.5 0 101.8-84.9 184.6-186.6 184.6zm101.2-138.2c-5.5-2.8-32.8-16.2-37.9-18-5.1-1.9-8.8-2.8-12.5 2.8-3.7 5.6-14.3 18-17.6 21.8-3.2 3.7-6.5 4.2-12 1.4-5.5-2.8-23.4-8.6-44.6-27.5-16.5-14.7-27.6-32.8-30.8-38.4-3.2-5.6-.3-8.6 2.5-11.4 2.5-2.5 5.5-6.5 8.3-9.7 2.8-3.2 3.7-5.5 5.5-9.2 1.9-3.7.9-6.9-.5-9.7-1.4-2.8-12.5-30.1-17.1-41.2-4.5-10.8-9.1-9.3-12.5-9.5-3.2-.2-6.9-.2-10.6-.2-3.7 0-9.7 1.4-14.8 6.9-5.1 5.6-19.4 19-19.4 46.3 0 27.3 19.9 53.7 22.6 57.4 2.8 3.7 39.1 59.7 94.8 83.8 13.2 5.8 23.5 9.2 31.5 11.8 13.3 4.2 25.4 3.6 35 2.2 10.7-1.6 32.8-13.4 37.4-26.4 4.6-13 4.6-24.1 3.2-26.4-1.3-2.5-5-3.9-10.5-6.6z\"/></svg>';\nconst TG_SVG =\n '<svg viewBox=\"0 0 448 512\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M446.7 98.6l-67.6 318.8c-5.1 22.5-18.4 28.1-37.3 17.5l-103-75.9-49.7 47.8c-5.5 5.5-10.1 10.1-20.7 10.1l7.4-104.9 190.9-172.5c8.3-7.4-1.8-11.5-12.9-4.1L117.8 284 16.2 252.2c-22.1-6.9-22.5-22.1 4.6-32.7L418.2 66.4c18.4-6.9 34.5 4.1 28.5 32.2z\"/></svg>';\nconst LI_SVG =\n '<svg viewBox=\"0 0 448 512\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M100.28 448H7.4V148.9h92.88zM53.79 108.1C24.09 108.1 0 83.5 0 53.8a53.79 53.79 0 0 1 107.58 0c0 29.7-24.1 54.3-53.79 54.3zM447.9 448h-92.68V302.4c0-34.7-.7-79.2-48.29-79.2-48.29 0-55.69 37.7-55.69 76.7V448h-92.78V148.9h89.08v40.8h1.3c12.4-23.5 42.69-48.3 87.88-48.3 94 0 111.28 61.9 111.28 142.3V448z\"/></svg>';\nconst RD_SVG =\n '<svg viewBox=\"0 0 512 512\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M201.5 305.5c-13.8 0-24.9-11.1-24.9-24.6 0-13.8 11.1-24.9 24.9-24.9 13.6 0 24.6 11.1 24.6 24.9 0 13.6-11.1 24.6-24.6 24.6zm129 41.2c-12.3 12.3-37.8 13.4-45.3 13.4-7.5 0-32.7-1.4-45-13.4-1.8-1.8-1.8-4.8 0-6.9 1.8-1.8 4.8-1.8 6.6 0 7.8 7.8 24.3 10.5 38.4 10.5s30.9-2.7 38.7-10.5c1.8-1.8 4.8-1.8 6.6 0 1.8 2.1 1.8 5.1 0 6.9zm-12.3-41.2c0-13.8 11.1-24.9 24.9-24.9 13.6 0 24.6 11.1 24.6 24.9 0 13.6-11.1 24.6-24.6 24.6-13.8 0-24.9-11.1-24.9-24.6zM504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-132.3-41.2c-9.4 0-17.7 3.9-23.8 9.9-22.8-15.6-52.8-25.8-86.1-27l17.4-78.9 55.5 12.3c0 13.6 11.1 24.6 24.6 24.6 13.8 0 24.9-11.4 24.9-24.9s-11.1-24.9-24.9-24.9c-9.6 0-17.7 5.7-21.6 13.5l-61.5-13.5c-3-.9-6 1.2-6.6 4.2l-19.2 86.7c-32.7 1.5-62.7 11.7-85.5 27.3-6-6.3-14.7-9.9-23.7-9.9-34.8 0-46.2 46.8-14.4 62.7-1.2 5.1-1.8 10.8-1.8 16.2 0 49.5 56.1 89.7 125.4 89.7 69.6 0 125.7-40.2 125.7-89.7 0-5.4-.6-11.4-2.1-16.5 31.5-15.9 19.8-62.4-14.4-62.4z\"/></svg>';\nconst NO_SVG =\n '<svg viewBox=\"0 0 170.66667 170\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M 80.014749,0.78606659 C 73.052769,1.9302826 66.167099,2.3642936 59.348089,4.5268096 38.835519,11.031957 21.050593,25.529048 10.848085,44.52681 -6.8624293,77.505 -0.92508032,121.67898 27.348086,147.13792 c 11.539173,10.3906 24.998793,17.01823 40.000003,20.62963 9.26968,2.23159 19.24599,2.5862 28.66667,1.27777 C 139.11925,163.05859 171.85692,124.19929 169.32958,80.52681 167.31241,45.669937 143.27583,13.848984 109.34809,4.2675526 100.31238,1.7158046 89.426889,-0.76084941 80.014749,0.78606659 M 136.01476,34.52681 c -2.37396,0 -11.65111,-0.914032 -11.03704,3.333333 0.44515,3.078919 4.97786,5.419108 7.01853,7.388886 2.78243,2.685771 4.44989,6.742004 4.6111,10.611114 0.43316,10.395773 -8.18644,14.669088 -14.53704,20.81482 -4.11595,3.983174 -1.16762,10.854736 -6.07406,15.018514 -5.28385,4.484059 -13.33279,3.273844 -19.314831,6.111114 -4.69327,2.226009 -7.84703,7.913129 -10.66667,12.055549 l 14.666681,-4.44443 7.33333,-1.22223 5.98149,6.33333 2.01851,5.33333 c -2.72032,-0.0572 -6.29832,-0.90982 -8.61111,-2.42592 -1.43022,-0.93754 -2.13911,-2.61031 -4.05556,-2.55556 -1.73865,0.0497 -3.687801,1.1301 -5.333331,1.64815 -4.89415,1.54075 -9.77338,3.60264 -14.66667,5.01851 -4.97774,1.44033 -6.14184,-3.22559 -4.5,-7.01851 0.58509,-1.35166 1.3007,-2.70345 2,-4 1.22817,-2.27712 2.8155,-4.29175 3.83333,-6.666667 -14.44897,7.042367 -23.21779,20.075037 -32.57408,32.666667 -2.69666,3.62915 -5.83349,7.00277 -8.44444,10.66667 -0.74469,1.045 -1.43956,3.39244 -3.01852,3.44444 -1.48153,0.0488 -1.89431,-1.62287 -1.88889,-2.77778 0.012,-2.56211 1.55286,-4.83939 1.87038,-7.33333 0.16984,-1.33409 -0.3317,-3.17503 0.53703,-4.33333 1.46427,-1.95236 4.81923,-1.69841 6.5926,-3.68518 4.11706,-4.61253 7.99675,-10.65312 11.12963,-15.98149 1.00019,-1.70113 1.31074,-3.7756 2.62962,-5.27777 4.15881,-4.73677 10.29882,-7.15127 13.83334,-12.72223 -3.78599,-0.77946 -7.81198,-1.877889 -11.33334,-3.5 -2.16788,-0.998637 -4.28318,-2.695353 -6.66666,-3.09259 -4.92365,-0.820608 -7.70844,2.301147 -12,3.59259 -3.55609,1.070119 -9.1464,-2.835714 -11,-5.666667 -2.9074,-4.440389 1.59973,-11.14448 5.66666,-13.055562 7.85432,-3.690796 17.10949,-1.957876 25.33334,-4.185181 8.80831,-2.385589 15.88491,-8.429891 25.33333,-9.370371 6.13412,-0.610576 12.248691,0.007 18.000011,2.203705 5.40278,2.063568 12.35279,5.71113 18,2.462972 3.05718,-1.758433 5.38171,-6.552399 4.35184,-10.055563 -1.22555,-4.168813 -5.35998,-6.611246 -8.35184,-9.388885 -3.4549,-3.20752 -5.13367,-7.241526 -4.61112,-11.944448 0.93488,-8.413696 8.07782,-5.219116 12.61112,-2.333333 2.37224,1.510111 4.74974,1.248728 5.33333,4.333333 z\"/></svg>';\nconst EM_SVG =\n '<svg viewBox=\"0 0 512 512\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M48 64C21.5 64 0 85.5 0 112c0 15.1 7.1 29.3 19.2 38.4L236.8 313.6c11.4 8.5 27 8.5 38.4 0L492.8 150.4c12.1-9.1 19.2-23.3 19.2-38.4c0-26.5-21.5-48-48-48H48zM0 176V384c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V176L294.4 339.2c-22.8 17.1-54 17.1-76.8 0L0 176z\"/></svg>';\n\nexport const NETWORKS: Readonly<Record<NetworkId, NetworkDef>> = {\n x: { id: 'x', label: 'X (Twitter)', color: '#000000', open: 'popup', svg: X_SVG },\n bs: { id: 'bs', label: 'Bluesky', color: '#0285FF', open: 'tab', svg: BS_SVG },\n th: { id: 'th', label: 'Threads', color: '#000000', open: 'tab', svg: TH_SVG },\n wa: { id: 'wa', label: 'WhatsApp', color: '#25D366', open: 'tab', svg: WA_SVG },\n tg: { id: 'tg', label: 'Telegram', color: '#0088cc', open: 'tab', svg: TG_SVG },\n li: { id: 'li', label: 'LinkedIn', color: '#0077b5', open: 'popup', svg: LI_SVG },\n rd: { id: 'rd', label: 'Reddit', color: '#FF4500', open: 'popup', svg: RD_SVG },\n no: { id: 'no', label: 'Nostr', color: '#8e44ad', open: 'copy', svg: NO_SVG },\n em: { id: 'em', label: 'Email', color: '#666666', open: 'email', svg: EM_SVG },\n} as const;\n\nexport const ALL_NETWORKS: readonly NetworkId[] = [\n 'x', 'bs', 'th', 'wa', 'tg', 'li', 'rd', 'no', 'em',\n] as const;\n","import type { NetworkId } from './networks.js';\n\nexport interface BuildLinkInput {\n network: NetworkId;\n title: string;\n url: string;\n /** Handle X opcional (sin @). Si está, se añade \"{title} by @{handle}\" al tweet. */\n xHandle?: string;\n /** Conector \"by\" según locale (i18n). Default \"by\". */\n byWord?: string;\n}\n\n/**\n * Construye la URL del share-intent de cada red. No abre nada, solo devuelve\n * la cadena. Para Nostr (copy-only) devuelve cadena vacía — el contenido\n * que se copia se construye con `buildNostrPayload()`.\n */\nexport function buildShareLink(input: BuildLinkInput): string {\n const { network, title, url, xHandle, byWord = 'by' } = input;\n const txt = encodeURIComponent(title);\n const urlEnc = encodeURIComponent(url);\n\n const xText = xHandle\n ? encodeURIComponent(`${title} ${byWord} @${xHandle.replace(/^@/, '')}`)\n : txt;\n\n switch (network) {\n case 'x':\n return `https://twitter.com/intent/tweet?text=${xText}&url=${urlEnc}`;\n case 'bs':\n return `https://bsky.app/intent/compose?text=${encodeURIComponent(`${title} ${url}`)}`;\n case 'th':\n return `https://www.threads.net/intent/post?text=${encodeURIComponent(`${title} ${url}`)}`;\n case 'wa':\n return `https://api.whatsapp.com/send?text=${txt}%20${urlEnc}`;\n case 'tg':\n return `https://t.me/share/url?url=${urlEnc}&text=${txt}`;\n case 'li':\n return `https://www.linkedin.com/sharing/share-offsite/?url=${urlEnc}`;\n case 'rd':\n return `https://www.reddit.com/submit?url=${urlEnc}&title=${txt}`;\n case 'em':\n return `mailto:?subject=${txt}&body=${urlEnc}`;\n case 'no':\n return '';\n }\n}\n\n/**\n * Payload Nostr: el botón Nostr copia esto al portapapeles porque no hay\n * un share-intent oficial. Hashtag configurable.\n */\nexport function buildNostrPayload(\n title: string,\n url: string,\n hashtag = 'oksigenia',\n): string {\n return `${title}\\n${url}\\n#${hashtag}`;\n}\n","// Heredado del plugin WP oksigenia-share v7.2.\n// Diccionario in-source para evitar fetch en runtime.\n\nexport type LocaleCode = 'en' | 'es' | 'it' | 'nl' | 'de' | 'pt' | 'gn' | 'sv';\n\nexport interface Translation {\n /** Label \"SHARE\" en caps. */\n share: string;\n /** Conector \"by\" usado en el tweet \"{title} by @user\". */\n by: string;\n /** aria-label \"Share on %s\". %s se reemplaza con el nombre de red. */\n shareOn: (network: string) => string;\n /** aria-label del botón de email. */\n shareEmail: string;\n /** @deprecated Ya no se usa: el botón Nostr sigue el patrón \"Share on {network}\".\n * Se mantiene la clave para no romper el tipo `Translation` exportado. */\n copyLink: string;\n /** Anunciado por aria-live cuando se copia algo. */\n copied: string;\n /** Prompt fallback cuando clipboard no disponible. */\n copyPrompt: string;\n}\n\nconst DICT: Readonly<Record<LocaleCode, Translation>> = {\n en: {\n share: 'SHARE', by: 'by',\n shareOn: (n) => `Share on ${n}`,\n shareEmail: 'Share by email',\n copyLink: 'Copy link to clipboard',\n copied: 'Copied to clipboard',\n copyPrompt: 'Copy this:',\n },\n es: {\n share: 'COMPARTIR', by: 'por',\n shareOn: (n) => `Compartir en ${n}`,\n shareEmail: 'Compartir por email',\n copyLink: 'Copiar enlace al portapapeles',\n copied: 'Copiado al portapapeles',\n copyPrompt: 'Copia esto:',\n },\n it: {\n share: 'CONDIVIDI', by: 'da',\n shareOn: (n) => `Condividi su ${n}`,\n shareEmail: 'Condividi via email',\n copyLink: 'Copia il link negli appunti',\n copied: 'Copiato negli appunti',\n copyPrompt: 'Copia questo:',\n },\n nl: {\n share: 'DELEN', by: 'door',\n shareOn: (n) => `Deel op ${n}`,\n shareEmail: 'Per e-mail delen',\n copyLink: 'Link kopiëren naar klembord',\n copied: 'Gekopieerd naar klembord',\n copyPrompt: 'Kopieer dit:',\n },\n de: {\n share: 'TEILEN', by: 'von',\n shareOn: (n) => `Auf ${n} teilen`,\n shareEmail: 'Per E-Mail teilen',\n copyLink: 'Link in die Zwischenablage kopieren',\n copied: 'In die Zwischenablage kopiert',\n copyPrompt: 'Dies kopieren:',\n },\n pt: {\n share: 'PARTILHAR', by: 'por',\n shareOn: (n) => `Partilhar no ${n}`,\n shareEmail: 'Partilhar por email',\n copyLink: 'Copiar ligação para a área de transferência',\n copied: 'Copiado para a área de transferência',\n copyPrompt: 'Copiar isto:',\n },\n gn: {\n share: 'MOASÃI', by: 'por',\n shareOn: (n) => `Emoasãi ${n}-pe`,\n shareEmail: 'Emoasãi email rupive',\n copyLink: 'Ekopia link portapapeles-pe',\n copied: 'Oñekopia portapapeles-pe',\n copyPrompt: 'Ekopia kóva:',\n },\n sv: {\n share: 'DELA', by: 'av',\n shareOn: (n) => `Dela på ${n}`,\n shareEmail: 'Dela via e-post',\n copyLink: 'Kopiera länk till urklipp',\n copied: 'Kopierat till urklipp',\n copyPrompt: 'Kopiera detta:',\n },\n};\n\n/**\n * Devuelve la traducción para un locale. Acepta variantes regionales:\n * `es-PY`, `es-ES`, `pt-BR` → todas caen al código base si existe.\n * Fallback final: `en`.\n */\nexport function getTranslation(locale: string): Translation {\n const base = locale.toLowerCase().split(/[-_]/)[0] as LocaleCode;\n return DICT[base] ?? DICT.en;\n}\n\nexport function supportedLocales(): readonly LocaleCode[] {\n return Object.keys(DICT) as LocaleCode[];\n}\n","import {\n ALL_NETWORKS,\n NETWORKS,\n type NetworkId,\n type OpenStrategy,\n} from './networks.js';\nimport { buildShareLink, buildNostrPayload } from './build-link.js';\nimport { getTranslation, type LocaleCode, type Translation } from './translations.js';\n\nexport interface ShareOptions {\n /** URL absoluta a compartir. Si se omite, `location.href` al render. */\n url?: string;\n /** Título o texto del share. Si se omite, `document.title`. */\n title?: string;\n /** Locale (es, en, gn, …). Default: navegador, fallback en. */\n locale?: LocaleCode | string;\n /** Subconjunto/orden de redes. Default: las 9 en orden canónico. */\n networks?: readonly NetworkId[];\n /** Redes a OCULTAR en viewport ≥769px. */\n hideDesktop?: readonly NetworkId[];\n /** Redes a OCULTAR en viewport ≤768px. */\n hideMobile?: readonly NetworkId[];\n /** Handle de X opcional (con o sin @). */\n xHandle?: string;\n /** Hashtag opcional para el payload Nostr. Default \"oksigenia\". */\n nostrHashtag?: string;\n /** Mostrar el texto \"SHARE\" a la izquierda. Default true. */\n showLabel?: boolean;\n}\n\ninterface PreparedButton {\n id: NetworkId;\n ariaLabel: string;\n type: OpenStrategy;\n link: string;\n copyPayload?: string;\n bgColor: string;\n svg: string;\n hideDesktop: boolean;\n hideMobile: boolean;\n}\n\nfunction prepareButtons(opts: Required<Pick<ShareOptions, 'title' | 'url'>> & ShareOptions, t: Translation): PreparedButton[] {\n const list = opts.networks ?? ALL_NETWORKS;\n const hideDesk = new Set<NetworkId>(opts.hideDesktop ?? []);\n const hideMob = new Set<NetworkId>(opts.hideMobile ?? []);\n const out: PreparedButton[] = [];\n for (const id of list) {\n const def = NETWORKS[id];\n if (!def) continue;\n // Nostr (id 'no') used to get t.copyLink (\"Copy link to clipboard\"), which\n // a screen reader announced with no mention of Nostr. It now follows the\n // same \"Share on {network}\" pattern as the rest; the copy action is still\n // announced via the aria-live \"Copied\" message on click.\n const label = id === 'em'\n ? t.shareEmail\n : t.shareOn(def.label);\n const link = buildShareLink({\n network: id,\n title: opts.title,\n url: opts.url,\n xHandle: opts.xHandle,\n byWord: t.by,\n });\n const button: PreparedButton = {\n id,\n ariaLabel: label,\n type: def.open,\n link,\n bgColor: def.color,\n svg: def.svg,\n hideDesktop: hideDesk.has(id),\n hideMobile: hideMob.has(id),\n };\n if (id === 'no') {\n button.copyPayload = buildNostrPayload(opts.title, opts.url, opts.nostrHashtag);\n }\n out.push(button);\n }\n return out;\n}\n\n/**\n * Construye el markup HTML del panel de botones. NO lo monta en el DOM;\n * el consumidor decide dónde inyectarlo y si quiere shadow DOM o no.\n */\nexport function buildShareHtml(opts: ShareOptions = {}): string {\n const resolved: Required<Pick<ShareOptions, 'title' | 'url' | 'locale' | 'showLabel'>> & ShareOptions = {\n title: opts.title ?? (typeof document !== 'undefined' ? document.title : ''),\n url: opts.url ?? (typeof location !== 'undefined' ? location.href : ''),\n locale: opts.locale ?? (typeof navigator !== 'undefined' ? navigator.language : 'en'),\n showLabel: opts.showLabel ?? true,\n networks: opts.networks,\n hideDesktop: opts.hideDesktop,\n hideMobile: opts.hideMobile,\n xHandle: opts.xHandle,\n nostrHashtag: opts.nostrHashtag,\n };\n const t = getTranslation(resolved.locale);\n const buttons = prepareButtons(resolved, t);\n\n const labelHtml = resolved.showLabel\n ? `<span class=\"oksigenia-label\" aria-hidden=\"true\">${escapeHtml(t.share)}</span>`\n : '';\n\n const buttonsHtml = buttons\n .map((b) => {\n const dataLink = b.link ? ` data-link=\"${escapeAttr(b.link)}\"` : '';\n const dataCopy = b.copyPayload ? ` data-copy=\"${escapeAttr(b.copyPayload)}\"` : '';\n const visClass = `${b.hideDesktop ? ' hide-desktop' : ''}${b.hideMobile ? ' hide-mobile' : ''}`;\n return `<button type=\"button\" class=\"oksigenia-btn o-${b.id}${visClass}\" style=\"background:${b.bgColor}\" data-type=\"${b.type}\"${dataLink}${dataCopy} aria-label=\"${escapeAttr(b.ariaLabel)}\">${b.svg}<span class=\"oksigenia-sr-only\" aria-live=\"polite\"></span></button>`;\n })\n .join('');\n\n // role=\"group\" + aria-label cumplen recomendaciones de A11Y / W3C.\n return `<div class=\"oksigenia-panel\" role=\"group\" aria-label=\"${escapeAttr(t.share)}\">${labelHtml}${buttonsHtml}</div>`;\n}\n\nfunction escapeHtml(s: string): string {\n return s.replace(/[&<>\"]/g, (c) => ({\n '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;',\n }[c] ?? c));\n}\nfunction escapeAttr(s: string): string {\n return escapeHtml(s).replace(/'/g, '&#39;');\n}\n\n/**\n * Engancha los listeners de click a los botones renderizados dentro de\n * `root`. Devuelve un dispose para limpiar.\n */\nexport function bindShareEvents(root: ParentNode, opts: ShareOptions = {}): () => void {\n const locale = opts.locale ?? (typeof navigator !== 'undefined' ? navigator.language : 'en');\n const t = getTranslation(locale);\n const buttons = Array.from(root.querySelectorAll<HTMLButtonElement>('.oksigenia-btn'));\n const handler = (e: Event) => {\n e.preventDefault();\n const btn = e.currentTarget as HTMLButtonElement;\n openShare(btn, t);\n };\n for (const b of buttons) b.addEventListener('click', handler);\n return () => {\n for (const b of buttons) b.removeEventListener('click', handler);\n };\n}\n\nfunction openShare(btn: HTMLButtonElement, t: Translation): void {\n const link = btn.getAttribute('data-link') ?? '';\n const type = (btn.getAttribute('data-type') ?? 'tab') as OpenStrategy;\n const live = btn.querySelector<HTMLElement>('.oksigenia-sr-only');\n\n if (type === 'popup') {\n const w = 600;\n const h = 400;\n // window.open top/left are screen coordinates, so center against the\n // browser window's screen position — not the viewport.\n const left = window.screenX + (window.outerWidth - w) / 2;\n const top = window.screenY + (window.outerHeight - h) / 2;\n // noopener severs window.opener so the share target can't drive our page\n // back (reverse tabnabbing). Same hardening the 'tab' strategy already has.\n window.open(link, 'oksigenia_share', `noopener,width=${w},height=${h},top=${top},left=${left},scrollbars=no`);\n return;\n }\n if (type === 'tab') {\n window.open(link, '_blank', 'noopener');\n return;\n }\n if (type === 'email') {\n window.location.href = link;\n return;\n }\n if (type === 'copy') {\n const text = btn.getAttribute('data-copy') ?? '';\n const done = () => {\n btn.classList.add('copied');\n if (live) live.textContent = t.copied;\n window.setTimeout(() => {\n btn.classList.remove('copied');\n if (live) live.textContent = '';\n }, 2000);\n };\n if (navigator.clipboard?.writeText) {\n navigator.clipboard.writeText(text).then(done).catch(() => {\n window.prompt(t.copyPrompt, text);\n });\n } else {\n window.prompt(t.copyPrompt, text);\n }\n }\n}\n","// CSS del panel de botones. Se inyecta inline en el Shadow DOM\n// (cuando se usa el web component) o se importa como `dist/styles.css`\n// si se usa el helper imperativo en light DOM.\n\nexport const SHARE_CSS = `\n:host { display: block; }\n.oksigenia-panel {\n display: flex;\n align-items: center;\n gap: 10px;\n margin: 30px 0;\n padding: 10px 18px;\n background: rgba(0,0,0,0.03);\n border-radius: 60px;\n width: fit-content;\n flex-wrap: wrap;\n font-family: system-ui, -apple-system, \"Segoe UI\", Roboto, sans-serif;\n}\n.oksigenia-label {\n font-weight: 800;\n font-size: 11px;\n margin-right: 12px;\n text-transform: uppercase;\n color: currentColor;\n letter-spacing: 1.5px;\n}\n.oksigenia-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 44px;\n height: 44px;\n border-radius: 50%;\n border: none;\n cursor: pointer;\n transition: transform .2s, filter .2s, box-shadow .2s;\n box-shadow: 0 3px 6px rgba(0,0,0,0.1);\n position: relative;\n text-decoration: none !important;\n padding: 0;\n overflow: visible;\n}\n.oksigenia-btn:hover {\n transform: translateY(-3px);\n filter: brightness(1.1);\n box-shadow: 0 5px 12px rgba(0,0,0,0.2);\n}\n.oksigenia-btn:focus-visible {\n outline: 2px solid currentColor;\n outline-offset: 3px;\n}\n.oksigenia-btn svg {\n width: 22px;\n height: 22px;\n fill: #fff;\n pointer-events: none;\n}\n.oksigenia-sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0,0,0,0);\n white-space: nowrap;\n border: 0;\n}\n.o-no.copied { background: #00a884 !important; }\n@media (min-width: 769px) { .hide-desktop { display: none !important; } }\n@media (max-width: 768px) { .hide-mobile { display: none !important; } }\n@media (max-width: 480px) {\n .oksigenia-panel { padding: 8px 12px; gap: 8px; justify-content: center; }\n .oksigenia-btn { width: 38px; height: 38px; }\n .oksigenia-btn svg { width: 18px; height: 18px; }\n .oksigenia-label { flex-basis: 100%; width: 100%; margin: 0 0 6px; text-align: center; }\n}\n@media (prefers-reduced-motion: reduce) {\n .oksigenia-btn { transition: none; }\n .oksigenia-btn:hover { transform: none; }\n}\n`;\n","// Punto de entrada principal · API imperativa + tipos.\n// Para el web component <oksigenia-share>, importar\n// '@oksigenia/share/web-component'.\n\nexport {\n NETWORKS,\n ALL_NETWORKS,\n type NetworkId,\n type OpenStrategy,\n type NetworkDef,\n} from './networks.js';\n\nexport {\n buildShareLink,\n buildNostrPayload,\n type BuildLinkInput,\n} from './build-link.js';\n\nexport {\n getTranslation,\n supportedLocales,\n type LocaleCode,\n type Translation,\n} from './translations.js';\n\nexport {\n buildShareHtml,\n bindShareEvents,\n type ShareOptions,\n} from './render.js';\n\nexport { SHARE_CSS } from './styles.js';\n\nimport { buildShareHtml, bindShareEvents, type ShareOptions } from './render.js';\nimport { SHARE_CSS } from './styles.js';\n\nexport interface MountResult {\n /** Elemento .oksigenia-panel insertado. */\n panel: HTMLElement;\n /** Limpia listeners y remueve el panel del DOM. */\n destroy: () => void;\n}\n\n/**\n * Inserta el panel de botones dentro de `target` (light DOM) y engancha\n * listeners. El CSS NO se inyecta — asegurate de cargar\n * `@oksigenia/share/styles.css` o de inyectar `SHARE_CSS` por tu cuenta.\n *\n * Para inyección automática con shadow DOM aislado, usa el web component:\n * `import '@oksigenia/share/web-component'` y `<oksigenia-share>`.\n */\nexport function mountShare(\n target: HTMLElement,\n options: ShareOptions = {},\n): MountResult {\n const wrapper = document.createElement('div');\n wrapper.innerHTML = buildShareHtml(options);\n const panel = wrapper.firstElementChild as HTMLElement;\n target.appendChild(panel);\n const dispose = bindShareEvents(panel, options);\n return {\n panel,\n destroy: () => {\n dispose();\n panel.remove();\n },\n };\n}\n"]}
@@ -153,7 +153,7 @@ function prepareButtons(opts, t) {
153
153
  for (const id of list) {
154
154
  const def = NETWORKS[id];
155
155
  if (!def) continue;
156
- const label = id === "em" ? t.shareEmail : id === "no" ? t.copyLink : t.shareOn(def.label);
156
+ const label = id === "em" ? t.shareEmail : t.shareOn(def.label);
157
157
  const link = buildShareLink({
158
158
  network: id,
159
159
  title: opts.title,
@@ -185,6 +185,8 @@ function buildShareHtml(opts = {}) {
185
185
  locale: opts.locale ?? (typeof navigator !== "undefined" ? navigator.language : "en"),
186
186
  showLabel: opts.showLabel ?? true,
187
187
  networks: opts.networks,
188
+ hideDesktop: opts.hideDesktop,
189
+ hideMobile: opts.hideMobile,
188
190
  xHandle: opts.xHandle,
189
191
  nostrHashtag: opts.nostrHashtag
190
192
  };
@@ -231,9 +233,9 @@ function openShare(btn, t) {
231
233
  if (type === "popup") {
232
234
  const w = 600;
233
235
  const h = 400;
234
- const left = (window.innerWidth - w) / 2;
235
- const top = (window.innerHeight - h) / 2;
236
- window.open(link, "oksigenia_share", `width=${w},height=${h},top=${top},left=${left},scrollbars=no`);
236
+ const left = window.screenX + (window.outerWidth - w) / 2;
237
+ const top = window.screenY + (window.outerHeight - h) / 2;
238
+ window.open(link, "oksigenia_share", `noopener,width=${w},height=${h},top=${top},left=${left},scrollbars=no`);
237
239
  return;
238
240
  }
239
241
  if (type === "tab") {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/networks.ts","../src/build-link.ts","../src/translations.ts","../src/render.ts","../src/styles.ts","../src/web-component.ts"],"names":[],"mappings":"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","file":"web-component.js","sourcesContent":["// SVGs y metadatos de las redes. Heredado del plugin WordPress\n// oksigenia-share v7.2 (https://wordpress.org/plugins/oksigenia-share/).\n\nexport type NetworkId =\n | 'x'\n | 'bs'\n | 'th'\n | 'wa'\n | 'tg'\n | 'li'\n | 'rd'\n | 'no'\n | 'em';\n\nexport type OpenStrategy = 'popup' | 'tab' | 'copy' | 'email';\n\nexport interface NetworkDef {\n readonly id: NetworkId;\n readonly label: string;\n readonly color: string;\n readonly open: OpenStrategy;\n readonly svg: string;\n}\n\nconst X_SVG =\n '<svg viewBox=\"0 0 512 512\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M389.2 48h70.6L305.6 224.2 487 464H345L233.7 318.6 106.5 464H35.8L200.7 275.5 26.8 48H172.4L272.9 180.9 389.2 48zM364.4 421.8h39.1L151.1 88h-42L364.4 421.8z\"/></svg>';\nconst BS_SVG =\n '<svg viewBox=\"0 0 600 530\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M135.7 44.4C202.6 94.7 274.6 196.7 301 251.4c26.4-54.7 98.4-156.7 165.3-207C512.7 9.5 587 -16.3 587 67.4c0 16.7-9.6 140.5-15.2 160.6-19.6 70-91 87.8-154.4 77 110.9 18.9 139.1 81.4 78.2 144-115.7 119-166.4-29.8-179.4-67.9-2.4-7-3.5-10.3-3.5-7.5 0 -2.8-1.1 .5-3.5 7.5-13 38.1-63.7 186.9-179.4 67.9-60.9-62.6-32.7-125.1 78.2-144-63.5 10.8-134.8-7.1-154.4-77C48 207.8 38.4 84.1 38.4 67.4 38.4-16.3 112.7 9.5 135.7 44.4z\"/></svg>';\nconst TH_SVG =\n '<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M12.186 24h-.007c-3.581-.024-6.334-1.205-8.184-3.509C2.35 18.44 1.5 15.586 1.472 12.01v-.017c.03-3.579.879-6.43 2.525-8.482C5.845 1.205 8.6.024 12.18 0h.014c2.746.02 5.043.725 6.826 2.098 1.677 1.29 2.858 3.13 3.509 5.467l-2.04.569c-1.104-3.96-3.898-5.984-8.304-6.015-2.91.022-5.11.936-6.54 2.717C4.307 6.504 3.616 8.914 3.589 12c.027 3.086.718 5.496 2.057 7.164 1.43 1.783 3.631 2.698 6.54 2.717 2.623-.02 4.358-.631 5.8-2.045 1.647-1.613 1.618-3.593 1.09-4.798-.31-.71-.873-1.3-1.634-1.75-.192 1.352-.622 2.446-1.284 3.272-.886 1.102-2.14 1.704-3.73 1.79-1.202.065-2.361-.218-3.259-.801-1.063-.689-1.685-1.74-1.752-2.964-.065-1.19.408-2.285 1.33-3.082.88-.76 2.119-1.207 3.583-1.291a13.853 13.853 0 0 1 3.02.142c-.126-.742-.375-1.332-.749-1.757-.513-.586-1.308-.883-2.359-.89h-.029c-.844 0-1.992.232-2.721 1.32L7.734 7.847c.98-1.454 2.568-2.256 4.478-2.256h.044c3.194.02 5.097 1.975 5.287 5.388.108.046.216.094.323.144 1.49.7 2.58 1.761 3.154 3.07.797 1.82.871 4.79-1.548 7.158-1.85 1.81-4.094 2.628-7.277 2.65zm1.003-11.69c-.242 0-.487.007-.739.021-1.836.103-2.98.946-2.916 2.143.067 1.256 1.452 1.839 2.784 1.767 1.224-.065 2.818-.543 3.086-3.71a10.5 10.5 0 0 0-2.215-.221z\"/></svg>';\nconst WA_SVG =\n '<svg viewBox=\"0 0 448 512\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M380.9 97.1C339 55.1 283.2 32 223.9 32c-122.4 0-222 99.6-222 222 0 39.1 10.2 77.3 29.6 111L0 480l117.7-30.9c32.4 17.7 68.9 27 106.1 27h.1c122.3 0 224.1-99.6 224.1-222 0-59.3-25.2-115-67.1-157zm-157 341.6c-33.2 0-65.7-8.9-94-25.7l-6.7-4-69.8 18.3L72 359.2l-4.4-7c-18.5-29.4-28.2-63.3-28.2-98.2 0-101.7 82.8-184.5 184.6-184.5 49.3 0 95.6 19.2 130.4 54.1 34.8 34.9 56.2 81.2 56.1 130.5 0 101.8-84.9 184.6-186.6 184.6zm101.2-138.2c-5.5-2.8-32.8-16.2-37.9-18-5.1-1.9-8.8-2.8-12.5 2.8-3.7 5.6-14.3 18-17.6 21.8-3.2 3.7-6.5 4.2-12 1.4-5.5-2.8-23.4-8.6-44.6-27.5-16.5-14.7-27.6-32.8-30.8-38.4-3.2-5.6-.3-8.6 2.5-11.4 2.5-2.5 5.5-6.5 8.3-9.7 2.8-3.2 3.7-5.5 5.5-9.2 1.9-3.7.9-6.9-.5-9.7-1.4-2.8-12.5-30.1-17.1-41.2-4.5-10.8-9.1-9.3-12.5-9.5-3.2-.2-6.9-.2-10.6-.2-3.7 0-9.7 1.4-14.8 6.9-5.1 5.6-19.4 19-19.4 46.3 0 27.3 19.9 53.7 22.6 57.4 2.8 3.7 39.1 59.7 94.8 83.8 13.2 5.8 23.5 9.2 31.5 11.8 13.3 4.2 25.4 3.6 35 2.2 10.7-1.6 32.8-13.4 37.4-26.4 4.6-13 4.6-24.1 3.2-26.4-1.3-2.5-5-3.9-10.5-6.6z\"/></svg>';\nconst TG_SVG =\n '<svg viewBox=\"0 0 448 512\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M446.7 98.6l-67.6 318.8c-5.1 22.5-18.4 28.1-37.3 17.5l-103-75.9-49.7 47.8c-5.5 5.5-10.1 10.1-20.7 10.1l7.4-104.9 190.9-172.5c8.3-7.4-1.8-11.5-12.9-4.1L117.8 284 16.2 252.2c-22.1-6.9-22.5-22.1 4.6-32.7L418.2 66.4c18.4-6.9 34.5 4.1 28.5 32.2z\"/></svg>';\nconst LI_SVG =\n '<svg viewBox=\"0 0 448 512\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M100.28 448H7.4V148.9h92.88zM53.79 108.1C24.09 108.1 0 83.5 0 53.8a53.79 53.79 0 0 1 107.58 0c0 29.7-24.1 54.3-53.79 54.3zM447.9 448h-92.68V302.4c0-34.7-.7-79.2-48.29-79.2-48.29 0-55.69 37.7-55.69 76.7V448h-92.78V148.9h89.08v40.8h1.3c12.4-23.5 42.69-48.3 87.88-48.3 94 0 111.28 61.9 111.28 142.3V448z\"/></svg>';\nconst RD_SVG =\n '<svg viewBox=\"0 0 512 512\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M201.5 305.5c-13.8 0-24.9-11.1-24.9-24.6 0-13.8 11.1-24.9 24.9-24.9 13.6 0 24.6 11.1 24.6 24.9 0 13.6-11.1 24.6-24.6 24.6zm129 41.2c-12.3 12.3-37.8 13.4-45.3 13.4-7.5 0-32.7-1.4-45-13.4-1.8-1.8-1.8-4.8 0-6.9 1.8-1.8 4.8-1.8 6.6 0 7.8 7.8 24.3 10.5 38.4 10.5s30.9-2.7 38.7-10.5c1.8-1.8 4.8-1.8 6.6 0 1.8 2.1 1.8 5.1 0 6.9zm-12.3-41.2c0-13.8 11.1-24.9 24.9-24.9 13.6 0 24.6 11.1 24.6 24.9 0 13.6-11.1 24.6-24.6 24.6-13.8 0-24.9-11.1-24.9-24.6zM504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-132.3-41.2c-9.4 0-17.7 3.9-23.8 9.9-22.8-15.6-52.8-25.8-86.1-27l17.4-78.9 55.5 12.3c0 13.6 11.1 24.6 24.6 24.6 13.8 0 24.9-11.4 24.9-24.9s-11.1-24.9-24.9-24.9c-9.6 0-17.7 5.7-21.6 13.5l-61.5-13.5c-3-.9-6 1.2-6.6 4.2l-19.2 86.7c-32.7 1.5-62.7 11.7-85.5 27.3-6-6.3-14.7-9.9-23.7-9.9-34.8 0-46.2 46.8-14.4 62.7-1.2 5.1-1.8 10.8-1.8 16.2 0 49.5 56.1 89.7 125.4 89.7 69.6 0 125.7-40.2 125.7-89.7 0-5.4-.6-11.4-2.1-16.5 31.5-15.9 19.8-62.4-14.4-62.4z\"/></svg>';\nconst NO_SVG =\n '<svg viewBox=\"0 0 170.66667 170\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M 80.014749,0.78606659 C 73.052769,1.9302826 66.167099,2.3642936 59.348089,4.5268096 38.835519,11.031957 21.050593,25.529048 10.848085,44.52681 -6.8624293,77.505 -0.92508032,121.67898 27.348086,147.13792 c 11.539173,10.3906 24.998793,17.01823 40.000003,20.62963 9.26968,2.23159 19.24599,2.5862 28.66667,1.27777 C 139.11925,163.05859 171.85692,124.19929 169.32958,80.52681 167.31241,45.669937 143.27583,13.848984 109.34809,4.2675526 100.31238,1.7158046 89.426889,-0.76084941 80.014749,0.78606659 M 136.01476,34.52681 c -2.37396,0 -11.65111,-0.914032 -11.03704,3.333333 0.44515,3.078919 4.97786,5.419108 7.01853,7.388886 2.78243,2.685771 4.44989,6.742004 4.6111,10.611114 0.43316,10.395773 -8.18644,14.669088 -14.53704,20.81482 -4.11595,3.983174 -1.16762,10.854736 -6.07406,15.018514 -5.28385,4.484059 -13.33279,3.273844 -19.314831,6.111114 -4.69327,2.226009 -7.84703,7.913129 -10.66667,12.055549 l 14.666681,-4.44443 7.33333,-1.22223 5.98149,6.33333 2.01851,5.33333 c -2.72032,-0.0572 -6.29832,-0.90982 -8.61111,-2.42592 -1.43022,-0.93754 -2.13911,-2.61031 -4.05556,-2.55556 -1.73865,0.0497 -3.687801,1.1301 -5.333331,1.64815 -4.89415,1.54075 -9.77338,3.60264 -14.66667,5.01851 -4.97774,1.44033 -6.14184,-3.22559 -4.5,-7.01851 0.58509,-1.35166 1.3007,-2.70345 2,-4 1.22817,-2.27712 2.8155,-4.29175 3.83333,-6.666667 -14.44897,7.042367 -23.21779,20.075037 -32.57408,32.666667 -2.69666,3.62915 -5.83349,7.00277 -8.44444,10.66667 -0.74469,1.045 -1.43956,3.39244 -3.01852,3.44444 -1.48153,0.0488 -1.89431,-1.62287 -1.88889,-2.77778 0.012,-2.56211 1.55286,-4.83939 1.87038,-7.33333 0.16984,-1.33409 -0.3317,-3.17503 0.53703,-4.33333 1.46427,-1.95236 4.81923,-1.69841 6.5926,-3.68518 4.11706,-4.61253 7.99675,-10.65312 11.12963,-15.98149 1.00019,-1.70113 1.31074,-3.7756 2.62962,-5.27777 4.15881,-4.73677 10.29882,-7.15127 13.83334,-12.72223 -3.78599,-0.77946 -7.81198,-1.877889 -11.33334,-3.5 -2.16788,-0.998637 -4.28318,-2.695353 -6.66666,-3.09259 -4.92365,-0.820608 -7.70844,2.301147 -12,3.59259 -3.55609,1.070119 -9.1464,-2.835714 -11,-5.666667 -2.9074,-4.440389 1.59973,-11.14448 5.66666,-13.055562 7.85432,-3.690796 17.10949,-1.957876 25.33334,-4.185181 8.80831,-2.385589 15.88491,-8.429891 25.33333,-9.370371 6.13412,-0.610576 12.248691,0.007 18.000011,2.203705 5.40278,2.063568 12.35279,5.71113 18,2.462972 3.05718,-1.758433 5.38171,-6.552399 4.35184,-10.055563 -1.22555,-4.168813 -5.35998,-6.611246 -8.35184,-9.388885 -3.4549,-3.20752 -5.13367,-7.241526 -4.61112,-11.944448 0.93488,-8.413696 8.07782,-5.219116 12.61112,-2.333333 2.37224,1.510111 4.74974,1.248728 5.33333,4.333333 z\"/></svg>';\nconst EM_SVG =\n '<svg viewBox=\"0 0 512 512\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M48 64C21.5 64 0 85.5 0 112c0 15.1 7.1 29.3 19.2 38.4L236.8 313.6c11.4 8.5 27 8.5 38.4 0L492.8 150.4c12.1-9.1 19.2-23.3 19.2-38.4c0-26.5-21.5-48-48-48H48zM0 176V384c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V176L294.4 339.2c-22.8 17.1-54 17.1-76.8 0L0 176z\"/></svg>';\n\nexport const NETWORKS: Readonly<Record<NetworkId, NetworkDef>> = {\n x: { id: 'x', label: 'X (Twitter)', color: '#000000', open: 'popup', svg: X_SVG },\n bs: { id: 'bs', label: 'Bluesky', color: '#0285FF', open: 'tab', svg: BS_SVG },\n th: { id: 'th', label: 'Threads', color: '#000000', open: 'tab', svg: TH_SVG },\n wa: { id: 'wa', label: 'WhatsApp', color: '#25D366', open: 'tab', svg: WA_SVG },\n tg: { id: 'tg', label: 'Telegram', color: '#0088cc', open: 'tab', svg: TG_SVG },\n li: { id: 'li', label: 'LinkedIn', color: '#0077b5', open: 'popup', svg: LI_SVG },\n rd: { id: 'rd', label: 'Reddit', color: '#FF4500', open: 'popup', svg: RD_SVG },\n no: { id: 'no', label: 'Nostr', color: '#8e44ad', open: 'copy', svg: NO_SVG },\n em: { id: 'em', label: 'Email', color: '#666666', open: 'email', svg: EM_SVG },\n} as const;\n\nexport const ALL_NETWORKS: readonly NetworkId[] = [\n 'x', 'bs', 'th', 'wa', 'tg', 'li', 'rd', 'no', 'em',\n] as const;\n","import type { NetworkId } from './networks.js';\n\nexport interface BuildLinkInput {\n network: NetworkId;\n title: string;\n url: string;\n /** Handle X opcional (sin @). Si está, se añade \"{title} by @{handle}\" al tweet. */\n xHandle?: string;\n /** Conector \"by\" según locale (i18n). Default \"by\". */\n byWord?: string;\n}\n\n/**\n * Construye la URL del share-intent de cada red. No abre nada, solo devuelve\n * la cadena. Para Nostr (copy-only) devuelve cadena vacía — el contenido\n * que se copia se construye con `buildNostrPayload()`.\n */\nexport function buildShareLink(input: BuildLinkInput): string {\n const { network, title, url, xHandle, byWord = 'by' } = input;\n const txt = encodeURIComponent(title);\n const urlEnc = encodeURIComponent(url);\n\n const xText = xHandle\n ? encodeURIComponent(`${title} ${byWord} @${xHandle.replace(/^@/, '')}`)\n : txt;\n\n switch (network) {\n case 'x':\n return `https://twitter.com/intent/tweet?text=${xText}&url=${urlEnc}`;\n case 'bs':\n return `https://bsky.app/intent/compose?text=${encodeURIComponent(`${title} ${url}`)}`;\n case 'th':\n return `https://www.threads.net/intent/post?text=${encodeURIComponent(`${title} ${url}`)}`;\n case 'wa':\n return `https://api.whatsapp.com/send?text=${txt}%20${urlEnc}`;\n case 'tg':\n return `https://t.me/share/url?url=${urlEnc}&text=${txt}`;\n case 'li':\n return `https://www.linkedin.com/sharing/share-offsite/?url=${urlEnc}`;\n case 'rd':\n return `https://www.reddit.com/submit?url=${urlEnc}&title=${txt}`;\n case 'em':\n return `mailto:?subject=${txt}&body=${urlEnc}`;\n case 'no':\n return '';\n }\n}\n\n/**\n * Payload Nostr: el botón Nostr copia esto al portapapeles porque no hay\n * un share-intent oficial. Hashtag configurable.\n */\nexport function buildNostrPayload(\n title: string,\n url: string,\n hashtag = 'oksigenia',\n): string {\n return `${title}\\n${url}\\n#${hashtag}`;\n}\n","// Heredado del plugin WP oksigenia-share v7.2.\n// Diccionario in-source para evitar fetch en runtime.\n\nexport type LocaleCode = 'en' | 'es' | 'it' | 'nl' | 'de' | 'pt' | 'gn' | 'sv';\n\nexport interface Translation {\n /** Label \"SHARE\" en caps. */\n share: string;\n /** Conector \"by\" usado en el tweet \"{title} by @user\". */\n by: string;\n /** aria-label \"Share on %s\". %s se reemplaza con el nombre de red. */\n shareOn: (network: string) => string;\n /** aria-label del botón de email. */\n shareEmail: string;\n /** aria-label del botón Nostr (copy-only). */\n copyLink: string;\n /** Anunciado por aria-live cuando se copia algo. */\n copied: string;\n /** Prompt fallback cuando clipboard no disponible. */\n copyPrompt: string;\n}\n\nconst DICT: Readonly<Record<LocaleCode, Translation>> = {\n en: {\n share: 'SHARE', by: 'by',\n shareOn: (n) => `Share on ${n}`,\n shareEmail: 'Share by email',\n copyLink: 'Copy link to clipboard',\n copied: 'Copied to clipboard',\n copyPrompt: 'Copy this:',\n },\n es: {\n share: 'COMPARTIR', by: 'por',\n shareOn: (n) => `Compartir en ${n}`,\n shareEmail: 'Compartir por email',\n copyLink: 'Copiar enlace al portapapeles',\n copied: 'Copiado al portapapeles',\n copyPrompt: 'Copia esto:',\n },\n it: {\n share: 'CONDIVIDI', by: 'da',\n shareOn: (n) => `Condividi su ${n}`,\n shareEmail: 'Condividi via email',\n copyLink: 'Copia il link negli appunti',\n copied: 'Copiato negli appunti',\n copyPrompt: 'Copia questo:',\n },\n nl: {\n share: 'DELEN', by: 'door',\n shareOn: (n) => `Deel op ${n}`,\n shareEmail: 'Per e-mail delen',\n copyLink: 'Link kopiëren naar klembord',\n copied: 'Gekopieerd naar klembord',\n copyPrompt: 'Kopieer dit:',\n },\n de: {\n share: 'TEILEN', by: 'von',\n shareOn: (n) => `Auf ${n} teilen`,\n shareEmail: 'Per E-Mail teilen',\n copyLink: 'Link in die Zwischenablage kopieren',\n copied: 'In die Zwischenablage kopiert',\n copyPrompt: 'Dies kopieren:',\n },\n pt: {\n share: 'PARTILHAR', by: 'por',\n shareOn: (n) => `Partilhar no ${n}`,\n shareEmail: 'Partilhar por email',\n copyLink: 'Copiar ligação para a área de transferência',\n copied: 'Copiado para a área de transferência',\n copyPrompt: 'Copiar isto:',\n },\n gn: {\n share: 'MOASÃI', by: 'por',\n shareOn: (n) => `Emoasãi ${n}-pe`,\n shareEmail: 'Emoasãi email rupive',\n copyLink: 'Ekopia link portapapeles-pe',\n copied: 'Oñekopia portapapeles-pe',\n copyPrompt: 'Ekopia kóva:',\n },\n sv: {\n share: 'DELA', by: 'av',\n shareOn: (n) => `Dela på ${n}`,\n shareEmail: 'Dela via e-post',\n copyLink: 'Kopiera länk till urklipp',\n copied: 'Kopierat till urklipp',\n copyPrompt: 'Kopiera detta:',\n },\n};\n\n/**\n * Devuelve la traducción para un locale. Acepta variantes regionales:\n * `es-PY`, `es-ES`, `pt-BR` → todas caen al código base si existe.\n * Fallback final: `en`.\n */\nexport function getTranslation(locale: string): Translation {\n const base = locale.toLowerCase().split(/[-_]/)[0] as LocaleCode;\n return DICT[base] ?? DICT.en;\n}\n\nexport function supportedLocales(): readonly LocaleCode[] {\n return Object.keys(DICT) as LocaleCode[];\n}\n","import {\n ALL_NETWORKS,\n NETWORKS,\n type NetworkId,\n type OpenStrategy,\n} from './networks.js';\nimport { buildShareLink, buildNostrPayload } from './build-link.js';\nimport { getTranslation, type LocaleCode, type Translation } from './translations.js';\n\nexport interface ShareOptions {\n /** URL absoluta a compartir. Si se omite, `location.href` al render. */\n url?: string;\n /** Título o texto del share. Si se omite, `document.title`. */\n title?: string;\n /** Locale (es, en, gn, …). Default: navegador, fallback en. */\n locale?: LocaleCode | string;\n /** Subconjunto/orden de redes. Default: las 9 en orden canónico. */\n networks?: readonly NetworkId[];\n /** Redes a OCULTAR en viewport ≥769px. */\n hideDesktop?: readonly NetworkId[];\n /** Redes a OCULTAR en viewport ≤768px. */\n hideMobile?: readonly NetworkId[];\n /** Handle de X opcional (con o sin @). */\n xHandle?: string;\n /** Hashtag opcional para el payload Nostr. Default \"oksigenia\". */\n nostrHashtag?: string;\n /** Mostrar el texto \"SHARE\" a la izquierda. Default true. */\n showLabel?: boolean;\n}\n\ninterface PreparedButton {\n id: NetworkId;\n ariaLabel: string;\n type: OpenStrategy;\n link: string;\n copyPayload?: string;\n bgColor: string;\n svg: string;\n hideDesktop: boolean;\n hideMobile: boolean;\n}\n\nfunction prepareButtons(opts: Required<Pick<ShareOptions, 'title' | 'url'>> & ShareOptions, t: Translation): PreparedButton[] {\n const list = opts.networks ?? ALL_NETWORKS;\n const hideDesk = new Set<NetworkId>(opts.hideDesktop ?? []);\n const hideMob = new Set<NetworkId>(opts.hideMobile ?? []);\n const out: PreparedButton[] = [];\n for (const id of list) {\n const def = NETWORKS[id];\n if (!def) continue;\n const label = id === 'em'\n ? t.shareEmail\n : id === 'no'\n ? t.copyLink\n : t.shareOn(def.label);\n const link = buildShareLink({\n network: id,\n title: opts.title,\n url: opts.url,\n xHandle: opts.xHandle,\n byWord: t.by,\n });\n const button: PreparedButton = {\n id,\n ariaLabel: label,\n type: def.open,\n link,\n bgColor: def.color,\n svg: def.svg,\n hideDesktop: hideDesk.has(id),\n hideMobile: hideMob.has(id),\n };\n if (id === 'no') {\n button.copyPayload = buildNostrPayload(opts.title, opts.url, opts.nostrHashtag);\n }\n out.push(button);\n }\n return out;\n}\n\n/**\n * Construye el markup HTML del panel de botones. NO lo monta en el DOM;\n * el consumidor decide dónde inyectarlo y si quiere shadow DOM o no.\n */\nexport function buildShareHtml(opts: ShareOptions = {}): string {\n const resolved: Required<Pick<ShareOptions, 'title' | 'url' | 'locale' | 'showLabel'>> & ShareOptions = {\n title: opts.title ?? (typeof document !== 'undefined' ? document.title : ''),\n url: opts.url ?? (typeof location !== 'undefined' ? location.href : ''),\n locale: opts.locale ?? (typeof navigator !== 'undefined' ? navigator.language : 'en'),\n showLabel: opts.showLabel ?? true,\n networks: opts.networks,\n xHandle: opts.xHandle,\n nostrHashtag: opts.nostrHashtag,\n };\n const t = getTranslation(resolved.locale);\n const buttons = prepareButtons(resolved, t);\n\n const labelHtml = resolved.showLabel\n ? `<span class=\"oksigenia-label\" aria-hidden=\"true\">${escapeHtml(t.share)}</span>`\n : '';\n\n const buttonsHtml = buttons\n .map((b) => {\n const dataLink = b.link ? ` data-link=\"${escapeAttr(b.link)}\"` : '';\n const dataCopy = b.copyPayload ? ` data-copy=\"${escapeAttr(b.copyPayload)}\"` : '';\n const visClass = `${b.hideDesktop ? ' hide-desktop' : ''}${b.hideMobile ? ' hide-mobile' : ''}`;\n return `<button type=\"button\" class=\"oksigenia-btn o-${b.id}${visClass}\" style=\"background:${b.bgColor}\" data-type=\"${b.type}\"${dataLink}${dataCopy} aria-label=\"${escapeAttr(b.ariaLabel)}\">${b.svg}<span class=\"oksigenia-sr-only\" aria-live=\"polite\"></span></button>`;\n })\n .join('');\n\n // role=\"group\" + aria-label cumplen recomendaciones de A11Y / W3C.\n return `<div class=\"oksigenia-panel\" role=\"group\" aria-label=\"${escapeAttr(t.share)}\">${labelHtml}${buttonsHtml}</div>`;\n}\n\nfunction escapeHtml(s: string): string {\n return s.replace(/[&<>\"]/g, (c) => ({\n '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;',\n }[c] ?? c));\n}\nfunction escapeAttr(s: string): string {\n return escapeHtml(s).replace(/'/g, '&#39;');\n}\n\n/**\n * Engancha los listeners de click a los botones renderizados dentro de\n * `root`. Devuelve un dispose para limpiar.\n */\nexport function bindShareEvents(root: ParentNode, opts: ShareOptions = {}): () => void {\n const locale = opts.locale ?? (typeof navigator !== 'undefined' ? navigator.language : 'en');\n const t = getTranslation(locale);\n const buttons = Array.from(root.querySelectorAll<HTMLButtonElement>('.oksigenia-btn'));\n const handler = (e: Event) => {\n e.preventDefault();\n const btn = e.currentTarget as HTMLButtonElement;\n openShare(btn, t);\n };\n for (const b of buttons) b.addEventListener('click', handler);\n return () => {\n for (const b of buttons) b.removeEventListener('click', handler);\n };\n}\n\nfunction openShare(btn: HTMLButtonElement, t: Translation): void {\n const link = btn.getAttribute('data-link') ?? '';\n const type = (btn.getAttribute('data-type') ?? 'tab') as OpenStrategy;\n const live = btn.querySelector<HTMLElement>('.oksigenia-sr-only');\n\n if (type === 'popup') {\n const w = 600;\n const h = 400;\n const left = (window.innerWidth - w) / 2;\n const top = (window.innerHeight - h) / 2;\n window.open(link, 'oksigenia_share', `width=${w},height=${h},top=${top},left=${left},scrollbars=no`);\n return;\n }\n if (type === 'tab') {\n window.open(link, '_blank', 'noopener');\n return;\n }\n if (type === 'email') {\n window.location.href = link;\n return;\n }\n if (type === 'copy') {\n const text = btn.getAttribute('data-copy') ?? '';\n const done = () => {\n btn.classList.add('copied');\n if (live) live.textContent = t.copied;\n window.setTimeout(() => {\n btn.classList.remove('copied');\n if (live) live.textContent = '';\n }, 2000);\n };\n if (navigator.clipboard?.writeText) {\n navigator.clipboard.writeText(text).then(done).catch(() => {\n window.prompt(t.copyPrompt, text);\n });\n } else {\n window.prompt(t.copyPrompt, text);\n }\n }\n}\n","// CSS del panel de botones. Se inyecta inline en el Shadow DOM\n// (cuando se usa el web component) o se importa como `dist/styles.css`\n// si se usa el helper imperativo en light DOM.\n\nexport const SHARE_CSS = `\n:host { display: block; }\n.oksigenia-panel {\n display: flex;\n align-items: center;\n gap: 10px;\n margin: 30px 0;\n padding: 10px 18px;\n background: rgba(0,0,0,0.03);\n border-radius: 60px;\n width: fit-content;\n flex-wrap: wrap;\n font-family: system-ui, -apple-system, \"Segoe UI\", Roboto, sans-serif;\n}\n.oksigenia-label {\n font-weight: 800;\n font-size: 11px;\n margin-right: 12px;\n text-transform: uppercase;\n color: currentColor;\n letter-spacing: 1.5px;\n}\n.oksigenia-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 44px;\n height: 44px;\n border-radius: 50%;\n border: none;\n cursor: pointer;\n transition: transform .2s, filter .2s, box-shadow .2s;\n box-shadow: 0 3px 6px rgba(0,0,0,0.1);\n position: relative;\n text-decoration: none !important;\n padding: 0;\n overflow: visible;\n}\n.oksigenia-btn:hover {\n transform: translateY(-3px);\n filter: brightness(1.1);\n box-shadow: 0 5px 12px rgba(0,0,0,0.2);\n}\n.oksigenia-btn:focus-visible {\n outline: 2px solid currentColor;\n outline-offset: 3px;\n}\n.oksigenia-btn svg {\n width: 22px;\n height: 22px;\n fill: #fff;\n pointer-events: none;\n}\n.oksigenia-sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0,0,0,0);\n white-space: nowrap;\n border: 0;\n}\n.o-no.copied { background: #00a884 !important; }\n@media (min-width: 769px) { .hide-desktop { display: none !important; } }\n@media (max-width: 768px) { .hide-mobile { display: none !important; } }\n@media (max-width: 480px) {\n .oksigenia-panel { padding: 8px 12px; gap: 8px; justify-content: center; }\n .oksigenia-btn { width: 38px; height: 38px; }\n .oksigenia-btn svg { width: 18px; height: 18px; }\n .oksigenia-label { flex-basis: 100%; width: 100%; margin: 0 0 6px; text-align: center; }\n}\n@media (prefers-reduced-motion: reduce) {\n .oksigenia-btn { transition: none; }\n .oksigenia-btn:hover { transform: none; }\n}\n`;\n","// Web component <oksigenia-share>. Importar este módulo registra el\n// custom element. Usa Shadow DOM para encapsular CSS — funciona sin\n// que el host site cargue ningún stylesheet.\n\nimport { buildShareHtml, bindShareEvents } from './render.js';\nimport { SHARE_CSS } from './styles.js';\nimport { ALL_NETWORKS, type NetworkId } from './networks.js';\n\nconst OBSERVED = [\n 'url',\n 'title',\n 'locale',\n 'networks',\n 'hide-desktop',\n 'hide-mobile',\n 'x-handle',\n 'nostr-hashtag',\n 'no-label',\n] as const;\n\nexport class OksigeniaShareElement extends HTMLElement {\n static get observedAttributes(): readonly string[] {\n return OBSERVED;\n }\n\n private _dispose: (() => void) | null = null;\n\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n }\n\n connectedCallback(): void {\n this.render();\n }\n\n disconnectedCallback(): void {\n this._dispose?.();\n this._dispose = null;\n }\n\n attributeChangedCallback(): void {\n if (this.isConnected) this.render();\n }\n\n private parseNetworks(attr: string | null): readonly NetworkId[] | undefined {\n if (!attr) return undefined;\n const ids = attr.split(/[,\\s]+/).filter(Boolean) as NetworkId[];\n return ids.filter((id) => (ALL_NETWORKS as readonly string[]).includes(id));\n }\n\n private render(): void {\n const shadow = this.shadowRoot;\n if (!shadow) return;\n this._dispose?.();\n\n const html = buildShareHtml({\n url: this.getAttribute('url') ?? undefined,\n title: this.getAttribute('title') ?? undefined,\n locale: this.getAttribute('locale') ?? undefined,\n networks: this.parseNetworks(this.getAttribute('networks')),\n hideDesktop: this.parseNetworks(this.getAttribute('hide-desktop')),\n hideMobile: this.parseNetworks(this.getAttribute('hide-mobile')),\n xHandle: this.getAttribute('x-handle') ?? undefined,\n nostrHashtag: this.getAttribute('nostr-hashtag') ?? undefined,\n showLabel: !this.hasAttribute('no-label'),\n });\n shadow.innerHTML = `<style>${SHARE_CSS}</style>${html}`;\n this._dispose = bindShareEvents(shadow, {\n locale: this.getAttribute('locale') ?? undefined,\n });\n }\n}\n\nif (typeof customElements !== 'undefined' && !customElements.get('oksigenia-share')) {\n customElements.define('oksigenia-share', OksigeniaShareElement);\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'oksigenia-share': OksigeniaShareElement;\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/networks.ts","../src/build-link.ts","../src/translations.ts","../src/render.ts","../src/styles.ts","../src/web-component.ts"],"names":[],"mappings":"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","file":"web-component.js","sourcesContent":["// SVGs y metadatos de las redes. Heredado del plugin WordPress\n// oksigenia-share v7.2 (https://wordpress.org/plugins/oksigenia-share/).\n\nexport type NetworkId =\n | 'x'\n | 'bs'\n | 'th'\n | 'wa'\n | 'tg'\n | 'li'\n | 'rd'\n | 'no'\n | 'em';\n\nexport type OpenStrategy = 'popup' | 'tab' | 'copy' | 'email';\n\nexport interface NetworkDef {\n readonly id: NetworkId;\n readonly label: string;\n readonly color: string;\n readonly open: OpenStrategy;\n readonly svg: string;\n}\n\nconst X_SVG =\n '<svg viewBox=\"0 0 512 512\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M389.2 48h70.6L305.6 224.2 487 464H345L233.7 318.6 106.5 464H35.8L200.7 275.5 26.8 48H172.4L272.9 180.9 389.2 48zM364.4 421.8h39.1L151.1 88h-42L364.4 421.8z\"/></svg>';\nconst BS_SVG =\n '<svg viewBox=\"0 0 600 530\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M135.7 44.4C202.6 94.7 274.6 196.7 301 251.4c26.4-54.7 98.4-156.7 165.3-207C512.7 9.5 587 -16.3 587 67.4c0 16.7-9.6 140.5-15.2 160.6-19.6 70-91 87.8-154.4 77 110.9 18.9 139.1 81.4 78.2 144-115.7 119-166.4-29.8-179.4-67.9-2.4-7-3.5-10.3-3.5-7.5 0 -2.8-1.1 .5-3.5 7.5-13 38.1-63.7 186.9-179.4 67.9-60.9-62.6-32.7-125.1 78.2-144-63.5 10.8-134.8-7.1-154.4-77C48 207.8 38.4 84.1 38.4 67.4 38.4-16.3 112.7 9.5 135.7 44.4z\"/></svg>';\nconst TH_SVG =\n '<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M12.186 24h-.007c-3.581-.024-6.334-1.205-8.184-3.509C2.35 18.44 1.5 15.586 1.472 12.01v-.017c.03-3.579.879-6.43 2.525-8.482C5.845 1.205 8.6.024 12.18 0h.014c2.746.02 5.043.725 6.826 2.098 1.677 1.29 2.858 3.13 3.509 5.467l-2.04.569c-1.104-3.96-3.898-5.984-8.304-6.015-2.91.022-5.11.936-6.54 2.717C4.307 6.504 3.616 8.914 3.589 12c.027 3.086.718 5.496 2.057 7.164 1.43 1.783 3.631 2.698 6.54 2.717 2.623-.02 4.358-.631 5.8-2.045 1.647-1.613 1.618-3.593 1.09-4.798-.31-.71-.873-1.3-1.634-1.75-.192 1.352-.622 2.446-1.284 3.272-.886 1.102-2.14 1.704-3.73 1.79-1.202.065-2.361-.218-3.259-.801-1.063-.689-1.685-1.74-1.752-2.964-.065-1.19.408-2.285 1.33-3.082.88-.76 2.119-1.207 3.583-1.291a13.853 13.853 0 0 1 3.02.142c-.126-.742-.375-1.332-.749-1.757-.513-.586-1.308-.883-2.359-.89h-.029c-.844 0-1.992.232-2.721 1.32L7.734 7.847c.98-1.454 2.568-2.256 4.478-2.256h.044c3.194.02 5.097 1.975 5.287 5.388.108.046.216.094.323.144 1.49.7 2.58 1.761 3.154 3.07.797 1.82.871 4.79-1.548 7.158-1.85 1.81-4.094 2.628-7.277 2.65zm1.003-11.69c-.242 0-.487.007-.739.021-1.836.103-2.98.946-2.916 2.143.067 1.256 1.452 1.839 2.784 1.767 1.224-.065 2.818-.543 3.086-3.71a10.5 10.5 0 0 0-2.215-.221z\"/></svg>';\nconst WA_SVG =\n '<svg viewBox=\"0 0 448 512\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M380.9 97.1C339 55.1 283.2 32 223.9 32c-122.4 0-222 99.6-222 222 0 39.1 10.2 77.3 29.6 111L0 480l117.7-30.9c32.4 17.7 68.9 27 106.1 27h.1c122.3 0 224.1-99.6 224.1-222 0-59.3-25.2-115-67.1-157zm-157 341.6c-33.2 0-65.7-8.9-94-25.7l-6.7-4-69.8 18.3L72 359.2l-4.4-7c-18.5-29.4-28.2-63.3-28.2-98.2 0-101.7 82.8-184.5 184.6-184.5 49.3 0 95.6 19.2 130.4 54.1 34.8 34.9 56.2 81.2 56.1 130.5 0 101.8-84.9 184.6-186.6 184.6zm101.2-138.2c-5.5-2.8-32.8-16.2-37.9-18-5.1-1.9-8.8-2.8-12.5 2.8-3.7 5.6-14.3 18-17.6 21.8-3.2 3.7-6.5 4.2-12 1.4-5.5-2.8-23.4-8.6-44.6-27.5-16.5-14.7-27.6-32.8-30.8-38.4-3.2-5.6-.3-8.6 2.5-11.4 2.5-2.5 5.5-6.5 8.3-9.7 2.8-3.2 3.7-5.5 5.5-9.2 1.9-3.7.9-6.9-.5-9.7-1.4-2.8-12.5-30.1-17.1-41.2-4.5-10.8-9.1-9.3-12.5-9.5-3.2-.2-6.9-.2-10.6-.2-3.7 0-9.7 1.4-14.8 6.9-5.1 5.6-19.4 19-19.4 46.3 0 27.3 19.9 53.7 22.6 57.4 2.8 3.7 39.1 59.7 94.8 83.8 13.2 5.8 23.5 9.2 31.5 11.8 13.3 4.2 25.4 3.6 35 2.2 10.7-1.6 32.8-13.4 37.4-26.4 4.6-13 4.6-24.1 3.2-26.4-1.3-2.5-5-3.9-10.5-6.6z\"/></svg>';\nconst TG_SVG =\n '<svg viewBox=\"0 0 448 512\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M446.7 98.6l-67.6 318.8c-5.1 22.5-18.4 28.1-37.3 17.5l-103-75.9-49.7 47.8c-5.5 5.5-10.1 10.1-20.7 10.1l7.4-104.9 190.9-172.5c8.3-7.4-1.8-11.5-12.9-4.1L117.8 284 16.2 252.2c-22.1-6.9-22.5-22.1 4.6-32.7L418.2 66.4c18.4-6.9 34.5 4.1 28.5 32.2z\"/></svg>';\nconst LI_SVG =\n '<svg viewBox=\"0 0 448 512\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M100.28 448H7.4V148.9h92.88zM53.79 108.1C24.09 108.1 0 83.5 0 53.8a53.79 53.79 0 0 1 107.58 0c0 29.7-24.1 54.3-53.79 54.3zM447.9 448h-92.68V302.4c0-34.7-.7-79.2-48.29-79.2-48.29 0-55.69 37.7-55.69 76.7V448h-92.78V148.9h89.08v40.8h1.3c12.4-23.5 42.69-48.3 87.88-48.3 94 0 111.28 61.9 111.28 142.3V448z\"/></svg>';\nconst RD_SVG =\n '<svg viewBox=\"0 0 512 512\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M201.5 305.5c-13.8 0-24.9-11.1-24.9-24.6 0-13.8 11.1-24.9 24.9-24.9 13.6 0 24.6 11.1 24.6 24.9 0 13.6-11.1 24.6-24.6 24.6zm129 41.2c-12.3 12.3-37.8 13.4-45.3 13.4-7.5 0-32.7-1.4-45-13.4-1.8-1.8-1.8-4.8 0-6.9 1.8-1.8 4.8-1.8 6.6 0 7.8 7.8 24.3 10.5 38.4 10.5s30.9-2.7 38.7-10.5c1.8-1.8 4.8-1.8 6.6 0 1.8 2.1 1.8 5.1 0 6.9zm-12.3-41.2c0-13.8 11.1-24.9 24.9-24.9 13.6 0 24.6 11.1 24.6 24.9 0 13.6-11.1 24.6-24.6 24.6-13.8 0-24.9-11.1-24.9-24.6zM504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-132.3-41.2c-9.4 0-17.7 3.9-23.8 9.9-22.8-15.6-52.8-25.8-86.1-27l17.4-78.9 55.5 12.3c0 13.6 11.1 24.6 24.6 24.6 13.8 0 24.9-11.4 24.9-24.9s-11.1-24.9-24.9-24.9c-9.6 0-17.7 5.7-21.6 13.5l-61.5-13.5c-3-.9-6 1.2-6.6 4.2l-19.2 86.7c-32.7 1.5-62.7 11.7-85.5 27.3-6-6.3-14.7-9.9-23.7-9.9-34.8 0-46.2 46.8-14.4 62.7-1.2 5.1-1.8 10.8-1.8 16.2 0 49.5 56.1 89.7 125.4 89.7 69.6 0 125.7-40.2 125.7-89.7 0-5.4-.6-11.4-2.1-16.5 31.5-15.9 19.8-62.4-14.4-62.4z\"/></svg>';\nconst NO_SVG =\n '<svg viewBox=\"0 0 170.66667 170\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M 80.014749,0.78606659 C 73.052769,1.9302826 66.167099,2.3642936 59.348089,4.5268096 38.835519,11.031957 21.050593,25.529048 10.848085,44.52681 -6.8624293,77.505 -0.92508032,121.67898 27.348086,147.13792 c 11.539173,10.3906 24.998793,17.01823 40.000003,20.62963 9.26968,2.23159 19.24599,2.5862 28.66667,1.27777 C 139.11925,163.05859 171.85692,124.19929 169.32958,80.52681 167.31241,45.669937 143.27583,13.848984 109.34809,4.2675526 100.31238,1.7158046 89.426889,-0.76084941 80.014749,0.78606659 M 136.01476,34.52681 c -2.37396,0 -11.65111,-0.914032 -11.03704,3.333333 0.44515,3.078919 4.97786,5.419108 7.01853,7.388886 2.78243,2.685771 4.44989,6.742004 4.6111,10.611114 0.43316,10.395773 -8.18644,14.669088 -14.53704,20.81482 -4.11595,3.983174 -1.16762,10.854736 -6.07406,15.018514 -5.28385,4.484059 -13.33279,3.273844 -19.314831,6.111114 -4.69327,2.226009 -7.84703,7.913129 -10.66667,12.055549 l 14.666681,-4.44443 7.33333,-1.22223 5.98149,6.33333 2.01851,5.33333 c -2.72032,-0.0572 -6.29832,-0.90982 -8.61111,-2.42592 -1.43022,-0.93754 -2.13911,-2.61031 -4.05556,-2.55556 -1.73865,0.0497 -3.687801,1.1301 -5.333331,1.64815 -4.89415,1.54075 -9.77338,3.60264 -14.66667,5.01851 -4.97774,1.44033 -6.14184,-3.22559 -4.5,-7.01851 0.58509,-1.35166 1.3007,-2.70345 2,-4 1.22817,-2.27712 2.8155,-4.29175 3.83333,-6.666667 -14.44897,7.042367 -23.21779,20.075037 -32.57408,32.666667 -2.69666,3.62915 -5.83349,7.00277 -8.44444,10.66667 -0.74469,1.045 -1.43956,3.39244 -3.01852,3.44444 -1.48153,0.0488 -1.89431,-1.62287 -1.88889,-2.77778 0.012,-2.56211 1.55286,-4.83939 1.87038,-7.33333 0.16984,-1.33409 -0.3317,-3.17503 0.53703,-4.33333 1.46427,-1.95236 4.81923,-1.69841 6.5926,-3.68518 4.11706,-4.61253 7.99675,-10.65312 11.12963,-15.98149 1.00019,-1.70113 1.31074,-3.7756 2.62962,-5.27777 4.15881,-4.73677 10.29882,-7.15127 13.83334,-12.72223 -3.78599,-0.77946 -7.81198,-1.877889 -11.33334,-3.5 -2.16788,-0.998637 -4.28318,-2.695353 -6.66666,-3.09259 -4.92365,-0.820608 -7.70844,2.301147 -12,3.59259 -3.55609,1.070119 -9.1464,-2.835714 -11,-5.666667 -2.9074,-4.440389 1.59973,-11.14448 5.66666,-13.055562 7.85432,-3.690796 17.10949,-1.957876 25.33334,-4.185181 8.80831,-2.385589 15.88491,-8.429891 25.33333,-9.370371 6.13412,-0.610576 12.248691,0.007 18.000011,2.203705 5.40278,2.063568 12.35279,5.71113 18,2.462972 3.05718,-1.758433 5.38171,-6.552399 4.35184,-10.055563 -1.22555,-4.168813 -5.35998,-6.611246 -8.35184,-9.388885 -3.4549,-3.20752 -5.13367,-7.241526 -4.61112,-11.944448 0.93488,-8.413696 8.07782,-5.219116 12.61112,-2.333333 2.37224,1.510111 4.74974,1.248728 5.33333,4.333333 z\"/></svg>';\nconst EM_SVG =\n '<svg viewBox=\"0 0 512 512\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M48 64C21.5 64 0 85.5 0 112c0 15.1 7.1 29.3 19.2 38.4L236.8 313.6c11.4 8.5 27 8.5 38.4 0L492.8 150.4c12.1-9.1 19.2-23.3 19.2-38.4c0-26.5-21.5-48-48-48H48zM0 176V384c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V176L294.4 339.2c-22.8 17.1-54 17.1-76.8 0L0 176z\"/></svg>';\n\nexport const NETWORKS: Readonly<Record<NetworkId, NetworkDef>> = {\n x: { id: 'x', label: 'X (Twitter)', color: '#000000', open: 'popup', svg: X_SVG },\n bs: { id: 'bs', label: 'Bluesky', color: '#0285FF', open: 'tab', svg: BS_SVG },\n th: { id: 'th', label: 'Threads', color: '#000000', open: 'tab', svg: TH_SVG },\n wa: { id: 'wa', label: 'WhatsApp', color: '#25D366', open: 'tab', svg: WA_SVG },\n tg: { id: 'tg', label: 'Telegram', color: '#0088cc', open: 'tab', svg: TG_SVG },\n li: { id: 'li', label: 'LinkedIn', color: '#0077b5', open: 'popup', svg: LI_SVG },\n rd: { id: 'rd', label: 'Reddit', color: '#FF4500', open: 'popup', svg: RD_SVG },\n no: { id: 'no', label: 'Nostr', color: '#8e44ad', open: 'copy', svg: NO_SVG },\n em: { id: 'em', label: 'Email', color: '#666666', open: 'email', svg: EM_SVG },\n} as const;\n\nexport const ALL_NETWORKS: readonly NetworkId[] = [\n 'x', 'bs', 'th', 'wa', 'tg', 'li', 'rd', 'no', 'em',\n] as const;\n","import type { NetworkId } from './networks.js';\n\nexport interface BuildLinkInput {\n network: NetworkId;\n title: string;\n url: string;\n /** Handle X opcional (sin @). Si está, se añade \"{title} by @{handle}\" al tweet. */\n xHandle?: string;\n /** Conector \"by\" según locale (i18n). Default \"by\". */\n byWord?: string;\n}\n\n/**\n * Construye la URL del share-intent de cada red. No abre nada, solo devuelve\n * la cadena. Para Nostr (copy-only) devuelve cadena vacía — el contenido\n * que se copia se construye con `buildNostrPayload()`.\n */\nexport function buildShareLink(input: BuildLinkInput): string {\n const { network, title, url, xHandle, byWord = 'by' } = input;\n const txt = encodeURIComponent(title);\n const urlEnc = encodeURIComponent(url);\n\n const xText = xHandle\n ? encodeURIComponent(`${title} ${byWord} @${xHandle.replace(/^@/, '')}`)\n : txt;\n\n switch (network) {\n case 'x':\n return `https://twitter.com/intent/tweet?text=${xText}&url=${urlEnc}`;\n case 'bs':\n return `https://bsky.app/intent/compose?text=${encodeURIComponent(`${title} ${url}`)}`;\n case 'th':\n return `https://www.threads.net/intent/post?text=${encodeURIComponent(`${title} ${url}`)}`;\n case 'wa':\n return `https://api.whatsapp.com/send?text=${txt}%20${urlEnc}`;\n case 'tg':\n return `https://t.me/share/url?url=${urlEnc}&text=${txt}`;\n case 'li':\n return `https://www.linkedin.com/sharing/share-offsite/?url=${urlEnc}`;\n case 'rd':\n return `https://www.reddit.com/submit?url=${urlEnc}&title=${txt}`;\n case 'em':\n return `mailto:?subject=${txt}&body=${urlEnc}`;\n case 'no':\n return '';\n }\n}\n\n/**\n * Payload Nostr: el botón Nostr copia esto al portapapeles porque no hay\n * un share-intent oficial. Hashtag configurable.\n */\nexport function buildNostrPayload(\n title: string,\n url: string,\n hashtag = 'oksigenia',\n): string {\n return `${title}\\n${url}\\n#${hashtag}`;\n}\n","// Heredado del plugin WP oksigenia-share v7.2.\n// Diccionario in-source para evitar fetch en runtime.\n\nexport type LocaleCode = 'en' | 'es' | 'it' | 'nl' | 'de' | 'pt' | 'gn' | 'sv';\n\nexport interface Translation {\n /** Label \"SHARE\" en caps. */\n share: string;\n /** Conector \"by\" usado en el tweet \"{title} by @user\". */\n by: string;\n /** aria-label \"Share on %s\". %s se reemplaza con el nombre de red. */\n shareOn: (network: string) => string;\n /** aria-label del botón de email. */\n shareEmail: string;\n /** @deprecated Ya no se usa: el botón Nostr sigue el patrón \"Share on {network}\".\n * Se mantiene la clave para no romper el tipo `Translation` exportado. */\n copyLink: string;\n /** Anunciado por aria-live cuando se copia algo. */\n copied: string;\n /** Prompt fallback cuando clipboard no disponible. */\n copyPrompt: string;\n}\n\nconst DICT: Readonly<Record<LocaleCode, Translation>> = {\n en: {\n share: 'SHARE', by: 'by',\n shareOn: (n) => `Share on ${n}`,\n shareEmail: 'Share by email',\n copyLink: 'Copy link to clipboard',\n copied: 'Copied to clipboard',\n copyPrompt: 'Copy this:',\n },\n es: {\n share: 'COMPARTIR', by: 'por',\n shareOn: (n) => `Compartir en ${n}`,\n shareEmail: 'Compartir por email',\n copyLink: 'Copiar enlace al portapapeles',\n copied: 'Copiado al portapapeles',\n copyPrompt: 'Copia esto:',\n },\n it: {\n share: 'CONDIVIDI', by: 'da',\n shareOn: (n) => `Condividi su ${n}`,\n shareEmail: 'Condividi via email',\n copyLink: 'Copia il link negli appunti',\n copied: 'Copiato negli appunti',\n copyPrompt: 'Copia questo:',\n },\n nl: {\n share: 'DELEN', by: 'door',\n shareOn: (n) => `Deel op ${n}`,\n shareEmail: 'Per e-mail delen',\n copyLink: 'Link kopiëren naar klembord',\n copied: 'Gekopieerd naar klembord',\n copyPrompt: 'Kopieer dit:',\n },\n de: {\n share: 'TEILEN', by: 'von',\n shareOn: (n) => `Auf ${n} teilen`,\n shareEmail: 'Per E-Mail teilen',\n copyLink: 'Link in die Zwischenablage kopieren',\n copied: 'In die Zwischenablage kopiert',\n copyPrompt: 'Dies kopieren:',\n },\n pt: {\n share: 'PARTILHAR', by: 'por',\n shareOn: (n) => `Partilhar no ${n}`,\n shareEmail: 'Partilhar por email',\n copyLink: 'Copiar ligação para a área de transferência',\n copied: 'Copiado para a área de transferência',\n copyPrompt: 'Copiar isto:',\n },\n gn: {\n share: 'MOASÃI', by: 'por',\n shareOn: (n) => `Emoasãi ${n}-pe`,\n shareEmail: 'Emoasãi email rupive',\n copyLink: 'Ekopia link portapapeles-pe',\n copied: 'Oñekopia portapapeles-pe',\n copyPrompt: 'Ekopia kóva:',\n },\n sv: {\n share: 'DELA', by: 'av',\n shareOn: (n) => `Dela på ${n}`,\n shareEmail: 'Dela via e-post',\n copyLink: 'Kopiera länk till urklipp',\n copied: 'Kopierat till urklipp',\n copyPrompt: 'Kopiera detta:',\n },\n};\n\n/**\n * Devuelve la traducción para un locale. Acepta variantes regionales:\n * `es-PY`, `es-ES`, `pt-BR` → todas caen al código base si existe.\n * Fallback final: `en`.\n */\nexport function getTranslation(locale: string): Translation {\n const base = locale.toLowerCase().split(/[-_]/)[0] as LocaleCode;\n return DICT[base] ?? DICT.en;\n}\n\nexport function supportedLocales(): readonly LocaleCode[] {\n return Object.keys(DICT) as LocaleCode[];\n}\n","import {\n ALL_NETWORKS,\n NETWORKS,\n type NetworkId,\n type OpenStrategy,\n} from './networks.js';\nimport { buildShareLink, buildNostrPayload } from './build-link.js';\nimport { getTranslation, type LocaleCode, type Translation } from './translations.js';\n\nexport interface ShareOptions {\n /** URL absoluta a compartir. Si se omite, `location.href` al render. */\n url?: string;\n /** Título o texto del share. Si se omite, `document.title`. */\n title?: string;\n /** Locale (es, en, gn, …). Default: navegador, fallback en. */\n locale?: LocaleCode | string;\n /** Subconjunto/orden de redes. Default: las 9 en orden canónico. */\n networks?: readonly NetworkId[];\n /** Redes a OCULTAR en viewport ≥769px. */\n hideDesktop?: readonly NetworkId[];\n /** Redes a OCULTAR en viewport ≤768px. */\n hideMobile?: readonly NetworkId[];\n /** Handle de X opcional (con o sin @). */\n xHandle?: string;\n /** Hashtag opcional para el payload Nostr. Default \"oksigenia\". */\n nostrHashtag?: string;\n /** Mostrar el texto \"SHARE\" a la izquierda. Default true. */\n showLabel?: boolean;\n}\n\ninterface PreparedButton {\n id: NetworkId;\n ariaLabel: string;\n type: OpenStrategy;\n link: string;\n copyPayload?: string;\n bgColor: string;\n svg: string;\n hideDesktop: boolean;\n hideMobile: boolean;\n}\n\nfunction prepareButtons(opts: Required<Pick<ShareOptions, 'title' | 'url'>> & ShareOptions, t: Translation): PreparedButton[] {\n const list = opts.networks ?? ALL_NETWORKS;\n const hideDesk = new Set<NetworkId>(opts.hideDesktop ?? []);\n const hideMob = new Set<NetworkId>(opts.hideMobile ?? []);\n const out: PreparedButton[] = [];\n for (const id of list) {\n const def = NETWORKS[id];\n if (!def) continue;\n // Nostr (id 'no') used to get t.copyLink (\"Copy link to clipboard\"), which\n // a screen reader announced with no mention of Nostr. It now follows the\n // same \"Share on {network}\" pattern as the rest; the copy action is still\n // announced via the aria-live \"Copied\" message on click.\n const label = id === 'em'\n ? t.shareEmail\n : t.shareOn(def.label);\n const link = buildShareLink({\n network: id,\n title: opts.title,\n url: opts.url,\n xHandle: opts.xHandle,\n byWord: t.by,\n });\n const button: PreparedButton = {\n id,\n ariaLabel: label,\n type: def.open,\n link,\n bgColor: def.color,\n svg: def.svg,\n hideDesktop: hideDesk.has(id),\n hideMobile: hideMob.has(id),\n };\n if (id === 'no') {\n button.copyPayload = buildNostrPayload(opts.title, opts.url, opts.nostrHashtag);\n }\n out.push(button);\n }\n return out;\n}\n\n/**\n * Construye el markup HTML del panel de botones. NO lo monta en el DOM;\n * el consumidor decide dónde inyectarlo y si quiere shadow DOM o no.\n */\nexport function buildShareHtml(opts: ShareOptions = {}): string {\n const resolved: Required<Pick<ShareOptions, 'title' | 'url' | 'locale' | 'showLabel'>> & ShareOptions = {\n title: opts.title ?? (typeof document !== 'undefined' ? document.title : ''),\n url: opts.url ?? (typeof location !== 'undefined' ? location.href : ''),\n locale: opts.locale ?? (typeof navigator !== 'undefined' ? navigator.language : 'en'),\n showLabel: opts.showLabel ?? true,\n networks: opts.networks,\n hideDesktop: opts.hideDesktop,\n hideMobile: opts.hideMobile,\n xHandle: opts.xHandle,\n nostrHashtag: opts.nostrHashtag,\n };\n const t = getTranslation(resolved.locale);\n const buttons = prepareButtons(resolved, t);\n\n const labelHtml = resolved.showLabel\n ? `<span class=\"oksigenia-label\" aria-hidden=\"true\">${escapeHtml(t.share)}</span>`\n : '';\n\n const buttonsHtml = buttons\n .map((b) => {\n const dataLink = b.link ? ` data-link=\"${escapeAttr(b.link)}\"` : '';\n const dataCopy = b.copyPayload ? ` data-copy=\"${escapeAttr(b.copyPayload)}\"` : '';\n const visClass = `${b.hideDesktop ? ' hide-desktop' : ''}${b.hideMobile ? ' hide-mobile' : ''}`;\n return `<button type=\"button\" class=\"oksigenia-btn o-${b.id}${visClass}\" style=\"background:${b.bgColor}\" data-type=\"${b.type}\"${dataLink}${dataCopy} aria-label=\"${escapeAttr(b.ariaLabel)}\">${b.svg}<span class=\"oksigenia-sr-only\" aria-live=\"polite\"></span></button>`;\n })\n .join('');\n\n // role=\"group\" + aria-label cumplen recomendaciones de A11Y / W3C.\n return `<div class=\"oksigenia-panel\" role=\"group\" aria-label=\"${escapeAttr(t.share)}\">${labelHtml}${buttonsHtml}</div>`;\n}\n\nfunction escapeHtml(s: string): string {\n return s.replace(/[&<>\"]/g, (c) => ({\n '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;',\n }[c] ?? c));\n}\nfunction escapeAttr(s: string): string {\n return escapeHtml(s).replace(/'/g, '&#39;');\n}\n\n/**\n * Engancha los listeners de click a los botones renderizados dentro de\n * `root`. Devuelve un dispose para limpiar.\n */\nexport function bindShareEvents(root: ParentNode, opts: ShareOptions = {}): () => void {\n const locale = opts.locale ?? (typeof navigator !== 'undefined' ? navigator.language : 'en');\n const t = getTranslation(locale);\n const buttons = Array.from(root.querySelectorAll<HTMLButtonElement>('.oksigenia-btn'));\n const handler = (e: Event) => {\n e.preventDefault();\n const btn = e.currentTarget as HTMLButtonElement;\n openShare(btn, t);\n };\n for (const b of buttons) b.addEventListener('click', handler);\n return () => {\n for (const b of buttons) b.removeEventListener('click', handler);\n };\n}\n\nfunction openShare(btn: HTMLButtonElement, t: Translation): void {\n const link = btn.getAttribute('data-link') ?? '';\n const type = (btn.getAttribute('data-type') ?? 'tab') as OpenStrategy;\n const live = btn.querySelector<HTMLElement>('.oksigenia-sr-only');\n\n if (type === 'popup') {\n const w = 600;\n const h = 400;\n // window.open top/left are screen coordinates, so center against the\n // browser window's screen position — not the viewport.\n const left = window.screenX + (window.outerWidth - w) / 2;\n const top = window.screenY + (window.outerHeight - h) / 2;\n // noopener severs window.opener so the share target can't drive our page\n // back (reverse tabnabbing). Same hardening the 'tab' strategy already has.\n window.open(link, 'oksigenia_share', `noopener,width=${w},height=${h},top=${top},left=${left},scrollbars=no`);\n return;\n }\n if (type === 'tab') {\n window.open(link, '_blank', 'noopener');\n return;\n }\n if (type === 'email') {\n window.location.href = link;\n return;\n }\n if (type === 'copy') {\n const text = btn.getAttribute('data-copy') ?? '';\n const done = () => {\n btn.classList.add('copied');\n if (live) live.textContent = t.copied;\n window.setTimeout(() => {\n btn.classList.remove('copied');\n if (live) live.textContent = '';\n }, 2000);\n };\n if (navigator.clipboard?.writeText) {\n navigator.clipboard.writeText(text).then(done).catch(() => {\n window.prompt(t.copyPrompt, text);\n });\n } else {\n window.prompt(t.copyPrompt, text);\n }\n }\n}\n","// CSS del panel de botones. Se inyecta inline en el Shadow DOM\n// (cuando se usa el web component) o se importa como `dist/styles.css`\n// si se usa el helper imperativo en light DOM.\n\nexport const SHARE_CSS = `\n:host { display: block; }\n.oksigenia-panel {\n display: flex;\n align-items: center;\n gap: 10px;\n margin: 30px 0;\n padding: 10px 18px;\n background: rgba(0,0,0,0.03);\n border-radius: 60px;\n width: fit-content;\n flex-wrap: wrap;\n font-family: system-ui, -apple-system, \"Segoe UI\", Roboto, sans-serif;\n}\n.oksigenia-label {\n font-weight: 800;\n font-size: 11px;\n margin-right: 12px;\n text-transform: uppercase;\n color: currentColor;\n letter-spacing: 1.5px;\n}\n.oksigenia-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 44px;\n height: 44px;\n border-radius: 50%;\n border: none;\n cursor: pointer;\n transition: transform .2s, filter .2s, box-shadow .2s;\n box-shadow: 0 3px 6px rgba(0,0,0,0.1);\n position: relative;\n text-decoration: none !important;\n padding: 0;\n overflow: visible;\n}\n.oksigenia-btn:hover {\n transform: translateY(-3px);\n filter: brightness(1.1);\n box-shadow: 0 5px 12px rgba(0,0,0,0.2);\n}\n.oksigenia-btn:focus-visible {\n outline: 2px solid currentColor;\n outline-offset: 3px;\n}\n.oksigenia-btn svg {\n width: 22px;\n height: 22px;\n fill: #fff;\n pointer-events: none;\n}\n.oksigenia-sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0,0,0,0);\n white-space: nowrap;\n border: 0;\n}\n.o-no.copied { background: #00a884 !important; }\n@media (min-width: 769px) { .hide-desktop { display: none !important; } }\n@media (max-width: 768px) { .hide-mobile { display: none !important; } }\n@media (max-width: 480px) {\n .oksigenia-panel { padding: 8px 12px; gap: 8px; justify-content: center; }\n .oksigenia-btn { width: 38px; height: 38px; }\n .oksigenia-btn svg { width: 18px; height: 18px; }\n .oksigenia-label { flex-basis: 100%; width: 100%; margin: 0 0 6px; text-align: center; }\n}\n@media (prefers-reduced-motion: reduce) {\n .oksigenia-btn { transition: none; }\n .oksigenia-btn:hover { transform: none; }\n}\n`;\n","// Web component <oksigenia-share>. Importar este módulo registra el\n// custom element. Usa Shadow DOM para encapsular CSS — funciona sin\n// que el host site cargue ningún stylesheet.\n\nimport { buildShareHtml, bindShareEvents } from './render.js';\nimport { SHARE_CSS } from './styles.js';\nimport { ALL_NETWORKS, type NetworkId } from './networks.js';\n\nconst OBSERVED = [\n 'url',\n 'title',\n 'locale',\n 'networks',\n 'hide-desktop',\n 'hide-mobile',\n 'x-handle',\n 'nostr-hashtag',\n 'no-label',\n] as const;\n\nexport class OksigeniaShareElement extends HTMLElement {\n static get observedAttributes(): readonly string[] {\n return OBSERVED;\n }\n\n private _dispose: (() => void) | null = null;\n\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n }\n\n connectedCallback(): void {\n this.render();\n }\n\n disconnectedCallback(): void {\n this._dispose?.();\n this._dispose = null;\n }\n\n attributeChangedCallback(): void {\n if (this.isConnected) this.render();\n }\n\n private parseNetworks(attr: string | null): readonly NetworkId[] | undefined {\n if (!attr) return undefined;\n const ids = attr.split(/[,\\s]+/).filter(Boolean) as NetworkId[];\n return ids.filter((id) => (ALL_NETWORKS as readonly string[]).includes(id));\n }\n\n private render(): void {\n const shadow = this.shadowRoot;\n if (!shadow) return;\n this._dispose?.();\n\n const html = buildShareHtml({\n url: this.getAttribute('url') ?? undefined,\n title: this.getAttribute('title') ?? undefined,\n locale: this.getAttribute('locale') ?? undefined,\n networks: this.parseNetworks(this.getAttribute('networks')),\n hideDesktop: this.parseNetworks(this.getAttribute('hide-desktop')),\n hideMobile: this.parseNetworks(this.getAttribute('hide-mobile')),\n xHandle: this.getAttribute('x-handle') ?? undefined,\n nostrHashtag: this.getAttribute('nostr-hashtag') ?? undefined,\n showLabel: !this.hasAttribute('no-label'),\n });\n shadow.innerHTML = `<style>${SHARE_CSS}</style>${html}`;\n this._dispose = bindShareEvents(shadow, {\n locale: this.getAttribute('locale') ?? undefined,\n });\n }\n}\n\nif (typeof customElements !== 'undefined' && !customElements.get('oksigenia-share')) {\n customElements.define('oksigenia-share', OksigeniaShareElement);\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'oksigenia-share': OksigeniaShareElement;\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oksigenia/share",
3
- "version": "0.2.2",
3
+ "version": "0.2.4",
4
4
  "description": "Lightweight, privacy-first social share buttons. Web component + helper API. Zero deps, no tracking, no cookies.",
5
5
  "keywords": [
6
6
  "share",