[GELÖSTT! FTUI-3] Eigenes SVG-Icon korrekt einfärben

Begonnen von DocCyber, 22 Januar 2024, 19:32:25

Vorheriges Thema - Nächstes Thema

DocCyber

Hallo zusammen,


Ich versuche, ein eigenes Icon bauen, und zwar einen Kandelaber.
Grundsätzlich funktioniert das, aber ...

Im eingeschalteten Zustand soll der Kandelaber gelb leuchten, aber nur im inneren Bereich, der Rahmen muss unverändert bleiben.
Ich habe schon etwas mit fill-opacity gespielt. Das macht es etwas besser, aber ist nicht zufriedenstellend, denn noch immer wird auch der Rahmen eingefärbt.

Es gibt zwei Ansatzpunkte: Die SVG-Datei selbst oder ../ftui/components/icon.component.css
Aber bei beiden komme ich nicht weiter.

Wie bekomme ich das hin?
ich hoffe, es kennt sich jemand mit SVG-Dateien aus.  :)
Behandle die Menschen so, als wären sie, was sie sein sollten. Dadurch hilfst du ihnen zu werden, was sie sein können. (Goethe)


RPi-3 mit HM-CFG-LAN und jede Menge HM Komponenten.

MDietrich

Moin,
ist es so passend?
<ftui-button states= "on,off"
shape="normal" direction="horizontal" size="large"
[(value)]="dummy1">
<ftui-icon type= "svg" path= "icons" size= "2"               
name="kandelaber"
[style]="dummy1 | map('on: `color:yellow`')">
</ftui-icon>
</ftui-button>

Gruß,
Matthias
FB 6591 Cable / Raspberry 3b+ (Bookworm) / 4xECHO DOT 4/ Homematic Thermostate, Fenster- und Fenster-Sensoren / Philips HUE / CUL-HM /  Zigbee Schalter und Lampen / Shelly 1

yersinia

Es gibt mMn mehrere Optionen.

Zum Testen kannst du den SVG Code direkt ins HTML einbinden und dann mit ftui-binding im svg-Code arbeiten, ungefähr so (ungetestet):
<your ftui-element here>
<svg
  width="127.6782mm"
  height="150.005mm"
  viewBox="0 0 127.67826 150.005"
  version="1.1"
  id="svg5"
  xml:space="preserve"
  xmlns="http://www.w3.org/2000/svg"
  xmlns:svg="http://www.w3.org/2000/svg"><defs
    id="defs2" /><g
    id="layer1"
    transform="translate(-50.595162,-42.940035)"><path
      style="fill:#323232;fill-opacity:0.2;stroke-width:0.326751"
      d="m 94.104071,188.45682 -2.725605,-4.47228 -3.815865,-0.14689 c -4.585429,-0.17652 -5.947058,-0.67729 -7.177444,-2.63961 -1.028423,-1.64024 -1.028423,-2.47999 0,-4.12868 0.599219,-0.96063 1.254163,-1.48875 2.451378,-1.97672 l 1.633699,-0.66588 30.556936,0.0783 30.55695,0.0783 1.37296,0.84663 c 3.25829,2.00926 3.11958,5.59054 -0.29649,7.65503 -0.83942,0.50731 -1.65061,0.62194 -4.99227,0.70554 l -3.99,0.0998 -2.79326,4.52732 -2.79325,4.52732 -17.63107,-0.008 -17.631049,-0.008 z m -0.466082,-19.03578 c -2.990272,-0.58195 -5.64043,-2.24057 -6.965288,-4.3593 -0.884819,-1.415 -16.062596,-44.90839 -22.666602,-64.95332 l -1.790634,-5.43505 -3.770958,-0.146892 c -4.533782,-0.176605 -5.896597,-0.681437 -7.156009,-2.650798 -1.518031,-2.373771 -0.47975,-4.94359 2.492643,-6.169455 1.114052,-0.459451 2.139089,-0.580926 4.902264,-0.580926 h 3.493686 l 1.873381,-1.689269 c 7.694387,-6.938211 17.971185,-13.33215 27.327994,-17.002728 6.951895,-2.727159 11.617064,-3.841709 19.624404,-4.688459 l 1.81706,-0.19215 -1.45366,-0.356464 c -3.3278,-0.816059 -6.0987,-2.773717 -7.50553,-5.302707 -1.13815,-2.04601 -1.13834,-5.297988 -3.6e-4,-7.34467 1.06555,-1.916562 3.6979,-4.057622 6.01893,-4.895605 2.71162,-0.978992 6.60529,-0.946949 9.30048,0.07654 2.7997,1.063174 4.04927,2.007605 5.48149,4.142949 1.1189,1.668341 1.24161,2.083491 1.24161,4.201554 0,4.489468 -2.70154,7.56152 -7.90086,8.984432 l -1.85778,0.508419 2.15371,0.200933 c 15.30496,1.427898 29.78163,7.79581 43.79194,19.262953 l 4.93333,4.037834 3.85404,0.10171 c 4.16099,0.109705 4.99508,0.377916 6.60808,2.124425 1.05064,1.137602 1.05064,3.924277 0,5.061878 -1.61721,1.751072 -2.4429,2.014931 -6.63521,2.12035 l -3.88137,0.0976 -1.17185,3.868524 c -2.67766,8.839592 -22.42289,65.103352 -23.36982,66.591982 -0.92877,1.46009 -3.13925,3.09039 -5.25835,3.87819 l -1.81708,0.67552 -20.16953,0.0497 c -11.12256,0.0274 -20.78611,-0.0702 -21.544151,-0.21773 z M 108.64067,127.4306 V 94.526478 H 91.157875 c -13.835377,0 -17.447037,0.07662 -17.3114,0.367234 0.09423,0.201978 5.026485,14.116448 10.960468,30.921058 5.933995,16.80459 11.114454,31.4462 11.512148,32.53687 l 0.723086,1.98307 h 5.799253 5.79924 z m 34.95359,0.14689 c 6.34662,-17.93569 11.54476,-32.709483 11.55142,-32.830669 0.007,-0.121186 -7.83767,-0.220343 -17.43182,-0.220343 h -17.44391 v 32.911392 32.91139 l 5.89249,-0.0807 5.89251,-0.0807 z"
      id="path125" />
