elbe-ui 1.0.8 → 2.0.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.
Files changed (141) hide show
  1. package/dist/elbe.css +150 -562
  2. package/dist/elbe.css.map +1 -1
  3. package/dist/index.d.ts +188 -46
  4. package/dist/index.js +8 -6
  5. package/dist/ui/app/app.d.ts +12 -0
  6. package/dist/ui/{components/layout/app_base.js → app/app.js} +24 -31
  7. package/dist/ui/app/app_ctxt.d.ts +35 -0
  8. package/dist/ui/app/app_ctxt.js +10 -0
  9. package/dist/ui/components/badge.d.ts +3 -3
  10. package/dist/ui/components/badge.js +16 -5
  11. package/dist/ui/components/banner.d.ts +3 -3
  12. package/dist/ui/components/banner.js +1 -1
  13. package/dist/ui/components/base/box.d.ts +82 -35
  14. package/dist/ui/components/base/box.js +56 -8
  15. package/dist/ui/components/base/card.d.ts +11 -12
  16. package/dist/ui/components/base/card.js +36 -19
  17. package/dist/ui/components/base/padded.d.ts +2 -4
  18. package/dist/ui/components/base/state_builder.d.ts +9 -0
  19. package/dist/ui/components/base/state_builder.js +33 -0
  20. package/dist/ui/components/button/button.d.ts +8 -6
  21. package/dist/ui/components/button/button.js +27 -16
  22. package/dist/ui/components/button/choose_button.d.ts +5 -3
  23. package/dist/ui/components/button/choose_button.js +9 -6
  24. package/dist/ui/components/button/icon_button.d.ts +6 -5
  25. package/dist/ui/components/button/icon_button.js +33 -23
  26. package/dist/ui/components/button/toggle_button.d.ts +5 -5
  27. package/dist/ui/components/button/toggle_button.js +13 -7
  28. package/dist/ui/components/dialog/dialog.d.ts +13 -0
  29. package/dist/ui/components/dialog/dialog.js +69 -0
  30. package/dist/ui/components/dialog/dialog_ctx.d.ts +34 -0
  31. package/dist/ui/components/dialog/dialog_ctx.js +44 -0
  32. package/dist/ui/components/dialog/dialogs/_alert.d.ts +7 -0
  33. package/dist/ui/components/dialog/dialogs/_alert.js +9 -0
  34. package/dist/ui/components/dialog/dialogs/_confirm.d.ts +9 -0
  35. package/dist/ui/components/dialog/dialogs/_confirm.js +21 -0
  36. package/dist/ui/components/error_view.js +3 -3
  37. package/dist/ui/components/footer.js +7 -7
  38. package/dist/ui/components/input/_labeled_input.d.ts +21 -0
  39. package/dist/ui/components/input/_labeled_input.js +21 -0
  40. package/dist/ui/components/input/checkbox.d.ts +4 -2
  41. package/dist/ui/components/input/checkbox.js +16 -8
  42. package/dist/ui/components/input/range.d.ts +5 -3
  43. package/dist/ui/components/input/range.js +20 -13
  44. package/dist/ui/components/input/select.d.ts +4 -3
  45. package/dist/ui/components/input/select.js +13 -40
  46. package/dist/ui/components/input/switch.d.ts +4 -2
  47. package/dist/ui/components/input/switch.js +30 -40
  48. package/dist/ui/components/input/text/input_field.d.ts +14 -19
  49. package/dist/ui/components/input/text/input_field.js +63 -61
  50. package/dist/ui/components/input/text/single_line.d.ts +11 -9
  51. package/dist/ui/components/input/text/single_line.js +15 -21
  52. package/dist/ui/components/layout/flex.d.ts +7 -3
  53. package/dist/ui/components/layout/flex.js +15 -12
  54. package/dist/ui/components/layout/header.d.ts +2 -2
  55. package/dist/ui/components/layout/header.js +25 -18
  56. package/dist/ui/components/layout/menu.js +74 -49
  57. package/dist/ui/components/layout/scroll.d.ts +1 -0
  58. package/dist/ui/components/layout/scroll.js +3 -1
  59. package/dist/ui/components/layout/toolbar.js +9 -6
  60. package/dist/ui/components/link.d.ts +4 -2
  61. package/dist/ui/components/link.js +24 -11
  62. package/dist/ui/components/progress_bar.d.ts +2 -2
  63. package/dist/ui/components/progress_bar.js +12 -9
  64. package/dist/ui/components/spinner.d.ts +2 -7
  65. package/dist/ui/components/spinner.js +15 -16
  66. package/dist/ui/components/text.d.ts +5 -6
  67. package/dist/ui/components/text.js +34 -21
  68. package/dist/ui/components/tooltip.d.ts +5 -0
  69. package/dist/ui/components/tooltip.js +48 -0
  70. package/dist/ui/theme/subthemes/_theme_geometry.d.ts +9 -0
  71. package/dist/ui/theme/subthemes/_theme_geometry.js +22 -0
  72. package/dist/ui/theme/subthemes/_theme_menu.d.ts +9 -0
  73. package/dist/ui/theme/subthemes/_theme_menu.js +12 -0
  74. package/dist/ui/theme/subthemes/_theme_motion.d.ts +9 -0
  75. package/dist/ui/theme/subthemes/_theme_motion.js +13 -0
  76. package/dist/ui/theme/subthemes/_theme_toast.d.ts +8 -0
  77. package/dist/ui/theme/subthemes/_theme_toast.js +11 -0
  78. package/dist/ui/theme/subthemes/_theme_type.d.ts +49 -0
  79. package/dist/ui/theme/subthemes/_theme_type.js +73 -0
  80. package/dist/ui/theme/subthemes/color/_seed.d.ts +2 -0
  81. package/dist/ui/theme/subthemes/color/_seed.js +105 -0
  82. package/dist/ui/theme/subthemes/color/_theme_color.d.ts +865 -0
  83. package/dist/ui/theme/subthemes/color/_theme_color.js +83 -0
  84. package/dist/ui/theme/subthemes/color/colors/_color_contrast.d.ts +284 -0
  85. package/dist/ui/theme/subthemes/color/colors/_color_contrast.js +17 -0
  86. package/dist/ui/theme/subthemes/color/colors/_color_kind.d.ts +242 -0
  87. package/dist/ui/theme/subthemes/color/colors/_color_kind.js +45 -0
  88. package/dist/ui/theme/subthemes/color/colors/_color_layer.d.ts +226 -0
  89. package/dist/ui/theme/subthemes/color/colors/_color_layer.js +95 -0
  90. package/dist/ui/theme/subthemes/color/colors/_color_manner.d.ts +280 -0
  91. package/dist/ui/theme/subthemes/color/colors/_color_manner.js +17 -0
  92. package/dist/ui/theme/subthemes/color/colors/_color_mode.d.ts +269 -0
  93. package/dist/ui/theme/subthemes/color/colors/_color_mode.js +16 -0
  94. package/dist/ui/theme/subthemes/color/colors/_color_rgba.d.ts +166 -0
  95. package/dist/ui/theme/subthemes/color/colors/_color_rgba.js +86 -0
  96. package/dist/ui/theme/subthemes/color/colors/_color_scheme.d.ts +256 -0
  97. package/dist/ui/theme/subthemes/color/colors/_color_scheme.js +17 -0
  98. package/dist/ui/theme/subthemes/color/colors/_color_state.d.ts +252 -0
  99. package/dist/ui/theme/subthemes/color/colors/_color_state.js +49 -0
  100. package/dist/ui/theme/subthemes/color/colors/_colordef.d.ts +22 -0
  101. package/dist/ui/theme/subthemes/color/colors/_colordef.js +34 -0
  102. package/dist/ui/theme/subthemes/color/colors/colors.d.ts +511 -0
  103. package/dist/ui/theme/subthemes/color/colors/colors.js +24 -0
  104. package/dist/ui/theme/theme.d.ts +984 -30
  105. package/dist/ui/theme/theme.js +14 -82
  106. package/dist/ui/theme/theme_context.d.ts +15 -17
  107. package/dist/ui/theme/theme_context.js +79 -18
  108. package/dist/ui/util/_util.d.ts +1 -0
  109. package/dist/ui/util/_util.js +3 -0
  110. package/dist/ui/util/error_view.js +3 -3
  111. package/dist/ui/util/merge_deep.d.ts +1 -0
  112. package/dist/ui/util/merge_deep.js +18 -0
  113. package/dist/ui/util/root.d.ts +17 -0
  114. package/dist/ui/util/root.js +23 -0
  115. package/dist/ui/util/toast/_toast.d.ts +5 -0
  116. package/dist/ui/util/toast/_toast.js +7 -0
  117. package/dist/ui/util/toast/toast_ctx.d.ts +28 -0
  118. package/dist/ui/util/toast/toast_ctx.js +62 -0
  119. package/dist/ui/util/toast/toast_legacy.d.ts +5 -0
  120. package/dist/ui/util/{toast.js → toast/toast_legacy.js} +4 -4
  121. package/dist/ui/util/util.d.ts +8 -0
  122. package/dist/ui/util/util.js +54 -1
  123. package/package.json +10 -8
  124. package/dist/ui/components/dialog.d.ts +0 -10
  125. package/dist/ui/components/dialog.js +0 -35
  126. package/dist/ui/components/layout/app_base.d.ts +0 -15
  127. package/dist/ui/components/layout/ctx_app_base.d.ts +0 -19
  128. package/dist/ui/components/layout/ctx_app_base.js +0 -12
  129. package/dist/ui/theme/color_theme.d.ts +0 -2
  130. package/dist/ui/theme/color_theme.js +0 -92
  131. package/dist/ui/theme/colors.d.ts +0 -133
  132. package/dist/ui/theme/colors.js +0 -309
  133. package/dist/ui/theme/geometry_theme.d.ts +0 -16
  134. package/dist/ui/theme/geometry_theme.js +0 -28
  135. package/dist/ui/theme/seed.d.ts +0 -53
  136. package/dist/ui/theme/seed.js +0 -4
  137. package/dist/ui/theme/type_theme.d.ts +0 -38
  138. package/dist/ui/theme/type_theme.js +0 -73
  139. package/dist/ui/util/confirm_dialog.d.ts +0 -10
  140. package/dist/ui/util/confirm_dialog.js +0 -46
  141. package/dist/ui/util/toast.d.ts +0 -5
