Why the need for a lodash path? Wouldn't an acccessor be more flexible and only slightly less convenient? E.g.
dynamicRange = juice(Inputs.range, {
label: d => d[1].label,
min: d => d[0][0],
max: d => d[0][1],
})
This would allow for a (subjectively) nicer API as well, e.g.:
dynamicRange = juice(Inputs.range, {
label: (d, o) => o.label,
min: d => d[0],
max: d => d[1],
})
Regarding the "bug": every aspect of inputs is hidden behind an abstraction, it's not just DOM nodes and their properties, but also callbacks and values in closures. Imo there's no way for nanomorph to handle this without a possibly significant rewrite of some inputs (e.g. in select() each option element would need to reference its original configuration and data separately, essentially becoming a component).