<!-- change here -->
<path ftui-binding="style"
      [style]="dummy | map('on: ´#FFBF00´, off: ´#000000´') | prepend('fill:') | append(';fill-opacity:1;stroke:#000000;stroke-width:1.15396')"
      d="m 173.95665,437.82479 c -1.75557,-5.09837 -60.73954,-171.63625 -77.117838,-217.73782 -4.56744,-12.85641 -8.076898,-23.60282 -7.798796,-23.88093 0.278102,-0.2781 29.638614,-0.71306 65.245574,-0.96657 l 64.73994,-0.46094 v 124.12519 124.12519 h -21.63845 -21.63845 z"
      id="path2453"
      transform="matrix(0.26458333,0,0,0.26458333,50.595162,42.940035)" />
<path ftui-binding="style"
      [style]="dummy | map('on: ´#FFBF00´, off: ´#000000´') | prepend('fill:') | append(';fill-opacity:1;stroke:#000000;stroke-width:1.15396')"
      d="M 263.37367,319.03512 V 195.04133 l 45.02695,0.11882 c 24.76482,0.0654 54.25458,0.37081 65.5328,0.6788 l 20.50586,0.55998 -15.58674,44.34814 c -8.5727,24.39148 -28.16338,79.88323 -43.53485,123.31499 l -27.94812,78.96685 h -21.99795 -21.99795 z"
      id="path2455"
      transform="matrix(0.26458333,0,0,0.26458333,50.595162,42.940035)" /></g></svg>
</your ftui-element here>

Du kannst in der SVG aber auch die Farbdefinition abhängig vom Elternelement gestalten wenn du in der style-definition des svg-elements
fill:currentcolor;setzt und dann via style color über das eltern-element definierst ([1], [2]).
viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

DocCyber

Zitat von: MDietrich am 23 Januar 2024, 07:39:37ist es so passend?

Nein. Diese Standard-Definition färbt das gesamte Icon, nicht nur den inneren Bereich "hinter Glas".

Behandle die Menschen so, als wären sie, was sie sein sollten. Dadurch hilfst du ihnen zu werden, was sie sein können. (Goethe)


RPi-3 mit HM-CFG-LAN und jede Menge HM Komponenten.

DocCyber

Zitat von: yersinia am 23 Januar 2024, 08:59:35Es gibt mMn mehrere Optionen.

Das werde ich ausprobieren - sieht nach einer Lösung des Problems aus.
Behandle die Menschen so, als wären sie, was sie sein sollten. Dadurch hilfst du ihnen zu werden, was sie sein können. (Goethe)


RPi-3 mit HM-CFG-LAN und jede Menge HM Komponenten.

DocCyber

Leider funktioniert keine deiner beiden vorgeschlagenen Lösungen.

Vielleicht haut die CSS für <ftui-icon> dazwischen; da steht schon fill: currentColor
Offenbar wird dadurch aber alles eingefärbt, was in <svg> fill:xxxxxx heißt. Ich möchte aber nur manche gefüllte Fläche umfärben.

Kann man nicht irgendwie erreichen, dass Flächen mit z.B. fill:B9B9B9 verschont bleiben?

Leider kenne ich mich nicht gut genug aus.
Behandle die Menschen so, als wären sie, was sie sein sollten. Dadurch hilfst du ihnen zu werden, was sie sein können. (Goethe)


RPi-3 mit HM-CFG-LAN und jede Menge HM Komponenten.

yersinia

Zeig doch mal deine Einbindung. Wenn du den puren svg code direkt einbindest, brauchst und solltest du dies nicht mit einem ftui-icon element umschließen.

Zitat von: DocCyber am 23 Januar 2024, 10:48:36Kann man nicht irgendwie erreichen, dass Flächen mit z.B. fill:B9B9B9 verschont bleiben?
fill:#B9B9B9 !important;
viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

DocCyber

#7
Zitat von: yersinia am 23 Januar 2024, 10:59:23Zeig doch mal deine Einbindung.
Völlig normal eingebunden (device ist der Schalter, und channel der entsprechende Kanal):
<ftui-icon size="8"
    name="kandelaber"
    [color]="{{device}}:relay_{{channel}} | map('on: warning, off: gray')"
    @click="sendFhem('set {{device}} toggle {{channel}}')">
</ftui-icon>

ZitatWenn du den puren svg code direkt einbindest, brauchst und solltest du dies nicht mit einem ftui-icon element umschließen.
Das versteh ich nicht. Wie kann ich das Icon denn sonst mit den restlichen Features versorgen?
Kannst du mir das näher erklären?


Zitat von: DocCyber am 23 Januar 2024, 10:48:36Kann man nicht irgendwie erreichen, dass Flächen mit z.B. fill:B9B9B9 verschont bleiben?
fill:#B9B9B9 !important;

