viewBox, то и координаты будут те же:<svg width="14" height="12" viewBox="0 0 14 12" fill="none" xmlns="http://www.w3.org/2000/svg">
<polyline points="2,5.75 5.75,10.75 12,2" fill="none" stroke="#1E2321" />
</svg> viewBox - это размер координатной сетки, и координаты должны ему, очевидно, соответствовать. ts-node в tsconfig.json: {
"ts-node": {
"compilerOptions": {
"module": "CommonJS"
}
},
...
} function toFlatMap(array, map = {}) {
for(const {name, children} of array) {
map[name] = children;
toFlatMap(children, map);
}
return map;
}function toFlatMap(array, map = {}) {
let stack = array.slice();
let current;
while(current = stack.shift()) {
map[current.name] = current.children;
stack.push(...current.children);
}
return map;
} cli 4.2.0 .hexo-cli - это инструмент для работы с hexo, у него своя версия у hexo как такового - своя. classes[item].for(let item in classes) {
classes[item as keyof typeof classes] = 'page'+item
} В typescript специально не добавили автоматическую типизацию ключей оставив просто string, так как из-за его структурной природы нельзя наверняка сказать, есть ли в полученном объекте(или его прототипе) ещё какие-то ключи, кроме тех, что указаны в его типе, и, соответственно, нельзя быть уверенным, что ничего не сломается. date_from и date_to будут глобальными переменными. preventDefault()), показываешь модал, и, после нажатия кнопки внутри модала, вручную вызываешь submit этой формы повторно, в этот раз уже не препятствуя.isTrusted) map складывает в выходной массив результат переданной функции. Поскольку она у вас возвращает отфильтрованный массив items, то в итоге у вас получается массив массивов items. Если вам нужно, чтоб возвращались категории - возвращайте категории.reduce: сonst filterData = filter(arr, input.value);
interface Category {
category: string;
list: Array<{
item: string;
}>;
}
function filter<T extends Category>(data: T[], value: string): T[] {
if (!value) return data.slice(); // или [] если при пустом value нужен пустой массив
value = value.toLowerCase();
return data.reduce((result, category) => {
if(category.category.toLowerCase().includes(value)) {
result.push(category);
} else {
const list = category.list.filter(({ item }) => item.toLowerCase().includes(value));
if (list.length) {
result.push({
...category,
list
});
}
}
return result;
}, [] as T[])
} async и await, они здесь не нужны:const ApiServiceModule = {
get: <T>(url: string): Promise<T> => fetch(url)
.then(response => response.json())
.catch(err => console.error(err))
} async/await всего лишь сахар над Promise и в данном случае ничего не делают, т.к fetch и так возвращает Promise.this. update, а родитель его поймал и что-то сделал.provide, дети делают inject и таким образом держат общий набор данных\методов.ref тоже можно, но тут следует продумать архитектуру с публичными и внутренними методами, чтоб поддержка не превратилась в ад.