Found while extending the disabled fill recipe in LibreChat-AI#16487.
packages/client/src/components/InputNumber.tsx puts its classes on rc-input-number's wrapper div, but the disabled state lives on the nested <input>; the wrapper only gains an rc-input-number-disabled class. So the component's disabled:opacity-50 has never matched: a disabled InputNumber does not dim in any theme today, and the theme-disabled: recipe (disabledFillClasses) cannot reach it either, which is why LibreChat-AI#16487 leaves it out.
Gap: make the disabled state reach the wrapper (for example a data-disabled attribute or state classes derived from props.disabled), so both the default dim and a fill theme's disabled roles apply. This changes the default theme's disabled InputNumber from undimmed to dimmed, so it needs its own before/after check.
Found while extending the disabled fill recipe in LibreChat-AI#16487.
packages/client/src/components/InputNumber.tsxputs its classes onrc-input-number's wrapperdiv, but the disabled state lives on the nested<input>; the wrapper only gains anrc-input-number-disabledclass. So the component'sdisabled:opacity-50has never matched: a disabledInputNumberdoes not dim in any theme today, and thetheme-disabled:recipe (disabledFillClasses) cannot reach it either, which is why LibreChat-AI#16487 leaves it out.Gap: make the disabled state reach the wrapper (for example a
data-disabledattribute or state classes derived fromprops.disabled), so both the default dim and afilltheme's disabled roles apply. This changes the default theme's disabledInputNumberfrom undimmed to dimmed, so it needs its own before/after check.