@@ -1,19 +0,0 @@
1
- import { ElbeChild, int } from "../../util/types";
2
- import { HeaderLogos } from "./header";
3
- export interface _AppBaseState {
4
- menuOpen: boolean;
5
- icons: HeaderLogos;
6
- globalActions: ElbeChild[];
7
- router: {
8
- go: (path: string, replace?: int | "all") => void;
9
- goBack: (steps?: number) => void;
10
- history: string[];
11
- location: string;
12
- };
13
- }
14
- export interface _AppBaseControl extends _AppBaseState {
15
- setMenuOpen: (open: boolean) => void;
16
- }
17
- export declare const AppBaseContext: import("react").Context<_AppBaseControl | null>;
18
- export declare function useAppBase(): _AppBaseControl;
19
- export declare function maybeAppBase(): _AppBaseControl | null;
@@ -1,12 +0,0 @@
1
- import { createContext, useContext } from "react";
2
- export const AppBaseContext = createContext(null);
3
- export function useAppBase() {
4
- const ctx = useContext(AppBaseContext);
5
- if (ctx)
6
- return ctx;
7
- throw new Error("useAppBase must be used within an AppBase. try using maybeAppBase()");
8
- }
9
- export function maybeAppBase() {
10
- var _a;
11
- return (_a = useContext(AppBaseContext)) !== null && _a !== void 0 ? _a : null;
12
- }
@@ -1,2 +0,0 @@
1
- import { ColorThemeSeed, PartialColorThemeSeed } from "./seed";
2
- export declare function colorThemePreset(merge?: Partial<PartialColorThemeSeed>): ColorThemeSeed;
@@ -1,92 +0,0 @@
1
- import { colors, LayerColor, } from "./colors";
2
- import { lColor } from "./seed";
3
- export function colorThemePreset(merge
4
- //highVis: boolean = false
5
- ) {
6
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x;
7
- const seed = merge !== null && merge !== void 0 ? merge : {};
8
- return {
9
- base: (_a = seed.base) !== null && _a !== void 0 ? _a : LayerColor.fromBack(colors.white),
10
- accent: (_b = seed.accent) !== null && _b !== void 0 ? _b : LayerColor.fromBack(colors.blueAccent),
11
- info: (_c = seed.info) !== null && _c !== void 0 ? _c : LayerColor.fromBack(colors.blue),
12
- success: (_d = seed.success) !== null && _d !== void 0 ? _d : LayerColor.fromBack(colors.green),
13
- warning: (_e = seed.warning) !== null && _e !== void 0 ? _e : LayerColor.fromBack(colors.yellow),
14
- error: (_f = seed.error) !== null && _f !== void 0 ? _f : LayerColor.fromBack(colors.red),
15
- contrast: {
16
- highvis: (_h = (_g = seed.contrast) === null || _g === void 0 ? void 0 : _g.highvis) !== null && _h !== void 0 ? _h : (({ seed }) => (Object.assign(Object.assign({}, seed), { accent: LayerColor.fromBack(colors.black) }))),
17
- normal: (_k = (_j = seed.contrast) === null || _j === void 0 ? void 0 : _j.normal) !== null && _k !== void 0 ? _k : (({ seed }) => seed),
18
- },
19
- mode: {
20
- light: (_m = (_l = seed.mode) === null || _l === void 0 ? void 0 : _l.light) !== null && _m !== void 0 ? _m : (({ base }) => base),
21
- dark: (_p = (_o = seed.mode) === null || _o === void 0 ? void 0 : _o.dark) !== null && _p !== void 0 ? _p : (({ base }) => base.mirrorBrightness()),
22
- },
23
- scheme: {
24
- primary: (_r = (_q = seed.scheme) === null || _q === void 0 ? void 0 : _q.primary) !== null && _r !== void 0 ? _r : _makePrimary,
25
- secondary: (p) => {
26
- var _a, _b, _c, _d;
27
- const highVis = p.path.includes("highvis");
28
- return (highVis
29
- ? (_b = (_a = seed.scheme) === null || _a === void 0 ? void 0 : _a.primary) !== null && _b !== void 0 ? _b : _makePrimary
30
- : (_d = (_c = seed.scheme) === null || _c === void 0 ? void 0 : _c.secondary) !== null && _d !== void 0 ? _d : _makeSecondary)(p);
31
- },
32
- inverse: (_t = (_s = seed.scheme) === null || _s === void 0 ? void 0 : _s.inverse) !== null && _t !== void 0 ? _t : _makeInverse,
33
- },
34
- style: {
35
- accent: _styleSel,
36
- info: _styleSel,
37
- success: _styleSel,
38
- warning: _styleSel,
39
- error: _styleSel,
40
- },
41
- variant: {
42
- major: (_v = (_u = seed.variant) === null || _u === void 0 ? void 0 : _u.major) !== null && _v !== void 0 ? _v : _makeMajor,
43
- minor: (p) => {
44
- var _a, _b;
45
- if ((_a = seed.variant) === null || _a === void 0 ? void 0 : _a.minor)
46
- return (_b = seed.variant) === null || _b === void 0 ? void 0 : _b.minor(p);
47
- const highVis = p.path.includes("highvis");
48
- return highVis ? _makeMajor(p) : _makeMinor(p);
49
- },
50
- flat: (_x = (_w = seed.variant) === null || _w === void 0 ? void 0 : _w.flat) !== null && _x !== void 0 ? _x : _makeFlat,
51
- },
52
- };
53
- }
54
- const _styleSel = ({ base, style }) => {
55
- const bL = base.luminance;
56
- if (bL === 1)
57
- return style;
58
- //if (bL === 0) return s.mirrorBrightness();
59
- if (style.luminance == 0)
60
- return style.mirrorBrightness();
61
- return style.inter(LayerColor.fromBack(bL > 0.5 ? colors.black : colors.white), 0.1);
62
- };
63
- const _makePrimary = (p) => p.base;
64
- const _makeSecondary = ({ base, seed }) => new LayerColor(base.back
65
- .inter(lColor(seed.accent).back, base.back.luminance < 0.3 ? 0.2 : 0.1)
66
- .desaturated(0.5), base.front, base.border);
67
- const _makeInverse = ({ base }) => base.mirrorBrightness();
68
- const _makeMajor = ({ style, path }) => {
69
- return LayerColor.fromBack(style.back, { border: style.back });
70
- };
71
- const _makeMinor = ({ base, style }) => {
72
- const b = base.back;
73
- const backIn = b.mirrorBrightness();
74
- const major = style.back;
75
- const minor = style.back.inter(b, 0.8);
76
- const minorFront = minor.hasWCAGContrast(major) ? major : null;
77
- return new LayerColor(style.back.withAlpha(0.25), minorFront !== null && minorFront !== void 0 ? minorFront : major.inter(backIn, 0.6), minorFront !== null && minorFront !== void 0 ? minorFront : major.inter(backIn, 0.3));
78
- };
79
- const _makeFlat = ({ path, style, base }) => {
80
- const highVis = path.includes("highvis");
81
- const front = !style
82
- ? base.front
83
- : base.back.hasWCAGContrast(style === null || style === void 0 ? void 0 : style.back)
84
- ? style === null || style === void 0 ? void 0 : style.back
85
- : style === null || style === void 0 ? void 0 : style.back.inter(base.front, 0.6);
86
- const isDark = base.back.luminance < 0.3;
87
- const border = !highVis && !style
88
- ? base.front.inter(base.back, isDark ? 0.75 : 0.9)
89
- : base.front;
90
- return new LayerColor(base.back, //.withAlpha(0),
91
- front, highVis ? border : null, border);
92
- };
@@ -1,133 +0,0 @@
1
- import { ColorThemeSeed, PartialColorThemeSeed, ThemeColors } from "./seed";
2
- export type ElbeColorContrasts = "normal" | "highvis";
3
- export type ElbeColorModes = "light" | "dark";
4
- export type ElbeColorSchemes = "primary" | "secondary" | "inverse";
5
- export type ElbeAlertKinds = "success" | "warning" | "error" | "info";
6
- export type ElbeColorKinds = ElbeAlertKinds | "plain" | "accent";
7
- export type ElbeColorManners = "major" | "minor" | "flat" | "plain";
8
- export declare const cContrasts: ElbeColorContrasts[];
9
- export declare const cModes: ElbeColorModes[];
10
- export declare const cSchemes: ElbeColorSchemes[];
11
- export declare const cKinds: ElbeColorKinds[];
12
- export declare const cManners: ElbeColorManners[];
13
- export declare const cStates: string[];
14
- export declare const cLayers: string[];
15
- type _SeedSelInput = {
16
- path: string[];
17
- seed: ColorThemeSeed;
18
- base: LayerColor;
19
- };
20
- export type SeedSelector = (p: _SeedSelInput) => LayerColor;
21
- export type SeedModifier = (p: _SeedSelInput) => ColorThemeSeed;
22
- export type SeedFlatSelector = (p: _SeedSelInput & {
23
- style?: LayerColor;
24
- }) => LayerColor;
25
- export type SeedStyleSelector = (p: _SeedSelInput & {
26
- style: LayerColor;
27
- }) => LayerColor;
28
- export declare class RGBAColor {
29
- r: number;
30
- g: number;
31
- b: number;
32
- a: number;
33
- constructor(r: number, g: number, b: number, a: number);
34
- asCss(): string;
35
- get isDark(): boolean;
36
- get luminance(): number;
37
- get hex(): string;
38
- static fromHex(hex: string | null): RGBAColor;
39
- desaturated(f?: number): RGBAColor;
40
- withAlpha(a: number): RGBAColor;
41
- inter(other: RGBAColor, factor: number): RGBAColor;
42
- mirrorBrightness(factor?: number): RGBAColor;
43
- get values(): [number, number, number, number];
44
- hasWCAGContrast(color: RGBAColor): boolean;
45
- contrastRatio(color: RGBAColor): number;
46
- }
47
- export declare const colors: {
48
- transparent: RGBAColor;
49
- white: RGBAColor;
50
- black: RGBAColor;
51
- blueAccent: RGBAColor;
52
- blue: RGBAColor;
53
- green: RGBAColor;
54
- yellow: RGBAColor;
55
- red: RGBAColor;
56
- };
57
- export declare class LayerColor extends RGBAColor {
58
- back: RGBAColor;
59
- border?: (RGBAColor | null) | undefined;
60
- borderContext?: (RGBAColor | null) | undefined;
61
- front: RGBAColor;
62
- constructor(back: RGBAColor, front: RGBAColor | null, border?: (RGBAColor | null) | undefined, borderContext?: (RGBAColor | null) | undefined);
63
- asCss(): string;
64
- inter(other: LayerColor, factor: number): LayerColor;
65
- mirrorBrightness(factor?: number): LayerColor;
66
- desaturated(): LayerColor;
67
- static fromHex(back: string, front?: string | null, border?: string | null): LayerColor;
68
- withBorder(border: RGBAColor): LayerColor;
69
- static fromBack(back: RGBAColor, c?: {
70
- front?: RGBAColor;
71
- border?: RGBAColor;
72
- }): LayerColor;
73
- contextCss(): string;
74
- }
75
- export declare class StateColor extends LayerColor {
76
- neutral: LayerColor;
77
- hover: LayerColor;
78
- active: LayerColor;
79
- disabled: LayerColor;
80
- constructor(neutral: LayerColor, hover: LayerColor, active: LayerColor, disabled: LayerColor);
81
- asCss(): string;
82
- static generate(p: string[], _: ColorThemeSeed, context: LayerColor, style: LayerColor, fromFront?: boolean): StateColor;
83
- }
84
- export declare class MannerColor extends StateColor {
85
- major: StateColor | null;
86
- minor: StateColor | null;
87
- flat: StateColor;
88
- constructor(major: StateColor | null, minor: StateColor | null, flat: StateColor);
89
- asCss(fallback?: MannerColor): string;
90
- raisedCss(): string;
91
- static generate(path: string[], seed: ColorThemeSeed, base: LayerColor, style?: LayerColor): MannerColor;
92
- }
93
- export declare class KindColor extends MannerColor {
94
- plain: MannerColor;
95
- accent: MannerColor;
96
- info: MannerColor;
97
- success: MannerColor;
98
- warning: MannerColor;
99
- error: MannerColor;
100
- constructor(plain: MannerColor, accent: MannerColor, info: MannerColor, success: MannerColor, warning: MannerColor, error: MannerColor);
101
- asCss(): string;
102
- static generate(path: string[], seed: ColorThemeSeed, base: LayerColor): KindColor;
103
- }
104
- export declare class SchemeColor extends KindColor {
105
- primary: KindColor;
106
- secondary: KindColor;
107
- inverse: KindColor;
108
- constructor(primary: KindColor, secondary: KindColor, inverse: KindColor);
109
- asCss(): string;
110
- static generate(path: string[], seed: ColorThemeSeed, base: LayerColor): SchemeColor;
111
- }
112
- export declare class ModeColor extends SchemeColor {
113
- light: SchemeColor;
114
- dark: SchemeColor;
115
- constructor(light: SchemeColor, dark: SchemeColor);
116
- asCss(): string;
117
- static generate(path: string[], seed: ColorThemeSeed): ModeColor;
118
- }
119
- export declare class ContrastColor extends ModeColor {
120
- normal: ModeColor;
121
- highvis: ModeColor;
122
- constructor(normal: ModeColor, highvis: ModeColor);
123
- asCss(): string;
124
- static generate(path: string[], seed: ColorThemeSeed): ContrastColor;
125
- }
126
- export declare class ColorTheme {
127
- colors: ThemeColors;
128
- color: ContrastColor;
129
- constructor(colors: ThemeColors, color: ContrastColor);
130
- asCss(): string;
131
- static generate(seed?: Partial<PartialColorThemeSeed>): ColorTheme;
132
- }
133
- export {};
@@ -1,309 +0,0 @@
1
- import { hslToRgb, rgbToHsl } from "colors-convert";
2
- import { clamp } from "../util/util";
3
- import { colorThemePreset } from "./color_theme";
4
- import { lColor, } from "./seed";
5
- export const cContrasts = ["normal", "highvis"];
6
- export const cModes = ["light", "dark"];
7
- export const cSchemes = ["primary", "secondary", "inverse"];
8
- export const cKinds = [
9
- "plain",
10
- "accent",
11
- "info",
12
- "success",
13
- "warning",
14
- "error",
15
- ];
16
- export const cManners = ["major", "minor", "flat", "plain"];
17
- export const cStates = ["neutral", "hover", "active", "disabled"];
18
- export const cLayers = ["back", "front", "border"];
19
- export class RGBAColor {
20
- constructor(r, g, b, a) {
21
- this.r = r;
22
- this.g = g;
23
- this.b = b;
24
- this.a = a;
25
- }
26
- asCss() {
27
- return `rgba(${this.r}, ${this.g}, ${this.b}, ${this.a})`;
28
- }
29
- get isDark() {
30
- return this.luminance < 0.5;
31
- }
32
- get luminance() {
33
- const [r, g, b] = [this.r, this.g, this.b].map((v) => {
34
- v /= 255;
35
- return v <= 0.03928 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);
36
- });
37
- return r * 0.2126 + g * 0.7152 + b * 0.0722;
38
- }
39
- get hex() {
40
- const c = [this.r, this.g, this.b].map((v) => Math.round(v).toString(16).padStart(2, "0"));
41
- const a = Math.round(this.a * 255)
42
- .toString(16)
43
- .padStart(2, "0");
44
- return `#${c.join("")}${a}`;
45
- }
46
- static fromHex(hex) {
47
- if (!hex)
48
- return new RGBAColor(0, 0, 0, 0);
49
- const c = hex.replace("#", "").padEnd(6, "0").padEnd(8, "f").toLowerCase();
50
- return new RGBAColor(parseInt(c.substring(0, 2), 16), parseInt(c.substring(2, 4), 16), parseInt(c.substring(4, 6), 16), parseInt(c.substring(6, 8), 16) / 255);
51
- }
52
- desaturated(f = 1) {
53
- const avg = (this.r + this.g + this.b) / 3;
54
- return new RGBAColor(this.r + (avg - this.r) * f, this.g + (avg - this.g) * f, this.b + (avg - this.b) * f, this.a);
55
- }
56
- withAlpha(a) {
57
- return new RGBAColor(this.r, this.g, this.b, a);
58
- }
59
- inter(other, factor) {
60
- return new RGBAColor(this.r + (other.r - this.r) * factor, this.g + (other.g - this.g) * factor, this.b + (other.b - this.b) * factor, this.a + (other.a - this.a) * factor);
61
- }
62
- mirrorBrightness(factor = 1) {
63
- const hsl = rgbToHsl({ r: this.r, g: this.g, b: this.b });
64
- const newL = (50 - hsl.l) * (factor * 2 - 1) + 50;
65
- const rgb = hslToRgb(Object.assign(Object.assign({}, hsl), { l: clamp(newL, 0, 100), s: clamp(hsl.s, 0, 100) }));
66
- return new RGBAColor(rgb.r, rgb.g, rgb.b, this.a);
67
- }
68
- get values() {
69
- return [this.r, this.g, this.b, this.a];
70
- }
71
- hasWCAGContrast(color) {
72
- return this.contrastRatio(color) >= 3;
73
- }
74
- contrastRatio(color) {
75
- const l1 = this.luminance;
76
- const l2 = color.luminance;
77
- return (Math.max(l1, l2) + 0.05) / (Math.min(l1, l2) + 0.05);
78
- }
79
- }
80
- export const colors = {
81
- transparent: new RGBAColor(0, 0, 0, 0),
82
- white: new RGBAColor(255, 255, 255, 1),
83
- black: new RGBAColor(0, 0, 0, 1),
84
- blueAccent: new RGBAColor(60, 119, 246, 1),
85
- blue: new RGBAColor(32, 89, 153, 1),
86
- green: new RGBAColor(35, 144, 78, 1),
87
- yellow: new RGBAColor(240, 221, 21, 1),
88
- red: new RGBAColor(243, 67, 67, 1),
89
- };
90
- export class LayerColor extends RGBAColor {
91
- constructor(back, front, border, borderContext) {
92
- super(back.r, back.g, back.b, back.a);
93
- this.back = back;
94
- this.border = border;
95
- this.borderContext = borderContext;
96
- this.front = front !== null && front !== void 0 ? front : (back.isDark ? colors.white : colors.black);
97
- }
98
- asCss() {
99
- var _a, _b;
100
- return (`background-color: ${this.back.asCss()};\n` +
101
- `color: ${this.front.asCss()};\n` +
102
- `border-color: ${(_b = (_a = this.border) === null || _a === void 0 ? void 0 : _a.asCss()) !== null && _b !== void 0 ? _b : "transparent"};\n` +
103
- //`border-color: ${this.border?.asCss() ?? "transparent"};\n` +
104
- this.contextCss());
105
- }
106
- inter(other, factor) {
107
- var _a, _b, _c, _d;
108
- return new LayerColor(this.back.inter(other.back, factor), this.front.inter(other.front, factor), (_a = this.border) === null || _a === void 0 ? void 0 : _a.inter((_b = other.border) !== null && _b !== void 0 ? _b : colors.transparent, factor), (_c = this.borderContext) === null || _c === void 0 ? void 0 : _c.inter((_d = other.borderContext) !== null && _d !== void 0 ? _d : colors.transparent, factor));
109
- }
110
- mirrorBrightness(factor) {
111
- var _a, _b;
112
- return new LayerColor(this.back.mirrorBrightness(factor), this.front.mirrorBrightness(factor), (_a = this.border) === null || _a === void 0 ? void 0 : _a.mirrorBrightness(factor), (_b = this.borderContext) === null || _b === void 0 ? void 0 : _b.mirrorBrightness(factor));
113
- }
114
- desaturated() {
115
- var _a, _b;
116
- return new LayerColor(this.back.desaturated(), this.front.desaturated(), (_a = this.border) === null || _a === void 0 ? void 0 : _a.desaturated(), (_b = this.borderContext) === null || _b === void 0 ? void 0 : _b.desaturated());
117
- }
118
- static fromHex(back, front, border) {
119
- if (front === undefined && border === undefined) {
120
- return LayerColor.fromBack(RGBAColor.fromHex(back));
121
- }
122
- return new LayerColor(RGBAColor.fromHex(back), RGBAColor.fromHex(front !== null && front !== void 0 ? front : null), RGBAColor.fromHex(border !== null && border !== void 0 ? border : null));
123
- }
124
- withBorder(border) {
125
- return new LayerColor(this.back, this.front, border);
126
- }
127
- static fromBack(back, c) {
128
- var _a, _b;
129
- const front = back.isDark ? colors.white : colors.black;
130
- return new LayerColor(back, (_a = c === null || c === void 0 ? void 0 : c.front) !== null && _a !== void 0 ? _a : front, (_b = c === null || c === void 0 ? void 0 : c.border) !== null && _b !== void 0 ? _b : front);
131
- }
132
- contextCss() {
133
- var _a, _b, _c;
134
- return (`--c-context-back: ${this.back.asCss()};\n` +
135
- `--c-context-front: ${this.front.asCss()};` +
136
- `--c-context-border: ${(_c = (_b = ((_a = this.borderContext) !== null && _a !== void 0 ? _a : this.border)) === null || _b === void 0 ? void 0 : _b.asCss()) !== null && _c !== void 0 ? _c : "transparent"};`);
137
- }
138
- }
139
- export class StateColor extends LayerColor {
140
- constructor(neutral, hover, active, disabled) {
141
- super(neutral.back, neutral.front, neutral.border);
142
- this.neutral = neutral;
143
- this.hover = hover;
144
- this.active = active;
145
- this.disabled = disabled;
146
- }
147
- asCss() {
148
- const els = [
149
- ".action",
150
- ":is(button)",
151
- ":is(a)",
152
- ":is(input)",
153
- ":is(select)",
154
- ];
155
- const disS = "&.disabled, & :disabled, &:disabled";
156
- const hoverS = els.map((e) => `&${e}:hover:not(${disS})`).join(", ");
157
- const activeS = els.map((e) => `&${e}:active:not(${disS})`).join(", ");
158
- return (`${this.neutral.asCss()} \n` +
159
- `${hoverS} { ${this.hover.asCss()} }\n` +
160
- `${activeS} { ${this.active.asCss()} }\n` +
161
- `${disS} { ${this.disabled.asCss()} }`);
162
- }
163
- static generate(p, _, context, style, fromFront) {
164
- function _make(factor) {
165
- const front = style.front;
166
- return new LayerColor((fromFront
167
- ? context.back.inter(front, factor)
168
- : style.back.inter(context.back.mirrorBrightness(), factor)).withAlpha(Math.max(style.back.a, 0.2)), front, style.border, style.borderContext);
169
- }
170
- return new StateColor(style, _make(0.075), _make(0.25), style.desaturated());
171
- }
172
- }
173
- export class MannerColor extends StateColor {
174
- constructor(major, minor, flat) {
175
- const m = major !== null && major !== void 0 ? major : flat;
176
- super(m.neutral, m.hover, m.active, m.disabled);
177
- this.major = major;
178
- this.minor = minor;
179
- this.flat = flat;
180
- }
181
- asCss(fallback) {
182
- var _a, _b;
183
- const maj = (_a = this.major) !== null && _a !== void 0 ? _a : fallback === null || fallback === void 0 ? void 0 : fallback.major;
184
- const min = (_b = this.minor) !== null && _b !== void 0 ? _b : fallback === null || fallback === void 0 ? void 0 : fallback.minor;
185
- return (`${this.flat.asCss()}\n` +
186
- (maj ? `&.major { ${maj.asCss()} } \n` : "") +
187
- (min ? `&.minor { ${min.asCss()} } \n` : "") +
188
- `&.flat { ${this.flat.asCss()} }\n`);
189
- }
190
- raisedCss() {
191
- const maj = this.major;
192
- const min = this.minor;
193
- return ((maj ? ` .major { ${maj.asCss()} } \n` : "") +
194
- (min ? ` .minor { ${min.asCss()} } \n` : ""));
195
- }
196
- static generate(path, seed, base, style) {
197
- return new MannerColor(style
198
- ? StateColor.generate([...path, "major"], seed, base, seed.variant.major({ path, seed, base, style }))
199
- : null, style
200
- ? StateColor.generate([...path, "minor"], seed, base, seed.variant.minor({ path, seed, base, style }))
201
- : null, StateColor.generate([...path, "flat"], seed, base, seed.variant.flat({ path, seed, base, style }), true));
202
- /*
203
- if (!style) {
204
- return new MannerColor(null, null, StateColor.generate(s, c, c, true));
205
- }
206
- return new MannerColor(
207
- StateColor.generate(s, c, s.variant.major(s, c, style)),
208
- StateColor.generate(s, c, s.variant.minor(s, c, style)),
209
- StateColor.generate(s, c, s.variant.flat(s, c, style), true)
210
- );
211
- */
212
- }
213
- }
214
- export class KindColor extends MannerColor {
215
- constructor(plain, accent, info, success, warning, error) {
216
- super(plain.major, plain.minor, plain.flat);
217
- this.plain = plain;
218
- this.accent = accent;
219
- this.info = info;
220
- this.success = success;
221
- this.warning = warning;
222
- this.error = error;
223
- }
224
- asCss() {
225
- return (`${this.plain.asCss()}\n` +
226
- `${this.accent.raisedCss()}\n` +
227
- `.plain {${this.plain.asCss()}}\n` +
228
- `.accent { ${this.accent.asCss()} }\n` +
229
- `.info { ${this.info.asCss()} }\n` +
230
- `.success { ${this.success.asCss()} }\n` +
231
- `.warning { ${this.warning.asCss()} }\n` +
232
- `.error { ${this.error.asCss()} }`);
233
- }
234
- static generate(path, seed, base) {
235
- return new KindColor(MannerColor.generate([...path, "plain"], seed, base), MannerColor.generate([...path, "accent"], seed, base, seed.style.accent({ path, seed, base, style: lColor(seed.accent) })), MannerColor.generate([...path, "info"], seed, base, seed.style.info({ path, seed, base, style: lColor(seed.info) })), MannerColor.generate([...path, "success"], seed, base, seed.style.success({ path, seed, base, style: lColor(seed.success) })), MannerColor.generate([...path, "warning"], seed, base, seed.style.warning({ path, seed, base, style: lColor(seed.warning) })), MannerColor.generate([...path, "error"], seed, base, seed.style.error({ path, seed, base, style: lColor(seed.error) })));
236
- }
237
- }
238
- export class SchemeColor extends KindColor {
239
- constructor(primary, secondary, inverse) {
240
- super(primary.plain, primary.accent, primary.info, primary.success, primary.warning, primary.error);
241
- this.primary = primary;
242
- this.secondary = secondary;
243
- this.inverse = inverse;
244
- }
245
- asCss() {
246
- return (`${this.primary.asCss()}\n` +
247
- `.primary { ${this.primary.asCss()}} \n` +
248
- `.secondary { ${this.secondary.asCss()} }\n` +
249
- `.inverse { ${this.inverse.asCss()} }`);
250
- }
251
- static generate(path, seed, base) {
252
- const m = seed.scheme;
253
- return new SchemeColor(KindColor.generate([...path, "primary"], seed, m.primary({ path, seed, base })), KindColor.generate([...path, "secondary"], seed, m.secondary({ path, seed, base })), KindColor.generate([...path, "inverse"], seed, m.inverse({ path, seed, base })));
254
- }
255
- }
256
- export class ModeColor extends SchemeColor {
257
- constructor(light, dark) {
258
- super(light.primary, light.secondary, light.inverse);
259
- this.light = light;
260
- this.dark = dark;
261
- }
262
- asCss() {
263
- return `&{ ${this.light.asCss()}}` + `&.dark { ${this.dark.asCss()}}`;
264
- }
265
- static generate(path, seed) {
266
- return new ModeColor(SchemeColor.generate(path, seed, lColor(seed.base)), SchemeColor.generate([...path, "dark"], seed, seed.mode.dark({ path, seed, base: lColor(seed.base) })));
267
- }
268
- }
269
- export class ContrastColor extends ModeColor {
270
- constructor(normal, highvis) {
271
- super(normal.light, normal.dark);
272
- this.normal = normal;
273
- this.highvis = highvis;
274
- }
275
- asCss() {
276
- return (`& { ${this.normal.asCss()}}` + `&.highvis { ${this.highvis.asCss()}}`);
277
- }
278
- static generate(path, seed) {
279
- const p = { path, base: lColor(seed.base), seed };
280
- return new ContrastColor(ModeColor.generate(path, seed.contrast.normal(p)), ModeColor.generate([...path, "highvis"], seed.contrast.highvis(p)));
281
- }
282
- }
283
- export class ColorTheme {
284
- constructor(colors, color) {
285
- this.colors = colors;
286
- this.color = color;
287
- }
288
- asCss() {
289
- return `
290
- --c-accent: ${this.colors.accent.back.asCss()};
291
- --c-info: ${this.colors.info.back.asCss()};
292
- --c-success: ${this.colors.success.back.asCss()};
293
- --c-warning: ${this.colors.warning.back.asCss()};
294
- --c-error: ${this.colors.error.back.asCss()};
295
- ${this.color.asCss()}`;
296
- }
297
- static generate(seed) {
298
- const s = colorThemePreset(seed);
299
- return new ColorTheme({
300
- base: lColor(s.base),
301
- accent: lColor(s.accent),
302
- info: lColor(s.info),
303
- success: lColor(s.success),
304
- warning: lColor(s.warning),
305
- error: lColor(s.error),
306
- }, ContrastColor.generate([], s));
307
- }
308
- }
309
- //Bun.write("./example.css", ColorTheme.generate().asCss());
@@ -1,16 +0,0 @@
1
- export interface GeometryThemeSeed {
2
- size: number;
3
- radius: number;
4
- padding: number;
5
- borderWidth: number;
6
- }
7
- export declare class GeometryTheme {
8
- readonly size: number;
9
- readonly radius: number;
10
- readonly padding: number;
11
- readonly borderWidth: number;
12
- constructor(size: number, radius: number, padding: number, borderWidth: number);
13
- asCss(): string;
14
- static generate(seed?: Partial<GeometryTheme>): GeometryTheme;
15
- }
16
- export declare function geometryThemePreset(merge?: Partial<GeometryThemeSeed>): GeometryThemeSeed;
@@ -1,28 +0,0 @@
1
- export class GeometryTheme {
2
- constructor(size, radius, padding, borderWidth) {
3
- this.size = size;
4
- this.radius = radius;
5
- this.padding = padding;
6
- this.borderWidth = borderWidth;
7
- }
8
- asCss() {
9
- return (`--g-size: ${this.size}px;` +
10
- `--g-radius: ${this.radius}rem;` +
11
- `--g-padding: ${this.padding}rem;` +
12
- `--g-border-width: ${this.borderWidth}rem;`);
13
- }
14
- static generate(seed) {
15
- const s = geometryThemePreset(seed);
16
- return new GeometryTheme(s.size, s.radius, s.padding, s.borderWidth);
17
- }
18
- }
19
- export function geometryThemePreset(merge) {
20
- var _a, _b, _c, _d;
21
- const seed = merge !== null && merge !== void 0 ? merge : {};
22
- return {
23
- size: (_a = seed.size) !== null && _a !== void 0 ? _a : 16,
24
- radius: (_b = seed.radius) !== null && _b !== void 0 ? _b : 0.75,
25
- padding: (_c = seed.padding) !== null && _c !== void 0 ? _c : 1,
26
- borderWidth: (_d = seed.borderWidth) !== null && _d !== void 0 ? _d : 0.125,
27
- };
28
- }
@@ -1,53 +0,0 @@
1
- import { LayerColor, SeedFlatSelector, SeedModifier, SeedSelector, SeedStyleSelector } from "../..";
2
- export type HexColor = `#${string}`;
3
- export type ColorSeedColors = _Colors<LayerColor | HexColor>;
4
- export type ThemeColors = _Colors<LayerColor>;
5
- type _Colors<T> = {
6
- base: T;
7
- accent: T;
8
- info: T;
9
- success: T;
10
- warning: T;
11
- error: T;
12
- };
13
- type _ContrastSeed = {
14
- highvis: SeedModifier;
15
- normal: SeedModifier;
16
- };
17
- type _ModeSeed = {
18
- light: SeedSelector;
19
- dark: SeedSelector;
20
- };
21
- type _SchemeSeed = {
22
- primary: SeedSelector;
23
- secondary: SeedSelector;
24
- inverse: SeedSelector;
25
- };
26
- type _StyleSeed = {
27
- accent: SeedStyleSelector;
28
- info: SeedStyleSelector;
29
- success: SeedStyleSelector;
30
- warning: SeedStyleSelector;
31
- error: SeedStyleSelector;
32
- };
33
- type _VariantSeed = {
34
- major: SeedStyleSelector;
35
- minor: SeedStyleSelector;
36
- flat: SeedFlatSelector;
37
- };
38
- export type ColorThemeSeed = ColorSeedColors & {
39
- contrast: _ContrastSeed;
40
- mode: _ModeSeed;
41
- scheme: _SchemeSeed;
42
- style: _StyleSeed;
43
- variant: _VariantSeed;
44
- };
45
- export type PartialColorThemeSeed = Partial<ColorSeedColors> & {
46
- contrast?: Partial<_ContrastSeed>;
47
- mode?: Partial<_ModeSeed>;
48
- scheme?: Partial<_SchemeSeed>;
49
- style?: Partial<_StyleSeed>;
50
- variant?: Partial<_VariantSeed>;
51
- };
52
- export declare function lColor(color: LayerColor | HexColor): LayerColor;
53
- export {};
@@ -1,4 +0,0 @@
1
- import { LayerColor, } from "../..";
2
- export function lColor(color) {
3
- return typeof color === "string" ? LayerColor.fromHex(color) : color;
4
- }