@haoduo-icon/ci 1.0.0 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/pkg-index.js +51 -9
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@haoduo-icon/ci",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "description": "Icon package for ci",
5
5
  "type": "module",
6
6
  "main": "./pkg-index.js",
package/pkg-index.js CHANGED
@@ -580,11 +580,25 @@ class HdIcon extends HTMLElement {
580
580
  static get observedAttributes() {
581
581
  return ["icon"];
582
582
  }
583
- _use;
583
+ _use = null;
584
584
  constructor() {
585
585
  super();
586
- this.innerHTML = `<svg width="1em" height="1em" fill="currentColor" style="display: inline-block; vertical-align: middle; overflow: hidden;"><use width="100%" height="100%"></use></svg>`;
587
- this._use = this.querySelector("use");
586
+ }
587
+ ensureTemplate() {
588
+ if (this._use)
589
+ return;
590
+ const svgNs = "http://www.w3.org/2000/svg";
591
+ const svg = document.createElementNS(svgNs, "svg");
592
+ svg.setAttribute("width", "1em");
593
+ svg.setAttribute("height", "1em");
594
+ svg.setAttribute("fill", "currentColor");
595
+ svg.setAttribute("style", "display: inline-block; vertical-align: middle; overflow: hidden;");
596
+ const use = document.createElementNS(svgNs, "use");
597
+ use.setAttribute("width", "100%");
598
+ use.setAttribute("height", "100%");
599
+ svg.appendChild(use);
600
+ this.appendChild(svg);
601
+ this._use = use;
588
602
  }
589
603
  attributeChangedCallback(name, oldValue, newValue) {
590
604
  if (name === "icon" && newValue !== oldValue) {
@@ -592,6 +606,7 @@ class HdIcon extends HTMLElement {
592
606
  }
593
607
  }
594
608
  connectedCallback() {
609
+ this.ensureTemplate();
595
610
  this.render();
596
611
  if (typeof window !== "undefined") {
597
612
  window.addEventListener("hd-icon-registered", this.handleRegistration);
@@ -602,22 +617,49 @@ class HdIcon extends HTMLElement {
602
617
  window.removeEventListener("hd-icon-registered", this.handleRegistration);
603
618
  }
604
619
  }
620
+ parseIconKey(iconKey) {
621
+ if (!iconKey)
622
+ return null;
623
+ const colonIndex = iconKey.indexOf(":");
624
+ if (colonIndex > 0 && colonIndex < iconKey.length - 1) {
625
+ return {
626
+ pkg: iconKey.slice(0, colonIndex),
627
+ name: iconKey.slice(colonIndex + 1)
628
+ };
629
+ }
630
+ const registry = getRegistry();
631
+ let matchedPkg = "";
632
+ for (const pkg of registry.keys()) {
633
+ if (iconKey.startsWith(pkg + "-") && pkg.length > matchedPkg.length) {
634
+ matchedPkg = pkg;
635
+ }
636
+ }
637
+ if (matchedPkg) {
638
+ return {
639
+ pkg: matchedPkg,
640
+ name: iconKey.slice(matchedPkg.length + 1)
641
+ };
642
+ }
643
+ return null;
644
+ }
605
645
  handleRegistration = (e) => {
606
646
  const detail = e.detail;
607
647
  const iconKey = this.getAttribute("icon");
608
- if (iconKey && iconKey.startsWith(detail.pkg + ":")) {
648
+ if (iconKey && (iconKey.startsWith(detail.pkg + ":") || iconKey.startsWith(detail.pkg + "-"))) {
609
649
  this.render();
610
650
  }
611
651
  };
612
652
  async render() {
653
+ this.ensureTemplate();
613
654
  const iconKey = this.getAttribute("icon");
614
655
  if (!iconKey)
615
656
  return;
616
- const [pkg, name] = iconKey.split(":");
617
- if (!pkg || !name) {
618
- console.warn(`[hd-icon] Invalid icon format: "${iconKey}". Expected "pkg:name".`);
657
+ const parsed = this.parseIconKey(iconKey);
658
+ if (!parsed) {
659
+ console.warn(`[hd-icon] Invalid icon format: "${iconKey}". Expected "pkg:name" or "pkg-name".`);
619
660
  return;
620
661
  }
662
+ const { pkg, name } = parsed;
621
663
  const registry = getRegistry().get(pkg);
622
664
  if (!registry) {
623
665
  return;
@@ -651,7 +693,7 @@ class HdIcon extends HTMLElement {
651
693
  console.warn(`[hd-icon] Failed to resolve icon URL: ${chunkFile} relative to ${registry.baseUrl}`, e);
652
694
  }
653
695
  }
654
- this._use.setAttribute("href", `${url}#${symbolId}`);
696
+ this._use?.setAttribute("href", `${url}#${symbolId}`);
655
697
  }
656
698
  }
657
699
  if (typeof customElements !== "undefined" && !customElements.get("hd-icon")) {
@@ -662,7 +704,7 @@ if (typeof window !== "undefined") {
662
704
  }
663
705
 
664
706
  // iconpkg/ci/src-index.ts
665
- var lookup = "AAADzYkZAssYjxoBibVqWEhBVThEV0eKI0VlMyFVNGh2IkNilmVpSTGIZIXFIyc1I3MxQnEUQmNFZmantjR4ZQMmVlQlN5ZVNjlGVlQ2iZdndlclQTR1aAVYkwcNCYYCAgQNnwELVwS6Iv0FCRgTJeoBAS4CBASpA3gYmgMEAQswMMoEX7sSP+obEgGxARwEHhZRIZJQAgEqARkDAQKlAwoH2wENIgSrARMPVrwBYyF1kx56w2gGAyChARIQUQMtBAgbKAISAWYICHQEiBAKMgMNRwUvYAVRoQWiAbsEVmgIY8MBAgICAwkKeTQcEAJZAstswJ5gL2/yFt6c+jC+3i5WBCoOEEiDwq1nGkvGkB7MJLrxtwM+/451QQ3tveZpPLZJVHWS1UiSFZVbKAcbFi8itxSMPI35Gx3Hk7MiZvzZ/Lk3CyUVPKw7dFH8Mu4dbYGWzssyJP2PQID/i/08ViyfmtFsQ3MaPj+pFIJZX+F3X4Km+NgsKgt22uTLk5l1M0gw0olUQKDIvBwYMdOFExrUb7cvd6msqHMXB4zOo+3Z1we5+pnyuhIRHO9vFhAxVmbWpB6U9tGAGRwoCMW1rV/Egryi7cVyn4HLsotNuQdpR+5RInq03yb2MDEclEXBgwYl1RYbZva96+fXzktovzKfBc4qaIAy3Oc+OfIUWz12AicFPiB0kjOH/sNbDCW2sNcxvr5+K77FlTAJfxikp4FGG9QmSvPqwoBA7iRu5V1tEVe+4zCpHLDTD/Cl2kw6FyCK1rN4tHJziA85O72nIkAxLj3BgstugPB5acSSqXGIsw5+UjN8oJSZEeAwBayGyGmtF2D4OWWrNuHfW2QksUdM6shwWwdFIaWaUAWrf9LSsRO2QAct8Tf1FNQhhpUN7mjsg9seXcSR6Cte0IhgWM+USx6GK/SALKhIaCSnIURo6DT4aymfCgQ4XwKH5n9qkvB7HZVpm20WAaapF4uvszwSNBgGJ2cJZUqOQtKRr/qZXOf/3UdpF8WFWxSHPhYeGBTf+Vxhw0cErGtOy1Sj925IScLAekxBeOsaV0FG5sKhwQXwTXjQdMoe/lZU0kEwR2OHqB9OAQbv/jQJKc1TsMgVGxS2dvzYJzogubg6v5j3IL6mHs7rY8dVbebtZRNzpyN6mIN4bIFG8azNXqLXkAp1IZ7mncCViPlzsnWgorTPXJwHuQrkvHaoXuDTZCfmaKJO1LOiUnEN/YygvYwEcP+wP1DLlazPVPTDGAwa7nsXw+x/mGlPR/gdLEC7UgGA0AARQQBAVAYAwAAgAABAAgAAAAAEAAAACWNpLTAxLnN2ZwAAAAljaS0wMi5zdmcAAAAJY2ktMDMuc3ZnAAAACWNpLTA0LnN2Z/////8AAAADAAABDckSBIgCANGyTNMQIVACQIgSDIAUTUokAQiGINmwScqCZJugTJsUbUCUAAIAKFCASZAgJEkUBUgiaFIQAYCEJVCCTZm0CEIiYYoAIUimZIokbAqkAZOAAVmkLNkULJCgQUmSKcEkTVC0JIuUZECGBIqwBImAIFCGQBIGCBIgCIAQaRAQZBEgQAGyZMuUSJMEIJoQQQgEBJmEQUEABJqGaIsUQZIATIg2IVmATNOUCBEABJCQLZmQJIiQQFKQJUoSQRMkRYAkIYIyYQkERFoCDYqQJAqCJUi0JJqyQROERYMUDQOSYBGWCNqAJUACJcOkBZg0QNgCAEsiDdMQYYqCAJOiSAoQQJsgCcsQKYoAAAAAAA==";
707
+ var lookup = "AAAD1okZAssYjxokdDdLWEhCZzVXFDQjQ2dDVqh1ZnNjV2Nhg2QmJnJTOHJmKMZWgjOGiApWSXaTgjJnRCVkgFRCOLp0pHhFZiOGhTKGNCRzM1FDOEFkJQdYnAET3QFmDgxdAwIBAQIH9QENCQM5EZwB3CVmHHISnAEGSQ49NQ0SogQVzgETJwMB5AIHXp8EAgK6AWadAecCiAHeEQkf5wEBAjKmCYoDrgLUEGw5nAQIe0AB1RYC7wIBAZQBKQUJIgOuAoEBEyEDDt0BBvAa6C0DY+sDigbMBCYFMCoBHyI5AwxHEggEAQblBAEHJwUBwwUJFmEIJwJZAsuDCxRAECJumEF1n5aswI1WfpL2iiypAoBtoqwyNo4OkzIMDQkUb0CIMB4kuSa/vmsPJcL8x9Keprwawlu+63hDFx27xg4XvqRmPBX0ID4W52N45k6o7s9MXEfn7Yns/YZ2GrMeFySVaSoGuT8TNMNfaQU8hSx/073MteWSldlxc+Zg5G8eZaz6oKAGFkygPhUFp4YLvRFJxbQlR59Frc9H8IaktqjPovQGmTzysMgofPNBJCyIB1FUPphN1BtYwye9bFPa0LlVshmUW6F/txpnB25fohzmLHTw9cjBMQUEG7qn73h3XneUo8cqnjKmxcFoetF+R22BMkYR11TrM4LF0mlFqXuLwidz0ZLnPjjAWTFUBw2305lLIq+Dg6th604wrHlX7tOrzrACJkeVF8sU3/gcSLSU178xnFSHnSrd/hhM7eSAzU8vzsgWXe3+UE5I0B4e4RYeLXX/FUBWxcSVSEHO/SiRdLbmakIX7jAvjrnjmEhjrz2PszNlrO4d78uLOoH5o8PXR6dtSmR4K0DA1mbwcXNuaYt1DyIbaNtyaJGZ0oddA6WIn5sbjDfxKQcFolB6K4zwZRSzIHYuTfb6J5LmN/LIyxAkGvj/snCBWySZCkrSL0AYHoLCFgcFKZ9WPMtsIEYfSdQghz3+g2gY2kbhEkszsw0xe6bBqDTSLs7qBLz5wyX6uSJpMBb8YLcwgMqpXzQdopoB/BhEiJDmthhty4dcMTD37P8UvYAUZn++s3XxkyEBoKhwaVJevq1zggQ5/SHZ3urgO99U+FvOQDoj1QdomhytrFLo3JWQ2BOFV/g5O+2037B6dMRkzSGxaBf31Dno/7DevlsJIQcacxzyK/y6pxu4tkhbXAQI+Wn2XmDxUUuUgAxvPowUgBGBxCfWbIJBP3IKHX8Jy3WS1BNfjNjXsaWp1TAK4HZ2VmsSZ7wcPKmVOpzuUoCCAAEUCABCgAAAEgABSgCEIQAAAAAEAAAACWNpLTAxLnN2ZwAAAAljaS0wMi5zdmcAAAAJY2ktMDMuc3ZnAAAACWNpLTA0LnN2Z/////8AAAADAAABDVkkbNO2IAkAKFgmTZAEBFOEIciWTAOUDIowYIMwDIkCAdKUCdGkSAokBdEkYRCERYoSQMikCJKCYUigQEoQRFGiJVAUDQkyDQGgIZESIEMkbBkQQQmiCVAGKYGmRJCEJMEQLMESDMOSKYiGRFkiIJEARUMEKVskAMACJUqwIQAEDJOCLNOQbFsGCQKWaFKyQIEAKBEELJiCABAiCUuUYAqiIEEARNsWQUsyKYMwLQAiQECEAAmASJGkaMG0BBKyAUmSRRESDUKGRImQLdEQIJCgJJCkYVKwRYMkCdEUYUIWSRogRYgEKFkGAJCQCEKQSMAQRJCkREAUIREUAQIUIcgyaZCGQQgiDdCEBYkAAAAAAA==";
666
708
  var chunks = {
667
709
  "ci-01.svg": new URL("./ci-01.svg", import.meta.url).href,
668
710
  "ci-02.svg": new URL("./ci-02.svg", import.meta.url).href,