Hmmm ...  Interessant  -  An welcher Stelle der <ftui-icon>-CSS muss ich das denn einbauen?
fill: ist ja an etlichen Stellen der CSS aufgeführt.
Die Funktionalität der CSS gilt ja für alle Icons, und die möchte ich nicht sabotieren, sondern höchstens ergänzen.


icon.component.css
:host {
  --color-base: currentColor;
  position: relative;
}

.icon {
  display: flex;
}

svg {
  width: var(--icon-width, 2.5em);
  height: var(--icon-height, 2.5em);
  fill: currentColor;
}

svg g[fill],
svg g [fill]  {
  fill: inherit;
}

svg path[style],
svg g[style] {
  fill: inherit !important;
}

img {
  width: var(--icon-width, 4em);
  height: var(--icon-height, 4em);
  object-fit: contain;
}

:host([crop]) img {
object-fit: none;
}

:host([shape="round"]) img {
  border-radius: 1.5em;
}
:host([shape="circle"]) img {
  border-radius: 50%;
}

svg[viewBox="0 0 448 512"] {
  width: 1.5em;
  height: 1.5em;
}

:host([color]) svg {
  fill: var(--color-base);
  color: var(--color-base);
}

:host([invert]) {
  background: var(--color-base);
  border-radius: 0.75em;
  width: 3em;
  height: 3em;
  display: flex;
  justify-content: center;
  align-items: center;
}

:host([invert][color]) svg {
  fill: var(--color-contrast);
}

:host([popup-target]) {
  cursor: pointer;
}

::slotted(ftui-badge),
::slotted(ftui-icon),
::slotted(ftui-label)  {
  top: -0.75em;
  position: absolute;
  right: -0.75em;
}

:host([right]:not([right=""])),
:host([left]:not([left=""])),
:host([top]:not([top=""])),
:host([bottom]:not([bottom=""]))  {
  position: absolute;
}


Ich habe zwischenzeitlich in die SVG-Datei direkt einen Style eingebaut ( .lockedCol ), der sicher stellen soll, dass Flächen für Farbveränderungen gesperrt werden.
Leider nutzt das auch nichts.
Inhalt der SVG-Datei
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->

<svg
width="127.6782mm"
height="150.005mm"
viewBox="0 0 127.67826 150.005"
version="1.1"
id="svg5"
xml:space="preserve"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">

