form.scss 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. .form-check-input {
  2. @function form-check-box-svg($color) {
  3. @return url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'><path fill='none' stroke='#{$color}' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/></svg>");
  4. }
  5. @function form-check-radio-svg($color) {
  6. @return url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='2' fill='#{$color}'/></svg>");
  7. }
  8. @function form-check-indeterminate-svg($color) {
  9. @return url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'><path fill='none' stroke='#{$color}' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/></svg>");
  10. }
  11. &:hover {
  12. &:not(:disabled) {
  13. border-color: var(--border-hover);
  14. &:checked,
  15. &[type='checkbox']:indeterminate {
  16. background-color: var(--bg-accent-02);
  17. border-color: var(--bg-accent-02);
  18. }
  19. }
  20. }
  21. &:disabled {
  22. @mixin input-disabled-styles {
  23. background-color: $input-disabled-bg;
  24. border-color: $input-disabled-border-color;
  25. }
  26. @include input-disabled-styles;
  27. &[type='checkbox']:indeterminate {
  28. @include input-disabled-styles;
  29. background-image: escape-svg(form-check-indeterminate-svg($neutral-40));
  30. }
  31. }
  32. // Use disabled attribute in addition of :disabled pseudo-class
  33. // See: https://github.com/twbs/bootstrap/issues/28247
  34. &[disabled],
  35. &:disabled {
  36. ~ .form-check-label {
  37. color: $input-disabled-color;
  38. }
  39. &:checked {
  40. &[type='checkbox'] {
  41. background-image: escape-svg(form-check-box-svg($neutral-40));
  42. }
  43. &[type='radio'] {
  44. background-image: escape-svg(form-check-radio-svg($neutral-40));
  45. }
  46. }
  47. }
  48. }
  49. .form-control {
  50. &[disabled],
  51. &:disabled {
  52. &::placeholder {
  53. color: var(--content-disabled);
  54. }
  55. }
  56. }
  57. .form-text {
  58. display: inline-flex;
  59. gap: $spacing-02;
  60. line-height: var(--line-height-02);
  61. .form-control[disabled] ~ & {
  62. color: var(--content-disabled);
  63. }
  64. }
  65. .form-label {
  66. &:has(+ .form-control[disabled]) {
  67. color: var(--content-disabled);
  68. }
  69. }