physical-quantity 1.1.14 → 1.1.20

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/README.md CHANGED
@@ -2,7 +2,8 @@
2
2
 
3
3
  `physical-quantity(PQE)` is a web component that allows you to create and manipulate physical quantities with different units. It provides an input for the value and a dropdown for the unit, automatically converting between units in the same category.
4
4
 
5
- It is a new HTML element for expressing physical quantities, featuring self-contained unit conversion, a compact and clean UI, no redundant dual units, and seamless integration across all websites and platforms.
5
+ It is a new HTML element for expressing physical quantities, featuring self-contained unit conversion, a compact and clean UI, no redundant dual units, and seamless integration across all websites and platforms.
6
+ ![Physical Quantity (Gif Animation)](https://firebasestorage.googleapis.com/v0/b/auto-calc-80237.appspot.com/o/PQE%2Fexamples%2FPhysicalQuantityElementDemo3-ezgif.com.gif?alt=media&token=b910c493-e990-490b-bf4d-015a4d4c10d2)
6
7
 
7
8
  ## Features
8
9
 
@@ -12,13 +13,13 @@ It is a new HTML element for expressing physical quantities, featuring self-cont
12
13
  - Easy to integrate into any web project.
13
14
 
14
15
  ## Demo: Physical Quantity element - No Unit Converter or Dual Units Needed
15
- [Live Demo on JS Fiddle](https://jsfiddle.net/hithere/tz8ym4fh/100/embedded/result)
16
+ [Live Demo on JS Fiddle](https://jsfiddle.net/hithere/tz8ym4fh/129/embedded/result)
16
17
 
17
- <iframe width="100%" height="300" src="https://jsfiddle.net/hithere/tz8ym4fh/100/embedded/result" allowfullscreen="true" frameborder="0"></iframe>
18
+ <iframe width="100%" height="300" src="https://jsfiddle.net/hithere/tz8ym4fh/129/embedded/result" allowfullscreen="true" frameborder="0"></iframe>
18
19
 
19
- [![Example 2 in UI](https://firebasestorage.googleapis.com/v0/b/auto-calc-80237.appspot.com/o/PQE%2Fexamples%2FPhysicalQuantityElementExample1.png?alt=media&token=2aa81849-9299-4ba5-9f62-79b8604b814f)](https://jsfiddle.net/hithere/tz8ym4fh/100/embedded/result)
20
+ [![Example 1 in UI](https://firebasestorage.googleapis.com/v0/b/auto-calc-80237.appspot.com/o/PQE%2Fexamples%2FPhysicalQuantityElementExample1.png?alt=media&token=2aa81849-9299-4ba5-9f62-79b8604b814f)](https://jsfiddle.net/hithere/tz8ym4fh/100/embedded/result)
20
21
 
21
- [![Example 1 in UI](https://firebasestorage.googleapis.com/v0/b/auto-calc-80237.appspot.com/o/PQE%2Fexamples%2FPhysicalQuantityElementExample2.png?alt=media&token=5c899acf-a04c-44b7-b8ac-b1740f308d40)](https://jsfiddle.net/hithere/tz8ym4fh/100/embedded/result)
22
+ [![Example 2 in UI](https://firebasestorage.googleapis.com/v0/b/auto-calc-80237.appspot.com/o/PQE%2Fexamples%2FPhysicalQuantityElementExample2.png?alt=media&token=5c899acf-a04c-44b7-b8ac-b1740f308d40)](https://jsfiddle.net/hithere/tz8ym4fh/100/embedded/result)
22
23
 
23
24
  ## Installation
24
25
 
@@ -34,7 +35,7 @@ After installation, you can import and use the physical-quantity component in yo
34
35
  ### Importing the Component
35
36
  Include the following script tag in your HTML file:
36
37
  ```html
37
- <script src="node_modules/physical-quantity/dist/pq.min.js"></script>
38
+ <script src="node_modules/physical-quantity/dist/pq.es.js"></script>
38
39
  ```
39
40
 
40
41
  ### Using the Component
@@ -57,7 +58,7 @@ Here's an example of how to use the component in an HTML file:
57
58
  <body>
58
59
  <physical-quantity value="25.4" unit="mm"></physical-quantity>
59
60
 
60
- <script src="node_modules/physical-quantity/src/pq.min.js"></script>
61
+ <script src="node_modules/physical-quantity/src/pq.es.js"></script>
61
62
  </body>
62
63
  </html>
63
64
  ```
@@ -70,7 +71,7 @@ Here's an example of how to use the component in an HTML file:
70
71
  <meta charset="UTF-8">
71
72
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
72
73
  <title>Physical Quantity Component Example</title>
73
- <script src="https://unpkg.com/physical-quantity@1.1.2/dist/pq.min.js"></script>
74
+ <script src="https://unpkg.com/physical-quantity@latest/dist/pq.umd.js"></script>
74
75
  </head>
75
76
  <body>
76
77
  <physical-quantity value="25.4" unit="mm"></physical-quantity>
@@ -124,6 +125,9 @@ This project is licensed under the MIT License. See the LICENSE file for more de
124
125
  ## Contributing
125
126
  Contributions are welcome! Please contact the developer for any bugs, features, or improvements.
126
127
 
128
+ ## Change Log
129
+ - 20250602 v1.1.19: changed to umd for unpkg, and es for module.
130
+
127
131
  ## Contact
128
132
  If you have any questions or feedback, feel free to contact me at don.wen@yahoo.com.
129
133
  For more info, please visit:
package/dist/pq.es.js ADDED
@@ -0,0 +1,173 @@
1
+ const o = 0.45359237, s = 25.4 / 1e3, a = 12 * s, l = 101325, n = 133.322387415;
2
+ class r extends HTMLElement {
3
+ constructor() {
4
+ super(), this.attachShadow({ mode: "open" }), this.value = 0, this.unit = "mm", this.unitCategory = "Length", this.decimalPlaces = 3, this.units = {
5
+ Length: ["m", "km", "cm", "mm", "in", "ft"],
6
+ Mass: ["g", "kg", "lbm"],
7
+ Pressure: [
8
+ "Pa",
9
+ "kPa",
10
+ "MPa",
11
+ "GPa",
12
+ "bar",
13
+ "mbar",
14
+ "atm",
15
+ "mm HG",
16
+ "cm HG",
17
+ "in HG",
18
+ "mm W.C.",
19
+ "m W.C.",
20
+ "in W.C.",
21
+ "psf",
22
+ "psi",
23
+ "ksi",
24
+ "ksi[kip/in²]"
25
+ ]
26
+ // Add other categories and units as needed
27
+ }, this.unitConversion = {
28
+ Length: {
29
+ m: 1,
30
+ km: 1e3,
31
+ cm: 0.01,
32
+ mm: 1e-3,
33
+ in: s,
34
+ ft: a
35
+ // Add more conversion factors as needed
36
+ },
37
+ // Add other category conversion factors as needed
38
+ Mass: {
39
+ kg: 1,
40
+ g: 1e-3,
41
+ lbm: o
42
+ // Add more conversion factors as needed
43
+ },
44
+ Pressure: {
45
+ Pa: 1,
46
+ kPa: 1e3,
47
+ MPa: 1e6,
48
+ GPa: 1e9,
49
+ bar: 1e5,
50
+ mbar: 100,
51
+ atm: l,
52
+ "mm HG": n,
53
+ "cm HG": n * 10,
54
+ "in HG": n * 25.4,
55
+ "mm W.C.": 1 / 1e3 * 1e3 * 9.80665,
56
+ "m W.C.": 1 * 1e3 * 9.80665,
57
+ "in W.C.": s * 1e3 * 9.80665,
58
+ psf: o * 9.80665 / Math.pow(a, 2),
59
+ psi: o * 9.80665 / Math.pow(s, 2),
60
+ ksi: o * 9.80665 / Math.pow(s, 2) * 1e3,
61
+ "ksi[kip/in²]": o * 9.80665 / Math.pow(s, 2) * 1e3
62
+ }
63
+ }, this.render();
64
+ }
65
+ static get observedAttributes() {
66
+ return ["value", "unit", "decimal-places"];
67
+ }
68
+ attributeChangedCallback(t, e, i) {
69
+ t === "value" ? this.value = parseFloat(i) : t === "unit" ? (this.unit = i, this.unitCategory = this.getUnitCategory(i)) : t === "decimal-places" && (this.decimalPlaces = parseInt(i) || 3), this.render();
70
+ }
71
+ getUnitCategory(t) {
72
+ for (const e in this.units)
73
+ if (this.units[e].includes(t))
74
+ return e;
75
+ return null;
76
+ }
77
+ connectedCallback() {
78
+ this.shadowRoot.addEventListener("change", this.handleUnitChange.bind(this)), this.shadowRoot.addEventListener("mouseover", this.handleMouseOver.bind(this)), this.shadowRoot.addEventListener("mouseout", this.handleMouseOut.bind(this)), this.render();
79
+ }
80
+ disconnectedCallback() {
81
+ this.shadowRoot.removeEventListener("change", this.handleUnitChange.bind(this)), this.shadowRoot.removeEventListener("mouseover", this.handleMouseOver.bind(this)), this.shadowRoot.removeEventListener("mouseout", this.handleMouseOut.bind(this));
82
+ }
83
+ handleArrowClick(t) {
84
+ if (t.target.closest(".unit-container")) {
85
+ const e = this.shadowRoot.querySelector("select");
86
+ e && (e.focus(), e.click());
87
+ }
88
+ }
89
+ handleUnitChange(t) {
90
+ if (t.target.tagName === "SELECT") {
91
+ const e = t.target.value, i = this.unitConversion[this.unitCategory][this.unit] / this.unitConversion[this.unitCategory][e];
92
+ this.value = this.value * i, this.unit = e, this.render();
93
+ }
94
+ }
95
+ handleMouseOver() {
96
+ const t = this.shadowRoot.querySelector(".tooltip");
97
+ t.style.display = "block", clearTimeout(this.tooltipTimeout);
98
+ }
99
+ handleMouseOut() {
100
+ const t = this.shadowRoot.querySelector(".tooltip");
101
+ t.style.display = "none";
102
+ }
103
+ formatValue(t) {
104
+ return Number.isInteger(t) ? t.toString() : Math.floor(t) !== 0 ? t.toFixed(this.decimalPlaces).replace(/0+$/, "").replace(/\.$/, "") : t.toPrecision(3);
105
+ }
106
+ render() {
107
+ this.shadowRoot.innerHTML = `
108
+ <style>
109
+ :host {
110
+ display: inline-block;
111
+ }
112
+ .quantity {
113
+ display: flex;
114
+ align-items: center;
115
+ }
116
+ .value {
117
+ margin-left: 0.25em;
118
+ margin-right: 0.25em;
119
+ }
120
+ .unit-container select {
121
+ position: relative;
122
+ display: inline-flex;
123
+ align-items: center;
124
+ color: blue;
125
+ background-color: lightgray;
126
+ border-radius: 0.25em;
127
+ border: none;
128
+ margin: 0.25em;
129
+ cursor: pointer;
130
+ }
131
+
132
+ .tooltip {
133
+ display: block; /* Set display to block for initial positioning */
134
+ visibility: hidden; /* Initially hide the tooltip */
135
+ opacity: 0; /* Start with zero opacity */
136
+ transition: opacity 0.3s ease-in-out; /* Smooth transition */
137
+ position: absolute;
138
+ bottom: 100%;
139
+ left: 50%;
140
+ transform: translateX(-50%);
141
+ background-color: black;
142
+ color: red;
143
+ padding: 5px;
144
+ border-radius: 5px;
145
+ font-size: 0.8em;
146
+ white-space: nowrap;
147
+ z-index: 10;
148
+ }
149
+
150
+ .tooltip a {
151
+ color: cyan;
152
+ }
153
+
154
+ </style>
155
+
156
+ <div class="quantity">
157
+ <span class="value">${this.formatValue(this.value)}</span>
158
+ <div class="unit-container">
159
+ <select>
160
+ ${this.units[this.unitCategory].map((t) => `<option value="${t}" ${t === this.unit ? "selected" : ""}>
161
+ ${t}</option>`).join("")}
162
+ </select>
163
+ </div>
164
+ </div>
165
+ <div class="tooltip">
166
+ Powered by <a href="https://v2.donwen.com" target="_blank" style="color: cyan;">
167
+ AutoCalcs</a>
168
+ </div>
169
+ `;
170
+ }
171
+ }
172
+ customElements.define("physical-quantity", r);
173
+ customElements.define("pqe", r);
package/dist/pq.umd.js ADDED
@@ -0,0 +1,63 @@
1
+ (function(n){typeof define=="function"&&define.amd?define(n):n()})(function(){"use strict";const o=.45359237,i=25.4/1e3,r=12*i,h=101325,a=133.322387415;class l extends HTMLElement{constructor(){super(),this.attachShadow({mode:"open"}),this.value=0,this.unit="mm",this.unitCategory="Length",this.decimalPlaces=3,this.units={Length:["m","km","cm","mm","in","ft"],Mass:["g","kg","lbm"],Pressure:["Pa","kPa","MPa","GPa","bar","mbar","atm","mm HG","cm HG","in HG","mm W.C.","m W.C.","in W.C.","psf","psi","ksi","ksi[kip/in²]"]},this.unitConversion={Length:{m:1,km:1e3,cm:.01,mm:.001,in:i,ft:r},Mass:{kg:1,g:.001,lbm:o},Pressure:{Pa:1,kPa:1e3,MPa:1e6,GPa:1e9,bar:1e5,mbar:100,atm:h,"mm HG":a,"cm HG":a*10,"in HG":a*25.4,"mm W.C.":1/1e3*1e3*9.80665,"m W.C.":1*1e3*9.80665,"in W.C.":i*1e3*9.80665,psf:o*9.80665/Math.pow(r,2),psi:o*9.80665/Math.pow(i,2),ksi:o*9.80665/Math.pow(i,2)*1e3,"ksi[kip/in²]":o*9.80665/Math.pow(i,2)*1e3}},this.render()}static get observedAttributes(){return["value","unit","decimal-places"]}attributeChangedCallback(t,e,s){t==="value"?this.value=parseFloat(s):t==="unit"?(this.unit=s,this.unitCategory=this.getUnitCategory(s)):t==="decimal-places"&&(this.decimalPlaces=parseInt(s)||3),this.render()}getUnitCategory(t){for(const e in this.units)if(this.units[e].includes(t))return e;return null}connectedCallback(){this.shadowRoot.addEventListener("change",this.handleUnitChange.bind(this)),this.shadowRoot.addEventListener("mouseover",this.handleMouseOver.bind(this)),this.shadowRoot.addEventListener("mouseout",this.handleMouseOut.bind(this)),this.render()}disconnectedCallback(){this.shadowRoot.removeEventListener("change",this.handleUnitChange.bind(this)),this.shadowRoot.removeEventListener("mouseover",this.handleMouseOver.bind(this)),this.shadowRoot.removeEventListener("mouseout",this.handleMouseOut.bind(this))}handleArrowClick(t){if(t.target.closest(".unit-container")){const e=this.shadowRoot.querySelector("select");e&&(e.focus(),e.click())}}handleUnitChange(t){if(t.target.tagName==="SELECT"){const e=t.target.value,s=this.unitConversion[this.unitCategory][this.unit]/this.unitConversion[this.unitCategory][e];this.value=this.value*s,this.unit=e,this.render()}}handleMouseOver(){const t=this.shadowRoot.querySelector(".tooltip");t.style.display="block",clearTimeout(this.tooltipTimeout)}handleMouseOut(){const t=this.shadowRoot.querySelector(".tooltip");t.style.display="none"}formatValue(t){return Number.isInteger(t)?t.toString():Math.floor(t)!==0?t.toFixed(this.decimalPlaces).replace(/0+$/,"").replace(/\.$/,""):t.toPrecision(3)}render(){this.shadowRoot.innerHTML=`
2
+ <style>
3
+ :host {
4
+ display: inline-block;
5
+ }
6
+ .quantity {
7
+ display: flex;
8
+ align-items: center;
9
+ }
10
+ .value {
11
+ margin-left: 0.25em;
12
+ margin-right: 0.25em;
13
+ }
14
+ .unit-container select {
15
+ position: relative;
16
+ display: inline-flex;
17
+ align-items: center;
18
+ color: blue;
19
+ background-color: lightgray;
20
+ border-radius: 0.25em;
21
+ border: none;
22
+ margin: 0.25em;
23
+ cursor: pointer;
24
+ }
25
+
26
+ .tooltip {
27
+ display: block; /* Set display to block for initial positioning */
28
+ visibility: hidden; /* Initially hide the tooltip */
29
+ opacity: 0; /* Start with zero opacity */
30
+ transition: opacity 0.3s ease-in-out; /* Smooth transition */
31
+ position: absolute;
32
+ bottom: 100%;
33
+ left: 50%;
34
+ transform: translateX(-50%);
35
+ background-color: black;
36
+ color: red;
37
+ padding: 5px;
38
+ border-radius: 5px;
39
+ font-size: 0.8em;
40
+ white-space: nowrap;
41
+ z-index: 10;
42
+ }
43
+
44
+ .tooltip a {
45
+ color: cyan;
46
+ }
47
+
48
+ </style>
49
+
50
+ <div class="quantity">
51
+ <span class="value">${this.formatValue(this.value)}</span>
52
+ <div class="unit-container">
53
+ <select>
54
+ ${this.units[this.unitCategory].map(t=>`<option value="${t}" ${t===this.unit?"selected":""}>
55
+ ${t}</option>`).join("")}
56
+ </select>
57
+ </div>
58
+ </div>
59
+ <div class="tooltip">
60
+ Powered by <a href="https://v2.donwen.com" target="_blank" style="color: cyan;">
61
+ AutoCalcs</a>
62
+ </div>
63
+ `}}customElements.define("physical-quantity",l),customElements.define("pqe",l)});
package/package.json CHANGED
@@ -1,14 +1,26 @@
1
1
  {
2
2
  "name": "physical-quantity",
3
- "version": "1.1.14",
3
+ "version": "1.1.20",
4
4
  "description": "A web component to represent a physical quantity with unit conversion.",
5
- "main": "./dist/pq.min.js",
5
+ "main": "./pq.js",
6
+ "module": "./pq.js",
6
7
  "files": [
7
8
  "dist/"
8
9
  ],
9
10
  "scripts": {
11
+ "d": "vite",
12
+ "b": "vite build",
13
+ "s": "vite preview",
10
14
  "test": "echo \"Error: no test specified\" && exit 1"
11
15
  },
12
- "author": "E3d",
13
- "license": "MIT"
16
+ "keywords": [
17
+ "web-component",
18
+ "physical-quantity"
19
+ ],
20
+ "author": "E3d - Don Wen <don.wen@yahoo.com>",
21
+ "license": "MIT",
22
+ "devDependencies": {
23
+ "@vitejs/plugin-legacy": "^5.4.1",
24
+ "vite": "^5.2.12"
25
+ }
14
26
  }
package/dist/pq.min.js DELETED
@@ -1,73 +0,0 @@
1
- const GRAVITY_SI=9.80665,POUNDMASS_KG=.45359237,INCH_METER=.0254,FOOT_METER=12*INCH_METER,ATM_PA=101325,TORR_ATM=1/760,MMHG_PA=133.322387415;// 1 mmHG = 133.322387415 Pa
2
- class PhysicalQuantity extends HTMLElement{constructor(){super(),this.attachShadow({mode:"open"}),this.value=0,this.unit="mm",this.unitCategory="Length",this.decimalPlaces=3,// Default decimal places
3
- this.units={Length:["m","cm","mm","in","ft"],Mass:["g","kg","lbm"],Pressure:["Pa","kPa","MPa","GPa","bar","mbar","atm","mm HG","cm HG","in HG","mm W.C.","m W.C.","in W.C.","psf","psi","ksi","ksi[kip/in²]"]},this.unitConversion={Length:{m:1,cm:.01,mm:.001,in:INCH_METER,ft:FOOT_METER},
4
- // Add other category conversion factors as needed
5
- Mass:{kg:1,g:.001,lbm:POUNDMASS_KG},Pressure:{Pa:1,kPa:1e3,MPa:1e6,GPa:1e9,bar:1e5,mbar:100,atm:ATM_PA,"mm HG":MMHG_PA,"cm HG":10*MMHG_PA,"in HG":25.4*MMHG_PA,"mm W.C.":+GRAVITY_SI,"m W.C.":1e3*GRAVITY_SI,"in W.C.":1e3*INCH_METER*GRAVITY_SI,psf:POUNDMASS_KG*GRAVITY_SI/Math.pow(FOOT_METER,2),psi:POUNDMASS_KG*GRAVITY_SI/Math.pow(INCH_METER,2),ksi:POUNDMASS_KG*GRAVITY_SI/Math.pow(INCH_METER,2)*1e3,"ksi[kip/in²]":POUNDMASS_KG*GRAVITY_SI/Math.pow(INCH_METER,2)*1e3}},
6
- // this.handleUnitChange = this.handleUnitChange; // Bind the method to the instance
7
- // this.handleMouseOver = this.handleMouseOver; // Bind the method to the instance
8
- // this.handleMouseOut = this.handleMouseOut;
9
- this.render()}static get observedAttributes(){return["value","unit","decimal-places"]}attributeChangedCallback(t,e,i){"value"===t?this.value=parseFloat(i):"unit"===t?(this.unit=i,this.unitCategory=this.getUnitCategory(i)):"decimal-places"===t&&(this.decimalPlaces=parseInt(i)||3),this.render()}getUnitCategory(t){for(const e in this.units)if(this.units[e].includes(t))return e;return null}connectedCallback(){this.shadowRoot.addEventListener("change",this.handleUnitChange.bind(this)),this.shadowRoot.addEventListener("mouseover",this.handleMouseOver.bind(this)),this.shadowRoot.addEventListener("mouseout",this.handleMouseOut.bind(this)),this.render()}disconnectedCallback(){this.shadowRoot.removeEventListener("change",this.handleUnitChange.bind(this)),this.shadowRoot.removeEventListener("mouseover",this.handleMouseOver.bind(this)),this.shadowRoot.removeEventListener("mouseout",this.handleMouseOut.bind(this))}handleArrowClick(t){t.target.closest(".unit-container")&&(t=this.shadowRoot.querySelector("select"))&&(t.focus(),t.click())}handleUnitChange(t){var e;"SELECT"===t.target.tagName&&(t=t.target.value,e=this.unitConversion[this.unitCategory][this.unit]/this.unitConversion[this.unitCategory][t],this.value=this.value*e,this.unit=t,this.render())}handleMouseOver(){this.shadowRoot.querySelector(".tooltip").style.display="block",clearTimeout(this.tooltipTimeout)}handleMouseOut(){
10
- // clearTimeout(this.tooltipTimeout);
11
- this.shadowRoot.querySelector(".tooltip").style.display="none"}formatValue(t){// https://aistudio.google.com/app/prompts?state=%7B%22ids%22:%5B%221oNb_BksOrN-5hQ_5KjCxxYhMotx5gA-P%22%5D,%22action%22:%22open%22,%22userId%22:%22114169196047837137010%22,%22resourceKeys%22:%7B%7D%7D&usp=sharing
12
- return Number.isInteger(t)?t.toString():0!==Math.floor(t)?t.toFixed(this.decimalPlaces).replace(/0+$/,"").replace(/\.$/,""):t.toPrecision(3)}render(){this.shadowRoot.innerHTML=`
13
- <style>
14
- :host {
15
- display: inline-block;
16
- }
17
- .quantity {
18
- display: flex;
19
- align-items: center;
20
- }
21
- .value {
22
- margin-left: 0.25em;
23
- margin-right: 0.25em;
24
- }
25
- .unit-container select {
26
- position: relative;
27
- display: inline-flex;
28
- align-items: center;
29
- color: blue;
30
- background-color: lightgray;
31
- border-radius: 0.25em;
32
- border: none;
33
- margin: 0.25em;
34
- cursor: pointer;
35
- }
36
-
37
- .tooltip {
38
- display: block; /* Set display to block for initial positioning */
39
- visibility: hidden; /* Initially hide the tooltip */
40
- opacity: 0; /* Start with zero opacity */
41
- transition: opacity 0.3s ease-in-out; /* Smooth transition */
42
- position: absolute;
43
- bottom: 100%;
44
- left: 50%;
45
- transform: translateX(-50%);
46
- background-color: black;
47
- color: red;
48
- padding: 5px;
49
- border-radius: 5px;
50
- font-size: 0.8em;
51
- white-space: nowrap;
52
- z-index: 10;
53
- }
54
-
55
- .tooltip a {
56
- color: cyan;
57
- }
58
-
59
- </style>
60
-
61
- <div class="quantity">
62
- <span class="value">${this.formatValue(this.value)}</span>
63
- <div class="unit-container">
64
- <select>
65
- ${this.units[this.unitCategory].map(t=>`<option value="${t}" ${t===this.unit?"selected":""}>
66
- ${t}</option>`).join("")}
67
- </select>
68
- </div>
69
- </div>
70
- <div class="tooltip">
71
- Powered by <a href="https://yourwebsite.com" target="_blank" style="color: cyan;">Your Package</a>
72
- </div>
73
- `}}customElements.define("physical-quantity",PhysicalQuantity);