I was going to put it somewhere in the Basic, but I can leave it in the MDL. The className can be undefined in the case where you wanted to add something to such "undefinded" string you will got:
"undefined myClass". - I probably cannot escape from that... Maybe I'm missing some way. 2018-02-24 17:00 GMT+01:00 Alex Harui <aha...@adobe.com.invalid>: > Looks ok to me. Seems like you don't need COMPILE::JS. It should work on > all platforms. We can have lots of utility functions in > org.apache.royale.utils. > > In terms of optimization (size/performance) a function like this is > potentially overkill for the Basic set. It is fine for MDL since MDL has > already picked up additional overhead in order to style "everything". But > I subscribe to what I learned from a wise programmer many years ago: If > you truly understand the problem space, you can often find a smaller, > faster solution. Like I said, if you know that there "must" be at least > one string from typenames as the last string, the replacement is much > easier. All of the extra null checking and trimming in your version is > not really needed for the specific problem of replacing from a set of > string you know about that don't need trimming. > > My 2 cents, > -Alex > > On 2/24/18, 4:50 AM, "Piotr Zarzycki" <piotrzarzyck...@gmail.com> wrote: > > >Alex, > > > >I used your suggestion, added some additional things and I end up with > >following utility [1]. Usage will looks like that: [2]. Do you think it > >could be part of the framework ? It's working nicely with MDL. > > > >[1] > >https://na01.safelinks.protection.outlook.com/?url= > https%3A%2F%2Fpaste.apa > >che.org%2FtsaF&data=02%7C01%7Caharui%40adobe.com% > 7C91e633a78bea4fc4c89908d > >57b853bdf%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0% > 7C636550734524475642& > >sdata=O%2BZn0ajlM6A2Q0tBEBvDDtZZcNQYNOBsCn1kO0fgdPo%3D&reserved=0 > >[2] > >https://na01.safelinks.protection.outlook.com/?url= > https%3A%2F%2Fpaste.apa > >che.org%2Fxbfb&data=02%7C01%7Caharui%40adobe.com% > 7C91e633a78bea4fc4c89908d > >57b853bdf%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0% > 7C636550734524475642& > >sdata=j0n83ksobPZfR0YY7oMBJMU1dzx7fcW%2FNOmLd1S%2BL0o%3D&reserved=0 > > > >Thanks, Piotr > > > > > > > >2018-02-23 21:31 GMT+01:00 Alex Harui <aha...@adobe.com.invalid>: > > > >> Well, whether you like it or not, the wrapper is mapping a > >>space-delimited > >> list to the array so if you manipulate the array you have to > >> back-calculate the string. IMO, in HTML, the "class" property is a > >>string > >> and people are used to entering a space-delimited list. That's why we > >> have a className property on UIBase. So that folks have something > >>similar > >> in MXML. > >> > >> So, unfortunately, your problem can't be as simple as manipulating > >> classList via its APIs. Also consider that the classList API might > >>itself > >> be doing a string search in the array. > >> > >> If you have the string "Piotr Alex Harbs" and want to replace Alex with > >> Peter and you know that Alex can't be the last item because the last > >>item > >> is the typeName which is never null or "", then a simple String.replace > >> call should work. > >> > >> className = className.replace(oldName + " ", newName + " "); > >> > >> HTH, > >> -Alex > >> > >> On 2/23/18, 12:21 PM, "Piotr Zarzycki" <piotrzarzyck...@gmail.com> > >>wrote: > >> > >> >It's just swapping. If I have following code [1] - it is easier to > >> >manipulate classList than className which is simple string. What > >>utility > >> >could look like ? It would be manipulating strings, which is less > >> >convenient. > >> > > >> >[1] > >> >https://na01.safelinks.protection.outlook.com/?url= > >> https%3A%2F%2Fpaste.apa > >> >che.org%2Fat0H&data=02%7C01%7Caharui%40adobe.com% > >> 7C061f7278ca3748bfaee408d > >> >57afb14a9%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0% > >> 7C636550141162759398& > >> >sdata=76W6lkZuIxUbO5mDtenl4g88zmRPsHaA1evyvvk7O08%3D&reserved=0 > >> > > >> >2018-02-23 21:11 GMT+01:00 Alex Harui <aha...@adobe.com.invalid>: > >> > > >> >> Just compiler. No need for asjs changes at this time I think. > >> >> > >> >> I'm still unclear on why you need to manipulate classList directly. > >>Is > >> >> there some code that is in the JS from Material that manipulates > >> >> classList? Or are you just trying to swap out a name on the > >>classList? > >> >> If the latter, why not just create some utility function that > >>operates > >> >>on > >> >> className and not the underlying element? > >> >> > >> >> -Aleex > >> >> > >> >> On 2/23/18, 11:58 AM, "Piotr Zarzycki" <piotrzarzyck...@gmail.com> > >> >>wrote: > >> >> > >> >> >You did merge vivid compiler changes or also changes from asjs > >> >>repository. > >> >> > > >> >> >As for my work on MDL. I ended up with something like that [1]. The > >> >> >question now how to propagate that code ? This is code for the > >> >>component > >> >> >which manipulates classList. Should I create some parent class ? > >> >>General/ > >> >> >for MDL only, or Bead which will be included into such classes ? > >> >> >Theoretically bead could listen for initComplete. > >> >> > > >> >> >[1] > >> >> >https://na01.safelinks.protection.outlook.com/?url= > >> >> https%3A%2F%2Fpaste.apa > >> >> >che.org%2F1dy2&data=02%7C01%7Caharui%40adobe.com% > >> >> 7C8e313e7d7f9d4608759f08d > >> >> >57af7d477%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0% > >> >> 7C636550127203173382& > >> >> >sdata=NkxHZQlHtOeJzWC%2BIyxxst89DlX0CCUa9VeGpztTL2s%3D&reserved=0 > >> >> > > >> >> >Thanks, > >> >> >Piotr > >> >> > > >> >> >2018-02-23 20:53 GMT+01:00 Alex Harui <aha...@adobe.com.invalid>: > >> >> > > >> >> >> I think I have Maven using the basic.css appropriately. There is > >>no > >> >>way > >> >> >> to default to including a SWC in Maven and then not use it in a > >>child > >> >> >> project, so all example poms that aren't MDL need to bring in the > >> >> >> BasicTheme. > >> >> >> > >> >> >> Also, I had to merge the compiler change from vivid-ui-set branch > >>to > >> >>get > >> >> >> the theme SWC to work in Maven. > >> >> >> > >> >> >> -Alex > >> >> >> > >> >> >> On 2/23/18, 8:04 AM, "Alex Harui" <aha...@adobe.com.INVALID> > >>wrote: > >> >> >> > >> >> >> >MDL does not want the basic.css theme. That is why we are moving > >> >> >>styles > >> >> >> >from Basic:swc's defaults.css to themes/basic.css. I see that > >>the > >> >> >>Maven > >> >> >> >plugin doesn't allow specification of a theme, so that's another > >> >>task. > >> >> >> I > >> >> >> >can do it if nobody wants to take that on. So, yes, move the > >>Button > >> >> >> >selectors from defaults.css to basic.css if that helps, but I > >>will > >> >>say > >> >> >> >that I didn't notice those styles taking effect in my local > >>version > >> >>of > >> >> >> >MDLTabsExample and assumed that mdl had overridden those styles. > >> As > >> >> >> >Carlos said, in the end we want basic.css to be compliant CSS so > >> >>don't > >> >> >> >move anything with ClassReference as the value without discussing > >> >> >>first. > >> >> >> > > >> >> >> >TypeNames should be set after the call to super(). Look at Label > >> >>and > >> >> >> >MultilineLabel. They are working fine for me. They are being > >>used > >> >>in > >> >> >> >RoyaleStore. There might have been issues before yesterday > >>because > >> >> >>lots > >> >> >> >of Basic components were setting ClassName, but I went and > >>cleaned > >> >> >>that up > >> >> >> >although I could have missed a few. > >> >> >> > > >> >> >> >In complex Views, you have two choices: Make a subclass or > >>assign > >> >>the > >> >> >> >className. We should try to set set typeNames. In fact, maybe > >>we > >> >> >>should > >> >> >> >make typeNames protected. > >> >> >> > > >> >> >> >So, for ComboBoxView, the current code is setting a custom > >>className > >> >> >>which > >> >> >> >is valid. Users can then style it further by adding a > >> >> >>.ComboBoxTextInput > >> >> >> >selector to their CSS. However, class selectors are not pruned by > >> >>the > >> >> >> >compiler. So in other cases, we have created a real subclass (in > >> >>this > >> >> >> >case "ComboBoxTextInput extends TextInput) and then the CSS would > >> >>not > >> >> >>have > >> >> >> >the "." in front so it would look like a type selector and the > >> >>compiler > >> >> >> >would prune it from apps that don't use a ComboBox. Not sure > >>which > >> >>is > >> >> >> >better/faster, > >> >> >> > > >> >> >> >Regarding Peter's point about Labels in Menus. The issue isn't > >>that > >> >> >>Flash > >> >> >> >can't handle it. It is that our SimpleCSSValuesImpl lookup > >>doesn't > >> >> >>handle > >> >> >> >descendant and other advanced selectors. The techniques for > >> >> >>ComboBoxView > >> >> >> >is how we avoid requiring a more complex lookup on the SWF side. > >> >>The > >> >> >>menu > >> >> >> >code should not be setting typeNames on other things, only > >>itself. > >> >>I'm > >> >> >> >not sure if on the JS side, avoiding descendant selectors speeds > >> >> >>things up > >> >> >> >in the browser or not. We could create an IValuesImpl with > >> >>descendant > >> >> >> >selector support on the SWF side and probably will someday. > >> >>Volunteers > >> >> >> >are welcome to take that on. > >> >> >> > > >> >> >> >Of course, I could be wrong... > >> >> >> >-Alex > >> >> >> > > >> >> >> > > >> >> >> >On 2/23/18, 7:37 AM, "Piotr Zarzycki" <piotrzarzyck...@gmail.com > > > >> >> >>wrote: > >> >> >> > > >> >> >> >>A bit more on point 1. and let's take for the example simple > >> >>Button. > >> >> >>We > >> >> >> >>have some styles for Button in Basic.css. MDL Button extends > >> >> >>TextButton - > >> >> >> >>some styles naturally has been added from default.css. > >> >> >> >> > >> >> >> >>If I create theme I should achieve that my theme classes will > >> >>override > >> >> >> >>default.css Button styles and I should be good yes ? > >> >> >> >> > >> >> >> >>Am I understand it correctly ? > >> >> >> >>Thanks, Piotr > >> >> >> >> > >> >> >> >> > >> >> >> >>2018-02-23 16:32 GMT+01:00 Piotr Zarzycki > >> >><piotrzarzyck...@gmail.com > >> >> >: > >> >> >> >> > >> >> >> >>> Alex, > >> >> >> >>> > >> >> >> >>> I have started to work on MDL and move all typeNames from > >> >> >>createElement > >> >> >> >>>to > >> >> >> >>> constructor. Unfortunately something is not right here. > >> >> >> >>> > >> >> >> >>> 1) I still need to exclude BasicJS.swc:default.css - I did add > >> >> >>theme to > >> >> >> >>> MaterialDesignLite module maven build - it didn't help. > >> >> >> >>> 2) If I cannot setup typeNames and classNames inside my > >> >>component, > >> >> >>how > >> >> >> >>>can > >> >> >> >>> I achieve switching some UI parts of the component ? In MDL > >>it is > >> >> >>quite > >> >> >> >>> common that if I would like to change component I'm adding to > >>it > >> >>css > >> >> >> >>>class. > >> >> >> >>> [1] - This is the example. If I remove line it doesn't work. > >> >>There > >> >> >>are > >> >> >> >>> several places in MDL where we are doing such things. It is > >> >>common > >> >> >>in > >> >> >> >>>JS > >> >> >> >>> world doing such things. > >> >> >> >>> > >> >> >> >>> typeNames = element.className; > >> >> >> >>> > >> >> >> >>> Thoughts ? > >> >> >> >>> > >> >> >> >>> [1] > >> >> >> >>>https://na01.safelinks.protection.outlook.com/?url= > >> >> >> https%3A%2F%2Fpaste.a > >> >> >> >>>p > >> >> >> >>>ache.org%2Fat0H&data=02%7C01%7Caharui%40adobe.com% > >> >> >> 7Ca44c142f0ddc455c70bf > >> >> >> >>>0 > >> >> >> >>>8d57ad361e6%7Cfa7b1b5a7b34438794aed2c178de > >> >> >> cee1%7C0%7C0%7C636549970664822 > >> >> >> >>>4 > >> >> >> >>>53&sdata=1sSgdfBy%2BAv%2FsFIYwVFFHvVlhtJ3w3TW% > >> >> >> 2FiDEyPVYGmo%3D&reserved=0 > >> >> >> >>> > >> >> >> >>> Thanks, > >> >> >> >>> Piotr > >> >> >> >>> > >> >> >> >>> > >> >> >> >>> 2018-02-23 15:55 GMT+01:00 Piotr Zarzycki > >> >> >><piotrzarzyck...@gmail.com>: > >> >> >> >>> > >> >> >> >>>> Peter, > >> >> >> >>>> > >> >> >> >>>> That is interesting what you are saying. What will happen > >>then > >> >>if > >> >> >>you > >> >> >> >>>> have class which extends other one. The parent class is > >>setting > >> >> >> >>>>typeNames > >> >> >> >>>> and derived one also before super? The parent one will > >>override > >> >>it? > >> >> >> >>>> > >> >> >> >>>> I cannot check now how typeNames is implemented. > >> >> >> >>>> > >> >> >> >>>> Piotr > >> >> >> >>>> > >> >> >> >>>> > >> >> >> >>>> On Fri, Feb 23, 2018, 15:13 Peter Ent > >><p...@adobe.com.invalid> > >> >> >>wrote: > >> >> >> >>>> > >> >> >> >>>>> I have been guilty of this and have been using typeNames > >>now. > >> >>I've > >> >> >> >>>>>found > >> >> >> >>>>> that I need to set typeNames before calling super() in the > >> >> >> >>>>>constructor. I > >> >> >> >>>>> thought it was done afterwards, but if I set typeNames after > >> >> >>calling > >> >> >> >>>>> super(), the typeName I set does not show up in the HTML > >> >>produced. > >> >> >> >>>>> > >> >> >> >>>>> Also, suppose I have this: A Menu with a label inside of it. > >> >> >>People > >> >> >> >>>>>will > >> >> >> >>>>> want to change the background color of the menu and the > >>color > >> >>of > >> >> >>the > >> >> >> >>>>> label's text. If I were doing this in plain HTML/JS/CSS, I > >> >>would > >> >> >>set > >> >> >> >>>>>a > >> >> >> >>>>> selector: .Menu .Label { color: blue; } but that's not > >> >>supported > >> >> >>in > >> >> >> >>>>>the > >> >> >> >>>>> Flash Player. So when I set up the typeName for the label > >> >>inside > >> >> >>of > >> >> >> >>>>>the > >> >> >> >>>>> Menu should I set it to: Menu_Label or MenuLabel or > >>Menu-Label? > >> >> >>And > >> >> >> >>>>>is > >> >> >> >>>>> using "." in a selector name a good idea? I would think the > >>CSS > >> >> >> >>>>>processor > >> >> >> >>>>> in the browser would be confused between ".x.y" and ".x .y" > >> >>which > >> >> >>can > >> >> >> >>>>> also > >> >> >> >>>>> be written as ".x.y". Basically, we should have a consist > >> >>naming > >> >> >> >>>>>pattern > >> >> >> >>>>> here. > >> >> >> >>>>> > >> >> >> >>>>> ‹peter > >> >> >> >>>>> > >> >> >> >>>>> On 2/23/18, 4:09 AM, "Gabe Harbs" <harbs.li...@gmail.com> > >> >>wrote: > >> >> >> >>>>> > >> >> >> >>>>> >There¹s some edge cases which seem problematic. One > >>example: > >> >> >> >>>>> >ComboBoxBiew has the following: > >> >> >> >>>>> > input = new TextInput(); > >> >> >> >>>>> > input.className = "ComboBoxTextInput"; > >> >> >> >>>>> > > >> >> >> >>>>> > button = new TextButton(); > >> >> >> >>>>> > button.className = > >> >> >> >>>>> >"opt_org-apache.royale-html-ComboBox_Button"; > >> >> >> >>>>> > > >> >> >> >>>>> >Input and button are both external to the view class, but > >>are > >> >> >> >>>>>managed by > >> >> >> >>>>> >the view class. On the other hand, there is a chance that > >>the > >> >> >>user > >> >> >> >>>>>might > >> >> >> >>>>> >wan to style them. I¹m not sure whether className or > >> >>typeNames is > >> >> >> >>>>>more > >> >> >> >>>>> >appropriate hereŠ > >> >> >> >>>>> > > >> >> >> >>>>> >Harbs > >> >> >> >>>>> > > >> >> >> >>>>> >> On Feb 23, 2018, at 11:03 AM, Gabe Harbs > >> >> >><harbs.li...@gmail.com> > >> >> >> >>>>> wrote: > >> >> >> >>>>> >> > >> >> >> >>>>> >> I¹ll help. > >> >> >> >>>>> >> > >> >> >> >>>>> >>> On Feb 23, 2018, at 10:50 AM, Alex Harui > >> >> >> >>>>><aha...@adobe.com.INVALID> > >> >> >> >>>>> >>>wrote: > >> >> >> >>>>> >>> > >> >> >> >>>>> >>> Quick note before I shut down for the night. > >> >> >> >>>>> >>> > >> >> >> >>>>> >>> UIBase has both a typeNames and className property. > >> >> >>TypeNames is > >> >> >> >>>>> used > >> >> >> >>>>> >>>to > >> >> >> >>>>> >>> emulate Flex-like type selectors in the CSS lookup. It > >> >> >>should be > >> >> >> >>>>>set > >> >> >> >>>>> >>>in > >> >> >> >>>>> >>> the constructor and never set from outside the class. > >> >>There > >> >> >>are > >> >> >> >>>>>a > >> >> >> >>>>> few > >> >> >> >>>>> >>> classes in Basic and lots of classes in MDL that should > >>be > >> >> >> >>>>>upgraded > >> >> >> >>>>> to > >> >> >> >>>>> >>>set > >> >> >> >>>>> >>> typeNames in the constructor. Subclasses can append to > >>the > >> >> >>base > >> >> >> >>>>> >>>class's > >> >> >> >>>>> >>> typeNames > >> >> >> >>>>> >>> > >> >> >> >>>>> >>> className is the opposite. It should never be set > >>inside > >> >>the > >> >> >> >>>>> >>>component's > >> >> >> >>>>> >>> class. It is for users of that component to set styles > >>on > >> >>the > >> >> >> >>>>> >>>component. > >> >> >> >>>>> >>> > >> >> >> >>>>> >>> Can we get a volunteer to clean this up? > >> >> >> >>>>> >>> > >> >> >> >>>>> >>> Thanks, > >> >> >> >>>>> >>> -Alex > >> >> >> >>>>> >>> > >> >> >> >>>>> >> > >> >> >> >>>>> > > >> >> >> >>>>> > >> >> >> >>>>> > >> >> >> >>> > >> >> >> >>> > >> >> >> >>> -- > >> >> >> >>> > >> >> >> >>> Piotr Zarzycki > >> >> >> >>> > >> >> >> >>> Patreon: > >> >> >> >>>*https://na01.safelinks.protection.outlook.com/?url= > >> >> >> https%3A%2F%2Fwww.pa > >> >> >> >>>t > >> >> >> >>>reon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com > >> >> >> %7Ca44c142f0dd > >> >> >> >>>c > >> >> >> >>>455c70bf08d57ad361e6%7Cfa7b1b5a7b34438794aed2c178de > >> >> >> cee1%7C0%7C0%7C636549 > >> >> >> >>>9 > >> >> >> >>>70664822453&sdata=RxqP6b0L0BmWiiX3t6QdtbiA3YwoJR > >> >> >> FFjSWC8LaxmWI%3D&reserve > >> >> >> >>>d > >> >> >> >>>=0 > >> >> >> >>> > >> >> >> >>><https://na01.safelinks.protection.outlook.com/?url= > >> >> >> https%3A%2F%2Fwww.pa > >> >> >> >>>t > >> >> >> >>>reon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com > >> >> >> %7Ca44c142f0dd > >> >> >> >>>c > >> >> >> >>>455c70bf08d57ad361e6%7Cfa7b1b5a7b34438794aed2c178de > >> >> >> cee1%7C0%7C0%7C636549 > >> >> >> >>>9 > >> >> >> >>>70664822453&sdata=RxqP6b0L0BmWiiX3t6QdtbiA3YwoJR > >> >> >> FFjSWC8LaxmWI%3D&reserve > >> >> >> >>>d > >> >> >> >>>=0>* > >> >> >> >>> > >> >> >> >> > >> >> >> >> > >> >> >> >> > >> >> >> >>-- > >> >> >> >> > >> >> >> >>Piotr Zarzycki > >> >> >> >> > >> >> >> >>Patreon: > >> >> >> >>*https://na01.safelinks.protection.outlook.com/?url= > >> >> >> https%3A%2F%2Fwww.pat > >> >> >> >>r > >> >> >> >>eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com > >> >> >> %7Ca44c142f0ddc4 > >> >> >> >>5 > >> >> >> >>5c70bf08d57ad361e6%7Cfa7b1b5a7b34438794aed2c178de > >> >> >> cee1%7C0%7C0%7C636549970 > >> >> >> >>6 > >> >> >> > >> >> >>>>64822453&sdata=RxqP6b0L0BmWiiX3t6QdtbiA3YwoJR > >> >> FFjSWC8LaxmWI%3D&reserved= > >> >> >>>>0 > >> >> >> >><https://na01.safelinks.protection.outlook.com/?url= > >> >> >> https%3A%2F%2Fwww.pat > >> >> >> >>r > >> >> >> >>eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com > >> >> >> %7Ca44c142f0ddc4 > >> >> >> >>5 > >> >> >> >>5c70bf08d57ad361e6%7Cfa7b1b5a7b34438794aed2c178de > >> >> >> cee1%7C0%7C0%7C636549970 > >> >> >> >>6 > >> >> >> >>64822453&sdata=RxqP6b0L0BmWiiX3t6QdtbiA3YwoJR > >> >> >> FFjSWC8LaxmWI%3D&reserved=0> > >> >> >> >>* > >> >> >> > > >> >> >> > >> >> >> > >> >> > > >> >> > > >> >> >-- > >> >> > > >> >> >Piotr Zarzycki > >> >> > > >> >> >Patreon: > >> >> >*https://na01.safelinks.protection.outlook.com/?url= > >> >> https%3A%2F%2Fwww.patr > >> >> >eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com% > >> >> 7C8e313e7d7f9d46 > >> >> >08759f08d57af7d477%7Cfa7b1b5a7b34438794aed2c178de > >> >> cee1%7C0%7C0%7C6365501272 > >> >> > >> >>>03173382&sdata=CTWhfUy0ILGvvx3HwRbmnkSZ3Nf5ay > >> lHwldhGDulDOE%3D&reserved=0 > >> >> ><https://na01.safelinks.protection.outlook.com/?url= > >> >> https%3A%2F%2Fwww.patr > >> >> >eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com% > >> >> 7C8e313e7d7f9d46 > >> >> >08759f08d57af7d477%7Cfa7b1b5a7b34438794aed2c178de > >> >> cee1%7C0%7C0%7C6365501272 > >> >> >03173382&sdata=CTWhfUy0ILGvvx3HwRbmnkSZ3Nf5ay > >> >> lHwldhGDulDOE%3D&reserved=0>* > >> >> > >> >> > >> > > >> > > >> >-- > >> > > >> >Piotr Zarzycki > >> > > >> >Patreon: > >> >*https://na01.safelinks.protection.outlook.com/?url= > >> https%3A%2F%2Fwww.patr > >> >eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com% > >> 7C061f7278ca3748 > >> >bfaee408d57afb14a9%7Cfa7b1b5a7b34438794aed2c178de > >> cee1%7C0%7C0%7C6365501411 > >> > >>>62759398&sdata=rpVtPRF2nJb03vSLEIQiK0K3uzGMs6 > 6vbTZtOxsVXKs%3D&reserved=0 > >> ><https://na01.safelinks.protection.outlook.com/?url= > >> https%3A%2F%2Fwww.patr > >> >eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com% > >> 7C061f7278ca3748 > >> >bfaee408d57afb14a9%7Cfa7b1b5a7b34438794aed2c178de > >> cee1%7C0%7C0%7C6365501411 > >> >62759398&sdata=rpVtPRF2nJb03vSLEIQiK0K3uzGMs6 > >> 6vbTZtOxsVXKs%3D&reserved=0>* > >> > >> > > > > > >-- > > > >Piotr Zarzycki > > > >Patreon: > >*https://na01.safelinks.protection.outlook.com/?url= > https%3A%2F%2Fwww.patr > >eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com% > 7C91e633a78bea4f > >c4c89908d57b853bdf%7Cfa7b1b5a7b34438794aed2c178de > cee1%7C0%7C0%7C6365507345 > >24475642&sdata=dG08yDIsBZVQ1XNIJIjCCqFgQwgmNQ > HJQSQ7ds5O%2F38%3D&reserved=0 > ><https://na01.safelinks.protection.outlook.com/?url= > https%3A%2F%2Fwww.patr > >eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com% > 7C91e633a78bea4f > >c4c89908d57b853bdf%7Cfa7b1b5a7b34438794aed2c178de > cee1%7C0%7C0%7C6365507345 > >24475642&sdata=dG08yDIsBZVQ1XNIJIjCCqFgQwgmNQ > HJQSQ7ds5O%2F38%3D&reserved=0 > >>* > > -- Piotr Zarzycki Patreon: *https://www.patreon.com/piotrzarzycki <https://www.patreon.com/piotrzarzycki>*