@fieldia/widgets 0.11.0 → 0.13.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/package.json +2 -2
- package/src/index.d.mts +2 -0
- package/src/index.d.ts +2 -0
- package/src/index.js +6 -1
- package/src/index.js.map +1 -1
- package/src/index.mjs +2 -0
- package/src/index.mjs.map +1 -1
- package/src/lib/badge.d.mts +8 -0
- package/src/lib/badge.d.ts +8 -0
- package/src/lib/badge.js +37 -0
- package/src/lib/badge.js.map +1 -0
- package/src/lib/badge.mjs +33 -0
- package/src/lib/badge.mjs.map +1 -0
- package/src/lib/calendar.d.mts +3 -1
- package/src/lib/calendar.d.ts +3 -1
- package/src/lib/calendar.js +17 -1
- package/src/lib/calendar.js.map +1 -1
- package/src/lib/calendar.mjs +17 -1
- package/src/lib/calendar.mjs.map +1 -1
- package/src/lib/cards.js +12 -4
- package/src/lib/cards.js.map +1 -1
- package/src/lib/cards.mjs +13 -5
- package/src/lib/cards.mjs.map +1 -1
- package/src/lib/choice-images.js +1 -1
- package/src/lib/choice-images.js.map +1 -1
- package/src/lib/choice-images.mjs +1 -1
- package/src/lib/choice-images.mjs.map +1 -1
- package/src/lib/choice-tags.js +6 -4
- package/src/lib/choice-tags.js.map +1 -1
- package/src/lib/choice-tags.mjs +6 -4
- package/src/lib/choice-tags.mjs.map +1 -1
- package/src/lib/colour.d.mts +11 -0
- package/src/lib/colour.d.ts +11 -0
- package/src/lib/colour.js +114 -0
- package/src/lib/colour.js.map +1 -0
- package/src/lib/colour.mjs +110 -0
- package/src/lib/colour.mjs.map +1 -0
- package/src/lib/copy.d.mts +8 -0
- package/src/lib/copy.d.ts +8 -0
- package/src/lib/copy.js +58 -0
- package/src/lib/copy.js.map +1 -0
- package/src/lib/copy.mjs +54 -0
- package/src/lib/copy.mjs.map +1 -0
- package/src/lib/date-range.d.mts +2 -0
- package/src/lib/date-range.d.ts +2 -0
- package/src/lib/date-range.js +220 -0
- package/src/lib/date-range.js.map +1 -0
- package/src/lib/date-range.mjs +216 -0
- package/src/lib/date-range.mjs.map +1 -0
- package/src/lib/display.d.mts +25 -1
- package/src/lib/display.d.ts +25 -1
- package/src/lib/display.js +42 -2
- package/src/lib/display.js.map +1 -1
- package/src/lib/display.mjs +39 -2
- package/src/lib/display.mjs.map +1 -1
- package/src/lib/distribution.d.mts +13 -0
- package/src/lib/distribution.d.ts +13 -0
- package/src/lib/distribution.js +159 -0
- package/src/lib/distribution.js.map +1 -0
- package/src/lib/distribution.mjs +152 -0
- package/src/lib/distribution.mjs.map +1 -0
- package/src/lib/duration.d.mts +18 -0
- package/src/lib/duration.d.ts +18 -0
- package/src/lib/duration.js +137 -0
- package/src/lib/duration.js.map +1 -0
- package/src/lib/duration.mjs +128 -0
- package/src/lib/duration.mjs.map +1 -0
- package/src/lib/embed.d.mts +3 -0
- package/src/lib/embed.d.ts +3 -0
- package/src/lib/embed.js +97 -0
- package/src/lib/embed.js.map +1 -0
- package/src/lib/embed.mjs +92 -0
- package/src/lib/embed.mjs.map +1 -0
- package/src/lib/extras.js +6 -0
- package/src/lib/extras.js.map +1 -1
- package/src/lib/extras.mjs +6 -0
- package/src/lib/extras.mjs.map +1 -1
- package/src/lib/files.d.mts +11 -0
- package/src/lib/files.d.ts +11 -0
- package/src/lib/files.js +19 -0
- package/src/lib/files.js.map +1 -1
- package/src/lib/files.mjs +18 -0
- package/src/lib/files.mjs.map +1 -1
- package/src/lib/float.d.mts +14 -0
- package/src/lib/float.d.ts +14 -0
- package/src/lib/float.js +91 -0
- package/src/lib/float.js.map +1 -0
- package/src/lib/float.mjs +88 -0
- package/src/lib/float.mjs.map +1 -0
- package/src/lib/kind-parts.d.mts +4 -3
- package/src/lib/kind-parts.d.ts +4 -3
- package/src/lib/kind-parts.js +5 -3
- package/src/lib/kind-parts.js.map +1 -1
- package/src/lib/kind-parts.mjs +5 -3
- package/src/lib/kind-parts.mjs.map +1 -1
- package/src/lib/labels.d.mts +39 -0
- package/src/lib/labels.d.ts +39 -0
- package/src/lib/labels.js +29 -0
- package/src/lib/labels.js.map +1 -1
- package/src/lib/labels.mjs +29 -0
- package/src/lib/labels.mjs.map +1 -1
- package/src/lib/layout-styles.d.mts +1 -1
- package/src/lib/layout-styles.d.ts +1 -1
- package/src/lib/layout-styles.js +12 -5
- package/src/lib/layout-styles.js.map +1 -1
- package/src/lib/layout-styles.mjs +12 -5
- package/src/lib/layout-styles.mjs.map +1 -1
- package/src/lib/lines.d.mts +12 -2
- package/src/lib/lines.d.ts +12 -2
- package/src/lib/lines.js +372 -25
- package/src/lib/lines.js.map +1 -1
- package/src/lib/lines.mjs +371 -26
- package/src/lib/lines.mjs.map +1 -1
- package/src/lib/links-table.d.mts +11 -0
- package/src/lib/links-table.d.ts +11 -0
- package/src/lib/links-table.js +116 -0
- package/src/lib/links-table.js.map +1 -0
- package/src/lib/links-table.mjs +112 -0
- package/src/lib/links-table.mjs.map +1 -0
- package/src/lib/locales/ar.js +29 -0
- package/src/lib/locales/ar.js.map +1 -1
- package/src/lib/locales/ar.mjs +29 -0
- package/src/lib/locales/ar.mjs.map +1 -1
- package/src/lib/locales/de.js +29 -0
- package/src/lib/locales/de.js.map +1 -1
- package/src/lib/locales/de.mjs +29 -0
- package/src/lib/locales/de.mjs.map +1 -1
- package/src/lib/locales/fr.js +29 -0
- package/src/lib/locales/fr.js.map +1 -1
- package/src/lib/locales/fr.mjs +29 -0
- package/src/lib/locales/fr.mjs.map +1 -1
- package/src/lib/numbers.d.mts +5 -1
- package/src/lib/numbers.d.ts +5 -1
- package/src/lib/numbers.js +15 -2
- package/src/lib/numbers.js.map +1 -1
- package/src/lib/numbers.mjs +13 -2
- package/src/lib/numbers.mjs.map +1 -1
- package/src/lib/payments.d.mts +2 -0
- package/src/lib/payments.d.ts +2 -0
- package/src/lib/payments.js +94 -0
- package/src/lib/payments.js.map +1 -0
- package/src/lib/payments.mjs +90 -0
- package/src/lib/payments.mjs.map +1 -0
- package/src/lib/popup.d.mts +11 -0
- package/src/lib/popup.d.ts +11 -0
- package/src/lib/popup.js +48 -0
- package/src/lib/popup.js.map +1 -0
- package/src/lib/popup.mjs +45 -0
- package/src/lib/popup.mjs.map +1 -0
- package/src/lib/priority.d.mts +10 -0
- package/src/lib/priority.d.ts +10 -0
- package/src/lib/priority.js +59 -0
- package/src/lib/priority.js.map +1 -0
- package/src/lib/priority.mjs +55 -0
- package/src/lib/priority.mjs.map +1 -0
- package/src/lib/progress.js +3 -0
- package/src/lib/progress.js.map +1 -1
- package/src/lib/progress.mjs +3 -0
- package/src/lib/progress.mjs.map +1 -1
- package/src/lib/properties.js +100 -9
- package/src/lib/properties.js.map +1 -1
- package/src/lib/properties.mjs +100 -9
- package/src/lib/properties.mjs.map +1 -1
- package/src/lib/read-text.d.mts +25 -0
- package/src/lib/read-text.d.ts +25 -0
- package/src/lib/read-text.js +102 -0
- package/src/lib/read-text.js.map +1 -0
- package/src/lib/read-text.mjs +98 -0
- package/src/lib/read-text.mjs.map +1 -0
- package/src/lib/relations.d.mts +12 -0
- package/src/lib/relations.d.ts +12 -0
- package/src/lib/relations.js +110 -10
- package/src/lib/relations.js.map +1 -1
- package/src/lib/relations.mjs +108 -10
- package/src/lib/relations.mjs.map +1 -1
- package/src/lib/slider.js +1 -1
- package/src/lib/slider.js.map +1 -1
- package/src/lib/slider.mjs +1 -1
- package/src/lib/slider.mjs.map +1 -1
- package/src/lib/state-dot.d.mts +2 -0
- package/src/lib/state-dot.d.ts +2 -0
- package/src/lib/state-dot.js +107 -0
- package/src/lib/state-dot.js.map +1 -0
- package/src/lib/state-dot.mjs +103 -0
- package/src/lib/state-dot.mjs.map +1 -0
- package/src/lib/statusbar.js +151 -14
- package/src/lib/statusbar.js.map +1 -1
- package/src/lib/statusbar.mjs +151 -14
- package/src/lib/statusbar.mjs.map +1 -1
- package/src/lib/styles-business.d.mts +8 -0
- package/src/lib/styles-business.d.ts +8 -0
- package/src/lib/styles-business.js +120 -0
- package/src/lib/styles-business.js.map +1 -0
- package/src/lib/styles-business.mjs +117 -0
- package/src/lib/styles-business.mjs.map +1 -0
- package/src/lib/styles-inputs.d.mts +1 -1
- package/src/lib/styles-inputs.d.ts +1 -1
- package/src/lib/styles-inputs.js +2 -0
- package/src/lib/styles-inputs.js.map +1 -1
- package/src/lib/styles-inputs.mjs +2 -0
- package/src/lib/styles-inputs.mjs.map +1 -1
- package/src/lib/styles-kinds.d.mts +1 -1
- package/src/lib/styles-kinds.d.ts +1 -1
- package/src/lib/styles-kinds.js +2 -2
- package/src/lib/styles-kinds.mjs +2 -2
- package/src/lib/styles-sheet.d.mts +6 -0
- package/src/lib/styles-sheet.d.ts +6 -0
- package/src/lib/styles-sheet.js +139 -0
- package/src/lib/styles-sheet.js.map +1 -0
- package/src/lib/styles-sheet.mjs +136 -0
- package/src/lib/styles-sheet.mjs.map +1 -0
- package/src/lib/styles.js +223 -27
- package/src/lib/styles.js.map +1 -1
- package/src/lib/styles.mjs +223 -27
- package/src/lib/styles.mjs.map +1 -1
- package/src/lib/tax-totals.d.mts +2 -0
- package/src/lib/tax-totals.d.ts +2 -0
- package/src/lib/tax-totals.js +92 -0
- package/src/lib/tax-totals.js.map +1 -0
- package/src/lib/tax-totals.mjs +88 -0
- package/src/lib/tax-totals.mjs.map +1 -0
- package/src/lib/themes.d.mts +29 -0
- package/src/lib/themes.d.ts +29 -0
- package/src/lib/themes.js +180 -0
- package/src/lib/themes.js.map +1 -0
- package/src/lib/themes.mjs +177 -0
- package/src/lib/themes.mjs.map +1 -0
- package/src/lib/timer.d.mts +4 -0
- package/src/lib/timer.d.ts +4 -0
- package/src/lib/timer.js +62 -0
- package/src/lib/timer.js.map +1 -0
- package/src/lib/timer.mjs +57 -0
- package/src/lib/timer.mjs.map +1 -0
- package/src/lib/widgets.d.mts +18 -3
- package/src/lib/widgets.d.ts +18 -3
- package/src/lib/widgets.js +89 -10
- package/src/lib/widgets.js.map +1 -1
- package/src/lib/widgets.mjs +90 -11
- package/src/lib/widgets.mjs.map +1 -1
- package/src/lib/yes-no.js +1 -1
- package/src/lib/yes-no.js.map +1 -1
- package/src/lib/yes-no.mjs +1 -1
- package/src/lib/yes-no.mjs.map +1 -1
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { maker, wordsFor } from './kind-parts.mjs';
|
|
2
|
+
import { formatMoney, formatNumber, normalizeNumber } from './numbers.mjs';
|
|
3
|
+
const num = (value) => (typeof value === 'number' ? value : Number(value) || 0);
|
|
4
|
+
/** Flectra's tax_totals, or the plainer value, as subtotals with their groups and the total. */
|
|
5
|
+
function read(value, untaxedWords) {
|
|
6
|
+
if (!value || typeof value !== 'object' || Array.isArray(value))
|
|
7
|
+
return null;
|
|
8
|
+
const v = value;
|
|
9
|
+
if (Array.isArray(v['subtotals']) || v['groups_by_subtotal']) {
|
|
10
|
+
const by = (v['groups_by_subtotal'] ?? {});
|
|
11
|
+
const listed = v['subtotals'] ?? [{ name: untaxedWords, amount: num(v['amount_untaxed']) }];
|
|
12
|
+
const order = v['subtotals_order'] ?? listed.map((s) => s.name);
|
|
13
|
+
return {
|
|
14
|
+
subtotals: order.map((name) => ({
|
|
15
|
+
name,
|
|
16
|
+
amount: num(listed.find((s) => s.name === name)?.amount ?? v['amount_untaxed']),
|
|
17
|
+
groups: (by[name] ?? []).map((g, i) => ({ name: String(g['tax_group_name'] ?? ''), amount: num(g['tax_group_amount']), at: [name, i] })),
|
|
18
|
+
})),
|
|
19
|
+
total: num(v['amount_total']),
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
const groups = (Array.isArray(v['groups']) ? v['groups'] : []).map((g, i) => ({ name: String(g['name'] ?? ''), amount: num(g['amount']), at: i }));
|
|
23
|
+
return { subtotals: [{ name: untaxedWords, amount: num(v['untaxed']), groups }], total: num(v['total']) };
|
|
24
|
+
}
|
|
25
|
+
export const taxTotalsWidget = ({ form, name, node, id, document, labels, locale = 'en' }) => {
|
|
26
|
+
const make = maker(document);
|
|
27
|
+
const words = wordsFor(labels, locale);
|
|
28
|
+
const options = node.options ?? {};
|
|
29
|
+
const currencyField = typeof options['currencyField'] === 'string' ? options['currencyField'] : null;
|
|
30
|
+
const fixed = typeof options['currency'] === 'string' ? options['currency'] : null;
|
|
31
|
+
const body = make('tbody');
|
|
32
|
+
const element = make('table', { id, class: 'fd-tax-totals' }, body);
|
|
33
|
+
let drawn = '';
|
|
34
|
+
/** The value with one group's amount typed in, and the total following. */
|
|
35
|
+
function typed(group, amount) {
|
|
36
|
+
const value = JSON.parse(JSON.stringify(form.getState().values[name]));
|
|
37
|
+
const was = group.amount;
|
|
38
|
+
if (Array.isArray(group.at)) {
|
|
39
|
+
const [subtotal, i] = group.at;
|
|
40
|
+
(value['groups_by_subtotal'][subtotal][i])['tax_group_amount'] = amount;
|
|
41
|
+
value['amount_total'] = Math.round((num(value['amount_total']) + amount - was) * 100) / 100;
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
value['groups'][group.at]['amount'] = amount;
|
|
45
|
+
value['total'] = Math.round((num(value['total']) + amount - was) * 100) / 100;
|
|
46
|
+
}
|
|
47
|
+
form.setValue(name, value);
|
|
48
|
+
}
|
|
49
|
+
return {
|
|
50
|
+
element,
|
|
51
|
+
focus: () => element.querySelector('input')?.focus(),
|
|
52
|
+
update(state) {
|
|
53
|
+
const totals = read(state.value, words.untaxed);
|
|
54
|
+
const holder = currencyField ? state.values[currencyField] : null;
|
|
55
|
+
const code = fixed ?? (holder && typeof holder === 'object' && 'label' in holder ? holder.label : typeof holder === 'string' ? holder : '');
|
|
56
|
+
const money = (n) => (/^[A-Z]{3}$/.test(code) ? formatMoney(n, code, 2, locale) : formatNumber(n, 2, locale));
|
|
57
|
+
const editable = options['editable'] === true && !state.readonly;
|
|
58
|
+
const key = JSON.stringify([totals, code, editable]);
|
|
59
|
+
// Drawn again only when what it shows changes, so a box being typed in stays.
|
|
60
|
+
if (key === drawn || element.contains(document.activeElement))
|
|
61
|
+
return;
|
|
62
|
+
drawn = key;
|
|
63
|
+
const row = (label, amount, className) => make('tr', { class: className }, make('th', { scope: 'row' }, label), make('td', {}, amount));
|
|
64
|
+
const rows = [];
|
|
65
|
+
for (const subtotal of totals?.subtotals ?? []) {
|
|
66
|
+
rows.push(row(subtotal.name, money(subtotal.amount), 'fd-tax-subtotal'));
|
|
67
|
+
for (const group of subtotal.groups) {
|
|
68
|
+
if (!editable) {
|
|
69
|
+
rows.push(row(group.name, money(group.amount), 'fd-tax-group'));
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
const box = make('input', { type: 'text', class: 'fd-input fd-number-input', inputmode: 'decimal', autocomplete: 'off', 'aria-label': group.name });
|
|
73
|
+
box.value = formatNumber(group.amount, 2, locale);
|
|
74
|
+
box.addEventListener('change', () => {
|
|
75
|
+
const text = normalizeNumber(box.value.trim(), locale);
|
|
76
|
+
if (/^-?(\d+\.?\d*|\.\d+)$/.test(text))
|
|
77
|
+
typed(group, Number(text));
|
|
78
|
+
});
|
|
79
|
+
rows.push(row(group.name, box, 'fd-tax-group'));
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
if (totals)
|
|
83
|
+
rows.push(row(words.total, money(totals.total), 'fd-tax-total'));
|
|
84
|
+
body.replaceChildren(...rows);
|
|
85
|
+
},
|
|
86
|
+
};
|
|
87
|
+
};
|
|
88
|
+
//# sourceMappingURL=tax-totals.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tax-totals.mjs","sourceRoot":"","sources":["../../../../../libs/widgets/src/lib/tax-totals.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { Theme } from '@fieldia/core';
|
|
2
|
+
/**
|
|
3
|
+
* (Not a `styles-*.ts`: its rules are written with the selectors they share, so the script bundle's
|
|
4
|
+
* minifier, which takes a static stylesheet, leaves it as it is.)
|
|
5
|
+
*
|
|
6
|
+
* Themes in the style of design systems people know: the form's own tokens,
|
|
7
|
+
* light and dark, over the skin each is drawn on (Odoo's over `underline`,
|
|
8
|
+
* the rest over `outlined`), and a few rules of their own for what tokens
|
|
9
|
+
* cannot say — Material's filled boxes, Apple's pill buttons, Google Forms'
|
|
10
|
+
* question cards. They are looks in those systems' style, not their kits: a
|
|
11
|
+
* theme names its typeface and falls back to the system's when the app has
|
|
12
|
+
* not loaded it. Every colour pair a reader reads is checked against WCAG AA
|
|
13
|
+
* (themes.spec.ts), so a few are a shade darker than the original.
|
|
14
|
+
*/
|
|
15
|
+
/** The tokens a theme sets, by their names without `--fd-`. */
|
|
16
|
+
export type ThemeTokens = Partial<Record<'font' | 'text' | 'muted' | 'page' | 'surface' | 'border' | 'border-strong' | 'accent' | 'accent-text' | 'accent-soft' | 'focus' | 'focus-ring' | 'error' | 'error-soft' | 'success' | 'warning' | 'info' | 'radius' | 'control-radius' | 'control-height' | 'pad-y' | 'pad-x' | 'input-border' | 'label-weight' | 'gap-x' | 'gap-y' | 'fill' | 'edge', string>>;
|
|
17
|
+
export declare const THEME_TOKENS: Record<Theme, {
|
|
18
|
+
light: ThemeTokens;
|
|
19
|
+
dark: ThemeTokens;
|
|
20
|
+
}>;
|
|
21
|
+
/**
|
|
22
|
+
* The themes' tokens: after the skins' (they win over them), before the page's
|
|
23
|
+
* look (whose accent, room, corners and scheme win over them). A theme's dark
|
|
24
|
+
* tokens are more specific than the plain dark scheme's, so they win over it.
|
|
25
|
+
* All in Fieldia's tokens' layer, under any rule of a host's own.
|
|
26
|
+
*/
|
|
27
|
+
export declare const THEME_TOKENS_CSS: string;
|
|
28
|
+
/** What tokens cannot say: each theme's own shapes. After every other rule, so they win at the same weight. */
|
|
29
|
+
export declare const THEME_RULES_CSS: string;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { Theme } from '@fieldia/core';
|
|
2
|
+
/**
|
|
3
|
+
* (Not a `styles-*.ts`: its rules are written with the selectors they share, so the script bundle's
|
|
4
|
+
* minifier, which takes a static stylesheet, leaves it as it is.)
|
|
5
|
+
*
|
|
6
|
+
* Themes in the style of design systems people know: the form's own tokens,
|
|
7
|
+
* light and dark, over the skin each is drawn on (Odoo's over `underline`,
|
|
8
|
+
* the rest over `outlined`), and a few rules of their own for what tokens
|
|
9
|
+
* cannot say — Material's filled boxes, Apple's pill buttons, Google Forms'
|
|
10
|
+
* question cards. They are looks in those systems' style, not their kits: a
|
|
11
|
+
* theme names its typeface and falls back to the system's when the app has
|
|
12
|
+
* not loaded it. Every colour pair a reader reads is checked against WCAG AA
|
|
13
|
+
* (themes.spec.ts), so a few are a shade darker than the original.
|
|
14
|
+
*/
|
|
15
|
+
/** The tokens a theme sets, by their names without `--fd-`. */
|
|
16
|
+
export type ThemeTokens = Partial<Record<'font' | 'text' | 'muted' | 'page' | 'surface' | 'border' | 'border-strong' | 'accent' | 'accent-text' | 'accent-soft' | 'focus' | 'focus-ring' | 'error' | 'error-soft' | 'success' | 'warning' | 'info' | 'radius' | 'control-radius' | 'control-height' | 'pad-y' | 'pad-x' | 'input-border' | 'label-weight' | 'gap-x' | 'gap-y' | 'fill' | 'edge', string>>;
|
|
17
|
+
export declare const THEME_TOKENS: Record<Theme, {
|
|
18
|
+
light: ThemeTokens;
|
|
19
|
+
dark: ThemeTokens;
|
|
20
|
+
}>;
|
|
21
|
+
/**
|
|
22
|
+
* The themes' tokens: after the skins' (they win over them), before the page's
|
|
23
|
+
* look (whose accent, room, corners and scheme win over them). A theme's dark
|
|
24
|
+
* tokens are more specific than the plain dark scheme's, so they win over it.
|
|
25
|
+
* All in Fieldia's tokens' layer, under any rule of a host's own.
|
|
26
|
+
*/
|
|
27
|
+
export declare const THEME_TOKENS_CSS: string;
|
|
28
|
+
/** What tokens cannot say: each theme's own shapes. After every other rule, so they win at the same weight. */
|
|
29
|
+
export declare const THEME_RULES_CSS: string;
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.THEME_RULES_CSS = exports.THEME_TOKENS_CSS = exports.THEME_TOKENS = void 0;
|
|
4
|
+
const SYSTEM = 'system-ui, -apple-system, "Segoe UI", Roboto, "Noto Sans", "Noto Sans Arabic", sans-serif';
|
|
5
|
+
exports.THEME_TOKENS = {
|
|
6
|
+
// Material 3's baseline: a purple primary, filled boxes on a tinted surface, pill buttons.
|
|
7
|
+
material: {
|
|
8
|
+
light: {
|
|
9
|
+
font: `Roboto, ${SYSTEM}`, text: '#1d1b20', muted: '#49454f', page: '#fef7ff', surface: '#ffffff', border: '#79747e', 'border-strong': '#49454f',
|
|
10
|
+
accent: '#6750a4', 'accent-text': '#ffffff', 'accent-soft': '#eaddff', focus: '#6750a4', 'focus-ring': 'none', error: '#b3261e', 'error-soft': '#f9dedc',
|
|
11
|
+
radius: '12px', 'control-radius': '4px', 'control-height': '48px', 'pad-y': '10px', 'pad-x': '16px', 'input-border': '0 0 1px 0', 'label-weight': '500', 'gap-x': '24px', 'gap-y': '20px', fill: '#ece6f0',
|
|
12
|
+
},
|
|
13
|
+
dark: {
|
|
14
|
+
text: '#e6e0e9', muted: '#cac4d0', page: '#141218', surface: '#1d1b20', border: '#938f99', 'border-strong': '#cac4d0',
|
|
15
|
+
accent: '#d0bcff', 'accent-text': '#381e72', 'accent-soft': '#4f378b', focus: '#d0bcff', error: '#f2b8b5', 'error-soft': '#601410', fill: '#36343b', edge: '#938f99',
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
// Fluent 2 for the web: Segoe, a darker bottom edge on boxes, a semibold primary button.
|
|
19
|
+
fluent: {
|
|
20
|
+
light: {
|
|
21
|
+
font: `"Segoe UI Variable Text", "Segoe UI", ${SYSTEM}`, text: '#242424', muted: '#616161', page: '#f5f5f5', surface: '#ffffff', border: '#d1d1d1', 'border-strong': '#616161',
|
|
22
|
+
accent: '#0f6cbd', 'accent-text': '#ffffff', 'accent-soft': '#ebf3fc', focus: '#0f6cbd', 'focus-ring': 'none', error: '#c50f1f', 'error-soft': '#fdf3f4',
|
|
23
|
+
radius: '8px', 'control-radius': '4px', 'control-height': '32px', 'pad-y': '5px', 'pad-x': '10px', 'input-border': '1px', 'label-weight': '400', 'gap-x': '24px', 'gap-y': '16px',
|
|
24
|
+
},
|
|
25
|
+
dark: {
|
|
26
|
+
text: '#ffffff', muted: '#d6d6d6', page: '#1f1f1f', surface: '#292929', border: '#666666', 'border-strong': '#adadad',
|
|
27
|
+
accent: '#479ef5', 'accent-text': '#0a0a0a', 'accent-soft': '#0e4775', focus: '#479ef5', error: '#e37d80', 'error-soft': '#3b1012', edge: '#adadad',
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
// Apple's: grouped white cards on a pale grey, filled boxes without a frame, pill buttons, its blue.
|
|
31
|
+
apple: {
|
|
32
|
+
light: {
|
|
33
|
+
font: `-apple-system, BlinkMacSystemFont, "SF Pro Text", ${SYSTEM}`, text: '#1d1d1f', muted: '#6e6e73', page: '#f2f2f7', surface: '#ffffff', border: '#d1d1d6', 'border-strong': '#8e8e93',
|
|
34
|
+
accent: '#0066cc', 'accent-text': '#ffffff', 'accent-soft': '#e5f0fb', focus: '#0066cc', 'focus-ring': '0 0 0 4px rgba(0, 113, 227, 0.25)', error: '#d70015', 'error-soft': '#ffebec',
|
|
35
|
+
radius: '12px', 'control-radius': '10px', 'control-height': '40px', 'pad-y': '8px', 'pad-x': '12px', 'input-border': '1px', 'label-weight': '500', 'gap-x': '20px', 'gap-y': '16px', fill: '#f2f2f7',
|
|
36
|
+
},
|
|
37
|
+
dark: {
|
|
38
|
+
text: '#f5f5f7', muted: '#a1a1a6', page: '#000000', surface: '#1c1c1e', border: '#38383a', 'border-strong': '#636366',
|
|
39
|
+
accent: '#409cff', 'accent-text': '#000000', 'accent-soft': '#0f2b4d', focus: '#409cff', 'focus-ring': '0 0 0 4px rgba(64, 156, 255, 0.3)', error: '#ff6961', 'error-soft': '#3a1412', fill: '#2c2c2e', edge: '#636366',
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
// Bootstrap 5: its blue, a soft blue ring on focus, six-pixel corners.
|
|
43
|
+
bootstrap: {
|
|
44
|
+
light: {
|
|
45
|
+
font: SYSTEM, text: '#212529', muted: '#5c636a', page: '#f8f9fa', surface: '#ffffff', border: '#dee2e6', 'border-strong': '#adb5bd',
|
|
46
|
+
accent: '#0a58ca', 'accent-text': '#ffffff', 'accent-soft': '#cfe2ff', focus: '#86b7fe', 'focus-ring': '0 0 0 0.25rem rgba(13, 110, 253, 0.25)', error: '#b02a37', 'error-soft': '#f8d7da',
|
|
47
|
+
radius: '6px', 'control-radius': '6px', 'control-height': '38px', 'pad-y': '6px', 'pad-x': '12px', 'input-border': '1px', 'label-weight': '400', 'gap-x': '24px', 'gap-y': '16px',
|
|
48
|
+
},
|
|
49
|
+
dark: {
|
|
50
|
+
text: '#dee2e6', muted: '#adb5bd', page: '#212529', surface: '#2b3035', border: '#495057', 'border-strong': '#6c757d',
|
|
51
|
+
accent: '#6ea8fe', 'accent-text': '#000000', 'accent-soft': '#031633', focus: '#6ea8fe', 'focus-ring': '0 0 0 0.25rem rgba(110, 168, 254, 0.25)', error: '#ea868f', 'error-soft': '#2c0b0e', edge: '#6c757d',
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
// shadcn/ui on zinc: near-black primary, quiet borders, a grey ring, segmented tabs.
|
|
55
|
+
shadcn: {
|
|
56
|
+
light: {
|
|
57
|
+
font: `Geist, Inter, ${SYSTEM}`, text: '#09090b', muted: '#64646c', page: '#fafafa', surface: '#ffffff', border: '#e4e4e7', 'border-strong': '#a1a1aa',
|
|
58
|
+
accent: '#18181b', 'accent-text': '#fafafa', 'accent-soft': '#f4f4f5', focus: '#a1a1aa', 'focus-ring': '0 0 0 3px rgba(161, 161, 170, 0.5)', error: '#dc2626', 'error-soft': '#fef2f2',
|
|
59
|
+
radius: '10px', 'control-radius': '8px', 'control-height': '36px', 'pad-y': '6px', 'pad-x': '12px', 'input-border': '1px', 'label-weight': '500', 'gap-x': '24px', 'gap-y': '16px',
|
|
60
|
+
},
|
|
61
|
+
dark: {
|
|
62
|
+
text: '#fafafa', muted: '#a1a1aa', page: '#09090b', surface: '#18181b', border: '#3f3f46', 'border-strong': '#71717a',
|
|
63
|
+
accent: '#e4e4e7', 'accent-text': '#18181b', 'accent-soft': '#27272a', focus: '#71717a', 'focus-ring': '0 0 0 3px rgba(113, 113, 122, 0.5)', error: '#f87171', 'error-soft': '#450a0a', edge: '#71717a',
|
|
64
|
+
},
|
|
65
|
+
},
|
|
66
|
+
// Ant Design 5: the outlined skin's own tokens, and its dark algorithm.
|
|
67
|
+
ant: {
|
|
68
|
+
light: {
|
|
69
|
+
font: SYSTEM, text: 'rgba(0, 0, 0, 0.88)', muted: 'rgba(0, 0, 0, 0.55)', page: '#f5f5f5', surface: '#ffffff', border: '#d9d9d9', 'border-strong': '#bfbfbf',
|
|
70
|
+
accent: '#1365d9', 'accent-text': '#ffffff', 'accent-soft': '#e6f4ff', focus: '#1365d9', 'focus-ring': '0 0 0 2px rgba(5, 145, 255, 0.12)', error: '#c63c3d', 'error-soft': '#fff2f0',
|
|
71
|
+
radius: '8px', 'control-radius': '6px', 'pad-y': '4px', 'pad-x': '11px', 'input-border': '1px', 'label-weight': '400', 'gap-x': '24px', 'gap-y': '18px',
|
|
72
|
+
},
|
|
73
|
+
dark: {
|
|
74
|
+
text: 'rgba(255, 255, 255, 0.85)', muted: 'rgba(255, 255, 255, 0.6)', page: '#000000', surface: '#141414', border: '#424242', 'border-strong': '#595959',
|
|
75
|
+
accent: '#3c89e8', 'accent-text': '#000000', 'accent-soft': '#111a2c', focus: '#3c89e8', 'focus-ring': '0 0 0 2px rgba(60, 137, 232, 0.2)', error: '#e86e6b', 'error-soft': '#2c1618', edge: '#595959',
|
|
76
|
+
},
|
|
77
|
+
},
|
|
78
|
+
// Odoo 17: labels beside underlined boxes, its plum for buttons and the picked tab.
|
|
79
|
+
odoo: {
|
|
80
|
+
light: {
|
|
81
|
+
font: SYSTEM, text: '#1f2937', muted: '#4b5563', page: '#f9fafb', surface: '#ffffff', border: '#d1d5db', 'border-strong': '#9ca3af',
|
|
82
|
+
accent: '#714b67', 'accent-text': '#ffffff', 'accent-soft': '#f3edf2', focus: '#714b67', 'focus-ring': 'none', error: '#c4161c', 'error-soft': '#fdecec',
|
|
83
|
+
radius: '4px', 'control-radius': '0px', 'pad-y': '3px', 'pad-x': '4px', 'input-border': '0 0 1px 0', 'label-weight': '600', 'gap-x': '32px', 'gap-y': '14px',
|
|
84
|
+
},
|
|
85
|
+
dark: {
|
|
86
|
+
text: '#e5e7eb', muted: '#9ca3af', page: '#111827', surface: '#1f2937', border: '#4b5563', 'border-strong': '#6b7280',
|
|
87
|
+
accent: '#c79fbc', 'accent-text': '#1f1020', 'accent-soft': '#3b2836', focus: '#c79fbc', error: '#f6878b', 'error-soft': '#3a1214', edge: '#6b7280',
|
|
88
|
+
},
|
|
89
|
+
},
|
|
90
|
+
// Google Forms: each question a white card on a tinted page, a purple band over the title, underlined answers.
|
|
91
|
+
'google-forms': {
|
|
92
|
+
light: {
|
|
93
|
+
font: `Roboto, Arial, ${SYSTEM}`, text: '#202124', muted: '#5f6368', page: '#f0ebf8', surface: '#ffffff', border: '#dadce0', 'border-strong': '#80868b',
|
|
94
|
+
accent: '#673ab7', 'accent-text': '#ffffff', 'accent-soft': '#ede7f6', focus: '#673ab7', 'focus-ring': 'none', error: '#d93025', 'error-soft': '#fce8e6',
|
|
95
|
+
radius: '8px', 'control-radius': '0px', 'control-height': '36px', 'pad-y': '6px', 'pad-x': '0px', 'input-border': '0 0 1px 0', 'label-weight': '400', 'gap-x': '24px', 'gap-y': '12px',
|
|
96
|
+
},
|
|
97
|
+
dark: {
|
|
98
|
+
text: '#e8e3ee', muted: '#b8b0c4', page: '#1c1822', surface: '#2a2431', border: '#4a4255', 'border-strong': '#7b7088',
|
|
99
|
+
accent: '#c4abf2', 'accent-text': '#1d1528', 'accent-soft': '#3b2f52', focus: '#c4abf2', error: '#f28b82', 'error-soft': '#3c1714', edge: '#7b7088',
|
|
100
|
+
},
|
|
101
|
+
},
|
|
102
|
+
};
|
|
103
|
+
const block = (tokens) => Object.entries(tokens)
|
|
104
|
+
.map(([name, value]) => `--fd-${name}: ${value};`)
|
|
105
|
+
.join(' ');
|
|
106
|
+
const forms = (theme) => `:is(.fd-form, .fd-form-dialog, .fd-theme)[data-fd-theme="${theme}"]`;
|
|
107
|
+
/** A group drawn as a card on the page's ground, as the outlined skin draws one: on the page, or set as a card. */
|
|
108
|
+
const CARDS = ':is(.fd-sections > .fd-section:not([data-style]), .fd-section[data-style="card"][data-on-page])';
|
|
109
|
+
/**
|
|
110
|
+
* The themes' tokens: after the skins' (they win over them), before the page's
|
|
111
|
+
* look (whose accent, room, corners and scheme win over them). A theme's dark
|
|
112
|
+
* tokens are more specific than the plain dark scheme's, so they win over it.
|
|
113
|
+
* All in Fieldia's tokens' layer, under any rule of a host's own.
|
|
114
|
+
*/
|
|
115
|
+
exports.THEME_TOKENS_CSS = Object.keys(exports.THEME_TOKENS)
|
|
116
|
+
.map((theme) => {
|
|
117
|
+
const { light, dark } = exports.THEME_TOKENS[theme];
|
|
118
|
+
const darkOn = `${forms(theme)}[data-scheme="dark"]`;
|
|
119
|
+
return `${forms(theme)} { ${block(light)} }
|
|
120
|
+
${darkOn} { ${block(dark)} }
|
|
121
|
+
@media (prefers-color-scheme: dark) { ${forms(theme)}[data-scheme="auto"] { ${block(dark)} } }`;
|
|
122
|
+
})
|
|
123
|
+
.join('\n')
|
|
124
|
+
// In Fieldia's tokens' layer (styles.ts), after the skins': a host's own rule sets them over a theme's too.
|
|
125
|
+
.replace(/^/, '@layer fieldia-tokens {\n')
|
|
126
|
+
.concat('\n}');
|
|
127
|
+
/** What tokens cannot say: each theme's own shapes. After every other rule, so they win at the same weight. */
|
|
128
|
+
exports.THEME_RULES_CSS = `
|
|
129
|
+
/* A themed form paints its own ground, as one with a scheme does: Google Forms' lilac, Apple's grey. In a dialog, the dialog is its ground. */
|
|
130
|
+
.fd-form[data-fd-theme] { background: var(--fd-page); color: var(--fd-text); border-radius: var(--fd-radius); }
|
|
131
|
+
.fd-form[data-fd-theme] > .fd-content:not(:has(> .fd-sheet-page)) { padding: 20px; }
|
|
132
|
+
.fd-form-dialog-body > .fd-form[data-fd-theme] { background: none; border-radius: 0; }
|
|
133
|
+
.fd-form-dialog-body > .fd-form[data-fd-theme] > .fd-content:not(:has(> .fd-sheet-page)) { padding: 0; }
|
|
134
|
+
/* Material: boxes filled and underlined, the line thickening on focus; pill buttons; borderless tinted cards. */
|
|
135
|
+
${forms('material')} .fd-input:not([readonly]) { background: var(--fd-fill); border-start-start-radius: var(--fd-control-radius); border-start-end-radius: var(--fd-control-radius); border-end-start-radius: 0; border-end-end-radius: 0; }
|
|
136
|
+
${forms('material')} .fd-input:focus { box-shadow: inset 0 -1px 0 0 var(--fd-focus); }
|
|
137
|
+
${forms('material')} .fd-button { border-radius: 20px; min-height: 40px; padding-inline: 24px; font-weight: 500; letter-spacing: 0.01em; border-color: var(--fd-border); }
|
|
138
|
+
${forms('material')} .fd-tab[aria-selected="true"] { border-block-end-width: 3px; }
|
|
139
|
+
${forms('material')} ${CARDS} { border-color: transparent; background: color-mix(in srgb, var(--fd-accent) 4%, var(--fd-surface)); }
|
|
140
|
+
|
|
141
|
+
/* Fluent: a darker bottom edge under every box, an accent bar on focus; semibold buttons; the picked tab in words, not the accent. */
|
|
142
|
+
${forms('fluent')} .fd-input:not([readonly]) { border-block-end-color: var(--fd-border-strong); }
|
|
143
|
+
${forms('fluent')} .fd-input:focus { box-shadow: inset 0 -2px 0 0 var(--fd-focus); border-block-end-color: var(--fd-focus); }
|
|
144
|
+
${forms('fluent')} .fd-button { font-weight: 600; }
|
|
145
|
+
${forms('fluent')} .fd-tab[aria-selected="true"] { color: var(--fd-text); border-block-end-width: 3px; }
|
|
146
|
+
|
|
147
|
+
/* Apple: boxes filled, no frame until focused; pill buttons; grouped cards with no edge. */
|
|
148
|
+
${forms('apple')} .fd-input:not([readonly]) { background: var(--fd-fill); border-color: transparent; }
|
|
149
|
+
${forms('apple')} .fd-input:not([readonly]):focus { background: var(--fd-surface); border-color: var(--fd-focus); }
|
|
150
|
+
${forms('apple')} .fd-button { border-radius: 980px; padding-inline: 18px; font-weight: 500; }
|
|
151
|
+
${forms('apple')} ${CARDS} { border-color: transparent; }
|
|
152
|
+
|
|
153
|
+
/* Bootstrap: its buttons' weight and padding. */
|
|
154
|
+
${forms('bootstrap')} .fd-button { padding-inline: 12px; }
|
|
155
|
+
|
|
156
|
+
/* shadcn: a hairline shadow under boxes and buttons; the picked tab a raised segment on a grey strip. */
|
|
157
|
+
${forms('shadcn')} :is(.fd-input:not([readonly]), .fd-button:not(.fd-button-link)) { box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); }
|
|
158
|
+
${forms('shadcn')} .fd-input:focus { box-shadow: var(--fd-focus-ring); }
|
|
159
|
+
${forms('shadcn')} .fd-button { font-weight: 500; }
|
|
160
|
+
${forms('shadcn')} .fd-button:hover { color: var(--fd-text); background: var(--fd-accent-soft); border-color: var(--fd-border); }
|
|
161
|
+
${forms('shadcn')} .fd-button-primary:hover { color: var(--fd-accent-text); background: var(--fd-accent); filter: brightness(1.25); }
|
|
162
|
+
${forms('shadcn')} .fd-tablist { gap: 2px; padding: 3px; border: 0; border-radius: var(--fd-radius); background: var(--fd-accent-soft); width: max-content; max-width: 100%; }
|
|
163
|
+
${forms('shadcn')} .fd-tab { border: 0; margin: 0; padding: 5px 12px; border-radius: calc(var(--fd-radius) - 3px); color: var(--fd-muted); }
|
|
164
|
+
${forms('shadcn')} .fd-tab[aria-selected="true"] { color: var(--fd-text); background: var(--fd-surface); box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); font-weight: 500; }
|
|
165
|
+
|
|
166
|
+
/* Odoo: square buttons with small corners. */
|
|
167
|
+
${forms('odoo')} .fd-button { border-radius: 4px; }
|
|
168
|
+
|
|
169
|
+
/* Google Forms: the title a card with a band of the accent along its top; each question its own card; answers underlined. */
|
|
170
|
+
${forms('google-forms')} .fd-page-head { background: var(--fd-surface); border: 1px solid var(--fd-border); border-block-start: 10px solid var(--fd-accent); border-radius: var(--fd-radius); padding: 22px 24px; }
|
|
171
|
+
${forms('google-forms')} .fd-page-title { font-size: 32px; font-weight: 400; line-height: 1.2; }
|
|
172
|
+
${forms('google-forms')} ${CARDS} { background: none; border: 0; padding: 0; }
|
|
173
|
+
${forms('google-forms')} ${CARDS} > .fd-grid > .fd-field:not(.fd-oneline) { background: var(--fd-surface); border: 1px solid var(--fd-border); border-radius: var(--fd-radius); padding: 22px 24px; }
|
|
174
|
+
${forms('google-forms')} ${CARDS} > .fd-grid > .fd-field:focus-within { border-inline-start: 6px solid var(--fd-accent); padding-inline-start: 19px; }
|
|
175
|
+
${forms('google-forms')} .fd-label { font-size: 16px; }
|
|
176
|
+
${forms('google-forms')} .fd-input:not([readonly]) { background: transparent; }
|
|
177
|
+
${forms('google-forms')} .fd-input:focus { box-shadow: inset 0 -1px 0 0 var(--fd-focus); }
|
|
178
|
+
${forms('google-forms')} .fd-button { border-radius: 4px; font-weight: 500; }
|
|
179
|
+
`;
|
|
180
|
+
//# sourceMappingURL=themes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"themes.js","sourceRoot":"","sources":["../../../../../libs/widgets/src/lib/themes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
const SYSTEM = 'system-ui, -apple-system, "Segoe UI", Roboto, "Noto Sans", "Noto Sans Arabic", sans-serif';
|
|
2
|
+
export const THEME_TOKENS = {
|
|
3
|
+
// Material 3's baseline: a purple primary, filled boxes on a tinted surface, pill buttons.
|
|
4
|
+
material: {
|
|
5
|
+
light: {
|
|
6
|
+
font: `Roboto, ${SYSTEM}`, text: '#1d1b20', muted: '#49454f', page: '#fef7ff', surface: '#ffffff', border: '#79747e', 'border-strong': '#49454f',
|
|
7
|
+
accent: '#6750a4', 'accent-text': '#ffffff', 'accent-soft': '#eaddff', focus: '#6750a4', 'focus-ring': 'none', error: '#b3261e', 'error-soft': '#f9dedc',
|
|
8
|
+
radius: '12px', 'control-radius': '4px', 'control-height': '48px', 'pad-y': '10px', 'pad-x': '16px', 'input-border': '0 0 1px 0', 'label-weight': '500', 'gap-x': '24px', 'gap-y': '20px', fill: '#ece6f0',
|
|
9
|
+
},
|
|
10
|
+
dark: {
|
|
11
|
+
text: '#e6e0e9', muted: '#cac4d0', page: '#141218', surface: '#1d1b20', border: '#938f99', 'border-strong': '#cac4d0',
|
|
12
|
+
accent: '#d0bcff', 'accent-text': '#381e72', 'accent-soft': '#4f378b', focus: '#d0bcff', error: '#f2b8b5', 'error-soft': '#601410', fill: '#36343b', edge: '#938f99',
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
// Fluent 2 for the web: Segoe, a darker bottom edge on boxes, a semibold primary button.
|
|
16
|
+
fluent: {
|
|
17
|
+
light: {
|
|
18
|
+
font: `"Segoe UI Variable Text", "Segoe UI", ${SYSTEM}`, text: '#242424', muted: '#616161', page: '#f5f5f5', surface: '#ffffff', border: '#d1d1d1', 'border-strong': '#616161',
|
|
19
|
+
accent: '#0f6cbd', 'accent-text': '#ffffff', 'accent-soft': '#ebf3fc', focus: '#0f6cbd', 'focus-ring': 'none', error: '#c50f1f', 'error-soft': '#fdf3f4',
|
|
20
|
+
radius: '8px', 'control-radius': '4px', 'control-height': '32px', 'pad-y': '5px', 'pad-x': '10px', 'input-border': '1px', 'label-weight': '400', 'gap-x': '24px', 'gap-y': '16px',
|
|
21
|
+
},
|
|
22
|
+
dark: {
|
|
23
|
+
text: '#ffffff', muted: '#d6d6d6', page: '#1f1f1f', surface: '#292929', border: '#666666', 'border-strong': '#adadad',
|
|
24
|
+
accent: '#479ef5', 'accent-text': '#0a0a0a', 'accent-soft': '#0e4775', focus: '#479ef5', error: '#e37d80', 'error-soft': '#3b1012', edge: '#adadad',
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
// Apple's: grouped white cards on a pale grey, filled boxes without a frame, pill buttons, its blue.
|
|
28
|
+
apple: {
|
|
29
|
+
light: {
|
|
30
|
+
font: `-apple-system, BlinkMacSystemFont, "SF Pro Text", ${SYSTEM}`, text: '#1d1d1f', muted: '#6e6e73', page: '#f2f2f7', surface: '#ffffff', border: '#d1d1d6', 'border-strong': '#8e8e93',
|
|
31
|
+
accent: '#0066cc', 'accent-text': '#ffffff', 'accent-soft': '#e5f0fb', focus: '#0066cc', 'focus-ring': '0 0 0 4px rgba(0, 113, 227, 0.25)', error: '#d70015', 'error-soft': '#ffebec',
|
|
32
|
+
radius: '12px', 'control-radius': '10px', 'control-height': '40px', 'pad-y': '8px', 'pad-x': '12px', 'input-border': '1px', 'label-weight': '500', 'gap-x': '20px', 'gap-y': '16px', fill: '#f2f2f7',
|
|
33
|
+
},
|
|
34
|
+
dark: {
|
|
35
|
+
text: '#f5f5f7', muted: '#a1a1a6', page: '#000000', surface: '#1c1c1e', border: '#38383a', 'border-strong': '#636366',
|
|
36
|
+
accent: '#409cff', 'accent-text': '#000000', 'accent-soft': '#0f2b4d', focus: '#409cff', 'focus-ring': '0 0 0 4px rgba(64, 156, 255, 0.3)', error: '#ff6961', 'error-soft': '#3a1412', fill: '#2c2c2e', edge: '#636366',
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
// Bootstrap 5: its blue, a soft blue ring on focus, six-pixel corners.
|
|
40
|
+
bootstrap: {
|
|
41
|
+
light: {
|
|
42
|
+
font: SYSTEM, text: '#212529', muted: '#5c636a', page: '#f8f9fa', surface: '#ffffff', border: '#dee2e6', 'border-strong': '#adb5bd',
|
|
43
|
+
accent: '#0a58ca', 'accent-text': '#ffffff', 'accent-soft': '#cfe2ff', focus: '#86b7fe', 'focus-ring': '0 0 0 0.25rem rgba(13, 110, 253, 0.25)', error: '#b02a37', 'error-soft': '#f8d7da',
|
|
44
|
+
radius: '6px', 'control-radius': '6px', 'control-height': '38px', 'pad-y': '6px', 'pad-x': '12px', 'input-border': '1px', 'label-weight': '400', 'gap-x': '24px', 'gap-y': '16px',
|
|
45
|
+
},
|
|
46
|
+
dark: {
|
|
47
|
+
text: '#dee2e6', muted: '#adb5bd', page: '#212529', surface: '#2b3035', border: '#495057', 'border-strong': '#6c757d',
|
|
48
|
+
accent: '#6ea8fe', 'accent-text': '#000000', 'accent-soft': '#031633', focus: '#6ea8fe', 'focus-ring': '0 0 0 0.25rem rgba(110, 168, 254, 0.25)', error: '#ea868f', 'error-soft': '#2c0b0e', edge: '#6c757d',
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
// shadcn/ui on zinc: near-black primary, quiet borders, a grey ring, segmented tabs.
|
|
52
|
+
shadcn: {
|
|
53
|
+
light: {
|
|
54
|
+
font: `Geist, Inter, ${SYSTEM}`, text: '#09090b', muted: '#64646c', page: '#fafafa', surface: '#ffffff', border: '#e4e4e7', 'border-strong': '#a1a1aa',
|
|
55
|
+
accent: '#18181b', 'accent-text': '#fafafa', 'accent-soft': '#f4f4f5', focus: '#a1a1aa', 'focus-ring': '0 0 0 3px rgba(161, 161, 170, 0.5)', error: '#dc2626', 'error-soft': '#fef2f2',
|
|
56
|
+
radius: '10px', 'control-radius': '8px', 'control-height': '36px', 'pad-y': '6px', 'pad-x': '12px', 'input-border': '1px', 'label-weight': '500', 'gap-x': '24px', 'gap-y': '16px',
|
|
57
|
+
},
|
|
58
|
+
dark: {
|
|
59
|
+
text: '#fafafa', muted: '#a1a1aa', page: '#09090b', surface: '#18181b', border: '#3f3f46', 'border-strong': '#71717a',
|
|
60
|
+
accent: '#e4e4e7', 'accent-text': '#18181b', 'accent-soft': '#27272a', focus: '#71717a', 'focus-ring': '0 0 0 3px rgba(113, 113, 122, 0.5)', error: '#f87171', 'error-soft': '#450a0a', edge: '#71717a',
|
|
61
|
+
},
|
|
62
|
+
},
|
|
63
|
+
// Ant Design 5: the outlined skin's own tokens, and its dark algorithm.
|
|
64
|
+
ant: {
|
|
65
|
+
light: {
|
|
66
|
+
font: SYSTEM, text: 'rgba(0, 0, 0, 0.88)', muted: 'rgba(0, 0, 0, 0.55)', page: '#f5f5f5', surface: '#ffffff', border: '#d9d9d9', 'border-strong': '#bfbfbf',
|
|
67
|
+
accent: '#1365d9', 'accent-text': '#ffffff', 'accent-soft': '#e6f4ff', focus: '#1365d9', 'focus-ring': '0 0 0 2px rgba(5, 145, 255, 0.12)', error: '#c63c3d', 'error-soft': '#fff2f0',
|
|
68
|
+
radius: '8px', 'control-radius': '6px', 'pad-y': '4px', 'pad-x': '11px', 'input-border': '1px', 'label-weight': '400', 'gap-x': '24px', 'gap-y': '18px',
|
|
69
|
+
},
|
|
70
|
+
dark: {
|
|
71
|
+
text: 'rgba(255, 255, 255, 0.85)', muted: 'rgba(255, 255, 255, 0.6)', page: '#000000', surface: '#141414', border: '#424242', 'border-strong': '#595959',
|
|
72
|
+
accent: '#3c89e8', 'accent-text': '#000000', 'accent-soft': '#111a2c', focus: '#3c89e8', 'focus-ring': '0 0 0 2px rgba(60, 137, 232, 0.2)', error: '#e86e6b', 'error-soft': '#2c1618', edge: '#595959',
|
|
73
|
+
},
|
|
74
|
+
},
|
|
75
|
+
// Odoo 17: labels beside underlined boxes, its plum for buttons and the picked tab.
|
|
76
|
+
odoo: {
|
|
77
|
+
light: {
|
|
78
|
+
font: SYSTEM, text: '#1f2937', muted: '#4b5563', page: '#f9fafb', surface: '#ffffff', border: '#d1d5db', 'border-strong': '#9ca3af',
|
|
79
|
+
accent: '#714b67', 'accent-text': '#ffffff', 'accent-soft': '#f3edf2', focus: '#714b67', 'focus-ring': 'none', error: '#c4161c', 'error-soft': '#fdecec',
|
|
80
|
+
radius: '4px', 'control-radius': '0px', 'pad-y': '3px', 'pad-x': '4px', 'input-border': '0 0 1px 0', 'label-weight': '600', 'gap-x': '32px', 'gap-y': '14px',
|
|
81
|
+
},
|
|
82
|
+
dark: {
|
|
83
|
+
text: '#e5e7eb', muted: '#9ca3af', page: '#111827', surface: '#1f2937', border: '#4b5563', 'border-strong': '#6b7280',
|
|
84
|
+
accent: '#c79fbc', 'accent-text': '#1f1020', 'accent-soft': '#3b2836', focus: '#c79fbc', error: '#f6878b', 'error-soft': '#3a1214', edge: '#6b7280',
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
// Google Forms: each question a white card on a tinted page, a purple band over the title, underlined answers.
|
|
88
|
+
'google-forms': {
|
|
89
|
+
light: {
|
|
90
|
+
font: `Roboto, Arial, ${SYSTEM}`, text: '#202124', muted: '#5f6368', page: '#f0ebf8', surface: '#ffffff', border: '#dadce0', 'border-strong': '#80868b',
|
|
91
|
+
accent: '#673ab7', 'accent-text': '#ffffff', 'accent-soft': '#ede7f6', focus: '#673ab7', 'focus-ring': 'none', error: '#d93025', 'error-soft': '#fce8e6',
|
|
92
|
+
radius: '8px', 'control-radius': '0px', 'control-height': '36px', 'pad-y': '6px', 'pad-x': '0px', 'input-border': '0 0 1px 0', 'label-weight': '400', 'gap-x': '24px', 'gap-y': '12px',
|
|
93
|
+
},
|
|
94
|
+
dark: {
|
|
95
|
+
text: '#e8e3ee', muted: '#b8b0c4', page: '#1c1822', surface: '#2a2431', border: '#4a4255', 'border-strong': '#7b7088',
|
|
96
|
+
accent: '#c4abf2', 'accent-text': '#1d1528', 'accent-soft': '#3b2f52', focus: '#c4abf2', error: '#f28b82', 'error-soft': '#3c1714', edge: '#7b7088',
|
|
97
|
+
},
|
|
98
|
+
},
|
|
99
|
+
};
|
|
100
|
+
const block = (tokens) => Object.entries(tokens)
|
|
101
|
+
.map(([name, value]) => `--fd-${name}: ${value};`)
|
|
102
|
+
.join(' ');
|
|
103
|
+
const forms = (theme) => `:is(.fd-form, .fd-form-dialog, .fd-theme)[data-fd-theme="${theme}"]`;
|
|
104
|
+
/** A group drawn as a card on the page's ground, as the outlined skin draws one: on the page, or set as a card. */
|
|
105
|
+
const CARDS = ':is(.fd-sections > .fd-section:not([data-style]), .fd-section[data-style="card"][data-on-page])';
|
|
106
|
+
/**
|
|
107
|
+
* The themes' tokens: after the skins' (they win over them), before the page's
|
|
108
|
+
* look (whose accent, room, corners and scheme win over them). A theme's dark
|
|
109
|
+
* tokens are more specific than the plain dark scheme's, so they win over it.
|
|
110
|
+
* All in Fieldia's tokens' layer, under any rule of a host's own.
|
|
111
|
+
*/
|
|
112
|
+
export const THEME_TOKENS_CSS = Object.keys(THEME_TOKENS)
|
|
113
|
+
.map((theme) => {
|
|
114
|
+
const { light, dark } = THEME_TOKENS[theme];
|
|
115
|
+
const darkOn = `${forms(theme)}[data-scheme="dark"]`;
|
|
116
|
+
return `${forms(theme)} { ${block(light)} }
|
|
117
|
+
${darkOn} { ${block(dark)} }
|
|
118
|
+
@media (prefers-color-scheme: dark) { ${forms(theme)}[data-scheme="auto"] { ${block(dark)} } }`;
|
|
119
|
+
})
|
|
120
|
+
.join('\n')
|
|
121
|
+
// In Fieldia's tokens' layer (styles.ts), after the skins': a host's own rule sets them over a theme's too.
|
|
122
|
+
.replace(/^/, '@layer fieldia-tokens {\n')
|
|
123
|
+
.concat('\n}');
|
|
124
|
+
/** What tokens cannot say: each theme's own shapes. After every other rule, so they win at the same weight. */
|
|
125
|
+
export const THEME_RULES_CSS = /* css */ `
|
|
126
|
+
/* A themed form paints its own ground, as one with a scheme does: Google Forms' lilac, Apple's grey. In a dialog, the dialog is its ground. */
|
|
127
|
+
.fd-form[data-fd-theme] { background: var(--fd-page); color: var(--fd-text); border-radius: var(--fd-radius); }
|
|
128
|
+
.fd-form[data-fd-theme] > .fd-content:not(:has(> .fd-sheet-page)) { padding: 20px; }
|
|
129
|
+
.fd-form-dialog-body > .fd-form[data-fd-theme] { background: none; border-radius: 0; }
|
|
130
|
+
.fd-form-dialog-body > .fd-form[data-fd-theme] > .fd-content:not(:has(> .fd-sheet-page)) { padding: 0; }
|
|
131
|
+
/* Material: boxes filled and underlined, the line thickening on focus; pill buttons; borderless tinted cards. */
|
|
132
|
+
${forms('material')} .fd-input:not([readonly]) { background: var(--fd-fill); border-start-start-radius: var(--fd-control-radius); border-start-end-radius: var(--fd-control-radius); border-end-start-radius: 0; border-end-end-radius: 0; }
|
|
133
|
+
${forms('material')} .fd-input:focus { box-shadow: inset 0 -1px 0 0 var(--fd-focus); }
|
|
134
|
+
${forms('material')} .fd-button { border-radius: 20px; min-height: 40px; padding-inline: 24px; font-weight: 500; letter-spacing: 0.01em; border-color: var(--fd-border); }
|
|
135
|
+
${forms('material')} .fd-tab[aria-selected="true"] { border-block-end-width: 3px; }
|
|
136
|
+
${forms('material')} ${CARDS} { border-color: transparent; background: color-mix(in srgb, var(--fd-accent) 4%, var(--fd-surface)); }
|
|
137
|
+
|
|
138
|
+
/* Fluent: a darker bottom edge under every box, an accent bar on focus; semibold buttons; the picked tab in words, not the accent. */
|
|
139
|
+
${forms('fluent')} .fd-input:not([readonly]) { border-block-end-color: var(--fd-border-strong); }
|
|
140
|
+
${forms('fluent')} .fd-input:focus { box-shadow: inset 0 -2px 0 0 var(--fd-focus); border-block-end-color: var(--fd-focus); }
|
|
141
|
+
${forms('fluent')} .fd-button { font-weight: 600; }
|
|
142
|
+
${forms('fluent')} .fd-tab[aria-selected="true"] { color: var(--fd-text); border-block-end-width: 3px; }
|
|
143
|
+
|
|
144
|
+
/* Apple: boxes filled, no frame until focused; pill buttons; grouped cards with no edge. */
|
|
145
|
+
${forms('apple')} .fd-input:not([readonly]) { background: var(--fd-fill); border-color: transparent; }
|
|
146
|
+
${forms('apple')} .fd-input:not([readonly]):focus { background: var(--fd-surface); border-color: var(--fd-focus); }
|
|
147
|
+
${forms('apple')} .fd-button { border-radius: 980px; padding-inline: 18px; font-weight: 500; }
|
|
148
|
+
${forms('apple')} ${CARDS} { border-color: transparent; }
|
|
149
|
+
|
|
150
|
+
/* Bootstrap: its buttons' weight and padding. */
|
|
151
|
+
${forms('bootstrap')} .fd-button { padding-inline: 12px; }
|
|
152
|
+
|
|
153
|
+
/* shadcn: a hairline shadow under boxes and buttons; the picked tab a raised segment on a grey strip. */
|
|
154
|
+
${forms('shadcn')} :is(.fd-input:not([readonly]), .fd-button:not(.fd-button-link)) { box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); }
|
|
155
|
+
${forms('shadcn')} .fd-input:focus { box-shadow: var(--fd-focus-ring); }
|
|
156
|
+
${forms('shadcn')} .fd-button { font-weight: 500; }
|
|
157
|
+
${forms('shadcn')} .fd-button:hover { color: var(--fd-text); background: var(--fd-accent-soft); border-color: var(--fd-border); }
|
|
158
|
+
${forms('shadcn')} .fd-button-primary:hover { color: var(--fd-accent-text); background: var(--fd-accent); filter: brightness(1.25); }
|
|
159
|
+
${forms('shadcn')} .fd-tablist { gap: 2px; padding: 3px; border: 0; border-radius: var(--fd-radius); background: var(--fd-accent-soft); width: max-content; max-width: 100%; }
|
|
160
|
+
${forms('shadcn')} .fd-tab { border: 0; margin: 0; padding: 5px 12px; border-radius: calc(var(--fd-radius) - 3px); color: var(--fd-muted); }
|
|
161
|
+
${forms('shadcn')} .fd-tab[aria-selected="true"] { color: var(--fd-text); background: var(--fd-surface); box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); font-weight: 500; }
|
|
162
|
+
|
|
163
|
+
/* Odoo: square buttons with small corners. */
|
|
164
|
+
${forms('odoo')} .fd-button { border-radius: 4px; }
|
|
165
|
+
|
|
166
|
+
/* Google Forms: the title a card with a band of the accent along its top; each question its own card; answers underlined. */
|
|
167
|
+
${forms('google-forms')} .fd-page-head { background: var(--fd-surface); border: 1px solid var(--fd-border); border-block-start: 10px solid var(--fd-accent); border-radius: var(--fd-radius); padding: 22px 24px; }
|
|
168
|
+
${forms('google-forms')} .fd-page-title { font-size: 32px; font-weight: 400; line-height: 1.2; }
|
|
169
|
+
${forms('google-forms')} ${CARDS} { background: none; border: 0; padding: 0; }
|
|
170
|
+
${forms('google-forms')} ${CARDS} > .fd-grid > .fd-field:not(.fd-oneline) { background: var(--fd-surface); border: 1px solid var(--fd-border); border-radius: var(--fd-radius); padding: 22px 24px; }
|
|
171
|
+
${forms('google-forms')} ${CARDS} > .fd-grid > .fd-field:focus-within { border-inline-start: 6px solid var(--fd-accent); padding-inline-start: 19px; }
|
|
172
|
+
${forms('google-forms')} .fd-label { font-size: 16px; }
|
|
173
|
+
${forms('google-forms')} .fd-input:not([readonly]) { background: transparent; }
|
|
174
|
+
${forms('google-forms')} .fd-input:focus { box-shadow: inset 0 -1px 0 0 var(--fd-focus); }
|
|
175
|
+
${forms('google-forms')} .fd-button { border-radius: 4px; font-weight: 500; }
|
|
176
|
+
`;
|
|
177
|
+
//# sourceMappingURL=themes.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"themes.mjs","sourceRoot":"","sources":["../../../../../libs/widgets/src/lib/themes.ts"],"names":[],"mappings":"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"}
|