slider function

BloomNode slider({
  1. required double value,
  2. required double min,
  3. required double max,
  4. double step = 1,
  5. required void onChange(
    1. double value
    ),
  6. bool disabled = false,
  7. String extraClassName = '',
})

Controlled range slider primitive.

Uses an accessible native range input styled with CSS design tokens.

Implementation

BloomNode slider({
  required double value,
  required double min,
  required double max,
  double step = 1,
  required void Function(double value) onChange,
  bool disabled = false,
  String extraClassName = '',
}) {
  return Div(
    attrs: const {'data-slot': 'slider'},
    className: cn(['relative flex items-center w-full select-none', extraClassName]),
    children: [
      El(
        'input',
        attrs: {
          'type': 'range',
          'min': '$min',
          'max': '$max',
          'step': '$step',
          'value': '$value',
          if (disabled) 'disabled': 'true',
        },
        className: cn([
          'w-full h-2 bg-[var(--muted)] rounded-lg appearance-none cursor-pointer '
          'accent-[var(--primary)] focus:outline-none focus:ring-2 focus:ring-[var(--ring)] '
          'disabled:opacity-50 disabled:cursor-not-allowed',
        ]),
        on: {
          'input': (BloomEvent e) {
            if (!disabled) {
              final parsed = double.tryParse(e.value ?? '');
              if (parsed != null) onChange(parsed);
            }
          },
          'change': (BloomEvent e) {
            if (!disabled) {
              final parsed = double.tryParse(e.value ?? '');
              if (parsed != null) onChange(parsed);
            }
          },
        },
      ),
    ],
  );
}