<defs>
id="defs2"
<style>
.lockedCol {fill: #abcdef}
</style>
</defs>

<g
id="layer1"
transform="translate(-50.595162,-42.940035)">

<path
class="lockedCol"
style="fill-opacity:0.8;stroke-width:0.326751"
d="m 94.104071,188.45682 -2.725605,-4.47228 -3.815865,-0.14689 c -4.585429,-0.17652 -5.947058,-0.67729 -7.177444,-2.63961 -1.028423,-1.64024 -1.028423,-2.47999 0,-4.12868 0.599219,-0.96063 1.254163,-1.48875 2.451378,-1.97672 l 1.633699,-0.66588 30.556936,0.0783 30.55695,0.0783 1.37296,0.84663 c 3.25829,2.00926 3.11958,5.59054 -0.29649,7.65503 -0.83942,0.50731 -1.65061,0.62194 -4.99227,0.70554 l -3.99,0.0998 -2.79326,4.52732 -2.79325,4.52732 -17.63107,-0.008 -17.631049,-0.008 z m -0.466082,-19.03578 c -2.990272,-0.58195 -5.64043,-2.24057 -6.965288,-4.3593 -0.884819,-1.415 -16.062596,-44.90839 -22.666602,-64.95332 l -1.790634,-5.43505 -3.770958,-0.146892 c -4.533782,-0.176605 -5.896597,-0.681437 -7.156009,-2.650798 -1.518031,-2.373771 -0.47975,-4.94359 2.492643,-6.169455 1.114052,-0.459451 2.139089,-0.580926 4.902264,-0.580926 h 3.493686 l 1.873381,-1.689269 c 7.694387,-6.938211 17.971185,-13.33215 27.327994,-17.002728 6.951895,-2.727159 11.617064,-3.841709 19.624404,-4.688459 l 1.81706,-0.19215 -1.45366,-0.356464 c -3.3278,-0.816059 -6.0987,-2.773717 -7.50553,-5.302707 -1.13815,-2.04601 -1.13834,-5.297988 -3.6e-4,-7.34467 1.06555,-1.916562 3.6979,-4.057622 6.01893,-4.895605 2.71162,-0.978992 6.60529,-0.946949 9.30048,0.07654 2.7997,1.063174 4.04927,2.007605 5.48149,4.142949 1.1189,1.668341 1.24161,2.083491 1.24161,4.201554 0,4.489468 -2.70154,7.56152 -7.90086,8.984432 l -1.85778,0.508419 2.15371,0.200933 c 15.30496,1.427898 29.78163,7.79581 43.79194,19.262953 l 4.93333,4.037834 3.85404,0.10171 c 4.16099,0.109705 4.99508,0.377916 6.60808,2.124425 1.05064,1.137602 1.05064,3.924277 0,5.061878 -1.61721,1.751072 -2.4429,2.014931 -6.63521,2.12035 l -3.88137,0.0976 -1.17185,3.868524 c -2.67766,8.839592 -22.42289,65.103352 -23.36982,66.591982 -0.92877,1.46009 -3.13925,3.09039 -5.25835,3.87819 l -1.81708,0.67552 -20.16953,0.0497 c -11.12256,0.0274 -20.78611,-0.0702 -21.544151,-0.21773 z M 108.64067,127.4306 V 94.526478 H 91.157875 c -13.835377,0 -17.447037,0.07662 -17.3114,0.367234 0.09423,0.201978 5.026485,14.116448 10.960468,30.921058 5.933995,16.80459 11.114454,31.4462 11.512148,32.53687 l 0.723086,1.98307 h 5.799253 5.79924 z m 34.95359,0.14689 c 6.34662,-17.93569 11.54476,-32.709483 11.55142,-32.830669 0.007,-0.121186 -7.83767,-0.220343 -17.43182,-0.220343 h -17.44391 v 32.911392 32.91139 l 5.89249,-0.0807 5.89251,-0.0807 z"
id="path125" />

<path
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1.15396"
d="m 173.95665,437.82479 c -1.75557,-5.09837 -60.73954,-171.63625 -77.117838,-217.73782 -4.56744,-12.85641 -8.076898,-23.60282 -7.798796,-23.88093 0.278102,-0.2781 29.638614,-0.71306 65.245574,-0.96657 l 64.73994,-0.46094 v 124.12519 124.12519 h -21.63845 -21.63845 z"
id="path2453"
transform="matrix(0.26458333,0,0,0.26458333,50.595162,42.940035)" />

<path
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1.15396"
d="M 263.37367,319.03512 V 195.04133 l 45.02695,0.11882 c 24.76482,0.0654 54.25458,0.37081 65.5328,0.6788 l 20.50586,0.55998 -15.58674,44.34814 c -8.5727,24.39148 -28.16338,79.88323 -43.53485,123.31499 l -27.94812,78.96685 h -21.99795 -21.99795 z"
id="path2455"
transform="matrix(0.26458333,0,0,0.26458333,50.595162,42.940035)" />
</g>
</svg>

So sieht die SVG im Original aus. Die Farbe des hellblauen Bereichs wird im SVG festgelegt, aber nur die schwarzen Flächen sollen durch <ftui-icon> je nach Schaltzustand ersetzt werden. Jedenfalls ist das meine Wunschvorstellung.
Behandle die Menschen so, als wären sie, was sie sein sollten. Dadurch hilfst du ihnen zu werden, was sie sein können. (Goethe)


RPi-3 mit HM-CFG-LAN und jede Menge HM Komponenten.

yersinia

#8
Ich befürchte, wir reden aneinander vorbei. Das
fill:#B9B9B9 !important;sowie
fill:currentcolor;muss in die style Definition der svg definiert werden, wenn du die svg über ftui-icon einbinden möchtest. Dann kannst du mit ftui-binding im style des ftui-icon die color setzen.

Und zum Testen, und nur dafür solltest du den SVG code 1:1 in deine FTUI Seite kopieren (ggf nur mit umschließenden <ftui-grid-tile> oä) und ohne ftui-icon:
<svg
  width="127.6782mm"
  height="150.005mm"
  viewBox="0 0 127.67826 150.005"
  version="1.1"
  id="svg5"
  xml:space="preserve"
  xmlns="http://www.w3.org/2000/svg"
  xmlns:svg="http://www.w3.org/2000/svg"><defs
    id="defs2" /><g
    id="layer1"
    transform="translate(-50.595162,-42.940035)">
<!-- change style here -->
<path
      style="fill:#323232 !important;fill-opacity:0.2;stroke-width:0.326751;"
      d="m 94.104071,188.45682 -2.725605,-4.47228 -3.815865,-0.14689 c -4.585429,-0.17652 -5.947058,-0.67729 -7.177444,-2.63961 -1.028423,-1.64024 -1.028423,-2.47999 0,-4.12868 0.599219,-0.96063 1.254163,-1.48875 2.451378,-1.97672 l 1.633699,-0.66588 30.556936,0.0783 30.55695,0.0783 1.37296,0.84663 c 3.25829,2.00926 3.11958,5.59054 -0.29649,7.65503 -0.83942,0.50731 -1.65061,0.62194 -4.99227,0.70554 l -3.99,0.0998 -2.79326,4.52732 -2.79325,4.52732 -17.63107,-0.008 -17.631049,-0.008 z m -0.466082,-19.03578 c -2.990272,-0.58195 -5.64043,-2.24057 -6.965288,-4.3593 -0.884819,-1.415 -16.062596,-44.90839 -22.666602,-64.95332 l -1.790634,-5.43505 -3.770958,-0.146892 c -4.533782,-0.176605 -5.896597,-0.681437 -7.156009,-2.650798 -1.518031,-2.373771 -0.47975,-4.94359 2.492643,-6.169455 1.114052,-0.459451 2.139089,-0.580926 4.902264,-0.580926 h 3.493686 l 1.873381,-1.689269 c 7.694387,-6.938211 17.971185,-13.33215 27.327994,-17.002728 6.951895,-2.727159 11.617064,-3.841709 19.624404,-4.688459 l 1.81706,-0.19215 -1.45366,-0.356464 c -3.3278,-0.816059 -6.0987,-2.773717 -7.50553,-5.302707 -1.13815,-2.04601 -1.13834,-5.297988 -3.6e-4,-7.34467 1.06555,-1.916562 3.6979,-4.057622 6.01893,-4.895605 2.71162,-0.978992 6.60529,-0.946949 9.30048,0.07654 2.7997,1.063174 4.04927,2.007605 5.48149,4.142949 1.1189,1.668341 1.24161,2.083491 1.24161,4.201554 0,4.489468 -2.70154,7.56152 -7.90086,8.984432 l -1.85778,0.508419 2.15371,0.200933 c 15.30496,1.427898 29.78163,7.79581 43.79194,19.262953 l 4.93333,4.037834 3.85404,0.10171 c 4.16099,0.109705 4.99508,0.377916 6.60808,2.124425 1.05064,1.137602 1.05064,3.924277 0,5.061878 -1.61721,1.751072 -2.4429,2.014931 -6.63521,2.12035 l -3.88137,0.0976 -1.17185,3.868524 c -2.67766,8.839592 -22.42289,65.103352 -23.36982,66.591982 -0.92877,1.46009 -3.13925,3.09039 -5.25835,3.87819 l -1.81708,0.67552 -20.16953,0.0497 c -11.12256,0.0274 -20.78611,-0.0702 -21.544151,-0.21773 z M 108.64067,127.4306 V 94.526478 H 91.157875 c -13.835377,0 -17.447037,0.07662 -17.3114,0.367234 0.09423,0.201978 5.026485,14.116448 10.960468,30.921058 5.933995,16.80459 11.114454,31.4462 11.512148,32.53687 l 0.723086,1.98307 h 5.799253 5.79924 z m 34.95359,0.14689 c 6.34662,-17.93569 11.54476,-32.709483 11.55142,-32.830669 0.007,-0.121186 -7.83767,-0.220343 -17.43182,-0.220343 h -17.44391 v 32.911392 32.91139 l 5.89249,-0.0807 5.89251,-0.0807 z"
      id="path125" />
<!-- change here -->
<path ftui-binding="style"
      [style]="dummy | map('on: ´#FFBF00´, off: ´#000000´') | prepend('fill:') | append(';fill-opacity:1;stroke:#000000;stroke-width:1.15396;')"
      d="m 173.95665,437.82479 c -1.75557,-5.09837 -60.73954,-171.63625 -77.117838,-217.73782 -4.56744,-12.85641 -8.076898,-23.60282 -7.798796,-23.88093 0.278102,-0.2781 29.638614,-0.71306 65.245574,-0.96657 l 64.73994,-0.46094 v 124.12519 124.12519 h -21.63845 -21.63845 z"
      id="path2453"
      transform="matrix(0.26458333,0,0,0.26458333,50.595162,42.940035)" />
<path ftui-binding="style"
      [style]="dummy | map('on: ´#FFBF00´, off: ´#000000´') | prepend('fill:') | append(';fill-opacity:1;stroke:#000000;stroke-width:1.15396;')"
      d="M 263.37367,319.03512 V 195.04133 l 45.02695,0.11882 c 24.76482,0.0654 54.25458,0.37081 65.5328,0.6788 l 20.50586,0.55998 -15.58674,44.34814 c -8.5727,24.39148 -28.16338,79.88323 -43.53485,123.31499 l -27.94812,78.96685 h -21.99795 -21.99795 z"
      id="path2455"
      transform="matrix(0.26458333,0,0,0.26458333,50.595162,42.940035)" /></g></svg>

Zitat von: DocCyber am 23 Januar 2024, 11:50:36
ZitatWenn du den puren svg code direkt einbindest, brauchst und solltest du dies nicht mit einem ftui-icon element umschließen.
Das versteh ich nicht. Wie kann ich das Icon denn sonst mit den restlichen Features versorgen?
Kannst du mir das näher erklären?
du nutzt ftui-binding direkt im svg code dann, zB:
<path ftui-binding="style"
      [style]="dummy | map('on: ´#FFBF00´, off: ´#000000´') | prepend('fill:') | append(';fill-opacity:1;stroke:#000000;stroke-width:1.15396;')"

Zitat von: DocCyber am 23 Januar 2024, 11:50:36Ich habe zwischenzeitlich in die SVG-Datei direkt einen Style eingebaut ( .lockedCol ), der sicher stellen soll, dass Flächen für Farbveränderungen gesperrt werden.
Das kann nicht funktionieren da dein inlineCSS in der SVG deine Definition überschreibt.
viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

DocCyber

Zitat von: yersinia am 23 Januar 2024, 14:25:59Und zum Testen, und nur dafür solltest du den SVG code 1:1 in deine FTUI Seite kopieren (ggf nur mit umschließenden <ftui-grid-tile> oä) und ohne ftui-icon:

Das habe ich ausprobiert.
<ftui-grid-tile row="17" col="17" width="12" height="12">
    <svg
      width="127.6782mm"
      height="150.005mm"
      viewBox="0 0 127.67826 150.005"
      version="1.1"
      id="svg5"
      xml:space="preserve"
      xmlns="http://www.w3.org/2000/svg"
      xmlns:svg="http://www.w3.org/2000/svg"><defs
        id="defs2" /><g
        id="layer1"
        transform="translate(-50.595162,-42.940035)">

    <path
          style="fill:#323232 !important;fill-opacity:0.2;stroke-width:0.326751;"
          d="m 94.104071,188.45682 -2.725605,-4.47228 -3.815865,-0.14689 c -4.585429,-0.17652 -5.947058,-0.67729 -7.177444,-2.63961 -1.028423,-1.64024 -1.028423,-2.47999 0,-4.12868 0.599219,-0.96063 1.254163,-1.48875 2.451378,-1.97672 l 1.633699,-0.66588 30.556936,0.0783 30.55695,0.0783 1.37296,0.84663 c 3.25829,2.00926 3.11958,5.59054 -0.29649,7.65503 -0.83942,0.50731 -1.65061,0.62194 -4.99227,0.70554 l -3.99,0.0998 -2.79326,4.52732 -2.79325,4.52732 -17.63107,-0.008 -17.631049,-0.008 z m -0.466082,-19.03578 c -2.990272,-0.58195 -5.64043,-2.24057 -6.965288,-4.3593 -0.884819,-1.415 -16.062596,-44.90839 -22.666602,-64.95332 l -1.790634,-5.43505 -3.770958,-0.146892 c -4.533782,-0.176605 -5.896597,-0.681437 -7.156009,-2.650798 -1.518031,-2.373771 -0.47975,-4.94359 2.492643,-6.169455 1.114052,-0.459451 2.139089,-0.580926 4.902264,-0.580926 h 3.493686 l 1.873381,-1.689269 c 7.694387,-6.938211 17.971185,-13.33215 27.327994,-17.002728 6.951895,-2.727159 11.617064,-3.841709 19.624404,-4.688459 l 1.81706,-0.19215 -1.45366,-0.356464 c -3.3278,-0.816059 -6.0987,-2.773717 -7.50553,-5.302707 -1.13815,-2.04601 -1.13834,-5.297988 -3.6e-4,-7.34467 1.06555,-1.916562 3.6979,-4.057622 6.01893,-4.895605 2.71162,-0.978992 6.60529,-0.946949 9.30048,0.07654 2.7997,1.063174 4.04927,2.007605 5.48149,4.142949 1.1189,1.668341 1.24161,2.083491 1.24161,4.201554 0,4.489468 -2.70154,7.56152 -7.90086,8.984432 l -1.85778,0.508419 2.15371,0.200933 c 15.30496,1.427898 29.78163,7.79581 43.79194,19.262953 l 4.93333,4.037834 3.85404,0.10171 c 4.16099,0.109705 4.99508,0.377916 6.60808,2.124425 1.05064,1.137602 1.05064,3.924277 0,5.061878 -1.61721,1.751072 -2.4429,2.014931 -6.63521,2.12035 l -3.88137,0.0976 -1.17185,3.868524 c -2.67766,8.839592 -22.42289,65.103352 -23.36982,66.591982 -0.92877,1.46009 -3.13925,3.09039 -5.25835,3.87819 l -1.81708,0.67552 -20.16953,0.0497 c -11.12256,0.0274 -20.78611,-0.0702 -21.544151,-0.21773 z M 108.64067,127.4306 V 94.526478 H 91.157875 c -13.835377,0 -17.447037,0.07662 -17.3114,0.367234 0.09423,0.201978 5.026485,14.116448 10.960468,30.921058 5.933995,16.80459 11.114454,31.4462 11.512148,32.53687 l 0.723086,1.98307 h 5.799253 5.79924 z m 34.95359,0.14689 c 6.34662,-17.93569 11.54476,-32.709483 11.55142,-32.830669 0.007,-0.121186 -7.83767,-0.220343 -17.43182,-0.220343 h -17.44391 v 32.911392 32.91139 l 5.89249,-0.0807 5.89251,-0.0807 z"
          id="path125" />


    <path ftui-binding="style"
          [style]="la1_AB3:relay_0 | map('on: ´#FFBF00´, off: ´#000000´') | prepend('fill:') | append(';fill-opacity:1;stroke:#000000;stroke-width:1.15396;')"
          d="m 173.95665,437.82479 c -1.75557,-5.09837 -60.73954,-171.63625 -77.117838,-217.73782 -4.56744,-12.85641 -8.076898,-23.60282 -7.798796,-23.88093 0.278102,-0.2781 29.638614,-0.71306 65.245574,-0.96657 l 64.73994,-0.46094 v 124.12519 124.12519 h -21.63845 -21.63845 z"
          id="path2453"
          transform="matrix(0.26458333,0,0,0.26458333,50.595162,42.940035)" />
    <path ftui-binding="style"
          [style]="la1_AB3:relay_0 | map('on: ´#FFBF00´, off: ´#000000´') | prepend('fill:') | append(';fill-opacity:1;stroke:#000000;stroke-width:1.15396;')"
          d="M 263.37367,319.03512 V 195.04133 l 45.02695,0.11882 c 24.76482,0.0654 54.25458,0.37081 65.5328,0.6788 l 20.50586,0.55998 -15.58674,44.34814 c -8.5727,24.39148 -28.16338,79.88323 -43.53485,123.31499 l -27.94812,78.96685 h -21.99795 -21.99795 z"
          id="path2455"
          transform="matrix(0.26458333,0,0,0.26458333,50.595162,42.940035)" /></g>
    </svg>
</ftui-grid-tile>

Aber abgesehen von der Tatsache, dass ich jetzt natürlich (noch) nichts umschalten kann, funktioniert es leider noch immer nicht so wie gewünscht.
Es wird zwar jetzt nur die schwarze Fläche farblich geändert, aber die Lampe fehlt komplett.
Manuell geschaltet sieht das SVG im An-/Aus-Zustand so aus wie im Anhang zu sehen.
Behandle die Menschen so, als wären sie, was sie sein sollten. Dadurch hilfst du ihnen zu werden, was sie sein können. (Goethe)


RPi-3 mit HM-CFG-LAN und jede Menge HM Komponenten.

DocCyber

Ich fand all die vorgeschlagenen Lösungen zu kompliziert und dachte, es muss doch eine einfachere Lösung geben.

Tatsächlich habe ich mit Hilfe dieser Quelle eine Lösung gefunden, die ich gern mit euch teile.

So geht es bei mir:
1. In der SVG-Datei wird im Pfad für die unveränderliche Farbfläche fill:#xxxxxx aus dem style entfernt:
   style="fill:#000000;fill-opacity:0.6;stroke-width:0.326751"

2. Im selben Pfad wird die ID geändert; in meinem Fall habe ich id="fixedColor" gewählt.

3. In der CSS-Datei icon.component.css wird ganz am Ende eingefügt:    #fixedColor { fill: #abcdef !important; }
   Das legt die unveränderliche Farbe fest - hier mal baby-blau  ;)
 

