26 lines
1.8 KiB
Markdown
26 lines
1.8 KiB
Markdown
# Ответ GPT SOL по архитектуре
|
|
|
|
## 1. Архитектура
|
|
|
|
Архитектура верна. Лишнее сейчас: `layout.theme` как система тем и Custom Element. Достаточно CSS-переменных/класса темы.
|
|
|
|
## 2. Более простой вариант
|
|
|
|
`initFilePicker({ mount, ... })` плюс один ESM-бандл и CSS. IIFE добавлять только для интеграций без ES-модулей.
|
|
|
|
## 3. Custom Element
|
|
|
|
Сначала фабрика и бандл. Custom Element нужен только при подтверждённом declarative-use кейсе; иначе это второй API для сопровождения.
|
|
|
|
## 4. Риски
|
|
|
|
- `destroy()` обязан снимать listeners и очищать DOM/state.
|
|
- `onChange` должен возвращать копию массива, а не внутренний state.
|
|
- Нужно сохранять исходные `File`; ZIP-элементы ими не являются, поэтому нужен явный тип результата.
|
|
- Лимиты ZIP: размер, число файлов, суммарный распакованный размер, compression ratio, recursion depth.
|
|
- `fflate` внутри бандла исключает глобальную зависимость.
|
|
- CSS изолировать префиксом классов; Shadow DOM пока не нужен.
|
|
- Не полагаться на абсолютные URL; ассеты должны быть в бандле или URL задаётся интегратором.
|
|
- Проверить старые браузеры: ES target, `webkitdirectory`, Custom Element.
|
|
- Для managed Flask достаточно статической раздачи ESM/CSS с корректными MIME и cache/versioning.
|