/**
* settings/tabs/workspace.js - Workspace (Canvas/Grid) Settings Tab
*/
import { updateSetting } from '../store.js';
import { t } from '../../i18n.js';
export function renderWorkspace(container, settings) {
container.innerHTML = `
${t('canvas_background') || 'Workspace'}
${t('grid_style')}
${t('grid_style_desc')}
${t('canvas_preset')}
${t('canvas_preset_desc')}
${t('orientation')}
${t('orientation_desc')}
`;
}
export function bindWorkspaceEvents(container) {
const getGridParams = () => ({
style: container.querySelector('#grid-style-select').value,
color: container.querySelector('#grid-color-picker').value,
thickness: parseFloat(container.querySelector('#grid-thickness-input').value) || 1,
showMajor: container.querySelector('#major-grid-toggle').checked,
majorColor: container.querySelector('#major-grid-color-picker').value,
majorInterval: parseInt(container.querySelector('#major-grid-interval-input').value) || 5
});
const dispatchGridUpdate = () => {
const params = getGridParams();
updateSetting('gridStyle', params.style);
updateSetting('gridColor', params.color);
updateSetting('gridThickness', params.thickness);
updateSetting('showMajorGrid', params.showMajor);
updateSetting('majorGridColor', params.majorColor);
updateSetting('majorGridInterval', params.majorInterval);
const majorOpts = container.querySelector('#major-grid-options');
if (majorOpts) majorOpts.style.display = params.showMajor ? 'block' : 'none';
window.dispatchEvent(new CustomEvent('gridChanged', { detail: params }));
};
const gridStyleSelect = container.querySelector('#grid-style-select');
gridStyleSelect.addEventListener('change', dispatchGridUpdate);
const gridColorPicker = container.querySelector('#grid-color-picker');
gridColorPicker.addEventListener('input', dispatchGridUpdate);
const gridThicknessInput = container.querySelector('#grid-thickness-input');
gridThicknessInput.addEventListener('input', dispatchGridUpdate);
const majorGridToggle = container.querySelector('#major-grid-toggle');
majorGridToggle.addEventListener('change', dispatchGridUpdate);
const majorGridColorPicker = container.querySelector('#major-grid-color-picker');
majorGridColorPicker.addEventListener('input', dispatchGridUpdate);
const majorGridIntervalInput = container.querySelector('#major-grid-interval-input');
majorGridIntervalInput.addEventListener('input', dispatchGridUpdate);
const gridSpacingInput = container.querySelector('#grid-spacing-input');
gridSpacingInput.addEventListener('input', (e) => {
const val = parseInt(e.target.value) || 20;
updateSetting('gridSpacing', val);
document.documentElement.style.setProperty('--grid-size', `${val}px`);
window.dispatchEvent(new CustomEvent('gridSpacingChanged', { detail: { spacing: val } }));
});
const bgColorPicker = container.querySelector('#bg-color-picker');
bgColorPicker.addEventListener('input', (e) => {
updateSetting('bgColor', e.target.value);
document.documentElement.style.setProperty('--bg-color', e.target.value);
});
const canvasPreset = container.querySelector('#canvas-preset');
const orientationContainer = container.querySelector('#orientation-container');
const customSizeDiv = container.querySelector('#custom-size-inputs');
const updateCanvas = () => {
const val = canvasPreset.value;
const orientationSelect = container.querySelector('#canvas-orientation');
const orient = orientationSelect ? orientationSelect.value : 'portrait';
updateSetting('canvasPreset', val);
updateSetting('canvasOrientation', orient);
if (customSizeDiv) customSizeDiv.style.display = val === 'custom' ? 'flex' : 'none';
if (orientationContainer) orientationContainer.style.display = val === 'full' ? 'none' : 'flex';
let w = '100%', h = '100%';
if (val === 'A4') {
w = orient === 'portrait' ? 794 : 1123;
h = orient === 'portrait' ? 1123 : 794;
} else if (val === 'A3') {
w = orient === 'portrait' ? 1123 : 1587;
h = orient === 'portrait' ? 1587 : 1123;
} else if (val === 'custom') {
w = parseInt(container.querySelector('#canvas-width').value) || 800;
h = parseInt(container.querySelector('#canvas-height').value) || 600;
updateSetting('canvasWidth', w);
updateSetting('canvasHeight', h);
}
window.dispatchEvent(new CustomEvent('canvasResize', {
detail: { width: w, height: h }
}));
};
canvasPreset.addEventListener('change', updateCanvas);
const orientationSelect = container.querySelector('#canvas-orientation');
if (orientationSelect) orientationSelect.addEventListener('change', updateCanvas);
const applyCustomBtn = container.querySelector('#apply-custom-size');
if (applyCustomBtn) applyCustomBtn.addEventListener('click', updateCanvas);
}