switchToggle function

BloomNode switchToggle({
  1. required bool checked,
  2. required void onChange(
    1. bool
    ),
  3. bool disabled = false,
  4. String? id,
  5. String? name,
  6. String extraClassName = '',
})

Toggle switch primitive (named switchToggle as switch is a reserved word in Dart).

Implementation

BloomNode switchToggle({
  required bool checked,
  required void Function(bool) onChange,
  bool disabled = false,
  String? id,
  String? name,
  String extraClassName = '',
}) {
  return El(
    'button',
    attrs: {
      'type': 'button',
      'role': 'switch',
      'aria-checked': checked ? 'true' : 'false',
      if (id != null) 'id': id,
      if (name != null) 'name': name,
      if (disabled) 'disabled': 'true',
    },
    className: cn([
      'relative inline-flex h-5 w-9 shrink-0 items-center rounded-full border-2 border-transparent '
      'transition-colors focus-visible:outline-none focus-visible:ring-2 '
      'focus-visible:ring-[var(--ring)] focus-visible:ring-offset-2 focus-visible:ring-offset-[var(--bg)]',
      disabled ? 'cursor-not-allowed opacity-50' : 'cursor-pointer',
      checked ? 'bg-[var(--primary)]' : 'bg-[var(--muted)]',
      extraClassName,
    ]),
    onClick: disabled ? null : (_) => onChange(!checked),
    children: [
      Span(
        className: cn([
          'pointer-events-none block h-4 w-4 rounded-full bg-white shadow-sm ring-0 transition-transform',
          checked ? 'translate-x-4' : 'translate-x-0',
        ]),
      ),
    ],
  );
}