@capsuletech/web-style 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -0
- package/dist/assets/web-style.css +1 -0
- package/dist/constants.d.ts +2 -0
- package/dist/createStyle.d.ts +4 -0
- package/dist/editor/ThemeEditor.d.ts +17 -0
- package/dist/editor/apply.d.ts +12 -0
- package/dist/editor/export.d.ts +9 -0
- package/dist/editor/index.d.ts +7 -0
- package/dist/editor/oklch.d.ts +14 -0
- package/dist/editor/panel/ExportButton.d.ts +6 -0
- package/dist/editor/panel/FontControl.d.ts +12 -0
- package/dist/editor/panel/ModeToggle.d.ts +11 -0
- package/dist/editor/panel/OklchSliders.d.ts +10 -0
- package/dist/editor/panel/Panel.d.ts +11 -0
- package/dist/editor/panel/PresetPicker.d.ts +11 -0
- package/dist/editor/panel/RadiusControl.d.ts +6 -0
- package/dist/editor/panel/Section.d.ts +15 -0
- package/dist/editor/panel/Slider.d.ts +18 -0
- package/dist/editor/panel/SpacingControl.d.ts +6 -0
- package/dist/editor/presets.d.ts +10 -0
- package/dist/editor/preview/Preview.d.ts +9 -0
- package/dist/editor/preview/SampleAuth.d.ts +6 -0
- package/dist/editor/preview/SampleButtons.d.ts +5 -0
- package/dist/editor/preview/SampleMetrics.d.ts +1 -0
- package/dist/editor/preview/SamplePricing.d.ts +1 -0
- package/dist/editor/types.d.ts +31 -0
- package/dist/editor.mjs +549 -0
- package/dist/editor.mjs.map +1 -0
- package/dist/index.css +168 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.mjs +114 -0
- package/dist/index.mjs.map +1 -0
- package/dist/package.json +32 -0
- package/dist/switcher/ThemeSwitcher.d.ts +19 -0
- package/dist/switcher/index.d.ts +1 -0
- package/dist/themes/black.css +176 -0
- package/dist/themes/damon.css +174 -0
- package/dist/themes/deepPurple.css +182 -0
- package/dist/themes/index.css +13 -0
- package/dist/themes/lightGreen.css +182 -0
- package/dist/themes/minimalNeutral.css +174 -0
- package/dist/themes/openprofile.css +178 -0
- package/dist/themes/pasteelement.css +174 -0
- package/dist/themes/shopifyRed.css +182 -0
- package/dist/themes/tiesen.css +184 -0
- package/dist/themes/vescrow.css +182 -0
- package/dist/themes/zen.css +182 -0
- package/dist/utils.d.ts +4 -0
- package/package.json +41 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { ITheme } from './types';
|
|
2
|
+
interface IProps {
|
|
3
|
+
/** Стартовая тема. По умолчанию dark + Blue + radius 0.5rem. */
|
|
4
|
+
initialTheme?: ITheme;
|
|
5
|
+
/** Колбэк при каждом изменении (для persist, analytics). */
|
|
6
|
+
onChange?: (theme: ITheme) => void;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Главная композиция редактора: левая колонка-Panel + правая Preview.
|
|
10
|
+
* Тема живёт здесь как signal; каждое изменение applyTheme'ится на
|
|
11
|
+
* preview-элемент (scoped — не трогает host-app).
|
|
12
|
+
*
|
|
13
|
+
* Layout: 380px фиксированный левый стол, оставшееся под preview.
|
|
14
|
+
* Min-height 100vh, чтобы scroll preview/panel был внутри editor'а.
|
|
15
|
+
*/
|
|
16
|
+
export declare const ThemeEditor: (props: IProps) => import("solid-js").JSX.Element;
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { ITheme } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Применяет тему к одному элементу как inline CSS-переменные. Так редактор
|
|
4
|
+
* может быть scoped (только preview-зона) или глобальным (apply на
|
|
5
|
+
* `document.documentElement`).
|
|
6
|
+
*
|
|
7
|
+
* Для `mode` переключает класс `.dark` на элементе — наш `index.css` уже
|
|
8
|
+
* слушает `.dark` / `[data-theme="dark"]`.
|
|
9
|
+
*/
|
|
10
|
+
export declare const applyTheme: (el: HTMLElement, theme: ITheme) => void;
|
|
11
|
+
/** Полностью убирает все inline-overrides + класс `.dark`. */
|
|
12
|
+
export declare const resetTheme: (el: HTMLElement) => void;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ITheme } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Сериализует текущую тему в CSS-блок, готовый к копипасте в проектный
|
|
4
|
+
* `globals.css` (или эквивалент). Покрывает только токены, которые реально
|
|
5
|
+
* редактирует UI — остальные пусть берутся из проектных дефолтов.
|
|
6
|
+
*/
|
|
7
|
+
export declare const exportTheme: (theme: ITheme) => string;
|
|
8
|
+
/** Копирует в clipboard. Возвращает promise (для feedback). */
|
|
9
|
+
export declare const copyTheme: (theme: ITheme) => Promise<void>;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { ThemeEditor } from './ThemeEditor';
|
|
2
|
+
export { applyTheme, resetTheme } from './apply';
|
|
3
|
+
export { exportTheme, copyTheme } from './export';
|
|
4
|
+
export { COLOR_PRESETS, FONT_OPTIONS, DEFAULT_THEME } from './presets';
|
|
5
|
+
export { parseOklch, formatOklch, contrastForeground } from './oklch';
|
|
6
|
+
export type { IOklch } from './oklch';
|
|
7
|
+
export type { IFontOption, IPresetColor, ITheme, ThemeMode } from './types';
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface IOklch {
|
|
2
|
+
l: number;
|
|
3
|
+
c: number;
|
|
4
|
+
h: number;
|
|
5
|
+
}
|
|
6
|
+
/** Парсит `'oklch(0.65 0.18 250)'` → `{l, c, h}`. Fallback на black-ish. */
|
|
7
|
+
export declare const parseOklch: (raw: string) => IOklch;
|
|
8
|
+
export declare const formatOklch: (c: IOklch) => string;
|
|
9
|
+
/**
|
|
10
|
+
* Производит «контрастный» foreground для primary: если primary тёмный
|
|
11
|
+
* (l < 0.5) → светлый текст, иначе тёмный. Не идеально с точки зрения
|
|
12
|
+
* WCAG, но достаточно для preview и большинства случаев.
|
|
13
|
+
*/
|
|
14
|
+
export declare const contrastForeground: (primary: string) => string;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
interface IProps {
|
|
2
|
+
family: string;
|
|
3
|
+
size: number;
|
|
4
|
+
onFamilyChange: (stack: string) => void;
|
|
5
|
+
onSizeChange: (v: number) => void;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Два контрола: семейство (горизонтальный selector с превью каждого шрифта
|
|
9
|
+
* собственным `font-family`) и базовый размер (slider).
|
|
10
|
+
*/
|
|
11
|
+
export declare const FontControl: (props: IProps) => import("solid-js").JSX.Element;
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ThemeMode } from '../types';
|
|
2
|
+
interface IProps {
|
|
3
|
+
mode: ThemeMode;
|
|
4
|
+
onChange: (mode: ThemeMode) => void;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Сегментный switch light/dark. Выбранный сегмент — primary-фон.
|
|
8
|
+
* Кнопки покрывают всю секцию, чтобы кликабельная зона была щедрой.
|
|
9
|
+
*/
|
|
10
|
+
export declare const ModeToggle: (props: IProps) => import("solid-js").JSX.Element;
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
interface IProps {
|
|
2
|
+
value: string;
|
|
3
|
+
onChange: (oklch: string) => void;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Три слайдера L/C/H для пиксельной подстройки primary. После выбора
|
|
7
|
+
* пресета сразу видно текущие значения и можно сместить hue/lightness.
|
|
8
|
+
*/
|
|
9
|
+
export declare const OklchSliders: (props: IProps) => import("solid-js").JSX.Element;
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ITheme } from '../types';
|
|
2
|
+
interface IProps {
|
|
3
|
+
theme: ITheme;
|
|
4
|
+
onChange: (patch: Partial<ITheme>) => void;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Левая колонка редактора. shadcn-стиль: заголовок страницы наверху,
|
|
8
|
+
* секции снизу разделены тонкой границей, sticky-footer с export-кнопкой.
|
|
9
|
+
*/
|
|
10
|
+
export declare const Panel: (props: IProps) => import("solid-js").JSX.Element;
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
interface IProps {
|
|
2
|
+
current: string;
|
|
3
|
+
onPick: (oklch: string) => void;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Сетка пресет-цветов. Activeное состояние — синий ring + лёгкая шкала.
|
|
7
|
+
* Сами «капельки» — кружок с заливкой `var(--swatch)`, чтобы не зависеть
|
|
8
|
+
* от темы.
|
|
9
|
+
*/
|
|
10
|
+
export declare const PresetPicker: (props: IProps) => import("solid-js").JSX.Element;
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Component, JSX } from 'solid-js';
|
|
2
|
+
interface IProps {
|
|
3
|
+
icon: Component<{
|
|
4
|
+
size?: number;
|
|
5
|
+
}>;
|
|
6
|
+
title: string;
|
|
7
|
+
description?: string;
|
|
8
|
+
children: JSX.Element;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Один блок настроек: иконка + заголовок + подпись + контент. Используется
|
|
12
|
+
* в Panel для группировки контролов — чтобы не было «свалки слайдеров».
|
|
13
|
+
*/
|
|
14
|
+
export declare const Section: (props: IProps) => JSX.Element;
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
interface IProps {
|
|
2
|
+
value: number;
|
|
3
|
+
min: number;
|
|
4
|
+
max: number;
|
|
5
|
+
step: number;
|
|
6
|
+
onChange: (v: number) => void;
|
|
7
|
+
/** Сколько знаков после точки отображать справа. */
|
|
8
|
+
precision?: number;
|
|
9
|
+
/** Единица после числа в подписи (`rem`, `px`...). */
|
|
10
|
+
unit?: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Тёмный slider в стиле shadcn — толстый track, primary-fill, белый thumb.
|
|
14
|
+
* Считается через `<input type=range>` чтобы не возиться с pointer-обработкой
|
|
15
|
+
* самим — а кастомные стили накатываем CSS-классами.
|
|
16
|
+
*/
|
|
17
|
+
export declare const Slider: (props: IProps) => import("solid-js").JSX.Element;
|
|
18
|
+
export {};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { IFontOption, IPresetColor, ITheme } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Цветовые пресеты primary. Значения подсмотрены у shadcn (OKLCH) и
|
|
4
|
+
* дают узнаваемые «бренд-настроения». Один OKLCH применяется и в light,
|
|
5
|
+
* и в dark — shadcn делает так же, тонкая разница компенсируется
|
|
6
|
+
* остальными токенами темы.
|
|
7
|
+
*/
|
|
8
|
+
export declare const COLOR_PRESETS: IPresetColor[];
|
|
9
|
+
export declare const FONT_OPTIONS: IFontOption[];
|
|
10
|
+
export declare const DEFAULT_THEME: ITheme;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Превью-сетка. 12-колоночный grid в стиле shadcn'овской «showcase» страницы:
|
|
3
|
+
* Auth (левая колонка, 5/12), правая часть — metrics + pricing + buttons.
|
|
4
|
+
*
|
|
5
|
+
* Все sample-компоненты пишут только в semantic-токены (`bg-card`,
|
|
6
|
+
* `text-foreground`, `bg-primary`, ...), поэтому редактирование темы
|
|
7
|
+
* прозрачно меняет всё разом.
|
|
8
|
+
*/
|
|
9
|
+
export declare const Preview: () => import("solid-js").JSX.Element;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const SampleMetrics: () => import("solid-js").JSX.Element;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const SamplePricing: () => import("solid-js").JSX.Element;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export type ThemeMode = 'light' | 'dark';
|
|
2
|
+
/**
|
|
3
|
+
* Один прокручиваемый «дизайн» — то, что меняется в редакторе. Покрывает
|
|
4
|
+
* shadcn-набор токенов + наши `spacing-base`/`text-base-size`.
|
|
5
|
+
*
|
|
6
|
+
* Намеренно flat: проще apply'ить в `style.setProperty` без обхода вложений.
|
|
7
|
+
*/
|
|
8
|
+
export interface ITheme {
|
|
9
|
+
mode: ThemeMode;
|
|
10
|
+
/** Primary акцент. OKLCH-строка вида `'oklch(0.65 0.18 250)'`. */
|
|
11
|
+
primary: string;
|
|
12
|
+
/** Border-radius в rem. Применяется к `--radius`; sm/md/lg деривированы. */
|
|
13
|
+
radius: number;
|
|
14
|
+
/** Базовый отступ в rem. `--spacing-base`. */
|
|
15
|
+
spacingBase: number;
|
|
16
|
+
/** Базовый размер шрифта в rem. `--text-base-size`. */
|
|
17
|
+
fontBaseSize: number;
|
|
18
|
+
/** font-family. Применяется к scope-элементу. */
|
|
19
|
+
fontFamily: string;
|
|
20
|
+
}
|
|
21
|
+
export interface IPresetColor {
|
|
22
|
+
id: string;
|
|
23
|
+
label: string;
|
|
24
|
+
/** OKLCH primary для обоих режимов. shadcn держит одинаковый — мы тоже. */
|
|
25
|
+
primary: string;
|
|
26
|
+
}
|
|
27
|
+
export interface IFontOption {
|
|
28
|
+
id: string;
|
|
29
|
+
label: string;
|
|
30
|
+
stack: string;
|
|
31
|
+
}
|