<path
style="fill-opacity:1;stroke-width:0.326751"
d="m 94.104071,188.45682 -2.725605,-4.47228 -3.815865,-0.14689 c -4.585429,-0.17652 -5.947058,-0.67729 -7.177444,-2.63961 -1.028423,-1.64024 -1.028423,-2.47999 0,-4.12868 0.599219,-0.96063 1.254163,-1.48875 2.451378,-1.97672 l 1.633699,-0.66588 30.556936,0.0783 30.55695,0.0783 1.37296,0.84663 c 3.25829,2.00926 3.11958,5.59054 -0.29649,7.65503 -0.83942,0.50731 -1.65061,0.62194 -4.99227,0.70554 l -3.99,0.0998 -2.79326,4.52732 -2.79325,4.52732 -17.63107,-0.008 -17.631049,-0.008 z m -0.466082,-19.03578 c -2.990272,-0.58195 -5.64043,-2.24057 -6.965288,-4.3593 -0.884819,-1.415 -16.062596,-44.90839 -22.666602,-64.95332 l -1.790634,-5.43505 -3.770958,-0.146892 c -4.533782,-0.176605 -5.896597,-0.681437 -7.156009,-2.650798 -1.518031,-2.373771 -0.47975,-4.94359 2.492643,-6.169455 1.114052,-0.459451 2.139089,-0.580926 4.902264,-0.580926 h 3.493686 l 1.873381,-1.689269 c 7.694387,-6.938211 17.971185,-13.33215 27.327994,-17.002728 6.951895,-2.727159 11.617064,-3.841709 19.624404,-4.688459 l 1.81706,-0.19215 -1.45366,-0.356464 c -3.3278,-0.816059 -6.0987,-2.773717 -7.50553,-5.302707 -1.13815,-2.04601 -1.13834,-5.297988 -3.6e-4,-7.34467 1.06555,-1.916562 3.6979,-4.057622 6.01893,-4.895605 2.71162,-0.978992 6.60529,-0.946949 9.30048,0.07654 2.7997,1.063174 4.04927,2.007605 5.48149,4.142949 1.1189,1.668341 1.24161,2.083491 1.24161,4.201554 0,4.489468 -2.70154,7.56152 -7.90086,8.984432 l -1.85778,0.508419 2.15371,0.200933 c 15.30496,1.427898 29.78163,7.79581 43.79194,19.262953 l 4.93333,4.037834 3.85404,0.10171 c 4.16099,0.109705 4.99508,0.377916 6.60808,2.124425 1.05064,1.137602 1.05064,3.924277 0,5.061878 -1.61721,1.751072 -2.4429,2.014931 -6.63521,2.12035 l -3.88137,0.0976 -1.17185,3.868524 c -2.67766,8.839592 -22.42289,65.103352 -23.36982,66.591982 -0.92877,1.46009 -3.13925,3.09039 -5.25835,3.87819 l -1.81708,0.67552 -20.16953,0.0497 c -11.12256,0.0274 -20.78611,-0.0702 -21.544151,-0.21773 z M 108.64067,127.4306 V 94.526478 H 91.157875 c -13.835377,0 -17.447037,0.07662 -17.3114,0.367234 0.09423,0.201978 5.026485,14.116448 10.960468,30.921058 5.933995,16.80459 11.114454,31.4462 11.512148,32.53687 l 0.723086,1.98307 h 5.799253 5.79924 z m 34.95359,0.14689 c 6.34662,-17.93569 11.54476,-32.709483 11.55142,-32.830669 0.007,-0.121186 -7.83767,-0.220343 -17.43182,-0.220343 h -17.44391 v 32.911392 32.91139 l 5.89249,-0.0807 5.89251,-0.0807 z"

