diff --git a/components/fill-box.js b/components/fill-box.js
new file mode 100644
index 00000000..eecfda92
--- /dev/null
+++ b/components/fill-box.js
@@ -0,0 +1,74 @@
+// fill-box cannot use Shadow DOM as it needs access to svg hatches
+// append stylesheet
+{
+ const style = `
+ fill-box:not([disabled]) {
+ cursor: pointer;
+ }
+
+ fill-box > svg {
+ aspect-ratio: 1;
+ vertical-align: middle;
+ pointer-events: none;
+ }
+
+ fill-box > svg > rect {
+ stroke: #666666;
+ stroke-width: 2;
+ }`;
+
+ const styleElement = document.createElement("style");
+ styleElement.setAttribute("type", "text/css");
+ styleElement.innerHTML = style;
+ document.head.appendChild(styleElement);
+}
+
+{
+ const template = document.createElement("template");
+ template.innerHTML = `
+
+ `;
+
+ class FillBox extends HTMLElement {
+ constructor() {
+ super();
+
+ this.appendChild(template.content.cloneNode(true));
+ this.querySelector("rect")?.setAttribute("fill", this.fill);
+ this.querySelector("svg")?.setAttribute("width", this.size);
+ }
+
+ static showTip() {
+ tip(this.tip);
+ }
+
+ connectedCallback() {
+ this.addEventListener("mousemove", this.constructor.showTip);
+ }
+
+ disconnectedCallback() {
+ this.removeEventListener("mousemove", this.constructor.showTip);
+ }
+
+ get fill() {
+ return this.getAttribute("fill") || "#333";
+ }
+
+ set fill(newFill) {
+ this.setAttribute("fill", newFill);
+ this.querySelector("rect")?.setAttribute("fill", newFill);
+ }
+
+ get size() {
+ return this.getAttribute("size") || "1em";
+ }
+
+ get tip() {
+ return this.dataset.tip || "Fill style. Click to change";
+ }
+ }
+
+ customElements.define("fill-box", FillBox);
+}
diff --git a/index.css b/index.css
index c2297f96..9946d1b2 100644
--- a/index.css
+++ b/index.css
@@ -1531,6 +1531,11 @@ div.states > .riverType {
cursor: pointer;
}
+.changeRelations > * {
+ pointer-events: none;
+ cursor: pointer;
+}
+
#diplomacySelect {
width: 5em;
margin: 0.1em 0 0 -0.3em;
@@ -1668,11 +1673,6 @@ div.states > div.biomeArea {
width: 5em;
}
-rect.fillRect {
- stroke: #666666;
- stroke-width: 2;
-}
-
#militaryHeader > div,
#regimentsHeader > div {
width: 5.2em;
diff --git a/index.html b/index.html
index 9a23d661..ebb2b775 100644
--- a/index.html
+++ b/index.html
@@ -4443,5 +4443,8 @@
+
+
+