@fieldia/widgets 0.11.0 → 0.12.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 +2 -2
- package/src/lib/choice-tags.js.map +1 -1
- package/src/lib/choice-tags.mjs +2 -2
- 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/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 +37 -0
- package/src/lib/labels.d.ts +37 -0
- package/src/lib/labels.js +28 -0
- package/src/lib/labels.js.map +1 -1
- package/src/lib/labels.mjs +28 -0
- package/src/lib/labels.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 +251 -15
- package/src/lib/lines.js.map +1 -1
- package/src/lib/lines.mjs +250 -16
- 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 +28 -0
- package/src/lib/locales/ar.js.map +1 -1
- package/src/lib/locales/ar.mjs +28 -0
- package/src/lib/locales/ar.mjs.map +1 -1
- package/src/lib/locales/de.js +28 -0
- package/src/lib/locales/de.js.map +1 -1
- package/src/lib/locales/de.mjs +28 -0
- package/src/lib/locales/de.mjs.map +1 -1
- package/src/lib/locales/fr.js +28 -0
- package/src/lib/locales/fr.js.map +1 -1
- package/src/lib/locales/fr.mjs +28 -0
- package/src/lib/locales/fr.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 +99 -8
- package/src/lib/relations.js.map +1 -1
- package/src/lib/relations.mjs +97 -8
- 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-kinds.d.mts +1 -1
- package/src/lib/styles-kinds.d.ts +1 -1
- package/src/lib/styles-kinds.js +1 -1
- package/src/lib/styles-kinds.mjs +1 -1
- package/src/lib/styles-sheet.d.mts +6 -0
- package/src/lib/styles-sheet.d.ts +6 -0
- package/src/lib/styles-sheet.js +123 -0
- package/src/lib/styles-sheet.js.map +1 -0
- package/src/lib/styles-sheet.mjs +120 -0
- package/src/lib/styles-sheet.mjs.map +1 -0
- package/src/lib/styles.js +142 -10
- package/src/lib/styles.js.map +1 -1
- package/src/lib/styles.mjs +142 -10
- 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/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 +63 -5
- package/src/lib/widgets.js.map +1 -1
- package/src/lib/widgets.mjs +63 -5
- 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 @@
|
|
|
1
|
+
{"version":3,"file":"state-dot.mjs","sourceRoot":"","sources":["../../../../../libs/widgets/src/lib/state-dot.ts"],"names":[],"mappings":"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"}
|
package/src/lib/statusbar.js
CHANGED
|
@@ -1,55 +1,192 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.statusbarWidget = void 0;
|
|
4
|
-
const
|
|
4
|
+
const labels_1 = require("./labels");
|
|
5
|
+
/** Seconds as a person reads time spent: days, else hours, else minutes, short. */
|
|
6
|
+
function timeSpent(seconds, locale) {
|
|
7
|
+
const [amount, unit] = seconds >= 86400 ? [seconds / 86400, 'day'] : seconds >= 3600 ? [seconds / 3600, 'hour'] : [Math.max(1, seconds / 60), 'minute'];
|
|
8
|
+
try {
|
|
9
|
+
return new Intl.NumberFormat(locale, { style: 'unit', unit, unitDisplay: 'narrow', maximumFractionDigits: 0, numberingSystem: 'latn' }).format(Math.floor(amount));
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
return `${Math.floor(amount)}${unit[0]}`;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
const statusbarWidget = ({ form, name, field, node, id, document, labels = labels_1.WIDGET_LABELS.en, locale = 'en' }) => {
|
|
5
16
|
const options = node.options ?? {};
|
|
6
17
|
const clickable = options['clickable'] === true;
|
|
7
18
|
const visible = Array.isArray(options['visibleStates']) ? options['visibleStates'] : null;
|
|
19
|
+
const durationsField = typeof options['durationsField'] === 'string' ? options['durationsField'] : null;
|
|
20
|
+
const fold = options['fold'] === true;
|
|
21
|
+
const saves = options['saves'] === true;
|
|
8
22
|
const list = document.createElement('ol');
|
|
9
23
|
list.className = 'fd-statusbar';
|
|
10
24
|
list.id = id;
|
|
11
25
|
list.setAttribute('aria-label', field.label);
|
|
12
26
|
const keyOf = (value) => value && typeof value === 'object' && 'id' in value ? `id:${String(value.id)}` : `v:${String(value)}`;
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
27
|
+
/** A step's value as the record's time per step names it: a stage's id, or a choice's value. */
|
|
28
|
+
const durationKey = (value) => (value && typeof value === 'object' && 'id' in value ? String(value.id) : String(value));
|
|
29
|
+
// A selection knows its steps; a link's are looked up, and again whenever a
|
|
30
|
+
// value its filter reads changes — the record's project, once it has loaded.
|
|
31
|
+
let steps = field.type === 'selection' ? field.options.map((o) => ({ key: keyOf(o.value), label: o.label, value: o.value, folded: false })) : [];
|
|
32
|
+
const reads = [];
|
|
33
|
+
const readsOf = (items) => items.forEach((item) => ('any' in item ? readsOf(item.any) : 'all' in item ? readsOf(item.all) : item.valueFrom && reads.push(item.valueFrom)));
|
|
34
|
+
if (field.type === 'many2one')
|
|
35
|
+
readsOf(field.filter ?? []);
|
|
36
|
+
let lookedUp = field.type === 'selection' ? '' : null;
|
|
37
|
+
let asked = 0;
|
|
38
|
+
let last = { value: undefined, readonly: false, durations: {} };
|
|
39
|
+
/** What the bar shows now: drawn again only when that changes — redrawing a focused step loses the focus, and the form redraws as focus leaves. */
|
|
40
|
+
let drawn = '';
|
|
41
|
+
let menuOpen = false;
|
|
42
|
+
/** Move the record to a step; and, when told to, save it at once. */
|
|
43
|
+
const pick = (step) => {
|
|
44
|
+
form.setValue(name, step.value);
|
|
45
|
+
// Saved once what the server works out from the step is back, as Flectra saves after its onchange.
|
|
46
|
+
if (saves)
|
|
47
|
+
void form.settled().then(() => form.save());
|
|
48
|
+
};
|
|
17
49
|
function draw() {
|
|
18
|
-
const { value, readonly } = last;
|
|
50
|
+
const { value, readonly, durations } = last;
|
|
51
|
+
// A step clicked becomes the current one: the focus stays on it as the bar is drawn again.
|
|
52
|
+
const focused = list.contains(document.activeElement) ? document.activeElement.dataset['key'] : undefined;
|
|
19
53
|
const currentKey = value === null || value === undefined ? null : keyOf(value);
|
|
20
54
|
let shown = steps.filter((s) => !visible || visible.some((v) => keyOf(v) === s.key) || s.key === currentKey);
|
|
21
55
|
if (currentKey && !shown.some((s) => s.key === currentKey) && value && typeof value === 'object') {
|
|
22
|
-
shown = [...shown, { key: currentKey, label: value.label, value }];
|
|
56
|
+
shown = [...shown, { key: currentKey, label: value.label, value, folded: false }];
|
|
23
57
|
}
|
|
24
|
-
|
|
58
|
+
// Folded stages wait under More, the one the record stands on excepted.
|
|
59
|
+
const folded = fold ? shown.filter((s) => s.folded && s.key !== currentKey) : [];
|
|
60
|
+
shown = shown.filter((s) => !folded.includes(s));
|
|
61
|
+
const times = shown.map((s) => (durationsField ? Number(durations[durationKey(s.value)] ?? 0) : 0));
|
|
62
|
+
const now = JSON.stringify([shown.map((s) => [s.key, s.label]), folded.map((s) => s.key), times, currentKey, readonly, menuOpen]);
|
|
63
|
+
if (now === drawn)
|
|
64
|
+
return;
|
|
65
|
+
drawn = now;
|
|
66
|
+
const items = shown.map((step, i) => {
|
|
25
67
|
const label = document.createElement('span');
|
|
26
68
|
label.textContent = step.label;
|
|
27
69
|
const inner = document.createElement(clickable ? 'button' : 'span');
|
|
28
70
|
if (inner instanceof HTMLButtonElement) {
|
|
29
71
|
inner.type = 'button';
|
|
30
72
|
inner.disabled = readonly;
|
|
31
|
-
inner.
|
|
73
|
+
inner.dataset['key'] = step.key;
|
|
74
|
+
inner.addEventListener('click', () => pick(step));
|
|
32
75
|
}
|
|
33
76
|
inner.append(label);
|
|
77
|
+
// The time the record spent in it, when the app tells it.
|
|
78
|
+
if (times[i] > 0) {
|
|
79
|
+
const time = document.createElement('small');
|
|
80
|
+
time.className = 'fd-step-time';
|
|
81
|
+
time.textContent = timeSpent(times[i], locale);
|
|
82
|
+
inner.title = labels.timeInStep.replace('{time}', time.textContent);
|
|
83
|
+
inner.append(time);
|
|
84
|
+
}
|
|
34
85
|
if (step.key === currentKey)
|
|
35
86
|
inner.setAttribute('aria-current', 'step');
|
|
36
87
|
const item = document.createElement('li');
|
|
37
88
|
item.append(inner);
|
|
38
89
|
return item;
|
|
39
|
-
})
|
|
90
|
+
});
|
|
91
|
+
if (folded.length)
|
|
92
|
+
items.push(moreItem(folded, readonly));
|
|
93
|
+
list.replaceChildren(...items);
|
|
94
|
+
// The menu is fixed to the page, so the bar's scrolling never cuts it: under More, from its end.
|
|
95
|
+
const menu = list.querySelector('.fd-step-menu:not([hidden])');
|
|
96
|
+
const toggle = menu?.previousElementSibling;
|
|
97
|
+
if (menu && toggle) {
|
|
98
|
+
const at = toggle.getBoundingClientRect();
|
|
99
|
+
const view = document.defaultView;
|
|
100
|
+
const rtl = getComputedStyle(list).direction === 'rtl';
|
|
101
|
+
menu.style.top = `${at.bottom + 4}px`;
|
|
102
|
+
if (rtl)
|
|
103
|
+
menu.style.left = `${at.left}px`;
|
|
104
|
+
else
|
|
105
|
+
menu.style.right = `${Math.max(0, (view?.innerWidth ?? at.right) - at.right)}px`;
|
|
106
|
+
}
|
|
107
|
+
if (focused)
|
|
108
|
+
[...list.querySelectorAll('button')].find((b) => b.dataset['key'] === focused)?.focus();
|
|
40
109
|
}
|
|
110
|
+
/** The folded stages, in a menu at the bar's end: picked as any step when the bar can be clicked. */
|
|
111
|
+
function moreItem(folded, readonly) {
|
|
112
|
+
const item = document.createElement('li');
|
|
113
|
+
item.className = 'fd-step-more';
|
|
114
|
+
const toggle = document.createElement('button');
|
|
115
|
+
toggle.type = 'button';
|
|
116
|
+
toggle.dataset['key'] = 'more';
|
|
117
|
+
toggle.setAttribute('aria-haspopup', 'menu');
|
|
118
|
+
toggle.setAttribute('aria-expanded', String(menuOpen));
|
|
119
|
+
toggle.setAttribute('aria-label', labels.moreSteps);
|
|
120
|
+
toggle.title = labels.moreSteps;
|
|
121
|
+
const dots = document.createElement('span');
|
|
122
|
+
dots.textContent = '⋯';
|
|
123
|
+
dots.setAttribute('aria-hidden', 'true');
|
|
124
|
+
toggle.append(dots);
|
|
125
|
+
const menu = document.createElement('div');
|
|
126
|
+
menu.className = 'fd-step-menu';
|
|
127
|
+
menu.setAttribute('role', 'menu');
|
|
128
|
+
menu.hidden = !menuOpen;
|
|
129
|
+
for (const step of folded) {
|
|
130
|
+
const choice = document.createElement('button');
|
|
131
|
+
choice.type = 'button';
|
|
132
|
+
choice.setAttribute('role', 'menuitem');
|
|
133
|
+
choice.textContent = step.label;
|
|
134
|
+
choice.disabled = readonly || !clickable;
|
|
135
|
+
choice.addEventListener('click', () => {
|
|
136
|
+
menuOpen = false;
|
|
137
|
+
pick(step);
|
|
138
|
+
draw();
|
|
139
|
+
});
|
|
140
|
+
menu.append(choice);
|
|
141
|
+
}
|
|
142
|
+
toggle.addEventListener('click', () => {
|
|
143
|
+
menuOpen = !menuOpen;
|
|
144
|
+
draw();
|
|
145
|
+
if (menuOpen)
|
|
146
|
+
list.querySelector('.fd-step-menu button:not([disabled])')?.focus();
|
|
147
|
+
});
|
|
148
|
+
menu.addEventListener('keydown', (event) => {
|
|
149
|
+
if (event.key !== 'Escape')
|
|
150
|
+
return;
|
|
151
|
+
event.stopPropagation();
|
|
152
|
+
menuOpen = false;
|
|
153
|
+
draw();
|
|
154
|
+
list.querySelector('.fd-step-more > button')?.focus();
|
|
155
|
+
});
|
|
156
|
+
item.append(toggle, menu);
|
|
157
|
+
return item;
|
|
158
|
+
}
|
|
159
|
+
// A click elsewhere, or the page scrolled from under it, puts the menu away.
|
|
160
|
+
const away = (event) => {
|
|
161
|
+
if (menuOpen && !list.contains(event.target)) {
|
|
162
|
+
menuOpen = false;
|
|
163
|
+
draw();
|
|
164
|
+
}
|
|
165
|
+
};
|
|
166
|
+
document.addEventListener('pointerdown', away);
|
|
167
|
+
document.addEventListener('scroll', away, true);
|
|
41
168
|
return {
|
|
42
169
|
element: list,
|
|
43
170
|
focus: () => list.querySelector('button:not([disabled])')?.focus(),
|
|
171
|
+
destroy() {
|
|
172
|
+
document.removeEventListener('pointerdown', away);
|
|
173
|
+
document.removeEventListener('scroll', away, true);
|
|
174
|
+
},
|
|
44
175
|
update(state) {
|
|
45
|
-
|
|
176
|
+
const durations = durationsField ? state.values?.[durationsField] : null;
|
|
177
|
+
last = { value: state.value, readonly: state.readonly, durations: durations && typeof durations === 'object' && !Array.isArray(durations) ? durations : {} };
|
|
46
178
|
draw();
|
|
47
|
-
|
|
48
|
-
|
|
179
|
+
const key = field.type === 'selection' ? '' : JSON.stringify(reads.map((read) => state.values?.[read] ?? null));
|
|
180
|
+
if (lookedUp !== key) {
|
|
181
|
+
lookedUp = key;
|
|
182
|
+
const ask = ++asked;
|
|
49
183
|
void form
|
|
50
184
|
.search(name, '', 20)
|
|
51
185
|
.then((records) => {
|
|
52
|
-
|
|
186
|
+
// Only the latest answer counts: an earlier search may come back last.
|
|
187
|
+
if (ask !== asked)
|
|
188
|
+
return;
|
|
189
|
+
steps = records.map((r) => ({ key: keyOf(r), label: r.label, value: r, folded: r.folded === true }));
|
|
53
190
|
draw();
|
|
54
191
|
})
|
|
55
192
|
.catch(() => undefined);
|
package/src/lib/statusbar.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"statusbar.js","sourceRoot":"","sources":["../../../../../libs/widgets/src/lib/statusbar.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"statusbar.js","sourceRoot":"","sources":["../../../../../libs/widgets/src/lib/statusbar.ts"],"names":[],"mappings":"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"}
|
package/src/lib/statusbar.mjs
CHANGED
|
@@ -1,52 +1,189 @@
|
|
|
1
|
-
|
|
1
|
+
import { WIDGET_LABELS } from './labels.mjs';
|
|
2
|
+
/** Seconds as a person reads time spent: days, else hours, else minutes, short. */
|
|
3
|
+
function timeSpent(seconds, locale) {
|
|
4
|
+
const [amount, unit] = seconds >= 86400 ? [seconds / 86400, 'day'] : seconds >= 3600 ? [seconds / 3600, 'hour'] : [Math.max(1, seconds / 60), 'minute'];
|
|
5
|
+
try {
|
|
6
|
+
return new Intl.NumberFormat(locale, { style: 'unit', unit, unitDisplay: 'narrow', maximumFractionDigits: 0, numberingSystem: 'latn' }).format(Math.floor(amount));
|
|
7
|
+
}
|
|
8
|
+
catch {
|
|
9
|
+
return `${Math.floor(amount)}${unit[0]}`;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export const statusbarWidget = ({ form, name, field, node, id, document, labels = WIDGET_LABELS.en, locale = 'en' }) => {
|
|
2
13
|
const options = node.options ?? {};
|
|
3
14
|
const clickable = options['clickable'] === true;
|
|
4
15
|
const visible = Array.isArray(options['visibleStates']) ? options['visibleStates'] : null;
|
|
16
|
+
const durationsField = typeof options['durationsField'] === 'string' ? options['durationsField'] : null;
|
|
17
|
+
const fold = options['fold'] === true;
|
|
18
|
+
const saves = options['saves'] === true;
|
|
5
19
|
const list = document.createElement('ol');
|
|
6
20
|
list.className = 'fd-statusbar';
|
|
7
21
|
list.id = id;
|
|
8
22
|
list.setAttribute('aria-label', field.label);
|
|
9
23
|
const keyOf = (value) => value && typeof value === 'object' && 'id' in value ? `id:${String(value.id)}` : `v:${String(value)}`;
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
24
|
+
/** A step's value as the record's time per step names it: a stage's id, or a choice's value. */
|
|
25
|
+
const durationKey = (value) => (value && typeof value === 'object' && 'id' in value ? String(value.id) : String(value));
|
|
26
|
+
// A selection knows its steps; a link's are looked up, and again whenever a
|
|
27
|
+
// value its filter reads changes — the record's project, once it has loaded.
|
|
28
|
+
let steps = field.type === 'selection' ? field.options.map((o) => ({ key: keyOf(o.value), label: o.label, value: o.value, folded: false })) : [];
|
|
29
|
+
const reads = [];
|
|
30
|
+
const readsOf = (items) => items.forEach((item) => ('any' in item ? readsOf(item.any) : 'all' in item ? readsOf(item.all) : item.valueFrom && reads.push(item.valueFrom)));
|
|
31
|
+
if (field.type === 'many2one')
|
|
32
|
+
readsOf(field.filter ?? []);
|
|
33
|
+
let lookedUp = field.type === 'selection' ? '' : null;
|
|
34
|
+
let asked = 0;
|
|
35
|
+
let last = { value: undefined, readonly: false, durations: {} };
|
|
36
|
+
/** What the bar shows now: drawn again only when that changes — redrawing a focused step loses the focus, and the form redraws as focus leaves. */
|
|
37
|
+
let drawn = '';
|
|
38
|
+
let menuOpen = false;
|
|
39
|
+
/** Move the record to a step; and, when told to, save it at once. */
|
|
40
|
+
const pick = (step) => {
|
|
41
|
+
form.setValue(name, step.value);
|
|
42
|
+
// Saved once what the server works out from the step is back, as Flectra saves after its onchange.
|
|
43
|
+
if (saves)
|
|
44
|
+
void form.settled().then(() => form.save());
|
|
45
|
+
};
|
|
14
46
|
function draw() {
|
|
15
|
-
const { value, readonly } = last;
|
|
47
|
+
const { value, readonly, durations } = last;
|
|
48
|
+
// A step clicked becomes the current one: the focus stays on it as the bar is drawn again.
|
|
49
|
+
const focused = list.contains(document.activeElement) ? document.activeElement.dataset['key'] : undefined;
|
|
16
50
|
const currentKey = value === null || value === undefined ? null : keyOf(value);
|
|
17
51
|
let shown = steps.filter((s) => !visible || visible.some((v) => keyOf(v) === s.key) || s.key === currentKey);
|
|
18
52
|
if (currentKey && !shown.some((s) => s.key === currentKey) && value && typeof value === 'object') {
|
|
19
|
-
shown = [...shown, { key: currentKey, label: value.label, value }];
|
|
53
|
+
shown = [...shown, { key: currentKey, label: value.label, value, folded: false }];
|
|
20
54
|
}
|
|
21
|
-
|
|
55
|
+
// Folded stages wait under More, the one the record stands on excepted.
|
|
56
|
+
const folded = fold ? shown.filter((s) => s.folded && s.key !== currentKey) : [];
|
|
57
|
+
shown = shown.filter((s) => !folded.includes(s));
|
|
58
|
+
const times = shown.map((s) => (durationsField ? Number(durations[durationKey(s.value)] ?? 0) : 0));
|
|
59
|
+
const now = JSON.stringify([shown.map((s) => [s.key, s.label]), folded.map((s) => s.key), times, currentKey, readonly, menuOpen]);
|
|
60
|
+
if (now === drawn)
|
|
61
|
+
return;
|
|
62
|
+
drawn = now;
|
|
63
|
+
const items = shown.map((step, i) => {
|
|
22
64
|
const label = document.createElement('span');
|
|
23
65
|
label.textContent = step.label;
|
|
24
66
|
const inner = document.createElement(clickable ? 'button' : 'span');
|
|
25
67
|
if (inner instanceof HTMLButtonElement) {
|
|
26
68
|
inner.type = 'button';
|
|
27
69
|
inner.disabled = readonly;
|
|
28
|
-
inner.
|
|
70
|
+
inner.dataset['key'] = step.key;
|
|
71
|
+
inner.addEventListener('click', () => pick(step));
|
|
29
72
|
}
|
|
30
73
|
inner.append(label);
|
|
74
|
+
// The time the record spent in it, when the app tells it.
|
|
75
|
+
if (times[i] > 0) {
|
|
76
|
+
const time = document.createElement('small');
|
|
77
|
+
time.className = 'fd-step-time';
|
|
78
|
+
time.textContent = timeSpent(times[i], locale);
|
|
79
|
+
inner.title = labels.timeInStep.replace('{time}', time.textContent);
|
|
80
|
+
inner.append(time);
|
|
81
|
+
}
|
|
31
82
|
if (step.key === currentKey)
|
|
32
83
|
inner.setAttribute('aria-current', 'step');
|
|
33
84
|
const item = document.createElement('li');
|
|
34
85
|
item.append(inner);
|
|
35
86
|
return item;
|
|
36
|
-
})
|
|
87
|
+
});
|
|
88
|
+
if (folded.length)
|
|
89
|
+
items.push(moreItem(folded, readonly));
|
|
90
|
+
list.replaceChildren(...items);
|
|
91
|
+
// The menu is fixed to the page, so the bar's scrolling never cuts it: under More, from its end.
|
|
92
|
+
const menu = list.querySelector('.fd-step-menu:not([hidden])');
|
|
93
|
+
const toggle = menu?.previousElementSibling;
|
|
94
|
+
if (menu && toggle) {
|
|
95
|
+
const at = toggle.getBoundingClientRect();
|
|
96
|
+
const view = document.defaultView;
|
|
97
|
+
const rtl = getComputedStyle(list).direction === 'rtl';
|
|
98
|
+
menu.style.top = `${at.bottom + 4}px`;
|
|
99
|
+
if (rtl)
|
|
100
|
+
menu.style.left = `${at.left}px`;
|
|
101
|
+
else
|
|
102
|
+
menu.style.right = `${Math.max(0, (view?.innerWidth ?? at.right) - at.right)}px`;
|
|
103
|
+
}
|
|
104
|
+
if (focused)
|
|
105
|
+
[...list.querySelectorAll('button')].find((b) => b.dataset['key'] === focused)?.focus();
|
|
37
106
|
}
|
|
107
|
+
/** The folded stages, in a menu at the bar's end: picked as any step when the bar can be clicked. */
|
|
108
|
+
function moreItem(folded, readonly) {
|
|
109
|
+
const item = document.createElement('li');
|
|
110
|
+
item.className = 'fd-step-more';
|
|
111
|
+
const toggle = document.createElement('button');
|
|
112
|
+
toggle.type = 'button';
|
|
113
|
+
toggle.dataset['key'] = 'more';
|
|
114
|
+
toggle.setAttribute('aria-haspopup', 'menu');
|
|
115
|
+
toggle.setAttribute('aria-expanded', String(menuOpen));
|
|
116
|
+
toggle.setAttribute('aria-label', labels.moreSteps);
|
|
117
|
+
toggle.title = labels.moreSteps;
|
|
118
|
+
const dots = document.createElement('span');
|
|
119
|
+
dots.textContent = '⋯';
|
|
120
|
+
dots.setAttribute('aria-hidden', 'true');
|
|
121
|
+
toggle.append(dots);
|
|
122
|
+
const menu = document.createElement('div');
|
|
123
|
+
menu.className = 'fd-step-menu';
|
|
124
|
+
menu.setAttribute('role', 'menu');
|
|
125
|
+
menu.hidden = !menuOpen;
|
|
126
|
+
for (const step of folded) {
|
|
127
|
+
const choice = document.createElement('button');
|
|
128
|
+
choice.type = 'button';
|
|
129
|
+
choice.setAttribute('role', 'menuitem');
|
|
130
|
+
choice.textContent = step.label;
|
|
131
|
+
choice.disabled = readonly || !clickable;
|
|
132
|
+
choice.addEventListener('click', () => {
|
|
133
|
+
menuOpen = false;
|
|
134
|
+
pick(step);
|
|
135
|
+
draw();
|
|
136
|
+
});
|
|
137
|
+
menu.append(choice);
|
|
138
|
+
}
|
|
139
|
+
toggle.addEventListener('click', () => {
|
|
140
|
+
menuOpen = !menuOpen;
|
|
141
|
+
draw();
|
|
142
|
+
if (menuOpen)
|
|
143
|
+
list.querySelector('.fd-step-menu button:not([disabled])')?.focus();
|
|
144
|
+
});
|
|
145
|
+
menu.addEventListener('keydown', (event) => {
|
|
146
|
+
if (event.key !== 'Escape')
|
|
147
|
+
return;
|
|
148
|
+
event.stopPropagation();
|
|
149
|
+
menuOpen = false;
|
|
150
|
+
draw();
|
|
151
|
+
list.querySelector('.fd-step-more > button')?.focus();
|
|
152
|
+
});
|
|
153
|
+
item.append(toggle, menu);
|
|
154
|
+
return item;
|
|
155
|
+
}
|
|
156
|
+
// A click elsewhere, or the page scrolled from under it, puts the menu away.
|
|
157
|
+
const away = (event) => {
|
|
158
|
+
if (menuOpen && !list.contains(event.target)) {
|
|
159
|
+
menuOpen = false;
|
|
160
|
+
draw();
|
|
161
|
+
}
|
|
162
|
+
};
|
|
163
|
+
document.addEventListener('pointerdown', away);
|
|
164
|
+
document.addEventListener('scroll', away, true);
|
|
38
165
|
return {
|
|
39
166
|
element: list,
|
|
40
167
|
focus: () => list.querySelector('button:not([disabled])')?.focus(),
|
|
168
|
+
destroy() {
|
|
169
|
+
document.removeEventListener('pointerdown', away);
|
|
170
|
+
document.removeEventListener('scroll', away, true);
|
|
171
|
+
},
|
|
41
172
|
update(state) {
|
|
42
|
-
|
|
173
|
+
const durations = durationsField ? state.values?.[durationsField] : null;
|
|
174
|
+
last = { value: state.value, readonly: state.readonly, durations: durations && typeof durations === 'object' && !Array.isArray(durations) ? durations : {} };
|
|
43
175
|
draw();
|
|
44
|
-
|
|
45
|
-
|
|
176
|
+
const key = field.type === 'selection' ? '' : JSON.stringify(reads.map((read) => state.values?.[read] ?? null));
|
|
177
|
+
if (lookedUp !== key) {
|
|
178
|
+
lookedUp = key;
|
|
179
|
+
const ask = ++asked;
|
|
46
180
|
void form
|
|
47
181
|
.search(name, '', 20)
|
|
48
182
|
.then((records) => {
|
|
49
|
-
|
|
183
|
+
// Only the latest answer counts: an earlier search may come back last.
|
|
184
|
+
if (ask !== asked)
|
|
185
|
+
return;
|
|
186
|
+
steps = records.map((r) => ({ key: keyOf(r), label: r.label, value: r, folded: r.folded === true }));
|
|
50
187
|
draw();
|
|
51
188
|
})
|
|
52
189
|
.catch(() => undefined);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"statusbar.mjs","sourceRoot":"","sources":["../../../../../libs/widgets/src/lib/statusbar.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"statusbar.mjs","sourceRoot":"","sources":["../../../../../libs/widgets/src/lib/statusbar.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The business widgets' part of the stylesheet: priority stars, a state's
|
|
3
|
+
* dot and its menu, a tag colour, a copy button, a range of dates, a running
|
|
4
|
+
* timer, a document shown inline, an analytic distribution, tax totals and a
|
|
5
|
+
* list of payments. Scoped, and written with logical properties, as the rest
|
|
6
|
+
* of it is; it comes after the inputs' part.
|
|
7
|
+
*/
|
|
8
|
+
export declare const BUSINESS_CSS = "\n/* ---- business widgets ------------------------------------------------------- */\n/* Priority: grey stars, gold up to the one picked; hovered, they show what a click would pick. */\n.fd-priority { display: inline-flex; align-items: center; gap: 1px; }\n.fd-priority-star { border: none; background: none; padding: 0 1px; min-width: 0; font: inherit; font-size: 20px; line-height: 1; color: var(--fd-border-strong); cursor: pointer; }\n.fd-priority-star.fd-on { color: #e8a317; }\n.fd-priority:not(:has(:disabled)):hover .fd-priority-star { color: #e8a317; }\n.fd-priority:not(:has(:disabled)) .fd-priority-star:hover ~ .fd-priority-star { color: var(--fd-border-strong); }\n.fd-priority-star:disabled { cursor: default; }\n/* Fields on the title's line: a priority star before the name, a state's dot after it; the name keeps the room and its big words. */\n.fd-title-line { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 10px; min-width: 0; }\n/* On a phone the name takes a row of its own rather than be cut. */\n.fd-title-line > .fd-title-name { flex: 1 1 18em; min-width: 0; }\n.fd-title-line > .fd-title-name .fd-input { font-size: 24px; font-weight: 600; min-height: 40px; }\n/* A read-only name on the title's line reads as the title too, as it does alone. */\n.fd-title-line > .fd-title-name > .fd-read-text { font-size: 24px; font-weight: 600; line-height: 1.25; }\n.fd-form .fd-title-line > .fd-field { grid-template-columns: minmax(0, 1fr); }\n.fd-form .fd-title-line > .fd-field > * { grid-column: 1 !important; }\n.fd-form .fd-title-line > .fd-title-side { display: flex; align-items: center; flex: none; }\n.fd-title-line > .fd-field > .fd-label { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }\n.fd-title-line .fd-priority-star { font-size: 24px; }\n/* A state's dot: grey, red, green\u2026, in the state's tone; its menu floats under it. */\n.fd-dot-box { position: relative; display: inline-flex; align-items: center; gap: 6px; }\n.fd-dot-button { display: inline-grid; place-items: center; width: 24px; height: 24px; padding: 0; border: none; border-radius: 50%; background: none; cursor: pointer; }\n.fd-dot-button:hover:not(:disabled) { background: var(--fd-accent-soft); }\n.fd-dot-button:disabled { cursor: default; }\n.fd-dot { display: inline-block; width: 12px; height: 12px; flex: none; border-radius: 50%; background: var(--fd-dot, var(--fd-border-strong)); }\n.fd-dot-button[data-tone=\"muted\"], .fd-dot-item[data-tone=\"muted\"] { --fd-dot: var(--fd-border-strong); }\n.fd-dot-button[data-tone=\"danger\"], .fd-dot-item[data-tone=\"danger\"] { --fd-dot: var(--fd-error); }\n.fd-dot-button[data-tone=\"success\"], .fd-dot-item[data-tone=\"success\"] { --fd-dot: var(--fd-success); }\n.fd-dot-button[data-tone=\"warning\"], .fd-dot-item[data-tone=\"warning\"] { --fd-dot: #d97706; }\n.fd-dot-button[data-tone=\"info\"], .fd-dot-item[data-tone=\"info\"] { --fd-dot: var(--fd-info); }\n.fd-dot-label { font-size: 13px; color: var(--fd-muted); }\n.fd-dot-menu { position: absolute; top: calc(100% + 4px); inset-inline-start: 0; z-index: 30; min-width: 180px; padding: 4px; display: grid; background: var(--fd-surface); color: var(--fd-text); border: 1px solid var(--fd-border); border-radius: max(var(--fd-control-radius), 6px); box-shadow: 0 6px 20px rgba(0, 0, 0, 0.16); }\n.fd-dot-item { display: flex; align-items: center; gap: 8px; padding: 6px 10px; border-radius: 4px; cursor: pointer; white-space: nowrap; font-size: 14px; }\n.fd-dot-item:hover, .fd-dot-item:focus { background: var(--fd-accent-soft); outline: none; }\n.fd-dot-item[aria-checked=\"true\"] { font-weight: 600; }\n/* A colour: a swatch of it, and a palette of Flectra's twelve under it; none is a crossed-out square. */\n.fd-colour-box { position: relative; display: inline-flex; align-items: center; gap: 8px; }\n.fd-colour-button, .fd-colour { width: 24px; height: 24px; padding: 0; border: 1px solid var(--fd-border-strong); border-radius: 4px; background: var(--fd-swatch, transparent); cursor: pointer; }\n.fd-colour-button:disabled { cursor: default; }\n.fd-colour-none, .fd-colour[data-colour=\"0\"] { background: linear-gradient(to top right, transparent calc(50% - 1px), var(--fd-error) calc(50% - 1px), var(--fd-error) calc(50% + 1px), transparent calc(50% + 1px)); }\n.fd-colour-palette { position: absolute; top: calc(100% + 4px); inset-inline-start: 0; z-index: 30; display: grid; grid-template-columns: repeat(6, 24px); gap: 6px; padding: 8px; background: var(--fd-surface); border: 1px solid var(--fd-border); border-radius: max(var(--fd-control-radius), 6px); box-shadow: 0 6px 20px rgba(0, 0, 0, 0.16); }\n.fd-colour[aria-checked=\"true\"] { box-shadow: 0 0 0 2px var(--fd-surface), 0 0 0 4px var(--fd-accent); }\n.fd-colour-input { width: 44px; height: 30px; padding: 2px; border: 1px solid var(--fd-border); border-radius: var(--fd-control-radius); background: var(--fd-surface); }\n.fd-colour-code { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 13px; color: var(--fd-muted); }\n/* A value to copy: its box, the button after it. */\n.fd-copy { display: flex; align-items: center; gap: 8px; min-width: 0; }\n.fd-copy > .fd-input { flex: 1 1 auto; min-width: 0; }\n.fd-copy-long { align-items: flex-start; }\n.fd-copy-button { flex: none; }\n/* A range of dates: two boxes, from \u2192 to, in one row that wraps on a phone, its calendar under it marking the days between. */\n.fd-range { position: relative; display: flex; flex-wrap: wrap; align-items: center; gap: 6px; min-width: 0; }\n/* Too narrow for a date and the calendar's button beside it, the button goes under: a date is never cut. */\n.fd-range-box { flex: 1 1 8em; display: flex; flex-wrap: wrap; align-items: center; gap: 4px 8px; min-width: 0; }\n.fd-range-box > .fd-input { flex: 1 1 9em; min-width: 0; }\n.fd-range-box > .fd-input[type=\"datetime-local\"] { flex-basis: 13em; }\n.fd-range-arrow { flex: none; display: inline-block; color: var(--fd-muted); }\n.fd-range-arrow:dir(rtl) { transform: scaleX(-1); }\n.fd-range-calendar .fd-calendar-grid td button.fd-in-range { background: var(--fd-accent-soft); border-radius: 0; }\n/* A timer: its time in even digits, a green dot beating while it runs. */\n.fd-timer { display: inline-flex; align-items: center; gap: 8px; font-variant-numeric: tabular-nums; font-weight: 600; direction: ltr; unicode-bidi: isolate; }\n.fd-timer-dot { width: 8px; height: 8px; border-radius: 50%; background: var(--fd-border-strong); }\n.fd-timer[data-running] .fd-timer-dot { background: var(--fd-success); animation: fd-timer-beat 1s ease-in-out infinite alternate; }\n.fd-timer[data-running] .fd-timer-time { color: var(--fd-success); }\n@keyframes fd-timer-beat { to { opacity: 0.35; } }\n@media (prefers-reduced-motion: reduce) { .fd-timer[data-running] .fd-timer-dot { animation: none; } }\n/* A document shown inline: the browser's own viewer, as wide as the field. */\n.fd-embed { display: grid; gap: 8px; min-width: 0; }\n.fd-embed-bar { display: flex; align-items: center; gap: 8px; min-width: 0; }\n.fd-embed-bar > .fd-input { flex: 1 1 auto; min-width: 0; }\n.fd-embed-open { flex: none; }\n.fd-embed-frame { display: block; width: 100%; border: 1px solid var(--fd-border); border-radius: max(var(--fd-control-radius), 4px); background: var(--fd-page); }\n.fd-embed-none { padding: 24px 12px; text-align: center; color: var(--fd-muted); border: 1px dashed var(--fd-border); border-radius: max(var(--fd-control-radius), 4px); }\n/* An analytic distribution: lines of an account and its share, their total under them. */\n.fd-distribution { display: grid; gap: 6px; min-width: 0; }\n.fd-distribution-table .fd-distribution-share { width: 8.5em; }\n.fd-distribution-table .fd-share { text-align: end; padding-inline-end: calc(var(--fd-pad-x) + 2ch); }\n.fd-distribution-total { font-weight: 600; text-align: end; padding-inline-end: calc(var(--fd-pad-x) + 2ch + 4px); font-variant-numeric: tabular-nums; }\n.fd-distribution-add { justify-self: start; }\n/* Tax totals: words at the start, amounts at the end in even digits, the total in bold over a rule. */\n.fd-tax-totals { justify-self: end; border-collapse: collapse; min-width: min(100%, 320px); font-variant-numeric: tabular-nums; }\n.fd-tax-totals th { text-align: start; font-weight: 400; color: var(--fd-muted); padding: 3px 16px 3px 0; padding-inline: 0 16px; }\n.fd-tax-totals td { text-align: end; padding: 3px 0; white-space: nowrap; }\n.fd-tax-totals .fd-tax-subtotal th { color: var(--fd-text); }\n.fd-tax-totals .fd-tax-total :is(th, td) { font-weight: 700; color: var(--fd-text); font-size: 15px; border-top: 1px solid var(--fd-border); padding-top: 6px; }\n.fd-tax-totals .fd-input { width: 9em; text-align: end; }\n/* Payments: each one's button, \"Paid on \u2026\" and its amount; its details in a small box under it; the amount due in bold. */\n.fd-payments { display: grid; gap: 6px; justify-self: end; min-width: min(100%, 320px); font-variant-numeric: tabular-nums; }\n.fd-payments-list { list-style: none; margin: 0; padding: 0; display: grid; gap: 4px; }\n.fd-payment { position: relative; display: flex; align-items: center; gap: 8px; }\n.fd-payment-info { flex: none; width: 20px; height: 20px; padding: 0; border: 1px solid var(--fd-border-strong); border-radius: 50%; background: var(--fd-surface); color: var(--fd-muted); font: italic 600 12px/1 Georgia, serif; cursor: pointer; }\n.fd-payment-info:hover, .fd-payment-info[aria-expanded=\"true\"] { color: var(--fd-accent); border-color: var(--fd-accent); }\n.fd-payment-date { flex: 1 1 auto; font-style: italic; color: var(--fd-muted); }\n.fd-payment-amount { white-space: nowrap; }\n.fd-payment-details { position: absolute; top: calc(100% + 4px); inset-inline-start: 0; z-index: 30; min-width: 240px; display: grid; gap: 6px; padding: 10px 12px; background: var(--fd-surface); color: var(--fd-text); border: 1px solid var(--fd-border); border-radius: max(var(--fd-control-radius), 6px); box-shadow: 0 6px 20px rgba(0, 0, 0, 0.16); }\n.fd-payment-details dl { display: grid; grid-template-columns: auto 1fr; gap: 2px 12px; margin: 0; }\n.fd-payment-details dt { color: var(--fd-muted); }\n.fd-payment-details dd { margin: 0; }\n.fd-payment-open { justify-self: start; }\n.fd-payment-due { display: flex; justify-content: space-between; gap: 16px; padding-top: 6px; border-top: 1px solid var(--fd-border); font-weight: 600; }\n/* Properties: in two columns when asked, one on a narrow form; adding one in place, its name and kind in a row. */\n.fd-properties-list { display: grid; gap: 8px; min-width: 0; }\n.fd-properties[data-columns=\"2\"] > .fd-properties-list { grid-template-columns: repeat(2, minmax(0, 1fr)); column-gap: 24px; }\n@container (max-width: 520px) { .fd-properties[data-columns=\"2\"] > .fd-properties-list { grid-template-columns: minmax(0, 1fr); } }\n.fd-property-add { justify-self: start; }\n.fd-property-new { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }\n.fd-property-new > .fd-input { flex: 1 1 10em; width: auto; }\n";
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The business widgets' part of the stylesheet: priority stars, a state's
|
|
3
|
+
* dot and its menu, a tag colour, a copy button, a range of dates, a running
|
|
4
|
+
* timer, a document shown inline, an analytic distribution, tax totals and a
|
|
5
|
+
* list of payments. Scoped, and written with logical properties, as the rest
|
|
6
|
+
* of it is; it comes after the inputs' part.
|
|
7
|
+
*/
|
|
8
|
+
export declare const BUSINESS_CSS = "\n/* ---- business widgets ------------------------------------------------------- */\n/* Priority: grey stars, gold up to the one picked; hovered, they show what a click would pick. */\n.fd-priority { display: inline-flex; align-items: center; gap: 1px; }\n.fd-priority-star { border: none; background: none; padding: 0 1px; min-width: 0; font: inherit; font-size: 20px; line-height: 1; color: var(--fd-border-strong); cursor: pointer; }\n.fd-priority-star.fd-on { color: #e8a317; }\n.fd-priority:not(:has(:disabled)):hover .fd-priority-star { color: #e8a317; }\n.fd-priority:not(:has(:disabled)) .fd-priority-star:hover ~ .fd-priority-star { color: var(--fd-border-strong); }\n.fd-priority-star:disabled { cursor: default; }\n/* Fields on the title's line: a priority star before the name, a state's dot after it; the name keeps the room and its big words. */\n.fd-title-line { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 10px; min-width: 0; }\n/* On a phone the name takes a row of its own rather than be cut. */\n.fd-title-line > .fd-title-name { flex: 1 1 18em; min-width: 0; }\n.fd-title-line > .fd-title-name .fd-input { font-size: 24px; font-weight: 600; min-height: 40px; }\n/* A read-only name on the title's line reads as the title too, as it does alone. */\n.fd-title-line > .fd-title-name > .fd-read-text { font-size: 24px; font-weight: 600; line-height: 1.25; }\n.fd-form .fd-title-line > .fd-field { grid-template-columns: minmax(0, 1fr); }\n.fd-form .fd-title-line > .fd-field > * { grid-column: 1 !important; }\n.fd-form .fd-title-line > .fd-title-side { display: flex; align-items: center; flex: none; }\n.fd-title-line > .fd-field > .fd-label { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }\n.fd-title-line .fd-priority-star { font-size: 24px; }\n/* A state's dot: grey, red, green\u2026, in the state's tone; its menu floats under it. */\n.fd-dot-box { position: relative; display: inline-flex; align-items: center; gap: 6px; }\n.fd-dot-button { display: inline-grid; place-items: center; width: 24px; height: 24px; padding: 0; border: none; border-radius: 50%; background: none; cursor: pointer; }\n.fd-dot-button:hover:not(:disabled) { background: var(--fd-accent-soft); }\n.fd-dot-button:disabled { cursor: default; }\n.fd-dot { display: inline-block; width: 12px; height: 12px; flex: none; border-radius: 50%; background: var(--fd-dot, var(--fd-border-strong)); }\n.fd-dot-button[data-tone=\"muted\"], .fd-dot-item[data-tone=\"muted\"] { --fd-dot: var(--fd-border-strong); }\n.fd-dot-button[data-tone=\"danger\"], .fd-dot-item[data-tone=\"danger\"] { --fd-dot: var(--fd-error); }\n.fd-dot-button[data-tone=\"success\"], .fd-dot-item[data-tone=\"success\"] { --fd-dot: var(--fd-success); }\n.fd-dot-button[data-tone=\"warning\"], .fd-dot-item[data-tone=\"warning\"] { --fd-dot: #d97706; }\n.fd-dot-button[data-tone=\"info\"], .fd-dot-item[data-tone=\"info\"] { --fd-dot: var(--fd-info); }\n.fd-dot-label { font-size: 13px; color: var(--fd-muted); }\n.fd-dot-menu { position: absolute; top: calc(100% + 4px); inset-inline-start: 0; z-index: 30; min-width: 180px; padding: 4px; display: grid; background: var(--fd-surface); color: var(--fd-text); border: 1px solid var(--fd-border); border-radius: max(var(--fd-control-radius), 6px); box-shadow: 0 6px 20px rgba(0, 0, 0, 0.16); }\n.fd-dot-item { display: flex; align-items: center; gap: 8px; padding: 6px 10px; border-radius: 4px; cursor: pointer; white-space: nowrap; font-size: 14px; }\n.fd-dot-item:hover, .fd-dot-item:focus { background: var(--fd-accent-soft); outline: none; }\n.fd-dot-item[aria-checked=\"true\"] { font-weight: 600; }\n/* A colour: a swatch of it, and a palette of Flectra's twelve under it; none is a crossed-out square. */\n.fd-colour-box { position: relative; display: inline-flex; align-items: center; gap: 8px; }\n.fd-colour-button, .fd-colour { width: 24px; height: 24px; padding: 0; border: 1px solid var(--fd-border-strong); border-radius: 4px; background: var(--fd-swatch, transparent); cursor: pointer; }\n.fd-colour-button:disabled { cursor: default; }\n.fd-colour-none, .fd-colour[data-colour=\"0\"] { background: linear-gradient(to top right, transparent calc(50% - 1px), var(--fd-error) calc(50% - 1px), var(--fd-error) calc(50% + 1px), transparent calc(50% + 1px)); }\n.fd-colour-palette { position: absolute; top: calc(100% + 4px); inset-inline-start: 0; z-index: 30; display: grid; grid-template-columns: repeat(6, 24px); gap: 6px; padding: 8px; background: var(--fd-surface); border: 1px solid var(--fd-border); border-radius: max(var(--fd-control-radius), 6px); box-shadow: 0 6px 20px rgba(0, 0, 0, 0.16); }\n.fd-colour[aria-checked=\"true\"] { box-shadow: 0 0 0 2px var(--fd-surface), 0 0 0 4px var(--fd-accent); }\n.fd-colour-input { width: 44px; height: 30px; padding: 2px; border: 1px solid var(--fd-border); border-radius: var(--fd-control-radius); background: var(--fd-surface); }\n.fd-colour-code { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 13px; color: var(--fd-muted); }\n/* A value to copy: its box, the button after it. */\n.fd-copy { display: flex; align-items: center; gap: 8px; min-width: 0; }\n.fd-copy > .fd-input { flex: 1 1 auto; min-width: 0; }\n.fd-copy-long { align-items: flex-start; }\n.fd-copy-button { flex: none; }\n/* A range of dates: two boxes, from \u2192 to, in one row that wraps on a phone, its calendar under it marking the days between. */\n.fd-range { position: relative; display: flex; flex-wrap: wrap; align-items: center; gap: 6px; min-width: 0; }\n/* Too narrow for a date and the calendar's button beside it, the button goes under: a date is never cut. */\n.fd-range-box { flex: 1 1 8em; display: flex; flex-wrap: wrap; align-items: center; gap: 4px 8px; min-width: 0; }\n.fd-range-box > .fd-input { flex: 1 1 9em; min-width: 0; }\n.fd-range-box > .fd-input[type=\"datetime-local\"] { flex-basis: 13em; }\n.fd-range-arrow { flex: none; display: inline-block; color: var(--fd-muted); }\n.fd-range-arrow:dir(rtl) { transform: scaleX(-1); }\n.fd-range-calendar .fd-calendar-grid td button.fd-in-range { background: var(--fd-accent-soft); border-radius: 0; }\n/* A timer: its time in even digits, a green dot beating while it runs. */\n.fd-timer { display: inline-flex; align-items: center; gap: 8px; font-variant-numeric: tabular-nums; font-weight: 600; direction: ltr; unicode-bidi: isolate; }\n.fd-timer-dot { width: 8px; height: 8px; border-radius: 50%; background: var(--fd-border-strong); }\n.fd-timer[data-running] .fd-timer-dot { background: var(--fd-success); animation: fd-timer-beat 1s ease-in-out infinite alternate; }\n.fd-timer[data-running] .fd-timer-time { color: var(--fd-success); }\n@keyframes fd-timer-beat { to { opacity: 0.35; } }\n@media (prefers-reduced-motion: reduce) { .fd-timer[data-running] .fd-timer-dot { animation: none; } }\n/* A document shown inline: the browser's own viewer, as wide as the field. */\n.fd-embed { display: grid; gap: 8px; min-width: 0; }\n.fd-embed-bar { display: flex; align-items: center; gap: 8px; min-width: 0; }\n.fd-embed-bar > .fd-input { flex: 1 1 auto; min-width: 0; }\n.fd-embed-open { flex: none; }\n.fd-embed-frame { display: block; width: 100%; border: 1px solid var(--fd-border); border-radius: max(var(--fd-control-radius), 4px); background: var(--fd-page); }\n.fd-embed-none { padding: 24px 12px; text-align: center; color: var(--fd-muted); border: 1px dashed var(--fd-border); border-radius: max(var(--fd-control-radius), 4px); }\n/* An analytic distribution: lines of an account and its share, their total under them. */\n.fd-distribution { display: grid; gap: 6px; min-width: 0; }\n.fd-distribution-table .fd-distribution-share { width: 8.5em; }\n.fd-distribution-table .fd-share { text-align: end; padding-inline-end: calc(var(--fd-pad-x) + 2ch); }\n.fd-distribution-total { font-weight: 600; text-align: end; padding-inline-end: calc(var(--fd-pad-x) + 2ch + 4px); font-variant-numeric: tabular-nums; }\n.fd-distribution-add { justify-self: start; }\n/* Tax totals: words at the start, amounts at the end in even digits, the total in bold over a rule. */\n.fd-tax-totals { justify-self: end; border-collapse: collapse; min-width: min(100%, 320px); font-variant-numeric: tabular-nums; }\n.fd-tax-totals th { text-align: start; font-weight: 400; color: var(--fd-muted); padding: 3px 16px 3px 0; padding-inline: 0 16px; }\n.fd-tax-totals td { text-align: end; padding: 3px 0; white-space: nowrap; }\n.fd-tax-totals .fd-tax-subtotal th { color: var(--fd-text); }\n.fd-tax-totals .fd-tax-total :is(th, td) { font-weight: 700; color: var(--fd-text); font-size: 15px; border-top: 1px solid var(--fd-border); padding-top: 6px; }\n.fd-tax-totals .fd-input { width: 9em; text-align: end; }\n/* Payments: each one's button, \"Paid on \u2026\" and its amount; its details in a small box under it; the amount due in bold. */\n.fd-payments { display: grid; gap: 6px; justify-self: end; min-width: min(100%, 320px); font-variant-numeric: tabular-nums; }\n.fd-payments-list { list-style: none; margin: 0; padding: 0; display: grid; gap: 4px; }\n.fd-payment { position: relative; display: flex; align-items: center; gap: 8px; }\n.fd-payment-info { flex: none; width: 20px; height: 20px; padding: 0; border: 1px solid var(--fd-border-strong); border-radius: 50%; background: var(--fd-surface); color: var(--fd-muted); font: italic 600 12px/1 Georgia, serif; cursor: pointer; }\n.fd-payment-info:hover, .fd-payment-info[aria-expanded=\"true\"] { color: var(--fd-accent); border-color: var(--fd-accent); }\n.fd-payment-date { flex: 1 1 auto; font-style: italic; color: var(--fd-muted); }\n.fd-payment-amount { white-space: nowrap; }\n.fd-payment-details { position: absolute; top: calc(100% + 4px); inset-inline-start: 0; z-index: 30; min-width: 240px; display: grid; gap: 6px; padding: 10px 12px; background: var(--fd-surface); color: var(--fd-text); border: 1px solid var(--fd-border); border-radius: max(var(--fd-control-radius), 6px); box-shadow: 0 6px 20px rgba(0, 0, 0, 0.16); }\n.fd-payment-details dl { display: grid; grid-template-columns: auto 1fr; gap: 2px 12px; margin: 0; }\n.fd-payment-details dt { color: var(--fd-muted); }\n.fd-payment-details dd { margin: 0; }\n.fd-payment-open { justify-self: start; }\n.fd-payment-due { display: flex; justify-content: space-between; gap: 16px; padding-top: 6px; border-top: 1px solid var(--fd-border); font-weight: 600; }\n/* Properties: in two columns when asked, one on a narrow form; adding one in place, its name and kind in a row. */\n.fd-properties-list { display: grid; gap: 8px; min-width: 0; }\n.fd-properties[data-columns=\"2\"] > .fd-properties-list { grid-template-columns: repeat(2, minmax(0, 1fr)); column-gap: 24px; }\n@container (max-width: 520px) { .fd-properties[data-columns=\"2\"] > .fd-properties-list { grid-template-columns: minmax(0, 1fr); } }\n.fd-property-add { justify-self: start; }\n.fd-property-new { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }\n.fd-property-new > .fd-input { flex: 1 1 10em; width: auto; }\n";
|