id="fixedColor" />


<path
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1.15396"
d="m 173.95665,437.82479 c -1.75557,-5.09837 -60.73954,-171.63625 -77.117838,-217.73782 -4.56744,-12.85641 -8.076898,-23.60282 -7.798796,-23.88093 0.278102,-0.2781 29.638614,-0.71306 65.245574,-0.96657 l 64.73994,-0.46094 v 124.12519 124.12519 h -21.63845 -21.63845 z"
id="path2453"
transform="matrix(0.26458333,0,0,0.26458333,50.595162,42.940035)" />

<path
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1.15396"
d="M 263.37367,319.03512 V 195.04133 l 45.02695,0.11882 c 24.76482,0.0654 54.25458,0.37081 65.5328,0.6788 l 20.50586,0.55998 -15.58674,44.34814 c -8.5727,24.39148 -28.16338,79.88323 -43.53485,123.31499 l -27.94812,78.96685 h -21.99795 -21.99795 z"
id="path2455"
transform="matrix(0.26458333,0,0,0.26458333,50.595162,42.940035)" />



Die Einbindung der SVG in <ftui-icon> bleibt dabei genau so wie gewohnt. So hatte ich mir das vorgestellt.
Wenn es noch besser geht, freue ich mich über Vorschläge.

Vielleicht kann der eine oder andere auch schon jetzt einen Nutzen aus dieser Lösung ziehen.
Behandle die Menschen so, als wären sie, was sie sein sollten. Dadurch hilfst du ihnen zu werden, was sie sein können. (Goethe)


