@krosoft/react 0.0.293 → 0.0.295

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 (69) hide show
  1. package/README.md +3 -0
  2. package/dist/{AppActions-CpbkO_3O.js → AppActions-NdUYh2ii.js} +2 -2
  3. package/dist/{AppSubTitle-BOVTZlUB.js → AppSubTitle-CunCNtvJ.js} +1 -1
  4. package/dist/ErrorAlert-0L-Dwqu8.js +37 -0
  5. package/dist/GenericForm-CLgO9HuL.js +311 -0
  6. package/dist/{ImageInput-BPNEywyf.js → ImageInput-DYGqUTBi.js} +2 -2
  7. package/dist/MultiSelect-CXnF_D0R.js +146 -0
  8. package/dist/SearchInput-DDcL_q7h.js +318 -0
  9. package/dist/{cards-BBgGXmYa.js → cards-BB6V8VWw.js} +1 -1
  10. package/dist/components/core/cards/index.js +1 -1
  11. package/dist/components/core/dialogs/AppDialog.d.ts +40 -6
  12. package/dist/components/core/dialogs/AppDialog.d.ts.map +1 -1
  13. package/dist/components/core/dialogs/FormDialog.d.ts +8 -1
  14. package/dist/components/core/dialogs/FormDialog.d.ts.map +1 -1
  15. package/dist/components/core/dialogs/index.d.ts +1 -1
  16. package/dist/components/core/dialogs/index.d.ts.map +1 -1
  17. package/dist/components/core/dialogs/index.js +3 -3
  18. package/dist/components/core/filters/FilterField.d.ts.map +1 -1
  19. package/dist/components/core/filters/FilterPills.d.ts +1 -1
  20. package/dist/components/core/filters/TableFilter.d.ts.map +1 -1
  21. package/dist/components/core/filters/index.d.ts +0 -1
  22. package/dist/components/core/filters/index.d.ts.map +1 -1
  23. package/dist/components/core/filters/index.js +138 -255
  24. package/dist/components/core/forms/GenericForm.d.ts +4 -3
  25. package/dist/components/core/forms/GenericForm.d.ts.map +1 -1
  26. package/dist/components/core/forms/index.js +1 -1
  27. package/dist/components/core/index.js +22 -22
  28. package/dist/components/core/inputs/MultiSelect.d.ts +20 -8
  29. package/dist/components/core/inputs/MultiSelect.d.ts.map +1 -1
  30. package/dist/components/core/inputs/SingleSelect.d.ts +32 -0
  31. package/dist/components/core/inputs/SingleSelect.d.ts.map +1 -0
  32. package/dist/components/core/inputs/index.d.ts +3 -2
  33. package/dist/components/core/inputs/index.d.ts.map +1 -1
  34. package/dist/components/core/inputs/index.js +5 -5
  35. package/dist/components/core/language/index.js +1 -1
  36. package/dist/components/core/layouts/index.js +6 -6
  37. package/dist/components/core/navbar/index.js +1 -1
  38. package/dist/components/core/states/ErrorAlert.d.ts +5 -2
  39. package/dist/components/core/states/ErrorAlert.d.ts.map +1 -1
  40. package/dist/components/core/states/index.js +2 -2
  41. package/dist/components/core/table/index.js +3 -3
  42. package/dist/components/core/tabs/index.js +4 -4
  43. package/dist/components/core/theme/index.js +1 -1
  44. package/dist/components/index.js +24 -24
  45. package/dist/components/ui/button.d.ts.map +1 -1
  46. package/dist/components/ui/index.js +4 -4
  47. package/dist/dialogs-DVHdqXlO.js +217 -0
  48. package/dist/{inputs-CUNf48Vk.js → inputs-DG8o5DMW.js} +3 -3
  49. package/dist/{language-DOGOdjzx.js → language-BvPG7v7d.js} +2 -2
  50. package/dist/{navbar-CCHGdEzE.js → navbar-CU6zaS92.js} +2 -2
  51. package/dist/{select-DmLScQKX.js → select-CsXmG_sJ.js} +1 -1
  52. package/dist/{sheet-DQTOen4V.js → sheet-4VOGdoiW.js} +1 -1
  53. package/dist/{states-BQK9jqS4.js → states-C4MdmAbW.js} +1 -1
  54. package/dist/tailwind/index.d.ts +5 -0
  55. package/dist/tailwind/index.d.ts.map +1 -1
  56. package/dist/tailwind/index.js +5 -0
  57. package/dist/{theme-q2uzluEd.js → theme-uTxCKUip.js} +2 -2
  58. package/dist/{tooltip-BmZ9Bfou.js → tooltip-CWdde1-y.js} +1 -1
  59. package/dist/{ui-D8Pg34YW.js → ui-rJqnHWNK.js} +3 -3
  60. package/package.json +1 -1
  61. package/dist/ErrorAlert-L2s8Dd1_.js +0 -27
  62. package/dist/GenericForm-BdKwapAz.js +0 -309
  63. package/dist/MultiSelect-O4JP5fRO.js +0 -129
  64. package/dist/SearchInput-BSIjKB_9.js +0 -259
  65. package/dist/components/core/filters/SearchableFilterPill.d.ts +0 -17
  66. package/dist/components/core/filters/SearchableFilterPill.d.ts.map +0 -1
  67. package/dist/components/core/inputs/SearchableSelect.d.ts +0 -28
  68. package/dist/components/core/inputs/SearchableSelect.d.ts.map +0 -1
  69. package/dist/dialogs-BxyPBIc6.js +0 -207
