@oksigenia/share 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -65,6 +65,10 @@ interface ShareOptions {
65
65
  locale?: LocaleCode | string;
66
66
  /** Subconjunto/orden de redes. Default: las 9 en orden canónico. */
67
67
  networks?: readonly NetworkId[];
68
+ /** Redes a OCULTAR en viewport ≥769px. */
69
+ hideDesktop?: readonly NetworkId[];
70
+ /** Redes a OCULTAR en viewport ≤768px. */
71
+ hideMobile?: readonly NetworkId[];
68
72
  /** Handle de X opcional (con o sin @). */
69
73
  xHandle?: string;
70
74
  /** Hashtag opcional para el payload Nostr. Default "oksigenia". */
@@ -83,7 +87,7 @@ declare function buildShareHtml(opts?: ShareOptions): string;
83
87
  */
84
88
  declare function bindShareEvents(root: ParentNode, opts?: ShareOptions): () => void;
85
89
 
86
- declare 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: #555;\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 (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 { margin-right: 6px; }\n}\n@media (prefers-reduced-motion: reduce) {\n .oksigenia-btn { transition: none; }\n .oksigenia-btn:hover { transform: none; }\n}\n";
90
+ declare 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: #555;\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 { margin-right: 6px; }\n}\n@media (prefers-reduced-motion: reduce) {\n .oksigenia-btn { transition: none; }\n .oksigenia-btn:hover { transform: none; }\n}\n";
87
91
 
88
92
  interface MountResult {
89
93
  /** Elemento .oksigenia-panel insertado. */
package/dist/index.js CHANGED
@@ -150,6 +150,8 @@ function supportedLocales() {
150
150
  // src/render.ts
151
151
  function prepareButtons(opts, t) {
152
152
  const list = opts.networks ?? ALL_NETWORKS;
153
+ const hideDesk = new Set(opts.hideDesktop ?? []);
154
+ const hideMob = new Set(opts.hideMobile ?? []);
153
155
  const out = [];
154
156
  for (const id of list) {
155
157
  const def = NETWORKS[id];
@@ -168,7 +170,9 @@ function prepareButtons(opts, t) {
168
170
  type: def.open,
169
171
  link,
170
172
  bgColor: def.color,
171
- svg: def.svg
173
+ svg: def.svg,
174
+ hideDesktop: hideDesk.has(id),
175
+ hideMobile: hideMob.has(id)
172
176
  };
173
177
  if (id === "no") {
174
178
  button.copyPayload = buildNostrPayload(opts.title, opts.url, opts.nostrHashtag);
@@ -193,7 +197,8 @@ function buildShareHtml(opts = {}) {
193
197
  const buttonsHtml = buttons.map((b) => {
194
198
  const dataLink = b.link ? ` data-link="${escapeAttr(b.link)}"` : "";
195
199
  const dataCopy = b.copyPayload ? ` data-copy="${escapeAttr(b.copyPayload)}"` : "";
196
- return `<button type="button" class="oksigenia-btn o-${b.id}" 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>`;
200
+ const visClass = `${b.hideDesktop ? " hide-desktop" : ""}${b.hideMobile ? " hide-mobile" : ""}`;
201
+ 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>`;
197
202
  }).join("");
198
203
  return `<div class="oksigenia-panel" role="group" aria-label="${escapeAttr(t.share)}">${labelHtml}${buttonsHtml}</div>`;
199
204
  }
@@ -328,6 +333,8 @@ var SHARE_CSS = `
328
333
  border: 0;
329
334
  }
330
335
  .o-no.copied { background: #00a884 !important; }
336
+ @media (min-width: 769px) { .hide-desktop { display: none !important; } }
337
+ @media (max-width: 768px) { .hide-mobile { display: none !important; } }
331
338
  @media (max-width: 480px) {
332
339
  .oksigenia-panel { padding: 8px 12px; gap: 8px; justify-content: center; }
333
340
  .oksigenia-btn { width: 38px; height: 38px; }
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 /** 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}\n\nfunction prepareButtons(opts: Required<Pick<ShareOptions, 'title' | 'url'>> & ShareOptions, t: Translation): PreparedButton[] {\n const list = opts.networks ?? ALL_NETWORKS;\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 };\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 return `<button type=\"button\" class=\"oksigenia-btn o-${b.id}\" 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: #555;\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 (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 { margin-right: 6px; }\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 /** 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: #555;\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 { margin-right: 6px; }\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"]}
package/dist/styles.css CHANGED
@@ -62,6 +62,8 @@
62
62
  border: 0;
63
63
  }
64
64
  .o-no.copied { background: #00a884 !important; }
65
+ @media (min-width: 769px) { .hide-desktop { display: none !important; } }
66
+ @media (max-width: 768px) { .hide-mobile { display: none !important; } }
65
67
  @media (max-width: 480px) {
66
68
  .oksigenia-panel { padding: 8px 12px; gap: 8px; justify-content: center; }
67
69
  .oksigenia-btn { width: 38px; height: 38px; }
@@ -147,6 +147,8 @@ function getTranslation(locale) {
147
147
  // src/render.ts
148
148
  function prepareButtons(opts, t) {
149
149
  const list = opts.networks ?? ALL_NETWORKS;
150
+ const hideDesk = new Set(opts.hideDesktop ?? []);
151
+ const hideMob = new Set(opts.hideMobile ?? []);
150
152
  const out = [];
151
153
  for (const id of list) {
152
154
  const def = NETWORKS[id];
@@ -165,7 +167,9 @@ function prepareButtons(opts, t) {
165
167
  type: def.open,
166
168
  link,
167
169
  bgColor: def.color,
168
- svg: def.svg
170
+ svg: def.svg,
171
+ hideDesktop: hideDesk.has(id),
172
+ hideMobile: hideMob.has(id)
169
173
  };
170
174
  if (id === "no") {
171
175
  button.copyPayload = buildNostrPayload(opts.title, opts.url, opts.nostrHashtag);
@@ -190,7 +194,8 @@ function buildShareHtml(opts = {}) {
190
194
  const buttonsHtml = buttons.map((b) => {
191
195
  const dataLink = b.link ? ` data-link="${escapeAttr(b.link)}"` : "";
192
196
  const dataCopy = b.copyPayload ? ` data-copy="${escapeAttr(b.copyPayload)}"` : "";
193
- return `<button type="button" class="oksigenia-btn o-${b.id}" 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>`;
197
+ const visClass = `${b.hideDesktop ? " hide-desktop" : ""}${b.hideMobile ? " hide-mobile" : ""}`;
198
+ 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>`;
194
199
  }).join("");
195
200
  return `<div class="oksigenia-panel" role="group" aria-label="${escapeAttr(t.share)}">${labelHtml}${buttonsHtml}</div>`;
196
201
  }
@@ -325,6 +330,8 @@ var SHARE_CSS = `
325
330
  border: 0;
326
331
  }
327
332
  .o-no.copied { background: #00a884 !important; }
333
+ @media (min-width: 769px) { .hide-desktop { display: none !important; } }
334
+ @media (max-width: 768px) { .hide-mobile { display: none !important; } }
328
335
  @media (max-width: 480px) {
329
336
  .oksigenia-panel { padding: 8px 12px; gap: 8px; justify-content: center; }
330
337
  .oksigenia-btn { width: 38px; height: 38px; }
@@ -343,6 +350,8 @@ var OBSERVED = [
343
350
  "title",
344
351
  "locale",
345
352
  "networks",
353
+ "hide-desktop",
354
+ "hide-mobile",
346
355
  "x-handle",
347
356
  "nostr-hashtag",
348
357
  "no-label"
@@ -366,8 +375,7 @@ var OksigeniaShareElement = class extends HTMLElement {
366
375
  attributeChangedCallback() {
367
376
  if (this.isConnected) this.render();
368
377
  }
369
- parseNetworks() {
370
- const attr = this.getAttribute("networks");
378
+ parseNetworks(attr) {
371
379
  if (!attr) return void 0;
372
380
  const ids = attr.split(/[,\s]+/).filter(Boolean);
373
381
  return ids.filter((id) => ALL_NETWORKS.includes(id));
@@ -380,7 +388,9 @@ var OksigeniaShareElement = class extends HTMLElement {
380
388
  url: this.getAttribute("url") ?? void 0,
381
389
  title: this.getAttribute("title") ?? void 0,
382
390
  locale: this.getAttribute("locale") ?? void 0,
383
- networks: this.parseNetworks(),
391
+ networks: this.parseNetworks(this.getAttribute("networks")),
392
+ hideDesktop: this.parseNetworks(this.getAttribute("hide-desktop")),
393
+ hideMobile: this.parseNetworks(this.getAttribute("hide-mobile")),
384
394
  xHandle: this.getAttribute("x-handle") ?? void 0,
385
395
  nostrHashtag: this.getAttribute("nostr-hashtag") ?? void 0,
386
396
  showLabel: !this.hasAttribute("no-label")
@@ -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 /** 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}\n\nfunction prepareButtons(opts: Required<Pick<ShareOptions, 'title' | 'url'>> & ShareOptions, t: Translation): PreparedButton[] {\n const list = opts.networks ?? ALL_NETWORKS;\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 };\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 return `<button type=\"button\" class=\"oksigenia-btn o-${b.id}\" 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: #555;\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 (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 { margin-right: 6px; }\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 '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(): readonly NetworkId[] | undefined {\n const attr = this.getAttribute('networks');\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(),\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 /** 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: #555;\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 { margin-right: 6px; }\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.1.0",
3
+ "version": "0.2.0",
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",