RPi-3 mit HM-CFG-LAN und jede Menge HM Komponenten.

setstate

es geht auch ohne Änderungen am SVG. Nur per Style-Tag in der HTML-Seite direkt. Ich empfehle, die *.component.css nicht zu verändern.


  <style>
    .on svg#svg5 path:nth-of-type(2),
    .on svg#svg5 path:nth-of-type(3) {
      fill: #ee2 !important;
    }
  </style>
</head>

<body>
  <ftui-button [(value)]="local:test">on,off</ftui-button>
  <ftui-icon [class-name]="local:test">
    <svg id="svg5"
...

DocCyber

Zitat von: setstate am 24 Januar 2024, 22:33:16es geht auch ohne Änderungen am SVG
Ich muss aber doch festlegen, welche Flächen nicht geändert werden sollen.
Wo soll ich das machen, wenn nicht im SVG?
Ich vermute daher, du meinst es geht auch ohne Änderungen der CSS.

Davon abgesehen: Ja, dein Vorschlag ist eine Möglichkeit, aber ich finde ihn nicht besonders gut, weil umständlich.
Denn dafür benötigt man zusätzlich einen Button als class-changer und außerdem noch eine relativ komplexe Style-Definition.

Was spricht degegen, meine vorgeschlagene Änderung grundsätzlich in die icon.component.css aufzunehmen, ggf. noch etwas spezifischer?
Ich finde, das ist kürzer und viel einfacher.