@@ -1,259 +0,0 @@
1
- import { t as e } from "./tailwind.helper-CJaRYBmL.js";
2
- import { r as t, t as n } from "./i18n-d2p0RJo9.js";
3
- import { En as r } from "./ui-D8Pg34YW.js";
4
- import { o as i, s as a } from "./tooltip-BmZ9Bfou.js";
5
- import { C as o, S as s, _ as c, b as l, g as u, h as d, m as f, p, x as m, y as h } from "./sheet-DQTOen4V.js";
6
- import * as g from "react";
7
- import { useEffect as _, useMemo as v, useRef as y, useState as b } from "react";
8
- import { jsx as x, jsxs as S } from "react/jsx-runtime";
9
- import { CalendarIcon as C, CheckIcon as w, ChevronDownIcon as T, PlusIcon as E, SearchIcon as D, XIcon as O } from "lucide-react";
10
- import { format as k } from "date-fns";
11
- //#region src/components/core/inputs/DatePicker.tsx
12
- var A = ({ date: n, onDateChange: i, placeholder: o }) => {
13
- let s = t(), [c, l] = b(!1), u = y(null);
14
- return _(() => {
15
- if (!c) return;
16
- let e = (e) => {
17
- u.current !== null && !u.current.contains(e.target) && l(!1);
18
- };
19
- return document.addEventListener("mousedown", e), () => {
20
- document.removeEventListener("mousedown", e);
21
- };
22
- }, [c]), /* @__PURE__ */ S("div", {
23
- ref: u,
24
- className: "relative w-full",
25
- children: [/* @__PURE__ */ S(a, {
26
- variant: "outline",
27
- type: "button",
28
- onClick: () => {
29
- l((e) => !e);
30
- },
31
- className: e("w-full justify-start text-left font-normal focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2", c && "ring-2 ring-ring ring-offset-2", n === void 0 && "text-muted-foreground"),
32
- children: [/* @__PURE__ */ x(C, { className: "mr-2 size-4 shrink-0" }), n === void 0 ? /* @__PURE__ */ x("span", { children: o }) : k(n, "dd/MM/yyyy", { locale: s })]
33
- }), c ? /* @__PURE__ */ x("div", {
34
- className: "absolute left-0 top-[calc(100%+4px)] z-[100] rounded-surface border bg-popover text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95 slide-in-from-top-2",
35
- children: /* @__PURE__ */ x(r, {
36
- mode: "single",
37
- locale: s,
38
- defaultMonth: n,
39
- selected: n,
40
- onSelect: (e) => {
41
- i(e), l(!1);
42
- }
43
- })
44
- }) : null]
45
- });
46
- }, j = (e) => e ? {
47
- from: e.from,
48
- to: e.to
49
- } : void 0, M = ({ value: i, onChange: o, placeholder: s, className: c }) => {
50
- let { t: l } = n(), u = t(), [m, h] = g.useState(!1), [_, v] = g.useState(j(i));
51
- return g.useEffect(() => {
52
- m && v(j(i));
53
- }, [m, i]), /* @__PURE__ */ x("div", {
54
- className: e("grid gap-2", c),
55
- children: /* @__PURE__ */ S(p, {
56
- open: m,
57
- onOpenChange: h,
58
- children: [/* @__PURE__ */ x(d, {
59
- asChild: !0,
60
- children: /* @__PURE__ */ S(a, {
61
- id: "date",
62
- variant: "outline",
63
- className: e("w-[300px] justify-start text-left font-normal", !i?.from && "text-muted-foreground"),
64
- children: [
65
- /* @__PURE__ */ x(C, { className: "mr-2 size-4" }),
66
- ((e) => e?.from ? !e.to || e.from.getTime() === e.to.getTime() ? k(e.from, "dd MMM yyyy", { locale: u }) : `${k(e.from, "dd MMM yyyy", { locale: u })} - ${k(e.to, "dd MMM yyyy", { locale: u })}` : s ?? l("date.pickPeriod"))(i),
67
- i?.from && /* @__PURE__ */ x(a, {
68
- type: "button",
69
- variant: "ghost",
70
- size: "icon",
71
- "aria-label": l("date.clearPeriod"),
72
- className: "ml-auto h-5 w-5 opacity-50 hover:opacity-100",
73
- onClick: (e) => {
74
- e.stopPropagation(), o(void 0), h(!1);
75
- },
76
- children: /* @__PURE__ */ x(O, { className: "size-4" })
77
- })
78
- ]
79
- })
80
- }), /* @__PURE__ */ S(f, {
81
- className: "w-auto p-0",
82
- align: "start",
83
- side: "bottom",
84
- sideOffset: 4,
85
- children: [/* @__PURE__ */ x(r, {
86
- mode: "range",
87
- resetOnSelect: !0,
88
- defaultMonth: _?.from,
89
- selected: _,
90
- onSelect: v,
91
- numberOfMonths: 2,
92
- locale: u,
93
- className: "pointer-events-auto p-3"
94
- }), /* @__PURE__ */ S("div", {
95
- className: "flex items-center justify-between border-t border-border px-3 py-2",
96
- children: [/* @__PURE__ */ x(a, {
97
- variant: "ghost",
98
- size: "sm",
99
- onClick: () => {
100
- v(void 0);
101
- },
102
- children: l("actions.clear")
103
- }), /* @__PURE__ */ S("div", {
104
- className: "flex gap-2",
105
- children: [/* @__PURE__ */ x(a, {
106
- variant: "ghost",
107
- size: "sm",
108
- onClick: () => {
109
- v(j(i)), h(!1);
110
- },
111
- children: l("actions.cancel")
112
- }), /* @__PURE__ */ x(a, {
113
- size: "sm",
114
- onClick: () => {
115
- o(_), h(!1);
116
- },
117
- children: l("actions.apply")
118
- })]
119
- })]
120
- })]
121
- })]
122
- })
123
- });
124
- }, N = ({ options: t = [], value: r, onChange: a, onClear: u, onCreate: g, placeholder: _, searchPlaceholder: y, emptyLabel: C, createLabel: D, disabled: k = !1, modal: A = !0, className: j }) => {
125
- let { t: M } = n(), [N, P] = b(!1), [F, I] = b(""), L = r !== void 0 && r !== "", R = v(() => L ? t.find((e) => e.value === r) : void 0, [
126
- L,
127
- t,
128
- r
129
- ]), z = L ? R?.label ?? r : void 0, B = F.trim(), V = g !== void 0 && B !== "" && !t.some((e) => e.label.toLowerCase() === B.toLowerCase()), H = (e) => {
130
- P(e), e || I("");
131
- }, U = (e) => {
132
- a(e), H(!1);
133
- };
134
- return /* @__PURE__ */ S(p, {
135
- open: N,
136
- onOpenChange: H,
137
- modal: A,
138
- children: [/* @__PURE__ */ x(d, {
139
- asChild: !0,
140
- children: /* @__PURE__ */ S("button", {
141
- type: "button",
142
- role: "combobox",
143
- "aria-expanded": N,
144
- disabled: k,
145
- className: e(i, "w-full", "data-[state=open]:ring-2 data-[state=open]:ring-ring data-[state=open]:ring-offset-2", !L && "text-muted-foreground", j),
146
- children: [/* @__PURE__ */ S("span", {
147
- className: "flex items-center truncate",
148
- children: [
149
- R?.color && /* @__PURE__ */ x("span", {
150
- className: "mr-2 size-2.5 shrink-0 rounded-full",
151
- style: { backgroundColor: R.color }
152
- }),
153
- /* @__PURE__ */ x("span", {
154
- className: "truncate",
155
- children: z ?? _ ?? M("select.placeholder")
156
- }),
157
- R?.description !== void 0 && /* @__PURE__ */ S("span", {
158
- className: "ml-1 truncate text-muted-foreground",
159
- children: [
160
- "(",
161
- R.description,
162
- ")"
163
- ]
164
- })
165
- ]
166
- }), /* @__PURE__ */ S("div", {
167
- className: "flex items-center gap-1",
168
- children: [u && L && !k && /* @__PURE__ */ x("span", {
169
- role: "button",
170
- tabIndex: -1,
171
- onClick: (e) => {
172
- e.stopPropagation();
173
- },
174
- onPointerDown: (e) => {
175
- e.preventDefault(), e.stopPropagation(), u();
176
- },
177
- className: "text-muted-foreground hover:text-foreground",
178
- children: /* @__PURE__ */ x(O, { className: "size-4" })
179
- }), /* @__PURE__ */ x(T, { className: e("size-4 shrink-0 opacity-50 transition-transform", N && "rotate-180") })]
180
- })]
181
- })
182
- }), /* @__PURE__ */ x(f, {
183
- className: "w-[var(--radix-popover-trigger-width)] p-0",
184
- align: "start",
185
- children: /* @__PURE__ */ S(c, {
186
- filter: (e, t, n) => +!!(n ?? []).join(" ").toLowerCase().includes(t.trim().toLowerCase()),
187
- children: [/* @__PURE__ */ x(m, {
188
- placeholder: y ?? M("search.placeholder"),
189
- value: F,
190
- onValueChange: I
191
- }), /* @__PURE__ */ S(o, { children: [!V && /* @__PURE__ */ x(h, { children: C ?? M("states.noResult") }), /* @__PURE__ */ S(l, { children: [t.map((t) => /* @__PURE__ */ S(s, {
192
- value: t.value,
193
- keywords: [t.label, t.description ?? ""],
194
- onSelect: () => {
195
- U(t.value);
196
- },
197
- children: [
198
- /* @__PURE__ */ x(w, { className: e("mr-2 size-4 shrink-0", r === t.value ? "opacity-100" : "opacity-0") }),
199
- t.color !== void 0 && /* @__PURE__ */ x("span", {
200
- className: "mr-2 size-2.5 shrink-0 rounded-full",
201
- style: { backgroundColor: t.color }
202
- }),
203
- /* @__PURE__ */ x("span", {
204
- className: "truncate",
205
- children: t.label
206
- }),
207
- t.description !== void 0 && /* @__PURE__ */ S("span", {
208
- className: "ml-1 truncate text-muted-foreground",
209
- children: [
210
- "(",
211
- t.description,
212
- ")"
213
- ]
214
- })
215
- ]
216
- }, t.value)), V && /* @__PURE__ */ S(s, {
217
- forceMount: !0,
218
- value: "__create__",
219
- onSelect: () => {
220
- g?.(B), H(!1);
221
- },
222
- children: [/* @__PURE__ */ x(E, { className: "mr-2 size-4 shrink-0" }), /* @__PURE__ */ x("span", {
223
- className: "truncate",
224
- children: D ? D(B) : M("select.create", { search: B })
225
- })]
226
- })] })] })]
227
- })
228
- })]
229
- });
230
- }, P = ({ searchQuery: t, search: r, placeholder: i, onSearch: a, onSubmit: o, onClear: s, className: c }) => {
231
- let { t: l } = n(), d = t ?? r ?? "";
232
- return /* @__PURE__ */ S("div", {
233
- className: e("relative h-fit w-full md:w-64", c),
234
- children: [
235
- /* @__PURE__ */ x(D, { className: "absolute left-3 top-1/2 transform -translate-y-1/2 text-muted-foreground w-4 h-4" }),
236
- /* @__PURE__ */ x(u, {
237
- placeholder: i ?? l("search.placeholder"),
238
- value: d,
239
- onChange: (e) => {
240
- a(e.target.value);
241
- },
242
- className: "pl-8",
243
- onKeyDown: (e) => {
244
- e.key === "Enter" && o !== void 0 && (e.preventDefault(), o());
245
- }
246
- }),
247
- d === "" ? null : /* @__PURE__ */ x("button", {
248
- onClick: () => {
249
- a(""), s !== void 0 && s();
250
- },
251
- className: "absolute right-3 top-1/2 -translate-y-1/2 text-gray-500 hover:text-gray-700",
252
- type: "button",
253
- children: /* @__PURE__ */ x(O, { className: "size-4" })
254
- })
255
- ]
256
- });
257
- };
258
- //#endregion
259
- export { A as i, N as n, M as r, P as t };
@@ -1,17 +0,0 @@
1
- export interface FilterOption {
2
- value: string;
3
- label: string;
4
- color?: string;
5
- }
6
- export declare function SearchableFilterPill<T extends string>({ labelKey, options, selected, onToggle, onClear, onSelectAll, searchable, searchPlaceholder, className, }: {
7
- labelKey: string;
8
- options: FilterOption[];
9
- selected: T[];
10
- onToggle: (value: T) => void;
11
- onClear?: () => void;
12
- onSelectAll?: (values: T[]) => void;
13
- searchable?: boolean;
14
- searchPlaceholder?: string;
15
- className?: string;
16
- }): React.ReactElement;
17
- //# sourceMappingURL=SearchableFilterPill.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SearchableFilterPill.d.ts","sourceRoot":"","sources":["../../../../src/components/core/filters/SearchableFilterPill.tsx"],"names":[],"mappings":"AAMA,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,MAAM,EAAE,EACrD,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,WAAW,EACX,UAAkB,EAClB,iBAAiB,EACjB,SAAiC,GAClC,EAAE;IACD,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,QAAQ,EAAE,CAAC,EAAE,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC;IACpC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,KAAK,CAAC,YAAY,CA4IrB"}
@@ -1,28 +0,0 @@
1
- import React from "react";
2
- import type { SelectOption } from "@krosoft/core/types";
3
- export interface SearchableSelectOption extends SelectOption {
4
- /** Texte secondaire affiché en gris à côté du libellé (ex. le groupe d'un tenant). Inclus dans la recherche. */
5
- description?: string;
6
- }
7
- interface SearchableSelectProps {
8
- options?: SearchableSelectOption[];
9
- value: string | undefined;
10
- onChange: (value: string) => void;
11
- onClear?: () => void;
12
- /** Fourni : propose de créer une option quand la saisie ne correspond à aucun libellé existant. */
13
- onCreate?: (label: string) => void;
14
- placeholder?: string;
15
- searchPlaceholder?: string;
16
- emptyLabel?: string;
17
- createLabel?: (search: string) => string;
18
- disabled?: boolean;
19
- /**
20
- * Panneau rendu en modal (défaut, comme le `Select`). À laisser tel quel dans une boîte de
21
- * dialogue : sans ça, le `Dialog` neutralise les clics sur le panneau porté dans le portail.
22
- */
23
- modal?: boolean;
24
- className?: string;
25
- }
26
- export declare const SearchableSelect: ({ options, value, onChange, onClear, onCreate, placeholder, searchPlaceholder, emptyLabel, createLabel, disabled, modal, className, }: SearchableSelectProps) => React.ReactElement;
27
- export {};
28
- //# sourceMappingURL=SearchableSelect.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SearchableSelect.d.ts","sourceRoot":"","sources":["../../../../src/components/core/inputs/SearchableSelect.tsx"],"names":[],"mappings":"AACA,OAAO,KAA4B,MAAM,OAAO,CAAC;AAejD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,MAAM,WAAW,sBAAuB,SAAQ,YAAY;IAC1D,gHAAgH;IAChH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,UAAU,qBAAqB;IAC7B,OAAO,CAAC,EAAE,sBAAsB,EAAE,CAAC;IACnC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,mGAAmG;IACnG,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC;IACzC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,gBAAgB,GAAI,uIAa9B,qBAAqB,KAAG,KAAK,CAAC,YAiHhC,CAAC"}
@@ -1,207 +0,0 @@
1
- import { t as e } from "./i18n-d2p0RJo9.js";
2
- import { Bn as t, Gn as n, Hn as r, I as i, Kn as a, Un as o, Wn as s, qn as c } from "./ui-D8Pg34YW.js";
3
- import { n as l, t as u } from "./alert-REQGK9bR.js";
4
- import { s as d } from "./tooltip-BmZ9Bfou.js";
5
- import { E as f, O as p, P as m, j as h, k as g } from "./sheet-DQTOen4V.js";
6
- import { t as _ } from "./GenericForm-BdKwapAz.js";
7
- import { t as v } from "./ErrorAlert-L2s8Dd1_.js";
8
- import { useEffect as y, useState as b } from "react";
9
- import { Fragment as x, jsx as S, jsxs as C } from "react/jsx-runtime";
10
- import { AlertCircleIcon as w, Pen as T, Save as E, X as D } from "lucide-react";
11
- //#region src/components/core/dialogs/AppDialog.tsx
12
- function O({ open: t, onOpenChange: n, config: r, isLoading: a, error: o, children: s }) {
13
- let { t: c } = e(), { title: _, description: v, icon: y, maxWidth: b = "sm:max-w-xl", actions: x } = r;
14
- return /* @__PURE__ */ S(f, {
15
- open: t,
16
- onOpenChange: n,
17
- children: /* @__PURE__ */ C(p, {
18
- className: `${b} max-h-[100dvh] sm:max-h-[90vh] border-0 shadow-2xl p-0 flex flex-col overflow-hidden`,
19
- children: [
20
- a === !0 ? /* @__PURE__ */ S("div", {
21
- className: "absolute top-0 left-0 right-0 z-10",
22
- children: /* @__PURE__ */ S(i, {
23
- indeterminate: !0,
24
- className: "h-1 rounded-none"
25
- })
26
- }) : null,
27
- /* @__PURE__ */ C(h, {
28
- className: "bg-gradient-to-r from-slate-900 to-purple-700 p-4 sm:p-6 sm:rounded-t-surface shrink-0",
29
- children: [/* @__PURE__ */ C(m, {
30
- className: "text-xl sm:text-2xl font-bold flex items-center gap-2 text-white",
31
- children: [y === void 0 ? null : /* @__PURE__ */ S("div", {
32
- className: "p-2 bg-white/20 rounded-control",
33
- children: /* @__PURE__ */ S(y, { className: "size-4 text-white" })
34
- }), c(_)]
35
- }), v !== void 0 && v !== "" ? /* @__PURE__ */ S(g, {
36
- className: "text-indigo-100 text-base",
37
- children: c(v)
38
- }) : null]
39
- }),
40
- o == null ? null : /* @__PURE__ */ S("div", {
41
- className: "px-6 ",
42
- children: /* @__PURE__ */ C(u, {
43
- variant: "destructive",
44
- className: "max-w-full",
45
- children: [/* @__PURE__ */ S(w, { className: "size-4" }), /* @__PURE__ */ S(l, {
46
- className: "break-words overflow-wrap-anywhere max-w-full",
47
- children: o.message
48
- })]
49
- })
50
- }),
51
- /* @__PURE__ */ S("div", {
52
- className: "flex-1 overflow-y-auto px-4 sm:px-6 py-4",
53
- children: s
54
- }),
55
- x !== void 0 && x.length > 0 ? /* @__PURE__ */ S("div", {
56
- className: "sm:rounded-b-surface border-t border-gray-200 dark:border-gray-700 shrink-0 p-4 sm:p-6 light:bg-gradient-to-r light:from-gray-50 light:to-gray-100 dark:bg-gray-950",
57
- children: /* @__PURE__ */ S("div", {
58
- className: "flex justify-end gap-3",
59
- children: x.map((e, t) => /* @__PURE__ */ C(d, {
60
- variant: e.variant ?? "default",
61
- onClick: e.onClick,
62
- disabled: e.disabled === !0 || a === !0,
63
- children: [e.icon === void 0 ? null : /* @__PURE__ */ S(e.icon, { className: "size-4" }), c(e.label)]
64
- }, t))
65
- })
66
- }) : null
67
- ]
68
- })
69
- });
70
- }
71
- //#endregion
72
- //#region src/components/core/dialogs/FormDialog.tsx
73
- function k({ open: t, onOpenChange: n, data: r, title: i, headerBadge: a, schema: o, onSave: s, customFooter: c, defaultEditing: l = !1, footerActions: u = !0, saveLabel: f = "Sauvegarder", cancelLabel: p, hideSaveIcon: m = !1, maxWidth: h = "sm:max-w-4xl", isLoading: g = !1 }) {
74
- let { t: v } = e(), [w, k] = b(l), [A, j] = b(!1), [M, N] = b(null);
75
- if (y(() => {
76
- t && k(l);
77
- }, [t, l]), r == null) return null;
78
- let P = () => {
79
- w ? s !== void 0 && M && M() : k(!0);
80
- }, F = () => {
81
- k(!1);
82
- }, I = () => {
83
- s !== void 0 && M && M();
84
- }, L = async (e) => {
85
- if (s) {
86
- j(!0);
87
- try {
88
- await s(e), k(!1);
89
- } catch (e) {
90
- console.error(e);
91
- } finally {
92
- j(!1);
93
- }
94
- }
95
- }, R = [];
96
- s !== void 0 && (w ? (p !== "" && R.push({
97
- label: p ?? v("actions.cancel"),
98
- onClick: F,
99
- variant: "outline",
100
- disabled: A || g,
101
- icon: D
102
- }), R.push({
103
- label: A ? "Enregistrement..." : f,
104
- onClick: I,
105
- variant: "default",
106
- disabled: A || g,
107
- icon: m ? void 0 : E
108
- })) : R.push({
109
- label: v("actions.edit"),
110
- onClick: P,
111
- variant: "outline",
112
- icon: T
113
- }));
114
- let z = {
115
- title: i(r),
116
- maxWidth: h,
117
- actions: u ? R : []
118
- };
119
- return /* @__PURE__ */ S(O, {
120
- open: t,
121
- onOpenChange: (e) => {
122
- n(e), e || F();
123
- },
124
- config: z,
125
- isLoading: A || g,
126
- children: /* @__PURE__ */ C("div", { children: [
127
- a === void 0 ? null : /* @__PURE__ */ S("div", {
128
- className: "mb-4",
129
- children: a(r)
130
- }),
131
- /* @__PURE__ */ S(_, {
132
- schema: o,
133
- initialData: r,
134
- disabled: !w,
135
- onSubmit: (e) => {
136
- L(e);
137
- },
138
- renderActions: !1,
139
- onRegisterSubmit: (e) => {
140
- N(() => e);
141
- },
142
- isLoading: A || g
143
- }),
144
- c === void 0 ? null : c(r),
145
- s !== void 0 && !u ? /* @__PURE__ */ S("div", {
146
- className: "flex justify-end gap-2 border-t pt-4 mt-6",
147
- children: w ? /* @__PURE__ */ C(x, { children: [p === "" ? null : /* @__PURE__ */ C(d, {
148
- onClick: F,
149
- variant: "outline",
150
- size: "sm",
151
- disabled: A || g,
152
- children: [/* @__PURE__ */ S(D, { className: "size-4 mr-2" }), p ?? v("actions.cancel")]
153
- }), /* @__PURE__ */ C(d, {
154
- onClick: I,
155
- size: "sm",
156
- disabled: A || g,
157
- className: "text-white",
158
- children: [m ? null : /* @__PURE__ */ S(E, { className: "size-4 mr-2" }), A ? "Enregistrement..." : f]
159
- })] }) : /* @__PURE__ */ C(d, {
160
- onClick: P,
161
- variant: "outline",
162
- size: "sm",
163
- children: [/* @__PURE__ */ S(T, { className: "size-4 mr-2" }), "Modifier"]
164
- })
165
- }) : null
166
- ] })
167
- });
168
- }
169
- //#endregion
170
- //#region src/components/core/dialogs/ConfirmationDialog.tsx
171
- function A({ isLoading: i, error: l, config: u, destructive: f = !1 }) {
172
- let { t: p } = e();
173
- return u ? /* @__PURE__ */ S(t, {
174
- open: u.isOpen,
175
- onOpenChange: (e) => {
176
- !e && !i && u.onClose();
177
- },
178
- children: /* @__PURE__ */ C(o, { children: [
179
- /* @__PURE__ */ C(a, { children: [
180
- /* @__PURE__ */ C(c, {
181
- className: u.titleClassName,
182
- children: [u.icon && /* @__PURE__ */ S(u.icon, { className: "size-4" }), p(u.title)]
183
- }),
184
- u.headerClassName && /* @__PURE__ */ S(a, { className: u.headerClassName }),
185
- /* @__PURE__ */ S(s, { children: p(u.description) }),
186
- u.itemName && /* @__PURE__ */ S(s, { children: /* @__PURE__ */ S("span", {
187
- className: "font-semibold block my-2",
188
- children: u.itemName
189
- }) })
190
- ] }),
191
- /* @__PURE__ */ S(v, { error: l instanceof Error ? null : l }),
192
- /* @__PURE__ */ C(n, { children: [/* @__PURE__ */ S(r, {
193
- disabled: i,
194
- children: p("common.buttons.cancel")
195
- }), /* @__PURE__ */ S(d, {
196
- onClick: (e) => {
197
- e.preventDefault(), u.onConfirm();
198
- },
199
- disabled: i,
200
- className: f ? "bg-destructive text-destructive-foreground hover:bg-destructive/90" : "",
201
- children: i ? p(u.loadingKey || "common.buttons.loading") : u.confirmKey
202
- })] })
203
- ] })
204
- }) : null;
205
- }
206
- //#endregion
207
- export { k as n, O as r, A as t };