vision-accessibility 1.0.2 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/README.md +70 -1
  2. package/dist/components/AccessibilityPanel/AccessibilityPanel.d.ts.map +1 -1
  3. package/dist/components/AccessibilityToggle/AccessibilityToggle.d.ts +2 -0
  4. package/dist/components/AccessibilityToggle/AccessibilityToggle.d.ts.map +1 -1
  5. package/dist/components/ColorSchemeControl/ColorSchemeControl.d.ts +2 -0
  6. package/dist/components/ColorSchemeControl/ColorSchemeControl.d.ts.map +1 -1
  7. package/dist/components/FontSizeControl/FontSizeControl.d.ts +2 -0
  8. package/dist/components/FontSizeControl/FontSizeControl.d.ts.map +1 -1
  9. package/dist/components/ImageControl/ImageControl.d.ts +2 -0
  10. package/dist/components/ImageControl/ImageControl.d.ts.map +1 -1
  11. package/dist/config/translations.d.ts +57 -0
  12. package/dist/config/translations.d.ts.map +1 -0
  13. package/dist/index.d.ts +2 -0
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.esm.js +371 -202
  16. package/dist/index.esm.js.map +1 -1
  17. package/dist/index.umd.js +3 -3
  18. package/dist/index.umd.js.map +1 -1
  19. package/dist/lib/css-applier.d.ts +1 -0
  20. package/dist/lib/css-applier.d.ts.map +1 -1
  21. package/dist/style.css +1 -1
  22. package/dist/types/index.d.ts +39 -1
  23. package/dist/types/index.d.ts.map +1 -1
  24. package/package.json +1 -1
  25. package/src/components/AccessibilityPanel/AccessibilityPanel.module.scss +22 -31
  26. package/src/components/AccessibilityPanel/AccessibilityPanel.stories.tsx +50 -10
  27. package/src/components/AccessibilityPanel/AccessibilityPanel.tsx +72 -44
  28. package/src/components/AccessibilityToggle/AccessibilityToggle.stories.tsx +11 -0
  29. package/src/components/AccessibilityToggle/AccessibilityToggle.tsx +17 -10
  30. package/src/components/ColorSchemeControl/ColorSchemeControl.stories.tsx +15 -0
  31. package/src/components/ColorSchemeControl/ColorSchemeControl.tsx +99 -61
  32. package/src/components/FontSizeControl/FontSizeControl.stories.tsx +15 -0
  33. package/src/components/FontSizeControl/FontSizeControl.tsx +99 -61
  34. package/src/components/ImageControl/ImageControl.stories.tsx +11 -0
  35. package/src/components/ImageControl/ImageControl.tsx +17 -10
  36. package/src/config/translations.ts +82 -0
  37. package/src/hooks/useAccessibilitySettings.ts +12 -12
  38. package/src/index.ts +12 -8
  39. package/src/lib/css-applier.ts +54 -38
  40. package/src/styles/global.scss +1 -4
  41. package/src/types/index.ts +43 -1