Behandle die Menschen so, als wären sie, was sie sein sollten. Dadurch hilfst du ihnen zu werden, was sie sein können. (Goethe)


RPi-3 mit HM-CFG-LAN und jede Menge HM Komponenten.

yersinia

#13
Zitat von: DocCyber am 25 Januar 2024, 10:50:42
Zitat von: setstate am 24 Januar 2024, 22:33:16es geht auch ohne Änderungen am SVG
Ich muss aber doch festlegen, welche Flächen nicht geändert werden sollen.
Wo soll ich das machen, wenn nicht im SVG?
In deinem konkreten Fall genau so:
  <style>
    .on svg#svg5 path:nth-of-type(2),
    .on svg#svg5 path:nth-of-type(3) {
      fill: #ee2 !important;
    }
  </style>
Da wird über die Zuweisung der Style des HTML Elements angepasst. Für die verschiedenen Variationen und Hierarchien solltest du dich mehr mit der CSS Struktur beschäftigen.
Zitat von: DocCyber am 25 Januar 2024, 10:50:42Ich vermute daher, du meinst es geht auch ohne Änderungen der CSS.
Das ist leider nicht spezifisch genug; wie du CSS einbindest ist dir ja überlassen. Via icon.component.css ist ein machbarer, aber im Verhältnis zu den Alternativen Lösungsoptionen, eher schlechter Weg - insb weil dies via update überschrieben werden kann.

Zitat von: DocCyber am 25 Januar 2024, 10:50:42Denn dafür benötigt man zusätzlich einen Button als class-changer und außerdem noch eine relativ komplexe Style-Definition.
Eigtl mMn nicht. Du benötigst ein Event aus FHEM und kannst via ftui-binding auf dieses Event reagieren. Das ist ja die großartige, extrem flexible (dadurch auch aber auch schnell Komplexe) Lösung (vulgo heißer Scheiß) von FTUI3.

Zitat von: DocCyber am 25 Januar 2024, 10:50:42Was spricht degegen, meine vorgeschlagene Änderung grundsätzlich in die icon.component.css aufzunehmen, ggf. noch etwas spezifischer?
Ich finde, das ist kürzer und viel einfacher.
Es passt für dich und deinen Anwendungsfall und ist daher wenig flexibel und für andere Anwender ggf unpassend. Zumal die Änderung regelmässig über update überschrieben werden würde - und: es geht auch über andere, bereits implementierte Funktionen/Features.

EDIT:
Generell musst du, wenn du das svg baust, definieren, welche styles du vordefinierst und welche du von außen (also das Elternelement der svg) beeinflusst haben willst. CSS bietet hier mehrere Lösungen - und du hast ein für dich gut funktionierende gefunden.
viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

DocCyber

Zitat von: yersinia am 25 Januar 2024, 12:57:37für andere Anwender ggf unpassend.
Passend für jeden, der fixedColor verwenden möchte, aber für alle anderen nicht störend.

ZitatZumal die Änderung regelmässig über update überschrieben werden würde
Ja, sofern es nicht generell eingebaut würde.

Zitates geht auch über andere, bereits implementierte Funktionen/Features.
aber nicht besonders gut, finde ich.


Ich möchte nicht den Eindruck erwecken, als sei ich mit FTUI-3 unzufrieden.
Im Gegenteil - ich finde es super, was Mario (setstate) hier kreiert hat. Die Vorläufer-Version war schon gut, aber FTUI-3 ist hervorragend.

Der Teufel steckt aber oft im Detail, und die hier diskutierte Detaillösung gefällt mir aus den genannten Gründen nicht besonders.
Deshalb bleibe ich zunächst bei meiner Lösung.


Wie auch immer: ich möchte das Thema hier nicht weiter vertiefen und danke euch für euren Input.
Behandle die Menschen so, als wären sie, was sie sein sollten. Dadurch hilfst du ihnen zu werden, was sie sein können. (Goethe)


RPi-3 mit HM-CFG-LAN und jede Menge HM Komponenten.