vision-accessibility 1.0.1 → 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.
- package/README.md +70 -1
- package/dist/components/AccessibilityPanel/AccessibilityPanel.d.ts.map +1 -1
- package/dist/components/AccessibilityToggle/AccessibilityToggle.d.ts +2 -0
- package/dist/components/AccessibilityToggle/AccessibilityToggle.d.ts.map +1 -1
- package/dist/components/ColorSchemeControl/ColorSchemeControl.d.ts +2 -0
- package/dist/components/ColorSchemeControl/ColorSchemeControl.d.ts.map +1 -1
- package/dist/components/FontSizeControl/FontSizeControl.d.ts +2 -0
- package/dist/components/FontSizeControl/FontSizeControl.d.ts.map +1 -1
- package/dist/components/ImageControl/ImageControl.d.ts +2 -0
- package/dist/components/ImageControl/ImageControl.d.ts.map +1 -1
- package/dist/config/translations.d.ts +57 -0
- package/dist/config/translations.d.ts.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.esm.js +371 -202
- package/dist/index.esm.js.map +1 -1
- package/dist/index.umd.js +3 -3
- package/dist/index.umd.js.map +1 -1
- package/dist/lib/css-applier.d.ts +1 -0
- package/dist/lib/css-applier.d.ts.map +1 -1
- package/dist/style.css +1 -1
- package/dist/types/index.d.ts +39 -1
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/components/AccessibilityPanel/AccessibilityPanel.module.scss +22 -33
- package/src/components/AccessibilityPanel/AccessibilityPanel.stories.tsx +50 -10
- package/src/components/AccessibilityPanel/AccessibilityPanel.tsx +72 -44
- package/src/components/AccessibilityToggle/AccessibilityToggle.stories.tsx +11 -0
- package/src/components/AccessibilityToggle/AccessibilityToggle.tsx +17 -10
- package/src/components/ColorSchemeControl/ColorSchemeControl.stories.tsx +15 -0
- package/src/components/ColorSchemeControl/ColorSchemeControl.tsx +99 -61
- package/src/components/FontSizeControl/FontSizeControl.stories.tsx +15 -0
- package/src/components/FontSizeControl/FontSizeControl.tsx +99 -61
- package/src/components/ImageControl/ImageControl.stories.tsx +11 -0
- package/src/components/ImageControl/ImageControl.tsx +17 -10
- package/src/config/translations.ts +82 -0
- package/src/hooks/useAccessibilitySettings.ts +12 -12
- package/src/index.ts +12 -8
- package/src/lib/css-applier.ts +54 -38
- package/src/styles/global.scss +2 -5
- 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_lzoik_9{position:fixed;top:70px;right:0;left:0;pointer-events:none;z-index:1000}@media (max-width: 767px){._stickyContainer_lzoik_9{top:60px}}._panel_lzoik_23{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_lzoik_23._top-right_lzoik_38{margin-left:auto;margin-right:20px}._panel_lzoik_23._top-left_lzoik_42{margin-left:20px;margin-right:auto}._panel_lzoik_23._bottom-right_lzoik_46{margin-left:auto;margin-right:20px;position:fixed;top:auto;bottom:20px;width:360px}._panel_lzoik_23._bottom-left_lzoik_54{margin-left:20px;margin-right:auto;position:fixed;top:auto;bottom:20px;width:360px}@media (max-width: 767px){._panel_lzoik_23{width:calc(100vw - 32px);max-height:calc(100vh - 100px);margin-left:16px;margin-right:16px}._panel_lzoik_23._top-right_lzoik_38,._panel_lzoik_23._top-left_lzoik_42,._panel_lzoik_23._bottom-right_lzoik_46,._panel_lzoik_23._bottom-left_lzoik_54{margin-left:16px;margin-right:16px}}._header_lzoik_75{display:flex;justify-content:space-between;align-items:center;padding:20px 24px 16px;border-bottom:1px solid #e9ecef;background:#f8f9fa}._title_lzoik_84{margin:0;font-size:18px;font-weight:600;color:#343a40;line-height:1.3}._closeButton_lzoik_92{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_lzoik_92:hover{background:#e9ecef;color:#343a40}._closeButton_lzoik_92:focus{outline:2px solid #007bff;outline-offset:2px;background:#e9ecef;color:#343a40}._closeButton_lzoik_92:active{background:#dee2e6}._description_lzoik_123{padding:16px 24px 0;font-size:14px;color:#6c757d;line-height:1.4;margin:0}._content_lzoik_131{flex:1;padding:20px 24px 24px;overflow-y:auto}._content_lzoik_131::-webkit-scrollbar{width:6px}._content_lzoik_131::-webkit-scrollbar-track{background:#e9ecef;border-radius:3px}._content_lzoik_131::-webkit-scrollbar-thumb{background:#ced4da;border-radius:3px}._content_lzoik_131::-webkit-scrollbar-thumb:hover{background:#adb5bd}._controls_lzoik_151{display:flex;flex-direction:column;gap:4px}._panel_lzoik_23._highContrastMode_lzoik_157{background:#000!important;border-color:#fff!important;color:#fff!important}._panel_lzoik_23._highContrastMode_lzoik_157 ._header_lzoik_75{background:#000!important;border-bottom-color:#fff!important}._panel_lzoik_23._highContrastMode_lzoik_157 ._title_lzoik_84{color:#fff!important}._panel_lzoik_23._highContrastMode_lzoik_157 ._closeButton_lzoik_92{color:#fff!important;border:1px solid #ffffff!important}._panel_lzoik_23._highContrastMode_lzoik_157 ._closeButton_lzoik_92:hover,._panel_lzoik_23._highContrastMode_lzoik_157 ._closeButton_lzoik_92:focus{background:#343a40!important;color:#ff0!important}._panel_lzoik_23._highContrastMode_lzoik_157 ._closeButton_lzoik_92:active{background:#6c757d!important}._panel_lzoik_23._highContrastMode_lzoik_157 ._description_lzoik_123{color:#ced4da!important}._panel_lzoik_23._highContrastMode_lzoik_157 ._content_lzoik_131::-webkit-scrollbar-track{background:#343a40!important}._panel_lzoik_23._highContrastMode_lzoik_157 ._content_lzoik_131::-webkit-scrollbar-thumb{background:#6c757d!important}._panel_lzoik_23._highContrastMode_lzoik_157 ._content_lzoik_131::-webkit-scrollbar-thumb:hover{background:#adb5bd!important}@keyframes _slideIn_lzoik_1{0%{opacity:0;transform:translateY(-10px) scale(.95)}to{opacity:1;transform:translateY(0) scale(1)}}._panel_lzoik_23{animation:_slideIn_lzoik_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}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -39,7 +39,9 @@ export interface AccessibilityPanelProps {
|
|
|
39
39
|
/** Обработчик закрытия панели */
|
|
40
40
|
onClose: () => void;
|
|
41
41
|
/** Позиция панели относительно кнопки */
|
|
42
|
-
position?: 'top-right' | 'top-left'
|
|
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,
|
|
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
|
@@ -3,13 +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
|
-
right: 0;
|
|
10
|
-
left: 0;
|
|
11
9
|
pointer-events: none;
|
|
12
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
|
+
}
|
|
13
21
|
|
|
14
22
|
// Адаптивность для мобильных устройств
|
|
15
23
|
@include respond-down(md) {
|
|
@@ -21,8 +29,8 @@
|
|
|
21
29
|
position: sticky;
|
|
22
30
|
top: 20px;
|
|
23
31
|
width: 360px;
|
|
24
|
-
max-width: calc(100vw -
|
|
25
|
-
max-height: calc(100vh -
|
|
32
|
+
max-width: calc(100vw - 120px);
|
|
33
|
+
max-height: calc(100vh - 120px);
|
|
26
34
|
background: $white;
|
|
27
35
|
border: 1px solid $gray-300;
|
|
28
36
|
border-radius: $border-radius-xl;
|
|
@@ -32,34 +40,6 @@
|
|
|
32
40
|
flex-direction: column;
|
|
33
41
|
pointer-events: auto;
|
|
34
42
|
|
|
35
|
-
// Позиционирование панели
|
|
36
|
-
&.top-right {
|
|
37
|
-
margin-left: auto;
|
|
38
|
-
margin-right: $spacing-xl;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
&.top-left {
|
|
42
|
-
margin-left: $spacing-xl;
|
|
43
|
-
margin-right: auto;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
&.bottom-right {
|
|
47
|
-
margin-left: auto;
|
|
48
|
-
margin-right: $spacing-xl;
|
|
49
|
-
position: fixed;
|
|
50
|
-
top: auto;
|
|
51
|
-
bottom: $spacing-xl;
|
|
52
|
-
width: 360px;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
&.bottom-left {
|
|
56
|
-
margin-left: $spacing-xl;
|
|
57
|
-
margin-right: auto;
|
|
58
|
-
position: fixed;
|
|
59
|
-
top: auto;
|
|
60
|
-
bottom: $spacing-xl;
|
|
61
|
-
width: 360px;
|
|
62
|
-
}
|
|
63
43
|
|
|
64
44
|
// Адаптивность для мобильных устройств
|
|
65
45
|
@include respond-down(md) {
|
|
@@ -231,4 +211,13 @@
|
|
|
231
211
|
|
|
232
212
|
.panel {
|
|
233
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
|
+
}
|
|
234
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
|
|
112
|
+
export const WithTranslations: Story = {
|
|
90
113
|
args: {
|
|
91
114
|
isOpen: true,
|
|
92
|
-
position: "top-
|
|
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
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
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
|
-
|
|
112
|
-
|
|
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
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
153
|
+
<div
|
|
154
|
+
id="accessibility-panel-description"
|
|
155
|
+
className={cn(styles.description)}
|
|
156
|
+
>
|
|
157
|
+
{mergedTranslations.panelDescription}
|
|
158
|
+
</div>
|
|
132
159
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
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
|
};
|