Skip to content

Instantly share code, notes, and snippets.

@artalar
artalar / app-theme-styles.md
Last active June 25, 2018 09:31
Про системы стилей и палитры цветов

По поводу стилизации и темизации. Особенно больная тема для тех у кого дизайнера нет на проекте, а есть заказчик который хочет что бы было красиво, а как - не известно.

Обычно выбирается набор "сочитающихся" цветов и ими закрашиваются разные компоненты. При этом в наборе два десятка цветов (классический вариант: primary и accent) + разнообразные тени и фоны (например). И какой и куда цвет применить - совершенно не ясно. Вдобавок всего два тона не всегда хватает и возникают новые проблемы с поиском нужной гаммы.

Но можно использовать следующий подход:

  1. Не цвета пытаться впихнуть в компоненты, а к компонентам искать подходящие цвета. Т.е. для каждого компонента должна отдельно определяться цветовая гамма: полностью индивидуальная, или отнаследованная от родителя. Важно понять цель дизайна не раскидать цвета по интерфейсу, а выделить интерфейс, используя цвета.
  2. Брать за основу 3 цвета: background (фон), basic (основной цвет выделения частей интерфейса), **ac
@artalar
artalar / wtf.js
Last active February 4, 2019 09:25 — forked from MichalZalecki/wtf.js
/* VT100 terminal reset (<ESC>c) */
console.log('\033c');
/* numbers comparations */
/**/ '2' == 2;
//// true
/**/ '2' === 2;
const spreadAssignmentOperatorPolyfill = (assignable, extending) => {
if (assignable === null || assignable === undefined) {
throw new TypeError(`${assignable} is not iterable`);
} else if (typeof assignable === "object" && !Array.isArray(assignable)) {
return { ...assignable, ...extending };
}
const assignableIterator = assignable[Symbol.iterator];
if (!assignableIterator) {
throw new TypeError(`${assignable} is not iterable`);
}
import * as t from "jsdoc-runtime";
const tSqrt = t.declare.number
// if input will not valid
// return to last (this) workflow node
.default(t.context.fallback(() => 0))
// used in autotests
.from(0)
.to(t.int)
import { createRootPath, immutablePreset } from 'pathon';
const createLogger = id => (...args) => console.log(`ID: ${id}`, ...args);
const pathSome = createRootPath(
// initial state
{ list: [{ id: 0, value: Math.random() }] },
// default setters and getters (for `path` to)
immutablePreset
);
import { inDevMode } from './enviroment';
const isObject = object => typeof object === 'object' && object !== null;
function Logger(location, addSnapshot) {
const logs = [];
this.setLog = (previosObject, newObject, key, description = 'objects not equal') => {
const log = {
previosObject,

Реализуйте ф-ю shallowCopy, которая будет осуществлять [не глубокое] копирование объекта сохраняя его hidden class \ structure \ shape.

Если последние определения вам не ясны, вот статья для введения https://medium.com/@bmeurer/surprising-polymorphism-in-react-applications-63015b50abc

Или видео https://youtu.be/5nmpokoRaZI

// shallowCopyWithSaveMap.js
const a = {x:1, y:2, z:3};
/* eslint-disable */
/******************************************
~/form/address.jsx
*/
import { service } from '~/service.js';
import { workflow } from './workflow.js';
export const Autocomplete = service.connect([workflow, 'address'])(
({ value, suggestions, onChange }) => (
const initCounterStore = {
scope: {
counter: 0,
},
};
const initNormalizedState = {
news: { '-1': { id: '-1', text: 'some news text' + '-1' } },
show: ['-1'],
};
const deepState = {
@artalar
artalar / example.jsx
Last active July 21, 2018 20:40
[RFC] global stream with declarative suscriptions
/* Example #1 */
// Store.js
// `Atom()` - create new stream
const a = Atom(0);
const b = Atom(0);
export const store = createStore({ a, b })