@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.
Files changed (54) hide show
  1. package/CHANGELOG.md +118 -0
  2. package/dist/_shared/tokens.js +160 -0
  3. package/dist/_types/messages/BrandMessages.d.ts +13 -1
  4. package/dist/_types/messages/index.d.ts +1 -1
  5. package/dist/_types/molecules/ClockWidget/ClockWidget.d.ts +116 -0
  6. package/dist/_types/molecules/ClockWidget/clockDuration.d.ts +23 -0
  7. package/dist/_types/molecules/Heatmap/Heatmap.d.ts +101 -0
  8. package/dist/_types/molecules/Heatmap/heatmapScale.d.ts +39 -0
  9. package/dist/_types/molecules/RecurrenceField/RecurrenceField.d.ts +93 -0
  10. package/dist/_types/molecules/RecurrenceField/recurrenceRule.d.ts +62 -0
  11. package/dist/_types/molecules/Timeline/Timeline.d.ts +77 -0
  12. package/dist/_types/organisms/OrgChart/OrgChart.d.ts +104 -0
  13. package/dist/_types/organisms/PlanningGrid/PlanningGrid.d.ts +120 -0
  14. package/dist/_types/organisms/PlanningGrid/planningHours.d.ts +10 -0
  15. package/dist/brand.css +396 -1
  16. package/dist/clock-widget.css +1 -0
  17. package/dist/clock-widget.js +126 -0
  18. package/dist/heatmap.css +1 -0
  19. package/dist/heatmap.js +104 -0
  20. package/dist/org-chart.css +1 -0
  21. package/dist/org-chart.js +122 -0
  22. package/dist/planning-grid.css +1 -0
  23. package/dist/planning-grid.js +167 -0
  24. package/dist/recurrence-field.css +1 -0
  25. package/dist/recurrence-field.js +185 -0
  26. package/dist/timeline.css +1 -0
  27. package/dist/timeline.js +57 -0
  28. package/dist/tokens.css +414 -1
  29. package/package.json +31 -1
  30. package/src/tokens/index.css +6 -0
  31. package/src/tokens/molecules/clock-widget.css +36 -0
  32. package/src/tokens/molecules/clock-widget.ts +7 -0
  33. package/src/tokens/molecules/heatmap.css +78 -0
  34. package/src/tokens/molecules/heatmap.ts +7 -0
  35. package/src/tokens/molecules/org-chart.css +59 -0
  36. package/src/tokens/molecules/org-chart.ts +7 -0
  37. package/src/tokens/molecules/planning-grid.css +58 -0
  38. package/src/tokens/molecules/planning-grid.ts +7 -0
  39. package/src/tokens/molecules/recurrence-field.css +21 -0
  40. package/src/tokens/molecules/recurrence-field.ts +7 -0
  41. package/src/tokens/molecules/timeline.css +36 -0
  42. package/src/tokens/molecules/timeline.ts +7 -0
  43. package/src/tokens/scss/_index.legacy.scss +6 -0
  44. package/src/tokens/scss/_index.scss +6 -0
  45. package/src/tokens/scss/molecules/_clock-widget.scss +22 -0
  46. package/src/tokens/scss/molecules/_heatmap.scss +48 -0
  47. package/src/tokens/scss/molecules/_org-chart.scss +39 -0
  48. package/src/tokens/scss/molecules/_planning-grid.scss +36 -0
  49. package/src/tokens/scss/molecules/_recurrence-field.scss +11 -0
  50. package/src/tokens/scss/molecules/_timeline.scss +22 -0
  51. package/src/tokens/surface-invert.css +56 -0
  52. package/src/tokens/surface-light.css +56 -0
  53. package/src/tokens/surface-public.css +7 -0
  54. 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 };
@@ -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)}
@@ -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}