@studiolxd/brand 49.11.0 → 49.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/CHANGELOG.md +118 -0
- package/dist/_shared/tokens.js +160 -0
- package/dist/_types/messages/BrandMessages.d.ts +13 -1
- package/dist/_types/messages/index.d.ts +1 -1
- package/dist/_types/molecules/ClockWidget/ClockWidget.d.ts +116 -0
- package/dist/_types/molecules/ClockWidget/clockDuration.d.ts +23 -0
- package/dist/_types/molecules/Heatmap/Heatmap.d.ts +101 -0
- package/dist/_types/molecules/Heatmap/heatmapScale.d.ts +39 -0
- package/dist/_types/molecules/RecurrenceField/RecurrenceField.d.ts +93 -0
- package/dist/_types/molecules/RecurrenceField/recurrenceRule.d.ts +62 -0
- package/dist/_types/molecules/Timeline/Timeline.d.ts +77 -0
- package/dist/_types/organisms/OrgChart/OrgChart.d.ts +104 -0
- package/dist/_types/organisms/PlanningGrid/PlanningGrid.d.ts +120 -0
- package/dist/_types/organisms/PlanningGrid/planningHours.d.ts +10 -0
- package/dist/brand.css +396 -1
- package/dist/clock-widget.css +1 -0
- package/dist/clock-widget.js +126 -0
- package/dist/heatmap.css +1 -0
- package/dist/heatmap.js +104 -0
- package/dist/org-chart.css +1 -0
- package/dist/org-chart.js +122 -0
- package/dist/planning-grid.css +1 -0
- package/dist/planning-grid.js +167 -0
- package/dist/recurrence-field.css +1 -0
- package/dist/recurrence-field.js +185 -0
- package/dist/timeline.css +1 -0
- package/dist/timeline.js +57 -0
- package/dist/tokens.css +414 -1
- package/package.json +31 -1
- package/src/tokens/index.css +6 -0
- package/src/tokens/molecules/clock-widget.css +36 -0
- package/src/tokens/molecules/clock-widget.ts +7 -0
- package/src/tokens/molecules/heatmap.css +78 -0
- package/src/tokens/molecules/heatmap.ts +7 -0
- package/src/tokens/molecules/org-chart.css +59 -0
- package/src/tokens/molecules/org-chart.ts +7 -0
- package/src/tokens/molecules/planning-grid.css +58 -0
- package/src/tokens/molecules/planning-grid.ts +7 -0
- package/src/tokens/molecules/recurrence-field.css +21 -0
- package/src/tokens/molecules/recurrence-field.ts +7 -0
- package/src/tokens/molecules/timeline.css +36 -0
- package/src/tokens/molecules/timeline.ts +7 -0
- package/src/tokens/scss/_index.legacy.scss +6 -0
- package/src/tokens/scss/_index.scss +6 -0
- package/src/tokens/scss/molecules/_clock-widget.scss +22 -0
- package/src/tokens/scss/molecules/_heatmap.scss +48 -0
- package/src/tokens/scss/molecules/_org-chart.scss +39 -0
- package/src/tokens/scss/molecules/_planning-grid.scss +36 -0
- package/src/tokens/scss/molecules/_recurrence-field.scss +11 -0
- package/src/tokens/scss/molecules/_timeline.scss +22 -0
- package/src/tokens/surface-invert.css +56 -0
- package/src/tokens/surface-light.css +56 -0
- package/src/tokens/surface-public.css +7 -0
- package/src/tokens/tokens.json +160 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.clock-widget{gap:var(--clock-widget-gap);font-family:var(--clock-widget-font-family);flex-direction:column;display:flex}.clock-widget__header{gap:var(--clock-widget-header-gap);flex-direction:column;display:flex}.clock-widget__date{font-size:var(--clock-widget-date-font-size);color:var(--clock-widget-date-color);margin-block:0}.clock-widget__status{align-items:center;gap:var(--clock-widget-status-gap);font-size:var(--clock-widget-status-font-size);color:var(--clock-widget-status-color);margin-block:0;display:flex}.clock-widget__dot{inline-size:var(--clock-widget-status-dot-size);block-size:var(--clock-widget-status-dot-size);border-radius:var(--clock-widget-status-dot-radius);background-color:var(--clock-widget-status-dot-closed-bg);flex-shrink:0}.clock-widget__dot.clock-widget__dot--open{background-color:var(--clock-widget-status-dot-open-bg)}.clock-widget__elapsed{gap:var(--clock-widget-header-gap);flex-direction:column;display:flex}.clock-widget__elapsed-value{font-size:var(--clock-widget-elapsed-font-size);font-weight:var(--clock-widget-elapsed-font-weight);line-height:var(--clock-widget-elapsed-line-height);color:var(--clock-widget-elapsed-color);font-variant-numeric:tabular-nums;margin-block:0}.clock-widget__elapsed-label{font-size:var(--clock-widget-elapsed-label-font-size);color:var(--clock-widget-elapsed-label-color)}.clock-widget__actions{display:flex}.clock-widget__footer{margin-block-start:var(--clock-widget-footer-margin-block-start)}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import './clock-widget.css';
|
|
3
|
+
import { n as e } from "./_shared/brandmessagescontext.js";
|
|
4
|
+
import { Button as t } from "./button.js";
|
|
5
|
+
import { Heading as n } from "./heading.js";
|
|
6
|
+
import { Alert as r } from "./alert.js";
|
|
7
|
+
import { Table as i, TableBody as a, TableCell as o, TableFooter as s, TableHead as c, TableHeader as l, TableRow as u } from "./table.js";
|
|
8
|
+
import { forwardRef as d, useEffect as f, useState as p } from "react";
|
|
9
|
+
import { Fragment as m, jsx as h, jsxs as g } from "react/jsx-runtime";
|
|
10
|
+
//#region src/stories/molecules/ClockWidget/clockDuration.ts
|
|
11
|
+
function _(e, t) {
|
|
12
|
+
let n = e.end ?? t;
|
|
13
|
+
return Math.max(0, Math.round((n.getTime() - e.start.getTime()) / 6e4));
|
|
14
|
+
}
|
|
15
|
+
function v(e, t) {
|
|
16
|
+
return e.reduce((e, n) => e + _(n, t), 0);
|
|
17
|
+
}
|
|
18
|
+
function y(e) {
|
|
19
|
+
return e.some((e) => e.end === null || e.end === void 0);
|
|
20
|
+
}
|
|
21
|
+
//#endregion
|
|
22
|
+
//#region src/stories/molecules/ClockWidget/ClockWidget.tsx
|
|
23
|
+
var b = d(function({ entries: d, date: b, dayState: x = "working", onClockIn: S, onClockOut: C, pending: w = !1, disabled: T = !1, error: E, now: D, locale: O = "es-ES", timeZone: k, headingLevel: A = 2, showEntries: j = !0, footer: M, titleLabel: N, clockInLabel: P, clockOutLabel: F, pendingLabel: I, elapsedLabel: L, dayStateLabel: R, formatDuration: z, className: B, ...V }, H) {
|
|
24
|
+
let U = e("clockWidget"), W = y(d), G = W && D === void 0, [K, q] = p(() => Date.now());
|
|
25
|
+
f(() => {
|
|
26
|
+
if (!G) return;
|
|
27
|
+
let e = setInterval(() => q(Date.now()), 1e3);
|
|
28
|
+
return () => clearInterval(e);
|
|
29
|
+
}, [G]);
|
|
30
|
+
let J = D ?? new Date(K), Y = new Intl.DateTimeFormat(O, {
|
|
31
|
+
hour: "2-digit",
|
|
32
|
+
minute: "2-digit",
|
|
33
|
+
timeZone: k
|
|
34
|
+
}), X = (e) => (z ?? U("durationValue"))(Math.floor(e / 60), e % 60), Z = v(d, J), Q = x === "working", $ = R ?? (Q ? null : U(x === "vacation" ? "vacation" : x === "absence" ? "absence" : "nonWorking"));
|
|
35
|
+
return /* @__PURE__ */ g("section", {
|
|
36
|
+
ref: H,
|
|
37
|
+
className: ["clock-widget", B].filter(Boolean).join(" "),
|
|
38
|
+
...V,
|
|
39
|
+
children: [
|
|
40
|
+
/* @__PURE__ */ g("div", {
|
|
41
|
+
className: "clock-widget__header",
|
|
42
|
+
children: [
|
|
43
|
+
/* @__PURE__ */ h(n, {
|
|
44
|
+
level: A,
|
|
45
|
+
children: U("title", N)
|
|
46
|
+
}),
|
|
47
|
+
b ? /* @__PURE__ */ h("p", {
|
|
48
|
+
className: "clock-widget__date",
|
|
49
|
+
children: b
|
|
50
|
+
}) : null,
|
|
51
|
+
$ ? /* @__PURE__ */ g("p", {
|
|
52
|
+
className: "clock-widget__status",
|
|
53
|
+
children: [/* @__PURE__ */ h("span", {
|
|
54
|
+
className: ["clock-widget__dot", W ? "clock-widget__dot--open" : ""].filter(Boolean).join(" "),
|
|
55
|
+
"aria-hidden": "true"
|
|
56
|
+
}), $]
|
|
57
|
+
}) : null
|
|
58
|
+
]
|
|
59
|
+
}),
|
|
60
|
+
E ? /* @__PURE__ */ h(r, {
|
|
61
|
+
variant: "error",
|
|
62
|
+
children: E
|
|
63
|
+
}) : null,
|
|
64
|
+
Q ? /* @__PURE__ */ g(m, { children: [
|
|
65
|
+
/* @__PURE__ */ g("p", {
|
|
66
|
+
className: "clock-widget__elapsed",
|
|
67
|
+
children: [/* @__PURE__ */ h("span", {
|
|
68
|
+
className: "clock-widget__elapsed-value",
|
|
69
|
+
role: "timer",
|
|
70
|
+
children: X(Z)
|
|
71
|
+
}), /* @__PURE__ */ h("span", {
|
|
72
|
+
className: "clock-widget__elapsed-label",
|
|
73
|
+
children: U("elapsed", L)
|
|
74
|
+
})]
|
|
75
|
+
}),
|
|
76
|
+
W && C ? /* @__PURE__ */ h("p", {
|
|
77
|
+
className: "clock-widget__actions",
|
|
78
|
+
children: /* @__PURE__ */ h(t, {
|
|
79
|
+
type: "button",
|
|
80
|
+
variant: "outline",
|
|
81
|
+
destructive: !0,
|
|
82
|
+
disabled: w || T,
|
|
83
|
+
onClick: C,
|
|
84
|
+
children: w ? U("pending", I) : U("clockOut", F)
|
|
85
|
+
})
|
|
86
|
+
}) : null,
|
|
87
|
+
!W && S ? /* @__PURE__ */ h("p", {
|
|
88
|
+
className: "clock-widget__actions",
|
|
89
|
+
children: /* @__PURE__ */ h(t, {
|
|
90
|
+
type: "button",
|
|
91
|
+
variant: "primary",
|
|
92
|
+
disabled: w || T,
|
|
93
|
+
onClick: S,
|
|
94
|
+
children: w ? U("pending", I) : U("clockIn", P)
|
|
95
|
+
})
|
|
96
|
+
}) : null,
|
|
97
|
+
j && d.length > 0 ? /* @__PURE__ */ g(i, {
|
|
98
|
+
caption: U("entries"),
|
|
99
|
+
size: "sm",
|
|
100
|
+
children: [
|
|
101
|
+
/* @__PURE__ */ h(c, { children: /* @__PURE__ */ g(u, { children: [
|
|
102
|
+
/* @__PURE__ */ h(l, { children: U("in") }),
|
|
103
|
+
/* @__PURE__ */ h(l, { children: U("out") }),
|
|
104
|
+
/* @__PURE__ */ h(l, { children: U("duration") })
|
|
105
|
+
] }) }),
|
|
106
|
+
/* @__PURE__ */ h(a, { children: d.map((e) => /* @__PURE__ */ g(u, { children: [
|
|
107
|
+
/* @__PURE__ */ h(o, { children: Y.format(e.start) }),
|
|
108
|
+
/* @__PURE__ */ h(o, { children: e.end ? Y.format(e.end) : U("running") }),
|
|
109
|
+
/* @__PURE__ */ h(o, { children: X(_(e, J)) })
|
|
110
|
+
] }, e.id)) }),
|
|
111
|
+
d.length > 1 ? /* @__PURE__ */ h(s, { children: /* @__PURE__ */ g(u, { children: [/* @__PURE__ */ h(o, {
|
|
112
|
+
colSpan: 2,
|
|
113
|
+
children: U("total")
|
|
114
|
+
}), /* @__PURE__ */ h(o, { children: X(Z) })] }) }) : null
|
|
115
|
+
]
|
|
116
|
+
}) : null
|
|
117
|
+
] }) : null,
|
|
118
|
+
M ? /* @__PURE__ */ h("div", {
|
|
119
|
+
className: "clock-widget__footer",
|
|
120
|
+
children: M
|
|
121
|
+
}) : null
|
|
122
|
+
]
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
//#endregion
|
|
126
|
+
export { b as ClockWidget };
|
package/dist/heatmap.css
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.heatmap{font-family:var(--heatmap-font-family)}.heatmap__wrap{border:var(--heatmap-border-width) solid var(--heatmap-border-color);border-radius:var(--heatmap-radius);overflow:auto visible}.heatmap__table{border-collapse:collapse;inline-size:100%}.heatmap__group{padding-block:var(--heatmap-column-header-padding-block);padding-inline:var(--heatmap-column-header-padding-inline);font-size:var(--heatmap-group-header-font-size);font-weight:var(--heatmap-column-header-font-weight);color:var(--heatmap-group-header-color);background-color:var(--heatmap-column-header-bg);text-align:center;border-block-end:var(--heatmap-border-width) solid var(--heatmap-border-color);border-inline-end:var(--heatmap-border-width) solid var(--heatmap-border-color)}.heatmap__corner,.heatmap__row-header{z-index:1;min-inline-size:var(--heatmap-row-header-width);max-inline-size:var(--heatmap-row-header-width);padding-block:var(--heatmap-row-header-padding-block);padding-inline:var(--heatmap-row-header-padding-inline);text-align:start;background-color:var(--heatmap-row-header-bg);border-inline-end:var(--heatmap-border-width) solid var(--heatmap-border-color);position:sticky;inset-inline-start:0}.heatmap__corner{z-index:2;border-block-end:var(--heatmap-border-width) solid var(--heatmap-border-color)}.heatmap__row-header{font-size:var(--heatmap-row-header-font-size);font-weight:var(--heatmap-row-header-font-weight);color:var(--heatmap-row-header-color)}.heatmap__column-header{min-inline-size:var(--heatmap-column-header-width);padding-block:var(--heatmap-column-header-padding-block);padding-inline:var(--heatmap-column-header-padding-inline);font-size:var(--heatmap-column-header-font-size);font-weight:var(--heatmap-column-header-font-weight);color:var(--heatmap-column-header-color);background-color:var(--heatmap-column-header-bg);text-align:center;vertical-align:bottom;border-block-end:var(--heatmap-border-width) solid var(--heatmap-border-color);border-inline-end:var(--heatmap-border-width) solid var(--heatmap-border-color)}.heatmap__cell{padding-block:var(--heatmap-cell-padding-block);padding-inline:var(--heatmap-cell-padding-inline);font-size:var(--heatmap-cell-font-size);font-weight:var(--heatmap-cell-font-weight);text-align:center;font-variant-numeric:tabular-nums;border-inline-end:var(--heatmap-border-width) solid var(--heatmap-border-color);border-block-end:var(--heatmap-border-width) solid var(--heatmap-border-color)}.heatmap__cell.heatmap__cell--step-1{background-color:var(--heatmap-step-1-bg);color:var(--heatmap-step-1-color)}.heatmap__cell.heatmap__cell--step-2{background-color:var(--heatmap-step-2-bg);color:var(--heatmap-step-2-color)}.heatmap__cell.heatmap__cell--step-3{background-color:var(--heatmap-step-3-bg);color:var(--heatmap-step-3-color)}.heatmap__cell.heatmap__cell--step-4{background-color:var(--heatmap-step-4-bg);color:var(--heatmap-step-4-color)}.heatmap__cell.heatmap__cell--step-5{background-color:var(--heatmap-step-5-bg);color:var(--heatmap-step-5-color)}.heatmap__cell.heatmap__cell--step-6{background-color:var(--heatmap-step-6-bg);color:var(--heatmap-step-6-color)}.heatmap__cell.heatmap__cell--empty{background-color:var(--heatmap-empty-bg);background-image:repeating-linear-gradient(45deg, var(--heatmap-empty-pattern-color) 0, var(--heatmap-empty-pattern-color) var(--heatmap-empty-pattern-width), transparent var(--heatmap-empty-pattern-width), transparent calc(var(--heatmap-empty-pattern-width) * 2))}.heatmap__legend{align-items:center;gap:var(--heatmap-legend-gap);font-size:var(--heatmap-legend-font-size);color:var(--heatmap-legend-color);flex-wrap:wrap;margin-block-start:var(--heatmap-margin-block-start);display:flex}.heatmap__ramp{gap:var(--heatmap-legend-swatch-gap);display:flex}.heatmap__swatch{inline-size:var(--heatmap-legend-swatch-size);block-size:var(--heatmap-legend-swatch-size)}.heatmap__swatch.heatmap__swatch--step-1{background-color:var(--heatmap-step-1-bg)}.heatmap__swatch.heatmap__swatch--step-2{background-color:var(--heatmap-step-2-bg)}.heatmap__swatch.heatmap__swatch--step-3{background-color:var(--heatmap-step-3-bg)}.heatmap__swatch.heatmap__swatch--step-4{background-color:var(--heatmap-step-4-bg)}.heatmap__swatch.heatmap__swatch--step-5{background-color:var(--heatmap-step-5-bg)}.heatmap__swatch.heatmap__swatch--step-6{background-color:var(--heatmap-step-6-bg)}
|
package/dist/heatmap.js
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import './heatmap.css';
|
|
3
|
+
import { n as e } from "./_shared/brandmessagescontext.js";
|
|
4
|
+
import { VisuallyHidden as t } from "./visually-hidden.js";
|
|
5
|
+
import { forwardRef as n, useMemo as r } from "react";
|
|
6
|
+
import { jsx as i, jsxs as a } from "react/jsx-runtime";
|
|
7
|
+
function o(e, t) {
|
|
8
|
+
if (e == null || !Number.isFinite(e)) return null;
|
|
9
|
+
let n = Math.max(2, Math.min(6, Math.round(t.steps)));
|
|
10
|
+
if (t.max <= t.min) return n;
|
|
11
|
+
let r = (Math.max(t.min, Math.min(t.max, e)) - t.min) / (t.max - t.min);
|
|
12
|
+
return Math.min(n, Math.floor(r * n) + 1);
|
|
13
|
+
}
|
|
14
|
+
function s(e, t) {
|
|
15
|
+
let n = Math.max(2, Math.min(6, Math.round(t)));
|
|
16
|
+
return Math.round((Math.max(1, Math.min(n, Math.round(e))) - 1) * 5 / (n - 1)) + 1;
|
|
17
|
+
}
|
|
18
|
+
//#endregion
|
|
19
|
+
//#region src/stories/molecules/Heatmap/Heatmap.tsx
|
|
20
|
+
var c = (e, t) => `${e}\u0000${t}`, l = n(function({ rows: n, columns: l, cells: u, min: d = 0, max: f, steps: p = 5, rowHeader: m, showValues: h = !0, formatValue: g, locale: _ = "es-ES", showLegend: v = !0, minLabel: y, maxLabel: b, label: x, emptyLabel: S, scaleLabel: C, className: w, ...T }, E) {
|
|
21
|
+
let D = e("heatmap"), O = r(() => {
|
|
22
|
+
let e = /* @__PURE__ */ new Map();
|
|
23
|
+
for (let t of u) e.set(c(t.rowId, t.columnKey), t.value);
|
|
24
|
+
return e;
|
|
25
|
+
}, [u]), k = r(() => {
|
|
26
|
+
if (f !== void 0) return f;
|
|
27
|
+
let e = u.map((e) => e.value).filter((e) => e !== null && Number.isFinite(e));
|
|
28
|
+
return e.length > 0 ? Math.max(...e) : d + 1;
|
|
29
|
+
}, [
|
|
30
|
+
u,
|
|
31
|
+
f,
|
|
32
|
+
d
|
|
33
|
+
]), A = Math.max(2, Math.min(6, Math.round(p))), j = {
|
|
34
|
+
min: d,
|
|
35
|
+
max: k,
|
|
36
|
+
steps: A
|
|
37
|
+
}, M = r(() => new Intl.NumberFormat(_, { maximumFractionDigits: 1 }), [_]), N = g ?? ((e) => M.format(e)), P = r(() => {
|
|
38
|
+
let e = [];
|
|
39
|
+
for (let t of l) {
|
|
40
|
+
let n = e[e.length - 1];
|
|
41
|
+
n && n.group === t.group ? n.span += 1 : e.push({
|
|
42
|
+
group: t.group,
|
|
43
|
+
span: 1
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
return e;
|
|
47
|
+
}, [l]), F = l.some((e) => e.group !== void 0);
|
|
48
|
+
return /* @__PURE__ */ a("div", {
|
|
49
|
+
ref: E,
|
|
50
|
+
className: ["heatmap", w].filter(Boolean).join(" "),
|
|
51
|
+
...T,
|
|
52
|
+
children: [/* @__PURE__ */ i("div", {
|
|
53
|
+
className: "heatmap__wrap",
|
|
54
|
+
children: /* @__PURE__ */ a("table", {
|
|
55
|
+
className: "heatmap__table",
|
|
56
|
+
children: [
|
|
57
|
+
/* @__PURE__ */ i("caption", {
|
|
58
|
+
className: "visually-hidden",
|
|
59
|
+
children: D("label", x)
|
|
60
|
+
}),
|
|
61
|
+
/* @__PURE__ */ a("thead", { children: [F ? /* @__PURE__ */ a("tr", { children: [/* @__PURE__ */ i("td", { className: "heatmap__corner" }), P.map((e, t) => /* @__PURE__ */ i("th", {
|
|
62
|
+
className: "heatmap__group",
|
|
63
|
+
scope: "colgroup",
|
|
64
|
+
colSpan: e.span,
|
|
65
|
+
children: e.group
|
|
66
|
+
}, `${e.group ?? ""}-${t}`))] }) : null, /* @__PURE__ */ a("tr", { children: [/* @__PURE__ */ i("th", {
|
|
67
|
+
className: "heatmap__corner",
|
|
68
|
+
scope: "col",
|
|
69
|
+
children: m
|
|
70
|
+
}), l.map((e) => /* @__PURE__ */ i("th", {
|
|
71
|
+
className: "heatmap__column-header",
|
|
72
|
+
scope: "col",
|
|
73
|
+
children: e.label
|
|
74
|
+
}, e.key))] })] }),
|
|
75
|
+
/* @__PURE__ */ i("tbody", { children: n.map((e) => /* @__PURE__ */ a("tr", { children: [/* @__PURE__ */ i("th", {
|
|
76
|
+
className: "heatmap__row-header",
|
|
77
|
+
scope: "row",
|
|
78
|
+
children: e.label
|
|
79
|
+
}), l.map((n) => {
|
|
80
|
+
let r = O.get(c(e.id, n.key)) ?? null, a = o(r, j), l = ["heatmap__cell", a === null ? "heatmap__cell--empty" : `heatmap__cell--step-${s(a, A)}`].join(" "), u = r === null ? D("empty", S) : N(r);
|
|
81
|
+
return /* @__PURE__ */ i("td", {
|
|
82
|
+
className: l,
|
|
83
|
+
children: h && r !== null ? u : /* @__PURE__ */ i(t, { children: u })
|
|
84
|
+
}, n.key);
|
|
85
|
+
})] }, e.id)) })
|
|
86
|
+
]
|
|
87
|
+
})
|
|
88
|
+
}), v ? /* @__PURE__ */ a("p", {
|
|
89
|
+
className: "heatmap__legend",
|
|
90
|
+
children: [
|
|
91
|
+
/* @__PURE__ */ i("span", { children: y ?? N(d) }),
|
|
92
|
+
/* @__PURE__ */ i("span", {
|
|
93
|
+
className: "heatmap__ramp",
|
|
94
|
+
role: "img",
|
|
95
|
+
"aria-label": D("scale", C),
|
|
96
|
+
children: Array.from({ length: A }, (e, t) => /* @__PURE__ */ i("span", { className: `heatmap__swatch heatmap__swatch--step-${s(t + 1, A)}` }, t))
|
|
97
|
+
}),
|
|
98
|
+
/* @__PURE__ */ i("span", { children: b ?? N(k) })
|
|
99
|
+
]
|
|
100
|
+
}) : null]
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
//#endregion
|
|
104
|
+
export { l as Heatmap };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.org-chart{gap:var(--org-chart-gap);font-family:var(--org-chart-font-family);flex-direction:column;display:flex}.org-chart__toolbar{align-items:center;gap:var(--org-chart-gap);display:flex}.org-chart__viewport{max-block-size:var(--org-chart-viewport-block-size);padding-block:var(--org-chart-viewport-padding);padding-inline:var(--org-chart-viewport-padding);background-color:var(--org-chart-viewport-bg);border:var(--org-chart-viewport-border-width) solid var(--org-chart-viewport-border-color);border-radius:var(--org-chart-viewport-radius);overflow:auto}.org-chart__viewport:focus-visible{outline:var(--org-chart-focus-ring-width) solid var(--org-chart-focus-ring-color);outline-offset:var(--org-chart-focus-ring-offset)}.org-chart__canvas{zoom:var(--org-chart-zoom,1);justify-content:center;min-inline-size:max-content;display:flex}.org-chart__level{justify-content:center;gap:var(--org-chart-sibling-gap);margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;list-style:none;display:flex}.org-chart__level--children{padding-block-start:var(--org-chart-connector-length);position:relative}.org-chart__level--children:before{content:"";inline-size:var(--org-chart-connector-width);block-size:calc(var(--org-chart-connector-length) / 2);background-color:var(--org-chart-connector-color);position:absolute;inset-block-start:0;inset-inline-start:50%;transform:translate(-50%)}.org-chart__node{flex-direction:column;align-items:center;display:flex;position:relative}.org-chart__level--children>.org-chart__node:before{content:"";inline-size:var(--org-chart-connector-width);block-size:calc(var(--org-chart-connector-length) / 2);background-color:var(--org-chart-connector-color);position:absolute;inset-block-start:calc(-1 * var(--org-chart-connector-length) / 2);inset-inline-start:50%;transform:translate(-50%)}.org-chart__level--children>.org-chart__node:after{content:"";inline-size:100%;block-size:var(--org-chart-connector-width);background-color:var(--org-chart-connector-color);position:absolute;inset-block-start:calc(-1 * var(--org-chart-connector-length) / 2);inset-inline-start:0}.org-chart__level--children>.org-chart__node:first-child:after{inline-size:50%;inset-inline-start:50%}.org-chart__level--children>.org-chart__node:last-child:after{inline-size:50%;inset-inline-start:0}.org-chart__level--children>.org-chart__node:only-child:after{content:none}.org-chart__card{gap:var(--org-chart-card-gap);inline-size:var(--org-chart-card-inline-size);padding-block:var(--org-chart-card-padding-block);padding-inline:var(--org-chart-card-padding-inline);background-color:var(--org-chart-card-bg);border:var(--org-chart-card-border-width) solid var(--org-chart-card-border-color);border-radius:var(--org-chart-card-radius);text-align:start;flex-direction:column;display:flex}.org-chart__header{justify-content:space-between;align-items:center;gap:var(--org-chart-group-gap);display:flex}.org-chart__name{font-size:var(--org-chart-name-font-size);font-weight:var(--org-chart-name-font-weight);color:var(--org-chart-name-color);margin-block:0}.org-chart__group+.org-chart__group{margin-block-start:var(--org-chart-group-margin-block-start)}.org-chart__group-label{font-size:var(--org-chart-group-font-size);color:var(--org-chart-group-color);margin-block-end:var(--org-chart-group-gap);display:block}.org-chart__people{gap:var(--org-chart-person-gap);flex-direction:column;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;list-style:none;display:flex}.org-chart__person{font-size:var(--org-chart-person-font-size);color:var(--org-chart-person-color)}.org-chart__role{font-size:var(--org-chart-person-role-font-size);color:var(--org-chart-person-role-color);display:block}.org-chart__empty{font-size:var(--org-chart-person-font-size);color:var(--org-chart-empty-color)}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import './org-chart.css';
|
|
3
|
+
import { n as e } from "./_shared/brandmessagescontext.js";
|
|
4
|
+
import { Icon as t } from "./icon.js";
|
|
5
|
+
import { Button as n } from "./button.js";
|
|
6
|
+
import { t as r } from "./_shared/css-properties.js";
|
|
7
|
+
import { forwardRef as i, useState as a } from "react";
|
|
8
|
+
import { Fragment as o, jsx as s, jsxs as c } from "react/jsx-runtime";
|
|
9
|
+
//#region src/stories/organisms/OrgChart/OrgChart.tsx
|
|
10
|
+
var l = (e, t, n) => Math.min(n, Math.max(t, e)), u = i(function({ nodes: i, collapsed: u, defaultCollapsed: d, onCollapsedChange: f, zoom: p, defaultZoom: m = 1, onZoomChange: h, minZoom: g = .5, maxZoom: _ = 1.5, zoomStep: v = .1, showZoom: y = !0, toolbar: b, showPeople: x = !0, label: S, managersLabel: C, membersLabel: w, className: T, ...E }, D) {
|
|
11
|
+
let O = e("orgChart"), [k, A] = a(d ?? []), j = u ?? k, [M, N] = a(m), P = l(p ?? M, g, _), F = r({ "--org-chart-zoom": String(P) }), I = (e) => {
|
|
12
|
+
let t = j.includes(e) ? j.filter((t) => t !== e) : [...j, e];
|
|
13
|
+
u === void 0 && A(t), f?.(t);
|
|
14
|
+
}, L = (e) => {
|
|
15
|
+
let t = l(Number(e.toFixed(4)), g, _);
|
|
16
|
+
p === void 0 && N(t), h?.(t);
|
|
17
|
+
}, R = (e, t, n) => /* @__PURE__ */ c("div", {
|
|
18
|
+
className: "org-chart__group",
|
|
19
|
+
children: [/* @__PURE__ */ s("span", {
|
|
20
|
+
className: "org-chart__group-label",
|
|
21
|
+
children: t
|
|
22
|
+
}), e && e.length > 0 ? /* @__PURE__ */ s("ul", {
|
|
23
|
+
className: "org-chart__people",
|
|
24
|
+
children: e.map((e) => /* @__PURE__ */ c("li", {
|
|
25
|
+
className: "org-chart__person",
|
|
26
|
+
children: [e.label ?? e.name, e.role ? /* @__PURE__ */ s("span", {
|
|
27
|
+
className: "org-chart__role",
|
|
28
|
+
children: e.role
|
|
29
|
+
}) : null]
|
|
30
|
+
}, e.id))
|
|
31
|
+
}) : /* @__PURE__ */ s("span", {
|
|
32
|
+
className: "org-chart__empty",
|
|
33
|
+
children: n
|
|
34
|
+
})]
|
|
35
|
+
}), z = (e, r) => /* @__PURE__ */ s("ul", {
|
|
36
|
+
className: ["org-chart__level", r ? "org-chart__level--root" : "org-chart__level--children"].join(" "),
|
|
37
|
+
children: e.map((e) => {
|
|
38
|
+
let r = e.children ?? [], i = j.includes(e.id), a = r.length > 0 && !i;
|
|
39
|
+
return /* @__PURE__ */ c("li", {
|
|
40
|
+
className: "org-chart__node",
|
|
41
|
+
children: [/* @__PURE__ */ c("div", {
|
|
42
|
+
className: "org-chart__card",
|
|
43
|
+
children: [/* @__PURE__ */ c("div", {
|
|
44
|
+
className: "org-chart__header",
|
|
45
|
+
children: [/* @__PURE__ */ s("p", {
|
|
46
|
+
className: "org-chart__name",
|
|
47
|
+
children: e.label ?? e.name
|
|
48
|
+
}), r.length > 0 ? /* @__PURE__ */ s(n, {
|
|
49
|
+
type: "button",
|
|
50
|
+
variant: "ghost",
|
|
51
|
+
size: "sm",
|
|
52
|
+
iconOnly: !0,
|
|
53
|
+
"aria-label": i ? O("expand")(e.name) : O("collapse")(e.name),
|
|
54
|
+
"aria-expanded": !i,
|
|
55
|
+
onClick: () => I(e.id),
|
|
56
|
+
children: /* @__PURE__ */ s(t, {
|
|
57
|
+
name: i ? "chevron-right" : "chevron-down",
|
|
58
|
+
size: "sm"
|
|
59
|
+
})
|
|
60
|
+
}) : null]
|
|
61
|
+
}), x ? /* @__PURE__ */ c("div", { children: [R(e.managers, O("managers", C), O("noManagers")), R(e.members, O("members", w), O("noMembers"))] }) : null]
|
|
62
|
+
}), a ? z(r, !1) : null]
|
|
63
|
+
}, e.id);
|
|
64
|
+
})
|
|
65
|
+
});
|
|
66
|
+
return /* @__PURE__ */ c("div", {
|
|
67
|
+
ref: D,
|
|
68
|
+
className: ["org-chart", T].filter(Boolean).join(" "),
|
|
69
|
+
...E,
|
|
70
|
+
children: [y || b ? /* @__PURE__ */ c("div", {
|
|
71
|
+
className: "org-chart__toolbar",
|
|
72
|
+
children: [y ? /* @__PURE__ */ c(o, { children: [
|
|
73
|
+
/* @__PURE__ */ s(n, {
|
|
74
|
+
type: "button",
|
|
75
|
+
variant: "outline",
|
|
76
|
+
size: "sm",
|
|
77
|
+
iconOnly: !0,
|
|
78
|
+
"aria-label": O("zoomOut"),
|
|
79
|
+
disabled: P <= g,
|
|
80
|
+
onClick: () => L(P - v),
|
|
81
|
+
children: /* @__PURE__ */ s(t, {
|
|
82
|
+
name: "zoom-out",
|
|
83
|
+
size: "sm"
|
|
84
|
+
})
|
|
85
|
+
}),
|
|
86
|
+
/* @__PURE__ */ s(n, {
|
|
87
|
+
type: "button",
|
|
88
|
+
variant: "outline",
|
|
89
|
+
size: "sm",
|
|
90
|
+
iconOnly: !0,
|
|
91
|
+
"aria-label": O("zoomIn"),
|
|
92
|
+
disabled: P >= _,
|
|
93
|
+
onClick: () => L(P + v),
|
|
94
|
+
children: /* @__PURE__ */ s(t, {
|
|
95
|
+
name: "zoom-in",
|
|
96
|
+
size: "sm"
|
|
97
|
+
})
|
|
98
|
+
}),
|
|
99
|
+
/* @__PURE__ */ s(n, {
|
|
100
|
+
type: "button",
|
|
101
|
+
variant: "text",
|
|
102
|
+
size: "sm",
|
|
103
|
+
disabled: P === 1,
|
|
104
|
+
onClick: () => L(1),
|
|
105
|
+
children: O("zoomReset")
|
|
106
|
+
})
|
|
107
|
+
] }) : null, b]
|
|
108
|
+
}) : null, /* @__PURE__ */ s("div", {
|
|
109
|
+
className: "org-chart__viewport",
|
|
110
|
+
tabIndex: 0,
|
|
111
|
+
role: "group",
|
|
112
|
+
"aria-label": O("label", S),
|
|
113
|
+
children: /* @__PURE__ */ s("div", {
|
|
114
|
+
className: "org-chart__canvas",
|
|
115
|
+
ref: F,
|
|
116
|
+
children: z(i, !0)
|
|
117
|
+
})
|
|
118
|
+
})]
|
|
119
|
+
});
|
|
120
|
+
});
|
|
121
|
+
//#endregion
|
|
122
|
+
export { u as OrgChart };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.planning-grid{font-family:var(--planning-grid-font-family)}.planning-grid__wrap{border:var(--planning-grid-border-width) solid var(--planning-grid-border-color);border-radius:var(--planning-grid-radius);overflow:auto visible}.planning-grid__table{border-collapse:collapse;inline-size:100%}.planning-grid__corner,.planning-grid__row-header,.planning-grid__footer-header{z-index:1;min-inline-size:var(--planning-grid-row-header-width);max-inline-size:var(--planning-grid-row-header-width);padding-block:var(--planning-grid-row-header-padding-block);padding-inline:var(--planning-grid-row-header-padding-inline);text-align:start;background-color:var(--planning-grid-row-header-bg);border-inline-end:var(--planning-grid-border-width) solid var(--planning-grid-border-color);position:sticky;inset-inline-start:0}.planning-grid__corner{z-index:2;background-color:var(--planning-grid-column-header-bg);border-block-end:var(--planning-grid-border-width) solid var(--planning-grid-border-color)}.planning-grid__row-header{font-size:var(--planning-grid-row-header-font-size);font-weight:var(--planning-grid-row-header-font-weight);color:var(--planning-grid-row-header-color)}.planning-grid__footer-header{background-color:var(--planning-grid-footer-bg);font-size:var(--planning-grid-row-header-font-size);font-weight:var(--planning-grid-footer-font-weight);color:var(--planning-grid-footer-color)}.planning-grid__column-header{min-inline-size:var(--planning-grid-column-width);padding-block:var(--planning-grid-column-header-padding-block);padding-inline:var(--planning-grid-cell-padding-inline);background-color:var(--planning-grid-column-header-bg);font-size:var(--planning-grid-column-header-font-size);font-weight:var(--planning-grid-column-header-font-weight);color:var(--planning-grid-column-header-color);text-align:center;border-block-end:var(--planning-grid-border-width) solid var(--planning-grid-border-color);border-inline-end:var(--planning-grid-border-width) solid var(--planning-grid-border-color)}.planning-grid__column-sub{font-size:var(--planning-grid-column-header-sub-font-size);font-weight:var(--planning-grid-row-header-font-weight);color:var(--planning-grid-column-header-sub-color);display:block}.planning-grid__column-header.planning-grid__column-header--current{outline:var(--planning-grid-current-outline-width) solid var(--planning-grid-current-outline-color);outline-offset:calc(-1 * var(--planning-grid-current-outline-width))}.planning-grid__cell{padding-block:var(--planning-grid-cell-padding-block);padding-inline:var(--planning-grid-cell-padding-inline);font-size:var(--planning-grid-cell-font-size);color:var(--planning-grid-cell-color);text-align:center;font-variant-numeric:tabular-nums;border-inline-end:var(--planning-grid-border-width) solid var(--planning-grid-border-color);border-block-end:var(--planning-grid-border-width) solid var(--planning-grid-border-color)}.planning-grid__cell.planning-grid__cell--readonly{background-color:var(--planning-grid-cell-readonly-bg);color:var(--planning-grid-cell-readonly-color)}.planning-grid__cell.planning-grid__cell--pending{opacity:var(--planning-grid-pending-opacity)}.planning-grid__input{inline-size:var(--planning-grid-cell-input-width);text-align:center}.planning-grid__footer-cell{padding-block:var(--planning-grid-cell-padding-block);padding-inline:var(--planning-grid-cell-padding-inline);background-color:var(--planning-grid-footer-bg);font-size:var(--planning-grid-cell-font-size);font-weight:var(--planning-grid-footer-font-weight);color:var(--planning-grid-footer-color);text-align:center;font-variant-numeric:tabular-nums;border-inline-end:var(--planning-grid-border-width) solid var(--planning-grid-border-color)}.planning-grid__footer-cell.planning-grid__footer-cell--over{color:var(--planning-grid-over-color)}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import './planning-grid.css';
|
|
3
|
+
import { n as e } from "./_shared/brandmessagescontext.js";
|
|
4
|
+
import { VisuallyHidden as t } from "./visually-hidden.js";
|
|
5
|
+
import { Input as n } from "./input.js";
|
|
6
|
+
import { forwardRef as r, useId as i, useMemo as a, useState as o } from "react";
|
|
7
|
+
import { Fragment as s, jsx as c, jsxs as l } from "react/jsx-runtime";
|
|
8
|
+
//#region src/stories/organisms/PlanningGrid/planningHours.ts
|
|
9
|
+
function u(e) {
|
|
10
|
+
let t = e.trim().replace(",", ".");
|
|
11
|
+
if (t === "") return 0;
|
|
12
|
+
if (!/^\d*\.?\d*$/.test(t)) return null;
|
|
13
|
+
let n = Number(t);
|
|
14
|
+
return Number.isFinite(n) && n >= 0 ? n : null;
|
|
15
|
+
}
|
|
16
|
+
//#endregion
|
|
17
|
+
//#region src/stories/organisms/PlanningGrid/PlanningGrid.tsx
|
|
18
|
+
var d = (e, t) => `${e}\u0000${t}`, f = r(function({ rows: n, columns: r, cells: i, onCellChange: o, readOnly: s = !1, rowHeader: u, showRowTotals: f = !0, showColumnTotals: m = !0, showCapacity: h = !1, showRemaining: g = !0, max: _ = 999, locale: v = "es-ES", formatHours: y, size: b = "sm", label: x, cellLabel: S, className: C, ...w }, T) {
|
|
19
|
+
let E = e("planningGrid"), D = a(() => {
|
|
20
|
+
let e = /* @__PURE__ */ new Map();
|
|
21
|
+
for (let t of i) e.set(d(t.rowId, t.columnKey), t);
|
|
22
|
+
return e;
|
|
23
|
+
}, [i]), O = a(() => new Intl.NumberFormat(v, { maximumFractionDigits: 2 }), [v]), k = y ?? ((e) => `${O.format(e)} h`), A = (e, t) => D.get(d(e, t))?.value ?? 0, j = (e) => r.reduce((t, n) => t + A(e, n.key), 0), M = (e) => n.reduce((t, n) => t + A(n.id, e), 0), N = r.some((e) => e.capacity !== void 0), P = !s && o !== void 0, F = S ?? E("cellLabel");
|
|
24
|
+
return /* @__PURE__ */ c("div", {
|
|
25
|
+
ref: T,
|
|
26
|
+
className: ["planning-grid", C].filter(Boolean).join(" "),
|
|
27
|
+
...w,
|
|
28
|
+
children: /* @__PURE__ */ c("div", {
|
|
29
|
+
className: "planning-grid__wrap",
|
|
30
|
+
children: /* @__PURE__ */ l("table", {
|
|
31
|
+
className: "planning-grid__table",
|
|
32
|
+
children: [
|
|
33
|
+
/* @__PURE__ */ c("caption", {
|
|
34
|
+
className: "visually-hidden",
|
|
35
|
+
children: E("label", x)
|
|
36
|
+
}),
|
|
37
|
+
/* @__PURE__ */ c("thead", { children: /* @__PURE__ */ l("tr", { children: [
|
|
38
|
+
/* @__PURE__ */ c("th", {
|
|
39
|
+
className: "planning-grid__corner",
|
|
40
|
+
scope: "col",
|
|
41
|
+
children: u
|
|
42
|
+
}),
|
|
43
|
+
r.map((e) => /* @__PURE__ */ l("th", {
|
|
44
|
+
scope: "col",
|
|
45
|
+
className: ["planning-grid__column-header", e.current ? "planning-grid__column-header--current" : ""].filter(Boolean).join(" "),
|
|
46
|
+
children: [e.label ?? e.name, e.sublabel ? /* @__PURE__ */ c("span", {
|
|
47
|
+
className: "planning-grid__column-sub",
|
|
48
|
+
children: e.sublabel
|
|
49
|
+
}) : null]
|
|
50
|
+
}, e.key)),
|
|
51
|
+
f ? /* @__PURE__ */ c("th", {
|
|
52
|
+
className: "planning-grid__column-header",
|
|
53
|
+
scope: "col",
|
|
54
|
+
children: E("rowTotal")
|
|
55
|
+
}) : null
|
|
56
|
+
] }) }),
|
|
57
|
+
/* @__PURE__ */ c("tbody", { children: n.map((e) => /* @__PURE__ */ l("tr", { children: [
|
|
58
|
+
/* @__PURE__ */ c("th", {
|
|
59
|
+
className: "planning-grid__row-header",
|
|
60
|
+
scope: "row",
|
|
61
|
+
children: e.label ?? e.name
|
|
62
|
+
}),
|
|
63
|
+
r.map((t) => {
|
|
64
|
+
let n = D.get(d(e.id, t.key)), r = s || e.readOnly || t.readOnly || n?.readOnly || !P, i = n?.value ?? null;
|
|
65
|
+
return /* @__PURE__ */ c("td", {
|
|
66
|
+
className: [
|
|
67
|
+
"planning-grid__cell",
|
|
68
|
+
r ? "planning-grid__cell--readonly" : "",
|
|
69
|
+
n?.pending ? "planning-grid__cell--pending" : ""
|
|
70
|
+
].filter(Boolean).join(" "),
|
|
71
|
+
children: r ? i ? k(i) : null : /* @__PURE__ */ c(p, {
|
|
72
|
+
value: i,
|
|
73
|
+
max: _,
|
|
74
|
+
size: b,
|
|
75
|
+
locale: v,
|
|
76
|
+
error: n?.error,
|
|
77
|
+
label: F(e.name, t.name),
|
|
78
|
+
onCommit: (n) => o?.(e.id, t.key, n)
|
|
79
|
+
}, `${e.id}-${t.key}-${i ?? ""}`)
|
|
80
|
+
}, t.key);
|
|
81
|
+
}),
|
|
82
|
+
f ? /* @__PURE__ */ c("td", {
|
|
83
|
+
className: "planning-grid__footer-cell",
|
|
84
|
+
children: k(j(e.id))
|
|
85
|
+
}) : null
|
|
86
|
+
] }, e.id)) }),
|
|
87
|
+
m || (g || h) && N ? /* @__PURE__ */ l("tfoot", { children: [
|
|
88
|
+
m ? /* @__PURE__ */ l("tr", { children: [
|
|
89
|
+
/* @__PURE__ */ c("th", {
|
|
90
|
+
className: "planning-grid__footer-header",
|
|
91
|
+
scope: "row",
|
|
92
|
+
children: E("columnTotal")
|
|
93
|
+
}),
|
|
94
|
+
r.map((e) => /* @__PURE__ */ c("td", {
|
|
95
|
+
className: "planning-grid__footer-cell",
|
|
96
|
+
children: k(M(e.key))
|
|
97
|
+
}, e.key)),
|
|
98
|
+
f ? /* @__PURE__ */ c("td", {
|
|
99
|
+
className: "planning-grid__footer-cell",
|
|
100
|
+
children: k(n.reduce((e, t) => e + j(t.id), 0))
|
|
101
|
+
}) : null
|
|
102
|
+
] }) : null,
|
|
103
|
+
h && N ? /* @__PURE__ */ l("tr", { children: [
|
|
104
|
+
/* @__PURE__ */ c("th", {
|
|
105
|
+
className: "planning-grid__footer-header",
|
|
106
|
+
scope: "row",
|
|
107
|
+
children: E("capacity")
|
|
108
|
+
}),
|
|
109
|
+
r.map((e) => /* @__PURE__ */ c("td", {
|
|
110
|
+
className: "planning-grid__footer-cell",
|
|
111
|
+
children: e.capacity === void 0 ? null : k(e.capacity)
|
|
112
|
+
}, e.key)),
|
|
113
|
+
f ? /* @__PURE__ */ c("td", { className: "planning-grid__footer-cell" }) : null
|
|
114
|
+
] }) : null,
|
|
115
|
+
g && N ? /* @__PURE__ */ l("tr", { children: [
|
|
116
|
+
/* @__PURE__ */ c("th", {
|
|
117
|
+
className: "planning-grid__footer-header",
|
|
118
|
+
scope: "row",
|
|
119
|
+
children: E("remaining")
|
|
120
|
+
}),
|
|
121
|
+
r.map((e) => {
|
|
122
|
+
if (e.capacity === void 0) return /* @__PURE__ */ c("td", { className: "planning-grid__footer-cell" }, e.key);
|
|
123
|
+
let n = e.capacity - M(e.key), r = n < 0;
|
|
124
|
+
return /* @__PURE__ */ l("td", {
|
|
125
|
+
className: ["planning-grid__footer-cell", r ? "planning-grid__footer-cell--over" : ""].filter(Boolean).join(" "),
|
|
126
|
+
children: [k(n), r ? /* @__PURE__ */ c(t, { children: ` (${E("over")})` }) : null]
|
|
127
|
+
}, e.key);
|
|
128
|
+
}),
|
|
129
|
+
f ? /* @__PURE__ */ c("td", { className: "planning-grid__footer-cell" }) : null
|
|
130
|
+
] }) : null
|
|
131
|
+
] }) : null
|
|
132
|
+
]
|
|
133
|
+
})
|
|
134
|
+
})
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
function p({ value: e, max: r, size: a, locale: d, error: f, label: p, onCommit: m }) {
|
|
138
|
+
let h = e === null ? "" : new Intl.NumberFormat(d, { maximumFractionDigits: 2 }).format(e), [g, _] = o(h), v = i(), y = () => {
|
|
139
|
+
let t = u(g);
|
|
140
|
+
if (t === null) {
|
|
141
|
+
_(h);
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
let n = Math.min(r, t);
|
|
145
|
+
n !== (e ?? 0) && m(n);
|
|
146
|
+
};
|
|
147
|
+
return /* @__PURE__ */ l(s, { children: [/* @__PURE__ */ c(n, {
|
|
148
|
+
className: "planning-grid__input",
|
|
149
|
+
size: a,
|
|
150
|
+
inputMode: "decimal",
|
|
151
|
+
"aria-label": p,
|
|
152
|
+
"aria-describedby": f ? v : void 0,
|
|
153
|
+
error: !!f,
|
|
154
|
+
value: g,
|
|
155
|
+
onChange: (e) => _(e.target.value),
|
|
156
|
+
onBlur: y,
|
|
157
|
+
onKeyDown: (e) => {
|
|
158
|
+
e.key === "Enter" && (e.preventDefault(), e.currentTarget.blur());
|
|
159
|
+
}
|
|
160
|
+
}), f ? /* @__PURE__ */ c(t, {
|
|
161
|
+
id: v,
|
|
162
|
+
role: "alert",
|
|
163
|
+
children: f
|
|
164
|
+
}) : null] });
|
|
165
|
+
}
|
|
166
|
+
//#endregion
|
|
167
|
+
export { f as PlanningGrid };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.recurrence-field{gap:var(--recurrence-field-gap);flex-direction:column;display:flex}.recurrence-field__row{gap:var(--recurrence-field-row-gap);flex-wrap:wrap;display:flex}.recurrence-field__interval{inline-size:var(--recurrence-field-interval-width);flex:none}.recurrence-field__end{flex:12rem;min-inline-size:0}.recurrence-field__weekdays-label{font-size:var(--recurrence-field-legend-font-size);font-weight:var(--recurrence-field-legend-font-weight);color:var(--recurrence-field-legend-color);margin-block-end:var(--recurrence-field-legend-margin-block-end);display:block}.recurrence-field__weekdays{gap:var(--recurrence-field-weekdays-gap);flex-wrap:wrap;display:flex}
|