ErdEditorElement
에디터는 단순한 HTMLElement 입니다.
타입정의는 다음과 같습니다.
interface ErdEditorElement extends HTMLElement {
readonly: boolean;
systemDarkMode: boolean; // system dark/light auto
enableThemeBuilder: boolean;
value: string;
focus: () => void;
blur: () => void;
clear: () => void;
destroy: () => void;
setInitialValue: (value: string) => void;
setPresetTheme: (themeOptions: Partial<ThemeOptions>) => void;
setTheme: (theme: Partial<Theme>) => void;
setKeyBindingMap: (keyBindingMap: Partial<KeyBindingMap>) => void;
setSchemaSQL: (value: string) => void;
getSchemaSQL: (databaseVendor?: DatabaseVendor) => string;
getSharedStore: (config?: SharedStoreConfig) => SharedStore;
setDiffValue: (value: string) => void;
}
readonly
에디터 편집 가능여부를 설정합니다.
editor.readonly = true;
// or
editor.setAttribute('readonly', 'true');
<erd-editor readonly></erd-editor>
systemDarkMode
시스템에 다크/라이트 모드를 자동으로 동기화할지 설정합니다.
editor.systemDarkMode = true;
// or
editor.setAttribute('systemDarkMode', 'true');
<erd-editor system-dark-mode></erd-editor>
enableThemeBuilder
preset 테마를 쉽게 사용자 설정할 수 있는 UI를 제공할지 여부입니다.
editor.enableThemeBuilder = true;
// or
editor.setAttribute('enableThemeBuilder', 'true');
<erd-editor enable-theme-builder></erd-editor>
preset 테마 변경에 대한 changePresetTheme
이벤트를 발생시킵니다.
editor.addEventListener('changePresetTheme', event => {
const themeOptions = event.detail;
});
value
getter
현재 에디터 상태를 json 데이터로 받아옵니다.
const data = editor.value;
setter
이전에 저장했던 에디터 상태를 불러옵니다.
History 목록에 기록되어 Undo, Redo
가 가능합니다.
editor.value = 'json...';
setInitialValue
이전에 저장했던 에디터 상태를 불러옵니다.
History 목록에 기록되지 않아 Undo, Redo
가 불가능합니다.
editor.setInitialValue('json...');
Event
change
에디터에 변경이 있을때 이벤트를 발행합니다.
editor.addEventListener('change', event => {
const data = event.target.value;
});
focus
에디터에 포커스를 줍니다.
editor.focus();
blur
에디터에 포커스를 제거합니다.
editor.blur();
clear
에디터 상태를 초기화합니다.
editor.clear();
destroy
에디터 인스턴스를 재사용 불가능하게 완전히 파괴합니다.
editor.destroy();
setKeyBindingMap
단축키를 재정의합니다.
type ShortcutOption = {
shortcut: string;
preventDefault?: boolean;
stopPropagation?: boolean;
};
const defaultKeyBindingMap: KeyBindingMap = {
addTable: [{ shortcut: 'Alt+KeyN' }],
addColumn: [{ shortcut: 'Alt+Enter' }],
addMemo: [{ shortcut: 'Alt+KeyM' }],
removeTable: [{ shortcut: '$mod+Backspace' }, { shortcut: '$mod+Delete' }],
removeColumn: [{ shortcut: 'Alt+Backspace' }, { shortcut: 'Alt+Delete' }],
primaryKey: [{ shortcut: 'Alt+KeyK' }],
selectAllTable: [{ shortcut: '$mod+Alt+KeyA' }],
selectAllColumn: [{ shortcut: 'Alt+KeyA' }],
relationshipZeroOne: [{ shortcut: '$mod+Alt+Digit1' }],
relationshipZeroN: [{ shortcut: '$mod+Alt+Digit2' }],
relationshipOneOnly: [{ shortcut: '$mod+Alt+Digit3' }],
relationshipOneN: [{ shortcut: '$mod+Alt+Digit4' }],
tableProperties: [{ shortcut: 'Alt+Space' }],
};
// example
editor.setKeyBindingMap({
addTable: [{ shortcut: '$mod+KeyN', preventDefault: true }];
});
$mod
Control키를 환경에 따라 분기합니다.
- Mac: $mod = Meta (⌘)
- Windows/Linux: $mod = Control
Shortcut Table
키보드 이벤트 key, code
프로퍼티를 사용합니다.
절대 위치로는 code
를 사용합니다.
입력값은 key
를 사용합니다.
Windows | macOS | key | code |
---|---|---|---|
N/A | Command / ⌘ | Meta | MetaLeft / MetaRight |
Alt | Option / ⌥ | Alt | AltLeft / AltRight |
Control | Control / ^ | Control | ControlLeft / ControlRight |
Shift | Shift | Shift | ShiftLeft / ShiftRight |
Space | Space | N/A | Space |
Enter | Return | Enter | Enter |
Esc | Esc | Escape | Escape |
1 , 2 , etc | 1 , 2 , etc | 1 , 2 , etc | Digit1 , Digit2 , etc |
a , b , etc | a , b , etc | a , b , etc | KeyA , KeyB , etc |
- | - | - | Minus |
= | = | = | Equal |
+ | + | + | Equal * |
Theme
setPresetTheme
preset 테마를 설정합니다.
type ThemeOptions = {
appearance: 'dark' | 'light';
grayColor: 'gray' | 'mauve' | 'slate' | 'sage' | 'olive' | 'sand';
accentColor:
| 'gray'
| 'gold'
| 'bronze'
| 'brown'
| 'yellow'
| 'amber'
| 'orange'
| 'tomato'
| 'red'
| 'ruby'
| 'crimson'
| 'pink'
| 'plum'
| 'purple'
| 'violet'
| 'iris'
| 'indigo'
| 'blue'
| 'cyan'
| 'teal'
| 'jade'
| 'green'
| 'grass'
| 'lime'
| 'mint'
| 'sky';
};
// example
editor.setPresetTheme({ appearance: 'light' });
setTheme
테마 사용자 정의가 가능합니다.