Sorry for causing confusion about components vs component sets. I did not mean 
to state anything against the idea of _component_. What I called an element 
(probably after DOM Elements) and what you call a component are very similar if 
not the same thing. My point was against the idea of "here is a _predefined 
set_ of components, and we call it a UI library". Such predefined sets limit 
the use of the library to someone's personal/pet project and don't attract 
professional users. When designing/building a library, if the developer is 
spending most of their time on implementing those things, then it shows: 
abstractions are not properly designed, things that could have been separate 
pieces are coupled, etc.

So, in short, I totally agree with you on the idea of React components. 
However, bootstrap and tailwind are completely different things that are 
attractive to a different set of users. React is a UI library, the others are 
just that set of components, maybe with some level of customizability, and they 
are all awful. If you are building an application, you wouldn't touch Tailwind 
or Bootstrap, but if you are a cheap agency spitting out websites like a 
printing press, then you might love those predefined sets which help you build 
cheap things for cheap.

Regarding accessibility, many people limit the idea to assistive technologies, 
probably imagining a blind person browsing the web using a screen reader. 
Although that's very important (I have visually impaired family members and 
even if I hadn't, I would still care about this a lot), limiting the 
understanding of accessibility to AT is just wrong. There are a lot of aspects 
to cover, and a UI library can be very helpful to developers with its design, 
guiding the user toward building more accessible interactions. Most UI 
libraries do the very opposite as most are designed and implemented with full 
focus on implementation details and a lack of understanding of the human side 
of the communication mechanism an application delivers. A good example of awful 
accessibility is PDF: funny enough, a PDF document with two-column letter/A4 
pages could be as accessible to a blind person on a phone as well as on a 
desktop, but you cannot say the same for the majority of consumers who can read 
visible text without assistive technologies: One needs to zoom in and keep 
scrolling in every direction to be able to follow the text due to the 
completely unfitting layout.

Accessibility is another reason for most people jumping on Electron (or native 
widgets), but I think, for a UI library designer, there's no excuse for not 
diving into this. If you're going to spend many days, if not months, on having 
your fonts rendered nicely and efficiently on the screen, you better spend some 
time on how the consumer will actually _access that beauty_. Leaving things to 
the monopoly of a few systems/libraries/products is probably one of the worst 
things about the state of the art today. It is vital to have more people who 
are willing to dive deep and tackle hard things in new ways if we don't want to 
be using Electron-based desktop environments (MS UWP!?) in an upcoming OS 
update.

About being composable and allowing users to utilize your library in different 
ways (without starting library vs framework wars :), I think the signal/slot 
idea that you want to adopt is on good track. It should be easy for the user to 
define _events/signals_ that their _components_ could emit as well as 
completely replace that mechanism when they don't need it or when they want to 
control things in their own way, in their own loop. It mostly falls onto the 
API/DSL design to make the process as convenient and intuitive as possible.

The box type is not limited, really. It defines the layout and appearance, and 
everything comes with _sensible defaults_ (sensible to me, at least :D). The 
default renderer has various features like shape, fill, and border. A box's 
content (child elements) would be centered horizontally and vertically _by 
default_. The definition has separate parts exactly the way HTML and CSS work 
but with a design for user interfaces rather than scientific papers and notes 
_—the web is a collection of documents and every single web application is a 
hack using a technology for something outside its design aim_.

Basically, I'm looking at what we have, mostly the web, and then removing 
things that are completely unfit, such as almost every element accepting text 
as its content and all that flows, reflows, spans... then flex boxes and 
grids... All the patchy solutions to make something that it is not. But I steal 
the basic idea of having separate places to define what a button is, how it 
behaves, and what color its shadow will be. As a concept, CSS is great: I do 
not mean the disaster called cascading, but simply the idea of attaching a set 
of definitions to an object in a separate place, with a separate syntax, as it 
makes things much clearer, manageable, and convenient.

Reply via email to