package/dist/style.css CHANGED
@@ -1 +1 @@
1
- @charset "UTF-8";._accessibilityToggle_kpjm6_9{margin-bottom:20px;padding-bottom:16px;border-bottom:1px solid #dee2e6}._toggleContainer_kpjm6_15{display:flex;flex-direction:column;gap:8px}._toggleLabel_kpjm6_21{display:flex;align-items:center;gap:16px;cursor:pointer;padding:16px;border:2px solid #007bff;border-radius:8px;transition:all .2s ease;background:#f8f9ff}._toggleLabel_kpjm6_21:hover{background:#e3f2fd;border-color:#0056b3}._toggleLabel_kpjm6_21:focus-within{background:#e3f2fd;border-color:#0056b3;box-shadow:0 0 0 3px #007bff40}._toggleInput_kpjm6_42{position:absolute;opacity:0;width:0;height:0;margin:0}._toggleInput_kpjm6_42:focus+._toggleSlider_kpjm6_49{box-shadow:0 0 0 3px #007bff40}._toggleInput_kpjm6_42:checked+._toggleSlider_kpjm6_49{background:#28a745}._toggleInput_kpjm6_42:checked+._toggleSlider_kpjm6_49 ._toggleThumb_kpjm6_55{transform:translate(28px)}._toggleSlider_kpjm6_49{position:relative;width:56px;height:28px;background:#ced4da;border-radius:14px;transition:all .3s ease;flex-shrink:0}._toggleThumb_kpjm6_55{position:absolute;top:2px;left:2px;width:24px;height:24px;background:#fff;border-radius:50%;transition:transform .3s ease;box-shadow:0 2px 6px #0000004d}._toggleContent_kpjm6_81{flex:1;display:flex;flex-direction:column;gap:4px}._toggleTitle_kpjm6_88{font-size:16px;font-weight:600;color:#343a40;line-height:1.3}._toggleStatus_kpjm6_95{font-size:14px;font-weight:500;color:#007bff;line-height:1.2}._description_kpjm6_102{font-size:13px;color:#6c757d;line-height:1.4;margin:0;padding:0 16px}._accessibilityToggle_kpjm6_9._highContrastMode_kpjm6_110{border-bottom-color:#fff!important}._accessibilityToggle_kpjm6_9._highContrastMode_kpjm6_110 ._toggleLabel_kpjm6_21{background:#000!important;border-color:#fff!important;color:#fff!important}._accessibilityToggle_kpjm6_9._highContrastMode_kpjm6_110 ._toggleLabel_kpjm6_21:hover,._accessibilityToggle_kpjm6_9._highContrastMode_kpjm6_110 ._toggleLabel_kpjm6_21:focus-within{background:#343a40!important;border-color:#ff0!important}._accessibilityToggle_kpjm6_9._highContrastMode_kpjm6_110 ._toggleTitle_kpjm6_88{color:#fff!important}._accessibilityToggle_kpjm6_9._highContrastMode_kpjm6_110 ._toggleStatus_kpjm6_95{color:#ff0!important}._accessibilityToggle_kpjm6_9._highContrastMode_kpjm6_110 ._description_kpjm6_102{color:#ced4da!important}._accessibilityToggle_kpjm6_9._highContrastMode_kpjm6_110 ._toggleSlider_kpjm6_49{background:#6c757d!important;border:2px solid #ffffff!important}._accessibilityToggle_kpjm6_9._highContrastMode_kpjm6_110 ._toggleInput_kpjm6_42:checked+._toggleSlider_kpjm6_49{background:#ff0!important}._accessibilityToggle_kpjm6_9._highContrastMode_kpjm6_110 ._toggleInput_kpjm6_42:checked+._toggleSlider_kpjm6_49 ._toggleThumb_kpjm6_55{background:#000!important;border:2px solid #ffffff!important}._accessibilityToggle_kpjm6_9._highContrastMode_kpjm6_110 ._toggleThumb_kpjm6_55{background:#fff!important;border:2px solid #000000!important}._colorSchemeControl_1kr72_9{margin-bottom:16px}._colorSchemeControl_1kr72_9._disabled_1kr72_12 ._title_1kr72_12{opacity:.6}._title_1kr72_12{font-size:14px;font-weight:600;margin:0 0 12px;color:#343a40}._optionsContainer_1kr72_23{display:flex;flex-direction:column;gap:8px}._option_1kr72_23{display:flex;align-items:flex-start;gap:12px;cursor:pointer;padding:12px;border:1px solid #dee2e6;border-radius:6px;transition:all .2s ease;position:relative;background:#fff}._option_1kr72_23:hover{background:#f8f9fa;border-color:#007bff}._option_1kr72_23:focus-within{background:#f8f9fa;border-color:#007bff;box-shadow:0 0 0 2px #007bff40}._option_1kr72_23._selected_1kr72_50{background:#e3f2fd;border-color:#007bff}._option_1kr72_23._selected_1kr72_50 ._radioIndicator_1kr72_54{background:#007bff;border-color:#007bff}._option_1kr72_23._selected_1kr72_50 ._radioIndicator_1kr72_54:after{opacity:1;transform:scale(1)}._option_1kr72_23._optionDisabled_1kr72_62{opacity:.5;cursor:not-allowed;pointer-events:none}._option_1kr72_23._optionDisabled_1kr72_62:hover{background:#fff;border-color:#dee2e6}._radioInput_1kr72_72{position:absolute;opacity:0;width:0;height:0;margin:0}._radioInput_1kr72_72:focus+._optionContent_1kr72_79{outline:2px solid #007bff;outline-offset:2px}._optionContent_1kr72_79{flex:1;display:flex;flex-direction:column;gap:4px}._optionLabel_1kr72_91{font-size:14px;font-weight:500;color:#343a40;line-height:1.4}._optionDescription_1kr72_98{font-size:12px;color:#6c757d;line-height:1.3}._radioIndicator_1kr72_54{width:18px;height:18px;border:2px solid #ced4da;border-radius:50%;background:#fff;transition:all .2s ease;position:relative;flex-shrink:0;margin-top:1px}._radioIndicator_1kr72_54:after{content:"";position:absolute;top:50%;left:50%;width:8px;height:8px;background:#fff;border-radius:50%;transform:translate(-50%,-50%) scale(0);transition:all .2s ease;opacity:0}._colorSchemeControl_1kr72_9._highContrastMode_1kr72_129 ._title_1kr72_12{color:#fff!important}._colorSchemeControl_1kr72_9._highContrastMode_1kr72_129 ._option_1kr72_23{background:#000!important;border-color:#fff!important;color:#fff!important}._colorSchemeControl_1kr72_9._highContrastMode_1kr72_129 ._option_1kr72_23:hover,._colorSchemeControl_1kr72_9._highContrastMode_1kr72_129 ._option_1kr72_23:focus-within{background:#343a40!important}._colorSchemeControl_1kr72_9._highContrastMode_1kr72_129 ._option_1kr72_23._selected_1kr72_50{background:#343a40!important}._colorSchemeControl_1kr72_9._highContrastMode_1kr72_129 ._optionLabel_1kr72_91{color:#fff!important}._colorSchemeControl_1kr72_9._highContrastMode_1kr72_129 ._optionDescription_1kr72_98{color:#ced4da!important}._colorSchemeControl_1kr72_9._highContrastMode_1kr72_129 ._radioIndicator_1kr72_54{border-color:#fff!important;background:#000!important}._colorSchemeControl_1kr72_9._highContrastMode_1kr72_129 ._radioIndicator_1kr72_54:after{background:#fff!important}._fontSizeControl_1c68l_9{margin-bottom:16px}._fontSizeControl_1c68l_9._disabled_1c68l_12 ._title_1c68l_12{opacity:.6}._title_1c68l_12{font-size:14px;font-weight:600;margin:0 0 12px;color:#343a40}._optionsContainer_1c68l_23{display:flex;flex-direction:column;gap:8px}._option_1c68l_23{display:flex;align-items:flex-start;gap:12px;cursor:pointer;padding:12px;border:1px solid #dee2e6;border-radius:6px;transition:all .2s ease;position:relative;background:#fff}._option_1c68l_23:hover{background:#f8f9fa;border-color:#007bff}._option_1c68l_23:focus-within{background:#f8f9fa;border-color:#007bff;box-shadow:0 0 0 2px #007bff40}._option_1c68l_23._selected_1c68l_50{background:#e3f2fd;border-color:#007bff}._option_1c68l_23._selected_1c68l_50 ._radioIndicator_1c68l_54{background:#007bff;border-color:#007bff}._option_1c68l_23._selected_1c68l_50 ._radioIndicator_1c68l_54:after{opacity:1;transform:scale(1)}._option_1c68l_23._optionDisabled_1c68l_62{opacity:.5;cursor:not-allowed;pointer-events:none}._option_1c68l_23._optionDisabled_1c68l_62:hover{background:#fff;border-color:#dee2e6}._radioInput_1c68l_72{position:absolute;opacity:0;width:0;height:0;margin:0}._radioInput_1c68l_72:focus+._optionContent_1c68l_79{outline:2px solid #007bff;outline-offset:2px}._optionContent_1c68l_79{flex:1;display:flex;flex-direction:column;gap:4px}._optionLabel_1c68l_91{font-size:14px;font-weight:500;color:#343a40;line-height:1.4}._optionDescription_1c68l_98{font-size:12px;color:#6c757d;line-height:1.3}._radioIndicator_1c68l_54{width:18px;height:18px;border:2px solid #ced4da;border-radius:50%;background:#fff;transition:all .2s ease;position:relative;flex-shrink:0;margin-top:1px}._radioIndicator_1c68l_54:after{content:"";position:absolute;top:50%;left:50%;width:8px;height:8px;background:#fff;border-radius:50%;transform:translate(-50%,-50%) scale(0);transition:all .2s ease;opacity:0}._fontSizeControl_1c68l_9._highContrastMode_1c68l_129 ._title_1c68l_12{color:#fff!important}._fontSizeControl_1c68l_9._highContrastMode_1c68l_129 ._option_1c68l_23{background:#000!important;border-color:#fff!important;color:#fff!important}._fontSizeControl_1c68l_9._highContrastMode_1c68l_129 ._option_1c68l_23:hover,._fontSizeControl_1c68l_9._highContrastMode_1c68l_129 ._option_1c68l_23:focus-within{background:#343a40!important}._fontSizeControl_1c68l_9._highContrastMode_1c68l_129 ._option_1c68l_23._selected_1c68l_50{background:#343a40!important}._fontSizeControl_1c68l_9._highContrastMode_1c68l_129 ._optionLabel_1c68l_91{color:#fff!important}._fontSizeControl_1c68l_9._highContrastMode_1c68l_129 ._optionDescription_1c68l_98{color:#ced4da!important}._fontSizeControl_1c68l_9._highContrastMode_1c68l_129 ._radioIndicator_1c68l_54{border-color:#fff!important;background:#000!important}._fontSizeControl_1c68l_9._highContrastMode_1c68l_129 ._radioIndicator_1c68l_54:after{background:#fff!important}._imageControl_hkxkm_9{margin-bottom:16px}._imageControl_hkxkm_9._disabled_hkxkm_12 ._title_hkxkm_12{opacity:.6}._title_hkxkm_12{font-size:14px;font-weight:600;margin:0 0 12px;color:#343a40}._switchContainer_hkxkm_23{display:flex;flex-direction:column;gap:8px}._switchLabel_hkxkm_29{display:flex;align-items:center;gap:12px;cursor:pointer;padding:12px;border:1px solid #dee2e6;border-radius:6px;transition:all .2s ease;background:#fff}._switchLabel_hkxkm_29:hover{background:#f8f9fa;border-color:#007bff}._switchLabel_hkxkm_29:focus-within{background:#f8f9fa;border-color:#007bff;box-shadow:0 0 0 2px #007bff40}._switchLabel_hkxkm_29._switchDisabled_hkxkm_49{opacity:.5;cursor:not-allowed;pointer-events:none}._switchLabel_hkxkm_29._switchDisabled_hkxkm_49:hover{background:#fff;border-color:#dee2e6}._switchInput_hkxkm_59{position:absolute;opacity:0;width:0;height:0;margin:0}._switchInput_hkxkm_59:focus+._switchSlider_hkxkm_66{box-shadow:0 0 0 2px #007bff40}._switchInput_hkxkm_59:checked+._switchSlider_hkxkm_66{background:#007bff}._switchInput_hkxkm_59:checked+._switchSlider_hkxkm_66 ._switchThumb_hkxkm_72{transform:translate(20px)}._switchSlider_hkxkm_66{position:relative;width:44px;height:24px;background:#ced4da;border-radius:12px;transition:all .2s ease;flex-shrink:0}._switchThumb_hkxkm_72{position:absolute;top:2px;left:2px;width:20px;height:20px;background:#fff;border-radius:50%;transition:transform .2s ease;box-shadow:0 2px 4px #0003}._switchText_hkxkm_98{font-size:14px;font-weight:500;color:#343a40;line-height:1.4;flex:1}._description_hkxkm_106{font-size:12px;color:#6c757d;line-height:1.3;margin:0;padding-left:56px}._imageControl_hkxkm_9._highContrastMode_hkxkm_114 ._title_hkxkm_12{color:#fff!important}._imageControl_hkxkm_9._highContrastMode_hkxkm_114 ._switchLabel_hkxkm_29{background:#000!important;border-color:#fff!important;color:#fff!important}._imageControl_hkxkm_9._highContrastMode_hkxkm_114 ._switchLabel_hkxkm_29:hover,._imageControl_hkxkm_9._highContrastMode_hkxkm_114 ._switchLabel_hkxkm_29:focus-within{background:#343a40!important}._imageControl_hkxkm_9._highContrastMode_hkxkm_114 ._switchText_hkxkm_98{color:#fff!important}._imageControl_hkxkm_9._highContrastMode_hkxkm_114 ._description_hkxkm_106{color:#ced4da!important}._imageControl_hkxkm_9._highContrastMode_hkxkm_114 ._switchSlider_hkxkm_66{background:#6c757d!important;border:1px solid #ffffff!important}._imageControl_hkxkm_9._highContrastMode_hkxkm_114 ._switchInput_hkxkm_59:checked+._switchSlider_hkxkm_66{background:#fff!important}._imageControl_hkxkm_9._highContrastMode_hkxkm_114 ._switchInput_hkxkm_59:checked+._switchSlider_hkxkm_66 ._switchThumb_hkxkm_72{background:#000!important}._imageControl_hkxkm_9._highContrastMode_hkxkm_114 ._switchThumb_hkxkm_72{background:#fff!important;border:1px solid #000000!important}._stickyContainer_18ltw_9{position:fixed;top:70px;pointer-events:none;z-index:1000}@media (max-width: 767px){._stickyContainer_18ltw_9{top:60px}}._panel_18ltw_21{position:sticky;top:20px;width:360px;max-width:calc(100vw - 40px);max-height:calc(100vh - 40px);background:#fff;border:1px solid #dee2e6;border-radius:12px;box-shadow:0 8px 32px #0000001f;overflow:hidden;display:flex;flex-direction:column;pointer-events:auto}._panel_18ltw_21._top-right_18ltw_36{margin-left:auto;margin-right:20px}._panel_18ltw_21._top-left_18ltw_40{margin-left:20px;margin-right:auto}._panel_18ltw_21._bottom-right_18ltw_44{margin-left:auto;margin-right:20px;position:fixed;top:auto;bottom:20px;width:360px}._panel_18ltw_21._bottom-left_18ltw_52{margin-left:20px;margin-right:auto;position:fixed;top:auto;bottom:20px;width:360px}@media (max-width: 767px){._panel_18ltw_21{width:calc(100vw - 32px);max-height:calc(100vh - 100px);margin-left:16px;margin-right:16px}._panel_18ltw_21._top-right_18ltw_36,._panel_18ltw_21._top-left_18ltw_40,._panel_18ltw_21._bottom-right_18ltw_44,._panel_18ltw_21._bottom-left_18ltw_52{margin-left:16px;margin-right:16px}}._header_18ltw_73{display:flex;justify-content:space-between;align-items:center;padding:20px 24px 16px;border-bottom:1px solid #e9ecef;background:#f8f9fa}._title_18ltw_82{margin:0;font-size:18px;font-weight:600;color:#343a40;line-height:1.3}._closeButton_18ltw_90{background:none;border:none;font-size:24px;font-weight:300;color:#6c757d;cursor:pointer;padding:4px 8px;border-radius:4px;transition:all .2s ease;line-height:1;width:32px;height:32px;display:flex;align-items:center;justify-content:center}._closeButton_18ltw_90:hover{background:#e9ecef;color:#343a40}._closeButton_18ltw_90:focus{outline:2px solid #007bff;outline-offset:2px;background:#e9ecef;color:#343a40}._closeButton_18ltw_90:active{background:#dee2e6}._description_18ltw_121{padding:16px 24px 0;font-size:14px;color:#6c757d;line-height:1.4;margin:0}._content_18ltw_129{flex:1;padding:20px 24px 24px;overflow-y:auto}._content_18ltw_129::-webkit-scrollbar{width:6px}._content_18ltw_129::-webkit-scrollbar-track{background:#e9ecef;border-radius:3px}._content_18ltw_129::-webkit-scrollbar-thumb{background:#ced4da;border-radius:3px}._content_18ltw_129::-webkit-scrollbar-thumb:hover{background:#adb5bd}._controls_18ltw_149{display:flex;flex-direction:column;gap:4px}._panel_18ltw_21._highContrastMode_18ltw_155{background:#000!important;border-color:#fff!important;color:#fff!important}._panel_18ltw_21._highContrastMode_18ltw_155 ._header_18ltw_73{background:#000!important;border-bottom-color:#fff!important}._panel_18ltw_21._highContrastMode_18ltw_155 ._title_18ltw_82{color:#fff!important}._panel_18ltw_21._highContrastMode_18ltw_155 ._closeButton_18ltw_90{color:#fff!important;border:1px solid #ffffff!important}._panel_18ltw_21._highContrastMode_18ltw_155 ._closeButton_18ltw_90:hover,._panel_18ltw_21._highContrastMode_18ltw_155 ._closeButton_18ltw_90:focus{background:#343a40!important;color:#ff0!important}._panel_18ltw_21._highContrastMode_18ltw_155 ._closeButton_18ltw_90:active{background:#6c757d!important}._panel_18ltw_21._highContrastMode_18ltw_155 ._description_18ltw_121{color:#ced4da!important}._panel_18ltw_21._highContrastMode_18ltw_155 ._content_18ltw_129::-webkit-scrollbar-track{background:#343a40!important}._panel_18ltw_21._highContrastMode_18ltw_155 ._content_18ltw_129::-webkit-scrollbar-thumb{background:#6c757d!important}._panel_18ltw_21._highContrastMode_18ltw_155 ._content_18ltw_129::-webkit-scrollbar-thumb:hover{background:#adb5bd!important}@keyframes _slideIn_18ltw_1{0%{opacity:0;transform:translateY(-10px) scale(.95)}to{opacity:1;transform:translateY(0) scale(1)}}._panel_18ltw_21{animation:_slideIn_18ltw_1 .2s ease}
1
+ @charset "UTF-8";._accessibilityToggle_kpjm6_9{margin-bottom:20px;padding-bottom:16px;border-bottom:1px solid #dee2e6}._toggleContainer_kpjm6_15{display:flex;flex-direction:column;gap:8px}._toggleLabel_kpjm6_21{display:flex;align-items:center;gap:16px;cursor:pointer;padding:16px;border:2px solid #007bff;border-radius:8px;transition:all .2s ease;background:#f8f9ff}._toggleLabel_kpjm6_21:hover{background:#e3f2fd;border-color:#0056b3}._toggleLabel_kpjm6_21:focus-within{background:#e3f2fd;border-color:#0056b3;box-shadow:0 0 0 3px #007bff40}._toggleInput_kpjm6_42{position:absolute;opacity:0;width:0;height:0;margin:0}._toggleInput_kpjm6_42:focus+._toggleSlider_kpjm6_49{box-shadow:0 0 0 3px #007bff40}._toggleInput_kpjm6_42:checked+._toggleSlider_kpjm6_49{background:#28a745}._toggleInput_kpjm6_42:checked+._toggleSlider_kpjm6_49 ._toggleThumb_kpjm6_55{transform:translate(28px)}._toggleSlider_kpjm6_49{position:relative;width:56px;height:28px;background:#ced4da;border-radius:14px;transition:all .3s ease;flex-shrink:0}._toggleThumb_kpjm6_55{position:absolute;top:2px;left:2px;width:24px;height:24px;background:#fff;border-radius:50%;transition:transform .3s ease;box-shadow:0 2px 6px #0000004d}._toggleContent_kpjm6_81{flex:1;display:flex;flex-direction:column;gap:4px}._toggleTitle_kpjm6_88{font-size:16px;font-weight:600;color:#343a40;line-height:1.3}._toggleStatus_kpjm6_95{font-size:14px;font-weight:500;color:#007bff;line-height:1.2}._description_kpjm6_102{font-size:13px;color:#6c757d;line-height:1.4;margin:0;padding:0 16px}._accessibilityToggle_kpjm6_9._highContrastMode_kpjm6_110{border-bottom-color:#fff!important}._accessibilityToggle_kpjm6_9._highContrastMode_kpjm6_110 ._toggleLabel_kpjm6_21{background:#000!important;border-color:#fff!important;color:#fff!important}._accessibilityToggle_kpjm6_9._highContrastMode_kpjm6_110 ._toggleLabel_kpjm6_21:hover,._accessibilityToggle_kpjm6_9._highContrastMode_kpjm6_110 ._toggleLabel_kpjm6_21:focus-within{background:#343a40!important;border-color:#ff0!important}._accessibilityToggle_kpjm6_9._highContrastMode_kpjm6_110 ._toggleTitle_kpjm6_88{color:#fff!important}._accessibilityToggle_kpjm6_9._highContrastMode_kpjm6_110 ._toggleStatus_kpjm6_95{color:#ff0!important}._accessibilityToggle_kpjm6_9._highContrastMode_kpjm6_110 ._description_kpjm6_102{color:#ced4da!important}._accessibilityToggle_kpjm6_9._highContrastMode_kpjm6_110 ._toggleSlider_kpjm6_49{background:#6c757d!important;border:2px solid #ffffff!important}._accessibilityToggle_kpjm6_9._highContrastMode_kpjm6_110 ._toggleInput_kpjm6_42:checked+._toggleSlider_kpjm6_49{background:#ff0!important}._accessibilityToggle_kpjm6_9._highContrastMode_kpjm6_110 ._toggleInput_kpjm6_42:checked+._toggleSlider_kpjm6_49 ._toggleThumb_kpjm6_55{background:#000!important;border:2px solid #ffffff!important}._accessibilityToggle_kpjm6_9._highContrastMode_kpjm6_110 ._toggleThumb_kpjm6_55{background:#fff!important;border:2px solid #000000!important}._colorSchemeControl_1kr72_9{margin-bottom:16px}._colorSchemeControl_1kr72_9._disabled_1kr72_12 ._title_1kr72_12{opacity:.6}._title_1kr72_12{font-size:14px;font-weight:600;margin:0 0 12px;color:#343a40}._optionsContainer_1kr72_23{display:flex;flex-direction:column;gap:8px}._option_1kr72_23{display:flex;align-items:flex-start;gap:12px;cursor:pointer;padding:12px;border:1px solid #dee2e6;border-radius:6px;transition:all .2s ease;position:relative;background:#fff}._option_1kr72_23:hover{background:#f8f9fa;border-color:#007bff}._option_1kr72_23:focus-within{background:#f8f9fa;border-color:#007bff;box-shadow:0 0 0 2px #007bff40}._option_1kr72_23._selected_1kr72_50{background:#e3f2fd;border-color:#007bff}._option_1kr72_23._selected_1kr72_50 ._radioIndicator_1kr72_54{background:#007bff;border-color:#007bff}._option_1kr72_23._selected_1kr72_50 ._radioIndicator_1kr72_54:after{opacity:1;transform:scale(1)}._option_1kr72_23._optionDisabled_1kr72_62{opacity:.5;cursor:not-allowed;pointer-events:none}._option_1kr72_23._optionDisabled_1kr72_62:hover{background:#fff;border-color:#dee2e6}._radioInput_1kr72_72{position:absolute;opacity:0;width:0;height:0;margin:0}._radioInput_1kr72_72:focus+._optionContent_1kr72_79{outline:2px solid #007bff;outline-offset:2px}._optionContent_1kr72_79{flex:1;display:flex;flex-direction:column;gap:4px}._optionLabel_1kr72_91{font-size:14px;font-weight:500;color:#343a40;line-height:1.4}._optionDescription_1kr72_98{font-size:12px;color:#6c757d;line-height:1.3}._radioIndicator_1kr72_54{width:18px;height:18px;border:2px solid #ced4da;border-radius:50%;background:#fff;transition:all .2s ease;position:relative;flex-shrink:0;margin-top:1px}._radioIndicator_1kr72_54:after{content:"";position:absolute;top:50%;left:50%;width:8px;height:8px;background:#fff;border-radius:50%;transform:translate(-50%,-50%) scale(0);transition:all .2s ease;opacity:0}._colorSchemeControl_1kr72_9._highContrastMode_1kr72_129 ._title_1kr72_12{color:#fff!important}._colorSchemeControl_1kr72_9._highContrastMode_1kr72_129 ._option_1kr72_23{background:#000!important;border-color:#fff!important;color:#fff!important}._colorSchemeControl_1kr72_9._highContrastMode_1kr72_129 ._option_1kr72_23:hover,._colorSchemeControl_1kr72_9._highContrastMode_1kr72_129 ._option_1kr72_23:focus-within{background:#343a40!important}._colorSchemeControl_1kr72_9._highContrastMode_1kr72_129 ._option_1kr72_23._selected_1kr72_50{background:#343a40!important}._colorSchemeControl_1kr72_9._highContrastMode_1kr72_129 ._optionLabel_1kr72_91{color:#fff!important}._colorSchemeControl_1kr72_9._highContrastMode_1kr72_129 ._optionDescription_1kr72_98{color:#ced4da!important}._colorSchemeControl_1kr72_9._highContrastMode_1kr72_129 ._radioIndicator_1kr72_54{border-color:#fff!important;background:#000!important}._colorSchemeControl_1kr72_9._highContrastMode_1kr72_129 ._radioIndicator_1kr72_54:after{background:#fff!important}._fontSizeControl_1c68l_9{margin-bottom:16px}._fontSizeControl_1c68l_9._disabled_1c68l_12 ._title_1c68l_12{opacity:.6}._title_1c68l_12{font-size:14px;font-weight:600;margin:0 0 12px;color:#343a40}._optionsContainer_1c68l_23{display:flex;flex-direction:column;gap:8px}._option_1c68l_23{display:flex;align-items:flex-start;gap:12px;cursor:pointer;padding:12px;border:1px solid #dee2e6;border-radius:6px;transition:all .2s ease;position:relative;background:#fff}._option_1c68l_23:hover{background:#f8f9fa;border-color:#007bff}._option_1c68l_23:focus-within{background:#f8f9fa;border-color:#007bff;box-shadow:0 0 0 2px #007bff40}._option_1c68l_23._selected_1c68l_50{background:#e3f2fd;border-color:#007bff}._option_1c68l_23._selected_1c68l_50 ._radioIndicator_1c68l_54{background:#007bff;border-color:#007bff}._option_1c68l_23._selected_1c68l_50 ._radioIndicator_1c68l_54:after{opacity:1;transform:scale(1)}._option_1c68l_23._optionDisabled_1c68l_62{opacity:.5;cursor:not-allowed;pointer-events:none}._option_1c68l_23._optionDisabled_1c68l_62:hover{background:#fff;border-color:#dee2e6}._radioInput_1c68l_72{position:absolute;opacity:0;width:0;height:0;margin:0}._radioInput_1c68l_72:focus+._optionContent_1c68l_79{outline:2px solid #007bff;outline-offset:2px}._optionContent_1c68l_79{flex:1;display:flex;flex-direction:column;gap:4px}._optionLabel_1c68l_91{font-size:14px;font-weight:500;color:#343a40;line-height:1.4}._optionDescription_1c68l_98{font-size:12px;color:#6c757d;line-height:1.3}._radioIndicator_1c68l_54{width:18px;height:18px;border:2px solid #ced4da;border-radius:50%;background:#fff;transition:all .2s ease;position:relative;flex-shrink:0;margin-top:1px}._radioIndicator_1c68l_54:after{content:"";position:absolute;top:50%;left:50%;width:8px;height:8px;background:#fff;border-radius:50%;transform:translate(-50%,-50%) scale(0);transition:all .2s ease;opacity:0}._fontSizeControl_1c68l_9._highContrastMode_1c68l_129 ._title_1c68l_12{color:#fff!important}._fontSizeControl_1c68l_9._highContrastMode_1c68l_129 ._option_1c68l_23{background:#000!important;border-color:#fff!important;color:#fff!important}._fontSizeControl_1c68l_9._highContrastMode_1c68l_129 ._option_1c68l_23:hover,._fontSizeControl_1c68l_9._highContrastMode_1c68l_129 ._option_1c68l_23:focus-within{background:#343a40!important}._fontSizeControl_1c68l_9._highContrastMode_1c68l_129 ._option_1c68l_23._selected_1c68l_50{background:#343a40!important}._fontSizeControl_1c68l_9._highContrastMode_1c68l_129 ._optionLabel_1c68l_91{color:#fff!important}._fontSizeControl_1c68l_9._highContrastMode_1c68l_129 ._optionDescription_1c68l_98{color:#ced4da!important}._fontSizeControl_1c68l_9._highContrastMode_1c68l_129 ._radioIndicator_1c68l_54{border-color:#fff!important;background:#000!important}._fontSizeControl_1c68l_9._highContrastMode_1c68l_129 ._radioIndicator_1c68l_54:after{background:#fff!important}._imageControl_hkxkm_9{margin-bottom:16px}._imageControl_hkxkm_9._disabled_hkxkm_12 ._title_hkxkm_12{opacity:.6}._title_hkxkm_12{font-size:14px;font-weight:600;margin:0 0 12px;color:#343a40}._switchContainer_hkxkm_23{display:flex;flex-direction:column;gap:8px}._switchLabel_hkxkm_29{display:flex;align-items:center;gap:12px;cursor:pointer;padding:12px;border:1px solid #dee2e6;border-radius:6px;transition:all .2s ease;background:#fff}._switchLabel_hkxkm_29:hover{background:#f8f9fa;border-color:#007bff}._switchLabel_hkxkm_29:focus-within{background:#f8f9fa;border-color:#007bff;box-shadow:0 0 0 2px #007bff40}._switchLabel_hkxkm_29._switchDisabled_hkxkm_49{opacity:.5;cursor:not-allowed;pointer-events:none}._switchLabel_hkxkm_29._switchDisabled_hkxkm_49:hover{background:#fff;border-color:#dee2e6}._switchInput_hkxkm_59{position:absolute;opacity:0;width:0;height:0;margin:0}._switchInput_hkxkm_59:focus+._switchSlider_hkxkm_66{box-shadow:0 0 0 2px #007bff40}._switchInput_hkxkm_59:checked+._switchSlider_hkxkm_66{background:#007bff}._switchInput_hkxkm_59:checked+._switchSlider_hkxkm_66 ._switchThumb_hkxkm_72{transform:translate(20px)}._switchSlider_hkxkm_66{position:relative;width:44px;height:24px;background:#ced4da;border-radius:12px;transition:all .2s ease;flex-shrink:0}._switchThumb_hkxkm_72{position:absolute;top:2px;left:2px;width:20px;height:20px;background:#fff;border-radius:50%;transition:transform .2s ease;box-shadow:0 2px 4px #0003}._switchText_hkxkm_98{font-size:14px;font-weight:500;color:#343a40;line-height:1.4;flex:1}._description_hkxkm_106{font-size:12px;color:#6c757d;line-height:1.3;margin:0;padding-left:56px}._imageControl_hkxkm_9._highContrastMode_hkxkm_114 ._title_hkxkm_12{color:#fff!important}._imageControl_hkxkm_9._highContrastMode_hkxkm_114 ._switchLabel_hkxkm_29{background:#000!important;border-color:#fff!important;color:#fff!important}._imageControl_hkxkm_9._highContrastMode_hkxkm_114 ._switchLabel_hkxkm_29:hover,._imageControl_hkxkm_9._highContrastMode_hkxkm_114 ._switchLabel_hkxkm_29:focus-within{background:#343a40!important}._imageControl_hkxkm_9._highContrastMode_hkxkm_114 ._switchText_hkxkm_98{color:#fff!important}._imageControl_hkxkm_9._highContrastMode_hkxkm_114 ._description_hkxkm_106{color:#ced4da!important}._imageControl_hkxkm_9._highContrastMode_hkxkm_114 ._switchSlider_hkxkm_66{background:#6c757d!important;border:1px solid #ffffff!important}._imageControl_hkxkm_9._highContrastMode_hkxkm_114 ._switchInput_hkxkm_59:checked+._switchSlider_hkxkm_66{background:#fff!important}._imageControl_hkxkm_9._highContrastMode_hkxkm_114 ._switchInput_hkxkm_59:checked+._switchSlider_hkxkm_66 ._switchThumb_hkxkm_72{background:#000!important}._imageControl_hkxkm_9._highContrastMode_hkxkm_114 ._switchThumb_hkxkm_72{background:#fff!important;border:1px solid #000000!important}[data-accessibility-panel-container] ._stickyContainer_1xq4j_9,._stickyContainer_1xq4j_9{position:fixed;pointer-events:none;z-index:1000;top:70px}[data-accessibility-panel-container] ._stickyContainer_1xq4j_9._top-right_1xq4j_16,._stickyContainer_1xq4j_9._top-right_1xq4j_16{right:20px}[data-accessibility-panel-container] ._stickyContainer_1xq4j_9._top-left_1xq4j_20,._stickyContainer_1xq4j_9._top-left_1xq4j_20{left:20px}@media (max-width: 767px){[data-accessibility-panel-container] ._stickyContainer_1xq4j_9,._stickyContainer_1xq4j_9{top:60px}}._panel_1xq4j_31{position:sticky;top:20px;width:360px;max-width:calc(100vw - 120px);max-height:calc(100vh - 120px);background:#fff;border:1px solid #dee2e6;border-radius:12px;box-shadow:0 8px 32px #0000001f;overflow:hidden;display:flex;flex-direction:column;pointer-events:auto}@media (max-width: 767px){._panel_1xq4j_31{width:calc(100vw - 32px);max-height:calc(100vh - 100px);margin-left:16px;margin-right:16px}._panel_1xq4j_31._top-right_1xq4j_16,._panel_1xq4j_31._top-left_1xq4j_20,._panel_1xq4j_31._bottom-right_1xq4j_53,._panel_1xq4j_31._bottom-left_1xq4j_53{margin-left:16px;margin-right:16px}}._header_1xq4j_59{display:flex;justify-content:space-between;align-items:center;padding:20px 24px 16px;border-bottom:1px solid #e9ecef;background:#f8f9fa}._title_1xq4j_68{margin:0;font-size:18px;font-weight:600;color:#343a40;line-height:1.3}._closeButton_1xq4j_76{background:none;border:none;font-size:24px;font-weight:300;color:#6c757d;cursor:pointer;padding:4px 8px;border-radius:4px;transition:all .2s ease;line-height:1;width:32px;height:32px;display:flex;align-items:center;justify-content:center}._closeButton_1xq4j_76:hover{background:#e9ecef;color:#343a40}._closeButton_1xq4j_76:focus{outline:2px solid #007bff;outline-offset:2px;background:#e9ecef;color:#343a40}._closeButton_1xq4j_76:active{background:#dee2e6}._description_1xq4j_107{padding:16px 24px 0;font-size:14px;color:#6c757d;line-height:1.4;margin:0}._content_1xq4j_115{flex:1;padding:20px 24px 24px;overflow-y:auto}._content_1xq4j_115::-webkit-scrollbar{width:6px}._content_1xq4j_115::-webkit-scrollbar-track{background:#e9ecef;border-radius:3px}._content_1xq4j_115::-webkit-scrollbar-thumb{background:#ced4da;border-radius:3px}._content_1xq4j_115::-webkit-scrollbar-thumb:hover{background:#adb5bd}._controls_1xq4j_135{display:flex;flex-direction:column;gap:4px}._panel_1xq4j_31._highContrastMode_1xq4j_141{background:#000!important;border-color:#fff!important;color:#fff!important}._panel_1xq4j_31._highContrastMode_1xq4j_141 ._header_1xq4j_59{background:#000!important;border-bottom-color:#fff!important}._panel_1xq4j_31._highContrastMode_1xq4j_141 ._title_1xq4j_68{color:#fff!important}._panel_1xq4j_31._highContrastMode_1xq4j_141 ._closeButton_1xq4j_76{color:#fff!important;border:1px solid #ffffff!important}._panel_1xq4j_31._highContrastMode_1xq4j_141 ._closeButton_1xq4j_76:hover,._panel_1xq4j_31._highContrastMode_1xq4j_141 ._closeButton_1xq4j_76:focus{background:#343a40!important;color:#ff0!important}._panel_1xq4j_31._highContrastMode_1xq4j_141 ._closeButton_1xq4j_76:active{background:#6c757d!important}._panel_1xq4j_31._highContrastMode_1xq4j_141 ._description_1xq4j_107{color:#ced4da!important}._panel_1xq4j_31._highContrastMode_1xq4j_141 ._content_1xq4j_115::-webkit-scrollbar-track{background:#343a40!important}._panel_1xq4j_31._highContrastMode_1xq4j_141 ._content_1xq4j_115::-webkit-scrollbar-thumb{background:#6c757d!important}._panel_1xq4j_31._highContrastMode_1xq4j_141 ._content_1xq4j_115::-webkit-scrollbar-thumb:hover{background:#adb5bd!important}@keyframes _slideIn_1xq4j_1{0%{opacity:0;transform:translateY(-10px) scale(.95)}to{opacity:1;transform:translateY(0) scale(1)}}._panel_1xq4j_31{animation:_slideIn_1xq4j_1 .2s ease}._panel_1xq4j_31._grayscaleMode_1xq4j_191,._panel_1xq4j_31._grayscaleMode_1xq4j_191._highContrastMode_1xq4j_141{filter:grayscale(0)!important}
@@ -39,7 +39,9 @@ export interface AccessibilityPanelProps {
39
39
  /** Обработчик закрытия панели */
40
40
  onClose: () => void;
41
41
  /** Позиция панели относительно кнопки */
42
- position?: 'top-right' | 'top-left' | 'bottom-left' | 'bottom-right';
42
+ position?: 'top-right' | 'top-left';
43
+ /** Объект с переводами для настройки локализации */
44
+ translations?: import('../config/translations').AccessibilityTranslations;
43
45
  }
44
46
  /**
45
47
  * Свойства компонентов управления настройками
@@ -50,6 +52,42 @@ export interface ControlComponentProps {
50
52
  /** Обработчик обновления настроек */
51
53
  onUpdate: (updates: Partial<AccessibilitySettings>) => void;
52
54
  }
55
+ /**
56
+ * Свойства компонента переключателя режима доступности
57
+ */
58
+ export interface AccessibilityToggleProps {
59
+ /** CSS класс для дополнительной стилизации */
60
+ className?: string;
61
+ /** Объект с переводами */
62
+ translations?: Record<string, string>;
63
+ }
64
+ /**
65
+ * Свойства компонента управления цветовой схемой
66
+ */
67
+ export interface ColorSchemeControlProps {
68
+ /** CSS класс для дополнительной стилизации */
69
+ className?: string;
70
+ /** Объект с переводами */
71
+ translations?: Record<string, string>;
72
+ }
73
+ /**
74
+ * Свойства компонента управления размером шрифта
75
+ */
76
+ export interface FontSizeControlProps {
77
+ /** CSS класс для дополнительной стилизации */
78
+ className?: string;
79
+ /** Объект с переводами */
80
+ translations?: Record<string, string>;
81
+ }
82
+ /**
83
+ * Свойства компонента управления изображениями
84
+ */
85
+ export interface ImageControlProps {
86
+ /** CSS класс для дополнительной стилизации */
87
+ className?: string;
88
+ /** Объект с переводами */
89
+ translations?: Record<string, string>;
90
+ }
53
91
  /**
54
92
  * Настройки по умолчанию
55
93
  */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,eAAe,GAAG,WAAW,CAAC;AACrE,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,UAAU,GAAG,OAAO,CAAC;AAEtD;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,mCAAmC;IACnC,SAAS,EAAE,OAAO,CAAC;IACnB,qBAAqB;IACrB,WAAW,EAAE,WAAW,CAAC;IACzB,oBAAoB;IACpB,QAAQ,EAAE,QAAQ,CAAC;IACnB,gCAAgC;IAChC,UAAU,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,wBAAwB;IACxB,QAAQ,EAAE,qBAAqB,CAAC;IAChC,0BAA0B;IAC1B,cAAc,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,qBAAqB,CAAC,KAAK,IAAI,CAAC;IAClE,8CAA8C;IAC9C,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,6CAA6C;IAC7C,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,wBAAwB;IACxB,MAAM,EAAE,OAAO,CAAC;IAChB,iCAAiC;IACjC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,yCAAyC;IACzC,QAAQ,CAAC,EAAE,WAAW,GAAG,UAAU,GAAG,aAAa,GAAG,cAAc,CAAC;CACtE;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,wBAAwB;IACxB,QAAQ,EAAE,qBAAqB,CAAC;IAChC,qCAAqC;IACrC,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,qBAAqB,CAAC,KAAK,IAAI,CAAC;CAC7D;AAED;;GAEG;AACH,eAAO,MAAM,8BAA8B,EAAE,qBAK5C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,WAAW,2BAA2B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,eAAe,GAAG,WAAW,CAAC;AACrE,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,UAAU,GAAG,OAAO,CAAC;AAEtD;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,mCAAmC;IACnC,SAAS,EAAE,OAAO,CAAC;IACnB,qBAAqB;IACrB,WAAW,EAAE,WAAW,CAAC;IACzB,oBAAoB;IACpB,QAAQ,EAAE,QAAQ,CAAC;IACnB,gCAAgC;IAChC,UAAU,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,wBAAwB;IACxB,QAAQ,EAAE,qBAAqB,CAAC;IAChC,0BAA0B;IAC1B,cAAc,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,qBAAqB,CAAC,KAAK,IAAI,CAAC;IAClE,8CAA8C;IAC9C,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,6CAA6C;IAC7C,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,wBAAwB;IACxB,MAAM,EAAE,OAAO,CAAC;IAChB,iCAAiC;IACjC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,yCAAyC;IACzC,QAAQ,CAAC,EAAE,WAAW,GAAG,UAAU,CAAE;IACrC,oDAAoD;IACpD,YAAY,CAAC,EAAE,OAAO,wBAAwB,EAAE,yBAAyB,CAAC;CAC3E;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,wBAAwB;IACxB,QAAQ,EAAE,qBAAqB,CAAC;IAChC,qCAAqC;IACrC,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,qBAAqB,CAAC,KAAK,IAAI,CAAC;CAC7D;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,8CAA8C;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0BAA0B;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvC;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,8CAA8C;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0BAA0B;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvC;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,8CAA8C;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0BAA0B;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvC;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,8CAA8C;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0BAA0B;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvC;AAED;;GAEG;AACH,eAAO,MAAM,8BAA8B,EAAE,qBAK5C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,WAAW,2BAA2B,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vision-accessibility",
3
- "version": "1.0.2",
3
+ "version": "1.0.3",
4
4
  "description": "Универсальный компонент панели доступности для слабовидящих пользователей",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.esm.js",
@@ -3,11 +3,21 @@
3
3
  * Реализует sticky панель с настройками доступности
4
4
  */
5
5
 
6
+ [data-accessibility-panel-container] .stickyContainer,
6
7
  .stickyContainer {
7
8
  position: fixed;
8
- top: 70px;
9
9
  pointer-events: none;
10
10
  z-index: 1000;
11
+ top: 70px;
12
+
13
+
14
+ &.top-right {
15
+ right: $spacing-xl;
16
+ }
17
+
18
+ &.top-left {
19
+ left: $spacing-xl;
20
+ }
11
21
 
12
22
  // Адаптивность для мобильных устройств
13
23
  @include respond-down(md) {
@@ -19,8 +29,8 @@
19
29
  position: sticky;
20
30
  top: 20px;
21
31
  width: 360px;
22
- max-width: calc(100vw - 40px);
23
- max-height: calc(100vh - 40px);
32
+ max-width: calc(100vw - 120px);
33
+ max-height: calc(100vh - 120px);
24
34
  background: $white;
25
35
  border: 1px solid $gray-300;
26
36
  border-radius: $border-radius-xl;
@@ -30,34 +40,6 @@
30
40
  flex-direction: column;
31
41
  pointer-events: auto;
32
42
 
33
- // Позиционирование панели
34
- &.top-right {
35
- margin-left: auto;
36
- margin-right: $spacing-xl;
37
- }
38
-
39
- &.top-left {
40
- margin-left: $spacing-xl;
41
- margin-right: auto;
42
- }
43
-
44
- &.bottom-right {
45
- margin-left: auto;
46
- margin-right: $spacing-xl;
47
- position: fixed;
48
- top: auto;
49
- bottom: $spacing-xl;
50
- width: 360px;
51
- }
52
-
53
- &.bottom-left {
54
- margin-left: $spacing-xl;
55
- margin-right: auto;
56
- position: fixed;
57
- top: auto;
58
- bottom: $spacing-xl;
59
- width: 360px;
60
- }
61
43
 
62
44
  // Адаптивность для мобильных устройств
63
45
  @include respond-down(md) {
@@ -229,4 +211,13 @@
229
211
 
230
212
  .panel {
231
213
  animation: slideIn $transition-fast;
214
+ }
215
+
216
+ // Для режима градаций серого нужно отменить фильтр на панели
217
+ .panel.grayscaleMode {
218
+ filter: grayscale(0) !important;
219
+
220
+ &.highContrastMode {
221
+ filter: grayscale(0) !important;
222
+ }
232
223
  }
@@ -1,6 +1,7 @@
1
1
  import type { Meta, StoryObj } from "@storybook/react";
2
2
  import { AccessibilityPanel } from "./AccessibilityPanel";
3
3
  import { useState } from "react";
4
+ import { AccessibilityTranslations } from "../../config/translations";
4
5
 
5
6
  const meta = {
6
7
  title: "Components/AccessibilityPanel",
@@ -72,6 +73,28 @@ const WithProviderAndControls = (Story: any, context: any) => {
72
73
  <li>Это элемент списка 3</li>
73
74
  </ul>
74
75
  </div>
76
+ <div style={{ marginTop: '20px' }}>
77
+ <h2>Еще немного контента</h2>
78
+ <p>Вот еще несколько абзацев текста для демонстрации изменения размера шрифта:</p>
79
+ <p>Первый параграф с обычным текстом для проверки работы изменения размера шрифта.</p>
80
+ <p>Второй параграф содержит немного другой текст, чтобы можно было увидеть эффект от изменения размера шрифта.</p>
81
+ <ul>
82
+ <li>Это элемент списка 1</li>
83
+ <li>Это элемент списка 2</li>
84
+ <li>Это элемент списка 3</li>
85
+ </ul>
86
+ </div>
87
+ <div style={{ marginTop: '20px' }}>
88
+ <h2>Еще немного контента</h2>
89
+ <p>Вот еще несколько абзацев текста для демонстрации изменения размера шрифта:</p>
90
+ <p>Первый параграф с обычным текстом для проверки работы изменения размера шрифта.</p>
91
+ <p>Второй параграф содержит немного другой текст, чтобы можно было увидеть эффект от изменения размера шрифта.</p>
92
+ <ul>
93
+ <li>Это элемент списка 1</li>
94
+ <li>Это элемент списка 2</li>
95
+ <li>Это элемент списка 3</li>
96
+ </ul>
97
+ </div>
75
98
  </div>
76
99
  </div>
77
100
  );
@@ -86,20 +109,37 @@ export const Default: Story = {
86
109
  decorators: [WithProviderAndControls],
87
110
  };
88
111
 
89
- export const TopLeftPosition: Story = {
112
+ export const WithTranslations: Story = {
90
113
  args: {
91
114
  isOpen: true,
92
- position: "top-left",
115
+ position: "top-right",
93
116
  onClose: () => console.log("Panel closed"),
117
+ translations: {
118
+ panelTitle: "Accessibility Settings",
119
+ panelDescription: "Adjust page display for better accessibility",
120
+ closePanelLabel: "Close accessibility panel",
121
+ colorSchemeTitle: "Color Scheme",
122
+ colorSchemeStandardLabel: "Standard",
123
+ colorSchemeStandardDescription: "Normal color scheme",
124
+ colorSchemeHighContrastLabel: "High Contrast",
125
+ colorSchemeHighContrastDescription: "High contrast for better readability",
126
+ colorSchemeGrayscaleLabel: "Grayscale",
127
+ colorSchemeGrayscaleDescription: "Convert all colors to grayscale",
128
+ fontSizeTitle: "Font Size",
129
+ fontSizeSmallLabel: "Small",
130
+ fontSizeSmallDescription: "Reduced text size (80%)",
131
+ fontSizeStandardLabel: "Standard",
132
+ fontSizeStandardDescription: "Normal text size",
133
+ fontSizeLargeLabel: "Large",
134
+ fontSizeLargeDescription: "Increased text size (130%)",
135
+ imageControlTitle: "Images",
136
+ imageControlShowLabel: "Show Images",
137
+ imageControlHideLabel: "Hide Images",
138
+ accessibilityToggleLabel: "Accessibility mode",
139
+ accessibilityEnableDescription: "All accessibility settings are active. Use controls below for fine-tuning.",
140
+ accessibilityDisableDescription: "Enable accessibility mode to activate all settings. When disabled, all changes will be reset."
141
+ }
94
142
  },
95
143
  decorators: [WithProviderAndControls],
96
144
  };
97
145
 
98
- export const BottomRightPosition: Story = {
99
- args: {
100
- isOpen: true,
101
- position: "bottom-right",
102
- onClose: () => console.log("Panel closed"),
103
- },
104
- decorators: [WithProviderAndControls],
105
- };
@@ -8,9 +8,11 @@
8
8
  * - 1.3: Скрытие панели без изменения текущих настроек
9
9
  */
10
10
 
11
- import React, { useEffect, useRef } from 'react';
11
+ import React, { useEffect, useRef, useLayoutEffect } from 'react';
12
+ import { createPortal } from 'react-dom';
12
13
  import { AccessibilityPanelProps } from '../../types';
13
14
  import { AccessibilityProvider, useAccessibilityContext } from '../../context/AccessibilityContext';
15
+ import { defaultTranslations } from '../../config/translations';
14
16
  import { AccessibilityToggle } from '../AccessibilityToggle/AccessibilityToggle';
15
17
  import { ColorSchemeControl } from '../ColorSchemeControl/ColorSchemeControl';
16
18
  import { FontSizeControl } from '../FontSizeControl/FontSizeControl';
@@ -28,9 +30,33 @@ const styles = typeof stylesImport === 'object' && stylesImport.default ? styles
28
30
  const AccessibilityPanelInner: React.FC<AccessibilityPanelProps> = ({
29
31
  isOpen,
30
32
  onClose,
31
- position = 'top-right'
33
+ position = 'top-right',
34
+ translations = {}
32
35
  }) => {
33
36
  const panelRef = useRef<HTMLDivElement>(null);
37
+
38
+ const mergedTranslations = { ...defaultTranslations, ...translations };
39
+
40
+ // Создаем отдельный контейнер для панели вне document.body, чтобы избежать влияния фильтров
41
+ const [portalContainer, setPortalContainer] = React.useState<HTMLDivElement | null>(null);
42
+
43
+ useLayoutEffect(() => {
44
+ // Создаем контейнер для портала вне document.body
45
+ const container = document.createElement('div');
46
+ container.setAttribute('data-accessibility-panel-container', 'true');
47
+
48
+ // Добавляем контейнер в documentElement (HTML), а не в body
49
+ document.documentElement.appendChild(container);
50
+
51
+ setPortalContainer(container);
52
+
53
+ // Очищаем при размонтировании
54
+ return () => {
55
+ if (container.parentNode) {
56
+ container.parentNode.removeChild(container);
57
+ }
58
+ };
59
+ }, []);
34
60
 
35
61
  /**
36
62
  * Обработка клика вне области панели для закрытия
@@ -88,59 +114,61 @@ const AccessibilityPanelInner: React.FC<AccessibilityPanelProps> = ({
88
114
  };
89
115
 
90
116
  // Если панель закрыта, не рендерим её
91
- if (!isOpen) {
117
+ if (!isOpen || !portalContainer) {
92
118
  return null;
93
119
  }
94
120
 
95
121
  const { settings } = useAccessibilityContext();
96
122
 
97
- return (
98
- <div className={cn(styles.stickyContainer)}>
99
- <div
100
- ref={panelRef}
101
- className={cn(
102
- styles.panel,
103
- styles[position],
104
- settings.colorScheme === 'high-contrast' && styles.highContrastMode
105
- )}
106
- role="dialog"
107
- aria-modal="true"
108
- aria-labelledby="accessibility-panel-title"
109
- aria-describedby="accessibility-panel-description"
123
+ // Рендерим панель через портал в отдельный контейнер вне document.body
124
+ return createPortal(
125
+ <div className={cn(styles.stickyContainer, styles[position])}>
126
+ <div
127
+ ref={panelRef}
128
+ className={cn(
129
+ styles.panel,
130
+ settings.colorScheme === 'high-contrast' && styles.highContrastMode,
131
+ settings.colorScheme === 'grayscale' && styles.grayscaleMode
132
+ )}
133
+ role="dialog"
134
+ aria-modal="true"
135
+ aria-labelledby="accessibility-panel-title"
136
+ aria-describedby="accessibility-panel-description"
137
+ >
138
+ <div className={cn(styles.header)}>
139
+ <h3 id="accessibility-panel-title" className={cn(styles.title)}>
140
+ {mergedTranslations.panelTitle}
141
+ </h3>
142
+
143
+ <button
144
+ onClick={handleCloseClick}
145
+ className={cn(styles.closeButton)}
146
+ aria-label={mergedTranslations.closePanelLabel}
147
+ type="button"
110
148
  >
111
- <div className={cn(styles.header)}>
112
- <h3 id="accessibility-panel-title" className={cn(styles.title)}>
113
- Настройки доступности
114
- </h3>
115
-
116
- <button
117
- onClick={handleCloseClick}
118
- className={cn(styles.closeButton)}
119
- aria-label="Закрыть панель настроек доступности"
120
- type="button"
121
- >
122
- ×
123
- </button>
124
- </div>
149
+ ×
150
+ </button>
151
+ </div>
125
152
 
126
- <div
127
- id="accessibility-panel-description"
128
- className={cn(styles.description)}
129
- >
130
- Настройте отображение страницы для улучшения доступности
131
- </div>
153
+ <div
154
+ id="accessibility-panel-description"
155
+ className={cn(styles.description)}
156
+ >
157
+ {mergedTranslations.panelDescription}
158
+ </div>
132
159
 
133
- <div className={cn(styles.content)}>
134
- <AccessibilityToggle />
135
-
136
- <div className={cn(styles.controls)}>
137
- <ColorSchemeControl />
138
- <FontSizeControl />
139
- <ImageControl />
140
- </div>
160
+ <div className={cn(styles.content)}>
161
+ <AccessibilityToggle translations={mergedTranslations} />
162
+
163
+ <div className={cn(styles.controls)}>
164
+ <ColorSchemeControl translations={mergedTranslations} />
165
+ <FontSizeControl translations={mergedTranslations} />
166
+ <ImageControl translations={mergedTranslations} />
141
167
  </div>
142
168
  </div>
143
169
  </div>
170
+ </div>,
171
+ portalContainer // Рендерим в отдельный контейнер вне document.body, чтобы избежать влияния фильтров
144
172
  );
145
173
  };
146
174
 
@@ -31,4 +31,15 @@ export const WithCustomClass: Story = {
31
31
  args: {
32
32
  className: 'custom-toggle-class',
33
33
  },
34
+ };
35
+
36
+ export const WithTranslations: Story = {
37
+ args: {
38
+ className: 'custom-toggle-class',
39
+ translations: {
40
+ accessibilityToggleLabel: "Accessibility mode",
41
+ accessibilityEnableDescription: "All accessibility settings are active. Use controls below for fine-tuning.",
42
+ accessibilityDisableDescription: "Enable accessibility mode to activate all settings. When disabled, all changes will be reset."
43
+ }
44
+ },
34
45
  };
@@ -10,6 +10,7 @@
10
10
 
11
11
  import React from 'react';
12
12
  import { useAccessibilityContext } from '../../context/AccessibilityContext';
13
+ import { defaultTranslations } from '../../config/translations';
13
14
  import styles from './AccessibilityToggle.module.scss';
14
15
 
15
16
  /**
@@ -18,24 +19,30 @@ import styles from './AccessibilityToggle.module.scss';
18
19
  interface AccessibilityToggleProps {
19
20
  /** CSS класс для дополнительной стилизации */
20
21
  className?: string;
22
+ /** Объект с переводами */
23
+ translations?: Record<string, string>;
21
24
  }
22
25
 
23
26
  /**
24
27
  * Компонент главного переключателя режима доступности
25
- *
28
+ *
26
29
  * @param props - Свойства компонента
27
30
  * @returns JSX элемент с переключателем общего режима доступности
28
31
  */
29
- export const AccessibilityToggle: React.FC<AccessibilityToggleProps> = ({
30
- className
32
+ export const AccessibilityToggle: React.FC<AccessibilityToggleProps> = ({
33
+ className,
34
+ translations = {}
31
35
  }) => {
36
+ // Объединяем переданные переводы с переводами по умолчанию
37
+ const mergedTranslations = { ...defaultTranslations, ...translations };
38
+
32
39
  // Используем контекст для получения состояния и методов управления
33
40
  const { settings, updateSettings } = useAccessibilityContext();
34
41
  const isEnabled = settings.isEnabled;
35
42
 
36
43
  /**
37
44
  * Обработчик изменения общего режима доступности
38
- *
45
+ *
39
46
  * @param event - Событие изменения чекбокса
40
47
  */
41
48
  const handleToggleChange = (event: React.ChangeEvent<HTMLInputElement>) => {
@@ -60,21 +67,21 @@ export const AccessibilityToggle: React.FC<AccessibilityToggleProps> = ({
60
67
 
61
68
  <div className={styles.toggleContent}>
62
69
  <span className={styles.toggleTitle}>
63
- Режим доступности
70
+ {mergedTranslations.accessibilityToggleLabel}
64
71
  </span>
65
72
  <span className={styles.toggleStatus}>
66
- {isEnabled ? 'Включен' : 'Выключен'}
73
+ {isEnabled ? mergedTranslations.accessibilityEnableLabel : mergedTranslations.accessibilityDisableLabel}
67
74
  </span>
68
75
  </div>
69
76
  </label>
70
77
 
71
- <p
78
+ <p
72
79
  id="accessibility-toggle-description"
73
80
  className={styles.description}
74
81
  >
75
- {isEnabled
76
- ? 'Все настройки доступности активны. Используйте элементы управления ниже для точной настройки.'
77
- : 'Включите режим доступности для активации всех настроек. При выключении все изменения будут сброшены.'
82
+ {isEnabled
83
+ ? mergedTranslations.accessibilityEnableDescription || 'Все настройки доступности активны. Используйте элементы управления ниже для точной настройки.'
84
+ : mergedTranslations.accessibilityDisableDescription || 'Включите режим доступности для активации всех настроек. При выключении все изменения будут сброшены.'
78
85
  }
79
86
  </p>
80
87
  </div>
@@ -31,4 +31,19 @@ export const WithCustomClass: Story = {
31
31
  args: {
32
32
  className: 'custom-color-scheme-class',
33
33
  },
34
+ };
35
+
36
+ export const WithTranslations: Story = {
37
+ args: {
38
+ className: 'custom-color-scheme-class',
39
+ translations: {
40
+ colorSchemeTitle: "Color Scheme",
41
+ colorSchemeStandardLabel: "Standard",
42
+ colorSchemeStandardDescription: "Normal color scheme",
43
+ colorSchemeHighContrastLabel: "High Contrast",
44
+ colorSchemeHighContrastDescription: "High contrast for better readability",
45
+ colorSchemeGrayscaleLabel: "Grayscale",
46
+ colorSchemeGrayscaleDescription: "Convert all colors to grayscale",
47
+ }
48
+ },
34
49
  };